@sapienx/agentos 0.6.1 → 0.6.2

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 (75) hide show
  1. package/bin/agentos.js +293 -4
  2. package/bundle/.next/BUILD_ID +1 -1
  3. package/bundle/.next/app-path-routes-manifest.json +9 -9
  4. package/bundle/.next/build-manifest.json +2 -2
  5. package/bundle/.next/prerender-manifest.json +3 -3
  6. package/bundle/.next/server/app/_global-error.html +1 -1
  7. package/bundle/.next/server/app/_global-error.rsc +1 -1
  8. package/bundle/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  9. package/bundle/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  10. package/bundle/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  11. package/bundle/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  12. package/bundle/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  13. package/bundle/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  14. package/bundle/.next/server/app/_not-found.html +1 -1
  15. package/bundle/.next/server/app/_not-found.rsc +1 -1
  16. package/bundle/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  17. package/bundle/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  18. package/bundle/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  19. package/bundle/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  20. package/bundle/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  21. package/bundle/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  22. package/bundle/.next/server/app/agents/page.js.nft.json +1 -1
  23. package/bundle/.next/server/app/api/agents/[agentId]/chat/route.js.nft.json +1 -1
  24. package/bundle/.next/server/app/api/agents/route.js.nft.json +1 -1
  25. package/bundle/.next/server/app/api/diagnostics/route.js.nft.json +1 -1
  26. package/bundle/.next/server/app/api/gateway/control/route.js.nft.json +1 -1
  27. package/bundle/.next/server/app/api/mission/route.js.nft.json +1 -1
  28. package/bundle/.next/server/app/api/models/catalog/route.js.nft.json +1 -1
  29. package/bundle/.next/server/app/api/models/providers/route.js.nft.json +1 -1
  30. package/bundle/.next/server/app/api/onboarding/models/route.js.nft.json +1 -1
  31. package/bundle/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  32. package/bundle/.next/server/app/api/openclaw/compatibility-smoke/route.js.nft.json +1 -1
  33. package/bundle/.next/server/app/api/planner/[planId]/deploy/route.js.nft.json +1 -1
  34. package/bundle/.next/server/app/api/planner/[planId]/document-rewrite/route.js.nft.json +1 -1
  35. package/bundle/.next/server/app/api/planner/[planId]/route.js.nft.json +1 -1
  36. package/bundle/.next/server/app/api/planner/[planId]/simulate/route.js.nft.json +1 -1
  37. package/bundle/.next/server/app/api/planner/[planId]/turn/route.js.nft.json +1 -1
  38. package/bundle/.next/server/app/api/planner/route.js.nft.json +1 -1
  39. package/bundle/.next/server/app/api/reset/route.js.nft.json +1 -1
  40. package/bundle/.next/server/app/api/runtimes/[runtimeId]/route.js.nft.json +1 -1
  41. package/bundle/.next/server/app/api/settings/gateway/route.js.nft.json +1 -1
  42. package/bundle/.next/server/app/api/settings/openclaw-binary/route.js.nft.json +1 -1
  43. package/bundle/.next/server/app/api/settings/workspace-root/route.js.nft.json +1 -1
  44. package/bundle/.next/server/app/api/snapshot/route.js.nft.json +1 -1
  45. package/bundle/.next/server/app/api/stream/route.js.nft.json +1 -1
  46. package/bundle/.next/server/app/api/tasks/[taskId]/abort/route.js.nft.json +1 -1
  47. package/bundle/.next/server/app/api/tasks/[taskId]/control/route.js.nft.json +1 -1
  48. package/bundle/.next/server/app/api/tasks/[taskId]/stream/route.js.nft.json +1 -1
  49. package/bundle/.next/server/app/api/update/route.js.nft.json +1 -1
  50. package/bundle/.next/server/app/api/workspaces/[workspaceId]/channels/discovered-groups/route.js.nft.json +1 -1
  51. package/bundle/.next/server/app/api/workspaces/[workspaceId]/channels/route.js.nft.json +1 -1
  52. package/bundle/.next/server/app/api/workspaces/[workspaceId]/edit-draft/route.js.nft.json +1 -1
  53. package/bundle/.next/server/app/api/workspaces/[workspaceId]/files/route.js.nft.json +1 -1
  54. package/bundle/.next/server/app/api/workspaces/[workspaceId]/surfaces/discovery/route.js.nft.json +1 -1
  55. package/bundle/.next/server/app/api/workspaces/[workspaceId]/surfaces/reconcile/route.js +1 -1
  56. package/bundle/.next/server/app/api/workspaces/[workspaceId]/surfaces/reconcile/route.js.nft.json +1 -1
  57. package/bundle/.next/server/app/api/workspaces/route.js.nft.json +1 -1
  58. package/bundle/.next/server/app/files/page.js.nft.json +1 -1
  59. package/bundle/.next/server/app/integrations/page.js.nft.json +1 -1
  60. package/bundle/.next/server/app/models/page.js.nft.json +1 -1
  61. package/bundle/.next/server/app/page.js.nft.json +1 -1
  62. package/bundle/.next/server/app/settings/page.js.nft.json +1 -1
  63. package/bundle/.next/server/app/tasks/page.js.nft.json +1 -1
  64. package/bundle/.next/server/app-paths-manifest.json +9 -9
  65. package/bundle/.next/server/chunks/2082.js +1 -1
  66. package/bundle/.next/server/chunks/262.js +1 -1
  67. package/bundle/.next/server/chunks/4767.js +6 -5
  68. package/bundle/.next/server/middleware-build-manifest.js +1 -1
  69. package/bundle/.next/server/pages/404.html +1 -1
  70. package/bundle/.next/server/pages/500.html +1 -1
  71. package/bundle/.next/server/server-reference-manifest.json +1 -1
  72. package/bundle/package.json +3 -0
  73. package/package.json +1 -1
  74. /package/bundle/.next/static/{TYnwoX4LkzaMAP7sSiIpk → 0BcJbvZncZCzzyzha3Yje}/_buildManifest.js +0 -0
  75. /package/bundle/.next/static/{TYnwoX4LkzaMAP7sSiIpk → 0BcJbvZncZCzzyzha3Yje}/_ssgManifest.js +0 -0
@@ -180,4 +180,4 @@ Each agent should use only the subsection matching its current OpenClaw agent id
180
180
 
181
181
  ${a.length>0?a.join("\n\n"):"- No active agent role sections are configured yet."}`}function m(a){let b=a.policy,c=a.skillIds,e=v([...a.toolIds??[],...b?.fileAccess==="workspace-only"?["fs.workspaceOnly"]:[]]),f=v(a.channelIds??[]);return[`### ${a.name} (\`${a.id}\`)`,`- Agent id: \`${a.id}\``,`- Runtime rule: when the current OpenClaw agent id is \`${a.id}\`, use this section as the agent-specific role and persona.`,`- Role: ${a.role||"Agent"}`,`- Primary: ${a.isPrimary?"yes":"no"}`,...b?[`- Preset: ${(0,d._P)(b.preset)}`]:[],...a.modelId?[`- Model: \`${a.modelId}\``]:[],...c.length>0?[`- Skills: ${c.map(a=>`\`${a}\``).join(", ")}`]:[],...e.length>0?[`- Tools: ${e.map(a=>`\`${a}\``).join(", ")}`]:[],...b?[`- File access: ${b.fileAccess}`,`- Network access: ${b.networkAccess}`,`- Install scope: ${b.installScope}`,`- Missing tools: ${b.missingToolBehavior}`]:[],...f.length>0?[`- Channels: ${f.map(a=>`\`${a}\``).join(", ")}`]:[]].join("\n")}function n(a,b){let c=t(a,"Agent Roles");if(!c)return null;let d=a.slice(c.start,c.end),e=Array.from(d.matchAll(/^###\s+.+$/gm));for(let[a,f]of e.entries()){if(void 0===f.index)continue;let g=f.index,h=e[a+1]?.index??d.length,i=d.slice(g,h).trim();if(o(i)===b)return{start:c.start+g,end:c.start+h,content:i}}return null}function o(a){return/^###\s+.*?\(`([^`]+)`\)/m.exec(a)?.[1]??/^-\s+Agent id:\s+`([^`]+)`/m.exec(a)?.[1]??null}function p(a){return/^-\s+(Agent id|Runtime rule|Role|Primary|Preset|Model|Skills|Tools|File access|Network access|Install scope|Missing tools|Channels):/.test(a.trim())}function q(a){let b=0,c=a.length;for(;b<c&&a[b]?.trim()==="";)b+=1;for(;c>b&&a[c-1]?.trim()==="";)c-=1;return a.slice(b,c)}function r(a,b){return[...a].map((a,c)=>{let d=u(a.id)??w(u(a.name)??`agent-${c+1}`),e=b&&!d.startsWith(`${b}-`)?`${b}-${w(d)||"agent"}`:d,f=u(a.role),g=v([...a.skillIds??[],u(a.skillId)??""]);return{id:e,name:u(a.name)??f??e,role:f,enabled:!1!==a.enabled,isPrimary:!!a.isPrimary,skillId:g[0]??null,skillIds:g,toolIds:v(a.toolIds??[]),modelId:u(a.modelId),policy:a.policy??null,channelIds:v(a.channelIds??[])}}).sort((a,b)=>a.isPrimary!==b.isPrimary?a.isPrimary?-1:1:a.name.localeCompare(b.name))}function s(a,b,c,d){let e=c.trim(),f=t(a,b);if(f)return[a.slice(0,f.start).trimEnd(),e,a.slice(f.end).trimStart()].filter(Boolean).join("\n\n");if(d){let b=t(a,d);if(b)return[a.slice(0,b.end).trimEnd(),e,a.slice(b.end).trimStart()].filter(Boolean).join("\n\n")}return[a.trimEnd(),e].filter(Boolean).join("\n\n")}function t(a,b){let c=RegExp(`^##\\s+${b.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}\\s*$`,"m").exec(a);if(!c||void 0===c.index)return null;let d=c.index,e=d+c[0].length,f=/^##\s+/m.exec(a.slice(e));return{start:d,end:f?.index===void 0?a.length:e+f.index}}function u(a){return"string"==typeof a&&a.trim().length>0?a.trim():null}function v(a){return Array.from(new Set(a.map(a=>a.trim()).filter(Boolean)))}function w(a){return a.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,64)}function x(a){return a.endsWith("\n")?a:`${a}
