@sapienx/agentos 0.1.4 → 0.1.6

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 (116) hide show
  1. package/README.md +4 -0
  2. package/bin/agentos.js +289 -7
  3. package/bundle/.next/BUILD_ID +1 -1
  4. package/bundle/.next/app-path-routes-manifest.json +10 -10
  5. package/bundle/.next/build-manifest.json +3 -3
  6. package/bundle/.next/required-server-files.json +3 -3
  7. package/bundle/.next/server/app/_global-error/page.js +3 -3
  8. package/bundle/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  9. package/bundle/.next/server/app/_global-error.html +2 -2
  10. package/bundle/.next/server/app/_global-error.rsc +1 -1
  11. package/bundle/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  12. package/bundle/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  13. package/bundle/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  14. package/bundle/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  15. package/bundle/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  16. package/bundle/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  17. package/bundle/.next/server/app/_not-found/page.js +2 -2
  18. package/bundle/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  19. package/bundle/.next/server/app/_not-found.html +1 -1
  20. package/bundle/.next/server/app/_not-found.rsc +3 -3
  21. package/bundle/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  22. package/bundle/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  23. package/bundle/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  24. package/bundle/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  25. package/bundle/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  26. package/bundle/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  27. package/bundle/.next/server/app/api/agents/route.js +1 -1
  28. package/bundle/.next/server/app/api/agents/route.js.nft.json +1 -1
  29. package/bundle/.next/server/app/api/agents/route_client-reference-manifest.js +1 -1
  30. package/bundle/.next/server/app/api/diagnostics/route.js +1 -1
  31. package/bundle/.next/server/app/api/diagnostics/route.js.nft.json +1 -1
  32. package/bundle/.next/server/app/api/diagnostics/route_client-reference-manifest.js +1 -1
  33. package/bundle/.next/server/app/api/files/reveal/route.js +1 -1
  34. package/bundle/.next/server/app/api/files/reveal/route_client-reference-manifest.js +1 -1
  35. package/bundle/.next/server/app/api/gateway/control/route.js +1 -1
  36. package/bundle/.next/server/app/api/gateway/control/route.js.nft.json +1 -1
  37. package/bundle/.next/server/app/api/gateway/control/route_client-reference-manifest.js +1 -1
  38. package/bundle/.next/server/app/api/mission/route.js +1 -1
  39. package/bundle/.next/server/app/api/mission/route.js.nft.json +1 -1
  40. package/bundle/.next/server/app/api/mission/route_client-reference-manifest.js +1 -1
  41. package/bundle/.next/server/app/api/onboarding/models/route.js +7 -5
  42. package/bundle/.next/server/app/api/onboarding/models/route.js.nft.json +1 -1
  43. package/bundle/.next/server/app/api/onboarding/models/route_client-reference-manifest.js +1 -1
  44. package/bundle/.next/server/app/api/onboarding/route.js +7 -5
  45. package/bundle/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  46. package/bundle/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  47. package/bundle/.next/server/app/api/planner/[planId]/deploy/route.js +2 -2
  48. package/bundle/.next/server/app/api/planner/[planId]/deploy/route.js.nft.json +1 -1
  49. package/bundle/.next/server/app/api/planner/[planId]/deploy/route_client-reference-manifest.js +1 -1
  50. package/bundle/.next/server/app/api/planner/[planId]/route.js +1 -1
  51. package/bundle/.next/server/app/api/planner/[planId]/route.js.nft.json +1 -1
  52. package/bundle/.next/server/app/api/planner/[planId]/route_client-reference-manifest.js +1 -1
  53. package/bundle/.next/server/app/api/planner/[planId]/simulate/route.js +1 -1
  54. package/bundle/.next/server/app/api/planner/[planId]/simulate/route.js.nft.json +1 -1
  55. package/bundle/.next/server/app/api/planner/[planId]/simulate/route_client-reference-manifest.js +1 -1
  56. package/bundle/.next/server/app/api/planner/[planId]/turn/route.js +1 -1
  57. package/bundle/.next/server/app/api/planner/[planId]/turn/route.js.nft.json +1 -1
  58. package/bundle/.next/server/app/api/planner/[planId]/turn/route_client-reference-manifest.js +1 -1
  59. package/bundle/.next/server/app/api/planner/route.js +1 -1
  60. package/bundle/.next/server/app/api/planner/route.js.nft.json +1 -1
  61. package/bundle/.next/server/app/api/planner/route_client-reference-manifest.js +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/reset/route_client-reference-manifest.js +1 -1
  65. package/bundle/.next/server/app/api/runtimes/[runtimeId]/route.js +1 -1
  66. package/bundle/.next/server/app/api/runtimes/[runtimeId]/route.js.nft.json +1 -1
  67. package/bundle/.next/server/app/api/runtimes/[runtimeId]/route_client-reference-manifest.js +1 -1
  68. package/bundle/.next/server/app/api/settings/gateway/route.js +1 -1
  69. package/bundle/.next/server/app/api/settings/gateway/route.js.nft.json +1 -1
  70. package/bundle/.next/server/app/api/settings/gateway/route_client-reference-manifest.js +1 -1
  71. package/bundle/.next/server/app/api/settings/workspace-root/route.js +1 -1
  72. package/bundle/.next/server/app/api/settings/workspace-root/route.js.nft.json +1 -1
  73. package/bundle/.next/server/app/api/settings/workspace-root/route_client-reference-manifest.js +1 -1
  74. package/bundle/.next/server/app/api/snapshot/route.js +1 -1
  75. package/bundle/.next/server/app/api/snapshot/route.js.nft.json +1 -1
  76. package/bundle/.next/server/app/api/snapshot/route_client-reference-manifest.js +1 -1
  77. package/bundle/.next/server/app/api/stream/route.js +2 -2
  78. package/bundle/.next/server/app/api/stream/route.js.nft.json +1 -1
  79. package/bundle/.next/server/app/api/stream/route_client-reference-manifest.js +1 -1
  80. package/bundle/.next/server/app/api/system/open-terminal/route.js +1 -1
  81. package/bundle/.next/server/app/api/system/open-terminal/route_client-reference-manifest.js +1 -1
  82. package/bundle/.next/server/app/api/update/route.js +2 -2
  83. package/bundle/.next/server/app/api/update/route.js.nft.json +1 -1
  84. package/bundle/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  85. package/bundle/.next/server/app/api/workspaces/route.js +2 -2
  86. package/bundle/.next/server/app/api/workspaces/route.js.nft.json +1 -1
  87. package/bundle/.next/server/app/api/workspaces/route_client-reference-manifest.js +1 -1
  88. package/bundle/.next/server/app/page.js +8 -8
  89. package/bundle/.next/server/app/page.js.nft.json +1 -1
  90. package/bundle/.next/server/app/page_client-reference-manifest.js +1 -1
  91. package/bundle/.next/server/app-paths-manifest.json +10 -10
  92. package/bundle/.next/server/chunks/463.js +2 -2
  93. package/bundle/.next/server/chunks/603.js +1 -1
  94. package/bundle/.next/server/chunks/907.js +28 -27
  95. package/bundle/.next/server/middleware-build-manifest.js +1 -1
  96. package/bundle/.next/server/pages/404.html +1 -1
  97. package/bundle/.next/server/pages/500.html +2 -2
  98. package/bundle/.next/static/chunks/4a846800-817e4d43c6c4047f.js +1 -0
  99. package/bundle/.next/static/chunks/632-680acc061529597b.js +13 -0
  100. package/bundle/.next/static/chunks/app/layout-6c2c9cd9b518452f.js +1 -0
  101. package/bundle/.next/static/chunks/app/page-a410ba4980548bfd.js +14 -0
  102. package/bundle/.next/static/chunks/{main-app-9229332086036e25.js → main-app-245e6e74e3ad1df9.js} +1 -1
  103. package/bundle/.next/static/chunks/next/dist/client/components/builtin/global-error-62eeb2b37b76f847.js +1 -0
  104. package/bundle/public/readme/create.webp +0 -0
  105. package/bundle/public/readme/setup.webp +0 -0
  106. package/bundle/public/readme/wizzard.webp +0 -0
  107. package/bundle/scripts/openclaw-mission-dispatch-runner.mjs +234 -0
  108. package/bundle/server.js +1 -1
  109. package/package.json +2 -2
  110. package/bundle/.next/static/chunks/4a846800-ac18ff898328f8a0.js +0 -1
  111. package/bundle/.next/static/chunks/632-05d72f27d1a1075e.js +0 -13
  112. package/bundle/.next/static/chunks/app/layout-f29ac7241aef5824.js +0 -1
  113. package/bundle/.next/static/chunks/app/page-2cb34a431e05ffbc.js +0 -14
  114. package/bundle/.next/static/chunks/next/dist/client/components/builtin/global-error-382f4d4fed37de4d.js +0 -1
  115. /package/bundle/.next/static/{vVu-6A-oCIV07uAZGrTop → 4ThNPJp9bEISWCDFyw3Jd}/_buildManifest.js +0 -0
  116. /package/bundle/.next/static/{vVu-6A-oCIV07uAZGrTop → 4ThNPJp9bEISWCDFyw3Jd}/_ssgManifest.js +0 -0
