@routinecrew/routinecode 2.31.39 → 2.31.40

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 (80) hide show
  1. package/bin/prompt-vault.js +1 -1
  2. package/bin/setup.js +1 -1
  3. package/hooks/lib/block_message.py +1 -1
  4. package/hooks/lib/receipt.py +221 -0
  5. package/hooks/pre-agent-spawn.mjs +1 -1
  6. package/hooks/pre-credit-guard.sh +2 -2
  7. package/hooks/pre-read-knowledge-inject.sh +81 -8
  8. package/hooks/stop-usage-metrics.sh +136 -0
  9. package/hooks/tests/gate-integration.test.sh +14 -6
  10. package/hooks/user-prompt-submit.sh +29 -3
  11. package/mcp-db-manager/dist/analyzers/duplicate-detector.js +1 -1
  12. package/mcp-db-manager/dist/core/model-parser.js +1 -1
  13. package/mcp-db-manager/dist/core/schema-reader.js +1 -1
  14. package/mcp-db-manager/dist/executors/migration-executor.js +1 -1
  15. package/mcp-db-manager/dist/generators/migration-generator.js +1 -1
  16. package/mcp-db-manager/dist/index.js +1 -1
  17. package/mcp-db-manager/dist/validators/schema-validator.js +1 -1
  18. package/mcp-dev-tester/dist/analyzers/auth-diagnoser.js +1 -1
  19. package/mcp-dev-tester/dist/analyzers/backend-analyzer.js +1 -1
  20. package/mcp-dev-tester/dist/analyzers/endpoint-diagnoser.js +1 -1
  21. package/mcp-dev-tester/dist/analyzers/frontend-analyzer.js +1 -1
  22. package/mcp-dev-tester/dist/analyzers/runtime-diagnoser.js +1 -1
  23. package/mcp-dev-tester/dist/analyzers/type-comparator.js +1 -1
  24. package/mcp-dev-tester/dist/analyzers/validation-diagnoser.js +1 -1
  25. package/mcp-dev-tester/dist/browser/playwright-manager.js +1 -1
  26. package/mcp-dev-tester/dist/browser/ui-tester.js +1 -1
  27. package/mcp-dev-tester/dist/config/project-config.js +1 -1
  28. package/mcp-dev-tester/dist/index.js +1 -1
  29. package/mcp-dev-tester/dist/testers/api-tester.js +1 -1
  30. package/mcp-doc-fetcher/dist/index.js +1 -1
  31. package/mcp-html-renderer/dist/index.js +1 -1
  32. package/mcp-html-renderer/dist/preview.js +1 -1
  33. package/mcp-html-renderer/dist/template-engine.js +1 -1
  34. package/mcp-intelligence/dist/concept-catalog.js +1 -1
  35. package/mcp-intelligence/dist/concept-server-proxy.js +1 -1
  36. package/mcp-intelligence/dist/config-auth.js +1 -1
  37. package/mcp-intelligence/dist/contracts.generated.js +1 -1
  38. package/mcp-intelligence/dist/domain-templates.js +1 -1
  39. package/mcp-intelligence/dist/grounding.js +1 -1
  40. package/mcp-intelligence/dist/handlers.js +1 -1
  41. package/mcp-intelligence/dist/index.js +1 -1
  42. package/mcp-intelligence/dist/intelligence-file.js +1 -1
  43. package/mcp-intelligence/dist/knowledge-critic.js +1 -1
  44. package/mcp-intelligence/dist/knowledge-handlers.js +1 -1
  45. package/mcp-intelligence/dist/mention-extractor.js +1 -1
  46. package/mcp-intelligence/dist/provenance.js +1 -1
  47. package/mcp-intelligence/dist/semantic-embedder.js +1 -1
  48. package/mcp-log-watcher/dist/config-auth.js +1 -1
  49. package/mcp-log-watcher/dist/file-watcher.js +1 -1
  50. package/mcp-log-watcher/dist/index.js +1 -1
  51. package/mcp-log-watcher/dist/known-solutions.js +1 -1
  52. package/mcp-log-watcher/dist/log-store.js +1 -1
  53. package/mcp-log-watcher/dist/websocket-server.js +1 -1
  54. package/mcp-plan-manager/dist/__tests__/plan-parser.test.js +1 -1
  55. package/mcp-plan-manager/dist/file-ops.js +1 -1
  56. package/mcp-plan-manager/dist/index.js +1 -1
  57. package/mcp-plan-manager/dist/plan-parser.js +1 -1
  58. package/mcp-project-context/dist/git-ops.js +1 -1
  59. package/mcp-project-context/dist/index.js +1 -1
  60. package/mcp-project-context/dist/project-analysis.js +1 -1
  61. package/mcp-routinecode/dist/agent-tracker.js +1 -1
  62. package/mcp-routinecode/dist/blast-radius.js +1 -1
  63. package/mcp-routinecode/dist/config-auth.js +1 -1
  64. package/mcp-routinecode/dist/contracts.generated.js +1 -1
  65. package/mcp-routinecode/dist/explorer-advisor.js +1 -1
  66. package/mcp-routinecode/dist/failure-tracker.js +1 -1
  67. package/mcp-routinecode/dist/file-lock-registry.js +1 -1
  68. package/mcp-routinecode/dist/file-risk-scorer.js +1 -1
  69. package/mcp-routinecode/dist/index.js +1 -1
  70. package/mcp-routinecode/dist/known-solutions.js +1 -1
  71. package/mcp-routinecode/dist/ledger-miner.js +1 -1
  72. package/mcp-routinecode/dist/observed-draft.js +1 -1
  73. package/mcp-routinecode/dist/pattern-matcher.js +1 -1
  74. package/mcp-routinecode/dist/routines.js +1 -1
  75. package/mcp-routinecode/dist/rule-engine.js +1 -1
  76. package/mcp-routinecode/dist/rule-promoter.js +1 -1
  77. package/mcp-routinecode/dist/telemetry-analyzer.js +1 -1
  78. package/mcp-routinecode/dist/verification.js +1 -1
  79. package/mcp-routinecode/dist/viral-loop.js +1 -1
  80. package/package.json +1 -1
