monster-orchestrator 3.2.7 → 3.3.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 +7 -5
- package/dist-obf/package.json +7 -5
- package/dist-obf/supervisor-notify-tick.js +1 -1
- package/manifest.json +7 -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.3.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。",
|
|
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",
|
package/dist-obf/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "monster-orchestrator",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.3.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-
|
|
42
|
-
"srcSha256": "
|
|
42
|
+
"builtFromCommit": "ddc848e",
|
|
43
|
+
"builtAt": "2026-09-03T03:25:08Z",
|
|
44
|
+
"srcSha256": "d56409011b348406d1c67b0971f4cae34d4224f74b013f2d536767d573936d8b"
|
|
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(0x268))/0x1+parseInt(bO(0x22c))/0x2*(-parseInt(bO(0x144))/0x3)+-parseInt(bO(0x151))/0x4+-parseInt(bO(0x27b))/0x5*(-parseInt(bO(0x1f3))/0x6)+parseInt(bO(0x1d3))/0x7*(-parseInt(bO(0x225))/0x8)+-parseInt(bO(0x215))/0x9+parseInt(bO(0x1d5))/0xa;if(e===c)break;else d['push'](d['shift']());}catch(f){d['push'](d['shift']());}}}(a0a,0x30ffe));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[bP(0x1cc)](Wt,'\x20')['replace'](/\s+/g,'\x20')[bP(0x1ed)]();}import*as a0bE from'node:os';import*as a0bF from'node:path';var C=process.env.MONSTER_MCP_ROOT,w=C&&C[a0bQ(0x26d)]>0x0?C:a0bF[a0bQ(0x17c)](a0bE[a0bQ(0x226)](),a0bQ(0x1f1),a0bQ(0x273)),et=a0bF[a0bQ(0x17c)](w,a0bQ(0x173)),gn=a0bF[a0bQ(0x17c)](w,a0bQ(0x154)),v=a0bF[a0bQ(0x17c)](w,a0bQ(0x269)),$=a0bF[a0bQ(0x17c)](w,a0bQ(0x1ef)),j=a0bF['join'](w,a0bQ(0x153)),nt=0xa*0x400*0x400,qt=0x5*0x400*0x400,T=a0bF[a0bQ(0x17c)](w,a0bQ(0x18b)),x=T+a0bQ(0x278),O=a0bF[a0bQ(0x17c)](w,a0bQ(0x238)),st=O+'.1',rt=0x2*0x400*0x400;function Zt(){const bR=a0bQ;try{if(a0bC['statSync'](O)[bR(0x272)]<rt)return;a0bC[bR(0x1c9)](O,st);}catch{}}function it(a){const bS=a0bQ;let c=new Date()[bS(0x1aa)]()+'\x20'+Q(a)+'\x0a';try{a0bC[bS(0x178)](a0bD[bS(0x191)](O),{'recursive':!0x0}),Zt(),a0bC[bS(0x25b)](O,c,bS(0x17a));}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(0x178)](w,{'recursive':!0x0}),a0bH[bT(0x19c)](v)||a0bH[bT(0x1d6)](v,'',bT(0x17a));}async function te(){const bU=a0bQ;try{if(bU(0x1e6)!==bU(0x21a)){if((await a0bI[bU(0x223)](v))[bU(0x272)]<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 bU(0x23d)!==bU(0x232)?!0x1:new e(o=>i(o,m));}try{return a0bH[bU(0x19c)](j)&&await a0bI[bU(0x23b)](j),a0bH[bU(0x19c)]($)&&await a0bI[bU(0x188)]($,j),await a0bI[bU(0x188)](v,$),await a0bI[bU(0x1f8)](v,'','utf8'),!0x0;}catch{return!0x1;}}async function at(a){const bV=a0bQ;Qt(),await te();let c=JSON[bV(0x26a)](a)+'\x0a';await a0bI[bV(0x185)](v,c,bV(0x17a));}function ct(a,c,d,f={}){const bW=a0bQ;return{'ts':new Date()[bW(0x1aa)](),'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 bX=a0bQ;let a=process.env.MONSTER_TMUX_BIN;if(a)return a;for(let c of['/opt/homebrew/bin/tmux','/usr/local/bin/tmux'])try{if(a0bL[bX(0x19c)](c))return c;}catch{}return bX(0x1b5);}var A=se(),L=class extends Error{},U=class extends L{constructor(a){const bY=a0bQ;super('tmux\x20を実行できません(bin='+A+bY(0x1ba)+String(a)),this['name']=bY(0x22d);}},H=class extends L{constructor(a){const bZ=a0bQ;super('tmux\x20サーバに繋がりません(bin='+A+bZ(0x1db)+(process.env.TMUX?'\u3042\u308A':'\u306A\u3057')+',\x20TMUX_TMPDIR='+(process.env.TMUX_TMPDIR??bZ(0x1b2))+bZ(0x27a)+a),this[bZ(0x270)]=bZ(0x257);}};function re(a){const c0=a0bQ;let c=a?.[c0(0x201)];return c===c0(0x16b)||c===c0(0x19e)||c==='EPERM';}function oe(a){const c1=a0bQ;let c=a,d=typeof c?.[c1(0x145)]==c1(0x1a5)&&c[c1(0x145)]['length']>0x0?c[c1(0x145)]:String(c?.[c1(0x20f)]??a);return ft(d)[c1(0x1ed)]();}var ie=/can't find session|session not found/i;function ae(a){const c2=a0bQ;return ie[c2(0x22a)](a)?c2(0x1f5):'unmeasurable';}var ce=/\x1b\[[0-9;?]*[A-Za-z]/g;function ft(a){const c3=a0bQ;return a[c3(0x1cc)](ce,'')['replace'](/\r/g,'');}async function B(a){const c4=a0bQ;try{return c4(0x16e)===c4(0x16e)?(await M(A,['has-session','-t',a]),!0x0):n['injected']+o[c4(0x179)]+p[c4(0x25a)]+r[c4(0x218)]+s[c4(0x147)]+a[c4(0x248)]+u[c4(0x1c8)]+y[c4(0x20e)];}catch(d){if(re(d))throw new U(d);let f=oe(d);if(ae(f)===c4(0x1f5))return!0x1;throw new H(f);}}var ue=/esc to interrupt/i;async function lt(a){const c5=a0bQ;let c=await dt(a,0x32);return c[c5(0x1ed)]()[c5(0x26d)]===0x0?!0x0:ue[c5(0x22a)](c);}async function dt(a,c){try{let {stdout:d}=await M(A,['capture-pane','-t',a,'-p','-S','-'+c]);return ft(d);}catch{return'';}}function fe(a){const c6=a0bQ;return Math[c6(0x175)](0x64+Math[c6(0x219)](a/0x4),0x5dc);}function le(a){const c7=a0bQ;return a[c7(0x1cc)](/\n+$/,'');}async function pt(a,c){const c8=a0bQ;try{let d=le(c);await M(A,['send-keys','-t',a,'-l',d]);let f=fe(d[c8(0x26d)]);return await new Promise(h=>setTimeout(h,f)),await M(A,[c8(0x230),'-t',a,c8(0x1fc)]),await new Promise(h=>setTimeout(h,0xc8)),await M(A,['send-keys','-t',a,c8(0x1fc)]),{'ok':!0x0,'bytes':Buffer[c8(0x142)](d,c8(0x17a))};}catch(h){return{'ok':!0x1,'bytes':0x0,'error':h?.[c8(0x145)]||h?.[c8(0x20f)]||c8(0x1f2)};}}var G=[a0bQ(0x1ea),a0bQ(0x204)],_t=a0bQ(0x25f),de='\u3002\u72B6\u614B\u3092\u78BA\u8A8D\u3057\u3066\u5BFE\u5FDC\u305B\u3088',St='A-Za-z0-9._@+-';function pe(a){const c9=a0bQ;if(typeof a!=c9(0x1a5))return null;let c=a[c9(0x158)]()[c9(0x1cc)](/[^0-9a-f]/g,'');return c[c9(0x26d)]===0x0?null:c[c9(0x1b7)](0x0,0xc);}function me(a){const ca=a0bQ;return typeof a=='string'&&G[ca(0x20d)](a);}function ht(a){const cb=a0bQ;if(typeof a!='string')return null;let c=Date[cb(0x172)](a);if(!Number['isFinite'](c))return null;let d=new Date(c),f=String(d[cb(0x1af)]())[cb(0x19b)](0x2,'0'),h=String(d[cb(0x205)]())[cb(0x19b)](0x2,'0');return f+':'+h;}function _e(a){const cc=a0bQ;let c=pe(a[cc(0x1ec)]),d=ht(a['ts']);return!c||!d||!me(a[cc(0x24b)])?null:'monster\x20'+c+'\x20が\x20'+a[cc(0x24b)]+'('+d+')';}function gt(a){const cd=a0bQ;let c=[];for(let d of a){if(cd(0x260)!==cd(0x243)){let f=_e(d);f&&c[cd(0x234)](f);}else return c[cd(0x172)](f[cd(0x242)](h,cd(0x17a)))[cd(0x273)]??{};}return c['length']===0x0?null:''+_t+c['join']('\u3001')+de;}var Se=new RegExp(a0bQ(0x1a0)),he=['\u627F\u8A8D','\u627F\u8AFE','\u4E86\u627F','\u8A31\u53EF','\u8A8D\u53EF','\u8A31\u8AFE','\u88C1\u5B9A','\u6C7A\u88C1','GO','\u30B4\u30FC','\u30DE\u30FC\u30B8','\u30BF\u30B0',a0bQ(0x210),'\u30C7\u30D7\u30ED\u30A4','\u672C\u756A','\u53EF',a0bQ(0x166),a0bQ(0x26b),a0bQ(0x233),a0bQ(0x1ca),'\u304B\u307E\u308F\u306A\u3044','\u3057\u3066\u304F\u3060\u3055\u3044',a0bQ(0x159),a0bQ(0x174),/\b(?:ok|okay|go|approve[ds]?|approval|authoriz(?:e|ed|ation)|merge[ds]?|tag|release|deploy|greenlight)\b/i];function b(a){const cf=a0bQ;let c=[];for(let d of he){if(cf(0x24a)===cf(0x24a)){if(typeof d==cf(0x1a5)){a['includes'](d)&&c[cf(0x234)](d);continue;}let f=a['match'](d);f&&c[cf(0x234)](f[0x0]);}else return d[cf(0x1cc)](e,'\x20')['replace'](/\s+/g,'\x20')[cf(0x1ed)]();}return c;}function P(a){const cg=a0bQ;return b(a)[cg(0x26d)]>0x0;}function Tt(a){const ch=a0bQ;if(!Se[ch(0x22a)](a))return{'ok':!0x1,'reason':ch(0x176)};if(P(a))return{'ok':!0x1,'reason':ch(0x1e8)+b(a)[ch(0x17c)](ch(0x1f4))};if(vt(a)){let c=Y(a);return{'ok':!0x1,'reason':xt+':\x20'+c[ch(0x17c)](ch(0x1f4))};}return{'ok':!0x0};}var yt=0x40,ge=new RegExp('^['+St+a0bQ(0x200));function mt(a){const ci=a0bQ;if(typeof a!=ci(0x1a5))return null;let c=a[ci(0x1ed)]();return c[ci(0x26d)]===0x0||c['length']>yt||!ge['test'](c)?null:c;}function Et(a){const cj=a0bQ;let c=mt(a[cj(0x279)]),d=mt(a['subordinateSession']),f=ht(a[cj(0x1a7)]);return!c||!d||!f?null:_t+cj(0x1ff)+c+cj(0x1e0)+f+cj(0x25c)+c+'\x20と自席\x20'+d+cj(0x181);}var V='['+St+a0bQ(0x182)+yt+'}',Te=new RegExp('^【orchestrator】監督\x20session\x20'+V+a0bQ(0x249)+V+a0bQ(0x22e)+V+a0bQ(0x1ac)),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(0x239),'\u6B7B\u4EA1',a0bQ(0x1e7),a0bQ(0x1a3),a0bQ(0x1c5),'\u505C\u6B62\u3057\u305F','\u843D\u3061\u305F',a0bQ(0x21b),'\u5C45\u306A\u3044',a0bQ(0x1eb),'\u3044\u306A\u304F\u306A\u3063\u305F',a0bQ(0x20b),a0bQ(0x24d),a0bQ(0x259),'\u4E0D\u5728\u304C\u78BA\u5B9A',/\b(?:is|has|was|been)\s+(?:gone|dead|missing|terminated|absent)\b/i];function wt(a){const ck=a0bQ;let c=[];for(let d of xe){if(ck(0x17d)!==ck(0x17d))c=f[ck(0x172)](h);else{if(typeof d==ck(0x1a5)){a[ck(0x20d)](d)&&c[ck(0x234)](d);continue;}let h=a['match'](d);h&&c['push'](h[0x0]);}}return c;}function Ie(a){const cl=a0bQ;return wt(a)[cl(0x26d)]>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','\u3059\u308B\u3053\u3068','\u3055\u308C\u305F\u3057',a0bQ(0x169),a0bQ(0x1e3),'\u9858\u3046'],ke=[new RegExp(a0bQ(0x167)+Oe[a0bQ(0x17c)]('|')+a0bQ(0x264)+Re['join']('|')+')'),/やめ(?:よ|ろ|て|ること|なさい)/,/\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 cm=a0bQ;let c=[];for(let d of ke){if(cm(0x222)===cm(0x1dc))return{...i,'monsters':{...m[cm(0x273)],[d]:{...o[cm(0x273)][p],'last_injected_event_ts':r,'awaiting_reaction':!0x0}}};else{let h=a[cm(0x15c)](d);h&&c['push'](h[0x0]);}}return c;}function vt(a){const co=a0bQ;return Y(a)[co(0x26d)]>0x0;}var xt=a0bQ(0x18a);function It(a){const cp=a0bQ;if(P(a))return{'ok':!0x1,'reason':'授権を意味する語を含む:\x20'+b(a)[cp(0x17c)](cp(0x1f4))};if(vt(a)){let c=Y(a);return{'ok':!0x1,'reason':xt+':\x20'+c[cp(0x17c)](cp(0x1f4))};}return Ie(a)?{'ok':!0x1,'reason':cp(0x15d)+wt(a)[cp(0x17c)](cp(0x1f4))+cp(0x165)}:ve[cp(0x22a)](a)?{'ok':!0x1,'reason':cp(0x231)}:ye[cp(0x22a)](a)?Ee['test'](a)?we[cp(0x22a)](a)?Te[cp(0x22a)](a)?{'ok':!0x0}:{'ok':!0x1,'reason':cp(0x235)}:{'ok':!0x1,'reason':'\u6E2C\u5B9A\u5668\u306E\u5BFE\u7167\uFF08\u81EA\u5E2D\u306E\u884C\u6570\uFF09\u3092\u542B\u307E\u306A\u3044\uFF08\u53D7\u3051\u624B\u304C\u300E\u76E3\u7763\u304C\u5C45\u306A\u3044\u300F\u3068\u300E\u6E2C\u308A\u65B9\u304C\u58CA\u308C\u3066\u3044\u308B\u300F\u3092\u533A\u5225\u3067\u304D\u306A\u3044\uFF09'}:{'ok':!0x1,'reason':'\u53D7\u3051\u624B\u306B\u524D\u666F\u306E\x20tmux\x20list-sessions\x20\u3092\u6483\u305F\u305B\u308B\u884C\u52D5\u8981\u6C42\u3092\u542B\u307E\u306A\u3044\uFF08\u6CE8\u5165\u304C\u6E2C\u5B9A\u306E\u304D\u3063\u304B\u3051\u3067\u306F\u306A\u304F\u505C\u6B62\u306E\u6839\u62E0\u306B\u306A\u3063\u3066\u3057\u307E\u3046\uFF09'}:{'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 Ae=['user_prompt',a0bQ(0x1e5)],$e=a=>typeof a==a0bQ(0x266)&&a!==null&&!Array['isArray'](a);function Ne(c){const cq=a0bQ;let d=c[cq(0x1ed)]();if(d['length']===0x0)return null;let f;try{f=JSON[cq(0x172)](d);}catch{if(cq(0x190)!==cq(0x212))return null;else{let a0=m[cq(0x14b)](f)[cq(0x272)],a1=o[cq(0x175)](a0,p),a2=m[cq(0x221)](a1);h[cq(0x189)](c,a2,0x0,a1,a0-a1);let a3=a2['toString'](cq(0x17a))[cq(0x1a8)]('\x0a');return a1<a0?a3[cq(0x1b7)](0x1):a3;}}if(!$e(f))return null;let {ts:h,monster_id:m,event:o}=f;if(typeof h!=cq(0x1a5)||typeof m!=cq(0x1a5)||m[cq(0x26d)]===0x0||typeof o!='string')return null;let p=Date[cq(0x172)](h);return Number[cq(0x14a)](p)?{'ts':h,'tsMs':p,'monsterId':m,'event':o}:null;}function Ot(a){const cr=a0bQ;let c=[];for(let d of a){let f=Ne(d);f&&c[cr(0x234)](f);}return c;}function Me(a){return G['includes'](a);}function a0a(){const dl=['5OQr5Q2IoIbTB25ZDgvYpq','C3rVChbLza','z2v0twLUDxrLCW','ktOG5PYQ6ywn57EAia','5RoO5ywL6kAl6ycb44kkoIdMLOFPNAlJGPlNTytJGOhJGARJGyVJGApJGz8GBw9UC3rLCJ0','8j+AQca','wKroq0e','y2XVC2vtEw5J','5lIn5zYO44gN44gc44kl','DgLJAYdLROZKUOy6ioAZQowfPt0','Aw5JBhvKzxm','yMXVy2TLza','BwvZC2fNzq','44oQ44oQ44o844k5','Dg11EfnLC3nPB24','BefirMi','77Yi5QYHihrPy2SG44gN5yAn6kMM6kgm77Yj','CMv2zxjZzuzHAwXLza','mty1mJi0n0XADgHRAG','C3rHDhvZ','igj1C3NLVOxJGAe9','Dw5HC3nPz25Lza','zMXVB3i','q1DHqxC','5A2y5zYO44gx44gQ44ge','tK10BeG','DgLJAYdLPlhMLzC6ia','5y+n5B+C6kAZ5RISoIbTB25ZDgvYpq','ic8G5PAh6z2Ipq','C2v0','ywXSB2m','vwvUvKG','C3rHDa','5RoO5ywL5AsX5Pwx77Yi5QYHihrPy2SG44gN5yAn6kMM6kgm77YjoIbZzxnZAw9Upq','mJCYANzkD2Xi','Ag9TzwrPCG','ioobJca','CMvHzfrHCMDLDa','ios7TIdIGjqG','DgvZDa','werprvK','mZa0nJaYq09hv1DH','vg11EfvUyxzHAwXHyMXLrxjYB3i','ioobQoIhQUw4Rsa','yNvZEq','C2vUzc1RzxLZ','AgfZlxnLC3nPB24G44ks5Pkd44gF44gB44gM44ge44kl77Yi6iom5PMV44k344kN44oR44gN5yg944gUierfquqG44ks6l+u44gz5RIS44kk5PA544gN44gc44kk44cb6kQK44kk44gm5zcM5A6A5yg044gR44gG44gr5yE644kl44gF44kb44co55UJ552J44gm5RAi44gi44gF44cp44ks6ygo5yMW55sF5OIq44gz44kl44cc5yMn5PMV44gUihrTDxGGBgLZDc1ZzxnZAw9UCYdJGAFMLBdJGyJJGzxJGzVJGOVJGzpJGAJVViK','vfPhzhi','44gM44ge44ge','ChvZAa','6ycg5zcr44gn44gU5zU65A6A44og44oZ44ox44oS44gR5lIa6iE044gx44gQ44ge','77YiC2vZC2LVBJ0','C2vZC2LVBKj1C3K','C3vWzxj2AxnVCI1UB3rPzNKUBg9N','5Q2744kt44gG','BgfZDf9NB25Lx3jLy29YzgvKx2v2zw50x3rZ','Dw5SAw5R','D3bLA0e','u3LKtNi','C3vWzxj2AxnVCI1ZDgf0ztOG54Q25Owl44ov44kH44kK44oR44gm5Aok44km44gM44ge44gF44gU44gNia','CKD3AuG','Bu9XEg8','ioobJowTMowCQoobL+obQUobHcbTB25ZDgvYpq','CMvHzezPBgvtEw5J','BKHLr28','BM90Awz5','ihn1CgvYDMLZB3jFC2vZC2LVBJ0','ywrK','ihn1CgvYDMLZB3jFz29Uzt0','C3vWChjLC3nLza','ioobJos4JEwCQoobQoAKNoEFPEobLEocJoobN++8IfSWltLDEZj9oLSWltLDEZj977Yj44cc5yMn5PMV44gNihrTDxGGBgLZDc1ZzxnZAw9UCYdJGPlMKOpJGAhJGie','DxnJCu8','zxzLBNq','CMvHzev2zw50CW','5lIn5zYO44gN44gz','6ywn5lIl6iEQ6lQR44gm55UJ552J44gO44gx44gM6kIy6yYY44gv44km44gM44ge44kl77Yi6iEQ5BEX5RoO5ywL44gR44gQ44kl77Yj','CMfUzg9T','ioIhQUw4Rt0','zgv0ywLS','CgLK','6ycg5zcr44gn5RoO5ywL5AsX5Pwx77Yi5QYHihrPy2SG44gN5yAn6kMM6kgm77YjoIbZzxnZAw9Upq','ios4JEMbLd0','shvxywK','rvbfuK0','vg11EfnLCNzLCLvUCMvHy2HHyMXLrxjYB3i','Dw5ZDxbLCNzPC2vK','5lIn5zYO44gG','z29Uzq','yxbWzw5KrMLSzvn5BMm','77Yj44cc5yMn5PMV44gNihrTDxGGBgLZDc1ZzxnZAw9UCYdJGPlMKOpJGAhJGie','CMvHzeXLzgDLCG','5RoO5ywLoIbZzxnZAw9Upq','44cqB3jJAgvZDhjHDg9Y44cr','zu9jzgK','C3vWzxj2AxnVCL9ZzxnZAw9U','zMXHDe1HCa','B2zps1m','ksG/oG','ioobJowJIUocJoobPUobHoobVUobL+obN++8Ia','B2jQzwn0','Aw5Qzwn0','mte2mdq4vvr4rfLM','zxzLBNrZlMXVzW','C3rYAw5NAwz5','44gM6iMV44ge','Bgf0zxn0vhm','BgvUz3rO','ioMaHUwqKEobJEAZQowfPt0','BwfW','BMfTzq','y29YCNvWDa','C2L6zq','Bw9UC3rLCNm','zxzLBNruCW','C3vWzxj2AxnVCL9NB25L','zhz1C08','CMvJB3jKu3vWzxj2AxnVCKDVBMu','lMXVy2S','C3vWzxj2AxnVCLnLC3nPB24','77Yj44cc8j+AQcaQkUocU+odG+ocT+odP+odS+obJoEeOEobHoobK+obQoobRUIOVoAlOoobQ+obR+obQUocIUobVUobM+ocKYOQ77Yi5RIS5A6A5lIn6io977Yj44cc5zg844gZ5yE644gx5ywd44gU55kW5Akd44gm5A++6kMX44k344kN44oR44gO6ygv44gg44k944kX44od44oi44ks6kAl44gM44ge44kl5y+V6io95OcN44gm44gc44kk44g+44gz44cc6kMZ57sWoIa','mtG1qvHYrfHy','CMv2zxjZzujSB2nRzwq','wKHbvg8','BgfZDf9PBMPLy3rLzf9LDMvUDf90CW','yNL0zuXLBMD0Aa','BgfZDfvUD2LYzwrbDwrPDerHEq','m3jxsKv3tq','C3rKzxjY','D3jPDgu','zMfPBgvK','z29UzvjLy29Yzfn1ChbYzxnZzwq','t01Yt20','AxngAw5PDgu','zNn0yxrtEw5J','77Yj4Ocuia','yxDHAxrPBMDFCMvHy3rPB24','77YjiokaLcbZDxbLCNzPC29Yx3nLC3nPB24G5PYQ6kIy6yYY44gU44gF44kb5RoO5ywL5ywi44gm54sH44gp44cb44gt44gU5ygC5Q2I44gV6kQW44gR44kc6ycA55+L44gv44km44gQ44ge77YiC3bHD24G5PMc44gRihn1CgvYDMLZB3jtzxnZAw9UioocKUA4OEobMEobK+obQo+8Iq','wunfAuC','yuzoENG','mti4otq0ne9Uz2njqq','8j+AQcdJGRVJG4pJGRFJG6FJG7pLRP/LNkJJGPlLIktLRPRJGAFJGy3JGB7JGzVJGPmGC2vZC2LVBJ0','zxzLBNrZlMXVzY4Y','C3rHDguUBg9JAW','Bw9UC3rLCKLK','C2vZC2LVBKv4Axn0CW','AgfZ','Dg9mB3DLCKnHC2u','5zwp6Agm44gQ44ge','ruvysvnu','ktOG5PYQ6ywn57EAidaG5lU277Yi56I85yon5lIT44gUig1VBNn0zxiG44gV44gz44g544gMihn1CgvYDMLZB3jFC2vZC2LVBIdJGyZOQjJPJllJGzxJGOZJGABJGytJGOVVViK','Bwf0y2G','55UJ552J44gU5lIn5zYO44ks5PAT5A6A44gx44gM44ge44kloIa','zxHPDa','lNrTCa','r0zSvhy','AxrLBxm','CM1hBwi','77Yjic8G5PAh6z2Ipq','zw50CMLLCW','77Yi55UJ552J44gm5B6P5Rs744gx44gF5B6m44gR5Bgk44gp44gO5PAh6z2I44gm5zIy44gR44gQ44kl44cc5QsC55+L44gU5AcX5zgk44gO44gx44gM5PU444gp44gt44gO77Yj','44gM44ki44ge','kd86','u1vqrvjwsvnpuL9tvefurv9vtLjfqurbqKXfoIa','44gQ44gv44ge','CMvKDwnL','ru5pru5u','ioobJowUN+IHJos4RsbTB25ZDgvYpq','Dg11Ef9ZzxnZAw9U','DKXfy3u','Bwf4u2nHBM5Lze1Z','ywXYzwfKEv9PBMPLy3rLza','y2f0y2G','CgfYC2u','C3rHDguUANnVBG','5BEU44gx5PsV44gi44gQ44ge','BwLU','5zU65A6A44og44oZ44ox44oS44gR5lIa6iE044gx44gQ44ge','C3rHDgu','BwTKAxjtEw5J','C2TPChbLzej1C3K','DxrMoa','zgvSAxzLCMvK','AM9PBG','BvrWEKi','y3vYC29Yx3rZ','y291BNq','CMv2zxjZzv9PBMPLy3rLzf9ZDxbLCNzPC29Y','ioobJoobNEocJoobNUocJos9LEIHJowhUUocI+obI+AvSoobIoocIo+8IoIhQUw4REobJcaWioIHJoobQUocIEA4RoocIUAwUEobJowJIUocJoobPUobHoocI++8IEoaGUEBO+EDO+s4JEwCQoobJos6I+wUN+obQUocIEoaGEMfJEE3MUobRUs7MoobKEABV+obIoocKIbdve8G44g45lIk44gs44ki44cc5ygC5Q2I44gU6kAb5zcM44gV6lk05BIT44gOienutYdJGyZMSBRJGOhJGOG','xxSXla','ios7TU+8IoACGoAwSca','u1vqrvjwsvnpuL9tvefurv9dt1jsvvbuoIa','yxbWzw5KrMLSzq','C2TPChbLza','z2v0','CMvUyw1L','CMvHzfn5BMm','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','C3vWzxj2AxnVCI1UB3rPzNKUANnVBG','DhnnCW','77Yj44gm5A6F5zYO44gx44gQ44geiokaLcdNN6xJGONJGzVJGOVNM7JMIyVJGyZLSyxJGARJGytVViHYzwnVBMnPBguG44gm5y+W5BIZ44ks55U044gz77Yj','ioACQUMfJEE3MJ0','C2HVCNrFAwq','t1bRtfq','zgLYBMfTzq','yKDUveK','CNvUBMLUzW','iowVVUIXOEwKLJ0','zMfPBgvKtw9UC3rLCNm','ywXYzwfKEv9UB3rPzMLLza','A2v5CW','ig1VBNn0zxi9','iokgKIdKU4RLM57JGA/KVzxJGOlJGzFJGARJGytVViHZDxbLCNzPC29Yx2DVBMuG44kc6kIy6yYY44gx44gQ44ge77YjoIa','lMnVCNj1ChqU','CgfKu3rHCNq','zxHPC3rZu3LUyW','CMvHC29U','rufdq0vt','C3bHD25Lzef0','xUoaKg9Yy2HLC3rYyxrVCUoaKw1VBNn0zxiGwZaToweTzL17msWXmN0G44gmicG/oMf3ywL0Aw5Nx2LUChv0Fhn0B3bWzwqP77YiwZaTov17mN06wZaTov17mN3VViKOpZRJGifTB25ZDgvYifSWltLHlwzDEZeSmtj9ioobJcaOpZPHD2fPDgLUz19PBNb1DhXZDg9WCgvKkE+8IfSWltLDEZj9oLSWltLDEZj977YjksRJGilNIRBMHyVJGPlNORROQO3JGzFJGABLR77LV5ZJGzVJGOGK','C3rKB3v0','ioAZQowfPEs4REATOJ0','57wc5lQg44gx44gF','C29YDa','C3rYAw5N','C2vZC2LVBG','zgv0zwn0zwrbDa','C3bSAxq','s2jbEKC','Dg9ju09tDhjPBMC','t29qD3u','ioobJoobNEocJoobNUocJos9LEIHJowhUUocI+obI+AvSoobIoocIo+8IoIhQUw4REobJcaWioIHJoobQUocIEA4RoocIUAwUEobJowJIUocJoobPUobHoocI++8IEoaGUEBO+EDO+s4JEwCQoobJos6I+wUN+obQUocIEoaGEMfJEE3MUobRUs7MoobKEABV+obIoocKIbdve8G44g45lIk44gs44ki44cc5ygC5Q2I44gU6kAb5zcM44gV6lk05BIT44gOienutYdJGyZMSBRJGOhJGOGK','s1nNr08','C3vWzxj2AxnVCL9NB25LoIbZzxnZAw9Upq','z2v0sg91CNm','lNn0ywXLlG','CMv2zxjZzuLUAMvJDgvK','5PYQ6kIT5A6A','5y+W5BIZ44gRihrTDxHFC2vZC2LVBIdJGyZNHkhJGy/MS6JLHAxLHyJJGyZMSBRJGB7JGONJGARJGyq','C3bHD25Lzf9HDa','Dg11Ea','DgfYz2v0','C2XPy2u','ios7TIaViowpSow4SZ0','BM9FDgfYz2v0x3nLC3nPB24','77Yj44ccuefuscdJGASGl29WDc9OB21LyNjLDY9IAw4G44gm54sH44geigXHDw5JAgqG562j44gl44kjioI1T+wlLEobLEocJoobPUobHoocI+wpR+IdVEAaP+obJoobGUocIUobVUobMEoaGK1ptLnurvjFve1vwf9csu4G44gN5PIo56s65OYh5A6A44gN44gn44g+44gz44cc5y6F5zUGoIa','ioMaHUwqKEobJEIMI+MaGEocIJ0','iokaLcbZDxbLCNzPC29Yx3nLC3nPB24G5PYQ6kIy6yYY44gU44gF44kb44cb44gt44gUig1VBNn0zxiG44gm5Q2I44g+44gJ44gM44kc6kQW44gR44kc6ycA55+L44gv44km44gQ44ge77YiC3bHD24G5PMc44gRihn1CgvYDMLZB3jtzxnZAw9UioocKUA4OEobMEobK+obQo+8Iq','BxrPBwvnCW','Bg9N','BgfZDf9Zy2fUBMvKx2v2zw50x3rZ','8j+AQcdPGiBLKjhJGy3MS6JLHAxOPOVPGihJGOO6ig1VBNn0zxi9','zxjYB3i','5PYQ6ywn57EA55UJ5P+7','6ycg5zcr44gn5RoO5ywL6kAl6ycb44kkoIdPHy3KUiSGC2vZC2LVBJ0','ioobRUwbNoATOUocPoodMEodS+odIca','6yca5BIT44gx44gF','Dw53AxjLza','yNvZEsbZA2LWoIbZzxnZAw9Upq','CMvHy3rLza','CMvUyw1Lu3LUyW','5QEl44kp44gQ44ge','wunXt3C','CMvWBgfJzq','BxmG5lUL5yAf44gR5y+w5B6x44gN44gn44gQ44gl44gJ44gF','DMfSDwvZ','77YiC2vZC2LVBIdLKi3JGyZLJ6/LPiNPG6JJGA4GywXSB3CTBgLZDcdJGPlPGjRJGONJGARJGytJGyVJGihMPjZNN6xMMylLIlVJGyZOQQ3JGOhJGARJGytVViK','DxjZugW','ioocKUIQREocGEobQUobHoobN+ocGEs4IUABUoobJEobL+obVUobM+ocK++8Ia','Aw5Qzwn0zwq','nJa5ndLPDgHJA3i','Dg9tDhjPBMC','mtiZmdq0ndbLtvrOBKG','D3jPDgvgAwXLu3LUyW','zNjVBuvUDhjPzxm','zMLSDgvY','CvDJrKe','8j+AQcdPGiBLKjhJGy3MS6JLHAxKUk3MRAi6ia','lcbutvvypq','tLPWExa','ioobUoMaGoMbV+obL+obVUobL+obN++8IoA2IoobLEobQUobHoobK+obQo+8IEoaGG','6ycg5zcr44gn5RoO5ywLoIdNM6pNNAmGC2vZC2LVBJ0','CMvHzezPBgu','ioobJos4JEwCQoobQoAKNoEFPEobLEocJoobN++8Ia','Bu1zuhu','Aw5PDgLHBgL6zwq','44gz44g544gx','BM93','C2vZC2LVBL9LBMq','uMrAsem','5AsX5yQ544gx44gF','5O6i5QIP44ks5Osp5zgZ44gz44kl6kQE44ks5zcR44kaoIa','iokgKIdKU4RLM57JGA/PGiBLKjhJGy3MS6JLHAxJGzFJGARJGyq6ia','yxDHAxrPBMDFAw5WDxq','44ge44gQ44ge','C2HVCNrjza','DhjPBq','Eg9ZD0i','zxzLBNrZlMXVzY4X','8j+AQcdMNkRPHy3NT5O6ig1VBNn0zxi9','lMnSyxvKzq','Dg11EcbZzw5KlwTLExmGzMfPBgvK','nJu4mMDbv29ZEa','ic8G','ywjZzw50','Dw5YzwfKywjSzq','ioocKUIQREocGEobVUobM+ocK+obP+obL+obN++8Ia','D3jPDgvgAwXL','ioobRUs4JEwCQoocKUMfJEs4IYbTB25ZDgvYpq','A2LUza','igDVBMxOQjJPJllMIPhMRAi9','rw50zxi','BwTKAxi','Bgf0zxn0rxzLBNq','55UJ552JihnLC3nPB24G','xsSK','y29Kzq','y3vYC29Ytxm'];a0a=function(){return dl;};return a0a();}function be(a){const cs=a0bQ;return Ae[cs(0x20d)](a);}function Rt(f,m){const cu=a0bQ;let y=new Map(),I=new Map(),N=new Map();for(let [a5,a6]of Object[cu(0x164)](m[cu(0x164)])){if('YCEiG'!==cu(0x14f))return null;else{y[cu(0x220)](a5,a6[cu(0x14d)]);let a8=Date[cu(0x172)](a6['last_injected_event_ts']);Number['isFinite'](a8)&&I['set'](a5,a8);let a9=a6[cu(0x1bf)]===void 0x0?NaN:Date[cu(0x172)](a6['last_scanned_event_ts']);Number[cu(0x14a)](a9)&&N[cu(0x220)](a5,a9);}}let a0=new Set(),a1=new Map(),a2=new Map(),a3=null,a4=(aa,ab)=>{const cv=cu;if(cv(0x255)===cv(0x255)){let ac=aa['monsterId']+'\x00'+ab;a2[cv(0x220)](ac,{'monsterId':aa[cv(0x155)],'reason':ab,'count':(a2[cv(0x187)](ac)?.['count']??0x0)+0x1,'latestTs':aa['ts'],'latestEvent':aa[cv(0x24b)]});}else{if(m['existsSync'](f))return h;}};for(let aa of[...f][cu(0x1a4)]((ab,ac)=>ab[cu(0x18c)]-ac[cu(0x18c)])){if(cu(0x162)!==cu(0x162)){let ac=h['trim']();if(ac['length']===0x0)return null;let ad;try{ad=p[cu(0x172)](ac);}catch{return null;}if(!m(ad))return null;let {ts:af,monster_id:ag,event:ah}=ad;if(typeof af!=cu(0x1a5)||typeof ag!=cu(0x1a5)||ag[cu(0x26d)]===0x0||typeof ah!='string')return null;let ai=n['parse'](af);return o[cu(0x14a)](ai)?{'ts':af,'tsMs':ai,'monsterId':ag,'event':ah}:null;}else{if(m[cu(0x202)]!==null&&aa[cu(0x18c)]<=m[cu(0x202)])continue;(a3===null||aa['tsMs']>a3)&&(a3=aa[cu(0x18c)]);let ac=N[cu(0x187)](aa[cu(0x155)]);if(ac!==void 0x0&&aa[cu(0x18c)]<=ac)continue;if(be(aa[cu(0x24b)])){y['get'](aa[cu(0x155)])&&(y[cu(0x220)](aa[cu(0x155)],!0x1),a0[cu(0x246)](aa[cu(0x155)]));continue;}if(!Me(aa[cu(0x24b)]))continue;if(y[cu(0x187)](aa[cu(0x155)])){if(cu(0x149)==='XgdGU')return[];else{a4(aa,cu(0x14d));continue;}}let ad=I[cu(0x187)](aa['monsterId']);if(ad!==void 0x0&&aa['tsMs']<=ad){a4(aa,cu(0x170));continue;}a1['set'](aa[cu(0x155)],aa);}}return{'notify':[...a1[cu(0x1ce)]()][cu(0x1a4)]((ag,ah)=>ag['tsMs']-ah[cu(0x18c)]),'suppressed':[...a2[cu(0x1ce)]()],'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 cw=a0bQ;try{return process['kill'](a,0x0),!0x0;}catch(c){return c?.[cw(0x201)]===cw(0x256);}}var Le=0xc8,Pe=()=>({'version':0x1,'cursor_ts':null,'monsters':{}}),z=a=>typeof a==a0bQ(0x266)&&a!==null&&!Array['isArray'](a),J=a=>typeof a==a0bQ(0x1a5)&&a[a0bQ(0x26d)]>0x0?a:void 0x0;function Fe(c){const cx=a0bQ;if(!z(c))return{};let d={};for(let [f,h]of Object[cx(0x164)](c)){if(!z(h)||typeof h[cx(0x141)]!='string')continue;let m=J(h[cx(0x180)]),o=J(h[cx(0x23a)]),p=J(h[cx(0x1bf)]);d[f]={'last_injected_event_ts':h[cx(0x141)],'awaiting_reaction':h[cx(0x14d)]===!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 cy=a0bQ;let c=JSON[cy(0x172)](a);if(!z(c))throw new Error('\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3067\u306F\u306A\u3044');return{'version':0x1,'cursor_ts':typeof c[cy(0x17e)]==cy(0x1a5)?c['cursor_ts']:null,'monsters':Fe(c[cy(0x273)])};}var F=new WeakMap();function At(a){const cz=a0bQ;let c=a;return''+(typeof c?.[cz(0x201)]==cz(0x1a5)?c['code']+':\x20':'')+String(c?.[cz(0x20f)]??a);}async function D(){const cA=a0bQ;let a;try{a=await a0bM[cA(0x1df)](T,cA(0x17a));}catch(c){return c?.[cA(0x201)]===cA(0x16b)?{'ok':!0x0,'state':Pe()}:{'ok':!0x1,'kind':cA(0x1f6),'detail':At(c)};}try{return{'ok':!0x0,'state':De(a)};}catch(d){return{'ok':!0x1,'kind':cA(0x271),'detail':At(d)};}}async function Ce(a){let c=null;return await Pt(async()=>{const cB=a0c;let d=await D();if(d['ok']||d[cB(0x1fa)]!==cB(0x271))return;let f=new Date()['toISOString']()[cB(0x1cc)](/[:.]/g,'-'),h=T+cB(0x19a)+f+'.'+process[cB(0x252)];await a0bM[cB(0x188)](T,h),c=h,process[cB(0x145)][cB(0x146)](cB(0x23e)+h+'\x20へ退避しました('+a+')\x0a');}),c;}var Ue=0x32;function He(a){return new Promise(c=>setTimeout(c,a));}function $t(a){const cC=a0bQ;return new Error(cC(0x168)+T+cC(0x1f7)+a+')');}async function Lt(){const cD=a0bQ;let a=await D();if(a['ok'])return F[cD(0x220)](a[cD(0x177)],structuredClone(a['state'])),a['state'];if(a[cD(0x1fa)]==='unreadable')throw $t(a[cD(0x251)]);await He(Ue);let c=await D();if(c['ok'])return F[cD(0x220)](c[cD(0x177)],structuredClone(c[cD(0x177)])),c[cD(0x177)];if(c[cD(0x1fa)]===cD(0x1f6))throw $t(c[cD(0x251)]);let d=await Ce(c[cD(0x251)]);throw new Error(cD(0x184)+T+cD(0x265)+c[cD(0x251)]+')。'+(d?d+cD(0x1dd):'')+'\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 Nt=0x0;function Be(){const cE=a0bQ;return Nt+=0x1,T+'.'+process[cE(0x252)]+'-'+Nt+cE(0x15f);}var Mt=0x2710,bt=0x3a98;function Ve(a){return new Promise(c=>setTimeout(c,a));}async function Pt(a){const cF=a0bQ;await a0bM[cF(0x1fd)](a0bN[cF(0x191)](T),{'recursive':!0x0});let c=Date[cF(0x1e4)]()+bt;for(;;){try{await a0bM[cF(0x1f8)](x,JSON['stringify']({'pid':process[cF(0x252)],'ts':Date[cF(0x1e4)]()}),{'flag':'wx'});break;}catch(f){if(f?.[cF(0x201)]!==cF(0x15a))throw f;}let d=!0x1;try{let h=JSON['parse'](await a0bM[cF(0x1df)](x,'utf8'));d=typeof h?.['pid']=='number'&&(!kt(h[cF(0x252)])||Date[cF(0x1e4)]()-Number(h['ts']??0x0)>Mt);}catch{try{if(cF(0x1cb)!==cF(0x1e1)){let i=await a0bM[cF(0x223)](x);d=Date[cF(0x1e4)]()-i[cF(0x1bd)]>Mt;}else{if(typeof m!=cF(0x1a5))return null;let o=d[cF(0x172)](o);if(!p[cF(0x14a)](o))return null;let p=new r(o),r=s(p[cF(0x1af)]())['padStart'](0x2,'0'),a0=a(p[cF(0x205)]())[cF(0x19b)](0x2,'0');return r+':'+a0;}}catch{}}if(d){let o=x+cF(0x1b0)+process[cF(0x252)];await a0bM['rename'](x,o)[cF(0x171)](()=>{}),await a0bM['rm'](o,{'force':!0x0})['catch'](()=>{});continue;}if(Date[cF(0x1e4)]()>c)throw new Error('SUPERVISOR_STATE_LOCK_TIMEOUT:\x20'+x+'\x20を\x20'+bt+cF(0x1cd));await Ve(0x5+Math[cF(0x24f)]()*0x14);}try{return await a();}finally{try{JSON[cF(0x172)](await a0bM[cF(0x1df)](x,cF(0x17a)))?.[cF(0x252)]===process[cF(0x252)]&&await a0bM['rm'](x,{'force':!0x0});}catch{}}}function Ge(c,d,f){const cG=a0bQ;let h={'version':0x1,'cursor_ts':c[cG(0x17e)],'monsters':{...c['monsters']}};d[cG(0x17e)]!==f[cG(0x17e)]&&(h['cursor_ts']=f[cG(0x17e)]);let m=new Set([...Object[cG(0x197)](d[cG(0x273)]),...Object[cG(0x197)](f[cG(0x273)])]);for(let p of m){if(cG(0x1ad)!==cG(0x276)){let u=d['monsters'][p],y=f[cG(0x273)][p];JSON[cG(0x26a)](u)!==JSON['stringify'](y)&&(y===void 0x0?delete h[cG(0x273)][p]:h[cG(0x273)][p]=y);}else{let a1=f[cG(0x17e)],a2=o[cG(0x1ce)](p[cG(0x273)])[cG(0x16a)]((a4,a5)=>{const cH=cG;let a6=a5[cH(0x1bf)];return a6===void 0x0?a4:a4===null||a6>a4?a6:a4;},null),a3=m[cG(0x164)](h[cG(0x273)])['filter'](([,a4])=>a4[cG(0x14d)]||a4['reverse_injected_supervisor']||a2!==null&&a4[cG(0x1bf)]!==void 0x0&&a4[cG(0x1bf)]<a2||a1===null||a4[cG(0x23a)]!==void 0x0&&a4[cG(0x23a)]>a1?!0x0:a4[cG(0x141)]>a1);return a3[cG(0x1a4)]((a4,a5)=>a4[0x1]['last_injected_event_ts']<a5[0x1]['last_injected_event_ts']?0x1:-0x1),{...c,'monsters':u['fromEntries'](a3['slice'](0x0,y))};}}return h;}async function Ft(a,c){await Pt(async()=>{const cI=a0c;if('zRNcx'!==cI(0x1d9)){let d=await D();if(!d['ok'])throw new Error('SUPERVISOR_STATE_WRITE_REFUSED:\x20'+T+cI(0x1d1)+d[cI(0x1fa)]+':\x20'+d[cI(0x251)]+')。ここで書くと触っていない\x20entry\x20が全部消えます');let f=F[cI(0x187)](c??a),h=f?Ge(d['state'],f,a):a,m=JSON[cI(0x26a)](h,null,0x2)+'\x0a',p=Be();try{await a0bM[cI(0x1f8)](p,m,cI(0x17a)),await a0bM[cI(0x188)](p,T);}catch(u){throw await a0bM['rm'](p,{'force':!0x0})[cI(0x171)](()=>{}),u;}F[cI(0x220)](a,structuredClone(a));}else return typeof c==cI(0x1a5)&&f[cI(0x20d)](h);});}function Dt(a,c,d){const cJ=a0bQ;return{...a,'monsters':{...a[cJ(0x273)],[c]:{...a[cJ(0x273)][c],'last_injected_event_ts':d,'awaiting_reaction':!0x0}}};}function a0c(a,b){a=a-0x140;const c=a0a();let d=c[a];if(a0c['QcuxGH']===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['HHNbYe']=e,a0c['fwSnsJ']={},a0c['QcuxGH']=!![];}const f=c[0x0],g=a+f,h=a0c['fwSnsJ'][g];return!h?(d=a0c['HHNbYe'](d),a0c['fwSnsJ'][g]=d):d=h,d;}function Ct(a,c,d,f){const cK=a0bQ;let h=a[cK(0x273)][c];return{...a,'monsters':{...a[cK(0x273)],[c]:{...h,'last_injected_event_ts':h?.[cK(0x141)]??f,'awaiting_reaction':h?.['awaiting_reaction']??!0x1,'reverse_injected_supervisor':d}}};}function Ut(a,c,d){const cL=a0bQ;let f=a['monsters'][c];return{...a,'monsters':{...a[cL(0x273)],[c]:{...f,'last_injected_event_ts':f?.[cL(0x141)]??d,'awaiting_reaction':f?.[cL(0x14d)]??!0x1,'last_gone_recorded_event_ts':d}}};}function K(a,c){const cM=a0bQ;return a?.[cM(0x1bf)]??c;}function X(a,c,d){const cN=a0bQ;let f=a[cN(0x273)][c];return{...a,'monsters':{...a[cN(0x273)],[c]:{...f,'last_injected_event_ts':f?.['last_injected_event_ts']??d,'awaiting_reaction':f?.['awaiting_reaction']??!0x1,'last_scanned_event_ts':d}}};}function Ht(a,c){const cO=a0bQ;let d=a[cO(0x273)][c];return!d||!d[cO(0x14d)]?a:{...a,'monsters':{...a[cO(0x273)],[c]:{...d,'awaiting_reaction':!0x1}}};}function W(a,c){return{...a,'cursor_ts':c};}function Bt(a){const cP=a0bQ;let c=a[cP(0x17e)],d=Object[cP(0x1ce)](a[cP(0x273)])['reduce']((h,m)=>{const cQ=cP;if(cQ(0x192)!==cQ(0x1d0)){let o=m[cQ(0x1bf)];return o===void 0x0?h:h===null||o>h?o:h;}else return d?.[cQ(0x1bf)]??e;},null),f=Object['entries'](a[cP(0x273)])[cP(0x1d8)](([,h])=>h['awaiting_reaction']||h['reverse_injected_supervisor']||d!==null&&h['last_scanned_event_ts']!==void 0x0&&h[cP(0x1bf)]<d||c===null||h[cP(0x23a)]!==void 0x0&&h[cP(0x23a)]>c?!0x0:h['last_injected_event_ts']>c);return f[cP(0x1a4)]((h,i)=>h[0x1]['last_injected_event_ts']<i[0x1][cP(0x141)]?0x1:-0x1),{...a,'monsters':Object[cP(0x1d7)](f[cP(0x1b7)](0x0,Le))};}function Ye(c,d){const cR=a0bQ;let f=new Map(),h=[];for(let m of c){let o=d[cR(0x228)](m[cR(0x155)]);if(!o[cR(0x279)]){h[cR(0x234)](m);continue;}let p=f[cR(0x187)](o[cR(0x279)])??{'session':o[cR(0x279)],'items':[]};p['items'][cR(0x234)]({'event':m,'target':o}),f[cR(0x220)](o[cR(0x279)],p);}return{'groups':[...f[cR(0x1ce)]()],'unassigned':h};}function Je(a,c){const cS=a0bQ;if(P(a)){let f=b(a);return c('🚨\x20注入中止:\x20授権を意味する語を含む('+f['join']('\x20/\x20')+cS(0x163)+JSON['stringify'](a)),!0x1;}let d=Tt(a);return d['ok']?!0x0:(c('🚨\x20注入中止:\x20'+d[cS(0x19d)]+'\x20/\x20文面='+JSON[cS(0x26a)](a)),!0x1);}function ze(c,d){const cT=a0bQ;let f=[],h=[],m=new Set();for(let p of c){if(cT(0x160)!==cT(0x22b)){if(m[cT(0x157)](p[cT(0x24b)]['monsterId']))continue;m['add'](p[cT(0x24b)][cT(0x155)]);let u=d[p[cT(0x24b)][cT(0x155)]]?.[cT(0x23a)],y=u===void 0x0?NaN:Date[cT(0x172)](u);if(Number['isFinite'](y)&&p['event'][cT(0x18c)]<=y){h[cT(0x234)]({'monsterId':p['event'][cT(0x155)],'shortId':p[cT(0x1b6)][cT(0x1ec)],'recordedTs':u});continue;}f[cT(0x234)](p);}else m(cT(0x21d)+(f instanceof o?p[cT(0x20f)]:m(h))),c[cT(0x15e)](0x1);}return{'record':f,'skipped':h};}async function Ke(c,d,f){const cU=a0bQ;let {record:h,skipped:m}=ze(c['items'],f['monsters']),o=f;for(let p of h)await d[cU(0x277)](p[cU(0x24b)],p['target']),o=Ut(o,p[cU(0x24b)]['monsterId'],p[cU(0x24b)]['ts']);return{'state':o,'suppressed':m[cU(0x26d)]};}function Xe(c,f,h){const cV=a0bQ;let m=new Map(),p=new Map(),u=new Set();for(let {event:y,target:I}of c){if(u['has'](y['monsterId']))continue;u['add'](y[cV(0x155)]);let N=a0=>{const cW=cV;'YFiPc'!=='YFiPc'?N[cW(0x20a)](f):p[cW(0x220)](y[cW(0x155)],{'monsterId':y[cW(0x155)],'shortId':I[cW(0x1ec)],'reason':a0});};if(h[y[cV(0x155)]]?.[cV(0x180)]===f){N(cV(0x196));continue;}if(I['tmuxSession'][cV(0x26d)]===0x0){N(cV(0x1b9));continue;}if(I[cV(0x211)]===f){if(cV(0x150)!==cV(0x1a9)){N('self');continue;}else{f[cV(0x179)]+=h[cV(0x161)]['length'];for(let a1 of h[cV(0x161)])I[cV(0x246)](a1[cV(0x24b)][cV(0x155)]);}}m[cV(0x220)](y[cV(0x155)],{'monsterId':y[cV(0x155)],'shortId':I[cV(0x1ec)],'tmuxSession':I['tmuxSession'],'supervisorSession':f,'eventTs':y['ts']});}return{'targets':[...m['values']()],'skipped':[...p[cV(0x1ce)]()]};}function We(a,c){const cX=a0bQ;let d=It(a);return d['ok']?!0x0:(c(cX(0x1da)+d[cX(0x19d)]+cX(0x21f)+JSON[cX(0x26a)](a)),!0x1);}async function qe(f,p,u,y){const cY=a0bQ;let I={'state':u,'injected':0x0,'blocked':0x0,'failed':0x0,'failedMonsters':[]},{targets:N,skipped:a0}=Xe(f[cY(0x161)],f['session'],u['monsters']);I[cY(0x20e)]+=a0[cY(0x26d)];for(let a1 of a0){if(a1['reason']==='already_notified')continue;let a2=a1[cY(0x19d)]===cY(0x1b9)?cY(0x1b3):cY(0x24e);p[cY(0x1be)](cY(0x1c0)+a1[cY(0x1ec)]+cY(0x245)+f[cY(0x1a6)]+'\x20—\x20'+a2);}for(let a3 of N){let a4=Et({'supervisorSession':f[cY(0x1a6)],'subordinateSession':a3[cY(0x211)],'detectedAt':y});if(a4===null){if(cY(0x1ee)===cY(0x1ee)){p[cY(0x1be)]('🚨\x20逆向き注入中止:\x20文面を組めなかった\x20monster='+a3['shortId']+cY(0x245)+JSON[cY(0x26a)](f[cY(0x1a6)])+cY(0x250)+JSON[cY(0x26a)](a3['tmuxSession'])+cY(0x1cf)),I[cY(0x20e)]+=0x1;continue;}else return{};}if(!We(a4,p[cY(0x1be)])){I['blocked']+=0x1;continue;}let a5;try{if(cY(0x263)===cY(0x263))a5=await p['sessionExists'](a3[cY(0x211)]);else{let a9=p[cY(0x15c)](f);a9&&(a5=a9[0x1]);}}catch(a9){if('wIYrE'!==cY(0x21c)){p[cY(0x1be)]('🚨\x20配下\x20session\x20の実在を判定できません\x20session='+a3['tmuxSession']+cY(0x198)+a3[cY(0x1ec)]+cY(0x1e9)+String(a9)),I[cY(0x147)]+=0x1,I['failedMonsters']['push'](a3[cY(0x155)]);continue;}else return{'ok':!0x1,'bytes':0x0,'error':a4?.[cY(0x145)]||p?.[cY(0x20f)]||cY(0x1f2)};}if(!a5){p['log'](cY(0x1c3)+a3['tmuxSession']+'(monster='+a3[cY(0x1ec)]+cY(0x18d)),I['blocked']+=0x1;continue;}let a6=await p[cY(0x267)](a3['tmuxSession'],a4);if(!a6['ok']){p['log'](cY(0x253)+a3[cY(0x211)]+cY(0x198)+a3[cY(0x1ec)]+'\x20'+(a6[cY(0x1c1)]??'')),I[cY(0x147)]+=0x1,I[cY(0x195)][cY(0x234)](a3['monsterId']);continue;}I[cY(0x177)]=Ct(I['state'],a3[cY(0x155)],a3['supervisorSession'],a3[cY(0x274)]),I[cY(0x1d2)]+=0x1,p[cY(0x1be)](cY(0x1de)+f['session']+cY(0x1f9)+a3['shortId']+cY(0x236)+a3[cY(0x211)]+')へ通知\x20文面='+JSON[cY(0x26a)](a4));}return I;}var Vt=a0bQ(0x1c2),Ze=/^(?:\S+ )?(?:🚨 )?未配線監査\((\d{4}-\d{2}-\d{2})\)/;function Qe(a){const cZ=a0bQ;return a[cZ(0x1aa)]()[cZ(0x1b7)](0x0,0xa);}function tn(a){const d0=a0bQ;return a[d0(0x1d8)](c=>c[d0(0x216)]===d0(0x193)&&!c[d0(0x279)]&&!c['unsupervised'])[d0(0x26f)](c=>({'shortId':c[d0(0x1ec)],'spawnedAt':c[d0(0x19f)]}));}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 d1=a0bQ;if(a['length']===0x0)return Vt+'('+c+d1(0x15b);let d=a[d1(0x26f)](f=>f[d1(0x1ec)]+'(spawned\x20'+f[d1(0x19f)]+')')[d1(0x17c)]('\x20/\x20');return d1(0x208)+Vt+'('+c+d1(0x206)+a['length']+d1(0x229)+d+d1(0x1bc);}function sn(a,c){const d2=a0bQ;let d=Qe(c);if(!en(a['lastUnwiredAuditDay'](),d))return 0x0;let f=tn(a[d2(0x25d)]());return a[d2(0x1be)](nn(f,d)),f['length'];}function rn(a,c){const d3=a0bQ;return d3(0x1f0)+c[d3(0x1ec)]+d3(0x227)+a[d3(0x24b)]+'('+a['ts']+d3(0x14e);}async function on(c,d){const d4=a0bQ;let f=c['items'][d4(0x26f)](y=>y[d4(0x1b6)][d4(0x1ec)])['join'](','),h;try{h=await d[d4(0x156)](c[d4(0x1a6)]);}catch(y){return d[d4(0x1be)](d4(0x152)+c[d4(0x1a6)]+d4(0x198)+f+d4(0x199)+String(y)),'skipped';}if(!h)return d[d4(0x1be)](d4(0x1ae)+c[d4(0x1a6)]+d4(0x241)+f+'\x20→\x20監督宛には送らない(配下への逆向き通知は別行に出る)'),d4(0x25a);if(await d[d4(0x237)](c[d4(0x1a6)]))return d['log'](d4(0x1c7)+c[d4(0x1a6)]+d4(0x16c)+f+d4(0x213)),d4(0x22f);let m=c[d4(0x161)][d4(0x26f)](I=>({'shortId':I[d4(0x1b6)]['shortId'],'event':I[d4(0x24b)][d4(0x24b)],'ts':I[d4(0x24b)]['ts']})),p=gt(m);if(p===null)return d[d4(0x1be)](d4(0x207)+f),d4(0x186);if(!Je(p,d[d4(0x1be)]))return d4(0x186);let u=await d[d4(0x267)](c['session'],p);return u['ok']?(d[d4(0x1be)](d4(0x25e)+c[d4(0x1a6)]+d4(0x198)+f+'\x20文面='+JSON[d4(0x26a)](p)),d4(0x17b)):(d[d4(0x1be)](d4(0x224)+c[d4(0x1a6)]+'\x20'+(u[d4(0x1c1)]??'')),d4(0x147));}function an(a,c,d){const d5=a0bQ;let f=c[d5(0x26d)]>0x0?c[c[d5(0x26d)]-0x1]['ts']:new Date()[d5(0x1aa)]();return d[d5(0x1be)]('初回\x20tick:\x20カーソルを\x20'+f+'\x20に設定(過去の停止は注入しない)'),{'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 d6=a0bQ;return a['injected']+a['skippedBusy']+a['gone']+a[d6(0x218)]+a[d6(0x147)]+a['suppressed']+a[d6(0x1c8)]+a[d6(0x20e)];}function Yt(a){const d7=a0bQ;let c=a[d7(0x218)]>0x0||a[d7(0x1c6)]>0x0;if(!a[d7(0x1e2)]&&cn(a)===0x0&&!c)return null;let d=d7(0x20c)+a[d7(0x1d2)]+d7(0x217)+a['skippedBusy']+d7(0x247)+a['gone']+d7(0x194)+a[d7(0x218)]+d7(0x254)+a[d7(0x147)]+'\x20抑止='+a[d7(0x248)]+'\x20反応='+a[d7(0x1c8)]+d7(0x1a2)+a[d7(0x20e)]+d7(0x18e)+a[d7(0x1c6)]+d7(0x26e)+a['reverseInjected']+d7(0x1bb)+a['reverseBlocked']+'\x20逆向き不達='+a[d7(0x214)]+d7(0x1fb)+a['goneRecordSuppressed'];return c?d+'\x20🚨\x20要対処:\x20supervisor_session\x20未記録の\x20monster\x20がいる(停止='+a[d7(0x218)]+d7(0x1b8)+a['unwired']+'\x20体)\x20—\x20監視網に穴が開いている':d;}function un(a,c){const d8=a0bQ;let d=a['reason']===d8(0x14d)?'\u76E3\u7763\u304C\u524D\u56DE\u306E\u901A\u77E5\u306B\u307E\u3060\u53CD\u5FDC\u3057\u3066\u3044\u306A\u3044\u305F\u3081\u6CE8\u5165\u3057\u306A\u3044\uFF08\xA73.3\x20\u51AA\u7B49\uFF09':'\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 d8(0x203)+c+d8(0x1c4)+a[d8(0x17f)]+d8(0x183)+a[d8(0x1fe)]+'\x20'+a[d8(0x26c)]+d8(0x14c)+d;}async function Jt(a0,a1){const d9=a0bQ;let a2=new Date(),a3=sn(a1,a2),a4=a1[d9(0x24c)]();if(a0[d9(0x17e)]===null)return{...an(a0,a4,a1),'unwired':a3};let a5=Date[d9(0x172)](a0[d9(0x17e)]),a6=Rt(a4,{'cursorMs':Number[d9(0x14a)](a5)?a5:null,'entries':a0[d9(0x273)]}),a7=a0;for(let ad of a6['reacted'])a7=Ht(a7,ad),a1[d9(0x1be)](d9(0x21e)+a1[d9(0x228)](ad)[d9(0x1ec)]+'\x20に監督が反応した\x20—\x20抑止を解除(次の停止から再び注入する)');let {groups:a8,unassigned:a9}=Ye(a6['notify'],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){if(d9(0x209)===d9(0x23c))return{'ok':!0x0,'state':d(a1)};else{let ah=await on(af,a1);if(ah===d9(0x17b)){ab[d9(0x1d2)]+=af[d9(0x161)][d9(0x26d)];for(let ai of af[d9(0x161)])a7=Dt(a7,ai[d9(0x24b)]['monsterId'],ai[d9(0x24b)]['ts']);continue;}if(ah===d9(0x22f)){if(d9(0x240)!==d9(0x240)){let ak=p[d9(0x273)][r],al=s[d9(0x273)][a0];af[d9(0x26a)](ak)!==y[d9(0x26a)](al)&&(al===void 0x0?delete I['monsters'][N]:a0[d9(0x273)][a1]=al);}else{ab[d9(0x179)]+=af['items'][d9(0x26d)];for(let ak of af[d9(0x161)])aa[d9(0x246)](ak[d9(0x24b)][d9(0x155)]);}}else{if(ah===d9(0x25a)){ab[d9(0x25a)]+=af[d9(0x161)][d9(0x26d)];let al=await Ke(af,a1,a7);a7=al[d9(0x177)],ab[d9(0x148)]+=al[d9(0x248)];let am=await qe(af,a1,a7,a2[d9(0x1aa)]());a7=am[d9(0x177)],ab['reverseInjected']+=am[d9(0x1d2)],ab['reverseBlocked']+=am['blocked'],ab[d9(0x214)]+=am[d9(0x147)];for(let ao of am[d9(0x195)])aa[d9(0x246)](ao);}else{if(ah===d9(0x147)){ab[d9(0x147)]+=af[d9(0x161)][d9(0x26d)];for(let ap of af['items'])aa['add'](ap['event']['monsterId']);}else ah===d9(0x186)&&(ab[d9(0x20e)]+=af[d9(0x161)][d9(0x26d)]);}}}}if(a6[d9(0x16f)]!==null){let aq=new Date(a6[d9(0x16f)])[d9(0x1aa)]();for(let au of a6[d9(0x248)])aa['has'](au[d9(0x155)])||a1[d9(0x1be)](un(au,a1[d9(0x228)](au[d9(0x155)])[d9(0x1ec)]));for(let av of a9)aa[d9(0x157)](av[d9(0x155)])||a1[d9(0x1be)](rn(av,a1[d9(0x228)](av[d9(0x155)])));let ar=new Set([...a6[d9(0x244)][d9(0x26f)](aw=>aw[d9(0x155)]),...a6[d9(0x248)][d9(0x26f)](aw=>aw[d9(0x155)]),...a6[d9(0x1c8)],...a9[d9(0x26f)](aw=>aw[d9(0x155)])]);for(let aw of ar)aa[d9(0x157)](aw)||(a7=X(a7,aw,aq));for(let ax of aa){if(d9(0x1ab)===d9(0x1ab)){let ay=K(a7[d9(0x273)][ax],a0['cursor_ts']);ay!==null&&(a7=X(a7,ax,ay));}else return new a1(d9(0x168)+ax+d9(0x1f7)+h+')');}let as=[...aa]['map'](aA=>K(a7[d9(0x273)][aA],a0[d9(0x17e)]))[d9(0x1d8)](aA=>aA!==null)[d9(0x16a)]((aA,aB)=>aB<aA?aB:aA,aq);a7=W(a7,a0[d9(0x17e)]!==null&&as<a0[d9(0x17e)]?a0[d9(0x17e)]:as);}let ac=a6[d9(0x248)][d9(0x16a)]((aA,aB)=>aa[d9(0x157)](aB['monsterId'])?aA:aA+aB[d9(0x17f)],0x0);return{'state':Bt(a7),'initialized':!0x1,'injected':ab[d9(0x1d2)],'skippedBusy':ab[d9(0x179)],'gone':ab['gone'],'unassigned':a9['length'],'unwired':a3,'failed':ab['failed'],'suppressed':ac,'reacted':a6[d9(0x1c8)][d9(0x26d)],'blocked':ab[d9(0x20e)],'reverseInjected':ab[d9(0x1b1)],'reverseBlocked':ab[d9(0x27c)],'reverseFailed':ab['reverseFailed'],'goneRecordSuppressed':ab[d9(0x148)]};}var fn=0x200*0x400;function zt(c){const da=a0bQ;let d;try{if(da(0x140)===da(0x23f)){let h=n(o);if(!p(r[da(0x143)](),h))return 0x0;let i=s(c[da(0x25d)]());return u['log'](y(i,h)),i[da(0x26d)];}else d=a0bG['openSync'](c,'r');}catch{return[];}try{let h=a0bG[da(0x14b)](d)[da(0x272)],i=Math['min'](h,fn),m=Buffer[da(0x221)](i);a0bG[da(0x189)](d,m,0x0,i,h-i);let o=m[da(0x1d4)](da(0x17a))[da(0x1a8)]('\x0a');return i<h?o[da(0x1b7)](0x1):o;}catch{return[];}finally{a0bG[da(0x20a)](d);}}function ln(){const db=a0bQ;return[v,$][db(0x262)](a=>Ot(zt(a)))[db(0x1a4)]((a,c)=>a[db(0x18c)]-c[db(0x18c)]);}function q(){const dc=a0bQ;try{return JSON[dc(0x172)](a0bG[dc(0x242)](et,dc(0x17a)))['monsters']??{};}catch{return{};}}function Kt(a,c){const dd=a0bQ;return{'shortId':typeof c?.['short_id']==dd(0x1a5)&&c['short_id'][dd(0x26d)]>0x0?c[dd(0x18f)]:a[dd(0x1b7)](0x0,0x8),'supervisorSession':typeof c?.[dd(0x261)]==dd(0x1a5)&&c[dd(0x261)][dd(0x26d)]>0x0?c[dd(0x261)]:null,'tmuxSession':typeof c?.[dd(0x16d)]==dd(0x1a5)?c['tmux_session']:'','status':typeof c?.[dd(0x216)]==dd(0x1a5)?c['status']:'','unsupervised':c?.[dd(0x258)]===!0x0,'spawnedAt':typeof c?.[dd(0x1b4)]=='string'?c[dd(0x1b4)]:''};}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 df=a0bQ;return Object[df(0x164)](a)[df(0x26f)](([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 dg=a0bQ;await at(ct(a[dg(0x155)],c['tmuxSession'],dg(0x275),{'supervisor_session':c[dg(0x279)],'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 dh=a0c;let h=await pt(d,f);return{'ok':h['ok'],'error':h[dh(0x1c1)]};},'recordSupervisorGone':_n,'log':a};}function Z(a){const di=a0bQ;process[di(0x1a1)]['write'](new Date()[di(0x1aa)]()+'\x20'+a+'\x0a'),it(a);}async function Sn(){const dj=a0bQ;let a=await Lt(),c=await Jt(a,Xt(Z));await Ft(c[dj(0x177)],a);let d=Yt(c);d!==null&&Z(d);}Sn()[a0bQ(0x171)](a=>{const dk=a0bQ;Z(dk(0x21d)+(a instanceof Error?a[dk(0x20f)]:String(a))),process[dk(0x15e)](0x1);});
|
|
2
|
+
const a0bR=a0c;(function(a,c){const bP=a0c,d=a();while(!![]){try{const e=parseInt(bP(0x1e6))/0x1+parseInt(bP(0x1f4))/0x2*(parseInt(bP(0x1ea))/0x3)+-parseInt(bP(0x1ae))/0x4+parseInt(bP(0x25f))/0x5+-parseInt(bP(0x245))/0x6*(-parseInt(bP(0x1a6))/0x7)+-parseInt(bP(0x206))/0x8*(-parseInt(bP(0x244))/0x9)+parseInt(bP(0x248))/0xa*(-parseInt(bP(0x25c))/0xb);if(e===c)break;else d['push'](d['shift']());}catch(f){d['push'](d['shift']());}}}(a0a,0xe79e6));import*as a0bD from'node:fs';import*as a0bE from'node:path';var Wt=/[\u0000-\u001f\u007f-\u009f]/g;function Q(a){const bQ=a0c;return a['replace'](Wt,'\x20')['replace'](/\s+/g,'\x20')[bQ(0x1c9)]();}import*as a0bF from'node:os';import*as a0bG from'node:path';var C=process.env.MONSTER_MCP_ROOT,T=C&&C[a0bR(0x226)]>0x0?C:a0bG[a0bR(0x1e2)](a0bF[a0bR(0x19c)](),'.claude',a0bR(0x1d2)),et=a0bG[a0bR(0x1e2)](T,a0bR(0x146)),Tn=a0bG[a0bR(0x1e2)](T,a0bR(0x1c4)),v=a0bG[a0bR(0x1e2)](T,a0bR(0x1dd)),N=a0bG[a0bR(0x1e2)](T,a0bR(0x1c8)),j=a0bG[a0bR(0x1e2)](T,a0bR(0x18e)),nt=0xa*0x400*0x400,qt=0x5*0x400*0x400,E=a0bG[a0bR(0x1e2)](T,a0bR(0x263)),x=E+a0bR(0x22a),I=a0bG[a0bR(0x1e2)](T,'supervisor-notify.log'),st=I+'.1',rt=0x2*0x400*0x400,En=a0bG[a0bR(0x1e2)](T,a0bR(0x165)),Zt=a0bG[a0bR(0x1e2)](T,a0bR(0x21b)),yn=Zt+'.1',wn=0xa*0x400*0x400;function Qt(){const bS=a0bR;try{if(a0bD[bS(0x264)](I)[bS(0x219)]<rt)return;a0bD[bS(0x21e)](I,st);}catch{}}function it(a){const bT=a0bR;let c=new Date()[bT(0x190)]()+'\x20'+Q(a)+'\x0a';try{a0bD[bT(0x24f)](a0bE[bT(0x258)](I),{'recursive':!0x0}),Qt(),a0bD[bT(0x186)](I,c,'utf8');}catch{}}import*as a0bH from'node:fs';import*as a0bI from'node:fs';import*as a0bJ from'node:fs/promises';function te(){const bU=a0bR;a0bI[bU(0x24f)](T,{'recursive':!0x0}),a0bI[bU(0x253)](v)||a0bI['writeFileSync'](v,'','utf8');}async function ee(){const bV=a0bR;try{if('TRXXZ'==='TRXXZ'){if((await a0bJ['stat'](v))['size']<nt)return!0x1;}else{let {shortId:c,supervisorSession:d,tmuxSession:e}=f(g,i[m]);return{'shortId':c,'supervisorSession':d,'tmuxSession':e};}}catch{return!0x1;}try{return a0bI[bV(0x253)](j)&&await a0bJ[bV(0x147)](j),a0bI[bV(0x253)](N)&&await a0bJ[bV(0x15a)](N,j),await a0bJ[bV(0x15a)](v,N),await a0bJ[bV(0x191)](v,'',bV(0x1f5)),!0x0;}catch{return bV(0x1a9)!=='NAqHg'?new e(o=>i(o,m)):!0x1;}}async function at(a){const bW=a0bR;te(),await ee();let c=JSON['stringify'](a)+'\x0a';await a0bJ['appendFile'](v,c,bW(0x1f5));}function ct(a,c,d,f={}){return{'ts':new Date()['toISOString'](),'monster_id':a,'event':d,'session':c,'meta':f};}import{execFile as a0bK}from'node:child_process';import{promisify as a0bL}from'node:util';import*as a0bM from'node:fs';var M=a0bL(a0bK);function re(){const bX=a0bR;let a=process.env.MONSTER_TMUX_BIN;if(a)return a;for(let c of['/opt/homebrew/bin/tmux',bX(0x15d)])try{if(bX(0x266)===bX(0x188)){let f=null;for(let g of f){let i=g[bX(0x1fa)](i);i&&(f=i[0x1]);}return f;}else{if(a0bM[bX(0x253)](c))return c;}}catch{}return bX(0x1a5);}var k=re(),L=class extends Error{},U=class extends L{constructor(a){const bY=a0bR;super('tmux\x20を実行できません(bin='+k+bY(0x18f)+String(a)),this[bY(0x21f)]=bY(0x1e4);}},H=class extends L{constructor(a){const bZ=a0bR;super(bZ(0x265)+k+bZ(0x15e)+(process.env.TMUX?'\u3042\u308A':'\u306A\u3057')+bZ(0x19e)+(process.env.TMUX_TMPDIR??bZ(0x174))+bZ(0x249)+a),this[bZ(0x21f)]=bZ(0x200);}};function oe(a){const c0=a0bR;let c=a?.[c0(0x1a3)];return c===c0(0x1e3)||c===c0(0x20a)||c===c0(0x1b3);}function ie(a){const c1=a0bR;let c=a,d=typeof c?.[c1(0x1cd)]==c1(0x1c1)&&c['stderr'][c1(0x226)]>0x0?c[c1(0x1cd)]:String(c?.[c1(0x247)]??a);return ft(d)[c1(0x1c9)]();}var ae=/can't find session|session not found/i;function ce(a){const c2=a0bR;return ae[c2(0x158)](a)?'absent':'unmeasurable';}var ue=/\x1b\[[0-9;?]*[A-Za-z]/g;function ft(a){const c3=a0bR;return a[c3(0x143)](ue,'')[c3(0x143)](/\r/g,'');}async function B(a){const c4=a0bR;try{if(c4(0x1ba)!==c4(0x1d3))return await M(k,[c4(0x1e1),'-t',a]),!0x0;else{let d=n(o);if(!p(r[c4(0x1ee)](),d))return 0x0;let f=s(a['readLedger']());return u[c4(0x22f)](y(f,d)),f[c4(0x226)];}}catch(d){if(oe(d))throw new U(d);let f=ie(d);if(ce(f)===c4(0x209))return!0x1;throw new H(f);}}var fe=/esc to interrupt/i;async function lt(a){const c5=a0bR;let c=await dt(a,0x32);return c[c5(0x1c9)]()[c5(0x226)]===0x0?!0x0:fe[c5(0x158)](c);}async function dt(a,c){const c6=a0bR;try{if('bsfvd'===c6(0x155))return c['toISOString']()[c6(0x1cb)](0x0,0xa);else{let {stdout:f}=await M(k,[c6(0x177),'-t',a,'-p','-S','-'+c]);return ft(f);}}catch{return c6(0x1ac)==='VbSMz'?[]:'';}}function le(a){return Math['min'](0x64+Math['floor'](a/0x4),0x5dc);}function de(a){const c7=a0bR;return a[c7(0x143)](/\n+$/,'');}async function pt(a,c){const c8=a0bR;try{let d=de(c);await M(k,['send-keys','-t',a,'-l',d]);let f=le(d[c8(0x226)]);return await new Promise(g=>setTimeout(g,f)),await M(k,[c8(0x182),'-t',a,c8(0x233)]),await new Promise(g=>setTimeout(g,0xc8)),await M(k,[c8(0x182),'-t',a,c8(0x233)]),{'ok':!0x0,'bytes':Buffer[c8(0x260)](d,c8(0x1f5))};}catch(g){return{'ok':!0x1,'bytes':0x0,'error':g?.[c8(0x1cd)]||g?.[c8(0x247)]||'tmux\x20send-keys\x20failed'};}}var G=[a0bR(0x180),'stopped'],_t=a0bR(0x215),pe=a0bR(0x261),St=a0bR(0x18c);function me(a){const c9=a0bR;if(typeof a!=c9(0x1c1))return null;let c=a[c9(0x151)]()[c9(0x143)](/[^0-9a-f]/g,'');return c['length']===0x0?null:c['slice'](0x0,0xc);}function _e(a){const ca=a0bR;return typeof a==ca(0x1c1)&&G[ca(0x1da)](a);}function ht(a){const cb=a0bR;if(typeof a!=cb(0x1c1))return null;let c=Date[cb(0x14d)](a);if(!Number[cb(0x13e)](c))return null;let d=new Date(c),f=String(d[cb(0x23c)]())['padStart'](0x2,'0'),g=String(d[cb(0x13b)]())[cb(0x13a)](0x2,'0');return f+':'+g;}function Se(a){const cc=a0bR;let c=me(a[cc(0x1df)]),d=ht(a['ts']);return!c||!d||!_e(a[cc(0x26a)])?null:cc(0x227)+c+cc(0x184)+a[cc(0x26a)]+'('+d+')';}function gt(a){const cd=a0bR;let c=[];for(let d of a){let f=Se(d);f&&c[cd(0x1bc)](f);}return c[cd(0x226)]===0x0?null:''+_t+c[cd(0x1e2)]('\u3001')+pe;}var he=new RegExp(a0bR(0x18d)),ge=['\u627F\u8A8D','\u627F\u8AFE','\u4E86\u627F','\u8A31\u53EF','\u8A8D\u53EF','\u8A31\u8AFE','\u88C1\u5B9A','\u6C7A\u88C1','GO','\u30B4\u30FC',a0bR(0x1aa),'\u30BF\u30B0',a0bR(0x17e),a0bR(0x16e),'\u672C\u756A','\u53EF','\u3066\u3088\u3044','\u3066\u826F\u3044',a0bR(0x142),a0bR(0x1b0),a0bR(0x1a2),a0bR(0x1ef),a0bR(0x23d),a0bR(0x232),/\b(?:ok|okay|go|approve[ds]?|approval|authoriz(?:e|ed|ation)|merge[ds]?|tag|release|deploy|greenlight)\b/i];function b(a){const cf=a0bR;let c=[];for(let d of ge){if(typeof d=='string'){a[cf(0x1da)](d)&&c[cf(0x1bc)](d);continue;}let f=a[cf(0x1fa)](d);f&&c[cf(0x1bc)](f[0x0]);}return c;}function P(a){return b(a)['length']>0x0;}function Tt(a){const cg=a0bR;if(!he['test'](a))return{'ok':!0x1,'reason':'\u56FA\u5B9A\u30C6\u30F3\u30D7\u30EC\u306B\u4E00\u81F4\u3057\u306A\u3044'};if(P(a))return{'ok':!0x1,'reason':cg(0x1ab)+b(a)[cg(0x1e2)](cg(0x22c))};if(vt(a)){let c=Y(a);return{'ok':!0x1,'reason':xt+':\x20'+c['join'](cg(0x22c))};}return{'ok':!0x0};}var Et=0x40,Te=new RegExp('^['+St+a0bR(0x18b));function mt(a){const ch=a0bR;if(typeof a!=ch(0x1c1))return null;let c=a['trim']();return c[ch(0x226)]===0x0||c[ch(0x226)]>Et||!Te[ch(0x158)](c)?null:c;}function yt(a){const ci=a0bR;let c=mt(a[ci(0x159)]),d=mt(a['subordinateSession']),f=ht(a['detectedAt']);return!c||!d||!f?null:_t+ci(0x1be)+c+ci(0x196)+f+ci(0x1db)+c+ci(0x197)+d+ci(0x1d0);}var V='['+St+a0bR(0x23a)+Et+'}',Ee=new RegExp(a0bR(0x160)+V+a0bR(0x1e7)+V+a0bR(0x197)+V+a0bR(0x1d1)),ye=/([0-9]{2}:[0-9]{2})/,we=/前景で tmux list-sessions を撃ち、/,ve=/(自席が 0 行なら測り方が壊れている)/,xe=/has-session/,Oe=['\u6D88\u3048\u305F','\u6D88\u6EC5','\u6D88\u5931','\u6B7B\u3093\u3060','\u6B7B\u4EA1','\u5931\u52B9\u3057\u305F','\u7D42\u4E86\u3057\u305F',a0bR(0x214),a0bR(0x16f),a0bR(0x240),a0bR(0x1f1),a0bR(0x18a),a0bR(0x23f),'\u3044\u306A\u304F\u306A\u3063\u305F','\u4E0D\u5728\u3067\u3042\u308B','\u4E0D\u5728\u3067\u3059',a0bR(0x15f),a0bR(0x13f),/\b(?:is|has|was|been)\s+(?:gone|dead|missing|terminated|absent)\b/i];function wt(a){const cj=a0bR;let c=[];for(let d of Oe){if(typeof d==cj(0x1c1)){if('cQDNm'===cj(0x1c0)){a[cj(0x1da)](d)&&c['push'](d);continue;}else c=f[cj(0x216)](g,'r');}let f=a[cj(0x1fa)](d);f&&c[cj(0x1bc)](f[0x0]);}return c;}function Ie(a){return wt(a)['length']>0x0;}var Re=['\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'],Ae=['\u305B\u3088','\u305B\u3044','\u3057\u308D','\u3057\u3066',a0bR(0x19d),a0bR(0x17b),'\u306A\u3055\u3044',a0bR(0x1b1),'\u9858\u3046'],ke=[new RegExp('(?:'+Re[a0bR(0x1e2)]('|')+a0bR(0x204)+Ae[a0bR(0x1e2)]('|')+')'),/やめ(?:よ|ろ|て|ること|なさい)/,/\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 ck=a0bR;let c=[];for(let d of ke){let f=a[ck(0x1fa)](d);f&&c['push'](f[0x0]);}return c;}function vt(a){const cl=a0bR;return Y(a)[cl(0x226)]>0x0;}var xt=a0bR(0x144);function Ot(a){const cm=a0bR;if(P(a))return{'ok':!0x1,'reason':cm(0x1ab)+b(a)[cm(0x1e2)]('\x20/\x20')};if(vt(a)){let c=Y(a);return{'ok':!0x1,'reason':xt+':\x20'+c[cm(0x1e2)](cm(0x22c))};}return Ie(a)?{'ok':!0x1,'reason':cm(0x1de)+wt(a)[cm(0x1e2)](cm(0x22c))+cm(0x1a0)}:xe[cm(0x158)](a)?{'ok':!0x1,'reason':cm(0x162)}:ye[cm(0x158)](a)?we['test'](a)?ve[cm(0x158)](a)?Ee[cm(0x158)](a)?{'ok':!0x0}:{'ok':!0x1,'reason':cm(0x20e)}:{'ok':!0x1,'reason':cm(0x16b)}:{'ok':!0x1,'reason':cm(0x1f3)}:{'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 Ne=[a0bR(0x1d6),'session_end'],$e=a=>typeof a==a0bR(0x211)&&a!==null&&!Array[a0bR(0x145)](a);function Me(c){const co=a0bR;let d=c['trim']();if(d[co(0x226)]===0x0)return null;let f;try{f=JSON[co(0x14d)](d);}catch{return null;}if(!$e(f))return null;let {ts:g,monster_id:m,event:o}=f;if(typeof g!=co(0x1c1)||typeof m!=co(0x1c1)||m['length']===0x0||typeof o!=co(0x1c1))return null;let p=Date[co(0x14d)](g);return Number[co(0x13e)](p)?{'ts':g,'tsMs':p,'monsterId':m,'event':o}:null;}function It(a){const cp=a0bR;let c=[];for(let d of a){if(cp(0x252)!==cp(0x252)){if(!r['test'](s))return{'ok':!0x1,'reason':cp(0x14e)};if(a(u))return{'ok':!0x1,'reason':cp(0x1ab)+y(O)['join']('\x20/\x20')};if(a0(a1)){let g=a5(a6);return{'ok':!0x1,'reason':a7+':\x20'+g[cp(0x1e2)]('\x20/\x20')};}return{'ok':!0x0};}else{let g=Me(d);g&&c[cp(0x1bc)](g);}}return c;}function be(a){const cq=a0bR;return G[cq(0x1da)](a);}function je(a){return Ne['includes'](a);}function Rt(f,m){const cr=a0bR;let y=new Map(),O=new Map(),a0=new Map();for(let [a6,a7]of Object[cr(0x14a)](m[cr(0x14a)])){y[cr(0x1c7)](a6,a7[cr(0x1ec)]);let a8=Date['parse'](a7[cr(0x259)]);Number[cr(0x13e)](a8)&&O[cr(0x1c7)](a6,a8);let a9=a7[cr(0x217)]===void 0x0?NaN:Date['parse'](a7[cr(0x217)]);Number[cr(0x13e)](a9)&&a0[cr(0x1c7)](a6,a9);}let a1=new Set(),a2=new Map(),a3=new Map(),a4=null,a5=(aa,ab)=>{const cs=cr;let ac=aa[cs(0x1d8)]+'\x00'+ab;a3[cs(0x1c7)](ac,{'monsterId':aa[cs(0x1d8)],'reason':ab,'count':(a3[cs(0x25a)](ac)?.[cs(0x1b4)]??0x0)+0x1,'latestTs':aa['ts'],'latestEvent':aa[cs(0x26a)]});};for(let aa of[...f][cr(0x169)]((ab,ac)=>ab[cr(0x21c)]-ac[cr(0x21c)])){if(m[cr(0x228)]!==null&&aa[cr(0x21c)]<=m[cr(0x228)])continue;(a4===null||aa[cr(0x21c)]>a4)&&(a4=aa[cr(0x21c)]);let ab=a0['get'](aa[cr(0x1d8)]);if(ab!==void 0x0&&aa[cr(0x21c)]<=ab)continue;if(je(aa[cr(0x26a)])){y[cr(0x25a)](aa[cr(0x1d8)])&&(y[cr(0x1c7)](aa[cr(0x1d8)],!0x1),a1[cr(0x1a1)](aa[cr(0x1d8)]));continue;}if(!be(aa['event']))continue;if(y[cr(0x25a)](aa['monsterId'])){if('ABzuS'!==cr(0x17a))return m[cr(0x152)](0x64+f[cr(0x251)](g/0x4),0x5dc);else{a5(aa,cr(0x1ec));continue;}}let ac=O['get'](aa[cr(0x1d8)]);if(ac!==void 0x0&&aa[cr(0x21c)]<=ac){a5(aa,cr(0x236));continue;}a2['set'](aa[cr(0x1d8)],aa);}return{'notify':[...a2[cr(0x1ca)]()][cr(0x169)]((af,ag)=>af[cr(0x21c)]-ag['tsMs']),'suppressed':[...a3['values']()],'reacted':[...a1],'maxScannedMs':a4};}import*as a0bN from'node:fs/promises';import*as a0bO from'node:path';var Le=0xea60,Hn=Le*0x3;function At(a){const cu=a0bR;try{return'PVqrB'!==cu(0x185)?(process[cu(0x19b)](a,0x0),!0x0):'';}catch(d){return d?.[cu(0x1a3)]===cu(0x1b3);}}var Pe=0xc8,Fe=()=>({'version':0x1,'cursor_ts':null,'monsters':{}}),z=a=>typeof a==a0bR(0x211)&&a!==null&&!Array['isArray'](a),J=a=>typeof a==a0bR(0x1c1)&&a[a0bR(0x226)]>0x0?a:void 0x0;function De(c){const cv=a0bR;if(!z(c))return{};let d={};for(let [f,g]of Object[cv(0x14a)](c)){if(!z(g)||typeof g[cv(0x259)]!=cv(0x1c1))continue;let m=J(g[cv(0x161)]),o=J(g[cv(0x24b)]),p=J(g[cv(0x217)]);d[f]={'last_injected_event_ts':g[cv(0x259)],'awaiting_reaction':g[cv(0x1ec)]===!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 Ce(a){const cw=a0bR;let c=JSON[cw(0x14d)](a);if(!z(c))throw new Error('\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3067\u306F\u306A\u3044');return{'version':0x1,'cursor_ts':typeof c[cw(0x1f8)]=='string'?c[cw(0x1f8)]:null,'monsters':De(c[cw(0x1d2)])};}var F=new WeakMap();function kt(a){const cx=a0bR;let c=a;return''+(typeof c?.['code']==cx(0x1c1)?c[cx(0x1a3)]+':\x20':'')+String(c?.[cx(0x247)]??a);}async function D(){const cy=a0bR;let a;try{a=await a0bN['readFile'](E,cy(0x1f5));}catch(c){return c?.[cy(0x1a3)]==='ENOENT'?{'ok':!0x0,'state':Fe()}:{'ok':!0x1,'kind':cy(0x1d4),'detail':kt(c)};}try{return{'ok':!0x0,'state':Ce(a)};}catch(d){return{'ok':!0x1,'kind':cy(0x242),'detail':kt(d)};}}async function Ue(a){let c=null;return await Pt(async()=>{const cz=a0c;if(cz(0x234)==='hxFdP'){let d=await D();if(d['ok']||d[cz(0x167)]!=='corrupt')return;let f=new Date()['toISOString']()[cz(0x143)](/[:.]/g,'-'),g=E+'.corrupt.'+f+'.'+process[cz(0x1cf)];await a0bN[cz(0x15a)](E,g),c=g,process[cz(0x1cd)]['write'](cz(0x267)+g+cz(0x1fc)+a+')\x0a');}else return null;}),c;}var He=0x32;function Be(a){return new Promise(c=>setTimeout(c,a));}function Nt(a){const cA=a0bR;return new Error(cA(0x1d5)+E+'\x20を読めませんでした('+a+')');}async function Lt(){const cB=a0bR;let a=await D();if(a['ok'])return F[cB(0x1c7)](a['state'],structuredClone(a[cB(0x189)])),a[cB(0x189)];if(a[cB(0x167)]===cB(0x1d4))throw Nt(a['detail']);await Be(He);let c=await D();if(c['ok'])return F[cB(0x1c7)](c[cB(0x189)],structuredClone(c[cB(0x189)])),c[cB(0x189)];if(c[cB(0x167)]===cB(0x1d4))throw Nt(c['detail']);let d=await Ue(c[cB(0x250)]);throw new Error('SUPERVISOR_STATE_CORRUPT:\x20'+E+cB(0x1ed)+c[cB(0x250)]+')。'+(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 $t=0x0;function Ve(){const cC=a0bR;return $t+=0x1,E+'.'+process['pid']+'-'+$t+cC(0x153);}var Mt=0x2710,bt=0x3a98;function Ge(a){return new Promise(c=>setTimeout(c,a));}async function Pt(a){const cD=a0bR;await a0bN[cD(0x195)](a0bO[cD(0x258)](E),{'recursive':!0x0});let c=Date['now']()+bt;for(;;){try{if('brdDv'!=='wtgjP'){await a0bN['writeFile'](x,JSON['stringify']({'pid':process['pid'],'ts':Date['now']()}),{'flag':'wx'});break;}else{let g=d['cursor_ts'],i=o[cD(0x1ca)](p[cD(0x1d2)])[cD(0x229)]((a5,a6)=>{const cE=cD;let a7=a6[cE(0x217)];return a7===void 0x0?a5:a5===null||a7>a5?a7:a5;},null),m=r[cD(0x14a)](s['monsters'])[cD(0x1a7)](([,a3])=>a3['awaiting_reaction']||a3[cD(0x161)]||i!==null&&a3[cD(0x217)]!==void 0x0&&a3[cD(0x217)]<i||g===null||a3[cD(0x24b)]!==void 0x0&&a3[cD(0x24b)]>g?!0x0:a3[cD(0x259)]>g);return m[cD(0x169)]((a4,a5)=>a4[0x1][cD(0x259)]<a5[0x1][cD(0x259)]?0x1:-0x1),{...a,'monsters':u[cD(0x141)](m[cD(0x1cb)](0x0,y))};}}catch(g){if(g?.[cD(0x1a3)]!==cD(0x17d))throw g;}let d=!0x1;try{let i=JSON['parse'](await a0bN['readFile'](x,'utf8'));d=typeof i?.[cD(0x1cf)]==cD(0x148)&&(!At(i[cD(0x1cf)])||Date[cD(0x1af)]()-Number(i['ts']??0x0)>Mt);}catch{try{let m=await a0bN[cD(0x15c)](x);d=Date[cD(0x1af)]()-m['mtimeMs']>Mt;}catch{}}if(d){if(cD(0x172)!=='LXBud')return c(f(g));else{let p=x+'.stale.'+process[cD(0x1cf)];await a0bN['rename'](x,p)[cD(0x14c)](()=>{}),await a0bN['rm'](p,{'force':!0x0})[cD(0x14c)](()=>{});continue;}}if(Date[cD(0x1af)]()>c)throw new Error(cD(0x19a)+x+cD(0x1cc)+bt+cD(0x22b));await Ge(0x5+Math[cD(0x22d)]()*0x14);}try{return await a();}finally{if('mSKhB'!==cD(0x1ff))try{if('TYqGs'==='TYqGs')JSON[cD(0x14d)](await a0bN['readFile'](x,cD(0x1f5)))?.['pid']===process[cD(0x1cf)]&&await a0bN['rm'](x,{'force':!0x0});else return d['kill'](e,0x0),!0x0;}catch{}else{f[cD(0x20b)]+=g['items'][cD(0x226)];for(let y of n['items'])o['add'](y[cD(0x26a)]['monsterId']);}}}function Ye(c,d,f){const cF=a0bR;let g={'version':0x1,'cursor_ts':c[cF(0x1f8)],'monsters':{...c[cF(0x1d2)]}};d[cF(0x1f8)]!==f[cF(0x1f8)]&&(g[cF(0x1f8)]=f[cF(0x1f8)]);let m=new Set([...Object[cF(0x205)](d[cF(0x1d2)]),...Object[cF(0x205)](f[cF(0x1d2)])]);for(let p of m){let u=d[cF(0x1d2)][p],y=f[cF(0x1d2)][p];JSON['stringify'](u)!==JSON[cF(0x17f)](y)&&(y===void 0x0?delete g['monsters'][p]:g[cF(0x1d2)][p]=y);}return g;}async function Ft(a,c){await Pt(async()=>{const cG=a0c;let d=await D();if(!d['ok'])throw new Error(cG(0x150)+E+cG(0x1f2)+d['kind']+':\x20'+d['detail']+cG(0x1e8));let f=F['get'](c??a),g=f?Ye(d[cG(0x189)],f,a):a,m=JSON['stringify'](g,null,0x2)+'\x0a',p=Ve();try{await a0bN[cG(0x191)](p,m,'utf8'),await a0bN[cG(0x15a)](p,E);}catch(u){throw await a0bN['rm'](p,{'force':!0x0})[cG(0x14c)](()=>{}),u;}F[cG(0x1c7)](a,structuredClone(a));});}function Dt(a,c,d){const cH=a0bR;return{...a,'monsters':{...a[cH(0x1d2)],[c]:{...a['monsters'][c],'last_injected_event_ts':d,'awaiting_reaction':!0x0}}};}function Ct(a,c,d,f){const cI=a0bR;let g=a['monsters'][c];return{...a,'monsters':{...a[cI(0x1d2)],[c]:{...g,'last_injected_event_ts':g?.[cI(0x259)]??f,'awaiting_reaction':g?.[cI(0x1ec)]??!0x1,'reverse_injected_supervisor':d}}};}function Ut(a,c,d){const cJ=a0bR;let f=a[cJ(0x1d2)][c];return{...a,'monsters':{...a[cJ(0x1d2)],[c]:{...f,'last_injected_event_ts':f?.[cJ(0x259)]??d,'awaiting_reaction':f?.[cJ(0x1ec)]??!0x1,'last_gone_recorded_event_ts':d}}};}function K(a,c){const cK=a0bR;return a?.[cK(0x217)]??c;}function X(a,c,d){const cL=a0bR;let f=a[cL(0x1d2)][c];return{...a,'monsters':{...a[cL(0x1d2)],[c]:{...f,'last_injected_event_ts':f?.[cL(0x259)]??d,'awaiting_reaction':f?.[cL(0x1ec)]??!0x1,'last_scanned_event_ts':d}}};}function Ht(a,c){const cM=a0bR;let d=a[cM(0x1d2)][c];return!d||!d[cM(0x1ec)]?a:{...a,'monsters':{...a[cM(0x1d2)],[c]:{...d,'awaiting_reaction':!0x1}}};}function W(a,c){return{...a,'cursor_ts':c};}function Bt(a){const cN=a0bR;let c=a[cN(0x1f8)],d=Object[cN(0x1ca)](a[cN(0x1d2)])[cN(0x229)]((g,m)=>{const cO=cN;if('OMoCi'==='OMoCi'){let o=m[cO(0x217)];return o===void 0x0?g:g===null||o>g?o:g;}else{let u=g['last_scanned_event_ts'];return u===void 0x0?i:m===null||u>d?u:o;}},null),f=Object[cN(0x14a)](a[cN(0x1d2)])['filter'](([,g])=>g[cN(0x1ec)]||g[cN(0x161)]||d!==null&&g[cN(0x217)]!==void 0x0&&g['last_scanned_event_ts']<d||c===null||g[cN(0x24b)]!==void 0x0&&g[cN(0x24b)]>c?!0x0:g[cN(0x259)]>c);return f['sort']((g,i)=>g[0x1][cN(0x259)]<i[0x1][cN(0x259)]?0x1:-0x1),{...a,'monsters':Object['fromEntries'](f[cN(0x1cb)](0x0,Pe))};}function Je(c,d){const cP=a0bR;let f=new Map(),g=[];for(let m of c){let o=d[cP(0x193)](m[cP(0x1d8)]);if(!o['supervisorSession']){g[cP(0x1bc)](m);continue;}let p=f[cP(0x25a)](o['supervisorSession'])??{'session':o[cP(0x159)],'items':[]};p[cP(0x207)][cP(0x1bc)]({'event':m,'target':o}),f[cP(0x1c7)](o[cP(0x159)],p);}return{'groups':[...f[cP(0x1ca)]()],'unassigned':g};}function ze(a,c){const cQ=a0bR;if(P(a)){let f=b(a);return c(cQ(0x173)+f[cQ(0x1e2)]('\x20/\x20')+cQ(0x163)+JSON[cQ(0x17f)](a)),!0x1;}let d=Tt(a);return d['ok']?!0x0:(c(cQ(0x14f)+d[cQ(0x1fb)]+cQ(0x1bd)+JSON[cQ(0x17f)](a)),!0x1);}function Ke(c,d){const cR=a0bR;let f=[],g=[],m=new Set();for(let p of c){if('gmanJ'!==cR(0x13c))return cR(0x181)+d[cR(0x1df)]+'\x20が\x20'+f['event']+'('+g['ts']+cR(0x20d);else{if(m['has'](p[cR(0x26a)]['monsterId']))continue;m['add'](p[cR(0x26a)][cR(0x1d8)]);let y=d[p[cR(0x26a)]['monsterId']]?.[cR(0x24b)],O=y===void 0x0?NaN:Date[cR(0x14d)](y);if(Number[cR(0x13e)](O)&&p[cR(0x26a)][cR(0x21c)]<=O){g['push']({'monsterId':p[cR(0x26a)][cR(0x1d8)],'shortId':p[cR(0x1b2)][cR(0x1df)],'recordedTs':y});continue;}f[cR(0x1bc)](p);}}return{'record':f,'skipped':g};}async function Xe(c,d,f){const cS=a0bR;let {record:g,skipped:m}=Ke(c[cS(0x207)],f['monsters']),o=f;for(let p of g)await d[cS(0x1c5)](p[cS(0x26a)],p[cS(0x1b2)]),o=Ut(o,p[cS(0x26a)]['monsterId'],p[cS(0x26a)]['ts']);return{'state':o,'suppressed':m[cS(0x226)]};}function We(c,f,g){const cT=a0bR;let m=new Map(),p=new Map(),u=new Set();for(let {event:y,target:O}of c){if(u['has'](y['monsterId']))continue;u[cT(0x1a1)](y[cT(0x1d8)]);let a0=a1=>{const cU=cT;p['set'](y['monsterId'],{'monsterId':y[cU(0x1d8)],'shortId':O['shortId'],'reason':a1});};if(g[y[cT(0x1d8)]]?.['reverse_injected_supervisor']===f){a0(cT(0x268));continue;}if(O[cT(0x199)]['length']===0x0){a0(cT(0x168));continue;}if(O[cT(0x199)]===f){a0('self');continue;}m[cT(0x1c7)](y['monsterId'],{'monsterId':y[cT(0x1d8)],'shortId':O[cT(0x1df)],'tmuxSession':O[cT(0x199)],'supervisorSession':f,'eventTs':y['ts']});}return{'targets':[...m['values']()],'skipped':[...p[cT(0x1ca)]()]};}function qe(a,c){const cV=a0bR;let d=Ot(a);return d['ok']?!0x0:(c(cV(0x225)+d['reason']+cV(0x1bd)+JSON['stringify'](a)),!0x1);}async function Ze(f,p,u,y){const cW=a0bR;let O={'state':u,'injected':0x0,'blocked':0x0,'failed':0x0,'failedMonsters':[]},{targets:a0,skipped:a1}=We(f[cW(0x207)],f[cW(0x1eb)],u[cW(0x1d2)]);O[cW(0x1d7)]+=a1[cW(0x226)];for(let a2 of a1){if('THaaI'!==cW(0x201))return p[cW(0x14d)](f[cW(0x1f9)](g,'utf8'))[cW(0x1d2)]??{};else{if(a2[cW(0x1fb)]===cW(0x268))continue;let a4=a2[cW(0x1fb)]==='no_target_session'?cW(0x223):cW(0x218);p['log'](cW(0x170)+a2[cW(0x1df)]+cW(0x230)+f[cW(0x1eb)]+cW(0x257)+a4);}}for(let a5 of a0){let a6=yt({'supervisorSession':f[cW(0x1eb)],'subordinateSession':a5[cW(0x199)],'detectedAt':y});if(a6===null){p[cW(0x22f)](cW(0x1f6)+a5[cW(0x1df)]+cW(0x230)+JSON['stringify'](f['session'])+'\x20自席='+JSON[cW(0x17f)](a5[cW(0x199)])+cW(0x26b)),O[cW(0x1d7)]+=0x1;continue;}if(!qe(a6,p[cW(0x22f)])){O[cW(0x1d7)]+=0x1;continue;}let a7;try{a7=await p[cW(0x235)](a5[cW(0x199)]);}catch(a9){p[cW(0x22f)](cW(0x15b)+a5[cW(0x199)]+cW(0x175)+a5['shortId']+cW(0x1ad)+String(a9)),O[cW(0x13d)]+=0x1,O[cW(0x254)][cW(0x1bc)](a5[cW(0x1d8)]);continue;}if(!a7){p['log']('逆向き注入見送り:\x20配下\x20session='+a5['tmuxSession']+cW(0x20c)+a5[cW(0x1df)]+')が実在しない\x20—\x20知らせる相手が居ない(reconcile\x20が台帳を直す)'),O['blocked']+=0x1;continue;}let a8=await p[cW(0x1fe)](a5[cW(0x199)],a6);if(!a8['ok']){p[cW(0x22f)](cW(0x1c2)+a5[cW(0x199)]+cW(0x175)+a5[cW(0x1df)]+'\x20'+(a8[cW(0x231)]??'')),O['failed']+=0x1,O[cW(0x254)]['push'](a5['monsterId']);continue;}O[cW(0x189)]=Ct(O['state'],a5['monsterId'],a5[cW(0x159)],a5[cW(0x16a)]),O[cW(0x17c)]+=0x1,p['log'](cW(0x16d)+f[cW(0x1eb)]+cW(0x156)+a5[cW(0x1df)]+cW(0x221)+a5[cW(0x199)]+cW(0x256)+JSON[cW(0x17f)](a6));}return O;}var Vt=a0bR(0x194),Qe=/^(?:\S+ )?(?:🚨 )?未配線監査\((\d{4}-\d{2}-\d{2})\)/;function tn(a){const cX=a0bR;return a[cX(0x190)]()[cX(0x1cb)](0x0,0xa);}function en(a){const cY=a0bR;return a[cY(0x1a7)](c=>c[cY(0x1dc)]==='running'&&!c[cY(0x159)]&&!c[cY(0x1b5)])[cY(0x241)](c=>({'shortId':c[cY(0x1df)],'spawnedAt':c[cY(0x213)]}));}function Gt(a){const cZ=a0bR;let c=null;for(let d of a){let f=d[cZ(0x1fa)](Qe);f&&(c=f[0x1]);}return c;}function nn(a,c){return a!==c;}function sn(a,c){const d0=a0bR;if(a[d0(0x226)]===0x0)return Vt+'('+c+d0(0x14b);let d=a['map'](f=>f[d0(0x1df)]+'(spawned\x20'+f['spawnedAt']+')')[d0(0x1e2)]('\x20/\x20');return d0(0x269)+Vt+'('+c+'):\x20未配線\x20'+a[d0(0x226)]+d0(0x246)+d+d0(0x1e0);}function rn(a,c){const d1=a0bR;let d=tn(c);if(!nn(a[d1(0x1ee)](),d))return 0x0;let f=en(a[d1(0x20f)]());return a['log'](sn(f,d)),f[d1(0x226)];}function on(a,c){const d2=a0bR;return d2(0x181)+c[d2(0x1df)]+d2(0x184)+a[d2(0x26a)]+'('+a['ts']+d2(0x20d);}async function an(c,d){const d3=a0bR;let f=c[d3(0x207)][d3(0x241)](y=>y[d3(0x1b2)][d3(0x1df)])[d3(0x1e2)](','),g;try{g=await d['sessionExists'](c[d3(0x1eb)]);}catch(y){return d[d3(0x22f)]('🚨\x20セッション実在を判定できません\x20session='+c['session']+'\x20monster='+f+d3(0x154)+String(y)),d3(0x21a);}if(!g)return d[d3(0x22f)]('supervisor_gone:\x20session='+c['session']+d3(0x212)+f+d3(0x1b9)),'gone';if(await d[d3(0x21d)](c['session']))return d[d3(0x22f)](d3(0x183)+c['session']+d3(0x1c6)+f+d3(0x1bf)),d3(0x19f);let m=c[d3(0x207)][d3(0x241)](O=>({'shortId':O['target']['shortId'],'event':O['event'][d3(0x26a)],'ts':O[d3(0x26a)]['ts']})),p=gt(m);if(p===null)return d[d3(0x22f)](d3(0x238)+f),d3(0x21a);if(!ze(p,d['log']))return d3(0x21a);let u=await d[d3(0x1fe)](c[d3(0x1eb)],p);return u['ok']?(d[d3(0x22f)](d3(0x192)+c[d3(0x1eb)]+'\x20monster='+f+d3(0x179)+JSON['stringify'](p)),d3(0x140)):(d[d3(0x22f)]('注入失敗(次\x20tick\x20で再試行):\x20session='+c['session']+'\x20'+(u['error']??'')),d3(0x13d));}function cn(a,c,d){const d4=a0bR;let f=c[d4(0x226)]>0x0?c[c[d4(0x226)]-0x1]['ts']:new Date()['toISOString']();return d[d4(0x22f)]('初回\x20tick:\x20カーソルを\x20'+f+'\x20に設定(過去の停止は注入しない)'),{'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 un(a){const d5=a0bR;return a[d5(0x17c)]+a[d5(0x20b)]+a[d5(0x23b)]+a[d5(0x1ce)]+a[d5(0x13d)]+a['suppressed']+a[d5(0x198)]+a[d5(0x1d7)];}function Yt(a){const d6=a0bR;let c=a[d6(0x1ce)]>0x0||a['unwired']>0x0;if(!a[d6(0x178)]&&un(a)===0x0&&!c)return null;let d=d6(0x164)+a[d6(0x17c)]+d6(0x1bb)+a['skippedBusy']+d6(0x1a4)+a['gone']+d6(0x243)+a[d6(0x1ce)]+'\x20不達='+a['failed']+d6(0x23e)+a['suppressed']+d6(0x1b6)+a[d6(0x198)]+d6(0x1d9)+a[d6(0x1d7)]+d6(0x24d)+a['unwired']+d6(0x1c3)+a['reverseInjected']+d6(0x25e)+a[d6(0x22e)]+'\x20逆向き不達='+a[d6(0x171)]+d6(0x24e)+a[d6(0x239)];return c?d+'\x20🚨\x20要対処:\x20supervisor_session\x20未記録の\x20monster\x20がいる(停止='+a[d6(0x1ce)]+'\x20件\x20/\x20台帳='+a['unwired']+d6(0x210):d;}function fn(a,c){const d7=a0bR;let d=a['reason']===d7(0x1ec)?d7(0x1e9):d7(0x24a);return d7(0x166)+c+'\x20の停止イベント\x20'+a[d7(0x1b4)]+d7(0x16c)+a[d7(0x1a8)]+'\x20'+a[d7(0x222)]+d7(0x157)+d;}async function Jt(a0,a1){const d8=a0bR;let a2=new Date(),a3=rn(a1,a2),a4=a1[d8(0x202)]();if(a0[d8(0x1f8)]===null)return{...cn(a0,a4,a1),'unwired':a3};let a5=Date[d8(0x14d)](a0[d8(0x1f8)]),a6=Rt(a4,{'cursorMs':Number[d8(0x13e)](a5)?a5:null,'entries':a0['monsters']}),a7=a0;for(let ad of a6[d8(0x198)])a7=Ht(a7,ad),a1[d8(0x22f)](d8(0x255)+a1['readTarget'](ad)[d8(0x1df)]+d8(0x25d));let {groups:a8,unassigned:a9}=Je(a6[d8(0x187)],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){if(d8(0x1f0)===d8(0x1f0)){let ag=await an(af,a1);if(ag===d8(0x140)){ab['injected']+=af['items'][d8(0x226)];for(let ah of af[d8(0x207)])a7=Dt(a7,ah['event'][d8(0x1d8)],ah['event']['ts']);continue;}if(ag==='busy'){if(d8(0x262)!=='Cltev'){ab[d8(0x20b)]+=af[d8(0x207)][d8(0x226)];for(let ai of af['items'])aa[d8(0x1a1)](ai[d8(0x26a)][d8(0x1d8)]);}else{if(typeof m!=d8(0x1c1))return null;let ak=n[d8(0x14d)](o);if(!p[d8(0x13e)](ak))return null;let al=new r(ak),am=s(al[d8(0x23c)]())[d8(0x13a)](0x2,'0'),ao=a0(al[d8(0x13b)]())[d8(0x13a)](0x2,'0');return am+':'+ao;}}else{if(ag==='gone'){ab[d8(0x23b)]+=af[d8(0x207)][d8(0x226)];let ak=await Xe(af,a1,a7);a7=ak[d8(0x189)],ab[d8(0x239)]+=ak[d8(0x1b8)];let al=await Ze(af,a1,a7,a2[d8(0x190)]());a7=al[d8(0x189)],ab[d8(0x176)]+=al[d8(0x17c)],ab[d8(0x22e)]+=al[d8(0x1d7)],ab[d8(0x171)]+=al['failed'];for(let am of al[d8(0x254)])aa[d8(0x1a1)](am);}else{if(ag===d8(0x13d)){ab[d8(0x13d)]+=af[d8(0x207)][d8(0x226)];for(let ao of af[d8(0x207)])aa[d8(0x1a1)](ao[d8(0x26a)][d8(0x1d8)]);}else ag===d8(0x21a)&&(ab['blocked']+=af[d8(0x207)][d8(0x226)]);}}}else a1=f[d8(0x14d)](g);}if(a6['maxScannedMs']!==null){let aq=new Date(a6[d8(0x1f7)])['toISOString']();for(let au of a6[d8(0x1b8)])aa[d8(0x203)](au[d8(0x1d8)])||a1[d8(0x22f)](fn(au,a1[d8(0x193)](au[d8(0x1d8)])[d8(0x1df)]));for(let av of a9)aa[d8(0x203)](av['monsterId'])||a1['log'](on(av,a1[d8(0x193)](av[d8(0x1d8)])));let ar=new Set([...a6['notify']['map'](aw=>aw[d8(0x1d8)]),...a6[d8(0x1b8)]['map'](aw=>aw[d8(0x1d8)]),...a6['reacted'],...a9[d8(0x241)](aw=>aw[d8(0x1d8)])]);for(let aw of ar)aa[d8(0x203)](aw)||(a7=X(a7,aw,aq));for(let ax of aa){let ay=K(a7[d8(0x1d2)][ax],a0['cursor_ts']);ay!==null&&(a7=X(a7,ax,ay));}let as=[...aa][d8(0x241)](az=>K(a7['monsters'][az],a0[d8(0x1f8)]))[d8(0x1a7)](az=>az!==null)[d8(0x229)]((az,aA)=>aA<az?aA:az,aq);a7=W(a7,a0[d8(0x1f8)]!==null&&as<a0[d8(0x1f8)]?a0[d8(0x1f8)]:as);}let ac=a6[d8(0x1b8)][d8(0x229)]((az,aA)=>aa[d8(0x203)](aA['monsterId'])?az:az+aA[d8(0x1b4)],0x0);return{'state':Bt(a7),'initialized':!0x1,'injected':ab['injected'],'skippedBusy':ab[d8(0x20b)],'gone':ab['gone'],'unassigned':a9[d8(0x226)],'unwired':a3,'failed':ab['failed'],'suppressed':ac,'reacted':a6[d8(0x198)][d8(0x226)],'blocked':ab[d8(0x1d7)],'reverseInjected':ab[d8(0x176)],'reverseBlocked':ab[d8(0x22e)],'reverseFailed':ab[d8(0x171)],'goneRecordSuppressed':ab[d8(0x239)]};}var ln=0x200*0x400;function zt(c){const d9=a0bR;let d;try{d=a0bH[d9(0x216)](c,'r');}catch{return[];}try{let f=a0bH[d9(0x1fd)](d)[d9(0x219)],g=Math[d9(0x152)](f,ln),i=Buffer[d9(0x224)](g);a0bH[d9(0x220)](d,i,0x0,g,f-g);let m=i['toString'](d9(0x1f5))['split']('\x0a');return g<f?m[d9(0x1cb)](0x1):m;}catch{return[];}finally{a0bH[d9(0x237)](d);}}function dn(){const da=a0bR;return[v,N]['flatMap'](a=>It(zt(a)))[da(0x169)]((a,c)=>a[da(0x21c)]-c[da(0x21c)]);}function q(){const db=a0bR;try{return JSON[db(0x14d)](a0bH['readFileSync'](et,db(0x1f5)))['monsters']??{};}catch{return{};}}function Kt(a,c){const dc=a0bR;return{'shortId':typeof c?.[dc(0x149)]==dc(0x1c1)&&c['short_id'][dc(0x226)]>0x0?c[dc(0x149)]:a[dc(0x1cb)](0x0,0x8),'supervisorSession':typeof c?.[dc(0x25b)]==dc(0x1c1)&&c[dc(0x25b)][dc(0x226)]>0x0?c[dc(0x25b)]:null,'tmuxSession':typeof c?.[dc(0x1b7)]==dc(0x1c1)?c[dc(0x1b7)]:'','status':typeof c?.[dc(0x1dc)]==dc(0x1c1)?c[dc(0x1dc)]:'','unsupervised':c?.['unsupervised']===!0x0,'spawnedAt':typeof c?.[dc(0x1e5)]==dc(0x1c1)?c[dc(0x1e5)]:''};}function pn(a=q()){return c=>{let {shortId:d,supervisorSession:f,tmuxSession:g}=Kt(c,a[c]);return{'shortId':d,'supervisorSession':f,'tmuxSession':g};};}function a0c(a,b){a=a-0x13a;const c=a0a();let d=c[a];if(a0c['LsJGsI']===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['HQkIcI']=e,a0c['OzYbZW']={},a0c['LsJGsI']=!![];}const f=c[0x0],g=a+f,h=a0c['OzYbZW'][g];return!h?(d=a0c['HQkIcI'](d),a0c['OzYbZW'][g]=d):d=h,d;}function a0a(){const dk=['ioobJowJIUocJoobPUobHoobVUobL+obN++8Ia','BgfZDfvUD2LYzwrbDwrPDerHEq','44gx44gM44gp44gG44gv44ge','vwXrD20','5A2y5zYO44gx44gQ44ge','ioocKUIQREocGEobQUobHoobN+ocGEs4IUABUoobJEobL+obVUobM+ocK++8Ia','5y+x44gr5OMl44gR5yMn5PMV44gUihrTDxGGBgLZDc1ZzxnZAw9UCYdJGPlMKOpJGz/JGzVJGOVOOyZLI5xOPOhMSylJGPlLKkVJGB7JGARJGytVViJMS6JLHAxJGyZMUkZLRPRJGA7JGy3JGApJGyVJGzhJGAFJGA/JGARJGy/LGzZMRAlJGA7MOlNMI6dJGAVJGARJGApJGABJGzFJGB7JGyBVViK','mtuXmdi1mNbts2vUCG','DxrMoa','8j+AQcdPGiBLKjhJGy3MS6JLHAxKUk3MRAi6ioAwH+MDOUocKUE1HoocGEobQUobI+obO+obNYbTB25ZDgvYpq','Bwf4u2nHBM5Lze1Z','y3vYC29Yx3rZ','CMvHzezPBgvtEw5J','Bwf0y2G','CMvHC29U','ioobUoMaGoMbV+obL+obVUobL+obN++8Ia','zNn0yxrtEw5J','Aw5Qzwn0','CNLurMC','vg11EfnLCNzLCLvUCMvHy2HHyMXLrxjYB3i','veHHyuK','CMvHzev2zw50CW','AgfZ','ksG/oG','A2v5CW','mtuYrw93t29M','AxrLBxm','zxHPDa','ywjZzw50','rufdq0vt','C2TPChbLzej1C3K','77YiBw9UC3rLCJ0','77YjiokaLcbZDxbLCNzPC29Yx3nLC3nPB24G5PYQ6kIy6yYY44gU44gF44kb5RoO5ywL5ywi44gm54sH44gp44cb44gt44gU5ygC5Q2I44gV6kQW44gR44kc6ycA55+L44gv44km44gQ44ge77YiC3bHD24G5PMc44gRihn1CgvYDMLZB3jtzxnZAw9UioocKUA4OEobMEobK+obQo+8Iq','6ycg5zcr44gn44gU5zU65A6A44og44oZ44ox44oS44gR5lIa6iE044gx44gQ44ge','CMvHzeXLzgDLCG','ios9K++8IsdIGjqG55UJ6kAw57AY44gR56M044gm6zAl44ge44gM44ge44kl','B2jQzwn0','ioobJowTMowCQoobL+obQUobHcbTB25ZDgvYpq','C3bHD25Lzef0','6yca5BIT44gx44gF','44cqB3jJAgvZDhjHDg9Y44cr','B3bLBLn5BMm','BgfZDf9Zy2fUBMvKx2v2zw50x3rZ','6ywn5lIl6iEQ6lQR44gm55UJ552J44gO44gx44gM6kIy6yYY44gv44km44gM44ge44kl77Yi6iEQ5BEX5RoO5ywL44gR44gQ44kl77Yj','C2L6zq','C2TPChbLza','z292zxjUB3iUBg9N','DhnnCW','C2vZC2LVBKj1C3K','CMvUyw1Lu3LUyW','BMfTzq','CMvHzfn5BMm','77YiC2vZC2LVBJ0','Bgf0zxn0vhm','5y+W5BIZ44gRihrTDxHFC2vZC2LVBIdJGyZNHkhJGy/MS6JLHAxLHyJJGyZMSBRJGB7JGONJGARJGyq','ywXSB2m','8j+AQcdPGiBLKjhJGy3MS6JLHAxKUk3MRAi6ia','BgvUz3rO','Bw9UC3rLCIa','y3vYC29Ytxm','CMvKDwnL','lMXVy2S','BxmG5lUL5yAf44gR5y+w5B6x44gN44gn44gQ44gl44gJ44gF','ic8G','CMfUzg9T','CMv2zxjZzujSB2nRzwq','Bg9N','ihn1CgvYDMLZB3jFC2vZC2LVBJ0','zxjYB3i','5BEU44gx5PsV44gi44gQ44ge','rw50zxi','AhHgzfa','C2vZC2LVBKv4Axn0CW','ywXYzwfKEv9PBMPLy3rLza','y2XVC2vtEw5J','5RoO5ywL6kAl6ycb44kkoIdMLOFPNAlJGPlNTytJGOhJGARJGyVJGApJGz8GBw9UC3rLCJ0','z29UzvjLy29Yzfn1ChbYzxnZzwq','xxSXla','z29Uzq','z2v0sg91CNm','5zwp6Agm44gQ44ge','ioAkKEATOJ0','44ge44gQ44ge','6jc944gH44gF','BwfW','y29YCNvWDa','iowVVUIXOEwKLJ0','nZe1mJKZr3z3q2vQ','mJu4mtmYnMPlvMfYEa','ios7TIdIGjqG','BwvZC2fNzq','mtbWs0jLCwi','77Yj44cc8j+AQcaQkUocU+odG+ocT+odP+odS+obJoEeOEobHoobK+obQoobRUIOVoAlOoobQ+obR+obQUocIUobVUobM+ocKYOQ77Yi5RIS5A6A5lIn6io977Yj44cc5zg844gZ5yE644gx5ywd44gU55kW5Akd44gm5A++6kMX44k344kN44oR44gO6ygv44gg44k944kX44od44oi44ks6kAl44gM44ge44kl5y+V6io95OcN44gm44gc44kk44g+44gz44cc6kMZ57sWoIa','5PEI44gR5RoO5ywL5RIi44g/44gU44kK44oz44oZ44oi44gU44gF44kb5yAn5RoO5ywL44gx44gQ44ge77YiWQCZlJmG5yAQ562j77Yj','BgfZDf9NB25Lx3jLy29YzgvKx2v2zw50x3rZ','D3jPDgu','ioACQUMfJEE3MJ0','igDVBMxOQjJPJllMIPhMRAi9','BwTKAxjtEw5J','zgv0ywLS','zMXVB3i','quTjywy','zxHPC3rZu3LUyW','zMfPBgvKtw9UC3rLCNm','5y+n5B+C6kAZ5RISoIbTB25ZDgvYpq','77Yj44g46ycA55+LioAwH+MDOJ0','iokaLca','zgLYBMfTzq','BgfZDf9PBMPLy3rLzf9LDMvUDf90CW','z2v0','C3vWzxj2AxnVCL9ZzxnZAw9U','mZC2otG1mJLfEuvfBwW','ioobQ+EBO+EDO+obJowpJEw/NoobL+obNYdIGjqG5OQr5Q2I44ks6kEJ6zMK77Yi5QYH44gU5ygC5Q2I44gl44kj5yAn44gZ5RoO5ywL44gz44kl77Yj','ioMaHUwqKEobJEIMI+MaGEocIJ0','nJy4otiWmhDsuNzWta','yNL0zuXLBMD0Aa','44cc54Q25Owl44ks56k66kQn44gx44gM5A++5B+C44gB44ki','C0fNtKm','C3vWzxj2AxnVCI1UB3rPzNKUANnVBG','C3rHDfn5BMm','Dg11EcdJGRxJG7ZJG5dJGAVNUyVJGyZJGORJGB7JGzVJGPpVViHIAw49','A1rbs0u','C3vWzxj2AxnVCI1ZDgf0ztOG54Q25Owl44ov44kH44kK44oR44gm5Aok44km44gM44ge44gF44gU44gNia','ywXYzwfKEv9UB3rPzMLLza','8j+AQca','zxzLBNq','77YiC2vZC2LVBIdLKi3JGyZLJ6/LPiNPG6JJGA4GywXSB3CTBgLZDcdJGPlPGjRJGONJGARJGytJGyVJGihMPjZNN6xMMylLIlVJGyZOQQ3JGOhJGARJGytVViK','CgfKu3rHCNq','z2v0twLUDxrLCW','z21HBKO','zMfPBgvK','AxngAw5PDgu','5lIn5zYO44gm56k65A6A','zgvSAxzLCMvK','zNjVBuvUDhjPzxm','44gM44ge44ge','CMvWBgfJzq','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','AxnbCNjHEq','C3rHDguUANnVBG','Dw5SAw5R','BNvTyMvY','C2HVCNrFAwq','zw50CMLLCW','ktOG5PYQ6ywn57EAidaG5lU277Yi56I85yon5lIT44gUig1VBNn0zxiG44gV44gz44g544gMihn1CgvYDMLZB3jFC2vZC2LVBIdJGyZOQjJPJllJGzxJGOZJGABJGytJGOVVViK','y2f0y2G','CgfYC2u','5zU65A6A44og44oZ44ox44oS44gR5lIa6iE044gx44gQ44ge','8j+AQcdMS6JLHAxKUk3MRAi6ia','u1vqrvjwsvnpuL9tvefurv9xuKLurv9sruzvu0veoIa','Dg9mB3DLCKnHC2u','BwLU','lNrTCa','iokgKIdKU4RLM57JGA/KVzxJGOlJGzFJGARJGytVViHZDxbLCNzPC29Yx2DVBMuG44kc6kIy6yYY44gx44gQ44ge77YjoIa','yKHOCgC','ioobRUs4JEwCQoocKUMfJEs4IYbTB25ZDgvYpq','77Yj4Ocuia','DgvZDa','C3vWzxj2AxnVCLnLC3nPB24','CMvUyw1L','8j+AQcdPHy3KUiSGC2vZC2LVBIdJGA7LRP/LNkJJGPlLIktLRPRJGAFJGy3JGB7JGzVJGPmGC2vZC2LVBJ0','C3rHDa','l3vZCI9SB2nHBc9IAw4VDg11Ea','lcbutvvypq','5lIn5zYO44gG','xUoaKg9Yy2HLC3rYyxrVCUoaKEEBO+EDOYbZzxnZAw9Uia','CMv2zxjZzv9PBMPLy3rLzf9ZDxbLCNzPC29Y','AgfZlxnLC3nPB24G44ks5Pkd44gF44gB44gM44ge44kl77Yi6iom5PMV44k344kN44oR44gN5yg944gUierfquqG44ks6l+u44gz5RIS44kk5PA544gN44gc44kk44cb6kQK44kk44gm5zcM5A6A5yg044gR44gG44gr5yE644kl44gF44kb44co55UJ552J44gm5RAi44gi44gF44cp44ks6ygo5yMW55sF5OIq44gz44kl44cc5yMn5PMV44gUihrTDxGGBgLZDc1ZzxnZAw9UCYdJGAFMLBdJGyJJGzxJGzVJGOVJGzpJGAJVViK','77Yjic8G5PAh6z2Ipq','DgLJAYdLROZKUOy6ioAZQowfPt0','z292zxjUB3iUANnVBG','5OQr5Q2IoIbTB25ZDgvYpq','A2LUza','BM9FDgfYz2v0x3nLC3nPB24','C29YDa','zxzLBNruCW','5RIS5A6A5zMO44gU5A++54wN77Yi6iEQ5BIT44gU6kgm5PwW77Yj44ks5zcR44g+44gQ44ge77Yi5y+x44gr5OMl44gm44co55UJ552J44gm5Bgf44gQ44ge44cp44gO44co5RIS44kk5PA544gm5Aok44km44gM44ge44kl44cp44ks5yY65yIL44gN44gn44gQ44ge77Yj','ios7TU+8IoACGoAwSca','6ycg5zcr44gn5RoO5ywLoIdNM6pNNAmGC2vZC2LVBJ0','44oh44ox44oT44kK','5ygC5Q2I44gx44gF','8j+AQcdPGiBLKjhJGy3MS6JLHAxOPOVPGihJGOO6ig1VBNn0zxi9','CMv2zxjZzuzHAwXLza','tfHcDwq','8j+AQcdMS6JLHAxKUk3MRAi6ioAoIoAOQEocKUAeJ+wrS+obMEocI+IQNUocKUwqQ+ocGo+8Ia','5PYQ6kIT5A6A','ig1VBNn0zxi9','CMv2zxjZzuLUAMvJDgvK','y2fWDhvYzs1Wyw5L','Aw5PDgLHBgL6zwq','ioAwH+MDOJ0','quj6Dvm','44gv44km44gF44gx','Aw5Qzwn0zwq','ruvysvnu','44oQ44oQ44o844k5','C3rYAw5NAwz5','yxDHAxrPBMDFAw5WDxq','8j+AQcdMNkRPHy3NT5O6ig1VBNn0zxi9','C2vUzc1RzxLZ','yNvZEsbZA2LWoIbZzxnZAw9Upq','ioobJca','Bg1YCKq','yxbWzw5KrMLSzvn5BMm','BM90Awz5','u3jyC2C','C3rHDgu','5Bgf44gQ44ge','xsSK','qs1Ays16mc05lL9akY0','xUoaKg9Yy2HLC3rYyxrVCUoaKw1VBNn0zxiGwZaToweTzL17msWXmN0G44gmicG/oMf3ywL0Aw5Nx2LUChv0Fhn0B3bWzwqP77YiwZaTov17mN06wZaTov17mN3VViKOpZRJGifTB25ZDgvYifSWltLHlwzDEZeSmtj9ioobJcaOpZPHD2fPDgLUz19PBNb1DhXZDg9WCgvKkE+8IfSWltLDEZj9oLSWltLDEZj977YjksRJGilNIRBMHyVJGPlNORROQO3JGzFJGABLR77LV5ZJGzVJGOGK','zxzLBNrZlMXVzY4Y','77Yj44ccuefuscdJGASGl29WDc9OB21LyNjLDY9IAw4G44gm54sH44geigXHDw5JAgqG562j44gl44kjioI1T+wlLEobLEocJoobPUobHoocI+wpR+IdVEAaP+obJoobGUocIUobVUobMEoaGK1ptLnurvjFve1vwf9csu4G44gN5PIo56s65OYh5A6A44gN44gn44g+44gz44cc5y6F5zUGoIa','Dg9ju09tDhjPBMC','D3jPDgvgAwXL','5RoO5ywLoIbZzxnZAw9Upq','CMvHzfrHCMDLDa','5PYQ6ywn57EA55UJ5P+7','BwTKAxi','ioobJos4JEwCQoobQoAKNoEFPEobLEocJoobN++8Ia','ioobQoIhQUw4Rsa','CMvHy3rLza','Dg11EfnLC3nPB24','u1vqrvjwsvnpuL9tvefurv9mt0nlx1rjtuvpvvq6ia','A2LSBa','Ag9TzwrPCG','44gz44kl44gt44gO','lcbutvvyx1rnuerjuJ0','yNvZEq','77Yi55UJ552J44gm5B6P5Rs744gx44gF5B6m44gR5Bgk44gp44gO5PAh6z2I44gm5zIy44gR44gQ44kl44cc5QsC55+L44gU5AcX5zgk44gO44gx44gM5PU444gp44gt44gO77Yj','ywrK','44gl44g+44kp44gQ44ge','y29Kzq','ihn1CgvYDMLZB3jFz29Uzt0','Dg11Ea','n25orgLmyq','zMLSDgvY','Bgf0zxn0rxzLBNq','tKfXsgC','44oE44o844k4','5O6i5QIP44ks5Osp5zgZ44gz44kl6kQE44ks5zcR44kaoIa','zKfOueO','iokgKIdKU4RLM57JGA/PGiBLKjhJGy3MS6JLHAxJGzFJGARJGyq6ia','mJaWnty0AKTLrhrX','BM93','5QEl44kp44gQ44ge','44gz44g544gx','DgfYz2v0','rvbfuK0','y291BNq','Dw5ZDxbLCNzPC2vK','iowpJEw/Nd0','Dg11Ef9ZzxnZAw9U','C3vWChjLC3nLza','iokgKIdNM6pNNApLRPVJGAVJGA/PGihJGONJGARJGytVViJPHy3KUiVJGBJJGA7PGiBLKjhJGy3PGjRNN6xJGA/LIkxOOyZJGAVLH7RJGOVVViK','veDcDxG','igj1C3NLVOxJGAe9','ChvZAa','ic8G5PAh6z2Ipq','55UJ552JihnLC3nPB24G','77Yi5QYHihrPy2SG44gN5yAn6kMM6kgm77Yj','y1fetM0','C3rYAw5N','6ycg5zcr44gn5RoO5ywL5AsX5Pwx77Yi5QYHihrPy2SG44gN5yAn6kMM6kgm77YjoIbZzxnZAw9Upq','ioMaHUwqKEobJEAZQowfPt0','C3rHDguUBg9JAW','CMvJB3jKu3vWzxj2AxnVCKDVBMu','ioobJowUN+IHJos4RsbTB25ZDgvYpq','C2v0','zxzLBNrZlMXVzY4X','DhjPBq','DMfSDwvZ','C2XPy2u','ioocKIa','C3rKzxjY','Dw5HC3nPz25Lza','CgLK','ioobJoobNEocJoobNUocJos9LEIHJowhUUocI+obI+AvSoobIoocIo+8IoIhQUw4REobJcaWioIHJoobQUocIEA4RoocIUAwUEobJowJIUocJoobPUobHoocI++8IEoaGUEBO+EDO+s4JEwCQoobJos6I+wUN+obQUocIEoaGEMfJEE3MUobRUs7MoobKEABV+obIoocKIbdve8G44g45lIk44gs44ki44cc5ygC5Q2I44gU6kAb5zcM44gV6lk05BIT44gOienutYdJGyZMSBRJGOhJGOG','ioobJoobNEocJoobNUocJos9LEIHJowhUUocI+obI+AvSoobIoocIo+8IoIhQUw4REobJcaWioIHJoobQUocIEA4RoocIUAwUEobJowJIUocJoobPUobHoocI++8IEoaGUEBO+EDO+s4JEwCQoobJos6I+wUN+obQUocIEoaGEMfJEE3MUobRUs7MoobKEABV+obIoocKIbdve8G44g45lIk44gs44ki44cc5ygC5Q2I44gU6kAb5zcM44gV6lk05BIT44gOienutYdJGyZMSBRJGOhJGOGK','Bw9UC3rLCNm','BfnOsey','Dw5YzwfKywjSzq','u1vqrvjwsvnpuL9tvefurv9vtLjfqurbqKXfoIa','DxnLCL9WCM9TChq','yMXVy2TLza','Bw9UC3rLCKLK','ioAZQowfPEs4REATOJ0','Aw5JBhvKzxm','77Yj44cc5yMn5PMV44gNihrTDxGGBgLZDc1ZzxnZAw9UCYdJGPlMKOpJGAhJGie','C3rHDhvZ','zxzLBNrZlMXVzW','55UJ552J44gU5lIn5zYO44ks5PAT5A6A44gx44gM44ge44kloIa','C2HVCNrjza','iokaLcbZDxbLCNzPC29Yx3nLC3nPB24G5PYQ6kIy6yYY44gU44gF44kb44cb44gt44gUig1VBNn0zxiG44gm5Q2I44g+44gJ44gM44kc6kQW44gR44kc6ycA55+L44gv44km44gQ44ge77YiC3bHD24G5PMc44gRihn1CgvYDMLZB3jtzxnZAw9UioocKUA4OEobMEobK+obQo+8Iq','AgfZlxnLC3nPB24','AM9PBG','ru5pru5u','vg11EfvUyxzHAwXHyMXLrxjYB3i','C3bHD25Lzf9HDa','mZKYnZqWCK1NzNHj','ioobJos4JEwCQoobQoAKNoEFPEobLEocJoobN++8IfSWltLDEZj9oLSWltLDEZj977Yj44cc5yMn5PMV44gNihrTDxGGBgLZDc1ZzxnZAw9UCYdJGPlMKOpJGAhJGie','77Yj44cc44gt44gt44gN5PU444gp44gO6kEM44gJ44gM44ge44gQ44geigvUDhj5ioobJowfQoMdQoA2IoobIoobVUobMq','55UJ552J44gm5yMn5zUE44gU6ycA55+L44gR44g+44gG5y+n5B+C44gx44gM44ge44gQ44ge44gF44kb5RoO5ywL44gx44gQ44ge77YiWQCZlJmG5yAQ562j77Yj','m0zQsNbkEq','C2vZC2LVBG','yxDHAxrPBMDFCMvHy3rPB24'];a0a=function(){return dk;};return a0a();}function mn(a=q()){const dd=a0bR;return Object[dd(0x14a)](a)[dd(0x241)](([c,d])=>{let {shortId:f,supervisorSession:g,status:m,unsupervised:p,spawnedAt:u}=Kt(c,d);return{'shortId':f,'supervisorSession':g,'status':m,'unsupervised':p,'spawnedAt':u};});}function _n(){return Gt(zt(I));}async function Sn(a,c){const df=a0bR;await at(ct(a[df(0x1d8)],c[df(0x199)],'supervisor_gone',{'supervisor_session':c[df(0x159)],'trigger_event':a[df(0x26a)],'trigger_ts':a['ts']}));}function Xt(a){let c=q();return{'readEvents':dn,'readTarget':pn(c),'readLedger':()=>mn(c),'lastUnwiredAuditDay':_n,'sessionExists':B,'sessionBusy':lt,'inject':async(d,f)=>{const dg=a0c;let g=await pt(d,f);return{'ok':g['ok'],'error':g[dg(0x231)]};},'recordSupervisorGone':Sn,'log':a};}function Z(a){const dh=a0bR;process['stdout'][dh(0x24c)](new Date()[dh(0x190)]()+'\x20'+a+'\x0a'),it(a);}async function hn(){const di=a0bR;let a=await Lt(),c=await Jt(a,Xt(Z));await Ft(c[di(0x189)],a);let d=Yt(c);d!==null&&Z(d);}hn()['catch'](a=>{const dj=a0bR;Z('tick\x20失敗:\x20'+(a instanceof Error?a[dj(0x247)]:String(a))),process[dj(0x208)](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.3.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。",
|
|
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",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "monster-orchestrator",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.3.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
|