@routinecrew/routinecode 2.31.35 → 2.31.38
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/block_message.py +15 -50
- 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/stop-usage-metrics.sh +198 -73
- package/hooks/user-prompt-submit.sh +0 -12
- 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 +0 -0
- package/mcp-routinecode/dist/viral-loop.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""RDPE 로컬 maturity — daily.json.task_sigs → routines.json 성숙 판정.
|
|
3
|
+
|
|
4
|
+
설계 §5 임계를 **로컬에 재구현**한다(서버 maturity.engine 은 Postgres·error_fix 하드코딩이라
|
|
5
|
+
재사용 불가). 로컬 완결: 서버 왕복 없음. fail-open(에러 시 조용히 종료 — 세션 영향 0).
|
|
6
|
+
|
|
7
|
+
입력 : ~/.routinecode/usage/daily.json (stop-usage-metrics 가 per-message 로 적재하는
|
|
8
|
+
task_sigs = {sig: {count, delta_c, sessions:[...]}})
|
|
9
|
+
출력 : ~/.routinecode/rdpe/routines.json (sig 별 성숙 상태)
|
|
10
|
+
|
|
11
|
+
가치명제: Claude Code 비용의 99.6% 가 cache. 반복 작업을 컨텍스트에서 빼내면 그 ΔC
|
|
12
|
+
(=cache_creation)가 세션 잔여 턴 내내 cache_read 로 재청구되던 비용이 사라진다.
|
|
13
|
+
→ saving_potential = avg_delta_c × E_lower[잔여턴]. 이게 승격 가치의 척도.
|
|
14
|
+
"""
|
|
15
|
+
import os
|
|
16
|
+
import json
|
|
17
|
+
import sys
|
|
18
|
+
|
|
19
|
+
USAGE_DIR = os.path.expanduser("~/." + "routinecode" + "/usage")
|
|
20
|
+
RDPE_DIR = os.path.expanduser("~/." + "routinecode" + "/rdpe")
|
|
21
|
+
DAILY = os.path.join(USAGE_DIR, "daily.json")
|
|
22
|
+
ROUTINES = os.path.join(RDPE_DIR, "routines.json")
|
|
23
|
+
|
|
24
|
+
# 성숙 임계 (설계 §5)
|
|
25
|
+
PATTERN_OCCURRENCE = 3 # observation→pattern: 반복 ≥3
|
|
26
|
+
PATTERN_SESSIONS = 2 # AND 크로스세션 ≥2 (단일 세션 자가 루틴화 차단)
|
|
27
|
+
RULE_OCCURRENCE = 5 # pattern→rule: 반복 ≥5
|
|
28
|
+
E_LOWER_CONST = 20 # 콜드스타트 보수적 잔여턴(§4-3). turns 분포 축적 후 보정.
|
|
29
|
+
T_MIN = 100_000 # 절감 잠재 하한: avg_delta_c × E_lower ≥ T_MIN 이어야 rule.
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def aggregate(daily):
|
|
33
|
+
"""모든 날짜의 task_sigs 를 sig 별로 합산 (교차일·교차세션)."""
|
|
34
|
+
agg = {}
|
|
35
|
+
for date in sorted(daily.keys()):
|
|
36
|
+
day = daily.get(date)
|
|
37
|
+
if not isinstance(day, dict):
|
|
38
|
+
continue
|
|
39
|
+
tsigs = day.get("task_sigs", {})
|
|
40
|
+
if not isinstance(tsigs, dict):
|
|
41
|
+
continue
|
|
42
|
+
for sig, v in tsigs.items():
|
|
43
|
+
if isinstance(v, int): # 구 포맷 하위호환
|
|
44
|
+
v = {"count": v, "delta_c": 0, "sessions": []}
|
|
45
|
+
if not isinstance(v, dict):
|
|
46
|
+
continue
|
|
47
|
+
a = agg.setdefault(sig, {
|
|
48
|
+
"occurrence": 0, "sessions": set(),
|
|
49
|
+
"total_delta_c": 0, "first": date, "last": date, "shape": "",
|
|
50
|
+
})
|
|
51
|
+
if not a["shape"]:
|
|
52
|
+
a["shape"] = v.get("shape", "") or ""
|
|
53
|
+
a["occurrence"] += int(v.get("count", 0) or 0)
|
|
54
|
+
a["total_delta_c"] += int(v.get("delta_c", 0) or 0)
|
|
55
|
+
for s in (v.get("sessions", []) or []):
|
|
56
|
+
a["sessions"].add(s)
|
|
57
|
+
a["first"] = min(a["first"], date)
|
|
58
|
+
a["last"] = max(a["last"], date)
|
|
59
|
+
return agg
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def classify(occ, dsess, avg_dc):
|
|
63
|
+
"""성숙 레벨 판정. 크로스세션 가드(dsess≥2) 상시 적용."""
|
|
64
|
+
if occ >= RULE_OCCURRENCE and dsess >= PATTERN_SESSIONS and (avg_dc * E_LOWER_CONST) >= T_MIN:
|
|
65
|
+
return "rule"
|
|
66
|
+
if occ >= PATTERN_OCCURRENCE and dsess >= PATTERN_SESSIONS:
|
|
67
|
+
return "pattern"
|
|
68
|
+
return "observation"
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def build_routines(daily):
|
|
72
|
+
agg = aggregate(daily)
|
|
73
|
+
routines = {}
|
|
74
|
+
for sig, a in agg.items():
|
|
75
|
+
occ = a["occurrence"]
|
|
76
|
+
dsess = len(a["sessions"])
|
|
77
|
+
avg_dc = (a["total_delta_c"] // occ) if occ else 0
|
|
78
|
+
mat = classify(occ, dsess, avg_dc)
|
|
79
|
+
shape = a.get("shape", "") or ""
|
|
80
|
+
n_tools = len([x for x in shape.split(">") if x])
|
|
81
|
+
# MCP 도구화 후보(§6③ — 가장 확실한 절감 경로): rule + 다중도구 조합(≥2) + 고빈도.
|
|
82
|
+
# 사람 승인 전제(자동 생성 X). 자동 캐시주입(§6①)은 sig 사후성 vs 주입 사전성
|
|
83
|
+
# 간극으로 보류 — 단일도구 rule 은 cache_candidate 로만 표시(주입은 후속 R&D).
|
|
84
|
+
mcp_candidate = (mat == "rule" and n_tools >= 2)
|
|
85
|
+
routines[sig] = {
|
|
86
|
+
"maturity": mat,
|
|
87
|
+
"tool_shape": shape,
|
|
88
|
+
"occurrence": occ,
|
|
89
|
+
"distinct_sessions": dsess,
|
|
90
|
+
"avg_delta_c": avg_dc,
|
|
91
|
+
"total_delta_c": a["total_delta_c"],
|
|
92
|
+
"saving_potential": avg_dc * E_LOWER_CONST, # ΔC × 잔여턴 = 재청구 절감 잠재
|
|
93
|
+
"first_seen": a["first"],
|
|
94
|
+
"last_seen": a["last"],
|
|
95
|
+
"promotion_path": ("mcp_candidate" if mcp_candidate
|
|
96
|
+
else ("cache_candidate" if mat == "rule" else None)),
|
|
97
|
+
}
|
|
98
|
+
return routines
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def main():
|
|
102
|
+
try:
|
|
103
|
+
with open(DAILY) as f:
|
|
104
|
+
daily = json.load(f)
|
|
105
|
+
except Exception:
|
|
106
|
+
return 0 # fail-open: 데이터 없음/파싱 실패 → 조용히 종료
|
|
107
|
+
try:
|
|
108
|
+
routines = build_routines(daily)
|
|
109
|
+
except Exception:
|
|
110
|
+
return 0
|
|
111
|
+
try:
|
|
112
|
+
os.makedirs(RDPE_DIR, exist_ok=True)
|
|
113
|
+
with open(ROUTINES, "w") as f:
|
|
114
|
+
json.dump(routines, f, ensure_ascii=False, indent=2)
|
|
115
|
+
except Exception:
|
|
116
|
+
return 0
|
|
117
|
+
mats = {}
|
|
118
|
+
for r in routines.values():
|
|
119
|
+
mats[r["maturity"]] = mats.get(r["maturity"], 0) + 1
|
|
120
|
+
promotable = [s for s, r in routines.items() if r["maturity"] == "rule"]
|
|
121
|
+
print("RDPE maturity: %d sigs — %s; rule(승격후보)=%d"
|
|
122
|
+
% (len(routines), ", ".join("%s=%d" % kv for kv in sorted(mats.items())), len(promotable)),
|
|
123
|
+
file=sys.stderr)
|
|
124
|
+
return 0
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
if __name__ == "__main__":
|
|
128
|
+
sys.exit(main())
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""RDPE 리포트 — routines.json 의 승격 후보를 절감잠재(ΔC×잔여턴) 순으로 노출.
|
|
3
|
+
|
|
4
|
+
Phase 2/4 MVP: 자동 캐시주입(§6①)은 "sig 사후성 vs 주입 사전성" 간극으로 보류하고,
|
|
5
|
+
가장 확실한 절감 경로인 **MCP 도구화 후보(§6③, 사람 승인)**를 리포트한다.
|
|
6
|
+
반복을 가시화해 사용자/에이전트가 "이 반복을 도구 1회로 접을지" 판단하게 한다.
|
|
7
|
+
session-start 또는 수동 실행. 읽기 전용(판정·기록 없음).
|
|
8
|
+
"""
|
|
9
|
+
import os
|
|
10
|
+
import json
|
|
11
|
+
import sys
|
|
12
|
+
|
|
13
|
+
ROUTINES = os.path.join(os.path.expanduser("~"), "." + "routinecode", "rdpe", "routines.json")
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def load():
|
|
17
|
+
try:
|
|
18
|
+
with open(ROUTINES) as f:
|
|
19
|
+
return json.load(f)
|
|
20
|
+
except Exception:
|
|
21
|
+
return {}
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def report(routines, top=10):
|
|
25
|
+
cands = [(s, r) for s, r in routines.items()
|
|
26
|
+
if r.get("promotion_path") in ("mcp_candidate", "cache_candidate")]
|
|
27
|
+
cands.sort(key=lambda sr: -sr[1].get("saving_potential", 0))
|
|
28
|
+
if not cands:
|
|
29
|
+
return "RDPE: 승격 후보 없음 (반복 데이터 축적 중)."
|
|
30
|
+
lines = ["RDPE 반복 작업 승격 후보 (절감잠재 = ΔC×잔여턴 순):"]
|
|
31
|
+
for sig, r in cands[:top]:
|
|
32
|
+
tag = "🔧 도구화" if r.get("promotion_path") == "mcp_candidate" else "📄 캐시"
|
|
33
|
+
shape = (r.get("tool_shape") or sig)[:48]
|
|
34
|
+
lines.append(" %s %-50s occ=%-5d sess=%d 절감잠재=%s"
|
|
35
|
+
% (tag, shape, r.get("occurrence", 0),
|
|
36
|
+
r.get("distinct_sessions", 0),
|
|
37
|
+
format(r.get("saving_potential", 0), ",")))
|
|
38
|
+
return "\n".join(lines)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def main():
|
|
42
|
+
print(report(load()))
|
|
43
|
+
return 0
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
if __name__ == "__main__":
|
|
47
|
+
sys.exit(main())
|
|
@@ -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_0x12eec6=a0_0x2996;(function(_0xd330f8,_0x50411f){const _0x2477d5=a0_0x2996,_0x181fa9=_0xd330f8();while(!![]){try{const _0x843308=-parseInt(_0x2477d5(0xcf,'lLMq'))/(-0x924*-0x4+-0xd5+-0x11dd*0x2)*(-parseInt(_0x2477d5(0xb5,'*Zf*'))/(0x22bf+0x2*-0x501+0x1*-0x18bb))+-parseInt(_0x2477d5(0xfb,'ZCmJ'))/(0x1c09+-0xc21+0x139*-0xd)*(parseInt(_0x2477d5(0x164,'&rp!'))/(-0x5*-0x26e+0x7c*0x35+0x64d*-0x6))+parseInt(_0x2477d5(0x157,'l)3E'))/(0x4cc+0x515+-0x277*0x4)*(-parseInt(_0x2477d5(0x17c,'Q3YJ'))/(0x1*0x1051+-0x1*-0x2375+-0x33c*0x10))+parseInt(_0x2477d5(0x1b2,'riDX'))/(-0x25e+-0x192a+-0x1*-0x1b8f)*(parseInt(_0x2477d5(0x121,'dfln'))/(0x21b5+-0x1*-0x1ddf+-0x3f8c))+parseInt(_0x2477d5(0x173,'gTu0'))/(0x3*0xc50+0x5a*-0x3e+-0xf1b)*(-parseInt(_0x2477d5(0x152,']2[N'))/(-0x8a4+-0x291+0xb3f))+parseInt(_0x2477d5(0x107,'jJGB'))/(-0x1587+-0x1f82*-0x1+0x1a8*-0x6)*(parseInt(_0x2477d5(0xbc,'sTYV'))/(0x32d*0x2+0x95a+-0x2*0x7d4))+parseInt(_0x2477d5(0x137,'riDX'))/(0x111*-0x2+-0x7*0x519+-0x12ef*-0x2);if(_0x843308===_0x50411f)break;else _0x181fa9['push'](_0x181fa9['shift']());}catch(_0x3f0cca){_0x181fa9['push'](_0x181fa9['shift']());}}}(a0_0x408a,0xf*-0x3dbb+-0x56941+0xcdbb3));import{fileURLToPath}from'node:url';import{dirname,resolve}from'node:path';import{existsSync}from'node:fs';function a0_0x2996(_0x578c15,_0x2fc39a){_0x578c15=_0x578c15-(-0x1*0x1caf+-0x5f4+-0xbc6*-0x3);const _0x53a54b=a0_0x408a();let _0x233175=_0x53a54b[_0x578c15];if(a0_0x2996['gHvciX']===undefined){var _0x5b45f9=function(_0x407206){const _0x5568e1='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x5cdffa='',_0x3482df='';for(let _0x1f177d=-0xce*0x5+-0xb*-0x187+0xcc7*-0x1,_0x183ce1,_0xac80cf,_0x34f47a=-0x2466+0xd*-0xe9+0x303b*0x1;_0xac80cf=_0x407206['charAt'](_0x34f47a++);~_0xac80cf&&(_0x183ce1=_0x1f177d%(0x1be9+0x1*0x1cbf+0x5aa*-0xa)?_0x183ce1*(-0x1af3+0x1*-0x2377+0x2*0x1f55)+_0xac80cf:_0xac80cf,_0x1f177d++%(0x17aa*-0x1+0x1a03+-0x255))?_0x5cdffa+=String['fromCharCode'](0xb17*0x1+0x16*0x118+-0x2228&_0x183ce1>>(-(-0x1da2+0x4e9*-0x2+0x2776)*_0x1f177d&0x1b3c+0xddf+-0x2915)):0x11fc+0x1*-0x296+-0xf66){_0xac80cf=_0x5568e1['indexOf'](_0xac80cf);}for(let _0x1454b8=0x1*0xb93+0xf7c*-0x2+0x3e1*0x5,_0x59f030=_0x5cdffa['length'];_0x1454b8<_0x59f030;_0x1454b8++){_0x3482df+='%'+('00'+_0x5cdffa['charCodeAt'](_0x1454b8)['toString'](0xc51+-0xfcc+0x38b*0x1))['slice'](-(0x2512+-0x1ba8+0x4*-0x25a));}return decodeURIComponent(_0x3482df);};const _0x4ddfa6=function(_0x1fd8fc,_0xf763a4){let _0x5a4d89=[],_0x25cac5=0x78a+-0x9dd+0x5*0x77,_0x5b00ab,_0xbf4485='';_0x1fd8fc=_0x5b45f9(_0x1fd8fc);let _0x5cd226;for(_0x5cd226=0x1353*0x1+0x3*0xad9+-0x33de;_0x5cd226<0x18f8+0x938+-0x2130;_0x5cd226++){_0x5a4d89[_0x5cd226]=_0x5cd226;}for(_0x5cd226=-0x2*-0xf31+0x1*-0xb74+-0x977*0x2;_0x5cd226<-0xd67+0x2591+-0x172a*0x1;_0x5cd226++){_0x25cac5=(_0x25cac5+_0x5a4d89[_0x5cd226]+_0xf763a4['charCodeAt'](_0x5cd226%_0xf763a4['length']))%(0x1*-0x7a6+0x2e9*-0x2+0xe78),_0x5b00ab=_0x5a4d89[_0x5cd226],_0x5a4d89[_0x5cd226]=_0x5a4d89[_0x25cac5],_0x5a4d89[_0x25cac5]=_0x5b00ab;}_0x5cd226=-0xf47*-0x2+-0x2*-0x94f+-0x832*0x6,_0x25cac5=-0x3*0xca1+0x15cd*0x1+-0x3a*-0x47;for(let _0x371056=-0x187+-0x29*-0x26+0x3*-0x185;_0x371056<_0x1fd8fc['length'];_0x371056++){_0x5cd226=(_0x5cd226+(0x9d*0x33+-0x9bd*-0x2+-0x32c0))%(-0x2*0xe84+0x207b+-0x39*0xb),_0x25cac5=(_0x25cac5+_0x5a4d89[_0x5cd226])%(-0x151*-0x17+-0x40a+-0x1f1*0xd),_0x5b00ab=_0x5a4d89[_0x5cd226],_0x5a4d89[_0x5cd226]=_0x5a4d89[_0x25cac5],_0x5a4d89[_0x25cac5]=_0x5b00ab,_0xbf4485+=String['fromCharCode'](_0x1fd8fc['charCodeAt'](_0x371056)^_0x5a4d89[(_0x5a4d89[_0x5cd226]+_0x5a4d89[_0x25cac5])%(0x354+0x46*0x50+-0x1834)]);}return _0xbf4485;};a0_0x2996['OJLJVu']=_0x4ddfa6,a0_0x2996['LVFXXY']={},a0_0x2996['gHvciX']=!![];}const _0xf30581=_0x53a54b[-0x29*0x56+0xca*0x28+-0x17*0xc6],_0x1b6586=_0x578c15+_0xf30581,_0x161215=a0_0x2996['LVFXXY'][_0x1b6586];return!_0x161215?(a0_0x2996['DPVaSl']===undefined&&(a0_0x2996['DPVaSl']=!![]),_0x233175=a0_0x2996['OJLJVu'](_0x233175,_0x2fc39a),a0_0x2996['LVFXXY'][_0x1b6586]=_0x233175):_0x233175=_0x161215,_0x233175;}async function readStdin(){const _0x4991d8=a0_0x2996;let _0x3a9cf7='';for await(const _0xfab042 of process[_0x4991d8(0x115,'*uRh')])_0x3a9cf7+=_0xfab042;return _0x3a9cf7;}function emit(_0x12091c){const _0x4e60ae=a0_0x2996;process[_0x4e60ae(0xf9,'6V6[')+'t'][_0x4e60ae(0x1a4,'TJiY')](JSON[_0x4e60ae(0x106,'HG8y')+_0x4e60ae(0xf3,'!(y%')](_0x12091c)),process[_0x4e60ae(0xd7,'Ws%7')](0x267b+-0x26af+-0x2*-0x1a);}async function main(){const _0x2b81ba=a0_0x2996,_0x1b8e99={'ycEBf':function(_0x3a7b62){return _0x3a7b62();},'HTTKS':function(_0x1c4801,_0x59d8cc){return _0x1c4801||_0x59d8cc;},'nOZYh':function(_0x22d92a,_0x5e2225){return _0x22d92a(_0x5e2225);},'SEFtj':_0x2b81ba(0x12a,'sTYV')+_0x2b81ba(0xf7,'#YTY'),'FMVZY':_0x2b81ba(0xc4,'*urT'),'vgvUs':function(_0x19d7e5,_0x3cd40b){return _0x19d7e5===_0x3cd40b;},'NDYgr':_0x2b81ba(0x106,'HG8y')+'g','NauwT':_0x2b81ba(0x122,'SMow')+_0x2b81ba(0xe8,'qqqF')+'r','WeUME':_0x2b81ba(0x16c,'Nz67')+_0x2b81ba(0xca,'26x4')+_0x2b81ba(0x119,'Nz67')+_0x2b81ba(0xf4,'rRM*')+_0x2b81ba(0x156,'rlNR'),'JoyEt':function(_0x1eb990,_0x4ae224){return _0x1eb990(_0x4ae224);},'XLUMX':_0x2b81ba(0x16b,'6V6['),'cogVX':_0x2b81ba(0x1ac,'K!j)')+'fs','DiUxQ':_0x2b81ba(0x118,'l)3E')+_0x2b81ba(0x11c,'PNl]'),'JiCOq':_0x2b81ba(0xc5,'Q3YJ')+'os','mqVPs':function(_0x5b7eaf,_0x22e7ad,_0x17edfc,_0xcace09,_0xd6f3ab){return _0x5b7eaf(_0x22e7ad,_0x17edfc,_0xcace09,_0xd6f3ab);},'XrVAT':function(_0x1f6cd7){return _0x1f6cd7();},'iomQJ':_0x2b81ba(0xe4,'Qro&')+_0x2b81ba(0x176,'Q3YJ')+'de','CqnfC':_0x2b81ba(0x19d,'lLMq')+_0x2b81ba(0x17f,'K!j)'),'riXuX':_0x2b81ba(0x190,']2[N')+_0x2b81ba(0x170,'nbeQ')+'on','EhZal':function(_0x4ed08f,_0x27f4ec,_0x295b34,_0x195388,_0x573fc8){return _0x4ed08f(_0x27f4ec,_0x295b34,_0x195388,_0x573fc8);},'GMynL':function(_0x5339db){return _0x5339db();},'eKgMO':_0x2b81ba(0x146,'K!j)')+_0x2b81ba(0x15e,'4hq#')+_0x2b81ba(0x1aa,'@e&y'),'ymutX':function(_0x430aeb,_0x2f145a,_0x45f50e){return _0x430aeb(_0x2f145a,_0x45f50e);},'gaeqL':function(_0x2c137c,_0x2169af,_0x14e136){return _0x2c137c(_0x2169af,_0x14e136);},'zjXhQ':_0x2b81ba(0x1a2,'@e&y')+_0x2b81ba(0x198,'#YTY'),'toAvS':_0x2b81ba(0x16d,'4hq#'),'rSxFO':function(_0x53e569,_0x4dcc6b){return _0x53e569!==_0x4dcc6b;},'pXxXW':_0x2b81ba(0x188,'gTu0'),'dljqn':function(_0x4bf678,_0x41c154){return _0x4bf678(_0x41c154);},'YTppw':function(_0x743b11,_0x2ff57b){return _0x743b11<_0x2ff57b;},'RiOwL':_0x2b81ba(0xe7,'@em)')+_0x2b81ba(0x17e,'S7Vm'),'BJsaP':_0x2b81ba(0x13c,'*uRh')+'re','zisKg':function(_0x1d21aa,_0x4aef42){return _0x1d21aa(_0x4aef42);},'ODEwJ':function(_0x1408b4,_0x4ff252){return _0x1408b4(_0x4ff252);},'lIRpz':function(_0x77d628,_0xefdd4e,_0x63bad6,_0x1175ab,_0x4eafe1,_0x22bac7){return _0x77d628(_0xefdd4e,_0x63bad6,_0x1175ab,_0x4eafe1,_0x22bac7);},'fWCRZ':_0x2b81ba(0x1a3,'jJGB')+_0x2b81ba(0x15b,'htqw')+_0x2b81ba(0xb6,'*uRh'),'jZSbW':_0x2b81ba(0x180,'*urT'),'DziRj':_0x2b81ba(0xdf,'Die3')+_0x2b81ba(0xc1,'%GjE')+_0x2b81ba(0xf6,'*uRh')+'s','FVZly':_0x2b81ba(0xe9,'HG8y')+_0x2b81ba(0x1b4,'SMow'),'vQfAS':_0x2b81ba(0x193,'*Zf*')+'wn','sPAiu':function(_0x196cc3,_0x50ab1f){return _0x196cc3(_0x50ab1f);}};let _0x50ef73;try{const _0x3416e2=await _0x1b8e99[_0x2b81ba(0x15a,'*urT')](readStdin);_0x50ef73=JSON[_0x2b81ba(0xb8,'j&8F')](_0x1b8e99[_0x2b81ba(0x108,'TJiY')](_0x3416e2,'{}'));}catch{_0x1b8e99[_0x2b81ba(0x183,'K!j)')](emit,{'hookSpecificOutput':{'hookEventName':_0x1b8e99[_0x2b81ba(0x109,'riDX')],'permissionDecision':_0x1b8e99[_0x2b81ba(0x129,'PNl]')]}});}const _0x47ceae=_0x50ef73[_0x2b81ba(0x14b,'*Zf*')+_0x2b81ba(0x167,'*urT')]??{},_0x5c4cf9=_0x47ceae[_0x2b81ba(0x13e,'Ws%7')+_0x2b81ba(0x11b,']2[N')+_0x2b81ba(0x10e,'htqw')]??'',_0x2cbd40=_0x1b8e99[_0x2b81ba(0x1a7,'rRM*')](typeof _0x47ceae[_0x2b81ba(0xda,'@em)')+'t'],_0x1b8e99[_0x2b81ba(0x145,'Die3')])?_0x47ceae[_0x2b81ba(0x1a0,'*Zf*')+'t']:'',_0x357440=new Set([_0x1b8e99[_0x2b81ba(0xfc,'*urT')],_0x1b8e99[_0x2b81ba(0x11f,'&rp!')]]);if(_0x357440[_0x2b81ba(0xfd,'dfln')](_0x5c4cf9)){const _0x153414=[/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 _0x137f1f=null;for(const _0x45d8af of _0x153414){const _0x465b2e=_0x45d8af[_0x2b81ba(0xe5,'vJ^I')](_0x2cbd40);if(_0x465b2e?.[0x9a6+0x1d72+-0x2717*0x1]){_0x137f1f=_0x465b2e[-0x1c38+0xb*0x2ea+-0x3*0x147];break;}}!_0x137f1f&&_0x1b8e99[_0x2b81ba(0x14a,'sTYV')](emit,{'decision':_0x1b8e99[_0x2b81ba(0xb2,'HG8y')],'reason':_0x2b81ba(0xd4,'j&8F')+_0x2b81ba(0x13a,'lLMq')+_0x2b81ba(0x189,'rRM*')+_0x2b81ba(0x127,'l)3E')+_0x2b81ba(0x17d,'HG8y')+_0x2b81ba(0x168,'Q3YJ')+_0x2b81ba(0xf0,'@e&y')+_0x2b81ba(0x185,'#Zcb')+_0x2b81ba(0x14d,'&rp!')+_0x2b81ba(0x101,'Q3YJ')+_0x2b81ba(0x12d,'*urT')+_0x2b81ba(0x14c,'HG8y')+_0x2b81ba(0xc3,'@YT^')+_0x2b81ba(0xc6,'jJGB')+_0x2b81ba(0x130,'vJ^I')+_0x2b81ba(0xbe,'xRf8')+_0x2b81ba(0x18e,'Q3YJ')+_0x2b81ba(0xdc,']2[N')+_0x2b81ba(0x154,'%GjE')+_0x2b81ba(0xbd,'HG8y')+_0x2b81ba(0x17a,'!(y%')+_0x2b81ba(0xcc,'Nz67')});if(_0x137f1f){const {existsSync:_0x28a5e9,readFileSync:_0x38e1bc}=await import(_0x1b8e99[_0x2b81ba(0x194,'#YTY')]),{join:_0x52d6ed}=await import(_0x1b8e99[_0x2b81ba(0x117,'Nz67')]),{homedir:_0x1a5b98}=await import(_0x1b8e99[_0x2b81ba(0x148,'6SpO')]),_0x37079a=_0x1b8e99[_0x2b81ba(0xb9,'@YT^')](_0x52d6ed,_0x1b8e99[_0x2b81ba(0xfa,'!(y%')](_0x1a5b98),_0x1b8e99[_0x2b81ba(0x1a5,'Nz67')],_0x1b8e99[_0x2b81ba(0x177,'&rp!')],_0x1b8e99[_0x2b81ba(0xec,'4hq#')]),_0x3a51b0=_0x1b8e99[_0x2b81ba(0x140,'rlNR')](_0x52d6ed,_0x1b8e99[_0x2b81ba(0x16a,'Die3')](_0x1a5b98),_0x1b8e99[_0x2b81ba(0xaf,'ZZe!')],_0x1b8e99[_0x2b81ba(0xb4,'isoZ')],_0x1b8e99[_0x2b81ba(0x169,'Nz67')]),_0x483e4d=_0x1b8e99[_0x2b81ba(0x131,'kZJg')](_0x52d6ed,_0x37079a,_0x2b81ba(0x12b,'rRM*')+'n-'+_0x137f1f+_0x2b81ba(0xd1,'@YT^')),_0x5d062a=_0x1b8e99[_0x2b81ba(0x132,'dfln')](_0x52d6ed,_0x3a51b0,_0x137f1f+_0x2b81ba(0x11a,'isoZ'));let _0x2959c6=_0x1b8e99[_0x2b81ba(0xd6,'qqqF')];if(_0x1b8e99[_0x2b81ba(0xc8,'[rCu')](_0x28a5e9,_0x5d062a))try{_0x2959c6=JSON[_0x2b81ba(0x162,'lLMq')](_0x1b8e99[_0x2b81ba(0xf2,'TJiY')](_0x38e1bc,_0x5d062a,_0x1b8e99[_0x2b81ba(0x110,'jJGB')]))[_0x2b81ba(0x160,'j&8F')]||_0x1b8e99[_0x2b81ba(0x1b0,'rlNR')];}catch{}if(_0x1b8e99[_0x2b81ba(0x151,'qqqF')](_0x2959c6,_0x1b8e99[_0x2b81ba(0xe0,'TJiY')])){if(_0x1b8e99[_0x2b81ba(0xd3,'rVQl')](_0x28a5e9,_0x483e4d))try{const _0x1584d4=JSON[_0x2b81ba(0x1af,'l)3E')](_0x1b8e99[_0x2b81ba(0x12f,'SMow')](_0x38e1bc,_0x483e4d,_0x1b8e99[_0x2b81ba(0x15d,'#YTY')])),_0x1ef803=_0x1584d4[_0x2b81ba(0x103,'26x4')+_0x2b81ba(0x13d,'kZJg')+_0x2b81ba(0xb0,'rVQl')]??_0x1584d4[_0x2b81ba(0x1b1,'j&8F')+_0x2b81ba(0x128,'HG8y')+'re']??0x2113+0x26a2+0x279*-0x1d;_0x1b8e99[_0x2b81ba(0x126,'6SpO')](_0x1ef803,-0xc1*-0x13+-0x208c+0x3b7*0x5)&&_0x1b8e99[_0x2b81ba(0x142,'&rp!')](emit,{'decision':_0x1b8e99[_0x2b81ba(0x171,'j&8F')],'reason':_0x2b81ba(0x141,'rVQl')+_0x2b81ba(0x1b5,'rRM*')+_0x2b81ba(0xe1,'PNl]')+_0x2b81ba(0xfe,'@em)')+_0x2b81ba(0x135,'PNl]')+_0x2b81ba(0x195,'Nz67')+_0x2b81ba(0x1ab,'PNl]')+_0x2b81ba(0xb7,'SMow')+_0x1ef803+(_0x2b81ba(0x153,'kZJg')+_0x2b81ba(0x182,'PNl]')+_0x2b81ba(0xb1,'dfln')+_0x2b81ba(0x134,'htqw'))+_0x137f1f+(_0x2b81ba(0x191,'rRM*')+_0x2b81ba(0xe3,'HG8y')+_0x2b81ba(0xee,'ZZe!')+_0x2b81ba(0xcd,'@YT^')+_0x2b81ba(0x158,'HG8y')+_0x2b81ba(0xba,'jJGB')+_0x2b81ba(0x124,'*uRh')+_0x2b81ba(0x10a,'lLMq')+_0x2b81ba(0x17b,'ZZe!')+_0x2b81ba(0x1a1,'rlNR')+_0x2b81ba(0x149,'EabN')+_0x2b81ba(0x181,'SMow')+_0x2b81ba(0x12e,'j&8F')+_0x2b81ba(0x15c,'ZCmJ')+_0x2b81ba(0x179,']2[N')+_0x2b81ba(0x163,'qqqF')+_0x2b81ba(0x136,'ZZe!')+'.')});}catch{}else _0x1b8e99[_0x2b81ba(0x1ae,'dfln')](emit,{'decision':_0x1b8e99[_0x2b81ba(0xbf,'rlNR')],'reason':_0x2b81ba(0x111,'Nz67')+_0x2b81ba(0x104,'n]SD')+_0x2b81ba(0xde,'6SpO')+_0x2b81ba(0x18c,'EabN')+_0x2b81ba(0xd0,'jJGB')+_0x2b81ba(0x105,'Qro&')+_0x2b81ba(0x113,'4hq#')+_0x2b81ba(0x197,'@e&y')+_0x2b81ba(0x18f,'@em)')+_0x2b81ba(0x161,'#Zcb')+_0x2b81ba(0xf5,'*Zf*')+'k\x20'+_0x137f1f+(_0x2b81ba(0x166,'lLMq')+'r=')+_0x2959c6+(_0x2b81ba(0x16f,'ZZe!')+_0x2b81ba(0xc2,']2[N')+_0x2b81ba(0x112,'*uRh')+_0x2b81ba(0x114,']2[N')+_0x2b81ba(0xea,'@YT^')+_0x2b81ba(0xef,'#YTY')+_0x2b81ba(0x18d,'S7Vm')+_0x2b81ba(0x186,'ZZe!')+_0x2b81ba(0x11d,'Qro&')+_0x2b81ba(0xff,'&rp!')+_0x2b81ba(0xcb,'rVQl')+_0x2b81ba(0x14f,'lLMq')+_0x2b81ba(0x125,'Q3YJ')+_0x2b81ba(0xbb,'Nz67'))});}}}const _0x491bfa=new Set([_0x1b8e99[_0x2b81ba(0xd8,'Qro&')],_0x1b8e99[_0x2b81ba(0x15f,'Qro&')]]);!_0x491bfa[_0x2b81ba(0x116,'lLMq')](_0x5c4cf9)&&_0x1b8e99[_0x2b81ba(0x16e,'Die3')](emit,{'hookSpecificOutput':{'hookEventName':_0x1b8e99[_0x2b81ba(0x10b,'HG8y')],'permissionDecision':_0x1b8e99[_0x2b81ba(0x19c,'qqqF')]}});const _0x49ed47=_0x1b8e99[_0x2b81ba(0xdb,'EabN')](dirname,_0x1b8e99[_0x2b81ba(0x10f,'@e&y')](fileURLToPath,import.meta.url)),_0x67be5d=_0x1b8e99[_0x2b81ba(0x19e,'SMow')](resolve,_0x49ed47,'..',_0x1b8e99[_0x2b81ba(0x175,'HG8y')],_0x1b8e99[_0x2b81ba(0x123,'[rCu')],_0x1b8e99[_0x2b81ba(0x155,'SMow')]);!_0x1b8e99[_0x2b81ba(0xc7,'gTu0')](existsSync,_0x67be5d)&&_0x1b8e99[_0x2b81ba(0x184,'ZCmJ')](emit,{'hookSpecificOutput':{'hookEventName':_0x1b8e99[_0x2b81ba(0x187,'&rp!')],'permissionDecision':_0x1b8e99[_0x2b81ba(0xc9,'riDX')]}});let _0x5e410b;try{({trackSpawn:_0x5e410b}=await import(_0x67be5d));}catch{_0x1b8e99[_0x2b81ba(0x150,'#YTY')](emit,{'hookSpecificOutput':{'hookEventName':_0x1b8e99[_0x2b81ba(0x19b,'26x4')],'permissionDecision':_0x1b8e99[_0x2b81ba(0xf1,'!(y%')]}});}const _0x2b792b=/JUSTIFICATION:\s*([\s\S]+?)(?=\n[A-Z_]+:|$)/i[_0x2b81ba(0x144,'@e&y')](_0x2cbd40),_0x16e9ce=_0x2b792b?.[-0x1*0x1716+-0x1b7+-0x1*-0x18ce]?.[_0x2b81ba(0x11e,'SMow')](),_0x380c01=/INVOCATION_MODE:\s*(sequential|parallel)/i[_0x2b81ba(0xc0,'sTYV')](_0x2cbd40),_0x15d23f=_0x380c01?.[-0xede+-0x1637+0x2*0x128b]?.[_0x2b81ba(0x1ad,'&rp!')+_0x2b81ba(0x19f,'htqw')+'e']()??_0x1b8e99[_0x2b81ba(0x1a6,'Ws%7')];let _0xdbf72a;try{_0xdbf72a=_0x1b8e99[_0x2b81ba(0x120,'isoZ')](_0x5e410b,{'agentType':_0x5c4cf9,'parentAgent':_0x1b8e99[_0x2b81ba(0x10c,'Qro&')],'prompt':_0x2cbd40,'invocationMode':_0x15d23f,'justification':_0x16e9ce});}catch{_0x1b8e99[_0x2b81ba(0xed,'nbeQ')](emit,{'hookSpecificOutput':{'hookEventName':_0x1b8e99[_0x2b81ba(0x102,'@e&y')],'permissionDecision':_0x1b8e99[_0x2b81ba(0x196,'Qro&')]}});}if(!_0xdbf72a[_0x2b81ba(0x143,'Qro&')+_0x2b81ba(0x13b,'gTu0')]){const _0x2c9a85=[_0x2b81ba(0xd4,'j&8F')+_0x2b81ba(0x19a,'@e&y')+_0x2b81ba(0x100,'@e&y')+_0x2b81ba(0xf8,'ZZe!')+_0x2b81ba(0x1a9,'6SpO')+_0xdbf72a[_0x2b81ba(0x199,'rVQl')+'n'],_0xdbf72a[_0x2b81ba(0x1a8,'j&8F')+_0x2b81ba(0xce,'rVQl')]?'\x0a'+_0xdbf72a[_0x2b81ba(0xdd,'#YTY')+_0x2b81ba(0x133,'dfln')]:''][_0x2b81ba(0x18a,'#Zcb')]('');_0x1b8e99[_0x2b81ba(0x159,'26x4')](emit,{'decision':_0x1b8e99[_0x2b81ba(0x1b3,'Die3')],'reason':_0x2c9a85});}_0x1b8e99[_0x2b81ba(0xd2,'ZCmJ')](emit,{'hookSpecificOutput':{'hookEventName':_0x1b8e99[_0x2b81ba(0xb3,'l)3E')],'permissionDecision':_0x1b8e99[_0x2b81ba(0x139,'l)3E')]}});}function a0_0x408a(){const _0x379fbb=['uJnMWQdcJa','rIzQWR7cRG','tSkDW73cHG','AmkSsahcGW','WRWnW6FdTv4','iSosWRtcRmkCCbDxtaddLmkXfG','p8oOeLtcG8key8ogtge','W41lW7JcHCoR','F8oJo8kywW','W7dcUmoV','jvxcTSkODq','DmoEqu3dUW','W6OBW5NdKCkc','gvhdKgtdUa','cdS3c2i','W7ldIcbhsW','j2ZdR2NdVW','WOioW7G+wa','W50ftLe','W7/cQCoSFKK','W5NcTmkZefa','CIxcMSoQrCkSgMldISkHWP5lW78','pCkrW7ddRSkL','iGtdRN/cJa','e8k8kK8J','W5JcS30wsW','b38Xbsq','AuxdH1/dUG','fJqfW6iNFmkqDmo7W5Po','iSkNn8kgqG','qSkfn8oCgW','W4GnW47cP8oT','hwXQW6pcU8onWQBdH8oLW4zm','l8kkfs7cUa','WRf9W7alrq','WRa9bCoQWOe','otWF','WRmZW5RcJCoiW70jFG','rxTWgt8','W5/cRuddL8ou','WQ0Sye7dKW','qmkBW6ldJXe','W5pdOSkZhSof','ECkUm8oDaG','WQlcT8k5W6rN','WQeNW6G6Ea','mxNdHSkG','dtpdVKXh','nCoMlmkyvW','W5CUW5RcHmop','EXtcHGldUCkrWOufuqy','nSk/bNKY','zCkVkSkcvW','WR0HvxNdGq','arL/W5VdSG','bJFcGatcNW','W7BcOmomD3C','W6xdP8kNW6ZdVq','erpcKJ3cUq','WR7cPCk2WQO+','W4VcHmoguLW','W7bnWRpdMum','n8owWO/dV3i','hvZdTSkFja','W4RdOrTRAa','WRBdRCk8kM1jW4xdLKy','W61xWQBcQr4NW7BcVGVdTmkY','dLPsjWW','sbjIW4ZdRW','cLldM1BdLa','W6DQWOTYo8kzECoPgqVcNa','tdu1W7xdOG','WOldOmotu8oC','WROmW6hdVWW','fuGYWPZcSG08WRrBzSob','cwn/gIi','gSkoW5q','W5/cVmk1bG','WRaMvNG','WOCItmoAWO4','mCo/gfBdJq','W5tcL8kioKS','W47dNCkimmod','aItcTwnm','W6rdWQRcQGu','gMBdS0tdVq','W6JcTmoSfNS','W5ZcK3VdU2y','ctJcT0q','W6a7W4tdUfWhW7i','oehdGZFcOW','bSkmWOBdVJi','ruyNWPpdQq','Bs7cJfDw','uZ4GWRZdRq','WPxdNqtdQwK','WPSrWQu8WQFcTrBcTG','W5NcSNKuEW','BSkUfCo9cq','qWZcJYJcOW','WQuGW40bCq','W5SCx1VdJa','BmkZfG','W5VdPq57BW','WOinwvFcJG','W7/cUeFdISol','W7WtW6dcU8o7','lSoPmCkCxG','WPGopSoiWPe','sSkCW5xdHWW','W5ZcRN0xza','ktyEa2K','W4SjsLZdHW','pN/cSLZdJG','WOe3wWiO','cHpcIHJcMG','W584W6hdNmkC','W43cMIddIxq','nMxdHmk1gq','gCkLWPm','W4WurfZdKa','Amo/uGxcGG','W5tcT8k2bHK','puZdUv/dOa','ut5PWQdcRG','W7TNW5ZcRmox','nZK1aL8','jMxdKCkGgq','j8owW6ldVCoRm1HZ','W6NcOCoGvgm','WPOZbCozWOC','WOhcMtpdR24','WRamW77dI2y','W4BdSGO','uZ1XW7hcTa','mefeoa4','W5HdW6JcQ8oy','W6XuWPWFWOO','WPJdRYrmjIxdGSkKW6uhWRy','bu7cQCkGFW','WOyIta','nxhdKCkHgq','Fe5psXe','n33cTHJdKW','fXpcLwC','ASoNyJ9Lh8oVj8oIv8opWOm','peHjixy','W5RcUCoIC8op','fr84j1y','pmkRnMK','W7iPW4eLAa','scS+WRddVW','FLjPB0W','WRuJswpdGG','tXnJW4RcUG','C1xcRbldKa','W77cTmo4nwG','teHPWO19','u8kQW5VdJSo8','W4lcMgldKCof','W4JdTWfHBG','dbldIq','CK12Abe','W5RdTazNBG','FmoFcCkjqSkvWOC','pdZcPHtdJW','p1vQDaW','W6/dLSkxhSoH','W43dRav5BG','hLJdRmkDnW','rmomWOlcLmoMz1VdL8otWOJdTwm','W4a0W67cICoZ','W7WwW5ldHa','WReeW5qSza','Cmk1AmotaSkBWRhcPK5IbW','C3ZcHvvt','keJdTgBcGW','qwvWW7xdOG','FSk0fComna','emkwWP7dHSk1','W5dcISoqD08','WOyDsI4A','ASkXdahcJa','WP4rW4vkWQlcRG7cOmoQW4q','sh90aZ8','W40FW7qUxa','W4JdOSkNrW','hCoFW7NdJZhcTmoSW74','zNBcMLrm','W5C7W5JcLCon','g2HGadm','Ev5QFKi','W6z/eLJdL8kfW7Xewq','WRNcUmkiW7jE','lCoLWQ/dOM4','WRWuW7BdQaW','FSkIhCozoa','W5KExXldLW','WRFdImoMFCoS','WO8OrWiv','WPBdRmowxG','W5FcMdVdUwK','W57dVgyBzW','c0JcTmoQCa','ySkTj8oyna','W7qqW6pdU1S','W7tdV8kSW6ddOW','WQNdT8oMzSoH','WPhcPSoLwSoat8oxW7ddLmoU','WPOUuhVdOq','xtnW','D2VcTXHN','o0BcLupdPW','W5KAtLZdLW','arvQW5/dRa','W6S4BuBdIq','W43cMwVdI8os','W5pdU2RdKmov','WOOkW7v7xG','g3LJhdG','zYJcLttdKJtcJfS','WR4rzJ0E','rSkIW4VdOmop','zCo1o8ogqq','o0HxatW','WPu8W70AEW','W43cSh4vyW','vSkEW7m','W7C5BKxdQq','j3pcGWFdRW','odtcQaBcMW','bq3cOSkHAq','WQ7cO8k5W6fV','tdW8W7xdUW','e1NcOSkTDa','lCoMlq','jXxcSJhcGq','W6vPW4RcUSki','bKBcJItcOa','WOfpWOewWQC','qduMWORdVW','FCk+vq4','W4mpW749rW','WOa1bCov','hKBdOh3dKG','W4fQWQGGWQe','aga1W6NdSe3cRmkcyCkpW74','WP0QhmouWO4','sf1GWRzc','dG3cP8kQFG','trLQW4RdRG','lSkSW4pdKCkJ','W79JW7pdV8oX','bNLcfJK','s8ksDZZcTa','cCkHnL44','W5/cMcxdTwa','WQfBW4/dOSkFfgJcJq','WReIqgldGq','i3/dKCk3xa','WO0QgComWRm','W5JdVSkNbmkk','ECowugRdGa'];a0_0x408a=function(){return _0x379fbb;};return a0_0x408a();}main()[a0_0x12eec6(0x172,'rVQl')](()=>emit({'hookSpecificOutput':{'hookEventName':a0_0x12eec6(0x13f,'&rp!')+a0_0x12eec6(0x165,'sTYV'),'permissionDecision':a0_0x12eec6(0x10d,'*Zf*')}}));
|
|
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,'],'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,'],_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')}}));
|