@sleep2agi/agent-network 2.3.0-preview.72 → 2.3.0-preview.73

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
- const a0_0x32c978=a0_0xf4d6;(function(_0x4b69d5,_0x4d3b29){const _0x4838bf=a0_0xf4d6,_0x19fef6=_0x4b69d5();while(!![]){try{const _0x10c0ed=parseInt(_0x4838bf(0x24e))/0x1+-parseInt(_0x4838bf(0x233))/0x2+-parseInt(_0x4838bf(0x206))/0x3*(parseInt(_0x4838bf(0x23e))/0x4)+-parseInt(_0x4838bf(0x215))/0x5*(-parseInt(_0x4838bf(0x207))/0x6)+parseInt(_0x4838bf(0x223))/0x7*(-parseInt(_0x4838bf(0x1ed))/0x8)+parseInt(_0x4838bf(0x23d))/0x9*(-parseInt(_0x4838bf(0x221))/0xa)+parseInt(_0x4838bf(0x246))/0xb*(parseInt(_0x4838bf(0x229))/0xc);if(_0x10c0ed===_0x4d3b29)break;else _0x19fef6['push'](_0x19fef6['shift']());}catch(_0x4a05a6){_0x19fef6['push'](_0x19fef6['shift']());}}}(a0_0x3b90,0x2080b));import{EventEmitter as a0_0x39481c}from'events';import{hostname as a0_0x415061}from'os';var K=/(?:atok|ntok|utok|ghp|github_pat)_[A-Za-z0-9_-]+|Bearer\s+\S+/gi,L=(_0x367d1c,_0x588c77)=>(_0x367d1c??_0x588c77)['replace'](/[\r\n\x00-\x1f\x7f]/g,'\x20')['slice'](0x0,0xf0);function N(_0x20abaf){const _0x45c6a4=a0_0xf4d6;return(_0x20abaf instanceof Error?_0x20abaf[_0x45c6a4(0x1eb)]:String(_0x20abaf??_0x45c6a4(0x25b)))[_0x45c6a4(0x25a)](K,_0x45c6a4(0x22d))[_0x45c6a4(0x25a)](/[\r\n\x00-\x1f\x7f]/g,'\x20')[_0x45c6a4(0x25f)](0x0,0xf0);}function O(_0x165478,_0x21b4b3=process.env.ANET_TASK_TRACE_FORMAT===a0_0x32c978(0x24b)){const _0x201bcf=a0_0x32c978;if(_0x21b4b3)return JSON['stringify'](_0x165478);let _0x4b18c=L(_0x165478[_0x201bcf(0x20d)],'<missing>'),_0x13748e=L(_0x165478['task_id'],_0x201bcf(0x1f1)),_0x5a3f6c=_0x165478[_0x201bcf(0x1f8)]?_0x201bcf(0x245)+_0x165478[_0x201bcf(0x1f8)]+':'+(_0x165478[_0x201bcf(0x1f6)]??''):'';return _0x201bcf(0x266)+_0x165478[_0x201bcf(0x230)]+_0x201bcf(0x20e)+L(_0x165478[_0x201bcf(0x244)],_0x201bcf(0x235))+_0x201bcf(0x1ee)+L(_0x165478[_0x201bcf(0x226)],_0x201bcf(0x235))+_0x201bcf(0x210)+_0x13748e+_0x201bcf(0x240)+_0x4b18c+_0x201bcf(0x212)+L(_0x165478[_0x201bcf(0x25d)],_0x201bcf(0x235))+_0x201bcf(0x202)+_0x165478[_0x201bcf(0x261)]+'\x20duration_ms='+_0x165478['duration_ms']+'\x20lifecycle='+_0x165478[_0x201bcf(0x269)]+_0x5a3f6c;}function U(_0x381318){const _0x6f0f32=a0_0x32c978;return{'event':{'sending':'task.send.start','delivered':_0x6f0f32(0x241),'failed':_0x6f0f32(0x23b),'acked':_0x6f0f32(0x26a),'started':_0x6f0f32(0x21e),'replied':_0x6f0f32(0x209),'expired':_0x6f0f32(0x213)}[_0x381318[_0x6f0f32(0x230)]],..._0x381318};}function j(_0x40e90d){const _0x275783=a0_0x32c978;let _0x4d6f1b=_0x40e90d?.['task_id']||_0x40e90d?.[_0x275783(0x216)]||_0x40e90d?.['id'];if(_0x4d6f1b)return String(_0x4d6f1b);let _0x52bef9=_0x40e90d?.['content']?.[0x0]?.[_0x275783(0x24d)];if(typeof _0x52bef9!==_0x275783(0x203))return null;try{let _0x10e99f=JSON[_0x275783(0x222)](_0x52bef9);return _0x10e99f?.['task_id']||_0x10e99f?.[_0x275783(0x216)]||_0x10e99f?.['id']||null;}catch{return null;}}function a0_0xf4d6(_0x885ab,_0xd4566b){_0x885ab=_0x885ab-0x1ea;const _0x3b90ff=a0_0x3b90();let _0xf4d630=_0x3b90ff[_0x885ab];return _0xf4d630;}async function X(_0x2f7227,_0x5691d6){const _0x17f61f=a0_0x32c978;let _0x348b91=_0x5691d6[_0x17f61f(0x21c)]??Date[_0x17f61f(0x21c)],_0x15c8e5=_0x348b91(),_0x3217d5=(_0x3fbfb9,_0x575924,_0x2dc1e2,_0x3ab6cb)=>{const _0xdc4af7=_0x17f61f;_0x5691d6[_0xdc4af7(0x219)](O(U({'from_alias':_0x2f7227[_0xdc4af7(0x234)],'to_alias':_0x2f7227[_0xdc4af7(0x267)],'task_id':_0x575924,'parent_task_id':_0x2f7227['parentTaskId'],'network_id':_0x2f7227[_0xdc4af7(0x214)],'transport':_0x2f7227[_0xdc4af7(0x261)],'status':_0x3fbfb9,'duration_ms':_0x348b91()-_0x15c8e5,'lifecycle_tracking':_0x2f7227[_0xdc4af7(0x1ec)],..._0x2dc1e2!==void 0x0?{'error_code':_0x3ab6cb||'send_failed','error_message':N(_0x2dc1e2)}:{}})));};_0x3217d5(_0x17f61f(0x20f),null);try{let _0x54a54a=await _0x5691d6[_0x17f61f(0x262)](),_0x5c0c29=j(_0x54a54a);if(_0x5c0c29)_0x3217d5('delivered',_0x5c0c29);else{if(_0x54a54a?.['ok']===!0x1||_0x54a54a?.[_0x17f61f(0x1f3)])_0x3217d5(_0x17f61f(0x249),_0x5c0c29,_0x54a54a?.[_0x17f61f(0x1f3)]||_0x17f61f(0x1fa),'send_rejected');else _0x3217d5(_0x17f61f(0x249),null,_0x17f61f(0x228),_0x17f61f(0x253));}return _0x54a54a;}catch(_0x2af17f){throw _0x3217d5(_0x17f61f(0x249),null,_0x2af17f,_0x17f61f(0x225)),_0x2af17f;}}async function Y(_0x5c364c,_0x1fb9fa){const _0x21a005=a0_0x32c978;return X({'fromAlias':_0x5c364c[_0x21a005(0x234)],'toAlias':_0x5c364c[_0x21a005(0x265)],'parentTaskId':_0x5c364c[_0x21a005(0x258)]||null,'networkId':_0x5c364c[_0x21a005(0x214)]||null,'transport':_0x21a005(0x1ff),'lifecycleTracking':_0x21a005(0x1f2)},_0x1fb9fa);}class $ extends a0_0x39481c{[a0_0x32c978(0x239)];[a0_0x32c978(0x265)];[a0_0x32c978(0x248)];[a0_0x32c978(0x237)];[a0_0x32c978(0x255)];[a0_0x32c978(0x251)];['reconnectDelay'];[a0_0x32c978(0x25e)];['sseAbort'];['running']=!0x1;constructor(_0x15d5ea){const _0x50b757=a0_0x32c978;super();if(this['url']=_0x15d5ea[_0x50b757(0x239)]['replace'](/\/$/,''),this['alias']=_0x15d5ea['alias'],this['token']=_0x15d5ea[_0x50b757(0x248)],this[_0x50b757(0x237)]=_0x15d5ea['agent']||_0x50b757(0x220),this[_0x50b757(0x255)]=_0x50b757(0x22a)+_0x15d5ea[_0x50b757(0x265)]+'-'+Date[_0x50b757(0x21c)]()[_0x50b757(0x208)](0x24),this['heartbeatInterval']=_0x15d5ea[_0x50b757(0x251)]??0x2bf20,this['reconnectDelay']=_0x15d5ea['reconnectDelay']??0xbb8,_0x15d5ea[_0x50b757(0x21a)]!==!0x1)this[_0x50b757(0x257)]();}[a0_0x32c978(0x219)](_0xa1014c){const _0x4fe321=a0_0x32c978;console[_0x4fe321(0x219)]('['+new Date()[_0x4fe321(0x1ea)]()[_0x4fe321(0x25f)](0x0,0x8)+_0x4fe321(0x247)+this[_0x4fe321(0x265)]+']\x20'+_0xa1014c);}async[a0_0x32c978(0x20a)](_0x32835c,_0x4e555c){const _0x4eb629=a0_0x32c978;let _0x691db2={'Content-Type':_0x4eb629(0x236),'Accept':'application/json,\x20text/event-stream'};if(this[_0x4eb629(0x248)])_0x691db2['Authorization']='Bearer\x20'+this['token'];let _0x41ebff=await(await fetch(this[_0x4eb629(0x239)]+_0x4eb629(0x1f7),{'method':_0x4eb629(0x21b),'headers':_0x691db2,'body':JSON['stringify']({'jsonrpc':_0x4eb629(0x227),'id':Date['now'](),'method':_0x4eb629(0x268),'params':{'name':_0x32835c,'arguments':_0x4e555c}})}))[_0x4eb629(0x24d)](),_0x14bfeb=_0x41ebff['match'](/data: (.+)/),_0x2469ec=_0x14bfeb?JSON[_0x4eb629(0x222)](_0x14bfeb[0x1]):JSON[_0x4eb629(0x222)](_0x41ebff),_0x5eba7b=_0x2469ec?.['result']?.[_0x4eb629(0x243)]?.[0x0]?.['text'];return _0x5eba7b?JSON[_0x4eb629(0x222)](_0x5eba7b):_0x2469ec;}async['connect'](){const _0x5045fa=a0_0x32c978;if(this['running'])return;this[_0x5045fa(0x232)]=!0x0,await this[_0x5045fa(0x230)](_0x5045fa(0x1f4)),this['log'](_0x5045fa(0x22b)),this[_0x5045fa(0x25e)]=setInterval(()=>{const _0x25bda5=_0x5045fa;this[_0x25bda5(0x230)]('idle')[_0x25bda5(0x218)](_0x2936d4=>this[_0x25bda5(0x219)]('heartbeat\x20failed:\x20'+_0x2936d4[_0x25bda5(0x1eb)]));},this[_0x5045fa(0x251)]),this['connectSSE']();}async[a0_0x32c978(0x242)](){const _0x51b5f1=a0_0x32c978;if(this[_0x51b5f1(0x232)]=!0x1,this[_0x51b5f1(0x23a)]?.[_0x51b5f1(0x23f)](),this['heartbeatTimer'])clearInterval(this[_0x51b5f1(0x25e)]);await this['status'](_0x51b5f1(0x21d))[_0x51b5f1(0x218)](()=>{}),this[_0x51b5f1(0x219)](_0x51b5f1(0x22c));}async[a0_0x32c978(0x262)](_0x3d020a,_0x33c0c5,_0xf5b1d9=a0_0x32c978(0x20c)){const _0xc6b81a=a0_0x32c978;return Y({'alias':_0x3d020a,'fromAlias':this['alias']},{'log':_0x39acbc=>console['log'](_0x39acbc),'send':()=>this[_0xc6b81a(0x20a)](_0xc6b81a(0x20b),{'alias':_0x3d020a,'task':_0x33c0c5,'priority':_0xf5b1d9,'from_session':this[_0xc6b81a(0x265)]})});}async[a0_0x32c978(0x1eb)](_0x37a333,_0x1a64ec){const _0xa60abd=a0_0x32c978;return this[_0xa60abd(0x20a)](_0xa60abd(0x23c),{'alias':_0x37a333,'message':_0x1a64ec,'from_session':this['alias']});}async[a0_0x32c978(0x205)](_0x357dcf,_0x46172d,_0x1f8858=a0_0x32c978(0x1fb)){const _0x23c4b6=a0_0x32c978;return this[_0x23c4b6(0x20a)](_0x23c4b6(0x24c),{'in_reply_to':_0x357dcf,'text':_0x46172d,'status':_0x1f8858});}async[a0_0x32c978(0x230)](_0x1a57c3,_0x117cb7){const _0x51298f=a0_0x32c978;return this['call']('report_status',{'resume_id':this[_0x51298f(0x255)],'alias':this[_0x51298f(0x265)],'status':_0x1a57c3,'server':a0_0x415061(),'hostname':a0_0x415061(),'agent':this[_0x51298f(0x237)],'project_dir':process['cwd'](),..._0x117cb7});}async[a0_0x32c978(0x259)](){const _0x5ae531=a0_0x32c978;return this[_0x5ae531(0x20a)]('get_all_status',{});}async[a0_0x32c978(0x24f)](_0x29a0ec,_0xd670dc){const _0x116d38=a0_0x32c978;return this[_0x116d38(0x20a)](_0x116d38(0x24f),{'message':_0x29a0ec,'filter_server':_0xd670dc?.['server'],'filter_status':_0xd670dc?.[_0x116d38(0x230)]});}async['connectSSE'](){const _0x290e9c=a0_0x32c978;let _0x3d339b=encodeURIComponent(this[_0x290e9c(0x265)]),_0x57828e=this['url']+_0x290e9c(0x211)+_0x3d339b,_0x26b4a7=this[_0x290e9c(0x25c)];while(this[_0x290e9c(0x232)]){try{this[_0x290e9c(0x23a)]=new AbortController();let _0x4ded89={'Accept':_0x290e9c(0x231)};if(this['token'])_0x4ded89[_0x290e9c(0x1fc)]=_0x290e9c(0x1f0)+this[_0x290e9c(0x248)];let _0x13aae7=await fetch(_0x57828e,{'headers':_0x4ded89,'signal':this['sseAbort'][_0x290e9c(0x1f9)]});if(!_0x13aae7['ok']||!_0x13aae7[_0x290e9c(0x200)]){this[_0x290e9c(0x219)]('SSE\x20failed:\x20'+_0x13aae7['status']),await this['sleep'](_0x26b4a7),_0x26b4a7=Math[_0x290e9c(0x1f5)](_0x26b4a7*1.5,0xea60);continue;}_0x26b4a7=this[_0x290e9c(0x25c)];let _0x19242c=_0x13aae7[_0x290e9c(0x200)][_0x290e9c(0x24a)](),_0x16c3ef=new TextDecoder(),_0x547310='';while(this['running']){let {done:_0x44f7c6,value:_0xce22f}=await _0x19242c[_0x290e9c(0x1ef)]();if(_0x44f7c6)break;_0x547310+=_0x16c3ef[_0x290e9c(0x224)](_0xce22f,{'stream':!0x0});let _0x32a374=_0x547310[_0x290e9c(0x22e)]('\x0a');_0x547310=_0x32a374[_0x290e9c(0x26b)]()||'';for(let _0x2b8482 of _0x32a374){if(!_0x2b8482[_0x290e9c(0x256)](_0x290e9c(0x217)))continue;try{let _0x43db63=JSON[_0x290e9c(0x222)](_0x2b8482[_0x290e9c(0x25f)](0x6));if(_0x43db63['type']===_0x290e9c(0x204)){this[_0x290e9c(0x219)](_0x290e9c(0x254)),this[_0x290e9c(0x22f)]('connected');continue;}if(_0x43db63[_0x290e9c(0x201)]===_0x290e9c(0x1fe)||_0x43db63[_0x290e9c(0x201)]==='new_message'||_0x43db63['type']==='broadcast')await this[_0x290e9c(0x250)]();}catch{}}}}catch(_0x4631ea){if(_0x4631ea['name']===_0x290e9c(0x238))break;this['emit']('error',_0x4631ea),this['log']('SSE\x20error:\x20'+_0x4631ea[_0x290e9c(0x1eb)]);}if(this['running'])this[_0x290e9c(0x22f)](_0x290e9c(0x22c)),this[_0x290e9c(0x219)](_0x290e9c(0x263)+_0x26b4a7/0x3e8+_0x290e9c(0x252)),await this[_0x290e9c(0x260)](_0x26b4a7),_0x26b4a7=Math[_0x290e9c(0x1f5)](_0x26b4a7*1.5,0xea60);}}async['processInbox'](){const _0x34a0e3=a0_0x32c978;try{let _0x2035d5=(await this[_0x34a0e3(0x20a)]('get_inbox',{'alias':this[_0x34a0e3(0x265)],'limit':0xa}))?.[_0x34a0e3(0x264)]||[];for(let _0x4fca49 of _0x2035d5)await this[_0x34a0e3(0x20a)](_0x34a0e3(0x21f),{'alias':this['alias'],'message_id':_0x4fca49['id']}),this[_0x34a0e3(0x219)]('←\x20'+_0x4fca49['from_session']+':\x20'+_0x4fca49[_0x34a0e3(0x243)][_0x34a0e3(0x25f)](0x0,0x3c)),this[_0x34a0e3(0x22f)](_0x34a0e3(0x1fd),_0x4fca49),this[_0x34a0e3(0x22f)](_0x34a0e3(0x1eb),_0x4fca49);}catch(_0x3a999b){this[_0x34a0e3(0x219)]('inbox\x20error:\x20'+_0x3a999b[_0x34a0e3(0x1eb)]);}}['sleep'](_0xf4718c){return new Promise(_0x125202=>setTimeout(_0x125202,_0xf4718c));}}var F=$;export{F as default,$ as CommHub};function a0_0x3b90(){const _0x3c02d2=['from_alias','\x20error=','3502873PzNHYu',']\x20[commhub:','token','failed','getReader','json','send_reply','text','215923RZXoAT','broadcast','processInbox','heartbeatInterval','s...','missing_task_id','SSE\x20connected','resumeId','startsWith','connect','parentTaskId','getAllStatus','replace','unknown\x20error','reconnectDelay','network_id','heartbeatTimer','slice','sleep','transport','send','SSE\x20reconnecting\x20in\x20','messages','alias','[commhub:task]\x20','toAlias','tools/call','lifecycle_tracking','task.ack','pop','toTimeString','message','lifecycleTracking','1455160dfbYhT','\x20to=','read','Bearer\x20','<pending>','not_tracked','error','idle','min','error_message','/mcp','error_code','signal','CommHub\x20rejected\x20task','completed','Authorization','task','new_task','mcp_http','body','type','\x20transport=','string','connected','reply','21fHdjFm','84852MQrsZY','toString','task.replied','call','send_task','normal','parent_task_id','\x20from=','sending','\x20task_id=','/events/','\x20network_id=','task.expired','networkId','40ZNmSRE','message_id','data:\x20','catch','log','autoConnect','POST','now','offline','task.started','ack_inbox','sdk','10fdkYWr','parse','7qjtzuh','decode','send_failed','to_alias','2.0','CommHub\x20response\x20omitted\x20task_id','24lWpKbz','sdk-','registered','disconnected','[REDACTED]','split','emit','status','text/event-stream','running','440418YAeRAY','fromAlias','<unknown>','application/json','agent','AbortError','url','sseAbort','task.send.failed','send_message','1973223lQbvzp','120836bLQsgT','abort','\x20parent_task_id=','task.send.delivered','disconnect','content'];a0_0x3b90=function(){return _0x3c02d2;};return a0_0x3b90();}
1
+ const a0_0xd9c652=a0_0x3659;function a0_0x3659(_0x539ffb,_0x44d8ef){_0x539ffb=_0x539ffb-0x1d9;const _0x1682df=a0_0x1682();let _0x365978=_0x1682df[_0x539ffb];return _0x365978;}(function(_0x4982e1,_0x11b38a){const _0x2d7fac=a0_0x3659,_0x361ab1=_0x4982e1();while(!![]){try{const _0xd6f960=-parseInt(_0x2d7fac(0x249))/0x1+parseInt(_0x2d7fac(0x207))/0x2*(-parseInt(_0x2d7fac(0x23e))/0x3)+-parseInt(_0x2d7fac(0x246))/0x4+parseInt(_0x2d7fac(0x1df))/0x5+parseInt(_0x2d7fac(0x1ff))/0x6+parseInt(_0x2d7fac(0x218))/0x7*(parseInt(_0x2d7fac(0x238))/0x8)+-parseInt(_0x2d7fac(0x24d))/0x9;if(_0xd6f960===_0x11b38a)break;else _0x361ab1['push'](_0x361ab1['shift']());}catch(_0x40e850){_0x361ab1['push'](_0x361ab1['shift']());}}}(a0_0x1682,0xd842f));import{EventEmitter as a0_0x413238}from'events';import{hostname as a0_0x19fcbe}from'os';var K=/(?:atok|ntok|utok|ghp|github_pat)_[A-Za-z0-9_-]+|Bearer\s+\S+/gi,L=(_0x4e7cf5,_0x105b45)=>(_0x4e7cf5??_0x105b45)[a0_0xd9c652(0x225)](/[\r\n\x00-\x1f\x7f]/g,'\x20')['slice'](0x0,0xf0);function N(_0x3218a4){const _0x1dae88=a0_0xd9c652;return(_0x3218a4 instanceof Error?_0x3218a4[_0x1dae88(0x241)]:String(_0x3218a4??'unknown\x20error'))[_0x1dae88(0x225)](K,'[REDACTED]')[_0x1dae88(0x225)](/[\r\n\x00-\x1f\x7f]/g,'\x20')[_0x1dae88(0x243)](0x0,0xf0);}function a0_0x1682(){const _0x395cbf=['SSE\x20error:\x20','signal','content','match','send_failed','failed','stringify','min','sdk','running','send_task','decode','connectSSE','autoConnect','sending','sdk-','sseAbort','get_all_status','parse','offline','lifecycle_tracking','disconnect','4596216vpGiab','parentTaskId','normal','messages','new_message','task.ack','toTimeString','task.replied','2IohVIM','reconnectDelay','url','connected','text','text/event-stream','fromAlias','idle','Bearer\x20',']\x20[commhub:','task.expired','call','startsWith','parent_task_id','alias','SSE\x20connected','send_reply','1974DuHWHC','error','disconnected','read','to_alias','now','task.send.failed','\x20duration_ms=','delivered','name','missing_task_id','lifecycleTracking','tools/call','replace','catch','message_id','heartbeatTimer','transport','CommHub\x20response\x20omitted\x20task_id','emit','agent','<unknown>','server','log','toAlias','broadcast','status','from_session','not_tracked','\x20from=','application/json','cwd','26984OGyZZg','from_alias','error_code','body','send','sleep','1117668WCJRnN','s...','task.started','message','\x20to=','slice','task.send.delivered','getAllStatus','1861132HboEam','type','new_task','12049uLJXAz','connect','split','/events/','9307080mZEypD','CommHub\x20rejected\x20task','/mcp','completed','reply','Authorization','POST','task_id','\x20transport=','application/json,\x20text/event-stream','token','getReader','SSE\x20failed:\x20','network_id','duration_ms','processInbox','5262965yHzneZ','heartbeat\x20failed:\x20','\x20lifecycle=','<missing>','heartbeatInterval','task','SSE\x20reconnecting\x20in\x20','resumeId','\x20network_id=','inbox\x20error:\x20'];a0_0x1682=function(){return _0x395cbf;};return a0_0x1682();}function O(_0x40a3d0,_0x18f910=process.env.ANET_TASK_TRACE_FORMAT==='json'){const _0x498e27=a0_0xd9c652;if(_0x18f910)return JSON[_0x498e27(0x1ef)](_0x40a3d0);let _0x11f7f4=L(_0x40a3d0[_0x498e27(0x214)],_0x498e27(0x1e2)),_0x59e5fe=L(_0x40a3d0[_0x498e27(0x254)],'<pending>'),_0x5a5e3a=_0x40a3d0[_0x498e27(0x23a)]?'\x20error='+_0x40a3d0['error_code']+':'+(_0x40a3d0['error_message']??''):'';return'[commhub:task]\x20'+_0x40a3d0[_0x498e27(0x232)]+_0x498e27(0x235)+L(_0x40a3d0[_0x498e27(0x239)],'<unknown>')+_0x498e27(0x242)+L(_0x40a3d0[_0x498e27(0x21c)],_0x498e27(0x22d))+'\x20task_id='+_0x59e5fe+'\x20parent_task_id='+_0x11f7f4+_0x498e27(0x1e7)+L(_0x40a3d0[_0x498e27(0x1dc)],_0x498e27(0x22d))+_0x498e27(0x255)+_0x40a3d0[_0x498e27(0x229)]+_0x498e27(0x21f)+_0x40a3d0[_0x498e27(0x1dd)]+_0x498e27(0x1e1)+_0x40a3d0[_0x498e27(0x1fd)]+_0x5a5e3a;}function U(_0x47ef04){const _0x3c6ef3=a0_0xd9c652;return{'event':{'sending':'task.send.start','delivered':_0x3c6ef3(0x244),'failed':_0x3c6ef3(0x21e),'acked':_0x3c6ef3(0x204),'started':_0x3c6ef3(0x240),'replied':_0x3c6ef3(0x206),'expired':_0x3c6ef3(0x211)}[_0x47ef04[_0x3c6ef3(0x232)]],..._0x47ef04};}function j(_0xc02945){const _0x72e378=a0_0xd9c652;let _0x4c3240=_0xc02945?.[_0x72e378(0x254)]||_0xc02945?.[_0x72e378(0x227)]||_0xc02945?.['id'];if(_0x4c3240)return String(_0x4c3240);let _0x5b4409=_0xc02945?.[_0x72e378(0x1eb)]?.[0x0]?.[_0x72e378(0x20b)];if(typeof _0x5b4409!=='string')return null;try{let _0x3e8d8b=JSON['parse'](_0x5b4409);return _0x3e8d8b?.[_0x72e378(0x254)]||_0x3e8d8b?.[_0x72e378(0x227)]||_0x3e8d8b?.['id']||null;}catch{return null;}}async function X(_0x3ae0e3,_0x382010){const _0x2779fe=a0_0xd9c652;let _0x3334c7=_0x382010[_0x2779fe(0x21d)]??Date['now'],_0x5833ed=_0x3334c7(),_0x2dab2e=(_0x3beaa2,_0x65ec48,_0x3a8d6b,_0x19f8ef)=>{const _0x379a02=_0x2779fe;_0x382010['log'](O(U({'from_alias':_0x3ae0e3['fromAlias'],'to_alias':_0x3ae0e3[_0x379a02(0x230)],'task_id':_0x65ec48,'parent_task_id':_0x3ae0e3[_0x379a02(0x200)],'network_id':_0x3ae0e3['networkId'],'transport':_0x3ae0e3['transport'],'status':_0x3beaa2,'duration_ms':_0x3334c7()-_0x5833ed,'lifecycle_tracking':_0x3ae0e3[_0x379a02(0x223)],..._0x3a8d6b!==void 0x0?{'error_code':_0x19f8ef||_0x379a02(0x1ed),'error_message':N(_0x3a8d6b)}:{}})));};_0x2dab2e(_0x2779fe(0x1f7),null);try{let _0x10546f=await _0x382010['send'](),_0xdce332=j(_0x10546f);if(_0xdce332)_0x2dab2e(_0x2779fe(0x220),_0xdce332);else{if(_0x10546f?.['ok']===!0x1||_0x10546f?.[_0x2779fe(0x219)])_0x2dab2e(_0x2779fe(0x1ee),_0xdce332,_0x10546f?.[_0x2779fe(0x219)]||_0x2779fe(0x24e),'send_rejected');else _0x2dab2e(_0x2779fe(0x1ee),null,_0x2779fe(0x22a),_0x2779fe(0x222));}return _0x10546f;}catch(_0x4716f8){throw _0x2dab2e(_0x2779fe(0x1ee),null,_0x4716f8,_0x2779fe(0x1ed)),_0x4716f8;}}async function Y(_0x4a73cd,_0x5ccc27){const _0x3cd162=a0_0xd9c652;return X({'fromAlias':_0x4a73cd[_0x3cd162(0x20d)],'toAlias':_0x4a73cd[_0x3cd162(0x215)],'parentTaskId':_0x4a73cd['parentTaskId']||null,'networkId':_0x4a73cd['networkId']||null,'transport':'mcp_http','lifecycleTracking':_0x3cd162(0x234)},_0x5ccc27);}class $ extends a0_0x413238{['url'];['alias'];[a0_0xd9c652(0x1d9)];['agent'];['resumeId'];[a0_0xd9c652(0x1e3)];['reconnectDelay'];[a0_0xd9c652(0x228)];['sseAbort'];[a0_0xd9c652(0x1f2)]=!0x1;constructor(_0xae535b){const _0x1ad81d=a0_0xd9c652;super();if(this[_0x1ad81d(0x209)]=_0xae535b[_0x1ad81d(0x209)][_0x1ad81d(0x225)](/\/$/,''),this['alias']=_0xae535b[_0x1ad81d(0x215)],this['token']=_0xae535b[_0x1ad81d(0x1d9)],this[_0x1ad81d(0x22c)]=_0xae535b['agent']||_0x1ad81d(0x1f1),this['resumeId']=_0x1ad81d(0x1f8)+_0xae535b['alias']+'-'+Date[_0x1ad81d(0x21d)]()['toString'](0x24),this[_0x1ad81d(0x1e3)]=_0xae535b[_0x1ad81d(0x1e3)]??0x2bf20,this[_0x1ad81d(0x208)]=_0xae535b[_0x1ad81d(0x208)]??0xbb8,_0xae535b[_0x1ad81d(0x1f6)]!==!0x1)this[_0x1ad81d(0x24a)]();}[a0_0xd9c652(0x22f)](_0x18f18c){const _0x199eb4=a0_0xd9c652;console[_0x199eb4(0x22f)]('['+new Date()[_0x199eb4(0x205)]()[_0x199eb4(0x243)](0x0,0x8)+_0x199eb4(0x210)+this[_0x199eb4(0x215)]+']\x20'+_0x18f18c);}async[a0_0xd9c652(0x212)](_0x10baeb,_0x5a9d23){const _0x578254=a0_0xd9c652;let _0x5aacf8={'Content-Type':_0x578254(0x236),'Accept':_0x578254(0x256)};if(this[_0x578254(0x1d9)])_0x5aacf8[_0x578254(0x252)]=_0x578254(0x20f)+this[_0x578254(0x1d9)];let _0x2ed9b9=await(await fetch(this[_0x578254(0x209)]+_0x578254(0x24f),{'method':_0x578254(0x253),'headers':_0x5aacf8,'body':JSON[_0x578254(0x1ef)]({'jsonrpc':'2.0','id':Date[_0x578254(0x21d)](),'method':_0x578254(0x224),'params':{'name':_0x10baeb,'arguments':_0x5a9d23}})}))[_0x578254(0x20b)](),_0x55eb8b=_0x2ed9b9[_0x578254(0x1ec)](/data: (.+)/),_0x3b33e1=_0x55eb8b?JSON['parse'](_0x55eb8b[0x1]):JSON[_0x578254(0x1fb)](_0x2ed9b9),_0x3eea5e=_0x3b33e1?.['result']?.['content']?.[0x0]?.[_0x578254(0x20b)];return _0x3eea5e?JSON['parse'](_0x3eea5e):_0x3b33e1;}async['connect'](){const _0x1cbd65=a0_0xd9c652;if(this['running'])return;this[_0x1cbd65(0x1f2)]=!0x0,await this[_0x1cbd65(0x232)](_0x1cbd65(0x20e)),this[_0x1cbd65(0x22f)]('registered'),this[_0x1cbd65(0x228)]=setInterval(()=>{const _0x3c6f4f=_0x1cbd65;this[_0x3c6f4f(0x232)](_0x3c6f4f(0x20e))[_0x3c6f4f(0x226)](_0x5238ce=>this[_0x3c6f4f(0x22f)](_0x3c6f4f(0x1e0)+_0x5238ce['message']));},this[_0x1cbd65(0x1e3)]),this[_0x1cbd65(0x1f5)]();}async[a0_0xd9c652(0x1fe)](){const _0x29834d=a0_0xd9c652;if(this[_0x29834d(0x1f2)]=!0x1,this[_0x29834d(0x1f9)]?.['abort'](),this[_0x29834d(0x228)])clearInterval(this[_0x29834d(0x228)]);await this[_0x29834d(0x232)](_0x29834d(0x1fc))[_0x29834d(0x226)](()=>{}),this['log'](_0x29834d(0x21a));}async[a0_0xd9c652(0x23c)](_0x513c85,_0x26f062,_0x2fff3c=a0_0xd9c652(0x201)){const _0x5d9be6=a0_0xd9c652;return Y({'alias':_0x513c85,'fromAlias':this['alias']},{'log':_0x37c3e8=>console[_0x5d9be6(0x22f)](_0x37c3e8),'send':()=>this[_0x5d9be6(0x212)](_0x5d9be6(0x1f3),{'alias':_0x513c85,'task':_0x26f062,'priority':_0x2fff3c,'from_session':this['alias']})});}async[a0_0xd9c652(0x241)](_0x529e7f,_0x103bba){const _0x4de48e=a0_0xd9c652;return this['call']('send_message',{'alias':_0x529e7f,'message':_0x103bba,'from_session':this[_0x4de48e(0x215)]});}async[a0_0xd9c652(0x251)](_0x4dd0ad,_0x275023,_0x199b45=a0_0xd9c652(0x250)){const _0x2b9bfe=a0_0xd9c652;return this[_0x2b9bfe(0x212)](_0x2b9bfe(0x217),{'in_reply_to':_0x4dd0ad,'text':_0x275023,'status':_0x199b45});}async[a0_0xd9c652(0x232)](_0xf906e6,_0x4d3007){const _0x5b5249=a0_0xd9c652;return this[_0x5b5249(0x212)]('report_status',{'resume_id':this[_0x5b5249(0x1e6)],'alias':this['alias'],'status':_0xf906e6,'server':a0_0x19fcbe(),'hostname':a0_0x19fcbe(),'agent':this[_0x5b5249(0x22c)],'project_dir':process[_0x5b5249(0x237)](),..._0x4d3007});}async[a0_0xd9c652(0x245)](){const _0x58b17a=a0_0xd9c652;return this[_0x58b17a(0x212)](_0x58b17a(0x1fa),{});}async[a0_0xd9c652(0x231)](_0x4d235c,_0x3ac462){const _0xabba59=a0_0xd9c652;return this[_0xabba59(0x212)](_0xabba59(0x231),{'message':_0x4d235c,'filter_server':_0x3ac462?.[_0xabba59(0x22e)],'filter_status':_0x3ac462?.[_0xabba59(0x232)]});}async['connectSSE'](){const _0x25d0b7=a0_0xd9c652;let _0x46363e=encodeURIComponent(this[_0x25d0b7(0x215)]),_0x3a3649=this[_0x25d0b7(0x209)]+_0x25d0b7(0x24c)+_0x46363e,_0x4ba956=this[_0x25d0b7(0x208)];while(this[_0x25d0b7(0x1f2)]){try{this['sseAbort']=new AbortController();let _0x2827d6={'Accept':_0x25d0b7(0x20c)};if(this['token'])_0x2827d6[_0x25d0b7(0x252)]=_0x25d0b7(0x20f)+this[_0x25d0b7(0x1d9)];let _0x358634=await fetch(_0x3a3649,{'headers':_0x2827d6,'signal':this[_0x25d0b7(0x1f9)][_0x25d0b7(0x1ea)]});if(!_0x358634['ok']||!_0x358634[_0x25d0b7(0x23b)]){this[_0x25d0b7(0x22f)](_0x25d0b7(0x1db)+_0x358634[_0x25d0b7(0x232)]),await this[_0x25d0b7(0x23d)](_0x4ba956),_0x4ba956=Math[_0x25d0b7(0x1f0)](_0x4ba956*1.5,0xea60);continue;}_0x4ba956=this['reconnectDelay'];let _0x521814=_0x358634[_0x25d0b7(0x23b)][_0x25d0b7(0x1da)](),_0x26b5a2=new TextDecoder(),_0x4dbd41='';while(this[_0x25d0b7(0x1f2)]){let {done:_0x21040b,value:_0x532edb}=await _0x521814[_0x25d0b7(0x21b)]();if(_0x21040b)break;_0x4dbd41+=_0x26b5a2[_0x25d0b7(0x1f4)](_0x532edb,{'stream':!0x0});let _0x5e5089=_0x4dbd41[_0x25d0b7(0x24b)]('\x0a');_0x4dbd41=_0x5e5089['pop']()||'';for(let _0x4b2ec1 of _0x5e5089){if(!_0x4b2ec1[_0x25d0b7(0x213)]('data:\x20'))continue;try{let _0x373588=JSON[_0x25d0b7(0x1fb)](_0x4b2ec1['slice'](0x6));if(_0x373588['type']===_0x25d0b7(0x20a)){this[_0x25d0b7(0x22f)](_0x25d0b7(0x216)),this[_0x25d0b7(0x22b)](_0x25d0b7(0x20a));continue;}if(_0x373588[_0x25d0b7(0x247)]===_0x25d0b7(0x248)||_0x373588[_0x25d0b7(0x247)]===_0x25d0b7(0x203)||_0x373588['type']==='broadcast')await this[_0x25d0b7(0x1de)]();}catch{}}}}catch(_0x2b17ee){if(_0x2b17ee[_0x25d0b7(0x221)]==='AbortError')break;this[_0x25d0b7(0x22b)](_0x25d0b7(0x219),_0x2b17ee),this['log'](_0x25d0b7(0x1e9)+_0x2b17ee[_0x25d0b7(0x241)]);}if(this[_0x25d0b7(0x1f2)])this[_0x25d0b7(0x22b)](_0x25d0b7(0x21a)),this['log'](_0x25d0b7(0x1e5)+_0x4ba956/0x3e8+_0x25d0b7(0x23f)),await this[_0x25d0b7(0x23d)](_0x4ba956),_0x4ba956=Math[_0x25d0b7(0x1f0)](_0x4ba956*1.5,0xea60);}}async[a0_0xd9c652(0x1de)](){const _0x544542=a0_0xd9c652;try{let _0x6799b1=(await this[_0x544542(0x212)]('get_inbox',{'alias':this['alias'],'limit':0xa}))?.[_0x544542(0x202)]||[];for(let _0x1ec551 of _0x6799b1)await this[_0x544542(0x212)]('ack_inbox',{'alias':this[_0x544542(0x215)],'message_id':_0x1ec551['id']}),this[_0x544542(0x22f)]('←\x20'+_0x1ec551[_0x544542(0x233)]+':\x20'+_0x1ec551['content']['slice'](0x0,0x3c)),this['emit'](_0x544542(0x1e4),_0x1ec551),this['emit']('message',_0x1ec551);}catch(_0x5d0617){this['log'](_0x544542(0x1e8)+_0x5d0617['message']);}}[a0_0xd9c652(0x23d)](_0xeba498){return new Promise(_0x2c3b31=>setTimeout(_0x2c3b31,_0xeba498));}}var F=$;export{F as default,$ as CommHub};
@@ -56,3 +56,22 @@ export type CapabilityFix = {
56
56
  * 这一格存在的意义就是分辨新鲜和陈旧,含糊化等于把它的功能删掉。 */
57
57
  export declare function formatAge(ms: number): string;
58
58
  export declare function describeCapability(row: DaemonCapabilityRow, nowMs: number): CapabilityView;
59
+ /** 取 `/api/host-supervisors` 失败时的**原因**。以前这五种共用一个 `null`。 */
60
+ export type CapabilityFetchFailure = {
61
+ readonly why: "no-hub";
62
+ } | {
63
+ readonly why: "unauthorized";
64
+ readonly status: number;
65
+ } | {
66
+ readonly why: "http";
67
+ readonly status: number;
68
+ } | {
69
+ readonly why: "bad-body";
70
+ } | {
71
+ readonly why: "unreachable";
72
+ readonly detail?: string;
73
+ };
74
+ /** 每一种都必须说出**两件事**:到底是什么挡住了,以及下一步该敲什么。
75
+ * 尾巴统一带上「本地清单不需要网络」—— 那是这条命令没有整个失败的原因,
76
+ * 用户看到「查不到」时最先怕的就是"上面那些是不是也不可信了"。 */
77
+ export declare function describeFetchFailure(f: CapabilityFetchFailure): string;
@@ -1,9 +1,18 @@
1
- var J=Object.freeze({anet_bin_identity:{explain:"该路径不是 anet 的包内 bin(若设过 ANET_BIN_ABS,先 unset 再重装)",command:"npm i -g @sleep2agi/agent-network"},anet_bin_source:{explain:"pin 没有可信来源。在该机器上写信任根 —— 两段都要 sudo,少一个 && 就会断链",command:`sudo install -d -m 755 /etc/anet-daemon && printf 'ANET_BIN_ABS=%s
2
- ' "$(command -v anet)" | sudo tee /etc/anet-daemon/path.conf`},anet_bin_permission:{explain:"该二进制 group/other 可写。一行就能修",command:'chmod go-w "$(command -v anet)"'},anet_bin_shape:{explain:"pin 的路径形态不合法(相对路径,或路径里含软链)。取它的 realpath 重新写进 path.conf",command:'readlink -f "$(command -v anet)"'},anet_bin_unknown:{explain:"daemon 没能给出类别(例如安装后二进制被换过、校验和不符)。只能看该机器的 daemon 日志取原文",command:null},anet_bin_pin_unresolved:{explain:"旧版 daemon(preview.40 及更早)只报这一个笼统原因。升级该机器的 agent-node 后才能拿到具体类别",command:null}});function G(c){if(!Number.isFinite(c)||c<0)return"?";if(c<1000)return`${Math.round(c)}ms 前`;let j=Math.floor(c/1000);if(j<60)return`${j}s 前`;let q=Math.floor(j/60);if(q<60)return`${q}m 前`;let k=Math.floor(q/60);if(k<24)return`${k}h 前`;return`${Math.floor(k/24)}d 前`}function K(c){if(typeof c==="number"&&Number.isFinite(c))return c;if(typeof c==="string"){let j=Date.parse(c);if(Number.isFinite(j))return j}return}function Q(c,j){if(typeof c.can_create_nodes!=="boolean")return{kind:"never-reported",line:`创建能力:未知 —— 这台 daemon 没报过这一格。
3
- `+" (agent-node 版本早于 preview.55;升级它才能看到)"};let q=K(c.last_seen_at),k=c.create_capability_observed_ms_ago,u=q!==void 0&&typeof k==="number"&&Number.isFinite(k)?Math.max(0,j-q)+k:void 0;if(c.can_create_nodes){if(u===void 0)return{kind:"ready-age-unknown",line:`创建能力:可用
4
- `+" ⚠ 不知道是什么时候测的 —— 该版本开机只算一次。重启它,或升级。"};return{kind:"ready",ageMs:u,line:`创建能力:可用(${G(u)}测)`}}let C=c.create_nodes_blocked_reason||"anet_bin_unknown",z=J[C]??{explain:`未知原因代码 ${C} —— 本 CLI 可能比那台机器的 anet 旧,升级本机 anet 或看它的 daemon 日志`,command:null},H=`完整原文只在那台机器的 daemon 日志里。
5
- (它带真实机器路径,按设计不上报)`,D=[` 原因:${z.explain}`,z.command?` 修法(可整行粘贴):${z.command}`:" 修法:没有单条命令能修,见上。",` ${H}`].join(`
6
- `);if(u===void 0)return{kind:"blocked-age-unknown",line:`创建能力:**不可用**(${C})
1
+ var K=Object.freeze({anet_bin_identity:{explain:"该路径不是 anet 的包内 bin(若设过 ANET_BIN_ABS,先 unset 再重装)",command:"npm i -g @sleep2agi/agent-network"},anet_bin_source:{explain:"pin 没有可信来源。在该机器上写信任根 —— 两段都要 sudo,少一个 && 就会断链",command:`sudo install -d -m 755 /etc/anet-daemon && printf 'ANET_BIN_ABS=%s
2
+ ' "$(command -v anet)" | sudo tee /etc/anet-daemon/path.conf`},anet_bin_permission:{explain:"该二进制 group/other 可写。一行就能修",command:'chmod go-w "$(command -v anet)"'},anet_bin_shape:{explain:"pin 的路径形态不合法(相对路径,或路径里含软链)。取它的 realpath 重新写进 path.conf",command:'readlink -f "$(command -v anet)"'},anet_bin_unknown:{explain:"daemon 没能给出类别(例如安装后二进制被换过、校验和不符)。只能看该机器的 daemon 日志取原文",command:null},anet_bin_pin_unresolved:{explain:"旧版 daemon(preview.40 及更早)只报这一个笼统原因。升级该机器的 agent-node 并重启 daemon 后才能拿到具体类别",command:null}});function H(c){if(!Number.isFinite(c)||c<0)return"?";if(c<1000)return`${Math.round(c)}ms 前`;let j=Math.floor(c/1000);if(j<60)return`${j}s 前`;let q=Math.floor(j/60);if(q<60)return`${q}m 前`;let k=Math.floor(q/60);if(k<24)return`${k}h 前`;return`${Math.floor(k/24)}d 前`}function P(c){if(typeof c==="number"&&Number.isFinite(c))return c;if(typeof c==="string"){let j=Date.parse(c);if(Number.isFinite(j))return j}return}function T(c,j){if(typeof c.can_create_nodes!=="boolean")return{kind:"never-reported",line:`创建能力:未知 —— 这台 daemon 没报过这一格。
3
+ `+" (agent-node 版本早于 preview.55;升级后必须重启 daemon 才生效)"};let q=P(c.last_seen_at),k=c.create_capability_observed_ms_ago,z=q!==void 0&&typeof k==="number"&&Number.isFinite(k)?Math.max(0,j-q)+k:void 0;if(c.can_create_nodes){if(z===void 0)return{kind:"ready-age-unknown",line:`创建能力:可用
4
+ `+" ⚠ 不知道是什么时候测的 —— 该版本开机只算一次。重启它,或升级。"};return{kind:"ready",ageMs:z,line:`创建能力:可用(${H(z)}测)`}}let D=c.create_nodes_blocked_reason||"anet_bin_unknown",C=K[D]??{explain:`未知原因代码 ${D} —— 本 CLI 可能比那台机器的 anet 旧,升级本机 anet 或看它的 daemon 日志`,command:null},J=`完整原文只在那台机器的 daemon 日志里。
5
+ (它带真实机器路径,按设计不上报)`,G=[` 原因:${C.explain}`,C.command?` 修法(可整行粘贴):${C.command}`:" 修法:没有单条命令能修,见上。",` ${J}`].join(`
6
+ `);if(z===void 0)return{kind:"blocked-age-unknown",line:`创建能力:**不可用**(${D})
7
7
  ⚠ 不知道是什么时候测的 —— 该 daemon 版本开机只算一次,之后不再重测。
8
- ${D}`,fix:z};return{kind:"blocked",ageMs:u,line:`创建能力:**不可用**(${C},${G(u)}测)
9
- ${D}`,fix:z}}export{G as formatAge,Q as describeCapability};
8
+ ${G}`,fix:C};return{kind:"blocked",ageMs:z,line:`创建能力:**不可用**(${D},${H(z)}测)
9
+ ${G}`,fix:C}}function U(c){switch(c.why){case"no-hub":return`创建能力:查不到 —— 本机还没配 hub 地址。
10
+ `+" 跑 anet init,或这次带上 --hub <url>"+`
11
+ (本地清单不需要网络,上面那些信息仍然有效)`;case"unauthorized":return`创建能力:查不到 —— hub 拒绝了本机的身份(HTTP ${c.status})。
12
+ `+" hub 是通的,要修的是**凭据**不是网络:跑 anet login"+`
13
+ (本地清单不需要网络,上面那些信息仍然有效)`;case"http":return`创建能力:查不到 —— hub 返回 HTTP ${c.status}。
14
+ `+" hub 在,但这个接口没给出结果;看 hub 日志"+`
15
+ (本地清单不需要网络,上面那些信息仍然有效)`;case"bad-body":return`创建能力:查不到 —— hub 的应答读不懂。
16
+ `+" 多半是 hub 比本机 CLI 旧,升级 hub 或降本机 anet"+`
17
+ (本地清单不需要网络,上面那些信息仍然有效)`;case"unreachable":return"创建能力:查不到 —— 连不上 hub"+(c.detail?`(${c.detail})`:"")+"。"+`
18
+ (本地清单不需要网络,上面那些信息仍然有效)`}}export{H as formatAge,U as describeFetchFailure,T as describeCapability};
@@ -0,0 +1,22 @@
1
+ /** 一个 runtime 依赖的外部二进制,以及它**有据可查**的安装位置。 */
2
+ export type RuntimeBinaryHint = {
3
+ /** 哪些 runtime 名需要这个二进制 */
4
+ readonly runtimes: readonly string[];
5
+ /** 在 PATH 上查的裸名 */
6
+ readonly binary: string;
7
+ /** 官方安装位置(相对 $HOME) */
8
+ readonly homeRelativeDir: string;
9
+ /** 🔴 这一条的出处 —— 没有出处就不许进这张表 */
10
+ readonly evidence: string;
11
+ };
12
+ export declare const RUNTIME_BINARY_HINTS: readonly RuntimeBinaryHint[];
13
+ export type PathPreflightInput = {
14
+ /** 这台 daemon 声称支持的 runtime */
15
+ readonly runtimes: readonly string[];
16
+ /** 二进制在 daemon 的 PATH 上能不能找到 */
17
+ readonly resolvesOnPath: (binary: string) => boolean;
18
+ /** 二进制在那个已知位置存不存在 */
19
+ readonly existsInHomeDir: (homeRelativeDir: string, binary: string) => boolean;
20
+ };
21
+ /** 返回要打给用户的警告。**没问题时返回空数组** —— 空是常态,不是失败。 */
22
+ export declare function daemonPathWarnings(input: PathPreflightInput): string[];