@holmes-lab/holmes-kit 0.2.1 → 0.3.1

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.
Files changed (132) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/dist/.build-id +1 -1
  3. package/dist/holmes/assoc/assoc-arm.d.ts +94 -0
  4. package/dist/holmes/assoc/assoc-arm.js +187 -0
  5. package/dist/holmes/assoc/explore.d.ts +21 -0
  6. package/dist/holmes/assoc/explore.js +160 -0
  7. package/dist/holmes/assoc/impact-baseline.d.ts +13 -0
  8. package/dist/holmes/assoc/impact-baseline.js +48 -0
  9. package/dist/holmes/assoc/ppr.d.ts +64 -0
  10. package/dist/holmes/assoc/ppr.js +110 -0
  11. package/dist/holmes/cli/agents.d.ts +24 -11
  12. package/dist/holmes/cli/agents.js +93 -21
  13. package/dist/holmes/cli/doctor.d.ts +56 -0
  14. package/dist/holmes/cli/doctor.js +311 -5
  15. package/dist/holmes/cli/index.js +13 -1
  16. package/dist/holmes/cli/semantic-key.d.ts +19 -0
  17. package/dist/holmes/cli/semantic-key.js +93 -0
  18. package/dist/holmes/config/config.d.ts +9 -0
  19. package/dist/holmes/config/config.js +8 -1
  20. package/dist/holmes/cpg/language-capability.d.ts +65 -0
  21. package/dist/holmes/cpg/language-capability.js +145 -0
  22. package/dist/holmes/cpg/language-parser-walk.js +179 -34
  23. package/dist/holmes/cpg/language-parser.d.ts +1 -1
  24. package/dist/holmes/governance/ledger-rechain.d.ts +12 -0
  25. package/dist/holmes/governance/ledger-rechain.js +17 -2
  26. package/dist/holmes/governance/provenance-ledger.js +21 -0
  27. package/dist/holmes/guardrail/blind-spots.js +12 -1
  28. package/dist/holmes/guardrail/impact-gate.d.ts +77 -0
  29. package/dist/holmes/guardrail/impact-gate.js +263 -0
  30. package/dist/holmes/guardrail/write-target.d.ts +38 -1
  31. package/dist/holmes/guardrail/write-target.js +41 -4
  32. package/dist/holmes/hooks/adapters/antigravity.js +12 -1
  33. package/dist/holmes/hooks/corrupt-state-run.d.ts +33 -0
  34. package/dist/holmes/hooks/corrupt-state-run.js +16 -0
  35. package/dist/holmes/hooks/pre-tool-use.d.ts +26 -0
  36. package/dist/holmes/hooks/pre-tool-use.js +203 -11
  37. package/dist/holmes/hooks/stop.d.ts +65 -0
  38. package/dist/holmes/hooks/stop.js +200 -2
  39. package/dist/holmes/mcp/elicit-approval.d.ts +32 -2
  40. package/dist/holmes/mcp/elicit-approval.js +30 -2
  41. package/dist/holmes/mcp/handlers.d.ts +88 -0
  42. package/dist/holmes/mcp/handlers.js +636 -35
  43. package/dist/holmes/mcp/maintenance-analyze.d.ts +435 -0
  44. package/dist/holmes/mcp/maintenance-analyze.js +994 -0
  45. package/dist/holmes/mcp/maintenance-evidence.d.ts +140 -0
  46. package/dist/holmes/mcp/maintenance-evidence.js +253 -0
  47. package/dist/holmes/mcp/server.js +13 -10
  48. package/dist/holmes/mcp/tool-schemas.js +71 -0
  49. package/dist/holmes/project/root.js +3 -1
  50. package/dist/holmes/review/baseline-arm.d.ts +37 -0
  51. package/dist/holmes/review/baseline-arm.js +51 -0
  52. package/dist/holmes/review/captured-stdin-guard.d.ts +8 -0
  53. package/dist/holmes/review/captured-stdin-guard.js +48 -0
  54. package/dist/holmes/review/coherence-verify.d.ts +31 -0
  55. package/dist/holmes/review/coherence-verify.js +144 -0
  56. package/dist/holmes/review/commit-text.d.ts +50 -0
  57. package/dist/holmes/review/commit-text.js +76 -0
  58. package/dist/holmes/review/confidence-calibration.d.ts +39 -0
  59. package/dist/holmes/review/confidence-calibration.js +39 -0
  60. package/dist/holmes/review/content-baseline.d.ts +38 -0
  61. package/dist/holmes/review/content-baseline.js +103 -0
  62. package/dist/holmes/review/content-verify.d.ts +20 -0
  63. package/dist/holmes/review/content-verify.js +73 -0
  64. package/dist/holmes/review/dense-retrieval.d.ts +66 -0
  65. package/dist/holmes/review/dense-retrieval.js +97 -0
  66. package/dist/holmes/review/edge-quality.d.ts +44 -0
  67. package/dist/holmes/review/edge-quality.js +117 -0
  68. package/dist/holmes/review/evaluation-metrics.d.ts +138 -0
  69. package/dist/holmes/review/evaluation-metrics.js +175 -0
  70. package/dist/holmes/review/graph-verifier.d.ts +34 -0
  71. package/dist/holmes/review/graph-verifier.js +62 -0
  72. package/dist/holmes/review/hop-ablation.d.ts +100 -0
  73. package/dist/holmes/review/hop-ablation.js +89 -0
  74. package/dist/holmes/review/manual-baseline.d.ts +209 -0
  75. package/dist/holmes/review/manual-baseline.js +2846 -0
  76. package/dist/holmes/review/oracle-gap.d.ts +32 -0
  77. package/dist/holmes/review/oracle-gap.js +102 -0
  78. package/dist/holmes/review/point-in-time-replay.d.ts +41 -0
  79. package/dist/holmes/review/point-in-time-replay.js +161 -0
  80. package/dist/holmes/review/rank-diagnosis.d.ts +43 -0
  81. package/dist/holmes/review/rank-diagnosis.js +163 -0
  82. package/dist/holmes/review/replay-calibration.d.ts +62 -0
  83. package/dist/holmes/review/replay-calibration.js +83 -0
  84. package/dist/holmes/review/replay-corpus.d.ts +135 -0
  85. package/dist/holmes/review/replay-corpus.js +210 -0
  86. package/dist/holmes/review/run-replay.d.ts +260 -0
  87. package/dist/holmes/review/run-replay.js +729 -0
  88. package/dist/holmes/review/semantic-arm.d.ts +271 -0
  89. package/dist/holmes/review/semantic-arm.js +717 -0
  90. package/dist/holmes/review/semantic-retrieval.d.ts +55 -0
  91. package/dist/holmes/review/semantic-retrieval.js +156 -0
  92. package/dist/holmes/review/spec-layer-stats.d.ts +38 -0
  93. package/dist/holmes/review/spec-layer-stats.js +52 -0
  94. package/dist/holmes/review/temporal-prior.d.ts +33 -0
  95. package/dist/holmes/review/temporal-prior.js +53 -0
  96. package/dist/holmes/review/test-runner.d.ts +15 -0
  97. package/dist/holmes/review/test-runner.js +41 -4
  98. package/dist/holmes/review/test-selection-breadth.d.ts +75 -0
  99. package/dist/holmes/review/test-selection-breadth.js +57 -0
  100. package/dist/holmes/review/traceability-benchmark.d.ts +81 -0
  101. package/dist/holmes/review/traceability-benchmark.js +135 -0
  102. package/dist/holmes/review/union-verify.d.ts +12 -0
  103. package/dist/holmes/review/union-verify.js +70 -0
  104. package/dist/holmes/rtm/graph-store.d.ts +51 -0
  105. package/dist/holmes/rtm/graph-store.js +122 -0
  106. package/dist/holmes/rtm/incremental.d.ts +25 -1
  107. package/dist/holmes/rtm/incremental.js +18 -1
  108. package/dist/holmes/rtm/localize.d.ts +28 -0
  109. package/dist/holmes/rtm/localize.js +272 -14
  110. package/dist/holmes/rtm/rtm-builder.d.ts +118 -3
  111. package/dist/holmes/rtm/rtm-builder.js +265 -28
  112. package/dist/holmes/rtm/rtm-graph.d.ts +117 -2
  113. package/dist/holmes/rtm/rtm-graph.js +194 -31
  114. package/dist/holmes/rtm/taint-benchmark.d.ts +97 -0
  115. package/dist/holmes/rtm/taint-benchmark.js +141 -0
  116. package/dist/holmes/rtm/test-scope.js +24 -1
  117. package/dist/holmes/semantic/credentials.d.ts +15 -0
  118. package/dist/holmes/semantic/credentials.js +134 -0
  119. package/dist/holmes/semantic/embedder.d.ts +44 -0
  120. package/dist/holmes/semantic/embedder.js +185 -0
  121. package/dist/holmes/semantic/hit-rerank.d.ts +4 -0
  122. package/dist/holmes/semantic/hit-rerank.js +38 -0
  123. package/dist/holmes/semantic/tier.d.ts +37 -0
  124. package/dist/holmes/semantic/tier.js +54 -0
  125. package/dist/holmes/semantic/vector-cache.d.ts +11 -0
  126. package/dist/holmes/semantic/vector-cache.js +91 -0
  127. package/dist/holmes/spec/acceptance-quality.d.ts +81 -0
  128. package/dist/holmes/spec/acceptance-quality.js +169 -0
  129. package/dist/holmes/spec/validator.js +33 -1
  130. package/dist/holmes/spec/yaml-scalar.d.ts +1 -0
  131. package/dist/holmes/spec/yaml-scalar.js +43 -0
  132. package/package.json +1 -1
