@sapienx/agentos 0.1.9 → 0.3.13

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 (208) hide show
  1. package/README.md +11 -1
  2. package/bin/agentos.js +780 -10
  3. package/bundle/.next/BUILD_ID +1 -1
  4. package/bundle/.next/app-path-routes-manifest.json +9 -5
  5. package/bundle/.next/build-manifest.json +6 -6
  6. package/bundle/.next/prerender-manifest.json +3 -3
  7. package/bundle/.next/react-loadable-manifest.json +11 -1
  8. package/bundle/.next/routes-manifest.json +30 -0
  9. package/bundle/.next/server/app/_global-error/page.js +3 -3
  10. package/bundle/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  11. package/bundle/.next/server/app/_global-error.html +1 -1
  12. package/bundle/.next/server/app/_global-error.rsc +1 -1
  13. package/bundle/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  14. package/bundle/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  15. package/bundle/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  16. package/bundle/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  17. package/bundle/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  18. package/bundle/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  19. package/bundle/.next/server/app/_not-found/page.js +2 -2
  20. package/bundle/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  21. package/bundle/.next/server/app/_not-found.html +1 -1
  22. package/bundle/.next/server/app/_not-found.rsc +3 -3
  23. package/bundle/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  24. package/bundle/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  25. package/bundle/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  26. package/bundle/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  27. package/bundle/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  28. package/bundle/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  29. package/bundle/.next/server/app/api/agents/[agentId]/chat/route.js +1 -0
  30. package/bundle/.next/server/app/api/agents/[agentId]/chat/route.js.nft.json +1 -0
  31. package/bundle/.next/server/app/api/agents/[agentId]/chat/route_client-reference-manifest.js +1 -0
  32. package/bundle/.next/server/app/api/agents/route.js +1 -1
  33. package/bundle/.next/server/app/api/agents/route.js.nft.json +1 -1
  34. package/bundle/.next/server/app/api/diagnostics/route.js +1 -1
  35. package/bundle/.next/server/app/api/diagnostics/route.js.nft.json +1 -1
  36. package/bundle/.next/server/app/api/files/reveal/route.js +1 -1
  37. package/bundle/.next/server/app/api/gateway/control/route.js +1 -1
  38. package/bundle/.next/server/app/api/gateway/control/route.js.nft.json +1 -1
  39. package/bundle/.next/server/app/api/mission/route.js +1 -1
  40. package/bundle/.next/server/app/api/mission/route.js.nft.json +1 -1
  41. package/bundle/.next/server/app/api/models/providers/route.js +2 -2
  42. package/bundle/.next/server/app/api/models/providers/route.js.nft.json +1 -1
  43. package/bundle/.next/server/app/api/onboarding/models/route.js +7 -7
  44. package/bundle/.next/server/app/api/onboarding/models/route.js.nft.json +1 -1
  45. package/bundle/.next/server/app/api/onboarding/route.js +6 -6
  46. package/bundle/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  47. package/bundle/.next/server/app/api/openclaw/capabilities/route.js +3 -0
  48. package/bundle/.next/server/app/api/openclaw/capabilities/route.js.nft.json +1 -0
  49. package/bundle/.next/server/app/api/openclaw/capabilities/route_client-reference-manifest.js +1 -0
  50. package/bundle/.next/server/app/api/planner/[planId]/deploy/route.js +2 -2
  51. package/bundle/.next/server/app/api/planner/[planId]/deploy/route.js.nft.json +1 -1
  52. package/bundle/.next/server/app/api/planner/[planId]/document-rewrite/route.js +1 -1
  53. package/bundle/.next/server/app/api/planner/[planId]/document-rewrite/route.js.nft.json +1 -1
  54. package/bundle/.next/server/app/api/planner/[planId]/route.js +1 -1
  55. package/bundle/.next/server/app/api/planner/[planId]/route.js.nft.json +1 -1
  56. package/bundle/.next/server/app/api/planner/[planId]/simulate/route.js +1 -1
  57. package/bundle/.next/server/app/api/planner/[planId]/simulate/route.js.nft.json +1 -1
  58. package/bundle/.next/server/app/api/planner/[planId]/turn/route.js +1 -1
  59. package/bundle/.next/server/app/api/planner/[planId]/turn/route.js.nft.json +1 -1
  60. package/bundle/.next/server/app/api/planner/route.js +1 -1
  61. package/bundle/.next/server/app/api/planner/route.js.nft.json +1 -1
  62. package/bundle/.next/server/app/api/reset/route.js +2 -2
  63. package/bundle/.next/server/app/api/reset/route.js.nft.json +1 -1
  64. package/bundle/.next/server/app/api/runtimes/[runtimeId]/route.js +1 -1
  65. package/bundle/.next/server/app/api/runtimes/[runtimeId]/route.js.nft.json +1 -1
  66. package/bundle/.next/server/app/api/settings/gateway/route.js +1 -1
  67. package/bundle/.next/server/app/api/settings/gateway/route.js.nft.json +1 -1
  68. package/bundle/.next/server/app/api/settings/workspace-root/route.js +1 -1
  69. package/bundle/.next/server/app/api/settings/workspace-root/route.js.nft.json +1 -1
  70. package/bundle/.next/server/app/api/snapshot/route.js +1 -1
  71. package/bundle/.next/server/app/api/snapshot/route.js.nft.json +1 -1
  72. package/bundle/.next/server/app/api/stream/route.js +2 -2
  73. package/bundle/.next/server/app/api/stream/route.js.nft.json +1 -1
  74. package/bundle/.next/server/app/api/system/open-terminal/route.js +1 -1
  75. package/bundle/.next/server/app/api/tasks/[taskId]/abort/route.js +1 -1
  76. package/bundle/.next/server/app/api/tasks/[taskId]/abort/route.js.nft.json +1 -1
  77. package/bundle/.next/server/app/api/tasks/[taskId]/stream/route.js +2 -2
  78. package/bundle/.next/server/app/api/tasks/[taskId]/stream/route.js.nft.json +1 -1
  79. package/bundle/.next/server/app/api/update/route.js +2 -2
  80. package/bundle/.next/server/app/api/update/route.js.nft.json +1 -1
  81. package/bundle/.next/server/app/api/workspaces/[workspaceId]/channels/discovered-groups/route.js +1 -0
  82. package/bundle/.next/server/app/api/workspaces/[workspaceId]/channels/discovered-groups/route.js.nft.json +1 -0
  83. package/bundle/.next/server/app/api/workspaces/[workspaceId]/channels/discovered-groups/route_client-reference-manifest.js +1 -0
  84. package/bundle/.next/server/app/api/workspaces/[workspaceId]/channels/route.js +1 -0
  85. package/bundle/.next/server/app/api/workspaces/[workspaceId]/channels/route.js.nft.json +1 -0
  86. package/bundle/.next/server/app/api/workspaces/[workspaceId]/channels/route_client-reference-manifest.js +1 -0
  87. package/bundle/.next/server/app/api/workspaces/[workspaceId]/edit-draft/route.js +1 -1
  88. package/bundle/.next/server/app/api/workspaces/[workspaceId]/edit-draft/route.js.nft.json +1 -1
  89. package/bundle/.next/server/app/api/workspaces/route.js +2 -2
  90. package/bundle/.next/server/app/api/workspaces/route.js.nft.json +1 -1
  91. package/bundle/.next/server/app/page.js +52 -39
  92. package/bundle/.next/server/app/page.js.nft.json +1 -1
  93. package/bundle/.next/server/app/page_client-reference-manifest.js +1 -1
  94. package/bundle/.next/server/app-paths-manifest.json +9 -5
  95. package/bundle/.next/server/chunks/212.js +3 -3
  96. package/bundle/.next/server/chunks/49.js +212 -42
  97. package/bundle/.next/server/functions-config-manifest.json +3 -0
  98. package/bundle/.next/server/middleware-build-manifest.js +1 -1
  99. package/bundle/.next/server/middleware-react-loadable-manifest.js +1 -1
  100. package/bundle/.next/server/pages/404.html +1 -1
  101. package/bundle/.next/server/pages/500.html +1 -1
  102. package/bundle/.next/server/server-reference-manifest.json +1 -1
  103. package/bundle/.next/static/E1q9ZtkD74uwvDRq3uoCz/_buildManifest.js +1 -0
  104. package/bundle/.next/static/chunks/1364.5bd755c8584fcbc8.js +1 -0
  105. package/bundle/.next/static/chunks/1506.ec91294c1cbc454f.js +1 -0
  106. package/bundle/.next/static/chunks/{424-90a1df1753670aa3.js → 4424-08671f25c8f9ae84.js} +1 -1
  107. package/bundle/.next/static/chunks/4a846800.17bbc9efb621dbb7.js +1 -0
  108. package/bundle/.next/static/chunks/5954-fd2a9c905dcede3c.js +15 -0
  109. package/bundle/.next/static/chunks/8583-0efb0aa0937b762c.js +1 -0
  110. package/bundle/.next/static/chunks/app/_global-error/page-1a770949224cd2a0.js +1 -0
  111. package/bundle/.next/static/chunks/app/_not-found/page-1a770949224cd2a0.js +1 -0
  112. package/bundle/.next/static/chunks/app/api/agents/[agentId]/chat/route-1a770949224cd2a0.js +1 -0
  113. package/bundle/.next/static/chunks/app/api/agents/route-1a770949224cd2a0.js +1 -0
  114. package/bundle/.next/static/chunks/app/api/diagnostics/route-1a770949224cd2a0.js +1 -0
  115. package/bundle/.next/static/chunks/app/api/files/reveal/route-1a770949224cd2a0.js +1 -0
  116. package/bundle/.next/static/chunks/app/api/gateway/control/route-1a770949224cd2a0.js +1 -0
  117. package/bundle/.next/static/chunks/app/api/mission/route-1a770949224cd2a0.js +1 -0
  118. package/bundle/.next/static/chunks/app/api/models/providers/route-1a770949224cd2a0.js +1 -0
  119. package/bundle/.next/static/chunks/app/api/onboarding/models/route-1a770949224cd2a0.js +1 -0
  120. package/bundle/.next/static/chunks/app/api/onboarding/route-1a770949224cd2a0.js +1 -0
  121. package/bundle/.next/static/chunks/app/api/openclaw/capabilities/route-1a770949224cd2a0.js +1 -0
  122. package/bundle/.next/static/chunks/app/api/planner/[planId]/deploy/route-1a770949224cd2a0.js +1 -0
  123. package/bundle/.next/static/chunks/app/api/planner/[planId]/document-rewrite/route-1a770949224cd2a0.js +1 -0
  124. package/bundle/.next/static/chunks/app/api/planner/[planId]/route-1a770949224cd2a0.js +1 -0
  125. package/bundle/.next/static/chunks/app/api/planner/[planId]/simulate/route-1a770949224cd2a0.js +1 -0
  126. package/bundle/.next/static/chunks/app/api/planner/[planId]/turn/route-1a770949224cd2a0.js +1 -0
  127. package/bundle/.next/static/chunks/app/api/planner/route-1a770949224cd2a0.js +1 -0
  128. package/bundle/.next/static/chunks/app/api/reset/route-1a770949224cd2a0.js +1 -0
  129. package/bundle/.next/static/chunks/app/api/runtimes/[runtimeId]/route-1a770949224cd2a0.js +1 -0
  130. package/bundle/.next/static/chunks/app/api/settings/gateway/route-1a770949224cd2a0.js +1 -0
  131. package/bundle/.next/static/chunks/app/api/settings/workspace-root/route-1a770949224cd2a0.js +1 -0
  132. package/bundle/.next/static/chunks/app/api/snapshot/route-1a770949224cd2a0.js +1 -0
  133. package/bundle/.next/static/chunks/app/api/stream/route-1a770949224cd2a0.js +1 -0
  134. package/bundle/.next/static/chunks/app/api/system/open-terminal/route-1a770949224cd2a0.js +1 -0
  135. package/bundle/.next/static/chunks/app/api/tasks/[taskId]/abort/route-1a770949224cd2a0.js +1 -0
  136. package/bundle/.next/static/chunks/app/api/tasks/[taskId]/stream/route-1a770949224cd2a0.js +1 -0
  137. package/bundle/.next/static/chunks/app/api/update/route-1a770949224cd2a0.js +1 -0
  138. package/bundle/.next/static/chunks/app/api/workspaces/[workspaceId]/channels/discovered-groups/route-1a770949224cd2a0.js +1 -0
  139. package/bundle/.next/static/chunks/app/api/workspaces/[workspaceId]/channels/route-1a770949224cd2a0.js +1 -0
  140. package/bundle/.next/static/chunks/app/api/workspaces/[workspaceId]/edit-draft/route-1a770949224cd2a0.js +1 -0
  141. package/bundle/.next/static/chunks/app/api/workspaces/route-1a770949224cd2a0.js +1 -0
  142. package/bundle/.next/static/chunks/app/layout-7c2d7e515f68248b.js +1 -0
  143. package/bundle/.next/static/chunks/app/not-found-1a770949224cd2a0.js +1 -0
  144. package/bundle/.next/static/chunks/app/page-e7ca3c6ffb09198b.js +176 -0
  145. package/bundle/.next/static/chunks/d08e407b-a7a2691dd8d9de6b.js +1 -0
  146. package/bundle/.next/static/chunks/f6503f1c-7df4e7c4564148dc.js +1 -0
  147. package/bundle/.next/static/chunks/framework-c8a5f18418cd0e86.js +1 -0
  148. package/bundle/.next/static/chunks/main-app-9a4481b0ab7b57f6.js +1 -0
  149. package/bundle/.next/static/chunks/{main-28f7be32434a5aa2.js → main-eb49e7f5b314b5dc.js} +2 -2
  150. package/bundle/.next/static/chunks/next/dist/client/components/builtin/app-error-1a770949224cd2a0.js +1 -0
  151. package/bundle/.next/static/chunks/next/dist/client/components/builtin/forbidden-1a770949224cd2a0.js +1 -0
  152. package/bundle/.next/static/chunks/next/dist/client/components/builtin/global-error-38aa72b47d0b8f99.js +1 -0
  153. package/bundle/.next/static/chunks/next/dist/client/components/builtin/unauthorized-1a770949224cd2a0.js +1 -0
  154. package/bundle/.next/static/chunks/webpack-4fdc6767ef8ff7b1.js +1 -0
  155. package/bundle/.next/static/css/e20ab76ee4e77d93.css +3 -0
  156. package/bundle/package.json +2 -1
  157. package/bundle/public/assets/agent.mp4 +0 -0
  158. package/bundle/public/assets/provider-logos/deepseek.svg +1 -0
  159. package/bundle/public/assets/provider-logos/openai.svg +5 -0
  160. package/bundle/public/assets/provider-logos/xai.svg +7 -0
  161. package/bundle/public/readme/banner.jpeg +0 -0
  162. package/bundle/public/readme/banner2.jpeg +0 -0
  163. package/package.json +2 -2
  164. package/bundle/.next/static/GiI1KbaEnOWQ2uB6c5S7l/_buildManifest.js +0 -1
  165. package/bundle/.next/static/chunks/4a846800-6992bfdb6d680e8c.js +0 -1
  166. package/bundle/.next/static/chunks/583-20f3363124499c5d.js +0 -1
  167. package/bundle/.next/static/chunks/805-27fb5cc3e5bbb716.js +0 -15
  168. package/bundle/.next/static/chunks/app/_global-error/page-e372189c79e963a1.js +0 -1
  169. package/bundle/.next/static/chunks/app/_not-found/page-e372189c79e963a1.js +0 -1
  170. package/bundle/.next/static/chunks/app/api/agents/route-e372189c79e963a1.js +0 -1
  171. package/bundle/.next/static/chunks/app/api/diagnostics/route-e372189c79e963a1.js +0 -1
  172. package/bundle/.next/static/chunks/app/api/files/reveal/route-e372189c79e963a1.js +0 -1
  173. package/bundle/.next/static/chunks/app/api/gateway/control/route-e372189c79e963a1.js +0 -1
  174. package/bundle/.next/static/chunks/app/api/mission/route-e372189c79e963a1.js +0 -1
  175. package/bundle/.next/static/chunks/app/api/models/providers/route-e372189c79e963a1.js +0 -1
  176. package/bundle/.next/static/chunks/app/api/onboarding/models/route-e372189c79e963a1.js +0 -1
  177. package/bundle/.next/static/chunks/app/api/onboarding/route-e372189c79e963a1.js +0 -1
  178. package/bundle/.next/static/chunks/app/api/planner/[planId]/deploy/route-e372189c79e963a1.js +0 -1
  179. package/bundle/.next/static/chunks/app/api/planner/[planId]/document-rewrite/route-e372189c79e963a1.js +0 -1
  180. package/bundle/.next/static/chunks/app/api/planner/[planId]/route-e372189c79e963a1.js +0 -1
  181. package/bundle/.next/static/chunks/app/api/planner/[planId]/simulate/route-e372189c79e963a1.js +0 -1
  182. package/bundle/.next/static/chunks/app/api/planner/[planId]/turn/route-e372189c79e963a1.js +0 -1
  183. package/bundle/.next/static/chunks/app/api/planner/route-e372189c79e963a1.js +0 -1
  184. package/bundle/.next/static/chunks/app/api/reset/route-e372189c79e963a1.js +0 -1
  185. package/bundle/.next/static/chunks/app/api/runtimes/[runtimeId]/route-e372189c79e963a1.js +0 -1
  186. package/bundle/.next/static/chunks/app/api/settings/gateway/route-e372189c79e963a1.js +0 -1
  187. package/bundle/.next/static/chunks/app/api/settings/workspace-root/route-e372189c79e963a1.js +0 -1
  188. package/bundle/.next/static/chunks/app/api/snapshot/route-e372189c79e963a1.js +0 -1
  189. package/bundle/.next/static/chunks/app/api/stream/route-e372189c79e963a1.js +0 -1
  190. package/bundle/.next/static/chunks/app/api/system/open-terminal/route-e372189c79e963a1.js +0 -1
  191. package/bundle/.next/static/chunks/app/api/tasks/[taskId]/abort/route-e372189c79e963a1.js +0 -1
  192. package/bundle/.next/static/chunks/app/api/tasks/[taskId]/stream/route-e372189c79e963a1.js +0 -1
  193. package/bundle/.next/static/chunks/app/api/update/route-e372189c79e963a1.js +0 -1
  194. package/bundle/.next/static/chunks/app/api/workspaces/[workspaceId]/edit-draft/route-e372189c79e963a1.js +0 -1
  195. package/bundle/.next/static/chunks/app/api/workspaces/route-e372189c79e963a1.js +0 -1
  196. package/bundle/.next/static/chunks/app/layout-f64f74d82381e703.js +0 -1
  197. package/bundle/.next/static/chunks/app/not-found-e372189c79e963a1.js +0 -1
  198. package/bundle/.next/static/chunks/app/page-f4845e91032a411f.js +0 -163
  199. package/bundle/.next/static/chunks/f6503f1c-76bd524eece75922.js +0 -1
  200. package/bundle/.next/static/chunks/framework-3804ea39af33aa2e.js +0 -1
  201. package/bundle/.next/static/chunks/main-app-5eca1027f109d5af.js +0 -1
  202. package/bundle/.next/static/chunks/next/dist/client/components/builtin/app-error-e372189c79e963a1.js +0 -1
  203. package/bundle/.next/static/chunks/next/dist/client/components/builtin/forbidden-e372189c79e963a1.js +0 -1
  204. package/bundle/.next/static/chunks/next/dist/client/components/builtin/global-error-e382d739d625239d.js +0 -1
  205. package/bundle/.next/static/chunks/next/dist/client/components/builtin/unauthorized-e372189c79e963a1.js +0 -1
  206. package/bundle/.next/static/chunks/webpack-5bdc2ea2996939e4.js +0 -1
  207. package/bundle/.next/static/css/de551c93149758e0.css +0 -3
  208. /package/bundle/.next/static/{GiI1KbaEnOWQ2uB6c5S7l → E1q9ZtkD74uwvDRq3uoCz}/_ssgManifest.js +0 -0
