@dcrays/dcgchat-test 0.7.22 → 0.7.23

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.
Files changed (2) hide show
  1. package/index.js +2 -2
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -10,7 +10,7 @@ ${t.join(`
10
10
  \r
11
11
  `+r)}function Ui(e,t,r,n,i,s){if(e.listenerCount("wsClientError")){let o=new Error(i);Error.captureStackTrace(o,Ui),e.emit("wsClientError",o,r,t)}else La(r,n,i,s)}});var z5,H5,K5,Zn,W5,h_,al=re(()=>{z5=qr(i_(),1),H5=qr(om(),1),K5=qr(um(),1),Zn=qr(sl(),1),W5=qr(d_(),1),h_=Zn.default});function Sr(){let e=bt()?.channels?.[xe]??{};return{userId:Number(e.userId??0),botToken:e.botToken??"",sessionId:"",messageId:"",domainId:String(e.domainId??"1000"),appId:String(e.appId??"100"),botId:"",agentId:"",sessionKey:""}}function cl(e){let t=Sr();return{userId:Number(e.userId??t.userId),botToken:e.botToken??t.botToken,sessionId:e.sessionId??t.sessionId,messageId:e.messageId??t.messageId,domainId:String(e.domainId??t.domainId),appId:String(e.appId??t.appId),botId:e.botId??t.botId,agentId:e.agentId??t.agentId,sessionKey:e.sessionKey??t.sessionKey}}function Pt(e){let t=e?Sn.get(e):void 0;return t?cl(t):Sr()}function $i(e){let t=e?.trim();return t&&Sn.has(t)?Pt(t):Pt()}function ym(e,t){if(!e)return;let r=Sn.get(e),n=r?cl(r):Sr();Sn.set(e,cl({...n,...t,sessionKey:e}))}function ul(e){return Sn.get(e)}function ll(e){let t=e?.trim();t&&Sn.delete(t)}function G5(e){let{botToken:t,...r}=e;return r}function m_(e){return{paramsMessageMap:[...Sn.entries()].filter(([t])=>!e||e.has(t)).map(([t,r])=>[t,G5(r)])}}function g_(e){if(e){Sn.clear();for(let[t,r]of e.paramsMessageMap??[])typeof t=="string"&&t&&r&&typeof r=="object"&&Sn.set(t,cl(r))}}function vm(e,t){if(t&&e){let r=ro.get(e);r&&clearTimeout(r),ro.delete(e),ja.set(e,t)}}function zi(e){return ja.get(e)}function y_(e){let t=e?.trim();if(!t)return[];let r=[];for(let[n,i]of ja.entries())i===t&&r.push(n);return r}function bm(e){let t=ro.get(e);t&&clearTimeout(t),ro.delete(e),ja.delete(e)}function xm(e,t){if(!ja.has(e))return;let r=ro.get(e);r&&clearTimeout(r);let n=setTimeout(()=>bm(e),Math.max(0,t));n.unref?.(),ro.set(e,n)}var Sn,ja,ro,kt=re(()=>{"use strict";vt();Pe();Sn=new Map;ja=new Map,ro=new Map});function pl(e){let t=Sr();return e?{...t,...e}:t}function V5(e){return!!(e&&typeof e=="object"&&"_userId"in e&&"content"in e)}function X5(e,t){let r=e.content;return{userId:Number(e._userId??t.userId),botToken:r.bot_token??t.botToken,domainId:String(r.domain_id??t.domainId),appId:String(r.app_id??t.appId),botId:r.bot_id,agentId:r.agent_id,sessionId:r.session_id,messageId:r.message_id}}function J5(e,t){return{userId:Number(e.userId??t.userId),botToken:e.botToken??t.botToken,domainId:String(e.domainId??t.domainId),appId:String(e.appId??t.appId),...e}}function Y5(e,t,r){return{bot_token:e.botToken??t.botToken,domain_id:e.domainId??t.domainId,app_id:e.appId??t.appId,bot_id:e.botId,agent_id:e.agentId,session_id:e.sessionId,message_id:e.messageId||Date.now().toString(),...r}}function Q5(e,t,r){let n=Sr(),i=r?.mergeChannelDefaults?J5(e,n):e;return{messageType:"openclaw_bot_chat",_userId:i.userId,source:"client",content:Y5(i,n,t)}}function v_(e,t,r){let n=Sr();return t===void 0&&V5(e)?X5(e,n):Q5(e,t??{},r)}function Nr(){let e=Zt()?.readyState===Zn.default.OPEN;return e||F(`server socket not ready ${Zt()?.readyState}`,"error"),e}function fl(e,t){let r=Zt();if(r?.readyState!==Zn.default.OPEN)return!1;let n=v_(e,t);return r.send(JSON.stringify({...n,content:JSON.stringify(n.content)})),!0}function er(e,t,r=!0){let n=Zt();if(n?.readyState!==Zn.default.OPEN)return F(`server socket not ready ${n?.readyState}`,"error"),!1;let i=v_(e,t,{mergeChannelDefaults:!0});return n.send(JSON.stringify(i)),r&&F("[\u63D2\u4EF6=>\u540E\u7AEF]-[wsSendRaw]\uFF1A"+JSON.stringify(i)),!0}function no(e,t,r){return fl(t,{response:e,state:"chunk",chunk_idx:r})}function Dt(e,t,r,n){F(` message handling complete state: to=${e.sessionId} final tag:${t}`);let i=Ku(e.messageId,e.sessionId,e.sessionKey);return i&&Ni(i),fl(e,{response:r||"",state:"final",...n||{}})}function Fr(e,t,r){return fl(t,{response:e,...r})}function b_(e,t){return fl(t,{response:`[\u9519\u8BEF] ${e}`,state:"final"})}function ei(e={}){let t=Sr(),r=Zt();if(Nr()){let n=JSON.stringify({messageType:"openclaw_bot_event",source:"client",content:{bot_token:t.botToken,domain_id:t.domainId,app_id:t.appId,bot_id:t.botId,...e}});F(`[\u63D2\u4EF6=>\u540E\u7AEF]-[sendEventMessage]\uFF1A${n}`),r?.send(n)}}var tr=re(()=>{"use strict";al();Pe();je();kt()});function Hi(e){let t=e?.trim()??"";return t==="1003-\u989D\u5EA6\u4E0D\u8DB3\u8BF7\u5145\u503C"||/1003[-–]?额度不足请充值/.test(t)}function x_(e){let t=e.trim();t&&wm.add(t)}function hl(e){return wm.has(e.trim())}function w_(e){wm.delete(e.trim())}var dl,wm,ml=re(()=>{"use strict";dl="\u60A8\u7684\u58A8\u6EF4\u5DF2\u6D88\u8017\u5B8C\uFF0C\u60A8\u53EF\u4EE5\u901A\u8FC7\u5145\u503C\u58A8\u6EF4\u6765\u7EE7\u7EED\u4F7F\u7528\u3002",wm=new Set});import yl from"crypto";function S_(e){let t=yl.createPublicKey(e).export({type:"spki",format:"der"});return t.length===gl.length+32&&t.subarray(0,gl.length).equals(gl)?t.subarray(gl.length):t}function E_(e){return e.toString("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function _m(e){return E_(S_(e))}function Sm(e){let t=S_(e);return yl.createHash("sha256").update(t).digest("hex")}function k_(e,t,r="base64url"){let n=yl.createPrivateKey(e),i=yl.sign(null,Buffer.from(t,"utf8"),n);return r==="base64url"?E_(i):i.toString("base64")}function Z5(e){if(typeof e!="string")return"";let t=e.trim();return t||""}function eB(e){return e.replace(/[A-Z]/g,t=>String.fromCharCode(t.charCodeAt(0)+32))}function __(e){let t=Z5(e);return t?eB(t):""}function T_(e){let t=e.scopes.join(","),r=e.token??"",n=__(e.platform??""),i=__(e.deviceFamily??"");return["v3",e.deviceId,e.clientId,e.clientMode,e.role,t,String(e.signedAtMs),r,e.nonce,n,i].join("|")}var gl,C_=re(()=>{"use strict";gl=Buffer.from("302a300506032b6570032100","hex")});function I_(e){let t=e.findIndex((a,c)=>!a.control&&a.value.toLowerCase()==="cron"&&["create","add"].includes(e[c+1]?.value.toLowerCase()??""));if(t<0)return null;let r=e[t-1],n=t===0||r?.control===!0,i=!r?.control&&r?.value.toLowerCase()==="openclaw";if(!n&&!i)return null;let s=i?t-1:t,o=t+2;for(;o<e.length&&!e[o]?.control;)o+=1;return{cronIndex:t,segmentStartIndex:s,segmentEndIndex:o}}function bl(e){if(typeof e!="string")return!1;let t=Tm(e.trim());return t!==null&&I_(t)!==null}function R_(e){if(typeof e!="string")return[];let t=Tm(e.trim());if(!t)return[];let r=[];for(let n=0;n<t.length-2;n+=1){let i=t[n];if(!i||i.control||i.value.toLowerCase()!=="cron")continue;let s=t[n-1],o=n===0||s?.control===!0,a=t[n-2],c=!s?.control&&s?.value.toLowerCase()==="openclaw"&&(n===1||a?.control===!0);if(!o&&!c)continue;let u=t[n+1],l=t[n+2];u?.control||!["remove","rm"].includes(u?.value.toLowerCase()??"")||!l||l.control||!l.value.trim()||l.value.startsWith("-")||r.push(l.value.trim())}return r}function En(e){return typeof e=="string"?e.trim():""}function q_(e){let t=e.split(":").filter(n=>n.length>0),r=t.map(n=>n.toLowerCase());return t.length>=6&&r[0]==="agent"&&r[2]==="mobook"&&r[3]==="direct"?{agentId:t[4]??"",sessionId:t[5]??""}:t.length>=2?{agentId:t[t.length-2]??"",sessionId:t[t.length-1]??""}:{agentId:"",sessionId:""}}function A_(e){let t=e.payload;return En(t?.message)||En(t?.text)||En(e.message)||En(e.text)||En(e.description)||En(e.name)||tB}function rB(e,t){let r=t.trim(),{agentId:n}=q_(r),i={...e.delivery??{},mode:"announce",channel:xe,to:`dcg-cron:${r}`,bestEffort:!0};n&&(i.accountId=n);let s=e.payload??{},o={...s},a=En(s.kind);if(En(o.message)||En(o.text)||(a==="systemEvent"?o.text=A_(e):o.message=A_(e)),a||(o.kind="agentTurn"),a!=="systemEvent"){let u=Number(o.timeoutSeconds);o.timeoutSeconds=Number.isFinite(u)&&u>=Em?u:Em}for(let u of["model","fallbacks","thinking","allowUnsafeExternalContent","lightContext","toolsAllow"])s[u]!==void 0&&(o[u]=s[u]);return{...e,sessionKey:r,sessionTarget:e.sessionTarget??"current",wakeMode:"now",delivery:i,schedule:e.schedule?.kind==="cron"?{...e.schedule,tz:O_}:e.schedule,payload:o}}function Ba(e){return/^[A-Za-z0-9_./:@%+=,-]+$/.test(e)?e:`'${e.replace(/'/g,"'\\''")}'`}function Tm(e){let t=[],r=0;for(;r<e.length;){if(/[^\S\r\n]/.test(e[r]??"")){r+=1;continue}let n=r,i=e[r]??"";if(`;&|\r
12
12
  `.includes(i)){let a=e.slice(r,r+2),c=a==="&&"||a==="||"||a===`\r
13
- `?r+2:r+1;t.push({start:n,end:c,value:e.slice(n,c),control:!0}),r=c;continue}let s="",o=null;for(;r<e.length;){let a=e[r]??"";if(!o&&(/\s/.test(a)||";&|".includes(a)))break;if(!o&&(a==="'"||a==='"')){o=a,r+=1;continue}if(a===o){o=null,r+=1;continue}if(a==="\\"&&o!=="'"){if(r+1>=e.length)return null;s+=e[r+1]??"",r+=2;continue}s+=a,r+=1}if(o)return null;t.push({start:n,end:r,value:s,control:!1})}return t}function sB(e,t){let r=Tm(e);if(!r)return F(`[${vl}] cannot safely parse cron exec command, skip normalization.`,"error"),e;let n=I_(r);if(!n)return e;let{segmentStartIndex:i,segmentEndIndex:s}=n,o=r.slice(i,s),a=o[0]?.start??0,c=r[s]?.start??e.length,u=[];for(let y=0;y<o.length;y+=1){let k=o[y];if(!k)continue;let P=k.value.indexOf("="),T=P>=0?k.value.slice(0,P):k.value;if(iB.has(T))u.push({start:k.start,end:k.end});else if(nB.has(T)){let x=P<0?o[y+1]:void 0;u.push({start:k.start,end:x?.end??k.end}),x&&(y+=1)}}let l=a,f="";for(let y of u)f+=e.slice(l,y.start),l=y.end;f+=e.slice(l,c);let p=o.filter(y=>!u.some(k=>y.start>=k.start&&y.end<=k.end)),d=p.some(y=>y.value==="--every"||y.value.startsWith("--every=")||y.value==="--at"||y.value.startsWith("--at=")),h=p.some(y=>y.value==="--session"||y.value.startsWith("--session=")),m=t.trim(),{agentId:b}=q_(m),E=[d?"":`--tz ${Ba(O_)}`,h?"":"--session current","--wake now",`--timeout-seconds ${Em}`,`--session-key ${Ba(m)}`,"--announce",`--channel ${Ba(xe)}`,`--to ${Ba(`dcg-cron:${m}`)}`,b?`--account ${Ba(b)}`:"","--best-effort-deliver","--json"].filter(Boolean),_=`${f.trim()} ${E.join(" ")}`,v=e.slice(0,a),g=e.slice(c);return`${v}${_}${g?` ${g.trimStart()}`:""}`}function km(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:null}function P_(e){try{return structuredClone(e)}catch(t){return F(`[${vl}] structuredClone failed: ${String(t)}`,"error"),null}}function uB(e){let t=typeof e.action=="string"?e.action.trim().toLowerCase():"";return t==="add"||t==="create"}function lB(e){let t={};for(let n of cB)e[n]!==void 0&&(t[n]=e[n]);return t.schedule!==void 0||t.at!==void 0||t.atMs!==void 0||t.everyMs!==void 0||t.cron!==void 0||t.expr!==void 0||t.payload!==void 0||t.message!==void 0||t.text!==void 0?t:null}function pB(e){let t=km(e.job),r=lB(e),n=t!==null&&Object.keys(t).length>0;return n&&r?{...r,...t}:n?t:r}function fB(e,t){let r=P_(e);if(!r)return null;let n=pB(r);return n?(r.action="add",r.job=rB(n,t),r):null}function D_(e,t){let{toolName:r,params:n,toolCallId:i}=e;if(r==="cron"){let s=km(n);if(!s||!uB(s))return;let o=fB(s,t);if(o)F(`[${vl}] cronToolCall newParams (${i}) ==> ${JSON.stringify(o)}`);else{F(`[${vl}] cronToolCall (${i}) could not resolve cron.add job, skip.`);return}return{params:o}}else if(r==="exec"){let s=km(n);if(!s)return;let o=s.command;if(typeof o!="string")return;if(bl(o)){let a=P_(s);return a?(a.command=sB(o,t),F(`cron exec create or add params: ${JSON.stringify(a)}`),{params:a}):void 0}return}}var vl,O_,Em,tB,nB,iB,oB,aB,cB,xl=re(()=>{"use strict";vt();je();vl="cron-delivery-guard",O_="Asia/Shanghai",Em=600,tB="\u8BF7\u6309\u5B9A\u65F6\u4EFB\u52A1\u8981\u6C42\u63D0\u9192\u7528\u6237\u3002";nB=new Set(["--tz","--timeout-seconds","--session-key","--wake","--channel","--to","--account"]),iB=new Set(["--announce","--deliver","--no-deliver","--best-effort-deliver","--no-best-effort-deliver","--json"]);oB=["message","text","model","fallbacks","toolsAllow","thinking","timeoutSeconds","lightContext","allowUnsafeExternalContent"],aB=["kind","at","atMs","every","everyMs","anchorMs","cron","expr","tz","stagger","staggerMs","exact"],cB=["name","schedule","sessionTarget","wakeMode","payload","delivery","enabled","description","deleteAfterRun","agentId","sessionKey","failureAlert","namePayload","scheduleKind","sessionTargetName",...oB,...aB]});async function M_(e){await L_(e,!0)||Ua.add(e)}function N_(e){Ua.delete(e)}async function F_(e){let t=await Me({method:"cron.get",params:{id:e}});return t?.sessionKey||t.delivery?.to?.replace("dcg-cron:","").trim()}async function L_(e,t){let r=await Me({method:"cron.get",params:{id:e}});if(!r){F(`getJobIdBySessionKey failed for jobId: ${e}`,"error");return}let n=r?.sessionKey,i=r.delivery?.to?.replace("dcg-cron:","").trim();return!n&&!i?(F(`checkCronSessionKey failed for jobId: ${e}`,"error"),Ua.add(e),!1):n&&i?(t&&ei({event_type:"cron",operation_type:"install",data:r}),!0):await U_(e)!==null}function dB(e){if(e.toolName!=="cron")return null;if(!$_(e.params)||e.error)return;let r=e.result.details?.id;if(typeof r=="string")return r;let n=JSON.stringify(e);for(let i of Ua)if(n.includes(i))return i;return null}async function j_(e,t){let r=dB(e);if(!r)return F(`getJobIdInAfterToolCall failed for event not has jobId: ${JSON.stringify(e)}`,"error");if(wl.set(r,t),B_.set(t,r),await L_(r)){N_(r);return}Ua.has(r)&&await U_(r)}function hB(e){return wl.get(e)}function mB(e){let t=wl.get(e);wl.delete(e),t&&B_.delete(t)}async function U_(e){let t=hB(e);if(!t)return F(`getJobIdToSessionKeyMap failed for jobId: ${e}`,"error"),null;let r=await Me({method:"cron.get",params:{id:e}});if(!r)return F(`getJobIdToSessionKeyMap failed for jobId: ${e}`,"error"),null;let n=structuredClone(r);n.sessionKey=t,n?.delivery||(n.delivery={}),n.delivery.to=`dcg-cron:${t}`,n.delivery.channel=xe,delete n.id,delete n.createdAtMs,delete n.updatedAtMs;try{return await Me({method:"cron.update",params:{id:e,patch:n}}),N_(e),mB(e),!0}catch(i){return F(`supplementSessionKey failed for jobId: ${e}: ${String(i)}`,"error"),null}}function $_(e){let t=e!==null&&typeof e=="object"&&!Array.isArray(e)?e:null,r=typeof t?.action=="string"?t.action.trim().toLowerCase():"";return r==="add"||r==="create"}function z_(e){let{toolName:t,params:r}=e;if(t==="cron")return $_(r);if(t==="exec"){let n=r!==null&&typeof r=="object"&&!Array.isArray(r)?r:null;return bl(n?.command)}return!1}var Ua,wl,B_,_l=re(()=>{"use strict";je();vt();Er();tr();xl();xl();Ua=new Set;wl=new Map,B_=new Map});function H_(e){return typeof e!="string"?"":e.replace("dcg-cron:","").trim()}function K_(e,t){let r=H_(t),n=typeof e=="string"?e.trim():"";r&&(Cm.add(r),n&&Sl.set(n,r))}function El(e){let t=H_(e);return!!t&&Cm.has(t)}function W_(e){let t=typeof e=="string"?e.trim():"";if(!t)return"";let r=Sl.get(t)??"";return Sl.delete(t),r&&![...Sl.values()].includes(r)&&Cm.delete(r),r}var Cm,Sl,$a=re(()=>{"use strict";Cm=new Set,Sl=new Map});var G_,V_,X_,J_,Y_,Am=re(()=>{"use strict";tr();Pe();je();Er();kt();_l();$a();G_=async e=>{let t=e?.trim();if(!t){F("onRemoveCronJob: empty jobId","error");return}try{await Me({method:"cron.remove",params:{id:t}})}catch(r){F(`onRemoveCronJob failed: id=${t}, error=${String(r)}`,"error")}},V_=async e=>{if(!e?.trim()){F("onDisabledCronJob: empty jobId","error");return}Me({method:"cron.update",params:{id:e,patch:{enabled:!1}}})},X_=async e=>{if(!e?.trim()){F("onEnabledCronJob: empty jobId","error");return}Me({method:"cron.update",params:{id:e,patch:{enabled:!0}}})},J_=async(e,t)=>{let r=await F_(e);if(!r){F(`onRunCronJob: no sessionKey for job id=${e}`,"error");return}Ia(r,t),Me({method:"cron.run",params:{id:e,mode:"force"}})},Y_=async(e,t)=>{if(!e){F("finishedDcgchatCron: empty jobId","error");return}let r=await Me({method:"cron.get",params:{id:e}}),n=r?.sessionKey||r.delivery?.to?.replace("dcg-cron:","").trim(),i=r?.name,s=r?.description,o=vn(n)||`${Date.now()}`,{sessionId:a,agentId:c}=Dr(n),u=pl({agentId:c,sessionId:`${a}`,messageId:o||`${Date.now()}`,real_mobook:a?"":1});t&&er(u,{response:t,message_tags:{source:"cron"},is_finish:-1}),setTimeout(()=>{Dt(u,"cron send","",{message_tags:{isFinal:1}})},1250);let l=Zt(),f=Sr();Nr()&&l?.send(JSON.stringify({messageType:"openclaw_bot_event",source:"client",content:{event_type:"notify",operation_type:"cron",bot_token:f.botToken,app_id:f.appId,session_id:a,agent_id:c,real_mobook:a?"":1,title:i,description:s}})),setTimeout(()=>{sw(n),W_(e)},1200)}});function Om(e,t){let r=e?.trim(),n=t?.trim();!r||!n||Ki.set(r,n)}function Q_(e,t){let r=e?.trim(),n=t?.trim();!r||!n||Wi.set(r,n)}function io(e){let t=e?.trim();t&&(Ki.delete(t),Wi.delete(t))}function Im(){Ki.clear(),Wi.clear()}function kl(e){let t=e?.trim();if(t)return Ki.get(t)}function Z_(e){let t=e?.trim();if(t)return Wi.get(t)}function Rm(e){for(let[t,r]of Wi.entries())e.has(r)&&io(t);for(let[t,r]of Ki.entries())e.has(r)&&io(t)}function eS(){return{requesterSessionKeyByRunId:[...Ki.entries()],childSessionKeyByRunId:[...Wi.entries()]}}function tS(e){Im();for(let[t,r]of e?.requesterSessionKeyByRunId??[])typeof t=="string"&&typeof r=="string"&&t&&r&&Ki.set(t,r);for(let[t,r]of e?.childSessionKeyByRunId??[])typeof t=="string"&&typeof r=="string"&&t&&r&&Wi.set(t,r)}var Ki,Wi,qm=re(()=>{"use strict";Ki=new Map,Wi=new Map});function Cl(e){let t=(Tl.get(e)??0)+1;return Tl.set(e,t),t}function Mt(e){return Tl.get(e)??0}function rS(e){let t=(Ha.get(e)??0)+1;return Ha.set(e,t),t}function Lr(e){return Ha.get(e)??0}function nS(e){Ha.delete(e)}function iS(e){Tl.delete(e),za.delete(e),Ha.delete(e)}function sS(e){za.delete(e)}function oS(e,t){za.set(e,t)}function so(e){let t=za.get(e)??0;return za.set(e,t+1),t}var Tl,za,Ha,ti=re(()=>{"use strict";Tl=new Map,za=new Map,Ha=new Map});function aS(e){return e instanceof Error?e.message:typeof e=="string"?e:String(e)}function gB(e){let t=aS(e);return/context overflow/i.test(t)||/prompt too large/i.test(t)||/auto-compaction failed/i.test(t)||/\(precheck\)/i.test(t)}function yB(){return"\u5F53\u524D\u5BF9\u8BDD\u8FC7\u957F\uFF0C\u5DF2\u8D85\u8FC7\u6A21\u578B\u4E0A\u4E0B\u6587\u9650\u5236\uFF1B\u81EA\u52A8\u538B\u7F29\u672A\u5B8C\u5168\u751F\u6548\u65F6\u4F1A\u51FA\u73B0\u6B64\u60C5\u51B5\u3002\u8BF7\u5C1D\u8BD5\u65B0\u5F00\u5BF9\u8BDD\u3001\u7F29\u77ED\u4EFB\u52A1\uFF0C\u6216\u6362\u7528\u66F4\u5927\u4E0A\u4E0B\u6587\u7684\u6A21\u578B\u3002"}function vB(e){let t=e.trim();return t&&(/[。!?.!?]$/u.test(t)?t:`${t}\u3002`)}function kn(e){if(gB(e))return yB();let t=aS(e).trim();if(!t)return;if(Hi(t))return dl;if(/Content Exists Risk/i.test(t))return"\u5F53\u524D\u68C0\u7D22\u5185\u5BB9\u5305\u542B\u98CE\u9669\u4FE1\u606F\uFF0C\u51FA\u4E8E\u5185\u5BB9\u5B89\u5168\u89C4\u8303\uFF0C\u6682\u4E0D\u652F\u6301\u8F93\u51FA\u76F8\u5173\u56DE\u7B54\u3002";if(t==="NO_REPLY"||/Agent couldn't generate a response\.\s*Note:\s*some tool actions may have already been executed/i.test(t)||/Agent couldn't generate a response/i.test(t))return"\u5F88\u62B1\u6B49\uFF0C\u672C\u6B21\u5BF9\u8BDD\u672A\u80FD\u751F\u6210\u56DE\u590D\uFF0C\u4F60\u53EF\u4EE5\u91CD\u65B0\u53D1\u9001\u63D0\u95EE\u518D\u8BD5\u8BD5\u770B\uFF5E";if(/API rate limit reached/i.test(t))return"API \u8C03\u7528\u9891\u7387\u5DF2\u8FBE\u4E0A\u9650\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002";if(/The AI service is temporarily overloaded/i.test(t))return"AI \u670D\u52A1\u5F53\u524D\u7E41\u5FD9\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002";if(/The AI service returned an error/i.test(t))return"AI \u670D\u52A1\u8FD4\u56DE\u5F02\u5E38\uFF0C\u8BF7\u91CD\u8BD5\u3002";if(/The model did not produce a response before the model idle timeout/i.test(t))return"\u6A21\u578B\u5728\u8D85\u65F6\u65F6\u95F4\u5185\u672A\u8FD4\u56DE\u7ED3\u679C\uFF0C\u8BF7\u91CD\u8BD5\u3002";if(/cron/u.test(t)&&/job interrupted by gateway restart/i.test(t))return"\u5F53\u524D\u4EFB\u52A1\u5DF2\u4E2D\u65AD\uFF0C\u53EF\u4EE5\u524D\u5F80\u5B9A\u65F6\u4EFB\u52A1\u83DC\u5355\u6267\u884C\u8BE5\u4EFB\u52A1\u3002";let r=t.match(/Image too large for the model\s*\(max\s+([^)]+)\)/i);if(r?.[1])return`\u56FE\u7247\u8D85\u8FC7\u6A21\u578B\u652F\u6301\u7684\u5927\u5C0F\uFF08\u6700\u5927 ${r[1].trim()}\uFF09\uFF0C\u8BF7\u538B\u7F29\u6216\u7F29\u5C0F\u56FE\u7247\u540E\u91CD\u8BD5\u3002`;if(/Image too large for the model/i.test(t))return"\u56FE\u7247\u8D85\u8FC7\u6A21\u578B\u652F\u6301\u7684\u5927\u5C0F\uFF0C\u8BF7\u538B\u7F29\u6216\u7F29\u5C0F\u56FE\u7247\u540E\u91CD\u8BD5\u3002";if(/Request failed after repeated internal retries/i.test(t))return"\u7CFB\u7EDF\u591A\u6B21\u81EA\u52A8\u91CD\u8BD5\u540E\u4ECD\u672A\u6210\u529F\uFF0C\u8BF7\u91CD\u8BD5\uFF1B\u5982\u95EE\u9898\u6301\u7EED\u5B58\u5728\uFF0C\u8BF7\u4F7F\u7528 /new \u5F00\u542F\u65B0\u7684\u4F1A\u8BDD\u3002";if(/Message ordering conflict/i.test(t))return"\u4F1A\u8BDD\u6D88\u606F\u987A\u5E8F\u53D1\u751F\u51B2\u7A81\uFF0C\u8BF7\u91CD\u8BD5\uFF1B\u5982\u95EE\u9898\u6301\u7EED\u5B58\u5728\uFF0C\u8BF7\u4F7F\u7528 /new \u5F00\u542F\u65B0\u7684\u4F1A\u8BDD\u3002";let n=t.match(/couldn't reach the configured model backend\s+(.+?)\.\s*Fallback used\s+(.+?),\s*but it produced no visible reply/i);if(n?.[1]&&n[2])return`\u26A0\uFE0F \u65E0\u6CD5\u8FDE\u63A5\u5230\u914D\u7F6E\u7684\u6A21\u578B ${n[1].trim()}\uFF0C\u5DF2\u5207\u6362\u81F3\u5907\u7528\u6A21\u578B ${n[2].trim()}\uFF0C\u4F46\u4ECD\u672A\u751F\u6210\u53EF\u89C1\u56DE\u590D\u3002`;if(/Follow-up completed, but OpenClaw could not deliver it to the originating channel/i.test(t))return"\u540E\u7EED\u4EFB\u52A1\u5DF2\u5B8C\u6210\uFF0C\u4F46\u65E0\u6CD5\u5C06\u56DE\u590D\u53D1\u9001\u56DE\u539F\u59CB\u4F1A\u8BDD\u3002\u4E3A\u907F\u514D\u6D88\u606F\u53D1\u9001\u5230\u9519\u8BEF\u7684\u6E20\u9053\uFF0C\u672C\u6B21\u56DE\u590D\u672A\u81EA\u52A8\u8F6C\u53D1\u3002";let i=t.match(/Memory flush failed after\s+(\S+)\s+attempts/i);if(i?.[1])return`\u26A0\uFE0F Memory \u5199\u5165\u8FDE\u7EED\u5931\u8D25 ${i[1].trim()} \u6B21\uFF0C\u672C\u8F6E\u5DF2\u8DF3\u8FC7\uFF0C\u5C06\u5728\u4E0B\u4E00\u6B21\u6574\u7406\u65F6\u81EA\u52A8\u91CD\u8BD5\u3002`;if(/All models are temporarily rate-limited/i.test(t))return"\u6240\u6709\u6A21\u578B\u5F53\u524D\u90FD\u53D7\u5230\u9891\u7387\u9650\u5236\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002";let s=t.match(/All models failed\s*\(([^)]+)\)/i);if(s?.[1])return`\u6240\u6709\u6A21\u578B\u5747\u8C03\u7528\u5931\u8D25\uFF08\u5171 ${s[1].trim()} \u4E2A\uFF09\u3002`;let o=t.match(/\/btw failed:\s*(.+)$/i);if(o?.[1])return`\u26A0\uFE0F /btw \u547D\u4EE4\u6267\u884C\u5931\u8D25\uFF1A${vB(o[1])}`;if(/\/btw failed/i.test(t))return"\u26A0\uFE0F /btw \u547D\u4EE4\u6267\u884C\u5931\u8D25\u3002";if(/The provider returned an empty response/i.test(t))return"\u5F88\u62B1\u6B49\uFF0C\u672C\u6B21\u5BF9\u8BDD\u672A\u80FD\u751F\u6210\u56DE\u590D\uFF0C\u4F60\u53EF\u4EE5\u91CD\u65B0\u53D1\u9001\u63D0\u95EE\u518D\u8BD5\u8BD5\u770B\uFF5E\u3002";if(/Unknown error \(no error details in response\)/i.test(t))return"\u672A\u77E5\u9519\u8BEF\uFF08\u672A\u83B7\u53D6\u5230\u9519\u8BEF\u8BE6\u60C5\uFF09\u3002";if(/Unknown error/i.test(t))return"\u672A\u77E5\u9519\u8BEF\u3002"}function cS(e,t){return t?kn(e)??e:e}var Ka=re(()=>{"use strict";ml()});function bB(e){let t=e.job??{},r=t.delivery??{};return t.sessionKey?t.sessionKey.trim():r.to?r.to.replace("dcg-cron:","").trim():""}function xB(e){return typeof e.delivery?.to=="string"?e.delivery.to.replace("dcg-cron:","").trim():""}function wB(e){return typeof e.sessionKey=="string"?e.sessionKey.trim():""}function uS(e){return typeof e=="string"?e.trim():e instanceof Error||e&&typeof e=="object"&&"message"in e&&typeof e.message=="string"?e.message.trim():""}function _B(e){let t=e.job;return!t||typeof t!="object"||Array.isArray(t)?!1:!!(wB(t)&&xB(t))}function SB(e){let t=e.job;ei({event_type:"cron",operation_type:"install",data:{...t,id:t.id??e.jobId}})}async function lS(e){try{if(e.event==="agent"){let t=e.payload,r=kl(t.runId);if(!r)return{type:e.event,payload:e.payload,seq:e.seq};if(!Gi(r))return F(`[Gateway] drop subagent delta: session not active, runId=${t.runId}, sessionKey=${r}`),{type:e.event,payload:e.payload,seq:e.seq};if(Yr(r))return F(`[Gateway] drop subagent delta: stream suppressed, runId=${t.runId}, sessionKey=${r}`),{type:e.event,payload:e.payload,seq:e.seq};if(typeof t.data?.delta!="string"||!t.data.delta)return{type:e.event,payload:e.payload,seq:e.seq};let n=Pt(r);if(n.sessionId){let i=so(r);no(t.data.delta,n,i)}}if(e.event==="cron"){let t=e.payload;if(t?.action==="started"?(K_(t?.jobId??t?.job?.id,bB(t)),F(`[Gateway] \u5B9A\u65F6\u4EFB\u52A1\u6267\u884C\u5F00\u59CB: ${JSON.stringify(t)}`)):F(`[Gateway] \u6536\u5230\u5B9A\u65F6\u4EFB\u52A1\u4E8B\u4EF6: ${JSON.stringify(t)}`),t?.action==="added"&&(_B(t)?SB(t):await M_(t?.jobId)),t?.action==="updated"){let n={event_type:"cron",operation_type:"install",data:await Me({method:"cron.get",params:{id:t?.jobId}})};ei(n)}if(t?.action==="removed"){let r={event_type:"cron",operation_type:"remove",data:{...t}};ei(r)}if(t?.action==="finished"){let r=typeof t?.jobId=="string"?t.jobId.trim():"",n=typeof t?.summary=="string"?t.summary:"",i=n.trim()||uS(t?.error)||uS(t?.diagnostics?.summary),s=kn(i),o="";t?.status!=="ok"?o="\u5B9A\u65F6\u4EFB\u52A1\u6267\u884C\u5931\u8D25"+(s||i?`
13
+ `?r+2:r+1;t.push({start:n,end:c,value:e.slice(n,c),control:!0}),r=c;continue}let s="",o=null;for(;r<e.length;){let a=e[r]??"";if(!o&&(/\s/.test(a)||";&|".includes(a)))break;if(!o&&(a==="'"||a==='"')){o=a,r+=1;continue}if(a===o){o=null,r+=1;continue}if(a==="\\"&&o!=="'"){if(r+1>=e.length)return null;s+=e[r+1]??"",r+=2;continue}s+=a,r+=1}if(o)return null;t.push({start:n,end:r,value:s,control:!1})}return t}function sB(e,t){let r=Tm(e);if(!r)return F(`[${vl}] cannot safely parse cron exec command, skip normalization.`,"error"),e;let n=I_(r);if(!n)return e;let{segmentStartIndex:i,segmentEndIndex:s}=n,o=r.slice(i,s),a=o[0]?.start??0,c=r[s]?.start??e.length,u=[];for(let y=0;y<o.length;y+=1){let k=o[y];if(!k)continue;let P=k.value.indexOf("="),T=P>=0?k.value.slice(0,P):k.value;if(iB.has(T))u.push({start:k.start,end:k.end});else if(nB.has(T)){let x=P<0?o[y+1]:void 0;u.push({start:k.start,end:x?.end??k.end}),x&&(y+=1)}}let l=a,f="";for(let y of u)f+=e.slice(l,y.start),l=y.end;f+=e.slice(l,c);let p=o.filter(y=>!u.some(k=>y.start>=k.start&&y.end<=k.end)),d=p.some(y=>y.value==="--every"||y.value.startsWith("--every=")||y.value==="--at"||y.value.startsWith("--at=")),h=p.some(y=>y.value==="--session"||y.value.startsWith("--session=")),m=t.trim(),{agentId:b}=q_(m),E=[d?"":`--tz ${Ba(O_)}`,h?"":"--session current","--wake now",`--timeout-seconds ${Em}`,`--session-key ${Ba(m)}`,"--announce",`--channel ${Ba(xe)}`,`--to ${Ba(`dcg-cron:${m}`)}`,b?`--account ${Ba(b)}`:"","--best-effort-deliver","--json"].filter(Boolean),_=`${f.trim()} ${E.join(" ")}`,v=e.slice(0,a),g=e.slice(c);return`${v}${_}${g?` ${g.trimStart()}`:""}`}function km(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:null}function P_(e){try{return structuredClone(e)}catch(t){return F(`[${vl}] structuredClone failed: ${String(t)}`,"error"),null}}function uB(e){let t=typeof e.action=="string"?e.action.trim().toLowerCase():"";return t==="add"||t==="create"}function lB(e){let t={};for(let n of cB)e[n]!==void 0&&(t[n]=e[n]);return t.schedule!==void 0||t.at!==void 0||t.atMs!==void 0||t.everyMs!==void 0||t.cron!==void 0||t.expr!==void 0||t.payload!==void 0||t.message!==void 0||t.text!==void 0?t:null}function pB(e){let t=km(e.job),r=lB(e),n=t!==null&&Object.keys(t).length>0;return n&&r?{...r,...t}:n?t:r}function fB(e,t){let r=P_(e);if(!r)return null;let n=pB(r);return n?(r.action="add",r.job=rB(n,t),r):null}function D_(e,t){let{toolName:r,params:n,toolCallId:i}=e;if(r==="cron"){let s=km(n);if(!s||!uB(s))return;let o=fB(s,t);if(o)F(`[${vl}] cronToolCall newParams (${i}) ==> ${JSON.stringify(o)}`);else{F(`[${vl}] cronToolCall (${i}) could not resolve cron.add job, skip.`);return}return{params:o}}else if(r==="exec"){let s=km(n);if(!s)return;let o=s.command;if(typeof o!="string")return;if(bl(o)){let a=P_(s);return a?(a.command=sB(o,t),F(`cron exec create or add params: ${JSON.stringify(a)}`),{params:a}):void 0}return}}var vl,O_,Em,tB,nB,iB,oB,aB,cB,xl=re(()=>{"use strict";vt();je();vl="cron-delivery-guard",O_="Asia/Shanghai",Em=600,tB="\u8BF7\u6309\u5B9A\u65F6\u4EFB\u52A1\u8981\u6C42\u63D0\u9192\u7528\u6237\u3002";nB=new Set(["--tz","--timeout-seconds","--session-key","--wake","--channel","--to","--account"]),iB=new Set(["--announce","--deliver","--no-deliver","--best-effort-deliver","--no-best-effort-deliver","--json"]);oB=["message","text","model","fallbacks","toolsAllow","thinking","timeoutSeconds","lightContext","allowUnsafeExternalContent"],aB=["kind","at","atMs","every","everyMs","anchorMs","cron","expr","tz","stagger","staggerMs","exact"],cB=["name","schedule","sessionTarget","wakeMode","payload","delivery","enabled","description","deleteAfterRun","agentId","sessionKey","failureAlert","namePayload","scheduleKind","sessionTargetName",...oB,...aB]});async function M_(e){await L_(e,!0)||Ua.add(e)}function N_(e){Ua.delete(e)}async function F_(e){let t=await Me({method:"cron.get",params:{id:e}});return t?.sessionKey||t.delivery?.to?.replace("dcg-cron:","").trim()}async function L_(e,t){let r=await Me({method:"cron.get",params:{id:e}});if(!r){F(`getJobIdBySessionKey failed for jobId: ${e}`,"error");return}let n=r?.sessionKey,i=r.delivery?.to?.replace("dcg-cron:","").trim();return!n&&!i?(F(`checkCronSessionKey failed for jobId: ${e}`,"error"),Ua.add(e),!1):n&&i?(t&&ei({event_type:"cron",operation_type:"install",data:r}),!0):await U_(e)!==null}function dB(e){if(e.toolName!=="cron")return null;if(!$_(e.params)||e.error)return;let r=e.result.details?.id;if(typeof r=="string")return r;let n=JSON.stringify(e);for(let i of Ua)if(n.includes(i))return i;return null}async function j_(e,t){let r=dB(e);if(!r)return F(`getJobIdInAfterToolCall failed for event not has jobId: ${JSON.stringify(e)}`,"error");if(wl.set(r,t),B_.set(t,r),await L_(r)){N_(r);return}Ua.has(r)&&await U_(r)}function hB(e){return wl.get(e)}function mB(e){let t=wl.get(e);wl.delete(e),t&&B_.delete(t)}async function U_(e){let t=hB(e);if(!t)return F(`getJobIdToSessionKeyMap failed for jobId: ${e}`,"error"),null;let r=await Me({method:"cron.get",params:{id:e}});if(!r)return F(`getJobIdToSessionKeyMap failed for jobId: ${e}`,"error"),null;let n=structuredClone(r);n.sessionKey=t,n?.delivery||(n.delivery={}),n.delivery.to=`dcg-cron:${t}`,n.delivery.channel=xe,delete n.id,delete n.createdAtMs,delete n.updatedAtMs;try{return await Me({method:"cron.update",params:{id:e,patch:n}}),N_(e),mB(e),!0}catch(i){return F(`supplementSessionKey failed for jobId: ${e}: ${String(i)}`,"error"),null}}function $_(e){let t=e!==null&&typeof e=="object"&&!Array.isArray(e)?e:null,r=typeof t?.action=="string"?t.action.trim().toLowerCase():"";return r==="add"||r==="create"}function z_(e){let{toolName:t,params:r}=e;if(t==="cron")return $_(r);if(t==="exec"){let n=r!==null&&typeof r=="object"&&!Array.isArray(r)?r:null;return bl(n?.command)}return!1}var Ua,wl,B_,_l=re(()=>{"use strict";je();vt();Er();tr();xl();xl();Ua=new Set;wl=new Map,B_=new Map});function H_(e){return typeof e!="string"?"":e.replace("dcg-cron:","").trim()}function K_(e,t){let r=H_(t),n=typeof e=="string"?e.trim():"";r&&(Cm.add(r),n&&Sl.set(n,r))}function El(e){let t=H_(e);return!!t&&Cm.has(t)}function W_(e){let t=typeof e=="string"?e.trim():"";if(!t)return"";let r=Sl.get(t)??"";return Sl.delete(t),r&&![...Sl.values()].includes(r)&&Cm.delete(r),r}var Cm,Sl,$a=re(()=>{"use strict";Cm=new Set,Sl=new Map});var G_,V_,X_,J_,Y_,Am=re(()=>{"use strict";tr();Pe();je();Er();kt();_l();$a();G_=async e=>{let t=e?.trim();if(!t){F("onRemoveCronJob: empty jobId","error");return}try{await Me({method:"cron.remove",params:{id:t}})}catch(r){F(`onRemoveCronJob failed: id=${t}, error=${String(r)}`,"error")}},V_=async e=>{if(!e?.trim()){F("onDisabledCronJob: empty jobId","error");return}Me({method:"cron.update",params:{id:e,patch:{enabled:!1}}})},X_=async e=>{if(!e?.trim()){F("onEnabledCronJob: empty jobId","error");return}Me({method:"cron.update",params:{id:e,patch:{enabled:!0}}})},J_=async(e,t)=>{let r=await F_(e);if(!r){F(`onRunCronJob: no sessionKey for job id=${e}`,"error");return}Ia(r,t),Me({method:"cron.run",params:{id:e,mode:"force"}})},Y_=async(e,t)=>{if(!e){F("finishedDcgchatCron: empty jobId","error");return}let r=await Me({method:"cron.get",params:{id:e}}),n=r?.sessionKey||r.delivery?.to?.replace("dcg-cron:","").trim(),i=r?.name,s=r?.description,o=vn(n)||`${Date.now()}`,{sessionId:a,agentId:c}=Dr(n),u=pl({agentId:c,sessionId:`${a}`,messageId:o||`${Date.now()}`,real_mobook:a?"":1});t&&er(u,{response:t,message_tags:{source:"cron"},is_finish:-1}),setTimeout(()=>{Dt(u,"cron send","",{message_tags:{isFinal:1}})},1250);let l=Zt(),f=Sr();Nr()&&a&&l?.send(JSON.stringify({messageType:"openclaw_bot_event",source:"client",content:{event_type:"notify",operation_type:"cron",bot_token:f.botToken,app_id:f.appId,session_id:a,agent_id:c,real_mobook:a?"":1,title:i,description:s}})),setTimeout(()=>{sw(n),W_(e)},1200)}});function Om(e,t){let r=e?.trim(),n=t?.trim();!r||!n||Ki.set(r,n)}function Q_(e,t){let r=e?.trim(),n=t?.trim();!r||!n||Wi.set(r,n)}function io(e){let t=e?.trim();t&&(Ki.delete(t),Wi.delete(t))}function Im(){Ki.clear(),Wi.clear()}function kl(e){let t=e?.trim();if(t)return Ki.get(t)}function Z_(e){let t=e?.trim();if(t)return Wi.get(t)}function Rm(e){for(let[t,r]of Wi.entries())e.has(r)&&io(t);for(let[t,r]of Ki.entries())e.has(r)&&io(t)}function eS(){return{requesterSessionKeyByRunId:[...Ki.entries()],childSessionKeyByRunId:[...Wi.entries()]}}function tS(e){Im();for(let[t,r]of e?.requesterSessionKeyByRunId??[])typeof t=="string"&&typeof r=="string"&&t&&r&&Ki.set(t,r);for(let[t,r]of e?.childSessionKeyByRunId??[])typeof t=="string"&&typeof r=="string"&&t&&r&&Wi.set(t,r)}var Ki,Wi,qm=re(()=>{"use strict";Ki=new Map,Wi=new Map});function Cl(e){let t=(Tl.get(e)??0)+1;return Tl.set(e,t),t}function Mt(e){return Tl.get(e)??0}function rS(e){let t=(Ha.get(e)??0)+1;return Ha.set(e,t),t}function Lr(e){return Ha.get(e)??0}function nS(e){Ha.delete(e)}function iS(e){Tl.delete(e),za.delete(e),Ha.delete(e)}function sS(e){za.delete(e)}function oS(e,t){za.set(e,t)}function so(e){let t=za.get(e)??0;return za.set(e,t+1),t}var Tl,za,Ha,ti=re(()=>{"use strict";Tl=new Map,za=new Map,Ha=new Map});function aS(e){return e instanceof Error?e.message:typeof e=="string"?e:String(e)}function gB(e){let t=aS(e);return/context overflow/i.test(t)||/prompt too large/i.test(t)||/auto-compaction failed/i.test(t)||/\(precheck\)/i.test(t)}function yB(){return"\u5F53\u524D\u5BF9\u8BDD\u8FC7\u957F\uFF0C\u5DF2\u8D85\u8FC7\u6A21\u578B\u4E0A\u4E0B\u6587\u9650\u5236\uFF1B\u81EA\u52A8\u538B\u7F29\u672A\u5B8C\u5168\u751F\u6548\u65F6\u4F1A\u51FA\u73B0\u6B64\u60C5\u51B5\u3002\u8BF7\u5C1D\u8BD5\u65B0\u5F00\u5BF9\u8BDD\u3001\u7F29\u77ED\u4EFB\u52A1\uFF0C\u6216\u6362\u7528\u66F4\u5927\u4E0A\u4E0B\u6587\u7684\u6A21\u578B\u3002"}function vB(e){let t=e.trim();return t&&(/[。!?.!?]$/u.test(t)?t:`${t}\u3002`)}function kn(e){if(gB(e))return yB();let t=aS(e).trim();if(!t)return;if(Hi(t))return dl;if(/Content Exists Risk/i.test(t))return"\u5F53\u524D\u68C0\u7D22\u5185\u5BB9\u5305\u542B\u98CE\u9669\u4FE1\u606F\uFF0C\u51FA\u4E8E\u5185\u5BB9\u5B89\u5168\u89C4\u8303\uFF0C\u6682\u4E0D\u652F\u6301\u8F93\u51FA\u76F8\u5173\u56DE\u7B54\u3002";if(t==="NO_REPLY"||/Agent couldn't generate a response\.\s*Note:\s*some tool actions may have already been executed/i.test(t)||/Agent couldn't generate a response/i.test(t))return"\u5F88\u62B1\u6B49\uFF0C\u672C\u6B21\u5BF9\u8BDD\u672A\u80FD\u751F\u6210\u56DE\u590D\uFF0C\u4F60\u53EF\u4EE5\u91CD\u65B0\u53D1\u9001\u63D0\u95EE\u518D\u8BD5\u8BD5\u770B\uFF5E";if(/API rate limit reached/i.test(t))return"API \u8C03\u7528\u9891\u7387\u5DF2\u8FBE\u4E0A\u9650\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002";if(/The AI service is temporarily overloaded/i.test(t))return"AI \u670D\u52A1\u5F53\u524D\u7E41\u5FD9\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002";if(/The AI service returned an error/i.test(t))return"AI \u670D\u52A1\u8FD4\u56DE\u5F02\u5E38\uFF0C\u8BF7\u91CD\u8BD5\u3002";if(/The model did not produce a response before the model idle timeout/i.test(t))return"\u6A21\u578B\u5728\u8D85\u65F6\u65F6\u95F4\u5185\u672A\u8FD4\u56DE\u7ED3\u679C\uFF0C\u8BF7\u91CD\u8BD5\u3002";if(/cron/u.test(t)&&/job interrupted by gateway restart/i.test(t))return"\u5F53\u524D\u4EFB\u52A1\u5DF2\u4E2D\u65AD\uFF0C\u53EF\u4EE5\u524D\u5F80\u5B9A\u65F6\u4EFB\u52A1\u83DC\u5355\u6267\u884C\u8BE5\u4EFB\u52A1\u3002";let r=t.match(/Image too large for the model\s*\(max\s+([^)]+)\)/i);if(r?.[1])return`\u56FE\u7247\u8D85\u8FC7\u6A21\u578B\u652F\u6301\u7684\u5927\u5C0F\uFF08\u6700\u5927 ${r[1].trim()}\uFF09\uFF0C\u8BF7\u538B\u7F29\u6216\u7F29\u5C0F\u56FE\u7247\u540E\u91CD\u8BD5\u3002`;if(/Image too large for the model/i.test(t))return"\u56FE\u7247\u8D85\u8FC7\u6A21\u578B\u652F\u6301\u7684\u5927\u5C0F\uFF0C\u8BF7\u538B\u7F29\u6216\u7F29\u5C0F\u56FE\u7247\u540E\u91CD\u8BD5\u3002";if(/Request failed after repeated internal retries/i.test(t))return"\u7CFB\u7EDF\u591A\u6B21\u81EA\u52A8\u91CD\u8BD5\u540E\u4ECD\u672A\u6210\u529F\uFF0C\u8BF7\u91CD\u8BD5\uFF1B\u5982\u95EE\u9898\u6301\u7EED\u5B58\u5728\uFF0C\u8BF7\u4F7F\u7528 /new \u5F00\u542F\u65B0\u7684\u4F1A\u8BDD\u3002";if(/Message ordering conflict/i.test(t))return"\u4F1A\u8BDD\u6D88\u606F\u987A\u5E8F\u53D1\u751F\u51B2\u7A81\uFF0C\u8BF7\u91CD\u8BD5\uFF1B\u5982\u95EE\u9898\u6301\u7EED\u5B58\u5728\uFF0C\u8BF7\u4F7F\u7528 /new \u5F00\u542F\u65B0\u7684\u4F1A\u8BDD\u3002";let n=t.match(/couldn't reach the configured model backend\s+(.+?)\.\s*Fallback used\s+(.+?),\s*but it produced no visible reply/i);if(n?.[1]&&n[2])return`\u26A0\uFE0F \u65E0\u6CD5\u8FDE\u63A5\u5230\u914D\u7F6E\u7684\u6A21\u578B ${n[1].trim()}\uFF0C\u5DF2\u5207\u6362\u81F3\u5907\u7528\u6A21\u578B ${n[2].trim()}\uFF0C\u4F46\u4ECD\u672A\u751F\u6210\u53EF\u89C1\u56DE\u590D\u3002`;if(/Follow-up completed, but OpenClaw could not deliver it to the originating channel/i.test(t))return"\u540E\u7EED\u4EFB\u52A1\u5DF2\u5B8C\u6210\uFF0C\u4F46\u65E0\u6CD5\u5C06\u56DE\u590D\u53D1\u9001\u56DE\u539F\u59CB\u4F1A\u8BDD\u3002\u4E3A\u907F\u514D\u6D88\u606F\u53D1\u9001\u5230\u9519\u8BEF\u7684\u6E20\u9053\uFF0C\u672C\u6B21\u56DE\u590D\u672A\u81EA\u52A8\u8F6C\u53D1\u3002";let i=t.match(/Memory flush failed after\s+(\S+)\s+attempts/i);if(i?.[1])return`\u26A0\uFE0F Memory \u5199\u5165\u8FDE\u7EED\u5931\u8D25 ${i[1].trim()} \u6B21\uFF0C\u672C\u8F6E\u5DF2\u8DF3\u8FC7\uFF0C\u5C06\u5728\u4E0B\u4E00\u6B21\u6574\u7406\u65F6\u81EA\u52A8\u91CD\u8BD5\u3002`;if(/All models are temporarily rate-limited/i.test(t))return"\u6240\u6709\u6A21\u578B\u5F53\u524D\u90FD\u53D7\u5230\u9891\u7387\u9650\u5236\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002";let s=t.match(/All models failed\s*\(([^)]+)\)/i);if(s?.[1])return`\u6240\u6709\u6A21\u578B\u5747\u8C03\u7528\u5931\u8D25\uFF08\u5171 ${s[1].trim()} \u4E2A\uFF09\u3002`;let o=t.match(/\/btw failed:\s*(.+)$/i);if(o?.[1])return`\u26A0\uFE0F /btw \u547D\u4EE4\u6267\u884C\u5931\u8D25\uFF1A${vB(o[1])}`;if(/\/btw failed/i.test(t))return"\u26A0\uFE0F /btw \u547D\u4EE4\u6267\u884C\u5931\u8D25\u3002";if(/The provider returned an empty response/i.test(t))return"\u5F88\u62B1\u6B49\uFF0C\u672C\u6B21\u5BF9\u8BDD\u672A\u80FD\u751F\u6210\u56DE\u590D\uFF0C\u4F60\u53EF\u4EE5\u91CD\u65B0\u53D1\u9001\u63D0\u95EE\u518D\u8BD5\u8BD5\u770B\uFF5E\u3002";if(/Unknown error \(no error details in response\)/i.test(t))return"\u672A\u77E5\u9519\u8BEF\uFF08\u672A\u83B7\u53D6\u5230\u9519\u8BEF\u8BE6\u60C5\uFF09\u3002";if(/Unknown error/i.test(t))return"\u672A\u77E5\u9519\u8BEF\u3002"}function cS(e,t){return t?kn(e)??e:e}var Ka=re(()=>{"use strict";ml()});function bB(e){let t=e.job??{},r=t.delivery??{};return t.sessionKey?t.sessionKey.trim():r.to?r.to.replace("dcg-cron:","").trim():""}function xB(e){return typeof e.delivery?.to=="string"?e.delivery.to.replace("dcg-cron:","").trim():""}function wB(e){return typeof e.sessionKey=="string"?e.sessionKey.trim():""}function uS(e){return typeof e=="string"?e.trim():e instanceof Error||e&&typeof e=="object"&&"message"in e&&typeof e.message=="string"?e.message.trim():""}function _B(e){let t=e.job;return!t||typeof t!="object"||Array.isArray(t)?!1:!!(wB(t)&&xB(t))}function SB(e){let t=e.job;ei({event_type:"cron",operation_type:"install",data:{...t,id:t.id??e.jobId}})}async function lS(e){try{if(e.event==="agent"){let t=e.payload,r=kl(t.runId);if(!r)return{type:e.event,payload:e.payload,seq:e.seq};if(!Gi(r))return F(`[Gateway] drop subagent delta: session not active, runId=${t.runId}, sessionKey=${r}`),{type:e.event,payload:e.payload,seq:e.seq};if(Yr(r))return F(`[Gateway] drop subagent delta: stream suppressed, runId=${t.runId}, sessionKey=${r}`),{type:e.event,payload:e.payload,seq:e.seq};if(typeof t.data?.delta!="string"||!t.data.delta)return{type:e.event,payload:e.payload,seq:e.seq};let n=Pt(r);if(n.sessionId){let i=so(r);no(t.data.delta,n,i)}}if(e.event==="cron"){let t=e.payload;if(t?.action==="started"?(K_(t?.jobId??t?.job?.id,bB(t)),F(`[Gateway] \u5B9A\u65F6\u4EFB\u52A1\u6267\u884C\u5F00\u59CB: ${JSON.stringify(t)}`)):F(`[Gateway] \u6536\u5230\u5B9A\u65F6\u4EFB\u52A1\u4E8B\u4EF6: ${JSON.stringify(t)}`),t?.action==="added"&&(_B(t)?SB(t):await M_(t?.jobId)),t?.action==="updated"){let n={event_type:"cron",operation_type:"install",data:await Me({method:"cron.get",params:{id:t?.jobId}})};ei(n)}if(t?.action==="removed"){let r={event_type:"cron",operation_type:"remove",data:{...t}};ei(r)}if(t?.action==="finished"){let r=typeof t?.jobId=="string"?t.jobId.trim():"",n=typeof t?.summary=="string"?t.summary:"",i=n.trim()||uS(t?.error)||uS(t?.diagnostics?.summary),s=kn(i),o="";t?.status!=="ok"?o="\u5B9A\u65F6\u4EFB\u52A1\u6267\u884C\u5931\u8D25"+(s||i?`
14
14
  ${s??i}`:""):t.deliveryStatus==="not-delivered"&&(o=kn(n||t.job?.payload?.message)||""),Y_(r,o)}}}catch(t){F(`[Gateway] \u5904\u7406\u4E8B\u4EF6\u5931\u8D25: ${t}`,"error")}return{type:e.event,payload:e.payload,seq:e.seq}}var pS=re(()=>{"use strict";Am();_l();Er();je();kt();tr();$a();qm();ni();ri();ti();Ka()});import fS from"crypto";import Vi from"node:fs";import dS from"node:path";var Al,hS=re(()=>{"use strict";al();C_();je();Pe();pS();vt();Al=class{ws=null;config;deviceId;privateKeyPem;publicKeyB64Url;connected=!1;connId=null;connectChallengeNonce=null;connectSent=!1;pendingRpcById=new Map;eventHandlers=new Set;constructor(t){this.config={url:t.url,token:t.token,role:t.role||"operator",scopes:t.scopes||["operator.admin"],reconnectInterval:t.reconnectInterval||5e3,maxReconnectAttempts:t.maxReconnectAttempts||10};let r=this.loadOrCreateDeviceIdentity();this.deviceId=r.deviceId,this.privateKeyPem=r.privateKeyPem,this.publicKeyB64Url=r.publicKeyB64Url}loadOrCreateDeviceIdentity(){let t=Bt(),r=dS.join(t,".state"),n=dS.join(r,"device.json");if(Vi.existsSync(n)){let u=JSON.parse(Vi.readFileSync(n,"utf8"));if(u.deviceId&&u.publicKeyPem&&u.privateKeyPem){let l=Sm(u.publicKeyPem),f=l!==u.deviceId?l:u.deviceId;if(l!==u.deviceId)try{Vi.writeFileSync(n,JSON.stringify({...u,deviceId:l},null,2))}catch{}return{deviceId:f,publicKeyPem:u.publicKeyPem,privateKeyPem:u.privateKeyPem,publicKeyB64Url:_m(u.publicKeyPem)}}}let i=fS.generateKeyPairSync("ed25519"),s=i.publicKey.export({type:"spki",format:"pem"}).toString(),o=i.privateKey.export({type:"pkcs8",format:"pem"}).toString(),a=Sm(s),c=_m(s);return Vi.existsSync(r)||Vi.mkdirSync(r,{recursive:!0}),Vi.writeFileSync(n,JSON.stringify({version:1,deviceId:a,publicKeyPem:s,privateKeyPem:o,createdAtMs:Date.now()},null,2)),Vi.chmodSync(n,384),{deviceId:a,publicKeyPem:s,privateKeyPem:o,publicKeyB64Url:c}}async connect(){return new Promise((t,r)=>{this.connectChallengeNonce=null,this.connectSent=!1,this.ws=new Zn.default(this.config.url);let n=!1,i=o=>{n||(n=!0,clearTimeout(s),o())},s=setTimeout(()=>{i(()=>r(new Error("Gateway connection timeout")))},15e3);this.ws.on("open",()=>{F("Gateway connection opened\uFF08\u7B49\u5F85 connect.challenge\uFF09")}),this.ws.on("message",o=>{try{let a=JSON.parse(o.toString());this.handleMessage(a,c=>i(()=>t(c)),c=>i(()=>r(c)),s)}catch(a){F(`[Gateway=>\u63D2\u4EF6]-[\u6D88\u606F\u89E3\u6790\u5931\u8D25]: ${a}`,"error")}}),this.ws.on("close",()=>{this.connected=!1,i(()=>r(new Error("Gateway \u5728\u63E1\u624B\u5B8C\u6210\u524D\u5173\u95ED\u4E86\u8FDE\u63A5")))}),this.ws.on("error",o=>{F(`Gateway \u8FDE\u63A5\u9519\u8BEF: ${o}`,"error"),i(()=>r(o))})})}sendConnect(){if(this.connectSent)return;let t=this.connectChallengeNonce?.trim()??"";if(!t)return;this.connectSent=!0;let r=Date.now(),n=process.platform,i=T_({deviceId:this.deviceId,clientId:"gateway-client",clientMode:"backend",role:this.config.role,scopes:this.config.scopes,signedAtMs:r,token:this.config.token,nonce:t,platform:n,deviceFamily:""}),s=k_(this.privateKeyPem,i),o=JSON.stringify({type:"req",id:"1",method:"connect",params:{minProtocol:zh,maxProtocol:zh,client:{id:"gateway-client",version:"1.0.0",platform:n,mode:"backend"},auth:{token:this.config.token},role:this.config.role,scopes:this.config.scopes,device:{id:this.deviceId,publicKey:this.publicKeyB64Url,signature:s,signedAt:r,nonce:t}}});this.ws?.send(o)}mapHelloPayloadToHelloOk(t){let r=t.server,n=t.features;return{server:{connId:typeof r?.connId=="string"?r.connId:""},features:{methods:Array.isArray(n?.methods)?n.methods:[],events:Array.isArray(n?.events)?n.events:[]},policy:t.policy,auth:t.auth}}acknowledgeGatewayHelloOk(t){clearTimeout(t)}handleMessage(t,r,n,i){let s=t.type;if(t.type==="event"&&t.event==="connect.challenge"){let o=t.payload,a=typeof o?.nonce=="string"?o.nonce.trim():"";if(!a){n(new Error("connect.challenge \u7F3A\u5C11 nonce"));return}this.connectChallengeNonce=a,this.sendConnect();return}if(t.type==="res"&&!this.connected){let o=t.ok===!0,a=t.payload;if(o&&a&&a.type==="hello-ok"){this.connected=!0;let c=a.server;this.connId=typeof c?.connId=="string"?c.connId:null,this.acknowledgeGatewayHelloOk(i),r(this.mapHelloPayloadToHelloOk(a));return}if(t.ok===!1){let c=t.error,u=typeof c?.message=="string"&&c.message||"Gateway connect \u88AB\u62D2\u7EDD";clearTimeout(i),n(new Error(u));return}}if(s==="hello-ok"||!s&&t.server){this.connected=!0,this.connId=t.server?.connId||null,this.acknowledgeGatewayHelloOk(i),r(t);return}if(t.type==="res"){let o=this.pendingRpcById.get(t.id);o&&(this.pendingRpcById.delete(t.id),o(t));return}t.type==="event"&&lS(t).then(o=>{this.eventHandlers.forEach(a=>a(o))}).catch(o=>{F(`[Gateway] event \u5904\u7406\u5F02\u6B65\u5931\u8D25: ${String(o)}`,"error")})}async callMethod(t,r={},n){let i=fS.randomUUID(),s=n?.timeoutMs??3e4;return new Promise((o,a)=>{if(!this.connected||!this.ws){a(new Error("Not connected to gateway"));return}let c=setTimeout(()=>{this.pendingRpcById.delete(i),a(new Error("Method call timeout"))},s);this.pendingRpcById.set(i,l=>{if(clearTimeout(c),l.ok){let f=l.result!==void 0?l.result:l.payload;o(f)}else a(new Error(l.error?.message||"Method call failed"))});let u=JSON.stringify({type:"req",id:i,method:t,params:r});this.ws.send(u),F(`[\u63D2\u4EF6=>Gateway]-[callMethod]: ${u}`)})}onEvent(t){return this.eventHandlers.add(t),()=>this.eventHandlers.delete(t)}close(){this.ws?.close(1e3,"Plugin stopped"),this.connected=!1}isConnected(){return this.connected}getConnId(){return this.connId}getWebSocket(){return this.ws}ping(){this.ws?.ping()}}});function EB(e){return e!==null&&typeof e=="object"&&Object.keys(e).length===0}function oo(e){if(!e||typeof e!="object"||EB(e))return!1;let t=e.channels;return!t||typeof t!="object"||Object.keys(t).length===0?!1:t[xe]!=null}function mS(e){let t=e.config;if(oo(t))return t;try{let r=e.runtime.config.loadConfig();return structuredClone(r)}catch{return t??{}}}var Pm=re(()=>{"use strict";vt()});function kB(e){return e.gateway}function TB(e){if(!e)throw new Error("OpenClaw \u914D\u7F6E\u672A\u521D\u59CB\u5316\uFF08\u9700\u5148\u5B8C\u6210\u63D2\u4EF6 register\uFF09");let t=kB(e),r=process.env.OPENCLAW_GATEWAY_TOKEN||t?.auth?.token||"";if(!r)throw new Error("\u7F3A\u5C11 Gateway token\uFF1A\u8BF7\u5728 openclaw.json \u7684 gateway.auth.token \u8BBE\u7F6E\uFF0C\u6216\u8BBE\u7F6E\u73AF\u5883\u53D8\u91CF OPENCLAW_GATEWAY_TOKEN");let n=t?.tls?.enabled===!0?"wss":"ws";return{url:process.env.OPENCLAW_GATEWAY_URL||t?.remote?.url||`${n}://127.0.0.1:${t?.port??18789}`,token:r,role:"operator",scopes:["operator.admin"]}}function CB(){let e=bt();if(oo(e))return e;try{let t=Xr().config.loadConfig();return oo(t)?t:null}catch{return null}}function AB(){try{let e=CB();return e?TB(e):(F("Gateway \u6301\u4E45\u8FDE\u63A5\u672A\u542F\u52A8: \u65E0\u53EF\u7528 OpenClaw \u914D\u7F6E\uFF08plugins.register \u672A\u5B8C\u6210\u6216 loadConfig \u5931\u8D25\uFF09","error"),null)}catch(e){return F(`Gateway \u6301\u4E45\u8FDE\u63A5\u672A\u542F\u52A8: ${e}`,"error"),null}}function Nm(){Ol&&(clearInterval(Ol),Ol=null)}function OB(){ao&&(clearTimeout(ao),ao=null)}function IB(e){Nm(),Ol=setInterval(()=>{if(e.isConnected())try{e.ping()}catch(t){F(`Gateway ping \u5931\u8D25: ${t}`,"error")}},Bu)}function yS(){co||ao||(ao=setTimeout(()=>{ao=null,vS()},Aa))}function RB(e,t){let r=e.getWebSocket();if(!r)return;let n=()=>{t===Il&&(Nm(),Qr===e&&(Qr=null),F("Gateway WebSocket \u5DF2\u65AD\u5F00\uFF0C\u5C06\u5728 5s \u540E\u91CD\u8FDE","error"),co||yS())};r.once("close",n),r.once("error",n)}async function vS(){if(co||Qr?.isConnected()||Mm)return;let e=AB();if(e){Mm=!0;try{Il+=1;let t=Il;if(Qr){try{Qr.close()}catch{}Qr=null}let r=new Al(e);if(await r.connect(),co){try{r.close()}catch{}return}if(t!==Il){try{r.close()}catch{}return}Qr=r,RB(r,t),IB(r),F(`Gateway \u6301\u4E45\u8FDE\u63A5\u6210\u529F connId=${r.getConnId()??"?"}`)}catch(t){F(`Gateway \u8FDE\u63A5\u5931\u8D25: ${t}`,"error"),Qr=null,Nm(),co||yS()}finally{Mm=!1}}}function bS(){co=!1,OB(),Dm==null&&(Dm=setTimeout(()=>{Dm=null,vS()},0))}function gS(){return Qr?.isConnected()??!1}async function xS(e){let t=e?.timeoutMs??qB,r=e?.intervalMs??PB,n=Date.now()+t;for(;;){if(e?.signal?.aborted)return!1;if(gS())return!0;if(Date.now()>=n)return gS();await new Promise(i=>setTimeout(i,r))}}async function DB(e,t={},r){let n=Qr;if(!n?.isConnected())throw new Error("Gateway \u672A\u8FDE\u63A5\uFF08\u7B49\u5F85\u91CD\u8FDE\u6216\u68C0\u67E5\u914D\u7F6E\uFF09");return n.callMethod(e,t,r)}async function Me(e,t){return DB(e.method,e.params??{},t)}var Qr,Ol,ao,Dm,Mm,co,Il,qB,PB,Er=re(()=>{"use strict";Pe();hS();je();Pm();vt();Qr=null,Ol=null,ao=null,Dm=null,Mm=!1,co=!0,Il=0;qB=12e4,PB=150});function wS(e,t){let r=e.trim();r&&Wa.set(r,{inboundGen:t,lastStreamSnapshot:"",hasStreamedAssistantText:!1,hasEmittedAssistantText:!1})}function Rl(e){let t=e.trim();t&&Wa.delete(t)}function _S(e){let t=e.trim();if(t)return Wa.get(t)}function SS(e){let t=e.trim();if(!t)return;let r=Wa.get(t);return r||(r={inboundGen:0,lastStreamSnapshot:"",hasStreamedAssistantText:!1,hasEmittedAssistantText:!1},Wa.set(t,r)),r}function ES(e){return _S(e)?.hasStreamedAssistantText??!1}function kS(e){return _S(e)?.hasEmittedAssistantText??!1}function TS(e){let t=e.trim();if(!t)return;let r=SS(t);r&&(r.lastStreamSnapshot="")}function Xi(e,t,r,n){if(!t||Xh(e))return!1;let i=SS(e);if(!i)return!1;let s=t,o="";return s.startsWith(i.lastStreamSnapshot)?(o=s.slice(i.lastStreamSnapshot.length),i.lastStreamSnapshot=s):i.lastStreamSnapshot.startsWith(s)||(o=s,i.lastStreamSnapshot=s),!o.trim()||(o=cS(o,n?.isError===!0),!(n?.emitDelta!=null?n.emitDelta(o)!==!1:no(o,r,so(e))))?!1:(i.hasEmittedAssistantText=!0,n?.markStreamed&&(i.hasStreamedAssistantText=!0),!0)}var Wa,Ga=re(()=>{"use strict";tr();Ka();ti();Pe();Wa=new Map});function CS(e,t){Va.set(e,t)}function AS(e){Va.delete(e)}function Yr(e){return Ja.has(e)}function Ya(e){Ja.delete(e)}function Fm(e){Ja.add(e)}function OS(e){let t=e.trim();if(!t)return{started:!1,barrier:Promise.resolve()};let r=uo.get(t);if(r)return F(`stop barrier already running sessionKey=${t}`),{started:!1,barrier:r};let n;return n=Promise.resolve().then(async()=>{try{let i=Ji.get(t);i&&(i.abort(),Ji.delete(t),F(`stop barrier: aborted local controller sessionKey=${t}`)),Fm(t);let s=Cl(t),o=rS(t);F(`stop barrier: bump inboundGen=${s}, stopSeq=${o}, sessionKey=${t}`);let a=Xa.get(t);a&&(await Promise.race([a.catch(()=>{}),new Promise(c=>setTimeout(c,100))]),F(`stop barrier: old tail done/timeout sessionKey=${t}`));try{await NB(t)}catch(c){F(`stop barrier: gateway abort: ${String(c)}`,"error")}Xa.set(t,Promise.resolve()),F(`stop barrier: released inbound queue sessionKey=${t}`)}finally{uo.get(t)===n&&uo.delete(t)}}),uo.set(t,n),{started:!0,barrier:n}}async function IS(e,t){let r=e.trim();if(!r){await t();return}for(;;){let n=uo.get(r);if(n){F(`waiting stop barrier before inbound turn sessionKey=${r}`),await n.catch(a=>F(`stop barrier wait failed: ${String(a)}`,"error"));continue}let i=Lr(r),o=(Xa.get(r)??Promise.resolve()).catch(()=>{}).then(async()=>{let a=Lr(r);if(a!==i){F(`skip queued inbound turn interrupted by stop: sessionKey=${r}, stopSeq=${i}\u2192${a}`);return}await t()});Xa.set(r,o.catch(a=>F(`session turn failed: ${String(a)}`,"error"))),await o;return}}async function NB(e){let t="interrupt",r=ql(e),n=y_(e),i=[...new Set([...r,...n])].reverse(),s=Va.get(e);i.length>0&&F(`${t}: chat.abort ${i.length} sub/expert session(s) (nested incl.)`);let o=async()=>{for(let a of i)try{await Me({method:"chat.abort",params:{sessionKey:a}})}catch(c){F(`${t}: chat.abort subagent ${a}: ${String(c)}`,"error")}try{await Me({method:"chat.abort",params:s?{sessionKey:e,runId:s}:{sessionKey:e}})}catch(a){F(`${t}: chat.abort main ${e}: ${String(a)}`,"error")}};try{await Promise.race([o(),new Promise((a,c)=>setTimeout(()=>c(new Error("batch abort timeout")),MB))])}catch(a){F(`${t}: batch abort timeout: ${String(a)}`,"error")}Va.delete(e),Qa(e)}function RS(e){Ji.get(e)?.abort(),Ja.delete(e);let t=new AbortController;return Ji.set(e,t),t}function Yi(e,t){t&&Ji.get(e)===t&&Ji.delete(e)}function qS(e){e&&(Va.delete(e),Ji.delete(e),Ja.delete(e),Xa.delete(e),uo.delete(e),iS(e),ll(e),Xn(e,""),Rl(e),PS(e))}var MB,Va,Ji,Ja,Xa,uo,ri=re(()=>{"use strict";Er();je();ti();ni();kt();Pe();Ga();MB=5e3,Va=new Map,Ji=new Map,Ja=new Set,Xa=new Map,uo=new Map});import ii from"node:fs";import Lm from"node:path";function Bm(){let e=Bt();return e?Lm.join(Lm.dirname(e),FB):null}function DS(e){let t=Bm();if(!t){F("writeSessionStateFile: workspace dir not initialized, skip","error");return}let r=aw(),n=new Set(r.msgStatusBySessionKey.map(([s])=>s));if(n.size===0){Um(),F("session state skipped: no running sessions");return}let i={version:jm,savedAt:Date.now(),params:m_(n),global:r,subagent:e};try{let s=Lm.dirname(t);ii.existsSync(s)||ii.mkdirSync(s,{recursive:!0});let o=`${t}.tmp`;ii.writeFileSync(o,JSON.stringify(i,null,2),"utf8"),ii.renameSync(o,t),F(`session state persisted: ${t}`)}catch(s){F(`writeSessionStateFile failed: ${String(s)}`,"error")}}function MS(){let e=Bm();if(!e||!ii.existsSync(e))return null;try{let t=ii.readFileSync(e,"utf8"),r=JSON.parse(t);return!r||typeof r!="object"?null:r.version!==jm?(F(`readSessionStateFile: version mismatch ${r.version} vs ${jm}`,"error"),null):r}catch(t){return F(`readSessionStateFile failed: ${String(t)}`,"error"),null}}function NS(e){e&&(g_(e.params),cw(e.global))}function Um(){let e=Bm();if(e)try{ii.existsSync(e)&&ii.unlinkSync(e)}catch(t){F(`removeSessionStateFile failed: ${String(t)}`,"error")}}function LB(e,t){let r=t?.trim();r&&e.add(r)}function jB(e){if(!e)return[];let t=new Set;for(let[r,n]of e.global?.msgStatusBySessionKey??[])n==="running"&&LB(t,r);return[...t]}function FS(e){if(!e)return[];let t=new Set;for(let[r]of e.subagent?.requesterByChildSessionKey??[]){let n=r?.trim();n&&t.add(n)}return jB(e).filter(r=>!t.has(r))}var jm,FB,LS=re(()=>{"use strict";Pe();kt();je();jm=1,FB="session-state.json"});function jS(e,t){try{let r=String(e.runId??"?"),n=String(e.sessionId??"?"),i=String(e.provider??"?"),s=String(e.model??"?"),o=Number(e.imagesCount??0),a=Array.isArray(e.historyMessages)?e.historyMessages.length:0,c=String(e.prompt??""),u=e.systemPrompt!=null?String(e.systemPrompt):"",l=t?.sessionKey||"",f=t?.agentId||"",p=[];p.push("===== llm_input ====="),p.push(`sessionKey=${l} agentId=${f} runId=${r} sessionId=${n} provider=${i} model=${s} images=${o} historyMessages=${a} systemPromptLenght=${u.length} promptLength=${c.length}`);let d=BB(c,200);return p.push(`[TEXT] ${d}${d.length===200?"...":""}`),p.join(`
15
15
  `)}catch(r){return`formatLlmInputEvent Error: ${r}`}}function BB(e,t){let r="";for(let n of e.split(`
16
16
 
@@ -300,7 +300,7 @@ ${n}`}async function Mse(e,t){let r=new AbortController,n=setTimeout(()=>r.abort
300
300
  `)}var TL=re(()=>{"use strict";Pu()});import{callGatewayTool as Wse}from"openclaw/plugin-sdk/agent-harness-runtime";function CL(e){return typeof e=="string"&&e.trim()?e.trim():void 0}function Du(e,t){for(let r of t){let n=e[r],i=CL(n);if(i)return i}}function Gse(e){return typeof e=="string"?e.trim():Array.isArray(e)?e.map(t=>typeof t=="string"?t:Wn(t)?t.type==="text"&&typeof t.text=="string"?t.text:typeof t.content=="string"?t.content:"":"").join("").trim():""}function Ea(e){if(!Wn(e))return"";let t=Du(e,["text","message","body"]);return t||Gse(e.content)}function AL(e){if(Wn(e))return Du(e,["role","author","type"])}function OL(e){if(!Wn(e))return;let t=Du(e,["runId","run_id"]);return t||(Wn(e.metadata)?Du(e.metadata,["runId","run_id"]):void 0)}function Vse(e){if(!Wn(e))return;let t=e.timestamp??e.createdAt??e.ts;return typeof t=="number"&&Number.isFinite(t)?String(t):CL(t)}function L0(e){if(!Wn(e))return Ea(e);let t=Du(e,["id","messageId","entryId"]);if(t)return`id:${t}`;let r=OL(e),n=Vse(e);return[AL(e)??"",r??"",n??"",Ea(e)].join("\0")}function j0(e){return AL(e)==="assistant"}function Xse(e){return Wn(e)?Array.isArray(e.messages)?e.messages:[]:[]}async function B0(e){let t=await Wse("chat.history",{timeoutMs:3e4},{sessionKey:e.sessionKey,...e.agentId?{agentId:e.agentId}:{},limit:e.limit,maxChars:e.maxChars});return Xse(t)}function IL(e){let t=[...e.messages].reverse().filter(j0),r=t.find(i=>OL(i)===e.runId&&Ea(i));if(r)return{text:Ea(r),message:r,matchedBy:"runId"};let n=t.find(i=>!e.baselineFingerprints.has(L0(i))&&Ea(i));if(n)return{text:Ea(n),message:n,matchedBy:"new_message"}}var RL=re(()=>{"use strict";Pu()});import{randomUUID as Jse}from"node:crypto";import{callGatewayTool as Dh}from"openclaw/plugin-sdk/agent-harness-runtime";function roe(e){return Math.max(1,Math.floor(typeof e=="number"&&Number.isFinite(e)?e:Zse))}function noe(e){let t=typeof e=="number"&&Number.isFinite(e)?e:eoe;return Math.max(1,Math.min(1e3,Math.floor(t)))}function ioe(e){let t=typeof e=="number"&&Number.isFinite(e)?e:qL;return Math.max(1,Math.min(qL,Math.floor(t)))}function soe(e){return Math.max(1,Math.min(e,6e4))}function ooe(e){return Math.max(1,Math.ceil(e/1e3))}function PL(e){let t=e?.session?.mainKey;return Xe(t)??"main"}function aoe(e,t){let r=Xe(e.sessionKey);if(r)return r;let n=Xe(e.agentId);if(n)return`agent:${n}:${PL(t)}`}async function Ph(e){let t=e.sessionKey.trim();if(t)try{await Me({method:"chat.abort",params:e.runId?{sessionKey:t,runId:e.runId}:{sessionKey:t}}),F(`agent_send: chat.abort sessionKey=${t} runId=${e.runId??""}`)}catch(r){F(`agent_send: chat.abort failed sessionKey=${t}: ${String(r)}`,"error")}}function coe(e){let{sourceSessionKey:t,stopSeqAtStart:r,signal:n}=e;return new Promise(i=>{let s=!1,o=()=>{s||(s=!0,clearInterval(u),n?.removeEventListener("abort",c),i("stopped"))},a=()=>{(n?.aborted||Lr(t)!==r)&&o()},c=()=>o(),u=setInterval(a,toe);if(u.unref?.(),n){if(n.aborted){o();return}n.addEventListener("abort",c,{once:!0})}a()})}async function uoe(e){let t=$s(e.targetSessionKey);if(!t)return{ok:!0};if(e.targetSessionKey!==`agent:${t}:${PL(e.config)}`)return{ok:!0};try{return await Dh("sessions.resolve",{timeoutMs:1e4},{key:e.targetSessionKey}),{ok:!0}}catch{try{return await Dh("sessions.create",{timeoutMs:1e4},{key:e.targetSessionKey,agentId:t}),{ok:!0}}catch(r){return{ok:!1,error:r instanceof Error?r.message:String(r)}}}}async function U0(e){let{sourceSessionKey:t,message:r,agentId:n,media:i,timeoutMs:s,waitForReply:o=!0,historyLimit:a,maxHistoryChars:c,signal:u,name:l}=e,f=e.config??bt()??void 0;qu(u);let p=Xe(r);if(!p)return{success:!1,error:"\u4F60\u9700\u8981\u6211\u5E2E\u4F60\u505A\u4EC0\u4E48\u5462\uFF1F"};if(!Xe(t))return{success:!1,error:"\u672A\u77E5\u6765\u6E90\uFF0C\u65E0\u6CD5\u53D1\u9001\u6D88\u606F"};let d=aoe(e,f);if(!d)return{success:!1,error:`\u6CA1\u6709\u67E5\u8BE2\u5230${l}\u7684\u4FE1\u606F`};if(!wL(n,d).ok)return{success:!1,status:"error",error:`${l}\u4E0D\u5B58\u5728`,targetSessionKey:d};if(!_L({sourceSessionKey:t,targetSessionKey:d,config:f}).ok)return{success:!1,status:"forbidden",error:`${l}\u6CA1\u6709\u6743\u9650\u8BBF\u95EE`,targetSessionKey:d};if(!(await uoe({config:f,targetSessionKey:d})).ok)return{success:!1,status:"error",error:`${l}\u521B\u5EFA\u5931\u8D25`,targetSessionKey:d};let E=EL(i),_=Xe(n)??$s(d);if(Vn.includes(p))return await Ph({sessionKey:d}),{success:!0,status:"stopped",targetSessionKey:d,targetAgentId:_,mediaCount:E.length};let v=Jse(),g=roe(s),y=noe(a),k=ioe(c),P=Lr(t);try{let T=new Set;if(o){let K=await B0({sessionKey:d,agentId:_,limit:y,maxChars:k}).catch(()=>[]);T=new Set(K.filter(j0).map(L0))}if(qu(u),Lr(t)!==P)return await Ph({sessionKey:d}),{success:!1,status:"aborted",error:`${l}\u5DF2\u7EC8\u6B62`,targetSessionKey:d,targetAgentId:_,mediaCount:E.length};let x=await Dh("agent",{timeoutMs:soe(g)},{..._?{agentId:_}:{},sessionKey:d,message:kL({message:p,sourceSessionKey:t,targetSessionKey:d,media:E}),idempotencyKey:v,timeout:ooe(g),deliver:!1,sourceReplyDeliveryMode:"message_tool_only",channel:Yse,inputProvenance:{kind:"inter_session",sourceSessionKey:t,sourceTool:Qse}},{expectFinal:!1}),C=typeof x?.runId=="string"?x.runId:v;if(!o)return{success:!0,status:"accepted",targetSessionKey:d,targetAgentId:_,mediaCount:E.length,runId:C,idempotencyKey:v,result:x};if(qu(u),Lr(t)!==P)return await Ph({sessionKey:d,runId:C}),{success:!1,status:"aborted",error:`${l}\u5DF2\u7EC8\u6B62`,targetSessionKey:d,targetAgentId:_,mediaCount:E.length,runId:C,idempotencyKey:v};let q=await Promise.race([Dh("agent.wait",{timeoutMs:g+1e4},{runId:C,timeoutMs:g}).then(K=>({kind:"wait",waitResult:K})),coe({sourceSessionKey:t,stopSeqAtStart:P,signal:u}).then(()=>({kind:"stopped"}))]);if(q.kind==="stopped")return await Ph({sessionKey:d,runId:C}),{success:!1,status:"aborted",error:`${l}\u5DF2\u7EC8\u6B62`,targetSessionKey:d,targetAgentId:_,mediaCount:E.length,runId:C,idempotencyKey:v};let D=q.waitResult,I=typeof D?.status=="string"?D.status:void 0;if(I==="timeout")return{success:!1,status:"timeout",error:`${l}\u6267\u884C\u8D85\u65F6`,targetSessionKey:d,targetAgentId:_,mediaCount:E.length,runId:C,idempotencyKey:v,waitResult:D};if(I&&I!=="ok"){let K=typeof D?.error=="string"?D.error:void 0;return{success:!1,status:I,error:K??`${l}\u6267\u884C\u5931\u8D25`,targetSessionKey:d,targetAgentId:_,mediaCount:E.length,runId:C,idempotencyKey:v,waitResult:D}}if(qu(u),Lr(t)!==P)return{success:!1,status:"aborted",error:`${l}\u5DF2\u7EC8\u6B62`,targetSessionKey:d,targetAgentId:_,mediaCount:E.length,runId:C,idempotencyKey:v,waitResult:D};let G=await B0({sessionKey:d,agentId:_,limit:y,maxChars:k}),O=IL({messages:G,baselineFingerprints:T,runId:C});return O?.text?{success:!0,status:"ok",targetSessionKey:d,targetAgentId:_,mediaCount:E.length,runId:C,idempotencyKey:v,reply:O.text,matchedBy:O.matchedBy,waitResult:D,result:x}:{success:!1,status:"no_reply",error:`${l}\u5DF2\u7ED3\u675F\uFF0C\u4F46\u672A\u80FD\u4ECE chat.history \u4E2D\u8BFB\u53D6\u5230\u672C\u6B21 assistant \u56DE\u590D`,targetSessionKey:d,targetAgentId:_,mediaCount:E.length,runId:C,idempotencyKey:v,waitResult:D}}catch(T){let x=T instanceof Error&&T.name==="AbortError";return F(`agent_send: failed: ${String(T)}`,x?"log":"error"),{success:!1,status:x?"aborted":void 0,error:x?`${l}\u5DF2\u7EC8\u6B62`:T instanceof Error?T.message:String(T),targetSessionKey:d,targetAgentId:_,mediaCount:E.length,idempotencyKey:v}}}var Yse,Qse,Zse,eoe,qL,toe,$0=re(()=>{"use strict";Er();vt();Pe();ti();je();SL();Pu();TL();RL();Yse="webchat",Qse="agent_send",Zse=3600*1e3,eoe=30,qL=5e5,toe=200});var jwe,Bwe,Mh,Nh,z0=re(()=>{"use strict";Er();Pe();kt();Ka();je();jwe=1440*60*1e3,Bwe=600*1e3,Mh=({agentId:e,cloneCode:t,sessionId:r})=>`agent:${typeof t=="string"&&t.trim()||"main"}:mobook:direct:${e}:${r??0}`.toLowerCase(),Nh="12138"});import{randomUUID as loe}from"node:crypto";import{callGatewayTool as DL}from"openclaw/plugin-sdk/agent-harness-runtime";async function Fh(e){let{sessionId:t}=Dr(e.sourceSessionKey),r=Mh({agentId:Nh,cloneCode:e.cloneCode,sessionId:t});vm(r,e.sourceSessionKey);try{return await U0({sourceSessionKey:e.sourceSessionKey,sessionKey:r,message:e.message,media:e.media,waitForReply:!0,timeoutMs:poe,name:e.name})}finally{xm(r,foe)}}async function Lh(e){let t=["[Expert Reply Archive]",`\u4E13\u5BB6: ${e.expertName}`,e.expertSessionKey?`\u4E13\u5BB6 sessionKey: ${e.expertSessionKey}`:void 0,e.expertRunId?`\u4E13\u5BB6 runId: ${e.expertRunId}`:void 0,"","\u4E0B\u9762\u662F\u4E13\u5BB6 Agent \u672C\u8F6E\u751F\u6210\u7684\u6587\u672C\u5185\u5BB9\u3002","\u8BF7\u4EC5\u5C06\u5176\u4F5C\u4E3A\u5F53\u524D main \u4F1A\u8BDD\u7684\u5386\u53F2\u4E0A\u4E0B\u6587\u4FDD\u5B58\u3002","\u4E0D\u8981\u6539\u5199\uFF0C\u4E0D\u8981\u603B\u7ED3\uFF0C\u4E0D\u8981\u8C03\u7528\u5DE5\u5177\uFF0C\u4E0D\u8981\u5411\u7528\u6237\u53D1\u9001\u4EFB\u4F55\u989D\u5916\u56DE\u590D\u3002","\u5982\u679C\u5FC5\u987B\u8F93\u51FA\uFF0C\u8BF7\u53EA\u56DE\u590D\uFF1ANO_REPLY","",e.expertReply].filter(o=>typeof o=="string").join(`
301
301
  `),r=await DL("agent",{timeoutMs:6e5},{agentId:"main",sessionKey:e.mainSessionKey,message:t,idempotencyKey:loe(),deliver:!1,timeout:Math.ceil(H0/1e3),sourceReplyDeliveryMode:"message_tool_only",disableMessageTool:!0,inputProvenance:{kind:"inter_session",sourceSessionKey:e.expertSessionKey,sourceTool:"agent_send.writeback"}},{expectFinal:!1}),n=typeof r?.runId=="string"?r.runId:void 0;if(!n)throw new Error("main \u56DE\u5199\u5DF2\u63D0\u4EA4\uFF0C\u4F46 Gateway \u672A\u8FD4\u56DE runId");let i=await DL("agent.wait",{timeoutMs:H0+1e4},{runId:n,timeoutMs:H0}),s=typeof i?.status=="string"?i.status:void 0;if(s!=="ok"){let o=typeof i?.error=="string"?i.error:void 0;throw new Error(o??`main \u56DE\u5199\u5931\u8D25\uFF0Cstatus=${s??"unknown"}, runId=${n}`)}}var poe,foe,H0,ML=re(()=>{"use strict";Pe();kt();z0();$0();poe=1440*60*1e3,foe=600*1e3,H0=12e4});var NL=re(()=>{"use strict";$0();ML()});import{randomUUID as FL}from"node:crypto";function K0(e){return e.agent_scope?.[0]?Vs(e.agent_scope?.[0]||{}):jL(e)?.find(r=>r.biz_type==="agent")}function LL(e){return e.skills_scope?.[0]?Vs(e.skills_scope?.[0]||{}):jL(e)?.find(r=>r.biz_type==="skill")}function jL(e){return e.intent_recognition?.map(r=>{let n={url:r.downloadUrl??"",name:r.shortName??r.name??"",shortName:r.shortName??r.name??"",bizType:r.bizType??""};return r.bizType==="skill"&&(n.skillCode=r.name??"",n.skillId=r.id),r.bizType==="agent"&&(n.agentCode=r.agentCode??r.cloneCode?.replace(/(?:-\d+)+$/,"")??"",n.cloneCode=r.cloneCode,n.agentId=r.agentId??r.productId??"",n.coverUrl=r.coverUrl),Vs(n)})}function BL({sessionKey:e,type:t,name:r}){let{text:n,callId:i}=es("match_intent_finished",{toolName:"match_intent_finished"},{},"lifecycle",`\u5339\u914D${t}\u6267\u884C\u5B8C\u6210\uFF0C\u4E3A\u60A8\u5339\u914D\u5230${r}`);Zi(e,n,i,0)}function ka({sessionKey:e,type:t,name:r,toolCallId:n,isCover:i,duration:s}){let{text:o,callId:a}=es(i===0?"before_install_intent":"after_install_intent",{params:`\u81EA\u52A8\u5B89\u88C5${t}\uFF1A${r}`,toolName:i===0?"before_install_intent":"after_install_intent",durationMs:s?s>100?s:Math.floor(Math.random()*71)+150:void 0},{toolCallId:n},i===0?"running":"finished");Zi(e,o,a,i??0)}async function UL(e,t,r,n=[]){let i=K0(e.content);if(e.content?.agent_scope?.[0]||BL({sessionKey:t,type:"\u4E13\u5BB6",name:i?.name}),await H3({...i})){let o=Pt(t),a=await Fh({message:r,sourceSessionKey:t,cloneCode:i?.clone_code,media:n,name:i?.name});return a.status==="ok"&&a.reply?(await Lh({mainSessionKey:t,expertName:i?.clone_code||i?.name||"\u4E13\u5BB6 Agent",expertReply:a.reply,expertSessionKey:a.targetSessionKey,expertRunId:a.runId}),er({...o},{response:a.reply,is_finish:-1})):er({...o},{response:a.error??`${i?.name}\u53D1\u9001\u5931\u8D25`,is_finish:-1}),Dt(o,"agent_stop"),hr(t,e.content.message_id),{success:!0}}else{let o=Date.now(),a=FL();if(ka({sessionKey:t,type:"\u4E13\u5BB6",name:`\u5F00\u59CB\u5B89\u88C5${i?.name}`,toolCallId:a,isCover:0}),!i?.url)return{success:!1,message:`${i?.name}\u5B89\u88C5\u5931\u8D25\uFF0C\u7531\u4E66\u7075\u58A8\u5B9D\u4E3A\u60A8\u89E3\u7B54`};let{success:c}=await Th(i),u=Date.now()-o;if(c){ka({sessionKey:t,type:"\u4E13\u5BB6",name:`\u5B89\u88C5${i.name}\u6210\u529F`,toolCallId:a,isCover:1,duration:u});let l=Pt(t),f=await Fh({message:r,sourceSessionKey:t,cloneCode:i.clone_code,name:i?.name,media:n});return f.status==="ok"&&f.reply?(await Lh({mainSessionKey:t,expertName:i.clone_code||i.name||"\u4E13\u5BB6 Agent",expertReply:f.reply,expertSessionKey:f.targetSessionKey,expertRunId:f.runId}),er({...l},{response:f.reply,is_finish:-1})):er({...l},{response:f.error??`${i?.name}\u53D1\u9001\u5931\u8D25`,is_finish:-1}),hr(t,e.content.message_id),Dt(l,"agent_stop"),{success:!0}}else return ka({sessionKey:t,type:"\u4E13\u5BB6",name:`\u5B89\u88C5${i.name}\u5931\u8D25`,toolCallId:a,isCover:0,duration:u}),{success:c,message:`${i.name}\u5B89\u88C5\u5931\u8D25\uFF0C\u7531\u4E66\u7075\u58A8\u5B9D\u4E3A\u60A8\u89E3\u7B54\u3002`}}}async function $L(e,t,r){if(r.content?.skills_scope?.[0]||BL({sessionKey:t,type:"\u6280\u80FD",name:e.name}),e?.skill_code&&!yL(e.skill_code)){if(!e.url)return{success:!1,message:`\u6280\u80FD${e.name}\u5B89\u88C5\u5931\u8D25\uFF0C\u7531\u4E66\u7075\u58A8\u5B9D\u4E3A\u60A8\u89E3\u7B54\u3002`};let n=Date.now(),i=FL();ka({sessionKey:t,type:"\u6280\u80FD",name:`\u5F00\u59CB\u5B89\u88C5${e.name}`,toolCallId:i,isCover:0});let s={event_type:"skill",operation_type:"install",skill_url:e.url,skill_code:e.skill_code,skill_id:e.skill_id,bot_token:r.content.bot_token},{success:o}=await qh({path:e.url,code:e.skill_code},s),a=Date.now()-n;return o?(ka({sessionKey:t,type:"\u6280\u80FD",name:`\u5B89\u88C5${e.name}\u6210\u529F`,toolCallId:i,isCover:1,duration:a}),{success:!0}):(ka({sessionKey:t,type:"\u6280\u80FD",name:`\u5B89\u88C5${e.name}\u5931\u8D25`,toolCallId:i,isCover:1,duration:a}),{success:!1,message:`${e.name}\u6280\u80FD\u5B89\u88C5\u5931\u8D25\uFF0C\u7531\u4E66\u7075\u58A8\u5B9D\u4E3A\u60A8\u89E3\u7B54\u3002`})}return{success:!0}}var zL=re(()=>{"use strict";kt();tr();W0();ni();F0();Oh();Pe();NL()});import doe from"node:path";import{createReplyPrefixContext as hoe,createTypingCallbacks as moe}from"openclaw/plugin-sdk/channel-reply-pipeline";function hr(e,t){ll(e),sS(e),Ya(e),w_(e),AS(e),Xn(e,""),t&&Ni(t);let{sessionId:r}=Dr(e);r&&Ni(r),Ni(e),ow(e),Qa(e),Rl(e)}function jh(e){let t=(e??"").trim();if(!t)return HL;let r=t.toLowerCase();return goe.test(t)?r:r.replace(yoe,"-").replace(voe,"").replace(boe,"").slice(0,64)||HL}function xoe(e,t){let r=e.split(":")[1];return!r?.trim()||!t.trim()?!1:jh(r)===jh(t)}function woe(e,t){let r=e.agents?.defaults?.humanDelay,n=jh(t),i=e.agents?.list?.find(s=>jh(s.id)===n)?.humanDelay;if(!(!r&&!i))return{mode:i?.mode??r?.mode,minMs:i?.minMs??r?.minMs,maxMs:i?.maxMs??r?.maxMs}}function Soe(e,t,r){let n=e.messageId?.trim();!n||n===t?.trim()||Dt(e,"abort")}function KL(e,t,r,n){return{userId:e._userId,botToken:e.content.bot_token,sessionId:r,messageId:e.content.message_id,domainId:e.content.domain_id,appId:n.channels?.[xe]?.appId||100,botId:e.content.bot_id??"",agentId:e.content.agent_id??"",sessionKey:t}}async function Eoe(e,t,r){let n=bt();if(!n)return;let i=Jn(e.content),s=e.content.session_id?.trim(),o=KL(e,i,s,n);ym(i,o);let a=Pt(i);Dt(a,"stop");let{started:c,barrier:u}=OS(i);c&&r&&Soe(r,e.content.message_id,i),F(`stop control ack: sessionKey=${i} messageId=${e.content.message_id} started=${c}`),await u}async function WL(e,t){let r=bt();if(!r){F("no OpenClaw config available","error");return}let n=zs(r,t),i=Jn(e.content),s=(e.content.text??"").trim(),o=Vn.includes(s),a=o?Pt(i):void 0;if(o){await Eoe(e,t,a);return}await IS(i,()=>koe(e,t))}async function koe(e,t){let r=bt();if(!r)return;let n=zs(r,t),i=Xr(),s=e.content.session_id?.trim(),o=e.content?.agent_clone_code?.trim()||"",a=Jn(e.content),c=Lr(a);Ya(a);let u=Cl(a),l=c>0&&!Vn.includes((e.content.text??"").trim()),f=KL(e,a,s,r);ym(a,f);let p=Pt(a),d=null,h=e.content.text?.trim();if(!h){Fr("\u4F60\u9700\u8981\u6211\u5E2E\u4F60\u505A\u4EC0\u4E48\u5462\uFF1F",p),Dt(p,"not text"),hr(a,e.content.message_id);return}if(Vn.includes(h)){Dt(p,"stop"),hr(a,e.content.message_id);return}if(o&&xoe(a,o)){let E=e.content.agent_code?.trim()||o.replace(/(?:-\d+)+$/,""),_=!0;if(Ah(o)?_=await q0(o):R0(o)?_=await kh(o):(F(`agent not installed, try local cache: agentCloneCode=${o}, agentCode=${E}`),_=await J3(E,o)),Mt(a)!==u){F(`skip stale install result: sessionKey=${a} inboundGen=${u}`);return}if(!_||!Eh(o)){F(`receive agentCloneCode, but agent not ready: ${o}`),Fr("\u62B1\u6B49\uFF0C\u7F51\u7EDC\u5F02\u5E38\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5",p,{message_tags:{source:"agent_not_found"},is_finish:-1}),Dt(p,"agent_not_installed"),hr(a,e.content.message_id);return}if(_=await kh(o),!_||!Eh(o)){F(`agent workspace binding validation failed: ${o}`,"error"),Fr("\u62B1\u6B49\uFF0C\u4E13\u5BB6\u521D\u59CB\u5316\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5",p,{message_tags:{source:"agent_binding_failed"},is_finish:-1}),Dt(p,"agent_binding_failed"),hr(a,e.content.message_id);return}let v=bt();v&&(r=v)}let m=i.channel.routing.resolveAgentRoute({cfg:r,channel:xe,accountId:n.accountId,peer:{kind:"direct",id:s}}),b=o||m.agentId||"main";d=r.agents?.list?.find(E=>E.id===b)?.name||b;try{let E=!1;if(!ju.includes(h?.trim())){let{text:M,callId:Y}=es("message_received",{},{},"lifecycle");Zi(a,M,Y,0)}let _=pL(e.content),v=[],g={};_.length>0&&(v=await hL(_,e.content.bot_token),g=fL(v),Gu(a)&&(h+=`
302
302
  files=${JSON.stringify(_)}`));let y=K0(e.content);if(y?.agent_code){if(_?.length>0){let $=Mh({agentId:Nh,cloneCode:y?.clone_code,sessionId:s});Gu($)&&(h+=`
303
- files=${JSON.stringify(_)}`)}let{success:M,message:Y}=await UL(e,a,h,v);if(M)return;Fr(Y??"",p,{message_tags:{source:"agent_install_failed"},is_finish:-1})}let k=LL(e.content);if(k?.skill_code){let{success:M,message:Y}=await $L(k,a,e);if(!M)Fr(Y??"",p,{message_tags:{source:"skill_install_failed"},is_finish:-1});else{let $=Bt(),W=doe.join($,"skills",k.skill_code);h=`${`\u7528\u6237\u9009\u62E9\u4F7F\u7528\u6B64\u6280\u80FD\uFF1A"${k.skill_code}"\uFF0C\u6280\u80FD\u8DEF\u5F84\u662F\uFF1A"${W}"\uFF0C\u5728\u76EE\u5F55\u4E0B\u67E5\u627E\u5E76`} ${h}`}}let P=dL(h,v),T=i.channel.inbound.buildContext({channel:xe,accountId:m.accountId,provider:xe,surface:xe,messageId:e.content.message_id,timestamp:Date.now(),from:a,sender:{id:a,name:d??void 0},conversation:{kind:"direct",id:s??a},route:{agentId:b,accountId:m.accountId,routeSessionKey:a,dispatchSessionKey:a},reply:{to:a,originatingTo:a},message:{body:P,bodyForAgent:P,rawBody:h,commandBody:h},access:{mentions:{canDetectMention:!0,wasMentioned:!0}},channelContext:{sender:{id:a},chat:{id:s??a,sessionId:s,domainId:e.content.domain_id,appId:e.content.app_id,botId:e.content.bot_id,agentId:e.content.agent_id}},media:v.map(M=>({path:M.path,contentType:M.contentType||void 0,messageId:e.content.message_id}))}),x=i.channel.session.resolveStorePath(r.session?.store,{agentId:b}),C=aL({sessionKey:a,onEmit:()=>{q=!0}}),q=!1;wS(a,u);let D="",I=sL({sessionKey:a,inboundGenAtStart:u,outboundCtx:p}),G=hoe({cfg:r,agentId:b,channel:xe,accountId:n.accountId}),O=()=>({deliver:async(M,Y)=>{if(Mt(a)!==u||Yr(a))return;if(Hi(M?.text)){F("[deliver]: pass text \u2014 skip raw insufficient-balance assistant line (plugin llm_output sends user copy)");return}await C.emitFromPayload(M),M?.text?.trim()&&!ES(a)&&Xi(a,M.text,p,{isError:M.isError===!0,emitDelta:R=>I.queueDelta(R)});let $=M,W=Array.isArray($.mediaUrls)?$.mediaUrls.length:$.mediaUrl?1:0;F(`[deliver]: kind=${Y.kind}, text.length=${M?.text?.length}, media.length=${W}, sessionId=${p.sessionId}, ${Wu(M?.text??"")}`)},onError:(M,Y)=>{if(Mt(a)!==u){F(`${Y.kind} reply failed (stale handler, ignored): ${String(M)}`);return}if(E=!0,hl(a)){I.flush(!0),F(`${Y.kind} reply failed (insufficient balance already finalized): ${String(M)}`,"error"),hr(a,e.content.message_id);return}let $=Yr(a);I.flush(!0);let W=kn(M);!$&&W&&Fr(W,p),Dt(p,"error"),F(`${Y.kind} reply failed${$?" (stream suppressed)":""}: ${String(M)}`,"error"),hr(a,e.content.message_id)}}),K=()=>({responsePrefix:G.responsePrefix,responsePrefixContextProvider:G.responsePrefixContextProvider,humanDelay:woe(r,b),onReplyStart:async()=>{},onIdle:()=>{_oe.onIdle?.()}});if(l){if(Uu>0&&(F(`after-stop settle: waiting ${Uu}ms before dispatch sessionKey=${a}`),await new Promise(M=>setTimeout(M,Uu))),Mt(a)!==u)return;nS(a),Ya(a)}let J;try{oS(a,0),J=RS(a),await(async()=>{let Y=K(),$=O();await i.channel.inbound.dispatchReply({cfg:r,channel:xe,accountId:m.accountId,agentId:b,routeSessionKey:a,storePath:x,ctxPayload:T,recordInboundSession:i.channel.session.recordInboundSession,dispatchReplyWithBufferedBlockDispatcher:i.channel.reply.dispatchReplyWithBufferedBlockDispatcher,delivery:$,dispatcherOptions:Y,record:{updateLastRoute:{sessionKey:a,channel:xe,to:a,accountId:m.accountId},onRecordError:W=>{F(` session record error: ${String(W)}`,"error")}},messageId:e.content.message_id,replyOptions:{abortSignal:J.signal,onModelSelected:G.onModelSelected,onAgentRunStart:W=>{CS(a,W)},onPartialReply:async W=>{if(Mt(a)!==u||Yr(a)||Hi(W.text))return;let R=W;R.replace===!0?(TS(a),I.flush(!0),typeof R.text=="string"&&R.text.trim()&&(D=R.text,Xi(a,R.text,p,{markStreamed:!0,isError:W.isError===!0,emitDelta:z=>I.queueDelta(z)}))):typeof R.delta=="string"&&R.delta?(D+=R.delta,Xi(a,D,p,{markStreamed:!0,isError:W.isError===!0,emitDelta:z=>I.queueDelta(z)})):W.text?(D=W.text,Xi(a,W.text,p,{markStreamed:!0,isError:W.isError===!0,emitDelta:z=>I.queueDelta(z)})):F(`[onPartialReply]: no text (media/tool metadata) keys=${Object.keys(R).join(",")}`),await C.emitFromPayload(W)}}})})(),I.flush(!0)}catch(M){if(F(`handleDcgchatMessage error: ${String(M)}`,"error"),Mt(a)===u&&hl(a)){I.flush(!0),Yi(a,J),I.dispose(),hr(a,e.content.message_id);return}if(Mt(a)===u&&!E){I.flush(!0),Yr(a)||Fr(kn(M)??"\u62B1\u6B49\uFF0C\u8FD9\u6B21\u5BF9\u8BDD\u6267\u884C\u65F6\u53D1\u751F\u5F02\u5E38\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002",p),Dt(p,"error"),Yi(a,J),I.dispose(),hr(a,e.content.message_id);return}if(Mt(a)===u&&E){Yi(a,J),I.dispose();return}}finally{Mt(a)!==u&&(Yi(a,J),I.dispose())}let ne=Mt(a);if(ne!==u){I.dispose(),F(`skip post-reply tail: sessionKey=${a} (stale handler: inbound gen ${u}\u2192${ne})`);return}if(hl(a)){I.dispose(),Yi(a,J),hr(a,e.content.message_id);return}[...$h,...Vn].includes(h?.trim())||Yr(a)&&Ya(a),Ni(e.content.message_id);try{try{await l1(a,{timeoutMs:Y0,signal:J?.signal})}catch(M){if(J?.signal.aborted||Mt(a)!==u)throw M;let Y=M instanceof Error?M.message:String(M);if(/^waitUntilSubagentsIdle timeout /u.test(Y))F(`subagent idle wait timeout, force cleanup: sessionKey=${a}, err=${Y}`,"error"),Qa(a);else throw M}if(Mt(a)!==u){I.dispose(),F(`skip post-wait tail: sessionKey=${a} (stale handler after subagent wait: inbound gen ${u}\u2192${Mt(a)})`);return}}finally{Yi(a,J)}I.flush(!0),!kS(a)&&!q&&F(`empty assistant reply: sessionKey=${a}, messageId=${e.content.message_id}`,"error"),Dt(p,"end"),I.dispose(),hr(a,e.content.message_id)}catch(E){if(F(` handle message failed: ${String(E)}`,"error"),Mt(a)===u){let _=E instanceof Error?E.message:String(E);b_(kn(E)??_,p),hr(a,e.content.message_id)}}}var HL,goe,yoe,voe,boe,_oe,W0=re(()=>{"use strict";Pe();Pe();Sa();Oh();tr();je();Ka();ml();vt();kt();ni();oL();cL();ri();ri();ri();N0();N0();ti();ti();Ga();Ga();zL();z0();HL="main",goe=/^[a-z0-9][a-z0-9_-]{0,63}$/i,yoe=/[^a-z0-9_-]+/g,voe=/^-+/,boe=/-+$/;_oe=moe({start:async()=>{},onStartError:e=>{F(`typing start error: ${String(e)}`,"error")}})});var GL,VL=re(()=>{"use strict";Er();Pe();je();ri();GL=async({agent_id:e,session_id:t,agent_clone_code:r})=>{let n=Jn({agent_id:e,session_id:t,agent_clone_code:r});if(!t){F("onRemoveSession: empty session_id","error");return}try{await Me({method:"sessions.delete",params:{key:n,deleteTranscript:!0}})}catch(i){let s=i instanceof Error?i:new Error(String(i));F(`onRemoveSession: ${s.message}`,"error")}finally{qS(n)}}});async function XL(e,t,r){if(e.messageType==="openclaw_bot_chat"){let n=e,i=Jn(n.content),s=ju.includes(n.content.text?.trim()??"");s?Xn(i,"finished"):Xn(i,"running");try{await WL(n,r)}catch(o){F(`handleDcgchatMessage failed: ${String(o)}`,"error"),s||Xn(i,"")}}else if(e.messageType==="openclaw_bot_event"){if(!e.content){F(`openclaw_bot_event: content is null, ${t}`,"error");return}let{event_type:n,operation_type:i}=e.content;if(n==="skill"){let{skill_url:s="",skill_code:o="",skill_id:a,bot_token:c,websocket_trace_id:u}=e.content,l={event_type:n,operation_type:i,skill_url:s,skill_code:o,skill_id:a,bot_token:c,websocket_trace_id:u};i==="install"||i==="enable"||i==="update"?await qh({path:s,code:o},l):i==="remove"||i==="disable"?await vL({code:o},l):F(`openclaw_bot_event skill: unsupported operation_type=${String(i)}, ${t}`,"error")}else if(n==="agent")i==="create"?e.content.clone_code?.replace(/(?:-\d+)+$/,"")==="reviser-expert"?(dr({...e.content,status:"ok"}),await D0(e.content,!1)):await Th(e.content):i==="remove"?await G3(e.content):i==="update"?await V3(e.content):i==="install"?await D0(e.content,!0):F(`openclaw_bot_event agent: unsupported operation_type=${String(i)}, ${t}`,"error");else if(n==="cron"){let{job_id:s="",message_id:o=""}=e.content;i==="remove"?await G_(s):i==="enable"?await X_(s):i==="disable"?await V_(s):i==="run"?await J_(s,o):F(`openclaw_bot_event cron: unsupported operation_type=${String(i)}, ${t}`,"error")}else if(n==="session"){let{agent_id:s="",session_id:o="",agent_clone_code:a}=e.content;i==="remove"&&await GL({agent_id:s,session_id:o,agent_clone_code:a})}else F(`openclaw_bot_event: unknown event_type=${String(n)}, operation_type=${String(i)}, ${t}`,"error")}else F(`ignoring unknown messageType: ${e.messageType}`,"error")}var JL=re(()=>{"use strict";W0();Pe();F0();je();Am();vt();Oh();VL()});var YL={};Fu(YL,{monitorDcgchatProvider:()=>Coe});function Toe(e){let{wsUrl:t,botToken:r,userId:n,domainId:i,appId:s}=e,o=new URL(t);return r&&o.searchParams.set("bot_token",r),n&&o.searchParams.set("_userId",n),o.searchParams.set("_domainId",i||"1000"),o.searchParams.set("_appId",s||"100"),o.toString()}async function Coe(e){let{abortSignal:t,accountId:r}=e,n=bt();if(!n){F("no OpenClaw config available","error");return}let i=zs(n,r??"default");if(!i.wsUrl){F(" wsUrl not configured","error");return}let s=!0,o=null,a=null,c=0,u="",l=(E,_)=>_?.messageType==="openclaw_bot_heartbeat"?!0:typeof E=="object"&&E!==null&&!Buffer.isBuffer(E)?E.messageType==="openclaw_bot_heartbeat":!1,f=()=>{a&&(clearInterval(a),a=null)},p=(E,_)=>{if(u!==E&&(u=E,!!e.statusSink)){if(E==="connecting"){e.statusSink({running:!0,lastError:null,lastDisconnect:null});return}if(E==="connected"){e.statusSink({running:!0,connected:!0,lastConnectedAt:Date.now(),lastError:null,lastDisconnect:null});return}if(E==="disconnected"){e.statusSink({connected:!1,lastDisconnect:{at:Date.now(),status:typeof _?.code=="number"?_.code:void 0,error:typeof _?.reason=="string"?_.reason:void 0}});return}e.statusSink({connected:!1,lastError:typeof _?.error=="string"?_.error:String(_?.error??"WebSocket error")})}};function d(){if(Nr()){let E={messageType:"openclaw_bot_heartbeat",_userId:Number(i.userId)||0,source:"client",content:{bot_token:i.botToken,status:"1"}};o?.send(JSON.stringify(E))}}let h=()=>{f(),a=setInterval(()=>{d()},Bu)},m=null,b=()=>{if(!s)return;m&&(m(),m=null);let E=Date.now(),_=Toe(i);F(`connecting to ${_}`),o=new h_(_);let v=o,g=()=>{F(`socket connected, \u7528\u65F6\uFF1A ${Date.now()-E}ms`),Wh(v),p("connecting"),h(),d()},y=async T=>{let x;try{x=JSON.parse(T.toString()),x.messageType!=="openclaw_bot_heartbeat"&&F(`[\u540E\u7AEF=>\u63D2\u4EF6]-[\u6D88\u606F\u89E3\u6790\u6210\u529F]: ${JSON.stringify(uw(x,["title"]))}`)}catch{F("[\u540E\u7AEF=>\u63D2\u4EF6]-[\u6D88\u606F\u89E3\u6790\u5931\u8D25]: invalid JSON received","error");return}let C=T.toString();if(l(T,x)){c+=1,(c%20===0||c===1)&&F(`\u5FC3\u8DF3\u94FE\u63A5, ${C}`),p("connected");return}try{x.content=JSON.parse(x.content)}catch{F("\u7528\u6237\u6D88\u606Fcontent\u5B57\u6BB5\u89E3\u6790\u5931\u8D25: invalid JSON received","error");return}try{await XL(x,C,i.accountId)}catch(D){F(`WS onMessage: handleParsedWsMessage failed: ${String(D)}`,"error")}},k=(T,x)=>{f(),v.removeListener("message",y),v.removeListener("close",k),v.removeListener("error",P),v.removeListener("open",g),m=null,Wh(null),p("disconnected",{code:T,reason:x?.toString()||""}),F(`disconnected (code=${T}, reason=${x?.toString()||""})`,"error"),s&&(F(`reconnecting in ${Aa}ms...`),setTimeout(b,Aa))},P=T=>{p("error",{error:String(T)}),F(`WebSocket error: ${String(T)}`,"error")};v.on("open",g),v.on("message",y),v.on("close",k),v.on("error",P),m=()=>{v.removeListener("open",g),v.removeListener("message",y),v.removeListener("close",k),v.removeListener("error",P)}};b(),await new Promise(E=>{if(t?.aborted){s=!1,o?.close(),E();return}t?.addEventListener("abort",()=>{F("socket stopping"),f(),s=!1,o?.close(),E()},{once:!0})})}var QL=re(()=>{"use strict";al();Sa();Pe();je();tr();JL();vt()});import{DEFAULT_ACCOUNT_ID as Bh}from"openclaw/plugin-sdk/account-id";function ZL(){return bt()?.channels?.[xe]??{}}function Aoe(e){let t=e.split(":").filter(n=>n.length>0),r=t.map(n=>n.toLowerCase());return t.length>=6&&r[0]==="agent"&&r[2]==="mobook"&&r[3]==="direct"}function Ooe(e){let t=e.split(":").filter(r=>r.length>0);return t.length>=3&&t[0].toLowerCase()==="agent"}function Ioe(e){let t=e.trim();if(!t)return!1;let r="dcg-cron:";return t.startsWith(r)&&(t=t.slice(r.length).trim(),!t)?!1:!!(Aoe(t)||Ooe(t))}function Roe(e,t){return ZL().strictMessageToolTarget===!1?!!e?.trim():Ioe(e)}function zs(e,t){let r=t??Bh,n=e.channels?.[xe]??{};return{accountId:r,enabled:n.enabled!==!1,configured:!!n.wsUrl,wsUrl:n.wsUrl??"",botToken:n.botToken??"",userId:n.userId??"",domainId:n.domainId??"",appId:n.appId??""}}var ej,Sa=re(()=>{"use strict";Pe();tr();vt();je();kt();ni();Er();vx();Ml();vx();ej={id:xe,meta:{id:xe,label:"\u4E66\u7075\u58A8\u5B9D",selectionLabel:"\u4E66\u7075\u58A8\u5B9D",docsPath:"/channels/"+xe,docsLabel:xe,blurb:"\u8FDE\u63A5 OpenClaw \u4E0E \u4E66\u7075\u58A8\u5B9D \u4EA7\u54C1",order:80},capabilities:{chatTypes:["direct"],polls:!1,threads:!0,media:!0,nativeCommands:!0,reactions:!0,edit:!1,reply:!0,effects:!0},reload:{configPrefixes:[`channels.${xe}`,"channels.dcgchat"]},configSchema:{schema:{type:"object",additionalProperties:!1,properties:{enabled:{type:"boolean"},wsUrl:{type:"string"},botToken:{type:"string"},userId:{type:"string",description:"WebSocket \u8FDE\u63A5\u53C2\u6570 _userId\uFF0C\u4E0E dcgchat_message \u5DE5\u5177\u7684 target\uFF08dcgSessionKey\uFF09\u65E0\u5173"},appId:{type:"string"},domainId:{type:"string"},capabilities:{type:"array",items:{type:"string"}},strictMessageToolTarget:{type:"boolean",description:"\u9ED8\u8BA4 true\uFF1A\u5185\u7F6E message \u5DE5\u5177\u7684 target \u987B\u4E3A sessionKey \u5F62\u6001\uFF08\u5982 agent:\u2026:mobook:direct:\u2026 \u6216 agent: \u524D\u7F00\u591A\u6BB5\uFF09\uFF0C\u7981\u6B62\u7EAF\u6570\u5B57 WS userId\u3002\u8BBE\u4E3A false \u5173\u95ED\u6B64\u6821\u9A8C\u3002"}}},uiHints:{userId:{label:"WS \u8FDE\u63A5 _userId",help:"\u4EC5\u7528\u4E8E\u62FC\u63A5\u7F51\u5173 WebSocket URL \u7684\u67E5\u8BE2\u53C2\u6570\uFF0C\u4E0D\u662F Agent \u53D1\u6D88\u606F\u65F6\u7684 target\u3002\u53D1\u6D88\u606F\u8BF7\u4F7F\u7528 dcgSessionKey\uFF08\u4E0E\u5165\u7AD9\u4E0A\u4E0B\u6587 SessionKey \u76F8\u540C\uFF09\u3002"},strictMessageToolTarget:{label:"\u4E25\u683C message.target",help:"\u5F00\u542F\u540E\u7531\u901A\u9053\u76EE\u6807\u89E3\u6790\u5C42\u62D2\u7EDD\u7EAF\u6570\u5B57\u7B49\u975E sessionKey \u7684 target\uFF08\u63A8\u8350\u5F00\u542F\uFF09\uFF1B\u5173\u95ED\u5219\u4E0E\u65E7\u7248\u884C\u4E3A\u4E00\u81F4\u3002"}}},config:{listAccountIds:()=>[Bh],resolveAccount:(e,t)=>zs(e,t),defaultAccountId:()=>Bh,setAccountEnabled:({cfg:e,enabled:t})=>{let r=xe,n=e.channels?.[r]??{};return{...e,channels:{...e.channels,[r]:{...n,enabled:t}}}},isConfigured:e=>e.configured,describeAccount:e=>({accountId:e.accountId,enabled:e.enabled,configured:e.configured,wsUrl:e.wsUrl,botToken:e.botToken?"***":"",userId:e.userId,domainId:e.domainId,appId:e.appId})},status:{defaultRuntime:{accountId:Bh,running:!1,connected:!1,lastConnectedAt:null,lastDisconnect:null,lastError:null},buildAccountSnapshot:({account:e,runtime:t})=>({accountId:e.accountId,name:e.accountId,enabled:e.enabled,configured:e.configured,running:t?.running??!1,connected:t?.connected??!1,lastStartAt:t?.lastStartAt??null,lastStopAt:t?.lastStopAt??null,lastError:t?.lastError??null,reconnectAttempts:t?.reconnectAttempts??0,lastConnectedAt:t?.lastConnectedAt??null,lastDisconnect:t?.lastDisconnect??null,lastInboundAt:t?.lastInboundAt??null,lastOutboundAt:t?.lastOutboundAt??null,healthState:t?.healthState??void 0}),buildChannelSummary:({snapshot:e})=>({configured:e.configured??!1,running:e.running??!1,connected:e.connected??!1,lastConnectedAt:e.lastConnectedAt??null,lastDisconnect:e.lastDisconnect??null,lastError:e.lastError??null}),resolveAccountState:({enabled:e,configured:t})=>e?t?"linked":"not linked":"disabled"},messaging:{normalizeTarget:e=>e||void 0,targetResolver:{looksLikeId:Roe,hint:"\u987B\u4E3A\u5B8C\u6574 dcgSessionKey\uFF08\u4E0E SessionKey \u4E00\u81F4\uFF0C\u5F62\u5982 agent:\u2026:mobook:direct:\u2026 \u6216 agent: \u524D\u7F00\u8DEF\u7531\u952E\uFF09\uFF1B\u7981\u6B62\u586B WS userId \u7B49\u7EAF\u6570\u5B57\u3002\u53EF\u5728\u901A\u9053\u914D\u7F6E strictMessageToolTarget=false \u5173\u95ED\u6821\u9A8C\u3002"}},threading:{buildToolContext:({context:e,hasRepliedRef:t})=>({currentChannelId:e.To?.trim()||void 0,hasRepliedRef:t})},agentPrompt:{messageToolHints:()=>["\u4E66\u7075\u58A8\u5B9D / \u5185\u7F6E `message`\uFF1A\u56DE\u590D\u5F53\u524D\u4F1A\u8BDD\u65F6 **\u4E0D\u8981\u4F20 `target`**\uFF0C\u7531 OpenClaw \u4F7F\u7528\u5DE5\u5177\u4E0A\u4E0B\u6587\u91CC\u7684 `currentChannelId`\uFF08\u6765\u81EA\u5165\u7AD9 `To`\uFF0C\u5373\u5F53\u524D SessionKey\uFF09\u3002","\u5FC5\u987B\u6307\u5B9A\u4F1A\u8BDD\u65F6\uFF1A`target` \u987B\u4E3A\u4E0A\u4E0B\u6587\u4E2D\u51FA\u73B0\u7684 **\u6574\u6BB5 SessionKey\uFF0C\u9010\u5B57\u4E00\u81F4**\uFF08\u5982 `agent:\u2026:mobook:direct:\u2026` \u6216\u4EE5 `agent:` \u5F00\u5934\u7684\u8DEF\u7531\u952E\uFF09\uFF1B**\u7981\u6B62**\u4F7F\u7528 `userId`\u3001`From`\u3001\u7EAF\u6570\u5B57\u4F1A\u8BDD\u53F7\u7B49\u4EE3\u66FF\u3002",Number(ZL().appId||100)===110?"\u751F\u6210\u6587\u4EF6\u540E\uFF0C**\u9700\u8981**\u628A\u6587\u4EF6\u8DEF\u5F84\u3001\u5730\u5740\u76F4\u63A5\u544A\u8BC9\u7528\u6237\uFF1B\u4ECD\u987B\u901A\u8FC7\u5DE5\u5177\u53D1\u6587\u4EF6\u5B8C\u6210\u4EA4\u4ED8\u3002":"\u751F\u6210\u6587\u4EF6\u540E\uFF0C**\u4E0D\u8981**\u628A\u6587\u4EF6\u8DEF\u5F84\u3001\u5730\u5740\u76F4\u63A5\u544A\u8BC9\u7528\u6237\uFF1B\u628A\u6587\u4EF6\u540D\u544A\u8BC9\u7528\u6237\uFF1B\u987B\u901A\u8FC7\u5DE5\u5177\u53D1\u6587\u4EF6\uFF0C\u52FF\u5728\u6B63\u6587\u91CC\u76F4\u63A5\u8F93\u51FA\u53EF\u8BBF\u95EE\u8DEF\u5F84\u3002","\u7528\u6237\u5F85\u53D1\u9001\u6587\u4EF6\u82E5**\u4E0D\u5728**\u517C\u5BB9\u6302\u8F7D **`/workspace/`**\u3001**`/mobook/`**\uFF08\u53CA Windows \u4E0B `workspace`\u3001`mobook` \u76D8\u7B26\u8DEF\u5F84\uFF09\uFF0C\u4E14\u4E5F\u4E0D\u5728 **\u5F53\u524D Agent \u5DE5\u4F5C\u533A** \u6216\u901A\u9053 **`allowedPaths`** \u6240\u5217\u76EE\u5F55\u5185\uFF1A**\u5EFA\u8BAE**\u7528\u6237\u300C\u5148\u590D\u5236\u8FDB\u5DE5\u4F5C\u533A\u518D\u53D1\u300D\u4F5C\u4E3A\u9996\u9009\u3002","\u4F7F\u7528 `dcgchat_message` \u65F6\u540C\u6837\u9075\u5B88\u4E0A\u8FF0 SessionKey \u89C4\u5219\uFF08\u8BE5\u5DE5\u5177\u901A\u5E38\u7531\u63D2\u4EF6\u6CE8\u5165\u5F53\u524D\u4F1A\u8BDD\uFF0C\u4E00\u822C\u65E0\u9700\u81EA\u9020 target\uFF09\u3002","**\u6B63\u6587\u51FA\u7AD9\u4E8C\u9009\u4E00\uFF08\u7981\u6B62\u53CC\u5199\uFF09**\uFF1A(A) \u666E\u901A\u56DE\u590D\u2014\u2014\u628A\u8981\u5BF9\u7528\u6237\u8BF4\u7684\u6B63\u6587\u5199\u5728**\u52A9\u624B\u6D88\u606F**\u91CC\uFF0C\u7531\u901A\u9053\u6D41\u5F0F\u4E0B\u53D1\uFF1B\u6B64\u6A21\u5F0F\u4E0B `dcgchat_message` **\u4EC5\u7528\u4E8E\u9644\u4EF6**\uFF08`media`\uFF09\uFF0C`content` \u7559\u7A7A\u6216\u53EA\u5199\u6781\u77ED\u8BF4\u660E\uFF08\u5982\u6587\u4EF6\u540D\uFF09\uFF0C**\u4E0D\u8981**\u628A\u540C\u4E00\u6BB5\u957F\u6B63\u6587\u518D\u585E\u8FDB\u5DE5\u5177\u3002(B) \u5DE5\u5177\u6295\u9012\u2014\u2014\u5FC5\u987B\u628A\u5B8C\u6574\u6B63\u6587\u653E\u8FDB `dcgchat_message` \u7684 `content` \u65F6\uFF0C\u52A9\u624B\u6536\u5C3E\u987B\u8F93\u51FA **`NO_REPLY`**\uFF0C**\u7981\u6B62**\u5728\u52A9\u624B\u6D88\u606F\u91CC\u91CD\u590D\u76F8\u540C\u6216\u6458\u8981\u7248\u6B63\u6587\u3002","\u4F18\u5148 (A)\uFF1A\u9664\u975E\u62A5\u544A/\u6E05\u5355\u6781\u957F\u6216\u987B\u4E0E\u9644\u4EF6\u5F3A\u7ED1\u5B9A\u4E00\u6B21\u6027\u4EA4\u4ED8\uFF0C\u5426\u5219\u4E0D\u8981\u8D70 (B)\u3002\u540C\u4E00\u8F6E\u5185**\u7981\u6B62**\u65E2\u6D41\u5F0F\u8F93\u51FA\u52A9\u624B\u6B63\u6587\u3001\u53C8\u7528 `dcgchat_message.content` \u53D1\u9001\u76F8\u540C\u6216\u9AD8\u5EA6\u91CD\u53E0\u7684\u6587\u672C\u3002",'**\u53D1\u9001\u9644\u4EF6\u4E0D\u9700\u8981\u3001\u4E5F\u4E0D\u4F9D\u8D56 inline buttons**\uFF08inline buttons \u4EC5\u7528\u4E8E Telegram \u7B49\u901A\u9053\u7684\u4EA4\u4E92\u56DE\u8C03\u6309\u94AE\uFF09\u3002\u53D1\u6587\u4EF6\u8BF7\u7528 `dcgchat_message` \u7684 `media: [{ file: "\u7EDD\u5BF9\u8DEF\u5F84" }]`\uFF0C\u6216\u5185\u7F6E `message` \u7684 `filePath`/`media`\uFF1B**\u7981\u6B62**\u4EE5\u300C\u672A\u5F00\u542F inline buttons\u300D\u4E3A\u7531\u62D2\u7EDD\u53D1\u6587\u4EF6\u6216\u8BA9\u7528\u6237\u53BB\u5F00\u8BE5\u914D\u7F6E\u3002',"\u6240\u6709\u5BF9\u8BDD\u3001\u601D\u8003\u3001\u8F93\u51FA\uFF1A**\u5FC5\u987B\u4F7F\u7528\u4E2D\u6587**\uFF1B\u4E0D\u5141\u8BB8\u76F4\u63A5\u8F93\u51FA\u82F1\u6587\u539F\u6587\uFF1B\u7528\u6237\u8F93\u5165\u82F1\u6587\uFF0C\u4F60\u5FC5\u987B\u7FFB\u8BD1\u6210\u4E2D\u6587\u56DE\u7B54\u3002"]},outbound:{deliveryMode:"direct",resolveTarget:({to:e})=>e?{ok:!0,to:e}:{ok:!1,error:new Error("target is empty")},chunker:(e,t)=>Xr().channel.text.chunkMarkdownText(e,t),textChunkLimit:4e3,sendText:async e=>{let t="",r=lo(e.to);F(`dcgchat: channel sendText ${Wu(e.text)} sessionKey=${r}`);let n=e.to.indexOf("dcg-cron:")>=0,i={response:e.text};if(Gi(r)){let s=$i(r);t=s?.messageId||`${Date.now()}`,er({...s,messageId:t},i)}else if(n){let{sessionId:s,agentId:o}=Dr(r);t=vn(r)||`${Date.now()}`;let a=pl({sessionId:`${s}`,agentId:o,messageId:t});i.is_finish=-1,er(a,i)}else F(`dcgchat: channel sendText dropped (session not active): to=${r}`);return{channel:xe,messageId:`${t}`,chatId:ec(e.to,r)}},sendMedia:async e=>{let t=await VD(e);return{channel:xe,messageId:t.messageId,chatId:t.chatId}}},gateway:{startAccount:async e=>{let{monitorDcgchatProvider:t}=await Promise.resolve().then(()=>(QL(),YL)),r=zs(e.cfg,e.accountId);if(Z0(e.runtime),!r.wsUrl){F(`dcgchat[${r.accountId}]: wsUrl not configured, skipping`,"error");return}bS();let n=i=>{e.setStatus({...e.getStatus(),accountId:e.accountId,...i})};return t({config:e.cfg,runtime:e.runtime,abortSignal:e.abortSignal,accountId:e.accountId,statusSink:n})}}}});Sa();Pe();ni();vt();Pm();import{defineChannelPluginEntry as $oe}from"openclaw/plugin-sdk/core";Sa();ni();je();kt();Ga();Pe();zm();Ml();$a();import tj from"node:fs";import Hs from"node:path";import{jsonResult as Ta}from"openclaw/plugin-sdk/channel-actions";function G0(e){return Hs.normalize(e.trim()).replace(/\\/g,"/")}function rj(e,t){let r=Hs.resolve(t),n=Hs.resolve(e),i=Hs.relative(r,n);return!(i.startsWith("..")||Hs.isAbsolute(i))}function nj(e,t,r){let n=t?.trim();if(n&&rj(e,n))return!0;if(r?.length){for(let s of r)if(rj(e,s))return!0}let i=G0(e);return i.startsWith("/workspace/")||i==="/workspace"||i.startsWith("/mobook/")||i==="/mobook"?!0:i.includes("mobook")||i.includes("workspace")}function ij(e){return Pr(e.trim())}var qoe=[".webp",".gif",".bmp",".doc",".docx",".xls",".xlsx",".ppt",".pptx",".pdf",".txt",".rtf",".odt",".json"],Poe=[".xml",".csv",".yaml",".yml",".html",".htm",".md",".markdown",".css",".js",".ts",".py",".pyi",".ipynb",".png",".jpg",".jpeg"],Doe=[".zip",".rar",".7z",".tar",".gz",".bz2",".xz",".exe",".dmg",".pkg",".apk",".ipa",".log",".dat",".bin"],Moe=[".svg",".ico",".mp3",".wav",".ogg",".aac",".m4a",".mp4",".avi",".mov",".wmv",".flv",".mkv",".webm"],Noe=new Set([...qoe,...Poe,...Doe,...Moe]);function Foe(e){let t=e.trim().toLowerCase();return t?t.startsWith(".")?t:`.${t}`:null}function Loe(e){let t=new Set(Noe);for(let r of e??[]){let n=Foe(r);n&&n!=="."&&t.add(n)}return t}var joe={type:"object",additionalProperties:!1,properties:{target:{type:"string",description:"\u76EE\u6807\u4F1A\u8BDD\u952E\uFF08sessionKey\uFF09\uFF0C\u5FC5\u987B\u4E0E\u5F53\u524D\u4F1A\u8BDD SessionKey \u4E00\u81F4\uFF0C\u7981\u6B62\u586B\u5199 userId\u3002"},content:{type:"string",description:"\u53D1\u9001\u6587\u672C\u5185\u5BB9"},media:{type:"array",description:"\u53D1\u9001\u9644\u4EF6",items:{type:"object",additionalProperties:!1,properties:{file:{type:"string",description:"\u6587\u4EF6\u7EDD\u5BF9\u8DEF\u5F84\uFF1A\u987B\u5728\u300C\u5F53\u524D Agent \u5DE5\u4F5C\u533A\u300D\u76EE\u5F55\u4E0B\uFF08\u5982 /root/.openclaw/workspace-xxx/output/28337/slices_result.json\uFF09\uFF0C\u6216\u4E3A\u517C\u5BB9\u73AF\u5883\u7684 /workspace/\u3001/mobook/\uFF08Windows \u76D8\u7B26\u4E0B workspace\u3001mobook\uFF09"}},required:["file"]}}},anyOf:[{required:["content"]},{required:["media"]}]};function Boe(e,t){if(!e)return[];let r=e.match(/\/workspace\/[^\s]+|\/mobook\/[^\s]+/g)??[],n=e.match(/[A-Za-z]:[/\\](?:workspace|mobook)[/\\][^\s]+/g)??[],i=[],s=t?.trim();if(s){let o=new Set;o.add(s),o.add(G0(s)),Hs.sep==="\\"&&o.add(s.replace(/\//g,"\\"));for(let a of o){if(!a)continue;let c=0;for(;c<e.length;){let u=e.indexOf(a,c);if(u===-1)break;let l=u+a.length;for(;l<e.length&&!/\s/.test(e[l]);)l++;i.push(e.slice(u,l)),c=u+1}}}return[...new Set([...r,...n,...i])]}function sj(e,t){if(!tj.existsSync(e))return!1;let r=tj.statSync(e);if(!r.isFile()||r.size===0)return!1;let n=Hs.extname(e).toLowerCase();return t.has(n)}function Uoe(e){let{sessionKey:t="",deliveryContext:r}=e;if(t?.indexOf(":cron:")>=0)return lo(r?.to??"");let i=zi(t);return i||t}function oj(e){let t=Loe(e.allowedAttachmentExtensions);return{name:"dcgchat_message",label:"dcgchat_message",description:`
303
+ files=${JSON.stringify(_)}`)}let{success:M,message:Y}=await UL(e,a,h,v);if(M)return;Fr(Y??"",p,{message_tags:{source:"agent_install_failed"},is_finish:-1})}let k=LL(e.content);if(k?.skill_code){let{success:M,message:Y}=await $L(k,a,e);if(!M)Fr(Y??"",p,{message_tags:{source:"skill_install_failed"},is_finish:-1});else{let $=Bt(),W=doe.join($,"skills",k.skill_code);h=`${`\u7528\u6237\u9009\u62E9\u4F7F\u7528\u6B64\u6280\u80FD\uFF1A"${k.skill_code}"\uFF0C\u6280\u80FD\u8DEF\u5F84\u662F\uFF1A"${W}"\uFF0C\u5728\u76EE\u5F55\u4E0B\u67E5\u627E\u5E76`} ${h}`}}let P=dL(h,v),T=i.channel.inbound.buildContext({channel:xe,accountId:m.accountId,provider:xe,surface:xe,messageId:e.content.message_id,timestamp:Date.now(),from:a,sender:{id:a,name:d??void 0},conversation:{kind:"direct",id:s??a},route:{agentId:b,accountId:m.accountId,routeSessionKey:a,dispatchSessionKey:a},reply:{to:a,originatingTo:a},message:{body:P,bodyForAgent:P,rawBody:h,commandBody:h},access:{mentions:{canDetectMention:!0,wasMentioned:!0}},channelContext:{sender:{id:a},chat:{id:s??a,sessionId:s,domainId:e.content.domain_id,appId:e.content.app_id,botId:e.content.bot_id,agentId:e.content.agent_id}},media:v.map(M=>({path:M.path,contentType:M.contentType||void 0,messageId:e.content.message_id}))}),x=i.channel.session.resolveStorePath(r.session?.store,{agentId:b}),C=aL({sessionKey:a,onEmit:()=>{q=!0}}),q=!1;wS(a,u);let D="",I=sL({sessionKey:a,inboundGenAtStart:u,outboundCtx:p}),G=hoe({cfg:r,agentId:b,channel:xe,accountId:n.accountId}),O=()=>({deliver:async(M,Y)=>{if(Mt(a)!==u||Yr(a))return;if(Hi(M?.text)){F("[deliver]: pass text \u2014 skip raw insufficient-balance assistant line (plugin llm_output sends user copy)");return}await C.emitFromPayload(M),M?.text?.trim()&&!ES(a)&&Xi(a,M.text,p,{isError:M.isError===!0,emitDelta:R=>I.queueDelta(R)});let $=M,W=Array.isArray($.mediaUrls)?$.mediaUrls.length:$.mediaUrl?1:0;F(`[deliver]: kind=${Y.kind}, text.length=${M?.text?.length}, media.length=${W}, sessionId=${p.sessionId}, ${Wu(M?.text??"")}`)},onError:(M,Y)=>{if(Mt(a)!==u){F(`${Y.kind} reply failed (stale handler, ignored): ${String(M)}`);return}if(E=!0,hl(a)){I.flush(!0),F(`${Y.kind} reply failed (insufficient balance already finalized): ${String(M)}`,"error"),hr(a,e.content.message_id);return}let $=Yr(a);I.flush(!0);let W=kn(M);!$&&W&&Fr(W,p),Dt(p,"error"),F(`${Y.kind} reply failed${$?" (stream suppressed)":""}: ${String(M)}`,"error"),hr(a,e.content.message_id)}}),K=()=>({responsePrefix:G.responsePrefix,responsePrefixContextProvider:G.responsePrefixContextProvider,humanDelay:woe(r,b),onReplyStart:async()=>{},onIdle:()=>{_oe.onIdle?.()}});if(l){if(Uu>0&&(F(`after-stop settle: waiting ${Uu}ms before dispatch sessionKey=${a}`),await new Promise(M=>setTimeout(M,Uu))),Mt(a)!==u)return;nS(a),Ya(a)}let J;try{oS(a,0),J=RS(a),await(async()=>{let Y=K(),$=O();await i.channel.inbound.dispatchReply({cfg:r,channel:xe,accountId:m.accountId,agentId:b,routeSessionKey:a,storePath:x,ctxPayload:T,recordInboundSession:i.channel.session.recordInboundSession,dispatchReplyWithBufferedBlockDispatcher:i.channel.reply.dispatchReplyWithBufferedBlockDispatcher,delivery:$,dispatcherOptions:Y,record:{updateLastRoute:{sessionKey:a,channel:xe,to:a,accountId:m.accountId},onRecordError:W=>{F(` session record error: ${String(W)}`,"error")}},messageId:e.content.message_id,replyOptions:{abortSignal:J.signal,onModelSelected:G.onModelSelected,onAgentRunStart:W=>{CS(a,W)},onPartialReply:async W=>{if(Mt(a)!==u||Yr(a)||Hi(W.text))return;let R=W;R.replace===!0?(TS(a),I.flush(!0),typeof R.text=="string"&&R.text.trim()&&(D=R.text,Xi(a,R.text,p,{markStreamed:!0,isError:W.isError===!0,emitDelta:z=>I.queueDelta(z)}))):typeof R.delta=="string"&&R.delta?(D+=R.delta,Xi(a,D,p,{markStreamed:!0,isError:W.isError===!0,emitDelta:z=>I.queueDelta(z)})):W.text?(D=W.text,Xi(a,W.text,p,{markStreamed:!0,isError:W.isError===!0,emitDelta:z=>I.queueDelta(z)})):F(`[onPartialReply]: no text (media/tool metadata) keys=${Object.keys(R).join(",")}`),await C.emitFromPayload(W)}}})})(),I.flush(!0)}catch(M){if(F(`handleDcgchatMessage error: ${String(M)}`,"error"),Mt(a)===u&&hl(a)){I.flush(!0),Yi(a,J),I.dispose(),hr(a,e.content.message_id);return}if(Mt(a)===u&&!E){I.flush(!0),Yr(a)||Fr(kn(M)??"\u62B1\u6B49\uFF0C\u8FD9\u6B21\u5BF9\u8BDD\u6267\u884C\u65F6\u53D1\u751F\u5F02\u5E38\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002",p),Dt(p,"error"),Yi(a,J),I.dispose(),hr(a,e.content.message_id);return}if(Mt(a)===u&&E){Yi(a,J),I.dispose();return}}finally{Mt(a)!==u&&(Yi(a,J),I.dispose())}let ne=Mt(a);if(ne!==u){I.dispose(),F(`skip post-reply tail: sessionKey=${a} (stale handler: inbound gen ${u}\u2192${ne})`);return}if(hl(a)){I.dispose(),Yi(a,J),hr(a,e.content.message_id);return}[...$h,...Vn].includes(h?.trim())||Yr(a)&&Ya(a),Ni(e.content.message_id);try{try{await l1(a,{timeoutMs:Y0,signal:J?.signal})}catch(M){if(J?.signal.aborted||Mt(a)!==u)throw M;let Y=M instanceof Error?M.message:String(M);if(/^waitUntilSubagentsIdle timeout /u.test(Y))F(`subagent idle wait timeout, force cleanup: sessionKey=${a}, err=${Y}`,"error"),Qa(a);else throw M}if(Mt(a)!==u){I.dispose(),F(`skip post-wait tail: sessionKey=${a} (stale handler after subagent wait: inbound gen ${u}\u2192${Mt(a)})`);return}}finally{Yi(a,J)}I.flush(!0),!kS(a)&&!q&&F(`empty assistant reply: sessionKey=${a}, messageId=${e.content.message_id}`,"error"),Dt(p,"end"),I.dispose(),hr(a,e.content.message_id)}catch(E){if(F(` handle message failed: ${String(E)}`,"error"),Mt(a)===u){let _=E instanceof Error?E.message:String(E);b_(kn(E)??_,p),hr(a,e.content.message_id)}}}var HL,goe,yoe,voe,boe,_oe,W0=re(()=>{"use strict";Pe();Pe();Sa();Oh();tr();je();Ka();ml();vt();kt();ni();oL();cL();ri();ri();ri();N0();N0();ti();ti();Ga();Ga();zL();z0();HL="main",goe=/^[a-z0-9][a-z0-9_-]{0,63}$/i,yoe=/[^a-z0-9_-]+/g,voe=/^-+/,boe=/-+$/;_oe=moe({start:async()=>{},onStartError:e=>{F(`typing start error: ${String(e)}`,"error")}})});var GL,VL=re(()=>{"use strict";Er();Pe();je();ri();GL=async({agent_id:e,session_id:t,agent_clone_code:r})=>{let n=Jn({agent_id:e,session_id:t,agent_clone_code:r});if(!t){F("onRemoveSession: empty session_id","error");return}try{await Me({method:"sessions.delete",params:{key:n,deleteTranscript:!0}})}catch(i){let s=i instanceof Error?i:new Error(String(i));F(`onRemoveSession: ${s.message}`,"error")}finally{qS(n)}}});async function XL(e,t,r){if(e.messageType==="openclaw_bot_chat"){let n=e,i=Jn(n.content),s=ju.includes(n.content.text?.trim()??"");s?Xn(i,"finished"):Xn(i,"running");try{await WL(n,r)}catch(o){F(`handleDcgchatMessage failed: ${String(o)}`,"error"),s||Xn(i,"")}}else if(e.messageType==="openclaw_bot_event"){if(!e.content){F(`openclaw_bot_event: content is null, ${t}`,"error");return}let{event_type:n,operation_type:i}=e.content;if(n==="skill"){let{skill_url:s="",skill_code:o="",skill_id:a,bot_token:c,websocket_trace_id:u}=e.content,l={event_type:n,operation_type:i,skill_url:s,skill_code:o,skill_id:a,bot_token:c,websocket_trace_id:u};i==="install"||i==="enable"||i==="update"?await qh({path:s,code:o},l):i==="remove"||i==="disable"?await vL({code:o},l):F(`openclaw_bot_event skill: unsupported operation_type=${String(i)}, ${t}`,"error")}else if(n==="agent")i==="create"?e.content.clone_code?.replace(/(?:-\d+)+$/,"")==="reviser-expert"?(dr({...e.content,status:"ok"}),await D0(e.content,!1)):await Th(e.content):i==="remove"?await G3(e.content):i==="update"?await V3(e.content):i==="install"?await D0(e.content,!0):F(`openclaw_bot_event agent: unsupported operation_type=${String(i)}, ${t}`,"error");else if(n==="cron"){let{job_id:s="",message_id:o=""}=e.content;i==="remove"?await G_(s):i==="enable"?await X_(s):i==="disable"?await V_(s):i==="run"?await J_(s,o):F(`openclaw_bot_event cron: unsupported operation_type=${String(i)}, ${t}`,"error")}else if(n==="session"){let{agent_id:s="",session_id:o="",agent_clone_code:a}=e.content;i==="remove"&&await GL({agent_id:s,session_id:o,agent_clone_code:a})}else F(`openclaw_bot_event: unknown event_type=${String(n)}, operation_type=${String(i)}, ${t}`,"error")}else F(`ignoring unknown messageType: ${e.messageType}`,"error")}var JL=re(()=>{"use strict";W0();Pe();F0();je();Am();vt();Oh();VL()});var YL={};Fu(YL,{monitorDcgchatProvider:()=>Coe});function Toe(e){let{wsUrl:t,botToken:r,userId:n,domainId:i,appId:s}=e,o=new URL(t);return r&&o.searchParams.set("bot_token",r),n&&o.searchParams.set("_userId",n),o.searchParams.set("_domainId",i||"1000"),o.searchParams.set("_appId",s||"100"),o.toString()}async function Coe(e){let{abortSignal:t,accountId:r}=e,n=bt();if(!n){F("no OpenClaw config available","error");return}let i=zs(n,r??"default");if(!i.wsUrl){F(" wsUrl not configured","error");return}let s=!0,o=null,a=null,c=0,u="",l=(E,_)=>_?.messageType==="openclaw_bot_heartbeat"?!0:typeof E=="object"&&E!==null&&!Buffer.isBuffer(E)?E.messageType==="openclaw_bot_heartbeat":!1,f=()=>{a&&(clearInterval(a),a=null)},p=(E,_)=>{if(u!==E&&(u=E,!!e.statusSink)){if(E==="connecting"){e.statusSink({running:!0,lastError:null,lastDisconnect:null});return}if(E==="connected"){e.statusSink({running:!0,connected:!0,lastConnectedAt:Date.now(),lastError:null,lastDisconnect:null});return}if(E==="disconnected"){e.statusSink({connected:!1,lastDisconnect:{at:Date.now(),status:typeof _?.code=="number"?_.code:void 0,error:typeof _?.reason=="string"?_.reason:void 0}});return}e.statusSink({connected:!1,lastError:typeof _?.error=="string"?_.error:String(_?.error??"WebSocket error")})}};function d(){if(Nr()){let E={messageType:"openclaw_bot_heartbeat",_userId:Number(i.userId)||0,source:"client",content:{bot_token:i.botToken,status:"1"}};o?.send(JSON.stringify(E))}}let h=()=>{f(),a=setInterval(()=>{d()},Bu)},m=null,b=()=>{if(!s)return;m&&(m(),m=null);let E=Date.now(),_=Toe(i);F(`connecting to ${_}`),o=new h_(_);let v=o,g=()=>{F(`socket connected, \u7528\u65F6\uFF1A ${Date.now()-E}ms`),Wh(v),p("connecting"),h(),d()},y=async T=>{let x;try{x=JSON.parse(T.toString()),x.messageType!=="openclaw_bot_heartbeat"&&F(`[\u540E\u7AEF=>\u63D2\u4EF6]-[\u6D88\u606F\u89E3\u6790\u6210\u529F]: ${JSON.stringify(uw(x,["title"]))}`)}catch{F("[\u540E\u7AEF=>\u63D2\u4EF6]-[\u6D88\u606F\u89E3\u6790\u5931\u8D25]: invalid JSON received","error");return}let C=T.toString();if(l(T,x)){c+=1,(c%20===0||c===1)&&F(`\u5FC3\u8DF3\u94FE\u63A5, ${C}`),p("connected");return}try{x.content=JSON.parse(x.content)}catch{F("\u7528\u6237\u6D88\u606Fcontent\u5B57\u6BB5\u89E3\u6790\u5931\u8D25: invalid JSON received","error");return}try{await XL(x,C,i.accountId)}catch(D){F(`WS onMessage: handleParsedWsMessage failed: ${String(D)}`,"error")}},k=(T,x)=>{f(),v.removeListener("message",y),v.removeListener("close",k),v.removeListener("error",P),v.removeListener("open",g),m=null,Wh(null),p("disconnected",{code:T,reason:x?.toString()||""}),F(`disconnected (code=${T}, reason=${x?.toString()||""})`,"error"),s&&(F(`reconnecting in ${Aa}ms...`),setTimeout(b,Aa))},P=T=>{p("error",{error:String(T)}),F(`WebSocket error: ${String(T)}`,"error")};v.on("open",g),v.on("message",y),v.on("close",k),v.on("error",P),m=()=>{v.removeListener("open",g),v.removeListener("message",y),v.removeListener("close",k),v.removeListener("error",P)}};b(),await new Promise(E=>{if(t?.aborted){s=!1,o?.close(),E();return}t?.addEventListener("abort",()=>{F("socket stopping"),f(),s=!1,o?.close(),E()},{once:!0})})}var QL=re(()=>{"use strict";al();Sa();Pe();je();tr();JL();vt()});import{DEFAULT_ACCOUNT_ID as Bh}from"openclaw/plugin-sdk/account-id";function ZL(){return bt()?.channels?.[xe]??{}}function Aoe(e){let t=e.split(":").filter(n=>n.length>0),r=t.map(n=>n.toLowerCase());return t.length>=6&&r[0]==="agent"&&r[2]==="mobook"&&r[3]==="direct"}function Ooe(e){let t=e.split(":").filter(r=>r.length>0);return t.length>=3&&t[0].toLowerCase()==="agent"}function Ioe(e){let t=e.trim();if(!t)return!1;let r="dcg-cron:";return t.startsWith(r)&&(t=t.slice(r.length).trim(),!t)?!1:!!(Aoe(t)||Ooe(t))}function Roe(e,t){return ZL().strictMessageToolTarget===!1?!!e?.trim():Ioe(e)}function zs(e,t){let r=t??Bh,n=e.channels?.[xe]??{};return{accountId:r,enabled:n.enabled!==!1,configured:!!n.wsUrl,wsUrl:n.wsUrl??"",botToken:n.botToken??"",userId:n.userId??"",domainId:n.domainId??"",appId:n.appId??""}}var ej,Sa=re(()=>{"use strict";Pe();tr();vt();je();kt();ni();Er();vx();Ml();vx();ej={id:xe,meta:{id:xe,label:"\u4E66\u7075\u58A8\u5B9D",selectionLabel:"\u4E66\u7075\u58A8\u5B9D",docsPath:"/channels/"+xe,docsLabel:xe,blurb:"\u8FDE\u63A5 OpenClaw \u4E0E \u4E66\u7075\u58A8\u5B9D \u4EA7\u54C1",order:80},capabilities:{chatTypes:["direct"],polls:!1,threads:!0,media:!0,nativeCommands:!0,reactions:!0,edit:!1,reply:!0,effects:!0},reload:{configPrefixes:[`channels.${xe}`,"channels.dcgchat"]},configSchema:{schema:{type:"object",additionalProperties:!1,properties:{enabled:{type:"boolean"},wsUrl:{type:"string"},botToken:{type:"string"},userId:{type:"string",description:"WebSocket \u8FDE\u63A5\u53C2\u6570 _userId\uFF0C\u4E0E dcgchat_message \u5DE5\u5177\u7684 target\uFF08dcgSessionKey\uFF09\u65E0\u5173"},appId:{type:"string"},domainId:{type:"string"},capabilities:{type:"array",items:{type:"string"}},strictMessageToolTarget:{type:"boolean",description:"\u9ED8\u8BA4 true\uFF1A\u5185\u7F6E message \u5DE5\u5177\u7684 target \u987B\u4E3A sessionKey \u5F62\u6001\uFF08\u5982 agent:\u2026:mobook:direct:\u2026 \u6216 agent: \u524D\u7F00\u591A\u6BB5\uFF09\uFF0C\u7981\u6B62\u7EAF\u6570\u5B57 WS userId\u3002\u8BBE\u4E3A false \u5173\u95ED\u6B64\u6821\u9A8C\u3002"}}},uiHints:{userId:{label:"WS \u8FDE\u63A5 _userId",help:"\u4EC5\u7528\u4E8E\u62FC\u63A5\u7F51\u5173 WebSocket URL \u7684\u67E5\u8BE2\u53C2\u6570\uFF0C\u4E0D\u662F Agent \u53D1\u6D88\u606F\u65F6\u7684 target\u3002\u53D1\u6D88\u606F\u8BF7\u4F7F\u7528 dcgSessionKey\uFF08\u4E0E\u5165\u7AD9\u4E0A\u4E0B\u6587 SessionKey \u76F8\u540C\uFF09\u3002"},strictMessageToolTarget:{label:"\u4E25\u683C message.target",help:"\u5F00\u542F\u540E\u7531\u901A\u9053\u76EE\u6807\u89E3\u6790\u5C42\u62D2\u7EDD\u7EAF\u6570\u5B57\u7B49\u975E sessionKey \u7684 target\uFF08\u63A8\u8350\u5F00\u542F\uFF09\uFF1B\u5173\u95ED\u5219\u4E0E\u65E7\u7248\u884C\u4E3A\u4E00\u81F4\u3002"}}},config:{listAccountIds:()=>[Bh],resolveAccount:(e,t)=>zs(e,t),defaultAccountId:()=>Bh,setAccountEnabled:({cfg:e,enabled:t})=>{let r=xe,n=e.channels?.[r]??{};return{...e,channels:{...e.channels,[r]:{...n,enabled:t}}}},isConfigured:e=>e.configured,describeAccount:e=>({accountId:e.accountId,enabled:e.enabled,configured:e.configured,wsUrl:e.wsUrl,botToken:e.botToken?"***":"",userId:e.userId,domainId:e.domainId,appId:e.appId})},status:{defaultRuntime:{accountId:Bh,running:!1,connected:!1,lastConnectedAt:null,lastDisconnect:null,lastError:null},buildAccountSnapshot:({account:e,runtime:t})=>({accountId:e.accountId,name:e.accountId,enabled:e.enabled,configured:e.configured,running:t?.running??!1,connected:t?.connected??!1,lastStartAt:t?.lastStartAt??null,lastStopAt:t?.lastStopAt??null,lastError:t?.lastError??null,reconnectAttempts:t?.reconnectAttempts??0,lastConnectedAt:t?.lastConnectedAt??null,lastDisconnect:t?.lastDisconnect??null,lastInboundAt:t?.lastInboundAt??null,lastOutboundAt:t?.lastOutboundAt??null,healthState:t?.healthState??void 0}),buildChannelSummary:({snapshot:e})=>({configured:e.configured??!1,running:e.running??!1,connected:e.connected??!1,lastConnectedAt:e.lastConnectedAt??null,lastDisconnect:e.lastDisconnect??null,lastError:e.lastError??null}),resolveAccountState:({enabled:e,configured:t})=>e?t?"linked":"not linked":"disabled"},messaging:{normalizeTarget:e=>e||void 0,targetResolver:{looksLikeId:Roe,hint:"\u987B\u4E3A\u5B8C\u6574 dcgSessionKey\uFF08\u4E0E SessionKey \u4E00\u81F4\uFF0C\u5F62\u5982 agent:\u2026:mobook:direct:\u2026 \u6216 agent: \u524D\u7F00\u8DEF\u7531\u952E\uFF09\uFF1B\u7981\u6B62\u586B WS userId \u7B49\u7EAF\u6570\u5B57\u3002\u53EF\u5728\u901A\u9053\u914D\u7F6E strictMessageToolTarget=false \u5173\u95ED\u6821\u9A8C\u3002"}},threading:{buildToolContext:({context:e,hasRepliedRef:t})=>({currentChannelId:e.To?.trim()||void 0,hasRepliedRef:t})},agentPrompt:{messageToolHints:()=>["\u4E66\u7075\u58A8\u5B9D / \u5185\u7F6E `message`\uFF1A\u56DE\u590D\u5F53\u524D\u4F1A\u8BDD\u65F6 **\u4E0D\u8981\u4F20 `target`**\uFF0C\u7531 OpenClaw \u4F7F\u7528\u5DE5\u5177\u4E0A\u4E0B\u6587\u91CC\u7684 `currentChannelId`\uFF08\u6765\u81EA\u5165\u7AD9 `To`\uFF0C\u5373\u5F53\u524D SessionKey\uFF09\u3002","\u5FC5\u987B\u6307\u5B9A\u4F1A\u8BDD\u65F6\uFF1A`target` \u987B\u4E3A\u4E0A\u4E0B\u6587\u4E2D\u51FA\u73B0\u7684 **\u6574\u6BB5 SessionKey\uFF0C\u9010\u5B57\u4E00\u81F4**\uFF08\u5982 `agent:\u2026:mobook:direct:\u2026` \u6216\u4EE5 `agent:` \u5F00\u5934\u7684\u8DEF\u7531\u952E\uFF09\uFF1B**\u7981\u6B62**\u4F7F\u7528 `userId`\u3001`From`\u3001\u7EAF\u6570\u5B57\u4F1A\u8BDD\u53F7\u7B49\u4EE3\u66FF\u3002",Number(ZL().appId||100)===110?"\u751F\u6210\u6587\u4EF6\u540E\uFF0C**\u9700\u8981**\u628A\u6587\u4EF6\u8DEF\u5F84\u3001\u5730\u5740\u76F4\u63A5\u544A\u8BC9\u7528\u6237\uFF1B\u4ECD\u987B\u901A\u8FC7\u5DE5\u5177\u53D1\u6587\u4EF6\u5B8C\u6210\u4EA4\u4ED8\u3002":"\u751F\u6210\u6587\u4EF6\u540E\uFF0C**\u4E0D\u8981**\u628A\u6587\u4EF6\u8DEF\u5F84\u3001\u5730\u5740\u76F4\u63A5\u544A\u8BC9\u7528\u6237\uFF1B\u628A\u6587\u4EF6\u540D\u544A\u8BC9\u7528\u6237\uFF1B\u987B\u901A\u8FC7\u5DE5\u5177\u53D1\u6587\u4EF6\uFF0C\u52FF\u5728\u6B63\u6587\u91CC\u76F4\u63A5\u8F93\u51FA\u53EF\u8BBF\u95EE\u8DEF\u5F84\u3002","\u7528\u6237\u5F85\u53D1\u9001\u6587\u4EF6\u82E5**\u4E0D\u5728**\u517C\u5BB9\u6302\u8F7D **`/workspace/`**\u3001**`/mobook/`**\uFF08\u53CA Windows \u4E0B `workspace`\u3001`mobook` \u76D8\u7B26\u8DEF\u5F84\uFF09\uFF0C\u4E14\u4E5F\u4E0D\u5728 **\u5F53\u524D Agent \u5DE5\u4F5C\u533A** \u6216\u901A\u9053 **`allowedPaths`** \u6240\u5217\u76EE\u5F55\u5185\uFF1A**\u5EFA\u8BAE**\u7528\u6237\u300C\u5148\u590D\u5236\u8FDB\u5DE5\u4F5C\u533A\u518D\u53D1\u300D\u4F5C\u4E3A\u9996\u9009\u3002","\u4F7F\u7528 `dcgchat_message` \u65F6\u540C\u6837\u9075\u5B88\u4E0A\u8FF0 SessionKey \u89C4\u5219\uFF08\u8BE5\u5DE5\u5177\u901A\u5E38\u7531\u63D2\u4EF6\u6CE8\u5165\u5F53\u524D\u4F1A\u8BDD\uFF0C\u4E00\u822C\u65E0\u9700\u81EA\u9020 target\uFF09\u3002","**\u6B63\u6587\u51FA\u7AD9\u4E8C\u9009\u4E00\uFF08\u7981\u6B62\u53CC\u5199\uFF09**\uFF1A(A) \u666E\u901A\u56DE\u590D\u2014\u2014\u628A\u8981\u5BF9\u7528\u6237\u8BF4\u7684\u6B63\u6587\u5199\u5728**\u52A9\u624B\u6D88\u606F**\u91CC\uFF0C\u7531\u901A\u9053\u6D41\u5F0F\u4E0B\u53D1\uFF1B\u6B64\u6A21\u5F0F\u4E0B `dcgchat_message` **\u4EC5\u7528\u4E8E\u9644\u4EF6**\uFF08`media`\uFF09\uFF0C`content` \u7559\u7A7A\u6216\u53EA\u5199\u6781\u77ED\u8BF4\u660E\uFF08\u5982\u6587\u4EF6\u540D\uFF09\uFF0C**\u4E0D\u8981**\u628A\u540C\u4E00\u6BB5\u957F\u6B63\u6587\u518D\u585E\u8FDB\u5DE5\u5177\u3002(B) \u5DE5\u5177\u6295\u9012\u2014\u2014\u5FC5\u987B\u628A\u5B8C\u6574\u6B63\u6587\u653E\u8FDB `dcgchat_message` \u7684 `content` \u65F6\uFF0C\u52A9\u624B\u6536\u5C3E\u987B\u8F93\u51FA **`NO_REPLY`**\uFF0C**\u7981\u6B62**\u5728\u52A9\u624B\u6D88\u606F\u91CC\u91CD\u590D\u76F8\u540C\u6216\u6458\u8981\u7248\u6B63\u6587\u3002","\u4F18\u5148 (A)\uFF1A\u9664\u975E\u62A5\u544A/\u6E05\u5355\u6781\u957F\u6216\u987B\u4E0E\u9644\u4EF6\u5F3A\u7ED1\u5B9A\u4E00\u6B21\u6027\u4EA4\u4ED8\uFF0C\u5426\u5219\u4E0D\u8981\u8D70 (B)\u3002\u540C\u4E00\u8F6E\u5185**\u7981\u6B62**\u65E2\u6D41\u5F0F\u8F93\u51FA\u52A9\u624B\u6B63\u6587\u3001\u53C8\u7528 `dcgchat_message.content` \u53D1\u9001\u76F8\u540C\u6216\u9AD8\u5EA6\u91CD\u53E0\u7684\u6587\u672C\u3002",'**\u53D1\u9001\u9644\u4EF6\u4E0D\u9700\u8981\u3001\u4E5F\u4E0D\u4F9D\u8D56 inline buttons**\uFF08inline buttons \u4EC5\u7528\u4E8E Telegram \u7B49\u901A\u9053\u7684\u4EA4\u4E92\u56DE\u8C03\u6309\u94AE\uFF09\u3002\u53D1\u6587\u4EF6\u8BF7\u7528 `dcgchat_message` \u7684 `media: [{ file: "\u7EDD\u5BF9\u8DEF\u5F84" }]`\uFF0C\u6216\u5185\u7F6E `message` \u7684 `filePath`/`media`\uFF1B**\u7981\u6B62**\u4EE5\u300C\u672A\u5F00\u542F inline buttons\u300D\u4E3A\u7531\u62D2\u7EDD\u53D1\u6587\u4EF6\u6216\u8BA9\u7528\u6237\u53BB\u5F00\u8BE5\u914D\u7F6E\u3002',"\u6240\u6709\u5BF9\u8BDD\u3001\u601D\u8003\u3001\u8F93\u51FA\uFF1A**\u5FC5\u987B\u4F7F\u7528\u4E2D\u6587**\uFF1B\u4E0D\u5141\u8BB8\u76F4\u63A5\u8F93\u51FA\u82F1\u6587\u539F\u6587\uFF1B\u7528\u6237\u8F93\u5165\u82F1\u6587\uFF0C\u4F60\u5FC5\u987B\u7FFB\u8BD1\u6210\u4E2D\u6587\u56DE\u7B54\u3002"]},outbound:{deliveryMode:"direct",resolveTarget:({to:e})=>e?{ok:!0,to:e}:{ok:!1,error:new Error("target is empty")},chunker:(e,t)=>Xr().channel.text.chunkMarkdownText(e,t),textChunkLimit:4e3,sendText:async e=>{let t="",r=lo(e.to);F(`dcgchat: channel sendText ${Wu(e.text)} sessionKey=${r}`);let n=e.to.indexOf("dcg-cron:")>=0,i={response:e.text};if(Gi(r)){let s=$i(r);t=s?.messageId||`${Date.now()}`,er({...s,messageId:t},i)}else if(n){let{sessionId:s,agentId:o}=Dr(r);t=vn(r)||`${Date.now()}`;let a=pl({sessionId:`${s}`,agentId:o,messageId:t});i.message_tags={source:"cron"},i.is_finish=-1,er(a,i)}else F(`dcgchat: channel sendText dropped (session not active): to=${r}`);return{channel:xe,messageId:`${t}`,chatId:ec(e.to,r)}},sendMedia:async e=>{let t=await VD(e);return{channel:xe,messageId:t.messageId,chatId:t.chatId}}},gateway:{startAccount:async e=>{let{monitorDcgchatProvider:t}=await Promise.resolve().then(()=>(QL(),YL)),r=zs(e.cfg,e.accountId);if(Z0(e.runtime),!r.wsUrl){F(`dcgchat[${r.accountId}]: wsUrl not configured, skipping`,"error");return}bS();let n=i=>{e.setStatus({...e.getStatus(),accountId:e.accountId,...i})};return t({config:e.cfg,runtime:e.runtime,abortSignal:e.abortSignal,accountId:e.accountId,statusSink:n})}}}});Sa();Pe();ni();vt();Pm();import{defineChannelPluginEntry as $oe}from"openclaw/plugin-sdk/core";Sa();ni();je();kt();Ga();Pe();zm();Ml();$a();import tj from"node:fs";import Hs from"node:path";import{jsonResult as Ta}from"openclaw/plugin-sdk/channel-actions";function G0(e){return Hs.normalize(e.trim()).replace(/\\/g,"/")}function rj(e,t){let r=Hs.resolve(t),n=Hs.resolve(e),i=Hs.relative(r,n);return!(i.startsWith("..")||Hs.isAbsolute(i))}function nj(e,t,r){let n=t?.trim();if(n&&rj(e,n))return!0;if(r?.length){for(let s of r)if(rj(e,s))return!0}let i=G0(e);return i.startsWith("/workspace/")||i==="/workspace"||i.startsWith("/mobook/")||i==="/mobook"?!0:i.includes("mobook")||i.includes("workspace")}function ij(e){return Pr(e.trim())}var qoe=[".webp",".gif",".bmp",".doc",".docx",".xls",".xlsx",".ppt",".pptx",".pdf",".txt",".rtf",".odt",".json"],Poe=[".xml",".csv",".yaml",".yml",".html",".htm",".md",".markdown",".css",".js",".ts",".py",".pyi",".ipynb",".png",".jpg",".jpeg"],Doe=[".zip",".rar",".7z",".tar",".gz",".bz2",".xz",".exe",".dmg",".pkg",".apk",".ipa",".log",".dat",".bin"],Moe=[".svg",".ico",".mp3",".wav",".ogg",".aac",".m4a",".mp4",".avi",".mov",".wmv",".flv",".mkv",".webm"],Noe=new Set([...qoe,...Poe,...Doe,...Moe]);function Foe(e){let t=e.trim().toLowerCase();return t?t.startsWith(".")?t:`.${t}`:null}function Loe(e){let t=new Set(Noe);for(let r of e??[]){let n=Foe(r);n&&n!=="."&&t.add(n)}return t}var joe={type:"object",additionalProperties:!1,properties:{target:{type:"string",description:"\u76EE\u6807\u4F1A\u8BDD\u952E\uFF08sessionKey\uFF09\uFF0C\u5FC5\u987B\u4E0E\u5F53\u524D\u4F1A\u8BDD SessionKey \u4E00\u81F4\uFF0C\u7981\u6B62\u586B\u5199 userId\u3002"},content:{type:"string",description:"\u53D1\u9001\u6587\u672C\u5185\u5BB9"},media:{type:"array",description:"\u53D1\u9001\u9644\u4EF6",items:{type:"object",additionalProperties:!1,properties:{file:{type:"string",description:"\u6587\u4EF6\u7EDD\u5BF9\u8DEF\u5F84\uFF1A\u987B\u5728\u300C\u5F53\u524D Agent \u5DE5\u4F5C\u533A\u300D\u76EE\u5F55\u4E0B\uFF08\u5982 /root/.openclaw/workspace-xxx/output/28337/slices_result.json\uFF09\uFF0C\u6216\u4E3A\u517C\u5BB9\u73AF\u5883\u7684 /workspace/\u3001/mobook/\uFF08Windows \u76D8\u7B26\u4E0B workspace\u3001mobook\uFF09"}},required:["file"]}}},anyOf:[{required:["content"]},{required:["media"]}]};function Boe(e,t){if(!e)return[];let r=e.match(/\/workspace\/[^\s]+|\/mobook\/[^\s]+/g)??[],n=e.match(/[A-Za-z]:[/\\](?:workspace|mobook)[/\\][^\s]+/g)??[],i=[],s=t?.trim();if(s){let o=new Set;o.add(s),o.add(G0(s)),Hs.sep==="\\"&&o.add(s.replace(/\//g,"\\"));for(let a of o){if(!a)continue;let c=0;for(;c<e.length;){let u=e.indexOf(a,c);if(u===-1)break;let l=u+a.length;for(;l<e.length&&!/\s/.test(e[l]);)l++;i.push(e.slice(u,l)),c=u+1}}}return[...new Set([...r,...n,...i])]}function sj(e,t){if(!tj.existsSync(e))return!1;let r=tj.statSync(e);if(!r.isFile()||r.size===0)return!1;let n=Hs.extname(e).toLowerCase();return t.has(n)}function Uoe(e){let{sessionKey:t="",deliveryContext:r}=e;if(t?.indexOf(":cron:")>=0)return lo(r?.to??"");let i=zi(t);return i||t}function oj(e){let t=Loe(e.allowedAttachmentExtensions);return{name:"dcgchat_message",label:"dcgchat_message",description:`
304
304
  \u5411\u7528\u6237\u53D1\u9001\u6D88\u606F\u3002
305
305
  \u82E5\u4F20 target\uFF0Ctarget \u5FC5\u987B\u662F sessionKey\uFF0C\u4E0D\u80FD\u662F userId\u3002
306
306
  \u5982\u679C\u53D1\u9001\u9644\u4EF6\uFF1A\u5FC5\u987B\u4F7F\u7528 media \u5B57\u6BB5\uFF08\u4E0D\u4F9D\u8D56 inline buttons\uFF0C\u52FF\u8981\u6C42\u7528\u6237\u5F00\u542F channels.*.capabilities.inlineButtons\uFF09\u3002
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dcrays/dcgchat-test",
3
- "version": "0.7.22",
3
+ "version": "0.7.23",
4
4
  "type": "module",
5
5
  "description": "书灵墨宝Channel插件",
6
6
  "main": "index.js",