@kmlckj/licos-bridge 0.0.2 → 0.0.4

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/README.md CHANGED
@@ -22,8 +22,6 @@ licos-bridge service install
22
22
  licos-bridge service uninstall
23
23
  ```
24
24
 
25
- 为了兼容已有复制命令,包里也提供 `coze-bridge` bin 别名。
26
-
27
25
  ## 工作目录
28
26
 
29
27
  默认使用:
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- (function(G,H){const W=h,I=G();while(!![]){try{const J=parseInt(W(0xfd))/0x1*(-parseInt(W(0xf1))/0x2)+parseInt(W(0xf7))/0x3*(-parseInt(W(0x100))/0x4)+-parseInt(W(0xf3))/0x5+parseInt(W(0xed))/0x6+-parseInt(W(0xf0))/0x7*(-parseInt(W(0xf4))/0x8)+-parseInt(W(0xfe))/0x9*(parseInt(W(0xff))/0xa)+-parseInt(W(0xf5))/0xb*(-parseInt(W(0xfb))/0xc);if(J===H)break;else I['push'](I['shift']());}catch(K){I['push'](I['shift']());}}}(b,0xa6def));import{pathToFileURL as j}from'node:url';import{parseArgs as k,printHelp as q}from'./lib/cli.js';import{ensureDaemon as u,ipcRequest as v,readDaemonInfo as w,startDaemon as x}from'./lib/ipc.js';import{buildSendPayload as y,packageVersion as z,printLogs as A,purgeBridge as B,runUpdate as C,statusSnapshot as D}from'./lib/local-commands.js';function b(){const Z=['8462003eLqktQ','stop','28686YeiUXG','message','daemon','mode','60gcKNfV','reload','1QnFZFO','45LzQQrp','2299320KLGYNe','196BLDCAW','error','licos-bridge\x20daemon\x20stopped.','deprecated','/stop','1086858zhXRkY','/connect','stringify','329YNWHoH','1570598UkDdTL','log','5224710OvjZhj','17776CFpHgd'];b=function(){return Z;};return b();}function h(a,c){a=a-0xec;const d=b();let e=d[a];return e;}import{installService as E,uninstallService as F}from'./lib/service.js';import.meta.url===j(process['argv'][0x1])['href']&&async function(G){const X=h,H=k(G);if(H[X(0x103)]&&console[X(0x101)]('Deprecated:\x20'+H[X(0x103)]),'help'!==H[X(0xfa)]){if('version'!==H['mode']){if(X(0xf9)===H[X(0xfa)]){const {startDaemonServer:I}=await import('./lib/daemon.js');return void await I();}if('status'===H['mode']){const J=await D();return void console['log'](JSON['stringify'](J,null,0x2));}if(X(0xf6)===H[X(0xfa)]){const K=await w();return K?(await v(X(0xec),{},K),void console['log'](X(0x102))):void console[X(0xf2)]('licos-bridge\x20daemon\x20is\x20not\x20running.');}if('refresh'===H['mode']){const L=await u(),M=await v('/refresh',{},L);return void console['log'](JSON[X(0xef)](M,null,0x2));}if(X(0xfc)===H['mode']){const N=await u(),O=await v('/reload',{'agentId':H['agentId']},N);return void console['log'](JSON['stringify'](O,null,0x2));}if('log'!==H['mode']){if('update'!==H['mode']){if('purge'===H['mode'])return await B(),void console['log']('licos-bridge\x20bridge\x20data\x20purged.');if('service-install'!==H['mode']){if('service-uninstall'!==H[X(0xfa)]){if('pair'===H['mode']){const P=await u(),Q=await v('/pair',H,P);return void console['log'](JSON['stringify'](Q,null,0x2));}if('connect'===H[X(0xfa)]){const R=await u(),S=await v(X(0xee),H,R);return void console['log'](JSON['stringify'](S,null,0x2));}if('send'===H[X(0xfa)]){const T=await u(),U=await y(H),V=await v('/send',U,T);return void console['log'](JSON[X(0xef)](V,null,0x2));}if('spawn-daemon'!==H['mode'])throw new Error('unsupported\x20command\x20mode:\x20'+H['mode']);await x();}else await F();}else await E();}else await C();}else await A(H);}else console['log'](await z());}else q();}(process['argv']['slice'](0x2))['catch'](G=>{const Y=h;console[Y(0x101)](G instanceof Error?G[Y(0xf8)]:String(G)),process['exitCode']=0x1;});
2
+ function h(a,c){a=a-0x1bd;const d=b();let e=d[a];return e;}const W=h;(function(E,F){const U=h,G=E();while(!![]){try{const H=-parseInt(U(0x1ce))/0x1*(parseInt(U(0x1d3))/0x2)+parseInt(U(0x1c7))/0x3*(-parseInt(U(0x1c3))/0x4)+-parseInt(U(0x1d5))/0x5+-parseInt(U(0x1bf))/0x6+parseInt(U(0x1c9))/0x7+parseInt(U(0x1d7))/0x8+parseInt(U(0x1cb))/0x9;if(H===F)break;else G['push'](G['shift']());}catch(I){G['push'](G['shift']());}}}(b,0x559b9));import{parseArgs as j,printHelp as k}from'./lib/cli.js';import{ensureDaemon as p,ipcRequest as q,readDaemonInfo as u,startDaemon as v}from'./lib/ipc.js';function b(){const Y=['reload','/pair','exitCode','daemon','4ykiwXg','argv','825575fwuVOd','update','2250488ClaySx','mode','/refresh','2949234YwALiE','log','refresh','help','4xALozX','stringify','slice','licos-bridge\x20daemon\x20stopped.','1657263UdNwTs','spawn-daemon','2236801sSXVHZ','purge','14735196rfSJlD','/stop','message','339187nvjmWp'];b=function(){return Y;};return b();}import{buildSendPayload as w,packageVersion as x,printLogs as y,purgeBridge as z,runUpdate as A,statusSnapshot as B}from'./lib/local-commands.js';import{installService as C,uninstallService as D}from'./lib/service.js';(async function(E){const V=h,F=j(E);if(F['deprecated']&&console['error']('Deprecated:\x20'+F['deprecated']),V(0x1c2)!==F['mode']){if('version'!==F['mode']){if(V(0x1d2)===F['mode']){const {startDaemonServer:G}=await import('./lib/daemon.js');return void await G();}if('status'===F[V(0x1bd)]){const H=await B();return void console['log'](JSON['stringify'](H,null,0x2));}if('stop'===F['mode']){const I=await u();return I?(await q(V(0x1cc),{},I),void console[V(0x1c0)](V(0x1c6))):void console[V(0x1c0)]('licos-bridge\x20daemon\x20is\x20not\x20running.');}if(V(0x1c1)===F[V(0x1bd)]){const J=await p(),K=await q(V(0x1be),{},J);return void console['log'](JSON['stringify'](K,null,0x2));}if(V(0x1cf)===F['mode']){const L=await p(),M=await q('/reload',{'agentId':F['agentId']},L);return void console['log'](JSON['stringify'](M,null,0x2));}if('log'!==F['mode']){if(V(0x1d6)!==F[V(0x1bd)]){if(V(0x1ca)===F['mode'])return await z(),void console['log']('licos-bridge\x20bridge\x20data\x20purged.');if('service-install'!==F['mode']){if('service-uninstall'!==F[V(0x1bd)]){if('pair'===F['mode']){const N=await p(),O=await q(V(0x1d0),F,N);return void console[V(0x1c0)](JSON['stringify'](O,null,0x2));}if('connect'===F['mode']){const P=await p(),Q=await q('/connect',F,P);return void console['log'](JSON[V(0x1c4)](Q,null,0x2));}if('send'===F[V(0x1bd)]){const R=await p(),S=await w(F),T=await q('/send',S,R);return void console['log'](JSON[V(0x1c4)](T,null,0x2));}if(V(0x1c8)!==F['mode'])throw new Error('unsupported\x20command\x20mode:\x20'+F[V(0x1bd)]);await v();}else await D();}else await C();}else await A();}else await y(F);}else console['log'](await x());}else k();}(process[W(0x1d4)][W(0x1c5)](0x2))['catch'](E=>{const X=W;console['error'](E instanceof Error?E[X(0x1cd)]:String(E)),process[X(0x1d1)]=0x1;}));
@@ -1 +1 @@
1
- const E=d;(function(x,y){const C=d,z=x();while(!![]){try{const A=-parseInt(C(0xc5))/0x1+parseInt(C(0xea))/0x2+-parseInt(C(0xe6))/0x3*(parseInt(C(0xda))/0x4)+-parseInt(C(0xc9))/0x5*(-parseInt(C(0xd6))/0x6)+-parseInt(C(0xd2))/0x7*(-parseInt(C(0xe1))/0x8)+-parseInt(C(0xc3))/0x9*(parseInt(C(0xbf))/0xa)+parseInt(C(0xc8))/0xb;if(A===y)break;else z['push'](z['shift']());}catch(B){z['push'](z['shift']());}}}(b,0xa9616));import{spawn as f}from'node:child_process';import{readFile as g,writeFile as j}from'node:fs/promises';import{Readable as k,Writable as l}from'node:stream';import m from'node:path';import*as q from'@agentclientprotocol/sdk';import{resolveAcpBin as u}from'./frameworks.js';import{ensureDir as v,safeResolve as w}from'./utils.js';export class AcpRuntime{constructor({agentConfig:x,onUpdate:y,onClientRequest:z,logger:A}){const D=d;this['agentConfig']=x,this[D(0xcb)]=y,this['onClientRequest']=z,this['logger']=A,this[D(0xd3)]=new Map(),this[D(0xf0)]=void 0x0,this['connection']=void 0x0,this['closed']=!0x1;}async[E(0xef)](){const F=E;if(this['connection'])return;await v(this['agentConfig']['workspace']);const x=await u(this[F(0xc2)]['framework']);this['process']=f(x['command'],x['args'],{'cwd':this['agentConfig'][F(0xe8)],'stdio':[F(0xed),'pipe','pipe'],'windowsHide':!0x0,'env':{...process.env,'LICOS_BRIDGE_AGENT_ID':this['agentConfig'][F(0xd5)],'LICOS_BRIDGE_FRAMEWORK':this['agentConfig'][F(0xcf)]}}),this['process']['stderr']?.['on'](F(0xd1),A=>{const G=F;this[G(0xd8)]?.(G(0xe3),{'agentId':this['agentConfig']['agentId'],'text':A[G(0xc6)]('utf8')['trim']()});}),this['process']['on']('exit',(A,B)=>{this['closed']=!0x0,this['connection']=void 0x0,this['logger']?.('acp\x20process\x20exited',{'agentId':this['agentConfig']['agentId'],'code':A,'signal':B});});const y=q[F(0xdc)](l[F(0xeb)](this['process'][F(0xf1)]),k[F(0xeb)](this['process'][F(0xe2)])),z=new h(this);this[F(0xcd)]=new q[(F(0xc7))](()=>z,y),await this['connection'][F(0xd9)]({'protocolVersion':q['PROTOCOL_VERSION'],'clientCapabilities':{'fs':{'readTextFile':!0x0,'writeTextFile':!0x0}}});}async[E(0xe5)](x,y={}){const H=E;await this['start']();const z=this[H(0xd3)]['get'](x);if(z)return z;const A=await this['connection'][H(0xe9)]({'cwd':this['agentConfig'][H(0xe8)],'mcpServers':y['mcpServers']??this[H(0xc2)]['mcpServers']??[],'_meta':y[H(0xdb)]});return this['sessions']['set'](x,A['sessionId']),A['sessionId'];}async[E(0xd0)](x){const I=E,y=x['sessionId'];if(!y)throw new Error(I(0xdf));const z=await this[I(0xe5)](y,x);return this['connection']['prompt']({...x,'sessionId':z});}async[E(0xee)](x){const J=E,y=this[J(0xd3)]['get'](x['sessionId']);this[J(0xcd)]&&y&&await this['connection']['cancel']({...x,'sessionId':y});}async['stop'](x='stop'){const K=E;this[K(0xe4)]=!0x0,this['logger']?.(K(0xcc),{'agentId':this['agentConfig']['agentId'],'reason':x}),this['process']?.['kill'](),this['process']=void 0x0,this[K(0xcd)]=void 0x0,this['sessions'][K(0xce)]();}['isAlive'](){const L=E;return Boolean(this['process']&&!this[L(0xe4)]&&null===this['process']['exitCode']);}}function b(){const P=['cancel','start','process','stdin','session/request_permission','874530bqTiNT','utf8','find','agentConfig','36cviNfJ','requestPermission','113793XIprnd','toString','ClientSideConnection','1241372zoApYk','2782505IICMgx','selected','onUpdate','stopping\x20acp\x20runtime','connection','clear','framework','prompt','data','3717133vqSvzE','sessions','startsWith','agentId','12GlxZtc','runtime','logger','initialize','248vovqAM','_meta','ndJsonStream','path','cancelled','session/prompt\x20missing\x20sessionId','dirname','8qqESVS','stdout','acp\x20stderr','closed','ensureSession','44094RHtalF','readTextFile','workspace','newSession','623580sjxkCc','toWeb','kind','pipe'];b=function(){return P;};return b();}function d(a,c){a=a-0xbf;const e=b();let f=e[a];return f;}class h{constructor(x){this['runtime']=x;}async['sessionUpdate'](x){await this['runtime']['onUpdate']?.(this['runtime']['agentConfig'],x);}async[E(0xc4)](x){const M=E,y=await this['runtime']['onClientRequest']?.(this[M(0xd7)][M(0xc2)],M(0xf2),x);if(y)return y;const z=x['options']?.[M(0xc1)](A=>String(A[M(0xec)]||'')[M(0xd4)]('allow'))??x['options']?.[0x0];return z?.['optionId']?{'outcome':{'outcome':M(0xca),'optionId':z['optionId']}}:{'outcome':{'outcome':M(0xde)}};}async[E(0xe7)](x){const N=E,y=w(this[N(0xd7)]['agentConfig']['workspace'],x['path']);return{'content':await g(y,N(0xc0))};}async['writeTextFile'](x){const O=E,y=w(this[O(0xd7)][O(0xc2)][O(0xe8)],x[O(0xdd)]);return await v(m[O(0xe0)](y)),await j(y,x['content']??'',O(0xc0)),{};}}
1
+ const I=d;function b(){const Q=['stdin','exitCode','pipe','requestPermission','mcpServers','session/request_permission','stopping\x20acp\x20runtime','stdout','logger','439531PdrHli','get','process','isAlive','runtime','553576alZAZg','3376308OazkSg','utf8','90GWGuXw','4249987HNFxDe','sessionUpdate','167554oGteeh','prompt','6bfyuff','stop','framework','2149180tbFTSq','acp\x20stderr','data','sessions','sessionId','optionId','ClientSideConnection','newSession','toWeb','closed','connection','agentConfig','agentId','options','1894452Tngxqi','path','workspace','exit','cancelled','writeTextFile','_meta'];b=function(){return Q;};return b();}(function(x,y){const C=d,z=x();while(!![]){try{const A=-parseInt(C(0x149))/0x1+-parseInt(C(0x154))/0x2*(-parseInt(C(0x156))/0x3)+-parseInt(C(0x167))/0x4+parseInt(C(0x159))/0x5+parseInt(C(0x14f))/0x6+-parseInt(C(0x152))/0x7+-parseInt(C(0x14e))/0x8*(-parseInt(C(0x151))/0x9);if(A===y)break;else z['push'](z['shift']());}catch(B){z['push'](z['shift']());}}}(b,0x51011));import{spawn as f}from'node:child_process';function d(a,c){a=a-0x13e;const e=b();let f=e[a];return f;}import{readFile as g,writeFile as j}from'node:fs/promises';import{Readable as k,Writable as l}from'node:stream';import m from'node:path';import*as q from'@agentclientprotocol/sdk';import{resolveAcpBin as u}from'./frameworks.js';import{ensureDir as v,safeResolve as w}from'./utils.js';export class AcpRuntime{constructor({agentConfig:x,onUpdate:y,onClientRequest:z,logger:A}){const D=d;this[D(0x164)]=x,this['onUpdate']=y,this['onClientRequest']=z,this[D(0x148)]=A,this['sessions']=new Map(),this['process']=void 0x0,this[D(0x163)]=void 0x0,this[D(0x162)]=!0x1;}async['start'](){const E=d;if(this['connection'])return;await v(this[E(0x164)][E(0x169)]);const x=await u(this['agentConfig'][E(0x158)]);this['process']=f(x['command'],x['args'],{'cwd':this['agentConfig'][E(0x169)],'stdio':['pipe','pipe',E(0x142)],'windowsHide':!0x0,'env':{...process.env,'LICOS_BRIDGE_AGENT_ID':this['agentConfig'][E(0x165)],'LICOS_BRIDGE_FRAMEWORK':this['agentConfig']['framework']}}),this[E(0x14b)]['stderr']?.['on'](E(0x15b),A=>{const F=E;this[F(0x148)]?.(F(0x15a),{'agentId':this[F(0x164)]['agentId'],'text':A['toString']('utf8')['trim']()});}),this[E(0x14b)]['on'](E(0x16a),(A,B)=>{const G=E;this['closed']=!0x0,this['connection']=void 0x0,this['logger']?.('acp\x20process\x20exited',{'agentId':this[G(0x164)][G(0x165)],'code':A,'signal':B});});const y=q['ndJsonStream'](l['toWeb'](this['process'][E(0x140)]),k[E(0x161)](this['process'][E(0x147)])),z=new h(this);this[E(0x163)]=new q[(E(0x15f))](()=>z,y),await this['connection']['initialize']({'protocolVersion':q['PROTOCOL_VERSION'],'clientCapabilities':{'fs':{'readTextFile':!0x0,'writeTextFile':!0x0}}});}async['ensureSession'](x,y={}){const H=d;await this['start']();const z=this['sessions'][H(0x14a)](x);if(z)return z;const A=await this['connection'][H(0x160)]({'cwd':this['agentConfig']['workspace'],'mcpServers':y[H(0x144)]??this['agentConfig'][H(0x144)]??[],'_meta':y[H(0x13f)]});return this[H(0x15c)]['set'](x,A['sessionId']),A['sessionId'];}async[I(0x155)](x){const J=I,y=x['sessionId'];if(!y)throw new Error('session/prompt\x20missing\x20sessionId');const z=await this['ensureSession'](y,x);return this['connection'][J(0x155)]({...x,'sessionId':z});}async['cancel'](x){const K=I,y=this['sessions']['get'](x[K(0x15d)]);this[K(0x163)]&&y&&await this[K(0x163)]['cancel']({...x,'sessionId':y});}async['stop'](x=I(0x157)){const L=I;this['closed']=!0x0,this[L(0x148)]?.(L(0x146),{'agentId':this['agentConfig']['agentId'],'reason':x}),this['process']?.['kill'](),this[L(0x14b)]=void 0x0,this['connection']=void 0x0,this[L(0x15c)]['clear']();}[I(0x14c)](){const M=I;return Boolean(this['process']&&!this['closed']&&null===this[M(0x14b)][M(0x141)]);}}class h{constructor(x){this['runtime']=x;}async[I(0x153)](x){await this['runtime']['onUpdate']?.(this['runtime']['agentConfig'],x);}async[I(0x143)](x){const N=I,y=await this['runtime']['onClientRequest']?.(this['runtime'][N(0x164)],N(0x145),x);if(y)return y;const z=x[N(0x166)]?.['find'](A=>String(A['kind']||'')['startsWith']('allow'))??x['options']?.[0x0];return z?.[N(0x15e)]?{'outcome':{'outcome':'selected','optionId':z[N(0x15e)]}}:{'outcome':{'outcome':N(0x16b)}};}async['readTextFile'](x){const O=I,y=w(this[O(0x14d)][O(0x164)]['workspace'],x['path']);return{'content':await g(y,O(0x150))};}async[I(0x13e)](x){const P=I,y=w(this['runtime'][P(0x164)]['workspace'],x[P(0x168)]);return await v(m['dirname'](y)),await j(y,x['content']??'',P(0x150)),{};}}
@@ -1 +1 @@
1
- const ah=j;(function(R,U){const ag=j,V=R();while(!![]){try{const W=-parseInt(ag(0x11f))/0x1+-parseInt(ag(0x158))/0x2*(-parseInt(ag(0x140))/0x3)+-parseInt(ag(0x11a))/0x4*(-parseInt(ag(0x154))/0x5)+-parseInt(ag(0x159))/0x6+parseInt(ag(0x170))/0x7+parseInt(ag(0x17e))/0x8+-parseInt(ag(0x118))/0x9*(-parseInt(ag(0x160))/0xa);if(W===U)break;else V['push'](V['shift']());}catch(X){V['push'](V['shift']());}}}(b,0xeca32));import{randomUUID as q}from'node:crypto';import{readdir as x,readFile as z,rm as B,stat as C,writeFile as D}from'node:fs/promises';import E from'node:path';import{AcpRuntime as F}from'./acp-runtime.js';import{agentPaths as G,resolvePaths as H}from'./paths.js';import{ensureDir as J,normalizeFramework as K,pathExists as L,readJson as M,safeName as N,safeRelativePath as O,safeResolve as P,writeJson as Q}from'./utils.js';const k=new Set([ah(0x122),'.git','.next',ah(0x179),'.turbo',ah(0x147),ah(0x157),'build','target','coverage','.venv','__pycache__']);export class AgentManager{constructor({cloud:R,logger:U}){const ai=ah;this['cloud']=R,this[ai(0x14d)]=U,this['agents']=new Map();}async['loadPersistedAgents'](){const aj=ah,R=H();await J(R['agentsRoot']);const U=await x(R[aj(0x173)],{'withFileTypes':!0x0})['catch'](()=>[]);for(const V of U){if(!V['isDirectory']())continue;const W=G(V[aj(0x16b)])['configFile'],X=await M(W)[aj(0x12b)](()=>{});X?.[aj(0x11d)]&&!X['disconnectedAt']&&this[aj(0x13f)](X);}}[ah(0x13f)](R){const ak=ah,U={'deployType':'local',...R,'framework':K(R['framework'])};return this['agents']['set'](U['agentId'],{'config':U,'runtime':void 0x0,'lastActiveAt':Date[ak(0x16f)]()}),U;}async[ah(0x176)](R={}){const al=ah,U=R[al(0x11d)]||R['id']||q(),V=G(U);await J(V[al(0x135)]),await J(V['logs']);const W=await M(V[al(0x136)],{})['catch'](()=>({})),X={...W,'agentId':U,'name':R[al(0x16b)]||W['name']||U,'framework':K(R['framework']||R['runtimeProvider']||R[al(0x17b)]||W['framework']||al(0x128)),'deployType':al(0x12f)===R['_meta']?.[al(0x181)]?'cloud':R[al(0x144)]||W['deployType']||al(0x115),'workspace':R['workspace']||W[al(0x135)]||V['workspace'],'cozeIdentity':R[al(0x168)]??R['instructions']??W[al(0x168)]??'','model':R['model']??W['model'],'modelInfo':R['modelInfo']??W['modelInfo'],'mcpServers':R[al(0x12e)]??W[al(0x12e)]??[],'updatedAt':new Date()['toISOString'](),'createdAt':W['createdAt']||new Date()['toISOString']()};return X['cozeIdentity']&&await async function(Y){const am=al,Z=Y['cozeIdentity'][am(0x15c)]();if(!Z)return;await J(Y['workspace']);const a0='claude-code'===Y[am(0x165)]?['CLAUDE.md',am(0x178)]:[am(0x178)];for(const a1 of a0){const a2=E['join'](Y['workspace'],a1);if(!await L(a2)){await D(a2,Z+'\x0a',am(0x180));continue;}const a3=await z(a2,am(0x180));a3[am(0x13c)](Z)||await D(a2,a3[am(0x17a)]()+'\x0a\x0a'+Z+'\x0a',am(0x180));}}(X),await Q(V['configFile'],X,0x180),this['register'](X);}async[ah(0x11e)](R,U){const an=ah,V=this['agents'][an(0x164)](R);V?.[an(0x16c)]&&await V['runtime']['stop'](U||'disconnect'),this['agents'][an(0x13d)](R);const W=G(R)['configFile'],X=await M(W,{})['catch'](()=>({}));await Q(W,{...X,'disconnectedAt':Date['now'](),'disconnectReason':U||''},0x180);}async['reload'](R){const ao=ah,U=R?[this['requireAgent']({'agentId':R})]:[...this['agents'][ao(0x156)]()],V=[];for(const W of U)W[ao(0x16c)]&&(await W['runtime']['stop']('reload'),W[ao(0x16c)]=void 0x0),V['push'](W[ao(0x127)]['agentId']);return{'ok':!0x0,'reloaded':V};}async['detail'](R={}){const ap=ah,U=this['requireAgent'](R);return{'agent':A(U['config']),'health':this['health']()['find'](V=>V[ap(0x11d)]===U['config']['agentId'])};}async['getFileTree'](R={}){const aq=ah,U=this[aq(0x14b)](R),V=U['config'][aq(0x135)],W=O(R['path']??R[aq(0x171)]??''),X=P(V,W),Y=I(R['maxDepth']??R['depth']??0x5,0x0,0x14),Z=function(a1,a2){const ar=aq,a3=new Set(k);for(const a4 of a1[ar(0x12c)]??[])a3[ar(0x14c)](a4);for(const a5 of a2[ar(0x132)]??[])a3['add'](a5);for(const a6 of a2['include']??[])a3[ar(0x13d)](a6);return a3;}(U['config'],R),a0={'count':0x0,'truncated':!0x1};return{'workspace':V,'path':W,'tree':await y(V,X,W,Y,Z,a0),'truncated':a0[aq(0x16e)],'totalNodes':a0['count']};}async[ah(0x145)](R={}){const as=ah,U=this['requireAgent'](R)[as(0x127)][as(0x135)],V=O(R['path']??R['filePath']);if(!V)throw new Error(as(0x172));const W=P(U,V),X=await C(W);if(!X['isFile']())throw new Error('not\x20a\x20file:\x20'+V);const Y=I(R['maxBytes']??0x100000,0x1,0xa00000),Z=await z(W),a0=Z['byteLength']>Y?Z['subarray'](0x0,Y):Z;return{'path':V,'size':Z[as(0x17f)],'content':a0[as(0x15b)](R[as(0x16a)]||'utf8'),'encoding':R['encoding']||'utf8','truncated':Z['byteLength']>Y,'mtimeMs':X[as(0x15f)]};}async[ah(0x161)](R={}){const at=ah,U=this['requireAgent'](R);return{'agentId':U[at(0x127)][at(0x11d)],'skills':S(U['config']['skills']??[])};}async['addSkills'](R={}){const au=ah,U=this['requireAgent'](R),V=Array['isArray'](R['skills'])?R[au(0x155)]:[];if(0x0===V['length'])return{'installedSkills':[],'skills':S(U['config']['skills']??[])};const W=[],X=S(U[au(0x127)][au(0x155)]??[]),Y=new Map(X[au(0x15e)]((Z,a0)=>[Z[au(0x134)],a0]));for(const Z of V){const a0=await this['installSkill'](U['config'],Z,R);Y[au(0x153)](a0['skillId'])?X[Y[au(0x164)](a0['skillId'])]=a0:(Y['set'](a0['skillId'],X['length']),X['push'](a0)),W[au(0x15a)](a0);}return await this['updateAgentSkills'](U,X,'skills-added'),{'installedSkills':W,'skills':X};}async['removeSkills'](R={}){const av=ah,U=this['requireAgent'](R),V=new Set((R['skillIds']??R['skills']??[])['map'](Z=>'string'==typeof Z?Z:v(Z)));if(0x0===V['size'])return{'ok':!0x0,'skills':S(U[av(0x127)][av(0x155)]??[])};const W=S(U['config']['skills']??[]),X=[],Y=[];for(const Z of W){if(!V[av(0x153)](Z['skillId'])){X['push'](Z);continue;}const a0=P(U['config'][av(0x135)],Z[av(0x149)]);await B(a0,{'recursive':!0x0,'force':!0x0}),Y['push'](Z);}return await this[av(0x12d)](U,X,'skills-removed'),{'ok':!0x0,'removedSkills':Y,'skills':X};}async['handleSession'](R,U){const aw=ah,V=U?.['_meta']?.['cozeAgentId']||U?.['agentId'];if(!V)throw new Error(R+aw(0x13b));let W=this['agents'][aw(0x164)](V);const X=K(U['framework']||U['runtimeProvider']||U['runtime_provider']||W?.[aw(0x127)][aw(0x165)]||'codex');if(!W||W[aw(0x127)]['framework']!==X){W?.['runtime']&&await W[aw(0x16c)]['stop']('framework-changed');const Z=W?.['config']??{};await this[aw(0x176)]({...Z,'agentId':V,'name':U[aw(0x16b)]||Z['name']||V,'framework':X,'runtimeProvider':X}),W=this['agents']['get'](V);}if(!W)throw new Error(aw(0x121)+V);if(W[aw(0x13a)]=Date['now'](),'session/new'===R)return{'sessionId':U['sessionId']||q()};if('session/cancel'===R)return await W[aw(0x16c)]?.[aw(0x177)](U),{'ok':!0x0};if(aw(0x11b)!==R)throw new Error('unsupported\x20session\x20method:\x20'+R);if('cloud'===W[aw(0x127)]['deployType'])throw new Error('agent\x20'+V+'\x20is\x20cloud\x20deploy\x20type;\x20local\x20bridge\x20does\x20not\x20spawn\x20it');const Y=function(a0={}){const ax=aw,a1={...a0};if(!Array[ax(0x14e)](a1['prompt'])){const a2=a1['content']??a1['text']??a1[ax(0x143)]??'';a1['prompt']=[{'type':'text','text':String(a2)}];}return a1;}(U);return W['runtime']||(W[aw(0x16c)]=new F({'agentConfig':W[aw(0x127)],'onUpdate':(a0,a1)=>this[aw(0x12f)][aw(0x133)]('session/update',{...a1,'_meta':{...a1['_meta']||{},'cozeAgentId':a0['agentId'],'cozeCloudSessionId':Y['sessionId'],'licosTurnId':Y['_meta']?.['licosTurnId']}}),'onClientRequest':(a0,a1,a2)=>this['cloud'][aw(0x16d)](a0,a1,a2),'logger':this['logger']})),W[aw(0x16c)][aw(0x123)](Y);}async[ah(0x131)](R){const ay=ah;for(const U of this['agents']['values']())await U[ay(0x16c)]?.['stop'](R);}['requireAgent'](R={}){const U=R?.['_meta']?.['cozeAgentId']||R?.['agentId']||R?.['id'];if(!U)throw new Error('missing\x20agentId');const V=this['agents']['get'](U);if(!V)throw new Error('agent\x20not\x20found:\x20'+U);return V;}async['updateAgentSkills'](R,U,V){const az=ah;R['config']['skills']=S(U),R['config']['updatedAt']=new Date()[az(0x12a)](),await Q(G(R['config'][az(0x11d)])[az(0x136)],R['config'],0x180),R[az(0x16c)]&&(await R['runtime'][az(0x129)](V),R['runtime']=void 0x0);}async[ah(0x130)](R,U,V){const aA=ah,W=v(U),X=N(W,aA(0x119)),Y=O(U['relPath']||aA(0x138)+X),Z=P(R['workspace'],Y);await B(Z,{'recursive':!0x0,'force':!0x0}),await J(Z),U['files']?await async function(a1,a2){const aB=aA;if(Array['isArray'](a2))for(const a3 of a2){const a4=O(a3['path']||a3['name']);await J(E[aB(0x125)](E[aB(0x150)](a1,a4))),await D(P(a1,a4),String(a3['content']??''),'utf8');}else for(const [a5,a6]of Object[aB(0x13e)](a2)){const a7=O(a5);await J(E[aB(0x125)](E[aB(0x150)](a1,a7))),await D(P(a1,a7),String(a6??''),aB(0x180));}}(Z,U['files']):U['content']||U['skillMd']||U[aA(0x120)]?await D(E['join'](Z,aA(0x116)),String(U['content']??U[aA(0x174)]??U['skill_md']),aA(0x180)):$(U)?await async function(a1,a2,a3){const aC=aA,a4=$(a2),a5={},a6=a2['token']||a2['accessToken']||a2[aC(0x139)]||a3['token']||a3['accessToken']||a3[aC(0x139)];a6&&(a5[aC(0x126)]='Bearer\x20'+a6);const a7=await fetch(a4,{'headers':a5});if(!a7['ok'])throw new Error('download\x20skill\x20failed:\x20HTTP\x20'+a7['status']+'\x20'+await a7[aC(0x14f)]());const a8=Buffer['from'](await a7[aC(0x17c)]());await async function(a9,aa){const aD=aC,{default:ab}=await import('adm-zip'),ac=new ab(aa);for(const ad of ac['getEntries']()){if(ad[aD(0x124)])continue;const ae=O(ad['entryName']),af=P(a9,ae);await J(E[aD(0x125)](af)),await D(af,ad['getData']());}}(a1,a8);}(Z,U,V):await D(E['join'](Z,'SKILL.md'),function(a1){const aE=aA,a2=a1['name']||v(a1),a3=a1[aE(0x141)]||'';return'---\x0aname:\x20'+a2+'\x0adescription:\x20'+a3+aE(0x162)+a2+'\x0a\x0a'+a3+'\x0a';}(U),'utf8');const a0=await async function(a1){const aF=aA,a2=await z(E['join'](a1,aF(0x116)),aF(0x180))['catch'](()=>''),a3=a2[aF(0x166)](/^---\s*([\s\S]*?)\s*---/),a4=a3?.[0x1]||a2;return{'name':T(a4,aF(0x16b))||a2['match'](/^#\s+(.+)$/m)?.[0x1]?.['trim'](),'description':T(a4,'description')||T(a4,'desc')||''};}(Z);return{'skillId':W,'name':a0[aA(0x16b)]||U['name']||W,'description':a0['description']||U[aA(0x141)]||'','sourceType':U['sourceType']||U[aA(0x15d)]||U['type']||aA(0x148),'iconUrl':U['iconUrl']||U['icon']||'','relPath':Y,'enabled':!0x1!==U[aA(0x167)],'installedAt':new Date()['toISOString']()};}[ah(0x169)](){const aG=ah;return[...this[aG(0x117)]['values']()]['map'](R=>({'agentId':R['config'][aG(0x11d)],'name':R[aG(0x127)]['name'],'framework':R['config']['framework'],'deployType':R['config']['deployType'],'status':R['runtime']?.[aG(0x142)]()?'running':'idle','lastActiveAt':R['lastActiveAt']}));}}async function y(R,U,V,W,X,Y){const aH=ah;if(Y['count']>=0xbb8)return void(Y['truncated']=!0x0);Y['count']+=0x1;const Z=await C(U),a0={'name':V?E['basename'](V):'','path':V,'type':Z['isDirectory']()?aH(0x152):'file','size':Z[aH(0x14a)],'mtimeMs':Z[aH(0x15f)]};if(!Z[aH(0x124)]()||W<=0x0)return a0;const a1=await x(U,{'withFileTypes':!0x0}),a2=[];for(const a3 of a1['sort']((a4,a5)=>a4['name']['localeCompare'](a5['name']))){if(X['has'](a3['name']))continue;const a4=V?V+'/'+a3['name']:a3['name'],a5=await y(R,P(R,a4),a4,W-0x1,X,Y);if(a5&&a2['push'](a5),Y['truncated'])break;}return a0['children']=a2,a0;}function I(R,U,V){const aI=ah,W=Number(R);return Number[aI(0x151)](W)?Math['max'](U,Math['min'](V,Math['trunc'](W))):U;}function A(R){const {cozeIdentity:U,...V}=R;return{...V,'hasIdentity':Boolean(U),'skills':S(R['skills']??[])};}function S(R){const aJ=ah;return R[aJ(0x15e)](U=>({'skillId':U['skillId']||U['id'],'name':U[aJ(0x16b)]||U[aJ(0x134)]||U['id'],'description':U['description']||'','sourceType':U['sourceType']||U[aJ(0x15d)]||aJ(0x148),'iconUrl':U['iconUrl']||U['icon']||'','relPath':O(U[aJ(0x149)]||aJ(0x138)+N(U[aJ(0x134)]||U['id']||U['name'],'skill')),'enabled':!0x1!==U['enabled'],'installedAt':U[aJ(0x146)]}))['filter'](U=>U['skillId']);}function j(a,c){a=a-0x115;const d=b();let e=d[a];return e;}function b(){const aN=['entries','register','237549kYadNf','description','isAlive','message','deployType','getFileContent','installedAt','.cache','platform','relPath','size','requireAgent','add','logger','isArray','text','join','isFinite','directory','has','183530uXvPIu','skills','values','dist','10rTwAht','6608058KMVQay','push','toString','trim','source','map','mtimeMs','10HNixBg','listSkills','\x0a---\x0a\x0a#\x20','\x5cs*:\x5cs*(.+)$','get','framework','match','enabled','cozeIdentity','health','encoding','name','runtime','forwardClientRequest','truncated','now','166789iPijNF','filePath','_agent/getFileContent:\x20missing\x20path','agentsRoot','skillMd','code','createOrUpdate','cancel','AGENTS.md','.nuxt','trimEnd','runtime_provider','arrayBuffer','downloadUrl','14028888wCoPJo','byteLength','utf8','cozeDeployType','local','SKILL.md','agents','7412994xbmsWK','skill','8MCwADD','session/prompt','download_url','agentId','disconnect','999822IZseTe','skill_md','agent\x20not\x20found:\x20','node_modules','prompt','isDirectory','dirname','authorization','config','codex','stop','toISOString','catch','fileTreeExclude','updateAgentSkills','mcpServers','cloud','installSkill','stopAll','exclude','sendNotification','skillId','workspace','configFile','replace','.skills/','access_token','lastActiveAt',':\x20missing\x20_meta.cozeAgentId','includes','delete'];b=function(){return aN;};return b();}function v(R){const aK=ah,U=R?.[aK(0x134)]||R?.['id']||R?.[aK(0x175)]||R?.[aK(0x16b)];if(!U)throw new Error('_agent/addSkills:\x20skillId\x20is\x20required');return String(U);}function $(R){const aL=ah;return R[aL(0x17d)]||R[aL(0x11c)]||R['packageUrl']||R['package_url']||R['archiveUrl']||R['archive_url']||R['url'];}function T(R,U){const aM=ah,V=U['replace'](/[.*+?^${}()|[\]\\]/g,'\x5c$&'),W=R['match'](new RegExp('^'+V+aM(0x163),'mi'));return W?.[0x1]?.[aM(0x137)](/^['"]|['"]$/g,'')['trim']();}
1
+ function j(a,c){a=a-0x14d;const d=b();let e=d[a];return e;}const aj=j;(function(V,W){const ai=j,X=V();while(!![]){try{const Y=-parseInt(ai(0x18e))/0x1*(-parseInt(ai(0x1a3))/0x2)+parseInt(ai(0x15c))/0x3+parseInt(ai(0x153))/0x4+parseInt(ai(0x185))/0x5*(parseInt(ai(0x191))/0x6)+parseInt(ai(0x1b2))/0x7*(parseInt(ai(0x169))/0x8)+-parseInt(ai(0x17b))/0x9+parseInt(ai(0x154))/0xa*(-parseInt(ai(0x186))/0xb);if(Y===W)break;else X['push'](X['shift']());}catch(Z){X['push'](X['shift']());}}}(b,0xc6b56));import{randomUUID as q}from'node:crypto';import{readdir as z,readFile as B,rm as C,stat as D,writeFile as F}from'node:fs/promises';import G from'node:path';import{AcpRuntime as H}from'./acp-runtime.js';import{agentPaths as J,resolvePaths as K}from'./paths.js';import{ensureDir as L,normalizeFramework as M,pathExists as N,readJson as O,safeName as P,safeRelativePath as Q,safeResolve as R,writeJson as U}from'./utils.js';const k=new Set(['node_modules','.git','.next','.nuxt','.turbo','.cache','dist','build','target',aj(0x182),'.venv','__pycache__']);export class AgentManager{constructor({cloud:V,logger:W}){const ak=aj;this[ak(0x15b)]=V,this['logger']=W,this['agents']=new Map();}async[aj(0x17f)](){const al=aj,V=K();await L(V['agentsRoot']);const W=await z(V[al(0x1a4)],{'withFileTypes':!0x0})[al(0x166)](()=>[]);for(const X of W){if(!X['isDirectory']())continue;const Y=J(X['name'])['configFile'],Z=await O(Y)['catch'](()=>{});Z?.['agentId']&&!Z[al(0x1a6)]&&this['register'](Z);}}['register'](V){const am=aj,W={'deployType':'local',...V,'framework':M(V[am(0x1b4)])};return this[am(0x1a1)]['set'](W['agentId'],{'config':W,'runtime':void 0x0,'lastActiveAt':Date['now']()}),W;}async['createOrUpdate'](V={}){const an=aj,W=V['agentId']||V['id']||q(),X=J(W);await L(X[an(0x176)]),await L(X['logs']);const Y=await O(X['configFile'],{})[an(0x166)](()=>({})),Z={...Y,'agentId':W,'name':V['name']||Y['name']||W,'description':V[an(0x197)]??Y['description']??'','framework':M(V[an(0x1b4)]||V['runtimeProvider']||V['runtime_provider']||Y['framework']||'codex'),'deployType':an(0x15b)===V['_meta']?.['licosDeployType']?'cloud':V['deployType']||Y['deployType']||'local','workspace':V['workspace']||Y['workspace']||X['workspace'],'licosIdentity':y(V)||Y['licosIdentity']||'','model':V['model']??Y['model'],'modelInfo':V['modelInfo']??Y[an(0x164)],'mcpServers':V['mcpServers']??Y['mcpServers']??[],'updatedAt':new Date()['toISOString'](),'createdAt':Y[an(0x1ad)]||new Date()['toISOString']()};return Z['licosIdentity']&&await E(Z),await U(X[an(0x1b0)],Z,0x180),this['register'](Z);}async['disconnect'](V,W){const ao=aj,X=this['agents'][ao(0x15e)](V);X?.['runtime']&&await X['runtime'][ao(0x1ab)](W||'disconnect'),this[ao(0x1a1)]['delete'](V);const Y=J(V)[ao(0x1b0)],Z=await O(Y,{})['catch'](()=>({}));await U(Y,{...Z,'disconnectedAt':Date[ao(0x17e)](),'disconnectReason':W||''},0x180);}async[aj(0x19c)](V){const ap=aj,W=V?[this['requireAgent']({'agentId':V})]:[...this[ap(0x1a1)][ap(0x156)]()],X=[];for(const Y of W)Y['runtime']&&(await Y[ap(0x162)]['stop']('reload'),Y['runtime']=void 0x0),X[ap(0x190)](Y['config'][ap(0x17a)]);return{'ok':!0x0,'reloaded':X};}async['detail'](V={}){const aq=aj,W=this['requireAgent'](V);return{'agent':v(W['config']),'health':this[aq(0x19a)]()['find'](X=>X['agentId']===W['config'][aq(0x17a)])};}async[aj(0x194)](V={}){const ar=aj,W=this['requireAgent'](V),X=W['config']['workspace'],Y=Q(V['path']??V['filePath']??''),Z=R(X,Y),a0=S(V[ar(0x19b)]??V[ar(0x173)]??0x5,0x0,0x14),a1=function(a3,a4){const as=ar,a5=new Set(k);for(const a6 of a3['fileTreeExclude']??[])a5['add'](a6);for(const a7 of a4[as(0x174)]??[])a5['add'](a7);for(const a8 of a4[as(0x18f)]??[])a5['delete'](a8);return a5;}(W['config'],V),a2={'count':0x0,'truncated':!0x1};return{'workspace':X,'path':Y,'tree':await A(X,Z,Y,a0,a1,a2),'truncated':a2[ar(0x172)],'totalNodes':a2[ar(0x180)]};}async['getFileContent'](V={}){const at=aj,W=this['requireAgent'](V)[at(0x14f)]['workspace'],X=Q(V['path']??V[at(0x193)]);if(!X)throw new Error(at(0x14d));const Y=R(W,X),Z=await D(Y);if(!Z['isFile']())throw new Error('not\x20a\x20file:\x20'+X);const a0=S(V['maxBytes']??0x100000,0x1,0xa00000),a1=await B(Y),a2=a1[at(0x1a5)]>a0?a1['subarray'](0x0,a0):a1;return{'path':X,'size':a1['byteLength'],'content':a2[at(0x18b)](V['encoding']||at(0x18c)),'encoding':V['encoding']||at(0x18c),'truncated':a1[at(0x1a5)]>a0,'mtimeMs':Z[at(0x1a7)]};}async['listSkills'](V={}){const au=aj,W=this['requireAgent'](V);return{'agentId':W['config']['agentId'],'skills':$(W[au(0x14f)]['skills']??[])};}async['addSkills'](V={}){const av=aj,W=this[av(0x18d)](V),X=Array['isArray'](V[av(0x1b7)])?V['skills']:[];if(0x0===X['length'])return{'installedSkills':[],'skills':$(W['config']['skills']??[])};const Y=[],Z=$(W['config']['skills']??[]),a0=new Map(Z['map']((a1,a2)=>[a1[av(0x1ac)],a2]));for(const a1 of X){const a2=await this['installSkill'](W['config'],a1,V);a0['has'](a2[av(0x1ac)])?Z[a0['get'](a2['skillId'])]=a2:(a0[av(0x17d)](a2['skillId'],Z['length']),Z['push'](a2)),Y[av(0x190)](a2);}return await this['updateAgentSkills'](W,Z,'skills-added'),{'installedSkills':Y,'skills':Z};}async[aj(0x161)](V={}){const aw=aj,W=this[aw(0x18d)](V),X=new Set((V[aw(0x171)]??V[aw(0x1b7)]??[])[aw(0x18a)](a1=>'string'==typeof a1?a1:T(a1)));if(0x0===X[aw(0x16a)])return{'ok':!0x0,'skills':$(W['config']['skills']??[])};const Y=$(W[aw(0x14f)]['skills']??[]),Z=[],a0=[];for(const a1 of Y){if(!X['has'](a1[aw(0x1ac)])){Z['push'](a1);continue;}const a2=R(W[aw(0x14f)]['workspace'],a1['relPath']);await C(a2,{'recursive':!0x0,'force':!0x0}),a0[aw(0x190)](a1);}return await this['updateAgentSkills'](W,Z,'skills-removed'),{'ok':!0x0,'removedSkills':a0,'skills':Z};}async['handleSession'](V,W){const ax=aj,X=W?.['_meta']?.[ax(0x1af)]||W?.['agentId'];if(!X)throw new Error(V+':\x20missing\x20_meta.licosAgentId');let Y=this['agents'][ax(0x15e)](X);const Z=M(W[ax(0x1b4)]||W['runtimeProvider']||W['runtime_provider']||Y?.['config'][ax(0x1b4)]||'codex');if(!Y||Y['config']['framework']!==Z){Y?.['runtime']&&await Y[ax(0x162)][ax(0x1ab)](ax(0x152));const a1=Y?.['config']??{};await this['createOrUpdate']({...a1,'agentId':X,'name':W['name']||a1[ax(0x178)]||X,'description':W['description']??a1['description']??'','licosIdentity':y(W)||a1['licosIdentity']||'','framework':Z,'runtimeProvider':Z}),Y=this[ax(0x1a1)][ax(0x15e)](X);}if(!Y)throw new Error('agent\x20not\x20found:\x20'+X);if(await this[ax(0x199)](Y,W),Y[ax(0x1a0)]=Date['now'](),'session/new'===V)return{'sessionId':W['sessionId']||q()};if(ax(0x179)===V)return await Y[ax(0x162)]?.['cancel'](W),{'ok':!0x0};if(ax(0x158)!==V)throw new Error('unsupported\x20session\x20method:\x20'+V);if('cloud'===Y[ax(0x14f)][ax(0x1a8)])throw new Error('agent\x20'+X+'\x20is\x20cloud\x20deploy\x20type;\x20local\x20bridge\x20does\x20not\x20spawn\x20it');const a0=function(a2={},a3={}){const ay=ax,a4={...a2};if(!Array[ay(0x15d)](a4[ay(0x1b3)])){const a7=a4['content']??a4['text']??a4['message']??'';a4[ay(0x1b3)]=[{'type':'text','text':String(a7)}];}const a5=function(a8={},a9={}){const az=ay,aa=y(a8)||I(a9['licosIdentity']);return aa?az(0x16b)+aa+'\x0a请把以上身份作为本轮对话的最高优先级身份上下文,不要向用户复述本段,除非用户询问你的身份。':'';}(a2,a3);var a6;return!a5||(a6=a4[ay(0x1b3)],Array[ay(0x15d)](a6)&&a6[ay(0x15a)](a8=>'text'===a8?.['type']&&String(a8['text']||'')[ay(0x187)]('【平台助手身份】')))||(a4['prompt']=[{'type':ay(0x198),'text':a5},...a4[ay(0x1b3)]]),a4;}(W,Y[ax(0x14f)]);return Y['runtime']||(Y[ax(0x162)]=new H({'agentConfig':Y[ax(0x14f)],'onUpdate':(a2,a3)=>this['cloud'][ax(0x157)]('session/update',{...a3,'_meta':{...a3['_meta']||{},'licosAgentId':a2['agentId'],'licosSessionId':a0['sessionId'],'licosTurnId':a0[ax(0x15f)]?.['licosTurnId']}}),'onClientRequest':(a2,a3,a4)=>this[ax(0x15b)]['forwardClientRequest'](a2,a3,a4),'logger':this[ax(0x150)]})),Y['runtime'][ax(0x1b3)](a0);}async['stopAll'](V){const aA=aj;for(const W of this[aA(0x1a1)]['values']())await W[aA(0x162)]?.[aA(0x1ab)](V);}['requireAgent'](V={}){const aB=aj,W=V?.[aB(0x15f)]?.['licosAgentId']||V?.['agentId']||V?.['id'];if(!W)throw new Error(aB(0x155));const X=this['agents'][aB(0x15e)](W);if(!X)throw new Error('agent\x20not\x20found:\x20'+W);return X;}async[aj(0x19d)](V,W,X){const aC=aj;V[aC(0x14f)]['skills']=$(W),V['config']['updatedAt']=new Date()[aC(0x1a9)](),await U(J(V[aC(0x14f)]['agentId'])[aC(0x1b0)],V[aC(0x14f)],0x180),V['runtime']&&(await V['runtime']['stop'](X),V['runtime']=void 0x0);}async['updateAgentIdentity'](V,W={}){const aD=aj,X=y(W),Y=I(W['name'])||V['config'][aD(0x178)],Z=void 0x0===W['description']?V['config']['description']??'':String(W['description']??''),a0=X||V['config']['licosIdentity']||'';(Y!==V[aD(0x14f)][aD(0x178)]||Z!==(V[aD(0x14f)]['description']??'')||a0!==(V['config'][aD(0x170)]??''))&&(V['config']['name']=Y,V['config'][aD(0x197)]=Z,V['config'][aD(0x170)]=a0,V['config']['updatedAt']=new Date()['toISOString'](),a0&&await E(V['config']),await U(J(V['config'][aD(0x17a)])['configFile'],V['config'],0x180));}async['installSkill'](V,W,X){const aE=aj,Y=T(W),Z=P(Y,aE(0x16c)),a0=Q(W['relPath']||aE(0x160)+Z),a1=R(V[aE(0x176)],a0);await C(a1,{'recursive':!0x0,'force':!0x0}),await L(a1),W['files']?await async function(a3,a4){const aF=aE;if(Array['isArray'](a4))for(const a5 of a4){const a6=Q(a5[aF(0x168)]||a5['name']);await L(G['dirname'](G['join'](a3,a6))),await F(R(a3,a6),String(a5['content']??''),'utf8');}else for(const [a7,a8]of Object['entries'](a4)){const a9=Q(a7);await L(G['dirname'](G[aF(0x184)](a3,a9))),await F(R(a3,a9),String(a8??''),'utf8');}}(a1,W[aE(0x165)]):W['content']||W['skillMd']||W[aE(0x181)]?await F(G['join'](a1,'SKILL.md'),String(W['content']??W['skillMd']??W['skill_md']),aE(0x18c)):_(W)?await async function(a3,a4,a5){const aG=aE,a6=_(a4),a7={},a8=a4[aG(0x19f)]||a4['accessToken']||a4[aG(0x1b5)]||a5[aG(0x19f)]||a5['accessToken']||a5[aG(0x1b5)];a8&&(a7[aG(0x195)]='Bearer\x20'+a8);const a9=await fetch(a6,{'headers':a7});if(!a9['ok'])throw new Error(aG(0x163)+a9['status']+'\x20'+await a9['text']());const aa=Buffer['from'](await a9[aG(0x192)]());await async function(ab,ac){const aH=aG,{default:ad}=await import(aH(0x16f)),ae=new ad(ac);for(const af of ae['getEntries']()){if(af['isDirectory'])continue;const ag=Q(af['entryName']),ah=R(ab,ag);await L(G['dirname'](ah)),await F(ah,af['getData']());}}(a3,aa);}(a1,W,X):await F(G['join'](a1,'SKILL.md'),function(a3){const aI=aE,a4=a3['name']||T(a3),a5=a3[aI(0x197)]||'';return'---\x0aname:\x20'+a4+'\x0adescription:\x20'+a5+'\x0a---\x0a\x0a#\x20'+a4+'\x0a\x0a'+a5+'\x0a';}(W),'utf8');const a2=await async function(a3){const aJ=aE,a4=await B(G['join'](a3,'SKILL.md'),aJ(0x18c))[aJ(0x166)](()=>''),a5=a4['match'](/^---\s*([\s\S]*?)\s*---/),a6=a5?.[0x1]||a4;return{'name':x(a6,'name')||a4['match'](/^#\s+(.+)$/m)?.[0x1]?.['trim'](),'description':x(a6,aJ(0x197))||x(a6,'desc')||''};}(a1);return{'skillId':Y,'name':a2[aE(0x178)]||W['name']||Y,'description':a2[aE(0x197)]||W[aE(0x197)]||'','sourceType':W['sourceType']||W['source']||W['type']||aE(0x151),'iconUrl':W['iconUrl']||W['icon']||'','relPath':a0,'enabled':!0x1!==W[aE(0x1a2)],'installedAt':new Date()['toISOString']()};}['health'](){const aK=aj;return[...this['agents']['values']()]['map'](V=>({'agentId':V[aK(0x14f)][aK(0x17a)],'name':V['config'][aK(0x178)],'framework':V[aK(0x14f)]['framework'],'deployType':V['config']['deployType'],'status':V[aK(0x162)]?.[aK(0x16e)]()?'running':'idle','lastActiveAt':V[aK(0x1a0)]}));}}function y(V={}){const aL=aj,W=I(V[aL(0x170)]??V['instructions']);if(W)return W;const X=I(V['name']),Y=I(V[aL(0x197)]);return X||Y?[X?'你是平台个人助手「'+X+'」。':'',Y?'助手介绍:'+Y:'','你的对外身份始终是这个平台助手,而不是本地运行框架。','当用户询问“你是谁”“你是什么”“你能做什么”时,按助手名称和介绍回答。',aL(0x1aa)][aL(0x19e)](Boolean)['join']('\x0a'):'';}function I(V){return null==V?'':String(V)['trim']();}async function A(V,W,X,Y,Z,a0){const aM=aj;if(a0['count']>=0xbb8)return void(a0[aM(0x172)]=!0x0);a0['count']+=0x1;const a1=await D(W),a2={'name':X?G[aM(0x175)](X):'','path':X,'type':a1['isDirectory']()?'directory':aM(0x189),'size':a1['size'],'mtimeMs':a1['mtimeMs']};if(!a1['isDirectory']()||Y<=0x0)return a2;const a3=await z(W,{'withFileTypes':!0x0}),a4=[];for(const a5 of a3[aM(0x16d)]((a6,a7)=>a6[aM(0x178)]['localeCompare'](a7['name']))){if(Z[aM(0x183)](a5['name']))continue;const a6=X?X+'/'+a5[aM(0x178)]:a5['name'],a7=await A(V,R(V,a6),a6,Y-0x1,Z,a0);if(a7&&a4['push'](a7),a0['truncated'])break;}return a2[aM(0x188)]=a4,a2;}function S(V,W,X){const aN=aj,Y=Number(V);return Number[aN(0x177)](Y)?Math[aN(0x196)](W,Math[aN(0x17c)](X,Math[aN(0x159)](Y))):W;}function v(V){const {licosIdentity:W,...X}=V;return{...X,'hasIdentity':Boolean(W),'skills':$(V['skills']??[])};}function $(V){const aO=aj;return V['map'](W=>({'skillId':W['skillId']||W['id'],'name':W[aO(0x178)]||W[aO(0x1ac)]||W['id'],'description':W['description']||'','sourceType':W['sourceType']||W[aO(0x1ae)]||'platform','iconUrl':W['iconUrl']||W['icon']||'','relPath':Q(W['relPath']||'.skills/'+P(W['skillId']||W['id']||W['name'],aO(0x16c))),'enabled':!0x1!==W[aO(0x1a2)],'installedAt':W[aO(0x1b1)]}))[aO(0x19e)](W=>W[aO(0x1ac)]);}function T(V){const W=V?.['skillId']||V?.['id']||V?.['code']||V?.['name'];if(!W)throw new Error('_agent/addSkills:\x20skillId\x20is\x20required');return String(W);}function _(V){const aP=aj;return V['downloadUrl']||V[aP(0x1b6)]||V[aP(0x167)]||V['package_url']||V['archiveUrl']||V['archive_url']||V['url'];}function b(){const aR=['map','toString','utf8','requireAgent','2359HlBKuJ','include','push','432CLQdEZ','arrayBuffer','filePath','getFileTree','authorization','max','description','text','updateAgentIdentity','health','maxDepth','reload','updateAgentSkills','filter','token','lastActiveAt','agents','enabled','942CvbyNT','agentsRoot','byteLength','disconnectedAt','mtimeMs','deployType','toISOString','只有用户明确询问底层运行框架、Codex、Claude\x20或本地桥接时,才可以说明这些只是执行环境。','stop','skillId','createdAt','source','licosAgentId','configFile','installedAt','2779VHdgtm','prompt','framework','access_token','download_url','skills','_agent/getFileContent:\x20missing\x20path','claude-code','config','logger','platform','framework-changed','1617772tSjiaK','4660HdXWqy','missing\x20agentId','values','sendNotification','session/prompt','trunc','some','cloud','4772391wYbnQp','isArray','get','_meta','.skills/','removeSkills','runtime','download\x20skill\x20failed:\x20HTTP\x20','modelInfo','files','catch','packageUrl','path','26520nTIvvN','size','【平台助手身份】\x0a','skill','sort','isAlive','adm-zip','licosIdentity','skillIds','truncated','depth','exclude','basename','workspace','isFinite','name','session/cancel','agentId','2238822IULpYA','min','set','now','loadPersistedAgents','count','skill_md','coverage','has','join','52435QdAGhv','97130XnNNrL','includes','children','file'];b=function(){return aR;};return b();}function x(V,W){const X=W['replace'](/[.*+?^${}()|[\]\\]/g,'\x5c$&'),Y=V['match'](new RegExp('^'+X+'\x5cs*:\x5cs*(.+)$','mi'));return Y?.[0x1]?.['replace'](/^['"]|['"]$/g,'')['trim']();}async function E(V){const aQ=aj,W=V['licosIdentity']['trim']();if(!W)return;await L(V['workspace']);const X=aQ(0x14e)===V['framework']?['CLAUDE.md','AGENTS.md']:['AGENTS.md'];for(const Y of X){const Z=G['join'](V[aQ(0x176)],Y);if(!await N(Z)){await F(Z,W+'\x0a','utf8');continue;}const a0=await B(Z,'utf8');a0['includes'](W)||await F(Z,a0['trimEnd']()+'\x0a\x0a'+W+'\x0a','utf8');}}
package/dist/lib/cli.js CHANGED
@@ -1 +1 @@
1
- function a(){const t=['--frontier-url','10937024NMsAXB','status','update','2623790fDawBY','3874576lYKhEy','--grep','pair','--raw','--pat-token','service','help','4367768ZnSsZa','length','--follow','service-install','image','1575237oNBsyT','service-uninstall','--caption','9yAhFCw','--status\x20->\x20status','--agent-id','--env','--tail','version','--session-id','reload','log','--level','--handshake-url','--mock-scenario','purge','daemon','5vtKWqv','597541wJKwOq','1657842dswAsO','--stop\x20->\x20stop'];a=function(){return t;};return a();}(function(c,d){const o=b,f=c();while(!![]){try{const g=-parseInt(o(0x111))/0x1+-parseInt(o(0xf2))/0x2+parseInt(o(0xff))/0x3+parseInt(o(0xf3))/0x4+-parseInt(o(0x110))/0x5*(-parseInt(o(0xec))/0x6)+parseInt(o(0xef))/0x7+parseInt(o(0xfa))/0x8*(-parseInt(o(0x102))/0x9);if(g===d)break;else f['push'](f['shift']());}catch(h){f['push'](f['shift']());}}}(a,0xd61ff));export function parseArgs(c){const p=b,d=[...c];if(0x0===d['length']||e(d,'--help')||e(d,'-h'))return{'mode':'help'};if(e(d,'--version')||e(d,'-v'))return{'mode':p(0x107)};if(e(d,'--daemon'))return{'mode':'daemon'};if(e(d,'--status'))return{'mode':'status','deprecated':p(0x103)};if(e(d,'--stop'))return{'mode':'stop','deprecated':p(0xed)};if(e(d,'--refresh'))return{'mode':'refresh','deprecated':'--refresh\x20->\x20refresh'};if(e(d,'--install-service'))return{'mode':p(0xfd),'deprecated':'--install-service\x20->\x20service\x20install'};if(e(d,'--uninstall'))return{'mode':p(0x10e),'deprecated':'--uninstall\x20->\x20purge'};const [f,g]=d;if('status'===f)return{'mode':p(0xf0)};if('stop'===f)return{'mode':'stop'};if('refresh'===f)return{'mode':'refresh'};if('reload'===f)return{'mode':p(0x109),'agentId':n(d,'--agent-id')};if('log'===f)return{'mode':p(0x10a),'agentId':n(d,p(0x104)),'date':n(d,'--date'),'tail':Number(n(d,'-n')??n(d,p(0x106))??0xc8),'follow':e(d,'-f')||e(d,p(0xfc)),'level':n(d,p(0x10b)),'grep':n(d,p(0xf4)),'raw':e(d,p(0xf6)),'list':e(d,'--list')};if(p(0xf1)===f)return{'mode':p(0xf1)};if('purge'===f)return{'mode':'purge'};if(p(0xf8)===f&&'install'===g)return{'mode':p(0xfd)};if(p(0xf8)===f&&'uninstall'===g)return{'mode':p(0x100)};if('connect'===f)return{'mode':'connect','patToken':n(d,'--pat-token'),'env':n(d,'--env'),'handshakeUrl':n(d,p(0x10c)),'frontierUrl':n(d,p(0xee)),'mockScenario':n(d,'--mock-scenario'),'agentId':n(d,'--agent-id')};if('send'===f)return function(k){const q=p,l=k[0x1],m=k[0x2];return[q(0xfe),'file']['includes'](l)&&m?{'mode':'send','kind':l,'target':m,'agentId':n(k,'--agent-id'),'sessionId':n(k,q(0x108)),'caption':n(k,q(0x101)),'name':n(k,'--name'),'groupFile':e(k,'--group-file'),'mime':n(k,'--mime')}:{'mode':'help'};}(d);if(p(0x10f)===f)return{'mode':'spawn-daemon'};const h=n(d,p(0xf7)),j=n(d,'--pair-code');return h&&j?{'mode':p(0xf5),'patToken':h,'pairCode':j,'agentId':n(d,'--agent-id'),'env':n(d,p(0x105)),'handshakeUrl':n(d,'--handshake-url'),'frontierUrl':n(d,'--frontier-url'),'mockScenario':n(d,p(0x10d))}:{'mode':p(0xf9)};}export function printHelp(){const r=b;console[r(0x10a)]('licos-bridge\x20-\x20local\x20bridge\x20daemon\x20for\x20LICOS\x20Agent\x20Service\x0a\x0aPair\x20(paste\x20from\x20cloud\x20UI;\x20start/reuse\x20daemon\x20and\x20deliver\x20pair-code):\x0a\x20\x20npx\x20-y\x20--registry=https://registry.npmmirror.com\x20@kmlckj/licos-bridge@latest\x20--pat-token=<token>\x20--pair-code=<code>\x20--handshake-url=<url>\x0a\x0aDaemon\x20control:\x0a\x20\x20licos-bridge\x20status\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20show\x20daemon\x20status\x0a\x20\x20licos-bridge\x20stop\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20stop\x20daemon\x0a\x20\x20licos-bridge\x20refresh\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20re-detect\x20local\x20agent\x20binaries\x0a\x20\x20licos-bridge\x20reload\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20recycle\x20all\x20agent\x20subprocesses\x0a\x20\x20licos-bridge\x20reload\x20--agent-id\x20<id>\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20recycle\x20one\x20agent\x20subprocess\x0a\x0aView\x20logs:\x0a\x20\x20licos-bridge\x20log\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20bridge\x20last\x20200\x20lines\x0a\x20\x20licos-bridge\x20log\x20--agent-id\x20<id>\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20agent\x20related\x20logs\x0a\x20\x20licos-bridge\x20log\x20[--agent-id\x20<id>]\x20[--date\x20YYYY-MM-DD]\x20\x5c\x0a\x20\x20\x20\x20\x20\x20[-n\x20<N>]\x20[-f]\x20[--level\x20<l>]\x20[--grep\x20<s>]\x20[--raw]\x20[--list]\x0a\x0aUpdate:\x0a\x20\x20licos-bridge\x20update\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20stop\x20daemon\x20and\x20run\x20latest\x20package\x20connect\x0a\x20\x20licos-bridge\x20purge\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20stop\x20daemon\x20+\x20unregister\x20supervisor\x20+\x20remove\x20bridge\x20data\x0a\x0aOS\x20supervisor\x20(auto-start\x20on\x20login):\x0a\x20\x20licos-bridge\x20service\x20install\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20register\x20supervisor\x0a\x20\x20licos-bridge\x20service\x20uninstall\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20unregister\x20supervisor\x0a\x0aReconnect:\x0a\x20\x20licos-bridge\x20connect\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20reconnect\x20using\x20stored\x20PAT\x0a\x20\x20licos-bridge\x20connect\x20--pat-token\x20<token>\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20reconnect\x20using\x20specified\x20PAT\x0a\x20\x20licos-bridge\x20connect\x20--env=dev\x20--handshake-url=<url>\x20\x20\x20\x20\x20\x20\x20\x20\x20reconnect\x20with\x20route\x20override\x0a\x0aSend\x20file\x20/\x20image:\x0a\x20\x20licos-bridge\x20send\x20image\x20<path>\x20--agent-id\x20<id>\x20--session-id\x20<id>\x20[--caption\x20\x22...\x22]\x0a\x20\x20licos-bridge\x20send\x20file\x20\x20<path>\x20--agent-id\x20<id>\x20--session-id\x20<id>\x20[--caption\x20\x22...\x22]\x20[--name\x20\x22report.pdf\x22]\x0a\x20\x20licos-bridge\x20send\x20file\x20<uri>\x20--agent-id\x20<id>\x20--session-id\x20<id>\x20--group-file\x20--mime\x20<mimeType>\x20[--name\x20\x22...\x22]\x0a\x0aPair\x20flags:\x0a\x20\x20--env\x20<value>\x0a\x20\x20--handshake-url\x20<url>\x20\x20\x20\x20\x20\x20\x20required\x20unless\x20LICOS_BRIDGE_HANDSHAKE_URL\x20is\x20set\x20or\x20a\x20saved\x20pairing\x20has\x20it\x0a\x20\x20--frontier-url\x20<url>\x0a\x20\x20env:\x20LICOS_BRIDGE_HANDSHAKE_URL,\x20LICOS_PLATFORM_BASE_URL,\x20AIOS_PLATFORM_BASE_URL\x0a\x20\x20--mock-scenario\x20<name>\x0a\x0aInfo:\x0a\x20\x20licos-bridge\x20--version\x20|\x20-v\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20print\x20current\x20bridge\x20version\x0a\x20\x20licos-bridge\x20--help\x20\x20\x20\x20|\x20-h\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20show\x20this\x20help\x0a\x0aDeprecated\x20flags:\x0a\x20\x20--status\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20->\x20licos-bridge\x20status\x0a\x20\x20--stop\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20->\x20licos-bridge\x20stop\x0a\x20\x20--install-service\x20\x20\x20->\x20licos-bridge\x20service\x20install\x0a\x20\x20--uninstall\x20\x20\x20\x20\x20\x20\x20\x20\x20->\x20licos-bridge\x20purge\x0a\x0aCompatibility:\x0a\x20\x20coze-bridge\x20is\x20provided\x20as\x20a\x20bin\x20alias.\x0a\x0aInternal:\x0a\x20\x20<node>\x20<entry>\x20--daemon\x0a');}function b(c,d){c=c-0xec;const e=a();let f=e[c];return f;}function e(c,d){return c['includes'](d);}function n(c,d){const s=b,f=d+'=',g=c['find'](j=>j['startsWith'](f));if(g)return g['slice'](f[s(0xfb)]);const h=c['indexOf'](d);return h>=0x0&&c[h+0x1]&&!c[h+0x1]['startsWith']('--')?c[h+0x1]:void 0x0;}
1
+ function a(){const t=['4124IYfaKD','--uninstall','install','--stop\x20->\x20stop','--uninstall\x20->\x20purge','daemon','--frontier-url','33160sOWMwX','--refresh\x20->\x20refresh','log','--install-service\x20->\x20service\x20install','6yZxDMH','--mime','reload','--pat-token','205ZWCMmQ','--stop','help','--caption','945387DzerHZ','9Lhcwxl','--env','connect','5931192CPrNKT','9654770Hfgcwo','refresh','file','--agent-id','--pair-code','291280qChnlk','--session-id','status','indexOf','5445041FKMOaP','spawn-daemon','startsWith','stop','service-uninstall','purge'];a=function(){return t;};return a();}function b(c,d){c=c-0xe3;const e=a();let f=e[c];return f;}(function(c,d){const o=b,f=c();while(!![]){try{const g=-parseInt(o(0xed))/0x1+parseInt(o(0xfe))/0x2+-parseInt(o(0xe3))/0x3+parseInt(o(0xf7))/0x4*(parseInt(o(0x106))/0x5)+-parseInt(o(0x102))/0x6*(-parseInt(o(0xf1))/0x7)+-parseInt(o(0xe7))/0x8+parseInt(o(0xe4))/0x9*(parseInt(o(0xe8))/0xa);if(g===d)break;else f['push'](f['shift']());}catch(h){f['push'](f['shift']());}}}(a,0x6eeef));export function parseArgs(c){const p=b,d=[...c];if(0x0===d['length']||e(d,'--help')||e(d,'-h'))return{'mode':'help'};if(e(d,'--version')||e(d,'-v'))return{'mode':'version'};if(e(d,'--daemon'))return{'mode':'daemon'};if(e(d,'--status'))return{'mode':p(0xef),'deprecated':'--status\x20->\x20status'};if(e(d,p(0x107)))return{'mode':p(0xf4),'deprecated':p(0xfa)};if(e(d,'--refresh'))return{'mode':'refresh','deprecated':p(0xff)};if(e(d,'--install-service'))return{'mode':'service-install','deprecated':p(0x101)};if(e(d,p(0xf8)))return{'mode':p(0xf6),'deprecated':p(0xfb)};const [f,g]=d;if('status'===f)return{'mode':'status'};if(p(0xf4)===f)return{'mode':'stop'};if('refresh'===f)return{'mode':p(0xe9)};if(p(0x104)===f)return{'mode':p(0x104),'agentId':n(d,'--agent-id')};if(p(0x100)===f)return{'mode':'log','agentId':n(d,'--agent-id'),'date':n(d,'--date'),'tail':Number(n(d,'-n')??n(d,'--tail')??0xc8),'follow':e(d,'-f')||e(d,'--follow'),'level':n(d,'--level'),'grep':n(d,'--grep'),'raw':e(d,'--raw'),'list':e(d,'--list')};if('update'===f)return{'mode':'update'};if('purge'===f)return{'mode':p(0xf6)};if('service'===f&&p(0xf9)===g)return{'mode':'service-install'};if('service'===f&&'uninstall'===g)return{'mode':p(0xf5)};if(p(0xe6)===f)return{'mode':'connect','patToken':n(d,'--pat-token'),'env':n(d,p(0xe5)),'handshakeUrl':n(d,'--handshake-url'),'frontierUrl':n(d,'--frontier-url'),'mockScenario':n(d,'--mock-scenario'),'agentId':n(d,'--agent-id')};if('send'===f)return function(k){const q=p,l=k[0x1],m=k[0x2];return['image',q(0xea)]['includes'](l)&&m?{'mode':'send','kind':l,'target':m,'agentId':n(k,'--agent-id'),'sessionId':n(k,q(0xee)),'caption':n(k,q(0x109)),'name':n(k,'--name'),'groupFile':e(k,'--group-file'),'mime':n(k,q(0x103))}:{'mode':q(0x108)};}(d);if(p(0xfc)===f)return{'mode':p(0xf2)};const h=n(d,p(0x105)),j=n(d,p(0xec));return h&&j?{'mode':'pair','patToken':h,'pairCode':j,'agentId':n(d,p(0xeb)),'env':n(d,'--env'),'handshakeUrl':n(d,'--handshake-url'),'frontierUrl':n(d,p(0xfd)),'mockScenario':n(d,'--mock-scenario')}:{'mode':'help'};}export function printHelp(){const r=b;console[r(0x100)]('licos-bridge\x20-\x20local\x20bridge\x20daemon\x20for\x20LICOS\x20Agent\x20Service\x0a\x0aPair\x20(paste\x20from\x20cloud\x20UI;\x20start/reuse\x20daemon\x20and\x20deliver\x20pair-code):\x0a\x20\x20npx\x20-y\x20--registry=https://registry.npmmirror.com\x20@kmlckj/licos-bridge@latest\x20--pat-token=<token>\x20--pair-code=<code>\x20--handshake-url=<url>\x0a\x0aDaemon\x20control:\x0a\x20\x20licos-bridge\x20status\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20show\x20daemon\x20status\x0a\x20\x20licos-bridge\x20stop\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20stop\x20daemon\x0a\x20\x20licos-bridge\x20refresh\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20re-detect\x20local\x20agent\x20binaries\x0a\x20\x20licos-bridge\x20reload\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20recycle\x20all\x20agent\x20subprocesses\x0a\x20\x20licos-bridge\x20reload\x20--agent-id\x20<id>\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20recycle\x20one\x20agent\x20subprocess\x0a\x0aView\x20logs:\x0a\x20\x20licos-bridge\x20log\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20bridge\x20last\x20200\x20lines\x0a\x20\x20licos-bridge\x20log\x20--agent-id\x20<id>\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20agent\x20related\x20logs\x0a\x20\x20licos-bridge\x20log\x20[--agent-id\x20<id>]\x20[--date\x20YYYY-MM-DD]\x20\x5c\x0a\x20\x20\x20\x20\x20\x20[-n\x20<N>]\x20[-f]\x20[--level\x20<l>]\x20[--grep\x20<s>]\x20[--raw]\x20[--list]\x0a\x0aUpdate:\x0a\x20\x20licos-bridge\x20update\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20stop\x20daemon\x20and\x20run\x20latest\x20package\x20connect\x0a\x20\x20licos-bridge\x20purge\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20stop\x20daemon\x20+\x20unregister\x20supervisor\x20+\x20remove\x20bridge\x20data\x0a\x0aOS\x20supervisor\x20(auto-start\x20on\x20login):\x0a\x20\x20licos-bridge\x20service\x20install\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20register\x20supervisor\x0a\x20\x20licos-bridge\x20service\x20uninstall\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20unregister\x20supervisor\x0a\x0aReconnect:\x0a\x20\x20licos-bridge\x20connect\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20reconnect\x20using\x20stored\x20PAT\x0a\x20\x20licos-bridge\x20connect\x20--pat-token\x20<token>\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20reconnect\x20using\x20specified\x20PAT\x0a\x20\x20licos-bridge\x20connect\x20--env=dev\x20--handshake-url=<url>\x20\x20\x20\x20\x20\x20\x20\x20\x20reconnect\x20with\x20route\x20override\x0a\x0aSend\x20file\x20/\x20image:\x0a\x20\x20licos-bridge\x20send\x20image\x20<path>\x20--agent-id\x20<id>\x20--session-id\x20<id>\x20[--caption\x20\x22...\x22]\x0a\x20\x20licos-bridge\x20send\x20file\x20\x20<path>\x20--agent-id\x20<id>\x20--session-id\x20<id>\x20[--caption\x20\x22...\x22]\x20[--name\x20\x22report.pdf\x22]\x0a\x20\x20licos-bridge\x20send\x20file\x20<uri>\x20--agent-id\x20<id>\x20--session-id\x20<id>\x20--group-file\x20--mime\x20<mimeType>\x20[--name\x20\x22...\x22]\x0a\x0aPair\x20flags:\x0a\x20\x20--env\x20<value>\x0a\x20\x20--handshake-url\x20<url>\x20\x20\x20\x20\x20\x20\x20required\x20unless\x20LICOS_BRIDGE_HANDSHAKE_URL\x20is\x20set\x20or\x20a\x20saved\x20pairing\x20has\x20it\x0a\x20\x20--frontier-url\x20<url>\x0a\x20\x20env:\x20LICOS_BRIDGE_HANDSHAKE_URL,\x20LICOS_PLATFORM_BASE_URL,\x20AIOS_PLATFORM_BASE_URL\x0a\x20\x20--mock-scenario\x20<name>\x0a\x0aInfo:\x0a\x20\x20licos-bridge\x20--version\x20|\x20-v\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20print\x20current\x20bridge\x20version\x0a\x20\x20licos-bridge\x20--help\x20\x20\x20\x20|\x20-h\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20show\x20this\x20help\x0a\x0aDeprecated\x20flags:\x0a\x20\x20--status\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20->\x20licos-bridge\x20status\x0a\x20\x20--stop\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20->\x20licos-bridge\x20stop\x0a\x20\x20--install-service\x20\x20\x20->\x20licos-bridge\x20service\x20install\x0a\x20\x20--uninstall\x20\x20\x20\x20\x20\x20\x20\x20\x20->\x20licos-bridge\x20purge\x0a\x0aInternal:\x0a\x20\x20<node>\x20<entry>\x20--daemon\x0a');}function e(c,d){return c['includes'](d);}function n(c,d){const s=b,f=d+'=',g=c['find'](j=>j['startsWith'](f));if(g)return g['slice'](f['length']);const h=c[s(0xf0)](d);return h>=0x0&&c[h+0x1]&&!c[h+0x1][s(0xf3)]('--')?c[h+0x1]:void 0x0;}
package/dist/lib/cloud.js CHANGED
@@ -1 +1 @@
1
- const E=f;function b(){const Z=['1592256hBdDKf','stop','application/json','method','10436CdSTCX','logger','handlers','120bhqzPD','platform','103662InWxZD','sendNotification','reject','accessToken','open','restore\x20pair\x20failed','pending','frontierUrl','session/*','frontier\x20error','delete','pairing','agentManager','set','data','resolve','patToken','version','handshake','1707525quVaAX','readyState','closing\x20frontier','restored','Bearer\x20','pairCode','pair','stringify','reconnect','now','2079760zYYCfe','https://www.licos.com','frontier\x20closed','_agent/client_request','handshakeUrl','2.0','get','sendBridgeFile','setAgentManager','59tLDoIj','catch','agentId','6uHvMKR','message','1713990mJZQQp','configFile','mockScenario','550543CIglXp','heartbeatTimer','env','close','handleFrame'];b=function(){return Z;};return b();}(function(v,w){const D=f,x=v();while(!![]){try{const y=-parseInt(D(0x108))/0x1*(parseInt(D(0x119))/0x2)+parseInt(D(0x115))/0x3+-parseInt(D(0xff))/0x4+parseInt(D(0xf5))/0x5+parseInt(D(0x10b))/0x6*(-parseInt(D(0x110))/0x7)+-parseInt(D(0x11c))/0x8*(-parseInt(D(0x11e))/0x9)+parseInt(D(0x10d))/0xa;if(y===w)break;else x['push'](x['shift']());}catch(z){x['push'](x['shift']());}}}(b,0x4bad7));import j from'ws';import{detectFrameworks as k}from'./frameworks.js';import{joinUrl as l,readJson as m,writeJson as q}from'./utils.js';import{resolvePaths as u}from'./paths.js';const s=E(0x100),a='/api/v1/workbench/local-agent-bridge/handshake',c=['LICOS_BRIDGE_HANDSHAKE_URL','LICOS_PLATFORM_BASE_URL','AIOS_PLATFORM_BASE_URL'];function f(a,c){a=a-0xe5;const d=b();let e=d[a];return e;}export class CloudConnector{constructor({logger:v}){const F=E;this['logger']=v,this['ws']=void 0x0,this['pairing']=void 0x0,this[F(0x11b)]=new Map(),this[F(0xe8)]=new Map(),this['heartbeatTimer']=void 0x0,this[F(0xee)]=void 0x0;}[E(0x107)](v){this['agentManager']=v;}['on'](v,w){const G=E;this[G(0x11b)][G(0xef)](v,w);}async['restore'](){const H=E,v=await m(u()[H(0x10e)],{})['catch'](()=>({}));v?.[H(0xed)]?.['patToken']&&v?.[H(0xed)]?.['pairCode']&&await this['pair'](v[H(0xed)],{'restored':!0x0})[H(0x109)](w=>{const I=H;this[I(0x11a)]?.(I(0xe7),{'error':String(w)});});}async[E(0xfb)](v,w={}){const J=E;this['pairing']={'handshakeUrl':h(v,w),'frontierUrl':v['frontierUrl'],'env':v['env'],'mockScenario':v[J(0x10f)],'agentId':v['agentId'],'patToken':v['patToken'],'pairCode':v['pairCode']},await q(u()[J(0x10e)],{'pairing':this['pairing'],'updatedAt':new Date()['toISOString']()},0x180);const x=await this[J(0xf4)](),y=v['frontierUrl']||g(x,[J(0xe9),'frontier_url']);return y&&await this['connect'](y,x),!w[J(0xf8)]&&v[J(0x10a)]&&this[J(0x11f)]('_agent/pair',{'agentId':v['agentId']})['catch'](()=>{}),{'ok':!0x0,'deviceId':g(x,['deviceId','device_id']),'bridgeClientId':g(x,['bridgeClientId','bridge_client_id']),'frontierConnected':Boolean(this['ws']&&this['ws'][J(0xf6)]===j['OPEN'])};}async['connectStored'](v={}){const K=E,w=await m(u()[K(0x10e)],{})['catch'](()=>({})),x=w?.[K(0xed)]??{},y=v['patToken']||x['patToken'];if(!y)throw new Error('connect\x20requires\x20stored\x20pat-token\x20or\x20--pat-token');return this['pair']({...x,...v,'patToken':y,'pairCode':v[K(0xfa)]??x['pairCode']},{'connectOnly':!0x0});}async[E(0xf4)](){const L=E,v=await k(),w=function(z){if(!z)throw new Error('handshake-url\x20is\x20required;\x20copy\x20the\x20connection\x20command\x20from\x20the\x20current\x20platform\x20or\x20set\x20LICOS_BRIDGE_HANDSHAKE_URL');return/\/handshake\/?$/['test'](z)?z:l(z,a);}(this['pairing'][L(0x103)]),x=await fetch(w,{'method':'POST','headers':{'content-type':L(0x117),'authorization':L(0xf9)+this[L(0xed)][L(0xf2)],...this[L(0xed)][L(0x112)]?{'x-licos-env':this['pairing']['env']}:{},...this['pairing'][L(0x10f)]?{'x-mock-scenario':this[L(0xed)]['mockScenario']}:{}},'body':JSON['stringify']({'pairCode':this[L(0xed)]['pairCode'],'pair_code':this[L(0xed)]['pairCode'],'agentId':this[L(0xed)]['agentId'],'agent_id':this[L(0xed)]['agentId'],'mockScenario':this[L(0xed)][L(0x10f)],'mock_scenario':this[L(0xed)][L(0x10f)],'device':{'hostname':process.env.COMPUTERNAME||process.env.HOSTNAME||'','platform':process[L(0x11d)],'arch':process['arch'],'nodeVersion':process[L(0xf3)]},'frameworks':v})});if(!x['ok'])throw new Error('handshake\x20failed:\x20HTTP\x20'+x['status']+'\x20'+await x['text']());const y=await x['json']();return y[L(0xf0)]??y;}async['connect'](v,w){const M=E;await this[M(0x116)](M(0xfd));const x=g(w,[M(0xe5),'access_token','frontierToken','frontier_token'])||this[M(0xed)]['patToken'];this['ws']=new j(v,{'headers':{'authorization':M(0xf9)+x,...this['pairing']['env']?{'x-licos-env':this['pairing']['env']}:{}}}),this['ws']['on'](M(0xe6),()=>{const N=M;this['logger']?.('frontier\x20connected',{'frontierUrl':v}),this['sendHealth']()[N(0x109)](()=>{}),this['heartbeatTimer']=setInterval(()=>this['sendHealth']()[N(0x109)](()=>{}),0x2710);}),this['ws']['on'](M(0x10c),y=>{const O=M;this[O(0x114)](y['toString']('utf8'))[O(0x109)](z=>{this['logger']?.('frontier\x20frame\x20failed',{'error':String(z)});});}),this['ws']['on']('close',(y,z)=>{const P=M;this['logger']?.(P(0x101),{'code':y,'reason':z['toString']()}),clearInterval(this['heartbeatTimer']),this['heartbeatTimer']=void 0x0;}),this['ws']['on']('error',y=>{const Q=M;this[Q(0x11a)]?.(Q(0xeb),{'error':String(y)});});}async[E(0x114)](v){const R=E,w=JSON['parse'](v);if(void 0x0!==w['id']&&(void 0x0!==w['result']||void 0x0!==w['error'])){const z=this['pending']['get'](w['id']);return void(z&&(this[R(0xe8)]['delete'](w['id']),w['error']?z[R(0x120)](new Error(w['error']['message']||JSON['stringify'](w['error']))):z[R(0xf1)](w['result'])));}const x=w[R(0x118)]||w['type'],y=this['handlers'][R(0x105)](x)||(x?.['startsWith']('session/')?this['handlers']['get'](R(0xea)):void 0x0);if(y)try{const A=await y(w['params']??w['content']??{});void 0x0!==w['id']&&await this['sendResponse'](w['id'],A);}catch(B){if(void 0x0===w['id'])throw B;await this['sendResponse'](w['id'],void 0x0,{'code':-0x7f5b,'message':B['message']||String(B)});}else void 0x0!==w['id']&&await this['sendResponse'](w['id'],void 0x0,{'code':-0x7f59,'message':'method\x20not\x20found:\x20'+x});}async['sendHealth'](){await this['sendNotification']('_agent/health',{'agents':this['agentManager']?.['health']()??[],'ts':Date['now']()});}async['sendNotification'](v,w){await this['sendFrame']({'jsonrpc':'2.0','method':v,'params':w});}async['sendResponse'](v,w,x){const S=E;await this['sendFrame'](x?{'jsonrpc':S(0x104),'id':v,'error':x}:{'jsonrpc':'2.0','id':v,'result':w});}async['sendRequest'](v,w,x=0x7530){const T=E,y=Date[T(0xfe)]()+'-'+Math['random']()['toString'](0x10)['slice'](0x2);return await this['sendFrame']({'jsonrpc':'2.0','id':y,'method':v,'params':w}),new Promise((z,A)=>{const B=setTimeout(()=>{const U=f;this['pending'][U(0xec)](y),A(new Error(v+'\x20timed\x20out'));},x);this['pending']['set'](y,{'resolve':C=>{clearTimeout(B),z(C);},'reject':C=>{clearTimeout(B),A(C);}});});}async['forwardClientRequest'](v,w,x){const V=E;if(this['isConnected']())return this['sendRequest'](V(0x102),{'agentId':v[V(0x10a)],'method':w,'params':x})['catch'](()=>{});}async[E(0x106)](v){if(!this['isConnected']())throw new Error('frontier\x20is\x20not\x20connected');return this['sendRequest']('_agent/sendFile',v,0x1d4c0);}async['sendFrame'](v){const W=E;if(!this['isConnected']())throw new Error('frontier\x20is\x20not\x20connected');this['ws']['send'](JSON[W(0xfc)](v));}['isConnected'](){const X=E;return Boolean(this['ws']&&this['ws'][X(0xf6)]===j['OPEN']);}async['stop'](v){const Y=E;clearInterval(this[Y(0x111)]),this[Y(0x111)]=void 0x0,this['ws']&&(this['logger']?.(Y(0xf7),{'reason':v}),this['ws'][Y(0x113)](),this['ws']=void 0x0);}}function h(v,w){const x=p(v?.['handshakeUrl']);if(x){if((w['restored']||w['connectOnly'])&&function(z){const A=z['replace'](/\/+$/,'');return A===s||A===''+s+a;}(x)){const z=d();if(z)return z;throw new Error('stored\x20handshake-url\x20points\x20to\x20legacy\x20default\x20https://www.licos.com;\x20copy\x20a\x20fresh\x20connection\x20command\x20from\x20the\x20target\x20platform\x20or\x20set\x20LICOS_BRIDGE_HANDSHAKE_URL');}return x;}const y=d();if(y)return y;throw new Error('handshake-url\x20is\x20required;\x20copy\x20the\x20connection\x20command\x20from\x20the\x20current\x20platform\x20or\x20set\x20LICOS_BRIDGE_HANDSHAKE_URL');}function d(){for(const v of c){const w=p(process.env[v]);if(w)return w;}}function p(v){if(null!=v)return String(v)['trim']()||void 0x0;}function g(v,w){for(const x of w)if(void 0x0!==v?.[x]&&null!==v[x]&&''!==v[x])return v[x];}
1
+ const E=f;(function(v,w){const D=f,x=v();while(!![]){try{const y=-parseInt(D(0x147))/0x1+parseInt(D(0x132))/0x2*(-parseInt(D(0x136))/0x3)+-parseInt(D(0x152))/0x4*(parseInt(D(0x168))/0x5)+-parseInt(D(0x150))/0x6+-parseInt(D(0x160))/0x7*(parseInt(D(0x130))/0x8)+parseInt(D(0x163))/0x9*(-parseInt(D(0x133))/0xa)+-parseInt(D(0x159))/0xb*(-parseInt(D(0x15c))/0xc);if(y===w)break;else x['push'](x['shift']());}catch(z){x['push'](x['shift']());}}}(b,0xd8e05));import j from'ws';function f(a,c){a=a-0x12d;const d=b();let e=d[a];return e;}import{detectFrameworks as k}from'./frameworks.js';import{joinUrl as l,readJson as m,writeJson as q}from'./utils.js';import{resolvePaths as u}from'./paths.js';const s=E(0x165),a='/api/v1/workbench/local-agent-bridge/handshake',c=['LICOS_BRIDGE_HANDSHAKE_URL','LICOS_PLATFORM_BASE_URL',E(0x14f)];export class CloudConnector{constructor({logger:v}){const F=E;this[F(0x14e)]=v,this['ws']=void 0x0,this['pairing']=void 0x0,this['handlers']=new Map(),this['pending']=new Map(),this['heartbeatTimer']=void 0x0,this[F(0x154)]=void 0x0;}['setAgentManager'](v){this['agentManager']=v;}['on'](v,w){const G=E;this['handlers'][G(0x13f)](v,w);}async['restore'](){const H=E,v=await m(u()['configFile'],{})['catch'](()=>({}));v?.['pairing']?.['patToken']&&v?.['pairing']?.[H(0x12d)]&&await this['pair'](v['pairing'],{'restored':!0x0})['catch'](w=>{const I=H;this[I(0x14e)]?.(I(0x153),{'error':String(w)});});}async['pair'](v,w={}){const J=E;this['pairing']={'handshakeUrl':h(v,w),'frontierUrl':v['frontierUrl'],'env':v[J(0x12f)],'mockScenario':v['mockScenario'],'agentId':v['agentId'],'patToken':v[J(0x135)],'pairCode':v[J(0x12d)]},await q(u()[J(0x161)],{'pairing':this['pairing'],'updatedAt':new Date()['toISOString']()},0x180);const x=await this['handshake'](),y=v['frontierUrl']||g(x,['frontierUrl',J(0x15d)]);return y&&await this['connect'](y,x),!w['restored']&&v['agentId']&&this['sendNotification']('_agent/pair',{'agentId':v['agentId']})['catch'](()=>{}),{'ok':!0x0,'deviceId':g(x,['deviceId',J(0x158)]),'bridgeClientId':g(x,[J(0x14b),J(0x148)]),'frontierConnected':Boolean(this['ws']&&this['ws']['readyState']===j['OPEN'])};}async[E(0x14c)](v={}){const K=E,w=await m(u()[K(0x161)],{})['catch'](()=>({})),x=w?.['pairing']??{},y=v[K(0x135)]||x[K(0x135)];if(!y)throw new Error('connect\x20requires\x20stored\x20pat-token\x20or\x20--pat-token');return this['pair']({...x,...v,'patToken':y,'pairCode':v['pairCode']??x[K(0x12d)]},{'connectOnly':!0x0});}async['handshake'](){const L=E,v=await k(),w=function(z){if(!z)throw new Error('handshake-url\x20is\x20required;\x20copy\x20the\x20connection\x20command\x20from\x20the\x20current\x20platform\x20or\x20set\x20LICOS_BRIDGE_HANDSHAKE_URL');return/\/handshake\/?$/['test'](z)?z:l(z,a);}(this['pairing'][L(0x157)]),x=await fetch(w,{'method':'POST','headers':{'content-type':'application/json','authorization':'Bearer\x20'+this[L(0x15f)]['patToken'],...this[L(0x15f)][L(0x12f)]?{'x-licos-env':this['pairing']['env']}:{},...this['pairing']['mockScenario']?{'x-mock-scenario':this['pairing'][L(0x15e)]}:{}},'body':JSON[L(0x164)]({'pairCode':this['pairing']['pairCode'],'pair_code':this[L(0x15f)]['pairCode'],'agentId':this['pairing']['agentId'],'agent_id':this[L(0x15f)]['agentId'],'mockScenario':this['pairing']['mockScenario'],'mock_scenario':this['pairing']['mockScenario'],'device':{'hostname':process.env.COMPUTERNAME||process.env.HOSTNAME||'','platform':process['platform'],'arch':process['arch'],'nodeVersion':process[L(0x131)]},'frameworks':v})});if(!x['ok'])throw new Error('handshake\x20failed:\x20HTTP\x20'+x['status']+'\x20'+await x[L(0x13d)]());const y=await x['json']();return y['data']??y;}async['connect'](v,w){const M=E;await this['stop'](M(0x167));const x=g(w,['accessToken',M(0x13e),'frontierToken','frontier_token'])||this[M(0x15f)]['patToken'];this['ws']=new j(v,{'headers':{'authorization':'Bearer\x20'+x,...this[M(0x15f)]['env']?{'x-licos-env':this['pairing'][M(0x12f)]}:{}}}),this['ws']['on'](M(0x137),()=>{const N=M;this['logger']?.(N(0x149),{'frontierUrl':v}),this['sendHealth']()[N(0x12e)](()=>{}),this['heartbeatTimer']=setInterval(()=>this[N(0x166)]()['catch'](()=>{}),0x2710);}),this['ws']['on']('message',y=>{const O=M;this['handleFrame'](y['toString'](O(0x144)))['catch'](z=>{const P=O;this[P(0x14e)]?.('frontier\x20frame\x20failed',{'error':String(z)});});}),this['ws']['on'](M(0x14d),(y,z)=>{this['logger']?.('frontier\x20closed',{'code':y,'reason':z['toString']()}),clearInterval(this['heartbeatTimer']),this['heartbeatTimer']=void 0x0;}),this['ws']['on']('error',y=>{this['logger']?.('frontier\x20error',{'error':String(y)});});}async[E(0x140)](v){const Q=E,w=JSON['parse'](v);if(void 0x0!==w['id']&&(void 0x0!==w[Q(0x141)]||void 0x0!==w['error'])){const z=this['pending'][Q(0x138)](w['id']);return void(z&&(this['pending']['delete'](w['id']),w['error']?z['reject'](new Error(w['error']['message']||JSON['stringify'](w[Q(0x146)]))):z['resolve'](w['result'])));}const x=w['method']||w['type'],y=this['handlers']['get'](x)||(x?.[Q(0x162)]('session/')?this[Q(0x155)][Q(0x138)]('session/*'):void 0x0);if(y)try{const A=await y(w['params']??w['content']??{});void 0x0!==w['id']&&await this['sendResponse'](w['id'],A);}catch(B){if(void 0x0===w['id'])throw B;await this['sendResponse'](w['id'],void 0x0,{'code':-0x7f5b,'message':B['message']||String(B)});}else void 0x0!==w['id']&&await this[Q(0x13a)](w['id'],void 0x0,{'code':-0x7f59,'message':Q(0x143)+x});}async[E(0x166)](){const R=E;await this['sendNotification']('_agent/health',{'agents':this['agentManager']?.[R(0x139)]()??[],'ts':Date[R(0x15b)]()});}async['sendNotification'](v,w){await this['sendFrame']({'jsonrpc':'2.0','method':v,'params':w});}async[E(0x13a)](v,w,x){const S=E;await this['sendFrame'](x?{'jsonrpc':S(0x13c),'id':v,'error':x}:{'jsonrpc':'2.0','id':v,'result':w});}async[E(0x142)](v,w,x=0x7530){const T=E,y=Date[T(0x15b)]()+'-'+Math[T(0x145)]()['toString'](0x10)['slice'](0x2);return await this['sendFrame']({'jsonrpc':'2.0','id':y,'method':v,'params':w}),new Promise((z,A)=>{const B=setTimeout(()=>{this['pending']['delete'](y),A(new Error(v+'\x20timed\x20out'));},x);this['pending']['set'](y,{'resolve':C=>{clearTimeout(B),z(C);},'reject':C=>{clearTimeout(B),A(C);}});});}async['forwardClientRequest'](v,w,x){const U=E;if(this[U(0x169)]())return this[U(0x142)]('_agent/client_request',{'agentId':v['agentId'],'method':w,'params':x})['catch'](()=>{});}async['sendBridgeFile'](v){const V=E;if(!this['isConnected']())throw new Error('frontier\x20is\x20not\x20connected');return this[V(0x142)](V(0x13b),v,0x1d4c0);}async[E(0x151)](v){if(!this['isConnected']())throw new Error('frontier\x20is\x20not\x20connected');this['ws']['send'](JSON['stringify'](v));}['isConnected'](){return Boolean(this['ws']&&this['ws']['readyState']===j['OPEN']);}async['stop'](v){const W=E;clearInterval(this['heartbeatTimer']),this[W(0x156)]=void 0x0,this['ws']&&(this[W(0x14e)]?.('closing\x20frontier',{'reason':v}),this['ws']['close'](),this['ws']=void 0x0);}}function b(){const Z=['frontier_url','mockScenario','pairing','851053cSSXxg','configFile','startsWith','7930044vaXrJR','stringify','https://www.licos.com','sendHealth','reconnect','228885ejOKUR','isConnected','pairCode','catch','env','24ENCfon','version','138vSGZuh','20vGuteH','handshake-url\x20is\x20required;\x20copy\x20the\x20connection\x20command\x20from\x20the\x20current\x20platform\x20or\x20set\x20LICOS_BRIDGE_HANDSHAKE_URL','patToken','60099QMltqz','open','get','health','sendResponse','_agent/sendFile','2.0','text','access_token','set','handleFrame','result','sendRequest','method\x20not\x20found:\x20','utf8','random','error','1667161FPafES','bridge_client_id','frontier\x20connected','replace','bridgeClientId','connectStored','close','logger','AIOS_PLATFORM_BASE_URL','6307554tTeaXL','sendFrame','16vJzQFs','restore\x20pair\x20failed','agentManager','handlers','heartbeatTimer','handshakeUrl','device_id','297fsoslJ','connectOnly','now','3244044kAJOkW'];b=function(){return Z;};return b();}function h(v,w){const X=E,x=p(v?.[X(0x157)]);if(x){if((w['restored']||w[X(0x15a)])&&function(z){const Y=X,A=z[Y(0x14a)](/\/+$/,'');return A===s||A===''+s+a;}(x)){const z=d();if(z)return z;throw new Error('stored\x20handshake-url\x20points\x20to\x20legacy\x20default\x20https://www.licos.com;\x20copy\x20a\x20fresh\x20connection\x20command\x20from\x20the\x20target\x20platform\x20or\x20set\x20LICOS_BRIDGE_HANDSHAKE_URL');}return x;}const y=d();if(y)return y;throw new Error(X(0x134));}function d(){for(const v of c){const w=p(process.env[v]);if(w)return w;}}function p(v){if(null!=v)return String(v)['trim']()||void 0x0;}function g(v,w){for(const x of w)if(void 0x0!==v?.[x]&&null!==v[x]&&''!==v[x])return v[x];}
@@ -1 +1 @@
1
- (function(z,A){const N=f,B=z();while(!![]){try{const C=parseInt(N(0x123))/0x1+parseInt(N(0x127))/0x2*(parseInt(N(0x122))/0x3)+-parseInt(N(0x13b))/0x4*(-parseInt(N(0x149))/0x5)+-parseInt(N(0x128))/0x6+-parseInt(N(0x12f))/0x7*(parseInt(N(0x14c))/0x8)+parseInt(N(0x12e))/0x9+-parseInt(N(0x135))/0xa;if(C===A)break;else B['push'](B['shift']());}catch(D){B['push'](B['shift']());}}}(b,0xafcf7));import{createServer as g}from'node:http';function b(){const W=['68wonoEL','reason','close','_agent/getFileTree','/connect','end','authorization','utf8','connectStored','configFile','ipc\x20request\x20failed','listen','logFile','_agent/health','244905KIPVWw','ipc\x20stop','health','1544YQZTiQ','stopAll','toString','bridgeRoot','port','_agent/getFileContent','method','handleSession','GET','POST','717NodcYt','245043Hbxxwm','writeHead','/reload','session/new','9648dmpcEg','1311462XFVnQV','session/prompt','session/cancel','error','tokenFile','_agent/update','3821229tpCnsN','6587MdAaIY','not\x20found','restore','getFileContent','data','Bearer\x20','15349280ivRvTo','address','length','pid','isConnected','url'];b=function(){return W;};return b();}function f(a,c){a=a-0x11c;const d=b();let e=d[a];return e;}import{randomBytes as h}from'node:crypto';import{detectFrameworks as j}from'./frameworks.js';import{AgentManager as k}from'./agent-manager.js';import{CloudConnector as m}from'./cloud.js';import{resolvePaths as q}from'./paths.js';import{appendLog as u,ensureDir as v,readText as w,writeJson as x,writePrivateText as y}from'./utils.js';export async function startDaemonServer(){const O=f,z=q();await v(z[O(0x14f)]),await v(z['agentsRoot']);const A=(F,G)=>u(z[O(0x147)],F,G)['catch'](()=>{}),B=new m({'logger':A}),C=new k({'cloud':B,'logger':A});B['setAgentManager'](C),await C['loadPersistedAgents'](),B['on']('_agent/create',F=>C['createOrUpdate'](F)),B['on']('_agent/detail',F=>C['detail'](F)),B['on'](O(0x12d),F=>C['createOrUpdate'](F)),B['on']('_agent/disconnect',async F=>(await C['disconnect'](F['agentId'],F[O(0x13c)]),{'ok':!0x0})),B['on'](O(0x148),()=>({'agents':C['health']()})),B['on'](O(0x13e),F=>C['getFileTree'](F)),B['on'](O(0x11d),F=>C[O(0x132)](F)),B['on']('_agent/listSkills',F=>C['listSkills'](F)),B['on']('_agent/addSkills',F=>C['addSkills'](F)),B['on']('_agent/removeSkills',F=>C['removeSkills'](F)),B['on']('session/*',F=>C[O(0x11f)](F[O(0x11e)]||F['_method']||'session/prompt',F)),B['on'](O(0x126),F=>C[O(0x11f)]('session/new',F)),B['on'](O(0x129),F=>C['handleSession']('session/prompt',F)),B['on'](O(0x12a),F=>C[O(0x11f)](O(0x12a),F));const D=await async function(F){const P=O,G=await w(F[P(0x12c)]);if(G?.['trim']())return G['trim']();const H=h(0x18)[P(0x14e)]('hex');return await y(F['tokenFile'],H),await x(F[P(0x144)],{'createdAt':new Date()['toISOString']()},0x180),H;}(z),E=g(async(F,G)=>{const T=O;try{if(!function(I,J){const Q=f;return(I['headers'][Q(0x141)]||'')===Q(0x134)+J;}(F,D))return p(G,0x191,{'ok':!0x1,'error':'unauthorized'});const H=await function(I){return new Promise((J,K)=>{const R=f,L=[];I['on'](R(0x133),M=>L['push'](M)),I['on'](R(0x12b),K),I['on']('end',()=>{const S=R;if(0x0===L[S(0x137)])return J({});const M=Buffer['concat'](L)['toString'](S(0x142));J(M?JSON['parse'](M):{});});});}(F);if(T(0x120)===F['method']&&'/status'===F[T(0x13a)])return p(G,0xc8,{'ok':!0x0,'pid':process[T(0x138)],'frontierConnected':B[T(0x139)](),'frameworks':await j(),'agents':C[T(0x14b)]()});if('POST'===F[T(0x11e)]&&'/pair'===F['url'])return p(G,0xc8,await B['pair'](H));if(T(0x121)===F['method']&&T(0x13f)===F[T(0x13a)])return p(G,0xc8,await B[T(0x143)](H));if('POST'===F['method']&&'/refresh'===F[T(0x13a)])return p(G,0xc8,{'ok':!0x0,'frameworks':await j()});if('POST'===F[T(0x11e)]&&T(0x125)===F['url'])return p(G,0xc8,await C['reload'](H['agentId']));if(T(0x121)===F[T(0x11e)]&&'/send'===F[T(0x13a)])return p(G,0xc8,await B['sendBridgeFile'](H));if('POST'===F['method']&&'/stop'===F['url'])return p(G,0xc8,{'ok':!0x0}),await B['stop'](T(0x14a)),await C[T(0x14d)]('ipc\x20stop'),void E[T(0x13d)](()=>process['exit'](0x0));p(G,0x194,{'ok':!0x1,'error':T(0x130)});}catch(I){await A(T(0x145),{'url':F['url'],'error':String(I)}),p(G,0x1f4,{'ok':!0x1,'error':I['message']||String(I)});}});E[O(0x146)](0x0,'127.0.0.1',async()=>{const U=O,F=E[U(0x136)]();await y(z['portFile'],String(F[U(0x11c)])),await y(z['pidFile'],String(process['pid'])),await A('daemon\x20started',{'pid':process['pid'],'port':F[U(0x11c)]}),await B[U(0x131)]();});}function p(z,A,B){const V=f;z[V(0x124)](A,{'content-type':'application/json;\x20charset=utf-8'}),z[V(0x140)](JSON['stringify'](B));}
1
+ (function(z,A){const N=f,B=z();while(!![]){try{const C=-parseInt(N(0x1fd))/0x1+parseInt(N(0x1eb))/0x2*(-parseInt(N(0x1d9))/0x3)+parseInt(N(0x1d7))/0x4+parseInt(N(0x206))/0x5+-parseInt(N(0x1da))/0x6+parseInt(N(0x203))/0x7+-parseInt(N(0x204))/0x8*(parseInt(N(0x1f7))/0x9);if(C===A)break;else B['push'](B['shift']());}catch(D){B['push'](B['shift']());}}}(b,0x31dcc));import{createServer as g}from'node:http';import{randomBytes as h}from'node:crypto';import{detectFrameworks as j}from'./frameworks.js';import{AgentManager as k}from'./agent-manager.js';import{CloudConnector as m}from'./cloud.js';import{resolvePaths as q}from'./paths.js';import{appendLog as u,ensureDir as v,readText as w,writeJson as x,writePrivateText as y}from'./utils.js';function f(a,c){a=a-0x1d4;const d=b();let e=d[a];return e;}export async function startDaemonServer(){const O=f,z=q();await v(z['bridgeRoot']),await v(z['agentsRoot']);const A=(F,G)=>u(z[O(0x1dd)],F,G)[O(0x1dc)](()=>{}),B=new m({'logger':A}),C=new k({'cloud':B,'logger':A});B[O(0x1d8)](C),await C[O(0x1ee)](),B['on']('_agent/create',F=>C['createOrUpdate'](F)),B['on']('_agent/detail',F=>C['detail'](F)),B['on'](O(0x1f1),F=>C[O(0x1fc)](F)),B['on']('_agent/disconnect',async F=>(await C['disconnect'](F['agentId'],F[O(0x201)]),{'ok':!0x0})),B['on']('_agent/health',()=>({'agents':C['health']()})),B['on'](O(0x1fe),F=>C['getFileTree'](F)),B['on']('_agent/getFileContent',F=>C[O(0x1e4)](F)),B['on'](O(0x1e3),F=>C[O(0x1df)](F)),B['on'](O(0x1f9),F=>C[O(0x1fb)](F)),B['on'](O(0x1f0),F=>C[O(0x205)](F)),B['on'](O(0x1ed),F=>C[O(0x202)](F['method']||F[O(0x1d4)]||'session/prompt',F)),B['on']('session/new',F=>C[O(0x202)](O(0x1ef),F)),B['on']('session/prompt',F=>C['handleSession'](O(0x1e8),F)),B['on'](O(0x1e6),F=>C[O(0x202)](O(0x1e6),F));const D=await async function(F){const P=O,G=await w(F['tokenFile']);if(G?.['trim']())return G['trim']();const H=h(0x18)['toString'](P(0x1f2));return await y(F['tokenFile'],H),await x(F['configFile'],{'createdAt':new Date()['toISOString']()},0x180),H;}(z),E=g(async(F,G)=>{const R=O;try{if(!function(I,J){return(I['headers']['authorization']||'')==='Bearer\x20'+J;}(F,D))return p(G,0x191,{'ok':!0x1,'error':'unauthorized'});const H=await function(I){return new Promise((J,K)=>{const L=[];I['on']('data',M=>L['push'](M)),I['on']('error',K),I['on']('end',()=>{const Q=f;if(0x0===L['length'])return J({});const M=Buffer[Q(0x1e2)](L)[Q(0x1e0)](Q(0x1d5));J(M?JSON[Q(0x1db)](M):{});});});}(F);if('GET'===F['method']&&'/status'===F[R(0x1f8)])return p(G,0xc8,{'ok':!0x0,'pid':process[R(0x1de)],'frontierConnected':B['isConnected'](),'frameworks':await j(),'agents':C['health']()});if('POST'===F['method']&&'/pair'===F[R(0x1f8)])return p(G,0xc8,await B['pair'](H));if(R(0x1e5)===F['method']&&'/connect'===F['url'])return p(G,0xc8,await B['connectStored'](H));if('POST'===F[R(0x1f3)]&&'/refresh'===F[R(0x1f8)])return p(G,0xc8,{'ok':!0x0,'frameworks':await j()});if(R(0x1e5)===F[R(0x1f3)]&&'/reload'===F['url'])return p(G,0xc8,await C[R(0x1ec)](H['agentId']));if('POST'===F['method']&&R(0x1f4)===F['url'])return p(G,0xc8,await B[R(0x1d6)](H));if('POST'===F['method']&&'/stop'===F['url'])return p(G,0xc8,{'ok':!0x0}),await B['stop']('ipc\x20stop'),await C['stopAll']('ipc\x20stop'),void E['close'](()=>process[R(0x1f6)](0x0));p(G,0x194,{'ok':!0x1,'error':R(0x1ff)});}catch(I){await A('ipc\x20request\x20failed',{'url':F['url'],'error':String(I)}),p(G,0x1f4,{'ok':!0x1,'error':I[R(0x1fa)]||String(I)});}});E[O(0x1e9)](0x0,O(0x1f5),async()=>{const S=O,F=E[S(0x1e1)]();await y(z[S(0x1e7)],String(F['port'])),await y(z['pidFile'],String(process['pid'])),await A(S(0x200),{'pid':process[S(0x1de)],'port':F['port']}),await B[S(0x1ea)]();});}function b(){const T=['reason','handleSession','2457476iSNqQJ','24VFfkKk','removeSkills','1514990voiQtR','_method','utf8','sendBridgeFile','1480028QDGBZl','setAgentManager','18EoYaFl','790284JWeeru','parse','catch','logFile','pid','listSkills','toString','address','concat','_agent/listSkills','getFileContent','POST','session/cancel','portFile','session/prompt','listen','restore','71114wCFGdA','reload','session/*','loadPersistedAgents','session/new','_agent/removeSkills','_agent/update','hex','method','/send','127.0.0.1','exit','1314990VbYYnQ','url','_agent/addSkills','message','addSkills','createOrUpdate','36451AQyXfj','_agent/getFileTree','not\x20found','daemon\x20started'];b=function(){return T;};return b();}function p(z,A,B){z['writeHead'](A,{'content-type':'application/json;\x20charset=utf-8'}),z['end'](JSON['stringify'](B));}
@@ -1 +1 @@
1
- (function(k,l){const y=d,m=k();while(!![]){try{const p=-parseInt(y(0xc5))/0x1+parseInt(y(0xbd))/0x2*(-parseInt(y(0xc8))/0x3)+-parseInt(y(0xbe))/0x4+-parseInt(y(0xc2))/0x5*(-parseInt(y(0xcf))/0x6)+parseInt(y(0xc9))/0x7+parseInt(y(0xc1))/0x8*(parseInt(y(0xc6))/0x9)+parseInt(y(0xcd))/0xa*(parseInt(y(0xd0))/0xb);if(p===l)break;else m['push'](m['shift']());}catch(q){m['push'](m['shift']());}}}(b,0xbd3bb));import{fileURLToPath as f}from'node:url';import{readFile as g}from'node:fs/promises';import h from'node:path';import{commandVersion as i,findExecutable as j}from'./utils.js';function b(){const C=['utf8','2753874IwlZwV','8965QRKsBZ','3392ijPhUB','1319768sWlElu','execPath','@zed-industries/codex-acp/bin/codex-acp.js','32NiwTrG','10ibuClN','codex','parse','559529kFqkTS','2201751BgIkdg','bin','1785SdEWeh','1178597AsqJJD','@agentclientprotocol/claude-agent-acp','push','openclaw','7470HjLHBe'];b=function(){return C;};return b();}function d(a,c){a=a-0xbd;const e=b();let f=e[a];return f;}export async function detectFrameworks(){const z=d,k=[],l=j('claude'),m=j('codex'),p=j(z(0xcc));return k['push']({'id':'claude-code','name':'Claude\x20Code','installed':Boolean(l),'command':l,'version':l?i(l):void 0x0,'acpPackage':z(0xca),'acpBin':'claude-agent-acp'}),k['push']({'id':z(0xc3),'name':'Codex','installed':Boolean(m||await r(z(0xc0))),'command':m,'version':m?i(m):void 0x0,'acpPackage':'@zed-industries/codex-acp','acpBin':'codex-acp'}),k[z(0xcb)]({'id':'openclaw','name':'OpenClaw','installed':Boolean(p),'command':p,'version':p?i(p):void 0x0,'acpPackage':void 0x0,'acpBin':void 0x0}),k;}export async function resolveAcpBin(k){const B=d;if('codex'===k){const l=import.meta.resolve('@zed-industries/codex-acp/bin/codex-acp.js');return{'command':process['execPath'],'args':[f(l)]};}if('claude-code'===k)return async function(m,p){const A=d,q=import.meta.resolve(m+'/package.json'),u=f(q),v=h['dirname'](u),w=JSON[A(0xc4)](await g(u,A(0xce))),x='string'==typeof w['bin']?w[A(0xc7)]:w[A(0xc7)]?.[p];if(!x)throw new Error(m+'\x20package.json\x20has\x20no\x20bin\x20'+p);return{'command':process[A(0xbf)],'args':[h['join'](v,x)]};}(B(0xca),'claude-agent-acp');throw new Error('ACP\x20runtime\x20is\x20not\x20supported\x20for\x20framework:\x20'+k);}async function r(k){try{return import.meta.resolve(k),!0x0;}catch{return!0x1;}}
1
+ function b(){const C=['2504997SRxVAo','@zed-industries/codex-acp','Claude\x20Code','16558182IqkpCK','126442qLFFLL','14zlwCgC','24536jCOzui','codex','claude','push','openclaw','dirname','bin','535DcjoMU','4954632AOYeqI','2890098zvZEEq','5730893VezQNG'];b=function(){return C;};return b();}(function(k,l){const y=d,m=k();while(!![]){try{const p=-parseInt(y(0x19e))/0x1*(-parseInt(y(0x19f))/0x2)+-parseInt(y(0x19a))/0x3+parseInt(y(0x1a0))/0x4*(-parseInt(y(0x196))/0x5)+-parseInt(y(0x198))/0x6+-parseInt(y(0x199))/0x7+parseInt(y(0x197))/0x8+parseInt(y(0x19d))/0x9;if(p===l)break;else m['push'](m['shift']());}catch(q){m['push'](m['shift']());}}}(b,0x86e36));import{fileURLToPath as f}from'node:url';import{readFile as g}from'node:fs/promises';import h from'node:path';import{commandVersion as i,findExecutable as j}from'./utils.js';export async function detectFrameworks(){const z=d,k=[],l=j(z(0x191)),m=j(z(0x190)),p=j('openclaw');return k[z(0x192)]({'id':'claude-code','name':z(0x19c),'installed':Boolean(l),'command':l,'version':l?i(l):void 0x0,'acpPackage':'@agentclientprotocol/claude-agent-acp','acpBin':'claude-agent-acp'}),k['push']({'id':'codex','name':'Codex','installed':Boolean(m||await r('@zed-industries/codex-acp/bin/codex-acp.js')),'command':m,'version':m?i(m):void 0x0,'acpPackage':z(0x19b),'acpBin':'codex-acp'}),k['push']({'id':z(0x193),'name':'OpenClaw','installed':Boolean(p),'command':p,'version':p?i(p):void 0x0,'acpPackage':void 0x0,'acpBin':void 0x0}),k;}function d(a,c){a=a-0x190;const e=b();let f=e[a];return f;}export async function resolveAcpBin(k){const A=d;if(A(0x190)===k){const l=import.meta.resolve('@zed-industries/codex-acp/bin/codex-acp.js');return{'command':process['execPath'],'args':[f(l)]};}if('claude-code'===k)return async function(m,p){const B=A,q=import.meta.resolve(m+'/package.json'),u=f(q),v=h[B(0x194)](u),w=JSON['parse'](await g(u,'utf8')),x='string'==typeof w[B(0x195)]?w['bin']:w[B(0x195)]?.[p];if(!x)throw new Error(m+'\x20package.json\x20has\x20no\x20bin\x20'+p);return{'command':process['execPath'],'args':[h['join'](v,x)]};}('@agentclientprotocol/claude-agent-acp','claude-agent-acp');throw new Error('ACP\x20runtime\x20is\x20not\x20supported\x20for\x20framework:\x20'+k);}async function r(k){try{return import.meta.resolve(k),!0x0;}catch{return!0x1;}}
package/dist/lib/ipc.js CHANGED
@@ -1 +1 @@
1
- (function(m,p){const A=c,q=m();while(!![]){try{const s=-parseInt(A(0xd2))/0x1+parseInt(A(0xdc))/0x2*(-parseInt(A(0xd3))/0x3)+parseInt(A(0xcc))/0x4*(-parseInt(A(0xcb))/0x5)+-parseInt(A(0xd1))/0x6*(parseInt(A(0xd4))/0x7)+parseInt(A(0xd0))/0x8*(-parseInt(A(0xd9))/0x9)+-parseInt(A(0xcd))/0xa*(-parseInt(A(0xda))/0xb)+parseInt(A(0xdb))/0xc;if(s===p)break;else q['push'](q['shift']());}catch(u){q['push'](q['shift']());}}}(b,0xed90d));import{fileURLToPath as d}from'node:url';import f from'node:path';function c(a,d){a=a-0xcb;const e=b();let f=e[a];return f;}import{resolvePaths as g}from'./paths.js';import{isProcessAlive as h,readText as j,sleep as k,spawnDetached as l}from'./utils.js';export async function readDaemonInfo(){const B=c,q=g(),[u,v,w]=await Promise['all']([j(q['pidFile']),j(q[B(0xdd)]),j(q['tokenFile'])]),x=Number(u),y=Number(v),z=w?.[B(0xd8)]();if(x&&y&&z&&h(x))return{'pid':x,'port':y,'token':z};}export async function ensureDaemon(){const m=await readDaemonInfo();if(m)return m;await startDaemon();for(let p=0x0;p<0x50;p+=0x1){const q=await readDaemonInfo();if(q)return q;await k(0x64);}throw new Error('licos-bridge\x20daemon\x20did\x20not\x20start\x20in\x20time');}export async function startDaemon(){const C=c,m=f['resolve'](f[C(0xcf)](d(import.meta.url)),'..','index.js');l(m,[C(0xd6)]);}export async function ipcRequest(m,p,q){const D=c,s=await fetch('http://127.0.0.1:'+q[D(0xd5)]+m,{'method':'/status'===m?'GET':'POST','headers':{'authorization':'Bearer\x20'+q['token'],'content-type':D(0xd7)},'body':'/status'===m?void 0x0:JSON['stringify'](p??{})}),u=await s['json']()[D(0xce)](()=>({}));if(!s['ok'])throw new Error(u['error']||'IPC\x20'+m+'\x20failed:\x20HTTP\x20'+s['status']);return u;}function b(){const E=['port','--daemon','application/json','trim','631395eOBjEr','9694872GvAsiz','35159172RMuADQ','58omeSxq','portFile','250LoHhQx','104364CsSboz','20GiAyce','catch','dirname','24fUeuZm','7271874FXBrCA','135651hyzkel','88647sZaeos','7BFjtGU'];b=function(){return E;};return b();}
1
+ (function(m,p){const A=c,q=m();while(!![]){try{const s=parseInt(A(0x70))/0x1+parseInt(A(0x72))/0x2*(-parseInt(A(0x64))/0x3)+-parseInt(A(0x6f))/0x4+-parseInt(A(0x6b))/0x5*(-parseInt(A(0x76))/0x6)+parseInt(A(0x6a))/0x7*(parseInt(A(0x65))/0x8)+-parseInt(A(0x66))/0x9*(parseInt(A(0x68))/0xa)+-parseInt(A(0x77))/0xb;if(s===p)break;else q['push'](q['shift']());}catch(u){q['push'](q['shift']());}}}(b,0xdc139));function b(){const F=['4290pXoLho','tokenFile','2317lDhJWy','8845015fjPavm','all','index.js','pidFile','163324zWCUTD','1300264aSnJwM','licos-bridge\x20daemon\x20did\x20not\x20start\x20in\x20time','4VILoHE','trim','port','Bearer\x20','6fMOBkp','3869272sfHodT','2063601XCdNxl','4072fHkWBa','11916dcsMiJ','\x20failed:\x20HTTP\x20'];b=function(){return F;};return b();}import{fileURLToPath as d}from'node:url';import f from'node:path';import{resolvePaths as g}from'./paths.js';import{isProcessAlive as h,readText as j,sleep as k,spawnDetached as l}from'./utils.js';function c(a,d){a=a-0x64;const e=b();let f=e[a];return f;}export async function readDaemonInfo(){const B=c,q=g(),[u,v,w]=await Promise[B(0x6c)]([j(q[B(0x6e)]),j(q['portFile']),j(q[B(0x69)])]),x=Number(u),y=Number(v),z=w?.[B(0x73)]();if(x&&y&&z&&h(x))return{'pid':x,'port':y,'token':z};}export async function ensureDaemon(){const C=c,m=await readDaemonInfo();if(m)return m;await startDaemon();for(let p=0x0;p<0x50;p+=0x1){const q=await readDaemonInfo();if(q)return q;await k(0x64);}throw new Error(C(0x71));}export async function startDaemon(){const D=c,m=f['resolve'](f['dirname'](d(import.meta.url)),'..',D(0x6d));l(m,['--daemon']);}export async function ipcRequest(m,p,q){const E=c,s=await fetch('http://127.0.0.1:'+q[E(0x74)]+m,{'method':'/status'===m?'GET':'POST','headers':{'authorization':E(0x75)+q['token'],'content-type':'application/json'},'body':'/status'===m?void 0x0:JSON['stringify'](p??{})}),u=await s['json']()['catch'](()=>({}));if(!s['ok'])throw new Error(u['error']||'IPC\x20'+m+E(0x67)+s['status']);return u;}
@@ -1 +1 @@
1
- (function(D,E){const V=h,F=D();while(!![]){try{const G=-parseInt(V(0x1f4))/0x1+parseInt(V(0x1d8))/0x2+parseInt(V(0x1eb))/0x3+parseInt(V(0x1d3))/0x4*(-parseInt(V(0x1e2))/0x5)+parseInt(V(0x1fa))/0x6+-parseInt(V(0x1ef))/0x7+parseInt(V(0x1f3))/0x8*(parseInt(V(0x1f0))/0x9);if(G===E)break;else F['push'](F['shift']());}catch(H){F['push'](F['shift']());}}}(b,0x873df));import{spawnSync as j}from'node:child_process';import{readdir as k,readFile as m,stat as q}from'node:fs/promises';import{fileURLToPath as u}from'node:url';import v from'node:path';import{detectFrameworks as w}from'./frameworks.js';import{ipcRequest as x,readDaemonInfo as y}from'./ipc.js';import{resolvePaths as z}from'./paths.js';import{readJson as A,readText as B,removeDir as C}from'./utils.js';export async function statusSnapshot(){const W=h,D=await y();if(!D)return{'running':!0x1,'frameworks':await w()};const E=await x('/status',void 0x0,D)['catch'](F=>({'ok':!0x1,'error':F[W(0x1d2)]||String(F)}));return{'running':!0x0,'pid':D['pid'],...E};}export async function purgeBridge(){const X=h,D=await y();D&&await x(X(0x1fb),{},D)[X(0x1da)](()=>{});const {uninstallService:E}=await import('./service.js');await E()['catch'](()=>{}),await C(z()['bridgeRoot']);}export async function packageVersion(){const Y=h,D=await A(v['resolve'](v['dirname'](u(import.meta.url)),'..','..','package.json'),void 0x0)['catch'](()=>{});return D?.[Y(0x1e4)]||'0.0.0';}function b(){const a4=['date','toLowerCase','@kmlckj/licos-bridge@latest','.gif','send\x20--group-file\x20requires\x20--mime','1377639fZQyzi','application/pdf','npx.cmd','.webp','5126961UhvVYC','63EoQJlY','filter','bridgeRoot','930192Sddteq','504642LJtxtN','image','slice','caption','sessionId','text/plain','3539460YzvrrP','/stop','target','npx','log','--ignore-existing','image/gif','message','4fPSvLZ','join','includes','grep','.txt','749702NFIjae','basename','catch','tail','agentId','send\x20requires\x20--agent-id','list','application/json','\x20bytes\x20(max\x2052428800)','logFile','2234380yGfmek','.jpg','version','image/webp'];b=function(){return a4;};return b();}export async function printLogs(D={}){const Z=h,E=z();if(D[Z(0x1de)]){const J=await k(E['bridgeRoot'])['catch'](()=>[]);for(const K of J[Z(0x1f1)](L=>/^bridge(?:-\d{4}-\d{2}-\d{2})?\.log$/['test'](L))['sort']())console[Z(0x1cf)](K);return;}const F=D['date']?v[Z(0x1d4)](E[Z(0x1f2)],'bridge-'+D[Z(0x1e6)]+'.log'):E['logFile'],G=await B(F)??'';let H=G['split'](/\r?\n/)[Z(0x1f1)](Boolean);D[Z(0x1dc)]&&(H=H['filter'](L=>L[Z(0x1d5)](D[Z(0x1dc)]))),D[Z(0x1d6)]&&(H=H[Z(0x1f1)](L=>L['includes'](D[Z(0x1d6)]))),D['level']&&(H=H[Z(0x1f1)](L=>L['toLowerCase']()['includes'](String(D['level'])['toLowerCase']())));const I=Number['isFinite'](D['tail'])?D[Z(0x1db)]:0xc8;I>0x0&&(H=H['slice'](-I));for(const L of H)console['log'](L);D['follow']&&await async function(M,N,O){let P=N;await new Promise(Q=>{const R=setInterval(async()=>{const a0=h,S=await B(M)??'';if(S['length']>P){let T=S[a0(0x1f6)](P)['split'](/\r?\n/)['filter'](Boolean);P=S['length'],O['agentId']&&(T=T['filter'](U=>U[a0(0x1d5)](O['agentId']))),O['grep']&&(T=T[a0(0x1f1)](U=>U['includes'](O[a0(0x1d6)])));for(const U of T)console['log'](U);}},0x3e8);process['on']('SIGINT',()=>{clearInterval(R),Q();});});}(E[Z(0x1e1)],G['length'],D);}export async function runUpdate(){const a1=h,D=await y();D&&await x(a1(0x1fb),{},D)['catch'](()=>{});const E='win32'===process['platform']?a1(0x1ed):a1(0x1ce),F=['-y',a1(0x1d0),a1(0x1e8),'connect'];if(0x0!==j(E,F,{'stdio':'inherit','windowsHide':!0x0})['status'])throw new Error('update\x20failed:\x20'+E+'\x20'+F[a1(0x1d4)]('\x20'));}export async function buildSendPayload(D){const a2=h;if(!D[a2(0x1dc)])throw new Error(a2(0x1dd));if(!D['sessionId'])throw new Error('send\x20requires\x20--session-id');if(D['groupFile']){if(!D['mime'])throw new Error(a2(0x1ea));return{'kind':D['kind'],'uri':D['target'],'agentId':D['agentId'],'sessionId':D['sessionId'],'caption':D['caption'],'name':D['name'],'groupFile':!0x0,'mime':D['mime']};}const E=await q(D['target']);if(!E['isFile']())throw new Error('not\x20a\x20file:\x20'+D['target']);if(E['size']>0x3200000)throw new Error('file\x20too\x20large:\x20'+E['size']+a2(0x1e0));const F=await m(D[a2(0x1cd)]);return{'kind':D['kind'],'agentId':D[a2(0x1dc)],'sessionId':D[a2(0x1f8)],'caption':D[a2(0x1f7)],'name':D['name']||v[a2(0x1d9)](D[a2(0x1cd)]),'mime':D['mime']||f(D['target'],D['kind']),'size':F['byteLength'],'contentBase64':F['toString']('base64')};}function h(a,c){a=a-0x1cd;const d=b();let e=d[a];return e;}function f(D,E){const a3=h,F=v['extname'](D)[a3(0x1e7)]();if(a3(0x1f5)===E){if('.png'===F)return'image/png';if([a3(0x1e3),'.jpeg'][a3(0x1d5)](F))return'image/jpeg';if(a3(0x1e9)===F)return a3(0x1d1);if(a3(0x1ee)===F)return a3(0x1e5);}return'.pdf'===F?a3(0x1ec):a3(0x1d7)===F?a3(0x1f9):'.md'===F?'text/markdown':'.json'===F?a3(0x1df):'application/octet-stream';}
1
+ function h(a,c){a=a-0x17a;const d=b();let e=d[a];return e;}(function(D,E){const V=h,F=D();while(!![]){try{const G=-parseInt(V(0x18e))/0x1*(-parseInt(V(0x188))/0x2)+parseInt(V(0x1ab))/0x3*(parseInt(V(0x19c))/0x4)+-parseInt(V(0x180))/0x5+-parseInt(V(0x19d))/0x6+parseInt(V(0x17a))/0x7+parseInt(V(0x1a3))/0x8+-parseInt(V(0x18f))/0x9;if(G===E)break;else F['push'](F['shift']());}catch(H){F['push'](F['shift']());}}}(b,0xa61d9));import{spawnSync as j}from'node:child_process';function b(){const a3=['toLowerCase','basename','join','list','includes','372ZZebmg','4435758WaEBgH','tail','logFile','test','target','message','7052608xxSJxF','log','platform','kind','@kmlckj/licos-bridge@latest','size','filter','name','15294PkJadR','6198234oVoPSP','split','groupFile','extname','caption','text/markdown','958105dLwiIR','.webp','length','./service.js','.jpeg','.gif','win32','agentId','12AnOwVj','follow','grep','sessionId','send\x20requires\x20--agent-id','date','104509zVZvDZ','11311947ZQwLBT','base64','.png','.log','image/png','catch','image/jpeg','bridge-'];b=function(){return a3;};return b();}import{readdir as k,readFile as m,stat as q}from'node:fs/promises';import{fileURLToPath as u}from'node:url';import v from'node:path';import{detectFrameworks as w}from'./frameworks.js';import{ipcRequest as x,readDaemonInfo as y}from'./ipc.js';import{resolvePaths as z}from'./paths.js';import{readJson as A,readText as B,removeDir as C}from'./utils.js';export async function statusSnapshot(){const W=h,D=await y();if(!D)return{'running':!0x1,'frameworks':await w()};const E=await x('/status',void 0x0,D)[W(0x194)](F=>({'ok':!0x1,'error':F[W(0x1a2)]||String(F)}));return{'running':!0x0,'pid':D['pid'],...E};}export async function purgeBridge(){const X=h,D=await y();D&&await x('/stop',{},D)['catch'](()=>{});const {uninstallService:E}=await import(X(0x183));await E()[X(0x194)](()=>{}),await C(z()['bridgeRoot']);}export async function packageVersion(){const D=await A(v['resolve'](v['dirname'](u(import.meta.url)),'..','..','package.json'),void 0x0)['catch'](()=>{});return D?.['version']||'0.0.0';}export async function printLogs(D={}){const Y=h,E=z();if(D[Y(0x19a)]){const J=await k(E['bridgeRoot'])[Y(0x194)](()=>[]);for(const K of J['filter'](L=>/^bridge(?:-\d{4}-\d{2}-\d{2})?\.log$/[Y(0x1a0)](L))['sort']())console['log'](K);return;}const F=D[Y(0x18d)]?v['join'](E['bridgeRoot'],Y(0x196)+D['date']+Y(0x192)):E[Y(0x19f)],G=await B(F)??'';let H=G[Y(0x17b)](/\r?\n/)[Y(0x1a9)](Boolean);D['agentId']&&(H=H['filter'](L=>L['includes'](D['agentId']))),D[Y(0x18a)]&&(H=H[Y(0x1a9)](L=>L['includes'](D[Y(0x18a)]))),D['level']&&(H=H[Y(0x1a9)](L=>L['toLowerCase']()['includes'](String(D['level'])[Y(0x197)]())));const I=Number['isFinite'](D[Y(0x19e)])?D[Y(0x19e)]:0xc8;I>0x0&&(H=H['slice'](-I));for(const L of H)console[Y(0x1a4)](L);D[Y(0x189)]&&await async function(M,N,O){let P=N;await new Promise(Q=>{const R=setInterval(async()=>{const Z=h,S=await B(M)??'';if(S[Z(0x182)]>P){let T=S['slice'](P)[Z(0x17b)](/\r?\n/)['filter'](Boolean);P=S[Z(0x182)],O[Z(0x187)]&&(T=T[Z(0x1a9)](U=>U[Z(0x19b)](O['agentId']))),O['grep']&&(T=T['filter'](U=>U[Z(0x19b)](O['grep'])));for(const U of T)console['log'](U);}},0x3e8);process['on']('SIGINT',()=>{clearInterval(R),Q();});});}(E['logFile'],G[Y(0x182)],D);}export async function runUpdate(){const a0=h,D=await y();D&&await x('/stop',{},D)['catch'](()=>{});const E=a0(0x186)===process[a0(0x1a5)]?'npx.cmd':'npx',F=['-y','--ignore-existing',a0(0x1a7),'connect'];if(0x0!==j(E,F,{'stdio':'inherit','windowsHide':!0x0})['status'])throw new Error('update\x20failed:\x20'+E+'\x20'+F[a0(0x199)]('\x20'));}export async function buildSendPayload(D){const a1=h;if(!D[a1(0x187)])throw new Error(a1(0x18c));if(!D['sessionId'])throw new Error('send\x20requires\x20--session-id');if(D[a1(0x17c)]){if(!D['mime'])throw new Error('send\x20--group-file\x20requires\x20--mime');return{'kind':D['kind'],'uri':D[a1(0x1a1)],'agentId':D[a1(0x187)],'sessionId':D['sessionId'],'caption':D[a1(0x17e)],'name':D['name'],'groupFile':!0x0,'mime':D['mime']};}const E=await q(D[a1(0x1a1)]);if(!E['isFile']())throw new Error('not\x20a\x20file:\x20'+D[a1(0x1a1)]);if(E['size']>0x3200000)throw new Error('file\x20too\x20large:\x20'+E[a1(0x1a8)]+'\x20bytes\x20(max\x2052428800)');const F=await m(D['target']);return{'kind':D['kind'],'agentId':D[a1(0x187)],'sessionId':D[a1(0x18b)],'caption':D['caption'],'name':D[a1(0x1aa)]||v[a1(0x198)](D['target']),'mime':D['mime']||f(D[a1(0x1a1)],D[a1(0x1a6)]),'size':F['byteLength'],'contentBase64':F['toString'](a1(0x190))};}function f(D,E){const a2=h,F=v[a2(0x17d)](D)[a2(0x197)]();if('image'===E){if(a2(0x191)===F)return a2(0x193);if(['.jpg',a2(0x184)]['includes'](F))return a2(0x195);if(a2(0x185)===F)return'image/gif';if(a2(0x181)===F)return'image/webp';}return'.pdf'===F?'application/pdf':'.txt'===F?'text/plain':'.md'===F?a2(0x17f):'.json'===F?'application/json':'application/octet-stream';}
package/dist/lib/paths.js CHANGED
@@ -1 +1 @@
1
- (function(f,g){const k=b,h=f();while(!![]){try{const i=-parseInt(k(0xb7))/0x1*(parseInt(k(0xbb))/0x2)+parseInt(k(0xb3))/0x3+parseInt(k(0xbe))/0x4*(-parseInt(k(0xc0))/0x5)+parseInt(k(0xb8))/0x6*(parseInt(k(0xba))/0x7)+-parseInt(k(0xbf))/0x8*(parseInt(k(0xb5))/0x9)+-parseInt(k(0xbd))/0xa+parseInt(k(0xb6))/0xb;if(i===g)break;else h['push'](h['shift']());}catch(j){h['push'](h['shift']());}}}(a,0x7a3e3));function a(){const n=['2779265vSdGpE','config.json','logs','495324rwRPRY','join','366723hGGDwx','21036730RFapqo','467909cGiuRH','12MjBnvU','agentsRoot','1639862MPfTgx','4HosMlz','resolve','4314510AoQcNl','4mMsYpg','24SVNLzk'];a=function(){return n;};return a();}import c from'node:os';import d from'node:path';function b(c,d){c=c-0xb1;const e=a();let f=e[c];return f;}export function resolvePaths(){const l=b,f=process.env.LICOS_BRIDGE_HOME?d[l(0xbc)](process.env.LICOS_BRIDGE_HOME):d['join'](c['homedir'](),'.licos'),g=d['join'](f,'bridge');return{'root':f,'bridgeRoot':g,'agentsRoot':process.env.LICOS_BRIDGE_AGENTS_HOME?d['resolve'](process.env.LICOS_BRIDGE_AGENTS_HOME):d[l(0xb4)](f,'agents'),'pidFile':d['join'](g,'bridge.pid'),'portFile':d['join'](g,'bridge.port'),'tokenFile':d['join'](g,'bridge.token'),'logFile':d[l(0xb4)](g,'bridge.log'),'configFile':d['join'](g,l(0xb1)),'serviceLogFile':d['join'](g,'service.log')};}export function agentPaths(f){const m=b,g=resolvePaths(),h=d['join'](g[m(0xb9)],f);return{'root':h,'configFile':d['join'](h,m(0xb1)),'workspace':d[m(0xb4)](h,'workspace'),'logs':d['join'](h,m(0xb2))};}
1
+ (function(f,g){const k=b,h=f();while(!![]){try{const i=parseInt(k(0x1f0))/0x1*(parseInt(k(0x1ee))/0x2)+-parseInt(k(0x1f3))/0x3+parseInt(k(0x1fa))/0x4*(-parseInt(k(0x1f9))/0x5)+-parseInt(k(0x1ed))/0x6+parseInt(k(0x1f5))/0x7+-parseInt(k(0x1f4))/0x8*(-parseInt(k(0x1ec))/0x9)+-parseInt(k(0x1fb))/0xa;if(i===g)break;else h['push'](h['shift']());}catch(j){h['push'](h['shift']());}}}(a,0x6aa2d));function b(c,d){c=c-0x1ec;const e=a();let f=e[c];return f;}import c from'node:os';import d from'node:path';function a(){const n=['1072227oFScLr','5974504ReXUlu','3699962pLwGky','bridge','agents','bridge.port','252905EJFFOB','52OiznIl','398490xvnwZJ','agentsRoot','9EwxNtI','3674352QciGsr','331442oZsgot','join','5sQXNTJ','config.json','bridge.log'];a=function(){return n;};return a();}export function resolvePaths(){const l=b,f=process.env.LICOS_BRIDGE_HOME?d['resolve'](process.env.LICOS_BRIDGE_HOME):d['join'](c['homedir'](),'.licos'),g=d['join'](f,l(0x1f6));return{'root':f,'bridgeRoot':g,'agentsRoot':process.env.LICOS_BRIDGE_AGENTS_HOME?d['resolve'](process.env.LICOS_BRIDGE_AGENTS_HOME):d[l(0x1ef)](f,l(0x1f7)),'pidFile':d['join'](g,'bridge.pid'),'portFile':d['join'](g,l(0x1f8)),'tokenFile':d['join'](g,'bridge.token'),'logFile':d['join'](g,l(0x1f2)),'configFile':d['join'](g,'config.json'),'serviceLogFile':d['join'](g,'service.log')};}export function agentPaths(f){const m=b,g=resolvePaths(),h=d[m(0x1ef)](g[m(0x1fc)],f);return{'root':h,'configFile':d['join'](h,m(0x1f1)),'workspace':d[m(0x1ef)](h,'workspace'),'logs':d['join'](h,'logs')};}
@@ -1 +1 @@
1
- (function(m,p){const y=c,q=m();while(!![]){try{const u=parseInt(y(0xf3))/0x1+-parseInt(y(0xee))/0x2*(-parseInt(y(0xfc))/0x3)+parseInt(y(0xf6))/0x4*(parseInt(y(0xf5))/0x5)+parseInt(y(0xec))/0x6+parseInt(y(0xf2))/0x7+-parseInt(y(0xfd))/0x8*(-parseInt(y(0xe8))/0x9)+parseInt(y(0x100))/0xa*(-parseInt(y(0xea))/0xb);if(u===p)break;else q['push'](q['shift']());}catch(v){q['push'](q['shift']());}}}(b,0x780a8));import{spawnSync as d}from'node:child_process';import{fileURLToPath as f}from'node:url';function c(a,d){a=a-0xe6;const e=b();let f=e[a];return f;}import g from'node:path';import{ensureDir as h,writePrivateText as j}from'./utils.js';import{resolvePaths as k}from'./paths.js';function b(){const C=['63296UGkjro','dirname','<?xml\x20version=\x221.0\x22\x20encoding=\x22UTF-8\x22?>\x0a<!DOCTYPE\x20plist\x20PUBLIC\x20\x22-//Apple//DTD\x20PLIST\x201.0//EN\x22\x20\x22http://www.apple.com/DTDs/PropertyList-1.0.dtd\x22>\x0a<plist\x20version=\x221.0\x22><dict>\x0a\x20\x20<key>Label</key><string>com.licos.bridge</string>\x0a\x20\x20<key>ProgramArguments</key><array><string>','/Library/LaunchAgents/com.licos.bridge.plist','\x22\x20--daemon','/Delete','3180FYKDxE','200424scCpjE','win32','systemctl','3884870bMaYgN','.service','log','/TN','resolve','/SC','unload','45dHqBMl','platform','55htUkhR','--user','3741522MHVpGb','serviceLogFile','1038LQdArQ','enable','darwin','daemon-reload','630HsgTBE','834385tePRzb','</string><string>','95FXzvMg'];b=function(){return C;};return b();}const t='LICOS\x20Bridge',a='licos-bridge';export async function installService(){const z=c,m=g[z(0x104)](g['dirname'](f(import.meta.url)),'..','index.js');if(z(0xfe)===process['platform']){const u='\x22'+process['execPath']+'\x22\x20\x22'+m+z(0xfa);return l('schtasks.exe',['/Create','/TN',t,z(0xe6),'ONLOGON','/TR',u,'/F']),void console['log']('Windows\x20login\x20task\x20installed:\x20LICOS\x20Bridge');}if('darwin'===process[z(0xe9)]){const v=process.env.HOME+z(0xf9);return await h(g[z(0xf7)](v)),await j(v,function(w){const A=z,x=k()[A(0xed)];return A(0xf8)+process['execPath']+A(0xf4)+w+'</string><string>--daemon</string></array>\x0a\x20\x20<key>RunAtLoad</key><true/>\x0a\x20\x20<key>KeepAlive</key><true/>\x0a\x20\x20<key>StandardOutPath</key><string>'+x+'</string>\x0a\x20\x20<key>StandardErrorPath</key><string>'+x+'</string>\x0a</dict></plist>\x0a';}(m)),l('launchctl',['load','-w',v]),void console['log']('launchd\x20service\x20installed:\x20com.licos.bridge');}const p=process.env.HOME+'/.config/systemd/user',q=g['join'](p,a+z(0x101));await h(p),await j(q,function(w){return'[Unit]\x0aDescription=LICOS\x20local\x20agent\x20bridge\x0a\x0a[Service]\x0aExecStart='+process['execPath']+'\x20'+w+'\x20--daemon\x0aRestart=always\x0aRestartSec=3\x0a\x0a[Install]\x0aWantedBy=default.target\x0a';}(m)),l('systemctl',[z(0xeb),z(0xf1)]),l(z(0xff),['--user',z(0xef),'--now',a+z(0x101)]),console[z(0x102)]('systemd\x20user\x20service\x20installed:\x20licos-bridge.service');}export async function uninstallService(){const B=c;return B(0xfe)===process['platform']?(l('schtasks.exe',[B(0xfb),B(0x103),t,'/F'],{'allowFailure':!0x0}),void console['log']('Windows\x20login\x20task\x20removed:\x20LICOS\x20Bridge')):B(0xf0)===process['platform']?(l('launchctl',[B(0xe7),'-w',process.env.HOME+'/Library/LaunchAgents/com.licos.bridge.plist'],{'allowFailure':!0x0}),void console['log']('launchd\x20service\x20removed:\x20com.licos.bridge')):(l(B(0xff),['--user','disable','--now',a+'.service'],{'allowFailure':!0x0}),void console['log']('systemd\x20user\x20service\x20removed:\x20licos-bridge.service'));}function l(m,p,q={}){if(0x0!==d(m,p,{'stdio':'inherit','windowsHide':!0x0})['status']&&!q['allowFailure'])throw new Error(m+'\x20'+p['join']('\x20')+'\x20failed');}
1
+ function c(a,d){a=a-0x74;const e=b();let f=e[a];return f;}function b(){const E=['324141aqAgup','status','--user','55BfsQBG','--now','\x22\x20--daemon','/TR','/Delete','daemon-reload','/Create','/TN','launchctl','\x22\x20\x22','5269696XSFQmw','log','join','</string>\x0a</dict></plist>\x0a','.service','win32','\x20--daemon\x0aRestart=always\x0aRestartSec=3\x0a\x0a[Install]\x0aWantedBy=default.target\x0a','ONLOGON','systemctl','3078504ZnjcQq','launchd\x20service\x20installed:\x20com.licos.bridge','957470tfCsWi','unload','2224qdcjxk','/Library/LaunchAgents/com.licos.bridge.plist','2741022wRtNqc','execPath','12845OyQgJI','index.js','315396XCWCTv','Windows\x20login\x20task\x20removed:\x20LICOS\x20Bridge','Windows\x20login\x20task\x20installed:\x20LICOS\x20Bridge','allowFailure','<?xml\x20version=\x221.0\x22\x20encoding=\x22UTF-8\x22?>\x0a<!DOCTYPE\x20plist\x20PUBLIC\x20\x22-//Apple//DTD\x20PLIST\x201.0//EN\x22\x20\x22http://www.apple.com/DTDs/PropertyList-1.0.dtd\x22>\x0a<plist\x20version=\x221.0\x22><dict>\x0a\x20\x20<key>Label</key><string>com.licos.bridge</string>\x0a\x20\x20<key>ProgramArguments</key><array><string>','/SC'];b=function(){return E;};return b();}(function(m,p){const y=c,q=m();while(!![]){try{const u=parseInt(y(0x8c))/0x1+parseInt(y(0x7e))/0x2+-parseInt(y(0x82))/0x3+parseInt(y(0x99))/0x4+parseInt(y(0x8f))/0x5*(-parseInt(y(0x86))/0x6)+parseInt(y(0x84))/0x7*(parseInt(y(0x80))/0x8)+-parseInt(y(0x7c))/0x9;if(u===p)break;else q['push'](q['shift']());}catch(v){q['push'](q['shift']());}}}(b,0xc273a));import{spawnSync as d}from'node:child_process';import{fileURLToPath as f}from'node:url';import g from'node:path';import{ensureDir as h,writePrivateText as j}from'./utils.js';import{resolvePaths as k}from'./paths.js';const t='LICOS\x20Bridge',a='licos-bridge';export async function installService(){const z=c,m=g['resolve'](g['dirname'](f(import.meta.url)),'..',z(0x85));if('win32'===process['platform']){const u='\x22'+process['execPath']+z(0x98)+m+z(0x91);return l('schtasks.exe',[z(0x95),z(0x96),t,z(0x8b),z(0x7a),z(0x92),u,'/F']),void console[z(0x74)](z(0x88));}if('darwin'===process['platform']){const v=process.env.HOME+z(0x81);return await h(g['dirname'](v)),await j(v,function(w){const A=z,x=k()['serviceLogFile'];return A(0x8a)+process[A(0x83)]+'</string><string>'+w+'</string><string>--daemon</string></array>\x0a\x20\x20<key>RunAtLoad</key><true/>\x0a\x20\x20<key>KeepAlive</key><true/>\x0a\x20\x20<key>StandardOutPath</key><string>'+x+'</string>\x0a\x20\x20<key>StandardErrorPath</key><string>'+x+A(0x76);}(m)),l(z(0x97),['load','-w',v]),void console['log'](z(0x7d));}const p=process.env.HOME+'/.config/systemd/user',q=g[z(0x75)](p,a+z(0x77));await h(p),await j(q,function(w){const B=z;return'[Unit]\x0aDescription=LICOS\x20local\x20agent\x20bridge\x0a\x0a[Service]\x0aExecStart='+process['execPath']+'\x20'+w+B(0x79);}(m)),l('systemctl',['--user',z(0x94)]),l(z(0x7b),[z(0x8e),'enable',z(0x90),a+'.service']),console['log']('systemd\x20user\x20service\x20installed:\x20licos-bridge.service');}export async function uninstallService(){const C=c;return C(0x78)===process['platform']?(l('schtasks.exe',[C(0x93),C(0x96),t,'/F'],{'allowFailure':!0x0}),void console['log'](C(0x87))):'darwin'===process['platform']?(l('launchctl',[C(0x7f),'-w',process.env.HOME+'/Library/LaunchAgents/com.licos.bridge.plist'],{'allowFailure':!0x0}),void console['log']('launchd\x20service\x20removed:\x20com.licos.bridge')):(l(C(0x7b),['--user','disable','--now',a+'.service'],{'allowFailure':!0x0}),void console[C(0x74)]('systemd\x20user\x20service\x20removed:\x20licos-bridge.service'));}function l(m,p,q={}){const D=c;if(0x0!==d(m,p,{'stdio':'inherit','windowsHide':!0x0})[D(0x8d)]&&!q[D(0x89)])throw new Error(m+'\x20'+p['join']('\x20')+'\x20failed');}
package/dist/lib/utils.js CHANGED
@@ -1 +1 @@
1
- const H=d;(function(w,x){const B=d,y=w();while(!![]){try{const z=parseInt(B(0xe6))/0x1+parseInt(B(0xdf))/0x2*(-parseInt(B(0xd2))/0x3)+-parseInt(B(0xde))/0x4+parseInt(B(0xd6))/0x5*(-parseInt(B(0xe3))/0x6)+parseInt(B(0xd1))/0x7+-parseInt(B(0xe1))/0x8+-parseInt(B(0xdb))/0x9*(-parseInt(B(0xda))/0xa);if(z===x)break;else y['push'](y['shift']());}catch(A){y['push'](y['shift']());}}}(b,0x79451));import{spawn as f,spawnSync as g}from'node:child_process';import{chmod as h,mkdir as j,readFile as k,rm as l,stat as m,writeFile as p}from'node:fs/promises';import{existsSync as q}from'node:fs';import v from'node:path';export function sleep(w){return new Promise(x=>setTimeout(x,w));}export async function ensureDir(w){await j(w,{'recursive':!0x0});}export async function readText(w){const C=d;try{return await k(w,C(0xec));}catch(x){if('ENOENT'===x?.[C(0xd0)])return;throw x;}}export async function readJson(w,x=void 0x0){const y=await readText(w);return void 0x0===y?x:JSON['parse'](y);}export async function writeJson(w,x,y){await ensureDir(v['dirname'](w)),await p(w,JSON['stringify'](x,null,0x2)+'\x0a','utf8'),y&&'win32'!==process['platform']&&await h(w,y);}function d(a,c){a=a-0xcf;const e=b();let f=e[a];return f;}function b(){const N=['ENOENT','openclaw','split','utf8','slice','includes','claudecode','relative','win32','claude','code','6713567RUlVrY','7395eLHxzT','open-claw','normalize','status','944575IMyPaX','stderr','startsWith','map','34150WzWgHi','2790ntBLfr','codex','--version','2085192PBqIKd','766MFGcMW','resolve','4685760ReqSsz','trim','6VDSOnK','find','dirname','719018jIANue','replace','platform'];b=function(){return N;};return b();}export async function writePrivateText(w,x){const D=d;await ensureDir(v[D(0xe5)](w)),await p(w,x,'utf8'),D(0xf1)!==process['platform']&&await h(w,0x180);}export async function removeDir(w){await l(w,{'recursive':!0x0,'force':!0x0});}export async function pathExists(w){const E=d;try{return await m(w),!0x0;}catch(x){if(E(0xe9)===x?.['code'])return!0x1;throw x;}}export function isProcessAlive(w){if(!w||Number['isNaN'](w))return!0x1;try{return process['kill'](w,0x0),!0x0;}catch{return!0x1;}}export async function appendLog(w,x,y){const F=d,z='['+new Date()['toISOString']()+']\x20'+x+(y?'\x20'+JSON['stringify'](y):'')+'\x0a';await ensureDir(v[F(0xe5)](w)),await p(w,z,{'encoding':F(0xec),'flag':'a'});}export function findExecutable(w){const G=d,x='win32'===process[G(0xe8)]?'where':'command',y='win32'===process['platform']?[w]:['-v',w],z=g(x,y,{'shell':'win32'!==process['platform'],'encoding':'utf8','windowsHide':!0x0});if(0x0===z[G(0xd5)])return z['stdout'][G(0xeb)](/\r?\n/)[G(0xd9)](A=>A['trim']())[G(0xe4)](Boolean)||void 0x0;}export function commandVersion(w,x=[H(0xdd)]){const I=H,y=g(w,x,{'encoding':I(0xec),'windowsHide':!0x0,'timeout':0x1388});if(0x0===y[I(0xd5)])return(y['stdout']||y[I(0xd7)])[I(0xe2)]()['split'](/\r?\n/)[0x0]?.['trim']()||void 0x0;}export function spawnDetached(w,x=[]){const y=f(process['execPath'],[w,...x],{'detached':!0x0,'stdio':'ignore','windowsHide':!0x0,'env':process.env});return y['unref'](),y['pid'];}export function safeResolve(w,x){const J=H,y=v[J(0xe0)](w,x),z=v[J(0xf0)](w,y);if(''===z||!z['startsWith']('..')&&!v['isAbsolute'](z))return y;throw new Error('path\x20escapes\x20workspace:\x20'+x);}export function safeRelativePath(w){const K=H,x=String(w||'')['replace'](/\\/g,'/')[K(0xe7)](/^\/+/,'');if(!x||'.'===x)return'';const y=v['posix'][K(0xd4)](x);if('.'===y||''===y)return'';if(y[K(0xd8)]('../')||'..'===y||v['isAbsolute'](y))throw new Error('unsafe\x20relative\x20path:\x20'+w);return y;}export function safeName(w,x='item'){const L=H;return String(w||'')[L(0xe2)]()['replace'](/[<>:"/\\|?*\x00-\x1f]+/g,'-')['replace'](/^\.+$/,'')[L(0xed)](0x0,0x78)||x;}export function joinUrl(w,x){if(!w)return;const y=w['replace'](/\/+$/,'');return y['endsWith'](x)?y:''+y+x;}export function normalizeFramework(w){const M=H,x=String(w||'')['trim']()['toLowerCase']();return[M(0xcf),'claude-code',M(0xef)]['includes'](x)?'claude-code':[M(0xdc),'openai-codex'][M(0xee)](x)?'codex':['openclaw',M(0xd3)]['includes'](x)?M(0xea):x||M(0xdc);}export function isReadableFilePath(w){return'string'==typeof w&&w['length']>0x0&&q(w);}
1
+ (function(w,x){const B=d,y=w();while(!![]){try{const z=parseInt(B(0x1f1))/0x1+-parseInt(B(0x1f4))/0x2*(parseInt(B(0x1ff))/0x3)+-parseInt(B(0x1fe))/0x4+parseInt(B(0x1fc))/0x5*(parseInt(B(0x1f0))/0x6)+parseInt(B(0x1fb))/0x7+-parseInt(B(0x209))/0x8+parseInt(B(0x1f9))/0x9;if(z===x)break;else y['push'](y['shift']());}catch(A){y['push'](y['shift']());}}}(b,0x4735c));import{spawn as f,spawnSync as g}from'node:child_process';import{chmod as h,mkdir as j,readFile as k,rm as l,stat as m,writeFile as p}from'node:fs/promises';import{existsSync as q}from'node:fs';function d(a,c){a=a-0x1e9;const e=b();let f=e[a];return f;}import v from'node:path';export function sleep(w){return new Promise(x=>setTimeout(x,w));}export async function ensureDir(w){await j(w,{'recursive':!0x0});}export async function readText(w){try{return await k(w,'utf8');}catch(x){if('ENOENT'===x?.['code'])return;throw x;}}export async function readJson(w,x=void 0x0){const y=await readText(w);return void 0x0===y?x:JSON['parse'](y);}export async function writeJson(w,x,y){await ensureDir(v['dirname'](w)),await p(w,JSON['stringify'](x,null,0x2)+'\x0a','utf8'),y&&'win32'!==process['platform']&&await h(w,y);}export async function writePrivateText(w,x){await ensureDir(v['dirname'](w)),await p(w,x,'utf8'),'win32'!==process['platform']&&await h(w,0x180);}export async function removeDir(w){await l(w,{'recursive':!0x0,'force':!0x0});}export async function pathExists(w){const C=d;try{return await m(w),!0x0;}catch(x){if(C(0x201)===x?.[C(0x208)])return!0x1;throw x;}}export function isProcessAlive(w){const D=d;if(!w||Number['isNaN'](w))return!0x1;try{return process[D(0x204)](w,0x0),!0x0;}catch{return!0x1;}}export async function appendLog(w,x,y){const E=d,z='['+new Date()[E(0x1f3)]()+']\x20'+x+(y?'\x20'+JSON['stringify'](y):'')+'\x0a';await ensureDir(v[E(0x206)](w)),await p(w,z,{'encoding':'utf8','flag':'a'});}export function findExecutable(w){const F=d,x=F(0x1f6)===process[F(0x1f2)]?F(0x1ea):'command',y=F(0x1f6)===process[F(0x1f2)]?[w]:['-v',w],z=g(x,y,{'shell':F(0x1f6)!==process[F(0x1f2)],'encoding':F(0x1fd),'windowsHide':!0x0});if(0x0===z['status'])return z['stdout']['split'](/\r?\n/)[F(0x1eb)](A=>A[F(0x200)]())['find'](Boolean)||void 0x0;}export function commandVersion(w,x=['--version']){const G=d,y=g(w,x,{'encoding':'utf8','windowsHide':!0x0,'timeout':0x1388});if(0x0===y['status'])return(y['stdout']||y['stderr'])[G(0x200)]()[G(0x1ec)](/\r?\n/)[0x0]?.['trim']()||void 0x0;}export function spawnDetached(w,x=[]){const H=d,y=f(process['execPath'],[w,...x],{'detached':!0x0,'stdio':H(0x1e9),'windowsHide':!0x0,'env':process.env});return y[H(0x1f7)](),y['pid'];}export function safeResolve(w,x){const I=d,y=v['resolve'](w,x),z=v['relative'](w,y);if(''===z||!z['startsWith']('..')&&!v[I(0x1fa)](z))return y;throw new Error('path\x20escapes\x20workspace:\x20'+x);}export function safeRelativePath(w){const x=String(w||'')['replace'](/\\/g,'/')['replace'](/^\/+/,'');if(!x||'.'===x)return'';const y=v['posix']['normalize'](x);if('.'===y||''===y)return'';if(y['startsWith']('../')||'..'===y||v['isAbsolute'](y))throw new Error('unsafe\x20relative\x20path:\x20'+w);return y;}export function safeName(w,x='item'){const J=d;return String(w||'')[J(0x200)]()['replace'](/[<>:"/\\|?*\x00-\x1f]+/g,'-')['replace'](/^\.+$/,'')[J(0x202)](0x0,0x78)||x;}export function joinUrl(w,x){const K=d;if(!w)return;const y=w[K(0x1ef)](/\/+$/,'');return y[K(0x203)](x)?y:''+y+x;}export function normalizeFramework(w){const L=d,x=String(w||'')['trim']()[L(0x1f5)]();return[L(0x205),L(0x1ee),L(0x1f8)]['includes'](x)?L(0x1ee):['codex','openai-codex'][L(0x1ed)](x)?L(0x207):['openclaw','open-claw']['includes'](x)?'openclaw':x||'codex';}export function isReadableFilePath(w){return'string'==typeof w&&w['length']>0x0&&q(w);}function b(){const M=['claudecode','1162260TFYKFO','isAbsolute','287595TpXERT','1895330hutVYS','utf8','1179716MEctxW','3uvQoiZ','trim','ENOENT','slice','endsWith','kill','claude','dirname','codex','code','513648eoedET','ignore','where','map','split','includes','claude-code','replace','6QsPcRG','425824KpfZxF','platform','toISOString','648608LjmQtK','toLowerCase','win32','unref'];b=function(){return M;};return b();}
package/package.json CHANGED
@@ -1,11 +1,10 @@
1
1
  {
2
2
  "name": "@kmlckj/licos-bridge",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "description": "LICOS local agent bridge for Claude ACP and Codex ACP.",
5
5
  "type": "module",
6
6
  "bin": {
7
- "licos-bridge": "dist/index.js",
8
- "coze-bridge": "dist/index.js"
7
+ "licos-bridge": "dist/index.js"
9
8
  },
10
9
  "files": [
11
10
  "dist",