@@ -1,10 +1,10 @@
1
- exports.id=49,exports.ids=[49],exports.modules={2826:()=>{},3442:()=>{},3628:(a,b,c)=>{"use strict";c.d(b,{Cf:()=>g,Ew:()=>k,Pj:()=>j,_P:()=>o,c_:()=>m,g0:()=>h,go:()=>n,hR:()=>l,iN:()=>d,qF:()=>i});let d="worker",e={worker:{label:"Worker",description:"Delivers code, docs, research, review, or analysis without mutating the system.",defaultName:"Worker",defaultEmoji:"\uD83D\uDEE0️",defaultTheme:"slate",badgeVariant:"default"},setup:{label:"Setup / Operator",description:"Prepares the environment, installs dependencies, and unblocks other agents.",defaultName:"Setup Operator",defaultEmoji:"\uD83E\uDDF0",defaultTheme:"amber",badgeVariant:"warning"},browser:{label:"Browser",description:"Captures browser evidence, screenshots, and user-path validation inside the workspace.",defaultName:"Browser Agent",defaultEmoji:"\uD83C\uDF10",defaultTheme:"blue",badgeVariant:"success"},monitoring:{label:"Monitoring",description:"Periodically checks workspace health, drift, and blockers, then leaves triage handoffs.",defaultName:"Monitoring Agent",defaultEmoji:"\uD83D\uDEF0️",defaultTheme:"teal",badgeVariant:"warning"},custom:{label:"Custom",description:"Starts from a safe default policy but leaves room for manual overrides.",defaultName:"Custom Agent",defaultEmoji:"\uD83E\uDDE9",defaultTheme:"violet",badgeVariant:"muted"}},f={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 g(a){return e[a]}function h(a=d,b){return{...f[a],...b??{},preset:a}}function i(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":d}function j(a){return"worker"===a||"setup"===a||"browser"===a||"monitoring"===a||"custom"===a}function k(a){return"fallback"===a||"ask-setup"===a||"route-setup"===a||"allow-install"===a}function l(a){return"none"===a||"workspace"===a||"system"===a}function m(a){return"workspace-only"===a||"extended"===a}function n(a){return"restricted"===a||"enabled"===a}function o(a){return e[a].label}Object.entries(e).map(([a,b])=>({value:a,label:b.label,description:b.description}))},3715:(a,b,c)=>{"use strict";c.d(b,{yw:()=>$,er:()=>M,Sn:()=>aM,zw:()=>aP,RB:()=>aO,qu:()=>aT,dM:()=>Y,vy:()=>X,GM:()=>N,Y9:()=>aE,pf:()=>aF,FJ:()=>bQ,xE:()=>Z,x4:()=>aN,Vg:()=>aU,sQ:()=>aQ,PR:()=>aV});var d=c(1421),e=c(7598),f=c(3024),g=c(1455),h=c(8161),i=c.n(h),j=c(6760),k=c.n(j),l=c(7975),m=c(3628);function n(a){let b=Date.now(),c=k().join(i().homedir(),"Documents","Shared","projects");return{generatedAt:new Date(b).toISOString(),mode:"fallback",diagnostics:{installed:!1,loaded:!1,rpcOk:!1,health:"offline",workspaceRoot:c,configuredWorkspaceRoot:null,dashboardUrl:"http://127.0.0.1:18789/",gatewayUrl:"ws://127.0.0.1:18789",configuredGatewayUrl:null,modelReadiness:{ready:!0,defaultModel:"openai-codex/gpt-5.1-codex-mini",resolvedDefaultModel:"openai-codex/gpt-5.1-codex-mini",defaultModelReady:!0,recommendedModelId:"openai-codex/gpt-5.1-codex-mini",preferredLoginProvider:"openai-codex",totalModelCount:2,availableModelCount:2,localModelCount:1,remoteModelCount:1,missingModelCount:0,authProviders:[{provider:"openai-codex",connected:!0,canLogin:!0,detail:"Fallback demo profile"},{provider:"ollama",connected:!0,canLogin:!1,detail:"Fallback demo profile"}],issues:[]},runtime:{stateRoot:k().join(i().homedir(),".openclaw"),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:[],workspaces:[{id:"workspace-demo",name:"Demo Workspace",slug:"demo-workspace",path:"~/openclaw/demo",kind:"workspace",agentIds:["agent-demo-planner","agent-demo-executor"],modelIds:["openai-codex/gpt-5.1-codex-mini","ollama/qwen3.5:9b"],activeRuntimeIds:["runtime-demo-plan"],totalSessions:2,health:"engaged",bootstrap:{template:"software",sourceMode:"empty",agentTemplate:"core-team",coreFiles:[{id:"agents",label:"AGENTS.md",present:!0},{id:"soul",label:"SOUL.md",present:!0},{id:"identity",label:"IDENTITY.md",present:!0},{id:"tools",label:"TOOLS.md",present:!0},{id:"heartbeat",label:"HEARTBEAT.md",present:!0}],optionalFiles:[{id:"memory-md",label:"MEMORY.md",present:!0}],folders:[{id:"docs",label:"docs/",present:!0},{id:"memory",label:"memory/",present:!0},{id:"deliverables",label:"deliverables/",present:!0},{id:"skills",label:"skills/",present:!0},{id:"openclaw",label:".openclaw/",present:!0}],projectShell:[{id:"project-json",label:".openclaw/project.json",present:!0},{id:"events",label:".openclaw/project-shell/events.jsonl",present:!0},{id:"runs",label:".openclaw/project-shell/runs",present:!0},{id:"tasks",label:".openclaw/project-shell/tasks",present:!0}],localSkillIds:["planning","execution"]},capabilities:{skills:["planning","execution"],tools:["fs.workspaceOnly"],workspaceOnlyAgentCount:2}}],agents:[{id:"agent-demo-planner",name:"Planner",workspaceId:"workspace-demo",workspacePath:"~/openclaw/demo",modelId:"openai-codex/gpt-5.1-codex-mini",isDefault:!0,status:"engaged",sessionCount:1,lastActiveAt:b-12e4,currentAction:"Awaiting a real OpenClaw connection",activeRuntimeIds:["runtime-demo-plan"],heartbeat:{enabled:!0,every:"30m",everyMs:18e5},identity:{emoji:"\uD83E\uDD9E",theme:"slate",source:"fallback"},profile:{purpose:"Plan the first mission structure while the real OpenClaw backend is unavailable.",operatingInstructions:["Stay tied to the demo workspace context until a live gateway is available."],responseStyle:["calm","operational","mission-first"],outputPreference:"Prefer concise command feedback and workspace-grounded artifacts.",sourceFiles:[]},skills:["planning"],tools:["fs.workspaceOnly"],policy:(0,m.g0)("worker")},{id:"agent-demo-executor",name:"Executor",workspaceId:"workspace-demo",workspacePath:"~/openclaw/demo",modelId:"ollama/qwen3.5:9b",isDefault:!1,status:"ready",sessionCount:1,lastActiveAt:b-18e5,currentAction:"Standing by for a live runtime",activeRuntimeIds:[],heartbeat:{enabled:!1,every:null,everyMs:null},identity:{emoji:"\uD83D\uDEE0️",theme:"amber",source:"fallback"},profile:{purpose:"Execute concrete workspace actions once the mission has been planned.",operatingInstructions:["Operate inside the attached workspace and wait for a live runtime assignment."],responseStyle:["pragmatic","focused","execution-ready"],outputPreference:"Prefer direct task updates linked to real workspace files.",sourceFiles:[]},skills:["execution"],tools:["fs.workspaceOnly"],policy:(0,m.g0)("worker")}],models:[{id:"openai-codex/gpt-5.1-codex-mini",name:"GPT-5.1 Codex Mini",provider:"openai-codex",input:"text+image",contextWindow:272e3,local:!1,available:!0,missing:!1,tags:["default"],usageCount:1},{id:"ollama/qwen3.5:9b",name:"qwen3.5:9b",provider:"ollama",input:"text",contextWindow:262144,local:!0,available:!0,missing:!1,tags:["configured"],usageCount:1}],runtimes:[{id:"runtime-demo-plan",source:"session",key:"agent:agent-demo-planner:task:demo-plan:stage:in_progress",title:"Mission planning task",subtitle:"Fallback surface while OpenClaw is unavailable",status:"running",updatedAt:b-12e4,ageMs:12e4,agentId:"agent-demo-planner",workspaceId:"workspace-demo",modelId:"openai-codex/gpt-5.1-codex-mini",sessionId:"session-demo-plan",taskId:"demo-plan",tokenUsage:{input:1800,output:220,total:2020,cacheRead:0},metadata:{reason:a}}],tasks:[{id:"task:demo-plan",key:"task:demo-plan",title:"Mission planning task",mission:"Plan the first mission structure while OpenClaw is unavailable.",subtitle:"Fallback surface while OpenClaw is unavailable",status:"running",updatedAt:b-12e4,ageMs:12e4,workspaceId:"workspace-demo",primaryAgentId:"agent-demo-planner",primaryAgentName:"Planner",primaryRuntimeId:"runtime-demo-plan",runtimeIds:["runtime-demo-plan"],agentIds:["agent-demo-planner"],sessionIds:["session-demo-plan"],runIds:[],runtimeCount:1,updateCount:1,liveRunCount:1,artifactCount:0,warningCount:0,tokenUsage:{input:1800,output:220,total:2020,cacheRead:0},metadata:{reason:a}}],relationships:[{id:"edge-demo-planner-model",sourceId:"agent-demo-planner",targetId:"openai-codex/gpt-5.1-codex-mini",kind:"uses-model",label:"primary model"},{id:"edge-demo-executor-model",sourceId:"agent-demo-executor",targetId:"ollama/qwen3.5:9b",kind:"uses-model",label:"local fallback"},{id:"edge-demo-planner-runtime",sourceId:"agent-demo-planner",targetId:"runtime-demo-plan",kind:"active-run",label:"current run"}],missionPresets:["Plan a multi-agent release mission for the selected workspace.","Stand up a builder, tester, and reviewer loop for the next milestone.","Audit the current workspace, identify blockers, and propose the first task batch."]}}function o(a,b){let c="monitoring"===a?{enabled:!0,every:"30m"}:{enabled:!1,every:"30m"},d="string"==typeof b?.every&&b.every.trim()&&"disabled"!==b.every?b.every.trim():c.every;return"boolean"==typeof b?.enabled?{enabled:b.enabled,every:d}:b?.every==="disabled"?{enabled:!1,every:d}:c}function p(a){return a?.enabled?{every:"string"==typeof a.every&&a.every.trim()?a.every.trim():"30m"}:null}var q=c(8366),r=c(5828),s=c(7037);function t(a){return a.replace(/\s+/g," ").trim().toLowerCase()}function u(a,b){let c=t(b),d=t(a);return!!c&&!!d&&(d===c||d.startsWith(`${c} `))}let v=[/^Task output routing:/i,/^Agent operating policy:/i];function w(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(v.some(a=>a.test(b)))break;c.push(a)}return c.join(" ").replace(/\s+/g," ").trim()}function x(a,b=64){if(!a)return"";let c=w(a);return c?c.length<=b?c:`${c.slice(0,Math.max(b-1,1)).trimEnd()}…`:""}var y=c(5612),z=c(4853);let A=(0,l.promisify)(d.execFile),B="gateway.remote.url",C=k().join(process.cwd(),".mission-control"),D=k().join(C,"settings.json"),E=k().join(C,"dispatches"),F=k().join(process.cwd(),"scripts","openclaw-mission-dispatch-runner.mjs"),G=k().join(i().homedir(),".openclaw"),H=/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/gi,I=null,J=null,K=null,L=new Map;function M(){I=null,K=null,L=new Map}async function N(a={}){if(!a.force&&I&&I.expiresAt>Date.now())return a.includeHidden?I.full:I.visible;if(J){let b=await J;return a.includeHidden?b.full:b.visible}J=O();try{let b=await J;return I={...b,expiresAt:Date.now()+1e4},a.includeHidden?b.full:b.visible}finally{J=null}}async function O(){if(!await (0,q.Vg)())return P(n("OpenClaw CLI is not installed on this machine."));try{var a,b,c,d,e;let f,g,h,i,j,l,n,o,p,r,s,t,u,v,w,x=await aZ(),y=aW(x.workspaceRoot)??null,[z,A,C,D,E,F,G,H,I]=await Promise.allSettled([(0,q.VP)(["gateway","status","--json"]),(0,q.VP)(["config","get",B,"--json"]),(0,q.VP)(["status","--json"]),(0,q.VP)(["agents","list","--json"]),(0,q.VP)(["config","get","agents.list","--json"]),(0,q.VP)(["models","list","--json"]),(0,q.VP)(["models","status","--json"]),(0,q.VP)(["sessions","--all-agents","--json"]),(0,q.VP)(["gateway","call","system-presence","--json"])]),J="fulfilled"===z.status?(K={value:z.value,capturedAt:Date.now()},{value:z.value,reusedCachedValue:!1}):K&&Date.now()-K.capturedAt<=6e4?{value:K.value,reusedCachedValue:!0}:{value:void 0,reusedCachedValue:!1},L=J.value,M="fulfilled"===A.status?cm(A.value):void 0,N="fulfilled"===C.status?C.value:void 0,O="fulfilled"===D.status?D.value:[],P="fulfilled"===E.status?E.value:[],R="fulfilled"===F.status?F.value.models:[],S="fulfilled"===G.status?G.value:void 0,T="fulfilled"===H.status?H.value.sessions:[],U="fulfilled"===I.status?I.value:[],V="fulfilled"===C.status||"fulfilled"===D.status||"fulfilled"===E.status||"fulfilled"===F.status||"fulfilled"===G.status||"fulfilled"===H.status||"fulfilled"===I.status,W=await a3(O.map(a=>a.id),x),X=new Map,Y=new Map,Z=new Map,$=[],_=[],aa=new Map((N?.heartbeat?.agents??[]).map(a=>[a.agentId,a])),ab=new Map(P.map(a=>[a.id,a])),ac=new Map;for(let a of T){if(!a.agentId)continue;let b=ac.get(a.agentId)??[];b.push(a),ac.set(a.agentId,b)}let ad=(await Promise.all(T.map(a=>aD(a,P,O)))).flat(),ag=await af(ad),ah=b7(ag),ai=await ae(ah),aj=b7([...ai,...ag]);for(let b of O){let c=ab.get(b.id),d=bN(b.workspace),e=ac.get(b.id)??[],f=Z.get(b.workspace)??await bX(b.workspace);Z.set(b.workspace,f);let g=f.agents.find(a=>a.id===b.id)??null,h=(c?.skills??[]).filter(a=>!bv(a)),i=g?.policy??(0,m.g0)((0,m.qF)({skills:h,id:b.id,name:b.name||b.identityName||c?.name||b.id}),{fileAccess:c?.tools?.fs?.workspaceOnly?"workspace-only":"extended"}),j=b.model||c?.model||"unassigned",l=Y.get(b.workspace)??await bO(b.workspace,{agentId:b.id,agentName:b.name||b.identityName||c?.name||b.id,configuredSkills:h,configuredTools:c?.tools?.fs?.workspaceOnly?["fs.workspaceOnly"]:[]});Y.set(b.workspace,l);let n=aj.filter(a=>a.agentId===b.id).sort(b8),o=b6(n.flatMap(a=>a.toolNames??[])),p=n.map(a=>a.id),q=n[0],r=e.map(a=>a.updatedAt??0).sort((a,b)=>b-a).at(0)||null,s=aa.get(b.id),t=(a={rpcOk:!!L?.rpc?.ok,activeRuntime:q,heartbeatEnabled:!!s?.enabled,lastActiveAt:r}).rpcOk?a.activeRuntime?.status==="running"||a.activeRuntime?.status==="queued"?"engaged":a.heartbeatEnabled?"monitoring":a.lastActiveAt?"ready":"standby":"offline",u=function(a,b){var c;let d=bN(b),e=a.get(d);if(e)return e;let f={id:d,name:(c=b,(k().basename(c)||c).split(/[-_]/g).filter(Boolean).map(a=>a[0].toUpperCase()+a.slice(1)).join(" ")),slug:cn(k().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}};return a.set(d,f),f}(X,b.workspace);u.agentIds.push(b.id),u.modelIds.push(j),u.activeRuntimeIds.push(...p),u.totalSessions+=e.length;let v={id:b.id,name:b.name||b.identityName||c?.name||b.id,workspaceId:d,workspacePath:b.workspace,modelId:j,isDefault:!!(b.isDefault||c?.default),status:t,sessionCount:e.length,lastActiveAt:r,currentAction:function(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"}({runtime:q,heartbeatEvery:s?.every??null,status:t}),activeRuntimeIds:p,heartbeat:{enabled:!!s?.enabled,every:s?.every??null,everyMs:s?.everyMs??null},identity:{emoji:c?.identity?.emoji||b.identityEmoji,theme:c?.identity?.theme,avatar:c?.identity?.avatar,source:b.identitySource},profile:l,skills:h,tools:c?.tools?.fs?.workspaceOnly?["fs.workspaceOnly"]:[],observedTools:o,policy:i};for(let a of($.push(v),_.push({id:`edge:${d}:${v.id}:contains`,sourceId:d,targetId:v.id,kind:"contains",label:"workspace member"}),_.push({id:`edge:${v.id}:${j}:model`,sourceId:v.id,targetId:j,kind:"uses-model",label:"model assignment"}),p))_.push({id:`edge:${v.id}:${a}:run`,sourceId:v.id,targetId:a,kind:"active-run",label:"runtime"})}let ak=new Map;for(let a of $){let b=ak.get(a.workspaceId)??[];b.push(a),ak.set(a.workspaceId,b)}let al=await Promise.all(Array.from(X.values()).map(async a=>{var b;let c,d=ak.get(a.id)??[],e=await bP(a.path,d),f=Z.get(a.path)??null;return{...a,name:f?.name??a.name,modelIds:cg(a.modelIds),activeRuntimeIds:cg(a.activeRuntimeIds),health:(b=a.agentIds,(c=$.filter(a=>b.includes(a.id))).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"),bootstrap:e.bootstrap,capabilities:e.capabilities}})),am=new Set(al.filter(a=>Z.get(a.path)?.hidden).map(a=>a.id)),an=$.filter(a=>!am.has(a.workspaceId)),ao=new Set($.filter(a=>am.has(a.workspaceId)).map(a=>a.id)),ap=aj.filter(a=>!(a.agentId&&ao.has(a.agentId))&&!(a.workspaceId&&am.has(a.workspaceId))),aq=new Set(aj.filter(a=>a.agentId&&ao.has(a.agentId)||a.workspaceId&&am.has(a.workspaceId)).map(a=>a.id)),ar=new Set([...am,...ao,...aq]),as=_.filter(a=>!ar.has(a.sourceId)&&!ar.has(a.targetId)),at=al.filter(a=>!am.has(a.id)),au=a=>{let b=new Map;for(let c of a)b.set(c.modelId,(b.get(c.modelId)??0)+1);return R.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}))},av=(b=R,c=S,f=b.filter(a=>b9(a)),g=cg([...b.map(a=>a.key.split("/")[0]||"unknown"),...(c?.auth?.providers??[]).map(a=>a.provider).filter(ch),...(c?.auth?.oauth?.providers??[]).map(a=>a.provider).filter(ch)].filter(ch)),h=new Map((c?.auth?.providers??[]).filter(a=>ch(a.provider)).map(a=>[a.provider,a])),i=new Map((c?.auth?.oauth?.providers??[]).filter(a=>ch(a.provider)).map(a=>[a.provider,a])),j=cm(c?.resolvedDefault??void 0),l=cm(c?.defaultModel??void 0),o=(n=j??l)?function(a){let[b]=a.split("/",1);return b||null}(n):null,r=(p=!!(n&&f.some(a=>a.key===n)))?n:f[0]?.key??null,s=g.map(a=>{var c;let d=b.filter(b=>(b.key.split("/")[0]||"unknown")===a),e=d.some(a=>!0!==a.local),f=h.get(a),g=i.get(a),j=d.some(a=>b9(a))||(f?.profiles?.count??0)>0||g?.status==="ok",k=null;return g?.status==="ok"?k="OAuth connected":(f?.profiles?.count??0)>0?k=`${f?.profiles?.count} auth profile${f?.profiles?.count===1?"":"s"}`:d.some(a=>a.local)?k="Install or pull a local model to unlock this route.":e&&(c=a,k="openrouter"===c.trim().toLowerCase()?`Add your ${ca(c)} API key in terminal to use this route.`:`Connect ${ca(c)} auth in terminal to use this route.`),{provider:a,connected:j,canLogin:e,detail:k}}),t=(c?.auth?.missingProvidersInUse??[]).filter(ch),u=new Set(t),v=c?.auth?.unusableProfiles?.length??0,w=[],0===f.length&&w.push("No available models were detected yet."),f.length>0&&!n&&w.push("Choose a default model to finish setup."),n&&!p&&(o&&u.has(o)?w.push(`Default model is set, but ${ca(o)} auth is still missing.`):t.length>0?w.push(`Default model is set, but auth is still missing for: ${t.join(", ")}.`):w.push("The selected default model is not ready yet.")),t.length>0&&!n&&w.push(`Auth is still missing for: ${t.join(", ")}.`),v>0&&w.push("Some stored model auth profiles are not usable."),{ready:f.length>0&&p,defaultModel:l??null,resolvedDefaultModel:j??null,defaultModelReady:p,recommendedModelId:r??null,preferredLoginProvider:s.find(a=>a.provider===o&&!a.connected&&a.canLogin)?.provider??t.find(a=>s.some(b=>b.provider===a&&!b.connected&&b.canLogin))??s.find(a=>!a.connected&&a.canLogin)?.provider??(g.includes("openai-codex")||0===f.length?"openai-codex":null),totalModelCount:b.length,availableModelCount:f.length,localModelCount:f.filter(a=>a.local).length,remoteModelCount:f.filter(a=>!0!==a.local).length,missingModelCount:b.filter(a=>a.missing||!1===a.available).length,authProviders:s,issues:cg(w)}),aw=N?.securityAudit?.findings?.filter(a=>"warn"===a.severity).map(a=>a.title||a.detail||"Security warning")??[],ax=cm(U[0]?.version||N?.runtimeVersion||N?.overview?.version||N?.version),ay=cm(N?.update?.registry?.latestVersion??void 0),az=function(a){let b=cm(a);if(b)return b.split(/\r?\n/,1)[0]?.trim()||b}(N?.update?.registry?.error??void 0),aA=ax&&ay?ck(ay,ax)>0:void 0,aB=function(a){let b=cm(a.legacyInfo);if(a.latestVersion&&a.currentVersion){let b=ck(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}`:void 0)}({currentVersion:ax,latestVersion:ay,updateError:az,legacyInfo:N?.overview?.update}),aC={installed:!0,loaded:!!L?.service?.loaded,rpcOk:!!L?.rpc?.ok,health:(d={rpcOk:L?.rpc?.ok,warningCount:aw.length,runtimeIssueCount:W.issues.length,hasOpenClawSignal:V}).rpcOk||d.hasOpenClawSignal?!d.rpcOk||d.warningCount>0||d.runtimeIssueCount>0?"degraded":"healthy":"offline",version:ax,latestVersion:ay,updateAvailable:aA,updateError:az,updateRoot:cm(N?.update?.root??void 0),updateInstallKind:cm(N?.update?.installKind??void 0),updatePackageManager:cm(N?.update?.packageManager??void 0),workspaceRoot:cb(y),configuredWorkspaceRoot:y??null,dashboardUrl:`http://127.0.0.1:${L?.gateway?.port??18789}/`,gatewayUrl:L?.gateway?.probeUrl||"ws://127.0.0.1:18789",configuredGatewayUrl:M??null,bindMode:L?.gateway?.bindMode,port:L?.gateway?.port,updateChannel:N?.updateChannel||"stable",updateInfo:aB,serviceLabel:L?.service?.label,modelReadiness:av,runtime:W,securityWarnings:aw,issues:[...(e={gatewayStatus:z,status:C,agents:D,models:F,modelStatus:G,sessions:H},Object.entries(e).flatMap(([a,b])=>"rejected"!==b.status?[]:[`${a}: ${b.reason instanceof Error?b.reason.message:String(b.reason)}`])),..."rejected"===z.status&&J.reusedCachedValue?["gatewayStatus: Reusing the last successful gateway status after a transient OpenClaw check failure."]:[],...W.issues]},aE=Q(aj,$),aF=Q(ap,an),aG={generatedAt:new Date().toISOString(),mode:"live",diagnostics:aC,presence:U.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:{...aG,workspaces:al,agents:$,models:au($),runtimes:aj,tasks:aE,relationships:_},visible:{...aG,workspaces:at,agents:an,models:au(an),runtimes:ap,tasks:aF,relationships:as}}}catch(a){return P(n(a instanceof Error?a.message:"Unknown OpenClaw error."))}}function P(a){return{visible:a,full:a}}function Q(a,b){let c=new Map,d=new Map(b.map(a=>[a.id,a.name])),e=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():"";a&&d&&b.set(`${c.agentId??"unknown"}:${a}`,d)}return b}(a);for(let b of a){let a=function(a,b){let c=a.taskId?.trim(),d="string"==typeof a.metadata.dispatchId?a.metadata.dispatchId.trim():"",e=R(a),f=a.sessionId?.trim(),g=f?b.get(`${a.agentId??"unknown"}:${f}`)?.trim()??"":"";return d?`dispatch:${d}`:g?`dispatch:${g}`:c?`task:${c}`:e?`mission:${a.agentId??"unknown"}:${V(e)}`:f?`session:${f}`:`runtime:${a.id}`}(b,e),d=c.get(a)??[];d.push(b),c.set(a,d)}return Array.from(c.entries()).map(([a,b])=>{var c,e,f,g,h;let i,j,k,l,m,n,o,p,q,r,s,t,u,v;return c=a,e=b,f=d,l=R(k=[...j=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}(i=[...e].sort(b8))].sort((a,b)=>S(b)-S(a))[0]??j[0]??i[0])||i.map(a=>R(a)).find(Boolean)||null,m=j.map(a=>a.subtitle?.trim()).find(a=>!!a)||i.map(a=>a.subtitle?.trim()).find(a=>!!a)||"Awaiting OpenClaw updates.",n=bK(i.flatMap(a=>T(a)).concat(i.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&&c.push({path:b,displayPath:b})}return bK(c)})(a.subtitle)))),o=b6(i.flatMap(a=>U(a))),p=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})}(i),q=b6(i.flatMap(a=>a.agentId?[a.agentId]:[])),r=b6(i.flatMap(a=>a.sessionId?[a.sessionId]:[])),s=b6(i.flatMap(a=>a.runId?[a.runId]:[])),u=(t=k?.agentId||q[0])?f.get(t)??null:null,v=i[0]??null,{id:(g=c,`task:${V(g)}`),key:c,title:x(l||k?.title||"Untitled task",52)||"Untitled task",mission:l,subtitle:m,status:(h=i).some(a=>"running"===a.status)?"running":h.some(a=>"cancelled"===a.status)?"cancelled":h.some(a=>"queued"===a.status)?"queued":h.some(a=>"stalled"===a.status)?"stalled":h.some(a=>"idle"===a.status)?"idle":h[0]?.status??"completed",updatedAt:v?.updatedAt??null,ageMs:v?.ageMs??null,workspaceId:k?.workspaceId,primaryAgentId:t,primaryAgentName:u,primaryRuntimeId:k?.id,dispatchId:function(a){for(let b of a)if("string"==typeof b.metadata.dispatchId&&b.metadata.dispatchId.trim())return b.metadata.dispatchId.trim()}(i),runtimeIds:i.map(a=>a.id),agentIds:q,sessionIds:r,runIds:s,runtimeCount:i.length,updateCount:j.filter(a=>"turn"===a.source).length,liveRunCount:i.filter(a=>"running"===a.status||"queued"===a.status).length,artifactCount:n.length,warningCount:o.length,tokenUsage:p,metadata:{mission:l,primaryRuntimeSource:k?.source??null,bootstrapStage:"string"==typeof k?.metadata.bootstrapStage?k.metadata.bootstrapStage:null,dispatchStatus:"string"==typeof k?.metadata.dispatchStatus?k.metadata.dispatchStatus:null,dispatchSubmittedAt:"string"==typeof k?.metadata.dispatchSubmittedAt?k.metadata.dispatchSubmittedAt:null,dispatchRunnerStartedAt:"string"==typeof k?.metadata.dispatchRunnerStartedAt?k.metadata.dispatchRunnerStartedAt:null,dispatchHeartbeatAt:"string"==typeof k?.metadata.dispatchHeartbeatAt?k.metadata.dispatchHeartbeatAt:null,dispatchObservedAt:"string"==typeof k?.metadata.dispatchObservedAt?k.metadata.dispatchObservedAt:null,outputDir:"string"==typeof k?.metadata.outputDir?k.metadata.outputDir:null,outputDirRelative:"string"==typeof k?.metadata.outputDirRelative?k.metadata.outputDirRelative:null}}}).sort((a,b)=>(b.updatedAt??0)-(a.updatedAt??0))}function R(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=w(b);return c.length>0?c:null}function S(a){return 8*!!R(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 T(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 U(a){let b=a.metadata.warnings;return Array.isArray(b)?b.filter(a=>"string"==typeof a&&a.trim().length>0):[]}function V(a){return(0,e.createHash)("sha1").update(a).digest("hex").slice(0,12)}async function W(a){let b=await a2(a?[a]:[],{touch:!0});if(b.issues.length>0)throw I=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 X(a={}){return await W(a.agentId??null),I=null,N({force:!0,includeHidden:!0})}async function Y(a={}){var b,c,d,e;let f=(b=await N({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(!f)return{status:"not-run",checkedAt:null,agentId:null,runId:null,summary:null,error:"Mission Control could not find an OpenClaw agent for the runtime smoke test."};let g=(d=await aZ(),e=f,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}(g))return a_(f,g);await W(f);try{let a=await (0,q.VP)(["agent","--agent",f,"--message","Mission Control runtime smoke test. Reply with a brief READY status.","--thinking","off","--timeout","45","--json"],{timeoutMs:5e4}),b={status:"passed",checkedAt:new Date().toISOString(),agentId:f,runId:a.runId,summary:a.summary||a.result?.payloads?.[0]?.text||"Mission Control verified a real OpenClaw turn.",error:null};return await a0(b),I=null,b}catch(b){let a={status:"failed",checkedAt:new Date().toISOString(),agentId:f,runId:null,summary:null,error:a4(b)||"OpenClaw runtime smoke test failed."};return await a0(a),I=null,a}}async function Z(a){var b,c,d,f,g;let h,i,j=a.mission.trim();if(!j)throw Error("Mission text is required.");let k=await N({force:!0,includeHidden:!0}),l=a.agentId||function(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}(k,a.workspaceId);if(!l)throw Error("No OpenClaw agent is available for mission dispatch.");let n=k.agents.find(a=>a.id===l),o=k.workspaces.find(b=>b.id===(a.workspaceId||n?.workspaceId))??(n?{id:n.workspaceId,path:n.workspacePath}:null),p=o?k.agents.filter(a=>a.workspaceId===o.id):[],q=p.find(a=>"setup"===a.policy.preset&&a.id!==n?.id)?.id??null,s=o?await bm(o.path,j):null,t=a.thinking??"medium",u=s?(b=j,c=s,d=n?.policy,f=q,h=d??(0,m.g0)(m.iN),[b,"","Task output routing:",`- Put substantial outputs, drafts, reports, docs, and file deliverables under \`${c.relativeOutputDir}/\`.`,`- If a file is requested, default to \`${c.relativeOutputDir}/<descriptive-file-name>\` unless the user explicitly asks for another path.`,`- Use \`${c.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:",...bn(h,f)].join("\n")):j,v=(0,r.iN)(k)?k.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.",w=(g={agentId:l,mission:j,routedMission:u,thinking:t,workspaceId:o?.id??null,workspacePath:o?.path??null,outputDir:s?.absoluteOutputDir??null,outputDirRelative:s?.relativeOutputDir??null,notesDirRelative:s?.notesDirRelative??null},i=new Date().toISOString(),{id:`dispatch-${(0,e.randomUUID)()}`,status:"queued",agentId:g.agentId,sessionId:(0,e.randomUUID)(),mission:g.mission,routedMission:g.routedMission,thinking:g.thinking,workspaceId:g.workspaceId,workspacePath:g.workspacePath,submittedAt:i,updatedAt:i,outputDir:g.outputDir,outputDirRelative:g.outputDirRelative,notesDirRelative:g.notesDirRelative,runner:{pid:null,childPid:null,startedAt:null,finishedAt:null,lastHeartbeatAt:null},observation:{runtimeId:null,observedAt:null},result:null,error:null});if(await aa(w),v)return w={...w,status:"stalled",updatedAt:new Date().toISOString(),error:v},await aa(w),I=null,{dispatchId:w.id,runId:null,agentId:l,status:w.status,summary:v,payloads:[],meta:{outputDir:s?.absoluteOutputDir,outputDirRelative:s?.relativeOutputDir,notesDirRelative:s?.notesDirRelative}};try{w=await ab(w)}catch(a){throw w={...w,status:"stalled",updatedAt:new Date().toISOString(),error:a4(a)||"Mission dispatch runner could not be started."},await aa(w),I=null,Error(w.error??"Mission dispatch runner could not be started.")}return I=null,{dispatchId:w.id,runId:null,agentId:l,status:w.status,summary:"Mission accepted and queued for OpenClaw execution.",payloads:[],meta:{outputDir:s?.absoluteOutputDir,outputDirRelative:s?.relativeOutputDir,notesDirRelative:s?.notesDirRelative}}}async function $(a,b,c){var d;let e,f=(await N({force:!0,includeHidden:!0})).tasks.find(b=>b.id===a),g=f?await ac(f):c?await ak(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(an(g.status))return{taskId:a,dispatchId:g.id,status:g.status,summary:aC(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(d=b)?d.trim():"").length>0?e:"Mission aborted by operator.",j={...g,status:"cancelled",updatedAt:h,error:i,runner:{...g.runner,finishedAt:h,lastHeartbeatAt:h}};await aa(j),I=null;let k=await ad(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}}function _(a){return k().join(E,`${a}.json`)}async function aa(a){let b=_(a.id),c=`${b}.${process.pid}.tmp`;await (0,g.mkdir)(k().dirname(b),{recursive:!0}),await (0,g.writeFile)(c,`${JSON.stringify(a,null,2)}
2
- `,"utf8"),await (0,g.rename)(c,b)}async function ab(a){await (0,g.access)(F,f.constants.R_OK);let b=await (0,q.XP)(),c=(0,d.spawn)(process.execPath,[F,_(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 ac(a){if(a.dispatchId){let b=await ak(a.dispatchId);if(b)return b}let b=await aj(),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&&u(e.mission,a.mission)||e.observation.runtimeId&&c.has(e.observation.runtimeId))return e;let b=aw(e);if(b&&d.has(b))return e}return null}async function ad(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 A("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 ae(a){let b=await aj(),c=[],d=Date.now();for(let e of b){let b=ao(e,a);if(b){await ag(e,b),await ah(e,b);continue}let f=await ai(e);if(f){an(e.status)||await ah(e,f),c.push(aq(await ak(e.id)??e,f.sessionId??aw(e)??void 0));continue}c.push(function(a,b){let c=Date.parse(a.updatedAt),d=as(a,b),e=ar(a,d),f=function(a,b){if("completed"===b||"cancelled"===b)return bL(aC(a),90);if("stalled"===b)return a.error?bL(a.error,90):a.runner.lastHeartbeatAt?"Dispatch stalled while waiting for the first OpenClaw runtime.":"Dispatch stalled before the first runner heartbeat.";let c=ar(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."}(a,d),g=aw(a),h=ax(a),i=ay(a),j=aB(a);return{id:`runtime:dispatch:${a.id}`,source:"turn",key:`dispatch:${a.id}`,title:x(a.mission,38)||"Queued mission",subtitle:j?bL(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}:{}}}}(e,d))}return c.sort(b8)}async function af(a){if(0===a.length)return a;let b=await aj();if(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=R(a),e=an(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}}}(e,a))}return c}async function ag(a,b){let c=bE(b.updatedAt);if(a.observation.runtimeId===b.id&&a.observation.observedAt===c)return;let d=await ak(a.id)??a;(d.observation.runtimeId!==b.id||d.observation.observedAt!==c)&&await aa({...d,updatedAt:am(d.updatedAt,c),observation:{runtimeId:b.id,observedAt:c}})}async function ah(a,b){var c,d;if(an(a.status)||!b.agentId||!b.sessionId)return;let e=await bB(b.agentId,b.sessionId,a.workspacePath??void 0);if(!e)return;let f="";try{f=await (0,g.readFile)(e,"utf8")}catch{return}let h=bF(b,f,a.workspacePath??void 0),i=!!(h.finalTimestamp&&h.stopReason&&"toolUse"!==h.stopReason),j=!!h.errorMessage||"error"===h.stopReason||"aborted"===h.stopReason;if(!i&&!j)return;let k=await ak(a.id)??a;if(an(k.status))return;let l=h.finalTimestamp??bE(b.updatedAt),m=j?"stalled":"completed";await aa({...k,status:m,updatedAt:am(k.updatedAt,l),runner:{...k.runner,finishedAt:l,lastHeartbeatAt:l},result:"completed"===m?k.result??(c=b,(d=h).finalText||c.runId?{runId:c.runId||`runtime:${c.id}`,status:d.errorMessage?"error":"ok",summary:d.errorMessage||"completed",...d.finalText?{result:{payloads:[{text:d.finalText,mediaUrl:null}]}}:{}}:null):k.result,error:"stalled"===m?h.errorMessage||k.error||"OpenClaw runtime ended before the dispatch runner finalized.":null})}async function ai(a){let b=aw(a);if(!a.agentId||!b)return null;let c=await bB(a.agentId,b,a.workspacePath??void 0);if(!c)return null;try{let d=await (0,g.readFile)(c,"utf8"),e=aq(a,b),f=bH(d,e,a.workspacePath??void 0);if(0===f.length||a.mission&&!f.some(b=>u(b.prompt,a.mission)))return null;return e}catch{return null}}async function aj(){try{let a=await (0,g.readdir)(E,{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,f=k().join(E,a.name),h=await al(f);return h?(c=h,d=b,e=Date.parse(c.updatedAt),!Number.isNaN(e)&&d-e>2592e5)?(await (0,g.rm)(f,{force:!0}),null):h:null}))).filter(a=>!!a).sort((a,b)=>Date.parse(b.updatedAt)-Date.parse(a.updatedAt))}catch{return[]}}async function ak(a){return al(_(a))}async function al(a){try{var b,c,d;let e=await (0,g.readFile)(a,"utf8"),f=JSON.parse(e);if(!f||"object"!=typeof f||"string"!=typeof f.id||"string"!=typeof f.agentId||"string"!=typeof f.mission||"string"!=typeof f.routedMission||"string"!=typeof f.submittedAt||"string"!=typeof f.updatedAt)return null;let h=(b=f.status,"running"===b||"completed"===b||"stalled"===b||"cancelled"===b?b:"queued");return{id:f.id,status:h,agentId:f.agentId,sessionId:"string"==typeof f.sessionId?f.sessionId:null,mission:f.mission,routedMission:f.routedMission,thinking:(c=f.thinking,"off"===c||"minimal"===c||"low"===c||"high"===c?c:"medium"),workspaceId:"string"==typeof f.workspaceId?f.workspaceId:null,workspacePath:"string"==typeof f.workspacePath?f.workspacePath:null,submittedAt:f.submittedAt,updatedAt:f.updatedAt,outputDir:"string"==typeof f.outputDir?f.outputDir:null,outputDirRelative:"string"==typeof f.outputDirRelative?f.outputDirRelative:null,notesDirRelative:"string"==typeof f.notesDirRelative?f.notesDirRelative:null,runner:{pid:"number"==typeof f.runner?.pid?f.runner.pid:null,childPid:"number"==typeof f.runner?.childPid?f.runner.childPid:null,startedAt:"string"==typeof f.runner?.startedAt?f.runner.startedAt:null,finishedAt:"string"==typeof f.runner?.finishedAt?f.runner.finishedAt:null,lastHeartbeatAt:"string"==typeof f.runner?.lastHeartbeatAt?f.runner.lastHeartbeatAt:null},observation:{runtimeId:"string"==typeof f.observation?.runtimeId?f.observation.runtimeId:null,observedAt:"string"==typeof f.observation?.observedAt?f.observation.observedAt:null},result:(d=f.result,"object"==typeof d&&null!==d&&"string"==typeof d.runId&&"string"==typeof d.status&&"string"==typeof d.summary)?f.result:null,error:"string"==typeof f.error?f.error:null}}catch{return null}}function am(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 an(a){return"completed"===a||"stalled"===a||"cancelled"===a}function ao(a,b){var c,d,e;let f=Date.parse(a.submittedAt),g=as(a,Date.now()),h=aw(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("completed"===c.effectiveStatus||"stalled"===c.effectiveStatus||"cancelled"===c.effectiveStatus)return d===b.id?500:null;if(c.observedRuntimeId&&a.id===c.observedRuntimeId)return 1e4;if(c.sessionId&&a.sessionId!==c.sessionId)return null;let e=function(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=t(b);return c.length>0?c:null}(a);return!!d&&u(d,b)}(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||b8(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=as(a,d),f=b??aw(a)??co(a.id),g=aB(a);return{id:a.observation.runtimeId||`runtime:${f}:${co(a.id)}`,source:"turn",key:`dispatch:${a.id}`,title:x(a.mission,38)||"Recovered mission runtime",subtitle:g?bL(g,90):"completed"===a.status||"cancelled"===a.status?bL(aC(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:ax(a)??void 0,sessionId:f,tokenUsage:ay(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:ar(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){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 as(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 at(a){let b=a.result?.result?.meta;if(!b||"object"!=typeof b)return null;let c=b.agentMeta;return c&&"object"==typeof c?c:null}function au(a,b){let c=a?.[b];return"string"==typeof c&&c.trim().length>0?c:null}function av(a,b){let c=a?.[b];return"number"==typeof c&&Number.isFinite(c)?c:null}function aw(a){return(a.sessionId?.trim()||null)??au(at(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 ax(a){return au(at(a),"model")}function ay(a){let b=at(a),c=b?.usage;if(!c||"object"!=typeof c)return;let d=av(c,"total")??av(c,"totalTokens")??av(c,"total_tokens");if(null!==d)return{input:av(c,"input")??av(c,"prompt_tokens")??0,output:av(c,"output")??av(c,"completion_tokens")??0,total:d,cacheRead:av(c,"cacheRead")??0}}function az(a){let b=a.result?.summary?.trim();if(!b)return null;let c=b.toLowerCase();return"completed"===c||"ok"===c||"success"===c||aK(b)?null:b}function aA(a){let b=a.result?.result?.payloads?.find(a=>a.text.trim().length>0)?.text.trim()??null;return aK(b)?null:b}function aB(a){let b=aA(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 aC(a){let b=aB(a);if(b)return b;if("cancelled"===a.status)return bL(a.error||"Mission aborted by operator.",90);let c=az(a)||aA(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.")}async function aD(a,b,c){var d,e,f,h,i,j;let k,l,m,n,o,p,q,r,s,t,u,v,w=(d=a,e=b,m=c.find(a=>a.id===d.agentId),n=e.find(a=>a.id===d.agentId),p=(o=m?.workspace||n?.workspace)?bN(o):void 0,q=ce(d.key,"task"),r=ce(d.key,"stage"),s=d.model&&d.model.includes("/")?d.model:n?.model||m?.model||"unassigned",t=(f=r,h=d.key,i=d.ageMs,"in_progress"===f||h?.endsWith(":main")&&"number"==typeof i&&i<36e5?"running":"completed"===f||"done"===f?"completed":"failed"===f||"error"===f?"stalled":"idle"),u=(k=ce((j=d).key,"task")||j.key||j.sessionId||String(Math.random()),l=j.sessionId||co(j.agentId||"sessionless"),`runtime:${l}:${co(k)}`),v=q?q.slice(0,8):null,{id:u,source:"session",key:d.key||"unknown-session",title:v?`${cf(d.agentId)} \xb7 ${v}`:`${cf(d.agentId)} session`,subtitle:v?`task ${v} \xb7 ${r||"running"}`:"main session",status:t,updatedAt:d.updatedAt??null,ageMs:d.ageMs??null,agentId:d.agentId,workspaceId:p,modelId:s,sessionId:d.sessionId,taskId:q,tokenUsage:"number"==typeof d.totalTokens||"number"==typeof d.inputTokens?{input:d.inputTokens??0,output:d.outputTokens??0,total:d.totalTokens??(d.inputTokens??0)+(d.outputTokens??0),cacheRead:d.cacheRead??0}:void 0,metadata:{kind:d.kind??"direct",stage:r??null,historical:!1}});if(!a.key?.endsWith(":main")||!a.agentId||!a.sessionId)return[w];let y=c.find(b=>b.id===a.agentId),z=b.find(b=>b.id===a.agentId),A=await bB(a.agentId,a.sessionId,y?.workspace||z?.workspace);if(!A)return[w];try{let a=await (0,g.readFile)(A,"utf8"),b=bH(a,w,y?.workspace||z?.workspace).filter(a=>!a.prompt.toLowerCase().startsWith("read heartbeat.md if it exists")),c=bJ(b);if(0===b.length)return[w];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())&&x(f,38)||`${cf(e)} run`),i=b.warningSummary?bL(`Completed with fallback: ${b.warningSummary}`,90):b.finalText?bL(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:i,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}}})(w,a,c))}catch{return[w]}}async function aE(a){let b=await N({includeHidden:!0}),c=b.runtimes.find(b=>b.id===a);return(c||(c=(b=await N({force:!0,includeHidden:!0})).runtimes.find(b=>b.id===a)),c)?aL(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 aF(a){let b=await N({includeHidden:!0}),c=b.tasks.find(b=>b.id===a);if(c||(c=(b=await N({force:!0,includeHidden:!0})).tasks.find(b=>b.id===a)),!c)throw Error("Task was not found in the current OpenClaw snapshot.");let d=c.runtimeIds.map(a=>b.runtimes.find(b=>b.id===a)).filter(a=>!!a).sort(b8),e=await Promise.all(d.map(a=>aL(a,b))),f=new Map(e.map(a=>[a.runtimeId,a])),g=bK(e.flatMap(a=>a.createdFiles).concat(d.flatMap(a=>T(a)))),h=b6(e.flatMap(a=>a.warnings).concat(d.flatMap(a=>U(a)))),i=c.dispatchId?await ak(c.dispatchId):null,j=function(a,b,c){if(!b)return[];let d=c.agents.find(b=>b.id===a.primaryAgentId)?.name??"OpenClaw",e=[bD({id:`${b.id}:accepted`,kind:"user",timestamp:b.submittedAt,title:"Mission accepted",detail:bL(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)&&e.push(bD({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&&e.push(bD({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&&e.push(bD({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=az(b)||aA(b);e.push(bD({id:`${b.id}:completed`,kind:"status",timestamp:b.runner.finishedAt??b.updatedAt,title:a?"Mission finished":"Dispatch runner finished",detail:bL(a||aC(b),220)},{urlSources:[a,aC(b),b.outputDirRelative],file:b.outputDir&&b.outputDirRelative?{path:b.outputDir,displayPath:b.outputDirRelative}:null}))}"cancelled"===b.status&&e.push(bD({id:`${b.id}:cancelled`,kind:"warning",timestamp:b.runner.finishedAt??b.updatedAt,title:"Mission cancelled",detail:bL(aC(b),220),isError:!1},{urlSources:[b.error,b.outputDirRelative],file:b.outputDir&&b.outputDirRelative?{path:b.outputDir,displayPath:b.outputDirRelative}:null}));let f=aB(b);return f&&e.push(bD({id:`${b.id}:integrity-warning`,kind:"warning",timestamp:b.runner.finishedAt??b.updatedAt,title:"Result needs review",detail:bL(f,220),isError:!0},{urlSources:[b.outputDirRelative],file:b.outputDir&&b.outputDirRelative?{path:b.outputDir,displayPath:b.outputDirRelative}:null})),"stalled"===b.status&&e.push(bD({id:`${b.id}:stalled`,kind:"warning",timestamp:b.updatedAt,title:b.error?"Dispatch error":"Dispatch stalled",detail:bL(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}(c,i,b),k=function(a,b,c,d){let e=new Map(d.agents.map(a=>[a.id,a.name])),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)||bE(g.updatedAt));if(b?.items.length)for(let a of b.items)f.push(bD({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:bL(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(bD({id:`${d.id}:status`,kind:"status",timestamp:j,title:i?`${i} \xb7 ${d.status}`:`Run \xb7 ${d.status}`,detail:bL(b?.errorMessage||d.subtitle,220),runtimeId:d.id,agentId:d.agentId,isError:"stalled"===d.status},{urlSources:[b?.errorMessage,d.subtitle]}));for(let a of b6((b?.warnings??[]).concat(U(d))))f.push(bD({id:`${d.id}:warning:${V(a)}`,kind:"warning",timestamp:j,title:"Fallback",detail:bL(a,220),runtimeId:d.id,agentId:d.agentId},{urlSources:[a]}));for(let a of bK((b?.createdFiles??[]).concat(T(d))))f.push(bD({id:`${d.id}:artifact:${V(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(bD({id:`${a.id}:mission`,kind:"user",timestamp:bE(a.updatedAt),title:"Mission",detail:bL(a.mission,220),agentId:a.primaryAgentId},{urlSources:[a.mission]})),f.sort((a,b)=>Date.parse(a.timestamp)-Date.parse(b.timestamp)).slice(-36)}(c,d,f,b),l=await aG({task:c,runs:d,outputs:e,createdFiles:g,dispatchRecord:i,snapshot:b});return{task:c,runs:d,outputs:e,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)}(j,k),createdFiles:g,warnings:h,integrity:l}}async function aG(a){var b,c,d;let{task:e,dispatchRecord:f,createdFiles:g,snapshot:h}=a,i=await aH(f?.outputDir??null),j=f?await aJ(f,h):[],k=e.mission||f?.mission||null,l=k&&j.length>0?j.filter(a=>u(a.prompt,k)):j,m=[...l].sort((a,b)=>Date.parse(b.updatedAt)-Date.parse(a.updatedAt))[0]??null,n=m?.finalText?.trim()||null,o=f?aA(f):null,p=n||o||null,q=n?"runtime":o?"dispatch":"none",r=!!(f&&j.length>0&&0===l.length),s=bJ(l),t=function(a){let b=new Set;for(let c of a)if(c)for(let a of c.match(H)??[])b.add(a.toLowerCase());return[...b]}([p,o,...l.flatMap(a=>a.items.map(a=>a.text))]),v=[],w=aK(p),x=!!(b=k)&&(/\.(txt|md|json|csv|html|pdf|docx?)\b/i.test(b)||/\b(file|files|artifact|artifacts|report|document|save|export|attachment)\b/i.test(b)||/\b(dosya|dosyasi|kaydet|kaydi|cikti)\b/i.test(b)),y=!!(c=k)&&/\b(email|e-mail|mail|mail address|mail adres|eposta|e-posta)\b/i.test(c),z=!!(d=k)&&(/https?:\/\//i.test(d)||/\b[a-z0-9-]+\.(com|net|org|io|ai|co|tr|app|dev|me|info|biz|edu|gov)\b/i.test(d)||/\b(site|website|web|browser|browse|fetch|sitesine|siteye|siteyi)\b/i.test(d));return f?.outputDir&&!i.exists&&v.push({id:"missing-output-dir",severity:"warning",title:"Output folder is missing",detail:`The dispatch points at ${f.outputDirRelative||f.outputDir}, but that folder is not accessible now.`}),"completed"===e.status&&f?.outputDir&&i.exists&&0===i.fileCount&&0===g.length&&v.push({id:"empty-output-dir",severity:x?"error":"warning",title:"Deliverables folder is empty",detail:x?"The task asked for a file deliverable, but the assigned deliverables folder does not contain any files.":"The task is marked completed, but the assigned deliverables folder does not contain any files."}),"completed"===e.status&&0===j.length&&v.push({id:"missing-transcript",severity:"warning",title:"No runtime transcript was captured",detail:"Mission Control could not verify what the agent actually did because no transcript was recovered for this dispatch."}),"cancelled"===e.status&&v.push({id:"task-cancelled",severity:"warning",title:"Task was cancelled by the operator",detail:f?.error||"The mission dispatch was stopped before completion, so the captured evidence is intentionally incomplete."}),r&&f?.agentId&&v.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"!==e.status||p?"stalled"===e.status&&p?v.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"===e.status&&w&&p&&v.push({id:"placeholder-final-response",severity:0===i.fileCount&&0===g.length&&0===l.length?"error":"warning",title:"Completion response looks like a placeholder",detail:`The captured final response was "${p}", which is not enough evidence that the requested work actually finished.`}):v.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"===e.status&&z&&l.length>0&&0===s.length&&v.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"===e.status&&y&&0===t.length&&v.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:v.some(a=>"error"===a.severity)?"error":v.length>0?"warning":"verified",outputDir:f?.outputDir??null,outputDirRelative:f?.outputDirRelative??null,outputDirExists:i.exists,outputFileCount:i.fileCount,transcriptTurnCount:j.length,matchingTranscriptTurnCount:l.length,finalResponseText:p,finalResponseSource:q,dispatchSessionId:f?aw(f):null,sessionMismatch:r,toolNames:s,emails:t,issues:v}}async function aH(a){if(!a)return{exists:!1,fileCount:0};try{if(!(await (0,g.stat)(a)).isDirectory())return{exists:!0,fileCount:1};return{exists:!0,fileCount:await aI(a)}}catch{return{exists:!1,fileCount:0}}}async function aI(a){let b=await (0,g.readdir)(a,{withFileTypes:!0}),c=0;for(let d of b){let b=k().join(a,d.name);if(d.isDirectory()){c+=await aI(b);continue}d.isFile()&&(c+=1)}return c}async function aJ(a,b){let c=aw(a);if(!c)return[];let d=b.agents.find(b=>b.id===a.agentId),e=await bB(a.agentId,c,a.workspacePath??d?.workspacePath);if(!e)return[];try{let b=await (0,g.readFile)(e,"utf8");return bH(b,aq(a,c),a.workspacePath??d?.workspacePath)}catch{return[]}}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,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 bC(a,"This runtime does not expose a session transcript yet.");let d=b.agents.find(b=>b.id===a.agentId),e=await bB(a.agentId,a.sessionId,d?.workspacePath);if(!e)return bC(a,"No transcript file was found for this runtime session.");try{let b=await (0,g.readFile)(e,"utf8");return bF(a,b,d?.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 aM(a){let b=cn(a.id.trim());if(!b)throw Error("Agent id is required.");let c=await N({force:!0,includeHidden:!0}),d=cm(a.workspacePath)??c.workspaces.find(b=>b.id===a.workspaceId)?.path,e=a.workspaceId||(d?bN(d):null);if(function(a,b,c){let d=a.agents.find(a=>a.id===b);if(!d)return;let e=bs(a,d);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,m.g0)(a.policy?.preset??m.iN,a.policy),g=(0,m.Cf)(f.preset),h=cm(a.name)??g.defaultName,i=cm(a.emoji)??g.defaultEmoji,j=cm(a.theme)??g.defaultTheme,k=p(o(f.preset,a.heartbeat)),l=c.agents.find(a=>a.workspaceId===e&&"setup"===a.policy.preset)?.id??null,n=["agents","add",b,"--workspace",d,"--agent-dir",bt(d,b),"--non-interactive","--json"];a.modelId?.trim()&&n.push("--model",a.modelId.trim()),await (0,q.zB)(n);let r=await bw({workspacePath:d,agentId:b,agentName:h,policy:f,setupAgentId:l}),s=await bx(b,d,{name:h,model:cm(a.modelId),heartbeat:k,skills:[r],tools:"workspace-only"===f.fileAccess?{fs:{workspaceOnly:!0}}:null});return await bA(b,d,{name:h||s.name,emoji:i,theme:j,avatar:cm(a.avatar)}),await bY(d,{id:b,name:h,role:(0,m._P)(f.preset),emoji:i,theme:j,enabled:!0,skillId:r,modelId:cm(a.modelId),isPrimary:!1,policy:f}),I=null,{agentId:b,workspaceId:e}}async function aN(a){var b;let c=a.id.trim();if(!c)throw Error("Agent id is required.");let d=await N({force:!0,includeHidden:!0}),e=d.agents.find(a=>a.id===c);if(!e)throw Error("Agent was not found.");let f=cm(a.workspacePath)??d.workspaces.find(b=>b.id===(a.workspaceId||e.workspaceId))?.path??e.workspacePath,g=a.workspaceId||(f?bN(f):e.workspaceId);if(!f||!g)throw Error("Workspace was not found for this agent.");let h=(0,m.g0)(a.policy?.preset??e.policy.preset,a.policy??e.policy),i=cm(e.name),j=cm(e.identity.emoji),k=cm(e.identity.theme),l=p(o(h.preset,a.heartbeat??{enabled:(b=e.heartbeat).enabled,every:b.every??void 0})),n=d.agents.find(a=>a.workspaceId===g&&"setup"===a.policy.preset&&a.id!==c)?.id??null,q=await bw({workspacePath:f,agentId:c,agentName:cm(a.name)??i??c,policy:h,setupAgentId:n}),r=await bx(c,f,{name:cm(a.name),model:cm(a.modelId),heartbeat:l,skills:[...e.skills,q],tools:"workspace-only"===h.fileAccess?{fs:{workspaceOnly:!0}}:null});return await bA(c,f,{name:cm(a.name)??r.name,emoji:cm(a.emoji)??j,theme:cm(a.theme)??k,avatar:cm(a.avatar)}),await bY(f,{id:c,name:cm(a.name)??i??r.name??c,emoji:cm(a.emoji)??j,theme:cm(a.theme)??k,enabled:!0,modelId:cm(a.modelId)??("unassigned"===e.modelId?null:e.modelId),isPrimary:e.isDefault,policy:h}),I=null,{agentId:c,workspaceId:g}}async function aO(a){let b=a.agentId.trim();if(!b)throw Error("Agent id is required.");let c=await N({force:!0,includeHidden:!0}),d=c.agents.find(a=>a.id===b);if(!d)throw Error("Agent was not found.");let e=c.workspaces.find(a=>a.id===d.workspaceId)??null,f=c.runtimes.filter(a=>a.agentId===d.id).length;await (0,q.zB)(["agents","delete",d.id,"--force","--json"]);try{let a=await by(),b=a.filter(a=>a.id!==d.id);b.length!==a.length&&await bz(b)}catch{}if(e){await bZ(e.path,d.id);try{await (0,g.rm)(k().join(e.path,"skills",bu(d.id)),{recursive:!0,force:!0})}catch{}}return I=null,L=new Map,{agentId:d.id,workspaceId:d.workspaceId,workspacePath:d.workspacePath,deletedRuntimeCount:f}}async function aP(a,b={}){var c,d,e,f,g,h;let i,j,k,l=function(a){let b=a.name.trim();if(!b)throw Error("Workspace name is required.");let c=cn(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={...y.eY,...a.rules??{}},i=(a.agents?.length?a.agents:(0,y.P0)(d,e,b)).map(a=>({id:cn(a.id)||"agent",role:a.role.trim()||cf(a.id),name:cm(a.name)??(a.isPrimary?(0,y.sg)(b,a.role,cf(a.id)):cf(a.id)),enabled:!1!==a.enabled,emoji:cm(a.emoji),theme:cm(a.theme),skillId:cm(a.skillId),modelId:cm(a.modelId),isPrimary:!!a.isPrimary,heartbeat:o(a.policy?.preset??(0,m.qF)({skills:a.skillId?[a.skillId]:[],id:a.id,name:a.name}),a.heartbeat),policy:(0,m.g0)(a.policy?.preset??(0,m.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=br(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:cm(a.brief),directory:cm(a.directory),modelId:cm(a.modelId),repoUrl:cm(a.repoUrl),existingPath:cm(a.existingPath),sourceMode:f,template:d,teamPreset:e,modelProfile:g,rules:h,docOverrides:(0,z.Iy)(a.docOverrides),agents:i}}(a),n=l.agents.filter(a=>a.enabled),p=(0,s.X6)({template:(0,s.fV)({sourceMode:l.sourceMode,agentCount:n.length,kickoffMission:l.rules.kickoffMission}),onProgress:b.onProgress});if(0===n.length)throw Error("Enable at least one agent for the workspace.");await p.startStep("validate","Resolving workspace settings and reserving the target directory."),await p.addActivity("validate",`Validated workspace name "${l.name}".`);let q=await bc(l);await p.updateStep("validate",{percent:38,detail:`Reserved target directory at ${q}.`}),await p.addActivity("validate",`Reserved target directory ${q}.`,"done");let r=await N({force:!0,includeHidden:!0});await p.updateStep("validate",{percent:72,detail:"Checking current OpenClaw snapshot and agent ids."}),function(a,b,c){let d=c.map(a=>bq(b,a.id)),e=br(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 "${bs(a,c)}". Rename the workspace or adjust the agent ids.`)}}(r,l.slug,n),await p.completeStep("validate",`Workspace input and ${n.length} agent configuration${1===n.length?"":"s"} are ready.`),await p.startStep("source",(c=l.sourceMode,d=q,"clone"===c?`Cloning the source repository into ${d}.`:"existing"===c?`Preparing the existing workspace folder at ${d}.`:`Creating a fresh workspace folder at ${d}.`)),await p.addActivity("source",(e=l.sourceMode,f=l,"clone"===e?f.repoUrl?`Cloning ${f.repoUrl}.`:"Cloning the requested repository.":"existing"===e?f.existingPath?`Attaching ${f.existingPath}.`:"Attaching the requested folder.":"Preparing an empty workspace scaffold."),"active"),await a6({targetDir:q,sourceMode:l.sourceMode,repoUrl:l.repoUrl,existingPath:l.existingPath}),await p.completeStep("source",(g=l.sourceMode,h=q,"clone"===g?`Repository content is available at ${h}.`:"existing"===g?`Existing folder linked and ready at ${h}.`:`Fresh workspace folder created at ${h}.`)),await p.startStep("scaffold","Writing the initial workspace scaffold and local metadata."),await p.addActivity("scaffold","Generating workspace docs, memory, and configuration files."),await a7(q,{name:l.name,brief:l.brief,template:l.template,teamPreset:l.teamPreset,modelProfile:l.modelProfile,rules:l.rules,docOverrides:l.docOverrides,sourceMode:l.sourceMode,agents:n}),await p.completeStep("scaffold","Workspace files and starter docs are in place.");let t=[];for(let a of(await p.startStep("agents",1===n.length?"Provisioning the first workspace agent.":`Provisioning ${n.length} workspace agents.`),n)){let b=t.length,c=b+1;await p.updateStep("agents",{percent:Math.round(b/n.length*100),detail:`Creating agent ${c} of ${n.length}: ${a.name}.`}),await p.addActivity("agents",`Creating ${a.name} (${a.role}).`);let d=await ba({workspacePath:q,workspaceSlug:l.slug,workspaceModelId:l.modelId,agent:a});t.push(d),await p.addActivity("agents",`Created ${a.name} as ${d}.`,"done"),await p.updateStep("agents",{percent:Math.round(t.length/n.length*100),detail:`${t.length} of ${n.length} agent${1===n.length?"":"s"} ready.`})}await p.completeStep("agents",`${t.length} agent${1===t.length?"":"s"} linked to the workspace.`);let u=t.find(a=>n.some(b=>b.isPrimary&&bq(l.slug,b.id)===a))??t[0];if(l.rules.kickoffMission){await p.startStep("kickoff",`Dispatching the kickoff mission to ${u}.`),await p.addActivity("kickoff",`Selected ${u} as the primary agent.`);try{let a=await bb({agentId:u,brief:l.brief,modelProfile:l.modelProfile,template:l.template},{onProgress:async({message:a,percent:b})=>{await p.updateStep("kickoff",{percent:b,detail:a}),await p.addActivity("kickoff",a,b>=100?"done":"active")}});i=a.runId,j=a.status,await p.completeStep("kickoff",`Kickoff mission finished with status ${j||"unknown"}.`)}catch(a){k=a instanceof Error?a.message:"Kickoff mission could not be started.",await p.addActivity("kickoff",k,"error"),await p.failStep("kickoff",k)}}else await p.startStep("kickoff","Finalizing workspace bootstrap."),await p.addActivity("kickoff","Kickoff mission is disabled for this workspace.","done"),await p.completeStep("kickoff","Workspace bootstrap finished without kickoff.");return I=null,L=new Map,{workspaceId:bN(q),workspacePath:q,agentIds:t,primaryAgentId:u,kickoffRunId:i,kickoffStatus:j,kickoffError:k}}async function aQ(a){let b=a.workspaceId.trim();if(!b)throw Error("Workspace id is required.");if(a.plan){var c;let d=a.baseline??await bQ(b);return aR({id:(c=d).workspaceId,name:c.name,slug:cn(k().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}},a.plan,{name:a.name,directory:a.directory,baseline:d})}let d=(await N({force:!0})).workspaces.find(a=>a.id===b);if(!d)throw Error("Workspace was not found.");let e=cd(d.path,a.name,a.directory);if(e!==d.path){await cc(e,d.path);try{await (0,g.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 by()).map(a=>a.workspace===d.path?{...a,workspace:e,agentDir:"string"==typeof a.agentDir&&a.agentDir.startsWith(`${d.path}${k().sep}`)?k().join(e,k().relative(d.path,a.agentDir)):a.agentDir}:a);await bz(a)}return I=null,L=new Map,{workspaceId:bN(e),previousWorkspaceId:d.id,workspacePath:e}}async function aR(a,b,c){var d,e;let f=cm(c.name)??cm(b.workspace.name)??a.name,h=cm(c.directory),i=cm(c.baseline.directory)??a.path,j=cm(c.baseline.name)??a.name,l=cm(c.baseline.brief)??"",m=cm(b.company.mission)??cm(b.product.offer)??"",n=(0,z.Iy)(b.workspace.docOverrides),o=(0,z.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=f.trim()!==j.trim(),u=t||m!==l||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)||!bR(r,s),v=h&&h!==i?cd(a.path,void 0,h):t?cd(a.path,f,void 0):a.path,w=v!==a.path;if(w){await cc(v,a.path);try{await (0,g.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 by()).map(b=>b.workspace===a.path?{...b,workspace:v,agentDir:"string"==typeof b.agentDir&&b.agentDir.startsWith(`${a.path}${k().sep}`)?k().join(v,k().relative(a.path,b.agentDir)):b.agentDir}:b);await bz(b)}let x=k().join(v,".openclaw","project.json"),A=new Date().toISOString(),B=!1,C=null;try{let a=await (0,g.readFile)(x,"utf8"),b=JSON.parse(a);b_(b)&&(A="string"==typeof b.createdAt?b.createdAt:A,B=!0===b.hidden,C="string"==typeof b.systemTag?b.systemTag:null)}catch{}let D=b.team.persistentAgents.map(a=>({id:a.id,name:a.name,role:a.role,enabled:a.enabled,emoji:cm(a.emoji)??null,theme:cm(a.theme)??null,isPrimary:!!a.isPrimary,skillId:cm(a.skillId)??null,modelId:cm(a.modelId)??null,policy:a.policy??null})),E=D.length<=1?"solo":D.every(a=>a.enabled)?"core":"custom",F={version:1,slug:cn(k().basename(v)),name:f,directory:v,icon:(0,y.hh)(b.workspace.template).icon,createdAt:A,updatedAt:new Date().toISOString(),template:b.workspace.template,sourceMode:b.workspace.sourceMode,teamPreset:E,modelProfile:b.workspace.modelProfile,agentTemplate:"solo"===E?"solo":"core-team",rules:{workspaceOnly:b.workspace.rules.workspaceOnly,generateStarterDocs:b.workspace.rules.generateStarterDocs,generateMemory:b.workspace.rules.generateMemory,kickoffMission:b.workspace.rules.kickoffMission},hidden:B,systemTag:C,agents:D};if(u){let a=(0,z.Q5)({name:f,brief:m||f,template:b.workspace.template,sourceMode:b.workspace.sourceMode,rules:b.workspace.rules,agents:r,toolExamples:await bi(v),docOverrides:n}),c=new Set(a.map(a=>a.path));for(let b of a)await bh(k().join(v,b.path),b.content);for(let a of n)c.has(a.path)||await bh(k().join(v,a.path),a.content)}else{let a=(0,z.Q5)({name:j,brief:l||j,template:c.baseline.template,sourceMode:c.baseline.sourceMode,rules:c.baseline.rules,agents:s,toolExamples:[],docOverrides:[]}),b=new Set(a.map(a=>a.path));for(let a of n)q.get(a.path)!==a.content&&await bh(k().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 bh(k().join(v,d.path),d.baseContent)}}if(w||!bR(r,s)){let d={...a,id:bN(v),path:v};await aS({currentWorkspace:d,desiredAgents:b.team.persistentAgents,workspaceSlug:cn(k().basename(v)),previousWorkspaceId:c.baseline.workspaceId,previousWorkspacePath:c.baseline.workspacePath})}return await bh(x,`${JSON.stringify(F,null,2)}
3
- `),I=null,L=new Map,{workspaceId:bN(v),previousWorkspaceId:a.id,workspacePath:v}}async function aS(a){let b=Array.from(new Map((await N({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=b1(b,a.workspaceSlug,d.id);if(!d.enabled){e&&(c.add(e.id),await aO({agentId:e.id}));continue}if(e){c.add(e.id),await aN({id:e.id,workspaceId:a.currentWorkspace.id,workspacePath:a.currentWorkspace.path,name:cm(d.name)??e.name,emoji:cm(d.emoji)??e.identity.emoji,theme:cm(d.theme)??e.identity.theme,modelId:cm(d.modelId)??("unassigned"===e.modelId?void 0:e.modelId),policy:d.policy,heartbeat:d.heartbeat});continue}let f=await aM({id:bq(a.workspaceSlug,d.id),workspaceId:a.currentWorkspace.id,workspacePath:a.currentWorkspace.path,name:cm(d.name)??void 0,emoji:cm(d.emoji)??void 0,theme:cm(d.theme)??void 0,modelId:cm(d.modelId)??void 0,policy:d.policy,heartbeat:d.heartbeat});c.add(f.agentId)}for(let a of b)c.has(a.id)||await aO({agentId:a.id})}async function aT(a){let b=a.workspaceId.trim();if(!b)throw Error("Workspace id is required.");let c=await N({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),f=c.runtimes.filter(a=>a.workspaceId===d.id).length;for(let a of e)await (0,q.zB)(["agents","delete",a.id,"--force","--json"]);try{let a=await by(),b=a.filter(a=>a.workspace!==d.path&&!e.some(b=>b.id===a.id));b.length!==a.length&&await bz(b)}catch{}return await (0,g.rm)(d.path,{recursive:!0,force:!0}),M(),{workspaceId:d.id,workspacePath:d.path,deletedAgentIds:e.map(a=>a.id),deletedRuntimeCount:f}}async function aU(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,q.zB)(["config","set",B,b]):await aX()&&await (0,q.zB)(["config","unset",B]),I=null,L=new Map,N({force:!0})}async function aV(a){let b=function(a){let b=a?.trim();if(!b)return null;if("~"!==b&&!b.startsWith("~/")&&!k().isAbsolute(b))throw Error("Workspace root must be an absolute path or start with ~/.");return aW(b)}(a.workspaceRoot),c=await aZ();return await a$({...b?{workspaceRoot:b}:{},...c.runtimePreflight?{runtimePreflight:c.runtimePreflight}:{}}),I=null,L=new Map,N({force:!0})}function aW(a){var b;let c=a?.trim();if(!c)return;let d="~"===(b=c)?i().homedir():b.startsWith("~/")?k().join(i().homedir(),b.slice(2)):b,e=k().normalize(d);return e.length>1?e.replace(/[\\/]+$/,""):e}async function aX(){try{return await (0,q.zB)(["config","get",B,"--json"]),!0}catch(a){if(a4(a).includes("Config path not found"))return!1;throw a}}async function aY(){return aW((await aZ()).workspaceRoot)??null}async function aZ(){let a;try{a=await (0,g.readFile)(D,"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?aW(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 a$(a){await (0,g.mkdir)(C,{recursive:!0}),await (0,g.writeFile)(D,`${JSON.stringify(a,null,2)}
4
- `,"utf8")}function a_(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 a0(a){let b=await aZ(),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 a$({...b.workspaceRoot?{workspaceRoot:b.workspaceRoot}:{},runtimePreflight:{smokeTests:c}}))}async function a1(a,b={}){try{if(!1!==b.createIfMissing&&await (0,g.mkdir)(a,{recursive:!0}),await (0,g.access)(a,f.constants.R_OK|f.constants.W_OK),b.touch){let b=k().join(a,`.agentos-write-check-${process.pid}-${Date.now()}-${Math.random().toString(16).slice(2)}`);await (0,g.writeFile)(b,"","utf8"),await (0,g.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 a2(a,b={}){let c=[...new Set(a.filter(Boolean))],d=await a1(G,{createIfMissing:!0,touch:b.touch}),e=await Promise.all(c.map(async a=>{let c=k().join(G,"agents",a,"sessions"),d=await a1(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??G}`,...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:G,stateWritable:d.writable,sessionStoreWritable:d.writable&&f,sessionStores:e,issues:g}}async function a3(a,b){let c,d=await a2(a),e=(c=Object.entries(b.runtimePreflight?.smokeTests??{}).sort((a,b)=>{let c=Date.parse(a[1].checkedAt);return Date.parse(b[1].checkedAt)-c})[0],a_(c?.[0]??null,c?.[1]??null)),f=[...d.issues,..."failed"===e.status&&e.error?[`Latest runtime smoke test failed for ${e.agentId??"unknown agent"}. ${e.error}`]:[]];return{...d,smokeTest:e,issues:f}}function a4(a){if(!a||"object"!=typeof a)return"";let b="stdout"in a?a5(a.stdout):"",c="stderr"in a?a5(a.stderr):"",d="message"in a&&"string"==typeof a.message?a.message:"";return`${d}
1
+ exports.id=49,exports.ids=[49],exports.modules={2826:()=>{},3442:()=>{},3628:(a,b,c)=>{"use strict";c.d(b,{Cf:()=>g,Ew:()=>k,Pj:()=>j,_P:()=>o,c_:()=>m,g0:()=>h,go:()=>n,hR:()=>l,iN:()=>d,qF:()=>i});let d="worker",e={worker:{label:"Worker",description:"Delivers code, docs, research, review, or analysis without mutating the system.",defaultName:"Worker",defaultEmoji:"\uD83D\uDEE0️",defaultTheme:"slate",badgeVariant:"default"},setup:{label:"Setup / Operator",description:"Prepares the environment, installs dependencies, and unblocks other agents.",defaultName:"Setup Operator",defaultEmoji:"\uD83E\uDDF0",defaultTheme:"amber",badgeVariant:"warning"},browser:{label:"Browser",description:"Captures browser evidence, screenshots, and user-path validation inside the workspace.",defaultName:"Browser Agent",defaultEmoji:"\uD83C\uDF10",defaultTheme:"blue",badgeVariant:"success"},monitoring:{label:"Monitoring",description:"Periodically checks workspace health, drift, and blockers, then leaves triage handoffs.",defaultName:"Monitoring Agent",defaultEmoji:"\uD83D\uDEF0️",defaultTheme:"teal",badgeVariant:"warning"},custom:{label:"Custom",description:"Starts from a safe default policy but leaves room for manual overrides.",defaultName:"Custom Agent",defaultEmoji:"\uD83E\uDDE9",defaultTheme:"violet",badgeVariant:"muted"}},f={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 g(a){return e[a]}function h(a=d,b){return{...f[a],...b??{},preset:a}}function i(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":d}function j(a){return"worker"===a||"setup"===a||"browser"===a||"monitoring"===a||"custom"===a}function k(a){return"fallback"===a||"ask-setup"===a||"route-setup"===a||"allow-install"===a}function l(a){return"none"===a||"workspace"===a||"system"===a}function m(a){return"workspace-only"===a||"extended"===a}function n(a){return"restricted"===a||"enabled"===a}function o(a){return e[a].label}Object.entries(e).map(([a,b])=>({value:a,label:b.label,description:b.description}))},3715:(a,b,c)=>{"use strict";c.d(b,{yw:()=>aa,DM:()=>aW,er:()=>O,Sn:()=>aO,c5:()=>cm,zw:()=>aY,RB:()=>aQ,kd:()=>aT,qu:()=>a0,B5:()=>aS,lC:()=>cz,dM:()=>$,vy:()=>Z,GM:()=>P,Y9:()=>aG,pf:()=>aH,FJ:()=>b4,W9:()=>aV,lT:()=>aU,xE:()=>_,o6:()=>aX,x4:()=>aP,Vg:()=>a1,sQ:()=>aZ,PR:()=>a2,Oz:()=>aR});var d=c(1421),e=c(7598),f=c(3024),g=c(1455),h=c(8161),i=c.n(h),j=c(6760),k=c.n(j),l=c(7975),m=c(3628),n=c(4853);function o(a){let b=Date.now(),c=k().join(i().homedir(),"Documents","Shared","projects"),d=new Set([...n.JH,...n.yA]);return{generatedAt:new Date(b).toISOString(),mode:"fallback",diagnostics:{installed:!1,loaded:!1,rpcOk:!1,health:"offline",workspaceRoot:c,configuredWorkspaceRoot:null,dashboardUrl:"http://127.0.0.1:18789/",gatewayUrl:"ws://127.0.0.1:18789",configuredGatewayUrl:null,modelReadiness:{ready:!0,defaultModel:"openai-codex/gpt-5.1-codex-mini",resolvedDefaultModel:"openai-codex/gpt-5.1-codex-mini",defaultModelReady:!0,recommendedModelId:"openai-codex/gpt-5.1-codex-mini",preferredLoginProvider:"openai-codex",totalModelCount:2,availableModelCount:2,localModelCount:1,remoteModelCount:1,missingModelCount:0,authProviders:[{provider:"openai-codex",connected:!0,canLogin:!0,detail:"Fallback demo profile"},{provider:"ollama",connected:!0,canLogin:!1,detail:"Fallback demo profile"}],issues:[]},runtime:{stateRoot:k().join(i().homedir(),".openclaw"),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:[{id:"workspace-demo",name:"Demo Workspace",slug:"demo-workspace",path:"~/openclaw/demo",kind:"workspace",agentIds:["agent-demo-planner","agent-demo-executor"],modelIds:["openai-codex/gpt-5.1-codex-mini","ollama/qwen3.5:9b"],activeRuntimeIds:["runtime-demo-plan"],totalSessions:2,health:"engaged",bootstrap:{template:"software",sourceMode:"empty",agentTemplate:"core-team",coreFiles:[{id:"agents",label:"AGENTS.md",present:!0},{id:"soul",label:"SOUL.md",present:!0},{id:"identity",label:"IDENTITY.md",present:!0},{id:"tools",label:"TOOLS.md",present:!0},{id:"heartbeat",label:"HEARTBEAT.md",present:!0}],optionalFiles:[{id:"memory-md",label:"MEMORY.md",present:!0}],contextFiles:(0,n.Q4)("software",{workspaceOnly:!0,generateStarterDocs:!0,generateMemory:!0,kickoffMission:!0}).resources.filter(a=>!d.has(a.relativePath)).map(a=>({id:a.id,label:a.label,present:!0})),folders:[{id:"docs",label:"docs/",present:!0},{id:"memory",label:"memory/",present:!0},{id:"deliverables",label:"deliverables/",present:!0},{id:"skills",label:"skills/",present:!0},{id:"openclaw",label:".openclaw/",present:!0}],projectShell:[{id:"project-json",label:".openclaw/project.json",present:!0},{id:"events",label:".openclaw/project-shell/events.jsonl",present:!0},{id:"runs",label:".openclaw/project-shell/runs",present:!0},{id:"tasks",label:".openclaw/project-shell/tasks",present:!0}],localSkillIds:["planning","execution"]},capabilities:{skills:["planning","execution"],tools:["fs.workspaceOnly"],workspaceOnlyAgentCount:2},channels:[]}],agents:[{id:"agent-demo-planner",name:"Planner",workspaceId:"workspace-demo",workspacePath:"~/openclaw/demo",modelId:"openai-codex/gpt-5.1-codex-mini",isDefault:!0,status:"engaged",sessionCount:1,lastActiveAt:b-12e4,currentAction:"Awaiting a real OpenClaw connection",activeRuntimeIds:["runtime-demo-plan"],heartbeat:{enabled:!0,every:"30m",everyMs:18e5},identity:{emoji:"\uD83E\uDD9E",theme:"slate",source:"fallback"},profile:{purpose:"Plan the first mission structure while the real OpenClaw backend is unavailable.",operatingInstructions:["Stay tied to the demo workspace context until a live gateway is available."],responseStyle:["calm","operational","mission-first"],outputPreference:"Prefer concise command feedback and workspace-grounded artifacts.",sourceFiles:[]},skills:["planning"],tools:["fs.workspaceOnly"],policy:(0,m.g0)("worker")},{id:"agent-demo-executor",name:"Executor",workspaceId:"workspace-demo",workspacePath:"~/openclaw/demo",modelId:"ollama/qwen3.5:9b",isDefault:!1,status:"ready",sessionCount:1,lastActiveAt:b-18e5,currentAction:"Standing by for a live runtime",activeRuntimeIds:[],heartbeat:{enabled:!1,every:null,everyMs:null},identity:{emoji:"\uD83D\uDEE0️",theme:"amber",source:"fallback"},profile:{purpose:"Execute concrete workspace actions once the mission has been planned.",operatingInstructions:["Operate inside the attached workspace and wait for a live runtime assignment."],responseStyle:["pragmatic","focused","execution-ready"],outputPreference:"Prefer direct task updates linked to real workspace files.",sourceFiles:[]},skills:["execution"],tools:["fs.workspaceOnly"],policy:(0,m.g0)("worker")}],models:[{id:"openai-codex/gpt-5.1-codex-mini",name:"GPT-5.1 Codex Mini",provider:"openai-codex",input:"text+image",contextWindow:272e3,local:!1,available:!0,missing:!1,tags:["default"],usageCount:1},{id:"ollama/qwen3.5:9b",name:"qwen3.5:9b",provider:"ollama",input:"text",contextWindow:262144,local:!0,available:!0,missing:!1,tags:["configured"],usageCount:1}],runtimes:[{id:"runtime-demo-plan",source:"session",key:"agent:agent-demo-planner:task:demo-plan:stage:in_progress",title:"Mission planning task",subtitle:"Fallback surface while OpenClaw is unavailable",status:"running",updatedAt:b-12e4,ageMs:12e4,agentId:"agent-demo-planner",workspaceId:"workspace-demo",modelId:"openai-codex/gpt-5.1-codex-mini",sessionId:"session-demo-plan",taskId:"demo-plan",tokenUsage:{input:1800,output:220,total:2020,cacheRead:0},metadata:{reason:a}}],tasks:[{id:"task:demo-plan",key:"task:demo-plan",title:"Mission planning task",mission:"Plan the first mission structure while OpenClaw is unavailable.",subtitle:"Fallback surface while OpenClaw is unavailable",status:"running",updatedAt:b-12e4,ageMs:12e4,workspaceId:"workspace-demo",primaryAgentId:"agent-demo-planner",primaryAgentName:"Planner",primaryRuntimeId:"runtime-demo-plan",runtimeIds:["runtime-demo-plan"],agentIds:["agent-demo-planner"],sessionIds:["session-demo-plan"],runIds:[],runtimeCount:1,updateCount:1,liveRunCount:1,artifactCount:0,warningCount:0,tokenUsage:{input:1800,output:220,total:2020,cacheRead:0},metadata:{reason:a}}],relationships:[{id:"edge-demo-planner-model",sourceId:"agent-demo-planner",targetId:"openai-codex/gpt-5.1-codex-mini",kind:"uses-model",label:"primary model"},{id:"edge-demo-executor-model",sourceId:"agent-demo-executor",targetId:"ollama/qwen3.5:9b",kind:"uses-model",label:"local fallback"},{id:"edge-demo-planner-runtime",sourceId:"agent-demo-planner",targetId:"runtime-demo-plan",kind:"active-run",label:"current run"}],channelRegistry:{version:1,channels:[]},missionPresets:["Plan a multi-agent release mission for the selected workspace.","Stand up a builder, tester, and reviewer loop for the next milestone.","Audit the current workspace, identify blockers, and propose the first task batch."]}}function p(a,b){let c="monitoring"===a?{enabled:!0,every:"30m"}:{enabled:!1,every:"30m"},d="string"==typeof b?.every&&b.every.trim()&&"disabled"!==b.every?b.every.trim():c.every;return"boolean"==typeof b?.enabled?{enabled:b.enabled,every:d}:b?.every==="disabled"?{enabled:!1,every:d}:c}function q(a){return a?.enabled?{every:"string"==typeof a.every&&a.every.trim()?a.every.trim():"30m"}:null}var r=c(8366),s=c(5828),t=c(7037);function u(a){return a.replace(/\s+/g," ").trim().toLowerCase()}function v(a,b){let c=u(b),d=u(a);return!!c&&!!d&&(d===c||d.startsWith(`${c} `))}function w(a){return a.name?.trim()||a.identityName?.trim()||"OpenClaw"}let x=[/^Task output routing:/i,/^Agent operating policy:/i];function y(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(x.some(a=>a.test(b)))break;c.push(a)}return c.join(" ").replace(/\s+/g," ").trim()}function z(a,b=64){if(!a)return"";let c=y(a);return c?c.length<=b?c:`${c.slice(0,Math.max(b-1,1)).trimEnd()}…`:""}var A=c(5612);let B=(0,l.promisify)(d.execFile),C="gateway.remote.url",D=k().join(process.cwd(),".mission-control"),E=k().join(D,"settings.json"),F=k().join(D,"channel-registry.json"),G=k().join(D,"dispatches"),H=k().join(process.cwd(),"scripts","openclaw-mission-dispatch-runner.mjs"),I=k().join(i().homedir(),".openclaw"),J=/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/gi,K=null,L=null,M=null,N=new Map;function O(){K=null,M=null,N=new Map}async function P(a={}){if(!a.force&&K&&K.expiresAt>Date.now())return a.includeHidden?K.full:K.visible;if(L){let b=await L;return a.includeHidden?b.full:b.visible}L=Q();try{let b=await L;return K={...b,expiresAt:Date.now()+1e4},a.includeHidden?b.full:b.visible}finally{L=null}}async function Q(){if(!await (0,r.Vg)())return R(o("OpenClaw CLI is not installed on this machine."));try{var a,b,c,d,e,f,g;let h,i,j,l,n,o,p,q,s,t,u,v,w,x,y,z,B=await a6(),D=a3(B.workspaceRoot)??null,[E,F,G,H,I,J,K,L,N]=await Promise.allSettled([(0,r.VP)(["gateway","status","--json"]),(0,r.VP)(["config","get",C,"--json"]),(0,r.VP)(["status","--json"]),(0,r.VP)(["agents","list","--json"]),(0,r.VP)(["config","get","agents.list","--json"]),(0,r.VP)(["models","list","--json"]),(0,r.VP)(["models","status","--json"]),(0,r.VP)(["sessions","--all-agents","--json"]),(0,r.VP)(["gateway","call","system-presence","--json"])]),O="fulfilled"===E.status?(M={value:E.value,capturedAt:Date.now()},{value:E.value,reusedCachedValue:!1}):M&&Date.now()-M.capturedAt<=6e4?{value:M.value,reusedCachedValue:!0}:{value:void 0,reusedCachedValue:!1},P=O.value,Q="fulfilled"===F.status?c4(F.value):void 0,R="fulfilled"===G.status?G.value:void 0,T="fulfilled"===H.status?H.value:[],U="fulfilled"===I.status?I.value:[],V="fulfilled"===J.status?J.value.models:[],W="fulfilled"===K.status?K.value:void 0,X="fulfilled"===L.status?L.value.sessions:[],Y="fulfilled"===N.status?N.value:[],Z="fulfilled"===G.status||"fulfilled"===H.status||"fulfilled"===I.status||"fulfilled"===J.status||"fulfilled"===K.status||"fulfilled"===L.status||"fulfilled"===N.status,$=await bc(T.map(a=>a.id),B),_=await cc(),aa=(a=await cd(),b=_,h=new Map(b.channels.filter(a=>!!a.id).map(a=>[a.id,a.name.trim()||a.id])),a.map(a=>({...a,name:h.get(a.id)??a.name}))),ab=new Map,ac=new Map,ad=new Map,ae=[],af=[],ai=new Map((R?.heartbeat?.agents??[]).map(a=>[a.agentId,a])),aj=new Map(U.map(a=>[a.id,a])),ak=new Map;for(let a of X){if(!a.agentId)continue;let b=ak.get(a.agentId)??[];b.push(a),ak.set(a.agentId,b)}let al=(await Promise.all(X.map(a=>aF(a,U,T)))).flat(),am=await ah(al),an=cR(am),ao=await ag(an),ap=cR([...ao,...am]);for(let a of T){let b=aj.get(a.id),d=await bQ(a.agentDir),e=b1(a.workspace),f=ak.get(a.id)??[],g=ad.get(a.workspace)??await cb(a.workspace);ad.set(a.workspace,g);let h=g.agents.find(b=>b.id===a.id)??null,i=bH(b?.skills??[]),j=h?.policy??(0,m.g0)((0,m.qF)({skills:i,id:a.id,name:c4(d.name)||b?.name||a.name||b?.identity?.name||a.identityName||a.id}),{fileAccess:b?.tools?.fs?.workspaceOnly?"workspace-only":"extended"}),l=cQ([...h?.toolIds??[],..."workspace-only"===j.fileAccess?["fs.workspaceOnly"]:[]]),n=a.model||b?.model||"unassigned",o=a.agentDir||a.id,p=ac.get(o)??await b2(a.workspace,{agentId:a.id,agentName:c4(d.name)||b?.name||a.name||b?.identity?.name||a.identityName||a.id,agentDir:a.agentDir,configuredSkills:i,configuredTools:l,template:g.template,rules:g.rules??A.eY});ac.set(o,p);let q=ap.filter(b=>b.agentId===a.id).sort(cS),r=cQ(q.flatMap(a=>a.toolNames??[])),s=q.map(a=>a.id),t=q[0],u=f.map(a=>a.updatedAt??0).sort((a,b)=>b-a).at(0)||null,v=ai.get(a.id),w=(c={rpcOk:!!P?.rpc?.ok,activeRuntime:t,heartbeatEnabled:!!v?.enabled,lastActiveAt:u}).rpcOk?c.activeRuntime?.status==="running"||c.activeRuntime?.status==="queued"?"engaged":c.heartbeatEnabled?"monitoring":c.lastActiveAt?"ready":"standby":"offline",x=function(a,b){var c;let d=b1(b),e=a.get(d);if(e)return e;let f={id:d,name:(c=b,(k().basename(c)||c).split(/[-_]/g).filter(Boolean).map(a=>a[0].toUpperCase()+a.slice(1)).join(" ")),slug:c5(k().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}(ab,a.workspace);x.agentIds.push(a.id),x.modelIds.push(n),x.activeRuntimeIds.push(...s),x.totalSessions+=f.length;let y={id:a.id,name:c4(d.name)||b?.name||a.name||b?.identity?.name||a.identityName||a.id,identityName:c4(d.name)||b?.identity?.name||a.identityName||void 0,workspaceId:e,workspacePath:a.workspace,agentDir:a.agentDir,modelId:n,isDefault:!!(a.isDefault||b?.default),status:w,sessionCount:f.length,lastActiveAt:u,currentAction:function(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"}({runtime:t,heartbeatEvery:v?.every??null,status:w}),activeRuntimeIds:s,heartbeat:{enabled:!!v?.enabled,every:v?.every??null,everyMs:v?.everyMs??null},identity:{emoji:c4(d.emoji)||b?.identity?.emoji||a.identityEmoji,theme:b?.identity?.theme,avatar:c4(d.avatar)||b?.identity?.avatar,source:a.identitySource},profile:p,skills:i,tools:l,observedTools:r,policy:j};for(let a of(ae.push(y),af.push({id:`edge:${e}:${y.id}:contains`,sourceId:e,targetId:y.id,kind:"contains",label:"workspace member"}),af.push({id:`edge:${y.id}:${n}:model`,sourceId:y.id,targetId:n,kind:"uses-model",label:"model assignment"}),s))af.push({id:`edge:${y.id}:${a}:run`,sourceId:y.id,targetId:a,kind:"active-run",label:"runtime"})}let aq=new Map;for(let a of ae){let b=aq.get(a.workspaceId)??[];b.push(a),aq.set(a.workspaceId,b)}let ar=await Promise.all(Array.from(ab.values()).map(async a=>{var b;let c,d=aq.get(a.id)??[],e=await b3(a.path,d),f=ad.get(a.path)??null;return{...a,name:f?.name??a.name,modelIds:c$(a.modelIds),activeRuntimeIds:c$(a.activeRuntimeIds),health:(b=a.agentIds,(c=ae.filter(a=>b.includes(a.id))).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"),bootstrap:e.bootstrap,capabilities:e.capabilities}})),as=new Set(ar.filter(a=>ad.get(a.path)?.hidden).map(a=>a.id)),at=ae.filter(a=>!as.has(a.workspaceId)),au=new Set(ae.filter(a=>as.has(a.workspaceId)).map(a=>a.id)),av=ap.filter(a=>!(a.agentId&&au.has(a.agentId))&&!(a.workspaceId&&as.has(a.workspaceId))),aw=new Set(ap.filter(a=>a.agentId&&au.has(a.agentId)||a.workspaceId&&as.has(a.workspaceId)).map(a=>a.id)),ax=new Set([...as,...au,...aw]),ay=af.filter(a=>!ax.has(a.sourceId)&&!ax.has(a.targetId)),az=ar.filter(a=>!as.has(a.id)),aA=a=>{let b=new Map;for(let c of a)b.set(c.modelId,(b.get(c.modelId)??0)+1);return V.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}))},aB=(d=V,e=W,i=d.filter(a=>cT(a)),j=c$([...d.map(a=>a.key.split("/")[0]||"unknown"),...(e?.auth?.providers??[]).map(a=>a.provider).filter(c_),...(e?.auth?.oauth?.providers??[]).map(a=>a.provider).filter(c_)].filter(c_)),l=new Map((e?.auth?.providers??[]).filter(a=>c_(a.provider)).map(a=>[a.provider,a])),n=new Map((e?.auth?.oauth?.providers??[]).filter(a=>c_(a.provider)).map(a=>[a.provider,a])),o=c4(e?.resolvedDefault??void 0),p=c4(e?.defaultModel??void 0),s=(q=o??p)?function(a){let[b]=a.split("/",1);return b||null}(q):null,u=(t=!!(q&&i.some(a=>a.key===q)))?q:i[0]?.key??null,v=j.map(a=>{var b;let c,e=d.filter(b=>(b.key.split("/")[0]||"unknown")===a),f=e.some(a=>!0!==a.local),g=l.get(a),h=n.get(a),i=e.some(a=>cT(a))||(g?.profiles?.count??0)>0||h?.status==="ok",j=null;return h?.status==="ok"?j="OAuth connected":(g?.profiles?.count??0)>0?j=`${g?.profiles?.count} auth profile${g?.profiles?.count===1?"":"s"}`:e.some(a=>a.local)?j="Install or pull a local model to unlock this route.":f&&(c=(b=a).trim().toLowerCase(),j="openai-codex"===c?"Use the ChatGPT account-based login flow in terminal to use this route.":"openrouter"===c||"openai"===c||"anthropic"===c||"xai"===c||"gemini"===c||"deepseek"===c||"mistral"===c?`Add your ${cU(b)} API key in terminal to use this route.`:`Connect ${cU(b)} auth in terminal to use this route.`),{provider:a,connected:i,canLogin:f,detail:j}}),w=(e?.auth?.missingProvidersInUse??[]).filter(c_),x=new Set(w),y=e?.auth?.unusableProfiles?.length??0,z=[],0===i.length&&z.push("No available models were detected yet."),i.length>0&&!q&&z.push("Choose a default model to finish setup."),q&&!t&&(s&&x.has(s)?z.push(`Default model is set, but ${cU(s)} auth is still missing.`):w.length>0?z.push(`Default model is set, but auth is still missing for: ${w.join(", ")}.`):z.push("The selected default model is not ready yet.")),w.length>0&&!q&&z.push(`Auth is still missing for: ${w.join(", ")}.`),y>0&&z.push("Some stored model auth profiles are not usable."),{ready:i.length>0&&t,defaultModel:p??null,resolvedDefaultModel:o??null,defaultModelReady:t,recommendedModelId:u??null,preferredLoginProvider:v.find(a=>a.provider===s&&!a.connected&&a.canLogin)?.provider??w.find(a=>v.some(b=>b.provider===a&&!b.connected&&b.canLogin))??v.find(a=>!a.connected&&a.canLogin)?.provider??(j.includes("openai-codex")||0===i.length?"openai-codex":null),totalModelCount:d.length,availableModelCount:i.length,localModelCount:i.filter(a=>a.local).length,remoteModelCount:i.filter(a=>!0!==a.local).length,missingModelCount:d.filter(a=>a.missing||!1===a.available).length,authProviders:v,issues:c$(z)}),aC=R?.securityAudit?.findings?.filter(a=>"warn"===a.severity).map(a=>a.title||a.detail||"Security warning")??[],aD=c4(Y[0]?.version||R?.runtimeVersion||R?.overview?.version||R?.version),aE=c4(R?.update?.registry?.latestVersion??void 0),aG=function(a){let b=c4(a);if(b)return b.split(/\r?\n/,1)[0]?.trim()||b}(R?.update?.registry?.error??void 0),aH=aD&&aE?c2(aE,aD)>0:void 0,aI=function(a){let b=c4(a.legacyInfo);if(a.latestVersion&&a.currentVersion){let b=c2(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}`:void 0)}({currentVersion:aD,latestVersion:aE,updateError:aG,legacyInfo:R?.overview?.update}),aJ={installed:!0,loaded:!!P?.service?.loaded,rpcOk:!!P?.rpc?.ok,health:(f={rpcOk:P?.rpc?.ok,warningCount:aC.length,runtimeIssueCount:$.issues.length,hasOpenClawSignal:Z}).rpcOk||f.hasOpenClawSignal?!f.rpcOk||f.warningCount>0||f.runtimeIssueCount>0?"degraded":"healthy":"offline",version:aD,latestVersion:aE,updateAvailable:aH,updateError:aG,updateRoot:c4(R?.update?.root??void 0),updateInstallKind:c4(R?.update?.installKind??void 0),updatePackageManager:c4(R?.update?.packageManager??void 0),workspaceRoot:cV(D),configuredWorkspaceRoot:D??null,dashboardUrl:`http://127.0.0.1:${P?.gateway?.port??18789}/`,gatewayUrl:P?.gateway?.probeUrl||"ws://127.0.0.1:18789",configuredGatewayUrl:Q??null,bindMode:P?.gateway?.bindMode,port:P?.gateway?.port,updateChannel:R?.updateChannel||"stable",updateInfo:aI,serviceLabel:P?.service?.label,modelReadiness:aB,runtime:$,securityWarnings:aC,issues:[...(g={gatewayStatus:E,status:G,agents:H,models:J,modelStatus:K,sessions:L},Object.entries(g).flatMap(([a,b])=>"rejected"!==b.status?[]:[`${a}: ${b.reason instanceof Error?b.reason.message:String(b.reason)}`])),..."rejected"===E.status&&O.reusedCachedValue?["gatewayStatus: Reusing the last successful gateway status after a transient OpenClaw check failure."]:[],...$.issues]},aK=S(ap,ae),aL=S(av,at),aM={generatedAt:new Date().toISOString(),mode:"live",diagnostics:aJ,channelAccounts:aa,channelRegistry:_,presence:Y.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:{...aM,workspaces:ar,agents:ae,models:aA(ae),runtimes:ap,tasks:aK,relationships:af},visible:{...aM,workspaces:az,agents:at,models:aA(at),runtimes:av,tasks:aL,relationships:ay}}}catch(a){return R(o(a instanceof Error?a.message:"Unknown OpenClaw error."))}}function R(a){return{visible:a,full:a}}function S(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=T(a)||("string"==typeof a.metadata.turnPrompt?a.metadata.turnPrompt:null);return!!("string"==typeof c&&(b=c,/You are chatting (?:directly )?with the operator inside Mission Control/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=>[a.id,w(a)])),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():"";a&&d&&b.set(`${c.agentId??"unknown"}:${a}`,d)}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=T(a),f=a.sessionId?.trim(),g=f?b.get(`${a.agentId??"unknown"}:${f}`)?.trim()??"":"";return d?`dispatch:${d}`:g?`dispatch:${g}`:c?`task:${c}`:e?`mission:${a.agentId??"unknown"}:${X(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])=>{var c,d,f,g,h;let i,j,k,l,m,n,o,p,q,r,s,t,u,v;return c=a,d=b,f=e,l=T(k=[...j=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}(i=[...d].sort(cS))].sort((a,b)=>U(b)-U(a))[0]??j[0]??i[0])||i.map(a=>T(a)).find(Boolean)||null,m=j.map(a=>a.subtitle?.trim()).find(a=>!!a)||i.map(a=>a.subtitle?.trim()).find(a=>!!a)||"Awaiting OpenClaw updates.",n=b$(i.flatMap(a=>V(a)).concat(i.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&&c.push({path:b,displayPath:b})}return b$(c)})(a.subtitle)))),o=cQ(i.flatMap(a=>W(a))),p=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})}(i),q=cQ(i.flatMap(a=>a.agentId?[a.agentId]:[])),r=cQ(i.flatMap(a=>a.sessionId?[a.sessionId]:[])),s=cQ(i.flatMap(a=>a.runId?[a.runId]:[])),u=(t=k?.agentId||q[0])?f.get(t)??null:null,v=i[0]??null,{id:(g=c,`task:${X(g)}`),key:c,title:z(l||k?.title||"Untitled task",52)||"Untitled task",mission:l,subtitle:m,status:(h=i).some(a=>"running"===a.status)?"running":h.some(a=>"cancelled"===a.status)?"cancelled":h.some(a=>"queued"===a.status)?"queued":h.some(a=>"stalled"===a.status)?"stalled":h.some(a=>"idle"===a.status)?"idle":h[0]?.status??"completed",updatedAt:v?.updatedAt??null,ageMs:v?.ageMs??null,workspaceId:k?.workspaceId,primaryAgentId:t,primaryAgentName:u,primaryRuntimeId:k?.id,dispatchId:function(a){for(let b of a)if("string"==typeof b.metadata.dispatchId&&b.metadata.dispatchId.trim())return b.metadata.dispatchId.trim()}(i),runtimeIds:i.map(a=>a.id),agentIds:q,sessionIds:r,runIds:s,runtimeCount:i.length,updateCount:j.filter(a=>"turn"===a.source).length,liveRunCount:i.filter(a=>"running"===a.status||"queued"===a.status).length,artifactCount:n.length,warningCount:o.length,tokenUsage:p,metadata:{mission:l,primaryRuntimeSource:k?.source??null,bootstrapStage:"string"==typeof k?.metadata.bootstrapStage?k.metadata.bootstrapStage:null,dispatchStatus:"string"==typeof k?.metadata.dispatchStatus?k.metadata.dispatchStatus:null,dispatchSubmittedAt:"string"==typeof k?.metadata.dispatchSubmittedAt?k.metadata.dispatchSubmittedAt:null,dispatchRunnerStartedAt:"string"==typeof k?.metadata.dispatchRunnerStartedAt?k.metadata.dispatchRunnerStartedAt:null,dispatchHeartbeatAt:"string"==typeof k?.metadata.dispatchHeartbeatAt?k.metadata.dispatchHeartbeatAt:null,dispatchObservedAt:"string"==typeof k?.metadata.dispatchObservedAt?k.metadata.dispatchObservedAt:null,outputDir:"string"==typeof k?.metadata.outputDir?k.metadata.outputDir:null,outputDirRelative:"string"==typeof k?.metadata.outputDirRelative?k.metadata.outputDirRelative:null}}}).sort((a,b)=>(b.updatedAt??0)-(a.updatedAt??0))}function T(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=y(b);return c.length>0?c:null}function U(a){return 8*!!T(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 V(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 W(a){let b=a.metadata.warnings;return Array.isArray(b)?b.filter(a=>"string"==typeof a&&a.trim().length>0):[]}function X(a){return(0,e.createHash)("sha1").update(a).digest("hex").slice(0,12)}async function Y(a){let b=await bb(a?[a]:[],{touch:!0});if(b.issues.length>0)throw K=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 Z(a={}){return await Y(a.agentId??null),K=null,P({force:!0,includeHidden:!0})}async function $(a={}){var b,c,d,e;let f=(b=await P({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(!f)return{status:"not-run",checkedAt:null,agentId:null,runId:null,summary:null,error:"Mission Control could not find an OpenClaw agent for the runtime smoke test."};let g=(d=await a6(),e=f,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}(g))return a8(f,g);await Y(f);try{let a=await (0,r.VP)(["agent","--agent",f,"--message","Mission Control runtime smoke test. Reply with a brief READY status.","--thinking","off","--timeout","45","--json"],{timeoutMs:5e4}),b={status:"passed",checkedAt:new Date().toISOString(),agentId:f,runId:a.runId,summary:a.summary||a.result?.payloads?.[0]?.text||"Mission Control verified a real OpenClaw turn.",error:null};return await a9(b),K=null,b}catch(b){let a={status:"failed",checkedAt:new Date().toISOString(),agentId:f,runId:null,summary:null,error:bd(b)||"OpenClaw runtime smoke test failed."};return await a9(a),K=null,a}}async function _(a){var b,c,d,f,g;let h,i,j=a.mission.trim();if(!j)throw Error("Mission text is required.");let k=await P({force:!0,includeHidden:!0}),l=a.agentId||function(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}(k,a.workspaceId);if(!l)throw Error("No OpenClaw agent is available for mission dispatch.");let n=k.agents.find(a=>a.id===l),o=k.workspaces.find(b=>b.id===(a.workspaceId||n?.workspaceId))??(n?{id:n.workspaceId,path:n.workspacePath}:null),p=o?k.agents.filter(a=>a.workspaceId===o.id):[],q=p.find(a=>"setup"===a.policy.preset&&a.id!==n?.id)?.id??null,r=o?await bx(o.path,j):null,t=a.thinking??"medium",u=r?(b=j,c=r,d=n?.policy,f=q,h=d??(0,m.g0)(m.iN),[b,"","Task output routing:",`- Put substantial outputs, drafts, reports, docs, and file deliverables under \`${c.relativeOutputDir}/\`.`,`- If a file is requested, default to \`${c.relativeOutputDir}/<descriptive-file-name>\` unless the user explicitly asks for another path.`,`- Use \`${c.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:",...by(h,f)].join("\n")):j,v=(0,s.iN)(k)?k.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.",w=(g={agentId:l,mission:j,routedMission:u,thinking:t,workspaceId:o?.id??null,workspacePath:o?.path??null,outputDir:r?.absoluteOutputDir??null,outputDirRelative:r?.relativeOutputDir??null,notesDirRelative:r?.notesDirRelative??null},i=new Date().toISOString(),{id:`dispatch-${(0,e.randomUUID)()}`,status:"queued",agentId:g.agentId,sessionId:(0,e.randomUUID)(),mission:g.mission,routedMission:g.routedMission,thinking:g.thinking,workspaceId:g.workspaceId,workspacePath:g.workspacePath,submittedAt:i,updatedAt:i,outputDir:g.outputDir,outputDirRelative:g.outputDirRelative,notesDirRelative:g.notesDirRelative,runner:{pid:null,childPid:null,startedAt:null,finishedAt:null,lastHeartbeatAt:null},observation:{runtimeId:null,observedAt:null},result:null,error:null});if(await ac(w),v)return w={...w,status:"stalled",updatedAt:new Date().toISOString(),error:v},await ac(w),K=null,{dispatchId:w.id,runId:null,agentId:l,status:w.status,summary:v,payloads:[],meta:{outputDir:r?.absoluteOutputDir,outputDirRelative:r?.relativeOutputDir,notesDirRelative:r?.notesDirRelative}};try{w=await ad(w)}catch(a){throw w={...w,status:"stalled",updatedAt:new Date().toISOString(),error:bd(a)||"Mission dispatch runner could not be started."},await ac(w),K=null,Error(w.error??"Mission dispatch runner could not be started.")}return K=null,{dispatchId:w.id,runId:null,agentId:l,status:w.status,summary:"Mission accepted and queued for OpenClaw execution.",payloads:[],meta:{outputDir:r?.absoluteOutputDir,outputDirRelative:r?.relativeOutputDir,notesDirRelative:r?.notesDirRelative}}}async function aa(a,b,c){var d;let e,f=(await P({force:!0,includeHidden:!0})).tasks.find(b=>b.id===a),g=f?await ae(f):c?await am(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(ap(g.status))return{taskId:a,dispatchId:g.id,status:g.status,summary:aE(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(d=b)?d.trim():"").length>0?e:"Mission aborted by operator.",j={...g,status:"cancelled",updatedAt:h,error:i,runner:{...g.runner,finishedAt:h,lastHeartbeatAt:h}};await ac(j),K=null;let k=await af(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}}function ab(a){return k().join(G,`${a}.json`)}async function ac(a){let b=ab(a.id),c=`${b}.${process.pid}.tmp`;await (0,g.mkdir)(k().dirname(b),{recursive:!0}),await (0,g.writeFile)(c,`${JSON.stringify(a,null,2)}
2
+ `,"utf8"),await (0,g.rename)(c,b)}async function ad(a){await (0,g.access)(H,f.constants.R_OK);let b=await (0,r.XP)(),c=(0,d.spawn)(process.execPath,[H,ab(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 ae(a){if(a.dispatchId){let b=await am(a.dispatchId);if(b)return b}let b=await al(),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&&v(e.mission,a.mission)||e.observation.runtimeId&&c.has(e.observation.runtimeId))return e;let b=ay(e);if(b&&d.has(b))return e}return null}async function af(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 B("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 ag(a){let b=await al(),c=[],d=Date.now();for(let e of b){let b=aq(e,a);if(b){await ai(e,b),await aj(e,b);continue}let f=await ak(e);if(f){ap(e.status)||await aj(e,f),c.push(as(await am(e.id)??e,f.sessionId??ay(e)??void 0));continue}c.push(function(a,b){let c=Date.parse(a.updatedAt),d=au(a,b),e=at(a,d),f=function(a,b){if("completed"===b||"cancelled"===b)return b_(aE(a),90);if("stalled"===b)return a.error?b_(a.error,90):a.runner.lastHeartbeatAt?"Dispatch stalled while waiting for the first OpenClaw runtime.":"Dispatch stalled before the first runner heartbeat.";let c=at(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."}(a,d),g=ay(a),h=az(a),i=aA(a),j=aD(a);return{id:`runtime:dispatch:${a.id}`,source:"turn",key:`dispatch:${a.id}`,title:z(a.mission,38)||"Queued mission",subtitle:j?b_(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}:{}}}}(e,d))}return c.sort(cS)}async function ah(a){if(0===a.length)return a;let b=await al();if(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)??aq(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=T(a),e=ap(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}}}(e,a))}return c}async function ai(a,b){let c=bU(b.updatedAt);if(a.observation.runtimeId===b.id&&a.observation.observedAt===c)return;let d=await am(a.id)??a;(d.observation.runtimeId!==b.id||d.observation.observedAt!==c)&&await ac({...d,updatedAt:ao(d.updatedAt,c),observation:{runtimeId:b.id,observedAt:c}})}async function aj(a,b){var c,d;if(ap(a.status)||!b.agentId||!b.sessionId)return;let e=await bR(b.agentId,b.sessionId,a.workspacePath??void 0);if(!e)return;let f="";try{f=await (0,g.readFile)(e,"utf8")}catch{return}let h=bV(b,f,a.workspacePath??void 0),i=!!(h.finalTimestamp&&h.stopReason&&"toolUse"!==h.stopReason),j=!!h.errorMessage||"error"===h.stopReason||"aborted"===h.stopReason;if(!i&&!j)return;let k=await am(a.id)??a;if(ap(k.status))return;let l=h.finalTimestamp??bU(b.updatedAt),m=j?"stalled":"completed";await ac({...k,status:m,updatedAt:ao(k.updatedAt,l),runner:{...k.runner,finishedAt:l,lastHeartbeatAt:l},result:"completed"===m?k.result??(c=b,(d=h).finalText||c.runId?{runId:c.runId||`runtime:${c.id}`,status:d.errorMessage?"error":"ok",summary:d.errorMessage||"completed",...d.finalText?{result:{payloads:[{text:d.finalText,mediaUrl:null}]}}:{}}:null):k.result,error:"stalled"===m?h.errorMessage||k.error||"OpenClaw runtime ended before the dispatch runner finalized.":null})}async function ak(a){let b=ay(a);if(!a.agentId||!b)return null;let c=await bR(a.agentId,b,a.workspacePath??void 0);if(!c)return null;try{let d=await (0,g.readFile)(c,"utf8"),e=as(a,b),f=bX(d,e,a.workspacePath??void 0);if(0===f.length||a.mission&&!f.some(b=>v(b.prompt,a.mission)))return null;return e}catch{return null}}async function al(){try{let a=await (0,g.readdir)(G,{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,f=k().join(G,a.name),h=await an(f);return h?(c=h,d=b,e=Date.parse(c.updatedAt),!Number.isNaN(e)&&d-e>2592e5)?(await (0,g.rm)(f,{force:!0}),null):h:null}))).filter(a=>!!a).sort((a,b)=>Date.parse(b.updatedAt)-Date.parse(a.updatedAt))}catch{return[]}}async function am(a){return an(ab(a))}async function an(a){try{var b,c,d;let e=await (0,g.readFile)(a,"utf8"),f=JSON.parse(e);if(!f||"object"!=typeof f||"string"!=typeof f.id||"string"!=typeof f.agentId||"string"!=typeof f.mission||"string"!=typeof f.routedMission||"string"!=typeof f.submittedAt||"string"!=typeof f.updatedAt)return null;let h=(b=f.status,"running"===b||"completed"===b||"stalled"===b||"cancelled"===b?b:"queued");return{id:f.id,status:h,agentId:f.agentId,sessionId:"string"==typeof f.sessionId?f.sessionId:null,mission:f.mission,routedMission:f.routedMission,thinking:(c=f.thinking,"off"===c||"minimal"===c||"low"===c||"high"===c?c:"medium"),workspaceId:"string"==typeof f.workspaceId?f.workspaceId:null,workspacePath:"string"==typeof f.workspacePath?f.workspacePath:null,submittedAt:f.submittedAt,updatedAt:f.updatedAt,outputDir:"string"==typeof f.outputDir?f.outputDir:null,outputDirRelative:"string"==typeof f.outputDirRelative?f.outputDirRelative:null,notesDirRelative:"string"==typeof f.notesDirRelative?f.notesDirRelative:null,runner:{pid:"number"==typeof f.runner?.pid?f.runner.pid:null,childPid:"number"==typeof f.runner?.childPid?f.runner.childPid:null,startedAt:"string"==typeof f.runner?.startedAt?f.runner.startedAt:null,finishedAt:"string"==typeof f.runner?.finishedAt?f.runner.finishedAt:null,lastHeartbeatAt:"string"==typeof f.runner?.lastHeartbeatAt?f.runner.lastHeartbeatAt:null},observation:{runtimeId:"string"==typeof f.observation?.runtimeId?f.observation.runtimeId:null,observedAt:"string"==typeof f.observation?.observedAt?f.observation.observedAt:null},result:(d=f.result,"object"==typeof d&&null!==d&&"string"==typeof d.runId&&"string"==typeof d.status&&"string"==typeof d.summary)?f.result:null,error:"string"==typeof f.error?f.error:null}}catch{return null}}function ao(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 ap(a){return"completed"===a||"stalled"===a||"cancelled"===a}function aq(a,b){var c,d,e;let f=Date.parse(a.submittedAt),g=au(a,Date.now()),h=ay(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(ar(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("completed"===c.effectiveStatus||"stalled"===c.effectiveStatus||"cancelled"===c.effectiveStatus)return d===b.id?500:null;if(c.observedRuntimeId&&a.id===c.observedRuntimeId)return 1e4;if(c.sessionId&&a.sessionId!==c.sessionId)return null;let e=function(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=u(b);return c.length>0?c:null}(a);return!!d&&v(d,b)}(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||cS(a.runtime,b.runtime))[0]?.runtime}function ar(a){return a.id.startsWith("runtime:dispatch:")}function as(a,b){let c=Date.parse(a.observation.observedAt??a.updatedAt??a.submittedAt),d=Date.now(),e=au(a,d),f=b??ay(a)??c6(a.id),g=aD(a);return{id:a.observation.runtimeId||`runtime:${f}:${c6(a.id)}`,source:"turn",key:`dispatch:${a.id}`,title:z(a.mission,38)||"Recovered mission runtime",subtitle:g?b_(g,90):"completed"===a.status||"cancelled"===a.status?b_(aE(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:az(a)??void 0,sessionId:f,tokenUsage:aA(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:at(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 at(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 au(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 av(a){let b=a.result?.result?.meta;if(!b||"object"!=typeof b)return null;let c=b.agentMeta;return c&&"object"==typeof c?c:null}function aw(a,b){let c=a?.[b];return"string"==typeof c&&c.trim().length>0?c:null}function ax(a,b){let c=a?.[b];return"number"==typeof c&&Number.isFinite(c)?c:null}function ay(a){return(a.sessionId?.trim()||null)??aw(av(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 az(a){return aw(av(a),"model")}function aA(a){let b=av(a),c=b?.usage;if(!c||"object"!=typeof c)return;let d=ax(c,"total")??ax(c,"totalTokens")??ax(c,"total_tokens");if(null!==d)return{input:ax(c,"input")??ax(c,"prompt_tokens")??0,output:ax(c,"output")??ax(c,"completion_tokens")??0,total:d,cacheRead:ax(c,"cacheRead")??0}}function aB(a){let b=a.result?.summary?.trim();if(!b)return null;let c=b.toLowerCase();return"completed"===c||"ok"===c||"success"===c||aM(b)?null:b}function aC(a){let b=a.result?.result?.payloads?.find(a=>a.text.trim().length>0)?.text.trim()??null;return aM(b)?null:b}function aD(a){let b=aC(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 aE(a){let b=aD(a);if(b)return b;if("cancelled"===a.status)return b_(a.error||"Mission aborted by operator.",90);let c=aB(a)||aC(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.")}async function aF(a,b,c){var d,e,f,h,i,j;let k,l,m,n,o,p,q,r,s,t,u,v,w=(d=a,e=b,m=c.find(a=>a.id===d.agentId),n=e.find(a=>a.id===d.agentId),p=(o=m?.workspace||n?.workspace)?b1(o):void 0,q=cY(d.key,"task"),r=cY(d.key,"stage"),s=d.model&&d.model.includes("/")?d.model:n?.model||m?.model||"unassigned",t=(f=r,h=d.key,i=d.ageMs,"in_progress"===f||h?.endsWith(":main")&&"number"==typeof i&&i<36e5?"running":"completed"===f||"done"===f?"completed":"failed"===f||"error"===f?"stalled":"idle"),u=(k=cY((j=d).key,"task")||j.key||j.sessionId||String(Math.random()),l=j.sessionId||c6(j.agentId||"sessionless"),`runtime:${l}:${c6(k)}`),v=q?q.slice(0,8):null,{id:u,source:"session",key:d.key||"unknown-session",title:v?`${cZ(d.agentId)} \xb7 ${v}`:`${cZ(d.agentId)} session`,subtitle:v?`task ${v} \xb7 ${r||"running"}`:"main session",status:t,updatedAt:d.updatedAt??null,ageMs:d.ageMs??null,agentId:d.agentId,workspaceId:p,modelId:s,sessionId:d.sessionId,taskId:q,tokenUsage:"number"==typeof d.totalTokens||"number"==typeof d.inputTokens?{input:d.inputTokens??0,output:d.outputTokens??0,total:d.totalTokens??(d.inputTokens??0)+(d.outputTokens??0),cacheRead:d.cacheRead??0}:void 0,metadata:{kind:d.kind??"direct",chatType:d.kind??"direct",stage:r??null,historical:!1}});if(!a.key?.endsWith(":main")||!a.agentId||!a.sessionId)return[w];let x=c.find(b=>b.id===a.agentId),y=b.find(b=>b.id===a.agentId),A=await bR(a.agentId,a.sessionId,x?.workspace||y?.workspace);if(!A)return[w];try{let a=await (0,g.readFile)(A,"utf8"),b=bX(a,w,x?.workspace||y?.workspace).filter(a=>!a.prompt.toLowerCase().startsWith("read heartbeat.md if it exists")),c=bZ(b);if(0===b.length)return[w];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())&&z(f,38)||`${cZ(e)} run`),i=b.warningSummary?b_(`Completed with fallback: ${b.warningSummary}`,90):b.finalText?b_(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:i,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}}})(w,a,c))}catch{return[w]}}async function aG(a){let b=await P({includeHidden:!0}),c=b.runtimes.find(b=>b.id===a);return(c||(c=(b=await P({force:!0,includeHidden:!0})).runtimes.find(b=>b.id===a)),c)?aN(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 aH(a){let b=await P({includeHidden:!0}),c=b.tasks.find(b=>b.id===a);if(c||(c=(b=await P({force:!0,includeHidden:!0})).tasks.find(b=>b.id===a)),!c)throw Error("Task was not found in the current OpenClaw snapshot.");let d=c.runtimeIds.map(a=>b.runtimes.find(b=>b.id===a)).filter(a=>!!a).sort(cS),e=await Promise.all(d.map(a=>aN(a,b))),f=new Map(e.map(a=>[a.runtimeId,a])),g=b$(e.flatMap(a=>a.createdFiles).concat(d.flatMap(a=>V(a)))),h=cQ(e.flatMap(a=>a.warnings).concat(d.flatMap(a=>W(a)))),i=c.dispatchId?await am(c.dispatchId):null,j=function(a,b,c){if(!b)return[];let d=w(c.agents.find(b=>b.id===a.primaryAgentId)??{name:"OpenClaw"}),e=[bT({id:`${b.id}:accepted`,kind:"user",timestamp:b.submittedAt,title:"Mission accepted",detail:b_(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)&&e.push(bT({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&&e.push(bT({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&&e.push(bT({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=aB(b)||aC(b);e.push(bT({id:`${b.id}:completed`,kind:"status",timestamp:b.runner.finishedAt??b.updatedAt,title:a?"Mission finished":"Dispatch runner finished",detail:b_(a||aE(b),220)},{urlSources:[a,aE(b),b.outputDirRelative],file:b.outputDir&&b.outputDirRelative?{path:b.outputDir,displayPath:b.outputDirRelative}:null}))}"cancelled"===b.status&&e.push(bT({id:`${b.id}:cancelled`,kind:"warning",timestamp:b.runner.finishedAt??b.updatedAt,title:"Mission cancelled",detail:b_(aE(b),220),isError:!1},{urlSources:[b.error,b.outputDirRelative],file:b.outputDir&&b.outputDirRelative?{path:b.outputDir,displayPath:b.outputDirRelative}:null}));let f=aD(b);return f&&e.push(bT({id:`${b.id}:integrity-warning`,kind:"warning",timestamp:b.runner.finishedAt??b.updatedAt,title:"Result needs review",detail:b_(f,220),isError:!0},{urlSources:[b.outputDirRelative],file:b.outputDir&&b.outputDirRelative?{path:b.outputDir,displayPath:b.outputDirRelative}:null})),"stalled"===b.status&&e.push(bT({id:`${b.id}:stalled`,kind:"warning",timestamp:b.updatedAt,title:b.error?"Dispatch error":"Dispatch stalled",detail:b_(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}(c,i,b),k=function(a,b,c,d){let e=new Map(d.agents.map(a=>[a.id,w(a)])),f=[];for(let d of[...b].sort((a,b)=>(a.updatedAt??0)-(b.updatedAt??0))){var g,h;if(a.dispatchId&&ar(d))continue;let b=c.get(d.id),i=d.agentId?e.get(d.agentId)??null:null,j=(g=d,(h=b?.finalTimestamp)||bU(g.updatedAt));if(b?.items.length)for(let a of b.items)f.push(bT({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:b_(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(bT({id:`${d.id}:status`,kind:"status",timestamp:j,title:i?`${i} \xb7 ${d.status}`:`Run \xb7 ${d.status}`,detail:b_(b?.errorMessage||d.subtitle,220),runtimeId:d.id,agentId:d.agentId,isError:"stalled"===d.status},{urlSources:[b?.errorMessage,d.subtitle]}));for(let a of cQ((b?.warnings??[]).concat(W(d))))f.push(bT({id:`${d.id}:warning:${X(a)}`,kind:"warning",timestamp:j,title:"Fallback",detail:b_(a,220),runtimeId:d.id,agentId:d.agentId},{urlSources:[a]}));for(let a of b$((b?.createdFiles??[]).concat(V(d))))f.push(bT({id:`${d.id}:artifact:${X(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(bT({id:`${a.id}:mission`,kind:"user",timestamp:bU(a.updatedAt),title:"Mission",detail:b_(a.mission,220),agentId:a.primaryAgentId},{urlSources:[a.mission]})),f.sort((a,b)=>Date.parse(a.timestamp)-Date.parse(b.timestamp)).slice(-36)}(c,d,f,b),l=await aI({task:c,runs:d,outputs:e,createdFiles:g,dispatchRecord:i,snapshot:b});return{task:c,runs:d,outputs:e,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)}(j,k),createdFiles:g,warnings:h,integrity:l}}async function aI(a){var b,c,d;let{task:e,dispatchRecord:f,createdFiles:g,snapshot:h}=a,i=await aJ(f?.outputDir??null),j=f?await aL(f,h):[],k=e.mission||f?.mission||null,l=k&&j.length>0?j.filter(a=>v(a.prompt,k)):j,m=[...l].sort((a,b)=>Date.parse(b.updatedAt)-Date.parse(a.updatedAt))[0]??null,n=m?.finalText?.trim()||null,o=f?aC(f):null,p=n||o||null,q=n?"runtime":o?"dispatch":"none",r=!!(f&&j.length>0&&0===l.length),s=bZ(l),t=function(a){let b=new Set;for(let c of a)if(c)for(let a of c.match(J)??[])b.add(a.toLowerCase());return[...b]}([p,o,...l.flatMap(a=>a.items.map(a=>a.text))]),u=[],w=aM(p),x=!!(b=k)&&(/\.(txt|md|json|csv|html|pdf|docx?)\b/i.test(b)||/\b(file|files|artifact|artifacts|report|document|save|export|attachment)\b/i.test(b)||/\b(dosya|dosyasi|kaydet|kaydi|cikti)\b/i.test(b)),y=!!(c=k)&&/\b(email|e-mail|mail|mail address|mail adres|eposta|e-posta)\b/i.test(c),z=!!(d=k)&&(/https?:\/\//i.test(d)||/\b[a-z0-9-]+\.(com|net|org|io|ai|co|tr|app|dev|me|info|biz|edu|gov)\b/i.test(d)||/\b(site|website|web|browser|browse|fetch|sitesine|siteye|siteyi)\b/i.test(d));return f?.outputDir&&!i.exists&&u.push({id:"missing-output-dir",severity:"warning",title:"Output folder is missing",detail:`The dispatch points at ${f.outputDirRelative||f.outputDir}, but that folder is not accessible now.`}),"completed"===e.status&&f?.outputDir&&i.exists&&0===i.fileCount&&0===g.length&&u.push({id:"empty-output-dir",severity:x?"error":"warning",title:"Deliverables folder is empty",detail:x?"The task asked for a file deliverable, but the assigned deliverables folder does not contain any files.":"The task is marked completed, but the assigned deliverables folder does not contain any files."}),"completed"===e.status&&0===j.length&&u.push({id:"missing-transcript",severity:"warning",title:"No runtime transcript was captured",detail:"Mission Control could not verify what the agent actually did because no transcript was recovered for this dispatch."}),"cancelled"===e.status&&u.push({id:"task-cancelled",severity:"warning",title:"Task was cancelled by the operator",detail:f?.error||"The mission dispatch was stopped before completion, so the captured evidence is intentionally incomplete."}),r&&f?.agentId&&u.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"!==e.status||p?"stalled"===e.status&&p?u.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"===e.status&&w&&p&&u.push({id:"placeholder-final-response",severity:0===i.fileCount&&0===g.length&&0===l.length?"error":"warning",title:"Completion response looks like a placeholder",detail:`The captured final response was "${p}", which is not enough evidence that the requested work actually finished.`}):u.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"===e.status&&z&&l.length>0&&0===s.length&&u.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"===e.status&&y&&0===t.length&&u.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:u.some(a=>"error"===a.severity)?"error":u.length>0?"warning":"verified",outputDir:f?.outputDir??null,outputDirRelative:f?.outputDirRelative??null,outputDirExists:i.exists,outputFileCount:i.fileCount,transcriptTurnCount:j.length,matchingTranscriptTurnCount:l.length,finalResponseText:p,finalResponseSource:q,dispatchSessionId:f?ay(f):null,sessionMismatch:r,toolNames:s,emails:t,issues:u}}async function aJ(a){if(!a)return{exists:!1,fileCount:0};try{if(!(await (0,g.stat)(a)).isDirectory())return{exists:!0,fileCount:1};return{exists:!0,fileCount:await aK(a)}}catch{return{exists:!1,fileCount:0}}}async function aK(a){let b=await (0,g.readdir)(a,{withFileTypes:!0}),c=0;for(let d of b){let b=k().join(a,d.name);if(d.isDirectory()){c+=await aK(b);continue}d.isFile()&&(c+=1)}return c}async function aL(a,b){let c=ay(a);if(!c)return[];let d=b.agents.find(b=>b.id===a.agentId),e=await bR(a.agentId,c,a.workspacePath??d?.workspacePath);if(!e)return[];try{let b=await (0,g.readFile)(e,"utf8");return bX(b,as(a,c),a.workspacePath??d?.workspacePath)}catch{return[]}}function aM(a){if(!a)return!1;let b=a.trim().toLowerCase();return"ready"===b||"completed"===b||"complete"===b||"ok"===b||"success"===b}async function aN(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 bS(a,"This runtime does not expose a session transcript yet.");let d=b.agents.find(b=>b.id===a.agentId),e=await bR(a.agentId,a.sessionId,d?.workspacePath);if(!e)return bS(a,"No transcript file was found for this runtime session.");try{let b=await (0,g.readFile)(e,"utf8");return bV(a,b,d?.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 aO(a){let b=c5(a.id.trim());if(!b)throw Error("Agent id is required.");let c=await P({includeHidden:!0}),d=c4(a.workspacePath)??c.workspaces.find(b=>b.id===a.workspaceId)?.path;d||(c=await P({force:!0,includeHidden:!0}),d=c4(a.workspacePath)??c.workspaces.find(b=>b.id===a.workspaceId)?.path);let e=a.workspaceId||(d?b1(d):null);if(function(a,b,c){let d=a.agents.find(a=>a.id===b);if(!d)return;let e=bD(a,d);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,m.g0)(a.policy?.preset??m.iN,a.policy),g=(0,m.Cf)(f.preset),h=c4(a.name)??g.defaultName,i=c4(a.emoji)??g.defaultEmoji,j=c4(a.theme)??g.defaultTheme,k=q(p(f.preset,a.heartbeat)),l=c.agents.find(a=>a.workspaceId===e&&"setup"===a.policy.preset)?.id??null,n=["agents","add",b,"--workspace",d,"--agent-dir",bE(d,b),"--non-interactive","--json"];a.modelId?.trim()&&n.push("--model",a.modelId.trim()),await (0,r.zB)(n);let o=await bI({workspacePath:d,agentId:b,agentName:h,policy:f,setupAgentId:l,snapshot:c}),s=await bM(b,d,{name:h,model:c4(a.modelId),heartbeat:k,skills:[o],tools:"workspace-only"===f.fileAccess?{fs:{workspaceOnly:!0}}:null},c);return await bP(b,d,{name:h||s.name,emoji:i,theme:j,avatar:c4(a.avatar)},bE(d,b)),await cn(d,{id:b,name:h,role:(0,m._P)(f.preset),emoji:i,theme:j,enabled:!0,skillId:o,modelId:c4(a.modelId),isPrimary:!1,policy:f,channelIds:a.channelIds??[]}),await cE(d),K=null,{agentId:b,workspaceId:e}}async function aP(a){var b;let c=a.id.trim();if(!c)throw Error("Agent id is required.");let d=await P({includeHidden:!0}),e=d.agents.find(a=>a.id===c);if(e||(e=(d=await P({force:!0,includeHidden:!0})).agents.find(a=>a.id===c)),!e)throw Error("Agent was not found.");let f=c4(a.workspacePath)??d.workspaces.find(b=>b.id===(a.workspaceId||e.workspaceId))?.path??e.workspacePath,g=a.workspaceId||(f?b1(f):e.workspaceId);if(!f||!g)throw Error("Workspace was not found for this agent.");let h=(0,m.g0)(a.policy?.preset??e.policy.preset,a.policy??e.policy),i=c4(e.name),j=c4(e.identity.emoji),k=c4(e.identity.theme),l=q(p(h.preset,a.heartbeat??{enabled:(b=e.heartbeat).enabled,every:b.every??void 0})),n=d.agents.find(a=>a.workspaceId===g&&"setup"===a.policy.preset&&a.id!==c)?.id??null,o=await bI({workspacePath:f,agentId:c,agentName:c4(a.name)??i??c,policy:h,setupAgentId:n,snapshot:d}),r=void 0===a.skills?e.skills:bH(a.skills),s=await bM(c,f,{name:c4(a.name),model:c4(a.modelId),heartbeat:l,skills:cQ([...r,o]),tools:"workspace-only"===h.fileAccess?{fs:{workspaceOnly:!0}}:null},d),t=void 0===a.tools?void 0:cQ(a.tools.filter(a=>"string"==typeof a).map(a=>a.trim()).filter(a=>!!a&&"fs.workspaceOnly"!==a));return await bP(c,f,{name:c4(a.name)??s.name,emoji:c4(a.emoji)??j,theme:c4(a.theme)??k,avatar:c4(a.avatar)},e.agentDir??bE(f,c)),await cn(f,{id:c,name:c4(a.name)??i??s.name??c,emoji:c4(a.emoji)??j,theme:c4(a.theme)??k,enabled:!0,modelId:c4(a.modelId)??("unassigned"===e.modelId?null:e.modelId),isPrimary:e.isDefault,policy:h,channelIds:a.channelIds??[],toolIds:t}),await cE(f),K=null,{agentId:c,workspaceId:g}}async function aQ(a){let b=a.agentId.trim();if(!b)throw Error("Agent id is required.");let c=await P({includeHidden:!0}),d=c.agents.find(a=>a.id===b);if(d||(d=(c=await P({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,f=c.runtimes.filter(a=>a.agentId===d.id).length;await (0,r.zB)(["agents","delete",d.id,"--force","--json"]);try{let a=await bN(c),b=a.filter(a=>a.id!==d.id);b.length!==a.length&&await bO(b)}catch{}if(e){await co(e.path,d.id);try{await (0,g.rm)(k().join(e.path,"skills",bF(d.id)),{recursive:!0,force:!0})}catch{}await cE(e.path)}return K=null,N=new Map,{agentId:d.id,workspaceId:d.workspaceId,workspacePath:d.workspacePath,deletedRuntimeCount:f}}async function aR(a){let b=c5(a.channelId.trim());if(!b)throw Error("Channel id is required.");return await cJ(c=>{let d=c.channels.find(a=>a.id===b)??{id:b,type:a.type,name:a.name.trim()||b,primaryAgentId:c4(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=cQ([...g.agentIds,...(a.agentIds??[]).map(a=>a.trim()).filter(Boolean)]),i=cw([...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=c4(a.primaryAgentId)??d.primaryAgentId;c.channels=[...c.channels.filter(a=>a.id!==b),{...d,id:b,type:a.type,name:a.name.trim()||d.name||b,primaryAgentId:l||j.agentIds[0]||j.groupAssignments.find(a=>a.agentId)?.agentId||null,workspaces:k}]}),K=null,cl()}async function aS(a){let b=c5(a.channelId.trim());if(!b)throw Error("Channel id is required.");return await cJ(c=>{c.channels=c.channels.map(c=>{if(c.id!==b)return c;let d=c.workspaces.filter(b=>b.workspaceId!==a.workspaceId),e=cQ([...d.flatMap(a=>a.agentIds),...d.flatMap(a=>a.groupAssignments.filter(a=>!1!==a.enabled&&a.agentId).map(a=>a.agentId))]);return{...c,primaryAgentId:c.primaryAgentId&&e.includes(c.primaryAgentId)?c.primaryAgentId:e[0]??null,workspaces:d}}).filter(a=>a.workspaces.length>0||a.primaryAgentId)}),K=null,cl()}async function aT(a){let b=c5(a.channelId.trim());if(!b)throw Error("Channel id is required.");let c=(await cc()).channels.find(a=>a.id===b);if(!c)throw Error("Channel was not found.");let d=cQ(c.workspaces.flatMap(a=>a.groupAssignments.filter(a=>!!a.chatId).map(a=>a.chatId))),e=cQ(c.workspaces.map(a=>a.workspacePath));return"internal"!==c.type&&await (0,r.zB)(["channels","remove","--channel",c.type,"--account",b,"--delete"],{timeoutMs:6e4}),await cJ(a=>{a.channels=a.channels.filter(a=>a.id!==b)},{removedAccountIds:[b],removedGroupIds:d}),await Promise.all(e.map(a=>cp(a,b))),K=null,cl()}async function aU(a){let b=c5(a.channelId.trim());if(!b)throw Error("Channel id is required.");return await cJ(c=>{let d=c.channels.find(a=>a.id===b);if(!d)throw Error("Channel was not found.");d.primaryAgentId=c4(a.primaryAgentId)??null}),K=null,cl()}async function aV(a){let b=c5(a.channelId.trim());if(!b)throw Error("Channel id is required.");let c=[];return await cJ(d=>{let e=d.channels.find(a=>a.id===b);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=cw(a.groupAssignments.map(a=>({chatId:a.chatId.trim(),agentId:c4(a.agentId)??null,title:c4(a.title)??null,enabled:!1!==a.enabled}))),f.agentIds=cQ([...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)||c.push(a)},{removedGroupIds:c}),K=null,cl()}async function aW(a){let b=c5(a.channelId.trim()),c=c5(a.agentId.trim());if(!b||!c)throw Error("Channel id and agent id are required.");return await cJ(d=>{let e=d.channels.find(a=>a.id===b);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=cQ([...f.agentIds,c]),f.workspacePath=a.workspacePath,e.workspaces=[...e.workspaces.filter(b=>b.workspaceId!==a.workspaceId),f],e.primaryAgentId||(e.primaryAgentId=c)}),K=null,cl()}async function aX(a){let b=c5(a.channelId.trim()),c=c5(a.agentId.trim());if(!b||!c)throw Error("Channel id and agent id are required.");return await cJ(d=>{let e=d.channels.find(a=>a.id===b);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!==c),f.groupAssignments=f.groupAssignments.filter(a=>a.agentId!==c),e.primaryAgentId===c){let a=f.agentIds[0]??f.groupAssignments.find(a=>!1!==a.enabled&&a.agentId)?.agentId??e.workspaces.flatMap(a=>a.agentIds).find(a=>a!==c)??e.workspaces.flatMap(a=>a.groupAssignments).find(a=>!1!==a.enabled&&a.agentId&&a.agentId!==c)?.agentId??null;e.primaryAgentId=a}e.workspaces=[...e.workspaces.filter(b=>b.workspaceId!==a.workspaceId),{...f,agentIds:f.agentIds,groupAssignments:f.groupAssignments}]}}),K=null,cl()}async function aY(a,b={}){var c,d,e,f,g,h;let i,j,k,l=function(a){let b=a.name.trim();if(!b)throw Error("Workspace name is required.");let c=c5(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={...A.eY,...a.rules??{}},i=(a.agents?.length?a.agents:(0,A.P0)(d,e,b)).map(a=>({id:c5(a.id)||"agent",role:a.role.trim()||cZ(a.id),name:c4(a.name)??(a.isPrimary?(0,A.sg)(b,a.role,cZ(a.id)):cZ(a.id)),enabled:!1!==a.enabled,emoji:c4(a.emoji),theme:c4(a.theme),skillId:c4(a.skillId),modelId:c4(a.modelId),isPrimary:!!a.isPrimary,heartbeat:p(a.policy?.preset??(0,m.qF)({skills:a.skillId?[a.skillId]:[],id:a.id,name:a.name}),a.heartbeat),policy:(0,m.g0)(a.policy?.preset??(0,m.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=bC(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:c4(a.brief),directory:c4(a.directory),modelId:c4(a.modelId),repoUrl:c4(a.repoUrl),existingPath:c4(a.existingPath),sourceMode:f,template:d,teamPreset:e,modelProfile:g,rules:h,docOverrides:(0,n.Iy)(a.docOverrides),agents:i,contextSources:bl(a.contextSources)}}(a),o=l.agents.filter(a=>a.enabled),q=(0,t.X6)({template:(0,t.fV)({sourceMode:l.sourceMode,agentCount:o.length,kickoffMission:l.rules.kickoffMission}),onProgress:b.onProgress});if(0===o.length)throw Error("Enable at least one agent for the workspace.");await q.startStep("validate","Resolving workspace settings and reserving the target directory."),await q.addActivity("validate",`Validated workspace name "${l.name}".`);let r=await bn(l);await q.updateStep("validate",{percent:38,detail:`Reserved target directory at ${r}.`}),await q.addActivity("validate",`Reserved target directory ${r}.`,"done");let s=await P({force:!0,includeHidden:!0});await q.updateStep("validate",{percent:72,detail:"Checking current OpenClaw snapshot and agent ids."}),function(a,b,c){let d=c.map(a=>bB(b,a.id)),e=bC(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 "${bD(a,c)}". Rename the workspace or adjust the agent ids.`)}}(s,l.slug,o),await q.completeStep("validate",`Workspace input and ${o.length} agent configuration${1===o.length?"":"s"} are ready.`),await q.startStep("source",(c=l.sourceMode,d=r,"clone"===c?`Cloning the source repository into ${d}.`:"existing"===c?`Preparing the existing workspace folder at ${d}.`:`Creating a fresh workspace folder at ${d}.`)),await q.addActivity("source",(e=l.sourceMode,f=l,"clone"===e?f.repoUrl?`Cloning ${f.repoUrl}.`:"Cloning the requested repository.":"existing"===e?f.existingPath?`Attaching ${f.existingPath}.`:"Attaching the requested folder.":"Preparing an empty workspace scaffold."),"active"),await bf({targetDir:r,sourceMode:l.sourceMode,repoUrl:l.repoUrl,existingPath:l.existingPath}),await q.completeStep("source",(g=l.sourceMode,h=r,"clone"===g?`Repository content is available at ${h}.`:"existing"===g?`Existing folder linked and ready at ${h}.`:`Fresh workspace folder created at ${h}.`)),await q.startStep("scaffold","Writing the initial workspace scaffold and local metadata."),await q.addActivity("scaffold","Generating workspace docs, memory, and configuration files."),await bg(r,{name:l.name,brief:l.brief,template:l.template,teamPreset:l.teamPreset,modelProfile:l.modelProfile,rules:l.rules,docOverrides:l.docOverrides,sourceMode:l.sourceMode,agents:o,contextSources:l.contextSources}),await q.completeStep("scaffold","Workspace files and starter docs are in place.");let u=[];for(let a of(await q.startStep("agents",1===o.length?"Provisioning the first workspace agent.":`Provisioning ${o.length} workspace agents.`),o)){let b=u.length,c=b+1;await q.updateStep("agents",{percent:Math.round(b/o.length*100),detail:`Creating agent ${c} of ${o.length}: ${a.name}.`}),await q.addActivity("agents",`Creating ${a.name} (${a.role}).`);let d=await bj({workspacePath:r,workspaceSlug:l.slug,workspaceModelId:l.modelId,agent:a});u.push(d),await q.addActivity("agents",`Created ${a.name} as ${d}.`,"done"),await q.updateStep("agents",{percent:Math.round(u.length/o.length*100),detail:`${u.length} of ${o.length} agent${1===o.length?"":"s"} ready.`})}await q.completeStep("agents",`${u.length} agent${1===u.length?"":"s"} linked to the workspace.`),await cE(r);let v=u.find(a=>o.some(b=>b.isPrimary&&bB(l.slug,b.id)===a))??u[0];if(l.rules.kickoffMission){await q.startStep("kickoff",`Dispatching the kickoff mission to ${v}.`),await q.addActivity("kickoff",`Selected ${v} as the primary agent.`);try{let a=await bk({agentId:v,brief:l.brief,modelProfile:l.modelProfile,template:l.template,rules:l.rules},{onProgress:async({message:a,percent:b})=>{await q.updateStep("kickoff",{percent:b,detail:a}),await q.addActivity("kickoff",a,b>=100?"done":"active")}});i=a.runId,j=a.status,await q.completeStep("kickoff",`Kickoff mission finished with status ${j||"unknown"}.`)}catch(a){k=a instanceof Error?a.message:"Kickoff mission could not be started.",await q.addActivity("kickoff",k,"error"),await q.failStep("kickoff",k)}}else await q.startStep("kickoff","Finalizing workspace bootstrap."),await q.addActivity("kickoff","Kickoff mission is disabled for this workspace.","done"),await q.completeStep("kickoff","Workspace bootstrap finished without kickoff.");return K=null,N=new Map,{workspaceId:b1(r),workspacePath:r,agentIds:u,primaryAgentId:v,kickoffRunId:i,kickoffStatus:j,kickoffError:k}}async function aZ(a){let b=a.workspaceId.trim();if(!b)throw Error("Workspace id is required.");if(a.plan){var c;let d=a.baseline??await b4(b);return a$({id:(c=d).workspaceId,name:c.name,slug:c5(k().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:d})}let d=await P({force:!0}),e=d.workspaces.find(a=>a.id===b);if(!e)throw Error("Workspace was not found.");let f=cX(e.path,a.name,a.directory);if(f!==e.path){await cW(f,e.path);try{await (0,g.rename)(e.path,f)}catch(a){throw Error(a instanceof Error?`Unable to move workspace directory. ${a.message}`:"Unable to move workspace directory.")}let a=(await bN(d)).map(a=>a.workspace===e.path?{...a,workspace:f,agentDir:"string"==typeof a.agentDir&&a.agentDir.startsWith(`${e.path}${k().sep}`)?k().join(f,k().relative(e.path,a.agentDir)):a.agentDir}:a);await bO(a)}return K=null,N=new Map,{workspaceId:b1(f),previousWorkspaceId:e.id,workspacePath:f}}async function a$(a,b,c){var d,e;let f=c4(c.name)??c4(b.workspace.name)??a.name,h=c4(c.directory),i=c4(c.baseline.directory)??a.path,j=c4(c.baseline.name)??a.name,l=c4(c.baseline.brief)??"",m=c4(b.company.mission)??c4(b.product.offer)??"",o=(0,n.Iy)(b.workspace.docOverrides),p=(0,n.Iy)(c.baseline.docOverrides),q=new Map(o.map(a=>[a.path,a.content])),r=new Map(p.map(a=>[a.path,a.content])),s=b.team.persistentAgents.filter(a=>a.enabled),t=c.baseline.agents.filter(a=>a.enabled),u=f.trim()!==j.trim(),v=u||m!==l||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)||!b5(s,t),w=h&&h!==i?cX(a.path,void 0,h):u?cX(a.path,f,void 0):a.path,x=w!==a.path,y=x?await P({force:!0,includeHidden:!0}):null;if(x){await cW(w,a.path);try{await (0,g.rename)(a.path,w)}catch(a){throw Error(a instanceof Error?`Unable to move workspace directory. ${a.message}`:"Unable to move workspace directory.")}let b=(await bN(y??void 0)).map(b=>b.workspace===a.path?{...b,workspace:w,agentDir:"string"==typeof b.agentDir&&b.agentDir.startsWith(`${a.path}${k().sep}`)?k().join(w,k().relative(a.path,b.agentDir)):b.agentDir}:b);await bO(b)}let z=k().join(w,".openclaw","project.json"),B=new Date().toISOString(),C=!1,D=null;try{let a=await (0,g.readFile)(z,"utf8"),b=JSON.parse(a);cr(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:c4(a.emoji)??null,theme:c4(a.theme)??null,isPrimary:!!a.isPrimary,skillId:c4(a.skillId)??null,modelId:c4(a.modelId)??null,policy:a.policy??null})),F=E.length<=1?"solo":E.every(a=>a.enabled)?"core":"custom",G={version:1,slug:c5(k().basename(w)),name:f,directory:w,icon:(0,A.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(v){let a=(0,n.Q5)({name:f,brief:m||f,template:b.workspace.template,sourceMode:b.workspace.sourceMode,rules:b.workspace.rules,agents:s,toolExamples:await bt(w),docOverrides:o,contextSources:b.intake.sources}),c=new Set(a.map(a=>a.path));for(let b of a)await bs(k().join(w,b.path),b.content);for(let a of o)c.has(a.path)||await bs(k().join(w,a.path),a.content)}else{let a=(0,n.Q5)({name:j,brief:l||j,template:c.baseline.template,sourceMode:c.baseline.sourceMode,rules:c.baseline.rules,agents:t,toolExamples:[],docOverrides:[],contextSources:c.baseline.contextSources??[]}),b=new Set(a.map(a=>a.path));for(let a of o)r.get(a.path)!==a.content&&await bs(k().join(w,a.path),a.content);for(let c of p){if(q.has(c.path))continue;let d=a.find(a=>a.path===c.path);d&&b.has(d.path)&&await bs(k().join(w,d.path),d.baseContent)}}if(x||!b5(s,t)){let d={...a,id:b1(w),path:w};await a_({currentWorkspace:d,desiredAgents:b.team.persistentAgents,workspaceSlug:c5(k().basename(w)),previousWorkspaceId:c.baseline.workspaceId,previousWorkspacePath:c.baseline.workspacePath})}return await bs(z,`${JSON.stringify(G,null,2)}
3
+ `),K=null,N=new Map,{workspaceId:b1(w),previousWorkspaceId:a.id,workspacePath:w}}async function a_(a){let b=Array.from(new Map((await P({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=cK(b,a.workspaceSlug,d.id);if(!d.enabled){e&&(c.add(e.id),await aQ({agentId:e.id}));continue}if(e){c.add(e.id),await aP({id:e.id,workspaceId:a.currentWorkspace.id,workspacePath:a.currentWorkspace.path,name:c4(d.name)??e.name,emoji:c4(d.emoji)??e.identity.emoji,theme:c4(d.theme)??e.identity.theme,modelId:c4(d.modelId)??("unassigned"===e.modelId?void 0:e.modelId),policy:d.policy,heartbeat:d.heartbeat,channelIds:d.channelIds});continue}let f=await aO({id:bB(a.workspaceSlug,d.id),workspaceId:a.currentWorkspace.id,workspacePath:a.currentWorkspace.path,name:c4(d.name)??void 0,emoji:c4(d.emoji)??void 0,theme:c4(d.theme)??void 0,modelId:c4(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 aQ({agentId:a.id})}async function a0(a){let b=a.workspaceId.trim();if(!b)throw Error("Workspace id is required.");let c=await P({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),f=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 bN(c),b=a.filter(a=>a.workspace!==d.path&&!e.some(b=>b.id===a.id));b.length!==a.length&&await bO(b)}catch{}return await (0,g.rm)(d.path,{recursive:!0,force:!0}),O(),{workspaceId:d.id,workspacePath:d.path,deletedAgentIds:e.map(a=>a.id),deletedRuntimeCount:f}}async function a1(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",C,b]):await a4()&&await (0,r.zB)(["config","unset",C]),K=null,N=new Map,P({force:!0})}async function a2(a){let b=function(a){let b=a?.trim();if(!b)return null;if("~"!==b&&!b.startsWith("~/")&&!k().isAbsolute(b))throw Error("Workspace root must be an absolute path or start with ~/.");return a3(b)}(a.workspaceRoot),c=await a6();return await a7({...b?{workspaceRoot:b}:{},...c.runtimePreflight?{runtimePreflight:c.runtimePreflight}:{}}),K=null,N=new Map,P({force:!0})}function a3(a){var b;let c=a?.trim();if(!c)return;let d="~"===(b=c)?i().homedir():b.startsWith("~/")?k().join(i().homedir(),b.slice(2)):b,e=k().normalize(d);return e.length>1?e.replace(/[\\/]+$/,""):e}async function a4(){try{return await (0,r.zB)(["config","get",C,"--json"]),!0}catch(a){if(bd(a).includes("Config path not found"))return!1;throw a}}async function a5(){return a3((await a6()).workspaceRoot)??null}async function a6(){let a;try{a=await (0,g.readFile)(E,"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?a3(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 a7(a){await (0,g.mkdir)(D,{recursive:!0}),await (0,g.writeFile)(E,`${JSON.stringify(a,null,2)}
4
+ `,"utf8")}function a8(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 a9(a){let b=await a6(),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 a7({...b.workspaceRoot?{workspaceRoot:b.workspaceRoot}:{},runtimePreflight:{smokeTests:c}}))}async function ba(a,b={}){try{if(!1!==b.createIfMissing&&await (0,g.mkdir)(a,{recursive:!0}),await (0,g.access)(a,f.constants.R_OK|f.constants.W_OK),b.touch){let b=k().join(a,`.agentos-write-check-${process.pid}-${Date.now()}-${Math.random().toString(16).slice(2)}`);await (0,g.writeFile)(b,"","utf8"),await (0,g.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 bb(a,b={}){let c=[...new Set(a.filter(Boolean))],d=await ba(I,{createIfMissing:!0,touch:b.touch}),e=await Promise.all(c.map(async a=>{let c=k().join(I,"agents",a,"sessions"),d=await ba(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??I}`,...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:I,stateWritable:d.writable,sessionStoreWritable:d.writable&&f,sessionStores:e,issues:g}}async function bc(a,b){let c,d=await bb(a),e=(c=Object.entries(b.runtimePreflight?.smokeTests??{}).sort((a,b)=>{let c=Date.parse(a[1].checkedAt);return Date.parse(b[1].checkedAt)-c})[0],a8(c?.[0]??null,c?.[1]??null)),f=[...d.issues,..."failed"===e.status&&e.error?[`Latest runtime smoke test failed for ${e.agentId??"unknown agent"}. ${e.error}`]:[]];return{...d,smokeTest:e,issues:f}}function bd(a){if(!a||"object"!=typeof a)return"";let b="stdout"in a?be(a.stdout):"",c="stderr"in a?be(a.stderr):"",d="message"in a&&"string"==typeof a.message?a.message:"";return`${d}
5
5
  ${b}
6
- ${c}`}function a5(a){return"string"==typeof a?a:a instanceof Uint8Array?Buffer.from(a).toString():""}async function a6(a){if("existing"===a.sourceMode)return void await be(a.targetDir);if("clone"===a.sourceMode){let b=cm(a.repoUrl);if(!b)throw Error("Repository URL is required when cloning a repo.");await cc(a.targetDir,""),await (0,g.mkdir)(k().dirname(a.targetDir),{recursive:!0}),await bf("git",["clone",b,a.targetDir]);return}await bd(a.targetDir)}async function a7(a,b){let c=(0,y.hh)(b.template),d=new Date().toISOString(),e=await bi(a);for(let f of(await a9(a),await (0,g.mkdir)(k().join(a,"skills"),{recursive:!0}),await (0,g.mkdir)(k().join(a,".openclaw","project-shell","runs"),{recursive:!0}),await (0,g.mkdir)(k().join(a,".openclaw","project-shell","tasks"),{recursive:!0}),await bg(k().join(a,".openclaw","project-shell","events.jsonl"),""),await bg(k().join(a,".openclaw","project.json"),`${JSON.stringify({version:1,slug:cn(b.name),name:b.name,icon:c.icon,createdAt:d,updatedAt:d,template:b.template,sourceMode:b.sourceMode,teamPreset:b.teamPreset,modelProfile:b.modelProfile,agentTemplate:"solo"===b.teamPreset?"solo":"core-team",rules:{workspaceOnly:b.rules.workspaceOnly,generateStarterDocs:b.rules.generateStarterDocs,generateMemory:b.rules.generateMemory,kickoffMission:b.rules.kickoffMission},agents:b.agents.map(a=>({id:a.id,name:a.name,role:a.role,enabled:a.enabled,emoji:cm(a.emoji)??null,theme:cm(a.theme)??null,isPrimary:!!a.isPrimary,skillId:cm(a.skillId)??null,modelId:cm(a.modelId)??null,policy:a.policy??null}))},null,2)}
7
- `),(0,z.Q5)({name:b.name,brief:b.brief,template:b.template,sourceMode:b.sourceMode,rules:b.rules,agents:b.agents,toolExamples:e,docOverrides:b.docOverrides})))await bg(k().join(a,f.path),f.content);for(let c of b.agents){let b=cm(c.skillId);b&&(await (0,g.mkdir)(k().join(a,"skills",b),{recursive:!0}),await bg(k().join(a,"skills",b,"SKILL.md"),function(a,b){switch(a){case"project-builder":return`# Project Builder
6
+ ${c}`}function be(a){return"string"==typeof a?a:a instanceof Uint8Array?Buffer.from(a).toString():""}async function bf(a){if("existing"===a.sourceMode)return void await bp(a.targetDir);if("clone"===a.sourceMode){let b=c4(a.repoUrl);if(!b)throw Error("Repository URL is required when cloning a repo.");await cW(a.targetDir,""),await (0,g.mkdir)(k().dirname(a.targetDir),{recursive:!0}),await bq("git",["clone",b,a.targetDir]);return}await bo(a.targetDir)}async function bg(a,b){let c=(0,A.hh)(b.template),d=new Date().toISOString(),e=await bt(a);for(let f of(await bi(a),await (0,g.mkdir)(k().join(a,"skills"),{recursive:!0}),await (0,g.mkdir)(k().join(a,".openclaw","project-shell","runs"),{recursive:!0}),await (0,g.mkdir)(k().join(a,".openclaw","project-shell","tasks"),{recursive:!0}),await br(k().join(a,".openclaw","project-shell","events.jsonl"),""),await br(k().join(a,".openclaw","project.json"),`${JSON.stringify({version:1,slug:c5(b.name),name:b.name,icon:c.icon,createdAt:d,updatedAt:d,template:b.template,sourceMode:b.sourceMode,teamPreset:b.teamPreset,modelProfile:b.modelProfile,agentTemplate:"solo"===b.teamPreset?"solo":"core-team",rules:{workspaceOnly:b.rules.workspaceOnly,generateStarterDocs:b.rules.generateStarterDocs,generateMemory:b.rules.generateMemory,kickoffMission:b.rules.kickoffMission},contextSources:b.contextSources,agents:b.agents.map(a=>({id:a.id,name:a.name,role:a.role,enabled:a.enabled,emoji:c4(a.emoji)??null,theme:c4(a.theme)??null,isPrimary:!!a.isPrimary,skillId:c4(a.skillId)??null,modelId:c4(a.modelId)??null,policy:a.policy??null}))},null,2)}
7
+ `),(0,n.Q5)({name:b.name,brief:b.brief,template:b.template,sourceMode:b.sourceMode,rules:b.rules,agents:b.agents,toolExamples:e,docOverrides:b.docOverrides,contextSources:b.contextSources})))await br(k().join(a,f.path),f.content);for(let c of b.agents){let b=c4(c.skillId);b&&(await (0,g.mkdir)(k().join(a,"skills",b),{recursive:!0}),await br(k().join(a,"skills",b,"SKILL.md"),function(a,b){switch(a){case"project-builder":return`# Project Builder
8
8
 
9
9
  Use this skill when implementing changes in the current project.
10
10
 
@@ -79,28 +79,191 @@ Use this skill when operating in the current workspace.
79
79
  - Produce durable artifacts when the work needs to be handed off.
80
80
  - Put task-specific artifacts in the current deliverables run folder and keep notes in memory/.
81
81
  - Keep outputs specific, reviewable, and easy for other agents to extend.
82
- `}}(b,c.role)))}}let a8=[".openclaw/agents/",".openclaw/project-shell/events.jsonl",".openclaw/project-shell/runs/",".openclaw/project-shell/tasks/"];async function a9(a){let b=k().join(a,".gitignore"),c="";try{c=await (0,g.readFile)(b,"utf8")}catch{c=""}let d=a8.filter(a=>!c.includes(a));if(0===d.length)return;let e=["# OpenClaw local runtime state",...d].join("\n"),f=c.trim().length>0?`${c.trimEnd()}
82
+ `}}(b,c.role)))}}let bh=[".openclaw/agents/",".openclaw/project-shell/events.jsonl",".openclaw/project-shell/runs/",".openclaw/project-shell/tasks/"];async function bi(a){let b=k().join(a,".gitignore"),c="";try{c=await (0,g.readFile)(b,"utf8")}catch{c=""}let d=bh.filter(a=>!c.includes(a));if(0===d.length)return;let e=["# OpenClaw local runtime state",...d].join("\n"),f=c.trim().length>0?`${c.trimEnd()}
83
83
 
84
84
  ${e}
85
85
  `:`${e}
86
- `;await bh(b,f)}async function ba(a){let b=bq(a.workspaceSlug,a.agent.id),c=cm(a.agent.modelId)??cm(a.workspaceModelId),d=(0,m.g0)(a.agent.policy?.preset??(0,m.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",bt(a.workspacePath,b),"--non-interactive","--json"];c&&e.push("--model",c),await (0,q.zB)(e);let f=await bw({workspacePath:a.workspacePath,agentId:b,agentName:a.agent.name,policy:d}),g=await bx(b,a.workspacePath,{name:cm(a.agent.name),model:c,heartbeat:p(a.agent.heartbeat),skills:[cm(a.agent.skillId),f].filter(a=>!!a),tools:"workspace-only"===d.fileAccess?{fs:{workspaceOnly:!0}}:null});return await bA(b,a.workspacePath,{name:cm(a.agent.name)??g.name,emoji:cm(a.agent.emoji),theme:cm(a.agent.theme)}),b}async function bb(a,b={}){var c,d;let e,f=(c=a.template,d=a.brief,e=(0,y.hh)(c),[`You are bootstrapping a newly created ${e.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.","If docs/architecture.md or memory/blueprint.md exist, refine them based on the real repository state.","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")),g="fast"===a.modelProfile?"low":"quality"===a.modelProfile?"high":"medium";await b.onProgress?.({message:"Submitting the kickoff brief to the primary agent.",percent:18});let h=await (0,q.JZ)(["agent","--agent",a.agentId,"--message",f,"--thinking",g,"--timeout","90","--json"],{timeoutMs:12e4,onStdout:async a=>{let c,d=(c=a.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("[")))).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();c&&await b.onProgress?.({message:`Kickoff runtime: ${c.split(/\r?\n/)[0]}`,percent:64})}});return await b.onProgress?.({message:"Kickoff mission completed. Recording the resulting run metadata.",percent:100}),h}async function bc(a){let b=cb(await aY());if("existing"===a.sourceMode){let b=a.existingPath||a.directory;if(!b)throw Error("Choose an existing folder for this workspace.");return k().isAbsolute(b)?b:k().resolve(b)}return a.directory?k().isAbsolute(a.directory)?a.directory:k().join(b,a.directory):k().join(b,a.slug)}async function bd(a){try{if(!(await (0,g.stat)(a)).isDirectory())throw Error("Target workspace path exists and is not a directory.");if((await (0,g.readdir)(a)).length>0)throw Error("Target workspace directory already contains files. Use Existing folder instead.")}catch(b){if("ENOENT"===("object"==typeof b&&b&&"code"in b?b.code:void 0))return void await (0,g.mkdir)(a,{recursive:!0});if(b instanceof Error)throw b;throw Error("Unable to prepare the workspace directory.")}await (0,g.mkdir)(a,{recursive:!0})}async function be(a){try{if(!(await (0,g.stat)(a)).isDirectory())throw Error("The selected existing path is not a directory.")}catch(a){if("ENOENT"===("object"==typeof a&&a&&"code"in a?a.code:void 0))throw Error("The selected existing folder does not exist.");if(a instanceof Error)throw a;throw Error("Unable to access the selected existing folder.")}}async function bf(a,b,c={}){try{await A(a,b,{cwd:c.cwd??process.cwd(),timeout:c.timeoutMs??12e4,maxBuffer:8388608})}catch(a){throw Error("object"==typeof a&&a&&"stderr"in a&&"string"==typeof a.stderr&&a.stderr.trim()?a.stderr.trim():a instanceof Error?a.message:"Unknown system command failure.")}}async function bg(a,b){try{await (0,g.access)(a)}catch{await (0,g.mkdir)(k().dirname(a),{recursive:!0}),await (0,g.writeFile)(a,b,"utf8")}}async function bh(a,b){await (0,g.mkdir)(k().dirname(a),{recursive:!0}),await (0,g.writeFile)(a,b,"utf8")}async function bi(a){let b=[],c=await bj(a),d=await bk(a),e=await bl(a);return b.push(...c,...d,...e),0===b.length&&b.push("Use repository-local scripts or documented commands for repeatable workflows.","Update this file when the project exposes a cleaner build, test, or release path."),b6(b).slice(0,6)}async function bj(a){let b=k().join(a,"package.json");try{let e=await (0,g.readFile)(b,"utf8"),f=JSON.parse(e),h=f.scripts??{},i=await bo(a,f.packageManager),j=[`Use \`${i} install\` before the first local run.`];for(let a of["dev","start","test","lint","build"]){var c,d;h[a]&&j.push(`Use \`${(c=i,d=a,"yarn"===c?`yarn ${d}`:`${c} run ${d}`)}\` for the ${a} workflow.`)}return j}catch{return[]}}async function bk(a){let b=k().join(a,"Makefile");try{return((await (0,g.readFile)(b,"utf8")).match(/^(dev|test|lint|build|run):/gm)??[]).map(a=>`Use \`make ${a.replace(/:$/,"")}\` if the Makefile is the primary entry point.`)}catch{return[]}}async function bl(a){let b=[];return await bp(k().join(a,"pyproject.toml"))&&b.push("Use `pytest` for Python verification if the project exposes a test suite."),await bp(k().join(a,"requirements.txt"))&&b.push("Install Python dependencies in a virtualenv before running project commands."),b}async function bm(a,b){var c;let d,e,f,h=(c=b,e=[(d=new Date).getFullYear(),ci(d.getMonth()+1),ci(d.getDate()),ci(d.getHours()),ci(d.getMinutes()),ci(d.getSeconds())].join("-"),f=cn(c.replace(/^\[[^\]]+\]\s*/i,"").trim()).slice(0,48).replace(/^-+|-+$/g,"")||"task",`${e}-${f}`),i=k().join(a,"deliverables",h),j=cj(k().join("deliverables",h)),l=cj("memory");return await (0,g.mkdir)(i,{recursive:!0}),await (0,g.mkdir)(k().join(a,"memory"),{recursive:!0}),{runFolder:h,absoluteOutputDir:i,relativeOutputDir:j,notesDirRelative:l}}function bn(a,b){let c=[`- Preset: ${(0,m._P)(a.preset)}.`];switch("browser"===a.preset?c.push("- Prefer browser-native evidence capture, screenshots, and reproducible user-path validation."):"monitoring"===a.preset?c.push("- Periodically inspect the workspace, surface blockers, and leave concise triage handoffs without broad implementation changes."):"setup"===a.preset?c.push("- Prepare the environment, unblock other agents, and keep mutations minimal and explicit."):"worker"===a.preset?c.push("- Focus on producing deliverables, reviews, analysis, or code without unnecessary environment mutation."):c.push("- Operate with the selected policy, keep artifacts reviewable, and avoid surprising side effects."),a.missingToolBehavior){case"fallback":c.push("- If required tooling is unavailable, do not install it. Produce the closest viable fallback artifact, such as .md or .txt, and state the limitation.");break;case"ask-setup":c.push("- If required tooling is unavailable, stop before installing anything and report the missing capability clearly.");break;case"route-setup":c.push(b?`- If required tooling is unavailable, do not install it yourself. Leave a concrete handoff for setup agent \`${b}\` with the exact missing tools or commands.`:"- If required tooling is unavailable, do not install it yourself. Leave a concrete setup handoff with the exact missing tools or commands.");break;case"allow-install":c.push("- If required tooling is unavailable, you may install it when the install scope below permits it.")}switch(a.installScope){case"none":c.push("- Install scope: none. Do not run package installation commands.");break;case"workspace":c.push("- Install scope: workspace only. Limit installs to project-local or workspace-local dependencies and avoid system package managers.");break;case"system":c.push("- Install scope: system. System-wide installs are allowed when necessary, but keep them minimal and report what changed.")}return c.push("workspace-only"===a.fileAccess?"- File access: workspace only. Keep file operations inside the attached workspace.":"- File access: extended. Prefer the workspace, but you may touch adjacent paths when the task explicitly needs them."),c.push("enabled"===a.networkAccess?"- Network access: enabled when the task requires external information or downloads.":"- Network access: restricted. Avoid network access unless the task explicitly depends on it."),c}async function bo(a,b){let c=cm(b);return c?c.split("@")[0]:await bp(k().join(a,"pnpm-lock.yaml"))?"pnpm":await bp(k().join(a,"yarn.lock"))?"yarn":"npm"}async function bp(a){try{return await (0,g.access)(a),!0}catch{return!1}}function bq(a,b){return`${a}-${cn(b)||"agent"}`}function br(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))}function bs(a,b){return a.workspaces.find(a=>a.id===b.workspaceId)?.name??k().basename(b.workspacePath)}function bt(a,b){return k().join(a,".openclaw","agents",b,"agent")}function bu(a){return`agent-policy-${cn(a)||"agent"}`}function bv(a){return!!(a&&/^agent-policy-/.test(a))}async function bw(a){var b,c,d;let e,f=bu(a.agentId);return await bh(k().join(a.workspacePath,"skills",f,"SKILL.md"),`${(b=a.agentName,c=a.policy,d=a.setupAgentId,e=(0,m._P)(c.preset),`# ${b} Policy
86
+ `;await bs(b,f)}async function bj(a){let b=bB(a.workspaceSlug,a.agent.id),c=c4(a.agent.modelId)??c4(a.workspaceModelId),d=(0,m.g0)(a.agent.policy?.preset??(0,m.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",bE(a.workspacePath,b),"--non-interactive","--json"];c&&e.push("--model",c),await (0,r.zB)(e);let f=await bI({workspacePath:a.workspacePath,agentId:b,agentName:a.agent.name,policy:d}),g=await bM(b,a.workspacePath,{name:c4(a.agent.name),model:c,heartbeat:q(a.agent.heartbeat),skills:[c4(a.agent.skillId),f].filter(a=>!!a),tools:"workspace-only"===d.fileAccess?{fs:{workspaceOnly:!0}}:null});return await bP(b,a.workspacePath,{name:c4(a.agent.name)??g.name,emoji:c4(a.agent.emoji),theme:c4(a.agent.theme)},bE(a.workspacePath,b)),b}async function bk(a,b={}){var c,d,e;let f,g,h=(c=a.template,d=a.brief,e=a.rules,f=(0,A.hh)(c),g=(0,n.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";await b.onProgress?.({message:"Submitting the kickoff brief to the primary agent.",percent:18});let j=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.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("[")))).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();c&&await b.onProgress?.({message:`Kickoff runtime: ${c.split(/\r?\n/)[0]}`,percent:64})}});return await b.onProgress?.({message:"Kickoff mission completed. Recording the resulting run metadata.",percent:100}),j}function bl(a){return(a??[]).flatMap(a=>{if(!a||"object"!=typeof a)return[];let b=bm(a.kind)?a.kind:"prompt",c=c4(a.label)??b,d=c4(a.summary)??c,e="error"===a.status?"error":"ready",f=c4(a.createdAt)??new Date().toISOString();return c&&d?[{id:c4(a.id)??`${b}-${c5(c)||"context"}`,kind:b,label:c,summary:d,details:Array.isArray(a.details)?a.details.map(a=>c4(a)??"").filter(a=>!!a):[],status:e,createdAt:f,..."number"==typeof a.confidence?{confidence:a.confidence}:{},...c4(a.error)?{error:c4(a.error)}:{},...c4(a.url)?{url:c4(a.url)}:{}}]:[]})}function bm(a){return"prompt"===a||"website"===a||"repo"===a||"folder"===a}async function bn(a){let b=cV(await a5());if("existing"===a.sourceMode){let b=a.existingPath||a.directory;if(!b)throw Error("Choose an existing folder for this workspace.");return k().isAbsolute(b)?b:k().resolve(b)}return a.directory?k().isAbsolute(a.directory)?a.directory:k().join(b,a.directory):k().join(b,a.slug)}async function bo(a){try{if(!(await (0,g.stat)(a)).isDirectory())throw Error("Target workspace path exists and is not a directory.");if((await (0,g.readdir)(a)).length>0)throw Error("Target workspace directory already contains files. Use Existing folder instead.")}catch(b){if("ENOENT"===("object"==typeof b&&b&&"code"in b?b.code:void 0))return void await (0,g.mkdir)(a,{recursive:!0});if(b instanceof Error)throw b;throw Error("Unable to prepare the workspace directory.")}await (0,g.mkdir)(a,{recursive:!0})}async function bp(a){try{if(!(await (0,g.stat)(a)).isDirectory())throw Error("The selected existing path is not a directory.")}catch(a){if("ENOENT"===("object"==typeof a&&a&&"code"in a?a.code:void 0))throw Error("The selected existing folder does not exist.");if(a instanceof Error)throw a;throw Error("Unable to access the selected existing folder.")}}async function bq(a,b,c={}){try{await B(a,b,{cwd:c.cwd??process.cwd(),timeout:c.timeoutMs??12e4,maxBuffer:8388608})}catch(a){throw Error("object"==typeof a&&a&&"stderr"in a&&"string"==typeof a.stderr&&a.stderr.trim()?a.stderr.trim():a instanceof Error?a.message:"Unknown system command failure.")}}async function br(a,b){try{await (0,g.access)(a)}catch{await (0,g.mkdir)(k().dirname(a),{recursive:!0}),await (0,g.writeFile)(a,b,"utf8")}}async function bs(a,b){await (0,g.mkdir)(k().dirname(a),{recursive:!0}),await (0,g.writeFile)(a,b,"utf8")}async function bt(a){let b=[],c=await bu(a),d=await bv(a),e=await bw(a);return b.push(...c,...d,...e),0===b.length&&b.push("Use repository-local scripts or documented commands for repeatable workflows.","Update this file when the project exposes a cleaner build, test, or release path."),cQ(b).slice(0,6)}async function bu(a){let b=k().join(a,"package.json");try{let e=await (0,g.readFile)(b,"utf8"),f=JSON.parse(e),h=f.scripts??{},i=await bz(a,f.packageManager),j=[`Use \`${i} install\` before the first local run.`];for(let a of["dev","start","test","lint","build"]){var c,d;h[a]&&j.push(`Use \`${(c=i,d=a,"yarn"===c?`yarn ${d}`:`${c} run ${d}`)}\` for the ${a} workflow.`)}return j}catch{return[]}}async function bv(a){let b=k().join(a,"Makefile");try{return((await (0,g.readFile)(b,"utf8")).match(/^(dev|test|lint|build|run):/gm)??[]).map(a=>`Use \`make ${a.replace(/:$/,"")}\` if the Makefile is the primary entry point.`)}catch{return[]}}async function bw(a){let b=[];return await bA(k().join(a,"pyproject.toml"))&&b.push("Use `pytest` for Python verification if the project exposes a test suite."),await bA(k().join(a,"requirements.txt"))&&b.push("Install Python dependencies in a virtualenv before running project commands."),b}async function bx(a,b){var c;let d,e,f,h=(c=b,e=[(d=new Date).getFullYear(),c0(d.getMonth()+1),c0(d.getDate()),c0(d.getHours()),c0(d.getMinutes()),c0(d.getSeconds())].join("-"),f=c5(c.replace(/^\[[^\]]+\]\s*/i,"").trim()).slice(0,48).replace(/^-+|-+$/g,"")||"task",`${e}-${f}`),i=k().join(a,"deliverables",h),j=c1(k().join("deliverables",h)),l=c1("memory");return await (0,g.mkdir)(i,{recursive:!0}),await (0,g.mkdir)(k().join(a,"memory"),{recursive:!0}),{runFolder:h,absoluteOutputDir:i,relativeOutputDir:j,notesDirRelative:l}}function by(a,b){let c=[`- Preset: ${(0,m._P)(a.preset)}.`];switch("browser"===a.preset?c.push("- Prefer browser-native evidence capture, screenshots, and reproducible user-path validation."):"monitoring"===a.preset?c.push("- Periodically inspect the workspace, surface blockers, and leave concise triage handoffs without broad implementation changes."):"setup"===a.preset?c.push("- Prepare the environment, unblock other agents, and keep mutations minimal and explicit."):"worker"===a.preset?c.push("- Focus on producing deliverables, reviews, analysis, or code without unnecessary environment mutation."):c.push("- Operate with the selected policy, keep artifacts reviewable, and avoid surprising side effects."),a.missingToolBehavior){case"fallback":c.push("- If required tooling is unavailable, do not install it. Produce the closest viable fallback artifact, such as .md or .txt, and state the limitation.");break;case"ask-setup":c.push("- If required tooling is unavailable, stop before installing anything and report the missing capability clearly.");break;case"route-setup":c.push(b?`- If required tooling is unavailable, do not install it yourself. Leave a concrete handoff for setup agent \`${b}\` with the exact missing tools or commands.`:"- If required tooling is unavailable, do not install it yourself. Leave a concrete setup handoff with the exact missing tools or commands.");break;case"allow-install":c.push("- If required tooling is unavailable, you may install it when the install scope below permits it.")}switch(a.installScope){case"none":c.push("- Install scope: none. Do not run package installation commands.");break;case"workspace":c.push("- Install scope: workspace only. Limit installs to project-local or workspace-local dependencies and avoid system package managers.");break;case"system":c.push("- Install scope: system. System-wide installs are allowed when necessary, but keep them minimal and report what changed.")}return c.push("workspace-only"===a.fileAccess?"- File access: workspace only. Keep file operations inside the attached workspace.":"- File access: extended. Prefer the workspace, but you may touch adjacent paths when the task explicitly needs them."),c.push("enabled"===a.networkAccess?"- Network access: enabled when the task requires external information or downloads.":"- Network access: restricted. Avoid network access unless the task explicitly depends on it."),c}async function bz(a,b){let c=c4(b);return c?c.split("@")[0]:await bA(k().join(a,"pnpm-lock.yaml"))?"pnpm":await bA(k().join(a,"yarn.lock"))?"yarn":"npm"}async function bA(a){try{return await (0,g.access)(a),!0}catch{return!1}}function bB(a,b){return`${a}-${c5(b)||"agent"}`}function bC(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))}function bD(a,b){return a.workspaces.find(a=>a.id===b.workspaceId)?.name??k().basename(b.workspacePath)}function bE(a,b){return k().join(a,".openclaw","agents",b,"agent")}function bF(a){return`agent-policy-${c5(a)||"agent"}`}function bG(a){return!!(a&&/^agent-policy-/.test(a))}function bH(a){return a.filter(a=>!bG(a))}async function bI(a){var b,c,d,e,f;let g,h,i,j=bF(a.agentId);await bJ(a.workspacePath);let l=await bL(a.workspacePath,a.agentId,a.snapshot??null),n=function(a,b,c){if(!c)return null;let d=new Map(b?.agents.map(a=>[a.id,w(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=cw(c.flatMap(a=>a.groupAssignments.filter(a=>!1!==a.enabled))).map(a=>({chatId:a.chatId,title:a.title??null})),k=cw(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=cQ(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:bK(b)}});h.push({channelId:b.id,channelName:b.name,groups:l,peers:f})}for(let f of k){let g=cQ(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:bK(b)}});i.push({channelId:b.id,channelName:b.name,chatId:f.chatId,title:f.title??null,primaryAgentId:b.primaryAgentId??"",primaryAgentName:b.primaryAgentId?d.get(b.primaryAgentId)??b.primaryAgentId:"Unset",peers:g})}(0!==c.length&&b.primaryAgentId&&!(k.length>0)||b.primaryAgentId===a)&&j.push({channelId:b.id,channelName:b.name,groups:l,peers:cQ(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:bK(b)}}),primaryAgentId:b.primaryAgentId,primaryAgentName:d.get(b.primaryAgentId)??b.primaryAgentId})}return 0===h.length&&0===j.length&&0===i.length?null:{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 bs(k().join(a.workspacePath,"skills",j,"SKILL.md"),`${(b=a.agentName,c=a.policy,d=a.setupAgentId,e=l,f=n,g=(0,m._P)(c.preset),h=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")}(e),i=function(a){if(!a||0===a.primaryChannels.length&&0===a.ownedGroups.length&&0===a.delegateChannels.length)return null;let b=["## Telegram coordination"];if(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(a=>a.title??a.chatId).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(a=>a.title??a.chatId).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, return concise internal findings or draft language. Do not speak as the public Telegram agent.")}return b.join("\n")}(f),`# ${b} Policy
87
87
 
88
- Preset: ${e}
88
+ Preset: ${g}
89
89
 
90
90
  ## Output routing
91
91
  - Final deliverables belong in the current deliverables run folder for the task.
92
92
  - Keep temporary notes and durable workspace memory inside memory/.
93
+ - Treat MEMORY.md, memory/*.md, docs/brief.md, docs/architecture.md, and any template-specific docs under docs/ as shared workspace context before large edits.
93
94
  - Avoid writing final artifacts to the workspace root unless the task explicitly asks for it.
94
95
 
95
96
  ## Operating rules
96
- ${bn(c,d).map(a=>a.replace(/^- /,"- ")).join("\n")}
97
+ ${by(c,d).map(a=>a.replace(/^- /,"- ")).join("\n")}
98
+ ${h?`
99
+
100
+ ${h}`:""}${i?`
101
+
102
+ ${i}`:""}
97
103
  `)}
98
- `),f}async function bx(a,b,c){let d=await by(),e=d.findIndex(b=>b.id===a),f=e>=0?{...d[e]}:{id:a,workspace:b};return f.workspace=b,c.name&&(f.name=c.name),"string"==typeof c.model?f.model=c.model:delete f.model,c.heartbeat?.every?f.heartbeat={every:c.heartbeat.every}:null===c.heartbeat&&delete f.heartbeat,Array.isArray(c.skills)&&c.skills.length>0?f.skills=b6(c.skills):Array.isArray(c.skills)&&delete f.skills,c.tools?f.tools=c.tools:null===c.tools&&delete f.tools,e>=0?d[e]=f:d.push(f),await bz(d),f}async function by(){let a=await (0,q.VP)(["config","get","agents.list","--json"]);return Array.isArray(a)?a:[]}async function bz(a){await (0,q.zB)(["config","set","--strict-json","agents.list",JSON.stringify(a)])}async function bA(a,b,c){let d=["agents","set-identity","--agent",a,"--workspace",b,"--json"];c.name&&d.push("--name",c.name),c.emoji&&d.push("--emoji",c.emoji),c.theme&&d.push("--theme",c.theme),c.avatar&&d.push("--avatar",c.avatar),7!==d.length&&await (0,q.zB)(d)}async function bB(a,b,c){for(let d of[k().join(i().homedir(),".openclaw","agents",a,"sessions",`${b}.jsonl`),c?k().join(c,".openclaw","agents",a,"sessions",`${b}.jsonl`):null].filter(Boolean))try{return await (0,g.access)(d),d}catch{continue}return null}function bC(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 bD(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 bE(a){return"number"==typeof a&&Number.isFinite(a)?new Date(a).toISOString():new Date().toISOString()}function bF(a,b,c){let d=bH(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=>u(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 bG(a,c)}let e=d.at(-1);return e?bG(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 bG(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 bH(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 h=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),i=c.message.errorMessage??null,j=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 bL((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,h,i);if(!h&&!i&&!("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:h||i||"",toolName:"toolResult"===d?c.message.toolName?.trim()||bM(h):void 0,stopReason:"assistant"===d?c.message.stopReason??null:null,errorMessage:i,isWarning:!!j,isError:!!i||!0===c.message.isError||"error"===c.message.stopReason||"aborted"===c.message.stopReason};if("user"===d){g&&e.push(bI(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=k().isAbsolute(c)?k().normalize(c):b?k().resolve(b,c):null;if(!d)return null;let e=b&&d.startsWith(`${k().resolve(b)}${k().sep}`)?k().relative(k().resolve(b),d)||k().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||=i,j&&!g.warnings.includes(j)&&g.warnings.push(j),"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()||bM(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(bI(g)),e}function bI(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=cg(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:bK(a.createdFiles),warnings:i,warningSummary:i[0]??null,toolNames:b6([...a.pendingToolNames])}}function bJ(a){return b6(a.flatMap(a=>a.toolNames))}function bK(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 bL(a,b){let c=a.replace(/\s+/g," ").trim();return c.length<=b?c:`${c.slice(0,Math.max(b-1,1)).trimEnd()}…`}function bM(a){let b=a.match(/"tool(Name)?":\s*"([^"]+)"/i);return b?.[2]}function bN(a){let b=(0,e.createHash)("sha1").update(a).digest("hex").slice(0,8);return`workspace:${b}`}async function bO(a,b){let c=[],d=new Map;for(let b of["AGENTS.md","SOUL.md","IDENTITY.md","TOOLS.md","HEARTBEAT.md"]){let e=k().join(a,b);try{await (0,g.access)(e);let a=(await (0,g.readFile)(e,"utf8")).trim();if(!a)continue;c.push(b),d.set(b,a.split(/\r?\n/))}catch{continue}}let e=function(a){let b=b2(a.get("SOUL.md"),"My Purpose");if(b)return b;let c=b2(a.get("IDENTITY.md"),"Role");if(c)return c;let d=b2(a.get("AGENTS.md"),"Customize");return d||null}(d)??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}),f=b6([...b3(d.get("AGENTS.md"),"Safety defaults"),...b3(d.get("AGENTS.md"),"Daily memory"),...b3(d.get("SOUL.md"),"How I Operate"),...b3(d.get("TOOLS.md"),"Examples")]).slice(0,6)||[],h=b6([...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=>b5(a)).filter(Boolean)}(d.get("IDENTITY.md"),"Vibe"),...b3(d.get("SOUL.md"),"My Quirks"),...b3(d.get("SOUL.md"),"How I Operate")]).slice(0,6)||[],i=function(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?b5(b):null}(d.get("AGENTS.md"))??(b.configuredTools.includes("fs.workspaceOnly")?"Prefer workspace-grounded output tied to real project files and artifacts.":null);return{purpose:e,operatingInstructions:f.length>0?f: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:h,outputPreference:i,sourceFiles:c}}async function bP(a,b){let[c,d,e,f,g,h]=await Promise.all([bX(a),bV(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"}]),bV(a,[{id:"memory-md",label:"MEMORY.md",relativePath:"MEMORY.md",kind:"file"}]),bV(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"}]),bV(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"}]),bW(a)]),i=b6(b.flatMap(a=>a.tools)),j=b6([...h,...b.flatMap(a=>a.skills)]),k=b.filter(a=>a.tools.includes("fs.workspaceOnly")).length;return{bootstrap:{template:c.template,sourceMode:c.sourceMode,agentTemplate:c.agentTemplate,coreFiles:d,optionalFiles:e,folders:f,projectShell:g,localSkillIds:h},capabilities:{skills:j,tools:i,workspaceOnlyAgentCount:k}}}async function bQ(a){let b=await N({force:!0,includeHidden:!0}),c=b.workspaces.find(b=>b.id===a);if(!c)throw Error("Workspace was not found.");let d=await bX(c.path),e=d.name??c.name,f=b.agents.filter(a=>a.workspaceId===c.id),h=b6(f.flatMap(a=>a.skills)),i=b6(f.flatMap(a=>a.tools)),j=await bO(c.path,{agentId:f[0]?.id??c.id,agentName:f[0]?.name??e,configuredSkills:h,configuredTools:i}),l=d.template??c.bootstrap.template??"software",n=d.sourceMode??c.bootstrap.sourceMode??"empty",o=d.teamPreset??(f.length<=1?"solo":"core"),p=d.modelProfile??"balanced",q=d.rules??y.eY,r=d.agents.length>0?d.agents.map(a=>{let b=b1(f,c.slug,a.id),d=(0,m.g0)(a.policy?.preset??b?.policy.preset??m.iN,a.policy??b?.policy);return{id:a.id,role:a.role??(0,m._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,heartbeat:{enabled:b?.heartbeat.enabled??!1,...b?.heartbeat.every?{every:b.heartbeat.every}:{}}}}):(0,y.P0)(l,o,e),s=(0,z.Q5)({name:e,brief:j.purpose||e,template:l,sourceMode:n,rules:q,agents:r,toolExamples:await bi(c.path),docOverrides:[]}),t=[],u=new Set(s.map(a=>a.path)),v=await bS(c.path);for(let a of s){let b=k().join(c.path,a.path);try{let c=await (0,g.readFile)(b,"utf8");c!==a.baseContent&&t.push({path:a.path,content:c})}catch{continue}}for(let a of v){if(u.has(a))continue;let b=k().join(c.path,a);try{let c=await (0,g.readFile)(b,"utf8");t.push({path:a,content:c})}catch{continue}}return{workspaceId:c.id,workspacePath:c.path,name:e,directory:c.path,template:l,sourceMode:n,teamPreset:o,modelProfile:p,modelId:c.modelIds[0]&&"unassigned"!==c.modelIds[0]?c.modelIds[0]:void 0,rules:q,docOverrides:t,agents:r,brief:j.purpose||e}}function bR(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:cm(a.emoji)??null,theme:cm(a.theme)??null,skillId:cm(a.skillId)??null,modelId:cm(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:cm(a.heartbeat.every)??null}:null}),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 bS(a){let b=new Set;for(let c of(await (0,g.readdir)(a,{withFileTypes:!0})))c.isFile()&&bU(c.name)&&b.add(c.name);for(let c of["docs","memory"]){let d=k().join(a,c);if(await b$(d,"directory"))for(let a of(await bT(d,c)))b.add(a)}let c=k().join(a,"deliverables","README.md");return await b$(c,"file")&&b.add("deliverables/README.md"),Array.from(b).sort((a,b)=>a.localeCompare(b))}async function bT(a,b){let c=[];for(let d of(await (0,g.readdir)(a,{withFileTypes:!0}))){if(d.name.startsWith("."))continue;let e=k().join(b,d.name),f=k().join(a,d.name);if(d.isDirectory()){c.push(...await bT(f,e));continue}d.isFile()&&bU(d.name)&&c.push(e)}return c}function bU(a){return a.toLowerCase().endsWith(".md")}async function bV(a,b){return Promise.all(b.map(async b=>({id:b.id,label:b.label,present:await b$(k().join(a,b.relativePath),b.kind)})))}async function bW(a){let b=k().join(a,"skills");try{let a=await (0,g.readdir)(b,{withFileTypes:!0});return(await Promise.all(a.filter(a=>a.isDirectory()).map(async a=>{let c=k().join(b,a.name,"SKILL.md");return await b$(c,"file")?a.name:null}))).filter(a=>"string"==typeof a&&!bv(a)).sort((a,b)=>a.localeCompare(b))}catch{return[]}}async function bX(a){let b=k().join(a,".openclaw","project.json");try{var c,d,e,f;let a=await (0,g.readFile)(b,"utf8"),h=JSON.parse(a),i=b_(h)?h:{},j=Array.isArray(i.agents)?i.agents.map(a=>b0(a)).filter(a=>!!a):[],k=function(a){if(!b_(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??y.eY.generateStarterDocs,generateMemory:d??y.eY.generateMemory,kickoffMission:e??y.eY.kickoffMission}}(i.rules);return{name:"string"==typeof i.name?i.name:null,directory:"string"==typeof i.directory?i.directory:null,template:(c=i.template,"software"===c||"frontend"===c||"backend"===c||"research"===c||"content"===c)?i.template:null,sourceMode:(d=i.sourceMode,"empty"===d||"clone"===d||"existing"===d)?i.sourceMode:null,agentTemplate:"string"==typeof i.agentTemplate?i.agentTemplate:null,teamPreset:(e=i.teamPreset,"solo"===e||"core"===e||"custom"===e)?i.teamPreset:null,modelProfile:(f=i.modelProfile,"balanced"===f||"fast"===f||"quality"===f)?i.modelProfile:null,rules:k,hidden:!0===i.hidden,systemTag:"string"==typeof i.systemTag?i.systemTag:null,agents:j}}catch{return{name:null,directory:null,template:null,sourceMode:null,agentTemplate:null,teamPreset:null,modelProfile:null,rules:null,hidden:!1,systemTag:null,agents:[]}}}async function bY(a,b){let c=k().join(a,".openclaw","project.json"),d={},e=null;try{let a=await (0,g.readFile)(c,"utf8"),f=JSON.parse(a);d=b_(f)?f:{},Array.isArray(d.agents)&&(e=d.agents.map(a=>b0(a)).filter(a=>!!a).find(a=>a.id===b.id)??null)}catch{d={}}let f={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,modelId:b.modelId??e?.modelId??null,policy:b.policy},h=Array.isArray(d.agents)?d.agents.filter(a=>b_(a)&&"string"==typeof a.id&&a.id!==b.id):[];h.push(f),d.version="number"==typeof d.version?d.version:1,d.slug="string"==typeof d.slug?d.slug:cn(k().basename(a)),d.name="string"==typeof d.name?d.name:k().basename(a),d.updatedAt=new Date().toISOString(),d.agents=h,await bh(c,`${JSON.stringify(d,null,2)}
99
- `)}async function bZ(a,b){let c=k().join(a,".openclaw","project.json"),d={};try{let a=await (0,g.readFile)(c,"utf8"),b=JSON.parse(a);d=b_(b)?b:{}}catch{return}if(!Array.isArray(d.agents))return;let e=d.agents.map(a=>b0(a)).filter(a=>!!a),f=e.filter(a=>a.id!==b);f.length!==e.length&&(f.length>0&&!f.some(a=>a.isPrimary)&&(f[0]={...f[0],isPrimary:!0}),d.updatedAt=new Date().toISOString(),d.agents=f,await bh(c,`${JSON.stringify(d,null,2)}
100
- `))}async function b$(a,b){try{let c=await (0,g.stat)(a);return"directory"===b?c.isDirectory():c.isFile()}catch{return!1}}function b_(a){return"object"==typeof a&&null!==a}function b0(a){var b;return b_(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,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:b_(b=a.policy)&&(0,m.Pj)(b.preset)&&(0,m.Ew)(b.missingToolBehavior)&&(0,m.hR)(b.installScope)&&(0,m.c_)(b.fileAccess)&&(0,m.go)(b.networkAccess)?{preset:b.preset,missingToolBehavior:b.missingToolBehavior,installScope:b.installScope,fileAccess:b.fileAccess,networkAccess:b.networkAccess}:null}:null}function b1(a,b,c){let d=cn(c),e=`${b}-`;return a.find(a=>a.id===bq(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 b2(a,b){if(!a)return null;let c=a.findIndex(a=>b4(a)===b4(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(b5(c)),d.length>=2))break}return d.length>0?d.join(" "):null}function b3(a,b){if(!a)return[];let c=a.findIndex(a=>b4(a)===b4(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(b5(c.replace(/^[-*]\s+/,"")));continue}if(d.length>0)break}return d}function b4(a){return a.replace(/^#+\s+/,"").trim().toLowerCase()}function b5(a){return a.replace(/[`*_>#-]/g,"").replace(/\s+/g," ").trim()}function b6(a){return Array.from(new Set(a.filter(Boolean)))}function b7(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 L.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(b8).slice(0,8))}(Array.from(b.values()));return L=new Map(d.filter(a=>!ap(a)).map(a=>[a.id,a])),d.sort(b8)}function b8(a,b){return(b.updatedAt??0)-(a.updatedAt??0)}function b9(a){return!1!==a.available&&!a.missing}function ca(a){let b=a.trim().toLowerCase();return"openrouter"===b?"OpenRouter":"openai-codex"===b?"OpenAI Codex":"openai"===b?"OpenAI":"anthropic"===b?"Anthropic":"ollama"===b?"Ollama":a.split("-").map(a=>a?a[0].toUpperCase()+a.slice(1):a).join(" ")}function cb(a){return a||k().join(i().homedir(),"Documents","Shared","projects")}async function cc(a,b){if(a!==b)try{throw await (0,g.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 cd(a,b,c){let d=cm(c);if(d)return k().isAbsolute(d)?d:k().join(k().dirname(a),d);let e=cm(b);if(!e)return a;let f=cn(e);if(!f)throw Error("Workspace name is required.");return k().join(k().dirname(a),f)}function ce(a,b){if(!a)return;let c=`:${b}:`,d=a.indexOf(c);if(-1!==d)return a.slice(d+c.length).split(":")[0]}function cf(a){return a?a.split(/[-_]/g).filter(Boolean).map(a=>a[0].toUpperCase()+a.slice(1)).join(" "):"OpenClaw"}function cg(a){return Array.from(new Set(a))}function ch(a){return!!a}function ci(a){return String(a).padStart(2,"0")}function cj(a){return a.split(k().sep).join("/")}function ck(a,b){let c=cl(a),d=cl(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 cl(a){return a.trim().replace(/^v/i,"").split(/[^0-9a-zA-Z]+/).filter(Boolean).map(a=>/^\d+$/.test(a)?Number(a):a.toLowerCase())}function cm(a){return a?.trim()||void 0}function cn(a){return a.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function co(a){return(0,e.createHash)("sha1").update(a).digest("hex").slice(0,10)}},4853:(a,b,c)=>{"use strict";c.d(b,{Iy:()=>j,Q5:()=>h,nt:()=>g,uZ:()=>i});var d=c(3628);let e={software:"Software project",frontend:"Frontend app",backend:"Backend/API",research:"Research",content:"Content/Growth"},f=["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 g(a,b){return k(a,b).map(a=>a.path)}function h(a){let b=k(a.template,a.rules),c=new Map(j(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 i(a){let b=h(a).map(a=>({...a,generated:!0})),c=new Set(b.map(a=>a.path));return[...b,...j(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 j(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 k(a,b){let c=[{path:"AGENTS.md",title:"AGENTS.md",description:"Shared operating instructions for all agents.",category:"core",render:l},{path:"SOUL.md",title:"SOUL.md",description:"Purpose, operating style, and active focus.",category:"core",render:({template:a,brief:b})=>{var c,d;return c=a,d=b,`# SOUL
104
+ `),j}async function bJ(a){let b=k().join(a,".openclaw","tools","telegram-delegate-agent.mjs");await bs(b,`${String.raw`#!/usr/bin/env node
105
+ import { execFile } from "node:child_process";
106
+ import { promisify } from "node:util";
107
+
108
+ const execFileAsync = promisify(execFile);
109
+
110
+ function parseArgs(argv) {
111
+ const options = {
112
+ agentId: "",
113
+ message: "",
114
+ thinking: "low",
115
+ json: false,
116
+ stdin: false
117
+ };
118
+
119
+ for (let index = 0; index < argv.length; index += 1) {
120
+ const arg = argv[index];
121
+
122
+ if (arg === "--agent") {
123
+ options.agentId = argv[index + 1] ?? "";
124
+ index += 1;
125
+ continue;
126
+ }
127
+
128
+ if (arg === "--message") {
129
+ options.message = argv[index + 1] ?? "";
130
+ index += 1;
131
+ continue;
132
+ }
133
+
134
+ if (arg === "--thinking") {
135
+ options.thinking = argv[index + 1] ?? "low";
136
+ index += 1;
137
+ continue;
138
+ }
139
+
140
+ if (arg === "--json") {
141
+ options.json = true;
142
+ continue;
143
+ }
144
+
145
+ if (arg === "--stdin") {
146
+ options.stdin = true;
147
+ continue;
148
+ }
149
+ }
150
+
151
+ return options;
152
+ }
153
+
154
+ function usage() {
155
+ process.stderr.write(
156
+ "Usage: node .openclaw/tools/telegram-delegate-agent.mjs --agent <id> --message <text> [--thinking low|medium|high] [--json]\n"
157
+ );
158
+ }
159
+
160
+ function extractText(payload) {
161
+ if (!payload || typeof payload !== "object") {
162
+ return "";
163
+ }
164
+
165
+ if (typeof payload.summary === "string" && payload.summary.trim()) {
166
+ return payload.summary.trim();
167
+ }
168
+
169
+ if (Array.isArray(payload.payloads)) {
170
+ for (const entry of payload.payloads) {
171
+ if (entry && typeof entry === "object") {
172
+ if (typeof entry.text === "string" && entry.text.trim()) {
173
+ return entry.text.trim();
174
+ }
175
+
176
+ if (typeof entry.content === "string" && entry.content.trim()) {
177
+ return entry.content.trim();
178
+ }
179
+ }
180
+ }
181
+ }
182
+
183
+ if (payload.result && typeof payload.result === "object") {
184
+ return extractText(payload.result);
185
+ }
186
+
187
+ return "";
188
+ }
189
+
190
+ async function readStdin() {
191
+ const chunks = [];
192
+ for await (const chunk of process.stdin) {
193
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)));
194
+ }
195
+ return Buffer.concat(chunks).toString("utf8").trim();
196
+ }
197
+
198
+ async function main() {
199
+ const options = parseArgs(process.argv.slice(2));
200
+ if (options.stdin) {
201
+ options.message = await readStdin();
202
+ }
203
+
204
+ if (!options.agentId || !options.message.trim()) {
205
+ usage();
206
+ process.exit(1);
207
+ }
208
+
209
+ const args = [
210
+ "agent",
211
+ "--agent",
212
+ options.agentId,
213
+ "--message",
214
+ options.message.trim(),
215
+ "--thinking",
216
+ options.thinking,
217
+ "--json"
218
+ ];
219
+
220
+ try {
221
+ const { stdout } = await execFileAsync("openclaw", args, {
222
+ cwd: process.cwd(),
223
+ maxBuffer: 4 * 1024 * 1024
224
+ });
225
+ const parsed = JSON.parse(stdout);
226
+
227
+ if (options.json) {
228
+ process.stdout.write(JSON.stringify(parsed, null, 2) + "\n");
229
+ return;
230
+ }
231
+
232
+ const text = extractText(parsed);
233
+ process.stdout.write((text || JSON.stringify(parsed, null, 2)) + "\n");
234
+ } catch (error) {
235
+ const message =
236
+ error && typeof error === "object" && "stderr" in error && typeof error.stderr === "string"
237
+ ? error.stderr.trim()
238
+ : error instanceof Error
239
+ ? error.message
240
+ : "Telegram delegation failed.";
241
+ process.stderr.write(String(message) + "\n");
242
+ process.exit(1);
243
+ }
244
+ }
245
+
246
+ await main();
247
+ `}
248
+ `)}function bK(a){if(!a)return"no capability snapshot";let b=[(0,m._P)(a.policy.preset)],c=a.profile.purpose?.trim();c&&b.push(c);let d=cQ(a.skills).slice(0,2);d.length>0&&b.push(`skills: ${d.join(", ")}`);let e=cQ(a.tools).slice(0,2);return e.length>0&&b.push(`tools: ${e.join(", ")}`),b.join(" \xb7 ")}async function bL(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 cb(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:w(a).localeCompare(w(c))}).map(a=>{let c=e.get(a.id);return{agentId:a.id,name:w(a),role:c?.role?.trim()||(0,m._P)(a.policy.preset),isPrimary:c?.isPrimary??!1,isCurrent:a.id===b}});return f.length>0?{members:f}:null}async function bM(a,b,c,d){let e=await bN(d),f=e.findIndex(b=>b.id===a),g=f>=0?{...e[f]}:{id:a,workspace:b};return g.workspace=b,c.name&&(g.name=c.name),"string"==typeof c.model?g.model=c.model:delete g.model,c.heartbeat?.every?g.heartbeat={every:c.heartbeat.every}:null===c.heartbeat&&delete g.heartbeat,Array.isArray(c.skills)&&c.skills.length>0?g.skills=cQ(c.skills):Array.isArray(c.skills)&&delete g.skills,c.tools?g.tools=c.tools:null===c.tools&&delete g.tools,f>=0?e[f]=g:e.push(g),await bO(e),g}async function bN(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=w(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=cQ(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 bO(a){await (0,r.zB)(["config","set","--strict-json","agents.list",JSON.stringify(a)])}async function bP(a,b,c,d){var e;let f,g=c4(d)??bE(b,a),h=k().join(g,"IDENTITY.md"),i=(e={name:c4(c.name)??a,emoji:c4(c.emoji),avatar:c4(c.avatar)},f=c4(e.avatar),`# IDENTITY.md - Who Am I?
249
+
250
+ - **Name:** ${e.name}
251
+ - **Creature:** OpenClaw agent
252
+ - **Vibe:** pragmatic, concise, workspace-grounded
253
+ - **Emoji:** ${e.emoji??""}
254
+ - **Avatar:** ${f??""}
255
+
256
+ ---
257
+
258
+ This identity file lives with the agent state so each agent can keep its own identity.
259
+ `);await bs(h,i);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,r.zB)(j)}async function bQ(a){let b=c4(a);if(!b)return{name:null,emoji:null,avatar:null};let c=k().join(b,"IDENTITY.md");try{let a=(await (0,g.readFile)(c,"utf8")).split(/\r?\n/),b=b=>{let c=a.find(a=>RegExp(`^-\\s+\\*\\*${b}:\\*\\*\\s*(.*)$`,"i").test(a.trim())),d=c?.match(RegExp(`^-\\s+\\*\\*${b}:\\*\\*\\s*(.*)$`,"i"))?.[1];return c4(d?cP(d):null)??null};return{name:b("Name"),emoji:b("Emoji"),avatar:b("Avatar")}}catch{return{name:null,emoji:null,avatar:null}}}async function bR(a,b,c){for(let d of[k().join(i().homedir(),".openclaw","agents",a,"sessions",`${b}.jsonl`),c?k().join(c,".openclaw","agents",a,"sessions",`${b}.jsonl`):null].filter(Boolean))try{return await (0,g.access)(d),d}catch{continue}return null}function bS(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 bT(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 bU(a){return"number"==typeof a&&Number.isFinite(a)?new Date(a).toISOString():new Date().toISOString()}function bV(a,b,c){let d=bX(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=>v(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 bW(a,c)}let e=d.at(-1);return e?bW(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 bW(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 bX(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 h=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),i=c.message.errorMessage??null,j=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 b_((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,h,i);if(!h&&!i&&!("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:h||i||"",toolName:"toolResult"===d?c.message.toolName?.trim()||b0(h):void 0,stopReason:"assistant"===d?c.message.stopReason??null:null,errorMessage:i,isWarning:!!j,isError:!!i||!0===c.message.isError||"error"===c.message.stopReason||"aborted"===c.message.stopReason};if("user"===d){g&&e.push(bY(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=k().isAbsolute(c)?k().normalize(c):b?k().resolve(b,c):null;if(!d)return null;let e=b&&d.startsWith(`${k().resolve(b)}${k().sep}`)?k().relative(k().resolve(b),d)||k().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||=i,j&&!g.warnings.includes(j)&&g.warnings.push(j),"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()||b0(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(bY(g)),e}function bY(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=c$(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:b$(a.createdFiles),warnings:i,warningSummary:i[0]??null,toolNames:cQ([...a.pendingToolNames])}}function bZ(a){return cQ(a.flatMap(a=>a.toolNames))}function b$(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 b_(a,b){let c=a.replace(/\s+/g," ").trim();return c.length<=b?c:`${c.slice(0,Math.max(b-1,1)).trimEnd()}…`}function b0(a){let b=a.match(/"tool(Name)?":\s*"([^"]+)"/i);return b?.[2]}function b1(a){let b=(0,e.createHash)("sha1").update(a).digest("hex").slice(0,8);return`workspace:${b}`}async function b2(a,b){var c,d;let e,f=[a,c4(b.agentDir)].filter(a=>!!a),h=(0,n.Q4)(b.template,b.rules??A.eY),i=[...new Set(["AGENTS.md","SOUL.md","IDENTITY.md","TOOLS.md","HEARTBEAT.md",...h.resources.map(a=>a.relativePath)])],j=[],l=new Map;for(let b of i)for(let c of f){let d=k().join(c,b);try{await (0,g.access)(d);let c=(await (0,g.readFile)(d,"utf8")).trim();if(!c)continue;j.push(function(a,b){let c=k().resolve(a),d=k().resolve(b);return d===c||d.startsWith(`${c}${k().sep}`)?k().relative(c,d)||k().basename(d):d}(a,d)),l.set(b,c.split(/\r?\n/))}catch{continue}}let m=((e=cM((c=l).get("docs/brief.md"),"Objective")??cM(c.get("memory/blueprint.md"),"Outcome")??cM(c.get("MEMORY.md"),"Current brief")??cM(c.get("SOUL.md"),"My Purpose")??cM(c.get("IDENTITY.md"),"Role")??cM(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}),o=(d=l,cQ([{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=>cN(d.get(a.file),a.heading)))).slice(0,8),p=cQ([...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=>cP(a)).filter(Boolean)}(l.get("IDENTITY.md"),"Vibe"),...cN(l.get("SOUL.md"),"My Quirks"),...cN(l.get("SOUL.md"),"How I Operate")]).slice(0,6)||[],q=cL(l.get("AGENTS.md"))??cL(l.get("deliverables/README.md"))??(b.configuredTools.includes("fs.workspaceOnly")?"Prefer workspace-grounded output tied to real project files and artifacts.":null);return{purpose:m,operatingInstructions:o.length>0?o: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:p,outputPreference:q,sourceFiles:j}}async function b3(a,b){let c=await cb(a),d=(0,n.Q4)(c.template??null,c.rules??A.eY),e=new Set([...n.JH,...n.yA]),[f,g,h,i,j,k]=await Promise.all([b9(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"}]),b9(a,[{id:"memory-md",label:"MEMORY.md",relativePath:"MEMORY.md",kind:"file"}]),b9(a,d.resources.filter(a=>!e.has(a.relativePath))),b9(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"}]),b9(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"}]),ca(a)]),l=cQ(b.flatMap(a=>a.tools)),m=cQ([...k,...b.flatMap(a=>a.skills)]),o=b.filter(a=>a.tools.includes("fs.workspaceOnly")).length;return{bootstrap:{template:c.template,sourceMode:c.sourceMode,agentTemplate:c.agentTemplate,coreFiles:f,optionalFiles:g,contextFiles:h,folders:i,projectShell:j,localSkillIds:k},capabilities:{skills:m,tools:l,workspaceOnlyAgentCount:o}}}async function b4(a){let b=await P({force:!0,includeHidden:!0}),c=b.workspaces.find(b=>b.id===a);if(!c)throw Error("Workspace was not found.");let d=await cb(c.path),e=d.name??c.name,f=b.agents.filter(a=>a.workspaceId===c.id),h=cQ(f.flatMap(a=>a.skills)),i=cQ(f.flatMap(a=>a.tools)),j=d.template??c.bootstrap.template??"software",l=d.sourceMode??c.bootstrap.sourceMode??"empty",o=d.teamPreset??(f.length<=1?"solo":"core"),p=d.modelProfile??"balanced",q=d.rules??A.eY,r=await b2(c.path,{agentId:f[0]?.id??c.id,agentName:f[0]?.name??e,configuredSkills:h,configuredTools:i,template:j,rules:q}),s=d.agents.length>0?d.agents.map(a=>{let b=cK(f,c.slug,a.id),d=(0,m.g0)(a.policy?.preset??b?.policy.preset??m.iN,a.policy??b?.policy);return{id:a.id,role:a.role??(0,m._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,A.P0)(j,o,e),t=(0,n.Q5)({name:e,brief:r.purpose||e,template:j,sourceMode:l,rules:q,agents:s,toolExamples:await bt(c.path),docOverrides:[],contextSources:d.contextSources??[]}),u=[],v=new Set(t.map(a=>a.path)),w=await b6(c.path);for(let a of t){let b=k().join(c.path,a.path);try{let c=await (0,g.readFile)(b,"utf8");c!==a.baseContent&&u.push({path:a.path,content:c})}catch{continue}}for(let a of w){if(v.has(a))continue;let b=k().join(c.path,a);try{let c=await (0,g.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:l,teamPreset:o,modelProfile:p,modelId:c.modelIds[0]&&"unassigned"!==c.modelIds[0]?c.modelIds[0]:void 0,rules:q,docOverrides:u,agents:s,brief:r.purpose||e,contextSources:d.contextSources??[]}}function b5(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:c4(a.emoji)??null,theme:c4(a.theme)??null,skillId:c4(a.skillId)??null,modelId:c4(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:c4(a.heartbeat.every)??null}:null,channelIds:cQ(a.channelIds??[]).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 b6(a){let b=new Set;for(let c of(await (0,g.readdir)(a,{withFileTypes:!0})))c.isFile()&&b8(c.name)&&b.add(c.name);for(let c of["docs","memory"]){let d=k().join(a,c);if(await cq(d,"directory"))for(let a of(await b7(d,c)))b.add(a)}let c=k().join(a,"deliverables","README.md");return await cq(c,"file")&&b.add("deliverables/README.md"),Array.from(b).sort((a,b)=>a.localeCompare(b))}async function b7(a,b){let c=[];for(let d of(await (0,g.readdir)(a,{withFileTypes:!0}))){if(d.name.startsWith("."))continue;let e=k().join(b,d.name),f=k().join(a,d.name);if(d.isDirectory()){c.push(...await b7(f,e));continue}d.isFile()&&b8(d.name)&&c.push(e)}return c}function b8(a){return a.toLowerCase().endsWith(".md")}async function b9(a,b){return Promise.all(b.map(async b=>({id:b.id,label:b.label,present:await cq(k().join(a,b.relativePath),b.kind)})))}async function ca(a){let b=k().join(a,"skills");try{let a=await (0,g.readdir)(b,{withFileTypes:!0});return(await Promise.all(a.filter(a=>a.isDirectory()).map(async a=>{let c=k().join(b,a.name,"SKILL.md");return await cq(c,"file")?a.name:null}))).filter(a=>"string"==typeof a&&!bG(a)).sort((a,b)=>a.localeCompare(b))}catch{return[]}}async function cb(a){let b=k().join(a,".openclaw","project.json");try{var c,d,e,f,h;let a=await (0,g.readFile)(b,"utf8"),i=JSON.parse(a),j=cr(i)?i:{},k=Array.isArray(j.agents)?j.agents.map(a=>cs(a)).filter(a=>!!a):[],l=Array.isArray(j.channels)?j.channels.map(a=>{var b;return b=a,ct(b)}).filter(a=>!!a):[],m=function(a){if(!cr(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??A.eY.generateStarterDocs,generateMemory:d??A.eY.generateMemory,kickoffMission:e??A.eY.kickoffMission}}(j.rules);return{name:"string"==typeof j.name?j.name:null,directory:"string"==typeof j.directory?j.directory:null,template:(c=j.template,"software"===c||"frontend"===c||"backend"===c||"research"===c||"content"===c)?j.template:null,sourceMode:(d=j.sourceMode,"empty"===d||"clone"===d||"existing"===d)?j.sourceMode:null,agentTemplate:"string"==typeof j.agentTemplate?j.agentTemplate:null,teamPreset:(e=j.teamPreset,"solo"===e||"core"===e||"custom"===e)?j.teamPreset:null,modelProfile:(f=j.modelProfile,"balanced"===f||"fast"===f||"quality"===f)?j.modelProfile:null,rules:m,hidden:!0===j.hidden,systemTag:"string"==typeof j.systemTag?j.systemTag:null,contextSources:(h=j.contextSources,Array.isArray(h)?h.flatMap(a=>{if(!cr(a))return[];let b=bm(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 bl([{id:"string"==typeof a.id&&a.id.trim()?a.id.trim():`${b}-${c5(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}])}):[]),agents:k,channels:l}}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:[]}}}async function cc(){try{let a=await (0,g.readFile)(F,"utf8"),b=JSON.parse(a),c=cr(b)?b:{},d=Array.isArray(c.channels)?c.channels.map(a=>ct(a)).filter(a=>!!a):[],e=cv({version:1,channels:d});return await ci(e)}catch{return cv({version:1,channels:[]})}}async function cd(){try{let a=await (0,r.VP)(["config","get","channels","--json"]),b=Object.entries(a).flatMap(([a,b])=>{let c=cr(b?.accounts)?b.accounts:{};return Object.entries(c).flatMap(([b,c])=>{if(!cu(a))return[];let d=cr(c)?c:{};return[{id:b,type:a,name:"string"==typeof d.name?d.name:b,enabled:!1!==d.enabled}]})});return function(a,b){let c=cr(b.telegram)?b.telegram:null,d=cr(c?.accounts)?c.accounts:{},e=c4(c?.defaultAccount),f=new Map,g=[];for(let b of a){if("telegram"!==b.type){g.push(b);continue}let a=cr(d[b.id])?d[b.id]:null,c=c4(a?.botToken),h=c?.split(":",1)[0]?.trim();if(!h){f.has(b.id)||f.set(b.id,b);continue}let i=f.get(h);if(!i){f.set(h,b);continue}cg(b.id,e)>cg(i.id,e)&&f.set(h,b)}return[...g,...Array.from(f.values())]}(b,a)}catch{return[]}}async function ce(){try{let a=await (0,g.readFile)(k().join(I,"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=c4(a.meta?.accountId);b&&d.set(b,{id:b,type:"telegram",name:c4(a.meta?.username)??c4(a.meta?.firstName)??b,enabled:!0})}return Array.from(d.values())}catch{return[]}}async function cf(){try{let a=k().join(I,"telegram"),b=await (0,g.readdir)(a),c=await Promise.all(b.filter(a=>a.startsWith("update-offset-")&&a.endsWith(".json")).map(async b=>{try{let c=await (0,g.readFile)(k().join(a,b),"utf8"),d=JSON.parse(c),e=c4(d?.botId),f=b.slice(14,-5);if(!e||!f)return null;return[f,e]}catch{return null}}));return new Map(c.filter(a=>!!a))}catch{return new Map}}function cg(a,b){return b&&a===b?3:"default"!==a?2:1}async function ch(a,b){let c=c4(a.split(":",1)[0]);if(!c)return null;let d=await cf();return b.find(a=>d.get(a.id)===c)??null}async function ci(a){let b=(await cd()).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?cv({version:1,channels:f}):a}async function cj(a){let b=c5(a.trim())||"telegram",c=`telegram-${b}`,d=new Set([...(await cc()).channels.filter(a=>"telegram"===a.type).map(a=>a.id),...(await cd()).filter(a=>"telegram"===a.type).map(a=>a.id)]);if(!d.has(c))return c;let e=2;for(;d.has(`${c}-${e}`);)e+=1;return`${c}-${e}`}async function ck(a){await bs(F,`${JSON.stringify(a,null,2)}
260
+ `)}async function cl(){return cc()}async function cm(a){let b=c4(a.accountId)??await cj(a.name),c=new Set((await cd()).filter(a=>"telegram"===a.type).map(a=>a.id));await (0,r.zB)(["channels","add","--channel","telegram","--account",b,"--token",a.token,"--name",a.name],{timeoutMs:6e4});let d={id:b,type:"telegram",name:a.name.trim()||b,enabled:!0},e=(await cd()).filter(a=>"telegram"===a.type).find(a=>a.id===b);if(e)return{...e,name:a.name.trim()||e.name};let f=Date.now()+8e3,g=null;for(;Date.now()<f;){let d=(await cd()).filter(a=>"telegram"===a.type);if(g=d.find(a=>a.id===b)??d.find(b=>!c.has(b.id)&&b.name===a.name)??d.find(a=>!c.has(a.id))??d.find(b=>b.name===a.name)??null)break;let e=await ce();if(g=e.find(b=>!c.has(b.id)&&b.name===a.name)??e.find(a=>!c.has(a.id))??e.find(b=>b.name===a.name)??null)break;await new Promise(a=>setTimeout(a,750))}if(!g){let b=await ch(a.token,(await cd()).filter(a=>"telegram"===a.type));g=b||d}return{...g,name:a.name.trim()||g.name}}async function cn(a,b){let c=k().join(a,".openclaw","project.json"),d={},e=null;try{let a=await (0,g.readFile)(c,"utf8"),f=JSON.parse(a);d=cr(f)?f:{},Array.isArray(d.agents)&&(e=d.agents.map(a=>cs(a)).filter(a=>!!a).find(a=>a.id===b.id)??null)}catch{d={}}let f={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)?cQ(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=>cr(a)&&"string"==typeof a.id&&a.id!==b.id):[];h.push(f),d.version="number"==typeof d.version?d.version:1,d.slug="string"==typeof d.slug?d.slug:c5(k().basename(a)),d.name="string"==typeof d.name?d.name:k().basename(a),d.updatedAt=new Date().toISOString(),d.agents=h,await bs(c,`${JSON.stringify(d,null,2)}
261
+ `)}async function co(a,b){let c=k().join(a,".openclaw","project.json"),d={};try{let a=await (0,g.readFile)(c,"utf8"),b=JSON.parse(a);d=cr(b)?b:{}}catch{return}if(!Array.isArray(d.agents))return;let e=d.agents.map(a=>cs(a)).filter(a=>!!a),f=e.filter(a=>a.id!==b);f.length!==e.length&&(f.length>0&&!f.some(a=>a.isPrimary)&&(f[0]={...f[0],isPrimary:!0}),d.updatedAt=new Date().toISOString(),d.agents=f,await bs(c,`${JSON.stringify(d,null,2)}
262
+ `))}async function cp(a,b){let c=k().join(a,".openclaw","project.json"),d={};try{let a=await (0,g.readFile)(c,"utf8"),b=JSON.parse(a);d=cr(b)?b:{}}catch{return}if(!Array.isArray(d.agents))return;let e=!1,f=d.agents.map(a=>{if(!cr(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:(e=!0,{...a,channelIds:d})});e&&(d.updatedAt=new Date().toISOString(),d.agents=f,await bs(c,`${JSON.stringify(d,null,2)}
263
+ `))}async function cq(a,b){try{let c=await (0,g.stat)(a);return"directory"===b?c.isDirectory():c.isFile()}catch{return!1}}function cr(a){return"object"==typeof a&&null!==a}function cs(a){var b;return cr(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)?cQ(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:cr(b=a.policy)&&(0,m.Pj)(b.preset)&&(0,m.Ew)(b.missingToolBehavior)&&(0,m.hR)(b.installScope)&&(0,m.c_)(b.fileAccess)&&(0,m.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 ct(a){return cr(a)&&"string"==typeof a.id?{id:a.id,type:cu(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 cr(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 cr(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 cu(a){return"internal"===a||"slack"===a||"telegram"===a||"discord"===a||"googlechat"===a}function cv(a){let b=a.channels.map(a=>({id:a.id.trim(),type:cu(a.type)?a.type:"internal",name:a.name.trim()||a.id.trim(),primaryAgentId:c4(a.primaryAgentId)??null,workspaces:a.workspaces.map(a=>({workspaceId:a.workspaceId.trim(),workspacePath:a.workspacePath.trim(),agentIds:cQ(a.agentIds.map(a=>a.trim()).filter(Boolean)),groupAssignments:a.groupAssignments.map(a=>({chatId:a.chatId.trim(),agentId:c4(a.agentId)??null,title:c4(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:cQ([...a.agentIds,...b.agentIds]),groupAssignments:cw([...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 cw(a){let b=new Map;for(let c of a)c.chatId&&b.set(c.chatId,c);return Array.from(b.values())}function cx(a){return cv({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 cy(a){await ck(cv(a))}async function cz(){let a=await (0,r.VP)(["channels","logs","--channel","telegram","--json","--lines","200"]).catch(()=>null);if(!a?.lines?.length)return await cA();let b=new Map,c=a=>{let c=b.get(a.chatId);c?b.set(a.chatId,{chatId:a.chatId,title:a.title??c.title,lastSeen:function(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}(c.lastSeen,a.lastSeen)}):b.set(a.chatId,a)};for(let b of a.lines){let a="string"==typeof b?.time?b.time:null;for(let d of cG(b,a))c(d);if("string"==typeof b?.raw)try{let d=JSON.parse(b.raw);for(let b of cG(d,a))c(b)}catch{for(let d of cH(b.raw,a))c(d)}if("string"==typeof b?.message)for(let d of cH(b.message,a))c(d)}for(let a of(await cA()))b.has(a.chatId)||b.set(a.chatId,a);return Array.from(b.values()).sort((a,b)=>{let c=a.title??a.chatId,d=b.title??b.chatId;return c.localeCompare(d)})}async function cA(){try{let a=await (0,r.VP)(["config","get","channels.telegram.groups","--json"]);return Object.keys(a??{}).map(a=>({chatId:a,title:null,lastSeen:null})).sort((a,b)=>a.chatId.localeCompare(b.chatId))}catch{return[]}}async function cB(a,b={}){let c=await (0,r.VP)(["config","get","bindings","--json"]).catch(()=>[]),d=a.channels.filter(a=>"telegram"===a.type),e=new Set(d.map(a=>a.id)),f=new Set(b.removedAccountIds??[]),g=new Set(d.flatMap(a=>a.workspaces.flatMap(a=>a.groupAssignments.filter(a=>!1!==a.enabled).map(a=>a.chatId)))),h=new Set(b.removedGroupIds??[]),i=[...c.filter(a=>{if(!cr(a))return!0;let b=cr(a.match)?a.match:null;return!b||"telegram"!==b.channel||!("string"==typeof b.accountId&&(e.has(b.accountId)||f.has(b.accountId))||cr(b.peer)&&"string"==typeof b.peer.id&&(g.has(b.peer.id)||h.has(b.peer.id)))}),...d.filter(a=>!!a.primaryAgentId).map(a=>({agentId:a.primaryAgentId,match:{channel:"telegram",accountId:a.id}})),...d.flatMap(a=>a.workspaces.flatMap(b=>b.groupAssignments.filter(a=>!1!==a.enabled&&a.agentId).map(b=>({agentId:b.agentId,match:{channel:"telegram",accountId:a.id,peer:{kind:"group",id:b.chatId}}}))))];await (0,r.zB)(["config","set","channels.telegram.enabled",d.length>0?"true":"false","--strict-json"]);let j=d.find(a=>!!a.primaryAgentId)?.id??d[0]?.id??null;j?await (0,r.zB)(["config","set","channels.telegram.defaultAccount",JSON.stringify(j),"--strict-json"]):await (0,r.zB)(["config","unset","channels.telegram.defaultAccount"]).catch(()=>{});let k=Object.fromEntries(Array.from(g).map(a=>[a,{requireMention:!0}]));await (0,r.zB)(["config","set","channels.telegram.groups",JSON.stringify(k),"--strict-json"]),await (0,r.zB)(["config","set","bindings",JSON.stringify(i),"--strict-json"])}function cC(a){return cQ(a.channels.filter(a=>"telegram"===a.type).flatMap(a=>[a.primaryAgentId??"",...a.workspaces.flatMap(a=>a.agentIds),...a.workspaces.flatMap(a=>a.groupAssignments.filter(a=>!1!==a.enabled&&a.agentId).map(a=>a.agentId))]))}async function cD(a,b={}){let c=cQ(a);if(0===c.length)return;let d=b.snapshot??await P({force:!0,includeHidden:!0}),e=b.channelRegistry?{...d,channelRegistry:b.channelRegistry}:d;for(let a of c){let c=e.agents.find(b=>b.id===a);if(!c)continue;let d=e.agents.find(a=>a.workspaceId===c.workspaceId&&"setup"===a.policy.preset&&a.id!==c.id)?.id??null,f=await bI({workspacePath:c.workspacePath,agentId:c.id,agentName:c.name,policy:c.policy,setupAgentId:d,snapshot:e,channelRegistry:b.channelRegistry});await bM(c.id,c.workspacePath,{name:c.name,model:c4(c.modelId),heartbeat:c.heartbeat.enabled&&c.heartbeat.every?{every:c.heartbeat.every}:null,skills:[...bH(c.skills),f],tools:c.tools.includes("fs.workspaceOnly")?{fs:{workspaceOnly:!0}}:null},e)}}async function cE(a,b={}){let c=b.snapshot??await P({force:!0,includeHidden:!0}),d=c.agents.filter(b=>b.workspacePath===a).map(a=>a.id);await cD(d,{snapshot:c,channelRegistry:b.channelRegistry})}async function cF(a,b){let c=cQ([...cC(a),...cC(b)]);if(0===c.length)return;let d=await P({force:!0,includeHidden:!0});await cD(c,{snapshot:d,channelRegistry:b})}function cG(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(!cr(f))continue;let g=cI(f.chatId);if(g){let a=c4(f.title)??c4(f.chatTitle)??null;c.set(g,{chatId:g,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 cH(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 cG(d,b))c.set(a.chatId,a);continue}catch{}let e=a.match(/"chatId"\s*:\s*(-?\d+)/),f=cI(e?.[1]??null);if(!f)continue;let g=a.match(/"title"\s*:\s*"([^"]+)"/);c.set(f,{chatId:f,title:g?.[1]??null,lastSeen:b})}return Array.from(c.values())}function cI(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}async function cJ(a,b={}){let c=cx(await cc()),d=cx(c);await a(c),await cy(c),await cB(c,b),await cF(d,c),K=null}function cK(a,b,c){let d=c5(c),e=`${b}-`;return a.find(a=>a.id===bB(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 cL(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?cP(b):null}function cM(a,b){if(!a)return null;let c=a.findIndex(a=>cO(a)===cO(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(cP(c)),d.length>=2))break}return d.length>0?d.join(" "):null}function cN(a,b){if(!a)return[];let c=a.findIndex(a=>cO(a)===cO(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(cP(c.replace(/^[-*]\s+/,"")));continue}if(d.length>0)break}return d}function cO(a){return a.replace(/^#+\s+/,"").trim().toLowerCase()}function cP(a){return a.replace(/[`*_>#-]/g,"").replace(/\s+/g," ").trim()}function cQ(a){return Array.from(new Set(a.filter(Boolean)))}function cR(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 N.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(cS).slice(0,8))}(Array.from(b.values()));return N=new Map(d.filter(a=>!ar(a)).map(a=>[a.id,a])),d.sort(cS)}function cS(a,b){return(b.updatedAt??0)-(a.updatedAt??0)}function cT(a){return!1!==a.available&&!a.missing}function cU(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 cV(a){return a||k().join(i().homedir(),"Documents","Shared","projects")}async function cW(a,b){if(a!==b)try{throw await (0,g.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 cX(a,b,c){let d=c4(c);if(d)return k().isAbsolute(d)?d:k().join(k().dirname(a),d);let e=c4(b);if(!e)return a;let f=c5(e);if(!f)throw Error("Workspace name is required.");return k().join(k().dirname(a),f)}function cY(a,b){if(!a)return;let c=`:${b}:`,d=a.indexOf(c);if(-1!==d)return a.slice(d+c.length).split(":")[0]}function cZ(a){return a?a.split(/[-_]/g).filter(Boolean).map(a=>a[0].toUpperCase()+a.slice(1)).join(" "):"OpenClaw"}function c$(a){return Array.from(new Set(a))}function c_(a){return!!a}function c0(a){return String(a).padStart(2,"0")}function c1(a){return a.split(k().sep).join("/")}function c2(a,b){let c=c3(a),d=c3(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 c3(a){return a.trim().replace(/^v/i,"").split(/[^0-9a-zA-Z]+/).filter(Boolean).map(a=>/^\d+$/.test(a)?Number(a):a.toLowerCase())}function c4(a){return a?.trim()||void 0}function c5(a){return a.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function c6(a){return(0,e.createHash)("sha1").update(a).digest("hex").slice(0,10)}},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
101
264
 
102
265
  ## My Purpose
103
- Help this ${e[c].toLowerCase()} workspace turn intent into real outcomes with pragmatic execution, verification, and durable memory.
266
+ Help this ${g[d].toLowerCase()} workspace turn intent into real outcomes with pragmatic execution, verification, and durable memory.
104
267
 
105
268
  ## How I Operate
106
269
  - Start from the current workspace reality before proposing large moves.
@@ -113,17 +276,17 @@ Help this ${e[c].toLowerCase()} workspace turn intent into real outcomes with pr
113
276
  - Product-aware
114
277
  - Quality-minded
115
278
 
116
- ${d?`## Active Focus
117
- ${d}
118
- `:""}`}},{path:"IDENTITY.md",title:"IDENTITY.md",description:"Workspace identity and vibe.",category:"core",render:({template:a})=>{var b;return b=a,`# IDENTITY
279
+ ${e?`## Active Focus
280
+ ${e}
281
+ `:""}${q(f)}`}},{path:"IDENTITY.md",title:"IDENTITY.md",description:"Workspace identity and vibe.",category:"core",render:({template:a})=>{var b;return b=a,`# IDENTITY
119
282
 
120
283
  ## Role
121
- This workspace hosts a ${e[b].toLowerCase()} team coordinated through OpenClaw.
284
+ This workspace hosts a ${g[b].toLowerCase()} team coordinated through OpenClaw.
122
285
 
123
286
  **Vibe:** pragmatic, concise, quality-minded, workspace-grounded
124
- `}},{path:"TOOLS.md",title:"TOOLS.md",description:"Repository commands and workflow notes.",category:"core",render:({template:a,toolExamples:b})=>{var c,d;return c=a,d=b??f,`# TOOLS
287
+ `}},{path:"TOOLS.md",title:"TOOLS.md",description:"Repository commands and workflow notes.",category:"core",render:({template:a,toolExamples:b})=>{var c,d;return c=a,d=b??h,`# TOOLS
125
288
 
126
- Repository commands and workflow notes for this ${e[c].toLowerCase()} workspace.
289
+ Repository commands and workflow notes for this ${g[c].toLowerCase()} workspace.
127
290
 
128
291
  ## Examples
129
292
  ${d.map(a=>`- ${a}`).join("\n")}
@@ -134,25 +297,26 @@ ${d.map(a=>`- ${a}`).join("\n")}
134
297
  `}},{path:"HEARTBEAT.md",title:"HEARTBEAT.md",description:"Refresh ritual and coherence checks.",category:"core",render:({template:a})=>{var b;return b=a,`# HEARTBEAT
135
298
 
136
299
  - Start each substantial task by refreshing the brief, docs, and current files.
137
- - Keep the ${e[b].toLowerCase()} workspace coherent across code, docs, and memory.
300
+ - Keep the ${g[b].toLowerCase()} workspace coherent across code, docs, and memory.
138
301
  - Prefer explicit handoffs between implementation, review, testing, and knowledge capture.
139
- `}}];return b.generateMemory&&c.push({path:"MEMORY.md",title:"MEMORY.md",description:"Durable project memory.",category:"memory",render:({name:a,template:b,brief:c})=>{var d,f,g;return d=a,f=b,g=c,`# ${d} Memory
302
+ `}}];return b.generateMemory&&c.push({path:"MEMORY.md",title:"MEMORY.md",description:"Durable project memory.",category:"memory",render:({name:a,template:b,brief:c,contextSources:d})=>{var e,f,h,i;return e=a,f=b,h=c,i=d,`# ${e} Memory
140
303
 
141
- Durable project facts for this ${e[f].toLowerCase()} workspace.
304
+ Durable project facts for this ${g[f].toLowerCase()} workspace.
142
305
 
143
306
  ## Current brief
144
- ${g||"No brief captured yet. Fill this in as soon as the project goal is clarified."}
307
+ ${h||"No brief captured yet. Fill this in as soon as the project goal is clarified."}
145
308
 
146
309
  ## Stable facts
147
310
  - Add durable architecture, product, or workflow facts here.
148
311
  - Move longer notes into memory/*.md when they outgrow this file.
149
- `}},{path:"memory/blueprint.md",title:"memory/blueprint.md",description:"Project blueprint and current outcome.",category:"memory",render:({name:a,template:b,brief:c})=>{var d,f,g;return d=a,f=b,g=c,`# ${d} Blueprint
312
+
313
+ ${q(i)}`}},{path:"memory/blueprint.md",title:"memory/blueprint.md",description:"Project blueprint and current outcome.",category:"memory",render:({name:a,template:b,brief:c})=>{var d,e,f;return d=a,e=b,f=c,`# ${d} Blueprint
150
314
 
151
315
  ## Workspace type
152
- ${e[f]}
316
+ ${g[e]}
153
317
 
154
318
  ## Outcome
155
- ${g||"Define the target outcome, user impact, and quality bar for this workspace."}
319
+ ${f||"Define the target outcome, user impact, and quality bar for this workspace."}
156
320
 
157
321
  ## Constraints
158
322
  - Add technical, product, legal, or operational constraints here.
@@ -168,47 +332,49 @@ Use this file for durable decisions that should survive across sessions.
168
332
  - Decision:
169
333
  - Context:
170
334
  - Consequence:
171
- `}),b.generateStarterDocs&&c.push({path:"docs/brief.md",title:"docs/brief.md",description:"Objective, source mode, and success signals.",category:"docs",render:({name:a,template:b,brief:c,sourceMode:d})=>{var f,g,h,i;return f=a,g=b,h=c,i=d,`# ${f} Brief
335
+ `}),b.generateStarterDocs&&c.push({path:"docs/brief.md",title:"docs/brief.md",description:"Objective, source mode, and success signals.",category:"docs",render:({name:a,template:b,brief:c,sourceMode:d,contextSources:e})=>{var f,h,i,j,k;return f=a,h=b,i=c,j=d,k=e,`# ${f} Brief
172
336
 
173
337
  ## Template
174
- ${e[g]}
338
+ ${g[h]}
175
339
 
176
340
  ## Source mode
177
- ${i}
341
+ ${j}
178
342
 
179
343
  ## Objective
180
- ${h||"Clarify the main goal, target user, and success definition for this workspace."}
344
+ ${i||"Clarify the main goal, target user, and success definition for this workspace."}
181
345
 
182
346
  ## Success signals
183
347
  - Define what success looks like in observable terms.
184
348
 
185
349
  ## Open questions
186
350
  - List the unknowns worth resolving first.
187
- `}},{path:"docs/architecture.md",title:"docs/architecture.md",description:"Current system shape and dependencies.",category:"docs",render:({template:a})=>{var b;return b=a,`# Architecture
351
+
352
+ ${q(k)}`}},{path:"docs/architecture.md",title:"docs/architecture.md",description:"Current system shape and dependencies.",category:"docs",render:({template:a,contextSources:b})=>{var c,d;return c=a,d=b,`# Architecture
188
353
 
189
354
  ## Current shape
190
- - Describe the main components, systems, or content lanes in this ${e[b].toLowerCase()} workspace.
355
+ - Describe the main components, systems, or content lanes in this ${g[c].toLowerCase()} workspace.
191
356
 
192
357
  ## Dependencies
193
358
  - List critical external services, repos, data sources, or channels.
194
359
 
195
360
  ## Risks
196
361
  - Capture structural, operational, or delivery risks here.
197
- `}},{path:"deliverables/README.md",title:"deliverables/README.md",description:"Guidance for handoff artifacts.",category:"deliverables",render:()=>`# Deliverables
362
+
363
+ ${q(d)}`}},{path:"deliverables/README.md",title:"deliverables/README.md",description:"Guidance for handoff artifacts.",category:"deliverables",render:()=>`# Deliverables
198
364
 
199
365
  Use this folder for substantial output artifacts that should be easy to hand off or review.
200
366
 
201
367
  - Create one subfolder per task or run, for example \`deliverables/2026-03-07-15-30-00-launch-brief/\`.
202
368
  - Put drafts, reports, docs, and publishable assets for that task inside its run folder.
203
369
  - Keep filenames descriptive and tied to the task or audience.
204
- `}),"frontend"===a&&c.push({path:"docs/ux-notes.md",title:"docs/ux-notes.md",description:"Interaction patterns and UI risks.",category:"docs",render:()=>m("ux")}),"backend"===a&&c.push({path:"docs/service-map.md",title:"docs/service-map.md",description:"Service, queue, and dependency map.",category:"docs",render:()=>m("backend")}),"research"===a&&c.push({path:"docs/research-plan.md",title:"docs/research-plan.md",description:"Question framing and evidence plan.",category:"docs",render:()=>m("research")}),"content"===a&&c.push({path:"docs/content-brief.md",title:"docs/content-brief.md",description:"Audience, channel, and campaign brief.",category:"docs",render:()=>m("content")}),c}function l({name:a,brief:b,template:c,sourceMode:f,rules:g,agents:h=[]}){let i=h.map(a=>`- ${a.role}: ${a.name}${a.skillId?` \xb7 skill ${a.skillId}`:""}${a.policy?` \xb7 ${(0,d._P)(a.policy.preset)}`:""}`);return`# ${a}
370
+ `}),"frontend"===a&&c.push({path:"docs/ux-notes.md",title:"docs/ux-notes.md",description:"Interaction patterns and UI risks.",category:"docs",render:()=>p("ux")}),"backend"===a&&c.push({path:"docs/service-map.md",title:"docs/service-map.md",description:"Service, queue, and dependency map.",category:"docs",render:()=>p("backend")}),"research"===a&&c.push({path:"docs/research-plan.md",title:"docs/research-plan.md",description:"Question framing and evidence plan.",category:"docs",render:()=>p("research")}),"content"===a&&c.push({path:"docs/content-brief.md",title:"docs/content-brief.md",description:"Audience, channel, and campaign brief.",category:"docs",render:()=>p("content")}),c}function o({name:a,brief:b,template:c,sourceMode:e,rules:f,agents:h=[]}){let i=h.map(a=>`- ${a.role}: ${a.name}${a.skillId?` \xb7 skill ${a.skillId}`:""}${a.policy?` \xb7 ${(0,d._P)(a.policy.preset)}`:""}`);return`# ${a}
205
371
 
206
372
  Shared project context for all agents working in this workspace.
207
373
 
208
374
  ## Workspace
209
- - Template: ${e[c]}
210
- - Source mode: ${f}
211
- - Workspace-only access: ${g.workspaceOnly?"enabled":"disabled"}
375
+ - Template: ${g[c]}
376
+ - Source mode: ${e}
377
+ - Workspace-only access: ${f.workspaceOnly?"enabled":"disabled"}
212
378
 
213
379
  ## Team
214
380
  ${i.length>0?i.join("\n"):"- No agents configured yet."}
@@ -233,7 +399,7 @@ ${b||"Clarify the project goal, definition of done, constraints, and success sig
233
399
  - Be concise in chat and write longer output to files when the artifact matters.
234
400
  - Put task-specific deliverables, drafts, reports, and docs inside per-run folders under deliverables/.
235
401
  - Avoid writing final artifacts to the workspace root unless explicitly requested.
236
- `}function m(a){return"ux"===a?`# UX Notes
402
+ `}function p(a){return"ux"===a?`# UX Notes
237
403
 
238
404
  - Track interaction patterns, responsive edge cases, and visual risk areas here.
239
405
  `:"backend"===a?`# Service Map
@@ -245,6 +411,10 @@ ${b||"Clarify the project goal, definition of done, constraints, and success sig
245
411
  `:`# Content Brief
246
412
 
247
413
  - Capture audience, channel, tone, CTA, and distribution assumptions for this content workspace.
248
- `}},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)}},5828:(a,b,c)=>{"use strict";function d(a){var b;return a.diagnostics.installed&&a.diagnostics.rpcOk&&(b=a).diagnostics.runtime.stateWritable&&b.diagnostics.runtime.sessionStoreWritable}function e(a){return d(a)&&a.diagnostics.modelReadiness.ready&&"passed"===a.diagnostics.runtime.smokeTest.status}c.d(b,{Bt:()=>e,iN:()=>d})},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:"Mission Control 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:"Mission Control 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})},8366:(a,b,c)=>{"use strict";c.d(b,{JZ:()=>r,VP:()=>p,Vg:()=>s,XP:()=>t,o_:()=>u,zB:()=>o});var d=c(1421),e=c(8161),f=c.n(e),g=c(6760),h=c.n(g);let i=(0,c(7975).promisify)(d.execFile),j=process.env.OPENCLAW_BIN||"openclaw",k="win32"===process.platform,l=process.env.OPENCLAW_BIN||"",m=null,n=null;async function o(a,b={}){return q(a,b)}async function p(a,b={}){try{let c=await o(a,b);return v(c.stdout||c.stderr)}catch(b){let a=w(b);if(a)try{return v(a.stdout||a.stderr)}catch{}throw b}}async function q(a,b={}){let c=await t();return new Promise((e,f)=>{let g=(0,d.spawn)(c,a,{cwd:process.cwd(),env:process.env}),h="",i="",j=!1,k=!1,l=Promise.resolve(),m=(a,b)=>{a&&b&&(l=l.then(()=>a(b)).catch(()=>{}))},n=a=>{j||(j=!0,l.finally(a))},o=setTimeout(()=>{k=!0,g.kill("SIGTERM")},b.timeoutMs??45e3);g.stdout.on("data",a=>{let c=a.toString();h+=c,m(b.onStdout,c)}),g.stderr.on("data",a=>{let c=a.toString();i+=c,m(b.onStderr,c)}),g.on("error",a=>{clearTimeout(o),n(()=>{f(x(`OpenClaw command failed to start: ${a.message}`,h,i?`${i}
249
- ${a.message}`:a.message,null))})}),g.on("close",a=>{clearTimeout(o),n(()=>{k?f(x(`OpenClaw command timed out after ${Math.round((b.timeoutMs??45e3)/1e3)} seconds.`,h,i||"The command exceeded its timeout window.",a)):0!==a?f(x(`OpenClaw command failed with exit code ${a}.`,h,i,a)):e({stdout:h,stderr:i})})})})}async function r(a,b={}){try{let c=await q(a,b);return v(c.stdout||c.stderr)}catch(b){let a=w(b);if(a)try{return v(a.stdout||a.stderr)}catch{}throw b}}async function s(){try{return await t(),!0}catch{return!1}}async function t(){if(l)return l;if(m)return m;m=(async()=>{for(let a of(await z()))if(await A(a))return l=a,a;throw Error("OpenClaw CLI is not installed or could not be resolved.")})();try{return await m}finally{m=null}}function u(){l=process.env.OPENCLAW_BIN||"",m=null,n=null}function v(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:
250
- ${b.slice(0,800)}`)}function w(a){if(!a||"object"!=typeof a)return null;let b="stdout"in a?y(a.stdout):"",c="stderr"in a?y(a.stderr):"";return b||c?{stdout:b,stderr:c}:null}function x(a,b,c,d){let e=Error(a);return e.stdout=b,e.stderr=c,e.code=d,e}function y(a){return"string"==typeof a?a:a instanceof Uint8Array?Buffer.from(a).toString():""}async function z(){let a=f().homedir(),b=await B(),c="arm64"===process.arch?"/opt/homebrew":"/usr/local",d=k?[h().join(a,".openclaw","bin","openclaw.cmd"),h().join(a,".openclaw","bin","openclaw.exe"),h().join(a,"AppData","Roaming","npm","openclaw.cmd"),h().join(a,"AppData","Roaming","npm","openclaw.exe"),b?h().join(b,"openclaw.cmd"):null,b?h().join(b,"openclaw.exe"):null]:[h().join(a,".openclaw","bin","openclaw"),h().join(a,".local","bin","openclaw"),h().join(a,".npm-global","bin","openclaw"),h().join(a,".volta","bin","openclaw"),h().join(a,"Library","pnpm","openclaw"),h().join("/usr/local","bin","openclaw"),h().join(c,"bin","openclaw"),b?h().join(b,"bin","openclaw"):null,b?h().join(b,"openclaw"):null];return[...new Set([l,j,"openclaw",...d].filter(C))]}async function A(a){try{return await i(a,["--version"],{cwd:process.cwd(),timeout:5e3,maxBuffer:1048576}),!0}catch{return!1}}async function B(){return n||(n=(async()=>{try{let{stdout:a}=await i(k?"npm.cmd":"npm",["prefix","-g"],{cwd:process.cwd(),timeout:5e3,maxBuffer:1048576});return a.toString().trim()}catch{return""}})()),n}function C(a){return!!a}}};
414
+ `}function q(a){let b=(a??[]).filter(a=>"error"!==a.status&&a.summary.trim().length>0).slice(0,4);if(0===b.length)return"";let c=b.filter(a=>(a.confidence??100)>=80),d=b.filter(a=>(a.confidence??100)<80),e=a=>{let b="website"===a.kind?"Website":"repo"===a.kind?"Repo":"folder"===a.kind?"Folder":"Prompt",c="number"==typeof a.confidence?` (${a.confidence}%)`:"";return`- ${b}: ${a.label}${c} - ${a.summary}`},f=[];return c.length>0&&f.push(`## Evidence
415
+ ${c.map(e).join("\n")}`),d.length>0&&f.push(`## Assumptions
416
+ ${d.map(e).join("\n")}`),f.length>0?`
417
+ ${f.join("\n\n")}
418
+ `:""}},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)}},5828:(a,b,c)=>{"use strict";function d(a){var b;return a.diagnostics.installed&&a.diagnostics.rpcOk&&(b=a).diagnostics.runtime.stateWritable&&b.diagnostics.runtime.sessionStoreWritable}function e(a){return d(a)&&a.diagnostics.modelReadiness.ready&&"passed"===a.diagnostics.runtime.smokeTest.status}c.d(b,{Bt:()=>e,iN:()=>d})},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:"Mission Control 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:"Mission Control 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})},8366:(a,b,c)=>{"use strict";c.d(b,{JZ:()=>s,VP:()=>q,Vg:()=>t,XP:()=>v,gg:()=>u,o_:()=>w,zB:()=>p});var d=c(1421),e=c(8161),f=c.n(e),g=c(6760),h=c.n(g);let i=(0,c(7975).promisify)(d.execFile),j=process.env.OPENCLAW_BIN||"openclaw",k="win32"===process.platform,l=process.env.OPENCLAW_BIN||"",m=null,n=null,o=/^[A-Za-z0-9_./:@=+%-]+$/;async function p(a,b={}){return r(a,b)}async function q(a,b={}){try{let c=await p(a,b);return x(c.stdout||c.stderr)}catch(b){let a=y(b);if(a)try{return x(a.stdout||a.stderr)}catch{}throw b}}async function r(a,b={}){let c=await v();return new Promise((e,f)=>{let g=(0,d.spawn)(c,a,{cwd:process.cwd(),env:process.env}),h="",i="",j=!1,k=!1,l=Promise.resolve(),m=(a,b)=>{a&&b&&(l=l.then(()=>a(b)).catch(()=>{}))},n=a=>{j||(j=!0,l.finally(a))},o=setTimeout(()=>{k=!0,g.kill("SIGTERM")},b.timeoutMs??45e3);g.stdout.on("data",a=>{let c=a.toString();h+=c,m(b.onStdout,c)}),g.stderr.on("data",a=>{let c=a.toString();i+=c,m(b.onStderr,c)}),g.on("error",a=>{clearTimeout(o),n(()=>{f(z(`OpenClaw command failed to start: ${a.message}`,h,i?`${i}
419
+ ${a.message}`:a.message,null))})}),g.on("close",a=>{clearTimeout(o),n(()=>{k?f(z(`OpenClaw command timed out after ${Math.round((b.timeoutMs??45e3)/1e3)} seconds.`,h,i||"The command exceeded its timeout window.",a)):0!==a?f(z(`OpenClaw command failed with exit code ${a}.`,h,i,a)):e({stdout:h,stderr:i})})})})}async function s(a,b={}){try{let c=await r(a,b);return x(c.stdout||c.stderr)}catch(b){let a=y(b);if(a)try{return x(a.stdout||a.stderr)}catch{}throw b}}async function t(){try{return await v(),!0}catch{return!1}}function u(a,b){return[a,...b].map(B).join(" ")}async function v(){if(l)return l;if(m)return m;m=(async()=>{for(let a of(await C()))if(await D(a))return l=a,a;throw Error("OpenClaw CLI is not installed or could not be resolved.")})();try{return await m}finally{m=null}}function w(){l=process.env.OPENCLAW_BIN||"",m=null,n=null}function x(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:
420
+ ${b.slice(0,800)}`)}function y(a){if(!a||"object"!=typeof a)return null;let b="stdout"in a?A(a.stdout):"",c="stderr"in a?A(a.stderr):"";return b||c?{stdout:b,stderr:c}:null}function z(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 A(a){return"string"==typeof a?a:a instanceof Uint8Array?Buffer.from(a).toString():""}function B(a){return o.test(a)?a:`'${a.replace(/'/g,"'\\''")}'`}async function C(){let a=f().homedir(),b=await E(),c="arm64"===process.arch?"/opt/homebrew":"/usr/local",d=k?[h().join(a,".openclaw","bin","openclaw.cmd"),h().join(a,".openclaw","bin","openclaw.exe"),h().join(a,"AppData","Roaming","npm","openclaw.cmd"),h().join(a,"AppData","Roaming","npm","openclaw.exe"),b?h().join(b,"openclaw.cmd"):null,b?h().join(b,"openclaw.exe"):null]:[h().join(a,".openclaw","bin","openclaw"),h().join(a,".local","bin","openclaw"),h().join(a,".npm-global","bin","openclaw"),h().join(a,".volta","bin","openclaw"),h().join(a,"Library","pnpm","openclaw"),h().join("/usr/local","bin","openclaw"),h().join(c,"bin","openclaw"),b?h().join(b,"bin","openclaw"):null,b?h().join(b,"openclaw"):null];return[...new Set([l,j,"openclaw",...d].filter(F))]}async function D(a){try{return await i(a,["--version"],{cwd:process.cwd(),timeout:5e3,maxBuffer:1048576}),!0}catch{return!1}}async function E(){return n||(n=(async()=>{try{let{stdout:a}=await i(k?"npm.cmd":"npm",["prefix","-g"],{cwd:process.cwd(),timeout:5e3,maxBuffer:1048576});return a.toString().trim()}catch{return""}})()),n}function F(a){return!!a}}};