@@ -0,0 +1,221 @@
1
+ #!/usr/bin/env python3
2
+ """Prevented Cost 영수증 — 집계기 (설계: docs2/지능개선/new/Prevented-Cost-영수증-설계.md).
3
+
4
+ 순수 읽기(사이드이펙트 0). `/receipt` 커맨드와 stop-hook 세션말 1줄이 공유한다.
5
+ 제1원칙 = 과대주장 금지: 모든 숫자에 {실측|추정·하한|잠재|측정중} 라벨, 잠재/실측 불혼합,
6
+ 음수(지식 무익) 정직 표기, "API 환산" 각주. fail-open: 어떤 파손도 "측정 중" 폴백.
7
+
8
+ 행1 지식예방: stats.json pooled 2-비율 — 표시값 = pooled gain CI 하한(95%).
9
+ R1 해제 = 동적(ci_lower > 0). per-kid 는 상세에서 raw 비율(음수 포함).
10
+ 행2 반복루틴: routines.json 중 promotion_path==mcp_candidate (= rule & n_tools>=2 품질
11
+ 필터 — generic 단일도구 거품 제외). '잠재' 라벨. adoption.json 채택 현황(R2).
12
+ 행3 환산: 실측분/잠재분 분리 $ (합산 금지). prices.json 없으면 내장 보수 기본값.
13
+ """
14
+ import os
15
+ import json
16
+ import math
17
+ import sys
18
+
19
+ _RC = os.path.join(os.path.expanduser('~'), '.' + 'routinecode')
20
+ STATS = os.path.join(_RC, 'attribution', 'stats.json')
21
+ ROUTINES = os.path.join(_RC, 'rdpe', 'routines.json')
22
+ ADOPTION = os.path.join(_RC, 'rdpe', 'adoption.json')
23
+ PRICES = os.path.join(_RC, 'rdpe', 'prices.json')
24
+
25
+ # 내장 기본 단가 ($/1M tokens) — 보수(낮은 쪽) 채택: 과대주장 금지 원칙.
26
+ # 출처: Anthropic 공시가(Sonnet 급) 기준, 2026-10 확인. prices.json 으로 교체 가능.
27
+ DEFAULT_PRICES = {"input": 3.0, "output": 15.0, "cache_read": 0.30, "cache_write": 3.75,
28
+ "_note": "USD per 1M tokens, conservative(Sonnet-tier), 2026-10"}
29
+
30
+ Z95 = 1.96 # 95% CI
31
+
32
+
33
+ def _load(path, default):
34
+ try:
35
+ with open(path) as f:
36
+ return json.load(f)
37
+ except Exception:
38
+ return default
39
+
40
+
41
+ def _prices():
42
+ p = _load(PRICES, None)
43
+ if isinstance(p, dict) and all(k in p for k in ('cache_read',)):
44
+ return p
45
+ return DEFAULT_PRICES
46
+
47
+
48
+ def r1_pooled(stats=None):
49
+ """행1: pooled 2-비율 검정. 반환 {state, n_exposed, n_holdout, prevented_est, ci_lower,
50
+ gain_point, per_kid}. state: 'measuring' | 'active'."""
51
+ if stats is None:
52
+ stats = _load(STATS, {})
53
+ ne = nh = be = bh = 0
54
+ per_kid = []
55
+ for kid, v in (stats or {}).items():
56
+ if not isinstance(v, dict):
57
+ continue
58
+ e, h = int(v.get('exposed', 0) or 0), int(v.get('holdout', 0) or 0)
59
+ eb, hb = int(v.get('exposed_bad', 0) or 0), int(v.get('holdout_bad', 0) or 0)
60
+ ne += e; nh += h; be += eb; bh += hb
61
+ if e or h:
62
+ # raw gain (음수 포함 — 무익 지식 정직 표기, floor 없음). 양군 있어야 계산.
63
+ _rg = round((hb / h) - (eb / e), 3) if (h and e) else None
64
+ per_kid.append({"kid": kid, "kind": v.get('kind', ''),
65
+ "exposed": e, "exposed_bad": eb,
66
+ "holdout": h, "holdout_bad": hb, "raw_gain": _rg})
67
+ out = {"state": "measuring", "n_exposed": ne, "n_holdout": nh,
68
+ "prevented_est": 0, "ci_lower": None, "gain_point": None, "per_kid": per_kid}
69
+ if ne > 0 and nh > 0:
70
+ pe, ph = be / ne, bh / nh
71
+ gain = ph - pe # 양수 = 주입군이 덜 실패 = 예방
72
+ se = math.sqrt(max(ph * (1 - ph) / nh + pe * (1 - pe) / ne, 0.0))
73
+ ci_lower = gain - Z95 * se
74
+ out["gain_point"] = round(gain, 4)
75
+ out["ci_lower"] = round(ci_lower, 4)
76
+ if ci_lower > 0: # R1 동적 해제 (고정 N_min 없음 — 설계 §2행1)
77
+ out["state"] = "active"
78
+ out["prevented_est"] = int(ne * ci_lower) # 표시값 자체가 CI 하한(보수)
79
+ return out
80
+
81
+
82
+ def r2_routines(routines=None):
83
+ """행2: mcp_candidate(= rule & n_tools>=2 품질 필터) 집계 + adoption 현황."""
84
+ if routines is None:
85
+ routines = _load(ROUTINES, {})
86
+ cands = [(s, x) for s, x in (routines or {}).items()
87
+ if isinstance(x, dict) and x.get('promotion_path') == 'mcp_candidate']
88
+ potential = sum(int(x.get('saving_potential', 0) or 0) for _, x in cands)
89
+ adoption = _load(ADOPTION, [])
90
+ if not isinstance(adoption, list):
91
+ adoption = []
92
+ adopted = [a for a in adoption if isinstance(a, dict)]
93
+ # 실측 절감: adoption 엔트리에 실측 필드(measured_saved_tokens)가 기록된 경우만 (R2 게이트
94
+ # — 커맨드 실행 ΔC 실측 전엔 '절감' 단어 사용 금지, 설계 §2행2).
95
+ measured = sum(int(a.get('measured_saved_tokens', 0) or 0) for a in adopted)
96
+ return {"candidates": cands, "count": len(cands), "potential_tokens": potential,
97
+ "adopted": adopted, "adopted_count": len(adopted),
98
+ "total_uses": sum(int(a.get('use_count', 0) or 0) for a in adopted),
99
+ "measured_tokens": measured}
100
+
101
+
102
+ def snapshot(routines=None, stats=None):
103
+ """세션말 1줄용 비휘발 이벤트 키만 (설계 §3 v1.1 — 토큰/$ 류 매턴 증가값 제외)."""
104
+ r2 = r2_routines(routines)
105
+ r1 = r1_pooled(stats)
106
+ rules_multi = r2["count"] # 필터 후 rule 수 == mcp_candidate 수 (동일 기준)
107
+ return {"rule_count": rules_multi, "mcp_candidate_count": r2["count"],
108
+ "r1_state": r1["state"]}
109
+
110
+
111
+ def oneline(snap_now, snap_old):
112
+ """변화 종류별 세션말 1줄. 변화 없으면 None."""
113
+ try:
114
+ if snap_now.get("r1_state") == "active" and snap_old.get("r1_state") != "active":
115
+ return ("✅ 지식 효과 측정이 통계적 유의 수준에 도달했습니다 — "
116
+ "예방 추정이 활성화됐습니다 (대조군 대비 · 보수 하한). 상세: /receipt")
117
+ _d = snap_now.get("mcp_candidate_count", 0) - snap_old.get("mcp_candidate_count", 0)
118
+ if _d > 0:
119
+ return ("📈 반복 루틴 %d개가 자동화 후보로 승격됐습니다 — "
120
+ "/routines 로 커맨드로 묶을 수 있습니다. 상세: /receipt" % _d)
121
+ except Exception:
122
+ return None
123
+ return None
124
+
125
+
126
+ def _fmt_tok(n):
127
+ if n >= 1_000_000:
128
+ return "%.1fM" % (n / 1_000_000)
129
+ if n >= 1_000:
130
+ return "%.1fK" % (n / 1_000)
131
+ return str(n)
132
+
133
+
134
+ def build_receipt():
135
+ """전체 영수증 dict — /receipt 렌더 원천."""
136
+ r1 = r1_pooled()
137
+ r2 = r2_routines()
138
+ pr = _prices()
139
+ cr = float(pr.get('cache_read', DEFAULT_PRICES['cache_read']))
140
+ # 행3: 분리 표기 (합산 단일 $ 금지 — 설계 §2행3 v1.1)
141
+ usd_potential = r2["potential_tokens"] * cr / 1_000_000
142
+ usd_measured = r2["measured_tokens"] * cr / 1_000_000 # R2 실측분(현재 0)
143
+ return {"r1": r1, "r2": r2,
144
+ "r3": {"usd_potential": round(usd_potential, 2),
145
+ "usd_measured": round(usd_measured, 2),
146
+ "price_basis": "cache_read $%.2f/M (%s)" % (cr, pr.get('_note', 'prices.json'))},
147
+ "snapshot": snapshot()}
148
+
149
+
150
+ def render(r):
151
+ """사람이 읽는 영수증 (설계 §2 라벨 체계 고정)."""
152
+ L = []
153
+ L.append("📋 RoutineCode 영수증")
154
+ L.append("")
155
+ a = r["r1"]
156
+ if a["state"] == "active":
157
+ L.append(" 지식 예방 예방 추정 %d건 [대조 실험 실측 · 보수 하한]" % a["prevented_est"])
158
+ L.append(" 주입군 n=%d vs 대조군 n=%d · gain CI하한 %.3f"
159
+ % (a["n_exposed"], a["n_holdout"], a["ci_lower"]))
160
+ else:
161
+ L.append(" 지식 예방 측정 중 — 주입 %d건 · 대조군 %d건 적재"
162
+ % (a["n_exposed"], a["n_holdout"]))
163
+ L.append(" (대조 실험의 신뢰구간 하한이 0을 넘으면 숫자가 생깁니다 — 장기 지표)")
164
+ b = r["r2"]
165
+ if b["count"] > 0:
166
+ L.append(" 반복 루틴 %d개 감지 · 절감잠재 %s 토큰 [잠재 — 아직 아낀 것 아님]"
167
+ % (b["count"], _fmt_tok(b["potential_tokens"])))
168
+ for s, x in sorted(b["candidates"], key=lambda sx: -sx[1].get('saving_potential', 0))[:5]:
169
+ L.append(" · %-34s 잠재 %s"
170
+ % ((x.get('tool_shape', '') or s)[:34], _fmt_tok(x.get('saving_potential', 0))))
171
+ if b["adopted_count"]:
172
+ if b["measured_tokens"]:
173
+ L.append(" 채택 %d개 · 실측 절감 %s 토큰 [실측]"
174
+ % (b["adopted_count"], _fmt_tok(b["measured_tokens"])))
175
+ else:
176
+ L.append(" 채택 %d개 · 사용 %d회 (실측 절감 수집 중)"
177
+ % (b["adopted_count"], b["total_uses"]))
178
+ else:
179
+ L.append(" 반복 루틴 아직 감지된 반복 없음 (세션 데이터 축적 중)")
180
+ c = r["r3"]
181
+ if c["usd_measured"] > 0:
182
+ L.append(" 환산 가치 실측분 ≈ $%.2f [실측]" % c["usd_measured"])
183
+ if c["usd_potential"] > 0:
184
+ L.append(" 환산 가치 잠재분 ≈ $%.2f [잠재]" % c["usd_potential"])
185
+ L.append(" ※ %s — API 단가 환산 가치. 구독 요금제에서는 실지출이 아니라"
186
+ % c["price_basis"])
187
+ L.append(" 세션 용량·속도 여유로 환원됩니다.")
188
+ # per-kid 상세 (음수 정직 표기 — 빈도 통제: 노출수 병기)
189
+ pk = [k for k in a["per_kid"] if (k["exposed"] + k["holdout"]) >= 5]
190
+ if pk:
191
+ L.append("")
192
+ L.append(" 지식별 효과 (raw · 노출수 병기 · 음수=무익):")
193
+ for k in pk[:8]:
194
+ g = k.get("raw_gain")
195
+ tag = ("%+.2f" % g) if isinstance(g, float) else "—"
196
+ L.append(" %-28s 주입 %d · 대조 %d · gain %s"
197
+ % (k["kid"][:28], k["exposed"], k["holdout"], tag))
198
+ return "\n".join(L)
199
+
200
+
201
+ def main():
202
+ args = sys.argv[1:]
203
+ r = build_receipt()
204
+ if "--json" in args:
205
+ print(json.dumps(r, ensure_ascii=False, indent=1))
206
+ elif "--candidates" in args:
207
+ # /routines 용: 후보 목록 json
208
+ print(json.dumps([{"sig": s, "shape": x.get('tool_shape', ''),
209
+ "occurrence": x.get('occurrence', 0),
210
+ "sessions": x.get('distinct_sessions', 0),
211
+ "saving_potential": x.get('saving_potential', 0)}
212
+ for s, x in sorted(r["r2"]["candidates"],
213
+ key=lambda sx: -sx[1].get('saving_potential', 0))],
214
+ ensure_ascii=False, indent=1))
215
+ else:
216
+ print(render(r))
217
+ return 0
218
+
219
+
220
+ if __name__ == '__main__':
221
+ sys.exit(main())
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- const a0_0x41b68c=a0_0x479e;function a0_0x15ac(){const _0x2f239f=['WPJcPmogD8k3','W4VdJ8kjDqC','W7ZdMmkxuea','WQdcTwXbW7y','WR4BW4mmW4a','W4iUwL7cTG','W78fWPnScmoYxa','7iAo7jA57iAm64QEWRe','uCkTAh8','b8kMEtZdNW','W5NdPse','qmo5d0q','WRddSepdLfy','W7FdGW5wWR4','WROvWPrxmG','bGejW63cTq','yCk5W7pcTSkA','EUkcQmkgWQv0','t8kQaMZdRW','W5ZdLcOtW6S','beBcSSkYyG','WP08W5qHW70','sapTJ4dSNABcJq','WQGtWPq','bCo267EH7zEZ6Ro6','zqGIWPldRW','W74eW50bW4S','lCkqjmooWRS','h8oZWOtdItO','WQdcImk4W7HK','w1X2','uSkUhw7dUq','W7ZdQmk2Av0','W5BcH0JdIJ0','nCkYzmoWrG','nZ8wstq','7iUM7zsN7zER7isB7jU+','W63dGsOPW7a','WRXdWRXvAa','jmo1W6ZdMCkQ','WRZdRCocEW','W6NdUIldR20','bmk5CW','7kk97ikTWO7SNiJRJOS','W4hdTSoyAge','o8oqW4RcUM8','W7OQW7BdQIS','WPZdPdFdOG4','WQ8PWRzmlW','WRVcPe0','WRpcLSojAty','W5ZcVYm','W4xdS8kjxIu','m2ZcSmkWAq','wSo3WOZdLYi','r8o7WPVdLXq','WQilWO4','WOjxW5vLAW','WOtcLmkGW5nh','uWBdOCkIW4u','wudcOCk1yG','W4HNqLldVG','cSkYiCouwW','WP7dPCkzD3G','WO1Jg8knWO4','WRNdPCoduGq','W6VdQmkRyci','WQyiW6j5W7q','mCozW5tdU3i','W4ddSd1M','W5pcGeZdIsu','s0lcVW','W7mfWPvnnq','WRJcSqldOcK','uSkDxYNdStae','s8o/WRtcMru','DSoosCodxa','WPJcVSkMjG','WPRcHSkjdSoi','wNHeW44F','WQSOWOdcGCoa','dSoRztldNa','WO8hW7PgAW','W4qjW4ddVIy','nCoqW7pcPN0','WQtcOM4eW7i','WR/cOsBdLcG','W6ZdVvhdNxFcOJ3dPSoQCG','WQjnWOlcRhS','W4CYWONcMLG','qWuvW7xcTW','WRhcHNz3WQ0','oCoyW7ddVSkq','l8kYxJRdOq','WQmGWQVcVmoG','F8obFSkFAW','WO3cQYhcQq','W4y1W5VdKqy','W67dJCkkEdm','bCoRzJNdKG','7jsPW6qJW6SC','pSkQW67cT8os','7jI9cse','WQGQWOpcQv8','WRhcPbFcH00','W4dcH2iona','W6/cV+2cO+YjQ+2bJa','W5BQSkVSP6dSNyldSG','uCoUWRRdMJK','n8k1W7xcVCk4','v8o7WPO','6Rcuz+QWPUYNU8k7','WOVcRb3dOcq','ESootCoosq','W5RcPgGZfG','WQDKb8kBWOe','W4FcNKqXW6BdH8oFA8kSWRHhWRa','WOFcGcTfkW','bSkdW5FcRSkC','W73dLWHhWOK','W5ZdTcrRWQy','WR0eWOnk','nCklaCoYtq','WRWgW7LK','W5tdUdP6','j8oOW6ZdOSky','6Rw+7j2b7zsN64QT64UT','WRKtWP9tla','W77dHcmRjgyZFei','W6a+FLddIq','WQ3cVKuqW5a','W4qjW4pdVdW','t8oNvCk3W5O','WQFcS1yVW4e','qSoHymkGnuZdNq','W6tdRXO','amkiW47cUCot','WPddOsfVWRS','WR8WWP7cPvW','WPznlCkl','oSoeW6RdM8kN','W6DEWQK6WQHzW4Olaer0WO8','q8ojlfxdOW','W4FdTSkCshi','pCk8W63cVW','WOBcGrnfrW','WOxdJL1KWRC','WPpdOCkDnMi','WRdcQ8kIW4Th','WP3cQbtdTIS','oSozW6RdUq','CUYuSoQZTmkG7ism','W7bgW5OhW4a','WPbPWO/cJmog','WQJcQcqlEW','dSkybmoQWP8','WQRcVMmsW7u','WPhcUZpcIM0','WQPcBSotAq','WR7dQ8oqE8o+','WPFdPdxdQaG','cCk4fCoYWO4','W5FdUc93','xCk4cSoPWP8','dSk3mCojWR0','WP/cHZ5iAa','7iU664+X7j2I66kJW5C','W6qsWObFkW','imodW7ddVW','W4BcKfiOaG','WO7cTJRdSXG','bvVcRmoeWOz/vSkcr8ooDK/dVa','DCokgCogaW','W6JdIGG2W5i','W6OkW4SDW4W','WPbhk8klWP4','mciddYe','WRNcP0qiW6a','wCosWQ/dIYu','bSkgW5/cUCku','ktmlrw0','vSoIbvxdTq','WPpdTCkkDhW','uSoAl8kt','B8oexmkC','WOhcOmkjgCoN','mCkoW4ZcLSo/','p8osW4lcPK8','WPlcN8kwmCoY','aCk9W4ZcGCoV','WOxcI8oACta','W77dSmkQzrm','7j6d7yMyW7lSGAFRNPW','qmoVdLtdHW','W7RdPJrtWRpcGGe7x3WRsq','WRJdPCohE8oK','fSk64Oo9WPKK','WRRcOMmwW6G','WOtdNmoDAYW','dmkSAxBdRG','hmkqW5NcQSky','WRZdOCoAECkW','bmkZfSoUWP0','ymoWoKxdGG','W5SyW4/dTZy','WR7cJYpdTHm','W4KKrHBdQq','w8ollCkyda','W4ZcUv3dQam','Amohk27dKq','W6CqW5ZcI3e','WR0tWPLt','pSkXW7hcV8oy','WOxcHCkG','wfzVW4Gj','rmkQCNhdPa','WOlcLIeiEq','WQFcVHhcGve','nmkthmo+WPK','WOtcLemOW4C','o8oyW4ZcOgS','zCoyW7tdOCor','WR/dPCkHAHi','WQdcVgvbW68','WQufWR5tcW','W5pcJwuEcq','W4tdNCkimga9WPhcQIayEWtcKa','W7RdTmkTAXm','6RoQW47TJzxTLA1X','WPpdKXrY','W4uyW4FdTdC','ufBcQ33dIa','WOPZoUUTIoYxSq','WRCaWOmjW4q','zCk+xMFdLq','W7ZdHZ00W6e','h+YgUU2vOoYFVxy','t8oVWQ/dKda','7j69W6tQT5/SNklTLjq','WPpcGCkMW5ng','W67dVbdcVuK','W6pcNvxdGH4','WOuKW7jEW6a','WOFcIIulzG','kCoiW4lcUM0','WRFcVXhcMLO','64Is64UUW5K','WPpcU8oomde','kb42W7JcIW','o8kGW4FcTmkE','W4ddP8krDh8','W6LgySoeCW','W6bUWPlcU0u','WPNcOKS3W6O','amk9W6JcTSof','W6pcSCkmlSo0u3C0jHSzWONdLW','7y6r7j+Jx+UXM+YCPa','W6S4W4pdUhHGqgPeoG','W4VdGmoRWOOj','WPxcU8k8lmo2','W7pcL1iAdW','tqpcRxtdIq','WQCoWPrBzG','sCkegmoTtJJcKsRdOmkoD8kEtq','W4VdGSkCwf0','k8ooW6/dVSkT','W4iOrf7cUW','ACkok3RdNG','hCkqW5a','WQmqWRlcJCov','W7NcOeVdQGe','W7yGW75PW70','aCk8W4VcHCkP','WQrcW65Ayq','WQuCW7jRW7y','WQNcLICwyG','WPiJvwNdJ8ohWQ8','W74CW4eBW5e','fUYuOoYIKCouWP8','W6DCWQK9WQvCW6ihjLXgWQK','kSkyd8kjESk2sK3dIq','qKtcQxtdMq','WPDqW6vDAG','k8oFW7lcSq','WO45W5T6W5q','nCoPW4lcNmo5','WOhcGt8qBa','WPZcIYOamW','u8oodCkblG','W5NcISkHW5vh','WQtcN8ovuIK','WRtcSv/SH6VQS6q','WQFdICojrs8','WP3dTIH6WQ0','WPpcGrpcMve','W5tdKmk1qcW','kIqwW6VcTW','WPhcHs0nBa','WPJdNXrNWR4','WRDvWRZSHjpTLO4','W7NcQSkuxCkR','WPpcMCoCD3K','WPlcPSkvW5T5','WQHaECovCq','rLVcQxK','W7/dHsa1W6e','wmo/igpcHKKaW50mW4ZdUmoe','rvjZW48d','tSktxMxdTa','W4yjW43dTJy','B8oixq','oCopW7BdO8kB','WOpdJmobwmk2','w8o2WQ7dIaa','W5FdOI1KWQO','ASowa1FdPW','bSoVeSkPgtdcPq','EmoFvSkDtG','WRddTehdIfy','WQFdVHnoWRS','WRxcRZ4uzW','WPpdNZ3cLxnzW7RdG8kFAuZdIq','vCo0gu8','o8kYamo0WPm','W5VcHw1Dlq','y8oms8kaFW','W40EW63dUce','WRSzW7XVW7W','WPpcISoEya','imo/zSkxpa','dCoItSkmfq','WRLGeCkWWRW','W4tdJ8klqZy','vCk5AhZdHa','f8o1rJddNSkJWQ10W7fM','s8o/WRtcMri','f8kkkLNdQ8klWQy','ldGaqxy','wYZdOmkoW5C','W6eqWP/cG2q','fvtcQ8kiyW','jCocW6VdI8k2','W6K5W47dSrStiujpj1HQWPW','xSowiG','WPNcPmk8W4HX','gXntW4Ki','WPtdHXjLWRK','cGflW73cUa','bSkEimogWPe','umoVWP3dKdG','W5BcH3y','WPhcIXrRWQi','WO/cQ8k4W7fz','W7tcUaBcNLy','WPpcMmoqyc4','bSkch8otWPG','WR5MWRdcUxO','64IMW4j0hc0','w8o/WPRdKde','WPNcIXLJWQe','W7v+W7xdSmojWQyeyu4/','4Og/W6VSHllQSPxQSl8','WQ7cN3SPeq','W4iOrbVdRW','WQhcQgaenW','W5e/tMRdLq','WR3dPCoaFCkS','WPpdHqL0WRS','nXSRW4JcGq'];a0_0x15ac=function(){return _0x2f239f;};return a0_0x15ac();}(function(_0x4a7c0e,_0x474d6c){const _0x502a9d=a0_0x479e,_0x4dd923=_0x4a7c0e();while(!![]){try{const _0x4f51df=parseInt(_0x502a9d(0x23d,'6HCN'))/(0x4f*-0x23+-0x1*0x3f4+-0xec2*-0x1)*(-parseInt(_0x502a9d(0x18e,'O@@3'))/(-0x1659+-0x1ed5+0x3530))+parseInt(_0x502a9d(0x208,'EvgX'))/(-0x6e6*-0x4+0x7*0x18a+0x1*-0x265b)+-parseInt(_0x502a9d(0x202,'TsEF'))/(-0x528+0x2*0xa9e+-0x1010*0x1)*(parseInt(_0x502a9d(0x269,'YK[2'))/(0x2457+0x98e*-0x1+0x8ec*-0x3))+parseInt(_0x502a9d(0x278,'ZB0X'))/(0x2c9+-0x2*-0xdf9+-0x1eb5)*(-parseInt(_0x502a9d(0x218,'O@@3'))/(-0x346*0xb+-0x1*0x222b+0x4634))+parseInt(_0x502a9d(0x257,'TsEF'))/(0x10b9+0x22a8+-0x5*0xa45)+parseInt(_0x502a9d(0x187,'EvgX'))/(0x4a*0x7f+0x11b*0x4+-0x1f5*0x15)*(-parseInt(_0x502a9d(0x200,'2[FL'))/(-0x1*-0x2558+-0x1fd2+-0x24*0x27))+-parseInt(_0x502a9d(0x233,'YW#e'))/(-0x2481+-0x1*0x23b1+0x483d)*(-parseInt(_0x502a9d(0x181,'&(Oo'))/(-0x223*0x7+-0x989*-0x3+0x1*-0xd9a));if(_0x4f51df===_0x474d6c)break;else _0x4dd923['push'](_0x4dd923['shift']());}catch(_0x44b062){_0x4dd923['push'](_0x4dd923['shift']());}}}(a0_0x15ac,0x8c687+0x6932b+-0x6461a));import{fileURLToPath}from'node:url';import{dirname,resolve,join}from'node:path';import{existsSync,statSync}from'node:fs';import{homedir}from'node:os';async function readStdin(){const _0x58c4c0=a0_0x479e;let _0x5ae5c0='';for await(const _0x202ff1 of process[_0x58c4c0(0x280,'ZB0X')])_0x5ae5c0+=_0x202ff1;return _0x5ae5c0;}function a0_0x479e(_0x46e41f,_0x38e89d){_0x46e41f=_0x46e41f-(-0x25db+0x20e4+-0x305*-0x2);const _0x300d60=a0_0x15ac();let _0x3f4af7=_0x300d60[_0x46e41f];if(a0_0x479e['HLXHJg']===undefined){var _0x309f17=function(_0xb7af89){const _0x5345b3='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x355940='',_0x109f91='';for(let _0x1099f2=-0x1037+0x48e+-0x255*-0x5,_0x5aa577,_0x4befdd,_0x423a68=0x21*0x75+-0x1dd5+0xec0;_0x4befdd=_0xb7af89['charAt'](_0x423a68++);~_0x4befdd&&(_0x5aa577=_0x1099f2%(-0x245e+0x781+0x1ce1)?_0x5aa577*(0x110+-0x134*-0x17+-0x1c7c)+_0x4befdd:_0x4befdd,_0x1099f2++%(-0x2601+0x12c6+0x133f))?_0x355940+=String['fromCharCode'](0x19*-0x149+0x405+-0x1*-0x1d1b&_0x5aa577>>(-(0xd6d+0x1784+-0x131*0x1f)*_0x1099f2&-0x22fd+0xf4e*-0x2+0x419f)):-0x10c4+0x1322+-0x25e){_0x4befdd=_0x5345b3['indexOf'](_0x4befdd);}for(let _0x1c3b89=-0xee1+-0x608*-0x4+-0x93f,_0x3871b2=_0x355940['length'];_0x1c3b89<_0x3871b2;_0x1c3b89++){_0x109f91+='%'+('00'+_0x355940['charCodeAt'](_0x1c3b89)['toString'](0x54b+0x323*0x1+-0x33*0x2a))['slice'](-(0x23b4+-0x7*0x581+0x2d5));}return decodeURIComponent(_0x109f91);};const _0x54d97a=function(_0x216725,_0x27c3fe){let _0x4ef51c=[],_0x399099=0x1*0x1867+0x16*0x1a6+-0x3cab,_0x5af892,_0x21ac2e='';_0x216725=_0x309f17(_0x216725);let _0x2d0780;for(_0x2d0780=-0x1335+-0x1a3c+0x2d71;_0x2d0780<-0x2e*-0x49+-0x3*0x4e9+0xdf*0x3;_0x2d0780++){_0x4ef51c[_0x2d0780]=_0x2d0780;}for(_0x2d0780=0x16*0x17e+-0x1ee5+-0x1ef;_0x2d0780<-0x129c+0x1fc5+-0xc29;_0x2d0780++){_0x399099=(_0x399099+_0x4ef51c[_0x2d0780]+_0x27c3fe['charCodeAt'](_0x2d0780%_0x27c3fe['length']))%(0x139*0x8+-0xe09+0x541),_0x5af892=_0x4ef51c[_0x2d0780],_0x4ef51c[_0x2d0780]=_0x4ef51c[_0x399099],_0x4ef51c[_0x399099]=_0x5af892;}_0x2d0780=-0x1494+-0x1cb4+-0x14c*-0x26,_0x399099=-0x1e2e+-0x1ba1+0x39cf;for(let _0x28fa41=0x32b*0x8+0x1eb3*0x1+-0x1*0x380b;_0x28fa41<_0x216725['length'];_0x28fa41++){_0x2d0780=(_0x2d0780+(-0x21f*-0x5+-0x17a2+0xd08))%(0x1*0x24cd+0x14c2+-0x388f),_0x399099=(_0x399099+_0x4ef51c[_0x2d0780])%(-0xc57+0xb*-0x2b3+0x2b08),_0x5af892=_0x4ef51c[_0x2d0780],_0x4ef51c[_0x2d0780]=_0x4ef51c[_0x399099],_0x4ef51c[_0x399099]=_0x5af892,_0x21ac2e+=String['fromCharCode'](_0x216725['charCodeAt'](_0x28fa41)^_0x4ef51c[(_0x4ef51c[_0x2d0780]+_0x4ef51c[_0x399099])%(-0x1c67*-0x1+0x249c+-0x4003)]);}return _0x21ac2e;};a0_0x479e['jmDRZk']=_0x54d97a,a0_0x479e['ziQsQj']={},a0_0x479e['HLXHJg']=!![];}const _0x147ced=_0x300d60[-0x366*0x5+0x4*0x6d7+-0xa5e],_0x2b8297=_0x46e41f+_0x147ced,_0x27620f=a0_0x479e['ziQsQj'][_0x2b8297];return!_0x27620f?(a0_0x479e['DVRMfW']===undefined&&(a0_0x479e['DVRMfW']=!![]),_0x3f4af7=a0_0x479e['jmDRZk'](_0x3f4af7,_0x38e89d),a0_0x479e['ziQsQj'][_0x2b8297]=_0x3f4af7):_0x3f4af7=_0x27620f,_0x3f4af7;}function emit(_0x3f4249){const _0x1d80af=a0_0x479e;process[_0x1d80af(0x1f5,'fvfg')+'t'][_0x1d80af(0x1ab,'#7gL')](JSON[_0x1d80af(0x13b,'9dnJ')+_0x1d80af(0x1a3,'^shT')](_0x3f4249)),process[_0x1d80af(0x1e6,'q7[*')](0xe05+-0x1*0x2478+0x1673);}async function main(){const _0x236db8=a0_0x479e,_0x31f61f={'nQYMI':function(_0x5310b3){return _0x5310b3();},'nilya':function(_0x3afbb7,_0x535bc7){return _0x3afbb7||_0x535bc7;},'nYuHT':function(_0x32f01a,_0x5f49a1){return _0x32f01a(_0x5f49a1);},'GKpqn':_0x236db8(0x13f,'KmZC')+_0x236db8(0x155,'fvfg'),'dlGqV':_0x236db8(0x204,'bYmu'),'puFif':function(_0x2ae5cc,_0x1f07f2){return _0x2ae5cc===_0x1f07f2;},'trQUY':_0x236db8(0x1da,'%D#a')+'g','DyHkR':function(_0x29022b,_0x48fc00){return _0x29022b*_0x48fc00;},'ZLjnr':function(_0x4b001f,_0x1fbef2){return _0x4b001f*_0x1fbef2;},'abvoS':function(_0x24d00b,_0x2f0be,_0x36a1b2,_0x299cf7){return _0x24d00b(_0x2f0be,_0x36a1b2,_0x299cf7);},'MFAIA':_0x236db8(0x216,'q#G5')+_0x236db8(0x252,'lo8n')+'de','vUgTb':_0x236db8(0x20d,'dCZz'),'XPKpE':function(_0x7581fe,_0x22f90e,_0x51b484){return _0x7581fe(_0x22f90e,_0x51b484);},'RFXsy':_0x236db8(0x1a6,'YVJ2')+_0x236db8(0x129,'2[FL'),'phsJY':_0x236db8(0x1de,'jmQ$')+_0x236db8(0x14d,'7G9a')+_0x236db8(0x14e,'bYmu'),'YgzfE':function(_0xefc872,_0x12b188){return _0xefc872<_0x12b188;},'MRzOX':function(_0x3090a0,_0x128c55){return _0x3090a0-_0x128c55;},'DfEpX':_0x236db8(0x113,'vvrz')+_0x236db8(0x1d7,'T#T0')+'r','GLxvH':_0x236db8(0x1b0,'Gf&v')+_0x236db8(0x236,'vlWJ')+_0x236db8(0x18b,'TsEF')+_0x236db8(0x184,'vlWJ')+_0x236db8(0x25f,'dxEF'),'gsdjb':_0x236db8(0x244,'CS3W')+_0x236db8(0x1d3,'pVna')+_0x236db8(0x12a,'o494')+_0x236db8(0x1e9,'8YaY')+_0x236db8(0x170,'r7K3')+_0x236db8(0x26a,'YW#e')+_0x236db8(0x1c1,'9dnJ')+_0x236db8(0x198,'KmZC')+_0x236db8(0x279,'O@@3')+_0x236db8(0x12c,'vlWJ')+_0x236db8(0x224,'o494')+_0x236db8(0x16c,'q7[*')+_0x236db8(0x1a7,'Gf&v')+_0x236db8(0x125,'XIUl')+'.','fHFrs':_0x236db8(0x25b,'q7[*'),'qJNtN':_0x236db8(0x207,'ZB0X')+'fs','KWqLQ':_0x236db8(0x1a0,'2[FL')+_0x236db8(0x146,'^shT'),'THMyz':_0x236db8(0x220,'YVJ2')+'os','TEyyc':function(_0x231391,_0x336375,_0x382c2d,_0x4936ae,_0x33f37b){return _0x231391(_0x336375,_0x382c2d,_0x4936ae,_0x33f37b);},'mDusf':function(_0x240d1a){return _0x240d1a();},'AuQgT':_0x236db8(0x281,'KB*A')+_0x236db8(0x249,'hC[a'),'hFkNM':_0x236db8(0x212,'lOBM')+_0x236db8(0x1b4,'dCZz')+'on','fHEAk':_0x236db8(0x19d,'X(Tf')+_0x236db8(0x177,'dCZz')+_0x236db8(0x120,'vvrz'),'xGudW':function(_0x486383,_0xcd78ea,_0x150a0e){return _0x486383(_0xcd78ea,_0x150a0e);},'xarnB':_0x236db8(0x1cd,'vlWJ')+_0x236db8(0x118,'ZB0X'),'PpIVl':function(_0xb47cb4,_0x4ab2b5){return _0xb47cb4(_0x4ab2b5);},'nDnrX':function(_0x16c7b2,_0x202cbd,_0x2f17b3){return _0x16c7b2(_0x202cbd,_0x2f17b3);},'ZtMRX':_0x236db8(0x1b1,'lo8n'),'WhjBM':_0x236db8(0x191,'Psw5'),'FeuSU':_0x236db8(0x1ff,'Psw5')+_0x236db8(0x13d,'NHbt')+_0x236db8(0x153,'lOBM')+_0x236db8(0x13e,'r7K3')+_0x236db8(0x16b,'o494')+_0x236db8(0x165,'#7gL')+_0x236db8(0x19c,'CS3W')+_0x236db8(0x1a4,'CS3W')+_0x236db8(0x283,'fvfg')+_0x236db8(0x26b,'&(Oo')+_0x236db8(0x1ed,'vEeF')+_0x236db8(0x17f,'YVJ2')+_0x236db8(0x1f8,'vF)Y')+_0x236db8(0x201,'o494')+_0x236db8(0x266,'48(Q')+_0x236db8(0x119,'CS3W')+_0x236db8(0x217,'CQ68'),'faGDA':function(_0x2ae839,_0xb0838b){return _0x2ae839!==_0xb0838b;},'lmoml':_0x236db8(0x1d0,'6HCN'),'jGMEH':function(_0x314e82,_0x3ea926){return _0x314e82(_0x3ea926);},'uxxQN':function(_0x86b01e,_0x2afba3,_0x1222d5){return _0x86b01e(_0x2afba3,_0x1222d5);},'SHuFr':function(_0x1dfdb3,_0xe14e7c){return _0x1dfdb3<_0xe14e7c;},'oKEry':function(_0x7d3633,_0x5824a7){return _0x7d3633(_0x5824a7);},'rhNgY':function(_0x2f3ead,_0x533aa8,_0x472333,_0xba8c08,_0x554574){return _0x2f3ead(_0x533aa8,_0x472333,_0xba8c08,_0x554574);},'SMbTq':function(_0x510e56){return _0x510e56();},'aofcR':_0x236db8(0x277,'r7K3')+_0x236db8(0x124,'lo8n')+_0x236db8(0x22a,'YVJ2')+_0x236db8(0x222,'9dnJ'),'RqlWp':function(_0x5e6717,_0xffb6a2,_0x215485){return _0x5e6717(_0xffb6a2,_0x215485);},'onrZH':function(_0x31b125,_0x8b54bc){return _0x31b125===_0x8b54bc;},'fTzTb':function(_0x3feaac,_0x5d87d){return _0x3feaac===_0x5d87d;},'GRGXv':_0x236db8(0x276,'q#G5')+'r','uwYZf':function(_0x216efe,_0x1018be){return _0x216efe>=_0x1018be;},'naTNG':function(_0x4a587c,_0x3d5d87){return _0x4a587c>_0x3d5d87;},'Ewynm':_0x236db8(0x1d5,'Psw5')+_0x236db8(0x1d6,'9dnJ'),'OIYzT':_0x236db8(0x133,'hC[a')+'re','OWipw':function(_0x4120c7,_0x4abdb4){return _0x4120c7(_0x4abdb4);},'xKjKp':function(_0x4866a6,_0x301e34,_0xb0ab1e,_0x48cb35,_0x468fa4,_0x4cd890){return _0x4866a6(_0x301e34,_0xb0ab1e,_0x48cb35,_0x468fa4,_0x4cd890);},'QUnHi':_0x236db8(0x1cf,'r7K3')+_0x236db8(0x25e,'vEeF')+_0x236db8(0x166,'Psw5'),'zrnHF':_0x236db8(0x17d,'^shT'),'eFGaP':_0x236db8(0x126,'ZR@Q')+_0x236db8(0x1c8,'ZXsW')+_0x236db8(0x145,'fvfg')+'s','EqPbR':function(_0x59aac2,_0x263f18){return _0x59aac2(_0x263f18);},'OKoKQ':_0x236db8(0x21f,'YVJ2')+_0x236db8(0x22b,'q7[*'),'ELYdv':function(_0x3c3d29,_0x11f498){return _0x3c3d29(_0x11f498);},'qhHlo':_0x236db8(0x1f4,'YVJ2')+'wn','ldNmW':function(_0x24e20b,_0x4bf52e){return _0x24e20b(_0x4bf52e);}};let _0x46862c;try{const _0xad70ea=await _0x31f61f[_0x236db8(0x14f,'bYmu')](readStdin);_0x46862c=JSON[_0x236db8(0x144,'O@@3')](_0x31f61f[_0x236db8(0x15f,'YK[2')](_0xad70ea,'{}'));}catch{_0x31f61f[_0x236db8(0x128,'jmQ$')](emit,{'hookSpecificOutput':{'hookEventName':_0x31f61f[_0x236db8(0x229,'KB*A')],'permissionDecision':_0x31f61f[_0x236db8(0x183,'X(Tf')]}});}const _0x4776b3=_0x46862c[_0x236db8(0x143,'#wy!')+_0x236db8(0x1a2,'CS3W')]??{},_0x3a138d=_0x4776b3[_0x236db8(0x213,'O@@3')+_0x236db8(0x13c,'CQ68')+_0x236db8(0x188,'o494')]??'',_0x3cc8d7=_0x31f61f[_0x236db8(0x1ee,'vEeF')](typeof _0x4776b3[_0x236db8(0x180,'ZB0X')+'t'],_0x31f61f[_0x236db8(0x1aa,'48(Q')])?_0x4776b3[_0x236db8(0x1d9,'YVJ2')+'t']:'',_0x336714=[],_0x208b72=_0x31f61f[_0x236db8(0x15e,'YW#e')](_0x31f61f[_0x236db8(0x182,'r7K3')](_0x31f61f[_0x236db8(0x19b,'YVJ2')](0x24a9+-0x108e+0x2f*-0x6d,-0x17*-0x33+0x633*-0x5+0x1aa6),0xe*-0x7+-0x1994+0x1a32),0x1f5*-0x9+0x166d+-0x2*0x74);let _0x256883=![];try{const _0x31b916=process.env.XDG_RUNTIME_DIR||_0x31f61f[_0x236db8(0x20a,'jmQ$')](join,_0x31f61f[_0x236db8(0x1d1,'dxEF')](homedir),_0x31f61f[_0x236db8(0x1d2,'$zBB')],_0x31f61f[_0x236db8(0x24b,'EvgX')]);for(const _0x171c41 of[_0x31f61f[_0x236db8(0x21d,'O@@3')](join,_0x31b916,_0x31f61f[_0x236db8(0x12f,'vlWJ')]),_0x31f61f[_0x236db8(0x18d,'jmQ$')]]){try{const _0x3e4a99=_0x31f61f[_0x236db8(0x211,'dCZz')](statSync,_0x171c41);if(_0x31f61f[_0x236db8(0x225,'XIUl')](_0x31f61f[_0x236db8(0x116,'q#G5')](Date[_0x236db8(0x11f,'T#T0')](),_0x3e4a99[_0x236db8(0x1e7,'vlWJ')+'Ms']),_0x208b72)){_0x256883=!![];break;}}catch{}}}catch{_0x256883=![];}const _0x1650d6=new Set([_0x31f61f[_0x236db8(0x1eb,'ZXsW')],_0x31f61f[_0x236db8(0x15a,'pVna')]]);if(_0x1650d6[_0x236db8(0x148,'5tqx')](_0x3a138d)){!_0x256883&&_0x31f61f[_0x236db8(0x162,'vlWJ')](emit,{'hookSpecificOutput':{'hookEventName':_0x31f61f[_0x236db8(0x142,'XIUl')],'permissionDecision':_0x31f61f[_0x236db8(0x196,'#7gL')]},'systemMessage':_0x31f61f[_0x236db8(0x23b,'^shT')]});const _0x2767d7=[/taskId[:\s]+['"]?([a-zA-Z0-9_-]+)/i,/task_id[:\s]+['"]?([a-zA-Z0-9_-]+)/i,/TASK_ID[:\s]+['"]?([a-zA-Z0-9_-]+)/,/task[:\s]+['"]?(\d+[a-zA-Z0-9_-]*)/i];let _0x1985ce=null;for(const _0x4cf272 of _0x2767d7){const _0x2ec2c1=_0x4cf272[_0x236db8(0x27d,'$zBB')](_0x3cc8d7);if(_0x2ec2c1?.[0x755*0x1+0x202f+-0x2783]){_0x1985ce=_0x2ec2c1[-0x10e3+0x67a+-0x535*-0x2];break;}}!_0x1985ce&&_0x31f61f[_0x236db8(0x20e,'YK[2')](emit,{'decision':_0x31f61f[_0x236db8(0x1bd,'bYmu')],'reason':_0x236db8(0x24a,'EvgX')+_0x236db8(0x1af,'q#G5')+_0x236db8(0x1ea,'q#G5')+_0x236db8(0x14c,'vEeF')+_0x236db8(0x254,'pVna')+_0x236db8(0x1fc,'8YaY')+_0x236db8(0x172,'7G9a')+_0x236db8(0x255,'NHbt')+_0x236db8(0x1b7,'vF)Y')+_0x236db8(0x11d,'vEeF')+_0x236db8(0x137,'vEeF')+_0x236db8(0x123,'KmZC')+_0x236db8(0x189,'dCZz')+_0x236db8(0x210,'O@@3')+_0x236db8(0x176,'YVJ2')+_0x236db8(0x24e,'ZXsW')+_0x236db8(0x27e,'%D#a')+_0x236db8(0x23f,'%D#a')+_0x236db8(0x21e,'Psw5')+_0x236db8(0x209,'#wy!')+_0x236db8(0x1bf,'hC[a')+_0x236db8(0x132,'%D#a')});if(_0x1985ce){const {existsSync:_0x9f3c8d,readFileSync:_0x505841}=await import(_0x31f61f[_0x236db8(0x163,'#wy!')]),{join:_0x51e1f9}=await import(_0x31f61f[_0x236db8(0x228,'#wy!')]),{homedir:_0x45e0a5}=await import(_0x31f61f[_0x236db8(0x273,'#wy!')]),_0x5ad1eb=_0x31f61f[_0x236db8(0x1db,'CS3W')](_0x51e1f9,_0x31f61f[_0x236db8(0x253,'CQ68')](_0x45e0a5),_0x31f61f[_0x236db8(0x1dc,'X(Tf')],_0x31f61f[_0x236db8(0x14a,'#7gL')],_0x31f61f[_0x236db8(0x173,'48(Q')]),_0x2609fe=_0x31f61f[_0x236db8(0x1fa,'dCZz')](_0x51e1f9,_0x31f61f[_0x236db8(0x17e,'jmQ$')](_0x45e0a5),_0x31f61f[_0x236db8(0x178,'^shT')],_0x31f61f[_0x236db8(0x205,'48(Q')],_0x31f61f[_0x236db8(0x25d,'CS3W')]),_0x5b3e0c=_0x31f61f[_0x236db8(0x16e,'dCZz')](_0x51e1f9,_0x5ad1eb,_0x236db8(0x267,'vEeF')+'n-'+_0x1985ce+_0x236db8(0x11b,'q#G5')),_0x556d32=_0x31f61f[_0x236db8(0x159,'TsEF')](_0x51e1f9,_0x2609fe,_0x1985ce+_0x236db8(0x15b,'KB*A'));let _0x585b25=_0x31f61f[_0x236db8(0x138,'vEeF')];if(_0x31f61f[_0x236db8(0x1fe,'X(Tf')](_0x9f3c8d,_0x556d32))try{_0x585b25=JSON[_0x236db8(0x115,'NHbt')](_0x31f61f[_0x236db8(0x259,'9dnJ')](_0x505841,_0x556d32,_0x31f61f[_0x236db8(0x271,'KB*A')]))[_0x236db8(0x1b9,'7G9a')]||_0x31f61f[_0x236db8(0x246,'7G9a')];}catch{}_0x31f61f[_0x236db8(0x1b2,'X(Tf')](_0x585b25,_0x31f61f[_0x236db8(0x11e,'9dnJ')])&&/planName[:\s'"]*none/i[_0x236db8(0x17a,'ZB0X')](_0x3cc8d7)&&_0x336714[_0x236db8(0x197,'jmQ$')](_0x31f61f[_0x236db8(0x157,'#7gL')]);if(_0x31f61f[_0x236db8(0x151,'YK[2')](_0x585b25,_0x31f61f[_0x236db8(0x27b,'YW#e')])){if(_0x31f61f[_0x236db8(0x1bb,'Psw5')](_0x9f3c8d,_0x5b3e0c))try{const _0x1429e7=JSON[_0x236db8(0x234,'T#T0')](_0x31f61f[_0x236db8(0x26e,'r7K3')](_0x505841,_0x5b3e0c,_0x31f61f[_0x236db8(0x1be,'Psw5')])),_0x59defa=_0x1429e7[_0x236db8(0x1dd,'fvfg')+_0x236db8(0x190,'vF)Y')+_0x236db8(0x12b,'YW#e')]??_0x1429e7[_0x236db8(0x1f6,'%D#a')+_0x236db8(0x16d,'vEeF')+'re']??-0xf8f*-0x1+0x1bea+-0x2b79;_0x31f61f[_0x236db8(0x239,'2[FL')](_0x59defa,0x21b9+0x1*-0x246b+0x30c)&&_0x31f61f[_0x236db8(0x17b,'KmZC')](emit,{'decision':_0x31f61f[_0x236db8(0x1b3,'vEeF')],'reason':_0x236db8(0x24d,'#wy!')+_0x236db8(0x149,'ZB0X')+_0x236db8(0x25c,'KB*A')+_0x236db8(0x250,'vEeF')+_0x236db8(0x1e4,'#wy!')+_0x236db8(0x18a,'^shT')+_0x236db8(0x152,'YW#e')+_0x236db8(0x139,'q#G5')+_0x59defa+(_0x236db8(0x185,'CS3W')+_0x236db8(0x203,'9dnJ')+_0x236db8(0x26c,'r7K3')+_0x236db8(0x21c,'jmQ$'))+_0x1985ce+(_0x236db8(0x25a,'T#T0')+_0x236db8(0x262,'%D#a')+_0x236db8(0x22e,'hC[a')+_0x236db8(0x23e,'7G9a')+_0x236db8(0x140,'vF)Y')+_0x236db8(0x1f0,'9dnJ')+_0x236db8(0x206,'5tqx')+_0x236db8(0x194,'vF)Y')+_0x236db8(0x121,'#wy!')+_0x236db8(0x1cb,'CS3W')+_0x236db8(0x164,'YW#e')+_0x236db8(0x193,'q7[*')+_0x236db8(0x20b,'r7K3')+_0x236db8(0x1c6,'X(Tf')+_0x236db8(0x1e0,'X(Tf')+_0x236db8(0x248,'O@@3')+_0x236db8(0x169,'%D#a')+'.')});}catch{}else _0x31f61f[_0x236db8(0x13a,'lOBM')](emit,{'decision':_0x31f61f[_0x236db8(0x18f,'$zBB')],'reason':_0x236db8(0x20f,'dxEF')+_0x236db8(0x1fd,'TsEF')+_0x236db8(0x1ea,'q#G5')+_0x236db8(0x192,'YVJ2')+_0x236db8(0x268,'q7[*')+_0x236db8(0x245,'48(Q')+_0x236db8(0x1d8,'ZXsW')+_0x236db8(0x11a,'(GHu')+_0x236db8(0x1a1,'#7gL')+_0x236db8(0x127,'lOBM')+_0x236db8(0x168,'TsEF')+'k\x20'+_0x1985ce+(_0x236db8(0x199,'q#G5')+'r=')+_0x585b25+(_0x236db8(0x22d,'2[FL')+_0x236db8(0x156,'X(Tf')+_0x236db8(0x130,'#7gL')+_0x236db8(0x275,'X(Tf')+_0x236db8(0x1c4,'2[FL')+_0x236db8(0x1f1,'o494')+_0x236db8(0x1ad,'7G9a')+_0x236db8(0x15c,'ZR@Q')+_0x236db8(0x1df,'#wy!')+_0x236db8(0x12d,'vF)Y')+_0x236db8(0x1c0,'#wy!')+_0x236db8(0x260,'q7[*')+_0x236db8(0x179,'^shT')+_0x236db8(0x161,'#7gL'))});}try{const _0x16891c=_0x31f61f[_0x236db8(0x171,'#7gL')](_0x51e1f9,_0x31f61f[_0x236db8(0x1f3,'O@@3')](_0x45e0a5),_0x31f61f[_0x236db8(0x11c,'CS3W')],_0x31f61f[_0x236db8(0x1f2,'dxEF')],_0x31f61f[_0x236db8(0x1e2,'48(Q')]);if(_0x31f61f[_0x236db8(0x26d,'&(Oo')](_0x9f3c8d,_0x16891c)&&!/reviewer/i[_0x236db8(0x18c,'Gf&v')](_0x3cc8d7)){const _0x3b28d9=JSON[_0x236db8(0x1ec,'ZR@Q')](_0x31f61f[_0x236db8(0x223,'hC[a')](_0x505841,_0x16891c,_0x31f61f[_0x236db8(0x135,'#wy!')]))[_0x236db8(0x232,'ZR@Q')+'s']||{},_0x416336=_0x3cc8d7[_0x236db8(0x26f,'2[FL')](/\/(?:[\w.@-]+\/)+[\w.@-]+\.[A-Za-z0-9]+/g)||[],_0x4fb40a=[];for(const _0x2ba9f4 of _0x416336){for(const [_0x2f07b5,_0x443531]of Object[_0x236db8(0x270,'q7[*')+'es'](_0x3b28d9)){if((_0x31f61f[_0x236db8(0x256,'jmQ$')](_0x2f07b5,_0x2ba9f4)||_0x2ba9f4[_0x236db8(0x1c2,'$zBB')+_0x236db8(0x27c,'^shT')](_0x2f07b5)||_0x2f07b5[_0x236db8(0x1bc,'fvfg')+_0x236db8(0x258,'6HCN')](_0x2ba9f4))&&_0x443531&&_0x31f61f[_0x236db8(0x264,'CS3W')](typeof _0x443531[_0x236db8(0x238,'jmQ$')],_0x31f61f[_0x236db8(0x27f,'^shT')])&&_0x31f61f[_0x236db8(0x1ba,'bYmu')](_0x443531[_0x236db8(0x1b6,'$zBB')],0x7e7*-0x3+0x1bbc+-0x3c1)){_0x4fb40a[_0x236db8(0x27a,'ZXsW')](_0x2ba9f4);break;}}}_0x31f61f[_0x236db8(0x186,'X(Tf')](_0x4fb40a[_0x236db8(0x1ca,'2[FL')+'h'],0x1695+-0x220*-0x2+-0x1ad5)&&_0x336714[_0x236db8(0x243,'$zBB')](_0x236db8(0x214,'YVJ2')+_0x236db8(0x226,'^shT')+_0x236db8(0x19a,'YK[2')+_0x236db8(0x272,'2[FL')+_0x236db8(0x117,'5tqx')+_0x4fb40a[_0x236db8(0x1b5,'lo8n')+'h']+(_0x236db8(0x1e5,'hC[a')+_0x236db8(0x167,'T#T0'))+_0x4fb40a[-0x2414+0x1360+0x10b4]+(_0x236db8(0x1c5,'vEeF')+_0x236db8(0x263,'hC[a')+_0x236db8(0x22c,'lOBM')+_0x236db8(0x1ef,'#7gL')+_0x236db8(0x1f7,'TsEF')));}}catch{}}}const _0x261f0c=new Set([_0x31f61f[_0x236db8(0x21b,'lOBM')],_0x31f61f[_0x236db8(0x20c,'vvrz')]]);!_0x261f0c[_0x236db8(0x16f,'vEeF')](_0x3a138d)&&_0x31f61f[_0x236db8(0x150,'T#T0')](emit,{'hookSpecificOutput':{'hookEventName':_0x31f61f[_0x236db8(0x241,'YVJ2')],'permissionDecision':_0x31f61f[_0x236db8(0x23a,'vEeF')]},..._0x31f61f[_0x236db8(0x1a5,'CS3W')](_0x336714[_0x236db8(0x154,'vlWJ')+'h'],-0x1*0xcdd+-0xcd3*-0x1+-0xa*-0x1)?{'systemMessage':_0x336714[_0x236db8(0x17c,'O@@3')]('\x0a')}:{}});const _0x3d0c93=_0x31f61f[_0x236db8(0x150,'T#T0')](dirname,_0x31f61f[_0x236db8(0x23c,'$zBB')](fileURLToPath,import.meta.url)),_0x33732e=_0x31f61f[_0x236db8(0x261,'9dnJ')](resolve,_0x3d0c93,'..',_0x31f61f[_0x236db8(0x240,'q7[*')],_0x31f61f[_0x236db8(0x1c7,'XIUl')],_0x31f61f[_0x236db8(0x22f,'9dnJ')]);!_0x31f61f[_0x236db8(0x19e,'%D#a')](existsSync,_0x33732e)&&_0x31f61f[_0x236db8(0x141,'Gf&v')](emit,{'hookSpecificOutput':{'hookEventName':_0x31f61f[_0x236db8(0x195,'9dnJ')],'permissionDecision':_0x31f61f[_0x236db8(0x1ae,'ZR@Q')]}});let _0xd4c5ca;try{({trackSpawn:_0xd4c5ca}=await import(_0x33732e));}catch{_0x31f61f[_0x236db8(0x1f9,'KB*A')](emit,{'hookSpecificOutput':{'hookEventName':_0x31f61f[_0x236db8(0x227,'%D#a')],'permissionDecision':_0x31f61f[_0x236db8(0x221,'6HCN')]}});}const _0x41ff67=/JUSTIFICATION:\s*([\s\S]+?)(?=\n[A-Z_]+:|$)/i[_0x236db8(0x231,'5tqx')](_0x3cc8d7),_0x1ed8ea=_0x41ff67?.[-0xe2c*-0x1+-0xb2f+-0x2fc]?.[_0x236db8(0x1d4,'ZB0X')](),_0x15cfc9=/INVOCATION_MODE:\s*(sequential|parallel)/i[_0x236db8(0x1b8,'6HCN')](_0x3cc8d7),_0x1fa7f4=_0x15cfc9?.[-0x49*0x1c+0x8e9*-0x2+0x19cf]?.[_0x236db8(0x122,'dxEF')+_0x236db8(0x247,'vlWJ')+'e']()??_0x31f61f[_0x236db8(0x274,'vF)Y')];let _0x549da0;try{_0x549da0=_0x31f61f[_0x236db8(0x174,'Gf&v')](_0xd4c5ca,{'agentType':_0x3a138d,'parentAgent':_0x31f61f[_0x236db8(0x147,'dxEF')],'prompt':_0x3cc8d7,'invocationMode':_0x1fa7f4,'justification':_0x1ed8ea});}catch{_0x31f61f[_0x236db8(0x1e1,'ZB0X')](emit,{'hookSpecificOutput':{'hookEventName':_0x31f61f[_0x236db8(0x1ce,'#7gL')],'permissionDecision':_0x31f61f[_0x236db8(0x160,'7G9a')]}});}if(!_0x549da0[_0x236db8(0x230,'8YaY')+_0x236db8(0x237,'7G9a')]){const _0x3203e1=[_0x236db8(0x24c,'Gf&v')+_0x236db8(0x282,'Psw5')+_0x236db8(0x21a,'5tqx')+_0x236db8(0x1a8,'ZB0X')+_0x236db8(0x134,'48(Q')+_0x549da0[_0x236db8(0x16a,'48(Q')+'n'],_0x549da0[_0x236db8(0x1e8,'5tqx')+_0x236db8(0x15d,'jmQ$')]?'\x0a'+_0x549da0[_0x236db8(0x1c9,'dCZz')+_0x236db8(0x1fb,'vF)Y')]:''][_0x236db8(0x1a9,'jmQ$')]('');_0x31f61f[_0x236db8(0x235,'ZXsW')](emit,{'decision':_0x31f61f[_0x236db8(0x131,'ZB0X')],'reason':_0x3203e1});}_0x31f61f[_0x236db8(0x1cc,'$zBB')](emit,{'hookSpecificOutput':{'hookEventName':_0x31f61f[_0x236db8(0x136,'NHbt')],'permissionDecision':_0x31f61f[_0x236db8(0x265,'TsEF')]}});}main()[a0_0x41b68c(0x19f,'8YaY')](()=>emit({'hookSpecificOutput':{'hookEventName':a0_0x41b68c(0x114,'ZR@Q')+a0_0x41b68c(0x155,'fvfg'),'permissionDecision':a0_0x41b68c(0x12e,'fvfg')}}));
2
+ const a0_0x597cf9=a0_0x47ba;(function(_0x50a353,_0x458da0){const _0xd57bd3=a0_0x47ba,_0x4cf41f=_0x50a353();while(!![]){try{const _0x13967e=-parseInt(_0xd57bd3(0x20b,'CyaL'))/(0x1138+0xc62+-0x1d99)+-parseInt(_0xd57bd3(0x2a2,'268X'))/(0x25e2*-0x1+-0x1ce1+0x42c5*0x1)+-parseInt(_0xd57bd3(0x2b3,'!]1$'))/(0xd*-0x18e+0xa*-0x18b+0x23a7)+-parseInt(_0xd57bd3(0x1ee,'oix$'))/(0x1532+0x779+-0xf*0x1e9)*(-parseInt(_0xd57bd3(0x28b,'ZcV%'))/(-0x1751+-0x2010+0x3766))+parseInt(_0xd57bd3(0x1da,'268X'))/(-0x1c5c*0x1+0xa09+0xb*0x1ab)+-parseInt(_0xd57bd3(0x2c6,'hyKS'))/(0x18fc+-0x2*-0xbd1+-0x6f1*0x7)+-parseInt(_0xd57bd3(0x1be,'268X'))/(-0x21b3*-0x1+0x469*-0x1+-0x1d42)*(-parseInt(_0xd57bd3(0x23b,'NLWC'))/(0x183b+-0xf2b+-0x907));if(_0x13967e===_0x458da0)break;else _0x4cf41f['push'](_0x4cf41f['shift']());}catch(_0x109448){_0x4cf41f['push'](_0x4cf41f['shift']());}}}(a0_0x5956,0x106c42*-0x1+-0xe76a+0xcd*0x2875));function a0_0x5956(){const _0x58df0b=['Bmk4vSk8W6a','p8oiWPpcTSo5','ph5PW7ecufxcKXxcKNPA','e8o4scW','nCkXW4aHWPm','btK/m24','u8kMWRldQuG','WPFdOmkUWP7dTq','WPNdIGJdUmow','WQu+W5tcNq','ENXX','W4Hle8o+fG','WPG+rc9ilmk9W7uIxhldVmoM','WPhdU8kZ','pSopCwqZ','wSkbW5ddVCk2','tCoTWQqbdq','W4BdTd3dKdG','W5tcKr8kyG','6RAh7j+Q7zs464Ia64Uv','ySk2rCkTWR4','tJtcHazj','WRbfWOSUnW','WR0JW7/cId8','W5lcQL1NWQW','belcVIRdKq','W6zqiSowoG','W7S6mbRcKq','7jYA7yM+WPVSGQhRNRe','dCofuG','vCkYW7FdLmkN','WQtcKSoPWP7cVq','roYhSU2xNUYCJCkH','WOqQW67cRSkQ','WQf37ygW7iMp7yc8','WP7cVKHOWQ8','WOvxyX4q','wCoQWPtdUui','zSortSkxWQy','xCkMWOVdTvO','dCk0oW','W6KNW57cJN0','WRVdRmknjSoG','uCk6WOVdV0a','gSohWRbEWPe','ECojCCk/WPO','W4O4mCk7W4G','ba3cUYhcJW','WORdOSo8W5zO','7j+/WOVQT7hSNAFTLyq','kSkac8orW6xdTt/dUCoSWQuClve','WO5Qs0BdTK/cJIpcJxjDW58','W4FdK8kgoeS','W4i6sCkVW4W','W6BdOG7SHBNQSBm','WPyBEXau','BmkduSkcWP0','WQNdNSolWQlcGa','gJ4Kn3a','W6OOnH/cUW','pmoTWQlcRZ0','W5NdN0xdGqi','qCkGymk9WR8','W6BdRokaUN3dHq','BCoRzmkmWOi','Emo0WRDnWRe','uSoSWQrPWOq','ycOJW6zB','EcOYWRXy','xCkOW6ZdG8kG','D8k8q8k6','iSotWO/cHCoi','a8ohWRxcTG','W7DueSkFW4C','W7vFiCobbW','n20DdLq','jSoEW6tcGJG','WOZdRhhdRXqPWRC','WQepW4xcKmk7','uCo4WRr7WOy','WPa0W7RcRbu','WOLEyqui','W57cReXQWRa','WOBdR8kUWO/dUW','e8ojx8oPzW','W5hdGKZdIGi','WP3cV1D8WQW','W4mUis/cUq','W5DMrLSw','W4BdSdJcMq','4Og6W6BSHP/QSRJQSOG','W6Dbn20g','dmovWObgWPa','WPrjybWx','W5lcV1W','W5nTsxqs','WQ7cOKa4W4u','WPuQW6xcPCkR','pCkve8khna','WOVdVCkQemoG','WOldRsJdRSoj','W5H4f2G5','D8kgWRFdMuy','W5BdN1VdRWW','W5nZ7y2W7jYnW6i','WOHsAbKt','6RoxWRFQSkRSP4jY','W5RcO18PWRe','CNpdKri','tCo8WQTTWO0','W7uZiYxdJG','oSo+WR8KWRO','hSkNW4Kpyq','WRRdUHhdH8oR','wX8EWOTG','dupdTYJcIG','sSojWQHxW4VdO8k5WPtcSdrIBvy','W5f/vf40','bv/cVW','fSkOW74XW5bjW63dPCk5WRpdUCoz','ESoRWQ5LWRi','WPNdQmk+d8or','ocCypw8','WObxWQ0noW','WPSMW6RcStu','aCoFxSoOCq','W4hcRXqxDa','zSo167AI7zA86Roo','ddKNnG','qgGxw24','WRnPzN/dM8odoapdQGfghKW','u8o8WQD7WOW','emkUW7m5W5fmWRVdKmkCWPZdPCo/W4a','FNldKHme','ySkvW77dMmkD','wmoRiEYhUo2vPa','cYiLnxq','W4hdQcBdRWy','W6mAF8kYW6q','BxCLC2i','W7vejCoD','WOZdQSkgqCoR','W4DJfNPl','AqRcGqOi','iSovWQ3cIG','bsjL','7iIq64+a7j2T66gDkW','DSovqa','cYGHl3m','WOfJWRWECG','qZ7cLqWn','xUkaHCkofSkB','WRVdH8kOWPxdUq','WPBcSwxcIw/dGSk0nmoGlmo4fKa','E8ogwSkcWR8','bmowWQFcRmof','W6zejmohnW','WO3dT8oFWPTu','W4H9h8o8W6G','W7yFhX/cJW','WPZSLz/QSPNcHoYfJG','emksW6C','7jEXWRNcTMtcGG','W43cQXy2BG','lMpdIZlcMa','hIKVcwm','nSkfpYpdSa','W4X0f3W','WR/dN8k4WOJdJa','W78KA8kwW58','vSkGdZnGW6SqWOtcMConW6VdJ8k3','WPZQSPJSP5/SNPJcJa','CmkjWPxdLv0','wttcHa','eSkyW70hWPy','W7RdLSkMtXy','W4u3BW','E17dH+UVNUYwNa','rCo8FmkRWP0','lCouWQdcLWa','W6lcQ08PW5i','rYSQlMu','jwxdHWpcHq','W7SgWRy/pa','WRBdPWFdP8o8','W5pdGqtdGXC','WOtdRqFdT8o6','W548dHtdOG','ymk0uSkHWQe','WO3cKKRdTrNcLmo1Bu7dQwSy','ueNcVZZcGG','xs7cG0mF','jSorWPWJfq','W7NdLwZdRZi','W4RcNbamDq','lSoIq8oUDa','qambWOTA','WPHCWQebfG','7y6W7j2KyUUXIoYEQa','WOHEyryt','WPtdNuZcIqu','6Rg4WPhTJ5BTL7mo','xY7cJKSC','vN7cPKee','7iAh7jwz7iw+64IqWRm','W5f7mSoXW40','eColWQRcP8km','kSoBWQZcHSoB','sxCCb04','a0pcQJRcNW','xxJcJKmB','W75My3mb','t8k/WOddVuG','gtGVnxu','W716bmoupW','uCkRjSkUpq','vY7cG0mF','W6G9vSkyW64','CmoPeW','tSolWQe2pG','cSkVW4Gi','DCk5C8kXWP4','WQddLSkTeGe','t8o8CW','l8o9ASoytq','WRldQHlcQCoH','dmk1pmkUpq','eCkpWRasWOO','i8o9emoJW64','wmoHCCk0WOi','zgpdHb4b','b8kGW5iFzq','WQCYW4G','WQD/tsKY','W53cVwRcRCkm','WR97W4hcHSk2','Fx00isK','Ef3dUbyx','sJFdKaid','xSkyW6GwWOO','W7ZdIXZdTH0','WONdQsddLJG','h8kEW6rcWOW','WRdcJmoHWPNcQW','64IOodxcVCoA','yx4/ix0','D8k6ASkNWRK','WPf2jCoSWOK','kSokWRBcRY0','WOhdUd7dTmoc','cSkGW6isqG','WPNdVmkWkmob','W4SWeWpcPW','W7HTbxG6','bW3dQwBcKa','f2zobeG','hKJcH2/cPG','cmk3os7dTq','WOz8tqy/','D8oxuSkqWR8','aSoVu3y','WRLdWOOTjG','W6KUos/cJW','WPhdHqhdQSoE','W7NcRXixBa','W7ZdHxZdKc4','W5KKDCkX','WP3dHYJdLCo2','e8kQmJVdGa','sJFdVJ4O','W5FcQeTGWR8','W7JdRxVdSd0','t8oSWQTQWOy','W57cKrtcR10','pSoWWR9LWR4','zsHXW6ap','na/dSu0','W4RcVaGbjW','WPtdHKtdLbO','WProFbK','tSoSzSk/WOG','C8oYWPvVWOW','W4X+mx4c','W49Smmk1W4i','W6RdKCkPbua','oN3cLqZcUG','vgFcKum','W5xcPmk1WPtdUW','d0pcRHdcNW','uSo6WQL6WOO','Cfidygy','WPBcTr/dNbdcKmoTdW','W6KZW4NcMdK','W6fov1ik','W4ldJ8kLcgW','zSoSwSk0WOi','s3RcJKKc','mSouw8oUvq','W5zmCN4g','gSkPW5qqwW','CmoBv8kbW6W','64MH64UOxa','d1RcVZ3dIW','WQfbWR0OfG','W5LvFwOw','pmofWPeXdW','u8o8W6z7WPm','WPFdTd/dVG','7jIFW4hcTq','BCo1vSkGWQ8','umoQWPpdS0G','q8ozWOqUcq','sCoWBSk2WP4','bmohWRFcT8oe','W43dQ8kIahS','w8kKW4RdVuW','BmoJWOndWQC','7iIp7zwY7zEn7iAo7jMM','udbyvXxcKmkxWPxdTv0TWRldUG','WPBcTwtcJwFdGmk0fmoijSo9mKq','roYxUEYGVSkYca','tCoWWRbT','WPJdUmkOWPddUW','WQddVCkiWRRdTW','W4pdOIFdKdK','b8odWRtcSCoe','cs0OmMu','W7bbufyX','dt3cHaWe','dsNcKXua','FINdTKdcRG','BKpcKe40','W4NcUCoSvCkuj8oizMjAW484W54','EZOIWQa','EhGLAq','tSkLWPldRKq','BCkBr8kLWQS','W67dMJtcHuq','cCkKj8kOnq','W5X4vZOfbSkk','wCosWPrPWO4','W45Lfgy','WRTfv1yT','W4ldUZBdMG','WRZcR0eVW5i','dCo8WQVdV2VcISkAW7S','tSoPymkVWOm','W51fCu0B','d8oFvCoSsG','a8o2WPtcPZW','WPu2ySkFW4m','hmkOWOldVei','xmo7umkDWQO','W47dNepdLr0','qhmeDvm','W641sSkBW6W','W5RcQLyPWQG','wt7cQ0mQ','W4BcUaGnya','CSkgWOtdTga','l2RcTXVcHq','m2VdQY3cSW','hCobxW','7kg77ichWPVSN63RJ50','wCk8ocFdPa','gSodWRjcWPe'];a0_0x5956=function(){return _0x58df0b;};return a0_0x5956();}import{fileURLToPath}from'node:url';import{dirname,resolve,join}from'node:path';function a0_0x47ba(_0x3fec84,_0x3c4bb5){_0x3fec84=_0x3fec84-(0x51*0x51+-0xf99+-0x862);const _0xf05ef0=a0_0x5956();let _0x57b836=_0xf05ef0[_0x3fec84];if(a0_0x47ba['RlHyfj']===undefined){var _0x5d4026=function(_0x2b5b7d){const _0x1457af='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x23c15a='',_0x3191f9='';for(let _0x5313bf=0x7ae+0x10d+-0x8bb,_0x3a5a5e,_0x3a787e,_0xca2f64=-0x1*-0x4f+-0x1e*-0xd5+-0x1*0x1945;_0x3a787e=_0x2b5b7d['charAt'](_0xca2f64++);~_0x3a787e&&(_0x3a5a5e=_0x5313bf%(0x95+0x5b0+-0x1*0x641)?_0x3a5a5e*(-0x1*-0x144e+0xd51+-0x215f*0x1)+_0x3a787e:_0x3a787e,_0x5313bf++%(0xf3e+-0x17*0xf1+0x66d))?_0x23c15a+=String['fromCharCode'](0x953+-0x1c5*-0x1+-0xeb*0xb&_0x3a5a5e>>(-(0x30f+0x18*-0x50+-0x11*-0x43)*_0x5313bf&-0xda7+-0x1*-0x22d3+-0x1526)):0x3*0x765+-0xa00+0xc2f*-0x1){_0x3a787e=_0x1457af['indexOf'](_0x3a787e);}for(let _0x2c2104=-0xe37*0x1+0x20b4+-0x1*0x127d,_0x1df889=_0x23c15a['length'];_0x2c2104<_0x1df889;_0x2c2104++){_0x3191f9+='%'+('00'+_0x23c15a['charCodeAt'](_0x2c2104)['toString'](-0x1*-0x22ca+-0x1f9e+-0x31c))['slice'](-(-0x212c+0x112f*-0x2+0x2*0x21c6));}return decodeURIComponent(_0x3191f9);};const _0x19c6c0=function(_0x96541,_0x2624a5){let _0x285bb1=[],_0x57abdf=-0x1429*-0x1+0x281*0x6+-0x232f,_0x470d9e,_0x29c988='';_0x96541=_0x5d4026(_0x96541);let _0xe9ea1a;for(_0xe9ea1a=-0x9*-0x141+0x1843*-0x1+0xcfa;_0xe9ea1a<0x11*0x115+0xb*-0x20+-0x1005;_0xe9ea1a++){_0x285bb1[_0xe9ea1a]=_0xe9ea1a;}for(_0xe9ea1a=0x1*0xf2c+0x1126+-0x2052*0x1;_0xe9ea1a<0x1bea+0xa23*0x1+-0x769*0x5;_0xe9ea1a++){_0x57abdf=(_0x57abdf+_0x285bb1[_0xe9ea1a]+_0x2624a5['charCodeAt'](_0xe9ea1a%_0x2624a5['length']))%(-0x26c5+0xdce+0x187*0x11),_0x470d9e=_0x285bb1[_0xe9ea1a],_0x285bb1[_0xe9ea1a]=_0x285bb1[_0x57abdf],_0x285bb1[_0x57abdf]=_0x470d9e;}_0xe9ea1a=-0x1fc9+0x1*-0x4c+0x2b*0xbf,_0x57abdf=-0x1*0x2467+-0x255c+-0x49c3*-0x1;for(let _0x5b66fb=-0xc29+0x1*-0xd5a+-0x3*-0x881;_0x5b66fb<_0x96541['length'];_0x5b66fb++){_0xe9ea1a=(_0xe9ea1a+(-0xc5f+-0x26e4+0x3344))%(-0x12a8*-0x2+0xd0*-0x17+-0x11a0),_0x57abdf=(_0x57abdf+_0x285bb1[_0xe9ea1a])%(0x1b7a+-0x1de1+0x367),_0x470d9e=_0x285bb1[_0xe9ea1a],_0x285bb1[_0xe9ea1a]=_0x285bb1[_0x57abdf],_0x285bb1[_0x57abdf]=_0x470d9e,_0x29c988+=String['fromCharCode'](_0x96541['charCodeAt'](_0x5b66fb)^_0x285bb1[(_0x285bb1[_0xe9ea1a]+_0x285bb1[_0x57abdf])%(0x1*0x301+-0x87*0x43+0x6*0x58e)]);}return _0x29c988;};a0_0x47ba['QIPHaF']=_0x19c6c0,a0_0x47ba['zjggVY']={},a0_0x47ba['RlHyfj']=!![];}const _0x1a9e01=_0xf05ef0[-0x32*-0x32+0x13f3*-0x1+-0xb*-0xed],_0x40fbca=_0x3fec84+_0x1a9e01,_0x47d7cf=a0_0x47ba['zjggVY'][_0x40fbca];return!_0x47d7cf?(a0_0x47ba['CuccSy']===undefined&&(a0_0x47ba['CuccSy']=!![]),_0x57b836=a0_0x47ba['QIPHaF'](_0x57b836,_0x3c4bb5),a0_0x47ba['zjggVY'][_0x40fbca]=_0x57b836):_0x57b836=_0x47d7cf,_0x57b836;}import{existsSync,statSync}from'node:fs';import{homedir}from'node:os';async function readStdin(){const _0x18d7b0=a0_0x47ba;let _0x4710b3='';for await(const _0x11f181 of process[_0x18d7b0(0x302,'F!z9')])_0x4710b3+=_0x11f181;return _0x4710b3;}function emit(_0x2a17a8){const _0x273670=a0_0x47ba;process[_0x273670(0x2de,'8K0x')+'t'][_0x273670(0x2fc,'IH&$')](JSON[_0x273670(0x2ef,'4jZR')+_0x273670(0x1f0,'3zF)')](_0x2a17a8)),process[_0x273670(0x30d,'!]1$')](0xe6c+-0x1*0x23c9+0x155d);}async function main(){const _0x1f4206=a0_0x47ba,_0x5aef76={'ieddk':function(_0x383219){return _0x383219();},'BNJQe':function(_0x3d94e8,_0x1a39f1){return _0x3d94e8||_0x1a39f1;},'HjUtX':function(_0x33410a,_0x2fb691){return _0x33410a(_0x2fb691);},'MzEKD':_0x1f4206(0x2ad,'H$t%')+_0x1f4206(0x23e,')o[m'),'KLPCk':_0x1f4206(0x22d,'oix$'),'YXKfa':function(_0x1cb1f7,_0x4e28ab){return _0x1cb1f7===_0x4e28ab;},'kFRez':_0x1f4206(0x1b6,'f)*w')+'g','BIbbU':function(_0x4c9478,_0x578818){return _0x4c9478*_0x578818;},'dfYnF':function(_0x191462,_0x19e051,_0x23c277,_0x286479){return _0x191462(_0x19e051,_0x23c277,_0x286479);},'RkSgo':function(_0x2eaa11){return _0x2eaa11();},'CcVGE':_0x1f4206(0x25f,'e$q5')+_0x1f4206(0x2c1,'UgB1')+'de','EGmTn':_0x1f4206(0x231,'$Zsg'),'UqIGi':function(_0x24e5f3,_0x1794ca,_0x47aeaf){return _0x24e5f3(_0x1794ca,_0x47aeaf);},'oJNax':_0x1f4206(0x278,'ZUsc')+_0x1f4206(0x1b9,'0qM*'),'BTFFg':_0x1f4206(0x2e7,'QtD3')+_0x1f4206(0x2d6,'f)*w')+_0x1f4206(0x1dc,'4Z@a'),'VMwhX':function(_0x2d79bf,_0xeafadd){return _0x2d79bf<_0xeafadd;},'DtqaZ':function(_0x586a6f,_0x26b76d){return _0x586a6f-_0x26b76d;},'RrwJv':_0x1f4206(0x1ad,'ZUsc')+_0x1f4206(0x25a,'oix$')+'r','essCx':_0x1f4206(0x1ea,'f4Xj')+_0x1f4206(0x29f,'@&#a')+_0x1f4206(0x1ac,'hyKS')+_0x1f4206(0x276,'4Z@a')+_0x1f4206(0x2b6,'@&#a'),'NMErw':function(_0x377c00,_0x5cd778){return _0x377c00(_0x5cd778);},'LBRTK':_0x1f4206(0x2c3,'UgB1')+_0x1f4206(0x2c2,'OGeU')+_0x1f4206(0x309,'TaRB')+_0x1f4206(0x2ba,'0qM*')+_0x1f4206(0x273,'!]1$')+_0x1f4206(0x263,'855v')+_0x1f4206(0x225,'855v')+_0x1f4206(0x2a9,'OGeU')+_0x1f4206(0x2d5,'UgB1')+_0x1f4206(0x206,'855v')+_0x1f4206(0x23f,'AZ8F')+_0x1f4206(0x2b4,'f)*w')+_0x1f4206(0x29b,'H*9%')+_0x1f4206(0x1d8,')Tv[')+'.','NLcnM':_0x1f4206(0x210,'c)KN'),'NKihg':_0x1f4206(0x1c7,'NLWC')+'fs','bGBwX':_0x1f4206(0x297,'3zF)')+_0x1f4206(0x1e9,'H*9%'),'QawgK':_0x1f4206(0x222,'TaRB')+'os','CDBXU':function(_0x311bc,_0x241f84,_0x48b77b,_0x518e68,_0x12c77f){return _0x311bc(_0x241f84,_0x48b77b,_0x518e68,_0x12c77f);},'xKRam':_0x1f4206(0x1f7,'!Jx@')+_0x1f4206(0x275,'4jZR'),'BuFuq':_0x1f4206(0x1ed,'$Zsg')+_0x1f4206(0x30c,'NLWC')+'on','tWfKj':function(_0x2e4af9,_0x5de3e3,_0x18a8da,_0x820792,_0x4e393c){return _0x2e4af9(_0x5de3e3,_0x18a8da,_0x820792,_0x4e393c);},'LCrOp':function(_0x21dd7a){return _0x21dd7a();},'pTbyx':_0x1f4206(0x228,'IH&$')+_0x1f4206(0x2f0,'855v')+_0x1f4206(0x1d3,'SefR'),'bprKz':_0x1f4206(0x2a4,'6PUn')+_0x1f4206(0x267,'e$q5'),'YmqER':function(_0xfc09a7,_0x48cd19){return _0xfc09a7(_0x48cd19);},'JSyuR':_0x1f4206(0x2b8,'QtD3'),'zsjqk':function(_0x2d4bb8,_0x5a5a71){return _0x2d4bb8===_0x5a5a71;},'MmejB':_0x1f4206(0x289,'8K0x'),'tgYbD':_0x1f4206(0x2bf,'H$t%')+_0x1f4206(0x2be,'8K0x')+_0x1f4206(0x2f7,'4jZR')+_0x1f4206(0x1d1,'f4Xj')+_0x1f4206(0x22b,'PU4h')+_0x1f4206(0x2ab,'4Z@a')+_0x1f4206(0x1eb,'oo5O')+_0x1f4206(0x207,'$]rp')+_0x1f4206(0x2a0,'H$t%')+_0x1f4206(0x269,'AZ8F')+_0x1f4206(0x229,'$]rp')+_0x1f4206(0x21c,'CyaL')+_0x1f4206(0x2ed,'oo5O')+_0x1f4206(0x2cf,'f)*w')+_0x1f4206(0x2fd,'f)*w')+_0x1f4206(0x288,'oo5O')+_0x1f4206(0x1db,'!Jx@'),'LzYSU':function(_0x578b8c,_0x42e5d8){return _0x578b8c!==_0x42e5d8;},'npAgh':_0x1f4206(0x272,'oix$'),'PPOCQ':function(_0x2f54e3,_0x3f7ea2){return _0x2f54e3(_0x3f7ea2);},'ovmRi':function(_0x3280e6,_0xb1756d){return _0x3280e6<_0xb1756d;},'CiLkS':function(_0x57efd9,_0x115c95,_0xeaef47,_0x4a28ff,_0x46df7b){return _0x57efd9(_0x115c95,_0xeaef47,_0x4a28ff,_0x46df7b);},'Snshy':function(_0x5bd7f1){return _0x5bd7f1();},'mrfQX':_0x1f4206(0x2d7,'6PUn')+_0x1f4206(0x277,'ZcV%')+_0x1f4206(0x1e1,'8K0x')+_0x1f4206(0x2fa,'268X'),'HqFZe':function(_0x1f16a0,_0x3effcb){return _0x1f16a0(_0x3effcb);},'DQwia':function(_0x58e28e,_0x3123f6,_0x290563){return _0x58e28e(_0x3123f6,_0x290563);},'fkuVP':function(_0x54d0d4,_0x52b4ec){return _0x54d0d4===_0x52b4ec;},'RWhjq':function(_0x1c975f,_0x4fb172){return _0x1c975f===_0x4fb172;},'DqBLh':_0x1f4206(0x1ab,'4Z@a')+'r','qtewH':function(_0x1c3bdb,_0x15f3d5){return _0x1c3bdb>=_0x15f3d5;},'wxerA':function(_0x42f11e,_0x1b7a3e){return _0x42f11e>_0x1b7a3e;},'pnwtU':_0x1f4206(0x2ee,'SefR')+_0x1f4206(0x2e8,'SefR'),'hAkhr':_0x1f4206(0x1d2,'xovn')+'re','abQEG':function(_0x325941,_0x387090){return _0x325941(_0x387090);},'oVtJS':function(_0x3a907a,_0xc66d95,_0x40733c,_0x5b62a5,_0x155506,_0x1dbeb2){return _0x3a907a(_0xc66d95,_0x40733c,_0x5b62a5,_0x155506,_0x1dbeb2);},'EkJDG':_0x1f4206(0x2ea,'UgB1')+_0x1f4206(0x20e,'8K0x')+_0x1f4206(0x21f,'&21n'),'azQmH':_0x1f4206(0x2e5,'855v'),'kIGJB':_0x1f4206(0x221,'e$q5')+_0x1f4206(0x2d9,'ILRe')+_0x1f4206(0x24c,'CyaL')+'s','FBmMQ':function(_0x3eefab,_0x2b786d){return _0x3eefab(_0x2b786d);},'DPpgw':function(_0x4b1413,_0x21a21b){return _0x4b1413(_0x21a21b);},'Veaus':_0x1f4206(0x1d4,'6PUn')+_0x1f4206(0x30f,'ZcV%'),'srqqE':_0x1f4206(0x28f,')Tv[')+'wn','xXiPT':function(_0x20bf11,_0x3f894c){return _0x20bf11(_0x3f894c);},'vLdne':function(_0x48ad09,_0x15ce87){return _0x48ad09(_0x15ce87);}};let _0x7c8beb;try{const _0x52610e=await _0x5aef76[_0x1f4206(0x28e,'4jZR')](readStdin);_0x7c8beb=JSON[_0x1f4206(0x258,'4Z@a')](_0x5aef76[_0x1f4206(0x1a6,'UgB1')](_0x52610e,'{}'));}catch{_0x5aef76[_0x1f4206(0x1fd,'H*9%')](emit,{'hookSpecificOutput':{'hookEventName':_0x5aef76[_0x1f4206(0x2ce,'&21n')],'permissionDecision':_0x5aef76[_0x1f4206(0x20d,'qORU')]}});}const _0x3b8009=_0x7c8beb[_0x1f4206(0x1c6,'855v')+_0x1f4206(0x2da,'TaRB')]??{},_0x19d3eb=_0x3b8009[_0x1f4206(0x24b,'4Z@a')+_0x1f4206(0x1bb,'TaRB')+_0x1f4206(0x205,'!Jx@')]??'',_0x3bf407=_0x5aef76[_0x1f4206(0x217,'!]1$')](typeof _0x3b8009[_0x1f4206(0x266,'oix$')+'t'],_0x5aef76[_0x1f4206(0x211,'F!z9')])?_0x3b8009[_0x1f4206(0x243,'8K0x')+'t']:'',_0x30db64=[],_0x5af58f=_0x5aef76[_0x1f4206(0x261,'1Uz#')](_0x5aef76[_0x1f4206(0x227,')Tv[')](_0x5aef76[_0x1f4206(0x1d5,'QtD3')](-0x519+-0x249c+-0xdef*-0x3,-0x673+0x1*-0x91d+0x3*0x544),0x1e0b*0x1+0x268a+0x1*-0x4459),-0x7f3+-0x57b*-0x4+-0xa11);let _0x5d4a42=![];try{const _0x3e356d=process.env.XDG_RUNTIME_DIR||_0x5aef76[_0x1f4206(0x303,'855v')](join,_0x5aef76[_0x1f4206(0x1b4,'4Z@a')](homedir),_0x5aef76[_0x1f4206(0x233,'!2RW')],_0x5aef76[_0x1f4206(0x203,'TaRB')]);for(const _0xf543ec of[_0x5aef76[_0x1f4206(0x22a,'dO^y')](join,_0x3e356d,_0x5aef76[_0x1f4206(0x2f6,'4jZR')]),_0x5aef76[_0x1f4206(0x26b,'$Zsg')]]){try{const _0x48252c=_0x5aef76[_0x1f4206(0x20a,'6PUn')](statSync,_0xf543ec);if(_0x5aef76[_0x1f4206(0x1e6,'0qM*')](_0x5aef76[_0x1f4206(0x260,'ZcV%')](Date[_0x1f4206(0x2aa,'qORU')](),_0x48252c[_0x1f4206(0x1dd,'c)KN')+'Ms']),_0x5af58f)){_0x5d4a42=!![];break;}}catch{}}}catch{_0x5d4a42=![];}const _0x16a98a=new Set([_0x5aef76[_0x1f4206(0x2b2,')o[m')],_0x5aef76[_0x1f4206(0x27a,'UgB1')]]);if(_0x16a98a[_0x1f4206(0x2b9,')o[m')](_0x19d3eb)){!_0x5d4a42&&_0x5aef76[_0x1f4206(0x264,'3zF)')](emit,{'hookSpecificOutput':{'hookEventName':_0x5aef76[_0x1f4206(0x204,'H$t%')],'permissionDecision':_0x5aef76[_0x1f4206(0x2e9,'!Jx@')]},'systemMessage':_0x5aef76[_0x1f4206(0x1aa,'OGeU')]});const _0x71736e=[/taskId[:\s]+['"]?([a-zA-Z0-9_-]+)/i,/task_id[:\s]+['"]?([a-zA-Z0-9_-]+)/i,/TASK_ID[:\s]+['"]?([a-zA-Z0-9_-]+)/,/task[:\s]+['"]?(\d+[a-zA-Z0-9_-]*)/i];let _0x21d358=null;for(const _0x46787d of _0x71736e){const _0x4b597d=_0x46787d[_0x1f4206(0x1ce,'F!z9')](_0x3bf407);if(_0x4b597d?.[0x164*0x18+-0x10c9*0x1+-0x1*0x1096]){_0x21d358=_0x4b597d[0xb40+0x1e3b+0x297a*-0x1];break;}}!_0x21d358&&_0x5aef76[_0x1f4206(0x1f6,'1Uz#')](emit,{'decision':_0x5aef76[_0x1f4206(0x2a8,'(htc')],'reason':_0x1f4206(0x2f9,'268X')+_0x1f4206(0x1cc,'xovn')+_0x1f4206(0x237,')o[m')+_0x1f4206(0x200,'@&#a')+_0x1f4206(0x291,'8K0x')+_0x1f4206(0x2f8,'qORU')+_0x1f4206(0x2fb,'qORU')+_0x1f4206(0x304,'!2RW')+_0x1f4206(0x1e3,'@&#a')+_0x1f4206(0x1b1,'OGeU')+_0x1f4206(0x25e,'OGeU')+_0x1f4206(0x2ec,'qORU')+_0x1f4206(0x209,'oo5O')+_0x1f4206(0x1e5,'uH7&')+_0x1f4206(0x2f5,'H*9%')+_0x1f4206(0x1c0,'1Uz#')+_0x1f4206(0x235,'qORU')+_0x1f4206(0x208,'qORU')+_0x1f4206(0x242,'IH&$')+_0x1f4206(0x29e,'&21n')+_0x1f4206(0x24d,'CyaL')+_0x1f4206(0x29a,'8K0x')});if(_0x21d358){const {existsSync:_0x2785af,readFileSync:_0x517214}=await import(_0x5aef76[_0x1f4206(0x2a1,'c)KN')]),{join:_0x2dbf76}=await import(_0x5aef76[_0x1f4206(0x30b,'oix$')]),{homedir:_0xcb0d5f}=await import(_0x5aef76[_0x1f4206(0x306,'3zF)')]),_0x50bded=_0x5aef76[_0x1f4206(0x2f2,'oix$')](_0x2dbf76,_0x5aef76[_0x1f4206(0x283,'8K0x')](_0xcb0d5f),_0x5aef76[_0x1f4206(0x1fe,')o[m')],_0x5aef76[_0x1f4206(0x1bd,'H*9%')],_0x5aef76[_0x1f4206(0x247,'oo5O')]),_0x18d806=_0x5aef76[_0x1f4206(0x245,'R@s7')](_0x2dbf76,_0x5aef76[_0x1f4206(0x2b5,'f4Xj')](_0xcb0d5f),_0x5aef76[_0x1f4206(0x1c5,'1Uz#')],_0x5aef76[_0x1f4206(0x2df,'Ph6o')],_0x5aef76[_0x1f4206(0x257,'dO^y')]),_0xc46bc0=_0x5aef76[_0x1f4206(0x284,'&21n')](_0x2dbf76,_0x50bded,_0x1f4206(0x1a9,'e$q5')+'n-'+_0x21d358+_0x1f4206(0x1f1,'1Uz#')),_0x32e413=_0x5aef76[_0x1f4206(0x250,'6PUn')](_0x2dbf76,_0x18d806,_0x21d358+_0x1f4206(0x2e0,'$Zsg'));let _0x1c69dd=_0x5aef76[_0x1f4206(0x301,'R@s7')];if(_0x5aef76[_0x1f4206(0x24a,'4Z@a')](_0x2785af,_0x32e413))try{_0x1c69dd=JSON[_0x1f4206(0x1e0,'6PUn')](_0x5aef76[_0x1f4206(0x1ec,'hyKS')](_0x517214,_0x32e413,_0x5aef76[_0x1f4206(0x2b1,'c)KN')]))[_0x1f4206(0x24f,'oo5O')]||_0x5aef76[_0x1f4206(0x270,'OGeU')];}catch{}_0x5aef76[_0x1f4206(0x1fc,'OGeU')](_0x1c69dd,_0x5aef76[_0x1f4206(0x1c1,'QtD3')])&&/planName[:\s'"]*none/i[_0x1f4206(0x212,'dO^y')](_0x3bf407)&&_0x30db64[_0x1f4206(0x295,'Ph6o')](_0x5aef76[_0x1f4206(0x1ca,'&21n')]);if(_0x5aef76[_0x1f4206(0x1cb,'1Uz#')](_0x1c69dd,_0x5aef76[_0x1f4206(0x2d4,'0qM*')])){if(_0x5aef76[_0x1f4206(0x1b8,'TaRB')](_0x2785af,_0xc46bc0))try{const _0x3f3eb5=JSON[_0x1f4206(0x26d,'F!z9')](_0x5aef76[_0x1f4206(0x1de,'c)KN')](_0x517214,_0xc46bc0,_0x5aef76[_0x1f4206(0x24e,')Tv[')])),_0x2ab484=_0x3f3eb5[_0x1f4206(0x29d,'8K0x')+_0x1f4206(0x2ae,'8K0x')+_0x1f4206(0x27f,'TaRB')]??_0x3f3eb5[_0x1f4206(0x2a5,'Ph6o')+_0x1f4206(0x220,'PU4h')+'re']??0x1758+0x2675+-0x3dcd;_0x5aef76[_0x1f4206(0x2ac,'h#mk')](_0x2ab484,-0x15e1+-0x1d4b*-0x1+-0x710)&&_0x5aef76[_0x1f4206(0x312,'OGeU')](emit,{'decision':_0x5aef76[_0x1f4206(0x310,'UgB1')],'reason':_0x1f4206(0x22f,'SefR')+_0x1f4206(0x2c7,'TaRB')+_0x1f4206(0x27c,'TaRB')+_0x1f4206(0x2a7,'f)*w')+_0x1f4206(0x1b7,'QtD3')+_0x1f4206(0x2c9,'xovn')+_0x1f4206(0x22e,'f4Xj')+_0x1f4206(0x213,'H*9%')+_0x2ab484+(_0x1f4206(0x2f3,'F!z9')+_0x1f4206(0x300,')o[m')+_0x1f4206(0x2a6,'@ODr')+_0x1f4206(0x262,'268X'))+_0x21d358+(_0x1f4206(0x2c0,'&21n')+_0x1f4206(0x1e4,'@&#a')+_0x1f4206(0x1c9,'TaRB')+_0x1f4206(0x287,'h#mk')+_0x1f4206(0x281,'ZUsc')+_0x1f4206(0x1df,'268X')+_0x1f4206(0x238,'TaRB')+_0x1f4206(0x2d1,'OGeU')+_0x1f4206(0x21e,'@&#a')+_0x1f4206(0x201,'h#mk')+_0x1f4206(0x1d0,'oo5O')+_0x1f4206(0x308,'ILRe')+_0x1f4206(0x2c4,'(htc')+_0x1f4206(0x1f5,'SefR')+_0x1f4206(0x274,'e$q5')+_0x1f4206(0x234,'f4Xj')+_0x1f4206(0x1e2,'1Uz#')+'.')});}catch{}else _0x5aef76[_0x1f4206(0x2e4,'xovn')](emit,{'decision':_0x5aef76[_0x1f4206(0x202,'f4Xj')],'reason':_0x1f4206(0x265,'ZUsc')+_0x1f4206(0x1bf,'PU4h')+_0x1f4206(0x1d6,'f4Xj')+_0x1f4206(0x296,'!2RW')+_0x1f4206(0x2e1,'0qM*')+_0x1f4206(0x2fe,'H*9%')+_0x1f4206(0x2a3,'NLWC')+_0x1f4206(0x2c5,'oo5O')+_0x1f4206(0x2f4,'dO^y')+_0x1f4206(0x255,'R@s7')+_0x1f4206(0x240,'oix$')+'k\x20'+_0x21d358+(_0x1f4206(0x1ba,'c)KN')+'r=')+_0x1c69dd+(_0x1f4206(0x1f9,'f)*w')+_0x1f4206(0x246,'OGeU')+_0x1f4206(0x2c8,'0qM*')+_0x1f4206(0x1ff,'e$q5')+_0x1f4206(0x1b0,'h#mk')+_0x1f4206(0x1bc,'4Z@a')+_0x1f4206(0x1ae,'CyaL')+_0x1f4206(0x2d8,')Tv[')+_0x1f4206(0x1fa,'f4Xj')+_0x1f4206(0x1cd,'4Z@a')+_0x1f4206(0x21a,'268X')+_0x1f4206(0x2d3,'0qM*')+_0x1f4206(0x2b7,'qORU')+_0x1f4206(0x20c,'!]1$'))});}try{const _0x715bbd=_0x5aef76[_0x1f4206(0x224,'(htc')](_0x2dbf76,_0x5aef76[_0x1f4206(0x254,'ILRe')](_0xcb0d5f),_0x5aef76[_0x1f4206(0x259,'PU4h')],_0x5aef76[_0x1f4206(0x1ef,'4Z@a')],_0x5aef76[_0x1f4206(0x244,'ZcV%')]);if(_0x5aef76[_0x1f4206(0x285,'PU4h')](_0x2785af,_0x715bbd)&&!/reviewer/i[_0x1f4206(0x251,'6PUn')](_0x3bf407)){const _0x402175=JSON[_0x1f4206(0x279,'855v')](_0x5aef76[_0x1f4206(0x298,'@&#a')](_0x517214,_0x715bbd,_0x5aef76[_0x1f4206(0x2cc,'!Jx@')]))[_0x1f4206(0x1f3,'AZ8F')+'s']||{},_0x102e3f=_0x3bf407[_0x1f4206(0x25b,'e$q5')](/\/(?:[\w.@-]+\/)+[\w.@-]+\.[A-Za-z0-9]+/g)||[],_0x20ab3a=[];for(const _0x1921e1 of _0x102e3f){for(const [_0x2a3533,_0x1aa457]of Object[_0x1f4206(0x294,'H*9%')+'es'](_0x402175)){if((_0x5aef76[_0x1f4206(0x292,'268X')](_0x2a3533,_0x1921e1)||_0x1921e1[_0x1f4206(0x2bc,'R@s7')+_0x1f4206(0x226,'!Jx@')](_0x2a3533)||_0x2a3533[_0x1f4206(0x286,'!Jx@')+_0x1f4206(0x216,'!2RW')](_0x1921e1))&&_0x1aa457&&_0x5aef76[_0x1f4206(0x2af,'$]rp')](typeof _0x1aa457[_0x1f4206(0x305,'(htc')],_0x5aef76[_0x1f4206(0x26a,'dO^y')])&&_0x5aef76[_0x1f4206(0x26e,'3zF)')](_0x1aa457[_0x1f4206(0x25c,'c)KN')],-0x190f+0x1de0+-0x48b)){_0x20ab3a[_0x1f4206(0x1e8,'CyaL')](_0x1921e1);break;}}}_0x5aef76[_0x1f4206(0x1a7,'$]rp')](_0x20ab3a[_0x1f4206(0x30a,'$]rp')+'h'],-0x17d7+-0x233e+0x3b15)&&_0x30db64[_0x1f4206(0x1b2,'oix$')](_0x1f4206(0x311,'h#mk')+_0x1f4206(0x2bd,'AZ8F')+_0x1f4206(0x1a8,'4jZR')+_0x1f4206(0x2e6,'SefR')+_0x1f4206(0x271,'(htc')+_0x20ab3a[_0x1f4206(0x2d0,'oix$')+'h']+(_0x1f4206(0x2d2,'!Jx@')+_0x1f4206(0x1cf,')Tv['))+_0x20ab3a[0x2338+-0x807+-0x1b31]+(_0x1f4206(0x248,'AZ8F')+_0x1f4206(0x2db,'0qM*')+_0x1f4206(0x290,'SefR')+_0x1f4206(0x23a,'hyKS')+_0x1f4206(0x1c8,'3zF)')));}}catch{}}}const _0x1b2864=new Set([_0x5aef76[_0x1f4206(0x253,'Ph6o')],_0x5aef76[_0x1f4206(0x2cb,'h#mk')]]);!_0x1b2864[_0x1f4206(0x29c,'NLWC')](_0x19d3eb)&&_0x5aef76[_0x1f4206(0x1fb,'SefR')](emit,{'hookSpecificOutput':{'hookEventName':_0x5aef76[_0x1f4206(0x1d7,'4Z@a')],'permissionDecision':_0x5aef76[_0x1f4206(0x2cd,'CyaL')]},..._0x5aef76[_0x1f4206(0x25d,'!Jx@')](_0x30db64[_0x1f4206(0x30e,'&21n')+'h'],0x99a+-0x6*-0x41b+-0x223c)?{'systemMessage':_0x30db64[_0x1f4206(0x1af,'uH7&')]('\x0a')}:{}});const _0x5ac955=_0x5aef76[_0x1f4206(0x307,'uH7&')](dirname,_0x5aef76[_0x1f4206(0x28a,'H*9%')](fileURLToPath,import.meta.url)),_0x5bf663=_0x5aef76[_0x1f4206(0x241,'oo5O')](resolve,_0x5ac955,'..',_0x5aef76[_0x1f4206(0x2e2,')o[m')],_0x5aef76[_0x1f4206(0x239,'@ODr')],_0x5aef76[_0x1f4206(0x2dc,'1Uz#')]);!_0x5aef76[_0x1f4206(0x27b,'CyaL')](existsSync,_0x5bf663)&&_0x5aef76[_0x1f4206(0x268,'1Uz#')](emit,{'hookSpecificOutput':{'hookEventName':_0x5aef76[_0x1f4206(0x2ce,'&21n')],'permissionDecision':_0x5aef76[_0x1f4206(0x26f,'f4Xj')]}});let _0x4d841a;try{({trackSpawn:_0x4d841a}=await import(_0x5bf663));}catch{_0x5aef76[_0x1f4206(0x27e,'1Uz#')](emit,{'hookSpecificOutput':{'hookEventName':_0x5aef76[_0x1f4206(0x2ca,'OGeU')],'permissionDecision':_0x5aef76[_0x1f4206(0x252,'f)*w')]}});}const _0x59fced=/JUSTIFICATION:\s*([\s\S]+?)(?=\n[A-Z_]+:|$)/i[_0x1f4206(0x1f2,'268X')](_0x3bf407),_0x14cee6=_0x59fced?.[-0x12a0+0xb1f+0x782*0x1]?.[_0x1f4206(0x313,')o[m')](),_0x4a6b17=/INVOCATION_MODE:\s*(sequential|parallel)/i[_0x1f4206(0x2b0,'3zF)')](_0x3bf407),_0x1932b8=_0x4a6b17?.[0xb*0x2c8+0x23c9+-0x4260]?.[_0x1f4206(0x2ff,'oo5O')+_0x1f4206(0x1b5,'3zF)')+'e']()??_0x5aef76[_0x1f4206(0x1c4,'!Jx@')];let _0x4bdec0;try{_0x4bdec0=_0x5aef76[_0x1f4206(0x23d,'QtD3')](_0x4d841a,{'agentType':_0x19d3eb,'parentAgent':_0x5aef76[_0x1f4206(0x26c,'!2RW')],'prompt':_0x3bf407,'invocationMode':_0x1932b8,'justification':_0x14cee6});}catch{_0x5aef76[_0x1f4206(0x1c2,'NLWC')](emit,{'hookSpecificOutput':{'hookEventName':_0x5aef76[_0x1f4206(0x218,')Tv[')],'permissionDecision':_0x5aef76[_0x1f4206(0x1f8,'R@s7')]}});}if(!_0x4bdec0[_0x1f4206(0x21d,'oo5O')+_0x1f4206(0x2f1,'PU4h')]){const _0x3baac6=[_0x1f4206(0x2bb,'NLWC')+_0x1f4206(0x232,'PU4h')+_0x1f4206(0x282,'!2RW')+_0x1f4206(0x22c,'e$q5')+_0x1f4206(0x2e3,'NLWC')+_0x4bdec0[_0x1f4206(0x28c,'4Z@a')+'n'],_0x4bdec0[_0x1f4206(0x2dd,'f4Xj')+_0x1f4206(0x2eb,'$Zsg')]?'\x0a'+_0x4bdec0[_0x1f4206(0x1b3,'SefR')+_0x1f4206(0x1c3,'0qM*')]:''][_0x1f4206(0x299,'R@s7')]('');_0x5aef76[_0x1f4206(0x236,'SefR')](emit,{'decision':_0x5aef76[_0x1f4206(0x293,')o[m')],'reason':_0x3baac6});}_0x5aef76[_0x1f4206(0x21b,'h#mk')](emit,{'hookSpecificOutput':{'hookEventName':_0x5aef76[_0x1f4206(0x214,'Ph6o')],'permissionDecision':_0x5aef76[_0x1f4206(0x219,'xovn')]}});}main()[a0_0x597cf9(0x223,'Ph6o')](()=>emit({'hookSpecificOutput':{'hookEventName':a0_0x597cf9(0x249,'SefR')+a0_0x597cf9(0x20f,'f4Xj'),'permissionDecision':a0_0x597cf9(0x230,'f4Xj')}}));
@@ -171,7 +171,7 @@ esac
171
171
  OPEN_MARK="$HOME/.routinecode/.recharge-opened-$(date -u +%Y%m%d 2>/dev/null)"
172
172
  if [ ! -f "$OPEN_MARK" ]; then
173
173
  touch "$OPEN_MARK" 2>/dev/null || true
174
- RC_RECHARGE_URL="https://routinecode.routinecrew.net/recharge/write"
174
+ RC_RECHARGE_URL="https://routinecode.routinecrew.net/recharge"
175
175
  (
176
176
  if command -v open >/dev/null 2>&1; then open "$RC_RECHARGE_URL" >/dev/null 2>&1
177
177
  elif command -v xdg-open >/dev/null 2>&1; then xdg-open "$RC_RECHARGE_URL" >/dev/null 2>&1
@@ -198,7 +198,7 @@ except Exception:
198
198
  # the user (legacy {'decision':'block'} only feeds it to the model).
199
199
  print(json.dumps({'hookSpecificOutput': {'hookEventName': 'PreToolUse', 'permissionDecision': 'deny', 'permissionDecisionReason': msg}}))
200
200
  " 2>/dev/null)
201
- [ -z "$BLOCK_JSON" ] && BLOCK_JSON='{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"deny","permissionDecisionReason":"[CREDIT-GUARD] Credit exhausted. Write one line at https://routinecode.routinecrew.net/recharge/write for instant +50, or run /share."}}'
201
+ [ -z "$BLOCK_JSON" ] && BLOCK_JSON='{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"deny","permissionDecisionReason":"[CREDIT-GUARD] Credit exhausted. Write one line at https://routinecode.routinecrew.net/recharge for instant +50, or run /share."}}'
202
202
  echo "$BLOCK_JSON"
203
203
 
204
204
  exit 0
@@ -11,7 +11,9 @@ fi
11
11
 
12
12
  INPUT=$(cat)
13
13
 
14
- ROUTINECODE_HOOK_INPUT="$INPUT" python3 - <<'PYEOF'
14
+ # ROUTINECODE_HOOKS_DIR: emit_raw(lib/) import 용 — CWD 무관 절대경로 (reviewer 실측:
15
+ # 미설정 시 임의 프로젝트 CWD 에서 exposure emit 100% 실패. stop-usage-metrics 패턴과 통일)
16
+ ROUTINECODE_HOOK_INPUT="$INPUT" ROUTINECODE_HOOKS_DIR="$(cd "$(dirname "$0")" && pwd)" python3 - <<'PYEOF'
15
17
  import sys, os, json, re
16
18
 
17
19
  def allow():
@@ -109,6 +111,30 @@ def _tenant_ok(entry_tenant):
109
111
 
110
112
  parts = []
111
113
 
114
+ # M0 (메타지능 귀속 — 설계 docs2/지능개선/new/메타지능-v1): 이번 주입의 (kid, kind) 수집.
115
+ # 참관 모드: 주입 행동 불변, 원장(ledger)과 exposure 이벤트만 남긴다. kid 규약은
116
+ # pre-edit-domain-gate 와 동일('dk:<serverId>'), 로컬 draft 는 'local:<sha1>' fallback(v1.1).
117
+ import hashlib as _h
118
+ _led = [] # (kid, kind, holdout)
119
+ def _kid_of(e, kind, src):
120
+ _v = e.get('serverId') or e.get('id')
121
+ if _v is not None:
122
+ return kind + ':' + str(_v)
123
+ return 'local:' + _h.sha1((kind + ':' + src).encode('utf-8', 'replace')).hexdigest()[:12]
124
+
125
+ # M2 holdout (설계 §4): 결정론 20% — 매칭됐으나 일부러 미주입(대조군). 랜덤 금지(재현성),
126
+ # 날짜 포함으로 같은 kid 도 날마다 군 교체. constraint(검증완료) 등급은 제외 — 보호 유지.
127
+ # 주입은 advisory(systemMessage)뿐이라 holdout 이 보호를 끄지 않음(reviewer Claim3 확증).
128
+ from datetime import datetime as _dt0, timezone as _tz0
129
+ _today_key = _dt0.now(_tz0.utc).strftime('%Y-%m-%d')
130
+ def _is_holdout(kid, maturity=None):
131
+ if maturity == 'constraint':
132
+ return False
133
+ try:
134
+ return int(_h.sha1((kid + _today_key).encode('utf-8', 'replace')).hexdigest(), 16) % 5 == 0
135
+ except Exception:
136
+ return False
137
+
112
138
  # 1) 도메인지식 — flat scope 직접매칭(우선) + 의미 그래프(concept/GOVERNS) 확장(meaning→consumption)
113
139
  _DK = [e for e in _read_jsonl(os.path.join(KN, 'domain-knowledge.jsonl')) if _tenant_ok(e.get('tenantId'))]
114
140
 
@@ -127,8 +153,13 @@ _dk_injected = set()
127
153
  # 1a) flat scope 직접매칭 (정확·우선, 최대 2건)
128
154
  _direct = [e for e in _DK if isinstance(e.get('scope'), list) and any(_scope_match(s, read_file) for s in (e.get('scope') or []))]
129
155
  for e in _direct[:2]:
130
- parts.append(_dk_line(e))
131
- _dk_injected.add(_dk_sid(e))
156
+ _dk_injected.add(_dk_sid(e)) # holdout 이어도 '처리됨' 마킹 — 1b concept 경로 오염 방지
157
+ _kid = _kid_of(e, 'dk', _dk_sid(e))
158
+ if _is_holdout(_kid, e.get('maturity')):
159
+ _led.append((_kid, 'dk', True))
160
+ else:
161
+ parts.append(_dk_line(e))
162
+ _led.append((_kid, 'dk', False))
132
163
 
133
164
  # 1b) 의미 그래프 확장: 이 파일을 GOVERNS 하는 Domain 개념 + 직접매칭 지식의 개념을 따라
134
165
  # "같은/관련 개념의 다른 도메인지식"(scope에 이 파일이 없어도)까지 상기. 최대 +2건.
@@ -167,8 +198,13 @@ try:
167
198
  for e in _DK:
168
199
  sid = _dk_sid(e)
169
200
  if sid in _want and sid not in _dk_injected:
170
- parts.append(_dk_line(e, ' [concept]'))
171
201
  _dk_injected.add(sid)
202
+ _kid2 = _kid_of(e, 'dk', sid)
203
+ if _is_holdout(_kid2, e.get('maturity')):
204
+ _led.append((_kid2, 'dk', True))
205
+ else:
206
+ parts.append(_dk_line(e, ' [concept]'))
207
+ _led.append((_kid2, 'dk', False))
172
208
  _extra += 1
173
209
  if _extra >= 2:
174
210
  break
@@ -199,15 +235,20 @@ if quirks:
199
235
  seen_q.add(lib)
200
236
  t = str(e.get('title', '')).replace(chr(10), ' ')
201
237
  w = str(e.get('workaround', '') or e.get('quirk', '')).replace(chr(10), ' ')
202
- parts.append('[LIBRARY QUIRK] ' + lib + ': ' + t + ' — ' + w)
238
+ _kid3 = _kid_of(e, 'quirk', lib + ':' + t)
239
+ if _is_holdout(_kid3, e.get('maturity')):
240
+ _led.append((_kid3, 'quirk', True))
241
+ else:
242
+ parts.append('[LIBRARY QUIRK] ' + lib + ': ' + t + ' — ' + w)
243
+ _led.append((_kid3, 'quirk', False))
203
244
  q_count += 1
204
245
  if q_count >= 2:
205
246
  break
206
247
 
207
- if not parts:
248
+ if not parts and not _led:
208
249
  allow()
209
250
 
210
- # dedup 기록 (히트가 있어 실제 주입할 때만 소비)
251
+ # dedup 기록 (선택이 있었던 파일 — 주입이든 holdout 이든. holdout 재굴림 방지)
211
252
  try:
212
253
  os.makedirs(KN, exist_ok=True)
213
254
  files = gate.get('files', [])
@@ -218,5 +259,37 @@ try:
218
259
  except Exception:
219
260
  pass
220
261
 
221
- allow_with_message('\n\n'.join(parts))
262
+ # ── M0/M2 (메타지능 귀속): 주입 원장 + exposure (참관 — 행동 불변, fail-open) ──
263
+ # holdout 엔트리도 ledger 에 남긴다(대조군 §4). exposure 는 실제 주입분만(노출 사실 기록).
264
+ try:
265
+ if _led:
266
+ _sid12 = (session_id or 'unknown')[:12] # v1.1: session 키 [:12] 통일 (stop-hook 과 일치)
267
+ _att = os.path.join(os.path.expanduser('~'), '.' + 'routinecode', 'attribution')
268
+ os.makedirs(_att, exist_ok=True)
269
+ from datetime import datetime as _dtt, timezone as _tzz
270
+ _now_iso = _dtt.now(_tzz.utc).isoformat()
271
+ _fh = _h.sha1(os.path.basename(read_file).encode('utf-8', 'replace')).hexdigest()[:8]
272
+ with open(os.path.join(_att, 'ledger-' + _sid12 + '.jsonl'), 'a') as _lf:
273
+ for _kid, _kind, _ho in _led:
274
+ _lf.write(json.dumps({"at": _now_iso, "kid": _kid, "kind": _kind,
275
+ "file": _fh, "holdout": bool(_ho)}) + "\n")
276
+ # exposure 이벤트 — usage 분석 보조 (성숙 분모 아님, v1.1: migration 015 로 분모는 verified_cnt)
277
+ _elib = os.path.join(os.environ.get('ROUTINECODE_HOOKS_DIR', ''), 'lib')
278
+ if _elib and _elib not in sys.path:
279
+ sys.path.insert(0, _elib)
280
+ try:
281
+ from emit_raw import emit_raw as _emit
282
+ for _kid, _kind, _ho in _led:
283
+ if not _ho:
284
+ _emit('exposure', {'kid': _kid, 'kind': _kind, 'path': 'inject:read'},
285
+ session=_sid12, at=_now_iso)
286
+ except Exception:
287
+ pass
288
+ except Exception:
289
+ pass
290
+
291
+ if parts:
292
+ allow_with_message('\n\n'.join(parts))
293
+ else:
294
+ allow() # 선택 전원 holdout → 침묵 (대조군 — 사용자 경험 불변)
222
295
  PYEOF