qlogicagent 2.13.9 → 2.13.10

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
@@ -651,7 +651,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
651
651
  `;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()},u=e.external,p=[...u.acpArgs];a&&(r.QLOGICAGENT_PARENT_RPC=a);let m=VS(u.cliPath,p,{cwd:e.cwd,env:r,stdio:["pipe","pipe","pipe"],detached:!1});l.pid=m.pid??-1;let f=new Map,g=new mo,h=new mc,y=zS({cwd:e.cwd,requestPermission:this.callbacks.onPermissionRequest?v=>this.callbacks.onPermissionRequest(e.memberId,v):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,(v,k)=>{v==="usage_update"&&h.onUsageUpdate(k);let R=mo.translateNotification(v,k);R?(this.captureChildProgress(e.memberId,R.method,R.params),this.callbacks.onNotification?.(e.memberId,R.method,R.params)):(this.captureChildProgress(e.memberId,v,k),this.callbacks.onNotification?.(e.memberId,v,k))},y),m.stderr&&Zu({input:m.stderr,crlfDelay:Number.POSITIVE_INFINITY}).on("line",k=>{this.callbacks.log?.debug?.(`[${new Date().toISOString()}] [debug] [agent:${e.memberId}] [stderr] ${k}`),c?.write(`${new Date().toISOString()} ${k}
