@sleep2agi/agent-network 2.3.0-preview.71 → 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
- function a0_0x268b(_0xec6201,_0x177dbe){_0xec6201=_0xec6201-0x91;const _0xb46bcb=a0_0xb46b();let _0x268bda=_0xb46bcb[_0xec6201];return _0x268bda;}const a0_0x58c91a=a0_0x268b;(function(_0x5e40b7,_0x1d373b){const _0x2b2e28=a0_0x268b,_0x2a80f4=_0x5e40b7();while(!![]){try{const _0x538844=parseInt(_0x2b2e28(0xab))/0x1+parseInt(_0x2b2e28(0x9a))/0x2*(-parseInt(_0x2b2e28(0xb3))/0x3)+parseInt(_0x2b2e28(0xee))/0x4+parseInt(_0x2b2e28(0xb2))/0x5*(parseInt(_0x2b2e28(0xc6))/0x6)+parseInt(_0x2b2e28(0xe2))/0x7*(-parseInt(_0x2b2e28(0xfa))/0x8)+parseInt(_0x2b2e28(0xa3))/0x9+parseInt(_0x2b2e28(0x10a))/0xa;if(_0x538844===_0x1d373b)break;else _0x2a80f4['push'](_0x2a80f4['shift']());}catch(_0x6d7459){_0x2a80f4['push'](_0x2a80f4['shift']());}}}(a0_0xb46b,0x4d4a8));import{EventEmitter as a0_0x1042a4}from'events';function a0_0xb46b(){const _0x1adba3=['abort','task.send.failed','catch','<pending>','from_session','broadcast','offline','error','completed','504EqzLwF','\x20duration_ms=','error_code','autoConnect','send_task','connected','sending','message','Bearer\x20','mcp_http','cwd','lifecycleTracking','processInbox','getAllStatus','CommHub\x20response\x20omitted\x20task_id','split','4281450uuuMDk','failed','new_task','signal','sseAbort','application/json','\x20lifecycle=','heartbeatInterval','Authorization','not_tracked','stringify','task.send.start','connectSSE','ack_inbox','[REDACTED]','\x20from=','540HBWPsF','message_id','string','status','tools/call','<missing>','log','\x20network_id=','data:\x20','642420mUjYJL','sleep','inbox\x20error:\x20','send_reply','\x20to=','s...','toString','alias','464232rXCgOc','error_message','network_id','getReader','slice','min','name','55yyWhyq','4797ZWUTqY','missing_task_id','server','send','\x20task_id=','task.started','networkId','task_id','SSE\x20connected','task.expired','toAlias','heartbeat\x20failed:\x20','/events/','normal','now','type','POST','startsWith','json','44718ckxKbd','running','resumeId','url','[commhub:task]\x20','SSE\x20reconnecting\x20in\x20','idle','replace','connect','disconnect','AbortError','content','result','application/json,\x20text/event-stream','heartbeatTimer','task.replied','text/event-stream','reconnectDelay','parent_task_id','<unknown>','parse','messages','token','call','SSE\x20failed:\x20','send_failed','read','\x20parent_task_id=','55559MOXdih','task.ack','task','send_rejected','agent','to_alias','emit','registered','parentTaskId','disconnected','fromAlias','text','810420TsXMiD','CommHub\x20rejected\x20task','sdk-'];a0_0xb46b=function(){return _0x1adba3;};return a0_0xb46b();}import{hostname as a0_0x3df4f8}from'os';var K=/(?:atok|ntok|utok|ghp|github_pat)_[A-Za-z0-9_-]+|Bearer\s+\S+/gi,L=(_0x398863,_0x381fd7)=>(_0x398863??_0x381fd7)['replace'](/[\r\n\x00-\x1f\x7f]/g,'\x20')['slice'](0x0,0xf0);function N(_0x4052d2){const _0x53a357=a0_0x268b;return(_0x4052d2 instanceof Error?_0x4052d2[_0x53a357(0x101)]:String(_0x4052d2??'unknown\x20error'))[_0x53a357(0xcd)](K,_0x53a357(0x98))['replace'](/[\r\n\x00-\x1f\x7f]/g,'\x20')['slice'](0x0,0xf0);}function O(_0x1496b5,_0x58ff4c=process.env.ANET_TASK_TRACE_FORMAT===a0_0x58c91a(0xc5)){const _0x2c1a9a=a0_0x58c91a;if(_0x58ff4c)return JSON[_0x2c1a9a(0x94)](_0x1496b5);let _0x2fadbc=L(_0x1496b5[_0x2c1a9a(0xd8)],_0x2c1a9a(0x9f)),_0x9d502f=L(_0x1496b5[_0x2c1a9a(0xba)],_0x2c1a9a(0xf4)),_0x1f872e=_0x1496b5[_0x2c1a9a(0xfc)]?'\x20error='+_0x1496b5[_0x2c1a9a(0xfc)]+':'+(_0x1496b5[_0x2c1a9a(0xac)]??''):'';return _0x2c1a9a(0xca)+_0x1496b5[_0x2c1a9a(0x9d)]+_0x2c1a9a(0x99)+L(_0x1496b5['from_alias'],_0x2c1a9a(0xd9))+_0x2c1a9a(0xa7)+L(_0x1496b5[_0x2c1a9a(0xe7)],_0x2c1a9a(0xd9))+_0x2c1a9a(0xb7)+_0x9d502f+_0x2c1a9a(0xe1)+_0x2fadbc+_0x2c1a9a(0xa1)+L(_0x1496b5[_0x2c1a9a(0xad)],'<unknown>')+'\x20transport='+_0x1496b5['transport']+_0x2c1a9a(0xfb)+_0x1496b5['duration_ms']+_0x2c1a9a(0x110)+_0x1496b5['lifecycle_tracking']+_0x1f872e;}function U(_0xae52a0){const _0x41801e=a0_0x58c91a;return{'event':{'sending':_0x41801e(0x95),'delivered':'task.send.delivered','failed':_0x41801e(0xf2),'acked':_0x41801e(0xe3),'started':_0x41801e(0xb8),'replied':_0x41801e(0xd5),'expired':_0x41801e(0xbc)}[_0xae52a0[_0x41801e(0x9d)]],..._0xae52a0};}function j(_0x20f2c9){const _0x3368d7=a0_0x58c91a;let _0x1beb0e=_0x20f2c9?.[_0x3368d7(0xba)]||_0x20f2c9?.[_0x3368d7(0x9b)]||_0x20f2c9?.['id'];if(_0x1beb0e)return String(_0x1beb0e);let _0x30004a=_0x20f2c9?.[_0x3368d7(0xd1)]?.[0x0]?.[_0x3368d7(0xed)];if(typeof _0x30004a!==_0x3368d7(0x9c))return null;try{let _0x398c30=JSON['parse'](_0x30004a);return _0x398c30?.[_0x3368d7(0xba)]||_0x398c30?.[_0x3368d7(0x9b)]||_0x398c30?.['id']||null;}catch{return null;}}async function X(_0x1283ac,_0x3ba307){const _0x559cc9=a0_0x58c91a;let _0x33a5e0=_0x3ba307[_0x559cc9(0xc1)]??Date[_0x559cc9(0xc1)],_0x328e49=_0x33a5e0(),_0x5dfbeb=(_0x17346e,_0x1bbdb9,_0x37993d,_0xa5e91b)=>{const _0x54bf78=_0x559cc9;_0x3ba307[_0x54bf78(0xa0)](O(U({'from_alias':_0x1283ac[_0x54bf78(0xec)],'to_alias':_0x1283ac[_0x54bf78(0xbd)],'task_id':_0x1bbdb9,'parent_task_id':_0x1283ac['parentTaskId'],'network_id':_0x1283ac[_0x54bf78(0xb9)],'transport':_0x1283ac['transport'],'status':_0x17346e,'duration_ms':_0x33a5e0()-_0x328e49,'lifecycle_tracking':_0x1283ac[_0x54bf78(0x105)],..._0x37993d!==void 0x0?{'error_code':_0xa5e91b||_0x54bf78(0xdf),'error_message':N(_0x37993d)}:{}})));};_0x5dfbeb(_0x559cc9(0x100),null);try{let _0x1eb2f6=await _0x3ba307[_0x559cc9(0xb6)](),_0xf62d25=j(_0x1eb2f6);if(_0xf62d25)_0x5dfbeb('delivered',_0xf62d25);else{if(_0x1eb2f6?.['ok']===!0x1||_0x1eb2f6?.[_0x559cc9(0xf8)])_0x5dfbeb(_0x559cc9(0x10b),_0xf62d25,_0x1eb2f6?.['error']||_0x559cc9(0xef),_0x559cc9(0xe5));else _0x5dfbeb(_0x559cc9(0x10b),null,_0x559cc9(0x108),_0x559cc9(0xb4));}return _0x1eb2f6;}catch(_0x3fef30){throw _0x5dfbeb(_0x559cc9(0x10b),null,_0x3fef30,'send_failed'),_0x3fef30;}}async function Y(_0x4ac945,_0xd3ae74){const _0x3bcf3e=a0_0x58c91a;return X({'fromAlias':_0x4ac945[_0x3bcf3e(0xec)],'toAlias':_0x4ac945[_0x3bcf3e(0xaa)],'parentTaskId':_0x4ac945[_0x3bcf3e(0xea)]||null,'networkId':_0x4ac945[_0x3bcf3e(0xb9)]||null,'transport':_0x3bcf3e(0x103),'lifecycleTracking':_0x3bcf3e(0x93)},_0xd3ae74);}class $ extends a0_0x1042a4{[a0_0x58c91a(0xc9)];['alias'];[a0_0x58c91a(0xdc)];[a0_0x58c91a(0xe6)];[a0_0x58c91a(0xc8)];[a0_0x58c91a(0x91)];[a0_0x58c91a(0xd7)];[a0_0x58c91a(0xd4)];[a0_0x58c91a(0x10e)];[a0_0x58c91a(0xc7)]=!0x1;constructor(_0x2fca58){const _0x522316=a0_0x58c91a;super();if(this['url']=_0x2fca58[_0x522316(0xc9)][_0x522316(0xcd)](/\/$/,''),this[_0x522316(0xaa)]=_0x2fca58[_0x522316(0xaa)],this[_0x522316(0xdc)]=_0x2fca58[_0x522316(0xdc)],this[_0x522316(0xe6)]=_0x2fca58[_0x522316(0xe6)]||'sdk',this['resumeId']=_0x522316(0xf0)+_0x2fca58[_0x522316(0xaa)]+'-'+Date['now']()[_0x522316(0xa9)](0x24),this[_0x522316(0x91)]=_0x2fca58[_0x522316(0x91)]??0x2bf20,this[_0x522316(0xd7)]=_0x2fca58['reconnectDelay']??0xbb8,_0x2fca58[_0x522316(0xfd)]!==!0x1)this[_0x522316(0xce)]();}[a0_0x58c91a(0xa0)](_0x13884d){const _0x2a82ad=a0_0x58c91a;console[_0x2a82ad(0xa0)]('['+new Date()['toTimeString']()[_0x2a82ad(0xaf)](0x0,0x8)+']\x20[commhub:'+this[_0x2a82ad(0xaa)]+']\x20'+_0x13884d);}async[a0_0x58c91a(0xdd)](_0x248434,_0x127150){const _0x2b5156=a0_0x58c91a;let _0x15caa8={'Content-Type':_0x2b5156(0x10f),'Accept':_0x2b5156(0xd3)};if(this['token'])_0x15caa8[_0x2b5156(0x92)]=_0x2b5156(0x102)+this[_0x2b5156(0xdc)];let _0x337506=await(await fetch(this[_0x2b5156(0xc9)]+'/mcp',{'method':_0x2b5156(0xc3),'headers':_0x15caa8,'body':JSON[_0x2b5156(0x94)]({'jsonrpc':'2.0','id':Date[_0x2b5156(0xc1)](),'method':_0x2b5156(0x9e),'params':{'name':_0x248434,'arguments':_0x127150}})}))[_0x2b5156(0xed)](),_0x3d5481=_0x337506['match'](/data: (.+)/),_0x168b05=_0x3d5481?JSON[_0x2b5156(0xda)](_0x3d5481[0x1]):JSON[_0x2b5156(0xda)](_0x337506),_0x2e50b6=_0x168b05?.[_0x2b5156(0xd2)]?.[_0x2b5156(0xd1)]?.[0x0]?.['text'];return _0x2e50b6?JSON[_0x2b5156(0xda)](_0x2e50b6):_0x168b05;}async['connect'](){const _0x19b19d=a0_0x58c91a;if(this[_0x19b19d(0xc7)])return;this[_0x19b19d(0xc7)]=!0x0,await this[_0x19b19d(0x9d)]('idle'),this['log'](_0x19b19d(0xe9)),this[_0x19b19d(0xd4)]=setInterval(()=>{const _0x36bf2f=_0x19b19d;this[_0x36bf2f(0x9d)](_0x36bf2f(0xcc))[_0x36bf2f(0xf3)](_0x435dd0=>this[_0x36bf2f(0xa0)](_0x36bf2f(0xbe)+_0x435dd0[_0x36bf2f(0x101)]));},this[_0x19b19d(0x91)]),this[_0x19b19d(0x96)]();}async[a0_0x58c91a(0xcf)](){const _0x2f09bc=a0_0x58c91a;if(this[_0x2f09bc(0xc7)]=!0x1,this[_0x2f09bc(0x10e)]?.[_0x2f09bc(0xf1)](),this[_0x2f09bc(0xd4)])clearInterval(this[_0x2f09bc(0xd4)]);await this[_0x2f09bc(0x9d)](_0x2f09bc(0xf7))[_0x2f09bc(0xf3)](()=>{}),this[_0x2f09bc(0xa0)](_0x2f09bc(0xeb));}async[a0_0x58c91a(0xb6)](_0x5dd3d5,_0x6b9585,_0x4f7a86=a0_0x58c91a(0xc0)){const _0x2e25f6=a0_0x58c91a;return Y({'alias':_0x5dd3d5,'fromAlias':this[_0x2e25f6(0xaa)]},{'log':_0x64c8bd=>console['log'](_0x64c8bd),'send':()=>this['call'](_0x2e25f6(0xfe),{'alias':_0x5dd3d5,'task':_0x6b9585,'priority':_0x4f7a86,'from_session':this[_0x2e25f6(0xaa)]})});}async['message'](_0x4c777a,_0x1b7b45){const _0x103dad=a0_0x58c91a;return this[_0x103dad(0xdd)]('send_message',{'alias':_0x4c777a,'message':_0x1b7b45,'from_session':this['alias']});}async['reply'](_0x3f9174,_0x4e4417,_0x3289b6=a0_0x58c91a(0xf9)){const _0x500862=a0_0x58c91a;return this[_0x500862(0xdd)](_0x500862(0xa6),{'in_reply_to':_0x3f9174,'text':_0x4e4417,'status':_0x3289b6});}async['status'](_0x39072b,_0x4323e7){const _0x191f21=a0_0x58c91a;return this[_0x191f21(0xdd)]('report_status',{'resume_id':this[_0x191f21(0xc8)],'alias':this[_0x191f21(0xaa)],'status':_0x39072b,'server':a0_0x3df4f8(),'hostname':a0_0x3df4f8(),'agent':this[_0x191f21(0xe6)],'project_dir':process[_0x191f21(0x104)](),..._0x4323e7});}async[a0_0x58c91a(0x107)](){return this['call']('get_all_status',{});}async[a0_0x58c91a(0xf6)](_0x38e2f2,_0x187d6b){const _0x1a3d53=a0_0x58c91a;return this['call'](_0x1a3d53(0xf6),{'message':_0x38e2f2,'filter_server':_0x187d6b?.[_0x1a3d53(0xb5)],'filter_status':_0x187d6b?.[_0x1a3d53(0x9d)]});}async[a0_0x58c91a(0x96)](){const _0x39cc8f=a0_0x58c91a;let _0x4a4632=encodeURIComponent(this[_0x39cc8f(0xaa)]),_0xb7f11b=this['url']+_0x39cc8f(0xbf)+_0x4a4632,_0x3e0628=this['reconnectDelay'];while(this[_0x39cc8f(0xc7)]){try{this['sseAbort']=new AbortController();let _0x4df032={'Accept':_0x39cc8f(0xd6)};if(this['token'])_0x4df032[_0x39cc8f(0x92)]=_0x39cc8f(0x102)+this[_0x39cc8f(0xdc)];let _0x13041c=await fetch(_0xb7f11b,{'headers':_0x4df032,'signal':this[_0x39cc8f(0x10e)][_0x39cc8f(0x10d)]});if(!_0x13041c['ok']||!_0x13041c['body']){this['log'](_0x39cc8f(0xde)+_0x13041c[_0x39cc8f(0x9d)]),await this[_0x39cc8f(0xa4)](_0x3e0628),_0x3e0628=Math[_0x39cc8f(0xb0)](_0x3e0628*1.5,0xea60);continue;}_0x3e0628=this[_0x39cc8f(0xd7)];let _0x39a612=_0x13041c['body'][_0x39cc8f(0xae)](),_0x4d5056=new TextDecoder(),_0x2bfd64='';while(this[_0x39cc8f(0xc7)]){let {done:_0x2de728,value:_0x23f69d}=await _0x39a612[_0x39cc8f(0xe0)]();if(_0x2de728)break;_0x2bfd64+=_0x4d5056['decode'](_0x23f69d,{'stream':!0x0});let _0x2c3f0e=_0x2bfd64[_0x39cc8f(0x109)]('\x0a');_0x2bfd64=_0x2c3f0e['pop']()||'';for(let _0xe05c69 of _0x2c3f0e){if(!_0xe05c69[_0x39cc8f(0xc4)](_0x39cc8f(0xa2)))continue;try{let _0x20e4fa=JSON[_0x39cc8f(0xda)](_0xe05c69[_0x39cc8f(0xaf)](0x6));if(_0x20e4fa[_0x39cc8f(0xc2)]===_0x39cc8f(0xff)){this[_0x39cc8f(0xa0)](_0x39cc8f(0xbb)),this[_0x39cc8f(0xe8)](_0x39cc8f(0xff));continue;}if(_0x20e4fa[_0x39cc8f(0xc2)]===_0x39cc8f(0x10c)||_0x20e4fa['type']==='new_message'||_0x20e4fa[_0x39cc8f(0xc2)]===_0x39cc8f(0xf6))await this[_0x39cc8f(0x106)]();}catch{}}}}catch(_0x3944b2){if(_0x3944b2[_0x39cc8f(0xb1)]===_0x39cc8f(0xd0))break;this[_0x39cc8f(0xe8)](_0x39cc8f(0xf8),_0x3944b2),this['log']('SSE\x20error:\x20'+_0x3944b2['message']);}if(this[_0x39cc8f(0xc7)])this['emit'](_0x39cc8f(0xeb)),this[_0x39cc8f(0xa0)](_0x39cc8f(0xcb)+_0x3e0628/0x3e8+_0x39cc8f(0xa8)),await this['sleep'](_0x3e0628),_0x3e0628=Math[_0x39cc8f(0xb0)](_0x3e0628*1.5,0xea60);}}async['processInbox'](){const _0x1dd30b=a0_0x58c91a;try{let _0x5e1011=(await this['call']('get_inbox',{'alias':this[_0x1dd30b(0xaa)],'limit':0xa}))?.[_0x1dd30b(0xdb)]||[];for(let _0x542867 of _0x5e1011)await this[_0x1dd30b(0xdd)](_0x1dd30b(0x97),{'alias':this[_0x1dd30b(0xaa)],'message_id':_0x542867['id']}),this[_0x1dd30b(0xa0)]('←\x20'+_0x542867[_0x1dd30b(0xf5)]+':\x20'+_0x542867[_0x1dd30b(0xd1)]['slice'](0x0,0x3c)),this[_0x1dd30b(0xe8)](_0x1dd30b(0xe4),_0x542867),this[_0x1dd30b(0xe8)](_0x1dd30b(0x101),_0x542867);}catch(_0x3fd90b){this[_0x1dd30b(0xa0)](_0x1dd30b(0xa5)+_0x3fd90b[_0x1dd30b(0x101)]);}}[a0_0x58c91a(0xa4)](_0x3e1615){return new Promise(_0x2d8b6f=>setTimeout(_0x2d8b6f,_0x3e1615));}}var F=$;export{F as default,$ as CommHub};
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[];