182
182
  `}},69699:(a,b,c)=>{c.d(b,{Bx:()=>i,Ck:()=>p,E_:()=>q,Ok:()=>u,V6:()=>m,Xy:()=>f,YY:()=>t,Ym:()=>v,cS:()=>s,gQ:()=>h,gv:()=>k,hi:()=>n,kc:()=>l,mp:()=>g,pV:()=>r,v0:()=>j,vp:()=>o});var d=c(76760),e=c.n(d);function f(a){return(a.sessionId?.trim()||null)??y(x(a),"sessionId")??function(a){let b=a?.trim();if(!b?.startsWith("runtime:"))return null;let c=b.split(":")[1];return c&&"dispatch"!==c?c:null}(a.observation.runtimeId)}function g(a){return y(x(a),"model")}function h(a){let b=x(a),c=b?.usage;if(!c||"object"!=typeof c)return;let d=z(c,"total")??z(c,"totalTokens")??z(c,"total_tokens");if(null!==d)return{input:z(c,"input")??z(c,"prompt_tokens")??0,output:z(c,"output")??z(c,"completion_tokens")??0,total:d,cacheRead:z(c,"cacheRead")??0}}function i(a){let b=a.result?.summary?.trim();if(!b)return null;let c=b.toLowerCase();return"completed"===c||"ok"===c||"success"===c||A(b)?null:b}function j(a){let b=v(a.result).find(a=>a.text.trim().length>0)?.text.trim()??null;return A(b)?null:b}function k(a){let b=j(a);return"completed"!==a.status||!function(a){if("string"!=typeof a)return!1;let b=a.replace(/\s+/g," ").trim().toLowerCase();return!!b&&("ready"===b||"[[reply_to_current]] ready"===b||"mission accepted"===b||"mission queued"===b)}(b)?null:a.observation.observedAt?"Dispatch finished, but the saved reply still looks like a placeholder READY response.":"Dispatch finished, but the only saved result was READY and no mission transcript was linked."}function l(a){let b=k(a);if(b)return b;if("cancelled"===a.status)return C(a.error||"Mission aborted by operator.",90);let c=i(a)||j(a);return c||(a.outputDirRelative?`Dispatch runner finished \xb7 ${a.outputDirRelative}`:a.observation.observedAt?"Dispatch runner finished. Waiting for the final runtime transcript to sync.":"Dispatch runner finished.")}function m(a,b){if("completed"===a.status)return"completed";if("cancelled"===a.status)return"cancelled";if("stalled"===a.status)return"stalled";if("running"===a.status){let c=Date.parse(a.runner.lastHeartbeatAt||a.updatedAt);return!Number.isNaN(c)&&b-c>3e5?"stalled":"running"}let c=Date.parse(a.submittedAt);return!Number.isNaN(c)&&b-c>12e4?"stalled":"queued"}function n(a,b){return"completed"===b?"completed":"cancelled"===b?"cancelled":"stalled"===b?"stalled":a.observation.runtimeId||a.observation.observedAt?"runtime-observed":a.runner.lastHeartbeatAt?"waiting-for-runtime":a.runner.startedAt||a.runner.pid?"waiting-for-heartbeat":"accepted"}function o(a,b){if("completed"===b||"cancelled"===b)return C(l(a),90);if("stalled"===b)return a.error?C(a.error,90):a.runner.lastHeartbeatAt?"Working silently while AgentOS waits for the first OpenClaw runtime.":"Needs attention before the first runner heartbeat.";let c=n(a,b);return"runtime-observed"===c?"First runtime observed. Promoting the task to live updates.":"waiting-for-runtime"===c?"Heartbeat received. Waiting for the first OpenClaw runtime.":"waiting-for-heartbeat"===c?"Dispatch runner started. Waiting for the first heartbeat.":"Mission accepted. Starting the OpenClaw dispatch runner."}function p(a,b){let c=m(b,Date.now()),d=n(b,c),e=Date.parse(b.updatedAt),f="completed"===c||"cancelled"===c?C(l(b),90):o(b,c);return{...a,dispatchId:b.id,status:c,subtitle:f,updatedAt:Number.isNaN(e)?a.updatedAt:e,ageMs:Number.isNaN(e)?a.ageMs:Math.max(Date.now()-e,0),liveRunCount:"running"===c||"queued"===c?Math.max(a.liveRunCount,1):0,warningCount:"stalled"===c||"cancelled"===c?Math.max(a.warningCount,1):a.warningCount,metadata:{...a.metadata,bootstrapStage:d,dispatchStatus:b.status,dispatchSubmittedAt:b.submittedAt,dispatchRunnerStartedAt:b.runner.startedAt,dispatchHeartbeatAt:b.runner.lastHeartbeatAt,dispatchObservedAt:b.observation.observedAt,outputDir:b.outputDir,outputDirRelative:b.outputDirRelative}}}function q(a){let b=B(a.outputDir),c=B(a.outputDirRelative);for(let d of[i(a),j(a)].filter(a=>"string"==typeof a&&a.trim().length>0))for(let a of function(a){if("string"!=typeof a||0===a.trim().length)return[];let b=[...a.matchAll(/(?:^|[\s:])((?:\/[^\s`),;]+)+\.[A-Za-z0-9][A-Za-z0-9._-]*)/g),...a.matchAll(/(?:^|[\s(])((?:\.{1,2}\/)?deliverables\/[^\s`),;]+)/g),...a.matchAll(/\]\(((?:\/|\.{1,2}\/|deliverables\/)[^)]+)\)/g),...a.matchAll(/`((?:\/|\.{1,2}\/|deliverables\/)[^`\n]+)`/g)],c=[];for(let a of b){let b=(a[1]||"").trim();b&&function(a){let b=a.trim().replace(/[`'")\],;]+$/g,"");return!(!b||b.endsWith("/"))&&e().posix.basename(b).includes(".")}(b)&&c.push({path:b,displayPath:b})}return function(a){let b=new Set,c=[];for(let d of a)!d.path||b.has(d.path)||(b.add(d.path),c.push(d));return c}(c)}(d)){let d=function(a,b,c){let d=B(a),f=B(b),g=B(c);if(!d)return null;if(e().isAbsolute(d)||!f||!g)return d;let h=g.replace(/\/+$/,""),i=d.replace(/\/+$/,"");if(i===h)return f;let j=`${h}/`;return i.startsWith(j)?e().join(f,i.slice(j.length)):d}(a.path,b,c);if(d)return{path:d,displayPath:a.displayPath}}return null}function r(a,b){var c,d;if(!b.finalText&&!a.runId)return null;let e=(c=a.tokenUsage,d=b.tokenUsage,c?d&&d.total>c.total?d:c:d),f=!!(a.agentId||a.sessionId||a.modelId||e);return{runId:a.runId||`runtime:${a.id}`,status:b.errorMessage?"error":"ok",summary:b.errorMessage||"completed",...f?{meta:{agentMeta:{agentId:a.agentId,sessionId:a.sessionId,model:a.modelId,usage:e}}}:{},...b.finalText?{result:{payloads:[{text:b.finalText,mediaUrl:null}]}}:{}}}function s(a){return"running"===a||"completed"===a||"stalled"===a||"cancelled"===a?a:"queued"}function t(a){return"off"===a||"minimal"===a||"low"===a||"high"===a?a:"medium"}function u(a){let b=v(a),c=w(a);return"object"==typeof a&&null!==a&&("string"==typeof a.runId||"string"==typeof a.status||"string"==typeof a.summary||b.length>0||!!c)}function v(a){return a&&"object"==typeof a?(Array.isArray(a.result?.payloads)?a.result?.payloads:Array.isArray(a.payloads)?a.payloads:[]).filter(a=>!!a&&"string"==typeof a.text):[]}function w(a){if(!a||"object"!=typeof a)return null;let b=a.result?.meta??a.meta;return b&&"object"==typeof b?b:null}function x(a){let b=w(a.result);if(!b||"object"!=typeof b)return null;let c=b.agentMeta;return c&&"object"==typeof c?c:null}function y(a,b){let c=a?.[b];return"string"==typeof c&&c.trim().length>0?c:null}function z(a,b){let c=a?.[b];return"number"==typeof c&&Number.isFinite(c)?c:null}function A(a){if(!a)return!1;let b=a.trim().toLowerCase();return"ready"===b||"completed"===b||"complete"===b||"ok"===b||"success"===b}function B(a){return a?.trim()||void 0}function C(a,b){let c=a.replace(/\s+/g," ").trim();return c.length<=b?c:`${c.slice(0,Math.max(b-1,1)).trimEnd()}…`}},70016:(a,b,c)=>{c.d(b,{$Z:()=>g,kO:()=>h});var d=c(77598),e=c(21916),f=c(96109);function g(a,b,c,d={}){let l=a.agentId??j(a.key),m=c.find(a=>a.id===l),n=b.find(a=>a.id===l),o=m?.workspace||n?.workspace,p=o?(d.resolveWorkspaceId??f.S_)(o):void 0,q=i(a.key,"task"),r=i(a.key,"stage"),s=a.model&&a.model.includes("/")?a.model:n?.model||m?.model||"unassigned",t=(0,e.xH)(r,a.key,a.ageMs),u=h(a),v=q?q.slice(0,8):null,w="agent-chat"===a.origin;return{id:u,source:"session",key:a.key||"unknown-session",title:w?"Agent chat session":v?`${k(l)} \xb7 ${v}`:`${k(l)} session`,subtitle:w?"direct chat":v?`task ${v} \xb7 ${r||"running"}`:"main session",status:t,updatedAt:a.updatedAt??null,ageMs:a.ageMs??null,agentId:l,workspaceId:p,modelId:s,sessionId:a.sessionId,taskId:q,tokenUsage:"number"==typeof a.totalTokens||"number"==typeof a.inputTokens?{input:a.inputTokens??0,output:a.outputTokens??0,total:a.totalTokens??(a.inputTokens??0)+(a.outputTokens??0),cacheRead:a.cacheRead??0}:void 0,metadata:{kind:a.kind??"direct",chatType:a.kind??"direct",origin:a.origin??null,dispatchId:a.dispatchId??null,mission:a.mission??null,routedMission:a.routedMission??null,dispatchSubmittedAt:a.dispatchSubmittedAt??null,stage:r??null,historical:!1}}}function h(a){let b=i(a.key,"task")||a.key||a.sessionId||String(Math.random()),c=a.sessionId||l(a.agentId||j(a.key)||"sessionless");return`runtime:${c}:${l(b)}`}function i(a,b){if(!a)return;let c=`:${b}:`,d=a.indexOf(c);if(-1!==d)return a.slice(d+c.length).split(":")[0]}function j(a){if(!a)return;let b=/^agent:([^:]+)/.exec(a);return b?.[1]}function k(a){return a?a.split(/[-_]/g).filter(Boolean).map(a=>a[0].toUpperCase()+a.slice(1)).join(" "):"OpenClaw"}function l(a){return(0,d.createHash)("sha1").update(a).digest("hex").slice(0,10)}},71065:(a,b,c)=>{c.d(b,{Uo:()=>n,N2:()=>l,AB:()=>p,If:()=>o,D9:()=>m,H5:()=>q,at:()=>r,CI:()=>s,rH:()=>v,jq:()=>u,ZF:()=>t});var d=c(51455),e=c(76760),f=c.n(e),g=c(39503);c(93628);var h=c(27091),i=c(98752);function j(a){return"string"==typeof a&&a.trim().length>0?a.trim():null}function k(a){return Array.from(new Set(a.filter(Boolean)))}function l(a,b){return f().join(a,".openclaw","agents",b,"agent")}function m(a){return{enabled:a.enabled,every:a.every??void 0}}function n(a){return`agent-policy-${a.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,64)||"agent"}`}function o(a){return!!(a&&/^agent-policy-/.test(a))}function p(a){return a.filter(a=>!o(a))}function q(a){return k(p(a).filter(a=>"string"==typeof a).map(a=>a.trim()).filter(Boolean))}function r(a){return k(a.filter(a=>"string"==typeof a).map(a=>a.trim()).filter(a=>!!a&&"fs.workspaceOnly"!==a))}async function s(a){try{let b=await (0,g.rw)().getConfig("agents.list");if(Array.isArray(b))return b;return null==b&&a?w(a):[]}catch(c){let b;if(b=function(a){if(!a)return"";if(a instanceof Error){let b=[a.message];return"stderr"in a&&"string"==typeof a.stderr&&b.push(a.stderr),"stdout"in a&&"string"==typeof a.stdout&&b.push(a.stdout),b.filter(Boolean).join("\n")}return"string"==typeof a?a:""}(c),/Config path not found:\s*agents\.list|Config path not found:\s*agents\.list/i.test(b))return a?w(a):[];throw c}}async function t(a){await (0,g.rw)().setConfig("agents.list",a,{strictJson:!0})}async function u(a,b,c,d,e){let f=await (0,i.rh)(e,"agent-config.read",()=>s(d)),g=f.findIndex(b=>b.id===a),h=g>=0?{...f[g]}:{id:a,workspace:b};if(h.workspace=b,void 0!==c.agentDir){let a=j(c.agentDir);a?h.agentDir=a:delete h.agentDir}if(void 0!==c.name){let a=j(c.name);a?h.name=a:delete h.name}if(void 0!==c.model){let a=j(c.model);a?h.model=a:delete h.model}if(c.heartbeat?.every?h.heartbeat={every:c.heartbeat.every}:null===c.heartbeat&&delete h.heartbeat,Array.isArray(c.skills)&&c.skills.length>0?h.skills=k(c.skills):Array.isArray(c.skills)&&delete h.skills,c.tools?h.tools=c.tools:null===c.tools&&delete h.tools,void 0!==c.identity)if(null===c.identity)delete h.identity;else{var l;let a,b,d,e,f=(a=j((l=c.identity).name),b=j(l.emoji),d=j(l.theme),e=j(l.avatar),{...a?{name:a}:{},...b?{emoji:b}:{},...d?{theme:d}:{},...e?{avatar:e}:{}});Object.keys(f).length>0?h.identity=f:delete h.identity}return g>=0?f[g]=h:f.push(h),await (0,i.rh)(e,"agent-config.write",()=>t(f)),h}async function v(a,b,c){let e=j(c)??l(b,a);await Promise.all(["IDENTITY.md","SOUL.md","TOOLS.md","HEARTBEAT.md"].map(a=>(0,d.rm)(f().join(e,a),{force:!0}).catch(()=>void 0)))}function w(a){return a.agents.map(a=>{let b=(0,h.CK)(a),c={name:b,...a.identity.emoji?{emoji:a.identity.emoji}:{},...a.identity.theme?{theme:a.identity.theme}:{},...a.identity.avatar?{avatar:a.identity.avatar}:{}},d={id:a.id,workspace:a.workspacePath,agentDir:a.agentDir,name:b};return a.modelId&&"unassigned"!==a.modelId&&(d.model=a.modelId),a.heartbeat.enabled&&a.heartbeat.every&&(d.heartbeat={every:a.heartbeat.every}),a.skills.length>0&&(d.skills=k(a.skills)),a.tools.includes("fs.workspaceOnly")&&(d.tools={fs:{workspaceOnly:!0}}),Object.keys(c).length>0&&(d.identity=c),a.isDefault&&(d.default=!0),d})}},72761:(a,b,c)=>{c.d(b,{Qc:()=>s,hC:()=>q,ot:()=>r});var d=c(51455),e=c(76760),f=c.n(e),g=c(39503),h=c(25303),i=c(56763);let j=f().join(process.cwd(),".mission-control","gateway-events"),k=null,l=null,m=null,n=0,o=!1,p=new Set;function q(){k||l||(l=t().finally(()=>{l=null}))}function r(a){return p.add(a),q(),()=>{p.delete(a)}}async function s(){try{let a=await (0,d.readdir)(j,{withFileTypes:!0});return(await Promise.all(a.filter(a=>a.isFile()&&a.name.endsWith(".json")).map(a=>w(f().join(j,a.name))))).filter(a=>!!a).sort((a,b)=>(b.updatedAt??0)-(a.updatedAt??0)).slice(0,500)}catch{return[]}}async function t(){let a=await (0,h.N3)().catch(()=>null);if(a?.eventBridge!=="unsupported")try{k=await (0,g.rw)().subscribeRuntimeEvents({includeSessions:!0,includeTasks:!0,includeArtifacts:!0,includeApprovals:!0},{onEvent:a=>{(function(a){for(let b of[...p])try{b(a)}catch(a){a instanceof Error?a.message:String(a)}})(a),v(a).catch(a=>{a instanceof Error?a.message:String(a)})},onError:a=>{a instanceof Error?a.message:String(a)},onClose:()=>{k=null,u()}},{timeoutMs:5e3}),n=0}catch(a){k=null,a instanceof Error?a.message:String(a),u()}}function u(){if(o){o=!1;return}k||l||m||(n+=1,m=setTimeout(()=>{m=null,q()},Math.min(3e4,1e3*2**Math.max(0,n-1))))}async function v(a){let b=(0,i.wz)(a);if(!b)return;new Date(b.updatedAt??Date.now()).toISOString(),await (0,d.mkdir)(j,{recursive:!0});let c=f().join(j,`${b.id.replace(/[^a-zA-Z0-9._-]+/g,"-")}.json`),e=`${c}.${process.pid}.tmp`;await (0,d.writeFile)(e,`${JSON.stringify(b,null,2)}
183
- `,"utf8"),await (0,d.rename)(e,c)}async function w(a){try{var b;let c=JSON.parse(await (0,d.readFile)(a,"utf8"));if(!c||"string"!=typeof c.id||"string"!=typeof c.key)return null;return{id:c.id,source:"session"===c.source||"cron"===c.source?c.source:"turn",key:c.key,title:"string"==typeof c.title?c.title:"Gateway runtime event",subtitle:"string"==typeof c.subtitle?c.subtitle:"OpenClaw Gateway event",status:c.status??"running",updatedAt:"number"==typeof c.updatedAt?c.updatedAt:null,ageMs:"number"==typeof c.updatedAt?Math.max(0,Date.now()-c.updatedAt):null,agentId:"string"==typeof c.agentId?c.agentId:void 0,workspaceId:"string"==typeof c.workspaceId?c.workspaceId:void 0,modelId:"string"==typeof c.modelId?c.modelId:void 0,sessionId:"string"==typeof c.sessionId?c.sessionId:void 0,taskId:"string"==typeof c.taskId?c.taskId:void 0,runId:"string"==typeof c.runId?c.runId:void 0,toolNames:Array.isArray(c.toolNames)?c.toolNames.filter(a=>"string"==typeof a):void 0,tokenUsage:c.tokenUsage,metadata:(b=c.metadata)&&"object"==typeof b&&!Array.isArray(b)?c.metadata:{}}}catch{return null}}},75402:(a,b,c)=>{c.d(b,{q6:()=>i,wh:()=>j});var d=c(48161),e=c.n(d),f=c(76760),g=c.n(f);let h=g().join(process.cwd(),".mission-control"),i=g().join(h,"channel-registry.json"),j=g().join(e().homedir(),".openclaw")},80410:(a,b,c)=>{c.d(b,{Bi:()=>o,CD:()=>i,Ip:()=>j,U8:()=>l,ho:()=>n,kw:()=>h});var d=c(77598),e=c(14414),f=c(27091),g=c(69699);function h(a,b){if(0===a.length||0===b.length)return a;let c=new Map;for(let a of b){var d,e;let b=(0,g.Xy)(a);a.agentId&&b&&c.set((d=a.agentId,e=b,`${d}:${e}`),a)}return 0===c.size?a:a.map(a=>{var b,d;let e=a.agentId&&a.sessionId?c.get((b=a.agentId,d=a.sessionId,`${b}:${d}`)):null;return e?{...a,kind:"task",origin:"mission-dispatch",dispatchId:e.id,mission:e.mission,routedMission:e.routedMission,dispatchSubmittedAt:e.submittedAt}:a})}function i(a,b){if(0===a.length||0===b.length)return a;let c=[...a],d=new Map(c.map((a,b)=>[a.id,b]));for(let a of b){let b=a.observation.runtimeId?.trim(),e=(b&&d.has(b)?c[d.get(b)]:null)??k(a,c),f=function(a,b,c){let d=new Map;c&&d.set(c.id,c);let e=(0,g.Xy)(a);if(!e)return Array.from(d.values());let f=Date.parse(a.submittedAt),h=Number.isNaN(f)?0:f-1500;for(let c of b){if(l(c)||c.agentId!==a.agentId||(c.updatedAt??0)<h)continue;let b="string"==typeof c.metadata.dispatchId?c.metadata.dispatchId.trim():"",f="string"==typeof c.runId?c.runId.trim():"";(b===a.id||f===a.id||c.sessionId===e)&&d.set(c.id,c)}return Array.from(d.values())}(a,c,e);if(0!==f.length)for(let b of f){let e=d.get(b.id);"number"==typeof e&&(c[e]=m(c[e],a))}}return c}async function j(a,b,c){let d=[],e=Date.now();for(let f of b){let b=k(f,a);if(b){let e=function(a,b){if(a.tokenUsage&&a.modelId)return a;let c=a.sessionId?.trim();if(!a.agentId||!c)return a;let d=b.filter(b=>b.id!==a.id&&b.agentId===a.agentId&&b.sessionId===c&&!!(b.tokenUsage||b.modelId)).sort(q)[0];return d?{...a,modelId:a.modelId??d.modelId,tokenUsage:a.tokenUsage??d.tokenUsage,metadata:{...a.metadata,...d.tokenUsage?{usageSessionRuntimeId:d.id}:{}}}:a}(b,a);await c.persistObservation(f,e);let g=await c.reconcileRuntimeState(f,e)??f;d.push(m(e,g));continue}let h=await c.buildObservedRuntime(f);if(h){let a=await c.reconcileRuntimeState(f,h)??f;d.push(n(a,h.sessionId??(0,g.Xy)(a)??void 0));continue}d.push(o(f,e))}return d.sort(q)}function k(a,b){var c,d;let f=Date.parse(a.submittedAt),h=Date.now(),i=(0,g.V6)(a,h),j=(0,g.Xy)(a),k=a.observation.runtimeId?.trim()||null;return(c=k,d=b,p(a.status)&&c&&!d.some(a=>a.id===c))?null:b.map(b=>({runtime:b,score:function(a,b,c){if(l(a)||a.agentId!==b.agentId)return null;let d="string"==typeof a.metadata.dispatchId?a.metadata.dispatchId.trim():"",f="string"==typeof a.runId?a.runId.trim():"";if(d&&d!==b.id||(a.updatedAt??0)<(Number.isNaN(c.submittedAt)?0:c.submittedAt-1500))return null;if(f===b.id){var g,h,i;let c=120*(g=a.sessionId,h=b.agentId,!!("string"==typeof g&&g.startsWith(`agent:${h}:`)));return("completed"===(i=a.status)||"stalled"===i||"cancelled"===i?11e3:9e3)-c}if(c.observedRuntimeId&&a.id===c.observedRuntimeId)return 1e4;let j=!!(c.sessionId&&a.sessionId===c.sessionId);if("completed"===c.effectiveStatus||"stalled"===c.effectiveStatus||"cancelled"===c.effectiveStatus)return d===b.id?500:j?420:null;if(c.sessionId&&!j)return null;let k=(0,e.gP)(a,b.mission,{agentId:b.agentId,submittedAt:c.submittedAt});return"turn"!==a.source||k||j?0+("turn"===a.source?400:"session"===a.source?40:20)+240*!!k+120*!!j+80*(d===b.id):null}(b,a,{submittedAt:f,sessionId:j,observedRuntimeId:k,effectiveStatus:i})})).filter(a=>"number"==typeof a.score).sort((a,b)=>b.score-a.score||q(a.runtime,b.runtime))[0]?.runtime}function l(a){return a.id.startsWith("runtime:dispatch:")}function m(a,b){var c,d;let e,h="string"==typeof a.metadata.dispatchId?a.metadata.dispatchId.trim():"",i=function(a){let b="string"==typeof a.metadata.mission?a.metadata.mission:"string"==typeof a.metadata.turnPrompt?a.metadata.turnPrompt:null;if(!b)return null;let c=(0,f.ho)(b);return c.length>0?c:null}(a),j=b.workspaceId??a.workspaceId,k=(0,g.E_)(b),l=a.tokenUsage??(0,g.gQ)(b),m=a.modelId??(0,g.mp)(b)??void 0,n=p(b.status)?b.status:a.status;return h===b.id&&i&&"string"==typeof a.metadata.dispatchStatus&&a.metadata.dispatchStatus===b.status&&a.workspaceId===j&&a.metadata.outputDir===b.outputDir&&a.metadata.outputDirRelative===b.outputDirRelative&&(!k||(c=a,d=k.path,Array.isArray(e=c.metadata.createdFiles)&&e.some(a=>"object"==typeof a&&null!==a&&"path"in a&&"string"==typeof a.path&&a.path===d)))&&a.tokenUsage===l&&a.modelId===m&&a.status===n?a:{...a,subtitle:p(b.status)?r((0,g.kc)(b),90):a.subtitle,status:n,workspaceId:j??void 0,modelId:m,tokenUsage:l,metadata:{...a.metadata,dispatchId:b.id,dispatchStatus:b.status,dispatchSubmittedAt:b.submittedAt,dispatchRunnerStartedAt:b.runner.startedAt,dispatchHeartbeatAt:b.runner.lastHeartbeatAt,dispatchObservedAt:b.observation.observedAt,mission:b.mission,routedMission:b.routedMission,outputDir:b.outputDir,outputDirRelative:b.outputDirRelative,notesDirRelative:b.notesDirRelative,...k?{createdFiles:[k]}:{}}}}function n(a,b){let c=Date.parse(a.observation.observedAt??a.updatedAt??a.submittedAt),d=Date.now(),e=(0,g.V6)(a,d),h=b??(0,g.Xy)(a)??s(a.id),i=(0,g.gv)(a);return{id:a.observation.runtimeId||`runtime:${h}:${s(a.id)}`,source:"turn",key:`dispatch:${a.id}`,title:(0,f.$m)(a.mission,38)||"Recovered mission runtime",subtitle:i?r(i,90):"completed"===a.status||"cancelled"===a.status?r((0,g.kc)(a),90):"stalled"===a.status?"Recovered the stalled runtime from the saved transcript.":"Recovering runtime state from the saved transcript.",status:e,updatedAt:Number.isNaN(c)?null:c,ageMs:Number.isNaN(c)?null:Math.max(d-c,0),agentId:a.agentId,workspaceId:a.workspaceId??void 0,modelId:(0,g.mp)(a)??void 0,sessionId:h,tokenUsage:(0,g.gQ)(a),metadata:{mission:a.mission,dispatchId:a.id,routedMission:a.routedMission,outputDir:a.outputDir,outputDirRelative:a.outputDirRelative,notesDirRelative:a.notesDirRelative,error:a.error,sessionId:h,pendingCreation:"queued"===e||"running"===e,bootstrapStage:(0,g.hi)(a,e),dispatchStatus:a.status,dispatchSubmittedAt:a.submittedAt,dispatchRunnerStartedAt:a.runner.startedAt,dispatchHeartbeatAt:a.runner.lastHeartbeatAt,dispatchObservedAt:a.observation.observedAt,recoveredFromObservation:!0,...i?{warnings:[i],warningSummary:i}:{}}}}function o(a,b){let c=Date.parse(a.updatedAt),d=(0,g.V6)(a,b),e=(0,g.hi)(a,d),h=(0,g.vp)(a,d),i=(0,g.Xy)(a),j=(0,g.mp)(a),k=(0,g.gQ)(a),l=(0,g.gv)(a);return{id:`runtime:dispatch:${a.id}`,source:"turn",key:`dispatch:${a.id}`,title:(0,f.$m)(a.mission,38)||"Queued mission",subtitle:l?r(l,90):h,status:d,updatedAt:Number.isNaN(c)?Date.parse(a.submittedAt)||null:c,ageMs:Number.isNaN(c)?null:Math.max(b-c,0),agentId:a.agentId,workspaceId:a.workspaceId??void 0,modelId:j??void 0,sessionId:i??void 0,runId:a.result?.runId,tokenUsage:k,metadata:{dispatchId:a.id,mission:a.mission,routedMission:a.routedMission,outputDir:a.outputDir,outputDirRelative:a.outputDirRelative,notesDirRelative:a.notesDirRelative,error:a.error,sessionId:i,pendingCreation:"queued"===d||"running"===d,bootstrapStage:e,dispatchStatus:a.status,dispatchSubmittedAt:a.submittedAt,dispatchRunnerStartedAt:a.runner.startedAt,dispatchHeartbeatAt:a.runner.lastHeartbeatAt,dispatchObservedAt:a.observation.observedAt,...l?{warnings:[l],warningSummary:l}:{}}}}function p(a){return"completed"===a||"stalled"===a||"cancelled"===a}function q(a,b){return(b.updatedAt??0)-(a.updatedAt??0)}function r(a,b){let c=a.replace(/\s+/g," ").trim();return c.length<=b?c:`${c.slice(0,Math.max(b-1,1)).trimEnd()}…`}function s(a){return(0,d.createHash)("sha1").update(a).digest("hex").slice(0,12)}},83761:(a,b,c)=>{c.d(b,{k:()=>g});var d=c(76760),e=c.n(d),f=c(51455);async function g(a){try{let b=await (0,f.readFile)(e().join(a,"openclaw.json"),"utf8"),c=JSON.parse(b),d=c.agents?.list;return{status:"fulfilled",value:Array.isArray(d)?d:[]}}catch(a){return{status:"rejected",reason:a}}}},88978:(a,b,c)=>{c.d(b,{t:()=>i});var d=c(73024),e=c(51455),f=c(76760),g=c.n(f);async function h(a,b={}){try{if(!1!==b.createIfMissing&&await (0,e.mkdir)(a,{recursive:!0}),await (0,e.access)(a,d.constants.R_OK|d.constants.W_OK),b.touch){let b=g().join(a,`.agentos-write-check-${process.pid}-${Date.now()}-${Math.random().toString(16).slice(2)}`);await (0,e.writeFile)(b,"","utf8"),await (0,e.rm)(b,{force:!0})}return{writable:!0,issue:null}}catch(b){return{writable:!1,issue:function(a,b){if(!b||"object"!=typeof b)return`${a}: unknown filesystem error`;let c="code"in b&&"string"==typeof b.code?b.code:"unknown",d="message"in b&&"string"==typeof b.message?b.message:"unknown filesystem error";return`${a}: ${c} ${d}`}(a,b)}}}async function i(a,b,c={}){let d=[...new Set(b.filter(Boolean))],e=await h(a,{createIfMissing:!0,touch:c.touch}),f=await Promise.all(d.map(async b=>{let d=function(a,b,c){let d="string"==typeof c&&c.trim()?g().resolve(c.trim()):null;if(d){let a="agent"===g().basename(d)?g().dirname(d):d;return g().join(a,"sessions")}return g().join(a,"agents",b,"sessions")}(a,b,c.agentDirs?.[b]),e=await h(d,{createIfMissing:!0,touch:c.touch});return{id:b,path:d,writable:e.writable,issue:e.issue}})),j=f.every(a=>a.writable),k=[e.writable?null:`OpenClaw state root is not writable. ${e.issue??a}`,...f.filter(a=>!a.writable).map(a=>`OpenClaw session store for ${a.id} is not writable. ${a.issue??a.path}`)].filter(a=>!!a);return{stateRoot:a,stateWritable:e.writable,sessionStoreWritable:e.writable&&j,sessionStores:f,issues:k}}},92273:(a,b,c)=>{c.d(b,{i:()=>f});var d=c(77030),e=c.n(d);async function f(a=18789){return await g("127.0.0.1",a,750)?{service:{label:"Local port probe",loaded:!0},gateway:{bindMode:"loopback",port:a,probeUrl:`ws://127.0.0.1:${a}`}}:null}async function g(a,b,c){return await new Promise(d=>{let f=e().createConnection({host:a,port:b}),g=!1,h=a=>{g||(g=!0,f.removeAllListeners(),f.destroy(),d(a))};f.setTimeout(c),f.once("connect",()=>h(!0)),f.once("error",()=>h(!1)),f.once("timeout",()=>h(!1))})}},93628:(a,b,c)=>{c.d(b,{Cf:()=>j,Ew:()=>p,Pj:()=>o,X0:()=>l,_P:()=>t,_Y:()=>k,aB:()=>u,c_:()=>r,g0:()=>m,go:()=>s,hR:()=>q,iN:()=>e,qF:()=>n});var d=c(1118);let e="worker",f=new Set(["project-builder","project-reviewer","project-tester","project-learner","project-browser","project-researcher","project-strategist","project-writer","project-analyst"]),g=new Set(d.j.map(a=>a.name)),h={worker:{label:"Worker",description:"Default execution agent for code changes, docs, research, and review work. Best when the task stays inside the workspace and does not need system-level changes.",defaultName:"Worker",defaultEmoji:"\uD83D\uDEE0️",defaultTheme:"slate",badgeVariant:"default",tools:["exec","read","write","edit","apply_patch"],skillIds:["project-builder","project-reviewer","project-tester"]},setup:{label:"Setup / Operator",description:"Bootstraps environments, handles installs, and unblocks the workspace so other agents can move faster.",defaultName:"Setup Operator",defaultEmoji:"\uD83E\uDDF0",defaultTheme:"amber",badgeVariant:"warning",tools:["exec","process","gateway","read","write"],skillIds:["project-builder","project-analyst","project-learner"]},browser:{label:"Browser",description:"Captures browser evidence, screenshots, and user-path validation for UI-heavy work.",defaultName:"Browser Agent",defaultEmoji:"\uD83C\uDF10",defaultTheme:"blue",badgeVariant:"success",tools:["browser","web_search","web_fetch","image"],skillIds:["project-browser","project-tester","project-researcher"]},monitoring:{label:"Monitoring",description:"Runs on a watch cycle, checks health and drift, and leaves concise triage handoffs.",defaultName:"Monitoring Agent",defaultEmoji:"\uD83D\uDEF0️",defaultTheme:"teal",badgeVariant:"warning",tools:["cron","gateway","sessions_list","message","web_fetch"],skillIds:["project-analyst","project-reviewer","project-learner"]},custom:{label:"Custom",description:"Starts from the safe baseline and lets you fine-tune identity, policy, and operating style by hand.",defaultName:"Custom Agent",defaultEmoji:"\uD83E\uDDE9",defaultTheme:"violet",badgeVariant:"muted",tools:["exec","read","edit","message"],skillIds:[]}},i={worker:{missingToolBehavior:"fallback",installScope:"none",fileAccess:"workspace-only",networkAccess:"enabled"},setup:{missingToolBehavior:"allow-install",installScope:"workspace",fileAccess:"workspace-only",networkAccess:"enabled"},browser:{missingToolBehavior:"ask-setup",installScope:"none",fileAccess:"workspace-only",networkAccess:"enabled"},monitoring:{missingToolBehavior:"fallback",installScope:"none",fileAccess:"workspace-only",networkAccess:"enabled"},custom:{missingToolBehavior:"fallback",installScope:"none",fileAccess:"workspace-only",networkAccess:"enabled"}};function j(a){return h[a]}function k(a){return v(a.filter(a=>f.has(a)))}function l(a){return v(a.filter(a=>g.has(a)))}function m(a=e,b){return{...i[a],...b??{},preset:a}}function n(a){let b=[...a.skills??[],a.id??"",a.name??""].join(" ").toLowerCase();return/browser|playwright|screenshot|web/.test(b)?"browser":/monitor|heartbeat|watch|triage|observer/.test(b)?"monitoring":/setup|operator|ops|install|environment/.test(b)?"setup":/custom/.test(b)?"custom":e}function o(a){return"worker"===a||"setup"===a||"browser"===a||"monitoring"===a||"custom"===a}function p(a){return"fallback"===a||"ask-setup"===a||"route-setup"===a||"allow-install"===a}function q(a){return"none"===a||"workspace"===a||"system"===a}function r(a){return"workspace-only"===a||"extended"===a}function s(a){return"restricted"===a||"enabled"===a}function t(a){return h[a].label}function u(a){return"fs.workspaceOnly"===a?"Workspace only":a.replace(/^agent-policy-/,"").replace(/^project-/,"").replace(/[._-]+/g," ").trim().replace(/\b\w/g,a=>a.toUpperCase())}function v(a){return Array.from(new Set(a.filter(Boolean)))}Object.entries(h).map(([a,b])=>({value:a,label:b.label,description:b.description}))},96109:(a,b,c)=>{c.d(b,{Fm:()=>h,S_:()=>g,hv:()=>i,xV:()=>k});var d=c(77598),e=c(76760),f=c.n(e);function g(a){return(f().basename(a)||a).toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||function(a){let b=0;for(let c=0;c<a.length;c+=1)b=(b<<5)-b+a.charCodeAt(c)|0;return`workspace-${Math.abs(b)}`}(a)}function h(a){let b=new Map;for(let c of a)b.set(l(c),c);let c=new Map;for(let a of b.values()){let b=g(a);c.set(b,[...c.get(b)??[],a])}let d=new Map;for(let[a,b]of c)b.forEach((b,c)=>{d.set(l(b),0===c?a:j(b))});return a=>d.get(l(a))??g(a)}function i(a,b){return h(b)(a)}function j(a){var b;return`${g(a)}-${b=a,(0,d.createHash)("sha1").update(f().resolve(b)).digest("hex").slice(0,8)}`}function k(a,b){let c;return g(a)===b||j(a)===b||(c=(0,d.createHash)("sha1").update(a).digest("hex").slice(0,8),`workspace:${c}`===b)}function l(a){return f().resolve(a)}},96876:(a,b,c)=>{c.d(b,{Fb:()=>k,jJ:()=>l});var d=c(48161),e=c.n(d),f=c(76760),g=c.n(f);c(93628);var h=c(15292);c(14853);var i=c(70262);function j(a,b){let c=Date.now(),d=g().join(e().homedir(),"Documents","Shared","projects"),f=g().join(e().homedir(),".openclaw");return{generatedAt:new Date(c).toISOString(),revision:0,mode:"fallback",diagnostics:{installed:b.installed,loaded:b.loaded,rpcOk:b.rpcOk,health:b.health,workspaceRoot:d,configuredWorkspaceRoot:null,dashboardUrl:"http://127.0.0.1:18789/",gatewayUrl:"ws://127.0.0.1:18789",configuredGatewayUrl:null,openClawBinarySelection:(0,h.ml)(),modelReadiness:{ready:!1,defaultModel:null,resolvedDefaultModel:null,defaultModelReady:!1,recommendedModelId:null,preferredLoginProvider:null,totalModelCount:0,availableModelCount:0,localModelCount:0,remoteModelCount:0,missingModelCount:0,authProviders:[],issues:[a]},runtime:{stateRoot:f,stateWritable:!1,sessionStoreWritable:!1,sessionStores:[],smokeTest:{status:"not-run",checkedAt:null,agentId:null,runId:null,summary:null,error:null},issues:[a]},securityWarnings:[],issues:[a]},presence:[],channelAccounts:[],workspaces:[],agents:[],models:[],runtimes:[],tasks:[],relationships:[],missionPresets:[],channelRegistry:{version:1,channels:[]},surfaceRuntime:(0,i.Xy)("unavailable",a),surfaceDrift:(0,i.kz)()}}function k(a){return j(a,{installed:!0,loaded:!0,rpcOk:!1,health:"degraded"})}function l(a,b){return j(a,{installed:b.installed,loaded:b.loaded,rpcOk:b.rpcOk,health:b.rpcOk?"healthy":b.installed?"degraded":"offline"})}},98752:(a,b,c)=>{function d(){return globalThis.performance?.now?.()??Date.now()}function e(a){let b=d(),c=[];return{async measure(a,b){let e=d();try{return await b()}finally{c.push({label:a,durationMs:Math.round(d()-e)})}},summary:()=>({scope:a,totalMs:Math.round(d()-b),steps:[...c]})}}async function f(a,b,c){return a?a.measure(b,c):await c()}function g(a){let b=[`[openclaw timing] ${a.scope} total=${a.totalMs}ms`];for(let c of a.steps)b.push(`[openclaw timing] ${c.label}: ${c.durationMs}ms`);return b.join("\n")}c.d(b,{KV:()=>e,ct:()=>g,rh:()=>f})},99254:(a,b,c)=>{c.d(b,{fy:()=>G,G7:()=>H,H6:()=>J,lC:()=>K,VW:()=>D,D4:()=>I,S4:()=>h.S,QT:()=>F,vg:()=>E});var d=c(51455),e=c(76760),f=c.n(e),g=c(39503),h=c(39802),i=c(74497);let j=new Set(["telegram","discord","slack","googlechat"]),k={cron:"cron-default",email:"email-default",gmail:"gmail-default",webhook:"webhook-default"};async function l(){var a;let[b,c,d,e,f,g,h,i]=await Promise.all([m("channels"),m("hooks"),m("hooks.gmail"),m("hooks.webhook"),m("cron"),n(),m("gmail"),m("email")]);return function(a){let b=new Map;for(let c of a){let a=`${c.type}:${c.id}`,d=b.get(a);if(!d){b.set(a,c);continue}b.set(a,{...d,name:d.name||c.name,enabled:d.enabled||c.enabled,capabilities:Array.from(new Set([...d.capabilities??[],...c.capabilities??[]])),metadata:{...c.metadata??{},...d.metadata??{}}})}return Array.from(b.values())}([...function(a){if(!w(a))return[];let b=[];for(let[d,e]of Object.entries(a)){var c;if(c=d,!j.has(c)||!w(e))continue;let a=w(e.accounts)?e.accounts:{};for(let[c,e]of Object.entries(a)){let a=w(e)?e:{};q(a)&&b.push(p(d,c,a,{fallbackName:u(d,c),source:"config.channels.accounts"}))}let f=v(e.defaultAccount)??(q(e)?"default":null);!f||f in a||b.push(p(d,f,e,{fallbackName:u(d,f),source:"config.channels.default"}))}return b}(b),...o("gmail",h,"config.gmail"),...o("gmail",d,"config.hooks.gmail"),...o("email",i,"config.email"),...function(a){if(!w(a))return[];let b=[];r(a)&&b.push(p("webhook",k.webhook,a,{fallbackName:"Webhook ingress",source:"config.hooks"}));let c=w(a.gmail)?a.gmail:null;return c&&b.push(...o("gmail",c,"config.hooks.gmail")),b}(c),...w(a=e)&&r(a)?[p("webhook",t(a,k.webhook),a,{fallbackName:"Webhook ingress",source:"config.hooks.webhook"})]:[],...function(a,b){var c,d;let e=Array.isArray(c=b)?c:w(c)?Array.isArray(c.jobs)?c.jobs:Array.isArray(c.items)?c.items:[]:[];if(!w(a)&&0===e.length)return[];let f=w(a)?a:{};if(!(!0===(d=f).enabled||s(d,["jobs","schedules","failureDestination","webhook","webhookToken","store","maxConcurrentRuns","sessionRetention","runLog"]))&&0===e.length)return[];let g=t(f,k.cron),h={...w(f.metadata)?f.metadata:{},jobCount:e.length};return[p("cron",g,{...f,metadata:h},{fallbackName:e.length>0?`Cron scheduler (${e.length} job${1===e.length?"":"s"})`:"Cron scheduler",source:"config.cron"})]}(f,g)])}async function m(a){try{return await (0,g.rw)().getConfig(a)}catch{return null}}async function n(){try{return await (0,g.rw)().listCronJobs()}catch{return null}}function o(a,b,c){var d;if(!w(b))return[];let e=[],f=w(b.accounts)?b.accounts:{};for(let[b,d]of Object.entries(f))e.push(p(a,b,d,{fallbackName:u(a,b),source:`${c}.accounts`}));if(f.default||!(!0===(d=b).enabled||s(d,["account","email","address","username","imap","smtp","oauth","watch","pubsub"])))return e;let g=t(b,k[a]);return e.push(p(a,g,b,{fallbackName:u(a,g),source:c})),e}function p(a,b,c,d){var e,f,g;let h,j,k,l=w(c)?c:{},m=v(l.name)??v(l.label)??v(l.accountName)??v(l.account)??v(l.email)??v(l.address)??d.fallbackName,n=w(l.metadata)?{...l.metadata}:{},o="telegram"===a?(h=v((e=l).botToken)??v(e.token),(j=h?.split(":",1)[0]?.trim())&&/^\d+$/.test(j)?j:null):null;return{id:b,type:a,name:m,enabled:!1!==l.enabled,kind:(0,i.Yx)(a),capabilities:(f=a,g=l,k=new Set,("telegram"===f||"discord"===f||"slack"===f||"googlechat"===f)&&k.add("chat"),("gmail"===f||"email"===f)&&(k.add("inbox"),s(g,["smtp","send","outbound","drafts"])&&k.add("send")),("webhook"===f||"cron"===f)&&k.add("trigger"),"gmail"===f&&s(g,["watch","pubsub","topic","subscription"])&&k.add("trigger"),Array.from(k)),metadata:{...n,source:d.source,...o?{botId:o}:{}}}}function q(a){return!0===a.enabled||s(a,["account","token","botToken","appToken","webhookUrl","webhook","clientId"])}function r(a){return!0===a.enabled||s(a,["token","secret","path","baseUrl","mappings","webhook"])}function s(a,b){return b.some(b=>{var c;return"boolean"==typeof(c=a[b])?c:"string"==typeof c?c.trim().length>0:"number"==typeof c?Number.isFinite(c):Array.isArray(c)?c.length>0:w(c)})}function t(a,b){return v(a.accountId)??v(a.account)??v(a.id)??v(a.email)??v(a.address)??b}function u(a,b){let c=(0,i.MY)(a);return"default"===b||b===k[a]?`${c} default`:`${c} ${b}`}function v(a){return"string"==typeof a&&a.trim().length>0?a.trim():null}function w(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}var x=c(98752),y=c(58889);let z=f().join(process.cwd(),".mission-control"),A=f().join(z,"channel-registry.json");function B(a){return"string"==typeof a&&a.trim().length>0?a.trim():null}function C(a){return"object"==typeof a&&null!==a}async function D(){return E()}async function E(){try{let a=await (0,d.readFile)(A,"utf8"),b=JSON.parse(a),c=C(b)?b:{},e=Array.isArray(c.channels)?c.channels.map(a=>(0,y.kf)(a)).filter(a=>!!a):[],f=(0,y._E)({version:1,channels:e});return await Q(f)}catch{return(0,y._E)({version:1,channels:[]})}}async function F(){try{var a=await l();let b=new Map,c=[];for(let d of a){if("telegram"!==d.type){c.push(d);continue}let a="string"==typeof d.metadata?.botId&&d.metadata.botId.trim().length>0?d.metadata.botId.trim():null;if(!a){b.has(d.id)||b.set(d.id,d);continue}let e=b.get(a);if(!e){b.set(a,d);continue}P(d.id)>P(e.id)&&b.set(a,d)}return[...c,...Array.from(b.values())]}catch{return[]}}function G(a,b){let c=new Map(b.channels.filter(a=>!!a.id).map(a=>[a.id,a.name.trim()||a.id]));return a.map(a=>({...a,name:c.get(a.id)??a.name}))}function H(a){return a.channels.filter(a=>"internal"!==a.type&&a.workspaces.length>0).map(a=>({id:a.id,type:a.type,name:a.name.trim()||a.id,enabled:!0,kind:(0,i.Yx)(a.type),capabilities:[(0,i.Yx)(a.type)],metadata:{source:"channel-registry",legacy:!0}}))}function I(a){let b=new Map;for(let c of a){let a=`${c.type}:${c.id}`,d=b.get(a);if(!d){b.set(a,c);continue}b.set(a,{...d,name:d.name||c.name,enabled:!1!==d.enabled,kind:d.kind??c.kind,capabilities:Array.from(new Set([...d.capabilities??[],...c.capabilities??[]].filter(Boolean))),metadata:{...c.metadata??{},...d.metadata??{}}})}return Array.from(b.values())}async function J(a,b){switch(a.provider){case"telegram":return K(b);case"discord":return L(a.accountId,b);default:return[]}}async function K(a){let b=await (0,x.rh)(a,"telegram-discovery.read-channel-logs",()=>O("telegram",200));if(!b?.lines?.length)return await M(a);let c=new Map,d=a=>{let b=c.get(a.routeId);b?c.set(a.routeId,{routeId:a.routeId,provider:"telegram",kind:"group",title:a.title??b.title,lastSeen:Z(b.lastSeen,a.lastSeen)}):c.set(a.routeId,a)};for(let a of b.lines){let b="string"==typeof a?.time?a.time:null;for(let c of R(a,b))d(c);if("string"==typeof a?.raw)try{let c=JSON.parse(a.raw);for(let a of R(c,b))d(a)}catch{for(let c of S(a.raw,b))d(c)}if("string"==typeof a?.message)for(let c of S(a.message,b))d(c)}for(let b of(await M(a)))c.has(b.routeId)||c.set(b.routeId,b);return Array.from(c.values()).sort((a,b)=>{let c=a.title??a.routeId,d=b.title??b.routeId;return c.localeCompare(d)})}async function L(a,b){let c=await (0,x.rh)(b,"discord-discovery.read-channel-logs",()=>O("discord",300)),d=new Map,e=a=>{let b=d.get(a.routeId);b?d.set(a.routeId,{...b,title:a.title??b.title,subtitle:a.subtitle??b.subtitle,lastSeen:Z(b.lastSeen,a.lastSeen),guildId:a.guildId??b.guildId,parentId:a.parentId??b.parentId}):d.set(a.routeId,a)};for(let a of(await N(b)))e(a);for(let b of c?.lines??[]){let c="string"==typeof b?.time?b.time:null;for(let d of T(b,c,a))e(d);if("string"==typeof b?.raw)try{let d=JSON.parse(b.raw);for(let b of T(d,c,a))e(b)}catch{for(let d of U(b.raw,c,a))e(d)}if("string"==typeof b?.message)for(let d of U(b.message,c,a))e(d)}return Array.from(d.values()).sort((a,b)=>{let c=a.title??a.routeId,d=b.title??b.routeId;return c.localeCompare(d)})}async function M(a){try{let b=await (0,x.rh)(a,"telegram-discovery.read-allowlist-config",()=>(0,g.rw)().getConfig("channels.telegram.groups"));return Object.keys(b??{}).map(a=>({routeId:a,provider:"telegram",kind:"group",title:null,lastSeen:null})).sort((a,b)=>a.routeId.localeCompare(b.routeId))}catch{return[]}}async function N(a){try{let b=await (0,x.rh)(a,"discord-discovery.read-config",()=>(0,g.rw)().getConfig("channels.discord.guilds")),c=[];for(let[a,d]of Object.entries(b??{})){if(!X(a)||!C(d))continue;let b=B(d.name)??a;for(let e of Array.isArray(d.roles)?d.roles.filter(a=>"string"==typeof a||"number"==typeof a).map(a=>String(a).trim()).filter(a=>!!X(a)):[])c.push({routeId:W({kind:"role",guildId:a,targetId:e}),provider:"discord",kind:"role",title:`@${e}`,subtitle:b,lastSeen:null,guildId:a});let e=C(d.channels)?d.channels:{};for(let[d,f]of Object.entries(e)){let e=C(f)?f:{},g=X(d)??X(e.id);if(!g)continue;let h=B(e.name)??B(e.label)??`#${g}`;c.push({routeId:W({kind:"channel",guildId:a,targetId:g}),provider:"discord",kind:"channel",title:h,subtitle:b,lastSeen:null,guildId:a})}}return c}catch{return[]}}async function O(a,b){try{return await (0,g.rw)().getChannelLogs({channel:a,lines:b})}catch{return null}}function P(a){return"default"!==a?2:1}async function Q(a){let b=(await F()).filter(a=>"telegram"===a.type);if(0===b.length)return a;let c=new Set(b.map(a=>a.id)),d=new Map;for(let a of b){let b=a.name.trim().toLowerCase();if(!b)continue;let c=d.get(b)??[];c.push(a),d.set(b,c)}let e=!1,f=a.channels.map(a=>{if("telegram"!==a.type||c.has(a.id))return a;let b=d.get(a.name.trim().toLowerCase())??[];return 1!==b.length?a:(e=!0,{...a,id:b[0].id,name:b[0].name})});return e?(0,y._E)({version:1,channels:f}):a}function R(a,b){let c=new Map,d=[{value:a,depth:0}],e=new Set;for(;d.length>0;){let a=d.shift();if(!a||a.depth>6)continue;let f=a.value;if(null==f||"object"!=typeof f||e.has(f))continue;if(e.add(f),Array.isArray(f)){for(let b of f)d.push({value:b,depth:a.depth+1});continue}if(!C(f))continue;let g=Y(f.chatId);if(g){let a=B(f.title)??B(f.chatTitle)??null;c.set(g,{routeId:g,provider:"telegram",kind:"group",title:a,lastSeen:b})}for(let b of Object.values(f))d.push({value:b,depth:a.depth+1})}return Array.from(c.values())}function S(a,b){let c=new Map;for(let d of a.matchAll(/\{[^{}]*"chatId"\s*:\s*-?\d+[^{}]*\}/g)){let a=d[0];try{let d=JSON.parse(a);for(let a of R(d,b))c.set(a.routeId,a);continue}catch{}let e=a.match(/"chatId"\s*:\s*(-?\d+)/),f=Y(e?.[1]??null);if(!f)continue;let g=a.match(/"title"\s*:\s*"([^"]+)"/);c.set(f,{routeId:f,provider:"telegram",kind:"group",title:g?.[1]??null,lastSeen:b})}return Array.from(c.values())}function T(a,b,c){let d=new Map,e=[{value:a,depth:0,context:{accountId:null,guildId:null,guildName:null,channelId:null,channelName:null,threadId:null,threadName:null}}],f=new Set;for(;e.length>0;){var g,h,i,j;let a=e.shift();if(!a||a.depth>7)continue;let k=a.value;if(null==k||"object"!=typeof k||f.has(k))continue;if(f.add(k),Array.isArray(k)){for(let b of k)e.push({value:b,depth:a.depth+1,context:a.context});continue}if(!C(k))continue;let l=function(a,b){let c=C(b.guild)?b.guild:null,d=C(b.channel)?b.channel:null,e=C(b.thread)?b.thread:null,f=C(b.peer)?b.peer:null,g=B(b.kind),h=B(b.type),i=X(b.id),j=X(b.channelId)??X(b.channel_id)??X(d?.id)??(f?.kind==="channel"?X(f.id):null)??(("channel"===g||"channel"===h)&&i?i:null)??a.channelId,k=X(b.threadId)??X(b.thread_id)??X(e?.id)??(f?.kind==="thread"?X(f.id):null)??(("thread"===g||"thread"===h)&&i?i:null)??a.threadId;return{accountId:B(b.accountId)??B(b.channelAccountId)??B(b.account)??a.accountId,guildId:X(b.guildId)??X(b.guild_id)??X(c?.id)??a.guildId,guildName:B(b.guildName)??B(c?.name)??a.guildName,channelId:j,channelName:B(b.channelName)??B(d?.name)??("channel"===g||"channel"===h?B(b.name):null)??a.channelName,threadId:k,threadName:B(b.threadName)??B(e?.name)??("thread"===g||"thread"===h?B(b.name):null)??a.threadName}}(a.context,k);if(c&&l.accountId&&l.accountId!==c)continue;let m=(g=l,h=b,g.channelId?V({kind:"channel",guildId:g.guildId,targetId:g.channelId,title:g.channelName?`#${g.channelName}`:`#${g.channelId}`,subtitle:g.guildName??g.guildId,lastSeen:h}):null);m&&d.set(m.routeId,m);let n=(i=l,j=b,i.threadId?V({kind:"thread",guildId:i.guildId,targetId:i.threadId,parentId:i.channelId,title:i.threadName??`Thread ${i.threadId}`,subtitle:i.channelName&&i.guildName?`#${i.channelName} \xb7 ${i.guildName}`:i.channelName?`#${i.channelName}`:i.guildName??i.guildId,lastSeen:j}):null);for(let a of(n&&d.set(n.routeId,n),function(a,b,c){if(!b.guildId)return[];let d=new Map;for(let e of[a.roleIds,a.memberRoleIds,a.roles,C(a.member)?a.member.roles:null])if(Array.isArray(e))for(let a of e){let e=X(a)??(C(a)?X(a.id):null);if(!e)continue;let f=C(a)?B(a.name):null,g=V({kind:"role",guildId:b.guildId,targetId:e,title:f?`@${f}`:`@${e}`,subtitle:b.guildName??b.guildId,lastSeen:c});d.set(g.routeId,g)}return Array.from(d.values())}(k,l,b)))d.set(a.routeId,a);for(let b of Object.values(k))e.push({value:b,depth:a.depth+1,context:l})}return Array.from(d.values())}function U(a,b,c){let d=new Map,e=a.match(/accountId["=:\s]+([A-Za-z0-9._-]+)/i)?.[1]??null;if(c&&e&&e!==c)return[];for(let e of a.matchAll(/\{[^{}]*(guildId|channelId|threadId|roleIds|roles)[^{}]*\}/g))try{let a=JSON.parse(e[0]);for(let e of T(a,b,c))d.set(e.routeId,e)}catch{}let f=X(a.match(/guild(?:Id)?["=:\s]+(\d{5,})/i)?.[1]??null),g=X(a.match(/channel(?:Id)?["=:\s]+(\d{5,})/i)?.[1]??null),h=X(a.match(/thread(?:Id)?["=:\s]+(\d{5,})/i)?.[1]??null);if(g){let a=V({kind:"channel",guildId:f,targetId:g,title:`#${g}`,subtitle:f?`Guild ${f}`:null,lastSeen:b});d.set(a.routeId,a)}if(h){let a=V({kind:"thread",guildId:f,targetId:h,parentId:g,title:`Thread ${h}`,subtitle:g?`Channel ${g}`:f?`Guild ${f}`:null,lastSeen:b});d.set(a.routeId,a)}if(f)for(let c of(a.match(/roles?["=:\s]+\[([^\]]+)\]/i)?.[1]??"").matchAll(/\b(\d{5,})\b/g)){let a=X(c[1]);if(!a)continue;let e=V({kind:"role",guildId:f,targetId:a,title:`@${a}`,subtitle:`Guild ${f}`,lastSeen:b});d.set(e.routeId,e)}return Array.from(d.values())}function V(a){return{routeId:W({kind:a.kind,guildId:a.guildId,targetId:a.targetId,parentId:a.parentId}),provider:"discord",kind:a.kind,title:a.title,subtitle:a.subtitle,lastSeen:a.lastSeen,guildId:a.guildId,parentId:a.parentId??null}}function W(a){let b=a.guildId??"_";return"thread"===a.kind?`thread:${b}:${a.targetId}:${a.parentId??"_"}`:`${a.kind}:${b}:${a.targetId}`}function X(a){if("number"==typeof a&&Number.isFinite(a))return String(a);if("string"!=typeof a)return null;let b=a.trim();return/^\d{5,}$/.test(b)?b:null}function Y(a){if("number"==typeof a&&Number.isFinite(a)&&a<0)return String(a);if("string"!=typeof a)return null;let b=a.trim();return/^-\d+$/.test(b)?b:null}function Z(a,b){if(!b)return a;if(!a)return b;let c=Date.parse(a),d=Date.parse(b);return Number.isNaN(d)?a:Number.isNaN(c)||d>c?b:a}}};
183
+ `,"utf8"),await (0,d.rename)(e,c)}async function w(a){try{var b;let c=JSON.parse(await (0,d.readFile)(a,"utf8"));if(!c||"string"!=typeof c.id||"string"!=typeof c.key)return null;return{id:c.id,source:"session"===c.source||"cron"===c.source?c.source:"turn",key:c.key,title:"string"==typeof c.title?c.title:"Gateway runtime event",subtitle:"string"==typeof c.subtitle?c.subtitle:"OpenClaw Gateway event",status:c.status??"running",updatedAt:"number"==typeof c.updatedAt?c.updatedAt:null,ageMs:"number"==typeof c.updatedAt?Math.max(0,Date.now()-c.updatedAt):null,agentId:"string"==typeof c.agentId?c.agentId:void 0,workspaceId:"string"==typeof c.workspaceId?c.workspaceId:void 0,modelId:"string"==typeof c.modelId?c.modelId:void 0,sessionId:"string"==typeof c.sessionId?c.sessionId:void 0,taskId:"string"==typeof c.taskId?c.taskId:void 0,runId:"string"==typeof c.runId?c.runId:void 0,toolNames:Array.isArray(c.toolNames)?c.toolNames.filter(a=>"string"==typeof a):void 0,tokenUsage:c.tokenUsage,metadata:(b=c.metadata)&&"object"==typeof b&&!Array.isArray(b)?c.metadata:{}}}catch{return null}}},75402:(a,b,c)=>{c.d(b,{BY:()=>h,q6:()=>i,wh:()=>j});var d=c(48161),e=c.n(d),f=c(76760),g=c.n(f);let h=g().join(process.cwd(),".mission-control"),i=g().join(h,"channel-registry.json"),j=g().join(e().homedir(),".openclaw")},80410:(a,b,c)=>{c.d(b,{Bi:()=>o,CD:()=>i,Ip:()=>j,U8:()=>l,ho:()=>n,kw:()=>h});var d=c(77598),e=c(14414),f=c(27091),g=c(69699);function h(a,b){if(0===a.length||0===b.length)return a;let c=new Map;for(let a of b){var d,e;let b=(0,g.Xy)(a);a.agentId&&b&&c.set((d=a.agentId,e=b,`${d}:${e}`),a)}return 0===c.size?a:a.map(a=>{var b,d;let e=a.agentId&&a.sessionId?c.get((b=a.agentId,d=a.sessionId,`${b}:${d}`)):null;return e?{...a,kind:"task",origin:"mission-dispatch",dispatchId:e.id,mission:e.mission,routedMission:e.routedMission,dispatchSubmittedAt:e.submittedAt}:a})}function i(a,b){if(0===a.length||0===b.length)return a;let c=[...a],d=new Map(c.map((a,b)=>[a.id,b]));for(let a of b){let b=a.observation.runtimeId?.trim(),e=(b&&d.has(b)?c[d.get(b)]:null)??k(a,c),f=function(a,b,c){let d=new Map;c&&d.set(c.id,c);let e=(0,g.Xy)(a);if(!e)return Array.from(d.values());let f=Date.parse(a.submittedAt),h=Number.isNaN(f)?0:f-1500;for(let c of b){if(l(c)||c.agentId!==a.agentId||(c.updatedAt??0)<h)continue;let b="string"==typeof c.metadata.dispatchId?c.metadata.dispatchId.trim():"",f="string"==typeof c.runId?c.runId.trim():"";(b===a.id||f===a.id||c.sessionId===e)&&d.set(c.id,c)}return Array.from(d.values())}(a,c,e);if(0!==f.length)for(let b of f){let e=d.get(b.id);"number"==typeof e&&(c[e]=m(c[e],a))}}return c}async function j(a,b,c){let d=[],e=Date.now();for(let f of b){let b=k(f,a);if(b){let e=function(a,b){if(a.tokenUsage&&a.modelId)return a;let c=a.sessionId?.trim();if(!a.agentId||!c)return a;let d=b.filter(b=>b.id!==a.id&&b.agentId===a.agentId&&b.sessionId===c&&!!(b.tokenUsage||b.modelId)).sort(q)[0];return d?{...a,modelId:a.modelId??d.modelId,tokenUsage:a.tokenUsage??d.tokenUsage,metadata:{...a.metadata,...d.tokenUsage?{usageSessionRuntimeId:d.id}:{}}}:a}(b,a);await c.persistObservation(f,e);let g=await c.reconcileRuntimeState(f,e)??f;d.push(m(e,g));continue}let h=await c.buildObservedRuntime(f);if(h){let a=await c.reconcileRuntimeState(f,h)??f;d.push(n(a,h.sessionId??(0,g.Xy)(a)??void 0));continue}d.push(o(f,e))}return d.sort(q)}function k(a,b){var c,d;let f=Date.parse(a.submittedAt),h=Date.now(),i=(0,g.V6)(a,h),j=(0,g.Xy)(a),k=a.observation.runtimeId?.trim()||null;return(c=k,d=b,p(a.status)&&c&&!d.some(a=>a.id===c))?null:b.map(b=>({runtime:b,score:function(a,b,c){if(l(a)||a.agentId!==b.agentId)return null;let d="string"==typeof a.metadata.dispatchId?a.metadata.dispatchId.trim():"",f="string"==typeof a.runId?a.runId.trim():"";if(d&&d!==b.id||(a.updatedAt??0)<(Number.isNaN(c.submittedAt)?0:c.submittedAt-1500))return null;if(f===b.id){var g,h,i;let c=120*(g=a.sessionId,h=b.agentId,!!("string"==typeof g&&g.startsWith(`agent:${h}:`)));return("completed"===(i=a.status)||"stalled"===i||"cancelled"===i?11e3:9e3)-c}if(c.observedRuntimeId&&a.id===c.observedRuntimeId)return 1e4;let j=!!(c.sessionId&&a.sessionId===c.sessionId);if("completed"===c.effectiveStatus||"stalled"===c.effectiveStatus||"cancelled"===c.effectiveStatus)return d===b.id?500:j?420:null;if(c.sessionId&&!j)return null;let k=(0,e.gP)(a,b.mission,{agentId:b.agentId,submittedAt:c.submittedAt});return"turn"!==a.source||k||j?0+("turn"===a.source?400:"session"===a.source?40:20)+240*!!k+120*!!j+80*(d===b.id):null}(b,a,{submittedAt:f,sessionId:j,observedRuntimeId:k,effectiveStatus:i})})).filter(a=>"number"==typeof a.score).sort((a,b)=>b.score-a.score||q(a.runtime,b.runtime))[0]?.runtime}function l(a){return a.id.startsWith("runtime:dispatch:")}function m(a,b){var c,d;let e,h="string"==typeof a.metadata.dispatchId?a.metadata.dispatchId.trim():"",i=function(a){let b="string"==typeof a.metadata.mission?a.metadata.mission:"string"==typeof a.metadata.turnPrompt?a.metadata.turnPrompt:null;if(!b)return null;let c=(0,f.ho)(b);return c.length>0?c:null}(a),j=b.workspaceId??a.workspaceId,k=(0,g.E_)(b),l=a.tokenUsage??(0,g.gQ)(b),m=a.modelId??(0,g.mp)(b)??void 0,n=p(b.status)?b.status:a.status;return h===b.id&&i&&"string"==typeof a.metadata.dispatchStatus&&a.metadata.dispatchStatus===b.status&&a.workspaceId===j&&a.metadata.outputDir===b.outputDir&&a.metadata.outputDirRelative===b.outputDirRelative&&(!k||(c=a,d=k.path,Array.isArray(e=c.metadata.createdFiles)&&e.some(a=>"object"==typeof a&&null!==a&&"path"in a&&"string"==typeof a.path&&a.path===d)))&&a.tokenUsage===l&&a.modelId===m&&a.status===n?a:{...a,subtitle:p(b.status)?r((0,g.kc)(b),90):a.subtitle,status:n,workspaceId:j??void 0,modelId:m,tokenUsage:l,metadata:{...a.metadata,dispatchId:b.id,dispatchStatus:b.status,dispatchSubmittedAt:b.submittedAt,dispatchRunnerStartedAt:b.runner.startedAt,dispatchHeartbeatAt:b.runner.lastHeartbeatAt,dispatchObservedAt:b.observation.observedAt,mission:b.mission,routedMission:b.routedMission,outputDir:b.outputDir,outputDirRelative:b.outputDirRelative,notesDirRelative:b.notesDirRelative,...k?{createdFiles:[k]}:{}}}}function n(a,b){let c=Date.parse(a.observation.observedAt??a.updatedAt??a.submittedAt),d=Date.now(),e=(0,g.V6)(a,d),h=b??(0,g.Xy)(a)??s(a.id),i=(0,g.gv)(a);return{id:a.observation.runtimeId||`runtime:${h}:${s(a.id)}`,source:"turn",key:`dispatch:${a.id}`,title:(0,f.$m)(a.mission,38)||"Recovered mission runtime",subtitle:i?r(i,90):"completed"===a.status||"cancelled"===a.status?r((0,g.kc)(a),90):"stalled"===a.status?"Recovered the stalled runtime from the saved transcript.":"Recovering runtime state from the saved transcript.",status:e,updatedAt:Number.isNaN(c)?null:c,ageMs:Number.isNaN(c)?null:Math.max(d-c,0),agentId:a.agentId,workspaceId:a.workspaceId??void 0,modelId:(0,g.mp)(a)??void 0,sessionId:h,tokenUsage:(0,g.gQ)(a),metadata:{mission:a.mission,dispatchId:a.id,routedMission:a.routedMission,outputDir:a.outputDir,outputDirRelative:a.outputDirRelative,notesDirRelative:a.notesDirRelative,error:a.error,sessionId:h,pendingCreation:"queued"===e||"running"===e,bootstrapStage:(0,g.hi)(a,e),dispatchStatus:a.status,dispatchSubmittedAt:a.submittedAt,dispatchRunnerStartedAt:a.runner.startedAt,dispatchHeartbeatAt:a.runner.lastHeartbeatAt,dispatchObservedAt:a.observation.observedAt,recoveredFromObservation:!0,...i?{warnings:[i],warningSummary:i}:{}}}}function o(a,b){let c=Date.parse(a.updatedAt),d=(0,g.V6)(a,b),e=(0,g.hi)(a,d),h=(0,g.vp)(a,d),i=(0,g.Xy)(a),j=(0,g.mp)(a),k=(0,g.gQ)(a),l=(0,g.gv)(a);return{id:`runtime:dispatch:${a.id}`,source:"turn",key:`dispatch:${a.id}`,title:(0,f.$m)(a.mission,38)||"Queued mission",subtitle:l?r(l,90):h,status:d,updatedAt:Number.isNaN(c)?Date.parse(a.submittedAt)||null:c,ageMs:Number.isNaN(c)?null:Math.max(b-c,0),agentId:a.agentId,workspaceId:a.workspaceId??void 0,modelId:j??void 0,sessionId:i??void 0,runId:a.result?.runId,tokenUsage:k,metadata:{dispatchId:a.id,mission:a.mission,routedMission:a.routedMission,outputDir:a.outputDir,outputDirRelative:a.outputDirRelative,notesDirRelative:a.notesDirRelative,error:a.error,sessionId:i,pendingCreation:"queued"===d||"running"===d,bootstrapStage:e,dispatchStatus:a.status,dispatchSubmittedAt:a.submittedAt,dispatchRunnerStartedAt:a.runner.startedAt,dispatchHeartbeatAt:a.runner.lastHeartbeatAt,dispatchObservedAt:a.observation.observedAt,...l?{warnings:[l],warningSummary:l}:{}}}}function p(a){return"completed"===a||"stalled"===a||"cancelled"===a}function q(a,b){return(b.updatedAt??0)-(a.updatedAt??0)}function r(a,b){let c=a.replace(/\s+/g," ").trim();return c.length<=b?c:`${c.slice(0,Math.max(b-1,1)).trimEnd()}…`}function s(a){return(0,d.createHash)("sha1").update(a).digest("hex").slice(0,12)}},83761:(a,b,c)=>{c.d(b,{k:()=>g});var d=c(76760),e=c.n(d),f=c(51455);async function g(a){try{let b=await (0,f.readFile)(e().join(a,"openclaw.json"),"utf8"),c=JSON.parse(b),d=c.agents?.list;return{status:"fulfilled",value:Array.isArray(d)?d:[]}}catch(a){return{status:"rejected",reason:a}}}},88978:(a,b,c)=>{c.d(b,{t:()=>i});var d=c(73024),e=c(51455),f=c(76760),g=c.n(f);async function h(a,b={}){try{if(!1!==b.createIfMissing&&await (0,e.mkdir)(a,{recursive:!0}),await (0,e.access)(a,d.constants.R_OK|d.constants.W_OK),b.touch){let b=g().join(a,`.agentos-write-check-${process.pid}-${Date.now()}-${Math.random().toString(16).slice(2)}`);await (0,e.writeFile)(b,"","utf8"),await (0,e.rm)(b,{force:!0})}return{writable:!0,issue:null}}catch(b){return{writable:!1,issue:function(a,b){if(!b||"object"!=typeof b)return`${a}: unknown filesystem error`;let c="code"in b&&"string"==typeof b.code?b.code:"unknown",d="message"in b&&"string"==typeof b.message?b.message:"unknown filesystem error";return`${a}: ${c} ${d}`}(a,b)}}}async function i(a,b,c={}){let d=[...new Set(b.filter(Boolean))],e=await h(a,{createIfMissing:!0,touch:c.touch}),f=await Promise.all(d.map(async b=>{let d=function(a,b,c){let d="string"==typeof c&&c.trim()?g().resolve(c.trim()):null;if(d){let a="agent"===g().basename(d)?g().dirname(d):d;return g().join(a,"sessions")}return g().join(a,"agents",b,"sessions")}(a,b,c.agentDirs?.[b]),e=await h(d,{createIfMissing:!0,touch:c.touch});return{id:b,path:d,writable:e.writable,issue:e.issue}})),j=f.every(a=>a.writable),k=[e.writable?null:`OpenClaw state root is not writable. ${e.issue??a}`,...f.filter(a=>!a.writable).map(a=>`OpenClaw session store for ${a.id} is not writable. ${a.issue??a.path}`)].filter(a=>!!a);return{stateRoot:a,stateWritable:e.writable,sessionStoreWritable:e.writable&&j,sessionStores:f,issues:k}}},92273:(a,b,c)=>{c.d(b,{i:()=>f});var d=c(77030),e=c.n(d);async function f(a=18789){return await g("127.0.0.1",a,750)?{service:{label:"Local port probe",loaded:!0},gateway:{bindMode:"loopback",port:a,probeUrl:`ws://127.0.0.1:${a}`}}:null}async function g(a,b,c){return await new Promise(d=>{let f=e().createConnection({host:a,port:b}),g=!1,h=a=>{g||(g=!0,f.removeAllListeners(),f.destroy(),d(a))};f.setTimeout(c),f.once("connect",()=>h(!0)),f.once("error",()=>h(!1)),f.once("timeout",()=>h(!1))})}},93628:(a,b,c)=>{c.d(b,{Cf:()=>j,Ew:()=>p,Pj:()=>o,X0:()=>l,_P:()=>t,_Y:()=>k,aB:()=>u,c_:()=>r,g0:()=>m,go:()=>s,hR:()=>q,iN:()=>e,qF:()=>n});var d=c(1118);let e="worker",f=new Set(["project-builder","project-reviewer","project-tester","project-learner","project-browser","project-researcher","project-strategist","project-writer","project-analyst"]),g=new Set(d.j.map(a=>a.name)),h={worker:{label:"Worker",description:"Default execution agent for code changes, docs, research, and review work. Best when the task stays inside the workspace and does not need system-level changes.",defaultName:"Worker",defaultEmoji:"\uD83D\uDEE0️",defaultTheme:"slate",badgeVariant:"default",tools:["exec","read","write","edit","apply_patch"],skillIds:["project-builder","project-reviewer","project-tester"]},setup:{label:"Setup / Operator",description:"Bootstraps environments, handles installs, and unblocks the workspace so other agents can move faster.",defaultName:"Setup Operator",defaultEmoji:"\uD83E\uDDF0",defaultTheme:"amber",badgeVariant:"warning",tools:["exec","process","gateway","read","write"],skillIds:["project-builder","project-analyst","project-learner"]},browser:{label:"Browser",description:"Captures browser evidence, screenshots, and user-path validation for UI-heavy work.",defaultName:"Browser Agent",defaultEmoji:"\uD83C\uDF10",defaultTheme:"blue",badgeVariant:"success",tools:["browser","web_search","web_fetch","image"],skillIds:["project-browser","project-tester","project-researcher"]},monitoring:{label:"Monitoring",description:"Runs on a watch cycle, checks health and drift, and leaves concise triage handoffs.",defaultName:"Monitoring Agent",defaultEmoji:"\uD83D\uDEF0️",defaultTheme:"teal",badgeVariant:"warning",tools:["cron","gateway","sessions_list","message","web_fetch"],skillIds:["project-analyst","project-reviewer","project-learner"]},custom:{label:"Custom",description:"Starts from the safe baseline and lets you fine-tune identity, policy, and operating style by hand.",defaultName:"Custom Agent",defaultEmoji:"\uD83E\uDDE9",defaultTheme:"violet",badgeVariant:"muted",tools:["exec","read","edit","message"],skillIds:[]}},i={worker:{missingToolBehavior:"fallback",installScope:"none",fileAccess:"workspace-only",networkAccess:"enabled"},setup:{missingToolBehavior:"allow-install",installScope:"workspace",fileAccess:"workspace-only",networkAccess:"enabled"},browser:{missingToolBehavior:"ask-setup",installScope:"none",fileAccess:"workspace-only",networkAccess:"enabled"},monitoring:{missingToolBehavior:"fallback",installScope:"none",fileAccess:"workspace-only",networkAccess:"enabled"},custom:{missingToolBehavior:"fallback",installScope:"none",fileAccess:"workspace-only",networkAccess:"enabled"}};function j(a){return h[a]}function k(a){return v(a.filter(a=>f.has(a)))}function l(a){return v(a.filter(a=>g.has(a)))}function m(a=e,b){return{...i[a],...b??{},preset:a}}function n(a){let b=[...a.skills??[],a.id??"",a.name??""].join(" ").toLowerCase();return/browser|playwright|screenshot|web/.test(b)?"browser":/monitor|heartbeat|watch|triage|observer/.test(b)?"monitoring":/setup|operator|ops|install|environment/.test(b)?"setup":/custom/.test(b)?"custom":e}function o(a){return"worker"===a||"setup"===a||"browser"===a||"monitoring"===a||"custom"===a}function p(a){return"fallback"===a||"ask-setup"===a||"route-setup"===a||"allow-install"===a}function q(a){return"none"===a||"workspace"===a||"system"===a}function r(a){return"workspace-only"===a||"extended"===a}function s(a){return"restricted"===a||"enabled"===a}function t(a){return h[a].label}function u(a){return"fs.workspaceOnly"===a?"Workspace only":a.replace(/^agent-policy-/,"").replace(/^project-/,"").replace(/[._-]+/g," ").trim().replace(/\b\w/g,a=>a.toUpperCase())}function v(a){return Array.from(new Set(a.filter(Boolean)))}Object.entries(h).map(([a,b])=>({value:a,label:b.label,description:b.description}))},96109:(a,b,c)=>{c.d(b,{Fm:()=>h,S_:()=>g,hv:()=>i,xV:()=>k});var d=c(77598),e=c(76760),f=c.n(e);function g(a){return(f().basename(a)||a).toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||function(a){let b=0;for(let c=0;c<a.length;c+=1)b=(b<<5)-b+a.charCodeAt(c)|0;return`workspace-${Math.abs(b)}`}(a)}function h(a){let b=new Map;for(let c of a)b.set(l(c),c);let c=new Map;for(let a of b.values()){let b=g(a);c.set(b,[...c.get(b)??[],a])}let d=new Map;for(let[a,b]of c)b.forEach((b,c)=>{d.set(l(b),0===c?a:j(b))});return a=>d.get(l(a))??g(a)}function i(a,b){return h(b)(a)}function j(a){var b;return`${g(a)}-${b=a,(0,d.createHash)("sha1").update(f().resolve(b)).digest("hex").slice(0,8)}`}function k(a,b){let c;return g(a)===b||j(a)===b||(c=(0,d.createHash)("sha1").update(a).digest("hex").slice(0,8),`workspace:${c}`===b)}function l(a){return f().resolve(a)}},96876:(a,b,c)=>{c.d(b,{Fb:()=>k,jJ:()=>l});var d=c(48161),e=c.n(d),f=c(76760),g=c.n(f);c(93628);var h=c(15292);c(14853);var i=c(70262);function j(a,b){let c=Date.now(),d=g().join(e().homedir(),"Documents","Shared","projects"),f=g().join(e().homedir(),".openclaw");return{generatedAt:new Date(c).toISOString(),revision:0,mode:"fallback",diagnostics:{installed:b.installed,loaded:b.loaded,rpcOk:b.rpcOk,health:b.health,workspaceRoot:d,configuredWorkspaceRoot:null,dashboardUrl:"http://127.0.0.1:18789/",gatewayUrl:"ws://127.0.0.1:18789",configuredGatewayUrl:null,openClawBinarySelection:(0,h.ml)(),modelReadiness:{ready:!1,defaultModel:null,resolvedDefaultModel:null,defaultModelReady:!1,recommendedModelId:null,preferredLoginProvider:null,totalModelCount:0,availableModelCount:0,localModelCount:0,remoteModelCount:0,missingModelCount:0,authProviders:[],issues:[a]},runtime:{stateRoot:f,stateWritable:!1,sessionStoreWritable:!1,sessionStores:[],smokeTest:{status:"not-run",checkedAt:null,agentId:null,runId:null,summary:null,error:null},issues:[a]},securityWarnings:[],issues:[a]},presence:[],channelAccounts:[],workspaces:[],agents:[],models:[],runtimes:[],tasks:[],relationships:[],missionPresets:[],channelRegistry:{version:1,channels:[]},surfaceRuntime:(0,i.Xy)("unavailable",a),surfaceDrift:(0,i.kz)()}}function k(a){return j(a,{installed:!0,loaded:!0,rpcOk:!1,health:"degraded"})}function l(a,b){return j(a,{installed:b.installed,loaded:b.loaded,rpcOk:b.rpcOk,health:b.rpcOk?"healthy":b.installed?"degraded":"offline"})}},98752:(a,b,c)=>{function d(){return globalThis.performance?.now?.()??Date.now()}function e(a){let b=d(),c=[];return{async measure(a,b){let e=d();try{return await b()}finally{c.push({label:a,durationMs:Math.round(d()-e)})}},summary:()=>({scope:a,totalMs:Math.round(d()-b),steps:[...c]})}}async function f(a,b,c){return a?a.measure(b,c):await c()}function g(a){let b=[`[openclaw timing] ${a.scope} total=${a.totalMs}ms`];for(let c of a.steps)b.push(`[openclaw timing] ${c.label}: ${c.durationMs}ms`);return b.join("\n")}c.d(b,{KV:()=>e,ct:()=>g,rh:()=>f})},99254:(a,b,c)=>{c.d(b,{fy:()=>G,G7:()=>H,H6:()=>J,lC:()=>K,VW:()=>D,D4:()=>I,S4:()=>h.S,QT:()=>F,vg:()=>E});var d=c(51455),e=c(76760),f=c.n(e),g=c(39503),h=c(39802),i=c(74497);let j=new Set(["telegram","discord","slack","googlechat"]),k={cron:"cron-default",email:"email-default",gmail:"gmail-default",webhook:"webhook-default"};async function l(){var a;let[b,c,d,e,f,g,h,i]=await Promise.all([m("channels"),m("hooks"),m("hooks.gmail"),m("hooks.webhook"),m("cron"),n(),m("gmail"),m("email")]);return function(a){let b=new Map;for(let c of a){let a=`${c.type}:${c.id}`,d=b.get(a);if(!d){b.set(a,c);continue}b.set(a,{...d,name:d.name||c.name,enabled:d.enabled||c.enabled,capabilities:Array.from(new Set([...d.capabilities??[],...c.capabilities??[]])),metadata:{...c.metadata??{},...d.metadata??{}}})}return Array.from(b.values())}([...function(a){if(!w(a))return[];let b=[];for(let[d,e]of Object.entries(a)){var c;if(c=d,!j.has(c)||!w(e))continue;let a=w(e.accounts)?e.accounts:{};for(let[c,e]of Object.entries(a)){let a=w(e)?e:{};q(a)&&b.push(p(d,c,a,{fallbackName:u(d,c),source:"config.channels.accounts"}))}let f=v(e.defaultAccount)??(q(e)?"default":null);!f||f in a||b.push(p(d,f,e,{fallbackName:u(d,f),source:"config.channels.default"}))}return b}(b),...o("gmail",h,"config.gmail"),...o("gmail",d,"config.hooks.gmail"),...o("email",i,"config.email"),...function(a){if(!w(a))return[];let b=[];r(a)&&b.push(p("webhook",k.webhook,a,{fallbackName:"Webhook ingress",source:"config.hooks"}));let c=w(a.gmail)?a.gmail:null;return c&&b.push(...o("gmail",c,"config.hooks.gmail")),b}(c),...w(a=e)&&r(a)?[p("webhook",t(a,k.webhook),a,{fallbackName:"Webhook ingress",source:"config.hooks.webhook"})]:[],...function(a,b){var c,d;let e=Array.isArray(c=b)?c:w(c)?Array.isArray(c.jobs)?c.jobs:Array.isArray(c.items)?c.items:[]:[];if(!w(a)&&0===e.length)return[];let f=w(a)?a:{};if(!(!0===(d=f).enabled||s(d,["jobs","schedules","failureDestination","webhook","webhookToken","store","maxConcurrentRuns","sessionRetention","runLog"]))&&0===e.length)return[];let g=t(f,k.cron),h={...w(f.metadata)?f.metadata:{},jobCount:e.length};return[p("cron",g,{...f,metadata:h},{fallbackName:e.length>0?`Cron scheduler (${e.length} job${1===e.length?"":"s"})`:"Cron scheduler",source:"config.cron"})]}(f,g)])}async function m(a){try{return await (0,g.rw)().getConfig(a)}catch{return null}}async function n(){try{return await (0,g.rw)().listCronJobs()}catch{return null}}function o(a,b,c){var d;if(!w(b))return[];let e=[],f=w(b.accounts)?b.accounts:{};for(let[b,d]of Object.entries(f))e.push(p(a,b,d,{fallbackName:u(a,b),source:`${c}.accounts`}));if(f.default||!(!0===(d=b).enabled||s(d,["account","email","address","username","imap","smtp","oauth","watch","pubsub"])))return e;let g=t(b,k[a]);return e.push(p(a,g,b,{fallbackName:u(a,g),source:c})),e}function p(a,b,c,d){var e,f,g;let h,j,k,l=w(c)?c:{},m=v(l.name)??v(l.label)??v(l.accountName)??v(l.account)??v(l.email)??v(l.address)??d.fallbackName,n=w(l.metadata)?{...l.metadata}:{},o="telegram"===a?(h=v((e=l).botToken)??v(e.token),(j=h?.split(":",1)[0]?.trim())&&/^\d+$/.test(j)?j:null):null;return{id:b,type:a,name:m,enabled:!1!==l.enabled,kind:(0,i.Yx)(a),capabilities:(f=a,g=l,k=new Set,("telegram"===f||"discord"===f||"slack"===f||"googlechat"===f)&&k.add("chat"),("gmail"===f||"email"===f)&&(k.add("inbox"),s(g,["smtp","send","outbound","drafts"])&&k.add("send")),("webhook"===f||"cron"===f)&&k.add("trigger"),"gmail"===f&&s(g,["watch","pubsub","topic","subscription"])&&k.add("trigger"),Array.from(k)),metadata:{...n,source:d.source,...o?{botId:o}:{}}}}function q(a){return!0===a.enabled||s(a,["account","token","botToken","appToken","webhookUrl","webhook","clientId"])}function r(a){return!0===a.enabled||s(a,["token","secret","path","baseUrl","mappings","webhook"])}function s(a,b){return b.some(b=>{var c;return"boolean"==typeof(c=a[b])?c:"string"==typeof c?c.trim().length>0:"number"==typeof c?Number.isFinite(c):Array.isArray(c)?c.length>0:w(c)})}function t(a,b){return v(a.accountId)??v(a.account)??v(a.id)??v(a.email)??v(a.address)??b}function u(a,b){let c=(0,i.MY)(a);return"default"===b||b===k[a]?`${c} default`:`${c} ${b}`}function v(a){return"string"==typeof a&&a.trim().length>0?a.trim():null}function w(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}var x=c(98752),y=c(58889);let z=f().join(process.cwd(),".mission-control"),A=f().join(z,"channel-registry.json");function B(a){return"string"==typeof a&&a.trim().length>0?a.trim():null}function C(a){return"object"==typeof a&&null!==a}async function D(){return E()}async function E(){try{let a=await (0,d.readFile)(A,"utf8"),b=JSON.parse(a),c=C(b)?b:{},e=Array.isArray(c.channels)?c.channels.map(a=>(0,y.kf)(a)).filter(a=>!!a):[],f=(0,y._E)({version:1,channels:e});return await Q(f)}catch{return(0,y._E)({version:1,channels:[]})}}async function F(){try{var a=await l();let b=new Map,c=[];for(let d of a){if("telegram"!==d.type){c.push(d);continue}let a="string"==typeof d.metadata?.botId&&d.metadata.botId.trim().length>0?d.metadata.botId.trim():null;if(!a){b.has(d.id)||b.set(d.id,d);continue}let e=b.get(a);if(!e){b.set(a,d);continue}P(d.id)>P(e.id)&&b.set(a,d)}return[...c,...Array.from(b.values())]}catch{return[]}}function G(a,b){let c=new Map(b.channels.filter(a=>!!a.id).map(a=>[a.id,a.name.trim()||a.id]));return a.map(a=>({...a,name:c.get(a.id)??a.name}))}function H(a){return a.channels.filter(a=>"internal"!==a.type&&a.workspaces.length>0).map(a=>({id:a.id,type:a.type,name:a.name.trim()||a.id,enabled:!0,kind:(0,i.Yx)(a.type),capabilities:[(0,i.Yx)(a.type)],metadata:{source:"channel-registry",legacy:!0}}))}function I(a){let b=new Map;for(let c of a){let a=`${c.type}:${c.id}`,d=b.get(a);if(!d){b.set(a,c);continue}b.set(a,{...d,name:d.name||c.name,enabled:!1!==d.enabled,kind:d.kind??c.kind,capabilities:Array.from(new Set([...d.capabilities??[],...c.capabilities??[]].filter(Boolean))),metadata:{...c.metadata??{},...d.metadata??{}}})}return Array.from(b.values())}async function J(a,b){switch(a.provider){case"telegram":return K(b);case"discord":return L(a.accountId,b);default:return[]}}async function K(a){let b=await (0,x.rh)(a,"telegram-discovery.read-channel-logs",()=>O("telegram",200));if(!b?.lines?.length)return await M(a);let c=new Map,d=a=>{let b=c.get(a.routeId);b?c.set(a.routeId,{routeId:a.routeId,provider:"telegram",kind:"group",title:a.title??b.title,lastSeen:Z(b.lastSeen,a.lastSeen)}):c.set(a.routeId,a)};for(let a of b.lines){let b="string"==typeof a?.time?a.time:null;for(let c of R(a,b))d(c);if("string"==typeof a?.raw)try{let c=JSON.parse(a.raw);for(let a of R(c,b))d(a)}catch{for(let c of S(a.raw,b))d(c)}if("string"==typeof a?.message)for(let c of S(a.message,b))d(c)}for(let b of(await M(a)))c.has(b.routeId)||c.set(b.routeId,b);return Array.from(c.values()).sort((a,b)=>{let c=a.title??a.routeId,d=b.title??b.routeId;return c.localeCompare(d)})}async function L(a,b){let c=await (0,x.rh)(b,"discord-discovery.read-channel-logs",()=>O("discord",300)),d=new Map,e=a=>{let b=d.get(a.routeId);b?d.set(a.routeId,{...b,title:a.title??b.title,subtitle:a.subtitle??b.subtitle,lastSeen:Z(b.lastSeen,a.lastSeen),guildId:a.guildId??b.guildId,parentId:a.parentId??b.parentId}):d.set(a.routeId,a)};for(let a of(await N(b)))e(a);for(let b of c?.lines??[]){let c="string"==typeof b?.time?b.time:null;for(let d of T(b,c,a))e(d);if("string"==typeof b?.raw)try{let d=JSON.parse(b.raw);for(let b of T(d,c,a))e(b)}catch{for(let d of U(b.raw,c,a))e(d)}if("string"==typeof b?.message)for(let d of U(b.message,c,a))e(d)}return Array.from(d.values()).sort((a,b)=>{let c=a.title??a.routeId,d=b.title??b.routeId;return c.localeCompare(d)})}async function M(a){try{let b=await (0,x.rh)(a,"telegram-discovery.read-allowlist-config",()=>(0,g.rw)().getConfig("channels.telegram.groups"));return Object.keys(b??{}).map(a=>({routeId:a,provider:"telegram",kind:"group",title:null,lastSeen:null})).sort((a,b)=>a.routeId.localeCompare(b.routeId))}catch{return[]}}async function N(a){try{let b=await (0,x.rh)(a,"discord-discovery.read-config",()=>(0,g.rw)().getConfig("channels.discord.guilds")),c=[];for(let[a,d]of Object.entries(b??{})){if(!X(a)||!C(d))continue;let b=B(d.name)??a;for(let e of Array.isArray(d.roles)?d.roles.filter(a=>"string"==typeof a||"number"==typeof a).map(a=>String(a).trim()).filter(a=>!!X(a)):[])c.push({routeId:W({kind:"role",guildId:a,targetId:e}),provider:"discord",kind:"role",title:`@${e}`,subtitle:b,lastSeen:null,guildId:a});let e=C(d.channels)?d.channels:{};for(let[d,f]of Object.entries(e)){let e=C(f)?f:{},g=X(d)??X(e.id);if(!g)continue;let h=B(e.name)??B(e.label)??`#${g}`;c.push({routeId:W({kind:"channel",guildId:a,targetId:g}),provider:"discord",kind:"channel",title:h,subtitle:b,lastSeen:null,guildId:a})}}return c}catch{return[]}}async function O(a,b){try{return await (0,g.rw)().getChannelLogs({channel:a,lines:b})}catch{return null}}function P(a){return"default"!==a?2:1}async function Q(a){let b=(await F()).filter(a=>"telegram"===a.type);if(0===b.length)return a;let c=new Set(b.map(a=>a.id)),d=new Map;for(let a of b){let b=a.name.trim().toLowerCase();if(!b)continue;let c=d.get(b)??[];c.push(a),d.set(b,c)}let e=!1,f=a.channels.map(a=>{if("telegram"!==a.type||c.has(a.id))return a;let b=d.get(a.name.trim().toLowerCase())??[];return 1!==b.length?a:(e=!0,{...a,id:b[0].id,name:b[0].name})});return e?(0,y._E)({version:1,channels:f}):a}function R(a,b){let c=new Map,d=[{value:a,depth:0}],e=new Set;for(;d.length>0;){let a=d.shift();if(!a||a.depth>6)continue;let f=a.value;if(null==f||"object"!=typeof f||e.has(f))continue;if(e.add(f),Array.isArray(f)){for(let b of f)d.push({value:b,depth:a.depth+1});continue}if(!C(f))continue;let g=Y(f.chatId);if(g){let a=B(f.title)??B(f.chatTitle)??null;c.set(g,{routeId:g,provider:"telegram",kind:"group",title:a,lastSeen:b})}for(let b of Object.values(f))d.push({value:b,depth:a.depth+1})}return Array.from(c.values())}function S(a,b){let c=new Map;for(let d of a.matchAll(/\{[^{}]*"chatId"\s*:\s*-?\d+[^{}]*\}/g)){let a=d[0];try{let d=JSON.parse(a);for(let a of R(d,b))c.set(a.routeId,a);continue}catch{}let e=a.match(/"chatId"\s*:\s*(-?\d+)/),f=Y(e?.[1]??null);if(!f)continue;let g=a.match(/"title"\s*:\s*"([^"]+)"/);c.set(f,{routeId:f,provider:"telegram",kind:"group",title:g?.[1]??null,lastSeen:b})}return Array.from(c.values())}function T(a,b,c){let d=new Map,e=[{value:a,depth:0,context:{accountId:null,guildId:null,guildName:null,channelId:null,channelName:null,threadId:null,threadName:null}}],f=new Set;for(;e.length>0;){var g,h,i,j;let a=e.shift();if(!a||a.depth>7)continue;let k=a.value;if(null==k||"object"!=typeof k||f.has(k))continue;if(f.add(k),Array.isArray(k)){for(let b of k)e.push({value:b,depth:a.depth+1,context:a.context});continue}if(!C(k))continue;let l=function(a,b){let c=C(b.guild)?b.guild:null,d=C(b.channel)?b.channel:null,e=C(b.thread)?b.thread:null,f=C(b.peer)?b.peer:null,g=B(b.kind),h=B(b.type),i=X(b.id),j=X(b.channelId)??X(b.channel_id)??X(d?.id)??(f?.kind==="channel"?X(f.id):null)??(("channel"===g||"channel"===h)&&i?i:null)??a.channelId,k=X(b.threadId)??X(b.thread_id)??X(e?.id)??(f?.kind==="thread"?X(f.id):null)??(("thread"===g||"thread"===h)&&i?i:null)??a.threadId;return{accountId:B(b.accountId)??B(b.channelAccountId)??B(b.account)??a.accountId,guildId:X(b.guildId)??X(b.guild_id)??X(c?.id)??a.guildId,guildName:B(b.guildName)??B(c?.name)??a.guildName,channelId:j,channelName:B(b.channelName)??B(d?.name)??("channel"===g||"channel"===h?B(b.name):null)??a.channelName,threadId:k,threadName:B(b.threadName)??B(e?.name)??("thread"===g||"thread"===h?B(b.name):null)??a.threadName}}(a.context,k);if(c&&l.accountId&&l.accountId!==c)continue;let m=(g=l,h=b,g.channelId?V({kind:"channel",guildId:g.guildId,targetId:g.channelId,title:g.channelName?`#${g.channelName}`:`#${g.channelId}`,subtitle:g.guildName??g.guildId,lastSeen:h}):null);m&&d.set(m.routeId,m);let n=(i=l,j=b,i.threadId?V({kind:"thread",guildId:i.guildId,targetId:i.threadId,parentId:i.channelId,title:i.threadName??`Thread ${i.threadId}`,subtitle:i.channelName&&i.guildName?`#${i.channelName} \xb7 ${i.guildName}`:i.channelName?`#${i.channelName}`:i.guildName??i.guildId,lastSeen:j}):null);for(let a of(n&&d.set(n.routeId,n),function(a,b,c){if(!b.guildId)return[];let d=new Map;for(let e of[a.roleIds,a.memberRoleIds,a.roles,C(a.member)?a.member.roles:null])if(Array.isArray(e))for(let a of e){let e=X(a)??(C(a)?X(a.id):null);if(!e)continue;let f=C(a)?B(a.name):null,g=V({kind:"role",guildId:b.guildId,targetId:e,title:f?`@${f}`:`@${e}`,subtitle:b.guildName??b.guildId,lastSeen:c});d.set(g.routeId,g)}return Array.from(d.values())}(k,l,b)))d.set(a.routeId,a);for(let b of Object.values(k))e.push({value:b,depth:a.depth+1,context:l})}return Array.from(d.values())}function U(a,b,c){let d=new Map,e=a.match(/accountId["=:\s]+([A-Za-z0-9._-]+)/i)?.[1]??null;if(c&&e&&e!==c)return[];for(let e of a.matchAll(/\{[^{}]*(guildId|channelId|threadId|roleIds|roles)[^{}]*\}/g))try{let a=JSON.parse(e[0]);for(let e of T(a,b,c))d.set(e.routeId,e)}catch{}let f=X(a.match(/guild(?:Id)?["=:\s]+(\d{5,})/i)?.[1]??null),g=X(a.match(/channel(?:Id)?["=:\s]+(\d{5,})/i)?.[1]??null),h=X(a.match(/thread(?:Id)?["=:\s]+(\d{5,})/i)?.[1]??null);if(g){let a=V({kind:"channel",guildId:f,targetId:g,title:`#${g}`,subtitle:f?`Guild ${f}`:null,lastSeen:b});d.set(a.routeId,a)}if(h){let a=V({kind:"thread",guildId:f,targetId:h,parentId:g,title:`Thread ${h}`,subtitle:g?`Channel ${g}`:f?`Guild ${f}`:null,lastSeen:b});d.set(a.routeId,a)}if(f)for(let c of(a.match(/roles?["=:\s]+\[([^\]]+)\]/i)?.[1]??"").matchAll(/\b(\d{5,})\b/g)){let a=X(c[1]);if(!a)continue;let e=V({kind:"role",guildId:f,targetId:a,title:`@${a}`,subtitle:`Guild ${f}`,lastSeen:b});d.set(e.routeId,e)}return Array.from(d.values())}function V(a){return{routeId:W({kind:a.kind,guildId:a.guildId,targetId:a.targetId,parentId:a.parentId}),provider:"discord",kind:a.kind,title:a.title,subtitle:a.subtitle,lastSeen:a.lastSeen,guildId:a.guildId,parentId:a.parentId??null}}function W(a){let b=a.guildId??"_";return"thread"===a.kind?`thread:${b}:${a.targetId}:${a.parentId??"_"}`:`${a.kind}:${b}:${a.targetId}`}function X(a){if("number"==typeof a&&Number.isFinite(a))return String(a);if("string"!=typeof a)return null;let b=a.trim();return/^\d{5,}$/.test(b)?b:null}function Y(a){if("number"==typeof a&&Number.isFinite(a)&&a<0)return String(a);if("string"!=typeof a)return null;let b=a.trim();return/^-\d+$/.test(b)?b:null}function Z(a,b){if(!b)return a;if(!a)return b;let c=Date.parse(a),d=Date.parse(b);return Number.isNaN(d)?a:Number.isNaN(c)||d>c?b:a}}};
@@ -1 +1 @@
1
- "use strict";exports.id=262,exports.ids=[262],exports.modules={12491:(a,b,c)=>{function d(a){return f(a)?{apiAction:"generateLocalToken",cta:"Repair token",label:"Gateway token",detail:"Generate a fresh local Gateway token, restart the Gateway, then retry."}:e(a)?{apiAction:"repairDeviceAccess",cta:"Repair access",label:"Gateway access",detail:"Approve the local AgentOS device scope request, then retry."}:null}function e(a){let b=a?.trim()??"";return!!b&&(/scope upgrade pending approval/i.test(b)||/pairing_pending/i.test(b)||/device token scope mismatch/i.test(b)||/connected_no_operator_scope/i.test(b)||/more scopes than currently approved/i.test(b)||/\bmissing scope:\s*operator\.(?:read|write|admin)\b/i.test(b)||/\bmissing operator\.(?:read|write|admin) scope\b/i.test(b))}function f(a){let b=a?.trim()??"";return!!b&&(/\bgateway\b[\s\S]*\btoken mismatch\b/i.test(b)||/\btoken mismatch\b[\s\S]*\bgateway\b/i.test(b)||/\bprovide gateway auth token\b/i.test(b))}c.d(b,{D8:()=>e,Ek:()=>d,yb:()=>f})},39802:(a,b,c)=>{function d(a){return"string"==typeof a&&a.trim().length>0?a.trim():null}function e(a){let[b,c,e,f]=a.trim().split(":");return("channel"===b||"thread"===b||"role"===b)&&d(e)?{kind:b,guildId:c&&"_"!==c?d(c):null,targetId:d(e),parentId:"thread"===b?d(f):null}:null}c.d(b,{S:()=>e})},70262:(a,b,c)=>{c.d(b,{LB:()=>r,Mh:()=>m,Pe:()=>s,U$:()=>o,Xy:()=>k,kz:()=>l,n5:()=>u,ux:()=>n,xC:()=>t,xm:()=>p});var d=c(39503),e=c(39802),f=c(74497),g=c(12491),h=c(96972);let i=["operator.read"],j={ok:!0,blocked:!1,role:null,scopes:[],missingScopes:[],requestId:null,issue:null,repairAvailable:!1,repairAction:null};function k(a,b=null){return{source:a,checkedAt:null,gatewayAccess:b?p(b):j,providerOrder:[],providerLabels:{},accountsByProvider:{},accountsByKey:{},issue:b}}function l(a=!1,b="unavailable"){return{checked:a,source:b,checkedAt:null,expectedBindingCount:0,currentBindingCount:0,summary:{ok:0,missingBindings:0,extraBindings:0,agentMismatch:0,accountMissing:0,providerDisabled:0},issues:[]}}async function m(a){if("interactive"===a.profile)return o(a.channelAccounts,a.channelRegistry,{issue:"Live OpenClaw channel status is skipped for interactive snapshots."});try{let a=await (0,d.rw)().getChannelStatus({probe:!0,timeoutMs:5e3},{timeoutMs:7e3});return n(a,{source:"gateway-probe",checkedAt:new Date().toISOString()})}catch(c){let b=(0,h.n3)(c,"OpenClaw channel status is unavailable.");return o(a.channelAccounts,a.channelRegistry,{issue:b,gatewayAccess:p(b)})}}function n(a,b){let c=function(a){let b={...a.channelLabels??{}};for(let c of a.channelMeta??[])c.id&&c.label&&(b[c.id]=c.label);return b}(a),d=I([...Array.isArray(a.channelOrder)?a.channelOrder:[],...Object.keys(a.channelAccounts??{}),...Object.keys(c)]),e={},g={};for(let i of d){let d=a.channelAccounts?.[i]??[];for(let a of d){if(function(a,b){if("default"!==G(a.accountId)||!b.some(a=>{let b=G(a.accountId);return!!(b&&"default"!==b)}))return!1;let c=!0===a.configured||!1!==a.configured&&!0===a.enabled,d=!0===a.connected||!0===a.running||!0===a.linked,e=G(a.lastError)?.toLowerCase()??"";return!c&&!d&&e.includes("not configured")}(a,d))continue;let j=function(a,b,c){var d;let e=G(b.accountId);if(!e)return null;let f=G(b.lastError),g=!1!==b.enabled,i=!0===b.configured||!1!==b.configured&&!0===b.enabled,j=!0===b.linked,k=!0===b.running,l=!0===b.connected,m=!1===b.enabled,n=!!f,o=(d={failed:n,disabled:m,connected:l,running:k,linked:j,configured:i}).failed?"failed":d.disabled?"disabled":d.connected?"connected":d.running?"running":d.linked?"linked":d.configured?"configured":"unknown",p=G(b.name)??e;return{key:B(a,e),provider:a,accountId:e,name:p,label:p||c.providerLabel,enabled:g,configured:i,linked:j,running:k,connected:l,disabled:m,failed:n,status:o,healthState:G(b.healthState),errorMessage:f?(0,h.bS)(f):null,source:c.source,checkedAt:c.checkedAt,raw:function(a){let b={};for(let[c,d]of Object.entries(a)){if(/token|secret|password|credential/i.test(c)){b[c]="__REDACTED__";continue}b[c]="string"==typeof d?(0,h.bS)(d):d}return b}(b)}}(i,a,{source:b.source,checkedAt:b.checkedAt,providerLabel:c[i]??(0,f.rY)(i).label});j&&(e[i]??={},e[i][j.accountId]=j,g[j.key]=j)}}return{source:b.source,checkedAt:b.checkedAt,gatewayAccess:j,providerOrder:d,providerLabels:c,accountsByProvider:e,accountsByKey:g,issue:null}}function o(a,b,c={}){let d=new Date().toISOString(),e=I([...a.map(a=>a.type),...b.channels.map(a=>a.type)]),g={},h={},i={};for(let a of e)i[a]=(0,f.rY)(a).label;for(let b of a){let a=!1===b.enabled?"disabled":"configured",c={key:B(b.type,b.id),provider:b.type,accountId:b.id,name:b.name,label:b.name,enabled:!1!==b.enabled,configured:!0,linked:!1,running:!1,connected:!1,disabled:!1===b.enabled,failed:!1,status:a,healthState:null,errorMessage:null,source:"config-only",checkedAt:d};g[b.type]??={},g[b.type][b.id]=c,h[c.key]=c}return{source:e.length>0?"config-only":"unavailable",checkedAt:d,gatewayAccess:c.gatewayAccess??j,providerOrder:e,providerLabels:i,accountsByProvider:g,accountsByKey:h,issue:c.issue??null}}function p(a){var b,c;let d=a?.trim()||null,e=d&&(b=(0,g.Ek)(d))?{...b}:null,f=function(a){let b=new Set;if(!a)return[];for(let c of a.matchAll(/operator\.(?:admin|read|write|approvals|pairing|talk\.secrets)/g))b.add(c[0]);if(/scope upgrade pending approval|pairing_pending|connected_no_operator_scope/i.test(a))for(let a of i)b.add(a);return Array.from(b).sort()}(d),h=(c=d)?/requestId:\s*([a-z0-9-]+)/i.exec(c)?.[1]??null:null,j=!!(d&&(e||f.length>0||h));return{ok:!j,blocked:j,role:null,scopes:[],missingScopes:f,requestId:h,issue:d,repairAvailable:!!e,repairAction:e}}function q(a,b={}){let c=G(b.workspaceId),d=[];for(let b of a.channels.filter(D)){let a=c?b.workspaces.filter(a=>a.workspaceId===c):b.workspaces;if(0!==a.length){if(b.primaryAgentId&&d.push({agentId:b.primaryAgentId,match:{channel:b.type,accountId:b.id}}),"telegram"===b.type)for(let c of a)for(let a of c.groupAssignments.filter(C))d.push({agentId:a.agentId,match:{channel:"telegram",accountId:b.id}}),d.push({agentId:a.agentId,match:{channel:"telegram",accountId:b.id,peer:{kind:"group",id:a.chatId}}});if("discord"===b.type)for(let c of a)for(let a of c.groupAssignments.filter(C)){let c=function(a,b){if(!b.agentId)return null;let c=(0,e.S)(b.chatId);return c?"role"===c.kind?c.guildId?{agentId:b.agentId,match:{channel:"discord",accountId:a,guildId:c.guildId,roles:[c.targetId]}}:null:{agentId:b.agentId,match:{channel:"discord",accountId:a,...c.guildId?{guildId:c.guildId}:{},peer:{kind:c.kind,id:c.targetId}}}:null}(b.id,a);c&&d.push(c)}}}return E(d)}function r(a){if(!Array.isArray(a.currentBindings))return l(!1,"unavailable");let b=new Date().toISOString(),c=q(a.registry,{workspaceId:a.workspaceId}).map(a=>v(a)).filter(a=>!!a),d=a.currentBindings.map(a=>v(a)).filter(a=>!!a),e=a.registry.channels.filter(b=>D(b)&&(!a.workspaceId||b.workspaces.some(b=>b.workspaceId===a.workspaceId))),f=new Set(e.map(a=>B(a.type,a.id))),g=d.filter(a=>!!a.accountId&&(f.has(B(a.provider,a.accountId))||w(a.provider,a.accountId))),h=new Map(g.map(a=>[a.key,a])),i=function(a){let b=new Map;for(let c of a)b.set(c.matchKey,[...b.get(c.matchKey)??[],c]);return b}(g),j=new Map(c.map(a=>[a.key,a])),k=new Set(c.map(a=>a.matchKey)),m=[],n={ok:0,missingBindings:0,extraBindings:0,agentMismatch:0,accountMissing:0,providerDisabled:0};for(let b of c){if(h.has(b.key)){n.ok+=1;continue}let c=i.get(b.matchKey)??[];if(c.length>0){n.agentMismatch+=1,m.push(x("agent-mismatch",b,{severity:"error",actualAgentId:c.map(a=>a.agentId).join(", "),detail:`OpenClaw binding exists for this route, but it points at ${c.map(a=>a.agentId).join(", ")} instead of ${b.agentId}.`,...z(a.registry,b,a.workspaceId)}));continue}n.missingBindings+=1,m.push(x("missing-binding",b,{severity:"error",detail:"AgentOS expects this OpenClaw binding, but it is missing from OpenClaw config.",...z(a.registry,b,a.workspaceId)}))}for(let b of g)j.has(b.key)||k.has(b.matchKey)||(n.extraBindings+=1,m.push(x("extra-binding",b,{severity:"warning",detail:"OpenClaw has a managed binding that is no longer represented by the AgentOS workspace surface registry.",...z(a.registry,b,a.workspaceId)})));let o=new Set(a.configuredAccounts.map(a=>B(a.type,a.id)));for(let b of e){let c=B(b.type,b.id);o.has(c)||a.surfaceRuntime.accountsByKey[c]||(n.accountMissing+=1,m.push(y("account-missing",b,{severity:"error",detail:"AgentOS has a workspace surface binding, but OpenClaw did not return a matching configured account.",workspaceId:a.workspaceId??null})));let d=a.surfaceRuntime.accountsByKey[c];d?.disabled&&(n.providerDisabled+=1,m.push(y("provider-disabled",b,{severity:"warning",detail:"OpenClaw returned this account as disabled.",workspaceId:a.workspaceId??null})))}return{checked:!0,source:"openclaw-bindings",checkedAt:b,expectedBindingCount:c.length,currentBindingCount:g.length,summary:n,issues:m}}function s(a){let b=new Set(a.previousBindings.map(a=>v(a)?.key).filter(a=>!!a)),c=new Set(a.nextBindings.map(a=>v(a)?.key).filter(a=>!!a)),d=[...b].filter(a=>!c.has(a)).length,e=[...c].filter(a=>!b.has(a)).length;return{scope:a.scope,workspaceId:a.workspaceId,checkedAt:new Date().toISOString(),expectedBindingCount:q(a.registry,{workspaceId:"workspace"===a.scope?a.workspaceId:null}).length,previousBindingCount:a.previousBindings.length,nextBindingCount:a.nextBindings.length,changed:d>0||e>0,removedBindingCount:d,addedBindingCount:e,...a.configMutations?{configMutations:a.configMutations}:{},drift:a.drift}}function t(a){let b=q(a.registry,{workspaceId:"workspace"===a.scope?a.workspaceId:null}),c=new Set(b.map(a=>v(a)).filter(a=>!!a).map(a=>a.matchKey)),d=new Set(a.registry.channels.filter(b=>D(b)&&("all"===a.scope||b.workspaces.some(b=>b.workspaceId===a.workspaceId))).map(a=>B(a.type,a.id)));return E([...a.currentBindings.filter(b=>{let e=v(b);if(!e?.accountId)return!0;let f=B(e.provider,e.accountId),g=d.has(f),h=!g&&w(e.provider,e.accountId);return!g&&!h||!("all"===a.scope||h||c.has(e.matchKey))&&function(a,b,c){if(!c||!b.routeId)return!1;let d=a.channels.find(a=>a.type===b.provider&&a.id===b.accountId),e=d?.workspaces.find(a=>a.groupAssignments.some(a=>!1!==a.enabled&&a.chatId===b.routeId));return!!(e&&e.workspaceId!==c)}(a.registry,e,a.workspaceId??null)}),...b])}function u(a,b){let c=Object.values(a.accountsByProvider[b]??{}),d=c.find(a=>a.errorMessage);if(a.gatewayAccess.blocked)return{status:"unknown",statusLabel:"Gateway Blocked",connectionHealth:{label:"Gateway access blocked",detail:a.gatewayAccess.issue??"OpenClaw Gateway access needs approval before live status can be checked."},errorMessage:a.gatewayAccess.issue};if(d?.errorMessage)return{status:"failed",statusLabel:"Failed",connectionHealth:{label:"Connector error",detail:d.errorMessage},errorMessage:d.errorMessage};if("unavailable"===a.source&&0===c.length)return{status:"unknown",statusLabel:"Unknown",connectionHealth:{label:"OpenClaw status unavailable",detail:a.issue??"OpenClaw channel status is unavailable."},errorMessage:a.issue};if(0===c.length)return{status:"missing-credentials",statusLabel:"Missing Credentials",connectionHealth:{label:"No OpenClaw account",detail:"OpenClaw channel status did not return an account for this provider."},errorMessage:null};if(c.every(a=>a.disabled))return{status:"disabled",statusLabel:"Disabled",connectionHealth:{label:"Disabled",detail:"OpenClaw returned account records, but every account is disabled."},errorMessage:null};let e=c.filter(a=>a.connected||a.running||a.linked);return e.length>0?{status:"connected",statusLabel:"Connected",connectionHealth:{label:"Verified by OpenClaw",detail:`${e.length} account${1===e.length?"":"s"} returned connected, running, or linked from channels.status.`},errorMessage:null}:c.filter(a=>a.configured||a.enabled).length>0?{status:"unknown",statusLabel:"config-only"===a.source?"Configured":"Unknown",connectionHealth:{label:(a.source,"Configured, not live-verified"),detail:"config-only"===a.source?"OpenClaw configuration exists, but live channel status was unavailable.":"OpenClaw returned configured account records, but no account reported connected, running, or linked."},errorMessage:null}:{status:"pending-setup",statusLabel:"Pending Setup",connectionHealth:{label:"Setup incomplete",detail:"OpenClaw returned account records without configured or connected state."},errorMessage:null}}function v(a){if(!H(a)||"string"!=typeof a.agentId)return null;let b=H(a.match)?a.match:null,c=G(b?.channel);if(!b||!c)return null;let d=a.agentId.trim();if(!d)return null;let e=G(b.accountId),f=H(b.peer)?b.peer:null,g=G(f?.kind),h=G(f?.id),i=g??(Array.isArray(b.roles)&&b.roles.length>0?"role":null),j=h??F(b.roles).join(","),k={channel:c,accountId:e,guildId:G(b.guildId),peer:g&&h?{kind:g,id:h}:null,query:G(b.query),roles:F(b.roles),teamId:G(b.teamId)},l=J(k);return{key:J({agentId:d,match:k}),matchKey:l,agentId:d,provider:c,accountId:e,routeKind:i,routeId:j||null,raw:a}}function w(a,b){return b.startsWith(`${a}-agentos-`)}function x(a,b,c){return{id:`${a}:${b.key}`,kind:a,severity:c.severity,title:A(a),detail:c.detail,workspaceId:c.workspaceId??null,workspacePath:c.workspacePath??null,provider:b.provider,accountId:b.accountId,routeId:b.routeId,routeKind:b.routeKind,expectedAgentId:"extra-binding"===a?null:b.agentId,actualAgentId:c.actualAgentId??("extra-binding"===a?b.agentId:null),bindingKey:b.key}}function y(a,b,c){let d=c.workspaceId?b.workspaces.find(a=>a.workspaceId===c.workspaceId)??null:1===b.workspaces.length?b.workspaces[0]:null;return{id:`${a}:${b.type}:${b.id}`,kind:a,severity:c.severity,title:A(a),detail:c.detail,workspaceId:d?.workspaceId??c.workspaceId??null,workspacePath:d?.workspacePath??null,provider:b.type,accountId:b.id,routeId:null,routeKind:null,expectedAgentId:b.primaryAgentId,actualAgentId:null,bindingKey:null}}function z(a,b,c){let d=a.channels.find(a=>a.type===b.provider&&a.id===b.accountId);if(!d)return{workspaceId:c??null,workspacePath:null};let e=c?d.workspaces.find(a=>a.workspaceId===c)??null:b.routeId?d.workspaces.find(a=>a.groupAssignments.some(a=>!1!==a.enabled&&a.chatId===b.routeId))??null:1===d.workspaces.length?d.workspaces[0]:null;return{workspaceId:e?.workspaceId??c??null,workspacePath:e?.workspacePath??null}}function A(a){switch(a){case"missing-binding":return"Missing OpenClaw binding";case"extra-binding":return"Extra OpenClaw binding";case"agent-mismatch":return"Agent mismatch";case"account-missing":return"Missing OpenClaw account";case"provider-disabled":return"Provider disabled"}}function B(a,b){return`${a}:${b}`}function C(a){return!1!==a.enabled&&!!a.agentId&&!!a.chatId}function D(a){return"telegram"===a.type||"discord"===a.type||"slack"===a.type||"googlechat"===a.type}function E(a){let b=new Set,c=[];for(let d of a){let a=JSON.stringify(d);b.has(a)||(b.add(a),c.push(d))}return c}function F(a){return Array.isArray(a)?a.map(a=>G(String(a))).filter(a=>!!a).sort():[]}function G(a){if("string"!=typeof a)return null;let b=a.trim();return b.length>0?b:null}function H(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function I(a){return Array.from(new Set(a.map(a=>G(a)).filter(Boolean)))}function J(a){return JSON.stringify(function a(b){return Array.isArray(b)?b.map(a):H(b)?Object.fromEntries(Object.entries(b).filter(([,a])=>null!=a&&!(Array.isArray(a)&&0===a.length)).sort(([a],[b])=>a.localeCompare(b)).map(([b,c])=>[b,a(c)])):b}(a))}},74497:(a,b,c)=>{c.d(b,{MY:()=>f,Yx:()=>g,rY:()=>e});let d=new Map([{provider:"telegram",label:"Telegram",kind:"chat",description:"Bot accounts, public groups, and delegated community routing.",iconKey:"siTelegram",accentColor:"#26A5E4",supportsProvisioning:!0,provisionFields:[{key:"token",label:"Bot token",placeholder:"123456:ABC...",inputType:"password",secret:!0,required:!0,section:"basic"}],supportsRouteDiscovery:!0,providerManagedByOpenClaw:!0},{provider:"discord",label:"Discord",kind:"chat",description:"Servers, channels, DMs, and thread-aware team routing.",iconKey:"siDiscord",accentColor:"#5865F2",supportsProvisioning:!0,provisionFields:[{key:"token",label:"Bot token",placeholder:"Discord bot token",inputType:"password",secret:!0,required:!0,section:"basic"}],supportsRouteDiscovery:!0,providerManagedByOpenClaw:!0},{provider:"slack",label:"Slack",kind:"chat",description:"Workspace apps, channels, and internal team handoffs.",iconKey:"siSlack",accentColor:"#4A154B",supportsProvisioning:!0,provisionFields:[{key:"botToken",label:"Bot token",placeholder:"xoxb-...",inputType:"password",secret:!0,required:!0,section:"basic"}],supportsRouteDiscovery:!1,providerManagedByOpenClaw:!0},{provider:"googlechat",label:"Google Chat",kind:"chat",description:"Spaces and enterprise chat surfaces backed by OpenClaw.",iconKey:"siGooglechat",accentColor:"#34A853",supportsProvisioning:!0,provisionFields:[{key:"webhookUrl",label:"Webhook URL",placeholder:"https://chat.googleapis.com/...",inputType:"url",secret:!0,required:!0,section:"basic"}],supportsRouteDiscovery:!1,providerManagedByOpenClaw:!0},{provider:"gmail",label:"Gmail",kind:"inbox",description:"Inbox ownership, draft/send workflows, and Gmail-triggered automations.",iconKey:"siGmail",accentColor:"#EA4335",supportsProvisioning:!0,provisionFields:[{key:"account",label:"Account email",placeholder:"agent@example.com",inputType:"text",required:!0,section:"basic"},{key:"project",label:"Project ID",placeholder:"openclaw-project",section:"basic"},{key:"label",label:"Label",placeholder:"inbox",section:"basic"},{key:"hookToken",label:"Hook token",placeholder:"shared-secret",inputType:"password",secret:!0,section:"basic"},{key:"hookUrl",label:"Hook URL",placeholder:"https://your-host.example/gmail-pubsub",inputType:"url",section:"advanced"},{key:"topic",label:"Topic",placeholder:"gmail-topic",section:"advanced"},{key:"subscription",label:"Subscription",placeholder:"gmail-subscription",section:"advanced"},{key:"pushToken",label:"Push token",placeholder:"push-secret",inputType:"password",secret:!0,section:"advanced"},{label:"Serve port",placeholder:"8788",key:"serve.port",inputType:"number",section:"advanced"},{key:"serve.bind",label:"Serve bind",placeholder:"127.0.0.1",section:"advanced"},{key:"serve.path",label:"Serve path",placeholder:"/",section:"advanced"},{key:"includeBody",label:"Include body",inputType:"checkbox",defaultValue:!0,section:"advanced"},{key:"maxBytes",label:"Max bytes",placeholder:"20000",inputType:"number",section:"advanced"},{key:"renewEveryMinutes",label:"Renew interval (minutes)",placeholder:"720",inputType:"number",section:"advanced"},{key:"tailscale.mode",label:"Tailscale mode",placeholder:"funnel",defaultValue:"funnel",inputType:"select",options:[{label:"Off",value:"off"},{label:"Serve",value:"serve"},{label:"Funnel",value:"funnel"}],helpText:"One of funnel, serve, or off.",section:"advanced"},{key:"tailscale.path",label:"Tailscale path",placeholder:"/gmail-pubsub",section:"advanced"},{key:"tailscale.target",label:"Tailscale target",placeholder:"http://127.0.0.1:8788/gmail-pubsub",inputType:"url",section:"advanced"},{key:"pushEndpoint",label:"Push endpoint",placeholder:"https://public.example/gmail-push",inputType:"url",section:"advanced"},{key:"model",label:"Model",placeholder:"openrouter/meta-llama/llama-3.3-70b-instruct:free",section:"advanced"},{key:"thinking",label:"Thinking",placeholder:"off",section:"advanced"}],supportsRouteDiscovery:!1,providerManagedByOpenClaw:!0},{provider:"email",label:"Email",kind:"inbox",description:"Generic email inboxes and send/read workflows exposed through OpenClaw.",iconKey:"siMaildotru",accentColor:"#0F172A",supportsProvisioning:!0,provisionFields:[{key:"address",label:"Address",placeholder:"inbox@example.com",inputType:"text",required:!0,section:"basic"},{key:"oauth",label:"OAuth config",placeholder:'{"clientId":"...","clientSecret":"..."}',inputType:"textarea",helpText:"Paste JSON or a provider-specific OAuth configuration blob.",section:"basic"},{key:"watch",label:"Watch",inputType:"checkbox",defaultValue:!0,section:"basic"},{key:"pubsub",label:"Pub/Sub",placeholder:"projects/project-id/topics/email-events",section:"basic"},{key:"imap.host",label:"IMAP host",placeholder:"imap.example.com",inputType:"text",section:"advanced"},{key:"imap.port",label:"IMAP port",placeholder:"993",inputType:"number",section:"advanced"},{key:"smtp.host",label:"SMTP host",placeholder:"smtp.example.com",inputType:"text",section:"advanced"},{key:"smtp.port",label:"SMTP port",placeholder:"587",inputType:"number",section:"advanced"},{key:"username",label:"Username",placeholder:"mailbox-user",inputType:"text",section:"advanced"},{key:"password",label:"Password",placeholder:"app password",inputType:"password",secret:!0,section:"advanced"}],supportsRouteDiscovery:!1,providerManagedByOpenClaw:!0},{provider:"webhook",label:"Webhook",kind:"trigger",description:"External event triggers delivered into OpenClaw automations.",iconKey:"siWebhook",accentColor:"#0EA5E9",supportsProvisioning:!0,provisionFields:[{key:"token",label:"Hook token",placeholder:"shared-secret",inputType:"password",secret:!0,required:!0,section:"basic"},{key:"path",label:"Path",placeholder:"/hooks",section:"basic"}],supportsRouteDiscovery:!1,providerManagedByOpenClaw:!0},{provider:"cron",label:"Cron",kind:"trigger",description:"Scheduled tasks and recurring automation entry points.",iconKey:"siClockify",accentColor:"#F59E0B",supportsProvisioning:!0,provisionFields:[{key:"webhookToken",label:"Webhook token",placeholder:"replace-with-dedicated-webhook-token",inputType:"password",secret:!0,required:!0,section:"basic"},{key:"sessionRetention",label:"Session retention",placeholder:"24h",section:"basic"},{key:"maxConcurrentRuns",label:"Max concurrent runs",placeholder:"1",inputType:"number",section:"basic"},{key:"store",label:"Store path",placeholder:"~/.openclaw/cron/jobs.json",section:"advanced"},{key:"runLog.maxBytes",label:"Run log max bytes",placeholder:"2mb",section:"advanced"},{key:"runLog.keepLines",label:"Run log keep lines",placeholder:"2000",inputType:"number",section:"advanced"}],supportsRouteDiscovery:!1,providerManagedByOpenClaw:!0}].map(a=>[a.provider,a]));function e(a){return d.get(a)??{provider:a,label:f(a),kind:"chat",description:"OpenClaw-managed integration surface.",supportsProvisioning:!1,provisionFields:[],supportsRouteDiscovery:!1,providerManagedByOpenClaw:!0}}function f(a){let b=d.get(a);return b?b.label:a.split(/[-_]/).filter(Boolean).map(a=>a.slice(0,1).toUpperCase()+a.slice(1)).join(" ")}function g(a){return e(a).kind}}};
1
+ "use strict";exports.id=262,exports.ids=[262],exports.modules={12491:(a,b,c)=>{function d(a){return f(a)?{apiAction:"generateLocalToken",cta:"Repair token",label:"Gateway token",detail:"Generate a fresh local Gateway token, restart the Gateway, then retry."}:e(a)?{apiAction:"repairDeviceAccess",cta:"Repair access",label:"Gateway access",detail:"Approve the local AgentOS device scope request, then retry."}:null}function e(a){let b=a?.trim()??"";return!!b&&(/scope upgrade pending approval/i.test(b)||/pairing_pending/i.test(b)||/device token scope mismatch/i.test(b)||/connected_no_operator_scope/i.test(b)||/more scopes than currently approved/i.test(b)||/\bmissing scope:\s*operator\.(?:read|write|admin)\b/i.test(b)||/\bmissing operator\.(?:read|write|admin) scope\b/i.test(b))}function f(a){let b=a?.trim()??"";return!!b&&(/\bgateway\b[\s\S]*\btoken mismatch\b/i.test(b)||/\btoken mismatch\b[\s\S]*\bgateway\b/i.test(b)||/\bprovide gateway auth token\b/i.test(b))}c.d(b,{D8:()=>e,Ek:()=>d,yb:()=>f})},39802:(a,b,c)=>{function d(a){return"string"==typeof a&&a.trim().length>0?a.trim():null}function e(a){let[b,c,e,f]=a.trim().split(":");return("channel"===b||"thread"===b||"role"===b)&&d(e)?{kind:b,guildId:c&&"_"!==c?d(c):null,targetId:d(e),parentId:"thread"===b?d(f):null}:null}c.d(b,{S:()=>e})},70262:(a,b,c)=>{c.d(b,{LB:()=>r,Mh:()=>m,Pe:()=>s,U$:()=>o,Xy:()=>k,kz:()=>l,n5:()=>u,ux:()=>n,xC:()=>t,xm:()=>p});var d=c(39503),e=c(39802),f=c(74497),g=c(12491),h=c(96972);let i=["operator.read"],j={ok:!0,blocked:!1,role:null,scopes:[],missingScopes:[],requestId:null,issue:null,repairAvailable:!1,repairAction:null};function k(a,b=null){return{source:a,checkedAt:null,gatewayAccess:b?p(b):j,providerOrder:[],providerLabels:{},accountsByProvider:{},accountsByKey:{},issue:b}}function l(a=!1,b="unavailable"){return{checked:a,source:b,checkedAt:null,expectedBindingCount:0,currentBindingCount:0,summary:{ok:0,missingBindings:0,extraBindings:0,agentMismatch:0,accountMissing:0,providerDisabled:0},issues:[]}}async function m(a){if("interactive"===a.profile)return o(a.channelAccounts,a.channelRegistry,{issue:"Live OpenClaw channel status is skipped for interactive snapshots."});try{let a=await (0,d.rw)().getChannelStatus({probe:!0,timeoutMs:5e3},{timeoutMs:7e3});return n(a,{source:"gateway-probe",checkedAt:new Date().toISOString()})}catch(c){let b=(0,h.n3)(c,"OpenClaw channel status is unavailable.");return o(a.channelAccounts,a.channelRegistry,{issue:b,gatewayAccess:p(b)})}}function n(a,b){let c=function(a){let b={...a.channelLabels??{}};for(let c of a.channelMeta??[])c.id&&c.label&&(b[c.id]=c.label);return b}(a),d=I([...Array.isArray(a.channelOrder)?a.channelOrder:[],...Object.keys(a.channelAccounts??{}),...Object.keys(c)]),e={},g={};for(let i of d){let d=a.channelAccounts?.[i]??[];for(let a of d){if(function(a,b){if("default"!==G(a.accountId)||!b.some(a=>{let b=G(a.accountId);return!!(b&&"default"!==b)}))return!1;let c=!0===a.configured||!1!==a.configured&&!0===a.enabled,d=!0===a.connected||!0===a.running||!0===a.linked,e=G(a.lastError)?.toLowerCase()??"";return!c&&!d&&e.includes("not configured")}(a,d))continue;let j=function(a,b,c){var d;let e=G(b.accountId);if(!e)return null;let f=G(b.lastError),g=!1!==b.enabled,i=!0===b.configured||!1!==b.configured&&!0===b.enabled,j=!0===b.linked,k=!0===b.running,l=!0===b.connected,m=!1===b.enabled,n=!!f,o=(d={failed:n,disabled:m,connected:l,running:k,linked:j,configured:i}).failed?"failed":d.disabled?"disabled":d.connected?"connected":d.running?"running":d.linked?"linked":d.configured?"configured":"unknown",p=G(b.name)??e;return{key:B(a,e),provider:a,accountId:e,name:p,label:p||c.providerLabel,enabled:g,configured:i,linked:j,running:k,connected:l,disabled:m,failed:n,status:o,healthState:G(b.healthState),errorMessage:f?(0,h.bS)(f):null,source:c.source,checkedAt:c.checkedAt,raw:function(a){let b={};for(let[c,d]of Object.entries(a)){if(/token|secret|password|credential/i.test(c)){b[c]="__REDACTED__";continue}b[c]="string"==typeof d?(0,h.bS)(d):d}return b}(b)}}(i,a,{source:b.source,checkedAt:b.checkedAt,providerLabel:c[i]??(0,f.rY)(i).label});j&&(e[i]??={},e[i][j.accountId]=j,g[j.key]=j)}}return{source:b.source,checkedAt:b.checkedAt,gatewayAccess:j,providerOrder:d,providerLabels:c,accountsByProvider:e,accountsByKey:g,issue:null}}function o(a,b,c={}){let d=new Date().toISOString(),e=I([...a.map(a=>a.type),...b.channels.map(a=>a.type)]),g={},h={},i={};for(let a of e)i[a]=(0,f.rY)(a).label;for(let b of a){let a=!1===b.enabled?"disabled":"configured",c={key:B(b.type,b.id),provider:b.type,accountId:b.id,name:b.name,label:b.name,enabled:!1!==b.enabled,configured:!0,linked:!1,running:!1,connected:!1,disabled:!1===b.enabled,failed:!1,status:a,healthState:null,errorMessage:null,source:"config-only",checkedAt:d};g[b.type]??={},g[b.type][b.id]=c,h[c.key]=c}return{source:e.length>0?"config-only":"unavailable",checkedAt:d,gatewayAccess:c.gatewayAccess??j,providerOrder:e,providerLabels:i,accountsByProvider:g,accountsByKey:h,issue:c.issue??null}}function p(a){var b,c;let d=a?.trim()||null,e=d&&(b=(0,g.Ek)(d))?{...b}:null,f=function(a){let b=new Set;if(!a)return[];for(let c of a.matchAll(/operator\.(?:admin|read|write|approvals|pairing|talk\.secrets)/g))b.add(c[0]);if(/scope upgrade pending approval|pairing_pending|connected_no_operator_scope/i.test(a))for(let a of i)b.add(a);return Array.from(b).sort()}(d),h=(c=d)?/requestId:\s*([a-z0-9-]+)/i.exec(c)?.[1]??null:null,j=!!(d&&(e||f.length>0||h));return{ok:!j,blocked:j,role:null,scopes:[],missingScopes:f,requestId:h,issue:d,repairAvailable:!!e,repairAction:e}}function q(a,b={}){let c=G(b.workspaceId),d=[];for(let b of a.channels.filter(D)){let a=c?b.workspaces.filter(a=>a.workspaceId===c):b.workspaces;if(0!==a.length){if(b.primaryAgentId&&d.push({agentId:b.primaryAgentId,match:{channel:b.type,accountId:b.id}}),"telegram"===b.type)for(let c of a)for(let a of c.groupAssignments.filter(C))d.push({agentId:a.agentId,match:{channel:"telegram",accountId:b.id}}),d.push({agentId:a.agentId,match:{channel:"telegram",accountId:b.id,peer:{kind:"group",id:a.chatId}}});if("discord"===b.type)for(let c of a)for(let a of c.groupAssignments.filter(C)){let c=function(a,b){if(!b.agentId)return null;let c=(0,e.S)(b.chatId);return c?"role"===c.kind?c.guildId?{agentId:b.agentId,match:{channel:"discord",accountId:a,guildId:c.guildId,roles:[c.targetId]}}:null:{agentId:b.agentId,match:{channel:"discord",accountId:a,...c.guildId?{guildId:c.guildId}:{},peer:{kind:c.kind,id:c.targetId}}}:null}(b.id,a);c&&d.push(c)}}}return E(d)}function r(a){if(!Array.isArray(a.currentBindings))return l(!1,"unavailable");let b=new Date().toISOString(),c=q(a.registry,{workspaceId:a.workspaceId}).map(a=>v(a)).filter(a=>!!a),d=a.currentBindings.map(a=>v(a)).filter(a=>!!a),e=a.registry.channels.filter(b=>D(b)&&(!a.workspaceId||b.workspaces.some(b=>b.workspaceId===a.workspaceId))),f=new Set(e.map(a=>B(a.type,a.id))),g=d.filter(a=>!!a.accountId&&(f.has(B(a.provider,a.accountId))||w(a.provider,a.accountId))),h=new Map(g.map(a=>[a.key,a])),i=function(a){let b=new Map;for(let c of a)b.set(c.matchKey,[...b.get(c.matchKey)??[],c]);return b}(g),j=new Map(c.map(a=>[a.key,a])),k=new Set(c.map(a=>a.matchKey)),m=[],n={ok:0,missingBindings:0,extraBindings:0,agentMismatch:0,accountMissing:0,providerDisabled:0};for(let b of c){if(h.has(b.key)){n.ok+=1;continue}let c=i.get(b.matchKey)??[];if(c.length>0){n.agentMismatch+=1,m.push(x("agent-mismatch",b,{severity:"error",actualAgentId:c.map(a=>a.agentId).join(", "),detail:`OpenClaw binding exists for this route, but it points at ${c.map(a=>a.agentId).join(", ")} instead of ${b.agentId}.`,...z(a.registry,b,a.workspaceId)}));continue}n.missingBindings+=1,m.push(x("missing-binding",b,{severity:"error",detail:"AgentOS expects this OpenClaw binding, but it is missing from OpenClaw config.",...z(a.registry,b,a.workspaceId)}))}for(let b of g)j.has(b.key)||k.has(b.matchKey)||(n.extraBindings+=1,m.push(x("extra-binding",b,{severity:"warning",detail:"OpenClaw has a managed binding that is no longer represented by the AgentOS workspace surface registry.",...z(a.registry,b,a.workspaceId)})));let o=new Set(a.configuredAccounts.map(a=>B(a.type,a.id)));for(let b of e){let c=B(b.type,b.id);o.has(c)||a.surfaceRuntime.accountsByKey[c]||(n.accountMissing+=1,m.push(y("account-missing",b,{severity:"error",detail:"AgentOS has a workspace surface binding, but OpenClaw did not return a matching configured account.",workspaceId:a.workspaceId??null})));let d=a.surfaceRuntime.accountsByKey[c];d?.disabled&&(n.providerDisabled+=1,m.push(y("provider-disabled",b,{severity:"warning",detail:"OpenClaw returned this account as disabled.",workspaceId:a.workspaceId??null})))}return{checked:!0,source:"openclaw-bindings",checkedAt:b,expectedBindingCount:c.length,currentBindingCount:g.length,summary:n,issues:m}}function s(a){let b=new Set(a.previousBindings.map(a=>v(a)?.key).filter(a=>!!a)),c=new Set(a.nextBindings.map(a=>v(a)?.key).filter(a=>!!a)),d=[...b].filter(a=>!c.has(a)).length,e=[...c].filter(a=>!b.has(a)).length;return{scope:a.scope,workspaceId:a.workspaceId,checkedAt:new Date().toISOString(),dryRun:!0===a.dryRun,applied:a.applied??!0!==a.dryRun,...a.auditId?{auditId:a.auditId}:{},...a.auditPath?{auditPath:a.auditPath}:{},...a.restorePlan?{restorePlan:a.restorePlan}:{},expectedBindingCount:q(a.registry,{workspaceId:"workspace"===a.scope?a.workspaceId:null}).length,previousBindingCount:a.previousBindings.length,nextBindingCount:a.nextBindings.length,changed:d>0||e>0,removedBindingCount:d,addedBindingCount:e,...a.configMutations?{configMutations:a.configMutations}:{},drift:a.drift}}function t(a){let b=q(a.registry,{workspaceId:"workspace"===a.scope?a.workspaceId:null}),c=new Set(b.map(a=>v(a)).filter(a=>!!a).map(a=>a.matchKey)),d=new Set(a.registry.channels.filter(b=>D(b)&&("all"===a.scope||b.workspaces.some(b=>b.workspaceId===a.workspaceId))).map(a=>B(a.type,a.id)));return E([...a.currentBindings.filter(b=>{let e=v(b);if(!e?.accountId)return!0;let f=B(e.provider,e.accountId),g=d.has(f),h=!g&&w(e.provider,e.accountId);return!g&&!h||!("all"===a.scope||h||c.has(e.matchKey))&&function(a,b,c){if(!c||!b.routeId)return!1;let d=a.channels.find(a=>a.type===b.provider&&a.id===b.accountId),e=d?.workspaces.find(a=>a.groupAssignments.some(a=>!1!==a.enabled&&a.chatId===b.routeId));return!!(e&&e.workspaceId!==c)}(a.registry,e,a.workspaceId??null)}),...b])}function u(a,b){let c=Object.values(a.accountsByProvider[b]??{}),d=c.find(a=>a.errorMessage);if(a.gatewayAccess.blocked)return{status:"unknown",statusLabel:"Gateway Blocked",connectionHealth:{label:"Gateway access blocked",detail:a.gatewayAccess.issue??"OpenClaw Gateway access needs approval before live status can be checked."},errorMessage:a.gatewayAccess.issue};if(d?.errorMessage)return{status:"failed",statusLabel:"Failed",connectionHealth:{label:"Connector error",detail:d.errorMessage},errorMessage:d.errorMessage};if("unavailable"===a.source&&0===c.length)return{status:"unknown",statusLabel:"Unknown",connectionHealth:{label:"OpenClaw status unavailable",detail:a.issue??"OpenClaw channel status is unavailable."},errorMessage:a.issue};if(0===c.length)return{status:"missing-credentials",statusLabel:"Missing Credentials",connectionHealth:{label:"No OpenClaw account",detail:"OpenClaw channel status did not return an account for this provider."},errorMessage:null};if(c.every(a=>a.disabled))return{status:"disabled",statusLabel:"Disabled",connectionHealth:{label:"Disabled",detail:"OpenClaw returned account records, but every account is disabled."},errorMessage:null};let e=c.filter(a=>a.connected||a.running||a.linked);return e.length>0?{status:"connected",statusLabel:"Connected",connectionHealth:{label:"Verified by OpenClaw",detail:`${e.length} account${1===e.length?"":"s"} returned connected, running, or linked from channels.status.`},errorMessage:null}:c.filter(a=>a.configured||a.enabled).length>0?{status:"unknown",statusLabel:"config-only"===a.source?"Configured":"Unknown",connectionHealth:{label:(a.source,"Configured, not live-verified"),detail:"config-only"===a.source?"OpenClaw configuration exists, but live channel status was unavailable.":"OpenClaw returned configured account records, but no account reported connected, running, or linked."},errorMessage:null}:{status:"pending-setup",statusLabel:"Pending Setup",connectionHealth:{label:"Setup incomplete",detail:"OpenClaw returned account records without configured or connected state."},errorMessage:null}}function v(a){if(!H(a)||"string"!=typeof a.agentId)return null;let b=H(a.match)?a.match:null,c=G(b?.channel);if(!b||!c)return null;let d=a.agentId.trim();if(!d)return null;let e=G(b.accountId),f=H(b.peer)?b.peer:null,g=G(f?.kind),h=G(f?.id),i=g??(Array.isArray(b.roles)&&b.roles.length>0?"role":null),j=h??F(b.roles).join(","),k={channel:c,accountId:e,guildId:G(b.guildId),peer:g&&h?{kind:g,id:h}:null,query:G(b.query),roles:F(b.roles),teamId:G(b.teamId)},l=J(k);return{key:J({agentId:d,match:k}),matchKey:l,agentId:d,provider:c,accountId:e,routeKind:i,routeId:j||null,raw:a}}function w(a,b){return b.startsWith(`${a}-agentos-`)}function x(a,b,c){return{id:`${a}:${b.key}`,kind:a,severity:c.severity,title:A(a),detail:c.detail,workspaceId:c.workspaceId??null,workspacePath:c.workspacePath??null,provider:b.provider,accountId:b.accountId,routeId:b.routeId,routeKind:b.routeKind,expectedAgentId:"extra-binding"===a?null:b.agentId,actualAgentId:c.actualAgentId??("extra-binding"===a?b.agentId:null),bindingKey:b.key}}function y(a,b,c){let d=c.workspaceId?b.workspaces.find(a=>a.workspaceId===c.workspaceId)??null:1===b.workspaces.length?b.workspaces[0]:null;return{id:`${a}:${b.type}:${b.id}`,kind:a,severity:c.severity,title:A(a),detail:c.detail,workspaceId:d?.workspaceId??c.workspaceId??null,workspacePath:d?.workspacePath??null,provider:b.type,accountId:b.id,routeId:null,routeKind:null,expectedAgentId:b.primaryAgentId,actualAgentId:null,bindingKey:null}}function z(a,b,c){let d=a.channels.find(a=>a.type===b.provider&&a.id===b.accountId);if(!d)return{workspaceId:c??null,workspacePath:null};let e=c?d.workspaces.find(a=>a.workspaceId===c)??null:b.routeId?d.workspaces.find(a=>a.groupAssignments.some(a=>!1!==a.enabled&&a.chatId===b.routeId))??null:1===d.workspaces.length?d.workspaces[0]:null;return{workspaceId:e?.workspaceId??c??null,workspacePath:e?.workspacePath??null}}function A(a){switch(a){case"missing-binding":return"Missing OpenClaw binding";case"extra-binding":return"Extra OpenClaw binding";case"agent-mismatch":return"Agent mismatch";case"account-missing":return"Missing OpenClaw account";case"provider-disabled":return"Provider disabled"}}function B(a,b){return`${a}:${b}`}function C(a){return!1!==a.enabled&&!!a.agentId&&!!a.chatId}function D(a){return"telegram"===a.type||"discord"===a.type||"slack"===a.type||"googlechat"===a.type}function E(a){let b=new Set,c=[];for(let d of a){let a=JSON.stringify(d);b.has(a)||(b.add(a),c.push(d))}return c}function F(a){return Array.isArray(a)?a.map(a=>G(String(a))).filter(a=>!!a).sort():[]}function G(a){if("string"!=typeof a)return null;let b=a.trim();return b.length>0?b:null}function H(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function I(a){return Array.from(new Set(a.map(a=>G(a)).filter(Boolean)))}function J(a){return JSON.stringify(function a(b){return Array.isArray(b)?b.map(a):H(b)?Object.fromEntries(Object.entries(b).filter(([,a])=>null!=a&&!(Array.isArray(a)&&0===a.length)).sort(([a],[b])=>a.localeCompare(b)).map(([b,c])=>[b,a(c)])):b}(a))}},74497:(a,b,c)=>{c.d(b,{MY:()=>f,Yx:()=>g,rY:()=>e});let d=new Map([{provider:"telegram",label:"Telegram",kind:"chat",description:"Bot accounts, public groups, and delegated community routing.",iconKey:"siTelegram",accentColor:"#26A5E4",supportsProvisioning:!0,provisionFields:[{key:"token",label:"Bot token",placeholder:"123456:ABC...",inputType:"password",secret:!0,required:!0,section:"basic"}],supportsRouteDiscovery:!0,providerManagedByOpenClaw:!0},{provider:"discord",label:"Discord",kind:"chat",description:"Servers, channels, DMs, and thread-aware team routing.",iconKey:"siDiscord",accentColor:"#5865F2",supportsProvisioning:!0,provisionFields:[{key:"token",label:"Bot token",placeholder:"Discord bot token",inputType:"password",secret:!0,required:!0,section:"basic"}],supportsRouteDiscovery:!0,providerManagedByOpenClaw:!0},{provider:"slack",label:"Slack",kind:"chat",description:"Workspace apps, channels, and internal team handoffs.",iconKey:"siSlack",accentColor:"#4A154B",supportsProvisioning:!0,provisionFields:[{key:"botToken",label:"Bot token",placeholder:"xoxb-...",inputType:"password",secret:!0,required:!0,section:"basic"}],supportsRouteDiscovery:!1,providerManagedByOpenClaw:!0},{provider:"googlechat",label:"Google Chat",kind:"chat",description:"Spaces and enterprise chat surfaces backed by OpenClaw.",iconKey:"siGooglechat",accentColor:"#34A853",supportsProvisioning:!0,provisionFields:[{key:"webhookUrl",label:"Webhook URL",placeholder:"https://chat.googleapis.com/...",inputType:"url",secret:!0,required:!0,section:"basic"}],supportsRouteDiscovery:!1,providerManagedByOpenClaw:!0},{provider:"gmail",label:"Gmail",kind:"inbox",description:"Inbox ownership, draft/send workflows, and Gmail-triggered automations.",iconKey:"siGmail",accentColor:"#EA4335",supportsProvisioning:!0,provisionFields:[{key:"account",label:"Account email",placeholder:"agent@example.com",inputType:"text",required:!0,section:"basic"},{key:"project",label:"Project ID",placeholder:"openclaw-project",section:"basic"},{key:"label",label:"Label",placeholder:"inbox",section:"basic"},{key:"hookToken",label:"Hook token",placeholder:"shared-secret",inputType:"password",secret:!0,section:"basic"},{key:"hookUrl",label:"Hook URL",placeholder:"https://your-host.example/gmail-pubsub",inputType:"url",section:"advanced"},{key:"topic",label:"Topic",placeholder:"gmail-topic",section:"advanced"},{key:"subscription",label:"Subscription",placeholder:"gmail-subscription",section:"advanced"},{key:"pushToken",label:"Push token",placeholder:"push-secret",inputType:"password",secret:!0,section:"advanced"},{label:"Serve port",placeholder:"8788",key:"serve.port",inputType:"number",section:"advanced"},{key:"serve.bind",label:"Serve bind",placeholder:"127.0.0.1",section:"advanced"},{key:"serve.path",label:"Serve path",placeholder:"/",section:"advanced"},{key:"includeBody",label:"Include body",inputType:"checkbox",defaultValue:!0,section:"advanced"},{key:"maxBytes",label:"Max bytes",placeholder:"20000",inputType:"number",section:"advanced"},{key:"renewEveryMinutes",label:"Renew interval (minutes)",placeholder:"720",inputType:"number",section:"advanced"},{key:"tailscale.mode",label:"Tailscale mode",placeholder:"funnel",defaultValue:"funnel",inputType:"select",options:[{label:"Off",value:"off"},{label:"Serve",value:"serve"},{label:"Funnel",value:"funnel"}],helpText:"One of funnel, serve, or off.",section:"advanced"},{key:"tailscale.path",label:"Tailscale path",placeholder:"/gmail-pubsub",section:"advanced"},{key:"tailscale.target",label:"Tailscale target",placeholder:"http://127.0.0.1:8788/gmail-pubsub",inputType:"url",section:"advanced"},{key:"pushEndpoint",label:"Push endpoint",placeholder:"https://public.example/gmail-push",inputType:"url",section:"advanced"},{key:"model",label:"Model",placeholder:"openrouter/meta-llama/llama-3.3-70b-instruct:free",section:"advanced"},{key:"thinking",label:"Thinking",placeholder:"off",section:"advanced"}],supportsRouteDiscovery:!1,providerManagedByOpenClaw:!0},{provider:"email",label:"Email",kind:"inbox",description:"Generic email inboxes and send/read workflows exposed through OpenClaw.",iconKey:"siMaildotru",accentColor:"#0F172A",supportsProvisioning:!0,provisionFields:[{key:"address",label:"Address",placeholder:"inbox@example.com",inputType:"text",required:!0,section:"basic"},{key:"oauth",label:"OAuth config",placeholder:'{"clientId":"...","clientSecret":"..."}',inputType:"textarea",helpText:"Paste JSON or a provider-specific OAuth configuration blob.",section:"basic"},{key:"watch",label:"Watch",inputType:"checkbox",defaultValue:!0,section:"basic"},{key:"pubsub",label:"Pub/Sub",placeholder:"projects/project-id/topics/email-events",section:"basic"},{key:"imap.host",label:"IMAP host",placeholder:"imap.example.com",inputType:"text",section:"advanced"},{key:"imap.port",label:"IMAP port",placeholder:"993",inputType:"number",section:"advanced"},{key:"smtp.host",label:"SMTP host",placeholder:"smtp.example.com",inputType:"text",section:"advanced"},{key:"smtp.port",label:"SMTP port",placeholder:"587",inputType:"number",section:"advanced"},{key:"username",label:"Username",placeholder:"mailbox-user",inputType:"text",section:"advanced"},{key:"password",label:"Password",placeholder:"app password",inputType:"password",secret:!0,section:"advanced"}],supportsRouteDiscovery:!1,providerManagedByOpenClaw:!0},{provider:"webhook",label:"Webhook",kind:"trigger",description:"External event triggers delivered into OpenClaw automations.",iconKey:"siWebhook",accentColor:"#0EA5E9",supportsProvisioning:!0,provisionFields:[{key:"token",label:"Hook token",placeholder:"shared-secret",inputType:"password",secret:!0,required:!0,section:"basic"},{key:"path",label:"Path",placeholder:"/hooks",section:"basic"}],supportsRouteDiscovery:!1,providerManagedByOpenClaw:!0},{provider:"cron",label:"Cron",kind:"trigger",description:"Scheduled tasks and recurring automation entry points.",iconKey:"siClockify",accentColor:"#F59E0B",supportsProvisioning:!0,provisionFields:[{key:"webhookToken",label:"Webhook token",placeholder:"replace-with-dedicated-webhook-token",inputType:"password",secret:!0,required:!0,section:"basic"},{key:"sessionRetention",label:"Session retention",placeholder:"24h",section:"basic"},{key:"maxConcurrentRuns",label:"Max concurrent runs",placeholder:"1",inputType:"number",section:"basic"},{key:"store",label:"Store path",placeholder:"~/.openclaw/cron/jobs.json",section:"advanced"},{key:"runLog.maxBytes",label:"Run log max bytes",placeholder:"2mb",section:"advanced"},{key:"runLog.keepLines",label:"Run log keep lines",placeholder:"2000",inputType:"number",section:"advanced"}],supportsRouteDiscovery:!1,providerManagedByOpenClaw:!0}].map(a=>[a.provider,a]));function e(a){return d.get(a)??{provider:a,label:f(a),kind:"chat",description:"OpenClaw-managed integration surface.",supportsProvisioning:!1,provisionFields:[],supportsRouteDiscovery:!1,providerManagedByOpenClaw:!0}}function f(a){let b=d.get(a);return b?b.label:a.split(/[-_]/).filter(Boolean).map(a=>a.slice(0,1).toUpperCase()+a.slice(1)).join(" ")}function g(a){return e(a).kind}}};