monster-orchestrator 3.2.8 → 3.4.0
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/dist-obf/.buildinfo +6 -6
- package/dist-obf/governor-tick.js +2 -0
- package/dist-obf/index.js +1 -1
- package/dist-obf/manifest.json +15 -5
- package/dist-obf/package.json +7 -5
- package/dist-obf/supervisor-notify-tick.js +1 -1
- package/manifest.json +15 -5
- package/package.json +4 -2
- package/scripts/governor-tick.sh +38 -0
- package/scripts/governor-wait.sh +90 -0
package/dist-obf/manifest.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"mcpId": "monster-orchestrator",
|
|
3
3
|
"name": "Monster Orchestrator",
|
|
4
|
-
"version": "3.
|
|
5
|
-
"description": "Claude Code CLI を独立サブプロセス(tmux session)として起動・送信・監視・停止する。v2.0.0 から ready signal polling / spawn_timeout / events.log NDJSON + ローテーション / Claude Code 5種 hook 注入 / 60秒ごとの session.log スナップショットに対応。v2.1 から spawn / stop / list は BlueLamp 認証(X-CLI-Token)必須で、皆伝(tenant_rank>=4)以上が利用可能。同時稼働数の上限値はここに書かない(実装更新で腐るため)——拒否する上限はサーバ側 quota が、ローカルの暴走 spawn backstop は `MONSTER_MAX_CONCURRENT`(正本は `resolveMaxConcurrent()`)が正本で、この 2 つは別物。v2.3 から agent 別の events 確認カーソル(state.json.cursors)と mark_events_seen tool を追加し、未確認 awaiting_input / stopped を能動把握できる(推奨運用: get_monster_events に agent_id を渡し、取得後 max_event_ts を mark_events_seen で記録)。v2.4.0 から backend を mikoto-company-api に完全移管(Phase 53C)。受講生 PC は BLUELAMP_CLI_TOKEN → bluelampportal /api/auth/exchange → RS256 JWT → mikoto-company-api /api/monster/* の 2 段構えで認証。主エージェントが複数 monster を並列制御する汎用オーケストレータ。",
|
|
4
|
+
"version": "3.4.0",
|
|
5
|
+
"description": "Claude Code CLI を独立サブプロセス(tmux session)として起動・送信・監視・停止する。v2.0.0 から ready signal polling / spawn_timeout / events.log NDJSON + ローテーション / Claude Code 5種 hook 注入 / 60秒ごとの session.log スナップショットに対応。v2.1 から spawn / stop / list は BlueLamp 認証(X-CLI-Token)必須で、皆伝(tenant_rank>=4)以上が利用可能。同時稼働数の上限値はここに書かない(実装更新で腐るため)——拒否する上限はサーバ側 quota が、ローカルの暴走 spawn backstop は `MONSTER_MAX_CONCURRENT`(正本は `resolveMaxConcurrent()`)が正本で、この 2 つは別物。v2.3 から agent 別の events 確認カーソル(state.json.cursors)と mark_events_seen tool を追加し、未確認 awaiting_input / stopped を能動把握できる(推奨運用: get_monster_events に agent_id を渡し、取得後 max_event_ts を mark_events_seen で記録)。v2.4.0 から backend を mikoto-company-api に完全移管(Phase 53C)。受講生 PC は BLUELAMP_CLI_TOKEN → bluelampportal /api/auth/exchange → RS256 JWT → mikoto-company-api /api/monster/* の 2 段構えで認証。主エージェントが複数 monster を並列制御する汎用オーケストレータ。v3.3.0 から memory governor(艦隊の赤信号ブレーキ)を同梱: 常駐 tick(scripts/governor-tick.sh・30 秒)が機体のメモリ圧力を ~/.claude/monsters/governor.json に書き、critical(red)のときだけ spawn_monster が `MEMORY_CRITICAL` で拒否し、scripts/governor-wait.sh が重い検査の開始を待つ。走行中は触らない。計器が無い/古いときは fail-open で従来どおり動き、その事実を footer / governor_notice に出す。設置は docs/governor-launchd.md。v3.4.0 から席の生死を「席の実在」でなく機能で実測する assess_liveness(直近活動・ロール読込・巡回 cron の 3 点すべて真で alive・tmux を見ない)と spawn 直後の着任確認 await_onboarding、4 値ログ ~/.claude/monsters/selfheal.log を追加(板 #608・夜間自己修復便の誤検知対策)。",
|
|
6
6
|
"category": "automation",
|
|
7
7
|
"tier": 2,
|
|
8
8
|
"tenantSlug": "yamatovision",
|
|
@@ -20,7 +20,9 @@
|
|
|
20
20
|
"MONSTER_MAX_CONCURRENT",
|
|
21
21
|
"MONSTER_DEFAULT_TIMEOUT_MIN",
|
|
22
22
|
"MONSTER_CLAUDE_BIN",
|
|
23
|
-
"MONSTER_HOOK_PATH"
|
|
23
|
+
"MONSTER_HOOK_PATH",
|
|
24
|
+
"MONSTER_GOVERNOR_RED_LEVEL",
|
|
25
|
+
"MONSTER_GOVERNOR_RED_PCT"
|
|
24
26
|
],
|
|
25
27
|
"externalApi": {
|
|
26
28
|
"enabled": true,
|
|
@@ -44,11 +46,11 @@
|
|
|
44
46
|
"tools": [
|
|
45
47
|
{
|
|
46
48
|
"name": "spawn_monster",
|
|
47
|
-
"description": "新しい monster(Claude Code CLI tmux session)を起動し初回 task を送信する。ready signal を 45 秒以内に検出できなければ spawn_timeout 応答を返す。BlueLamp backend の authorize-spawn で皆伝(tenant_rank>=4)以上であることと同時稼働 quota を enforce(超過は `QUOTA_EXCEEDED`)。上限の数値はここに書かない(実装更新で腐るため)。ローカル側の暴走 spawn backstop は `MONSTER_MAX_CONCURRENT`(正本は `resolveMaxConcurrent()`)で、サーバの拒否上限とは別物。なお `workdir` 引数は monster の cwd ではなく `--add-dir` で読み書き許可される追加 path。cwd は monster home(~/.claude/monsters/{id}/)に固定され、hook 設定の解決のためこの設計は意図的。`launcher` 引数(任意)でこの呼び出しだけ起動子を差し替えられる(許可形式は `claude` / `bluelampNN`(NN=1〜999・先頭ゼロなし)のみ・形式外や未導入の値は spawn を拒否しフォールバックしない・解決順序: launcher 引数 > MONSTER_CLAUDE_BIN > `claude`)。例: `bluelamp51`。番号とロールの対応は `list_tenant_agents` の「種別: オーケストレーター (bluelampNN)」欄が正本。ここに対応表を書かない(実装更新で腐るため)。"
|
|
49
|
+
"description": "新しい monster(Claude Code CLI tmux session)を起動し初回 task を送信する。ready signal を 45 秒以内に検出できなければ spawn_timeout 応答を返す。BlueLamp backend の authorize-spawn で皆伝(tenant_rank>=4)以上であることと同時稼働 quota を enforce(超過は `QUOTA_EXCEEDED`)。上限の数値はここに書かない(実装更新で腐るため)。ローカル側の暴走 spawn backstop は `MONSTER_MAX_CONCURRENT`(正本は `resolveMaxConcurrent()`)で、サーバの拒否上限とは別物。なお `workdir` 引数は monster の cwd ではなく `--add-dir` で読み書き許可される追加 path。cwd は monster home(~/.claude/monsters/{id}/)に固定され、hook 設定の解決のためこの設計は意図的。`launcher` 引数(任意)でこの呼び出しだけ起動子を差し替えられる(許可形式は `claude` / `bluelampNN`(NN=1〜999・先頭ゼロなし)のみ・形式外や未導入の値は spawn を拒否しフォールバックしない・解決順序: launcher 引数 > MONSTER_CLAUDE_BIN > `claude`)。例: `bluelamp51`。番号とロールの対応は `list_tenant_agents` の「種別: オーケストレーター (bluelampNN)」欄が正本。ここに対応表を書かない(実装更新で腐るため)。v3.3.0 から機体のメモリ圧力が critical(governor.json が red)のときは spawn せず `code: MEMORY_CRITICAL` / `refused: memory_critical` で拒否する(走行中は触らない・自動再試行しない・green に戻れば同じ引数で通る)。計器が無い/古いときは fail-open で spawn し `governor_notice` を添える。"
|
|
48
50
|
},
|
|
49
51
|
{
|
|
50
52
|
"name": "list_monsters",
|
|
51
|
-
"description": "稼働中・停止済みを含む全 monster を列挙し、未読イベント最新 5 件を添付する。手元の active tmux session を backend に報告して stale 検知も走らせる。"
|
|
53
|
+
"description": "稼働中・停止済みを含む全 monster を列挙し、未読イベント最新 5 件を添付する。手元の active tmux session を backend に報告して stale 検知も走らせる。v3.3.0 から応答に `governor` 欄(memory governor の state / level / available_pct / native_level / ts / age_sec)が付く。"
|
|
52
54
|
},
|
|
53
55
|
{
|
|
54
56
|
"name": "query_monster",
|
|
@@ -69,6 +71,14 @@
|
|
|
69
71
|
{
|
|
70
72
|
"name": "mark_events_seen",
|
|
71
73
|
"description": "agent ごとの events 確認カーソルを更新する(state.json.cursors[agent_id] = ts)。get_monster_events で取得した max_event_ts を渡すことで、次回呼び出しが「未確認イベントのみ」を返す。Stop hook (~/.claude/hooks/check-monster-events.sh) と協調し重複報告を防止。agent_id は呼び出し元 agent が自由に命名(例: tech-lead-main / tech-lead-mikoto-kaiden-XX)。"
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"name": "assess_liveness",
|
|
77
|
+
"description": "席の生死を「席の実在」でなく機能で実測する(板 #608)。tmux は見ない。① 直近活動(events.log 最終 ts と transcript mtime の新しい方が activity_window_min(既定 30 分)以内)② ロール読込(transcript に load_knowledge の成功結果が 1 件以上・Prompt not found / ❌ は失敗)③ 巡回 cron(assistant tool_use の CronCreate(recurring が false でないもの=省略も登録)件数 > CronDelete 件数)の 3 点すべて真で alive・1 つでも偽なら dead で理由を全部 reasons に列挙する。transcript 0 本は ②③ とも偽(fail-closed)。副作用は selfheal.log への 1 行だけ(stop / spawn はしない)。"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"name": "await_onboarding",
|
|
81
|
+
"description": "spawn 直後の席がロールを読めたか(着任)を transcript の poll で実測する(板 #608)。load_knowledge の結果が出た時点で即返す: 成功 → onboarded=true(keyword / ts)/失敗 → reason=role_load_failed(detail)/何も出ないまま timeout_sec(既定 120・上限 300)→ reason=timeout。既に成功済みなら即返す(冪等・短い timeout_sec で呼び直す運用でよい)。tmux は見ない。副作用は selfheal.log への 1 行(spawned(successor=…) / spawn_failed(…))だけで、再 spawn・障害メモは呼び出し側の責務。"
|
|
72
82
|
}
|
|
73
83
|
]
|
|
74
84
|
}
|
package/dist-obf/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "monster-orchestrator",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.4.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist-obf/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -13,7 +13,9 @@
|
|
|
13
13
|
"scripts/monster-stop-hook",
|
|
14
14
|
"scripts/check-monster-events.sh",
|
|
15
15
|
"scripts/supervisor-notify-tick.sh",
|
|
16
|
-
"scripts/monster-deathcheck"
|
|
16
|
+
"scripts/monster-deathcheck",
|
|
17
|
+
"scripts/governor-tick.sh",
|
|
18
|
+
"scripts/governor-wait.sh"
|
|
17
19
|
],
|
|
18
20
|
"engines": {
|
|
19
21
|
"node": ">=20"
|
|
@@ -37,8 +39,8 @@
|
|
|
37
39
|
"vitest": "^4.1.5"
|
|
38
40
|
},
|
|
39
41
|
"buildInfo": {
|
|
40
|
-
"builtFromCommit": "
|
|
41
|
-
"builtAt": "2026-09-
|
|
42
|
-
"srcSha256": "
|
|
42
|
+
"builtFromCommit": "45da631",
|
|
43
|
+
"builtAt": "2026-09-04T01:07:06Z",
|
|
44
|
+
"srcSha256": "2138af51fc81295158e7283c13098cfed19786844e21c0f0306d31bccb6cb078"
|
|
43
45
|
}
|
|
44
46
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
const a0bQ=a0c;(function(a,c){const bO=a0c,d=a();while(!![]){try{const e=parseInt(bO(0x1af))/0x1*(-parseInt(bO(0x111))/0x2)+-parseInt(bO(0x101))/0x3*(-parseInt(bO(0x116))/0x4)+-parseInt(bO(0x102))/0x5+parseInt(bO(0x118))/0x6+-parseInt(bO(0x176))/0x7+-parseInt(bO(0x22a))/0x8*(-parseInt(bO(0x175))/0x9)+parseInt(bO(0x1df))/0xa*(parseInt(bO(0x10b))/0xb);if(e===c)break;else d['push'](d['shift']());}catch(f){d['push'](d['shift']());}}}(a0a,0x72ff3));import*as a0bC from'node:fs';import*as a0bD from'node:path';var Wt=/[\u0000-\u001f\u007f-\u009f]/g;function Q(a){const bP=a0c;return a['replace'](Wt,'\x20')[bP(0xfc)](/\s+/g,'\x20')[bP(0x1de)]();}import*as a0bE from'node:os';import*as a0bF from'node:path';var C=process.env.MONSTER_MCP_ROOT,w=C&&C[a0bQ(0x21b)]>0x0?C:a0bF[a0bQ(0x1d6)](a0bE[a0bQ(0x167)](),a0bQ(0x218),a0bQ(0x1c0)),et=a0bF[a0bQ(0x1d6)](w,'state.json'),gn=a0bF[a0bQ(0x1d6)](w,a0bQ(0x180)),v=a0bF[a0bQ(0x1d6)](w,'events.log'),$=a0bF['join'](w,a0bQ(0x1cf)),j=a0bF[a0bQ(0x1d6)](w,a0bQ(0x1c2)),nt=0xa*0x400*0x400,qt=0x5*0x400*0x400,T=a0bF[a0bQ(0x1d6)](w,'supervisor-notify.json'),x=T+a0bQ(0xf8),O=a0bF[a0bQ(0x1d6)](w,a0bQ(0x14e)),st=O+'.1',rt=0x2*0x400*0x400;function Zt(){const bR=a0bQ;try{if(bR(0x1e9)!==bR(0x1e9)){let c=i[bR(0x1c0)][m];return!c||!c[bR(0x139)]?n:{...o,'monsters':{...p[bR(0x1c0)],[r]:{...c,'awaiting_reaction':!0x1}}};}else{if(a0bC['statSync'](O)[bR(0x181)]<rt)return;a0bC[bR(0x1ac)](O,st);}}catch{}}function it(a){const bS=a0bQ;let c=new Date()[bS(0x1a0)]()+'\x20'+Q(a)+'\x0a';try{if(bS(0xe6)!=='Lyhfx')a0bC[bS(0x1fc)](a0bD['dirname'](O),{'recursive':!0x0}),Zt(),a0bC[bS(0x126)](O,c,bS(0xf4));else return f?.[bS(0x151)]===bS(0x1b4)?{'ok':!0x0,'state':h()}:{'ok':!0x1,'kind':'unreadable','detail':i(m)};}catch{}}import*as a0bG from'node:fs';import*as a0bH from'node:fs';import*as a0bI from'node:fs/promises';function Qt(){const bT=a0bQ;a0bH[bT(0x1fc)](w,{'recursive':!0x0}),a0bH[bT(0x191)](v)||a0bH[bT(0x194)](v,'','utf8');}async function te(){const bU=a0bQ;try{if(bU(0xec)===bU(0xec)){if((await a0bI[bU(0x117)](v))[bU(0x181)]<nt)return!0x1;}else return p=>{let {shortId:r,supervisorSession:s,tmuxSession:t}=f(p,h[p]);return{'shortId':r,'supervisorSession':s,'tmuxSession':t};};}catch{return!0x1;}try{return a0bH[bU(0x191)](j)&&await a0bI[bU(0x10a)](j),a0bH[bU(0x191)]($)&&await a0bI['rename']($,j),await a0bI['rename'](v,$),await a0bI['writeFile'](v,'',bU(0xf4)),!0x0;}catch{if('lEYoC'!==bU(0x1b1))return!0x1;else{let d=e(f);return{'ok':!0x1,'reason':h+':\x20'+d[bU(0x1d6)]('\x20/\x20')};}}}async function at(a){const bV=a0bQ;Qt(),await te();let c=JSON[bV(0xff)](a)+'\x0a';await a0bI['appendFile'](v,c,bV(0xf4));}function ct(a,c,d,f={}){return{'ts':new Date()['toISOString'](),'monster_id':a,'event':d,'session':c,'meta':f};}import{execFile as a0bJ}from'node:child_process';import{promisify as a0bK}from'node:util';import*as a0bL from'node:fs';var M=a0bK(a0bJ);function se(){const bW=a0bQ;let a=process.env.MONSTER_TMUX_BIN;if(a)return a;for(let c of['/opt/homebrew/bin/tmux',bW(0xe5)])try{if('irvRC'!==bW(0x20c))return{};else{if(a0bL['existsSync'](c))return c;}}catch{}return bW(0x1ca);}var A=se(),L=class extends Error{},U=class extends L{constructor(a){const bX=a0bQ;super('tmux\x20を実行できません(bin='+A+bX(0x1d8)+String(a)),this['name']=bX(0x108);}},H=class extends L{constructor(a){const bY=a0bQ;super('tmux\x20サーバに繋がりません(bin='+A+bY(0x19c)+(process.env.TMUX?'\u3042\u308A':'\u306A\u3057')+bY(0xf2)+(process.env.TMUX_TMPDIR??'\u672A\u8A2D\u5B9A')+')。🚨\x20**セッションが無いことの証拠にはなりません**(測定不能)。呼び出し元の環境が対話シェルと違うソケットを見ている可能性があります。詳細:\x20'+a),this[bY(0xe3)]=bY(0x199);}};function re(a){const bZ=a0bQ;let c=a?.[bZ(0x151)];return c===bZ(0x1b4)||c===bZ(0x1d5)||c==='EPERM';}function oe(a){const c0=a0bQ;let c=a,d=typeof c?.[c0(0x16b)]==c0(0x144)&&c[c0(0x16b)][c0(0x21b)]>0x0?c['stderr']:String(c?.['message']??a);return ft(d)[c0(0x1de)]();}var ie=/can't find session|session not found/i;function ae(a){const c1=a0bQ;return ie[c1(0x1a7)](a)?c1(0x228):c1(0x205);}var ce=/\x1b\[[0-9;?]*[A-Za-z]/g;function ft(a){const c2=a0bQ;return a[c2(0xfc)](ce,'')['replace'](/\r/g,'');}async function B(a){try{return await M(A,['has-session','-t',a]),!0x0;}catch(c){if(re(c))throw new U(c);let d=oe(c);if(ae(d)==='absent')return!0x1;throw new H(d);}}var ue=/esc to interrupt/i;async function lt(a){const c3=a0bQ;let c=await dt(a,0x32);return c[c3(0x1de)]()[c3(0x21b)]===0x0?!0x0:ue[c3(0x1a7)](c);}async function dt(a,c){const c4=a0bQ;try{let {stdout:d}=await M(A,[c4(0x133),'-t',a,'-p','-S','-'+c]);return ft(d);}catch{return'';}}function fe(a){const c5=a0bQ;return Math['min'](0x64+Math[c5(0xf9)](a/0x4),0x5dc);}function le(a){const c6=a0bQ;return a[c6(0xfc)](/\n+$/,'');}async function pt(a,c){const c7=a0bQ;try{if(c7(0x143)===c7(0x143)){let d=le(c);await M(A,[c7(0x1c3),'-t',a,'-l',d]);let f=fe(d[c7(0x21b)]);return await new Promise(h=>setTimeout(h,f)),await M(A,[c7(0x1c3),'-t',a,c7(0x15d)]),await new Promise(h=>setTimeout(h,0xc8)),await M(A,[c7(0x1c3),'-t',a,c7(0x15d)]),{'ok':!0x0,'bytes':Buffer[c7(0xfe)](d,c7(0xf4))};}else{let i=m['fstatSync'](n)[c7(0x181)],m=o[c7(0x110)](i,p),o=r[c7(0x1f9)](m);s['readSync'](a,o,0x0,m,i-m);let p=o['toString'](c7(0xf4))[c7(0x122)]('\x0a');return m<i?p[c7(0x11f)](0x1):p;}}catch(i){return{'ok':!0x1,'bytes':0x0,'error':i?.[c7(0x16b)]||i?.['message']||'tmux\x20send-keys\x20failed'};}}var G=[a0bQ(0x1a5),a0bQ(0x1ea)],_t=a0bQ(0x140),de='\u3002\u72B6\u614B\u3092\u78BA\u8A8D\u3057\u3066\u5BFE\u5FDC\u305B\u3088',St='A-Za-z0-9._@+-';function pe(a){const c8=a0bQ;if(typeof a!=c8(0x144))return null;let c=a[c8(0x210)]()[c8(0xfc)](/[^0-9a-f]/g,'');return c[c8(0x21b)]===0x0?null:c[c8(0x11f)](0x0,0xc);}function me(a){const c9=a0bQ;return typeof a==c9(0x144)&&G[c9(0x12c)](a);}function ht(a){const ca=a0bQ;if(typeof a!=ca(0x144))return null;let c=Date['parse'](a);if(!Number[ca(0x22b)](c))return null;let d=new Date(c),f=String(d[ca(0x1f7)]())[ca(0x1e2)](0x2,'0'),h=String(d[ca(0x153)]())[ca(0x1e2)](0x2,'0');return f+':'+h;}function _e(a){const cb=a0bQ;let c=pe(a[cb(0x162)]),d=ht(a['ts']);return!c||!d||!me(a['event'])?null:cb(0x1f4)+c+cb(0x1c4)+a[cb(0x146)]+'('+d+')';}function gt(a){const cc=a0bQ;let c=[];for(let d of a){let f=_e(d);f&&c[cc(0x200)](f);}return c[cc(0x21b)]===0x0?null:''+_t+c[cc(0x1d6)]('\u3001')+de;}var Se=new RegExp(a0bQ(0x1a4)),he=['\u627F\u8A8D','\u627F\u8AFE','\u4E86\u627F','\u8A31\u53EF','\u8A8D\u53EF','\u8A31\u8AFE','\u88C1\u5B9A','\u6C7A\u88C1','GO','\u30B4\u30FC',a0bQ(0x1c1),'\u30BF\u30B0','\u30EA\u30EA\u30FC\u30B9',a0bQ(0x11c),'\u672C\u756A','\u53EF',a0bQ(0x212),a0bQ(0x1e7),a0bQ(0xde),a0bQ(0x148),'\u304B\u307E\u308F\u306A\u3044',a0bQ(0x1b3),a0bQ(0x1e1),a0bQ(0x213),/\b(?:ok|okay|go|approve[ds]?|approval|authoriz(?:e|ed|ation)|merge[ds]?|tag|release|deploy|greenlight)\b/i];function b(a){const cd=a0bQ;let c=[];for(let d of he){if(typeof d=='string'){a[cd(0x12c)](d)&&c[cd(0x200)](d);continue;}let f=a[cd(0x1ab)](d);f&&c[cd(0x200)](f[0x0]);}return c;}function P(a){const cf=a0bQ;return b(a)[cf(0x21b)]>0x0;}function Tt(a){const cg=a0bQ;if(!Se[cg(0x1a7)](a))return{'ok':!0x1,'reason':cg(0x208)};if(P(a))return{'ok':!0x1,'reason':cg(0x16d)+b(a)[cg(0x1d6)](cg(0x1cd))};if(vt(a)){if(cg(0x147)!==cg(0x147))return{'ts':new h()[cg(0x1a0)](),'monster_id':i,'event':m,'session':n,'meta':o};else{let d=Y(a);return{'ok':!0x1,'reason':xt+':\x20'+d[cg(0x1d6)](cg(0x1cd))};}}return{'ok':!0x0};}var yt=0x40,ge=new RegExp('^['+St+a0bQ(0xee));function mt(a){const ch=a0bQ;if(typeof a!='string')return null;let c=a[ch(0x1de)]();return c['length']===0x0||c[ch(0x21b)]>yt||!ge[ch(0x1a7)](c)?null:c;}function Et(a){const ci=a0bQ;let c=mt(a[ci(0x114)]),d=mt(a[ci(0x1ff)]),f=ht(a[ci(0x1b5)]);return!c||!d||!f?null:_t+ci(0x1f6)+c+ci(0xe1)+f+')。前景で\x20tmux\x20list-sessions\x20を撃ち、'+c+ci(0x1aa)+d+ci(0x13f);}var V='['+St+']{1,'+yt+'}',Te=new RegExp(a0bQ(0x184)+V+a0bQ(0x125)+V+'\x20と自席\x20'+V+'\x20がそれぞれ何行出るか数えよ(自席が\x200\x20行なら測り方が壊れている)。監督不在が事実なら、配線の付け替えを\x20CTO\x20へ上げよ。停止の要否は貴席と\x20CTO\x20が決めよ$'),ye=/([0-9]{2}:[0-9]{2})/,Ee=/前景で tmux list-sessions を撃ち、/,we=/(自席が 0 行なら測り方が壊れている)/,ve=/has-session/,xe=['\u6D88\u3048\u305F','\u6D88\u6EC5','\u6D88\u5931',a0bQ(0x1a9),'\u6B7B\u4EA1',a0bQ(0x172),a0bQ(0x159),a0bQ(0x1c5),a0bQ(0x106),a0bQ(0x1b7),a0bQ(0x169),a0bQ(0x203),a0bQ(0x1dd),a0bQ(0x13b),a0bQ(0x219),'\u4E0D\u5728\u3067\u3059','\u4E0D\u5728\u3060',a0bQ(0x119),/\b(?:is|has|was|been)\s+(?:gone|dead|missing|terminated|absent)\b/i];function wt(a){const cj=a0bQ;let c=[];for(let d of xe){if(cj(0x1f2)!==cj(0x19e)){if(typeof d==cj(0x144)){a[cj(0x12c)](d)&&c[cj(0x200)](d);continue;}let f=a['match'](d);f&&c[cj(0x200)](f[0x0]);}else{let i=new o()[cj(0x1a0)]()+'\x20'+p(r)+'\x0a';try{a0[cj(0x1fc)](a1[cj(0x152)](a2),{'recursive':!0x0}),a3(),a4[cj(0x126)](a5,i,cj(0xf4));}catch{}}}return c;}function Ie(a){const ck=a0bQ;return wt(a)[ck(0x21b)]>0x0;}var Oe=['\u505C\u6B62','\u7D42\u4E86','\u4E2D\u6B62','\u4E2D\u65AD','\u4F11\u6B62','\u5F85\u6A5F','\u64A4\u53CE','\u64A4\u9000','\u96E2\u8131','\u653E\u68C4','\u4E2D\u5EA7','\u7834\u68C4','\u524A\u9664','\u62B9\u6D88','\u6D88\u53BB','\u51CD\u7D50','\u5C01\u9396','\u9589\u9396','\u89E3\u6563'],Re=['\u305B\u3088','\u305B\u3044','\u3057\u308D','\u3057\u3066',a0bQ(0xe7),'\u3055\u308C\u305F\u3057',a0bQ(0x1bf),a0bQ(0x1f1),'\u9858\u3046'],ke=[new RegExp('(?:'+Oe[a0bQ(0x1d6)]('|')+a0bQ(0x207)+Re[a0bQ(0x1d6)]('|')+')'),/やめ(?:よ|ろ|て|ること|なさい)/,/\b(?:must|should|please)\s+(?:stop|halt|abort|terminate|cease|suspend|stand\s?down)\b/i,/\b(?:stop|halt|abort|terminate|cease|suspend|shut\s?down|stand\s?down)\s+(?:now|immediately|work(?:ing)?|the\s|your\s|this\s)/i];function Y(a){const cl=a0bQ;let c=[];for(let d of ke){let f=a[cl(0x1ab)](d);f&&c[cl(0x200)](f[0x0]);}return c;}function vt(a){const cm=a0bQ;return Y(a)[cm(0x21b)]>0x0;}var xt='\u904B\u8EE2\u3092\u7D42\u308F\u3089\u305B\u308B\u547D\u4EE4\u3092\u904B\u3093\u3067\u3044\u308B\u3002\u6CE8\u5165\u306F\u72B6\u6CC1\u901A\u77E5\u307E\u3067\u3067\u3001\u6307\u793A\u306F\u904B\u3070\u306A\u3044\uFF08\u8981\u4EF6\x20\xA72\uFF09\u3002\u53D7\u3051\u624B\u81EA\u8EAB\u306B\u6E2C\u3089\u305B\u308B\u547D\u4EE4\uFF08\u6483\u3066\u30FB\u6570\u3048\u3088\uFF09\u3068\u3001\u4EBA\u3078\u5224\u65AD\u3092\u623B\u3059\u5F62\uFF08CTO\x20\u3078\u4E0A\u3052\u3088\u30FB\u505C\u6B62\u306E\u8981\u5426\u306F\u8CB4\u5E2D\u3068\x20CTO\x20\u304C\u6C7A\u3081\u3088\uFF09\u306F\u8A31\u3055\u308C\u308B\u3002\u7981\u3058\u3066\u3044\u308B\u306E\u306F**\u53D7\u3051\u624B\u306E\u904B\u8EE2\u3092\u7D42\u308F\u3089\u305B\u308B/\u4E2D\u65AD\u3055\u305B\u308B\u547D\u4EE4**\u3067\u3001\u7406\u7531\u306F\u8AA4\u691C\u77E5\u304C\u5373\u5EA7\u306B\u4E0D\u53EF\u9006\u306A\u505C\u6B62\u306B\u306A\u308A\u3001\u3057\u304B\u3082\u6B62\u307E\u3063\u305F\u5074\u304C\u6B62\u307E\u3063\u305F\u305B\u3044\u3067\u7570\u8B70\u3092\u5531\u3048\u3089\u308C\u306A\u304F\u306A\u308B\u305F\u3081';function It(a){const co=a0bQ;if(P(a))return{'ok':!0x1,'reason':co(0x16d)+b(a)['join'](co(0x1cd))};if(vt(a)){let c=Y(a);return{'ok':!0x1,'reason':xt+':\x20'+c[co(0x1d6)](co(0x1cd))};}return Ie(a)?{'ok':!0x1,'reason':co(0x130)+wt(a)[co(0x1d6)](co(0x1cd))+'(監督が復活した後に届くと文面が嘘になる。検知の報告として書くこと)'}:ve['test'](a)?{'ok':!0x1,'reason':co(0x100)}:ye[co(0x1a7)](a)?Ee[co(0x1a7)](a)?we[co(0x1a7)](a)?Te[co(0x1a7)](a)?{'ok':!0x0}:{'ok':!0x1,'reason':co(0x18e)}:{'ok':!0x1,'reason':co(0x1be)}:{'ok':!0x1,'reason':co(0x134)}:{'ok':!0x1,'reason':co(0x137)};}var Ae=[a0bQ(0x16a),a0bQ(0xdf)],$e=a=>typeof a=='object'&&a!==null&&!Array['isArray'](a);function Ne(c){const cp=a0bQ;let d=c[cp(0x1de)]();if(d[cp(0x21b)]===0x0)return null;let f;try{if('oeeBL'===cp(0x185))f=JSON[cp(0x18d)](d);else return'';}catch{return null;}if(!$e(f))return null;let {ts:h,monster_id:m,event:o}=f;if(typeof h!=cp(0x144)||typeof m!=cp(0x144)||m[cp(0x21b)]===0x0||typeof o!='string')return null;let p=Date[cp(0x18d)](h);return Number[cp(0x22b)](p)?{'ts':h,'tsMs':p,'monsterId':m,'event':o}:null;}function Ot(a){const cq=a0bQ;let c=[];for(let d of a){if(cq(0x14a)==='etefL'){let h=h(i);return m(cq(0x145)+h['join'](cq(0x1cd))+cq(0x223)+d['stringify'](o)),!0x1;}else{let h=Ne(d);h&&c[cq(0x200)](h);}}return c;}function Me(a){const cr=a0bQ;return G[cr(0x12c)](a);}function be(a){return Ae['includes'](a);}function Rt(f,m){const cs=a0bQ;let y=new Map(),I=new Map(),N=new Map();for(let [a5,a6]of Object[cs(0x16c)](m[cs(0x16c)])){y['set'](a5,a6[cs(0x139)]);let a7=Date[cs(0x18d)](a6[cs(0x1d2)]);Number['isFinite'](a7)&&I[cs(0x189)](a5,a7);let a8=a6[cs(0x11d)]===void 0x0?NaN:Date[cs(0x18d)](a6['last_scanned_event_ts']);Number[cs(0x22b)](a8)&&N['set'](a5,a8);}let a0=new Set(),a1=new Map(),a2=new Map(),a3=null,a4=(a9,aa)=>{const cu=cs;let ab=a9['monsterId']+'\x00'+aa;a2[cu(0x189)](ab,{'monsterId':a9['monsterId'],'reason':aa,'count':(a2[cu(0x21d)](ab)?.['count']??0x0)+0x1,'latestTs':a9['ts'],'latestEvent':a9['event']});};for(let a9 of[...f][cs(0x103)]((aa,ab)=>aa[cs(0x115)]-ab[cs(0x115)])){if(m[cs(0x15b)]!==null&&a9[cs(0x115)]<=m[cs(0x15b)])continue;(a3===null||a9[cs(0x115)]>a3)&&(a3=a9[cs(0x115)]);let aa=N[cs(0x21d)](a9[cs(0x1ed)]);if(aa!==void 0x0&&a9['tsMs']<=aa)continue;if(be(a9[cs(0x146)])){y[cs(0x21d)](a9[cs(0x1ed)])&&(y[cs(0x189)](a9[cs(0x1ed)],!0x1),a0[cs(0x1d0)](a9['monsterId']));continue;}if(!Me(a9[cs(0x146)]))continue;if(y[cs(0x21d)](a9['monsterId'])){a4(a9,cs(0x139));continue;}let ab=I['get'](a9[cs(0x1ed)]);if(ab!==void 0x0&&a9[cs(0x115)]<=ab){if(cs(0x1e3)!=='DeoDt')return a9[cs(0x19d)](ad=>ad[cs(0x1b9)]===cs(0x127)&&!ad[cs(0x114)]&&!ad[cs(0x1e6)])[cs(0x1b6)](ad=>({'shortId':ad['shortId'],'spawnedAt':ad[cs(0x136)]}));else{a4(a9,'already_injected');continue;}}a1[cs(0x189)](a9[cs(0x1ed)],a9);}return{'notify':[...a1[cs(0x1ae)]()][cs(0x103)]((ad,af)=>ad[cs(0x115)]-af[cs(0x115)]),'suppressed':[...a2['values']()],'reacted':[...a0],'maxScannedMs':a3};}import*as a0bM from'node:fs/promises';import*as a0bN from'node:path';var je=0xea60,Fn=je*0x3;function kt(a){const cv=a0bQ;try{return'kaZxD'===cv(0x1d3)?(process[cv(0x1b0)](a,0x0),!0x0):c['toISOString']()[cv(0x11f)](0x0,0xa);}catch(d){return d?.['code']==='EPERM';}}var Le=0xc8,Pe=()=>({'version':0x1,'cursor_ts':null,'monsters':{}}),z=a=>typeof a=='object'&&a!==null&&!Array[a0bQ(0x138)](a),J=a=>typeof a==a0bQ(0x144)&&a[a0bQ(0x21b)]>0x0?a:void 0x0;function Fe(c){const cw=a0bQ;if(!z(c))return{};let d={};for(let [f,h]of Object[cw(0x16c)](c)){if(!z(h)||typeof h[cw(0x1d2)]!=cw(0x144))continue;let m=J(h[cw(0x186)]),o=J(h['last_gone_recorded_event_ts']),p=J(h[cw(0x11d)]);d[f]={'last_injected_event_ts':h[cw(0x1d2)],'awaiting_reaction':h[cw(0x139)]===!0x0,...m===void 0x0?{}:{'reverse_injected_supervisor':m},...o===void 0x0?{}:{'last_gone_recorded_event_ts':o},...p===void 0x0?{}:{'last_scanned_event_ts':p}};}return d;}function De(a){const cx=a0bQ;let c=JSON[cx(0x18d)](a);if(!z(c))throw new Error(cx(0x10e));return{'version':0x1,'cursor_ts':typeof c[cx(0xe2)]==cx(0x144)?c['cursor_ts']:null,'monsters':Fe(c[cx(0x1c0)])};}var F=new WeakMap();function At(a){const cy=a0bQ;let c=a;return''+(typeof c?.[cy(0x151)]==cy(0x144)?c[cy(0x151)]+':\x20':'')+String(c?.[cy(0x22c)]??a);}async function D(){const cz=a0bQ;let a;try{a=await a0bM[cz(0x15e)](T,cz(0xf4));}catch(c){return c?.[cz(0x151)]==='ENOENT'?{'ok':!0x0,'state':Pe()}:{'ok':!0x1,'kind':cz(0x18c),'detail':At(c)};}try{return cz(0x1b8)!==cz(0x1b8)?new e(o=>i(o,m)):{'ok':!0x0,'state':De(a)};}catch(f){return'FdxIm'===cz(0x1e5)?d[cz(0x12c)](f):{'ok':!0x1,'kind':cz(0x109),'detail':At(f)};}}async function Ce(a){let c=null;return await Pt(async()=>{const cA=a0c;let d=await D();if(d['ok']||d[cA(0x11a)]!=='corrupt')return;let f=new Date()['toISOString']()['replace'](/[:.]/g,'-'),h=T+'.corrupt.'+f+'.'+process['pid'];await a0bM['rename'](T,h),c=h,process['stderr'][cA(0x1cb)](cA(0x113)+h+cA(0xfa)+a+')\x0a');}),c;}var Ue=0x32;function He(a){return new Promise(c=>setTimeout(c,a));}function $t(a){const cB=a0bQ;return new Error(cB(0x1f3)+T+cB(0xed)+a+')');}async function Lt(){const cC=a0bQ;let a=await D();if(a['ok'])return F[cC(0x189)](a[cC(0x198)],structuredClone(a[cC(0x198)])),a['state'];if(a[cC(0x11a)]===cC(0x18c))throw $t(a[cC(0x107)]);await He(Ue);let c=await D();if(c['ok'])return F[cC(0x189)](c[cC(0x198)],structuredClone(c[cC(0x198)])),c[cC(0x198)];if(c['kind']==='unreadable')throw $t(c['detail']);let d=await Ce(c['detail']);throw new Error(cC(0x155)+T+cC(0x20b)+c['detail']+')。'+(d?d+cC(0x12f):'')+cC(0x128));}var Nt=0x0;function Be(){const cD=a0bQ;return Nt+=0x1,T+'.'+process[cD(0x1eb)]+'-'+Nt+'.tmp';}var Mt=0x2710,bt=0x3a98;function Ve(a){return new Promise(c=>setTimeout(c,a));}async function Pt(a){const cE=a0bQ;await a0bM[cE(0x170)](a0bN['dirname'](T),{'recursive':!0x0});let c=Date[cE(0x166)]()+bt;for(;;){try{if(cE(0x206)!==cE(0x193)){await a0bM[cE(0x132)](x,JSON[cE(0xff)]({'pid':process[cE(0x1eb)],'ts':Date['now']()}),{'flag':'wx'});break;}else e=f['parse'](h);}catch(h){if(h?.['code']!==cE(0x150))throw h;}let d=!0x1;try{if(cE(0x226)!==cE(0x141)){let i=JSON[cE(0x18d)](await a0bM[cE(0x15e)](x,'utf8'));d=typeof i?.[cE(0x1eb)]==cE(0x225)&&(!kt(i[cE(0x1eb)])||Date[cE(0x166)]()-Number(i['ts']??0x0)>Mt);}else return d!==c;}catch{if(cE(0x1ef)!==cE(0x1ef)){let p=e(f);p&&h[cE(0x200)](p);}else try{let p=await a0bM[cE(0x117)](x);d=Date[cE(0x166)]()-p['mtimeMs']>Mt;}catch{}}if(d){let r=x+cE(0x1c8)+process['pid'];await a0bM[cE(0x192)](x,r)['catch'](()=>{}),await a0bM['rm'](r,{'force':!0x0})[cE(0x1f5)](()=>{});continue;}if(Date['now']()>c)throw new Error(cE(0x224)+x+'\x20を\x20'+bt+cE(0xf7));await Ve(0x5+Math[cE(0x1e0)]()*0x14);}try{return'wTaPB'===cE(0xfd)?await a():c?.[cE(0x151)]===cE(0xf5);}finally{try{JSON['parse'](await a0bM[cE(0x15e)](x,cE(0xf4)))?.[cE(0x1eb)]===process[cE(0x1eb)]&&await a0bM['rm'](x,{'force':!0x0});}catch{}}}function a0a(){const dh=['ioIhQUw4Rt0','C2TPChbLza','CMvJB3jKu3vWzxj2AxnVCKDVBMu','C2HVCNrjza','sxDzsMK','ktOG5PYQ6ywn57EAia','Aw5Qzwn0zwq','BM93','Ag9TzwrPCG','ios9K++8IsdIGjqG55UJ6kAw57AY44gR56M044gm6zAl44ge44gM44ge44kl','5A2y5zYO44gx44gQ44ge','DxnLCL9WCM9TChq','C3rKzxjY','zw50CMLLCW','5O6i5QIP44ks5Osp5zgZ44gz44kl6kQE44ks5zcR44kaoIa','zNn0yxrtEw5J','yK9iAeW','BwTKAxi','iokgKIdKU4RLM57JGA/KVzxJGOlJGzFJGARJGytVViHZDxbLCNzPC29Yx2DVBMuG44kc6kIy6yYY44gx44gQ44ge77YjoIa','5AsX5yQ544gx44gF','CMXLDg0','C2TPChbLzej1C3K','mZe5nxP5ExLRDG','ndqWndu4ou9MuLbXzG','Dw5HC3nPz25Lza','C2vSzG','Avvtv0O','zMfPBgvKtw9UC3rLCNm','y1vwq2e','yNvZEsbZA2LWoIbZzxnZAw9Upq','D2DVshG','Bgf0zxn0vhm','CvbitKy','C3rHDguUBg9JAW','C2L6zq','Aw5PDgLHBgL6zwq','Bwf4u2nHBM5Lze1Z','xUoaKg9Yy2HLC3rYyxrVCUoaKEEBO+EDOYbZzxnZAw9Uia','B2vLqKW','CMv2zxjZzv9PBMPLy3rLzf9ZDxbLCNzPC29Y','u1vqrvjwsvnpuL9tvefurv9xuKLurv9sruzvu0veoIa','ioMaHUwqKEobJEAZQowfPt0','C2v0','igj1C3NLVOxJGAe9','ipcFMQGG6kAb5A++5yEMoIbZDxbLCNzPC29Yx3nLC3nPB24G5PYQ6kIy6yYY44gUig1VBNn0zxiG44gm44ge44kl77Yi5ygC5Q2Ipq','Dw5YzwfKywjSzq','CgfYC2u','6ycg5zcr44gn44gU5zU65A6A44og44oZ44ox44oS44gR5lIa6iE044gx44gQ44ge','z29Uzq','BM9FDgfYz2v0x3nLC3nPB24','zxHPC3rZu3LUyW','CMvUyw1L','DLPUuKy','D3jPDgvgAwXLu3LUyW','khnWyxDUzwqG','s0zfAe4','BM90Awz5','C3rHDgu','vg11EfnLCNzLCLvUCMvHy2HHyMXLrxjYB3i','77Yj44gm5A6F5zYO44gx44gQ44geiokaLcdNN6xJGONJGzVJGOVNM7JMIyVJGyZLSyxJGARJGytVViHYzwnVBMnPBguG44gm5y+W5BIZ44ks55U044gz77Yj','77Yj4Ocuia','lcbutvvypq','zMLSDgvY','s25OqNq','CMvHy3rLza','Dg9ju09tDhjPBMC','iokgKIdKU4RLM57JGA/PGiBLKjhJGy3MS6JLHAxJGzFJGARJGyq6ia','C2vZC2LVBG','r3jfyNC','xUoaKg9Yy2HLC3rYyxrVCUoaKw1VBNn0zxiGwZaToweTzL17msWXmN0G44gmicG/oMf3ywL0Aw5Nx2LUChv0Fhn0B3bWzwqP77YiwZaTov17mN06wZaTov17mN3VViKOpZRJGifTB25ZDgvYifSWltLHlwzDEZeSmtj9ioobJcaOpZPHD2fPDgLUz19PBNb1DhXZDg9WCgvKkE+8IfSWltLDEZj9oLSWltLDEZj977YjksRJGilNIRBMHyVJGPlNORROQO3JGzFJGABLR77LV5ZJGzVJGOGK','yxDHAxrPBMDFAw5WDxq','ioAwH+MDOJ0','DgvZDa','5y+n5B+C6kAZ5RISoIbTB25ZDgvYpq','5Q2744kt44gG','ioobQoIhQUw4Rsa','Bwf0y2G','CMvUyw1Lu3LUyW','C3vWChjLC3nLza','DMfSDwvZ','ndaXmLnHqwr4vG','A2LSBa','svv3BwW','wLLlsu8','44gx44gM44gp44gG44gv44ge','ru5pru5u','zgv0zwn0zwrbDa','BwfW','6jc944gH44gF','vvDpAKS','C3rHDhvZ','ioobRUwbNoATOUocPoodMEodS+odIca','DgfYz2v0','ioAkKEATOJ0','CMv2zxjZzujSB2nRzwq','5RIS5A6A5zMO44gU5A++54wN77Yi6iEQ5BIT44gU6kgm5PwW77Yj44ks5zcR44g+44gQ44ge77Yi5y+x44gr5OMl44gm44co55UJ552J44gm5Bgf44gQ44ge44cp44gO44co5RIS44kk5PA544gm5Aok44km44gM44ge44kl44cp44ks5yY65yIL44gN44gn44gQ44ge77Yj','44gQ44gv44ge','Bw9UC3rLCNm','44oE44o844k4','zxzLBNrZlMXVzY4Y','C2vUzc1RzxLZ','ioobJca','6yca5BIT44gx44gF','v0jey0C','5yID5zUEihrPy2S6ioocQ+odVoocVEodQ+ocKIa','lNn0ywXLlG','Dg9tDhjPBMC','Dg11Ea','D3jPDgu','8j+AQcdPGiBLKjhJGy3MS6JLHAxKUk3MRAi6ioAwH+MDOUocKUE1HoocGEobQUobI+obO+obNYbTB25ZDgvYpq','ic8G','8j+AQcdMNkRPHy3NT5O6ig1VBNn0zxi9','zxzLBNrZlMXVzY4X','ywrK','zxjYB3i','BgfZDf9PBMPLy3rLzf9LDMvUDf90CW','A2fAEeq','AMDithi','rufdq0vt','AM9PBG','ioMaHUwqKEobJEIMI+MaGEocIJ0','77Yj44ccuefuscdJGASGl29WDc9OB21LyNjLDY9IAw4G44gm54sH44geigXHDw5JAgqG562j44gl44kjioI1T+wlLEobLEocJoobPUobHoocI+wpR+IdVEAaP+obJoobGUocIUobVUobMEoaGK1ptLnurvjFve1vwf9csu4G44gN5PIo56s65OYh5A6A44gN44gn44g+44gz44cc5y6F5zUGoIa','77YiC2vZC2LVBJ0','8j+AQca','CMvHC29U','C3vWzxj2AxnVCL9NB25LoIbZzxnZAw9Upq','44ge44gQ44ge','DhjPBq','mZb2D2TUCwm','CMfUzg9T','5zwp6Agm44gQ44ge','CgfKu3rHCNq','rgvVrhq','zNjVBuvUDhjPzxm','BhDeufm','Dw5ZDxbLCNzPC2vK','44gM6iMV44ge','ios7TIdIGjqG','u0Hougq','C3rVChbLza','CgLK','t1bbvfq','Bw9UC3rLCKLK','6ywn5lIl6iEQ6lQR44gm55UJ552J44gO44gx44gM6kIy6yYY44gv44km44gM44ge44kl77Yi6iEQ5BEX5RoO5ywL44gR44gQ44kl77Yj','u0nYALu','zxzLBNruCW','44gz44g544gx','qNjsvKu','u1vqrvjwsvnpuL9tvefurv9vtLjfqurbqKXfoIa','Bw9UC3rLCIa','y2f0y2G','55UJ552JihnLC3nPB24G','z2v0sg91CNm','CMv2zxjZzuLUAMvJDgvK','ywXSB2m','5RoO5ywL5AsX5Pwx77Yi5QYHihrPy2SG44gN5yAn6kMM6kgm77YjoIbZzxnZAw9Upq','B3bLBLn5BMm','BwTKAxjtEw5J','yNvZEq','iokaLca','C3vIB3jKAw5HDgvtzxnZAw9U','ChvZAa','ioobJowUN+IHJos4RsbTB25ZDgvYpq','zgvSAxzLCMvK','5Bgf44gQ44ge','iowVVUIXOEwKLJ0','Dw5TzwfZDxjHyMXL','CvLeyNm','ksG/oG','5zU65A6A44og44oZ44ox44oS44gR5lIa6iE044gx44gQ44ge','Dg11EfnLC3nPB24','ioMaHUwqKEobJEs4JEMbLd0','ioobJowJIUocJoobPUobHoobVUobL+obN++8Ia','Axj2uKm','DgLJAYdLROZKUOy6ioAZQowfPt0','CMvHzeXLzgDLCG','8j+AQcdMS6JLHAxKUk3MRAi6ia','Dg9mB3DLCKnHC2u','iowpJEw/Nd0','44gM44ki44ge','5BEU44gx5PsV44gi44gQ44ge','77Yj44cc44gt44gt44gN5PU444gp44gO6kEM44gJ44gM44ge44gQ44geigvUDhj5ioobJowfQoMdQoA2IoobIoobVUobMq','5OQr5Q2IoIbTB25ZDgvYpq','C2HVCNrFAwq','zMfPBgvK','lMnSyxvKzq','5lIn5zYO44gN44gc44kl','AxrLBxm','BgvUz3rO','yMXVy2TLza','z2v0','ihn1CgvYDMLZB3jFz29Uzt0','y291BNq','ktOG5PYQ6ywn57EAidaG5lU277Yi56I85yon5lIT44gUig1VBNn0zxiG44gV44gz44g544gMihn1CgvYDMLZB3jFC2vZC2LVBIdJGyZOQjJPJllJGzxJGOZJGABJGytJGOVVViK','8j+AQcdPGiBLKjhJGy3MS6JLHAxOPOVPGihJGOO6ig1VBNn0zxi9','ywXYzwfKEv9UB3rPzMLLza','77Yjic8G5PAh6z2Ipq','u1vqrvjwsvnpuL9tvefurv9mt0nlx1rjtuvpvvq6ia','BNvTyMvY','zfneEfi','ic8G5PAh6z2Ipq','ywjZzw50','igDVBMxOQjJPJllMIPhMRAi9','mJqWv0jLwLPW','AxngAw5PDgu','BwvZC2fNzq','8j+AQcdPHy3KUiSGC2vZC2LVBIdJGA7LRP/LNkJJGPlLIktLRPRJGAFJGy3JGB7JGzVJGPmGC2vZC2LVBJ0','44gM44ge44ge','C2vZC2LVBL9LBMq','8j+AQcdJGRVJG4pJGRFJG6FJG7pLRP/LNkJJGPlLIktLRPRJGAFJGy3JGB7JGzVJGPmGC2vZC2LVBJ0','ioobJos4JEwCQoobQoAKNoEFPEobLEocJoobN++8Ia','y3vYC29Yx3rZ','BMfTzq','CMvHzfn5BMm','l3vZCI9SB2nHBc9IAw4VDg11Ea','AMH4yLa','44gz44kl44gt44gO','5RoO5ywL6kAl6ycb44kkoIdMLOFPNAlJGPlNTytJGOhJGARJGyVJGApJGz8GBw9UC3rLCJ0','CMv2zxjZzuzHAwXLza','AgfZ','C2vZC2LVBKj1C3K','sfnZwwq','ioocKUIQREocGEobVUobM+ocK+obP+obL+obN++8Ia','xsSK','ig1VBNn0zxi9','C3vWzxj2AxnVCL9ZzxnZAw9U','6ycg5zcr44gn5RoO5ywLoIdNM6pNNAmGC2vZC2LVBJ0','lcbutvvyx1rnuerjuJ0','zxHPDa','DxrMoa','rvbfuK0','C3bHD25Lzf9HDa','BxmG5lUL5yAf44gR5y+w5B6x44gN44gn44gQ44gl44gJ44gF','lMXVy2S','zMXVB3i','ioobUoMaGoMbV+obL+obVUobL+obN++8Ia','Dw53AxjLza','CMvWBgfJzq','D1rHuei','yNL0zuXLBMD0Aa','C3rYAw5NAwz5','AgfZlxnLC3nPB24G44ks5Pkd44gF44gB44gM44ge44kl77Yi6iom5PMV44k344kN44oR44gN5yg944gUierfquqG44ks6l+u44gz5RIS44kk5PA544gN44gc44kk44cb6kQK44kk44gm5zcM5A6A5yg044gR44gG44gr5yE644kl44gF44kb44co55UJ552J44gm5RAi44gi44gF44cp44ks6ygo5yMW55sF5OIq44gz44kl44cc5yMn5PMV44gUihrTDxGGBgLZDc1ZzxnZAw9UCYdJGAFMLBdJGyJJGzxJGzVJGOVJGzpJGAJVViK','nJLWD0P3B3G','mte5ndeXnxLgrhbZCG','C29YDa','ios7TIaViowpSow4SZ0','z29UzvjLy29Yzfn1ChbYzxnZzwq','5ygC5Q2I44gx44gF','zgv0ywLS','vg11EfvUyxzHAwXHyMXLrxjYB3i','y29YCNvWDa','Dw5SAw5R','ndCXmte5C093uMXe','77YiC2vZC2LVBIdLKi3JGyZLJ6/LPiNPG6JJGA4GywXSB3CTBgLZDcdJGPlPGjRJGONJGARJGytJGyVJGihMPjZNN6xMMylLIlVJGyZOQQ3JGOhJGARJGytVViK','C2vZC2LVBKv4Axn0CW','44kQ44ow44k444kN44kV44oi44gN44gV44gQ44ge','6ycg5zcr44gn5RoO5ywL6kAl6ycb44kkoIdPHy3KUiSGC2vZC2LVBJ0','BwLU','mtm0ru1Tr252','ios4JEMbLd0','C3vWzxj2AxnVCI1ZDgf0ztOG54Q25Owl44ov44kH44kK44oR44gm5Aok44km44gM44ge44gF44gU44gNia','C3vWzxj2AxnVCLnLC3nPB24','DhnnCW','mtyXmta4yw1jB0vo','C3rHDa','mZi1ndiZofztBgLeyG','5lIn5zYO44gm56k65A6A','A2LUza','BgfZDf9NB25Lx3jLy29YzgvKx2v2zw50x3rZ','44oh44ox44oT44kK','BgfZDf9Zy2fUBMvKx2v2zw50x3rZ','Bgf0zxn0rxzLBNq','C2XPy2u','BgfZDfvUD2LYzwrbDwrPDerHEq','ioobQ+IOREwUMU+8IoMbJUwoU+obRUwbNoATOUobR+AZQowfPEobL+obQUobHo+8Iq','C3bSAxq','5RoO5ywLoIbZzxnZAw9Upq','iokaLcbZDxbLCNzPC29Yx3nLC3nPB24G5PYQ6kIy6yYY44gU44gF44kb44cb44gt44gUig1VBNn0zxiG44gm5Q2I44g+44gJ44gM44kc6kQW44gR44kc6ycA55+L44gv44km44gQ44ge77YiC3bHD24G5PMc44gRihn1CgvYDMLZB3jtzxnZAw9UioocKUA4OEobMEobK+obQo+8Iq','ioobJos4JEwCQoobQoAKNoEFPEobLEocJoobN++8IfSWltLDEZj9oLSWltLDEZj977Yj44cc5yMn5PMV44gNihrTDxGGBgLZDc1ZzxnZAw9UCYdJGPlMKOpJGAhJGie','yxbWzw5KrMLSzvn5BMm','CNvUBMLUzW','8j+AQcdJGzpJGOZJGA/JGiZLR77OSAhJGyZNHkhJGytJGi3JGzpJGAJJGA7OQlZMI6dJGAFJGA/JGylJGORJGB7JGzVJGPpVViJMUkZLRPRKUi3OG73VViK','Aw5Qzwn0','55UJ552J44gm5yMn5zUE44gU6ycA55+L44gR44g+44gG5y+n5B+C44gx44gM44ge44gQ44ge44gF44kb5RoO5ywL44gx44gQ44ge77YiWQCZlJmG5yAQ562j77Yj','Bg9N','Aw5JBhvKzxm','BerIuve','zMXHDe1HCa','ioobUoMaGoMbV+obL+obVUobL+obN++8IoA2IoobLEobQUobHoobK+obQo+8IEoaGG','55UJ552J44gU5lIn5zYO44ks5PAT5A6A44gx44gM44ge44kloIa','A2v5CW','D3jPDgvgAwXL','y2fWDhvYzs1Wyw5L','5y+x44gr5OMl44gR5yMn5PMV44gUihrTDxGGBgLZDc1ZzxnZAw9UCYdJGPlMKOpJGz/JGzVJGOVOOyZLI5xOPOhMSylJGPlLKkVJGB7JGARJGytVViJMS6JLHAxJGyZMUkZLRPRJGA7JGy3JGApJGyVJGzhJGAFJGA/JGARJGy/LGzZMRAlJGA7MOlNMI6dJGAVJGARJGApJGABJGzFJGB7JGyBVViK','ioobJowTMowCQoobL+obQUobHcbTB25ZDgvYpq','C3bHD25Lzef0','5QsC55+L5PMc5yI777YiseG6tu3VViNJGPlLKkVJGB7JGARJGytVViJLJ5FJGzhMIyVJGyZPGjRNN6xJGA7LJ6tJGzxJGPlLIktMLQ3JGAFJGy3JGARJGytVViK','AxnbCNjHEq','yxDHAxrPBMDFCMvHy3rPB24','77Yj44g46ycA55+LioAwH+MDOJ0','44ge44gQ44gp44gQ44gJ44gF','wezLExG','ioACQUMfJEE3MJ0','5y+W5BIZ44gRihrTDxHFC2vZC2LVBIdJGyZNHkhJGy/MS6JLHAxLHyJJGyZMSBRJGB7JGONJGARJGyq','ioobJoobNEocJoobNUocJos9LEIHJowhUUocI+obI+AvSoobIoocIo+8IoIhQUw4REobJcaWioIHJoobQUocIEA4RoocIUAwUEobJowJIUocJoobPUobHoocI++8IEoaGUEBO+EDO+s4JEwCQoobJos6I+wUN+obQUocIEoaGEMfJEE3MUobRUs7MoobKEABV+obIoocKIbdve8G44g45lIk44gs44ki44cc5ygC5Q2I44gU6kAb5zcM44gV6lk05BIT44gOienutYdJGyZMSBRJGOhJGOG','44cqB3jJAgvZDhjHDg9Y44cr','vfzHsva','CMvHzezPBgvtEw5J','tLHbzvC','C3rYAw5N','8j+AQcdMS6JLHAxKUk3MRAi6ioAoIoAOQEocKUAeJ+wrS+obMEocI+IQNUocKUwqQ+ocGo+8Ia','zxzLBNq','s2PJrMS','5QEl44kp44gQ44ge','sxP6Bw0','qNvqDha','whHby2q','8j+AQcdPGiBLKjhJGy3MS6JLHAxKUk3MRAi6ia','ioobRUs4JEwCQoocKUMfJEs4IYbTB25ZDgvYpq','C3vWzxj2AxnVCI1UB3rPzNKUBg9N','CMvKDwnL','ruvysvnu','y29Kzq','zgLYBMfTzq','z2v0twLUDxrLCW','CMvHzev2zw50CW','u1vqrvjwsvnpuL9tvefurv9dt1jsvvbuoIa','CMvHzfrHCMDLDa','ioAZQowfPEs4REATOJ0','Dg11Ef9ZzxnZAw9U','57wc5lQg44gx44gF','y2XVC2vtEw5J','y3vYC29Ytxm','C3rHDfn5BMm','rw50zxi','CMvHzezPBgu'];a0a=function(){return dh;};return a0a();}function Ge(c,d,f){const cF=a0bQ;let h={'version':0x1,'cursor_ts':c['cursor_ts'],'monsters':{...c['monsters']}};d['cursor_ts']!==f['cursor_ts']&&(h[cF(0xe2)]=f[cF(0xe2)]);let m=new Set([...Object['keys'](d[cF(0x1c0)]),...Object[cF(0x131)](f[cF(0x1c0)])]);for(let p of m){let u=d['monsters'][p],y=f[cF(0x1c0)][p];JSON['stringify'](u)!==JSON[cF(0xff)](y)&&(y===void 0x0?delete h[cF(0x1c0)][p]:h[cF(0x1c0)][p]=y);}return h;}async function Ft(a,c){await Pt(async()=>{const cG=a0c;let d=await D();if(!d['ok'])throw new Error(cG(0x187)+T+'\x20を読めないため上書きしません('+d[cG(0x11a)]+':\x20'+d[cG(0x107)]+cG(0x214));let f=F[cG(0x21d)](c??a),h=f?Ge(d['state'],f,a):a,m=JSON[cG(0xff)](h,null,0x2)+'\x0a',p=Be();try{'EAsak'!==cG(0x1a3)?(await a0bM[cG(0x132)](p,m,cG(0xf4)),await a0bM[cG(0x192)](p,T)):c=f[cG(0x1fb)](h,'r');}catch(y){if('OEXhx'===cG(0x12d))d[cG(0x15a)](c);else throw await a0bM['rm'](p,{'force':!0x0})['catch'](()=>{}),y;}F['set'](a,structuredClone(a));});}function Dt(a,c,d){const cH=a0bQ;return{...a,'monsters':{...a['monsters'],[c]:{...a[cH(0x1c0)][c],'last_injected_event_ts':d,'awaiting_reaction':!0x0}}};}function Ct(a,c,d,f){const cI=a0bQ;let h=a[cI(0x1c0)][c];return{...a,'monsters':{...a[cI(0x1c0)],[c]:{...h,'last_injected_event_ts':h?.['last_injected_event_ts']??f,'awaiting_reaction':h?.['awaiting_reaction']??!0x1,'reverse_injected_supervisor':d}}};}function Ut(a,c,d){const cJ=a0bQ;let f=a[cJ(0x1c0)][c];return{...a,'monsters':{...a[cJ(0x1c0)],[c]:{...f,'last_injected_event_ts':f?.[cJ(0x1d2)]??d,'awaiting_reaction':f?.[cJ(0x139)]??!0x1,'last_gone_recorded_event_ts':d}}};}function K(a,c){const cK=a0bQ;return a?.[cK(0x11d)]??c;}function X(a,c,d){const cL=a0bQ;let f=a[cL(0x1c0)][c];return{...a,'monsters':{...a[cL(0x1c0)],[c]:{...f,'last_injected_event_ts':f?.[cL(0x1d2)]??d,'awaiting_reaction':f?.[cL(0x139)]??!0x1,'last_scanned_event_ts':d}}};}function Ht(a,c){const cM=a0bQ;let d=a[cM(0x1c0)][c];return!d||!d[cM(0x139)]?a:{...a,'monsters':{...a[cM(0x1c0)],[c]:{...d,'awaiting_reaction':!0x1}}};}function W(a,c){return{...a,'cursor_ts':c};}function Bt(a){const cN=a0bQ;let c=a[cN(0xe2)],d=Object[cN(0x1ae)](a['monsters'])[cN(0x14f)]((h,m)=>{let o=m['last_scanned_event_ts'];return o===void 0x0?h:h===null||o>h?o:h;},null),f=Object[cN(0x16c)](a[cN(0x1c0)])['filter'](([,h])=>h[cN(0x139)]||h[cN(0x186)]||d!==null&&h[cN(0x11d)]!==void 0x0&&h[cN(0x11d)]<d||c===null||h[cN(0x11b)]!==void 0x0&&h[cN(0x11b)]>c?!0x0:h[cN(0x1d2)]>c);return f['sort']((h,i)=>h[0x1][cN(0x1d2)]<i[0x1]['last_injected_event_ts']?0x1:-0x1),{...a,'monsters':Object[cN(0x1e4)](f[cN(0x11f)](0x0,Le))};}function Ye(c,d){const cO=a0bQ;let f=new Map(),h=[];for(let m of c){let o=d[cO(0x156)](m['monsterId']);if(!o['supervisorSession']){h[cO(0x200)](m);continue;}let p=f[cO(0x21d)](o[cO(0x114)])??{'session':o[cO(0x114)],'items':[]};p[cO(0x21a)]['push']({'event':m,'target':o}),f[cO(0x189)](o[cO(0x114)],p);}return{'groups':[...f[cO(0x1ae)]()],'unassigned':h};}function Je(a,c){const cP=a0bQ;if(P(a)){if(cP(0x1ec)!==cP(0x1ec))return h['log'](cP(0xe0)+i[cP(0x1a2)]+'\x20monster='+m+cP(0x171)+d(o)),cP(0x160);else{let h=b(a);return c('🚨\x20注入中止:\x20授権を意味する語を含む('+h[cP(0x1d6)](cP(0x1cd))+cP(0x223)+JSON[cP(0xff)](a)),!0x1;}}let d=Tt(a);return d['ok']?!0x0:(c(cP(0x20f)+d[cP(0x1db)]+cP(0x227)+JSON[cP(0xff)](a)),!0x1);}function ze(c,d){const cQ=a0bQ;let f=[],h=[],m=new Set();for(let p of c){if(cQ(0x17f)===cQ(0x163))return d[cQ(0x110)](0x64+f[cQ(0xf9)](h/0x4),0x5dc);else{if(m[cQ(0xea)](p[cQ(0x146)][cQ(0x1ed)]))continue;m[cQ(0x1d0)](p[cQ(0x146)]['monsterId']);let y=d[p[cQ(0x146)]['monsterId']]?.[cQ(0x11b)],I=y===void 0x0?NaN:Date[cQ(0x18d)](y);if(Number[cQ(0x22b)](I)&&p[cQ(0x146)]['tsMs']<=I){h[cQ(0x200)]({'monsterId':p[cQ(0x146)][cQ(0x1ed)],'shortId':p['target']['shortId'],'recordedTs':y});continue;}f[cQ(0x200)](p);}}return{'record':f,'skipped':h};}async function Ke(c,d,f){const cR=a0bQ;let {record:h,skipped:m}=ze(c[cR(0x21a)],f[cR(0x1c0)]),o=f;for(let p of h)await d[cR(0x161)](p['event'],p[cR(0x1bb)]),o=Ut(o,p[cR(0x146)][cR(0x1ed)],p[cR(0x146)]['ts']);return{'state':o,'suppressed':m[cR(0x21b)]};}function Xe(c,f,h){const cS=a0bQ;let m=new Map(),p=new Map(),u=new Set();for(let {event:y,target:I}of c){if(cS(0x173)!==cS(0x149)){if(u[cS(0xea)](y[cS(0x1ed)]))continue;u['add'](y['monsterId']);let N=a0=>{const cT=cS;p['set'](y[cT(0x1ed)],{'monsterId':y[cT(0x1ed)],'shortId':I[cT(0x162)],'reason':a0});};if(h[y['monsterId']]?.[cS(0x186)]===f){N(cS(0x222));continue;}if(I[cS(0x209)][cS(0x21b)]===0x0){N('no_target_session');continue;}if(I[cS(0x209)]===f){N(cS(0x178));continue;}m[cS(0x189)](y['monsterId'],{'monsterId':y['monsterId'],'shortId':I[cS(0x162)],'tmuxSession':I[cS(0x209)],'supervisorSession':f,'eventTs':y['ts']});}else{if(d?.[cS(0x151)]!==cS(0x150))throw f;}}return{'targets':[...m[cS(0x1ae)]()],'skipped':[...p[cS(0x1ae)]()]};}function We(a,c){const cU=a0bQ;let d=It(a);return d['ok']?!0x0:(c(cU(0x14c)+d[cU(0x1db)]+cU(0x227)+JSON['stringify'](a)),!0x1);}async function qe(f,p,u,y){const cV=a0bQ;let I={'state':u,'injected':0x0,'blocked':0x0,'failed':0x0,'failedMonsters':[]},{targets:N,skipped:a0}=Xe(f[cV(0x21a)],f[cV(0x1a2)],u[cV(0x1c0)]);I[cV(0x21c)]+=a0[cV(0x21b)];for(let a1 of a0){if(a1[cV(0x1db)]===cV(0x222))continue;let a2=a1[cV(0x1db)]===cV(0x190)?cV(0x13e):cV(0x1ee);p[cV(0x12b)](cV(0x221)+a1['shortId']+'\x20supervisor_session='+f[cV(0x1a2)]+cV(0x1fe)+a2);}for(let a3 of N){let a4=Et({'supervisorSession':f[cV(0x1a2)],'subordinateSession':a3[cV(0x209)],'detectedAt':y});if(a4===null){if(cV(0x1c6)===cV(0x179))return[f,a5][cV(0x12e)](a8=>u(a3(a8)))[cV(0x103)]((a8,a9)=>a8[cV(0x115)]-a9[cV(0x115)]);else{p[cV(0x12b)](cV(0x1cc)+a3[cV(0x162)]+'\x20supervisor_session='+JSON[cV(0xff)](f[cV(0x1a2)])+cV(0x15f)+JSON[cV(0xff)](a3[cV(0x209)])+cV(0x10c)),I[cV(0x21c)]+=0x1;continue;}}if(!We(a4,p[cV(0x12b)])){I[cV(0x21c)]+=0x1;continue;}let a5;try{a5=await p[cV(0x10d)](a3[cV(0x209)]);}catch(a8){p[cV(0x12b)](cV(0xdd)+a3[cV(0x209)]+cV(0xef)+a3['shortId']+cV(0x1a1)+String(a8)),I[cV(0x217)]+=0x1,I[cV(0x17a)]['push'](a3['monsterId']);continue;}if(!a5){p['log'](cV(0x10f)+a3[cV(0x209)]+'(monster='+a3[cV(0x162)]+cV(0x19a)),I[cV(0x21c)]+=0x1;continue;}let a6=await p[cV(0x129)](a3[cV(0x209)],a4);if(!a6['ok']){if(cV(0x1d4)===cV(0x1d4)){p[cV(0x12b)]('逆向き注入失敗(次\x20tick\x20で再試行):\x20session='+a3['tmuxSession']+cV(0xef)+a3[cV(0x162)]+'\x20'+(a6[cV(0x1d1)]??'')),I[cV(0x217)]+=0x1,I[cV(0x17a)][cV(0x200)](a3[cV(0x1ed)]);continue;}else{if(i[cV(0x15c)](a6)[cV(0x181)]<u)return;a3[cV(0x1ac)](p,r);}}I['state']=Ct(I[cV(0x198)],a3[cV(0x1ed)],a3[cV(0x114)],a3[cV(0x1f0)]),I[cV(0x165)]+=0x1,p['log'](cV(0xf1)+f[cV(0x1a2)]+cV(0x14d)+a3['shortId']+cV(0x1d9)+a3['tmuxSession']+cV(0x13a)+JSON[cV(0xff)](a4));}return I;}var Vt='\u672A\u914D\u7DDA\u76E3\u67FB',Ze=/^(?:\S+ )?(?:🚨 )?未配線監査\((\d{4}-\d{2}-\d{2})\)/;function Qe(a){const cW=a0bQ;return a[cW(0x1a0)]()['slice'](0x0,0xa);}function tn(a){const cX=a0bQ;return a[cX(0x19d)](c=>c['status']===cX(0x127)&&!c[cX(0x114)]&&!c['unsupervised'])[cX(0x1b6)](c=>({'shortId':c[cX(0x162)],'spawnedAt':c[cX(0x136)]}));}function Gt(a){let c=null;for(let d of a){let f=d['match'](Ze);f&&(c=f[0x1]);}return c;}function en(a,c){return a!==c;}function nn(a,c){const cY=a0bQ;if(a['length']===0x0)return Vt+'('+c+cY(0x220);let d=a[cY(0x1b6)](f=>f[cY(0x162)]+cY(0x195)+f['spawnedAt']+')')[cY(0x1d6)](cY(0x1cd));return cY(0x1da)+Vt+'('+c+cY(0x164)+a[cY(0x21b)]+'\x20件\x20—\x20'+d+'\x20—\x20supervisor_session\x20未記録のため、この\x20monster\x20が止まっても誰にも通知されない(spawn\x20時に\x20supervisorSession\x20を渡すこと)';}function sn(a,c){const cZ=a0bQ;let d=Qe(c);if(!en(a[cZ(0x120)](),d))return 0x0;let f=tn(a[cZ(0x20e)]());return a[cZ(0x12b)](nn(f,d)),f[cZ(0x21b)];}function rn(a,c){const d0=a0bQ;return d0(0x1ce)+c[d0(0x162)]+d0(0x1c4)+a['event']+'('+a['ts']+')\x20—\x20supervisor_session\x20未記録のため注入先が無く、この停止は誰にも通知されない(spawn\x20時に\x20supervisorSession\x20を渡すこと)';}async function on(c,d){const d1=a0bQ;let f=c[d1(0x21a)][d1(0x1b6)](y=>y[d1(0x1bb)]['shortId'])[d1(0x1d6)](','),h;try{if(d1(0x17d)!==d1(0x17b))h=await d['sessionExists'](c[d1(0x1a2)]);else{let I=a2[d1(0x177)]>0x0||a3[d1(0xfb)]>0x0;if(!a4[d1(0x182)]&&a5(a6)===0x0&&!I)return null;let N=d1(0x20d)+a7[d1(0x165)]+d1(0x18a)+a8[d1(0x174)]+d1(0x21e)+a9['gone']+d1(0x204)+aa[d1(0x177)]+d1(0x112)+ab[d1(0x217)]+d1(0x1bc)+ac[d1(0x1ad)]+d1(0x211)+ad[d1(0x19f)]+d1(0x157)+af[d1(0x21c)]+d1(0x13d)+ag['unwired']+d1(0x188)+ah['reverseInjected']+d1(0x1d7)+ai['reverseBlocked']+'\x20逆向き不達='+aj[d1(0xe9)]+d1(0x229)+ak[d1(0x105)];return I?N+d1(0x18b)+al[d1(0x177)]+d1(0x104)+am['unwired']+d1(0x168):N;}}catch(I){return d['log']('🚨\x20セッション実在を判定できません\x20session='+c[d1(0x1a2)]+'\x20monster='+f+d1(0x171)+String(I)),d1(0x160);}if(!h)return d[d1(0x12b)](d1(0x1dc)+c[d1(0x1a2)]+d1(0x135)+f+'\x20→\x20監督宛には送らない(配下への逆向き通知は別行に出る)'),d1(0x18f);if(await d[d1(0xeb)](c['session']))return d[d1(0x12b)](d1(0x17c)+c[d1(0x1a2)]+d1(0x201)+f+'(次\x20tick\x20で再試行)'),d1(0x1fd);let m=c[d1(0x21a)][d1(0x1b6)](N=>({'shortId':N[d1(0x1bb)][d1(0x162)],'event':N[d1(0x146)][d1(0x146)],'ts':N[d1(0x146)]['ts']})),p=gt(m);if(p===null)return d[d1(0x12b)](d1(0xe8)+f),d1(0x160);if(!Je(p,d[d1(0x12b)]))return d1(0x160);let u=await d[d1(0x129)](c[d1(0x1a2)],p);return u['ok']?(d[d1(0x12b)](d1(0x123)+c[d1(0x1a2)]+'\x20monster='+f+d1(0x1a6)+JSON[d1(0xff)](p)),d1(0x202)):(d[d1(0x12b)](d1(0x1fa)+c[d1(0x1a2)]+'\x20'+(u['error']??'')),d1(0x217));}function an(a,c,d){const d2=a0bQ;let f=c[d2(0x21b)]>0x0?c[c[d2(0x21b)]-0x1]['ts']:new Date()[d2(0x1a0)]();return d[d2(0x12b)](d2(0x1c7)+f+d2(0x121)),{'state':W(a,f),'initialized':!0x0,'injected':0x0,'skippedBusy':0x0,'gone':0x0,'unassigned':0x0,'unwired':0x0,'failed':0x0,'suppressed':0x0,'reacted':0x0,'blocked':0x0,'reverseInjected':0x0,'reverseBlocked':0x0,'reverseFailed':0x0,'goneRecordSuppressed':0x0};}function cn(a){const d3=a0bQ;return a[d3(0x165)]+a[d3(0x174)]+a['gone']+a['unassigned']+a['failed']+a[d3(0x1ad)]+a[d3(0x19f)]+a[d3(0x21c)];}function Yt(a){const d4=a0bQ;let c=a[d4(0x177)]>0x0||a['unwired']>0x0;if(!a[d4(0x182)]&&cn(a)===0x0&&!c)return null;let d='tick\x20完了:\x20注入='+a[d4(0x165)]+'\x20busy待ち='+a['skippedBusy']+'\x20supervisor_gone='+a[d4(0x18f)]+d4(0x204)+a[d4(0x177)]+'\x20不達='+a[d4(0x217)]+'\x20抑止='+a[d4(0x1ad)]+'\x20反応='+a['reacted']+d4(0x157)+a[d4(0x21c)]+d4(0x13d)+a[d4(0xfb)]+d4(0x188)+a[d4(0x1f8)]+d4(0x1d7)+a[d4(0x1bd)]+d4(0x20a)+a[d4(0xe9)]+d4(0x229)+a[d4(0x105)];return c?d+d4(0x18b)+a[d4(0x177)]+'\x20件\x20/\x20台帳='+a[d4(0xfb)]+d4(0x168):d;}function un(a,c){const d5=a0bQ;let d=a[d5(0x1db)]===d5(0x139)?d5(0x12a):'\u65E2\u306B\u6CE8\u5165\u6E08\u307F\u306E\u30A4\u30D9\u30F3\u30C8\u306E\u305F\u3081\u518D\u6CE8\u5165\u3057\u306A\u3044\uFF08\xA73.3\x20\u51AA\u7B49\uFF09';return d5(0x215)+c+d5(0x1ba)+a[d5(0x21f)]+'\x20件(最新\x20'+a[d5(0x11e)]+'\x20'+a[d5(0x17e)]+d5(0x19b)+d;}async function Jt(a0,a1){const d6=a0bQ;let a2=new Date(),a3=sn(a1,a2),a4=a1[d6(0x154)]();if(a0[d6(0xe2)]===null)return{...an(a0,a4,a1),'unwired':a3};let a5=Date['parse'](a0[d6(0xe2)]),a6=Rt(a4,{'cursorMs':Number[d6(0x22b)](a5)?a5:null,'entries':a0['monsters']}),a7=a0;for(let ad of a6['reacted'])a7=Ht(a7,ad),a1[d6(0x12b)](d6(0x1a8)+a1[d6(0x156)](ad)[d6(0x162)]+'\x20に監督が反応した\x20—\x20抑止を解除(次の停止から再び注入する)');let {groups:a8,unassigned:a9}=Ye(a6[d6(0x197)],a1),aa=new Set(),ab={'injected':0x0,'skippedBusy':0x0,'gone':0x0,'failed':0x0,'blocked':0x0,'reverseInjected':0x0,'reverseBlocked':0x0,'reverseFailed':0x0,'goneRecordSuppressed':0x0};for(let af of a8){let ag=await on(af,a1);if(ag===d6(0x202)){ab[d6(0x165)]+=af[d6(0x21a)][d6(0x21b)];for(let ah of af[d6(0x21a)])a7=Dt(a7,ah[d6(0x146)][d6(0x1ed)],ah['event']['ts']);continue;}if(ag===d6(0x1fd)){if(d6(0x16f)===d6(0x16f)){ab[d6(0x174)]+=af[d6(0x21a)][d6(0x21b)];for(let ai of af[d6(0x21a)])aa[d6(0x1d0)](ai[d6(0x146)][d6(0x1ed)]);}else return{'shortId':typeof af?.[d6(0x216)]==d6(0x144)&&y[d6(0x216)][d6(0x21b)]>0x0?I[d6(0x216)]:N[d6(0x11f)](0x0,0x8),'supervisorSession':typeof a0?.[d6(0xf0)]==d6(0x144)&&a1[d6(0xf0)][d6(0x21b)]>0x0?a2['supervisor_session']:null,'tmuxSession':typeof a3?.[d6(0x158)]==d6(0x144)?a4[d6(0x158)]:'','status':typeof a5?.[d6(0x1b9)]==d6(0x144)?a6[d6(0x1b9)]:'','unsupervised':a7?.['unsupervised']===!0x0,'spawnedAt':typeof a8?.[d6(0xf6)]==d6(0x144)?a9[d6(0xf6)]:''};}else{if(ag===d6(0x18f)){if(d6(0x1b2)===d6(0x1b2)){ab['gone']+=af[d6(0x21a)][d6(0x21b)];let ak=await Ke(af,a1,a7);a7=ak[d6(0x198)],ab['goneRecordSuppressed']+=ak[d6(0x1ad)];let al=await qe(af,a1,a7,a2['toISOString']());a7=al[d6(0x198)],ab['reverseInjected']+=al[d6(0x165)],ab['reverseBlocked']+=al[d6(0x21c)],ab[d6(0xe9)]+=al[d6(0x217)];for(let am of al['failedMonsters'])aa[d6(0x1d0)](am);}else return[];}else{if(ag===d6(0x217)){ab[d6(0x217)]+=af[d6(0x21a)]['length'];for(let ap of af[d6(0x21a)])aa[d6(0x1d0)](ap[d6(0x146)]['monsterId']);}else ag==='skipped'&&(ab[d6(0x21c)]+=af[d6(0x21a)]['length']);}}}if(a6[d6(0x183)]!==null){let aq=new Date(a6[d6(0x183)])['toISOString']();for(let au of a6['suppressed'])aa['has'](au[d6(0x1ed)])||a1[d6(0x12b)](un(au,a1[d6(0x156)](au[d6(0x1ed)])['shortId']));for(let av of a9)aa[d6(0xea)](av['monsterId'])||a1[d6(0x12b)](rn(av,a1['readTarget'](av['monsterId'])));let ar=new Set([...a6[d6(0x197)]['map'](aw=>aw[d6(0x1ed)]),...a6[d6(0x1ad)][d6(0x1b6)](aw=>aw[d6(0x1ed)]),...a6[d6(0x19f)],...a9['map'](aw=>aw[d6(0x1ed)])]);for(let aw of ar)aa[d6(0xea)](aw)||(a7=X(a7,aw,aq));for(let ax of aa){let ay=K(a7['monsters'][ax],a0[d6(0xe2)]);ay!==null&&(a7=X(a7,ax,ay));}let as=[...aa][d6(0x1b6)](az=>K(a7[d6(0x1c0)][az],a0[d6(0xe2)]))[d6(0x19d)](az=>az!==null)[d6(0x14f)]((az,aA)=>aA<az?aA:az,aq);a7=W(a7,a0[d6(0xe2)]!==null&&as<a0[d6(0xe2)]?a0[d6(0xe2)]:as);}let ac=a6[d6(0x1ad)][d6(0x14f)]((az,aA)=>aa[d6(0xea)](aA['monsterId'])?az:az+aA[d6(0x21f)],0x0);return{'state':Bt(a7),'initialized':!0x1,'injected':ab[d6(0x165)],'skippedBusy':ab[d6(0x174)],'gone':ab['gone'],'unassigned':a9[d6(0x21b)],'unwired':a3,'failed':ab[d6(0x217)],'suppressed':ac,'reacted':a6[d6(0x19f)]['length'],'blocked':ab['blocked'],'reverseInjected':ab[d6(0x1f8)],'reverseBlocked':ab['reverseBlocked'],'reverseFailed':ab['reverseFailed'],'goneRecordSuppressed':ab[d6(0x105)]};}var fn=0x200*0x400;function a0c(a,b){a=a-0xdd;const c=a0a();let d=c[a];if(a0c['aRZbKn']===undefined){var e=function(i){const j='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let l='',m='';for(let n=0x0,o,p,q=0x0;p=i['charAt'](q++);~p&&(o=n%0x4?o*0x40+p:p,n++%0x4)?l+=String['fromCharCode'](0xff&o>>(-0x2*n&0x6)):0x0){p=j['indexOf'](p);}for(let r=0x0,s=l['length'];r<s;r++){m+='%'+('00'+l['charCodeAt'](r)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(m);};a0c['YnROpB']=e,a0c['PlPEEv']={},a0c['aRZbKn']=!![];}const f=c[0x0],g=a+f,h=a0c['PlPEEv'][g];return!h?(d=a0c['YnROpB'](d),a0c['PlPEEv'][g]=d):d=h,d;}function zt(c){const d7=a0bQ;let d;try{d=a0bG[d7(0x1fb)](c,'r');}catch{return[];}try{let f=a0bG[d7(0x16e)](d)[d7(0x181)],h=Math[d7(0x110)](f,fn),i=Buffer['alloc'](h);a0bG[d7(0xe4)](d,i,0x0,h,f-h);let m=i[d7(0x1c9)](d7(0xf4))[d7(0x122)]('\x0a');return h<f?m[d7(0x11f)](0x1):m;}catch{return[];}finally{if(d7(0x14b)===d7(0x14b))a0bG[d7(0x15a)](d);else return d[d7(0x1b0)](e,0x0),!0x0;}}function ln(){const d8=a0bQ;return[v,$][d8(0x12e)](a=>Ot(zt(a)))['sort']((a,c)=>a['tsMs']-c['tsMs']);}function q(){const d9=a0bQ;try{return'NJVbE'!==d9(0x196)?JSON[d9(0x18d)](a0bG['readFileSync'](et,d9(0xf4)))[d9(0x1c0)]??{}:e[d9(0x18d)](f[d9(0x142)](h,d9(0xf4)))[d9(0x1c0)]??{};}catch{return{};}}function Kt(a,c){const da=a0bQ;return{'shortId':typeof c?.[da(0x216)]=='string'&&c['short_id'][da(0x21b)]>0x0?c[da(0x216)]:a['slice'](0x0,0x8),'supervisorSession':typeof c?.[da(0xf0)]=='string'&&c[da(0xf0)]['length']>0x0?c[da(0xf0)]:null,'tmuxSession':typeof c?.[da(0x158)]==da(0x144)?c[da(0x158)]:'','status':typeof c?.[da(0x1b9)]=='string'?c[da(0x1b9)]:'','unsupervised':c?.[da(0x1e6)]===!0x0,'spawnedAt':typeof c?.[da(0xf6)]==da(0x144)?c['spawned_at']:''};}function dn(a=q()){return c=>{let {shortId:d,supervisorSession:f,tmuxSession:h}=Kt(c,a[c]);return{'shortId':d,'supervisorSession':f,'tmuxSession':h};};}function pn(a=q()){const db=a0bQ;return Object['entries'](a)[db(0x1b6)](([c,d])=>{let {shortId:f,supervisorSession:h,status:m,unsupervised:p,spawnedAt:u}=Kt(c,d);return{'shortId':f,'supervisorSession':h,'status':m,'unsupervised':p,'spawnedAt':u};});}function mn(){return Gt(zt(O));}async function _n(a,c){const dc=a0bQ;await at(ct(a[dc(0x1ed)],c['tmuxSession'],'supervisor_gone',{'supervisor_session':c['supervisorSession'],'trigger_event':a['event'],'trigger_ts':a['ts']}));}function Xt(a){let c=q();return{'readEvents':ln,'readTarget':dn(c),'readLedger':()=>pn(c),'lastUnwiredAuditDay':mn,'sessionExists':B,'sessionBusy':lt,'inject':async(d,f)=>{const dd=a0c;if(dd(0x13c)==='uskOq'){if(m[dd(0x21b)]===0x0)return n+'('+o+'):\x20未配線\x200\x20件(稼働中の\x20monster\x20はすべて\x20supervisor_session\x20が記録されている)';let i=p[dd(0x1b6)](I=>I[dd(0x162)]+dd(0x195)+I['spawnedAt']+')')['join']('\x20/\x20');return dd(0x1da)+r+'('+s+dd(0x164)+a[dd(0x21b)]+dd(0x1e8)+i+dd(0x124);}else{let i=await pt(d,f);return{'ok':i['ok'],'error':i['error']};}},'recordSupervisorGone':_n,'log':a};}function Z(a){const df=a0bQ;process['stdout'][df(0x1cb)](new Date()[df(0x1a0)]()+'\x20'+a+'\x0a'),it(a);}async function Sn(){let a=await Lt(),c=await Jt(a,Xt(Z));await Ft(c['state'],a);let d=Yt(c);d!==null&&Z(d);}Sn()[a0bQ(0x1f5)](a=>{const dg=a0bQ;Z('tick\x20失敗:\x20'+(a instanceof Error?a[dg(0x22c)]:String(a))),process[dg(0xf3)](0x1);});
|
|
2
|
+
const a0bP=a0c;(function(a,c){const bO=a0c,d=a();while(!![]){try{const e=parseInt(bO(0x287))/0x1*(parseInt(bO(0x1be))/0x2)+-parseInt(bO(0x1c2))/0x3*(parseInt(bO(0x279))/0x4)+parseInt(bO(0x270))/0x5+-parseInt(bO(0x167))/0x6+-parseInt(bO(0x264))/0x7+parseInt(bO(0x1ab))/0x8*(parseInt(bO(0x165))/0x9)+parseInt(bO(0x23b))/0xa;if(e===c)break;else d['push'](d['shift']());}catch(f){d['push'](d['shift']());}}}(a0a,0x53db7));import*as a0bC from'node:os';import*as a0bD from'node:path';var C=process.env.MONSTER_MCP_ROOT,h=C&&C[a0bP(0x1f3)]>0x0?C:a0bD[a0bP(0x155)](a0bC[a0bP(0x1fa)](),'.claude','monsters'),tt=a0bD['join'](h,a0bP(0x266)),yn=a0bD[a0bP(0x155)](h,a0bP(0x177)),v=a0bD['join'](h,a0bP(0x231)),k=a0bD[a0bP(0x155)](h,a0bP(0x239)),L=a0bD[a0bP(0x155)](h,a0bP(0x14c)),et=0xa*0x400*0x400,qt=0x5*0x400*0x400,E=a0bD[a0bP(0x155)](h,a0bP(0x27c)),x=E+a0bP(0x183),$=a0bD[a0bP(0x155)](h,'supervisor-notify.log'),nt=$+'.1',st=0x2*0x400*0x400,wn=a0bD[a0bP(0x155)](h,a0bP(0x143)),Zt=a0bD[a0bP(0x155)](h,a0bP(0x22b)),vn=Zt+'.1',xn=0xa*0x400*0x400,Qt=a0bD['join'](h,a0bP(0x21d)),On=Qt+'.1',In=0x2*0x400*0x400;import*as a0bE from'node:fs';import*as a0bF from'node:path';var te=/[\u0000-\u001f\u007f-\u009f]/g;function rt(a){const bQ=a0bP;return a[bQ(0x178)](te,'\x20')[bQ(0x178)](/\s+/g,'\x20')['trim']();}function ee(a){const bR=a0bP;try{if(bR(0x1b6)!==bR(0x255)){if(a0bE['statSync'](a[bR(0x26b)])[bR(0x1fb)]<a[bR(0x22f)])return;a0bE[bR(0x175)](a[bR(0x26b)],a[bR(0x1f8)]);}else o(bR(0x150)+(p instanceof r?s[bR(0x154)]:a(u))),y['exit'](0x1);}catch{}}function it(a,c,d=new Date()){const bS=a0bP;let f=d['toISOString']()+'\x20'+rt(c)+'\x0a';try{a0bE[bS(0x20c)](a0bF[bS(0x1c8)](a[bS(0x26b)]),{'recursive':!0x0}),ee(a),a0bE[bS(0x1df)](a[bS(0x26b)],f,'utf8');}catch{}}var ne={'path':$,'rotatePath':nt,'rotateBytes':st};function at(a){it(ne,a);}import*as a0bG from'node:fs';import*as a0bH from'node:fs';import*as a0bI from'node:fs/promises';function se(){const bT=a0bP;a0bH[bT(0x20c)](h,{'recursive':!0x0}),a0bH[bT(0x1f0)](v)||a0bH[bT(0x281)](v,'',bT(0x184));}async function re(){const bU=a0bP;try{if((await a0bI[bU(0x14b)](v))[bU(0x1fb)]<et)return!0x1;}catch{return!0x1;}try{return a0bH[bU(0x1f0)](L)&&await a0bI['unlink'](L),a0bH[bU(0x1f0)](k)&&await a0bI['rename'](k,L),await a0bI['rename'](v,k),await a0bI[bU(0x21f)](v,'',bU(0x184)),!0x0;}catch{return bU(0x163)!==bU(0x189)?!0x1:d?.['last_scanned_event_ts']??e;}}async function ct(a){const bV=a0bP;se(),await re();let c=JSON[bV(0x145)](a)+'\x0a';await a0bI[bV(0x25b)](v,c,bV(0x184));}function ut(a,c,d,f={}){const bW=a0bP;return{'ts':new Date()[bW(0x1bf)](),'monster_id':a,'event':d,'session':c,'meta':f};}import{execFile as a0bJ}from'node:child_process';import{promisify as a0bK}from'node:util';import*as a0bL from'node:fs';var M=a0bK(a0bJ);function ae(){const bX=a0bP;let a=process.env.MONSTER_TMUX_BIN;if(a)return a;for(let c of[bX(0x249),'/usr/local/bin/tmux'])try{if('RTvzu'!==bX(0x237))return d['replace'](c,'\x20')['replace'](/\s+/g,'\x20')[bX(0x291)]();else{if(a0bL[bX(0x1f0)](c))return c;}}catch{}return bX(0x223);}var A=ae(),j=class extends Error{},H=class extends j{constructor(a){const bY=a0bP;super(bY(0x283)+A+bY(0x26e)+String(a)),this[bY(0x24d)]=bY(0x1d7);}},U=class extends j{constructor(a){const bZ=a0bP;super(bZ(0x15a)+A+bZ(0x1a3)+(process.env.TMUX?'\u3042\u308A':'\u306A\u3057')+bZ(0x149)+(process.env.TMUX_TMPDIR??bZ(0x289))+bZ(0x23e)+a),this[bZ(0x24d)]=bZ(0x1b9);}};function ce(a){const c0=a0bP;let c=a?.[c0(0x153)];return c==='ENOENT'||c===c0(0x1a7)||c==='EPERM';}function ue(a){const c1=a0bP;let c=a,d=typeof c?.[c1(0x197)]==c1(0x272)&&c['stderr'][c1(0x1f3)]>0x0?c[c1(0x197)]:String(c?.[c1(0x154)]??a);return lt(d)[c1(0x291)]();}var fe=/can't find session|session not found/i;function le(a){const c2=a0bP;return fe[c2(0x169)](a)?'absent':c2(0x176);}var pe=/\x1b\[[0-9;?]*[A-Za-z]/g;function lt(a){const c3=a0bP;return a[c3(0x178)](pe,'')[c3(0x178)](/\r/g,'');}async function B(a){const c4=a0bP;try{return await M(A,[c4(0x1cc),'-t',a]),!0x0;}catch(c){if('mnzqv'==='vcrcy'){let f=c[c4(0x1e4)](f);f&&(i=f[0x1]);}else{if(ce(c))throw new H(c);let f=ue(c);if(le(f)===c4(0x158))return!0x1;throw new U(f);}}}var de=/esc to interrupt/i;async function pt(a){const c5=a0bP;let c=await dt(a,0x32);return c[c5(0x291)]()[c5(0x1f3)]===0x0?!0x0:de[c5(0x169)](c);}async function dt(a,c){const c6=a0bP;try{if(c6(0x162)!=='iTlgs'){let {stdout:d}=await M(A,[c6(0x1ed),'-t',a,'-p','-S','-'+c]);return lt(d);}else return{'shortId':typeof N?.[c6(0x161)]==c6(0x272)&&O[c6(0x161)]['length']>0x0?S['short_id']:T[c6(0x1ac)](0x0,0x8),'supervisorSession':typeof a0?.[c6(0x269)]==c6(0x272)&&a1[c6(0x269)][c6(0x1f3)]>0x0?a2[c6(0x269)]:null,'tmuxSession':typeof a3?.[c6(0x191)]==c6(0x272)?a4[c6(0x191)]:'','status':typeof a5?.[c6(0x1c0)]==c6(0x272)?a6[c6(0x1c0)]:'','unsupervised':a7?.[c6(0x1ff)]===!0x0,'spawnedAt':typeof a8?.[c6(0x205)]==c6(0x272)?a9['spawned_at']:''};}catch{return'';}}function me(a){const c7=a0bP;return Math[c7(0x26d)](0x64+Math[c7(0x159)](a/0x4),0x5dc);}function _e(a){const c8=a0bP;return a[c8(0x178)](/\n+$/,'');}async function mt(a,c){const c9=a0bP;try{let d=_e(c);await M(A,[c9(0x18d),'-t',a,'-l',d]);let f=me(d['length']);return await new Promise(i=>setTimeout(i,f)),await M(A,[c9(0x18d),'-t',a,c9(0x274)]),await new Promise(i=>setTimeout(i,0xc8)),await M(A,[c9(0x18d),'-t',a,c9(0x274)]),{'ok':!0x0,'bytes':Buffer[c9(0x15d)](d,c9(0x184))};}catch(i){if(c9(0x1c1)!==c9(0x1c4))return{'ok':!0x1,'bytes':0x0,'error':i?.[c9(0x197)]||i?.['message']||c9(0x206)};else{let {shortId:u,supervisorSession:y,status:N,unsupervised:O,spawnedAt:S}=c(f,i);return{'shortId':u,'supervisorSession':y,'status':N,'unsupervised':O,'spawnedAt':S};}}}var G=[a0bP(0x202),a0bP(0x1d9)],St=a0bP(0x28b),Se='\u3002\u72B6\u614B\u3092\u78BA\u8A8D\u3057\u3066\u5BFE\u5FDC\u305B\u3088',ht='A-Za-z0-9._@+-';function he(a){const ca=a0bP;if(typeof a!=ca(0x272))return null;let c=a[ca(0x288)]()['replace'](/[^0-9a-f]/g,'');return c[ca(0x1f3)]===0x0?null:c[ca(0x1ac)](0x0,0xc);}function ge(a){const cb=a0bP;return typeof a==cb(0x272)&&G[cb(0x254)](a);}function gt(a){const cc=a0bP;if(typeof a!=cc(0x272))return null;let c=Date[cc(0x14d)](a);if(!Number['isFinite'](c))return null;let d=new Date(c),f=String(d['getHours']())[cc(0x286)](0x2,'0'),i=String(d[cc(0x210)]())['padStart'](0x2,'0');return f+':'+i;}function Te(a){const cd=a0bP;let c=he(a['shortId']),d=gt(a['ts']);return!c||!d||!ge(a[cd(0x28e)])?null:cd(0x222)+c+cd(0x24c)+a[cd(0x28e)]+'('+d+')';}function Tt(a){const cf=a0bP;let c=[];for(let d of a){let f=Te(d);f&&c['push'](f);}return c[cf(0x1f3)]===0x0?null:''+St+c[cf(0x155)]('\u3001')+Se;}var Ee=new RegExp(a0bP(0x25d)),ye=['\u627F\u8A8D','\u627F\u8AFE','\u4E86\u627F','\u8A31\u53EF','\u8A8D\u53EF','\u8A31\u8AFE','\u88C1\u5B9A','\u6C7A\u88C1','GO','\u30B4\u30FC',a0bP(0x224),'\u30BF\u30B0',a0bP(0x1cf),a0bP(0x14e),'\u672C\u756A','\u53EF',a0bP(0x1b5),a0bP(0x1aa),a0bP(0x256),a0bP(0x173),a0bP(0x23f),a0bP(0x148),a0bP(0x195),'\u5DEE\u3057\u652F\u3048\u306A\u3044',/\b(?:ok|okay|go|approve[ds]?|approval|authoriz(?:e|ed|ation)|merge[ds]?|tag|release|deploy|greenlight)\b/i];function b(a){const cg=a0bP;let c=[];for(let d of ye){if(typeof d==cg(0x272)){a[cg(0x254)](d)&&c[cg(0x1a6)](d);continue;}let f=a[cg(0x1e4)](d);f&&c[cg(0x1a6)](f[0x0]);}return c;}function P(a){const ch=a0bP;return b(a)[ch(0x1f3)]>0x0;}function Et(a){const ci=a0bP;if(!Ee[ci(0x169)](a))return{'ok':!0x1,'reason':ci(0x226)};if(P(a))return{'ok':!0x1,'reason':ci(0x19c)+b(a)['join'](ci(0x1db))};if(xt(a)){let c=Y(a);return{'ok':!0x1,'reason':Ot+':\x20'+c[ci(0x155)](ci(0x1db))};}return{'ok':!0x0};}var yt=0x40,we=new RegExp('^['+ht+a0bP(0x251));function _t(a){const cj=a0bP;if(typeof a!=cj(0x272))return null;let c=a[cj(0x291)]();return c['length']===0x0||c[cj(0x1f3)]>yt||!we['test'](c)?null:c;}function wt(a){const ck=a0bP;let c=_t(a[ck(0x1e1)]),d=_t(a[ck(0x233)]),f=gt(a[ck(0x160)]);return!c||!d||!f?null:St+ck(0x22a)+c+'\x20が不在と検知された('+f+ck(0x144)+c+ck(0x1a2)+d+ck(0x258);}var V='['+ht+']{1,'+yt+'}',ve=new RegExp('^【orchestrator】監督\x20session\x20'+V+'\x20が不在と検知された([0-9]{2}:[0-9]{2})。前景で\x20tmux\x20list-sessions\x20を撃ち、'+V+'\x20と自席\x20'+V+'\x20がそれぞれ何行出るか数えよ(自席が\x200\x20行なら測り方が壊れている)。監督不在が事実なら、配線の付け替えを\x20CTO\x20へ上げよ。停止の要否は貴席と\x20CTO\x20が決めよ$'),xe=/([0-9]{2}:[0-9]{2})/,Oe=/前景で tmux list-sessions を撃ち、/,Ie=/(自席が 0 行なら測り方が壊れている)/,Re=/has-session/,Ae=['\u6D88\u3048\u305F','\u6D88\u6EC5','\u6D88\u5931',a0bP(0x194),'\u6B7B\u4EA1',a0bP(0x219),a0bP(0x1e0),a0bP(0x1ef),a0bP(0x26c),a0bP(0x271),'\u5B58\u5728\u3057\u306A\u3044',a0bP(0x285),a0bP(0x208),a0bP(0x28d),'\u4E0D\u5728\u3067\u3042\u308B','\u4E0D\u5728\u3067\u3059','\u4E0D\u5728\u3060',a0bP(0x23a),/\b(?:is|has|was|been)\s+(?:gone|dead|missing|terminated|absent)\b/i];function vt(a){const cl=a0bP;let c=[];for(let d of Ae){if(cl(0x284)===cl(0x19a))return c['parse'](f['readFileSync'](i,cl(0x184)))[cl(0x185)]??{};else{if(typeof d==cl(0x272)){a[cl(0x254)](d)&&c[cl(0x1a6)](d);continue;}let i=a[cl(0x1e4)](d);i&&c[cl(0x1a6)](i[0x0]);}}return c;}function ke(a){const cm=a0bP;return vt(a)[cm(0x1f3)]>0x0;}var Ne=['\u505C\u6B62','\u7D42\u4E86','\u4E2D\u6B62','\u4E2D\u65AD','\u4F11\u6B62','\u5F85\u6A5F','\u64A4\u53CE','\u64A4\u9000','\u96E2\u8131','\u653E\u68C4','\u4E2D\u5EA7','\u7834\u68C4','\u524A\u9664','\u62B9\u6D88','\u6D88\u53BB','\u51CD\u7D50','\u5C01\u9396','\u9589\u9396','\u89E3\u6563'],$e=['\u305B\u3088','\u305B\u3044','\u3057\u308D','\u3057\u3066','\u3059\u308B\u3053\u3068',a0bP(0x282),a0bP(0x1f1),'\u3059\u3079\u3057','\u9858\u3046'],Me=[new RegExp(a0bP(0x1a0)+Ne[a0bP(0x155)]('|')+a0bP(0x18e)+$e[a0bP(0x155)]('|')+')'),/やめ(?:よ|ろ|て|ること|なさい)/,/\b(?:must|should|please)\s+(?:stop|halt|abort|terminate|cease|suspend|stand\s?down)\b/i,/\b(?:stop|halt|abort|terminate|cease|suspend|shut\s?down|stand\s?down)\s+(?:now|immediately|work(?:ing)?|the\s|your\s|this\s)/i];function Y(a){const co=a0bP;let c=[];for(let d of Me){let f=a[co(0x1e4)](d);f&&c[co(0x1a6)](f[0x0]);}return c;}function xt(a){const cp=a0bP;return Y(a)[cp(0x1f3)]>0x0;}var Ot=a0bP(0x236);function It(a){const cq=a0bP;if(P(a))return{'ok':!0x1,'reason':cq(0x19c)+b(a)['join'](cq(0x1db))};if(xt(a)){let c=Y(a);return{'ok':!0x1,'reason':Ot+':\x20'+c[cq(0x155)]('\x20/\x20')};}return ke(a)?{'ok':!0x1,'reason':cq(0x22d)+vt(a)['join'](cq(0x1db))+'(監督が復活した後に届くと文面が嘘になる。検知の報告として書くこと)'}:Re[cq(0x169)](a)?{'ok':!0x1,'reason':'has-session\x20\u3092\u6483\u305F\u305B\u3066\u3044\u308B\uFF08\u80CC\u666F\u30B7\u30A7\u30EB\u3067\u507D\u306E\x20DEAD\x20\u3092\u8FD4\u3059\u6E2C\u308A\u65B9\u3067\u3042\u308A\u3001\u8AA4\u308A\u304C\u5426\u5B9A\u5074\u306B\u3060\u3051\u51FA\u308B\u305F\u3081\u300E\u76E3\u7763\u304C\u6D88\u3048\u305F\u300F\u3092\u904E\u5270\u751F\u6210\u3059\u308B\u3002\u524D\u666F\u306E\x20tmux\x20list-sessions\x20\u3067\u6570\u3048\u3055\u305B\u308B\u3053\u3068\uFF09'}:xe[cq(0x169)](a)?Oe[cq(0x169)](a)?Ie[cq(0x169)](a)?ve[cq(0x169)](a)?{'ok':!0x0}:{'ok':!0x1,'reason':cq(0x26a)}:{'ok':!0x1,'reason':cq(0x215)}:{'ok':!0x1,'reason':cq(0x25a)}:{'ok':!0x1,'reason':'\u691C\u77E5\u6642\u523B\uFF08HH:MM\uFF09\u3092\u542B\u307E\u306A\u3044\uFF08\u53D7\u3051\u624B\u304C\u901A\u77E5\u306E\u53E4\u3055\u3092\u5224\u65AD\u3067\u304D\u306A\u3044\uFF09'};}var be=['user_prompt','session_end'],Le=a=>typeof a==a0bP(0x280)&&a!==null&&!Array[a0bP(0x174)](a);function je(c){const cr=a0bP;let d=c[cr(0x291)]();if(d['length']===0x0)return null;let f;try{if(cr(0x1c9)!==cr(0x1c9))return d(e)[cr(0x1f3)]>0x0;else f=JSON[cr(0x14d)](d);}catch{return cr(0x201)!==cr(0x213)?null:c[cr(0x1c5)](S=>S[cr(0x1c0)]===cr(0x1e8)&&!S[cr(0x1e1)]&&!S['unsupervised'])['map'](S=>({'shortId':S[cr(0x23d)],'spawnedAt':S[cr(0x1b7)]}));}if(!Le(f))return null;let {ts:o,monster_id:p,event:u}=f;if(typeof o!=cr(0x272)||typeof p!=cr(0x272)||p['length']===0x0||typeof u!=cr(0x272))return null;let y=Date[cr(0x14d)](o);return Number[cr(0x1d0)](y)?{'ts':o,'tsMs':y,'monsterId':p,'event':u}:null;}function Rt(a){const cs=a0bP;let c=[];for(let d of a){let f=je(d);f&&c[cs(0x1a6)](f);}return c;}function Pe(a){const cu=a0bP;return G[cu(0x254)](a);}function Fe(a){const cv=a0bP;return be[cv(0x254)](a);}function At(f,y){const cw=a0bP;let N=new Map(),O=new Map(),a0=new Map();for(let [a6,a7]of Object[cw(0x1f9)](y[cw(0x1f9)])){if(cw(0x1a1)!==cw(0x1a1))try{return f[cw(0x170)](a2,0x0),!0x0;}catch(a9){return a9?.[cw(0x153)]==='EPERM';}else{N['set'](a6,a7[cw(0x25f)]);let a9=Date[cw(0x14d)](a7[cw(0x1b1)]);Number[cw(0x1d0)](a9)&&O[cw(0x1a9)](a6,a9);let aa=a7['last_scanned_event_ts']===void 0x0?NaN:Date[cw(0x14d)](a7[cw(0x1bb)]);Number[cw(0x1d0)](aa)&&a0[cw(0x1a9)](a6,aa);}}let a1=new Set(),a2=new Map(),a3=new Map(),a4=null,a5=(ab,ac)=>{const cx=cw;let ad=ab[cx(0x1fe)]+'\x00'+ac;a3[cx(0x1a9)](ad,{'monsterId':ab[cx(0x1fe)],'reason':ac,'count':(a3[cx(0x216)](ad)?.[cx(0x1b0)]??0x0)+0x1,'latestTs':ab['ts'],'latestEvent':ab['event']});};for(let ab of[...f][cw(0x1d6)]((ac,ad)=>ac[cw(0x232)]-ad[cw(0x232)])){if(y[cw(0x1b2)]!==null&&ab[cw(0x232)]<=y[cw(0x1b2)])continue;(a4===null||ab[cw(0x232)]>a4)&&(a4=ab[cw(0x232)]);let ac=a0[cw(0x216)](ab[cw(0x1fe)]);if(ac!==void 0x0&&ab[cw(0x232)]<=ac)continue;if(Fe(ab['event'])){N['get'](ab[cw(0x1fe)])&&(N['set'](ab[cw(0x1fe)],!0x1),a1[cw(0x166)](ab['monsterId']));continue;}if(!Pe(ab['event']))continue;if(N[cw(0x216)](ab[cw(0x1fe)])){if(cw(0x1f6)!==cw(0x245)){a5(ab,cw(0x25f));continue;}else return{...N,'monsters':{...a3[cw(0x185)],[a4]:{...a0[cw(0x185)][O],'last_injected_event_ts':f,'awaiting_reaction':!0x0}}};}let ad=O[cw(0x216)](ab[cw(0x1fe)]);if(ad!==void 0x0&&ab['tsMs']<=ad){a5(ab,cw(0x156));continue;}a2[cw(0x1a9)](ab[cw(0x1fe)],ab);}return{'notify':[...a2[cw(0x260)]()][cw(0x1d6)]((ag,ah)=>ag[cw(0x232)]-ah[cw(0x232)]),'suppressed':[...a3['values']()],'reacted':[...a1],'maxScannedMs':a4};}import*as a0bM from'node:fs/promises';import*as a0bN from'node:path';var De=0xea60,Kn=De*0x3;function kt(a){const cy=a0bP;try{return process['kill'](a,0x0),!0x0;}catch(c){return cy(0x290)===cy(0x20a)?!0x1:c?.['code']==='EPERM';}}var Ce=0xc8,He=()=>({'version':0x1,'cursor_ts':null,'monsters':{}}),z=a=>typeof a==a0bP(0x280)&&a!==null&&!Array[a0bP(0x174)](a),J=a=>typeof a=='string'&&a[a0bP(0x1f3)]>0x0?a:void 0x0;function Ue(c){const cz=a0bP;if(!z(c))return{};let d={};for(let [f,o]of Object[cz(0x1f9)](c)){if(!z(o)||typeof o[cz(0x1b1)]!='string')continue;let p=J(o[cz(0x1ae)]),u=J(o[cz(0x221)]),y=J(o['last_scanned_event_ts']);d[f]={'last_injected_event_ts':o[cz(0x1b1)],'awaiting_reaction':o[cz(0x25f)]===!0x0,...p===void 0x0?{}:{'reverse_injected_supervisor':p},...u===void 0x0?{}:{'last_gone_recorded_event_ts':u},...y===void 0x0?{}:{'last_scanned_event_ts':y}};}return d;}function Be(a){const cA=a0bP;let c=JSON[cA(0x14d)](a);if(!z(c))throw new Error(cA(0x1d8));return{'version':0x1,'cursor_ts':typeof c[cA(0x1eb)]==cA(0x272)?c['cursor_ts']:null,'monsters':Ue(c[cA(0x185)])};}var F=new WeakMap();function Nt(a){const cB=a0bP;let c=a;return''+(typeof c?.['code']=='string'?c[cB(0x153)]+':\x20':'')+String(c?.[cB(0x154)]??a);}async function D(){const cC=a0bP;let a;try{a=await a0bM[cC(0x1f5)](E,cC(0x184));}catch(c){return c?.['code']===cC(0x227)?{'ok':!0x0,'state':He()}:{'ok':!0x1,'kind':'unreadable','detail':Nt(c)};}try{return cC(0x234)===cC(0x265)?[]:{'ok':!0x0,'state':Be(a)};}catch(f){return{'ok':!0x1,'kind':cC(0x16e),'detail':Nt(f)};}}async function Ve(a){let c=null;return await Ft(async()=>{const cD=a0c;let d=await D();if(d['ok']||d[cD(0x1fc)]!==cD(0x16e))return;let f=new Date()[cD(0x1bf)]()['replace'](/[:.]/g,'-'),i=E+cD(0x22c)+f+'.'+process['pid'];await a0bM[cD(0x181)](E,i),c=i,process[cD(0x197)][cD(0x268)](cD(0x228)+i+cD(0x275)+a+')\x0a');}),c;}var Ge=0x32;function Ye(a){return new Promise(c=>setTimeout(c,a));}function $t(a){const cE=a0bP;return new Error(cE(0x179)+E+cE(0x186)+a+')');}async function Pt(){const cF=a0bP;let a=await D();if(a['ok'])return F[cF(0x1a9)](a[cF(0x1f2)],structuredClone(a['state'])),a[cF(0x1f2)];if(a[cF(0x1fc)]===cF(0x17a))throw $t(a[cF(0x28f)]);await Ye(Ge);let c=await D();if(c['ok'])return F[cF(0x1a9)](c['state'],structuredClone(c['state'])),c['state'];if(c[cF(0x1fc)]===cF(0x17a))throw $t(c[cF(0x28f)]);let d=await Ve(c[cF(0x28f)]);throw new Error(cF(0x151)+E+cF(0x22e)+c['detail']+')。'+(d?d+'\x20へ退避しました(消さないこと)。':'')+'\u{1F6A8}\x20\u3053\u308C\u306F\u300C\u5BFE\u8C61\u304C\u7121\u3044\u300D\u3053\u3068\u306E\u8A3C\u62E0\u3067\u306F\u3042\u308A\u307E\u305B\u3093\uFF08\u6E2C\u5B9A\u4E0D\u80FD\uFF09');}var Mt=0x0;function Je(){const cG=a0bP;return Mt+=0x1,E+'.'+process['pid']+'-'+Mt+cG(0x1ba);}var bt=0x2710,Lt=0x3a98;function a0a(){const dm=['lMnVCNj1ChqU','55UJ552J44gU5lIn5zYO44ks5PAT5A6A44gx44gM44ge44kloIa','ioobJowJIUocJoobPUobHoobVUobL+obN++8Ia','CM90yxrLqNL0zxm','z29UzvjLy29Yzfn1ChbYzxnZzwq','zxzLBNrZlMXVzW','DhnnCW','C3vIB3jKAw5HDgvtzxnZAw9U','EfPbt2W','Eu1iExG','6ygl6lUI44ks57wc44kp44kj44gB44kl5zg95lUK44ks6ygl44kt44gN44ge44kl44cc5RoO5ywL44gV54Q25Rob6ycA55+L44g+44gN44gN44cb5OYh56s644gV6ygl44gW44gQ44ge77Yi6kAb5lU2imkNmU+8IEoaGUwpL+obKEAjI+IhQUI6Q+obQ+A4RoocIEobM+ocI+wrVEs7Po+8IoAsG+obPUodU+AvSoobIoocIo+8IEobQooaGEs6UUobUowiPoAwREocKUAiU+obMEw9OU+8IenutYdJGBJKUiRJGzlJGOJJG7VLGzZMRAlJGA7OPOhLKkBJGA/OSRtLUk3JGAGGq1rpioobJoAXUUocGEocIo+8IEobR+IOSEobLEocJoocI+oaGUEMGEobMoobPUobHoocI+obRUobRYOQ5y+x44gr5OMl44gU6ygl6lUI44ks57wc44kp44kj44gB44kll+s4REAwREobLEobM+ocI+wrVEs7PcOQ44gN44cb55cg55sX44gV6kQK5QsC55+L44gm5y2Z5BQN44gR5lIn5y+V6ycg44gQ5ygC5Q2I44gR44gQ44kk44cb44gx44gl44kc5Q2I44g+44gJ44gF5yg044gm5Q2I44g+44gJ44gF44gB44ge44gN55wW6k2W44ks5zsX44gi44kj44km44gQ44gp44gQ44kl44gF44kb','uLr2ENu','vKvKtwq','zxzLBNrZlMXVzY4X','5lIn5zYO44gm56k65A6A','mJy3nJGWmfrvsMjxAG','BxmG5lUL5yAf44gR5y+w5B6x44gN44gn44gQ44gl44gJ44gF','C2HVCNrjza','77Yj44cc8j+AQcaQkUocU+odG+ocT+odP+odS+obJoEeOEobHoobK+obQoobRUIOVoAlOoobQ+obR+obQUocIUobVUobM+ocKYOQ77Yi5RIS5A6A5lIn6io977Yj44cc5zg844gZ5yE644gx5ywd44gU55kW5Akd44gm5A++6kMX44k344kN44oR44gO6ygv44gg44k944kX44od44oi44ks6kAl44gM44ge44kl5y+V6io95OcN44gm44gc44kk44g+44gz44cc6kMZ57sWoIa','44gl44g+44kp44gQ44ge','C3vWzxj2AxnVCL9NB25L','5y+W5BIZ44gRihrTDxHFC2vZC2LVBIdJGyZNHkhJGy/MS6JLHAxLHyJJGyZMSBRJGB7JGONJGARJGyq','CMv2zxjZzuzHAwXLza','Dg11EfnLC3nPB24','v01twha','Cuvpv1a','y1jtu0W','ioobQ+EBO+EDO+obJowpJEw/NoobL+obNYdIGjqG5OQr5Q2I44ks6kEJ6zMK77Yi5QYH44gU5ygC5Q2I44gl44kj5yAn44gZ5RoO5ywL44gz44kl77Yj','zMXHDe1HCa','l29WDc9OB21LyNjLDY9IAw4VDg11Ea','BM93','Aw5Qzwn0','ioobJca','BMfTzq','ioobQ+IOREwUMU+8IoMbJUwoU+obRUwbNoATOUobR+AZQowfPEobL+obQUobHo+8Iq','iokgKIdKU4RLM57JGA/KVzxJGOlJGzFJGARJGytVViHZDxbLCNzPC29Yx2DVBMuG44kc6kIy6yYY44gx44gQ44ge77YjoIa','igj1C3NLVOxJGAe9','xsSK','ioAkKEATOJ0','AxrLBxm','Aw5JBhvKzxm','AxzgwNC','44gM44ge44ge','A2v5CW','ioobJoobNEocJoobNUocJos9LEIHJowhUUocI+obI+AvSoobIoocIo+8IoIhQUw4REobJcaWioIHJoobQUocIEA4RoocIUAwUEobJowJIUocJoobPUobHoocI++8IEoaGUEBO+EDO+s4JEwCQoobJos6I+wUN+obQUocIEoaGEMfJEE3MUobRUs7MoobKEABV+obIoocKIbdve8G44g45lIk44gs44ki44cc5ygC5Q2I44gU6kAb5zcM44gV6lk05BIT44gOienutYdJGyZMSBRJGOhJGOG','Bg9N','5y+x44gr5OMl44gR5yMn5PMV44gUihrTDxGGBgLZDc1ZzxnZAw9UCYdJGPlMKOpJGz/JGzVJGOVOOyZLI5xOPOhMSylJGPlLKkVJGB7JGARJGytVViJMS6JLHAxJGyZMUkZLRPRJGA7JGy3JGApJGyVJGzhJGAFJGA/JGARJGy/LGzZMRAlJGA7MOlNMI6dJGAVJGARJGApJGABJGzFJGB7JGyBVViK','yxbWzw5KrMLSzq','ioobRUwbNoATOUocPoodMEodS+odIca','xUoaKg9Yy2HLC3rYyxrVCUoaKw1VBNn0zxiGwZaToweTzL17msWXmN0G44gmicG/oMf3ywL0Aw5Nx2LUChv0Fhn0B3bWzwqP77YiwZaTov17mN06wZaTov17mN3VViKOpZRJGifTB25ZDgvYifSWltLHlwzDEZeSmtj9ioobJcaOpZPHD2fPDgLUz19PBNb1DhXZDg9WCgvKkE+8IfSWltLDEZj9oLSWltLDEZj977YjksRJGilNIRBMHyVJGPlNORROQO3JGzFJGABLR77LV5ZJGzVJGOGK','ig1VBNn0zxi9','yxDHAxrPBMDFCMvHy3rPB24','DMfSDwvZ','ioMaHUwqKEobJEs4JEMbLd0','Dg9tDhjPBMC','5OQr5Q2IoIbTB25ZDgvYpq','ntq2mJm4qxrYwxDL','Eg5ksxK','C3rHDguUANnVBG','zgf0Awu','D3jPDgu','C3vWzxj2AxnVCL9ZzxnZAw9U','6ycg5zcr44gn44gU5zU65A6A44og44oZ44ox44oS44gR5lIa6iE044gx44gQ44ge','Cgf0Aa','5ygC5Q2I44gx44gF','BwLU','77Yj44ccuefuscdJGASGl29WDc9OB21LyNjLDY9IAw4G44gm54sH44geigXHDw5JAgqG562j44gl44kjioI1T+wlLEobLEocJoobPUobHoocI+wpR+IdVEAaP+obJoobGUocIUobVUobMEoaGK1ptLnurvjFve1vwf9csu4G44gN5PIo56s65OYh5A6A44gN44gn44g+44gz44cc5y6F5zUGoIa','u1vqrvjwsvnpuL9tvefurv9xuKLurv9sruzvu0veoIa','mJeYmde2mffJCwrnAa','6jc944gH44gF','C3rYAw5N','ioIhQUw4Rt0','rw50zxi','ioobUoMaGoMbV+obL+obVUobL+obN++8Ia','zNjVBuvUDhjPzxm','zxHPDa','8j+AQcdPGiBLKjhJGy3MS6JLHAxKUk3MRAi6ioAwH+MDOUocKUE1HoocGEobQUobI+obO+obNYbTB25ZDgvYpq','ndCWmhntrhjfDq','77YjiokaLcbZDxbLCNzPC29Yx3nLC3nPB24G5PYQ6kIy6yYY44gU44gF44kb5RoO5ywL5ywi44gm54sH44gp44cb44gt44gU5ygC5Q2I44gV6kQW44gR44kc6ycA55+L44gv44km44gQ44ge77YiC3bHD24G5PMc44gRihn1CgvYDMLZB3jtzxnZAw9UioocKUA4OEobMEobK+obQo+8Iq','5RoO5ywL6kAl6ycb44kkoIdMLOFPNAlJGPlNTytJGOhJGARJGyVJGApJGz8GBw9UC3rLCJ0','C3vWzxj2AxnVCI1UB3rPzNKUANnVBG','yMXVy2TLza','ioocKUIQREocGEobQUobHoobN+ocGEs4IUABUoobJEobL+obVUobM+ocK++8Ia','ioocKIa','B2jQzwn0','D3jPDgvgAwXLu3LUyW','44gv44km44gF44gx','Dg11EcdJGPlLRP/OOyZJGAFJGy3JGB7JGzVJGPpVViHIAw49','t3HpA1y','5Bgf44gQ44ge','CgfKu3rHCNq','mJiXtfLcrezZ','Dg9mB3DLCKnHC2u','5PYQ6kIT5A6A','C3vWzxj2AxnVCL9NB25LoIbZzxnZAw9Upq','44cqB3jJAgvZDhjHDg9Y44cr','txDtsK4','44ge44gQ44gp44gQ44gJ44gF','zxzLBNq','zgv0ywLS','rwrUEM8','DhjPBq','y2XVC2vtEw5J','yNvZEsbZA2LWoIbZzxnZAw9Upq','55UJ552J44gm5yMn5zUE44gU6ycA55+L44gR44g+44gG5y+n5B+C44gx44gM44ge44gQ44ge44gF44kb5RoO5ywL44gx44gQ44ge77YiWQCZlJmG5yAQ562j77Yj','zgvSAxzLCMvK','CMvHzeXLzgDLCG','z292zxjUB3iUANnVBG','77Yj44cc5yMn5PMV44gNihrTDxGGBgLZDc1ZzxnZAw9UCYdJGPlMKOpJGAhJGie','C3rYAw5NAwz5','y2f0y2G','ihn1CgvYDMLZB3jFC2vZC2LVBJ0','44gx44gM44gp44gG44gv44ge','lcbutvvyx1rnuerjuJ0','B3bLBLn5BMm','C3rHDa','zxzLBNrZlMXVzY4Y','CgfYC2u','44oh44ox44oT44kK','C2vZC2LVBKj1C3K','DgLJAYdLPlhMLzC6ia','u1vqrvjwsvnpuL9tvefurv9dt1jsvvbuoIa','BwTKAxi','y29Kzq','BwvZC2fNzq','AM9PBG','ywXYzwfKEv9PBMPLy3rLza','5PEI44gR5RoO5ywL5RIi44g/44gU44kK44oz44oZ44oi44gU44gF44kb5yAn5RoO5ywL44gx44gQ44ge77YiWQCZlJmG5yAQ562j77Yj','ywjZzw50','zMXVB3i','Dg11EcdJGRxJG7ZJG5dJGAVNUyVJGyZJGORJGB7JGzVJGPpVViHIAw49','ios7TIaViowpSow4SZ0','zxjYB3i','yNL0zuXLBMD0Aa','77Yj44g46ycA55+LioAwH+MDOJ0','77YiC2vZC2LVBJ0','zgv0zwn0zwrbDa','C2HVCNrFAwq','rffTuu8','q3zcC0S','C3rKB3v0','mtC1mZG0ofbIy2LfEG','ywrK','mZm4mZu4nNnQtLvNrW','zuDvA24','DgvZDa','zMfPBgvK','rvbfuK0','ioMaHUwqKEobJEIMI+MaGEocIJ0','DgfYz2v0','y29YCNvWDa','zvf2s0i','A2LSBa','ruvysvnu','ic8G5PAh6z2Ipq','5QEl44kp44gQ44ge','AxnbCNjHEq','CMvUyw1Lu3LUyW','Dw5TzwfZDxjHyMXL','C3rHDguUBg9JAW','CMvWBgfJzq','u1vqrvjwsvnpuL9tvefurv9vtLjfqurbqKXfoIa','Dw5YzwfKywjSzq','8j+AQcdPGiBLKjhJGy3MS6JLHAxOPOVPGihJGOO6ig1VBNn0zxi9','ywXSB2m','z29Uzq','ios9K++8IsdIGjqG55UJ6kAw57AY44gR56M044gm6zAl44ge44gM44ge44kl','CMvHzev2zw50CW','iowpJEw/Nd0','CMvUyw1L','Bgf0zxn0rxzLBNq','lMXVy2S','DxrMoa','Bw9UC3rLCNm','ioocKUIQREocGEobVUobM+ocK+obP+obL+obN++8Ia','AgfZ','ioACQUMfJEE3MJ0','sej3uxK','thL5wLK','ios7TU+8IoACGoAwSca','CMvKDwnL','C2vUzc1RzxLZ','ksG/oG','CMvHC29U','5yID5zUEihrPy2S6ioocQ+odVoocVEodQ+ocKIa','Dg11Ef9ZzxnZAw9U','77YiBw9UC3rLCJ0','BM9FDgfYz2v0x3nLC3nPB24','5Q2744kt44gG','5zwp6Agm44gQ44ge','tu1NAhy','C3rKzxjY','ruLZANC','venZwuy','swDcwxm','BwfW','5O6i5QIP44ks5Osp5zgZ44gz44kl6kQE44ks5zcR44kaoIa','C3vWChjLC3nLza','ioobJowTMowCQoobL+obQUobHcbTB25ZDgvYpq','DgLJAYdLROZKUOy6ioAZQowfPt0','kd86','sM9NCK8','ioobQoIhQUw4Rsa','lcbutvvypq','5y+n5B+C6kAZ5RISoIbTB25ZDgvYpq','C2TPChbLza','ChvZAa','rufdq0vt','77Yjic8G5PAh6z2Ipq','C2v0','44gM6iMV44ge','mtznrMThy2e','C2XPy2u','ios7TIdIGjqG','CMv2zxjZzv9PBMPLy3rLzf9ZDxbLCNzPC29Y','ktOG5PYQ6ywn57EAia','y291BNq','BgfZDf9PBMPLy3rLzf9LDMvUDf90CW','y3vYC29Ytxm','CgLK','EuHHALy','44gM44ki44ge','vermzgu','C3bHD25Lzef0','ipcFMQGG6kAb5A++5yEMoIbZDxbLCNzPC29Yx3nLC3nPB24G5PYQ6kIy6yYY44gUig1VBNn0zxiG44gm44ge44kl77Yi5ygC5Q2Ipq','vg11EfnLCNzLCLvUCMvHy2HHyMXLrxjYB3i','lNrTCa','BgfZDf9Zy2fUBMvKx2v2zw50x3rZ','Aw5PDgLHBgL6zwq','u1vqrvjwsvnpuL9tvefurv9mt0nlx1rjtuvpvvq6ia','mJKWnLnNqLrMBW','Dg9ju09tDhjPBMC','C3rHDhvZ','t0HHuNq','mta2nxf3BMfntG','Dw5HC3nPz25Lza','swz1Eeq','zMLSDgvY','ioAZQowfPEs4REATOJ0','77Yj44gm5A6F5zYO44gx44gQ44geiokaLcdNN6xJGONJGzVJGOVNM7JMIyVJGyZLSyxJGARJGytVViHYzwnVBMnPBguG44gm5y+W5BIZ44ks55U044gz77Yj','zgLYBMfTzq','zefnzK0','Dw53AxjLza','A3fYuhG','AgfZlxnLC3nPB24','C2vSzG','ioMaHUwqKEobJEAZQowfPt0','44oQ44oQ44o844k5','AxngAw5PDgu','CxrjAuS','BgfZDfvUD2LYzwrbDwrPDerHEq','BM90Awz5','CMv2zxjZzuLUAMvJDgvK','BxrPBwvnCW','C29YDa','vg11EfvUyxzHAwXHyMXLrxjYB3i','44kQ44ow44k444kN44kV44oi44gN44gV44gQ44ge','C3rVChbLza','BhzAwKu','ic8G','zMfPBgvKtw9UC3rLCNm','8j+AQcdPHy3KUiSGC2vZC2LVBIdJGA7LRP/LNkJJGPlLIktLRPRJGAFJGy3JGB7JGzVJGPmGC2vZC2LVBJ0','sxnpthy','yxbWzw5KrMLSzvn5BMm','57wc5lQg44gx44gF','C3vWzxj2AxnVCLnLC3nPB24','iokgKIdKU4RLM57JGA/PGiBLKjhJGy3MS6JLHAxJGzFJGARJGyq6ia','6ycg5zcr44gn5RoO5ywLoIdNM6pNNAmGC2vZC2LVBJ0','Bwf0y2G','CMvHzezPBgvtEw5J','CMv2zxjZzujSB2nRzwq','CMvHy3rLza','CNvUBMLUzW','s0TuuKe','BNvTyMvY','y3vYC29Yx3rZ','CMvHzfrHCMDLDa','y2fWDhvYzs1Wyw5L','8j+AQcdMS6JLHAxKUk3MRAi6ia','6yca5BIT44gx44gF','zxHPC3rZu3LUyW','44gQ44gv44ge','C3rHDgu','BgvUz3rO','8j+AQcdMNkRPHy3NT5O6ig1VBNn0zxi9','CMvHzezPBgu','z0Tcr1u','C3bSAxq','CM90yxrLugf0Aa','zw50CMLLCW','Ag9TzwrPCG','C2L6zq','A2LUza','igDVBMxOQjJPJllMIPhMRAi9','Bw9UC3rLCKLK','Dw5ZDxbLCNzPC2vK','8j+AQcdPGiBLKjhJGy3MS6JLHAxKUk3MRAi6ia','sfzZrvm','yxDHAxrPBMDFAw5WDxq','C2TPChbLzej1C3K','6ywn5lIl6iEQ6lQR44gm55UJ552J44gO44gx44gM6kIy6yYY44gv44km44gM44ge44kl77Yi6iEQ5BEX5RoO5ywL44gR44gQ44kl77Yj','C3bHD25Lzf9HDa','Dg11EcbZzw5KlwTLExmGzMfPBgvK','77Yi5QYHihrPy2SG44gN5yAn6kMM6kgm77Yj','44ge44gQ44ge','Aw5Qzwn0zwq','CLrMzNa','khnWyxDUzwqG','BwTKAxjtEw5J','yNvZEq','ktOG5PYQ6ywn57EAidaG5lU277Yi56I85yon5lIT44gUig1VBNn0zxiG44gV44gz44g544gMihn1CgvYDMLZB3jFC2vZC2LVBIdJGyZOQjJPJllJGzxJGOZJGABJGytJGOVVViK','5RoO5ywL5AsX5Pwx77Yi5QYHihrPy2SG44gN5yAn6kMM6kgm77YjoIbZzxnZAw9Upq','z2v0twLUDxrLCW','ywXYzwfKEv9UB3rPzMLLza','ioAwH+MDOJ0','s0X1qKO','C2vZC2LVBG','5RIS5A6A5zMO44gU5A++54wN77Yi6iEQ5BIT44gU6kgm5PwW77Yj44ks5zcR44g+44gQ44ge77Yi5y+x44gr5OMl44gm44co55UJ552J44gm5Bgf44gQ44ge44cp44gO44co5RIS44kk5PA544gm5Aok44km44gM44ge44kl44cp44ks5yY65yIL44gN44gn44gQ44ge77Yj','z2v0','AgD1ALK','C2vZC2LVBKv4Axn0CW','5AsX5yQ544gx44gF','5PYQ6ywn57EA55UJ5P+7','CMvHzfn5BMm','5RoO5ywLoIbZzxnZAw9Upq','C2vSzMHLywWUBg9N','zNn0yxrtEw5J','D3jPDgvgAwXL','iowVVUIXOEwKLJ0','BgfZDf9NB25Lx3jLy29YzgvKx2v2zw50x3rZ','Bw9UC3rLCIa','Dg11Ea','44oE44o844k4','8j+AQcdMS6JLHAxKUk3MRAi6ioAoIoAOQEocKUAeJ+wrS+obMEocI+IQNUocKUwqQ+ocGo+8Ia','5zU65A6A44og44oZ44ox44oS44gR5lIa6iE044gx44gQ44ge','ru5pru5u','C3vWzxj2AxnVCI1ZDgf0ztOG54Q25Owl44ov44kH44kK44oR44gm5Aok44km44gM44ge44gF44gU44gNia','C2ToBeK','55UJ552JihnLC3nPB24G','z292zxjUB3iUBg9N'];a0a=function(){return dm;};return a0a();}function ze(a){return new Promise(c=>setTimeout(c,a));}async function Ft(a){const cH=a0bP;await a0bM[cH(0x152)](a0bN[cH(0x1c8)](E),{'recursive':!0x0});let c=Date['now']()+Lt;for(;;){try{if(cH(0x246)==='awSfj'){let i=o[cH(0x21e)](p)[cH(0x1fb)],o=r[cH(0x26d)](i,s),p=a[cH(0x17c)](o);u[cH(0x21b)](y,p,0x0,o,i-o);let r=p['toString'](cH(0x184))[cH(0x1f7)]('\x0a');return o<i?r[cH(0x1ac)](0x1):r;}else{await a0bM[cH(0x21f)](x,JSON[cH(0x145)]({'pid':process['pid'],'ts':Date['now']()}),{'flag':'wx'});break;}}catch(i){if(i?.['code']!==cH(0x171))throw i;}let d=!0x1;try{if('PRwaO'===cH(0x28c))return d['includes'](e);else{let p=JSON[cH(0x14d)](await a0bM[cH(0x1f5)](x,cH(0x184)));d=typeof p?.[cH(0x1b3)]==cH(0x1ea)&&(!kt(p[cH(0x1b3)])||Date[cH(0x24a)]()-Number(p['ts']??0x0)>bt);}}catch{try{let r=await a0bM[cH(0x14b)](x);d=Date[cH(0x24a)]()-r[cH(0x1d5)]>bt;}catch{}}if(d){if(cH(0x1d1)===cH(0x1d1)){let u=x+'.stale.'+process['pid'];await a0bM['rename'](x,u)[cH(0x146)](()=>{}),await a0bM['rm'](u,{'force':!0x0})[cH(0x146)](()=>{});continue;}else return cH(0x1f4)+c[cH(0x23d)]+'\x20が\x20'+f[cH(0x28e)]+'('+i['ts']+cH(0x27a);}if(Date[cH(0x24a)]()>c)throw new Error(cH(0x1bd)+x+cH(0x27f)+Lt+cH(0x23c));await ze(0x5+Math['random']()*0x14);}try{return await a();}finally{try{JSON[cH(0x14d)](await a0bM['readFile'](x,cH(0x184)))?.[cH(0x1b3)]===process[cH(0x1b3)]&&await a0bM['rm'](x,{'force':!0x0});}catch{}}}function Ke(c,d,f){const cI=a0bP;let p={'version':0x1,'cursor_ts':c[cI(0x1eb)],'monsters':{...c[cI(0x185)]}};d['cursor_ts']!==f[cI(0x1eb)]&&(p[cI(0x1eb)]=f[cI(0x1eb)]);let u=new Set([...Object[cI(0x257)](d['monsters']),...Object[cI(0x257)](f[cI(0x185)])]);for(let y of u){let N=d['monsters'][y],O=f['monsters'][y];JSON[cI(0x145)](N)!==JSON[cI(0x145)](O)&&(O===void 0x0?delete p['monsters'][y]:p[cI(0x185)][y]=O);}return p;}async function Dt(a,c){await Ft(async()=>{const cJ=a0c;let d=await D();if(!d['ok'])throw new Error(cJ(0x26f)+E+cJ(0x27e)+d[cJ(0x1fc)]+':\x20'+d[cJ(0x28f)]+')。ここで書くと触っていない\x20entry\x20が全部消えます');let f=F[cJ(0x216)](c??a),p=f?Ke(d['state'],f,a):a,u=JSON['stringify'](p,null,0x2)+'\x0a',y=Je();try{if(cJ(0x198)!==cJ(0x18a))await a0bM[cJ(0x21f)](y,u,cJ(0x184)),await a0bM[cJ(0x181)](y,E);else return{'ok':!0x1,'kind':cJ(0x16e),'detail':d(c)};}catch(O){throw await a0bM['rm'](y,{'force':!0x0})[cJ(0x146)](()=>{}),O;}F[cJ(0x1a9)](a,structuredClone(a));});}function Ct(a,c,d){const cK=a0bP;return{...a,'monsters':{...a[cK(0x185)],[c]:{...a['monsters'][c],'last_injected_event_ts':d,'awaiting_reaction':!0x0}}};}function Ht(a,c,d,f){const cL=a0bP;let i=a['monsters'][c];return{...a,'monsters':{...a[cL(0x185)],[c]:{...i,'last_injected_event_ts':i?.[cL(0x1b1)]??f,'awaiting_reaction':i?.[cL(0x25f)]??!0x1,'reverse_injected_supervisor':d}}};}function Ut(a,c,d){const cM=a0bP;let f=a['monsters'][c];return{...a,'monsters':{...a[cM(0x185)],[c]:{...f,'last_injected_event_ts':f?.[cM(0x1b1)]??d,'awaiting_reaction':f?.[cM(0x25f)]??!0x1,'last_gone_recorded_event_ts':d}}};}function K(a,c){const cN=a0bP;return a?.[cN(0x1bb)]??c;}function X(a,c,d){const cO=a0bP;let f=a[cO(0x185)][c];return{...a,'monsters':{...a[cO(0x185)],[c]:{...f,'last_injected_event_ts':f?.[cO(0x1b1)]??d,'awaiting_reaction':f?.[cO(0x25f)]??!0x1,'last_scanned_event_ts':d}}};}function Bt(a,c){const cP=a0bP;let d=a[cP(0x185)][c];return!d||!d[cP(0x25f)]?a:{...a,'monsters':{...a['monsters'],[c]:{...d,'awaiting_reaction':!0x1}}};}function W(a,c){return{...a,'cursor_ts':c};}function Vt(a){const cQ=a0bP;let c=a[cQ(0x1eb)],d=Object[cQ(0x260)](a['monsters'])[cQ(0x18c)]((o,p)=>{const cR=cQ;let u=p[cR(0x1bb)];return u===void 0x0?o:o===null||u>o?u:o;},null),f=Object[cQ(0x1f9)](a['monsters'])[cQ(0x1c5)](([,i])=>i[cQ(0x25f)]||i[cQ(0x1ae)]||d!==null&&i[cQ(0x1bb)]!==void 0x0&&i[cQ(0x1bb)]<d||c===null||i[cQ(0x221)]!==void 0x0&&i['last_gone_recorded_event_ts']>c?!0x0:i[cQ(0x1b1)]>c);return f[cQ(0x1d6)]((i,o)=>i[0x1][cQ(0x1b1)]<o[0x1][cQ(0x1b1)]?0x1:-0x1),{...a,'monsters':Object[cQ(0x276)](f['slice'](0x0,Ce))};}function Xe(c,d){const cS=a0bP;let f=new Map(),o=[];for(let p of c){let u=d[cS(0x1ec)](p[cS(0x1fe)]);if(!u[cS(0x1e1)]){o[cS(0x1a6)](p);continue;}let y=f['get'](u[cS(0x1e1)])??{'session':u[cS(0x1e1)],'items':[]};y['items']['push']({'event':p,'target':u}),f[cS(0x1a9)](u[cS(0x1e1)],y);}return{'groups':[...f[cS(0x260)]()],'unassigned':o};}function We(a,c){const cT=a0bP;if(P(a)){if(cT(0x217)!=='hgujY')d[cT(0x292)](c);else{let i=b(a);return c(cT(0x225)+i[cT(0x155)](cT(0x1db))+cT(0x1a8)+JSON['stringify'](a)),!0x1;}}let d=Et(a);return d['ok']?!0x0:(c(cT(0x1ee)+d[cT(0x18f)]+'\x20/\x20文面='+JSON[cT(0x145)](a)),!0x1);}function qe(c,d){const cU=a0bP;let f=[],p=[],u=new Set();for(let y of c){if(u[cU(0x187)](y[cU(0x28e)][cU(0x1fe)]))continue;u[cU(0x166)](y[cU(0x28e)]['monsterId']);let N=d[y[cU(0x28e)][cU(0x1fe)]]?.['last_gone_recorded_event_ts'],O=N===void 0x0?NaN:Date['parse'](N);if(Number[cU(0x1d0)](O)&&y[cU(0x28e)]['tsMs']<=O){if(cU(0x267)===cU(0x1cb))return new d('SUPERVISOR_STATE_UNREADABLE:\x20'+f+cU(0x186)+N+')');else{p[cU(0x1a6)]({'monsterId':y['event']['monsterId'],'shortId':y['target'][cU(0x23d)],'recordedTs':N});continue;}}f['push'](y);}return{'record':f,'skipped':p};}async function Ze(c,d,f){const cV=a0bP;let {record:o,skipped:p}=qe(c[cV(0x253)],f['monsters']),u=f;for(let y of o)await d['recordSupervisorGone'](y[cV(0x28e)],y[cV(0x16d)]),u=Ut(u,y[cV(0x28e)][cV(0x1fe)],y['event']['ts']);return{'state':u,'suppressed':p['length']};}function Qe(c,d,f){const cW=a0bP;let u=new Map(),y=new Map(),N=new Set();for(let {event:O,target:S}of c){if(N[cW(0x187)](O[cW(0x1fe)]))continue;N[cW(0x166)](O[cW(0x1fe)]);let T=a0=>{const cX=cW;y[cX(0x1a9)](O['monsterId'],{'monsterId':O[cX(0x1fe)],'shortId':S[cX(0x23d)],'reason':a0});};if(f[O['monsterId']]?.[cW(0x1ae)]===d){T(cW(0x211));continue;}if(S[cW(0x243)]['length']===0x0){T(cW(0x193));continue;}if(S[cW(0x243)]===d){T(cW(0x1cd));continue;}u[cW(0x1a9)](O[cW(0x1fe)],{'monsterId':O['monsterId'],'shortId':S[cW(0x23d)],'tmuxSession':S[cW(0x243)],'supervisorSession':d,'eventTs':O['ts']});}return{'targets':[...u[cW(0x260)]()],'skipped':[...y['values']()]};}function tn(a,c){const cY=a0bP;let d=It(a);return d['ok']?!0x0:(c(cY(0x200)+d[cY(0x18f)]+cY(0x172)+JSON[cY(0x145)](a)),!0x1);}async function en(d,f,u,y){const cZ=a0bP;let N={'state':u,'injected':0x0,'blocked':0x0,'failed':0x0,'failedMonsters':[]},{targets:O,skipped:S}=Qe(d[cZ(0x253)],d[cZ(0x214)],u[cZ(0x185)]);N[cZ(0x27d)]+=S[cZ(0x1f3)];for(let a0 of S){if(a0['reason']===cZ(0x211))continue;let a1=a0[cZ(0x18f)]===cZ(0x193)?cZ(0x241):cZ(0x204);f['log'](cZ(0x17b)+a0[cZ(0x23d)]+cZ(0x147)+d[cZ(0x214)]+'\x20—\x20'+a1);}for(let a2 of O){if(cZ(0x1e9)===cZ(0x1e9)){let a3=wt({'supervisorSession':d[cZ(0x214)],'subordinateSession':a2[cZ(0x243)],'detectedAt':y});if(a3===null){if(cZ(0x238)===cZ(0x238)){f[cZ(0x259)](cZ(0x278)+a2[cZ(0x23d)]+'\x20supervisor_session='+JSON[cZ(0x145)](d['session'])+cZ(0x273)+JSON[cZ(0x145)](a2[cZ(0x243)])+'(session\x20名が可変部の\x20allow-list\x20を通らないか、検知時刻が読めない)'),N[cZ(0x27d)]+=0x1;continue;}else{if(u(y)){let a8=a6(a7);return a8('🚨\x20注入中止:\x20授権を意味する語を含む('+a8[cZ(0x155)]('\x20/\x20')+')\x20/\x20文面='+a9['stringify'](aa)),!0x1;}let a7=a1(a2);return a7['ok']?!0x0:(a3(cZ(0x1ee)+a7['reason']+'\x20/\x20文面='+a4[cZ(0x145)](a5)),!0x1);}}if(!tn(a3,f[cZ(0x259)])){if(cZ(0x196)==='MMghv'){N[cZ(0x27d)]+=0x1;continue;}else{let a8=[];for(let a9 of a3){let aa=y(a9);aa&&a8[cZ(0x1a6)](aa);}return a8[cZ(0x1f3)]===0x0?null:''+u+a8[cZ(0x155)]('\u3001')+a2;}}let a4;try{a4=await f[cZ(0x218)](a2[cZ(0x243)]);}catch(a8){if('VChiJ'===cZ(0x199))return{'ok':!0x0,'state':d(f)};else{f['log'](cZ(0x1dd)+a2['tmuxSession']+'\x20monster='+a2[cZ(0x23d)]+cZ(0x1e2)+String(a8)),N[cZ(0x16a)]+=0x1,N[cZ(0x1dc)]['push'](a2['monsterId']);continue;}}if(!a4){f[cZ(0x259)]('逆向き注入見送り:\x20配下\x20session='+a2[cZ(0x243)]+cZ(0x192)+a2[cZ(0x23d)]+cZ(0x1c7)),N[cZ(0x27d)]+=0x1;continue;}let a5=await f['inject'](a2[cZ(0x243)],a3);if(!a5['ok']){f[cZ(0x259)]('逆向き注入失敗(次\x20tick\x20で再試行):\x20session='+a2[cZ(0x243)]+cZ(0x25e)+a2[cZ(0x23d)]+'\x20'+(a5['error']??'')),N['failed']+=0x1,N['failedMonsters'][cZ(0x1a6)](a2['monsterId']);continue;}N[cZ(0x1f2)]=Ht(N[cZ(0x1f2)],a2[cZ(0x1fe)],a2[cZ(0x1e1)],a2['eventTs']),N[cZ(0x209)]+=0x1,f[cZ(0x259)](cZ(0x1e3)+d[cZ(0x214)]+'\x20の不在を配下\x20monster='+a2['shortId']+cZ(0x15f)+a2[cZ(0x243)]+cZ(0x15e)+JSON['stringify'](a3));}else f=f[cZ(0x14a)](S,'r');}return N;}var Gt=a0bP(0x21a),nn=/^(?:\S+ )?(?:🚨 )?未配線監査\((\d{4}-\d{2}-\d{2})\)/;function sn(a){const d0=a0bP;return a[d0(0x1bf)]()[d0(0x1ac)](0x0,0xa);}function rn(a){const d1=a0bP;return a[d1(0x1c5)](c=>c['status']===d1(0x1e8)&&!c[d1(0x1e1)]&&!c[d1(0x1ff)])[d1(0x19b)](c=>({'shortId':c[d1(0x23d)],'spawnedAt':c[d1(0x1b7)]}));}function Yt(a){let c=null;for(let d of a){let f=d['match'](nn);f&&(c=f[0x1]);}return c;}function on(a,c){return a!==c;}function an(a,c){const d2=a0bP;if(a['length']===0x0)return Gt+'('+c+d2(0x20e);let d=a[d2(0x19b)](f=>f[d2(0x23d)]+d2(0x20b)+f['spawnedAt']+')')[d2(0x155)](d2(0x1db));return'🚨\x20'+Gt+'('+c+d2(0x1af)+a[d2(0x1f3)]+d2(0x1ad)+d+'\x20—\x20supervisor_session\x20未記録のため、この\x20monster\x20が止まっても誰にも通知されない(spawn\x20時に\x20supervisorSession\x20を渡すこと)';}function cn(a,c){const d3=a0bP;let d=sn(c);if(!on(a[d3(0x1d2)](),d))return 0x0;let f=rn(a[d3(0x142)]());return a['log'](an(f,d)),f[d3(0x1f3)];}function un(a,c){const d4=a0bP;return d4(0x1f4)+c[d4(0x23d)]+d4(0x24c)+a[d4(0x28e)]+'('+a['ts']+')\x20—\x20supervisor_session\x20未記録のため注入先が無く、この停止は誰にも通知されない(spawn\x20時に\x20supervisorSession\x20を渡すこと)';}function a0c(a,b){a=a-0x13f;const c=a0a();let d=c[a];if(a0c['QFJycM']===undefined){var e=function(i){const j='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let l='',m='';for(let n=0x0,o,p,q=0x0;p=i['charAt'](q++);~p&&(o=n%0x4?o*0x40+p:p,n++%0x4)?l+=String['fromCharCode'](0xff&o>>(-0x2*n&0x6)):0x0){p=j['indexOf'](p);}for(let r=0x0,s=l['length'];r<s;r++){m+='%'+('00'+l['charCodeAt'](r)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(m);};a0c['TAwuSM']=e,a0c['FXTwHE']={},a0c['QFJycM']=!![];}const f=c[0x0],g=a+f,h=a0c['FXTwHE'][g];return!h?(d=a0c['TAwuSM'](d),a0c['FXTwHE'][g]=d):d=h,d;}async function fn(c,d){const d5=a0bP;let f=c[d5(0x253)]['map'](O=>O[d5(0x16d)][d5(0x23d)])[d5(0x155)](','),p;try{p=await d[d5(0x218)](c[d5(0x214)]);}catch(O){return d[d5(0x259)]('🚨\x20セッション実在を判定できません\x20session='+c[d5(0x214)]+d5(0x25e)+f+d5(0x24f)+String(O)),'skipped';}if(!p)return d['log'](d5(0x28a)+c['session']+d5(0x19e)+f+'\x20→\x20監督宛には送らない(配下への逆向き通知は別行に出る)'),d5(0x17d);if(await d[d5(0x14f)](c[d5(0x214)]))return d[d5(0x259)](d5(0x13f)+c[d5(0x214)]+'\x20が実行中\x20monster='+f+d5(0x207)),d5(0x20d);let u=c[d5(0x253)]['map'](S=>({'shortId':S[d5(0x16d)][d5(0x23d)],'event':S[d5(0x28e)]['event'],'ts':S[d5(0x28e)]['ts']})),y=Tt(u);if(y===null)return d[d5(0x259)](d5(0x27b)+f),'skipped';if(!We(y,d[d5(0x259)]))return d5(0x1a5);let N=await d[d5(0x24b)](c[d5(0x214)],y);return N['ok']?(d[d5(0x259)](d5(0x21c)+c[d5(0x214)]+d5(0x25e)+f+d5(0x212)+JSON['stringify'](y)),d5(0x141)):(d[d5(0x259)](d5(0x20f)+c[d5(0x214)]+'\x20'+(N['error']??'')),d5(0x16a));}function ln(a,c,d){const d6=a0bP;let f=c[d6(0x1f3)]>0x0?c[c[d6(0x1f3)]-0x1]['ts']:new Date()[d6(0x1bf)]();return d[d6(0x259)](d6(0x190)+f+d6(0x24e)),{'state':W(a,f),'initialized':!0x0,'injected':0x0,'skippedBusy':0x0,'gone':0x0,'unassigned':0x0,'unwired':0x0,'failed':0x0,'suppressed':0x0,'reacted':0x0,'blocked':0x0,'reverseInjected':0x0,'reverseBlocked':0x0,'reverseFailed':0x0,'goneRecordSuppressed':0x0};}function pn(a){const d7=a0bP;return a[d7(0x209)]+a[d7(0x203)]+a[d7(0x17d)]+a['unassigned']+a['failed']+a[d7(0x19d)]+a['reacted']+a['blocked'];}function Jt(a){const d8=a0bP;let c=a[d8(0x1c3)]>0x0||a[d8(0x1ca)]>0x0;if(!a[d8(0x1bc)]&&pn(a)===0x0&&!c)return null;let d=d8(0x19f)+a[d8(0x209)]+d8(0x250)+a['skippedBusy']+'\x20supervisor_gone='+a['gone']+d8(0x220)+a[d8(0x1c3)]+'\x20不達='+a['failed']+'\x20抑止='+a[d8(0x19d)]+d8(0x180)+a[d8(0x1e7)]+d8(0x1c6)+a[d8(0x27d)]+'\x20未配線='+a[d8(0x1ca)]+d8(0x1ce)+a[d8(0x1d4)]+d8(0x16c)+a[d8(0x1e6)]+d8(0x261)+a[d8(0x242)]+d8(0x1fd)+a[d8(0x230)];return c?d+d8(0x1b8)+a[d8(0x1c3)]+d8(0x15b)+a['unwired']+'\x20体)\x20—\x20監視網に穴が開いている':d;}function dn(a,c){const d9=a0bP;let d=a[d9(0x18f)]==='awaiting_reaction'?d9(0x140):d9(0x157);return d9(0x263)+c+d9(0x25c)+a[d9(0x1b0)]+d9(0x18b)+a[d9(0x182)]+'\x20'+a['latestTs']+')—\x20'+d;}async function zt(a0,a1){const da=a0bP;let a2=new Date(),a3=cn(a1,a2),a4=a1[da(0x17f)]();if(a0['cursor_ts']===null)return{...ln(a0,a4,a1),'unwired':a3};let a5=Date[da(0x14d)](a0[da(0x1eb)]),a6=At(a4,{'cursorMs':Number[da(0x1d0)](a5)?a5:null,'entries':a0['monsters']}),a7=a0;for(let ad of a6[da(0x1e7)])a7=Bt(a7,ad),a1[da(0x259)](da(0x1a4)+a1[da(0x1ec)](ad)[da(0x23d)]+da(0x247));let {groups:a8,unassigned:a9}=Xe(a6[da(0x1d3)],a1),aa=new Set(),ab={'injected':0x0,'skippedBusy':0x0,'gone':0x0,'failed':0x0,'blocked':0x0,'reverseInjected':0x0,'reverseBlocked':0x0,'reverseFailed':0x0,'goneRecordSuppressed':0x0};for(let af of a8){let ag=await fn(af,a1);if(ag===da(0x141)){if(da(0x1de)!==da(0x1de)){let ai=a2[da(0x1c3)]>0x0||a3[da(0x1ca)]>0x0;if(!a4[da(0x1bc)]&&a5(a6)===0x0&&!ai)return null;let aj='tick\x20完了:\x20注入='+a7[da(0x209)]+'\x20busy待ち='+a8[da(0x203)]+'\x20supervisor_gone='+a9[da(0x17d)]+da(0x220)+aa['unassigned']+'\x20不達='+ab[da(0x16a)]+da(0x252)+ac['suppressed']+da(0x180)+ad[da(0x1e7)]+da(0x1c6)+af[da(0x27d)]+da(0x188)+ag[da(0x1ca)]+da(0x1ce)+ah[da(0x1d4)]+da(0x16c)+ai[da(0x1e6)]+da(0x261)+aj['reverseFailed']+da(0x1fd)+ak[da(0x230)];return ai?aj+da(0x1b8)+al[da(0x1c3)]+da(0x15b)+am['unwired']+da(0x17e):aj;}else{ab['injected']+=af[da(0x253)][da(0x1f3)];for(let ai of af[da(0x253)])a7=Ct(a7,ai[da(0x28e)][da(0x1fe)],ai[da(0x28e)]['ts']);continue;}}if(ag==='busy'){ab[da(0x203)]+=af[da(0x253)][da(0x1f3)];for(let aj of af[da(0x253)])aa[da(0x166)](aj[da(0x28e)][da(0x1fe)]);}else{if(ag==='gone'){ab[da(0x17d)]+=af[da(0x253)]['length'];let ak=await Ze(af,a1,a7);a7=ak[da(0x1f2)],ab[da(0x230)]+=ak[da(0x19d)];let al=await en(af,a1,a7,a2['toISOString']());a7=al[da(0x1f2)],ab['reverseInjected']+=al[da(0x209)],ab[da(0x1e6)]+=al[da(0x27d)],ab[da(0x242)]+=al[da(0x16a)];for(let am of al['failedMonsters'])aa[da(0x166)](am);}else{if(ag===da(0x16a)){if('KoOZf'!==da(0x1b4)){ab[da(0x16a)]+=af['items'][da(0x1f3)];for(let ao of af[da(0x253)])aa[da(0x166)](ao[da(0x28e)][da(0x1fe)]);}else{let aq=o(p[da(0x23d)]),ar=r(s['ts']);return!aq||!ar||!a0(af[da(0x28e)])?null:da(0x222)+aq+'\x20が\x20'+y[da(0x28e)]+'('+ar+')';}}else ag===da(0x1a5)&&(ab[da(0x27d)]+=af[da(0x253)]['length']);}}}if(a6['maxScannedMs']!==null){if('msbKc'===da(0x1da))return c?.[da(0x153)]===da(0x16b);else{let ar=new Date(a6['maxScannedMs'])[da(0x1bf)]();for(let av of a6[da(0x19d)])aa['has'](av[da(0x1fe)])||a1['log'](dn(av,a1[da(0x1ec)](av[da(0x1fe)])[da(0x23d)]));for(let aw of a9)aa[da(0x187)](aw[da(0x1fe)])||a1[da(0x259)](un(aw,a1['readTarget'](aw['monsterId'])));let as=new Set([...a6['notify'][da(0x19b)](ax=>ax[da(0x1fe)]),...a6['suppressed'][da(0x19b)](ax=>ax[da(0x1fe)]),...a6[da(0x1e7)],...a9[da(0x19b)](ax=>ax['monsterId'])]);for(let ax of as)aa[da(0x187)](ax)||(a7=X(a7,ax,ar));for(let ay of aa){let az=K(a7[da(0x185)][ay],a0[da(0x1eb)]);az!==null&&(a7=X(a7,ay,az));}let au=[...aa][da(0x19b)](aA=>K(a7[da(0x185)][aA],a0[da(0x1eb)]))[da(0x1c5)](aA=>aA!==null)[da(0x18c)]((aA,aB)=>aB<aA?aB:aA,ar);a7=W(a7,a0[da(0x1eb)]!==null&&au<a0[da(0x1eb)]?a0[da(0x1eb)]:au);}}let ac=a6[da(0x19d)][da(0x18c)]((aA,aB)=>aa[da(0x187)](aB[da(0x1fe)])?aA:aA+aB[da(0x1b0)],0x0);return{'state':Vt(a7),'initialized':!0x1,'injected':ab['injected'],'skippedBusy':ab[da(0x203)],'gone':ab[da(0x17d)],'unassigned':a9[da(0x1f3)],'unwired':a3,'failed':ab[da(0x16a)],'suppressed':ac,'reacted':a6[da(0x1e7)][da(0x1f3)],'blocked':ab[da(0x27d)],'reverseInjected':ab[da(0x1d4)],'reverseBlocked':ab['reverseBlocked'],'reverseFailed':ab[da(0x242)],'goneRecordSuppressed':ab[da(0x230)]};}var mn=0x200*0x400;function Kt(c){const db=a0bP;let d;try{d=a0bG['openSync'](c,'r');}catch{return db(0x168)===db(0x168)?[]:d!==e;}try{let i=a0bG[db(0x21e)](d)['size'],o=Math[db(0x26d)](i,mn),p=Buffer[db(0x17c)](o);a0bG[db(0x21b)](d,p,0x0,o,i-o);let u=p[db(0x262)]('utf8')[db(0x1f7)]('\x0a');return o<i?u[db(0x1ac)](0x1):u;}catch{if(db(0x244)===db(0x229)){let N=p(r[db(0x185)][s],c['cursor_ts']);N!==null&&(u=y(N,O,N));}else return[];}finally{a0bG[db(0x292)](d);}}function _n(){const dc=a0bP;return[v,k][dc(0x248)](a=>Rt(Kt(a)))['sort']((a,c)=>a[dc(0x232)]-c[dc(0x232)]);}function q(){const dd=a0bP;try{return JSON[dd(0x14d)](a0bG[dd(0x1e5)](tt,dd(0x184)))[dd(0x185)]??{};}catch{return{};}}function Xt(a,c){const df=a0bP;return{'shortId':typeof c?.[df(0x161)]==df(0x272)&&c[df(0x161)][df(0x1f3)]>0x0?c[df(0x161)]:a[df(0x1ac)](0x0,0x8),'supervisorSession':typeof c?.[df(0x269)]==df(0x272)&&c[df(0x269)][df(0x1f3)]>0x0?c[df(0x269)]:null,'tmuxSession':typeof c?.[df(0x191)]==df(0x272)?c[df(0x191)]:'','status':typeof c?.[df(0x1c0)]=='string'?c[df(0x1c0)]:'','unsupervised':c?.[df(0x1ff)]===!0x0,'spawnedAt':typeof c?.[df(0x205)]==df(0x272)?c[df(0x205)]:''};}function Sn(a=q()){return c=>{let {shortId:d,supervisorSession:f,tmuxSession:i}=Xt(c,a[c]);return{'shortId':d,'supervisorSession':f,'tmuxSession':i};};}function hn(a=q()){const dg=a0bP;return Object[dg(0x1f9)](a)[dg(0x19b)](([c,d])=>{let {shortId:f,supervisorSession:p,status:u,unsupervised:y,spawnedAt:N}=Xt(c,d);return{'shortId':f,'supervisorSession':p,'status':u,'unsupervised':y,'spawnedAt':N};});}function gn(){return Yt(Kt($));}async function Tn(a,c){const dh=a0bP;await ct(ut(a[dh(0x1fe)],c['tmuxSession'],dh(0x240),{'supervisor_session':c[dh(0x1e1)],'trigger_event':a[dh(0x28e)],'trigger_ts':a['ts']}));}function Wt(a){let c=q();return{'readEvents':_n,'readTarget':Sn(c),'readLedger':()=>hn(c),'lastUnwiredAuditDay':gn,'sessionExists':B,'sessionBusy':pt,'inject':async(d,f)=>{const di=a0c;if(di(0x16f)===di(0x235)){let o=e(f);o&&i[di(0x1a6)](o);}else{let o=await mt(d,f);return{'ok':o['ok'],'error':o[di(0x15c)]};}},'recordSupervisorGone':Tn,'log':a};}function Z(a){const dj=a0bP;process[dj(0x164)][dj(0x268)](new Date()[dj(0x1bf)]()+'\x20'+a+'\x0a'),at(a);}async function En(){const dk=a0bP;let a=await Pt(),c=await zt(a,Wt(Z));await Dt(c[dk(0x1f2)],a);let d=Jt(c);d!==null&&Z(d);}En()[a0bP(0x146)](a=>{const dl=a0bP;Z(dl(0x150)+(a instanceof Error?a['message']:String(a))),process[dl(0x277)](0x1);});
|
package/manifest.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"mcpId": "monster-orchestrator",
|
|
3
3
|
"name": "Monster Orchestrator",
|
|
4
|
-
"version": "3.
|
|
5
|
-
"description": "Claude Code CLI を独立サブプロセス(tmux session)として起動・送信・監視・停止する。v2.0.0 から ready signal polling / spawn_timeout / events.log NDJSON + ローテーション / Claude Code 5種 hook 注入 / 60秒ごとの session.log スナップショットに対応。v2.1 から spawn / stop / list は BlueLamp 認証(X-CLI-Token)必須で、皆伝(tenant_rank>=4)以上が利用可能。同時稼働数の上限値はここに書かない(実装更新で腐るため)——拒否する上限はサーバ側 quota が、ローカルの暴走 spawn backstop は `MONSTER_MAX_CONCURRENT`(正本は `resolveMaxConcurrent()`)が正本で、この 2 つは別物。v2.3 から agent 別の events 確認カーソル(state.json.cursors)と mark_events_seen tool を追加し、未確認 awaiting_input / stopped を能動把握できる(推奨運用: get_monster_events に agent_id を渡し、取得後 max_event_ts を mark_events_seen で記録)。v2.4.0 から backend を mikoto-company-api に完全移管(Phase 53C)。受講生 PC は BLUELAMP_CLI_TOKEN → bluelampportal /api/auth/exchange → RS256 JWT → mikoto-company-api /api/monster/* の 2 段構えで認証。主エージェントが複数 monster を並列制御する汎用オーケストレータ。",
|
|
4
|
+
"version": "3.4.0",
|
|
5
|
+
"description": "Claude Code CLI を独立サブプロセス(tmux session)として起動・送信・監視・停止する。v2.0.0 から ready signal polling / spawn_timeout / events.log NDJSON + ローテーション / Claude Code 5種 hook 注入 / 60秒ごとの session.log スナップショットに対応。v2.1 から spawn / stop / list は BlueLamp 認証(X-CLI-Token)必須で、皆伝(tenant_rank>=4)以上が利用可能。同時稼働数の上限値はここに書かない(実装更新で腐るため)——拒否する上限はサーバ側 quota が、ローカルの暴走 spawn backstop は `MONSTER_MAX_CONCURRENT`(正本は `resolveMaxConcurrent()`)が正本で、この 2 つは別物。v2.3 から agent 別の events 確認カーソル(state.json.cursors)と mark_events_seen tool を追加し、未確認 awaiting_input / stopped を能動把握できる(推奨運用: get_monster_events に agent_id を渡し、取得後 max_event_ts を mark_events_seen で記録)。v2.4.0 から backend を mikoto-company-api に完全移管(Phase 53C)。受講生 PC は BLUELAMP_CLI_TOKEN → bluelampportal /api/auth/exchange → RS256 JWT → mikoto-company-api /api/monster/* の 2 段構えで認証。主エージェントが複数 monster を並列制御する汎用オーケストレータ。v3.3.0 から memory governor(艦隊の赤信号ブレーキ)を同梱: 常駐 tick(scripts/governor-tick.sh・30 秒)が機体のメモリ圧力を ~/.claude/monsters/governor.json に書き、critical(red)のときだけ spawn_monster が `MEMORY_CRITICAL` で拒否し、scripts/governor-wait.sh が重い検査の開始を待つ。走行中は触らない。計器が無い/古いときは fail-open で従来どおり動き、その事実を footer / governor_notice に出す。設置は docs/governor-launchd.md。v3.4.0 から席の生死を「席の実在」でなく機能で実測する assess_liveness(直近活動・ロール読込・巡回 cron の 3 点すべて真で alive・tmux を見ない)と spawn 直後の着任確認 await_onboarding、4 値ログ ~/.claude/monsters/selfheal.log を追加(板 #608・夜間自己修復便の誤検知対策)。",
|
|
6
6
|
"category": "automation",
|
|
7
7
|
"tier": 2,
|
|
8
8
|
"tenantSlug": "yamatovision",
|
|
@@ -20,7 +20,9 @@
|
|
|
20
20
|
"MONSTER_MAX_CONCURRENT",
|
|
21
21
|
"MONSTER_DEFAULT_TIMEOUT_MIN",
|
|
22
22
|
"MONSTER_CLAUDE_BIN",
|
|
23
|
-
"MONSTER_HOOK_PATH"
|
|
23
|
+
"MONSTER_HOOK_PATH",
|
|
24
|
+
"MONSTER_GOVERNOR_RED_LEVEL",
|
|
25
|
+
"MONSTER_GOVERNOR_RED_PCT"
|
|
24
26
|
],
|
|
25
27
|
"externalApi": {
|
|
26
28
|
"enabled": true,
|
|
@@ -44,11 +46,11 @@
|
|
|
44
46
|
"tools": [
|
|
45
47
|
{
|
|
46
48
|
"name": "spawn_monster",
|
|
47
|
-
"description": "新しい monster(Claude Code CLI tmux session)を起動し初回 task を送信する。ready signal を 45 秒以内に検出できなければ spawn_timeout 応答を返す。BlueLamp backend の authorize-spawn で皆伝(tenant_rank>=4)以上であることと同時稼働 quota を enforce(超過は `QUOTA_EXCEEDED`)。上限の数値はここに書かない(実装更新で腐るため)。ローカル側の暴走 spawn backstop は `MONSTER_MAX_CONCURRENT`(正本は `resolveMaxConcurrent()`)で、サーバの拒否上限とは別物。なお `workdir` 引数は monster の cwd ではなく `--add-dir` で読み書き許可される追加 path。cwd は monster home(~/.claude/monsters/{id}/)に固定され、hook 設定の解決のためこの設計は意図的。`launcher` 引数(任意)でこの呼び出しだけ起動子を差し替えられる(許可形式は `claude` / `bluelampNN`(NN=1〜999・先頭ゼロなし)のみ・形式外や未導入の値は spawn を拒否しフォールバックしない・解決順序: launcher 引数 > MONSTER_CLAUDE_BIN > `claude`)。例: `bluelamp51`。番号とロールの対応は `list_tenant_agents` の「種別: オーケストレーター (bluelampNN)」欄が正本。ここに対応表を書かない(実装更新で腐るため)。"
|
|
49
|
+
"description": "新しい monster(Claude Code CLI tmux session)を起動し初回 task を送信する。ready signal を 45 秒以内に検出できなければ spawn_timeout 応答を返す。BlueLamp backend の authorize-spawn で皆伝(tenant_rank>=4)以上であることと同時稼働 quota を enforce(超過は `QUOTA_EXCEEDED`)。上限の数値はここに書かない(実装更新で腐るため)。ローカル側の暴走 spawn backstop は `MONSTER_MAX_CONCURRENT`(正本は `resolveMaxConcurrent()`)で、サーバの拒否上限とは別物。なお `workdir` 引数は monster の cwd ではなく `--add-dir` で読み書き許可される追加 path。cwd は monster home(~/.claude/monsters/{id}/)に固定され、hook 設定の解決のためこの設計は意図的。`launcher` 引数(任意)でこの呼び出しだけ起動子を差し替えられる(許可形式は `claude` / `bluelampNN`(NN=1〜999・先頭ゼロなし)のみ・形式外や未導入の値は spawn を拒否しフォールバックしない・解決順序: launcher 引数 > MONSTER_CLAUDE_BIN > `claude`)。例: `bluelamp51`。番号とロールの対応は `list_tenant_agents` の「種別: オーケストレーター (bluelampNN)」欄が正本。ここに対応表を書かない(実装更新で腐るため)。v3.3.0 から機体のメモリ圧力が critical(governor.json が red)のときは spawn せず `code: MEMORY_CRITICAL` / `refused: memory_critical` で拒否する(走行中は触らない・自動再試行しない・green に戻れば同じ引数で通る)。計器が無い/古いときは fail-open で spawn し `governor_notice` を添える。"
|
|
48
50
|
},
|
|
49
51
|
{
|
|
50
52
|
"name": "list_monsters",
|
|
51
|
-
"description": "稼働中・停止済みを含む全 monster を列挙し、未読イベント最新 5 件を添付する。手元の active tmux session を backend に報告して stale 検知も走らせる。"
|
|
53
|
+
"description": "稼働中・停止済みを含む全 monster を列挙し、未読イベント最新 5 件を添付する。手元の active tmux session を backend に報告して stale 検知も走らせる。v3.3.0 から応答に `governor` 欄(memory governor の state / level / available_pct / native_level / ts / age_sec)が付く。"
|
|
52
54
|
},
|
|
53
55
|
{
|
|
54
56
|
"name": "query_monster",
|
|
@@ -69,6 +71,14 @@
|
|
|
69
71
|
{
|
|
70
72
|
"name": "mark_events_seen",
|
|
71
73
|
"description": "agent ごとの events 確認カーソルを更新する(state.json.cursors[agent_id] = ts)。get_monster_events で取得した max_event_ts を渡すことで、次回呼び出しが「未確認イベントのみ」を返す。Stop hook (~/.claude/hooks/check-monster-events.sh) と協調し重複報告を防止。agent_id は呼び出し元 agent が自由に命名(例: tech-lead-main / tech-lead-mikoto-kaiden-XX)。"
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"name": "assess_liveness",
|
|
77
|
+
"description": "席の生死を「席の実在」でなく機能で実測する(板 #608)。tmux は見ない。① 直近活動(events.log 最終 ts と transcript mtime の新しい方が activity_window_min(既定 30 分)以内)② ロール読込(transcript に load_knowledge の成功結果が 1 件以上・Prompt not found / ❌ は失敗)③ 巡回 cron(assistant tool_use の CronCreate(recurring が false でないもの=省略も登録)件数 > CronDelete 件数)の 3 点すべて真で alive・1 つでも偽なら dead で理由を全部 reasons に列挙する。transcript 0 本は ②③ とも偽(fail-closed)。副作用は selfheal.log への 1 行だけ(stop / spawn はしない)。"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"name": "await_onboarding",
|
|
81
|
+
"description": "spawn 直後の席がロールを読めたか(着任)を transcript の poll で実測する(板 #608)。load_knowledge の結果が出た時点で即返す: 成功 → onboarded=true(keyword / ts)/失敗 → reason=role_load_failed(detail)/何も出ないまま timeout_sec(既定 120・上限 300)→ reason=timeout。既に成功済みなら即返す(冪等・短い timeout_sec で呼び直す運用でよい)。tmux は見ない。副作用は selfheal.log への 1 行(spawned(successor=…) / spawn_failed(…))だけで、再 spawn・障害メモは呼び出し側の責務。"
|
|
72
82
|
}
|
|
73
83
|
]
|
|
74
84
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "monster-orchestrator",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.4.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist-obf/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -13,7 +13,9 @@
|
|
|
13
13
|
"scripts/monster-stop-hook",
|
|
14
14
|
"scripts/check-monster-events.sh",
|
|
15
15
|
"scripts/supervisor-notify-tick.sh",
|
|
16
|
-
"scripts/monster-deathcheck"
|
|
16
|
+
"scripts/monster-deathcheck",
|
|
17
|
+
"scripts/governor-tick.sh",
|
|
18
|
+
"scripts/governor-wait.sh"
|
|
17
19
|
],
|
|
18
20
|
"engines": {
|
|
19
21
|
"node": ">=20"
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# memory governor の tick を回す薄いラッパ(launchd の ProgramArguments / systemd の ExecStart から呼ばれる)。
|
|
3
|
+
#
|
|
4
|
+
# 出典: docs/requirements-memory-governor-606.md §3.1
|
|
5
|
+
# 設置手順: docs/governor-launchd.md
|
|
6
|
+
#
|
|
7
|
+
# supervisor-notify-tick.sh と同形。launchd は PATH を /usr/bin:/bin:/usr/sbin:/sbin しか持たないので
|
|
8
|
+
# node を自力で探す。MONSTER_NODE_BIN で上書き可。引数(例: --loop)はそのまま tick 本体へ渡す。
|
|
9
|
+
set -euo pipefail
|
|
10
|
+
|
|
11
|
+
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
12
|
+
|
|
13
|
+
resolve_node() {
|
|
14
|
+
if [ -n "${MONSTER_NODE_BIN:-}" ]; then
|
|
15
|
+
printf '%s\n' "$MONSTER_NODE_BIN"
|
|
16
|
+
return
|
|
17
|
+
fi
|
|
18
|
+
for candidate in /opt/homebrew/bin/node /usr/local/bin/node; do
|
|
19
|
+
[ -x "$candidate" ] && printf '%s\n' "$candidate" && return
|
|
20
|
+
done
|
|
21
|
+
command -v node
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
NODE_BIN="$(resolve_node)"
|
|
25
|
+
if [ ! -x "$NODE_BIN" ]; then
|
|
26
|
+
echo "governor-tick: node が見つかりません(MONSTER_NODE_BIN で指定してください)" >&2
|
|
27
|
+
exit 1
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
# 配布物(dist-obf)を優先し、開発中の tsc 出力(dist)にフォールバックする
|
|
31
|
+
for entry in "$ROOT/dist-obf/governor-tick.js" "$ROOT/dist/governor-tick.js"; do
|
|
32
|
+
if [ -f "$entry" ]; then
|
|
33
|
+
exec "$NODE_BIN" "$entry" "$@"
|
|
34
|
+
fi
|
|
35
|
+
done
|
|
36
|
+
|
|
37
|
+
echo "governor-tick: tick 本体が見つかりません(npm run build または npm run build:obfuscated を実行してください)" >&2
|
|
38
|
+
exit 1
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
#!/usr/bin/env sh
|
|
2
|
+
# memory governor のブレーキ③: 重い工程(tsc / jest / vitest / build)の開始前に、機体が red なら待つ。
|
|
3
|
+
#
|
|
4
|
+
# 出典: docs/requirements-memory-governor-606.md §6(正本はこのファイル 1 本。各リポは呼ぶだけ)
|
|
5
|
+
#
|
|
6
|
+
# 依存: sh・sed・date +%s・sleep のみ(jq / python / node 不要・Git Bash で動く)。
|
|
7
|
+
# ⛔ bash 拡張(配列・[[・BASH_SOURCE・$'..')禁止。husky は `sh -e` で走らせる。
|
|
8
|
+
#
|
|
9
|
+
# 引数 : $1 = 工程名(表示用・例 acceptance-gate / "backend tsc")
|
|
10
|
+
# env : MONSTER_GOVERNOR_FILE 状態ファイル(既定 $HOME/.claude/monsters/governor.json・テストの差し替え口)
|
|
11
|
+
# MONSTER_GOVERNOR_WAIT_MAX_SEC red で待つ上限秒(既定 600)
|
|
12
|
+
# MONSTER_GOVERNOR_POLL_SEC 再読の間隔秒(既定 10)
|
|
13
|
+
# MONSTER_GOVERNOR_STALE_SEC この秒数より古い epoch は計器停止と見なす(既定 120)
|
|
14
|
+
#
|
|
15
|
+
# 挙動(要件 §6 の表):
|
|
16
|
+
# 無い / level か epoch が読めない / stale → 「計器なし … fail-open で <工程名> を開始」1 行・exit 0
|
|
17
|
+
# level ≠ red → 何も出さない・exit 0
|
|
18
|
+
# red → 「待機」を出し POLL 秒ごとに再読。red 以外(stale 含む)で「復帰」exit 0
|
|
19
|
+
# WAIT_MAX 秒経っても red → 「未実行」を stderr へ・exit 1(⛔ 呼び出し側で `|| true` を付けない)
|
|
20
|
+
#
|
|
21
|
+
# 不変条件: 走っているものは触らない(I4)。黙って待たせない(I5・60 秒ごとに 1 行)。
|
|
22
|
+
# 判定に使う値は「red かどうか」だけ(I6)。green で自然に再開する(I7)。
|
|
23
|
+
|
|
24
|
+
NAME="${1:-heavy}"
|
|
25
|
+
FILE="${MONSTER_GOVERNOR_FILE:-$HOME/.claude/monsters/governor.json}"
|
|
26
|
+
MAX="${MONSTER_GOVERNOR_WAIT_MAX_SEC:-600}"
|
|
27
|
+
POLL="${MONSTER_GOVERNOR_POLL_SEC:-10}"
|
|
28
|
+
STALE="${MONSTER_GOVERNOR_STALE_SEC:-120}"
|
|
29
|
+
REPORT_EVERY=60
|
|
30
|
+
|
|
31
|
+
# 状態ファイルを読み、G_STATE(absent | unreadable | stale | ok)・G_LEVEL・G_PCT・G_WHY を立てる。
|
|
32
|
+
# JSON は 1 行に畳んでから sed で欄を抜く(整形済み / 1 行のどちらでも同じ結果)。
|
|
33
|
+
# "level" はキーの引用符ごと当てるので "native_level" / "native_level_name" には当たらない。
|
|
34
|
+
read_governor() {
|
|
35
|
+
G_STATE=""; G_LEVEL=""; G_PCT=""; G_WHY=""
|
|
36
|
+
if [ ! -f "$FILE" ]; then
|
|
37
|
+
G_STATE=absent; G_WHY="governor.json 無し"
|
|
38
|
+
return 0
|
|
39
|
+
fi
|
|
40
|
+
body="$(tr -d '\n\r' < "$FILE" 2>/dev/null)" || { G_STATE=unreadable; G_WHY="governor.json 読めない"; return 0; }
|
|
41
|
+
level="$(printf '%s' "$body" | sed -n 's/.*"level"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p')"
|
|
42
|
+
epoch="$(printf '%s' "$body" | sed -n 's/.*"epoch"[[:space:]]*:[[:space:]]*\([0-9][0-9]*\).*/\1/p')"
|
|
43
|
+
pct="$(printf '%s' "$body" | sed -n 's/.*"available_pct"[[:space:]]*:[[:space:]]*\([0-9][0-9]*\).*/\1/p')"
|
|
44
|
+
if [ -z "$level" ] || [ -z "$epoch" ]; then
|
|
45
|
+
G_STATE=unreadable; G_WHY="level か epoch が読めない"
|
|
46
|
+
return 0
|
|
47
|
+
fi
|
|
48
|
+
now="$(date +%s)"
|
|
49
|
+
age=$((now - epoch))
|
|
50
|
+
if [ "$age" -gt "$STALE" ]; then
|
|
51
|
+
G_STATE=stale; G_LEVEL="$level"; G_WHY="${age} 秒前"
|
|
52
|
+
return 0
|
|
53
|
+
fi
|
|
54
|
+
G_STATE=ok; G_LEVEL="$level"; G_PCT="$pct"
|
|
55
|
+
return 0
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
read_governor
|
|
59
|
+
if [ "$G_STATE" != "ok" ]; then
|
|
60
|
+
echo "governor: 計器なし(${G_WHY})— fail-open で ${NAME} を開始"
|
|
61
|
+
exit 0
|
|
62
|
+
fi
|
|
63
|
+
if [ "$G_LEVEL" != "red" ]; then
|
|
64
|
+
exit 0
|
|
65
|
+
fi
|
|
66
|
+
|
|
67
|
+
if [ -n "$G_PCT" ]; then pct_disp="${G_PCT}%"; else pct_disp="不明"; fi
|
|
68
|
+
echo "governor: red(critical・利用可 ${pct_disp})のため ${NAME} を待機(最大 ${MAX} 秒)"
|
|
69
|
+
|
|
70
|
+
start="$(date +%s)"
|
|
71
|
+
last_report="$start"
|
|
72
|
+
while :; do
|
|
73
|
+
sleep "$POLL"
|
|
74
|
+
read_governor
|
|
75
|
+
if [ "$G_STATE" != "ok" ] || [ "$G_LEVEL" != "red" ]; then
|
|
76
|
+
if [ "$G_STATE" = "ok" ]; then back="$G_LEVEL"; else back="$G_STATE"; fi
|
|
77
|
+
echo "governor: 復帰(${back})— ${NAME} を開始"
|
|
78
|
+
exit 0
|
|
79
|
+
fi
|
|
80
|
+
now="$(date +%s)"
|
|
81
|
+
elapsed=$((now - start))
|
|
82
|
+
if [ "$elapsed" -ge "$MAX" ]; then
|
|
83
|
+
echo "governor: red のため ${NAME} は未実行(${MAX} 秒待っても critical)" >&2
|
|
84
|
+
exit 1
|
|
85
|
+
fi
|
|
86
|
+
if [ $((now - last_report)) -ge "$REPORT_EVERY" ]; then
|
|
87
|
+
echo "governor: 待機中 … (経過 ${elapsed}s / ${MAX}s)"
|
|
88
|
+
last_report="$now"
|
|
89
|
+
fi
|
|
90
|
+
done
|