@@ -0,0 +1,2846 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WINDOW_GUARANTEE_GAIN = exports.THIRD_CORPUS_COMPARISON = exports.FAIR_COMPARISON = exports.MANUAL_BASELINE_SET_2 = exports.MANUAL_BASELINE_N = exports.MANUAL_BASELINE_RECORD = void 0;
4
+ exports.manualBaselineOutcomes = manualBaselineOutcomes;
5
+ exports.shippedOutcomes = shippedOutcomes;
6
+ exports.shippedBeatsManual = shippedBeatsManual;
7
+ exports.poolCoverage = poolCoverage;
8
+ // @implements A-SPEC-404
9
+ /**
10
+ * The "strong model with plain file search" baseline (Goal Phase B).
11
+ *
12
+ * Every other arm in this directory compares the harness against ANOTHER PROGRAM. That answers "is
13
+ * the spec layer worth its cost", never the Goal's actual claim: that the harness helps an agent
14
+ * beat what a competent developer reaches by reading and grepping. So this arm is me — given only
15
+ * the request text and a materialized tree, ranking by grep counts over the query terms, with the
16
+ * truth WITHHELD until the picks were written to disk.
17
+ *
18
+ * The rule this slice was approved under: if the baseline beats the shipped harness, the claim of
19
+ * surpassing a human does not hold, and that fact gets recorded rather than buried. It did beat it
20
+ * on recall. The record below is that measurement, kept so a later change has to move it.
21
+ *
22
+ * The `shipped` lists below are the pipeline AS IT WAS when this baseline ran (S-404). A-SPEC-405
23
+ * later changed the re-ranking in response to what this record showed; re-scoring the same eight
24
+ * cases through the new pipeline gives Top-5 recall 0.175 -> 0.217 and Top-10 recall 0.471 -> 0.533,
25
+ * still short of the 0.404 / 0.554 reached here by reading and grepping. The record is deliberately
26
+ * NOT refreshed: it is the measurement that motivated the change, and rewriting it would erase the
27
+ * comparison it exists to preserve.
28
+ *
29
+ * n=8. A sample this small cannot separate a real gap from noise; report the n alongside the
30
+ * numbers and do not treat a large difference here as a conclusion.
31
+ */
32
+ const evaluation_metrics_1 = require("./evaluation-metrics");
33
+ exports.MANUAL_BASELINE_RECORD = {
34
+ "corpus": "jarvis",
35
+ "measuredOn": "2026-08-29",
36
+ "caveat": "n=8 blind cases; truth withheld until the picks were frozen. Too small to separate a real gap from noise.",
37
+ "cases": [
38
+ {
39
+ "query": "fix(hardening): 트랙⑥ 현재 시각 프롬프트 주입 — SLM 폴백 날짜 오답 재발 방지",
40
+ "picks": [
41
+ "src/intent_router.py",
42
+ "src/proactive.py",
43
+ "src/gateway/group_butler.py",
44
+ "src/tools/school.py",
45
+ "src/gateway/handlers.py",
46
+ "src/core/profile.py",
47
+ "src/llm_providers/ollama.py",
48
+ "tests/golden/test_golden_llm_router.py",
49
+ "src/tools/weather.py",
50
+ "src/agy_engine.py"
51
+ ],
52
+ "shipped": [
53
+ "src/self_hardening.py",
54
+ "src/core/hardening_backlog.py",
55
+ "src/proactive.py",
56
+ "src/main.py",
57
+ "src/core/write_intent.py",
58
+ "src/core/profile.py",
59
+ "src/gateway/handlers.py",
60
+ "src/knowledge_distiller.py",
61
+ "src/gateway/slm.py",
62
+ "src/gateway/hardening_apply.py"
63
+ ],
64
+ "truthFiles": [
65
+ "src/gateway/handlers.py",
66
+ "src/gateway/persona.py"
67
+ ]
68
+ },
69
+ {
70
+ "query": "feat(hardening): 트랙⑤ 오류 알림 UX — 순단 네트워크 노이즈 억제·스택트레이스 카드 제거",
71
+ "picks": [
72
+ "tests/golden/test_golden_hardening_apply.py",
73
+ "src/gateway/hardening_apply.py",
74
+ "src/web_server.py",
75
+ "src/structured_logger.py",
76
+ "src/main.py",
77
+ "src/llm_providers/base_cli.py",
78
+ "src/gateway/self_review.py"
79
+ ],
80
+ "shipped": [
81
+ "src/self_hardening.py",
82
+ "src/core/hardening_backlog.py",
83
+ "src/proactive.py",
84
+ "src/main.py",
85
+ "src/core/profile.py",
86
+ "src/gateway/hardening_apply.py",
87
+ "src/gateway/hardening_extract.py",
88
+ "src/gateway/group_butler.py",
89
+ "src/gateway/handlers.py",
90
+ "src/core/group_intervention.py"
91
+ ],
92
+ "truthFiles": [
93
+ "src/structured_logger.py"
94
+ ]
95
+ },
96
+ {
97
+ "query": "feat(hardening): 트랙① CLI 세션 안정화 — 단일 인스턴스 가드·인증 알림·cwd 리포 밖 격리·리포트 유효성",
98
+ "picks": [
99
+ "src/self_hardening.py",
100
+ "src/llm_providers/base_cli.py",
101
+ "src/llm_providers/claude_cli.py",
102
+ "src/gateway/hardening_apply.py",
103
+ "src/tools/changelog.py",
104
+ "src/main.py",
105
+ "src/llm_providers/agy_cli.py"
106
+ ],
107
+ "shipped": [
108
+ "src/llm_providers/claude_cli.py",
109
+ "src/core/hardening_backlog.py",
110
+ "src/llm_providers/base_cli.py",
111
+ "src/self_hardening.py",
112
+ "src/proactive.py",
113
+ "src/llm_providers/agy_cli.py",
114
+ "src/main.py",
115
+ "src/gateway/hardening_apply.py",
116
+ "src/core/profile.py",
117
+ "src/gateway/hardening_extract.py"
118
+ ],
119
+ "truthFiles": [
120
+ "src/gateway/self_review.py",
121
+ "src/llm_providers/base_cli.py",
122
+ "src/llm_providers/claude_cli.py",
123
+ "src/main.py",
124
+ "src/web_server.py"
125
+ ]
126
+ },
127
+ {
128
+ "query": "feat(hardening): P0-4 regex-based robust meta pollution filter with 45/45 tests PASS",
129
+ "picks": [
130
+ "src/llm_providers/base_cli.py",
131
+ "tests/unit/test_stub_src.py"
132
+ ],
133
+ "shipped": [
134
+ "src/core/hardening_backlog.py",
135
+ "src/self_hardening.py",
136
+ "src/core/profile.py",
137
+ "src/proactive.py",
138
+ "src/config.py",
139
+ "src/main.py",
140
+ "src/agy_engine.py",
141
+ "src/intent_router.py",
142
+ "src/tools/changelog.py",
143
+ "src/tools/expressway.py"
144
+ ],
145
+ "truthFiles": [
146
+ "src/llm_providers/base_cli.py"
147
+ ]
148
+ },
149
+ {
150
+ "query": "feat(ops): LaunchDaemon 전환 — 로그인 계정 무관 부팅 시 기동 (F077)",
151
+ "picks": [
152
+ "src/main.py",
153
+ "tests/golden/test_golden_expressway.py",
154
+ "tests/golden/test_golden_hardening_apply.py",
155
+ "src/tools/expressway.py",
156
+ "src/structured_logger.py",
157
+ "src/jarvis_sleep_manager.py",
158
+ "src/gateway/hardening_apply.py",
159
+ "src/core/retrieval_rank.py"
160
+ ],
161
+ "shipped": [
162
+ "src/desktop_app.py",
163
+ "src/core/profile.py",
164
+ "src/proactive.py",
165
+ "src/gateway/group_butler.py",
166
+ "src/gateway/handlers.py",
167
+ "src/main.py",
168
+ "src/knowledge_distiller.py",
169
+ "src/graph_memory.py",
170
+ "src/gateway/wiring.py",
171
+ "src/agy_engine.py"
172
+ ],
173
+ "truthFiles": [
174
+ "src/gateway/hardening_apply.py"
175
+ ]
176
+ },
177
+ {
178
+ "query": "feat(proactive): 주간 기억 감사 잡 배선 + episodic 원시 관계 오탐 수정 (F074)",
179
+ "picks": [
180
+ "tests/golden/test_golden_memory_audit.py",
181
+ "src/core/memory_audit.py",
182
+ "src/graph_memory.py",
183
+ "tests/golden/test_golden_memory_decay.py",
184
+ "src/core/memory_decay.py",
185
+ "src/tools/mid_forecast.py",
186
+ "src/memory.py",
187
+ "src/intent_router.py",
188
+ "tests/golden/test_golden_graph_memory.py",
189
+ "src/tools/kma_short.py"
190
+ ],
191
+ "shipped": [
192
+ "src/proactive.py",
193
+ "src/core/proactive_log_store.py",
194
+ "src/core/profile.py",
195
+ "src/gateway/handlers.py",
196
+ "src/gateway/group_butler.py",
197
+ "src/graph_memory.py",
198
+ "src/intent_router.py",
199
+ "src/memory.py",
200
+ "src/tools/weather.py",
201
+ "src/knowledge_distiller.py"
202
+ ],
203
+ "truthFiles": [
204
+ "src/core/memory_audit.py",
205
+ "src/core/profile.py",
206
+ "src/proactive.py"
207
+ ]
208
+ },
209
+ {
210
+ "query": "fix(memory): 사건 날짜 오귀속·무관 인물 유입 3중 차단 (F073)",
211
+ "picks": [
212
+ "tests/golden/test_golden_persona.py",
213
+ "src/gateway/persona.py",
214
+ "src/proactive.py",
215
+ "src/gateway/handlers.py",
216
+ "src/tools/wiki.py",
217
+ "src/tools/google_calendar.py",
218
+ "src/core/email_calendar.py",
219
+ "src/bot.py",
220
+ "tests/golden/test_golden_tool_integration_fixes.py",
221
+ "tests/golden/test_golden_graph_memory.py"
222
+ ],
223
+ "shipped": [
224
+ "src/graph_memory.py",
225
+ "src/memory.py",
226
+ "src/vector_memory.py",
227
+ "src/core/profile.py",
228
+ "src/proactive.py",
229
+ "src/gateway/handlers.py",
230
+ "src/knowledge_distiller.py",
231
+ "src/core/memory_gate.py",
232
+ "src/core/hierarchical_memory.py",
233
+ "src/core/memory_decay.py"
234
+ ],
235
+ "truthFiles": [
236
+ "src/core/memory_gate.py",
237
+ "src/graph_memory.py",
238
+ "src/knowledge_distiller.py"
239
+ ]
240
+ },
241
+ {
242
+ "query": "Reapply \"Merge branch 'hardening/f071-4'\"",
243
+ "picks": [
244
+ "src/proactive.py",
245
+ "src/self_hardening.py",
246
+ "src/core/hardening_backlog.py",
247
+ "tests/golden/test_golden_hardening_backlog.py",
248
+ "src/gateway/hardening_apply.py",
249
+ "tests/golden/test_golden_self_hardening.py",
250
+ "src/main.py",
251
+ "src/core/profile.py",
252
+ "tests/golden/test_golden_hitl_review.py",
253
+ "tests/golden/test_golden_hardening_extract.py"
254
+ ],
255
+ "shipped": [
256
+ "src/core/hardening_backlog.py",
257
+ "src/self_hardening.py",
258
+ "src/gateway/hardening_apply.py",
259
+ "src/proactive.py",
260
+ "src/main.py",
261
+ "src/core/hitl_review.py",
262
+ "src/core/profile.py",
263
+ "src/tools/capabilities.py",
264
+ "src/tools/changelog.py",
265
+ "src/gateway/hardening_extract.py"
266
+ ],
267
+ "truthFiles": [
268
+ "src/tools/capabilities.py",
269
+ "src/tools/changelog.py"
270
+ ]
271
+ }
272
+ ]
273
+ };
274
+ exports.MANUAL_BASELINE_N = exports.MANUAL_BASELINE_RECORD.cases.length;
275
+ /** Score the frozen picks with the same metric code every other arm uses. */
276
+ function manualBaselineOutcomes(record) {
277
+ return record.cases.map((c) => ({
278
+ ranked: c.picks,
279
+ truthFiles: c.truthFiles,
280
+ selectedTests: [],
281
+ truthTests: [],
282
+ }));
283
+ }
284
+ function shippedOutcomes(record) {
285
+ return record.cases.map((c) => ({
286
+ ranked: c.shipped,
287
+ truthFiles: c.truthFiles,
288
+ selectedTests: [],
289
+ truthTests: [],
290
+ }));
291
+ }
292
+ /**
293
+ * Per-metric verdict, computed from the record rather than asserted by hand: `true` only where the
294
+ * shipped harness is strictly ahead of the grep-and-read baseline.
295
+ */
296
+ function shippedBeatsManual(record) {
297
+ const mine = (0, evaluation_metrics_1.evaluationMetrics)(manualBaselineOutcomes(record));
298
+ const ship = (0, evaluation_metrics_1.evaluationMetrics)(shippedOutcomes(record));
299
+ const ahead = (a, b) => (a ?? 0) > (b ?? 0);
300
+ return {
301
+ top1: ahead(ship.topK[1].hitRate, mine.topK[1].hitRate),
302
+ top5Recall: ahead(ship.topK[5].recall, mine.topK[5].recall),
303
+ top10Recall: ahead(ship.topK[10].recall, mine.topK[10].recall),
304
+ top10Precision: ahead(ship.topK[10].precision, mine.topK[10].precision),
305
+ };
306
+ }
307
+ /**
308
+ * @implements A-SPEC-408
309
+ * The second blind set. Set 1 turned out to be markedly harder than the corpus average — Top-10
310
+ * recall 0.404 against 0.688 for the other 22 cases of the same 30 — so its verdict could have been
311
+ * a property of those eight commits rather than of the harness. These eight were drawn the same way
312
+ * from further down the same slice, their truth was unread until the picks were on disk, and the
313
+ * asymmetry came out in the same direction: the harness leads Top-1, reading and grepping leads
314
+ * recall.
315
+ *
316
+ * One difference from set 1 that matters when reading the two together: these `shipped` lists come
317
+ * from the pipeline AFTER A-SPEC-405/406/407, while set 1's are the S-404-era pipeline, kept
318
+ * deliberately unrefreshed. So compare each set's two rows to each other, never set 1's harness row
319
+ * to set 2's.
320
+ */
321
+ exports.MANUAL_BASELINE_SET_2 = {
322
+ "corpus": "jarvis",
323
+ "measuredOn": "2026-08-29",
324
+ "caveat": "n=8 blind cases (16-23 of the same slice); truth withheld until the picks were frozen. Absolute levels are much higher than set 1 because these commits are easier, not because either side changed.",
325
+ "cases": [
326
+ {
327
+ "query": "feat(fuel): 유종을 프로필 설정으로 — X7 고급휘발유(B034) 대응 + 지식정리 알림 1통 통합 (F051+/F052)",
328
+ "picks": [
329
+ "src/tools/fuel.py",
330
+ "src/core/profile.py",
331
+ "src/proactive.py",
332
+ "src/tools/cardata.py",
333
+ "src/core/briefing.py",
334
+ "src/gateway/group_butler.py",
335
+ "tests/golden/test_golden_fuel_flight_config.py",
336
+ "src/gateway/handlers.py",
337
+ "src/knowledge_distiller.py",
338
+ "src/gateway/family_routing.py"
339
+ ],
340
+ "shipped": [
341
+ "src/tools/fuel.py",
342
+ "src/core/hitl_review.py",
343
+ "src/core/profile.py",
344
+ "src/proactive.py",
345
+ "src/gateway/group_butler.py",
346
+ "src/gateway/handlers.py",
347
+ "src/knowledge_distiller.py",
348
+ "src/tools/capabilities.py",
349
+ "src/gateway/wiring.py",
350
+ "src/tools/weather.py"
351
+ ],
352
+ "truthFiles": [
353
+ "src/core/profile.py",
354
+ "src/proactive.py",
355
+ "src/tools/fuel.py"
356
+ ]
357
+ },
358
+ {
359
+ "query": "feat(weather): 에어코리아 측정소 실측 미세먼지 — 자택 조회 정확도 (F049)",
360
+ "picks": [
361
+ "src/tools/uv_air.py",
362
+ "src/tools/weather.py",
363
+ "tests/golden/test_golden_weather.py",
364
+ "src/core/profile.py",
365
+ "src/intent_router.py",
366
+ "src/core/registry.py",
367
+ "tests/golden/test_golden_registry.py",
368
+ "src/gateway/handlers.py",
369
+ "src/tools/kma_short.py",
370
+ "src/core/briefing.py"
371
+ ],
372
+ "shipped": [
373
+ "src/tools/weather.py",
374
+ "src/proactive.py",
375
+ "src/core/profile.py",
376
+ "src/core/briefing.py",
377
+ "src/tools/public_gov.py",
378
+ "src/gateway/group_butler.py",
379
+ "src/intent_router.py",
380
+ "src/agy_engine.py",
381
+ "src/core/group_message_store.py",
382
+ "src/core/hitl_review.py"
383
+ ],
384
+ "truthFiles": [
385
+ "src/core/profile.py",
386
+ "src/tools/weather.py"
387
+ ]
388
+ },
389
+ {
390
+ "query": "feat(self-review): 자가진단에 당일 배포 이력 주입 — 배포 전 사건·시차 오진 방지 (F046)",
391
+ "picks": [
392
+ "src/gateway/self_review.py",
393
+ "src/core/self_review_store.py",
394
+ "src/proactive.py",
395
+ "tests/golden/test_golden_self_review.py",
396
+ "src/tools/changelog.py",
397
+ "src/core/profile.py",
398
+ "src/self_hardening.py",
399
+ "src/gateway/hardening_apply.py",
400
+ "tests/golden/test_golden_self_review_store.py",
401
+ "src/main.py"
402
+ ],
403
+ "shipped": [
404
+ "src/proactive.py",
405
+ "src/core/profile.py",
406
+ "src/core/hitl_review.py",
407
+ "src/gateway/self_review.py",
408
+ "src/core/self_review_store.py",
409
+ "src/gateway/group_butler.py",
410
+ "src/core/proactive_log_store.py",
411
+ "src/agy_engine.py",
412
+ "src/intent_router.py",
413
+ "src/core/group_message_store.py"
414
+ ],
415
+ "truthFiles": [
416
+ "src/gateway/self_review.py",
417
+ "src/proactive.py",
418
+ "src/tools/changelog.py"
419
+ ]
420
+ },
421
+ {
422
+ "query": "fix(output): 메타 서두 스트립 + 링크 교차 태그 수정 (F042·F043)",
423
+ "picks": [
424
+ "src/gateway/formatting.py",
425
+ "tests/golden/test_golden_formatting.py",
426
+ "src/core/briefing.py",
427
+ "src/agy_engine.py",
428
+ "src/gateway/handlers.py",
429
+ "src/knowledge_distiller.py",
430
+ "src/intent_router.py",
431
+ "src/gateway/group_butler.py",
432
+ "src/tools/public_gov.py",
433
+ "src/tts_engine.py"
434
+ ],
435
+ "shipped": [
436
+ "src/tools/traffic.py",
437
+ "src/gateway/group_butler.py",
438
+ "src/intent_router.py",
439
+ "src/agy_engine.py",
440
+ "src/gateway/handlers.py",
441
+ "src/core/briefing.py",
442
+ "src/tools/maps_search.py",
443
+ "src/tools/weather.py",
444
+ "src/tools/google_calendar.py",
445
+ "src/llm_providers/claude_cli.py"
446
+ ],
447
+ "truthFiles": [
448
+ "src/agy_engine.py",
449
+ "src/gateway/formatting.py"
450
+ ]
451
+ },
452
+ {
453
+ "query": "fix(consolidate): 로스터 보호 — '박진우 존재하지 않음' 사고 재발 원천 차단 (F039)",
454
+ "picks": [
455
+ "src/core/triple_hygiene.py",
456
+ "src/knowledge_distiller.py",
457
+ "src/graph_memory.py",
458
+ "tests/golden/test_golden_triple_hygiene.py",
459
+ "src/proactive.py",
460
+ "tests/golden/test_golden_object_consolidate.py",
461
+ "src/core/messaging_intent.py",
462
+ "src/gateway/group_butler.py",
463
+ "src/gateway/memory_1on1.py",
464
+ "src/memory.py"
465
+ ],
466
+ "shipped": [
467
+ "src/proactive.py",
468
+ "src/gateway/group_butler.py",
469
+ "src/graph_memory.py",
470
+ "src/knowledge_distiller.py",
471
+ "src/gateway/handlers.py",
472
+ "src/core/profile.py",
473
+ "src/vector_memory.py",
474
+ "src/core/retrieval_rank.py",
475
+ "src/agy_engine.py",
476
+ "src/gateway/wiring.py"
477
+ ],
478
+ "truthFiles": [
479
+ "src/core/hitl_review.py",
480
+ "src/gateway/review_apply.py",
481
+ "src/knowledge_distiller.py",
482
+ "src/proactive.py"
483
+ ]
484
+ },
485
+ {
486
+ "query": "fix(capabilities): 런타임 기능 자기인지 동기화 (F036)",
487
+ "picks": [
488
+ "src/tools/capabilities.py",
489
+ "src/core/registry.py",
490
+ "tests/golden/test_golden_capabilities.py",
491
+ "tests/golden/test_golden_capabilities_tool.py",
492
+ "src/proactive.py",
493
+ "src/core/briefing.py",
494
+ "src/gateway/handlers.py",
495
+ "src/intent_router.py",
496
+ "src/core/profile.py",
497
+ "src/agy_engine.py"
498
+ ],
499
+ "shipped": [
500
+ "src/tools/capabilities.py",
501
+ "src/gateway/handlers.py",
502
+ "src/agy_engine.py",
503
+ "src/core/tool.py",
504
+ "src/proactive.py",
505
+ "src/core/briefing.py",
506
+ "src/core/hitl_review.py",
507
+ "src/core/capabilities.py",
508
+ "src/core/registry.py",
509
+ "src/subagent_engine.py"
510
+ ],
511
+ "truthFiles": [
512
+ "src/tools/capabilities.py"
513
+ ]
514
+ },
515
+ {
516
+ "query": "feat(persona): 비서 응답 톤 간결·자연화 — 보고서식 장황함 제거 (F033)",
517
+ "picks": [
518
+ "src/gateway/persona.py",
519
+ "tests/golden/test_golden_persona.py",
520
+ "src/gateway/handlers.py",
521
+ "src/agy_engine.py",
522
+ "src/core/briefing.py",
523
+ "src/bot.py",
524
+ "src/gateway/group_butler.py",
525
+ "src/gateway/formatting.py",
526
+ "src/intent_router.py",
527
+ "src/gateway/self_review.py"
528
+ ],
529
+ "shipped": [
530
+ "src/gateway/persona.py",
531
+ "src/gateway/handlers.py",
532
+ "src/agy_engine.py",
533
+ "src/bot.py",
534
+ "src/config.py",
535
+ "src/core/profile.py",
536
+ "src/proactive.py",
537
+ "src/tools/traffic.py",
538
+ "src/tools/capabilities.py",
539
+ "src/gateway/group_butler.py"
540
+ ],
541
+ "truthFiles": [
542
+ "src/agy_engine.py"
543
+ ]
544
+ },
545
+ {
546
+ "query": "fix(intent): 의도 오라우팅 방지 — GENERAL 앵커 + '애매하면 GENERAL' (④)",
547
+ "picks": [
548
+ "src/intent_router.py",
549
+ "src/core/semantic_router.py",
550
+ "tests/golden/test_golden_registry.py",
551
+ "src/core/registry.py",
552
+ "src/gateway/handlers.py",
553
+ "tests/golden/test_golden_semantic_router.py",
554
+ "tests/golden/test_golden_tool_dispatch_e2e.py",
555
+ "src/agy_engine.py",
556
+ "src/core/native_loop.py",
557
+ "src/gateway/group_butler.py"
558
+ ],
559
+ "shipped": [
560
+ "src/intent_router.py",
561
+ "src/core/profile.py",
562
+ "src/core/write_intent.py",
563
+ "src/gateway/handlers.py",
564
+ "src/proactive.py",
565
+ "src/tools/weather.py",
566
+ "src/core/messaging_intent.py",
567
+ "src/tools/expressway.py",
568
+ "src/core/registry.py",
569
+ "src/tools/workspace.py"
570
+ ],
571
+ "truthFiles": [
572
+ "src/intent_router.py"
573
+ ]
574
+ }
575
+ ]
576
+ };
577
+ exports.FAIR_COMPARISON = {
578
+ "measuredOn": "2026-08-29",
579
+ "caveat": "n=16 across two blind sets of 8. Small; report the n with the numbers.",
580
+ "cases": [
581
+ {
582
+ "set": "sample-32",
583
+ "query": "feat(vector): owner_only 등급 — 그래프 접근 규칙과 완전 동일화",
584
+ "harnessAlone": [
585
+ "src/core/profile.py",
586
+ "src/gateway/handlers.py",
587
+ "src/vector_memory.py",
588
+ "src/gateway/wiring.py",
589
+ "src/web_server.py",
590
+ "src/intent_router.py",
591
+ "src/proactive.py",
592
+ "src/core/briefing.py",
593
+ "src/core/llm.py",
594
+ "src/tools/workspace.py"
595
+ ],
596
+ "harnessJudged": [
597
+ "src/vector_memory.py",
598
+ "src/graph_memory.py",
599
+ "src/core/profile.py",
600
+ "src/gateway/handlers.py",
601
+ "src/knowledge_distiller.py",
602
+ "src/core/registry.py",
603
+ "src/gateway/wiring.py",
604
+ "src/web_server.py",
605
+ "src/proactive.py",
606
+ "src/intent_router.py"
607
+ ],
608
+ "grepJudged": [
609
+ "src/vector_memory.py",
610
+ "src/graph_memory.py",
611
+ "src/proactive.py",
612
+ "src/web_server.py",
613
+ "src/knowledge_distiller.py",
614
+ "src/gateway/handlers.py",
615
+ "src/tools/workspace.py",
616
+ "src/gateway/wiring.py",
617
+ "src/structured_logger.py",
618
+ "src/intent_router.py"
619
+ ],
620
+ "truthFiles": [
621
+ "src/gateway/handlers.py",
622
+ "src/vector_memory.py",
623
+ "src/web_server.py"
624
+ ]
625
+ },
626
+ {
627
+ "set": "sample-32",
628
+ "query": "feat(memory): Feature 008 — 그래프 기반 장기 기억 (memory_triples)",
629
+ "harnessAlone": [
630
+ "src/gateway/handlers.py",
631
+ "src/web_server.py",
632
+ "src/memory.py",
633
+ "src/gateway/wiring.py",
634
+ "src/knowledge_distiller.py",
635
+ "src/proactive.py",
636
+ "src/structured_logger.py",
637
+ "src/llm_providers/base_cli.py",
638
+ "src/intent_router.py",
639
+ "src/core/profile.py"
640
+ ],
641
+ "harnessJudged": [
642
+ "src/memory.py",
643
+ "src/gateway/handlers.py",
644
+ "src/knowledge_distiller.py",
645
+ "src/core/profile.py",
646
+ "src/gateway/wiring.py",
647
+ "src/web_server.py",
648
+ "src/proactive.py",
649
+ "src/vector_memory.py",
650
+ "src/intent_router.py",
651
+ "src/structured_logger.py"
652
+ ],
653
+ "grepJudged": [
654
+ "src/memory.py",
655
+ "src/graph_memory.py",
656
+ "src/visualizer.py",
657
+ "src/web_server.py",
658
+ "src/core/profile.py",
659
+ "src/knowledge_distiller.py",
660
+ "src/gateway/handlers.py",
661
+ "src/proactive.py",
662
+ "src/vector_memory.py",
663
+ "src/gateway/wiring.py"
664
+ ],
665
+ "truthFiles": [
666
+ "src/core/profile.py",
667
+ "src/gateway/handlers.py",
668
+ "src/gateway/wiring.py",
669
+ "src/graph_memory.py",
670
+ "src/tools/episodes.py",
671
+ "src/vector_memory.py"
672
+ ]
673
+ },
674
+ {
675
+ "set": "sample-32",
676
+ "query": "fix: 전수 리뷰 하드닝 — 가짜 데이터/허위 표기 15건 + 품질 결함 10건 + hermetic 집행",
677
+ "harnessAlone": [
678
+ "src/core/profile.py",
679
+ "src/web_server.py",
680
+ "src/gateway/handlers.py",
681
+ "src/core/background.py",
682
+ "src/intent_router.py",
683
+ "src/gateway/media_handlers.py",
684
+ "src/gateway/wiring.py",
685
+ "src/llm_providers/claude_api.py",
686
+ "src/gmail_pubsub.py",
687
+ "src/jarvis_sleep_manager.py"
688
+ ],
689
+ "harnessJudged": [
690
+ "src/core/profile.py",
691
+ "src/web_server.py",
692
+ "src/gateway/handlers.py",
693
+ "src/knowledge_distiller.py",
694
+ "src/proactive.py",
695
+ "src/memory.py",
696
+ "src/intent_router.py",
697
+ "src/structured_logger.py",
698
+ "src/main.py",
699
+ "src/gateway/wiring.py"
700
+ ],
701
+ "grepJudged": [
702
+ "src/web_server.py",
703
+ "src/core/profile.py",
704
+ "src/gateway/handlers.py",
705
+ "src/tts_engine.py",
706
+ "src/gateway/family_routing.py",
707
+ "src/proactive.py",
708
+ "src/memory.py",
709
+ "src/knowledge_distiller.py",
710
+ "src/intent_router.py",
711
+ "src/main.py"
712
+ ],
713
+ "truthFiles": [
714
+ "src/agy_engine.py",
715
+ "src/core/briefing.py",
716
+ "src/core/native_loop.py",
717
+ "src/core/registry.py",
718
+ "src/gateway/formatting.py",
719
+ "src/gateway/handlers.py",
720
+ "src/intent_router.py",
721
+ "src/llm_providers/claude_api.py",
722
+ "src/memory.py",
723
+ "src/tools/advice.py",
724
+ "src/tools/cardata.py",
725
+ "src/tools/crypto.py",
726
+ "src/tools/flight.py",
727
+ "src/tools/forex.py",
728
+ "src/tools/gold.py",
729
+ "src/tools/realestate.py",
730
+ "src/tools/sports.py",
731
+ "src/tools/subway.py",
732
+ "src/tools/weather.py",
733
+ "src/tools/workspace.py",
734
+ "src/web_server.py"
735
+ ]
736
+ },
737
+ {
738
+ "set": "sample-32",
739
+ "query": "fix(006): 1B 분류기 실측 기반 재설계 — 결정적 힌트 상속 + 안전 후보",
740
+ "harnessAlone": [
741
+ "src/core/profile.py",
742
+ "src/gateway/handlers.py",
743
+ "src/intent_router.py",
744
+ "src/tools/books.py",
745
+ "src/tools/maps_search.py",
746
+ "src/tools/weather.py",
747
+ "src/web_server.py"
748
+ ],
749
+ "harnessJudged": [
750
+ "src/intent_router.py",
751
+ "src/core/profile.py",
752
+ "src/gateway/handlers.py",
753
+ "src/core/registry.py",
754
+ "src/core/tool.py",
755
+ "src/config.py",
756
+ "src/tools/books.py",
757
+ "src/web_server.py",
758
+ "src/core/llm.py",
759
+ "src/proactive.py"
760
+ ],
761
+ "grepJudged": [
762
+ "src/intent_router.py",
763
+ "src/gateway/handlers.py",
764
+ "src/web_server.py",
765
+ "src/core/profile.py",
766
+ "src/llm_providers/base_cli.py",
767
+ "src/core/registry.py",
768
+ "src/core/llm.py",
769
+ "src/config.py",
770
+ "src/proactive.py",
771
+ "src/core/tool.py"
772
+ ],
773
+ "truthFiles": [
774
+ "src/intent_router.py"
775
+ ]
776
+ },
777
+ {
778
+ "set": "sample-32",
779
+ "query": "fix(004): T024 코드리뷰 발견 해소 — 해석기 견고성·비용 제어",
780
+ "harnessAlone": [
781
+ "src/core/briefing.py",
782
+ "src/gateway/url_context.py",
783
+ "src/core/capabilities.py",
784
+ "src/bot.py",
785
+ "src/core/registry.py",
786
+ "src/gateway/family_routing.py",
787
+ "src/gateway/handlers.py",
788
+ "src/gateway/wiring.py",
789
+ "src/proactive.py",
790
+ "src/subagent_engine.py"
791
+ ],
792
+ "harnessJudged": [
793
+ "src/core/briefing.py",
794
+ "src/gateway/url_context.py",
795
+ "src/core/capabilities.py",
796
+ "src/core/registry.py",
797
+ "src/bot.py",
798
+ "src/gateway/family_routing.py",
799
+ "src/gateway/handlers.py",
800
+ "src/gateway/wiring.py",
801
+ "src/proactive.py",
802
+ "src/subagent_engine.py"
803
+ ],
804
+ "grepJudged": [
805
+ "src/core/briefing.py",
806
+ "src/gateway/url_context.py",
807
+ "src/core/registry.py",
808
+ "src/core/llm.py",
809
+ "src/llm_providers/claude_api.py",
810
+ "src/tools/google_calendar.py",
811
+ "src/bot.py",
812
+ "src/gateway/handlers.py",
813
+ "src/proactive.py",
814
+ "src/subagent_engine.py"
815
+ ],
816
+ "truthFiles": [
817
+ "src/core/registry.py",
818
+ "src/gateway/handlers.py",
819
+ "src/proactive.py"
820
+ ]
821
+ },
822
+ {
823
+ "set": "sample-32",
824
+ "query": "refactor(003): bot.py 갓오브젝트 SRP 분해 — src/gateway/ 8모듈 + 파사드",
825
+ "harnessAlone": [
826
+ "src/agy_engine.py",
827
+ "src/bot.py",
828
+ "src/core/profile.py",
829
+ "src/config.py",
830
+ "src/core/llm.py",
831
+ "src/goal_agent.py",
832
+ "src/llm_providers/agy_cli.py",
833
+ "src/intent_router.py",
834
+ "src/proactive.py",
835
+ "src/core/tool.py"
836
+ ],
837
+ "harnessJudged": [
838
+ "src/bot.py",
839
+ "src/core/profile.py",
840
+ "src/agy_engine.py",
841
+ "src/intent_router.py",
842
+ "src/proactive.py",
843
+ "src/config.py",
844
+ "src/core/registry.py",
845
+ "src/core/tool.py",
846
+ "src/main.py",
847
+ "src/web_server.py"
848
+ ],
849
+ "grepJudged": [
850
+ "src/bot.py",
851
+ "src/proactive.py",
852
+ "src/intent_router.py",
853
+ "src/main.py",
854
+ "src/structured_logger.py",
855
+ "src/web_server.py",
856
+ "src/core/registry.py",
857
+ "src/core/llm.py",
858
+ "src/tools/maps_search.py",
859
+ "src/tools/books.py"
860
+ ],
861
+ "truthFiles": [
862
+ "src/bot.py",
863
+ "src/gateway/__init__.py",
864
+ "src/gateway/callbacks.py",
865
+ "src/gateway/family_routing.py",
866
+ "src/gateway/formatting.py",
867
+ "src/gateway/handlers.py",
868
+ "src/gateway/media_handlers.py",
869
+ "src/gateway/persona.py",
870
+ "src/gateway/url_context.py",
871
+ "src/gateway/wiring.py"
872
+ ]
873
+ },
874
+ {
875
+ "set": "sample-32",
876
+ "query": "feat(002): LLM provider contract + router + profile schema (Phase 1-2)",
877
+ "harnessAlone": [
878
+ "src/agy_engine.py",
879
+ "src/intent_router.py",
880
+ "src/config.py",
881
+ "src/core/profile.py",
882
+ "src/tools/maps_search.py",
883
+ "src/bot.py",
884
+ "src/goal_agent.py",
885
+ "src/proactive.py",
886
+ "src/core/tool.py",
887
+ "src/tools/google_calendar.py"
888
+ ],
889
+ "harnessJudged": [
890
+ "src/core/profile.py",
891
+ "src/agy_engine.py",
892
+ "src/intent_router.py",
893
+ "src/config.py",
894
+ "src/core/tool.py",
895
+ "src/core/registry.py",
896
+ "src/bot.py",
897
+ "src/proactive.py",
898
+ "src/web_server.py",
899
+ "src/core/briefing.py"
900
+ ],
901
+ "grepJudged": [
902
+ "src/proactive.py",
903
+ "src/core/briefing.py",
904
+ "src/core/profile.py",
905
+ "src/bot.py",
906
+ "src/tools/google_calendar.py",
907
+ "src/tools/fuel.py",
908
+ "src/tools/books.py",
909
+ "src/tools/workspace.py",
910
+ "src/tools/weather.py",
911
+ "src/tools/traffic.py"
912
+ ],
913
+ "truthFiles": [
914
+ "src/core/llm.py",
915
+ "src/core/profile.py",
916
+ "src/llm_providers/__init__.py"
917
+ ]
918
+ },
919
+ {
920
+ "set": "sample-32",
921
+ "query": "Initial open-source baseline: profile-driven config, plugin architecture, SDD",
922
+ "harnessAlone": [],
923
+ "harnessJudged": [],
924
+ "grepJudged": [],
925
+ "truthFiles": [
926
+ "src/__init__.py",
927
+ "src/agy_engine.py",
928
+ "src/bot.py",
929
+ "src/config.py",
930
+ "src/core/__init__.py",
931
+ "src/core/briefing.py",
932
+ "src/core/http.py",
933
+ "src/core/profile.py",
934
+ "src/core/registry.py",
935
+ "src/core/tool.py",
936
+ "src/desktop_app.py",
937
+ "src/event_broadcaster.py",
938
+ "src/gmail_pubsub.py",
939
+ "src/goal_agent.py",
940
+ "src/google_auth.py",
941
+ "src/hitl_manager.py",
942
+ "src/intent_router.py",
943
+ "src/jarvis_sleep_manager.py",
944
+ "src/knowledge_distiller.py",
945
+ "src/mac_power_manager.py",
946
+ "src/main.py",
947
+ "src/memory.py",
948
+ "src/proactive.py",
949
+ "src/sandbox_executor.py",
950
+ "src/structured_logger.py",
951
+ "src/subagent_engine.py",
952
+ "src/tools/__init__.py",
953
+ "src/tools/advice.py",
954
+ "src/tools/astronomy.py",
955
+ "src/tools/books.py",
956
+ "src/tools/cardata.py",
957
+ "src/tools/country.py",
958
+ "src/tools/crypto.py",
959
+ "src/tools/culture.py",
960
+ "src/tools/family_activity.py",
961
+ "src/tools/finance.py",
962
+ "src/tools/flight.py",
963
+ "src/tools/food.py",
964
+ "src/tools/forex.py",
965
+ "src/tools/fuel.py",
966
+ "src/tools/gold.py",
967
+ "src/tools/google_calendar.py",
968
+ "src/tools/holiday.py",
969
+ "src/tools/logistics.py",
970
+ "src/tools/macroeconomics.py",
971
+ "src/tools/maps_search.py",
972
+ "src/tools/medical.py",
973
+ "src/tools/news.py",
974
+ "src/tools/open_meteo.py",
975
+ "src/tools/realestate.py",
976
+ "src/tools/school.py",
977
+ "src/tools/sports.py",
978
+ "src/tools/subway.py",
979
+ "src/tools/timezone.py",
980
+ "src/tools/traffic.py",
981
+ "src/tools/university.py",
982
+ "src/tools/uv_air.py",
983
+ "src/tools/weather.py",
984
+ "src/tools/wiki.py",
985
+ "src/tools/workspace.py",
986
+ "src/tts_engine.py",
987
+ "src/vector_memory.py",
988
+ "src/visualizer.py",
989
+ "src/web_server.py"
990
+ ]
991
+ },
992
+ {
993
+ "set": "width-40",
994
+ "query": "feat(group): Feature 018 멀티모달 — 이모지/스티커/사진 반응",
995
+ "harnessAlone": [
996
+ "src/core/profile.py",
997
+ "src/gateway/group_butler.py",
998
+ "src/core/group_intervention.py",
999
+ "src/config.py",
1000
+ "src/gateway/handlers.py",
1001
+ "src/llm_providers/ollama.py",
1002
+ "src/gateway/wiring.py",
1003
+ "src/graph_memory.py",
1004
+ "src/intent_router.py",
1005
+ "src/proactive.py"
1006
+ ],
1007
+ "harnessJudged": [
1008
+ "src/gateway/media_handlers.py",
1009
+ "src/gateway/group_butler.py",
1010
+ "src/gateway/handlers.py",
1011
+ "src/core/profile.py",
1012
+ "src/core/group_intervention.py",
1013
+ "src/gateway/formatting.py",
1014
+ "src/bot.py",
1015
+ "src/gateway/wiring.py",
1016
+ "src/config.py",
1017
+ "src/core/registry.py"
1018
+ ],
1019
+ "grepJudged": [
1020
+ "src/gateway/media_handlers.py",
1021
+ "src/core/profile.py",
1022
+ "src/core/group_intervention.py",
1023
+ "src/gateway/group_butler.py",
1024
+ "src/tools/pets.py",
1025
+ "src/agy_engine.py",
1026
+ "src/tts_engine.py",
1027
+ "src/structured_logger.py",
1028
+ "src/tools/astronomy.py",
1029
+ "src/gateway/handlers.py"
1030
+ ],
1031
+ "truthFiles": [
1032
+ "src/core/group_intervention.py",
1033
+ "src/gateway/group_butler.py",
1034
+ "src/gateway/wiring.py"
1035
+ ]
1036
+ },
1037
+ {
1038
+ "set": "width-40",
1039
+ "query": "feat(group): Feature 018 US1 MVP — 그룹방 명시 호출 즉답",
1040
+ "harnessAlone": [
1041
+ "src/core/profile.py",
1042
+ "src/gateway/handlers.py",
1043
+ "src/gateway/review_apply.py",
1044
+ "src/intent_router.py",
1045
+ "src/proactive.py",
1046
+ "src/graph_memory.py",
1047
+ "src/core/semantic_extractor.py",
1048
+ "src/gateway/callbacks.py",
1049
+ "src/core/canonicalize.py",
1050
+ "src/gateway/family_routing.py"
1051
+ ],
1052
+ "harnessJudged": [
1053
+ "src/gateway/handlers.py",
1054
+ "src/core/profile.py",
1055
+ "src/intent_router.py",
1056
+ "src/gateway/wiring.py",
1057
+ "src/core/registry.py",
1058
+ "src/config.py",
1059
+ "src/gateway/callbacks.py",
1060
+ "src/core/tool.py",
1061
+ "src/proactive.py",
1062
+ "src/bot.py"
1063
+ ],
1064
+ "grepJudged": [
1065
+ "src/intent_router.py",
1066
+ "src/gateway/handlers.py",
1067
+ "src/knowledge_distiller.py",
1068
+ "src/graph_memory.py",
1069
+ "src/core/llm.py",
1070
+ "src/gateway/formatting.py",
1071
+ "src/llm_providers/claude_api.py",
1072
+ "src/tts_engine.py",
1073
+ "src/tools/traffic.py",
1074
+ "src/tools/food.py"
1075
+ ],
1076
+ "truthFiles": [
1077
+ "src/core/group_intervention.py",
1078
+ "src/core/profile.py",
1079
+ "src/gateway/group_butler.py",
1080
+ "src/gateway/wiring.py",
1081
+ "src/graph_memory.py"
1082
+ ]
1083
+ },
1084
+ {
1085
+ "set": "width-40",
1086
+ "query": "feat(memory): Feature 016 — 설정 기반 기억 도메인(코드 무수정 주제 확장)",
1087
+ "harnessAlone": [
1088
+ "src/core/profile.py",
1089
+ "src/proactive.py",
1090
+ "src/graph_memory.py",
1091
+ "src/gateway/handlers.py",
1092
+ "src/gateway/wiring.py",
1093
+ "src/gateway/review_apply.py",
1094
+ "src/core/semantic_extractor.py",
1095
+ "src/intent_router.py",
1096
+ "src/core/hitl_review.py",
1097
+ "src/core/email_calendar.py"
1098
+ ],
1099
+ "harnessJudged": [
1100
+ "src/core/profile.py",
1101
+ "src/config.py",
1102
+ "src/graph_memory.py",
1103
+ "src/memory.py",
1104
+ "src/knowledge_distiller.py",
1105
+ "src/vector_memory.py",
1106
+ "src/core/semantic_extractor.py",
1107
+ "src/proactive.py",
1108
+ "src/gateway/handlers.py",
1109
+ "src/core/canonicalize.py"
1110
+ ],
1111
+ "grepJudged": [
1112
+ "src/graph_memory.py",
1113
+ "src/web_server.py",
1114
+ "src/proactive.py",
1115
+ "src/knowledge_distiller.py",
1116
+ "src/gateway/handlers.py",
1117
+ "src/core/profile.py",
1118
+ "src/gateway/wiring.py",
1119
+ "src/gateway/url_context.py",
1120
+ "src/gateway/review_apply.py",
1121
+ "src/tools/books.py"
1122
+ ],
1123
+ "truthFiles": [
1124
+ "src/core/profile.py",
1125
+ "src/core/semantic_extractor.py",
1126
+ "src/graph_memory.py",
1127
+ "src/proactive.py"
1128
+ ]
1129
+ },
1130
+ {
1131
+ "set": "width-40",
1132
+ "query": "test+fix: 도구 연동 E2E 회귀 가드 + crypto 라우팅 결함 수정",
1133
+ "harnessAlone": [
1134
+ "src/core/tool.py",
1135
+ "src/tools/crypto.py",
1136
+ "src/core/registry.py",
1137
+ "src/gateway/handlers.py",
1138
+ "src/intent_router.py",
1139
+ "src/core/profile.py",
1140
+ "src/tools/books.py",
1141
+ "src/tools/advice.py",
1142
+ "src/tools/maps_search.py",
1143
+ "src/proactive.py"
1144
+ ],
1145
+ "harnessJudged": [
1146
+ "src/tools/crypto.py",
1147
+ "src/intent_router.py",
1148
+ "src/core/registry.py",
1149
+ "src/core/tool.py",
1150
+ "src/core/semantic_router.py",
1151
+ "src/gateway/handlers.py",
1152
+ "src/core/profile.py",
1153
+ "src/gateway/wiring.py",
1154
+ "src/tools/capabilities.py",
1155
+ "src/agy_engine.py"
1156
+ ],
1157
+ "grepJudged": [
1158
+ "src/tools/crypto.py",
1159
+ "src/intent_router.py",
1160
+ "src/gateway/wiring.py",
1161
+ "src/core/semantic_router.py",
1162
+ "src/tools/capabilities.py",
1163
+ "src/gateway/handlers.py",
1164
+ "src/core/profile.py",
1165
+ "src/bot.py",
1166
+ "src/core/tool.py",
1167
+ "src/gateway/family_routing.py"
1168
+ ],
1169
+ "truthFiles": [
1170
+ "src/tools/crypto.py"
1171
+ ]
1172
+ },
1173
+ {
1174
+ "set": "width-40",
1175
+ "query": "feat(memory): Feature 012 — HITL 텔레그램 리뷰 + 결정 영구 학습",
1176
+ "harnessAlone": [
1177
+ "src/memory.py",
1178
+ "src/graph_memory.py",
1179
+ "src/core/profile.py",
1180
+ "src/proactive.py",
1181
+ "src/gateway/handlers.py",
1182
+ "src/gateway/wiring.py",
1183
+ "src/intent_router.py",
1184
+ "src/web_server.py",
1185
+ "src/vector_memory.py",
1186
+ "src/knowledge_distiller.py"
1187
+ ],
1188
+ "harnessJudged": [
1189
+ "src/hitl_manager.py",
1190
+ "src/gateway/callbacks.py",
1191
+ "src/memory.py",
1192
+ "src/graph_memory.py",
1193
+ "src/core/profile.py",
1194
+ "src/gateway/handlers.py",
1195
+ "src/proactive.py",
1196
+ "src/gateway/wiring.py",
1197
+ "src/knowledge_distiller.py",
1198
+ "src/core/canonicalize.py"
1199
+ ],
1200
+ "grepJudged": [
1201
+ "src/gateway/callbacks.py",
1202
+ "src/intent_router.py",
1203
+ "src/tools/capabilities.py",
1204
+ "src/gateway/family_routing.py",
1205
+ "src/core/llm.py",
1206
+ "src/gateway/formatting.py",
1207
+ "src/gateway/handlers.py",
1208
+ "src/gateway/__init__.py",
1209
+ "src/core/briefing.py",
1210
+ "src/graph_memory.py"
1211
+ ],
1212
+ "truthFiles": [
1213
+ "src/core/canonicalize.py",
1214
+ "src/core/hitl_review.py",
1215
+ "src/core/profile.py",
1216
+ "src/gateway/callbacks.py",
1217
+ "src/gateway/review_apply.py",
1218
+ "src/proactive.py"
1219
+ ]
1220
+ },
1221
+ {
1222
+ "set": "width-40",
1223
+ "query": "feat(memory): Feature 011 — semantic 트리플 추출 파이프라인",
1224
+ "harnessAlone": [
1225
+ "src/core/profile.py",
1226
+ "src/gateway/wiring.py",
1227
+ "src/core/semantic_router.py",
1228
+ "src/intent_router.py",
1229
+ "src/gateway/handlers.py",
1230
+ "src/proactive.py",
1231
+ "src/vector_memory.py",
1232
+ "src/memory.py",
1233
+ "src/knowledge_distiller.py",
1234
+ "src/web_server.py"
1235
+ ],
1236
+ "harnessJudged": [
1237
+ "src/knowledge_distiller.py",
1238
+ "src/graph_memory.py",
1239
+ "src/core/semantic_router.py",
1240
+ "src/memory.py",
1241
+ "src/vector_memory.py",
1242
+ "src/core/profile.py",
1243
+ "src/intent_router.py",
1244
+ "src/gateway/wiring.py",
1245
+ "src/proactive.py",
1246
+ "src/core/llm.py"
1247
+ ],
1248
+ "grepJudged": [
1249
+ "src/graph_memory.py",
1250
+ "src/knowledge_distiller.py",
1251
+ "src/intent_router.py",
1252
+ "src/web_server.py",
1253
+ "src/gateway/wiring.py",
1254
+ "src/gateway/handlers.py",
1255
+ "src/gateway/family_routing.py",
1256
+ "src/core/semantic_router.py",
1257
+ "src/tools/traffic.py",
1258
+ "src/gmail_pubsub.py"
1259
+ ],
1260
+ "truthFiles": [
1261
+ "src/core/profile.py",
1262
+ "src/core/semantic_extractor.py",
1263
+ "src/gateway/handlers.py",
1264
+ "src/graph_memory.py",
1265
+ "src/proactive.py"
1266
+ ]
1267
+ },
1268
+ {
1269
+ "set": "width-40",
1270
+ "query": "fix(memory): 일일 다이제스트 견고화 — misfire 복구 + 날짜 인지",
1271
+ "harnessAlone": [
1272
+ "src/gateway/handlers.py",
1273
+ "src/core/profile.py",
1274
+ "src/gateway/wiring.py",
1275
+ "src/intent_router.py",
1276
+ "src/proactive.py",
1277
+ "src/web_server.py",
1278
+ "src/memory.py",
1279
+ "src/graph_memory.py",
1280
+ "src/vector_memory.py",
1281
+ "src/knowledge_distiller.py"
1282
+ ],
1283
+ "harnessJudged": [
1284
+ "src/proactive.py",
1285
+ "src/core/briefing.py",
1286
+ "src/knowledge_distiller.py",
1287
+ "src/core/profile.py",
1288
+ "src/gateway/handlers.py",
1289
+ "src/jarvis_sleep_manager.py",
1290
+ "src/core/background.py",
1291
+ "src/main.py",
1292
+ "src/structured_logger.py",
1293
+ "src/graph_memory.py"
1294
+ ],
1295
+ "grepJudged": [
1296
+ "src/proactive.py",
1297
+ "src/knowledge_distiller.py",
1298
+ "src/core/briefing.py",
1299
+ "src/core/profile.py",
1300
+ "src/memory.py",
1301
+ "src/graph_memory.py",
1302
+ "src/tools/workspace.py",
1303
+ "src/tools/google_calendar.py",
1304
+ "src/structured_logger.py",
1305
+ "src/gmail_pubsub.py"
1306
+ ],
1307
+ "truthFiles": [
1308
+ "src/knowledge_distiller.py",
1309
+ "src/memory.py",
1310
+ "src/proactive.py"
1311
+ ]
1312
+ },
1313
+ {
1314
+ "set": "width-40",
1315
+ "query": "feat(tools): Feature 009 — token-free 공개 API 도구 확장 팩",
1316
+ "harnessAlone": [
1317
+ "src/llm_providers/claude_api.py",
1318
+ "src/core/registry.py",
1319
+ "src/agy_engine.py",
1320
+ "src/llm_providers/gemini_api.py",
1321
+ "src/web_server.py",
1322
+ "src/tools/episodes.py",
1323
+ "src/core/llm.py",
1324
+ "src/core/native_loop.py",
1325
+ "src/tools/workspace.py",
1326
+ "src/tools/maps_search.py"
1327
+ ],
1328
+ "harnessJudged": [
1329
+ "src/core/registry.py",
1330
+ "src/tools/__init__.py",
1331
+ "src/core/tool.py",
1332
+ "src/core/capabilities.py",
1333
+ "src/agy_engine.py",
1334
+ "src/tools/weather.py",
1335
+ "src/tools/gold.py",
1336
+ "src/tools/forex.py",
1337
+ "src/core/briefing.py",
1338
+ "src/intent_router.py"
1339
+ ],
1340
+ "grepJudged": [
1341
+ "src/core/briefing.py",
1342
+ "src/intent_router.py",
1343
+ "src/proactive.py",
1344
+ "src/core/registry.py",
1345
+ "src/core/native_loop.py",
1346
+ "src/web_server.py",
1347
+ "src/gateway/handlers.py",
1348
+ "src/tools/books.py",
1349
+ "src/llm_providers/claude_api.py",
1350
+ "src/gateway/url_context.py"
1351
+ ],
1352
+ "truthFiles": [
1353
+ "src/core/profile.py",
1354
+ "src/proactive.py",
1355
+ "src/tools/astronomy.py",
1356
+ "src/tools/books.py",
1357
+ "src/tools/calc.py",
1358
+ "src/tools/crypto.py",
1359
+ "src/tools/dictionary.py",
1360
+ "src/tools/forex.py",
1361
+ "src/tools/linktools.py",
1362
+ "src/tools/pets.py",
1363
+ "src/tools/places.py",
1364
+ "src/tools/pokemon.py",
1365
+ "src/tools/quake.py",
1366
+ "src/tools/quiz.py",
1367
+ "src/tools/recipes.py",
1368
+ "src/tools/timezone.py",
1369
+ "src/tools/translate.py"
1370
+ ]
1371
+ },
1372
+ {
1373
+ "set": "evidence-shown",
1374
+ "query": "fix(memory): 회수 랭킹 정밀 하드닝 2건 — relevance 신호강화 + 카테고리 importance",
1375
+ "harnessAlone": [
1376
+ "src/core/retrieval_rank.py",
1377
+ "src/graph_memory.py",
1378
+ "src/memory.py",
1379
+ "src/vector_memory.py",
1380
+ "src/core/memory_decay.py",
1381
+ "src/proactive.py",
1382
+ "src/core/profile.py",
1383
+ "src/gateway/memory_1on1.py",
1384
+ "src/gateway/handlers.py",
1385
+ "src/knowledge_distiller.py"
1386
+ ],
1387
+ "harnessJudged": [
1388
+ "src/core/retrieval_rank.py",
1389
+ "src/graph_memory.py",
1390
+ "src/memory.py",
1391
+ "src/core/profile.py",
1392
+ "src/vector_memory.py",
1393
+ "src/core/memory_decay.py",
1394
+ "src/core/hierarchical_memory.py",
1395
+ "src/gateway/memory_1on1.py",
1396
+ "src/proactive.py",
1397
+ "src/knowledge_distiller.py"
1398
+ ],
1399
+ "grepJudged": [
1400
+ "src/core/retrieval_rank.py",
1401
+ "src/memory.py",
1402
+ "src/graph_memory.py",
1403
+ "src/core/profile.py",
1404
+ "src/vector_memory.py",
1405
+ "src/core/hierarchical_memory.py",
1406
+ "src/knowledge_distiller.py",
1407
+ "src/core/group_message_store.py",
1408
+ "src/core/memory_decay.py",
1409
+ "src/gateway/memory_1on1.py"
1410
+ ],
1411
+ "truthFiles": [
1412
+ "src/core/profile.py",
1413
+ "src/core/retrieval_rank.py",
1414
+ "src/gateway/handlers.py",
1415
+ "src/memory.py"
1416
+ ]
1417
+ },
1418
+ {
1419
+ "set": "evidence-shown",
1420
+ "query": "feat(memory): B1 Reflection — 축적 기억에서 상위 통찰 합성 (Generative Agents)",
1421
+ "harnessAlone": [
1422
+ "src/gateway/memory_1on1.py",
1423
+ "src/core/profile.py",
1424
+ "src/gateway/handlers.py",
1425
+ "src/graph_memory.py",
1426
+ "src/proactive.py",
1427
+ "src/memory.py",
1428
+ "src/gateway/group_butler.py",
1429
+ "src/core/retrieval_rank.py",
1430
+ "src/vector_memory.py",
1431
+ "src/core/group_message_store.py"
1432
+ ],
1433
+ "harnessJudged": [
1434
+ "src/graph_memory.py",
1435
+ "src/memory.py",
1436
+ "src/core/profile.py",
1437
+ "src/proactive.py",
1438
+ "src/core/hierarchical_memory.py",
1439
+ "src/gateway/memory_1on1.py",
1440
+ "src/vector_memory.py",
1441
+ "src/knowledge_distiller.py",
1442
+ "src/core/retrieval_rank.py",
1443
+ "src/gateway/handlers.py"
1444
+ ],
1445
+ "grepJudged": [
1446
+ "src/graph_memory.py",
1447
+ "src/knowledge_distiller.py",
1448
+ "src/proactive.py",
1449
+ "src/gateway/handlers.py",
1450
+ "src/memory.py",
1451
+ "src/vector_memory.py",
1452
+ "src/core/profile.py",
1453
+ "src/web_server.py",
1454
+ "src/gateway/group_butler.py",
1455
+ "src/gateway/wiring.py"
1456
+ ],
1457
+ "truthFiles": [
1458
+ "src/core/profile.py",
1459
+ "src/core/reflection.py",
1460
+ "src/proactive.py"
1461
+ ]
1462
+ },
1463
+ {
1464
+ "set": "evidence-shown",
1465
+ "query": "feat(memory): A1 장기 팩트 회수 랭킹 + 적대적 리뷰 하드닝 7건 (F025)",
1466
+ "harnessAlone": [
1467
+ "src/gateway/memory_1on1.py",
1468
+ "src/proactive.py",
1469
+ "src/core/profile.py",
1470
+ "src/gateway/handlers.py",
1471
+ "src/gateway/group_butler.py",
1472
+ "src/memory.py",
1473
+ "src/graph_memory.py",
1474
+ "src/core/group_message_store.py",
1475
+ "src/gateway/wiring.py",
1476
+ "src/core/briefing.py"
1477
+ ],
1478
+ "harnessJudged": [
1479
+ "src/core/retrieval_rank.py",
1480
+ "src/memory.py",
1481
+ "src/graph_memory.py",
1482
+ "src/core/profile.py",
1483
+ "src/gateway/memory_1on1.py",
1484
+ "src/vector_memory.py",
1485
+ "src/core/hierarchical_memory.py",
1486
+ "src/knowledge_distiller.py",
1487
+ "src/proactive.py",
1488
+ "src/gateway/handlers.py"
1489
+ ],
1490
+ "grepJudged": [
1491
+ "src/core/retrieval_rank.py",
1492
+ "src/memory.py",
1493
+ "src/core/profile.py",
1494
+ "src/knowledge_distiller.py",
1495
+ "src/vector_memory.py",
1496
+ "src/graph_memory.py",
1497
+ "src/gateway/handlers.py",
1498
+ "src/web_server.py",
1499
+ "src/gateway/group_butler.py",
1500
+ "src/core/hierarchical_memory.py"
1501
+ ],
1502
+ "truthFiles": [
1503
+ "src/core/group_message_store.py",
1504
+ "src/core/profile.py",
1505
+ "src/core/retrieval_rank.py",
1506
+ "src/gateway/group_butler.py",
1507
+ "src/gateway/handlers.py",
1508
+ "src/graph_memory.py",
1509
+ "src/memory.py"
1510
+ ]
1511
+ },
1512
+ {
1513
+ "set": "evidence-shown",
1514
+ "query": "feat(briefing): D-day 섹션을 캘린더 향후 N일(기본 30) 기반으로 전환",
1515
+ "harnessAlone": [
1516
+ "src/core/profile.py",
1517
+ "src/proactive.py",
1518
+ "src/core/group_message_store.py",
1519
+ "src/core/briefing.py",
1520
+ "src/tools/workspace.py",
1521
+ "src/gateway/group_butler.py",
1522
+ "src/gateway/handlers.py",
1523
+ "src/core/group_intervention.py",
1524
+ "src/core/email_calendar.py",
1525
+ "src/intent_router.py"
1526
+ ],
1527
+ "harnessJudged": [
1528
+ "src/core/briefing.py",
1529
+ "src/core/profile.py",
1530
+ "src/core/email_calendar.py",
1531
+ "src/proactive.py",
1532
+ "src/tools/workspace.py",
1533
+ "src/gateway/group_butler.py",
1534
+ "src/intent_router.py",
1535
+ "src/core/group_message_store.py",
1536
+ "src/gateway/handlers.py",
1537
+ "src/config.py"
1538
+ ],
1539
+ "grepJudged": [
1540
+ "src/core/briefing.py",
1541
+ "src/proactive.py",
1542
+ "src/core/email_calendar.py",
1543
+ "src/tools/google_calendar.py",
1544
+ "src/core/profile.py",
1545
+ "src/gateway/review_apply.py",
1546
+ "src/goal_agent.py",
1547
+ "src/google_auth.py",
1548
+ "src/gateway/handlers.py",
1549
+ "src/core/group_message_store.py"
1550
+ ],
1551
+ "truthFiles": [
1552
+ "src/core/briefing.py",
1553
+ "src/tools/google_calendar.py"
1554
+ ]
1555
+ },
1556
+ {
1557
+ "set": "evidence-shown",
1558
+ "query": "feat(memory): 추출 건강지표 — 성공률 추적·리포트·저조 시 알림 (F024 #2)",
1559
+ "harnessAlone": [
1560
+ "src/gateway/memory_1on1.py",
1561
+ "src/graph_memory.py",
1562
+ "src/core/profile.py",
1563
+ "src/proactive.py",
1564
+ "src/gateway/handlers.py",
1565
+ "src/core/hierarchical_memory.py",
1566
+ "src/core/llm_json.py",
1567
+ "src/core/group_intervention.py",
1568
+ "src/gateway/group_butler.py",
1569
+ "src/knowledge_distiller.py"
1570
+ ],
1571
+ "harnessJudged": [
1572
+ "src/graph_memory.py",
1573
+ "src/proactive.py",
1574
+ "src/core/profile.py",
1575
+ "src/knowledge_distiller.py",
1576
+ "src/core/llm_json.py",
1577
+ "src/memory.py",
1578
+ "src/gateway/handlers.py",
1579
+ "src/core/hierarchical_memory.py",
1580
+ "src/gateway/group_butler.py",
1581
+ "src/core/group_intervention.py"
1582
+ ],
1583
+ "grepJudged": [
1584
+ "src/knowledge_distiller.py",
1585
+ "src/core/semantic_extractor.py",
1586
+ "src/proactive.py",
1587
+ "src/core/profile.py",
1588
+ "src/core/llm_json.py",
1589
+ "src/graph_memory.py",
1590
+ "src/memory.py",
1591
+ "src/core/email_calendar.py",
1592
+ "src/web_server.py",
1593
+ "src/core/image_gen.py"
1594
+ ],
1595
+ "truthFiles": [
1596
+ "src/core/extraction_health.py",
1597
+ "src/core/hierarchical_memory.py",
1598
+ "src/core/llm_json.py",
1599
+ "src/core/profile.py",
1600
+ "src/gateway/wiring.py",
1601
+ "src/gmail_pubsub.py",
1602
+ "src/goal_agent.py",
1603
+ "src/knowledge_distiller.py",
1604
+ "src/memory.py",
1605
+ "src/proactive.py"
1606
+ ]
1607
+ },
1608
+ {
1609
+ "set": "evidence-shown",
1610
+ "query": "fix(memory): 매 대화 팩트 추출 5일 전면중단 복구(프롬프트 중괄호 이스케이프)",
1611
+ "harnessAlone": [
1612
+ "src/graph_memory.py",
1613
+ "src/gateway/memory_1on1.py",
1614
+ "src/core/profile.py",
1615
+ "src/proactive.py",
1616
+ "src/gateway/handlers.py",
1617
+ "src/gateway/group_butler.py",
1618
+ "src/memory.py",
1619
+ "src/core/group_intervention.py",
1620
+ "src/core/hierarchical_memory.py",
1621
+ "src/core/group_message_store.py"
1622
+ ],
1623
+ "harnessJudged": [
1624
+ "src/graph_memory.py",
1625
+ "src/core/semantic_extractor.py",
1626
+ "src/knowledge_distiller.py",
1627
+ "src/memory.py",
1628
+ "src/core/profile.py",
1629
+ "src/proactive.py",
1630
+ "src/gateway/memory_1on1.py",
1631
+ "src/core/canonicalize.py",
1632
+ "src/vector_memory.py",
1633
+ "src/core/hierarchical_memory.py"
1634
+ ],
1635
+ "grepJudged": [
1636
+ "src/knowledge_distiller.py",
1637
+ "src/core/semantic_extractor.py",
1638
+ "src/graph_memory.py",
1639
+ "src/gateway/handlers.py",
1640
+ "src/llm_providers/base_cli.py",
1641
+ "src/llm_providers/claude_cli.py",
1642
+ "src/core/image_gen.py",
1643
+ "src/web_server.py",
1644
+ "src/gateway/group_butler.py",
1645
+ "src/memory.py"
1646
+ ],
1647
+ "truthFiles": [
1648
+ "src/knowledge_distiller.py"
1649
+ ]
1650
+ },
1651
+ {
1652
+ "set": "evidence-shown",
1653
+ "query": "refactor(cleanup): 죽은 is_question_or_request 제거 + FAMILY_BROADCAST 키워드 단일화",
1654
+ "harnessAlone": [
1655
+ "src/proactive.py",
1656
+ "src/core/profile.py",
1657
+ "src/gateway/callbacks.py",
1658
+ "src/intent_router.py",
1659
+ "src/gateway/review_apply.py",
1660
+ "src/web_server.py",
1661
+ "src/gateway/handlers.py",
1662
+ "src/gateway/group_butler.py",
1663
+ "src/core/image_gen.py",
1664
+ "src/core/group_intervention.py"
1665
+ ],
1666
+ "harnessJudged": [
1667
+ "src/core/group_intervention.py",
1668
+ "src/gateway/family_routing.py",
1669
+ "src/proactive.py",
1670
+ "src/intent_router.py",
1671
+ "src/gateway/handlers.py",
1672
+ "src/core/profile.py",
1673
+ "src/gateway/review_apply.py",
1674
+ "src/core/registry.py",
1675
+ "src/event_broadcaster.py",
1676
+ "src/gateway/callbacks.py"
1677
+ ],
1678
+ "grepJudged": [
1679
+ "src/gateway/handlers.py",
1680
+ "src/gateway/family_routing.py",
1681
+ "src/gateway/review_apply.py",
1682
+ "src/proactive.py",
1683
+ "src/intent_router.py",
1684
+ "src/web_server.py",
1685
+ "src/gateway/group_butler.py",
1686
+ "src/event_broadcaster.py",
1687
+ "src/bot.py",
1688
+ "src/gateway/media_handlers.py"
1689
+ ],
1690
+ "truthFiles": [
1691
+ "src/core/group_intervention.py",
1692
+ "src/gateway/handlers.py",
1693
+ "src/intent_router.py"
1694
+ ]
1695
+ },
1696
+ {
1697
+ "set": "evidence-shown",
1698
+ "query": "feat(traffic): Tmap→Naver Directions(NCP, trafast 실시간 교통) 연동",
1699
+ "harnessAlone": [
1700
+ "src/tools/traffic.py",
1701
+ "src/core/profile.py",
1702
+ "src/core/tool.py",
1703
+ "src/core/hitl_review.py",
1704
+ "src/proactive.py",
1705
+ "src/gateway/group_butler.py",
1706
+ "src/gateway/handlers.py",
1707
+ "src/agy_engine.py",
1708
+ "src/core/group_intervention.py",
1709
+ "src/core/group_message_store.py"
1710
+ ],
1711
+ "harnessJudged": [
1712
+ "src/tools/traffic.py",
1713
+ "src/config.py",
1714
+ "src/core/profile.py",
1715
+ "src/core/tool.py",
1716
+ "src/proactive.py",
1717
+ "src/intent_router.py",
1718
+ "src/agy_engine.py",
1719
+ "src/gateway/handlers.py",
1720
+ "src/main.py",
1721
+ "src/gateway/group_butler.py"
1722
+ ],
1723
+ "grepJudged": [
1724
+ "src/tools/traffic.py",
1725
+ "src/proactive.py",
1726
+ "src/tools/maps_search.py",
1727
+ "src/config.py",
1728
+ "src/tools/capabilities.py",
1729
+ "src/tools/subway.py",
1730
+ "src/core/briefing.py",
1731
+ "src/tools/realestate.py",
1732
+ "src/core/profile.py",
1733
+ "src/gateway/handlers.py"
1734
+ ],
1735
+ "truthFiles": [
1736
+ "src/tools/traffic.py"
1737
+ ]
1738
+ },
1739
+ {
1740
+ "set": "two-step",
1741
+ "query": "feat(group): 답장(reply_to_message) 대상 발화를 답변 맥락에 주입",
1742
+ "harnessAlone": [
1743
+ "src/gateway/group_butler.py",
1744
+ "src/core/profile.py",
1745
+ "src/gateway/handlers.py",
1746
+ "src/core/group_intervention.py",
1747
+ "src/proactive.py",
1748
+ "src/core/group_message_store.py",
1749
+ "src/gateway/family_routing.py",
1750
+ "src/gateway/review_apply.py",
1751
+ "src/agy_engine.py",
1752
+ "src/gateway/wiring.py"
1753
+ ],
1754
+ "harnessJudged": [
1755
+ "src/gateway/group_butler.py",
1756
+ "src/gateway/handlers.py",
1757
+ "src/core/group_message_store.py",
1758
+ "src/core/profile.py",
1759
+ "src/core/group_intervention.py",
1760
+ "src/gateway/callbacks.py",
1761
+ "src/gateway/media_handlers.py",
1762
+ "src/proactive.py",
1763
+ "src/gateway/wiring.py",
1764
+ "src/intent_router.py"
1765
+ ],
1766
+ "grepJudged": [
1767
+ "src/gateway/handlers.py",
1768
+ "src/gateway/group_butler.py",
1769
+ "src/gateway/media_handlers.py",
1770
+ "src/core/group_intervention.py",
1771
+ "src/gateway/callbacks.py",
1772
+ "src/web_server.py",
1773
+ "src/tools/workspace.py",
1774
+ "src/hitl_manager.py",
1775
+ "src/event_broadcaster.py",
1776
+ "src/proactive.py"
1777
+ ],
1778
+ "truthFiles": [
1779
+ "src/gateway/group_butler.py"
1780
+ ]
1781
+ },
1782
+ {
1783
+ "set": "two-step",
1784
+ "query": "feat(memory): F022 1:1 확장 — DM 중기 롤링 요약 저장·배선(승격 없음)",
1785
+ "harnessAlone": [
1786
+ "src/graph_memory.py",
1787
+ "src/core/profile.py",
1788
+ "src/proactive.py",
1789
+ "src/gateway/group_butler.py",
1790
+ "src/core/hierarchical_memory.py",
1791
+ "src/gateway/handlers.py",
1792
+ "src/core/group_message_store.py",
1793
+ "src/core/group_intervention.py",
1794
+ "src/gateway/wiring.py",
1795
+ "src/core/semantic_extractor.py"
1796
+ ],
1797
+ "harnessJudged": [
1798
+ "src/core/hierarchical_memory.py",
1799
+ "src/graph_memory.py",
1800
+ "src/core/profile.py",
1801
+ "src/memory.py",
1802
+ "src/gateway/handlers.py",
1803
+ "src/proactive.py",
1804
+ "src/core/group_message_store.py",
1805
+ "src/gateway/wiring.py",
1806
+ "src/knowledge_distiller.py",
1807
+ "src/vector_memory.py"
1808
+ ],
1809
+ "grepJudged": [
1810
+ "src/core/hierarchical_memory.py",
1811
+ "src/gateway/group_butler.py",
1812
+ "src/knowledge_distiller.py",
1813
+ "src/core/profile.py",
1814
+ "src/core/group_message_store.py",
1815
+ "src/proactive.py",
1816
+ "src/memory.py",
1817
+ "src/tts_engine.py",
1818
+ "src/web_server.py",
1819
+ "src/tools/google_calendar.py"
1820
+ ],
1821
+ "truthFiles": [
1822
+ "src/gateway/memory_1on1.py",
1823
+ "src/memory.py"
1824
+ ]
1825
+ },
1826
+ {
1827
+ "set": "two-step",
1828
+ "query": "feat(config): F022 hierarchical_memory 설정(세션갭·누적·승격 임계치 등)",
1829
+ "harnessAlone": [
1830
+ "src/core/profile.py",
1831
+ "src/config.py",
1832
+ "src/graph_memory.py",
1833
+ "src/memory.py",
1834
+ "src/vector_memory.py",
1835
+ "src/core/group_message_store.py",
1836
+ "src/proactive.py",
1837
+ "src/gateway/handlers.py",
1838
+ "src/gateway/group_butler.py",
1839
+ "src/core/hierarchical_memory.py"
1840
+ ],
1841
+ "harnessJudged": [
1842
+ "src/core/profile.py",
1843
+ "src/config.py",
1844
+ "src/core/hierarchical_memory.py",
1845
+ "src/graph_memory.py",
1846
+ "src/memory.py",
1847
+ "src/gateway/wiring.py",
1848
+ "src/core/group_message_store.py",
1849
+ "src/proactive.py",
1850
+ "src/vector_memory.py",
1851
+ "src/gateway/handlers.py"
1852
+ ],
1853
+ "grepJudged": [
1854
+ "src/core/profile.py",
1855
+ "src/core/hierarchical_memory.py",
1856
+ "src/graph_memory.py",
1857
+ "src/knowledge_distiller.py",
1858
+ "src/core/canonicalize.py",
1859
+ "src/proactive.py",
1860
+ "src/web_server.py",
1861
+ "src/intent_router.py",
1862
+ "src/gateway/handlers.py",
1863
+ "src/tools/crypto.py"
1864
+ ],
1865
+ "truthFiles": [
1866
+ "src/core/profile.py"
1867
+ ]
1868
+ },
1869
+ {
1870
+ "set": "two-step",
1871
+ "query": "feat(traffic): OSRM → Google Directions 실시간 교통(duration_in_traffic)",
1872
+ "harnessAlone": [
1873
+ "src/tools/google_calendar.py",
1874
+ "src/core/profile.py",
1875
+ "src/tools/workspace.py",
1876
+ "src/gateway/review_apply.py",
1877
+ "src/google_auth.py",
1878
+ "src/config.py",
1879
+ "src/agy_engine.py",
1880
+ "src/core/hitl_review.py",
1881
+ "src/tools/maps_search.py",
1882
+ "src/web_server.py"
1883
+ ],
1884
+ "harnessJudged": [
1885
+ "src/tools/traffic.py",
1886
+ "src/core/http.py",
1887
+ "src/core/tool.py",
1888
+ "src/core/registry.py",
1889
+ "src/tools/maps_search.py",
1890
+ "src/config.py",
1891
+ "src/core/profile.py",
1892
+ "src/intent_router.py",
1893
+ "src/proactive.py",
1894
+ "src/agy_engine.py"
1895
+ ],
1896
+ "grepJudged": [
1897
+ "src/tools/traffic.py",
1898
+ "src/tools/maps_search.py",
1899
+ "src/google_auth.py",
1900
+ "src/proactive.py",
1901
+ "src/llm_providers/gemini_api.py",
1902
+ "src/tools/google_calendar.py",
1903
+ "src/agy_engine.py",
1904
+ "src/tools/workspace.py",
1905
+ "src/intent_router.py",
1906
+ "src/tools/capabilities.py"
1907
+ ],
1908
+ "truthFiles": [
1909
+ "src/tools/traffic.py"
1910
+ ]
1911
+ },
1912
+ {
1913
+ "set": "two-step",
1914
+ "query": "feat(config): F021-2 passive.meaningful_filter(enabled·count_window)",
1915
+ "harnessAlone": [
1916
+ "src/core/profile.py",
1917
+ "src/gateway/group_butler.py",
1918
+ "src/core/group_intervention.py",
1919
+ "src/core/group_message_store.py",
1920
+ "src/config.py",
1921
+ "src/gateway/image_gen_service.py",
1922
+ "src/jarvis_sleep_manager.py",
1923
+ "src/proactive.py",
1924
+ "src/gateway/handlers.py",
1925
+ "src/intent_router.py"
1926
+ ],
1927
+ "harnessJudged": [
1928
+ "src/core/profile.py",
1929
+ "src/config.py",
1930
+ "src/gateway/group_butler.py",
1931
+ "src/core/group_intervention.py",
1932
+ "src/gateway/wiring.py",
1933
+ "src/core/tool.py",
1934
+ "src/proactive.py",
1935
+ "src/gateway/handlers.py",
1936
+ "src/main.py",
1937
+ "src/agy_engine.py"
1938
+ ],
1939
+ "grepJudged": [
1940
+ "src/gateway/group_butler.py",
1941
+ "src/core/profile.py",
1942
+ "src/core/group_intervention.py",
1943
+ "src/config.py",
1944
+ "src/gateway/handlers.py",
1945
+ "src/proactive.py",
1946
+ "src/gateway/wiring.py",
1947
+ "src/core/group_message_store.py",
1948
+ "src/intent_router.py",
1949
+ "src/main.py"
1950
+ ],
1951
+ "truthFiles": [
1952
+ "src/core/profile.py"
1953
+ ]
1954
+ },
1955
+ {
1956
+ "set": "two-step",
1957
+ "query": "feat(group): F021-1 그룹 대화 영속화 — 재기동에도 맥락 유지(무응답 버그 근본해결)",
1958
+ "harnessAlone": [
1959
+ "src/gateway/group_butler.py",
1960
+ "src/core/group_intervention.py",
1961
+ "src/core/profile.py",
1962
+ "src/gateway/image_gen_service.py",
1963
+ "src/gateway/handlers.py",
1964
+ "src/proactive.py",
1965
+ "src/config.py",
1966
+ "src/gateway/wiring.py",
1967
+ "src/graph_memory.py",
1968
+ "src/llm_providers/claude_cli.py"
1969
+ ],
1970
+ "harnessJudged": [
1971
+ "src/gateway/group_butler.py",
1972
+ "src/core/group_intervention.py",
1973
+ "src/gateway/wiring.py",
1974
+ "src/core/profile.py",
1975
+ "src/gateway/handlers.py",
1976
+ "src/config.py",
1977
+ "src/proactive.py",
1978
+ "src/gateway/callbacks.py",
1979
+ "src/gateway/__init__.py",
1980
+ "src/web_server.py"
1981
+ ],
1982
+ "grepJudged": [
1983
+ "src/gateway/group_butler.py",
1984
+ "src/vector_memory.py",
1985
+ "src/gateway/wiring.py",
1986
+ "src/proactive.py",
1987
+ "src/main.py",
1988
+ "src/core/hitl_review.py",
1989
+ "src/core/group_message_store.py",
1990
+ "src/core/profile.py",
1991
+ "src/gateway/handlers.py",
1992
+ "src/config.py"
1993
+ ],
1994
+ "truthFiles": [
1995
+ "src/core/group_message_store.py",
1996
+ "src/gateway/group_butler.py"
1997
+ ]
1998
+ },
1999
+ {
2000
+ "set": "two-step",
2001
+ "query": "feat(gc): Feature 020 — 통합 임시파일 GC(고아 안전망)",
2002
+ "harnessAlone": [
2003
+ "src/gateway/group_butler.py",
2004
+ "src/core/profile.py",
2005
+ "src/core/group_intervention.py",
2006
+ "src/gateway/handlers.py",
2007
+ "src/gateway/wiring.py",
2008
+ "src/graph_memory.py",
2009
+ "src/proactive.py",
2010
+ "src/llm_providers/claude_cli.py",
2011
+ "src/llm_providers/agy_cli.py",
2012
+ "src/intent_router.py"
2013
+ ],
2014
+ "harnessJudged": [
2015
+ "src/config.py",
2016
+ "src/gateway/wiring.py",
2017
+ "src/core/registry.py",
2018
+ "src/core/tool.py",
2019
+ "src/agy_engine.py",
2020
+ "src/web_server.py",
2021
+ "src/hitl_manager.py",
2022
+ "src/core/hitl_review.py",
2023
+ "src/gmail_pubsub.py",
2024
+ "src/tools/workspace.py"
2025
+ ],
2026
+ "grepJudged": [
2027
+ "src/tools/weather.py",
2028
+ "src/tools/open_meteo.py",
2029
+ "src/tts_engine.py",
2030
+ "src/tools/google_calendar.py",
2031
+ "src/hitl_manager.py",
2032
+ "src/llm_providers/gemini_api.py",
2033
+ "src/agy_engine.py",
2034
+ "src/config.py",
2035
+ "src/main.py",
2036
+ "src/web_server.py"
2037
+ ],
2038
+ "truthFiles": [
2039
+ "src/core/profile.py",
2040
+ "src/core/temp_gc.py",
2041
+ "src/gateway/temp_gc_service.py",
2042
+ "src/main.py",
2043
+ "src/proactive.py"
2044
+ ]
2045
+ },
2046
+ {
2047
+ "set": "two-step",
2048
+ "query": "fix(image): 이미지 후속 요청(\"귀엽게 보여줘\") 인식 + 텍스트 엔진 그림 약속 금지",
2049
+ "harnessAlone": [
2050
+ "src/core/image_gen.py",
2051
+ "src/gateway/image_gen_service.py",
2052
+ "src/core/profile.py",
2053
+ "src/llm_providers/agy_cli.py",
2054
+ "src/gateway/group_butler.py",
2055
+ "src/gateway/handlers.py",
2056
+ "src/agy_engine.py",
2057
+ "src/gateway/wiring.py",
2058
+ "src/llm_providers/claude_cli.py",
2059
+ "src/proactive.py"
2060
+ ],
2061
+ "harnessJudged": [
2062
+ "src/core/image_gen.py",
2063
+ "src/gateway/image_gen_service.py",
2064
+ "src/gateway/media_handlers.py",
2065
+ "src/intent_router.py",
2066
+ "src/agy_engine.py",
2067
+ "src/gateway/handlers.py",
2068
+ "src/core/profile.py",
2069
+ "src/llm_providers/base_cli.py",
2070
+ "src/gateway/group_butler.py",
2071
+ "src/core/background.py"
2072
+ ],
2073
+ "grepJudged": [
2074
+ "src/gateway/media_handlers.py",
2075
+ "src/gateway/image_gen_service.py",
2076
+ "src/gateway/group_butler.py",
2077
+ "src/core/image_gen.py",
2078
+ "src/agy_engine.py",
2079
+ "src/gateway/handlers.py",
2080
+ "src/llm_providers/agy_cli.py",
2081
+ "src/tools/astronomy.py",
2082
+ "src/llm_providers/claude_cli.py",
2083
+ "src/visualizer.py"
2084
+ ],
2085
+ "truthFiles": [
2086
+ "src/core/image_gen.py",
2087
+ "src/gateway/group_butler.py",
2088
+ "src/gateway/handlers.py",
2089
+ "src/gateway/image_gen_service.py"
2090
+ ]
2091
+ }
2092
+ ]
2093
+ };
2094
+ exports.THIRD_CORPUS_COMPARISON = {
2095
+ "corpus": "reference-gemini-cli",
2096
+ "opponent": "a person with grep and judgement (me), not a program",
2097
+ "note": "A-SPEC-426 measured the same corpus against the name-only baseline and the harness won there. Different opponents; both results stand.",
2098
+ "caveat": "n=8, and these eight are harder than the 29 scored in A-SPEC-426.",
2099
+ "harnessAloneTop10RecallHere": 0.268,
2100
+ "harnessAloneTop10RecallOn29": 0.483,
2101
+ "cases": [
2102
+ {
2103
+ "set": "gemini-cli-blind",
2104
+ "query": "fix(core): properly format markdown in AskUser tool by unescaping newlines (#26349)",
2105
+ "harnessAlone": [
2106
+ "packages/core/src/config/config.ts",
2107
+ "packages/core/src/agents/local-executor.ts",
2108
+ "packages/core/src/core/geminiChat.ts",
2109
+ "packages/core/src/config/storage.ts",
2110
+ "packages/core/src/services/memoryService.ts",
2111
+ "packages/core/src/tools/tool-registry.ts",
2112
+ "packages/core/src/core/client.ts",
2113
+ "packages/core/src/prompts/promptProvider.ts",
2114
+ "packages/core/src/tools/shell.ts",
2115
+ "packages/core/src/prompts/snippets.ts"
2116
+ ],
2117
+ "harnessJudged": [
2118
+ "packages/cli/src/ui/components/AskUserDialog.tsx",
2119
+ "packages/core/src/tools/tool-registry.ts",
2120
+ "packages/core/src/commands/memory.ts",
2121
+ "packages/core/src/tools/edit.ts",
2122
+ "packages/core/src/tools/write-file.ts",
2123
+ "packages/core/src/agents/agent-tool.ts",
2124
+ "packages/sdk/src/tool.ts",
2125
+ "packages/core/src/scheduler/tool-executor.ts",
2126
+ "packages/core/src/tools/shell.ts",
2127
+ "packages/core/src/services/shellExecutionService.ts"
2128
+ ],
2129
+ "grepJudged": [
2130
+ "packages/core/src/tools/ask-user.ts",
2131
+ "packages/cli/src/ui/components/AskUserDialog.tsx",
2132
+ "packages/cli/src/ui/contexts/AskUserActionsContext.tsx",
2133
+ "packages/cli/src/ui/utils/markdownParsingUtils.ts",
2134
+ "packages/core/src/tools/tools.ts",
2135
+ "packages/core/src/agents/agentLoader.ts",
2136
+ "packages/cli/src/ui/hooks/atCommandProcessor.ts",
2137
+ "packages/cli/src/ui/components/shared/text-buffer.ts",
2138
+ "packages/core/src/utils/editCorrector.ts",
2139
+ "packages/devtools/client/src/App.tsx"
2140
+ ],
2141
+ "truthFiles": [
2142
+ "packages/core/src/tools/ask-user.ts"
2143
+ ],
2144
+ "pool40": [
2145
+ "packages/core/src/config/config.ts",
2146
+ "packages/core/src/agents/local-executor.ts",
2147
+ "packages/core/src/core/geminiChat.ts",
2148
+ "packages/core/src/config/storage.ts",
2149
+ "packages/core/src/services/memoryService.ts",
2150
+ "packages/core/src/tools/tool-registry.ts",
2151
+ "packages/core/src/core/client.ts",
2152
+ "packages/core/src/prompts/promptProvider.ts",
2153
+ "packages/core/src/tools/shell.ts",
2154
+ "packages/core/src/prompts/snippets.ts",
2155
+ "packages/core/src/agents/registry.ts",
2156
+ "packages/core/src/utils/events.ts",
2157
+ "packages/core/src/services/chatRecordingService.ts",
2158
+ "packages/core/src/commands/memory.ts",
2159
+ "packages/cli/src/acp/commands/memory.ts",
2160
+ "packages/core/src/tools/grep.ts",
2161
+ "packages/core/src/telemetry/types.ts",
2162
+ "packages/core/src/agents/agent-tool.ts",
2163
+ "packages/core/src/prompts/snippets.legacy.ts",
2164
+ "packages/core/src/agent/legacy-agent-session.ts",
2165
+ "packages/core/src/agents/a2aUtils.ts",
2166
+ "packages/core/src/services/shellExecutionService.ts",
2167
+ "packages/core/src/scheduler/scheduler.ts",
2168
+ "packages/core/src/policy/policy-engine.ts",
2169
+ "packages/core/src/tools/edit.ts",
2170
+ "packages/cli/src/config/settingsSchema.ts",
2171
+ "packages/cli/src/acp/acpSession.ts",
2172
+ "packages/core/src/tools/web-fetch.ts",
2173
+ "packages/core/src/tools/write-file.ts",
2174
+ "packages/core/src/agents/skill-extraction-agent.ts",
2175
+ "packages/core/src/test-utils/mock-tool.ts",
2176
+ "packages/core/src/tools/tool-names.ts",
2177
+ "packages/a2a-server/src/utils/testing_utils.ts",
2178
+ "packages/cli/src/nonInteractiveCliAgentSession.ts",
2179
+ "packages/a2a-server/src/agent/task.ts",
2180
+ "packages/core/src/scheduler/tool-executor.ts",
2181
+ "packages/sdk/src/tool.ts",
2182
+ "packages/core/src/core/agentChatHistory.ts",
2183
+ "packages/cli/src/ui/components/AskUserDialog.tsx",
2184
+ "packages/cli/src/gemini.tsx"
2185
+ ]
2186
+ },
2187
+ {
2188
+ "set": "gemini-cli-blind",
2189
+ "query": "fix(core): filter unsupported multimodal types from tool responses (#26352)",
2190
+ "harnessAlone": [
2191
+ "packages/core/src/config/config.ts",
2192
+ "packages/core/src/agents/local-executor.ts",
2193
+ "packages/core/src/core/client.ts",
2194
+ "packages/core/src/config/storage.ts",
2195
+ "packages/core/src/core/geminiChat.ts",
2196
+ "packages/core/src/prompts/promptProvider.ts",
2197
+ "packages/core/src/tools/tool-registry.ts",
2198
+ "packages/sdk/src/tool.ts",
2199
+ "packages/core/src/utils/events.ts",
2200
+ "packages/core/src/prompts/snippets.ts"
2201
+ ],
2202
+ "harnessJudged": [
2203
+ "packages/core/src/scheduler/tool-executor.ts",
2204
+ "packages/core/src/core/geminiChat.ts",
2205
+ "packages/core/src/core/client.ts",
2206
+ "packages/core/src/tools/tool-registry.ts",
2207
+ "packages/sdk/src/tool.ts",
2208
+ "packages/core/src/scheduler/scheduler.ts",
2209
+ "packages/core/src/services/chatRecordingService.ts",
2210
+ "packages/core/src/agents/agent-tool.ts",
2211
+ "packages/core/src/telemetry/types.ts",
2212
+ "packages/a2a-server/src/agent/task.ts"
2213
+ ],
2214
+ "grepJudged": [
2215
+ "packages/core/src/utils/generateContentResponseUtilities.ts",
2216
+ "packages/cli/src/ui/hooks/useGeminiStream.ts",
2217
+ "packages/core/src/config/defaultModelConfigs.ts",
2218
+ "packages/core/src/utils/filesearch/fileSearch.ts",
2219
+ "packages/test-utils/src/perf-test-harness.ts",
2220
+ "packages/cli/src/ui/components/SessionBrowser.tsx",
2221
+ "packages/cli/src/ui/commands/mcpCommand.ts",
2222
+ "packages/cli/src/ui/commands/extensionsCommand.ts",
2223
+ "packages/cli/src/ui/components/shared/SearchableList.tsx",
2224
+ "packages/devtools/client/src/App.tsx"
2225
+ ],
2226
+ "truthFiles": [
2227
+ "packages/core/src/core/geminiChat.ts",
2228
+ "packages/core/src/utils/generateContentResponseUtilities.ts"
2229
+ ],
2230
+ "pool40": [
2231
+ "packages/core/src/config/config.ts",
2232
+ "packages/core/src/agents/local-executor.ts",
2233
+ "packages/core/src/core/client.ts",
2234
+ "packages/core/src/config/storage.ts",
2235
+ "packages/core/src/core/geminiChat.ts",
2236
+ "packages/core/src/prompts/promptProvider.ts",
2237
+ "packages/core/src/tools/tool-registry.ts",
2238
+ "packages/sdk/src/tool.ts",
2239
+ "packages/core/src/utils/events.ts",
2240
+ "packages/core/src/prompts/snippets.ts",
2241
+ "packages/core/src/tools/shell.ts",
2242
+ "packages/core/src/services/chatRecordingService.ts",
2243
+ "packages/core/src/tools/tool-names.ts",
2244
+ "packages/core/src/services/memoryService.ts",
2245
+ "packages/core/src/agents/a2aUtils.ts",
2246
+ "packages/core/src/agents/registry.ts",
2247
+ "packages/sdk/src/session.ts",
2248
+ "packages/sdk/src/types.ts",
2249
+ "packages/core/src/scheduler/scheduler.ts",
2250
+ "packages/core/src/prompts/snippets.legacy.ts",
2251
+ "packages/core/src/tools/grep.ts",
2252
+ "packages/core/src/telemetry/types.ts",
2253
+ "packages/cli/src/config/settingsSchema.ts",
2254
+ "packages/cli/src/acp/acpSession.ts",
2255
+ "packages/core/src/test-utils/mock-tool.ts",
2256
+ "packages/core/src/agents/skill-extraction-agent.ts",
2257
+ "packages/core/src/utils/filesearch/fileSearch.ts",
2258
+ "packages/core/src/services/shellExecutionService.ts",
2259
+ "packages/a2a-server/src/agent/task.ts",
2260
+ "packages/cli/src/acp/commands/memory.ts",
2261
+ "packages/core/src/core/agentChatHistory.ts",
2262
+ "packages/core/src/tools/edit.ts",
2263
+ "packages/core/src/policy/policy-engine.ts",
2264
+ "packages/core/src/agents/agent-tool.ts",
2265
+ "packages/core/src/tools/write-file.ts",
2266
+ "packages/core/src/tools/web-fetch.ts",
2267
+ "packages/core/src/utils/retry.ts",
2268
+ "packages/sdk/src/agent.ts",
2269
+ "packages/core/src/services/sessionSummaryUtils.ts",
2270
+ "packages/test-utils/src/test-rig.ts"
2271
+ ]
2272
+ },
2273
+ {
2274
+ "set": "gemini-cli-blind",
2275
+ "query": "feat(cli): improve /agents refresh logging (#26442)",
2276
+ "harnessAlone": [
2277
+ "packages/core/src/config/config.ts",
2278
+ "packages/core/src/config/storage.ts",
2279
+ "packages/core/src/agents/local-executor.ts",
2280
+ "packages/core/src/commands/memory.ts",
2281
+ "packages/cli/src/acp/commands/memory.ts",
2282
+ "packages/cli/src/config/settings.ts",
2283
+ "packages/cli/src/gemini.tsx",
2284
+ "packages/core/src/utils/events.ts",
2285
+ "packages/core/src/prompts/snippets.ts",
2286
+ "packages/core/src/agents/skill-extraction-agent.ts"
2287
+ ],
2288
+ "harnessJudged": [
2289
+ "packages/core/src/agents/registry.ts",
2290
+ "packages/core/src/utils/events.ts",
2291
+ "packages/cli/src/gemini.tsx",
2292
+ "packages/cli/src/config/settings.ts",
2293
+ "packages/core/src/config/config.ts",
2294
+ "packages/core/src/agents/local-executor.ts",
2295
+ "packages/core/src/config/storage.ts",
2296
+ "packages/cli/src/config/settingsSchema.ts",
2297
+ "packages/core/src/prompts/snippets.ts",
2298
+ "packages/cli/src/acp/commands/memory.ts"
2299
+ ],
2300
+ "grepJudged": [
2301
+ "packages/core/src/agents/registry.ts",
2302
+ "packages/core/src/utils/events.ts",
2303
+ "packages/core/src/config/config.ts",
2304
+ "packages/cli/src/config/extension-manager.ts",
2305
+ "packages/core/src/agents/agentLoader.ts",
2306
+ "packages/cli/src/config/config.ts",
2307
+ "packages/cli/src/test-utils/mockConfig.ts",
2308
+ "packages/cli/src/config/settings.ts",
2309
+ "packages/cli/src/config/settingsSchema.ts",
2310
+ "packages/cli/src/gemini.tsx"
2311
+ ],
2312
+ "truthFiles": [
2313
+ "packages/cli/src/ui/commands/agentsCommand.ts",
2314
+ "packages/core/src/agents/registry.ts",
2315
+ "packages/core/src/agents/types.ts"
2316
+ ],
2317
+ "pool40": [
2318
+ "packages/core/src/config/config.ts",
2319
+ "packages/core/src/config/storage.ts",
2320
+ "packages/core/src/agents/local-executor.ts",
2321
+ "packages/core/src/commands/memory.ts",
2322
+ "packages/cli/src/acp/commands/memory.ts",
2323
+ "packages/cli/src/config/settings.ts",
2324
+ "packages/cli/src/gemini.tsx",
2325
+ "packages/core/src/utils/events.ts",
2326
+ "packages/core/src/prompts/snippets.ts",
2327
+ "packages/core/src/agents/skill-extraction-agent.ts",
2328
+ "packages/core/src/agents/registry.ts",
2329
+ "packages/cli/src/config/settingsSchema.ts",
2330
+ "packages/core/src/prompts/promptProvider.ts",
2331
+ "packages/core/src/services/memoryService.ts",
2332
+ "packages/cli/src/config/config.ts",
2333
+ "packages/cli/src/ui/commands/skillsCommand.ts",
2334
+ "packages/cli/src/acp/acpRpcDispatcher.ts",
2335
+ "packages/cli/src/acp/acpSession.ts",
2336
+ "packages/cli/src/acp/acpSessionManager.ts",
2337
+ "packages/cli/src/services/FileCommandLoader.ts",
2338
+ "packages/core/src/code_assist/server.ts",
2339
+ "packages/core/src/agents/a2aUtils.ts",
2340
+ "packages/sdk/src/session.ts",
2341
+ "packages/cli/src/interactiveCli.tsx",
2342
+ "packages/sdk/src/agent.ts",
2343
+ "packages/core/src/agents/types.ts",
2344
+ "packages/cli/src/nonInteractiveCli.ts",
2345
+ "packages/cli/src/nonInteractiveCliAgentSession.ts",
2346
+ "packages/core/src/agents/agentLoader.ts",
2347
+ "packages/cli/src/ui/AppContainer.tsx",
2348
+ "packages/core/src/services/chatRecordingService.ts",
2349
+ "packages/cli/index.ts",
2350
+ "packages/cli/src/test-utils/mockConfig.ts",
2351
+ "packages/cli/src/acp/commands/restore.ts",
2352
+ "packages/cli/src/test-utils/AppRig.tsx",
2353
+ "packages/cli/src/utils/activityLogger.ts",
2354
+ "packages/core/src/core/client.ts",
2355
+ "packages/cli/src/ui/components/ExitPlanModeDialog.tsx",
2356
+ "packages/cli/src/ui/key/keyBindings.ts",
2357
+ "packages/cli/src/ui/components/InputPrompt.tsx"
2358
+ ]
2359
+ },
2360
+ {
2361
+ "set": "gemini-cli-blind",
2362
+ "query": "docs(sdk): add JSDoc to all exported interfaces and types (#26277)",
2363
+ "harnessAlone": [
2364
+ "packages/core/src/tools/get-internal-docs.ts",
2365
+ "packages/core/src/commands/memory.ts",
2366
+ "packages/core/src/config/config.ts",
2367
+ "packages/cli/src/acp/commands/memory.ts",
2368
+ "packages/core/src/tools/tool-registry.ts",
2369
+ "packages/core/src/services/memoryService.ts",
2370
+ "packages/sdk/src/types.ts",
2371
+ "packages/cli/src/config/settingsSchema.ts",
2372
+ "packages/core/src/policy/policy-engine.ts",
2373
+ "packages/core/src/agents/skill-extraction-agent.ts"
2374
+ ],
2375
+ "harnessJudged": [
2376
+ "packages/sdk/src/types.ts",
2377
+ "packages/core/src/agents/types.ts",
2378
+ "packages/cli/src/ui/commands/types.ts",
2379
+ "packages/core/src/agent/types.ts",
2380
+ "packages/core/src/tools/get-internal-docs.ts",
2381
+ "packages/cli/src/config/settingsSchema.ts",
2382
+ "packages/core/src/config/config.ts",
2383
+ "packages/core/src/tools/tool-registry.ts",
2384
+ "packages/core/src/policy/policy-engine.ts",
2385
+ "packages/cli/src/config/config.ts"
2386
+ ],
2387
+ "grepJudged": [
2388
+ "packages/core/src/hooks/types.ts",
2389
+ "packages/core/src/code_assist/types.ts",
2390
+ "packages/core/src/agent/types.ts",
2391
+ "packages/core/src/tools/tools.ts",
2392
+ "packages/core/src/tools/mcp-client.ts",
2393
+ "packages/core/src/config/models.ts",
2394
+ "packages/core/src/config/config.ts",
2395
+ "packages/core/src/utils/events.ts",
2396
+ "packages/core/src/utils/oauth-flow.ts",
2397
+ "packages/core/src/mcp/oauth-provider.ts"
2398
+ ],
2399
+ "truthFiles": [
2400
+ "packages/sdk/src/agent.ts",
2401
+ "packages/sdk/src/fs.ts",
2402
+ "packages/sdk/src/session.ts",
2403
+ "packages/sdk/src/shell.ts",
2404
+ "packages/sdk/src/skills.ts",
2405
+ "packages/sdk/src/tool.ts",
2406
+ "packages/sdk/src/types.ts"
2407
+ ],
2408
+ "pool40": [
2409
+ "packages/core/src/tools/get-internal-docs.ts",
2410
+ "packages/core/src/commands/memory.ts",
2411
+ "packages/core/src/config/config.ts",
2412
+ "packages/cli/src/acp/commands/memory.ts",
2413
+ "packages/core/src/tools/tool-registry.ts",
2414
+ "packages/core/src/services/memoryService.ts",
2415
+ "packages/sdk/src/types.ts",
2416
+ "packages/cli/src/config/settingsSchema.ts",
2417
+ "packages/core/src/policy/policy-engine.ts",
2418
+ "packages/core/src/agents/skill-extraction-agent.ts",
2419
+ "packages/core/src/agents/types.ts",
2420
+ "packages/cli/src/ui/commands/types.ts",
2421
+ "packages/cli/src/config/config.ts",
2422
+ "packages/cli/src/ui/hooks/atCommandProcessor.ts",
2423
+ "packages/core/src/agent/types.ts",
2424
+ "packages/cli/src/ui/commands/memoryCommand.ts",
2425
+ "packages/core/src/core/agentChatHistory.ts",
2426
+ "packages/cli/src/acp/acpSession.ts",
2427
+ "packages/a2a-server/src/agent/task.ts",
2428
+ "packages/cli/src/config/settings.ts",
2429
+ "packages/cli/src/ui/themes/theme-manager.ts",
2430
+ "packages/core/src/config/storage.ts",
2431
+ "packages/core/src/prompts/snippets.ts",
2432
+ "packages/core/src/services/shellExecutionService.ts",
2433
+ "packages/core/src/skills/skillManager.ts",
2434
+ "packages/cli/src/ui/components/ThemeDialog.tsx",
2435
+ "packages/core/src/services/memoryPatchUtils.ts",
2436
+ "packages/core/src/core/client.ts",
2437
+ "packages/cli/src/nonInteractiveCliAgentSession.ts",
2438
+ "packages/core/src/policy/config.ts",
2439
+ "packages/core/src/tools/memoryTool.ts",
2440
+ "packages/core/src/config/projectRegistry.ts",
2441
+ "packages/core/src/agent/event-translator.ts",
2442
+ "packages/test-utils/src/file-system-test-helpers.ts",
2443
+ "packages/cli/src/test-utils/mockConfig.ts",
2444
+ "packages/core/src/agents/browser/browserManager.ts",
2445
+ "packages/core/src/telemetry/index.ts",
2446
+ "packages/cli/src/ui/types.ts",
2447
+ "packages/cli/src/ui/components/InboxDialog.tsx",
2448
+ "packages/core/src/telemetry/memory-monitor.ts"
2449
+ ]
2450
+ },
2451
+ {
2452
+ "set": "gemini-cli-blind",
2453
+ "query": "feat: add ignoreLocalEnv setting and --ignore-env flag (#2493) (#26445)",
2454
+ "harnessAlone": [
2455
+ "packages/core/src/agents/local-executor.ts",
2456
+ "packages/core/src/config/config.ts",
2457
+ "packages/cli/src/acp/commands/memory.ts",
2458
+ "packages/cli/src/config/settings.ts",
2459
+ "packages/core/src/agents/skill-extraction-agent.ts",
2460
+ "packages/core/src/config/storage.ts",
2461
+ "packages/core/src/skills/skillManager.ts",
2462
+ "packages/core/src/agents/registry.ts",
2463
+ "packages/core/src/commands/memory.ts",
2464
+ "packages/core/src/services/memoryService.ts"
2465
+ ],
2466
+ "harnessJudged": [
2467
+ "packages/cli/src/config/settings.ts",
2468
+ "packages/cli/src/config/settingsSchema.ts",
2469
+ "packages/core/src/config/config.ts",
2470
+ "packages/cli/src/config/config.ts",
2471
+ "packages/core/src/utils/ignoreFileParser.ts",
2472
+ "packages/core/src/config/scoped-config.ts",
2473
+ "packages/core/src/services/fileDiscoveryService.ts",
2474
+ "packages/core/src/utils/filesearch/ignore.ts",
2475
+ "packages/core/src/utils/gitIgnoreParser.ts",
2476
+ "packages/core/src/agents/local-executor.ts"
2477
+ ],
2478
+ "grepJudged": [
2479
+ "packages/cli/src/config/settingsSchema.ts",
2480
+ "packages/cli/src/config/settings.ts",
2481
+ "packages/cli/src/config/config.ts",
2482
+ "packages/core/src/config/config.ts",
2483
+ "packages/core/src/utils/ignoreFileParser.ts",
2484
+ "packages/core/src/services/fileDiscoveryService.ts",
2485
+ "packages/core/src/utils/filesearch/ignore.ts",
2486
+ "packages/core/src/config/scoped-config.ts",
2487
+ "packages/core/src/agents/local-executor.ts",
2488
+ "packages/core/src/utils/gitIgnoreParser.ts"
2489
+ ],
2490
+ "truthFiles": [
2491
+ "packages/cli/src/config/settings.ts",
2492
+ "packages/cli/src/config/settingsSchema.ts"
2493
+ ],
2494
+ "pool40": [
2495
+ "packages/core/src/agents/local-executor.ts",
2496
+ "packages/core/src/config/config.ts",
2497
+ "packages/cli/src/acp/commands/memory.ts",
2498
+ "packages/cli/src/config/settings.ts",
2499
+ "packages/core/src/agents/skill-extraction-agent.ts",
2500
+ "packages/core/src/config/storage.ts",
2501
+ "packages/core/src/skills/skillManager.ts",
2502
+ "packages/core/src/agents/registry.ts",
2503
+ "packages/core/src/commands/memory.ts",
2504
+ "packages/core/src/services/memoryService.ts",
2505
+ "packages/core/src/utils/ignoreFileParser.ts",
2506
+ "packages/core/src/policy/policy-engine.ts",
2507
+ "packages/core/src/config/scoped-config.ts",
2508
+ "packages/core/src/core/geminiChat.ts",
2509
+ "packages/core/src/utils/gitIgnoreParser.ts",
2510
+ "packages/cli/src/config/settingsSchema.ts",
2511
+ "packages/core/src/core/client.ts",
2512
+ "packages/core/src/services/fileDiscoveryService.ts",
2513
+ "packages/core/src/utils/filesearch/ignore.ts",
2514
+ "packages/cli/src/config/config.ts",
2515
+ "packages/cli/src/ui/commands/memoryCommand.ts",
2516
+ "packages/core/src/services/shellExecutionService.ts",
2517
+ "packages/core/src/agents/types.ts",
2518
+ "packages/cli/src/gemini.tsx",
2519
+ "packages/core/src/prompts/snippets.ts",
2520
+ "packages/core/src/core/agentChatHistory.ts",
2521
+ "packages/core/src/core/localLiteRtLmClient.ts",
2522
+ "packages/core/src/services/gitService.ts",
2523
+ "packages/core/src/services/chatRecordingService.ts",
2524
+ "packages/core/src/utils/paths.ts",
2525
+ "packages/core/src/agent/legacy-agent-session.ts",
2526
+ "packages/cli/src/ui/commands/types.ts",
2527
+ "packages/core/src/telemetry/config.ts",
2528
+ "packages/core/src/tools/trackerTools.ts",
2529
+ "packages/core/src/tools/tool-registry.ts",
2530
+ "packages/core/src/ide/ide-client.ts",
2531
+ "packages/cli/src/test-utils/mockConfig.ts",
2532
+ "packages/cli/src/ui/AppContainer.tsx",
2533
+ "packages/core/src/config/models.ts",
2534
+ "packages/core/src/telemetry/activity-monitor.ts"
2535
+ ]
2536
+ },
2537
+ {
2538
+ "set": "gemini-cli-blind",
2539
+ "query": "test(cleanup): fix temporary directory leaks in test suites (#26217)",
2540
+ "harnessAlone": [
2541
+ "packages/cli/src/utils/cleanup.ts",
2542
+ "packages/core/src/config/config.ts",
2543
+ "packages/cli/src/utils/sessionCleanup.ts",
2544
+ "packages/core/src/services/shellExecutionService.ts",
2545
+ "packages/core/src/config/storage.ts",
2546
+ "packages/core/src/services/chatRecordingService.ts",
2547
+ "packages/core/src/utils/filesearch/fileSearch.ts",
2548
+ "packages/core/src/commands/memory.ts",
2549
+ "packages/core/src/sandbox/windows/WindowsSandboxManager.ts",
2550
+ "packages/core/src/utils/shell-utils.ts"
2551
+ ],
2552
+ "harnessJudged": [
2553
+ "packages/cli/src/utils/cleanup.ts",
2554
+ "packages/cli/src/utils/sessionCleanup.ts",
2555
+ "packages/test-utils/src/test-rig.ts",
2556
+ "packages/core/src/services/shellExecutionService.ts",
2557
+ "packages/core/src/config/storage.ts",
2558
+ "packages/core/src/utils/filesearch/fileSearch.ts",
2559
+ "packages/cli/src/utils/sandbox.ts",
2560
+ "packages/core/src/utils/process-utils.ts",
2561
+ "packages/core/src/telemetry/memory-monitor.ts",
2562
+ "packages/core/src/agents/browser/browserAgentFactory.ts"
2563
+ ],
2564
+ "grepJudged": [
2565
+ "packages/cli/src/utils/sessionCleanup.ts",
2566
+ "packages/cli/src/utils/cleanup.ts",
2567
+ "packages/cli/src/gemini.tsx",
2568
+ "packages/cli/src/interactiveCli.tsx",
2569
+ "packages/core/src/services/shellExecutionService.ts",
2570
+ "packages/cli/src/utils/sandbox.ts",
2571
+ "packages/test-utils/src/test-rig.ts",
2572
+ "packages/cli/src/ui/utils/terminalCapabilityManager.ts",
2573
+ "packages/core/src/tools/tool-registry.ts",
2574
+ "packages/cli/src/ui/hooks/useAnimatedScrollbar.ts"
2575
+ ],
2576
+ "truthFiles": [
2577
+ "packages/test-utils/src/file-system-test-helpers.ts"
2578
+ ],
2579
+ "pool40": [
2580
+ "packages/cli/src/utils/cleanup.ts",
2581
+ "packages/core/src/config/config.ts",
2582
+ "packages/cli/src/utils/sessionCleanup.ts",
2583
+ "packages/core/src/services/shellExecutionService.ts",
2584
+ "packages/core/src/config/storage.ts",
2585
+ "packages/core/src/services/chatRecordingService.ts",
2586
+ "packages/core/src/utils/filesearch/fileSearch.ts",
2587
+ "packages/core/src/commands/memory.ts",
2588
+ "packages/core/src/sandbox/windows/WindowsSandboxManager.ts",
2589
+ "packages/core/src/utils/shell-utils.ts",
2590
+ "packages/cli/src/interactiveCli.tsx",
2591
+ "packages/core/src/agents/browser/browserAgentFactory.ts",
2592
+ "packages/core/src/tools/tool-registry.ts",
2593
+ "packages/core/src/core/client.ts",
2594
+ "packages/test-utils/src/test-rig.ts",
2595
+ "packages/cli/src/utils/sandbox.ts",
2596
+ "packages/core/src/utils/process-utils.ts",
2597
+ "packages/core/src/code_assist/oauth2.ts",
2598
+ "packages/core/src/telemetry/memory-monitor.ts",
2599
+ "packages/cli/src/gemini.tsx",
2600
+ "packages/cli/src/config/config.ts",
2601
+ "packages/core/src/tools/grep.ts",
2602
+ "packages/core/src/agents/agentLoader.ts",
2603
+ "packages/core/src/core/agentChatHistory.ts",
2604
+ "packages/core/src/context/graph/render.ts",
2605
+ "packages/core/src/utils/filesearch/ignore.ts",
2606
+ "packages/cli/src/commands/extensions/new.ts",
2607
+ "packages/core/src/prompts/promptProvider.ts",
2608
+ "packages/cli/src/acp/acpSession.ts",
2609
+ "packages/core/src/agents/a2aUtils.ts",
2610
+ "packages/cli/src/ui/AppContainer.tsx",
2611
+ "packages/cli/src/ui/components/InboxDialog.tsx",
2612
+ "packages/core/src/sandbox/linux/LinuxSandboxManager.ts",
2613
+ "packages/core/src/sandbox/macos/MacOsSandboxManager.ts",
2614
+ "packages/core/src/scheduler/scheduler.ts",
2615
+ "packages/cli/src/utils/handleAutoUpdate.ts",
2616
+ "packages/core/src/tools/edit.ts",
2617
+ "packages/core/src/services/sandboxManager.ts",
2618
+ "packages/cli/src/ui/commands/skillsCommand.ts",
2619
+ "packages/cli/src/ui/commands/setupGithubCommand.ts"
2620
+ ]
2621
+ },
2622
+ {
2623
+ "set": "gemini-cli-blind",
2624
+ "query": "feat(voice): add privacy and compliance UX warning for Gemini Live backend (#26454)",
2625
+ "harnessAlone": [
2626
+ "packages/core/src/core/client.ts",
2627
+ "packages/core/src/config/config.ts",
2628
+ "packages/core/src/agents/local-executor.ts",
2629
+ "packages/core/src/core/geminiChat.ts",
2630
+ "packages/cli/src/gemini.tsx",
2631
+ "packages/core/src/config/models.ts",
2632
+ "packages/cli/src/ui/hooks/useVoiceMode.ts",
2633
+ "packages/core/src/agent/legacy-agent-session.ts",
2634
+ "packages/cli/src/acp/commands/memory.ts",
2635
+ "packages/core/src/services/chatRecordingService.ts"
2636
+ ],
2637
+ "harnessJudged": [
2638
+ "packages/core/src/voice/geminiLiveTranscriptionProvider.ts",
2639
+ "packages/cli/src/ui/hooks/useVoiceMode.ts",
2640
+ "packages/cli/src/acp/acpRpcDispatcher.ts",
2641
+ "packages/core/src/config/models.ts",
2642
+ "packages/core/src/core/client.ts",
2643
+ "packages/cli/src/acp/acpSession.ts",
2644
+ "packages/cli/src/acp/acpSessionManager.ts",
2645
+ "packages/core/src/config/config.ts",
2646
+ "packages/cli/src/gemini.tsx",
2647
+ "packages/core/src/core/geminiChat.ts"
2648
+ ],
2649
+ "grepJudged": [
2650
+ "packages/cli/src/ui/hooks/useVoiceMode.ts",
2651
+ "packages/cli/src/ui/privacy/CloudFreePrivacyNotice.tsx",
2652
+ "packages/core/src/voice/geminiLiveTranscriptionProvider.ts",
2653
+ "packages/cli/src/ui/components/VoiceModelDialog.tsx",
2654
+ "packages/cli/src/ui/commands/voiceCommand.ts",
2655
+ "packages/core/src/voice/transcriptionFactory.ts",
2656
+ "packages/cli/src/config/settingsSchema.ts",
2657
+ "packages/core/src/utils/browserConsent.ts",
2658
+ "packages/core/src/index.ts",
2659
+ "packages/core/src/config/config.ts"
2660
+ ],
2661
+ "truthFiles": [
2662
+ "packages/cli/src/config/settingsSchema.ts",
2663
+ "packages/cli/src/ui/components/VoiceModelDialog.tsx"
2664
+ ],
2665
+ "pool40": [
2666
+ "packages/core/src/core/client.ts",
2667
+ "packages/core/src/config/config.ts",
2668
+ "packages/core/src/agents/local-executor.ts",
2669
+ "packages/core/src/core/geminiChat.ts",
2670
+ "packages/cli/src/gemini.tsx",
2671
+ "packages/core/src/config/models.ts",
2672
+ "packages/cli/src/ui/hooks/useVoiceMode.ts",
2673
+ "packages/core/src/agent/legacy-agent-session.ts",
2674
+ "packages/cli/src/acp/commands/memory.ts",
2675
+ "packages/core/src/services/chatRecordingService.ts",
2676
+ "packages/core/src/tools/tool-registry.ts",
2677
+ "packages/cli/src/nonInteractiveCliAgentSession.ts",
2678
+ "packages/cli/src/config/config.ts",
2679
+ "packages/cli/src/acp/acpSession.ts",
2680
+ "packages/core/src/voice/geminiLiveTranscriptionProvider.ts",
2681
+ "packages/a2a-server/src/utils/testing_utils.ts",
2682
+ "packages/cli/src/acp/acpSessionManager.ts",
2683
+ "packages/cli/src/acp/acpRpcDispatcher.ts",
2684
+ "packages/core/src/prompts/snippets.ts",
2685
+ "packages/cli/src/ui/commands/types.ts",
2686
+ "packages/core/src/config/storage.ts",
2687
+ "packages/core/src/policy/policy-engine.ts",
2688
+ "packages/core/src/core/agentChatHistory.ts",
2689
+ "packages/cli/src/nonInteractiveCli.ts",
2690
+ "packages/cli/src/ui/components/VoiceModelDialog.tsx",
2691
+ "packages/test-utils/src/test-rig.ts",
2692
+ "packages/cli/src/config/settingsSchema.ts",
2693
+ "packages/core/src/commands/memory.ts",
2694
+ "packages/core/src/utils/events.ts",
2695
+ "packages/cli/src/ui/components/InputPrompt.tsx",
2696
+ "packages/cli/src/ui/AppContainer.tsx",
2697
+ "packages/core/src/telemetry/index.ts",
2698
+ "packages/cli/src/test-utils/mockConfig.ts",
2699
+ "packages/core/src/telemetry/memory-monitor.ts",
2700
+ "packages/core/src/agents/registry.ts",
2701
+ "packages/core/src/policy/config.ts",
2702
+ "packages/core/src/utils/tokenCalculation.ts",
2703
+ "packages/core/src/utils/memoryDiscovery.ts",
2704
+ "packages/cli/src/ui/commands/voiceCommand.ts",
2705
+ "packages/core/src/context/contextManager.ts"
2706
+ ]
2707
+ },
2708
+ {
2709
+ "set": "gemini-cli-blind",
2710
+ "query": "fix(core): use close event instead of exit in child_process fallback (#25695)",
2711
+ "harnessAlone": [
2712
+ "packages/core/src/telemetry/types.ts",
2713
+ "packages/core/src/config/config.ts",
2714
+ "packages/core/src/tools/tool-registry.ts",
2715
+ "packages/core/src/core/client.ts",
2716
+ "packages/cli/src/config/config.ts",
2717
+ "packages/core/src/core/geminiChat.ts",
2718
+ "packages/cli/src/gemini.tsx",
2719
+ "packages/core/src/services/chatRecordingService.ts",
2720
+ "packages/core/src/utils/events.ts",
2721
+ "packages/core/src/services/shellExecutionService.ts"
2722
+ ],
2723
+ "harnessJudged": [
2724
+ "packages/core/src/services/shellExecutionService.ts",
2725
+ "packages/core/src/utils/events.ts",
2726
+ "packages/core/src/agent/legacy-agent-session.ts",
2727
+ "packages/test-utils/src/test-rig.ts",
2728
+ "packages/cli/src/nonInteractiveCli.ts",
2729
+ "packages/core/src/core/client.ts",
2730
+ "packages/core/src/config/config.ts",
2731
+ "packages/core/src/telemetry/types.ts",
2732
+ "packages/core/src/services/keychainService.ts",
2733
+ "packages/core/src/utils/filesearch/fileSearch.ts"
2734
+ ],
2735
+ "grepJudged": [
2736
+ "packages/core/src/services/shellExecutionService.ts",
2737
+ "packages/core/src/utils/shell-utils.ts",
2738
+ "packages/cli/src/utils/sandbox.ts",
2739
+ "packages/test-utils/src/test-rig.ts",
2740
+ "packages/core/src/services/sandboxedFileSystemService.ts",
2741
+ "packages/cli/src/ui/utils/clipboardUtils.ts",
2742
+ "packages/core/src/tools/tool-registry.ts",
2743
+ "packages/core/src/ide/ide-installer.ts",
2744
+ "packages/cli/src/ui/components/triage/TriageIssues.tsx",
2745
+ "packages/cli/src/ui/components/triage/TriageDuplicates.tsx"
2746
+ ],
2747
+ "truthFiles": [
2748
+ "packages/core/src/services/shellExecutionService.ts"
2749
+ ],
2750
+ "pool40": [
2751
+ "packages/core/src/telemetry/types.ts",
2752
+ "packages/core/src/config/config.ts",
2753
+ "packages/core/src/tools/tool-registry.ts",
2754
+ "packages/core/src/core/client.ts",
2755
+ "packages/cli/src/config/config.ts",
2756
+ "packages/core/src/core/geminiChat.ts",
2757
+ "packages/cli/src/gemini.tsx",
2758
+ "packages/core/src/services/chatRecordingService.ts",
2759
+ "packages/core/src/utils/events.ts",
2760
+ "packages/core/src/services/shellExecutionService.ts",
2761
+ "packages/core/src/prompts/snippets.ts",
2762
+ "packages/core/src/agents/local-executor.ts",
2763
+ "packages/cli/src/nonInteractiveCli.ts",
2764
+ "packages/core/src/services/keychainService.ts",
2765
+ "packages/core/src/agent/legacy-agent-session.ts",
2766
+ "packages/core/src/utils/filesearch/fileSearch.ts",
2767
+ "packages/test-utils/src/test-rig.ts",
2768
+ "packages/cli/src/interactiveCli.tsx",
2769
+ "packages/core/src/availability/policyHelpers.ts",
2770
+ "packages/core/src/agents/registry.ts",
2771
+ "packages/cli/src/nonInteractiveCliAgentSession.ts",
2772
+ "packages/core/src/telemetry/loggers.ts",
2773
+ "packages/core/src/core/baseLlmClient.ts",
2774
+ "packages/core/src/services/memoryService.ts",
2775
+ "packages/core/src/core/agentChatHistory.ts",
2776
+ "packages/core/src/agents/a2aUtils.ts",
2777
+ "packages/core/src/tools/web-fetch.ts",
2778
+ "packages/core/src/hooks/hookTranslator.ts",
2779
+ "packages/core/src/prompts/promptProvider.ts",
2780
+ "packages/core/src/context/eventBus.ts",
2781
+ "packages/core/src/prompts/snippets.legacy.ts",
2782
+ "packages/core/src/utils/shell-utils.ts",
2783
+ "packages/cli/src/ui/commands/types.ts",
2784
+ "packages/core/src/tools/exit-plan-mode.ts",
2785
+ "packages/core/src/ide/ide-client.ts",
2786
+ "packages/core/src/context/graph/toGraph.ts",
2787
+ "packages/core/src/context/graph/mapper.ts",
2788
+ "packages/core/src/agents/browser/browserManager.ts",
2789
+ "packages/core/src/availability/policyCatalog.ts",
2790
+ "packages/cli/src/config/settingsSchema.ts"
2791
+ ]
2792
+ }
2793
+ ]
2794
+ };
2795
+ /** How much of the truth the exposed pool held at all -- the ceiling any reranking could reach. */
2796
+ function poolCoverage(r) {
2797
+ let truthTotal = 0, inPool = 0, casesWithNothing = 0;
2798
+ for (const c of r.cases) {
2799
+ truthTotal += c.truthFiles.length;
2800
+ const hit = c.truthFiles.filter((f) => c.pool40.includes(f)).length;
2801
+ inPool += hit;
2802
+ if (hit === 0)
2803
+ casesWithNothing += 1;
2804
+ }
2805
+ return { truthTotal, inPool, casesWithNothing };
2806
+ }
2807
+ // @implements A-SPEC-429
2808
+ /**
2809
+ * What A-SPEC-428's window guarantee bought, measured two ways.
2810
+ *
2811
+ * Controlled first: the SAME eight cases A-SPEC-427 lost on, re-run after the change. Nine of
2812
+ * nineteen answers were inside the exposed forty before; fourteen after. Two cases offered nothing
2813
+ * at all; one after. Answers the lexical layer ranked in its top ten but the pipeline never showed:
2814
+ * five before, none after. Same commits, same queries — the increase belongs to the change.
2815
+ *
2816
+ * Then a fresh blind set of eight, truth unread until the picks were frozen. The gap to a person
2817
+ * with grep is much smaller than it was, and precision now favours the harness alone. It is still a
2818
+ * gap: grep and judgement lead both recall axes.
2819
+ *
2820
+ * One result here goes the other way and is kept because it does: on this set MY reranking was
2821
+ * WORSE than the harness's own ordering (Top-10 recall 0.446 against 0.527). The judgement step is
2822
+ * not a free improvement, and the earlier sets where it helped did not establish that it always
2823
+ * would.
2824
+ */
2825
+ exports.WINDOW_GUARANTEE_GAIN = {
2826
+ sameCases: {
2827
+ corpus: 'reference-gemini-cli, the eight cases of A-SPEC-427',
2828
+ truthTotal: 19,
2829
+ inPoolBefore: 9,
2830
+ inPoolAfter: 14,
2831
+ casesWithNothingBefore: 2,
2832
+ casesWithNothingAfter: 1,
2833
+ lexTop10BuriedBefore: 5,
2834
+ lexTop10BuriedAfter: 0,
2835
+ },
2836
+ freshSet: {
2837
+ corpus: 'reference-gemini-cli, eight cases whose truth was unread until the picks were frozen',
2838
+ cases: 8,
2839
+ harnessAlone: { top1: 0.250, top5Recall: 0.286, top10Recall: 0.527, top10Precision: 0.125 },
2840
+ grepJudged: { top1: 0.250, top5Recall: 0.390, top10Recall: 0.595, top10Precision: 0.112 },
2841
+ harnessJudged: { top1: 0.125, top5Recall: 0.348, top10Recall: 0.446, top10Precision: 0.100 },
2842
+ poolCoverage: { inPool: 13, truthTotal: 18, casesWithNothing: 1 },
2843
+ },
2844
+ earlierSetHarnessAloneTop10Recall: 0.268,
2845
+ caveat: '두 세트는 커밋이 다르므로 직접 비교하지 않는다 — 새 세트가 더 쉽다(하네스 단독 0.527 대 0.268). not comparable.',
2846
+ };