@routinecrew/routinecode 2.31.38 → 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 (82) 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 +5 -3
  7. package/hooks/pre-mark-complete.sh +19 -0
  8. package/hooks/pre-read-knowledge-inject.sh +81 -8
  9. package/hooks/session-start.sh +3 -0
  10. package/hooks/stop-usage-metrics.sh +150 -2
  11. package/hooks/tests/gate-integration.test.sh +114 -0
  12. package/hooks/user-prompt-submit.sh +29 -3
  13. package/mcp-db-manager/dist/analyzers/duplicate-detector.js +1 -1
  14. package/mcp-db-manager/dist/core/model-parser.js +1 -1
  15. package/mcp-db-manager/dist/core/schema-reader.js +1 -1
  16. package/mcp-db-manager/dist/executors/migration-executor.js +1 -1
  17. package/mcp-db-manager/dist/generators/migration-generator.js +1 -1
  18. package/mcp-db-manager/dist/index.js +1 -1
  19. package/mcp-db-manager/dist/validators/schema-validator.js +1 -1
  20. package/mcp-dev-tester/dist/analyzers/auth-diagnoser.js +1 -1
  21. package/mcp-dev-tester/dist/analyzers/backend-analyzer.js +1 -1
  22. package/mcp-dev-tester/dist/analyzers/endpoint-diagnoser.js +1 -1
  23. package/mcp-dev-tester/dist/analyzers/frontend-analyzer.js +1 -1
  24. package/mcp-dev-tester/dist/analyzers/runtime-diagnoser.js +1 -1
  25. package/mcp-dev-tester/dist/analyzers/type-comparator.js +1 -1
  26. package/mcp-dev-tester/dist/analyzers/validation-diagnoser.js +1 -1
  27. package/mcp-dev-tester/dist/browser/playwright-manager.js +1 -1
  28. package/mcp-dev-tester/dist/browser/ui-tester.js +1 -1
  29. package/mcp-dev-tester/dist/config/project-config.js +1 -1
  30. package/mcp-dev-tester/dist/index.js +1 -1
  31. package/mcp-dev-tester/dist/testers/api-tester.js +1 -1
  32. package/mcp-doc-fetcher/dist/index.js +1 -1
  33. package/mcp-html-renderer/dist/index.js +1 -1
  34. package/mcp-html-renderer/dist/preview.js +1 -1
  35. package/mcp-html-renderer/dist/template-engine.js +1 -1
  36. package/mcp-intelligence/dist/concept-catalog.js +1 -1
  37. package/mcp-intelligence/dist/concept-server-proxy.js +1 -1
  38. package/mcp-intelligence/dist/config-auth.js +1 -1
  39. package/mcp-intelligence/dist/contracts.generated.js +1 -1
  40. package/mcp-intelligence/dist/domain-templates.js +1 -1
  41. package/mcp-intelligence/dist/grounding.js +1 -1
  42. package/mcp-intelligence/dist/handlers.js +1 -1
  43. package/mcp-intelligence/dist/index.js +1 -1
  44. package/mcp-intelligence/dist/intelligence-file.js +1 -1
  45. package/mcp-intelligence/dist/knowledge-critic.js +1 -1
  46. package/mcp-intelligence/dist/knowledge-handlers.js +1 -1
  47. package/mcp-intelligence/dist/mention-extractor.js +1 -1
  48. package/mcp-intelligence/dist/provenance.js +1 -1
  49. package/mcp-intelligence/dist/semantic-embedder.js +1 -1
  50. package/mcp-log-watcher/dist/config-auth.js +1 -1
  51. package/mcp-log-watcher/dist/file-watcher.js +1 -1
  52. package/mcp-log-watcher/dist/index.js +1 -1
  53. package/mcp-log-watcher/dist/known-solutions.js +1 -1
  54. package/mcp-log-watcher/dist/log-store.js +1 -1
  55. package/mcp-log-watcher/dist/websocket-server.js +1 -1
  56. package/mcp-plan-manager/dist/__tests__/plan-parser.test.js +1 -1
  57. package/mcp-plan-manager/dist/file-ops.js +1 -1
  58. package/mcp-plan-manager/dist/index.js +1 -1
  59. package/mcp-plan-manager/dist/plan-parser.js +1 -1
  60. package/mcp-project-context/dist/git-ops.js +1 -1
  61. package/mcp-project-context/dist/index.js +1 -1
  62. package/mcp-project-context/dist/project-analysis.js +1 -1
  63. package/mcp-routinecode/dist/agent-tracker.js +1 -1
  64. package/mcp-routinecode/dist/blast-radius.js +1 -1
  65. package/mcp-routinecode/dist/config-auth.js +1 -1
  66. package/mcp-routinecode/dist/contracts.generated.js +1 -1
  67. package/mcp-routinecode/dist/explorer-advisor.js +1 -1
  68. package/mcp-routinecode/dist/failure-tracker.js +1 -1
  69. package/mcp-routinecode/dist/file-lock-registry.js +1 -1
  70. package/mcp-routinecode/dist/file-risk-scorer.js +1 -1
  71. package/mcp-routinecode/dist/index.js +1 -1
  72. package/mcp-routinecode/dist/known-solutions.js +1 -1
  73. package/mcp-routinecode/dist/ledger-miner.js +1 -1
  74. package/mcp-routinecode/dist/observed-draft.js +1 -1
  75. package/mcp-routinecode/dist/pattern-matcher.js +1 -1
  76. package/mcp-routinecode/dist/routines.js +1 -1
  77. package/mcp-routinecode/dist/rule-engine.js +1 -1
  78. package/mcp-routinecode/dist/rule-promoter.js +1 -1
  79. package/mcp-routinecode/dist/telemetry-analyzer.js +1 -1
  80. package/mcp-routinecode/dist/verification.js +1 -1
  81. package/mcp-routinecode/dist/viral-loop.js +1 -1
  82. 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_0x120501=a0_0x1954;(function(_0x505639,_0x2cf9fd){const _0x105d91=a0_0x1954,_0x168314=_0x505639();while(!![]){try{const _0x2c6138=-parseInt(_0x105d91(0x208,'8r@W'))/(-0x1a44+0x3*-0x8a6+0x1*0x3437)*(-parseInt(_0x105d91(0x1f5,'Y]kc'))/(-0x1*-0x140d+-0x1a04+0x5f9))+parseInt(_0x105d91(0x1f8,'8dtK'))/(-0x796+0x700+0x99)+-parseInt(_0x105d91(0x216,'9v$@'))/(-0x2295*0x1+-0x4*0x34c+0x2fc9)+-parseInt(_0x105d91(0x2a6,'QfQ9'))/(-0x1495+-0x1*-0x26d6+-0x123c)*(-parseInt(_0x105d91(0x2d7,'GXyH'))/(-0x3e9+0x9ad+0x5be*-0x1))+parseInt(_0x105d91(0x2a2,'O[)j'))/(0x14*0x8+0x1d5d*0x1+0x82*-0x3b)+parseInt(_0x105d91(0x207,']^K4'))/(-0x11d3*0x2+-0x1151+0x34ff)*(-parseInt(_0x105d91(0x26b,'rr]N'))/(0xaf*-0x19+0xbf3+-0x5*-0x109))+parseInt(_0x105d91(0x2d3,'8K)d'))/(0x1*0xd27+0x359*0x8+-0x7*0x5b3);if(_0x2c6138===_0x2cf9fd)break;else _0x168314['push'](_0x168314['shift']());}catch(_0x3d10d0){_0x168314['push'](_0x168314['shift']());}}}(a0_0xd71e,0x676bd+-0x5f974+0xa1cb4));import{fileURLToPath}from'node:url';import{dirname,resolve}from'node:path';import{existsSync}from'node:fs';async function readStdin(){const _0x5307b6=a0_0x1954;let _0x26f637='';for await(const _0x287d07 of process[_0x5307b6(0x280,'zK2m')])_0x26f637+=_0x287d07;return _0x26f637;}function emit(_0x37632b){const _0x4b2ef0=a0_0x1954;process[_0x4b2ef0(0x1e8,'c](G')+'t'][_0x4b2ef0(0x22e,'OQrv')](JSON[_0x4b2ef0(0x235,'wXq5')+_0x4b2ef0(0x233,'zK2m')](_0x37632b)),process[_0x4b2ef0(0x1fe,'Wp&E')](-0x1ccd+-0x1679+0x3346);}function a0_0xd71e(){const _0x5b4ba7=['qSoZf2xdPq','q8kxWPhdPKC','euldV3mr','kZxdQe0m','yCo0ur8','me3dGInQ','W6CzdCkQaW','lM/cOmoZW6C','W4BdNmoW','W5GyAmkIW44','WQL8vqpdGW','W7T/wflcQW','W4LpWPrEWRe','WPeaWRJcK8kYW4eG','Ad/dSSoEvCkPDq','lKFdIhqK','lmoRW53cJsC','mmkvycRdJG','WP8hxmk7W7a','e8k9WQO','W65eWQaTAq','W4LuexhdRa','q8oyWOxdQXW','mCklWP0fgG','u8kuW7lcOYZcH11tWOtdJmk2W6jT','W67cUmkhWPTl','lSo2W7lcTtO','W5LQWQddRCkd','W6pdTCoUbqldQNZcT8onWPBdIghdUG','W4HQa8kifbhdKSoMWPj5W64yW4Gf','W5bBdb3dLG','pSkwW5BcSJK','aSobWQddSa','W4eZWPe','WPO0WOTSWRu','jmoYW6xcSZe','tSkNW4G/','mCkbBH7cJW','WRRcR8kgWR5b','tmoObIpdTW','tgOjvMK','W7ziW6ldLgy','W6nrzq3dPq','iCo0W7tcTcO','WQnEW7Wji1iUW6acWO4hW5lcVG','W4NcG07dNMG','WOCGWO3cNSkQ','W6mzWQzuEG','W7WRn8ktea','tmoIbG','EmoqWPhdVMW','WRNcUmoFWOFdNG','W7ejpCkRla','W7bdwG','rCkyWRlcUNi','WQhcMhJdRq4','WRKgb0Oe','y8kpW4lcRG','sGCye8kM','Caa8dCkQ','px5OW4tdOW','u8kFWRZcU34','W7nkFGFcQW','W7HpWQHfWRC','AHO+eCkW','lMNcVSkQW7O','yMRcQfzQ','WOHrBSk4W44','W6TEwXXl','W5y8mLxdLq','W4SLWOb0xW','WR1bdZFcJq','W6v/WPVdMCk3','WRm1xaldHq','W79KWPVdM8ki','f0NcImkkWRu','CmoPzuVdGq','WPm1wmoq','W5rtsZDb','u8onWQBcVNG','FCofWOtdMKK','z2JcVLf5','D8kdWOtcTxe','WRBcRSkYW5NcKq','W5XIWR3dPmki','W5HwBSkKW4y','WPyqx8keW6u','bJFdLaSH','WPqQxCoBtq','x8kQW5a4lG','lvhdSa','WRPbi2lcPG','amkQWQ8cpa','w8kzWRNcJK4','W6nshY7cGq','W4BdNmoTW5jw','WR7cUmo6W5JcLG','CmkkWPVcTva','W7uvWQPy','AfRdL2i/','jwpcOSk7WRu','aSoDWQldTG','g8kSWQ8foG','WRNcQ8k/vGe','jW1aWQ06','W7G8WRVcP8kP','k3VcQv5U','jCkZW7xcVY0','WO4gzmk7W7u','iuKCW65Z','vJfdct/cSxhcGSkcgHpcHmo2','W7eoWQXEza','zsddUSoDw8kEqa','yJOZWPpcU8kWWO0HBgXehCorgW','uCowndBdVq','WRHMuWRdNG','jSk5zJ/dTa','mSo8W6tcRJC','WO8IWQhdU20','W7NdPmkjrLu','iXVdKCo+uq','W6amWR1iCq','W6CvoSkWpq','W7btW6BdLtu','jCkzDXxdHG','WORcQv7dRqG','W5WUxmomya','WOKeF8k3W6W','WPy2qSoXwG','W6RcQCkeWPTp','WRJcKc5qWPK','DmkhW5BcPhe','y8oIfqZdOW','oSkGzclcTa','D8ksW4dcVNO','yJxdUWnK','qSkeWRdcRW','WPbrBW','W4XPWRbJWPK','vmkdW5BcSKa','emknqrRcOW','WOb8W4lcQmkX','WO0/BmkEza','W7PzW67dHsC','ymkpW5FcOW','WQ/cJmkrENi','W6f5W5ddLsO','W7lcJ37cTbq','W43cMSkpWODP','a8oDWPldOuG','Ff/cUhnu','jLVdIha7','WQqyWQddTr8','WPuMW7i','W6HfdgNdNa','WR7cJuZdSKu','z0JcKfXM','WRtcKMNcUrm','W4rzhwdcGa','W7rcWQ9JWQi','W6myWQHCCq','WOKZWPzZWQa','WRJcIXLwW4W','W4BdGCoRW5m','W7LlAqhdPa','tgOvW5jB','lhNcPmk3W7S','hgLkW7/dOq','W4OjjCo/WP43nZ94mmoXeSkM','lmo2W7ZcVZa','W4rdbL/cMq','lmk5CYxcRG','CgFdRKeLW7iA','rdC7f8kG','tmoDmq7dVq','W7tdLmomW5zo','W4JdO8oHW7jq','Fmo/WRldGuG','DSkStaRdSq','WPbUWR3dSCkk','AdZdQCoNwSkkuq','W7XnWQFdLJq','WPqGWR3dRcq','x8oeDYtdIq','i3O/Dxa','W6LwuH9z','WOHJWRBdUZ4','CSoPsGldPa','W6HiW6tcPLC','WPDEmG','W75Njx/cPq','WQJcRxJdLt4','WPmSWQdcSa','W5bRnvhdIW','hXtdSvyN','W7/cS8kxWPDC','WPCBxqldM8oblYPFk8kWkW','Aw5KW5BdPG','W7TPaxddHW','bmouW6ZdQsi+A1tcR8kYW4FcRcq','dCovWOtdQeK','W6zBn3FdPa','hmoVWQ8FnW','irFcHsmH','oraRf8kT','v8oNWOldGN8','mmkFuYFdKG','W448W4/cJmk/','W7FcTmkZuKG','W5fjWOddGSkw','phjKW4pdQq','W5XRWOfcva','eXJdGmoSuW','W7b0WP8otq','WOmMWQhdTYO','W5XTWQLFWRW','W7LUW77dVdm','ESoNjxNdRwVdMSkDWQxdTcupW6u','jCoWW77cVJS','qmoPgtddTW','uZjndJ/cSNxcVCkZgI/cNmo2','WOq2W6NcSCoEW74kW7pdPCoaW5LbWOi','DeeSW65/','W6JcJSoWW6BdJCoGW4m','rmkwW58Baa','o8kXnJJcQG','qSoJcaZdTq','WOrrjaRcIG','W4TisHJdKa','W6TkAWLi','W4r4W6VdQqC','B3u1W6Lc','W6BdH8oWW51t','Dmo+vWBdSG','W5rOWOuxuq','WQlcTmo+W5dcLa','W6vOBJLD','WOaXWPW','W7/cPCkgWQS','W6zVhfVcSq','xSohWOddUuG','n0ZdLq','WR47WObqWRm','b8kHWQuFpa','WR7cOvRdPvS','kdRdP8o6Cq','W7/cT0NcSq','kCo9W7BdUJC','WRGVuWddGa','iSk9WQSLpa','j2TYW47dHG','aCkzyIxdUW','z8ozj3tcLbvJWQ3cVSoYWRRdPW','W51/AsTu','f3JcOSk9W48','W4HZW44PW6JcJSoDwvimWQKZFG','W79wW6ddJJi'];a0_0xd71e=function(){return _0x5b4ba7;};return a0_0xd71e();}function a0_0x1954(_0x419918,_0x258f16){_0x419918=_0x419918-(-0x269e+-0x3c9+0x4*0xb11);const _0x5ed1d9=a0_0xd71e();let _0x3d7ba0=_0x5ed1d9[_0x419918];if(a0_0x1954['lISRYs']===undefined){var _0x2a7922=function(_0x469cf2){const _0x3c2e1f='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3423cf='',_0x265799='';for(let _0x224df4=-0x10ba+0x34b+0xd6f*0x1,_0x6a02b0,_0x187570,_0x4e82d0=-0x3c3+0xf1f+-0x2*0x5ae;_0x187570=_0x469cf2['charAt'](_0x4e82d0++);~_0x187570&&(_0x6a02b0=_0x224df4%(0x556+0x1ff3+-0x149*0x1d)?_0x6a02b0*(0x1d4e+-0x1c61*-0x1+-0x396f)+_0x187570:_0x187570,_0x224df4++%(-0x3e6*-0x2+-0xb*-0x137+-0x1525))?_0x3423cf+=String['fromCharCode'](0x141d+0x147f+-0x279d&_0x6a02b0>>(-(0x221+-0x1*-0x2482+-0x26a1)*_0x224df4&-0x2bc+-0x124*0x3+0x62e)):0x1faf+-0xc7*0x29+-0x2*-0x18){_0x187570=_0x3c2e1f['indexOf'](_0x187570);}for(let _0x2a939d=0x1d44+-0x982+-0x12*0x119,_0x3d689b=_0x3423cf['length'];_0x2a939d<_0x3d689b;_0x2a939d++){_0x265799+='%'+('00'+_0x3423cf['charCodeAt'](_0x2a939d)['toString'](-0x518+-0x1c8f+0x21b7))['slice'](-(-0x8f3+0x1a*-0x133+0x2823*0x1));}return decodeURIComponent(_0x265799);};const _0x11baf9=function(_0x413430,_0x4018e1){let _0x3ee801=[],_0x3743c=0x214a+0x196c*0x1+-0x3ab6,_0x4c282e,_0x561b36='';_0x413430=_0x2a7922(_0x413430);let _0xb11488;for(_0xb11488=0xbfc*0x2+0x2303*-0x1+0x1*0xb0b;_0xb11488<0x9*-0x265+0x15d1+-0x1*-0xbc;_0xb11488++){_0x3ee801[_0xb11488]=_0xb11488;}for(_0xb11488=-0x513+0xa40+-0x52d*0x1;_0xb11488<0x460+-0x1*0xa76+0x716*0x1;_0xb11488++){_0x3743c=(_0x3743c+_0x3ee801[_0xb11488]+_0x4018e1['charCodeAt'](_0xb11488%_0x4018e1['length']))%(0x1*-0x20ff+0x1537+-0x2*-0x664),_0x4c282e=_0x3ee801[_0xb11488],_0x3ee801[_0xb11488]=_0x3ee801[_0x3743c],_0x3ee801[_0x3743c]=_0x4c282e;}_0xb11488=-0xe3*0x29+-0x1*-0x2051+-0x2*-0x205,_0x3743c=0xc5e*-0x1+0xd41+0xe3*-0x1;for(let _0x1c5e25=0x883+-0x9b3+-0x4*-0x4c;_0x1c5e25<_0x413430['length'];_0x1c5e25++){_0xb11488=(_0xb11488+(-0x1367+-0x11fb+0x2563))%(-0x1ef7+-0x1*-0x16b5+0x942),_0x3743c=(_0x3743c+_0x3ee801[_0xb11488])%(0x989*0x2+-0x1610+0x3fe),_0x4c282e=_0x3ee801[_0xb11488],_0x3ee801[_0xb11488]=_0x3ee801[_0x3743c],_0x3ee801[_0x3743c]=_0x4c282e,_0x561b36+=String['fromCharCode'](_0x413430['charCodeAt'](_0x1c5e25)^_0x3ee801[(_0x3ee801[_0xb11488]+_0x3ee801[_0x3743c])%(0x1189+0x2198+-0x3221)]);}return _0x561b36;};a0_0x1954['lAEpvD']=_0x11baf9,a0_0x1954['ZnEwuV']={},a0_0x1954['lISRYs']=!![];}const _0x419187=_0x5ed1d9[-0x1*0x2702+0x13d*-0x1e+0x4c28],_0x2a6bad=_0x419918+_0x419187,_0x547d3b=a0_0x1954['ZnEwuV'][_0x2a6bad];return!_0x547d3b?(a0_0x1954['HcepTk']===undefined&&(a0_0x1954['HcepTk']=!![]),_0x3d7ba0=a0_0x1954['lAEpvD'](_0x3d7ba0,_0x258f16),a0_0x1954['ZnEwuV'][_0x2a6bad]=_0x3d7ba0):_0x3d7ba0=_0x547d3b,_0x3d7ba0;}async function main(){const _0x3c9570=a0_0x1954,_0x214d93={'TtrcZ':function(_0x5de8ed){return _0x5de8ed();},'cyzuf':function(_0x32fa3f,_0x3e4ac7){return _0x32fa3f||_0x3e4ac7;},'YYWQy':function(_0x370c56,_0x5ad2f9){return _0x370c56(_0x5ad2f9);},'zPcLY':_0x3c9570(0x1f2,'B4Bq')+_0x3c9570(0x1de,')bDx'),'WGlOA':_0x3c9570(0x253,'YOcY'),'GzyNc':function(_0xdbe3ad,_0x44709f){return _0xdbe3ad===_0x44709f;},'xUxUU':_0x3c9570(0x27f,'8K)d')+'g','IsVwb':_0x3c9570(0x215,'GXyH')+_0x3c9570(0x23b,'p%HC')+'r','jQyZu':_0x3c9570(0x26f,'t$ja')+_0x3c9570(0x214,'t$ja')+_0x3c9570(0x1f1,'(wD[')+_0x3c9570(0x24e,'GXyH')+_0x3c9570(0x202,'fuR9'),'oxeff':_0x3c9570(0x279,'^5lE'),'PuuMl':_0x3c9570(0x261,'9v$@')+'fs','lxLWy':_0x3c9570(0x210,'F#$E')+_0x3c9570(0x21e,'YOcY'),'abYuJ':_0x3c9570(0x27c,'myah')+'os','JuZHb':function(_0x1d8d3c,_0x369366,_0x202605,_0x57115e,_0x11014c){return _0x1d8d3c(_0x369366,_0x202605,_0x57115e,_0x11014c);},'GCusd':_0x3c9570(0x228,']^K4')+_0x3c9570(0x29e,'d9sP')+'de','xHJII':_0x3c9570(0x209,'QfQ9')+_0x3c9570(0x21a,'wojR'),'UgppJ':_0x3c9570(0x2b5,'Wp&E')+_0x3c9570(0x260,'B4Bq')+'on','xTTeG':_0x3c9570(0x275,'eJj]')+_0x3c9570(0x289,'eJj]')+_0x3c9570(0x204,'(wD['),'Cvsse':function(_0x351878,_0x4c9351,_0x38be0b){return _0x351878(_0x4c9351,_0x38be0b);},'QHSOn':function(_0x13d756,_0x1d5680,_0x2cb73e){return _0x13d756(_0x1d5680,_0x2cb73e);},'ptgSg':_0x3c9570(0x1e4,'#Gh(')+_0x3c9570(0x20d,'B4Bq'),'OcKZn':function(_0x3d8d02,_0x4e5723,_0x2488fd){return _0x3d8d02(_0x4e5723,_0x2488fd);},'aNPCp':_0x3c9570(0x218,'1N$I'),'QnYLw':function(_0xb651e5,_0x56fdd8){return _0xb651e5!==_0x56fdd8;},'QBeTD':_0x3c9570(0x1f9,'eJj]'),'UxKXQ':function(_0x320ac4,_0x2182c1){return _0x320ac4<_0x2182c1;},'FgNhG':function(_0x4f3c05,_0x4d93a0){return _0x4f3c05(_0x4d93a0);},'oMRKl':_0x3c9570(0x20b,'Y]kc')+_0x3c9570(0x1ea,'QfQ9'),'aGKck':_0x3c9570(0x2cf,'e[4F')+'re','RaHri':function(_0x41da10,_0x49ef15){return _0x41da10(_0x49ef15);},'XTEto':function(_0x267e8b,_0x1d9c08,_0x55d1c8,_0xb3dd56,_0x429053,_0x2efec4){return _0x267e8b(_0x1d9c08,_0x55d1c8,_0xb3dd56,_0x429053,_0x2efec4);},'AzELw':_0x3c9570(0x201,'p%HC')+_0x3c9570(0x2a0,'p%HC')+_0x3c9570(0x2d4,'t$ja'),'PereT':_0x3c9570(0x28a,'zK2m'),'tXLtX':_0x3c9570(0x225,'t$ja')+_0x3c9570(0x264,'^y(Z')+_0x3c9570(0x251,'($a^')+'s','rFWsl':function(_0xd89ea9,_0x4aa024){return _0xd89ea9(_0x4aa024);},'olsOz':function(_0x362b87,_0xc80562){return _0x362b87(_0xc80562);},'CDStI':_0x3c9570(0x241,'x]5@')+_0x3c9570(0x236,'rr]N'),'mtlSY':function(_0x3717ce,_0x38bed0){return _0x3717ce(_0x38bed0);},'TkXpY':_0x3c9570(0x1ec,'B4Bq')+'wn'};let _0x10446d;try{const _0x45ca05=await _0x214d93[_0x3c9570(0x1f7,'p%HC')](readStdin);_0x10446d=JSON[_0x3c9570(0x23d,'O[)j')](_0x214d93[_0x3c9570(0x2d5,'j^Mb')](_0x45ca05,'{}'));}catch{_0x214d93[_0x3c9570(0x294,'yf(c')](emit,{'hookSpecificOutput':{'hookEventName':_0x214d93[_0x3c9570(0x2c7,'F#$E')],'permissionDecision':_0x214d93[_0x3c9570(0x2c3,'yf(c')]}});}const _0xd33a3e=_0x10446d[_0x3c9570(0x259,'fuR9')+_0x3c9570(0x23a,'wXq5')]??{},_0x4af088=_0xd33a3e[_0x3c9570(0x272,'8r@W')+_0x3c9570(0x2bd,'z&x!')+_0x3c9570(0x1e6,'8dtK')]??'',_0x41b66e=_0x214d93[_0x3c9570(0x1eb,'8dtK')](typeof _0xd33a3e[_0x3c9570(0x29b,'8dtK')+'t'],_0x214d93[_0x3c9570(0x21f,'8K)d')])?_0xd33a3e[_0x3c9570(0x1e2,'Wp&E')+'t']:'',_0x414a67=new Set([_0x214d93[_0x3c9570(0x234,'wXq5')],_0x214d93[_0x3c9570(0x2d2,'eJj]')]]);if(_0x414a67[_0x3c9570(0x283,'O[)j')](_0x4af088)){const _0x5db368=[/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 _0x3a091c=null;for(const _0x1f540f of _0x5db368){const _0xd72004=_0x1f540f[_0x3c9570(0x25c,'W(BX')](_0x41b66e);if(_0xd72004?.[-0x3*-0x9db+0x16d+0x1*-0x1efd]){_0x3a091c=_0xd72004[-0xd34+0x752*-0x4+-0x1*-0x2a7d];break;}}!_0x3a091c&&_0x214d93[_0x3c9570(0x278,'73BD')](emit,{'decision':_0x214d93[_0x3c9570(0x25a,'#Gh(')],'reason':_0x3c9570(0x20e,'e[4F')+_0x3c9570(0x267,'tX0x')+_0x3c9570(0x2c9,']^K4')+_0x3c9570(0x246,'Wp&E')+_0x3c9570(0x274,'OQrv')+_0x3c9570(0x1ed,'z]Mo')+_0x3c9570(0x1fa,'j^Mb')+_0x3c9570(0x2dc,'j^Mb')+_0x3c9570(0x24f,'O[)j')+_0x3c9570(0x2ad,'GXyH')+_0x3c9570(0x2a5,'8K)d')+_0x3c9570(0x2af,'eJj]')+_0x3c9570(0x26e,'8K)d')+_0x3c9570(0x295,'z]Mo')+_0x3c9570(0x1ff,'QfQ9')+_0x3c9570(0x1f3,'rr]N')+_0x3c9570(0x281,'^y(Z')+_0x3c9570(0x2c5,'QfQ9')+_0x3c9570(0x250,'O[)j')+_0x3c9570(0x245,'p%HC')+_0x3c9570(0x231,'![Pz')+_0x3c9570(0x2b7,'O[)j')});if(_0x3a091c){const {existsSync:_0x1c3e87,readFileSync:_0x11145d}=await import(_0x214d93[_0x3c9570(0x248,')bDx')]),{join:_0x3208e7}=await import(_0x214d93[_0x3c9570(0x20a,'t$ja')]),{homedir:_0x37b555}=await import(_0x214d93[_0x3c9570(0x200,'OQrv')]),_0x4eb0a5=_0x214d93[_0x3c9570(0x2c0,'yf(c')](_0x3208e7,_0x214d93[_0x3c9570(0x1f4,'Y]kc')](_0x37b555),_0x214d93[_0x3c9570(0x2d1,'LJQq')],_0x214d93[_0x3c9570(0x20f,'yf(c')],_0x214d93[_0x3c9570(0x22c,'F#$E')]),_0x199a55=_0x214d93[_0x3c9570(0x2dd,'x]5@')](_0x3208e7,_0x214d93[_0x3c9570(0x1e1,'fuR9')](_0x37b555),_0x214d93[_0x3c9570(0x2a7,'wXq5')],_0x214d93[_0x3c9570(0x28b,'9v$@')],_0x214d93[_0x3c9570(0x1ee,'8r@W')]),_0x4150c8=_0x214d93[_0x3c9570(0x2ce,'8r@W')](_0x3208e7,_0x4eb0a5,_0x3c9570(0x2d0,'^k%b')+'n-'+_0x3a091c+_0x3c9570(0x28f,'F#$E')),_0x2033f9=_0x214d93[_0x3c9570(0x2ab,'F#$E')](_0x3208e7,_0x199a55,_0x3a091c+_0x3c9570(0x222,'YNY5'));let _0x269468=_0x214d93[_0x3c9570(0x276,'Y]kc')];if(_0x214d93[_0x3c9570(0x286,'8K)d')](_0x1c3e87,_0x2033f9))try{_0x269468=JSON[_0x3c9570(0x27d,'zK2m')](_0x214d93[_0x3c9570(0x244,'GXyH')](_0x11145d,_0x2033f9,_0x214d93[_0x3c9570(0x1e5,')bDx')]))[_0x3c9570(0x282,'Xra3')]||_0x214d93[_0x3c9570(0x27b,'z&x!')];}catch{}if(_0x214d93[_0x3c9570(0x263,']^K4')](_0x269468,_0x214d93[_0x3c9570(0x298,'c](G')])){if(_0x214d93[_0x3c9570(0x1f6,')bDx')](_0x1c3e87,_0x4150c8))try{const _0x507026=JSON[_0x3c9570(0x273,'W(BX')](_0x214d93[_0x3c9570(0x2a1,'rr]N')](_0x11145d,_0x4150c8,_0x214d93[_0x3c9570(0x2cb,'GXyH')])),_0x52d4eb=_0x507026[_0x3c9570(0x1e3,'e[4F')+_0x3c9570(0x213,'z&x!')+_0x3c9570(0x22b,'j^Mb')]??_0x507026[_0x3c9570(0x21c,'8dtK')+_0x3c9570(0x29c,'myah')+'re']??0x17e7*0x1+-0x6*-0x313+-0x1*0x2a59;_0x214d93[_0x3c9570(0x242,'GXyH')](_0x52d4eb,-0x16*-0x18d+-0x1dd5+-0x3ef)&&_0x214d93[_0x3c9570(0x25b,'Xra3')](emit,{'decision':_0x214d93[_0x3c9570(0x2cc,'rr]N')],'reason':_0x3c9570(0x2b8,'1N$I')+_0x3c9570(0x2c6,'wXq5')+_0x3c9570(0x27e,'Wp&E')+_0x3c9570(0x288,'6@3v')+_0x3c9570(0x26d,'(wD[')+_0x3c9570(0x2ca,'9v$@')+_0x3c9570(0x249,'Xra3')+_0x3c9570(0x293,'^k%b')+_0x52d4eb+(_0x3c9570(0x2b6,'G#h5')+_0x3c9570(0x262,'tX0x')+_0x3c9570(0x297,'![Pz')+_0x3c9570(0x1ef,'z]Mo'))+_0x3a091c+(_0x3c9570(0x271,'9v$@')+_0x3c9570(0x220,'z&x!')+_0x3c9570(0x223,'eJj]')+_0x3c9570(0x291,'QfQ9')+_0x3c9570(0x258,'x]5@')+_0x3c9570(0x21d,'t$ja')+_0x3c9570(0x2c4,'B4Bq')+_0x3c9570(0x28d,'![Pz')+_0x3c9570(0x238,'d9sP')+_0x3c9570(0x23c,'^y(Z')+_0x3c9570(0x1fb,'F#$E')+_0x3c9570(0x24c,'zK2m')+_0x3c9570(0x25e,'p%HC')+_0x3c9570(0x1e9,'F#$E')+_0x3c9570(0x1f0,'t$ja')+_0x3c9570(0x252,'6@3v')+_0x3c9570(0x266,'^5lE')+'.')});}catch{}else _0x214d93[_0x3c9570(0x2a9,'fuR9')](emit,{'decision':_0x214d93[_0x3c9570(0x221,'j^Mb')],'reason':_0x3c9570(0x240,'W(BX')+_0x3c9570(0x2bf,'rr]N')+_0x3c9570(0x24d,'#Gh(')+_0x3c9570(0x255,'x]5@')+_0x3c9570(0x2b4,'^k%b')+_0x3c9570(0x2cd,'e[4F')+_0x3c9570(0x237,'Xra3')+_0x3c9570(0x239,'LJQq')+_0x3c9570(0x243,'(wD[')+_0x3c9570(0x205,'c](G')+_0x3c9570(0x2ac,'Wp&E')+'k\x20'+_0x3a091c+(_0x3c9570(0x203,'O[)j')+'r=')+_0x269468+(_0x3c9570(0x287,']^K4')+_0x3c9570(0x2b3,')bDx')+_0x3c9570(0x265,'t$ja')+_0x3c9570(0x22d,'RnE5')+_0x3c9570(0x270,'^k%b')+_0x3c9570(0x2b0,'^k%b')+_0x3c9570(0x1dd,'1N$I')+_0x3c9570(0x232,')bDx')+_0x3c9570(0x2c2,'F#$E')+_0x3c9570(0x2db,'8K)d')+_0x3c9570(0x2bb,'yf(c')+_0x3c9570(0x23f,'yf(c')+_0x3c9570(0x2a3,'t$ja')+_0x3c9570(0x2ba,'^k%b'))});}}}const _0x23733e=new Set([_0x214d93[_0x3c9570(0x2a8,'j^Mb')],_0x214d93[_0x3c9570(0x296,'^y(Z')]]);!_0x23733e[_0x3c9570(0x21b,']^K4')](_0x4af088)&&_0x214d93[_0x3c9570(0x1fd,'($a^')](emit,{'hookSpecificOutput':{'hookEventName':_0x214d93[_0x3c9570(0x290,'^y(Z')],'permissionDecision':_0x214d93[_0x3c9570(0x29f,'tX0x')]}});const _0x5ed689=_0x214d93[_0x3c9570(0x1f6,')bDx')](dirname,_0x214d93[_0x3c9570(0x206,'LJQq')](fileURLToPath,import.meta.url)),_0x15e59a=_0x214d93[_0x3c9570(0x277,'![Pz')](resolve,_0x5ed689,'..',_0x214d93[_0x3c9570(0x2b2,'YNY5')],_0x214d93[_0x3c9570(0x285,'zK2m')],_0x214d93[_0x3c9570(0x1e0,'tX0x')]);!_0x214d93[_0x3c9570(0x26c,'j^Mb')](existsSync,_0x15e59a)&&_0x214d93[_0x3c9570(0x299,'LJQq')](emit,{'hookSpecificOutput':{'hookEventName':_0x214d93[_0x3c9570(0x22a,'OQrv')],'permissionDecision':_0x214d93[_0x3c9570(0x28e,'z&x!')]}});let _0x2a0c33;try{({trackSpawn:_0x2a0c33}=await import(_0x15e59a));}catch{_0x214d93[_0x3c9570(0x27a,'6@3v')](emit,{'hookSpecificOutput':{'hookEventName':_0x214d93[_0x3c9570(0x2b9,'![Pz')],'permissionDecision':_0x214d93[_0x3c9570(0x284,'LJQq')]}});}const _0x11d82b=/JUSTIFICATION:\s*([\s\S]+?)(?=\n[A-Z_]+:|$)/i[_0x3c9570(0x25f,'wojR')](_0x41b66e),_0x2c1242=_0x11d82b?.[-0x1295+0xef1+0x3a5*0x1]?.[_0x3c9570(0x29d,'fuR9')](),_0x531d43=/INVOCATION_MODE:\s*(sequential|parallel)/i[_0x3c9570(0x1e7,'z&x!')](_0x41b66e),_0x124886=_0x531d43?.[0x1*-0xd9f+-0xe*-0x1ac+0x2*-0x4e4]?.[_0x3c9570(0x20c,'^5lE')+_0x3c9570(0x2c8,'Y]kc')+'e']()??_0x214d93[_0x3c9570(0x211,'B4Bq')];let _0x3d8b03;try{_0x3d8b03=_0x214d93[_0x3c9570(0x257,'Xra3')](_0x2a0c33,{'agentType':_0x4af088,'parentAgent':_0x214d93[_0x3c9570(0x1fc,'QfQ9')],'prompt':_0x41b66e,'invocationMode':_0x124886,'justification':_0x2c1242});}catch{_0x214d93[_0x3c9570(0x2bc,'($a^')](emit,{'hookSpecificOutput':{'hookEventName':_0x214d93[_0x3c9570(0x2da,'YOcY')],'permissionDecision':_0x214d93[_0x3c9570(0x1df,'eJj]')]}});}if(!_0x3d8b03[_0x3c9570(0x269,'W(BX')+_0x3c9570(0x22f,')bDx')]){const _0x42d3e6=[_0x3c9570(0x2b1,'Wp&E')+_0x3c9570(0x219,'zK2m')+_0x3c9570(0x24b,'^y(Z')+_0x3c9570(0x25d,'QfQ9')+_0x3c9570(0x254,'p%HC')+_0x3d8b03[_0x3c9570(0x256,'B4Bq')+'n'],_0x3d8b03[_0x3c9570(0x230,'Xra3')+_0x3c9570(0x224,'d9sP')]?'\x0a'+_0x3d8b03[_0x3c9570(0x29a,'W(BX')+_0x3c9570(0x229,'W(BX')]:''][_0x3c9570(0x247,'6@3v')]('');_0x214d93[_0x3c9570(0x28c,'eJj]')](emit,{'decision':_0x214d93[_0x3c9570(0x23e,')bDx')],'reason':_0x42d3e6});}_0x214d93[_0x3c9570(0x1fd,'($a^')](emit,{'hookSpecificOutput':{'hookEventName':_0x214d93[_0x3c9570(0x2aa,'fuR9')],'permissionDecision':_0x214d93[_0x3c9570(0x227,'z]Mo')]}});}main()[a0_0x120501(0x292,'G#h5')](()=>emit({'hookSpecificOutput':{'hookEventName':a0_0x120501(0x24a,'F#$E')+a0_0x120501(0x2d8,'tX0x'),'permissionDecision':a0_0x120501(0x2a4,'1N$I')}}));
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')}}));
@@ -34,7 +34,9 @@ if ! echo "$TOOL_NAME" | grep -qE "$ROUTINECODE_MCP"; then
34
34
  fi
35
35
 
36
36
  # Free MCP tools
37
- FREE_TOOLS="credit_check|share_generate_candidates|share_issue|share_verify_status|share_confirm_post|block_screen_render|check_escalation|get_verification_state|classify_task|lock_files|release_files|check_conflicts"
37
+ # W3: save_evidence/score_verification/auto_score 추가 — 게이트 필수 검증은 무과금
38
+ # (engine action-cost-map.ts TOOL_FREE_LIST와 동기 유지 필수)
39
+ FREE_TOOLS="credit_check|share_generate_candidates|share_issue|share_verify_status|share_confirm_post|block_screen_render|check_escalation|get_verification_state|classify_task|lock_files|release_files|check_conflicts|save_evidence|score_verification|auto_score"
38
40
  BASE_TOOL=$(echo "$TOOL_NAME" | sed -E 's/^mcp__[a-zA-Z0-9_]+__//')
39
41
  if echo "$BASE_TOOL" | grep -qE "^($FREE_TOOLS)$"; then
40
42
  exit 0
@@ -169,7 +171,7 @@ esac
169
171
  OPEN_MARK="$HOME/.routinecode/.recharge-opened-$(date -u +%Y%m%d 2>/dev/null)"
170
172
  if [ ! -f "$OPEN_MARK" ]; then
171
173
  touch "$OPEN_MARK" 2>/dev/null || true
172
- RC_RECHARGE_URL="https://routinecode.routinecrew.net/recharge/write"
174
+ RC_RECHARGE_URL="https://routinecode.routinecrew.net/recharge"
173
175
  (
174
176
  if command -v open >/dev/null 2>&1; then open "$RC_RECHARGE_URL" >/dev/null 2>&1
175
177
  elif command -v xdg-open >/dev/null 2>&1; then xdg-open "$RC_RECHARGE_URL" >/dev/null 2>&1
@@ -196,7 +198,7 @@ except Exception:
196
198
  # the user (legacy {'decision':'block'} only feeds it to the model).
197
199
  print(json.dumps({'hookSpecificOutput': {'hookEventName': 'PreToolUse', 'permissionDecision': 'deny', 'permissionDecisionReason': msg}}))
198
200
  " 2>/dev/null)
199
- [ -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."}}'
200
202
  echo "$BLOCK_JSON"
201
203
 
202
204
  exit 0
@@ -71,6 +71,25 @@ except:
71
71
  " 2>/dev/null)
72
72
  fi
73
73
 
74
+ # --- W1a: MCP-liveness (degraded mode) ---
75
+ # 이하 3개 fail-closed 게이트(BUILD unknown/empty·DEV_SCORE 부재·design score)는 모두
76
+ # MCP 전용 산출물(build_check/save_evidence/auto_score/score_verification)을 요구한다.
77
+ # MCP 미연결 세션(mcp-alive 부재/stale>24h)에서는 산출물 생성이 불가능해 영구 데드락이
78
+ # 되므로, 고지 후 3개 게이트를 생략한다(연결 세션의 강제력은 불변).
79
+ RC_RUNDIR_GATE="${XDG_RUNTIME_DIR:-$HOME/.routinecode/run}"
80
+ MCP_ALIVE=false
81
+ for MARKER in "$RC_RUNDIR_GATE/mcp-alive" "/tmp/mcp-alive"; do
82
+ if [ -f "$MARKER" ]; then
83
+ NOW_S=$(date +%s)
84
+ MT_S=$(stat -f %m "$MARKER" 2>/dev/null || stat -c %Y "$MARKER" 2>/dev/null || echo 0)
85
+ if [ $((NOW_S - MT_S)) -lt 86400 ]; then MCP_ALIVE=true; break; fi
86
+ fi
87
+ done
88
+ if [ "$MCP_ALIVE" != "true" ]; then
89
+ echo '{"systemMessage":"[mark-gate] MCP 미연결 감지 — build/dev-score/design 게이트 생략(연결 세션에서는 정상 작동). 완료 전 검증을 수동 확인하세요."}'
90
+ exit 0
91
+ fi
92
+
74
93
  # 빌드 실패 상태 — block
75
94
  if [ "$BUILD_OK" = "false" ]; then
76
95
  echo "$(python3 -c "
@@ -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
@@ -93,6 +93,9 @@ rm -f "$STATE_FILE"
93
93
  # Agent tracker: 1시간 넘은 stale state + 5초 넘은 stale lock 제거
94
94
  find /tmp -maxdepth 1 -name 'routinecode-agent-state-*.json' -mmin +60 -delete 2>/dev/null
95
95
  find /tmp -maxdepth 1 -name 'routinecode-agent-state-*.json.lock' -mmin +1 -delete 2>/dev/null
96
+ # W1a: stale(>24h) MCP-liveness 마커 제거 — 신선한 마커는 MCP 서버가 기동 시 직접 갱신한다.
97
+ find "$RC_RUNDIR" -maxdepth 1 -name 'mcp-alive' -mmin +1440 -delete 2>/dev/null
98
+ find /tmp -maxdepth 1 -name 'mcp-alive' -mmin +1440 -delete 2>/dev/null
96
99
  find /tmp -maxdepth 1 -name 'routinecode-agent-state-*.json.tmp.*' -mmin +1 -delete 2>/dev/null
97
100
 
98
101
  # Deploy tracker: 24h 초과 라인만 삭제 (Stop hook v2가 참조하는 JSONL)