qlogicagent 2.15.5 → 2.15.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -667,7 +667,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
667
667
  `;try{n.write(i)}catch{}}}async attemptRuntimeRestart(e,r,n){let o=this.callbacks.log,i=this.processes.get(e.memberId),s=i?.ipcServer,a=i?.ipcPath,c=i?.stderrStream;this.processes.delete(e.memberId);try{let l={memberId:e.memberId,name:e.name,pid:-1,cwd:e.cwd,state:"starting",startedAt:Date.now(),stderrLogPath:i?.handle.stderrLogPath},d=e.external,p=[...d.acpArgs];a&&(r.QLOGICAGENT_PARENT_RPC=a);let m=$R(d.cliPath,p,{cwd:e.cwd,env:r,stdio:["pipe","pipe","pipe"],detached:!1});l.pid=m.pid??-1;let f=new Map,g=new qo,h=new dl,y=TR({cwd:e.cwd,requestPermission:this.callbacks.onPermissionRequest?w=>this.callbacks.onPermissionRequest(e.memberId,w):void 0});this.processes.set(e.memberId,{handle:l,child:m,pendingRpc:f,acpAdapter:g,usageTracker:h,ipcServer:s,ipcPath:a,stderrStream:c,hostHandler:y,runtimeRestartCount:n}),g.attach(m,(w,S)=>{if(w==="session/update"){let M=S?.update?.sessionUpdate;if(typeof M=="string"){let C=this.processes.get(e.memberId),T=C?.handle.acpUpdateTypes??[];C&&!T.includes(M)&&(C.handle.acpUpdateTypes=[...T,M])}}w==="usage_update"&&h.onUsageUpdate(S);let R=qo.translateNotification(w,S);R?(this.captureChildProgress(e.memberId,R.method,R.params),this.callbacks.onNotification?.(e.memberId,R.method,R.params)):(this.captureChildProgress(e.memberId,w,S),this.callbacks.onNotification?.(e.memberId,w,S))},y),m.stderr&&Qp({input:m.stderr,crlfDelay:Number.POSITIVE_INFINITY}).on("line",S=>{this.callbacks.log?.debug?.(`[${new Date().toISOString()}] [debug] [agent:${e.memberId}] [stderr] ${S}`),c?.write(`${new Date().toISOString()} ${S}
