mixdog 0.9.18 → 0.9.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +93 -29
- package/package.json +5 -3
- package/scripts/build-runtime-windows.ps1 +242 -242
- package/scripts/build-tui.mjs +6 -0
- package/scripts/hook-bus-test.mjs +8 -0
- package/scripts/log-writer-guard-smoke.mjs +131 -0
- package/scripts/output-style-smoke.mjs +2 -2
- package/scripts/reactive-compact-persist-smoke.mjs +22 -6
- package/scripts/recall-bench-cases.json +10 -0
- package/scripts/recall-bench.mjs +91 -2
- package/scripts/recall-quality-cases.json +1 -2
- package/scripts/recall-usecase-cases.json +1 -1
- package/scripts/session-ingest-compaction-smoke.mjs +241 -0
- package/scripts/smoke-runtime-negative.ps1 +106 -106
- package/scripts/tool-efficiency-diag.mjs +5 -2
- package/scripts/tool-smoke.mjs +251 -72
- package/src/agents/debugger/AGENT.md +3 -3
- package/src/agents/heavy-worker/AGENT.md +7 -10
- package/src/agents/maintainer/AGENT.md +1 -2
- package/src/agents/reviewer/AGENT.md +1 -2
- package/src/agents/worker/AGENT.md +5 -8
- package/src/defaults/agents.json +3 -0
- package/src/help.mjs +2 -5
- package/src/lib/mixdog-debug.cjs +13 -0
- package/src/mixdog-session-runtime.mjs +7 -3311
- package/src/rules/agent/00-core.md +4 -3
- package/src/rules/agent/30-explorer.md +53 -22
- package/src/rules/lead/02-channels.md +3 -3
- package/src/rules/lead/lead-tool.md +3 -2
- package/src/rules/shared/01-tool.md +24 -29
- package/src/runtime/agent/orchestrator/context/collect.mjs +33 -9
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/anthropic.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/oauth-usage.mjs +24 -3
- package/src/runtime/agent/orchestrator/providers/retry-classifier.mjs +3 -3
- package/src/runtime/agent/orchestrator/session/agent-loop.mjs +663 -0
- package/src/runtime/agent/orchestrator/session/compact/engine.mjs +6 -0
- package/src/runtime/agent/orchestrator/session/context-utils.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/eager-dispatch.mjs +153 -0
- package/src/runtime/agent/orchestrator/session/loop/recall-fasttrack.mjs +49 -0
- package/src/runtime/agent/orchestrator/session/loop/steering-ladder.mjs +250 -35
- package/src/runtime/agent/orchestrator/session/loop/stored-tool-args.mjs +9 -1
- package/src/runtime/agent/orchestrator/session/loop.mjs +8 -1860
- package/src/runtime/agent/orchestrator/session/manager/agent-runtime-singleton.mjs +29 -0
- package/src/runtime/agent/orchestrator/session/manager/ask-session.mjs +686 -0
- package/src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs +60 -12
- package/src/runtime/agent/orchestrator/session/manager/env-utils.mjs +8 -0
- package/src/runtime/agent/orchestrator/session/manager/idle-cleanup.mjs +159 -0
- package/src/runtime/agent/orchestrator/session/manager/message-sanitize.mjs +143 -0
- package/src/runtime/agent/orchestrator/session/manager/prefetch-bridge.mjs +268 -0
- package/src/runtime/agent/orchestrator/session/manager/provider-cache-key.mjs +22 -0
- package/src/runtime/agent/orchestrator/session/manager/runtime-loaders.mjs +26 -0
- package/src/runtime/agent/orchestrator/session/manager/session-close.mjs +124 -0
- package/src/runtime/agent/orchestrator/session/manager/session-crud.mjs +258 -0
- package/src/runtime/agent/orchestrator/session/manager/session-errors.mjs +20 -0
- package/src/runtime/agent/orchestrator/session/manager/session-id.mjs +9 -0
- package/src/runtime/agent/orchestrator/session/manager/session-lifecycle.mjs +475 -0
- package/src/runtime/agent/orchestrator/session/manager/session-lock.mjs +23 -0
- package/src/runtime/agent/orchestrator/session/manager/tool-resolution.mjs +6 -4
- package/src/runtime/agent/orchestrator/session/manager.mjs +88 -2285
- package/src/runtime/agent/orchestrator/session/pre-send-compact.mjs +440 -0
- package/src/runtime/agent/orchestrator/session/send-with-recovery.mjs +153 -0
- package/src/runtime/agent/orchestrator/session/store.mjs +4 -1
- package/src/runtime/agent/orchestrator/session/tool-batch.mjs +642 -0
- package/src/runtime/agent/orchestrator/tools/bash-session.mjs +23 -3
- package/src/runtime/agent/orchestrator/tools/builtin/arg-guard.mjs +198 -6
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +10 -2
- package/src/runtime/agent/orchestrator/tools/builtin/builtin-tools.mjs +13 -15
- package/src/runtime/agent/orchestrator/tools/builtin/read-batch.mjs +6 -1
- package/src/runtime/agent/orchestrator/tools/builtin/read-single-tool.mjs +45 -3
- package/src/runtime/agent/orchestrator/tools/builtin/search-path-diagnostics.mjs +5 -2
- package/src/runtime/agent/orchestrator/tools/builtin/search-tool.mjs +195 -3
- package/src/runtime/agent/orchestrator/tools/builtin/shell-job-paths.mjs +108 -2
- package/src/runtime/agent/orchestrator/tools/builtin/shell-job-process.mjs +15 -3
- package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +7 -0
- package/src/runtime/agent/orchestrator/tools/builtin/shell-runtime.mjs +24 -2
- package/src/runtime/agent/orchestrator/tools/builtin.mjs +17 -1
- package/src/runtime/agent/orchestrator/tools/code-graph/dispatch.mjs +38 -0
- package/src/runtime/agent/orchestrator/tools/code-graph-tool-defs.mjs +4 -4
- package/src/runtime/agent/orchestrator/tools/patch/orchestrator.mjs +2 -2
- package/src/runtime/agent/orchestrator/tools/patch/parsing.mjs +72 -8
- package/src/runtime/agent/orchestrator/tools/shell-policy-danger-target.mjs +5 -1
- package/src/runtime/agent/orchestrator/tools/shell-state.mjs +1 -1
- package/src/runtime/channels/backends/discord-gateway.mjs +14 -1
- package/src/runtime/channels/backends/discord.mjs +43 -1
- package/src/runtime/channels/index.mjs +6 -2096
- package/src/runtime/channels/lib/inbound-handler.mjs +328 -0
- package/src/runtime/channels/lib/inbound-routing.mjs +19 -12
- package/src/runtime/channels/lib/interaction-handlers.mjs +260 -0
- package/src/runtime/channels/lib/memory-client.mjs +32 -14
- package/src/runtime/channels/lib/network-retry.mjs +23 -0
- package/src/runtime/channels/lib/output-forwarder.mjs +38 -7
- package/src/runtime/channels/lib/owned-runtime.mjs +547 -0
- package/src/runtime/channels/lib/owner-heartbeat.mjs +13 -4
- package/src/runtime/channels/lib/runtime-paths.mjs +35 -1
- package/src/runtime/channels/lib/tool-dispatch.mjs +17 -7
- package/src/runtime/channels/lib/transcript-binding.mjs +336 -0
- package/src/runtime/channels/lib/voice-runtime-fetcher.mjs +39 -2
- package/src/runtime/channels/lib/worker-bootstrap.mjs +97 -0
- package/src/runtime/channels/lib/worker-ipc.mjs +201 -0
- package/src/runtime/channels/lib/worker-main.mjs +771 -0
- package/src/runtime/memory/index.mjs +73 -1725
- package/src/runtime/memory/lib/embedding-provider.mjs +4 -2
- package/src/runtime/memory/lib/embedding-worker.mjs +47 -6
- package/src/runtime/memory/lib/http-router.mjs +772 -0
- package/src/runtime/memory/lib/memory-action-handlers.mjs +901 -0
- package/src/runtime/memory/lib/memory-embed.mjs +28 -7
- package/src/runtime/memory/lib/memory-recall-scope-filter.mjs +8 -2
- package/src/runtime/memory/lib/memory-recall-store.mjs +182 -9
- package/src/runtime/memory/lib/query-handlers.mjs +38 -6
- package/src/runtime/memory/lib/recall-format.mjs +106 -6
- package/src/runtime/memory/lib/session-ingest-runtime.mjs +401 -0
- package/src/runtime/memory/lib/session-ingest.mjs +1 -1
- package/src/runtime/shared/atomic-file.mjs +10 -4
- package/src/runtime/shared/background-tasks.mjs +4 -2
- package/src/runtime/shared/tool-execution-contract.mjs +1 -1
- package/src/runtime/shared/tool-result-summary.mjs +1 -1
- package/src/runtime/shared/tool-surface.mjs +30 -1
- package/src/session-runtime/boot-profile.mjs +36 -0
- package/src/session-runtime/channel-config-api.mjs +70 -0
- package/src/session-runtime/config-lifecycle.mjs +1 -1
- package/src/session-runtime/context-status.mjs +181 -0
- package/src/session-runtime/cwd-plugins.mjs +46 -3
- package/src/session-runtime/env.mjs +17 -0
- package/src/session-runtime/lifecycle-api.mjs +242 -0
- package/src/session-runtime/mcp-glue.mjs +24 -3
- package/src/session-runtime/model-route-api.mjs +198 -0
- package/src/session-runtime/output-styles.mjs +44 -10
- package/src/session-runtime/provider-auth-api.mjs +135 -0
- package/src/session-runtime/resource-api.mjs +282 -0
- package/src/session-runtime/runtime-core.mjs +2046 -0
- package/src/session-runtime/session-turn-api.mjs +274 -0
- package/src/session-runtime/tool-catalog.mjs +18 -264
- package/src/session-runtime/tool-defs.mjs +2 -2
- package/src/session-runtime/workflow-agents-api.mjs +238 -0
- package/src/session-runtime/workflow.mjs +16 -1
- package/src/standalone/agent-tool.mjs +2 -2
- package/src/standalone/channel-worker.mjs +78 -5
- package/src/standalone/explore-tool.mjs +1 -1
- package/src/standalone/memory-runtime-proxy.mjs +56 -6
- package/src/tui/App.jsx +88 -97
- package/src/tui/app/channel-pickers.mjs +45 -0
- package/src/tui/app/core-memory-picker.mjs +1 -1
- package/src/tui/app/slash-commands.mjs +0 -1
- package/src/tui/app/slash-dispatch.mjs +0 -16
- package/src/tui/app/transcript-window.mjs +44 -1
- package/src/tui/app/use-mouse-input.mjs +15 -2
- package/src/tui/app/use-prompt-handlers.mjs +7 -94
- package/src/tui/app/use-transcript-scroll.mjs +82 -4
- package/src/tui/app/use-transcript-window.mjs +65 -5
- package/src/tui/components/PromptInput.jsx +33 -64
- package/src/tui/components/ToolExecution.jsx +2 -2
- package/src/tui/dist/index.mjs +7908 -7558
- package/src/tui/engine/context-state.mjs +145 -0
- package/src/tui/engine/prompt-history.mjs +27 -0
- package/src/tui/engine/session-api-ext.mjs +478 -0
- package/src/tui/engine/session-api.mjs +545 -0
- package/src/tui/engine/session-flow.mjs +485 -0
- package/src/tui/engine/turn.mjs +1078 -0
- package/src/tui/engine.mjs +69 -2582
- package/src/tui/index.jsx +7 -0
- package/src/tui/lib/voice-setup.mjs +166 -0
- package/src/tui/paste-attachments.mjs +12 -5
- package/src/tui/prompt-history-store.mjs +125 -12
- package/vendor/ink/build/ink.js +16 -1
- package/vendor/ink/build/output.js +30 -4
- package/vendor/ink/build/render.js +5 -0
- package/scripts/bench/cache-probe-tasks.json +0 -8
- package/scripts/bench/lead-review-tasks-r3.json +0 -20
- package/scripts/bench/lead-review-tasks.json +0 -20
- package/scripts/bench/r4-mixed-tasks.json +0 -20
- package/scripts/bench/r5-orchestrated-task.json +0 -7
- package/scripts/bench/review-tasks.json +0 -20
- package/scripts/bench/round-codex.json +0 -114
- package/scripts/bench/round-mixdog-lead-r3.json +0 -269
- package/scripts/bench/round-mixdog-lead.json +0 -269
- package/scripts/bench/round-mixdog.json +0 -126
- package/scripts/bench/round-r10-bigsample.json +0 -679
- package/scripts/bench/round-r11-codexalign.json +0 -257
- package/scripts/bench/round-r13-clientmeta.json +0 -464
- package/scripts/bench/round-r14-betafeatures.json +0 -466
- package/scripts/bench/round-r15-fulldefault.json +0 -462
- package/scripts/bench/round-r16-sessionid.json +0 -466
- package/scripts/bench/round-r17-wirebytes.json +0 -456
- package/scripts/bench/round-r18-prewarm.json +0 -468
- package/scripts/bench/round-r19-clean.json +0 -472
- package/scripts/bench/round-r20-prewarm-clean.json +0 -475
- package/scripts/bench/round-r21-delta-retry.json +0 -473
- package/scripts/bench/round-r22-full-probe.json +0 -693
- package/scripts/bench/round-r23-itemprobe.json +0 -701
- package/scripts/bench/round-r24-shapefix.json +0 -677
- package/scripts/bench/round-r25-serial.json +0 -464
- package/scripts/bench/round-r26-parallel3.json +0 -671
- package/scripts/bench/round-r27-parallel10.json +0 -894
- package/scripts/bench/round-r28-parallel10-stagger.json +0 -882
- package/scripts/bench/round-r29-parallel10-stagger166.json +0 -886
- package/scripts/bench/round-r30-instid.json +0 -253
- package/scripts/bench/round-r31-upgradeprobe.json +0 -256
- package/scripts/bench/round-r32-vs-codex-lead.json +0 -254
- package/scripts/bench/round-r33-vs-codex-codex.json +0 -115
- package/scripts/bench/round-r34-orchestrated.json +0 -120
- package/scripts/bench/round-r35-orchestrated-codex.json +0 -61
- package/scripts/bench/round-r36-orchestrated-capped.json +0 -128
- package/scripts/bench/round-r4-codex.json +0 -114
- package/scripts/bench/round-r4-mixed.json +0 -225
- package/scripts/bench/round-r5-gpt-lead.json +0 -259
- package/scripts/bench/round-r6-codex.json +0 -114
- package/scripts/bench/round-r6-solo.json +0 -257
- package/scripts/bench/round-r7-full.json +0 -254
- package/scripts/bench/round-r8-fulldefault.json +0 -255
- package/src/tui/components/prompt-input/voice-indicator.mjs +0 -39
- package/src/tui/lib/voice-recorder.mjs +0 -469
- package/src/workflows/sequential/WORKFLOW.md +0 -51
|
@@ -1,677 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"round": "24",
|
|
3
|
-
"runner": "lead",
|
|
4
|
-
"opts": {
|
|
5
|
-
"provider": "openai-oauth",
|
|
6
|
-
"model": "gpt-5.5",
|
|
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_60408_1783063353252_1783063353494_ffb01c576742694d462d621830cf0e1c",
|
|
18
|
-
"sess_4988_1783063353262_1783063353504_2e497c9ba1e6a87f33f6b7f1ee20672a",
|
|
19
|
-
"sess_39880_1783063353281_1783063353525_1d1b13112d7adc7b0cf1e8742ffe6a5f",
|
|
20
|
-
"sess_33512_1783063371729_1783063371967_9a4241862453a1eea2e17976f6798c12",
|
|
21
|
-
"sess_46584_1783063434132_1783063434375_2f5bc8a596d80965dc2b007018f607cd",
|
|
22
|
-
"sess_8156_1783063464105_1783063464349_363e58bf8ffe09e0bd16e479ab77bef3",
|
|
23
|
-
"sess_50160_1783063467999_1783063468251_274caf327774153c94df94f9ffb0a9b9",
|
|
24
|
-
"sess_35916_1783063487207_1783063487441_71e4fa81bf39a50301d9f3fe5118e29f",
|
|
25
|
-
"sess_59820_1783063534589_1783063534826_5b1388cb0dce5fcf4952797e321186d1"
|
|
26
|
-
],
|
|
27
|
-
"results": [
|
|
28
|
-
{
|
|
29
|
-
"id": "r4-debug-forwarding-gap#1",
|
|
30
|
-
"agent": "reviewer",
|
|
31
|
-
"ok": true,
|
|
32
|
-
"ms": 114745,
|
|
33
|
-
"sessionId": "sess_60408_1783063353252_1783063353494_ffb01c576742694d462d621830cf0e1c",
|
|
34
|
-
"output": "sessionId: sess_60408_1783063353252_1783063353494_ffb01c576742694d462d621830cf0e1c\n조사 완료: 활성화 직후 출력은 “지연 후 회수”되는 경로와 “EOF 바인딩으로 영구 스킵”되는 경로가 함께 있습니다.\n\n- **최대 영향: 기존 transcript를 늦게 바인딩하면 스킵** — `setContext()`가 기본/불일치 persisted 상태에서 현재 EOF로 커서를 잡아, 그 전에 기록된 assistant 출력은 backlog가 회수하지 못합니다. `src/runtime/channels/lib/output-forwarder.mjs:112`\n\n- **중간 영향: transcript 파일 미생성 상태** — `fs.watch()`는 실패하지만 `schedulePendingTranscriptRearm()`가 파일 생성 후 watch 설치와 `forwardNewText()`를 실행해 보통 회수합니다. 단, 60초 timeout 이후 생성되면 회수되지 않습니다. `src/runtime/channels/index.mjs:357`, `src/runtime/channels/lib/output-forwarder.mjs:656`\n\n- **중간 영향: backend connect 전 ownership gate** — `forwardNewText()`는 `bridgeRuntimeConnected && owned` 전까지 no-op이라 출력이 즉시 전달되지 않습니다. 커서가 0/persisted 위치면 post-connect catch-up으로 회수되고, 이미 EOF로 잡혔으면 회수되지 않습니다. `src/runtime/channels/index.mjs:316`, `src/runtime/channels/index.mjs:801`\n\n- **낮은 영향: watch 설치 직전/직후 쓰기** — 존재하는 파일에서는 `startWatch()`가 즉시 flush를 예약해 stat 이후 기록분은 회수합니다. stat 이전 기록분은 위 EOF 규칙을 따릅니다. `src/runtime/channels/lib/output-forwarder.mjs:665`\n\nVerdict: 현재 설계는 “미생성 transcript”는 대체로 복구하지만, “이미 존재하는 transcript를 활성화 후 늦게 바인딩”한 출력은 EOF 커서 때문에 조용히 유실될 수 있습니다.",
|
|
35
|
-
"card": {
|
|
36
|
-
"session": "sess_60408_1783063353252_1783063353494_ffb01c576742694d462d621830cf0e1c",
|
|
37
|
-
"provider": "openai-oauth",
|
|
38
|
-
"model": "gpt-5.5",
|
|
39
|
-
"wall_ms": 104242,
|
|
40
|
-
"turns": 8,
|
|
41
|
-
"tool_calls": 7,
|
|
42
|
-
"tools_per_turn": 0.9,
|
|
43
|
-
"total_tool_ms": 516,
|
|
44
|
-
"llm_stream_ms": 102684,
|
|
45
|
-
"cache_ratio": 0.7824456056127135,
|
|
46
|
-
"cached_tokens": 202752,
|
|
47
|
-
"prompt_tokens": 259126,
|
|
48
|
-
"uncached_tokens": 56374,
|
|
49
|
-
"output_tokens": 10681,
|
|
50
|
-
"cache_weighted_input_10": 76649.2,
|
|
51
|
-
"cache_weighted_input_25": 107062,
|
|
52
|
-
"prompt_growth": 40068,
|
|
53
|
-
"antipatterns": 1,
|
|
54
|
-
"issues": 14,
|
|
55
|
-
"issue_types": [
|
|
56
|
-
"cache",
|
|
57
|
-
"cache_break",
|
|
58
|
-
"cache_miss",
|
|
59
|
-
"broad_tool_result",
|
|
60
|
-
"service_tier",
|
|
61
|
-
"missed_parallelism",
|
|
62
|
-
"tool_churn_cluster"
|
|
63
|
-
],
|
|
64
|
-
"read_fragmentation_paths": [],
|
|
65
|
-
"grep_sweep_count": 0
|
|
66
|
-
}
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
"id": "r4-impl-usage-summary#1",
|
|
70
|
-
"agent": "worker",
|
|
71
|
-
"ok": true,
|
|
72
|
-
"ms": 18457,
|
|
73
|
-
"sessionId": "sess_4988_1783063353262_1783063353504_2e497c9ba1e6a87f33f6b7f1ee20672a",
|
|
74
|
-
"output": "sessionId: sess_4988_1783063353262_1783063353504_2e497c9ba1e6a87f33f6b7f1ee20672a\n재영님, 구현 전 계획 확인이 필요합니다.\n\n- `scripts/session-bench.mjs`의 인자 파싱 스타일을 확인해 `scripts/usage-today.mjs`를 맞춰 작성하겠습니다.\n- `MIXDOG_DATA_DIR` 우선, 기본 `~/.mixdog/data/history/agent-trace.jsonl`에서 오늘 00:00 이후 usage row만 집계하겠습니다.\n- `package.json`에 `usage:today`를 추가하고 `node --check`, 실행 1회로 검증하겠습니다.\n\n이 방향으로 바로 진행할까요?",
|
|
75
|
-
"card": {
|
|
76
|
-
"session": "sess_4988_1783063353262_1783063353504_2e497c9ba1e6a87f33f6b7f1ee20672a",
|
|
77
|
-
"provider": "openai-oauth",
|
|
78
|
-
"model": "gpt-5.5",
|
|
79
|
-
"wall_ms": 7960,
|
|
80
|
-
"turns": 1,
|
|
81
|
-
"tool_calls": 0,
|
|
82
|
-
"tools_per_turn": 0,
|
|
83
|
-
"total_tool_ms": 0,
|
|
84
|
-
"llm_stream_ms": 6838,
|
|
85
|
-
"cache_ratio": 0.2695871946082561,
|
|
86
|
-
"cached_tokens": 2560,
|
|
87
|
-
"prompt_tokens": 9496,
|
|
88
|
-
"uncached_tokens": 6936,
|
|
89
|
-
"output_tokens": 568,
|
|
90
|
-
"cache_weighted_input_10": 7192,
|
|
91
|
-
"cache_weighted_input_25": 7576,
|
|
92
|
-
"prompt_growth": 0,
|
|
93
|
-
"antipatterns": 0,
|
|
94
|
-
"issues": 3,
|
|
95
|
-
"issue_types": [
|
|
96
|
-
"cache",
|
|
97
|
-
"cache_break",
|
|
98
|
-
"service_tier"
|
|
99
|
-
],
|
|
100
|
-
"read_fragmentation_paths": [],
|
|
101
|
-
"grep_sweep_count": 0
|
|
102
|
-
}
|
|
103
|
-
},
|
|
104
|
-
{
|
|
105
|
-
"id": "r4-explain-compact-engine#1",
|
|
106
|
-
"agent": "explore",
|
|
107
|
-
"ok": true,
|
|
108
|
-
"ms": 80852,
|
|
109
|
-
"sessionId": "sess_39880_1783063353281_1783063353525_1d1b13112d7adc7b0cf1e8742ffe6a5f",
|
|
110
|
-
"output": "sessionId: sess_39880_1783063353281_1783063353525_1d1b13112d7adc7b0cf1e8742ffe6a5f\n구조와 호출 흐름을 먼저 좁혀서 확인하겠습니다.자동 발화 조건과 fallback 기록 지점만 추가로 확인하겠습니다.라인 앵커를 위해 공개 re-export와 사후 자동 compact 진입점만 마지막으로 확인합니다.Mapped below; all code claims are anchored.\n\n- **Entry points**: `semanticCompactMessages` and `recallFastTrackCompactMessages` are exported from `engine.mjs` via the facade. `src/runtime/agent/orchestrator/session/compact.mjs:52-55`\n\n- **Live caller path**: `askSession` enters `agentLoop`, whose pre-send compaction calls recall-fasttrack first when configured, otherwise semantic. `src/runtime/agent/orchestrator/session/manager.mjs:1379-1380`, `src/runtime/agent/orchestrator/session/loop.mjs:414-459`\n\n- **Manual/clear callers**: `/clear` pre-compacts through `runSessionCompaction`, and manual `/compact` calls the same runner. `src/runtime/agent/orchestrator/session/manager.mjs:1841-1850`, `src/runtime/agent/orchestrator/session/manager.mjs:1943-1957`\n\n- **Fire condition**: auto compaction is checked before provider send after queued steering is drained; it fires when reactive retry is pending, token estimate is unknown, or `messages + reserve >= trigger`. `src/runtime/agent/orchestrator/session/loop.mjs:324-364`, `src/runtime/agent/orchestrator/session/loop/compact-policy.mjs:151-174`\n\n- **Policy inputs**: boundary comes from explicit boundary/context/auto limit, trigger is auto-limit or boundary minus buffer, reserve includes request reserve plus configured reserve, and agent-owned sessions force semantic. `src/runtime/agent/orchestrator/session/loop/compact-policy.mjs:39-45`, `src/runtime/agent/orchestrator/session/loop/compact-policy.mjs:89-148`\n\n- **Semantic flow**: sanitize first, no-op if already within effective budget unless forced, otherwise redact then select window, summarize head, emit `system + summary + tail`. `src/runtime/agent/orchestrator/session/compact/engine.mjs:278-314`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:367-392`\n\n- **Semantic tail**: context is split into protected system prefix, previous summary, and live non-summary messages; tail uses user-turn selection when users exist, otherwise non-tool cut points. `src/runtime/agent/orchestrator/session/compact/engine.mjs:100-111`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:235-250`\n\n- **User-tail rule**: semantic preserves up to `tailTurns` recent user-anchored turns within recent budget, splitting the newest turn suffix if needed. `src/runtime/agent/orchestrator/session/compact/engine.mjs:130-185`\n\n- **No-user tail rule**: semantic cut points cannot start on `tool`, grow newest-to-oldest while fitting, and fall back to minimal/empty tail cases instead of throwing. `src/runtime/agent/orchestrator/session/compact/engine.mjs:114-128`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:188-233`\n\n- **Recall-fasttrack tail**: recall preserves the newest structured turns, default max two user turns and 8k cap, drops older kept turns first, then truncates the surviving turn. `src/runtime/agent/orchestrator/session/compact/engine.mjs:449-468`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:593-619`\n\n- **Redaction hook**: compaction redacts tool-call secret arguments before window selection so preserved system/tail are measured and emitted redacted; no-op fast path intentionally skips this. `src/runtime/agent/orchestrator/session/compact/engine.mjs:286-314`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:389-392`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:644-646`\n\n- **Redactor shape**: redaction only changes sensitive argument values or raw secret substrings, preserving message/tool-call structure for provider validity. `src/runtime/agent/orchestrator/session/compact/text-utils.mjs:219-229`, `src/runtime/agent/orchestrator/session/compact/text-utils.mjs:291-304`\n\n- **Budget fallback**: both semantic and recall raise the working budget to fit mandatory `system + tail` plus summary room instead of failing on mandatory cost. `src/runtime/agent/orchestrator/session/compact/engine.mjs:319-330`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:658-663`\n\n- **Failure points**: semantic throws on missing provider, no compactable head, prompt/summary fit failure, empty summary, or final over-budget result. `src/runtime/agent/orchestrator/session/compact/engine.mjs:278-280`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:315-337`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:371-397`\n\n- **Recall failure points**: recall throws on no compactable prior context, empty recall text unless allowed, summary fit failure, or final over-budget result. `src/runtime/agent/orchestrator/session/compact/engine.mjs:653-668`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:691-699`\n\n- **Runtime fallback**: loop failures try one non-recall unanchored tool-output prune; recall failures skip that and escalate as overflow telemetry/error. `src/runtime/agent/orchestrator/session/loop.mjs:500-538`, `src/runtime/agent/orchestrator/session/loop.mjs:546-626`\n\n- **Manager fallback**: manual/clear recall-fasttrack failure can degrade to semantic; non-recall failures then try prune, otherwise record `manual_failed`/`post_turn_failed`. `src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs:231-270`, `src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs:322-397`",
|
|
111
|
-
"card": {
|
|
112
|
-
"session": "sess_39880_1783063353281_1783063353525_1d1b13112d7adc7b0cf1e8742ffe6a5f",
|
|
113
|
-
"provider": "openai-oauth",
|
|
114
|
-
"model": "gpt-5.5",
|
|
115
|
-
"wall_ms": 70341,
|
|
116
|
-
"turns": 7,
|
|
117
|
-
"tool_calls": 8,
|
|
118
|
-
"tools_per_turn": 1.1,
|
|
119
|
-
"total_tool_ms": 678,
|
|
120
|
-
"llm_stream_ms": 69228,
|
|
121
|
-
"cache_ratio": 0.6953839424963888,
|
|
122
|
-
"cached_tokens": 120832,
|
|
123
|
-
"prompt_tokens": 173763,
|
|
124
|
-
"uncached_tokens": 52931,
|
|
125
|
-
"output_tokens": 6592,
|
|
126
|
-
"cache_weighted_input_10": 65014.2,
|
|
127
|
-
"cache_weighted_input_25": 83139,
|
|
128
|
-
"prompt_growth": 42359,
|
|
129
|
-
"antipatterns": 1,
|
|
130
|
-
"issues": 12,
|
|
131
|
-
"issue_types": [
|
|
132
|
-
"cache",
|
|
133
|
-
"cache_break",
|
|
134
|
-
"broad_tool_result",
|
|
135
|
-
"service_tier",
|
|
136
|
-
"missed_parallelism",
|
|
137
|
-
"tool_churn_cluster"
|
|
138
|
-
],
|
|
139
|
-
"read_fragmentation_paths": [],
|
|
140
|
-
"grep_sweep_count": 0
|
|
141
|
-
}
|
|
142
|
-
},
|
|
143
|
-
{
|
|
144
|
-
"id": "r4-debug-forwarding-gap#2",
|
|
145
|
-
"agent": "reviewer",
|
|
146
|
-
"ok": true,
|
|
147
|
-
"ms": 92386,
|
|
148
|
-
"sessionId": "sess_33512_1783063371729_1783063371967_9a4241862453a1eea2e17976f6798c12",
|
|
149
|
-
"output": "sessionId: sess_33512_1783063371729_1783063371967_9a4241862453a1eea2e17976f6798c12\n요청하신 경로를 직접 추적해 실제 유실/지연 창과 backlog 복구 여부를 확인하겠습니다.조사 완료했습니다. `bridge-state.json` 기록은 실제 전달 준비보다 먼저 일어나며, 일부 창은 backlog로 복구되지 않습니다.\n\n- **최대 유실:** 기존 transcript를 새로 바인딩할 때 persisted cursor가 없으면 `setContext()`가 EOF부터 시작해, 활성화 후 바인딩 전 기록된 assistant 출력은 건너뜁니다. Backlog 복구 없음. `src/runtime/channels/lib/output-forwarder.mjs:117`\n\n- **조건부 복구:** transcript 파일이 아직 없으면 `fs.watch`는 실패하지만 re-arm poll이 파일 생성 후 `forwardNewText()`로 backlog를 읽습니다. 60초 초과·소유권 상실이면 다음 rebind 전까지 지연됩니다. `src/runtime/channels/index.mjs:469`\n\n- **지연만 발생:** `bridge-state.json` 직후부터 `backend.connect()` 완료 전까지 `_isOwner()`가 false라 watch flush는 보내지 않습니다. post-connect `forwardNewText()`가 재시도하므로 cursor가 살아 있으면 복구됩니다. `src/runtime/channels/index.mjs:1735`, `src/runtime/channels/index.mjs:801`, `src/runtime/channels/lib/output-forwarder.mjs:351`\n\n- **잘못된 바인딩 위험:** session discovery가 아직 current session을 못 찾으면 previous/latest transcript로 붙을 수 있고, 이후 올바른 transcript를 EOF로 재바인딩하면 초기 출력이 유실됩니다. pending self transcript 경로를 잡은 경우만 re-arm으로 복구됩니다. `src/runtime/channels/index.mjs:1533`, `src/runtime/channels/index.mjs:1597`\n\n- **watch 설치 경계:** stat 이후 watch 설치 전 기록은 `scheduleWatchFlush()`가 커버합니다. Backlog 복구됨. `src/runtime/channels/lib/output-forwarder.mjs:665`\n\n판정: 활성화 직후 출력은 “파일 없음” 창은 대체로 복구되지만, “이미 존재하는 transcript를 EOF로 바인딩”하는 창은 실제 silent drop 가능성이 있습니다.",
|
|
150
|
-
"card": {
|
|
151
|
-
"session": "sess_33512_1783063371729_1783063371967_9a4241862453a1eea2e17976f6798c12",
|
|
152
|
-
"provider": "openai-oauth",
|
|
153
|
-
"model": "gpt-5.5",
|
|
154
|
-
"wall_ms": 81878,
|
|
155
|
-
"turns": 11,
|
|
156
|
-
"tool_calls": 10,
|
|
157
|
-
"tools_per_turn": 0.9,
|
|
158
|
-
"total_tool_ms": 760,
|
|
159
|
-
"llm_stream_ms": 80469,
|
|
160
|
-
"cache_ratio": 0.5901015721947442,
|
|
161
|
-
"cached_tokens": 166912,
|
|
162
|
-
"prompt_tokens": 282853,
|
|
163
|
-
"uncached_tokens": 115941,
|
|
164
|
-
"output_tokens": 5611,
|
|
165
|
-
"cache_weighted_input_10": 132632.2,
|
|
166
|
-
"cache_weighted_input_25": 157669,
|
|
167
|
-
"prompt_growth": 35859,
|
|
168
|
-
"antipatterns": 1,
|
|
169
|
-
"issues": 17,
|
|
170
|
-
"issue_types": [
|
|
171
|
-
"cache",
|
|
172
|
-
"cache_break",
|
|
173
|
-
"cache_miss",
|
|
174
|
-
"readonly_stall",
|
|
175
|
-
"service_tier",
|
|
176
|
-
"missed_parallelism",
|
|
177
|
-
"tool_churn_cluster"
|
|
178
|
-
],
|
|
179
|
-
"read_fragmentation_paths": [],
|
|
180
|
-
"grep_sweep_count": 0
|
|
181
|
-
}
|
|
182
|
-
},
|
|
183
|
-
{
|
|
184
|
-
"id": "r4-impl-usage-summary#2",
|
|
185
|
-
"agent": "worker",
|
|
186
|
-
"ok": true,
|
|
187
|
-
"ms": 53079,
|
|
188
|
-
"sessionId": "sess_46584_1783063434132_1783063434375_2f5bc8a596d80965dc2b007018f607cd",
|
|
189
|
-
"output": "sessionId: sess_46584_1783063434132_1783063434375_2f5bc8a596d80965dc2b007018f607cd\n요청 범위가 명확해 바로 구현과 검증까지 진행하겠습니다.이미 `usage:today`와 `scripts/usage-today.mjs`가 존재해 현재 구현 상태를 확인하고 검증하겠습니다.구현 파일과 npm script가 이미 반영된 상태라 검증 명령을 실행합니다.검증은 통과했고, 요청한 diff 요약을 위해 변경분을 확인합니다.`git diff`에는 npm script만 잡혀서, 새 스크립트 파일의 추적 상태까지 확인합니다.완료됐습니다. `usage:today` npm script와 새 `scripts/usage-today.mjs`가 준비되어 있습니다.\n\n- **Diff 요약**: `package.json`에 `usage:today` 추가, 새 스크립트는 `MIXDOG_DATA_DIR`/기본 trace 경로를 읽고 오늘 자정 이후 usage를 모델별·총합으로 집계합니다.\n\n- **검증**: `node --check scripts/usage-today.mjs` 통과, `npm run usage:today` 실행 완료.\n\n- **실행 결과**: 오늘 기준 `gpt-5.5` 78 calls, input `3,494,236`, cached `2,489,344`, output `70,355`, cost `$4.480805`.",
|
|
190
|
-
"card": {
|
|
191
|
-
"session": "sess_46584_1783063434132_1783063434375_2f5bc8a596d80965dc2b007018f607cd",
|
|
192
|
-
"provider": "openai-oauth",
|
|
193
|
-
"model": "gpt-5.5",
|
|
194
|
-
"wall_ms": 42587,
|
|
195
|
-
"turns": 9,
|
|
196
|
-
"tool_calls": 11,
|
|
197
|
-
"tools_per_turn": 1.2,
|
|
198
|
-
"total_tool_ms": 2585,
|
|
199
|
-
"llm_stream_ms": 39637,
|
|
200
|
-
"cache_ratio": 0.6918918918918919,
|
|
201
|
-
"cached_tokens": 79872,
|
|
202
|
-
"prompt_tokens": 115440,
|
|
203
|
-
"uncached_tokens": 35568,
|
|
204
|
-
"output_tokens": 2162,
|
|
205
|
-
"cache_weighted_input_10": 43555.2,
|
|
206
|
-
"cache_weighted_input_25": 55536,
|
|
207
|
-
"prompt_growth": 7625,
|
|
208
|
-
"antipatterns": 1,
|
|
209
|
-
"issues": 14,
|
|
210
|
-
"issue_types": [
|
|
211
|
-
"cache",
|
|
212
|
-
"cache_break",
|
|
213
|
-
"cache_miss",
|
|
214
|
-
"service_tier",
|
|
215
|
-
"missed_parallelism",
|
|
216
|
-
"tool_churn_cluster"
|
|
217
|
-
],
|
|
218
|
-
"read_fragmentation_paths": [],
|
|
219
|
-
"grep_sweep_count": 0
|
|
220
|
-
}
|
|
221
|
-
},
|
|
222
|
-
{
|
|
223
|
-
"id": "r4-explain-compact-engine#2",
|
|
224
|
-
"agent": "explore",
|
|
225
|
-
"ok": true,
|
|
226
|
-
"ms": 95208,
|
|
227
|
-
"sessionId": "sess_8156_1783063464105_1783063464349_363e58bf8ffe09e0bd16e479ab77bef3",
|
|
228
|
-
"output": "sessionId: sess_8156_1783063464105_1783063464349_363e58bf8ffe09e0bd16e479ab77bef3\nDone — compact subsystem map, anchored to code.\n\n- **Public surface:** `compact.mjs` re-exports `semanticCompactMessages` and `recallFastTrackCompactMessages` from `engine.mjs`; the real entry points live at `engine.mjs:278` and `engine.mjs:445` (`src/runtime/agent/orchestrator/session/compact.mjs:52`).\n- **Callers:** the live loop compacts pre-send via `runRecallFastTrackCompact` or `semanticCompactMessages` (`src/runtime/agent/orchestrator/session/loop.mjs:414`, `src/runtime/agent/orchestrator/session/loop.mjs:441`); manual/auto-clear uses `runSessionCompaction` (`src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs:143`).\n- **Fire condition:** loop drains queued messages, resolves policy, estimates tokens, then compacts when `shouldCompactForSession` says pressure crossed trigger or a reactive overflow retry is pending (`src/runtime/agent/orchestrator/session/loop.mjs:324`, `src/runtime/agent/orchestrator/session/loop.mjs:329`, `src/runtime/agent/orchestrator/session/loop.mjs:351`, `src/runtime/agent/orchestrator/session/loop.mjs:353`).\n- **Policy math:** pressure is `messageTokens + reserveTokens`, and compaction fires when pressure is `>= triggerTokens`, or immediately on `forceReactive` / null estimate (`src/runtime/agent/orchestrator/session/loop/compact-policy.mjs:151`, `src/runtime/agent/orchestrator/session/loop/compact-policy.mjs:170`).\n- **Trigger budget:** boundary comes from session context/limits, trigger is explicit sub-boundary auto limit or `boundary - buffer`, and default buffer is 10% capped at 25% (`src/runtime/agent/orchestrator/session/loop/compact-policy.mjs:94`, `src/runtime/agent/orchestrator/session/loop/compact-policy.mjs:107`, `src/runtime/agent/orchestrator/session/loop/compact-policy.mjs:113`, `src/runtime/agent/orchestrator/session/context-utils.mjs:94`).\n- **Compaction target:** compact budget targets a small post-compact window plus reserve, capped by boundary (`src/runtime/agent/orchestrator/session/loop/compact-policy.mjs:163`).\n- **Semantic windowing:** `splitLiveCompactionContext` sanitizes tool pairs, separates protected system/reminder prefix, finds previous summary, and excludes summaries from live history (`src/runtime/agent/orchestrator/session/compact/engine.mjs:100`).\n- **Semantic tail:** `selectCompactionWindow` uses `preserveRecentBudget`, keeps recent user-anchored turns when users exist, otherwise uses non-tool cut points, then repairs tail tool pairing (`src/runtime/agent/orchestrator/session/compact/engine.mjs:235`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:240`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:250`).\n- **Tail budget:** preserved recent budget is explicit `preserveRecentTokens/keepTokens` or min/default bounded to 80% of compact budget (`src/runtime/agent/orchestrator/session/compact/budget.mjs:274`).\n- **User-turn tail:** semantic keeps up to `tailTurns` newest turns within budget and can split the newest oversized turn suffix (`src/runtime/agent/orchestrator/session/compact/engine.mjs:134`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:151`).\n- **No-user tail:** semantic cuts only at non-tool messages so tool results never start the preserved tail, and falls back to minimal/newer cuts instead of throwing on assistant/tool-only sessions (`src/runtime/agent/orchestrator/session/compact/engine.mjs:121`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:193`).\n- **Recall tail:** recall fast-track keeps newest structured turns, drops oldest kept turns until under cap, truncates the last surviving turn if needed, and allows no-user tails (`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:610`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:613`).\n- **Redaction hook:** no-op semantic/recall returns sanitized messages unredacted, but actual compaction redacts tool-call secret values before window selection so preserved system/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:644`).\n- **Redaction scope:** preserved-tail redaction only changes sensitive tool-call argument values / embedded raw secret pairs while preserving shape, order, ids, roles, and pairing (`src/runtime/agent/orchestrator/session/compact/text-utils.mjs:219`, `src/runtime/agent/orchestrator/session/compact/text-utils.mjs:261`, `src/runtime/agent/orchestrator/session/compact/text-utils.mjs:291`).\n- **Semantic summary path:** provider prompt is fitted under headroom, provider output is schema-repaired if malformed, summary is fitted into remaining budget, then `[system, summary, tail]` is repaired and checked against budget (`src/runtime/agent/orchestrator/session/compact/engine.mjs:333`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:376`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:384`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:392`).\n- **Recall fast-track path:** recall text/prior summary are wrapped into a synthetic summary, recall injection room may be capped separately, then `[system, recallSummary, recallTail]` is repaired and checked (`src/runtime/agent/orchestrator/session/compact/engine.mjs:652`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:679`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:684`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:695`).\n- **Loop fallback:** semantic failures can recover with anchor-independent old tool-output pruning; recall-fasttrack failures skip that prune and surface overflow (`src/runtime/agent/orchestrator/session/loop.mjs:500`, `src/runtime/agent/orchestrator/session/loop.mjs:517`, `src/runtime/agent/orchestrator/session/loop.mjs:546`).\n- **Manager fallback:** recall-fasttrack failure may degrade to semantic compaction; if still uncompacted, non-recall paths try the same unanchored prune, else record `*_failed` metadata (`src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs:237`, `src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs:245`, `src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs:322`, `src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs:348`).\n- **Reactive overflow:** provider context overflow triggers one retry by setting `reactiveOverflowRetryPending`, causing the next loop iteration to force pre-send compaction before retrying send (`src/runtime/agent/orchestrator/session/loop.mjs:982`, `src/runtime/agent/orchestrator/session/loop.mjs:995`, `src/runtime/agent/orchestrator/session/loop.mjs:1002`).",
|
|
229
|
-
"card": {
|
|
230
|
-
"session": "sess_8156_1783063464105_1783063464349_363e58bf8ffe09e0bd16e479ab77bef3",
|
|
231
|
-
"provider": "openai-oauth",
|
|
232
|
-
"model": "gpt-5.5",
|
|
233
|
-
"wall_ms": 84705,
|
|
234
|
-
"turns": 11,
|
|
235
|
-
"tool_calls": 10,
|
|
236
|
-
"tools_per_turn": 0.9,
|
|
237
|
-
"total_tool_ms": 772,
|
|
238
|
-
"llm_stream_ms": 83249,
|
|
239
|
-
"cache_ratio": 0.586002007841701,
|
|
240
|
-
"cached_tokens": 179200,
|
|
241
|
-
"prompt_tokens": 305801,
|
|
242
|
-
"uncached_tokens": 126601,
|
|
243
|
-
"output_tokens": 5651,
|
|
244
|
-
"cache_weighted_input_10": 144521,
|
|
245
|
-
"cache_weighted_input_25": 171401,
|
|
246
|
-
"prompt_growth": 54901,
|
|
247
|
-
"antipatterns": 1,
|
|
248
|
-
"issues": 17,
|
|
249
|
-
"issue_types": [
|
|
250
|
-
"cache",
|
|
251
|
-
"cache_break",
|
|
252
|
-
"cache_miss",
|
|
253
|
-
"readonly_stall",
|
|
254
|
-
"broad_tool_result",
|
|
255
|
-
"service_tier",
|
|
256
|
-
"missed_parallelism",
|
|
257
|
-
"tool_churn_cluster"
|
|
258
|
-
],
|
|
259
|
-
"read_fragmentation_paths": [],
|
|
260
|
-
"grep_sweep_count": 0
|
|
261
|
-
}
|
|
262
|
-
},
|
|
263
|
-
{
|
|
264
|
-
"id": "r4-debug-forwarding-gap#3",
|
|
265
|
-
"agent": "reviewer",
|
|
266
|
-
"ok": true,
|
|
267
|
-
"ms": 125022,
|
|
268
|
-
"sessionId": "sess_50160_1783063467999_1783063468251_274caf327774153c94df94f9ffb0a9b9",
|
|
269
|
-
"output": "sessionId: sess_50160_1783063467999_1783063468251_274caf327774153c94df94f9ffb0a9b9\n조사 결과, 실제 손실 위험은 `fs.watch` 자체보다 “기존 transcript를 EOF로 바인딩하는 경로”가 더 큽니다.\n\n**경로 요약**: activation은 `bridge-state.json` 기록 후 ownership claim/refresh를 거쳐 backend connect, transcript bind, `OutputForwarder.startWatch()`, `forwardNewText()`로 이어집니다. 주요 앵커는 `src/runtime/channels/index.mjs:1735`, `src/runtime/channels/index.mjs:1744`, `src/runtime/channels/index.mjs:625`, `src/runtime/channels/lib/output-forwarder.mjs:93`, `src/runtime/channels/lib/output-forwarder.mjs:647`, `src/runtime/channels/lib/output-forwarder.mjs:351`입니다.\n\n- **가장 큰 손실: 기존 transcript를 EOF로 바인딩** — `catchUpFromPersisted`가 같은 transcript의 `lastFileSize`를 못 찾으면 `currentSize`로 커서를 잡아, activation 이후 bind 전 이미 쓰인 assistant output을 영구 스킵합니다. `src/runtime/channels/lib/output-forwarder.mjs:117`, `src/runtime/channels/lib/output-forwarder.mjs:122`, `src/runtime/channels/lib/output-forwarder.mjs:126`; backlog catch-up은 같은 persisted cursor가 있을 때만 복구됩니다.\n\n- **pending transcript가 poll 중 생성되는 레이스** — not-yet-created 경로는 이후 `replayFromStart`로 보호되지만, 파일이 `rebindTranscriptContext()` polling 중 “이미 존재”로 잡히면 `replayFromStart`가 꺼진 채 바인딩될 수 있습니다. `src/runtime/channels/index.mjs:438`, `src/runtime/channels/index.mjs:441`, `src/runtime/channels/index.mjs:447`; backlog catch-up은 이 분기에서는 복구하지 못합니다.\n\n- **fs.watch 대상 파일 미존재** — `startWatch()`는 없는 파일에서 실패하고 닫히지만, pending re-arm poll이 파일 생성 후 watch를 설치하고 `forwardNewText()`를 호출합니다. `src/runtime/channels/index.mjs:339`, `src/runtime/channels/index.mjs:376`, `src/runtime/channels/index.mjs:379`, `src/runtime/channels/lib/output-forwarder.mjs:657`; backlog catch-up은 60초 내 생성·동일 바인딩·owner 유지 조건에서 복구됩니다.\n\n- **bridge-state 기록 후 backend/owner 미준비** — `bridge-state.json`은 connect 전에 쓰이고, 그동안 `_isOwner()`가 false라 `forwardNewText()`는 읽지 않고 no-op입니다. `src/runtime/channels/index.mjs:1735`, `src/runtime/channels/index.mjs:1744`, `src/runtime/channels/index.mjs:316`, `src/runtime/channels/lib/output-forwarder.mjs:351`; backlog catch-up은 post-connect `forwardNewText()`/re-arm으로 지연 복구됩니다.\n\n- **stat→watch 설치 사이의 짧은 창** — `setContext()`가 현재 크기를 잡은 뒤 `startWatch()`가 즉시 flush를 예약해 그 사이에 쓰인 bytes를 읽습니다. `src/runtime/channels/lib/output-forwarder.mjs:112`, `src/runtime/channels/lib/output-forwarder.mjs:665`, `src/runtime/channels/lib/output-forwarder.mjs:724`; backlog catch-up은 정상 복구됩니다.\n\nVerdict: 현재 코드는 대부분의 activation 지연은 복구하지만, “이미 존재하는 transcript를 persisted cursor 없이 바인딩”하는 경로는 첫 assistant output을 조용히 잃을 수 있습니다.",
|
|
270
|
-
"card": {
|
|
271
|
-
"session": "sess_50160_1783063467999_1783063468251_274caf327774153c94df94f9ffb0a9b9",
|
|
272
|
-
"provider": "openai-oauth",
|
|
273
|
-
"model": "gpt-5.5",
|
|
274
|
-
"wall_ms": 114511,
|
|
275
|
-
"turns": 6,
|
|
276
|
-
"tool_calls": 10,
|
|
277
|
-
"tools_per_turn": 1.7,
|
|
278
|
-
"total_tool_ms": 903,
|
|
279
|
-
"llm_stream_ms": 113542,
|
|
280
|
-
"cache_ratio": 0.7140668668976461,
|
|
281
|
-
"cached_tokens": 130048,
|
|
282
|
-
"prompt_tokens": 182123,
|
|
283
|
-
"uncached_tokens": 52075,
|
|
284
|
-
"output_tokens": 11313,
|
|
285
|
-
"cache_weighted_input_10": 65079.8,
|
|
286
|
-
"cache_weighted_input_25": 84587,
|
|
287
|
-
"prompt_growth": 41209,
|
|
288
|
-
"antipatterns": 0,
|
|
289
|
-
"issues": 9,
|
|
290
|
-
"issue_types": [
|
|
291
|
-
"cache",
|
|
292
|
-
"cache_break",
|
|
293
|
-
"broad_tool_result",
|
|
294
|
-
"service_tier"
|
|
295
|
-
],
|
|
296
|
-
"read_fragmentation_paths": [],
|
|
297
|
-
"grep_sweep_count": 0
|
|
298
|
-
}
|
|
299
|
-
},
|
|
300
|
-
{
|
|
301
|
-
"id": "r4-impl-usage-summary#3",
|
|
302
|
-
"agent": "worker",
|
|
303
|
-
"ok": true,
|
|
304
|
-
"ms": 47382,
|
|
305
|
-
"sessionId": "sess_35916_1783063487207_1783063487441_71e4fa81bf39a50301d9f3fe5118e29f",
|
|
306
|
-
"output": "sessionId: sess_35916_1783063487207_1783063487441_71e4fa81bf39a50301d9f3fe5118e29f\n요청 범위가 작고 구현 지시가 명확해 바로 적용하겠습니다.이미 `usage:today` 항목과 대상 파일이 있어, 기존 상태를 확인한 뒤 요구사항에 맞게 보정하겠습니다.구현 파일이 이미 존재해 요구사항과 맞는지 검증까지 진행하겠습니다.검증은 통과했고, 새 파일의 추적 상태만 확인해 최종 요약하겠습니다.완료됐습니다, 재영님. `usage:today` 스크립트와 `scripts/usage-today.mjs`가 추가되어 오늘 자정 이후 사용량을 모델별/총합으로 출력합니다.\n\n- **변경 요약**: `package.json`에 `usage:today` 추가, 새 스크립트는 `MIXDOG_DATA_DIR` 또는 기본 `~/.mixdog/data/history/agent-trace.jsonl`을 읽습니다.\n\n- **출력 내용**: 모델별 `calls`, `input`, `cached`, `output`, `costUsd`와 `GRAND TOTAL` 라인을 표시합니다.\n\n- **검증**: `node --check scripts/usage-today.mjs` 통과, `npm run usage:today` 실행 성공.",
|
|
307
|
-
"card": {
|
|
308
|
-
"session": "sess_35916_1783063487207_1783063487441_71e4fa81bf39a50301d9f3fe5118e29f",
|
|
309
|
-
"provider": "openai-oauth",
|
|
310
|
-
"model": "gpt-5.5",
|
|
311
|
-
"wall_ms": 36892,
|
|
312
|
-
"turns": 7,
|
|
313
|
-
"tool_calls": 7,
|
|
314
|
-
"tools_per_turn": 1,
|
|
315
|
-
"total_tool_ms": 1780,
|
|
316
|
-
"llm_stream_ms": 34501,
|
|
317
|
-
"cache_ratio": 0.770208686675024,
|
|
318
|
-
"cached_tokens": 52224,
|
|
319
|
-
"prompt_tokens": 67805,
|
|
320
|
-
"uncached_tokens": 15581,
|
|
321
|
-
"output_tokens": 2014,
|
|
322
|
-
"cache_weighted_input_10": 20803.4,
|
|
323
|
-
"cache_weighted_input_25": 28637,
|
|
324
|
-
"prompt_growth": 2459,
|
|
325
|
-
"antipatterns": 1,
|
|
326
|
-
"issues": 11,
|
|
327
|
-
"issue_types": [
|
|
328
|
-
"cache",
|
|
329
|
-
"cache_break",
|
|
330
|
-
"service_tier",
|
|
331
|
-
"missed_parallelism",
|
|
332
|
-
"tool_churn_cluster"
|
|
333
|
-
],
|
|
334
|
-
"read_fragmentation_paths": [],
|
|
335
|
-
"grep_sweep_count": 0
|
|
336
|
-
}
|
|
337
|
-
},
|
|
338
|
-
{
|
|
339
|
-
"id": "r4-explain-compact-engine#3",
|
|
340
|
-
"agent": "explore",
|
|
341
|
-
"ok": true,
|
|
342
|
-
"ms": 71997,
|
|
343
|
-
"sessionId": "sess_59820_1783063534589_1783063534826_5b1388cb0dce5fcf4952797e321186d1",
|
|
344
|
-
"output": "sessionId: sess_59820_1783063534589_1783063534826_5b1388cb0dce5fcf4952797e321186d1\n완료했습니다 — compaction subsystem architecture brief입니다.\n\n- **Entry points**: public API is `semanticCompactMessages` and `recallFastTrackCompactMessages` re-exported by `compact.mjs`; implementations live in `engine.mjs`. `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**: live turns enter through `agentLoop`, manual/clear paths enter through `runSessionCompaction`; `askSession` calls `agentLoop`, `clearSessionMessages` and `compactSessionMessages` call the runner. `src/runtime/agent/orchestrator/session/loop.mjs:414`, `src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs:207`, `src/runtime/agent/orchestrator/session/manager.mjs:1379`, `src/runtime/agent/orchestrator/session/manager.mjs:1849`, `src/runtime/agent/orchestrator/session/manager.mjs:1950`\n\n- **When it fires**: pre-send drains queued input first, resolves policy, estimates message tokens, then compacts when pressure reaches trigger or reactive overflow is pending. `src/runtime/agent/orchestrator/session/loop.mjs:324`, `src/runtime/agent/orchestrator/session/loop.mjs:329`, `src/runtime/agent/orchestrator/session/loop.mjs:351`, `src/runtime/agent/orchestrator/session/loop.mjs:353`\n\n- **Policy**: auto can be disabled; boundary comes from explicit/context window/auto limit, trigger is boundary minus buffer, reserve includes tool request reserve, and compact type selects semantic vs recall-fasttrack. `src/runtime/agent/orchestrator/session/loop/compact-policy.mjs:89`, `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:123`\n\n- **Execution branch**: recall-fasttrack runs first when selected; otherwise semantic runs with `force:true`, compact budget, reserve, timeout, and tail settings. `src/runtime/agent/orchestrator/session/loop.mjs:414`, `src/runtime/agent/orchestrator/session/loop.mjs:439`, `src/runtime/agent/orchestrator/session/loop.mjs:441`, `src/runtime/agent/orchestrator/session/loop.mjs:458`\n\n- **Semantic tail**: messages are sanitized/deduped, protected prefix and previous summary are separated, live summary messages are removed, then tail is chosen by recent budget and `tailTurns`. `src/runtime/agent/orchestrator/session/compact/engine.mjs:100`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:102`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:110`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:237`\n\n- **Semantic cut rules**: if live has user turns, preserve newest turns within budget; if not, cut only at non-`tool` indices so assistant/tool pairs stay valid. `src/runtime/agent/orchestrator/session/compact/engine.mjs:134`, `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:193`\n\n- **Window output**: selected head becomes summary input, tail is preserved verbatim after tool-pair repair, and only an empty live window is unrecoverable. `src/runtime/agent/orchestrator/session/compact/engine.mjs:244`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:250`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:254`\n\n- **Recall tail**: recall-fasttrack preserves newest structured turns, defaulting to 2 user turns and 8k tokens; it drops oldest turns first, then truncates oldest surviving content. `src/runtime/agent/orchestrator/session/compact/engine.mjs:449`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:467`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:601`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:609`\n\n- **Redaction**: no-op fast path returns sanitized messages unchanged; real compaction redacts tool-call secret values before window selection, so preserved system/tail are measured and emitted redacted. `src/runtime/agent/orchestrator/session/compact/engine.mjs:286`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:289`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:306`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:312`\n\n- **Budget behavior**: mandatory preserved system+tail cost can raise budget to include minimum summary room; final result must fit or throws. `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:395`\n\n- **Failure/fallbacks**: semantic validates provider/prompt/summary/final fit and throws on failures; live loop catches and, only for non-recall failures, tries unanchored tool-output prune before raising overflow. `src/runtime/agent/orchestrator/session/compact/engine.mjs:279`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:335`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:385`, `src/runtime/agent/orchestrator/session/loop.mjs:500`, `src/runtime/agent/orchestrator/session/loop.mjs:517`\n\n- **Runner fallbacks**: manual/clear recall-fasttrack failure can degrade to semantic; if still uncompacted, non-recall failures try unanchored prune, otherwise failure is recorded without replacing history. `src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs:237`, `src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs:245`, `src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs:327`, `src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs:348`",
|
|
345
|
-
"card": {
|
|
346
|
-
"session": "sess_59820_1783063534589_1783063534826_5b1388cb0dce5fcf4952797e321186d1",
|
|
347
|
-
"provider": "openai-oauth",
|
|
348
|
-
"model": "gpt-5.5",
|
|
349
|
-
"wall_ms": 61497,
|
|
350
|
-
"turns": 7,
|
|
351
|
-
"tool_calls": 10,
|
|
352
|
-
"tools_per_turn": 1.4,
|
|
353
|
-
"total_tool_ms": 949,
|
|
354
|
-
"llm_stream_ms": 60317,
|
|
355
|
-
"cache_ratio": 0.6540460374630791,
|
|
356
|
-
"cached_tokens": 104960,
|
|
357
|
-
"prompt_tokens": 160478,
|
|
358
|
-
"uncached_tokens": 55518,
|
|
359
|
-
"output_tokens": 4207,
|
|
360
|
-
"cache_weighted_input_10": 66014,
|
|
361
|
-
"cache_weighted_input_25": 81758,
|
|
362
|
-
"prompt_growth": 34422,
|
|
363
|
-
"antipatterns": 0,
|
|
364
|
-
"issues": 10,
|
|
365
|
-
"issue_types": [
|
|
366
|
-
"cache",
|
|
367
|
-
"cache_break",
|
|
368
|
-
"broad_tool_result",
|
|
369
|
-
"service_tier"
|
|
370
|
-
],
|
|
371
|
-
"read_fragmentation_paths": [],
|
|
372
|
-
"grep_sweep_count": 0
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
],
|
|
376
|
-
"task_complete": true,
|
|
377
|
-
"task_errors": [],
|
|
378
|
-
"score_complete": true,
|
|
379
|
-
"score_errors": [],
|
|
380
|
-
"group": {
|
|
381
|
-
"n": 9,
|
|
382
|
-
"wall_ms": 67179.2,
|
|
383
|
-
"turns": 7.4,
|
|
384
|
-
"tool_calls": 8.1,
|
|
385
|
-
"tools_per_turn": 1,
|
|
386
|
-
"total_tool_ms": 993.7,
|
|
387
|
-
"llm_stream_ms": 65607.2,
|
|
388
|
-
"cache_ratio": 0.6,
|
|
389
|
-
"cached_tokens": 115484.4,
|
|
390
|
-
"prompt_tokens": 172987.2,
|
|
391
|
-
"uncached_tokens": 57502.8,
|
|
392
|
-
"output_tokens": 5422.1,
|
|
393
|
-
"cache_weighted_input_10": 69051.2,
|
|
394
|
-
"cache_weighted_input_25": 86373.9,
|
|
395
|
-
"prompt_growth": 28766.9,
|
|
396
|
-
"antipatterns": 0.7,
|
|
397
|
-
"issues": 11.9,
|
|
398
|
-
"grep_sweep_count": 0
|
|
399
|
-
},
|
|
400
|
-
"cards": [
|
|
401
|
-
{
|
|
402
|
-
"session": "sess_60408_1783063353252_1783063353494_ffb01c576742694d462d621830cf0e1c",
|
|
403
|
-
"provider": "openai-oauth",
|
|
404
|
-
"model": "gpt-5.5",
|
|
405
|
-
"wall_ms": 104242,
|
|
406
|
-
"turns": 8,
|
|
407
|
-
"tool_calls": 7,
|
|
408
|
-
"tools_per_turn": 0.9,
|
|
409
|
-
"total_tool_ms": 516,
|
|
410
|
-
"llm_stream_ms": 102684,
|
|
411
|
-
"cache_ratio": 0.7824456056127135,
|
|
412
|
-
"cached_tokens": 202752,
|
|
413
|
-
"prompt_tokens": 259126,
|
|
414
|
-
"uncached_tokens": 56374,
|
|
415
|
-
"output_tokens": 10681,
|
|
416
|
-
"cache_weighted_input_10": 76649.2,
|
|
417
|
-
"cache_weighted_input_25": 107062,
|
|
418
|
-
"prompt_growth": 40068,
|
|
419
|
-
"antipatterns": 1,
|
|
420
|
-
"issues": 14,
|
|
421
|
-
"issue_types": [
|
|
422
|
-
"cache",
|
|
423
|
-
"cache_break",
|
|
424
|
-
"cache_miss",
|
|
425
|
-
"broad_tool_result",
|
|
426
|
-
"service_tier",
|
|
427
|
-
"missed_parallelism",
|
|
428
|
-
"tool_churn_cluster"
|
|
429
|
-
],
|
|
430
|
-
"read_fragmentation_paths": [],
|
|
431
|
-
"grep_sweep_count": 0
|
|
432
|
-
},
|
|
433
|
-
{
|
|
434
|
-
"session": "sess_4988_1783063353262_1783063353504_2e497c9ba1e6a87f33f6b7f1ee20672a",
|
|
435
|
-
"provider": "openai-oauth",
|
|
436
|
-
"model": "gpt-5.5",
|
|
437
|
-
"wall_ms": 7960,
|
|
438
|
-
"turns": 1,
|
|
439
|
-
"tool_calls": 0,
|
|
440
|
-
"tools_per_turn": 0,
|
|
441
|
-
"total_tool_ms": 0,
|
|
442
|
-
"llm_stream_ms": 6838,
|
|
443
|
-
"cache_ratio": 0.2695871946082561,
|
|
444
|
-
"cached_tokens": 2560,
|
|
445
|
-
"prompt_tokens": 9496,
|
|
446
|
-
"uncached_tokens": 6936,
|
|
447
|
-
"output_tokens": 568,
|
|
448
|
-
"cache_weighted_input_10": 7192,
|
|
449
|
-
"cache_weighted_input_25": 7576,
|
|
450
|
-
"prompt_growth": 0,
|
|
451
|
-
"antipatterns": 0,
|
|
452
|
-
"issues": 3,
|
|
453
|
-
"issue_types": [
|
|
454
|
-
"cache",
|
|
455
|
-
"cache_break",
|
|
456
|
-
"service_tier"
|
|
457
|
-
],
|
|
458
|
-
"read_fragmentation_paths": [],
|
|
459
|
-
"grep_sweep_count": 0
|
|
460
|
-
},
|
|
461
|
-
{
|
|
462
|
-
"session": "sess_39880_1783063353281_1783063353525_1d1b13112d7adc7b0cf1e8742ffe6a5f",
|
|
463
|
-
"provider": "openai-oauth",
|
|
464
|
-
"model": "gpt-5.5",
|
|
465
|
-
"wall_ms": 70341,
|
|
466
|
-
"turns": 7,
|
|
467
|
-
"tool_calls": 8,
|
|
468
|
-
"tools_per_turn": 1.1,
|
|
469
|
-
"total_tool_ms": 678,
|
|
470
|
-
"llm_stream_ms": 69228,
|
|
471
|
-
"cache_ratio": 0.6953839424963888,
|
|
472
|
-
"cached_tokens": 120832,
|
|
473
|
-
"prompt_tokens": 173763,
|
|
474
|
-
"uncached_tokens": 52931,
|
|
475
|
-
"output_tokens": 6592,
|
|
476
|
-
"cache_weighted_input_10": 65014.2,
|
|
477
|
-
"cache_weighted_input_25": 83139,
|
|
478
|
-
"prompt_growth": 42359,
|
|
479
|
-
"antipatterns": 1,
|
|
480
|
-
"issues": 12,
|
|
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_33512_1783063371729_1783063371967_9a4241862453a1eea2e17976f6798c12",
|
|
494
|
-
"provider": "openai-oauth",
|
|
495
|
-
"model": "gpt-5.5",
|
|
496
|
-
"wall_ms": 81878,
|
|
497
|
-
"turns": 11,
|
|
498
|
-
"tool_calls": 10,
|
|
499
|
-
"tools_per_turn": 0.9,
|
|
500
|
-
"total_tool_ms": 760,
|
|
501
|
-
"llm_stream_ms": 80469,
|
|
502
|
-
"cache_ratio": 0.5901015721947442,
|
|
503
|
-
"cached_tokens": 166912,
|
|
504
|
-
"prompt_tokens": 282853,
|
|
505
|
-
"uncached_tokens": 115941,
|
|
506
|
-
"output_tokens": 5611,
|
|
507
|
-
"cache_weighted_input_10": 132632.2,
|
|
508
|
-
"cache_weighted_input_25": 157669,
|
|
509
|
-
"prompt_growth": 35859,
|
|
510
|
-
"antipatterns": 1,
|
|
511
|
-
"issues": 17,
|
|
512
|
-
"issue_types": [
|
|
513
|
-
"cache",
|
|
514
|
-
"cache_break",
|
|
515
|
-
"cache_miss",
|
|
516
|
-
"readonly_stall",
|
|
517
|
-
"service_tier",
|
|
518
|
-
"missed_parallelism",
|
|
519
|
-
"tool_churn_cluster"
|
|
520
|
-
],
|
|
521
|
-
"read_fragmentation_paths": [],
|
|
522
|
-
"grep_sweep_count": 0
|
|
523
|
-
},
|
|
524
|
-
{
|
|
525
|
-
"session": "sess_46584_1783063434132_1783063434375_2f5bc8a596d80965dc2b007018f607cd",
|
|
526
|
-
"provider": "openai-oauth",
|
|
527
|
-
"model": "gpt-5.5",
|
|
528
|
-
"wall_ms": 42587,
|
|
529
|
-
"turns": 9,
|
|
530
|
-
"tool_calls": 11,
|
|
531
|
-
"tools_per_turn": 1.2,
|
|
532
|
-
"total_tool_ms": 2585,
|
|
533
|
-
"llm_stream_ms": 39637,
|
|
534
|
-
"cache_ratio": 0.6918918918918919,
|
|
535
|
-
"cached_tokens": 79872,
|
|
536
|
-
"prompt_tokens": 115440,
|
|
537
|
-
"uncached_tokens": 35568,
|
|
538
|
-
"output_tokens": 2162,
|
|
539
|
-
"cache_weighted_input_10": 43555.2,
|
|
540
|
-
"cache_weighted_input_25": 55536,
|
|
541
|
-
"prompt_growth": 7625,
|
|
542
|
-
"antipatterns": 1,
|
|
543
|
-
"issues": 14,
|
|
544
|
-
"issue_types": [
|
|
545
|
-
"cache",
|
|
546
|
-
"cache_break",
|
|
547
|
-
"cache_miss",
|
|
548
|
-
"service_tier",
|
|
549
|
-
"missed_parallelism",
|
|
550
|
-
"tool_churn_cluster"
|
|
551
|
-
],
|
|
552
|
-
"read_fragmentation_paths": [],
|
|
553
|
-
"grep_sweep_count": 0
|
|
554
|
-
},
|
|
555
|
-
{
|
|
556
|
-
"session": "sess_8156_1783063464105_1783063464349_363e58bf8ffe09e0bd16e479ab77bef3",
|
|
557
|
-
"provider": "openai-oauth",
|
|
558
|
-
"model": "gpt-5.5",
|
|
559
|
-
"wall_ms": 84705,
|
|
560
|
-
"turns": 11,
|
|
561
|
-
"tool_calls": 10,
|
|
562
|
-
"tools_per_turn": 0.9,
|
|
563
|
-
"total_tool_ms": 772,
|
|
564
|
-
"llm_stream_ms": 83249,
|
|
565
|
-
"cache_ratio": 0.586002007841701,
|
|
566
|
-
"cached_tokens": 179200,
|
|
567
|
-
"prompt_tokens": 305801,
|
|
568
|
-
"uncached_tokens": 126601,
|
|
569
|
-
"output_tokens": 5651,
|
|
570
|
-
"cache_weighted_input_10": 144521,
|
|
571
|
-
"cache_weighted_input_25": 171401,
|
|
572
|
-
"prompt_growth": 54901,
|
|
573
|
-
"antipatterns": 1,
|
|
574
|
-
"issues": 17,
|
|
575
|
-
"issue_types": [
|
|
576
|
-
"cache",
|
|
577
|
-
"cache_break",
|
|
578
|
-
"cache_miss",
|
|
579
|
-
"readonly_stall",
|
|
580
|
-
"broad_tool_result",
|
|
581
|
-
"service_tier",
|
|
582
|
-
"missed_parallelism",
|
|
583
|
-
"tool_churn_cluster"
|
|
584
|
-
],
|
|
585
|
-
"read_fragmentation_paths": [],
|
|
586
|
-
"grep_sweep_count": 0
|
|
587
|
-
},
|
|
588
|
-
{
|
|
589
|
-
"session": "sess_50160_1783063467999_1783063468251_274caf327774153c94df94f9ffb0a9b9",
|
|
590
|
-
"provider": "openai-oauth",
|
|
591
|
-
"model": "gpt-5.5",
|
|
592
|
-
"wall_ms": 114511,
|
|
593
|
-
"turns": 6,
|
|
594
|
-
"tool_calls": 10,
|
|
595
|
-
"tools_per_turn": 1.7,
|
|
596
|
-
"total_tool_ms": 903,
|
|
597
|
-
"llm_stream_ms": 113542,
|
|
598
|
-
"cache_ratio": 0.7140668668976461,
|
|
599
|
-
"cached_tokens": 130048,
|
|
600
|
-
"prompt_tokens": 182123,
|
|
601
|
-
"uncached_tokens": 52075,
|
|
602
|
-
"output_tokens": 11313,
|
|
603
|
-
"cache_weighted_input_10": 65079.8,
|
|
604
|
-
"cache_weighted_input_25": 84587,
|
|
605
|
-
"prompt_growth": 41209,
|
|
606
|
-
"antipatterns": 0,
|
|
607
|
-
"issues": 9,
|
|
608
|
-
"issue_types": [
|
|
609
|
-
"cache",
|
|
610
|
-
"cache_break",
|
|
611
|
-
"broad_tool_result",
|
|
612
|
-
"service_tier"
|
|
613
|
-
],
|
|
614
|
-
"read_fragmentation_paths": [],
|
|
615
|
-
"grep_sweep_count": 0
|
|
616
|
-
},
|
|
617
|
-
{
|
|
618
|
-
"session": "sess_35916_1783063487207_1783063487441_71e4fa81bf39a50301d9f3fe5118e29f",
|
|
619
|
-
"provider": "openai-oauth",
|
|
620
|
-
"model": "gpt-5.5",
|
|
621
|
-
"wall_ms": 36892,
|
|
622
|
-
"turns": 7,
|
|
623
|
-
"tool_calls": 7,
|
|
624
|
-
"tools_per_turn": 1,
|
|
625
|
-
"total_tool_ms": 1780,
|
|
626
|
-
"llm_stream_ms": 34501,
|
|
627
|
-
"cache_ratio": 0.770208686675024,
|
|
628
|
-
"cached_tokens": 52224,
|
|
629
|
-
"prompt_tokens": 67805,
|
|
630
|
-
"uncached_tokens": 15581,
|
|
631
|
-
"output_tokens": 2014,
|
|
632
|
-
"cache_weighted_input_10": 20803.4,
|
|
633
|
-
"cache_weighted_input_25": 28637,
|
|
634
|
-
"prompt_growth": 2459,
|
|
635
|
-
"antipatterns": 1,
|
|
636
|
-
"issues": 11,
|
|
637
|
-
"issue_types": [
|
|
638
|
-
"cache",
|
|
639
|
-
"cache_break",
|
|
640
|
-
"service_tier",
|
|
641
|
-
"missed_parallelism",
|
|
642
|
-
"tool_churn_cluster"
|
|
643
|
-
],
|
|
644
|
-
"read_fragmentation_paths": [],
|
|
645
|
-
"grep_sweep_count": 0
|
|
646
|
-
},
|
|
647
|
-
{
|
|
648
|
-
"session": "sess_59820_1783063534589_1783063534826_5b1388cb0dce5fcf4952797e321186d1",
|
|
649
|
-
"provider": "openai-oauth",
|
|
650
|
-
"model": "gpt-5.5",
|
|
651
|
-
"wall_ms": 61497,
|
|
652
|
-
"turns": 7,
|
|
653
|
-
"tool_calls": 10,
|
|
654
|
-
"tools_per_turn": 1.4,
|
|
655
|
-
"total_tool_ms": 949,
|
|
656
|
-
"llm_stream_ms": 60317,
|
|
657
|
-
"cache_ratio": 0.6540460374630791,
|
|
658
|
-
"cached_tokens": 104960,
|
|
659
|
-
"prompt_tokens": 160478,
|
|
660
|
-
"uncached_tokens": 55518,
|
|
661
|
-
"output_tokens": 4207,
|
|
662
|
-
"cache_weighted_input_10": 66014,
|
|
663
|
-
"cache_weighted_input_25": 81758,
|
|
664
|
-
"prompt_growth": 34422,
|
|
665
|
-
"antipatterns": 0,
|
|
666
|
-
"issues": 10,
|
|
667
|
-
"issue_types": [
|
|
668
|
-
"cache",
|
|
669
|
-
"cache_break",
|
|
670
|
-
"broad_tool_result",
|
|
671
|
-
"service_tier"
|
|
672
|
-
],
|
|
673
|
-
"read_fragmentation_paths": [],
|
|
674
|
-
"grep_sweep_count": 0
|
|
675
|
-
}
|
|
676
|
-
]
|
|
677
|
-
}
|