@sleep2agi/agent-network 2.3.0-preview.34 → 2.3.0-preview.36

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.
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env bun
2
- const a0_0x385446=a0_0x2865;(function(_0x4c39e6,_0x3e7668){const _0x1c572e=a0_0x2865,_0x4df4f2=_0x4c39e6();while(!![]){try{const _0x30dee0=-parseInt(_0x1c572e(0xdb))/0x1*(-parseInt(_0x1c572e(0x162))/0x2)+-parseInt(_0x1c572e(0x144))/0x3+-parseInt(_0x1c572e(0x129))/0x4+-parseInt(_0x1c572e(0x159))/0x5*(-parseInt(_0x1c572e(0x14e))/0x6)+-parseInt(_0x1c572e(0x107))/0x7+-parseInt(_0x1c572e(0x11b))/0x8+-parseInt(_0x1c572e(0xe3))/0x9*(-parseInt(_0x1c572e(0x155))/0xa);if(_0x30dee0===_0x3e7668)break;else _0x4df4f2['push'](_0x4df4f2['shift']());}catch(_0x1c7ae5){_0x4df4f2['push'](_0x4df4f2['shift']());}}}(a0_0x4b3d,0x72fea));import{readFileSync as a0_0x32d519,existsSync as a0_0x2317d3}from'fs';import{randomUUID as a0_0x5a2575}from'crypto';import{join as a0_0x41c091}from'path';import{hostname as a0_0x163ae3}from'os';import{execSync as a0_0x1719e1}from'child_process';function B(_0x41caf9){const _0x221235=a0_0x2865;let _0x3c20d1=_0x41caf9[_0x221235(0x125)](/[^a-zA-Z0-9\-_]/g,'-');return _0x3c20d1===''?'unknown':_0x3c20d1;}import{Server as a0_0x38f832}from'@modelcontextprotocol/sdk/server/index.js';import{StdioServerTransport as a0_0x216f86}from'@modelcontextprotocol/sdk/server/stdio.js';import{ListToolsRequestSchema as a0_0x42b373,CallToolRequestSchema as a0_0x308c43}from'@modelcontextprotocol/sdk/types.js';function T(_0xf0968d){const _0x3f65d2=a0_0x2865;if(!a0_0x2317d3(_0xf0968d))return;for(let _0x182214 of a0_0x32d519(_0xf0968d,'utf-8')[_0x3f65d2(0x12b)]('\x0a')){let _0x4146c0=_0x182214[_0x3f65d2(0x16c)]();if(!_0x4146c0||_0x4146c0['startsWith']('#'))continue;let _0x48f663=_0x4146c0[_0x3f65d2(0xe7)]('=');if(_0x48f663<0x0)continue;let _0x56f4fb=_0x4146c0['slice'](0x0,_0x48f663)['trim'](),_0x2eee96=_0x4146c0['slice'](_0x48f663+0x1)[_0x3f65d2(0x16c)]()[_0x3f65d2(0x125)](/^["']|["']$/g,'');if(!process.env[_0x56f4fb])process.env[_0x56f4fb]=_0x2eee96;}}var C=process.env.HOME||'~',r=a0_0x41c091(C,'.claude/channels/commhub');T(a0_0x41c091(r,a0_0x385446(0x173)));var H=B(process[a0_0x385446(0x161)]());T(a0_0x41c091(r,H,a0_0x385446(0x173)));function E(){const _0x3b4a9b=a0_0x385446;try{return a0_0x1719e1(_0x3b4a9b(0x10c),{'encoding':_0x3b4a9b(0x174),'timeout':0x7d0})['trim']();}catch{return'';}}function _(){const _0x17931d=a0_0x385446;try{let _0x5f29af=a0_0x41c091(C,'.anet',_0x17931d(0x119));if(a0_0x2317d3(_0x5f29af))return JSON[_0x17931d(0x137)](a0_0x32d519(_0x5f29af,_0x17931d(0x174)));}catch{}return{};}var R=_(),Y=process.env.COMMHUB_URL||R[a0_0x385446(0x12c)]||a0_0x385446(0x170),j=process.env.COMMHUB_TMUX||E();function S(){const _0x48ab19=a0_0x385446;if(process.env.COMMHUB_ALIAS&&process.env.COMMHUB_ALIAS[_0x48ab19(0x16c)]())return process.env.COMMHUB_ALIAS['trim']();return process[_0x48ab19(0x168)][_0x48ab19(0x10d)]('[commhub]\x20WARN:\x20COMMHUB_ALIAS\x20env\x20var\x20is\x20unset\x20—\x20outbound\x20from_session\x20'+(_0x48ab19(0xee)+(j||_0x48ab19(0xf5))+_0x48ab19(0xd4)+a0_0x163ae3()+_0x48ab19(0xcf))),_0x48ab19(0x11f)+process[_0x48ab19(0x108)];}var p=S(),V=process.env.COMMHUB_RESUME_ID||process.env.CLAUDE_RESUME_ID||a0_0x5a2575(),k=process.env.COMMHUB_TOKEN||R[a0_0x385446(0xdd)]||'';function z(_0xe9c706){const _0x731702=a0_0x385446;let _0x44f7ca=new Date()['toTimeString']()[_0x731702(0x15e)](0x0,0x8);process['stderr'][_0x731702(0x10d)]('['+_0x44f7ca+_0x731702(0x150)+_0xe9c706+'\x0a');}function i(_0x1a5312){return new Promise(_0x51757b=>setTimeout(_0x51757b,_0x1a5312));}function a0_0x2865(_0x488a2b,_0x55a275){_0x488a2b=_0x488a2b-0xcb;const _0x4b3d3d=a0_0x4b3d();let _0x28657b=_0x4b3d3d[_0x488a2b];return _0x28657b;}z('ENV:\x20URL='+Y+a0_0x385446(0xf1)+p+a0_0x385446(0x148)+V[a0_0x385446(0x15e)](0x0,0x8)+a0_0x385446(0xeb)+(j||a0_0x385446(0x157))+a0_0x385446(0x13e)+process[a0_0x385446(0x161)]()+a0_0x385446(0x16e)+H);var G=new Map(),K=new a0_0x38f832({'name':a0_0x385446(0x12a),'version':a0_0x385446(0x175)},{'capabilities':{'experimental':{'claude/channel':{}},'tools':{}},'instructions':[a0_0x385446(0xe9),a0_0x385446(0xea),a0_0x385446(0x112),a0_0x385446(0xfa),a0_0x385446(0x143)+p][a0_0x385446(0xd7)]('\x0a')});K['setRequestHandler'](a0_0x42b373,async()=>({'tools':[{'name':'commhub_reply','description':a0_0x385446(0x118),'inputSchema':{'type':'object','properties':{'task_id':{'type':'string','description':a0_0x385446(0x113)},'text':{'type':a0_0x385446(0x106),'description':a0_0x385446(0x121)},'status':{'type':a0_0x385446(0x106),'enum':['completed',a0_0x385446(0xfe),a0_0x385446(0x171),a0_0x385446(0x152),a0_0x385446(0x163),a0_0x385446(0x104)],'description':a0_0x385446(0x12f)}},'required':[a0_0x385446(0x101)]}},{'name':a0_0x385446(0x13b),'description':a0_0x385446(0x136),'inputSchema':{'type':a0_0x385446(0x138),'properties':{'status':{'type':a0_0x385446(0x106),'enum':[a0_0x385446(0x111),a0_0x385446(0x16f),a0_0x385446(0x152),'error']},'task':{'type':a0_0x385446(0x106),'description':a0_0x385446(0x11d)},'progress':{'type':a0_0x385446(0x133),'description':a0_0x385446(0xce)}},'required':[a0_0x385446(0xd9)]}},{'name':'commhub_send_task','description':a0_0x385446(0x13f),'inputSchema':{'type':a0_0x385446(0x138),'properties':{'alias':{'type':a0_0x385446(0x106),'description':a0_0x385446(0x167)},'task':{'type':a0_0x385446(0x106),'description':'Task\x20content'},'priority':{'type':a0_0x385446(0x106),'enum':[a0_0x385446(0xd5),a0_0x385446(0x10a),'low'],'description':a0_0x385446(0xff)}},'required':[a0_0x385446(0x12d),a0_0x385446(0xdf)]}},{'name':a0_0x385446(0x15f),'description':a0_0x385446(0xef),'inputSchema':{'type':a0_0x385446(0x138),'properties':{'alias':{'type':'string','description':a0_0x385446(0x167)},'message':{'type':a0_0x385446(0x106),'description':a0_0x385446(0x151)}},'required':[a0_0x385446(0x12d),a0_0x385446(0x123)]}},{'name':'commhub_get_all_status','description':a0_0x385446(0x16b),'inputSchema':{'type':a0_0x385446(0x138),'properties':{}}}]}));async function Q(_0x50552d,_0xddabe6){const _0x2599cb=a0_0x385446;let _0x73a358=await fetch(Y+_0x2599cb(0x146),{'method':_0x2599cb(0xcc),'headers':{'Content-Type':_0x2599cb(0x110),'Accept':_0x2599cb(0x141),...k?{'Authorization':'Bearer\x20'+k}:{}},'body':JSON['stringify']({'jsonrpc':_0x2599cb(0x122),'id':0x1,'method':_0x2599cb(0xe0),'params':{'protocolVersion':_0x2599cb(0xf8),'capabilities':{},'clientInfo':{'name':_0x2599cb(0x12a),'version':'0.3.0'}}})});if(!_0x73a358['ok']){let _0x21750e=await _0x73a358[_0x2599cb(0x101)]();return z('CommHub\x20init\x20failed:\x20'+_0x73a358[_0x2599cb(0xd9)]+'\x20'+_0x21750e[_0x2599cb(0x15e)](0x0,0x64)),{'ok':!0x1,'error':_0x2599cb(0x169)+_0x73a358[_0x2599cb(0xd9)]};}await _0x73a358[_0x2599cb(0x101)]();let _0x5d27c9=(await(await fetch(Y+_0x2599cb(0x146),{'method':_0x2599cb(0xcc),'headers':{'Content-Type':_0x2599cb(0x110),'Accept':'application/json,\x20text/event-stream',...k?{'Authorization':_0x2599cb(0x114)+k}:{}},'body':JSON[_0x2599cb(0x158)]({'jsonrpc':'2.0','id':0x2,'method':_0x2599cb(0x14d),'params':{'name':_0x50552d,'arguments':_0xddabe6}})}))[_0x2599cb(0x101)]())['split']('\x0a')[_0x2599cb(0x115)](_0x204983=>_0x204983[_0x2599cb(0xe4)](_0x2599cb(0xd1)));if(_0x5d27c9){let _0x294c7c=JSON[_0x2599cb(0x137)](_0x5d27c9['slice'](0x6));return _0x294c7c?.[_0x2599cb(0x164)]?.[_0x2599cb(0x10f)]?.[0x0]?.['text']?JSON[_0x2599cb(0x137)](_0x294c7c[_0x2599cb(0x164)][_0x2599cb(0x10f)][0x0]['text']):_0x294c7c;}return{'ok':!0x1,'error':'no\x20response'};}K[a0_0x385446(0x14c)](a0_0x308c43,async _0x200fbc=>{const _0x286a08=a0_0x385446;let {name:_0x46e25e,arguments:_0xfea5aa}=_0x200fbc[_0x286a08(0x16d)];if(_0x46e25e===_0x286a08(0xf7)){let {task_id:_0x5c30c1,text:_0x284fa1,status:_0x3d8b0b}=_0xfea5aa;if(_0x3d8b0b==='completed'||_0x3d8b0b===_0x286a08(0xfe)||_0x3d8b0b==='cancelled'){let _0x43b5c1=_0x3d8b0b===_0x286a08(0x139)?_0x286a08(0x126):_0x3d8b0b,_0x415ebc=_0x5c30c1?G['get'](_0x5c30c1)||_0x286a08(0x12c):_0x286a08(0x12c),_0x4ef21a=await Q(_0x286a08(0x142),{'alias':_0x415ebc,'text':_0x284fa1,'in_reply_to':_0x5c30c1||void 0x0,'status':_0x43b5c1,'from_session':p});if(_0x5c30c1)G[_0x286a08(0x10b)](_0x5c30c1);return{'content':[{'type':'text','text':JSON[_0x286a08(0x158)](_0x4ef21a)}]};}let _0x1e6111=await Q('report_status',{'resume_id':V,'alias':p,'status':_0x3d8b0b===_0x286a08(0x152)?_0x286a08(0x152):_0x3d8b0b===_0x286a08(0x163)?'error':'working','task':_0x284fa1[_0x286a08(0x15e)](0x0,0xc8),'output':_0x284fa1});return{'content':[{'type':'text','text':JSON['stringify'](_0x1e6111)}]};}if(_0x46e25e===_0x286a08(0x13b)){let {status:_0x3d6ef1,task:_0x3fbc68,progress:_0x280826}=_0xfea5aa,_0x38ccd8=await Q(_0x286a08(0xe5),{'resume_id':V,'alias':p,'status':_0x3d6ef1,'task':_0x3fbc68,'progress':_0x280826});return{'content':[{'type':_0x286a08(0x101),'text':JSON[_0x286a08(0x158)](_0x38ccd8)}]};}if(_0x46e25e===_0x286a08(0xd6)){let {alias:_0x464759,task:_0x21d34b,priority:_0x2b51f5}=_0xfea5aa,_0x1c90bb=await Q(_0x286a08(0x130),{'alias':_0x464759,'task':_0x21d34b,'priority':_0x2b51f5||'normal','from_session':p});return{'content':[{'type':_0x286a08(0x101),'text':JSON[_0x286a08(0x158)](_0x1c90bb)}]};}if(_0x46e25e===_0x286a08(0x15f)){let {alias:_0xfa0ba3,message:_0x51b36d}=_0xfea5aa,_0x43fa1f=await Q(_0x286a08(0xe1),{'alias':_0xfa0ba3,'message':_0x51b36d,'from_session':p});return{'content':[{'type':'text','text':JSON['stringify'](_0x43fa1f)}]};}if(_0x46e25e===_0x286a08(0xd2)){let _0x2c7db4=await Q('get_all_status',{});return{'content':[{'type':'text','text':JSON[_0x286a08(0x158)](_0x2c7db4)}]};}return{'content':[{'type':_0x286a08(0x101),'text':JSON[_0x286a08(0x158)]({'error':_0x286a08(0x109)})}]};});var D=0x3e8,v=0x7530,O=0x36ee80;async function m(){const _0x3271c8=a0_0x385446;try{await Q(_0x3271c8(0xe5),{'resume_id':V,'alias':p,'status':_0x3271c8(0x16f),'server':a0_0x163ae3(),'hostname':a0_0x163ae3(),'agent':_0x3271c8(0xd8),'project_dir':process[_0x3271c8(0x161)](),'tmux_name':j||void 0x0}),z(_0x3271c8(0xde)+p+_0x3271c8(0x15d));}catch(_0x5dfdf9){z(_0x3271c8(0xf9)+_0x5dfdf9);}}async function l(){const _0x352cb7=a0_0x385446;let _0x22b46c=Y+_0x352cb7(0xf0)+encodeURIComponent(p),_0x33a419={};if(k)_0x33a419['Authorization']=_0x352cb7(0x114)+k;z(_0x352cb7(0x11a)+_0x22b46c);let _0x1fc32b=D,_0x515759=!0x0,_0xdc3ff4=null;while(!0x0){try{let _0xc7b0e5=await fetch(_0x22b46c,{'headers':_0x33a419});if(!_0xc7b0e5['ok']){if(z(_0x352cb7(0xf4)+_0xc7b0e5['status']+'\x20'+_0xc7b0e5[_0x352cb7(0x131)]),_0xdc3ff4=_0xdc3ff4??Date['now'](),Date[_0x352cb7(0xf6)]()-_0xdc3ff4>O){z(_0x352cb7(0x140)+Y+_0x352cb7(0x160));return;}await i(_0x1fc32b),_0x1fc32b=Math[_0x352cb7(0xe8)](_0x1fc32b*0x2,v);continue;}let _0x28ea80=_0xc7b0e5[_0x352cb7(0xfc)][_0x352cb7(0xdc)](),_0x369f46=new TextDecoder(),_0xaf27b1='';_0x1fc32b=D;while(!0x0){let {done:_0x956aaa,value:_0x49f823}=await _0x28ea80[_0x352cb7(0xcd)]();if(_0x956aaa)break;_0xaf27b1+=_0x369f46[_0x352cb7(0x135)](_0x49f823,{'stream':!0x0});let _0x173552=_0xaf27b1[_0x352cb7(0x12b)]('\x0a\x0a');_0xaf27b1=_0x173552[_0x352cb7(0xcb)]()||'';for(let _0x2def7f of _0x173552){let _0x486b0b=_0x2def7f[_0x352cb7(0x12b)]('\x0a')['find'](_0x4ae041=>_0x4ae041['startsWith'](_0x352cb7(0xd1)));if(!_0x486b0b)continue;try{let _0x134839=JSON['parse'](_0x486b0b[_0x352cb7(0x15e)](0x6));if(await A(_0x134839),_0x134839[_0x352cb7(0x10e)]===_0x352cb7(0x105)){if(_0xdc3ff4=null,!_0x515759)await m();_0x515759=!0x1;}}catch(_0x443220){z(_0x352cb7(0x165)+_0x443220);}}}z(_0x352cb7(0x172));}catch(_0x5e5d50){z('SSE\x20connection\x20error:\x20'+_0x5e5d50);}if(_0xdc3ff4=_0xdc3ff4??Date[_0x352cb7(0xf6)](),Date[_0x352cb7(0xf6)]()-_0xdc3ff4>O){z(_0x352cb7(0x140)+Y+')\x20—\x20放弃自动重连。手动\x20anet\x20node\x20start\x20恢复。');return;}await i(_0x1fc32b),_0x1fc32b=Math['min'](_0x1fc32b*0x2,v);}}async function A(_0x1d081c){const _0x4f8819=a0_0x385446;if(_0x1d081c['type']==='connected'){z(_0x4f8819(0x13a)+p+'\x22');return;}if(_0x1d081c[_0x4f8819(0x10e)]==='new_message'){if(z('←\x20message\x20from\x20'+_0x1d081c['from']+':\x20'+_0x1d081c['message']['slice'](0x0,0x3c)),await K[_0x4f8819(0xda)]({'method':_0x4f8819(0x166),'params':{'content':_0x1d081c['message'],'meta':{'sender':_0x1d081c[_0x4f8819(0x154)]||_0x4f8819(0x12c),'sender_id':'commhub','user':_0x1d081c[_0x4f8819(0x154)]||_0x4f8819(0x12c),'priority':_0x4f8819(0x10a)}}}),_0x1d081c['message_id'])await Q(_0x4f8819(0x117),{'alias':p,'message_id':_0x1d081c[_0x4f8819(0x147)]});return;}if(_0x1d081c[_0x4f8819(0x10e)]==='new_task'||_0x1d081c[_0x4f8819(0x10e)]===_0x4f8819(0xec)){z('←\x20'+_0x1d081c[_0x4f8819(0x10e)]+_0x4f8819(0x13d)+_0x1d081c[_0x4f8819(0xf2)]+'\x20priority='+(_0x1d081c[_0x4f8819(0x128)]||_0x4f8819(0x10a)));let _0x50fd7e=await Q(_0x4f8819(0x145),{'alias':p,'limit':0x5});if(_0x50fd7e?.['ok']&&_0x50fd7e['messages']?.[_0x4f8819(0xf3)]>0x0)for(let _0x3455d8 of _0x50fd7e[_0x4f8819(0xe6)]){let _0x496e12={'sender':_0x3455d8[_0x4f8819(0x132)]||_0x4f8819(0x12c),'sender_id':_0x4f8819(0x124),'user':_0x3455d8[_0x4f8819(0x132)]||'hub','task_id':_0x3455d8['id'],'priority':_0x3455d8[_0x4f8819(0x128)]||_0x4f8819(0x10a)};G['set'](_0x3455d8['id'],_0x3455d8[_0x4f8819(0x132)]||_0x4f8819(0x12c)),await K['notification']({'method':'notifications/claude/channel','params':{'content':_0x3455d8['content'],'meta':_0x496e12}}),z(_0x4f8819(0x15a)+_0x3455d8['id'][_0x4f8819(0x15e)](0x0,0x8)+_0x4f8819(0x15c)+_0x3455d8[_0x4f8819(0x132)]+':\x20'+_0x3455d8[_0x4f8819(0x10f)]['slice'](0x0,0x3c)),await Q(_0x4f8819(0x117),{'alias':p,'message_id':_0x3455d8['id']});}}}async function t(){const _0x522ab3=a0_0x385446;let _0x2cba0a=new a0_0x216f86();await K['connect'](_0x2cba0a),z(_0x522ab3(0xd3)),z(_0x522ab3(0x16a)),l()[_0x522ab3(0x103)](_0x13b9f4=>z(_0x522ab3(0x11c)+_0x13b9f4)),Q(_0x522ab3(0xe5),{'resume_id':V,'alias':p,'status':_0x522ab3(0x16f),'server':a0_0x163ae3(),'hostname':a0_0x163ae3(),'agent':'claude-code','project_dir':process[_0x522ab3(0x161)](),'tmux_name':j||void 0x0})[_0x522ab3(0xed)](()=>z(_0x522ab3(0xfb)+p+'\x22\x20('+V['slice'](0x0,0x8)+')'))[_0x522ab3(0x103)](_0x323d5c=>z('warning:\x20could\x20not\x20register:\x20'+_0x323d5c)),setInterval(()=>{const _0x58526e=_0x522ab3;Q(_0x58526e(0xe5),{'resume_id':V,'alias':p,'status':_0x58526e(0x16f),'server':a0_0x163ae3(),'hostname':a0_0x163ae3(),'agent':'claude-code','project_dir':process[_0x58526e(0x161)](),'tmux_name':j||void 0x0})[_0x58526e(0x103)](_0x414a11=>z('heartbeat\x20failed:\x20'+_0x414a11));},0x2bf20),z(_0x522ab3(0x116));}t()[a0_0x385446(0x103)](_0x101f63=>{const _0x25ce4c=a0_0x385446;z(_0x25ce4c(0x12e)+_0x101f63),process[_0x25ce4c(0x120)](0x1);});function a0_0x4b3d(){const _0x1df802=['in_progress','connected','string','6590577jTOMCs','pid','unknown\x20tool','normal','delete','tmux\x20display-message\x20-p\x20\x27#S\x27','write','type','content','application/json','working','Reply\x20using\x20the\x20commhub_reply\x20tool.\x20IMPORTANT:\x20to\x20make\x20your\x20reply\x20appear\x20in\x20the\x20Dashboard\x20chat\x20and\x20reach\x20the\x20sender\x20in\x20real\x20time,\x20use\x20status=\x22completed\x22\x20(a\x20terminal\x20status:\x20completed/failed/cancelled)\x20—\x20that\x20routes\x20to\x20send_reply\x20and\x20emits\x20the\x20new_reply\x20SSE\x20event\x20the\x20Dashboard\x20listens\x20for.\x20A\x20non-terminal\x20status\x20(in_progress/blocked/error)\x20only\x20updates\x20your\x20session\x20status\x20via\x20report_status\x20and\x20does\x20NOT\x20show\x20in\x20the\x20Dashboard,\x20even\x20though\x20the\x20call\x20returns\x20ok.','The\x20task_id\x20from\x20the\x20channel\x20message\x20(or\x20\x27hub\x27\x20for\x20general)','Bearer\x20','find','ready\x20—\x20waiting\x20for\x20events','ack_inbox','Reply\x20to\x20a\x20CommHub\x20task.\x20Use\x20status=\x22completed\x22\x20(terminal)\x20to\x20push\x20the\x20reply\x20to\x20the\x20Dashboard/sender\x20in\x20real\x20time\x20(send_reply\x20→\x20new_reply\x20SSE);\x20non-terminal\x20status\x20(in_progress/blocked/error)\x20only\x20updates\x20session\x20status\x20(report_status)\x20and\x20does\x20NOT\x20reach\x20the\x20Dashboard.','config.json','connecting\x20to\x20','2725848iDDoxV','SSE\x20fatal:\x20','Current\x20task\x20description','function','unattributed-','exit','Reply\x20text\x20/\x20result\x20summary','2.0','message','commhub','replace','replied','offline','priority','3343184bCraRT','commhub-channel','split','hub','alias','fatal:\x20','Task\x20outcome:\x20completed/failed/cancelled\x20for\x20final\x20results,\x20blocked/error/in_progress\x20for\x20status\x20updates','send_task','statusText','from_session','number','shutting\x20down,\x20reporting\x20offline...','decode','Update\x20this\x20session\x27s\x20status\x20in\x20CommHub\x20(working/idle/blocked/error).\x20Returns\x20inbox_count.','parse','object','completed','SSE\x20connected\x20as\x20\x22','commhub_report_status','ppid',':\x20inbox_count=','\x20CWD=','Send\x20a\x20task\x20to\x20another\x20session\x20via\x20CommHub.','SSE\x20连续\x20>1h\x20连不上\x20hub\x20(','application/json,\x20text/event-stream','send_reply','Session\x20alias:\x20','2437395oQRKEf','get_inbox','/mcp','message_id','\x20RESUME_ID=','\x20no\x20longer\x20exists\x20(kill-0\x20ESRCH)\x20—\x20self-exit\x20to\x20avoid\x20ghost\x20heart-beat','session\x20disconnected','parent\x20claude\x20died\x20(reparented\x20to\x20PID\x201\x20from\x20','setRequestHandler','tools/call','246WZRqKi','unref',']\x20[commhub]\x20','Message\x20content','blocked','code','from','17870pfyeMQ',')\x20—\x20self-exit\x20to\x20avoid\x20ghost\x20heart-beat','none','stringify','102010ZFkOkh','→\x20injected\x20task\x20','end','\x20from\x20','\x22\x20after\x20SSE\x20reconnect','slice','commhub_send_message',')\x20—\x20放弃自动重连。手动\x20anet\x20node\x20start\x20恢复。','cwd','786974fnbSqe','error','result','parse\x20error:\x20','notifications/claude/channel','Target\x20session\x20alias','stderr','init\x20failed:\x20','starting\x20SSE\x20listener...','Get\x20status\x20of\x20all\x20sessions\x20from\x20CommHub.','trim','params','\x20PROJECT_ENV=','idle','http://127.0.0.1:9200','cancelled','SSE\x20stream\x20ended,\x20reconnecting...','.env','utf-8','0.3.0','pop','POST','read','Progress\x200-100','.\x20Restart\x20node\x20via\x20`anet\x20node\x20start\x20<alias>`\x20so\x20the\x20env\x20is\x20set\x20explicitly\x20(#203).\x0a','ESRCH','data:\x20','commhub_get_all_status','MCP\x20stdio\x20connected','\x20/\x20hostname=','high','commhub_send_task','join','claude-code','status','notification','2JBjLqt','getReader','token','re-registered\x20as\x20\x22','task','initialize','send_message','kill','8955yJefmy','startsWith','report_status','messages','indexOf','min','Messages\x20from\x20CommHub\x20arrive\x20as\x20<channel\x20source=\x22commhub\x22\x20task_id=\x22...\x22\x20priority=\x22...\x22\x20from=\x22...\x22>','These\x20are\x20tasks\x20dispatched\x20by\x20the\x20hub\x20or\x20other\x20sessions\x20via\x20the\x20CommHub\x20Server.','...\x20TMUX=','broadcast','then','would\x20mis-attribute.\x20Refusing\x20to\x20guess\x20from\x20TMUX_NAME=','Send\x20a\x20message\x20to\x20another\x20session\x20(no\x20task\x20lifecycle,\x20just\x20chat).\x20Use\x20for\x20replies\x20and\x20status\x20updates.','/events/','\x20ALIAS=','inbox_count','length','SSE\x20error:\x20','(none)','now','commhub_reply','2025-03-26','re-register\x20failed:\x20','You\x20can\x20also\x20use\x20commhub_report_status\x20to\x20update\x20your\x20session\x20status.','registered\x20as\x20\x22','body','SIGTERM','failed','Priority\x20(default:\x20normal)','parent\x20claude\x20pid=','text','stdin','catch'];a0_0x4b3d=function(){return _0x1df802;};return a0_0x4b3d();}async function b(){const _0x40438e=a0_0x385446;z(_0x40438e(0x134)),await Q(_0x40438e(0xe5),{'resume_id':V,'alias':p,'status':_0x40438e(0x127),'task':_0x40438e(0x14a)})['catch'](()=>{}),process[_0x40438e(0x120)](0x0);}process[a0_0x385446(0x102)]['on'](a0_0x385446(0x15b),()=>b()),process['on'](a0_0x385446(0xfd),()=>b()),process['on']('SIGINT',()=>b());var d=process[a0_0x385446(0x13c)];if(d&&d>0x1){let h=setInterval(()=>{const _0x342bd1=a0_0x385446;if(process[_0x342bd1(0x13c)]===0x1&&d!==0x1){z(_0x342bd1(0x14b)+d+_0x342bd1(0x156)),b();return;}try{process[_0x342bd1(0xe2)](d,0x0);}catch(_0x2f0c37){if(_0x2f0c37?.[_0x342bd1(0x153)]===_0x342bd1(0xd0))z(_0x342bd1(0x100)+d+_0x342bd1(0x149)),b();}},0x7530);if(typeof h[a0_0x385446(0x14f)]===a0_0x385446(0x11e))h[a0_0x385446(0x14f)]();}
2
+ const a0_0x3998da=a0_0x497d;(function(_0x51f69e,_0xb5e54a){const _0x5aa0d3=a0_0x497d,_0x14ecfb=_0x51f69e();while(!![]){try{const _0x3c4231=parseInt(_0x5aa0d3(0x12c))/0x1*(parseInt(_0x5aa0d3(0x119))/0x2)+-parseInt(_0x5aa0d3(0x105))/0x3+-parseInt(_0x5aa0d3(0x15c))/0x4+parseInt(_0x5aa0d3(0x10b))/0x5+parseInt(_0x5aa0d3(0x185))/0x6+parseInt(_0x5aa0d3(0x17d))/0x7+parseInt(_0x5aa0d3(0x141))/0x8*(-parseInt(_0x5aa0d3(0x113))/0x9);if(_0x3c4231===_0xb5e54a)break;else _0x14ecfb['push'](_0x14ecfb['shift']());}catch(_0x176713){_0x14ecfb['push'](_0x14ecfb['shift']());}}}(a0_0x5b0c,0x297fb));import{readFileSync as a0_0xb14a48,existsSync as a0_0x4e597a}from'fs';import{randomUUID as a0_0x59272c}from'crypto';import{join as a0_0x3fa273}from'path';import{hostname as a0_0xd1cc4e}from'os';import{execSync as a0_0x2e0630}from'child_process';function B(_0xcd48dc){const _0x23a6ed=a0_0x497d;let _0x3d2961=_0xcd48dc['replace'](/[^a-zA-Z0-9\-_]/g,'-');return _0x3d2961===''?_0x23a6ed(0xff):_0x3d2961;}import{Server as a0_0x417339}from'@modelcontextprotocol/sdk/server/index.js';import{StdioServerTransport as a0_0xc4434c}from'@modelcontextprotocol/sdk/server/stdio.js';import{ListToolsRequestSchema as a0_0x5b019d,CallToolRequestSchema as a0_0x44159d}from'@modelcontextprotocol/sdk/types.js';function T(_0x30c0d8){const _0x8bc4c8=a0_0x497d;if(!a0_0x4e597a(_0x30c0d8))return;for(let _0x22a5a7 of a0_0xb14a48(_0x30c0d8,_0x8bc4c8(0x180))[_0x8bc4c8(0x132)]('\x0a')){let _0x2064ba=_0x22a5a7[_0x8bc4c8(0xfc)]();if(!_0x2064ba||_0x2064ba[_0x8bc4c8(0x16f)]('#'))continue;let _0x561314=_0x2064ba[_0x8bc4c8(0x179)]('=');if(_0x561314<0x0)continue;let _0x36fc57=_0x2064ba[_0x8bc4c8(0x193)](0x0,_0x561314)[_0x8bc4c8(0xfc)](),_0x32b677=_0x2064ba[_0x8bc4c8(0x193)](_0x561314+0x1)[_0x8bc4c8(0xfc)]()[_0x8bc4c8(0x139)](/^["']|["']$/g,'');if(!process.env[_0x36fc57])process.env[_0x36fc57]=_0x32b677;}}var C=process.env.HOME||'~',r=a0_0x3fa273(C,'.claude/channels/commhub');function a0_0x5b0c(){const _0x36d998=['utf-8','Session\x20alias:\x20','unref',']\x20[commhub]\x20','Task\x20outcome:\x20completed/failed/cancelled\x20for\x20final\x20results,\x20blocked/error/in_progress\x20for\x20status\x20updates','1087032XHTiqc','failed','content','commhub_report_status',')\x20—\x20放弃自动重连。手动\x20anet\x20node\x20start\x20恢复。','none','2.0','send_task','Send\x20a\x20message\x20to\x20another\x20session\x20(no\x20task\x20lifecycle,\x20just\x20chat).\x20Use\x20for\x20replies\x20and\x20status\x20updates.','SSE\x20error:\x20','\x20RESUME_ID=','notification','low','cwd','slice','connected','get','text','catch','high','task',':\x20inbox_count=','trim','send_reply','read','unknown','messages','2025-03-26','length','/events/','Send\x20a\x20task\x20to\x20another\x20session\x20via\x20CommHub.','149097VzEDbr','Task\x20content','type','working','set','re-register\x20failed:\x20','574205DPGnXJ','now','code','\x20PROJECT_ENV=','Reply\x20to\x20a\x20Dashboard/UI-originated\x20CommHub\x20task.\x20⚠\x20For\x20agent-to-agent\x20replies\x20use\x20commhub_send_task\x20instead\x20—\x20commhub_reply\x20does\x20NOT\x20wake\x20agent\x20peers\x20via\x20SSE\x20(Vincent\x202026-07-28\x20全网规则).\x20status=\x22completed\x22\x20(terminal)\x20routes\x20to\x20send_reply\x20and\x20emits\x20new_reply\x20SSE\x20for\x20the\x20live\x20Dashboard;\x20non-terminal\x20status\x20(in_progress/blocked/error)\x20only\x20updates\x20session\x20status\x20(report_status)\x20and\x20does\x20NOT\x20reach\x20the\x20Dashboard.','Get\x20status\x20of\x20all\x20sessions\x20from\x20CommHub.','decode','statusText','9OeJacA','normal','commhub_send_task','POST','Current\x20task\x20description','parent\x20claude\x20died\x20(reparented\x20to\x20PID\x201\x20from\x20','6ANKPhy','→\x20injected\x20task\x20','send_message','unknown\x20tool','blocked','SSE\x20连续\x20>1h\x20连不上\x20hub\x20(','.anet','Reply\x20text\x20/\x20result\x20summary','stdin','ppid','result','commhub_reply','commhub','report_status','warning:\x20could\x20not\x20register:\x20','SSE\x20connected\x20as\x20\x22','commhub_get_all_status','Progress\x200-100','completed','16202DdDXvL','parse','message_id','MCP\x20stdio\x20connected','\x20ALIAS=','session\x20disconnected','split','setRequestHandler','claude-code','function','http://127.0.0.1:9200','commhub-channel','SSE\x20connection\x20error:\x20','replace','replied','pid','Bearer\x20','registered\x20as\x20\x22','SSE\x20fatal:\x20','(none)','initialize','2996296peoWYW','toTimeString','find','Messages\x20from\x20CommHub\x20arrive\x20as\x20<channel\x20source=\x22commhub\x22\x20task_id=\x22...\x22\x20priority=\x22...\x22\x20from=\x22...\x22>','/mcp','SIGTERM','notifications/claude/channel','application/json','data:\x20','ack_inbox','0.3.0','\x20\x20•\x20If\x20the\x20sender\x20is\x20another\x20agent\x20node\x20(from\x20CommHub,\x20from\x20your\x20peer\x27s\x20session\x20alias),\x20reply\x20with\x20commhub_send_task(alias=\x22<their\x20alias>\x22,\x20task=\x22<your\x20reply>\x22).\x20This\x20creates\x20a\x20new\x20routable\x20task\x20that\x20wakes\x20the\x20peer\x20via\x20new_task\x20SSE\x20so\x20they\x20process\x20it.\x20commhub_reply\x20does\x20NOT\x20wake\x20agent\x20peers\x20—\x20they\x27d\x20only\x20see\x20it\x20on\x20the\x20next\x20inbox\x20poll\x20(Vincent\x202026-07-28\x20全网规则).','then','connect','[commhub]\x20WARN:\x20COMMHUB_ALIAS\x20env\x20var\x20is\x20unset\x20—\x20outbound\x20from_session\x20','min','\x20/\x20hostname=','priority','stringify','write','SIGINT','You\x20can\x20also\x20use\x20commhub_report_status\x20to\x20update\x20your\x20session\x20status.','exit','kill','shutting\x20down,\x20reporting\x20offline...','hub','\x20CWD=','308764SeRrgP','idle','Priority\x20(default:\x20normal)','message','no\x20response','end','.env','from','fatal:\x20','pop','ENV:\x20URL=','params','init\x20failed:\x20','config.json','status','tools/call','heartbeat\x20failed:\x20','from_session','cancelled','startsWith','new_message','parent\x20claude\x20pid=','tmux\x20display-message\x20-p\x20\x27#S\x27','in_progress','string','\x22\x20after\x20SSE\x20reconnect','token','ready\x20—\x20waiting\x20for\x20events','starting\x20SSE\x20listener...','indexOf','stderr','Target\x20session\x20alias','unattributed-','2287509jtjsOm','object','error'];a0_0x5b0c=function(){return _0x36d998;};return a0_0x5b0c();}T(a0_0x3fa273(r,a0_0x3998da(0x162)));var H=B(process[a0_0x3998da(0x192)]());T(a0_0x3fa273(r,H,a0_0x3998da(0x162)));function E(){const _0x30a24b=a0_0x3998da;try{return a0_0x2e0630(_0x30a24b(0x172),{'encoding':_0x30a24b(0x180),'timeout':0x7d0})[_0x30a24b(0xfc)]();}catch{return'';}}function _(){const _0x80465=a0_0x3998da;try{let _0x4684b4=a0_0x3fa273(C,_0x80465(0x11f),_0x80465(0x169));if(a0_0x4e597a(_0x4684b4))return JSON[_0x80465(0x12d)](a0_0xb14a48(_0x4684b4,_0x80465(0x180)));}catch{}return{};}var R=_(),Y=process.env.COMMHUB_URL||R[a0_0x3998da(0x15a)]||a0_0x3998da(0x136),j=process.env.COMMHUB_TMUX||E();function a0_0x497d(_0x2b7237,_0x1da58b){_0x2b7237=_0x2b7237-0xf5;const _0x5b0c1d=a0_0x5b0c();let _0x497d38=_0x5b0c1d[_0x2b7237];return _0x497d38;}function S(){const _0xf8d3ec=a0_0x3998da;if(process.env.COMMHUB_ALIAS&&process.env.COMMHUB_ALIAS['trim']())return process.env.COMMHUB_ALIAS['trim']();return process[_0xf8d3ec(0x17a)][_0xf8d3ec(0x154)](_0xf8d3ec(0x14f)+('would\x20mis-attribute.\x20Refusing\x20to\x20guess\x20from\x20TMUX_NAME='+(j||_0xf8d3ec(0x13f))+_0xf8d3ec(0x151)+a0_0xd1cc4e()+'.\x20Restart\x20node\x20via\x20`anet\x20node\x20start\x20<alias>`\x20so\x20the\x20env\x20is\x20set\x20explicitly\x20(#203).\x0a')),_0xf8d3ec(0x17c)+process[_0xf8d3ec(0x13b)];}var p=S(),V=process.env.COMMHUB_RESUME_ID||process.env.CLAUDE_RESUME_ID||a0_0x59272c(),k=process.env.COMMHUB_TOKEN||R[a0_0x3998da(0x176)]||'';function z(_0x21b7ba){const _0x1538bd=a0_0x3998da;let _0x322f6b=new Date()[_0x1538bd(0x142)]()[_0x1538bd(0x193)](0x0,0x8);process[_0x1538bd(0x17a)]['write']('['+_0x322f6b+_0x1538bd(0x183)+_0x21b7ba+'\x0a');}function i(_0xddae49){return new Promise(_0x32bd71=>setTimeout(_0x32bd71,_0xddae49));}z(a0_0x3998da(0x166)+Y+a0_0x3998da(0x130)+p+a0_0x3998da(0x18f)+V[a0_0x3998da(0x193)](0x0,0x8)+'...\x20TMUX='+(j||a0_0x3998da(0x18a))+a0_0x3998da(0x15b)+process[a0_0x3998da(0x192)]()+a0_0x3998da(0x10e)+H);var G=new Map(),K=new a0_0x417339({'name':a0_0x3998da(0x137),'version':'0.3.0'},{'capabilities':{'experimental':{'claude/channel':{}},'tools':{}},'instructions':[a0_0x3998da(0x144),'These\x20are\x20tasks\x20dispatched\x20by\x20the\x20hub\x20or\x20other\x20sessions\x20via\x20the\x20CommHub\x20Server.','Reply\x20routing\x20(IMPORTANT\x20—\x20the\x20tool\x20you\x20pick\x20determines\x20whether\x20the\x20receiver\x20actually\x20gets\x20woken\x20up):',a0_0x3998da(0x14c),'\x20\x20•\x20Only\x20use\x20commhub_reply\x20when\x20the\x20sender\x20is\x20the\x20Dashboard/UI\x20(task_id\x20came\x20from\x20a\x20browser\x20chat).\x20Use\x20status=\x22completed\x22\x20(terminal)\x20so\x20send_reply\x20routes\x20it,\x20updates\x20the\x20task\x20row\x20(Dashboard\x20displays\x20it),\x20and\x20emits\x20new_reply\x20SSE\x20for\x20the\x20live\x20Dashboard\x20viewer.\x20Non-terminal\x20status\x20(in_progress/blocked/error)\x20just\x20updates\x20your\x20session\x20status\x20and\x20does\x20NOT\x20reach\x20the\x20Dashboard.',a0_0x3998da(0x156),a0_0x3998da(0x181)+p]['join']('\x0a')});K[a0_0x3998da(0x133)](a0_0x5b019d,async()=>({'tools':[{'name':a0_0x3998da(0x124),'description':a0_0x3998da(0x10f),'inputSchema':{'type':a0_0x3998da(0x17e),'properties':{'task_id':{'type':'string','description':'The\x20task_id\x20from\x20the\x20channel\x20message\x20(or\x20\x27hub\x27\x20for\x20general)'},'text':{'type':a0_0x3998da(0x174),'description':a0_0x3998da(0x120)},'status':{'type':a0_0x3998da(0x174),'enum':[a0_0x3998da(0x12b),a0_0x3998da(0x186),a0_0x3998da(0x16e),'blocked',a0_0x3998da(0x17f),a0_0x3998da(0x173)],'description':a0_0x3998da(0x184)}},'required':[a0_0x3998da(0xf7)]}},{'name':a0_0x3998da(0x188),'description':'Update\x20this\x20session\x27s\x20status\x20in\x20CommHub\x20(working/idle/blocked/error).\x20Returns\x20inbox_count.','inputSchema':{'type':a0_0x3998da(0x17e),'properties':{'status':{'type':a0_0x3998da(0x174),'enum':['working','idle','blocked',a0_0x3998da(0x17f)]},'task':{'type':a0_0x3998da(0x174),'description':a0_0x3998da(0x117)},'progress':{'type':'number','description':a0_0x3998da(0x12a)}},'required':[a0_0x3998da(0x16a)]}},{'name':a0_0x3998da(0x115),'description':a0_0x3998da(0x104),'inputSchema':{'type':a0_0x3998da(0x17e),'properties':{'alias':{'type':'string','description':'Target\x20session\x20alias'},'task':{'type':'string','description':a0_0x3998da(0x106)},'priority':{'type':a0_0x3998da(0x174),'enum':[a0_0x3998da(0xf9),'normal',a0_0x3998da(0x191)],'description':a0_0x3998da(0x15e)}},'required':['alias',a0_0x3998da(0xfa)]}},{'name':'commhub_send_message','description':a0_0x3998da(0x18d),'inputSchema':{'type':a0_0x3998da(0x17e),'properties':{'alias':{'type':'string','description':a0_0x3998da(0x17b)},'message':{'type':a0_0x3998da(0x174),'description':'Message\x20content'}},'required':['alias',a0_0x3998da(0x15f)]}},{'name':'commhub_get_all_status','description':a0_0x3998da(0x110),'inputSchema':{'type':'object','properties':{}}}]}));async function Q(_0x1315ba,_0x40a4cf){const _0x7811c8=a0_0x3998da;let _0x3a4dd7=await fetch(Y+_0x7811c8(0x145),{'method':_0x7811c8(0x116),'headers':{'Content-Type':_0x7811c8(0x148),'Accept':'application/json,\x20text/event-stream',...k?{'Authorization':_0x7811c8(0x13c)+k}:{}},'body':JSON[_0x7811c8(0x153)]({'jsonrpc':_0x7811c8(0x18b),'id':0x1,'method':_0x7811c8(0x140),'params':{'protocolVersion':_0x7811c8(0x101),'capabilities':{},'clientInfo':{'name':_0x7811c8(0x137),'version':_0x7811c8(0x14b)}}})});if(!_0x3a4dd7['ok']){let _0x1b5ea0=await _0x3a4dd7[_0x7811c8(0xf7)]();return z('CommHub\x20init\x20failed:\x20'+_0x3a4dd7[_0x7811c8(0x16a)]+'\x20'+_0x1b5ea0[_0x7811c8(0x193)](0x0,0x64)),{'ok':!0x1,'error':_0x7811c8(0x168)+_0x3a4dd7['status']};}await _0x3a4dd7[_0x7811c8(0xf7)]();let _0x9e7fcd=(await(await fetch(Y+_0x7811c8(0x145),{'method':_0x7811c8(0x116),'headers':{'Content-Type':_0x7811c8(0x148),'Accept':'application/json,\x20text/event-stream',...k?{'Authorization':'Bearer\x20'+k}:{}},'body':JSON['stringify']({'jsonrpc':_0x7811c8(0x18b),'id':0x2,'method':_0x7811c8(0x16b),'params':{'name':_0x1315ba,'arguments':_0x40a4cf}})}))[_0x7811c8(0xf7)]())[_0x7811c8(0x132)]('\x0a')[_0x7811c8(0x143)](_0x206328=>_0x206328['startsWith'](_0x7811c8(0x149)));if(_0x9e7fcd){let _0x42a9a8=JSON[_0x7811c8(0x12d)](_0x9e7fcd[_0x7811c8(0x193)](0x6));return _0x42a9a8?.[_0x7811c8(0x123)]?.[_0x7811c8(0x187)]?.[0x0]?.[_0x7811c8(0xf7)]?JSON[_0x7811c8(0x12d)](_0x42a9a8[_0x7811c8(0x123)]['content'][0x0][_0x7811c8(0xf7)]):_0x42a9a8;}return{'ok':!0x1,'error':_0x7811c8(0x160)};}K['setRequestHandler'](a0_0x44159d,async _0x571893=>{const _0x4bc984=a0_0x3998da;let {name:_0xad1f02,arguments:_0x1e0f64}=_0x571893[_0x4bc984(0x167)];if(_0xad1f02===_0x4bc984(0x124)){let {task_id:_0x1a76c0,text:_0x4913cc,status:_0x35803a}=_0x1e0f64;if(_0x35803a===_0x4bc984(0x12b)||_0x35803a===_0x4bc984(0x186)||_0x35803a==='cancelled'){let _0x57a8fa=_0x35803a===_0x4bc984(0x12b)?_0x4bc984(0x13a):_0x35803a,_0x559a54=_0x1a76c0?G[_0x4bc984(0xf6)](_0x1a76c0)||_0x4bc984(0x15a):'hub',_0x49fc23=await Q(_0x4bc984(0xfd),{'alias':_0x559a54,'text':_0x4913cc,'in_reply_to':_0x1a76c0||void 0x0,'status':_0x57a8fa,'from_session':p});if(_0x1a76c0)G['delete'](_0x1a76c0);return{'content':[{'type':_0x4bc984(0xf7),'text':JSON['stringify'](_0x49fc23)}]};}let _0x5a5262=await Q('report_status',{'resume_id':V,'alias':p,'status':_0x35803a===_0x4bc984(0x11d)?_0x4bc984(0x11d):_0x35803a===_0x4bc984(0x17f)?_0x4bc984(0x17f):_0x4bc984(0x108),'task':_0x4913cc[_0x4bc984(0x193)](0x0,0xc8),'output':_0x4913cc});return{'content':[{'type':_0x4bc984(0xf7),'text':JSON['stringify'](_0x5a5262)}]};}if(_0xad1f02===_0x4bc984(0x188)){let {status:_0x589d8a,task:_0x5d08e1,progress:_0x1e2639}=_0x1e0f64,_0x22f75d=await Q('report_status',{'resume_id':V,'alias':p,'status':_0x589d8a,'task':_0x5d08e1,'progress':_0x1e2639});return{'content':[{'type':_0x4bc984(0xf7),'text':JSON['stringify'](_0x22f75d)}]};}if(_0xad1f02==='commhub_send_task'){let {alias:_0x5a415f,task:_0x1ea4a4,priority:_0x5d9ca9}=_0x1e0f64,_0x4aeec9=await Q(_0x4bc984(0x18c),{'alias':_0x5a415f,'task':_0x1ea4a4,'priority':_0x5d9ca9||_0x4bc984(0x114),'from_session':p});return{'content':[{'type':_0x4bc984(0xf7),'text':JSON[_0x4bc984(0x153)](_0x4aeec9)}]};}if(_0xad1f02==='commhub_send_message'){let {alias:_0x24b048,message:_0x5b11d0}=_0x1e0f64,_0x44ee77=await Q(_0x4bc984(0x11b),{'alias':_0x24b048,'message':_0x5b11d0,'from_session':p});return{'content':[{'type':_0x4bc984(0xf7),'text':JSON[_0x4bc984(0x153)](_0x44ee77)}]};}if(_0xad1f02===_0x4bc984(0x129)){let _0x21e99d=await Q('get_all_status',{});return{'content':[{'type':_0x4bc984(0xf7),'text':JSON['stringify'](_0x21e99d)}]};}return{'content':[{'type':_0x4bc984(0xf7),'text':JSON['stringify']({'error':_0x4bc984(0x11c)})}]};});var D=0x3e8,v=0x7530,O=0x36ee80;async function m(){const _0x1d9abe=a0_0x3998da;try{await Q(_0x1d9abe(0x126),{'resume_id':V,'alias':p,'status':_0x1d9abe(0x15d),'server':a0_0xd1cc4e(),'hostname':a0_0xd1cc4e(),'agent':_0x1d9abe(0x134),'project_dir':process[_0x1d9abe(0x192)](),'tmux_name':j||void 0x0}),z('re-registered\x20as\x20\x22'+p+_0x1d9abe(0x175));}catch(_0x439e42){z(_0x1d9abe(0x10a)+_0x439e42);}}async function l(){const _0x3cc62f=a0_0x3998da;let _0xea8e30=Y+_0x3cc62f(0x103)+encodeURIComponent(p),_0x53aa0f={};if(k)_0x53aa0f['Authorization']=_0x3cc62f(0x13c)+k;z('connecting\x20to\x20'+_0xea8e30);let _0x4c6ff5=D,_0x5ebb04=!0x0,_0x3c462b=null;while(!0x0){try{let _0xbf13d4=await fetch(_0xea8e30,{'headers':_0x53aa0f});if(!_0xbf13d4['ok']){if(z(_0x3cc62f(0x18e)+_0xbf13d4[_0x3cc62f(0x16a)]+'\x20'+_0xbf13d4[_0x3cc62f(0x112)]),_0x3c462b=_0x3c462b??Date[_0x3cc62f(0x10c)](),Date['now']()-_0x3c462b>O){z('SSE\x20连续\x20>1h\x20连不上\x20hub\x20('+Y+')\x20—\x20放弃自动重连。手动\x20anet\x20node\x20start\x20恢复。');return;}await i(_0x4c6ff5),_0x4c6ff5=Math['min'](_0x4c6ff5*0x2,v);continue;}let _0x4c11da=_0xbf13d4['body']['getReader'](),_0x5b6ff4=new TextDecoder(),_0x366469='';_0x4c6ff5=D;while(!0x0){let {done:_0x2f6554,value:_0x575fe2}=await _0x4c11da[_0x3cc62f(0xfe)]();if(_0x2f6554)break;_0x366469+=_0x5b6ff4[_0x3cc62f(0x111)](_0x575fe2,{'stream':!0x0});let _0x5b76a2=_0x366469[_0x3cc62f(0x132)]('\x0a\x0a');_0x366469=_0x5b76a2[_0x3cc62f(0x165)]()||'';for(let _0x26f2f6 of _0x5b76a2){let _0x2a5cbf=_0x26f2f6[_0x3cc62f(0x132)]('\x0a')[_0x3cc62f(0x143)](_0x3f56d7=>_0x3f56d7[_0x3cc62f(0x16f)]('data:\x20'));if(!_0x2a5cbf)continue;try{let _0x33d77b=JSON['parse'](_0x2a5cbf[_0x3cc62f(0x193)](0x6));if(await A(_0x33d77b),_0x33d77b[_0x3cc62f(0x107)]===_0x3cc62f(0xf5)){if(_0x3c462b=null,!_0x5ebb04)await m();_0x5ebb04=!0x1;}}catch(_0x308181){z('parse\x20error:\x20'+_0x308181);}}}z('SSE\x20stream\x20ended,\x20reconnecting...');}catch(_0x5f3642){z(_0x3cc62f(0x138)+_0x5f3642);}if(_0x3c462b=_0x3c462b??Date[_0x3cc62f(0x10c)](),Date[_0x3cc62f(0x10c)]()-_0x3c462b>O){z(_0x3cc62f(0x11e)+Y+_0x3cc62f(0x189));return;}await i(_0x4c6ff5),_0x4c6ff5=Math[_0x3cc62f(0x150)](_0x4c6ff5*0x2,v);}}async function A(_0x26c82c){const _0x4fc10b=a0_0x3998da;if(_0x26c82c[_0x4fc10b(0x107)]===_0x4fc10b(0xf5)){z(_0x4fc10b(0x128)+p+'\x22');return;}if(_0x26c82c[_0x4fc10b(0x107)]===_0x4fc10b(0x170)){if(z('←\x20message\x20from\x20'+_0x26c82c[_0x4fc10b(0x163)]+':\x20'+_0x26c82c['message']['slice'](0x0,0x3c)),await K[_0x4fc10b(0x190)]({'method':'notifications/claude/channel','params':{'content':_0x26c82c[_0x4fc10b(0x15f)],'meta':{'sender':_0x26c82c[_0x4fc10b(0x163)]||'hub','sender_id':_0x4fc10b(0x125),'user':_0x26c82c[_0x4fc10b(0x163)]||_0x4fc10b(0x15a),'priority':_0x4fc10b(0x114)}}}),_0x26c82c[_0x4fc10b(0x12e)])await Q(_0x4fc10b(0x14a),{'alias':p,'message_id':_0x26c82c[_0x4fc10b(0x12e)]});return;}if(_0x26c82c[_0x4fc10b(0x107)]==='new_task'||_0x26c82c[_0x4fc10b(0x107)]==='broadcast'){z('←\x20'+_0x26c82c[_0x4fc10b(0x107)]+_0x4fc10b(0xfb)+_0x26c82c['inbox_count']+'\x20priority='+(_0x26c82c[_0x4fc10b(0x152)]||_0x4fc10b(0x114)));let _0x10054b=await Q('get_inbox',{'alias':p,'limit':0x5});if(_0x10054b?.['ok']&&_0x10054b[_0x4fc10b(0x100)]?.[_0x4fc10b(0x102)]>0x0)for(let _0x3c4839 of _0x10054b[_0x4fc10b(0x100)]){let _0x553fd1={'sender':_0x3c4839['from_session']||_0x4fc10b(0x15a),'sender_id':'commhub','user':_0x3c4839[_0x4fc10b(0x16d)]||_0x4fc10b(0x15a),'task_id':_0x3c4839['id'],'priority':_0x3c4839[_0x4fc10b(0x152)]||_0x4fc10b(0x114)};G[_0x4fc10b(0x109)](_0x3c4839['id'],_0x3c4839['from_session']||'hub'),await K[_0x4fc10b(0x190)]({'method':_0x4fc10b(0x147),'params':{'content':_0x3c4839[_0x4fc10b(0x187)],'meta':_0x553fd1}}),z(_0x4fc10b(0x11a)+_0x3c4839['id'][_0x4fc10b(0x193)](0x0,0x8)+'\x20from\x20'+_0x3c4839[_0x4fc10b(0x16d)]+':\x20'+_0x3c4839[_0x4fc10b(0x187)][_0x4fc10b(0x193)](0x0,0x3c)),await Q(_0x4fc10b(0x14a),{'alias':p,'message_id':_0x3c4839['id']});}}}async function t(){const _0x2ef511=a0_0x3998da;let _0x32af90=new a0_0xc4434c();await K[_0x2ef511(0x14e)](_0x32af90),z(_0x2ef511(0x12f)),z(_0x2ef511(0x178)),l()[_0x2ef511(0xf8)](_0x78b2f0=>z(_0x2ef511(0x13e)+_0x78b2f0)),Q(_0x2ef511(0x126),{'resume_id':V,'alias':p,'status':_0x2ef511(0x15d),'server':a0_0xd1cc4e(),'hostname':a0_0xd1cc4e(),'agent':_0x2ef511(0x134),'project_dir':process[_0x2ef511(0x192)](),'tmux_name':j||void 0x0})[_0x2ef511(0x14d)](()=>z(_0x2ef511(0x13d)+p+'\x22\x20('+V['slice'](0x0,0x8)+')'))[_0x2ef511(0xf8)](_0x2948cd=>z(_0x2ef511(0x127)+_0x2948cd)),setInterval(()=>{const _0x52493b=_0x2ef511;Q(_0x52493b(0x126),{'resume_id':V,'alias':p,'status':_0x52493b(0x15d),'server':a0_0xd1cc4e(),'hostname':a0_0xd1cc4e(),'agent':'claude-code','project_dir':process[_0x52493b(0x192)](),'tmux_name':j||void 0x0})[_0x52493b(0xf8)](_0x5311a8=>z(_0x52493b(0x16c)+_0x5311a8));},0x2bf20),z(_0x2ef511(0x177));}t()[a0_0x3998da(0xf8)](_0x219017=>{const _0x3c6010=a0_0x3998da;z(_0x3c6010(0x164)+_0x219017),process[_0x3c6010(0x157)](0x1);});async function b(){const _0x174360=a0_0x3998da;z(_0x174360(0x159)),await Q('report_status',{'resume_id':V,'alias':p,'status':'offline','task':_0x174360(0x131)})[_0x174360(0xf8)](()=>{}),process['exit'](0x0);}process[a0_0x3998da(0x121)]['on'](a0_0x3998da(0x161),()=>b()),process['on'](a0_0x3998da(0x146),()=>b()),process['on'](a0_0x3998da(0x155),()=>b());var d=process['ppid'];if(d&&d>0x1){let h=setInterval(()=>{const _0x1554d0=a0_0x3998da;if(process[_0x1554d0(0x122)]===0x1&&d!==0x1){z(_0x1554d0(0x118)+d+')\x20—\x20self-exit\x20to\x20avoid\x20ghost\x20heart-beat'),b();return;}try{process[_0x1554d0(0x158)](d,0x0);}catch(_0x325ac9){if(_0x325ac9?.[_0x1554d0(0x10d)]==='ESRCH')z(_0x1554d0(0x171)+d+'\x20no\x20longer\x20exists\x20(kill-0\x20ESRCH)\x20—\x20self-exit\x20to\x20avoid\x20ghost\x20heart-beat'),b();}},0x7530);if(typeof h[a0_0x3998da(0x182)]===a0_0x3998da(0x135))h[a0_0x3998da(0x182)]();}
@@ -1,4 +1,4 @@
1
- export declare const OPENCODE_AGENT_NETWORK_VERSION = "2.3.0-preview.34";
1
+ export declare const OPENCODE_AGENT_NETWORK_VERSION = "2.3.0-preview.36";
2
2
  export declare const OPENCODE_AGENT_NODE_VERSION = "2.5.0-preview.26";
3
3
  export declare const OPENCODE_AGENT_NODE_SPEC = "@sleep2agi/agent-node@2.5.0-preview.26";
4
4
  export declare function opencodeExactPairInstallCommand(): string;
@@ -0,0 +1,58 @@
1
+ /** Lowest tmux version whose `new-session` understands `-e KEY=VALUE`. */
2
+ export declare const MIN_TMUX_MAJOR = 3;
3
+ export declare const MIN_TMUX_MINOR = 2;
4
+ export interface TmuxVersion {
5
+ major: number;
6
+ minor: number;
7
+ /** Trailing letter suffix, e.g. the "a" of "3.0a". Not used for ordering. */
8
+ suffix: string;
9
+ raw: string;
10
+ }
11
+ /**
12
+ * Parse the output of `tmux -V`, e.g.:
13
+ * "tmux 3.2a" → { major: 3, minor: 2, suffix: "a" }
14
+ * "tmux 3.0a" → { major: 3, minor: 0, suffix: "a" }
15
+ * "tmux 3.4" → { major: 3, minor: 4, suffix: "" }
16
+ * "tmux next-3.4" → { major: 3, minor: 4, suffix: "" }
17
+ * "tmux 2.9" → { major: 2, minor: 9, suffix: "" }
18
+ *
19
+ * Returns null when no version can be extracted (unknown build, empty
20
+ * output, `tmux master` with no numbers). Callers must treat null as
21
+ * "unknown" and NOT as "too old" — refusing to start on an unparseable
22
+ * version string would break hosts whose tmux is perfectly capable.
23
+ */
24
+ export declare function parseTmuxVersion(raw: string): TmuxVersion | null;
25
+ /**
26
+ * True when this version's `new-session` supports `-e KEY=VALUE` (>= 3.2).
27
+ * Note 3.0a / 3.1c sort BELOW 3.2 — the letter suffix is a patch marker,
28
+ * never a minor bump, so it must not participate in the comparison.
29
+ */
30
+ export declare function tmuxSupportsSessionEnv(v: TmuxVersion): boolean;
31
+ export type TmuxCapabilityVerdict = {
32
+ kind: "ok";
33
+ version: TmuxVersion;
34
+ } | {
35
+ kind: "unknown";
36
+ detail: string;
37
+ } | {
38
+ kind: "too_old";
39
+ version: TmuxVersion;
40
+ detail: string;
41
+ remedy: string[];
42
+ } | {
43
+ kind: "missing";
44
+ detail: string;
45
+ remedy: string[];
46
+ };
47
+ /**
48
+ * Pure decision function — `runVersionCmd` returns `tmux -V` output, or
49
+ * throws if tmux is absent/unrunnable. Split from the printing/exiting
50
+ * wrapper so tests drive every branch without a tmux binary.
51
+ */
52
+ export declare function checkTmuxCapability(runVersionCmd: () => string): TmuxCapabilityVerdict;
53
+ /**
54
+ * cli.ts wrapper: run the check, print an actionable message, and exit
55
+ * non-zero when tmux cannot carry the marker. `unknown` is deliberately
56
+ * permissive — we log and continue.
57
+ */
58
+ export declare function assertTmuxSupportsSessionEnv(runVersionCmd: () => string, log: (msg: string) => void, fail: (msg: string) => never): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sleep2agi/agent-network",
3
- "version": "2.3.0-preview.34",
3
+ "version": "2.3.0-preview.36",
4
4
  "description": "AI Agent Network CLI — Local-first multi-agent orchestration across 6 runtimes (Claude Code CLI / Claude Agent SDK / Codex SDK / Codex app-server / Grok Build ACP / OpenCode CLI) and 8+ LLM providers. Apache 2.0.",
5
5
  "type": "module",
6
6
  "main": "dist/src/client.js",
@@ -82,4 +82,4 @@
82
82
  "hono": "^4.12.21",
83
83
  "qs": "^6.15.2"
84
84
  }
85
- }
85
+ }