@sleep2agi/agent-network 2.3.0-preview.72 → 2.3.0-preview.74
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/cli.js +2 -2
- package/dist/src/client.js +1 -1
- package/dist/src/daemon-capability-display.d.ts +53 -1
- package/dist/src/daemon-capability-display.js +19 -7
- package/dist/src/daemon-runtime-path-preflight.d.ts +22 -0
- package/dist/src/node-server.js +7 -7
- package/dist/src/opencode-agent-node-pair.d.ts +6 -6
- package/package.json +1 -1
package/dist/src/client.js
CHANGED
|
@@ -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_0x578d01=a0_0x2995;(function(_0x43414a,_0xb7c6b7){const _0x3eeb2d=a0_0x2995,_0x582d8f=_0x43414a();while(!![]){try{const _0xaa9d=parseInt(_0x3eeb2d(0x15d))/0x1*(-parseInt(_0x3eeb2d(0x195))/0x2)+-parseInt(_0x3eeb2d(0x165))/0x3+parseInt(_0x3eeb2d(0x15f))/0x4+parseInt(_0x3eeb2d(0x160))/0x5*(-parseInt(_0x3eeb2d(0x175))/0x6)+-parseInt(_0x3eeb2d(0x169))/0x7*(parseInt(_0x3eeb2d(0x159))/0x8)+-parseInt(_0x3eeb2d(0x1c6))/0x9+parseInt(_0x3eeb2d(0x1cc))/0xa;if(_0xaa9d===_0xb7c6b7)break;else _0x582d8f['push'](_0x582d8f['shift']());}catch(_0x270cc2){_0x582d8f['push'](_0x582d8f['shift']());}}}(a0_0x1291,0xa80ac));import{EventEmitter as a0_0x4ca04f}from'events';import{hostname as a0_0x77ace9}from'os';var K=/(?:atok|ntok|utok|ghp|github_pat)_[A-Za-z0-9_-]+|Bearer\s+\S+/gi,L=(_0x47722a,_0x4cf4f3)=>(_0x47722a??_0x4cf4f3)[a0_0x578d01(0x1cf)](/[\r\n\x00-\x1f\x7f]/g,'\x20')['slice'](0x0,0xf0);function a0_0x1291(){const _0x6be679=['reply','/mcp','connectSSE','new_message','toString','type','send_message','idle','text/event-stream','\x20from=','7571709eUiRrg','connected','SSE\x20reconnecting\x20in\x20','split','task','reconnectDelay','39464240hOMhTM','read','s...','replace','data:\x20','from_session','min','application/json,\x20text/event-stream','SSE\x20failed:\x20','send_rejected','sdk','parentTaskId','status','message','decode','fromAlias','abort','emit','normal','networkId','\x20task_id=','8ZwcCNw','[commhub:task]\x20','application/json','autoConnect','1DcHHtj','alias','26828SkbzDV','3518115oDPPax','new_task','log','send_failed','task_id','2734686VgcfET','to_alias','\x20transport=','error_code','2908892UUwNqi','lifecycle_tracking','processInbox','send_task','sending','\x20duration_ms=','name','agent','task.started','slice','stringify','Authorization','6Gcynyp','delivered','task.replied','disconnect','catch','<pending>','url','now','task.expired','task.send.failed','[REDACTED]','\x20lifecycle=','server','content','CommHub\x20rejected\x20task','parent_task_id','send_reply','pop','message_id','missing_task_id','\x20parent_task_id=','network_id','call','/events/','<unknown>','<missing>','\x20network_id=','text','AbortError','task.send.start','token','completed','785578vBpncd','\x20to=','CommHub\x20response\x20omitted\x20task_id','task.send.delivered','error','ack_inbox','lifecycleTracking','unknown\x20error','task.ack','from_alias','sseAbort','registered','running',']\x20[commhub:','json','resumeId','sdk-','heartbeatTimer','string','connect','get_inbox','cwd','send','tools/call','heartbeatInterval','parse','2.0','Bearer\x20','broadcast','report_status','disconnected','startsWith','get_all_status','body','\x20error=','failed','heartbeat\x20failed:\x20','duration_ms','messages'];a0_0x1291=function(){return _0x6be679;};return a0_0x1291();}function N(_0x32f736){const _0x2df201=a0_0x578d01;return(_0x32f736 instanceof Error?_0x32f736[_0x2df201(0x1d9)]:String(_0x32f736??_0x2df201(0x19c)))[_0x2df201(0x1cf)](K,_0x2df201(0x17f))['replace'](/[\r\n\x00-\x1f\x7f]/g,'\x20')[_0x2df201(0x172)](0x0,0xf0);}function O(_0x2909a1,_0x35e9bd=process.env.ANET_TASK_TRACE_FORMAT===a0_0x578d01(0x1a3)){const _0x150f40=a0_0x578d01;if(_0x35e9bd)return JSON[_0x150f40(0x173)](_0x2909a1);let _0x113362=L(_0x2909a1[_0x150f40(0x184)],_0x150f40(0x18e)),_0x10c1c9=L(_0x2909a1[_0x150f40(0x164)],_0x150f40(0x17a)),_0x2481af=_0x2909a1[_0x150f40(0x168)]?_0x150f40(0x1b7)+_0x2909a1[_0x150f40(0x168)]+':'+(_0x2909a1['error_message']??''):'';return _0x150f40(0x15a)+_0x2909a1[_0x150f40(0x1d8)]+_0x150f40(0x1c5)+L(_0x2909a1[_0x150f40(0x19e)],_0x150f40(0x18d))+_0x150f40(0x196)+L(_0x2909a1[_0x150f40(0x166)],_0x150f40(0x18d))+_0x150f40(0x1e0)+_0x10c1c9+_0x150f40(0x189)+_0x113362+_0x150f40(0x18f)+L(_0x2909a1[_0x150f40(0x18a)],'<unknown>')+_0x150f40(0x167)+_0x2909a1['transport']+_0x150f40(0x16e)+_0x2909a1[_0x150f40(0x1ba)]+_0x150f40(0x180)+_0x2909a1[_0x150f40(0x16a)]+_0x2481af;}function U(_0x4be2a4){const _0x590685=a0_0x578d01;return{'event':{'sending':_0x590685(0x192),'delivered':_0x590685(0x198),'failed':_0x590685(0x17e),'acked':_0x590685(0x19d),'started':_0x590685(0x171),'replied':_0x590685(0x177),'expired':_0x590685(0x17d)}[_0x4be2a4[_0x590685(0x1d8)]],..._0x4be2a4};}function j(_0x4e5e8b){const _0x11f83c=a0_0x578d01;let _0x57538e=_0x4e5e8b?.['task_id']||_0x4e5e8b?.[_0x11f83c(0x187)]||_0x4e5e8b?.['id'];if(_0x57538e)return String(_0x57538e);let _0x5e135c=_0x4e5e8b?.[_0x11f83c(0x182)]?.[0x0]?.[_0x11f83c(0x190)];if(typeof _0x5e135c!==_0x11f83c(0x1a7))return null;try{let _0x10e102=JSON[_0x11f83c(0x1ae)](_0x5e135c);return _0x10e102?.['task_id']||_0x10e102?.[_0x11f83c(0x187)]||_0x10e102?.['id']||null;}catch{return null;}}async function X(_0x114989,_0x6b1ef6){const _0x34caac=a0_0x578d01;let _0x4b3f82=_0x6b1ef6['now']??Date[_0x34caac(0x17c)],_0x178b6=_0x4b3f82(),_0xcf4727=(_0xa14e56,_0x315579,_0x514f24,_0x1f4945)=>{const _0x5761f5=_0x34caac;_0x6b1ef6['log'](O(U({'from_alias':_0x114989[_0x5761f5(0x1db)],'to_alias':_0x114989['toAlias'],'task_id':_0x315579,'parent_task_id':_0x114989['parentTaskId'],'network_id':_0x114989[_0x5761f5(0x1df)],'transport':_0x114989['transport'],'status':_0xa14e56,'duration_ms':_0x4b3f82()-_0x178b6,'lifecycle_tracking':_0x114989[_0x5761f5(0x19b)],..._0x514f24!==void 0x0?{'error_code':_0x1f4945||_0x5761f5(0x163),'error_message':N(_0x514f24)}:{}})));};_0xcf4727(_0x34caac(0x16d),null);try{let _0x1a5671=await _0x6b1ef6[_0x34caac(0x1ab)](),_0xae4e5e=j(_0x1a5671);if(_0xae4e5e)_0xcf4727(_0x34caac(0x176),_0xae4e5e);else{if(_0x1a5671?.['ok']===!0x1||_0x1a5671?.[_0x34caac(0x199)])_0xcf4727(_0x34caac(0x1b8),_0xae4e5e,_0x1a5671?.['error']||_0x34caac(0x183),_0x34caac(0x1d5));else _0xcf4727(_0x34caac(0x1b8),null,_0x34caac(0x197),_0x34caac(0x188));}return _0x1a5671;}catch(_0x410f93){throw _0xcf4727(_0x34caac(0x1b8),null,_0x410f93,_0x34caac(0x163)),_0x410f93;}}async function Y(_0x2025f6,_0x42b8d4){const _0x505325=a0_0x578d01;return X({'fromAlias':_0x2025f6['fromAlias'],'toAlias':_0x2025f6[_0x505325(0x15e)],'parentTaskId':_0x2025f6[_0x505325(0x1d7)]||null,'networkId':_0x2025f6[_0x505325(0x1df)]||null,'transport':'mcp_http','lifecycleTracking':'not_tracked'},_0x42b8d4);}function a0_0x2995(_0xc70572,_0x50ad13){_0xc70572=_0xc70572-0x159;const _0x129162=a0_0x1291();let _0x2995a1=_0x129162[_0xc70572];return _0x2995a1;}class $ extends a0_0x4ca04f{[a0_0x578d01(0x17b)];[a0_0x578d01(0x15e)];[a0_0x578d01(0x193)];['agent'];[a0_0x578d01(0x1a4)];['heartbeatInterval'];[a0_0x578d01(0x1cb)];[a0_0x578d01(0x1a6)];[a0_0x578d01(0x19f)];[a0_0x578d01(0x1a1)]=!0x1;constructor(_0x188987){const _0x5a7379=a0_0x578d01;super();if(this[_0x5a7379(0x17b)]=_0x188987[_0x5a7379(0x17b)]['replace'](/\/$/,''),this['alias']=_0x188987[_0x5a7379(0x15e)],this[_0x5a7379(0x193)]=_0x188987['token'],this[_0x5a7379(0x170)]=_0x188987[_0x5a7379(0x170)]||_0x5a7379(0x1d6),this[_0x5a7379(0x1a4)]=_0x5a7379(0x1a5)+_0x188987[_0x5a7379(0x15e)]+'-'+Date[_0x5a7379(0x17c)]()[_0x5a7379(0x1c0)](0x24),this[_0x5a7379(0x1ad)]=_0x188987[_0x5a7379(0x1ad)]??0x2bf20,this[_0x5a7379(0x1cb)]=_0x188987[_0x5a7379(0x1cb)]??0xbb8,_0x188987[_0x5a7379(0x15c)]!==!0x1)this[_0x5a7379(0x1a8)]();}[a0_0x578d01(0x162)](_0x184908){const _0x38a9b2=a0_0x578d01;console['log']('['+new Date()['toTimeString']()[_0x38a9b2(0x172)](0x0,0x8)+_0x38a9b2(0x1a2)+this[_0x38a9b2(0x15e)]+']\x20'+_0x184908);}async['call'](_0x589222,_0x1ebaf2){const _0x2e94ae=a0_0x578d01;let _0x21eb65={'Content-Type':_0x2e94ae(0x15b),'Accept':_0x2e94ae(0x1d3)};if(this[_0x2e94ae(0x193)])_0x21eb65['Authorization']=_0x2e94ae(0x1b0)+this[_0x2e94ae(0x193)];let _0x3e9a37=await(await fetch(this['url']+_0x2e94ae(0x1bd),{'method':'POST','headers':_0x21eb65,'body':JSON[_0x2e94ae(0x173)]({'jsonrpc':_0x2e94ae(0x1af),'id':Date[_0x2e94ae(0x17c)](),'method':_0x2e94ae(0x1ac),'params':{'name':_0x589222,'arguments':_0x1ebaf2}})}))[_0x2e94ae(0x190)](),_0x1fadf1=_0x3e9a37['match'](/data: (.+)/),_0xd155b3=_0x1fadf1?JSON[_0x2e94ae(0x1ae)](_0x1fadf1[0x1]):JSON[_0x2e94ae(0x1ae)](_0x3e9a37),_0x4491f3=_0xd155b3?.['result']?.[_0x2e94ae(0x182)]?.[0x0]?.['text'];return _0x4491f3?JSON[_0x2e94ae(0x1ae)](_0x4491f3):_0xd155b3;}async[a0_0x578d01(0x1a8)](){const _0x158a6c=a0_0x578d01;if(this[_0x158a6c(0x1a1)])return;this['running']=!0x0,await this['status'](_0x158a6c(0x1c3)),this[_0x158a6c(0x162)](_0x158a6c(0x1a0)),this[_0x158a6c(0x1a6)]=setInterval(()=>{const _0x32bf66=_0x158a6c;this['status'](_0x32bf66(0x1c3))['catch'](_0x4633ad=>this[_0x32bf66(0x162)](_0x32bf66(0x1b9)+_0x4633ad['message']));},this[_0x158a6c(0x1ad)]),this[_0x158a6c(0x1be)]();}async[a0_0x578d01(0x178)](){const _0x21a1d6=a0_0x578d01;if(this[_0x21a1d6(0x1a1)]=!0x1,this[_0x21a1d6(0x19f)]?.[_0x21a1d6(0x1dc)](),this[_0x21a1d6(0x1a6)])clearInterval(this[_0x21a1d6(0x1a6)]);await this[_0x21a1d6(0x1d8)]('offline')[_0x21a1d6(0x179)](()=>{}),this[_0x21a1d6(0x162)]('disconnected');}async[a0_0x578d01(0x1ab)](_0x391fad,_0x56fb72,_0x1e7b0d=a0_0x578d01(0x1de)){const _0x5d2229=a0_0x578d01;return Y({'alias':_0x391fad,'fromAlias':this['alias']},{'log':_0x3123cf=>console[_0x5d2229(0x162)](_0x3123cf),'send':()=>this[_0x5d2229(0x18b)](_0x5d2229(0x16c),{'alias':_0x391fad,'task':_0x56fb72,'priority':_0x1e7b0d,'from_session':this[_0x5d2229(0x15e)]})});}async[a0_0x578d01(0x1d9)](_0x1f01b5,_0x15ef83){const _0xc2f2fb=a0_0x578d01;return this[_0xc2f2fb(0x18b)](_0xc2f2fb(0x1c2),{'alias':_0x1f01b5,'message':_0x15ef83,'from_session':this[_0xc2f2fb(0x15e)]});}async[a0_0x578d01(0x1bc)](_0x124622,_0x30f967,_0x1c91bb=a0_0x578d01(0x194)){const _0x233ee7=a0_0x578d01;return this[_0x233ee7(0x18b)](_0x233ee7(0x185),{'in_reply_to':_0x124622,'text':_0x30f967,'status':_0x1c91bb});}async[a0_0x578d01(0x1d8)](_0x442b00,_0x533d87){const _0x460b07=a0_0x578d01;return this[_0x460b07(0x18b)](_0x460b07(0x1b2),{'resume_id':this['resumeId'],'alias':this[_0x460b07(0x15e)],'status':_0x442b00,'server':a0_0x77ace9(),'hostname':a0_0x77ace9(),'agent':this[_0x460b07(0x170)],'project_dir':process[_0x460b07(0x1aa)](),..._0x533d87});}async['getAllStatus'](){const _0x4621b7=a0_0x578d01;return this[_0x4621b7(0x18b)](_0x4621b7(0x1b5),{});}async[a0_0x578d01(0x1b1)](_0x3bcbf0,_0xd235ce){const _0x5548f7=a0_0x578d01;return this[_0x5548f7(0x18b)]('broadcast',{'message':_0x3bcbf0,'filter_server':_0xd235ce?.[_0x5548f7(0x181)],'filter_status':_0xd235ce?.[_0x5548f7(0x1d8)]});}async[a0_0x578d01(0x1be)](){const _0x4408a5=a0_0x578d01;let _0x2eda02=encodeURIComponent(this['alias']),_0x579e19=this[_0x4408a5(0x17b)]+_0x4408a5(0x18c)+_0x2eda02,_0x15cf70=this[_0x4408a5(0x1cb)];while(this[_0x4408a5(0x1a1)]){try{this[_0x4408a5(0x19f)]=new AbortController();let _0x218599={'Accept':_0x4408a5(0x1c4)};if(this[_0x4408a5(0x193)])_0x218599[_0x4408a5(0x174)]=_0x4408a5(0x1b0)+this['token'];let _0x245cfe=await fetch(_0x579e19,{'headers':_0x218599,'signal':this[_0x4408a5(0x19f)]['signal']});if(!_0x245cfe['ok']||!_0x245cfe[_0x4408a5(0x1b6)]){this['log'](_0x4408a5(0x1d4)+_0x245cfe[_0x4408a5(0x1d8)]),await this['sleep'](_0x15cf70),_0x15cf70=Math[_0x4408a5(0x1d2)](_0x15cf70*1.5,0xea60);continue;}_0x15cf70=this['reconnectDelay'];let _0x45aa9f=_0x245cfe[_0x4408a5(0x1b6)]['getReader'](),_0x3c9276=new TextDecoder(),_0x4f393f='';while(this['running']){let {done:_0x264062,value:_0x21d2db}=await _0x45aa9f[_0x4408a5(0x1cd)]();if(_0x264062)break;_0x4f393f+=_0x3c9276[_0x4408a5(0x1da)](_0x21d2db,{'stream':!0x0});let _0x2c611a=_0x4f393f[_0x4408a5(0x1c9)]('\x0a');_0x4f393f=_0x2c611a[_0x4408a5(0x186)]()||'';for(let _0x22cd2d of _0x2c611a){if(!_0x22cd2d[_0x4408a5(0x1b4)](_0x4408a5(0x1d0)))continue;try{let _0x1e6b4a=JSON[_0x4408a5(0x1ae)](_0x22cd2d['slice'](0x6));if(_0x1e6b4a[_0x4408a5(0x1c1)]===_0x4408a5(0x1c7)){this[_0x4408a5(0x162)]('SSE\x20connected'),this[_0x4408a5(0x1dd)]('connected');continue;}if(_0x1e6b4a[_0x4408a5(0x1c1)]===_0x4408a5(0x161)||_0x1e6b4a['type']===_0x4408a5(0x1bf)||_0x1e6b4a[_0x4408a5(0x1c1)]===_0x4408a5(0x1b1))await this[_0x4408a5(0x16b)]();}catch{}}}}catch(_0x39c530){if(_0x39c530[_0x4408a5(0x16f)]===_0x4408a5(0x191))break;this['emit']('error',_0x39c530),this[_0x4408a5(0x162)]('SSE\x20error:\x20'+_0x39c530[_0x4408a5(0x1d9)]);}if(this[_0x4408a5(0x1a1)])this['emit'](_0x4408a5(0x1b3)),this[_0x4408a5(0x162)](_0x4408a5(0x1c8)+_0x15cf70/0x3e8+_0x4408a5(0x1ce)),await this['sleep'](_0x15cf70),_0x15cf70=Math[_0x4408a5(0x1d2)](_0x15cf70*1.5,0xea60);}}async['processInbox'](){const _0x14ece0=a0_0x578d01;try{let _0x36c255=(await this[_0x14ece0(0x18b)](_0x14ece0(0x1a9),{'alias':this[_0x14ece0(0x15e)],'limit':0xa}))?.[_0x14ece0(0x1bb)]||[];for(let _0x14fb1a of _0x36c255)await this[_0x14ece0(0x18b)](_0x14ece0(0x19a),{'alias':this['alias'],'message_id':_0x14fb1a['id']}),this['log']('←\x20'+_0x14fb1a[_0x14ece0(0x1d1)]+':\x20'+_0x14fb1a[_0x14ece0(0x182)]['slice'](0x0,0x3c)),this[_0x14ece0(0x1dd)](_0x14ece0(0x1ca),_0x14fb1a),this[_0x14ece0(0x1dd)](_0x14ece0(0x1d9),_0x14fb1a);}catch(_0x3fc259){this[_0x14ece0(0x162)]('inbox\x20error:\x20'+_0x3fc259[_0x14ece0(0x1d9)]);}}['sleep'](_0x251902){return new Promise(_0x5cd14d=>setTimeout(_0x5cd14d,_0x251902));}}var F=$;export{F as default,$ as CommHub};
|
|
@@ -10,7 +10,7 @@ export type DaemonCapabilityRow = {
|
|
|
10
10
|
readonly create_capability_observed_ms_ago?: number;
|
|
11
11
|
};
|
|
12
12
|
export type CapabilityView =
|
|
13
|
-
/** hub 上根本没有这一格 —— 旧 daemon(preview.
|
|
13
|
+
/** hub 上根本没有这一格 —— 旧 daemon(agent-node ≤ 2.5.0-preview.54)不上报。 */
|
|
14
14
|
{
|
|
15
15
|
readonly kind: "never-reported";
|
|
16
16
|
readonly line: string;
|
|
@@ -56,3 +56,55 @@ 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;
|
|
78
|
+
/**
|
|
79
|
+
* `create_node` 被拒时 hub 返回的形状(`server/src/tools.ts` 的
|
|
80
|
+
* `daemon_cannot_create_nodes` 分支)。
|
|
81
|
+
*
|
|
82
|
+
* 🔴 它和 `DaemonCapabilityRow` **不是同一个形状**,所以单独一个入口 ——
|
|
83
|
+
* 在调用方做一次字段映射,等于开出**第二个理解这些字段含义的地方**。
|
|
84
|
+
*/
|
|
85
|
+
export type CreateRejectionPayload = {
|
|
86
|
+
readonly error?: string;
|
|
87
|
+
readonly blocked_reason?: string;
|
|
88
|
+
/** 🔴 已经是**到现在为止**的绝对年龄(hub 在拒绝时把心跳那一段补上了)。
|
|
89
|
+
* null = 补不出来 —— 见 `capability_age`。 */
|
|
90
|
+
readonly capability_observed_ms_ago?: number | null;
|
|
91
|
+
readonly capability_age?: string;
|
|
92
|
+
};
|
|
93
|
+
/**
|
|
94
|
+
* 把拒绝载荷渲染成人能读的一段。不是这类拒绝就返回 null,调用方走它原来的通用文案。
|
|
95
|
+
*
|
|
96
|
+
* 🔴 **这里没有第二份年龄公式。** `describeCapability` 里那段
|
|
97
|
+
* `(now − last_seen_at) + observed` 是给「列 daemon」那条路用的;
|
|
98
|
+
* 拒绝这条路上,**hub 已经算好了绝对年龄**(它手里有心跳时间)。
|
|
99
|
+
* 所以这里只做格式化,复用同一个 `formatAge`。
|
|
100
|
+
* 两份年龄算法一旦并排存在,出现分歧时不会有任何东西红。
|
|
101
|
+
*
|
|
102
|
+
* 🔴 **没有新增第六种 kind**,这是刻意的:
|
|
103
|
+
* `kind` 是**呈现分桶**(禁不禁用、什么色调),不是完整语义。
|
|
104
|
+
* 「daemon 没报年龄」和「hub 没有它的心跳时间」在 UI 上要的处理**完全一样**
|
|
105
|
+
* (都是 blocked、都给不出年龄),差别在**说哪句话** —— 那放在 `line` 里。
|
|
106
|
+
* 反过来,给共享联合加第六个值,会让所有既有消费者的映射多一个
|
|
107
|
+
* 它们没写过的分支,而**落进 default 的那一支通常是"看起来最正常"的那个**。
|
|
108
|
+
* 区分没有丢:两种 unknown 的 `line` 逐字不同,并有测试钉住。
|
|
109
|
+
*/
|
|
110
|
+
export declare function describeCreateRejection(payload: CreateRejectionPayload): CapabilityView | null;
|
|
@@ -1,9 +1,21 @@
|
|
|
1
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
|
|
3
|
-
`+" (agent-node 版本早于 preview.55
|
|
4
|
-
`+" ⚠ 不知道是什么时候测的 —— 该版本开机只算一次。重启它,或升级。"};return{kind:"ready",ageMs:
|
|
5
|
-
(它带真实机器路径,按设计不上报)`,
|
|
6
|
-
`);if(
|
|
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(agent-node 2.5.0-preview.40 及更早)只报这一个笼统原因。升级该机器的 agent-node 并重启 daemon 后才能拿到具体类别",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 k=Math.floor(j/60);if(k<60)return`${k}m 前`;let u=Math.floor(k/60);if(u<24)return`${u}h 前`;return`${Math.floor(u/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 Q(c,j){if(typeof c.can_create_nodes!=="boolean")return{kind:"never-reported",line:`创建能力:未知 —— 这台 daemon 没报过这一格。
|
|
3
|
+
`+" (agent-node 版本早于 preview.55;升级后必须重启 daemon 才生效)"};let k=P(c.last_seen_at),u=c.create_capability_observed_ms_ago,q=k!==void 0&&typeof u==="number"&&Number.isFinite(u)?Math.max(0,j-k)+u:void 0;if(c.can_create_nodes){if(q===void 0)return{kind:"ready-age-unknown",line:`创建能力:可用
|
|
4
|
+
`+" ⚠ 不知道是什么时候测的 —— 该版本开机只算一次。重启它,或升级。"};return{kind:"ready",ageMs:q,line:`创建能力:可用(${G(q)}测)`}}let C=c.create_nodes_blocked_reason||"anet_bin_unknown",z=J[C]??{explain:`未知原因代码 ${C} —— 本 CLI 可能比那台机器的 anet 旧,升级本机 anet 或看它的 daemon 日志`,command:null},K=`完整原文只在那台机器的 daemon 日志里。
|
|
5
|
+
(它带真实机器路径,按设计不上报)`,H=[` 原因:${z.explain}`,z.command?` 修法(可整行粘贴):${z.command}`:" 修法:没有单条命令能修,见上。",` ${K}`].join(`
|
|
6
|
+
`);if(q===void 0)return{kind:"blocked-age-unknown",line:`创建能力:**不可用**(${C})
|
|
7
7
|
⚠ 不知道是什么时候测的 —— 该 daemon 版本开机只算一次,之后不再重测。
|
|
8
|
-
${
|
|
9
|
-
${
|
|
8
|
+
${H}`,fix:z};return{kind:"blocked",ageMs:q,line:`创建能力:**不可用**(${C},${G(q)}测)
|
|
9
|
+
${H}`,fix:z}}function T(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
|
+
(本地清单不需要网络,上面那些信息仍然有效)`}}function U(c){if(c?.error!=="daemon_cannot_create_nodes")return null;let j=c.blocked_reason||"anet_bin_unknown",k=J[j]??{explain:`未知原因代码 ${j} —— 本端可能比那台机器的 anet 旧,升级本端或看它的 daemon 日志`,command:null},u="完整原文(含真实路径)只在那台机器的 daemon 日志里 —— 它带机器路径,按设计不上报。",D=[`原因:${k.explain}`,k.command?`修法(可整行粘贴):${k.command}`:"修法:没有单条命令能修,见上。",u].join(`
|
|
19
|
+
`),q=c.capability_observed_ms_ago;if(c.capability_age==="known"&&typeof q==="number"&&Number.isFinite(q)&&q>=0)return{kind:"blocked",ageMs:q,line:`这台 daemon 报告它现在**建不了节点**(${j},${G(q)}测)
|
|
20
|
+
${D}`,fix:k};let z=c.capability_age==="unknown_no_heartbeat_time"?"**它报了这个判断,但 hub 这边没有它的心跳时间**,所以算不出是多久以前的 —— 先看这台 daemon 是否还在线,别急着升级它":"**不知道是多久以前测的** —— 该 daemon 版本在开机时算一次就不再重测,这个结论可能早就过期了。重启或升级它";return{kind:"blocked-age-unknown",line:`这台 daemon 报告它现在**建不了节点**(${j});${z}
|
|
21
|
+
${D}`,fix:k}}export{G as formatAge,T as describeFetchFailure,U as describeCreateRejection,Q 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[];
|