@routinecrew/routinecode 2.31.36 → 2.31.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/prompt-vault.js +1 -1
- package/bin/setup.js +1 -1
- package/hooks/lib/rdpe_maturity.py +128 -0
- package/hooks/lib/rdpe_report.py +47 -0
- package/hooks/lib/rdpe_sanitize.py +90 -0
- package/hooks/lib/sync_manager.py +5 -1
- package/hooks/post-agent-return.sh +118 -4
- package/hooks/pre-agent-spawn.mjs +1 -1
- package/hooks/pre-credit-guard.sh +3 -1
- package/hooks/pre-mark-complete.sh +19 -0
- package/hooks/session-start.sh +3 -0
- package/hooks/stop-usage-metrics.sh +211 -74
- package/hooks/tests/gate-integration.test.sh +106 -0
- package/mcp-db-manager/dist/analyzers/duplicate-detector.js +1 -1
- package/mcp-db-manager/dist/core/model-parser.js +1 -1
- package/mcp-db-manager/dist/core/schema-reader.js +1 -1
- package/mcp-db-manager/dist/executors/migration-executor.js +1 -1
- package/mcp-db-manager/dist/generators/migration-generator.js +1 -1
- package/mcp-db-manager/dist/index.js +1 -1
- package/mcp-db-manager/dist/validators/schema-validator.js +1 -1
- package/mcp-dev-tester/dist/analyzers/auth-diagnoser.js +1 -1
- package/mcp-dev-tester/dist/analyzers/backend-analyzer.js +1 -1
- package/mcp-dev-tester/dist/analyzers/endpoint-diagnoser.js +1 -1
- package/mcp-dev-tester/dist/analyzers/frontend-analyzer.js +1 -1
- package/mcp-dev-tester/dist/analyzers/runtime-diagnoser.js +1 -1
- package/mcp-dev-tester/dist/analyzers/type-comparator.js +1 -1
- package/mcp-dev-tester/dist/analyzers/validation-diagnoser.js +1 -1
- package/mcp-dev-tester/dist/browser/playwright-manager.js +1 -1
- package/mcp-dev-tester/dist/browser/ui-tester.js +1 -1
- package/mcp-dev-tester/dist/config/project-config.js +1 -1
- package/mcp-dev-tester/dist/index.js +1 -1
- package/mcp-dev-tester/dist/testers/api-tester.js +1 -1
- package/mcp-doc-fetcher/dist/index.js +1 -1
- package/mcp-html-renderer/dist/index.js +1 -1
- package/mcp-html-renderer/dist/preview.js +1 -1
- package/mcp-html-renderer/dist/template-engine.js +1 -1
- package/mcp-intelligence/dist/concept-catalog.js +1 -1
- package/mcp-intelligence/dist/concept-server-proxy.js +1 -1
- package/mcp-intelligence/dist/config-auth.js +1 -1
- package/mcp-intelligence/dist/contracts.generated.js +1 -1
- package/mcp-intelligence/dist/domain-templates.js +1 -1
- package/mcp-intelligence/dist/grounding.js +1 -1
- package/mcp-intelligence/dist/handlers.js +1 -1
- package/mcp-intelligence/dist/index.js +1 -1
- package/mcp-intelligence/dist/intelligence-file.js +1 -1
- package/mcp-intelligence/dist/knowledge-critic.js +1 -1
- package/mcp-intelligence/dist/knowledge-handlers.js +1 -1
- package/mcp-intelligence/dist/mention-extractor.js +1 -1
- package/mcp-intelligence/dist/provenance.js +1 -1
- package/mcp-intelligence/dist/semantic-embedder.js +1 -1
- package/mcp-log-watcher/dist/config-auth.js +1 -1
- package/mcp-log-watcher/dist/file-watcher.js +1 -1
- package/mcp-log-watcher/dist/index.js +1 -1
- package/mcp-log-watcher/dist/known-solutions.js +1 -1
- package/mcp-log-watcher/dist/log-store.js +1 -1
- package/mcp-log-watcher/dist/websocket-server.js +1 -1
- package/mcp-plan-manager/dist/__tests__/plan-parser.test.js +1 -1
- package/mcp-plan-manager/dist/file-ops.js +1 -1
- package/mcp-plan-manager/dist/index.js +1 -1
- package/mcp-plan-manager/dist/plan-parser.js +1 -1
- package/mcp-project-context/dist/git-ops.js +1 -1
- package/mcp-project-context/dist/index.js +1 -1
- package/mcp-project-context/dist/project-analysis.js +1 -1
- package/mcp-routinecode/dist/agent-tracker.js +1 -1
- package/mcp-routinecode/dist/blast-radius.js +1 -1
- package/mcp-routinecode/dist/config-auth.js +1 -1
- package/mcp-routinecode/dist/contracts.generated.js +1 -1
- package/mcp-routinecode/dist/explorer-advisor.js +1 -1
- package/mcp-routinecode/dist/failure-tracker.js +1 -1
- package/mcp-routinecode/dist/file-lock-registry.js +1 -1
- package/mcp-routinecode/dist/file-risk-scorer.js +1 -1
- package/mcp-routinecode/dist/index.js +1 -1
- package/mcp-routinecode/dist/known-solutions.js +1 -1
- package/mcp-routinecode/dist/ledger-miner.js +1 -1
- package/mcp-routinecode/dist/observed-draft.js +1 -1
- package/mcp-routinecode/dist/pattern-matcher.js +1 -1
- package/mcp-routinecode/dist/routines.js +1 -1
- package/mcp-routinecode/dist/rule-engine.js +1 -1
- package/mcp-routinecode/dist/rule-promoter.js +1 -1
- package/mcp-routinecode/dist/telemetry-analyzer.js +1 -1
- package/mcp-routinecode/dist/verification.js +1 -1
- package/mcp-routinecode/dist/viral-loop.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""RDPE 오염 데이터 정화 — daily.json 의 RDPE 필드를 리셋하고 토큰 집계는 보존한다.
|
|
3
|
+
|
|
4
|
+
배경(RDPE v8): 과거 daily.json 의 RDPE 필드가 버그로 오염됐다.
|
|
5
|
+
- turns: tool_result(type:user)를 턴으로 오산 → 52만 등 폭증
|
|
6
|
+
- task_sigs: slice 결함(영구 0)·per-message 구버전·target_shape 원문/IP 노출 혼재
|
|
7
|
+
- mcp_calls/by_server: slice(last_user_idx+1:) 기반이라 0
|
|
8
|
+
토큰 집계(input/output/cache_*)는 정확하므로 보존한다.
|
|
9
|
+
|
|
10
|
+
정책: 과거 복구가 아니라 **삭제 + 재축적**. 오염 필드를 리셋하면, 다음 세션부터
|
|
11
|
+
수정된 stop-usage-metrics 로직(user턴 단위 sig + target_shape + 정확한 turns)이
|
|
12
|
+
깨끗하게 다시 쌓는다. E_lower(자동캐시 net)는 재포지셔닝에서 보류라 과거 turns 불요.
|
|
13
|
+
|
|
14
|
+
사용: python3 rdpe_sanitize.py # dry-run(미리보기, 쓰기 안 함)
|
|
15
|
+
python3 rdpe_sanitize.py --apply # 백업 후 실제 정화
|
|
16
|
+
"""
|
|
17
|
+
import os
|
|
18
|
+
import sys
|
|
19
|
+
import json
|
|
20
|
+
import shutil
|
|
21
|
+
|
|
22
|
+
USAGE = os.path.join(os.path.expanduser('~'), '.' + 'routinecode', 'usage')
|
|
23
|
+
DAILY = os.path.join(USAGE, 'daily.json')
|
|
24
|
+
RDPE_DIR = os.path.join(os.path.expanduser('~'), '.' + 'routinecode', 'rdpe')
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def main():
|
|
28
|
+
apply = '--apply' in sys.argv
|
|
29
|
+
try:
|
|
30
|
+
with open(DAILY) as f:
|
|
31
|
+
d = json.load(f)
|
|
32
|
+
except Exception as e:
|
|
33
|
+
print('daily.json 읽기 실패:', e)
|
|
34
|
+
return 1
|
|
35
|
+
|
|
36
|
+
days = 0
|
|
37
|
+
turns_sum = 0
|
|
38
|
+
sigs_sum = 0
|
|
39
|
+
leak = 0
|
|
40
|
+
for date, day in d.items():
|
|
41
|
+
if not isinstance(day, dict):
|
|
42
|
+
continue
|
|
43
|
+
days += 1
|
|
44
|
+
if isinstance(day.get('turns'), int):
|
|
45
|
+
turns_sum += day['turns']
|
|
46
|
+
ts = day.get('task_sigs', {})
|
|
47
|
+
if isinstance(ts, dict):
|
|
48
|
+
sigs_sum += len(ts)
|
|
49
|
+
for sig, v in ts.items():
|
|
50
|
+
sh = (v.get('shape', '') if isinstance(v, dict) else '')
|
|
51
|
+
if any(c in sh for c in ('=', '@')) or '.' in sh.split(':')[-1][:1]:
|
|
52
|
+
pass
|
|
53
|
+
import re as _re
|
|
54
|
+
if _re.search(r'\d+\.\d+\.\d+\.\d+|=|@', sh):
|
|
55
|
+
leak += 1
|
|
56
|
+
# 리셋 (토큰 보존)
|
|
57
|
+
day['turns'] = 0
|
|
58
|
+
day['sessions'] = []
|
|
59
|
+
day['task_sigs'] = {}
|
|
60
|
+
day['mcp_calls'] = 0
|
|
61
|
+
day['mcp_calls_by_server'] = {}
|
|
62
|
+
|
|
63
|
+
print('=== RDPE 정화 요약 ===')
|
|
64
|
+
print(' 대상 일수 : %d' % days)
|
|
65
|
+
print(' 리셋되는 turns 합 : %d (오염 폭증분 포함)' % turns_sum)
|
|
66
|
+
print(' 제거되는 task_sigs: %d (구버전/오염 sig)' % sigs_sum)
|
|
67
|
+
print(' 그중 원문/IP 노출 : %d건' % leak)
|
|
68
|
+
print(' 보존 : tokens(input/output/cache_read/cache_create) 전체')
|
|
69
|
+
if apply:
|
|
70
|
+
try:
|
|
71
|
+
bak = DAILY + '.bak-presanitize'
|
|
72
|
+
shutil.copy(DAILY, bak)
|
|
73
|
+
with open(DAILY, 'w') as f:
|
|
74
|
+
json.dump(d, f, ensure_ascii=False, indent=2)
|
|
75
|
+
# routines.json 도 구버전이므로 제거(다음 세션에 재생성).
|
|
76
|
+
rp = os.path.join(RDPE_DIR, 'routines.json')
|
|
77
|
+
if os.path.exists(rp):
|
|
78
|
+
os.remove(rp)
|
|
79
|
+
print(' ✅ 적용 완료. 백업: %s' % os.path.basename(bak))
|
|
80
|
+
print(' routines.json 제거(다음 세션 재생성). 미래 세션부터 깨끗히 재축적.')
|
|
81
|
+
except Exception as e:
|
|
82
|
+
print(' ✗ 적용 실패:', e)
|
|
83
|
+
return 1
|
|
84
|
+
else:
|
|
85
|
+
print(' (dry-run — 쓰기 안 함. 실제 정화는 --apply)')
|
|
86
|
+
return 0
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
if __name__ == '__main__':
|
|
90
|
+
sys.exit(main())
|
|
@@ -458,7 +458,11 @@ def _transform(e, user_id, tenant_id=None):
|
|
|
458
458
|
if k in e.get("metadata", {}):
|
|
459
459
|
metadata[k] = e["metadata"][k]
|
|
460
460
|
elif event_type == "agent_spawn":
|
|
461
|
-
|
|
461
|
+
# agent_type/action/duration_sec + 서브에이전트 실측 토큰 (post-agent-return.sh 포착분).
|
|
462
|
+
# 토큰 5키는 growth usage.dto METADATA_ALLOWED_KEYS에 이미 수용됨(서버 변경 불요).
|
|
463
|
+
for k in ("agent_type", "action", "duration_sec",
|
|
464
|
+
"input_tokens", "output_tokens", "cache_read_tokens",
|
|
465
|
+
"cache_create_tokens", "total_tokens"):
|
|
462
466
|
if k in e.get("metadata", {}):
|
|
463
467
|
metadata[k] = e["metadata"][k]
|
|
464
468
|
elif event_type == "build_result":
|
|
@@ -112,6 +112,107 @@ try:
|
|
|
112
112
|
except Exception as e:
|
|
113
113
|
print(f"[ledger-error] {type(e).__name__}", file=sys.stderr)
|
|
114
114
|
|
|
115
|
+
# 서브에이전트 실측 토큰 포착 (하네스 권위 transcript의 usage 합산 — 자가보고 아님)
|
|
116
|
+
# 소스: <main-transcript>.jsonl 에서 .jsonl 제거 + /subagents/agent-<id>.jsonl
|
|
117
|
+
# 각 서브에이전트 transcript 는 isolated context 라 메인 turn 'tokens' 이벤트와 중복계상 없음.
|
|
118
|
+
# 이 토큰이 곧 "위임으로 메인 대화에서 덜어낸 비용" = 절감 측정의 실측 소스.
|
|
119
|
+
def _sum_subagent_usage(jsonl_path):
|
|
120
|
+
ti = to = tcr = tcc = 0
|
|
121
|
+
try:
|
|
122
|
+
with open(jsonl_path) as _f:
|
|
123
|
+
for _line in _f:
|
|
124
|
+
_line = _line.strip()
|
|
125
|
+
if not _line:
|
|
126
|
+
continue
|
|
127
|
+
try:
|
|
128
|
+
_obj = json.loads(_line)
|
|
129
|
+
except Exception:
|
|
130
|
+
continue
|
|
131
|
+
if not isinstance(_obj, dict):
|
|
132
|
+
continue
|
|
133
|
+
# assistant 메시지의 message.usage (Anthropic usage 스키마)
|
|
134
|
+
_msg = _obj.get("message")
|
|
135
|
+
_u = _msg.get("usage") if isinstance(_msg, dict) else None
|
|
136
|
+
if not isinstance(_u, dict):
|
|
137
|
+
continue
|
|
138
|
+
ti += int(_u.get("input_tokens", 0) or 0)
|
|
139
|
+
to += int(_u.get("output_tokens", 0) or 0)
|
|
140
|
+
tcr += int(_u.get("cache_read_input_tokens", 0) or 0)
|
|
141
|
+
tcc += int(_u.get("cache_creation_input_tokens", 0) or 0)
|
|
142
|
+
except Exception:
|
|
143
|
+
return None
|
|
144
|
+
if (ti + to + tcr + tcc) == 0:
|
|
145
|
+
return None
|
|
146
|
+
return {"input_tokens": ti, "output_tokens": to, "cache_read_tokens": tcr,
|
|
147
|
+
"cache_create_tokens": tcc, "total_tokens": ti + to + tcr + tcc}
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
def _resolve_subagent_jsonl(inp_obj, log_dir):
|
|
151
|
+
"""이 복귀에 해당하는 서브에이전트 transcript 경로를 유도. 추측 금지: transcript_path 기반."""
|
|
152
|
+
tp = inp_obj.get("transcript_path", "") or ""
|
|
153
|
+
if not tp.endswith(".jsonl"):
|
|
154
|
+
return None, None
|
|
155
|
+
sub_dir = tp[:-len(".jsonl")] + "/subagents"
|
|
156
|
+
if not os.path.isdir(sub_dir):
|
|
157
|
+
return None, None
|
|
158
|
+
# 1순위: tool_use_id ↔ meta.json toolUseId 정확 매칭 (유니크, 중복계상 원천 차단)
|
|
159
|
+
tuid = inp_obj.get("tool_use_id", "") or ""
|
|
160
|
+
if tuid:
|
|
161
|
+
try:
|
|
162
|
+
for _name in os.listdir(sub_dir):
|
|
163
|
+
if not _name.endswith(".meta.json"):
|
|
164
|
+
continue
|
|
165
|
+
try:
|
|
166
|
+
_meta = json.load(open(os.path.join(sub_dir, _name)))
|
|
167
|
+
except Exception:
|
|
168
|
+
continue
|
|
169
|
+
if _meta.get("toolUseId") == tuid:
|
|
170
|
+
_base = _name[:-len(".meta.json")]
|
|
171
|
+
_jp = os.path.join(sub_dir, _base + ".jsonl")
|
|
172
|
+
if os.path.isfile(_jp):
|
|
173
|
+
return _jp, _base
|
|
174
|
+
except Exception:
|
|
175
|
+
pass
|
|
176
|
+
# 2순위(fallback): seen 커서에 없는 최신 mtime agent-*.jsonl
|
|
177
|
+
try:
|
|
178
|
+
seen_path = os.path.join(log_dir, ".seen-subagents.json")
|
|
179
|
+
try:
|
|
180
|
+
seen = set(json.load(open(seen_path)))
|
|
181
|
+
except Exception:
|
|
182
|
+
seen = set()
|
|
183
|
+
cands = []
|
|
184
|
+
for _name in os.listdir(sub_dir):
|
|
185
|
+
if _name.startswith("agent-") and _name.endswith(".jsonl"):
|
|
186
|
+
_base = _name[:-len(".jsonl")]
|
|
187
|
+
if _base not in seen:
|
|
188
|
+
_jp = os.path.join(sub_dir, _name)
|
|
189
|
+
cands.append((os.path.getmtime(_jp), _jp, _base))
|
|
190
|
+
if cands:
|
|
191
|
+
cands.sort(reverse=True)
|
|
192
|
+
return cands[0][1], cands[0][2]
|
|
193
|
+
except Exception:
|
|
194
|
+
pass
|
|
195
|
+
return None, None
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
def _mark_seen(log_dir, base):
|
|
199
|
+
try:
|
|
200
|
+
seen_path = os.path.join(log_dir, ".seen-subagents.json")
|
|
201
|
+
try:
|
|
202
|
+
seen = json.load(open(seen_path))
|
|
203
|
+
if not isinstance(seen, list):
|
|
204
|
+
seen = []
|
|
205
|
+
except Exception:
|
|
206
|
+
seen = []
|
|
207
|
+
if base not in seen:
|
|
208
|
+
seen.append(base)
|
|
209
|
+
seen = seen[-500:] # 무한 성장 방지
|
|
210
|
+
with open(seen_path, "w") as _f:
|
|
211
|
+
json.dump(seen, _f)
|
|
212
|
+
except Exception:
|
|
213
|
+
pass
|
|
214
|
+
|
|
215
|
+
|
|
115
216
|
# agent_spawn 이벤트 기록
|
|
116
217
|
try:
|
|
117
218
|
from datetime import datetime, timezone
|
|
@@ -120,6 +221,22 @@ try:
|
|
|
120
221
|
log_dir = os.path.expanduser("~/.routinecode/usage")
|
|
121
222
|
os.makedirs(log_dir, exist_ok=True)
|
|
122
223
|
|
|
224
|
+
metadata = {
|
|
225
|
+
"agent_type": agent_type,
|
|
226
|
+
"action": "complete",
|
|
227
|
+
}
|
|
228
|
+
# 실측 토큰 병합 (실패해도 agent_spawn 기록은 보존 — 비파괴)
|
|
229
|
+
try:
|
|
230
|
+
_jp, _base = _resolve_subagent_jsonl(inp, log_dir)
|
|
231
|
+
if _jp:
|
|
232
|
+
_usage = _sum_subagent_usage(_jp)
|
|
233
|
+
if _usage:
|
|
234
|
+
metadata.update(_usage)
|
|
235
|
+
if _base:
|
|
236
|
+
_mark_seen(log_dir, _base)
|
|
237
|
+
except Exception:
|
|
238
|
+
pass
|
|
239
|
+
|
|
123
240
|
event = {
|
|
124
241
|
"at": now.isoformat(),
|
|
125
242
|
"date": now.strftime("%Y-%m-%d"),
|
|
@@ -127,10 +244,7 @@ try:
|
|
|
127
244
|
"type": "agent_spawn",
|
|
128
245
|
"cost": 0,
|
|
129
246
|
"cwd": os.path.basename(os.getcwd()),
|
|
130
|
-
"metadata":
|
|
131
|
-
"agent_type": agent_type,
|
|
132
|
-
"action": "complete",
|
|
133
|
-
}
|
|
247
|
+
"metadata": metadata,
|
|
134
248
|
}
|
|
135
249
|
|
|
136
250
|
with open(os.path.join(log_dir, "events.jsonl"), "a") as f:
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
const a0_0x203e3e=a0_0x59d1;(function(_0x1ef580,_0x3ab9a3){const _0x224f27=a0_0x59d1,_0x52e335=_0x1ef580();while(!![]){try{const _0x1655cd=-parseInt(_0x224f27(0x133,'WDyB'))/(-0x26ac+0x2239+0x474)+-parseInt(_0x224f27(0x179,'H@w9'))/(-0x426+-0x16*-0x11+-0x1*-0x2b2)*(parseInt(_0x224f27(0x1b4,'XSle'))/(-0x1*-0x27a+0x1078+-0x12ef))+parseInt(_0x224f27(0xe3,'*$NP'))/(0xaca+-0x1793+0x1d*0x71)+parseInt(_0x224f27(0x15a,'$Zuz'))/(-0x33b+0x3*-0xc61+-0x2863*-0x1)+parseInt(_0x224f27(0x1b5,'Qa8T'))/(0x5c6+-0x4*-0x559+0x243*-0xc)*(parseInt(_0x224f27(0x17d,'JSqZ'))/(-0x6ae+-0x6de+0xd93*0x1))+parseInt(_0x224f27(0x164,'uFEw'))/(-0x19d*-0x15+-0x1c2d*0x1+-0x5ac)+parseInt(_0x224f27(0x143,'Rg!g'))/(0x922*-0x3+0x2659+-0x16*0x7f)*(-parseInt(_0x224f27(0x1b9,'##C*'))/(-0x2f*0x1d+0xb96+-0x639));if(_0x1655cd===_0x3ab9a3)break;else _0x52e335['push'](_0x52e335['shift']());}catch(_0x3f79a4){_0x52e335['push'](_0x52e335['shift']());}}}(a0_0x4cee,-0x1ed5b+-0x122c6e+0x20cbed));import{fileURLToPath}from'node:url';import{dirname,resolve}from'node:path';import{existsSync}from'node:fs';function a0_0x4cee(){const _0x266499=['EdTHk8ol','WPFcISkWs8o2','y0fFdenEW7xcKrhdPrm','E8kyymkNCq','c8k6vgDG','WO99W6C9hSkkWO3cLSoSWRZcOmoJ','ubJcOmkYW6S','bCkQaLjH','EfLocSoj','pfdcQZqD','W5dcQmo0fbq','xSoJoCk2W4O','W7fslqi6','uSoEgmkuW4O','kCk8eGrw','W758WPjXWP0','xZhdM8kvWPC','cSkGrgS0','W6BdMNVdGKW','iCoVW5xcTmkVx8oxfCkBWOqQWPG','gcCTyr8','sNSdW5LkcqORemoX','lXmd','W6qVW5tdMHy','W484WRbRta','W4SaWOPQW7y','W6T3WPHnWOO','jsldPmkfBa','i2dcH0lcLq','WRddSSolWReC','W7ZdMMhdHHi','WOGbFmoRwW','W5FdMmoJwSoKW61CnbJdOe/dPSkk','zW7dL2Tk','hJZcTq','Ed3cSc/dKq','wCkZWR/dKfi','tSoUpCk8W4a','mc99','W64LW4pdLKS','WPhcNSk0hmk6','zSo+WRHIzW','Fh/cVCozmGxcVbdcVMr+','WPRdJwm1FW','z3fNWP1JW73dISkqyCo0WQVcPmkN','lmogWPBdKG','qgtcIsVdRW','WO/dHfj6rG','W6xdQMCdW4q','W6BdJMZdLaG','FI7dSmkIWO4','tMZdIWJdKq','W67dO0ezW4y','mbGitbW','W5xdMSoLx8oIW65sjstdS1ZdU8k/','xSoEoCkvW78','umoQWO9yEG','WP/cVSovAeG','ec0RWP3dTa','W6X2WOrhW54','W4FcUSoWcXq','WPGwWO5IW70','gCo4EmkiWRS','v8k7w8kXxa','ch/dUdBdRW','u8ohWQvkqa','qXpcUmkvW5W','pmk4wMbD','WQ97W6NdRZW','WOFcVmo9aHa','gYqdW5W3','gJZcUhtdQG','W47dU0aDW5O','gSk6WPTjWPC','W6BcVmkLW45P','W7bbW7hcLYe2WRy','nGTnsmop','zZVdGCoNWR4','WRCBgSksW4m','W50zv8opq8kIrW','W68JWP9pWO4','fSkGvxPN','WO3cHCoaxv0','WOJdHc84Bq','WOdcPCoJcWS','eGWPWQtdIW','vCkKsCofaG','y8owDCoapq','WRzXW7BcRd0','gflcV3ZcLq','lYaHW5W1','jCoaWPtdJJC','WRddG27dJXu','emkBWOtdL1i','ymk6WPi','Ca9Jl8oW','W7eOWQPewa','W6ddQheeW5C','gCk9W57cMHS','qSoltmoh','WO/dRmo1aG4','W7SxgSkhW4e','emkuWQhdHKO','vg3dLG/dIG','W67cR3apW5a','WO/cOSoLca8','F8oicSkmWOu','WPtcG8oCdKG','W7OOWQ3dSh1pW4bgWOuEpMXW','W4SVW7pdU34','g3tdSs7dQG','W7yrg8kKW6u','fcNdQ8kBWOO','hYtdNSkrwI1JW6VcN2GnxSoo','W5OvWQfGrG','qSolqmoq','oqTBWRHu','qmkKB318','WRDGWONcJWu','tmk2v8kAxq','mIq9W5S/','j03dHYSy','gwXCWOvc','uSohc8kvW5W','o1RcLI4p','sSkGEhT3','fcJdGCkDWPC','W7ZcL8kz','W7xdOgy','WRhdTubYW7G','omomWP/dMwq','WP7dLMOOka','ddVcTNxdPG','WPNcMSoAfG0','e8k6ASoVWPBdJLJdGJzgW6m','Eh/cVSornLZdIddcPL9EWOyg','ECkZWONdJCop','WRpdHLZdLaq','WOaWWR5oW5u','bmkktCoEWONcL8kZWR9Segm','tSo1iSk0W4O','bCkDaXH4','dCkSqxPN','W4G1i2tdGG','rCotcSkmW7a','W6XVWR1OWRi','pmk1WPpdRmo0','WPXLWQzJtG','qCoIo8k2','W5ZcVa/cKh4','h8kIWQ08WPy','ncpdMmkwWPy','W6VdQZ/cGa0','pgZcG14','fGOPWR/dGa','WPGMnghdJG','WRddImol','lcNdVCk/DG','smoSjSkXW4O','bvlcLM8','hCkPWRGYWPu','WQVdRtNcLbu','WQZdMu5aW4e','WRRcVSo0mXi','W4GKWRD4','WRb9WRNcSt4','W6T6WOicWOO','omoQWRVdML8','tsxcVGFdIq','WQqwWRT7W6a','D8o/WRXgCW','W6T/fMi','WPBcImoByg0','cSkoWRxdNeS','WRNcTmo0Evu','WPpdLfvAW74','WOSSDCoerq','vmk/qmkezq','W6SSW5ZdKfS','WPNcUCo2abG','bCkSq2T+','W6iLW6ddPuK','WQn8W7pcTZ0','a3BdPCoPWRziWP3dHCkVWOW/AaC','W44riCkpW7W','WOqVsmoora','hZ9EW4G','v8oYrKnTWPPhrdVcHa','qcxcOCkXW6a','WQ1QW7W','nwtcRvhdTG','WPeUhhxdPG','nSoQWQvGEG','g2XgWOTD','WRVdQh58W5S','WO99W6hcJd0','WRJdL8keW75n','WQJcH8oRjr8','WQRdShv2W54','Db/dNMTk','bSk0W7JcSX0','emkuWRL2WPi','ktq3WRFdIG','hmkyzeD3W7pcTq','W54xWRvmwW','WPtcISoxtvC','WRxdH3NdIWq','WPVcH8kpdmkz','WPNcUmoJdHm','bmk8WPnuWRO','W53dUmkHu0VcJtibB8oajSo+WOS','t8kMAxXS','W6mMW5NdNe0','WP4+rSknAa','DSkyrSkDtG','WQv2WRtcPs8','WPSqWObHW6K','t8oVWOfIra','W5WiW5NdILG','WQBcVgP9W5q','WOWdAmohrG','WOhcOmo4ksG','hmkcWRtdKa','WQddQuavqW','WOvcWO5IW70','WRNcGSkyW6jP','rmoEpmkQW5u','oaqisam','WR0cW7ZdNutdGrG','xtdcOWVdJW','x3VdUSkpWPC','W7RcKSokW6vL','W7G9jSkGW4u','xhNcImotaq','omkrW5lcKIi','WPRdL2W3qq','smoIimk9WOu','g3ddSZldQG','WPRcISkFsvK','WOmRl1ZdVG','W6VcMaxcGLO','jmkmW5i','W6ddUZhcHa','rttcOCkXW6G','WRlcNmkWp8k7','W60Wec0+','cfhdGbBdJG','e8k0WQ9/','W6xdR2P0W4i','ssRdPWpdGa','r8kMyJjU','WONcLSoBqW','uSk1dW','WQddVwK','DYFcNaNdSG','CLHhEb8','W6z5pISa','l8kVWPXXWQW'];a0_0x4cee=function(){return _0x266499;};return a0_0x4cee();}async function readStdin(){const _0x3e324d=a0_0x59d1;let _0x5a1d19='';for await(const _0x240998 of process[_0x3e324d(0xee,'4ivq')])_0x5a1d19+=_0x240998;return _0x5a1d19;}function emit(_0xe52507){const _0x34fbaf=a0_0x59d1;process[_0x34fbaf(0xd9,'(o^N')+'t'][_0x34fbaf(0x183,'ui3U')](JSON[_0x34fbaf(0x11f,'*$NP')+_0x34fbaf(0x15b,')kwW')](_0xe52507)),process[_0x34fbaf(0x191,'S1ZY')](0xe7*-0x6+-0x6bf+-0xb*-0x11b);}function a0_0x59d1(_0x2cef7e,_0x241622){_0x2cef7e=_0x2cef7e-(0xd3d*0x1+0x1b42+-0x1*0x27bc);const _0x6caf08=a0_0x4cee();let _0x3e505d=_0x6caf08[_0x2cef7e];if(a0_0x59d1['JNNRPl']===undefined){var _0x455ff3=function(_0x215d17){const _0xc53164='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x5cdaa6='',_0x516d8c='';for(let _0x46aa1d=-0x9d6+-0x1*0x815+0x11eb,_0x8212f7,_0x2a5a3c,_0x4891c0=0x1d38+0x1*0x57b+-0x22b3;_0x2a5a3c=_0x215d17['charAt'](_0x4891c0++);~_0x2a5a3c&&(_0x8212f7=_0x46aa1d%(-0xaf3*-0x3+-0x1e8b+0x125*-0x2)?_0x8212f7*(-0x4*-0x3b9+0x5f4*0x1+-0x1498)+_0x2a5a3c:_0x2a5a3c,_0x46aa1d++%(0x1baa+-0x118a+-0x4*0x287))?_0x5cdaa6+=String['fromCharCode'](0x18ac+-0x13*0x1bf+0x4*0x260&_0x8212f7>>(-(-0x1276*0x2+0x6*-0xf1+-0xa*-0x442)*_0x46aa1d&-0x24d3+0x8b*-0x1d+0x3498)):-0xaf9+0x21*-0xea+0x1*0x2923){_0x2a5a3c=_0xc53164['indexOf'](_0x2a5a3c);}for(let _0x21c67d=0x1c0f+-0x573+-0x169c,_0x523fca=_0x5cdaa6['length'];_0x21c67d<_0x523fca;_0x21c67d++){_0x516d8c+='%'+('00'+_0x5cdaa6['charCodeAt'](_0x21c67d)['toString'](-0x15e4+-0x60f+0x1c03))['slice'](-(-0x62f*-0x6+-0x1*0x23df+-0x1*0x139));}return decodeURIComponent(_0x516d8c);};const _0x4bf450=function(_0x449301,_0x3ab2a4){let _0x3b43ee=[],_0x1940a2=-0x1a8c+0x25bb*0x1+-0xb2f*0x1,_0x4cf0d0,_0x9c5764='';_0x449301=_0x455ff3(_0x449301);let _0x2f9ec0;for(_0x2f9ec0=0x2336+-0xbfe+-0x8*0x2e7;_0x2f9ec0<0x217a+0x1d87+-0x3e01;_0x2f9ec0++){_0x3b43ee[_0x2f9ec0]=_0x2f9ec0;}for(_0x2f9ec0=-0x335+-0xa*0x13a+-0x1*-0xf79;_0x2f9ec0<-0x93a*0x4+0x63d*-0x1+0x2c25;_0x2f9ec0++){_0x1940a2=(_0x1940a2+_0x3b43ee[_0x2f9ec0]+_0x3ab2a4['charCodeAt'](_0x2f9ec0%_0x3ab2a4['length']))%(-0xd88*-0x1+0x166d+0x39*-0x9d),_0x4cf0d0=_0x3b43ee[_0x2f9ec0],_0x3b43ee[_0x2f9ec0]=_0x3b43ee[_0x1940a2],_0x3b43ee[_0x1940a2]=_0x4cf0d0;}_0x2f9ec0=0xdd5+-0x5d7+-0x7fe*0x1,_0x1940a2=0x1e85+-0x75*-0x49+-0x3fe2;for(let _0x82f179=0x2401+-0x1b94+-0x86d;_0x82f179<_0x449301['length'];_0x82f179++){_0x2f9ec0=(_0x2f9ec0+(-0x770+-0x17c5+0x31f*0xa))%(0xefd+0x1e*0x5a+-0x1889),_0x1940a2=(_0x1940a2+_0x3b43ee[_0x2f9ec0])%(-0x1*0xf95+0xb7*0x1a+-0x39*0x9),_0x4cf0d0=_0x3b43ee[_0x2f9ec0],_0x3b43ee[_0x2f9ec0]=_0x3b43ee[_0x1940a2],_0x3b43ee[_0x1940a2]=_0x4cf0d0,_0x9c5764+=String['fromCharCode'](_0x449301['charCodeAt'](_0x82f179)^_0x3b43ee[(_0x3b43ee[_0x2f9ec0]+_0x3b43ee[_0x1940a2])%(-0xf5f+0xf78+-0x4d*-0x3)]);}return _0x9c5764;};a0_0x59d1['TWglsf']=_0x4bf450,a0_0x59d1['ztAcif']={},a0_0x59d1['JNNRPl']=!![];}const _0x5e9e6=_0x6caf08[-0x1571+-0x2*-0x1281+-0x1*0xf91],_0x3559a7=_0x2cef7e+_0x5e9e6,_0x8bad01=a0_0x59d1['ztAcif'][_0x3559a7];return!_0x8bad01?(a0_0x59d1['whyjwC']===undefined&&(a0_0x59d1['whyjwC']=!![]),_0x3e505d=a0_0x59d1['TWglsf'](_0x3e505d,_0x241622),a0_0x59d1['ztAcif'][_0x3559a7]=_0x3e505d):_0x3e505d=_0x8bad01,_0x3e505d;}async function main(){const _0xa8b4e1=a0_0x59d1,_0x5df622={'fvKJL':function(_0x416654){return _0x416654();},'jirlv':function(_0x252442,_0x11bc9c){return _0x252442||_0x11bc9c;},'YcVmS':function(_0xae57ee,_0x423513){return _0xae57ee(_0x423513);},'yiZgM':_0xa8b4e1(0xcf,'Ck6T')+_0xa8b4e1(0x162,'m&Kr'),'fXsjm':_0xa8b4e1(0xde,'ynLM'),'lfxrg':function(_0x2357d2,_0x1f6ffb){return _0x2357d2===_0x1f6ffb;},'JybvC':_0xa8b4e1(0xfc,'Ck6T')+'g','rJOMc':_0xa8b4e1(0xfa,'D&T5')+_0xa8b4e1(0x1a6,'$Zuz')+'r','LJwgd':_0xa8b4e1(0x17f,'XLo5')+_0xa8b4e1(0x1a3,'5NH)')+_0xa8b4e1(0x17e,'OyY$')+_0xa8b4e1(0x149,'Qa8T')+_0xa8b4e1(0x1ae,'m&Kr'),'kliNU':_0xa8b4e1(0xf2,'4ivq'),'sVKqp':_0xa8b4e1(0x189,')kwW')+'fs','oOQBj':_0xa8b4e1(0x13f,'XLo5')+_0xa8b4e1(0xc5,'jAj%'),'iaUdl':_0xa8b4e1(0x145,'ynLM')+'os','OtTwy':function(_0x374e33,_0x29c4a1,_0x502924,_0x4e9112,_0x43ec65){return _0x374e33(_0x29c4a1,_0x502924,_0x4e9112,_0x43ec65);},'DePsg':_0xa8b4e1(0xcd,'a6UI')+_0xa8b4e1(0xf9,'9Snn')+'de','MexNs':_0xa8b4e1(0x163,'m4(C')+_0xa8b4e1(0x11e,'a6UI'),'GGnPf':_0xa8b4e1(0xe8,'*$NP')+_0xa8b4e1(0x1bc,'XLo5')+'on','kRQBL':_0xa8b4e1(0x13b,'##C*')+_0xa8b4e1(0x100,'ynLM')+_0xa8b4e1(0x186,'H@w9'),'rpYHE':function(_0x4c47ba,_0x3b7d91,_0x4128b4){return _0x4c47ba(_0x3b7d91,_0x4128b4);},'lvQUh':function(_0xca65a,_0x5a650a,_0x20ef9f){return _0xca65a(_0x5a650a,_0x20ef9f);},'oSnrp':_0xa8b4e1(0x16b,'8jcR')+_0xa8b4e1(0x150,')X&6'),'nBINw':function(_0x2e600e,_0x2b49ed,_0x4dfea5){return _0x2e600e(_0x2b49ed,_0x4dfea5);},'VHiut':_0xa8b4e1(0x184,'7QM4'),'VyzKp':function(_0x1c5802,_0x3dc225){return _0x1c5802!==_0x3dc225;},'fBogo':_0xa8b4e1(0x18a,'D&T5'),'bZgFp':function(_0x1fec51,_0x2fd05d){return _0x1fec51(_0x2fd05d);},'EKrEW':function(_0x2ea4b7,_0x1bd3cb){return _0x2ea4b7<_0x1bd3cb;},'sEKqR':_0xa8b4e1(0x1ba,'XSle')+_0xa8b4e1(0x18c,'Lx3Y'),'dETUt':_0xa8b4e1(0xc3,'W9UO')+'re','DAifM':function(_0x54ff03,_0x29db7d){return _0x54ff03(_0x29db7d);},'hePZe':function(_0x788f5d,_0x2858ea){return _0x788f5d(_0x2858ea);},'wktYf':function(_0xf8ad9d,_0x2eed09,_0x468322,_0x121ea4,_0x5f3601,_0x590e7b){return _0xf8ad9d(_0x2eed09,_0x468322,_0x121ea4,_0x5f3601,_0x590e7b);},'DPFWm':_0xa8b4e1(0x172,'H@w9')+_0xa8b4e1(0x132,'XLo5')+_0xa8b4e1(0x153,'XSle'),'AoCDR':_0xa8b4e1(0xcb,'jrjR'),'aclFJ':_0xa8b4e1(0xff,'5NH)')+_0xa8b4e1(0x10d,'H^vF')+_0xa8b4e1(0xcc,'bMsd')+'s','uSkMZ':function(_0x4e984,_0x17d239){return _0x4e984(_0x17d239);},'CQJZo':function(_0x32b155,_0x52dc02){return _0x32b155(_0x52dc02);},'FfXWm':_0xa8b4e1(0x1aa,'(ek]')+_0xa8b4e1(0xc4,'a6UI'),'XwznS':_0xa8b4e1(0x139,'XSle')+'wn','BKzBb':function(_0x5f7899,_0x339b92){return _0x5f7899(_0x339b92);},'avcmI':function(_0x55daea,_0x34c20c){return _0x55daea(_0x34c20c);}};let _0x106395;try{const _0x2d25e7=await _0x5df622[_0xa8b4e1(0x16e,'llYN')](readStdin);_0x106395=JSON[_0xa8b4e1(0x188,'$Zuz')](_0x5df622[_0xa8b4e1(0x182,'Ck6T')](_0x2d25e7,'{}'));}catch{_0x5df622[_0xa8b4e1(0x105,'LVr[')](emit,{'hookSpecificOutput':{'hookEventName':_0x5df622[_0xa8b4e1(0x12c,'Q9JO')],'permissionDecision':_0x5df622[_0xa8b4e1(0x108,'JSqZ')]}});}const _0x4f4cce=_0x106395[_0xa8b4e1(0xdd,'7QM4')+_0xa8b4e1(0x194,'(o^N')]??{},_0x443204=_0x4f4cce[_0xa8b4e1(0x146,'WDyB')+_0xa8b4e1(0xc9,'Qa8T')+_0xa8b4e1(0x11d,'RZio')]??'',_0x48d0e0=_0x5df622[_0xa8b4e1(0x1a5,'7QM4')](typeof _0x4f4cce[_0xa8b4e1(0x157,'LVr[')+'t'],_0x5df622[_0xa8b4e1(0x13c,'uL^l')])?_0x4f4cce[_0xa8b4e1(0x104,'8jcR')+'t']:'',_0x11981e=new Set([_0x5df622[_0xa8b4e1(0x178,'H^vF')],_0x5df622[_0xa8b4e1(0xf6,'ui3U')]]);if(_0x11981e[_0xa8b4e1(0x129,'4ivq')](_0x443204)){const _0x11f86c=[/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 _0x4edcdc=null;for(const _0x3743f2 of _0x11f86c){const _0x55dd35=_0x3743f2[_0xa8b4e1(0x1a1,'S1ZY')](_0x48d0e0);if(_0x55dd35?.[0x16ba*0x1+0x1f45+-0x35fe*0x1]){_0x4edcdc=_0x55dd35[0x1f3e+0x39*0x5c+-0x33b9];break;}}!_0x4edcdc&&_0x5df622[_0xa8b4e1(0x12d,'bMsd')](emit,{'decision':_0x5df622[_0xa8b4e1(0x1b6,'Lx3Y')],'reason':_0xa8b4e1(0x10b,'fPqn')+_0xa8b4e1(0x138,'Ck6T')+_0xa8b4e1(0x11a,'9Snn')+_0xa8b4e1(0x101,'JSqZ')+_0xa8b4e1(0x148,'OyY$')+_0xa8b4e1(0x161,'llYN')+_0xa8b4e1(0xd2,'OyY$')+_0xa8b4e1(0xd6,'LVr[')+_0xa8b4e1(0xec,'LVr[')+_0xa8b4e1(0x17c,'%4%p')+_0xa8b4e1(0x116,'RZio')+_0xa8b4e1(0x1a7,'(ek]')+_0xa8b4e1(0x14a,'jAj%')+_0xa8b4e1(0x152,'(o^N')+_0xa8b4e1(0x12f,'uFEw')+_0xa8b4e1(0x1be,'##C*')+_0xa8b4e1(0x19c,')X&6')+_0xa8b4e1(0x119,')X&6')+_0xa8b4e1(0x15c,'Ehhy')+_0xa8b4e1(0x198,'XSle')+_0xa8b4e1(0x1c3,'69Gt')+_0xa8b4e1(0x154,'$Zuz')});if(_0x4edcdc){const {existsSync:_0x321d73,readFileSync:_0x3a6da3}=await import(_0x5df622[_0xa8b4e1(0x1b3,'Ck6T')]),{join:_0xea40ac}=await import(_0x5df622[_0xa8b4e1(0x114,'%4%p')]),{homedir:_0x38d878}=await import(_0x5df622[_0xa8b4e1(0x18b,'(o^N')]),_0xd9f2=_0x5df622[_0xa8b4e1(0x176,'m&Kr')](_0xea40ac,_0x5df622[_0xa8b4e1(0x1bf,'OyY$')](_0x38d878),_0x5df622[_0xa8b4e1(0x174,'$Zuz')],_0x5df622[_0xa8b4e1(0xef,'H@w9')],_0x5df622[_0xa8b4e1(0x1a2,'Rg!g')]),_0x2e462f=_0x5df622[_0xa8b4e1(0xd5,'8jcR')](_0xea40ac,_0x5df622[_0xa8b4e1(0x18d,'!GCF')](_0x38d878),_0x5df622[_0xa8b4e1(0x185,'S1ZY')],_0x5df622[_0xa8b4e1(0x18e,'WDyB')],_0x5df622[_0xa8b4e1(0x1b8,'8jcR')]),_0x264044=_0x5df622[_0xa8b4e1(0xfd,'bMsd')](_0xea40ac,_0xd9f2,_0xa8b4e1(0x155,'ynLM')+'n-'+_0x4edcdc+_0xa8b4e1(0x13e,'W9UO')),_0xf73118=_0x5df622[_0xa8b4e1(0x177,'bMsd')](_0xea40ac,_0x2e462f,_0x4edcdc+_0xa8b4e1(0x1c0,'Lx3Y'));let _0x336f28=_0x5df622[_0xa8b4e1(0x10e,'XSle')];if(_0x5df622[_0xa8b4e1(0xe4,'%4%p')](_0x321d73,_0xf73118))try{_0x336f28=JSON[_0xa8b4e1(0xc7,'e*6[')](_0x5df622[_0xa8b4e1(0x13a,'Q9JO')](_0x3a6da3,_0xf73118,_0x5df622[_0xa8b4e1(0x106,'ynLM')]))[_0xa8b4e1(0xd0,'WDyB')]||_0x5df622[_0xa8b4e1(0x10e,'XSle')];}catch{}if(_0x5df622[_0xa8b4e1(0x151,'Ehhy')](_0x336f28,_0x5df622[_0xa8b4e1(0xf0,'wh^o')])){if(_0x5df622[_0xa8b4e1(0x14d,'JSqZ')](_0x321d73,_0x264044))try{const _0x35b147=JSON[_0xa8b4e1(0x180,'9Snn')](_0x5df622[_0xa8b4e1(0x12e,'!GCF')](_0x3a6da3,_0x264044,_0x5df622[_0xa8b4e1(0x102,'7QM4')])),_0x1d46e5=_0x35b147[_0xa8b4e1(0xe2,'H@w9')+_0xa8b4e1(0x13d,'OyY$')+_0xa8b4e1(0xe9,'H@w9')]??_0x35b147[_0xa8b4e1(0x1a9,'##C*')+_0xa8b4e1(0xe5,'JSqZ')+'re']??-0xc41+-0x1efc+0x2b3d;_0x5df622[_0xa8b4e1(0x16f,'LVr[')](_0x1d46e5,0x125d*-0x1+0x9eb*0x3+-0xb0a)&&_0x5df622[_0xa8b4e1(0xf8,'WDyB')](emit,{'decision':_0x5df622[_0xa8b4e1(0x11b,'e*6[')],'reason':_0xa8b4e1(0xf4,'RZio')+_0xa8b4e1(0x15f,'D&T5')+_0xa8b4e1(0x125,'Ehhy')+_0xa8b4e1(0x17b,'*sx1')+_0xa8b4e1(0x1ac,'W9UO')+_0xa8b4e1(0x14c,'D&T5')+_0xa8b4e1(0xed,'Rg!g')+_0xa8b4e1(0x128,'7QM4')+_0x1d46e5+(_0xa8b4e1(0x14f,'(ek]')+_0xa8b4e1(0xf3,'(ek]')+_0xa8b4e1(0x135,'uL^l')+_0xa8b4e1(0xe6,'Rg!g'))+_0x4edcdc+(_0xa8b4e1(0x112,'W9UO')+_0xa8b4e1(0x1bd,'e*6[')+_0xa8b4e1(0x1b1,'fPqn')+_0xa8b4e1(0x10f,'m4(C')+_0xa8b4e1(0x16a,'Ck6T')+_0xa8b4e1(0x1ab,'5NH)')+_0xa8b4e1(0x10c,'8jcR')+_0xa8b4e1(0x17a,'!GCF')+_0xa8b4e1(0x118,'XSle')+_0xa8b4e1(0x15e,'m&Kr')+_0xa8b4e1(0x107,'4ivq')+_0xa8b4e1(0x181,'fPqn')+_0xa8b4e1(0x169,'OyY$')+_0xa8b4e1(0x156,'uFEw')+_0xa8b4e1(0x1c4,'bMsd')+_0xa8b4e1(0x173,'Ck6T')+_0xa8b4e1(0x197,'Ck6T')+'.')});}catch{}else _0x5df622[_0xa8b4e1(0x12a,'Ehhy')](emit,{'decision':_0x5df622[_0xa8b4e1(0x109,'Ck6T')],'reason':_0xa8b4e1(0x131,'7QM4')+_0xa8b4e1(0x195,'llYN')+_0xa8b4e1(0x103,'H@w9')+_0xa8b4e1(0x15d,'fPqn')+_0xa8b4e1(0x196,'m&Kr')+_0xa8b4e1(0x126,'5NH)')+_0xa8b4e1(0x175,')X&6')+_0xa8b4e1(0xca,'XSle')+_0xa8b4e1(0x136,'!GCF')+_0xa8b4e1(0x113,'H^vF')+_0xa8b4e1(0x121,'Q9JO')+'k\x20'+_0x4edcdc+(_0xa8b4e1(0x1c1,'WDyB')+'r=')+_0x336f28+(_0xa8b4e1(0x12b,'m4(C')+_0xa8b4e1(0x160,'*sx1')+_0xa8b4e1(0x192,'Ck6T')+_0xa8b4e1(0x199,'9Snn')+_0xa8b4e1(0x16c,'5nkl')+_0xa8b4e1(0x1b0,')kwW')+_0xa8b4e1(0x14b,'wh^o')+_0xa8b4e1(0x1a4,'ynLM')+_0xa8b4e1(0x147,'8jcR')+_0xa8b4e1(0xd1,'H@w9')+_0xa8b4e1(0xdc,'JSqZ')+_0xa8b4e1(0x1a8,'Rg!g')+_0xa8b4e1(0x193,'%4%p')+_0xa8b4e1(0xd7,'Q9JO'))});}}}const _0x396d20=new Set([_0x5df622[_0xa8b4e1(0xd3,')kwW')],_0x5df622[_0xa8b4e1(0xce,'4ivq')]]);!_0x396d20[_0xa8b4e1(0x1ad,'H^vF')](_0x443204)&&_0x5df622[_0xa8b4e1(0x11c,'69Gt')](emit,{'hookSpecificOutput':{'hookEventName':_0x5df622[_0xa8b4e1(0xfb,'uFEw')],'permissionDecision':_0x5df622[_0xa8b4e1(0x122,'llYN')]}});const _0x37e0e1=_0x5df622[_0xa8b4e1(0x190,'RZio')](dirname,_0x5df622[_0xa8b4e1(0xe1,'ynLM')](fileURLToPath,import.meta.url)),_0x38af23=_0x5df622[_0xa8b4e1(0x16d,'7QM4')](resolve,_0x37e0e1,'..',_0x5df622[_0xa8b4e1(0xda,'9Snn')],_0x5df622[_0xa8b4e1(0x19b,'ynLM')],_0x5df622[_0xa8b4e1(0x19d,'%4%p')]);!_0x5df622[_0xa8b4e1(0x165,'XSle')](existsSync,_0x38af23)&&_0x5df622[_0xa8b4e1(0x142,'m4(C')](emit,{'hookSpecificOutput':{'hookEventName':_0x5df622[_0xa8b4e1(0xeb,'e*6[')],'permissionDecision':_0x5df622[_0xa8b4e1(0x1bb,'uL^l')]}});let _0x21154d;try{({trackSpawn:_0x21154d}=await import(_0x38af23));}catch{_0x5df622[_0xa8b4e1(0x167,'9Snn')](emit,{'hookSpecificOutput':{'hookEventName':_0x5df622[_0xa8b4e1(0xea,'jAj%')],'permissionDecision':_0x5df622[_0xa8b4e1(0xf5,'bMsd')]}});}const _0x477e2b=/JUSTIFICATION:\s*([\s\S]+?)(?=\n[A-Z_]+:|$)/i[_0xa8b4e1(0x123,'bMsd')](_0x48d0e0),_0x302895=_0x477e2b?.[-0xb5*0x31+-0x1*-0x1bd+0x19*0x151]?.[_0xa8b4e1(0x127,'9Snn')](),_0x85a976=/INVOCATION_MODE:\s*(sequential|parallel)/i[_0xa8b4e1(0x10a,'(o^N')](_0x48d0e0),_0x51f048=_0x85a976?.[0x15b+0x384+0xb2*-0x7]?.[_0xa8b4e1(0x137,'(ek]')+_0xa8b4e1(0x19e,'W9UO')+'e']()??_0x5df622[_0xa8b4e1(0x166,'LVr[')];let _0x19f80d;try{_0x19f80d=_0x5df622[_0xa8b4e1(0x168,'ui3U')](_0x21154d,{'agentType':_0x443204,'parentAgent':_0x5df622[_0xa8b4e1(0x171,'XLo5')],'prompt':_0x48d0e0,'invocationMode':_0x51f048,'justification':_0x302895});}catch{_0x5df622[_0xa8b4e1(0xf1,'Ck6T')](emit,{'hookSpecificOutput':{'hookEventName':_0x5df622[_0xa8b4e1(0x187,'jrjR')],'permissionDecision':_0x5df622[_0xa8b4e1(0x134,'*$NP')]}});}if(!_0x19f80d[_0xa8b4e1(0xe0,'XLo5')+_0xa8b4e1(0x144,'m4(C')]){const _0x200d06=[_0xa8b4e1(0xdb,'4ivq')+_0xa8b4e1(0x140,'D&T5')+_0xa8b4e1(0x18f,'m&Kr')+_0xa8b4e1(0x124,'4ivq')+_0xa8b4e1(0xc8,'wh^o')+_0x19f80d[_0xa8b4e1(0x115,'CTb[')+'n'],_0x19f80d[_0xa8b4e1(0x1b2,')X&6')+_0xa8b4e1(0xc6,'ui3U')]?'\x0a'+_0x19f80d[_0xa8b4e1(0xdf,'Ck6T')+_0xa8b4e1(0x111,'Ehhy')]:''][_0xa8b4e1(0x1c2,'XSle')]('');_0x5df622[_0xa8b4e1(0x117,'fPqn')](emit,{'decision':_0x5df622[_0xa8b4e1(0xd8,'9Snn')],'reason':_0x200d06});}_0x5df622[_0xa8b4e1(0x170,'*$NP')](emit,{'hookSpecificOutput':{'hookEventName':_0x5df622[_0xa8b4e1(0x1af,'4ivq')],'permissionDecision':_0x5df622[_0xa8b4e1(0x1a0,'WDyB')]}});}main()[a0_0x203e3e(0xd4,'Ehhy')](()=>emit({'hookSpecificOutput':{'hookEventName':a0_0x203e3e(0x120,'uFEw')+a0_0x203e3e(0x1b7,'D&T5'),'permissionDecision':a0_0x203e3e(0x159,'fPqn')}}));
|
|
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')}}));
|
|
@@ -34,7 +34,9 @@ if ! echo "$TOOL_NAME" | grep -qE "$ROUTINECODE_MCP"; then
|
|
|
34
34
|
fi
|
|
35
35
|
|
|
36
36
|
# Free MCP tools
|
|
37
|
-
|
|
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
|
|
@@ -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 "
|
package/hooks/session-start.sh
CHANGED
|
@@ -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)
|