652
652
  `)}),m.on("exit",(v,k)=>{g.detach(),y.disposeAll();let R=l.state;if(R!=="killed"&&R!=="completed"&&v!==0){let I=this.processes.get(e.memberId)?.runtimeRestartCount??n;if(I<Ps){let D=ND*2**I;this.slog("warn",e.memberId,"crash",`crashed again (code=${v}), restart ${I+1}/${Ps}`),this.callbacks.onNotification?.(e.memberId,"agents.error",{agentId:e.memberId,phase:"runtime",error:`Process crashed (code=${v}), restarting`,retriesLeft:Ps-I-1}),setTimeout(()=>{this.attemptRuntimeRestart(e,r,I+1).catch(B=>{this.slog("warn",e.memberId,"restart",`failed: ${B instanceof Error?B.message:String(B)}`)})},D);return}}R!=="killed"&&(l.state=v===0?"completed":"failed"),l.endedAt=Date.now(),v!==0&&!l.error&&(l.error=`ACP process exited with code ${v} (signal: ${k})`),this.callbacks.onStateChange?.(e.memberId,l.state),this.callbacks.onExit?.(e.memberId,v,k)}),m.on("error",v=>{g.detach(),y.disposeAll(),l.state="failed",l.error=v.message,l.endedAt=Date.now(),this.callbacks.onStateChange?.(e.memberId,"failed")}),this.callbacks.onStateChange?.(e.memberId,"starting");let w=await g.initialize(m);l.state="ready",l.supportsResume=w.agentCapabilities.loadSession===!0,this.callbacks.onStateChange?.(e.memberId,"ready"),this.slog("info",e.memberId,"restart",`ACP restarted (attempt=${n}, protocol=${w.protocolVersion}, loadSession=${l.supportsResume}, pid=${l.pid})`);let S=[...e.mcpServers??[]];a&&S.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 v=await g.resumeSession(m,l.sessionId,{cwd:e.cwd,mcpServers:S.length>0?S:void 0});l.sessionId=v.sessionId,this.slog("info",e.memberId,"session",`session resumed (id=${l.sessionId})`)}else{let v={cwd:e.cwd};S.length>0&&(v.mcpServers=S),e.systemPrompt&&(v.systemPrompt=e.systemPrompt);let k=await g.createSession(m,v);l.sessionId=k.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,v=>{this.slog("warn",v,"heartbeat","hang detected \u2014 force-killing"),this.callbacks.onNotification?.(v,"agents.error",{agentId:v,phase:"heartbeat",error:`Agent ${e.name} stopped responding`,retriesLeft:0}),this.kill(v)})}catch(l){let u=this.processes.get(e.memberId);u&&(u.handle.state="failed",u.handle.error=`Runtime restart failed: ${l instanceof Error?l.message:String(l)}`,u.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 OD}from"node:child_process";var LD=/[|&;><$`(){}]/;function UX(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=LD.test(i);if(!(s&&r)&&!(i.startsWith("brew ")&&!n))return{command:i,shell:s}}return null}function FX(t,e){if(e!=="cn")return t;let r=t.trim();return/^npm\b/.test(r)&&!/(?:^|\s)--registry(?:\s|=)/.test(r)?`${r} --registry ${GS}`:/^uv\b/.test(r)&&!/(?:^|\s)--(?:default-)?index(?:-url)?(?:\s|=)/.test(r)?`${r} --default-index ${Ts}`:/^(?:pipx|pip3?|python -m pip)\b/.test(r)&&!/(?:^|\s)--index-url(?:\s|=)/.test(r)?`${r} --index-url ${Ts}`:r}function jD(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 HX=(t,e)=>{if(e)return OD(t,{shell:!0,stdio:["ignore","pipe","pipe"]});let r=t.split(/\s+/).filter(Boolean);return OD(r[0],r.slice(1),{stdio:["ignore","pipe","pipe"]})};async function UD(t,e,r={}){let n=r.platform??process.platform,o=r.spawnImpl??HX,i=UX(t,n);if(!i){let u=`No install command available for ${n}`;return e({type:"state",state:"failed"}),e({type:"done",ok:!1,error:u}),{ok:!1,error:u}}let s=FX(i.command,r.mirror);e({type:"state",state:"installing"});let a=await jD(s,i.shell,o,e);if(a!==0){let u=`Install command exited with code ${a}`;return e({type:"state",state:"failed"}),e({type:"done",ok:!1,error:u}),{ok:!1,error:u}}let c=t.verifyCmd??`${t.cliCommand} --version`;if(e({type:"state",state:"verifying"}),await jD(c,LD.test(c),o,e)!==0){let u=`Installed but verification failed (${t.cliCommand})`;return e({type:"state",state:"failed"}),e({type:"done",ok:!1,error:u}),{ok:!1,error:u}}return e({type:"state",state:"installed"}),e({type:"done",ok:!0}),{ok:!0}}var pt=new Map,zX=10*6e4,BX=6e4,qX=6,ni=null;function Ju(t,e,r){return`${t}\0${e}\0${r??"default"}`}function vc(t){try{t.manager.kill(t.memberId)}catch{}try{t.manager.dispose()}catch{}}function FD(t){let e=pt.get(t);if(e){if(!e.manager.isAlive(e.memberId)){pt.delete(t),vc(e);return}return e}}function HD(t,e){let r=pt.get(t);r&&r!==e&&(pt.delete(t),vc(r)),pt.set(t,e),WX(),GX()}function zD(t,e){let r=pt.get(t);if(!r)return;if(!r.manager.isAlive(r.memberId)){pt.delete(t),vc(r);return}pt.delete(t);let n=pt.get(e);return n&&n!==r&&(pt.delete(e),vc(n)),pt.set(e,r),r.lastUsed=Date.now(),r}var Yu="__warm__";function bc(t){let e=pt.get(t);e&&(pt.delete(t),vc(e))}function BD(){for(let t of[...pt.keys()])bc(t);ni&&(clearInterval(ni),ni=null)}function WX(){for(;pt.size>qX;){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;bc(t)}}function KX(t){for(let[e,r]of[...pt.entries()])r.holder.current||t-r.lastUsed>zX&&bc(e)}function GX(){ni||(ni=setInterval(()=>KX(Date.now()),BX),typeof ni.unref=="function"&&ni.unref())}import{randomUUID as VX}from"node:crypto";var As=new Map;function ZX(t,e){let r=As.get(t);return r&&(clearTimeout(r.timer),r.resolve(null),As.delete(t)),new Promise(n=>{let o=setTimeout(()=>{As.delete(t),n(null)},e);typeof o.unref=="function"&&o.unref(),As.set(t,{resolve:n,timer:o})})}function qD(t,e){let r=As.get(t);return r?(clearTimeout(r.timer),As.delete(t),r.resolve(e),!0):!1}function JX(t){if(t==null)return"";if(typeof t=="string")return t;try{return JSON.stringify(t)}catch{return""}}async function WD(t,e){let r=e.turnContext(),n=t.toolCall&&typeof t.toolCall=="object"?t.toolCall:{},o=typeof t.permissionId=="string"&&t.permissionId?t.permissionId:VX(),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:JX(n.rawInput),message:typeof t.message=="string"?t.message:void 0,category:typeof t.category=="string"?t.category:"destructive",options:i});let a=await ZX(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 XX(t){let e=t?.rawInput;if(e!=null){if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return}}}function QX(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}}async function GD(t){let e=t.params,r=typeof e?.approvalId=="string"?e.approvalId:"",n=typeof e?.optionId=="string"?e.optionId:"",o=r&&n?qD(r,n):!1;t.id!==void 0&&this.sendResponse(t.id,{ok:o})}async function VD(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 ZD(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 JD(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=ID().map(o=>{let i=r.get(o.id),s=MD(o,i?.version);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:s.installedVersion??i?.version,latestVersion:s.latestVersion,updateAvailable:s.updateAvailable,updatePackageName:s.packageName,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 YD(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=Rs(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 UD(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 XD(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 QD(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 e$(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 t$(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 r$(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 n$(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 o$(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 i$(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 s$(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 a$(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=Xu.join(de(),"agent-logs"),n=Xu.join(r,`${e.agentId}.stderr.log`),o="";try{o=KD.readFileSync(n,"utf-8")}catch{}e.tail&&e.tail>0&&o&&(o=o.split(`
653
653
  `).slice(-e.tail).join(`
654
- `)),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 c$(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 l$(t,e,r,n,o,i){let s=Ju(e,n,o),a=FD(s);if(a)return a;if(o!==Yu){let f=zD(Ju(e,n,Yu),s);if(f)return f}let c=`chat-${e}-${YX().slice(0,8)}`,l={current:null},u=typeof t.sendNotification=="function"?t.sendNotification.bind(t):void 0,p=new wr({onNotification:(f,g,h)=>{let y=l.current;if(!y)return;let w=h;if(g==="turn.delta"){let v=typeof w?.text=="string"?w.text:"";if(!v)return;y.deltas.push(v),y.turnId&&u&&(u("agents.prompt.delta",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,text:v}),y.streamedAny=!0);return}if(g==="turn.thought_delta"){let v=typeof w?.text=="string"?w.text:"";v&&y.turnId&&u&&u("agents.prompt.delta",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,text:v,reasoning:!0});return}if(g==="turn.plan"){y.turnId&&u&&u("agents.prompt.plan",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,steps:Array.isArray(w?.steps)?w.steps:[]});return}if(!y.turnId||!u)return;let S=typeof w?.callId=="string"?w.callId:String(w?.callId??"");g==="turn.tool_call"?u("agents.prompt.tool",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,event:{kind:"call",callId:S,name:typeof w?.toolName=="string"?w.toolName:typeof w?.name=="string"?w.name:"tool",arguments:XX(w)}}):g==="turn.tool_result"&&u("agents.prompt.tool",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,event:{kind:"result",callId:S,name:typeof w?.toolName=="string"?w.toolName:"tool",ok:w?.status!=="failed"&&w?.status!=="error",outputPreview:QX(w)}})},onMcpToolCall:async(f,g,h)=>typeof t.handleMcpToolCall=="function"?t.handleMcpToolCall(f,g,h):{ok:!1,error:"MCP tool call unavailable"},onPermissionRequest:(f,g)=>WD(g,{agentId:e,turnContext:()=>l.current,sendNotification:u}),log:{info:f=>t.log?.(`[agents.prompt] ${f}`),warn:f=>t.log?.(`[agents.prompt] WARN: ${f}`),debug:f=>t.log?.(`[agents.prompt] ${f}`)},sessionDir:Xu.join(de(),"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 HD(s,m),m}async function d$(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 l$(this,r,o,i,Yu),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 u$(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,u=typeof e.requestId=="string"?e.requestId:void 0,p=typeof e.projectId=="string"?e.projectId:void 0,m=Ju(r,s,c),f=await l$(this,r,i,s,c,typeof e.systemPrompt=="string"?e.systemPrompt:void 0),g={sessionId:c,turnId:l,requestId:u,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(S){throw bc(m),S}finally{f.holder.current=null}let y=g.deltas.join("")||(typeof h?.content=="string"?h.content:""),w=f.manager.getUsageTracker(f.memberId)?.getUsage();if(c){No(c,{role:"user",content:n},s,l),y&&No(c,{role:"assistant",content:y},s,l);let S=Ot(c,s);vt(c,{type:"personal",...p?{projectId:p}:{},...S?.title?{}:{title:n.trim().slice(0,40)||"\u5916\u90E8 Agent \u4F1A\u8BDD"},...S?.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:w?{inputTokens:w.inputTokens,outputTokens:w.outputTokens,totalTokens:w.totalTokens,cacheRead:w.cachedReadTokens,thoughtTokens:w.thoughtTokens,cost:w.cost}:void 0})}catch(e){if(t.id!==void 0){let r=e.authMethods;this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e),...Array.isArray(r)&&r.length>0?{data:{authMethods:r}}:{}})}}}te();import*as Cs from"node:fs/promises";import*as vN from"node:path";Ul();var e9=/^[a-z0-9][a-z0-9_.:-]{0,79}$/i,t9=new Set(["journeyDay","count"]),r9=new Set(["blocked"]),n9=new Set(["R0","R1","R2","R3"]),o9=new Set(["aix","android","darwin","freebsd","ios","linux","openbsd","sunos","win32"]),i9={"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 Qu(t,e){if(!e||typeof e!="object"||Array.isArray(e))return;let r=i9[t],n={};for(let[o,i]of Object.entries(e)){if(!r.has(o))continue;let s=s9(o,i);s!==void 0&&(n[o]=s)}return Object.keys(n).length>0?n:void 0}function s9(t,e){if(t9.has(t))return typeof e=="number"&&Number.isInteger(e)&&e>=0&&e<=1e5?e:void 0;if(r9.has(t))return typeof e=="boolean"?e:void 0;if(t==="riskTier")return typeof e=="string"&&n9.has(e)?e:void 0;if(t==="platform")return typeof e=="string"&&o9.has(e)?e:void 0;if(typeof e!="string")return;let r=e.trim();return e9.test(r)?r:void 0}var a9=new Set(["withdrawn","version-available","deprecated","version-yanked","frozen"]);function c9(t){let e=f9(t.baseUrl),r=g9(t.fetchFn??fetch,t.clientVersion),n=t.token.trim();return{async getConsent(){return m$(r,e,n,"GET")},async setConsent(o){return m$(r,e,n,"PUT",o)},async matchRegistry(o){let i=o.intent.trim();if(!i)throw new Error("intent is required.");let s=y9(o.topK),a=await Me(r,Ae(t.baseUrl,"/api/v15/registry/match"),n,"POST",{intent:i,topK:s,prefer:o.preferOfficial===!1?"relevance":"official",canonicalOnly:!0});return(Ie(a)&&Array.isArray(a.matches)?a.matches:[]).map(v9).filter(l=>!!l).slice(0,s)},async publishSkill(o){return JS(r,t.baseUrl,n,"skill",o)},async publishPet(o){return JS(r,t.baseUrl,n,"pet",o)},async publishWorkflow(o){return JS(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 Me(r,Ae(t.baseUrl,`/api/v15/registry/resources/${i}/signal`),n,"POST",{event:o.event,attribution:o.attribution?.trim()||void 0,metadata:o.metadata});if(Ie(s)&&s.accepted===!0)return{accepted:!0};throw new Error("Community hub returned an invalid signal response.")},async recordTelemetry(o){let i=Qu(o.event,o.metadata),s=await Me(r,Ae(t.baseUrl,"/api/v15/registry/telemetry"),n,"POST",{event:o.event,metadata:i});if(Ie(s)&&s.accepted===!0)return{accepted:!0};throw new Error("Community hub returned an invalid telemetry response.")},async listSharedResources(){let o=await Me(r,Ae(t.baseUrl,"/api/v15/registry/mine"),n,"GET");return(Ie(o)&&Array.isArray(o.resources)?o.resources:[]).map(ep).filter(s=>!!s)},async withdrawSharedResource(o,i){let s=encodeURIComponent(o.trim());if(!s)throw new Error("resourceId is required.");let a=await Me(r,Ae(t.baseUrl,`/api/v15/registry/resources/${s}/withdraw`),n,"POST",{reason:i?.trim()||void 0}),c=ep(a);if(!c)throw new Error("Community hub returned an invalid resource.");return c},async withdrawSharedResources(o){let i=await Me(r,Ae(t.baseUrl,"/api/v15/registry/community-consent/withdraw-shared"),n,"POST",{reason:o?.trim()||void 0});return(Ie(i)&&Array.isArray(i.resources)?i.resources:[]).map(ep).filter(a=>!!a)},async listNotices(o={}){let i=o.includeRead?"?includeRead=true":"",s=await Me(r,Ae(t.baseUrl,`/api/v15/registry/notices${i}`),n,"GET");return(Ie(s)&&Array.isArray(s.notices)?s.notices:[]).map(f$).filter(c=>!!c)},async markNoticeRead(o){if(!Number.isSafeInteger(o)||o<1)throw new Error("noticeId is required.");let i=await Me(r,Ae(t.baseUrl,`/api/v15/registry/notices/${o}/read`),n,"POST"),s=f$(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 Me(r,Ae(t.baseUrl,`/api/v15/registry/resources/${s}/install${c}`),n,"GET"),u=y$(l);if(!u)throw new Error("Community hub returned an invalid install resolution.");return u},async listResourceVersions(o){let i=encodeURIComponent(o.trim());if(!i)throw new Error("resourceId is required.");let s=await Me(r,Ae(t.baseUrl,`/api/v15/registry/resources/${i}/versions`),n,"GET");return(Ie(s)&&Array.isArray(s.versions)?s.versions:[]).map(d9).filter(c=>!!c)},async rateResource(o,i){let s=encodeURIComponent(o.trim());if(!s)throw new Error("resourceId is required.");let a=await Me(r,Ae(t.baseUrl,`/api/v15/registry/resources/${s}/rate`),n,"POST",{stars:i});return p$(a)},async getRatingSummary(o){let i=encodeURIComponent(o.trim());if(!i)throw new Error("resourceId is required.");let s=await Me(r,Ae(t.baseUrl,`/api/v15/registry/resources/${i}/rating`),n,"GET");return p$(s)},async reportResource(o,i){let s=encodeURIComponent(o.trim());if(!s)throw new Error("resourceId is required.");await Me(r,Ae(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 Me(r,Ae(t.baseUrl,`/api/v15/registry/resources/${i}/comments`),n,"GET");return(Ie(s)&&Array.isArray(s.comments)?s.comments:[]).map(l9).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 Me(r,Ae(t.baseUrl,`/api/v15/registry/resources/${s}/comments`),n,"POST",{body:a}),l=Ie(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 Me(r,Ae(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(!(Ie(i)&&i.accepted===!0))throw new Error("Community hub returned an invalid activity response.")},async recordCommunityReview(o){let i=await Me(r,Ae(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(!(Ie(i)&&i.accepted===!0))throw new Error("Community hub returned an invalid review response.")},async recordCommunityAsk(o){let i=await Me(r,Ae(t.baseUrl,"/api/v15/community/asks"),n,"POST",{id:o.id,askerPetId:o.askerPetId,question:o.question,contextCategory:o.contextCategory,ts:o.ts});if(!(Ie(i)&&i.accepted===!0))throw new Error("Community hub returned an invalid ask response.")},async recordCommunityAnswer(o){let i=await Me(r,Ae(t.baseUrl,"/api/v15/community/answers"),n,"POST",{id:o.id,askId:o.askId,answererPetId:o.answererPetId,answer:o.answer,ts:o.ts});if(!(Ie(i)&&i.accepted===!0))throw new Error("Community hub returned an invalid answer response.")},async recordCommunityInteraction(o){let i=await Me(r,Ae(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(!(Ie(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 Me(r,Ae(t.baseUrl,`/api/v15/runtime/${s}/resolve?platform=${a}`),n,"GET"),l=u9(c);if(!l)throw new Error("Community hub returned an invalid runtime resolution.");return l}}}async function JS(t,e,r,n,o){let i=ep(await Me(t,Ae(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=b9(await h9(t,Ae(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 p$(t){return Ie(t)?{average:typeof t.average=="number"?t.average:0,count:typeof t.count=="number"?t.count:0}:{average:0,count:0}}function l9(t){return!Ie(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 d9(t){return!Ie(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 u9(t){if(!Ie(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 zt(t=Vn()){let e=t.get("QLOGIC_LLMROUTER_ACCESS_TOKEN")?.trim();if(!e)return null;let r=p9(t);return c9({baseUrl:m9(t),token:e,clientVersion:r})}function p9(t){let e=t.get("QLOGIC_AGENT_VERSION")?.trim();return e||"2.13.9"}function m9(t){return t.get("QLOGIC_HUB_BASE_URL")?.trim()||t.get("XIAOZHICLAW_HUB_URL")?.trim()||"https://xiaozhi.qlogicagent.com"}function f9(t){return Ae(t,"/api/v15/registry/community-consent")}function Ae(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 g9(t,e){let r=e?.trim();return r?(n,o)=>t(n,{...o,headers:{...o?.headers,"x-client-version":r}}):t}async function m$(t,e,r,n,o){return Or(await Me(t,e,r,n,o),!0)}async function Me(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 h9(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 Or(t,e){let r=Ie(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 Ie(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}function ep(t){return!Ie(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 y9(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 v9(t){if(!Ie(t)||t.canonical!==!0&&t.isCanonical!==!0)return null;let e=g$(t.sourceTier),r=h$(t.trustStage),n=tp(t.resourceRiskTier),o=tp(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:YS(t.title,80),summary:YS(typeof t.summary=="string"?t.summary:"",160),capabilityTags:i.filter(s=>typeof s=="string"&&s.trim().length>0).slice(0,6).map(s=>YS(s,32)),sourceTier:e,trustStage:r,resourceRiskTier:n,effectiveRiskTier:o,latestVersion:typeof t.latestVersion=="string"?t.latestVersion:null,canonical:!0}}function YS(t,e){let r=t.replace(/\s+/g," ").trim();return r.length<=e?r:`${r.slice(0,Math.max(0,e-1))}\u2026`}function b9(t){return!Ie(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 f$(t){return!Ie(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:a9.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 k9=new Set(["R0","R1","R2","R3"]),w9=new Set(["official","community"]),S9=new Set(["quarantine","trial","trusted"]),R9=new Set(["pending","approved","rejected"]);function tp(t){return typeof t=="string"&&k9.has(t)?t:null}function g$(t){return typeof t=="string"&&w9.has(t)?t:null}function h$(t){return typeof t=="string"&&S9.has(t)?t:null}function x9(t){return typeof t=="string"&&R9.has(t)?t:null}function y$(t){if(!Ie(t))return null;let e=g$(t.sourceTier),r=h$(t.trustStage),n=x9(t.reviewStatus),o=tp(t.resourceRiskTier),i=tp(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(y$);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 T9=/(?:[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}|[A-Za-z]:\\|\/Users\/|\/home\/|secret|token|password|\+?\d[\d\s().-]{7,}\d)/i,P9=/\b(?:agent|tool|shell|execute|permission|memory|system prompt|developer message)\b/i;function A9(t){return I9(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 v$(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=A9(e);return t.publishPet({id:e.id,title:e.name,summary:e.summary,visibility:e.visibility??"public",tags:e.tags??[],manifest:n.manifest})}function I9(t){let e=[t.id,t.name,t.summary,t.persona,...t.traits??[],...t.tags??[]].join(`
654
+ `)),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 c$(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 l$(t,e,r,n,o,i){let s=Ju(e,n,o),a=FD(s);if(a)return a;if(o!==Yu){let f=zD(Ju(e,n,Yu),s);if(f)return f}let c=`chat-${e}-${YX().slice(0,8)}`,l={current:null},u=typeof t.sendNotification=="function"?t.sendNotification.bind(t):void 0,p=new wr({onNotification:(f,g,h)=>{let y=l.current;if(!y)return;let w=h;if(g==="turn.delta"){let v=typeof w?.text=="string"?w.text:"";if(!v)return;y.deltas.push(v),y.turnId&&u&&(u("agents.prompt.delta",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,text:v}),y.streamedAny=!0);return}if(g==="turn.thought_delta"){let v=typeof w?.text=="string"?w.text:"";v&&y.turnId&&u&&u("agents.prompt.delta",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,text:v,reasoning:!0});return}if(g==="turn.plan"){y.turnId&&u&&u("agents.prompt.plan",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,steps:Array.isArray(w?.steps)?w.steps:[]});return}if(!y.turnId||!u)return;let S=typeof w?.callId=="string"?w.callId:String(w?.callId??"");g==="turn.tool_call"?u("agents.prompt.tool",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,event:{kind:"call",callId:S,name:typeof w?.toolName=="string"?w.toolName:typeof w?.name=="string"?w.name:"tool",arguments:XX(w)}}):g==="turn.tool_result"&&u("agents.prompt.tool",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,event:{kind:"result",callId:S,name:typeof w?.toolName=="string"?w.toolName:"tool",ok:w?.status!=="failed"&&w?.status!=="error",outputPreview:QX(w)}})},onMcpToolCall:async(f,g,h)=>typeof t.handleMcpToolCall=="function"?t.handleMcpToolCall(f,g,h):{ok:!1,error:"MCP tool call unavailable"},onPermissionRequest:(f,g)=>WD(g,{agentId:e,turnContext:()=>l.current,sendNotification:u}),log:{info:f=>t.log?.(`[agents.prompt] ${f}`),warn:f=>t.log?.(`[agents.prompt] WARN: ${f}`),debug:f=>t.log?.(`[agents.prompt] ${f}`)},sessionDir:Xu.join(de(),"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 HD(s,m),m}async function d$(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 l$(this,r,o,i,Yu),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 u$(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,u=typeof e.requestId=="string"?e.requestId:void 0,p=typeof e.projectId=="string"?e.projectId:void 0,m=Ju(r,s,c),f=await l$(this,r,i,s,c,typeof e.systemPrompt=="string"?e.systemPrompt:void 0),g={sessionId:c,turnId:l,requestId:u,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(S){throw bc(m),S}finally{f.holder.current=null}let y=g.deltas.join("")||(typeof h?.content=="string"?h.content:""),w=f.manager.getUsageTracker(f.memberId)?.getUsage();if(c){No(c,{role:"user",content:n},s,l),y&&No(c,{role:"assistant",content:y},s,l);let S=Ot(c,s);vt(c,{type:"personal",...p?{projectId:p}:{},...S?.title?{}:{title:n.trim().slice(0,40)||"\u5916\u90E8 Agent \u4F1A\u8BDD"},...S?.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:w?{inputTokens:w.inputTokens,outputTokens:w.outputTokens,totalTokens:w.totalTokens,cacheRead:w.cachedReadTokens,thoughtTokens:w.thoughtTokens,cost:w.cost}:void 0})}catch(e){if(t.id!==void 0){let r=e.authMethods;this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e),...Array.isArray(r)&&r.length>0?{data:{authMethods:r}}:{}})}}}te();import*as Cs from"node:fs/promises";import*as vN from"node:path";Ul();var e9=/^[a-z0-9][a-z0-9_.:-]{0,79}$/i,t9=new Set(["journeyDay","count"]),r9=new Set(["blocked"]),n9=new Set(["R0","R1","R2","R3"]),o9=new Set(["aix","android","darwin","freebsd","ios","linux","openbsd","sunos","win32"]),i9={"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 Qu(t,e){if(!e||typeof e!="object"||Array.isArray(e))return;let r=i9[t],n={};for(let[o,i]of Object.entries(e)){if(!r.has(o))continue;let s=s9(o,i);s!==void 0&&(n[o]=s)}return Object.keys(n).length>0?n:void 0}function s9(t,e){if(t9.has(t))return typeof e=="number"&&Number.isInteger(e)&&e>=0&&e<=1e5?e:void 0;if(r9.has(t))return typeof e=="boolean"?e:void 0;if(t==="riskTier")return typeof e=="string"&&n9.has(e)?e:void 0;if(t==="platform")return typeof e=="string"&&o9.has(e)?e:void 0;if(typeof e!="string")return;let r=e.trim();return e9.test(r)?r:void 0}var a9=new Set(["withdrawn","version-available","deprecated","version-yanked","frozen"]);function c9(t){let e=f9(t.baseUrl),r=g9(t.fetchFn??fetch,t.clientVersion),n=t.token.trim();return{async getConsent(){return m$(r,e,n,"GET")},async setConsent(o){return m$(r,e,n,"PUT",o)},async matchRegistry(o){let i=o.intent.trim();if(!i)throw new Error("intent is required.");let s=y9(o.topK),a=await Me(r,Ae(t.baseUrl,"/api/v15/registry/match"),n,"POST",{intent:i,topK:s,prefer:o.preferOfficial===!1?"relevance":"official",canonicalOnly:!0});return(Ie(a)&&Array.isArray(a.matches)?a.matches:[]).map(v9).filter(l=>!!l).slice(0,s)},async publishSkill(o){return JS(r,t.baseUrl,n,"skill",o)},async publishPet(o){return JS(r,t.baseUrl,n,"pet",o)},async publishWorkflow(o){return JS(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 Me(r,Ae(t.baseUrl,`/api/v15/registry/resources/${i}/signal`),n,"POST",{event:o.event,attribution:o.attribution?.trim()||void 0,metadata:o.metadata});if(Ie(s)&&s.accepted===!0)return{accepted:!0};throw new Error("Community hub returned an invalid signal response.")},async recordTelemetry(o){let i=Qu(o.event,o.metadata),s=await Me(r,Ae(t.baseUrl,"/api/v15/registry/telemetry"),n,"POST",{event:o.event,metadata:i});if(Ie(s)&&s.accepted===!0)return{accepted:!0};throw new Error("Community hub returned an invalid telemetry response.")},async listSharedResources(){let o=await Me(r,Ae(t.baseUrl,"/api/v15/registry/mine"),n,"GET");return(Ie(o)&&Array.isArray(o.resources)?o.resources:[]).map(ep).filter(s=>!!s)},async withdrawSharedResource(o,i){let s=encodeURIComponent(o.trim());if(!s)throw new Error("resourceId is required.");let a=await Me(r,Ae(t.baseUrl,`/api/v15/registry/resources/${s}/withdraw`),n,"POST",{reason:i?.trim()||void 0}),c=ep(a);if(!c)throw new Error("Community hub returned an invalid resource.");return c},async withdrawSharedResources(o){let i=await Me(r,Ae(t.baseUrl,"/api/v15/registry/community-consent/withdraw-shared"),n,"POST",{reason:o?.trim()||void 0});return(Ie(i)&&Array.isArray(i.resources)?i.resources:[]).map(ep).filter(a=>!!a)},async listNotices(o={}){let i=o.includeRead?"?includeRead=true":"",s=await Me(r,Ae(t.baseUrl,`/api/v15/registry/notices${i}`),n,"GET");return(Ie(s)&&Array.isArray(s.notices)?s.notices:[]).map(f$).filter(c=>!!c)},async markNoticeRead(o){if(!Number.isSafeInteger(o)||o<1)throw new Error("noticeId is required.");let i=await Me(r,Ae(t.baseUrl,`/api/v15/registry/notices/${o}/read`),n,"POST"),s=f$(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 Me(r,Ae(t.baseUrl,`/api/v15/registry/resources/${s}/install${c}`),n,"GET"),u=y$(l);if(!u)throw new Error("Community hub returned an invalid install resolution.");return u},async listResourceVersions(o){let i=encodeURIComponent(o.trim());if(!i)throw new Error("resourceId is required.");let s=await Me(r,Ae(t.baseUrl,`/api/v15/registry/resources/${i}/versions`),n,"GET");return(Ie(s)&&Array.isArray(s.versions)?s.versions:[]).map(d9).filter(c=>!!c)},async rateResource(o,i){let s=encodeURIComponent(o.trim());if(!s)throw new Error("resourceId is required.");let a=await Me(r,Ae(t.baseUrl,`/api/v15/registry/resources/${s}/rate`),n,"POST",{stars:i});return p$(a)},async getRatingSummary(o){let i=encodeURIComponent(o.trim());if(!i)throw new Error("resourceId is required.");let s=await Me(r,Ae(t.baseUrl,`/api/v15/registry/resources/${i}/rating`),n,"GET");return p$(s)},async reportResource(o,i){let s=encodeURIComponent(o.trim());if(!s)throw new Error("resourceId is required.");await Me(r,Ae(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 Me(r,Ae(t.baseUrl,`/api/v15/registry/resources/${i}/comments`),n,"GET");return(Ie(s)&&Array.isArray(s.comments)?s.comments:[]).map(l9).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 Me(r,Ae(t.baseUrl,`/api/v15/registry/resources/${s}/comments`),n,"POST",{body:a}),l=Ie(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 Me(r,Ae(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(!(Ie(i)&&i.accepted===!0))throw new Error("Community hub returned an invalid activity response.")},async recordCommunityReview(o){let i=await Me(r,Ae(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(!(Ie(i)&&i.accepted===!0))throw new Error("Community hub returned an invalid review response.")},async recordCommunityAsk(o){let i=await Me(r,Ae(t.baseUrl,"/api/v15/community/asks"),n,"POST",{id:o.id,askerPetId:o.askerPetId,question:o.question,contextCategory:o.contextCategory,ts:o.ts});if(!(Ie(i)&&i.accepted===!0))throw new Error("Community hub returned an invalid ask response.")},async recordCommunityAnswer(o){let i=await Me(r,Ae(t.baseUrl,"/api/v15/community/answers"),n,"POST",{id:o.id,askId:o.askId,answererPetId:o.answererPetId,answer:o.answer,ts:o.ts});if(!(Ie(i)&&i.accepted===!0))throw new Error("Community hub returned an invalid answer response.")},async recordCommunityInteraction(o){let i=await Me(r,Ae(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(!(Ie(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 Me(r,Ae(t.baseUrl,`/api/v15/runtime/${s}/resolve?platform=${a}`),n,"GET"),l=u9(c);if(!l)throw new Error("Community hub returned an invalid runtime resolution.");return l}}}async function JS(t,e,r,n,o){let i=ep(await Me(t,Ae(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=b9(await h9(t,Ae(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 p$(t){return Ie(t)?{average:typeof t.average=="number"?t.average:0,count:typeof t.count=="number"?t.count:0}:{average:0,count:0}}function l9(t){return!Ie(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 d9(t){return!Ie(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 u9(t){if(!Ie(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 zt(t=Vn()){let e=t.get("QLOGIC_LLMROUTER_ACCESS_TOKEN")?.trim();if(!e)return null;let r=p9(t);return c9({baseUrl:m9(t),token:e,clientVersion:r})}function p9(t){let e=t.get("QLOGIC_AGENT_VERSION")?.trim();return e||"2.13.10"}function m9(t){return t.get("QLOGIC_HUB_BASE_URL")?.trim()||t.get("XIAOZHICLAW_HUB_URL")?.trim()||"https://xiaozhi.qlogicagent.com"}function f9(t){return Ae(t,"/api/v15/registry/community-consent")}function Ae(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 g9(t,e){let r=e?.trim();return r?(n,o)=>t(n,{...o,headers:{...o?.headers,"x-client-version":r}}):t}async function m$(t,e,r,n,o){return Or(await Me(t,e,r,n,o),!0)}async function Me(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 h9(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 Or(t,e){let r=Ie(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 Ie(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}function ep(t){return!Ie(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 y9(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 v9(t){if(!Ie(t)||t.canonical!==!0&&t.isCanonical!==!0)return null;let e=g$(t.sourceTier),r=h$(t.trustStage),n=tp(t.resourceRiskTier),o=tp(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:YS(t.title,80),summary:YS(typeof t.summary=="string"?t.summary:"",160),capabilityTags:i.filter(s=>typeof s=="string"&&s.trim().length>0).slice(0,6).map(s=>YS(s,32)),sourceTier:e,trustStage:r,resourceRiskTier:n,effectiveRiskTier:o,latestVersion:typeof t.latestVersion=="string"?t.latestVersion:null,canonical:!0}}function YS(t,e){let r=t.replace(/\s+/g," ").trim();return r.length<=e?r:`${r.slice(0,Math.max(0,e-1))}\u2026`}function b9(t){return!Ie(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 f$(t){return!Ie(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:a9.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 k9=new Set(["R0","R1","R2","R3"]),w9=new Set(["official","community"]),S9=new Set(["quarantine","trial","trusted"]),R9=new Set(["pending","approved","rejected"]);function tp(t){return typeof t=="string"&&k9.has(t)?t:null}function g$(t){return typeof t=="string"&&w9.has(t)?t:null}function h$(t){return typeof t=="string"&&S9.has(t)?t:null}function x9(t){return typeof t=="string"&&R9.has(t)?t:null}function y$(t){if(!Ie(t))return null;let e=g$(t.sourceTier),r=h$(t.trustStage),n=x9(t.reviewStatus),o=tp(t.resourceRiskTier),i=tp(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(y$);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 T9=/(?:[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}|[A-Za-z]:\\|\/Users\/|\/home\/|secret|token|password|\+?\d[\d\s().-]{7,}\d)/i,P9=/\b(?:agent|tool|shell|execute|permission|memory|system prompt|developer message)\b/i;function A9(t){return I9(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 v$(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=A9(e);return t.publishPet({id:e.id,title:e.name,summary:e.summary,visibility:e.visibility??"public",tags:e.tags??[],manifest:n.manifest})}function I9(t){let e=[t.id,t.name,t.summary,t.persona,...t.traits??[],...t.tags??[]].join(`
655
655
  `);if(T9.test(e))throw new Error("Pet asset publish blocked: private email, path, secret, token, or phone-like text detected.");if(P9.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 XS={enabled:!0},C9=new Set(["R2","R3"]);function b$(t,e=XS){return C9.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"}}import{createPublicKey as _9,verify as E9}from"node:crypto";function M9(t){return`id=${t.id}
656
656
  version=${t.version}
657
657
  checksum=${t.checksum}
package/dist/index.js CHANGED
@@ -650,7 +650,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
650
650
  `;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()},u=e.external,p=[...u.acpArgs];a&&(r.QLOGICAGENT_PARENT_RPC=a);let m=GS(u.cliPath,p,{cwd:e.cwd,env:r,stdio:["pipe","pipe","pipe"],detached:!1});l.pid=m.pid??-1;let f=new Map,g=new po,h=new uc,y=FS({cwd:e.cwd,requestPermission:this.callbacks.onPermissionRequest?v=>this.callbacks.onPermissionRequest(e.memberId,v):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,(v,k)=>{v==="usage_update"&&h.onUsageUpdate(k);let R=po.translateNotification(v,k);R?(this.captureChildProgress(e.memberId,R.method,R.params),this.callbacks.onNotification?.(e.memberId,R.method,R.params)):(this.captureChildProgress(e.memberId,v,k),this.callbacks.onNotification?.(e.memberId,v,k))},y),m.stderr&&Gu({input:m.stderr,crlfDelay:Number.POSITIVE_INFINITY}).on("line",k=>{this.callbacks.log?.debug?.(`[${new Date().toISOString()}] [debug] [agent:${e.memberId}] [stderr] ${k}`),c?.write(`${new Date().toISOString()} ${k}
651
651
  `)}),m.on("exit",(v,k)=>{g.detach(),y.disposeAll();let R=l.state;if(R!=="killed"&&R!=="completed"&&v!==0){let I=this.processes.get(e.memberId)?.runtimeRestartCount??n;if(I<Rs){let D=DD*2**I;this.slog("warn",e.memberId,"crash",`crashed again (code=${v}), restart ${I+1}/${Rs}`),this.callbacks.onNotification?.(e.memberId,"agents.error",{agentId:e.memberId,phase:"runtime",error:`Process crashed (code=${v}), restarting`,retriesLeft:Rs-I-1}),setTimeout(()=>{this.attemptRuntimeRestart(e,r,I+1).catch(B=>{this.slog("warn",e.memberId,"restart",`failed: ${B instanceof Error?B.message:String(B)}`)})},D);return}}R!=="killed"&&(l.state=v===0?"completed":"failed"),l.endedAt=Date.now(),v!==0&&!l.error&&(l.error=`ACP process exited with code ${v} (signal: ${k})`),this.callbacks.onStateChange?.(e.memberId,l.state),this.callbacks.onExit?.(e.memberId,v,k)}),m.on("error",v=>{g.detach(),y.disposeAll(),l.state="failed",l.error=v.message,l.endedAt=Date.now(),this.callbacks.onStateChange?.(e.memberId,"failed")}),this.callbacks.onStateChange?.(e.memberId,"starting");let w=await g.initialize(m);l.state="ready",l.supportsResume=w.agentCapabilities.loadSession===!0,this.callbacks.onStateChange?.(e.memberId,"ready"),this.slog("info",e.memberId,"restart",`ACP restarted (attempt=${n}, protocol=${w.protocolVersion}, loadSession=${l.supportsResume}, pid=${l.pid})`);let S=[...e.mcpServers??[]];a&&S.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 v=await g.resumeSession(m,l.sessionId,{cwd:e.cwd,mcpServers:S.length>0?S:void 0});l.sessionId=v.sessionId,this.slog("info",e.memberId,"session",`session resumed (id=${l.sessionId})`)}else{let v={cwd:e.cwd};S.length>0&&(v.mcpServers=S),e.systemPrompt&&(v.systemPrompt=e.systemPrompt);let k=await g.createSession(m,v);l.sessionId=k.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,v=>{this.slog("warn",v,"heartbeat","hang detected \u2014 force-killing"),this.callbacks.onNotification?.(v,"agents.error",{agentId:v,phase:"heartbeat",error:`Agent ${e.name} stopped responding`,retriesLeft:0}),this.kill(v)})}catch(l){let u=this.processes.get(e.memberId);u&&(u.handle.state="failed",u.handle.error=`Runtime restart failed: ${l instanceof Error?l.message:String(l)}`,u.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 $D}from"node:child_process";var jD=/[|&;><$`(){}]/;function IX(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=jD.test(i);if(!(s&&r)&&!(i.startsWith("brew ")&&!n))return{command:i,shell:s}}return null}function CX(t,e){if(e!=="cn")return t;let r=t.trim();return/^npm\b/.test(r)&&!/(?:^|\s)--registry(?:\s|=)/.test(r)?`${r} --registry ${WS}`:/^uv\b/.test(r)&&!/(?:^|\s)--(?:default-)?index(?:-url)?(?:\s|=)/.test(r)?`${r} --default-index ${Ss}`:/^(?:pipx|pip3?|python -m pip)\b/.test(r)&&!/(?:^|\s)--index-url(?:\s|=)/.test(r)?`${r} --index-url ${Ss}`:r}function ND(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 _X=(t,e)=>{if(e)return $D(t,{shell:!0,stdio:["ignore","pipe","pipe"]});let r=t.split(/\s+/).filter(Boolean);return $D(r[0],r.slice(1),{stdio:["ignore","pipe","pipe"]})};async function OD(t,e,r={}){let n=r.platform??process.platform,o=r.spawnImpl??_X,i=IX(t,n);if(!i){let u=`No install command available for ${n}`;return e({type:"state",state:"failed"}),e({type:"done",ok:!1,error:u}),{ok:!1,error:u}}let s=CX(i.command,r.mirror);e({type:"state",state:"installing"});let a=await ND(s,i.shell,o,e);if(a!==0){let u=`Install command exited with code ${a}`;return e({type:"state",state:"failed"}),e({type:"done",ok:!1,error:u}),{ok:!1,error:u}}let c=t.verifyCmd??`${t.cliCommand} --version`;if(e({type:"state",state:"verifying"}),await ND(c,jD.test(c),o,e)!==0){let u=`Installed but verification failed (${t.cliCommand})`;return e({type:"state",state:"failed"}),e({type:"done",ok:!1,error:u}),{ok:!1,error:u}}return e({type:"state",state:"installed"}),e({type:"done",ok:!0}),{ok:!0}}var kt=new Map,EX=10*6e4,MX=6e4,DX=6,Vu=null;function Zu(t,e,r){return`${t}\0${e}\0${r??"default"}`}function hc(t){try{t.manager.kill(t.memberId)}catch{}try{t.manager.dispose()}catch{}}function LD(t){let e=kt.get(t);if(e){if(!e.manager.isAlive(e.memberId)){kt.delete(t),hc(e);return}return e}}function UD(t,e){let r=kt.get(t);r&&r!==e&&(kt.delete(t),hc(r)),kt.set(t,e),$X(),jX()}function FD(t,e){let r=kt.get(t);if(!r)return;if(!r.manager.isAlive(r.memberId)){kt.delete(t),hc(r);return}kt.delete(t);let n=kt.get(e);return n&&n!==r&&(kt.delete(e),hc(n)),kt.set(e,r),r.lastUsed=Date.now(),r}var Ju="__warm__";function Yu(t){let e=kt.get(t);e&&(kt.delete(t),hc(e))}function $X(){for(;kt.size>DX;){let t=null,e=Number.POSITIVE_INFINITY;for(let[r,n]of kt)n.holder.current||n.lastUsed<e&&(e=n.lastUsed,t=r);if(!t)break;Yu(t)}}function NX(t){for(let[e,r]of[...kt.entries()])r.holder.current||t-r.lastUsed>EX&&Yu(e)}function jX(){Vu||(Vu=setInterval(()=>NX(Date.now()),MX),typeof Vu.unref=="function"&&Vu.unref())}import{randomUUID as OX}from"node:crypto";var xs=new Map;function LX(t,e){let r=xs.get(t);return r&&(clearTimeout(r.timer),r.resolve(null),xs.delete(t)),new Promise(n=>{let o=setTimeout(()=>{xs.delete(t),n(null)},e);typeof o.unref=="function"&&o.unref(),xs.set(t,{resolve:n,timer:o})})}function HD(t,e){let r=xs.get(t);return r?(clearTimeout(r.timer),xs.delete(t),r.resolve(e),!0):!1}function UX(t){if(t==null)return"";if(typeof t=="string")return t;try{return JSON.stringify(t)}catch{return""}}async function zD(t,e){let r=e.turnContext(),n=t.toolCall&&typeof t.toolCall=="object"?t.toolCall:{},o=typeof t.permissionId=="string"&&t.permissionId?t.permissionId:OX(),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:UX(n.rawInput),message:typeof t.message=="string"?t.message:void 0,category:typeof t.category=="string"?t.category:"destructive",options:i});let a=await LX(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 HX(t){let e=t?.rawInput;if(e!=null){if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return}}}function zX(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}}async function qD(t){let e=t.params,r=typeof e?.approvalId=="string"?e.approvalId:"",n=typeof e?.optionId=="string"?e.optionId:"",o=r&&n?HD(r,n):!1;t.id!==void 0&&this.sendResponse(t.id,{ok:o})}async function WD(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 KD(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 GD(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=PD().map(o=>{let i=r.get(o.id),s=_D(o,i?.version);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:s.installedVersion??i?.version,latestVersion:s.latestVersion,updateAvailable:s.updateAvailable,updatePackageName:s.packageName,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 VD(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=ks(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 OD(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 ZD(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 JD(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 YD(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 XD(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 QD(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 e$(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 t$(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 r$(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 n$(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 o$(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=Xu.join(de(),"agent-logs"),n=Xu.join(r,`${e.agentId}.stderr.log`),o="";try{o=BD.readFileSync(n,"utf-8")}catch{}e.tail&&e.tail>0&&o&&(o=o.split(`
652
652
  `).slice(-e.tail).join(`
653
- `)),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 i$(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 s$(t,e,r,n,o,i){let s=Zu(e,n,o),a=LD(s);if(a)return a;if(o!==Ju){let f=FD(Zu(e,n,Ju),s);if(f)return f}let c=`chat-${e}-${FX().slice(0,8)}`,l={current:null},u=typeof t.sendNotification=="function"?t.sendNotification.bind(t):void 0,p=new kr({onNotification:(f,g,h)=>{let y=l.current;if(!y)return;let w=h;if(g==="turn.delta"){let v=typeof w?.text=="string"?w.text:"";if(!v)return;y.deltas.push(v),y.turnId&&u&&(u("agents.prompt.delta",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,text:v}),y.streamedAny=!0);return}if(g==="turn.thought_delta"){let v=typeof w?.text=="string"?w.text:"";v&&y.turnId&&u&&u("agents.prompt.delta",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,text:v,reasoning:!0});return}if(g==="turn.plan"){y.turnId&&u&&u("agents.prompt.plan",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,steps:Array.isArray(w?.steps)?w.steps:[]});return}if(!y.turnId||!u)return;let S=typeof w?.callId=="string"?w.callId:String(w?.callId??"");g==="turn.tool_call"?u("agents.prompt.tool",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,event:{kind:"call",callId:S,name:typeof w?.toolName=="string"?w.toolName:typeof w?.name=="string"?w.name:"tool",arguments:HX(w)}}):g==="turn.tool_result"&&u("agents.prompt.tool",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,event:{kind:"result",callId:S,name:typeof w?.toolName=="string"?w.toolName:"tool",ok:w?.status!=="failed"&&w?.status!=="error",outputPreview:zX(w)}})},onMcpToolCall:async(f,g,h)=>typeof t.handleMcpToolCall=="function"?t.handleMcpToolCall(f,g,h):{ok:!1,error:"MCP tool call unavailable"},onPermissionRequest:(f,g)=>zD(g,{agentId:e,turnContext:()=>l.current,sendNotification:u}),log:{info:f=>t.log?.(`[agents.prompt] ${f}`),warn:f=>t.log?.(`[agents.prompt] WARN: ${f}`),debug:f=>t.log?.(`[agents.prompt] ${f}`)},sessionDir:Xu.join(de(),"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 UD(s,m),m}async function a$(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 s$(this,r,o,i,Ju),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 c$(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,u=typeof e.requestId=="string"?e.requestId:void 0,p=typeof e.projectId=="string"?e.projectId:void 0,m=Zu(r,s,c),f=await s$(this,r,i,s,c,typeof e.systemPrompt=="string"?e.systemPrompt:void 0),g={sessionId:c,turnId:l,requestId:u,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(S){throw Yu(m),S}finally{f.holder.current=null}let y=g.deltas.join("")||(typeof h?.content=="string"?h.content:""),w=f.manager.getUsageTracker(f.memberId)?.getUsage();if(c){Uo(c,{role:"user",content:n},s,l),y&&Uo(c,{role:"assistant",content:y},s,l);let S=jt(c,s);yt(c,{type:"personal",...p?{projectId:p}:{},...S?.title?{}:{title:n.trim().slice(0,40)||"\u5916\u90E8 Agent \u4F1A\u8BDD"},...S?.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:w?{inputTokens:w.inputTokens,outputTokens:w.outputTokens,totalTokens:w.totalTokens,cacheRead:w.cachedReadTokens,thoughtTokens:w.thoughtTokens,cost:w.cost}:void 0})}catch(e){if(t.id!==void 0){let r=e.authMethods;this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e),...Array.isArray(r)&&r.length>0?{data:{authMethods:r}}:{}})}}}te();import*as Ps from"node:fs/promises";import*as gN from"node:path";Kl();var BX=/^[a-z0-9][a-z0-9_.:-]{0,79}$/i,qX=new Set(["journeyDay","count"]),WX=new Set(["blocked"]),KX=new Set(["R0","R1","R2","R3"]),GX=new Set(["aix","android","darwin","freebsd","ios","linux","openbsd","sunos","win32"]),VX={"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 Qu(t,e){if(!e||typeof e!="object"||Array.isArray(e))return;let r=VX[t],n={};for(let[o,i]of Object.entries(e)){if(!r.has(o))continue;let s=ZX(o,i);s!==void 0&&(n[o]=s)}return Object.keys(n).length>0?n:void 0}function ZX(t,e){if(qX.has(t))return typeof e=="number"&&Number.isInteger(e)&&e>=0&&e<=1e5?e:void 0;if(WX.has(t))return typeof e=="boolean"?e:void 0;if(t==="riskTier")return typeof e=="string"&&KX.has(e)?e:void 0;if(t==="platform")return typeof e=="string"&&GX.has(e)?e:void 0;if(typeof e!="string")return;let r=e.trim();return BX.test(r)?r:void 0}var JX=new Set(["withdrawn","version-available","deprecated","version-yanked","frozen"]);function YX(t){let e=n9(t.baseUrl),r=o9(t.fetchFn??fetch,t.clientVersion),n=t.token.trim();return{async getConsent(){return d$(r,e,n,"GET")},async setConsent(o){return d$(r,e,n,"PUT",o)},async matchRegistry(o){let i=o.intent.trim();if(!i)throw new Error("intent is required.");let s=s9(o.topK),a=await Me(r,Ae(t.baseUrl,"/api/v15/registry/match"),n,"POST",{intent:i,topK:s,prefer:o.preferOfficial===!1?"relevance":"official",canonicalOnly:!0});return(Ie(a)&&Array.isArray(a.matches)?a.matches:[]).map(a9).filter(l=>!!l).slice(0,s)},async publishSkill(o){return ZS(r,t.baseUrl,n,"skill",o)},async publishPet(o){return ZS(r,t.baseUrl,n,"pet",o)},async publishWorkflow(o){return ZS(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 Me(r,Ae(t.baseUrl,`/api/v15/registry/resources/${i}/signal`),n,"POST",{event:o.event,attribution:o.attribution?.trim()||void 0,metadata:o.metadata});if(Ie(s)&&s.accepted===!0)return{accepted:!0};throw new Error("Community hub returned an invalid signal response.")},async recordTelemetry(o){let i=Qu(o.event,o.metadata),s=await Me(r,Ae(t.baseUrl,"/api/v15/registry/telemetry"),n,"POST",{event:o.event,metadata:i});if(Ie(s)&&s.accepted===!0)return{accepted:!0};throw new Error("Community hub returned an invalid telemetry response.")},async listSharedResources(){let o=await Me(r,Ae(t.baseUrl,"/api/v15/registry/mine"),n,"GET");return(Ie(o)&&Array.isArray(o.resources)?o.resources:[]).map(ep).filter(s=>!!s)},async withdrawSharedResource(o,i){let s=encodeURIComponent(o.trim());if(!s)throw new Error("resourceId is required.");let a=await Me(r,Ae(t.baseUrl,`/api/v15/registry/resources/${s}/withdraw`),n,"POST",{reason:i?.trim()||void 0}),c=ep(a);if(!c)throw new Error("Community hub returned an invalid resource.");return c},async withdrawSharedResources(o){let i=await Me(r,Ae(t.baseUrl,"/api/v15/registry/community-consent/withdraw-shared"),n,"POST",{reason:o?.trim()||void 0});return(Ie(i)&&Array.isArray(i.resources)?i.resources:[]).map(ep).filter(a=>!!a)},async listNotices(o={}){let i=o.includeRead?"?includeRead=true":"",s=await Me(r,Ae(t.baseUrl,`/api/v15/registry/notices${i}`),n,"GET");return(Ie(s)&&Array.isArray(s.notices)?s.notices:[]).map(u$).filter(c=>!!c)},async markNoticeRead(o){if(!Number.isSafeInteger(o)||o<1)throw new Error("noticeId is required.");let i=await Me(r,Ae(t.baseUrl,`/api/v15/registry/notices/${o}/read`),n,"POST"),s=u$(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 Me(r,Ae(t.baseUrl,`/api/v15/registry/resources/${s}/install${c}`),n,"GET"),u=f$(l);if(!u)throw new Error("Community hub returned an invalid install resolution.");return u},async listResourceVersions(o){let i=encodeURIComponent(o.trim());if(!i)throw new Error("resourceId is required.");let s=await Me(r,Ae(t.baseUrl,`/api/v15/registry/resources/${i}/versions`),n,"GET");return(Ie(s)&&Array.isArray(s.versions)?s.versions:[]).map(QX).filter(c=>!!c)},async rateResource(o,i){let s=encodeURIComponent(o.trim());if(!s)throw new Error("resourceId is required.");let a=await Me(r,Ae(t.baseUrl,`/api/v15/registry/resources/${s}/rate`),n,"POST",{stars:i});return l$(a)},async getRatingSummary(o){let i=encodeURIComponent(o.trim());if(!i)throw new Error("resourceId is required.");let s=await Me(r,Ae(t.baseUrl,`/api/v15/registry/resources/${i}/rating`),n,"GET");return l$(s)},async reportResource(o,i){let s=encodeURIComponent(o.trim());if(!s)throw new Error("resourceId is required.");await Me(r,Ae(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 Me(r,Ae(t.baseUrl,`/api/v15/registry/resources/${i}/comments`),n,"GET");return(Ie(s)&&Array.isArray(s.comments)?s.comments:[]).map(XX).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 Me(r,Ae(t.baseUrl,`/api/v15/registry/resources/${s}/comments`),n,"POST",{body:a}),l=Ie(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 Me(r,Ae(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(!(Ie(i)&&i.accepted===!0))throw new Error("Community hub returned an invalid activity response.")},async recordCommunityReview(o){let i=await Me(r,Ae(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(!(Ie(i)&&i.accepted===!0))throw new Error("Community hub returned an invalid review response.")},async recordCommunityAsk(o){let i=await Me(r,Ae(t.baseUrl,"/api/v15/community/asks"),n,"POST",{id:o.id,askerPetId:o.askerPetId,question:o.question,contextCategory:o.contextCategory,ts:o.ts});if(!(Ie(i)&&i.accepted===!0))throw new Error("Community hub returned an invalid ask response.")},async recordCommunityAnswer(o){let i=await Me(r,Ae(t.baseUrl,"/api/v15/community/answers"),n,"POST",{id:o.id,askId:o.askId,answererPetId:o.answererPetId,answer:o.answer,ts:o.ts});if(!(Ie(i)&&i.accepted===!0))throw new Error("Community hub returned an invalid answer response.")},async recordCommunityInteraction(o){let i=await Me(r,Ae(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(!(Ie(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 Me(r,Ae(t.baseUrl,`/api/v15/runtime/${s}/resolve?platform=${a}`),n,"GET"),l=e9(c);if(!l)throw new Error("Community hub returned an invalid runtime resolution.");return l}}}async function ZS(t,e,r,n,o){let i=ep(await Me(t,Ae(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=c9(await i9(t,Ae(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 l$(t){return Ie(t)?{average:typeof t.average=="number"?t.average:0,count:typeof t.count=="number"?t.count:0}:{average:0,count:0}}function XX(t){return!Ie(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 QX(t){return!Ie(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 e9(t){if(!Ie(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 zt(t=Vn()){let e=t.get("QLOGIC_LLMROUTER_ACCESS_TOKEN")?.trim();if(!e)return null;let r=t9(t);return YX({baseUrl:r9(t),token:e,clientVersion:r})}function t9(t){let e=t.get("QLOGIC_AGENT_VERSION")?.trim();return e||"2.13.9"}function r9(t){return t.get("QLOGIC_HUB_BASE_URL")?.trim()||t.get("XIAOZHICLAW_HUB_URL")?.trim()||"https://xiaozhi.qlogicagent.com"}function n9(t){return Ae(t,"/api/v15/registry/community-consent")}function Ae(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 o9(t,e){let r=e?.trim();return r?(n,o)=>t(n,{...o,headers:{...o?.headers,"x-client-version":r}}):t}async function d$(t,e,r,n,o){return Nr(await Me(t,e,r,n,o),!0)}async function Me(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 i9(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 Nr(t,e){let r=Ie(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 Ie(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}function ep(t){return!Ie(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 s9(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 a9(t){if(!Ie(t)||t.canonical!==!0&&t.isCanonical!==!0)return null;let e=p$(t.sourceTier),r=m$(t.trustStage),n=tp(t.resourceRiskTier),o=tp(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:JS(t.title,80),summary:JS(typeof t.summary=="string"?t.summary:"",160),capabilityTags:i.filter(s=>typeof s=="string"&&s.trim().length>0).slice(0,6).map(s=>JS(s,32)),sourceTier:e,trustStage:r,resourceRiskTier:n,effectiveRiskTier:o,latestVersion:typeof t.latestVersion=="string"?t.latestVersion:null,canonical:!0}}function JS(t,e){let r=t.replace(/\s+/g," ").trim();return r.length<=e?r:`${r.slice(0,Math.max(0,e-1))}\u2026`}function c9(t){return!Ie(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 u$(t){return!Ie(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:JX.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 l9=new Set(["R0","R1","R2","R3"]),d9=new Set(["official","community"]),u9=new Set(["quarantine","trial","trusted"]),p9=new Set(["pending","approved","rejected"]);function tp(t){return typeof t=="string"&&l9.has(t)?t:null}function p$(t){return typeof t=="string"&&d9.has(t)?t:null}function m$(t){return typeof t=="string"&&u9.has(t)?t:null}function m9(t){return typeof t=="string"&&p9.has(t)?t:null}function f$(t){if(!Ie(t))return null;let e=p$(t.sourceTier),r=m$(t.trustStage),n=m9(t.reviewStatus),o=tp(t.resourceRiskTier),i=tp(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(f$);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 f9=/(?:[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}|[A-Za-z]:\\|\/Users\/|\/home\/|secret|token|password|\+?\d[\d\s().-]{7,}\d)/i,g9=/\b(?:agent|tool|shell|execute|permission|memory|system prompt|developer message)\b/i;function h9(t){return y9(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 g$(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=h9(e);return t.publishPet({id:e.id,title:e.name,summary:e.summary,visibility:e.visibility??"public",tags:e.tags??[],manifest:n.manifest})}function y9(t){let e=[t.id,t.name,t.summary,t.persona,...t.traits??[],...t.tags??[]].join(`
653
+ `)),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 i$(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 s$(t,e,r,n,o,i){let s=Zu(e,n,o),a=LD(s);if(a)return a;if(o!==Ju){let f=FD(Zu(e,n,Ju),s);if(f)return f}let c=`chat-${e}-${FX().slice(0,8)}`,l={current:null},u=typeof t.sendNotification=="function"?t.sendNotification.bind(t):void 0,p=new kr({onNotification:(f,g,h)=>{let y=l.current;if(!y)return;let w=h;if(g==="turn.delta"){let v=typeof w?.text=="string"?w.text:"";if(!v)return;y.deltas.push(v),y.turnId&&u&&(u("agents.prompt.delta",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,text:v}),y.streamedAny=!0);return}if(g==="turn.thought_delta"){let v=typeof w?.text=="string"?w.text:"";v&&y.turnId&&u&&u("agents.prompt.delta",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,text:v,reasoning:!0});return}if(g==="turn.plan"){y.turnId&&u&&u("agents.prompt.plan",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,steps:Array.isArray(w?.steps)?w.steps:[]});return}if(!y.turnId||!u)return;let S=typeof w?.callId=="string"?w.callId:String(w?.callId??"");g==="turn.tool_call"?u("agents.prompt.tool",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,event:{kind:"call",callId:S,name:typeof w?.toolName=="string"?w.toolName:typeof w?.name=="string"?w.name:"tool",arguments:HX(w)}}):g==="turn.tool_result"&&u("agents.prompt.tool",{agentId:e,sessionId:y.sessionId,turnId:y.turnId,requestId:y.requestId,event:{kind:"result",callId:S,name:typeof w?.toolName=="string"?w.toolName:"tool",ok:w?.status!=="failed"&&w?.status!=="error",outputPreview:zX(w)}})},onMcpToolCall:async(f,g,h)=>typeof t.handleMcpToolCall=="function"?t.handleMcpToolCall(f,g,h):{ok:!1,error:"MCP tool call unavailable"},onPermissionRequest:(f,g)=>zD(g,{agentId:e,turnContext:()=>l.current,sendNotification:u}),log:{info:f=>t.log?.(`[agents.prompt] ${f}`),warn:f=>t.log?.(`[agents.prompt] WARN: ${f}`),debug:f=>t.log?.(`[agents.prompt] ${f}`)},sessionDir:Xu.join(de(),"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 UD(s,m),m}async function a$(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 s$(this,r,o,i,Ju),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 c$(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,u=typeof e.requestId=="string"?e.requestId:void 0,p=typeof e.projectId=="string"?e.projectId:void 0,m=Zu(r,s,c),f=await s$(this,r,i,s,c,typeof e.systemPrompt=="string"?e.systemPrompt:void 0),g={sessionId:c,turnId:l,requestId:u,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(S){throw Yu(m),S}finally{f.holder.current=null}let y=g.deltas.join("")||(typeof h?.content=="string"?h.content:""),w=f.manager.getUsageTracker(f.memberId)?.getUsage();if(c){Uo(c,{role:"user",content:n},s,l),y&&Uo(c,{role:"assistant",content:y},s,l);let S=jt(c,s);yt(c,{type:"personal",...p?{projectId:p}:{},...S?.title?{}:{title:n.trim().slice(0,40)||"\u5916\u90E8 Agent \u4F1A\u8BDD"},...S?.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:w?{inputTokens:w.inputTokens,outputTokens:w.outputTokens,totalTokens:w.totalTokens,cacheRead:w.cachedReadTokens,thoughtTokens:w.thoughtTokens,cost:w.cost}:void 0})}catch(e){if(t.id!==void 0){let r=e.authMethods;this.sendResponse(t.id,void 0,{code:b.INTERNAL_ERROR,message:e instanceof Error?e.message:String(e),...Array.isArray(r)&&r.length>0?{data:{authMethods:r}}:{}})}}}te();import*as Ps from"node:fs/promises";import*as gN from"node:path";Kl();var BX=/^[a-z0-9][a-z0-9_.:-]{0,79}$/i,qX=new Set(["journeyDay","count"]),WX=new Set(["blocked"]),KX=new Set(["R0","R1","R2","R3"]),GX=new Set(["aix","android","darwin","freebsd","ios","linux","openbsd","sunos","win32"]),VX={"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 Qu(t,e){if(!e||typeof e!="object"||Array.isArray(e))return;let r=VX[t],n={};for(let[o,i]of Object.entries(e)){if(!r.has(o))continue;let s=ZX(o,i);s!==void 0&&(n[o]=s)}return Object.keys(n).length>0?n:void 0}function ZX(t,e){if(qX.has(t))return typeof e=="number"&&Number.isInteger(e)&&e>=0&&e<=1e5?e:void 0;if(WX.has(t))return typeof e=="boolean"?e:void 0;if(t==="riskTier")return typeof e=="string"&&KX.has(e)?e:void 0;if(t==="platform")return typeof e=="string"&&GX.has(e)?e:void 0;if(typeof e!="string")return;let r=e.trim();return BX.test(r)?r:void 0}var JX=new Set(["withdrawn","version-available","deprecated","version-yanked","frozen"]);function YX(t){let e=n9(t.baseUrl),r=o9(t.fetchFn??fetch,t.clientVersion),n=t.token.trim();return{async getConsent(){return d$(r,e,n,"GET")},async setConsent(o){return d$(r,e,n,"PUT",o)},async matchRegistry(o){let i=o.intent.trim();if(!i)throw new Error("intent is required.");let s=s9(o.topK),a=await Me(r,Ae(t.baseUrl,"/api/v15/registry/match"),n,"POST",{intent:i,topK:s,prefer:o.preferOfficial===!1?"relevance":"official",canonicalOnly:!0});return(Ie(a)&&Array.isArray(a.matches)?a.matches:[]).map(a9).filter(l=>!!l).slice(0,s)},async publishSkill(o){return ZS(r,t.baseUrl,n,"skill",o)},async publishPet(o){return ZS(r,t.baseUrl,n,"pet",o)},async publishWorkflow(o){return ZS(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 Me(r,Ae(t.baseUrl,`/api/v15/registry/resources/${i}/signal`),n,"POST",{event:o.event,attribution:o.attribution?.trim()||void 0,metadata:o.metadata});if(Ie(s)&&s.accepted===!0)return{accepted:!0};throw new Error("Community hub returned an invalid signal response.")},async recordTelemetry(o){let i=Qu(o.event,o.metadata),s=await Me(r,Ae(t.baseUrl,"/api/v15/registry/telemetry"),n,"POST",{event:o.event,metadata:i});if(Ie(s)&&s.accepted===!0)return{accepted:!0};throw new Error("Community hub returned an invalid telemetry response.")},async listSharedResources(){let o=await Me(r,Ae(t.baseUrl,"/api/v15/registry/mine"),n,"GET");return(Ie(o)&&Array.isArray(o.resources)?o.resources:[]).map(ep).filter(s=>!!s)},async withdrawSharedResource(o,i){let s=encodeURIComponent(o.trim());if(!s)throw new Error("resourceId is required.");let a=await Me(r,Ae(t.baseUrl,`/api/v15/registry/resources/${s}/withdraw`),n,"POST",{reason:i?.trim()||void 0}),c=ep(a);if(!c)throw new Error("Community hub returned an invalid resource.");return c},async withdrawSharedResources(o){let i=await Me(r,Ae(t.baseUrl,"/api/v15/registry/community-consent/withdraw-shared"),n,"POST",{reason:o?.trim()||void 0});return(Ie(i)&&Array.isArray(i.resources)?i.resources:[]).map(ep).filter(a=>!!a)},async listNotices(o={}){let i=o.includeRead?"?includeRead=true":"",s=await Me(r,Ae(t.baseUrl,`/api/v15/registry/notices${i}`),n,"GET");return(Ie(s)&&Array.isArray(s.notices)?s.notices:[]).map(u$).filter(c=>!!c)},async markNoticeRead(o){if(!Number.isSafeInteger(o)||o<1)throw new Error("noticeId is required.");let i=await Me(r,Ae(t.baseUrl,`/api/v15/registry/notices/${o}/read`),n,"POST"),s=u$(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 Me(r,Ae(t.baseUrl,`/api/v15/registry/resources/${s}/install${c}`),n,"GET"),u=f$(l);if(!u)throw new Error("Community hub returned an invalid install resolution.");return u},async listResourceVersions(o){let i=encodeURIComponent(o.trim());if(!i)throw new Error("resourceId is required.");let s=await Me(r,Ae(t.baseUrl,`/api/v15/registry/resources/${i}/versions`),n,"GET");return(Ie(s)&&Array.isArray(s.versions)?s.versions:[]).map(QX).filter(c=>!!c)},async rateResource(o,i){let s=encodeURIComponent(o.trim());if(!s)throw new Error("resourceId is required.");let a=await Me(r,Ae(t.baseUrl,`/api/v15/registry/resources/${s}/rate`),n,"POST",{stars:i});return l$(a)},async getRatingSummary(o){let i=encodeURIComponent(o.trim());if(!i)throw new Error("resourceId is required.");let s=await Me(r,Ae(t.baseUrl,`/api/v15/registry/resources/${i}/rating`),n,"GET");return l$(s)},async reportResource(o,i){let s=encodeURIComponent(o.trim());if(!s)throw new Error("resourceId is required.");await Me(r,Ae(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 Me(r,Ae(t.baseUrl,`/api/v15/registry/resources/${i}/comments`),n,"GET");return(Ie(s)&&Array.isArray(s.comments)?s.comments:[]).map(XX).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 Me(r,Ae(t.baseUrl,`/api/v15/registry/resources/${s}/comments`),n,"POST",{body:a}),l=Ie(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 Me(r,Ae(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(!(Ie(i)&&i.accepted===!0))throw new Error("Community hub returned an invalid activity response.")},async recordCommunityReview(o){let i=await Me(r,Ae(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(!(Ie(i)&&i.accepted===!0))throw new Error("Community hub returned an invalid review response.")},async recordCommunityAsk(o){let i=await Me(r,Ae(t.baseUrl,"/api/v15/community/asks"),n,"POST",{id:o.id,askerPetId:o.askerPetId,question:o.question,contextCategory:o.contextCategory,ts:o.ts});if(!(Ie(i)&&i.accepted===!0))throw new Error("Community hub returned an invalid ask response.")},async recordCommunityAnswer(o){let i=await Me(r,Ae(t.baseUrl,"/api/v15/community/answers"),n,"POST",{id:o.id,askId:o.askId,answererPetId:o.answererPetId,answer:o.answer,ts:o.ts});if(!(Ie(i)&&i.accepted===!0))throw new Error("Community hub returned an invalid answer response.")},async recordCommunityInteraction(o){let i=await Me(r,Ae(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(!(Ie(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 Me(r,Ae(t.baseUrl,`/api/v15/runtime/${s}/resolve?platform=${a}`),n,"GET"),l=e9(c);if(!l)throw new Error("Community hub returned an invalid runtime resolution.");return l}}}async function ZS(t,e,r,n,o){let i=ep(await Me(t,Ae(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=c9(await i9(t,Ae(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 l$(t){return Ie(t)?{average:typeof t.average=="number"?t.average:0,count:typeof t.count=="number"?t.count:0}:{average:0,count:0}}function XX(t){return!Ie(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 QX(t){return!Ie(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 e9(t){if(!Ie(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 zt(t=Vn()){let e=t.get("QLOGIC_LLMROUTER_ACCESS_TOKEN")?.trim();if(!e)return null;let r=t9(t);return YX({baseUrl:r9(t),token:e,clientVersion:r})}function t9(t){let e=t.get("QLOGIC_AGENT_VERSION")?.trim();return e||"2.13.10"}function r9(t){return t.get("QLOGIC_HUB_BASE_URL")?.trim()||t.get("XIAOZHICLAW_HUB_URL")?.trim()||"https://xiaozhi.qlogicagent.com"}function n9(t){return Ae(t,"/api/v15/registry/community-consent")}function Ae(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 o9(t,e){let r=e?.trim();return r?(n,o)=>t(n,{...o,headers:{...o?.headers,"x-client-version":r}}):t}async function d$(t,e,r,n,o){return Nr(await Me(t,e,r,n,o),!0)}async function Me(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 i9(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 Nr(t,e){let r=Ie(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 Ie(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}function ep(t){return!Ie(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 s9(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 a9(t){if(!Ie(t)||t.canonical!==!0&&t.isCanonical!==!0)return null;let e=p$(t.sourceTier),r=m$(t.trustStage),n=tp(t.resourceRiskTier),o=tp(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:JS(t.title,80),summary:JS(typeof t.summary=="string"?t.summary:"",160),capabilityTags:i.filter(s=>typeof s=="string"&&s.trim().length>0).slice(0,6).map(s=>JS(s,32)),sourceTier:e,trustStage:r,resourceRiskTier:n,effectiveRiskTier:o,latestVersion:typeof t.latestVersion=="string"?t.latestVersion:null,canonical:!0}}function JS(t,e){let r=t.replace(/\s+/g," ").trim();return r.length<=e?r:`${r.slice(0,Math.max(0,e-1))}\u2026`}function c9(t){return!Ie(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 u$(t){return!Ie(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:JX.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 l9=new Set(["R0","R1","R2","R3"]),d9=new Set(["official","community"]),u9=new Set(["quarantine","trial","trusted"]),p9=new Set(["pending","approved","rejected"]);function tp(t){return typeof t=="string"&&l9.has(t)?t:null}function p$(t){return typeof t=="string"&&d9.has(t)?t:null}function m$(t){return typeof t=="string"&&u9.has(t)?t:null}function m9(t){return typeof t=="string"&&p9.has(t)?t:null}function f$(t){if(!Ie(t))return null;let e=p$(t.sourceTier),r=m$(t.trustStage),n=m9(t.reviewStatus),o=tp(t.resourceRiskTier),i=tp(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(f$);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 f9=/(?:[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}|[A-Za-z]:\\|\/Users\/|\/home\/|secret|token|password|\+?\d[\d\s().-]{7,}\d)/i,g9=/\b(?:agent|tool|shell|execute|permission|memory|system prompt|developer message)\b/i;function h9(t){return y9(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 g$(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=h9(e);return t.publishPet({id:e.id,title:e.name,summary:e.summary,visibility:e.visibility??"public",tags:e.tags??[],manifest:n.manifest})}function y9(t){let e=[t.id,t.name,t.summary,t.persona,...t.traits??[],...t.tags??[]].join(`
654
654
  `);if(f9.test(e))throw new Error("Pet asset publish blocked: private email, path, secret, token, or phone-like text detected.");if(g9.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 YS={enabled:!0},v9=new Set(["R2","R3"]);function h$(t,e=YS){return v9.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"}}import{createPublicKey as b9,verify as k9}from"node:crypto";function w9(t){return`id=${t.id}
655
655
  version=${t.version}
656
656
  checksum=${t.checksum}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qlogicagent",
3
- "version": "2.13.9",
3
+ "version": "2.13.10",
4
4
  "description": "XiaozhiClaw Agent CLI — subprocess architecture (JSON-RPC over stdio)",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -68,11 +68,12 @@
68
68
  "build:tsc": "tsc --noCheck",
69
69
  "start": "node dist/cli.js",
70
70
  "test": "vitest run",
71
- "check": "tsc --noEmit && pnpm test && pnpm run check:architecture-boundaries && pnpm run check:provider-core-boundary && pnpm run check:pet-core-boundary && pnpm run check:workspace-hygiene && pnpm run check:package-artifact",
71
+ "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",
72
72
  "test:watch": "vitest",
73
73
  "lint": "oxlint .",
74
74
  "check:architecture-boundaries": "node scripts/check-architecture-boundaries.mjs",
75
75
  "check:provider-core-boundary": "node scripts/check-provider-core-boundary.mjs",
76
+ "check:provider-core-release-sync": "node scripts/check-provider-core-release-sync.mjs",
76
77
  "check:pet-core-boundary": "node scripts/check-pet-core-boundary.mjs",
77
78
  "check:workspace-hygiene": "node scripts/check-workspace-hygiene.mjs",
78
79
  "check:workspace-hygiene:strict": "node scripts/check-workspace-hygiene.mjs --strict",
@@ -89,7 +90,7 @@
89
90
  "@agentclientprotocol/sdk": "^0.25.0",
90
91
  "@napi-rs/canvas": "0.1.100",
91
92
  "@xiaozhiclaw/pet-core": "0.1.1",
92
- "@xiaozhiclaw/provider-core": "^0.1.12",
93
+ "@xiaozhiclaw/provider-core": "^0.1.14",
93
94
  "better-sqlite3": "^12.10.0",
94
95
  "dotenv": "^17.3.1",
95
96
  "ioredis": "^5.11.1",