668
668
  `)}),m.on("exit",(w,S)=>{g.detach(),y.disposeAll();let R=l.state;if(R!=="killed"&&R!=="completed"&&w!==0){let C=this.processes.get(e.memberId)?.runtimeRestartCount??n;if(C<ga){let T=hN*2**C;this.slog("warn",e.memberId,"crash",`crashed again (code=${w}), restart ${C+1}/${ga}`),this.callbacks.onNotification?.(e.memberId,"agents.error",{agentId:e.memberId,phase:"runtime",error:`Process crashed (code=${w}), restarting`,retriesLeft:ga-C-1}),setTimeout(()=>{this.attemptRuntimeRestart(e,r,C+1).catch(_=>{this.slog("warn",e.memberId,"restart",`failed: ${_ instanceof Error?_.message:String(_)}`)})},T);return}}R!=="killed"&&(l.state=w===0?"completed":"failed"),l.endedAt=Date.now(),w!==0&&!l.error&&(l.error=`ACP process exited with code ${w} (signal: ${S})`),this.callbacks.onStateChange?.(e.memberId,l.state),this.callbacks.onExit?.(e.memberId,w,S)}),m.on("error",w=>{g.detach(),y.disposeAll(),l.state="failed",l.error=w.message,l.endedAt=Date.now(),this.callbacks.onStateChange?.(e.memberId,"failed")}),this.callbacks.onStateChange?.(e.memberId,"starting");let v=await g.initialize(m);l.state="ready",l.supportsResume=v.agentCapabilities.loadSession===!0,this.callbacks.onStateChange?.(e.memberId,"ready"),this.slog("info",e.memberId,"restart",`ACP restarted (attempt=${n}, protocol=${v.protocolVersion}, loadSession=${l.supportsResume}, pid=${l.pid})`);let k=[...e.mcpServers??[]];a&&k.push({name:"qlogicagent-tools",command:process.execPath,args:[this.mcpBridgeScriptPath],env:{QLOGICAGENT_PARENT_RPC:a,QLOGICAGENT_SESSION_ID:e.memberId}});try{if(l.supportsResume&&l.sessionId){let w=await g.resumeSession(m,l.sessionId,{cwd:e.cwd,mcpServers:k.length>0?k:void 0});l.sessionId=w.sessionId,this.slog("info",e.memberId,"session",`session resumed (id=${l.sessionId})`)}else{let w={cwd:e.cwd};k.length>0&&(w.mcpServers=k),e.systemPrompt&&(w.systemPrompt=e.systemPrompt);let S=await g.createSession(m,w);l.sessionId=S.sessionId,this.slog("info",e.memberId,"session",`new session on restart (id=${l.sessionId})`)}}catch{this.slog("warn",e.memberId,"session","session re-creation failed on restart")}this.startHeartbeat(e.memberId,w=>{this.slog("warn",w,"heartbeat","hang detected \u2014 force-killing"),this.callbacks.onNotification?.(w,"agents.error",{agentId:w,phase:"heartbeat",error:`Agent ${e.name} stopped responding`,retriesLeft:0}),this.kill(w)})}catch(l){let d=this.processes.get(e.memberId);d&&(d.handle.state="failed",d.handle.error=`Runtime restart failed: ${l instanceof Error?l.message:String(l)}`,d.handle.endedAt=Date.now()),this.callbacks.onStateChange?.(e.memberId,"failed"),this.callbacks.onNotification?.(e.memberId,"agents.error",{agentId:e.memberId,phase:"runtime",error:`Restart failed after ${n} attempts: ${l instanceof Error?l.message:String(l)}`,retriesLeft:0})}}getMcpIpcPath(e){return this.processes.get(e)?.ipcPath}heartbeatTimers=new Map;missedBeats=new Map;static HEARTBEAT_INTERVAL=3e4;static MAX_MISSED_BEATS=3;startHeartbeat(e,r){this.stopHeartbeat(e),this.missedBeats.set(e,0);let n=setInterval(async()=>{let o=this.processes.get(e);if(!o||o.handle.state==="completed"||o.handle.state==="failed"||o.handle.state==="killed"){this.stopHeartbeat(e);return}if(await this.ping(e,1e4)){this.missedBeats.set(e,0);return}let s=(this.missedBeats.get(e)??0)+1;this.missedBeats.set(e,s),this.slog("warn",e,"heartbeat",`missed (${s}/${t.MAX_MISSED_BEATS})`),s>=t.MAX_MISSED_BEATS&&(this.slog("warn",e,"heartbeat","hang detected, force-killing"),this.stopHeartbeat(e),o.handle.error=`Hang detected: ${s} consecutive heartbeat failures`,this.kill(e),r?.(e))},t.HEARTBEAT_INTERVAL);this.heartbeatTimers.set(e,n)}stopHeartbeat(e){let r=this.heartbeatTimers.get(e);r&&(clearInterval(r),this.heartbeatTimers.delete(e)),this.missedBeats.delete(e)}getMissedBeats(e){return this.missedBeats.get(e)??0}activeCount(){return[...this.processes.values()].filter(e=>e.handle.state==="starting"||e.handle.state==="ready"||e.handle.state==="running").length}remove(e){let r=this.processes.get(e);r&&(this.stopHeartbeat(e),(r.handle.state==="running"||r.handle.state==="starting"||r.handle.state==="ready")&&this.kill(e),this.processes.delete(e))}dispose(){for(let e of this.heartbeatTimers.keys())this.stopHeartbeat(e);for(let e of this.processes.values()){try{e.ipcServer?.close()}catch{}try{e.stderrStream?.end()}catch{}}this.killAll(),this.processes.clear()}};import{spawn as yN}from"node:child_process";var bN=/[|&;><$`(){}]/;function Zee(t,e){let r=e==="win32",n=e==="darwin",o=n?[t.brew,t.npm,t.pip,t.curl]:[t.npm,t.pip,t.brew,t.curl];for(let i of o){if(!i)continue;let s=bN.test(i);if(!(s&&r)&&!(i.startsWith("brew ")&&!n))return{command:i,shell:s}}return null}function Jee(t,e){if(e!=="cn")return t;let r=t.trim();return/^npm\b/.test(r)&&!/(?:^|\s)--registry(?:\s|=)/.test(r)?`${r} --registry ${MR}`:/^uv\b/.test(r)&&!/(?:^|\s)--(?:default-)?index(?:-url)?(?:\s|=)/.test(r)?`${r} --default-index ${fa}`:/^(?:pipx|pip3?|python -m pip)\b/.test(r)&&!/(?:^|\s)--index-url(?:\s|=)/.test(r)?`${r} --index-url ${fa}`:r}function vN(t,e,r,n){return new Promise(o=>{let i;try{i=r(t,e)}catch(s){n({type:"log",stream:"stderr",chunk:s instanceof Error?s.message:String(s)}),o(1);return}i.stdout?.on("data",s=>n({type:"log",stream:"stdout",chunk:s.toString()})),i.stderr?.on("data",s=>n({type:"log",stream:"stderr",chunk:s.toString()})),i.on("error",s=>{n({type:"log",stream:"stderr",chunk:s.message}),o(1)}),i.on("close",s=>o(s))})}var Xee=(t,e)=>{if(e)return yN(t,{shell:!0,stdio:["ignore","pipe","pipe"]});let r=t.split(/\s+/).filter(Boolean);return yN(r[0],r.slice(1),{stdio:["ignore","pipe","pipe"]})};async function kN(t,e,r={}){let n=r.platform??process.platform,o=r.spawnImpl??Xee,i=Zee(t,n);if(!i){let d=`No install command available for ${n}`;return e({type:"state",state:"failed"}),e({type:"done",ok:!1,error:d}),{ok:!1,error:d}}let s=Jee(i.command,r.mirror);e({type:"state",state:"installing"});let a=await vN(s,i.shell,o,e);if(a!==0){let d=`Install command exited with code ${a}`;return e({type:"state",state:"failed"}),e({type:"done",ok:!1,error:d}),{ok:!1,error:d}}let c=t.verifyCmd??`${t.cliCommand} --version`;if(e({type:"state",state:"verifying"}),await vN(c,bN.test(c),o,e)!==0){let d=`Installed but verification failed (${t.cliCommand})`;return e({type:"state",state:"failed"}),e({type:"done",ok:!1,error:d}),{ok:!1,error:d}}return e({type:"state",state:"installed"}),e({type:"done",ok:!0}),{ok:!0}}var bt=new Map,Yee=10*6e4,Qee=6e4,ete=6,Ui=null;function em(t,e,r){return`${t}\0${e}\0${r??"default"}`}function fl(t){try{t.manager.kill(t.memberId)}catch{}try{t.manager.dispose()}catch{}}function wN(t){let e=bt.get(t);if(e){if(!e.manager.isAlive(e.memberId)){bt.delete(t),fl(e);return}return e}}function SN(t,e){let r=bt.get(t);r&&r!==e&&(bt.delete(t),fl(r)),bt.set(t,e),tte(),nte()}function xN(t,e){let r=bt.get(t);if(!r)return;if(!r.manager.isAlive(r.memberId)){bt.delete(t),fl(r);return}bt.delete(t);let n=bt.get(e);return n&&n!==r&&(bt.delete(e),fl(n)),bt.set(e,r),r.lastUsed=Date.now(),r}var tm="__warm__";function gl(t){let e=bt.get(t);e&&(bt.delete(t),fl(e))}function RN(){for(let t of[...bt.keys()])gl(t);Ui&&(clearInterval(Ui),Ui=null)}function tte(){for(;bt.size>ete;){let t=null,e=Number.POSITIVE_INFINITY;for(let[r,n]of bt)n.holder.current||n.lastUsed<e&&(e=n.lastUsed,t=r);if(!t)break;gl(t)}}function rte(t){for(let[e,r]of[...bt.entries()])r.holder.current||t-r.lastUsed>Yee&&gl(e)}function nte(){Ui||(Ui=setInterval(()=>rte(Date.now()),Qee),typeof Ui.unref=="function"&&Ui.unref())}import{randomUUID as ote}from"node:crypto";var ha=new Map;function ite(t,e){let r=ha.get(t);return r&&(clearTimeout(r.timer),r.resolve(null),ha.delete(t)),new Promise(n=>{let o=setTimeout(()=>{ha.delete(t),n(null)},e);typeof o.unref=="function"&&o.unref(),ha.set(t,{resolve:n,timer:o})})}function TN(t,e){let r=ha.get(t);return r?(clearTimeout(r.timer),ha.delete(t),r.resolve(e),!0):!1}function ste(t){if(t==null)return"";if(typeof t=="string")return t;try{return JSON.stringify(t)}catch{return""}}async function PN(t,e){let r=e.turnContext(),n=t.toolCall&&typeof t.toolCall=="object"?t.toolCall:{},o=typeof t.permissionId=="string"&&t.permissionId?t.permissionId:ote(),i=Array.isArray(t.options)?t.options:[];if(r?.turnId&&e.sendNotification){e.sendNotification("agents.prompt.approval",{agentId:e.agentId,sessionId:r.sessionId,turnId:r.turnId,requestId:r.requestId,approvalId:o,callId:typeof n.toolCallId=="string"?n.toolCallId:o,toolName:typeof n.title=="string"?n.title:typeof t.toolName=="string"?t.toolName:"operation",arguments:ste(n.rawInput),message:typeof t.message=="string"?t.message:void 0,category:typeof t.category=="string"?t.category:"destructive",options:i});let a=await ite(o,e.timeoutMs??5*6e4);if(a)return{optionId:a}}return{optionId:i.find(a=>a?.kind==="reject_once"||a?.kind==="reject"||/reject|deny|no|cancel/i.test(String(a?.optionId??a?.name??"")))?.optionId??i[0]?.optionId??"reject"}}function cte(t){let e=t?.rawInput;if(e!=null){if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return}}}function lte(t){let e=t?.content;if(Array.isArray(e)){let r=e.map(n=>{if(!n||typeof n!="object")return"";let o=n;return typeof o.text=="string"?o.text:typeof o.content=="string"?o.content:""}).join("");if(r)return r.slice(0,2e3)}if(typeof e=="string")return e.slice(0,2e3);if(t?.rawOutput!==void 0)try{return JSON.stringify(t.rawOutput).slice(0,2e3)}catch{return}}function IN(t){let e=t?.authMethods;return Array.isArray(e)&&e.length>0?e:void 0}function _N(t){return t instanceof Error?t.message:String(t)}async function dte(t){let e=IN(t.error);if(!t.sessionId||!e)return;let r=_N(t.error);await Kr(t.sessionId,{role:"user",content:t.prompt},t.projectRoot,t.turnId),await Kr(t.sessionId,{role:"assistant",content:r,blocks:[{type:"auth_prompt",agentId:t.agentId,message:r,authMethods:e}]},t.projectRoot,t.turnId);let n=Nt(t.sessionId,t.projectRoot),o=await ws(t.sessionId,t.projectRoot);await at(t.sessionId,{type:"personal",...t.projectId?{projectId:t.projectId}:{},...o!==null?{messageCount:o}:{},...n?.title?{}:{title:sc(t.prompt,"External agent login required")},...n?.agentId?{}:{agentId:t.agentId}},t.projectRoot)}async function CN(t){let e=t.params,r=typeof e?.approvalId=="string"?e.approvalId:"",n=typeof e?.optionId=="string"?e.optionId:"",o=r&&n?TN(r,n):!1;t.id!==void 0&&this.sendResponse(t.id,{ok:o})}async function EN(t){try{let e=t.params,r=await this.ensureAgentConfigStore();this.acpDetector.setConfigStore(r.getData());let n=this.acpDetector.scan(e?.force);t.id!==void 0&&this.sendResponse(t.id,n)}catch(e){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e)})}}async function MN(t){try{let e=await this.ensureAgentConfigStore();this.acpDetector.setConfigStore(e.getData());let r=this.acpDetector.list();t.id!==void 0&&this.sendResponse(t.id,r)}catch(e){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e)})}}async function $N(t){try{let e=await this.ensureAgentConfigStore();this.acpDetector.setConfigStore(e.getData());let r=new Map(this.acpDetector.list().map(o=>[o.id,o])),n=IR().map(o=>{let i=r.get(o.id);return{id:o.id,name:o.name,brandId:o.brandId??o.id,category:o.category??"code",integration:o.integration??"acp",authMode:o.authMode??"key",note:o.note,status:i?.status??"not_installed",version:uN(o,i?.version),install:{docsUrl:o.install?.docsUrl,command:o.install?.npm??o.install?.pip??o.install?.brew??o.install?.curl}}});t.id!==void 0&&this.sendResponse(t.id,{catalog:n})}catch(e){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e)})}}async function DN(t){try{let e=await this.ensureAgentConfigStore();this.acpDetector.setConfigStore(e.getData());let r=new Map(this.acpDetector.list().map(i=>[i.id,i])),n=IR().map(i=>({id:i.id,entry:i,detectedVersion:r.get(i.id)?.version})),o=await pN(n);t.id!==void 0&&this.sendResponse(t.id,{updates:o})}catch(e){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e)})}}async function NN(t){let e=t.params,r=typeof e?.agentId=="string"?e.agentId:void 0,n=typeof e?.mirror=="string"&&e.mirror?e.mirror:process.env.QLOGICAGENT_INSTALL_MIRROR;if(!r){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INVALID_PARAMS,message:"agentId (string) required"});return}let o=pa(r);if(!o?.install){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INVALID_PARAMS,message:`Unknown or non-installable agent: ${r}`});return}try{let i=await kN(o.install,s=>{this.sendNotification?.("agent.install.progress",{agentId:r,event:s})},{mirror:n});this.acpDetector.clearCache(),t.id!==void 0&&this.sendResponse(t.id,{ok:i.ok,error:i.error})}catch(i){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:i instanceof Error?i.message:String(i)})}}async function ON(t){try{let e=t.params;if(!e?.action||!e?.agent){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INVALID_PARAMS,message:"action and agent are required."});return}let r=await this.ensureAgentConfigStore();switch(e.action){case"register":await r.registerCustomAgent(e.agent);break;case"unregister":await r.unregisterCustomAgent(e.agent.id);break;case"update":await r.registerCustomAgent(e.agent);break}this.acpDetector.setConfigStore(r.getData()),this.acpDetector.clearCache(),t.id!==void 0&&this.sendResponse(t.id,{ok:!0})}catch(e){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e)})}}async function jN(t){try{let e=t.params;if(!e?.agentId){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INVALID_PARAMS,message:"agentId is required."});return}let r=await this.ensureAgentConfigStore(),{agentId:n,...o}=e;await r.setAgentConfig(n,o),this.acpDetector.setConfigStore(r.getData()),t.id!==void 0&&this.sendResponse(t.id,{ok:!0})}catch(e){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e)})}}async function LN(t){try{let e=t.params;if(!e?.agentId){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INVALID_PARAMS,message:"agentId is required."});return}let n=(await this.ensureAgentConfigStore()).getAgentConfig(e.agentId);t.id!==void 0&&this.sendResponse(t.id,n)}catch(e){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e)})}}async function UN(t){try{let e=t.params;if(!e?.agentId){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INVALID_PARAMS,message:"agentId is required."});return}let r=await this.ensureAgentConfigStore();await r.removeAgentConfig(e.agentId),this.acpDetector.setConfigStore(r.getData()),t.id!==void 0&&this.sendResponse(t.id,{ok:!0})}catch(e){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e)})}}async function FN(t){try{let e=t.params;if(!e?.url){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INVALID_PARAMS,message:"url is required."});return}await(await this.ensureAgentConfigStore()).setGatewayUrl(e.url),t.id!==void 0&&this.sendResponse(t.id,{ok:!0})}catch(e){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e)})}}async function HN(t){try{let r=(await this.ensureAgentConfigStore()).getGatewayUrl();t.id!==void 0&&this.sendResponse(t.id,{url:r})}catch(e){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e)})}}async function zN(t){try{let r=(await this.ensureAgentConfigStore()).getData(),n=Object.entries(r.agents).map(([o,i])=>({agentId:o,hasApiKey:!!i.apiKey,hasBaseUrl:!!i.baseUrl,hasModel:!!i.model}));t.id!==void 0&&this.sendResponse(t.id,n)}catch(e){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e)})}}function BN(t){try{let e=[],r=(n,o)=>{if(n)for(let i of n.getAllHandles())e.push({memberId:i.memberId,name:i.name,pid:i.pid,state:i.state,startedAt:i.startedAt,endedAt:i.endedAt,source:o})};r(this.soloProcessManager,"solo"),r(this.productProcessManager,"product"),t.id!==void 0&&this.sendResponse(t.id,e)}catch(e){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e)})}}function qN(t){try{let e=t.params;if(!e?.memberId){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INVALID_PARAMS,message:"memberId is required."});return}let r=!1;for(let n of[this.soloProcessManager,this.productProcessManager])if(n?.getHandle(e.memberId)){n.kill(e.memberId),r=!0;break}t.id!==void 0&&this.sendResponse(t.id,{ok:r})}catch(e){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e)})}}async function WN(t){try{let e=t.params;if(!e?.agentId){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INVALID_PARAMS,message:"agentId is required."});return}let r=rm.join(pe(),"agent-logs"),n=rm.join(r,`${e.agentId}.stderr.log`),o="";try{o=AN.readFileSync(n,"utf-8")}catch{}e.tail&&e.tail>0&&o&&(o=o.split(`
669
669
  `).slice(-e.tail).join(`
670
- `)),t.id!==void 0&&this.sendResponse(t.id,{log:o})}catch(e){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e)})}}async function KN(t){try{let e=t.params;if(!e?.agentId){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INVALID_PARAMS,message:"agentId is required."});return}let r=await this.ensureAgentConfigStore();this.acpDetector.setConfigStore(r.getData());let o=this.acpDetector.list().find(s=>s.id===e.agentId);if(!o){t.id!==void 0&&this.sendResponse(t.id,{ok:!1,error:`Agent ${e.agentId} not found`,durationMs:0});return}if(o.status==="not_installed"){t.id!==void 0&&this.sendResponse(t.id,{ok:!1,error:`Agent ${e.agentId} is not installed`,durationMs:0});return}let i=Date.now();t.id!==void 0&&this.sendResponse(t.id,{ok:o.status==="available",version:o.version,capabilities:o.capabilities,error:o.status!=="available"?`Agent status: ${o.status}`:void 0,durationMs:Date.now()-i})}catch(e){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e)})}}async function GN(t,e,r,n,o,i){let s=em(e,n,o),a=wN(s);if(a)return a;if(o!==tm){let f=xN(em(e,n,tm),s);if(f)return f}let c=`chat-${e}-${ate().slice(0,8)}`,l={current:null},d=typeof t.sendNotification=="function"?t.sendNotification.bind(t):void 0,p=new $r({onNotification:(f,g,h)=>{let y=l.current;if(!y)return;let v=h;if(g==="turn.delta"){let w=typeof v?.text=="string"?v.text:"";if(!w)return;y.deltas.push(w),y.turnId&&d&&(d("agents.prompt.delta",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,text:w}),y.streamedAny=!0);return}if(g==="turn.thought_delta"){let w=typeof v?.text=="string"?v.text:"";w&&y.turnId&&d&&d("agents.prompt.delta",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,text:w,reasoning:!0});return}if(g==="turn.plan"){y.turnId&&d&&d("agents.prompt.plan",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,steps:Array.isArray(v?.steps)?v.steps:[]});return}if(!y.turnId||!d)return;let k=typeof v?.callId=="string"?v.callId:String(v?.callId??"");g==="turn.tool_call"?d("agents.prompt.tool",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,event:{kind:"call",callId:k,name:typeof v?.toolName=="string"?v.toolName:typeof v?.name=="string"?v.name:"tool",arguments:cte(v)}}):g==="turn.tool_result"&&d("agents.prompt.tool",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,event:{kind:"result",callId:k,name:typeof v?.toolName=="string"?v.toolName:"tool",ok:v?.status!=="failed"&&v?.status!=="error",outputPreview:lte(v)}})},onMcpToolCall:async(f,g,h)=>typeof t.handleMcpToolCall=="function"?t.handleMcpToolCall(f,g,h):{ok:!1,error:"MCP tool call unavailable"},onPermissionRequest:(f,g)=>PN(g,{agentId:e,turnContext:()=>l.current,sendNotification:d}),log:{info:f=>t.log?.(`[agents.prompt] ${f}`),warn:f=>t.log?.(`[agents.prompt] WARN: ${f}`),debug:f=>t.log?.(`[agents.prompt] ${f}`)},sessionDir:rm.join(pe(),"agent-logs")});await p.spawn({memberId:c,name:`chat-${e}`,cwd:n,prompt:"",external:r,systemPrompt:i});let m={manager:p,memberId:c,holder:l,lastUsed:Date.now()};return SN(s,m),m}async function VN(t){try{let e=t.params??{},r=typeof e.agentId=="string"?e.agentId.trim():"";if(!r||r==="qlogicagent"){t.id!==void 0&&this.sendResponse(t.id,{ok:!1,warmed:!1});return}let n=await this.ensureAgentConfigStore();this.acpDetector.setConfigStore(n.getData()),this.acpDetector.scan(!1);let o=this.acpDetector.buildExternalDescriptor(r);if(!o){t.id!==void 0&&this.sendResponse(t.id,{ok:!1,warmed:!1});return}let i=typeof this.getActiveProjectRoot=="function"?this.getActiveProjectRoot():process.cwd();await GN(this,r,o,i,tm),t.id!==void 0&&this.sendResponse(t.id,{ok:!0,warmed:!0})}catch(e){t.id!==void 0&&this.sendResponse(t.id,{ok:!1,warmed:!1,error:e instanceof Error?e.message:String(e)})}}async function ZN(t){try{let e=t.params??{},r=typeof e.agentId=="string"?e.agentId.trim():"",n=typeof e.prompt=="string"?e.prompt:"";if(!r||!n.trim()){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INVALID_PARAMS,message:"agentId and prompt are required."});return}let o=await this.ensureAgentConfigStore();this.acpDetector.setConfigStore(o.getData()),this.acpDetector.scan(!1);let i=this.acpDetector.buildExternalDescriptor(r);if(!i){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INVALID_PARAMS,message:`Agent ${r} is not available or not ACP-compatible.`});return}let s=typeof e.cwd=="string"&&e.cwd?e.cwd:typeof this.getActiveProjectRoot=="function"?this.getActiveProjectRoot():process.cwd(),a=typeof e.timeoutMs=="number"&&e.timeoutMs>0?e.timeoutMs:3e5,c=typeof e.sessionId=="string"?e.sessionId:void 0,l=typeof e.turnId=="string"?e.turnId:void 0,d=typeof e.requestId=="string"?e.requestId:void 0,p=typeof e.projectId=="string"?e.projectId:void 0,m=em(r,s,c),f=await GN(this,r,i,s,c,typeof e.systemPrompt=="string"?e.systemPrompt:void 0),g={sessionId:c,turnId:l,requestId:d,deltas:[],streamedAny:!1};f.holder.current=g,f.lastUsed=Date.now();let h;try{h=await f.manager.sendTask(f.memberId,n,{timeout:a})}catch(k){throw await dte({sessionId:c,projectRoot:s,turnId:l,projectId:p,agentId:r,prompt:n,error:k}),gl(m),k}finally{f.holder.current=null}let y=g.deltas.join("")||(typeof h?.content=="string"?h.content:""),v=f.manager.getUsageTracker(f.memberId)?.getUsage();if(c){Kr(c,{role:"user",content:n},s,l),y&&Kr(c,{role:"assistant",content:y},s,l);let k=Nt(c,s);at(c,{type:"personal",...p?{projectId:p}:{},...k?.title?{}:{title:sc(n,"External agent session")},...k?.agentId?{}:{agentId:r}},s)}t.id!==void 0&&this.sendResponse(t.id,{ok:!0,agentId:r,content:y,streamed:g.streamedAny,stopReason:h?.stopReason,usage:v?{inputTokens:v.inputTokens,outputTokens:v.outputTokens,totalTokens:v.totalTokens,cacheRead:v.cachedReadTokens,thoughtTokens:v.thoughtTokens,cost:v.cost}:void 0})}catch(e){if(t.id!==void 0){let r=IN(e);this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:_N(e),...r?{data:{authMethods:r}}:{}})}}}oe();import*as va from"node:fs/promises";import*as sj from"node:path";xs();var ute=/^[a-z0-9][a-z0-9_.:-]{0,79}$/i,pte=new Set(["journeyDay","count"]),mte=new Set(["blocked"]),fte=new Set(["R0","R1","R2","R3"]),gte=new Set(["aix","android","darwin","freebsd","ios","linux","openbsd","sunos","win32"]),hte={"community.journey.view":new Set(["surface","petState","journeyDay","platform"]),"community.share.generated":new Set(["surface","action","source","petState","journeyDay","platform"]),"community.sandbox.violation":new Set(["surface","action","source","ruleId","riskTier","platform","count","blocked"]),"community.desensitization.hit":new Set(["surface","action","source","ruleId","riskTier","platform","count","blocked"]),"registry.install_failed":new Set(["dimension","resourceType","platform"])};function nm(t,e){if(!e||typeof e!="object"||Array.isArray(e))return;let r=hte[t],n={};for(let[o,i]of Object.entries(e)){if(!r.has(o))continue;let s=yte(o,i);s!==void 0&&(n[o]=s)}return Object.keys(n).length>0?n:void 0}function yte(t,e){if(pte.has(t))return typeof e=="number"&&Number.isInteger(e)&&e>=0&&e<=1e5?e:void 0;if(mte.has(t))return typeof e=="boolean"?e:void 0;if(t==="riskTier")return typeof e=="string"&&fte.has(e)?e:void 0;if(t==="platform")return typeof e=="string"&&gte.has(e)?e:void 0;if(typeof e!="string")return;let r=e.trim();return ute.test(r)?r:void 0}var vte=new Set(["withdrawn","version-available","deprecated","version-yanked","frozen"]);function bte(t){let e=Pte(t.baseUrl),r=Ate(t.fetchFn??fetch,t.clientVersion),n=t.token.trim();return{async getConsent(){return XN(r,e,n,"GET")},async setConsent(o){return XN(r,e,n,"PUT",o)},async matchRegistry(o){let i=o.intent.trim();if(!i)throw new Error("intent is required.");let s=_te(o.topK),a=await Ne(r,Me(t.baseUrl,"/api/v15/registry/match"),n,"POST",{intent:i,topK:s,prefer:o.preferOfficial===!1?"relevance":"official",canonicalOnly:!0});return(_e(a)&&Array.isArray(a.matches)?a.matches:[]).map(Cte).filter(l=>!!l).slice(0,s)},async publishSkill(o){return NR(r,t.baseUrl,n,"skill",o)},async publishPet(o){return NR(r,t.baseUrl,n,"pet",o)},async publishWorkflow(o){return NR(r,t.baseUrl,n,"workflow",o)},async recordSignal(o){let i=encodeURIComponent(o.resourceId.trim());if(!i)throw new Error("resourceId is required.");let s=await Ne(r,Me(t.baseUrl,`/api/v15/registry/resources/${i}/signal`),n,"POST",{event:o.event,attribution:o.attribution?.trim()||void 0,metadata:o.metadata});if(_e(s)&&s.accepted===!0)return{accepted:!0};throw new Error("Community hub returned an invalid signal response.")},async recordTelemetry(o){let i=nm(o.event,o.metadata),s=await Ne(r,Me(t.baseUrl,"/api/v15/registry/telemetry"),n,"POST",{event:o.event,metadata:i});if(_e(s)&&s.accepted===!0)return{accepted:!0};throw new Error("Community hub returned an invalid telemetry response.")},async listSharedResources(){let o=await Ne(r,Me(t.baseUrl,"/api/v15/registry/mine"),n,"GET");return(_e(o)&&Array.isArray(o.resources)?o.resources:[]).map(om).filter(s=>!!s)},async withdrawSharedResource(o,i){let s=encodeURIComponent(o.trim());if(!s)throw new Error("resourceId is required.");let a=await Ne(r,Me(t.baseUrl,`/api/v15/registry/resources/${s}/withdraw`),n,"POST",{reason:i?.trim()||void 0}),c=om(a);if(!c)throw new Error("Community hub returned an invalid resource.");return c},async withdrawSharedResources(o){let i=await Ne(r,Me(t.baseUrl,"/api/v15/registry/community-consent/withdraw-shared"),n,"POST",{reason:o?.trim()||void 0});return(_e(i)&&Array.isArray(i.resources)?i.resources:[]).map(om).filter(a=>!!a)},async listNotices(o={}){let i=o.includeRead?"?includeRead=true":"",s=await Ne(r,Me(t.baseUrl,`/api/v15/registry/notices${i}`),n,"GET");return(_e(s)&&Array.isArray(s.notices)?s.notices:[]).map(YN).filter(c=>!!c)},async markNoticeRead(o){if(!Number.isSafeInteger(o)||o<1)throw new Error("noticeId is required.");let i=await Ne(r,Me(t.baseUrl,`/api/v15/registry/notices/${o}/read`),n,"POST"),s=YN(i);if(!s)throw new Error("Community hub returned an invalid notice.");return s},async resolveInstall(o,i){let s=encodeURIComponent(o.trim());if(!s)throw new Error("resourceId is required.");let a=i?.trim(),c=a?`?version=${encodeURIComponent(a)}`:"",l=await Ne(r,Me(t.baseUrl,`/api/v15/registry/resources/${s}/install${c}`),n,"GET"),d=tO(l);if(!d)throw new Error("Community hub returned an invalid install resolution.");return d},async listResourceVersions(o){let i=encodeURIComponent(o.trim());if(!i)throw new Error("resourceId is required.");let s=await Ne(r,Me(t.baseUrl,`/api/v15/registry/resources/${i}/versions`),n,"GET");return(_e(s)&&Array.isArray(s.versions)?s.versions:[]).map(Ste).filter(c=>!!c)},async rateResource(o,i){let s=encodeURIComponent(o.trim());if(!s)throw new Error("resourceId is required.");let a=await Ne(r,Me(t.baseUrl,`/api/v15/registry/resources/${s}/rate`),n,"POST",{stars:i});return JN(a)},async getRatingSummary(o){let i=encodeURIComponent(o.trim());if(!i)throw new Error("resourceId is required.");let s=await Ne(r,Me(t.baseUrl,`/api/v15/registry/resources/${i}/rating`),n,"GET");return JN(s)},async reportResource(o,i){let s=encodeURIComponent(o.trim());if(!s)throw new Error("resourceId is required.");await Ne(r,Me(t.baseUrl,`/api/v15/registry/resources/${s}/report`),n,"POST",{reason:i?.trim()||void 0})},async listComments(o){let i=encodeURIComponent(o.trim());if(!i)throw new Error("resourceId is required.");let s=await Ne(r,Me(t.baseUrl,`/api/v15/registry/resources/${i}/comments`),n,"GET");return(_e(s)&&Array.isArray(s.comments)?s.comments:[]).map(kte).filter(c=>!!c)},async postComment(o,i){let s=encodeURIComponent(o.trim());if(!s)throw new Error("resourceId is required.");let a=i?.trim()??"";if(!a)throw new Error("Comment body is required.");let c=await Ne(r,Me(t.baseUrl,`/api/v15/registry/resources/${s}/comments`),n,"POST",{body:a}),l=_e(c)?c:{};return{id:typeof l.id=="number"?l.id:0,folded:l.folded===!0,createdAt:typeof l.createdAt=="string"?l.createdAt:""}},async emitActivity(o){let i=await Ne(r,Me(t.baseUrl,"/api/v15/community/activity"),n,"POST",{id:o.id,type:o.type,ts:o.ts,actorPetId:o.actorPetId,peerRef:o.peerRef,visibility:o.visibility,payload:o.payload});if(!(_e(i)&&i.accepted===!0))throw new Error("Community hub returned an invalid activity response.")},async recordCommunityReview(o){let i=await Ne(r,Me(t.baseUrl,"/api/v15/community/reviews"),n,"POST",{id:o.id,resourceId:o.resourceId,actorPetId:o.actorPetId,experience:o.experience,outcome:o.outcome,contextCategory:o.contextCategory,ts:o.ts});if(!(_e(i)&&i.accepted===!0))throw new Error("Community hub returned an invalid review response.")},async findReviewAnswers(o,i){let s=o.trim();if(!s)return[];let a=await Ne(r,Me(t.baseUrl,"/api/v15/community/reviews/search"),n,"POST",{query:s,limit:typeof i=="number"&&i>0?Math.min(Math.floor(i),20):void 0});return(_e(a)&&Array.isArray(a.answers)?a.answers:[]).map(wte).filter(l=>!!l)},async recordCommunityAsk(o){let i=await Ne(r,Me(t.baseUrl,"/api/v15/community/asks"),n,"POST",{id:o.id,askerPetId:o.askerPetId,question:o.question,contextCategory:o.contextCategory,ts:o.ts});if(!(_e(i)&&i.accepted===!0))throw new Error("Community hub returned an invalid ask response.")},async recordCommunityAnswer(o){let i=await Ne(r,Me(t.baseUrl,"/api/v15/community/answers"),n,"POST",{id:o.id,askId:o.askId,answererPetId:o.answererPetId,answer:o.answer,ts:o.ts});if(!(_e(i)&&i.accepted===!0))throw new Error("Community hub returned an invalid answer response.")},async recordCommunityInteraction(o){let i=await Ne(r,Me(t.baseUrl,"/api/v15/community/interactions"),n,"POST",{id:o.id,kind:o.kind,actorPetId:o.actorPetId,peerPetId:o.peerPetId,payload:o.payload,ts:o.ts});if(!(_e(i)&&i.accepted===!0))throw new Error("Community hub returned an invalid interaction response.")},async resolveRuntime(o,i){let s=encodeURIComponent(o.trim());if(!s)throw new Error("runtime id is required.");let a=encodeURIComponent(i.trim());if(!a)throw new Error("platform is required.");let c=await Ne(r,Me(t.baseUrl,`/api/v15/runtime/${s}/resolve?platform=${a}`),n,"GET"),l=xte(c);if(!l)throw new Error("Community hub returned an invalid runtime resolution.");return l}}}async function NR(t,e,r,n,o){let i=om(await Ne(t,Me(e,"/api/v15/registry/resources"),r,"POST",{id:o.id,type:n,title:o.title,summary:o.summary,visibility:o.visibility??"public",...o.category?{category:o.category}:{},tags:o.tags??[],manifest:o.manifest}));if(!i)throw new Error("Community hub returned an invalid resource.");if(o.version===void 0&&o.packageGzipBase64===void 0)return{resource:i};if(!o.version?.trim()||!o.packageGzipBase64?.trim())throw new Error("version and packageGzipBase64 must be provided together.");let s=encodeURIComponent(o.id.trim()),a=encodeURIComponent(o.version.trim()),c=Ete(await Ite(t,Me(e,`/api/v15/registry/resources/${s}/versions/${a}`),r,Buffer.from(o.packageGzipBase64,"base64")));if(!c)throw new Error("Community hub returned an invalid version.");return{resource:i,version:c}}function JN(t){return _e(t)?{average:typeof t.average=="number"?t.average:0,count:typeof t.count=="number"?t.count:0}:{average:0,count:0}}function kte(t){return!_e(t)||typeof t.id!="number"||typeof t.body!="string"?null:{id:t.id,body:t.body,folded:t.folded===!0,createdAt:typeof t.createdAt=="string"?t.createdAt:""}}function wte(t){if(!_e(t))return null;let e=typeof t.id=="string"?t.id:"",r=typeof t.resourceId=="string"?t.resourceId:"",n=typeof t.experience=="string"?t.experience:"",o=t.outcome==="success"||t.outcome==="fail"||t.outcome==="neutral"?t.outcome:null;return!e||!r||!n||!o?null:{id:e,resourceId:r,actorPetId:typeof t.actorPetId=="string"?t.actorPetId:"",experience:n,outcome:o,contextCategory:typeof t.contextCategory=="string"?t.contextCategory:null,ts:typeof t.ts=="number"?t.ts:0}}function Ste(t){return!_e(t)||typeof t.version!="string"||!t.version?null:{version:t.version,createdAt:typeof t.createdAt=="string"?t.createdAt:"",sizeBytes:typeof t.sizeBytes=="number"?t.sizeBytes:0,yanked:t.yanked===!0}}function xte(t){if(!_e(t))return null;let e=typeof t.id=="string"?t.id:"",r=typeof t.version=="string"?t.version:"",n=typeof t.downloadUrl=="string"?t.downloadUrl:"",o=typeof t.checksum=="string"?t.checksum:"",i=typeof t.sizeBytes=="number"?t.sizeBytes:0;return!e||!r||!n||!/^[a-f0-9]{64}$/.test(o)||!Number.isSafeInteger(i)||i<=0?null:{id:e,version:r,downloadUrl:n,checksum:o,sizeBytes:i}}function dt(t=ur()){let e=t.get("QLOGIC_LLMROUTER_ACCESS_TOKEN")?.trim();if(!e)return null;let r=Rte(t);return bte({baseUrl:Tte(t),token:e,clientVersion:r})}function Rte(t){let e=t.get("QLOGIC_AGENT_VERSION")?.trim();return e||"2.15.5"}function Tte(t){return t.get("QLOGIC_HUB_BASE_URL")?.trim()||t.get("XIAOZHICLAW_HUB_URL")?.trim()||"https://xiaozhi.qlogicagent.com"}function Pte(t){return Me(t,"/api/v15/registry/community-consent")}function Me(t,e){let r=t.trim().replace(/\/+$/,"");return r.endsWith("/v1")&&(r=r.slice(0,-3)),r.endsWith("/api")&&(r=r.slice(0,-4)),`${r}${e}`}function Ate(t,e){let r=e?.trim();return r?(n,o)=>t(n,{...o,headers:{...o?.headers,"x-client-version":r}}):t}async function XN(t,e,r,n,o){return Qr(await Ne(t,e,r,n,o),!0)}async function Ne(t,e,r,n,o){let i,s=o!==void 0;try{i=await t(e,{method:n,headers:{accept:"application/json",authorization:`Bearer ${r}`,...s?{"content-type":"application/json"}:{}},...s?{body:JSON.stringify(o)}:{},signal:AbortSignal.timeout(1e4)})}catch{throw new Error("Community hub is unavailable.")}if(!i.ok)throw new Error(`Community hub rejected registry request: ${i.status}`);return i.json().catch(()=>null)}async function Ite(t,e,r,n){let o;try{o=await t(e,{method:"PUT",headers:{accept:"application/json",authorization:`Bearer ${r}`,"content-type":"application/gzip"},body:n,signal:AbortSignal.timeout(1e4)})}catch{throw new Error("Community hub is unavailable.")}if(!o.ok)throw new Error(`Community hub rejected registry request: ${o.status}`);return o.json().catch(()=>null)}function Qr(t,e){let r=_e(t)?t:{},n=r.enabled===!0;return{enabled:n,methodSharingEnabled:n&&r.methodSharingEnabled!==!1,signalsEnabled:n&&r.signalsEnabled!==!1,encounterEnabled:n&&r.encounterEnabled!==!1,remoteSynced:e}}function _e(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}function om(t){return!_e(t)||typeof t.id!="string"?null:{id:t.id,type:typeof t.type=="string"?t.type:"skill",title:typeof t.title=="string"?t.title:t.id,summary:typeof t.summary=="string"?t.summary:"",visibility:typeof t.visibility=="string"?t.visibility:"private",latestVersion:typeof t.latestVersion=="string"?t.latestVersion:null,withdrawn:t.withdrawn===!0,withdrawnAt:typeof t.withdrawnAt=="string"?t.withdrawnAt:null}}function _te(t){if(t===void 0)return 3;if(typeof t!="number"||!Number.isSafeInteger(t)||t<1||t>3)throw new Error("registry match topK must be an integer between 1 and 3.");return t}function Cte(t){if(!_e(t)||t.canonical!==!0&&t.isCanonical!==!0)return null;let e=QN(t.sourceTier),r=eO(t.trustStage),n=im(t.resourceRiskTier),o=im(t.effectiveRiskTier);if(typeof t.id!="string"||typeof t.title!="string"||!e||!r||!n||!o)return null;let i=Array.isArray(t.capabilityTags)?t.capabilityTags:[];return{id:t.id,type:typeof t.type=="string"?t.type:"skill",title:OR(t.title,80),summary:OR(typeof t.summary=="string"?t.summary:"",160),category:typeof t.category=="string"?t.category:null,capabilityTags:i.filter(s=>typeof s=="string"&&s.trim().length>0).slice(0,6).map(s=>OR(s,32)),sourceTier:e,trustStage:r,resourceRiskTier:n,effectiveRiskTier:o,latestVersion:typeof t.latestVersion=="string"?t.latestVersion:null,canonical:!0}}function OR(t,e){let r=t.replace(/\s+/g," ").trim();return r.length<=e?r:`${r.slice(0,Math.max(0,e-1))}\u2026`}function Ete(t){return!_e(t)||typeof t.version!="string"||typeof t.checksum!="string"?null:{version:t.version,checksum:t.checksum,sizeBytes:typeof t.sizeBytes=="number"?t.sizeBytes:0}}function YN(t){return!_e(t)||typeof t.id!="number"||typeof t.resourceId!="string"?null:{id:t.id,resourceId:t.resourceId,resourceType:typeof t.resourceType=="string"?t.resourceType:"skill",title:typeof t.title=="string"?t.title:t.resourceId,event:vte.has(t.event)?t.event:"withdrawn",version:typeof t.version=="string"?t.version:null,reason:typeof t.reason=="string"?t.reason:null,read:t.read===!0,createdAt:typeof t.createdAt=="string"?t.createdAt:"",readAt:typeof t.readAt=="string"?t.readAt:null}}var Mte=new Set(["R0","R1","R2","R3"]),$te=new Set(["official","community"]),Dte=new Set(["quarantine","trial","trusted"]),Nte=new Set(["pending","approved","rejected"]);function im(t){return typeof t=="string"&&Mte.has(t)?t:null}function QN(t){return typeof t=="string"&&$te.has(t)?t:null}function eO(t){return typeof t=="string"&&Dte.has(t)?t:null}function Ote(t){return typeof t=="string"&&Nte.has(t)?t:null}function tO(t){if(!_e(t))return null;let e=QN(t.sourceTier),r=eO(t.trustStage),n=Ote(t.reviewStatus),o=im(t.resourceRiskTier),i=im(t.effectiveRiskTier);if(typeof t.id!="string"||typeof t.type!="string"||typeof t.kind!="string"||!e||!r||!n||!o||!i||typeof t.version!="string"||typeof t.checksum!="string"||typeof t.sizeBytes!="number"||typeof t.downloadUrl!="string")return null;let s=Array.isArray(t.requires)?t.requires:null,a=Array.isArray(t.dependencies)?t.dependencies:null;if(!s||!a||s.some(l=>typeof l!="string"))return null;let c=a.map(tO);return c.some(l=>!l)?null:{id:t.id,type:t.type,kind:t.kind,sourceTier:e,trustStage:r,reviewStatus:n,resourceRiskTier:o,effectiveRiskTier:i,requires:s,dependencies:c,version:t.version,checksum:t.checksum,sizeBytes:t.sizeBytes,downloadUrl:t.downloadUrl,manifest:t.manifest,minClientVersion:typeof t.minClientVersion=="string"&&t.minClientVersion.trim()?t.minClientVersion.trim():void 0,signature:typeof t.signature=="string"&&t.signature.trim()?t.signature:null,signingKeyId:typeof t.signingKeyId=="string"&&t.signingKeyId.trim()?t.signingKeyId:null}}var jte=/(?:[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}|[A-Za-z]:\\|\/Users\/|\/home\/|secret|token|password|\+?\d[\d\s().-]{7,}\d)/i,Lte=/\b(?:agent|tool|shell|execute|permission|memory|system prompt|developer message)\b/i;function Ute(t){return Fte(t),{manifest:{schema_version:15,kind:"asset",name:t.name,summary:t.summary,persona:t.persona,traits:t.traits??[],assets:t.assets??[],tags:t.tags??[]}}}async function rO(t,e){let r=await t.getConsent();if(!r.enabled||!r.methodSharingEnabled)throw new Error("Community method-sharing consent is required before publishing pet assets.");let n=Ute(e);return t.publishPet({id:e.id,title:e.name,summary:e.summary,visibility:e.visibility??"public",tags:e.tags??[],manifest:n.manifest})}function Fte(t){let e=[t.id,t.name,t.summary,t.persona,...t.traits??[],...t.tags??[]].join(`
670
+ `)),t.id!==void 0&&this.sendResponse(t.id,{log:o})}catch(e){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e)})}}async function KN(t){try{let e=t.params;if(!e?.agentId){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INVALID_PARAMS,message:"agentId is required."});return}let r=await this.ensureAgentConfigStore();this.acpDetector.setConfigStore(r.getData());let o=this.acpDetector.list().find(s=>s.id===e.agentId);if(!o){t.id!==void 0&&this.sendResponse(t.id,{ok:!1,error:`Agent ${e.agentId} not found`,durationMs:0});return}if(o.status==="not_installed"){t.id!==void 0&&this.sendResponse(t.id,{ok:!1,error:`Agent ${e.agentId} is not installed`,durationMs:0});return}let i=Date.now();t.id!==void 0&&this.sendResponse(t.id,{ok:o.status==="available",version:o.version,capabilities:o.capabilities,error:o.status!=="available"?`Agent status: ${o.status}`:void 0,durationMs:Date.now()-i})}catch(e){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e)})}}async function GN(t,e,r,n,o,i){let s=em(e,n,o),a=wN(s);if(a)return a;if(o!==tm){let f=xN(em(e,n,tm),s);if(f)return f}let c=`chat-${e}-${ate().slice(0,8)}`,l={current:null},d=typeof t.sendNotification=="function"?t.sendNotification.bind(t):void 0,p=new $r({onNotification:(f,g,h)=>{let y=l.current;if(!y)return;let v=h;if(g==="turn.delta"){let w=typeof v?.text=="string"?v.text:"";if(!w)return;y.deltas.push(w),y.turnId&&d&&(d("agents.prompt.delta",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,text:w}),y.streamedAny=!0);return}if(g==="turn.thought_delta"){let w=typeof v?.text=="string"?v.text:"";w&&y.turnId&&d&&d("agents.prompt.delta",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,text:w,reasoning:!0});return}if(g==="turn.plan"){y.turnId&&d&&d("agents.prompt.plan",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,steps:Array.isArray(v?.steps)?v.steps:[]});return}if(!y.turnId||!d)return;let k=typeof v?.callId=="string"?v.callId:String(v?.callId??"");g==="turn.tool_call"?d("agents.prompt.tool",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,event:{kind:"call",callId:k,name:typeof v?.toolName=="string"?v.toolName:typeof v?.name=="string"?v.name:"tool",arguments:cte(v)}}):g==="turn.tool_result"&&d("agents.prompt.tool",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,event:{kind:"result",callId:k,name:typeof v?.toolName=="string"?v.toolName:"tool",ok:v?.status!=="failed"&&v?.status!=="error",outputPreview:lte(v)}})},onMcpToolCall:async(f,g,h)=>typeof t.handleMcpToolCall=="function"?t.handleMcpToolCall(f,g,h):{ok:!1,error:"MCP tool call unavailable"},onPermissionRequest:(f,g)=>PN(g,{agentId:e,turnContext:()=>l.current,sendNotification:d}),log:{info:f=>t.log?.(`[agents.prompt] ${f}`),warn:f=>t.log?.(`[agents.prompt] WARN: ${f}`),debug:f=>t.log?.(`[agents.prompt] ${f}`)},sessionDir:rm.join(pe(),"agent-logs")});await p.spawn({memberId:c,name:`chat-${e}`,cwd:n,prompt:"",external:r,systemPrompt:i});let m={manager:p,memberId:c,holder:l,lastUsed:Date.now()};return SN(s,m),m}async function VN(t){try{let e=t.params??{},r=typeof e.agentId=="string"?e.agentId.trim():"";if(!r||r==="qlogicagent"){t.id!==void 0&&this.sendResponse(t.id,{ok:!1,warmed:!1});return}let n=await this.ensureAgentConfigStore();this.acpDetector.setConfigStore(n.getData()),this.acpDetector.scan(!1);let o=this.acpDetector.buildExternalDescriptor(r);if(!o){t.id!==void 0&&this.sendResponse(t.id,{ok:!1,warmed:!1});return}let i=typeof this.getActiveProjectRoot=="function"?this.getActiveProjectRoot():process.cwd();await GN(this,r,o,i,tm),t.id!==void 0&&this.sendResponse(t.id,{ok:!0,warmed:!0})}catch(e){t.id!==void 0&&this.sendResponse(t.id,{ok:!1,warmed:!1,error:e instanceof Error?e.message:String(e)})}}async function ZN(t){try{let e=t.params??{},r=typeof e.agentId=="string"?e.agentId.trim():"",n=typeof e.prompt=="string"?e.prompt:"";if(!r||!n.trim()){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INVALID_PARAMS,message:"agentId and prompt are required."});return}let o=await this.ensureAgentConfigStore();this.acpDetector.setConfigStore(o.getData()),this.acpDetector.scan(!1);let i=this.acpDetector.buildExternalDescriptor(r);if(!i){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INVALID_PARAMS,message:`Agent ${r} is not available or not ACP-compatible.`});return}let s=typeof e.cwd=="string"&&e.cwd?e.cwd:typeof this.getActiveProjectRoot=="function"?this.getActiveProjectRoot():process.cwd(),a=typeof e.timeoutMs=="number"&&e.timeoutMs>0?e.timeoutMs:3e5,c=typeof e.sessionId=="string"?e.sessionId:void 0,l=typeof e.turnId=="string"?e.turnId:void 0,d=typeof e.requestId=="string"?e.requestId:void 0,p=typeof e.projectId=="string"?e.projectId:void 0,m=em(r,s,c),f=await GN(this,r,i,s,c,typeof e.systemPrompt=="string"?e.systemPrompt:void 0),g={sessionId:c,turnId:l,requestId:d,deltas:[],streamedAny:!1};f.holder.current=g,f.lastUsed=Date.now();let h;try{h=await f.manager.sendTask(f.memberId,n,{timeout:a})}catch(k){throw await dte({sessionId:c,projectRoot:s,turnId:l,projectId:p,agentId:r,prompt:n,error:k}),gl(m),k}finally{f.holder.current=null}let y=g.deltas.join("")||(typeof h?.content=="string"?h.content:""),v=f.manager.getUsageTracker(f.memberId)?.getUsage();if(c){Kr(c,{role:"user",content:n},s,l),y&&Kr(c,{role:"assistant",content:y},s,l);let k=Nt(c,s);at(c,{type:"personal",...p?{projectId:p}:{},...k?.title?{}:{title:sc(n,"External agent session")},...k?.agentId?{}:{agentId:r}},s)}t.id!==void 0&&this.sendResponse(t.id,{ok:!0,agentId:r,content:y,streamed:g.streamedAny,stopReason:h?.stopReason,usage:v?{inputTokens:v.inputTokens,outputTokens:v.outputTokens,totalTokens:v.totalTokens,cacheRead:v.cachedReadTokens,thoughtTokens:v.thoughtTokens,cost:v.cost}:void 0})}catch(e){if(t.id!==void 0){let r=IN(e);this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:_N(e),...r?{data:{authMethods:r}}:{}})}}}oe();import*as va from"node:fs/promises";import*as sj from"node:path";xs();var ute=/^[a-z0-9][a-z0-9_.:-]{0,79}$/i,pte=new Set(["journeyDay","count"]),mte=new Set(["blocked"]),fte=new Set(["R0","R1","R2","R3"]),gte=new Set(["aix","android","darwin","freebsd","ios","linux","openbsd","sunos","win32"]),hte={"community.journey.view":new Set(["surface","petState","journeyDay","platform"]),"community.share.generated":new Set(["surface","action","source","petState","journeyDay","platform"]),"community.sandbox.violation":new Set(["surface","action","source","ruleId","riskTier","platform","count","blocked"]),"community.desensitization.hit":new Set(["surface","action","source","ruleId","riskTier","platform","count","blocked"]),"registry.install_failed":new Set(["dimension","resourceType","platform"])};function nm(t,e){if(!e||typeof e!="object"||Array.isArray(e))return;let r=hte[t],n={};for(let[o,i]of Object.entries(e)){if(!r.has(o))continue;let s=yte(o,i);s!==void 0&&(n[o]=s)}return Object.keys(n).length>0?n:void 0}function yte(t,e){if(pte.has(t))return typeof e=="number"&&Number.isInteger(e)&&e>=0&&e<=1e5?e:void 0;if(mte.has(t))return typeof e=="boolean"?e:void 0;if(t==="riskTier")return typeof e=="string"&&fte.has(e)?e:void 0;if(t==="platform")return typeof e=="string"&&gte.has(e)?e:void 0;if(typeof e!="string")return;let r=e.trim();return ute.test(r)?r:void 0}var vte=new Set(["withdrawn","version-available","deprecated","version-yanked","frozen"]);function bte(t){let e=Pte(t.baseUrl),r=Ate(t.fetchFn??fetch,t.clientVersion),n=t.token.trim();return{async getConsent(){return XN(r,e,n,"GET")},async setConsent(o){return XN(r,e,n,"PUT",o)},async matchRegistry(o){let i=o.intent.trim();if(!i)throw new Error("intent is required.");let s=_te(o.topK),a=await Ne(r,Me(t.baseUrl,"/api/v15/registry/match"),n,"POST",{intent:i,topK:s,prefer:o.preferOfficial===!1?"relevance":"official",canonicalOnly:!0});return(_e(a)&&Array.isArray(a.matches)?a.matches:[]).map(Cte).filter(l=>!!l).slice(0,s)},async publishSkill(o){return NR(r,t.baseUrl,n,"skill",o)},async publishPet(o){return NR(r,t.baseUrl,n,"pet",o)},async publishWorkflow(o){return NR(r,t.baseUrl,n,"workflow",o)},async recordSignal(o){let i=encodeURIComponent(o.resourceId.trim());if(!i)throw new Error("resourceId is required.");let s=await Ne(r,Me(t.baseUrl,`/api/v15/registry/resources/${i}/signal`),n,"POST",{event:o.event,attribution:o.attribution?.trim()||void 0,metadata:o.metadata});if(_e(s)&&s.accepted===!0)return{accepted:!0};throw new Error("Community hub returned an invalid signal response.")},async recordTelemetry(o){let i=nm(o.event,o.metadata),s=await Ne(r,Me(t.baseUrl,"/api/v15/registry/telemetry"),n,"POST",{event:o.event,metadata:i});if(_e(s)&&s.accepted===!0)return{accepted:!0};throw new Error("Community hub returned an invalid telemetry response.")},async listSharedResources(){let o=await Ne(r,Me(t.baseUrl,"/api/v15/registry/mine"),n,"GET");return(_e(o)&&Array.isArray(o.resources)?o.resources:[]).map(om).filter(s=>!!s)},async withdrawSharedResource(o,i){let s=encodeURIComponent(o.trim());if(!s)throw new Error("resourceId is required.");let a=await Ne(r,Me(t.baseUrl,`/api/v15/registry/resources/${s}/withdraw`),n,"POST",{reason:i?.trim()||void 0}),c=om(a);if(!c)throw new Error("Community hub returned an invalid resource.");return c},async withdrawSharedResources(o){let i=await Ne(r,Me(t.baseUrl,"/api/v15/registry/community-consent/withdraw-shared"),n,"POST",{reason:o?.trim()||void 0});return(_e(i)&&Array.isArray(i.resources)?i.resources:[]).map(om).filter(a=>!!a)},async listNotices(o={}){let i=o.includeRead?"?includeRead=true":"",s=await Ne(r,Me(t.baseUrl,`/api/v15/registry/notices${i}`),n,"GET");return(_e(s)&&Array.isArray(s.notices)?s.notices:[]).map(YN).filter(c=>!!c)},async markNoticeRead(o){if(!Number.isSafeInteger(o)||o<1)throw new Error("noticeId is required.");let i=await Ne(r,Me(t.baseUrl,`/api/v15/registry/notices/${o}/read`),n,"POST"),s=YN(i);if(!s)throw new Error("Community hub returned an invalid notice.");return s},async resolveInstall(o,i){let s=encodeURIComponent(o.trim());if(!s)throw new Error("resourceId is required.");let a=i?.trim(),c=a?`?version=${encodeURIComponent(a)}`:"",l=await Ne(r,Me(t.baseUrl,`/api/v15/registry/resources/${s}/install${c}`),n,"GET"),d=tO(l);if(!d)throw new Error("Community hub returned an invalid install resolution.");return d},async listResourceVersions(o){let i=encodeURIComponent(o.trim());if(!i)throw new Error("resourceId is required.");let s=await Ne(r,Me(t.baseUrl,`/api/v15/registry/resources/${i}/versions`),n,"GET");return(_e(s)&&Array.isArray(s.versions)?s.versions:[]).map(Ste).filter(c=>!!c)},async rateResource(o,i){let s=encodeURIComponent(o.trim());if(!s)throw new Error("resourceId is required.");let a=await Ne(r,Me(t.baseUrl,`/api/v15/registry/resources/${s}/rate`),n,"POST",{stars:i});return JN(a)},async getRatingSummary(o){let i=encodeURIComponent(o.trim());if(!i)throw new Error("resourceId is required.");let s=await Ne(r,Me(t.baseUrl,`/api/v15/registry/resources/${i}/rating`),n,"GET");return JN(s)},async reportResource(o,i){let s=encodeURIComponent(o.trim());if(!s)throw new Error("resourceId is required.");await Ne(r,Me(t.baseUrl,`/api/v15/registry/resources/${s}/report`),n,"POST",{reason:i?.trim()||void 0})},async listComments(o){let i=encodeURIComponent(o.trim());if(!i)throw new Error("resourceId is required.");let s=await Ne(r,Me(t.baseUrl,`/api/v15/registry/resources/${i}/comments`),n,"GET");return(_e(s)&&Array.isArray(s.comments)?s.comments:[]).map(kte).filter(c=>!!c)},async postComment(o,i){let s=encodeURIComponent(o.trim());if(!s)throw new Error("resourceId is required.");let a=i?.trim()??"";if(!a)throw new Error("Comment body is required.");let c=await Ne(r,Me(t.baseUrl,`/api/v15/registry/resources/${s}/comments`),n,"POST",{body:a}),l=_e(c)?c:{};return{id:typeof l.id=="number"?l.id:0,folded:l.folded===!0,createdAt:typeof l.createdAt=="string"?l.createdAt:""}},async emitActivity(o){let i=await Ne(r,Me(t.baseUrl,"/api/v15/community/activity"),n,"POST",{id:o.id,type:o.type,ts:o.ts,actorPetId:o.actorPetId,peerRef:o.peerRef,visibility:o.visibility,payload:o.payload});if(!(_e(i)&&i.accepted===!0))throw new Error("Community hub returned an invalid activity response.")},async recordCommunityReview(o){let i=await Ne(r,Me(t.baseUrl,"/api/v15/community/reviews"),n,"POST",{id:o.id,resourceId:o.resourceId,actorPetId:o.actorPetId,experience:o.experience,outcome:o.outcome,contextCategory:o.contextCategory,ts:o.ts});if(!(_e(i)&&i.accepted===!0))throw new Error("Community hub returned an invalid review response.")},async findReviewAnswers(o,i){let s=o.trim();if(!s)return[];let a=await Ne(r,Me(t.baseUrl,"/api/v15/community/reviews/search"),n,"POST",{query:s,limit:typeof i=="number"&&i>0?Math.min(Math.floor(i),20):void 0});return(_e(a)&&Array.isArray(a.answers)?a.answers:[]).map(wte).filter(l=>!!l)},async recordCommunityAsk(o){let i=await Ne(r,Me(t.baseUrl,"/api/v15/community/asks"),n,"POST",{id:o.id,askerPetId:o.askerPetId,question:o.question,contextCategory:o.contextCategory,ts:o.ts});if(!(_e(i)&&i.accepted===!0))throw new Error("Community hub returned an invalid ask response.")},async recordCommunityAnswer(o){let i=await Ne(r,Me(t.baseUrl,"/api/v15/community/answers"),n,"POST",{id:o.id,askId:o.askId,answererPetId:o.answererPetId,answer:o.answer,ts:o.ts});if(!(_e(i)&&i.accepted===!0))throw new Error("Community hub returned an invalid answer response.")},async recordCommunityInteraction(o){let i=await Ne(r,Me(t.baseUrl,"/api/v15/community/interactions"),n,"POST",{id:o.id,kind:o.kind,actorPetId:o.actorPetId,peerPetId:o.peerPetId,payload:o.payload,ts:o.ts});if(!(_e(i)&&i.accepted===!0))throw new Error("Community hub returned an invalid interaction response.")},async resolveRuntime(o,i){let s=encodeURIComponent(o.trim());if(!s)throw new Error("runtime id is required.");let a=encodeURIComponent(i.trim());if(!a)throw new Error("platform is required.");let c=await Ne(r,Me(t.baseUrl,`/api/v15/runtime/${s}/resolve?platform=${a}`),n,"GET"),l=xte(c);if(!l)throw new Error("Community hub returned an invalid runtime resolution.");return l}}}async function NR(t,e,r,n,o){let i=om(await Ne(t,Me(e,"/api/v15/registry/resources"),r,"POST",{id:o.id,type:n,title:o.title,summary:o.summary,visibility:o.visibility??"public",...o.category?{category:o.category}:{},tags:o.tags??[],manifest:o.manifest}));if(!i)throw new Error("Community hub returned an invalid resource.");if(o.version===void 0&&o.packageGzipBase64===void 0)return{resource:i};if(!o.version?.trim()||!o.packageGzipBase64?.trim())throw new Error("version and packageGzipBase64 must be provided together.");let s=encodeURIComponent(o.id.trim()),a=encodeURIComponent(o.version.trim()),c=Ete(await Ite(t,Me(e,`/api/v15/registry/resources/${s}/versions/${a}`),r,Buffer.from(o.packageGzipBase64,"base64")));if(!c)throw new Error("Community hub returned an invalid version.");return{resource:i,version:c}}function JN(t){return _e(t)?{average:typeof t.average=="number"?t.average:0,count:typeof t.count=="number"?t.count:0}:{average:0,count:0}}function kte(t){return!_e(t)||typeof t.id!="number"||typeof t.body!="string"?null:{id:t.id,body:t.body,folded:t.folded===!0,createdAt:typeof t.createdAt=="string"?t.createdAt:""}}function wte(t){if(!_e(t))return null;let e=typeof t.id=="string"?t.id:"",r=typeof t.resourceId=="string"?t.resourceId:"",n=typeof t.experience=="string"?t.experience:"",o=t.outcome==="success"||t.outcome==="fail"||t.outcome==="neutral"?t.outcome:null;return!e||!r||!n||!o?null:{id:e,resourceId:r,actorPetId:typeof t.actorPetId=="string"?t.actorPetId:"",experience:n,outcome:o,contextCategory:typeof t.contextCategory=="string"?t.contextCategory:null,ts:typeof t.ts=="number"?t.ts:0}}function Ste(t){return!_e(t)||typeof t.version!="string"||!t.version?null:{version:t.version,createdAt:typeof t.createdAt=="string"?t.createdAt:"",sizeBytes:typeof t.sizeBytes=="number"?t.sizeBytes:0,yanked:t.yanked===!0}}function xte(t){if(!_e(t))return null;let e=typeof t.id=="string"?t.id:"",r=typeof t.version=="string"?t.version:"",n=typeof t.downloadUrl=="string"?t.downloadUrl:"",o=typeof t.checksum=="string"?t.checksum:"",i=typeof t.sizeBytes=="number"?t.sizeBytes:0;return!e||!r||!n||!/^[a-f0-9]{64}$/.test(o)||!Number.isSafeInteger(i)||i<=0?null:{id:e,version:r,downloadUrl:n,checksum:o,sizeBytes:i}}function dt(t=ur()){let e=t.get("QLOGIC_LLMROUTER_ACCESS_TOKEN")?.trim();if(!e)return null;let r=Rte(t);return bte({baseUrl:Tte(t),token:e,clientVersion:r})}function Rte(t){let e=t.get("QLOGIC_AGENT_VERSION")?.trim();return e||"2.15.6"}function Tte(t){return t.get("QLOGIC_HUB_BASE_URL")?.trim()||t.get("XIAOZHICLAW_HUB_URL")?.trim()||"https://xiaozhi.qlogicagent.com"}function Pte(t){return Me(t,"/api/v15/registry/community-consent")}function Me(t,e){let r=t.trim().replace(/\/+$/,"");return r.endsWith("/v1")&&(r=r.slice(0,-3)),r.endsWith("/api")&&(r=r.slice(0,-4)),`${r}${e}`}function Ate(t,e){let r=e?.trim();return r?(n,o)=>t(n,{...o,headers:{...o?.headers,"x-client-version":r}}):t}async function XN(t,e,r,n,o){return Qr(await Ne(t,e,r,n,o),!0)}async function Ne(t,e,r,n,o){let i,s=o!==void 0;try{i=await t(e,{method:n,headers:{accept:"application/json",authorization:`Bearer ${r}`,...s?{"content-type":"application/json"}:{}},...s?{body:JSON.stringify(o)}:{},signal:AbortSignal.timeout(1e4)})}catch{throw new Error("Community hub is unavailable.")}if(!i.ok)throw new Error(`Community hub rejected registry request: ${i.status}`);return i.json().catch(()=>null)}async function Ite(t,e,r,n){let o;try{o=await t(e,{method:"PUT",headers:{accept:"application/json",authorization:`Bearer ${r}`,"content-type":"application/gzip"},body:n,signal:AbortSignal.timeout(1e4)})}catch{throw new Error("Community hub is unavailable.")}if(!o.ok)throw new Error(`Community hub rejected registry request: ${o.status}`);return o.json().catch(()=>null)}function Qr(t,e){let r=_e(t)?t:{},n=r.enabled===!0;return{enabled:n,methodSharingEnabled:n&&r.methodSharingEnabled!==!1,signalsEnabled:n&&r.signalsEnabled!==!1,encounterEnabled:n&&r.encounterEnabled!==!1,remoteSynced:e}}function _e(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}function om(t){return!_e(t)||typeof t.id!="string"?null:{id:t.id,type:typeof t.type=="string"?t.type:"skill",title:typeof t.title=="string"?t.title:t.id,summary:typeof t.summary=="string"?t.summary:"",visibility:typeof t.visibility=="string"?t.visibility:"private",latestVersion:typeof t.latestVersion=="string"?t.latestVersion:null,withdrawn:t.withdrawn===!0,withdrawnAt:typeof t.withdrawnAt=="string"?t.withdrawnAt:null}}function _te(t){if(t===void 0)return 3;if(typeof t!="number"||!Number.isSafeInteger(t)||t<1||t>3)throw new Error("registry match topK must be an integer between 1 and 3.");return t}function Cte(t){if(!_e(t)||t.canonical!==!0&&t.isCanonical!==!0)return null;let e=QN(t.sourceTier),r=eO(t.trustStage),n=im(t.resourceRiskTier),o=im(t.effectiveRiskTier);if(typeof t.id!="string"||typeof t.title!="string"||!e||!r||!n||!o)return null;let i=Array.isArray(t.capabilityTags)?t.capabilityTags:[];return{id:t.id,type:typeof t.type=="string"?t.type:"skill",title:OR(t.title,80),summary:OR(typeof t.summary=="string"?t.summary:"",160),category:typeof t.category=="string"?t.category:null,capabilityTags:i.filter(s=>typeof s=="string"&&s.trim().length>0).slice(0,6).map(s=>OR(s,32)),sourceTier:e,trustStage:r,resourceRiskTier:n,effectiveRiskTier:o,latestVersion:typeof t.latestVersion=="string"?t.latestVersion:null,canonical:!0}}function OR(t,e){let r=t.replace(/\s+/g," ").trim();return r.length<=e?r:`${r.slice(0,Math.max(0,e-1))}\u2026`}function Ete(t){return!_e(t)||typeof t.version!="string"||typeof t.checksum!="string"?null:{version:t.version,checksum:t.checksum,sizeBytes:typeof t.sizeBytes=="number"?t.sizeBytes:0}}function YN(t){return!_e(t)||typeof t.id!="number"||typeof t.resourceId!="string"?null:{id:t.id,resourceId:t.resourceId,resourceType:typeof t.resourceType=="string"?t.resourceType:"skill",title:typeof t.title=="string"?t.title:t.resourceId,event:vte.has(t.event)?t.event:"withdrawn",version:typeof t.version=="string"?t.version:null,reason:typeof t.reason=="string"?t.reason:null,read:t.read===!0,createdAt:typeof t.createdAt=="string"?t.createdAt:"",readAt:typeof t.readAt=="string"?t.readAt:null}}var Mte=new Set(["R0","R1","R2","R3"]),$te=new Set(["official","community"]),Dte=new Set(["quarantine","trial","trusted"]),Nte=new Set(["pending","approved","rejected"]);function im(t){return typeof t=="string"&&Mte.has(t)?t:null}function QN(t){return typeof t=="string"&&$te.has(t)?t:null}function eO(t){return typeof t=="string"&&Dte.has(t)?t:null}function Ote(t){return typeof t=="string"&&Nte.has(t)?t:null}function tO(t){if(!_e(t))return null;let e=QN(t.sourceTier),r=eO(t.trustStage),n=Ote(t.reviewStatus),o=im(t.resourceRiskTier),i=im(t.effectiveRiskTier);if(typeof t.id!="string"||typeof t.type!="string"||typeof t.kind!="string"||!e||!r||!n||!o||!i||typeof t.version!="string"||typeof t.checksum!="string"||typeof t.sizeBytes!="number"||typeof t.downloadUrl!="string")return null;let s=Array.isArray(t.requires)?t.requires:null,a=Array.isArray(t.dependencies)?t.dependencies:null;if(!s||!a||s.some(l=>typeof l!="string"))return null;let c=a.map(tO);return c.some(l=>!l)?null:{id:t.id,type:t.type,kind:t.kind,sourceTier:e,trustStage:r,reviewStatus:n,resourceRiskTier:o,effectiveRiskTier:i,requires:s,dependencies:c,version:t.version,checksum:t.checksum,sizeBytes:t.sizeBytes,downloadUrl:t.downloadUrl,manifest:t.manifest,minClientVersion:typeof t.minClientVersion=="string"&&t.minClientVersion.trim()?t.minClientVersion.trim():void 0,signature:typeof t.signature=="string"&&t.signature.trim()?t.signature:null,signingKeyId:typeof t.signingKeyId=="string"&&t.signingKeyId.trim()?t.signingKeyId:null}}var jte=/(?:[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}|[A-Za-z]:\\|\/Users\/|\/home\/|secret|token|password|\+?\d[\d\s().-]{7,}\d)/i,Lte=/\b(?:agent|tool|shell|execute|permission|memory|system prompt|developer message)\b/i;function Ute(t){return Fte(t),{manifest:{schema_version:15,kind:"asset",name:t.name,summary:t.summary,persona:t.persona,traits:t.traits??[],assets:t.assets??[],tags:t.tags??[]}}}async function rO(t,e){let r=await t.getConsent();if(!r.enabled||!r.methodSharingEnabled)throw new Error("Community method-sharing consent is required before publishing pet assets.");let n=Ute(e);return t.publishPet({id:e.id,title:e.name,summary:e.summary,visibility:e.visibility??"public",tags:e.tags??[],manifest:n.manifest})}function Fte(t){let e=[t.id,t.name,t.summary,t.persona,...t.traits??[],...t.tags??[]].join(`
671
671
  `);if(jte.test(e))throw new Error("Pet asset publish blocked: private email, path, secret, token, or phone-like text detected.");if(Lte.test(e))throw new Error("Pet asset publish blocked: pets are display-only and cannot claim agent execution powers.");for(let r of t.assets??[])if(r.path.includes("..")||r.path.startsWith("/")||/^[A-Za-z]:\\/.test(r.path))throw new Error("Pet asset publish blocked: unsafe asset path.")}var jR={enabled:!0},Hte=new Set(["R2","R3"]);function nO(t,e=jR){return Hte.has(t.effectiveRiskTier)?{mode:"high-risk-ask",requiresInstallConsent:!0,requiresHighRiskConsent:!0,reason:`effectiveRiskTier=${t.effectiveRiskTier} \u9AD8\u5371,\u5FC5\u987B\u9AD8\u5371\u95EE\u4EBA`}:e.enabled?t.effectiveRiskTier==="R0"?{mode:"silent",requiresInstallConsent:!1,requiresHighRiskConsent:!1,reason:"R0 \u4F4E\u98CE\u9669 inert,\u81EA\u6CBB\u9759\u9ED8\u83B7\u53D6"}:{mode:"ask",requiresInstallConsent:!0,requiresHighRiskConsent:!1,reason:"R1 \u4F4E\u98CE\u9669\u4F46\u975E\u96F6,\u95EE\u4EBA\u4E00\u6B21"}:{mode:"ask",requiresInstallConsent:!0,requiresHighRiskConsent:!1,reason:"\u81EA\u6CBB\u9884\u7B97\u5173\u95ED,\u56DE\u9000\u663E\u5F0F\u540C\u610F"}}var oO=new Set(["installed","success","fail","error","kept","uninstalled","endorse"]),zte=new Set(["acquire","ask","answer","encounter","review"]),Bte=new Set(["unlock","flaunt"]),qte=new Set([...oO,...zte,...Bte,"search"]),Wte=["x","y","z","lat","lng","lon","coord","coords","coordinate","coordinates","position","positionHint","pos"];function sm(t){return oO.has(t)}function Kte(t){return typeof t=="string"&&qte.has(t)}function Gte(t){if(t==null)return;if(typeof t!="object")throw new Error("ActivityEvent anchor \u5FC5\u987B\u662F\u5BF9\u8C61");for(let r of Object.keys(t))if(Wte.includes(r))throw new Error(`ActivityEvent anchor \u7981\u6743\u5A01\u5750\u6807\u952E: ${r}(DR12 \u7EA2\u7EBF:v1 \u4F4D\u7F6E client \u975E\u6743\u5A01)`);let e={};return typeof t.districtId=="string"&&t.districtId.length>0&&(e.districtId=t.districtId),typeof t.shopId=="string"&&t.shopId.length>0&&(e.shopId=t.shopId),e.districtId===void 0&&e.shopId===void 0?void 0:e}function iO(t){if(!t.id||typeof t.id!="string")throw new Error("ActivityEvent.id \u5FC5\u586B(\u5E42\u7B49\u952E)");if(!Kte(t.type))throw new Error(`ActivityEvent.type \u975E\u6CD5: ${String(t.type)}`);if(typeof t.ts!="number"||!Number.isFinite(t.ts)||t.ts<0)throw new Error("ActivityEvent.ts \u5FC5\u987B\u662F\u975E\u8D1F epoch ms");if(!t.actorPetId||typeof t.actorPetId!="string")throw new Error("ActivityEvent.actorPetId \u5FC5\u586B");let e=t.payload??{},r=Gte(e.anchor),n={...e};r?n.anchor=r:delete n.anchor;let o={id:t.id,type:t.type,ts:t.ts,actorPetId:t.actorPetId,payload:n,visibility:t.visibility??"owner"};return typeof t.peerRef=="string"&&t.peerRef.length>0&&(o.peerRef=t.peerRef),o}import{createHash as Vte}from"node:crypto";var Zte="pk_",Jte=24;function am(t,e){let r=(t??"").trim(),n=(e??"").trim();if(!r||!n)throw new Error("derivePetKey: ownerUserId \u4E0E deviceId \u5747\u5FC5\u586B");let o=Vte("sha256").update(r+"\0"+n).digest("hex");return`${Zte}${o.slice(0,Jte)}`}xs();function LR(t){return{async emit(e){if(!t.transport)return"disabled";let r=iO(e);if(r.visibility==="community"){if(!t.consent)return"consent-blocked";let n;try{n=await t.consent.getConsent()}catch{return"failed"}if(!n.enabled||!(sm(r.type)?n.signalsEnabled:n.encounterEnabled))return"consent-blocked"}try{return await t.transport.emit(r),"emitted"}catch{return"failed"}}}}function UR(t){return{async emit(e){if(!t.emitActivity)throw new Error("emitActivity unavailable on client");await t.emitActivity(e)}}}function FR(){let t=dt(),e=t?.emitActivity?UR(t):null;return LR({transport:e,consent:t})}function HR(t=ur()){let e=t.get("QLOGIC_LLMROUTER_USER_ID")?.trim(),r=t.get("QLOGIC_LLMROUTER_DEVICE_ID")?.trim();if(!e||!r)return null;try{return am(e,r)}catch{return null}}import{randomUUID as aj}from"node:crypto";import{createPublicKey as Xte,verify as Yte}from"node:crypto";function Qte(t){return`id=${t.id}
672
672
  version=${t.version}
673
673
  checksum=${t.checksum}
package/dist/index.js CHANGED
@@ -666,7 +666,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
666
666
  `;try{n.write(i)}catch{}}}async attemptRuntimeRestart(e,r,n){let o=this.callbacks.log,i=this.processes.get(e.memberId),s=i?.ipcServer,a=i?.ipcPath,c=i?.stderrStream;this.processes.delete(e.memberId);try{let l={memberId:e.memberId,name:e.name,pid:-1,cwd:e.cwd,state:"starting",startedAt:Date.now(),stderrLogPath:i?.handle.stderrLogPath},d=e.external,p=[...d.acpArgs];a&&(r.QLOGICAGENT_PARENT_RPC=a);let m=MR(d.cliPath,p,{cwd:e.cwd,env:r,stdio:["pipe","pipe","pipe"],detached:!1});l.pid=m.pid??-1;let f=new Map,g=new Bo,h=new cl,y=xR({cwd:e.cwd,requestPermission:this.callbacks.onPermissionRequest?w=>this.callbacks.onPermissionRequest(e.memberId,w):void 0});this.processes.set(e.memberId,{handle:l,child:m,pendingRpc:f,acpAdapter:g,usageTracker:h,ipcServer:s,ipcPath:a,stderrStream:c,hostHandler:y,runtimeRestartCount:n}),g.attach(m,(w,S)=>{if(w==="session/update"){let M=S?.update?.sessionUpdate;if(typeof M=="string"){let C=this.processes.get(e.memberId),T=C?.handle.acpUpdateTypes??[];C&&!T.includes(M)&&(C.handle.acpUpdateTypes=[...T,M])}}w==="usage_update"&&h.onUsageUpdate(S);let R=Bo.translateNotification(w,S);R?(this.captureChildProgress(e.memberId,R.method,R.params),this.callbacks.onNotification?.(e.memberId,R.method,R.params)):(this.captureChildProgress(e.memberId,w,S),this.callbacks.onNotification?.(e.memberId,w,S))},y),m.stderr&&Xp({input:m.stderr,crlfDelay:Number.POSITIVE_INFINITY}).on("line",S=>{this.callbacks.log?.debug?.(`[${new Date().toISOString()}] [debug] [agent:${e.memberId}] [stderr] ${S}`),c?.write(`${new Date().toISOString()} ${S}
667
667
  `)}),m.on("exit",(w,S)=>{g.detach(),y.disposeAll();let R=l.state;if(R!=="killed"&&R!=="completed"&&w!==0){let C=this.processes.get(e.memberId)?.runtimeRestartCount??n;if(C<pa){let T=fN*2**C;this.slog("warn",e.memberId,"crash",`crashed again (code=${w}), restart ${C+1}/${pa}`),this.callbacks.onNotification?.(e.memberId,"agents.error",{agentId:e.memberId,phase:"runtime",error:`Process crashed (code=${w}), restarting`,retriesLeft:pa-C-1}),setTimeout(()=>{this.attemptRuntimeRestart(e,r,C+1).catch(_=>{this.slog("warn",e.memberId,"restart",`failed: ${_ instanceof Error?_.message:String(_)}`)})},T);return}}R!=="killed"&&(l.state=w===0?"completed":"failed"),l.endedAt=Date.now(),w!==0&&!l.error&&(l.error=`ACP process exited with code ${w} (signal: ${S})`),this.callbacks.onStateChange?.(e.memberId,l.state),this.callbacks.onExit?.(e.memberId,w,S)}),m.on("error",w=>{g.detach(),y.disposeAll(),l.state="failed",l.error=w.message,l.endedAt=Date.now(),this.callbacks.onStateChange?.(e.memberId,"failed")}),this.callbacks.onStateChange?.(e.memberId,"starting");let v=await g.initialize(m);l.state="ready",l.supportsResume=v.agentCapabilities.loadSession===!0,this.callbacks.onStateChange?.(e.memberId,"ready"),this.slog("info",e.memberId,"restart",`ACP restarted (attempt=${n}, protocol=${v.protocolVersion}, loadSession=${l.supportsResume}, pid=${l.pid})`);let k=[...e.mcpServers??[]];a&&k.push({name:"qlogicagent-tools",command:process.execPath,args:[this.mcpBridgeScriptPath],env:{QLOGICAGENT_PARENT_RPC:a,QLOGICAGENT_SESSION_ID:e.memberId}});try{if(l.supportsResume&&l.sessionId){let w=await g.resumeSession(m,l.sessionId,{cwd:e.cwd,mcpServers:k.length>0?k:void 0});l.sessionId=w.sessionId,this.slog("info",e.memberId,"session",`session resumed (id=${l.sessionId})`)}else{let w={cwd:e.cwd};k.length>0&&(w.mcpServers=k),e.systemPrompt&&(w.systemPrompt=e.systemPrompt);let S=await g.createSession(m,w);l.sessionId=S.sessionId,this.slog("info",e.memberId,"session",`new session on restart (id=${l.sessionId})`)}}catch{this.slog("warn",e.memberId,"session","session re-creation failed on restart")}this.startHeartbeat(e.memberId,w=>{this.slog("warn",w,"heartbeat","hang detected \u2014 force-killing"),this.callbacks.onNotification?.(w,"agents.error",{agentId:w,phase:"heartbeat",error:`Agent ${e.name} stopped responding`,retriesLeft:0}),this.kill(w)})}catch(l){let d=this.processes.get(e.memberId);d&&(d.handle.state="failed",d.handle.error=`Runtime restart failed: ${l instanceof Error?l.message:String(l)}`,d.handle.endedAt=Date.now()),this.callbacks.onStateChange?.(e.memberId,"failed"),this.callbacks.onNotification?.(e.memberId,"agents.error",{agentId:e.memberId,phase:"runtime",error:`Restart failed after ${n} attempts: ${l instanceof Error?l.message:String(l)}`,retriesLeft:0})}}getMcpIpcPath(e){return this.processes.get(e)?.ipcPath}heartbeatTimers=new Map;missedBeats=new Map;static HEARTBEAT_INTERVAL=3e4;static MAX_MISSED_BEATS=3;startHeartbeat(e,r){this.stopHeartbeat(e),this.missedBeats.set(e,0);let n=setInterval(async()=>{let o=this.processes.get(e);if(!o||o.handle.state==="completed"||o.handle.state==="failed"||o.handle.state==="killed"){this.stopHeartbeat(e);return}if(await this.ping(e,1e4)){this.missedBeats.set(e,0);return}let s=(this.missedBeats.get(e)??0)+1;this.missedBeats.set(e,s),this.slog("warn",e,"heartbeat",`missed (${s}/${t.MAX_MISSED_BEATS})`),s>=t.MAX_MISSED_BEATS&&(this.slog("warn",e,"heartbeat","hang detected, force-killing"),this.stopHeartbeat(e),o.handle.error=`Hang detected: ${s} consecutive heartbeat failures`,this.kill(e),r?.(e))},t.HEARTBEAT_INTERVAL);this.heartbeatTimers.set(e,n)}stopHeartbeat(e){let r=this.heartbeatTimers.get(e);r&&(clearInterval(r),this.heartbeatTimers.delete(e)),this.missedBeats.delete(e)}getMissedBeats(e){return this.missedBeats.get(e)??0}activeCount(){return[...this.processes.values()].filter(e=>e.handle.state==="starting"||e.handle.state==="ready"||e.handle.state==="running").length}remove(e){let r=this.processes.get(e);r&&(this.stopHeartbeat(e),(r.handle.state==="running"||r.handle.state==="starting"||r.handle.state==="ready")&&this.kill(e),this.processes.delete(e))}dispose(){for(let e of this.heartbeatTimers.keys())this.stopHeartbeat(e);for(let e of this.processes.values()){try{e.ipcServer?.close()}catch{}try{e.stderrStream?.end()}catch{}}this.killAll(),this.processes.clear()}};import{spawn as gN}from"node:child_process";var yN=/[|&;><$`(){}]/;function Lee(t,e){let r=e==="win32",n=e==="darwin",o=n?[t.brew,t.npm,t.pip,t.curl]:[t.npm,t.pip,t.brew,t.curl];for(let i of o){if(!i)continue;let s=yN.test(i);if(!(s&&r)&&!(i.startsWith("brew ")&&!n))return{command:i,shell:s}}return null}function Uee(t,e){if(e!=="cn")return t;let r=t.trim();return/^npm\b/.test(r)&&!/(?:^|\s)--registry(?:\s|=)/.test(r)?`${r} --registry ${CR}`:/^uv\b/.test(r)&&!/(?:^|\s)--(?:default-)?index(?:-url)?(?:\s|=)/.test(r)?`${r} --default-index ${ua}`:/^(?:pipx|pip3?|python -m pip)\b/.test(r)&&!/(?:^|\s)--index-url(?:\s|=)/.test(r)?`${r} --index-url ${ua}`:r}function hN(t,e,r,n){return new Promise(o=>{let i;try{i=r(t,e)}catch(s){n({type:"log",stream:"stderr",chunk:s instanceof Error?s.message:String(s)}),o(1);return}i.stdout?.on("data",s=>n({type:"log",stream:"stdout",chunk:s.toString()})),i.stderr?.on("data",s=>n({type:"log",stream:"stderr",chunk:s.toString()})),i.on("error",s=>{n({type:"log",stream:"stderr",chunk:s.message}),o(1)}),i.on("close",s=>o(s))})}var Fee=(t,e)=>{if(e)return gN(t,{shell:!0,stdio:["ignore","pipe","pipe"]});let r=t.split(/\s+/).filter(Boolean);return gN(r[0],r.slice(1),{stdio:["ignore","pipe","pipe"]})};async function vN(t,e,r={}){let n=r.platform??process.platform,o=r.spawnImpl??Fee,i=Lee(t,n);if(!i){let d=`No install command available for ${n}`;return e({type:"state",state:"failed"}),e({type:"done",ok:!1,error:d}),{ok:!1,error:d}}let s=Uee(i.command,r.mirror);e({type:"state",state:"installing"});let a=await hN(s,i.shell,o,e);if(a!==0){let d=`Install command exited with code ${a}`;return e({type:"state",state:"failed"}),e({type:"done",ok:!1,error:d}),{ok:!1,error:d}}let c=t.verifyCmd??`${t.cliCommand} --version`;if(e({type:"state",state:"verifying"}),await hN(c,yN.test(c),o,e)!==0){let d=`Installed but verification failed (${t.cliCommand})`;return e({type:"state",state:"failed"}),e({type:"done",ok:!1,error:d}),{ok:!1,error:d}}return e({type:"state",state:"installed"}),e({type:"done",ok:!0}),{ok:!0}}var Pt=new Map,Hee=10*6e4,zee=6e4,Bee=6,Yp=null;function Qp(t,e,r){return`${t}\0${e}\0${r??"default"}`}function pl(t){try{t.manager.kill(t.memberId)}catch{}try{t.manager.dispose()}catch{}}function bN(t){let e=Pt.get(t);if(e){if(!e.manager.isAlive(e.memberId)){Pt.delete(t),pl(e);return}return e}}function kN(t,e){let r=Pt.get(t);r&&r!==e&&(Pt.delete(t),pl(r)),Pt.set(t,e),qee(),Kee()}function wN(t,e){let r=Pt.get(t);if(!r)return;if(!r.manager.isAlive(r.memberId)){Pt.delete(t),pl(r);return}Pt.delete(t);let n=Pt.get(e);return n&&n!==r&&(Pt.delete(e),pl(n)),Pt.set(e,r),r.lastUsed=Date.now(),r}var em="__warm__";function tm(t){let e=Pt.get(t);e&&(Pt.delete(t),pl(e))}function qee(){for(;Pt.size>Bee;){let t=null,e=Number.POSITIVE_INFINITY;for(let[r,n]of Pt)n.holder.current||n.lastUsed<e&&(e=n.lastUsed,t=r);if(!t)break;tm(t)}}function Wee(t){for(let[e,r]of[...Pt.entries()])r.holder.current||t-r.lastUsed>Hee&&tm(e)}function Kee(){Yp||(Yp=setInterval(()=>Wee(Date.now()),zee),typeof Yp.unref=="function"&&Yp.unref())}import{randomUUID as Gee}from"node:crypto";var ma=new Map;function Vee(t,e){let r=ma.get(t);return r&&(clearTimeout(r.timer),r.resolve(null),ma.delete(t)),new Promise(n=>{let o=setTimeout(()=>{ma.delete(t),n(null)},e);typeof o.unref=="function"&&o.unref(),ma.set(t,{resolve:n,timer:o})})}function SN(t,e){let r=ma.get(t);return r?(clearTimeout(r.timer),ma.delete(t),r.resolve(e),!0):!1}function Zee(t){if(t==null)return"";if(typeof t=="string")return t;try{return JSON.stringify(t)}catch{return""}}async function xN(t,e){let r=e.turnContext(),n=t.toolCall&&typeof t.toolCall=="object"?t.toolCall:{},o=typeof t.permissionId=="string"&&t.permissionId?t.permissionId:Gee(),i=Array.isArray(t.options)?t.options:[];if(r?.turnId&&e.sendNotification){e.sendNotification("agents.prompt.approval",{agentId:e.agentId,sessionId:r.sessionId,turnId:r.turnId,requestId:r.requestId,approvalId:o,callId:typeof n.toolCallId=="string"?n.toolCallId:o,toolName:typeof n.title=="string"?n.title:typeof t.toolName=="string"?t.toolName:"operation",arguments:Zee(n.rawInput),message:typeof t.message=="string"?t.message:void 0,category:typeof t.category=="string"?t.category:"destructive",options:i});let a=await Vee(o,e.timeoutMs??5*6e4);if(a)return{optionId:a}}return{optionId:i.find(a=>a?.kind==="reject_once"||a?.kind==="reject"||/reject|deny|no|cancel/i.test(String(a?.optionId??a?.name??"")))?.optionId??i[0]?.optionId??"reject"}}function Xee(t){let e=t?.rawInput;if(e!=null){if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return}}}function Yee(t){let e=t?.content;if(Array.isArray(e)){let r=e.map(n=>{if(!n||typeof n!="object")return"";let o=n;return typeof o.text=="string"?o.text:typeof o.content=="string"?o.content:""}).join("");if(r)return r.slice(0,2e3)}if(typeof e=="string")return e.slice(0,2e3);if(t?.rawOutput!==void 0)try{return JSON.stringify(t.rawOutput).slice(0,2e3)}catch{return}}function TN(t){let e=t?.authMethods;return Array.isArray(e)&&e.length>0?e:void 0}function PN(t){return t instanceof Error?t.message:String(t)}async function Qee(t){let e=TN(t.error);if(!t.sessionId||!e)return;let r=PN(t.error);await Kr(t.sessionId,{role:"user",content:t.prompt},t.projectRoot,t.turnId),await Kr(t.sessionId,{role:"assistant",content:r,blocks:[{type:"auth_prompt",agentId:t.agentId,message:r,authMethods:e}]},t.projectRoot,t.turnId);let n=Nt(t.sessionId,t.projectRoot),o=await Rs(t.sessionId,t.projectRoot);await ct(t.sessionId,{type:"personal",...t.projectId?{projectId:t.projectId}:{},...o!==null?{messageCount:o}:{},...n?.title?{}:{title:fc(t.prompt,"External agent login required")},...n?.agentId?{}:{agentId:t.agentId}},t.projectRoot)}async function AN(t){let e=t.params,r=typeof e?.approvalId=="string"?e.approvalId:"",n=typeof e?.optionId=="string"?e.optionId:"",o=r&&n?SN(r,n):!1;t.id!==void 0&&this.sendResponse(t.id,{ok:o})}async function IN(t){try{let e=t.params,r=await this.ensureAgentConfigStore();this.acpDetector.setConfigStore(r.getData());let n=this.acpDetector.scan(e?.force);t.id!==void 0&&this.sendResponse(t.id,n)}catch(e){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e)})}}async function _N(t){try{let e=await this.ensureAgentConfigStore();this.acpDetector.setConfigStore(e.getData());let r=this.acpDetector.list();t.id!==void 0&&this.sendResponse(t.id,r)}catch(e){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e)})}}async function CN(t){try{let e=await this.ensureAgentConfigStore();this.acpDetector.setConfigStore(e.getData());let r=new Map(this.acpDetector.list().map(o=>[o.id,o])),n=PR().map(o=>{let i=r.get(o.id);return{id:o.id,name:o.name,brandId:o.brandId??o.id,category:o.category??"code",integration:o.integration??"acp",authMode:o.authMode??"key",note:o.note,status:i?.status??"not_installed",version:lN(o,i?.version),install:{docsUrl:o.install?.docsUrl,command:o.install?.npm??o.install?.pip??o.install?.brew??o.install?.curl}}});t.id!==void 0&&this.sendResponse(t.id,{catalog:n})}catch(e){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e)})}}async function EN(t){try{let e=await this.ensureAgentConfigStore();this.acpDetector.setConfigStore(e.getData());let r=new Map(this.acpDetector.list().map(i=>[i.id,i])),n=PR().map(i=>({id:i.id,entry:i,detectedVersion:r.get(i.id)?.version})),o=await dN(n);t.id!==void 0&&this.sendResponse(t.id,{updates:o})}catch(e){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e)})}}async function MN(t){let e=t.params,r=typeof e?.agentId=="string"?e.agentId:void 0,n=typeof e?.mirror=="string"&&e.mirror?e.mirror:process.env.QLOGICAGENT_INSTALL_MIRROR;if(!r){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INVALID_PARAMS,message:"agentId (string) required"});return}let o=la(r);if(!o?.install){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INVALID_PARAMS,message:`Unknown or non-installable agent: ${r}`});return}try{let i=await vN(o.install,s=>{this.sendNotification?.("agent.install.progress",{agentId:r,event:s})},{mirror:n});this.acpDetector.clearCache(),t.id!==void 0&&this.sendResponse(t.id,{ok:i.ok,error:i.error})}catch(i){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:i instanceof Error?i.message:String(i)})}}async function $N(t){try{let e=t.params;if(!e?.action||!e?.agent){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INVALID_PARAMS,message:"action and agent are required."});return}let r=await this.ensureAgentConfigStore();switch(e.action){case"register":await r.registerCustomAgent(e.agent);break;case"unregister":await r.unregisterCustomAgent(e.agent.id);break;case"update":await r.registerCustomAgent(e.agent);break}this.acpDetector.setConfigStore(r.getData()),this.acpDetector.clearCache(),t.id!==void 0&&this.sendResponse(t.id,{ok:!0})}catch(e){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e)})}}async function DN(t){try{let e=t.params;if(!e?.agentId){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INVALID_PARAMS,message:"agentId is required."});return}let r=await this.ensureAgentConfigStore(),{agentId:n,...o}=e;await r.setAgentConfig(n,o),this.acpDetector.setConfigStore(r.getData()),t.id!==void 0&&this.sendResponse(t.id,{ok:!0})}catch(e){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e)})}}async function NN(t){try{let e=t.params;if(!e?.agentId){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INVALID_PARAMS,message:"agentId is required."});return}let n=(await this.ensureAgentConfigStore()).getAgentConfig(e.agentId);t.id!==void 0&&this.sendResponse(t.id,n)}catch(e){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e)})}}async function ON(t){try{let e=t.params;if(!e?.agentId){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INVALID_PARAMS,message:"agentId is required."});return}let r=await this.ensureAgentConfigStore();await r.removeAgentConfig(e.agentId),this.acpDetector.setConfigStore(r.getData()),t.id!==void 0&&this.sendResponse(t.id,{ok:!0})}catch(e){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e)})}}async function jN(t){try{let e=t.params;if(!e?.url){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INVALID_PARAMS,message:"url is required."});return}await(await this.ensureAgentConfigStore()).setGatewayUrl(e.url),t.id!==void 0&&this.sendResponse(t.id,{ok:!0})}catch(e){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e)})}}async function LN(t){try{let r=(await this.ensureAgentConfigStore()).getGatewayUrl();t.id!==void 0&&this.sendResponse(t.id,{url:r})}catch(e){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e)})}}async function UN(t){try{let r=(await this.ensureAgentConfigStore()).getData(),n=Object.entries(r.agents).map(([o,i])=>({agentId:o,hasApiKey:!!i.apiKey,hasBaseUrl:!!i.baseUrl,hasModel:!!i.model}));t.id!==void 0&&this.sendResponse(t.id,n)}catch(e){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e)})}}function FN(t){try{let e=[],r=(n,o)=>{if(n)for(let i of n.getAllHandles())e.push({memberId:i.memberId,name:i.name,pid:i.pid,state:i.state,startedAt:i.startedAt,endedAt:i.endedAt,source:o})};r(this.soloProcessManager,"solo"),r(this.productProcessManager,"product"),t.id!==void 0&&this.sendResponse(t.id,e)}catch(e){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e)})}}function HN(t){try{let e=t.params;if(!e?.memberId){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INVALID_PARAMS,message:"memberId is required."});return}let r=!1;for(let n of[this.soloProcessManager,this.productProcessManager])if(n?.getHandle(e.memberId)){n.kill(e.memberId),r=!0;break}t.id!==void 0&&this.sendResponse(t.id,{ok:r})}catch(e){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e)})}}async function zN(t){try{let e=t.params;if(!e?.agentId){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INVALID_PARAMS,message:"agentId is required."});return}let r=rm.join(pe(),"agent-logs"),n=rm.join(r,`${e.agentId}.stderr.log`),o="";try{o=RN.readFileSync(n,"utf-8")}catch{}e.tail&&e.tail>0&&o&&(o=o.split(`
668
668
  `).slice(-e.tail).join(`
669
- `)),t.id!==void 0&&this.sendResponse(t.id,{log:o})}catch(e){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e)})}}async function BN(t){try{let e=t.params;if(!e?.agentId){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INVALID_PARAMS,message:"agentId is required."});return}let r=await this.ensureAgentConfigStore();this.acpDetector.setConfigStore(r.getData());let o=this.acpDetector.list().find(s=>s.id===e.agentId);if(!o){t.id!==void 0&&this.sendResponse(t.id,{ok:!1,error:`Agent ${e.agentId} not found`,durationMs:0});return}if(o.status==="not_installed"){t.id!==void 0&&this.sendResponse(t.id,{ok:!1,error:`Agent ${e.agentId} is not installed`,durationMs:0});return}let i=Date.now();t.id!==void 0&&this.sendResponse(t.id,{ok:o.status==="available",version:o.version,capabilities:o.capabilities,error:o.status!=="available"?`Agent status: ${o.status}`:void 0,durationMs:Date.now()-i})}catch(e){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e)})}}async function qN(t,e,r,n,o,i){let s=Qp(e,n,o),a=bN(s);if(a)return a;if(o!==em){let f=wN(Qp(e,n,em),s);if(f)return f}let c=`chat-${e}-${Jee().slice(0,8)}`,l={current:null},d=typeof t.sendNotification=="function"?t.sendNotification.bind(t):void 0,p=new Mr({onNotification:(f,g,h)=>{let y=l.current;if(!y)return;let v=h;if(g==="turn.delta"){let w=typeof v?.text=="string"?v.text:"";if(!w)return;y.deltas.push(w),y.turnId&&d&&(d("agents.prompt.delta",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,text:w}),y.streamedAny=!0);return}if(g==="turn.thought_delta"){let w=typeof v?.text=="string"?v.text:"";w&&y.turnId&&d&&d("agents.prompt.delta",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,text:w,reasoning:!0});return}if(g==="turn.plan"){y.turnId&&d&&d("agents.prompt.plan",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,steps:Array.isArray(v?.steps)?v.steps:[]});return}if(!y.turnId||!d)return;let k=typeof v?.callId=="string"?v.callId:String(v?.callId??"");g==="turn.tool_call"?d("agents.prompt.tool",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,event:{kind:"call",callId:k,name:typeof v?.toolName=="string"?v.toolName:typeof v?.name=="string"?v.name:"tool",arguments:Xee(v)}}):g==="turn.tool_result"&&d("agents.prompt.tool",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,event:{kind:"result",callId:k,name:typeof v?.toolName=="string"?v.toolName:"tool",ok:v?.status!=="failed"&&v?.status!=="error",outputPreview:Yee(v)}})},onMcpToolCall:async(f,g,h)=>typeof t.handleMcpToolCall=="function"?t.handleMcpToolCall(f,g,h):{ok:!1,error:"MCP tool call unavailable"},onPermissionRequest:(f,g)=>xN(g,{agentId:e,turnContext:()=>l.current,sendNotification:d}),log:{info:f=>t.log?.(`[agents.prompt] ${f}`),warn:f=>t.log?.(`[agents.prompt] WARN: ${f}`),debug:f=>t.log?.(`[agents.prompt] ${f}`)},sessionDir:rm.join(pe(),"agent-logs")});await p.spawn({memberId:c,name:`chat-${e}`,cwd:n,prompt:"",external:r,systemPrompt:i});let m={manager:p,memberId:c,holder:l,lastUsed:Date.now()};return kN(s,m),m}async function WN(t){try{let e=t.params??{},r=typeof e.agentId=="string"?e.agentId.trim():"";if(!r||r==="qlogicagent"){t.id!==void 0&&this.sendResponse(t.id,{ok:!1,warmed:!1});return}let n=await this.ensureAgentConfigStore();this.acpDetector.setConfigStore(n.getData()),this.acpDetector.scan(!1);let o=this.acpDetector.buildExternalDescriptor(r);if(!o){t.id!==void 0&&this.sendResponse(t.id,{ok:!1,warmed:!1});return}let i=typeof this.getActiveProjectRoot=="function"?this.getActiveProjectRoot():process.cwd();await qN(this,r,o,i,em),t.id!==void 0&&this.sendResponse(t.id,{ok:!0,warmed:!0})}catch(e){t.id!==void 0&&this.sendResponse(t.id,{ok:!1,warmed:!1,error:e instanceof Error?e.message:String(e)})}}async function KN(t){try{let e=t.params??{},r=typeof e.agentId=="string"?e.agentId.trim():"",n=typeof e.prompt=="string"?e.prompt:"";if(!r||!n.trim()){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INVALID_PARAMS,message:"agentId and prompt are required."});return}let o=await this.ensureAgentConfigStore();this.acpDetector.setConfigStore(o.getData()),this.acpDetector.scan(!1);let i=this.acpDetector.buildExternalDescriptor(r);if(!i){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INVALID_PARAMS,message:`Agent ${r} is not available or not ACP-compatible.`});return}let s=typeof e.cwd=="string"&&e.cwd?e.cwd:typeof this.getActiveProjectRoot=="function"?this.getActiveProjectRoot():process.cwd(),a=typeof e.timeoutMs=="number"&&e.timeoutMs>0?e.timeoutMs:3e5,c=typeof e.sessionId=="string"?e.sessionId:void 0,l=typeof e.turnId=="string"?e.turnId:void 0,d=typeof e.requestId=="string"?e.requestId:void 0,p=typeof e.projectId=="string"?e.projectId:void 0,m=Qp(r,s,c),f=await qN(this,r,i,s,c,typeof e.systemPrompt=="string"?e.systemPrompt:void 0),g={sessionId:c,turnId:l,requestId:d,deltas:[],streamedAny:!1};f.holder.current=g,f.lastUsed=Date.now();let h;try{h=await f.manager.sendTask(f.memberId,n,{timeout:a})}catch(k){throw await Qee({sessionId:c,projectRoot:s,turnId:l,projectId:p,agentId:r,prompt:n,error:k}),tm(m),k}finally{f.holder.current=null}let y=g.deltas.join("")||(typeof h?.content=="string"?h.content:""),v=f.manager.getUsageTracker(f.memberId)?.getUsage();if(c){Kr(c,{role:"user",content:n},s,l),y&&Kr(c,{role:"assistant",content:y},s,l);let k=Nt(c,s);ct(c,{type:"personal",...p?{projectId:p}:{},...k?.title?{}:{title:fc(n,"External agent session")},...k?.agentId?{}:{agentId:r}},s)}t.id!==void 0&&this.sendResponse(t.id,{ok:!0,agentId:r,content:y,streamed:g.streamedAny,stopReason:h?.stopReason,usage:v?{inputTokens:v.inputTokens,outputTokens:v.outputTokens,totalTokens:v.totalTokens,cacheRead:v.cachedReadTokens,thoughtTokens:v.thoughtTokens,cost:v.cost}:void 0})}catch(e){if(t.id!==void 0){let r=TN(e);this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:PN(e),...r?{data:{authMethods:r}}:{}})}}}oe();import*as ga from"node:fs/promises";import*as nj from"node:path";Ps();var ete=/^[a-z0-9][a-z0-9_.:-]{0,79}$/i,tte=new Set(["journeyDay","count"]),rte=new Set(["blocked"]),nte=new Set(["R0","R1","R2","R3"]),ote=new Set(["aix","android","darwin","freebsd","ios","linux","openbsd","sunos","win32"]),ite={"community.journey.view":new Set(["surface","petState","journeyDay","platform"]),"community.share.generated":new Set(["surface","action","source","petState","journeyDay","platform"]),"community.sandbox.violation":new Set(["surface","action","source","ruleId","riskTier","platform","count","blocked"]),"community.desensitization.hit":new Set(["surface","action","source","ruleId","riskTier","platform","count","blocked"]),"registry.install_failed":new Set(["dimension","resourceType","platform"])};function nm(t,e){if(!e||typeof e!="object"||Array.isArray(e))return;let r=ite[t],n={};for(let[o,i]of Object.entries(e)){if(!r.has(o))continue;let s=ste(o,i);s!==void 0&&(n[o]=s)}return Object.keys(n).length>0?n:void 0}function ste(t,e){if(tte.has(t))return typeof e=="number"&&Number.isInteger(e)&&e>=0&&e<=1e5?e:void 0;if(rte.has(t))return typeof e=="boolean"?e:void 0;if(t==="riskTier")return typeof e=="string"&&nte.has(e)?e:void 0;if(t==="platform")return typeof e=="string"&&ote.has(e)?e:void 0;if(typeof e!="string")return;let r=e.trim();return ete.test(r)?r:void 0}var ate=new Set(["withdrawn","version-available","deprecated","version-yanked","frozen"]);function cte(t){let e=gte(t.baseUrl),r=hte(t.fetchFn??fetch,t.clientVersion),n=t.token.trim();return{async getConsent(){return VN(r,e,n,"GET")},async setConsent(o){return VN(r,e,n,"PUT",o)},async matchRegistry(o){let i=o.intent.trim();if(!i)throw new Error("intent is required.");let s=vte(o.topK),a=await Ne(r,Me(t.baseUrl,"/api/v15/registry/match"),n,"POST",{intent:i,topK:s,prefer:o.preferOfficial===!1?"relevance":"official",canonicalOnly:!0});return(_e(a)&&Array.isArray(a.matches)?a.matches:[]).map(bte).filter(l=>!!l).slice(0,s)},async publishSkill(o){return DR(r,t.baseUrl,n,"skill",o)},async publishPet(o){return DR(r,t.baseUrl,n,"pet",o)},async publishWorkflow(o){return DR(r,t.baseUrl,n,"workflow",o)},async recordSignal(o){let i=encodeURIComponent(o.resourceId.trim());if(!i)throw new Error("resourceId is required.");let s=await Ne(r,Me(t.baseUrl,`/api/v15/registry/resources/${i}/signal`),n,"POST",{event:o.event,attribution:o.attribution?.trim()||void 0,metadata:o.metadata});if(_e(s)&&s.accepted===!0)return{accepted:!0};throw new Error("Community hub returned an invalid signal response.")},async recordTelemetry(o){let i=nm(o.event,o.metadata),s=await Ne(r,Me(t.baseUrl,"/api/v15/registry/telemetry"),n,"POST",{event:o.event,metadata:i});if(_e(s)&&s.accepted===!0)return{accepted:!0};throw new Error("Community hub returned an invalid telemetry response.")},async listSharedResources(){let o=await Ne(r,Me(t.baseUrl,"/api/v15/registry/mine"),n,"GET");return(_e(o)&&Array.isArray(o.resources)?o.resources:[]).map(om).filter(s=>!!s)},async withdrawSharedResource(o,i){let s=encodeURIComponent(o.trim());if(!s)throw new Error("resourceId is required.");let a=await Ne(r,Me(t.baseUrl,`/api/v15/registry/resources/${s}/withdraw`),n,"POST",{reason:i?.trim()||void 0}),c=om(a);if(!c)throw new Error("Community hub returned an invalid resource.");return c},async withdrawSharedResources(o){let i=await Ne(r,Me(t.baseUrl,"/api/v15/registry/community-consent/withdraw-shared"),n,"POST",{reason:o?.trim()||void 0});return(_e(i)&&Array.isArray(i.resources)?i.resources:[]).map(om).filter(a=>!!a)},async listNotices(o={}){let i=o.includeRead?"?includeRead=true":"",s=await Ne(r,Me(t.baseUrl,`/api/v15/registry/notices${i}`),n,"GET");return(_e(s)&&Array.isArray(s.notices)?s.notices:[]).map(ZN).filter(c=>!!c)},async markNoticeRead(o){if(!Number.isSafeInteger(o)||o<1)throw new Error("noticeId is required.");let i=await Ne(r,Me(t.baseUrl,`/api/v15/registry/notices/${o}/read`),n,"POST"),s=ZN(i);if(!s)throw new Error("Community hub returned an invalid notice.");return s},async resolveInstall(o,i){let s=encodeURIComponent(o.trim());if(!s)throw new Error("resourceId is required.");let a=i?.trim(),c=a?`?version=${encodeURIComponent(a)}`:"",l=await Ne(r,Me(t.baseUrl,`/api/v15/registry/resources/${s}/install${c}`),n,"GET"),d=YN(l);if(!d)throw new Error("Community hub returned an invalid install resolution.");return d},async listResourceVersions(o){let i=encodeURIComponent(o.trim());if(!i)throw new Error("resourceId is required.");let s=await Ne(r,Me(t.baseUrl,`/api/v15/registry/resources/${i}/versions`),n,"GET");return(_e(s)&&Array.isArray(s.versions)?s.versions:[]).map(ute).filter(c=>!!c)},async rateResource(o,i){let s=encodeURIComponent(o.trim());if(!s)throw new Error("resourceId is required.");let a=await Ne(r,Me(t.baseUrl,`/api/v15/registry/resources/${s}/rate`),n,"POST",{stars:i});return GN(a)},async getRatingSummary(o){let i=encodeURIComponent(o.trim());if(!i)throw new Error("resourceId is required.");let s=await Ne(r,Me(t.baseUrl,`/api/v15/registry/resources/${i}/rating`),n,"GET");return GN(s)},async reportResource(o,i){let s=encodeURIComponent(o.trim());if(!s)throw new Error("resourceId is required.");await Ne(r,Me(t.baseUrl,`/api/v15/registry/resources/${s}/report`),n,"POST",{reason:i?.trim()||void 0})},async listComments(o){let i=encodeURIComponent(o.trim());if(!i)throw new Error("resourceId is required.");let s=await Ne(r,Me(t.baseUrl,`/api/v15/registry/resources/${i}/comments`),n,"GET");return(_e(s)&&Array.isArray(s.comments)?s.comments:[]).map(lte).filter(c=>!!c)},async postComment(o,i){let s=encodeURIComponent(o.trim());if(!s)throw new Error("resourceId is required.");let a=i?.trim()??"";if(!a)throw new Error("Comment body is required.");let c=await Ne(r,Me(t.baseUrl,`/api/v15/registry/resources/${s}/comments`),n,"POST",{body:a}),l=_e(c)?c:{};return{id:typeof l.id=="number"?l.id:0,folded:l.folded===!0,createdAt:typeof l.createdAt=="string"?l.createdAt:""}},async emitActivity(o){let i=await Ne(r,Me(t.baseUrl,"/api/v15/community/activity"),n,"POST",{id:o.id,type:o.type,ts:o.ts,actorPetId:o.actorPetId,peerRef:o.peerRef,visibility:o.visibility,payload:o.payload});if(!(_e(i)&&i.accepted===!0))throw new Error("Community hub returned an invalid activity response.")},async recordCommunityReview(o){let i=await Ne(r,Me(t.baseUrl,"/api/v15/community/reviews"),n,"POST",{id:o.id,resourceId:o.resourceId,actorPetId:o.actorPetId,experience:o.experience,outcome:o.outcome,contextCategory:o.contextCategory,ts:o.ts});if(!(_e(i)&&i.accepted===!0))throw new Error("Community hub returned an invalid review response.")},async findReviewAnswers(o,i){let s=o.trim();if(!s)return[];let a=await Ne(r,Me(t.baseUrl,"/api/v15/community/reviews/search"),n,"POST",{query:s,limit:typeof i=="number"&&i>0?Math.min(Math.floor(i),20):void 0});return(_e(a)&&Array.isArray(a.answers)?a.answers:[]).map(dte).filter(l=>!!l)},async recordCommunityAsk(o){let i=await Ne(r,Me(t.baseUrl,"/api/v15/community/asks"),n,"POST",{id:o.id,askerPetId:o.askerPetId,question:o.question,contextCategory:o.contextCategory,ts:o.ts});if(!(_e(i)&&i.accepted===!0))throw new Error("Community hub returned an invalid ask response.")},async recordCommunityAnswer(o){let i=await Ne(r,Me(t.baseUrl,"/api/v15/community/answers"),n,"POST",{id:o.id,askId:o.askId,answererPetId:o.answererPetId,answer:o.answer,ts:o.ts});if(!(_e(i)&&i.accepted===!0))throw new Error("Community hub returned an invalid answer response.")},async recordCommunityInteraction(o){let i=await Ne(r,Me(t.baseUrl,"/api/v15/community/interactions"),n,"POST",{id:o.id,kind:o.kind,actorPetId:o.actorPetId,peerPetId:o.peerPetId,payload:o.payload,ts:o.ts});if(!(_e(i)&&i.accepted===!0))throw new Error("Community hub returned an invalid interaction response.")},async resolveRuntime(o,i){let s=encodeURIComponent(o.trim());if(!s)throw new Error("runtime id is required.");let a=encodeURIComponent(i.trim());if(!a)throw new Error("platform is required.");let c=await Ne(r,Me(t.baseUrl,`/api/v15/runtime/${s}/resolve?platform=${a}`),n,"GET"),l=pte(c);if(!l)throw new Error("Community hub returned an invalid runtime resolution.");return l}}}async function DR(t,e,r,n,o){let i=om(await Ne(t,Me(e,"/api/v15/registry/resources"),r,"POST",{id:o.id,type:n,title:o.title,summary:o.summary,visibility:o.visibility??"public",...o.category?{category:o.category}:{},tags:o.tags??[],manifest:o.manifest}));if(!i)throw new Error("Community hub returned an invalid resource.");if(o.version===void 0&&o.packageGzipBase64===void 0)return{resource:i};if(!o.version?.trim()||!o.packageGzipBase64?.trim())throw new Error("version and packageGzipBase64 must be provided together.");let s=encodeURIComponent(o.id.trim()),a=encodeURIComponent(o.version.trim()),c=kte(await yte(t,Me(e,`/api/v15/registry/resources/${s}/versions/${a}`),r,Buffer.from(o.packageGzipBase64,"base64")));if(!c)throw new Error("Community hub returned an invalid version.");return{resource:i,version:c}}function GN(t){return _e(t)?{average:typeof t.average=="number"?t.average:0,count:typeof t.count=="number"?t.count:0}:{average:0,count:0}}function lte(t){return!_e(t)||typeof t.id!="number"||typeof t.body!="string"?null:{id:t.id,body:t.body,folded:t.folded===!0,createdAt:typeof t.createdAt=="string"?t.createdAt:""}}function dte(t){if(!_e(t))return null;let e=typeof t.id=="string"?t.id:"",r=typeof t.resourceId=="string"?t.resourceId:"",n=typeof t.experience=="string"?t.experience:"",o=t.outcome==="success"||t.outcome==="fail"||t.outcome==="neutral"?t.outcome:null;return!e||!r||!n||!o?null:{id:e,resourceId:r,actorPetId:typeof t.actorPetId=="string"?t.actorPetId:"",experience:n,outcome:o,contextCategory:typeof t.contextCategory=="string"?t.contextCategory:null,ts:typeof t.ts=="number"?t.ts:0}}function ute(t){return!_e(t)||typeof t.version!="string"||!t.version?null:{version:t.version,createdAt:typeof t.createdAt=="string"?t.createdAt:"",sizeBytes:typeof t.sizeBytes=="number"?t.sizeBytes:0,yanked:t.yanked===!0}}function pte(t){if(!_e(t))return null;let e=typeof t.id=="string"?t.id:"",r=typeof t.version=="string"?t.version:"",n=typeof t.downloadUrl=="string"?t.downloadUrl:"",o=typeof t.checksum=="string"?t.checksum:"",i=typeof t.sizeBytes=="number"?t.sizeBytes:0;return!e||!r||!n||!/^[a-f0-9]{64}$/.test(o)||!Number.isSafeInteger(i)||i<=0?null:{id:e,version:r,downloadUrl:n,checksum:o,sizeBytes:i}}function dt(t=ur()){let e=t.get("QLOGIC_LLMROUTER_ACCESS_TOKEN")?.trim();if(!e)return null;let r=mte(t);return cte({baseUrl:fte(t),token:e,clientVersion:r})}function mte(t){let e=t.get("QLOGIC_AGENT_VERSION")?.trim();return e||"2.15.5"}function fte(t){return t.get("QLOGIC_HUB_BASE_URL")?.trim()||t.get("XIAOZHICLAW_HUB_URL")?.trim()||"https://xiaozhi.qlogicagent.com"}function gte(t){return Me(t,"/api/v15/registry/community-consent")}function Me(t,e){let r=t.trim().replace(/\/+$/,"");return r.endsWith("/v1")&&(r=r.slice(0,-3)),r.endsWith("/api")&&(r=r.slice(0,-4)),`${r}${e}`}function hte(t,e){let r=e?.trim();return r?(n,o)=>t(n,{...o,headers:{...o?.headers,"x-client-version":r}}):t}async function VN(t,e,r,n,o){return Yr(await Ne(t,e,r,n,o),!0)}async function Ne(t,e,r,n,o){let i,s=o!==void 0;try{i=await t(e,{method:n,headers:{accept:"application/json",authorization:`Bearer ${r}`,...s?{"content-type":"application/json"}:{}},...s?{body:JSON.stringify(o)}:{},signal:AbortSignal.timeout(1e4)})}catch{throw new Error("Community hub is unavailable.")}if(!i.ok)throw new Error(`Community hub rejected registry request: ${i.status}`);return i.json().catch(()=>null)}async function yte(t,e,r,n){let o;try{o=await t(e,{method:"PUT",headers:{accept:"application/json",authorization:`Bearer ${r}`,"content-type":"application/gzip"},body:n,signal:AbortSignal.timeout(1e4)})}catch{throw new Error("Community hub is unavailable.")}if(!o.ok)throw new Error(`Community hub rejected registry request: ${o.status}`);return o.json().catch(()=>null)}function Yr(t,e){let r=_e(t)?t:{},n=r.enabled===!0;return{enabled:n,methodSharingEnabled:n&&r.methodSharingEnabled!==!1,signalsEnabled:n&&r.signalsEnabled!==!1,encounterEnabled:n&&r.encounterEnabled!==!1,remoteSynced:e}}function _e(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}function om(t){return!_e(t)||typeof t.id!="string"?null:{id:t.id,type:typeof t.type=="string"?t.type:"skill",title:typeof t.title=="string"?t.title:t.id,summary:typeof t.summary=="string"?t.summary:"",visibility:typeof t.visibility=="string"?t.visibility:"private",latestVersion:typeof t.latestVersion=="string"?t.latestVersion:null,withdrawn:t.withdrawn===!0,withdrawnAt:typeof t.withdrawnAt=="string"?t.withdrawnAt:null}}function vte(t){if(t===void 0)return 3;if(typeof t!="number"||!Number.isSafeInteger(t)||t<1||t>3)throw new Error("registry match topK must be an integer between 1 and 3.");return t}function bte(t){if(!_e(t)||t.canonical!==!0&&t.isCanonical!==!0)return null;let e=JN(t.sourceTier),r=XN(t.trustStage),n=im(t.resourceRiskTier),o=im(t.effectiveRiskTier);if(typeof t.id!="string"||typeof t.title!="string"||!e||!r||!n||!o)return null;let i=Array.isArray(t.capabilityTags)?t.capabilityTags:[];return{id:t.id,type:typeof t.type=="string"?t.type:"skill",title:NR(t.title,80),summary:NR(typeof t.summary=="string"?t.summary:"",160),category:typeof t.category=="string"?t.category:null,capabilityTags:i.filter(s=>typeof s=="string"&&s.trim().length>0).slice(0,6).map(s=>NR(s,32)),sourceTier:e,trustStage:r,resourceRiskTier:n,effectiveRiskTier:o,latestVersion:typeof t.latestVersion=="string"?t.latestVersion:null,canonical:!0}}function NR(t,e){let r=t.replace(/\s+/g," ").trim();return r.length<=e?r:`${r.slice(0,Math.max(0,e-1))}\u2026`}function kte(t){return!_e(t)||typeof t.version!="string"||typeof t.checksum!="string"?null:{version:t.version,checksum:t.checksum,sizeBytes:typeof t.sizeBytes=="number"?t.sizeBytes:0}}function ZN(t){return!_e(t)||typeof t.id!="number"||typeof t.resourceId!="string"?null:{id:t.id,resourceId:t.resourceId,resourceType:typeof t.resourceType=="string"?t.resourceType:"skill",title:typeof t.title=="string"?t.title:t.resourceId,event:ate.has(t.event)?t.event:"withdrawn",version:typeof t.version=="string"?t.version:null,reason:typeof t.reason=="string"?t.reason:null,read:t.read===!0,createdAt:typeof t.createdAt=="string"?t.createdAt:"",readAt:typeof t.readAt=="string"?t.readAt:null}}var wte=new Set(["R0","R1","R2","R3"]),Ste=new Set(["official","community"]),xte=new Set(["quarantine","trial","trusted"]),Rte=new Set(["pending","approved","rejected"]);function im(t){return typeof t=="string"&&wte.has(t)?t:null}function JN(t){return typeof t=="string"&&Ste.has(t)?t:null}function XN(t){return typeof t=="string"&&xte.has(t)?t:null}function Tte(t){return typeof t=="string"&&Rte.has(t)?t:null}function YN(t){if(!_e(t))return null;let e=JN(t.sourceTier),r=XN(t.trustStage),n=Tte(t.reviewStatus),o=im(t.resourceRiskTier),i=im(t.effectiveRiskTier);if(typeof t.id!="string"||typeof t.type!="string"||typeof t.kind!="string"||!e||!r||!n||!o||!i||typeof t.version!="string"||typeof t.checksum!="string"||typeof t.sizeBytes!="number"||typeof t.downloadUrl!="string")return null;let s=Array.isArray(t.requires)?t.requires:null,a=Array.isArray(t.dependencies)?t.dependencies:null;if(!s||!a||s.some(l=>typeof l!="string"))return null;let c=a.map(YN);return c.some(l=>!l)?null:{id:t.id,type:t.type,kind:t.kind,sourceTier:e,trustStage:r,reviewStatus:n,resourceRiskTier:o,effectiveRiskTier:i,requires:s,dependencies:c,version:t.version,checksum:t.checksum,sizeBytes:t.sizeBytes,downloadUrl:t.downloadUrl,manifest:t.manifest,minClientVersion:typeof t.minClientVersion=="string"&&t.minClientVersion.trim()?t.minClientVersion.trim():void 0,signature:typeof t.signature=="string"&&t.signature.trim()?t.signature:null,signingKeyId:typeof t.signingKeyId=="string"&&t.signingKeyId.trim()?t.signingKeyId:null}}var Pte=/(?:[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}|[A-Za-z]:\\|\/Users\/|\/home\/|secret|token|password|\+?\d[\d\s().-]{7,}\d)/i,Ate=/\b(?:agent|tool|shell|execute|permission|memory|system prompt|developer message)\b/i;function Ite(t){return _te(t),{manifest:{schema_version:15,kind:"asset",name:t.name,summary:t.summary,persona:t.persona,traits:t.traits??[],assets:t.assets??[],tags:t.tags??[]}}}async function QN(t,e){let r=await t.getConsent();if(!r.enabled||!r.methodSharingEnabled)throw new Error("Community method-sharing consent is required before publishing pet assets.");let n=Ite(e);return t.publishPet({id:e.id,title:e.name,summary:e.summary,visibility:e.visibility??"public",tags:e.tags??[],manifest:n.manifest})}function _te(t){let e=[t.id,t.name,t.summary,t.persona,...t.traits??[],...t.tags??[]].join(`
669
+ `)),t.id!==void 0&&this.sendResponse(t.id,{log:o})}catch(e){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e)})}}async function BN(t){try{let e=t.params;if(!e?.agentId){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INVALID_PARAMS,message:"agentId is required."});return}let r=await this.ensureAgentConfigStore();this.acpDetector.setConfigStore(r.getData());let o=this.acpDetector.list().find(s=>s.id===e.agentId);if(!o){t.id!==void 0&&this.sendResponse(t.id,{ok:!1,error:`Agent ${e.agentId} not found`,durationMs:0});return}if(o.status==="not_installed"){t.id!==void 0&&this.sendResponse(t.id,{ok:!1,error:`Agent ${e.agentId} is not installed`,durationMs:0});return}let i=Date.now();t.id!==void 0&&this.sendResponse(t.id,{ok:o.status==="available",version:o.version,capabilities:o.capabilities,error:o.status!=="available"?`Agent status: ${o.status}`:void 0,durationMs:Date.now()-i})}catch(e){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e)})}}async function qN(t,e,r,n,o,i){let s=Qp(e,n,o),a=bN(s);if(a)return a;if(o!==em){let f=wN(Qp(e,n,em),s);if(f)return f}let c=`chat-${e}-${Jee().slice(0,8)}`,l={current:null},d=typeof t.sendNotification=="function"?t.sendNotification.bind(t):void 0,p=new Mr({onNotification:(f,g,h)=>{let y=l.current;if(!y)return;let v=h;if(g==="turn.delta"){let w=typeof v?.text=="string"?v.text:"";if(!w)return;y.deltas.push(w),y.turnId&&d&&(d("agents.prompt.delta",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,text:w}),y.streamedAny=!0);return}if(g==="turn.thought_delta"){let w=typeof v?.text=="string"?v.text:"";w&&y.turnId&&d&&d("agents.prompt.delta",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,text:w,reasoning:!0});return}if(g==="turn.plan"){y.turnId&&d&&d("agents.prompt.plan",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,steps:Array.isArray(v?.steps)?v.steps:[]});return}if(!y.turnId||!d)return;let k=typeof v?.callId=="string"?v.callId:String(v?.callId??"");g==="turn.tool_call"?d("agents.prompt.tool",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,event:{kind:"call",callId:k,name:typeof v?.toolName=="string"?v.toolName:typeof v?.name=="string"?v.name:"tool",arguments:Xee(v)}}):g==="turn.tool_result"&&d("agents.prompt.tool",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,event:{kind:"result",callId:k,name:typeof v?.toolName=="string"?v.toolName:"tool",ok:v?.status!=="failed"&&v?.status!=="error",outputPreview:Yee(v)}})},onMcpToolCall:async(f,g,h)=>typeof t.handleMcpToolCall=="function"?t.handleMcpToolCall(f,g,h):{ok:!1,error:"MCP tool call unavailable"},onPermissionRequest:(f,g)=>xN(g,{agentId:e,turnContext:()=>l.current,sendNotification:d}),log:{info:f=>t.log?.(`[agents.prompt] ${f}`),warn:f=>t.log?.(`[agents.prompt] WARN: ${f}`),debug:f=>t.log?.(`[agents.prompt] ${f}`)},sessionDir:rm.join(pe(),"agent-logs")});await p.spawn({memberId:c,name:`chat-${e}`,cwd:n,prompt:"",external:r,systemPrompt:i});let m={manager:p,memberId:c,holder:l,lastUsed:Date.now()};return kN(s,m),m}async function WN(t){try{let e=t.params??{},r=typeof e.agentId=="string"?e.agentId.trim():"";if(!r||r==="qlogicagent"){t.id!==void 0&&this.sendResponse(t.id,{ok:!1,warmed:!1});return}let n=await this.ensureAgentConfigStore();this.acpDetector.setConfigStore(n.getData()),this.acpDetector.scan(!1);let o=this.acpDetector.buildExternalDescriptor(r);if(!o){t.id!==void 0&&this.sendResponse(t.id,{ok:!1,warmed:!1});return}let i=typeof this.getActiveProjectRoot=="function"?this.getActiveProjectRoot():process.cwd();await qN(this,r,o,i,em),t.id!==void 0&&this.sendResponse(t.id,{ok:!0,warmed:!0})}catch(e){t.id!==void 0&&this.sendResponse(t.id,{ok:!1,warmed:!1,error:e instanceof Error?e.message:String(e)})}}async function KN(t){try{let e=t.params??{},r=typeof e.agentId=="string"?e.agentId.trim():"",n=typeof e.prompt=="string"?e.prompt:"";if(!r||!n.trim()){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INVALID_PARAMS,message:"agentId and prompt are required."});return}let o=await this.ensureAgentConfigStore();this.acpDetector.setConfigStore(o.getData()),this.acpDetector.scan(!1);let i=this.acpDetector.buildExternalDescriptor(r);if(!i){t.id!==void 0&&this.sendResponse(t.id,void 0,{code:b.INVALID_PARAMS,message:`Agent ${r} is not available or not ACP-compatible.`});return}let s=typeof e.cwd=="string"&&e.cwd?e.cwd:typeof this.getActiveProjectRoot=="function"?this.getActiveProjectRoot():process.cwd(),a=typeof e.timeoutMs=="number"&&e.timeoutMs>0?e.timeoutMs:3e5,c=typeof e.sessionId=="string"?e.sessionId:void 0,l=typeof e.turnId=="string"?e.turnId:void 0,d=typeof e.requestId=="string"?e.requestId:void 0,p=typeof e.projectId=="string"?e.projectId:void 0,m=Qp(r,s,c),f=await qN(this,r,i,s,c,typeof e.systemPrompt=="string"?e.systemPrompt:void 0),g={sessionId:c,turnId:l,requestId:d,deltas:[],streamedAny:!1};f.holder.current=g,f.lastUsed=Date.now();let h;try{h=await f.manager.sendTask(f.memberId,n,{timeout:a})}catch(k){throw await Qee({sessionId:c,projectRoot:s,turnId:l,projectId:p,agentId:r,prompt:n,error:k}),tm(m),k}finally{f.holder.current=null}let y=g.deltas.join("")||(typeof h?.content=="string"?h.content:""),v=f.manager.getUsageTracker(f.memberId)?.getUsage();if(c){Kr(c,{role:"user",content:n},s,l),y&&Kr(c,{role:"assistant",content:y},s,l);let k=Nt(c,s);ct(c,{type:"personal",...p?{projectId:p}:{},...k?.title?{}:{title:fc(n,"External agent session")},...k?.agentId?{}:{agentId:r}},s)}t.id!==void 0&&this.sendResponse(t.id,{ok:!0,agentId:r,content:y,streamed:g.streamedAny,stopReason:h?.stopReason,usage:v?{inputTokens:v.inputTokens,outputTokens:v.outputTokens,totalTokens:v.totalTokens,cacheRead:v.cachedReadTokens,thoughtTokens:v.thoughtTokens,cost:v.cost}:void 0})}catch(e){if(t.id!==void 0){let r=TN(e);this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:PN(e),...r?{data:{authMethods:r}}:{}})}}}oe();import*as ga from"node:fs/promises";import*as nj from"node:path";Ps();var ete=/^[a-z0-9][a-z0-9_.:-]{0,79}$/i,tte=new Set(["journeyDay","count"]),rte=new Set(["blocked"]),nte=new Set(["R0","R1","R2","R3"]),ote=new Set(["aix","android","darwin","freebsd","ios","linux","openbsd","sunos","win32"]),ite={"community.journey.view":new Set(["surface","petState","journeyDay","platform"]),"community.share.generated":new Set(["surface","action","source","petState","journeyDay","platform"]),"community.sandbox.violation":new Set(["surface","action","source","ruleId","riskTier","platform","count","blocked"]),"community.desensitization.hit":new Set(["surface","action","source","ruleId","riskTier","platform","count","blocked"]),"registry.install_failed":new Set(["dimension","resourceType","platform"])};function nm(t,e){if(!e||typeof e!="object"||Array.isArray(e))return;let r=ite[t],n={};for(let[o,i]of Object.entries(e)){if(!r.has(o))continue;let s=ste(o,i);s!==void 0&&(n[o]=s)}return Object.keys(n).length>0?n:void 0}function ste(t,e){if(tte.has(t))return typeof e=="number"&&Number.isInteger(e)&&e>=0&&e<=1e5?e:void 0;if(rte.has(t))return typeof e=="boolean"?e:void 0;if(t==="riskTier")return typeof e=="string"&&nte.has(e)?e:void 0;if(t==="platform")return typeof e=="string"&&ote.has(e)?e:void 0;if(typeof e!="string")return;let r=e.trim();return ete.test(r)?r:void 0}var ate=new Set(["withdrawn","version-available","deprecated","version-yanked","frozen"]);function cte(t){let e=gte(t.baseUrl),r=hte(t.fetchFn??fetch,t.clientVersion),n=t.token.trim();return{async getConsent(){return VN(r,e,n,"GET")},async setConsent(o){return VN(r,e,n,"PUT",o)},async matchRegistry(o){let i=o.intent.trim();if(!i)throw new Error("intent is required.");let s=vte(o.topK),a=await Ne(r,Me(t.baseUrl,"/api/v15/registry/match"),n,"POST",{intent:i,topK:s,prefer:o.preferOfficial===!1?"relevance":"official",canonicalOnly:!0});return(_e(a)&&Array.isArray(a.matches)?a.matches:[]).map(bte).filter(l=>!!l).slice(0,s)},async publishSkill(o){return DR(r,t.baseUrl,n,"skill",o)},async publishPet(o){return DR(r,t.baseUrl,n,"pet",o)},async publishWorkflow(o){return DR(r,t.baseUrl,n,"workflow",o)},async recordSignal(o){let i=encodeURIComponent(o.resourceId.trim());if(!i)throw new Error("resourceId is required.");let s=await Ne(r,Me(t.baseUrl,`/api/v15/registry/resources/${i}/signal`),n,"POST",{event:o.event,attribution:o.attribution?.trim()||void 0,metadata:o.metadata});if(_e(s)&&s.accepted===!0)return{accepted:!0};throw new Error("Community hub returned an invalid signal response.")},async recordTelemetry(o){let i=nm(o.event,o.metadata),s=await Ne(r,Me(t.baseUrl,"/api/v15/registry/telemetry"),n,"POST",{event:o.event,metadata:i});if(_e(s)&&s.accepted===!0)return{accepted:!0};throw new Error("Community hub returned an invalid telemetry response.")},async listSharedResources(){let o=await Ne(r,Me(t.baseUrl,"/api/v15/registry/mine"),n,"GET");return(_e(o)&&Array.isArray(o.resources)?o.resources:[]).map(om).filter(s=>!!s)},async withdrawSharedResource(o,i){let s=encodeURIComponent(o.trim());if(!s)throw new Error("resourceId is required.");let a=await Ne(r,Me(t.baseUrl,`/api/v15/registry/resources/${s}/withdraw`),n,"POST",{reason:i?.trim()||void 0}),c=om(a);if(!c)throw new Error("Community hub returned an invalid resource.");return c},async withdrawSharedResources(o){let i=await Ne(r,Me(t.baseUrl,"/api/v15/registry/community-consent/withdraw-shared"),n,"POST",{reason:o?.trim()||void 0});return(_e(i)&&Array.isArray(i.resources)?i.resources:[]).map(om).filter(a=>!!a)},async listNotices(o={}){let i=o.includeRead?"?includeRead=true":"",s=await Ne(r,Me(t.baseUrl,`/api/v15/registry/notices${i}`),n,"GET");return(_e(s)&&Array.isArray(s.notices)?s.notices:[]).map(ZN).filter(c=>!!c)},async markNoticeRead(o){if(!Number.isSafeInteger(o)||o<1)throw new Error("noticeId is required.");let i=await Ne(r,Me(t.baseUrl,`/api/v15/registry/notices/${o}/read`),n,"POST"),s=ZN(i);if(!s)throw new Error("Community hub returned an invalid notice.");return s},async resolveInstall(o,i){let s=encodeURIComponent(o.trim());if(!s)throw new Error("resourceId is required.");let a=i?.trim(),c=a?`?version=${encodeURIComponent(a)}`:"",l=await Ne(r,Me(t.baseUrl,`/api/v15/registry/resources/${s}/install${c}`),n,"GET"),d=YN(l);if(!d)throw new Error("Community hub returned an invalid install resolution.");return d},async listResourceVersions(o){let i=encodeURIComponent(o.trim());if(!i)throw new Error("resourceId is required.");let s=await Ne(r,Me(t.baseUrl,`/api/v15/registry/resources/${i}/versions`),n,"GET");return(_e(s)&&Array.isArray(s.versions)?s.versions:[]).map(ute).filter(c=>!!c)},async rateResource(o,i){let s=encodeURIComponent(o.trim());if(!s)throw new Error("resourceId is required.");let a=await Ne(r,Me(t.baseUrl,`/api/v15/registry/resources/${s}/rate`),n,"POST",{stars:i});return GN(a)},async getRatingSummary(o){let i=encodeURIComponent(o.trim());if(!i)throw new Error("resourceId is required.");let s=await Ne(r,Me(t.baseUrl,`/api/v15/registry/resources/${i}/rating`),n,"GET");return GN(s)},async reportResource(o,i){let s=encodeURIComponent(o.trim());if(!s)throw new Error("resourceId is required.");await Ne(r,Me(t.baseUrl,`/api/v15/registry/resources/${s}/report`),n,"POST",{reason:i?.trim()||void 0})},async listComments(o){let i=encodeURIComponent(o.trim());if(!i)throw new Error("resourceId is required.");let s=await Ne(r,Me(t.baseUrl,`/api/v15/registry/resources/${i}/comments`),n,"GET");return(_e(s)&&Array.isArray(s.comments)?s.comments:[]).map(lte).filter(c=>!!c)},async postComment(o,i){let s=encodeURIComponent(o.trim());if(!s)throw new Error("resourceId is required.");let a=i?.trim()??"";if(!a)throw new Error("Comment body is required.");let c=await Ne(r,Me(t.baseUrl,`/api/v15/registry/resources/${s}/comments`),n,"POST",{body:a}),l=_e(c)?c:{};return{id:typeof l.id=="number"?l.id:0,folded:l.folded===!0,createdAt:typeof l.createdAt=="string"?l.createdAt:""}},async emitActivity(o){let i=await Ne(r,Me(t.baseUrl,"/api/v15/community/activity"),n,"POST",{id:o.id,type:o.type,ts:o.ts,actorPetId:o.actorPetId,peerRef:o.peerRef,visibility:o.visibility,payload:o.payload});if(!(_e(i)&&i.accepted===!0))throw new Error("Community hub returned an invalid activity response.")},async recordCommunityReview(o){let i=await Ne(r,Me(t.baseUrl,"/api/v15/community/reviews"),n,"POST",{id:o.id,resourceId:o.resourceId,actorPetId:o.actorPetId,experience:o.experience,outcome:o.outcome,contextCategory:o.contextCategory,ts:o.ts});if(!(_e(i)&&i.accepted===!0))throw new Error("Community hub returned an invalid review response.")},async findReviewAnswers(o,i){let s=o.trim();if(!s)return[];let a=await Ne(r,Me(t.baseUrl,"/api/v15/community/reviews/search"),n,"POST",{query:s,limit:typeof i=="number"&&i>0?Math.min(Math.floor(i),20):void 0});return(_e(a)&&Array.isArray(a.answers)?a.answers:[]).map(dte).filter(l=>!!l)},async recordCommunityAsk(o){let i=await Ne(r,Me(t.baseUrl,"/api/v15/community/asks"),n,"POST",{id:o.id,askerPetId:o.askerPetId,question:o.question,contextCategory:o.contextCategory,ts:o.ts});if(!(_e(i)&&i.accepted===!0))throw new Error("Community hub returned an invalid ask response.")},async recordCommunityAnswer(o){let i=await Ne(r,Me(t.baseUrl,"/api/v15/community/answers"),n,"POST",{id:o.id,askId:o.askId,answererPetId:o.answererPetId,answer:o.answer,ts:o.ts});if(!(_e(i)&&i.accepted===!0))throw new Error("Community hub returned an invalid answer response.")},async recordCommunityInteraction(o){let i=await Ne(r,Me(t.baseUrl,"/api/v15/community/interactions"),n,"POST",{id:o.id,kind:o.kind,actorPetId:o.actorPetId,peerPetId:o.peerPetId,payload:o.payload,ts:o.ts});if(!(_e(i)&&i.accepted===!0))throw new Error("Community hub returned an invalid interaction response.")},async resolveRuntime(o,i){let s=encodeURIComponent(o.trim());if(!s)throw new Error("runtime id is required.");let a=encodeURIComponent(i.trim());if(!a)throw new Error("platform is required.");let c=await Ne(r,Me(t.baseUrl,`/api/v15/runtime/${s}/resolve?platform=${a}`),n,"GET"),l=pte(c);if(!l)throw new Error("Community hub returned an invalid runtime resolution.");return l}}}async function DR(t,e,r,n,o){let i=om(await Ne(t,Me(e,"/api/v15/registry/resources"),r,"POST",{id:o.id,type:n,title:o.title,summary:o.summary,visibility:o.visibility??"public",...o.category?{category:o.category}:{},tags:o.tags??[],manifest:o.manifest}));if(!i)throw new Error("Community hub returned an invalid resource.");if(o.version===void 0&&o.packageGzipBase64===void 0)return{resource:i};if(!o.version?.trim()||!o.packageGzipBase64?.trim())throw new Error("version and packageGzipBase64 must be provided together.");let s=encodeURIComponent(o.id.trim()),a=encodeURIComponent(o.version.trim()),c=kte(await yte(t,Me(e,`/api/v15/registry/resources/${s}/versions/${a}`),r,Buffer.from(o.packageGzipBase64,"base64")));if(!c)throw new Error("Community hub returned an invalid version.");return{resource:i,version:c}}function GN(t){return _e(t)?{average:typeof t.average=="number"?t.average:0,count:typeof t.count=="number"?t.count:0}:{average:0,count:0}}function lte(t){return!_e(t)||typeof t.id!="number"||typeof t.body!="string"?null:{id:t.id,body:t.body,folded:t.folded===!0,createdAt:typeof t.createdAt=="string"?t.createdAt:""}}function dte(t){if(!_e(t))return null;let e=typeof t.id=="string"?t.id:"",r=typeof t.resourceId=="string"?t.resourceId:"",n=typeof t.experience=="string"?t.experience:"",o=t.outcome==="success"||t.outcome==="fail"||t.outcome==="neutral"?t.outcome:null;return!e||!r||!n||!o?null:{id:e,resourceId:r,actorPetId:typeof t.actorPetId=="string"?t.actorPetId:"",experience:n,outcome:o,contextCategory:typeof t.contextCategory=="string"?t.contextCategory:null,ts:typeof t.ts=="number"?t.ts:0}}function ute(t){return!_e(t)||typeof t.version!="string"||!t.version?null:{version:t.version,createdAt:typeof t.createdAt=="string"?t.createdAt:"",sizeBytes:typeof t.sizeBytes=="number"?t.sizeBytes:0,yanked:t.yanked===!0}}function pte(t){if(!_e(t))return null;let e=typeof t.id=="string"?t.id:"",r=typeof t.version=="string"?t.version:"",n=typeof t.downloadUrl=="string"?t.downloadUrl:"",o=typeof t.checksum=="string"?t.checksum:"",i=typeof t.sizeBytes=="number"?t.sizeBytes:0;return!e||!r||!n||!/^[a-f0-9]{64}$/.test(o)||!Number.isSafeInteger(i)||i<=0?null:{id:e,version:r,downloadUrl:n,checksum:o,sizeBytes:i}}function dt(t=ur()){let e=t.get("QLOGIC_LLMROUTER_ACCESS_TOKEN")?.trim();if(!e)return null;let r=mte(t);return cte({baseUrl:fte(t),token:e,clientVersion:r})}function mte(t){let e=t.get("QLOGIC_AGENT_VERSION")?.trim();return e||"2.15.6"}function fte(t){return t.get("QLOGIC_HUB_BASE_URL")?.trim()||t.get("XIAOZHICLAW_HUB_URL")?.trim()||"https://xiaozhi.qlogicagent.com"}function gte(t){return Me(t,"/api/v15/registry/community-consent")}function Me(t,e){let r=t.trim().replace(/\/+$/,"");return r.endsWith("/v1")&&(r=r.slice(0,-3)),r.endsWith("/api")&&(r=r.slice(0,-4)),`${r}${e}`}function hte(t,e){let r=e?.trim();return r?(n,o)=>t(n,{...o,headers:{...o?.headers,"x-client-version":r}}):t}async function VN(t,e,r,n,o){return Yr(await Ne(t,e,r,n,o),!0)}async function Ne(t,e,r,n,o){let i,s=o!==void 0;try{i=await t(e,{method:n,headers:{accept:"application/json",authorization:`Bearer ${r}`,...s?{"content-type":"application/json"}:{}},...s?{body:JSON.stringify(o)}:{},signal:AbortSignal.timeout(1e4)})}catch{throw new Error("Community hub is unavailable.")}if(!i.ok)throw new Error(`Community hub rejected registry request: ${i.status}`);return i.json().catch(()=>null)}async function yte(t,e,r,n){let o;try{o=await t(e,{method:"PUT",headers:{accept:"application/json",authorization:`Bearer ${r}`,"content-type":"application/gzip"},body:n,signal:AbortSignal.timeout(1e4)})}catch{throw new Error("Community hub is unavailable.")}if(!o.ok)throw new Error(`Community hub rejected registry request: ${o.status}`);return o.json().catch(()=>null)}function Yr(t,e){let r=_e(t)?t:{},n=r.enabled===!0;return{enabled:n,methodSharingEnabled:n&&r.methodSharingEnabled!==!1,signalsEnabled:n&&r.signalsEnabled!==!1,encounterEnabled:n&&r.encounterEnabled!==!1,remoteSynced:e}}function _e(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}function om(t){return!_e(t)||typeof t.id!="string"?null:{id:t.id,type:typeof t.type=="string"?t.type:"skill",title:typeof t.title=="string"?t.title:t.id,summary:typeof t.summary=="string"?t.summary:"",visibility:typeof t.visibility=="string"?t.visibility:"private",latestVersion:typeof t.latestVersion=="string"?t.latestVersion:null,withdrawn:t.withdrawn===!0,withdrawnAt:typeof t.withdrawnAt=="string"?t.withdrawnAt:null}}function vte(t){if(t===void 0)return 3;if(typeof t!="number"||!Number.isSafeInteger(t)||t<1||t>3)throw new Error("registry match topK must be an integer between 1 and 3.");return t}function bte(t){if(!_e(t)||t.canonical!==!0&&t.isCanonical!==!0)return null;let e=JN(t.sourceTier),r=XN(t.trustStage),n=im(t.resourceRiskTier),o=im(t.effectiveRiskTier);if(typeof t.id!="string"||typeof t.title!="string"||!e||!r||!n||!o)return null;let i=Array.isArray(t.capabilityTags)?t.capabilityTags:[];return{id:t.id,type:typeof t.type=="string"?t.type:"skill",title:NR(t.title,80),summary:NR(typeof t.summary=="string"?t.summary:"",160),category:typeof t.category=="string"?t.category:null,capabilityTags:i.filter(s=>typeof s=="string"&&s.trim().length>0).slice(0,6).map(s=>NR(s,32)),sourceTier:e,trustStage:r,resourceRiskTier:n,effectiveRiskTier:o,latestVersion:typeof t.latestVersion=="string"?t.latestVersion:null,canonical:!0}}function NR(t,e){let r=t.replace(/\s+/g," ").trim();return r.length<=e?r:`${r.slice(0,Math.max(0,e-1))}\u2026`}function kte(t){return!_e(t)||typeof t.version!="string"||typeof t.checksum!="string"?null:{version:t.version,checksum:t.checksum,sizeBytes:typeof t.sizeBytes=="number"?t.sizeBytes:0}}function ZN(t){return!_e(t)||typeof t.id!="number"||typeof t.resourceId!="string"?null:{id:t.id,resourceId:t.resourceId,resourceType:typeof t.resourceType=="string"?t.resourceType:"skill",title:typeof t.title=="string"?t.title:t.resourceId,event:ate.has(t.event)?t.event:"withdrawn",version:typeof t.version=="string"?t.version:null,reason:typeof t.reason=="string"?t.reason:null,read:t.read===!0,createdAt:typeof t.createdAt=="string"?t.createdAt:"",readAt:typeof t.readAt=="string"?t.readAt:null}}var wte=new Set(["R0","R1","R2","R3"]),Ste=new Set(["official","community"]),xte=new Set(["quarantine","trial","trusted"]),Rte=new Set(["pending","approved","rejected"]);function im(t){return typeof t=="string"&&wte.has(t)?t:null}function JN(t){return typeof t=="string"&&Ste.has(t)?t:null}function XN(t){return typeof t=="string"&&xte.has(t)?t:null}function Tte(t){return typeof t=="string"&&Rte.has(t)?t:null}function YN(t){if(!_e(t))return null;let e=JN(t.sourceTier),r=XN(t.trustStage),n=Tte(t.reviewStatus),o=im(t.resourceRiskTier),i=im(t.effectiveRiskTier);if(typeof t.id!="string"||typeof t.type!="string"||typeof t.kind!="string"||!e||!r||!n||!o||!i||typeof t.version!="string"||typeof t.checksum!="string"||typeof t.sizeBytes!="number"||typeof t.downloadUrl!="string")return null;let s=Array.isArray(t.requires)?t.requires:null,a=Array.isArray(t.dependencies)?t.dependencies:null;if(!s||!a||s.some(l=>typeof l!="string"))return null;let c=a.map(YN);return c.some(l=>!l)?null:{id:t.id,type:t.type,kind:t.kind,sourceTier:e,trustStage:r,reviewStatus:n,resourceRiskTier:o,effectiveRiskTier:i,requires:s,dependencies:c,version:t.version,checksum:t.checksum,sizeBytes:t.sizeBytes,downloadUrl:t.downloadUrl,manifest:t.manifest,minClientVersion:typeof t.minClientVersion=="string"&&t.minClientVersion.trim()?t.minClientVersion.trim():void 0,signature:typeof t.signature=="string"&&t.signature.trim()?t.signature:null,signingKeyId:typeof t.signingKeyId=="string"&&t.signingKeyId.trim()?t.signingKeyId:null}}var Pte=/(?:[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}|[A-Za-z]:\\|\/Users\/|\/home\/|secret|token|password|\+?\d[\d\s().-]{7,}\d)/i,Ate=/\b(?:agent|tool|shell|execute|permission|memory|system prompt|developer message)\b/i;function Ite(t){return _te(t),{manifest:{schema_version:15,kind:"asset",name:t.name,summary:t.summary,persona:t.persona,traits:t.traits??[],assets:t.assets??[],tags:t.tags??[]}}}async function QN(t,e){let r=await t.getConsent();if(!r.enabled||!r.methodSharingEnabled)throw new Error("Community method-sharing consent is required before publishing pet assets.");let n=Ite(e);return t.publishPet({id:e.id,title:e.name,summary:e.summary,visibility:e.visibility??"public",tags:e.tags??[],manifest:n.manifest})}function _te(t){let e=[t.id,t.name,t.summary,t.persona,...t.traits??[],...t.tags??[]].join(`
670
670
  `);if(Pte.test(e))throw new Error("Pet asset publish blocked: private email, path, secret, token, or phone-like text detected.");if(Ate.test(e))throw new Error("Pet asset publish blocked: pets are display-only and cannot claim agent execution powers.");for(let r of t.assets??[])if(r.path.includes("..")||r.path.startsWith("/")||/^[A-Za-z]:\\/.test(r.path))throw new Error("Pet asset publish blocked: unsafe asset path.")}var OR={enabled:!0},Cte=new Set(["R2","R3"]);function eO(t,e=OR){return Cte.has(t.effectiveRiskTier)?{mode:"high-risk-ask",requiresInstallConsent:!0,requiresHighRiskConsent:!0,reason:`effectiveRiskTier=${t.effectiveRiskTier} \u9AD8\u5371,\u5FC5\u987B\u9AD8\u5371\u95EE\u4EBA`}:e.enabled?t.effectiveRiskTier==="R0"?{mode:"silent",requiresInstallConsent:!1,requiresHighRiskConsent:!1,reason:"R0 \u4F4E\u98CE\u9669 inert,\u81EA\u6CBB\u9759\u9ED8\u83B7\u53D6"}:{mode:"ask",requiresInstallConsent:!0,requiresHighRiskConsent:!1,reason:"R1 \u4F4E\u98CE\u9669\u4F46\u975E\u96F6,\u95EE\u4EBA\u4E00\u6B21"}:{mode:"ask",requiresInstallConsent:!0,requiresHighRiskConsent:!1,reason:"\u81EA\u6CBB\u9884\u7B97\u5173\u95ED,\u56DE\u9000\u663E\u5F0F\u540C\u610F"}}var tO=new Set(["installed","success","fail","error","kept","uninstalled","endorse"]),Ete=new Set(["acquire","ask","answer","encounter","review"]),Mte=new Set(["unlock","flaunt"]),$te=new Set([...tO,...Ete,...Mte,"search"]),Dte=["x","y","z","lat","lng","lon","coord","coords","coordinate","coordinates","position","positionHint","pos"];function sm(t){return tO.has(t)}function Nte(t){return typeof t=="string"&&$te.has(t)}function Ote(t){if(t==null)return;if(typeof t!="object")throw new Error("ActivityEvent anchor \u5FC5\u987B\u662F\u5BF9\u8C61");for(let r of Object.keys(t))if(Dte.includes(r))throw new Error(`ActivityEvent anchor \u7981\u6743\u5A01\u5750\u6807\u952E: ${r}(DR12 \u7EA2\u7EBF:v1 \u4F4D\u7F6E client \u975E\u6743\u5A01)`);let e={};return typeof t.districtId=="string"&&t.districtId.length>0&&(e.districtId=t.districtId),typeof t.shopId=="string"&&t.shopId.length>0&&(e.shopId=t.shopId),e.districtId===void 0&&e.shopId===void 0?void 0:e}function rO(t){if(!t.id||typeof t.id!="string")throw new Error("ActivityEvent.id \u5FC5\u586B(\u5E42\u7B49\u952E)");if(!Nte(t.type))throw new Error(`ActivityEvent.type \u975E\u6CD5: ${String(t.type)}`);if(typeof t.ts!="number"||!Number.isFinite(t.ts)||t.ts<0)throw new Error("ActivityEvent.ts \u5FC5\u987B\u662F\u975E\u8D1F epoch ms");if(!t.actorPetId||typeof t.actorPetId!="string")throw new Error("ActivityEvent.actorPetId \u5FC5\u586B");let e=t.payload??{},r=Ote(e.anchor),n={...e};r?n.anchor=r:delete n.anchor;let o={id:t.id,type:t.type,ts:t.ts,actorPetId:t.actorPetId,payload:n,visibility:t.visibility??"owner"};return typeof t.peerRef=="string"&&t.peerRef.length>0&&(o.peerRef=t.peerRef),o}import{createHash as jte}from"node:crypto";var Lte="pk_",Ute=24;function am(t,e){let r=(t??"").trim(),n=(e??"").trim();if(!r||!n)throw new Error("derivePetKey: ownerUserId \u4E0E deviceId \u5747\u5FC5\u586B");let o=jte("sha256").update(r+"\0"+n).digest("hex");return`${Lte}${o.slice(0,Ute)}`}Ps();function jR(t){return{async emit(e){if(!t.transport)return"disabled";let r=rO(e);if(r.visibility==="community"){if(!t.consent)return"consent-blocked";let n;try{n=await t.consent.getConsent()}catch{return"failed"}if(!n.enabled||!(sm(r.type)?n.signalsEnabled:n.encounterEnabled))return"consent-blocked"}try{return await t.transport.emit(r),"emitted"}catch{return"failed"}}}}function LR(t){return{async emit(e){if(!t.emitActivity)throw new Error("emitActivity unavailable on client");await t.emitActivity(e)}}}function UR(){let t=dt(),e=t?.emitActivity?LR(t):null;return jR({transport:e,consent:t})}function FR(t=ur()){let e=t.get("QLOGIC_LLMROUTER_USER_ID")?.trim(),r=t.get("QLOGIC_LLMROUTER_DEVICE_ID")?.trim();if(!e||!r)return null;try{return am(e,r)}catch{return null}}import{randomUUID as oj}from"node:crypto";import{createPublicKey as Fte,verify as Hte}from"node:crypto";function zte(t){return`id=${t.id}
671
671
  version=${t.version}
672
672
  checksum=${t.checksum}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qlogicagent",
3
- "version": "2.15.5",
3
+ "version": "2.15.6",
4
4
  "description": "XiaozhiClaw Agent CLI — subprocess architecture (JSON-RPC over stdio)",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -66,6 +66,7 @@
66
66
  "dev": "tsx watch src/index.ts",
67
67
  "build": "node scripts/build.mjs",
68
68
  "build:tsc": "tsc --noCheck",
69
+ "build:search-svc": "node scripts/build-search-svc.mjs",
69
70
  "start": "node dist/cli.js",
70
71
  "test": "vitest run",
71
72
  "check": "tsc --noEmit && pnpm test && pnpm run check:architecture-boundaries && pnpm run check:provider-core-boundary && pnpm run check:provider-core-release-sync && pnpm run check:pet-core-boundary && pnpm run check:workspace-hygiene && pnpm run check:package-artifact",