@@ -1,8 +1,9 @@
1
- exports.id=907,exports.ids=[907],exports.modules={23:()=>{},1775:()=>{},3214:(a,b,c)=>{"use strict";c.d(b,{GH:()=>j,P0:()=>i,eY:()=>e,hh:()=>h});var d=c(4126);let e={workspaceOnly:!0,generateStarterDocs:!0,generateMemory:!0,kickoffMission:!0},f={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"}},g={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 h(a){return f[a]}function i(a,b){let c=g[a];if("solo"===b){let a=c.find(a=>a.isPrimary)??c[0];return[{...a,name:"Builder"===a.role?"Default Agent":a.name,policy:(0,d.g0)("browser"===a.id?"browser":"worker"),enabled:!0}]}return c.map(a=>({id:a.id,role:a.role,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 j(a,b){let c=["AGENTS.md","SOUL.md","IDENTITY.md","TOOLS.md","HEARTBEAT.md"];return b.generateMemory&&c.push("MEMORY.md","memory/blueprint.md","memory/decisions.md"),b.generateStarterDocs&&c.push("docs/brief.md","docs/architecture.md","deliverables/README.md"),"frontend"===a&&c.push("docs/ux-notes.md"),"backend"===a&&c.push("docs/service-map.md"),"research"===a&&c.push("docs/research-plan.md"),"content"===a&&c.push("docs/content-brief.md"),c}},4126:(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}))},5615:(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},f=async()=>{c.percent=g(c.steps),await b?.(structuredClone(c))},i=(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){i(a,{status:"active",percent:Math.max(e(a).percent,2),detail:b}),await f()},async updateStep(a,b){i(a,b),await f()},async addActivity(a,b,c="active"){let g=e(a),h={id:`${a}-${d}`,message:b,status:c};d+=1,g.activities.push(h),"pending"===g.status&&"active"===c&&(g.status="active"),await f()},async completeStep(a,b){i(a,{status:"done",percent:100,detail:b}),await f()},async failStep(a,b){i(a,{status:"error",percent:100,detail:b}),await f()},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 f()}}}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})},8015:(a,b,c)=>{"use strict";c.d(b,{er:()=>z,Sn:()=>G,zw:()=>J,RB:()=>I,qu:()=>L,GM:()=>A,Y9:()=>F,xE:()=>D,x4:()=>H,Vg:()=>M,sQ:()=>K,PR:()=>N});var d=c(1421),e=c(7598),f=c(1455),g=c(8161),h=c.n(g),i=c(6760),j=c.n(i),k=c(7975),l=c(4126);function m(a){let b=Date.now(),c=j().join(h().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:[]},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,l.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,l.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:"active",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}}],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 n(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 o(a){return a?.enabled?{every:"string"==typeof a.every&&a.every.trim()?a.every.trim():"30m"}:null}var p=c(8912),q=c(5615),r=c(3214);let s=(0,k.promisify)(d.execFile),t="gateway.remote.url",u=j().join(process.cwd(),".mission-control"),v=j().join(u,"settings.json"),w=null,x=null,y=new Map;function z(){w=null,y=new Map}async function A(a={}){if(!a.force&&w&&w.expiresAt>Date.now())return a.includeHidden?w.full:w.visible;if(x){let b=await x;return a.includeHidden?b.full:b.visible}x=B();try{let b=await x;return w={...b,expiresAt:Date.now()+1e4},a.includeHidden?b.full:b.visible}finally{x=null}}async function B(){if(!await (0,p.Vg)())return C(m("OpenClaw CLI is not installed on this machine."));try{var a,b,c,d,e,f;let g,h,i,k,m,n,o,q,r,s,u,v,w,x,z,A=await Q(),[B,C,D,F,G,H,I,J,K]=await Promise.allSettled([(0,p.VP)(["gateway","status","--json"]),(0,p.VP)(["config","get",t,"--json"]),(0,p.VP)(["status","--json"]),(0,p.VP)(["agents","list","--json"]),(0,p.VP)(["config","get","agents.list","--json"]),(0,p.VP)(["models","list","--json"]),(0,p.VP)(["models","status","--json"]),(0,p.VP)(["sessions","--all-agents","--json"]),(0,p.VP)(["gateway","call","system-presence","--json"])]),L="fulfilled"===B.status?B.value:void 0,M="fulfilled"===C.status?a4(C.value):void 0,N="fulfilled"===D.status?D.value:void 0,O="fulfilled"===F.status?F.value:[],P="fulfilled"===G.status?G.value:[],R="fulfilled"===H.status?H.value.models:[],S="fulfilled"===I.status?I.value:void 0,T="fulfilled"===J.status?J.value.sessions:[],U="fulfilled"===K.status?K.value:[],V=new Map,W=new Map,X=new Map,Y=[],Z=[],$=new Map((N?.heartbeat?.agents??[]).map(a=>[a.agentId,a])),_=new Map(P.map(a=>[a.id,a])),aa=new Map;for(let a of T){if(!a.agentId)continue;let b=aa.get(a.agentId)??[];b.push(a),aa.set(a.agentId,b)}let ab=function(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 y.entries()){if(c.has(a))continue;let e={...d,status:"error"===d.status?"error":"partial"===d.status?"partial":"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(aT).slice(0,8))}(Array.from(b.values()));return y=new Map(d.map(a=>[a.id,a])),d.sort(aT)}((await Promise.all(T.map(a=>E(a,P,O)))).flat());for(let b of O){let c=_.get(b.id),d=aD(b.workspace),e=aa.get(b.id)??[],f=X.get(b.workspace)??await aI(b.workspace);X.set(b.workspace,f);let g=f.agents.find(a=>a.id===b.id)??null,h=(c?.skills??[]).filter(a=>!ar(a)),i=g?.policy??(0,l.g0)((0,l.qF)({skills:h,id:b.id,name:b.name||b.identityName||c?.name||b.id}),{fileAccess:c?.tools?.fs?.workspaceOnly?"workspace-only":"extended"}),k=b.model||c?.model||"unassigned",m=W.get(b.workspace)??await aE(b.workspace,{agentId:b.id,agentName:b.name||b.identityName||c?.name||b.id,configuredSkills:h,configuredTools:c?.tools?.fs?.workspaceOnly?["fs.workspaceOnly"]:[]});W.set(b.workspace,m);let n=ab.filter(a=>a.agentId===b.id).sort(aT),o=n.map(a=>a.id),p=n[0],q=e.map(a=>a.updatedAt??0).sort((a,b)=>b-a).at(0)||null,r=$.get(b.id),s=(a={rpcOk:!!L?.rpc?.ok,activeRuntime:p,heartbeatEnabled:!!r?.enabled,lastActiveAt:q}).rpcOk?a.activeRuntime?.status==="active"?"engaged":a.heartbeatEnabled?"monitoring":a.lastActiveAt?"ready":"standby":"offline",t=function(a,b){var c;let d=aD(b),e=a.get(d);if(e)return e;let f={id:d,name:(c=b,(j().basename(c)||c).split(/[-_]/g).filter(Boolean).map(a=>a[0].toUpperCase()+a.slice(1)).join(" ")),slug:a5(j().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}(V,b.workspace);t.agentIds.push(b.id),t.modelIds.push(k),t.activeRuntimeIds.push(...o),t.totalSessions+=e.length;let u={id:b.id,name:b.name||b.identityName||c?.name||b.id,workspaceId:d,workspacePath:b.workspace,modelId:k,isDefault:!!(b.isDefault||c?.default),status:s,sessionCount:e.length,lastActiveAt:q,currentAction:function(a){if(a.runtime)return a.runtime.taskId?"active"===a.runtime.status?`Tracking task ${a.runtime.taskId.slice(0,8)}`:"completed"===a.runtime.status?`Recent task ${a.runtime.taskId.slice(0,8)} completed`:"partial"===a.runtime.status?`Recent task ${a.runtime.taskId.slice(0,8)} completed with warnings`:"error"===a.runtime.status?`Recent task ${a.runtime.taskId.slice(0,8)} ended with an error`:`Recent task ${a.runtime.taskId.slice(0,8)}`:"active"===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:p,heartbeatEvery:r?.every??null,status:s}),activeRuntimeIds:o,heartbeat:{enabled:!!r?.enabled,every:r?.every??null,everyMs:r?.everyMs??null},identity:{emoji:c?.identity?.emoji||b.identityEmoji,theme:c?.identity?.theme,avatar:c?.identity?.avatar,source:b.identitySource},profile:m,skills:h,tools:c?.tools?.fs?.workspaceOnly?["fs.workspaceOnly"]:[],policy:i};for(let a of(Y.push(u),Z.push({id:`edge:${d}:${u.id}:contains`,sourceId:d,targetId:u.id,kind:"contains",label:"workspace member"}),Z.push({id:`edge:${u.id}:${k}:model`,sourceId:u.id,targetId:k,kind:"uses-model",label:"model assignment"}),o))Z.push({id:`edge:${u.id}:${a}:run`,sourceId:u.id,targetId:a,kind:"active-run",label:"runtime"})}let ac=new Map;for(let a of Y){let b=ac.get(a.workspaceId)??[];b.push(a),ac.set(a.workspaceId,b)}let ad=await Promise.all(Array.from(V.values()).map(async a=>{var b;let c,d=ac.get(a.id)??[],e=await aF(a.path,d);return{...a,modelIds:a$(a.modelIds),activeRuntimeIds:a$(a.activeRuntimeIds),health:(b=a.agentIds,(c=Y.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}})),ae=new Set(ad.filter(a=>X.get(a.path)?.hidden).map(a=>a.id)),af=Y.filter(a=>!ae.has(a.workspaceId)),ag=new Set(Y.filter(a=>ae.has(a.workspaceId)).map(a=>a.id)),ah=ab.filter(a=>!(a.agentId&&ag.has(a.agentId))&&!(a.workspaceId&&ae.has(a.workspaceId))),ai=new Set(ab.filter(a=>a.agentId&&ag.has(a.agentId)||a.workspaceId&&ae.has(a.workspaceId)).map(a=>a.id)),aj=new Set([...ae,...ag,...ai]),ak=Z.filter(a=>!aj.has(a.sourceId)&&!aj.has(a.targetId)),al=ad.filter(a=>!ae.has(a.id)),am=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}))},an=(b=R,c=S,g=b.filter(a=>aU(a)),h=a$([...b.map(a=>a.key.split("/")[0]||"unknown"),...(c?.auth?.providers??[]).map(a=>a.provider).filter(a_),...(c?.auth?.oauth?.providers??[]).map(a=>a.provider).filter(a_)].filter(a_)),i=new Map((c?.auth?.providers??[]).filter(a=>a_(a.provider)).map(a=>[a.provider,a])),k=new Map((c?.auth?.oauth?.providers??[]).filter(a=>a_(a.provider)).map(a=>[a.provider,a])),m=a4(c?.resolvedDefault??void 0),n=a4(c?.defaultModel??void 0),q=(o=m??n)?function(a){let[b]=a.split("/",1);return b||null}(o):null,s=(r=!!(o&&g.some(a=>a.key===o)))?o:g[0]?.key??null,u=h.map(a=>{var c;let d=b.filter(b=>(b.key.split("/")[0]||"unknown")===a),e=d.some(a=>!0!==a.local),f=i.get(a),g=k.get(a),h=d.some(a=>aU(a))||(f?.profiles?.count??0)>0||g?.status==="ok",j=null;return g?.status==="ok"?j="OAuth connected":(f?.profiles?.count??0)>0?j=`${f?.profiles?.count} auth profile${f?.profiles?.count===1?"":"s"}`:d.some(a=>a.local)?j="Install or pull a local model to unlock this route.":e&&(c=a,j="openrouter"===c.trim().toLowerCase()?`Add your ${aV(c)} API key in terminal to use this route.`:`Connect ${aV(c)} auth in terminal to use this route.`),{provider:a,connected:h,canLogin:e,detail:j}}),v=(c?.auth?.missingProvidersInUse??[]).filter(a_),w=new Set(v),x=c?.auth?.unusableProfiles?.length??0,z=[],0===g.length&&z.push("No available models were detected yet."),g.length>0&&!o&&z.push("Choose a default model to finish setup."),o&&!r&&(q&&w.has(q)?z.push(`Default model is set, but ${aV(q)} auth is still missing.`):v.length>0?z.push(`Default model is set, but auth is still missing for: ${v.join(", ")}.`):z.push("The selected default model is not ready yet.")),v.length>0&&!o&&z.push(`Auth is still missing for: ${v.join(", ")}.`),x>0&&z.push("Some stored model auth profiles are not usable."),{ready:g.length>0&&r,defaultModel:n??null,resolvedDefaultModel:m??null,defaultModelReady:r,recommendedModelId:s??null,preferredLoginProvider:u.find(a=>a.provider===q&&!a.connected&&a.canLogin)?.provider??v.find(a=>u.some(b=>b.provider===a&&!b.connected&&b.canLogin))??u.find(a=>!a.connected&&a.canLogin)?.provider??(h.includes("openai-codex")||0===g.length?"openai-codex":null),totalModelCount:b.length,availableModelCount:g.length,localModelCount:g.filter(a=>a.local).length,remoteModelCount:g.filter(a=>!0!==a.local).length,missingModelCount:b.filter(a=>a.missing||!1===a.available).length,authProviders:u,issues:a$(z)}),ao=N?.securityAudit?.findings?.filter(a=>"warn"===a.severity).map(a=>a.title||a.detail||"Security warning")??[],ap=a4(U[0]?.version||N?.overview?.version||N?.version),aq=a4(N?.update?.registry?.latestVersion??void 0),as=function(a){let b=a4(a);if(b)return b.split(/\r?\n/,1)[0]?.trim()||b}(N?.update?.registry?.error??void 0),at=ap&&aq?a2(aq,ap)>0:void 0,au=function(a){let b=a4(a.legacyInfo);if(a.latestVersion&&a.currentVersion){let b=a2(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:ap,latestVersion:aq,updateError:as,legacyInfo:N?.overview?.update}),av={installed:!0,loaded:!!L?.service?.loaded,rpcOk:!!L?.rpc?.ok,health:(d=L?.rpc?.ok,e=ao.length,d?e>0?"degraded":"healthy":"offline"),version:ap,latestVersion:aq,updateAvailable:at,updateError:as,updateRoot:a4(N?.update?.root??void 0),updateInstallKind:a4(N?.update?.installKind??void 0),updatePackageManager:a4(N?.update?.packageManager??void 0),workspaceRoot:aW(A),configuredWorkspaceRoot:A??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:au,serviceLabel:L?.service?.label,modelReadiness:an,securityWarnings:ao,issues:(f={gatewayStatus:B,status:D,agents:F,models:H,modelStatus:I,sessions:J},Object.entries(f).flatMap(([a,b])=>"rejected"!==b.status?[]:[`${a}: ${b.reason instanceof Error?b.reason.message:String(b.reason)}`]))},aw={generatedAt:new Date().toISOString(),mode:"live",diagnostics:av,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:{...aw,workspaces:ad,agents:Y,models:am(Y),runtimes:ab,relationships:Z},visible:{...aw,workspaces:al,agents:af,models:am(af),runtimes:ah,relationships:ak}}}catch(a){return C(m(a instanceof Error?a.message:"Unknown OpenClaw error."))}}function C(a){return{visible:a,full:a}}async function D(a){var b,c,d,e;let f,g=a.mission.trim();if(!g)throw Error("Mission text is required.");let h=await A({force:!0,includeHidden:!0}),i=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}(h,a.workspaceId);if(!i)throw Error("No OpenClaw agent is available for mission dispatch.");let j=h.agents.find(a=>a.id===i),k=h.workspaces.find(b=>b.id===(a.workspaceId||j?.workspaceId))??(j?{id:j.workspaceId,path:j.workspacePath}:null),m=k?h.agents.filter(a=>a.workspaceId===k.id):[],n=m.find(a=>"setup"===a.policy.preset&&a.id!==j?.id)?.id??null,o=k?await ai(k.path,g):null,q=o?(b=g,c=o,d=j?.policy,e=n,f=d??(0,l.g0)(l.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:",...aj(f,e)].join("\n")):g,r=await (0,p.VP)(["agent","--agent",i,"--message",q,"--thinking",a.thinking??"medium","--timeout","120","--json"]);return w=null,{runId:r.runId,agentId:i,status:r.status,summary:r.summary,payloads:r.result?.payloads??[],meta:{...r.result?.meta??{},outputDir:o?.absoluteOutputDir,outputDirRelative:o?.relativeOutputDir,notesDirRelative:o?.notesDirRelative}}}async function E(a,b,c){var d,e,g,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)?aD(o):void 0,q=aY(d.key,"task"),r=aY(d.key,"stage"),s=d.model&&d.model.includes("/")?d.model:n?.model||m?.model||"unassigned",t=(g=r,h=d.key,i=d.ageMs,"in_progress"===g||h?.endsWith(":main")&&"number"==typeof i&&i<36e5?"active":"completed"===g||"done"===g?"completed":"failed"===g||"error"===g?"error":"idle"),u=(k=aY((j=d).key,"task")||j.key||j.sessionId||String(Math.random()),l=j.sessionId||a6(j.agentId||"sessionless"),`runtime:${l}:${a6(k)}`),v=q?q.slice(0,8):null,{id:u,source:"session",key:d.key||"unknown-session",title:v?`${aZ(d.agentId)} \xb7 ${v}`:`${aZ(d.agentId)} session`,subtitle:v?`task ${v} \xb7 ${r||"active"}`:"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?{input:d.inputTokens??0,output:d.outputTokens??0,total:d.totalTokens,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 x=c.find(b=>b.id===a.agentId),y=b.find(b=>b.id===a.agentId),z=await ay(a.agentId,a.sessionId,x?.workspace||y?.workspace);if(!z)return[w];try{let a=await (0,f.readFile)(z,"utf8"),b=aA(a,w,x?.workspace||y?.workspace).filter(a=>!a.prompt.toLowerCase().startsWith("read heartbeat.md if it exists"));if(0===b.length)return[w];return b.slice(-6).reverse().map(a=>{var b,c,d,e;let f,g,h,i;return b=w,c=a,g=Date.parse(c.updatedAt),h=(d=c.prompt,e=b.agentId,(f=d.trim())?aC(f,38):`${aZ(e)} run`),i="partial"===c.status?aC(c.warningSummary?`Completed with fallback: ${c.warningSummary}`:"Completed with warnings",90):c.finalText?aC(c.finalText,90):"error"===c.status?"Run ended with an error":"Main session run",{id:`runtime:${b.sessionId}:${c.id}`,source:"turn",key:`${b.key}:turn:${c.id}`,title:h,subtitle:i,status:c.status,updatedAt:Number.isNaN(g)?b.updatedAt:g,ageMs:Number.isNaN(g)?b.ageMs:Math.max(Date.now()-g,0),agentId:b.agentId,workspaceId:b.workspaceId,modelId:b.modelId,sessionId:b.sessionId,runId:c.runId||c.id,tokenUsage:c.tokenUsage,metadata:{...b.metadata,turnId:c.id,turnPrompt:c.prompt,stage:"main.turn",historical:"active"!==c.status,createdFiles:c.createdFiles,warnings:c.warnings,warningSummary:c.warningSummary}}})}catch{return[w]}}async function F(a){let b=await A({includeHidden:!0}),c=b.runtimes.find(b=>b.id===a);if(c||(c=(b=await A({force:!0,includeHidden:!0})).runtimes.find(b=>b.id===a)),!c)return{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};if("fallback"===b.mode)return{runtimeId:a,sessionId:c.sessionId,taskId:c.taskId,status:"available",finalText:"Fallback mode is active. Connect a real OpenClaw gateway to inspect live runtime output.",finalTimestamp:new Date().toISOString(),stopReason:"fallback",errorMessage:null,items:[{id:"fallback-assistant",role:"assistant",timestamp:new Date().toISOString(),text:"Fallback mode is active. Connect a real OpenClaw gateway to inspect live runtime output.",stopReason:"fallback",isError:!1}],createdFiles:[],warnings:[],warningSummary:null};if(!c.sessionId||!c.agentId)return{runtimeId:a,sessionId:c.sessionId,taskId:c.taskId,status:"missing",finalText:null,finalTimestamp:null,stopReason:null,errorMessage:"This runtime does not expose a session transcript yet.",items:[],createdFiles:[],warnings:[],warningSummary:null};let d=b.agents.find(a=>a.id===c.agentId),e=await ay(c.agentId,c.sessionId,d?.workspacePath);if(!e)return{runtimeId:a,sessionId:c.sessionId,taskId:c.taskId,status:"missing",finalText:null,finalTimestamp:null,stopReason:null,errorMessage:"No transcript file was found for this runtime session.",items:[],createdFiles:[],warnings:[],warningSummary:null};try{let a=await (0,f.readFile)(e,"utf8");return function(a,b,c){let d=aA(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):null;if(c)return az(a,c)}let e=d.at(-1);return e?az(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}}(c,a,d?.workspacePath)}catch(b){return{runtimeId:a,sessionId:c.sessionId,taskId:c.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 G(a){let b=a5(a.id.trim());if(!b)throw Error("Agent id is required.");let c=await A({force:!0,includeHidden:!0});!function(a,b,c){let d=a.agents.find(a=>a.id===b);if(!d)return;let e=ao(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,a.workspaceId);let d=c.workspaces.find(b=>b.id===a.workspaceId);if(!d)throw Error("Workspace was not found for this agent.");let e=(0,l.g0)(a.policy?.preset??l.iN,a.policy),f=(0,l.Cf)(e.preset),g=a4(a.name)??f.defaultName,h=a4(a.emoji)??f.defaultEmoji,i=a4(a.theme)??f.defaultTheme,j=o(n(e.preset,a.heartbeat)),k=c.agents.find(a=>a.workspaceId===d.id&&"setup"===a.policy.preset)?.id??null,m=["agents","add",b,"--workspace",d.path,"--agent-dir",ap(d.path,b),"--non-interactive","--json"];a.modelId?.trim()&&m.push("--model",a.modelId.trim()),await (0,p.zB)(m);let q=await as({workspacePath:d.path,agentId:b,agentName:g,policy:e,setupAgentId:k}),r=await au(b,d.path,{name:g,model:a4(a.modelId),heartbeat:j,skills:[q],tools:"workspace-only"===e.fileAccess?{fs:{workspaceOnly:!0}}:null});return await ax(b,d.path,{name:g||r.name,emoji:h,theme:i,avatar:a4(a.avatar)}),await aJ(d.path,{id:b,name:g,role:(0,l._P)(e.preset),skillId:q,modelId:a4(a.modelId),isPrimary:!1,policy:e}),w=null,{agentId:b,workspaceId:d.id}}async function H(a){var b;let c=a.id.trim();if(!c)throw Error("Agent id is required.");let d=await A({force:!0,includeHidden:!0}),e=d.agents.find(a=>a.id===c);if(!e)throw Error("Agent was not found.");let f=d.workspaces.find(b=>b.id===(a.workspaceId||e.workspaceId));if(!f)throw Error("Workspace was not found for this agent.");let g=(0,l.g0)(a.policy?.preset??e.policy.preset,a.policy??e.policy),h=a4(e.name),i=a4(e.identity.emoji),j=a4(e.identity.theme),k=o(n(g.preset,a.heartbeat??{enabled:(b=e.heartbeat).enabled,every:b.every??void 0})),m=d.agents.find(a=>a.workspaceId===f.id&&"setup"===a.policy.preset&&a.id!==c)?.id??null,p=await as({workspacePath:f.path,agentId:c,agentName:a4(a.name)??h??c,policy:g,setupAgentId:m}),q=await au(c,f.path,{name:a4(a.name),model:a4(a.modelId),heartbeat:k,skills:[...e.skills,p],tools:"workspace-only"===g.fileAccess?{fs:{workspaceOnly:!0}}:null});return await ax(c,f.path,{name:a4(a.name)??q.name,emoji:a4(a.emoji)??i,theme:a4(a.theme)??j,avatar:a4(a.avatar)}),await aJ(f.path,{id:c,name:a4(a.name)??h??q.name??c,modelId:a4(a.modelId)??("unassigned"===e.modelId?null:e.modelId),isPrimary:e.isDefault,policy:g}),w=null,{agentId:c,workspaceId:f.id}}async function I(a){let b=a.agentId.trim();if(!b)throw Error("Agent id is required.");let c=await A({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,g=c.runtimes.filter(a=>a.agentId===d.id).length;await (0,p.zB)(["agents","delete",d.id,"--force","--json"]);try{let a=await av(),b=a.filter(a=>a.id!==d.id);b.length!==a.length&&await aw(b)}catch{}if(e){await aK(e.path,d.id);try{await (0,f.rm)(j().join(e.path,"skills",aq(d.id)),{recursive:!0,force:!0})}catch{}}return w=null,y=new Map,{agentId:d.id,workspaceId:d.workspaceId,workspacePath:d.workspacePath,deletedRuntimeCount:g}}async function J(a,b={}){var c,d,e,f,g,h;let i,j,k,m=function(a){let b=a.name.trim();if(!b)throw Error("Workspace name is required.");let c=a5(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={...r.eY,...a.rules??{}},i=(a.agents?.length?a.agents:(0,r.P0)(d,e)).map(a=>({id:a5(a.id)||"agent",role:a.role.trim()||aZ(a.id),name:a4(a.name)??aZ(a.id),enabled:!1!==a.enabled,emoji:a4(a.emoji),theme:a4(a.theme),skillId:a4(a.skillId),modelId:a4(a.modelId),isPrimary:!!a.isPrimary,heartbeat:n(a.policy?.preset??(0,l.qF)({skills:a.skillId?[a.skillId]:[],id:a.id,name:a.name}),a.heartbeat),policy:(0,l.g0)(a.policy?.preset??(0,l.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=an(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:a4(a.brief),directory:a4(a.directory),modelId:a4(a.modelId),repoUrl:a4(a.repoUrl),existingPath:a4(a.existingPath),sourceMode:f,template:d,teamPreset:e,modelProfile:g,rules:h,agents:i}}(a),o=m.agents.filter(a=>a.enabled),p=(0,q.X6)({template:(0,q.fV)({sourceMode:m.sourceMode,agentCount:o.length,kickoffMission:m.rules.kickoffMission}),onProgress:b.onProgress});if(0===o.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 "${m.name}".`);let s=await $(m);await p.updateStep("validate",{percent:38,detail:`Reserved target directory at ${s}.`}),await p.addActivity("validate",`Reserved target directory ${s}.`,"done");let t=await A({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=>am(b,a.id)),e=an(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 "${ao(a,c)}". Rename the workspace or adjust the agent ids.`)}}(t,m.slug,o),await p.completeStep("validate",`Workspace input and ${o.length} agent configuration${1===o.length?"":"s"} are ready.`),await p.startStep("source",(c=m.sourceMode,d=s,"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=m.sourceMode,f=m,"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 U({targetDir:s,sourceMode:m.sourceMode,repoUrl:m.repoUrl,existingPath:m.existingPath}),await p.completeStep("source",(g=m.sourceMode,h=s,"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 V(s,{name:m.name,brief:m.brief,template:m.template,teamPreset:m.teamPreset,modelProfile:m.modelProfile,rules:m.rules,sourceMode:m.sourceMode,agents:o}),await p.completeStep("scaffold","Workspace files and starter docs are in place.");let u=[];for(let a of(await p.startStep("agents",1===o.length?"Provisioning the first workspace agent.":`Provisioning ${o.length} workspace agents.`),o)){let b=u.length,c=b+1;await p.updateStep("agents",{percent:Math.round(b/o.length*100),detail:`Creating agent ${c} of ${o.length}: ${a.name}.`}),await p.addActivity("agents",`Creating ${a.name} (${a.role}).`);let d=await Y({workspacePath:s,workspaceSlug:m.slug,workspaceModelId:m.modelId,agent:a});u.push(d),await p.addActivity("agents",`Created ${a.name} as ${d}.`,"done"),await p.updateStep("agents",{percent:Math.round(u.length/o.length*100),detail:`${u.length} of ${o.length} agent${1===o.length?"":"s"} ready.`})}await p.completeStep("agents",`${u.length} agent${1===u.length?"":"s"} linked to the workspace.`);let v=u.find(a=>o.some(b=>b.isPrimary&&am(m.slug,b.id)===a))??u[0];if(m.rules.kickoffMission){await p.startStep("kickoff",`Dispatching the kickoff mission to ${v}.`),await p.addActivity("kickoff",`Selected ${v} as the primary agent.`);try{let a=await Z({agentId:v,brief:m.brief,modelProfile:m.modelProfile,template:m.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 w=null,y=new Map,{workspaceId:aD(s),workspacePath:s,agentIds:u,primaryAgentId:v,kickoffRunId:i,kickoffStatus:j,kickoffError:k}}async function K(a){let b=a.workspaceId.trim();if(!b)throw Error("Workspace id is required.");let c=(await A({force:!0})).workspaces.find(a=>a.id===b);if(!c)throw Error("Workspace was not found.");let d=function(a,b,c){let d=a4(c);if(d)return j().isAbsolute(d)?d:j().join(j().dirname(a),d);let e=a4(b);if(!e)return a;let f=a5(e);if(!f)throw Error("Workspace name is required.");return j().join(j().dirname(a),f)}(c.path,a.name,a.directory);if(d!==c.path){await aX(d,c.path);try{await (0,f.rename)(c.path,d)}catch(a){throw Error(a instanceof Error?`Unable to move workspace directory. ${a.message}`:"Unable to move workspace directory.")}let a=(await av()).map(a=>a.workspace===c.path?{...a,workspace:d,agentDir:"string"==typeof a.agentDir&&a.agentDir.startsWith(`${c.path}${j().sep}`)?j().join(d,j().relative(c.path,a.agentDir)):a.agentDir}:a);await aw(a)}return w=null,y=new Map,{workspaceId:aD(d),previousWorkspaceId:c.id,workspacePath:d}}async function L(a){let b=a.workspaceId.trim();if(!b)throw Error("Workspace id is required.");let c=await A({force:!0,includeHidden:!0}),d=c.workspaces.find(a=>a.id===b);if(!d)throw Error("Workspace was not found.");let e=c.agents.filter(a=>a.workspaceId===d.id),g=c.runtimes.filter(a=>a.workspaceId===d.id).length;for(let a of e)await (0,p.zB)(["agents","delete",a.id,"--force","--json"]);try{let a=await av(),b=a.filter(a=>a.workspace!==d.path&&!e.some(b=>b.id===a.id));b.length!==a.length&&await aw(b)}catch{}return await (0,f.rm)(d.path,{recursive:!0,force:!0}),z(),{workspaceId:d.id,workspacePath:d.path,deletedAgentIds:e.map(a=>a.id),deletedRuntimeCount:g}}async function M(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,p.zB)(["config","set",t,b]):await P()&&await (0,p.zB)(["config","unset",t]),w=null,y=new Map,A({force:!0})}async function N(a){let b=function(a){let b=a?.trim();if(!b)return null;if("~"!==b&&!b.startsWith("~/")&&!j().isAbsolute(b))throw Error("Workspace root must be an absolute path or start with ~/.");return O(b)}(a.workspaceRoot);return await S({workspaceRoot:b??void 0}),w=null,y=new Map,A({force:!0})}function O(a){var b;let c=a?.trim();if(!c)return;let d="~"===(b=c)?h().homedir():b.startsWith("~/")?j().join(h().homedir(),b.slice(2)):b,e=j().normalize(d);return e.length>1?e.replace(/[\\/]+$/,""):e}async function P(){try{return await (0,p.zB)(["config","get",t,"--json"]),!0}catch(a){if((function(a){if(!a||"object"!=typeof a)return"";let b="stdout"in a?T(a.stdout):"",c="stderr"in a?T(a.stderr):"",d="message"in a&&"string"==typeof a.message?a.message:"";return`${d}
1
+ exports.id=907,exports.ids=[907],exports.modules={23:()=>{},1775:()=>{},2018:(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})},3214:(a,b,c)=>{"use strict";c.d(b,{GH:()=>j,P0:()=>i,eY:()=>e,hh:()=>h});var d=c(4126);let e={workspaceOnly:!0,generateStarterDocs:!0,generateMemory:!0,kickoffMission:!0},f={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"}},g={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 h(a){return f[a]}function i(a,b){let c=g[a];if("solo"===b){let a=c.find(a=>a.isPrimary)??c[0];return[{...a,name:"Builder"===a.role?"Default Agent":a.name,policy:(0,d.g0)("browser"===a.id?"browser":"worker"),enabled:!0}]}return c.map(a=>({id:a.id,role:a.role,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 j(a,b){let c=["AGENTS.md","SOUL.md","IDENTITY.md","TOOLS.md","HEARTBEAT.md"];return b.generateMemory&&c.push("MEMORY.md","memory/blueprint.md","memory/decisions.md"),b.generateStarterDocs&&c.push("docs/brief.md","docs/architecture.md","deliverables/README.md"),"frontend"===a&&c.push("docs/ux-notes.md"),"backend"===a&&c.push("docs/service-map.md"),"research"===a&&c.push("docs/research-plan.md"),"content"===a&&c.push("docs/content-brief.md"),c}},4126:(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}))},5615:(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},f=async()=>{c.percent=g(c.steps),await b?.(structuredClone(c))},i=(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){i(a,{status:"active",percent:Math.max(e(a).percent,2),detail:b}),await f()},async updateStep(a,b){i(a,b),await f()},async addActivity(a,b,c="active"){let g=e(a),h={id:`${a}-${d}`,message:b,status:c};d+=1,g.activities.push(h),"pending"===g.status&&"active"===c&&(g.status="active"),await f()},async completeStep(a,b){i(a,{status:"done",percent:100,detail:b}),await f()},async failStep(a,b){i(a,{status:"error",percent:100,detail:b}),await f()},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 f()}}}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})},8015:(a,b,c)=>{"use strict";c.d(b,{er:()=>E,Sn:()=>W,zw:()=>Z,RB:()=>Y,qu:()=>_,dM:()=>K,vy:()=>J,GM:()=>F,Y9:()=>V,xE:()=>M,x4:()=>X,Vg:()=>aa,sQ:()=>$,PR:()=>ab});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(4126);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}}],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(8912),r=c(2018),s=c(5615),t=c(3214);let u=(0,l.promisify)(d.execFile),v="gateway.remote.url",w=k().join(process.cwd(),".mission-control"),x=k().join(w,"settings.json"),y=k().join(w,"dispatches"),z=k().join(process.cwd(),"scripts","openclaw-mission-dispatch-runner.mjs"),A=k().join(i().homedir(),".openclaw"),B=null,C=null,D=new Map;function E(){B=null,D=new Map}async function F(a={}){if(!a.force&&B&&B.expiresAt>Date.now())return a.includeHidden?B.full:B.visible;if(C){let b=await C;return a.includeHidden?b.full:b.visible}C=G();try{let b=await C;return B={...b,expiresAt:Date.now()+1e4},a.includeHidden?b.full:b.visible}finally{C=null}}async function G(){if(!await (0,q.Vg)())return H(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,w,x,y=await af(),z=ac(y.workspaceRoot)??null,[A,B,C,D,E,F,G,H,I]=await Promise.allSettled([(0,q.VP)(["gateway","status","--json"]),(0,q.VP)(["config","get",v,"--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"===A.status?A.value:void 0,K="fulfilled"===B.status?br(B.value):void 0,L="fulfilled"===C.status?C.value:void 0,M="fulfilled"===D.status?D.value:[],N="fulfilled"===E.status?E.value:[],O="fulfilled"===F.status?F.value.models:[],P="fulfilled"===G.status?G.value:void 0,R="fulfilled"===H.status?H.value.sessions:[],S="fulfilled"===I.status?I.value:[],T=await al(M.map(a=>a.id),y),V=new Map,W=new Map,X=new Map,Y=[],Z=[],$=new Map((L?.heartbeat?.agents??[]).map(a=>[a.agentId,a])),_=new Map(N.map(a=>[a.id,a])),aa=new Map;for(let a of R){if(!a.agentId)continue;let b=aa.get(a.agentId)??[];b.push(a),aa.set(a.agentId,b)}let ab=(await Promise.all(R.map(a=>U(a,N,M)))).flat(),ad=bd(ab),ae=await Q(ad),ag=bd([...ae,...ab]);for(let b of M){let c=_.get(b.id),d=aZ(b.workspace),e=aa.get(b.id)??[],f=X.get(b.workspace)??await a2(b.workspace);X.set(b.workspace,f);let g=f.agents.find(a=>a.id===b.id)??null,h=(c?.skills??[]).filter(a=>!aN(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=W.get(b.workspace)??await a$(b.workspace,{agentId:b.id,agentName:b.name||b.identityName||c?.name||b.id,configuredSkills:h,configuredTools:c?.tools?.fs?.workspaceOnly?["fs.workspaceOnly"]:[]});W.set(b.workspace,l);let n=ag.filter(a=>a.agentId===b.id).sort(be),o=n.map(a=>a.id),p=n[0],q=e.map(a=>a.updatedAt??0).sort((a,b)=>b-a).at(0)||null,r=$.get(b.id),s=(a={rpcOk:!!J?.rpc?.ok,activeRuntime:p,heartbeatEnabled:!!r?.enabled,lastActiveAt:q}).rpcOk?a.activeRuntime?.status==="running"||a.activeRuntime?.status==="queued"?"engaged":a.heartbeatEnabled?"monitoring":a.lastActiveAt?"ready":"standby":"offline",t=function(a,b){var c;let d=aZ(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:bs(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}(V,b.workspace);t.agentIds.push(b.id),t.modelIds.push(j),t.activeRuntimeIds.push(...o),t.totalSessions+=e.length;let u={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:s,sessionCount:e.length,lastActiveAt:q,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`:"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:p,heartbeatEvery:r?.every??null,status:s}),activeRuntimeIds:o,heartbeat:{enabled:!!r?.enabled,every:r?.every??null,everyMs:r?.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"]:[],policy:i};for(let a of(Y.push(u),Z.push({id:`edge:${d}:${u.id}:contains`,sourceId:d,targetId:u.id,kind:"contains",label:"workspace member"}),Z.push({id:`edge:${u.id}:${j}:model`,sourceId:u.id,targetId:j,kind:"uses-model",label:"model assignment"}),o))Z.push({id:`edge:${u.id}:${a}:run`,sourceId:u.id,targetId:a,kind:"active-run",label:"runtime"})}let ah=new Map;for(let a of Y){let b=ah.get(a.workspaceId)??[];b.push(a),ah.set(a.workspaceId,b)}let ai=await Promise.all(Array.from(V.values()).map(async a=>{var b;let c,d=ah.get(a.id)??[],e=await a_(a.path,d);return{...a,modelIds:bl(a.modelIds),activeRuntimeIds:bl(a.activeRuntimeIds),health:(b=a.agentIds,(c=Y.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}})),aj=new Set(ai.filter(a=>X.get(a.path)?.hidden).map(a=>a.id)),ak=Y.filter(a=>!aj.has(a.workspaceId)),am=new Set(Y.filter(a=>aj.has(a.workspaceId)).map(a=>a.id)),an=ag.filter(a=>!(a.agentId&&am.has(a.agentId))&&!(a.workspaceId&&aj.has(a.workspaceId))),ao=new Set(ag.filter(a=>a.agentId&&am.has(a.agentId)||a.workspaceId&&aj.has(a.workspaceId)).map(a=>a.id)),ap=new Set([...aj,...am,...ao]),aq=Z.filter(a=>!ap.has(a.sourceId)&&!ap.has(a.targetId)),ar=ai.filter(a=>!aj.has(a.id)),as=a=>{let b=new Map;for(let c of a)b.set(c.modelId,(b.get(c.modelId)??0)+1);return O.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}))},at=(b=O,c=P,f=b.filter(a=>bf(a)),g=bl([...b.map(a=>a.key.split("/")[0]||"unknown"),...(c?.auth?.providers??[]).map(a=>a.provider).filter(bm),...(c?.auth?.oauth?.providers??[]).map(a=>a.provider).filter(bm)].filter(bm)),h=new Map((c?.auth?.providers??[]).filter(a=>bm(a.provider)).map(a=>[a.provider,a])),i=new Map((c?.auth?.oauth?.providers??[]).filter(a=>bm(a.provider)).map(a=>[a.provider,a])),j=br(c?.resolvedDefault??void 0),l=br(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=>bf(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 ${bg(c)} API key in terminal to use this route.`:`Connect ${bg(c)} auth in terminal to use this route.`),{provider:a,connected:j,canLogin:e,detail:k}}),t=(c?.auth?.missingProvidersInUse??[]).filter(bm),u=new Set(t),w=c?.auth?.unusableProfiles?.length??0,x=[],0===f.length&&x.push("No available models were detected yet."),f.length>0&&!n&&x.push("Choose a default model to finish setup."),n&&!p&&(o&&u.has(o)?x.push(`Default model is set, but ${bg(o)} auth is still missing.`):t.length>0?x.push(`Default model is set, but auth is still missing for: ${t.join(", ")}.`):x.push("The selected default model is not ready yet.")),t.length>0&&!n&&x.push(`Auth is still missing for: ${t.join(", ")}.`),w>0&&x.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:bl(x)}),au=L?.securityAudit?.findings?.filter(a=>"warn"===a.severity).map(a=>a.title||a.detail||"Security warning")??[],av=br(S[0]?.version||L?.overview?.version||L?.version),aw=br(L?.update?.registry?.latestVersion??void 0),ax=function(a){let b=br(a);if(b)return b.split(/\r?\n/,1)[0]?.trim()||b}(L?.update?.registry?.error??void 0),ay=av&&aw?bp(aw,av)>0:void 0,az=function(a){let b=br(a.legacyInfo);if(a.latestVersion&&a.currentVersion){let b=bp(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:av,latestVersion:aw,updateError:ax,legacyInfo:L?.overview?.update}),aA={installed:!0,loaded:!!J?.service?.loaded,rpcOk:!!J?.rpc?.ok,health:(d={rpcOk:J?.rpc?.ok,warningCount:au.length,runtimeIssueCount:T.issues.length}).rpcOk?d.warningCount>0||d.runtimeIssueCount>0?"degraded":"healthy":"offline",version:av,latestVersion:aw,updateAvailable:ay,updateError:ax,updateRoot:br(L?.update?.root??void 0),updateInstallKind:br(L?.update?.installKind??void 0),updatePackageManager:br(L?.update?.packageManager??void 0),workspaceRoot:bh(z),configuredWorkspaceRoot:z??null,dashboardUrl:`http://127.0.0.1:${J?.gateway?.port??18789}/`,gatewayUrl:J?.gateway?.probeUrl||"ws://127.0.0.1:18789",configuredGatewayUrl:K??null,bindMode:J?.gateway?.bindMode,port:J?.gateway?.port,updateChannel:L?.updateChannel||"stable",updateInfo:az,serviceLabel:J?.service?.label,modelReadiness:at,runtime:T,securityWarnings:au,issues:[...(e={gatewayStatus:A,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)}`])),...T.issues]},aB={generatedAt:new Date().toISOString(),mode:"live",diagnostics:aA,presence:S.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:{...aB,workspaces:ai,agents:Y,models:as(Y),runtimes:ag,relationships:Z},visible:{...aB,workspaces:ar,agents:ak,models:as(ak),runtimes:an,relationships:aq}}}catch(a){return H(n(a instanceof Error?a.message:"Unknown OpenClaw error."))}}function H(a){return{visible:a,full:a}}async function I(a){let b=await ak(a?[a]:[],{touch:!0});if(b.issues.length>0)throw B=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 J(a={}){return await I(a.agentId??null),B=null,F({force:!0,includeHidden:!0})}async function K(a={}){var b,c,d,e;let f=(b=await F({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 af(),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 ah(f,g);await I(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 ai(b),B=null,b}catch(b){let a={status:"failed",checkedAt:new Date().toISOString(),agentId:f,runId:null,summary:null,error:am(b)||"OpenClaw runtime smoke test failed."};return await ai(a),B=null,a}}async function L(a,b){if(!(0,r.iN)(a))throw Error("OpenClaw system setup is incomplete. Verify the CLI, gateway, and runtime state before dispatching missions.");if(!a.diagnostics.modelReadiness.ready)throw Error("OpenClaw model setup is incomplete. Configure a usable default model before dispatching missions.");let c=await K({agentId:b});if("passed"!==c.status)throw Error(c.error?`OpenClaw runtime preflight failed. ${c.error}`:"OpenClaw runtime preflight failed before the mission could be dispatched.")}async function M(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 F({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.");await L(k,l);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 aE(o.path,j):null,s=a.thinking??"medium",t=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:",...aF(h,f)].join("\n")):j,u=(g={agentId:l,mission:j,routedMission:t,thinking:s,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,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,startedAt:null,finishedAt:null,lastHeartbeatAt:null},observation:{runtimeId:null,observedAt:null},result:null,error:null});await O(u);try{u=await P(u)}catch(a){throw u={...u,status:"stalled",updatedAt:new Date().toISOString(),error:am(a)||"Mission dispatch runner could not be started."},await O(u),B=null,Error(u.error??"Mission dispatch runner could not be started.")}return B=null,{dispatchId:u.id,runId:null,agentId:l,status:u.status,summary:"Mission accepted and queued for OpenClaw execution.",payloads:[],meta:{outputDir:r?.absoluteOutputDir,outputDirRelative:r?.relativeOutputDir,notesDirRelative:r?.notesDirRelative}}}function N(a){return k().join(y,`${a}.json`)}async function O(a){let b=N(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 P(a){await (0,g.access)(z,f.constants.R_OK);let b=await (0,q.XP)(),c=(0,d.spawn)(process.execPath,[z,N(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 Q(a){let b=await R(),c=[],d=Date.now();for(let e of b)!function(a,b){let c=Date.parse(a.submittedAt);return b.filter(b=>!T(b)&&b.agentId===a.agentId&&(b.updatedAt??0)>=(Number.isNaN(c)?0:c-1500)).sort(be)[0]}(e,a)&&(e.observation.runtimeId||c.push(function(a,b){var c,d;let e=Date.parse(a.updatedAt),f=function(a,b){if("completed"===a.status)return"completed";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"}(a,b),g=(c=a,"completed"===(d=f)?aY(c.result?.summary||c.result?.result?.payloads?.[0]?.text||(c.outputDirRelative?`Completed \xb7 ${c.outputDirRelative}`:"Completed in OpenClaw"),90):"stalled"===d?aY(c.error||"Dispatch is no longer reporting progress.",90):"running"===d?c.outputDirRelative?`Running in OpenClaw \xb7 ${c.outputDirRelative}`:"Running in OpenClaw":c.outputDirRelative?`Queued for OpenClaw \xb7 ${c.outputDirRelative}`:"Queued for OpenClaw");return{id:`runtime:dispatch:${a.id}`,source:"turn",key:`dispatch:${a.id}`,title:aY(a.mission,38)||"Queued mission",subtitle:g,status:f,updatedAt:Number.isNaN(e)?Date.parse(a.submittedAt)||null:e,ageMs:Number.isNaN(e)?null:Math.max(b-e,0),agentId:a.agentId,workspaceId:a.workspaceId??void 0,runId:a.result?.runId,metadata:{dispatchId:a.id,outputDir:a.outputDir,outputDirRelative:a.outputDirRelative,notesDirRelative:a.notesDirRelative,error:a.error,pendingCreation:"queued"===f}}}(e,d)));return c.sort(be)}async function R(){try{let a=await (0,g.readdir)(y,{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(y,a.name),h=await S(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 S(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?b:"queued");return{id:f.id,status:h,agentId:f.agentId,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,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 T(a){return a.id.startsWith("runtime:dispatch:")}async function U(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)?aZ(o):void 0,q=bj(d.key,"task"),r=bj(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=bj((j=d).key,"task")||j.key||j.sessionId||String(Math.random()),l=j.sessionId||bt(j.agentId||"sessionless"),`runtime:${l}:${bt(k)}`),v=q?q.slice(0,8):null,{id:u,source:"session",key:d.key||"unknown-session",title:v?`${bk(d.agentId)} \xb7 ${v}`:`${bk(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?{input:d.inputTokens??0,output:d.outputTokens??0,total:d.totalTokens,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 x=c.find(b=>b.id===a.agentId),y=b.find(b=>b.id===a.agentId),z=await aU(a.agentId,a.sessionId,x?.workspace||y?.workspace);if(!z)return[w];try{let a=await (0,g.readFile)(z,"utf8"),b=aW(a,w,x?.workspace||y?.workspace).filter(a=>!a.prompt.toLowerCase().startsWith("read heartbeat.md if it exists"));if(0===b.length)return[w];return b.slice(-6).reverse().map(a=>{var b,c,d,e;let f,g,h,i;return b=w,c=a,g=Date.parse(c.updatedAt),h=(d=c.prompt,e=b.agentId,(f=d.trim())?aY(f,38):`${bk(e)} run`),i=c.warningSummary?aY(`Completed with fallback: ${c.warningSummary}`,90):c.finalText?aY(c.finalText,90):"stalled"===c.status?"Run stalled":"Main session run",{id:`runtime:${b.sessionId}:${c.id}`,source:"turn",key:`${b.key}:turn:${c.id}`,title:h,subtitle:i,status:c.status,updatedAt:Number.isNaN(g)?b.updatedAt:g,ageMs:Number.isNaN(g)?b.ageMs:Math.max(Date.now()-g,0),agentId:b.agentId,workspaceId:b.workspaceId,modelId:b.modelId,sessionId:b.sessionId,runId:c.runId||c.id,tokenUsage:c.tokenUsage,metadata:{...b.metadata,turnId:c.id,turnPrompt:c.prompt,stage:"main.turn",historical:"running"!==c.status,createdFiles:c.createdFiles,warnings:c.warnings,warningSummary:c.warningSummary}}})}catch{return[w]}}async function V(a){let b=await F({includeHidden:!0}),c=b.runtimes.find(b=>b.id===a);if(c||(c=(b=await F({force:!0,includeHidden:!0})).runtimes.find(b=>b.id===a)),!c)return{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};if("fallback"===b.mode)return{runtimeId:a,sessionId:c.sessionId,taskId:c.taskId,status:"available",finalText:"Fallback mode is active. Connect a real OpenClaw gateway to inspect live runtime output.",finalTimestamp:new Date().toISOString(),stopReason:"fallback",errorMessage:null,items:[{id:"fallback-assistant",role:"assistant",timestamp:new Date().toISOString(),text:"Fallback mode is active. Connect a real OpenClaw gateway to inspect live runtime output.",stopReason:"fallback",isError:!1}],createdFiles:[],warnings:[],warningSummary:null};if(!c.sessionId||!c.agentId)return{runtimeId:a,sessionId:c.sessionId,taskId:c.taskId,status:"missing",finalText:null,finalTimestamp:null,stopReason:null,errorMessage:"This runtime does not expose a session transcript yet.",items:[],createdFiles:[],warnings:[],warningSummary:null};let d=b.agents.find(a=>a.id===c.agentId),e=await aU(c.agentId,c.sessionId,d?.workspacePath);if(!e)return{runtimeId:a,sessionId:c.sessionId,taskId:c.taskId,status:"missing",finalText:null,finalTimestamp:null,stopReason:null,errorMessage:"No transcript file was found for this runtime session.",items:[],createdFiles:[],warnings:[],warningSummary:null};try{let a=await (0,g.readFile)(e,"utf8");return function(a,b,c){let d=aW(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):null;if(c)return aV(a,c)}let e=d.at(-1);return e?aV(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}}(c,a,d?.workspacePath)}catch(b){return{runtimeId:a,sessionId:c.sessionId,taskId:c.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 W(a){let b=bs(a.id.trim());if(!b)throw Error("Agent id is required.");let c=await F({force:!0,includeHidden:!0});!function(a,b,c){let d=a.agents.find(a=>a.id===b);if(!d)return;let e=aK(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,a.workspaceId);let d=c.workspaces.find(b=>b.id===a.workspaceId);if(!d)throw Error("Workspace was not found for this agent.");let e=(0,m.g0)(a.policy?.preset??m.iN,a.policy),f=(0,m.Cf)(e.preset),g=br(a.name)??f.defaultName,h=br(a.emoji)??f.defaultEmoji,i=br(a.theme)??f.defaultTheme,j=p(o(e.preset,a.heartbeat)),k=c.agents.find(a=>a.workspaceId===d.id&&"setup"===a.policy.preset)?.id??null,l=["agents","add",b,"--workspace",d.path,"--agent-dir",aL(d.path,b),"--non-interactive","--json"];a.modelId?.trim()&&l.push("--model",a.modelId.trim()),await (0,q.zB)(l);let n=await aO({workspacePath:d.path,agentId:b,agentName:g,policy:e,setupAgentId:k}),r=await aQ(b,d.path,{name:g,model:br(a.modelId),heartbeat:j,skills:[n],tools:"workspace-only"===e.fileAccess?{fs:{workspaceOnly:!0}}:null});return await aT(b,d.path,{name:g||r.name,emoji:h,theme:i,avatar:br(a.avatar)}),await a3(d.path,{id:b,name:g,role:(0,m._P)(e.preset),skillId:n,modelId:br(a.modelId),isPrimary:!1,policy:e}),B=null,{agentId:b,workspaceId:d.id}}async function X(a){var b;let c=a.id.trim();if(!c)throw Error("Agent id is required.");let d=await F({force:!0,includeHidden:!0}),e=d.agents.find(a=>a.id===c);if(!e)throw Error("Agent was not found.");let f=d.workspaces.find(b=>b.id===(a.workspaceId||e.workspaceId));if(!f)throw Error("Workspace was not found for this agent.");let g=(0,m.g0)(a.policy?.preset??e.policy.preset,a.policy??e.policy),h=br(e.name),i=br(e.identity.emoji),j=br(e.identity.theme),k=p(o(g.preset,a.heartbeat??{enabled:(b=e.heartbeat).enabled,every:b.every??void 0})),l=d.agents.find(a=>a.workspaceId===f.id&&"setup"===a.policy.preset&&a.id!==c)?.id??null,n=await aO({workspacePath:f.path,agentId:c,agentName:br(a.name)??h??c,policy:g,setupAgentId:l}),q=await aQ(c,f.path,{name:br(a.name),model:br(a.modelId),heartbeat:k,skills:[...e.skills,n],tools:"workspace-only"===g.fileAccess?{fs:{workspaceOnly:!0}}:null});return await aT(c,f.path,{name:br(a.name)??q.name,emoji:br(a.emoji)??i,theme:br(a.theme)??j,avatar:br(a.avatar)}),await a3(f.path,{id:c,name:br(a.name)??h??q.name??c,modelId:br(a.modelId)??("unassigned"===e.modelId?null:e.modelId),isPrimary:e.isDefault,policy:g}),B=null,{agentId:c,workspaceId:f.id}}async function Y(a){let b=a.agentId.trim();if(!b)throw Error("Agent id is required.");let c=await F({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 aR(),b=a.filter(a=>a.id!==d.id);b.length!==a.length&&await aS(b)}catch{}if(e){await a4(e.path,d.id);try{await (0,g.rm)(k().join(e.path,"skills",aM(d.id)),{recursive:!0,force:!0})}catch{}}return B=null,D=new Map,{agentId:d.id,workspaceId:d.workspaceId,workspacePath:d.workspacePath,deletedRuntimeCount:f}}async function Z(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=bs(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={...t.eY,...a.rules??{}},i=(a.agents?.length?a.agents:(0,t.P0)(d,e)).map(a=>({id:bs(a.id)||"agent",role:a.role.trim()||bk(a.id),name:br(a.name)??bk(a.id),enabled:!1!==a.enabled,emoji:br(a.emoji),theme:br(a.theme),skillId:br(a.skillId),modelId:br(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=aJ(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:br(a.brief),directory:br(a.directory),modelId:br(a.modelId),repoUrl:br(a.repoUrl),existingPath:br(a.existingPath),sourceMode:f,template:d,teamPreset:e,modelProfile:g,rules:h,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 au(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 F({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=>aI(b,a.id)),e=aJ(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 "${aK(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 ao({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 ap(q,{name:l.name,brief:l.brief,template:l.template,teamPreset:l.teamPreset,modelProfile:l.modelProfile,rules:l.rules,sourceMode:l.sourceMode,agents:n}),await p.completeStep("scaffold","Workspace files and starter docs are in place.");let u=[];for(let a of(await p.startStep("agents",1===n.length?"Provisioning the first workspace agent.":`Provisioning ${n.length} workspace agents.`),n)){let b=u.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 as({workspacePath:q,workspaceSlug:l.slug,workspaceModelId:l.modelId,agent:a});u.push(d),await p.addActivity("agents",`Created ${a.name} as ${d}.`,"done"),await p.updateStep("agents",{percent:Math.round(u.length/n.length*100),detail:`${u.length} of ${n.length} agent${1===n.length?"":"s"} ready.`})}await p.completeStep("agents",`${u.length} agent${1===u.length?"":"s"} linked to the workspace.`);let v=u.find(a=>n.some(b=>b.isPrimary&&aI(l.slug,b.id)===a))??u[0];if(l.rules.kickoffMission){await p.startStep("kickoff",`Dispatching the kickoff mission to ${v}.`),await p.addActivity("kickoff",`Selected ${v} as the primary agent.`);try{let a=await at({agentId:v,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 B=null,D=new Map,{workspaceId:aZ(q),workspacePath:q,agentIds:u,primaryAgentId:v,kickoffRunId:i,kickoffStatus:j,kickoffError:k}}async function $(a){let b=a.workspaceId.trim();if(!b)throw Error("Workspace id is required.");let c=(await F({force:!0})).workspaces.find(a=>a.id===b);if(!c)throw Error("Workspace was not found.");let d=function(a,b,c){let d=br(c);if(d)return k().isAbsolute(d)?d:k().join(k().dirname(a),d);let e=br(b);if(!e)return a;let f=bs(e);if(!f)throw Error("Workspace name is required.");return k().join(k().dirname(a),f)}(c.path,a.name,a.directory);if(d!==c.path){await bi(d,c.path);try{await (0,g.rename)(c.path,d)}catch(a){throw Error(a instanceof Error?`Unable to move workspace directory. ${a.message}`:"Unable to move workspace directory.")}let a=(await aR()).map(a=>a.workspace===c.path?{...a,workspace:d,agentDir:"string"==typeof a.agentDir&&a.agentDir.startsWith(`${c.path}${k().sep}`)?k().join(d,k().relative(c.path,a.agentDir)):a.agentDir}:a);await aS(a)}return B=null,D=new Map,{workspaceId:aZ(d),previousWorkspaceId:c.id,workspacePath:d}}async function _(a){let b=a.workspaceId.trim();if(!b)throw Error("Workspace id is required.");let c=await F({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 aR(),b=a.filter(a=>a.workspace!==d.path&&!e.some(b=>b.id===a.id));b.length!==a.length&&await aS(b)}catch{}return await (0,g.rm)(d.path,{recursive:!0,force:!0}),E(),{workspaceId:d.id,workspacePath:d.path,deletedAgentIds:e.map(a=>a.id),deletedRuntimeCount:f}}async function aa(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",v,b]):await ad()&&await (0,q.zB)(["config","unset",v]),B=null,D=new Map,F({force:!0})}async function ab(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 ac(b)}(a.workspaceRoot),c=await af();return await ag({...b?{workspaceRoot:b}:{},...c.runtimePreflight?{runtimePreflight:c.runtimePreflight}:{}}),B=null,D=new Map,F({force:!0})}function ac(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 ad(){try{return await (0,q.zB)(["config","get",v,"--json"]),!0}catch(a){if(am(a).includes("Config path not found"))return!1;throw a}}async function ae(){return ac((await af()).workspaceRoot)??null}async function af(){let a;try{a=await (0,g.readFile)(x,"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?ac(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 ag(a){await (0,g.mkdir)(w,{recursive:!0}),await (0,g.writeFile)(x,`${JSON.stringify(a,null,2)}
3
+ `,"utf8")}function ah(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 ai(a){let b=await af(),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 ag({...b.workspaceRoot?{workspaceRoot:b.workspaceRoot}:{},runtimePreflight:{smokeTests:c}}))}async function aj(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 ak(a,b={}){let c=[...new Set(a.filter(Boolean))],d=await aj(A,{createIfMissing:!0,touch:b.touch}),e=await Promise.all(c.map(async a=>{let c=k().join(A,"agents",a,"sessions"),d=await aj(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??A}`,...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:A,stateWritable:d.writable,sessionStoreWritable:d.writable&&f,sessionStores:e,issues:g}}async function al(a,b){let c,d=await ak(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],ah(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 am(a){if(!a||"object"!=typeof a)return"";let b="stdout"in a?an(a.stdout):"",c="stderr"in a?an(a.stderr):"",d="message"in a&&"string"==typeof a.message?a.message:"";return`${d}
2
4
  ${b}
3
- ${c}`})(a).includes("Config path not found"))return!1;throw a}}async function Q(){return O((await R()).workspaceRoot)??null}async function R(){let a;try{a=await (0,f.readFile)(v,"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?O(b.workspaceRoot):void 0;return c?{workspaceRoot:c}:{}}catch{return{}}}async function S(a){await (0,f.mkdir)(u,{recursive:!0}),await (0,f.writeFile)(v,`${JSON.stringify(a,null,2)}
4
- `,"utf8")}function T(a){return"string"==typeof a?a:a instanceof Uint8Array?Buffer.from(a).toString():""}async function U(a){if("existing"===a.sourceMode)return void await aa(a.targetDir);if("clone"===a.sourceMode){let b=a4(a.repoUrl);if(!b)throw Error("Repository URL is required when cloning a repo.");await aX(a.targetDir,""),await (0,f.mkdir)(j().dirname(a.targetDir),{recursive:!0}),await ab("git",["clone",b,a.targetDir]);return}await _(a.targetDir)}async function V(a,b){var c,d,e,g,h,i,k,m,n,o,p,q,s,t,u,v,w,x;let y,z,A,B,C,D,E=(0,r.hh)(b.template),F=new Date().toISOString(),G=await ae(a);for(let H of(await X(a),await (0,f.mkdir)(j().join(a,"skills"),{recursive:!0}),await (0,f.mkdir)(j().join(a,".openclaw","project-shell","runs"),{recursive:!0}),await (0,f.mkdir)(j().join(a,".openclaw","project-shell","tasks"),{recursive:!0}),await ac(j().join(a,".openclaw","project-shell","events.jsonl"),""),await ac(j().join(a,".openclaw","project.json"),`${JSON.stringify({version:1,slug:a5(b.name),name:b.name,icon:E.icon,createdAt:F,updatedAt:F,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,isPrimary:!!a.isPrimary,skillId:a4(a.skillId)??null,modelId:a4(a.modelId)??null,policy:a.policy??null}))},null,2)}
5
- `),await ac(j().join(a,"AGENTS.md"),(c={name:b.name,brief:b.brief,template:b.template,sourceMode:b.sourceMode,agents:b.agents,rules:b.rules},y=(0,r.hh)(c.template),z=c.agents.map(a=>`- ${a.role}: ${a.name}${a.skillId?` \xb7 skill ${a.skillId}`:""}${a.policy?` \xb7 ${(0,l._P)(a.policy.preset)}`:""}`),`# ${c.name}
5
+ ${c}`}function an(a){return"string"==typeof a?a:a instanceof Uint8Array?Buffer.from(a).toString():""}async function ao(a){if("existing"===a.sourceMode)return void await aw(a.targetDir);if("clone"===a.sourceMode){let b=br(a.repoUrl);if(!b)throw Error("Repository URL is required when cloning a repo.");await bi(a.targetDir,""),await (0,g.mkdir)(k().dirname(a.targetDir),{recursive:!0}),await ax("git",["clone",b,a.targetDir]);return}await av(a.targetDir)}async function ap(a,b){var c,d,e,f,h,i,j,l,n,o,p,q,r,s,u,v,w,x;let y,z,A,B,C,D,E=(0,t.hh)(b.template),F=new Date().toISOString(),G=await aA(a);for(let H of(await ar(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 ay(k().join(a,".openclaw","project-shell","events.jsonl"),""),await ay(k().join(a,".openclaw","project.json"),`${JSON.stringify({version:1,slug:bs(b.name),name:b.name,icon:E.icon,createdAt:F,updatedAt:F,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,isPrimary:!!a.isPrimary,skillId:br(a.skillId)??null,modelId:br(a.modelId)??null,policy:a.policy??null}))},null,2)}
6
+ `),await ay(k().join(a,"AGENTS.md"),(c={name:b.name,brief:b.brief,template:b.template,sourceMode:b.sourceMode,agents:b.agents,rules:b.rules},y=(0,t.hh)(c.template),z=c.agents.map(a=>`- ${a.role}: ${a.name}${a.skillId?` \xb7 skill ${a.skillId}`:""}${a.policy?` \xb7 ${(0,m._P)(a.policy.preset)}`:""}`),`# ${c.name}
6
7
 
7
8
  Shared project context for all agents working in this workspace.
8
9
 
@@ -34,7 +35,7 @@ ${c.brief||"Clarify the project goal, definition of done, constraints, and succe
34
35
  - Be concise in chat and write longer output to files when the artifact matters.
35
36
  - Put task-specific deliverables, drafts, reports, and docs inside per-run folders under deliverables/.
36
37
  - Avoid writing final artifacts to the workspace root unless explicitly requested.
37
- `)),await ac(j().join(a,"SOUL.md"),(d=b.template,e=b.brief,A=(0,r.hh)(d),`# SOUL
38
+ `)),await ay(k().join(a,"SOUL.md"),(d=b.template,e=b.brief,A=(0,t.hh)(d),`# SOUL
38
39
 
39
40
  ## My Purpose
40
41
  Help this ${A.label.toLowerCase()} workspace turn intent into real outcomes with pragmatic execution, verification, and durable memory.
@@ -52,13 +53,13 @@ Help this ${A.label.toLowerCase()} workspace turn intent into real outcomes with
52
53
 
53
54
  ${e?`## Active Focus
54
55
  ${e}
55
- `:""}`)),await ac(j().join(a,"IDENTITY.md"),(g=b.template,B=(0,r.hh)(g),`# IDENTITY
56
+ `:""}`)),await ay(k().join(a,"IDENTITY.md"),(f=b.template,B=(0,t.hh)(f),`# IDENTITY
56
57
 
57
58
  ## Role
58
59
  This workspace hosts a ${B.label.toLowerCase()} team coordinated through OpenClaw.
59
60
 
60
61
  **Vibe:** pragmatic, concise, quality-minded, workspace-grounded
61
- `)),await ac(j().join(a,"TOOLS.md"),(h=b.template,i=G,C=(0,r.hh)(h),`# TOOLS
62
+ `)),await ay(k().join(a,"TOOLS.md"),(h=b.template,i=G,C=(0,t.hh)(h),`# TOOLS
62
63
 
63
64
  Repository commands and workflow notes for this ${C.label.toLowerCase()} workspace.
64
65
 
@@ -68,14 +69,14 @@ ${i.map(a=>`- ${a}`).join("\n")}
68
69
  ## Notes
69
70
  - Replace these examples with sharper project-specific commands when the repo exposes them.
70
71
  - Prefer repeatable commands that other agents can run without interpretation drift.
71
- `)),await ac(j().join(a,"HEARTBEAT.md"),(k=b.template,D=(0,r.hh)(k),`# HEARTBEAT
72
+ `)),await ay(k().join(a,"HEARTBEAT.md"),(j=b.template,D=(0,t.hh)(j),`# HEARTBEAT
72
73
 
73
74
  - Start each substantial task by refreshing the brief, docs, and current files.
74
75
  - Keep the ${D.label.toLowerCase()} workspace coherent across code, docs, and memory.
75
76
  - Prefer explicit handoffs between implementation, review, testing, and knowledge capture.
76
- `)),b.rules.generateMemory&&(await (0,f.mkdir)(j().join(a,"memory"),{recursive:!0}),await ac(j().join(a,"MEMORY.md"),(m=b.name,n=b.template,o=b.brief,`# ${m} Memory
77
+ `)),b.rules.generateMemory&&(await (0,g.mkdir)(k().join(a,"memory"),{recursive:!0}),await ay(k().join(a,"MEMORY.md"),(l=b.name,n=b.template,o=b.brief,`# ${l} Memory
77
78
 
78
- Durable project facts for this ${(0,r.hh)(n).label.toLowerCase()} workspace.
79
+ Durable project facts for this ${(0,t.hh)(n).label.toLowerCase()} workspace.
79
80
 
80
81
  ## Current brief
81
82
  ${o||"No brief captured yet. Fill this in as soon as the project goal is clarified."}
@@ -83,20 +84,20 @@ ${o||"No brief captured yet. Fill this in as soon as the project goal is clarifi
83
84
  ## Stable facts
84
85
  - Add durable architecture, product, or workflow facts here.
85
86
  - Move longer notes into memory/*.md when they outgrow this file.
86
- `)),await ac(j().join(a,"memory","blueprint.md"),(p=b.name,q=b.template,s=b.brief,`# ${p} Blueprint
87
+ `)),await ay(k().join(a,"memory","blueprint.md"),(p=b.name,q=b.template,r=b.brief,`# ${p} Blueprint
87
88
 
88
89
  ## Workspace type
89
- ${(0,r.hh)(q).label}
90
+ ${(0,t.hh)(q).label}
90
91
 
91
92
  ## Outcome
92
- ${s||"Define the target outcome, user impact, and quality bar for this workspace."}
93
+ ${r||"Define the target outcome, user impact, and quality bar for this workspace."}
93
94
 
94
95
  ## Constraints
95
96
  - Add technical, product, legal, or operational constraints here.
96
97
 
97
98
  ## Unknowns
98
99
  - Capture unresolved questions that block confident execution.
99
- `)),await ac(j().join(a,"memory","decisions.md"),`# Decisions
100
+ `)),await ay(k().join(a,"memory","decisions.md"),`# Decisions
100
101
 
101
102
  Use this file for durable decisions that should survive across sessions.
102
103
 
@@ -105,10 +106,10 @@ Use this file for durable decisions that should survive across sessions.
105
106
  - Decision:
106
107
  - Context:
107
108
  - Consequence:
108
- `)),b.rules.generateStarterDocs&&(await (0,f.mkdir)(j().join(a,"docs"),{recursive:!0}),await (0,f.mkdir)(j().join(a,"deliverables"),{recursive:!0}),await ac(j().join(a,"docs","brief.md"),(t=b.name,u=b.template,v=b.brief,w=b.sourceMode,`# ${t} Brief
109
+ `)),b.rules.generateStarterDocs&&(await (0,g.mkdir)(k().join(a,"docs"),{recursive:!0}),await (0,g.mkdir)(k().join(a,"deliverables"),{recursive:!0}),await ay(k().join(a,"docs","brief.md"),(s=b.name,u=b.template,v=b.brief,w=b.sourceMode,`# ${s} Brief
109
110
 
110
111
  ## Template
111
- ${(0,r.hh)(u).label}
112
+ ${(0,t.hh)(u).label}
112
113
 
113
114
  ## Source mode
114
115
  ${w}
@@ -121,24 +122,24 @@ ${v||"Clarify the main goal, target user, and success definition for this worksp
121
122
 
122
123
  ## Open questions
123
124
  - List the unknowns worth resolving first.
124
- `)),await ac(j().join(a,"docs","architecture.md"),(x=b.template,`# Architecture
125
+ `)),await ay(k().join(a,"docs","architecture.md"),(x=b.template,`# Architecture
125
126
 
126
127
  ## Current shape
127
- - Describe the main components, systems, or content lanes in this ${(0,r.hh)(x).label.toLowerCase()} workspace.
128
+ - Describe the main components, systems, or content lanes in this ${(0,t.hh)(x).label.toLowerCase()} workspace.
128
129
 
129
130
  ## Dependencies
130
131
  - List critical external services, repos, data sources, or channels.
131
132
 
132
133
  ## Risks
133
134
  - Capture structural, operational, or delivery risks here.
134
- `)),await ac(j().join(a,"deliverables","README.md"),`# Deliverables
135
+ `)),await ay(k().join(a,"deliverables","README.md"),`# Deliverables
135
136
 
136
137
  Use this folder for substantial output artifacts that should be easy to hand off or review.
137
138
 
138
139
  - Create one subfolder per task or run, for example \`deliverables/2026-03-07-15-30-00-launch-brief/\`.
139
140
  - Put drafts, reports, docs, and publishable assets for that task inside its run folder.
140
141
  - Keep filenames descriptive and tied to the task or audience.
141
- `),"frontend"===b.template&&await ac(j().join(a,"docs","ux-notes.md"),at("ux")),"backend"===b.template&&await ac(j().join(a,"docs","service-map.md"),at("backend")),"research"===b.template&&await ac(j().join(a,"docs","research-plan.md"),at("research")),"content"===b.template&&await ac(j().join(a,"docs","content-brief.md"),at("content"))),b.agents)){let b=a4(H.skillId);b&&(await (0,f.mkdir)(j().join(a,"skills",b),{recursive:!0}),await ac(j().join(a,"skills",b,"SKILL.md"),function(a,b){switch(a){case"project-builder":return`# Project Builder
142
+ `),"frontend"===b.template&&await ay(k().join(a,"docs","ux-notes.md"),aP("ux")),"backend"===b.template&&await ay(k().join(a,"docs","service-map.md"),aP("backend")),"research"===b.template&&await ay(k().join(a,"docs","research-plan.md"),aP("research")),"content"===b.template&&await ay(k().join(a,"docs","content-brief.md"),aP("content"))),b.agents)){let b=br(H.skillId);b&&(await (0,g.mkdir)(k().join(a,"skills",b),{recursive:!0}),await ay(k().join(a,"skills",b,"SKILL.md"),function(a,b){switch(a){case"project-builder":return`# Project Builder
142
143
 
143
144
  Use this skill when implementing changes in the current project.
144
145
 
@@ -213,11 +214,11 @@ Use this skill when operating in the current workspace.
213
214
  - Produce durable artifacts when the work needs to be handed off.
214
215
  - Put task-specific artifacts in the current deliverables run folder and keep notes in memory/.
215
216
  - Keep outputs specific, reviewable, and easy for other agents to extend.
216
- `}}(b,H.role)))}}let W=[".openclaw/agents/",".openclaw/project-shell/events.jsonl",".openclaw/project-shell/runs/",".openclaw/project-shell/tasks/"];async function X(a){let b=j().join(a,".gitignore"),c="";try{c=await (0,f.readFile)(b,"utf8")}catch{c=""}let d=W.filter(a=>!c.includes(a));if(0===d.length)return;let e=["# OpenClaw local runtime state",...d].join("\n"),g=c.trim().length>0?`${c.trimEnd()}
217
+ `}}(b,H.role)))}}let aq=[".openclaw/agents/",".openclaw/project-shell/events.jsonl",".openclaw/project-shell/runs/",".openclaw/project-shell/tasks/"];async function ar(a){let b=k().join(a,".gitignore"),c="";try{c=await (0,g.readFile)(b,"utf8")}catch{c=""}let d=aq.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()}
217
218
 
218
219
  ${e}
219
220
  `:`${e}
220
- `;await ad(b,g)}async function Y(a){let b=am(a.workspaceSlug,a.agent.id),c=a4(a.agent.modelId)??a4(a.workspaceModelId),d=(0,l.g0)(a.agent.policy?.preset??(0,l.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",ap(a.workspacePath,b),"--non-interactive","--json"];c&&e.push("--model",c),await (0,p.zB)(e);let f=await as({workspacePath:a.workspacePath,agentId:b,agentName:a.agent.name,policy:d}),g=await au(b,a.workspacePath,{name:a4(a.agent.name),model:c,heartbeat:o(a.agent.heartbeat),skills:[a4(a.agent.skillId),f].filter(a=>!!a),tools:"workspace-only"===d.fileAccess?{fs:{workspaceOnly:!0}}:null});return await ax(b,a.workspacePath,{name:a4(a.agent.name)??g.name,emoji:a4(a.agent.emoji),theme:a4(a.agent.theme)}),b}async function Z(a,b={}){var c,d;let e,f=(c=a.template,d=a.brief,e=(0,r.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,p.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 $(a){let b=aW(await Q());if("existing"===a.sourceMode){let b=a.existingPath||a.directory;if(!b)throw Error("Choose an existing folder for this workspace.");return j().isAbsolute(b)?b:j().resolve(b)}return a.directory?j().isAbsolute(a.directory)?a.directory:j().join(b,a.directory):j().join(b,a.slug)}async function _(a){try{if(!(await (0,f.stat)(a)).isDirectory())throw Error("Target workspace path exists and is not a directory.");if((await (0,f.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,f.mkdir)(a,{recursive:!0});if(b instanceof Error)throw b;throw Error("Unable to prepare the workspace directory.")}await (0,f.mkdir)(a,{recursive:!0})}async function aa(a){try{if(!(await (0,f.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 ab(a,b,c={}){try{await s(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 ac(a,b){try{await (0,f.access)(a)}catch{await (0,f.mkdir)(j().dirname(a),{recursive:!0}),await (0,f.writeFile)(a,b,"utf8")}}async function ad(a,b){await (0,f.mkdir)(j().dirname(a),{recursive:!0}),await (0,f.writeFile)(a,b,"utf8")}async function ae(a){let b=[],c=await af(a),d=await ag(a),e=await ah(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."),aS(b).slice(0,6)}async function af(a){let b=j().join(a,"package.json");try{let e=await (0,f.readFile)(b,"utf8"),g=JSON.parse(e),h=g.scripts??{},i=await ak(a,g.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 ag(a){let b=j().join(a,"Makefile");try{return((await (0,f.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 ah(a){let b=[];return await al(j().join(a,"pyproject.toml"))&&b.push("Use `pytest` for Python verification if the project exposes a test suite."),await al(j().join(a,"requirements.txt"))&&b.push("Install Python dependencies in a virtualenv before running project commands."),b}async function ai(a,b){var c;let d,e,g,h=(c=b,e=[(d=new Date).getFullYear(),a0(d.getMonth()+1),a0(d.getDate()),a0(d.getHours()),a0(d.getMinutes()),a0(d.getSeconds())].join("-"),g=a5(c.replace(/^\[[^\]]+\]\s*/i,"").trim()).slice(0,48).replace(/^-+|-+$/g,"")||"task",`${e}-${g}`),i=j().join(a,"deliverables",h),k=a1(j().join("deliverables",h)),l=a1("memory");return await (0,f.mkdir)(i,{recursive:!0}),await (0,f.mkdir)(j().join(a,"memory"),{recursive:!0}),{runFolder:h,absoluteOutputDir:i,relativeOutputDir:k,notesDirRelative:l}}function aj(a,b){let c=[`- Preset: ${(0,l._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 ak(a,b){let c=a4(b);return c?c.split("@")[0]:await al(j().join(a,"pnpm-lock.yaml"))?"pnpm":await al(j().join(a,"yarn.lock"))?"yarn":"npm"}async function al(a){try{return await (0,f.access)(a),!0}catch{return!1}}function am(a,b){return`${a}-${a5(b)||"agent"}`}function an(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 ao(a,b){return a.workspaces.find(a=>a.id===b.workspaceId)?.name??j().basename(b.workspacePath)}function ap(a,b){return j().join(a,".openclaw","agents",b,"agent")}function aq(a){return`agent-policy-${a5(a)||"agent"}`}function ar(a){return!!(a&&/^agent-policy-/.test(a))}async function as(a){var b,c,d;let e,f=aq(a.agentId);return await ad(j().join(a.workspacePath,"skills",f,"SKILL.md"),`${(b=a.agentName,c=a.policy,d=a.setupAgentId,e=(0,l._P)(c.preset),`# ${b} Policy
221
+ `;await az(b,f)}async function as(a){let b=aI(a.workspaceSlug,a.agent.id),c=br(a.agent.modelId)??br(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",aL(a.workspacePath,b),"--non-interactive","--json"];c&&e.push("--model",c),await (0,q.zB)(e);let f=await aO({workspacePath:a.workspacePath,agentId:b,agentName:a.agent.name,policy:d}),g=await aQ(b,a.workspacePath,{name:br(a.agent.name),model:c,heartbeat:p(a.agent.heartbeat),skills:[br(a.agent.skillId),f].filter(a=>!!a),tools:"workspace-only"===d.fileAccess?{fs:{workspaceOnly:!0}}:null});return await aT(b,a.workspacePath,{name:br(a.agent.name)??g.name,emoji:br(a.agent.emoji),theme:br(a.agent.theme)}),b}async function at(a,b={}){var c,d;let e,f=(c=a.template,d=a.brief,e=(0,t.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 au(a){let b=bh(await ae());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 av(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 aw(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 ax(a,b,c={}){try{await u(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 ay(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 az(a,b){await (0,g.mkdir)(k().dirname(a),{recursive:!0}),await (0,g.writeFile)(a,b,"utf8")}async function aA(a){let b=[],c=await aB(a),d=await aC(a),e=await aD(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."),bc(b).slice(0,6)}async function aB(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 aG(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 aC(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 aD(a){let b=[];return await aH(k().join(a,"pyproject.toml"))&&b.push("Use `pytest` for Python verification if the project exposes a test suite."),await aH(k().join(a,"requirements.txt"))&&b.push("Install Python dependencies in a virtualenv before running project commands."),b}async function aE(a,b){var c;let d,e,f,h=(c=b,e=[(d=new Date).getFullYear(),bn(d.getMonth()+1),bn(d.getDate()),bn(d.getHours()),bn(d.getMinutes()),bn(d.getSeconds())].join("-"),f=bs(c.replace(/^\[[^\]]+\]\s*/i,"").trim()).slice(0,48).replace(/^-+|-+$/g,"")||"task",`${e}-${f}`),i=k().join(a,"deliverables",h),j=bo(k().join("deliverables",h)),l=bo("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 aF(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 aG(a,b){let c=br(b);return c?c.split("@")[0]:await aH(k().join(a,"pnpm-lock.yaml"))?"pnpm":await aH(k().join(a,"yarn.lock"))?"yarn":"npm"}async function aH(a){try{return await (0,g.access)(a),!0}catch{return!1}}function aI(a,b){return`${a}-${bs(b)||"agent"}`}function aJ(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 aK(a,b){return a.workspaces.find(a=>a.id===b.workspaceId)?.name??k().basename(b.workspacePath)}function aL(a,b){return k().join(a,".openclaw","agents",b,"agent")}function aM(a){return`agent-policy-${bs(a)||"agent"}`}function aN(a){return!!(a&&/^agent-policy-/.test(a))}async function aO(a){var b,c,d;let e,f=aM(a.agentId);return await az(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
221
222
 
222
223
  Preset: ${e}
223
224
 
@@ -227,9 +228,9 @@ Preset: ${e}
227
228
  - Avoid writing final artifacts to the workspace root unless the task explicitly asks for it.
228
229
 
229
230
  ## Operating rules
230
- ${aj(c,d).map(a=>a.replace(/^- /,"- ")).join("\n")}
231
+ ${aF(c,d).map(a=>a.replace(/^- /,"- ")).join("\n")}
231
232
  `)}
232
- `),f}function at(a){return"ux"===a?`# UX Notes
233
+ `),f}function aP(a){return"ux"===a?`# UX Notes
233
234
 
234
235
  - Track interaction patterns, responsive edge cases, and visual risk areas here.
235
236
  `:"backend"===a?`# Service Map
@@ -241,8 +242,8 @@ ${aj(c,d).map(a=>a.replace(/^- /,"- ")).join("\n")}
241
242
  `:`# Content Brief
242
243
 
243
244
  - Capture audience, channel, tone, CTA, and distribution assumptions for this content workspace.
244
- `}async function au(a,b,c){let d=await av(),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=aS(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 aw(d),f}async function av(){let a=await (0,p.VP)(["config","get","agents.list","--json"]);return Array.isArray(a)?a:[]}async function aw(a){await (0,p.zB)(["config","set","--strict-json","agents.list",JSON.stringify(a)])}async function ax(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,p.zB)(d)}async function ay(a,b,c){for(let d of[j().join(h().homedir(),".openclaw","agents",a,"sessions",`${b}.jsonl`),c?j().join(c,".openclaw","agents",a,"sessions",`${b}.jsonl`):null].filter(Boolean))try{return await (0,f.access)(d),d}catch{continue}return null}function az(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 aA(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,k=function(a,b,c,d){if("toolResult"!==a||!0===b.isError||d)return null;let e=b.details?.exitCode;if("number"!=typeof e||0===e)return null;let f=(b.details?.aggregated||c).split(/\r?\n/).map(a=>a.trim()).filter(Boolean).filter(a=>!/^\(Command exited with code \d+\)$/i.test(a));return aC((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)))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||function(a){let b=a.match(/"tool(Name)?":\s*"([^"]+)"/i);return b?.[2]}(h):void 0,stopReason:"assistant"===d?c.message.stopReason??null:null,errorMessage:i,isWarning:!!k,isError:!!i||!0===c.message.isError||"error"===c.message.stopReason||"aborted"===c.message.stopReason};if("user"===d){g&&e.push(aB(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:[],pendingCreatedFiles:new Map};continue}if(!g)continue;if("assistant"===d&&Array.isArray(c.message.content))for(let a of c.message.content){if("toolCall"!==a.type||"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=j().isAbsolute(c)?j().normalize(c):b?j().resolve(b,c):null;if(!d)return null;let e=b&&d.startsWith(`${j().resolve(b)}${j().sep}`)?j().relative(j().resolve(b),d)||j().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,k&&!g.warnings.includes(k)&&g.warnings.push(k),"toolResult"===d&&!0!==c.message.isError&&"write"===c.message.toolName&&"string"==typeof c.message.toolCallId){let a=g.pendingCreatedFiles.get(c.message.toolCallId);a&&(g.createdFiles.push(a),g.pendingCreatedFiles.delete(c.message.toolCallId))}"assistant"===d&&c.message.usage&&(g.tokenUsage={input:c.message.usage.input??0,output:c.message.usage.output??0,total:c.message.usage.totalTokens??0,cacheRead:c.message.usage.cacheRead??0})}catch{continue}return g&&e.push(aB(g)),e}function aB(a){let{pendingCreatedFiles:b,...c}=a,d=[...a.items].reverse().find(a=>"assistant"===a.role&&(a.text.trim().length>0||a.errorMessage)),e=a.items.at(-1),f=d?.stopReason??null,g=!!a.errorMessage||d?.isError===!0||"error"===f||"aborted"===f,h=a$(a.warnings),i=h.length>0,j=g?"error":e?.role==="assistant"&&e.stopReason&&"toolUse"!==e.stopReason?i?"partial":"completed":"active";return{...c,status:j,finalText:d?.text??null,finalTimestamp:d?.timestamp??null,stopReason:f,errorMessage:a.errorMessage||d?.errorMessage||null,createdFiles:function(a){let b=new Set,c=[];for(let d of a)!d.path||b.has(d.path)||(b.add(d.path),c.push(d));return c}(a.createdFiles),warnings:h,warningSummary:h[0]??null}}function aC(a,b){let c=a.replace(/\s+/g," ").trim();return c.length<=b?c:`${c.slice(0,Math.max(b-1,1)).trimEnd()}…`}function aD(a){let b=(0,e.createHash)("sha1").update(a).digest("hex").slice(0,8);return`workspace:${b}`}async function aE(a,b){let c=[],d=new Map;for(let b of["AGENTS.md","SOUL.md","IDENTITY.md","TOOLS.md","HEARTBEAT.md"]){let e=j().join(a,b);try{await (0,f.access)(e);let a=(await (0,f.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=aO(a.get("SOUL.md"),"My Purpose");if(b)return b;let c=aO(a.get("IDENTITY.md"),"Role");if(c)return c;let d=aO(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}),g=aS([...aP(d.get("AGENTS.md"),"Safety defaults"),...aP(d.get("AGENTS.md"),"Daily memory"),...aP(d.get("SOUL.md"),"How I Operate"),...aP(d.get("TOOLS.md"),"Examples")]).slice(0,6)||[],h=aS([...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=>aR(a)).filter(Boolean)}(d.get("IDENTITY.md"),"Vibe"),...aP(d.get("SOUL.md"),"My Quirks"),...aP(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?aR(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:g.length>0?g: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 aF(a,b){let[c,d,e,f,g,h]=await Promise.all([aI(a),aG(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"}]),aG(a,[{id:"memory-md",label:"MEMORY.md",relativePath:"MEMORY.md",kind:"file"}]),aG(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"}]),aG(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"}]),aH(a)]),i=aS(b.flatMap(a=>a.tools)),j=aS([...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 aG(a,b){return Promise.all(b.map(async b=>({id:b.id,label:b.label,present:await aL(j().join(a,b.relativePath),b.kind)})))}async function aH(a){let b=j().join(a,"skills");try{let a=await (0,f.readdir)(b,{withFileTypes:!0});return(await Promise.all(a.filter(a=>a.isDirectory()).map(async a=>{let c=j().join(b,a.name,"SKILL.md");return await aL(c,"file")?a.name:null}))).filter(a=>"string"==typeof a&&!ar(a)).sort((a,b)=>a.localeCompare(b))}catch{return[]}}async function aI(a){let b=j().join(a,".openclaw","project.json");try{var c,d;let a=await (0,f.readFile)(b,"utf8"),e=JSON.parse(a),g=aM(e)?e:{},h=Array.isArray(g.agents)?g.agents.map(a=>aN(a)).filter(a=>!!a):[];return{template:(c=g.template,"software"===c||"frontend"===c||"backend"===c||"research"===c||"content"===c)?g.template:null,sourceMode:(d=g.sourceMode,"empty"===d||"clone"===d||"existing"===d)?g.sourceMode:null,agentTemplate:"string"==typeof g.agentTemplate?g.agentTemplate:null,hidden:!0===g.hidden,systemTag:"string"==typeof g.systemTag?g.systemTag:null,agents:h}}catch{return{template:null,sourceMode:null,agentTemplate:null,hidden:!1,systemTag:null,agents:[]}}}async function aJ(a,b){let c=j().join(a,".openclaw","project.json"),d={},e=null;try{let a=await (0,f.readFile)(c,"utf8"),g=JSON.parse(a);d=aM(g)?g:{},Array.isArray(d.agents)&&(e=d.agents.map(a=>aN(a)).filter(a=>!!a).find(a=>a.id===b.id)??null)}catch{d={}}let g={id:b.id,name:b.name??e?.name??null,role:b.role??e?.role??null,isPrimary:b.isPrimary??e?.isPrimary??!1,skillId:b.skillId??e?.skillId??null,modelId:b.modelId??e?.modelId??null,policy:b.policy},h=Array.isArray(d.agents)?d.agents.filter(a=>aM(a)&&"string"==typeof a.id&&a.id!==b.id):[];h.push(g),d.version="number"==typeof d.version?d.version:1,d.slug="string"==typeof d.slug?d.slug:a5(j().basename(a)),d.name="string"==typeof d.name?d.name:j().basename(a),d.updatedAt=new Date().toISOString(),d.agents=h,await ad(c,`${JSON.stringify(d,null,2)}
245
- `)}async function aK(a,b){let c=j().join(a,".openclaw","project.json"),d={};try{let a=await (0,f.readFile)(c,"utf8"),b=JSON.parse(a);d=aM(b)?b:{}}catch{return}if(!Array.isArray(d.agents))return;let e=d.agents.map(a=>aN(a)).filter(a=>!!a),g=e.filter(a=>a.id!==b);g.length!==e.length&&(g.length>0&&!g.some(a=>a.isPrimary)&&(g[0]={...g[0],isPrimary:!0}),d.updatedAt=new Date().toISOString(),d.agents=g,await ad(c,`${JSON.stringify(d,null,2)}
246
- `))}async function aL(a,b){try{let c=await (0,f.stat)(a);return"directory"===b?c.isDirectory():c.isFile()}catch{return!1}}function aM(a){return"object"==typeof a&&null!==a}function aN(a){var b;return aM(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,skillId:"string"==typeof a.skillId?a.skillId:null,modelId:"string"==typeof a.modelId?a.modelId:null,policy:aM(b=a.policy)&&(0,l.Pj)(b.preset)&&(0,l.Ew)(b.missingToolBehavior)&&(0,l.hR)(b.installScope)&&(0,l.c_)(b.fileAccess)&&(0,l.go)(b.networkAccess)?{preset:b.preset,missingToolBehavior:b.missingToolBehavior,installScope:b.installScope,fileAccess:b.fileAccess,networkAccess:b.networkAccess}:null}:null}function aO(a,b){if(!a)return null;let c=a.findIndex(a=>aQ(a)===aQ(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(aR(c)),d.length>=2))break}return d.length>0?d.join(" "):null}function aP(a,b){if(!a)return[];let c=a.findIndex(a=>aQ(a)===aQ(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(aR(c.replace(/^[-*]\s+/,"")));continue}if(d.length>0)break}return d}function aQ(a){return a.replace(/^#+\s+/,"").trim().toLowerCase()}function aR(a){return a.replace(/[`*_>#-]/g,"").replace(/\s+/g," ").trim()}function aS(a){return Array.from(new Set(a.filter(Boolean)))}function aT(a,b){return(b.updatedAt??0)-(a.updatedAt??0)}function aU(a){return!1!==a.available&&!a.missing}function aV(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 aW(a){return a||j().join(h().homedir(),"Documents","Shared","projects")}async function aX(a,b){if(a!==b)try{throw await (0,f.access)(a),Error("Target workspace directory already exists.")}catch(a){if("ENOENT"===("object"==typeof a&&a&&"code"in a?a.code:void 0))return;if(a instanceof Error)throw a;throw Error("Unable to verify target workspace directory.")}}function aY(a,b){if(!a)return;let c=`:${b}:`,d=a.indexOf(c);if(-1!==d)return a.slice(d+c.length).split(":")[0]}function aZ(a){return a?a.split(/[-_]/g).filter(Boolean).map(a=>a[0].toUpperCase()+a.slice(1)).join(" "):"OpenClaw"}function a$(a){return Array.from(new Set(a))}function a_(a){return!!a}function a0(a){return String(a).padStart(2,"0")}function a1(a){return a.split(j().sep).join("/")}function a2(a,b){let c=a3(a),d=a3(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 a3(a){return a.trim().replace(/^v/i,"").split(/[^0-9a-zA-Z]+/).filter(Boolean).map(a=>/^\d+$/.test(a)?Number(a):a.toLowerCase())}function a4(a){return a?.trim()||void 0}function a5(a){return a.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function a6(a){return(0,e.createHash)("sha1").update(a).digest("hex").slice(0,10)}},8912:(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={}){let c=await t(),{stdout:d,stderr:e}=await i(c,a,{cwd:process.cwd(),timeout:b.timeoutMs??45e3,maxBuffer:8388608});return{stdout:d.toString(),stderr:e.toString()}}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}
245
+ `}async function aQ(a,b,c){let d=await aR(),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=bc(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 aS(d),f}async function aR(){let a=await (0,q.VP)(["config","get","agents.list","--json"]);return Array.isArray(a)?a:[]}async function aS(a){await (0,q.zB)(["config","set","--strict-json","agents.list",JSON.stringify(a)])}async function aT(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 aU(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 aV(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 aW(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 aY((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)))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||function(a){let b=a.match(/"tool(Name)?":\s*"([^"]+)"/i);return b?.[2]}(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(aX(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:[],pendingCreatedFiles:new Map};continue}if(!g)continue;if("assistant"===d&&Array.isArray(c.message.content))for(let a of c.message.content){if("toolCall"!==a.type||"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))}"assistant"===d&&c.message.usage&&(g.tokenUsage={input:c.message.usage.input??0,output:c.message.usage.output??0,total:c.message.usage.totalTokens??0,cacheRead:c.message.usage.cacheRead??0})}catch{continue}return g&&e.push(aX(g)),e}function aX(a){let{pendingCreatedFiles:b,...c}=a,d=[...a.items].reverse().find(a=>"assistant"===a.role&&(a.text.trim().length>0||a.errorMessage)),e=a.items.at(-1),f=d?.stopReason??null,g=!!a.errorMessage||d?.isError===!0||"error"===f||"aborted"===f,h=bl(a.warnings),i=g?"stalled":e?.role==="assistant"&&e.stopReason&&"toolUse"!==e.stopReason?"completed":"running";return{...c,status:i,finalText:d?.text??null,finalTimestamp:d?.timestamp??null,stopReason:f,errorMessage:a.errorMessage||d?.errorMessage||null,createdFiles:function(a){let b=new Set,c=[];for(let d of a)!d.path||b.has(d.path)||(b.add(d.path),c.push(d));return c}(a.createdFiles),warnings:h,warningSummary:h[0]??null}}function aY(a,b){let c=a.replace(/\s+/g," ").trim();return c.length<=b?c:`${c.slice(0,Math.max(b-1,1)).trimEnd()}…`}function aZ(a){let b=(0,e.createHash)("sha1").update(a).digest("hex").slice(0,8);return`workspace:${b}`}async function a$(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=a8(a.get("SOUL.md"),"My Purpose");if(b)return b;let c=a8(a.get("IDENTITY.md"),"Role");if(c)return c;let d=a8(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=bc([...a9(d.get("AGENTS.md"),"Safety defaults"),...a9(d.get("AGENTS.md"),"Daily memory"),...a9(d.get("SOUL.md"),"How I Operate"),...a9(d.get("TOOLS.md"),"Examples")]).slice(0,6)||[],h=bc([...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=>bb(a)).filter(Boolean)}(d.get("IDENTITY.md"),"Vibe"),...a9(d.get("SOUL.md"),"My Quirks"),...a9(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?bb(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 a_(a,b){let[c,d,e,f,g,h]=await Promise.all([a2(a),a0(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"}]),a0(a,[{id:"memory-md",label:"MEMORY.md",relativePath:"MEMORY.md",kind:"file"}]),a0(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"}]),a0(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"}]),a1(a)]),i=bc(b.flatMap(a=>a.tools)),j=bc([...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 a0(a,b){return Promise.all(b.map(async b=>({id:b.id,label:b.label,present:await a5(k().join(a,b.relativePath),b.kind)})))}async function a1(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 a5(c,"file")?a.name:null}))).filter(a=>"string"==typeof a&&!aN(a)).sort((a,b)=>a.localeCompare(b))}catch{return[]}}async function a2(a){let b=k().join(a,".openclaw","project.json");try{var c,d;let a=await (0,g.readFile)(b,"utf8"),e=JSON.parse(a),f=a6(e)?e:{},h=Array.isArray(f.agents)?f.agents.map(a=>a7(a)).filter(a=>!!a):[];return{template:(c=f.template,"software"===c||"frontend"===c||"backend"===c||"research"===c||"content"===c)?f.template:null,sourceMode:(d=f.sourceMode,"empty"===d||"clone"===d||"existing"===d)?f.sourceMode:null,agentTemplate:"string"==typeof f.agentTemplate?f.agentTemplate:null,hidden:!0===f.hidden,systemTag:"string"==typeof f.systemTag?f.systemTag:null,agents:h}}catch{return{template:null,sourceMode:null,agentTemplate:null,hidden:!1,systemTag:null,agents:[]}}}async function a3(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=a6(f)?f:{},Array.isArray(d.agents)&&(e=d.agents.map(a=>a7(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,skillId:b.skillId??e?.skillId??null,modelId:b.modelId??e?.modelId??null,policy:b.policy},h=Array.isArray(d.agents)?d.agents.filter(a=>a6(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:bs(k().basename(a)),d.name="string"==typeof d.name?d.name:k().basename(a),d.updatedAt=new Date().toISOString(),d.agents=h,await az(c,`${JSON.stringify(d,null,2)}
246
+ `)}async function a4(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=a6(b)?b:{}}catch{return}if(!Array.isArray(d.agents))return;let e=d.agents.map(a=>a7(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 az(c,`${JSON.stringify(d,null,2)}
247
+ `))}async function a5(a,b){try{let c=await (0,g.stat)(a);return"directory"===b?c.isDirectory():c.isFile()}catch{return!1}}function a6(a){return"object"==typeof a&&null!==a}function a7(a){var b;return a6(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,skillId:"string"==typeof a.skillId?a.skillId:null,modelId:"string"==typeof a.modelId?a.modelId:null,policy:a6(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 a8(a,b){if(!a)return null;let c=a.findIndex(a=>ba(a)===ba(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(bb(c)),d.length>=2))break}return d.length>0?d.join(" "):null}function a9(a,b){if(!a)return[];let c=a.findIndex(a=>ba(a)===ba(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(bb(c.replace(/^[-*]\s+/,"")));continue}if(d.length>0)break}return d}function ba(a){return a.replace(/^#+\s+/,"").trim().toLowerCase()}function bb(a){return a.replace(/[`*_>#-]/g,"").replace(/\s+/g," ").trim()}function bc(a){return Array.from(new Set(a.filter(Boolean)))}function bd(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 D.entries()){if(c.has(a))continue;let e={...d,status:"stalled"===d.status?"stalled":"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(be).slice(0,8))}(Array.from(b.values()));return D=new Map(d.filter(a=>!T(a)).map(a=>[a.id,a])),d.sort(be)}function be(a,b){return(b.updatedAt??0)-(a.updatedAt??0)}function bf(a){return!1!==a.available&&!a.missing}function bg(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 bh(a){return a||k().join(i().homedir(),"Documents","Shared","projects")}async function bi(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 bj(a,b){if(!a)return;let c=`:${b}:`,d=a.indexOf(c);if(-1!==d)return a.slice(d+c.length).split(":")[0]}function bk(a){return a?a.split(/[-_]/g).filter(Boolean).map(a=>a[0].toUpperCase()+a.slice(1)).join(" "):"OpenClaw"}function bl(a){return Array.from(new Set(a))}function bm(a){return!!a}function bn(a){return String(a).padStart(2,"0")}function bo(a){return a.split(k().sep).join("/")}function bp(a,b){let c=bq(a),d=bq(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 bq(a){return a.trim().replace(/^v/i,"").split(/[^0-9a-zA-Z]+/).filter(Boolean).map(a=>/^\d+$/.test(a)?Number(a):a.toLowerCase())}function br(a){return a?.trim()||void 0}function bs(a){return a.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function bt(a){return(0,e.createHash)("sha1").update(a).digest("hex").slice(0,10)}},8912:(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={}){let c=await t(),{stdout:d,stderr:e}=await i(c,a,{cwd:process.cwd(),timeout:b.timeoutMs??45e3,maxBuffer:8388608});return{stdout:d.toString(),stderr:e.toString()}}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}
247
248
  ${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:
248
249
  ${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}}};