@sapienx/agentos 0.3.14 → 0.4.5

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 (88) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +2 -0
  3. package/bundle/.next/BUILD_ID +1 -1
  4. package/bundle/.next/app-path-routes-manifest.json +10 -10
  5. package/bundle/.next/build-manifest.json +3 -3
  6. package/bundle/.next/react-loadable-manifest.json +1 -1
  7. package/bundle/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  8. package/bundle/.next/server/app/_global-error.html +1 -1
  9. package/bundle/.next/server/app/_global-error.rsc +1 -1
  10. package/bundle/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  11. package/bundle/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  12. package/bundle/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  13. package/bundle/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  14. package/bundle/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  15. package/bundle/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  16. package/bundle/.next/server/app/_not-found/page.js +1 -1
  17. package/bundle/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  18. package/bundle/.next/server/app/_not-found.html +1 -1
  19. package/bundle/.next/server/app/_not-found.rsc +3 -3
  20. package/bundle/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  21. package/bundle/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  22. package/bundle/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  23. package/bundle/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  24. package/bundle/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  25. package/bundle/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  26. package/bundle/.next/server/app/api/agents/[agentId]/chat/route.js +4 -4
  27. package/bundle/.next/server/app/api/agents/[agentId]/chat/route.js.nft.json +1 -1
  28. package/bundle/.next/server/app/api/agents/route.js.nft.json +1 -1
  29. package/bundle/.next/server/app/api/diagnostics/route.js.nft.json +1 -1
  30. package/bundle/.next/server/app/api/files/reveal/route.js +1 -1
  31. package/bundle/.next/server/app/api/gateway/control/route.js.nft.json +1 -1
  32. package/bundle/.next/server/app/api/mission/route.js.nft.json +1 -1
  33. package/bundle/.next/server/app/api/models/catalog/route.js.nft.json +1 -1
  34. package/bundle/.next/server/app/api/models/providers/route.js.nft.json +1 -1
  35. package/bundle/.next/server/app/api/onboarding/models/route.js +7 -7
  36. package/bundle/.next/server/app/api/onboarding/models/route.js.nft.json +1 -1
  37. package/bundle/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  38. package/bundle/.next/server/app/api/planner/[planId]/deploy/route.js.nft.json +1 -1
  39. package/bundle/.next/server/app/api/planner/[planId]/document-rewrite/route.js.nft.json +1 -1
  40. package/bundle/.next/server/app/api/planner/[planId]/route.js.nft.json +1 -1
  41. package/bundle/.next/server/app/api/planner/[planId]/simulate/route.js.nft.json +1 -1
  42. package/bundle/.next/server/app/api/planner/[planId]/turn/route.js.nft.json +1 -1
  43. package/bundle/.next/server/app/api/planner/route.js.nft.json +1 -1
  44. package/bundle/.next/server/app/api/reset/route.js +3 -3
  45. package/bundle/.next/server/app/api/reset/route.js.nft.json +1 -1
  46. package/bundle/.next/server/app/api/runtimes/[runtimeId]/route.js.nft.json +1 -1
  47. package/bundle/.next/server/app/api/settings/gateway/route.js.nft.json +1 -1
  48. package/bundle/.next/server/app/api/settings/workspace-root/route.js.nft.json +1 -1
  49. package/bundle/.next/server/app/api/snapshot/route.js.nft.json +1 -1
  50. package/bundle/.next/server/app/api/stream/route.js.nft.json +1 -1
  51. package/bundle/.next/server/app/api/system/open-terminal/route.js +1 -1
  52. package/bundle/.next/server/app/api/tasks/[taskId]/abort/route.js.nft.json +1 -1
  53. package/bundle/.next/server/app/api/tasks/[taskId]/stream/route.js.nft.json +1 -1
  54. package/bundle/.next/server/app/api/update/route.js.nft.json +1 -1
  55. package/bundle/.next/server/app/api/workspaces/[workspaceId]/channels/discovered-groups/route.js.nft.json +1 -1
  56. package/bundle/.next/server/app/api/workspaces/[workspaceId]/channels/route.js.nft.json +1 -1
  57. package/bundle/.next/server/app/api/workspaces/[workspaceId]/edit-draft/route.js.nft.json +1 -1
  58. package/bundle/.next/server/app/api/workspaces/[workspaceId]/surfaces/discovery/route.js.nft.json +1 -1
  59. package/bundle/.next/server/app/api/workspaces/route.js.nft.json +1 -1
  60. package/bundle/.next/server/app/page.js +30 -30
  61. package/bundle/.next/server/app/page.js.nft.json +1 -1
  62. package/bundle/.next/server/app/page_client-reference-manifest.js +1 -1
  63. package/bundle/.next/server/app-paths-manifest.json +10 -10
  64. package/bundle/.next/server/chunks/199.js +5 -5
  65. package/bundle/.next/server/middleware-build-manifest.js +1 -1
  66. package/bundle/.next/server/middleware-react-loadable-manifest.js +1 -1
  67. package/bundle/.next/server/pages/404.html +1 -1
  68. package/bundle/.next/server/pages/500.html +1 -1
  69. package/bundle/.next/static/chunks/{5261.29ae1e1fe185a617.js → 5261.80260874ddbc586a.js} +1 -1
  70. package/bundle/.next/static/chunks/app/page-5de22cbc4ffb588d.js +179 -0
  71. package/bundle/.next/static/chunks/{webpack-e0accbaa78fb0b56.js → webpack-be44493d75a62d03.js} +1 -1
  72. package/bundle/.next/static/css/0633750bbe1c3acc.css +3 -0
  73. package/bundle/package.json +1 -0
  74. package/bundle/public/assets/openclaw.png +0 -0
  75. package/bundle/public/assets/screenshots/0.jpeg +0 -0
  76. package/bundle/public/assets/screenshots/1.jpeg +0 -0
  77. package/bundle/public/assets/screenshots/2.jpeg +0 -0
  78. package/bundle/public/assets/screenshots/3.jpeg +0 -0
  79. package/bundle/public/assets/screenshots/4_1.jpeg +0 -0
  80. package/bundle/public/assets/screenshots/5.jpeg +0 -0
  81. package/bundle/public/assets/screenshots/6.jpeg +0 -0
  82. package/bundle/public/assets/screenshots/7.jpeg +0 -0
  83. package/bundle/public/readme/readme.jpeg +0 -0
  84. package/package.json +2 -1
  85. package/bundle/.next/static/chunks/app/page-29f20effd872e616.js +0 -179
  86. package/bundle/.next/static/css/9f1b31fd4086df59.css +0 -3
  87. /package/bundle/.next/static/{3RfU29upg-cPxACyzCFUb → -Hi163pOppz8WaePTrAsR}/_buildManifest.js +0 -0
  88. /package/bundle/.next/static/{3RfU29upg-cPxACyzCFUb → -Hi163pOppz8WaePTrAsR}/_ssgManifest.js +0 -0
@@ -81,8 +81,8 @@ Use this skill when operating in the current workspace.
81
81
 
82
82
  ${e}
83
83
  `:`${e}
84
- `;await G(b,g)}let U=[".openclaw/agents/",".openclaw/project-shell/events.jsonl",".openclaw/project-shell/runs/",".openclaw/project-shell/tasks/"];function V(a){return a?a.split(/[-_]+/g).filter(Boolean).map(a=>a.charAt(0).toUpperCase()+a.slice(1)).join(" "):"Agent"}var W=c(7091);function X(a,b){let c=a.filter(a=>!function(a){var b;if("string"==typeof a.metadata.chatType&&"direct"===a.metadata.chatType||"string"==typeof a.metadata.kind&&"direct"===a.metadata.kind)return!0;let c=Z(a)||("string"==typeof a.metadata.turnPrompt?a.metadata.turnPrompt:null);return!!("string"==typeof c&&(b=c,/You are chatting (?:directly )?with the operator inside AgentOS/i.test(b)||/Do not create tasks or mention task cards/i.test(b)||/Messages stay in this drawer and are stored locally in your browser/i.test(b)))}(a)),d=new Map,e=new Map(b.map(a=>{var b;return[a.id,(b=a).name.trim()||b.id]})),f=function(a){let b=new Map;for(let c of a){let a=c.sessionId?.trim(),d="string"==typeof c.metadata.dispatchId?c.metadata.dispatchId.trim():"",e="string"==typeof c.metadata.dispatchSubmittedAt?Date.parse(c.metadata.dispatchSubmittedAt):NaN;if(!a||!d)continue;let f=`${c.agentId??"unknown"}:${a}`,g=b.get(f)??[];g.some(a=>a.dispatchId===d)||(g.push({dispatchId:d,submittedAt:Number.isNaN(e)?null:e}),g.sort((a,b)=>(a.submittedAt??-1/0)-(b.submittedAt??-1/0)),b.set(f,g))}return b}(c);for(let a of c){let b=function(a,b){let c=a.taskId?.trim(),d="string"==typeof a.metadata.dispatchId?a.metadata.dispatchId.trim():"",e=Z(a),f=a.sessionId?.trim(),g=f?b.get(`${a.agentId??"unknown"}:${f}`)??[]:[],h=a.updatedAt??0,i=g.filter(a=>null===a.submittedAt||h>=a.submittedAt-1500).sort((a,b)=>(b.submittedAt??-1/0)-(a.submittedAt??-1/0))[0]?.dispatchId??"";return d?`dispatch:${d}`:i?`dispatch:${i}`:c?`task:${c}`:e?`mission:${a.agentId??"unknown"}:${ac(e)}`:f?`session:${f}`:`runtime:${a.id}`}(a,f),c=d.get(b)??[];c.push(a),d.set(b,c)}return Array.from(d.entries()).map(([a,b])=>Y(a,b,e)).sort((a,b)=>(b.updatedAt??0)-(a.updatedAt??0))}function Y(a,b,c){var d,e;let f=[...b].sort(af),g=function(a){let b=a.filter(a=>"turn"===a.source||"string"==typeof a.metadata.turnId);if(b.length>0)return b;let c=a.filter(a=>"string"==typeof a.metadata.dispatchId||"string"==typeof a.metadata.bootstrapStage);return c.length>0?c:a}(f),h=[...g].sort((a,b)=>$(b)-$(a))[0]??g[0]??f[0],i=Z(h)||f.map(a=>Z(a)).find(Boolean)||null,j=function(a){for(let b of a){let a="string"==typeof b.metadata.routedMission?b.metadata.routedMission.trim():"";if(a)return a}return null}(f),k=function(a){let b=[...a.filter(a=>"string"==typeof a.metadata.turnId),...a.filter(a=>!0===a.metadata.recoveredFromObservation),...a.filter(a=>!_(a)&&("completed"===a.status||"stalled"===a.status||"cancelled"===a.status)),...a.filter(a=>!_(a))],c=new Set;for(let a of b){if(c.has(a.id))continue;c.add(a.id);let b=a.subtitle?.trim();if(b)return b}return null}(f),l=k||g.map(a=>a.subtitle?.trim()).find(a=>!!a)||f.map(a=>a.subtitle?.trim()).find(a=>!!a)||"Awaiting OpenClaw updates.",m=ad(f.flatMap(a=>aa(a)).concat(f.flatMap(a=>(function(a){if("string"!=typeof a||0===a.trim().length)return[];let b=[...a.matchAll(/(?:^|[\s(])((?:\.{1,2}\/)?deliverables\/[^\s`),;]+)/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("/"))&&(b.split("/").pop()||"").includes(".")}(b)&&c.push({path:b,displayPath:b})}return ad(c)})(a.subtitle)))),n=ae(f.flatMap(a=>ab(a))),o=function(a){let b=a.filter(a=>a.tokenUsage);if(0!==b.length)return b.reduce((a,b)=>({input:a.input+(b.tokenUsage?.input??0),output:a.output+(b.tokenUsage?.output??0),total:a.total+(b.tokenUsage?.total??0),cacheRead:(a.cacheRead??0)+(b.tokenUsage?.cacheRead??0)}),{input:0,output:0,total:0,cacheRead:0})}(f),p=ae(f.flatMap(a=>a.agentId?[a.agentId]:[])),q=ae(f.flatMap(a=>a.sessionId?[a.sessionId]:[])),r=ae(f.flatMap(a=>a.runId?[a.runId]:[])),s=f.filter(a=>"string"==typeof a.metadata.turnId||!0===a.metadata.recoveredFromObservation).length,t=h?.agentId||p[0],u=t?c.get(t)??null:null,v=f[0]??null;return{id:(d=a,`task:${ac(d)}`),key:a,title:(0,W.$m)(i||h?.title||"Untitled task",52)||"Untitled task",mission:i,subtitle:l,status:(e=f).some(a=>"running"===a.status)?"running":e.some(a=>"cancelled"===a.status)?"cancelled":e.some(a=>"queued"===a.status)?"queued":e.some(a=>"stalled"===a.status)?"stalled":e.some(a=>"idle"===a.status)?"idle":e[0]?.status??"completed",updatedAt:v?.updatedAt??null,ageMs:v?.ageMs??null,workspaceId:h?.workspaceId,primaryAgentId:t,primaryAgentName:u,primaryRuntimeId:h?.id,dispatchId:function(a){for(let b of a)if("string"==typeof b.metadata.dispatchId&&b.metadata.dispatchId.trim())return b.metadata.dispatchId.trim()}(f),runtimeIds:f.map(a=>a.id),agentIds:p,sessionIds:q,runIds:r,runtimeCount:f.length,updateCount:g.filter(a=>"turn"===a.source).length,liveRunCount:f.filter(a=>"running"===a.status||"queued"===a.status).length,artifactCount:m.length,warningCount:n.length,tokenUsage:o,metadata:{mission:i,routedMission:j,resultPreview:k,turnCount:s,sessionCount:q.length,primaryRuntimeSource:h?.source??null,bootstrapStage:"string"==typeof h?.metadata.bootstrapStage?h.metadata.bootstrapStage:null,dispatchStatus:"string"==typeof h?.metadata.dispatchStatus?h.metadata.dispatchStatus:null,dispatchSubmittedAt:"string"==typeof h?.metadata.dispatchSubmittedAt?h.metadata.dispatchSubmittedAt:null,dispatchRunnerStartedAt:"string"==typeof h?.metadata.dispatchRunnerStartedAt?h.metadata.dispatchRunnerStartedAt:null,dispatchHeartbeatAt:"string"==typeof h?.metadata.dispatchHeartbeatAt?h.metadata.dispatchHeartbeatAt:null,dispatchObservedAt:"string"==typeof h?.metadata.dispatchObservedAt?h.metadata.dispatchObservedAt:null,outputDir:"string"==typeof h?.metadata.outputDir?h.metadata.outputDir:null,outputDirRelative:"string"==typeof h?.metadata.outputDirRelative?h.metadata.outputDirRelative:null}}}function Z(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,W.ho)(b);return c.length>0?c:null}function $(a){return 8*!!Z(a)+6*("string"==typeof a.metadata.dispatchId)+("turn"===a.source?6:"session"===a.source?4:2)+("running"===a.status?3:"queued"===a.status?2:"cancelled"===a.status||"stalled"===a.status?3:"idle"===a.status?2:1)}function _(a){let b="string"==typeof a.metadata.bootstrapStage?a.metadata.bootstrapStage:null;return"accepted"===b||"waiting-for-heartbeat"===b||"waiting-for-runtime"===b||"runtime-observed"===b}function aa(a){let b=a.metadata.createdFiles;return Array.isArray(b)?b.flatMap(a=>{if(!a||"object"!=typeof a)return[];let b="path"in a&&"string"==typeof a.path?a.path:null,c="displayPath"in a&&"string"==typeof a.displayPath?a.displayPath:b;return b&&c?[{path:b,displayPath:c}]:[]}):[]}function ab(a){let b=a.metadata.warnings;return Array.isArray(b)?b.filter(a=>"string"==typeof a&&a.trim().length>0):[]}function ac(a){return(0,d.createHash)("sha1").update(a).digest("hex").slice(0,12)}function ad(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}function ae(a){return Array.from(new Set(a.map(a=>(function(a){if("string"!=typeof a)return null;let b=a.trim();return b.length>0?b:null})(a)).filter(a=>!!a)))}function af(a,b){return(b.updatedAt??0)-(a.updatedAt??0)}var ag=c(4414),ah=c(5793);let ai=/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/gi;function aj(a){var b;let c;return(a.sessionId?.trim()||null)??(b=function(a){var b;let c=((b=a).result&&"object"==typeof b.result?b.result:null)?.meta;if(!c||"object"!=typeof c){let b=a.meta;return b&&"object"==typeof b?ap(b):null}return ap(c)}(a),"string"==typeof(c=b?.sessionId)&&c.trim().length>0?c:null)??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 ak(a){if(!a)return!1;let b=a.trim().toLowerCase();return"ready"===b||"completed"===b||"complete"===b||"ok"===b||"success"===b}async function al(a){var b,c,d,e;let f,{task:g,dispatchRecord:h,createdFiles:i,snapshot:j}=a,k=await an(h?.outputDir??null),l=h?await am(h,j):[],m=g.mission||h?.mission||null,n=m&&l.length>0?l.filter(a=>(0,ag.Dm)(a.prompt,m)):l,o=[...n].sort((a,b)=>Date.parse(b.updatedAt)-Date.parse(a.updatedAt))[0]??null,p=o?.finalText?.trim()||null,q=h?ak(f=((b=h.result)&&"object"==typeof b?(Array.isArray(b.result?.payloads)?b.result.payloads:Array.isArray(b.payloads)?b.payloads:[]).filter(a=>!!a&&"string"==typeof a.text):[]).find(a=>a.text.trim().length>0)?.text.trim()??null)?null:f:null,r=p||q||null,s=p?"runtime":q?"dispatch":"none",t=!!(h&&l.length>0&&0===n.length),u=(0,ah.xZ)(n),v=function(a){let b=new Set;for(let c of a)if(c)for(let a of c.match(ai)??[])b.add(a.toLowerCase());return[...b]}([r,q,...n.flatMap(a=>a.items.map(a=>a.text))]),w=[],x=ak(r),y=!!(c=m)&&(/\.(txt|md|json|csv|html|pdf|docx?)\b/i.test(c)||/\b(file|files|artifact|artifacts|report|document|save|export|attachment)\b/i.test(c)||/\b(dosya|dosyasi|kaydet|kaydi|cikti)\b/i.test(c)),z=!!(d=m)&&/\b(email|e-mail|mail|mail address|mail adres|eposta|e-posta)\b/i.test(d),A=!!(e=m)&&(/https?:\/\//i.test(e)||/\b[a-z0-9-]+\.(com|net|org|io|ai|co|tr|app|dev|me|info|biz|edu|gov)\b/i.test(e)||/\b(site|website|web|browser|browse|fetch|sitesine|siteye|siteyi)\b/i.test(e));return h?.outputDir&&!k.exists&&w.push({id:"missing-output-dir",severity:"warning",title:"Output folder is missing",detail:`The dispatch points at ${h.outputDirRelative||h.outputDir}, but that folder is not accessible now.`}),"completed"===g.status&&y&&h?.outputDir&&k.exists&&0===k.fileCount&&0===i.length&&w.push({id:"empty-output-dir",severity:"error",title:"Deliverables folder is empty",detail:"The task asked for a file deliverable, but the assigned deliverables folder does not contain any files."}),"completed"===g.status&&0===l.length&&w.push({id:"missing-transcript",severity:"warning",title:"No runtime transcript was captured",detail:"AgentOS could not verify what the agent actually did because no transcript was recovered for this dispatch."}),"cancelled"===g.status&&w.push({id:"task-cancelled",severity:"warning",title:"Task was cancelled by the operator",detail:h?.error||"The mission dispatch was stopped before completion, so the captured evidence is intentionally incomplete."}),t&&h?.agentId&&w.push({id:"session-mismatch",severity:"error",title:"Recovered session does not match the mission",detail:"The linked transcript session exists, but none of its user turns match this task mission. The dispatch likely reused or attached the wrong session."}),"completed"!==g.status||r?"stalled"===g.status&&r?w.push({id:"partial-final-response",severity:"warning",title:"Final response came from an incomplete runtime",detail:"The assistant produced output, but the runtime stalled before the task completed. Treat this as the last captured response, not a verified completion."}):"completed"===g.status&&x&&r&&w.push({id:"placeholder-final-response",severity:0===k.fileCount&&0===i.length&&0===n.length?"error":"warning",title:"Completion response looks like a placeholder",detail:`The captured final response was "${r}", which is not enough evidence that the requested work actually finished.`}):w.push({id:"missing-final-response",severity:"warning",title:"No final answer was captured",detail:"The task completed without a final assistant response in either the runtime transcript or the dispatch payload."}),"completed"===g.status&&A&&n.length>0&&0===u.length&&w.push({id:"missing-tool-evidence",severity:"warning",title:"No tool usage was recovered",detail:"This mission looks like it needed external lookup or browsing, but the matching transcript turn does not show any recovered tool calls."}),"completed"===g.status&&z&&0===v.length&&w.push({id:"missing-email",severity:"warning",title:"Requested email address was not captured",detail:"The task appears to ask for an email address, but none was detected in the final response or the matching transcript."}),{status:w.some(a=>"error"===a.severity)?"error":w.length>0?"warning":"verified",outputDir:h?.outputDir??null,outputDirRelative:h?.outputDirRelative??null,outputDirExists:k.exists,outputFileCount:k.fileCount,transcriptTurnCount:l.length,matchingTranscriptTurnCount:n.length,finalResponseText:r,finalResponseSource:s,dispatchSessionId:h?aj(h):null,sessionMismatch:t,toolNames:u,emails:v,issues:w}}async function am(a,b){let c=aj(a);if(!c)return[];let d=b.agents.find(b=>b.id===a.agentId),e=await (0,ah.WU)(a.agentId,c,a.workspacePath??d?.workspacePath);if(!e)return[];try{let b=await (0,f.readFile)(e,"utf8"),g={id:`runtime:dispatch:${a.id}`,sessionId:c,agentId:a.agentId,taskId:a.id,metadata:{dispatchSubmittedAt:a.submittedAt}};return(0,ah.qv)(g,(0,ah.SI)(b,g,a.workspacePath??d?.workspacePath))}catch{return[]}}async function an(a){if(!a)return{exists:!1,fileCount:0};try{if(!(await (0,f.stat)(a)).isDirectory())return{exists:!0,fileCount:1};return{exists:!0,fileCount:await ao(a)}}catch{return{exists:!1,fileCount:0}}}async function ao(a){let b=await (0,f.readdir)(a,{withFileTypes:!0}),c=0;for(let d of b){let b=l().join(a,d.name);if(d.isDirectory()){c+=await ao(b);continue}d.isFile()&&(c+=1)}return c}function ap(a){if(!a||"object"!=typeof a)return null;let b=a.agentMeta;return b&&"object"==typeof b?b:null}function aq(a){return(a.sessionId?.trim()||null)??aD(aC(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 ar(a){return aD(aC(a),"model")}function as(a){let b=aC(a),c=b?.usage;if(!c||"object"!=typeof c)return;let d=aE(c,"total")??aE(c,"totalTokens")??aE(c,"total_tokens");if(null!==d)return{input:aE(c,"input")??aE(c,"prompt_tokens")??0,output:aE(c,"output")??aE(c,"completion_tokens")??0,total:d,cacheRead:aE(c,"cacheRead")??0}}function at(a){let b=a.result?.summary?.trim();if(!b)return null;let c=b.toLowerCase();return"completed"===c||"ok"===c||"success"===c||aF(b)?null:b}function au(a){let b=aA(a.result).find(a=>a.text.trim().length>0)?.text.trim()??null;return aF(b)?null:b}function av(a){let b=au(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 aw(a){let b=av(a);if(b)return b;if("cancelled"===a.status)return aH(a.error||"Mission aborted by operator.",90);let c=at(a)||au(a);return c||(a.observation.observedAt?"Dispatch runner finished. Waiting for the final runtime transcript to sync.":a.outputDirRelative?`Dispatch runner finished \xb7 ${a.outputDirRelative}`:"Dispatch runner finished.")}function ax(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>9e4?"stalled":"running"}let c=Date.parse(a.submittedAt);return!Number.isNaN(c)&&b-c>3e4?"stalled":"queued"}function ay(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 az(a,b){if("completed"===b||"cancelled"===b)return aH(aw(a),90);if("stalled"===b)return a.error?aH(a.error,90):a.runner.lastHeartbeatAt?"Dispatch stalled while waiting for the first OpenClaw runtime.":"Dispatch stalled before the first runner heartbeat.";let c=ay(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 aA(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 aB(a){if(!a||"object"!=typeof a)return null;let b=a.result?.meta??a.meta;return b&&"object"==typeof b?b:null}function aC(a){let b=aB(a.result);if(!b||"object"!=typeof b)return null;let c=b.agentMeta;return c&&"object"==typeof c?c:null}function aD(a,b){let c=a?.[b];return"string"==typeof c&&c.trim().length>0?c:null}function aE(a,b){let c=a?.[b];return"number"==typeof c&&Number.isFinite(c)?c:null}function aF(a){if(!a)return!1;let b=a.trim().toLowerCase();return"ready"===b||"completed"===b||"complete"===b||"ok"===b||"success"===b}function aG(a){return a?.trim()||void 0}function aH(a,b){let c=a.replace(/\s+/g," ").trim();return c.length<=b?c:`${c.slice(0,Math.max(b-1,1)).trimEnd()}…`}let aI=new Set(["cause","code","details","error","message","reason","stack","stderr","stdout","warning"]);async function aJ(a,b=18){let c=a.runner.logPath?.trim();if(!c)return[];try{return(await (0,f.readFile)(c,"utf8")).split(/\r?\n/).map(a=>(function(a){let b=a.trim();if(!b)return null;try{var c;let a=JSON.parse(b);if(!a||"string"!=typeof a.id||"string"!=typeof a.timestamp||"string"!=typeof a.text||(c=a.stream,"status"!==c&&"stdout"!==c&&"stderr"!==c))return null;return{id:a.id,timestamp:a.timestamp,stream:a.stream,text:a.text}}catch{return null}})(a)).filter(a=>!!a).map(a=>{var b;let c;return b=a,(c=aK(b.text))?{...b,text:c}:null}).filter(a=>!!a).slice(-b)}catch{return[]}}function aK(a){let b=a.trim();if(!b||function(a){if(/^[\[\]{}(),]+$/.test(a))return!0;let b=a.match(/^"([^"]+)"\s*:\s*(.+?)(,)?$/);return b?!aI.has(b[1].toLowerCase()):(a.match(/^([A-Za-z0-9_.-]+)\s*:\s*(.+)$/),!1)}(b))return null;let c=b.match(/^"([^"]+)"\s*:\s*(.+?)(,)?$/);if(c){let[,a,b]=c;return aI.has(a.toLowerCase())?`${aL(a)}: ${aM(b)}`:null}let d=b.match(/^([A-Za-z0-9_.-]+)\s*:\s*(.+)$/);return d&&aI.has(d[1].toLowerCase())?`${aL(d[1])}: ${aM(d[2])}`:b}function aL(a){return a.charAt(0).toUpperCase()+a.slice(1)}function aM(a){let b=a.trim().replace(/,$/,"");if(!b)return"";try{let a=JSON.parse(b);if("string"==typeof a)return a;if("number"==typeof a||"boolean"==typeof a)return String(a)}catch{}return b.replace(/^"(.*)"$/,"$1")}async function aN(a,b,c){let d=[],e=Date.now();for(let f of b){let b=aO(f,a);if(b){await c.persistObservation(f,b),await c.reconcileRuntimeState(f,b);continue}let g=await c.buildObservedRuntime(f);if(g){aS(f.status)||await c.reconcileRuntimeState(f,g),d.push(aQ(f,g.sessionId??aq(f)??void 0));continue}d.push(aR(f,e))}return d.sort(aT)}function aO(a,b){var c,d,e;let f=Date.parse(a.submittedAt),g=ax(a,Date.now()),h=aq(a),i=a.observation.runtimeId?.trim()||null;return(c=i,d=b,("completed"===(e=g)||"stalled"===e||"cancelled"===e)&&c&&!d.some(a=>a.id===c))?null:b.map(b=>({runtime:b,score:function(a,b,c){if(aP(a)||a.agentId!==b.agentId)return null;let d="string"==typeof a.metadata.dispatchId?a.metadata.dispatchId.trim():"";if(d&&d!==b.id||(a.updatedAt??0)<(Number.isNaN(c.submittedAt)?0:c.submittedAt-1500))return null;if(c.observedRuntimeId&&a.id===c.observedRuntimeId)return 1e4;if("completed"===c.effectiveStatus||"stalled"===c.effectiveStatus||"cancelled"===c.effectiveStatus)return d===b.id?500:null;if(c.sessionId&&a.sessionId!==c.sessionId)return null;let e=(0,ag.gP)(a,b.mission,{agentId:b.agentId,submittedAt:c.submittedAt});return"turn"!==a.source||e?0+("turn"===a.source?400:"session"===a.source?40:20)+240*!!e+(c.sessionId&&a.sessionId===c.sessionId?120:0)+80*(d===b.id):null}(b,a,{submittedAt:f,sessionId:h,observedRuntimeId:i,effectiveStatus:g})})).filter(a=>"number"==typeof a.score).sort((a,b)=>b.score-a.score||aT(a.runtime,b.runtime))[0]?.runtime}function aP(a){return a.id.startsWith("runtime:dispatch:")}function aQ(a,b){let c=Date.parse(a.observation.observedAt??a.updatedAt??a.submittedAt),d=Date.now(),e=ax(a,d),f=b??aq(a)??aV(a.id),g=av(a);return{id:a.observation.runtimeId||`runtime:${f}:${aV(a.id)}`,source:"turn",key:`dispatch:${a.id}`,title:(0,W.$m)(a.mission,38)||"Recovered mission runtime",subtitle:g?aU(g,90):"completed"===a.status||"cancelled"===a.status?aU(aw(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:ar(a)??void 0,sessionId:f,tokenUsage:as(a),metadata:{mission:a.mission,dispatchId:a.id,routedMission:a.routedMission,outputDir:a.outputDir,outputDirRelative:a.outputDirRelative,notesDirRelative:a.notesDirRelative,error:a.error,sessionId:f,pendingCreation:"queued"===e||"running"===e,bootstrapStage:ay(a,e),dispatchStatus:a.status,dispatchSubmittedAt:a.submittedAt,dispatchRunnerStartedAt:a.runner.startedAt,dispatchHeartbeatAt:a.runner.lastHeartbeatAt,dispatchObservedAt:a.observation.observedAt,recoveredFromObservation:!0,...g?{warnings:[g],warningSummary:g}:{}}}}function aR(a,b){let c=Date.parse(a.updatedAt),d=ax(a,b),e=ay(a,d),f=az(a,d),g=aq(a),h=ar(a),i=as(a),j=av(a);return{id:`runtime:dispatch:${a.id}`,source:"turn",key:`dispatch:${a.id}`,title:(0,W.$m)(a.mission,38)||"Queued mission",subtitle:j?aU(j,90):f,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:h??void 0,sessionId:g??void 0,runId:a.result?.runId,tokenUsage:i,metadata:{dispatchId:a.id,mission:a.mission,routedMission:a.routedMission,outputDir:a.outputDir,outputDirRelative:a.outputDirRelative,notesDirRelative:a.notesDirRelative,error:a.error,sessionId:g,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,...j?{warnings:[j],warningSummary:j}:{}}}}function aS(a){return"completed"===a||"stalled"===a||"cancelled"===a}function aT(a,b){return(b.updatedAt??0)-(a.updatedAt??0)}function aU(a,b){let c=a.replace(/\s+/g," ").trim();return c.length<=b?c:`${c.slice(0,Math.max(b-1,1)).trimEnd()}…`}function aV(a){return(0,d.createHash)("sha1").update(a).digest("hex").slice(0,12)}async function aW(a,b,c){if(!b)return[];let d=(0,W.CK)(c.agents.find(b=>b.id===a.primaryAgentId)??{name:"OpenClaw"}),e=await aJ(b),f=b.runner.logPath&&b.runner.logPath.trim()?{path:b.runner.logPath,displayPath:l().basename(b.runner.logPath)}:null,g=[aX({id:`${b.id}:accepted`,kind:"user",timestamp:b.submittedAt,title:"Mission accepted",detail:aZ(a.mission||b.mission||"Mission queued for dispatch.",220),agentId:a.primaryAgentId},{urlSources:[a.mission,b.mission,b.routedMission]})];if((b.runner.startedAt||b.runner.pid)&&g.push(aX({id:`${b.id}:runner-started`,kind:"status",timestamp:b.runner.startedAt??b.updatedAt,title:"Dispatch runner started",detail:b.outputDirRelative?`Preparing the first OpenClaw runtime in ${b.outputDirRelative}.`:"Preparing the first OpenClaw runtime."},{file:b.outputDir&&b.outputDirRelative?{path:b.outputDir,displayPath:b.outputDirRelative}:null})),b.runner.lastHeartbeatAt&&g.push(aX({id:`${b.id}:heartbeat`,kind:"status",timestamp:b.runner.lastHeartbeatAt,title:"Heartbeat received",detail:`${d} is online. Waiting for the first runtime session.`},{urlSources:[d,b.outputDirRelative]})),b.observation.observedAt&&g.push(aX({id:`${b.id}:runtime-observed`,kind:"status",timestamp:b.observation.observedAt,title:"Runtime observed",detail:"The task is now live. Runtime updates will continue below."},{urlSources:[b.outputDirRelative]})),"completed"===b.status){let a=at(b)||au(b),c=function(a){let b=aG(a.outputDir),c=aG(a.outputDirRelative);for(let d of[at(a),au(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(])((?:\.{1,2}\/)?deliverables\/[^\s`),;]+)/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("/"))&&l().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=aG(a),e=aG(b),f=aG(c);if(!d)return null;if(l().isAbsolute(d)||!e||!f)return d;let g=f.replace(/\/+$/,""),h=d.replace(/\/+$/,"");if(h===g)return e;let i=`${g}/`;return h.startsWith(i)?l().join(e,h.slice(i.length)):d}(a.path,b,c);if(d)return{path:d,displayPath:a.displayPath}}return null}(b);g.push(aX({id:`${b.id}:completed`,kind:"status",timestamp:b.runner.finishedAt??b.updatedAt,title:a?"Mission finished":"Dispatch runner finished",detail:aZ(a||aw(b),220)},{urlSources:[a,aw(b),b.outputDirRelative],file:c??(b.outputDir&&b.outputDirRelative?{path:b.outputDir,displayPath:b.outputDirRelative}:null)}))}"cancelled"===b.status&&g.push(aX({id:`${b.id}:cancelled`,kind:"warning",timestamp:b.runner.finishedAt??b.updatedAt,title:"Mission cancelled",detail:aZ(aw(b),220),isError:!1},{urlSources:[b.error,b.outputDirRelative],file:b.outputDir&&b.outputDirRelative?{path:b.outputDir,displayPath:b.outputDirRelative}:null}));let h=av(b);for(let c of(h&&g.push(aX({id:`${b.id}:integrity-warning`,kind:"warning",timestamp:b.runner.finishedAt??b.updatedAt,title:"Result needs review",detail:aZ(h,220),isError:!0},{urlSources:[b.outputDirRelative],file:b.outputDir&&b.outputDirRelative?{path:b.outputDir,displayPath:b.outputDirRelative}:null})),"stalled"===b.status&&g.push(aX({id:`${b.id}:stalled`,kind:"warning",timestamp:b.updatedAt,title:b.error?"Dispatch error":"Dispatch stalled",detail:aZ(b.error||(b.runner.lastHeartbeatAt?"OpenClaw stopped reporting progress while waiting for the first runtime.":"OpenClaw did not produce the first heartbeat in time."),220),isError:!0},{urlSources:[b.error,b.outputDirRelative]})),e)){let b=function(a){let b=aK(a.text);if(!b)return null;if("status"===a.stream)return{kind:"status",title:"Dispatch runner",detail:b,isError:!1};if("stdout"===a.stream)return{kind:"status",title:"Runner output",detail:b,isError:!1};let c=function(a){let b=a.trim().toLowerCase();return!(!b||b.includes("exited successfully")||b.includes("booted for agent")||b.includes("launched openclaw agent process"))&&/(aborted|denied|enoent|eacces|error|exception|failed|failure|invalid|killed|not found|panic|refused|stalled|timeout|timed out|traceback)/i.test(a)}(b);return{kind:c?"warning":"status",title:c?"Runner warning":"Runner note",detail:b,isError:c}}(c);b&&g.push(aX({id:c.id,kind:b.kind,timestamp:c.timestamp,title:b.title,detail:aZ(b.detail,220),agentId:a.primaryAgentId,isError:b.isError},{file:f}))}return g}function aX(a,b){let c=function(a){for(let b of a){if("string"!=typeof b)continue;let a=b.match(/https?:\/\/[^\s<>"'`]+/i);if(!a)continue;let c=a[0].replace(/[)\].,;:!?]+$/g,"");if(c)return c}return null}(b?.urlSources??[]);return{...a,...c?{url:c}:{},...b?.file?{filePath:b.file.path,displayPath:b.file.displayPath}:{}}}function aY(a){return"number"==typeof a&&Number.isFinite(a)?new Date(a).toISOString():new Date().toISOString()}function aZ(a,b){let c=a.replace(/\s+/g," ").trim();return c.length<=b?c:`${c.slice(0,Math.max(b-1,1)).trimEnd()}…`}let a$=l().join(process.cwd(),".mission-control"),a_=l().join(a$,"dispatches"),a0=l().join(process.cwd(),"scripts","openclaw-mission-dispatch-runner.mjs"),a1=(0,z.promisify)(y.execFile);async function a2(a){let b=bd(a.id),c=`${b}.${process.pid}.tmp`;await (0,f.mkdir)(l().dirname(b),{recursive:!0}),await (0,f.writeFile)(c,`${JSON.stringify(a,null,2)}
85
- `,"utf8"),await (0,f.rename)(c,b)}async function a3(a){await (0,f.access)(a0,e.constants.R_OK);let b=await (0,r.XP)(),c=(0,y.spawn)(process.execPath,[a0,bd(a.id)],{cwd:process.cwd(),detached:!0,stdio:"ignore",env:{...process.env,OPENCLAW_BIN:b}});return c.unref(),{...a,runner:{...a.runner,pid:c.pid??a.runner.pid}}}async function a4(a){if(a.dispatchId){let b=await ba(a.dispatchId);if(b)return b}let b=await a9(),c=new Set(a.runtimeIds),d=new Set(a.sessionIds);for(let e of b){if(e.agentId!==a.primaryAgentId&&!a.agentIds.includes(e.agentId))continue;if(a.mission&&e.mission&&(0,ag.Dm)(e.mission,a.mission)||e.observation.runtimeId&&c.has(e.observation.runtimeId))return e;let b=aq(e);if(b&&d.has(b))return e}return null}async function a5(a){let b=new Set;if("number"==typeof a.runner.childPid&&Number.isFinite(a.runner.childPid)&&b.add(a.runner.childPid),0===b.size&&"number"==typeof a.runner.pid&&Number.isFinite(a.runner.pid))try{let{stdout:c}=await a1("pgrep",["-P",String(a.runner.pid)]);for(let a of c.split(/\r?\n/)){let c=Number.parseInt(a.trim(),10);Number.isFinite(c)&&c>0&&b.add(c)}}catch{}for(let a of b)try{process.kill(a,"SIGTERM")}catch{}return b.values().next().value??null}async function a6(a,b){let c=bg(b.updatedAt);if(a.observation.runtimeId===b.id&&a.observation.observedAt===c)return;let d=await ba(a.id)??a;(d.observation.runtimeId!==b.id||d.observation.observedAt!==c)&&await a2({...d,updatedAt:bf(d.updatedAt,c),observation:{runtimeId:b.id,observedAt:c}})}async function a7(a,b){if(bc(a.status)||!b.agentId||!b.sessionId)return;let c=await (0,ah.WU)(b.agentId,b.sessionId,a.workspacePath??void 0);if(!c)return;let d="";try{d=await (0,f.readFile)(c,"utf8")}catch{return}let e=(0,ah.Jw)(b,d,a.workspacePath??void 0),g=!!(e.finalTimestamp&&e.stopReason&&"toolUse"!==e.stopReason),h=!!e.errorMessage||"error"===e.stopReason||"aborted"===e.stopReason;if(!g&&!h)return;let i=await ba(a.id)??a;if(bc(i.status))return;let j=e.finalTimestamp??bg(b.updatedAt),k=h?"stalled":"completed";await a2({...i,status:k,updatedAt:bf(i.updatedAt,j),runner:{...i.runner,finishedAt:j,lastHeartbeatAt:j},result:"completed"===k?i.result??(e.finalText||b.runId?{runId:b.runId||`runtime:${b.id}`,status:e.errorMessage?"error":"ok",summary:e.errorMessage||"completed",...e.finalText?{result:{payloads:[{text:e.finalText,mediaUrl:null}]}}:{}}:null):i.result,error:"stalled"===k?e.errorMessage||i.error||"OpenClaw runtime ended before the dispatch runner finalized.":null})}async function a8(a){let b=aq(a);if(!a.agentId||!b)return null;let c=await (0,ah.WU)(a.agentId,b,a.workspacePath??void 0);if(!c)return null;try{let d=await (0,f.readFile)(c,"utf8"),e=aQ(a,b),g=(0,ah.qv)(e,(0,ah.SI)(d,e,a.workspacePath??void 0));if(0===g.length||a.mission&&!g.some(b=>(0,ag.Dm)(b.prompt,a.mission)))return null;return e}catch{return null}}async function a9(){try{let a=await (0,f.readdir)(a_,{withFileTypes:!0}),b=Date.now();return(await Promise.all(a.filter(a=>a.isFile()&&a.name.endsWith(".json")).map(async a=>{var c,d;let e,g=l().join(a_,a.name),h=await bb(g);return h?(c=h,d=b,e=Date.parse(c.updatedAt),!Number.isNaN(e)&&d-e>2592e5)?(await (0,f.rm)(g,{force:!0}),h.runner.logPath&&await (0,f.rm)(h.runner.logPath,{force:!0}),null):h:null}))).filter(a=>!!a).sort((a,b)=>Date.parse(b.updatedAt)-Date.parse(a.updatedAt))}catch{return[]}}async function ba(a){return bb(bd(a))}async function bb(a){try{var b,c,d;let e,g,h=await (0,f.readFile)(a,"utf8"),i=JSON.parse(h);if(!i||"object"!=typeof i||"string"!=typeof i.id||"string"!=typeof i.agentId||"string"!=typeof i.mission||"string"!=typeof i.routedMission||"string"!=typeof i.submittedAt||"string"!=typeof i.updatedAt)return null;let j=(b=i.status,"running"===b||"completed"===b||"stalled"===b||"cancelled"===b?b:"queued");return{id:i.id,status:j,agentId:i.agentId,sessionId:"string"==typeof i.sessionId?i.sessionId:null,mission:i.mission,routedMission:i.routedMission,thinking:(c=i.thinking,"off"===c||"minimal"===c||"low"===c||"high"===c?c:"medium"),workspaceId:"string"==typeof i.workspaceId?i.workspaceId:null,workspacePath:"string"==typeof i.workspacePath?i.workspacePath:null,submittedAt:i.submittedAt,updatedAt:i.updatedAt,outputDir:"string"==typeof i.outputDir?i.outputDir:null,outputDirRelative:"string"==typeof i.outputDirRelative?i.outputDirRelative:null,notesDirRelative:"string"==typeof i.notesDirRelative?i.notesDirRelative:null,runner:{pid:"number"==typeof i.runner?.pid?i.runner.pid:null,childPid:"number"==typeof i.runner?.childPid?i.runner.childPid:null,startedAt:"string"==typeof i.runner?.startedAt?i.runner.startedAt:null,finishedAt:"string"==typeof i.runner?.finishedAt?i.runner.finishedAt:null,lastHeartbeatAt:"string"==typeof i.runner?.lastHeartbeatAt?i.runner.lastHeartbeatAt:null,logPath:"string"==typeof i.runner?.logPath?i.runner.logPath:be(i.id)},observation:{runtimeId:"string"==typeof i.observation?.runtimeId?i.observation.runtimeId:null,observedAt:"string"==typeof i.observation?.observedAt?i.observation.observedAt:null},result:(d=i.result,e=aA(d),g=aB(d),"object"==typeof d&&null!==d&&("string"==typeof d.runId||"string"==typeof d.status||"string"==typeof d.summary||e.length>0||g))?i.result:null,error:"string"==typeof i.error?i.error:null}}catch{return null}}function bc(a){return"completed"===a||"stalled"===a||"cancelled"===a}function bd(a){return l().join(a_,`${a}.json`)}function be(a){return l().join(a_,`${a}.log.jsonl`)}function bf(a,b){let c=a?Date.parse(a):NaN,d=b?Date.parse(b):NaN;return Number.isNaN(c)?b??new Date().toISOString():Number.isNaN(d)||c>=d?a??new Date().toISOString():b}function bg(a){return"number"==typeof a&&Number.isFinite(a)?new Date(a).toISOString():null}async function bh(a,b,c){let d=a.runtimeIds.map(a=>b.runtimes.find(b=>b.id===a)).filter(a=>!!a).sort(bk);return bj(a,d,b,c)}async function bi(a,b){let c=new Map(b.agents.map(a=>[a.id,(0,W.CK)(a)])),d=b.runtimes.filter(b=>(function(a,b){var c;if(("string"==typeof a.metadata.dispatchId?a.metadata.dispatchId.trim():"")===b.id)return!0;let d=aq(b);return!!(d&&a.sessionId===d&&a.agentId===b.agentId&&("string"!=typeof(c=a).metadata.kind||"direct"!==c.metadata.kind))})(b,a)).sort(bk),e=d[0]??await a8(a)??aR(a,Date.now()),f=d.length>0?d:[e];return bj(Y(`dispatch:${a.id}`,f,c),f,b,a)}async function bj(a,b,c,d){let e,f,g,h,i=await Promise.all(b.map(a=>(0,ah.pY)(a,c))),j=new Map(i.map(a=>[a.runtimeId,a])),k=ad(i.flatMap(a=>a.createdFiles).concat(b.flatMap(a=>aa(a)))),l=Array.from(new Set(i.flatMap(a=>a.warnings).concat(b.flatMap(a=>ab(a))).map(a=>a.trim()).filter(Boolean))),m=d?(e=ax(d,Date.now()),f=ay(d,e),g=Date.parse(d.updatedAt),h="completed"===e||"cancelled"===e?aH(aw(d),90):az(d,e),{...a,dispatchId:d.id,status:e,subtitle:h,updatedAt:Number.isNaN(g)?a.updatedAt:g,ageMs:Number.isNaN(g)?a.ageMs:Math.max(Date.now()-g,0),liveRunCount:"running"===e||"queued"===e?Math.max(a.liveRunCount,1):0,warningCount:"stalled"===e||"cancelled"===e?Math.max(a.warningCount,1):a.warningCount,metadata:{...a.metadata,bootstrapStage:f,dispatchStatus:d.status,dispatchSubmittedAt:d.submittedAt,dispatchRunnerStartedAt:d.runner.startedAt,dispatchHeartbeatAt:d.runner.lastHeartbeatAt,dispatchObservedAt:d.observation.observedAt,outputDir:d.outputDir,outputDirRelative:d.outputDirRelative}}):a,n=await aW(m,d,c),o=function(a,b,c,d){let e=new Map(d.agents.map(a=>[a.id,(0,W.CK)(a)])),f=[];for(let d of[...b].sort((a,b)=>(a.updatedAt??0)-(b.updatedAt??0))){var g,h;if(a.dispatchId&&aP(d))continue;let b=c.get(d.id),i=d.agentId?e.get(d.agentId)??null:null,j=(g=d,(h=b?.finalTimestamp)||aY(g.updatedAt));if(b?.items.length)for(let a of b.items)f.push(aX({id:`${d.id}:${a.id}`,kind:"assistant"===a.role?"assistant":"toolResult"===a.role?"tool":"user",timestamp:a.timestamp,title:"assistant"===a.role?i||"Agent update":"toolResult"===a.role?a.toolName?`Tool \xb7 ${a.toolName}`:"Tool update":"Mission",detail:aZ(a.text.trim()||b.errorMessage||d.subtitle,220),runtimeId:d.id,agentId:d.agentId,toolName:a.toolName,isError:a.isError},{urlSources:[a.text,b?.finalText,b?.errorMessage,d.subtitle]}));else f.push(aX({id:`${d.id}:status`,kind:"status",timestamp:j,title:i?`${i} \xb7 ${d.status}`:`Run \xb7 ${d.status}`,detail:aZ(b?.errorMessage||d.subtitle,220),runtimeId:d.id,agentId:d.agentId,isError:"stalled"===d.status},{urlSources:[b?.errorMessage,d.subtitle]}));for(let a of Array.from(new Set((b?.warnings??[]).concat(ab(d)).map(a=>a.trim()).filter(Boolean))))f.push(aX({id:`${d.id}:warning:${ac(a)}`,kind:"warning",timestamp:j,title:"Fallback",detail:aZ(a,220),runtimeId:d.id,agentId:d.agentId},{urlSources:[a]}));for(let a of 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}((b?.createdFiles??[]).concat(aa(d))))f.push(aX({id:`${d.id}:artifact:${ac(a.path)}`,kind:"artifact",timestamp:j,title:"Created file",detail:a.displayPath,runtimeId:d.id,agentId:d.agentId},{file:a}))}return 0===f.length&&a.mission&&!a.dispatchId&&f.push(aX({id:`${a.id}:mission`,kind:"user",timestamp:aY(a.updatedAt),title:"Mission",detail:aZ(a.mission,220),agentId:a.primaryAgentId},{urlSources:[a.mission]})),f.sort((a,b)=>Date.parse(a.timestamp)-Date.parse(b.timestamp)).slice(-36)}(m,b,j,c),p=await al({task:m,runs:b,outputs:i,createdFiles:k,dispatchRecord:d,snapshot:c});return{task:m,runs:b,outputs:i,liveFeed:function(...a){let b=new Map;for(let c of a.flat())b.set(c.id,c);return[...b.values()].sort((a,b)=>Date.parse(a.timestamp)-Date.parse(b.timestamp)).slice(-48)}(n,o),createdFiles:k,warnings:l,integrity:p}}function bk(a,b){return(b.updatedAt??0)-(a.updatedAt??0)}function bl(a){return a.split(l().sep).join("/")}async function bm(a,b){var c;let d,e,g,h=(c=b,e=[(d=new Date).getFullYear(),String(d.getMonth()+1).padStart(2,"0"),String(d.getDate()).padStart(2,"0"),String(d.getHours()).padStart(2,"0"),String(d.getMinutes()).padStart(2,"0"),String(d.getSeconds()).padStart(2,"0")].join("-"),g=c.replace(/^\[[^\]]+\]\s*/i,"").trim().normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,48).replace(/^-+|-+$/g,"")||"task",`${e}-${g}`),i=l().join(a,"deliverables",h),j=bl(l().join("deliverables",h)),k=bl("memory");return await (0,f.mkdir)(i,{recursive:!0}),await (0,f.mkdir)(l().join(a,"memory"),{recursive:!0}),{runFolder:h,absoluteOutputDir:i,relativeOutputDir:j,notesDirRelative:k}}var bn=c(3334),bo=c(5828);async function bp(a,b){var c,e;let f,g,h,i=a.mission.trim();if(!i)throw Error("Mission text is required.");let j=await b.getMissionControlSnapshot({includeHidden:!0}),k=a.agentId||b.resolveAgentForMission(j,a.workspaceId);if(!k)throw Error("No OpenClaw agent is available for mission dispatch.");let l=j.agents.find(a=>a.id===k),m=j.workspaces.find(b=>b.id===(a.workspaceId||l?.workspaceId))??(l?{id:l.workspaceId,path:l.workspacePath}:null),o=m?j.agents.filter(a=>a.workspaceId===m.id):[],p=o.find(a=>"setup"===a.policy.preset&&a.id!==l?.id)?.id??null,q=m?await bm(m.path,i):null,r=a.thinking??"medium",t=(0,bn.Z)(k,j),u=q?(c=l?.policy,f=c??(0,n.g0)(n.iN),[i,"","Task output routing:",`- Put substantial outputs, drafts, reports, docs, and file deliverables under \`${q.relativeOutputDir}/\`.`,`- If a file is requested, default to \`${q.relativeOutputDir}/<descriptive-file-name>\` unless the user explicitly asks for another path.`,`- Use \`${q.notesDirRelative}/\` only for temporary notes or durable workspace memory, not final deliverables.`,"- Avoid writing final artifacts to the workspace root.","- Only update shared workspace docs when the change is durable and workspace-wide; task-specific docs should stay inside this run folder.","","Agent operating policy:",...Q(f,p),...t?["",t]:[]].join("\n")):i,v=(0,bo.l9)(j),w=(e={agentId:k,mission:i,routedMission:u,thinking:r,workspaceId:m?.id??null,workspacePath:m?.path??null,outputDir:q?.absoluteOutputDir??null,outputDirRelative:q?.relativeOutputDir??null,notesDirRelative:q?.notesDirRelative??null},g=new Date().toISOString(),{id:h=`dispatch-${(0,d.randomUUID)()}`,status:"queued",agentId:e.agentId,sessionId:(0,d.randomUUID)(),mission:e.mission,routedMission:e.routedMission,thinking:e.thinking,workspaceId:e.workspaceId,workspacePath:e.workspacePath,submittedAt:g,updatedAt:g,outputDir:e.outputDir,outputDirRelative:e.outputDirRelative,notesDirRelative:e.notesDirRelative,runner:{pid:null,childPid:null,startedAt:null,finishedAt:null,lastHeartbeatAt:null,logPath:be(h)},observation:{runtimeId:null,observedAt:null},result:null,error:null});if(await a2(w),v)return w={...w,status:"stalled",updatedAt:new Date().toISOString(),error:v},await a2(w),b.invalidateMissionControlCaches(),{dispatchId:w.id,runId:null,agentId:k,status:w.status,summary:v,payloads:[],meta:{outputDir:q?.absoluteOutputDir,outputDirRelative:q?.relativeOutputDir,notesDirRelative:q?.notesDirRelative}};try{w=await a3(w)}catch(a){throw w={...w,status:"stalled",updatedAt:new Date().toISOString(),error:s(a)||"Mission dispatch runner could not be started."},await a2(w),b.invalidateMissionControlCaches(),Error(w.error??"Mission dispatch runner could not be started.")}return b.invalidateMissionControlCaches(),{dispatchId:w.id,runId:null,agentId:k,status:w.status,summary:"Mission accepted and queued for OpenClaw execution.",payloads:[],meta:{outputDir:q?.absoluteOutputDir,outputDirRelative:q?.relativeOutputDir,notesDirRelative:q?.notesDirRelative}}}async function bq(a,b,c,d){let e,f=(await d.getMissionControlSnapshot({includeHidden:!0})).tasks.find(b=>b.id===a),g=f?await a4(f):c?await ba(c):null;if(!f&&!g)throw Error("Task was not found in the current OpenClaw snapshot.");if(!g)throw Error("Mission dispatch record was not found for this task.");if(bc(g.status))return{taskId:a,dispatchId:g.id,status:g.status,summary:aw(g),reason:g.error,runnerPid:g.runner.pid,childPid:g.runner.childPid,abortedAt:g.runner.finishedAt??g.updatedAt};let h=new Date().toISOString(),i=(e="string"==typeof b?b.trim():"").length>0?e:"Mission aborted by operator.",j={...g,status:"cancelled",updatedAt:h,error:i,runner:{...g.runner,finishedAt:h,lastHeartbeatAt:h}};await a2(j),d.invalidateMissionControlCaches();let k=await a5(j);return{taskId:a,dispatchId:j.id,status:j.status,summary:i,reason:i,runnerPid:j.runner.pid,childPid:k??j.runner.childPid,abortedAt:h}}var br=c(8752);function bs(a){return"string"==typeof a&&a.trim().length>0?a.trim():null}function bt(a){return Array.from(new Set(a.filter(Boolean)))}function bu(a,b){return l().join(a,".openclaw","agents",b,"agent")}function bv(a){return`agent-policy-${a.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,64)||"agent"}`}function bw(a){return!!(a&&/^agent-policy-/.test(a))}function bx(a){return a.filter(a=>!bw(a))}function by(a){return bt(a.filter(a=>"string"==typeof a).map(a=>a.trim()).filter(a=>!!a&&"fs.workspaceOnly"!==a))}async function bz(a){try{let a=await (0,r.VP)(["config","get","agents.list","--json"]);return Array.isArray(a)?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?a.agents.map(a=>{let b=(0,W.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,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=bt(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}):[];throw c}}async function bA(a){await (0,r.zB)(["config","set","--strict-json","agents.list",JSON.stringify(a)])}async function bB(a,b,c,d,e){let f=await (0,br.rh)(e,"agent-config.read",()=>bz(d)),g=f.findIndex(b=>b.id===a),h=g>=0?{...f[g]}:{id:a,workspace:b};return h.workspace=b,c.name&&(h.name=c.name),"string"==typeof c.model?h.model=c.model:delete h.model,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=bt(c.skills):Array.isArray(c.skills)&&delete h.skills,c.tools?h.tools=c.tools:null===c.tools&&delete h.tools,g>=0?f[g]=h:f.push(h),await (0,br.rh)(e,"agent-config.write",()=>bA(f)),h}async function bC(a,b,c,d,e){let g=bs(d)??bu(b,a),h=l().join(g,"IDENTITY.md"),i=bs(c.content)??(0,q.b9)({name:bs(c.name)??a,emoji:bs(c.emoji),theme:bs(c.theme),avatar:bs(c.avatar)});await (0,br.rh)(e,"agent-identity.write-file",async()=>{await (0,f.mkdir)(l().dirname(h),{recursive:!0}),await (0,f.writeFile)(h,i,"utf8")});let j=["agents","set-identity","--agent",a,"--workspace",b,"--identity-file",h,"--json"];c.name&&j.push("--name",c.name),c.emoji&&j.push("--emoji",c.emoji),c.theme&&j.push("--theme",c.theme),c.avatar&&j.push("--avatar",c.avatar),await (0,br.rh)(e,"agent-identity.sync-openclaw",()=>(0,r.zB)(j))}async function bD(a,b,c,d){let e=bs(d)??bu(b,a);for(let a of(await (0,f.mkdir)(e,{recursive:!0}),c)){let b=l().join(e,a.path);await (0,f.mkdir)(l().dirname(b),{recursive:!0}),await (0,f.writeFile)(b,a.content,"utf8")}}async function bE(a){let b=bs(a);if(!b)return{name:null,emoji:null,theme:null,avatar:null};let c=l().join(b,"IDENTITY.md");try{let a=await (0,f.readFile)(c,"utf8"),b=(0,q.kS)(a);return{name:b.name,emoji:b.emoji,theme:b.theme,avatar:b.avatar}}catch{return{name:null,emoji:null,theme:null,avatar:null}}}var bF=c(8889);function bG(a){return"string"==typeof a&&a.trim().length>0?a.trim():null}function bH(a){return Array.from(new Set(a.filter(Boolean)))}function bI(a){return a.title&&a.title!==a.chatId?`${a.title} (\`${a.chatId}\`)`:`\`${a.chatId}\``}function bJ(a,b){return`${a}-${b.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"agent"}`}async function bK(a){let b=bJ(a.workspaceSlug,a.agent.id),c=bG(a.agent.modelId)??bG(a.workspaceModelId),d=(0,n.g0)(a.agent.policy?.preset??(0,n.qF)({skills:a.agent.skillId?[a.agent.skillId]:[],id:b,name:a.agent.name}),a.agent.policy),e=["agents","add",b,"--workspace",a.workspacePath,"--agent-dir",bu(a.workspacePath,b),"--non-interactive","--json"];c&&e.push("--model",c),await (0,r.zB)(e);let f=await bL({workspacePath:a.workspacePath,agentId:b,agentName:a.agent.name,policy:d}),g=await bB(b,a.workspacePath,{name:bG(a.agent.name)??void 0,model:c??void 0,heartbeat:p(a.agent.heartbeat),skills:[bG(a.agent.skillId),f].filter(a=>!!a),tools:"workspace-only"===d.fileAccess?{fs:{workspaceOnly:!0}}:null});return await bC(b,a.workspacePath,{name:bG(a.agent.name)??g.name,emoji:bG(a.agent.emoji)??void 0,theme:bG(a.agent.theme)??void 0},bu(a.workspacePath,b)),b}async function bL(a){let b=bv(a.agentId);await (0,br.rh)(a.timings,"agent-policy.ensure-telegram-helper",()=>bN(a.workspacePath));let c=await (0,br.rh)(a.timings,"agent-policy.build-team-context",()=>bP(a.workspacePath,a.agentId,a.snapshot??null)),d=await (0,br.rh)(a.timings,"agent-policy.build-telegram-coordination",()=>(function(a,b,c){if(!c)return null;let d=new Map(b?.agents.map(a=>[a.id,(0,W.CK)(a)])??[]),e=new Map(b?.agents.map(a=>[a.id,a])??[]),f=e.get(a)??null,g=f?.workspaceId??null,h=[],i=[],j=[];for(let b of c.channels.filter(a=>"telegram"===a.type)){let c=b.workspaces.filter(a=>a.workspaceId===g);if(0===c.length)continue;let f=(0,bF.qc)(c.flatMap(a=>a.groupAssignments.filter(a=>!1!==a.enabled))).map(a=>({chatId:a.chatId,title:a.title??null})),k=(0,bF.qc)(c.flatMap(b=>b.groupAssignments.filter(b=>!1!==b.enabled&&b.agentId===a))),l=f.filter(a=>!k.some(b=>b.chatId===a.chatId)&&!c.some(b=>b.groupAssignments.some(b=>!1!==b.enabled&&b.chatId===a.chatId&&b.agentId)));if(b.primaryAgentId===a){let f=bH(c.flatMap(b=>b.agentIds.filter(b=>b!==a))).map(a=>{let b=e.get(a)??null;return{agentId:a,name:d.get(a)??a,summary:bO(b)}});h.push({channelId:b.id,channelName:b.name,groups:l,peers:f})}for(let f of k){let g=bH(c.flatMap(c=>c.agentIds.filter(c=>c!==a&&c!==b.primaryAgentId))).map(a=>{let b=e.get(a)??null;return{agentId:a,name:d.get(a)??a,summary:bO(b)}});i.push({channelId:b.id,channelName:b.name,chatId:f.chatId,title:f.title??null,primaryAgentId:b.primaryAgentId??a,primaryAgentName:d.get(b.primaryAgentId??a)??b.primaryAgentId??a,peers:g})}if(b.primaryAgentId&&b.primaryAgentId!==a&&0===k.length){let f=e.get(b.primaryAgentId)??null,g=bH(c.flatMap(c=>c.agentIds.filter(c=>c!==b.primaryAgentId&&c!==a))).map(a=>{let b=e.get(a)??null;return{agentId:a,name:d.get(a)??a,summary:bO(b)}});j.push({channelId:b.id,channelName:b.name,groups:l,peers:g,primaryAgentId:b.primaryAgentId,primaryAgentName:d.get(b.primaryAgentId)??(f?(0,W.CK)(f):b.primaryAgentId)})}}return{primaryChannels:h.sort((a,b)=>a.channelName.localeCompare(b.channelName)),ownedGroups:i.sort((a,b)=>{let c=`${a.channelName}:${a.title??a.chatId}`,d=`${b.channelName}:${b.title??b.chatId}`;return c.localeCompare(d)}),delegateChannels:j.sort((a,b)=>a.channelName.localeCompare(b.channelName))}})(a.agentId,a.snapshot??null,a.channelRegistry??a.snapshot?.channelRegistry??null));return await (0,br.rh)(a.timings,"agent-policy.write-skill",()=>{var e,f,g,h,i;let j,k,m;return G(l().join(a.workspacePath,"skills",b,"SKILL.md"),`${(e=a.agentName,f=a.policy,g=a.setupAgentId,h=c,i=d,j=(0,n._P)(f.preset),k=function(a){if(!a||0===a.members.length)return null;let b=["## Workspace team","- This workspace currently includes these agents. Do not assume you are the only agent unless you verify the roster again.","- Use these exact agent ids when referring to teammates or handing work off:"];for(let c of a.members){let a=[c.isCurrent?"you":null,c.isPrimary?"primary":null,c.role].filter(a=>!!a);b.push(`- ${c.name} (\`${c.agentId}\`) \xb7 ${a.join(" \xb7 ")}.`)}return b.push("- If you are asked who is in this workspace, answer from this roster or re-check `.openclaw/project.json` before replying."),b.join("\n")}(h),m=function(a){if(!a||0===a.primaryChannels.length&&0===a.ownedGroups.length&&0===a.delegateChannels.length)return null;let b=["## Telegram coordination"];if(b.push("- Telegram credentials are managed by OpenClaw for the listed channels. Do not ask the operator for `TELEGRAM_BOT_TOKEN` or `channels.telegram.botToken` when sending to listed groups."),b.push('- To send or post, call the `message` tool with `action: "send"`, `channel: "telegram"`, `target: "<chatId>"`, and the exact message text. Use the listed chat id as `target`.'),b.push("- If sending fails, report the actual tool error instead of inventing a missing-token error."),a.primaryChannels.length>0){for(let c of(b.push("- You are the public Telegram fallback for these channels:"),a.primaryChannels)){let a=c.groups.length>0?c.groups.map(bI).join(", "):"no allowed groups yet";if(b.push(` - ${c.channelName} (\`${c.channelId}\`) \xb7 fallback groups: ${a}.`),c.peers.length>0)for(let a of(b.push(" - Internal assistants:"),c.peers))b.push(` - ${a.name} (\`${a.agentId}\`) \xb7 ${a.summary}.`)}b.push("- Keep public Telegram replies under your own voice for unassigned groups, even when you ask another agent for help."),b.push("- For specialist help, call another agent from the workspace terminal with:"),b.push("```bash"),b.push('node .openclaw/tools/telegram-delegate-agent.mjs --agent <delegate-agent-id> --message "Summarize what I need from you"'),b.push("```"),b.push("- Use delegate turns for internal research, drafting, or analysis only. Do not ask them to answer Telegram directly."),b.push("- After a delegate responds, decide what to share publicly and send the final Telegram reply yourself.")}if(a.ownedGroups.length>0){for(let c of(b.push("- You are the public Telegram voice for these assigned groups:"),a.ownedGroups))if(b.push(` - ${c.channelName} (\`${c.channelId}\`) \xb7 ${c.title??c.chatId} (\`${c.chatId}\`) \xb7 primary ${c.primaryAgentName} (\`${c.primaryAgentId}\`).`),c.peers.length>0)for(let a of(b.push(" - Internal assistants for this group:"),c.peers))b.push(` - ${a.name} (\`${a.agentId}\`) \xb7 ${a.summary}.`);b.push("- Reply directly to those groups as the public voice. Use other agents only for internal help.")}if(a.delegateChannels.length>0){for(let c of(b.push("- You can assist these Telegram admin channels when the primary agent asks:"),a.delegateChannels)){let a=c.groups.length>0?c.groups.map(bI).join(", "):"no allowed groups yet";if(b.push(` - ${c.channelName} (\`${c.channelId}\`) \xb7 primary ${c.primaryAgentName} (\`${c.primaryAgentId}\`) \xb7 groups: ${a}.`),c.peers.length>0)for(let a of(b.push(" - Nearby assistants:"),c.peers))b.push(` - ${a.name} (\`${a.agentId}\`) \xb7 ${a.summary}.`)}b.push("- When helping with Telegram work for groups not assigned to you, return concise internal findings or draft language. Do not speak as the public Telegram agent for those unassigned groups.")}return b.join("\n")}(i),`# ${e} Policy
84
+ `;await G(b,g)}let U=[".openclaw/agents/",".openclaw/project-shell/events.jsonl",".openclaw/project-shell/runs/",".openclaw/project-shell/tasks/"];function V(a){return a?a.split(/[-_]+/g).filter(Boolean).map(a=>a.charAt(0).toUpperCase()+a.slice(1)).join(" "):"Agent"}var W=c(7091);function X(a,b){let c=a.filter(a=>!function(a){var b;if("string"==typeof a.metadata.dispatchId&&a.metadata.dispatchId.trim())return!1;if("string"==typeof a.metadata.chatType&&"direct"===a.metadata.chatType||"string"==typeof a.metadata.kind&&"direct"===a.metadata.kind)return!0;let c=Z(a)||("string"==typeof a.metadata.turnPrompt?a.metadata.turnPrompt:null);return!!("string"==typeof c&&(b=c,/You are chatting (?:directly )?with the operator inside AgentOS/i.test(b)||/Do not create tasks or mention task cards/i.test(b)||/Messages stay in this drawer and are stored locally in your browser/i.test(b)))}(a)),d=new Map,e=new Map(b.map(a=>{var b;return[a.id,(b=a).name.trim()||b.id]})),f=function(a){let b=new Map;for(let c of a){let a=c.sessionId?.trim(),d="string"==typeof c.metadata.dispatchId?c.metadata.dispatchId.trim():"",e="string"==typeof c.metadata.dispatchSubmittedAt?Date.parse(c.metadata.dispatchSubmittedAt):NaN;if(!a||!d)continue;let f=`${c.agentId??"unknown"}:${a}`,g=b.get(f)??[];g.some(a=>a.dispatchId===d)||(g.push({dispatchId:d,submittedAt:Number.isNaN(e)?null:e}),g.sort((a,b)=>(a.submittedAt??-1/0)-(b.submittedAt??-1/0)),b.set(f,g))}return b}(c);for(let a of c){let b=function(a,b){let c=a.taskId?.trim(),d="string"==typeof a.metadata.dispatchId?a.metadata.dispatchId.trim():"",e=Z(a),f=a.sessionId?.trim(),g=f?b.get(`${a.agentId??"unknown"}:${f}`)??[]:[],h=a.updatedAt??0,i=g.filter(a=>null===a.submittedAt||h>=a.submittedAt-1500).sort((a,b)=>(b.submittedAt??-1/0)-(a.submittedAt??-1/0))[0]?.dispatchId??"";return d?`dispatch:${d}`:i?`dispatch:${i}`:c?`task:${c}`:e?`mission:${a.agentId??"unknown"}:${ac(e)}`:f?`session:${f}`:`runtime:${a.id}`}(a,f),c=d.get(b)??[];c.push(a),d.set(b,c)}return Array.from(d.entries()).map(([a,b])=>Y(a,b,e)).sort((a,b)=>(b.updatedAt??0)-(a.updatedAt??0))}function Y(a,b,c){var d,e;let f=[...b].sort(af),g=function(a){let b=a.filter(a=>"turn"===a.source||"string"==typeof a.metadata.turnId);if(b.length>0)return b;let c=a.filter(a=>"string"==typeof a.metadata.dispatchId||"string"==typeof a.metadata.bootstrapStage);return c.length>0?c:a}(f),h=[...g].sort((a,b)=>$(b)-$(a))[0]??g[0]??f[0],i=Z(h)||f.map(a=>Z(a)).find(Boolean)||null,j=function(a){for(let b of a){let a="string"==typeof b.metadata.routedMission?b.metadata.routedMission.trim():"";if(a)return a}return null}(f),k=function(a){let b=[...a.filter(a=>"string"==typeof a.metadata.turnId),...a.filter(a=>!0===a.metadata.recoveredFromObservation),...a.filter(a=>!_(a)&&("completed"===a.status||"stalled"===a.status||"cancelled"===a.status)),...a.filter(a=>!_(a))],c=new Set;for(let a of b){if(c.has(a.id))continue;c.add(a.id);let b=a.subtitle?.trim();if(b)return b}return null}(f),l=k||g.map(a=>a.subtitle?.trim()).find(a=>!!a)||f.map(a=>a.subtitle?.trim()).find(a=>!!a)||"Awaiting OpenClaw updates.",m=ad(f.flatMap(a=>aa(a)).concat(f.flatMap(a=>(function(a){if("string"!=typeof a||0===a.trim().length)return[];let b=[...a.matchAll(/(?:^|[\s(])((?:\.{1,2}\/)?deliverables\/[^\s`),;]+)/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("/"))&&(b.split("/").pop()||"").includes(".")}(b)&&c.push({path:b,displayPath:b})}return ad(c)})(a.subtitle)))),n=ae(f.flatMap(a=>ab(a))),o=function(a){let b=a.filter(a=>a.tokenUsage);if(0!==b.length)return b.reduce((a,b)=>({input:a.input+(b.tokenUsage?.input??0),output:a.output+(b.tokenUsage?.output??0),total:a.total+(b.tokenUsage?.total??0),cacheRead:(a.cacheRead??0)+(b.tokenUsage?.cacheRead??0)}),{input:0,output:0,total:0,cacheRead:0})}(f),p=ae(f.flatMap(a=>a.agentId?[a.agentId]:[])),q=ae(f.flatMap(a=>a.sessionId?[a.sessionId]:[])),r=ae(f.flatMap(a=>a.runId?[a.runId]:[])),s=f.filter(a=>"string"==typeof a.metadata.turnId||!0===a.metadata.recoveredFromObservation).length,t=h?.agentId||p[0],u=t?c.get(t)??null:null,v=f[0]??null;return{id:(d=a,`task:${ac(d)}`),key:a,title:(0,W.$m)(i||h?.title||"Untitled task",52)||"Untitled task",mission:i,subtitle:l,status:(e=f).some(a=>"running"===a.status)?"running":e.some(a=>"cancelled"===a.status)?"cancelled":e.some(a=>"queued"===a.status)?"queued":e.some(a=>"stalled"===a.status)?"stalled":e.some(a=>"idle"===a.status)?"idle":e[0]?.status??"completed",updatedAt:v?.updatedAt??null,ageMs:v?.ageMs??null,workspaceId:h?.workspaceId,primaryAgentId:t,primaryAgentName:u,primaryRuntimeId:h?.id,dispatchId:function(a){for(let b of a)if("string"==typeof b.metadata.dispatchId&&b.metadata.dispatchId.trim())return b.metadata.dispatchId.trim()}(f),runtimeIds:f.map(a=>a.id),agentIds:p,sessionIds:q,runIds:r,runtimeCount:f.length,updateCount:g.filter(a=>"turn"===a.source).length,liveRunCount:f.filter(a=>"running"===a.status||"queued"===a.status).length,artifactCount:m.length,warningCount:n.length,tokenUsage:o,metadata:{mission:i,routedMission:j,resultPreview:k,turnCount:s,sessionCount:q.length,primaryRuntimeSource:h?.source??null,bootstrapStage:"string"==typeof h?.metadata.bootstrapStage?h.metadata.bootstrapStage:null,dispatchStatus:"string"==typeof h?.metadata.dispatchStatus?h.metadata.dispatchStatus:null,dispatchSubmittedAt:"string"==typeof h?.metadata.dispatchSubmittedAt?h.metadata.dispatchSubmittedAt:null,dispatchRunnerStartedAt:"string"==typeof h?.metadata.dispatchRunnerStartedAt?h.metadata.dispatchRunnerStartedAt:null,dispatchHeartbeatAt:"string"==typeof h?.metadata.dispatchHeartbeatAt?h.metadata.dispatchHeartbeatAt:null,dispatchObservedAt:"string"==typeof h?.metadata.dispatchObservedAt?h.metadata.dispatchObservedAt:null,outputDir:"string"==typeof h?.metadata.outputDir?h.metadata.outputDir:null,outputDirRelative:"string"==typeof h?.metadata.outputDirRelative?h.metadata.outputDirRelative:null}}}function Z(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,W.ho)(b);return c.length>0?c:null}function $(a){return 8*!!Z(a)+6*("string"==typeof a.metadata.dispatchId)+("turn"===a.source?6:"session"===a.source?4:2)+("running"===a.status?3:"queued"===a.status?2:"cancelled"===a.status||"stalled"===a.status?3:"idle"===a.status?2:1)}function _(a){let b="string"==typeof a.metadata.bootstrapStage?a.metadata.bootstrapStage:null;return"accepted"===b||"waiting-for-heartbeat"===b||"waiting-for-runtime"===b||"runtime-observed"===b}function aa(a){let b=a.metadata.createdFiles;return Array.isArray(b)?b.flatMap(a=>{if(!a||"object"!=typeof a)return[];let b="path"in a&&"string"==typeof a.path?a.path:null,c="displayPath"in a&&"string"==typeof a.displayPath?a.displayPath:b;return b&&c?[{path:b,displayPath:c}]:[]}):[]}function ab(a){let b=a.metadata.warnings;return Array.isArray(b)?b.filter(a=>"string"==typeof a&&a.trim().length>0):[]}function ac(a){return(0,d.createHash)("sha1").update(a).digest("hex").slice(0,12)}function ad(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}function ae(a){return Array.from(new Set(a.map(a=>(function(a){if("string"!=typeof a)return null;let b=a.trim();return b.length>0?b:null})(a)).filter(a=>!!a)))}function af(a,b){return(b.updatedAt??0)-(a.updatedAt??0)}var ag=c(4414),ah=c(5793);let ai=/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/gi;function aj(a){var b;let c;return(a.sessionId?.trim()||null)??(b=function(a){var b;let c=((b=a).result&&"object"==typeof b.result?b.result:null)?.meta;if(!c||"object"!=typeof c){let b=a.meta;return b&&"object"==typeof b?ap(b):null}return ap(c)}(a),"string"==typeof(c=b?.sessionId)&&c.trim().length>0?c:null)??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 ak(a){if(!a)return!1;let b=a.trim().toLowerCase();return"ready"===b||"completed"===b||"complete"===b||"ok"===b||"success"===b}async function al(a){var b,c,d,e;let f,{task:g,dispatchRecord:h,createdFiles:i,snapshot:j}=a,k=await an(h?.outputDir??null),l=h?await am(h,j):[],m=g.mission||h?.mission||null,n=m&&l.length>0?l.filter(a=>(0,ag.Dm)(a.prompt,m)):l,o=[...n].sort((a,b)=>Date.parse(b.updatedAt)-Date.parse(a.updatedAt))[0]??null,p=o?.finalText?.trim()||null,q=h?ak(f=((b=h.result)&&"object"==typeof b?(Array.isArray(b.result?.payloads)?b.result.payloads:Array.isArray(b.payloads)?b.payloads:[]).filter(a=>!!a&&"string"==typeof a.text):[]).find(a=>a.text.trim().length>0)?.text.trim()??null)?null:f:null,r=p||q||null,s=p?"runtime":q?"dispatch":"none",t=!!(h&&l.length>0&&0===n.length),u=(0,ah.xZ)(n),v=function(a){let b=new Set;for(let c of a)if(c)for(let a of c.match(ai)??[])b.add(a.toLowerCase());return[...b]}([r,q,...n.flatMap(a=>a.items.map(a=>a.text))]),w=[],x=ak(r),y=!!(c=m)&&(/\.(txt|md|json|csv|html|pdf|docx?)\b/i.test(c)||/\b(file|files|artifact|artifacts|report|document|save|export|attachment)\b/i.test(c)||/\b(dosya|dosyasi|kaydet|kaydi|cikti)\b/i.test(c)),z=!!(d=m)&&/\b(email|e-mail|mail|mail address|mail adres|eposta|e-posta)\b/i.test(d),A=!!(e=m)&&(/https?:\/\//i.test(e)||/\b[a-z0-9-]+\.(com|net|org|io|ai|co|tr|app|dev|me|info|biz|edu|gov)\b/i.test(e)||/\b(site|website|web|browser|browse|fetch|sitesine|siteye|siteyi)\b/i.test(e));return h?.outputDir&&!k.exists&&w.push({id:"missing-output-dir",severity:"warning",title:"Output folder is missing",detail:`The dispatch points at ${h.outputDirRelative||h.outputDir}, but that folder is not accessible now.`}),"completed"===g.status&&y&&h?.outputDir&&k.exists&&0===k.fileCount&&0===i.length&&w.push({id:"empty-output-dir",severity:"error",title:"Deliverables folder is empty",detail:"The task asked for a file deliverable, but the assigned deliverables folder does not contain any files."}),"completed"===g.status&&0===l.length&&w.push({id:"missing-transcript",severity:"warning",title:"No runtime transcript was captured",detail:"AgentOS could not verify what the agent actually did because no transcript was recovered for this dispatch."}),"cancelled"===g.status&&w.push({id:"task-cancelled",severity:"warning",title:"Task was cancelled by the operator",detail:h?.error||"The mission dispatch was stopped before completion, so the captured evidence is intentionally incomplete."}),t&&h?.agentId&&w.push({id:"session-mismatch",severity:"error",title:"Recovered session does not match the mission",detail:"The linked transcript session exists, but none of its user turns match this task mission. The dispatch likely reused or attached the wrong session."}),"completed"!==g.status||r?"stalled"===g.status&&r?w.push({id:"partial-final-response",severity:"warning",title:"Final response came from an incomplete runtime",detail:"The assistant produced output, but the runtime stalled before the task completed. Treat this as the last captured response, not a verified completion."}):"completed"===g.status&&x&&r&&w.push({id:"placeholder-final-response",severity:0===k.fileCount&&0===i.length&&0===n.length?"error":"warning",title:"Completion response looks like a placeholder",detail:`The captured final response was "${r}", which is not enough evidence that the requested work actually finished.`}):w.push({id:"missing-final-response",severity:"warning",title:"No final answer was captured",detail:"The task completed without a final assistant response in either the runtime transcript or the dispatch payload."}),"completed"===g.status&&A&&n.length>0&&0===u.length&&w.push({id:"missing-tool-evidence",severity:"warning",title:"No tool usage was recovered",detail:"This mission looks like it needed external lookup or browsing, but the matching transcript turn does not show any recovered tool calls."}),"completed"===g.status&&z&&0===v.length&&w.push({id:"missing-email",severity:"warning",title:"Requested email address was not captured",detail:"The task appears to ask for an email address, but none was detected in the final response or the matching transcript."}),{status:w.some(a=>"error"===a.severity)?"error":w.length>0?"warning":"verified",outputDir:h?.outputDir??null,outputDirRelative:h?.outputDirRelative??null,outputDirExists:k.exists,outputFileCount:k.fileCount,transcriptTurnCount:l.length,matchingTranscriptTurnCount:n.length,finalResponseText:r,finalResponseSource:s,dispatchSessionId:h?aj(h):null,sessionMismatch:t,toolNames:u,emails:v,issues:w}}async function am(a,b){let c=aj(a);if(!c)return[];let d=b.agents.find(b=>b.id===a.agentId),e=await (0,ah.WU)(a.agentId,c,a.workspacePath??d?.workspacePath);if(!e)return[];try{let b=await (0,f.readFile)(e,"utf8"),g={id:`runtime:dispatch:${a.id}`,sessionId:c,agentId:a.agentId,taskId:a.id,metadata:{dispatchSubmittedAt:a.submittedAt}};return(0,ah.qv)(g,(0,ah.SI)(b,g,a.workspacePath??d?.workspacePath))}catch{return[]}}async function an(a){if(!a)return{exists:!1,fileCount:0};try{if(!(await (0,f.stat)(a)).isDirectory())return{exists:!0,fileCount:1};return{exists:!0,fileCount:await ao(a)}}catch{return{exists:!1,fileCount:0}}}async function ao(a){let b=await (0,f.readdir)(a,{withFileTypes:!0}),c=0;for(let d of b){let b=l().join(a,d.name);if(d.isDirectory()){c+=await ao(b);continue}d.isFile()&&(c+=1)}return c}function ap(a){if(!a||"object"!=typeof a)return null;let b=a.agentMeta;return b&&"object"==typeof b?b:null}function aq(a){return(a.sessionId?.trim()||null)??aD(aC(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 ar(a){return aD(aC(a),"model")}function as(a){let b=aC(a),c=b?.usage;if(!c||"object"!=typeof c)return;let d=aE(c,"total")??aE(c,"totalTokens")??aE(c,"total_tokens");if(null!==d)return{input:aE(c,"input")??aE(c,"prompt_tokens")??0,output:aE(c,"output")??aE(c,"completion_tokens")??0,total:d,cacheRead:aE(c,"cacheRead")??0}}function at(a){let b=a.result?.summary?.trim();if(!b)return null;let c=b.toLowerCase();return"completed"===c||"ok"===c||"success"===c||aF(b)?null:b}function au(a){let b=aA(a.result).find(a=>a.text.trim().length>0)?.text.trim()??null;return aF(b)?null:b}function av(a){let b=au(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 aw(a){let b=av(a);if(b)return b;if("cancelled"===a.status)return aH(a.error||"Mission aborted by operator.",90);let c=at(a)||au(a);return c||(a.observation.observedAt?"Dispatch runner finished. Waiting for the final runtime transcript to sync.":a.outputDirRelative?`Dispatch runner finished \xb7 ${a.outputDirRelative}`:"Dispatch runner finished.")}function ax(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>9e4?"stalled":"running"}let c=Date.parse(a.submittedAt);return!Number.isNaN(c)&&b-c>3e4?"stalled":"queued"}function ay(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 az(a,b){if("completed"===b||"cancelled"===b)return aH(aw(a),90);if("stalled"===b)return a.error?aH(a.error,90):a.runner.lastHeartbeatAt?"Dispatch stalled while waiting for the first OpenClaw runtime.":"Dispatch stalled before the first runner heartbeat.";let c=ay(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 aA(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 aB(a){if(!a||"object"!=typeof a)return null;let b=a.result?.meta??a.meta;return b&&"object"==typeof b?b:null}function aC(a){let b=aB(a.result);if(!b||"object"!=typeof b)return null;let c=b.agentMeta;return c&&"object"==typeof c?c:null}function aD(a,b){let c=a?.[b];return"string"==typeof c&&c.trim().length>0?c:null}function aE(a,b){let c=a?.[b];return"number"==typeof c&&Number.isFinite(c)?c:null}function aF(a){if(!a)return!1;let b=a.trim().toLowerCase();return"ready"===b||"completed"===b||"complete"===b||"ok"===b||"success"===b}function aG(a){return a?.trim()||void 0}function aH(a,b){let c=a.replace(/\s+/g," ").trim();return c.length<=b?c:`${c.slice(0,Math.max(b-1,1)).trimEnd()}…`}let aI=new Set(["cause","code","details","error","message","reason","stack","stderr","stdout","warning"]);async function aJ(a,b=18){let c=a.runner.logPath?.trim();if(!c)return[];try{return(await (0,f.readFile)(c,"utf8")).split(/\r?\n/).map(a=>(function(a){let b=a.trim();if(!b)return null;try{var c;let a=JSON.parse(b);if(!a||"string"!=typeof a.id||"string"!=typeof a.timestamp||"string"!=typeof a.text||(c=a.stream,"status"!==c&&"stdout"!==c&&"stderr"!==c))return null;return{id:a.id,timestamp:a.timestamp,stream:a.stream,text:a.text}}catch{return null}})(a)).filter(a=>!!a).map(a=>{var b;let c;return b=a,(c=aK(b.text))?{...b,text:c}:null}).filter(a=>!!a).slice(-b)}catch{return[]}}function aK(a){let b=a.trim();if(!b||function(a){if(/^[\[\]{}(),]+$/.test(a))return!0;let b=a.match(/^"([^"]+)"\s*:\s*(.+?)(,)?$/);return b?!aI.has(b[1].toLowerCase()):(a.match(/^([A-Za-z0-9_.-]+)\s*:\s*(.+)$/),!1)}(b))return null;let c=b.match(/^"([^"]+)"\s*:\s*(.+?)(,)?$/);if(c){let[,a,b]=c;return aI.has(a.toLowerCase())?`${aL(a)}: ${aM(b)}`:null}let d=b.match(/^([A-Za-z0-9_.-]+)\s*:\s*(.+)$/);return d&&aI.has(d[1].toLowerCase())?`${aL(d[1])}: ${aM(d[2])}`:b}function aL(a){return a.charAt(0).toUpperCase()+a.slice(1)}function aM(a){let b=a.trim().replace(/,$/,"");if(!b)return"";try{let a=JSON.parse(b);if("string"==typeof a)return a;if("number"==typeof a||"boolean"==typeof a)return String(a)}catch{}return b.replace(/^"(.*)"$/,"$1")}async function aN(a,b,c){let d=[],e=Date.now();for(let f of b){let b=aO(f,a);if(b){await c.persistObservation(f,b),await c.reconcileRuntimeState(f,b);continue}let g=await c.buildObservedRuntime(f);if(g){aS(f.status)||await c.reconcileRuntimeState(f,g),d.push(aQ(f,g.sessionId??aq(f)??void 0));continue}d.push(aR(f,e))}return d.sort(aT)}function aO(a,b){var c,d,e;let f=Date.parse(a.submittedAt),g=ax(a,Date.now()),h=aq(a),i=a.observation.runtimeId?.trim()||null;return(c=i,d=b,("completed"===(e=g)||"stalled"===e||"cancelled"===e)&&c&&!d.some(a=>a.id===c))?null:b.map(b=>({runtime:b,score:function(a,b,c){if(aP(a)||a.agentId!==b.agentId)return null;let d="string"==typeof a.metadata.dispatchId?a.metadata.dispatchId.trim():"";if(d&&d!==b.id||(a.updatedAt??0)<(Number.isNaN(c.submittedAt)?0:c.submittedAt-1500))return null;if(c.observedRuntimeId&&a.id===c.observedRuntimeId)return 1e4;let e=!!(c.sessionId&&a.sessionId===c.sessionId);if("completed"===c.effectiveStatus||"stalled"===c.effectiveStatus||"cancelled"===c.effectiveStatus)return d===b.id?500:e?420:null;if(c.sessionId&&!e)return null;let f=(0,ag.gP)(a,b.mission,{agentId:b.agentId,submittedAt:c.submittedAt});return"turn"!==a.source||f||e?0+("turn"===a.source?400:"session"===a.source?40:20)+240*!!f+120*!!e+80*(d===b.id):null}(b,a,{submittedAt:f,sessionId:h,observedRuntimeId:i,effectiveStatus:g})})).filter(a=>"number"==typeof a.score).sort((a,b)=>b.score-a.score||aT(a.runtime,b.runtime))[0]?.runtime}function aP(a){return a.id.startsWith("runtime:dispatch:")}function aQ(a,b){let c=Date.parse(a.observation.observedAt??a.updatedAt??a.submittedAt),d=Date.now(),e=ax(a,d),f=b??aq(a)??aV(a.id),g=av(a);return{id:a.observation.runtimeId||`runtime:${f}:${aV(a.id)}`,source:"turn",key:`dispatch:${a.id}`,title:(0,W.$m)(a.mission,38)||"Recovered mission runtime",subtitle:g?aU(g,90):"completed"===a.status||"cancelled"===a.status?aU(aw(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:ar(a)??void 0,sessionId:f,tokenUsage:as(a),metadata:{mission:a.mission,dispatchId:a.id,routedMission:a.routedMission,outputDir:a.outputDir,outputDirRelative:a.outputDirRelative,notesDirRelative:a.notesDirRelative,error:a.error,sessionId:f,pendingCreation:"queued"===e||"running"===e,bootstrapStage:ay(a,e),dispatchStatus:a.status,dispatchSubmittedAt:a.submittedAt,dispatchRunnerStartedAt:a.runner.startedAt,dispatchHeartbeatAt:a.runner.lastHeartbeatAt,dispatchObservedAt:a.observation.observedAt,recoveredFromObservation:!0,...g?{warnings:[g],warningSummary:g}:{}}}}function aR(a,b){let c=Date.parse(a.updatedAt),d=ax(a,b),e=ay(a,d),f=az(a,d),g=aq(a),h=ar(a),i=as(a),j=av(a);return{id:`runtime:dispatch:${a.id}`,source:"turn",key:`dispatch:${a.id}`,title:(0,W.$m)(a.mission,38)||"Queued mission",subtitle:j?aU(j,90):f,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:h??void 0,sessionId:g??void 0,runId:a.result?.runId,tokenUsage:i,metadata:{dispatchId:a.id,mission:a.mission,routedMission:a.routedMission,outputDir:a.outputDir,outputDirRelative:a.outputDirRelative,notesDirRelative:a.notesDirRelative,error:a.error,sessionId:g,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,...j?{warnings:[j],warningSummary:j}:{}}}}function aS(a){return"completed"===a||"stalled"===a||"cancelled"===a}function aT(a,b){return(b.updatedAt??0)-(a.updatedAt??0)}function aU(a,b){let c=a.replace(/\s+/g," ").trim();return c.length<=b?c:`${c.slice(0,Math.max(b-1,1)).trimEnd()}…`}function aV(a){return(0,d.createHash)("sha1").update(a).digest("hex").slice(0,12)}async function aW(a,b,c){if(!b)return[];let d=(0,W.CK)(c.agents.find(b=>b.id===a.primaryAgentId)??{name:"OpenClaw"}),e=await aJ(b),f=b.runner.logPath&&b.runner.logPath.trim()?{path:b.runner.logPath,displayPath:l().basename(b.runner.logPath)}:null,g=[aX({id:`${b.id}:accepted`,kind:"user",timestamp:b.submittedAt,title:"Mission accepted",detail:aZ(a.mission||b.mission||"Mission queued for dispatch.",220),agentId:a.primaryAgentId},{urlSources:[a.mission,b.mission,b.routedMission]})];if((b.runner.startedAt||b.runner.pid)&&g.push(aX({id:`${b.id}:runner-started`,kind:"status",timestamp:b.runner.startedAt??b.updatedAt,title:"Dispatch runner started",detail:b.outputDirRelative?`Preparing the first OpenClaw runtime in ${b.outputDirRelative}.`:"Preparing the first OpenClaw runtime."},{file:b.outputDir&&b.outputDirRelative?{path:b.outputDir,displayPath:b.outputDirRelative}:null})),b.runner.lastHeartbeatAt&&g.push(aX({id:`${b.id}:heartbeat`,kind:"status",timestamp:b.runner.lastHeartbeatAt,title:"Heartbeat received",detail:`${d} is online. Waiting for the first runtime session.`},{urlSources:[d,b.outputDirRelative]})),b.observation.observedAt&&g.push(aX({id:`${b.id}:runtime-observed`,kind:"status",timestamp:b.observation.observedAt,title:"Runtime observed",detail:"The task is now live. Runtime updates will continue below."},{urlSources:[b.outputDirRelative]})),"completed"===b.status){let a=at(b)||au(b),c=function(a){let b=aG(a.outputDir),c=aG(a.outputDirRelative);for(let d of[at(a),au(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(])((?:\.{1,2}\/)?deliverables\/[^\s`),;]+)/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("/"))&&l().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=aG(a),e=aG(b),f=aG(c);if(!d)return null;if(l().isAbsolute(d)||!e||!f)return d;let g=f.replace(/\/+$/,""),h=d.replace(/\/+$/,"");if(h===g)return e;let i=`${g}/`;return h.startsWith(i)?l().join(e,h.slice(i.length)):d}(a.path,b,c);if(d)return{path:d,displayPath:a.displayPath}}return null}(b);g.push(aX({id:`${b.id}:completed`,kind:"status",timestamp:b.runner.finishedAt??b.updatedAt,title:a?"Mission finished":"Dispatch runner finished",detail:aZ(a||aw(b),220)},{urlSources:[a,aw(b),b.outputDirRelative],file:c??(b.outputDir&&b.outputDirRelative?{path:b.outputDir,displayPath:b.outputDirRelative}:null)}))}"cancelled"===b.status&&g.push(aX({id:`${b.id}:cancelled`,kind:"warning",timestamp:b.runner.finishedAt??b.updatedAt,title:"Mission cancelled",detail:aZ(aw(b),220),isError:!1},{urlSources:[b.error,b.outputDirRelative],file:b.outputDir&&b.outputDirRelative?{path:b.outputDir,displayPath:b.outputDirRelative}:null}));let h=av(b);for(let c of(h&&g.push(aX({id:`${b.id}:integrity-warning`,kind:"warning",timestamp:b.runner.finishedAt??b.updatedAt,title:"Result needs review",detail:aZ(h,220),isError:!0},{urlSources:[b.outputDirRelative],file:b.outputDir&&b.outputDirRelative?{path:b.outputDir,displayPath:b.outputDirRelative}:null})),"stalled"===b.status&&g.push(aX({id:`${b.id}:stalled`,kind:"warning",timestamp:b.updatedAt,title:b.error?"Dispatch error":"Dispatch stalled",detail:aZ(b.error||(b.runner.lastHeartbeatAt?"OpenClaw stopped reporting progress while waiting for the first runtime.":"OpenClaw did not produce the first heartbeat in time."),220),isError:!0},{urlSources:[b.error,b.outputDirRelative]})),e)){let b=function(a){let b=aK(a.text);if(!b)return null;if("status"===a.stream)return{kind:"status",title:"Dispatch runner",detail:b,isError:!1};if("stdout"===a.stream)return{kind:"status",title:"Runner output",detail:b,isError:!1};let c=function(a){let b=a.trim().toLowerCase();return!(!b||b.includes("exited successfully")||b.includes("booted for agent")||b.includes("launched openclaw agent process"))&&/(aborted|denied|enoent|eacces|error|exception|failed|failure|invalid|killed|not found|panic|refused|stalled|timeout|timed out|traceback)/i.test(a)}(b);return{kind:c?"warning":"status",title:c?"Runner warning":"Runner note",detail:b,isError:c}}(c);b&&g.push(aX({id:c.id,kind:b.kind,timestamp:c.timestamp,title:b.title,detail:aZ(b.detail,220),agentId:a.primaryAgentId,isError:b.isError},{file:f}))}return g}function aX(a,b){let c=function(a){for(let b of a){if("string"!=typeof b)continue;let a=b.match(/https?:\/\/[^\s<>"'`]+/i);if(!a)continue;let c=a[0].replace(/[)\].,;:!?]+$/g,"");if(c)return c}return null}(b?.urlSources??[]);return{...a,...c?{url:c}:{},...b?.file?{filePath:b.file.path,displayPath:b.file.displayPath}:{}}}function aY(a){return"number"==typeof a&&Number.isFinite(a)?new Date(a).toISOString():new Date().toISOString()}function aZ(a,b){let c=a.replace(/\s+/g," ").trim();return c.length<=b?c:`${c.slice(0,Math.max(b-1,1)).trimEnd()}…`}let a$=l().join(process.cwd(),".mission-control"),a_=l().join(a$,"dispatches"),a0=l().join(process.cwd(),"scripts","openclaw-mission-dispatch-runner.mjs"),a1=(0,z.promisify)(y.execFile);async function a2(a){let b=bd(a.id),c=`${b}.${process.pid}.tmp`;await (0,f.mkdir)(l().dirname(b),{recursive:!0}),await (0,f.writeFile)(c,`${JSON.stringify(a,null,2)}
85
+ `,"utf8"),await (0,f.rename)(c,b)}async function a3(a){await (0,f.access)(a0,e.constants.R_OK);let b=await (0,r.XP)(),c=(0,y.spawn)(process.execPath,[a0,bd(a.id)],{cwd:process.cwd(),detached:!0,stdio:"ignore",env:{...process.env,OPENCLAW_BIN:b}});return c.unref(),{...a,runner:{...a.runner,pid:c.pid??a.runner.pid}}}async function a4(a){if(a.dispatchId){let b=await ba(a.dispatchId);if(b)return b}let b=await a9(),c=new Set(a.runtimeIds),d=new Set(a.sessionIds);for(let e of b){if(e.agentId!==a.primaryAgentId&&!a.agentIds.includes(e.agentId))continue;if(a.mission&&e.mission&&(0,ag.Dm)(e.mission,a.mission)||e.observation.runtimeId&&c.has(e.observation.runtimeId))return e;let b=aq(e);if(b&&d.has(b))return e}return null}async function a5(a){let b=new Set;if("number"==typeof a.runner.childPid&&Number.isFinite(a.runner.childPid)&&b.add(a.runner.childPid),0===b.size&&"number"==typeof a.runner.pid&&Number.isFinite(a.runner.pid))try{let{stdout:c}=await a1("pgrep",["-P",String(a.runner.pid)]);for(let a of c.split(/\r?\n/)){let c=Number.parseInt(a.trim(),10);Number.isFinite(c)&&c>0&&b.add(c)}}catch{}for(let a of b)try{process.kill(a,"SIGTERM")}catch{}return b.values().next().value??null}async function a6(a,b){let c=bg(b.updatedAt);if(a.observation.runtimeId===b.id&&a.observation.observedAt===c)return;let d=await ba(a.id)??a;(d.observation.runtimeId!==b.id||d.observation.observedAt!==c)&&await a2({...d,updatedAt:bf(d.updatedAt,c),observation:{runtimeId:b.id,observedAt:c}})}async function a7(a,b){if(bc(a.status)||!b.agentId||!b.sessionId)return;let c=await (0,ah.WU)(b.agentId,b.sessionId,a.workspacePath??void 0);if(!c)return;let d="";try{d=await (0,f.readFile)(c,"utf8")}catch{return}let e=(0,ah.Jw)(b,d,a.workspacePath??void 0),g=!!(e.finalTimestamp&&e.stopReason&&"toolUse"!==e.stopReason),h=!!e.errorMessage||"error"===e.stopReason||"aborted"===e.stopReason;if(!g&&!h)return;let i=await ba(a.id)??a;if(bc(i.status))return;let j=e.finalTimestamp??bg(b.updatedAt),k=h?"stalled":"completed";await a2({...i,status:k,updatedAt:bf(i.updatedAt,j),runner:{...i.runner,finishedAt:j,lastHeartbeatAt:j},result:"completed"===k?i.result??(e.finalText||b.runId?{runId:b.runId||`runtime:${b.id}`,status:e.errorMessage?"error":"ok",summary:e.errorMessage||"completed",...e.finalText?{result:{payloads:[{text:e.finalText,mediaUrl:null}]}}:{}}:null):i.result,error:"stalled"===k?e.errorMessage||i.error||"OpenClaw runtime ended before the dispatch runner finalized.":null})}async function a8(a){let b=aq(a);if(!a.agentId||!b)return null;let c=await (0,ah.WU)(a.agentId,b,a.workspacePath??void 0);if(!c)return null;try{let d=await (0,f.readFile)(c,"utf8"),e=aQ(a,b),g=(0,ah.qv)(e,(0,ah.SI)(d,e,a.workspacePath??void 0));if(0===g.length||a.mission&&!g.some(b=>(0,ag.Dm)(b.prompt,a.mission)))return null;return e}catch{return null}}async function a9(){try{let a=await (0,f.readdir)(a_,{withFileTypes:!0}),b=Date.now();return(await Promise.all(a.filter(a=>a.isFile()&&a.name.endsWith(".json")).map(async a=>{var c,d;let e,g=l().join(a_,a.name),h=await bb(g);return h?(c=h,d=b,e=Date.parse(c.updatedAt),!Number.isNaN(e)&&d-e>2592e5)?(await (0,f.rm)(g,{force:!0}),h.runner.logPath&&await (0,f.rm)(h.runner.logPath,{force:!0}),null):h:null}))).filter(a=>!!a).sort((a,b)=>Date.parse(b.updatedAt)-Date.parse(a.updatedAt))}catch{return[]}}async function ba(a){return bb(bd(a))}async function bb(a){try{var b,c,d;let e,g,h=await (0,f.readFile)(a,"utf8"),i=JSON.parse(h);if(!i||"object"!=typeof i||"string"!=typeof i.id||"string"!=typeof i.agentId||"string"!=typeof i.mission||"string"!=typeof i.routedMission||"string"!=typeof i.submittedAt||"string"!=typeof i.updatedAt)return null;let j=(b=i.status,"running"===b||"completed"===b||"stalled"===b||"cancelled"===b?b:"queued");return{id:i.id,status:j,agentId:i.agentId,sessionId:"string"==typeof i.sessionId?i.sessionId:null,mission:i.mission,routedMission:i.routedMission,thinking:(c=i.thinking,"off"===c||"minimal"===c||"low"===c||"high"===c?c:"medium"),workspaceId:"string"==typeof i.workspaceId?i.workspaceId:null,workspacePath:"string"==typeof i.workspacePath?i.workspacePath:null,submittedAt:i.submittedAt,updatedAt:i.updatedAt,outputDir:"string"==typeof i.outputDir?i.outputDir:null,outputDirRelative:"string"==typeof i.outputDirRelative?i.outputDirRelative:null,notesDirRelative:"string"==typeof i.notesDirRelative?i.notesDirRelative:null,runner:{pid:"number"==typeof i.runner?.pid?i.runner.pid:null,childPid:"number"==typeof i.runner?.childPid?i.runner.childPid:null,startedAt:"string"==typeof i.runner?.startedAt?i.runner.startedAt:null,finishedAt:"string"==typeof i.runner?.finishedAt?i.runner.finishedAt:null,lastHeartbeatAt:"string"==typeof i.runner?.lastHeartbeatAt?i.runner.lastHeartbeatAt:null,logPath:"string"==typeof i.runner?.logPath?i.runner.logPath:be(i.id)},observation:{runtimeId:"string"==typeof i.observation?.runtimeId?i.observation.runtimeId:null,observedAt:"string"==typeof i.observation?.observedAt?i.observation.observedAt:null},result:(d=i.result,e=aA(d),g=aB(d),"object"==typeof d&&null!==d&&("string"==typeof d.runId||"string"==typeof d.status||"string"==typeof d.summary||e.length>0||g))?i.result:null,error:"string"==typeof i.error?i.error:null}}catch{return null}}function bc(a){return"completed"===a||"stalled"===a||"cancelled"===a}function bd(a){return l().join(a_,`${a}.json`)}function be(a){return l().join(a_,`${a}.log.jsonl`)}function bf(a,b){let c=a?Date.parse(a):NaN,d=b?Date.parse(b):NaN;return Number.isNaN(c)?b??new Date().toISOString():Number.isNaN(d)||c>=d?a??new Date().toISOString():b}function bg(a){return"number"==typeof a&&Number.isFinite(a)?new Date(a).toISOString():null}async function bh(a,b,c){let d=a.runtimeIds.map(a=>b.runtimes.find(b=>b.id===a)).filter(a=>!!a).sort(bk);return bj(a,d,b,c)}async function bi(a,b){let c=new Map(b.agents.map(a=>[a.id,(0,W.CK)(a)])),d=b.runtimes.filter(b=>(function(a,b){if(("string"==typeof a.metadata.dispatchId?a.metadata.dispatchId.trim():"")===b.id)return!0;let c=aq(b);return!!c&&a.sessionId===c&&a.agentId===b.agentId})(b,a)).sort(bk),e=d[0]??await a8(a)??aR(a,Date.now()),f=d.length>0?d:[e];return bj(Y(`dispatch:${a.id}`,f,c),f,b,a)}async function bj(a,b,c,d){let e,f,g,h,i=await Promise.all(b.map(a=>(0,ah.pY)(a,c))),j=new Map(i.map(a=>[a.runtimeId,a])),k=ad(i.flatMap(a=>a.createdFiles).concat(b.flatMap(a=>aa(a)))),l=Array.from(new Set(i.flatMap(a=>a.warnings).concat(b.flatMap(a=>ab(a))).map(a=>a.trim()).filter(Boolean))),m=d?(e=ax(d,Date.now()),f=ay(d,e),g=Date.parse(d.updatedAt),h="completed"===e||"cancelled"===e?aH(aw(d),90):az(d,e),{...a,dispatchId:d.id,status:e,subtitle:h,updatedAt:Number.isNaN(g)?a.updatedAt:g,ageMs:Number.isNaN(g)?a.ageMs:Math.max(Date.now()-g,0),liveRunCount:"running"===e||"queued"===e?Math.max(a.liveRunCount,1):0,warningCount:"stalled"===e||"cancelled"===e?Math.max(a.warningCount,1):a.warningCount,metadata:{...a.metadata,bootstrapStage:f,dispatchStatus:d.status,dispatchSubmittedAt:d.submittedAt,dispatchRunnerStartedAt:d.runner.startedAt,dispatchHeartbeatAt:d.runner.lastHeartbeatAt,dispatchObservedAt:d.observation.observedAt,outputDir:d.outputDir,outputDirRelative:d.outputDirRelative}}):a,n=await aW(m,d,c),o=function(a,b,c,d){let e=new Map(d.agents.map(a=>[a.id,(0,W.CK)(a)])),f=[];for(let d of[...b].sort((a,b)=>(a.updatedAt??0)-(b.updatedAt??0))){var g,h;if(a.dispatchId&&aP(d))continue;let b=c.get(d.id),i=d.agentId?e.get(d.agentId)??null:null,j=(g=d,(h=b?.finalTimestamp)||aY(g.updatedAt));if(b?.items.length)for(let a of b.items)f.push(aX({id:`${d.id}:${a.id}`,kind:"assistant"===a.role?"assistant":"toolResult"===a.role?"tool":"user",timestamp:a.timestamp,title:"assistant"===a.role?i||"Agent update":"toolResult"===a.role?a.toolName?`Tool \xb7 ${a.toolName}`:"Tool update":"Mission",detail:aZ(a.text.trim()||b.errorMessage||d.subtitle,220),runtimeId:d.id,agentId:d.agentId,toolName:a.toolName,isError:a.isError},{urlSources:[a.text,b?.finalText,b?.errorMessage,d.subtitle]}));else f.push(aX({id:`${d.id}:status`,kind:"status",timestamp:j,title:i?`${i} \xb7 ${d.status}`:`Run \xb7 ${d.status}`,detail:aZ(b?.errorMessage||d.subtitle,220),runtimeId:d.id,agentId:d.agentId,isError:"stalled"===d.status},{urlSources:[b?.errorMessage,d.subtitle]}));for(let a of Array.from(new Set((b?.warnings??[]).concat(ab(d)).map(a=>a.trim()).filter(Boolean))))f.push(aX({id:`${d.id}:warning:${ac(a)}`,kind:"warning",timestamp:j,title:"Fallback",detail:aZ(a,220),runtimeId:d.id,agentId:d.agentId},{urlSources:[a]}));for(let a of 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}((b?.createdFiles??[]).concat(aa(d))))f.push(aX({id:`${d.id}:artifact:${ac(a.path)}`,kind:"artifact",timestamp:j,title:"Created file",detail:a.displayPath,runtimeId:d.id,agentId:d.agentId},{file:a}))}return 0===f.length&&a.mission&&!a.dispatchId&&f.push(aX({id:`${a.id}:mission`,kind:"user",timestamp:aY(a.updatedAt),title:"Mission",detail:aZ(a.mission,220),agentId:a.primaryAgentId},{urlSources:[a.mission]})),f.sort((a,b)=>Date.parse(a.timestamp)-Date.parse(b.timestamp)).slice(-36)}(m,b,j,c),p=await al({task:m,runs:b,outputs:i,createdFiles:k,dispatchRecord:d,snapshot:c});return{task:m,runs:b,outputs:i,liveFeed:function(...a){let b=new Map;for(let c of a.flat())b.set(c.id,c);return[...b.values()].sort((a,b)=>Date.parse(a.timestamp)-Date.parse(b.timestamp)).slice(-48)}(n,o),createdFiles:k,warnings:l,integrity:p}}function bk(a,b){return(b.updatedAt??0)-(a.updatedAt??0)}function bl(a){return a.split(l().sep).join("/")}async function bm(a,b){var c;let d,e,g,h=(c=b,e=[(d=new Date).getFullYear(),String(d.getMonth()+1).padStart(2,"0"),String(d.getDate()).padStart(2,"0"),String(d.getHours()).padStart(2,"0"),String(d.getMinutes()).padStart(2,"0"),String(d.getSeconds()).padStart(2,"0")].join("-"),g=c.replace(/^\[[^\]]+\]\s*/i,"").trim().normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,48).replace(/^-+|-+$/g,"")||"task",`${e}-${g}`),i=l().join(a,"deliverables",h),j=bl(l().join("deliverables",h)),k=bl("memory");return await (0,f.mkdir)(i,{recursive:!0}),await (0,f.mkdir)(l().join(a,"memory"),{recursive:!0}),{runFolder:h,absoluteOutputDir:i,relativeOutputDir:j,notesDirRelative:k}}var bn=c(3334),bo=c(5828);async function bp(a,b){var c,e;let f,g,h,i=a.mission.trim();if(!i)throw Error("Mission text is required.");let j=await b.getMissionControlSnapshot({includeHidden:!0}),k=a.agentId||b.resolveAgentForMission(j,a.workspaceId);if(!k)throw Error("No OpenClaw agent is available for mission dispatch.");let l=j.agents.find(a=>a.id===k),m=j.workspaces.find(b=>b.id===(a.workspaceId||l?.workspaceId))??(l?{id:l.workspaceId,path:l.workspacePath}:null),o=m?j.agents.filter(a=>a.workspaceId===m.id):[],p=o.find(a=>"setup"===a.policy.preset&&a.id!==l?.id)?.id??null,q=m?await bm(m.path,i):null,r=a.thinking??"medium",t=(0,bn.Z)(k,j),u=q?(c=l?.policy,f=c??(0,n.g0)(n.iN),[i,"","Task output routing:",`- Put substantial outputs, drafts, reports, docs, and file deliverables under \`${q.relativeOutputDir}/\`.`,`- If a file is requested, default to \`${q.relativeOutputDir}/<descriptive-file-name>\` unless the user explicitly asks for another path.`,`- Use \`${q.notesDirRelative}/\` only for temporary notes or durable workspace memory, not final deliverables.`,"- Avoid writing final artifacts to the workspace root.","- Only update shared workspace docs when the change is durable and workspace-wide; task-specific docs should stay inside this run folder.","","Agent operating policy:",...Q(f,p),...t?["",t]:[]].join("\n")):i,v=(0,bo.l9)(j),w=(e={agentId:k,mission:i,routedMission:u,thinking:r,workspaceId:m?.id??null,workspacePath:m?.path??null,outputDir:q?.absoluteOutputDir??null,outputDirRelative:q?.relativeOutputDir??null,notesDirRelative:q?.notesDirRelative??null},g=new Date().toISOString(),{id:h=`dispatch-${(0,d.randomUUID)()}`,status:"queued",agentId:e.agentId,sessionId:(0,d.randomUUID)(),mission:e.mission,routedMission:e.routedMission,thinking:e.thinking,workspaceId:e.workspaceId,workspacePath:e.workspacePath,submittedAt:g,updatedAt:g,outputDir:e.outputDir,outputDirRelative:e.outputDirRelative,notesDirRelative:e.notesDirRelative,runner:{pid:null,childPid:null,startedAt:null,finishedAt:null,lastHeartbeatAt:null,logPath:be(h)},observation:{runtimeId:null,observedAt:null},result:null,error:null});if(await a2(w),v)return w={...w,status:"stalled",updatedAt:new Date().toISOString(),error:v},await a2(w),b.invalidateMissionControlCaches(),{dispatchId:w.id,runId:null,agentId:k,status:w.status,summary:v,payloads:[],meta:{outputDir:q?.absoluteOutputDir,outputDirRelative:q?.relativeOutputDir,notesDirRelative:q?.notesDirRelative}};try{w=await a3(w)}catch(a){throw w={...w,status:"stalled",updatedAt:new Date().toISOString(),error:s(a)||"Mission dispatch runner could not be started."},await a2(w),b.invalidateMissionControlCaches(),Error(w.error??"Mission dispatch runner could not be started.")}return b.invalidateMissionControlCaches(),{dispatchId:w.id,runId:null,agentId:k,status:w.status,summary:"Mission accepted and queued for OpenClaw execution.",payloads:[],meta:{outputDir:q?.absoluteOutputDir,outputDirRelative:q?.relativeOutputDir,notesDirRelative:q?.notesDirRelative}}}async function bq(a,b,c,d){let e,f=(await d.getMissionControlSnapshot({includeHidden:!0})).tasks.find(b=>b.id===a),g=f?await a4(f):c?await ba(c):null;if(!f&&!g)throw Error("Task was not found in the current OpenClaw snapshot.");if(!g)throw Error("Mission dispatch record was not found for this task.");if(bc(g.status))return{taskId:a,dispatchId:g.id,status:g.status,summary:aw(g),reason:g.error,runnerPid:g.runner.pid,childPid:g.runner.childPid,abortedAt:g.runner.finishedAt??g.updatedAt};let h=new Date().toISOString(),i=(e="string"==typeof b?b.trim():"").length>0?e:"Mission aborted by operator.",j={...g,status:"cancelled",updatedAt:h,error:i,runner:{...g.runner,finishedAt:h,lastHeartbeatAt:h}};await a2(j),d.invalidateMissionControlCaches();let k=await a5(j);return{taskId:a,dispatchId:j.id,status:j.status,summary:i,reason:i,runnerPid:j.runner.pid,childPid:k??j.runner.childPid,abortedAt:h}}var br=c(8752);function bs(a){return"string"==typeof a&&a.trim().length>0?a.trim():null}function bt(a){return Array.from(new Set(a.filter(Boolean)))}function bu(a,b){return l().join(a,".openclaw","agents",b,"agent")}function bv(a){return`agent-policy-${a.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,64)||"agent"}`}function bw(a){return!!(a&&/^agent-policy-/.test(a))}function bx(a){return a.filter(a=>!bw(a))}function by(a){return bt(a.filter(a=>"string"==typeof a).map(a=>a.trim()).filter(a=>!!a&&"fs.workspaceOnly"!==a))}async function bz(a){try{let a=await (0,r.VP)(["config","get","agents.list","--json"]);return Array.isArray(a)?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?a.agents.map(a=>{let b=(0,W.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,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=bt(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}):[];throw c}}async function bA(a){await (0,r.zB)(["config","set","--strict-json","agents.list",JSON.stringify(a)])}async function bB(a,b,c,d,e){let f=await (0,br.rh)(e,"agent-config.read",()=>bz(d)),g=f.findIndex(b=>b.id===a),h=g>=0?{...f[g]}:{id:a,workspace:b};return h.workspace=b,c.name&&(h.name=c.name),"string"==typeof c.model?h.model=c.model:delete h.model,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=bt(c.skills):Array.isArray(c.skills)&&delete h.skills,c.tools?h.tools=c.tools:null===c.tools&&delete h.tools,g>=0?f[g]=h:f.push(h),await (0,br.rh)(e,"agent-config.write",()=>bA(f)),h}async function bC(a,b,c,d,e){let g=bs(d)??bu(b,a),h=l().join(g,"IDENTITY.md"),i=bs(c.content)??(0,q.b9)({name:bs(c.name)??a,emoji:bs(c.emoji),theme:bs(c.theme),avatar:bs(c.avatar)});await (0,br.rh)(e,"agent-identity.write-file",async()=>{await (0,f.mkdir)(l().dirname(h),{recursive:!0}),await (0,f.writeFile)(h,i,"utf8")});let j=["agents","set-identity","--agent",a,"--workspace",b,"--identity-file",h,"--json"];c.name&&j.push("--name",c.name),c.emoji&&j.push("--emoji",c.emoji),c.theme&&j.push("--theme",c.theme),c.avatar&&j.push("--avatar",c.avatar),await (0,br.rh)(e,"agent-identity.sync-openclaw",()=>(0,r.zB)(j))}async function bD(a,b,c,d){let e=bs(d)??bu(b,a);for(let a of(await (0,f.mkdir)(e,{recursive:!0}),c)){let b=l().join(e,a.path);await (0,f.mkdir)(l().dirname(b),{recursive:!0}),await (0,f.writeFile)(b,a.content,"utf8")}}async function bE(a){let b=bs(a);if(!b)return{name:null,emoji:null,theme:null,avatar:null};let c=l().join(b,"IDENTITY.md");try{let a=await (0,f.readFile)(c,"utf8"),b=(0,q.kS)(a);return{name:b.name,emoji:b.emoji,theme:b.theme,avatar:b.avatar}}catch{return{name:null,emoji:null,theme:null,avatar:null}}}var bF=c(8889);function bG(a){return"string"==typeof a&&a.trim().length>0?a.trim():null}function bH(a){return Array.from(new Set(a.filter(Boolean)))}function bI(a){return a.title&&a.title!==a.chatId?`${a.title} (\`${a.chatId}\`)`:`\`${a.chatId}\``}function bJ(a,b){return`${a}-${b.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"agent"}`}async function bK(a){let b=bJ(a.workspaceSlug,a.agent.id),c=bG(a.agent.modelId)??bG(a.workspaceModelId),d=(0,n.g0)(a.agent.policy?.preset??(0,n.qF)({skills:a.agent.skillId?[a.agent.skillId]:[],id:b,name:a.agent.name}),a.agent.policy),e=["agents","add",b,"--workspace",a.workspacePath,"--agent-dir",bu(a.workspacePath,b),"--non-interactive","--json"];c&&e.push("--model",c),await (0,r.zB)(e);let f=await bL({workspacePath:a.workspacePath,agentId:b,agentName:a.agent.name,policy:d}),g=await bB(b,a.workspacePath,{name:bG(a.agent.name)??void 0,model:c??void 0,heartbeat:p(a.agent.heartbeat),skills:[bG(a.agent.skillId),f].filter(a=>!!a),tools:"workspace-only"===d.fileAccess?{fs:{workspaceOnly:!0}}:null});return await bC(b,a.workspacePath,{name:bG(a.agent.name)??g.name,emoji:bG(a.agent.emoji)??void 0,theme:bG(a.agent.theme)??void 0},bu(a.workspacePath,b)),b}async function bL(a){let b=bv(a.agentId);await (0,br.rh)(a.timings,"agent-policy.ensure-telegram-helper",()=>bN(a.workspacePath));let c=await (0,br.rh)(a.timings,"agent-policy.build-team-context",()=>bP(a.workspacePath,a.agentId,a.snapshot??null)),d=await (0,br.rh)(a.timings,"agent-policy.build-telegram-coordination",()=>(function(a,b,c){if(!c)return null;let d=new Map(b?.agents.map(a=>[a.id,(0,W.CK)(a)])??[]),e=new Map(b?.agents.map(a=>[a.id,a])??[]),f=e.get(a)??null,g=f?.workspaceId??null,h=[],i=[],j=[];for(let b of c.channels.filter(a=>"telegram"===a.type)){let c=b.workspaces.filter(a=>a.workspaceId===g);if(0===c.length)continue;let f=(0,bF.qc)(c.flatMap(a=>a.groupAssignments.filter(a=>!1!==a.enabled))).map(a=>({chatId:a.chatId,title:a.title??null})),k=(0,bF.qc)(c.flatMap(b=>b.groupAssignments.filter(b=>!1!==b.enabled&&b.agentId===a))),l=f.filter(a=>!k.some(b=>b.chatId===a.chatId)&&!c.some(b=>b.groupAssignments.some(b=>!1!==b.enabled&&b.chatId===a.chatId&&b.agentId)));if(b.primaryAgentId===a){let f=bH(c.flatMap(b=>b.agentIds.filter(b=>b!==a))).map(a=>{let b=e.get(a)??null;return{agentId:a,name:d.get(a)??a,summary:bO(b)}});h.push({channelId:b.id,channelName:b.name,groups:l,peers:f})}for(let f of k){let g=bH(c.flatMap(c=>c.agentIds.filter(c=>c!==a&&c!==b.primaryAgentId))).map(a=>{let b=e.get(a)??null;return{agentId:a,name:d.get(a)??a,summary:bO(b)}});i.push({channelId:b.id,channelName:b.name,chatId:f.chatId,title:f.title??null,primaryAgentId:b.primaryAgentId??a,primaryAgentName:d.get(b.primaryAgentId??a)??b.primaryAgentId??a,peers:g})}if(b.primaryAgentId&&b.primaryAgentId!==a&&0===k.length){let f=e.get(b.primaryAgentId)??null,g=bH(c.flatMap(c=>c.agentIds.filter(c=>c!==b.primaryAgentId&&c!==a))).map(a=>{let b=e.get(a)??null;return{agentId:a,name:d.get(a)??a,summary:bO(b)}});j.push({channelId:b.id,channelName:b.name,groups:l,peers:g,primaryAgentId:b.primaryAgentId,primaryAgentName:d.get(b.primaryAgentId)??(f?(0,W.CK)(f):b.primaryAgentId)})}}return{primaryChannels:h.sort((a,b)=>a.channelName.localeCompare(b.channelName)),ownedGroups:i.sort((a,b)=>{let c=`${a.channelName}:${a.title??a.chatId}`,d=`${b.channelName}:${b.title??b.chatId}`;return c.localeCompare(d)}),delegateChannels:j.sort((a,b)=>a.channelName.localeCompare(b.channelName))}})(a.agentId,a.snapshot??null,a.channelRegistry??a.snapshot?.channelRegistry??null));return await (0,br.rh)(a.timings,"agent-policy.write-skill",()=>{var e,f,g,h,i;let j,k,m;return G(l().join(a.workspacePath,"skills",b,"SKILL.md"),`${(e=a.agentName,f=a.policy,g=a.setupAgentId,h=c,i=d,j=(0,n._P)(f.preset),k=function(a){if(!a||0===a.members.length)return null;let b=["## Workspace team","- This workspace currently includes these agents. Do not assume you are the only agent unless you verify the roster again.","- Use these exact agent ids when referring to teammates or handing work off:"];for(let c of a.members){let a=[c.isCurrent?"you":null,c.isPrimary?"primary":null,c.role].filter(a=>!!a);b.push(`- ${c.name} (\`${c.agentId}\`) \xb7 ${a.join(" \xb7 ")}.`)}return b.push("- If you are asked who is in this workspace, answer from this roster or re-check `.openclaw/project.json` before replying."),b.join("\n")}(h),m=function(a){if(!a||0===a.primaryChannels.length&&0===a.ownedGroups.length&&0===a.delegateChannels.length)return null;let b=["## Telegram coordination"];if(b.push("- Telegram credentials are managed by OpenClaw for the listed channels. Do not ask the operator for `TELEGRAM_BOT_TOKEN` or `channels.telegram.botToken` when sending to listed groups."),b.push('- To send or post, call the `message` tool with `action: "send"`, `channel: "telegram"`, `target: "<chatId>"`, and the exact message text. Use the listed chat id as `target`.'),b.push("- If sending fails, report the actual tool error instead of inventing a missing-token error."),a.primaryChannels.length>0){for(let c of(b.push("- You are the public Telegram fallback for these channels:"),a.primaryChannels)){let a=c.groups.length>0?c.groups.map(bI).join(", "):"no allowed groups yet";if(b.push(` - ${c.channelName} (\`${c.channelId}\`) \xb7 fallback groups: ${a}.`),c.peers.length>0)for(let a of(b.push(" - Internal assistants:"),c.peers))b.push(` - ${a.name} (\`${a.agentId}\`) \xb7 ${a.summary}.`)}b.push("- Keep public Telegram replies under your own voice for unassigned groups, even when you ask another agent for help."),b.push("- For specialist help, call another agent from the workspace terminal with:"),b.push("```bash"),b.push('node .openclaw/tools/telegram-delegate-agent.mjs --agent <delegate-agent-id> --message "Summarize what I need from you"'),b.push("```"),b.push("- Use delegate turns for internal research, drafting, or analysis only. Do not ask them to answer Telegram directly."),b.push("- After a delegate responds, decide what to share publicly and send the final Telegram reply yourself.")}if(a.ownedGroups.length>0){for(let c of(b.push("- You are the public Telegram voice for these assigned groups:"),a.ownedGroups))if(b.push(` - ${c.channelName} (\`${c.channelId}\`) \xb7 ${c.title??c.chatId} (\`${c.chatId}\`) \xb7 primary ${c.primaryAgentName} (\`${c.primaryAgentId}\`).`),c.peers.length>0)for(let a of(b.push(" - Internal assistants for this group:"),c.peers))b.push(` - ${a.name} (\`${a.agentId}\`) \xb7 ${a.summary}.`);b.push("- Reply directly to those groups as the public voice. Use other agents only for internal help.")}if(a.delegateChannels.length>0){for(let c of(b.push("- You can assist these Telegram admin channels when the primary agent asks:"),a.delegateChannels)){let a=c.groups.length>0?c.groups.map(bI).join(", "):"no allowed groups yet";if(b.push(` - ${c.channelName} (\`${c.channelId}\`) \xb7 primary ${c.primaryAgentName} (\`${c.primaryAgentId}\`) \xb7 groups: ${a}.`),c.peers.length>0)for(let a of(b.push(" - Nearby assistants:"),c.peers))b.push(` - ${a.name} (\`${a.agentId}\`) \xb7 ${a.summary}.`)}b.push("- When helping with Telegram work for groups not assigned to you, return concise internal findings or draft language. Do not speak as the public Telegram agent for those unassigned groups.")}return b.join("\n")}(i),`# ${e} Policy
86
86
 
87
87
  Preset: ${j}
88
88
 
@@ -246,13 +246,13 @@ async function main() {
246
246
  await main();
247
247
  `}
248
248
  `)}function bO(a){if(!a)return"no capability snapshot";let b=[(0,n._P)(a.policy.preset)],c=a.profile.purpose?.trim();c&&b.push(c);let d=bH(a.skills).slice(0,2);d.length>0&&b.push(`skills: ${d.join(", ")}`);let e=bH(a.tools).slice(0,2);return e.length>0&&b.push(`tools: ${e.join(", ")}`),b.join(" \xb7 ")}async function bP(a,b,c){if(!c)return null;let d=c.agents.find(a=>a.id===b);if(!d)return null;let e=new Map((await (0,bF.OL)(a)).agents.map(a=>[a.id,a])),f=c.agents.filter(a=>a.workspaceId===d.workspaceId).sort((a,c)=>{if(a.id===b&&c.id!==b)return -1;if(c.id===b&&a.id!==b)return 1;let d=e.get(a.id),f=e.get(c.id),g=d?.isPrimary??!1;return g!==(f?.isPrimary??!1)?g?-1:1:(0,W.CK)(a).localeCompare((0,W.CK)(c))}).map(a=>{let c=e.get(a.id);return{agentId:a.id,name:(0,W.CK)(a),role:c?.role?.trim()||(0,n._P)(a.policy.preset),isPrimary:c?.isPrimary??!1,isCurrent:a.id===b}});return f.length>0?{members:f}:null}function bQ(a){return"string"==typeof a&&a.trim().length>0?a.trim():null}async function bR(a,b){try{let c=await (0,f.stat)(a);return"directory"===b?c.isDirectory():c.isFile()}catch{return!1}}function bS(a,b){if(a.length!==b.length)return!1;let c=a=>({id:a.id.trim(),role:a.role.trim(),name:a.name.trim(),enabled:a.enabled,emoji:bQ(a.emoji)??null,theme:bQ(a.theme)??null,skillId:bQ(a.skillId)??null,modelId:bQ(a.modelId)??null,isPrimary:!!a.isPrimary,policy:a.policy?{preset:a.policy.preset,missingToolBehavior:a.policy.missingToolBehavior,installScope:a.policy.installScope,fileAccess:a.policy.fileAccess,networkAccess:a.policy.networkAccess}:null,heartbeat:a.heartbeat?{enabled:a.heartbeat.enabled,every:bQ(a.heartbeat.every)??null}:null,channelIds:Array.from(new Set((a.channelIds??[]).filter(Boolean))).sort((a,b)=>a.localeCompare(b))}),d=(a,b)=>a.id.localeCompare(b.id),e=[...a].sort(d).map(c),f=[...b].sort(d).map(c);return JSON.stringify(e)===JSON.stringify(f)}async function bT(a){let b=new Set;for(let c of(await (0,f.readdir)(a,{withFileTypes:!0})))c.isFile()&&bV(c.name)&&b.add(c.name);for(let c of["docs","memory"]){let d=l().join(a,c);if(await bR(d,"directory"))for(let a of(await bU(d,c)))b.add(a)}let c=l().join(a,"deliverables","README.md");return await bR(c,"file")&&b.add("deliverables/README.md"),Array.from(b).sort((a,b)=>a.localeCompare(b))}async function bU(a,b){let c=[];for(let d of(await (0,f.readdir)(a,{withFileTypes:!0}))){if(d.name.startsWith("."))continue;let e=l().join(b,d.name),f=l().join(a,d.name);if(d.isDirectory()){c.push(...await bU(f,e));continue}d.isFile()&&bV(d.name)&&c.push(e)}return c}function bV(a){return a.toLowerCase().endsWith(".md")}async function bW(a,b){return Promise.all(b.map(async b=>({id:b.id,label:b.label,present:await bR(l().join(a,b.relativePath),b.kind)})))}async function bX(a){let b=l().join(a,"skills");try{let a=await (0,f.readdir)(b,{withFileTypes:!0});return(await Promise.all(a.filter(a=>a.isDirectory()).map(async a=>{let c=l().join(b,a.name,"SKILL.md");return await bR(c,"file")?a.name:null}))).filter(a=>"string"==typeof a&&!bw(a)).sort((a,b)=>a.localeCompare(b))}catch{return[]}}var bY=c(9254),bZ=c(1916);let b$=l().join(process.cwd(),".mission-control"),b_=l().join(b$,"settings.json");function b0(a){var b;let c=a?.trim();if(!c)return;let d="~"===(b=c)?j().homedir():b.startsWith("~/")?l().join(j().homedir(),b.slice(2)):b,e=l().normalize(d);return e.length>1?e.replace(/[\\/]+$/,""):e}async function b1(){try{return await (0,r.zB)(["config","get","gateway.remote.url","--json"]),!0}catch(a){if(s(a).includes("Config path not found"))return!1;throw a}}async function b2(){return b0((await b3()).workspaceRoot)??null}async function b3(){let a;try{a=await (0,f.readFile)(b_,"utf8")}catch(a){if("ENOENT"===("object"==typeof a&&a&&"code"in a?a.code:void 0))return{};throw a}try{let b=JSON.parse(a),c="string"==typeof b.workspaceRoot?b0(b.workspaceRoot):void 0,d=function(a){if(!a||"object"!=typeof a)return;let b=Object.entries("smokeTests"in a&&a.smokeTests&&"object"==typeof a.smokeTests?a.smokeTests:{}).reduce((a,[b,c])=>{if(!c||"object"!=typeof c)return a;let d="string"==typeof c.checkedAt?c.checkedAt:null,e="passed"===c.status||"failed"===c.status?c.status:null;return d&&e&&(a[b]={status:e,checkedAt:d,..."string"==typeof c.runId?{runId:c.runId}:{},..."string"==typeof c.summary?{summary:c.summary}:{},..."string"==typeof c.error?{error:c.error}:{}}),a},{});return Object.keys(b).length>0?{smokeTests:b}:void 0}("object"==typeof b.runtimePreflight&&b.runtimePreflight?b.runtimePreflight:void 0);return{...c?{workspaceRoot:c}:{},...d?{runtimePreflight:d}:{}}}catch{return{}}}async function b4(a){await (0,f.mkdir)(b$,{recursive:!0}),await (0,f.writeFile)(b_,`${JSON.stringify(a,null,2)}
249
- `,"utf8")}function b5(a,b){return b&&a?{status:b.status,checkedAt:b.checkedAt,agentId:a,runId:b.runId??null,summary:b.summary??null,error:b.error??null}:{status:"not-run",checkedAt:null,agentId:null,runId:null,summary:null,error:null}}async function b6(a){let b=await b3(),c={...b.runtimePreflight?.smokeTests??{}};a.agentId&&"not-run"!==a.status&&a.checkedAt&&(c[a.agentId]={status:a.status,checkedAt:a.checkedAt,...a.runId?{runId:a.runId}:{},...a.summary?{summary:a.summary}:{},...a.error?{error:a.error}:{}},await b4({...b.workspaceRoot?{workspaceRoot:b.workspaceRoot}:{},runtimePreflight:{smokeTests:c}}))}let b7=l().join(process.cwd(),".mission-control"),b8=l().join(b7,"channel-registry.json"),b9=l().join(j().homedir(),".openclaw"),ca="gateway.remote.url",cb="Deferred to background refresh.",cc=null,cd=null,ce=null,cf=null,cg=null,ch=null,ci=null,cj=null,ck=null,cl=null,cm=null,cn=null,co=null,cp=new Map,cq=0;function cr(){cq+=1,cc=null,ce=null,cf=null,cg=null,ch=null,ci=null,cj=null,ck=null,cl=null,cm=null,cn=null,cp=new Map}function cs(a="interactive"){let b=cq;return cO({profile:a,generation:b}).then(a=>(b===cq&&(cc={...a,expiresAt:Date.now()+3e4}),a))}function ct(){return!ch||Date.now()-ch.capturedAt>3e5}async function cu(a=2e4){try{let b=await (0,r.VP)(["status","--json"],{timeoutMs:a});return{status:"fulfilled",value:b}}catch(a){return{status:"rejected",reason:a}}}async function cv(a=2e4){try{let b=await (0,r.VP)(["gateway","status","--json"],{timeoutMs:a});return{status:"fulfilled",value:b}}catch(a){return{status:"rejected",reason:a}}}async function cw(a=2e4){try{let b=await (0,r.VP)(["models","status","--json"],{timeoutMs:a});return{status:"fulfilled",value:b}}catch(a){return{status:"rejected",reason:a}}}function cx(a,b,c){return"fulfilled"===a.status?(c({value:a.value,capturedAt:Date.now()}),{value:a.value,reusedCachedValue:!1,failed:!1}):b&&Date.now()-b.capturedAt<=3e5?{value:b.value,reusedCachedValue:!0,failed:!0}:{value:void 0,reusedCachedValue:!1,failed:!0}}function cy(){return{status:"rejected",reason:Error(cb)}}function cz(a){return"rejected"===a.status&&a.reason instanceof Error&&a.reason.message===cb}async function cA(){try{let a=await (0,f.readFile)(l().join(b9,"openclaw.json"),"utf8"),b=JSON.parse(a),c=b.agents?.list;return{status:"fulfilled",value:Array.isArray(c)?c:[]}}catch(a){return{status:"rejected",reason:a}}}async function cB(a){try{var b;let c=(b=a,dZ([...b.flatMap(a=>{let b=[],c=(0,bZ.Nk)(a.workspace);return c&&b.push(l().join(c,".openclaw","agents")),b}),l().join(b9,"agents")])),d=await cE(c);return{status:"fulfilled",value:{sessions:d}}}catch(a){return{status:"rejected",reason:a}}}async function cC(){try{let a=await (0,f.readFile)(b8,"utf8"),b=JSON.parse(a),c=dE(b)?b:{version:1,channels:[]},d=Array.isArray(c.channels)?c.channels.map(a=>(0,bF.kf)(a)).filter(a=>!!a):[];return{status:"fulfilled",value:(0,bF._E)({version:1,channels:d})}}catch(a){return{status:"rejected",reason:a}}}function cD(a,b){return b?`${a}: Reusing the last successful payload while a slow OpenClaw command refreshes in the background.`:null}async function cE(a){let b=new Map;for(let c of a){let a;try{a=await (0,f.readdir)(c,{withFileTypes:!0})}catch{continue}for(let d of a){let a,e;if(!d.isDirectory())continue;let g=l().join(c,d.name,"sessions","sessions.json");try{a=await (0,f.readFile)(g,"utf8")}catch{continue}try{e=JSON.parse(a)}catch{continue}if(Array.isArray(e)){for(let a of e){if(!dE(a))continue;let c=cF(a,d.name);b.has(c.key)||b.set(c.key,c)}continue}if(dE(e))for(let[a,c]of Object.entries(e)){if(!dE(c))continue;let e=cF(c,d.name,a);b.has(e.key)||b.set(e.key,e)}}}return Array.from(b.values()).sort((a,b)=>(b.updatedAt??0)-(a.updatedAt??0))}function cF(a,b,c){var d;let e=(0,bZ.Nk)("string"==typeof a.sessionId?a.sessionId:void 0),f=cG(a,"updatedAt"),g=cG(a,"inputTokens"),h=cG(a,"outputTokens"),i=cG(a,"totalTokens"),j=cG(a,"cacheRead"),k=cG(a,"ageMs")??("number"==typeof(d=f)?Math.max(Date.now()-d,0):void 0),l=(0,bZ.Nk)("string"==typeof a.model?a.model:void 0),m=(0,bZ.Nk)("string"==typeof a.modelProvider?a.modelProvider:void 0),n=(0,bZ.Nk)("string"==typeof a.key?a.key:c)??e??`${b}:${f??"session"}`;return{agentId:b,key:n,sessionId:e||void 0,updatedAt:f,ageMs:k,inputTokens:g,outputTokens:h,totalTokens:i??("number"==typeof g||"number"==typeof h?(g??0)+(h??0):void 0),model:l,modelProvider:m,cacheRead:j,kind:function(a,b){let c=(0,bZ.Nk)("string"==typeof a.kind?a.kind:"string"==typeof a.chatType?a.chatType:void 0);if(c)return c;let d=dE(a.deliveryContext)?a.deliveryContext:null,e=dE(a.origin)?a.origin:null;if("heartbeat"===(0,bZ.Nk)("string"==typeof d?.to?d.to:void 0)||"heartbeat"===(0,bZ.Nk)("string"==typeof e?.provider?e.provider:void 0))return"direct";let f=(0,bZ.Nk)(b);return f&&/:(direct|dm|private):/i.test(f)?"direct":f&&/:(group|channel|thread):/i.test(f)?"group":"task"}(a,n)}}function cG(a,b){let c=a[b];return"number"==typeof c&&Number.isFinite(c)?c:void 0}function cH(a){return[...new Set(a.filter(Boolean))].sort().join("\0")}function cI(a){let b=cq,c=cH(a);return dd(a).then(a=>(b===cq&&(ce={agentIdsKey:c,value:a,expiresAt:Date.now()+3e5}),a))}async function cJ(a,b,c){let d=l().join(a,c);try{var e,g;let a,h;await (0,f.access)(d);let i=(await (0,f.readFile)(d,"utf8")).trim();if(!i)return null;return{fileName:c,lines:i.split(/\r?\n/),source:(e=b,g=d,a=l().resolve(e),(h=l().resolve(g))===a||h.startsWith(`${a}${l().sep}`)?l().relative(a,h)||l().basename(h):h)}}catch{return null}}async function cK(a,b,c){let d=(0,x.Q4)(b,c??w.eY),e=[...new Set(["AGENTS.md","SOUL.md","IDENTITY.md","TOOLS.md","HEARTBEAT.md",...d.resources.map(a=>a.relativePath)])],f=await Promise.all(e.map(b=>cJ(a,a,b))),g=new Map,h=[];for(let a of f)a&&(g.set(a.fileName,a.lines),h.push(a.source));return{profileFiles:e,contextManifest:d,workspaceSections:g,workspaceSources:h}}async function cL(a=18789){return await cM("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}`},rpc:{ok:!0}}:null}async function cM(a,b,c){return await new Promise(d=>{let e=h().createConnection({host:a,port:b}),f=!1,g=a=>{f||(f=!0,e.removeAllListeners(),e.destroy(),d(a))};e.setTimeout(c),e.once("connect",()=>g(!0)),e.once("error",()=>g(!1)),e.once("timeout",()=>g(!1))})}async function cN(a={}){let b=cc,c=!!(b&&b.expiresAt>Date.now());if(!a.force&&c&&b)return a.includeHidden?b.full:b.visible;if(!a.force&&b)return cd||((cd=cs("interactive")).catch(()=>{}),cd.finally(()=>{cd=null}).catch(()=>{})),a.includeHidden?b.full:b.visible;if(a.force){cq+=1,cc=null,(cd=cs("refresh")).catch(()=>{});try{let b=await cd;return a.includeHidden?b.full:b.visible}finally{cd=null}}if(cd){let b=await cd;return a.includeHidden?b.full:b.visible}(cd=cs("interactive")).catch(()=>{});try{let b=await cd;return a.includeHidden?b.full:b.visible}finally{cd=null}}async function cO({profile:a="interactive",generation:b=cq}={}){let c=await cL(),d=!!c||await (0,r.Vg)();if(!d)return cP((0,m.jJ)("OpenClaw CLI is not installed on this machine.",{installed:!1,loaded:!1,rpcOk:!1}));try{var e;let d,f,g,h,i,j,k,m=await b3(),o=b0(m.workspaceRoot)??null,p=cy(),q=ct(),s=!cg||Date.now()-cg.capturedAt>6e4,t=!cl||Date.now()-cl.capturedAt>3e5;if("interactive"===a){let a=!c&&s,b=!c&&q;d=a?await cv(15e3):cy(),f=b?await cu(15e3):cy(),g=cy(),h=await cA(),i=cy(),j=t?await cw(15e3):cy(),k=cy(),q&&!b&&!co&&ct()&&(co=(async()=>{try{let a=await cu(15e3);"fulfilled"===a.status&&(ch={value:a.value,capturedAt:Date.now()})}catch{}finally{co=null}})()).catch(()=>{})}else f=await cu(45e3),d=await cv(45e3),g=cy(),h=await cA(),i=cy(),j=await cw(45e3),k=cy();let u=c?{value:c,reusedCachedValue:!1}:(e=d,"fulfilled"===e.status?(cg={value:e.value,capturedAt:Date.now()},{value:e.value,reusedCachedValue:!1}):cg&&Date.now()-cg.capturedAt<=6e4?{value:cg.value,reusedCachedValue:!0}:{value:void 0,reusedCachedValue:!1});if(!u.value){let a=await cL(cg?.value.gateway?.port??18789);a&&(cg={value:a,capturedAt:Date.now()},u={value:a,reusedCachedValue:!1})}let v=u.value,x="fulfilled"===p.status?(0,bZ.Nk)(p.value):void 0,y=cx(f,ch,a=>{ch=a}),z=cx(h,cj,a=>{cj=a}),A=await cB(z.value??[]),B=cx(g,ci,a=>{ci=a}),C=cx(i,ck,a=>{ck=a}),D=cx(j,cl,a=>{cl=a}),E=cx(A,cm,a=>{cm=a}),F=cx(k,cn,a=>{cn=a}),G=y.value,H=z.value??[],I=B.value??H.map(a=>({id:a.id,name:a.name||a.identity?.name||a.id,identityName:a.identity?.name,identityEmoji:a.identity?.emoji,identitySource:a.identity?"config":void 0,workspace:(0,bZ.Nk)(a.workspace)??"",agentDir:a.agentDir||l().join(b9,"agents",a.id,"agent"),model:a.model,isDefault:!!a.default})),J=D.value??function(a){let b=a.find(a=>a.default)?.model||a.find(a=>!!a.model)?.model||null;if(b)return{defaultModel:b,resolvedDefault:b}}(H),K={models:dZ([...H.map(a=>a.model??"").filter(Boolean),...(J?.allowed??[]).filter(Boolean),J?.resolvedDefault??"",J?.defaultModel??""]).map(a=>{var b;let c,d,e,f=(d=(c=a.trim().toLowerCase()).split("/",1)[0]||"",e=c.includes("/")?c.slice(d.length+1):c,"ollama"===d?{contextWindow:(b=e).includes("qwen3.5")?262144:(b.includes("qwen")||b.includes("llama3.2")||b.includes("llama3.3")||b.includes("deepseek-r1"),131072),local:!0}:"openai"===d||"openai-codex"===d?{contextWindow:e.startsWith("gpt-5")?272e3:null,local:!1}:"anthropic"===d?{contextWindow:2e5,local:!1}:"gemini"===d?{contextWindow:1e6,local:!1}:"deepseek"===d?{contextWindow:64e3,local:!1}:"mistral"===d?{contextWindow:128e3,local:!1}:"openrouter"===d||"xai"===d?{contextWindow:null,local:!1}:{contextWindow:null,local:null});return{key:a,name:a,input:"text",contextWindow:f.contextWindow,local:f.local,available:!0,tags:[],missing:!1}})},L=C.value?.models??K.models,M=E.value?.sessions??[],N=F.value??[],O="fulfilled"===f.status||"fulfilled"===g.status||"fulfilled"===h.status||"fulfilled"===i.status||"fulfilled"===j.status||"fulfilled"===A.status||"fulfilled"===k.status,P=I.map(a=>a.id),Q=df(P,m);Q.catch(()=>{});let R=a9(),S=await cC(),T="fulfilled"===S.status?S.value:(0,bF._E)({version:1,channels:[]}),U="interactive"===a?[]:await (0,bY.QT)(),V=(0,bY.fy)((0,bY.D4)([...U,...(0,bY.G7)(T)]),T),Y=new Map,Z=new Map,$=new Map,_=[],aa=[],ab=new Map((G?.heartbeat?.agents??[]).map(a=>[a.agentId,a])),ac=new Map(H.map(a=>[a.id,a])),ad=new Map;for(let a of M){if(!a.agentId)continue;let b=ad.get(a.agentId)??[];b.push(a),ad.set(a.agentId,b)}let ae=await R,af=(await Promise.all(M.map(a=>(0,ah.V9)(a,H,I,d$)))).flat(),ag=function(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)??aO(a,c);if(!e)continue;let f=d.get(e.id);"number"==typeof f&&(c[f]=function(a,b){let c="string"==typeof a.metadata.dispatchId?a.metadata.dispatchId.trim():"",d=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,W.ho)(b);return c.length>0?c:null}(a),e=aS(b.status)?b.status:a.status;return c===b.id&&d&&"string"==typeof a.metadata.dispatchStatus&&a.metadata.dispatchStatus===b.status&&a.status===e?a:{...a,status:e,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:d?a.metadata.mission:b.mission,routedMission:b.routedMission}}}(e,a))}return c}(af,ae),ai=d_(ag),aj=await aN(ai,ae,{buildObservedRuntime:a8,persistObservation:a6,reconcileRuntimeState:a7}),ak=d_([...aj,...ag]),al=I.filter(a=>!!a.workspace),am=Array.from(new Set(al.map(a=>a.workspace)));for(let a of(await Promise.all(am.map(async a=>{let b=await (0,bF.OL)(a);Z.set(a,b),$.set(a,await cK(a,b.template,b.rules??w.eY))})),await Promise.all(al.map(async a=>{let b=ac.get(a.id),c=await bE(a.agentDir),d=dh(a.workspace),e=ad.get(a.id)??[],f=Z.get(a.workspace)??await (0,bF.OL)(a.workspace);Z.set(a.workspace,f);let g=$.get(a.workspace)??await cK(a.workspace,f.template,f.rules??w.eY),h=f.agents.find(b=>b.id===a.id)??null,i=bx(b?.skills??[]),j=(0,bZ.Nk)(c.name)||b?.name||a.name||b?.identity?.name||a.identityName||a.id,k=h?.policy??(0,n.g0)((0,n.qF)({skills:i,id:a.id,name:j}),{fileAccess:b?.tools?.fs?.workspaceOnly?"workspace-only":"extended"}),l=dZ([...h?.toolIds??[],..."workspace-only"===k.fileAccess?["fs.workspaceOnly"]:[]]),m=a.model||b?.model||"unassigned",o=await di(a.workspace,{agentId:a.id,agentName:j,agentDir:a.agentDir,configuredSkills:i,configuredTools:l,template:f.template,rules:f.rules??w.eY,workspaceBootstrapProfile:g}),p=ak.filter(b=>b.agentId===a.id).sort(d0),q=dZ(p.flatMap(a=>a.toolNames??[])),r=p.map(a=>a.id),s=p[0],t=e.map(a=>a.updatedAt??0).sort((a,b)=>b-a).at(0)||null,u=ab.get(a.id),x=(0,bZ.yv)({rpcOk:!!v?.rpc?.ok,activeRuntime:s,heartbeatEnabled:!!u?.enabled,lastActiveAt:t}),y={id:a.id,name:j,identityName:(0,bZ.Nk)(c.name)||b?.identity?.name||a.identityName||void 0,workspaceId:d,workspacePath:a.workspace,agentDir:a.agentDir,modelId:m,isDefault:!!(a.isDefault||b?.default),status:x,sessionCount:e.length,lastActiveAt:t,currentAction:(0,bZ.iP)({runtime:s,heartbeatEvery:u?.every??null,status:x}),activeRuntimeIds:r,heartbeat:{enabled:!!u?.enabled,every:u?.every??null,everyMs:u?.everyMs??null},identity:{emoji:(0,bZ.Nk)(c.emoji)||b?.identity?.emoji||a.identityEmoji,theme:(0,bZ.Nk)(c.theme)||b?.identity?.theme,avatar:(0,bZ.Nk)(c.avatar)||b?.identity?.avatar,source:a.identitySource},profile:o,skills:i,tools:l,observedTools:q,policy:k},z=r.map(a=>({id:`edge:${y.id}:${a}:run`,sourceId:y.id,targetId:a,kind:"active-run",label:"runtime"})),A=[{id:`edge:${d}:${y.id}:contains`,sourceId:d,targetId:y.id,kind:"contains",label:"workspace member"},{id:`edge:${y.id}:${m}:model`,sourceId:y.id,targetId:m,kind:"uses-model",label:"model assignment"},...z];return{agent:y,workspacePath:a.workspace,workspaceId:d,primaryModel:m,sessionCount:e.length,activeRuntimeIds:r,relationships:A}})))){let b=function(a,b){var c;let d=dh(b),e=a.get(d);if(e)return e;let f={id:d,name:(c=b,(l().basename(c)||c).split(/[-_]/g).filter(Boolean).map(a=>a[0].toUpperCase()+a.slice(1)).join(" ")),slug:d8(l().basename(b)),path:b,kind:"workspace",agentIds:[],modelIds:[],activeRuntimeIds:[],totalSessions:0,health:"standby",bootstrap:{template:null,sourceMode:null,agentTemplate:null,coreFiles:[],optionalFiles:[],folders:[],projectShell:[],localSkillIds:[]},capabilities:{skills:[],tools:[],workspaceOnlyAgentCount:0},channels:[]};return a.set(d,f),f}(Y,a.workspacePath);b.agentIds.push(a.agent.id),b.modelIds.push(a.primaryModel),b.activeRuntimeIds.push(...a.activeRuntimeIds),b.totalSessions+=a.sessionCount,_.push(a.agent),aa.push(...a.relationships)}let an=new Map;for(let a of _){let b=an.get(a.workspaceId)??[];b.push(a),an.set(a.workspaceId,b)}let ao=await Promise.all(Array.from(Y.values()).map(async a=>{let b=an.get(a.id)??[],c=Z.get(a.path)??null,d=await dj(a.path,b,c??void 0);return{...a,name:c?.name??a.name,modelIds:(0,bZ.Am)(a.modelIds),activeRuntimeIds:(0,bZ.Am)(a.activeRuntimeIds),health:(0,bZ.OZ)(a.agentIds,_),bootstrap:d.bootstrap,capabilities:d.capabilities}})),ap=new Set(ao.filter(a=>Z.get(a.path)?.hidden).map(a=>a.id)),aq=_.filter(a=>!ap.has(a.workspaceId)),ar=new Set(_.filter(a=>ap.has(a.workspaceId)).map(a=>a.id)),as=ak.filter(a=>!(a.agentId&&ar.has(a.agentId))&&!(a.workspaceId&&ap.has(a.workspaceId))),at=new Set(ak.filter(a=>a.agentId&&ar.has(a.agentId)||a.workspaceId&&ap.has(a.workspaceId)).map(a=>a.id)),au=new Set([...ap,...ar,...at]),av=aa.filter(a=>!au.has(a.sourceId)&&!au.has(a.targetId)),aw=ao.filter(a=>!ap.has(a.id)),ax=a=>{let b=new Map;for(let c of a)b.set(c.modelId,(b.get(c.modelId)??0)+1);return L.map(a=>({id:a.key,name:a.name,provider:a.key.split("/")[0]||"unknown",input:a.input,contextWindow:a.contextWindow,local:a.local,available:a.available,missing:a.missing,tags:a.tags,usageCount:b.get(a.key)??0}))},ay=(0,bZ.QL)(L,J),az=G?.securityAudit?.findings?.filter(a=>"warn"===a.severity).map(a=>a.title||a.detail||"Security warning")??[],aA=(0,bZ.Nk)(G?.runtimeVersion||G?.overview?.version||G?.version)??await (0,r.YP)()??void 0,aB=(0,bZ.Nk)(G?.update?.registry?.latestVersion??void 0),aC=(0,bZ.nn)(G?.update?.registry?.error??void 0),aD=aA&&aB?(0,bZ.QK)(aB,aA)>0:void 0,aE=(0,bZ.mB)({currentVersion:aA,latestVersion:aB,updateError:aC,legacyInfo:G?.overview?.update}),aF=await Q,aG={gatewayStatus:d,status:f,agents:g,agentConfig:h,models:i,modelStatus:j,sessions:A,presence:k},aH={installed:!0,loaded:!!v?.service?.loaded,rpcOk:!!v?.rpc?.ok,health:(0,bZ.YO)({rpcOk:v?.rpc?.ok,warningCount:az.length,runtimeIssueCount:aF.issues.length,hasOpenClawSignal:O}),version:aA,latestVersion:aB,updateAvailable:aD,updateError:aC,updateRoot:(0,bZ.Nk)(G?.update?.root??void 0),updateInstallKind:(0,bZ.Nk)(G?.update?.installKind??void 0),updatePackageManager:(0,bZ.Nk)(G?.update?.packageManager??void 0),workspaceRoot:d2(o),configuredWorkspaceRoot:o??null,dashboardUrl:`http://127.0.0.1:${v?.gateway?.port??18789}/`,gatewayUrl:v?.gateway?.probeUrl||"ws://127.0.0.1:18789",configuredGatewayUrl:x??null,bindMode:v?.gateway?.bindMode,port:v?.gateway?.port,updateChannel:G?.updateChannel||"stable",updateInfo:aE,serviceLabel:v?.service?.label,modelReadiness:ay,runtime:aF,securityWarnings:az,issues:[...(0,bZ.Lp)(Object.fromEntries(Object.entries(aG).filter(([,a])=>!cz(a)))),..."rejected"===d.status&&u.reusedCachedValue?["gatewayStatus: Reusing the last successful gateway status after a transient OpenClaw check failure."]:[],...[cD("status",y.reusedCachedValue),cD("agents",B.reusedCachedValue),cD("agentConfig",z.reusedCachedValue),cD("models",C.reusedCachedValue),cD("modelStatus",D.reusedCachedValue),cD("sessions",E.reusedCachedValue),cD("presence",F.reusedCachedValue)].filter(a=>!!a),...aF.issues]},aI=X(ak,_),aJ=X(as,aq),aK={generatedAt:new Date().toISOString(),revision:b,mode:"live",diagnostics:aH,channelAccounts:V,channelRegistry:T,...(cz(S),{}),presence:N.map(a=>({host:a.host,ip:a.ip,version:a.version,platform:a.platform,deviceFamily:a.deviceFamily,mode:a.mode,reason:a.reason,text:a.text,ts:a.ts})),missionPresets:["Audit the selected workspace and generate a concrete first task batch.","Plan a multi-agent delivery mission for the current product goal.","Review active runtimes, identify blockers, and propose the next handoff."]};return{full:{...aK,workspaces:ao,agents:_,models:ax(_),runtimes:ak,tasks:aI,relationships:aa},visible:{...aK,workspaces:aw,agents:aq,models:ax(aq),runtimes:as,tasks:aJ,relationships:av}}}catch(a){return cP((0,m.jJ)(a instanceof Error?a.message:"Unknown OpenClaw error.",{installed:d,loaded:!!c?.service?.loaded,rpcOk:!!c?.rpc?.ok}))}}function cP(a){return{visible:a,full:a}}async function cQ(a){let b=await dd(a?[a]:[],{touch:!0});if(b.issues.length>0)throw cc=null,Error(`OpenClaw runtime state is not writable. AgentOS needs write access to ${b.stateRoot} and the agent session store before missions can run.`)}async function cR(a={}){await cQ(a.agentId??null),cc=null}async function cS(a={}){var b,c,d;let e=(b=await cN({force:!0,includeHidden:!0}),(c=a.agentId)&&b.agents.some(a=>a.id===c)?c:b.agents.find(a=>a.isDefault)?.id||b.agents[0]?.id||null);if(!e)return{status:"not-run",checkedAt:null,agentId:null,runId:null,summary:null,error:"AgentOS could not find an OpenClaw agent for the runtime smoke test."};let f=(d=await b3(),d.runtimePreflight?.smokeTests?.[e]??null);if(!a.force&&function(a){if(!a||"passed"!==a.status)return!1;let b=Date.parse(a.checkedAt);return Number.isFinite(b)&&Date.now()-b<=432e5}(f))return b5(e,f);await cQ(e);try{let a=await (0,r.VP)(["agent","--agent",e,"--message","AgentOS runtime smoke test. Reply with a brief READY status.","--thinking","off","--timeout","45","--json"],{timeoutMs:5e4}),b={status:"passed",checkedAt:new Date().toISOString(),agentId:e,runId:a.runId??null,summary:a.summary||aA(a)[0]?.text||"AgentOS verified a real OpenClaw turn.",error:null};return await b6(b),cc=null,b}catch(b){let a={status:"failed",checkedAt:new Date().toISOString(),agentId:e,runId:null,summary:null,error:s(b)||"OpenClaw runtime smoke test failed."};return await b6(a),cc=null,a}}async function cT(a){return bp(a,{getMissionControlSnapshot:cN,resolveAgentForMission:d1,invalidateMissionControlCaches:cr})}async function cU(a,b,c){return bq(a,b,c,{getMissionControlSnapshot:cN,resolveAgentForMission:d1,invalidateMissionControlCaches:cr})}async function cV(a){let b=await cN({includeHidden:!0}),c=b.runtimes.find(b=>b.id===a);return(c||(c=(b=await cN({force:!0,includeHidden:!0})).runtimes.find(b=>b.id===a)),c)?(0,ah.pY)(c,b):{runtimeId:a,status:"missing",finalText:null,finalTimestamp:null,stopReason:null,errorMessage:"Runtime was not found in the current OpenClaw snapshot.",items:[],createdFiles:[],warnings:[],warningSummary:null}}async function cW(a,b={}){let c=await cN({includeHidden:!0}),d=c.tasks.find(b=>b.id===a);if(!d&&b.dispatchId&&(d=c.tasks.find(a=>a.dispatchId===b.dispatchId)),!d&&((d=(c=await cN({force:!0,includeHidden:!0})).tasks.find(b=>b.id===a))||!b.dispatchId||(d=c.tasks.find(a=>a.dispatchId===b.dispatchId))),!d){let a="string"==typeof b.dispatchId?b.dispatchId.trim():"";if(a){let b=await ba(a);if(b)return bi(b,c)}throw Error("Task was not found in the current OpenClaw snapshot.")}let e=d.dispatchId?await ba(d.dispatchId):null;return bh(d,c,e)}async function cX(a){let b=d8(a.id.trim());if(!b)throw Error("Agent id is required.");let c=await cN({includeHidden:!0}),d=(0,bZ.Nk)(a.workspacePath)??c.workspaces.find(b=>b.id===a.workspaceId)?.path;d||(c=await cN({force:!0,includeHidden:!0}),d=(0,bZ.Nk)(a.workspacePath)??c.workspaces.find(b=>b.id===a.workspaceId)?.path);let e=a.workspaceId||(d?dh(d):null);if(function(a,b,c){let d=a.agents.find(a=>a.id===b);if(!d)return;let e=a.workspaces.find(a=>a.id===d.workspaceId)?.name??l().basename(d.workspacePath);if(d.workspaceId===c)throw Error(`Agent id "${b}" already exists in workspace "${e}".`);throw Error(`Agent id "${b}" is already used by workspace "${e}". Choose a different id.`)}(c,b,e),!d||!e)throw Error("Workspace was not found for this agent.");let f=(0,n.g0)(a.policy?.preset??n.iN,a.policy),g=(0,n.Cf)(f.preset),h=(0,n._Y)(g.skillIds),i=(0,n.X0)(g.tools),j=a.bootstrapFiles??[],k=new Map(j.map(a=>[a.path,a.content])).get("IDENTITY.md")??null,m=k?(0,q.kS)(k):null,s=(0,bZ.Nk)(m?.name)??(0,bZ.Nk)(a.name)??g.defaultName,t=(0,bZ.Nk)(m?.emoji)??(0,bZ.Nk)(a.emoji)??g.defaultEmoji,u=(0,bZ.Nk)(m?.theme)??(0,bZ.Nk)(a.theme)??g.defaultTheme,v=(0,bZ.Nk)(m?.avatar)??(0,bZ.Nk)(a.avatar),w=p(o(f.preset,a.heartbeat)),x=c.agents.find(a=>a.workspaceId===e&&"setup"===a.policy.preset)?.id??null,y=bu(d,b),z=["agents","add",b,"--workspace",d,"--agent-dir",y,"--non-interactive","--json"];a.modelId?.trim()&&z.push("--model",a.modelId.trim()),await (0,r.zB)(z);let A=await bL({workspacePath:d,agentId:b,agentName:s,policy:f,setupAgentId:x,snapshot:c});for(let a of h)await bM(d,a);let B=await bB(b,d,{name:s,model:(0,bZ.Nk)(a.modelId),heartbeat:w,skills:dZ([...h,A]),tools:"workspace-only"===f.fileAccess?{fs:{workspaceOnly:!0}}:null},c);await bC(b,d,{name:s||B.name,emoji:t,theme:u,avatar:v,content:k??void 0},y);let C=j.filter(a=>"IDENTITY.md"!==a.path);return C.length>0&&await bD(b,d,C,y),await dB(d,{id:b,name:s,role:(0,n._P)(f.preset),emoji:t,theme:u,enabled:!0,skillId:h[0]??A,toolIds:i,modelId:(0,bZ.Nk)(a.modelId),isPrimary:!1,policy:f,channelIds:a.channelIds??[]}),cc=null,await dQ(d),{agentId:b,workspaceId:e}}async function cY(a){var b;let c=a.id.trim();if(!c)throw Error("Agent id is required.");let d=await cN({includeHidden:!0}),e=d.agents.find(a=>a.id===c);if(e||(e=(d=await cN({force:!0,includeHidden:!0})).agents.find(a=>a.id===c)),!e)throw Error("Agent was not found.");let f=(0,bZ.Nk)(a.workspacePath)??d.workspaces.find(b=>b.id===(a.workspaceId||e.workspaceId))?.path??e.workspacePath,g=a.workspaceId||(f?dh(f):e.workspaceId);if(!f||!g)throw Error("Workspace was not found for this agent.");let h=(0,n.g0)(a.policy?.preset??e.policy.preset,a.policy??e.policy),i=(0,n.Cf)(h.preset),j=(0,n._Y)(i.skillIds),k=(0,n.X0)(i.tools),l=(0,bZ.Nk)(e.name),m=(0,bZ.Nk)(e.identity.emoji),q=(0,bZ.Nk)(e.identity.theme),r=p(o(h.preset,a.heartbeat??{enabled:(b=e.heartbeat).enabled,every:b.every??void 0})),s=d.agents.find(a=>a.workspaceId===g&&"setup"===a.policy.preset&&a.id!==c)?.id??null,t=void 0!==a.modelId?(0,bZ.Nk)(a.modelId):"unassigned"===e.modelId?void 0:e.modelId;if(void 0!==a.modelId&&void 0===a.name&&void 0===a.emoji&&void 0===a.theme&&void 0===a.avatar&&void 0===a.policy&&void 0===a.heartbeat&&void 0===a.channelIds&&void 0===a.skills&&void 0===a.tools)return await bB(c,f,{model:t},d),await dB(f,{id:c,name:l??e.name??c,emoji:m,theme:q,enabled:!0,modelId:t,isPrimary:e.isDefault,policy:h}),cc=null,{agentId:c,workspaceId:g};let u=await bL({workspacePath:f,agentId:c,agentName:(0,bZ.Nk)(a.name)??l??c,policy:h,setupAgentId:s,snapshot:d}),v=bx(e.skills),w=by(e.tools),x=h.preset!==e.policy.preset||0===v.length,y=h.preset!==e.policy.preset||0===w.length,z=void 0===a.skills?x?j:v:(0,n._Y)(bx(a.skills));for(let a of z)await bM(f,a);let A=await bB(c,f,{name:(0,bZ.Nk)(a.name),model:t,heartbeat:r,skills:dZ([...z,u]),tools:"workspace-only"===h.fileAccess?{fs:{workspaceOnly:!0}}:null},d),B=void 0===a.tools?y?k:void 0:by(a.tools);return await bC(c,f,{name:(0,bZ.Nk)(a.name)??A.name,emoji:(0,bZ.Nk)(a.emoji)??m,theme:(0,bZ.Nk)(a.theme)??q,avatar:(0,bZ.Nk)(a.avatar)},e.agentDir??bu(f,c)),await dB(f,{id:c,name:(0,bZ.Nk)(a.name)??l??A.name??c,emoji:(0,bZ.Nk)(a.emoji)??m,theme:(0,bZ.Nk)(a.theme)??q,enabled:!0,modelId:t,isPrimary:e.isDefault,policy:h,channelIds:a.channelIds,skillId:z[0]??u,toolIds:B}),cc=null,await dQ(f),{agentId:c,workspaceId:g}}async function cZ(a){let b=a.agentId.trim();if(!b)throw Error("Agent id is required.");let c=await cN({includeHidden:!0}),d=c.agents.find(a=>a.id===b);if(d||(d=(c=await cN({force:!0,includeHidden:!0})).agents.find(a=>a.id===b)),!d)throw Error("Agent was not found.");let e=c.workspaces.find(a=>a.id===d.workspaceId)??null,g=c.runtimes.filter(a=>a.agentId===d.id).length;await (0,r.zB)(["agents","delete",d.id,"--force","--json"]);try{let a=await bz(c),b=a.filter(a=>a.id!==d.id);b.length!==a.length&&await bA(b)}catch{}if(e){await dC(e.path,d.id);try{await (0,f.rm)(l().join(e.path,"skills",bv(d.id)),{recursive:!0,force:!0})}catch{}cc=null,await dQ(e.path)}return cp=new Map,{agentId:d.id,workspaceId:d.workspaceId,workspacePath:d.workspacePath,deletedRuntimeCount:g}}async function c$(a,b){let c=d7(a.channelId);if(!c)throw Error("Channel id is required.");return await (0,br.rh)(b,"workspace-channel.registry-upsert",()=>dS(b=>{let d=b.channels.find(a=>a.id===c)??{id:c,type:a.type,name:a.name.trim()||c,primaryAgentId:(0,bZ.Nk)(a.primaryAgentId)??null,workspaces:[]},e=a.workspaceId.trim(),f=a.workspacePath.trim(),g=d.workspaces.find(a=>a.workspaceId===e)??{workspaceId:e,workspacePath:f,agentIds:[],groupAssignments:[]},h=dZ([...g.agentIds,...(a.agentIds??[]).map(a=>a.trim()).filter(Boolean)]),i=(0,bF.qc)([...g.groupAssignments,...(a.groupAssignments??[]).filter(a=>!!a.chatId)]),j={...g,workspacePath:f,agentIds:h,groupAssignments:i},k=d.workspaces.filter(a=>a.workspaceId!==e);k.push(j);let l=(0,bZ.Nk)(a.primaryAgentId)??d.primaryAgentId;b.channels=[...b.channels.filter(a=>a.id!==c),{...d,id:c,type:a.type,name:a.name.trim()||d.name||c,primaryAgentId:l||j.agentIds[0]||j.groupAssignments.find(a=>a.agentId)?.agentId||null,workspaces:k}]},{},b)),cc=null,(0,bY.VW)()}async function c_(a,b){let c=d7(a.channelId);if(!c)throw Error("Channel id is required.");return await (0,br.rh)(b,"channel-registry.disconnect",()=>dS(b=>{b.channels=b.channels.map(b=>{if(b.id!==c)return b;let d=b.workspaces.filter(b=>b.workspaceId!==a.workspaceId),e=dZ([...d.flatMap(a=>a.agentIds),...d.flatMap(a=>a.groupAssignments.filter(a=>!1!==a.enabled&&a.agentId).map(a=>a.agentId))]);return{...b,primaryAgentId:b.primaryAgentId&&e.includes(b.primaryAgentId)?b.primaryAgentId:e[0]??null,workspaces:d}}).filter(a=>a.workspaces.length>0||a.primaryAgentId)},{},b)),cc=null,(0,bY.VW)()}async function c0(a,b){let c=d7(a.channelId);if(!c)throw Error("Channel id is required.");let d=(await (0,br.rh)(b,"channel-registry.read-before-delete",()=>(0,bY.vg)())).channels.find(a=>a.id===c);if(!d)throw Error("Channel was not found.");let e=dZ(d.workspaces.flatMap(a=>a.groupAssignments.filter(a=>!!a.chatId).map(a=>a.chatId))),f=dZ(d.workspaces.map(a=>a.workspacePath));return dl(d.type)&&"internal"!==d.type&&await (0,br.rh)(b,"channel.delete-openclaw-remove",()=>(0,r.zB)(["channels","remove","--channel",d.type,"--account",c,"--delete"],{timeoutMs:6e4})),await (0,br.rh)(b,"channel.delete-registry-sync",()=>dS(a=>{a.channels=a.channels.filter(a=>a.id!==c)},{removedAccountIds:[c],removedGroupIds:e},b)),await (0,br.rh)(b,"channel.delete-project-cleanup",()=>Promise.all(f.map(a=>dD(a,c,b)))),cc=null,(0,br.rh)(b,"channel.delete-read-final-registry",()=>(0,bY.VW)())}async function c1(a,b){let c=d7(a.channelId);if(!c)throw Error("Channel id is required.");return await (0,br.rh)(b,"channel.primary-update",()=>dS(b=>{let d=b.channels.find(a=>a.id===c);if(!d)throw Error("Channel was not found.");d.primaryAgentId=(0,bZ.Nk)(a.primaryAgentId)??null},{},b)),cc=null,(0,bY.VW)()}async function c2(a,b){let c=d7(a.channelId);if(!c)throw Error("Channel id is required.");let d=[];return await (0,br.rh)(b,"channel.groups-update",()=>dS(b=>{let e=b.channels.find(a=>a.id===c);if(!e)throw Error("Channel was not found.");let f=e.workspaces.find(b=>b.workspaceId===a.workspaceId);if(!f)throw Error("Workspace binding was not found for this channel.");let g=new Set(f.groupAssignments.filter(a=>!1!==a.enabled&&!!a.chatId).map(a=>a.chatId));f.groupAssignments=(0,bF.qc)(a.groupAssignments.map(a=>({chatId:a.chatId.trim(),agentId:(0,bZ.Nk)(a.agentId)??null,title:(0,bZ.Nk)(a.title)??null,enabled:!1!==a.enabled}))),f.agentIds=dZ([...f.agentIds,...f.groupAssignments.filter(a=>!1!==a.enabled&&a.agentId).map(a=>a.agentId)]);let h=new Set(f.groupAssignments.filter(a=>!1!==a.enabled&&!!a.chatId).map(a=>a.chatId));for(let a of g)h.has(a)||d.push(a)},{removedGroupIds:d},b)),cc=null,(0,bY.VW)()}async function c3(a,b){let c=d7(a.channelId),d=d8(a.agentId.trim());if(!c||!d)throw Error("Channel id and agent id are required.");return await (0,br.rh)(b,"channel.bind-agent",()=>dS(b=>{let e=b.channels.find(a=>a.id===c);if(!e)throw Error("Channel was not found.");let f=e.workspaces.find(b=>b.workspaceId===a.workspaceId)??{workspaceId:a.workspaceId,workspacePath:a.workspacePath,agentIds:[],groupAssignments:[]};f.agentIds=dZ([...f.agentIds,d]),f.workspacePath=a.workspacePath,e.workspaces=[...e.workspaces.filter(b=>b.workspaceId!==a.workspaceId),f],e.primaryAgentId||(e.primaryAgentId=d)},{},b)),cc=null,(0,bY.VW)()}async function c4(a,b){let c=d7(a.channelId),d=d8(a.agentId.trim());if(!c||!d)throw Error("Channel id and agent id are required.");return await (0,br.rh)(b,"channel.unbind-agent",()=>dS(b=>{let e=b.channels.find(a=>a.id===c);if(!e)throw Error("Channel was not found.");let f=e.workspaces.find(b=>b.workspaceId===a.workspaceId);if(f){if(f.agentIds=f.agentIds.filter(a=>a!==d),f.groupAssignments=f.groupAssignments.filter(a=>a.agentId!==d),e.primaryAgentId===d){let a=f.agentIds[0]??f.groupAssignments.find(a=>!1!==a.enabled&&a.agentId)?.agentId??e.workspaces.flatMap(a=>a.agentIds).find(a=>a!==d)??e.workspaces.flatMap(a=>a.groupAssignments).find(a=>!1!==a.enabled&&a.agentId&&a.agentId!==d)?.agentId??null;e.primaryAgentId=a}e.workspaces=[...e.workspaces.filter(b=>b.workspaceId!==a.workspaceId),{...f,agentIds:f.agentIds,groupAssignments:f.groupAssignments}]}},{},b)),cc=null,(0,bY.VW)()}async function c5(a,b={}){var c,d,e;let f,g,h,i=function(a){let b=a.name.trim();if(!b)throw Error("Workspace name is required.");let c=C(b);if(!c)throw Error("Workspace name must include letters or numbers.");let d=a.template??"software",e=a.teamPreset??"core",f=a.sourceMode??"empty",g=a.modelProfile??"balanced",h={...w.eY,...a.rules??{}},i=(a.agents?.length?a.agents:(0,w.P0)(d,e,b)).map(a=>({id:C(a.id)||"agent",role:a.role.trim()||V(a.id),name:B(a.name)??(a.isPrimary?(0,w.sg)(b,a.role,V(a.id)):V(a.id)),enabled:!1!==a.enabled,emoji:B(a.emoji)??void 0,theme:B(a.theme)??void 0,skillId:B(a.skillId)??void 0,modelId:B(a.modelId)??void 0,isPrimary:!!a.isPrimary,heartbeat:o(a.policy?.preset??(0,n.qF)({skills:a.skillId?[a.skillId]:[],id:a.id,name:a.name}),a.heartbeat),policy:(0,n.g0)(a.policy?.preset??(0,n.qF)({skills:a.skillId?[a.skillId]:[],id:a.id,name:a.name}),{...a.policy,fileAccess:h.workspaceOnly?a.policy?.fileAccess??"workspace-only":"extended"})}));if(!i.some(a=>a.enabled&&a.isPrimary)){let a=i.find(a=>a.enabled);a&&(a.isPrimary=!0)}let j=function(a){let b=new Set,c=new Set;for(let d of a){if(b.has(d)){c.add(d);continue}b.add(d)}return Array.from(c).sort((a,b)=>a.localeCompare(b))}(i.filter(a=>a.enabled).map(a=>a.id));if(j.length>0)throw Error(`Enabled agents must have unique ids. Conflicts: ${j.join(", ")}.`);return{name:b,slug:c,brief:B(a.brief)??void 0,directory:B(a.directory)??void 0,modelId:B(a.modelId)??void 0,repoUrl:B(a.repoUrl)??void 0,existingPath:B(a.existingPath)??void 0,sourceMode:f,template:d,teamPreset:e,modelProfile:g,rules:h,docOverrides:(0,x.Iy)(a.docOverrides),agents:i,contextSources:(a.contextSources??[]).flatMap(a=>{var b;if(!a||"object"!=typeof a)return[];let c="prompt"===(b=a.kind)||"website"===b||"repo"===b||"folder"===b?a.kind:"prompt",d=B(a.label)??c,e=B(a.summary)??d,f="error"===a.status?"error":"ready",g=B(a.createdAt)??new Date().toISOString();if(!d||!e)return[];let h={id:B(a.id)??`${c}-${C(d)||"context"}`,kind:c,label:d,summary:e,details:Array.isArray(a.details)?a.details.map(a=>B(a)??"").filter(a=>!!a):[],status:f,createdAt:g},i="number"==typeof a.confidence?a.confidence:void 0,j=B(a.error)??void 0,k=B(a.url)??void 0;return void 0!==i&&(h.confidence=i),void 0!==j&&(h.error=j),void 0!==k&&(h.url=k),[h]})}}(a),j=i.agents.filter(a=>a.enabled),k=(0,u.X6)({template:(0,u.fV)({sourceMode:i.sourceMode,agentCount:j.length,kickoffMission:i.rules.kickoffMission}),onProgress:b.onProgress});if(0===j.length)throw Error("Enable at least one agent for the workspace.");await k.startStep("validate","Resolving workspace settings and reserving the target directory."),await k.addActivity("validate",`Validated workspace name "${i.name}".`);let m=await function(a,b){if("existing"===a.sourceMode){let b=a.existingPath||a.directory;if(!b)throw Error("Choose an existing folder for this workspace.");return l().isAbsolute(b)?b:l().resolve(b)}return a.directory?l().isAbsolute(a.directory)?a.directory:l().join(b,a.directory):l().join(b,a.slug)}(i,d2(await b2()));await k.updateStep("validate",{percent:38,detail:`Reserved target directory at ${m}.`}),await k.addActivity("validate",`Reserved target directory ${m}.`,"done");let p=await cN({force:!0,includeHidden:!0});await k.updateStep("validate",{percent:72,detail:"Checking current OpenClaw snapshot and agent ids."}),function(a,b,c){let d=c.map(a=>bJ(b,a.id)),e=function(a){let b=new Set,c=new Set;for(let d of a){if(b.has(d)){c.add(d);continue}b.add(d)}return Array.from(c).sort((a,b)=>a.localeCompare(b))}(d);if(e.length>0)throw Error(`Workspace bootstrap would create duplicate agent ids: ${e.join(", ")}.`);for(let b of d){let c=a.agents.find(a=>a.id===b);if(c)throw Error(`Workspace bootstrap would create agent id "${b}", but it already exists in workspace "${function(a,b){return a.workspaces.find(a=>a.id===b.workspaceId)?.name??l().basename(b.workspacePath)}(a,c)}". Rename the workspace or adjust the agent ids.`)}}(p,i.slug,j),await k.completeStep("validate",`Workspace input and ${j.length} agent configuration${1===j.length?"":"s"} are ready.`),await k.startStep("source",(c=i.sourceMode,"clone"===c?`Cloning the source repository into ${m}.`:"existing"===c?`Preparing the existing workspace folder at ${m}.`:`Creating a fresh workspace folder at ${m}.`)),await k.addActivity("source",(d=i.sourceMode,"clone"===d?i.repoUrl?`Cloning ${i.repoUrl}.`:"Cloning the requested repository.":"existing"===d?i.existingPath?`Attaching ${i.existingPath}.`:"Attaching the requested folder.":"Preparing an empty workspace scaffold."),"active"),await R({targetDir:m,sourceMode:i.sourceMode,repoUrl:i.repoUrl}),await k.completeStep("source",(e=i.sourceMode,"clone"===e?`Repository content is available at ${m}.`:"existing"===e?`Existing folder linked and ready at ${m}.`:`Fresh workspace folder created at ${m}.`)),await k.startStep("scaffold","Writing the initial workspace scaffold and local metadata."),await k.addActivity("scaffold","Generating workspace docs, memory, and configuration files."),await S(m,{name:i.name,brief:i.brief,template:i.template,teamPreset:i.teamPreset,modelProfile:i.modelProfile,rules:i.rules,docOverrides:i.docOverrides,sourceMode:i.sourceMode,agents:j,contextSources:i.contextSources}),await k.completeStep("scaffold","Workspace files and starter docs are in place.");let q=[];for(let a of(await k.startStep("agents",1===j.length?"Provisioning the first workspace agent.":`Provisioning ${j.length} workspace agents.`),j)){let b=q.length,c=b+1;await k.updateStep("agents",{percent:Math.round(b/j.length*100),detail:`Creating agent ${c} of ${j.length}: ${a.name}.`}),await k.addActivity("agents",`Creating ${a.name} (${a.role}).`);let d=await bK({workspacePath:m,workspaceSlug:i.slug,workspaceModelId:i.modelId,agent:a});q.push(d),await k.addActivity("agents",`Created ${a.name} as ${d}.`,"done"),await k.updateStep("agents",{percent:Math.round(q.length/j.length*100),detail:`${q.length} of ${j.length} agent${1===j.length?"":"s"} ready.`})}await k.completeStep("agents",`${q.length} agent${1===q.length?"":"s"} linked to the workspace.`),cc=null,await dQ(m);let r=q.find(a=>j.some(b=>b.isPrimary&&bJ(i.slug,b.id)===a))??q[0];if(i.rules.kickoffMission){await k.startStep("kickoff",`Dispatching the kickoff mission to ${r}.`),await k.addActivity("kickoff",`Selected ${r} as the primary agent.`);try{let a=await dg({agentId:r,brief:i.brief,modelProfile:i.modelProfile,template:i.template,rules:i.rules},{onProgress:async({message:a,percent:b})=>{await k.updateStep("kickoff",{percent:b,detail:a}),await k.addActivity("kickoff",a,b>=100?"done":"active")}});f=a.runId,g=a.status,await k.completeStep("kickoff",`Kickoff mission finished with status ${g||"unknown"}.`)}catch(a){h=a instanceof Error?a.message:"Kickoff mission could not be started.",await k.addActivity("kickoff",h,"error"),await k.failStep("kickoff",h)}}else await k.startStep("kickoff","Finalizing workspace bootstrap."),await k.addActivity("kickoff","Kickoff mission is disabled for this workspace.","done"),await k.completeStep("kickoff","Workspace bootstrap finished without kickoff.");return cc=null,cp=new Map,{workspaceId:dh(m),workspacePath:m,agentIds:q,primaryAgentId:r,kickoffRunId:f,kickoffStatus:g,kickoffError:h}}async function c6(a){let b=a.workspaceId.trim();if(!b)throw Error("Workspace id is required.");if(a.plan){let c=a.baseline??await dk(b);return c7({id:c.workspaceId,name:c.name,slug:l().basename(c.workspacePath),path:c.workspacePath,kind:"workspace",agentIds:[],modelIds:[],activeRuntimeIds:[],totalSessions:0,health:"standby",bootstrap:{template:null,sourceMode:null,agentTemplate:null,coreFiles:[],optionalFiles:[],folders:[],projectShell:[],localSkillIds:[]},capabilities:{skills:[],tools:[],workspaceOnlyAgentCount:0},channels:[]},a.plan,{name:a.name,directory:a.directory,baseline:c})}let c=await cN({force:!0}),d=c.workspaces.find(a=>a.id===b);if(!d)throw Error("Workspace was not found.");let e=d4(d.path,a.name,a.directory);if(e!==d.path){await d3(e,d.path);try{await (0,f.rename)(d.path,e)}catch(a){throw Error(a instanceof Error?`Unable to move workspace directory. ${a.message}`:"Unable to move workspace directory.")}let a=(await bz(c)).map(a=>a.workspace===d.path?{...a,workspace:e,agentDir:"string"==typeof a.agentDir&&a.agentDir.startsWith(`${d.path}${l().sep}`)?l().join(e,l().relative(d.path,a.agentDir)):a.agentDir}:a);await bA(a)}return cc=null,cp=new Map,{workspaceId:dh(e),previousWorkspaceId:d.id,workspacePath:e}}async function c7(a,b,c){var d,e;let g=(0,bZ.Nk)(c.name)??(0,bZ.Nk)(b.workspace.name)??a.name,h=(0,bZ.Nk)(c.directory),i=(0,bZ.Nk)(c.baseline.directory)??a.path,j=(0,bZ.Nk)(c.baseline.name)??a.name,k=(0,bZ.Nk)(c.baseline.brief)??"",m=(0,bZ.Nk)(b.company.mission)??(0,bZ.Nk)(b.product.offer)??"",n=(0,x.Iy)(b.workspace.docOverrides),o=(0,x.Iy)(c.baseline.docOverrides),p=new Map(n.map(a=>[a.path,a.content])),q=new Map(o.map(a=>[a.path,a.content])),r=b.team.persistentAgents.filter(a=>a.enabled),s=c.baseline.agents.filter(a=>a.enabled),t=g.trim()!==j.trim(),u=t||m!==k||b.workspace.template!==c.baseline.template||b.workspace.sourceMode!==c.baseline.sourceMode||(d=b.workspace.rules,e=c.baseline.rules,d.workspaceOnly!==e.workspaceOnly||d.generateStarterDocs!==e.generateStarterDocs||d.generateMemory!==e.generateMemory||d.kickoffMission!==e.kickoffMission)||!bS(r,s),v=h&&h!==i?d4(a.path,void 0,h):t?d4(a.path,g,void 0):a.path,y=v!==a.path,z=y?await cN({force:!0,includeHidden:!0}):null;if(y){await d3(v,a.path);try{await (0,f.rename)(a.path,v)}catch(a){throw Error(a instanceof Error?`Unable to move workspace directory. ${a.message}`:"Unable to move workspace directory.")}let b=(await bz(z??void 0)).map(b=>b.workspace===a.path?{...b,workspace:v,agentDir:"string"==typeof b.agentDir&&b.agentDir.startsWith(`${a.path}${l().sep}`)?l().join(v,l().relative(a.path,b.agentDir)):b.agentDir}:b);await bA(b)}let A=l().join(v,".openclaw","project.json"),B=new Date().toISOString(),C=!1,D=null;try{let a=await (0,f.readFile)(A,"utf8"),b=JSON.parse(a);dE(b)&&(B="string"==typeof b.createdAt?b.createdAt:B,C=!0===b.hidden,D="string"==typeof b.systemTag?b.systemTag:null)}catch{}let E=b.team.persistentAgents.map(a=>({id:a.id,name:a.name,role:a.role,enabled:a.enabled,emoji:(0,bZ.Nk)(a.emoji)??null,theme:(0,bZ.Nk)(a.theme)??null,isPrimary:!!a.isPrimary,skillId:(0,bZ.Nk)(a.skillId)??null,modelId:(0,bZ.Nk)(a.modelId)??null,policy:a.policy??null,channelIds:Array.from(new Set((a.channelIds??[]).map(a=>"string"==typeof a?a.trim():"").filter(a=>!!a)))})),F=E.length<=1?"solo":E.every(a=>a.enabled)?"core":"custom",H={version:1,slug:d8(l().basename(v)),name:g,directory:v,icon:(0,w.hh)(b.workspace.template).icon,createdAt:B,updatedAt:new Date().toISOString(),template:b.workspace.template,sourceMode:b.workspace.sourceMode,teamPreset:F,modelProfile:b.workspace.modelProfile,agentTemplate:"solo"===F?"solo":"core-team",rules:{workspaceOnly:b.workspace.rules.workspaceOnly,generateStarterDocs:b.workspace.rules.generateStarterDocs,generateMemory:b.workspace.rules.generateMemory,kickoffMission:b.workspace.rules.kickoffMission},contextSources:b.intake.sources,hidden:C,systemTag:D,agents:E};if(u){let a=(0,x.Q5)({name:g,brief:m||g,template:b.workspace.template,sourceMode:b.workspace.sourceMode,rules:b.workspace.rules,agents:r,toolExamples:await O(v),docOverrides:n,contextSources:b.intake.sources}),c=new Set(a.map(a=>a.path));for(let b of a)await G(l().join(v,b.path),b.content);for(let a of n)c.has(a.path)||await G(l().join(v,a.path),a.content)}else{let a=(0,x.Q5)({name:j,brief:k||j,template:c.baseline.template,sourceMode:c.baseline.sourceMode,rules:c.baseline.rules,agents:s,toolExamples:[],docOverrides:[],contextSources:c.baseline.contextSources??[]}),b=new Set(a.map(a=>a.path));for(let a of n)q.get(a.path)!==a.content&&await G(l().join(v,a.path),a.content);for(let c of o){if(p.has(c.path))continue;let d=a.find(a=>a.path===c.path);d&&b.has(d.path)&&await G(l().join(v,d.path),d.baseContent)}}if(y||!bS(r,s)){let d={...a,id:dh(v),path:v};await c8({currentWorkspace:d,desiredAgents:b.team.persistentAgents,workspaceSlug:d8(l().basename(v)),previousWorkspaceId:c.baseline.workspaceId,previousWorkspacePath:c.baseline.workspacePath})}return await G(A,`${JSON.stringify(H,null,2)}
249
+ `,"utf8")}function b5(a,b){return b&&a?{status:b.status,checkedAt:b.checkedAt,agentId:a,runId:b.runId??null,summary:b.summary??null,error:b.error??null}:{status:"not-run",checkedAt:null,agentId:null,runId:null,summary:null,error:null}}async function b6(a){let b=await b3(),c={...b.runtimePreflight?.smokeTests??{}};a.agentId&&"not-run"!==a.status&&a.checkedAt&&(c[a.agentId]={status:a.status,checkedAt:a.checkedAt,...a.runId?{runId:a.runId}:{},...a.summary?{summary:a.summary}:{},...a.error?{error:a.error}:{}},await b4({...b.workspaceRoot?{workspaceRoot:b.workspaceRoot}:{},runtimePreflight:{smokeTests:c}}))}let b7=l().join(process.cwd(),".mission-control"),b8=l().join(b7,"channel-registry.json"),b9=l().join(j().homedir(),".openclaw"),ca="gateway.remote.url",cb="Deferred to background refresh.",cc=null,cd=null,ce=null,cf=null,cg=null,ch=null,ci=null,cj=null,ck=null,cl=null,cm=null,cn=null,co=null,cp=new Map,cq=0;function cr(){cq+=1,cc=null,ce=null,cf=null,cg=null,ch=null,ci=null,cj=null,ck=null,cl=null,cm=null,cn=null,cp=new Map}function cs(a="interactive"){let b=cq;return cO({profile:a,generation:b}).then(a=>(b===cq&&(cc={...a,expiresAt:Date.now()+3e4}),a))}function ct(){return!ch||Date.now()-ch.capturedAt>3e5}async function cu(a=2e4){try{let b=await (0,r.VP)(["status","--json"],{timeoutMs:a});return{status:"fulfilled",value:b}}catch(a){return{status:"rejected",reason:a}}}async function cv(a=2e4){try{let b=await (0,r.VP)(["gateway","status","--json"],{timeoutMs:a});return{status:"fulfilled",value:b}}catch(a){return{status:"rejected",reason:a}}}async function cw(a=2e4){try{let b=await (0,r.VP)(["models","status","--json"],{timeoutMs:a});return{status:"fulfilled",value:b}}catch(a){return{status:"rejected",reason:a}}}function cx(a,b,c){return"fulfilled"===a.status?(c({value:a.value,capturedAt:Date.now()}),{value:a.value,reusedCachedValue:!1,failed:!1}):b&&Date.now()-b.capturedAt<=3e5?{value:b.value,reusedCachedValue:!0,failed:!0}:{value:void 0,reusedCachedValue:!1,failed:!0}}function cy(){return{status:"rejected",reason:Error(cb)}}function cz(a){return"rejected"===a.status&&a.reason instanceof Error&&a.reason.message===cb}async function cA(){try{let a=await (0,f.readFile)(l().join(b9,"openclaw.json"),"utf8"),b=JSON.parse(a),c=b.agents?.list;return{status:"fulfilled",value:Array.isArray(c)?c:[]}}catch(a){return{status:"rejected",reason:a}}}async function cB(a){try{var b;let c=(b=a,dZ([...b.flatMap(a=>{let b=[],c=(0,bZ.Nk)(a.workspace);return c&&b.push(l().join(c,".openclaw","agents")),b}),l().join(b9,"agents")])),d=await cE(c);return{status:"fulfilled",value:{sessions:d}}}catch(a){return{status:"rejected",reason:a}}}async function cC(){try{let a=await (0,f.readFile)(b8,"utf8"),b=JSON.parse(a),c=dE(b)?b:{version:1,channels:[]},d=Array.isArray(c.channels)?c.channels.map(a=>(0,bF.kf)(a)).filter(a=>!!a):[];return{status:"fulfilled",value:(0,bF._E)({version:1,channels:d})}}catch(a){return{status:"rejected",reason:a}}}function cD(a,b){return b?`${a}: Reusing the last successful payload while a slow OpenClaw command refreshes in the background.`:null}async function cE(a){let b=new Map;for(let c of a){let a;try{a=await (0,f.readdir)(c,{withFileTypes:!0})}catch{continue}for(let d of a){let a,e;if(!d.isDirectory())continue;let g=l().join(c,d.name,"sessions","sessions.json");try{a=await (0,f.readFile)(g,"utf8")}catch{continue}try{e=JSON.parse(a)}catch{continue}if(Array.isArray(e)){for(let a of e){if(!dE(a))continue;let c=cF(a,d.name);b.has(c.key)||b.set(c.key,c)}continue}if(dE(e))for(let[a,c]of Object.entries(e)){if(!dE(c))continue;let e=cF(c,d.name,a);b.has(e.key)||b.set(e.key,e)}}}return Array.from(b.values()).sort((a,b)=>(b.updatedAt??0)-(a.updatedAt??0))}function cF(a,b,c){var d;let e=(0,bZ.Nk)("string"==typeof a.sessionId?a.sessionId:void 0),f=cG(a,"updatedAt"),g=cG(a,"inputTokens"),h=cG(a,"outputTokens"),i=cG(a,"totalTokens"),j=cG(a,"cacheRead"),k=cG(a,"ageMs")??("number"==typeof(d=f)?Math.max(Date.now()-d,0):void 0),l=(0,bZ.Nk)("string"==typeof a.model?a.model:void 0),m=(0,bZ.Nk)("string"==typeof a.modelProvider?a.modelProvider:void 0),n=(0,bZ.Nk)("string"==typeof a.key?a.key:c)??e??`${b}:${f??"session"}`;return{agentId:b,key:n,sessionId:e||void 0,updatedAt:f,ageMs:k,inputTokens:g,outputTokens:h,totalTokens:i??("number"==typeof g||"number"==typeof h?(g??0)+(h??0):void 0),model:l,modelProvider:m,cacheRead:j,kind:function(a,b){let c=(0,bZ.Nk)("string"==typeof a.kind?a.kind:"string"==typeof a.chatType?a.chatType:void 0);if(c)return c;let d=dE(a.deliveryContext)?a.deliveryContext:null,e=dE(a.origin)?a.origin:null;if("heartbeat"===(0,bZ.Nk)("string"==typeof d?.to?d.to:void 0)||"heartbeat"===(0,bZ.Nk)("string"==typeof e?.provider?e.provider:void 0))return"direct";let f=(0,bZ.Nk)(b);return f&&/:(direct|dm|private):/i.test(f)?"direct":f&&/:(group|channel|thread):/i.test(f)?"group":"task"}(a,n)}}function cG(a,b){let c=a[b];return"number"==typeof c&&Number.isFinite(c)?c:void 0}function cH(a){return[...new Set(a.filter(Boolean))].sort().join("\0")}function cI(a){let b=cq,c=cH(a);return dd(a).then(a=>(b===cq&&(ce={agentIdsKey:c,value:a,expiresAt:Date.now()+3e5}),a))}async function cJ(a,b,c){let d=l().join(a,c);try{var e,g;let a,h;await (0,f.access)(d);let i=(await (0,f.readFile)(d,"utf8")).trim();if(!i)return null;return{fileName:c,lines:i.split(/\r?\n/),source:(e=b,g=d,a=l().resolve(e),(h=l().resolve(g))===a||h.startsWith(`${a}${l().sep}`)?l().relative(a,h)||l().basename(h):h)}}catch{return null}}async function cK(a,b,c){let d=(0,x.Q4)(b,c??w.eY),e=[...new Set(["AGENTS.md","SOUL.md","IDENTITY.md","TOOLS.md","HEARTBEAT.md",...d.resources.map(a=>a.relativePath)])],f=await Promise.all(e.map(b=>cJ(a,a,b))),g=new Map,h=[];for(let a of f)a&&(g.set(a.fileName,a.lines),h.push(a.source));return{profileFiles:e,contextManifest:d,workspaceSections:g,workspaceSources:h}}async function cL(a=18789){return await cM("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}`},rpc:{ok:!0}}:null}async function cM(a,b,c){return await new Promise(d=>{let e=h().createConnection({host:a,port:b}),f=!1,g=a=>{f||(f=!0,e.removeAllListeners(),e.destroy(),d(a))};e.setTimeout(c),e.once("connect",()=>g(!0)),e.once("error",()=>g(!1)),e.once("timeout",()=>g(!1))})}async function cN(a={}){let b=cc,c=!!(b&&b.expiresAt>Date.now());if(!a.force&&c&&b)return a.includeHidden?b.full:b.visible;if(!a.force&&b)return cd||((cd=cs("interactive")).catch(()=>{}),cd.finally(()=>{cd=null}).catch(()=>{})),a.includeHidden?b.full:b.visible;if(a.force){cq+=1,cc=null,(cd=cs("refresh")).catch(()=>{});try{let b=await cd;return a.includeHidden?b.full:b.visible}finally{cd=null}}if(cd){let b=await cd;return a.includeHidden?b.full:b.visible}(cd=cs("interactive")).catch(()=>{});try{let b=await cd;return a.includeHidden?b.full:b.visible}finally{cd=null}}async function cO({profile:a="interactive",generation:b=cq}={}){let c=await cL(),d=!!c||await (0,r.Vg)();if(!d)return cP((0,m.jJ)("OpenClaw CLI is not installed on this machine.",{installed:!1,loaded:!1,rpcOk:!1}));try{var e;let d,f,g,h,i,j,k,m=await b3(),o=b0(m.workspaceRoot)??null,p=cy(),q=ct(),s=!cg||Date.now()-cg.capturedAt>6e4,t=!cl||Date.now()-cl.capturedAt>3e5;if("interactive"===a){let a=!c&&s,b=!c&&q;d=a?await cv(15e3):cy(),f=b?await cu(15e3):cy(),g=cy(),h=await cA(),i=cy(),j=t?await cw(15e3):cy(),k=cy(),q&&!b&&!co&&ct()&&(co=(async()=>{try{let a=await cu(15e3);"fulfilled"===a.status&&(ch={value:a.value,capturedAt:Date.now()})}catch{}finally{co=null}})()).catch(()=>{})}else f=await cu(45e3),d=await cv(45e3),g=cy(),h=await cA(),i=cy(),j=await cw(45e3),k=cy();let u=c?{value:c,reusedCachedValue:!1}:(e=d,"fulfilled"===e.status?(cg={value:e.value,capturedAt:Date.now()},{value:e.value,reusedCachedValue:!1}):cg&&Date.now()-cg.capturedAt<=6e4?{value:cg.value,reusedCachedValue:!0}:{value:void 0,reusedCachedValue:!1});if(!u.value){let a=await cL(cg?.value.gateway?.port??18789);a&&(cg={value:a,capturedAt:Date.now()},u={value:a,reusedCachedValue:!1})}let v=u.value,x="fulfilled"===p.status?(0,bZ.Nk)(p.value):void 0,y=cx(f,ch,a=>{ch=a}),z=cx(h,cj,a=>{cj=a}),A=await cB(z.value??[]),B=cx(g,ci,a=>{ci=a}),C=cx(i,ck,a=>{ck=a}),D=cx(j,cl,a=>{cl=a}),E=cx(A,cm,a=>{cm=a}),F=cx(k,cn,a=>{cn=a}),G=y.value,H=z.value??[],I=B.value??H.map(a=>({id:a.id,name:a.name||a.identity?.name||a.id,identityName:a.identity?.name,identityEmoji:a.identity?.emoji,identitySource:a.identity?"config":void 0,workspace:(0,bZ.Nk)(a.workspace)??"",agentDir:a.agentDir||l().join(b9,"agents",a.id,"agent"),model:a.model,isDefault:!!a.default})),J=D.value??function(a){let b=a.find(a=>a.default)?.model||a.find(a=>!!a.model)?.model||null;if(b)return{defaultModel:b,resolvedDefault:b}}(H),K={models:dZ([...H.map(a=>a.model??"").filter(Boolean),...(J?.allowed??[]).filter(Boolean),J?.resolvedDefault??"",J?.defaultModel??""]).map(a=>{var b;let c,d,e,f=(d=(c=a.trim().toLowerCase()).split("/",1)[0]||"",e=c.includes("/")?c.slice(d.length+1):c,"ollama"===d?{contextWindow:(b=e).includes("qwen3.5")?262144:(b.includes("qwen")||b.includes("llama3.2")||b.includes("llama3.3")||b.includes("deepseek-r1"),131072),local:!0}:"openai"===d||"openai-codex"===d?{contextWindow:e.startsWith("gpt-5")?272e3:null,local:!1}:"anthropic"===d?{contextWindow:2e5,local:!1}:"gemini"===d?{contextWindow:1e6,local:!1}:"deepseek"===d?{contextWindow:64e3,local:!1}:"mistral"===d?{contextWindow:128e3,local:!1}:"openrouter"===d||"xai"===d?{contextWindow:null,local:!1}:{contextWindow:null,local:null});return{key:a,name:a,input:"text",contextWindow:f.contextWindow,local:f.local,available:!0,tags:[],missing:!1}})},L=C.value?.models??K.models,M=E.value?.sessions??[],N=F.value??[],O="fulfilled"===f.status||"fulfilled"===g.status||"fulfilled"===h.status||"fulfilled"===i.status||"fulfilled"===j.status||"fulfilled"===A.status||"fulfilled"===k.status,P=I.map(a=>a.id),Q=df(P,m);Q.catch(()=>{});let R=a9(),S=await cC(),T="fulfilled"===S.status?S.value:(0,bF._E)({version:1,channels:[]}),U="interactive"===a?[]:await (0,bY.QT)(),V=(0,bY.fy)((0,bY.D4)([...U,...(0,bY.G7)(T)]),T),Y=new Map,Z=new Map,$=new Map,_=[],aa=[],ab=new Map((G?.heartbeat?.agents??[]).map(a=>[a.agentId,a])),ac=new Map(H.map(a=>[a.id,a])),ad=new Map;for(let a of M){if(!a.agentId)continue;let b=ad.get(a.agentId)??[];b.push(a),ad.set(a.agentId,b)}let ae=await R,af=(await Promise.all(M.map(a=>(0,ah.V9)(a,H,I,d$)))).flat(),ag=function(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)??aO(a,c),f=function(a,b,c){let d=new Map;c&&d.set(c.id,c);let e=aq(a);if(!e)return Array.from(d.values());let f=Date.parse(a.submittedAt),g=Number.isNaN(f)?0:f-1500;for(let c of b)!aP(c)&&c.agentId===a.agentId&&c.sessionId===e&&((c.updatedAt??0)<g||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]=function(a,b){let c="string"==typeof a.metadata.dispatchId?a.metadata.dispatchId.trim():"",d=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,W.ho)(b);return c.length>0?c:null}(a),e=aS(b.status)?b.status:a.status;return c===b.id&&d&&"string"==typeof a.metadata.dispatchStatus&&a.metadata.dispatchStatus===b.status&&a.status===e?a:{...a,status:e,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}}}(c[e],a))}}return c}(af,ae),ai=d_(ag),aj=await aN(ai,ae,{buildObservedRuntime:a8,persistObservation:a6,reconcileRuntimeState:a7}),ak=d_([...aj,...ag]),al=I.filter(a=>!!a.workspace),am=Array.from(new Set(al.map(a=>a.workspace)));for(let a of(await Promise.all(am.map(async a=>{let b=await (0,bF.OL)(a);Z.set(a,b),$.set(a,await cK(a,b.template,b.rules??w.eY))})),await Promise.all(al.map(async a=>{let b=ac.get(a.id),c=await bE(a.agentDir),d=dh(a.workspace),e=ad.get(a.id)??[],f=Z.get(a.workspace)??await (0,bF.OL)(a.workspace);Z.set(a.workspace,f);let g=$.get(a.workspace)??await cK(a.workspace,f.template,f.rules??w.eY),h=f.agents.find(b=>b.id===a.id)??null,i=bx(b?.skills??[]),j=(0,bZ.Nk)(c.name)||b?.name||a.name||b?.identity?.name||a.identityName||a.id,k=h?.policy??(0,n.g0)((0,n.qF)({skills:i,id:a.id,name:j}),{fileAccess:b?.tools?.fs?.workspaceOnly?"workspace-only":"extended"}),l=dZ([...h?.toolIds??[],..."workspace-only"===k.fileAccess?["fs.workspaceOnly"]:[]]),m=a.model||b?.model||"unassigned",o=await di(a.workspace,{agentId:a.id,agentName:j,agentDir:a.agentDir,configuredSkills:i,configuredTools:l,template:f.template,rules:f.rules??w.eY,workspaceBootstrapProfile:g}),p=ak.filter(b=>b.agentId===a.id).sort(d0),q=dZ(p.flatMap(a=>a.toolNames??[])),r=p.map(a=>a.id),s=p[0],t=e.map(a=>a.updatedAt??0).sort((a,b)=>b-a).at(0)||null,u=ab.get(a.id),x=(0,bZ.yv)({rpcOk:!!v?.rpc?.ok,activeRuntime:s,heartbeatEnabled:!!u?.enabled,lastActiveAt:t}),y={id:a.id,name:j,identityName:(0,bZ.Nk)(c.name)||b?.identity?.name||a.identityName||void 0,workspaceId:d,workspacePath:a.workspace,agentDir:a.agentDir,modelId:m,isDefault:!!(a.isDefault||b?.default),status:x,sessionCount:e.length,lastActiveAt:t,currentAction:(0,bZ.iP)({runtime:s,heartbeatEvery:u?.every??null,status:x}),activeRuntimeIds:r,heartbeat:{enabled:!!u?.enabled,every:u?.every??null,everyMs:u?.everyMs??null},identity:{emoji:(0,bZ.Nk)(c.emoji)||b?.identity?.emoji||a.identityEmoji,theme:(0,bZ.Nk)(c.theme)||b?.identity?.theme,avatar:(0,bZ.Nk)(c.avatar)||b?.identity?.avatar,source:a.identitySource},profile:o,skills:i,tools:l,observedTools:q,policy:k},z=r.map(a=>({id:`edge:${y.id}:${a}:run`,sourceId:y.id,targetId:a,kind:"active-run",label:"runtime"})),A=[{id:`edge:${d}:${y.id}:contains`,sourceId:d,targetId:y.id,kind:"contains",label:"workspace member"},{id:`edge:${y.id}:${m}:model`,sourceId:y.id,targetId:m,kind:"uses-model",label:"model assignment"},...z];return{agent:y,workspacePath:a.workspace,workspaceId:d,primaryModel:m,sessionCount:e.length,activeRuntimeIds:r,relationships:A}})))){let b=function(a,b){var c;let d=dh(b),e=a.get(d);if(e)return e;let f={id:d,name:(c=b,(l().basename(c)||c).split(/[-_]/g).filter(Boolean).map(a=>a[0].toUpperCase()+a.slice(1)).join(" ")),slug:d8(l().basename(b)),path:b,kind:"workspace",agentIds:[],modelIds:[],activeRuntimeIds:[],totalSessions:0,health:"standby",bootstrap:{template:null,sourceMode:null,agentTemplate:null,coreFiles:[],optionalFiles:[],folders:[],projectShell:[],localSkillIds:[]},capabilities:{skills:[],tools:[],workspaceOnlyAgentCount:0},channels:[]};return a.set(d,f),f}(Y,a.workspacePath);b.agentIds.push(a.agent.id),b.modelIds.push(a.primaryModel),b.activeRuntimeIds.push(...a.activeRuntimeIds),b.totalSessions+=a.sessionCount,_.push(a.agent),aa.push(...a.relationships)}let an=new Map;for(let a of _){let b=an.get(a.workspaceId)??[];b.push(a),an.set(a.workspaceId,b)}let ao=await Promise.all(Array.from(Y.values()).map(async a=>{let b=an.get(a.id)??[],c=Z.get(a.path)??null,d=await dj(a.path,b,c??void 0);return{...a,name:c?.name??a.name,modelIds:(0,bZ.Am)(a.modelIds),activeRuntimeIds:(0,bZ.Am)(a.activeRuntimeIds),health:(0,bZ.OZ)(a.agentIds,_),bootstrap:d.bootstrap,capabilities:d.capabilities}})),ap=new Set(ao.filter(a=>Z.get(a.path)?.hidden).map(a=>a.id)),ar=_.filter(a=>!ap.has(a.workspaceId)),as=new Set(_.filter(a=>ap.has(a.workspaceId)).map(a=>a.id)),at=ak.filter(a=>!(a.agentId&&as.has(a.agentId))&&!(a.workspaceId&&ap.has(a.workspaceId))),au=new Set(ak.filter(a=>a.agentId&&as.has(a.agentId)||a.workspaceId&&ap.has(a.workspaceId)).map(a=>a.id)),av=new Set([...ap,...as,...au]),aw=aa.filter(a=>!av.has(a.sourceId)&&!av.has(a.targetId)),ax=ao.filter(a=>!ap.has(a.id)),ay=a=>{let b=new Map;for(let c of a)b.set(c.modelId,(b.get(c.modelId)??0)+1);return L.map(a=>({id:a.key,name:a.name,provider:a.key.split("/")[0]||"unknown",input:a.input,contextWindow:a.contextWindow,local:a.local,available:a.available,missing:a.missing,tags:a.tags,usageCount:b.get(a.key)??0}))},az=(0,bZ.QL)(L,J),aA=G?.securityAudit?.findings?.filter(a=>"warn"===a.severity).map(a=>a.title||a.detail||"Security warning")??[],aB=(0,bZ.Nk)(G?.runtimeVersion||G?.overview?.version||G?.version)??await (0,r.YP)()??void 0,aC=(0,bZ.Nk)(G?.update?.registry?.latestVersion??void 0),aD=(0,bZ.nn)(G?.update?.registry?.error??void 0),aE=aB&&aC?(0,bZ.QK)(aC,aB)>0:void 0,aF=(0,bZ.mB)({currentVersion:aB,latestVersion:aC,updateError:aD,legacyInfo:G?.overview?.update}),aG=await Q,aH={gatewayStatus:d,status:f,agents:g,agentConfig:h,models:i,modelStatus:j,sessions:A,presence:k},aI={installed:!0,loaded:!!v?.service?.loaded,rpcOk:!!v?.rpc?.ok,health:(0,bZ.YO)({rpcOk:v?.rpc?.ok,warningCount:aA.length,runtimeIssueCount:aG.issues.length,hasOpenClawSignal:O}),version:aB,latestVersion:aC,updateAvailable:aE,updateError:aD,updateRoot:(0,bZ.Nk)(G?.update?.root??void 0),updateInstallKind:(0,bZ.Nk)(G?.update?.installKind??void 0),updatePackageManager:(0,bZ.Nk)(G?.update?.packageManager??void 0),workspaceRoot:d2(o),configuredWorkspaceRoot:o??null,dashboardUrl:`http://127.0.0.1:${v?.gateway?.port??18789}/`,gatewayUrl:v?.gateway?.probeUrl||"ws://127.0.0.1:18789",configuredGatewayUrl:x??null,bindMode:v?.gateway?.bindMode,port:v?.gateway?.port,updateChannel:G?.updateChannel||"stable",updateInfo:aF,serviceLabel:v?.service?.label,modelReadiness:az,runtime:aG,securityWarnings:aA,issues:[...(0,bZ.Lp)(Object.fromEntries(Object.entries(aH).filter(([,a])=>!cz(a)))),..."rejected"===d.status&&u.reusedCachedValue?["gatewayStatus: Reusing the last successful gateway status after a transient OpenClaw check failure."]:[],...[cD("status",y.reusedCachedValue),cD("agents",B.reusedCachedValue),cD("agentConfig",z.reusedCachedValue),cD("models",C.reusedCachedValue),cD("modelStatus",D.reusedCachedValue),cD("sessions",E.reusedCachedValue),cD("presence",F.reusedCachedValue)].filter(a=>!!a),...aG.issues]},aJ=X(ak,_),aK=X(at,ar),aL={generatedAt:new Date().toISOString(),revision:b,mode:"live",diagnostics:aI,channelAccounts:V,channelRegistry:T,...(cz(S),{}),presence:N.map(a=>({host:a.host,ip:a.ip,version:a.version,platform:a.platform,deviceFamily:a.deviceFamily,mode:a.mode,reason:a.reason,text:a.text,ts:a.ts})),missionPresets:["Audit the selected workspace and generate a concrete first task batch.","Plan a multi-agent delivery mission for the current product goal.","Review active runtimes, identify blockers, and propose the next handoff."]};return{full:{...aL,workspaces:ao,agents:_,models:ay(_),runtimes:ak,tasks:aJ,relationships:aa},visible:{...aL,workspaces:ax,agents:ar,models:ay(ar),runtimes:at,tasks:aK,relationships:aw}}}catch(a){return cP((0,m.jJ)(a instanceof Error?a.message:"Unknown OpenClaw error.",{installed:d,loaded:!!c?.service?.loaded,rpcOk:!!c?.rpc?.ok}))}}function cP(a){return{visible:a,full:a}}async function cQ(a){let b=await dd(a?[a]:[],{touch:!0});if(b.issues.length>0)throw cc=null,Error(`OpenClaw runtime state is not writable. AgentOS needs write access to ${b.stateRoot} and the agent session store before missions can run.`)}async function cR(a={}){await cQ(a.agentId??null),cc=null}async function cS(a={}){var b,c,d;let e=(b=await cN({force:!0,includeHidden:!0}),(c=a.agentId)&&b.agents.some(a=>a.id===c)?c:b.agents.find(a=>a.isDefault)?.id||b.agents[0]?.id||null);if(!e)return{status:"not-run",checkedAt:null,agentId:null,runId:null,summary:null,error:"AgentOS could not find an OpenClaw agent for the runtime smoke test."};let f=(d=await b3(),d.runtimePreflight?.smokeTests?.[e]??null);if(!a.force&&function(a){if(!a||"passed"!==a.status)return!1;let b=Date.parse(a.checkedAt);return Number.isFinite(b)&&Date.now()-b<=432e5}(f))return b5(e,f);await cQ(e);try{let a=await (0,r.VP)(["agent","--agent",e,"--message","AgentOS runtime smoke test. Reply with a brief READY status.","--thinking","off","--timeout","45","--json"],{timeoutMs:5e4}),b={status:"passed",checkedAt:new Date().toISOString(),agentId:e,runId:a.runId??null,summary:a.summary||aA(a)[0]?.text||"AgentOS verified a real OpenClaw turn.",error:null};return await b6(b),cc=null,b}catch(b){let a={status:"failed",checkedAt:new Date().toISOString(),agentId:e,runId:null,summary:null,error:s(b)||"OpenClaw runtime smoke test failed."};return await b6(a),cc=null,a}}async function cT(a){return bp(a,{getMissionControlSnapshot:cN,resolveAgentForMission:d1,invalidateMissionControlCaches:cr})}async function cU(a,b,c){return bq(a,b,c,{getMissionControlSnapshot:cN,resolveAgentForMission:d1,invalidateMissionControlCaches:cr})}async function cV(a){let b=await cN({includeHidden:!0}),c=b.runtimes.find(b=>b.id===a);return(c||(c=(b=await cN({force:!0,includeHidden:!0})).runtimes.find(b=>b.id===a)),c)?(0,ah.pY)(c,b):{runtimeId:a,status:"missing",finalText:null,finalTimestamp:null,stopReason:null,errorMessage:"Runtime was not found in the current OpenClaw snapshot.",items:[],createdFiles:[],warnings:[],warningSummary:null}}async function cW(a,b={}){let c=await cN({includeHidden:!0}),d=c.tasks.find(b=>b.id===a);if(!d&&b.dispatchId&&(d=c.tasks.find(a=>a.dispatchId===b.dispatchId)),!d&&((d=(c=await cN({force:!0,includeHidden:!0})).tasks.find(b=>b.id===a))||!b.dispatchId||(d=c.tasks.find(a=>a.dispatchId===b.dispatchId))),!d){let a="string"==typeof b.dispatchId?b.dispatchId.trim():"";if(a){let b=await ba(a);if(b)return bi(b,c)}throw Error("Task was not found in the current OpenClaw snapshot.")}let e=d.dispatchId?await ba(d.dispatchId):null;return bh(d,c,e)}async function cX(a){let b=d8(a.id.trim());if(!b)throw Error("Agent id is required.");let c=await cN({includeHidden:!0}),d=(0,bZ.Nk)(a.workspacePath)??c.workspaces.find(b=>b.id===a.workspaceId)?.path;d||(c=await cN({force:!0,includeHidden:!0}),d=(0,bZ.Nk)(a.workspacePath)??c.workspaces.find(b=>b.id===a.workspaceId)?.path);let e=a.workspaceId||(d?dh(d):null);if(function(a,b,c){let d=a.agents.find(a=>a.id===b);if(!d)return;let e=a.workspaces.find(a=>a.id===d.workspaceId)?.name??l().basename(d.workspacePath);if(d.workspaceId===c)throw Error(`Agent id "${b}" already exists in workspace "${e}".`);throw Error(`Agent id "${b}" is already used by workspace "${e}". Choose a different id.`)}(c,b,e),!d||!e)throw Error("Workspace was not found for this agent.");let f=(0,n.g0)(a.policy?.preset??n.iN,a.policy),g=(0,n.Cf)(f.preset),h=(0,n._Y)(g.skillIds),i=(0,n.X0)(g.tools),j=a.bootstrapFiles??[],k=new Map(j.map(a=>[a.path,a.content])).get("IDENTITY.md")??null,m=k?(0,q.kS)(k):null,s=(0,bZ.Nk)(m?.name)??(0,bZ.Nk)(a.name)??g.defaultName,t=(0,bZ.Nk)(m?.emoji)??(0,bZ.Nk)(a.emoji)??g.defaultEmoji,u=(0,bZ.Nk)(m?.theme)??(0,bZ.Nk)(a.theme)??g.defaultTheme,v=(0,bZ.Nk)(m?.avatar)??(0,bZ.Nk)(a.avatar),w=p(o(f.preset,a.heartbeat)),x=c.agents.find(a=>a.workspaceId===e&&"setup"===a.policy.preset)?.id??null,y=bu(d,b),z=["agents","add",b,"--workspace",d,"--agent-dir",y,"--non-interactive","--json"];a.modelId?.trim()&&z.push("--model",a.modelId.trim()),await (0,r.zB)(z);let A=await bL({workspacePath:d,agentId:b,agentName:s,policy:f,setupAgentId:x,snapshot:c});for(let a of h)await bM(d,a);let B=await bB(b,d,{name:s,model:(0,bZ.Nk)(a.modelId),heartbeat:w,skills:dZ([...h,A]),tools:"workspace-only"===f.fileAccess?{fs:{workspaceOnly:!0}}:null},c);await bC(b,d,{name:s||B.name,emoji:t,theme:u,avatar:v,content:k??void 0},y);let C=j.filter(a=>"IDENTITY.md"!==a.path);return C.length>0&&await bD(b,d,C,y),await dB(d,{id:b,name:s,role:(0,n._P)(f.preset),emoji:t,theme:u,enabled:!0,skillId:h[0]??A,toolIds:i,modelId:(0,bZ.Nk)(a.modelId),isPrimary:!1,policy:f,channelIds:a.channelIds??[]}),cc=null,await dQ(d),{agentId:b,workspaceId:e}}async function cY(a){var b;let c=a.id.trim();if(!c)throw Error("Agent id is required.");let d=await cN({includeHidden:!0}),e=d.agents.find(a=>a.id===c);if(e||(e=(d=await cN({force:!0,includeHidden:!0})).agents.find(a=>a.id===c)),!e)throw Error("Agent was not found.");let f=(0,bZ.Nk)(a.workspacePath)??d.workspaces.find(b=>b.id===(a.workspaceId||e.workspaceId))?.path??e.workspacePath,g=a.workspaceId||(f?dh(f):e.workspaceId);if(!f||!g)throw Error("Workspace was not found for this agent.");let h=(0,n.g0)(a.policy?.preset??e.policy.preset,a.policy??e.policy),i=(0,n.Cf)(h.preset),j=(0,n._Y)(i.skillIds),k=(0,n.X0)(i.tools),l=(0,bZ.Nk)(e.name),m=(0,bZ.Nk)(e.identity.emoji),q=(0,bZ.Nk)(e.identity.theme),r=p(o(h.preset,a.heartbeat??{enabled:(b=e.heartbeat).enabled,every:b.every??void 0})),s=d.agents.find(a=>a.workspaceId===g&&"setup"===a.policy.preset&&a.id!==c)?.id??null,t=void 0!==a.modelId?(0,bZ.Nk)(a.modelId):"unassigned"===e.modelId?void 0:e.modelId;if(void 0!==a.modelId&&void 0===a.name&&void 0===a.emoji&&void 0===a.theme&&void 0===a.avatar&&void 0===a.policy&&void 0===a.heartbeat&&void 0===a.channelIds&&void 0===a.skills&&void 0===a.tools)return await bB(c,f,{model:t},d),await dB(f,{id:c,name:l??e.name??c,emoji:m,theme:q,enabled:!0,modelId:t,isPrimary:e.isDefault,policy:h}),cc=null,{agentId:c,workspaceId:g};let u=await bL({workspacePath:f,agentId:c,agentName:(0,bZ.Nk)(a.name)??l??c,policy:h,setupAgentId:s,snapshot:d}),v=bx(e.skills),w=by(e.tools),x=h.preset!==e.policy.preset||0===v.length,y=h.preset!==e.policy.preset||0===w.length,z=void 0===a.skills?x?j:v:(0,n._Y)(bx(a.skills));for(let a of z)await bM(f,a);let A=await bB(c,f,{name:(0,bZ.Nk)(a.name),model:t,heartbeat:r,skills:dZ([...z,u]),tools:"workspace-only"===h.fileAccess?{fs:{workspaceOnly:!0}}:null},d),B=void 0===a.tools?y?k:void 0:by(a.tools);return await bC(c,f,{name:(0,bZ.Nk)(a.name)??A.name,emoji:(0,bZ.Nk)(a.emoji)??m,theme:(0,bZ.Nk)(a.theme)??q,avatar:(0,bZ.Nk)(a.avatar)},e.agentDir??bu(f,c)),await dB(f,{id:c,name:(0,bZ.Nk)(a.name)??l??A.name??c,emoji:(0,bZ.Nk)(a.emoji)??m,theme:(0,bZ.Nk)(a.theme)??q,enabled:!0,modelId:t,isPrimary:e.isDefault,policy:h,channelIds:a.channelIds,skillId:z[0]??u,toolIds:B}),cc=null,await dQ(f),{agentId:c,workspaceId:g}}async function cZ(a){let b=a.agentId.trim();if(!b)throw Error("Agent id is required.");let c=await cN({includeHidden:!0}),d=c.agents.find(a=>a.id===b);if(d||(d=(c=await cN({force:!0,includeHidden:!0})).agents.find(a=>a.id===b)),!d)throw Error("Agent was not found.");let e=c.workspaces.find(a=>a.id===d.workspaceId)??null,g=c.runtimes.filter(a=>a.agentId===d.id).length;await (0,r.zB)(["agents","delete",d.id,"--force","--json"]);try{let a=await bz(c),b=a.filter(a=>a.id!==d.id);b.length!==a.length&&await bA(b)}catch{}if(e){await dC(e.path,d.id);try{await (0,f.rm)(l().join(e.path,"skills",bv(d.id)),{recursive:!0,force:!0})}catch{}cc=null,await dQ(e.path)}return cp=new Map,{agentId:d.id,workspaceId:d.workspaceId,workspacePath:d.workspacePath,deletedRuntimeCount:g}}async function c$(a,b){let c=d7(a.channelId);if(!c)throw Error("Channel id is required.");return await (0,br.rh)(b,"workspace-channel.registry-upsert",()=>dS(b=>{let d=b.channels.find(a=>a.id===c)??{id:c,type:a.type,name:a.name.trim()||c,primaryAgentId:(0,bZ.Nk)(a.primaryAgentId)??null,workspaces:[]},e=a.workspaceId.trim(),f=a.workspacePath.trim(),g=d.workspaces.find(a=>a.workspaceId===e)??{workspaceId:e,workspacePath:f,agentIds:[],groupAssignments:[]},h=dZ([...g.agentIds,...(a.agentIds??[]).map(a=>a.trim()).filter(Boolean)]),i=(0,bF.qc)([...g.groupAssignments,...(a.groupAssignments??[]).filter(a=>!!a.chatId)]),j={...g,workspacePath:f,agentIds:h,groupAssignments:i},k=d.workspaces.filter(a=>a.workspaceId!==e);k.push(j);let l=(0,bZ.Nk)(a.primaryAgentId)??d.primaryAgentId;b.channels=[...b.channels.filter(a=>a.id!==c),{...d,id:c,type:a.type,name:a.name.trim()||d.name||c,primaryAgentId:l||j.agentIds[0]||j.groupAssignments.find(a=>a.agentId)?.agentId||null,workspaces:k}]},{},b)),cc=null,(0,bY.VW)()}async function c_(a,b){let c=d7(a.channelId);if(!c)throw Error("Channel id is required.");return await (0,br.rh)(b,"channel-registry.disconnect",()=>dS(b=>{b.channels=b.channels.map(b=>{if(b.id!==c)return b;let d=b.workspaces.filter(b=>b.workspaceId!==a.workspaceId),e=dZ([...d.flatMap(a=>a.agentIds),...d.flatMap(a=>a.groupAssignments.filter(a=>!1!==a.enabled&&a.agentId).map(a=>a.agentId))]);return{...b,primaryAgentId:b.primaryAgentId&&e.includes(b.primaryAgentId)?b.primaryAgentId:e[0]??null,workspaces:d}}).filter(a=>a.workspaces.length>0||a.primaryAgentId)},{},b)),cc=null,(0,bY.VW)()}async function c0(a,b){let c=d7(a.channelId);if(!c)throw Error("Channel id is required.");let d=(await (0,br.rh)(b,"channel-registry.read-before-delete",()=>(0,bY.vg)())).channels.find(a=>a.id===c);if(!d)throw Error("Channel was not found.");let e=dZ(d.workspaces.flatMap(a=>a.groupAssignments.filter(a=>!!a.chatId).map(a=>a.chatId))),f=dZ(d.workspaces.map(a=>a.workspacePath));return dl(d.type)&&"internal"!==d.type&&await (0,br.rh)(b,"channel.delete-openclaw-remove",()=>(0,r.zB)(["channels","remove","--channel",d.type,"--account",c,"--delete"],{timeoutMs:6e4})),await (0,br.rh)(b,"channel.delete-registry-sync",()=>dS(a=>{a.channels=a.channels.filter(a=>a.id!==c)},{removedAccountIds:[c],removedGroupIds:e},b)),await (0,br.rh)(b,"channel.delete-project-cleanup",()=>Promise.all(f.map(a=>dD(a,c,b)))),cc=null,(0,br.rh)(b,"channel.delete-read-final-registry",()=>(0,bY.VW)())}async function c1(a,b){let c=d7(a.channelId);if(!c)throw Error("Channel id is required.");return await (0,br.rh)(b,"channel.primary-update",()=>dS(b=>{let d=b.channels.find(a=>a.id===c);if(!d)throw Error("Channel was not found.");d.primaryAgentId=(0,bZ.Nk)(a.primaryAgentId)??null},{},b)),cc=null,(0,bY.VW)()}async function c2(a,b){let c=d7(a.channelId);if(!c)throw Error("Channel id is required.");let d=[];return await (0,br.rh)(b,"channel.groups-update",()=>dS(b=>{let e=b.channels.find(a=>a.id===c);if(!e)throw Error("Channel was not found.");let f=e.workspaces.find(b=>b.workspaceId===a.workspaceId);if(!f)throw Error("Workspace binding was not found for this channel.");let g=new Set(f.groupAssignments.filter(a=>!1!==a.enabled&&!!a.chatId).map(a=>a.chatId));f.groupAssignments=(0,bF.qc)(a.groupAssignments.map(a=>({chatId:a.chatId.trim(),agentId:(0,bZ.Nk)(a.agentId)??null,title:(0,bZ.Nk)(a.title)??null,enabled:!1!==a.enabled}))),f.agentIds=dZ([...f.agentIds,...f.groupAssignments.filter(a=>!1!==a.enabled&&a.agentId).map(a=>a.agentId)]);let h=new Set(f.groupAssignments.filter(a=>!1!==a.enabled&&!!a.chatId).map(a=>a.chatId));for(let a of g)h.has(a)||d.push(a)},{removedGroupIds:d},b)),cc=null,(0,bY.VW)()}async function c3(a,b){let c=d7(a.channelId),d=d8(a.agentId.trim());if(!c||!d)throw Error("Channel id and agent id are required.");return await (0,br.rh)(b,"channel.bind-agent",()=>dS(b=>{let e=b.channels.find(a=>a.id===c);if(!e)throw Error("Channel was not found.");let f=e.workspaces.find(b=>b.workspaceId===a.workspaceId)??{workspaceId:a.workspaceId,workspacePath:a.workspacePath,agentIds:[],groupAssignments:[]};f.agentIds=dZ([...f.agentIds,d]),f.workspacePath=a.workspacePath,e.workspaces=[...e.workspaces.filter(b=>b.workspaceId!==a.workspaceId),f],e.primaryAgentId||(e.primaryAgentId=d)},{},b)),cc=null,(0,bY.VW)()}async function c4(a,b){let c=d7(a.channelId),d=d8(a.agentId.trim());if(!c||!d)throw Error("Channel id and agent id are required.");return await (0,br.rh)(b,"channel.unbind-agent",()=>dS(b=>{let e=b.channels.find(a=>a.id===c);if(!e)throw Error("Channel was not found.");let f=e.workspaces.find(b=>b.workspaceId===a.workspaceId);if(f){if(f.agentIds=f.agentIds.filter(a=>a!==d),f.groupAssignments=f.groupAssignments.filter(a=>a.agentId!==d),e.primaryAgentId===d){let a=f.agentIds[0]??f.groupAssignments.find(a=>!1!==a.enabled&&a.agentId)?.agentId??e.workspaces.flatMap(a=>a.agentIds).find(a=>a!==d)??e.workspaces.flatMap(a=>a.groupAssignments).find(a=>!1!==a.enabled&&a.agentId&&a.agentId!==d)?.agentId??null;e.primaryAgentId=a}e.workspaces=[...e.workspaces.filter(b=>b.workspaceId!==a.workspaceId),{...f,agentIds:f.agentIds,groupAssignments:f.groupAssignments}]}},{},b)),cc=null,(0,bY.VW)()}async function c5(a,b={}){var c,d,e;let f,g,h,i=function(a){let b=a.name.trim();if(!b)throw Error("Workspace name is required.");let c=C(b);if(!c)throw Error("Workspace name must include letters or numbers.");let d=a.template??"software",e=a.teamPreset??"core",f=a.sourceMode??"empty",g=a.modelProfile??"balanced",h={...w.eY,...a.rules??{}},i=(a.agents?.length?a.agents:(0,w.P0)(d,e,b)).map(a=>({id:C(a.id)||"agent",role:a.role.trim()||V(a.id),name:B(a.name)??(a.isPrimary?(0,w.sg)(b,a.role,V(a.id)):V(a.id)),enabled:!1!==a.enabled,emoji:B(a.emoji)??void 0,theme:B(a.theme)??void 0,skillId:B(a.skillId)??void 0,modelId:B(a.modelId)??void 0,isPrimary:!!a.isPrimary,heartbeat:o(a.policy?.preset??(0,n.qF)({skills:a.skillId?[a.skillId]:[],id:a.id,name:a.name}),a.heartbeat),policy:(0,n.g0)(a.policy?.preset??(0,n.qF)({skills:a.skillId?[a.skillId]:[],id:a.id,name:a.name}),{...a.policy,fileAccess:h.workspaceOnly?a.policy?.fileAccess??"workspace-only":"extended"})}));if(!i.some(a=>a.enabled&&a.isPrimary)){let a=i.find(a=>a.enabled);a&&(a.isPrimary=!0)}let j=function(a){let b=new Set,c=new Set;for(let d of a){if(b.has(d)){c.add(d);continue}b.add(d)}return Array.from(c).sort((a,b)=>a.localeCompare(b))}(i.filter(a=>a.enabled).map(a=>a.id));if(j.length>0)throw Error(`Enabled agents must have unique ids. Conflicts: ${j.join(", ")}.`);return{name:b,slug:c,brief:B(a.brief)??void 0,directory:B(a.directory)??void 0,modelId:B(a.modelId)??void 0,repoUrl:B(a.repoUrl)??void 0,existingPath:B(a.existingPath)??void 0,sourceMode:f,template:d,teamPreset:e,modelProfile:g,rules:h,docOverrides:(0,x.Iy)(a.docOverrides),agents:i,contextSources:(a.contextSources??[]).flatMap(a=>{var b;if(!a||"object"!=typeof a)return[];let c="prompt"===(b=a.kind)||"website"===b||"repo"===b||"folder"===b?a.kind:"prompt",d=B(a.label)??c,e=B(a.summary)??d,f="error"===a.status?"error":"ready",g=B(a.createdAt)??new Date().toISOString();if(!d||!e)return[];let h={id:B(a.id)??`${c}-${C(d)||"context"}`,kind:c,label:d,summary:e,details:Array.isArray(a.details)?a.details.map(a=>B(a)??"").filter(a=>!!a):[],status:f,createdAt:g},i="number"==typeof a.confidence?a.confidence:void 0,j=B(a.error)??void 0,k=B(a.url)??void 0;return void 0!==i&&(h.confidence=i),void 0!==j&&(h.error=j),void 0!==k&&(h.url=k),[h]})}}(a),j=i.agents.filter(a=>a.enabled),k=(0,u.X6)({template:(0,u.fV)({sourceMode:i.sourceMode,agentCount:j.length,kickoffMission:i.rules.kickoffMission}),onProgress:b.onProgress});if(0===j.length)throw Error("Enable at least one agent for the workspace.");await k.startStep("validate","Resolving workspace settings and reserving the target directory."),await k.addActivity("validate",`Validated workspace name "${i.name}".`);let m=await function(a,b){if("existing"===a.sourceMode){let b=a.existingPath||a.directory;if(!b)throw Error("Choose an existing folder for this workspace.");return l().isAbsolute(b)?b:l().resolve(b)}return a.directory?l().isAbsolute(a.directory)?a.directory:l().join(b,a.directory):l().join(b,a.slug)}(i,d2(await b2()));await k.updateStep("validate",{percent:38,detail:`Reserved target directory at ${m}.`}),await k.addActivity("validate",`Reserved target directory ${m}.`,"done");let p=await cN({force:!0,includeHidden:!0});await k.updateStep("validate",{percent:72,detail:"Checking current OpenClaw snapshot and agent ids."}),function(a,b,c){let d=c.map(a=>bJ(b,a.id)),e=function(a){let b=new Set,c=new Set;for(let d of a){if(b.has(d)){c.add(d);continue}b.add(d)}return Array.from(c).sort((a,b)=>a.localeCompare(b))}(d);if(e.length>0)throw Error(`Workspace bootstrap would create duplicate agent ids: ${e.join(", ")}.`);for(let b of d){let c=a.agents.find(a=>a.id===b);if(c)throw Error(`Workspace bootstrap would create agent id "${b}", but it already exists in workspace "${function(a,b){return a.workspaces.find(a=>a.id===b.workspaceId)?.name??l().basename(b.workspacePath)}(a,c)}". Rename the workspace or adjust the agent ids.`)}}(p,i.slug,j),await k.completeStep("validate",`Workspace input and ${j.length} agent configuration${1===j.length?"":"s"} are ready.`),await k.startStep("source",(c=i.sourceMode,"clone"===c?`Cloning the source repository into ${m}.`:"existing"===c?`Preparing the existing workspace folder at ${m}.`:`Creating a fresh workspace folder at ${m}.`)),await k.addActivity("source",(d=i.sourceMode,"clone"===d?i.repoUrl?`Cloning ${i.repoUrl}.`:"Cloning the requested repository.":"existing"===d?i.existingPath?`Attaching ${i.existingPath}.`:"Attaching the requested folder.":"Preparing an empty workspace scaffold."),"active"),await R({targetDir:m,sourceMode:i.sourceMode,repoUrl:i.repoUrl}),await k.completeStep("source",(e=i.sourceMode,"clone"===e?`Repository content is available at ${m}.`:"existing"===e?`Existing folder linked and ready at ${m}.`:`Fresh workspace folder created at ${m}.`)),await k.startStep("scaffold","Writing the initial workspace scaffold and local metadata."),await k.addActivity("scaffold","Generating workspace docs, memory, and configuration files."),await S(m,{name:i.name,brief:i.brief,template:i.template,teamPreset:i.teamPreset,modelProfile:i.modelProfile,rules:i.rules,docOverrides:i.docOverrides,sourceMode:i.sourceMode,agents:j,contextSources:i.contextSources}),await k.completeStep("scaffold","Workspace files and starter docs are in place.");let q=[];for(let a of(await k.startStep("agents",1===j.length?"Provisioning the first workspace agent.":`Provisioning ${j.length} workspace agents.`),j)){let b=q.length,c=b+1;await k.updateStep("agents",{percent:Math.round(b/j.length*100),detail:`Creating agent ${c} of ${j.length}: ${a.name}.`}),await k.addActivity("agents",`Creating ${a.name} (${a.role}).`);let d=await bK({workspacePath:m,workspaceSlug:i.slug,workspaceModelId:i.modelId,agent:a});q.push(d),await k.addActivity("agents",`Created ${a.name} as ${d}.`,"done"),await k.updateStep("agents",{percent:Math.round(q.length/j.length*100),detail:`${q.length} of ${j.length} agent${1===j.length?"":"s"} ready.`})}await k.completeStep("agents",`${q.length} agent${1===q.length?"":"s"} linked to the workspace.`),cc=null,await dQ(m);let r=q.find(a=>j.some(b=>b.isPrimary&&bJ(i.slug,b.id)===a))??q[0];if(i.rules.kickoffMission){await k.startStep("kickoff",`Dispatching the kickoff mission to ${r}.`),await k.addActivity("kickoff",`Selected ${r} as the primary agent.`);try{let a=await dg({agentId:r,brief:i.brief,modelProfile:i.modelProfile,template:i.template,rules:i.rules},{onProgress:async({message:a,percent:b})=>{await k.updateStep("kickoff",{percent:b,detail:a}),await k.addActivity("kickoff",a,b>=100?"done":"active")}});f=a.runId,g=a.status,await k.completeStep("kickoff",`Kickoff mission finished with status ${g||"unknown"}.`)}catch(a){h=a instanceof Error?a.message:"Kickoff mission could not be started.",await k.addActivity("kickoff",h,"error"),await k.failStep("kickoff",h)}}else await k.startStep("kickoff","Finalizing workspace bootstrap."),await k.addActivity("kickoff","Kickoff mission is disabled for this workspace.","done"),await k.completeStep("kickoff","Workspace bootstrap finished without kickoff.");return cc=null,cp=new Map,{workspaceId:dh(m),workspacePath:m,agentIds:q,primaryAgentId:r,kickoffRunId:f,kickoffStatus:g,kickoffError:h}}async function c6(a){let b=a.workspaceId.trim();if(!b)throw Error("Workspace id is required.");if(a.plan){let c=a.baseline??await dk(b);return c7({id:c.workspaceId,name:c.name,slug:l().basename(c.workspacePath),path:c.workspacePath,kind:"workspace",agentIds:[],modelIds:[],activeRuntimeIds:[],totalSessions:0,health:"standby",bootstrap:{template:null,sourceMode:null,agentTemplate:null,coreFiles:[],optionalFiles:[],folders:[],projectShell:[],localSkillIds:[]},capabilities:{skills:[],tools:[],workspaceOnlyAgentCount:0},channels:[]},a.plan,{name:a.name,directory:a.directory,baseline:c})}let c=await cN({force:!0}),d=c.workspaces.find(a=>a.id===b);if(!d)throw Error("Workspace was not found.");let e=d4(d.path,a.name,a.directory);if(e!==d.path){await d3(e,d.path);try{await (0,f.rename)(d.path,e)}catch(a){throw Error(a instanceof Error?`Unable to move workspace directory. ${a.message}`:"Unable to move workspace directory.")}let a=(await bz(c)).map(a=>a.workspace===d.path?{...a,workspace:e,agentDir:"string"==typeof a.agentDir&&a.agentDir.startsWith(`${d.path}${l().sep}`)?l().join(e,l().relative(d.path,a.agentDir)):a.agentDir}:a);await bA(a)}return cc=null,cp=new Map,{workspaceId:dh(e),previousWorkspaceId:d.id,workspacePath:e}}async function c7(a,b,c){var d,e;let g=(0,bZ.Nk)(c.name)??(0,bZ.Nk)(b.workspace.name)??a.name,h=(0,bZ.Nk)(c.directory),i=(0,bZ.Nk)(c.baseline.directory)??a.path,j=(0,bZ.Nk)(c.baseline.name)??a.name,k=(0,bZ.Nk)(c.baseline.brief)??"",m=(0,bZ.Nk)(b.company.mission)??(0,bZ.Nk)(b.product.offer)??"",n=(0,x.Iy)(b.workspace.docOverrides),o=(0,x.Iy)(c.baseline.docOverrides),p=new Map(n.map(a=>[a.path,a.content])),q=new Map(o.map(a=>[a.path,a.content])),r=b.team.persistentAgents.filter(a=>a.enabled),s=c.baseline.agents.filter(a=>a.enabled),t=g.trim()!==j.trim(),u=t||m!==k||b.workspace.template!==c.baseline.template||b.workspace.sourceMode!==c.baseline.sourceMode||(d=b.workspace.rules,e=c.baseline.rules,d.workspaceOnly!==e.workspaceOnly||d.generateStarterDocs!==e.generateStarterDocs||d.generateMemory!==e.generateMemory||d.kickoffMission!==e.kickoffMission)||!bS(r,s),v=h&&h!==i?d4(a.path,void 0,h):t?d4(a.path,g,void 0):a.path,y=v!==a.path,z=y?await cN({force:!0,includeHidden:!0}):null;if(y){await d3(v,a.path);try{await (0,f.rename)(a.path,v)}catch(a){throw Error(a instanceof Error?`Unable to move workspace directory. ${a.message}`:"Unable to move workspace directory.")}let b=(await bz(z??void 0)).map(b=>b.workspace===a.path?{...b,workspace:v,agentDir:"string"==typeof b.agentDir&&b.agentDir.startsWith(`${a.path}${l().sep}`)?l().join(v,l().relative(a.path,b.agentDir)):b.agentDir}:b);await bA(b)}let A=l().join(v,".openclaw","project.json"),B=new Date().toISOString(),C=!1,D=null;try{let a=await (0,f.readFile)(A,"utf8"),b=JSON.parse(a);dE(b)&&(B="string"==typeof b.createdAt?b.createdAt:B,C=!0===b.hidden,D="string"==typeof b.systemTag?b.systemTag:null)}catch{}let E=b.team.persistentAgents.map(a=>({id:a.id,name:a.name,role:a.role,enabled:a.enabled,emoji:(0,bZ.Nk)(a.emoji)??null,theme:(0,bZ.Nk)(a.theme)??null,isPrimary:!!a.isPrimary,skillId:(0,bZ.Nk)(a.skillId)??null,modelId:(0,bZ.Nk)(a.modelId)??null,policy:a.policy??null,channelIds:Array.from(new Set((a.channelIds??[]).map(a=>"string"==typeof a?a.trim():"").filter(a=>!!a)))})),F=E.length<=1?"solo":E.every(a=>a.enabled)?"core":"custom",H={version:1,slug:d8(l().basename(v)),name:g,directory:v,icon:(0,w.hh)(b.workspace.template).icon,createdAt:B,updatedAt:new Date().toISOString(),template:b.workspace.template,sourceMode:b.workspace.sourceMode,teamPreset:F,modelProfile:b.workspace.modelProfile,agentTemplate:"solo"===F?"solo":"core-team",rules:{workspaceOnly:b.workspace.rules.workspaceOnly,generateStarterDocs:b.workspace.rules.generateStarterDocs,generateMemory:b.workspace.rules.generateMemory,kickoffMission:b.workspace.rules.kickoffMission},contextSources:b.intake.sources,hidden:C,systemTag:D,agents:E};if(u){let a=(0,x.Q5)({name:g,brief:m||g,template:b.workspace.template,sourceMode:b.workspace.sourceMode,rules:b.workspace.rules,agents:r,toolExamples:await O(v),docOverrides:n,contextSources:b.intake.sources}),c=new Set(a.map(a=>a.path));for(let b of a)await G(l().join(v,b.path),b.content);for(let a of n)c.has(a.path)||await G(l().join(v,a.path),a.content)}else{let a=(0,x.Q5)({name:j,brief:k||j,template:c.baseline.template,sourceMode:c.baseline.sourceMode,rules:c.baseline.rules,agents:s,toolExamples:[],docOverrides:[],contextSources:c.baseline.contextSources??[]}),b=new Set(a.map(a=>a.path));for(let a of n)q.get(a.path)!==a.content&&await G(l().join(v,a.path),a.content);for(let c of o){if(p.has(c.path))continue;let d=a.find(a=>a.path===c.path);d&&b.has(d.path)&&await G(l().join(v,d.path),d.baseContent)}}if(y||!bS(r,s)){let d={...a,id:dh(v),path:v};await c8({currentWorkspace:d,desiredAgents:b.team.persistentAgents,workspaceSlug:d8(l().basename(v)),previousWorkspaceId:c.baseline.workspaceId,previousWorkspacePath:c.baseline.workspacePath})}return await G(A,`${JSON.stringify(H,null,2)}
250
250
  `),cc=null,cp=new Map,{workspaceId:dh(v),previousWorkspaceId:a.id,workspacePath:v}}async function c8(a){let b=Array.from(new Map((await cN({force:!0,includeHidden:!0})).agents.filter(b=>b.workspaceId===a.currentWorkspace.id||!!a.previousWorkspaceId&&b.workspaceId===a.previousWorkspaceId||!!(a.previousWorkspacePath&&b.workspacePath===a.previousWorkspacePath)).map(a=>[a.id,a])).values()),c=new Set;for(let d of a.desiredAgents){let e=dT(b,a.workspaceSlug,d.id);if(!d.enabled){e&&(c.add(e.id),await cZ({agentId:e.id}));continue}if(e){c.add(e.id),await cY({id:e.id,workspaceId:a.currentWorkspace.id,workspacePath:a.currentWorkspace.path,name:(0,bZ.Nk)(d.name)??e.name,emoji:(0,bZ.Nk)(d.emoji)??e.identity.emoji,theme:(0,bZ.Nk)(d.theme)??e.identity.theme,modelId:(0,bZ.Nk)(d.modelId)??("unassigned"===e.modelId?void 0:e.modelId),policy:d.policy,heartbeat:d.heartbeat,channelIds:d.channelIds});continue}let f=await cX({id:bJ(a.workspaceSlug,d.id),workspaceId:a.currentWorkspace.id,workspacePath:a.currentWorkspace.path,name:(0,bZ.Nk)(d.name)??void 0,emoji:(0,bZ.Nk)(d.emoji)??void 0,theme:(0,bZ.Nk)(d.theme)??void 0,modelId:(0,bZ.Nk)(d.modelId)??void 0,policy:d.policy,heartbeat:d.heartbeat,channelIds:d.channelIds});c.add(f.agentId)}for(let a of b)c.has(a.id)||await cZ({agentId:a.id})}async function c9(a){let b=a.workspaceId.trim();if(!b)throw Error("Workspace id is required.");let c=await cN({force:!0,includeHidden:!0}),d=c.workspaces.find(a=>a.id===b);if(!d)throw Error("Workspace was not found.");let e=c.agents.filter(a=>a.workspaceId===d.id),g=c.runtimes.filter(a=>a.workspaceId===d.id).length;for(let a of e)await (0,r.zB)(["agents","delete",a.id,"--force","--json"]);try{let a=await bz(c),b=a.filter(a=>a.workspace!==d.path&&!e.some(b=>b.id===a.id));b.length!==a.length&&await bA(b)}catch{}return await (0,f.rm)(d.path,{recursive:!0,force:!0}),cr(),{workspaceId:d.id,workspacePath:d.path,deletedAgentIds:e.map(a=>a.id),deletedRuntimeCount:g}}async function da(a){let b=function(a){let b,c=a?.trim();if(!c)return null;let d=/^[a-z][a-z0-9+.-]*:\/\//i.test(c)?c:`ws://${c}`;try{b=new URL(d)}catch{throw Error("Gateway address must be a valid WebSocket URL.")}if("ws:"!==b.protocol&&"wss:"!==b.protocol)throw Error("Gateway address must start with ws:// or wss://.");if(!b.hostname)throw Error("Gateway address must include a hostname.");return b.toString().replace(/\/$/,"")}(a.gatewayUrl);return b?await (0,r.zB)(["config","set",ca,b]):await b1()&&await (0,r.zB)(["config","unset",ca]),cc=null,cp=new Map,cN({force:!0})}async function db(a){let b=function(a){let b=a?.trim();if(!b)return null;if("~"!==b&&!b.startsWith("~/")&&!l().isAbsolute(b))throw Error("Workspace root must be an absolute path or start with ~/.");return b0(b)}(a.workspaceRoot),c=await b3();return await b4({...b?{workspaceRoot:b}:{},...c.runtimePreflight?{runtimePreflight:c.runtimePreflight}:{}}),cc=null,cp=new Map,cN({force:!0})}async function dc(a,b={}){try{if(!1!==b.createIfMissing&&await (0,f.mkdir)(a,{recursive:!0}),await (0,f.access)(a,e.constants.R_OK|e.constants.W_OK),b.touch){let b=l().join(a,`.agentos-write-check-${process.pid}-${Date.now()}-${Math.random().toString(16).slice(2)}`);await (0,f.writeFile)(b,"","utf8"),await (0,f.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 dd(a,b={}){let c=[...new Set(a.filter(Boolean))],d=await dc(b9,{createIfMissing:!0,touch:b.touch}),e=await Promise.all(c.map(async a=>{let c=l().join(b9,"agents",a,"sessions"),d=await dc(c,{createIfMissing:!0,touch:b.touch});return{id:a,path:c,writable:d.writable,issue:d.issue}})),f=e.every(a=>a.writable),g=[d.writable?null:`OpenClaw state root is not writable. ${d.issue??b9}`,...e.filter(a=>!a.writable).map(a=>`OpenClaw session store for ${a.id} is not writable. ${a.issue??a.path}`)].filter(a=>!!a);return{stateRoot:b9,stateWritable:d.writable,sessionStoreWritable:d.writable&&f,sessionStores:e,issues:g}}async function de(a,b=!1){let c=cH(a),d=ce,e=!!(d&&d.agentIdsKey===c),f=!!(e&&d&&d.expiresAt>Date.now());return!b&&f&&d?d.value:!b&&e&&d?(cf||((cf=cI(a)).catch(()=>{}),cf.finally(()=>{cf=null}).catch(()=>{})),d.value):!b&&cf&&e&&d?d.value:cf&&!b||b&&cf?cf:((cf=cI(a)).catch(()=>{}),cf.finally(()=>{cf=null}).catch(()=>{}),b?await cf:cf)}async function df(a,b){var c;let d,e=await de(a),f=(d=(c=b,Object.entries(c.runtimePreflight?.smokeTests??{}).sort((a,b)=>{let c=Date.parse(a[1].checkedAt);return Date.parse(b[1].checkedAt)-c}))[0],b5(d?.[0]??null,d?.[1]??null)),g=[...e.issues,..."failed"===f.status&&f.error?[`Latest runtime smoke test failed for ${f.agentId??"unknown agent"}. ${f.error}`]:[]];return{...e,smokeTest:f,issues:g}}async function dg(a,b={}){var c,d,e;let f,g,h=(c=a.template,d=a.brief,e=a.rules,f=(0,w.hh)(c),g=(0,x.Q4)(c,e).sections.map(a=>{let b=a.resources.map(a=>a.label).join(", ");return a.enabled?`${a.title}: ${b||"none"}`:`${a.title}: disabled by workspace rules`}).join("\n"),[`You are bootstrapping a newly created ${f.label.toLowerCase()} workspace.`,d?`Project brief: ${d}`:"No detailed project brief was provided yet.","Inspect the current files and improve the starter workspace without rewriting files that already had meaningful content.","Treat the following workspace context manifest as the source of truth:",g,"If those docs exist, refine the brief, architecture, memory, and deliverables guidance based on the real repository state instead of guessing.","Leave the workspace with a concise first task batch and any critical unknowns clearly called out.","Prefer concrete workspace-grounded edits over verbose chat output."].join("\n\n")),i="fast"===a.modelProfile?"low":"quality"===a.modelProfile?"high":"medium",j=new Set;await b.onProgress?.({message:"Submitting the kickoff brief to the primary agent.",percent:18});let k=await (0,r.JZ)(["agent","--agent",a.agentId,"--message",h,"--thinking",i,"--timeout","90","--json"],{timeoutMs:12e4,onStdout:async a=>{let c,d=(c=a.replace(/\u001b\[[0-?]*[ -/]*[@-~]/g,"").trim())?Array.from(new Set(c.split(/\r?\n/).map(a=>a.trim()).filter(Boolean).map(a=>a.replace(/^[>•*-]\s*/,"")).filter(a=>!a.startsWith("{")&&!a.startsWith("[")).filter(a=>!/auth-profiles/i.test(a)))).slice(0,3):[];if(0===d.length&&a.trim())return void await b.onProgress?.({message:"Primary agent responded. Finalizing kickoff output.",percent:82});for(let a of d)await b.onProgress?.({message:a,percent:72})},onStderr:async a=>{let c=a.trim();if(!c)return;let d=function(a){let b,c=a.replace(/\u001b\[[0-?]*[ -/]*[@-~]/g,"").split(/\r?\n/).map(a=>a.trim()).filter(Boolean).join(" ");if(!c)return null;let d=c.toLowerCase();return d.includes("scope upgrade pending approval")||d.includes("pairing required")||d.includes("more scopes than currently approved")?"Gateway permissions need approval; continuing with the embedded runtime.":d.includes("falling back to embedded")?"Gateway agent is unavailable; continuing with the embedded runtime.":d.includes("gateway connect failed")?"Gateway connection is not ready; continuing with the embedded runtime.":`Runtime notice: ${(b=c.replace(/\(requestId:\s*[^)]+\)/gi,"").replace(/\brequestId:\s*\S+/gi,"").replace(/\s+/g," ").trim()).length>160?`${b.slice(0,157).trim()}...`:b}`}(c);!d||j.has(d)||(j.add(d),await b.onProgress?.({message:d,percent:64}))}});return await b.onProgress?.({message:"Kickoff mission completed. Recording the resulting run metadata.",percent:100}),k}function dh(a){let b=(0,d.createHash)("sha1").update(a).digest("hex").slice(0,8);return`workspace:${b}`}async function di(a,b){var c,d;let e,f=b.workspaceBootstrapProfile??await cK(a,b.template,b.rules),g=f.profileFiles,h=f.contextManifest,i=new Map(f.workspaceSections),j=[...f.workspaceSources],k=(0,bZ.Nk)(b.agentDir);if(k)for(let b of(await Promise.all(g.map(b=>cJ(k,a,b)))))b&&(j.push(b.source),i.set(b.fileName,b.lines));let l=((e=dV((c=i).get("docs/brief.md"),"Objective")??dV(c.get("memory/blueprint.md"),"Outcome")??dV(c.get("MEMORY.md"),"Current brief")??dV(c.get("SOUL.md"),"My Purpose")??dV(c.get("IDENTITY.md"),"Role")??dV(c.get("AGENTS.md"),"Customize"))||null)??function({agentId:a,agentName:b,skills:c}){return c.length>0?`${b} specializes in ${c.join(", ")} workflows inside the attached workspace.`:/dev|build|coder|engineer/i.test(a)?`${b} is configured as a development-focused OpenClaw operator for this workspace.`:/review/i.test(a)?`${b} is configured to review work and surface quality risks for this workspace.`:/test/i.test(a)?`${b} is configured to validate behavior, testing, and runtime quality for this workspace.`:`${b} is a general-purpose OpenClaw operator attached to this workspace.`}({agentId:b.agentId,agentName:b.agentName,skills:b.configuredSkills}),m=(d=i,dZ([{file:"AGENTS.md",heading:"Safety defaults"},{file:"AGENTS.md",heading:"Daily memory"},{file:"AGENTS.md",heading:"Output"},{file:"SOUL.md",heading:"How I Operate"},{file:"TOOLS.md",heading:"Examples"},{file:"MEMORY.md",heading:"Stable facts"},{file:"memory/blueprint.md",heading:"Constraints"},{file:"memory/blueprint.md",heading:"Unknowns"},{file:"docs/brief.md",heading:"Success signals"},{file:"docs/brief.md",heading:"Open questions"},{file:"docs/architecture.md",heading:"Dependencies"},{file:"docs/architecture.md",heading:"Risks"},{file:"deliverables/README.md",heading:"Deliverables"},...h.resources.filter(a=>a.relativePath.startsWith("docs/")&&"docs/brief.md"!==a.relativePath&&"docs/architecture.md"!==a.relativePath).flatMap(a=>a.headings.map(b=>({file:a.relativePath,heading:b})))].flatMap(a=>dW(d.get(a.file),a.heading)))).slice(0,8),n=dZ([...function(a,b){if(!a)return[];let c=a.find(a=>a.toLowerCase().includes(`**${b.toLowerCase()}:**`));if(!c)return[];let[,d=""]=c.split(":");return d.split(",").map(a=>dY(a)).filter(Boolean)}(i.get("IDENTITY.md"),"Vibe"),...dW(i.get("SOUL.md"),"My Quirks"),...dW(i.get("SOUL.md"),"How I Operate")]).slice(0,6)||[],o=dU(i.get("AGENTS.md"))??dU(i.get("deliverables/README.md"))??(b.configuredTools.includes("fs.workspaceOnly")?"Prefer workspace-grounded output tied to real project files and artifacts.":null);return{purpose:l,operatingInstructions:m.length>0?m:b.configuredTools.includes("fs.workspaceOnly")?["Operate within the attached workspace and avoid spilling changes outside it."]:["No explicit operating instructions were found in workspace bootstrap files."],responseStyle:n,outputPreference:o,sourceFiles:j}}async function dj(a,b,c){let d=c??await (0,bF.OL)(a),e=(0,x.Q4)(d.template??null,d.rules??w.eY),f=new Set([...x.JH,...x.yA]),[g,h,i,j,k,l]=await Promise.all([bW(a,[{id:"agents",label:"AGENTS.md",relativePath:"AGENTS.md",kind:"file"},{id:"soul",label:"SOUL.md",relativePath:"SOUL.md",kind:"file"},{id:"identity",label:"IDENTITY.md",relativePath:"IDENTITY.md",kind:"file"},{id:"tools",label:"TOOLS.md",relativePath:"TOOLS.md",kind:"file"},{id:"heartbeat",label:"HEARTBEAT.md",relativePath:"HEARTBEAT.md",kind:"file"}]),bW(a,[{id:"memory-md",label:"MEMORY.md",relativePath:"MEMORY.md",kind:"file"}]),bW(a,e.resources.filter(a=>!f.has(a.relativePath))),bW(a,[{id:"docs",label:"docs/",relativePath:"docs",kind:"directory"},{id:"memory",label:"memory/",relativePath:"memory",kind:"directory"},{id:"deliverables",label:"deliverables/",relativePath:"deliverables",kind:"directory"},{id:"skills",label:"skills/",relativePath:"skills",kind:"directory"},{id:"openclaw",label:".openclaw/",relativePath:".openclaw",kind:"directory"}]),bW(a,[{id:"project-json",label:".openclaw/project.json",relativePath:".openclaw/project.json",kind:"file"},{id:"events",label:".openclaw/project-shell/events.jsonl",relativePath:".openclaw/project-shell/events.jsonl",kind:"file"},{id:"runs",label:".openclaw/project-shell/runs",relativePath:".openclaw/project-shell/runs",kind:"directory"},{id:"tasks",label:".openclaw/project-shell/tasks",relativePath:".openclaw/project-shell/tasks",kind:"directory"}]),bX(a)]),m=dZ(b.flatMap(a=>a.tools)),n=dZ([...l,...b.flatMap(a=>a.skills)]),o=b.filter(a=>a.tools.includes("fs.workspaceOnly")).length;return{bootstrap:{template:d.template,sourceMode:d.sourceMode,agentTemplate:d.agentTemplate,coreFiles:g,optionalFiles:h,contextFiles:i,folders:j,projectShell:k,localSkillIds:l},capabilities:{skills:n,tools:m,workspaceOnlyAgentCount:o}}}async function dk(a){let b=await cN({force:!0,includeHidden:!0}),c=b.workspaces.find(b=>b.id===a);if(!c)throw Error("Workspace was not found.");let d=await (0,bF.OL)(c.path),e=d.name??c.name,g=b.agents.filter(a=>a.workspaceId===c.id),h=dZ(g.flatMap(a=>a.skills)),i=dZ(g.flatMap(a=>a.tools)),j=d.template??c.bootstrap.template??"software",k=d.sourceMode??c.bootstrap.sourceMode??"empty",m=d.teamPreset??(g.length<=1?"solo":"core"),o=d.modelProfile??"balanced",p=d.rules??w.eY,q=await cK(c.path,d.template,d.rules??w.eY),r=await di(c.path,{agentId:g[0]?.id??c.id,agentName:g[0]?.name??e,configuredSkills:h,configuredTools:i,template:j,rules:p,workspaceBootstrapProfile:q}),s=d.agents.length>0?d.agents.map(a=>{let b=dT(g,c.slug,a.id),d=(0,n.g0)(a.policy?.preset??b?.policy.preset??n.iN,a.policy??b?.policy);return{id:a.id,role:a.role??(0,n._P)(d.preset),name:a.name??b?.name??a.role??a.id,enabled:a.enabled,emoji:a.emoji??b?.identity.emoji,theme:a.theme??b?.identity.theme,skillId:a.skillId??void 0,modelId:a.modelId??(b?.modelId&&"unassigned"!==b.modelId?b.modelId:void 0),isPrimary:a.isPrimary,policy:d,channelIds:a.channelIds??[],heartbeat:{enabled:b?.heartbeat.enabled??!1,...b?.heartbeat.every?{every:b.heartbeat.every}:{}}}}):(0,w.P0)(j,m,e),t=(0,x.Q5)({name:e,brief:r.purpose||e,template:j,sourceMode:k,rules:p,agents:s,toolExamples:await O(c.path),docOverrides:[],contextSources:d.contextSources??[]}),u=[],v=new Set(t.map(a=>a.path)),y=await bT(c.path);for(let a of t){let b=l().join(c.path,a.path);try{let c=await (0,f.readFile)(b,"utf8");c!==a.baseContent&&u.push({path:a.path,content:c})}catch{continue}}for(let a of y){if(v.has(a))continue;let b=l().join(c.path,a);try{let c=await (0,f.readFile)(b,"utf8");u.push({path:a,content:c})}catch{continue}}return{workspaceId:c.id,workspacePath:c.path,name:e,directory:c.path,template:j,sourceMode:k,teamPreset:m,modelProfile:o,modelId:c.modelIds[0]&&"unassigned"!==c.modelIds[0]?c.modelIds[0]:void 0,rules:p,docOverrides:u,agents:s,brief:r.purpose||e,contextSources:d.contextSources??[]}}function dl(a){return"internal"===a||"slack"===a||"telegram"===a||"discord"===a||"googlechat"===a}async function dm(a,b,c){let d=d8(b.trim())||a,e=`${a}-${d}`,f=await (0,br.rh)(c,`managed-surface.${a}.read-channel-registry`,()=>(0,bY.vg)()),g=await (0,br.rh)(c,`managed-surface.${a}.read-channel-accounts`,()=>(0,bY.QT)()),h=new Set([...f.channels.filter(b=>b.type===a).map(a=>a.id),...g.filter(b=>b.type===a).map(a=>a.id)]);if(!h.has(e))return e;let i=2;for(;h.has(`${e}-${i}`);)i+=1;return`${e}-${i}`}async function dn(a,b){return dm("telegram",a,b)}async function dp(a){await G(b8,`${JSON.stringify(a,null,2)}
251
251
  `)}async function dq(){try{let a=await (0,f.readFile)(l().join(b9,"credentials","telegram-pairing.json"),"utf8"),b=JSON.parse(a),c=Array.isArray(b?.requests)?b.requests:[],d=new Map;for(let a of c){let b=(0,bZ.Nk)(a.meta?.accountId);b&&d.set(b,{id:b,type:"telegram",name:(0,bZ.Nk)(a.meta?.username)??(0,bZ.Nk)(a.meta?.firstName)??b,enabled:!0})}return Array.from(d.values())}catch{return[]}}async function dr(a){try{let b=l().join(b9,"telegram"),c=await (0,br.rh)(a,"telegram.resolve.read-bot-id-files",()=>(0,f.readdir)(b)),d=await Promise.all(c.filter(a=>a.startsWith("update-offset-")&&a.endsWith(".json")).map(async c=>{try{let d=await (0,br.rh)(a,`telegram.resolve.read-bot-id-file.${c}`,()=>(0,f.readFile)(l().join(b,c),"utf8")),e=JSON.parse(d),g=(0,bZ.Nk)(e?.botId),h=c.slice(14,-5);if(!g||!h)return null;return[h,g]}catch{return null}}));return new Map(d.filter(a=>!!a))}catch{return new Map}}async function ds(a,b,c){let d=(0,bZ.Nk)(a.split(":",1)[0]);if(!d)return null;let e=await (0,br.rh)(c,"telegram.resolve.read-bot-ids",()=>dr(c));return b.find(a=>e.get(a.id)===d)??null}async function dt(a,b){if("telegram"===a.provider){if(!a.token?.trim())throw Error("Telegram bot token is required.");return dv({name:a.name,token:a.token,accountId:a.accountId},b)}let c=(0,bZ.Nk)(a.accountId)??await dm(a.provider,a.name,b),d=new Set((await (0,br.rh)(b,`managed-chat.${a.provider}.read-before`,()=>(0,bY.QT)())).filter(b=>b.type===a.provider).map(a=>a.id)),e=(()=>{switch(a.provider){case"discord":if(!a.token?.trim())throw Error("Discord bot token is required.");return["channels","add","--channel","discord","--account",c,"--token",a.token,"--name",a.name];case"slack":if(!a.botToken?.trim())throw Error("Slack bot token is required.");return["channels","add","--channel","slack","--account",c,"--bot-token",a.botToken,"--name",a.name];case"googlechat":if(!a.webhookUrl?.trim())throw Error("Google Chat webhook URL is required.");return["channels","add","--channel","googlechat","--account",c,"--webhook-url",a.webhookUrl,"--name",a.name];default:throw Error(`OpenClaw provisioning is not implemented for ${a.provider}.`)}})();await (0,br.rh)(b,`managed-chat.${a.provider}.provision-openclaw`,()=>(0,r.zB)(e,{timeoutMs:6e4}));let f=(await (0,br.rh)(b,`managed-chat.${a.provider}.read-after`,()=>(0,bY.QT)())).filter(b=>b.type===a.provider);return f.find(a=>a.id===c)??f.find(b=>!d.has(b.id)&&b.name===a.name)??f.find(a=>!d.has(a.id))??null??{id:c,type:a.provider,kind:(0,v.Yx)(a.provider),name:a.name.trim()||c,enabled:!0}}async function du(a,b){var c,d,e,f,g;if("telegram"===(c=a.provider)||"discord"===c||"slack"===c||"googlechat"===c)return dt({provider:a.provider,name:a.name,accountId:a.accountId,token:a.token,botToken:a.botToken,webhookUrl:a.webhookUrl},b);let h=function(a){let b={};if(!dE(a))return b;for(let[c,d]of Object.entries(a))dy(b,c,dz(d));return b}(a.config),i=a.name.trim(),j=function(a,b){switch(a){case"gmail":return dA(b.account)??dA(b.email)??dA(b.address);case"email":return dA(b.address)??dA(b.email);case"webhook":case"cron":return dA(b.accountId)??dA(b.name);default:return null}}(a.provider,h),k=(0,bZ.Nk)(a.accountId)??j??await dm(a.provider,a.name,b),l=function(a){switch(a){case"gmail":return"hooks.gmail";case"email":return"email";case"webhook":return"hooks";case"cron":return"cron";default:throw Error(`OpenClaw provisioning is not implemented for ${a}.`)}}(a.provider);switch(a.provider){case"gmail":{let a,c,j,m=(0,bZ.Nk)(h.account??h.email??h.address);if(!m)throw Error("Gmail account email is required.");let n=(a=["webhooks","gmail","setup","--account",(d={account:m,config:h}).account],c=dE(d.config.serve)?d.config.serve:{},j=dE(d.config.tailscale)?d.config.tailscale:{},dw(a,"--project",d.config.project),dw(a,"--topic",d.config.topic),dw(a,"--subscription",d.config.subscription),dw(a,"--label",d.config.label),dw(a,"--hook-url",d.config.hookUrl),dw(a,"--hook-token",d.config.hookToken),dw(a,"--push-token",d.config.pushToken),dw(a,"--bind",c.bind),dw(a,"--port",c.port),dw(a,"--path",c.path),e=a,f="--include-body",(!0===(g=d.config.includeBody)||"true"===g)&&e.push(f),dw(a,"--max-bytes",d.config.maxBytes),dw(a,"--renew-minutes",d.config.renewEveryMinutes),dw(a,"--tailscale",j.mode),dw(a,"--tailscale-path",j.path),dw(a,"--tailscale-target",j.target),dw(a,"--push-endpoint",d.config.pushEndpoint),a);await (0,br.rh)(b,"managed-surface.gmail.setup-openclaw",()=>(0,r.zB)(n,{timeoutMs:6e4}));let o=await (0,br.rh)(b,"managed-surface.gmail.read-config",()=>(0,r.VP)(["config","get",l,"--json"]).catch(()=>null)),p=await (0,br.rh)(b,"managed-surface.gmail.read-hooks",()=>(0,r.VP)(["config","get","hooks","--json"]).catch(()=>null)),q=p?.presets,s=dx(p,{enabled:!0,presets:dZ([...Array.isArray(q)?q.filter(a=>"string"==typeof a):[],"gmail"])});await (0,br.rh)(b,"managed-surface.gmail.write-hooks",()=>(0,r.zB)(["config","set","hooks",JSON.stringify(s),"--strict-json"],{timeoutMs:6e4}));let t=dx(o,{enabled:!0,name:i||m,label:i||m,accountId:k,account:m,email:m,address:m,...h});await (0,br.rh)(b,"managed-surface.gmail.write-config",()=>(0,r.zB)(["config","set",l,JSON.stringify(t),"--strict-json"],{timeoutMs:6e4}));break}case"webhook":{let a=await (0,br.rh)(b,"managed-surface.webhook.read-config",()=>(0,r.VP)(["config","get",l,"--json"]).catch(()=>null)),c=dA(h.token);if(!c)throw Error("Webhook token is required.");let d=dx(a,{enabled:!0,name:i||k,label:i||k,accountId:k,token:c,...h});await (0,br.rh)(b,"managed-surface.webhook.write-config",()=>(0,r.zB)(["config","set",l,JSON.stringify(d),"--strict-json"],{timeoutMs:6e4}));break}case"cron":{let a=await (0,br.rh)(b,"managed-surface.cron.read-config",()=>(0,r.VP)(["config","get",l,"--json"]).catch(()=>null)),c=dA(h.webhookToken);if(!c)throw Error("Cron webhook token is required.");let d=dx(a,{enabled:!0,name:i||k,label:i||k,accountId:k,webhookToken:c,...h});await (0,br.rh)(b,"managed-surface.cron.write-config",()=>(0,r.zB)(["config","set",l,JSON.stringify(d),"--strict-json"],{timeoutMs:6e4}));break}case"email":{let a=await (0,br.rh)(b,"managed-surface.email.read-config",()=>(0,r.VP)(["config","get",l,"--json"]).catch(()=>null)),c=dA(h.address??h.email);if(!c)throw Error("Email address is required.");let d=dx(a,{enabled:!0,name:i||c,label:i||c,accountId:k,address:c,email:c,...h});await (0,br.rh)(b,"managed-surface.email.write-config",()=>(0,r.zB)(["config","set",l,JSON.stringify(d),"--strict-json"],{timeoutMs:6e4}));break}default:throw Error(`OpenClaw provisioning is not implemented for ${a.provider}.`)}let m=(await (0,br.rh)(b,`managed-surface.${a.provider}.read-after`,()=>(0,bY.QT)())).filter(b=>b.type===a.provider);return m.find(a=>a.id===k)??m.find(b=>b.name.trim().toLowerCase()===a.name.trim().toLowerCase())??m[0]??null??{id:k,type:a.provider,kind:(0,v.Yx)(a.provider),name:i||k,enabled:!0}}async function dv(a,b){let c=(0,bZ.Nk)(a.accountId)??await dn(a.name,b),d=new Set((await (0,br.rh)(b,"telegram.read-before",()=>(0,bY.QT)())).filter(a=>"telegram"===a.type).map(a=>a.id));await (0,br.rh)(b,"telegram.openclaw-add",()=>(0,r.zB)(["channels","add","--channel","telegram","--account",c,"--token",a.token,"--name",a.name],{timeoutMs:6e4}));let e={id:c,type:"telegram",name:a.name.trim()||c,enabled:!0},f=(await (0,br.rh)(b,"telegram.read-after",()=>(0,bY.QT)())).filter(a=>"telegram"===a.type).find(a=>a.id===c);if(f)return{...f,name:a.name.trim()||f.name};let g=Date.now()+8e3,h=null,i=0;for(;Date.now()<g;){i+=1;let e=(await (0,br.rh)(b,`telegram.resolve.${i}.read-channel-accounts`,()=>(0,bY.QT)())).filter(a=>"telegram"===a.type);if(h=e.find(a=>a.id===c)??e.find(b=>!d.has(b.id)&&b.name===a.name)??e.find(a=>!d.has(a.id))??e.find(b=>b.name===a.name)??null)break;let f=await (0,br.rh)(b,`telegram.resolve.${i}.read-pairing-accounts`,()=>dq());if(h=f.find(b=>!d.has(b.id)&&b.name===a.name)??f.find(a=>!d.has(a.id))??f.find(b=>b.name===a.name)??null)break;await (0,br.rh)(b,`telegram.resolve.${i}.sleep`,()=>new Promise(a=>setTimeout(a,750)))}if(!h){let c=await (0,br.rh)(b,"telegram.resolve.token-lookup",async()=>ds(a.token,(await (0,br.rh)(b,"telegram.resolve.token-lookup.read-channel-accounts",()=>(0,bY.QT)())).filter(a=>"telegram"===a.type),b));h=c||e}return{...h,name:a.name.trim()||h.name}}function dw(a,b,c){var d;let e="number"==typeof(d=c)&&Number.isFinite(d)?String(d):"boolean"==typeof d?d?"true":"false":dA(d)??null;null!==e&&a.push(b,e)}function dx(a,b){var c;let d=dE(c=a)?JSON.parse(JSON.stringify(c)):{};for(let[a,c]of Object.entries(b))dy(d,a,dz(c));return d}function dy(a,b,c){if(void 0===c)return;let d=b.split(".").map(a=>a.trim()).filter(Boolean);if(0===d.length)return;let e=a;for(let a=0;a<d.length-1;a+=1){let b=d[a];dE(e[b])||(e[b]={}),e=e[b]}e[d[d.length-1]]=c}function dz(a){if("string"==typeof a){let b=a.trim();if(!b)return;if(b.startsWith("{")&&b.endsWith("}")||b.startsWith("[")&&b.endsWith("]"))try{return JSON.parse(b)}catch{}return b}if(Array.isArray(a))return a.map(a=>dz(a)).filter(a=>void 0!==a);if(dE(a)){let b={};for(let[c,d]of Object.entries(a)){let a=dz(d);void 0!==a&&(b[c]=a)}return b}return a}function dA(a){return"string"==typeof a&&a.trim().length>0?a.trim():null}async function dB(a,b){let c=l().join(a,".openclaw","project.json"),d={},e=null;try{let a=await (0,f.readFile)(c,"utf8"),g=JSON.parse(a);d=dE(g)?g:{},Array.isArray(d.agents)&&(e=d.agents.map(a=>(0,bF.aW)(a)).filter(a=>!!a).find(a=>a.id===b.id)??null)}catch{d={}}let g={id:b.id,name:b.name??e?.name??null,role:b.role??e?.role??null,isPrimary:b.isPrimary??e?.isPrimary??!1,enabled:b.enabled??e?.enabled??!0,emoji:b.emoji??e?.emoji??null,theme:b.theme??e?.theme??null,skillId:b.skillId??e?.skillId??null,toolIds:Array.isArray(b.toolIds)?dZ(b.toolIds.map(a=>a.trim()).filter(a=>!!a&&"fs.workspaceOnly"!==a)):e?.toolIds??[],modelId:b.modelId??e?.modelId??null,policy:b.policy,channelIds:Array.isArray(b.channelIds)?Array.from(new Set(b.channelIds.filter(a=>"string"==typeof a&&a.trim()))):e?.channelIds??[]},h=Array.isArray(d.agents)?d.agents.filter(a=>dE(a)&&"string"==typeof a.id&&a.id!==b.id):[];h.push(g),d.version="number"==typeof d.version?d.version:1,d.slug="string"==typeof d.slug?d.slug:d8(l().basename(a)),d.name="string"==typeof d.name?d.name:l().basename(a),d.updatedAt=new Date().toISOString(),d.agents=h,await G(c,`${JSON.stringify(d,null,2)}
252
252
  `)}async function dC(a,b){let c=l().join(a,".openclaw","project.json"),d={};try{let a=await (0,f.readFile)(c,"utf8"),b=JSON.parse(a);d=dE(b)?b:{}}catch{return}if(!Array.isArray(d.agents))return;let e=d.agents.map(a=>(0,bF.aW)(a)).filter(a=>!!a),g=e.filter(a=>a.id!==b);g.length!==e.length&&(g.length>0&&!g.some(a=>a.isPrimary)&&(g[0]={...g[0],isPrimary:!0}),d.updatedAt=new Date().toISOString(),d.agents=g,await G(c,`${JSON.stringify(d,null,2)}
253
253
  `))}async function dD(a,b,c){let d=l().join(a,".openclaw","project.json"),e={};try{let b=await (0,br.rh)(c,`workspace-project.${l().basename(a)}.read`,()=>(0,f.readFile)(d,"utf8")),g=JSON.parse(b);e=dE(g)?g:{}}catch{return}if(!Array.isArray(e.agents))return;let g=!1,h=e.agents.map(a=>{if(!dE(a)||"string"!=typeof a.id)return a;let c=Array.isArray(a.channelIds)?a.channelIds.filter(a=>"string"==typeof a):[],d=c.filter(a=>a!==b);return d.length===c.length?a:(g=!0,{...a,channelIds:d})});g&&(e.updatedAt=new Date().toISOString(),e.agents=h,await (0,br.rh)(c,`workspace-project.${l().basename(a)}.write`,()=>G(d,`${JSON.stringify(e,null,2)}
254
254
  `)))}function dE(a){return"object"==typeof a&&null!==a}function dF(a){return(0,bF._E)({version:1,channels:a.channels.map(a=>({...a,workspaces:a.workspaces.map(a=>({...a,agentIds:[...a.agentIds],groupAssignments:a.groupAssignments.map(a=>({...a}))}))}))})}async function dG(a){await dp((0,bF._E)(a))}async function dH(a,b={},c){var d;let e,f=await (0,br.rh)(c,"routing.read-bindings",()=>(0,r.VP)(["config","get","bindings","--json"]).catch(()=>[])),g=a.channels.filter(a=>dl(a.type)&&"internal"!==a.type),h=new Set(b.removedAccountIds??[]),i=new Set(b.removedGroupIds??[]),j=new Map;for(let a of g){let b=j.get(a.type)??new Set;b.add(a.id),j.set(a.type,b)}let k=g.filter(a=>"telegram"===a.type),l=g.filter(a=>"discord"===a.type),m=(d=[...f.filter(a=>{if(!dE(a))return!0;let b=dE(a.match)?a.match:null;if(!b||"string"!=typeof b.channel)return!0;let c=j.get(b.channel);return!(c&&"string"==typeof b.accountId&&(c.has(b.accountId)||h.has(b.accountId))||"telegram"===b.channel&&dE(b.peer)&&"string"==typeof b.peer.id&&i.has(b.peer.id))}),...g.filter(a=>!!a.primaryAgentId).map(a=>({agentId:a.primaryAgentId,match:{channel:a.type,accountId:a.id}})),...k.flatMap(a=>a.workspaces.flatMap(b=>b.groupAssignments.filter(a=>!1!==a.enabled&&a.agentId).flatMap(b=>{let c=b.agentId;return[{agentId:c,match:{channel:"telegram",accountId:a.id}},{agentId:c,match:{channel:"telegram",accountId:a.id,peer:{kind:"group",id:b.chatId}}}]}))),...l.flatMap(a=>a.workspaces.flatMap(b=>b.groupAssignments.filter(a=>!1!==a.enabled&&a.agentId).map(b=>(0,bY.$T)(a.id,b)).filter(a=>!!a)))],e=new Set,d.filter(a=>{let b=JSON.stringify(a);return!e.has(b)&&(e.add(b),!0)}));await (0,br.rh)(c,"routing.write-bindings",()=>(0,r.zB)(["config","set","bindings",JSON.stringify(m),"--strict-json"])),await (0,br.rh)(c,"routing.sync-telegram-settings",()=>dI(k,c)),await (0,br.rh)(c,"routing.sync-discord-settings",()=>dM(l,c))}async function dI(a,b){await (0,br.rh)(b,"telegram-settings.enabled",()=>(0,r.zB)(["config","set","channels.telegram.enabled",a.length>0?"true":"false","--strict-json"]));let c=await (0,br.rh)(b,"telegram-settings.default-account-resolve",()=>dL(a,b));c?await (0,br.rh)(b,"telegram-settings.default-account",()=>(0,r.zB)(["config","set","channels.telegram.defaultAccount",JSON.stringify(c),"--strict-json"])):await (0,br.rh)(b,"telegram-settings.default-account-unset",()=>(0,r.zB)(["config","unset","channels.telegram.defaultAccount"]).catch(()=>{}));let d=Object.fromEntries(a.flatMap(a=>a.workspaces.flatMap(a=>a.groupAssignments.filter(a=>!1!==a.enabled).map(a=>[a.chatId,{requireMention:!0}]))));await (0,br.rh)(b,"telegram-settings.groups",()=>(0,r.zB)(["config","set","channels.telegram.groups",JSON.stringify(d),"--strict-json"])),c&&await (0,br.rh)(b,"telegram-settings.reconcile-session-stores",()=>dK(a,c,b))}async function dJ(a,b,c,d){try{let e=await (0,br.rh)(d,`telegram-settings.read-session-store.${l().basename(a)}`,()=>(0,f.readFile)(a,"utf8")),g=JSON.parse(e);if(!dE(g))return!1;let h=!1;for(let a of Object.values(g)){if(!function(a){if(!dE(a))return!1;if("telegram"===a.channel||"telegram"===a.lastChannel)return!0;let b=dE(a.deliveryContext)?a.deliveryContext:null;if(b?.channel==="telegram")return!0;let c=dE(a.origin)?a.origin:null;return c?.provider==="telegram"}(a))continue;let d=function(a){let b=(0,bZ.Nk)("string"==typeof a.lastAccountId?a.lastAccountId:null);if(b)return b;let c=dE(a.deliveryContext)?a.deliveryContext:null,d=(0,bZ.Nk)("string"==typeof c?.accountId?c.accountId:null);if(d)return d;let e=dE(a.origin)?a.origin:null;return(0,bZ.Nk)("string"==typeof e?.accountId?e.accountId:null)}(a);!(d&&c.has(d))&&(a.lastAccountId!==b&&(a.lastAccountId=b,h=!0),dE(a.deliveryContext)&&a.deliveryContext.accountId!==b&&(a.deliveryContext.accountId=b,h=!0),dE(a.origin)&&a.origin.accountId!==b&&(a.origin.accountId=b,h=!0))}if(!h)return!1;return await (0,br.rh)(d,`telegram-settings.write-session-store.${l().basename(a)}`,()=>G(a,`${JSON.stringify(g,null,2)}
255
- `)),!0}catch{return!1}}async function dK(a,b,c){let d=new Set((await (0,bY.QT)()).filter(a=>"telegram"===a.type).map(a=>a.id));for(let e of(d.add(b),dZ([l().join(j().homedir(),".openclaw","agents"),...a.flatMap(a=>a.workspaces.map(a=>l().join(a.workspacePath,".openclaw","agents")))]))){let a;try{a=await (0,br.rh)(c,`telegram-settings.read-agent-root.${l().basename(e)}`,()=>(0,f.readdir)(e,{withFileTypes:!0}))}catch{continue}for(let g of a){if(!g.isDirectory())continue;let a=l().join(e,g.name,"sessions","sessions.json");try{await (0,f.access)(a)}catch{continue}await dJ(a,b,d,c)}}}async function dL(a,b){let c=(await (0,br.rh)(b,"telegram-settings.read-channel-accounts",()=>(0,bY.QT)())).filter(a=>"telegram"===a.type),d=c.filter(a=>"string"==typeof a.metadata?.botId&&a.metadata.botId.trim().length>0),e=new Set(a.map(a=>a.id));for(let b of a){let a=d.find(a=>a.id===b.id)??null;if(a)return a.id}if(1===d.length)return d[0].id;if(d.length>1){let a=c.find(a=>e.has(a.id)&&"string"==typeof a.metadata?.botId&&a.metadata.botId.trim().length>0)??null;return a?a.id:d[0].id}return a.find(a=>!!a.primaryAgentId)?.id??a[0]?.id??null}async function dM(a,b){if(0===a.length)return;let c=await (0,br.rh)(b,"discord-settings.read-guilds",()=>(0,r.VP)(["config","get","channels.discord.guilds","--json"]).catch(()=>({}))),d={};for(let[a,b]of Object.entries(c??{}))d[a]=dE(b)?{...b}:{};let e=!1;for(let b of a)for(let a of b.workspaces)for(let b of a.groupAssignments.filter(a=>!1!==a.enabled)){let a=(0,bY.S4)(b.chatId);if(!a?.guildId)continue;let c=d[a.guildId]??{},f=Array.isArray(c.roles)?c.roles.filter(a=>"string"==typeof a||"number"==typeof a).map(a=>String(a)).map(a=>a.trim()).filter(Boolean):[],g=dE(c.channels)?{...c.channels}:{};if(void 0===c.requireMention&&(c.requireMention=!0,e=!0),"role"===a.kind)f.includes(a.targetId)||(f.push(a.targetId),e=!0),c.roles=f;else{for(let b of dZ([a.targetId,"thread"===a.kind?a.parentId??"":""].filter(Boolean))){let a=dE(g[b])?g[b]:{};!0!==a.allow&&(a.allow=!0,e=!0),void 0===a.requireMention&&(a.requireMention=!0,e=!0),g[b]=a}c.channels=g}d[a.guildId]=c}e&&await (0,br.rh)(b,"discord-settings.write-guilds",()=>(0,r.zB)(["config","set","channels.discord.guilds",JSON.stringify(d),"--strict-json"]))}function dN(a){return a?dZ([a.primaryAgentId??"",...a.workspaces.flatMap(a=>[...a.agentIds,...a.groupAssignments.filter(a=>!1!==a.enabled&&a.agentId).map(a=>a.agentId)])]):[]}function dO(a){return a?{id:a.id,name:a.name,primaryAgentId:a.primaryAgentId??null,workspaces:a.workspaces.map(a=>({workspaceId:a.workspaceId,workspacePath:a.workspacePath,agentIds:dZ([...a.agentIds]).sort(),groupAssignments:a.groupAssignments.map(a=>({chatId:a.chatId,agentId:a.agentId??null,title:a.title??null,enabled:!1!==a.enabled})).sort((a,b)=>{let c=`${a.chatId}:${a.agentId??""}:${a.title??""}:${a.enabled}`,d=`${b.chatId}:${b.agentId??""}:${b.title??""}:${b.enabled}`;return c.localeCompare(d)})})).sort((a,b)=>a.workspaceId.localeCompare(b.workspaceId))}:null}async function dP(a,b={}){let c=dZ(a);if(0===c.length)return;let d=b.snapshot??await (0,br.rh)(b.timings,"agent-policy.snapshot",()=>cN({includeHidden:!0})),e=b.channelRegistry?{...d,channelRegistry:b.channelRegistry}:d;for(let a of c)await (0,br.rh)(b.timings,`agent-policy.sync-agent.${a}`,async()=>{let c=e.agents.find(b=>b.id===a);if(!c)return;let d=e.agents.find(a=>a.workspaceId===c.workspaceId&&"setup"===a.policy.preset&&a.id!==c.id)?.id??null,f=await bL({workspacePath:c.workspacePath,agentId:c.id,agentName:c.name,policy:c.policy,setupAgentId:d,snapshot:e,channelRegistry:b.channelRegistry,timings:b.timings});await bB(c.id,c.workspacePath,{name:c.name,model:(0,bZ.Nk)(c.modelId),heartbeat:c.heartbeat.enabled&&c.heartbeat.every?{every:c.heartbeat.every}:null,skills:[...bx(c.skills),f],tools:c.tools.includes("fs.workspaceOnly")?{fs:{workspaceOnly:!0}}:null},e,b.timings)})}async function dQ(a,b={}){let c=b.snapshot??await cN({includeHidden:!0}),d=c.agents.filter(b=>b.workspacePath===a).map(a=>a.id);await dP(d,{snapshot:c,channelRegistry:b.channelRegistry})}async function dR(a,b,c){let d=await (0,br.rh)(c,"telegram-coordination.collect-changes",()=>{let c=new Map(a.channels.filter(a=>"telegram"===a.type).map(a=>[a.id,a])),d=new Map(b.channels.filter(a=>"telegram"===a.type).map(a=>[a.id,a]));return dZ(dZ([...c.keys(),...d.keys()]).flatMap(a=>{let b=c.get(a)??null,e=d.get(a)??null;return JSON.stringify(dO(b))===JSON.stringify(dO(e))?[]:[...dN(b),...dN(e)]}))});if(0===d.length)return;let e=await (0,br.rh)(c,"telegram-coordination.snapshot",()=>cN({includeHidden:!0}));await (0,br.rh)(c,"telegram-coordination.sync-agent-policies",()=>dP(d,{snapshot:e,channelRegistry:b,timings:c}))}async function dS(a,b={},c){let d=dF(await (0,br.rh)(c,"channel-registry.read",()=>(0,bY.vg)())),e=dF(d);await (0,br.rh)(c,"channel-registry.mutate",()=>a(d)),await (0,br.rh)(c,"channel-registry.save",()=>dG(d)),await (0,br.rh)(c,"channel-registry.update-routing",()=>dH(d,b,c)),cc=null,await (0,br.rh)(c,"channel-registry.sync-telegram-coordination",()=>dR(e,d,c))}function dT(a,b,c){let d=d8(c),e=`${b}-`;return a.find(a=>a.id===bJ(b,c))??a.find(a=>a.id===`${e}${d}`)??a.find(a=>d.length>0&&a.id.endsWith(`-${d}`))??a.find(a=>a.id===d)??null}function dU(a){if(!a)return null;let b=a.find(a=>/be concise in chat|write longer output to files|output/i.test(a));return b?dY(b):null}function dV(a,b){if(!a)return null;let c=a.findIndex(a=>dX(a)===dX(b));if(-1===c)return null;let d=[];for(let b=c+1;b<a.length;b+=1){let c=a[b].trim();if(!c){if(d.length>0)break;continue}if(/^#+\s+/.test(c)||/^[-*]\s+/.test(c)||(d.push(dY(c)),d.length>=2))break}return d.length>0?d.join(" "):null}function dW(a,b){if(!a)return[];let c=a.findIndex(a=>dX(a)===dX(b));if(-1===c)return[];let d=[];for(let b=c+1;b<a.length;b+=1){let c=a[b].trim();if(!c&&d.length>0||/^#+\s+/.test(c))break;if(/^[-*]\s+/.test(c)){d.push(dY(c.replace(/^[-*]\s+/,"")));continue}if(d.length>0)break}return d}function dX(a){return a.replace(/^#+\s+/,"").trim().toLowerCase()}function dY(a){return a.replace(/[`*_>#-]/g,"").replace(/\s+/g," ").trim()}function dZ(a){return Array.from(new Set(a.filter(Boolean)))}function d$(a,b,c){var d;let e,f,g=c.find(b=>b.id===a.agentId),h=b.find(b=>b.id===a.agentId),i=g?.workspace||h?.workspace,j=i?dh(i):void 0,k=d5(a.key,"task"),l=d5(a.key,"stage"),m=a.model&&a.model.includes("/")?a.model:h?.model||g?.model||"unassigned",n=(0,bZ.xH)(l,a.key,a.ageMs),o=(e=d5((d=a).key,"task")||d.key||d.sessionId||String(Math.random()),f=d.sessionId||d9(d.agentId||"sessionless"),`runtime:${f}:${d9(e)}`),p=k?k.slice(0,8):null;return{id:o,source:"session",key:a.key||"unknown-session",title:p?`${d6(a.agentId)} \xb7 ${p}`:`${d6(a.agentId)} session`,subtitle:p?`task ${p} \xb7 ${l||"running"}`:"main session",status:n,updatedAt:a.updatedAt??null,ageMs:a.ageMs??null,agentId:a.agentId,workspaceId:j,modelId:m,sessionId:a.sessionId,taskId:k,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",stage:l??null,historical:!1}}}function d_(a){let b=new Map,c=new Set(a.map(a=>a.id));for(let c of a)b.set(c.id,c);for(let[a,d]of cp.entries()){if(c.has(a))continue;let e={...d,status:"stalled"===d.status?"stalled":"cancelled"===d.status?"cancelled":"completed",metadata:{...d.metadata,historical:!0}};b.set(a,e)}let d=function(a){let b=new Map;for(let c of a){let a=c.agentId||c.workspaceId||"global",d=b.get(a)??[];d.push(c),b.set(a,d)}return Array.from(b.values()).flatMap(a=>a.sort(d0).slice(0,8))}(Array.from(b.values()));return cp=new Map(d.filter(a=>!aP(a)).map(a=>[a.id,a])),d.sort(d0)}function d0(a,b){return(b.updatedAt??0)-(a.updatedAt??0)}function d1(a,b){if(!b)return a.agents.find(a=>a.isDefault)?.id||a.agents[0]?.id;let c=a.agents.filter(a=>a.workspaceId===b);return c.find(a=>a.isDefault)?.id||c.find(a=>"engaged"===a.status)?.id||c[0]?.id}function d2(a){return a||l().join(j().homedir(),"Documents","Shared","projects")}async function d3(a,b){if(a!==b)try{throw await (0,f.access)(a),Error("Target workspace directory already exists.")}catch(a){if("ENOENT"===("object"==typeof a&&a&&"code"in a?a.code:void 0))return;if(a instanceof Error)throw a;throw Error("Unable to verify target workspace directory.")}}function d4(a,b,c){let d=(0,bZ.Nk)(c);if(d)return l().isAbsolute(d)?d:l().join(l().dirname(a),d);let e=(0,bZ.Nk)(b);if(!e)return a;let f=d8(e);if(!f)throw Error("Workspace name is required.");return l().join(l().dirname(a),f)}function d5(a,b){if(!a)return;let c=`:${b}:`,d=a.indexOf(c);if(-1!==d)return a.slice(d+c.length).split(":")[0]}function d6(a){return a?a.split(/[-_]/g).filter(Boolean).map(a=>a[0].toUpperCase()+a.slice(1)).join(" "):"OpenClaw"}function d7(a){return(0,bZ.Nk)(a)??""}function d8(a){return a.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function d9(a){return(0,d.createHash)("sha1").update(a).digest("hex").slice(0,10)}function ea(a){return Array.from(new Set(a.map(a=>ec(a)).filter(a=>!!a)))}function eb(a){return"string"==typeof a?a.trim():""}function ec(a){if("string"!=typeof a)return null;let b=a.trim();return b.length>0?b:null}let ed=async function(a={}){let b;return{...b=structuredClone(await cN(a)),missionPresets:ea(b.missionPresets),channelAccounts:function(a){let b=new Map;for(let c of a){let a=eb(c.id),d=eb(c.type);if(!a||!d)continue;let e={...c,id:a,type:d,name:eb(c.name)||a,enabled:!1!==c.enabled,metadata:c.metadata?{...c.metadata}:void 0,capabilities:ea(c.capabilities??[])},f=`${d}:${a}`,g=b.get(f);if(!g){b.set(f,e);continue}b.set(f,{...g,name:g.name||e.name,enabled:!1!==g.enabled,kind:g.kind??e.kind,capabilities:ea([...g.capabilities??[],...e.capabilities??[]]),metadata:{...e.metadata??{},...g.metadata??{}}})}return Array.from(b.values())}(b.channelAccounts),channelRegistry:function(a){let b=a.channels.map(a=>{var b;let c,d;return c=eb((b=a).id),d=eb(b.type),c&&d?{...b,id:c,type:d,name:eb(b.name)||c,primaryAgentId:ec(b.primaryAgentId),workspaces:b.workspaces.map(a=>({...a,workspaceId:eb(a.workspaceId),workspacePath:eb(a.workspacePath),agentIds:ea(a.agentIds),groupAssignments:a.groupAssignments.map(a=>({...a,chatId:eb(a.chatId),agentId:ec(a.agentId),title:ec(a.title),enabled:!1!==a.enabled})).filter(a=>!!a.chatId)})).filter(a=>!!a.workspaceId&&!!a.workspacePath)}:null}).filter(a=>!!a),c=new Map;for(let a of b){let b=c.get(a.id);if(!b){c.set(a.id,a);continue}let d=new Map;for(let a of b.workspaces)d.set(a.workspaceId,a);for(let b of a.workspaces){let a=d.get(b.workspaceId);if(!a){d.set(b.workspaceId,b);continue}d.set(b.workspaceId,{...a,agentIds:ea([...a.agentIds,...b.agentIds]),groupAssignments:function(a){let b=new Map;for(let c of a)c.chatId&&b.set(c.chatId,c);return Array.from(b.values())}([...a.groupAssignments,...b.groupAssignments])})}c.set(a.id,{...b,name:b.name||a.name,primaryAgentId:b.primaryAgentId||a.primaryAgentId,workspaces:Array.from(d.values())})}return{version:1,channels:Array.from(c.values())}}(b.channelRegistry)}}},1118:(a,b,c)=>{"use strict";c.d(b,{T:()=>e,j:()=>d});let d=[{name:"exec",description:"Run shell commands and manage background processes.",source:"OpenClaw built-in",category:"builtin"},{name:"process",description:"Run shell commands and manage background processes.",source:"OpenClaw built-in",category:"builtin"},{name:"bash",description:"Run shell commands and manage background processes.",source:"OpenClaw built-in",category:"builtin"},{name:"code_execution",description:"Run sandboxed remote Python analysis.",source:"OpenClaw built-in",category:"builtin"},{name:"browser",description:"Control a Chromium browser (navigate, click, screenshot).",source:"OpenClaw built-in",category:"builtin"},{name:"web_search",description:"Search the web and fetch search results.",source:"OpenClaw built-in",category:"builtin"},{name:"x_search",description:"Search X posts.",source:"OpenClaw built-in",category:"builtin"},{name:"web_fetch",description:"Fetch page content.",source:"OpenClaw built-in",category:"builtin"},{name:"read",description:"Read files in the workspace.",source:"OpenClaw built-in",category:"builtin"},{name:"write",description:"Write files in the workspace.",source:"OpenClaw built-in",category:"builtin"},{name:"edit",description:"Edit files in the workspace.",source:"OpenClaw built-in",category:"builtin"},{name:"apply_patch",description:"Apply structured multi-hunk patches.",source:"OpenClaw built-in",category:"builtin"},{name:"message",description:"Send messages across channels.",source:"OpenClaw built-in",category:"builtin"},{name:"canvas",description:"Drive node canvas workflows.",source:"OpenClaw built-in",category:"builtin"},{name:"nodes",description:"Discover and target paired devices.",source:"OpenClaw built-in",category:"builtin"},{name:"cron",description:"Manage scheduled jobs.",source:"OpenClaw built-in",category:"builtin"},{name:"gateway",description:"Inspect and restart gateway services.",source:"OpenClaw built-in",category:"builtin"},{name:"image",description:"Analyze images.",source:"OpenClaw built-in",category:"builtin"},{name:"image_generate",description:"Generate or edit images.",source:"OpenClaw built-in",category:"builtin"},{name:"sessions_list",description:"Session management and sub-agent discovery.",source:"OpenClaw built-in",category:"builtin"},{name:"sessions_history",description:"Session management and sub-agent discovery.",source:"OpenClaw built-in",category:"builtin"},{name:"sessions_send",description:"Session management and sub-agent discovery.",source:"OpenClaw built-in",category:"builtin"},{name:"sessions_spawn",description:"Session management and sub-agent discovery.",source:"OpenClaw built-in",category:"builtin"},{name:"sessions_yield",description:"Session management and sub-agent discovery.",source:"OpenClaw built-in",category:"builtin"},{name:"subagents",description:"Session management and sub-agent discovery.",source:"OpenClaw built-in",category:"builtin"},{name:"session_status",description:"Session management and sub-agent discovery.",source:"OpenClaw built-in",category:"builtin"},{name:"agents_list",description:"Session management and sub-agent discovery.",source:"OpenClaw built-in",category:"builtin"}],e=[{name:"group:runtime",description:"exec, bash, process, code_execution",source:"OpenClaw docs",category:"group"},{name:"group:fs",description:"read, write, edit, apply_patch",source:"OpenClaw docs",category:"group"},{name:"group:sessions",description:"sessions_list, sessions_history, sessions_send, sessions_spawn, sessions_yield, subagents, session_status",source:"OpenClaw docs",category:"group"},{name:"group:memory",description:"memory_search, memory_get",source:"OpenClaw docs",category:"group"},{name:"group:web",description:"web_search, x_search, web_fetch",source:"OpenClaw docs",category:"group"},{name:"group:ui",description:"browser, canvas",source:"OpenClaw docs",category:"group"},{name:"group:automation",description:"cron, gateway",source:"OpenClaw docs",category:"group"},{name:"group:messaging",description:"message",source:"OpenClaw docs",category:"group"},{name:"group:nodes",description:"nodes",source:"OpenClaw docs",category:"group"},{name:"group:openclaw",description:"All built-in OpenClaw tools (excludes plugin tools).",source:"OpenClaw docs",category:"group"}]},1916:(a,b,c)=>{"use strict";function d(a,b,c){return"in_progress"===a||b?.endsWith(":main")&&"number"==typeof c&&c<36e5?"running":"completed"===a||"done"===a?"completed":"failed"===a||"error"===a?"stalled":"idle"}function e(a){return a.rpcOk?a.activeRuntime?.status==="running"||a.activeRuntime?.status==="queued"?"engaged":a.heartbeatEnabled?"monitoring":a.lastActiveAt?"ready":"standby":"offline"}function f(a){if(a.runtime)return a.runtime.taskId?"running"===a.runtime.status||"queued"===a.runtime.status?`Tracking task ${a.runtime.taskId.slice(0,8)}`:"completed"===a.runtime.status?`Recent task ${a.runtime.taskId.slice(0,8)} completed`:"cancelled"===a.runtime.status?`Recent task ${a.runtime.taskId.slice(0,8)} cancelled`:"stalled"===a.runtime.status?`Recent task ${a.runtime.taskId.slice(0,8)} stalled`:`Recent task ${a.runtime.taskId.slice(0,8)}`:"running"===a.runtime.status||"queued"===a.runtime.status?"Maintaining main session context":"Main session recently updated";return a.heartbeatEvery?`Heartbeat on ${a.heartbeatEvery}`:"standby"===a.status?"Waiting for assignment":"Ready for next turn"}function g(a,b){let c=b.filter(b=>a.includes(b.id));return c.some(a=>"engaged"===a.status)?"engaged":c.some(a=>"monitoring"===a.status)?"monitoring":c.some(a=>"ready"===a.status)?"ready":c.some(a=>"offline"===a.status)?"offline":"standby"}function h(a,b){let c=a.filter(a=>{var b;return!1!==(b=a).available&&!b.missing}),d=q([...a.map(a=>a.key.split("/")[0]||"unknown"),...(b?.auth?.providers??[]).map(a=>a?.provider).filter(r),...(b?.auth?.oauth?.providers??[]).map(a=>a?.provider).filter(r)].filter(r)),e=new Map((b?.auth?.providers??[]).filter(a=>r(a?.provider)).map(a=>[a.provider,a])),f=new Map((b?.auth?.oauth?.providers??[]).filter(a=>r(a?.provider)).map(a=>[a.provider,a])),g=o(b?.resolvedDefault??void 0),h=o(b?.defaultModel??void 0),j=g??h,k=j?function(a){let[b]=a.split("/",1);return b||null}(j):null,l=!!(j&&c.some(a=>a.key===j)),m=l?j:c[0]?.key??null,n=d.map(b=>{var c;let d,g=a.filter(a=>(a.key.split("/")[0]||"unknown")===b),h=g.some(a=>!0!==a.local),j="ollama"!==b&&h,k=e.get(b),l=f.get(b),m="ollama"===b?g.some(a=>a.local):(k?.profiles?.count??0)>0||l?.status==="ok",n=null;return l?.status==="ok"?n="OAuth connected":(k?.profiles?.count??0)>0?n=`${k?.profiles?.count} auth profile${k?.profiles?.count===1?"":"s"}`:"ollama"===b&&m?n="Local Ollama model detected.":"ollama"===b?n="Install or pull a local model to unlock this route.":h&&(n="openai-codex"===(d=(c=b).trim().toLowerCase())?"Use the ChatGPT account-based login flow in terminal to use this route.":"openrouter"===d||"openai"===d||"anthropic"===d||"xai"===d||"gemini"===d||"deepseek"===d||"mistral"===d?`Add your ${i(c)} API key in terminal to use this route.`:`Connect ${i(c)} auth in terminal to use this route.`),{provider:b,connected:m,canLogin:j,detail:n}}),p=(b?.auth?.missingProvidersInUse??[]).filter(r),s=new Set(p),t=b?.auth?.unusableProfiles?.length??0,u=[];return 0===c.length&&u.push("No available models were detected yet."),c.length>0&&!j&&u.push("Choose a default model to finish setup."),j&&!l&&(k&&s.has(k)?u.push(`Default model is set, but ${i(k)} auth is still missing.`):p.length>0?u.push(`Default model is set, but auth is still missing for: ${p.join(", ")}.`):u.push("The selected default model is not ready yet.")),p.length>0&&!j&&u.push(`Auth is still missing for: ${p.join(", ")}.`),t>0&&u.push("Some stored model auth profiles are not usable."),{ready:c.length>0&&l,defaultModel:h??null,resolvedDefaultModel:g??null,defaultModelReady:l,recommendedModelId:m??null,preferredLoginProvider:n.find(a=>a.provider===k&&!a.connected&&a.canLogin)?.provider??p.find(a=>n.some(b=>b.provider===a&&!b.connected&&b.canLogin))??n.find(a=>!a.connected&&a.canLogin)?.provider??(d.includes("openai-codex")||0===c.length?"openai-codex":null),totalModelCount:a.length,availableModelCount:c.length,localModelCount:c.filter(a=>a.local).length,remoteModelCount:c.filter(a=>!0!==a.local).length,missingModelCount:a.filter(a=>a.missing||!1===a.available).length,authProviders:n,issues:q(u)}}function i(a){let b=a.trim().toLowerCase();return"openrouter"===b?"OpenRouter":"openai-codex"===b?"OpenAI Codex":"openai"===b?"OpenAI":"anthropic"===b?"Anthropic":"ollama"===b?"Ollama":"xai"===b?"xAI":"gemini"===b?"Gemini":"deepseek"===b?"DeepSeek":"mistral"===b?"Mistral":a.split("-").map(a=>a?a[0].toUpperCase()+a.slice(1):a).join(" ")}function j(a){return a.rpcOk||a.hasOpenClawSignal?!a.rpcOk||a.warningCount>0||a.runtimeIssueCount>0?"degraded":"healthy":"offline"}function k(a){return Object.entries(a).flatMap(([a,b])=>"rejected"!==b.status?[]:[`${a}: ${b.reason instanceof Error?b.reason.message:String(b.reason)}`])}function l(a){let b=o(a.legacyInfo);if(a.latestVersion&&a.currentVersion){let b=m(a.latestVersion,a.currentVersion);return b>0?`Update available: v${a.latestVersion} is ready. Current version: v${a.currentVersion}.`:0===b?`OpenClaw is up to date on v${a.currentVersion}.`:`Running v${a.currentVersion}. Registry currently reports v${a.latestVersion}.`}return a.latestVersion?`Latest available version: v${a.latestVersion}. Current version could not be determined.`:b||(a.updateError?`Update registry check failed: ${a.updateError}`:a.currentVersion?`Running v${a.currentVersion}. Update registry status is still loading.`:void 0)}function m(a,b){let c=n(a),d=n(b),e=Math.max(c.length,d.length);for(let a=0;a<e;a+=1){let b=c[a]??0,e=d[a]??0;if("number"==typeof b&&"number"==typeof e){if(b!==e)return b-e;continue}let f=String(b),g=String(e);if(f!==g)return f.localeCompare(g)}return 0}function n(a){return a.trim().replace(/^v/i,"").split(/[^0-9a-zA-Z]+/).filter(Boolean).map(a=>/^\d+$/.test(a)?Number(a):a.toLowerCase())}function o(a){return a?.trim()||void 0}function p(a){let b=o(a);if(b)return b.split(/\r?\n/,1)[0]?.trim()||b}function q(a){return Array.from(new Set(a))}function r(a){return!!a}c.d(b,{Am:()=>q,Lp:()=>k,Nk:()=>o,OZ:()=>g,QK:()=>m,QL:()=>h,YO:()=>j,iP:()=>f,mB:()=>l,nn:()=>p,xH:()=>d,yv:()=>e})},2826:()=>{},3334:(a,b,c)=>{"use strict";c.d(b,{Z:()=>o});var d=c(7091),e=c(9802),f=c(3628);function g(a){return Array.from(new Set(a.filter(Boolean)))}function h(a){let b=new Map;for(let c of a)c.chatId&&b.set(c.chatId,c);return Array.from(b.values())}function i(a){return a.title&&a.title!==a.chatId?`${a.title} (\`${a.chatId}\`)`:`\`${a.chatId}\``}function j(a){if(!a)return"no capability snapshot";let b=[(0,f._P)(a.policy.preset)],c=a.profile.purpose?.trim();c&&b.push(c);let d=g(a.skills).slice(0,2);d.length>0&&b.push(`skills: ${d.join(", ")}`);let e=g(a.tools).slice(0,2);return e.length>0&&b.push(`tools: ${e.join(", ")}`),b.join(" \xb7 ")}function k(a){return Array.from(new Set(a.filter(Boolean)))}function l(a){let b=new Map;for(let c of a)c.chatId&&b.set(c.chatId,c);return Array.from(b.values())}function m(a,b,c){let e=new Map(a?.agents.map(a=>[a.id,(0,d.CK)(a)])??[]),f=new Map(a?.agents.map(a=>[a.id,a])??[]);return k(b.filter(a=>!c.includes(a))).map(a=>{let b=f.get(a)??null;return{agentId:a,name:e.get(a)??a,summary:function(a){if(!a)return"no capability snapshot";let b=[(0,d.CK)(a)],c=a.profile.purpose?.trim();c&&b.push(c);let e=k(a.skills).slice(0,2);e.length>0&&b.push(`skills: ${e.join(", ")}`);let f=k(a.tools).slice(0,2);return f.length>0&&b.push(`tools: ${f.join(", ")}`),b.join(" \xb7 ")}(b)}})}function n(a){let b=(0,e.S)(a.chatId),c=b?.kind==="role"?`@${b.targetId}`:b?.kind==="thread"?`Thread ${b.targetId}`:b?.kind==="channel"?`#${b.targetId}`:a.chatId;return{routeId:a.chatId,label:a.title?.trim()||c,kind:b?.kind??"channel",guildId:b?.guildId??null}}function o(a,b,c=b?.channelRegistry??null){let e=[function(a){if(!a||0===a.primaryChannels.length&&0===a.ownedGroups.length&&0===a.delegateChannels.length)return null;let b=["## Telegram coordination"];if(b.push("- Telegram credentials are managed by OpenClaw for the listed channels. Do not ask the operator for `TELEGRAM_BOT_TOKEN` or `channels.telegram.botToken` when sending to listed groups."),b.push('- To send or post, call the `message` tool with `action: "send"`, `channel: "telegram"`, `target: "<chatId>"`, and the exact message text. Use the listed chat id as `target`.'),b.push("- If sending fails, report the actual tool error instead of inventing a missing-token error."),a.primaryChannels.length>0){for(let c of(b.push("- You are the public Telegram fallback for these channels:"),a.primaryChannels)){let a=c.groups.length>0?c.groups.map(i).join(", "):"no allowed groups yet";if(b.push(` - ${c.channelName} (\`${c.channelId}\`) \xb7 fallback groups: ${a}.`),c.peers.length>0)for(let a of(b.push(" - Internal assistants:"),c.peers))b.push(` - ${a.name} (\`${a.agentId}\`) \xb7 ${a.summary}.`)}b.push("- Keep public Telegram replies under your own voice for unassigned groups, even when you ask another agent for help."),b.push("- For specialist help, call another agent from the workspace terminal with:"),b.push("```bash"),b.push('node .openclaw/tools/telegram-delegate-agent.mjs --agent <delegate-agent-id> --message "Summarize what I need from you"'),b.push("```"),b.push("- Use delegate turns for internal research, drafting, or analysis only. Do not ask them to answer Telegram directly."),b.push("- After a delegate responds, decide what to share publicly and send the final Telegram reply yourself.")}if(a.ownedGroups.length>0){for(let c of(b.push("- You are the public Telegram voice for these assigned groups:"),a.ownedGroups))if(b.push(` - ${c.channelName} (\`${c.channelId}\`) \xb7 ${c.title??c.chatId} (\`${c.chatId}\`) \xb7 primary ${c.primaryAgentName} (\`${c.primaryAgentId}\`).`),c.peers.length>0)for(let a of(b.push(" - Internal assistants for this group:"),c.peers))b.push(` - ${a.name} (\`${a.agentId}\`) \xb7 ${a.summary}.`);b.push("- Reply directly to those groups as the public voice. Use other agents only for internal help.")}if(a.delegateChannels.length>0){for(let c of(b.push("- You can assist these Telegram admin channels when the primary agent asks:"),a.delegateChannels)){let a=c.groups.length>0?c.groups.map(i).join(", "):"no allowed groups yet";if(b.push(` - ${c.channelName} (\`${c.channelId}\`) \xb7 primary ${c.primaryAgentName} (\`${c.primaryAgentId}\`) \xb7 groups: ${a}.`),c.peers.length>0)for(let a of(b.push(" - Nearby assistants:"),c.peers))b.push(` - ${a.name} (\`${a.agentId}\`) \xb7 ${a.summary}.`)}b.push("- When helping with Telegram work for groups not assigned to you, return concise internal findings or draft language. Do not speak as the public Telegram agent for those unassigned groups.")}return b.join("\n")}(function(a,b,c=b?.channelRegistry??null){if(!c)return null;let e=new Map(b?.agents.map(a=>[a.id,(0,d.CK)(a)])??[]),f=new Map(b?.agents.map(a=>[a.id,a])??[]),i=f.get(a)??null,k=i?.workspaceId??null,l=[],m=[],n=[];for(let b of c.channels.filter(a=>"telegram"===a.type)){let c=b.workspaces.filter(a=>a.workspaceId===k);if(0===c.length)continue;let i=h(c.flatMap(a=>a.groupAssignments.filter(a=>!1!==a.enabled))).map(a=>({chatId:a.chatId,title:a.title??null})),o=h(c.flatMap(b=>b.groupAssignments.filter(b=>!1!==b.enabled&&b.agentId===a))),p=i.filter(a=>!o.some(b=>b.chatId===a.chatId)&&!c.some(b=>b.groupAssignments.some(b=>!1!==b.enabled&&b.chatId===a.chatId&&b.agentId)));if(b.primaryAgentId===a){let d=g(c.flatMap(b=>b.agentIds.filter(b=>b!==a))).map(a=>{let b=f.get(a)??null;return{agentId:a,name:e.get(a)??a,summary:j(b)}});l.push({channelId:b.id,channelName:b.name,groups:p,peers:d})}for(let d of o){let h=g(c.flatMap(c=>c.agentIds.filter(c=>c!==a&&c!==b.primaryAgentId))).map(a=>{let b=f.get(a)??null;return{agentId:a,name:e.get(a)??a,summary:j(b)}});m.push({channelId:b.id,channelName:b.name,chatId:d.chatId,title:d.title??null,primaryAgentId:b.primaryAgentId??a,primaryAgentName:e.get(b.primaryAgentId??a)??b.primaryAgentId??a,peers:h})}if(b.primaryAgentId&&b.primaryAgentId!==a&&0===o.length){let h=f.get(b.primaryAgentId)??null,i=g(c.flatMap(c=>c.agentIds.filter(c=>c!==b.primaryAgentId&&c!==a))).map(a=>{let b=f.get(a)??null;return{agentId:a,name:e.get(a)??a,summary:j(b)}});n.push({channelId:b.id,channelName:b.name,groups:p,peers:i,primaryAgentId:b.primaryAgentId,primaryAgentName:e.get(b.primaryAgentId)??(h?(0,d.CK)(h):b.primaryAgentId)})}}return{primaryChannels:l.sort((a,b)=>a.channelName.localeCompare(b.channelName)),ownedGroups:m.sort((a,b)=>{let c=`${a.channelName}:${a.title??a.chatId}`,d=`${b.channelName}:${b.title??b.chatId}`;return c.localeCompare(d)}),delegateChannels:n.sort((a,b)=>a.channelName.localeCompare(b.channelName))}}(a,b,c)),function(a){if(!a||0===a.primaryChannels.length&&0===a.ownedRoutes.length&&0===a.delegateChannels.length)return null;let b=["## Discord coordination"];if(a.primaryChannels.length>0){for(let c of(b.push("- You are the public Discord fallback for these channels:"),a.primaryChannels)){let a=c.routes.length>0?c.routes.map(a=>`${a.label} (\`${a.routeId}\`)`).join(", "):"no allowed routes yet";if(b.push(` - ${c.channelName} (\`${c.channelId}\`) \xb7 fallback routes: ${a}.`),c.peers.length>0)for(let a of(b.push(" - Internal assistants:"),c.peers))b.push(` - ${a.name} (\`${a.agentId}\`) \xb7 ${a.summary}.`)}b.push("- Keep public Discord replies under your own voice for unassigned routes, even when you ask another agent for help.")}if(a.ownedRoutes.length>0){for(let c of(b.push("- You are the public Discord voice for these assigned routes:"),a.ownedRoutes))if(b.push(` - ${c.channelName} (\`${c.channelId}\`) \xb7 ${c.label} (\`${c.routeId}\`) \xb7 primary ${c.primaryAgentName} (\`${c.primaryAgentId}\`).`),c.peers.length>0)for(let a of(b.push(" - Internal assistants for this route:"),c.peers))b.push(` - ${a.name} (\`${a.agentId}\`) \xb7 ${a.summary}.`);b.push("- Reply directly to those routes as the public voice. Use other agents only for internal help.")}if(a.delegateChannels.length>0){for(let c of(b.push("- You can assist these Discord admin channels when the primary agent asks:"),a.delegateChannels)){let a=c.routes.length>0?c.routes.map(a=>`${a.label} (\`${a.routeId}\`)`).join(", "):"no allowed routes yet";if(b.push(` - ${c.channelName} (\`${c.channelId}\`) \xb7 primary ${c.primaryAgentName} (\`${c.primaryAgentId}\`) \xb7 routes: ${a}.`),c.peers.length>0)for(let a of(b.push(" - Nearby assistants:"),c.peers))b.push(` - ${a.name} (\`${a.agentId}\`) \xb7 ${a.summary}.`)}b.push("- When helping with Discord work, return concise internal findings or draft language. Do not speak as the public Discord agent.")}return b.join("\n")}(function(a,b,c=b?.channelRegistry??null){if(!c)return null;let e=b?.agents.find(b=>b.id===a)??null,f=e?.workspaceId??null,g=[],h=[],i=[];for(let e of c.channels.filter(a=>"discord"===a.type)){var j,k,o,p;let c=e.workspaces.filter(a=>a.workspaceId===f);if(0===c.length)continue;let q=l(c.flatMap(a=>a.groupAssignments.filter(a=>!1!==a.enabled))).map(n),r=l(c.flatMap(b=>b.groupAssignments.filter(b=>!1!==b.enabled&&b.agentId===a))).map(n),s=q.filter(a=>!r.some(b=>b.routeId===a.routeId)&&!c.some(b=>b.groupAssignments.some(b=>!1!==b.enabled&&b.chatId===a.routeId&&b.agentId)));if(e.primaryAgentId===a){let d=m(b,c.flatMap(b=>b.agentIds.filter(b=>b!==a)),[a]);g.push({channelId:e.id,channelName:e.name,routes:s,peers:d})}for(let f of r){let g=m(b,c.flatMap(b=>b.agentIds.filter(b=>b!==a&&b!==e.primaryAgentId)),[a,e.primaryAgentId??""]);h.push({channelId:e.id,channelName:e.name,routeId:f.routeId,label:f.label,kind:f.kind,guildId:f.guildId,primaryAgentId:e.primaryAgentId??a,primaryAgentName:(j=b?.agents.find(b=>b.id===(e.primaryAgentId??a))??null,k=e.primaryAgentId??a,j?(0,d.CK)(j):k),peers:g})}if(e.primaryAgentId&&e.primaryAgentId!==a){let f=m(b,c.flatMap(b=>b.agentIds.filter(b=>b!==e.primaryAgentId&&b!==a)),[a,e.primaryAgentId]);i.push({channelId:e.id,channelName:e.name,routes:s,peers:f,primaryAgentId:e.primaryAgentId,primaryAgentName:(o=b?.agents.find(a=>a.id===e.primaryAgentId)??null,p=e.primaryAgentId,o?(0,d.CK)(o):p)})}}return{primaryChannels:g.sort((a,b)=>a.channelName.localeCompare(b.channelName)),ownedRoutes:h.sort((a,b)=>{let c=`${a.channelName}:${a.label}`,d=`${b.channelName}:${b.label}`;return c.localeCompare(d)}),delegateChannels:i.sort((a,b)=>a.channelName.localeCompare(b.channelName))}}(a,b,c))].filter(a=>!!a);return e.length>0?e.join("\n\n"):null}},3442:()=>{},3628:(a,b,c)=>{"use strict";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:["project-researcher","project-builder","project-analyst"]}},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}))},4072:(a,b,c)=>{"use strict";c.d(b,{b9:()=>f,kS:()=>e,rT:()=>d}),c(3628);let d=["IDENTITY.md","SOUL.md","TOOLS.md","HEARTBEAT.md"];function e(a){let b=a.split(/\r?\n/);return{name:h(b,"Name"),emoji:h(b,"Emoji"),theme:h(b,"Theme"),avatar:h(b,"Avatar")}}function f(a){return["# IDENTITY.md\n",`- **Name:** ${a.name}`,`- **Emoji:** ${g(a.emoji)??""}`,`- **Theme:** ${g(a.theme)??""}`,`- **Avatar:** ${g(a.avatar)??""}`,"\n## Role",a.presetLabel??"Agent","\n## Notes",a.presetDescription??"Pragmatic, concise, workspace-grounded."].join("\n")}function g(a){if("string"!=typeof a)return null;let b=a.trim();return b.length>0?b:null}function h(a,b){let c=RegExp(`^\\s*-\\s*\\*\\*${b}:\\*\\*\\s*(.*)\\s*$`,"i"),d=a.find(a=>c.test(a.trim()));var e=d?.match(c)?.[1]??null;if(null===e)return null;let f=e.replace(/\r\n/g,"\n").replace(/\*\*(.*?)\*\*/g,"$1").replace(/\[(.*?)\]\((.*?)\)/g,"$1").replace(/\s+/g," ").trim();return f.length>0?f:null}},4414:(a,b,c)=>{"use strict";function d(a){return a.replace(/\s+/g," ").trim().toLowerCase()}function e(a,b){let c=d(b),e=d(a);return!!c&&!!e&&(e===c||e.startsWith(`${c} `))}function f(a,b,c={}){if(c.agentId&&a.agentId!==c.agentId||"number"==typeof c.submittedAt&&(a.updatedAt??0)<c.submittedAt-1500)return!1;let g=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=d(b);return c.length>0?c:null}(a);return!!g&&e(g,b)}c.d(b,{Dm:()=>e,gP:()=>f})},4497:(a,b,c)=>{"use strict";c.d(b,{MY:()=>e,Yx:()=>f});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){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 f(a){return(d.get(a)??{provider:a,label:e(a),kind:"chat",description:"OpenClaw-managed integration surface.",supportsProvisioning:!1,provisionFields:[],supportsRouteDiscovery:!1,providerManagedByOpenClaw:!0}).kind}},4853:(a,b,c)=>{"use strict";c.d(b,{Iy:()=>m,JH:()=>e,Q4:()=>j,Q5:()=>k,nt:()=>i,uZ:()=>l,yA:()=>f});var d=c(3628);let e=["AGENTS.md","SOUL.md","IDENTITY.md","TOOLS.md","HEARTBEAT.md"],f=["MEMORY.md"],g={software:"Software project",frontend:"Frontend app",backend:"Backend/API",research:"Research",content:"Content/Growth"},h=["Use repository-local scripts or documented commands for repeatable workflows.","Update this file when the project exposes a cleaner build, test, or release path."];function i(a,b){return n(a,b).map(a=>a.path)}function j(a,b){var c;let d,f=new Map((d=[{id:"agents",label:"AGENTS.md",relativePath:"AGENTS.md",kind:"file",headings:["Workspace","Team","Customize","Safety defaults","Daily memory","Output"]},{id:"soul",label:"SOUL.md",relativePath:"SOUL.md",kind:"file",headings:["My Purpose","How I Operate","My Quirks","Active Focus"]},{id:"identity",label:"IDENTITY.md",relativePath:"IDENTITY.md",kind:"file",headings:["Role"]},{id:"tools",label:"TOOLS.md",relativePath:"TOOLS.md",kind:"file",headings:["Examples","Notes"]},{id:"heartbeat",label:"HEARTBEAT.md",relativePath:"HEARTBEAT.md",kind:"file",headings:[]},{id:"memory-md",label:"MEMORY.md",relativePath:"MEMORY.md",kind:"file",headings:["Current brief","Stable facts"]},{id:"memory-blueprint",label:"memory/blueprint.md",relativePath:"memory/blueprint.md",kind:"file",headings:["Outcome","Constraints","Unknowns"]},{id:"memory-decisions",label:"memory/decisions.md",relativePath:"memory/decisions.md",kind:"file",headings:["Template"]},{id:"docs-brief",label:"docs/brief.md",relativePath:"docs/brief.md",kind:"file",headings:["Objective","Success signals","Open questions"]},{id:"docs-architecture",label:"docs/architecture.md",relativePath:"docs/architecture.md",kind:"file",headings:["Current shape","Dependencies","Risks"]},{id:"deliverables-readme",label:"deliverables/README.md",relativePath:"deliverables/README.md",kind:"file",headings:["Deliverables"]}],"frontend"===(c=a??null)&&d.push({id:"docs-ux-notes",label:"docs/ux-notes.md",relativePath:"docs/ux-notes.md",kind:"file",headings:["UX Notes"]}),"backend"===c&&d.push({id:"docs-service-map",label:"docs/service-map.md",relativePath:"docs/service-map.md",kind:"file",headings:["Service Map"]}),"research"===c&&d.push({id:"docs-research-plan",label:"docs/research-plan.md",relativePath:"docs/research-plan.md",kind:"file",headings:["Research Plan"]}),"content"===c&&d.push({id:"docs-content-brief",label:"docs/content-brief.md",relativePath:"docs/content-brief.md",kind:"file",headings:["Content Brief"]}),d).map(a=>[a.relativePath,a])),g=a=>a.map(a=>f.get(a)).filter(Boolean),h=[{id:"core",title:"Core bootstrap",description:"Required for every workspace and shared by all agents.",enabled:!0,resources:g(e)},{id:"memory",title:"Memory",description:"Durable notes and decisions that survive across sessions.",enabled:b.generateMemory,resources:b.generateMemory?g(["MEMORY.md","memory/blueprint.md","memory/decisions.md"]):[]},{id:"starter",title:"Starter docs",description:"Planning, architecture, and handoff docs used for the first pass.",enabled:b.generateStarterDocs,resources:b.generateStarterDocs?g(["docs/brief.md","docs/architecture.md","deliverables/README.md",..."frontend"===a?["docs/ux-notes.md"]:"backend"===a?["docs/service-map.md"]:"research"===a?["docs/research-plan.md"]:"content"===a?["docs/content-brief.md"]:[]]):[]}];return{template:a??null,rules:b,sections:h,resources:h.flatMap(a=>a.resources)}}function k(a){let b=n(a.template,a.rules),c=new Map(m(a.docOverrides).map(a=>[a.path,a.content]));return b.map(b=>{let d=b.render(a),e=c.has(b.path);return{path:b.path,title:b.title,description:b.description,category:b.category,baseContent:d,content:e?c.get(b.path)??"":d,overridden:e}})}function l(a){let b=k(a).map(a=>({...a,generated:!0})),c=new Set(b.map(a=>a.path));return[...b,...m(a.docOverrides).filter(a=>!c.has(a.path)).map(a=>{var b;return{path:a.path,title:a.path,description:"Existing workspace file.",category:(b=a.path).startsWith("memory/")?"memory":b.startsWith("docs/")?"docs":b.startsWith("deliverables/")?"deliverables":"core",baseContent:a.content,content:a.content,overridden:!1,generated:!1}})]}function m(a){let b=new Map;for(let c of a??[]){let a=c.path.trim();a&&b.set(a,c.content)}return Array.from(b.entries()).map(([a,b])=>({path:a,content:b}))}function n(a,b){let c=[{path:"AGENTS.md",title:"AGENTS.md",description:"Shared operating instructions for all agents.",category:"core",render:o},{path:"SOUL.md",title:"SOUL.md",description:"Purpose, operating style, and active focus.",category:"core",render:({template:a,brief:b,contextSources:c})=>{var d,e,f;return d=a,e=b,f=c,`# SOUL
255
+ `)),!0}catch{return!1}}async function dK(a,b,c){let d=new Set((await (0,bY.QT)()).filter(a=>"telegram"===a.type).map(a=>a.id));for(let e of(d.add(b),dZ([l().join(j().homedir(),".openclaw","agents"),...a.flatMap(a=>a.workspaces.map(a=>l().join(a.workspacePath,".openclaw","agents")))]))){let a;try{a=await (0,br.rh)(c,`telegram-settings.read-agent-root.${l().basename(e)}`,()=>(0,f.readdir)(e,{withFileTypes:!0}))}catch{continue}for(let g of a){if(!g.isDirectory())continue;let a=l().join(e,g.name,"sessions","sessions.json");try{await (0,f.access)(a)}catch{continue}await dJ(a,b,d,c)}}}async function dL(a,b){let c=(await (0,br.rh)(b,"telegram-settings.read-channel-accounts",()=>(0,bY.QT)())).filter(a=>"telegram"===a.type),d=c.filter(a=>"string"==typeof a.metadata?.botId&&a.metadata.botId.trim().length>0),e=new Set(a.map(a=>a.id));for(let b of a){let a=d.find(a=>a.id===b.id)??null;if(a)return a.id}if(1===d.length)return d[0].id;if(d.length>1){let a=c.find(a=>e.has(a.id)&&"string"==typeof a.metadata?.botId&&a.metadata.botId.trim().length>0)??null;return a?a.id:d[0].id}return a.find(a=>!!a.primaryAgentId)?.id??a[0]?.id??null}async function dM(a,b){if(0===a.length)return;let c=await (0,br.rh)(b,"discord-settings.read-guilds",()=>(0,r.VP)(["config","get","channels.discord.guilds","--json"]).catch(()=>({}))),d={};for(let[a,b]of Object.entries(c??{}))d[a]=dE(b)?{...b}:{};let e=!1;for(let b of a)for(let a of b.workspaces)for(let b of a.groupAssignments.filter(a=>!1!==a.enabled)){let a=(0,bY.S4)(b.chatId);if(!a?.guildId)continue;let c=d[a.guildId]??{},f=Array.isArray(c.roles)?c.roles.filter(a=>"string"==typeof a||"number"==typeof a).map(a=>String(a)).map(a=>a.trim()).filter(Boolean):[],g=dE(c.channels)?{...c.channels}:{};if(void 0===c.requireMention&&(c.requireMention=!0,e=!0),"role"===a.kind)f.includes(a.targetId)||(f.push(a.targetId),e=!0),c.roles=f;else{for(let b of dZ([a.targetId,"thread"===a.kind?a.parentId??"":""].filter(Boolean))){let a=dE(g[b])?g[b]:{};!0!==a.allow&&(a.allow=!0,e=!0),void 0===a.requireMention&&(a.requireMention=!0,e=!0),g[b]=a}c.channels=g}d[a.guildId]=c}e&&await (0,br.rh)(b,"discord-settings.write-guilds",()=>(0,r.zB)(["config","set","channels.discord.guilds",JSON.stringify(d),"--strict-json"]))}function dN(a){return a?dZ([a.primaryAgentId??"",...a.workspaces.flatMap(a=>[...a.agentIds,...a.groupAssignments.filter(a=>!1!==a.enabled&&a.agentId).map(a=>a.agentId)])]):[]}function dO(a){return a?{id:a.id,name:a.name,primaryAgentId:a.primaryAgentId??null,workspaces:a.workspaces.map(a=>({workspaceId:a.workspaceId,workspacePath:a.workspacePath,agentIds:dZ([...a.agentIds]).sort(),groupAssignments:a.groupAssignments.map(a=>({chatId:a.chatId,agentId:a.agentId??null,title:a.title??null,enabled:!1!==a.enabled})).sort((a,b)=>{let c=`${a.chatId}:${a.agentId??""}:${a.title??""}:${a.enabled}`,d=`${b.chatId}:${b.agentId??""}:${b.title??""}:${b.enabled}`;return c.localeCompare(d)})})).sort((a,b)=>a.workspaceId.localeCompare(b.workspaceId))}:null}async function dP(a,b={}){let c=dZ(a);if(0===c.length)return;let d=b.snapshot??await (0,br.rh)(b.timings,"agent-policy.snapshot",()=>cN({includeHidden:!0})),e=b.channelRegistry?{...d,channelRegistry:b.channelRegistry}:d;for(let a of c)await (0,br.rh)(b.timings,`agent-policy.sync-agent.${a}`,async()=>{let c=e.agents.find(b=>b.id===a);if(!c)return;let d=e.agents.find(a=>a.workspaceId===c.workspaceId&&"setup"===a.policy.preset&&a.id!==c.id)?.id??null,f=await bL({workspacePath:c.workspacePath,agentId:c.id,agentName:c.name,policy:c.policy,setupAgentId:d,snapshot:e,channelRegistry:b.channelRegistry,timings:b.timings});await bB(c.id,c.workspacePath,{name:c.name,model:(0,bZ.Nk)(c.modelId),heartbeat:c.heartbeat.enabled&&c.heartbeat.every?{every:c.heartbeat.every}:null,skills:[...bx(c.skills),f],tools:c.tools.includes("fs.workspaceOnly")?{fs:{workspaceOnly:!0}}:null},e,b.timings)})}async function dQ(a,b={}){let c=b.snapshot??await cN({includeHidden:!0}),d=c.agents.filter(b=>b.workspacePath===a).map(a=>a.id);await dP(d,{snapshot:c,channelRegistry:b.channelRegistry})}async function dR(a,b,c){let d=await (0,br.rh)(c,"telegram-coordination.collect-changes",()=>{let c=new Map(a.channels.filter(a=>"telegram"===a.type).map(a=>[a.id,a])),d=new Map(b.channels.filter(a=>"telegram"===a.type).map(a=>[a.id,a]));return dZ(dZ([...c.keys(),...d.keys()]).flatMap(a=>{let b=c.get(a)??null,e=d.get(a)??null;return JSON.stringify(dO(b))===JSON.stringify(dO(e))?[]:[...dN(b),...dN(e)]}))});if(0===d.length)return;let e=await (0,br.rh)(c,"telegram-coordination.snapshot",()=>cN({includeHidden:!0}));await (0,br.rh)(c,"telegram-coordination.sync-agent-policies",()=>dP(d,{snapshot:e,channelRegistry:b,timings:c}))}async function dS(a,b={},c){let d=dF(await (0,br.rh)(c,"channel-registry.read",()=>(0,bY.vg)())),e=dF(d);await (0,br.rh)(c,"channel-registry.mutate",()=>a(d)),await (0,br.rh)(c,"channel-registry.save",()=>dG(d)),await (0,br.rh)(c,"channel-registry.update-routing",()=>dH(d,b,c)),cc=null,await (0,br.rh)(c,"channel-registry.sync-telegram-coordination",()=>dR(e,d,c))}function dT(a,b,c){let d=d8(c),e=`${b}-`;return a.find(a=>a.id===bJ(b,c))??a.find(a=>a.id===`${e}${d}`)??a.find(a=>d.length>0&&a.id.endsWith(`-${d}`))??a.find(a=>a.id===d)??null}function dU(a){if(!a)return null;let b=a.find(a=>/be concise in chat|write longer output to files|output/i.test(a));return b?dY(b):null}function dV(a,b){if(!a)return null;let c=a.findIndex(a=>dX(a)===dX(b));if(-1===c)return null;let d=[];for(let b=c+1;b<a.length;b+=1){let c=a[b].trim();if(!c){if(d.length>0)break;continue}if(/^#+\s+/.test(c)||/^[-*]\s+/.test(c)||(d.push(dY(c)),d.length>=2))break}return d.length>0?d.join(" "):null}function dW(a,b){if(!a)return[];let c=a.findIndex(a=>dX(a)===dX(b));if(-1===c)return[];let d=[];for(let b=c+1;b<a.length;b+=1){let c=a[b].trim();if(!c&&d.length>0||/^#+\s+/.test(c))break;if(/^[-*]\s+/.test(c)){d.push(dY(c.replace(/^[-*]\s+/,"")));continue}if(d.length>0)break}return d}function dX(a){return a.replace(/^#+\s+/,"").trim().toLowerCase()}function dY(a){return a.replace(/[`*_>#-]/g,"").replace(/\s+/g," ").trim()}function dZ(a){return Array.from(new Set(a.filter(Boolean)))}function d$(a,b,c){var d;let e,f,g=c.find(b=>b.id===a.agentId),h=b.find(b=>b.id===a.agentId),i=g?.workspace||h?.workspace,j=i?dh(i):void 0,k=d5(a.key,"task"),l=d5(a.key,"stage"),m=a.model&&a.model.includes("/")?a.model:h?.model||g?.model||"unassigned",n=(0,bZ.xH)(l,a.key,a.ageMs),o=(e=d5((d=a).key,"task")||d.key||d.sessionId||String(Math.random()),f=d.sessionId||d9(d.agentId||"sessionless"),`runtime:${f}:${d9(e)}`),p=k?k.slice(0,8):null;return{id:o,source:"session",key:a.key||"unknown-session",title:p?`${d6(a.agentId)} \xb7 ${p}`:`${d6(a.agentId)} session`,subtitle:p?`task ${p} \xb7 ${l||"running"}`:"main session",status:n,updatedAt:a.updatedAt??null,ageMs:a.ageMs??null,agentId:a.agentId,workspaceId:j,modelId:m,sessionId:a.sessionId,taskId:k,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",stage:l??null,historical:!1}}}function d_(a){let b=new Map,c=new Set(a.map(a=>a.id));for(let c of a)b.set(c.id,c);for(let[a,d]of cp.entries()){if(c.has(a))continue;let e={...d,status:"stalled"===d.status?"stalled":"cancelled"===d.status?"cancelled":"completed",metadata:{...d.metadata,historical:!0}};b.set(a,e)}let d=function(a){let b=new Map;for(let c of a){let a=c.agentId||c.workspaceId||"global",d=b.get(a)??[];d.push(c),b.set(a,d)}return Array.from(b.values()).flatMap(a=>a.sort(d0).slice(0,8))}(Array.from(b.values()));return cp=new Map(d.filter(a=>!aP(a)).map(a=>[a.id,a])),d.sort(d0)}function d0(a,b){return(b.updatedAt??0)-(a.updatedAt??0)}function d1(a,b){if(!b)return a.agents.find(a=>a.isDefault)?.id||a.agents[0]?.id;let c=a.agents.filter(a=>a.workspaceId===b);return c.find(a=>a.isDefault)?.id||c.find(a=>"engaged"===a.status)?.id||c[0]?.id}function d2(a){return a||l().join(j().homedir(),"Documents","Shared","projects")}async function d3(a,b){if(a!==b)try{throw await (0,f.access)(a),Error("Target workspace directory already exists.")}catch(a){if("ENOENT"===("object"==typeof a&&a&&"code"in a?a.code:void 0))return;if(a instanceof Error)throw a;throw Error("Unable to verify target workspace directory.")}}function d4(a,b,c){let d=(0,bZ.Nk)(c);if(d)return l().isAbsolute(d)?d:l().join(l().dirname(a),d);let e=(0,bZ.Nk)(b);if(!e)return a;let f=d8(e);if(!f)throw Error("Workspace name is required.");return l().join(l().dirname(a),f)}function d5(a,b){if(!a)return;let c=`:${b}:`,d=a.indexOf(c);if(-1!==d)return a.slice(d+c.length).split(":")[0]}function d6(a){return a?a.split(/[-_]/g).filter(Boolean).map(a=>a[0].toUpperCase()+a.slice(1)).join(" "):"OpenClaw"}function d7(a){return(0,bZ.Nk)(a)??""}function d8(a){return a.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function d9(a){return(0,d.createHash)("sha1").update(a).digest("hex").slice(0,10)}function ea(a){return Array.from(new Set(a.map(a=>ec(a)).filter(a=>!!a)))}function eb(a){return"string"==typeof a?a.trim():""}function ec(a){if("string"!=typeof a)return null;let b=a.trim();return b.length>0?b:null}let ed=async function(a={}){let b;return{...b=structuredClone(await cN(a)),missionPresets:ea(b.missionPresets),channelAccounts:function(a){let b=new Map;for(let c of a){let a=eb(c.id),d=eb(c.type);if(!a||!d)continue;let e={...c,id:a,type:d,name:eb(c.name)||a,enabled:!1!==c.enabled,metadata:c.metadata?{...c.metadata}:void 0,capabilities:ea(c.capabilities??[])},f=`${d}:${a}`,g=b.get(f);if(!g){b.set(f,e);continue}b.set(f,{...g,name:g.name||e.name,enabled:!1!==g.enabled,kind:g.kind??e.kind,capabilities:ea([...g.capabilities??[],...e.capabilities??[]]),metadata:{...e.metadata??{},...g.metadata??{}}})}return Array.from(b.values())}(b.channelAccounts),channelRegistry:function(a){let b=a.channels.map(a=>{var b;let c,d;return c=eb((b=a).id),d=eb(b.type),c&&d?{...b,id:c,type:d,name:eb(b.name)||c,primaryAgentId:ec(b.primaryAgentId),workspaces:b.workspaces.map(a=>({...a,workspaceId:eb(a.workspaceId),workspacePath:eb(a.workspacePath),agentIds:ea(a.agentIds),groupAssignments:a.groupAssignments.map(a=>({...a,chatId:eb(a.chatId),agentId:ec(a.agentId),title:ec(a.title),enabled:!1!==a.enabled})).filter(a=>!!a.chatId)})).filter(a=>!!a.workspaceId&&!!a.workspacePath)}:null}).filter(a=>!!a),c=new Map;for(let a of b){let b=c.get(a.id);if(!b){c.set(a.id,a);continue}let d=new Map;for(let a of b.workspaces)d.set(a.workspaceId,a);for(let b of a.workspaces){let a=d.get(b.workspaceId);if(!a){d.set(b.workspaceId,b);continue}d.set(b.workspaceId,{...a,agentIds:ea([...a.agentIds,...b.agentIds]),groupAssignments:function(a){let b=new Map;for(let c of a)c.chatId&&b.set(c.chatId,c);return Array.from(b.values())}([...a.groupAssignments,...b.groupAssignments])})}c.set(a.id,{...b,name:b.name||a.name,primaryAgentId:b.primaryAgentId||a.primaryAgentId,workspaces:Array.from(d.values())})}return{version:1,channels:Array.from(c.values())}}(b.channelRegistry)}}},1118:(a,b,c)=>{"use strict";c.d(b,{T:()=>e,j:()=>d});let d=[{name:"exec",description:"Run shell commands and manage background processes.",source:"OpenClaw built-in",category:"builtin"},{name:"process",description:"Run shell commands and manage background processes.",source:"OpenClaw built-in",category:"builtin"},{name:"bash",description:"Run shell commands and manage background processes.",source:"OpenClaw built-in",category:"builtin"},{name:"code_execution",description:"Run sandboxed remote Python analysis.",source:"OpenClaw built-in",category:"builtin"},{name:"browser",description:"Control a Chromium browser (navigate, click, screenshot).",source:"OpenClaw built-in",category:"builtin"},{name:"web_search",description:"Search the web and fetch search results.",source:"OpenClaw built-in",category:"builtin"},{name:"x_search",description:"Search X posts.",source:"OpenClaw built-in",category:"builtin"},{name:"web_fetch",description:"Fetch page content.",source:"OpenClaw built-in",category:"builtin"},{name:"read",description:"Read files in the workspace.",source:"OpenClaw built-in",category:"builtin"},{name:"write",description:"Write files in the workspace.",source:"OpenClaw built-in",category:"builtin"},{name:"edit",description:"Edit files in the workspace.",source:"OpenClaw built-in",category:"builtin"},{name:"apply_patch",description:"Apply structured multi-hunk patches.",source:"OpenClaw built-in",category:"builtin"},{name:"message",description:"Send messages across channels.",source:"OpenClaw built-in",category:"builtin"},{name:"canvas",description:"Drive node canvas workflows.",source:"OpenClaw built-in",category:"builtin"},{name:"nodes",description:"Discover and target paired devices.",source:"OpenClaw built-in",category:"builtin"},{name:"cron",description:"Manage scheduled jobs.",source:"OpenClaw built-in",category:"builtin"},{name:"gateway",description:"Inspect and restart gateway services.",source:"OpenClaw built-in",category:"builtin"},{name:"image",description:"Analyze images.",source:"OpenClaw built-in",category:"builtin"},{name:"image_generate",description:"Generate or edit images.",source:"OpenClaw built-in",category:"builtin"},{name:"sessions_list",description:"Session management and sub-agent discovery.",source:"OpenClaw built-in",category:"builtin"},{name:"sessions_history",description:"Session management and sub-agent discovery.",source:"OpenClaw built-in",category:"builtin"},{name:"sessions_send",description:"Session management and sub-agent discovery.",source:"OpenClaw built-in",category:"builtin"},{name:"sessions_spawn",description:"Session management and sub-agent discovery.",source:"OpenClaw built-in",category:"builtin"},{name:"sessions_yield",description:"Session management and sub-agent discovery.",source:"OpenClaw built-in",category:"builtin"},{name:"subagents",description:"Session management and sub-agent discovery.",source:"OpenClaw built-in",category:"builtin"},{name:"session_status",description:"Session management and sub-agent discovery.",source:"OpenClaw built-in",category:"builtin"},{name:"agents_list",description:"Session management and sub-agent discovery.",source:"OpenClaw built-in",category:"builtin"}],e=[{name:"group:runtime",description:"exec, bash, process, code_execution",source:"OpenClaw docs",category:"group"},{name:"group:fs",description:"read, write, edit, apply_patch",source:"OpenClaw docs",category:"group"},{name:"group:sessions",description:"sessions_list, sessions_history, sessions_send, sessions_spawn, sessions_yield, subagents, session_status",source:"OpenClaw docs",category:"group"},{name:"group:memory",description:"memory_search, memory_get",source:"OpenClaw docs",category:"group"},{name:"group:web",description:"web_search, x_search, web_fetch",source:"OpenClaw docs",category:"group"},{name:"group:ui",description:"browser, canvas",source:"OpenClaw docs",category:"group"},{name:"group:automation",description:"cron, gateway",source:"OpenClaw docs",category:"group"},{name:"group:messaging",description:"message",source:"OpenClaw docs",category:"group"},{name:"group:nodes",description:"nodes",source:"OpenClaw docs",category:"group"},{name:"group:openclaw",description:"All built-in OpenClaw tools (excludes plugin tools).",source:"OpenClaw docs",category:"group"}]},1916:(a,b,c)=>{"use strict";function d(a,b,c){return"in_progress"===a||b?.endsWith(":main")&&"number"==typeof c&&c<36e5?"running":"completed"===a||"done"===a?"completed":"failed"===a||"error"===a?"stalled":"idle"}function e(a){return a.rpcOk?a.activeRuntime?.status==="running"||a.activeRuntime?.status==="queued"?"engaged":a.heartbeatEnabled?"monitoring":a.lastActiveAt?"ready":"standby":"offline"}function f(a){if(a.runtime)return a.runtime.taskId?"running"===a.runtime.status||"queued"===a.runtime.status?`Tracking task ${a.runtime.taskId.slice(0,8)}`:"completed"===a.runtime.status?`Recent task ${a.runtime.taskId.slice(0,8)} completed`:"cancelled"===a.runtime.status?`Recent task ${a.runtime.taskId.slice(0,8)} cancelled`:"stalled"===a.runtime.status?`Recent task ${a.runtime.taskId.slice(0,8)} stalled`:`Recent task ${a.runtime.taskId.slice(0,8)}`:"running"===a.runtime.status||"queued"===a.runtime.status?"Maintaining main session context":"Main session recently updated";return a.heartbeatEvery?`Heartbeat on ${a.heartbeatEvery}`:"standby"===a.status?"Waiting for assignment":"Ready for next turn"}function g(a,b){let c=b.filter(b=>a.includes(b.id));return c.some(a=>"engaged"===a.status)?"engaged":c.some(a=>"monitoring"===a.status)?"monitoring":c.some(a=>"ready"===a.status)?"ready":c.some(a=>"offline"===a.status)?"offline":"standby"}function h(a,b){let c=a.filter(a=>{var b;return!1!==(b=a).available&&!b.missing}),d=q([...a.map(a=>a.key.split("/")[0]||"unknown"),...(b?.auth?.providers??[]).map(a=>a?.provider).filter(r),...(b?.auth?.oauth?.providers??[]).map(a=>a?.provider).filter(r)].filter(r)),e=new Map((b?.auth?.providers??[]).filter(a=>r(a?.provider)).map(a=>[a.provider,a])),f=new Map((b?.auth?.oauth?.providers??[]).filter(a=>r(a?.provider)).map(a=>[a.provider,a])),g=o(b?.resolvedDefault??void 0),h=o(b?.defaultModel??void 0),j=g??h,k=j?function(a){let[b]=a.split("/",1);return b||null}(j):null,l=!!(j&&c.some(a=>a.key===j)),m=l?j:c[0]?.key??null,n=d.map(b=>{var c;let d,g=a.filter(a=>(a.key.split("/")[0]||"unknown")===b),h=g.some(a=>!0!==a.local),j="ollama"!==b&&h,k=e.get(b),l=f.get(b),m="ollama"===b?g.some(a=>a.local):(k?.profiles?.count??0)>0||l?.status==="ok",n=null;return l?.status==="ok"?n="OAuth connected":(k?.profiles?.count??0)>0?n=`${k?.profiles?.count} auth profile${k?.profiles?.count===1?"":"s"}`:"ollama"===b&&m?n="Local Ollama model detected.":"ollama"===b?n="Install or pull a local model to unlock this route.":h&&(n="openai-codex"===(d=(c=b).trim().toLowerCase())?"Use the ChatGPT account-based login flow in terminal to use this route.":"openrouter"===d||"openai"===d||"anthropic"===d||"xai"===d||"gemini"===d||"deepseek"===d||"mistral"===d?`Add your ${i(c)} API key in terminal to use this route.`:`Connect ${i(c)} auth in terminal to use this route.`),{provider:b,connected:m,canLogin:j,detail:n}}),p=(b?.auth?.missingProvidersInUse??[]).filter(r),s=new Set(p),t=b?.auth?.unusableProfiles?.length??0,u=[];return 0===c.length&&u.push("No available models were detected yet."),c.length>0&&!j&&u.push("Choose a default model to finish setup."),j&&!l&&(k&&s.has(k)?u.push(`Default model is set, but ${i(k)} auth is still missing.`):p.length>0?u.push(`Default model is set, but auth is still missing for: ${p.join(", ")}.`):u.push("The selected default model is not ready yet.")),p.length>0&&!j&&u.push(`Auth is still missing for: ${p.join(", ")}.`),t>0&&u.push("Some stored model auth profiles are not usable."),{ready:c.length>0&&l,defaultModel:h??null,resolvedDefaultModel:g??null,defaultModelReady:l,recommendedModelId:m??null,preferredLoginProvider:n.find(a=>a.provider===k&&!a.connected&&a.canLogin)?.provider??p.find(a=>n.some(b=>b.provider===a&&!b.connected&&b.canLogin))??n.find(a=>!a.connected&&a.canLogin)?.provider??(d.includes("openai-codex")||0===c.length?"openai-codex":null),totalModelCount:a.length,availableModelCount:c.length,localModelCount:c.filter(a=>a.local).length,remoteModelCount:c.filter(a=>!0!==a.local).length,missingModelCount:a.filter(a=>a.missing||!1===a.available).length,authProviders:n,issues:q(u)}}function i(a){let b=a.trim().toLowerCase();return"openrouter"===b?"OpenRouter":"openai-codex"===b?"OpenAI Codex":"openai"===b?"OpenAI":"anthropic"===b?"Anthropic":"ollama"===b?"Ollama":"xai"===b?"xAI":"gemini"===b?"Gemini":"deepseek"===b?"DeepSeek":"mistral"===b?"Mistral":a.split("-").map(a=>a?a[0].toUpperCase()+a.slice(1):a).join(" ")}function j(a){return a.rpcOk||a.hasOpenClawSignal?!a.rpcOk||a.warningCount>0||a.runtimeIssueCount>0?"degraded":"healthy":"offline"}function k(a){return Object.entries(a).flatMap(([a,b])=>"rejected"!==b.status?[]:[`${a}: ${b.reason instanceof Error?b.reason.message:String(b.reason)}`])}function l(a){let b=o(a.legacyInfo);if(a.latestVersion&&a.currentVersion){let b=m(a.latestVersion,a.currentVersion);return b>0?`Update available: v${a.latestVersion} is ready. Current version: v${a.currentVersion}.`:0===b?`OpenClaw is up to date on v${a.currentVersion}.`:`Running v${a.currentVersion}. Registry currently reports v${a.latestVersion}.`}return a.latestVersion?`Latest available version: v${a.latestVersion}. Current version could not be determined.`:b||(a.updateError?`Update registry check failed: ${a.updateError}`:a.currentVersion?`Running v${a.currentVersion}. Update registry status is still loading.`:void 0)}function m(a,b){let c=n(a),d=n(b),e=Math.max(c.length,d.length);for(let a=0;a<e;a+=1){let b=c[a]??0,e=d[a]??0;if("number"==typeof b&&"number"==typeof e){if(b!==e)return b-e;continue}let f=String(b),g=String(e);if(f!==g)return f.localeCompare(g)}return 0}function n(a){return a.trim().replace(/^v/i,"").split(/[^0-9a-zA-Z]+/).filter(Boolean).map(a=>/^\d+$/.test(a)?Number(a):a.toLowerCase())}function o(a){return a?.trim()||void 0}function p(a){let b=o(a);if(b)return b.split(/\r?\n/,1)[0]?.trim()||b}function q(a){return Array.from(new Set(a))}function r(a){return!!a}c.d(b,{Am:()=>q,Lp:()=>k,Nk:()=>o,OZ:()=>g,QK:()=>m,QL:()=>h,YO:()=>j,iP:()=>f,mB:()=>l,nn:()=>p,xH:()=>d,yv:()=>e})},2826:()=>{},3334:(a,b,c)=>{"use strict";c.d(b,{Z:()=>o});var d=c(7091),e=c(9802),f=c(3628);function g(a){return Array.from(new Set(a.filter(Boolean)))}function h(a){let b=new Map;for(let c of a)c.chatId&&b.set(c.chatId,c);return Array.from(b.values())}function i(a){return a.title&&a.title!==a.chatId?`${a.title} (\`${a.chatId}\`)`:`\`${a.chatId}\``}function j(a){if(!a)return"no capability snapshot";let b=[(0,f._P)(a.policy.preset)],c=a.profile.purpose?.trim();c&&b.push(c);let d=g(a.skills).slice(0,2);d.length>0&&b.push(`skills: ${d.join(", ")}`);let e=g(a.tools).slice(0,2);return e.length>0&&b.push(`tools: ${e.join(", ")}`),b.join(" \xb7 ")}function k(a){return Array.from(new Set(a.filter(Boolean)))}function l(a){let b=new Map;for(let c of a)c.chatId&&b.set(c.chatId,c);return Array.from(b.values())}function m(a,b,c){let e=new Map(a?.agents.map(a=>[a.id,(0,d.CK)(a)])??[]),f=new Map(a?.agents.map(a=>[a.id,a])??[]);return k(b.filter(a=>!c.includes(a))).map(a=>{let b=f.get(a)??null;return{agentId:a,name:e.get(a)??a,summary:function(a){if(!a)return"no capability snapshot";let b=[(0,d.CK)(a)],c=a.profile.purpose?.trim();c&&b.push(c);let e=k(a.skills).slice(0,2);e.length>0&&b.push(`skills: ${e.join(", ")}`);let f=k(a.tools).slice(0,2);return f.length>0&&b.push(`tools: ${f.join(", ")}`),b.join(" \xb7 ")}(b)}})}function n(a){let b=(0,e.S)(a.chatId),c=b?.kind==="role"?`@${b.targetId}`:b?.kind==="thread"?`Thread ${b.targetId}`:b?.kind==="channel"?`#${b.targetId}`:a.chatId;return{routeId:a.chatId,label:a.title?.trim()||c,kind:b?.kind??"channel",guildId:b?.guildId??null}}function o(a,b,c=b?.channelRegistry??null){let e=[function(a){if(!a||0===a.primaryChannels.length&&0===a.ownedGroups.length&&0===a.delegateChannels.length)return null;let b=["## Telegram coordination"];if(b.push("- Telegram credentials are managed by OpenClaw for the listed channels. Do not ask the operator for `TELEGRAM_BOT_TOKEN` or `channels.telegram.botToken` when sending to listed groups."),b.push('- To send or post, call the `message` tool with `action: "send"`, `channel: "telegram"`, `target: "<chatId>"`, and the exact message text. Use the listed chat id as `target`.'),b.push("- If sending fails, report the actual tool error instead of inventing a missing-token error."),a.primaryChannels.length>0){for(let c of(b.push("- You are the public Telegram fallback for these channels:"),a.primaryChannels)){let a=c.groups.length>0?c.groups.map(i).join(", "):"no allowed groups yet";if(b.push(` - ${c.channelName} (\`${c.channelId}\`) \xb7 fallback groups: ${a}.`),c.peers.length>0)for(let a of(b.push(" - Internal assistants:"),c.peers))b.push(` - ${a.name} (\`${a.agentId}\`) \xb7 ${a.summary}.`)}b.push("- Keep public Telegram replies under your own voice for unassigned groups, even when you ask another agent for help."),b.push("- For specialist help, call another agent from the workspace terminal with:"),b.push("```bash"),b.push('node .openclaw/tools/telegram-delegate-agent.mjs --agent <delegate-agent-id> --message "Summarize what I need from you"'),b.push("```"),b.push("- Use delegate turns for internal research, drafting, or analysis only. Do not ask them to answer Telegram directly."),b.push("- After a delegate responds, decide what to share publicly and send the final Telegram reply yourself.")}if(a.ownedGroups.length>0){for(let c of(b.push("- You are the public Telegram voice for these assigned groups:"),a.ownedGroups))if(b.push(` - ${c.channelName} (\`${c.channelId}\`) \xb7 ${c.title??c.chatId} (\`${c.chatId}\`) \xb7 primary ${c.primaryAgentName} (\`${c.primaryAgentId}\`).`),c.peers.length>0)for(let a of(b.push(" - Internal assistants for this group:"),c.peers))b.push(` - ${a.name} (\`${a.agentId}\`) \xb7 ${a.summary}.`);b.push("- Reply directly to those groups as the public voice. Use other agents only for internal help.")}if(a.delegateChannels.length>0){for(let c of(b.push("- You can assist these Telegram admin channels when the primary agent asks:"),a.delegateChannels)){let a=c.groups.length>0?c.groups.map(i).join(", "):"no allowed groups yet";if(b.push(` - ${c.channelName} (\`${c.channelId}\`) \xb7 primary ${c.primaryAgentName} (\`${c.primaryAgentId}\`) \xb7 groups: ${a}.`),c.peers.length>0)for(let a of(b.push(" - Nearby assistants:"),c.peers))b.push(` - ${a.name} (\`${a.agentId}\`) \xb7 ${a.summary}.`)}b.push("- When helping with Telegram work for groups not assigned to you, return concise internal findings or draft language. Do not speak as the public Telegram agent for those unassigned groups.")}return b.join("\n")}(function(a,b,c=b?.channelRegistry??null){if(!c)return null;let e=new Map(b?.agents.map(a=>[a.id,(0,d.CK)(a)])??[]),f=new Map(b?.agents.map(a=>[a.id,a])??[]),i=f.get(a)??null,k=i?.workspaceId??null,l=[],m=[],n=[];for(let b of c.channels.filter(a=>"telegram"===a.type)){let c=b.workspaces.filter(a=>a.workspaceId===k);if(0===c.length)continue;let i=h(c.flatMap(a=>a.groupAssignments.filter(a=>!1!==a.enabled))).map(a=>({chatId:a.chatId,title:a.title??null})),o=h(c.flatMap(b=>b.groupAssignments.filter(b=>!1!==b.enabled&&b.agentId===a))),p=i.filter(a=>!o.some(b=>b.chatId===a.chatId)&&!c.some(b=>b.groupAssignments.some(b=>!1!==b.enabled&&b.chatId===a.chatId&&b.agentId)));if(b.primaryAgentId===a){let d=g(c.flatMap(b=>b.agentIds.filter(b=>b!==a))).map(a=>{let b=f.get(a)??null;return{agentId:a,name:e.get(a)??a,summary:j(b)}});l.push({channelId:b.id,channelName:b.name,groups:p,peers:d})}for(let d of o){let h=g(c.flatMap(c=>c.agentIds.filter(c=>c!==a&&c!==b.primaryAgentId))).map(a=>{let b=f.get(a)??null;return{agentId:a,name:e.get(a)??a,summary:j(b)}});m.push({channelId:b.id,channelName:b.name,chatId:d.chatId,title:d.title??null,primaryAgentId:b.primaryAgentId??a,primaryAgentName:e.get(b.primaryAgentId??a)??b.primaryAgentId??a,peers:h})}if(b.primaryAgentId&&b.primaryAgentId!==a&&0===o.length){let h=f.get(b.primaryAgentId)??null,i=g(c.flatMap(c=>c.agentIds.filter(c=>c!==b.primaryAgentId&&c!==a))).map(a=>{let b=f.get(a)??null;return{agentId:a,name:e.get(a)??a,summary:j(b)}});n.push({channelId:b.id,channelName:b.name,groups:p,peers:i,primaryAgentId:b.primaryAgentId,primaryAgentName:e.get(b.primaryAgentId)??(h?(0,d.CK)(h):b.primaryAgentId)})}}return{primaryChannels:l.sort((a,b)=>a.channelName.localeCompare(b.channelName)),ownedGroups:m.sort((a,b)=>{let c=`${a.channelName}:${a.title??a.chatId}`,d=`${b.channelName}:${b.title??b.chatId}`;return c.localeCompare(d)}),delegateChannels:n.sort((a,b)=>a.channelName.localeCompare(b.channelName))}}(a,b,c)),function(a){if(!a||0===a.primaryChannels.length&&0===a.ownedRoutes.length&&0===a.delegateChannels.length)return null;let b=["## Discord coordination"];if(a.primaryChannels.length>0){for(let c of(b.push("- You are the public Discord fallback for these channels:"),a.primaryChannels)){let a=c.routes.length>0?c.routes.map(a=>`${a.label} (\`${a.routeId}\`)`).join(", "):"no allowed routes yet";if(b.push(` - ${c.channelName} (\`${c.channelId}\`) \xb7 fallback routes: ${a}.`),c.peers.length>0)for(let a of(b.push(" - Internal assistants:"),c.peers))b.push(` - ${a.name} (\`${a.agentId}\`) \xb7 ${a.summary}.`)}b.push("- Keep public Discord replies under your own voice for unassigned routes, even when you ask another agent for help.")}if(a.ownedRoutes.length>0){for(let c of(b.push("- You are the public Discord voice for these assigned routes:"),a.ownedRoutes))if(b.push(` - ${c.channelName} (\`${c.channelId}\`) \xb7 ${c.label} (\`${c.routeId}\`) \xb7 primary ${c.primaryAgentName} (\`${c.primaryAgentId}\`).`),c.peers.length>0)for(let a of(b.push(" - Internal assistants for this route:"),c.peers))b.push(` - ${a.name} (\`${a.agentId}\`) \xb7 ${a.summary}.`);b.push("- Reply directly to those routes as the public voice. Use other agents only for internal help.")}if(a.delegateChannels.length>0){for(let c of(b.push("- You can assist these Discord admin channels when the primary agent asks:"),a.delegateChannels)){let a=c.routes.length>0?c.routes.map(a=>`${a.label} (\`${a.routeId}\`)`).join(", "):"no allowed routes yet";if(b.push(` - ${c.channelName} (\`${c.channelId}\`) \xb7 primary ${c.primaryAgentName} (\`${c.primaryAgentId}\`) \xb7 routes: ${a}.`),c.peers.length>0)for(let a of(b.push(" - Nearby assistants:"),c.peers))b.push(` - ${a.name} (\`${a.agentId}\`) \xb7 ${a.summary}.`)}b.push("- When helping with Discord work, return concise internal findings or draft language. Do not speak as the public Discord agent.")}return b.join("\n")}(function(a,b,c=b?.channelRegistry??null){if(!c)return null;let e=b?.agents.find(b=>b.id===a)??null,f=e?.workspaceId??null,g=[],h=[],i=[];for(let e of c.channels.filter(a=>"discord"===a.type)){var j,k,o,p;let c=e.workspaces.filter(a=>a.workspaceId===f);if(0===c.length)continue;let q=l(c.flatMap(a=>a.groupAssignments.filter(a=>!1!==a.enabled))).map(n),r=l(c.flatMap(b=>b.groupAssignments.filter(b=>!1!==b.enabled&&b.agentId===a))).map(n),s=q.filter(a=>!r.some(b=>b.routeId===a.routeId)&&!c.some(b=>b.groupAssignments.some(b=>!1!==b.enabled&&b.chatId===a.routeId&&b.agentId)));if(e.primaryAgentId===a){let d=m(b,c.flatMap(b=>b.agentIds.filter(b=>b!==a)),[a]);g.push({channelId:e.id,channelName:e.name,routes:s,peers:d})}for(let f of r){let g=m(b,c.flatMap(b=>b.agentIds.filter(b=>b!==a&&b!==e.primaryAgentId)),[a,e.primaryAgentId??""]);h.push({channelId:e.id,channelName:e.name,routeId:f.routeId,label:f.label,kind:f.kind,guildId:f.guildId,primaryAgentId:e.primaryAgentId??a,primaryAgentName:(j=b?.agents.find(b=>b.id===(e.primaryAgentId??a))??null,k=e.primaryAgentId??a,j?(0,d.CK)(j):k),peers:g})}if(e.primaryAgentId&&e.primaryAgentId!==a){let f=m(b,c.flatMap(b=>b.agentIds.filter(b=>b!==e.primaryAgentId&&b!==a)),[a,e.primaryAgentId]);i.push({channelId:e.id,channelName:e.name,routes:s,peers:f,primaryAgentId:e.primaryAgentId,primaryAgentName:(o=b?.agents.find(a=>a.id===e.primaryAgentId)??null,p=e.primaryAgentId,o?(0,d.CK)(o):p)})}}return{primaryChannels:g.sort((a,b)=>a.channelName.localeCompare(b.channelName)),ownedRoutes:h.sort((a,b)=>{let c=`${a.channelName}:${a.label}`,d=`${b.channelName}:${b.label}`;return c.localeCompare(d)}),delegateChannels:i.sort((a,b)=>a.channelName.localeCompare(b.channelName))}}(a,b,c))].filter(a=>!!a);return e.length>0?e.join("\n\n"):null}},3442:()=>{},3628:(a,b,c)=>{"use strict";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:["project-researcher","project-builder","project-analyst"]}},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}))},4072:(a,b,c)=>{"use strict";c.d(b,{b9:()=>f,kS:()=>e,rT:()=>d}),c(3628);let d=["IDENTITY.md","SOUL.md","TOOLS.md","HEARTBEAT.md"];function e(a){let b=a.split(/\r?\n/);return{name:h(b,"Name"),emoji:h(b,"Emoji"),theme:h(b,"Theme"),avatar:h(b,"Avatar")}}function f(a){return["# IDENTITY.md\n",`- **Name:** ${a.name}`,`- **Emoji:** ${g(a.emoji)??""}`,`- **Theme:** ${g(a.theme)??""}`,`- **Avatar:** ${g(a.avatar)??""}`,"\n## Role",a.presetLabel??"Agent","\n## Notes",a.presetDescription??"Pragmatic, concise, workspace-grounded."].join("\n")}function g(a){if("string"!=typeof a)return null;let b=a.trim();return b.length>0?b:null}function h(a,b){let c=RegExp(`^\\s*-\\s*\\*\\*${b}:\\*\\*\\s*(.*)\\s*$`,"i"),d=a.find(a=>c.test(a.trim()));var e=d?.match(c)?.[1]??null;if(null===e)return null;let f=e.replace(/\r\n/g,"\n").replace(/\*\*(.*?)\*\*/g,"$1").replace(/\[(.*?)\]\((.*?)\)/g,"$1").replace(/\s+/g," ").trim();return f.length>0?f:null}},4414:(a,b,c)=>{"use strict";c.d(b,{Dm:()=>g,gP:()=>h});var d=c(7091);let e=/^\[Retry after[^\]]+\]\s*/i;function f(a){return(0,d.ho)(a).replace(e,"").replace(/\s+/g," ").trim().toLowerCase()}function g(a,b){let c=f(b),d=f(a);return!!c&&!!d&&(d===c||d.startsWith(`${c} `))}function h(a,b,c={}){if(c.agentId&&a.agentId!==c.agentId||"number"==typeof c.submittedAt&&(a.updatedAt??0)<c.submittedAt-1500)return!1;let d=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=f(b);return c.length>0?c:null}(a);return!!d&&g(d,b)}},4497:(a,b,c)=>{"use strict";c.d(b,{MY:()=>e,Yx:()=>f});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){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 f(a){return(d.get(a)??{provider:a,label:e(a),kind:"chat",description:"OpenClaw-managed integration surface.",supportsProvisioning:!1,provisionFields:[],supportsRouteDiscovery:!1,providerManagedByOpenClaw:!0}).kind}},4853:(a,b,c)=>{"use strict";c.d(b,{Iy:()=>m,JH:()=>e,Q4:()=>j,Q5:()=>k,nt:()=>i,uZ:()=>l,yA:()=>f});var d=c(3628);let e=["AGENTS.md","SOUL.md","IDENTITY.md","TOOLS.md","HEARTBEAT.md"],f=["MEMORY.md"],g={software:"Software project",frontend:"Frontend app",backend:"Backend/API",research:"Research",content:"Content/Growth"},h=["Use repository-local scripts or documented commands for repeatable workflows.","Update this file when the project exposes a cleaner build, test, or release path."];function i(a,b){return n(a,b).map(a=>a.path)}function j(a,b){var c;let d,f=new Map((d=[{id:"agents",label:"AGENTS.md",relativePath:"AGENTS.md",kind:"file",headings:["Workspace","Team","Customize","Safety defaults","Daily memory","Output"]},{id:"soul",label:"SOUL.md",relativePath:"SOUL.md",kind:"file",headings:["My Purpose","How I Operate","My Quirks","Active Focus"]},{id:"identity",label:"IDENTITY.md",relativePath:"IDENTITY.md",kind:"file",headings:["Role"]},{id:"tools",label:"TOOLS.md",relativePath:"TOOLS.md",kind:"file",headings:["Examples","Notes"]},{id:"heartbeat",label:"HEARTBEAT.md",relativePath:"HEARTBEAT.md",kind:"file",headings:[]},{id:"memory-md",label:"MEMORY.md",relativePath:"MEMORY.md",kind:"file",headings:["Current brief","Stable facts"]},{id:"memory-blueprint",label:"memory/blueprint.md",relativePath:"memory/blueprint.md",kind:"file",headings:["Outcome","Constraints","Unknowns"]},{id:"memory-decisions",label:"memory/decisions.md",relativePath:"memory/decisions.md",kind:"file",headings:["Template"]},{id:"docs-brief",label:"docs/brief.md",relativePath:"docs/brief.md",kind:"file",headings:["Objective","Success signals","Open questions"]},{id:"docs-architecture",label:"docs/architecture.md",relativePath:"docs/architecture.md",kind:"file",headings:["Current shape","Dependencies","Risks"]},{id:"deliverables-readme",label:"deliverables/README.md",relativePath:"deliverables/README.md",kind:"file",headings:["Deliverables"]}],"frontend"===(c=a??null)&&d.push({id:"docs-ux-notes",label:"docs/ux-notes.md",relativePath:"docs/ux-notes.md",kind:"file",headings:["UX Notes"]}),"backend"===c&&d.push({id:"docs-service-map",label:"docs/service-map.md",relativePath:"docs/service-map.md",kind:"file",headings:["Service Map"]}),"research"===c&&d.push({id:"docs-research-plan",label:"docs/research-plan.md",relativePath:"docs/research-plan.md",kind:"file",headings:["Research Plan"]}),"content"===c&&d.push({id:"docs-content-brief",label:"docs/content-brief.md",relativePath:"docs/content-brief.md",kind:"file",headings:["Content Brief"]}),d).map(a=>[a.relativePath,a])),g=a=>a.map(a=>f.get(a)).filter(Boolean),h=[{id:"core",title:"Core bootstrap",description:"Required for every workspace and shared by all agents.",enabled:!0,resources:g(e)},{id:"memory",title:"Memory",description:"Durable notes and decisions that survive across sessions.",enabled:b.generateMemory,resources:b.generateMemory?g(["MEMORY.md","memory/blueprint.md","memory/decisions.md"]):[]},{id:"starter",title:"Starter docs",description:"Planning, architecture, and handoff docs used for the first pass.",enabled:b.generateStarterDocs,resources:b.generateStarterDocs?g(["docs/brief.md","docs/architecture.md","deliverables/README.md",..."frontend"===a?["docs/ux-notes.md"]:"backend"===a?["docs/service-map.md"]:"research"===a?["docs/research-plan.md"]:"content"===a?["docs/content-brief.md"]:[]]):[]}];return{template:a??null,rules:b,sections:h,resources:h.flatMap(a=>a.resources)}}function k(a){let b=n(a.template,a.rules),c=new Map(m(a.docOverrides).map(a=>[a.path,a.content]));return b.map(b=>{let d=b.render(a),e=c.has(b.path);return{path:b.path,title:b.title,description:b.description,category:b.category,baseContent:d,content:e?c.get(b.path)??"":d,overridden:e}})}function l(a){let b=k(a).map(a=>({...a,generated:!0})),c=new Set(b.map(a=>a.path));return[...b,...m(a.docOverrides).filter(a=>!c.has(a.path)).map(a=>{var b;return{path:a.path,title:a.path,description:"Existing workspace file.",category:(b=a.path).startsWith("memory/")?"memory":b.startsWith("docs/")?"docs":b.startsWith("deliverables/")?"deliverables":"core",baseContent:a.content,content:a.content,overridden:!1,generated:!1}})]}function m(a){let b=new Map;for(let c of a??[]){let a=c.path.trim();a&&b.set(a,c.content)}return Array.from(b.entries()).map(([a,b])=>({path:a,content:b}))}function n(a,b){let c=[{path:"AGENTS.md",title:"AGENTS.md",description:"Shared operating instructions for all agents.",category:"core",render:o},{path:"SOUL.md",title:"SOUL.md",description:"Purpose, operating style, and active focus.",category:"core",render:({template:a,brief:b,contextSources:c})=>{var d,e,f;return d=a,e=b,f=c,`# SOUL
256
256
 
257
257
  ## My Purpose
258
258
  Help this ${g[d].toLowerCase()} workspace turn intent into real outcomes with pragmatic execution, verification, and durable memory.
@@ -407,6 +407,6 @@ ${b||"Clarify the project goal, definition of done, constraints, and success sig
407
407
  ${c.map(e).join("\n")}`),d.length>0&&f.push(`## Assumptions
408
408
  ${d.map(e).join("\n")}`),f.length>0?`
409
409
  ${f.join("\n\n")}
410
- `:""}},5612:(a,b,c)=>{"use strict";c.d(b,{GH:()=>l,P0:()=>j,eY:()=>f,hh:()=>i,sg:()=>k});var d=c(3628),e=c(4853);let f={workspaceOnly:!0,generateStarterDocs:!0,generateMemory:!0,kickoffMission:!0},g={software:{label:"Software project",description:"Default project template for engineering delivery.",icon:"\uD83D\uDEE0"},frontend:{label:"Frontend app",description:"UI and experience work with browser-aware support.",icon:"\uD83C\uDFA8"},backend:{label:"Backend/API",description:"Services, infrastructure, and backend-oriented workflows.",icon:"⚙️"},research:{label:"Research",description:"Investigation-heavy workspace with synthesis and memory capture.",icon:"\uD83E\uDDE0"},content:{label:"Content/Growth",description:"Messaging, content production, campaign review, and analysis.",icon:"\uD83D\uDCE3"}},h={software:[{id:"builder",role:"Builder",name:"Builder",emoji:"\uD83D\uDEE0️",theme:"amber",skillId:"project-builder",isPrimary:!0,description:"Implements requested changes and drives delivery forward."},{id:"reviewer",role:"Reviewer",name:"Reviewer",emoji:"\uD83D\uDD0D",theme:"rose",skillId:"project-reviewer",description:"Reviews work for correctness, regressions, and product risk."},{id:"tester",role:"Tester",name:"Tester",emoji:"\uD83E\uDDEA",theme:"emerald",skillId:"project-tester",description:"Validates behavior, tests, and environment assumptions."},{id:"learner",role:"Learner",name:"Learner",emoji:"\uD83E\uDDE0",theme:"cyan",skillId:"project-learner",description:"Consolidates durable project knowledge and memory."}],frontend:[{id:"builder",role:"Builder",name:"Builder",emoji:"\uD83D\uDEE0️",theme:"amber",skillId:"project-builder",isPrimary:!0,description:"Implements UI and frontend product work."},{id:"reviewer",role:"Reviewer",name:"Reviewer",emoji:"\uD83D\uDD0D",theme:"rose",skillId:"project-reviewer",description:"Reviews interaction, correctness, and regression risk."},{id:"tester",role:"Tester",name:"Tester",emoji:"\uD83E\uDDEA",theme:"emerald",skillId:"project-tester",description:"Checks behavior, responsive states, and verification gaps."},{id:"learner",role:"Learner",name:"Learner",emoji:"\uD83E\uDDE0",theme:"cyan",skillId:"project-learner",description:"Maintains stable product and implementation knowledge."},{id:"browser",role:"Browser Agent",name:"Browser Agent",emoji:"\uD83C\uDF10",theme:"blue",skillId:"project-browser",description:"Exercises browser flows, captures UI evidence, and validates user paths."}],backend:[{id:"builder",role:"Builder",name:"Builder",emoji:"\uD83D\uDEE0️",theme:"amber",skillId:"project-builder",isPrimary:!0,description:"Implements service, API, and infrastructure changes."},{id:"reviewer",role:"Reviewer",name:"Reviewer",emoji:"\uD83D\uDD0D",theme:"rose",skillId:"project-reviewer",description:"Catches correctness, data handling, and operational risks."},{id:"tester",role:"Tester",name:"Tester",emoji:"\uD83E\uDDEA",theme:"emerald",skillId:"project-tester",description:"Validates APIs, background jobs, migrations, and failure paths."},{id:"learner",role:"Learner",name:"Learner",emoji:"\uD83E\uDDE0",theme:"cyan",skillId:"project-learner",description:"Maintains architecture notes and durable operational memory."}],research:[{id:"researcher",role:"Research Lead",name:"Research Lead",emoji:"\uD83D\uDD2C",theme:"violet",skillId:"project-researcher",isPrimary:!0,description:"Runs investigations, frames questions, and synthesizes findings."},{id:"reviewer",role:"Reviewer",name:"Reviewer",emoji:"\uD83D\uDD0D",theme:"rose",skillId:"project-reviewer",description:"Pressure-tests claims, assumptions, and interpretation quality."},{id:"learner",role:"Archivist",name:"Archivist",emoji:"\uD83E\uDDE0",theme:"cyan",skillId:"project-learner",description:"Distills durable research notes, memory, and takeaways."}],content:[{id:"strategist",role:"Strategist",name:"Strategist",emoji:"\uD83D\uDCE3",theme:"orange",skillId:"project-strategist",isPrimary:!0,description:"Frames audience, goals, positioning, and campaign direction."},{id:"writer",role:"Writer",name:"Writer",emoji:"✍️",theme:"sky",skillId:"project-writer",description:"Drafts content, messaging, and campaign assets."},{id:"reviewer",role:"Reviewer",name:"Reviewer",emoji:"\uD83D\uDD0D",theme:"rose",skillId:"project-reviewer",description:"Edits for clarity, quality, and consistency."},{id:"analyst",role:"Analyst",name:"Analyst",emoji:"\uD83D\uDCC8",theme:"emerald",skillId:"project-analyst",description:"Tracks results, experiments, and performance insights."}]};function i(a){return g[a]}function j(a,b,c){let e=h[a];if("solo"===b){let a=e.find(a=>a.isPrimary)??e[0];return[{...a,name:k(c,a.role,"Builder"===a.role?"Default Agent":a.name),policy:(0,d.g0)("browser"===a.id?"browser":"worker"),enabled:!0}]}return e.map(a=>({id:a.id,role:a.role,name:a.isPrimary?k(c,a.role,a.name):a.name,emoji:a.emoji,theme:a.theme,skillId:a.skillId,modelId:a.modelId,isPrimary:!!a.isPrimary,policy:(0,d.g0)("browser"===a.id?"browser":"worker"),enabled:!0}))}function k(a,b,c){let d=function(a){let b=a?.trim();if(!b)return"";let c=(!/\s/.test(b)&&b.includes(".")?b.split(".")[0]:b).replace(/[^A-Za-z0-9\u00C0-\u024F]+/g," ").trim();return c?c.split(/\s+/).filter(Boolean).map(a=>a[0].toUpperCase()+a.slice(1)).join(" "):""}(a);if(!d)return c;let e=b.trim();return e?`${d} ${e}`:d}function l(a,b){return(0,e.nt)(a,b)}},5793:(a,b,c)=>{"use strict";c.d(b,{Jw:()=>r,SI:()=>n,V9:()=>k,WU:()=>m,pY:()=>l,qv:()=>o,xZ:()=>p});var d=c(1455),e=c(8161),f=c.n(e),g=c(6760),h=c.n(g),i=c(7091),j=c(4414);async function k(a,b,c,e){let f=e(a,b,c);if(!a.key?.endsWith(":main")||!a.agentId||!a.sessionId)return[f];let g=c.find(b=>b.id===a.agentId),h=b.find(b=>b.id===a.agentId),j=await m(a.agentId,a.sessionId,g?.workspace||h?.workspace);if(!j)return[f];try{let a=await (0,d.readFile)(j,"utf8"),b=n(a,f,g?.workspace||h?.workspace).filter(a=>!a.prompt.toLowerCase().startsWith("read heartbeat.md if it exists")),c=p(b);if(0===b.length)return[f];return b.slice(-6).reverse().map(a=>(function(a,b,c=b.toolNames){var d,e;let f,g=Date.parse(b.updatedAt),h=(d=b.prompt,e=a.agentId,(f=d.trim())&&(0,i.$m)(f,38)||`${y(e)} run`),j=b.warningSummary?w(`Completed with fallback: ${b.warningSummary}`,90):b.finalText?w(b.finalText,90):"stalled"===b.status?"Run stalled":"Main session run";return{id:`runtime:${a.sessionId}:${b.id}`,source:"turn",key:`${a.key}:turn:${b.id}`,title:h,subtitle:j,status:b.status,updatedAt:Number.isNaN(g)?a.updatedAt:g,ageMs:Number.isNaN(g)?a.ageMs:Math.max(Date.now()-g,0),agentId:a.agentId,workspaceId:a.workspaceId,modelId:a.modelId,sessionId:a.sessionId,taskId:a.taskId,runId:b.runId||b.id,toolNames:c,tokenUsage:b.tokenUsage,metadata:{...a.metadata,turnId:b.id,turnPrompt:b.prompt,stage:"main.turn",historical:"running"!==b.status,createdFiles:b.createdFiles,warnings:b.warnings,warningSummary:b.warningSummary}}})(f,a,c))}catch{return[f]}}async function l(a,b){if("fallback"===b.mode){var c;let b;return c=a,b=new Date().toISOString(),{runtimeId:c.id,sessionId:c.sessionId,taskId:c.taskId,status:"available",finalText:"Fallback mode is active. Connect a real OpenClaw gateway to inspect live runtime output.",finalTimestamp:b,stopReason:"fallback",errorMessage:null,items:[{id:`${c.id}:fallback`,role:"assistant",timestamp:b,text:"Fallback mode is active. Connect a real OpenClaw gateway to inspect live runtime output.",stopReason:"fallback",isError:!1}],createdFiles:[],warnings:[],warningSummary:null}}if(!a.sessionId||!a.agentId)return q(a,"This runtime does not expose a session transcript yet.");let e=b.agents.find(b=>b.id===a.agentId),f=await m(a.agentId,a.sessionId,e?.workspacePath);if(!f)return q(a,"No transcript file was found for this runtime session.");try{let b=await (0,d.readFile)(f,"utf8");return r(a,b,e?.workspacePath)}catch(b){return{runtimeId:a.id,sessionId:a.sessionId,taskId:a.taskId,status:"error",finalText:null,finalTimestamp:null,stopReason:null,errorMessage:b instanceof Error?b.message:"Unable to read runtime transcript.",items:[],createdFiles:[],warnings:[],warningSummary:null}}}async function m(a,b,c){for(let e of[h().join(f().homedir(),".openclaw","agents",a,"sessions",`${b}.jsonl`),c?h().join(c,".openclaw","agents",a,"sessions",`${b}.jsonl`):null].filter(Boolean))try{return await (0,d.access)(e),e}catch{continue}let e=await u(a,b,c);return e||null}function n(a,b,c){let d=a.split(/\r?\n/).filter(Boolean),e=[],f=c,g=null;for(let a of d)try{let c=JSON.parse(a);if("session"===c.type&&"string"==typeof c.cwd&&c.cwd.trim()){f=c.cwd.trim();continue}if("custom"===c.type&&"openclaw:prompt-error"===c.customType&&g){g.runId||=c.data?.runId,g.updatedAt=c.timestamp||g.updatedAt,g.errorMessage||=c.data?.error||null;continue}if("message"!==c.type||!c.message?.role)continue;let d=c.message.role;if("assistant"!==d&&"toolResult"!==d&&"user"!==d)continue;let i=function(a=[]){return a.flatMap(a=>"text"===a.type&&a.text?[a.text]:"thinking"===a.type&&a.thinking?[`[thinking] ${a.thinking}`]:[]).join("\n\n").trim()}(c.message.content),j=c.message.errorMessage??null,k=function(a,b,c,d){if("toolResult"!==a||!0===b.isError||d)return null;let e=b.details?.exitCode;if("number"!=typeof e||0===e)return null;let f=(b.details?.aggregated||c).split(/\r?\n/).map(a=>a.trim()).filter(Boolean).filter(a=>!/^\(Command exited with code \d+\)$/i.test(a));return w((f.find(a=>!a.startsWith("[WARNING]"))||f.find(a=>a.startsWith("[WARNING]"))||`${b.toolName||"tool"} exited with code ${e}`).replace(/^\[WARNING\]\s*/i,"").trim()||`${b.toolName||"tool"} exited with code ${e}`,160)}(d,c.message,i,j);if(!i&&!j&&!("assistant"===d&&c.message.content?.some(a=>"toolCall"===a.type)||"toolResult"===d&&"string"==typeof c.message.toolName&&c.message.toolName.trim()))continue;let l={id:c.id||`${d}-${Date.now()}`,role:d,timestamp:c.timestamp||new Date().toISOString(),text:i||j||"",toolName:"toolResult"===d?c.message.toolName?.trim()||x(i):void 0,stopReason:"assistant"===d?c.message.stopReason??null:null,errorMessage:j,isWarning:!!k,isError:!!j||!0===c.message.isError||"error"===c.message.stopReason||"aborted"===c.message.stopReason};if("user"===d){g&&e.push(t(g)),g={id:c.id||`turn-${e.length}`,prompt:l.text.replace(/^Sender \(untrusted metadata\):[\s\S]*?```[\s\S]*?```\s*/i,"").replace(/^\[[^\]]+\]\s*/i,"").replace(/\s+/g," ").trim(),sessionId:b.sessionId,runId:void 0,timestamp:l.timestamp,updatedAt:l.timestamp,items:[l],tokenUsage:void 0,errorMessage:null,createdFiles:[],warnings:[],toolNames:[],pendingCreatedFiles:new Map,pendingToolNames:new Set};continue}if(!g)continue;if("assistant"===d&&Array.isArray(c.message.content))for(let a of c.message.content){if("toolCall"!==a.type||("string"==typeof a.name&&a.name.trim()&&g.pendingToolNames.add(a.name.trim()),"write"!==a.name))continue;let b="string"==typeof a.arguments?.path?a.arguments.path.trim():"";if(!b)continue;let d=function(a,b){let c=a.trim();if(!c)return null;let d=h().isAbsolute(c)?h().normalize(c):b?h().resolve(b,c):null;if(!d)return null;let e=b&&d.startsWith(`${h().resolve(b)}${h().sep}`)?h().relative(h().resolve(b),d)||h().basename(d):d;return{path:d,displayPath:e}}(b,f);d&&g.pendingCreatedFiles.set(a.id||`${c.id||"toolCall"}:${b}`,{path:d.path,displayPath:d.displayPath})}if(g.items.push(l),g.updatedAt=l.timestamp,g.errorMessage||=j,k&&!g.warnings.includes(k)&&g.warnings.push(k),"toolResult"===d&&!0!==c.message.isError&&"write"===c.message.toolName&&"string"==typeof c.message.toolCallId){let a=g.pendingCreatedFiles.get(c.message.toolCallId);a&&(g.createdFiles.push(a),g.pendingCreatedFiles.delete(c.message.toolCallId))}if("toolResult"===d){let a=c.message.toolName?.trim()||x(l.text)?.trim()||null;a&&g.pendingToolNames.add(a)}if("assistant"===d&&c.message.usage){let a=c.message.usage;g.tokenUsage={input:a.input??a.prompt_tokens??0,output:a.output??a.completion_tokens??0,total:a.totalTokens??a.total_tokens??(a.input??a.prompt_tokens??0)+(a.output??a.completion_tokens??0),cacheRead:a.cacheRead??0}}}catch{continue}return g&&e.push(t(g)),e}function o(a,b){let c="string"==typeof a.metadata.dispatchSubmittedAt?Date.parse(a.metadata.dispatchSubmittedAt):NaN;return Number.isNaN(c)?b:b.filter(a=>{let b=Date.parse(a.updatedAt||a.timestamp);return!Number.isNaN(b)&&b>=c-1500})}function p(a){return v(a.flatMap(a=>a.toolNames))}function q(a,b){return{runtimeId:a.id,sessionId:a.sessionId,taskId:a.taskId,status:"missing",finalText:null,finalTimestamp:null,stopReason:null,errorMessage:b,items:[],createdFiles:[],warnings:[],warningSummary:null}}function r(a,b,c){let d=o(a,n(b,a,c));if("turn"===a.source){let b="string"==typeof a.metadata.turnId?a.metadata.turnId:null,c=b?d.find(a=>a.id===b):function(a,b){let c="string"==typeof a.metadata.mission?a.metadata.mission:null;if(!c)return null;let d=b.filter(a=>(0,j.Dm)(a.prompt,c));if(0===d.length)return null;let e=a.updatedAt??0;return d.sort((a,b)=>{let c=Date.parse(a.updatedAt),d=Date.parse(b.updatedAt);return Math.abs((Number.isNaN(c)?0:c)-e)-Math.abs((Number.isNaN(d)?0:d)-e)})[0]}(a,d);if(c)return s(a,c)}let e=d.at(-1);return e?s(a,e):{runtimeId:a.id,sessionId:a.sessionId,taskId:a.taskId,status:"missing",finalText:null,finalTimestamp:null,stopReason:null,errorMessage:"No transcript entries were found for this runtime.",items:[],createdFiles:[],warnings:[],warningSummary:null}}function s(a,b){return{runtimeId:a.id,sessionId:a.sessionId,taskId:a.taskId,status:b.items.length>0?"available":"missing",finalText:b.finalText,finalTimestamp:b.finalTimestamp,stopReason:b.stopReason,errorMessage:b.errorMessage,items:b.items.slice(-12),createdFiles:b.createdFiles,warnings:b.warnings,warningSummary:b.warningSummary}}function t(a){let{pendingCreatedFiles:b,pendingToolNames:c,...d}=a,e=[...a.items].reverse().find(a=>"assistant"===a.role&&(a.text.trim().length>0||a.errorMessage)),f=a.items.at(-1),g=e?.stopReason??null,h=!!a.errorMessage||e?.isError===!0||"error"===g||"aborted"===g,i=v(a.warnings),j=h?"stalled":f?.role==="assistant"&&f.stopReason&&"toolUse"!==f.stopReason?"completed":"running";return{...d,status:j,finalText:e?.text??null,finalTimestamp:e?.timestamp??null,stopReason:g,errorMessage:a.errorMessage||e?.errorMessage||null,createdFiles: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}(a.createdFiles),warnings:i,warningSummary:i[0]??null,toolNames:v([...a.pendingToolNames])}}async function u(a,b,c){for(let e of[h().join(f().homedir(),".openclaw","agents",a,"sessions","sessions.json"),c?h().join(c,".openclaw","agents",a,"sessions","sessions.json"):null].filter(Boolean))try{let a=await (0,d.readFile)(e,"utf8"),c=JSON.parse(a);for(let a of Object.values(c))if(a&&a.sessionId===b&&"string"==typeof a.sessionFile)return await (0,d.access)(a.sessionFile),a.sessionFile}catch{continue}return null}function v(a){return Array.from(new Set(a))}function w(a,b){let c=a.replace(/\s+/g," ").trim();return c.length<=b?c:`${c.slice(0,Math.max(b-1,1)).trimEnd()}…`}function x(a){let b=a.match(/"tool(Name)?":\s*"([^"]+)"/i);return b?.[2]}function y(a){return a?a.split(/[-_]/g).filter(Boolean).map(a=>a[0].toUpperCase()+a.slice(1)).join(" "):"OpenClaw"}},5828:(a,b,c)=>{"use strict";function d(a){return a.diagnostics.installed&&a.diagnostics.rpcOk}function e(a){var b;return a.diagnostics.installed&&a.diagnostics.rpcOk&&(b=a).diagnostics.runtime.stateWritable&&b.diagnostics.runtime.sessionStoreWritable}function f(a){var b;return e(a)&&d(b=a)&&b.diagnostics.modelReadiness.ready&&"passed"===a.diagnostics.runtime.smokeTest.status}function g(a){return e(a)?a.diagnostics.modelReadiness.ready?null:"OpenClaw model setup is incomplete. Configure a usable default model before dispatching missions.":"OpenClaw system setup is incomplete. Verify the CLI, gateway, and runtime state before dispatching missions."}c.d(b,{Bt:()=>f,h6:()=>d,iN:()=>e,l9:()=>g})},6876:(a,b,c)=>{"use strict";c.d(b,{Fb:()=>i,jJ:()=>j});var d=c(8161),e=c.n(d),f=c(6760),g=c.n(f);function h(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,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:[]}}}function i(a){return h(a,{installed:!0,loaded:!0,rpcOk:!1,health:"degraded"})}function j(a,b){return h(a,{installed:b.installed,loaded:b.loaded,rpcOk:b.rpcOk,health:b.rpcOk?"healthy":b.installed?"degraded":"offline"})}c(3628),c(4853)},7037:(a,b,c)=>{"use strict";function d(a){let b="clone"===a.sourceMode?{label:"Cloning repository",description:"The repository is being cloned before workspace files are added."}:"existing"===a.sourceMode?{label:"Attaching existing folder",description:"AgentOS is validating the existing directory and preparing it for bootstrap."}:{label:"Preparing workspace folder",description:"A fresh workspace directory is being created inside the configured workspace root."};return{title:"Provisioning workspace",description:"AgentOS is creating the workspace and reporting each real bootstrap step as it finishes.",steps:[{id:"validate",label:"Checking input and target path",description:"Workspace input, agent ids, and the destination directory are being validated."},{id:"source",label:b.label,description:b.description},{id:"scaffold",label:"Scaffolding workspace files",description:"Core docs, local state, starter memory, and shared workspace metadata are being written."},{id:"agents",label:1===a.agentCount?"Creating the first agent":"Creating workspace agents",description:1===a.agentCount?"The primary agent is being provisioned and linked to the workspace.":"Each enabled agent is being provisioned and linked to the workspace."},{id:"kickoff",label:a.kickoffMission?"Running kickoff mission":"Finalizing workspace",description:a.kickoffMission?"The primary agent is inspecting the new workspace and refining the initial setup.":"Workspace bootstrap is wrapping up without a kickoff mission."}]}}function e(a){return{title:"Deploying workspace",description:"The planner is turning the blueprint into a live workspace and streaming each deploy stage.",steps:[{id:"plan",label:"Locking deploy plan",description:"Deploy blockers are being checked and the planner state is being locked for launch."},...d({sourceMode:a.sourceMode,agentCount:a.agentCount,kickoffMission:a.kickoffMission}).steps,{id:"blueprint",label:"Writing planner files",description:"Planner blueprint, company notes, and workflow docs are being written into the workspace."},{id:"channels",label:a.hasChannels?"Provisioning channels":"Checking channels",description:a.hasChannels?"Enabled external channels are being provisioned and connected.":"No external channels are enabled, so this stage will pass quickly."},{id:"automations",label:a.hasAutomations?"Provisioning automations":"Checking automation loops",description:a.hasAutomations?"Enabled recurring loops are being attached to their target agents.":"No recurring automations are enabled, so this stage is mostly validation."},{id:"planner-kickoff",label:a.hasPlannerKickoffs?"Running planner kickoff missions":"Finalizing deploy",description:a.hasPlannerKickoffs?"The first missions are being dispatched so the new workspace starts with clear momentum.":"The workspace is being finalized and the deploy request is wrapping up."}]}}function f({template:a,onProgress:b}){let c={title:a.title,description:a.description,percent:0,steps:a.steps.map(a=>({...a,status:"pending",percent:0,activities:[]}))},d=0,e=a=>{let b=c.steps.find(b=>b.id===a);if(!b)throw Error(`Unknown operation progress step: ${a}`);return b},i=async()=>{c.percent=g(c.steps),await b?.(structuredClone(c))},j=(a,b)=>{let c=e(a);"string"==typeof b.label&&(c.label=b.label),"string"==typeof b.description&&(c.description=b.description),"string"==typeof b.detail&&(c.detail=b.detail),"number"==typeof b.percent&&(c.percent=h(b.percent)),b.status&&(c.status=b.status)};return{snapshot:()=>(c.percent=g(c.steps),structuredClone(c)),async startStep(a,b){j(a,{status:"active",percent:Math.max(e(a).percent,2),detail:b}),await i()},async updateStep(a,b){j(a,b),await i()},async addActivity(a,b,c="active"){let f=e(a),g={id:`${a}-${d}`,message:b,status:c};d+=1,f.activities.push(g),"pending"===f.status&&"active"===c&&(f.status="active"),await i()},async completeStep(a,b){j(a,{status:"done",percent:100,detail:b}),await i()},async failStep(a,b){j(a,{status:"error",percent:100,detail:b}),await i()},async syncStep(a){let b=e(a.id);b.label=a.label,b.description=a.description,b.status=a.status,b.percent=h(a.percent),b.detail=a.detail,b.activities=structuredClone(a.activities),await i()}}}function g(a){return 0===a.length?0:Math.round(a.reduce((a,b)=>a+h(b.percent),0)/a.length)}function h(a){return Number.isFinite(a)?Math.min(100,Math.max(0,Math.round(a))):0}c.d(b,{Bb:()=>e,X6:()=>f,fV:()=>d})},7091:(a,b,c)=>{"use strict";function d(a){return a.name?.trim()||a.identityName?.trim()||"OpenClaw"}c.d(b,{$m:()=>g,CK:()=>d,ho:()=>f});let e=[/^Task output routing:/i,/^Agent operating policy:/i];function f(a){let b=a.replace(/\r\n/g,"\n").trim();if(!b)return"";let c=[];for(let a of b.split("\n")){let b=a.trim();if(e.some(a=>a.test(b)))break;c.push(a)}return c.join(" ").replace(/\s+/g," ").trim()}function g(a,b=64){if(!a)return"";let c=f(a);return c?c.length<=b?c:`${c.slice(0,Math.max(b-1,1)).trimEnd()}…`:""}},7411:(a,b,c)=>{"use strict";c.d(b,{J$:()=>i,Yf:()=>m,eB:()=>k,lz:()=>j,u_:()=>l,yt:()=>h});var d=c(8161),e=c.n(d),f=c(6760),g=c.n(f);let h="https://docs.openclaw.ai/install";function i(){return g().join(e().homedir(),".openclaw")}function j(){return g().join(i(),"bin","win32"===process.platform?"openclaw.cmd":"openclaw")}function k(){return g().join(i(),"tools","node","bin","win32"===process.platform?"openclaw.cmd":"openclaw")}function l(){return g().join(e().homedir(),".local","bin","win32"===process.platform?"openclaw.cmd":"openclaw")}function m(){return"win32"===process.platform?"& ([scriptblock]::Create((iwr -useb https://openclaw.ai/install.ps1))) -NoOnboard":"set -euo pipefail; curl -fsSL --proto '=https' --tlsv1.2 https://openclaw.ai/install-cli.sh | bash -s -- --prefix \"$HOME/.openclaw\" --no-onboard"}},8366:(a,b,c)=>{"use strict";c.d(b,{JZ:()=>m,VP:()=>k,Vg:()=>o,XP:()=>q,YP:()=>n,gg:()=>p,o_:()=>r,zB:()=>j});var d=c(1421),e=c(7411);process.env.OPENCLAW_BIN;let f=process.env.OPENCLAW_BIN?.trim()||"",g="",h=null,i=/^[A-Za-z0-9_./:@=+%-]+$/;async function j(a,b={}){return l(a,b)}async function k(a,b={}){try{let c=await j(a,b);return s(c.stdout||c.stderr)}catch(b){let a=t(b);if(a)try{return s(a.stdout||a.stderr)}catch{}throw b}}async function l(a,b={}){let c=await q();return new Promise((e,f)=>{let g=(0,d.spawn)(c,a,{detached:!0,env:{...process.env}}),h="",i="",j=!1,k=!1,l=!1,m=Promise.resolve(),n=null,o=(a,b)=>{a&&b&&(m=m.then(()=>a(b)).catch(()=>{}))},p=a=>{j||(j=!0,m.finally(a))},q=a=>{if(g.pid)try{process.kill(-g.pid,a)}catch{g.kill(a)}else g.kill(a);"SIGTERM"!==a||n||(n=setTimeout(()=>{if(!j)if(g.pid)try{process.kill(-g.pid,"SIGKILL")}catch{g.kill("SIGKILL")}else g.kill("SIGKILL")},2e3))},r=setTimeout(()=>{k=!0,q("SIGTERM")},b.timeoutMs??45e3),s=()=>{l=!0,q("SIGTERM")};b.signal&&(b.signal.aborted?s():b.signal.addEventListener("abort",s));let t=()=>{clearTimeout(r),n&&(clearTimeout(n),n=null),b.signal&&b.signal.removeEventListener("abort",s)};g.stdout.on("data",a=>{let c=a.toString();h+=c,o(b.onStdout,c)}),g.stderr.on("data",a=>{let c=a.toString();i+=c,o(b.onStderr,c)}),g.on("error",a=>{t(),p(()=>{f(u(`OpenClaw command failed to start: ${a.message}`,h,i?`${i}
410
+ `:""}},5612:(a,b,c)=>{"use strict";c.d(b,{GH:()=>l,P0:()=>j,eY:()=>f,hh:()=>i,sg:()=>k});var d=c(3628),e=c(4853);let f={workspaceOnly:!0,generateStarterDocs:!0,generateMemory:!0,kickoffMission:!0},g={software:{label:"Software project",description:"Default project template for engineering delivery.",icon:"\uD83D\uDEE0"},frontend:{label:"Frontend app",description:"UI and experience work with browser-aware support.",icon:"\uD83C\uDFA8"},backend:{label:"Backend/API",description:"Services, infrastructure, and backend-oriented workflows.",icon:"⚙️"},research:{label:"Research",description:"Investigation-heavy workspace with synthesis and memory capture.",icon:"\uD83E\uDDE0"},content:{label:"Content/Growth",description:"Messaging, content production, campaign review, and analysis.",icon:"\uD83D\uDCE3"}},h={software:[{id:"builder",role:"Builder",name:"Builder",emoji:"\uD83D\uDEE0️",theme:"amber",skillId:"project-builder",isPrimary:!0,description:"Implements requested changes and drives delivery forward."},{id:"reviewer",role:"Reviewer",name:"Reviewer",emoji:"\uD83D\uDD0D",theme:"rose",skillId:"project-reviewer",description:"Reviews work for correctness, regressions, and product risk."},{id:"tester",role:"Tester",name:"Tester",emoji:"\uD83E\uDDEA",theme:"emerald",skillId:"project-tester",description:"Validates behavior, tests, and environment assumptions."},{id:"learner",role:"Learner",name:"Learner",emoji:"\uD83E\uDDE0",theme:"cyan",skillId:"project-learner",description:"Consolidates durable project knowledge and memory."}],frontend:[{id:"builder",role:"Builder",name:"Builder",emoji:"\uD83D\uDEE0️",theme:"amber",skillId:"project-builder",isPrimary:!0,description:"Implements UI and frontend product work."},{id:"reviewer",role:"Reviewer",name:"Reviewer",emoji:"\uD83D\uDD0D",theme:"rose",skillId:"project-reviewer",description:"Reviews interaction, correctness, and regression risk."},{id:"tester",role:"Tester",name:"Tester",emoji:"\uD83E\uDDEA",theme:"emerald",skillId:"project-tester",description:"Checks behavior, responsive states, and verification gaps."},{id:"learner",role:"Learner",name:"Learner",emoji:"\uD83E\uDDE0",theme:"cyan",skillId:"project-learner",description:"Maintains stable product and implementation knowledge."},{id:"browser",role:"Browser Agent",name:"Browser Agent",emoji:"\uD83C\uDF10",theme:"blue",skillId:"project-browser",description:"Exercises browser flows, captures UI evidence, and validates user paths."}],backend:[{id:"builder",role:"Builder",name:"Builder",emoji:"\uD83D\uDEE0️",theme:"amber",skillId:"project-builder",isPrimary:!0,description:"Implements service, API, and infrastructure changes."},{id:"reviewer",role:"Reviewer",name:"Reviewer",emoji:"\uD83D\uDD0D",theme:"rose",skillId:"project-reviewer",description:"Catches correctness, data handling, and operational risks."},{id:"tester",role:"Tester",name:"Tester",emoji:"\uD83E\uDDEA",theme:"emerald",skillId:"project-tester",description:"Validates APIs, background jobs, migrations, and failure paths."},{id:"learner",role:"Learner",name:"Learner",emoji:"\uD83E\uDDE0",theme:"cyan",skillId:"project-learner",description:"Maintains architecture notes and durable operational memory."}],research:[{id:"researcher",role:"Research Lead",name:"Research Lead",emoji:"\uD83D\uDD2C",theme:"violet",skillId:"project-researcher",isPrimary:!0,description:"Runs investigations, frames questions, and synthesizes findings."},{id:"reviewer",role:"Reviewer",name:"Reviewer",emoji:"\uD83D\uDD0D",theme:"rose",skillId:"project-reviewer",description:"Pressure-tests claims, assumptions, and interpretation quality."},{id:"learner",role:"Archivist",name:"Archivist",emoji:"\uD83E\uDDE0",theme:"cyan",skillId:"project-learner",description:"Distills durable research notes, memory, and takeaways."}],content:[{id:"strategist",role:"Strategist",name:"Strategist",emoji:"\uD83D\uDCE3",theme:"orange",skillId:"project-strategist",isPrimary:!0,description:"Frames audience, goals, positioning, and campaign direction."},{id:"writer",role:"Writer",name:"Writer",emoji:"✍️",theme:"sky",skillId:"project-writer",description:"Drafts content, messaging, and campaign assets."},{id:"reviewer",role:"Reviewer",name:"Reviewer",emoji:"\uD83D\uDD0D",theme:"rose",skillId:"project-reviewer",description:"Edits for clarity, quality, and consistency."},{id:"analyst",role:"Analyst",name:"Analyst",emoji:"\uD83D\uDCC8",theme:"emerald",skillId:"project-analyst",description:"Tracks results, experiments, and performance insights."}]};function i(a){return g[a]}function j(a,b,c){let e=h[a];if("solo"===b){let a=e.find(a=>a.isPrimary)??e[0];return[{...a,name:k(c,a.role,"Builder"===a.role?"Default Agent":a.name),policy:(0,d.g0)("browser"===a.id?"browser":"worker"),enabled:!0}]}return e.map(a=>({id:a.id,role:a.role,name:a.isPrimary?k(c,a.role,a.name):a.name,emoji:a.emoji,theme:a.theme,skillId:a.skillId,modelId:a.modelId,isPrimary:!!a.isPrimary,policy:(0,d.g0)("browser"===a.id?"browser":"worker"),enabled:!0}))}function k(a,b,c){let d=function(a){let b=a?.trim();if(!b)return"";let c=(!/\s/.test(b)&&b.includes(".")?b.split(".")[0]:b).replace(/[^A-Za-z0-9\u00C0-\u024F]+/g," ").trim();return c?c.split(/\s+/).filter(Boolean).map(a=>a[0].toUpperCase()+a.slice(1)).join(" "):""}(a);if(!d)return c;let e=b.trim();return e?`${d} ${e}`:d}function l(a,b){return(0,e.nt)(a,b)}},5793:(a,b,c)=>{"use strict";c.d(b,{Jw:()=>r,SI:()=>n,V9:()=>k,WU:()=>m,pY:()=>l,qv:()=>o,xZ:()=>p});var d=c(1455),e=c(8161),f=c.n(e),g=c(6760),h=c.n(g),i=c(7091),j=c(4414);async function k(a,b,c,e){let f=e(a,b,c);if(!a.key?.endsWith(":main")||!a.agentId||!a.sessionId)return[f];let g=c.find(b=>b.id===a.agentId),h=b.find(b=>b.id===a.agentId),j=await m(a.agentId,a.sessionId,g?.workspace||h?.workspace);if(!j)return[f];try{let a=await (0,d.readFile)(j,"utf8"),b=n(a,f,g?.workspace||h?.workspace).filter(a=>!a.prompt.toLowerCase().startsWith("read heartbeat.md if it exists")),c=p(b);if(0===b.length)return[f];return b.slice(-6).reverse().map(a=>(function(a,b,c=b.toolNames){var d,e;let f,g=Date.parse(b.updatedAt),h=(d=b.prompt,e=a.agentId,(f=d.trim())&&(0,i.$m)(f,38)||`${y(e)} run`),j=b.warningSummary?w(`Completed with fallback: ${b.warningSummary}`,90):b.finalText?w(b.finalText,90):"stalled"===b.status?"Run stalled":"Main session run";return{id:`runtime:${a.sessionId}:${b.id}`,source:"turn",key:`${a.key}:turn:${b.id}`,title:h,subtitle:j,status:b.status,updatedAt:Number.isNaN(g)?a.updatedAt:g,ageMs:Number.isNaN(g)?a.ageMs:Math.max(Date.now()-g,0),agentId:a.agentId,workspaceId:a.workspaceId,modelId:a.modelId,sessionId:a.sessionId,taskId:a.taskId,runId:b.runId||b.id,toolNames:c,tokenUsage:b.tokenUsage,metadata:{...a.metadata,turnId:b.id,turnPrompt:b.prompt,stage:"main.turn",historical:"running"!==b.status,createdFiles:b.createdFiles,warnings:b.warnings,warningSummary:b.warningSummary}}})(f,a,c))}catch{return[f]}}async function l(a,b){if("fallback"===b.mode){var c;let b;return c=a,b=new Date().toISOString(),{runtimeId:c.id,sessionId:c.sessionId,taskId:c.taskId,status:"available",finalText:"Fallback mode is active. Connect a real OpenClaw gateway to inspect live runtime output.",finalTimestamp:b,stopReason:"fallback",errorMessage:null,items:[{id:`${c.id}:fallback`,role:"assistant",timestamp:b,text:"Fallback mode is active. Connect a real OpenClaw gateway to inspect live runtime output.",stopReason:"fallback",isError:!1}],createdFiles:[],warnings:[],warningSummary:null}}if(!a.sessionId||!a.agentId)return q(a,"This runtime does not expose a session transcript yet.");let e=b.agents.find(b=>b.id===a.agentId),f=await m(a.agentId,a.sessionId,e?.workspacePath);if(!f)return q(a,"No transcript file was found for this runtime session.");try{let b=await (0,d.readFile)(f,"utf8");return r(a,b,e?.workspacePath)}catch(b){return{runtimeId:a.id,sessionId:a.sessionId,taskId:a.taskId,status:"error",finalText:null,finalTimestamp:null,stopReason:null,errorMessage:b instanceof Error?b.message:"Unable to read runtime transcript.",items:[],createdFiles:[],warnings:[],warningSummary:null}}}async function m(a,b,c){for(let e of[h().join(f().homedir(),".openclaw","agents",a,"sessions",`${b}.jsonl`),c?h().join(c,".openclaw","agents",a,"sessions",`${b}.jsonl`):null].filter(Boolean))try{return await (0,d.access)(e),e}catch{continue}let e=await u(a,b,c);return e||null}function n(a,b,c){let d=a.split(/\r?\n/).filter(Boolean),e=[],f=c,g=null;for(let a of d)try{let c=JSON.parse(a);if("session"===c.type&&"string"==typeof c.cwd&&c.cwd.trim()){f=c.cwd.trim();continue}if("custom"===c.type&&"openclaw:prompt-error"===c.customType&&g){g.runId||=c.data?.runId,g.updatedAt=c.timestamp||g.updatedAt,g.errorMessage||=c.data?.error||null;continue}if("message"!==c.type||!c.message?.role)continue;let d=c.message.role;if("assistant"!==d&&"toolResult"!==d&&"user"!==d)continue;let i=function(a=[]){return a.flatMap(a=>"text"===a.type&&a.text?[a.text]:[]).join("\n\n").trim()}(c.message.content),j=c.message.errorMessage??null,k=function(a,b,c,d){if("toolResult"!==a||!0===b.isError||d)return null;let e=b.details?.exitCode;if("number"!=typeof e||0===e)return null;let f=(b.details?.aggregated||c).split(/\r?\n/).map(a=>a.trim()).filter(Boolean).filter(a=>!/^\(Command exited with code \d+\)$/i.test(a));return w((f.find(a=>!a.startsWith("[WARNING]"))||f.find(a=>a.startsWith("[WARNING]"))||`${b.toolName||"tool"} exited with code ${e}`).replace(/^\[WARNING\]\s*/i,"").trim()||`${b.toolName||"tool"} exited with code ${e}`,160)}(d,c.message,i,j);if(!i&&!j&&!("assistant"===d&&c.message.content?.some(a=>"toolCall"===a.type)||"toolResult"===d&&"string"==typeof c.message.toolName&&c.message.toolName.trim()))continue;let l={id:c.id||`${d}-${Date.now()}`,role:d,timestamp:c.timestamp||new Date().toISOString(),text:i||j||"",toolName:"toolResult"===d?c.message.toolName?.trim()||x(i):void 0,stopReason:"assistant"===d?c.message.stopReason??null:null,errorMessage:j,isWarning:!!k,isError:!!j||!0===c.message.isError||"error"===c.message.stopReason||"aborted"===c.message.stopReason};if("user"===d){g&&e.push(t(g)),g={id:c.id||`turn-${e.length}`,prompt:l.text.replace(/^Sender \(untrusted metadata\):[\s\S]*?```[\s\S]*?```\s*/i,"").replace(/^\[[^\]]+\]\s*/i,"").replace(/\s+/g," ").trim(),sessionId:b.sessionId,runId:void 0,timestamp:l.timestamp,updatedAt:l.timestamp,items:[l],tokenUsage:void 0,errorMessage:null,createdFiles:[],warnings:[],toolNames:[],pendingCreatedFiles:new Map,pendingToolNames:new Set};continue}if(!g)continue;if("assistant"===d&&Array.isArray(c.message.content))for(let a of c.message.content){if("toolCall"!==a.type||("string"==typeof a.name&&a.name.trim()&&g.pendingToolNames.add(a.name.trim()),"write"!==a.name))continue;let b="string"==typeof a.arguments?.path?a.arguments.path.trim():"";if(!b)continue;let d=function(a,b){let c=a.trim();if(!c)return null;let d=h().isAbsolute(c)?h().normalize(c):b?h().resolve(b,c):null;if(!d)return null;let e=b&&d.startsWith(`${h().resolve(b)}${h().sep}`)?h().relative(h().resolve(b),d)||h().basename(d):d;return{path:d,displayPath:e}}(b,f);d&&g.pendingCreatedFiles.set(a.id||`${c.id||"toolCall"}:${b}`,{path:d.path,displayPath:d.displayPath})}if(g.items.push(l),g.updatedAt=l.timestamp,g.errorMessage||=j,k&&!g.warnings.includes(k)&&g.warnings.push(k),"toolResult"===d&&!0!==c.message.isError&&"write"===c.message.toolName&&"string"==typeof c.message.toolCallId){let a=g.pendingCreatedFiles.get(c.message.toolCallId);a&&(g.createdFiles.push(a),g.pendingCreatedFiles.delete(c.message.toolCallId))}if("toolResult"===d){let a=c.message.toolName?.trim()||x(l.text)?.trim()||null;a&&g.pendingToolNames.add(a)}if("assistant"===d&&c.message.usage){let a=c.message.usage;g.tokenUsage={input:a.input??a.prompt_tokens??0,output:a.output??a.completion_tokens??0,total:a.totalTokens??a.total_tokens??(a.input??a.prompt_tokens??0)+(a.output??a.completion_tokens??0),cacheRead:a.cacheRead??0}}}catch{continue}return g&&e.push(t(g)),e}function o(a,b){let c="string"==typeof a.metadata.dispatchSubmittedAt?Date.parse(a.metadata.dispatchSubmittedAt):NaN;return Number.isNaN(c)?b:b.filter(a=>{let b=Date.parse(a.updatedAt||a.timestamp);return!Number.isNaN(b)&&b>=c-1500})}function p(a){return v(a.flatMap(a=>a.toolNames))}function q(a,b){return{runtimeId:a.id,sessionId:a.sessionId,taskId:a.taskId,status:"missing",finalText:null,finalTimestamp:null,stopReason:null,errorMessage:b,items:[],createdFiles:[],warnings:[],warningSummary:null}}function r(a,b,c){let d=o(a,n(b,a,c));if("turn"===a.source){let b="string"==typeof a.metadata.turnId?a.metadata.turnId:null,c=b?d.find(a=>a.id===b):function(a,b){let c="string"==typeof a.metadata.mission?a.metadata.mission:null;if(!c)return null;let d=b.filter(a=>(0,j.Dm)(a.prompt,c));if(0===d.length)return null;let e=a.updatedAt??0;return d.sort((a,b)=>{let c=Date.parse(a.updatedAt),d=Date.parse(b.updatedAt);return Math.abs((Number.isNaN(c)?0:c)-e)-Math.abs((Number.isNaN(d)?0:d)-e)})[0]}(a,d);if(c)return s(a,c)}let e=d.at(-1);return e?s(a,e):{runtimeId:a.id,sessionId:a.sessionId,taskId:a.taskId,status:"missing",finalText:null,finalTimestamp:null,stopReason:null,errorMessage:"No transcript entries were found for this runtime.",items:[],createdFiles:[],warnings:[],warningSummary:null}}function s(a,b){return{runtimeId:a.id,sessionId:a.sessionId,taskId:a.taskId,status:b.items.length>0?"available":"missing",finalText:b.finalText,finalTimestamp:b.finalTimestamp,stopReason:b.stopReason,errorMessage:b.errorMessage,items:b.items.slice(-12),createdFiles:b.createdFiles,warnings:b.warnings,warningSummary:b.warningSummary}}function t(a){let{pendingCreatedFiles:b,pendingToolNames:c,...d}=a,e=[...a.items].reverse().find(a=>"assistant"===a.role&&(a.text.trim().length>0||a.errorMessage)),f=a.items.at(-1),g=e?.stopReason??null,h=!!a.errorMessage||e?.isError===!0||"error"===g||"aborted"===g,i=v(a.warnings),j=h?"stalled":f?.role==="assistant"&&f.stopReason&&"toolUse"!==f.stopReason?"completed":"running";return{...d,status:j,finalText:e?.text??null,finalTimestamp:e?.timestamp??null,stopReason:g,errorMessage:a.errorMessage||e?.errorMessage||null,createdFiles: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}(a.createdFiles),warnings:i,warningSummary:i[0]??null,toolNames:v([...a.pendingToolNames])}}async function u(a,b,c){for(let e of[h().join(f().homedir(),".openclaw","agents",a,"sessions","sessions.json"),c?h().join(c,".openclaw","agents",a,"sessions","sessions.json"):null].filter(Boolean))try{let a=await (0,d.readFile)(e,"utf8"),c=JSON.parse(a);for(let a of Object.values(c))if(a&&a.sessionId===b&&"string"==typeof a.sessionFile)return await (0,d.access)(a.sessionFile),a.sessionFile}catch{continue}return null}function v(a){return Array.from(new Set(a))}function w(a,b){let c=a.replace(/\s+/g," ").trim();return c.length<=b?c:`${c.slice(0,Math.max(b-1,1)).trimEnd()}…`}function x(a){let b=a.match(/"tool(Name)?":\s*"([^"]+)"/i);return b?.[2]}function y(a){return a?a.split(/[-_]/g).filter(Boolean).map(a=>a[0].toUpperCase()+a.slice(1)).join(" "):"OpenClaw"}},5828:(a,b,c)=>{"use strict";function d(a){return a.diagnostics.installed&&a.diagnostics.rpcOk}function e(a){var b;return a.diagnostics.installed&&a.diagnostics.rpcOk&&(b=a).diagnostics.runtime.stateWritable&&b.diagnostics.runtime.sessionStoreWritable}function f(a){var b;return e(a)&&d(b=a)&&b.diagnostics.modelReadiness.ready&&"passed"===a.diagnostics.runtime.smokeTest.status}function g(a){return e(a)?a.diagnostics.modelReadiness.ready?null:"OpenClaw model setup is incomplete. Configure a usable default model before dispatching missions.":"OpenClaw system setup is incomplete. Verify the CLI, gateway, and runtime state before dispatching missions."}c.d(b,{Bt:()=>f,h6:()=>d,iN:()=>e,l9:()=>g})},6876:(a,b,c)=>{"use strict";c.d(b,{Fb:()=>i,jJ:()=>j});var d=c(8161),e=c.n(d),f=c(6760),g=c.n(f);function h(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,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:[]}}}function i(a){return h(a,{installed:!0,loaded:!0,rpcOk:!1,health:"degraded"})}function j(a,b){return h(a,{installed:b.installed,loaded:b.loaded,rpcOk:b.rpcOk,health:b.rpcOk?"healthy":b.installed?"degraded":"offline"})}c(3628),c(4853)},7037:(a,b,c)=>{"use strict";function d(a){let b="clone"===a.sourceMode?{label:"Cloning repository",description:"The repository is being cloned before workspace files are added."}:"existing"===a.sourceMode?{label:"Attaching existing folder",description:"AgentOS is validating the existing directory and preparing it for bootstrap."}:{label:"Preparing workspace folder",description:"A fresh workspace directory is being created inside the configured workspace root."};return{title:"Provisioning workspace",description:"AgentOS is creating the workspace and reporting each real bootstrap step as it finishes.",steps:[{id:"validate",label:"Checking input and target path",description:"Workspace input, agent ids, and the destination directory are being validated."},{id:"source",label:b.label,description:b.description},{id:"scaffold",label:"Scaffolding workspace files",description:"Core docs, local state, starter memory, and shared workspace metadata are being written."},{id:"agents",label:1===a.agentCount?"Creating the first agent":"Creating workspace agents",description:1===a.agentCount?"The primary agent is being provisioned and linked to the workspace.":"Each enabled agent is being provisioned and linked to the workspace."},{id:"kickoff",label:a.kickoffMission?"Running kickoff mission":"Finalizing workspace",description:a.kickoffMission?"The primary agent is inspecting the new workspace and refining the initial setup.":"Workspace bootstrap is wrapping up without a kickoff mission."}]}}function e(a){return{title:"Deploying workspace",description:"The planner is turning the blueprint into a live workspace and streaming each deploy stage.",steps:[{id:"plan",label:"Locking deploy plan",description:"Deploy blockers are being checked and the planner state is being locked for launch."},...d({sourceMode:a.sourceMode,agentCount:a.agentCount,kickoffMission:a.kickoffMission}).steps,{id:"blueprint",label:"Writing planner files",description:"Planner blueprint, company notes, and workflow docs are being written into the workspace."},{id:"channels",label:a.hasChannels?"Provisioning channels":"Checking channels",description:a.hasChannels?"Enabled external channels are being provisioned and connected.":"No external channels are enabled, so this stage will pass quickly."},{id:"automations",label:a.hasAutomations?"Provisioning automations":"Checking automation loops",description:a.hasAutomations?"Enabled recurring loops are being attached to their target agents.":"No recurring automations are enabled, so this stage is mostly validation."},{id:"planner-kickoff",label:a.hasPlannerKickoffs?"Running planner kickoff missions":"Finalizing deploy",description:a.hasPlannerKickoffs?"The first missions are being dispatched so the new workspace starts with clear momentum.":"The workspace is being finalized and the deploy request is wrapping up."}]}}function f({template:a,onProgress:b}){let c={title:a.title,description:a.description,percent:0,steps:a.steps.map(a=>({...a,status:"pending",percent:0,activities:[]}))},d=0,e=a=>{let b=c.steps.find(b=>b.id===a);if(!b)throw Error(`Unknown operation progress step: ${a}`);return b},i=async()=>{c.percent=g(c.steps),await b?.(structuredClone(c))},j=(a,b)=>{let c=e(a);"string"==typeof b.label&&(c.label=b.label),"string"==typeof b.description&&(c.description=b.description),"string"==typeof b.detail&&(c.detail=b.detail),"number"==typeof b.percent&&(c.percent=h(b.percent)),b.status&&(c.status=b.status)};return{snapshot:()=>(c.percent=g(c.steps),structuredClone(c)),async startStep(a,b){j(a,{status:"active",percent:Math.max(e(a).percent,2),detail:b}),await i()},async updateStep(a,b){j(a,b),await i()},async addActivity(a,b,c="active"){let f=e(a),g={id:`${a}-${d}`,message:b,status:c};d+=1,f.activities.push(g),"pending"===f.status&&"active"===c&&(f.status="active"),await i()},async completeStep(a,b){j(a,{status:"done",percent:100,detail:b}),await i()},async failStep(a,b){j(a,{status:"error",percent:100,detail:b}),await i()},async syncStep(a){let b=e(a.id);b.label=a.label,b.description=a.description,b.status=a.status,b.percent=h(a.percent),b.detail=a.detail,b.activities=structuredClone(a.activities),await i()}}}function g(a){return 0===a.length?0:Math.round(a.reduce((a,b)=>a+h(b.percent),0)/a.length)}function h(a){return Number.isFinite(a)?Math.min(100,Math.max(0,Math.round(a))):0}c.d(b,{Bb:()=>e,X6:()=>f,fV:()=>d})},7091:(a,b,c)=>{"use strict";function d(a){return a.name?.trim()||a.identityName?.trim()||"OpenClaw"}c.d(b,{$m:()=>g,CK:()=>d,ho:()=>f});let e=[/^Task output routing:/i,/^Agent operating policy:/i];function f(a){let b=a.replace(/\r\n/g,"\n").trim();if(!b)return"";let c=[];for(let a of b.split("\n")){let b=a.trim();if(e.some(a=>a.test(b)))break;c.push(a)}return c.join(" ").replace(/\s+/g," ").trim()}function g(a,b=64){if(!a)return"";let c=f(a);return c?c.length<=b?c:`${c.slice(0,Math.max(b-1,1)).trimEnd()}…`:""}},7411:(a,b,c)=>{"use strict";c.d(b,{J$:()=>i,Yf:()=>m,eB:()=>k,lz:()=>j,u_:()=>l,yt:()=>h});var d=c(8161),e=c.n(d),f=c(6760),g=c.n(f);let h="https://docs.openclaw.ai/install";function i(){return g().join(e().homedir(),".openclaw")}function j(){return g().join(i(),"bin","win32"===process.platform?"openclaw.cmd":"openclaw")}function k(){return g().join(i(),"tools","node","bin","win32"===process.platform?"openclaw.cmd":"openclaw")}function l(){return g().join(e().homedir(),".local","bin","win32"===process.platform?"openclaw.cmd":"openclaw")}function m(){return"win32"===process.platform?"& ([scriptblock]::Create((iwr -useb https://openclaw.ai/install.ps1))) -NoOnboard":"set -euo pipefail; curl -fsSL --proto '=https' --tlsv1.2 https://openclaw.ai/install-cli.sh | bash -s -- --prefix \"$HOME/.openclaw\" --no-onboard"}},8366:(a,b,c)=>{"use strict";c.d(b,{JZ:()=>m,VP:()=>k,Vg:()=>o,XP:()=>q,YP:()=>n,gg:()=>p,o_:()=>r,zB:()=>j});var d=c(1421),e=c(7411);process.env.OPENCLAW_BIN;let f=process.env.OPENCLAW_BIN?.trim()||"",g="",h=null,i=/^[A-Za-z0-9_./:@=+%-]+$/;async function j(a,b={}){return l(a,b)}async function k(a,b={}){try{let c=await j(a,b);return s(c.stdout||c.stderr)}catch(b){let a=t(b);if(a)try{return s(a.stdout||a.stderr)}catch{}throw b}}async function l(a,b={}){let c=await q();return new Promise((e,f)=>{let g=(0,d.spawn)(c,a,{detached:!0,env:{...process.env}}),h="",i="",j=!1,k=!1,l=!1,m=Promise.resolve(),n=null,o=(a,b)=>{a&&b&&(m=m.then(()=>a(b)).catch(()=>{}))},p=a=>{j||(j=!0,m.finally(a))},q=a=>{if(g.pid)try{process.kill(-g.pid,a)}catch{g.kill(a)}else g.kill(a);"SIGTERM"!==a||n||(n=setTimeout(()=>{if(!j)if(g.pid)try{process.kill(-g.pid,"SIGKILL")}catch{g.kill("SIGKILL")}else g.kill("SIGKILL")},2e3))},r=setTimeout(()=>{k=!0,q("SIGTERM")},b.timeoutMs??45e3),s=()=>{l=!0,q("SIGTERM")};b.signal&&(b.signal.aborted?s():b.signal.addEventListener("abort",s));let t=()=>{clearTimeout(r),n&&(clearTimeout(n),n=null),b.signal&&b.signal.removeEventListener("abort",s)};g.stdout.on("data",a=>{let c=a.toString();h+=c,o(b.onStdout,c)}),g.stderr.on("data",a=>{let c=a.toString();i+=c,o(b.onStderr,c)}),g.on("error",a=>{t(),p(()=>{f(u(`OpenClaw command failed to start: ${a.message}`,h,i?`${i}
411
411
  ${a.message}`:a.message,null))})}),g.on("close",a=>{t(),p(()=>{l?f(u("OpenClaw command was aborted.",h,i||"The command was aborted.",a)):k?f(u(`OpenClaw command timed out after ${Math.round((b.timeoutMs??45e3)/1e3)} seconds.`,h,i||"The command exceeded its timeout window.",a)):0!==a?f(u(`OpenClaw command failed with exit code ${a}.`,h,i,a)):e({stdout:h,stderr:i})})})})}async function m(a,b={}){try{let c=await l(a,b);return s(c.stdout||c.stderr)}catch(b){let a=t(b);if(a)try{return s(a.stdout||a.stderr)}catch{}throw b}}async function n(){try{let b=await j(["--version"],{timeoutMs:5e3});var a=b.stdout||b.stderr;let c=a.trim();if(!c)return null;let d=c.match(/\b(\d+(?:\.\d+)+)\b/);return d?.[1]??null}catch{return null}}async function o(){try{return await q(),!0}catch{return!1}}function p(a,b){return[a,...b].map(w).join(" ")}async function q(){let a,b,c,d=(a=process.env.OPENCLAW_BIN?.trim()||"",b=(0,e.eB)(),c=(0,e.lz)(),Array.from(new Set([a&&a!==c?a:"",b,c,(0,e.u_)(),"openclaw"].filter(a=>!!a))));if(h)return h;h=(async()=>{if(g)return g;for(let a of d)if(await x(a))return g=a,process.env.OPENCLAW_BIN=a,a;throw Error("OpenClaw CLI is not installed or could not be resolved.")})();try{return await h}finally{h=null}}function r(){f||process.env.OPENCLAW_BIN!==g||delete process.env.OPENCLAW_BIN,g="",h=null}function s(a){let b=a.trim();if(!b)throw Error("OpenClaw returned no JSON output.");try{return JSON.parse(b)}catch{}let c=b.split(/\r?\n/);for(let a=0;a<c.length;a+=1){let b=c[a].trim();if(b.startsWith("{")||b.startsWith("["))for(let b=c.length;b>a;b-=1){let d=c.slice(a,b).join("\n").trim();try{return JSON.parse(d)}catch{}}}throw Error(`Unable to parse OpenClaw JSON output:
412
412
  ${b.slice(0,800)}`)}function t(a){if(!a||"object"!=typeof a)return null;let b="stdout"in a?v(a.stdout):"",c="stderr"in a?v(a.stderr):"";return b||c?{stdout:b,stderr:c}:null}function u(a,b,c,d){let e=function(a){let b=a.split(/\r?\n/).map(a=>a.trim()).filter(Boolean);if(0===b.length)return"";for(let a of[/Config path not found/i,/cannot find module/i,/command not found/i,/no such file or directory/i,/permission denied/i,/not writable/i,/failed/i,/\berror\b/i]){let c=b.find(b=>a.test(b));if(c)return c}return b.at(-1)??""}(c||b),f=Error(null!==d&&/^OpenClaw command failed with exit code \d+\.$/.test(a)&&e?`${a.slice(0,-1)}: ${e}.`:a);return f.stdout=b,f.stderr=c,f.code=d,f}function v(a){return"string"==typeof a?a:a instanceof Uint8Array?Buffer.from(a).toString():""}function w(a){return i.test(a)?a:`'${a.replace(/'/g,"'\\''")}'`}async function x(a){return await new Promise(b=>{let c=(0,d.spawn)(a,["--version"],{stdio:"ignore"});c.once("error",()=>{b(!1)}),c.once("exit",a=>{b(0===a)})})}},8752:(a,b,c)=>{"use strict";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})},8889:(a,b,c)=>{"use strict";c.d(b,{OL:()=>m,_E:()=>p,aW:()=>n,kf:()=>o,qc:()=>q});var d=c(1455),e=c(6760),f=c.n(e),g=c(3628),h=c(5612);function i(a){return"string"==typeof a&&a.trim().length>0?a.trim():null}function j(a){return Array.from(new Set(a.filter(Boolean)))}function k(a){return a.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,64)}function l(a){return"object"==typeof a&&null!==a}async function m(a){let b=f().join(a,".openclaw","project.json");try{var c,e,g,j,m;let a=await (0,d.readFile)(b,"utf8"),f=JSON.parse(a),p=l(f)?f:{},q=Array.isArray(p.agents)?p.agents.map(a=>n(a)).filter(a=>!!a):[],s=Array.isArray(p.channels)?p.channels.map(a=>{var b;return b=a,o(b)}).filter(a=>!!a):[],t=function(a){if(!l(a))return null;let b="boolean"==typeof a.workspaceOnly?a.workspaceOnly:null,c="boolean"==typeof a.generateStarterDocs?a.generateStarterDocs:null,d="boolean"==typeof a.generateMemory?a.generateMemory:null,e="boolean"==typeof a.kickoffMission?a.kickoffMission:null;return null===b&&null===c&&null===d&&null===e?null:{workspaceOnly:b??!0,generateStarterDocs:c??h.eY.generateStarterDocs,generateMemory:d??h.eY.generateMemory,kickoffMission:e??h.eY.kickoffMission}}(p.rules);return{name:"string"==typeof p.name?p.name:null,directory:"string"==typeof p.directory?p.directory:null,template:(c=p.template,"software"===c||"frontend"===c||"backend"===c||"research"===c||"content"===c)?p.template:null,sourceMode:(e=p.sourceMode,"empty"===e||"clone"===e||"existing"===e)?p.sourceMode:null,agentTemplate:"string"==typeof p.agentTemplate?p.agentTemplate:null,teamPreset:(g=p.teamPreset,"solo"===g||"core"===g||"custom"===g)?p.teamPreset:null,modelProfile:(j=p.modelProfile,"balanced"===j||"fast"===j||"quality"===j)?p.modelProfile:null,rules:t,hidden:!0===p.hidden,systemTag:"string"==typeof p.systemTag?p.systemTag:null,contextSources:(m=p.contextSources,Array.isArray(m)?m.flatMap(a=>{if(!l(a))return[];let b=r(a.kind)?a.kind:"prompt",c="string"==typeof a.label&&a.label.trim()?a.label.trim():b,d="string"==typeof a.summary&&a.summary.trim()?a.summary.trim():c;return[{id:"string"==typeof a.id&&a.id.trim()?a.id.trim():`${b}-${k(c)||"context"}`,kind:b,label:c,summary:d,details:Array.isArray(a.details)?a.details.filter(a=>"string"==typeof a):[],status:"error"===a.status?"error":"ready",createdAt:"string"==typeof a.createdAt?a.createdAt:new Date().toISOString(),confidence:"number"==typeof a.confidence?a.confidence:void 0,url:"string"==typeof a.url?a.url:void 0,error:"string"==typeof a.error?a.error:void 0}].flatMap(a=>{if(!a||"object"!=typeof a)return[];let b=r(a.kind)?a.kind:"prompt",c=i(a.label)??b,d=i(a.summary)??c,e="error"===a.status?"error":"ready",f=i(a.createdAt)??new Date().toISOString(),g=i(a.error),h=i(a.url);return c&&d?[{id:i(a.id)??`${b}-${k(c)||"context"}`,kind:b,label:c,summary:d,details:Array.isArray(a.details)?a.details.map(a=>i(a)??"").filter(a=>!!a):[],status:e,createdAt:f,..."number"==typeof a.confidence?{confidence:a.confidence}:{},...g?{error:g}:{},...h?{url:h}:{}}]:[]})}):[]),agents:q,channels:s}}catch{return{name:null,directory:null,template:null,sourceMode:null,agentTemplate:null,teamPreset:null,modelProfile:null,rules:null,hidden:!1,systemTag:null,contextSources:[],agents:[],channels:[]}}}function n(a){var b;return l(a)&&"string"==typeof a.id?{id:a.id,name:"string"==typeof a.name?a.name:null,role:"string"==typeof a.role?a.role:null,isPrimary:!!a.isPrimary,enabled:!1!==a.enabled,skillId:"string"==typeof a.skillId?a.skillId:null,toolIds:Array.isArray(a.toolIds)?j(a.toolIds.filter(a=>"string"==typeof a).map(a=>a.trim()).filter(a=>!!a&&"fs.workspaceOnly"!==a)):[],modelId:"string"==typeof a.modelId?a.modelId:null,emoji:"string"==typeof a.emoji?a.emoji:null,theme:"string"==typeof a.theme?a.theme:null,policy:l(b=a.policy)&&(0,g.Pj)(b.preset)&&(0,g.Ew)(b.missingToolBehavior)&&(0,g.hR)(b.installScope)&&(0,g.c_)(b.fileAccess)&&(0,g.go)(b.networkAccess)?{preset:b.preset,missingToolBehavior:b.missingToolBehavior,installScope:b.installScope,fileAccess:b.fileAccess,networkAccess:b.networkAccess}:null,channelIds:Array.isArray(a.channelIds)?a.channelIds.filter(a=>"string"==typeof a&&!!a.trim()):[]}:null}function o(a){return l(a)&&"string"==typeof a.id?{id:a.id,type:s(a.type)?a.type:"internal",name:"string"==typeof a.name?a.name:a.id,primaryAgentId:"string"==typeof a.primaryAgentId?a.primaryAgentId:null,workspaces:Array.isArray(a.workspaces)?a.workspaces.map(a=>{var b;return l(b=a)&&"string"==typeof b.workspaceId&&"string"==typeof b.workspacePath?{workspaceId:b.workspaceId,workspacePath:b.workspacePath,agentIds:Array.isArray(b.agentIds)?b.agentIds.filter(a=>"string"==typeof a&&!!a.trim()):[],groupAssignments:Array.isArray(b.groupAssignments)?b.groupAssignments.map(a=>{var b;return l(b=a)&&"string"==typeof b.chatId?{chatId:b.chatId,agentId:"string"==typeof b.agentId?b.agentId:null,title:"string"==typeof b.title?b.title:null,enabled:!1!==b.enabled}:null}).filter(a=>!!a):[]}:null}).filter(a=>!!a):[]}:null}function p(a){let b=a.channels.map(a=>({id:a.id.trim(),type:s(a.type)?a.type:"internal",name:a.name.trim()||a.id.trim(),primaryAgentId:i(a.primaryAgentId)??null,workspaces:a.workspaces.map(a=>({workspaceId:a.workspaceId.trim(),workspacePath:a.workspacePath.trim(),agentIds:j(a.agentIds.map(a=>a.trim()).filter(Boolean)),groupAssignments:a.groupAssignments.map(a=>({chatId:a.chatId.trim(),agentId:i(a.agentId)??null,title:i(a.title)??null,enabled:!1!==a.enabled})).filter(a=>!!a.chatId)})).filter(a=>!!a.workspaceId&&!!a.workspacePath)})).filter(a=>!!a.id),c=new Map;for(let a of b){let b=c.get(a.id);if(!b){c.set(a.id,{...a,workspaces:a.workspaces});continue}let d=new Map;for(let a of b.workspaces)d.set(a.workspaceId,a);for(let b of a.workspaces){let a=d.get(b.workspaceId);if(!a){d.set(b.workspaceId,b);continue}d.set(b.workspaceId,{...a,agentIds:j([...a.agentIds,...b.agentIds]),groupAssignments:q([...a.groupAssignments,...b.groupAssignments])})}c.set(a.id,{...b,name:b.name||a.name,primaryAgentId:b.primaryAgentId||a.primaryAgentId,workspaces:Array.from(d.values())})}return{version:1,channels:Array.from(c.values())}}function q(a){let b=new Map;for(let c of a)c.chatId&&b.set(c.chatId,c);return Array.from(b.values())}function r(a){return"prompt"===a||"website"===a||"repo"===a||"folder"===a}function s(a){return"string"==typeof a&&a.trim().length>0}},9254:(a,b,c)=>{"use strict";c.d(b,{fy:()=>E,G7:()=>F,$T:()=>M,H6:()=>H,lC:()=>I,VW:()=>B,D4:()=>G,S4:()=>h.S,QT:()=>D,vg:()=>C});var d=c(1455),e=c(6760),f=c.n(e),g=c(8366),h=c(9802),i=c(4497);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(["config","get","channels","--json"]),m(["config","get","hooks","--json"]),m(["config","get","hooks.gmail","--json"]),m(["config","get","hooks.webhook","--json"]),m(["config","get","cron","--json"]),m(["cron","list","--json"]),m(["config","get","gmail","--json"]),m(["config","get","email","--json"])]);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(!u(a))return[];let b=[];for(let[e,f]of Object.entries(a)){var c,d;if(c=e,!j.has(c)||!u(f))continue;let a=u(f.accounts)?f.accounts:{};for(let[c,d]of Object.entries(a))b.push(o(e,c,d,{fallbackName:s(e,c),source:"config.channels.accounts"}));let g=t(f.defaultAccount)??(!0===(d=f).enabled||q(d,["account","token","botToken","appToken","webhookUrl","webhook","clientId"])?"default":null);!g||g in a||b.push(o(e,g,f,{fallbackName:s(e,g),source:"config.channels.default"}))}return b}(b),...n("gmail",h,"config.gmail"),...n("gmail",d,"config.hooks.gmail"),...n("email",i,"config.email"),...function(a){if(!u(a))return[];let b=[];p(a)&&b.push(o("webhook",k.webhook,a,{fallbackName:"Webhook ingress",source:"config.hooks"}));let c=u(a.gmail)?a.gmail:null;return c&&b.push(...n("gmail",c,"config.hooks.gmail")),b}(c),...u(a=e)&&p(a)?[o("webhook",r(a,k.webhook),a,{fallbackName:"Webhook ingress",source:"config.hooks.webhook"})]:[],...function(a,b){var c,d;let e=Array.isArray(c=b)?c:u(c)?Array.isArray(c.jobs)?c.jobs:Array.isArray(c.items)?c.items:[]:[];if(!u(a)&&0===e.length)return[];let f=u(a)?a:{};if(!(!0===(d=f).enabled||q(d,["jobs","schedules","failureDestination","webhook","webhookToken","store","maxConcurrentRuns","sessionRetention","runLog"]))&&0===e.length)return[];let g=r(f,k.cron),h={...u(f.metadata)?f.metadata:{},jobCount:e.length};return[o("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.VP)(a)}catch{return null}}function n(a,b,c){var d;if(!u(b))return[];let e=[],f=u(b.accounts)?b.accounts:{};for(let[b,d]of Object.entries(f))e.push(o(a,b,d,{fallbackName:s(a,b),source:`${c}.accounts`}));if(f.default||!(!0===(d=b).enabled||q(d,["account","email","address","username","imap","smtp","oauth","watch","pubsub"])))return e;let g=r(b,k[a]);return e.push(o(a,g,b,{fallbackName:s(a,g),source:c})),e}function o(a,b,c,d){var e,f,g;let h,j,k,l=u(c)?c:{},m=t(l.name)??t(l.label)??t(l.accountName)??t(l.account)??t(l.email)??t(l.address)??d.fallbackName,n=u(l.metadata)?{...l.metadata}:{},o="telegram"===a?(h=t((e=l).botToken)??t(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"),q(g,["smtp","send","outbound","drafts"])&&k.add("send")),("webhook"===f||"cron"===f)&&k.add("trigger"),"gmail"===f&&q(g,["watch","pubsub","topic","subscription"])&&k.add("trigger"),Array.from(k)),metadata:{...n,source:d.source,...o?{botId:o}:{}}}}function p(a){return!0===a.enabled||q(a,["token","secret","path","baseUrl","mappings","webhook"])}function q(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:u(c)})}function r(a,b){return t(a.accountId)??t(a.account)??t(a.id)??t(a.email)??t(a.address)??b}function s(a,b){let c=(0,i.MY)(a);return"default"===b||b===k[a]?`${c} default`:`${c} ${b}`}function t(a){return"string"==typeof a&&a.trim().length>0?a.trim():null}function u(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}var v=c(8752),w=c(8889);let x=f().join(process.cwd(),".mission-control"),y=f().join(x,"channel-registry.json");function z(a){return"string"==typeof a&&a.trim().length>0?a.trim():null}function A(a){return"object"==typeof a&&null!==a}async function B(){return C()}async function C(){try{let a=await (0,d.readFile)(y,"utf8"),b=JSON.parse(a),c=A(b)?b:{},e=Array.isArray(c.channels)?c.channels.map(a=>(0,w.kf)(a)).filter(a=>!!a):[],f=(0,w._E)({version:1,channels:e});return await O(f)}catch{return(0,w._E)({version:1,channels:[]})}}async function D(){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}N(d.id)>N(e.id)&&b.set(a,d)}return[...c,...Array.from(b.values())]}catch{return[]}}function E(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 F(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 G(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 H(a,b){switch(a.provider){case"telegram":return I(b);case"discord":return J(a.accountId,b);default:return[]}}async function I(a){let b=await (0,v.rh)(a,"telegram-discovery.read-channel-logs",()=>(0,g.VP)(["channels","logs","--channel","telegram","--json","--lines","200"]).catch(()=>null));if(!b?.lines?.length)return await K(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:X(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 P(a,b))d(c);if("string"==typeof a?.raw)try{let c=JSON.parse(a.raw);for(let a of P(c,b))d(a)}catch{for(let c of Q(a.raw,b))d(c)}if("string"==typeof a?.message)for(let c of Q(a.message,b))d(c)}for(let b of(await K(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 J(a,b){let c=await (0,v.rh)(b,"discord-discovery.read-channel-logs",()=>(0,g.VP)(["channels","logs","--channel","discord","--json","--lines","300"]).catch(()=>null)),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:X(b.lastSeen,a.lastSeen),guildId:a.guildId??b.guildId,parentId:a.parentId??b.parentId}):d.set(a.routeId,a)};for(let a of(await L(b)))e(a);for(let b of c?.lines??[]){let c="string"==typeof b?.time?b.time:null;for(let d of R(b,c,a))e(d);if("string"==typeof b?.raw)try{let d=JSON.parse(b.raw);for(let b of R(d,c,a))e(b)}catch{for(let d of S(b.raw,c,a))e(d)}if("string"==typeof b?.message)for(let d of S(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 K(a){try{let b=await (0,v.rh)(a,"telegram-discovery.read-allowlist-config",()=>(0,g.VP)(["config","get","channels.telegram.groups","--json"]));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 L(a){try{let b=await (0,v.rh)(a,"discord-discovery.read-config",()=>(0,g.VP)(["config","get","channels.discord.guilds","--json"])),c=[];for(let[a,d]of Object.entries(b??{})){if(!V(a)||!A(d))continue;let b=z(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=>!!V(a)):[])c.push({routeId:U({kind:"role",guildId:a,targetId:e}),provider:"discord",kind:"role",title:`@${e}`,subtitle:b,lastSeen:null,guildId:a});let e=A(d.channels)?d.channels:{};for(let[d,f]of Object.entries(e)){let e=A(f)?f:{},g=V(d)??V(e.id);if(!g)continue;let h=z(e.name)??z(e.label)??`#${g}`;c.push({routeId:U({kind:"channel",guildId:a,targetId:g}),provider:"discord",kind:"channel",title:h,subtitle:b,lastSeen:null,guildId:a})}}return c}catch{return[]}}function M(a,b){let c=(0,h.S)(b.chatId);return c&&b.agentId?"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}function N(a){return"default"!==a?2:1}async function O(a){let b=(await D()).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,w._E)({version:1,channels:f}):a}function P(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(!A(f))continue;let g=W(f.chatId);if(g){let a=z(f.title)??z(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 Q(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 P(d,b))c.set(a.routeId,a);continue}catch{}let e=a.match(/"chatId"\s*:\s*(-?\d+)/),f=W(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 R(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(!A(k))continue;let l=function(a,b){let c=A(b.guild)?b.guild:null,d=A(b.channel)?b.channel:null,e=A(b.thread)?b.thread:null,f=A(b.peer)?b.peer:null,g=z(b.kind),h=z(b.type),i=V(b.id),j=V(b.channelId)??V(b.channel_id)??V(d?.id)??(f?.kind==="channel"?V(f.id):null)??(("channel"===g||"channel"===h)&&i?i:null)??a.channelId,k=V(b.threadId)??V(b.thread_id)??V(e?.id)??(f?.kind==="thread"?V(f.id):null)??(("thread"===g||"thread"===h)&&i?i:null)??a.threadId;return{accountId:z(b.accountId)??z(b.channelAccountId)??z(b.account)??a.accountId,guildId:V(b.guildId)??V(b.guild_id)??V(c?.id)??a.guildId,guildName:z(b.guildName)??z(c?.name)??a.guildName,channelId:j,channelName:z(b.channelName)??z(d?.name)??("channel"===g||"channel"===h?z(b.name):null)??a.channelName,threadId:k,threadName:z(b.threadName)??z(e?.name)??("thread"===g||"thread"===h?z(b.name):null)??a.threadName}}(a.context,k);if(c&&l.accountId&&l.accountId!==c)continue;let m=(g=l,h=b,g.channelId?T({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?T({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,A(a.member)?a.member.roles:null])if(Array.isArray(e))for(let a of e){let e=V(a)??(A(a)?V(a.id):null);if(!e)continue;let f=A(a)?z(a.name):null,g=T({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 S(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 R(a,b,c))d.set(e.routeId,e)}catch{}let f=V(a.match(/guild(?:Id)?["=:\s]+(\d{5,})/i)?.[1]??null),g=V(a.match(/channel(?:Id)?["=:\s]+(\d{5,})/i)?.[1]??null),h=V(a.match(/thread(?:Id)?["=:\s]+(\d{5,})/i)?.[1]??null);if(g){let a=T({kind:"channel",guildId:f,targetId:g,title:`#${g}`,subtitle:f?`Guild ${f}`:null,lastSeen:b});d.set(a.routeId,a)}if(h){let a=T({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=V(c[1]);if(!a)continue;let e=T({kind:"role",guildId:f,targetId:a,title:`@${a}`,subtitle:`Guild ${f}`,lastSeen:b});d.set(e.routeId,e)}return Array.from(d.values())}function T(a){return{routeId:U({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 U(a){let b=a.guildId??"_";return"thread"===a.kind?`thread:${b}:${a.targetId}:${a.parentId??"_"}`:`${a.kind}:${b}:${a.targetId}`}function V(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 W(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 X(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}},9802:(a,b,c)=>{"use strict";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})}};