mixdog 0.9.4 → 0.9.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +112 -38
- package/package.json +4 -1
- package/scripts/bench/r5-orchestrated-task.json +7 -0
- package/scripts/bench/round-r13-clientmeta.json +464 -0
- package/scripts/bench/round-r14-betafeatures.json +466 -0
- package/scripts/bench/round-r15-fulldefault.json +462 -0
- package/scripts/bench/round-r16-sessionid.json +466 -0
- package/scripts/bench/round-r17-wirebytes.json +456 -0
- package/scripts/bench/round-r18-prewarm.json +468 -0
- package/scripts/bench/round-r19-clean.json +472 -0
- package/scripts/bench/round-r20-prewarm-clean.json +475 -0
- package/scripts/bench/round-r21-delta-retry.json +473 -0
- package/scripts/bench/round-r22-full-probe.json +693 -0
- package/scripts/bench/round-r23-itemprobe.json +701 -0
- package/scripts/bench/round-r24-shapefix.json +677 -0
- package/scripts/bench/round-r25-serial.json +464 -0
- package/scripts/bench/round-r26-parallel3.json +671 -0
- package/scripts/bench/round-r27-parallel10.json +894 -0
- package/scripts/bench/round-r28-parallel10-stagger.json +882 -0
- package/scripts/bench/round-r29-parallel10-stagger166.json +886 -0
- package/scripts/bench/round-r30-instid.json +253 -0
- package/scripts/bench/round-r31-upgradeprobe.json +256 -0
- package/scripts/bench/round-r32-vs-codex-lead.json +254 -0
- package/scripts/bench/round-r33-vs-codex-codex.json +115 -0
- package/scripts/bench/round-r34-orchestrated.json +120 -0
- package/scripts/bench/round-r35-orchestrated-codex.json +61 -0
- package/scripts/bench/round-r36-orchestrated-capped.json +128 -0
- package/scripts/bench-run.mjs +40 -7
- package/scripts/internal-comms-bench.mjs +2 -4
- package/scripts/model-catalog-audit.mjs +209 -0
- package/scripts/model-list-sanitize-test.mjs +37 -0
- package/scripts/recall-bench.mjs +76 -13
- package/scripts/recall-quality-cases.json +12 -0
- package/scripts/tool-smoke.mjs +2 -2
- package/src/agents/heavy-worker/AGENT.md +7 -7
- package/src/agents/scheduler-task/AGENT.md +2 -3
- package/src/agents/webhook-handler/AGENT.md +2 -3
- package/src/agents/worker/AGENT.md +9 -10
- package/src/app.mjs +12 -1
- package/src/headless-role.mjs +7 -1
- package/src/mixdog-session-runtime.mjs +15 -14
- package/src/output-styles/default.md +14 -18
- package/src/output-styles/minimal.md +4 -5
- package/src/output-styles/simple.md +7 -8
- package/src/rules/agent/00-common.md +6 -5
- package/src/rules/agent/30-explorer.md +16 -5
- package/src/rules/lead/01-general.md +5 -5
- package/src/rules/lead/lead-brief.md +6 -3
- package/src/rules/lead/lead-tool.md +6 -4
- package/src/rules/shared/01-tool.md +17 -21
- package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch.mjs +8 -3
- package/src/runtime/agent/orchestrator/providers/model-catalog.mjs +19 -0
- package/src/runtime/agent/orchestrator/providers/model-list-sanitize.mjs +11 -3
- package/src/runtime/agent/orchestrator/providers/openai-oauth-http-sse.mjs +9 -1
- package/src/runtime/agent/orchestrator/providers/openai-oauth-ws.mjs +53 -9
- package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs +23 -10
- package/src/runtime/agent/orchestrator/providers/openai-ws-delta.mjs +11 -9
- package/src/runtime/agent/orchestrator/providers/openai-ws-pool.mjs +33 -4
- package/src/runtime/agent/orchestrator/providers/provider-catalog-cache.mjs +80 -0
- package/src/runtime/agent/orchestrator/session/loop/recall-fasttrack.mjs +93 -0
- package/src/runtime/agent/orchestrator/session/loop.mjs +27 -5
- package/src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs +1 -1
- package/src/runtime/agent/orchestrator/stall-policy.mjs +20 -1
- package/src/runtime/agent/orchestrator/tools/builtin/builtin-tools.mjs +7 -7
- package/src/runtime/agent/orchestrator/tools/code-graph-tool-defs.mjs +1 -1
- package/src/runtime/channels/backends/discord-gateway.mjs +2 -2
- package/src/runtime/channels/backends/discord.mjs +15 -26
- package/src/runtime/channels/backends/telegram.mjs +8 -12
- package/src/runtime/channels/index.mjs +23 -43
- package/src/runtime/channels/lib/backend-dispatch.mjs +5 -3
- package/src/runtime/channels/lib/config.mjs +37 -149
- package/src/runtime/channels/lib/event-pipeline.mjs +4 -4
- package/src/runtime/channels/lib/event-queue.mjs +15 -9
- package/src/runtime/channels/lib/inbound-routing.mjs +2 -39
- package/src/runtime/channels/lib/interaction-workflows.mjs +5 -113
- package/src/runtime/channels/lib/scheduler.mjs +27 -113
- package/src/runtime/channels/lib/webhook/deliveries.mjs +3 -2
- package/src/runtime/channels/lib/webhook.mjs +8 -47
- package/src/runtime/memory/index.mjs +9 -0
- package/src/runtime/memory/lib/core-memory-store.mjs +5 -1
- package/src/runtime/memory/lib/ko-morph.mjs +195 -0
- package/src/runtime/memory/lib/memory-recall-store.mjs +47 -10
- package/src/runtime/memory/lib/memory-text-utils.mjs +46 -0
- package/src/runtime/memory/lib/query-handlers.mjs +27 -5
- package/src/runtime/memory/tool-defs.mjs +2 -2
- package/src/runtime/shared/config.mjs +14 -4
- package/src/runtime/shared/markdown-frontmatter.mjs +19 -0
- package/src/runtime/shared/schedules-store.mjs +13 -3
- package/src/runtime/shared/tool-execution-contract.mjs +2 -2
- package/src/session-runtime/config-helpers.mjs +45 -10
- package/src/session-runtime/quick-model-rows.mjs +46 -11
- package/src/session-runtime/quick-search-models.mjs +28 -27
- package/src/session-runtime/settings-api.mjs +34 -1
- package/src/session-runtime/tool-defs.mjs +1 -1
- package/src/session-runtime/workflow.mjs +1 -1
- package/src/standalone/agent-tool/tool-def.mjs +1 -1
- package/src/standalone/agent-tool.mjs +30 -0
- package/src/standalone/channel-admin.mjs +102 -90
- package/src/standalone/explore-tool.mjs +39 -10
- package/src/tui/App.jsx +131 -28
- package/src/tui/app/app-format.mjs +11 -4
- package/src/tui/app/channel-pickers.mjs +2 -4
- package/src/tui/app/maintenance-pickers.mjs +60 -28
- package/src/tui/app/model-options.mjs +5 -1
- package/src/tui/app/settings-picker.mjs +0 -1
- package/src/tui/app/transcript-window.mjs +8 -2
- package/src/tui/app/use-transcript-scroll.mjs +3 -1
- package/src/tui/app/use-transcript-window.mjs +19 -1
- package/src/tui/components/ConfirmBar.jsx +10 -7
- package/src/tui/components/Picker.jsx +32 -11
- package/src/tui/components/PromptInput.jsx +10 -1
- package/src/tui/components/StatusLine.jsx +6 -3
- package/src/tui/dist/index.mjs +441 -293
- package/src/tui/engine.mjs +48 -12
- package/src/tui/index.jsx +11 -52
- package/src/ui/statusline.mjs +10 -0
- package/src/workflows/default/WORKFLOW.md +15 -17
- package/src/workflows/sequential/WORKFLOW.md +15 -17
- package/vendor/ink/build/ink.js +9 -1
- package/scripts/recall-usecase-probe.json +0 -6
- package/src/runtime/channels/lib/holidays.mjs +0 -138
|
@@ -0,0 +1,472 @@
|
|
|
1
|
+
{
|
|
2
|
+
"round": "19",
|
|
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": 6,
|
|
14
|
+
"completed": 6,
|
|
15
|
+
"completion_rate": 100,
|
|
16
|
+
"sessions": [
|
|
17
|
+
"sess_48856_1783060836891_1783060837135_e952f0bbbaf44e8ef732614f8901c408",
|
|
18
|
+
"sess_55484_1783060836900_1783060837139_1f61cdd7697adbe226aacf678ee9ecfa",
|
|
19
|
+
"sess_60880_1783060836920_1783060837160_efd7c81b6e04f11447f4eb0c0ec4f4e2",
|
|
20
|
+
"sess_13112_1783060905932_1783060906166_d289e3c2c6991006505416b372a76d6d",
|
|
21
|
+
"sess_54372_1783060923790_1783060924038_2bfee097b5d7680cee3b032dd982e6b5",
|
|
22
|
+
"sess_53620_1783060960071_1783060960297_888958753e8595a55b610fb1757c0ab2"
|
|
23
|
+
],
|
|
24
|
+
"results": [
|
|
25
|
+
{
|
|
26
|
+
"id": "r4-debug-forwarding-gap#1",
|
|
27
|
+
"agent": "reviewer",
|
|
28
|
+
"ok": true,
|
|
29
|
+
"ms": 123197,
|
|
30
|
+
"sessionId": "sess_48856_1783060836891_1783060837135_e952f0bbbaf44e8ef732614f8901c408",
|
|
31
|
+
"output": "sessionId: sess_48856_1783060836891_1783060837135_e952f0bbbaf44e8ef732614f8901c408\n관련 흐름을 직접 추적해 누락/지연 구간과 backlog 복구 여부를 확인하겠습니다.조사 완료: `bridge-state.json`은 준비 완료 신호가 아니라 “활성화 의사” 신호라서, 첫 전달 전 창은 존재하며 일부는 catch-up으로 복구되지 않습니다.\n\n**경로** \n`activate_channel_bridge`가 `channelBridgeActive`와 `bridge-state.json`을 먼저 세움 → ownership claim/refresh → backend connect → persisted/current transcript bind → `fs.watch` 설치 → `forwardNewText()`가 transcript cursor 이후 assistant text를 전송합니다. \n앵커: `src/runtime/channels/lib/tool-dispatch.mjs:45`, `src/runtime/channels/index.mjs:1734`, `src/runtime/channels/index.mjs:710`, `src/runtime/channels/index.mjs:577`, `src/runtime/channels/lib/output-forwarder.mjs:647`, `src/runtime/channels/lib/output-forwarder.mjs:351`.\n\n**영향 1 — 기존 transcript를 EOF로 바인딩하면 창 안 출력이 영구 누락됩니다.** \n`catchUpFromPersisted`라도 persisted path가 같지 않으면 `setContext()`가 `currentSize`로 시작해 이미 쓰인 assistant bytes를 읽지 않습니다. 이후 `forwardNewText()`는 EOF에서 시작하므로 backlog catch-up이 복구하지 못합니다. \n앵커: `src/runtime/channels/lib/output-forwarder.mjs:117`, `src/runtime/channels/lib/output-forwarder.mjs:122`, `src/runtime/channels/index.mjs:625`, `src/runtime/channels/index.mjs:441`.\n\n**영향 2 — transcript path 자체를 아직 못 찾은 동안의 출력은 발견 방식에 따라 갈립니다.** \npending session path를 발견하면 `replayFromStart`/re-arm으로 복구되지만, 발견 실패 후 previous/latest fallback에 잘못 붙거나 나중에 existing file로만 보이면 위 EOF 문제가 되어 복구되지 않습니다. \n앵커: `src/runtime/channels/index.mjs:421`, `src/runtime/channels/index.mjs:469`, `src/runtime/channels/index.mjs:486`, `src/runtime/channels/index.mjs:503`.\n\n**영향 3 — not-yet-created transcript의 `fs.watch` 실패는 보통 지연이며, 제한부 복구됩니다.** \n`startWatch()`는 없는 파일에서 실패하지만 re-arm poll이 파일 생성 후 watch를 설치하고 `forwardNewText()`를 호출합니다. 단 60초 timeout, ownership 상실, connect 실패 후에는 자동 backlog 복구가 멈춥니다. \n앵커: `src/runtime/channels/lib/output-forwarder.mjs:656`, `src/runtime/channels/lib/output-forwarder.mjs:667`, `src/runtime/channels/index.mjs:340`, `src/runtime/channels/index.mjs:376`, `src/runtime/channels/index.mjs:384`.\n\n**영향 4 — ownership/backend connect 전 `forwardNewText()`는 지연 처리됩니다.** \nowner probe가 `bridgeRuntimeConnected && owned`라 pre-connect 호출은 읽지도 않고 반환합니다. start 완료 후 `forwardNewText()` 또는 pending re-arm을 다시 호출하므로 cursor가 이미 EOF로 잡히지 않은 경우 backlog는 복구됩니다. \n앵커: `src/runtime/channels/index.mjs:316`, `src/runtime/channels/lib/output-forwarder.mjs:352`, `src/runtime/channels/index.mjs:759`, `src/runtime/channels/index.mjs:801`.\n\n**영향 5 — watch 설치 직전/직후 append는 복구됩니다.** \n정상 파일 watch는 설치 직후 `scheduleWatchFlush()`를 호출해 stat→watch 사이 bytes를 100ms 후 읽습니다. partial line은 newline 전까지 지연되지만 cursor를 넘기지 않아 손실은 아닙니다. \n앵커: `src/runtime/channels/lib/output-forwarder.mjs:665`, `src/runtime/channels/lib/output-forwarder.mjs:703`, `src/runtime/channels/lib/output-forwarder.mjs:172`.\n\n판정: bridge activation window는 “대부분 지연 후 복구”지만, persisted cursor가 없는 existing transcript 바인딩은 첫 assistant output을 영구 누락할 수 있습니다.",
|
|
32
|
+
"card": {
|
|
33
|
+
"session": "sess_48856_1783060836891_1783060837135_e952f0bbbaf44e8ef732614f8901c408",
|
|
34
|
+
"provider": "openai-oauth",
|
|
35
|
+
"model": "gpt-5.5",
|
|
36
|
+
"wall_ms": 112676,
|
|
37
|
+
"turns": 9,
|
|
38
|
+
"tool_calls": 12,
|
|
39
|
+
"tools_per_turn": 1.3,
|
|
40
|
+
"total_tool_ms": 961,
|
|
41
|
+
"llm_stream_ms": 111145,
|
|
42
|
+
"cache_ratio": 0.7687751462109585,
|
|
43
|
+
"cached_tokens": 185344,
|
|
44
|
+
"prompt_tokens": 241090,
|
|
45
|
+
"uncached_tokens": 55746,
|
|
46
|
+
"output_tokens": 11268,
|
|
47
|
+
"cache_weighted_input_10": 74280.4,
|
|
48
|
+
"cache_weighted_input_25": 102082,
|
|
49
|
+
"prompt_growth": 49054,
|
|
50
|
+
"antipatterns": 1,
|
|
51
|
+
"issues": 14,
|
|
52
|
+
"issue_types": [
|
|
53
|
+
"cache",
|
|
54
|
+
"cache_break",
|
|
55
|
+
"broad_tool_result",
|
|
56
|
+
"service_tier",
|
|
57
|
+
"missed_parallelism",
|
|
58
|
+
"tool_churn_cluster"
|
|
59
|
+
],
|
|
60
|
+
"read_fragmentation_paths": [],
|
|
61
|
+
"grep_sweep_count": 0
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"id": "r4-impl-usage-summary#1",
|
|
66
|
+
"agent": "worker",
|
|
67
|
+
"ok": true,
|
|
68
|
+
"ms": 86902,
|
|
69
|
+
"sessionId": "sess_55484_1783060836900_1783060837139_1f61cdd7697adbe226aacf678ee9ecfa",
|
|
70
|
+
"output": "sessionId: sess_55484_1783060836900_1783060837139_1f61cdd7697adbe226aacf678ee9ecfa\n요청 범위에 맞춰 스크립트와 npm 항목을 추가하고 검증까지 진행하겠습니다.이미 항목과 파일이 있어, 실제 추적 row 형식과 요구사항 일치 여부를 확인한 뒤 필요한 보정만 하겠습니다.요구 기능은 현재 파일 기준 대부분 준비돼 있어, 문법 검사와 실제 실행 결과를 확인하겠습니다.완료됐습니다. `usage:today` 스크립트와 `scripts/usage-today.mjs`가 추가된 상태입니다.\n\n- **Diff 요약**: `package.json`에 `usage:today` 추가, 새 스크립트가 오늘 0시 이후 usage row를 모델별/총합으로 집계합니다.\n- **검증**: `node --check scripts/usage-today.mjs` 통과, `npm run usage:today` 실행 완료.\n- **주의**: 작업 전부터 보이는 별도 변경 `src/runtime/channels/lib/*` 2개는 건드리지 않았습니다.",
|
|
71
|
+
"card": {
|
|
72
|
+
"session": "sess_55484_1783060836900_1783060837139_1f61cdd7697adbe226aacf678ee9ecfa",
|
|
73
|
+
"provider": "openai-oauth",
|
|
74
|
+
"model": "gpt-5.5",
|
|
75
|
+
"wall_ms": 76340,
|
|
76
|
+
"turns": 10,
|
|
77
|
+
"tool_calls": 15,
|
|
78
|
+
"tools_per_turn": 1.5,
|
|
79
|
+
"total_tool_ms": 2088,
|
|
80
|
+
"llm_stream_ms": 73904,
|
|
81
|
+
"cache_ratio": 0.8114566878156156,
|
|
82
|
+
"cached_tokens": 156672,
|
|
83
|
+
"prompt_tokens": 193075,
|
|
84
|
+
"uncached_tokens": 36403,
|
|
85
|
+
"output_tokens": 4477,
|
|
86
|
+
"cache_weighted_input_10": 52070.2,
|
|
87
|
+
"cache_weighted_input_25": 75571,
|
|
88
|
+
"prompt_growth": 22878,
|
|
89
|
+
"antipatterns": 0,
|
|
90
|
+
"issues": 14,
|
|
91
|
+
"issue_types": [
|
|
92
|
+
"cache",
|
|
93
|
+
"cache_break",
|
|
94
|
+
"cache_miss",
|
|
95
|
+
"readonly_stall",
|
|
96
|
+
"service_tier"
|
|
97
|
+
],
|
|
98
|
+
"read_fragmentation_paths": [],
|
|
99
|
+
"grep_sweep_count": 0
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"id": "r4-explain-compact-engine#1",
|
|
104
|
+
"agent": "explore",
|
|
105
|
+
"ok": true,
|
|
106
|
+
"ms": 69024,
|
|
107
|
+
"sessionId": "sess_60880_1783060836920_1783060837160_efd7c81b6e04f11447f4eb0c0ec4f4e2",
|
|
108
|
+
"output": "sessionId: sess_60880_1783060836920_1783060837160_efd7c81b6e04f11447f4eb0c0ec4f4e2\nArchitecture brief for `src/runtime/agent/orchestrator/session/compact/engine.mjs`:\n\n- **Entry points:** `semanticCompactMessages()` and `recallFastTrackCompactMessages()` are the exported compaction engines. `src/runtime/agent/orchestrator/session/compact/engine.mjs:278`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:445`\n\n- **Turn caller:** normal turns enter `agentLoop()` through `askSession()`, then auto compaction invokes recall-fasttrack or semantic compaction before provider send. `src/runtime/agent/orchestrator/session/manager.mjs:1379`, `src/runtime/agent/orchestrator/session/loop.mjs:416`, `src/runtime/agent/orchestrator/session/loop.mjs:441`\n\n- **Manual callers:** `runtime.compact()` calls `compactSessionMessages()`, which runs `runSessionCompaction()`. `src/mixdog-session-runtime.mjs:2452`, `src/runtime/agent/orchestrator/session/manager.mjs:1950`\n\n- **Clear path:** `clearSessionMessages()` can pre-compact before clearing and preserves a retained summary if configured. `src/runtime/agent/orchestrator/session/manager.mjs:1841`, `src/runtime/agent/orchestrator/session/manager.mjs:1896`\n\n- **Auto-fire decision:** loop drains pending steering first, resolves compact policy, then checks `shouldCompactForSession()`. `src/runtime/agent/orchestrator/session/loop.mjs:324`, `src/runtime/agent/orchestrator/session/loop.mjs:329`, `src/runtime/agent/orchestrator/session/loop.mjs:353`\n\n- **Threshold rule:** auto compacts when forced by reactive overflow, token estimate is unavailable, or message pressure plus reserve reaches trigger tokens. `src/runtime/agent/orchestrator/session/loop/compact-policy.mjs:151`, `src/runtime/agent/orchestrator/session/loop/compact-policy.mjs:170`\n\n- **Policy inputs:** boundary, trigger, reserve, compact type, tail turns, and preserved recent tokens are resolved from session config/env/tool reserve. `src/runtime/agent/orchestrator/session/loop/compact-policy.mjs:89`, `src/runtime/agent/orchestrator/session/loop/compact-policy.mjs:121`, `src/runtime/agent/orchestrator/session/loop/compact-policy.mjs:123`\n\n- **Manual gate:** manual compaction is forced, while non-forced session compaction exits below threshold. `src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs:143`, `src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs:176`\n\n- **Shared preprocessing:** engine sanitizes tool pairs, separates protected system/reminder prefix, finds previous summary, and removes summaries from live history. `src/runtime/agent/orchestrator/session/compact/engine.mjs:100`\n\n- **Semantic tail:** semantic compaction keeps recent live context by user turns when any user exists, otherwise by non-tool cut points. `src/runtime/agent/orchestrator/session/compact/engine.mjs:240`\n\n- **Semantic user-tail rule:** it walks newest turns backward within `preserveRecentBudget()`, splitting the newest turn suffix if needed. `src/runtime/agent/orchestrator/session/compact/engine.mjs:134`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:151`\n\n- **Semantic no-user rule:** it chooses newest valid non-tool cut points that fit, avoiding a tail starting with orphan tool results. `src/runtime/agent/orchestrator/session/compact/engine.mjs:193`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:246`\n\n- **Recall tail:** recall-fasttrack keeps the newest two user-anchored turns by default, drops oldest kept turns over cap, then truncates the oldest surviving content if needed. `src/runtime/agent/orchestrator/session/compact/engine.mjs:449`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:601`\n\n- **Recall no-user/tiny-tail fallback:** no-user tails are valid, oversized single messages are middle-truncated, and orphan tool results pull in their owning assistant where possible. `src/runtime/agent/orchestrator/session/compact/engine.mjs:543`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:553`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:613`\n\n- **Redaction hook:** if compaction is a no-op, sanitized messages return unchanged; once compaction proceeds, tool-call secrets are redacted before window selection. `src/runtime/agent/orchestrator/session/compact/engine.mjs:286`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:306`\n\n- **Redaction behavior:** preserved verbatim tool-call arguments are scrubbed shape-preservingly, with sensitive keys and raw `key:value` secrets replaced by `[redacted]`. `src/runtime/agent/orchestrator/session/compact/text-utils.mjs:219`, `src/runtime/agent/orchestrator/session/compact/text-utils.mjs:261`\n\n- **Prompt redaction:** prompt-side tool summaries also normalize/redact argument strings before truncation. `src/runtime/agent/orchestrator/session/compact/text-utils.mjs:121`, `src/runtime/agent/orchestrator/session/compact/text-utils.mjs:151`\n\n- **Semantic failure points:** semantic throws on missing provider, empty live window, no compactable prior history, unfittable prompt/summary, empty provider summary, or final budget overflow. `src/runtime/agent/orchestrator/session/compact/engine.mjs:279`, `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:395`\n\n- **Semantic soft repair:** malformed but non-empty provider summaries are repaired into the required schema before insertion. `src/runtime/agent/orchestrator/session/compact/summary.mjs:302`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:376`\n\n- **Recall failure points:** recall-fasttrack throws when no compactable prior/recall context exists, recall text is empty, summary cannot fit, or final output exceeds budget. `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`, `src/runtime/agent/orchestrator/session/compact/engine.mjs:698`\n\n- **Fallbacks:** manager recall-fasttrack falls back once to semantic; semantic/non-recall failures can fall back to unanchored tool-output prune, but recall failures skip that silent prune. `src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs:237`, `src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs:327`, `src/runtime/agent/orchestrator/session/loop.mjs:501`\n\n- **Failure persistence:** if all paths fail, compaction records terminal failure metadata and leaves messages unchanged. `src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs:348`, `src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs:375`",
|
|
109
|
+
"card": {
|
|
110
|
+
"session": "sess_60880_1783060836920_1783060837160_efd7c81b6e04f11447f4eb0c0ec4f4e2",
|
|
111
|
+
"provider": "openai-oauth",
|
|
112
|
+
"model": "gpt-5.5",
|
|
113
|
+
"wall_ms": 58497,
|
|
114
|
+
"turns": 7,
|
|
115
|
+
"tool_calls": 6,
|
|
116
|
+
"tools_per_turn": 0.9,
|
|
117
|
+
"total_tool_ms": 707,
|
|
118
|
+
"llm_stream_ms": 56804,
|
|
119
|
+
"cache_ratio": 0.6065159414414129,
|
|
120
|
+
"cached_tokens": 95744,
|
|
121
|
+
"prompt_tokens": 157859,
|
|
122
|
+
"uncached_tokens": 62115,
|
|
123
|
+
"output_tokens": 4563,
|
|
124
|
+
"cache_weighted_input_10": 71689.4,
|
|
125
|
+
"cache_weighted_input_25": 86051,
|
|
126
|
+
"prompt_growth": 50497,
|
|
127
|
+
"antipatterns": 1,
|
|
128
|
+
"issues": 13,
|
|
129
|
+
"issue_types": [
|
|
130
|
+
"cache",
|
|
131
|
+
"cache_break",
|
|
132
|
+
"broad_tool_result",
|
|
133
|
+
"service_tier",
|
|
134
|
+
"missed_parallelism",
|
|
135
|
+
"tool_churn_cluster"
|
|
136
|
+
],
|
|
137
|
+
"read_fragmentation_paths": [],
|
|
138
|
+
"grep_sweep_count": 0
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"id": "r4-debug-forwarding-gap#2",
|
|
143
|
+
"agent": "reviewer",
|
|
144
|
+
"ok": true,
|
|
145
|
+
"ms": 139059,
|
|
146
|
+
"sessionId": "sess_13112_1783060905932_1783060906166_d289e3c2c6991006505416b372a76d6d",
|
|
147
|
+
"output": "sessionId: sess_13112_1783060905932_1783060906166_d289e3c2c6991006505416b372a76d6d\n재영님, 확인 결과 `bridge-state.json`은 실제 전송 준비보다 먼저 쓰이며, 일부 창은 catch-up으로 회복되지만 “새 transcript를 EOF로 바인딩”하는 경우는 실제 유실됩니다.\n\n**경로 요약** \n`start()`/`activate_channel_bridge`가 `channelBridgeActive=true`와 `writeBridgeState(true)`를 먼저 수행합니다 (`src/runtime/channels/index.mjs:1734`, `src/runtime/channels/lib/tool-dispatch.mjs:45`). 이후 ownership claim → `refreshBridgeOwnership()` → `startOwnedRuntime()` → `bindPersistedTranscriptIfAny()`/`rebindTranscriptContext()` → `applyTranscriptBinding()` → `OutputForwarder.startWatch()` → `forwardNewText()` 순서로 첫 전송이 열립니다 (`src/runtime/channels/index.mjs:577`, `710`, `881`, `317`; `src/runtime/channels/lib/output-forwarder.mjs:647`, `351`).\n\n**영향 1 — 새 transcript를 기존 파일로 발견하면 EOF 바인딩으로 유실** \n`catchUpFromPersisted`에서 persisted path가 다르면 현재 파일 크기로 커서를 잡아 이미 쓰인 assistant output을 건너뜁니다 (`src/runtime/channels/lib/output-forwarder.mjs:117`). activation restore는 `catchUp:true`를 넘기지 않으므로, pending으로 보였다가 polling 중 파일이 생긴 경우도 `replayFromStart`가 꺼져 EOF가 됩니다 (`src/runtime/channels/index.mjs:438`, `625`). **backlog catch-up: 회복 안 됨.**\n\n**영향 2 — transcript가 60초 re-arm 안에 생기지 않으면 watcher 없이 남음** \n없는 파일에 `fs.watch`는 실패하고 (`src/runtime/channels/lib/output-forwarder.mjs:656`), `schedulePendingTranscriptRearm()`가 250ms 간격/60초 제한으로 파일 생성 후 watch+`forwardNewText()`를 수행합니다 (`src/runtime/channels/index.mjs:357`). 60초 뒤 생성되면 이후 같은 경로 rebind가 EOF로 커서를 갱신할 수 있습니다 (`src/runtime/channels/index.mjs:384`, `503`). **backlog catch-up: 60초 안이면 회복, 이후는 보장 안 됨/유실 가능.**\n\n**영향 3 — bridge active지만 ownership/connect 전에는 owner probe가 전송을 막음** \n`bridgeRuntimeConnected`가 `true` 되기 전 `forwardNewText()`는 `_isOwner()`에서 false로 반환되어 전송하지 않습니다 (`src/runtime/channels/index.mjs:316`, `776`; `src/runtime/channels/lib/output-forwarder.mjs:351`). 다만 커서는 소비하지 않고, post-connect에서 다시 `forwardNewText()` 또는 re-arm을 호출합니다 (`src/runtime/channels/index.mjs:801`). **backlog catch-up: 바인딩/커서가 올바르면 지연 후 회복.**\n\n**영향 4 — channelId를 못 정하면 바인딩 자체가 없음** \npersisted status나 main channel fallback이 없으면 `bindPersistedTranscriptIfAny()`가 반환합니다 (`src/runtime/channels/index.mjs:610`, `624`). 나중에 inbound에서 기존 transcript를 기본 바인딩하면 EOF 시작이라 activation 직후 output은 건너뛸 수 있습니다 (`src/runtime/channels/index.mjs:1597`; `src/runtime/channels/lib/output-forwarder.mjs:125`). **backlog catch-up: 보장 안 됨.**\n\n**평결:** activation 직후 output은 “없는 transcript + 60초 내 생성 + 올바른 persisted cursor”에서는 회복되지만, 새/이미 생성된 transcript를 EOF로 바인딩하는 경로는 실제 silent drop입니다.",
|
|
148
|
+
"card": {
|
|
149
|
+
"session": "sess_13112_1783060905932_1783060906166_d289e3c2c6991006505416b372a76d6d",
|
|
150
|
+
"provider": "openai-oauth",
|
|
151
|
+
"model": "gpt-5.5",
|
|
152
|
+
"wall_ms": 128546,
|
|
153
|
+
"turns": 10,
|
|
154
|
+
"tool_calls": 13,
|
|
155
|
+
"tools_per_turn": 1.3,
|
|
156
|
+
"total_tool_ms": 1023,
|
|
157
|
+
"llm_stream_ms": 127345,
|
|
158
|
+
"cache_ratio": 0.8045386561993172,
|
|
159
|
+
"cached_tokens": 254976,
|
|
160
|
+
"prompt_tokens": 316922,
|
|
161
|
+
"uncached_tokens": 61946,
|
|
162
|
+
"output_tokens": 10454,
|
|
163
|
+
"cache_weighted_input_10": 87443.6,
|
|
164
|
+
"cache_weighted_input_25": 125690,
|
|
165
|
+
"prompt_growth": 54401,
|
|
166
|
+
"antipatterns": 1,
|
|
167
|
+
"issues": 17,
|
|
168
|
+
"issue_types": [
|
|
169
|
+
"cache",
|
|
170
|
+
"cache_break",
|
|
171
|
+
"cache_miss",
|
|
172
|
+
"readonly_stall",
|
|
173
|
+
"broad_tool_result",
|
|
174
|
+
"service_tier",
|
|
175
|
+
"missed_parallelism",
|
|
176
|
+
"tool_churn_cluster"
|
|
177
|
+
],
|
|
178
|
+
"read_fragmentation_paths": [],
|
|
179
|
+
"grep_sweep_count": 0
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
"id": "r4-impl-usage-summary#2",
|
|
184
|
+
"agent": "worker",
|
|
185
|
+
"ok": true,
|
|
186
|
+
"ms": 86886,
|
|
187
|
+
"sessionId": "sess_54372_1783060923790_1783060924038_2bfee097b5d7680cee3b032dd982e6b5",
|
|
188
|
+
"output": "sessionId: sess_54372_1783060923790_1783060924038_2bfee097b5d7680cee3b032dd982e6b5\n요청 범위가 작고 실행 지시가 명확해 바로 구현·검증까지 진행하겠습니다.이미 `usage:today`와 `scripts/usage-today.mjs`가 존재해 요구사항 충족 여부를 확인한 뒤 필요한 보정만 하겠습니다.구현 파일이 이미 작업트리에 있어 검증을 실행하고 실제 diff 기준으로 요약하겠습니다.완료했습니다. `usage:today` 스크립트와 새 `scripts/usage-today.mjs`가 준비되어 오늘 사용량을 모델별/총합으로 출력합니다.\n\n- **검증:** `node --check scripts/usage-today.mjs` 통과, `npm run usage:today` 실행 성공.\n\n- **출력 확인:** 오늘 기준 `GRAND TOTAL` 포함 모델별 calls/input/cached/output/costUsd가 출력되었습니다.\n\n- **diff 요약:** `package.json`에 npm script 1줄 추가, `scripts/usage-today.mjs`는 신규 파일로 현재 untracked 상태입니다.",
|
|
189
|
+
"card": {
|
|
190
|
+
"session": "sess_54372_1783060923790_1783060924038_2bfee097b5d7680cee3b032dd982e6b5",
|
|
191
|
+
"provider": "openai-oauth",
|
|
192
|
+
"model": "gpt-5.5",
|
|
193
|
+
"wall_ms": 76383,
|
|
194
|
+
"turns": 8,
|
|
195
|
+
"tool_calls": 11,
|
|
196
|
+
"tools_per_turn": 1.4,
|
|
197
|
+
"total_tool_ms": 2411,
|
|
198
|
+
"llm_stream_ms": 73410,
|
|
199
|
+
"cache_ratio": 0.7012413744973001,
|
|
200
|
+
"cached_tokens": 80384,
|
|
201
|
+
"prompt_tokens": 114631,
|
|
202
|
+
"uncached_tokens": 34247,
|
|
203
|
+
"output_tokens": 5563,
|
|
204
|
+
"cache_weighted_input_10": 42285.4,
|
|
205
|
+
"cache_weighted_input_25": 54343,
|
|
206
|
+
"prompt_growth": 16935,
|
|
207
|
+
"antipatterns": 1,
|
|
208
|
+
"issues": 13,
|
|
209
|
+
"issue_types": [
|
|
210
|
+
"cache",
|
|
211
|
+
"cache_break",
|
|
212
|
+
"cache_miss",
|
|
213
|
+
"service_tier",
|
|
214
|
+
"tool_churn_cluster"
|
|
215
|
+
],
|
|
216
|
+
"read_fragmentation_paths": [],
|
|
217
|
+
"grep_sweep_count": 0
|
|
218
|
+
}
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
"id": "r4-explain-compact-engine#2",
|
|
222
|
+
"agent": "explore",
|
|
223
|
+
"ok": true,
|
|
224
|
+
"ms": 66335,
|
|
225
|
+
"sessionId": "sess_53620_1783060960071_1783060960297_888958753e8595a55b610fb1757c0ab2",
|
|
226
|
+
"output": "sessionId: sess_53620_1783060960071_1783060960297_888958753e8595a55b610fb1757c0ab2\n완료했습니다 — `src/runtime/agent/orchestrator/session/compact/engine.mjs` 기준 compaction 구조 요약입니다.\n\n```text\n- Entry points: `semanticCompactMessages()` and `recallFastTrackCompactMessages()` are exported from the engine (src/runtime/agent/orchestrator/session/compact/engine.mjs:278,445).\n- Live callers: pre-send loop invokes recall-fasttrack first when policy says so, otherwise semantic compaction (src/runtime/agent/orchestrator/session/loop.mjs:414-441).\n- Manual/session callers: `runSessionCompaction()` drives recall-fasttrack or semantic for manual compact and auto-clear pre-compact (src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs:143,207-210,280-288; src/runtime/agent/orchestrator/session/manager.mjs:1841-1850,1950-1957).\n- Policy source: loop builds policy from session/env, disables auto when configured, derives boundary/trigger/reserve/type/tail knobs (src/runtime/agent/orchestrator/session/loop/compact-policy.mjs:89-148).\n- Fire decision: auto compaction runs when pressure = estimated messages + reserve reaches trigger, estimate is null, or reactive overflow forces it (src/runtime/agent/orchestrator/session/loop/compact-policy.mjs:150-174).\n- Loop timing: queued steering is drained before checking, so the decision sees the exact next provider request (src/runtime/agent/orchestrator/session/loop.mjs:324-353).\n- Budget: target compact budget is min(boundary, target-effective + reserve), usually a small ratio/min/max target inside the boundary (src/runtime/agent/orchestrator/session/loop/compact-policy.mjs:54-83,163-168).\n- Reactive path: provider context-overflow marks one retry as reactive, loops back through normal pre-send compaction, then surfaces overflow if it repeats (src/runtime/agent/orchestrator/session/loop.mjs:982-1019).\n- Common preparation: semantic and recall sanitize tool pairs/dedup/reconcile before token checks (src/runtime/agent/orchestrator/session/compact/engine.mjs:100-111,284-289,625-627).\n- No-op path: if sanitized transcript already fits and `force` is not true, both engines return unchanged without redacting preserved-tail content (src/runtime/agent/orchestrator/session/compact/engine.mjs:286-304,627-642).\n- Redaction hook: once compaction will proceed, both engines call `redactToolCallSecretsInMessages()` before choosing preserved system/tail (src/runtime/agent/orchestrator/session/compact/engine.mjs:306-314,644-651).\n- Redaction behavior: it only rewrites sensitive tool-call argument values/raw secret strings while preserving message/tool-call shape (src/runtime/agent/orchestrator/session/compact/text-utils.mjs:217-229,291-326).\n- Semantic split: protected system context is separated, latest prior summary is found, summaries are removed from live, and head/tail are selected from live (src/runtime/agent/orchestrator/session/compact/engine.mjs:100-111,235-245).\n- Semantic tail with user turns: keep up to `tailTurns` newest turns within recent budget; if newest turn is too large, keep a fitting suffix or no tail (src/runtime/agent/orchestrator/session/compact/engine.mjs:130-185).\n- Semantic tail without user turns: choose newest valid non-tool cut point whose suffix fits, never starting tail on a tool result (src/runtime/agent/orchestrator/session/compact/engine.mjs:121-128,188-233).\n- Semantic output: head becomes one fitted summary; system and redacted tail are emitted verbatim, with budget raised if mandatory system+tail needs room (src/runtime/agent/orchestrator/session/compact/engine.mjs:319-330,384-397).\n- Recall tail policy: keep newest structured turns verbatim, default max two user-anchored turns, cap by token budget, preserving assistant/tool structure (src/runtime/agent/orchestrator/session/compact/engine.mjs:449-468,593-619).\n- Recall truncation: if preserved recall tail exceeds cap, drop oldest turns, then truncate oldest surviving content while keeping newest message and repairing tool pairs (src/runtime/agent/orchestrator/session/compact/engine.mjs:601-611,525-575).\n- Recall output: recall/prior text becomes fitted recall summary, followed by redacted preserved tail; empty recall is allowed in loop fast-track but forbidden in session runner fallback path (src/runtime/agent/orchestrator/session/loop/recall-fasttrack.mjs:161-172; src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs:210-220).\n- Semantic failures: missing provider, empty live/head without prior summary, prompt-fit, empty provider summary, summary-fit, or final budget overflow throw explicit errors (src/runtime/agent/orchestrator/session/compact/engine.mjs:279-280,315-317,335-337,371-386,394-397).\n- Recall failures: empty compactable history, empty recall text when not allowed, summary-fit, or final budget overflow throw explicit errors (src/runtime/agent/orchestrator/session/compact/engine.mjs:653-667,691-699).\n- Loop fallback: semantic failure can fall back to anchor-independent tool-output prune; recall-fasttrack failure skips prune and escalates overflow (src/runtime/agent/orchestrator/session/loop.mjs:500-538,546-626).\n- Session runner fallback: recall-fasttrack failure may degrade to semantic once; non-recall failure may prune; total failure records compaction error without replacing messages (src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs:231-278,322-347,348-397).\n- Success effects: loop replaces in-memory messages, clears providerState, resets iteration count/usage epoch, and records telemetry/events (src/runtime/agent/orchestrator/session/loop.mjs:630-664,696-716).\n- Session success effects: runner writes compacted messages, clears providerState, records lastSemantic/lastRecallFastTrack/errors/usage and returns token deltas (src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs:399-470).\n```",
|
|
227
|
+
"card": {
|
|
228
|
+
"session": "sess_53620_1783060960071_1783060960297_888958753e8595a55b610fb1757c0ab2",
|
|
229
|
+
"provider": "openai-oauth",
|
|
230
|
+
"model": "gpt-5.5",
|
|
231
|
+
"wall_ms": 55842,
|
|
232
|
+
"turns": 9,
|
|
233
|
+
"tool_calls": 11,
|
|
234
|
+
"tools_per_turn": 1.2,
|
|
235
|
+
"total_tool_ms": 1052,
|
|
236
|
+
"llm_stream_ms": 54324,
|
|
237
|
+
"cache_ratio": 0.7888024229903974,
|
|
238
|
+
"cached_tokens": 180224,
|
|
239
|
+
"prompt_tokens": 228478,
|
|
240
|
+
"uncached_tokens": 48254,
|
|
241
|
+
"output_tokens": 3164,
|
|
242
|
+
"cache_weighted_input_10": 66276.4,
|
|
243
|
+
"cache_weighted_input_25": 93310,
|
|
244
|
+
"prompt_growth": 41640,
|
|
245
|
+
"antipatterns": 1,
|
|
246
|
+
"issues": 14,
|
|
247
|
+
"issue_types": [
|
|
248
|
+
"cache",
|
|
249
|
+
"cache_break",
|
|
250
|
+
"readonly_stall",
|
|
251
|
+
"service_tier",
|
|
252
|
+
"missed_parallelism",
|
|
253
|
+
"tool_churn_cluster"
|
|
254
|
+
],
|
|
255
|
+
"read_fragmentation_paths": [],
|
|
256
|
+
"grep_sweep_count": 0
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
],
|
|
260
|
+
"task_complete": true,
|
|
261
|
+
"task_errors": [],
|
|
262
|
+
"score_complete": true,
|
|
263
|
+
"score_errors": [],
|
|
264
|
+
"group": {
|
|
265
|
+
"n": 6,
|
|
266
|
+
"wall_ms": 84714,
|
|
267
|
+
"turns": 8.8,
|
|
268
|
+
"tool_calls": 11.3,
|
|
269
|
+
"tools_per_turn": 1.3,
|
|
270
|
+
"total_tool_ms": 1373.7,
|
|
271
|
+
"llm_stream_ms": 82822,
|
|
272
|
+
"cache_ratio": 0.7,
|
|
273
|
+
"cached_tokens": 158890.7,
|
|
274
|
+
"prompt_tokens": 208675.8,
|
|
275
|
+
"uncached_tokens": 49785.2,
|
|
276
|
+
"output_tokens": 6581.5,
|
|
277
|
+
"cache_weighted_input_10": 65674.2,
|
|
278
|
+
"cache_weighted_input_25": 89507.8,
|
|
279
|
+
"prompt_growth": 39234.2,
|
|
280
|
+
"antipatterns": 0.8,
|
|
281
|
+
"issues": 14.2,
|
|
282
|
+
"grep_sweep_count": 0
|
|
283
|
+
},
|
|
284
|
+
"cards": [
|
|
285
|
+
{
|
|
286
|
+
"session": "sess_48856_1783060836891_1783060837135_e952f0bbbaf44e8ef732614f8901c408",
|
|
287
|
+
"provider": "openai-oauth",
|
|
288
|
+
"model": "gpt-5.5",
|
|
289
|
+
"wall_ms": 112676,
|
|
290
|
+
"turns": 9,
|
|
291
|
+
"tool_calls": 12,
|
|
292
|
+
"tools_per_turn": 1.3,
|
|
293
|
+
"total_tool_ms": 961,
|
|
294
|
+
"llm_stream_ms": 111145,
|
|
295
|
+
"cache_ratio": 0.7687751462109585,
|
|
296
|
+
"cached_tokens": 185344,
|
|
297
|
+
"prompt_tokens": 241090,
|
|
298
|
+
"uncached_tokens": 55746,
|
|
299
|
+
"output_tokens": 11268,
|
|
300
|
+
"cache_weighted_input_10": 74280.4,
|
|
301
|
+
"cache_weighted_input_25": 102082,
|
|
302
|
+
"prompt_growth": 49054,
|
|
303
|
+
"antipatterns": 1,
|
|
304
|
+
"issues": 14,
|
|
305
|
+
"issue_types": [
|
|
306
|
+
"cache",
|
|
307
|
+
"cache_break",
|
|
308
|
+
"broad_tool_result",
|
|
309
|
+
"service_tier",
|
|
310
|
+
"missed_parallelism",
|
|
311
|
+
"tool_churn_cluster"
|
|
312
|
+
],
|
|
313
|
+
"read_fragmentation_paths": [],
|
|
314
|
+
"grep_sweep_count": 0
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
"session": "sess_55484_1783060836900_1783060837139_1f61cdd7697adbe226aacf678ee9ecfa",
|
|
318
|
+
"provider": "openai-oauth",
|
|
319
|
+
"model": "gpt-5.5",
|
|
320
|
+
"wall_ms": 76340,
|
|
321
|
+
"turns": 10,
|
|
322
|
+
"tool_calls": 15,
|
|
323
|
+
"tools_per_turn": 1.5,
|
|
324
|
+
"total_tool_ms": 2088,
|
|
325
|
+
"llm_stream_ms": 73904,
|
|
326
|
+
"cache_ratio": 0.8114566878156156,
|
|
327
|
+
"cached_tokens": 156672,
|
|
328
|
+
"prompt_tokens": 193075,
|
|
329
|
+
"uncached_tokens": 36403,
|
|
330
|
+
"output_tokens": 4477,
|
|
331
|
+
"cache_weighted_input_10": 52070.2,
|
|
332
|
+
"cache_weighted_input_25": 75571,
|
|
333
|
+
"prompt_growth": 22878,
|
|
334
|
+
"antipatterns": 0,
|
|
335
|
+
"issues": 14,
|
|
336
|
+
"issue_types": [
|
|
337
|
+
"cache",
|
|
338
|
+
"cache_break",
|
|
339
|
+
"cache_miss",
|
|
340
|
+
"readonly_stall",
|
|
341
|
+
"service_tier"
|
|
342
|
+
],
|
|
343
|
+
"read_fragmentation_paths": [],
|
|
344
|
+
"grep_sweep_count": 0
|
|
345
|
+
},
|
|
346
|
+
{
|
|
347
|
+
"session": "sess_60880_1783060836920_1783060837160_efd7c81b6e04f11447f4eb0c0ec4f4e2",
|
|
348
|
+
"provider": "openai-oauth",
|
|
349
|
+
"model": "gpt-5.5",
|
|
350
|
+
"wall_ms": 58497,
|
|
351
|
+
"turns": 7,
|
|
352
|
+
"tool_calls": 6,
|
|
353
|
+
"tools_per_turn": 0.9,
|
|
354
|
+
"total_tool_ms": 707,
|
|
355
|
+
"llm_stream_ms": 56804,
|
|
356
|
+
"cache_ratio": 0.6065159414414129,
|
|
357
|
+
"cached_tokens": 95744,
|
|
358
|
+
"prompt_tokens": 157859,
|
|
359
|
+
"uncached_tokens": 62115,
|
|
360
|
+
"output_tokens": 4563,
|
|
361
|
+
"cache_weighted_input_10": 71689.4,
|
|
362
|
+
"cache_weighted_input_25": 86051,
|
|
363
|
+
"prompt_growth": 50497,
|
|
364
|
+
"antipatterns": 1,
|
|
365
|
+
"issues": 13,
|
|
366
|
+
"issue_types": [
|
|
367
|
+
"cache",
|
|
368
|
+
"cache_break",
|
|
369
|
+
"broad_tool_result",
|
|
370
|
+
"service_tier",
|
|
371
|
+
"missed_parallelism",
|
|
372
|
+
"tool_churn_cluster"
|
|
373
|
+
],
|
|
374
|
+
"read_fragmentation_paths": [],
|
|
375
|
+
"grep_sweep_count": 0
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
"session": "sess_13112_1783060905932_1783060906166_d289e3c2c6991006505416b372a76d6d",
|
|
379
|
+
"provider": "openai-oauth",
|
|
380
|
+
"model": "gpt-5.5",
|
|
381
|
+
"wall_ms": 128546,
|
|
382
|
+
"turns": 10,
|
|
383
|
+
"tool_calls": 13,
|
|
384
|
+
"tools_per_turn": 1.3,
|
|
385
|
+
"total_tool_ms": 1023,
|
|
386
|
+
"llm_stream_ms": 127345,
|
|
387
|
+
"cache_ratio": 0.8045386561993172,
|
|
388
|
+
"cached_tokens": 254976,
|
|
389
|
+
"prompt_tokens": 316922,
|
|
390
|
+
"uncached_tokens": 61946,
|
|
391
|
+
"output_tokens": 10454,
|
|
392
|
+
"cache_weighted_input_10": 87443.6,
|
|
393
|
+
"cache_weighted_input_25": 125690,
|
|
394
|
+
"prompt_growth": 54401,
|
|
395
|
+
"antipatterns": 1,
|
|
396
|
+
"issues": 17,
|
|
397
|
+
"issue_types": [
|
|
398
|
+
"cache",
|
|
399
|
+
"cache_break",
|
|
400
|
+
"cache_miss",
|
|
401
|
+
"readonly_stall",
|
|
402
|
+
"broad_tool_result",
|
|
403
|
+
"service_tier",
|
|
404
|
+
"missed_parallelism",
|
|
405
|
+
"tool_churn_cluster"
|
|
406
|
+
],
|
|
407
|
+
"read_fragmentation_paths": [],
|
|
408
|
+
"grep_sweep_count": 0
|
|
409
|
+
},
|
|
410
|
+
{
|
|
411
|
+
"session": "sess_54372_1783060923790_1783060924038_2bfee097b5d7680cee3b032dd982e6b5",
|
|
412
|
+
"provider": "openai-oauth",
|
|
413
|
+
"model": "gpt-5.5",
|
|
414
|
+
"wall_ms": 76383,
|
|
415
|
+
"turns": 8,
|
|
416
|
+
"tool_calls": 11,
|
|
417
|
+
"tools_per_turn": 1.4,
|
|
418
|
+
"total_tool_ms": 2411,
|
|
419
|
+
"llm_stream_ms": 73410,
|
|
420
|
+
"cache_ratio": 0.7012413744973001,
|
|
421
|
+
"cached_tokens": 80384,
|
|
422
|
+
"prompt_tokens": 114631,
|
|
423
|
+
"uncached_tokens": 34247,
|
|
424
|
+
"output_tokens": 5563,
|
|
425
|
+
"cache_weighted_input_10": 42285.4,
|
|
426
|
+
"cache_weighted_input_25": 54343,
|
|
427
|
+
"prompt_growth": 16935,
|
|
428
|
+
"antipatterns": 1,
|
|
429
|
+
"issues": 13,
|
|
430
|
+
"issue_types": [
|
|
431
|
+
"cache",
|
|
432
|
+
"cache_break",
|
|
433
|
+
"cache_miss",
|
|
434
|
+
"service_tier",
|
|
435
|
+
"tool_churn_cluster"
|
|
436
|
+
],
|
|
437
|
+
"read_fragmentation_paths": [],
|
|
438
|
+
"grep_sweep_count": 0
|
|
439
|
+
},
|
|
440
|
+
{
|
|
441
|
+
"session": "sess_53620_1783060960071_1783060960297_888958753e8595a55b610fb1757c0ab2",
|
|
442
|
+
"provider": "openai-oauth",
|
|
443
|
+
"model": "gpt-5.5",
|
|
444
|
+
"wall_ms": 55842,
|
|
445
|
+
"turns": 9,
|
|
446
|
+
"tool_calls": 11,
|
|
447
|
+
"tools_per_turn": 1.2,
|
|
448
|
+
"total_tool_ms": 1052,
|
|
449
|
+
"llm_stream_ms": 54324,
|
|
450
|
+
"cache_ratio": 0.7888024229903974,
|
|
451
|
+
"cached_tokens": 180224,
|
|
452
|
+
"prompt_tokens": 228478,
|
|
453
|
+
"uncached_tokens": 48254,
|
|
454
|
+
"output_tokens": 3164,
|
|
455
|
+
"cache_weighted_input_10": 66276.4,
|
|
456
|
+
"cache_weighted_input_25": 93310,
|
|
457
|
+
"prompt_growth": 41640,
|
|
458
|
+
"antipatterns": 1,
|
|
459
|
+
"issues": 14,
|
|
460
|
+
"issue_types": [
|
|
461
|
+
"cache",
|
|
462
|
+
"cache_break",
|
|
463
|
+
"readonly_stall",
|
|
464
|
+
"service_tier",
|
|
465
|
+
"missed_parallelism",
|
|
466
|
+
"tool_churn_cluster"
|
|
467
|
+
],
|
|
468
|
+
"read_fragmentation_paths": [],
|
|
469
|
+
"grep_sweep_count": 0
|
|
470
|
+
}
|
|
471
|
+
]
|
|
472
|
+
}
|