@sleep2agi/agent-network 2.2.20 → 2.2.22-preview.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.
@@ -1 +1 @@
1
- function a0_0x2116(){const _0x35f4cf=['startsWith','read','10mLYYqB','456JQRaCt','data:\x20','log','disconnect','AbortError','min','sseAbort','match','/events/','body','49847JociHV','text','application/json','s...','slice','message','decode','abort','new_task','SSE\x20failed:\x20','alias','split','name','2684016FySLuQ','status','get_all_status','call','88887BTFQrH','reconnectDelay','url','agent','toString','POST','catch','running','cwd','getReader','/mcp','stringify','autoConnect','sleep','emit','error','2FdxpQb','connectSSE','heartbeat\x20failed:\x20','SSE\x20error:\x20','messages','parse','655611ICthPs','replace','server','content','processInbox','4577238lFFnKY','connect','inbox\x20error:\x20','Bearer\x20','connected','4004242UwAGpA','report_status','normal','SSE\x20reconnecting\x20in\x20','idle','316xjwvGm','broadcast','29545JGgQIA','token','Authorization','send_message','application/json,\x20text/event-stream','result','heartbeatInterval','type','text/event-stream','ack_inbox','get_inbox','sdk','from_session','resumeId','heartbeatTimer','send_task','2.0'];a0_0x2116=function(){return _0x35f4cf;};return a0_0x2116();}const a0_0x13fafb=a0_0x526b;function a0_0x526b(_0x2cf111,_0x230030){_0x2cf111=_0x2cf111-0x80;const _0x21164f=a0_0x2116();let _0x526b42=_0x21164f[_0x2cf111];return _0x526b42;}(function(_0xa98f5d,_0x2fe115){const _0x18dccd=a0_0x526b,_0x4ceb21=_0xa98f5d();while(!![]){try{const _0x5c0ca3=-parseInt(_0x18dccd(0xbc))/0x1+-parseInt(_0x18dccd(0xb6))/0x2*(-parseInt(_0x18dccd(0xa6))/0x3)+-parseInt(_0x18dccd(0xcb))/0x4*(-parseInt(_0x18dccd(0xcd))/0x5)+-parseInt(_0x18dccd(0x8b))/0x6*(parseInt(_0x18dccd(0x95))/0x7)+parseInt(_0x18dccd(0xa2))/0x8+parseInt(_0x18dccd(0xc1))/0x9+parseInt(_0x18dccd(0x8a))/0xa*(parseInt(_0x18dccd(0xc6))/0xb);if(_0x5c0ca3===_0x2fe115)break;else _0x4ceb21['push'](_0x4ceb21['shift']());}catch(_0x58c0f4){_0x4ceb21['push'](_0x4ceb21['shift']());}}}(a0_0x2116,0x7bf5b));import{EventEmitter as a0_0x4b69c8}from'events';import{hostname as a0_0x82708d}from'os';class T extends a0_0x4b69c8{[a0_0x13fafb(0xa8)];[a0_0x13fafb(0x9f)];[a0_0x13fafb(0xce)];[a0_0x13fafb(0xa9)];[a0_0x13fafb(0x84)];[a0_0x13fafb(0xd3)];[a0_0x13fafb(0xa7)];[a0_0x13fafb(0x85)];[a0_0x13fafb(0x91)];[a0_0x13fafb(0xad)]=!0x1;constructor(_0x3210db){const _0x6ce418=a0_0x13fafb;super();if(this[_0x6ce418(0xa8)]=_0x3210db['url'][_0x6ce418(0xbd)](/\/$/,''),this[_0x6ce418(0x9f)]=_0x3210db[_0x6ce418(0x9f)],this[_0x6ce418(0xce)]=_0x3210db[_0x6ce418(0xce)],this[_0x6ce418(0xa9)]=_0x3210db[_0x6ce418(0xa9)]||_0x6ce418(0x82),this[_0x6ce418(0x84)]='sdk-'+_0x3210db[_0x6ce418(0x9f)]+'-'+Date['now']()[_0x6ce418(0xaa)](0x24),this[_0x6ce418(0xd3)]=_0x3210db[_0x6ce418(0xd3)]??0x2bf20,this[_0x6ce418(0xa7)]=_0x3210db[_0x6ce418(0xa7)]??0xbb8,_0x3210db[_0x6ce418(0xb2)]!==!0x1)this[_0x6ce418(0xc2)]();}[a0_0x13fafb(0x8d)](_0x113f78){const _0xf75381=a0_0x13fafb;console[_0xf75381(0x8d)]('['+new Date()['toTimeString']()['slice'](0x0,0x8)+']\x20[commhub:'+this[_0xf75381(0x9f)]+']\x20'+_0x113f78);}async[a0_0x13fafb(0xa5)](_0x266251,_0x2b1345){const _0xa462a6=a0_0x13fafb;let _0x331b09={'Content-Type':_0xa462a6(0x97),'Accept':_0xa462a6(0xd1)};if(this[_0xa462a6(0xce)])_0x331b09[_0xa462a6(0xcf)]='Bearer\x20'+this['token'];let _0x7deabc=await(await fetch(this[_0xa462a6(0xa8)]+_0xa462a6(0xb0),{'method':_0xa462a6(0xab),'headers':_0x331b09,'body':JSON[_0xa462a6(0xb1)]({'jsonrpc':_0xa462a6(0x87),'id':Date['now'](),'method':'tools/call','params':{'name':_0x266251,'arguments':_0x2b1345}})}))['text'](),_0x58b605=_0x7deabc[_0xa462a6(0x92)](/data: (.+)/),_0x3cc2f5=_0x58b605?JSON[_0xa462a6(0xbb)](_0x58b605[0x1]):JSON[_0xa462a6(0xbb)](_0x7deabc),_0x2c267d=_0x3cc2f5?.[_0xa462a6(0xd2)]?.[_0xa462a6(0xbf)]?.[0x0]?.[_0xa462a6(0x96)];return _0x2c267d?JSON['parse'](_0x2c267d):_0x3cc2f5;}async[a0_0x13fafb(0xc2)](){const _0x49f932=a0_0x13fafb;if(this[_0x49f932(0xad)])return;this[_0x49f932(0xad)]=!0x0,await this[_0x49f932(0xa3)]('idle'),this[_0x49f932(0x8d)]('registered'),this[_0x49f932(0x85)]=setInterval(()=>{const _0x4cae00=_0x49f932;this['status'](_0x4cae00(0xca))[_0x4cae00(0xac)](_0x127661=>this['log'](_0x4cae00(0xb8)+_0x127661[_0x4cae00(0x9a)]));},this[_0x49f932(0xd3)]),this[_0x49f932(0xb7)]();}async[a0_0x13fafb(0x8e)](){const _0x1db1e=a0_0x13fafb;if(this[_0x1db1e(0xad)]=!0x1,this['sseAbort']?.[_0x1db1e(0x9c)](),this[_0x1db1e(0x85)])clearInterval(this[_0x1db1e(0x85)]);await this[_0x1db1e(0xa3)]('offline')[_0x1db1e(0xac)](()=>{}),this['log']('disconnected');}async['send'](_0x22df93,_0x45f8b1,_0x530870=a0_0x13fafb(0xc8)){const _0x51a990=a0_0x13fafb;return this[_0x51a990(0xa5)](_0x51a990(0x86),{'alias':_0x22df93,'task':_0x45f8b1,'priority':_0x530870,'from_session':this[_0x51a990(0x9f)]});}async['message'](_0x19fa36,_0x41003d){const _0xbdef7e=a0_0x13fafb;return this['call'](_0xbdef7e(0xd0),{'alias':_0x19fa36,'message':_0x41003d,'from_session':this['alias']});}async['reply'](_0x6a2b73,_0x3b2ead,_0x4a2229='completed'){const _0x56e1e3=a0_0x13fafb;return this[_0x56e1e3(0xa5)]('send_reply',{'in_reply_to':_0x6a2b73,'text':_0x3b2ead,'status':_0x4a2229});}async[a0_0x13fafb(0xa3)](_0x2527f6,_0x357085){const _0x29e231=a0_0x13fafb;return this[_0x29e231(0xa5)](_0x29e231(0xc7),{'resume_id':this[_0x29e231(0x84)],'alias':this[_0x29e231(0x9f)],'status':_0x2527f6,'server':a0_0x82708d(),'hostname':a0_0x82708d(),'agent':this[_0x29e231(0xa9)],'project_dir':process[_0x29e231(0xae)](),..._0x357085});}async['getAllStatus'](){const _0x494d7c=a0_0x13fafb;return this[_0x494d7c(0xa5)](_0x494d7c(0xa4),{});}async[a0_0x13fafb(0xcc)](_0xeb3c19,_0x131ef4){const _0x1da569=a0_0x13fafb;return this[_0x1da569(0xa5)](_0x1da569(0xcc),{'message':_0xeb3c19,'filter_server':_0x131ef4?.[_0x1da569(0xbe)],'filter_status':_0x131ef4?.['status']});}async[a0_0x13fafb(0xb7)](){const _0x627fd5=a0_0x13fafb;let _0x27ec23=encodeURIComponent(this[_0x627fd5(0x9f)]),_0x367507=this[_0x627fd5(0xa8)]+_0x627fd5(0x93)+_0x27ec23,_0xcd969f=this['reconnectDelay'];while(this[_0x627fd5(0xad)]){try{this[_0x627fd5(0x91)]=new AbortController();let _0x458a12={'Accept':_0x627fd5(0xd5)};if(this[_0x627fd5(0xce)])_0x458a12[_0x627fd5(0xcf)]=_0x627fd5(0xc4)+this['token'];let _0x400e60=await fetch(_0x367507,{'headers':_0x458a12,'signal':this['sseAbort']['signal']});if(!_0x400e60['ok']||!_0x400e60[_0x627fd5(0x94)]){this['log'](_0x627fd5(0x9e)+_0x400e60['status']),await this[_0x627fd5(0xb3)](_0xcd969f),_0xcd969f=Math[_0x627fd5(0x90)](_0xcd969f*1.5,0xea60);continue;}_0xcd969f=this['reconnectDelay'];let _0x3c1e21=_0x400e60[_0x627fd5(0x94)][_0x627fd5(0xaf)](),_0x5a3865=new TextDecoder(),_0x2f7129='';while(this[_0x627fd5(0xad)]){let {done:_0x46fddc,value:_0x223941}=await _0x3c1e21[_0x627fd5(0x89)]();if(_0x46fddc)break;_0x2f7129+=_0x5a3865[_0x627fd5(0x9b)](_0x223941,{'stream':!0x0});let _0x147b23=_0x2f7129[_0x627fd5(0xa0)]('\x0a');_0x2f7129=_0x147b23['pop']()||'';for(let _0x2d5b8f of _0x147b23){if(!_0x2d5b8f[_0x627fd5(0x88)](_0x627fd5(0x8c)))continue;try{let _0xec7b18=JSON['parse'](_0x2d5b8f[_0x627fd5(0x99)](0x6));if(_0xec7b18[_0x627fd5(0xd4)]===_0x627fd5(0xc5)){this['log']('SSE\x20connected'),this[_0x627fd5(0xb4)](_0x627fd5(0xc5));continue;}if(_0xec7b18[_0x627fd5(0xd4)]===_0x627fd5(0x9d)||_0xec7b18[_0x627fd5(0xd4)]==='new_message'||_0xec7b18[_0x627fd5(0xd4)]===_0x627fd5(0xcc))await this['processInbox']();}catch{}}}}catch(_0x490e41){if(_0x490e41[_0x627fd5(0xa1)]===_0x627fd5(0x8f))break;this[_0x627fd5(0xb4)](_0x627fd5(0xb5),_0x490e41),this[_0x627fd5(0x8d)](_0x627fd5(0xb9)+_0x490e41['message']);}if(this[_0x627fd5(0xad)])this['emit']('disconnected'),this[_0x627fd5(0x8d)](_0x627fd5(0xc9)+_0xcd969f/0x3e8+_0x627fd5(0x98)),await this[_0x627fd5(0xb3)](_0xcd969f),_0xcd969f=Math[_0x627fd5(0x90)](_0xcd969f*1.5,0xea60);}}async[a0_0x13fafb(0xc0)](){const _0xc7ccad=a0_0x13fafb;try{let _0x47f7b7=(await this[_0xc7ccad(0xa5)](_0xc7ccad(0x81),{'alias':this[_0xc7ccad(0x9f)],'limit':0xa}))?.[_0xc7ccad(0xba)]||[];for(let _0x1ea194 of _0x47f7b7)await this['call'](_0xc7ccad(0x80),{'alias':this[_0xc7ccad(0x9f)],'message_id':_0x1ea194['id']}),this[_0xc7ccad(0x8d)]('←\x20'+_0x1ea194[_0xc7ccad(0x83)]+':\x20'+_0x1ea194[_0xc7ccad(0xbf)][_0xc7ccad(0x99)](0x0,0x3c)),this[_0xc7ccad(0xb4)]('task',_0x1ea194),this[_0xc7ccad(0xb4)](_0xc7ccad(0x9a),_0x1ea194);}catch(_0x136e73){this[_0xc7ccad(0x8d)](_0xc7ccad(0xc3)+_0x136e73['message']);}}['sleep'](_0x12f070){return new Promise(_0x486ec7=>setTimeout(_0x486ec7,_0x12f070));}}var $=T;export{$ as default,T as CommHub};
1
+ function a0_0x3c0a(){const _0x18320d=['disconnected','parse','toTimeString','Authorization','processInbox','SSE\x20connected','sseAbort','application/json','/mcp','token','8qmmfUl','message','task','normal','new_task','s...','call','read','109800ZoQiIC','heartbeatTimer','offline','reply','match','/events/','SSE\x20error:\x20','new_message','pop','ack_inbox','send_reply','completed','tools/call','126040amGDUq','heartbeat\x20failed:\x20','7ZkRfnV','replace','alias','agent','disconnect','SSE\x20failed:\x20','cwd','AbortError','name','connect','log','min','slice','status','from_session','decode','idle','abort','sleep','144jvUlWP','server','catch','resumeId','text','registered','46890roTArF','connectSSE','connected','type','heartbeatInterval','data:\x20','error',']\x20[commhub:','url','running','getAllStatus','Bearer\x20','55dlqHgN','527136whyMIO','emit','2.0','startsWith','SSE\x20reconnecting\x20in\x20','report_status','application/json,\x20text/event-stream','content','body','378608nxHcyX','get_all_status','3YgnhsJ','now','405099DuaOwd','getReader','reconnectDelay','10436gcOXoF','send'];a0_0x3c0a=function(){return _0x18320d;};return a0_0x3c0a();}function a0_0x5f44(_0x479a0e,_0x55cc72){_0x479a0e=_0x479a0e-0xb4;const _0x3c0a=a0_0x3c0a();let _0x5f4449=_0x3c0a[_0x479a0e];return _0x5f4449;}const a0_0x19de2f=a0_0x5f44;(function(_0x4735d8,_0x3931e8){const _0x280533=a0_0x5f44,_0x43e2ca=_0x4735d8();while(!![]){try{const _0x1d6546=parseInt(_0x280533(0xd4))/0x1*(-parseInt(_0x280533(0xd9))/0x2)+-parseInt(_0x280533(0xed))/0x3*(-parseInt(_0x280533(0xe5))/0x4)+-parseInt(_0x280533(0xbc))/0x5*(-parseInt(_0x280533(0xb6))/0x6)+parseInt(_0x280533(0xfc))/0x7*(parseInt(_0x280533(0xd2))/0x8)+parseInt(_0x280533(0xd6))/0x9+-parseInt(_0x280533(0xfa))/0xa+-parseInt(_0x280533(0xc8))/0xb*(parseInt(_0x280533(0xc9))/0xc);if(_0x1d6546===_0x3931e8)break;else _0x43e2ca['push'](_0x43e2ca['shift']());}catch(_0x5e7c99){_0x43e2ca['push'](_0x43e2ca['shift']());}}}(a0_0x3c0a,0x22d77));import{EventEmitter as a0_0xa82c8b}from'events';import{hostname as a0_0x229639}from'os';class T extends a0_0xa82c8b{[a0_0x19de2f(0xc4)];['alias'];[a0_0x19de2f(0xe4)];[a0_0x19de2f(0xff)];['resumeId'];['heartbeatInterval'];[a0_0x19de2f(0xd8)];[a0_0x19de2f(0xee)];['sseAbort'];[a0_0x19de2f(0xc5)]=!0x1;constructor(_0x2a5ce4){const _0x53a421=a0_0x19de2f;super();if(this['url']=_0x2a5ce4[_0x53a421(0xc4)][_0x53a421(0xfd)](/\/$/,''),this[_0x53a421(0xfe)]=_0x2a5ce4[_0x53a421(0xfe)],this[_0x53a421(0xe4)]=_0x2a5ce4['token'],this['agent']=_0x2a5ce4['agent']||'sdk',this[_0x53a421(0xb9)]='sdk-'+_0x2a5ce4[_0x53a421(0xfe)]+'-'+Date[_0x53a421(0xd5)]()['toString'](0x24),this['heartbeatInterval']=_0x2a5ce4['heartbeatInterval']??0x2bf20,this[_0x53a421(0xd8)]=_0x2a5ce4[_0x53a421(0xd8)]??0xbb8,_0x2a5ce4['autoConnect']!==!0x1)this[_0x53a421(0x105)]();}['log'](_0x1fb884){const _0x143538=a0_0x19de2f;console[_0x143538(0x106)]('['+new Date()[_0x143538(0xdd)]()[_0x143538(0x108)](0x0,0x8)+_0x143538(0xc3)+this[_0x143538(0xfe)]+']\x20'+_0x1fb884);}async['call'](_0x38b8f4,_0x23d64b){const _0x246f6e=a0_0x19de2f;let _0x13600b={'Content-Type':_0x246f6e(0xe2),'Accept':_0x246f6e(0xcf)};if(this[_0x246f6e(0xe4)])_0x13600b[_0x246f6e(0xde)]=_0x246f6e(0xc7)+this[_0x246f6e(0xe4)];let _0x3b5c03=await(await fetch(this[_0x246f6e(0xc4)]+_0x246f6e(0xe3),{'method':'POST','headers':_0x13600b,'body':JSON['stringify']({'jsonrpc':_0x246f6e(0xcb),'id':Date[_0x246f6e(0xd5)](),'method':_0x246f6e(0xf9),'params':{'name':_0x38b8f4,'arguments':_0x23d64b}})}))['text'](),_0x41c425=_0x3b5c03[_0x246f6e(0xf1)](/data: (.+)/),_0x490945=_0x41c425?JSON['parse'](_0x41c425[0x1]):JSON['parse'](_0x3b5c03),_0x47ccbc=_0x490945?.['result']?.[_0x246f6e(0xd0)]?.[0x0]?.[_0x246f6e(0xba)];return _0x47ccbc?JSON[_0x246f6e(0xdc)](_0x47ccbc):_0x490945;}async['connect'](){const _0x2ba586=a0_0x19de2f;if(this['running'])return;this['running']=!0x0,await this[_0x2ba586(0x109)]('idle'),this[_0x2ba586(0x106)](_0x2ba586(0xbb)),this[_0x2ba586(0xee)]=setInterval(()=>{const _0x23192e=_0x2ba586;this['status'](_0x23192e(0x10c))[_0x23192e(0xb8)](_0xe84d8f=>this[_0x23192e(0x106)](_0x23192e(0xfb)+_0xe84d8f[_0x23192e(0xe6)]));},this[_0x2ba586(0xc0)]),this[_0x2ba586(0xbd)]();}async[a0_0x19de2f(0x100)](){const _0x16a264=a0_0x19de2f;if(this[_0x16a264(0xc5)]=!0x1,this[_0x16a264(0xe1)]?.[_0x16a264(0xb4)](),this[_0x16a264(0xee)])clearInterval(this[_0x16a264(0xee)]);await this[_0x16a264(0x109)](_0x16a264(0xef))['catch'](()=>{}),this[_0x16a264(0x106)]('disconnected');}async[a0_0x19de2f(0xda)](_0x5dc68a,_0x426bfe,_0xed8d8b=a0_0x19de2f(0xe8)){const _0xec2b8b=a0_0x19de2f;return this[_0xec2b8b(0xeb)]('send_task',{'alias':_0x5dc68a,'task':_0x426bfe,'priority':_0xed8d8b,'from_session':this[_0xec2b8b(0xfe)]});}async[a0_0x19de2f(0xe6)](_0x2a099d,_0x1871d5){const _0xaeda6a=a0_0x19de2f;return this[_0xaeda6a(0xeb)]('send_message',{'alias':_0x2a099d,'message':_0x1871d5,'from_session':this[_0xaeda6a(0xfe)]});}async[a0_0x19de2f(0xf0)](_0x3b085f,_0x31c15b,_0x2aef4e=a0_0x19de2f(0xf8)){const _0xf555e0=a0_0x19de2f;return this['call'](_0xf555e0(0xf7),{'in_reply_to':_0x3b085f,'text':_0x31c15b,'status':_0x2aef4e});}async[a0_0x19de2f(0x109)](_0x165753,_0xe3bac3){const _0x3f4566=a0_0x19de2f;return this['call'](_0x3f4566(0xce),{'resume_id':this[_0x3f4566(0xb9)],'alias':this[_0x3f4566(0xfe)],'status':_0x165753,'server':a0_0x229639(),'hostname':a0_0x229639(),'agent':this[_0x3f4566(0xff)],'project_dir':process[_0x3f4566(0x102)](),..._0xe3bac3});}async[a0_0x19de2f(0xc6)](){const _0xeaa3e2=a0_0x19de2f;return this[_0xeaa3e2(0xeb)](_0xeaa3e2(0xd3),{});}async['broadcast'](_0x1c68a1,_0x1a0194){const _0x2de29c=a0_0x19de2f;return this[_0x2de29c(0xeb)]('broadcast',{'message':_0x1c68a1,'filter_server':_0x1a0194?.[_0x2de29c(0xb7)],'filter_status':_0x1a0194?.[_0x2de29c(0x109)]});}async[a0_0x19de2f(0xbd)](){const _0x630883=a0_0x19de2f;let _0x5bbe35=encodeURIComponent(this[_0x630883(0xfe)]),_0x51db15=this[_0x630883(0xc4)]+_0x630883(0xf2)+_0x5bbe35,_0x3b130a=this['reconnectDelay'];while(this[_0x630883(0xc5)]){try{this[_0x630883(0xe1)]=new AbortController();let _0x3f206c={'Accept':'text/event-stream'};if(this['token'])_0x3f206c[_0x630883(0xde)]='Bearer\x20'+this[_0x630883(0xe4)];let _0x5d2deb=await fetch(_0x51db15,{'headers':_0x3f206c,'signal':this[_0x630883(0xe1)]['signal']});if(!_0x5d2deb['ok']||!_0x5d2deb['body']){this['log'](_0x630883(0x101)+_0x5d2deb[_0x630883(0x109)]),await this[_0x630883(0xb5)](_0x3b130a),_0x3b130a=Math[_0x630883(0x107)](_0x3b130a*1.5,0xea60);continue;}_0x3b130a=this[_0x630883(0xd8)];let _0x26fad9=_0x5d2deb[_0x630883(0xd1)][_0x630883(0xd7)](),_0x521933=new TextDecoder(),_0x22b29a='';while(this[_0x630883(0xc5)]){let {done:_0x1130b3,value:_0x9d8dcf}=await _0x26fad9[_0x630883(0xec)]();if(_0x1130b3)break;_0x22b29a+=_0x521933[_0x630883(0x10b)](_0x9d8dcf,{'stream':!0x0});let _0xbd133e=_0x22b29a['split']('\x0a');_0x22b29a=_0xbd133e[_0x630883(0xf5)]()||'';for(let _0x1bfab5 of _0xbd133e){if(!_0x1bfab5[_0x630883(0xcc)](_0x630883(0xc1)))continue;try{let _0x4149fd=JSON[_0x630883(0xdc)](_0x1bfab5[_0x630883(0x108)](0x6));if(_0x4149fd[_0x630883(0xbf)]===_0x630883(0xbe)){this[_0x630883(0x106)](_0x630883(0xe0)),this[_0x630883(0xca)](_0x630883(0xbe));continue;}if(_0x4149fd['type']===_0x630883(0xe9)||_0x4149fd[_0x630883(0xbf)]===_0x630883(0xf4)||_0x4149fd[_0x630883(0xbf)]==='broadcast')await this[_0x630883(0xdf)]();}catch{}}}}catch(_0x1b97f7){if(_0x1b97f7[_0x630883(0x104)]===_0x630883(0x103))break;this[_0x630883(0xca)](_0x630883(0xc2),_0x1b97f7),this[_0x630883(0x106)](_0x630883(0xf3)+_0x1b97f7[_0x630883(0xe6)]);}if(this['running'])this['emit'](_0x630883(0xdb)),this['log'](_0x630883(0xcd)+_0x3b130a/0x3e8+_0x630883(0xea)),await this[_0x630883(0xb5)](_0x3b130a),_0x3b130a=Math[_0x630883(0x107)](_0x3b130a*1.5,0xea60);}}async[a0_0x19de2f(0xdf)](){const _0x3a1a95=a0_0x19de2f;try{let _0x100eb3=(await this[_0x3a1a95(0xeb)]('get_inbox',{'alias':this['alias'],'limit':0xa}))?.['messages']||[];for(let _0x15126d of _0x100eb3)await this['call'](_0x3a1a95(0xf6),{'alias':this[_0x3a1a95(0xfe)],'message_id':_0x15126d['id']}),this[_0x3a1a95(0x106)]('←\x20'+_0x15126d[_0x3a1a95(0x10a)]+':\x20'+_0x15126d['content'][_0x3a1a95(0x108)](0x0,0x3c)),this[_0x3a1a95(0xca)](_0x3a1a95(0xe7),_0x15126d),this[_0x3a1a95(0xca)](_0x3a1a95(0xe6),_0x15126d);}catch(_0x211980){this[_0x3a1a95(0x106)]('inbox\x20error:\x20'+_0x211980['message']);}}[a0_0x19de2f(0xb5)](_0x540ad5){return new Promise(_0x1edbad=>setTimeout(_0x1edbad,_0x540ad5));}}var $=T;export{$ as default,T as CommHub};
@@ -0,0 +1,29 @@
1
+ import type { IMAdapter, IMAdapterHealth, IMChannelConfig, IMConversationRef, IMIngressMode, NormalizedIMEvent, NormalizedIMMessage } from "../types.js";
2
+ type OnEventHandler = (event: NormalizedIMEvent) => Promise<void>;
3
+ export declare class FeishuAdapter implements IMAdapter {
4
+ readonly platform = "feishu";
5
+ readonly ingressMode: IMIngressMode;
6
+ private feishuConfig;
7
+ private connectionName;
8
+ private client;
9
+ private wsClient;
10
+ /**
11
+ * The bot's own open_id, resolved at init() via /open-apis/bot/v3/info.
12
+ * Used to detect real @bot mentions (vs any mention) in group messages.
13
+ * Falls back to null on lookup failure — `mentioned` then degrades to the
14
+ * naive `mentions.length > 0` check.
15
+ */
16
+ private botOpenId;
17
+ /** Where to persist downloaded inbound media (M5c). */
18
+ private mediaDir;
19
+ private health_;
20
+ init(config: IMChannelConfig): Promise<void>;
21
+ start(onEvent: OnEventHandler): Promise<void>;
22
+ stop(): Promise<void>;
23
+ send(message: NormalizedIMMessage): Promise<{
24
+ messageId: string;
25
+ }>;
26
+ edit(_target: IMConversationRef, messageId: string, message: NormalizedIMMessage): Promise<void>;
27
+ health(): IMAdapterHealth;
28
+ }
29
+ export {};
@@ -0,0 +1,67 @@
1
+ /**
2
+ * RFC-020 §2.5 / RFC-002 §2.2 — Feishu bridge worker.
3
+ *
4
+ * Entry point spawned by agent-node when a node profile has `channels.feishu`
5
+ * enabled. Per Vincent 2026-06-24 decision, the first-cut is the simplified
6
+ * "agent-node direct bridge" model, not the full commhub-gateway:
7
+ *
8
+ * - This worker owns the FeishuAdapter and its WSClient connection.
9
+ * - Inbound IM event → access whitelist gate → forward to agent-node's main
10
+ * `think()` via parent IPC.
11
+ * - think() result → adapter.send() back to the originating conversation.
12
+ *
13
+ * Differences vs RFC-020 §2.5 full commhub-gateway path:
14
+ * - No separate gateway ntok_ / dedicated commhub alias.
15
+ * - IM messages do NOT pass through commhub task dispatch.
16
+ * - Feishu messages do NOT appear in Dashboard topology / Chat.
17
+ *
18
+ * The full §2.9 path (meta_json columns, SSE passthrough, persisted
19
+ * IMCorrelationStore) lands as the follow-up PR after this demo ships
20
+ * — tracked in #182.
21
+ *
22
+ * Milestones:
23
+ * M1: worker entry scaffold.
24
+ * M2: adapter + WSClient wiring with a noop event handler.
25
+ * M3 (this file): IPC contract for the think() round-trip — when running
26
+ * as a forked child the bridge auto-uses `process.send` /
27
+ * `process.on("message")`; standalone, it falls back to a
28
+ * stderr logger so the inbound path stays observable.
29
+ * M4: agent-node spawn integration (fork(this) wired by agent-node).
30
+ * M5: group @bot trigger refinement, image up/down, Docker smoke.
31
+ */
32
+ import type { NormalizedIMEvent } from "../types.js";
33
+ import { FeishuAdapter } from "./adapter.js";
34
+ export interface FeishuBridgeOptions {
35
+ /** Absolute path to `.anet/nodes/<node>/channels/feishu/`. */
36
+ channelDir: string;
37
+ /** Node alias — used for audit log + IPC framing. */
38
+ nodeAlias: string;
39
+ /**
40
+ * Optional inbound event sink for tests or custom integrations. When omitted
41
+ * the bridge picks an automatic strategy:
42
+ * - IPC handler when `process.send` exists (i.e. running as a forked
43
+ * child of agent-node).
44
+ * - stderr logger otherwise (standalone smoke debugging).
45
+ */
46
+ onEvent?: (event: NormalizedIMEvent) => Promise<void>;
47
+ }
48
+ /** Bridge → parent: inbound IM event ready for think(). */
49
+ export interface BridgeIncomingEnvelope {
50
+ type: "event";
51
+ event: NormalizedIMEvent;
52
+ }
53
+ /** Parent → bridge: agent reply text for a previously-forwarded event. */
54
+ export interface BridgeReplyEnvelope {
55
+ type: "reply";
56
+ /** Echoes the originating event's idempotencyKey. */
57
+ eventKey: string;
58
+ text: string;
59
+ }
60
+ /**
61
+ * Wire and start the Feishu bridge. Resolves once the underlying WSClient is
62
+ * connected and the EventDispatcher is registered.
63
+ */
64
+ export declare function startFeishuBridge(opts: FeishuBridgeOptions): Promise<FeishuAdapter>;
65
+ export { FeishuAdapter } from "./adapter.js";
66
+ export { loadFeishuChannelConfig } from "./config.js";
67
+ export type { FeishuAccessList, FeishuChannelConfig, FeishuChannelEnv, } from "./config.js";
@@ -0,0 +1,34 @@
1
+ export interface FeishuChannelEnv {
2
+ FEISHU_APP_ID: string;
3
+ FEISHU_APP_SECRET: string;
4
+ }
5
+ export interface FeishuAccessList {
6
+ /** Feishu open_ids permitted to DM the bot. */
7
+ allowFrom: string[];
8
+ /** Feishu chat_ids the bot is permitted to listen in. */
9
+ allowChats: string[];
10
+ }
11
+ export interface FeishuChannelConfig {
12
+ appId: string;
13
+ appSecret: string;
14
+ access: FeishuAccessList;
15
+ /** RFC-020 §4.3 group trigger policy. Default `mention`. */
16
+ groupPolicy: "mention" | "command" | "all" | "observe";
17
+ /** Send a "⏳ 处理中…" placeholder before agent reply (RFC-020 §4.2). */
18
+ ackPlaceholder: boolean;
19
+ /** Persist redacted raw payload to local audit log (RFC-020 §2.3 / §12.10). */
20
+ auditRaw: boolean;
21
+ /** Per-task timeout in ms; default 5 min (RFC-020 §4.5). */
22
+ taskTimeoutMs: number;
23
+ /**
24
+ * Absolute path to the channel directory. The adapter writes downloaded
25
+ * inbound media to `<channelDir>/media/` (M5c). Populated by the loader so
26
+ * callers do not have to thread it separately.
27
+ */
28
+ channelDir: string;
29
+ }
30
+ /**
31
+ * Load Feishu channel config from a node's channels/feishu directory.
32
+ * Throws if required secrets are missing.
33
+ */
34
+ export declare function loadFeishuChannelConfig(channelDir: string): FeishuChannelConfig;
@@ -0,0 +1,14 @@
1
+ /**
2
+ * RFC-020 §3.1 — Feishu (Lark) IM channel public surface.
3
+ *
4
+ * - `FeishuAdapter` — IMAdapter implementation backed by `@larksuiteoapi/node-sdk` WSClient.
5
+ * - `startFeishuBridge` — entry point spawned by agent-node for SDK runtimes.
6
+ * - `loadFeishuChannelConfig` — loader for `.anet/nodes/<node>/channels/feishu/`.
7
+ *
8
+ * Tracking: issues #179 (parent RFC), #182 (P0 tracker).
9
+ */
10
+ export { FeishuAdapter } from "./adapter.js";
11
+ export { startFeishuBridge } from "./bridge.js";
12
+ export type { FeishuBridgeOptions } from "./bridge.js";
13
+ export { loadFeishuChannelConfig } from "./config.js";
14
+ export type { FeishuAccessList, FeishuChannelConfig, FeishuChannelEnv, } from "./config.js";
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ import*as B from"@larksuiteoapi/node-sdk";import T from"node:crypto";import{existsSync as C,mkdirSync as M,readFileSync as S,writeFileSync as F}from"node:fs";import{join as O}from"node:path";import{Readable as x}from"node:stream";class N{platform="feishu";ingressMode="socket";feishuConfig=null;connectionName="";client=null;wsClient=null;botOpenId=null;mediaDir=null;health_={connected:!1,lastEventAt:null,lastError:null};async init(Q){if(Q.platform!=="feishu")throw Error(`FeishuAdapter.init: expected platform "feishu", got "${Q.platform}"`);let J=Q.platformConfig;if(!J?.appId||!J?.appSecret)throw Error("FeishuAdapter.init: appId / appSecret missing in platformConfig");this.feishuConfig=J,this.connectionName=Q.connectionName,this.client=new B.Client({appId:J.appId,appSecret:J.appSecret,disableTokenCache:!1}),this.botOpenId=await D(this.client),this.mediaDir=J.channelDir?O(J.channelDir,"media"):null}async start(Q){if(!this.feishuConfig||!this.client)throw Error("FeishuAdapter.start: call init() first");let{appId:J,appSecret:V,access:X,groupPolicy:Z}=this.feishuConfig,$=this.connectionName,Y=this.botOpenId,G=this.mediaDir,W=this.client,U=new B.EventDispatcher({});U.register({"im.message.receive_v1":async(R)=>{try{this.health_={...this.health_,lastEventAt:Date.now()};let H=k(R,$,Y);if(!H)return;await E(R,H,W,G);let q=I(H,X,Z);if(!q.allow){L("deny",H,q.reason);return}await Q(H)}catch(H){let q=H instanceof Error?H.message:String(H);this.health_={...this.health_,lastError:q},L("error",null,q)}}}),this.wsClient=new B.WSClient({appId:J,appSecret:V,loggerLevel:B.LoggerLevel.warn}),await this.wsClient.start({eventDispatcher:U}),this.health_={...this.health_,connected:!0,lastError:null}}async stop(){this.health_={...this.health_,connected:!1},this.wsClient=null,this.client=null,this.feishuConfig=null}async send(Q){if(!this.client)throw Error("FeishuAdapter.send: call init() first");let J,V;if(Q.imagePath){let G=await P(this.client,Q.imagePath);if(!G)throw Error(`FeishuAdapter.send: image upload failed for ${Q.imagePath}`);J="image",V=JSON.stringify({image_key:G})}else{let G=Q.text??Q.markdown;if(!G)throw Error("FeishuAdapter.send: requires text, markdown, or imagePath");J="text",V=JSON.stringify({text:G})}let X=Q.replyToMessageId??Q.target.threadRootId;if(X){let W=(await this.client.im.message.reply({path:{message_id:X},data:{msg_type:J,content:V}}))?.data?.message_id;if(!W)throw Error("FeishuAdapter.send: reply returned no message_id");return{messageId:W}}let Z=Q.target.conversationType==="dm"?"open_id":"chat_id",Y=(await this.client.im.message.create({params:{receive_id_type:Z},data:{receive_id:Q.target.conversationId,msg_type:J,content:V}}))?.data?.message_id;if(!Y)throw Error("FeishuAdapter.send: create returned no message_id");return{messageId:Y}}async edit(Q,J,V){if(!this.client)throw Error("FeishuAdapter.edit: call init() first");let X=V.text??V.markdown;if(!X)throw Error("FeishuAdapter.edit: M3 supports text only");await this.client.im.message.update({path:{message_id:J},data:{msg_type:"text",content:JSON.stringify({text:X})}})}health(){return{...this.health_}}}function k(Q,J,V){let X=Q,Z=X?.message,$=X?.sender,Y=$?.sender_id?.open_id;if(!Z||!Y)return null;let G;if(Z.message_type==="text")try{G=JSON.parse(Z.content).text}catch{G=Z.content}else if(Z.message_type==="file")try{G=`[文件: ${JSON.parse(Z.content).file_name??"unknown"}]`}catch{G="[文件]"}else if(Z.message_type==="sticker")G="[表情]";else if(Z.message_type==="image")G=void 0;else return null;let W=Z.chat_type==="group"?"group":"dm",U=Array.isArray(Z.mentions)?Z.mentions:[],R=V?U.some((q)=>q?.id?.open_id===V):U.length>0,H=`${J}#feishu`;return{platform:"feishu",connectionId:H,tenantId:$?.tenant_key,conversation:{platform:"feishu",conversationId:Z.chat_id,conversationType:W,threadRootId:Z.root_id},sender:{id:Y},messageId:Z.message_id,mentioned:R,content:G?{text:G}:{},receivedAt:Date.now(),idempotencyKey:`feishu:${H}:${Z.message_id}`}}async function E(Q,J,V,X){if(!V||!X)return;let $=Q?.message;if(!$||$.message_type!=="image")return;let Y;try{Y=JSON.parse($.content).image_key}catch{return}if(!Y||!$.message_id)return;let G=await b(V,$.message_id,Y,X);if(G)J.content={...J.content,images:[G]}}async function b(Q,J,V,X){try{let Z=await Q.im.messageResource.get({path:{message_id:J,file_key:V},params:{type:"image"}});if(!Z)return null;let $=Z,Y=[];await new Promise((U,R)=>{$.on("data",(H)=>Y.push(Buffer.from(H))),$.on("end",()=>U()),$.on("error",(H)=>R(H))}),M(X,{recursive:!0});let G=`img_${Date.now()}_${T.randomBytes(4).toString("hex")}.png`,W=O(X,G);return F(W,Buffer.concat(Y)),W}catch{return null}}async function P(Q,J){try{if(!C(J))return null;let V=S(J),X=x.from(V);return(await Q.im.image.create({data:{image_type:"message",image:X}}))?.image_key??null}catch{return null}}async function D(Q){try{let V=await Q.request({method:"GET",url:"/open-apis/bot/v3/info"});return V?.bot?.open_id??V?.data?.bot?.open_id??null}catch{return null}}function I(Q,J,V){if(Q.conversation.conversationType==="dm")return J.allowFrom.includes(Q.sender.id)?{allow:!0,reason:""}:{allow:!1,reason:"sender not in allowFrom (dm)"};if(!J.allowChats.includes(Q.conversation.conversationId))return{allow:!1,reason:"chat not in allowChats"};if(V==="all")return{allow:!0,reason:""};if(V==="observe")return{allow:!1,reason:"groupPolicy=observe — chat in allowChats but no trigger"};if(Q.mentioned)return{allow:!0,reason:""};return{allow:!1,reason:`groupPolicy=${V} requires @bot mention (not mentioned)`}}function L(Q,J,V){let X=new Date().toISOString(),Z=J?`${J.conversation.conversationType}:${J.conversation.conversationId}`:"?",$=J?J.sender.id:"?";process.stderr.write(`[${X}] [feishu:audit] ${Q} from=${$} conv=${Z} — ${V}
3
+ `)}import{existsSync as _,readFileSync as z}from"node:fs";import{join as K}from"node:path";function A(Q){let J=w(K(Q,".env")),V=J.FEISHU_APP_ID,X=J.FEISHU_APP_SECRET;if(!V||!X)throw Error(`feishu channel: FEISHU_APP_ID / FEISHU_APP_SECRET missing in ${Q}/.env`);let Z=y(K(Q,"access.json"));return{appId:V,appSecret:X,access:Z,groupPolicy:"mention",ackPlaceholder:!0,auditRaw:!1,taskTimeoutMs:300000,channelDir:Q}}function w(Q){if(!_(Q))return{};let J={};for(let V of z(Q,"utf-8").split(/\r?\n/)){let X=V.trim();if(!X||X.startsWith("#"))continue;let Z=X.indexOf("=");if(Z<0)continue;let $=X.slice(0,Z).trim(),Y=X.slice(Z+1).trim().replace(/^["']|["']$/g,"");J[$]=Y}return J}function y(Q){if(!_(Q))return{allowFrom:[],allowChats:[]};try{let J=JSON.parse(z(Q,"utf-8"));return{allowFrom:Array.isArray(J.allowFrom)?J.allowFrom:[],allowChats:Array.isArray(J.allowChats)?J.allowChats:[]}}catch{return{allowFrom:[],allowChats:[]}}}var u=900000,f=120000;async function j(Q){let J=A(Q.channelDir),V=new N;await V.init({platform:"feishu",connectionName:Q.nodeAlias,ingressMode:"socket",groupPolicy:J.groupPolicy,ackPlaceholder:J.ackPlaceholder,auditRaw:J.auditRaw,taskTimeoutMs:J.taskTimeoutMs,platformConfig:J});let X=J.taskTimeoutMs||u,Z=Q.onEvent??p(V,X);return await V.start(h(Z)),V}function h(Q){let J=new Map;return async(V)=>{let X=Date.now();if(J.size>200){for(let[Z,$]of J)if(X-$>f)J.delete(Z)}if(J.has(V.idempotencyKey)){process.stderr.write(`[feishu:bridge] dedup drop ${V.idempotencyKey}
4
+ `);return}J.set(V.idempotencyKey,X),await Q(V)}}function p(Q,J){if(typeof process.send==="function")return v(Q,J);return m}function v(Q,J){if(typeof process.send!=="function")throw Error("createIPCEventHandler: parent process.send unavailable (not forked)");let V=new Map;return process.on("message",(X)=>{if(!l(X))return;let Z=V.get(X.eventKey);if(!Z)return;V.delete(X.eventKey);let{text:$,eventKey:Y}=X;(async()=>{try{await Q.send({target:Z.conversation,text:$,replyToMessageId:Z.messageId,correlation:{taskId:Y}})}catch(G){let W=G instanceof Error?G.message:String(G);process.stderr.write(`[feishu:bridge] reply send failed: ${W}
5
+ `)}})()}),async(X)=>{V.set(X.idempotencyKey,X),setTimeout(()=>{if(!V.has(X.idempotencyKey))return;V.delete(X.idempotencyKey),(async()=>{try{await Q.send({target:X.conversation,text:"[处理超时,任务可能仍在后台运行]",replyToMessageId:X.messageId,correlation:{taskId:X.idempotencyKey}}),process.stderr.write(`[feishu:bridge] timeout-notify sent for ${X.idempotencyKey} after ${J}ms
6
+ `)}catch($){let Y=$ instanceof Error?$.message:String($);process.stderr.write(`[feishu:bridge] timeout-notify send failed: ${Y}
7
+ `)}})()},J);let Z={type:"event",event:X};process.send(Z)}}function l(Q){if(!Q||typeof Q!=="object")return!1;let J=Q;return J.type==="reply"&&typeof J.eventKey==="string"&&typeof J.text==="string"}async function m(Q){process.stderr.write(`[feishu:bridge] event from=${Q.sender.id} conv=${Q.conversation.conversationType}:${Q.conversation.conversationId} mentioned=${Q.mentioned} text=${(Q.content.text??"").slice(0,80)}
8
+ `)}function c(Q){let J={};for(let V=0;V<Q.length;V++){let X=Q[V],Z=Q[V+1];if(X==="--channel-dir"&&Z)J.channelDir=Z,V++;else if(X==="--node-alias"&&Z)J.nodeAlias=Z,V++}return J}async function d(){let Q=c(process.argv.slice(2));if(!Q.channelDir||!Q.nodeAlias)process.stderr.write(`usage: feishu-worker --channel-dir <path> --node-alias <alias>
9
+ `),process.exit(2);try{await j({channelDir:Q.channelDir,nodeAlias:Q.nodeAlias}),process.stderr.write(`[feishu:worker] bridge online — node=${Q.nodeAlias} dir=${Q.channelDir} ipc=${typeof process.send==="function"?"yes":"no"}
10
+ `)}catch(J){let V=J instanceof Error?J.stack??J.message:String(J);process.stderr.write(`[feishu:worker] startup failed: ${V}
11
+ `),process.exit(1)}}d();
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env bun
2
- const a0_0xe00d2=a0_0x3619;(function(_0x3de888,_0x3ae8c2){const _0x4c617a=a0_0x3619,_0x44ef7b=_0x3de888();while(!![]){try{const _0xf9cc9e=parseInt(_0x4c617a(0xe6))/0x1*(-parseInt(_0x4c617a(0xdf))/0x2)+parseInt(_0x4c617a(0x89))/0x3+parseInt(_0x4c617a(0xb3))/0x4+-parseInt(_0x4c617a(0x9d))/0x5+parseInt(_0x4c617a(0xc1))/0x6+parseInt(_0x4c617a(0x7f))/0x7+-parseInt(_0x4c617a(0xc5))/0x8;if(_0xf9cc9e===_0x3ae8c2)break;else _0x44ef7b['push'](_0x44ef7b['shift']());}catch(_0x3f46ad){_0x44ef7b['push'](_0x44ef7b['shift']());}}}(a0_0x54df,0x9b1d1));import{readFileSync as a0_0x40291,existsSync as a0_0x5d2218}from'fs';function a0_0x3619(_0x229864,_0x3727f6){_0x229864=_0x229864-0x75;const _0x54df86=a0_0x54df();let _0x3619d4=_0x54df86[_0x229864];return _0x3619d4;}import{randomUUID as a0_0x2cd624}from'crypto';import{join as a0_0x7e2e48}from'path';import{hostname as a0_0x2a2395}from'os';import{execSync as a0_0x4f573d}from'child_process';import{Server as a0_0x55c4fd}from'@modelcontextprotocol/sdk/server/index.js';import{StdioServerTransport as a0_0x2be3d9}from'@modelcontextprotocol/sdk/server/stdio.js';import{ListToolsRequestSchema as a0_0x5190a6,CallToolRequestSchema as a0_0x5ded48}from'@modelcontextprotocol/sdk/types.js';function I(_0x20ea8d){const _0x46e977=a0_0x3619;if(!a0_0x5d2218(_0x20ea8d))return;for(let _0x127229 of a0_0x40291(_0x20ea8d,'utf-8')[_0x46e977(0x8b)]('\x0a')){let _0x1a144e=_0x127229['trim']();if(!_0x1a144e||_0x1a144e[_0x46e977(0xf9)]('#'))continue;let _0xd49206=_0x1a144e[_0x46e977(0x7a)]('=');if(_0xd49206<0x0)continue;let _0x838428=_0x1a144e[_0x46e977(0x9b)](0x0,_0xd49206)[_0x46e977(0x99)](),_0x41f22d=_0x1a144e['slice'](_0xd49206+0x1)['trim']()[_0x46e977(0xc6)](/^["']|["']$/g,'');if(!process.env[_0x838428])process.env[_0x838428]=_0x41f22d;}}var L=process.env.HOME||'~',U=a0_0x7e2e48(L,a0_0xe00d2(0xe4));I(a0_0x7e2e48(U,a0_0xe00d2(0xba)));var v=process[a0_0xe00d2(0x7c)]()[a0_0xe00d2(0xc6)](/\//g,'-');I(a0_0x7e2e48(U,v,a0_0xe00d2(0xba)));function d(){const _0x75e849=a0_0xe00d2;try{return a0_0x4f573d('tmux\x20display-message\x20-p\x20\x27#S\x27',{'encoding':_0x75e849(0xe2),'timeout':0x7d0})[_0x75e849(0x99)]();}catch{return'';}}function m(){const _0x1727a1=a0_0xe00d2;try{let _0x2d435d=a0_0x7e2e48(L,'.anet',_0x1727a1(0xc0));if(a0_0x5d2218(_0x2d435d))return JSON[_0x1727a1(0xf3)](a0_0x40291(_0x2d435d,'utf-8'));}catch{}return{};}var u=m(),j=process.env.COMMHUB_URL||u[a0_0xe00d2(0x10a)]||'http://127.0.0.1:9200',f=process.env.COMMHUB_TMUX||d();function r(){const _0x517da7=a0_0xe00d2;if(process.env.COMMHUB_ALIAS&&process.env.COMMHUB_ALIAS['trim']())return process.env.COMMHUB_ALIAS[_0x517da7(0x99)]();return process[_0x517da7(0x8c)]['write'](_0x517da7(0xb9)+(_0x517da7(0xc3)+(f||'(none)')+_0x517da7(0xeb)+a0_0x2a2395()+_0x517da7(0xe9))),_0x517da7(0xd5)+process[_0x517da7(0xbb)];}var G=r(),K=process.env.COMMHUB_RESUME_ID||process.env.CLAUDE_RESUME_ID||a0_0x2cd624(),F=process.env.COMMHUB_TOKEN||u[a0_0xe00d2(0xf5)]||'';function W(_0x580c1a){const _0x2e376c=a0_0xe00d2;let _0x2612db=new Date()[_0x2e376c(0x110)]()['slice'](0x0,0x8);process[_0x2e376c(0x8c)][_0x2e376c(0xc7)]('['+_0x2612db+_0x2e376c(0xf2)+_0x580c1a+'\x0a');}function N(_0x3450ab){return new Promise(_0x4db777=>setTimeout(_0x4db777,_0x3450ab));}W(a0_0xe00d2(0xaf)+j+a0_0xe00d2(0x8e)+G+a0_0xe00d2(0x10b)+K['slice'](0x0,0x8)+a0_0xe00d2(0xe0)+(f||a0_0xe00d2(0x85))+a0_0xe00d2(0x96)+process[a0_0xe00d2(0x7c)]()+a0_0xe00d2(0x114)+v);function a0_0x54df(){const _0x5e49a9=['broadcast','connect','Reply\x20to\x20a\x20CommHub\x20task\x20—\x20report\x20completion\x20or\x20send\x20a\x20message\x20back\x20to\x20the\x20hub.','\x20CWD=','completed','cancelled','trim','fatal:\x20','slice','priority','2576425NlGZHC','Priority\x20(default:\x20normal)','failed','exit','Session\x20alias:\x20','set','min','body','text','unknown\x20tool','catch','send_reply','/events/','These\x20are\x20tasks\x20dispatched\x20by\x20the\x20hub\x20or\x20other\x20sessions\x20via\x20the\x20CommHub\x20Server.','0.3.0','/mcp','shutting\x20down,\x20reporting\x20offline...','number','ENV:\x20URL=','pop','\x22\x20(','idle','2710764KxCnSf','no\x20response','Messages\x20from\x20CommHub\x20arrive\x20as\x20<channel\x20source=\x22commhub\x22\x20task_id=\x22...\x22\x20priority=\x22...\x22\x20from=\x22...\x22>','Bearer\x20','stdin','tools/call','[commhub]\x20WARN:\x20COMMHUB_ALIAS\x20env\x20var\x20is\x20unset\x20—\x20outbound\x20from_session\x20','.env','pid','application/json,\x20text/event-stream','Update\x20this\x20session\x27s\x20status\x20in\x20CommHub\x20(working/idle/blocked/error).\x20Returns\x20inbox_count.','stringify','alias','config.json','5099460jSfCTf','task','would\x20mis-attribute.\x20Refusing\x20to\x20guess\x20from\x20TMUX_NAME=','in_progress','17512512mVuOEO','replace','write','find','join','commhub_reply','claude-code','SSE\x20connection\x20error:\x20','Progress\x200-100','replied','commhub_get_all_status','SIGTERM','params','normal','length','high','unattributed-','Reply\x20using\x20the\x20commhub_reply\x20tool\x20to\x20report\x20status\x20or\x20results\x20back.','error','ready\x20—\x20waiting\x20for\x20events','commhub','warning:\x20could\x20not\x20register:\x20','MCP\x20stdio\x20connected','\x22\x20after\x20SSE\x20reconnect','object','SSE\x20连续\x20>1h\x20连不上\x20hub\x20(','282DvMPip','...\x20TMUX=','SSE\x20connected\x20as\x20\x22','utf-8','statusText','.claude/channels/commhub','Send\x20a\x20task\x20to\x20another\x20session\x20via\x20CommHub.','1123xTOUfV','from','new_message','.\x20Restart\x20node\x20via\x20`anet\x20node\x20start\x20<alias>`\x20so\x20the\x20env\x20is\x20set\x20explicitly\x20(#203).\x0a','report_status','\x20/\x20hostname=','working','status','notification','re-registered\x20as\x20\x22','setRequestHandler','delete',']\x20[commhub]\x20','parse','get_all_status','token','Task\x20outcome:\x20completed/failed/cancelled\x20for\x20final\x20results,\x20blocked/error/in_progress\x20for\x20status\x20updates','You\x20can\x20also\x20use\x20commhub_report_status\x20to\x20update\x20your\x20session\x20status.','application/json','startsWith','string','SSE\x20stream\x20ended,\x20reconnecting...','message_id','result','message','Message\x20content','Task\x20content','low','type','ack_inbox','messages','send_task','The\x20task_id\x20from\x20the\x20channel\x20message\x20(or\x20\x27hub\x27\x20for\x20general)','from_session','2025-03-26','now','hub','\x20RESUME_ID=','Reply\x20text\x20/\x20result\x20summary','Get\x20status\x20of\x20all\x20sessions\x20from\x20CommHub.','blocked','commhub_report_status','toTimeString','get_inbox','commhub_send_task','content','\x20PROJECT_ENV=','parse\x20error:\x20','commhub_send_message','commhub-channel','connected','←\x20message\x20from\x20','indexOf','notifications/claude/channel','cwd','decode','\x20priority=','8839957UhadZh',')\x20—\x20放弃自动重连。手动\x20anet\x20node\x20start\x20恢复。','session\x20disconnected','data:\x20','starting\x20SSE\x20listener...','→\x20injected\x20task\x20','none','heartbeat\x20failed:\x20','init\x20failed:\x20','POST','2122755kWuaXu','Target\x20session\x20alias','split','stderr','send_message','\x20ALIAS=',':\x20inbox_count=','SSE\x20error:\x20','2.0','getReader'];a0_0x54df=function(){return _0x5e49a9;};return a0_0x54df();}var D=new Map(),x=new a0_0x55c4fd({'name':a0_0xe00d2(0x77),'version':a0_0xe00d2(0xab)},{'capabilities':{'experimental':{'claude/channel':{}},'tools':{}},'instructions':[a0_0xe00d2(0xb5),a0_0xe00d2(0xaa),a0_0xe00d2(0xd6),a0_0xe00d2(0xf7),a0_0xe00d2(0xa1)+G][a0_0xe00d2(0xc9)]('\x0a')});x[a0_0xe00d2(0xf0)](a0_0x5190a6,async()=>({'tools':[{'name':a0_0xe00d2(0xca),'description':a0_0xe00d2(0x95),'inputSchema':{'type':'object','properties':{'task_id':{'type':a0_0xe00d2(0xfa),'description':a0_0xe00d2(0x106)},'text':{'type':a0_0xe00d2(0xfa),'description':a0_0xe00d2(0x10c)},'status':{'type':'string','enum':['completed',a0_0xe00d2(0x9f),a0_0xe00d2(0x98),a0_0xe00d2(0x10e),a0_0xe00d2(0xd7),a0_0xe00d2(0xc4)],'description':a0_0xe00d2(0xf6)}},'required':['text']}},{'name':a0_0xe00d2(0x10f),'description':a0_0xe00d2(0xbd),'inputSchema':{'type':a0_0xe00d2(0xdd),'properties':{'status':{'type':a0_0xe00d2(0xfa),'enum':[a0_0xe00d2(0xec),a0_0xe00d2(0xb2),'blocked',a0_0xe00d2(0xd7)]},'task':{'type':'string','description':'Current\x20task\x20description'},'progress':{'type':a0_0xe00d2(0xae),'description':a0_0xe00d2(0xcd)}},'required':[a0_0xe00d2(0xed)]}},{'name':'commhub_send_task','description':a0_0xe00d2(0xe5),'inputSchema':{'type':a0_0xe00d2(0xdd),'properties':{'alias':{'type':a0_0xe00d2(0xfa),'description':'Target\x20session\x20alias'},'task':{'type':a0_0xe00d2(0xfa),'description':a0_0xe00d2(0x100)},'priority':{'type':a0_0xe00d2(0xfa),'enum':[a0_0xe00d2(0xd4),'normal',a0_0xe00d2(0x101)],'description':a0_0xe00d2(0x9e)}},'required':[a0_0xe00d2(0xbf),a0_0xe00d2(0xc2)]}},{'name':'commhub_send_message','description':'Send\x20a\x20message\x20to\x20another\x20session\x20(no\x20task\x20lifecycle,\x20just\x20chat).\x20Use\x20for\x20replies\x20and\x20status\x20updates.','inputSchema':{'type':a0_0xe00d2(0xdd),'properties':{'alias':{'type':a0_0xe00d2(0xfa),'description':a0_0xe00d2(0x8a)},'message':{'type':a0_0xe00d2(0xfa),'description':a0_0xe00d2(0xff)}},'required':[a0_0xe00d2(0xbf),'message']}},{'name':'commhub_get_all_status','description':a0_0xe00d2(0x10d),'inputSchema':{'type':a0_0xe00d2(0xdd),'properties':{}}}]}));async function Y(_0x12f471,_0x44f004){const _0xbbbeb=a0_0xe00d2;let _0x1b09d7=await fetch(j+_0xbbbeb(0xac),{'method':_0xbbbeb(0x88),'headers':{'Content-Type':_0xbbbeb(0xf8),'Accept':_0xbbbeb(0xbc),...F?{'Authorization':_0xbbbeb(0xb6)+F}:{}},'body':JSON[_0xbbbeb(0xbe)]({'jsonrpc':_0xbbbeb(0x91),'id':0x1,'method':'initialize','params':{'protocolVersion':_0xbbbeb(0x108),'capabilities':{},'clientInfo':{'name':_0xbbbeb(0x77),'version':'0.3.0'}}})});if(!_0x1b09d7['ok']){let _0x2b4ed1=await _0x1b09d7[_0xbbbeb(0xa5)]();return W('CommHub\x20init\x20failed:\x20'+_0x1b09d7[_0xbbbeb(0xed)]+'\x20'+_0x2b4ed1[_0xbbbeb(0x9b)](0x0,0x64)),{'ok':!0x1,'error':_0xbbbeb(0x87)+_0x1b09d7[_0xbbbeb(0xed)]};}await _0x1b09d7['text']();let _0x4cb529=(await(await fetch(j+'/mcp',{'method':_0xbbbeb(0x88),'headers':{'Content-Type':_0xbbbeb(0xf8),'Accept':_0xbbbeb(0xbc),...F?{'Authorization':'Bearer\x20'+F}:{}},'body':JSON[_0xbbbeb(0xbe)]({'jsonrpc':_0xbbbeb(0x91),'id':0x2,'method':_0xbbbeb(0xb8),'params':{'name':_0x12f471,'arguments':_0x44f004}})}))[_0xbbbeb(0xa5)]())['split']('\x0a')['find'](_0xe94bd2=>_0xe94bd2[_0xbbbeb(0xf9)](_0xbbbeb(0x82)));if(_0x4cb529){let _0x298868=JSON[_0xbbbeb(0xf3)](_0x4cb529[_0xbbbeb(0x9b)](0x6));return _0x298868?.[_0xbbbeb(0xfd)]?.[_0xbbbeb(0x113)]?.[0x0]?.['text']?JSON[_0xbbbeb(0xf3)](_0x298868[_0xbbbeb(0xfd)][_0xbbbeb(0x113)][0x0][_0xbbbeb(0xa5)]):_0x298868;}return{'ok':!0x1,'error':_0xbbbeb(0xb4)};}x[a0_0xe00d2(0xf0)](a0_0x5ded48,async _0x1af408=>{const _0x228e7a=a0_0xe00d2;let {name:_0x3efa6a,arguments:_0x21882f}=_0x1af408[_0x228e7a(0xd1)];if(_0x3efa6a===_0x228e7a(0xca)){let {task_id:_0x3a87c5,text:_0x1a7188,status:_0xb58f5a}=_0x21882f;if(_0xb58f5a===_0x228e7a(0x97)||_0xb58f5a===_0x228e7a(0x9f)||_0xb58f5a===_0x228e7a(0x98)){let _0x2f8b5c=_0xb58f5a===_0x228e7a(0x97)?_0x228e7a(0xce):_0xb58f5a,_0x55fe89=_0x3a87c5?D['get'](_0x3a87c5)||'hub':_0x228e7a(0x10a),_0xa3fa84=await Y(_0x228e7a(0xa8),{'alias':_0x55fe89,'text':_0x1a7188,'in_reply_to':_0x3a87c5||void 0x0,'status':_0x2f8b5c,'from_session':G});if(_0x3a87c5)D[_0x228e7a(0xf1)](_0x3a87c5);return{'content':[{'type':_0x228e7a(0xa5),'text':JSON[_0x228e7a(0xbe)](_0xa3fa84)}]};}let _0x4f7348=await Y(_0x228e7a(0xea),{'resume_id':K,'alias':G,'status':_0xb58f5a===_0x228e7a(0x10e)?_0x228e7a(0x10e):_0xb58f5a===_0x228e7a(0xd7)?_0x228e7a(0xd7):'working','task':_0x1a7188[_0x228e7a(0x9b)](0x0,0xc8),'output':_0x1a7188});return{'content':[{'type':_0x228e7a(0xa5),'text':JSON['stringify'](_0x4f7348)}]};}if(_0x3efa6a===_0x228e7a(0x10f)){let {status:_0x96b5eb,task:_0x42b95c,progress:_0x9d316c}=_0x21882f,_0x1241f0=await Y('report_status',{'resume_id':K,'alias':G,'status':_0x96b5eb,'task':_0x42b95c,'progress':_0x9d316c});return{'content':[{'type':_0x228e7a(0xa5),'text':JSON[_0x228e7a(0xbe)](_0x1241f0)}]};}if(_0x3efa6a===_0x228e7a(0x112)){let {alias:_0xcd680b,task:_0x3dbfe1,priority:_0x5437e8}=_0x21882f,_0x467a98=await Y(_0x228e7a(0x105),{'alias':_0xcd680b,'task':_0x3dbfe1,'priority':_0x5437e8||_0x228e7a(0xd2),'from_session':G});return{'content':[{'type':_0x228e7a(0xa5),'text':JSON[_0x228e7a(0xbe)](_0x467a98)}]};}if(_0x3efa6a===_0x228e7a(0x76)){let {alias:_0x1b081b,message:_0x28acbc}=_0x21882f,_0x156930=await Y(_0x228e7a(0x8d),{'alias':_0x1b081b,'message':_0x28acbc,'from_session':G});return{'content':[{'type':'text','text':JSON[_0x228e7a(0xbe)](_0x156930)}]};}if(_0x3efa6a===_0x228e7a(0xcf)){let _0x36d9e0=await Y(_0x228e7a(0xf4),{});return{'content':[{'type':'text','text':JSON[_0x228e7a(0xbe)](_0x36d9e0)}]};}return{'content':[{'type':_0x228e7a(0xa5),'text':JSON[_0x228e7a(0xbe)]({'error':_0x228e7a(0xa6)})}]};});var O=0x3e8,R=0x7530,T=0x36ee80;async function l(){const _0x43bedf=a0_0xe00d2;try{await Y(_0x43bedf(0xea),{'resume_id':K,'alias':G,'status':'idle','server':a0_0x2a2395(),'hostname':a0_0x2a2395(),'agent':_0x43bedf(0xcb),'project_dir':process['cwd'](),'tmux_name':f||void 0x0}),W(_0x43bedf(0xef)+G+_0x43bedf(0xdc));}catch(_0x1cc2dd){W('re-register\x20failed:\x20'+_0x1cc2dd);}}async function o(){const _0x17d6b4=a0_0xe00d2;let _0x1d029e=j+_0x17d6b4(0xa9)+encodeURIComponent(G),_0x470847={};if(F)_0x470847['Authorization']=_0x17d6b4(0xb6)+F;W('connecting\x20to\x20'+_0x1d029e);let _0x5e9861=O,_0x5136b5=!0x0,_0x4ca9a5=null;while(!0x0){try{let _0x322952=await fetch(_0x1d029e,{'headers':_0x470847});if(!_0x322952['ok']){if(W(_0x17d6b4(0x90)+_0x322952[_0x17d6b4(0xed)]+'\x20'+_0x322952[_0x17d6b4(0xe3)]),_0x4ca9a5=_0x4ca9a5??Date[_0x17d6b4(0x109)](),Date[_0x17d6b4(0x109)]()-_0x4ca9a5>T){W('SSE\x20连续\x20>1h\x20连不上\x20hub\x20('+j+_0x17d6b4(0x80));return;}await N(_0x5e9861),_0x5e9861=Math[_0x17d6b4(0xa3)](_0x5e9861*0x2,R);continue;}let _0x2f897f=_0x322952[_0x17d6b4(0xa4)][_0x17d6b4(0x92)](),_0x8f486c=new TextDecoder(),_0x25ea26='';_0x5e9861=O;while(!0x0){let {done:_0x9f4638,value:_0xc5e289}=await _0x2f897f['read']();if(_0x9f4638)break;_0x25ea26+=_0x8f486c[_0x17d6b4(0x7d)](_0xc5e289,{'stream':!0x0});let _0x11f478=_0x25ea26[_0x17d6b4(0x8b)]('\x0a\x0a');_0x25ea26=_0x11f478[_0x17d6b4(0xb0)]()||'';for(let _0x3d5d68 of _0x11f478){let _0xa6de1c=_0x3d5d68[_0x17d6b4(0x8b)]('\x0a')[_0x17d6b4(0xc8)](_0x3c8496=>_0x3c8496[_0x17d6b4(0xf9)](_0x17d6b4(0x82)));if(!_0xa6de1c)continue;try{let _0x4a5882=JSON['parse'](_0xa6de1c['slice'](0x6));if(await a(_0x4a5882),_0x4a5882['type']==='connected'){if(_0x4ca9a5=null,!_0x5136b5)await l();_0x5136b5=!0x1;}}catch(_0x5b4425){W(_0x17d6b4(0x75)+_0x5b4425);}}}W(_0x17d6b4(0xfb));}catch(_0x4ed0b8){W(_0x17d6b4(0xcc)+_0x4ed0b8);}if(_0x4ca9a5=_0x4ca9a5??Date[_0x17d6b4(0x109)](),Date[_0x17d6b4(0x109)]()-_0x4ca9a5>T){W(_0x17d6b4(0xde)+j+_0x17d6b4(0x80));return;}await N(_0x5e9861),_0x5e9861=Math['min'](_0x5e9861*0x2,R);}}async function a(_0x3d2938){const _0x48dd96=a0_0xe00d2;if(_0x3d2938[_0x48dd96(0x102)]===_0x48dd96(0x78)){W(_0x48dd96(0xe1)+G+'\x22');return;}if(_0x3d2938['type']===_0x48dd96(0xe8)){if(W(_0x48dd96(0x79)+_0x3d2938[_0x48dd96(0xe7)]+':\x20'+_0x3d2938[_0x48dd96(0xfe)][_0x48dd96(0x9b)](0x0,0x3c)),await x[_0x48dd96(0xee)]({'method':_0x48dd96(0x7b),'params':{'content':_0x3d2938['message'],'meta':{'sender':_0x3d2938[_0x48dd96(0xe7)]||_0x48dd96(0x10a),'sender_id':_0x48dd96(0xd9),'user':_0x3d2938[_0x48dd96(0xe7)]||_0x48dd96(0x10a),'priority':_0x48dd96(0xd2)}}}),_0x3d2938[_0x48dd96(0xfc)])await Y('ack_inbox',{'alias':G,'message_id':_0x3d2938[_0x48dd96(0xfc)]});return;}if(_0x3d2938[_0x48dd96(0x102)]==='new_task'||_0x3d2938[_0x48dd96(0x102)]===_0x48dd96(0x93)){W('←\x20'+_0x3d2938[_0x48dd96(0x102)]+_0x48dd96(0x8f)+_0x3d2938['inbox_count']+_0x48dd96(0x7e)+(_0x3d2938['priority']||_0x48dd96(0xd2)));let _0x2185e5=await Y(_0x48dd96(0x111),{'alias':G,'limit':0x5});if(_0x2185e5?.['ok']&&_0x2185e5[_0x48dd96(0x104)]?.[_0x48dd96(0xd3)]>0x0)for(let _0x20b064 of _0x2185e5[_0x48dd96(0x104)]){let _0x208f9f={'sender':_0x20b064[_0x48dd96(0x107)]||_0x48dd96(0x10a),'sender_id':_0x48dd96(0xd9),'user':_0x20b064['from_session']||_0x48dd96(0x10a),'task_id':_0x20b064['id'],'priority':_0x20b064[_0x48dd96(0x9c)]||'normal'};D[_0x48dd96(0xa2)](_0x20b064['id'],_0x20b064[_0x48dd96(0x107)]||_0x48dd96(0x10a)),await x[_0x48dd96(0xee)]({'method':_0x48dd96(0x7b),'params':{'content':_0x20b064[_0x48dd96(0x113)],'meta':_0x208f9f}}),W(_0x48dd96(0x84)+_0x20b064['id'][_0x48dd96(0x9b)](0x0,0x8)+'\x20from\x20'+_0x20b064[_0x48dd96(0x107)]+':\x20'+_0x20b064[_0x48dd96(0x113)]['slice'](0x0,0x3c)),await Y(_0x48dd96(0x103),{'alias':G,'message_id':_0x20b064['id']});}}}async function n(){const _0x4308f3=a0_0xe00d2;let _0x450d99=new a0_0x2be3d9();await x[_0x4308f3(0x94)](_0x450d99),W(_0x4308f3(0xdb)),W(_0x4308f3(0x83)),o()[_0x4308f3(0xa7)](_0x3b6f46=>W('SSE\x20fatal:\x20'+_0x3b6f46)),Y(_0x4308f3(0xea),{'resume_id':K,'alias':G,'status':_0x4308f3(0xb2),'server':a0_0x2a2395(),'hostname':a0_0x2a2395(),'agent':_0x4308f3(0xcb),'project_dir':process[_0x4308f3(0x7c)](),'tmux_name':f||void 0x0})['then'](()=>W('registered\x20as\x20\x22'+G+_0x4308f3(0xb1)+K[_0x4308f3(0x9b)](0x0,0x8)+')'))[_0x4308f3(0xa7)](_0x4ab1f2=>W(_0x4308f3(0xda)+_0x4ab1f2)),setInterval(()=>{const _0x244e01=_0x4308f3;Y('report_status',{'resume_id':K,'alias':G,'status':_0x244e01(0xb2),'server':a0_0x2a2395(),'hostname':a0_0x2a2395(),'agent':_0x244e01(0xcb),'project_dir':process['cwd'](),'tmux_name':f||void 0x0})[_0x244e01(0xa7)](_0x1161e2=>W(_0x244e01(0x86)+_0x1161e2));},0x2bf20),W(_0x4308f3(0xd8));}n()['catch'](_0x2aa627=>{const _0x2473c3=a0_0xe00d2;W(_0x2473c3(0x9a)+_0x2aa627),process[_0x2473c3(0xa0)](0x1);});async function b(){const _0x35140f=a0_0xe00d2;W(_0x35140f(0xad)),await Y('report_status',{'resume_id':K,'alias':G,'status':'offline','task':_0x35140f(0x81)})['catch'](()=>{}),process[_0x35140f(0xa0)](0x0);}process[a0_0xe00d2(0xb7)]['on']('end',()=>b()),process['on'](a0_0xe00d2(0xd0),()=>b()),process['on']('SIGINT',()=>b());
2
+ const a0_0x46492c=a0_0x4ca9;(function(_0x13f52c,_0x5c868a){const _0x291654=a0_0x4ca9,_0x331d56=_0x13f52c();while(!![]){try{const _0x345745=-parseInt(_0x291654(0x136))/0x1*(-parseInt(_0x291654(0x173))/0x2)+parseInt(_0x291654(0x140))/0x3*(parseInt(_0x291654(0xe8))/0x4)+-parseInt(_0x291654(0x110))/0x5*(parseInt(_0x291654(0x16a))/0x6)+-parseInt(_0x291654(0x157))/0x7*(parseInt(_0x291654(0x138))/0x8)+parseInt(_0x291654(0x132))/0x9*(-parseInt(_0x291654(0xf9))/0xa)+parseInt(_0x291654(0x14a))/0xb+parseInt(_0x291654(0x16b))/0xc;if(_0x345745===_0x5c868a)break;else _0x331d56['push'](_0x331d56['shift']());}catch(_0x37b189){_0x331d56['push'](_0x331d56['shift']());}}}(a0_0x225b,0xb5055));import{readFileSync as a0_0x4cc358,existsSync as a0_0x364285}from'fs';import{randomUUID as a0_0x17c95e}from'crypto';import{join as a0_0x2175ac}from'path';import{hostname as a0_0x47b9f6}from'os';import{execSync as a0_0xd3af48}from'child_process';import{Server as a0_0x38247c}from'@modelcontextprotocol/sdk/server/index.js';import{StdioServerTransport as a0_0x281413}from'@modelcontextprotocol/sdk/server/stdio.js';import{ListToolsRequestSchema as a0_0xbb978b,CallToolRequestSchema as a0_0xbc40e}from'@modelcontextprotocol/sdk/types.js';function I(_0x2007b8){const _0x21657b=a0_0x4ca9;if(!a0_0x364285(_0x2007b8))return;for(let _0x55b4bf of a0_0x4cc358(_0x2007b8,_0x21657b(0x142))[_0x21657b(0x134)]('\x0a')){let _0x459e7e=_0x55b4bf['trim']();if(!_0x459e7e||_0x459e7e[_0x21657b(0xf7)]('#'))continue;let _0x2e0941=_0x459e7e[_0x21657b(0x13a)]('=');if(_0x2e0941<0x0)continue;let _0x543e9f=_0x459e7e[_0x21657b(0xe6)](0x0,_0x2e0941)[_0x21657b(0x15d)](),_0x304ea7=_0x459e7e[_0x21657b(0xe6)](_0x2e0941+0x1)['trim']()[_0x21657b(0x12e)](/^["']|["']$/g,'');if(!process.env[_0x543e9f])process.env[_0x543e9f]=_0x304ea7;}}var L=process.env.HOME||'~',U=a0_0x2175ac(L,'.claude/channels/commhub');I(a0_0x2175ac(U,a0_0x46492c(0x107)));function a0_0x225b(){const _0x3c0b11=['Reply\x20text\x20/\x20result\x20summary','exit','.anet','(none)','init\x20failed:\x20','Update\x20this\x20session\x27s\x20status\x20in\x20CommHub\x20(working/idle/blocked/error).\x20Returns\x20inbox_count.','data:\x20','completed','Task\x20content','now','.env','stdin','broadcast','SSE\x20stream\x20ended,\x20reconnecting...','message_id','Progress\x200-100','/mcp','connect','SIGINT','5ToOGqo','Target\x20session\x20alias','Message\x20content','failed','SSE\x20fatal:\x20','text','Get\x20status\x20of\x20all\x20sessions\x20from\x20CommHub.','→\x20injected\x20task\x20','re-registered\x20as\x20\x22','http://127.0.0.1:9200','commhub','from','Send\x20a\x20message\x20to\x20another\x20session\x20(no\x20task\x20lifecycle,\x20just\x20chat).\x20Use\x20for\x20replies\x20and\x20status\x20updates.','working','notification','token','in_progress','get_all_status','[commhub]\x20WARN:\x20COMMHUB_ALIAS\x20env\x20var\x20is\x20unset\x20—\x20outbound\x20from_session\x20','messages','status','message','connected','hub','unattributed-','from_session','starting\x20SSE\x20listener...','\x20ALIAS=','Task\x20outcome:\x20completed/failed/cancelled\x20for\x20final\x20results,\x20blocked/error/in_progress\x20for\x20status\x20updates','\x22\x20(','replace','commhub_send_task','read','cancelled','123399VRgvix','You\x20can\x20also\x20use\x20commhub_report_status\x20to\x20update\x20your\x20session\x20status.','split','stderr','838RAUPqu','\x20PROJECT_ENV=','16896sGKjTf','stringify','indexOf','0.3.0','set','would\x20mis-attribute.\x20Refusing\x20to\x20guess\x20from\x20TMUX_NAME=','object','idle','6EHSArw','normal','utf-8','min','send_message','Send\x20a\x20task\x20to\x20another\x20session\x20via\x20CommHub.','heartbeat\x20failed:\x20','then','...\x20TMUX=','high','11567479aDeLmi','replied','ack_inbox','send_reply','SSE\x20connected\x20as\x20\x22','2.0','offline','session\x20disconnected','Reply\x20to\x20a\x20CommHub\x20task\x20—\x20report\x20completion\x20or\x20send\x20a\x20message\x20back\x20to\x20the\x20hub.','config.json',':\x20inbox_count=','cwd','POST','4151KkYcZP','no\x20response','pid','claude-code','type','warning:\x20could\x20not\x20register:\x20','trim','commhub_report_status','Session\x20alias:\x20','setRequestHandler','.\x20Restart\x20node\x20via\x20`anet\x20node\x20start\x20<alias>`\x20so\x20the\x20env\x20is\x20set\x20explicitly\x20(#203).\x0a','CommHub\x20init\x20failed:\x20','new_task','ENV:\x20URL=','priority','notifications/claude/channel','Reply\x20using\x20the\x20commhub_reply\x20tool\x20to\x20report\x20status\x20or\x20results\x20back.','body','SSE\x20error:\x20','8720886yPdaYp','6878256IvjNSO','statusText','report_status','delete','low','get_inbox','fatal:\x20','write','3026fIyJlP','catch','blocked','commhub-channel','content','\x20from\x20','none','pop','parse','initialize','send_task','result','alias','length','commhub_send_message','join','error','getReader','slice','string','1136796uyRnmN','Messages\x20from\x20CommHub\x20arrive\x20as\x20<channel\x20source=\x22commhub\x22\x20task_id=\x22...\x22\x20priority=\x22...\x22\x20from=\x22...\x22>','inbox_count','application/json','commhub_get_all_status','SSE\x20connection\x20error:\x20','task','The\x20task_id\x20from\x20the\x20channel\x20message\x20(or\x20\x27hub\x27\x20for\x20general)','new_message','shutting\x20down,\x20reporting\x20offline...','\x22\x20after\x20SSE\x20reconnect','SSE\x20连续\x20>1h\x20连不上\x20hub\x20(','application/json,\x20text/event-stream',']\x20[commhub]\x20',')\x20—\x20放弃自动重连。手动\x20anet\x20node\x20start\x20恢复。','startsWith','\x20RESUME_ID=','10eLJDGU','end','find','Bearer\x20'];a0_0x225b=function(){return _0x3c0b11;};return a0_0x225b();}var v=process[a0_0x46492c(0x155)]()['replace'](/\//g,'-');I(a0_0x2175ac(U,v,'.env'));function d(){const _0x4cb4d8=a0_0x46492c;try{return a0_0xd3af48('tmux\x20display-message\x20-p\x20\x27#S\x27',{'encoding':_0x4cb4d8(0x142),'timeout':0x7d0})[_0x4cb4d8(0x15d)]();}catch{return'';}}function a0_0x4ca9(_0x28b5e1,_0x5344b9){_0x28b5e1=_0x28b5e1-0xd7;const _0x225bda=a0_0x225b();let _0x4ca966=_0x225bda[_0x28b5e1];return _0x4ca966;}function m(){const _0x263cde=a0_0x46492c;try{let _0x3cea15=a0_0x2175ac(L,_0x263cde(0xff),_0x263cde(0x153));if(a0_0x364285(_0x3cea15))return JSON[_0x263cde(0xdc)](a0_0x4cc358(_0x3cea15,_0x263cde(0x142)));}catch{}return{};}var u=m(),j=process.env.COMMHUB_URL||u['hub']||a0_0x46492c(0x119),f=process.env.COMMHUB_TMUX||d();function r(){const _0x10646a=a0_0x46492c;if(process.env.COMMHUB_ALIAS&&process.env.COMMHUB_ALIAS['trim']())return process.env.COMMHUB_ALIAS[_0x10646a(0x15d)]();return process[_0x10646a(0x135)][_0x10646a(0x172)](_0x10646a(0x122)+(_0x10646a(0x13d)+(f||_0x10646a(0x100))+'\x20/\x20hostname='+a0_0x47b9f6()+_0x10646a(0x161))),_0x10646a(0x128)+process[_0x10646a(0x159)];}var G=r(),K=process.env.COMMHUB_RESUME_ID||process.env.CLAUDE_RESUME_ID||a0_0x17c95e(),F=process.env.COMMHUB_TOKEN||u[a0_0x46492c(0x11f)]||'';function W(_0x4df2d4){const _0x264c10=a0_0x46492c;let _0x2cf643=new Date()['toTimeString']()[_0x264c10(0xe6)](0x0,0x8);process[_0x264c10(0x135)][_0x264c10(0x172)]('['+_0x2cf643+_0x264c10(0xf5)+_0x4df2d4+'\x0a');}function N(_0x44b101){return new Promise(_0x48e1e3=>setTimeout(_0x48e1e3,_0x44b101));}W(a0_0x46492c(0x164)+j+a0_0x46492c(0x12b)+G+a0_0x46492c(0xf8)+K['slice'](0x0,0x8)+a0_0x46492c(0x148)+(f||a0_0x46492c(0xda))+'\x20CWD='+process['cwd']()+a0_0x46492c(0x137)+v);var D=new Map(),x=new a0_0x38247c({'name':a0_0x46492c(0xd7),'version':'0.3.0'},{'capabilities':{'experimental':{'claude/channel':{}},'tools':{}},'instructions':[a0_0x46492c(0xe9),'These\x20are\x20tasks\x20dispatched\x20by\x20the\x20hub\x20or\x20other\x20sessions\x20via\x20the\x20CommHub\x20Server.',a0_0x46492c(0x167),a0_0x46492c(0x133),a0_0x46492c(0x15f)+G][a0_0x46492c(0xe3)]('\x0a')});x[a0_0x46492c(0x160)](a0_0xbb978b,async()=>({'tools':[{'name':'commhub_reply','description':a0_0x46492c(0x152),'inputSchema':{'type':a0_0x46492c(0x13e),'properties':{'task_id':{'type':'string','description':a0_0x46492c(0xef)},'text':{'type':a0_0x46492c(0xe7),'description':a0_0x46492c(0xfd)},'status':{'type':a0_0x46492c(0xe7),'enum':[a0_0x46492c(0x104),a0_0x46492c(0x113),a0_0x46492c(0x131),a0_0x46492c(0x175),a0_0x46492c(0xe4),a0_0x46492c(0x120)],'description':a0_0x46492c(0x12c)}},'required':[a0_0x46492c(0x115)]}},{'name':a0_0x46492c(0x15e),'description':a0_0x46492c(0x102),'inputSchema':{'type':'object','properties':{'status':{'type':a0_0x46492c(0xe7),'enum':[a0_0x46492c(0x11d),a0_0x46492c(0x13f),a0_0x46492c(0x175),a0_0x46492c(0xe4)]},'task':{'type':'string','description':'Current\x20task\x20description'},'progress':{'type':'number','description':a0_0x46492c(0x10c)}},'required':[a0_0x46492c(0x124)]}},{'name':a0_0x46492c(0x12f),'description':a0_0x46492c(0x145),'inputSchema':{'type':'object','properties':{'alias':{'type':a0_0x46492c(0xe7),'description':'Target\x20session\x20alias'},'task':{'type':a0_0x46492c(0xe7),'description':a0_0x46492c(0x105)},'priority':{'type':a0_0x46492c(0xe7),'enum':[a0_0x46492c(0x149),a0_0x46492c(0x141),a0_0x46492c(0x16f)],'description':'Priority\x20(default:\x20normal)'}},'required':[a0_0x46492c(0xe0),a0_0x46492c(0xee)]}},{'name':a0_0x46492c(0xe2),'description':a0_0x46492c(0x11c),'inputSchema':{'type':a0_0x46492c(0x13e),'properties':{'alias':{'type':'string','description':a0_0x46492c(0x111)},'message':{'type':a0_0x46492c(0xe7),'description':a0_0x46492c(0x112)}},'required':['alias','message']}},{'name':'commhub_get_all_status','description':a0_0x46492c(0x116),'inputSchema':{'type':'object','properties':{}}}]}));async function Y(_0x5ddb0d,_0x3739ef){const _0xefb32c=a0_0x46492c;let _0x19925f=await fetch(j+'/mcp',{'method':'POST','headers':{'Content-Type':_0xefb32c(0xeb),'Accept':_0xefb32c(0xf4),...F?{'Authorization':_0xefb32c(0xfc)+F}:{}},'body':JSON[_0xefb32c(0x139)]({'jsonrpc':'2.0','id':0x1,'method':_0xefb32c(0xdd),'params':{'protocolVersion':'2025-03-26','capabilities':{},'clientInfo':{'name':_0xefb32c(0xd7),'version':_0xefb32c(0x13b)}}})});if(!_0x19925f['ok']){let _0x251074=await _0x19925f[_0xefb32c(0x115)]();return W(_0xefb32c(0x162)+_0x19925f[_0xefb32c(0x124)]+'\x20'+_0x251074[_0xefb32c(0xe6)](0x0,0x64)),{'ok':!0x1,'error':_0xefb32c(0x101)+_0x19925f[_0xefb32c(0x124)]};}await _0x19925f[_0xefb32c(0x115)]();let _0x5ed084=(await(await fetch(j+_0xefb32c(0x10d),{'method':_0xefb32c(0x156),'headers':{'Content-Type':_0xefb32c(0xeb),'Accept':_0xefb32c(0xf4),...F?{'Authorization':_0xefb32c(0xfc)+F}:{}},'body':JSON['stringify']({'jsonrpc':_0xefb32c(0x14f),'id':0x2,'method':'tools/call','params':{'name':_0x5ddb0d,'arguments':_0x3739ef}})}))[_0xefb32c(0x115)]())[_0xefb32c(0x134)]('\x0a')[_0xefb32c(0xfb)](_0x3b90be=>_0x3b90be['startsWith'](_0xefb32c(0x103)));if(_0x5ed084){let _0x83a4be=JSON[_0xefb32c(0xdc)](_0x5ed084['slice'](0x6));return _0x83a4be?.[_0xefb32c(0xdf)]?.[_0xefb32c(0xd8)]?.[0x0]?.[_0xefb32c(0x115)]?JSON['parse'](_0x83a4be[_0xefb32c(0xdf)][_0xefb32c(0xd8)][0x0][_0xefb32c(0x115)]):_0x83a4be;}return{'ok':!0x1,'error':_0xefb32c(0x158)};}x[a0_0x46492c(0x160)](a0_0xbc40e,async _0x492646=>{const _0x18116a=a0_0x46492c;let {name:_0x4fa7d7,arguments:_0x4c2a80}=_0x492646['params'];if(_0x4fa7d7==='commhub_reply'){let {task_id:_0xf56c28,text:_0x11dc7e,status:_0x479744}=_0x4c2a80;if(_0x479744==='completed'||_0x479744==='failed'||_0x479744==='cancelled'){let _0x5019ff=_0x479744==='completed'?_0x18116a(0x14b):_0x479744,_0x1e2a40=_0xf56c28?D['get'](_0xf56c28)||'hub':_0x18116a(0x127),_0x2698cb=await Y(_0x18116a(0x14d),{'alias':_0x1e2a40,'text':_0x11dc7e,'in_reply_to':_0xf56c28||void 0x0,'status':_0x5019ff,'from_session':G});if(_0xf56c28)D[_0x18116a(0x16e)](_0xf56c28);return{'content':[{'type':'text','text':JSON[_0x18116a(0x139)](_0x2698cb)}]};}let _0x470863=await Y(_0x18116a(0x16d),{'resume_id':K,'alias':G,'status':_0x479744==='blocked'?_0x18116a(0x175):_0x479744===_0x18116a(0xe4)?_0x18116a(0xe4):_0x18116a(0x11d),'task':_0x11dc7e[_0x18116a(0xe6)](0x0,0xc8),'output':_0x11dc7e});return{'content':[{'type':_0x18116a(0x115),'text':JSON[_0x18116a(0x139)](_0x470863)}]};}if(_0x4fa7d7===_0x18116a(0x15e)){let {status:_0x185d45,task:_0x4b0482,progress:_0x5ec4d4}=_0x4c2a80,_0x1ed774=await Y('report_status',{'resume_id':K,'alias':G,'status':_0x185d45,'task':_0x4b0482,'progress':_0x5ec4d4});return{'content':[{'type':'text','text':JSON[_0x18116a(0x139)](_0x1ed774)}]};}if(_0x4fa7d7===_0x18116a(0x12f)){let {alias:_0x43748a,task:_0x6b379b,priority:_0x12e710}=_0x4c2a80,_0x2f86fb=await Y(_0x18116a(0xde),{'alias':_0x43748a,'task':_0x6b379b,'priority':_0x12e710||_0x18116a(0x141),'from_session':G});return{'content':[{'type':_0x18116a(0x115),'text':JSON['stringify'](_0x2f86fb)}]};}if(_0x4fa7d7==='commhub_send_message'){let {alias:_0x103f32,message:_0x421998}=_0x4c2a80,_0x5b0e0d=await Y(_0x18116a(0x144),{'alias':_0x103f32,'message':_0x421998,'from_session':G});return{'content':[{'type':'text','text':JSON[_0x18116a(0x139)](_0x5b0e0d)}]};}if(_0x4fa7d7===_0x18116a(0xec)){let _0x50ef26=await Y(_0x18116a(0x121),{});return{'content':[{'type':'text','text':JSON[_0x18116a(0x139)](_0x50ef26)}]};}return{'content':[{'type':_0x18116a(0x115),'text':JSON[_0x18116a(0x139)]({'error':'unknown\x20tool'})}]};});var O=0x3e8,R=0x7530,T=0x36ee80;async function l(){const _0x1a10bf=a0_0x46492c;try{await Y(_0x1a10bf(0x16d),{'resume_id':K,'alias':G,'status':_0x1a10bf(0x13f),'server':a0_0x47b9f6(),'hostname':a0_0x47b9f6(),'agent':_0x1a10bf(0x15a),'project_dir':process[_0x1a10bf(0x155)](),'tmux_name':f||void 0x0}),W(_0x1a10bf(0x118)+G+_0x1a10bf(0xf2));}catch(_0x3f522d){W('re-register\x20failed:\x20'+_0x3f522d);}}async function o(){const _0x10c8d0=a0_0x46492c;let _0x344bd2=j+'/events/'+encodeURIComponent(G),_0x4850f1={};if(F)_0x4850f1['Authorization']=_0x10c8d0(0xfc)+F;W('connecting\x20to\x20'+_0x344bd2);let _0x1fc06f=O,_0x3b9dc9=!0x0,_0xfc7937=null;while(!0x0){try{let _0x345098=await fetch(_0x344bd2,{'headers':_0x4850f1});if(!_0x345098['ok']){if(W(_0x10c8d0(0x169)+_0x345098[_0x10c8d0(0x124)]+'\x20'+_0x345098[_0x10c8d0(0x16c)]),_0xfc7937=_0xfc7937??Date['now'](),Date[_0x10c8d0(0x106)]()-_0xfc7937>T){W(_0x10c8d0(0xf3)+j+_0x10c8d0(0xf6));return;}await N(_0x1fc06f),_0x1fc06f=Math['min'](_0x1fc06f*0x2,R);continue;}let _0x37008c=_0x345098[_0x10c8d0(0x168)][_0x10c8d0(0xe5)](),_0x3bd0fc=new TextDecoder(),_0xf98715='';_0x1fc06f=O;while(!0x0){let {done:_0x1437f7,value:_0x25c25b}=await _0x37008c[_0x10c8d0(0x130)]();if(_0x1437f7)break;_0xf98715+=_0x3bd0fc['decode'](_0x25c25b,{'stream':!0x0});let _0x145d17=_0xf98715[_0x10c8d0(0x134)]('\x0a\x0a');_0xf98715=_0x145d17[_0x10c8d0(0xdb)]()||'';for(let _0x173303 of _0x145d17){let _0x127596=_0x173303[_0x10c8d0(0x134)]('\x0a')[_0x10c8d0(0xfb)](_0x32c918=>_0x32c918[_0x10c8d0(0xf7)](_0x10c8d0(0x103)));if(!_0x127596)continue;try{let _0x50aebb=JSON[_0x10c8d0(0xdc)](_0x127596[_0x10c8d0(0xe6)](0x6));if(await a(_0x50aebb),_0x50aebb[_0x10c8d0(0x15b)]===_0x10c8d0(0x126)){if(_0xfc7937=null,!_0x3b9dc9)await l();_0x3b9dc9=!0x1;}}catch(_0x56b3fc){W('parse\x20error:\x20'+_0x56b3fc);}}}W(_0x10c8d0(0x10a));}catch(_0x468a93){W(_0x10c8d0(0xed)+_0x468a93);}if(_0xfc7937=_0xfc7937??Date['now'](),Date[_0x10c8d0(0x106)]()-_0xfc7937>T){W(_0x10c8d0(0xf3)+j+_0x10c8d0(0xf6));return;}await N(_0x1fc06f),_0x1fc06f=Math[_0x10c8d0(0x143)](_0x1fc06f*0x2,R);}}async function a(_0xe8eb58){const _0x1cd076=a0_0x46492c;if(_0xe8eb58[_0x1cd076(0x15b)]===_0x1cd076(0x126)){W(_0x1cd076(0x14e)+G+'\x22');return;}if(_0xe8eb58[_0x1cd076(0x15b)]===_0x1cd076(0xf0)){if(W('←\x20message\x20from\x20'+_0xe8eb58['from']+':\x20'+_0xe8eb58[_0x1cd076(0x125)]['slice'](0x0,0x3c)),await x[_0x1cd076(0x11e)]({'method':_0x1cd076(0x166),'params':{'content':_0xe8eb58[_0x1cd076(0x125)],'meta':{'sender':_0xe8eb58[_0x1cd076(0x11b)]||_0x1cd076(0x127),'sender_id':_0x1cd076(0x11a),'user':_0xe8eb58['from']||_0x1cd076(0x127),'priority':_0x1cd076(0x141)}}}),_0xe8eb58[_0x1cd076(0x10b)])await Y(_0x1cd076(0x14c),{'alias':G,'message_id':_0xe8eb58['message_id']});return;}if(_0xe8eb58['type']===_0x1cd076(0x163)||_0xe8eb58['type']===_0x1cd076(0x109)){W('←\x20'+_0xe8eb58[_0x1cd076(0x15b)]+_0x1cd076(0x154)+_0xe8eb58[_0x1cd076(0xea)]+'\x20priority='+(_0xe8eb58[_0x1cd076(0x165)]||_0x1cd076(0x141)));let _0x38ff0c=await Y(_0x1cd076(0x170),{'alias':G,'limit':0x5});if(_0x38ff0c?.['ok']&&_0x38ff0c[_0x1cd076(0x123)]?.[_0x1cd076(0xe1)]>0x0)for(let _0x39dd38 of _0x38ff0c[_0x1cd076(0x123)]){let _0x17a599={'sender':_0x39dd38[_0x1cd076(0x129)]||_0x1cd076(0x127),'sender_id':_0x1cd076(0x11a),'user':_0x39dd38[_0x1cd076(0x129)]||_0x1cd076(0x127),'task_id':_0x39dd38['id'],'priority':_0x39dd38[_0x1cd076(0x165)]||'normal'};D[_0x1cd076(0x13c)](_0x39dd38['id'],_0x39dd38['from_session']||_0x1cd076(0x127)),await x['notification']({'method':'notifications/claude/channel','params':{'content':_0x39dd38[_0x1cd076(0xd8)],'meta':_0x17a599}}),W(_0x1cd076(0x117)+_0x39dd38['id'][_0x1cd076(0xe6)](0x0,0x8)+_0x1cd076(0xd9)+_0x39dd38['from_session']+':\x20'+_0x39dd38['content'][_0x1cd076(0xe6)](0x0,0x3c)),await Y(_0x1cd076(0x14c),{'alias':G,'message_id':_0x39dd38['id']});}}}async function n(){const _0xcd959=a0_0x46492c;let _0x2396e9=new a0_0x281413();await x[_0xcd959(0x10e)](_0x2396e9),W('MCP\x20stdio\x20connected'),W(_0xcd959(0x12a)),o()['catch'](_0x5ad11f=>W(_0xcd959(0x114)+_0x5ad11f)),Y(_0xcd959(0x16d),{'resume_id':K,'alias':G,'status':'idle','server':a0_0x47b9f6(),'hostname':a0_0x47b9f6(),'agent':'claude-code','project_dir':process[_0xcd959(0x155)](),'tmux_name':f||void 0x0})[_0xcd959(0x147)](()=>W('registered\x20as\x20\x22'+G+_0xcd959(0x12d)+K[_0xcd959(0xe6)](0x0,0x8)+')'))['catch'](_0x1be390=>W(_0xcd959(0x15c)+_0x1be390)),setInterval(()=>{const _0x1b5722=_0xcd959;Y(_0x1b5722(0x16d),{'resume_id':K,'alias':G,'status':_0x1b5722(0x13f),'server':a0_0x47b9f6(),'hostname':a0_0x47b9f6(),'agent':'claude-code','project_dir':process['cwd'](),'tmux_name':f||void 0x0})[_0x1b5722(0x174)](_0x34d0b1=>W(_0x1b5722(0x146)+_0x34d0b1));},0x2bf20),W('ready\x20—\x20waiting\x20for\x20events');}n()[a0_0x46492c(0x174)](_0xbbcab7=>{const _0x1eb077=a0_0x46492c;W(_0x1eb077(0x171)+_0xbbcab7),process[_0x1eb077(0xfe)](0x1);});async function b(){const _0x2bc112=a0_0x46492c;W(_0x2bc112(0xf1)),await Y(_0x2bc112(0x16d),{'resume_id':K,'alias':G,'status':_0x2bc112(0x150),'task':_0x2bc112(0x151)})['catch'](()=>{}),process[_0x2bc112(0xfe)](0x0);}process[a0_0x46492c(0x108)]['on'](a0_0x46492c(0xfa),()=>b()),process['on']('SIGTERM',()=>b()),process['on'](a0_0x46492c(0x10f),()=>b());
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sleep2agi/agent-network",
3
- "version": "2.2.20",
3
+ "version": "2.2.22-preview.0",
4
4
  "description": "AI Agent Network CLI — Local-first multi-agent orchestration across 4 runtimes (Claude Code CLI / Claude Agent SDK / Codex SDK / Grok Build ACP) and 8+ LLM providers (Anthropic / OpenAI / xAI Grok / MiniMax / DeepSeek / GLM / Kimi / InternLM / Xiaomi MiMo / OpenRouter). Apache 2.0.",
5
5
  "type": "module",
6
6
  "main": "dist/src/client.js",
@@ -19,7 +19,7 @@
19
19
  ],
20
20
  "scripts": {
21
21
  "typecheck": "tsc --noEmit",
22
- "build": "bun build src/client.ts --outdir dist/src --target node --minify && bun build bin/cli.ts --outdir dist/bin --target node --minify --external @sleep2agi/commhub-server --external bun:sqlite --external '../../server/*' && bun build src/node-server.ts --outdir dist/src --target node --minify --external @modelcontextprotocol/sdk && tsc --emitDeclarationOnly --declaration --outDir dist && npx javascript-obfuscator dist/bin/cli.js --output dist/bin/cli.js --compact true --string-array true --string-array-encoding base64 && npx javascript-obfuscator dist/src/client.js --output dist/src/client.js --compact true --string-array true && npx javascript-obfuscator dist/src/node-server.js --output dist/src/node-server.js --compact true --string-array true",
22
+ "build": "bun build src/client.ts --outdir dist/src --target node --minify && bun build bin/cli.ts --outdir dist/bin --target node --minify --external @sleep2agi/commhub-server --external bun:sqlite --external '../../server/*' && bun build src/node-server.ts --outdir dist/src --target node --minify --external @modelcontextprotocol/sdk && bun build src/im/feishu/worker.ts --outdir dist/src/im/feishu --target node --minify --external @larksuiteoapi/node-sdk && tsc --emitDeclarationOnly --declaration --outDir dist && npx javascript-obfuscator dist/bin/cli.js --output dist/bin/cli.js --compact true --string-array true --string-array-encoding base64 && npx javascript-obfuscator dist/src/client.js --output dist/src/client.js --compact true --string-array true && npx javascript-obfuscator dist/src/node-server.js --output dist/src/node-server.js --compact true --string-array true",
23
23
  "prepublishOnly": "npm run build"
24
24
  },
25
25
  "keywords": [
@@ -63,7 +63,8 @@
63
63
  "node": ">=22.13.0"
64
64
  },
65
65
  "dependencies": {
66
- "@inquirer/prompts": "^8.4.3"
66
+ "@inquirer/prompts": "^8.4.3",
67
+ "@larksuiteoapi/node-sdk": "^1.42.0"
67
68
  },
68
69
  "devDependencies": {
69
70
  "@modelcontextprotocol/sdk": "^1.12.0",