@sapienx/agentos 0.1.7 → 0.1.8
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.
- package/bundle/.next/BUILD_ID +1 -1
- package/bundle/.next/app-path-routes-manifest.json +14 -11
- package/bundle/.next/build-manifest.json +2 -2
- package/bundle/.next/routes-manifest.json +22 -0
- package/bundle/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/bundle/.next/server/app/_global-error.html +2 -2
- package/bundle/.next/server/app/_global-error.rsc +1 -1
- package/bundle/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/bundle/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/bundle/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/bundle/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/bundle/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/bundle/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/bundle/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/bundle/.next/server/app/_not-found.html +1 -1
- package/bundle/.next/server/app/_not-found.rsc +2 -2
- package/bundle/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/bundle/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/bundle/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/bundle/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/bundle/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/bundle/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/bundle/.next/server/app/api/agents/route.js.nft.json +1 -1
- package/bundle/.next/server/app/api/agents/route_client-reference-manifest.js +1 -1
- package/bundle/.next/server/app/api/diagnostics/route.js.nft.json +1 -1
- package/bundle/.next/server/app/api/diagnostics/route_client-reference-manifest.js +1 -1
- package/bundle/.next/server/app/api/files/reveal/route_client-reference-manifest.js +1 -1
- package/bundle/.next/server/app/api/gateway/control/route.js.nft.json +1 -1
- package/bundle/.next/server/app/api/gateway/control/route_client-reference-manifest.js +1 -1
- package/bundle/.next/server/app/api/mission/route.js.nft.json +1 -1
- package/bundle/.next/server/app/api/mission/route_client-reference-manifest.js +1 -1
- package/bundle/.next/server/app/api/models/providers/route.js +2 -0
- package/bundle/.next/server/app/api/models/providers/route.js.nft.json +1 -0
- package/bundle/.next/server/app/api/models/providers/route_client-reference-manifest.js +1 -0
- package/bundle/.next/server/app/api/onboarding/models/route.js.nft.json +1 -1
- package/bundle/.next/server/app/api/onboarding/models/route_client-reference-manifest.js +1 -1
- package/bundle/.next/server/app/api/onboarding/route.js.nft.json +1 -1
- package/bundle/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
- package/bundle/.next/server/app/api/planner/[planId]/deploy/route.js.nft.json +1 -1
- package/bundle/.next/server/app/api/planner/[planId]/deploy/route_client-reference-manifest.js +1 -1
- package/bundle/.next/server/app/api/planner/[planId]/route.js.nft.json +1 -1
- package/bundle/.next/server/app/api/planner/[planId]/route_client-reference-manifest.js +1 -1
- package/bundle/.next/server/app/api/planner/[planId]/simulate/route.js.nft.json +1 -1
- package/bundle/.next/server/app/api/planner/[planId]/simulate/route_client-reference-manifest.js +1 -1
- package/bundle/.next/server/app/api/planner/[planId]/turn/route.js.nft.json +1 -1
- package/bundle/.next/server/app/api/planner/[planId]/turn/route_client-reference-manifest.js +1 -1
- package/bundle/.next/server/app/api/planner/route.js.nft.json +1 -1
- package/bundle/.next/server/app/api/planner/route_client-reference-manifest.js +1 -1
- package/bundle/.next/server/app/api/reset/route.js.nft.json +1 -1
- package/bundle/.next/server/app/api/reset/route_client-reference-manifest.js +1 -1
- package/bundle/.next/server/app/api/runtimes/[runtimeId]/route.js.nft.json +1 -1
- package/bundle/.next/server/app/api/runtimes/[runtimeId]/route_client-reference-manifest.js +1 -1
- package/bundle/.next/server/app/api/settings/gateway/route.js.nft.json +1 -1
- package/bundle/.next/server/app/api/settings/gateway/route_client-reference-manifest.js +1 -1
- package/bundle/.next/server/app/api/settings/workspace-root/route.js.nft.json +1 -1
- package/bundle/.next/server/app/api/settings/workspace-root/route_client-reference-manifest.js +1 -1
- package/bundle/.next/server/app/api/snapshot/route.js.nft.json +1 -1
- package/bundle/.next/server/app/api/snapshot/route_client-reference-manifest.js +1 -1
- package/bundle/.next/server/app/api/stream/route.js +1 -1
- package/bundle/.next/server/app/api/stream/route.js.nft.json +1 -1
- package/bundle/.next/server/app/api/stream/route_client-reference-manifest.js +1 -1
- package/bundle/.next/server/app/api/system/open-terminal/route_client-reference-manifest.js +1 -1
- package/bundle/.next/server/app/api/tasks/[taskId]/abort/route.js +1 -0
- package/bundle/.next/server/app/api/tasks/[taskId]/abort/route.js.nft.json +1 -0
- package/bundle/.next/server/app/api/tasks/[taskId]/abort/route_client-reference-manifest.js +1 -0
- package/bundle/.next/server/app/api/tasks/[taskId]/stream/route.js +4 -0
- package/bundle/.next/server/app/api/tasks/[taskId]/stream/route.js.nft.json +1 -0
- package/bundle/.next/server/app/api/tasks/[taskId]/stream/route_client-reference-manifest.js +1 -0
- package/bundle/.next/server/app/api/update/route.js.nft.json +1 -1
- package/bundle/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/bundle/.next/server/app/api/workspaces/route.js.nft.json +1 -1
- package/bundle/.next/server/app/api/workspaces/route_client-reference-manifest.js +1 -1
- package/bundle/.next/server/app/page.js +14 -14
- package/bundle/.next/server/app/page.js.nft.json +1 -1
- package/bundle/.next/server/app/page_client-reference-manifest.js +1 -1
- package/bundle/.next/server/app-paths-manifest.json +14 -11
- package/bundle/.next/server/chunks/350.js +1 -1
- package/bundle/.next/server/chunks/419.js +29 -29
- package/bundle/.next/server/functions-config-manifest.json +3 -0
- package/bundle/.next/server/pages/404.html +1 -1
- package/bundle/.next/server/pages/500.html +2 -2
- package/bundle/.next/static/chunks/878-919c758aa9e87b6d.js +13 -0
- package/bundle/.next/static/chunks/app/_global-error/page-75723f28c245a30d.js +1 -0
- package/bundle/.next/static/chunks/app/_not-found/page-75723f28c245a30d.js +1 -0
- package/bundle/.next/static/chunks/app/api/agents/route-75723f28c245a30d.js +1 -0
- package/bundle/.next/static/chunks/app/api/diagnostics/route-75723f28c245a30d.js +1 -0
- package/bundle/.next/static/chunks/app/api/files/reveal/route-75723f28c245a30d.js +1 -0
- package/bundle/.next/static/chunks/app/api/gateway/control/route-75723f28c245a30d.js +1 -0
- package/bundle/.next/static/chunks/app/api/mission/route-75723f28c245a30d.js +1 -0
- package/bundle/.next/static/chunks/app/api/models/providers/route-75723f28c245a30d.js +1 -0
- package/bundle/.next/static/chunks/app/api/onboarding/models/route-75723f28c245a30d.js +1 -0
- package/bundle/.next/static/chunks/app/api/onboarding/route-75723f28c245a30d.js +1 -0
- package/bundle/.next/static/chunks/app/api/planner/[planId]/deploy/route-75723f28c245a30d.js +1 -0
- package/bundle/.next/static/chunks/app/api/planner/[planId]/route-75723f28c245a30d.js +1 -0
- package/bundle/.next/static/chunks/app/api/planner/[planId]/simulate/route-75723f28c245a30d.js +1 -0
- package/bundle/.next/static/chunks/app/api/planner/[planId]/turn/route-75723f28c245a30d.js +1 -0
- package/bundle/.next/static/chunks/app/api/planner/route-75723f28c245a30d.js +1 -0
- package/bundle/.next/static/chunks/app/api/reset/route-75723f28c245a30d.js +1 -0
- package/bundle/.next/static/chunks/app/api/runtimes/[runtimeId]/route-75723f28c245a30d.js +1 -0
- package/bundle/.next/static/chunks/app/api/settings/gateway/route-75723f28c245a30d.js +1 -0
- package/bundle/.next/static/chunks/app/api/settings/workspace-root/route-75723f28c245a30d.js +1 -0
- package/bundle/.next/static/chunks/app/api/snapshot/route-75723f28c245a30d.js +1 -0
- package/bundle/.next/static/chunks/app/api/stream/route-75723f28c245a30d.js +1 -0
- package/bundle/.next/static/chunks/app/api/system/open-terminal/route-75723f28c245a30d.js +1 -0
- package/bundle/.next/static/chunks/app/api/tasks/[taskId]/abort/route-75723f28c245a30d.js +1 -0
- package/bundle/.next/static/chunks/app/api/tasks/[taskId]/stream/route-75723f28c245a30d.js +1 -0
- package/bundle/.next/static/chunks/app/api/update/route-75723f28c245a30d.js +1 -0
- package/bundle/.next/static/chunks/app/api/workspaces/route-75723f28c245a30d.js +1 -0
- package/bundle/.next/static/chunks/app/not-found-75723f28c245a30d.js +1 -0
- package/bundle/.next/static/chunks/app/page-dee040e8fa0bfe5c.js +14 -0
- package/bundle/.next/static/chunks/next/dist/client/components/builtin/app-error-75723f28c245a30d.js +1 -0
- package/bundle/.next/static/chunks/next/dist/client/components/builtin/forbidden-75723f28c245a30d.js +1 -0
- package/bundle/.next/static/chunks/next/dist/client/components/builtin/unauthorized-75723f28c245a30d.js +1 -0
- package/bundle/.next/static/css/665b6d1d1e231c6e.css +3 -0
- package/bundle/.next/static/dMZieB6mihw477BgExG8r/_buildManifest.js +1 -0
- package/bundle/scripts/openclaw-mission-dispatch-runner.mjs +84 -24
- package/package.json +1 -1
- package/bundle/.next/static/chunks/768-10d6bd3c2342134e.js +0 -13
- package/bundle/.next/static/chunks/app/_global-error/page-b01b0a6fdf60f7fe.js +0 -1
- package/bundle/.next/static/chunks/app/_not-found/page-b01b0a6fdf60f7fe.js +0 -1
- package/bundle/.next/static/chunks/app/api/agents/route-b01b0a6fdf60f7fe.js +0 -1
- package/bundle/.next/static/chunks/app/api/diagnostics/route-b01b0a6fdf60f7fe.js +0 -1
- package/bundle/.next/static/chunks/app/api/files/reveal/route-b01b0a6fdf60f7fe.js +0 -1
- package/bundle/.next/static/chunks/app/api/gateway/control/route-b01b0a6fdf60f7fe.js +0 -1
- package/bundle/.next/static/chunks/app/api/mission/route-b01b0a6fdf60f7fe.js +0 -1
- package/bundle/.next/static/chunks/app/api/onboarding/models/route-b01b0a6fdf60f7fe.js +0 -1
- package/bundle/.next/static/chunks/app/api/onboarding/route-b01b0a6fdf60f7fe.js +0 -1
- package/bundle/.next/static/chunks/app/api/planner/[planId]/deploy/route-b01b0a6fdf60f7fe.js +0 -1
- package/bundle/.next/static/chunks/app/api/planner/[planId]/route-b01b0a6fdf60f7fe.js +0 -1
- package/bundle/.next/static/chunks/app/api/planner/[planId]/simulate/route-b01b0a6fdf60f7fe.js +0 -1
- package/bundle/.next/static/chunks/app/api/planner/[planId]/turn/route-b01b0a6fdf60f7fe.js +0 -1
- package/bundle/.next/static/chunks/app/api/planner/route-b01b0a6fdf60f7fe.js +0 -1
- package/bundle/.next/static/chunks/app/api/reset/route-b01b0a6fdf60f7fe.js +0 -1
- package/bundle/.next/static/chunks/app/api/runtimes/[runtimeId]/route-b01b0a6fdf60f7fe.js +0 -1
- package/bundle/.next/static/chunks/app/api/settings/gateway/route-b01b0a6fdf60f7fe.js +0 -1
- package/bundle/.next/static/chunks/app/api/settings/workspace-root/route-b01b0a6fdf60f7fe.js +0 -1
- package/bundle/.next/static/chunks/app/api/snapshot/route-b01b0a6fdf60f7fe.js +0 -1
- package/bundle/.next/static/chunks/app/api/stream/route-b01b0a6fdf60f7fe.js +0 -1
- package/bundle/.next/static/chunks/app/api/system/open-terminal/route-b01b0a6fdf60f7fe.js +0 -1
- package/bundle/.next/static/chunks/app/api/update/route-b01b0a6fdf60f7fe.js +0 -1
- package/bundle/.next/static/chunks/app/api/workspaces/route-b01b0a6fdf60f7fe.js +0 -1
- package/bundle/.next/static/chunks/app/not-found-b01b0a6fdf60f7fe.js +0 -1
- package/bundle/.next/static/chunks/app/page-863784e11f2deb8d.js +0 -14
- package/bundle/.next/static/chunks/next/dist/client/components/builtin/app-error-b01b0a6fdf60f7fe.js +0 -1
- package/bundle/.next/static/chunks/next/dist/client/components/builtin/forbidden-b01b0a6fdf60f7fe.js +0 -1
- package/bundle/.next/static/chunks/next/dist/client/components/builtin/unauthorized-b01b0a6fdf60f7fe.js +0 -1
- package/bundle/.next/static/css/a321f34e664c439e.css +0 -3
- package/bundle/.next/static/sgPf3JHUUWvk8YndSq2L9/_buildManifest.js +0 -1
- /package/bundle/.next/static/{sgPf3JHUUWvk8YndSq2L9 → dMZieB6mihw477BgExG8r}/_ssgManifest.js +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
exports.id=419,exports.ids=[419],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})},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}
|
|
1
|
+
exports.id=419,exports.ids=[419],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})},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={}){return q(a,b)}async function p(a,b={}){try{let c=await o(a,b);return v(c.stdout||c.stderr)}catch(b){let a=w(b);if(a)try{return v(a.stdout||a.stderr)}catch{}throw b}}async function q(a,b={}){let c=await t();return new Promise((e,f)=>{let g=(0,d.spawn)(c,a,{cwd:process.cwd(),env:process.env}),h="",i="",j=!1,k=!1,l=Promise.resolve(),m=(a,b)=>{a&&b&&(l=l.then(()=>a(b)).catch(()=>{}))},n=a=>{j||(j=!0,l.finally(a))},o=setTimeout(()=>{k=!0,g.kill("SIGTERM")},b.timeoutMs??45e3);g.stdout.on("data",a=>{let c=a.toString();h+=c,m(b.onStdout,c)}),g.stderr.on("data",a=>{let c=a.toString();i+=c,m(b.onStderr,c)}),g.on("error",a=>{clearTimeout(o),n(()=>{f(x(`OpenClaw command failed to start: ${a.message}`,h,i?`${i}
|
|
2
2
|
${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:
|
|
3
|
-
${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}},9879:(a,b,c)=>{"use strict";c.d(b,{er:()=>F,Sn:()=>_,zw:()=>ac,RB:()=>ab,qu:()=>ae,dM:()=>L,vy:()=>K,GM:()=>G,Y9:()=>$,xE:()=>N,x4:()=>aa,Vg:()=>af,sQ:()=>ad,PR:()=>ag});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);function t(a){return a.replace(/\s+/g," ").trim().toLowerCase()}var u=c(3214);let v=(0,l.promisify)(d.execFile),w="gateway.remote.url",x=k().join(process.cwd(),".mission-control"),y=k().join(x,"settings.json"),z=k().join(x,"dispatches"),A=k().join(process.cwd(),"scripts","openclaw-mission-dispatch-runner.mjs"),B=k().join(i().homedir(),".openclaw"),C=null,D=null,E=new Map;function F(){C=null,E=new Map}async function G(a={}){if(!a.force&&C&&C.expiresAt>Date.now())return a.includeHidden?C.full:C.visible;if(D){let b=await D;return a.includeHidden?b.full:b.visible}D=H();try{let b=await D;return C={...b,expiresAt:Date.now()+1e4},a.includeHidden?b.full:b.visible}finally{D=null}}async function H(){if(!await (0,q.Vg)())return I(n("OpenClaw CLI is not installed on this machine."));try{var a,b,c,d,e;let f,g,h,i,j,l,n,o,p,r,s,t,u,v,x,y=await ak(),z=ah(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",w,"--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?bw(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,Q="fulfilled"===H.status?H.value.sessions:[],S="fulfilled"===I.status?I.value:[],T=await aq(M.map(a=>a.id),y),U=new Map,V=new Map,W=new Map,X=[],Y=[],$=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 Q){if(!a.agentId)continue;let b=aa.get(a.agentId)??[];b.push(a),aa.set(a.agentId,b)}let ab=(await Promise.all(Q.map(a=>Z(a,N,M)))).flat(),ac=bi(ab),ad=await R(ac),ae=bi([...ad,...ab]);for(let b of M){let c=_.get(b.id),d=a2(b.workspace),e=aa.get(b.id)??[],f=W.get(b.workspace)??await a7(b.workspace);W.set(b.workspace,f);let g=f.agents.find(a=>a.id===b.id)??null,h=(c?.skills??[]).filter(a=>!aS(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=V.get(b.workspace)??await a3(b.workspace,{agentId:b.id,agentName:b.name||b.identityName||c?.name||b.id,configuredSkills:h,configuredTools:c?.tools?.fs?.workspaceOnly?["fs.workspaceOnly"]:[]});V.set(b.workspace,l);let n=ae.filter(a=>a.agentId===b.id).sort(bj),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=a2(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:bx(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}(U,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(X.push(u),Y.push({id:`edge:${d}:${u.id}:contains`,sourceId:d,targetId:u.id,kind:"contains",label:"workspace member"}),Y.push({id:`edge:${u.id}:${j}:model`,sourceId:u.id,targetId:j,kind:"uses-model",label:"model assignment"}),o))Y.push({id:`edge:${u.id}:${a}:run`,sourceId:u.id,targetId:a,kind:"active-run",label:"runtime"})}let af=new Map;for(let a of X){let b=af.get(a.workspaceId)??[];b.push(a),af.set(a.workspaceId,b)}let ag=await Promise.all(Array.from(U.values()).map(async a=>{var b;let c,d=af.get(a.id)??[],e=await a4(a.path,d);return{...a,modelIds:bq(a.modelIds),activeRuntimeIds:bq(a.activeRuntimeIds),health:(b=a.agentIds,(c=X.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}})),ai=new Set(ag.filter(a=>W.get(a.path)?.hidden).map(a=>a.id)),aj=X.filter(a=>!ai.has(a.workspaceId)),al=new Set(X.filter(a=>ai.has(a.workspaceId)).map(a=>a.id)),am=ae.filter(a=>!(a.agentId&&al.has(a.agentId))&&!(a.workspaceId&&ai.has(a.workspaceId))),an=new Set(ae.filter(a=>a.agentId&&al.has(a.agentId)||a.workspaceId&&ai.has(a.workspaceId)).map(a=>a.id)),ao=new Set([...ai,...al,...an]),ap=Y.filter(a=>!ao.has(a.sourceId)&&!ao.has(a.targetId)),ar=ag.filter(a=>!ai.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=>bk(a)),g=bq([...b.map(a=>a.key.split("/")[0]||"unknown"),...(c?.auth?.providers??[]).map(a=>a.provider).filter(br),...(c?.auth?.oauth?.providers??[]).map(a=>a.provider).filter(br)].filter(br)),h=new Map((c?.auth?.providers??[]).filter(a=>br(a.provider)).map(a=>[a.provider,a])),i=new Map((c?.auth?.oauth?.providers??[]).filter(a=>br(a.provider)).map(a=>[a.provider,a])),j=bw(c?.resolvedDefault??void 0),l=bw(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=>bk(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 ${bl(c)} API key in terminal to use this route.`:`Connect ${bl(c)} auth in terminal to use this route.`),{provider:a,connected:j,canLogin:e,detail:k}}),t=(c?.auth?.missingProvidersInUse??[]).filter(br),u=new Set(t),v=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 ${bl(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(", ")}.`),v>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:bq(x)}),au=L?.securityAudit?.findings?.filter(a=>"warn"===a.severity).map(a=>a.title||a.detail||"Security warning")??[],av=bw(S[0]?.version||L?.overview?.version||L?.version),aw=bw(L?.update?.registry?.latestVersion??void 0),ax=function(a){let b=bw(a);if(b)return b.split(/\r?\n/,1)[0]?.trim()||b}(L?.update?.registry?.error??void 0),ay=av&&aw?bu(aw,av)>0:void 0,az=function(a){let b=bw(a.legacyInfo);if(a.latestVersion&&a.currentVersion){let b=bu(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:bw(L?.update?.root??void 0),updateInstallKind:bw(L?.update?.installKind??void 0),updatePackageManager:bw(L?.update?.packageManager??void 0),workspaceRoot:bm(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:ag,agents:X,models:as(X),runtimes:ae,relationships:Y},visible:{...aB,workspaces:ar,agents:aj,models:as(aj),runtimes:am,relationships:ap}}}catch(a){return I(n(a instanceof Error?a.message:"Unknown OpenClaw error."))}}function I(a){return{visible:a,full:a}}async function J(a){let b=await ap(a?[a]:[],{touch:!0});if(b.issues.length>0)throw C=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 K(a={}){return await J(a.agentId??null),C=null,G({force:!0,includeHidden:!0})}async function L(a={}){var b,c,d,e;let f=(b=await G({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 ak(),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 am(f,g);await J(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 an(b),C=null,b}catch(b){let a={status:"failed",checkedAt:new Date().toISOString(),agentId:f,runId:null,summary:null,error:ar(b)||"OpenClaw runtime smoke test failed."};return await an(a),C=null,a}}async function M(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 L({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 N(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 G({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 M(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 aJ(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:",...aK(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 P(u);try{u=await Q(u)}catch(a){throw u={...u,status:"stalled",updatedAt:new Date().toISOString(),error:ar(a)||"Mission dispatch runner could not be started."},await P(u),C=null,Error(u.error??"Mission dispatch runner could not be started.")}return C=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 O(a){return k().join(z,`${a}.json`)}async function P(a){let b=O(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)}
|
|
4
|
-
`,"utf8"),await (0,g.rename)(c,b)}async function Q(a){await (0,g.access)(A,f.constants.R_OK);let b=await (0,q.XP)(),c=(0,d.spawn)(process.execPath,[A,O(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 R(a){let b=await S(),c=[],d=Date.now();for(let e of b)!function(a,b){let c=Date.parse(a.submittedAt),d=Y(a);return b.filter(b=>!U(b)&&"turn"!==b.source&&b.agentId===a.agentId&&(!d||b.sessionId===d)&&(b.updatedAt??0)>=(Number.isNaN(c)?0:c-1500)).sort(bj)[0]}(e,a)&&(e.observation.runtimeId||c.push(function(a,b){let c=Date.parse(a.updatedAt),d=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),e=function(a,b){var c;return"completed"===b?a1(function(a){let b=a.result?.summary?.trim();if(!b)return null;let c=b.toLowerCase();return"completed"===c||"ok"===c||"success"===c?null:b}(a)||(c=a,c.result?.result?.payloads?.find(a=>a.text.trim().length>0)?.text.trim()??null)||(a.outputDirRelative?`Completed \xb7 ${a.outputDirRelative}`:"Completed in OpenClaw"),90):"stalled"===b?a1(a.error||"Dispatch is no longer reporting progress.",90):"running"===b?a.outputDirRelative?`Running in OpenClaw \xb7 ${a.outputDirRelative}`:"Running in OpenClaw":a.outputDirRelative?`Queued for OpenClaw \xb7 ${a.outputDirRelative}`:"Queued for OpenClaw"}(a,d),f=Y(a),g=W(V(a),"model"),h=function(a){let b=V(a),c=b?.usage;if(!c||"object"!=typeof c)return;let d=X(c,"total")??X(c,"totalTokens");if(null!==d)return{input:X(c,"input")??0,output:X(c,"output")??0,total:d,cacheRead:X(c,"cacheRead")??0}}(a);return{id:`runtime:dispatch:${a.id}`,source:"turn",key:`dispatch:${a.id}`,title:a1(a.mission,38)||"Queued mission",subtitle:e,status:d,updatedAt:Number.isNaN(c)?Date.parse(a.submittedAt)||null:c,ageMs:Number.isNaN(c)?null:Math.max(b-c,0),agentId:a.agentId,workspaceId:a.workspaceId??void 0,modelId:g??void 0,sessionId:f??void 0,runId:a.result?.runId,tokenUsage:h,metadata:{dispatchId:a.id,mission:a.mission,routedMission:a.routedMission,outputDir:a.outputDir,outputDirRelative:a.outputDirRelative,notesDirRelative:a.notesDirRelative,error:a.error,sessionId:f,pendingCreation:"queued"===d}}}(e,d)));return c.sort(bj)}async function S(){try{let a=await (0,g.readdir)(z,{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(z,a.name),h=await T(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 T(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 U(a){return a.id.startsWith("runtime:dispatch:")}function V(a){let b=a.result?.result?.meta;if(!b||"object"!=typeof b)return null;let c=b.agentMeta;return c&&"object"==typeof c?c:null}function W(a,b){let c=a?.[b];return"string"==typeof c&&c.trim().length>0?c:null}function X(a,b){let c=a?.[b];return"number"==typeof c&&Number.isFinite(c)?c:null}function Y(a){return W(V(a),"sessionId")}async function Z(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)?a2(o):void 0,q=bo(d.key,"task"),r=bo(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=bo((j=d).key,"task")||j.key||j.sessionId||String(Math.random()),l=j.sessionId||by(j.agentId||"sessionless"),`runtime:${l}:${by(k)}`),v=q?q.slice(0,8):null,{id:u,source:"session",key:d.key||"unknown-session",title:v?`${bp(d.agentId)} \xb7 ${v}`:`${bp(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 aZ(a.agentId,a.sessionId,x?.workspace||y?.workspace);if(!z)return[w];try{let a=await (0,g.readFile)(z,"utf8"),b=a_(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())?a1(f,38):`${bp(e)} run`),i=c.warningSummary?a1(`Completed with fallback: ${c.warningSummary}`,90):c.finalText?a1(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 $(a){let b=await G({includeHidden:!0}),c=b.runtimes.find(b=>b.id===a);if(c||(c=(b=await G({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 aZ(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=a_(b,a,c);if("turn"===a.source){let b="string"==typeof a.metadata.turnId?a.metadata.turnId:null,c=b?d.find(a=>a.id===b):function(a,b){let c="string"==typeof a.metadata.mission?a.metadata.mission:null;if(!c)return null;let d=b.filter(a=>{var b;let d,e;return b=a.prompt,d=t(c),e=t(b),!!d&&!!e&&(e===d||e.startsWith(`${d} `))});if(0===d.length)return null;let e=a.updatedAt??0;return d.sort((a,b)=>{let c=Date.parse(a.updatedAt),d=Date.parse(b.updatedAt);return Math.abs((Number.isNaN(c)?0:c)-e)-Math.abs((Number.isNaN(d)?0:d)-e)})[0]}(a,d);if(c)return a$(a,c)}let e=d.at(-1);return e?a$(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 _(a){let b=bx(a.id.trim());if(!b)throw Error("Agent id is required.");let c=await G({force:!0,includeHidden:!0});!function(a,b,c){let d=a.agents.find(a=>a.id===b);if(!d)return;let e=aP(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=bw(a.name)??f.defaultName,h=bw(a.emoji)??f.defaultEmoji,i=bw(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",aQ(d.path,b),"--non-interactive","--json"];a.modelId?.trim()&&l.push("--model",a.modelId.trim()),await (0,q.zB)(l);let n=await aT({workspacePath:d.path,agentId:b,agentName:g,policy:e,setupAgentId:k}),r=await aV(b,d.path,{name:g,model:bw(a.modelId),heartbeat:j,skills:[n],tools:"workspace-only"===e.fileAccess?{fs:{workspaceOnly:!0}}:null});return await aY(b,d.path,{name:g||r.name,emoji:h,theme:i,avatar:bw(a.avatar)}),await a8(d.path,{id:b,name:g,role:(0,m._P)(e.preset),skillId:n,modelId:bw(a.modelId),isPrimary:!1,policy:e}),C=null,{agentId:b,workspaceId:d.id}}async function aa(a){var b;let c=a.id.trim();if(!c)throw Error("Agent id is required.");let d=await G({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=bw(e.name),i=bw(e.identity.emoji),j=bw(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 aT({workspacePath:f.path,agentId:c,agentName:bw(a.name)??h??c,policy:g,setupAgentId:l}),q=await aV(c,f.path,{name:bw(a.name),model:bw(a.modelId),heartbeat:k,skills:[...e.skills,n],tools:"workspace-only"===g.fileAccess?{fs:{workspaceOnly:!0}}:null});return await aY(c,f.path,{name:bw(a.name)??q.name,emoji:bw(a.emoji)??i,theme:bw(a.theme)??j,avatar:bw(a.avatar)}),await a8(f.path,{id:c,name:bw(a.name)??h??q.name??c,modelId:bw(a.modelId)??("unassigned"===e.modelId?null:e.modelId),isPrimary:e.isDefault,policy:g}),C=null,{agentId:c,workspaceId:f.id}}async function ab(a){let b=a.agentId.trim();if(!b)throw Error("Agent id is required.");let c=await G({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 aW(),b=a.filter(a=>a.id!==d.id);b.length!==a.length&&await aX(b)}catch{}if(e){await a9(e.path,d.id);try{await (0,g.rm)(k().join(e.path,"skills",aR(d.id)),{recursive:!0,force:!0})}catch{}}return C=null,E=new Map,{agentId:d.id,workspaceId:d.workspaceId,workspacePath:d.workspacePath,deletedRuntimeCount:f}}async function ac(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=bx(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={...u.eY,...a.rules??{}},i=(a.agents?.length?a.agents:(0,u.P0)(d,e)).map(a=>({id:bx(a.id)||"agent",role:a.role.trim()||bp(a.id),name:bw(a.name)??bp(a.id),enabled:!1!==a.enabled,emoji:bw(a.emoji),theme:bw(a.theme),skillId:bw(a.skillId),modelId:bw(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=aO(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:bw(a.brief),directory:bw(a.directory),modelId:bw(a.modelId),repoUrl:bw(a.repoUrl),existingPath:bw(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 az(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 G({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=>aN(b,a.id)),e=aO(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 "${aP(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 at({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 au(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 t=[];for(let a of(await p.startStep("agents",1===n.length?"Provisioning the first workspace agent.":`Provisioning ${n.length} workspace agents.`),n)){let b=t.length,c=b+1;await p.updateStep("agents",{percent:Math.round(b/n.length*100),detail:`Creating agent ${c} of ${n.length}: ${a.name}.`}),await p.addActivity("agents",`Creating ${a.name} (${a.role}).`);let d=await ax({workspacePath:q,workspaceSlug:l.slug,workspaceModelId:l.modelId,agent:a});t.push(d),await p.addActivity("agents",`Created ${a.name} as ${d}.`,"done"),await p.updateStep("agents",{percent:Math.round(t.length/n.length*100),detail:`${t.length} of ${n.length} agent${1===n.length?"":"s"} ready.`})}await p.completeStep("agents",`${t.length} agent${1===t.length?"":"s"} linked to the workspace.`);let v=t.find(a=>n.some(b=>b.isPrimary&&aN(l.slug,b.id)===a))??t[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 ay({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 C=null,E=new Map,{workspaceId:a2(q),workspacePath:q,agentIds:t,primaryAgentId:v,kickoffRunId:i,kickoffStatus:j,kickoffError:k}}async function ad(a){let b=a.workspaceId.trim();if(!b)throw Error("Workspace id is required.");let c=(await G({force:!0})).workspaces.find(a=>a.id===b);if(!c)throw Error("Workspace was not found.");let d=function(a,b,c){let d=bw(c);if(d)return k().isAbsolute(d)?d:k().join(k().dirname(a),d);let e=bw(b);if(!e)return a;let f=bx(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 bn(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 aW()).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 aX(a)}return C=null,E=new Map,{workspaceId:a2(d),previousWorkspaceId:c.id,workspacePath:d}}async function ae(a){let b=a.workspaceId.trim();if(!b)throw Error("Workspace id is required.");let c=await G({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 aW(),b=a.filter(a=>a.workspace!==d.path&&!e.some(b=>b.id===a.id));b.length!==a.length&&await aX(b)}catch{}return await (0,g.rm)(d.path,{recursive:!0,force:!0}),F(),{workspaceId:d.id,workspacePath:d.path,deletedAgentIds:e.map(a=>a.id),deletedRuntimeCount:f}}async function af(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",w,b]):await ai()&&await (0,q.zB)(["config","unset",w]),C=null,E=new Map,G({force:!0})}async function ag(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 ah(b)}(a.workspaceRoot),c=await ak();return await al({...b?{workspaceRoot:b}:{},...c.runtimePreflight?{runtimePreflight:c.runtimePreflight}:{}}),C=null,E=new Map,G({force:!0})}function ah(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 ai(){try{return await (0,q.zB)(["config","get",w,"--json"]),!0}catch(a){if(ar(a).includes("Config path not found"))return!1;throw a}}async function aj(){return ah((await ak()).workspaceRoot)??null}async function ak(){let a;try{a=await (0,g.readFile)(y,"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?ah(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 al(a){await (0,g.mkdir)(x,{recursive:!0}),await (0,g.writeFile)(y,`${JSON.stringify(a,null,2)}
|
|
5
|
-
`,"utf8")}function
|
|
3
|
+
${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}},9879:(a,b,c)=>{"use strict";c.d(b,{yw:()=>W,er:()=>I,Sn:()=>aI,zw:()=>aL,RB:()=>aK,qu:()=>aN,dM:()=>U,vy:()=>T,GM:()=>J,Y9:()=>aA,pf:()=>aB,xE:()=>V,x4:()=>aJ,Vg:()=>aO,sQ:()=>aM,PR:()=>aP});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}}],tasks:[{id:"task:demo-plan",key:"task:demo-plan",title:"Mission planning task",mission:"Plan the first mission structure while OpenClaw is unavailable.",subtitle:"Fallback surface while OpenClaw is unavailable",status:"running",updatedAt:b-12e4,ageMs:12e4,workspaceId:"workspace-demo",primaryAgentId:"agent-demo-planner",primaryAgentName:"Planner",primaryRuntimeId:"runtime-demo-plan",runtimeIds:["runtime-demo-plan"],agentIds:["agent-demo-planner"],sessionIds:["session-demo-plan"],runIds:[],runtimeCount:1,updateCount:1,liveRunCount:1,artifactCount:0,warningCount:0,tokenUsage:{input:1800,output:220,total:2020,cacheRead:0},metadata:{reason:a}}],relationships:[{id:"edge-demo-planner-model",sourceId:"agent-demo-planner",targetId:"openai-codex/gpt-5.1-codex-mini",kind:"uses-model",label:"primary model"},{id:"edge-demo-executor-model",sourceId:"agent-demo-executor",targetId:"ollama/qwen3.5:9b",kind:"uses-model",label:"local fallback"},{id:"edge-demo-planner-runtime",sourceId:"agent-demo-planner",targetId:"runtime-demo-plan",kind:"active-run",label:"current run"}],missionPresets:["Plan a multi-agent release mission for the selected workspace.","Stand up a builder, tester, and reviewer loop for the next milestone.","Audit the current workspace, identify blockers, and propose the first task batch."]}}function o(a,b){let c="monitoring"===a?{enabled:!0,every:"30m"}:{enabled:!1,every:"30m"},d="string"==typeof b?.every&&b.every.trim()&&"disabled"!==b.every?b.every.trim():c.every;return"boolean"==typeof b?.enabled?{enabled:b.enabled,every:d}:b?.every==="disabled"?{enabled:!1,every:d}:c}function p(a){return a?.enabled?{every:"string"==typeof a.every&&a.every.trim()?a.every.trim():"30m"}:null}var q=c(8912),r=c(2018),s=c(5615);function t(a){return a.replace(/\s+/g," ").trim().toLowerCase()}function u(a,b){let c=t(b),d=t(a);return!!c&&!!d&&(d===c||d.startsWith(`${c} `))}var v=c(3214);let w=(0,l.promisify)(d.execFile),x="gateway.remote.url",y=k().join(process.cwd(),".mission-control"),z=k().join(y,"settings.json"),A=k().join(y,"dispatches"),B=k().join(process.cwd(),"scripts","openclaw-mission-dispatch-runner.mjs"),C=k().join(i().homedir(),".openclaw"),D=/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/gi,E=null,F=null,G=null,H=new Map;function I(){E=null,G=null,H=new Map}async function J(a={}){if(!a.force&&E&&E.expiresAt>Date.now())return a.includeHidden?E.full:E.visible;if(F){let b=await F;return a.includeHidden?b.full:b.visible}F=K();try{let b=await F;return E={...b,expiresAt:Date.now()+1e4},a.includeHidden?b.full:b.visible}finally{F=null}}async function K(){if(!await (0,q.Vg)())return L(n("OpenClaw CLI is not installed on this machine."));try{var a,b,c,d,e;let f,g,h,i,j,l,n,o,p,r,s,t,u,v,w,y=await aT(),z=aQ(y.workspaceRoot)??null,[A,B,C,D,E,F,H,I,J]=await Promise.allSettled([(0,q.VP)(["gateway","status","--json"]),(0,q.VP)(["config","get",x,"--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"])]),K="fulfilled"===A.status?(G={value:A.value,capturedAt:Date.now()},{value:A.value,reusedCachedValue:!1}):G&&Date.now()-G.capturedAt<=6e4?{value:G.value,reusedCachedValue:!0}:{value:void 0,reusedCachedValue:!1},L=K.value,N="fulfilled"===B.status?ca(B.value):void 0,O="fulfilled"===C.status?C.value:void 0,P="fulfilled"===D.status?D.value:[],Q="fulfilled"===E.status?E.value:[],R="fulfilled"===F.status?F.value.models:[],S="fulfilled"===H.status?H.value:void 0,T="fulfilled"===I.status?I.value.sessions:[],U="fulfilled"===J.status?J.value:[],V="fulfilled"===C.status||"fulfilled"===D.status||"fulfilled"===E.status||"fulfilled"===F.status||"fulfilled"===H.status||"fulfilled"===I.status||"fulfilled"===J.status,W=await aZ(P.map(a=>a.id),y),X=new Map,Y=new Map,Z=new Map,$=[],_=[],ac=new Map((O?.heartbeat?.agents??[]).map(a=>[a.agentId,a])),ad=new Map(Q.map(a=>[a.id,a])),ae=new Map;for(let a of T){if(!a.agentId)continue;let b=ae.get(a.agentId)??[];b.push(a),ae.set(a.agentId,b)}let af=(await Promise.all(T.map(a=>az(a,Q,P)))).flat(),ag=await ab(af),ah=bY(ag),ai=await aa(ah),aj=bY([...ai,...ag]);for(let b of P){let c=ad.get(b.id),d=bI(b.workspace),e=ae.get(b.id)??[],f=Z.get(b.workspace)??await bN(b.workspace);Z.set(b.workspace,f);let g=f.agents.find(a=>a.id===b.id)??null,h=(c?.skills??[]).filter(a=>!bp(a)),i=g?.policy??(0,m.g0)((0,m.qF)({skills:h,id:b.id,name:b.name||b.identityName||c?.name||b.id}),{fileAccess:c?.tools?.fs?.workspaceOnly?"workspace-only":"extended"}),j=b.model||c?.model||"unassigned",l=Y.get(b.workspace)??await bJ(b.workspace,{agentId:b.id,agentName:b.name||b.identityName||c?.name||b.id,configuredSkills:h,configuredTools:c?.tools?.fs?.workspaceOnly?["fs.workspaceOnly"]:[]});Y.set(b.workspace,l);let n=aj.filter(a=>a.agentId===b.id).sort(bZ),o=bX(n.flatMap(a=>a.toolNames??[])),p=n.map(a=>a.id),q=n[0],r=e.map(a=>a.updatedAt??0).sort((a,b)=>b-a).at(0)||null,s=ac.get(b.id),t=(a={rpcOk:!!L?.rpc?.ok,activeRuntime:q,heartbeatEnabled:!!s?.enabled,lastActiveAt:r}).rpcOk?a.activeRuntime?.status==="running"||a.activeRuntime?.status==="queued"?"engaged":a.heartbeatEnabled?"monitoring":a.lastActiveAt?"ready":"standby":"offline",u=function(a,b){var c;let d=bI(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:cb(k().basename(b)),path:b,kind:"workspace",agentIds:[],modelIds:[],activeRuntimeIds:[],totalSessions:0,health:"standby",bootstrap:{template:null,sourceMode:null,agentTemplate:null,coreFiles:[],optionalFiles:[],folders:[],projectShell:[],localSkillIds:[]},capabilities:{skills:[],tools:[],workspaceOnlyAgentCount:0}};return a.set(d,f),f}(X,b.workspace);u.agentIds.push(b.id),u.modelIds.push(j),u.activeRuntimeIds.push(...p),u.totalSessions+=e.length;let v={id:b.id,name:b.name||b.identityName||c?.name||b.id,workspaceId:d,workspacePath:b.workspace,modelId:j,isDefault:!!(b.isDefault||c?.default),status:t,sessionCount:e.length,lastActiveAt:r,currentAction:function(a){if(a.runtime)return a.runtime.taskId?"running"===a.runtime.status||"queued"===a.runtime.status?`Tracking task ${a.runtime.taskId.slice(0,8)}`:"completed"===a.runtime.status?`Recent task ${a.runtime.taskId.slice(0,8)} completed`:"cancelled"===a.runtime.status?`Recent task ${a.runtime.taskId.slice(0,8)} cancelled`:"stalled"===a.runtime.status?`Recent task ${a.runtime.taskId.slice(0,8)} stalled`:`Recent task ${a.runtime.taskId.slice(0,8)}`:"running"===a.runtime.status||"queued"===a.runtime.status?"Maintaining main session context":"Main session recently updated";return a.heartbeatEvery?`Heartbeat on ${a.heartbeatEvery}`:"standby"===a.status?"Waiting for assignment":"Ready for next turn"}({runtime:q,heartbeatEvery:s?.every??null,status:t}),activeRuntimeIds:p,heartbeat:{enabled:!!s?.enabled,every:s?.every??null,everyMs:s?.everyMs??null},identity:{emoji:c?.identity?.emoji||b.identityEmoji,theme:c?.identity?.theme,avatar:c?.identity?.avatar,source:b.identitySource},profile:l,skills:h,tools:c?.tools?.fs?.workspaceOnly?["fs.workspaceOnly"]:[],observedTools:o,policy:i};for(let a of($.push(v),_.push({id:`edge:${d}:${v.id}:contains`,sourceId:d,targetId:v.id,kind:"contains",label:"workspace member"}),_.push({id:`edge:${v.id}:${j}:model`,sourceId:v.id,targetId:j,kind:"uses-model",label:"model assignment"}),p))_.push({id:`edge:${v.id}:${a}:run`,sourceId:v.id,targetId:a,kind:"active-run",label:"runtime"})}let ak=new Map;for(let a of $){let b=ak.get(a.workspaceId)??[];b.push(a),ak.set(a.workspaceId,b)}let al=await Promise.all(Array.from(X.values()).map(async a=>{var b;let c,d=ak.get(a.id)??[],e=await bK(a.path,d);return{...a,modelIds:b4(a.modelIds),activeRuntimeIds:b4(a.activeRuntimeIds),health:(b=a.agentIds,(c=$.filter(a=>b.includes(a.id))).some(a=>"engaged"===a.status)?"engaged":c.some(a=>"monitoring"===a.status)?"monitoring":c.some(a=>"ready"===a.status)?"ready":c.some(a=>"offline"===a.status)?"offline":"standby"),bootstrap:e.bootstrap,capabilities:e.capabilities}})),am=new Set(al.filter(a=>Z.get(a.path)?.hidden).map(a=>a.id)),an=$.filter(a=>!am.has(a.workspaceId)),ao=new Set($.filter(a=>am.has(a.workspaceId)).map(a=>a.id)),ap=aj.filter(a=>!(a.agentId&&ao.has(a.agentId))&&!(a.workspaceId&&am.has(a.workspaceId))),aq=new Set(aj.filter(a=>a.agentId&&ao.has(a.agentId)||a.workspaceId&&am.has(a.workspaceId)).map(a=>a.id)),ar=new Set([...am,...ao,...aq]),as=_.filter(a=>!ar.has(a.sourceId)&&!ar.has(a.targetId)),at=al.filter(a=>!am.has(a.id)),au=a=>{let b=new Map;for(let c of a)b.set(c.modelId,(b.get(c.modelId)??0)+1);return R.map(a=>({id:a.key,name:a.name,provider:a.key.split("/")[0]||"unknown",input:a.input,contextWindow:a.contextWindow,local:a.local,available:a.available,missing:a.missing,tags:a.tags,usageCount:b.get(a.key)??0}))},av=(b=R,c=S,f=b.filter(a=>b$(a)),g=b4([...b.map(a=>a.key.split("/")[0]||"unknown"),...(c?.auth?.providers??[]).map(a=>a.provider).filter(b5),...(c?.auth?.oauth?.providers??[]).map(a=>a.provider).filter(b5)].filter(b5)),h=new Map((c?.auth?.providers??[]).filter(a=>b5(a.provider)).map(a=>[a.provider,a])),i=new Map((c?.auth?.oauth?.providers??[]).filter(a=>b5(a.provider)).map(a=>[a.provider,a])),j=ca(c?.resolvedDefault??void 0),l=ca(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=>b$(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 ${b_(c)} API key in terminal to use this route.`:`Connect ${b_(c)} auth in terminal to use this route.`),{provider:a,connected:j,canLogin:e,detail:k}}),t=(c?.auth?.missingProvidersInUse??[]).filter(b5),u=new Set(t),v=c?.auth?.unusableProfiles?.length??0,w=[],0===f.length&&w.push("No available models were detected yet."),f.length>0&&!n&&w.push("Choose a default model to finish setup."),n&&!p&&(o&&u.has(o)?w.push(`Default model is set, but ${b_(o)} auth is still missing.`):t.length>0?w.push(`Default model is set, but auth is still missing for: ${t.join(", ")}.`):w.push("The selected default model is not ready yet.")),t.length>0&&!n&&w.push(`Auth is still missing for: ${t.join(", ")}.`),v>0&&w.push("Some stored model auth profiles are not usable."),{ready:f.length>0&&p,defaultModel:l??null,resolvedDefaultModel:j??null,defaultModelReady:p,recommendedModelId:r??null,preferredLoginProvider:s.find(a=>a.provider===o&&!a.connected&&a.canLogin)?.provider??t.find(a=>s.some(b=>b.provider===a&&!b.connected&&b.canLogin))??s.find(a=>!a.connected&&a.canLogin)?.provider??(g.includes("openai-codex")||0===f.length?"openai-codex":null),totalModelCount:b.length,availableModelCount:f.length,localModelCount:f.filter(a=>a.local).length,remoteModelCount:f.filter(a=>!0!==a.local).length,missingModelCount:b.filter(a=>a.missing||!1===a.available).length,authProviders:s,issues:b4(w)}),aw=O?.securityAudit?.findings?.filter(a=>"warn"===a.severity).map(a=>a.title||a.detail||"Security warning")??[],ax=ca(U[0]?.version||O?.runtimeVersion||O?.overview?.version||O?.version),ay=ca(O?.update?.registry?.latestVersion??void 0),aA=function(a){let b=ca(a);if(b)return b.split(/\r?\n/,1)[0]?.trim()||b}(O?.update?.registry?.error??void 0),aB=ax&&ay?b8(ay,ax)>0:void 0,aC=function(a){let b=ca(a.legacyInfo);if(a.latestVersion&&a.currentVersion){let b=b8(a.latestVersion,a.currentVersion);return b>0?`Update available: v${a.latestVersion} is ready. Current version: v${a.currentVersion}.`:0===b?`OpenClaw is up to date on v${a.currentVersion}.`:`Running v${a.currentVersion}. Registry currently reports v${a.latestVersion}.`}return a.latestVersion?`Latest available version: v${a.latestVersion}. Current version could not be determined.`:b||(a.updateError?`Update registry check failed: ${a.updateError}`:void 0)}({currentVersion:ax,latestVersion:ay,updateError:aA,legacyInfo:O?.overview?.update}),aD={installed:!0,loaded:!!L?.service?.loaded,rpcOk:!!L?.rpc?.ok,health:(d={rpcOk:L?.rpc?.ok,warningCount:aw.length,runtimeIssueCount:W.issues.length,hasOpenClawSignal:V}).rpcOk||d.hasOpenClawSignal?!d.rpcOk||d.warningCount>0||d.runtimeIssueCount>0?"degraded":"healthy":"offline",version:ax,latestVersion:ay,updateAvailable:aB,updateError:aA,updateRoot:ca(O?.update?.root??void 0),updateInstallKind:ca(O?.update?.installKind??void 0),updatePackageManager:ca(O?.update?.packageManager??void 0),workspaceRoot:b0(z),configuredWorkspaceRoot:z??null,dashboardUrl:`http://127.0.0.1:${L?.gateway?.port??18789}/`,gatewayUrl:L?.gateway?.probeUrl||"ws://127.0.0.1:18789",configuredGatewayUrl:N??null,bindMode:L?.gateway?.bindMode,port:L?.gateway?.port,updateChannel:O?.updateChannel||"stable",updateInfo:aC,serviceLabel:L?.service?.label,modelReadiness:av,runtime:W,securityWarnings:aw,issues:[...(e={gatewayStatus:A,status:C,agents:D,models:F,modelStatus:H,sessions:I},Object.entries(e).flatMap(([a,b])=>"rejected"!==b.status?[]:[`${a}: ${b.reason instanceof Error?b.reason.message:String(b.reason)}`])),..."rejected"===A.status&&K.reusedCachedValue?["gatewayStatus: Reusing the last successful gateway status after a transient OpenClaw check failure."]:[],...W.issues]},aE=M(aj,$),aF=M(ap,an),aG={generatedAt:new Date().toISOString(),mode:"live",diagnostics:aD,presence:U.map(a=>({host:a.host,ip:a.ip,version:a.version,platform:a.platform,deviceFamily:a.deviceFamily,mode:a.mode,reason:a.reason,text:a.text,ts:a.ts})),missionPresets:["Audit the selected workspace and generate a concrete first task batch.","Plan a multi-agent delivery mission for the current product goal.","Review active runtimes, identify blockers, and propose the next handoff."]};return{full:{...aG,workspaces:al,agents:$,models:au($),runtimes:aj,tasks:aE,relationships:_},visible:{...aG,workspaces:at,agents:an,models:au(an),runtimes:ap,tasks:aF,relationships:as}}}catch(a){return L(n(a instanceof Error?a.message:"Unknown OpenClaw error."))}}function L(a){return{visible:a,full:a}}function M(a,b){let c=new Map,d=new Map(b.map(a=>[a.id,a.name])),e=function(a){let b=new Map;for(let c of a){let a=c.sessionId?.trim(),d="string"==typeof c.metadata.dispatchId?c.metadata.dispatchId.trim():"";a&&d&&b.set(`${c.agentId??"unknown"}:${a}`,d)}return b}(a);for(let b of a){let a=function(a,b){let c=a.taskId?.trim(),d="string"==typeof a.metadata.dispatchId?a.metadata.dispatchId.trim():"",e=N(a),f=a.sessionId?.trim(),g=f?b.get(`${a.agentId??"unknown"}:${f}`)?.trim()??"":"";return d?`dispatch:${d}`:g?`dispatch:${g}`:c?`task:${c}`:e?`mission:${a.agentId??"unknown"}:${R(e)}`:f?`session:${f}`:`runtime:${a.id}`}(b,e),d=c.get(a)??[];d.push(b),c.set(a,d)}return Array.from(c.entries()).map(([a,b])=>{var c,e,f,g,h;let i,j,k,l,m,n,o,p,q,r,s,t,u,v;return c=a,e=b,f=d,l=N(k=[...j=function(a){let b=a.filter(a=>"turn"===a.source||"string"==typeof a.metadata.turnId);if(b.length>0)return b;let c=a.filter(a=>"string"==typeof a.metadata.dispatchId||"string"==typeof a.metadata.bootstrapStage);return c.length>0?c:a}(i=[...e].sort(bZ))].sort((a,b)=>O(b)-O(a))[0]??j[0]??i[0])||i.map(a=>N(a)).find(Boolean)||null,m=j.map(a=>a.subtitle?.trim()).find(a=>!!a)||i.map(a=>a.subtitle?.trim()).find(a=>!!a)||"Awaiting OpenClaw updates.",n=bF(i.flatMap(a=>P(a)).concat(i.flatMap(a=>(function(a){if("string"!=typeof a||0===a.trim().length)return[];let b=[...a.matchAll(/(?:^|[\s(])((?:\.{1,2}\/)?deliverables\/[^\s`),;]+)/g),...a.matchAll(/`((?:\/|\.{1,2}\/|deliverables\/)[^`\n]+)`/g)],c=[];for(let a of b){let b=(a[1]||"").trim();b&&c.push({path:b,displayPath:b})}return bF(c)})(a.subtitle)))),o=bX(i.flatMap(a=>Q(a))),p=function(a){let b=a.filter(a=>a.tokenUsage);if(0!==b.length)return b.reduce((a,b)=>({input:a.input+(b.tokenUsage?.input??0),output:a.output+(b.tokenUsage?.output??0),total:a.total+(b.tokenUsage?.total??0),cacheRead:(a.cacheRead??0)+(b.tokenUsage?.cacheRead??0)}),{input:0,output:0,total:0,cacheRead:0})}(i),q=bX(i.flatMap(a=>a.agentId?[a.agentId]:[])),r=bX(i.flatMap(a=>a.sessionId?[a.sessionId]:[])),s=bX(i.flatMap(a=>a.runId?[a.runId]:[])),u=(t=k?.agentId||q[0])?f.get(t)??null:null,v=i[0]??null,{id:(g=c,`task:${R(g)}`),key:c,title:l||k?.title||"Untitled task",mission:l,subtitle:m,status:(h=i).some(a=>"running"===a.status)?"running":h.some(a=>"cancelled"===a.status)?"cancelled":h.some(a=>"queued"===a.status)?"queued":h.some(a=>"stalled"===a.status)?"stalled":h.some(a=>"idle"===a.status)?"idle":h[0]?.status??"completed",updatedAt:v?.updatedAt??null,ageMs:v?.ageMs??null,workspaceId:k?.workspaceId,primaryAgentId:t,primaryAgentName:u,primaryRuntimeId:k?.id,dispatchId:function(a){for(let b of a)if("string"==typeof b.metadata.dispatchId&&b.metadata.dispatchId.trim())return b.metadata.dispatchId.trim()}(i),runtimeIds:i.map(a=>a.id),agentIds:q,sessionIds:r,runIds:s,runtimeCount:i.length,updateCount:j.filter(a=>"turn"===a.source).length,liveRunCount:i.filter(a=>"running"===a.status||"queued"===a.status).length,artifactCount:n.length,warningCount:o.length,tokenUsage:p,metadata:{mission:l,primaryRuntimeSource:k?.source??null,bootstrapStage:"string"==typeof k?.metadata.bootstrapStage?k.metadata.bootstrapStage:null,dispatchStatus:"string"==typeof k?.metadata.dispatchStatus?k.metadata.dispatchStatus:null,dispatchSubmittedAt:"string"==typeof k?.metadata.dispatchSubmittedAt?k.metadata.dispatchSubmittedAt:null,dispatchRunnerStartedAt:"string"==typeof k?.metadata.dispatchRunnerStartedAt?k.metadata.dispatchRunnerStartedAt:null,dispatchHeartbeatAt:"string"==typeof k?.metadata.dispatchHeartbeatAt?k.metadata.dispatchHeartbeatAt:null,dispatchObservedAt:"string"==typeof k?.metadata.dispatchObservedAt?k.metadata.dispatchObservedAt:null,outputDir:"string"==typeof k?.metadata.outputDir?k.metadata.outputDir:null,outputDirRelative:"string"==typeof k?.metadata.outputDirRelative?k.metadata.outputDirRelative:null}}}).sort((a,b)=>(b.updatedAt??0)-(a.updatedAt??0))}function N(a){let b="string"==typeof a.metadata.mission?a.metadata.mission:"string"==typeof a.metadata.turnPrompt?a.metadata.turnPrompt:null;if(!b)return null;let c=b.replace(/\s+/g," ").trim();return c.length>0?c:null}function O(a){return 8*!!N(a)+6*("string"==typeof a.metadata.dispatchId)+("turn"===a.source?6:"session"===a.source?4:2)+("running"===a.status?3:"queued"===a.status?2:"cancelled"===a.status||"stalled"===a.status?3:"idle"===a.status?2:1)}function P(a){let b=a.metadata.createdFiles;return Array.isArray(b)?b.flatMap(a=>{if(!a||"object"!=typeof a)return[];let b="path"in a&&"string"==typeof a.path?a.path:null,c="displayPath"in a&&"string"==typeof a.displayPath?a.displayPath:b;return b&&c?[{path:b,displayPath:c}]:[]}):[]}function Q(a){let b=a.metadata.warnings;return Array.isArray(b)?b.filter(a=>"string"==typeof a&&a.trim().length>0):[]}function R(a){return(0,e.createHash)("sha1").update(a).digest("hex").slice(0,12)}async function S(a){let b=await aY(a?[a]:[],{touch:!0});if(b.issues.length>0)throw E=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 T(a={}){return await S(a.agentId??null),E=null,J({force:!0,includeHidden:!0})}async function U(a={}){var b,c,d,e;let f=(b=await J({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 aT(),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 aV(f,g);await S(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 aW(b),E=null,b}catch(b){let a={status:"failed",checkedAt:new Date().toISOString(),agentId:f,runId:null,summary:null,error:a$(b)||"OpenClaw runtime smoke test failed."};return await aW(a),E=null,a}}async function V(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 J({force:!0,includeHidden:!0}),l=a.agentId||function(a,b){if(!b)return a.agents.find(a=>a.isDefault)?.id||a.agents[0]?.id;let c=a.agents.filter(a=>a.workspaceId===b);return c.find(a=>a.isDefault)?.id||c.find(a=>"engaged"===a.status)?.id||c[0]?.id}(k,a.workspaceId);if(!l)throw Error("No OpenClaw agent is available for mission dispatch.");let n=k.agents.find(a=>a.id===l),o=k.workspaces.find(b=>b.id===(a.workspaceId||n?.workspaceId))??(n?{id:n.workspaceId,path:n.workspacePath}:null),p=o?k.agents.filter(a=>a.workspaceId===o.id):[],q=p.find(a=>"setup"===a.policy.preset&&a.id!==n?.id)?.id??null,s=o?await bg(o.path,j):null,t=a.thinking??"medium",u=s?(b=j,c=s,d=n?.policy,f=q,h=d??(0,m.g0)(m.iN),[b,"","Task output routing:",`- Put substantial outputs, drafts, reports, docs, and file deliverables under \`${c.relativeOutputDir}/\`.`,`- If a file is requested, default to \`${c.relativeOutputDir}/<descriptive-file-name>\` unless the user explicitly asks for another path.`,`- Use \`${c.notesDirRelative}/\` only for temporary notes or durable workspace memory, not final deliverables.`,"- Avoid writing final artifacts to the workspace root.","- Only update shared workspace docs when the change is durable and workspace-wide; task-specific docs should stay inside this run folder.","","Agent operating policy:",...bh(h,f)].join("\n")):j,v=(0,r.iN)(k)?k.diagnostics.modelReadiness.ready?null:"OpenClaw model setup is incomplete. Configure a usable default model before dispatching missions.":"OpenClaw system setup is incomplete. Verify the CLI, gateway, and runtime state before dispatching missions.",w=(g={agentId:l,mission:j,routedMission:u,thinking:t,workspaceId:o?.id??null,workspacePath:o?.path??null,outputDir:s?.absoluteOutputDir??null,outputDirRelative:s?.relativeOutputDir??null,notesDirRelative:s?.notesDirRelative??null},i=new Date().toISOString(),{id:`dispatch-${(0,e.randomUUID)()}`,status:"queued",agentId:g.agentId,sessionId:(0,e.randomUUID)(),mission:g.mission,routedMission:g.routedMission,thinking:g.thinking,workspaceId:g.workspaceId,workspacePath:g.workspacePath,submittedAt:i,updatedAt:i,outputDir:g.outputDir,outputDirRelative:g.outputDirRelative,notesDirRelative:g.notesDirRelative,runner:{pid:null,childPid:null,startedAt:null,finishedAt:null,lastHeartbeatAt:null},observation:{runtimeId:null,observedAt:null},result:null,error:null});if(await Y(w),v)return w={...w,status:"stalled",updatedAt:new Date().toISOString(),error:v},await Y(w),E=null,{dispatchId:w.id,runId:null,agentId:l,status:w.status,summary:v,payloads:[],meta:{outputDir:s?.absoluteOutputDir,outputDirRelative:s?.relativeOutputDir,notesDirRelative:s?.notesDirRelative}};try{w=await Z(w)}catch(a){throw w={...w,status:"stalled",updatedAt:new Date().toISOString(),error:a$(a)||"Mission dispatch runner could not be started."},await Y(w),E=null,Error(w.error??"Mission dispatch runner could not be started.")}return E=null,{dispatchId:w.id,runId:null,agentId:l,status:w.status,summary:"Mission accepted and queued for OpenClaw execution.",payloads:[],meta:{outputDir:s?.absoluteOutputDir,outputDirRelative:s?.relativeOutputDir,notesDirRelative:s?.notesDirRelative}}}async function W(a,b,c){var d;let e,f=(await J({force:!0,includeHidden:!0})).tasks.find(b=>b.id===a),g=f?await $(f):c?await ag(c):null;if(!f&&!g)throw Error("Task was not found in the current OpenClaw snapshot.");if(!g)throw Error("Mission dispatch record was not found for this task.");if(aj(g.status))return{taskId:a,dispatchId:g.id,status:g.status,summary:ay(g),reason:g.error,runnerPid:g.runner.pid,childPid:g.runner.childPid,abortedAt:g.runner.finishedAt??g.updatedAt};let h=new Date().toISOString(),i=(e="string"==typeof(d=b)?d.trim():"").length>0?e:"Mission aborted by operator.",j={...g,status:"cancelled",updatedAt:h,error:i,runner:{...g.runner,finishedAt:h,lastHeartbeatAt:h}};await Y(j),E=null;let k=await _(j);return{taskId:a,dispatchId:j.id,status:j.status,summary:i,reason:i,runnerPid:j.runner.pid,childPid:k??j.runner.childPid,abortedAt:h}}function X(a){return k().join(A,`${a}.json`)}async function Y(a){let b=X(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)}
|
|
4
|
+
`,"utf8"),await (0,g.rename)(c,b)}async function Z(a){await (0,g.access)(B,f.constants.R_OK);let b=await (0,q.XP)(),c=(0,d.spawn)(process.execPath,[B,X(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 $(a){if(a.dispatchId){let b=await ag(a.dispatchId);if(b)return b}let b=await af(),c=new Set(a.runtimeIds),d=new Set(a.sessionIds);for(let e of b){if(e.agentId!==a.primaryAgentId&&!a.agentIds.includes(e.agentId))continue;if(a.mission&&e.mission&&u(e.mission,a.mission)||e.observation.runtimeId&&c.has(e.observation.runtimeId))return e;let b=as(e);if(b&&d.has(b))return e}return null}async function _(a){let b=new Set;if("number"==typeof a.runner.childPid&&Number.isFinite(a.runner.childPid)&&b.add(a.runner.childPid),0===b.size&&"number"==typeof a.runner.pid&&Number.isFinite(a.runner.pid))try{let{stdout:c}=await w("pgrep",["-P",String(a.runner.pid)]);for(let a of c.split(/\r?\n/)){let c=Number.parseInt(a.trim(),10);Number.isFinite(c)&&c>0&&b.add(c)}}catch{}for(let a of b)try{process.kill(a,"SIGTERM")}catch{}return b.values().next().value??null}async function aa(a){let b=await af(),c=[],d=Date.now();for(let e of b){let b=ak(e,a);if(b){await ac(e,b),await ad(e,b);continue}let f=await ae(e);if(f){aj(e.status)||await ad(e,f),c.push(am(await ag(e.id)??e,f.sessionId??as(e)??void 0));continue}c.push(function(a,b){let c=Date.parse(a.updatedAt),d=ao(a,b),e=an(a,d),f=function(a,b){if("completed"===b||"cancelled"===b)return bG(ay(a),90);if("stalled"===b)return a.error?bG(a.error,90):a.runner.lastHeartbeatAt?"Dispatch stalled while waiting for the first OpenClaw runtime.":"Dispatch stalled before the first runner heartbeat.";let c=an(a,b);return"runtime-observed"===c?"First runtime observed. Promoting the task to live updates.":"waiting-for-runtime"===c?"Heartbeat received. Waiting for the first OpenClaw runtime.":"waiting-for-heartbeat"===c?"Dispatch runner started. Waiting for the first heartbeat.":"Mission accepted. Starting the OpenClaw dispatch runner."}(a,d),g=as(a),h=at(a),i=au(a),j=ax(a);return{id:`runtime:dispatch:${a.id}`,source:"turn",key:`dispatch:${a.id}`,title:bG(a.mission,38)||"Queued mission",subtitle:j?bG(j,90):f,status:d,updatedAt:Number.isNaN(c)?Date.parse(a.submittedAt)||null:c,ageMs:Number.isNaN(c)?null:Math.max(b-c,0),agentId:a.agentId,workspaceId:a.workspaceId??void 0,modelId:h??void 0,sessionId:g??void 0,runId:a.result?.runId,tokenUsage:i,metadata:{dispatchId:a.id,mission:a.mission,routedMission:a.routedMission,outputDir:a.outputDir,outputDirRelative:a.outputDirRelative,notesDirRelative:a.notesDirRelative,error:a.error,sessionId:g,pendingCreation:"queued"===d||"running"===d,bootstrapStage:e,dispatchStatus:a.status,dispatchSubmittedAt:a.submittedAt,dispatchRunnerStartedAt:a.runner.startedAt,dispatchHeartbeatAt:a.runner.lastHeartbeatAt,dispatchObservedAt:a.observation.observedAt,...j?{warnings:[j],warningSummary:j}:{}}}}(e,d))}return c.sort(bZ)}async function ab(a){if(0===a.length)return a;let b=await af();if(0===b.length)return a;let c=[...a],d=new Map(c.map((a,b)=>[a.id,b]));for(let a of b){let b=a.observation.runtimeId?.trim(),e=(b&&d.has(b)?c[d.get(b)]:null)??ak(a,c);if(!e)continue;let f=d.get(e.id);"number"==typeof f&&(c[f]=function(a,b){let c="string"==typeof a.metadata.dispatchId?a.metadata.dispatchId.trim():"",d=N(a),e=aj(b.status)?b.status:a.status;return c===b.id&&d&&"string"==typeof a.metadata.dispatchStatus&&a.metadata.dispatchStatus===b.status&&a.status===e?a:{...a,status:e,metadata:{...a.metadata,dispatchId:b.id,dispatchStatus:b.status,dispatchSubmittedAt:b.submittedAt,dispatchRunnerStartedAt:b.runner.startedAt,dispatchHeartbeatAt:b.runner.lastHeartbeatAt,dispatchObservedAt:b.observation.observedAt,mission:d?a.metadata.mission:b.mission}}}(e,a))}return c}async function ac(a,b){let c=bz(b.updatedAt);if(a.observation.runtimeId===b.id&&a.observation.observedAt===c)return;let d=await ag(a.id)??a;(d.observation.runtimeId!==b.id||d.observation.observedAt!==c)&&await Y({...d,updatedAt:ai(d.updatedAt,c),observation:{runtimeId:b.id,observedAt:c}})}async function ad(a,b){var c,d;if(aj(a.status)||!b.agentId||!b.sessionId)return;let e=await bw(b.agentId,b.sessionId,a.workspacePath??void 0);if(!e)return;let f="";try{f=await (0,g.readFile)(e,"utf8")}catch{return}let h=bA(b,f,a.workspacePath??void 0),i=!!(h.finalTimestamp&&h.stopReason&&"toolUse"!==h.stopReason),j=!!h.errorMessage||"error"===h.stopReason||"aborted"===h.stopReason;if(!i&&!j)return;let k=await ag(a.id)??a;if(aj(k.status))return;let l=h.finalTimestamp??bz(b.updatedAt),m=j?"stalled":"completed";await Y({...k,status:m,updatedAt:ai(k.updatedAt,l),runner:{...k.runner,finishedAt:l,lastHeartbeatAt:l},result:"completed"===m?k.result??(c=b,(d=h).finalText||c.runId?{runId:c.runId||`runtime:${c.id}`,status:d.errorMessage?"error":"ok",summary:d.errorMessage||"completed",...d.finalText?{result:{payloads:[{text:d.finalText,mediaUrl:null}]}}:{}}:null):k.result,error:"stalled"===m?h.errorMessage||k.error||"OpenClaw runtime ended before the dispatch runner finalized.":null})}async function ae(a){let b=as(a);if(!a.agentId||!b)return null;let c=await bw(a.agentId,b,a.workspacePath??void 0);if(!c)return null;try{let d=await (0,g.readFile)(c,"utf8"),e=am(a,b),f=bC(d,e,a.workspacePath??void 0);if(0===f.length||a.mission&&!f.some(b=>u(b.prompt,a.mission)))return null;return e}catch{return null}}async function af(){try{let a=await (0,g.readdir)(A,{withFileTypes:!0}),b=Date.now();return(await Promise.all(a.filter(a=>a.isFile()&&a.name.endsWith(".json")).map(async a=>{var c,d;let e,f=k().join(A,a.name),h=await ah(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 ag(a){return ah(X(a))}async function ah(a){try{var b,c,d;let e=await (0,g.readFile)(a,"utf8"),f=JSON.parse(e);if(!f||"object"!=typeof f||"string"!=typeof f.id||"string"!=typeof f.agentId||"string"!=typeof f.mission||"string"!=typeof f.routedMission||"string"!=typeof f.submittedAt||"string"!=typeof f.updatedAt)return null;let h=(b=f.status,"running"===b||"completed"===b||"stalled"===b||"cancelled"===b?b:"queued");return{id:f.id,status:h,agentId:f.agentId,sessionId:"string"==typeof f.sessionId?f.sessionId:null,mission:f.mission,routedMission:f.routedMission,thinking:(c=f.thinking,"off"===c||"minimal"===c||"low"===c||"high"===c?c:"medium"),workspaceId:"string"==typeof f.workspaceId?f.workspaceId:null,workspacePath:"string"==typeof f.workspacePath?f.workspacePath:null,submittedAt:f.submittedAt,updatedAt:f.updatedAt,outputDir:"string"==typeof f.outputDir?f.outputDir:null,outputDirRelative:"string"==typeof f.outputDirRelative?f.outputDirRelative:null,notesDirRelative:"string"==typeof f.notesDirRelative?f.notesDirRelative:null,runner:{pid:"number"==typeof f.runner?.pid?f.runner.pid:null,childPid:"number"==typeof f.runner?.childPid?f.runner.childPid:null,startedAt:"string"==typeof f.runner?.startedAt?f.runner.startedAt:null,finishedAt:"string"==typeof f.runner?.finishedAt?f.runner.finishedAt:null,lastHeartbeatAt:"string"==typeof f.runner?.lastHeartbeatAt?f.runner.lastHeartbeatAt:null},observation:{runtimeId:"string"==typeof f.observation?.runtimeId?f.observation.runtimeId:null,observedAt:"string"==typeof f.observation?.observedAt?f.observation.observedAt:null},result:(d=f.result,"object"==typeof d&&null!==d&&"string"==typeof d.runId&&"string"==typeof d.status&&"string"==typeof d.summary)?f.result:null,error:"string"==typeof f.error?f.error:null}}catch{return null}}function ai(a,b){let c=a?Date.parse(a):NaN,d=b?Date.parse(b):NaN;return Number.isNaN(c)?b??new Date().toISOString():Number.isNaN(d)||c>=d?a??new Date().toISOString():b}function aj(a){return"completed"===a||"stalled"===a||"cancelled"===a}function ak(a,b){var c,d,e;let f=Date.parse(a.submittedAt),g=ao(a,Date.now()),h=as(a),i=a.observation.runtimeId?.trim()||null;return(c=i,d=b,("completed"===(e=g)||"stalled"===e||"cancelled"===e)&&c&&!d.some(a=>a.id===c))?null:b.map(b=>({runtime:b,score:function(a,b,c){if(al(a)||a.agentId!==b.agentId)return null;let d="string"==typeof a.metadata.dispatchId?a.metadata.dispatchId.trim():"";if(d&&d!==b.id||(a.updatedAt??0)<(Number.isNaN(c.submittedAt)?0:c.submittedAt-1500))return null;if("completed"===c.effectiveStatus||"stalled"===c.effectiveStatus||"cancelled"===c.effectiveStatus)return d===b.id?500:null;if(c.observedRuntimeId&&a.id===c.observedRuntimeId)return 1e4;if(c.sessionId&&a.sessionId!==c.sessionId)return null;let e=function(a,b,c={}){if(c.agentId&&a.agentId!==c.agentId||"number"==typeof c.submittedAt&&(a.updatedAt??0)<c.submittedAt-1500)return!1;let d=function(a){let b="string"==typeof a.metadata.mission?a.metadata.mission:"string"==typeof a.metadata.turnPrompt?a.metadata.turnPrompt:null;if(!b)return null;let c=t(b);return c.length>0?c:null}(a);return!!d&&u(d,b)}(a,b.mission,{agentId:b.agentId,submittedAt:c.submittedAt});return"turn"!==a.source||e?0+("turn"===a.source?400:"session"===a.source?40:20)+240*!!e+(c.sessionId&&a.sessionId===c.sessionId?120:0)+80*(d===b.id):null}(b,a,{submittedAt:f,sessionId:h,observedRuntimeId:i,effectiveStatus:g})})).filter(a=>"number"==typeof a.score).sort((a,b)=>b.score-a.score||bZ(a.runtime,b.runtime))[0]?.runtime}function al(a){return a.id.startsWith("runtime:dispatch:")}function am(a,b){let c=Date.parse(a.observation.observedAt??a.updatedAt??a.submittedAt),d=Date.now(),e=ao(a,d),f=b??as(a)??cc(a.id),g=ax(a);return{id:a.observation.runtimeId||`runtime:${f}:${cc(a.id)}`,source:"turn",key:`dispatch:${a.id}`,title:bG(a.mission,38)||"Recovered mission runtime",subtitle:g?bG(g,90):"completed"===a.status||"cancelled"===a.status?bG(ay(a),90):"stalled"===a.status?"Recovered the stalled runtime from the saved transcript.":"Recovering runtime state from the saved transcript.",status:e,updatedAt:Number.isNaN(c)?null:c,ageMs:Number.isNaN(c)?null:Math.max(d-c,0),agentId:a.agentId,workspaceId:a.workspaceId??void 0,modelId:at(a)??void 0,sessionId:f,tokenUsage:au(a),metadata:{mission:a.mission,dispatchId:a.id,routedMission:a.routedMission,outputDir:a.outputDir,outputDirRelative:a.outputDirRelative,notesDirRelative:a.notesDirRelative,error:a.error,sessionId:f,pendingCreation:"queued"===e||"running"===e,bootstrapStage:an(a,e),dispatchStatus:a.status,dispatchSubmittedAt:a.submittedAt,dispatchRunnerStartedAt:a.runner.startedAt,dispatchHeartbeatAt:a.runner.lastHeartbeatAt,dispatchObservedAt:a.observation.observedAt,recoveredFromObservation:!0,...g?{warnings:[g],warningSummary:g}:{}}}}function an(a,b){return"completed"===b?"completed":"cancelled"===b?"cancelled":"stalled"===b?"stalled":a.observation.runtimeId||a.observation.observedAt?"runtime-observed":a.runner.lastHeartbeatAt?"waiting-for-runtime":a.runner.startedAt||a.runner.pid?"waiting-for-heartbeat":"accepted"}function ao(a,b){if("completed"===a.status)return"completed";if("cancelled"===a.status)return"cancelled";if("stalled"===a.status)return"stalled";if("running"===a.status){let c=Date.parse(a.runner.lastHeartbeatAt||a.updatedAt);return!Number.isNaN(c)&&b-c>9e4?"stalled":"running"}let c=Date.parse(a.submittedAt);return!Number.isNaN(c)&&b-c>3e4?"stalled":"queued"}function ap(a){let b=a.result?.result?.meta;if(!b||"object"!=typeof b)return null;let c=b.agentMeta;return c&&"object"==typeof c?c:null}function aq(a,b){let c=a?.[b];return"string"==typeof c&&c.trim().length>0?c:null}function ar(a,b){let c=a?.[b];return"number"==typeof c&&Number.isFinite(c)?c:null}function as(a){return(a.sessionId?.trim()||null)??aq(ap(a),"sessionId")??function(a){let b=a?.trim();if(!b?.startsWith("runtime:"))return null;let c=b.split(":")[1];return c&&"dispatch"!==c?c:null}(a.observation.runtimeId)}function at(a){return aq(ap(a),"model")}function au(a){let b=ap(a),c=b?.usage;if(!c||"object"!=typeof c)return;let d=ar(c,"total")??ar(c,"totalTokens")??ar(c,"total_tokens");if(null!==d)return{input:ar(c,"input")??ar(c,"prompt_tokens")??0,output:ar(c,"output")??ar(c,"completion_tokens")??0,total:d,cacheRead:ar(c,"cacheRead")??0}}function av(a){let b=a.result?.summary?.trim();if(!b)return null;let c=b.toLowerCase();return"completed"===c||"ok"===c||"success"===c||aG(b)?null:b}function aw(a){let b=a.result?.result?.payloads?.find(a=>a.text.trim().length>0)?.text.trim()??null;return aG(b)?null:b}function ax(a){let b=aw(a);return"completed"!==a.status||!function(a){if("string"!=typeof a)return!1;let b=a.replace(/\s+/g," ").trim().toLowerCase();return!!b&&("ready"===b||"[[reply_to_current]] ready"===b||"mission accepted"===b||"mission queued"===b)}(b)?null:a.observation.observedAt?"Dispatch finished, but the saved reply still looks like a placeholder READY response.":"Dispatch finished, but the only saved result was READY and no mission transcript was linked."}function ay(a){let b=ax(a);if(b)return b;if("cancelled"===a.status)return bG(a.error||"Mission aborted by operator.",90);let c=av(a)||aw(a);return c||(a.observation.observedAt?"Dispatch runner finished. Waiting for the final runtime transcript to sync.":a.outputDirRelative?`Dispatch runner finished \xb7 ${a.outputDirRelative}`:"Dispatch runner finished.")}async function az(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)?bI(o):void 0,q=b2(d.key,"task"),r=b2(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=b2((j=d).key,"task")||j.key||j.sessionId||String(Math.random()),l=j.sessionId||cc(j.agentId||"sessionless"),`runtime:${l}:${cc(k)}`),v=q?q.slice(0,8):null,{id:u,source:"session",key:d.key||"unknown-session",title:v?`${b3(d.agentId)} \xb7 ${v}`:`${b3(d.agentId)} session`,subtitle:v?`task ${v} \xb7 ${r||"running"}`:"main session",status:t,updatedAt:d.updatedAt??null,ageMs:d.ageMs??null,agentId:d.agentId,workspaceId:p,modelId:s,sessionId:d.sessionId,taskId:q,tokenUsage:"number"==typeof d.totalTokens||"number"==typeof d.inputTokens?{input:d.inputTokens??0,output:d.outputTokens??0,total:d.totalTokens??(d.inputTokens??0)+(d.outputTokens??0),cacheRead:d.cacheRead??0}:void 0,metadata:{kind:d.kind??"direct",stage:r??null,historical:!1}});if(!a.key?.endsWith(":main")||!a.agentId||!a.sessionId)return[w];let x=c.find(b=>b.id===a.agentId),y=b.find(b=>b.id===a.agentId),z=await bw(a.agentId,a.sessionId,x?.workspace||y?.workspace);if(!z)return[w];try{let a=await (0,g.readFile)(z,"utf8"),b=bC(a,w,x?.workspace||y?.workspace).filter(a=>!a.prompt.toLowerCase().startsWith("read heartbeat.md if it exists")),c=bE(b);if(0===b.length)return[w];return b.slice(-6).reverse().map(a=>(function(a,b,c=b.toolNames){var d,e;let f,g=Date.parse(b.updatedAt),h=(d=b.prompt,e=a.agentId,(f=d.trim())?bG(f,38):`${b3(e)} run`),i=b.warningSummary?bG(`Completed with fallback: ${b.warningSummary}`,90):b.finalText?bG(b.finalText,90):"stalled"===b.status?"Run stalled":"Main session run";return{id:`runtime:${a.sessionId}:${b.id}`,source:"turn",key:`${a.key}:turn:${b.id}`,title:h,subtitle:i,status:b.status,updatedAt:Number.isNaN(g)?a.updatedAt:g,ageMs:Number.isNaN(g)?a.ageMs:Math.max(Date.now()-g,0),agentId:a.agentId,workspaceId:a.workspaceId,modelId:a.modelId,sessionId:a.sessionId,taskId:a.taskId,runId:b.runId||b.id,toolNames:c,tokenUsage:b.tokenUsage,metadata:{...a.metadata,turnId:b.id,turnPrompt:b.prompt,stage:"main.turn",historical:"running"!==b.status,createdFiles:b.createdFiles,warnings:b.warnings,warningSummary:b.warningSummary}}})(w,a,c))}catch{return[w]}}async function aA(a){let b=await J({includeHidden:!0}),c=b.runtimes.find(b=>b.id===a);return(c||(c=(b=await J({force:!0,includeHidden:!0})).runtimes.find(b=>b.id===a)),c)?aH(c,b):{runtimeId:a,status:"missing",finalText:null,finalTimestamp:null,stopReason:null,errorMessage:"Runtime was not found in the current OpenClaw snapshot.",items:[],createdFiles:[],warnings:[],warningSummary:null}}async function aB(a){let b=await J({includeHidden:!0}),c=b.tasks.find(b=>b.id===a);if(c||(c=(b=await J({force:!0,includeHidden:!0})).tasks.find(b=>b.id===a)),!c)throw Error("Task was not found in the current OpenClaw snapshot.");let d=c.runtimeIds.map(a=>b.runtimes.find(b=>b.id===a)).filter(a=>!!a).sort(bZ),e=await Promise.all(d.map(a=>aH(a,b))),f=new Map(e.map(a=>[a.runtimeId,a])),g=bF(e.flatMap(a=>a.createdFiles).concat(d.flatMap(a=>P(a)))),h=bX(e.flatMap(a=>a.warnings).concat(d.flatMap(a=>Q(a)))),i=c.dispatchId?await ag(c.dispatchId):null,j=function(a,b,c){if(!b)return[];let d=c.agents.find(b=>b.id===a.primaryAgentId)?.name??"OpenClaw",e=[by({id:`${b.id}:accepted`,kind:"user",timestamp:b.submittedAt,title:"Mission accepted",detail:bG(a.mission||b.mission||"Mission queued for dispatch.",220),agentId:a.primaryAgentId},{urlSources:[a.mission,b.mission,b.routedMission]})];if((b.runner.startedAt||b.runner.pid)&&e.push(by({id:`${b.id}:runner-started`,kind:"status",timestamp:b.runner.startedAt??b.updatedAt,title:"Dispatch runner started",detail:b.outputDirRelative?`Preparing the first OpenClaw runtime in ${b.outputDirRelative}.`:"Preparing the first OpenClaw runtime."},{file:b.outputDir&&b.outputDirRelative?{path:b.outputDir,displayPath:b.outputDirRelative}:null})),b.runner.lastHeartbeatAt&&e.push(by({id:`${b.id}:heartbeat`,kind:"status",timestamp:b.runner.lastHeartbeatAt,title:"Heartbeat received",detail:`${d} is online. Waiting for the first runtime session.`},{urlSources:[d,b.outputDirRelative]})),b.observation.observedAt&&e.push(by({id:`${b.id}:runtime-observed`,kind:"status",timestamp:b.observation.observedAt,title:"Runtime observed",detail:"The task is now live. Runtime updates will continue below."},{urlSources:[b.outputDirRelative]})),"completed"===b.status){let a=av(b)||aw(b);e.push(by({id:`${b.id}:completed`,kind:"status",timestamp:b.runner.finishedAt??b.updatedAt,title:a?"Mission finished":"Dispatch runner finished",detail:bG(a||ay(b),220)},{urlSources:[a,ay(b),b.outputDirRelative],file:b.outputDir&&b.outputDirRelative?{path:b.outputDir,displayPath:b.outputDirRelative}:null}))}"cancelled"===b.status&&e.push(by({id:`${b.id}:cancelled`,kind:"warning",timestamp:b.runner.finishedAt??b.updatedAt,title:"Mission cancelled",detail:bG(ay(b),220),isError:!1},{urlSources:[b.error,b.outputDirRelative],file:b.outputDir&&b.outputDirRelative?{path:b.outputDir,displayPath:b.outputDirRelative}:null}));let f=ax(b);return f&&e.push(by({id:`${b.id}:integrity-warning`,kind:"warning",timestamp:b.runner.finishedAt??b.updatedAt,title:"Result needs review",detail:bG(f,220),isError:!0},{urlSources:[b.outputDirRelative],file:b.outputDir&&b.outputDirRelative?{path:b.outputDir,displayPath:b.outputDirRelative}:null})),"stalled"===b.status&&e.push(by({id:`${b.id}:stalled`,kind:"warning",timestamp:b.updatedAt,title:b.error?"Dispatch error":"Dispatch stalled",detail:bG(b.error||(b.runner.lastHeartbeatAt?"OpenClaw stopped reporting progress while waiting for the first runtime.":"OpenClaw did not produce the first heartbeat in time."),220),isError:!0},{urlSources:[b.error,b.outputDirRelative]})),e}(c,i,b),k=function(a,b,c,d){let e=new Map(d.agents.map(a=>[a.id,a.name])),f=[];for(let d of[...b].sort((a,b)=>(a.updatedAt??0)-(b.updatedAt??0))){var g,h;if(a.dispatchId&&al(d))continue;let b=c.get(d.id),i=d.agentId?e.get(d.agentId)??null:null,j=(g=d,(h=b?.finalTimestamp)||bz(g.updatedAt));if(b?.items.length)for(let a of b.items)f.push(by({id:`${d.id}:${a.id}`,kind:"assistant"===a.role?"assistant":"toolResult"===a.role?"tool":"user",timestamp:a.timestamp,title:"assistant"===a.role?i||"Agent update":"toolResult"===a.role?a.toolName?`Tool \xb7 ${a.toolName}`:"Tool update":"Mission",detail:bG(a.text.trim()||b.errorMessage||d.subtitle,220),runtimeId:d.id,agentId:d.agentId,toolName:a.toolName,isError:a.isError},{urlSources:[a.text,b?.finalText,b?.errorMessage,d.subtitle]}));else f.push(by({id:`${d.id}:status`,kind:"status",timestamp:j,title:i?`${i} \xb7 ${d.status}`:`Run \xb7 ${d.status}`,detail:bG(b?.errorMessage||d.subtitle,220),runtimeId:d.id,agentId:d.agentId,isError:"stalled"===d.status},{urlSources:[b?.errorMessage,d.subtitle]}));for(let a of bX((b?.warnings??[]).concat(Q(d))))f.push(by({id:`${d.id}:warning:${R(a)}`,kind:"warning",timestamp:j,title:"Fallback",detail:bG(a,220),runtimeId:d.id,agentId:d.agentId},{urlSources:[a]}));for(let a of bF((b?.createdFiles??[]).concat(P(d))))f.push(by({id:`${d.id}:artifact:${R(a.path)}`,kind:"artifact",timestamp:j,title:"Created file",detail:a.displayPath,runtimeId:d.id,agentId:d.agentId},{file:a}))}return 0===f.length&&a.mission&&!a.dispatchId&&f.push(by({id:`${a.id}:mission`,kind:"user",timestamp:bz(a.updatedAt),title:"Mission",detail:bG(a.mission,220),agentId:a.primaryAgentId},{urlSources:[a.mission]})),f.sort((a,b)=>Date.parse(a.timestamp)-Date.parse(b.timestamp)).slice(-36)}(c,d,f,b),l=await aC({task:c,runs:d,outputs:e,createdFiles:g,dispatchRecord:i,snapshot:b});return{task:c,runs:d,outputs:e,liveFeed:function(...a){let b=new Map;for(let c of a.flat())b.set(c.id,c);return[...b.values()].sort((a,b)=>Date.parse(a.timestamp)-Date.parse(b.timestamp)).slice(-48)}(j,k),createdFiles:g,warnings:h,integrity:l}}async function aC(a){var b,c,d;let{task:e,dispatchRecord:f,createdFiles:g,snapshot:h}=a,i=await aD(f?.outputDir??null),j=f?await aF(f,h):[],k=e.mission||f?.mission||null,l=k&&j.length>0?j.filter(a=>u(a.prompt,k)):j,m=[...l].sort((a,b)=>Date.parse(b.updatedAt)-Date.parse(a.updatedAt))[0]??null,n=m?.finalText?.trim()||null,o=f?aw(f):null,p=n||o||null,q=n?"runtime":o?"dispatch":"none",r=!!(f&&j.length>0&&0===l.length),s=bE(l),t=function(a){let b=new Set;for(let c of a)if(c)for(let a of c.match(D)??[])b.add(a.toLowerCase());return[...b]}([p,o,...l.flatMap(a=>a.items.map(a=>a.text))]),v=[],w=aG(p),x=!!(b=k)&&(/\.(txt|md|json|csv|html|pdf|docx?)\b/i.test(b)||/\b(file|files|artifact|artifacts|report|document|save|export|attachment)\b/i.test(b)||/\b(dosya|dosyasi|kaydet|kaydi|cikti)\b/i.test(b)),y=!!(c=k)&&/\b(email|e-mail|mail|mail address|mail adres|eposta|e-posta)\b/i.test(c),z=!!(d=k)&&(/https?:\/\//i.test(d)||/\b[a-z0-9-]+\.(com|net|org|io|ai|co|tr|app|dev|me|info|biz|edu|gov)\b/i.test(d)||/\b(site|website|web|browser|browse|fetch|sitesine|siteye|siteyi)\b/i.test(d));return f?.outputDir&&!i.exists&&v.push({id:"missing-output-dir",severity:"warning",title:"Output folder is missing",detail:`The dispatch points at ${f.outputDirRelative||f.outputDir}, but that folder is not accessible now.`}),"completed"===e.status&&f?.outputDir&&i.exists&&0===i.fileCount&&0===g.length&&v.push({id:"empty-output-dir",severity:x?"error":"warning",title:"Deliverables folder is empty",detail:x?"The task asked for a file deliverable, but the assigned deliverables folder does not contain any files.":"The task is marked completed, but the assigned deliverables folder does not contain any files."}),"completed"===e.status&&0===j.length&&v.push({id:"missing-transcript",severity:"warning",title:"No runtime transcript was captured",detail:"Mission Control could not verify what the agent actually did because no transcript was recovered for this dispatch."}),"cancelled"===e.status&&v.push({id:"task-cancelled",severity:"warning",title:"Task was cancelled by the operator",detail:f?.error||"The mission dispatch was stopped before completion, so the captured evidence is intentionally incomplete."}),r&&f?.agentId&&v.push({id:"session-mismatch",severity:"error",title:"Recovered session does not match the mission",detail:"The linked transcript session exists, but none of its user turns match this task mission. The dispatch likely reused or attached the wrong session."}),"completed"!==e.status||p?"stalled"===e.status&&p?v.push({id:"partial-final-response",severity:"warning",title:"Final response came from an incomplete runtime",detail:"The assistant produced output, but the runtime stalled before the task completed. Treat this as the last captured response, not a verified completion."}):"completed"===e.status&&w&&p&&v.push({id:"placeholder-final-response",severity:0===i.fileCount&&0===g.length&&0===l.length?"error":"warning",title:"Completion response looks like a placeholder",detail:`The captured final response was "${p}", which is not enough evidence that the requested work actually finished.`}):v.push({id:"missing-final-response",severity:"warning",title:"No final answer was captured",detail:"The task completed without a final assistant response in either the runtime transcript or the dispatch payload."}),"completed"===e.status&&z&&l.length>0&&0===s.length&&v.push({id:"missing-tool-evidence",severity:"warning",title:"No tool usage was recovered",detail:"This mission looks like it needed external lookup or browsing, but the matching transcript turn does not show any recovered tool calls."}),"completed"===e.status&&y&&0===t.length&&v.push({id:"missing-email",severity:"warning",title:"Requested email address was not captured",detail:"The task appears to ask for an email address, but none was detected in the final response or the matching transcript."}),{status:v.some(a=>"error"===a.severity)?"error":v.length>0?"warning":"verified",outputDir:f?.outputDir??null,outputDirRelative:f?.outputDirRelative??null,outputDirExists:i.exists,outputFileCount:i.fileCount,transcriptTurnCount:j.length,matchingTranscriptTurnCount:l.length,finalResponseText:p,finalResponseSource:q,dispatchSessionId:f?as(f):null,sessionMismatch:r,toolNames:s,emails:t,issues:v}}async function aD(a){if(!a)return{exists:!1,fileCount:0};try{if(!(await (0,g.stat)(a)).isDirectory())return{exists:!0,fileCount:1};return{exists:!0,fileCount:await aE(a)}}catch{return{exists:!1,fileCount:0}}}async function aE(a){let b=await (0,g.readdir)(a,{withFileTypes:!0}),c=0;for(let d of b){let b=k().join(a,d.name);if(d.isDirectory()){c+=await aE(b);continue}d.isFile()&&(c+=1)}return c}async function aF(a,b){let c=as(a);if(!c)return[];let d=b.agents.find(b=>b.id===a.agentId),e=await bw(a.agentId,c,a.workspacePath??d?.workspacePath);if(!e)return[];try{let b=await (0,g.readFile)(e,"utf8");return bC(b,am(a,c),a.workspacePath??d?.workspacePath)}catch{return[]}}function aG(a){if(!a)return!1;let b=a.trim().toLowerCase();return"ready"===b||"completed"===b||"complete"===b||"ok"===b||"success"===b}async function aH(a,b){if("fallback"===b.mode){var c;let b;return c=a,b=new Date().toISOString(),{runtimeId:c.id,sessionId:c.sessionId,taskId:c.taskId,status:"available",finalText:"Fallback mode is active. Connect a real OpenClaw gateway to inspect live runtime output.",finalTimestamp:b,stopReason:"fallback",errorMessage:null,items:[{id:`${c.id}:fallback`,role:"assistant",timestamp:b,text:"Fallback mode is active. Connect a real OpenClaw gateway to inspect live runtime output.",stopReason:"fallback",isError:!1}],createdFiles:[],warnings:[],warningSummary:null}}if(!a.sessionId||!a.agentId)return bx(a,"This runtime does not expose a session transcript yet.");let d=b.agents.find(b=>b.id===a.agentId),e=await bw(a.agentId,a.sessionId,d?.workspacePath);if(!e)return bx(a,"No transcript file was found for this runtime session.");try{let b=await (0,g.readFile)(e,"utf8");return bA(a,b,d?.workspacePath)}catch(b){return{runtimeId:a.id,sessionId:a.sessionId,taskId:a.taskId,status:"error",finalText:null,finalTimestamp:null,stopReason:null,errorMessage:b instanceof Error?b.message:"Unable to read runtime transcript.",items:[],createdFiles:[],warnings:[],warningSummary:null}}}async function aI(a){let b=cb(a.id.trim());if(!b)throw Error("Agent id is required.");let c=await J({force:!0,includeHidden:!0});!function(a,b,c){let d=a.agents.find(a=>a.id===b);if(!d)return;let e=bm(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=ca(a.name)??f.defaultName,h=ca(a.emoji)??f.defaultEmoji,i=ca(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",bn(d.path,b),"--non-interactive","--json"];a.modelId?.trim()&&l.push("--model",a.modelId.trim()),await (0,q.zB)(l);let n=await bq({workspacePath:d.path,agentId:b,agentName:g,policy:e,setupAgentId:k}),r=await bs(b,d.path,{name:g,model:ca(a.modelId),heartbeat:j,skills:[n],tools:"workspace-only"===e.fileAccess?{fs:{workspaceOnly:!0}}:null});return await bv(b,d.path,{name:g||r.name,emoji:h,theme:i,avatar:ca(a.avatar)}),await bO(d.path,{id:b,name:g,role:(0,m._P)(e.preset),skillId:n,modelId:ca(a.modelId),isPrimary:!1,policy:e}),E=null,{agentId:b,workspaceId:d.id}}async function aJ(a){var b;let c=a.id.trim();if(!c)throw Error("Agent id is required.");let d=await J({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=ca(e.name),i=ca(e.identity.emoji),j=ca(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 bq({workspacePath:f.path,agentId:c,agentName:ca(a.name)??h??c,policy:g,setupAgentId:l}),q=await bs(c,f.path,{name:ca(a.name),model:ca(a.modelId),heartbeat:k,skills:[...e.skills,n],tools:"workspace-only"===g.fileAccess?{fs:{workspaceOnly:!0}}:null});return await bv(c,f.path,{name:ca(a.name)??q.name,emoji:ca(a.emoji)??i,theme:ca(a.theme)??j,avatar:ca(a.avatar)}),await bO(f.path,{id:c,name:ca(a.name)??h??q.name??c,modelId:ca(a.modelId)??("unassigned"===e.modelId?null:e.modelId),isPrimary:e.isDefault,policy:g}),E=null,{agentId:c,workspaceId:f.id}}async function aK(a){let b=a.agentId.trim();if(!b)throw Error("Agent id is required.");let c=await J({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 bt(),b=a.filter(a=>a.id!==d.id);b.length!==a.length&&await bu(b)}catch{}if(e){await bP(e.path,d.id);try{await (0,g.rm)(k().join(e.path,"skills",bo(d.id)),{recursive:!0,force:!0})}catch{}}return E=null,H=new Map,{agentId:d.id,workspaceId:d.workspaceId,workspacePath:d.workspacePath,deletedRuntimeCount:f}}async function aL(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=cb(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={...v.eY,...a.rules??{}},i=(a.agents?.length?a.agents:(0,v.P0)(d,e)).map(a=>({id:cb(a.id)||"agent",role:a.role.trim()||b3(a.id),name:ca(a.name)??b3(a.id),enabled:!1!==a.enabled,emoji:ca(a.emoji),theme:ca(a.theme),skillId:ca(a.skillId),modelId:ca(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=bl(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:ca(a.brief),directory:ca(a.directory),modelId:ca(a.modelId),repoUrl:ca(a.repoUrl),existingPath:ca(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 a6(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 J({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=>bk(b,a.id)),e=bl(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 "${bm(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 a0({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 a1(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 t=[];for(let a of(await p.startStep("agents",1===n.length?"Provisioning the first workspace agent.":`Provisioning ${n.length} workspace agents.`),n)){let b=t.length,c=b+1;await p.updateStep("agents",{percent:Math.round(b/n.length*100),detail:`Creating agent ${c} of ${n.length}: ${a.name}.`}),await p.addActivity("agents",`Creating ${a.name} (${a.role}).`);let d=await a4({workspacePath:q,workspaceSlug:l.slug,workspaceModelId:l.modelId,agent:a});t.push(d),await p.addActivity("agents",`Created ${a.name} as ${d}.`,"done"),await p.updateStep("agents",{percent:Math.round(t.length/n.length*100),detail:`${t.length} of ${n.length} agent${1===n.length?"":"s"} ready.`})}await p.completeStep("agents",`${t.length} agent${1===t.length?"":"s"} linked to the workspace.`);let u=t.find(a=>n.some(b=>b.isPrimary&&bk(l.slug,b.id)===a))??t[0];if(l.rules.kickoffMission){await p.startStep("kickoff",`Dispatching the kickoff mission to ${u}.`),await p.addActivity("kickoff",`Selected ${u} as the primary agent.`);try{let a=await a5({agentId:u,brief:l.brief,modelProfile:l.modelProfile,template:l.template},{onProgress:async({message:a,percent:b})=>{await p.updateStep("kickoff",{percent:b,detail:a}),await p.addActivity("kickoff",a,b>=100?"done":"active")}});i=a.runId,j=a.status,await p.completeStep("kickoff",`Kickoff mission finished with status ${j||"unknown"}.`)}catch(a){k=a instanceof Error?a.message:"Kickoff mission could not be started.",await p.addActivity("kickoff",k,"error"),await p.failStep("kickoff",k)}}else await p.startStep("kickoff","Finalizing workspace bootstrap."),await p.addActivity("kickoff","Kickoff mission is disabled for this workspace.","done"),await p.completeStep("kickoff","Workspace bootstrap finished without kickoff.");return E=null,H=new Map,{workspaceId:bI(q),workspacePath:q,agentIds:t,primaryAgentId:u,kickoffRunId:i,kickoffStatus:j,kickoffError:k}}async function aM(a){let b=a.workspaceId.trim();if(!b)throw Error("Workspace id is required.");let c=(await J({force:!0})).workspaces.find(a=>a.id===b);if(!c)throw Error("Workspace was not found.");let d=function(a,b,c){let d=ca(c);if(d)return k().isAbsolute(d)?d:k().join(k().dirname(a),d);let e=ca(b);if(!e)return a;let f=cb(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 b1(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 bt()).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 bu(a)}return E=null,H=new Map,{workspaceId:bI(d),previousWorkspaceId:c.id,workspacePath:d}}async function aN(a){let b=a.workspaceId.trim();if(!b)throw Error("Workspace id is required.");let c=await J({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 bt(),b=a.filter(a=>a.workspace!==d.path&&!e.some(b=>b.id===a.id));b.length!==a.length&&await bu(b)}catch{}return await (0,g.rm)(d.path,{recursive:!0,force:!0}),I(),{workspaceId:d.id,workspacePath:d.path,deletedAgentIds:e.map(a=>a.id),deletedRuntimeCount:f}}async function aO(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",x,b]):await aR()&&await (0,q.zB)(["config","unset",x]),E=null,H=new Map,J({force:!0})}async function aP(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 aQ(b)}(a.workspaceRoot),c=await aT();return await aU({...b?{workspaceRoot:b}:{},...c.runtimePreflight?{runtimePreflight:c.runtimePreflight}:{}}),E=null,H=new Map,J({force:!0})}function aQ(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 aR(){try{return await (0,q.zB)(["config","get",x,"--json"]),!0}catch(a){if(a$(a).includes("Config path not found"))return!1;throw a}}async function aS(){return aQ((await aT()).workspaceRoot)??null}async function aT(){let a;try{a=await (0,g.readFile)(z,"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?aQ(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 aU(a){await (0,g.mkdir)(y,{recursive:!0}),await (0,g.writeFile)(z,`${JSON.stringify(a,null,2)}
|
|
5
|
+
`,"utf8")}function aV(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 aW(a){let b=await aT(),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 aU({...b.workspaceRoot?{workspaceRoot:b.workspaceRoot}:{},runtimePreflight:{smokeTests:c}}))}async function aX(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 aY(a,b={}){let c=[...new Set(a.filter(Boolean))],d=await aX(C,{createIfMissing:!0,touch:b.touch}),e=await Promise.all(c.map(async a=>{let c=k().join(C,"agents",a,"sessions"),d=await aX(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??C}`,...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:C,stateWritable:d.writable,sessionStoreWritable:d.writable&&f,sessionStores:e,issues:g}}async function aZ(a,b){let c,d=await aY(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],aV(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 a$(a){if(!a||"object"!=typeof a)return"";let b="stdout"in a?a_(a.stdout):"",c="stderr"in a?a_(a.stderr):"",d="message"in a&&"string"==typeof a.message?a.message:"";return`${d}
|
|
6
6
|
${b}
|
|
7
|
-
${c}`}function
|
|
8
|
-
`),await
|
|
7
|
+
${c}`}function a_(a){return"string"==typeof a?a:a instanceof Uint8Array?Buffer.from(a).toString():""}async function a0(a){if("existing"===a.sourceMode)return void await a8(a.targetDir);if("clone"===a.sourceMode){let b=ca(a.repoUrl);if(!b)throw Error("Repository URL is required when cloning a repo.");await b1(a.targetDir,""),await (0,g.mkdir)(k().dirname(a.targetDir),{recursive:!0}),await a9("git",["clone",b,a.targetDir]);return}await a7(a.targetDir)}async function a1(a,b){var c,d,e,f,h,i,j,l,n,o,p,q,r,s,t,u,w,x;let y,z,A,B,C,D,E=(0,v.hh)(b.template),F=new Date().toISOString(),G=await bc(a);for(let H of(await a3(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 ba(k().join(a,".openclaw","project-shell","events.jsonl"),""),await ba(k().join(a,".openclaw","project.json"),`${JSON.stringify({version:1,slug:cb(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:ca(a.skillId)??null,modelId:ca(a.modelId)??null,policy:a.policy??null}))},null,2)}
|
|
8
|
+
`),await ba(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,v.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}
|
|
9
9
|
|
|
10
10
|
Shared project context for all agents working in this workspace.
|
|
11
11
|
|
|
@@ -37,7 +37,7 @@ ${c.brief||"Clarify the project goal, definition of done, constraints, and succe
|
|
|
37
37
|
- Be concise in chat and write longer output to files when the artifact matters.
|
|
38
38
|
- Put task-specific deliverables, drafts, reports, and docs inside per-run folders under deliverables/.
|
|
39
39
|
- Avoid writing final artifacts to the workspace root unless explicitly requested.
|
|
40
|
-
`)),await
|
|
40
|
+
`)),await ba(k().join(a,"SOUL.md"),(d=b.template,e=b.brief,A=(0,v.hh)(d),`# SOUL
|
|
41
41
|
|
|
42
42
|
## My Purpose
|
|
43
43
|
Help this ${A.label.toLowerCase()} workspace turn intent into real outcomes with pragmatic execution, verification, and durable memory.
|
|
@@ -55,13 +55,13 @@ Help this ${A.label.toLowerCase()} workspace turn intent into real outcomes with
|
|
|
55
55
|
|
|
56
56
|
${e?`## Active Focus
|
|
57
57
|
${e}
|
|
58
|
-
`:""}`)),await
|
|
58
|
+
`:""}`)),await ba(k().join(a,"IDENTITY.md"),(f=b.template,B=(0,v.hh)(f),`# IDENTITY
|
|
59
59
|
|
|
60
60
|
## Role
|
|
61
61
|
This workspace hosts a ${B.label.toLowerCase()} team coordinated through OpenClaw.
|
|
62
62
|
|
|
63
63
|
**Vibe:** pragmatic, concise, quality-minded, workspace-grounded
|
|
64
|
-
`)),await
|
|
64
|
+
`)),await ba(k().join(a,"TOOLS.md"),(h=b.template,i=G,C=(0,v.hh)(h),`# TOOLS
|
|
65
65
|
|
|
66
66
|
Repository commands and workflow notes for this ${C.label.toLowerCase()} workspace.
|
|
67
67
|
|
|
@@ -71,14 +71,14 @@ ${i.map(a=>`- ${a}`).join("\n")}
|
|
|
71
71
|
## Notes
|
|
72
72
|
- Replace these examples with sharper project-specific commands when the repo exposes them.
|
|
73
73
|
- Prefer repeatable commands that other agents can run without interpretation drift.
|
|
74
|
-
`)),await
|
|
74
|
+
`)),await ba(k().join(a,"HEARTBEAT.md"),(j=b.template,D=(0,v.hh)(j),`# HEARTBEAT
|
|
75
75
|
|
|
76
76
|
- Start each substantial task by refreshing the brief, docs, and current files.
|
|
77
77
|
- Keep the ${D.label.toLowerCase()} workspace coherent across code, docs, and memory.
|
|
78
78
|
- Prefer explicit handoffs between implementation, review, testing, and knowledge capture.
|
|
79
|
-
`)),b.rules.generateMemory&&(await (0,g.mkdir)(k().join(a,"memory"),{recursive:!0}),await
|
|
79
|
+
`)),b.rules.generateMemory&&(await (0,g.mkdir)(k().join(a,"memory"),{recursive:!0}),await ba(k().join(a,"MEMORY.md"),(l=b.name,n=b.template,o=b.brief,`# ${l} Memory
|
|
80
80
|
|
|
81
|
-
Durable project facts for this ${(0,
|
|
81
|
+
Durable project facts for this ${(0,v.hh)(n).label.toLowerCase()} workspace.
|
|
82
82
|
|
|
83
83
|
## Current brief
|
|
84
84
|
${o||"No brief captured yet. Fill this in as soon as the project goal is clarified."}
|
|
@@ -86,10 +86,10 @@ ${o||"No brief captured yet. Fill this in as soon as the project goal is clarifi
|
|
|
86
86
|
## Stable facts
|
|
87
87
|
- Add durable architecture, product, or workflow facts here.
|
|
88
88
|
- Move longer notes into memory/*.md when they outgrow this file.
|
|
89
|
-
`)),await
|
|
89
|
+
`)),await ba(k().join(a,"memory","blueprint.md"),(p=b.name,q=b.template,r=b.brief,`# ${p} Blueprint
|
|
90
90
|
|
|
91
91
|
## Workspace type
|
|
92
|
-
${(0,
|
|
92
|
+
${(0,v.hh)(q).label}
|
|
93
93
|
|
|
94
94
|
## Outcome
|
|
95
95
|
${r||"Define the target outcome, user impact, and quality bar for this workspace."}
|
|
@@ -99,7 +99,7 @@ ${r||"Define the target outcome, user impact, and quality bar for this workspace
|
|
|
99
99
|
|
|
100
100
|
## Unknowns
|
|
101
101
|
- Capture unresolved questions that block confident execution.
|
|
102
|
-
`)),await
|
|
102
|
+
`)),await ba(k().join(a,"memory","decisions.md"),`# Decisions
|
|
103
103
|
|
|
104
104
|
Use this file for durable decisions that should survive across sessions.
|
|
105
105
|
|
|
@@ -108,40 +108,40 @@ Use this file for durable decisions that should survive across sessions.
|
|
|
108
108
|
- Decision:
|
|
109
109
|
- Context:
|
|
110
110
|
- Consequence:
|
|
111
|
-
`)),b.rules.generateStarterDocs&&(await (0,g.mkdir)(k().join(a,"docs"),{recursive:!0}),await (0,g.mkdir)(k().join(a,"deliverables"),{recursive:!0}),await
|
|
111
|
+
`)),b.rules.generateStarterDocs&&(await (0,g.mkdir)(k().join(a,"docs"),{recursive:!0}),await (0,g.mkdir)(k().join(a,"deliverables"),{recursive:!0}),await ba(k().join(a,"docs","brief.md"),(s=b.name,t=b.template,u=b.brief,w=b.sourceMode,`# ${s} Brief
|
|
112
112
|
|
|
113
113
|
## Template
|
|
114
|
-
${(0,
|
|
114
|
+
${(0,v.hh)(t).label}
|
|
115
115
|
|
|
116
116
|
## Source mode
|
|
117
117
|
${w}
|
|
118
118
|
|
|
119
119
|
## Objective
|
|
120
|
-
${
|
|
120
|
+
${u||"Clarify the main goal, target user, and success definition for this workspace."}
|
|
121
121
|
|
|
122
122
|
## Success signals
|
|
123
123
|
- Define what success looks like in observable terms.
|
|
124
124
|
|
|
125
125
|
## Open questions
|
|
126
126
|
- List the unknowns worth resolving first.
|
|
127
|
-
`)),await
|
|
127
|
+
`)),await ba(k().join(a,"docs","architecture.md"),(x=b.template,`# Architecture
|
|
128
128
|
|
|
129
129
|
## Current shape
|
|
130
|
-
- Describe the main components, systems, or content lanes in this ${(0,
|
|
130
|
+
- Describe the main components, systems, or content lanes in this ${(0,v.hh)(x).label.toLowerCase()} workspace.
|
|
131
131
|
|
|
132
132
|
## Dependencies
|
|
133
133
|
- List critical external services, repos, data sources, or channels.
|
|
134
134
|
|
|
135
135
|
## Risks
|
|
136
136
|
- Capture structural, operational, or delivery risks here.
|
|
137
|
-
`)),await
|
|
137
|
+
`)),await ba(k().join(a,"deliverables","README.md"),`# Deliverables
|
|
138
138
|
|
|
139
139
|
Use this folder for substantial output artifacts that should be easy to hand off or review.
|
|
140
140
|
|
|
141
141
|
- Create one subfolder per task or run, for example \`deliverables/2026-03-07-15-30-00-launch-brief/\`.
|
|
142
142
|
- Put drafts, reports, docs, and publishable assets for that task inside its run folder.
|
|
143
143
|
- Keep filenames descriptive and tied to the task or audience.
|
|
144
|
-
`),"frontend"===b.template&&await
|
|
144
|
+
`),"frontend"===b.template&&await ba(k().join(a,"docs","ux-notes.md"),br("ux")),"backend"===b.template&&await ba(k().join(a,"docs","service-map.md"),br("backend")),"research"===b.template&&await ba(k().join(a,"docs","research-plan.md"),br("research")),"content"===b.template&&await ba(k().join(a,"docs","content-brief.md"),br("content"))),b.agents)){let b=ca(H.skillId);b&&(await (0,g.mkdir)(k().join(a,"skills",b),{recursive:!0}),await ba(k().join(a,"skills",b,"SKILL.md"),function(a,b){switch(a){case"project-builder":return`# Project Builder
|
|
145
145
|
|
|
146
146
|
Use this skill when implementing changes in the current project.
|
|
147
147
|
|
|
@@ -216,11 +216,11 @@ Use this skill when operating in the current workspace.
|
|
|
216
216
|
- Produce durable artifacts when the work needs to be handed off.
|
|
217
217
|
- Put task-specific artifacts in the current deliverables run folder and keep notes in memory/.
|
|
218
218
|
- Keep outputs specific, reviewable, and easy for other agents to extend.
|
|
219
|
-
`}}(b,H.role)))}}let
|
|
219
|
+
`}}(b,H.role)))}}let a2=[".openclaw/agents/",".openclaw/project-shell/events.jsonl",".openclaw/project-shell/runs/",".openclaw/project-shell/tasks/"];async function a3(a){let b=k().join(a,".gitignore"),c="";try{c=await (0,g.readFile)(b,"utf8")}catch{c=""}let d=a2.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()}
|
|
220
220
|
|
|
221
221
|
${e}
|
|
222
222
|
`:`${e}
|
|
223
|
-
`;await
|
|
223
|
+
`;await bb(b,f)}async function a4(a){let b=bk(a.workspaceSlug,a.agent.id),c=ca(a.agent.modelId)??ca(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",bn(a.workspacePath,b),"--non-interactive","--json"];c&&e.push("--model",c),await (0,q.zB)(e);let f=await bq({workspacePath:a.workspacePath,agentId:b,agentName:a.agent.name,policy:d}),g=await bs(b,a.workspacePath,{name:ca(a.agent.name),model:c,heartbeat:p(a.agent.heartbeat),skills:[ca(a.agent.skillId),f].filter(a=>!!a),tools:"workspace-only"===d.fileAccess?{fs:{workspaceOnly:!0}}:null});return await bv(b,a.workspacePath,{name:ca(a.agent.name)??g.name,emoji:ca(a.agent.emoji),theme:ca(a.agent.theme)}),b}async function a5(a,b={}){var c,d;let e,f=(c=a.template,d=a.brief,e=(0,v.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 a6(a){let b=b0(await aS());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 a7(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 a8(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 a9(a,b,c={}){try{await w(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 ba(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 bb(a,b){await (0,g.mkdir)(k().dirname(a),{recursive:!0}),await (0,g.writeFile)(a,b,"utf8")}async function bc(a){let b=[],c=await bd(a),d=await be(a),e=await bf(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."),bX(b).slice(0,6)}async function bd(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 bi(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 be(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 bf(a){let b=[];return await bj(k().join(a,"pyproject.toml"))&&b.push("Use `pytest` for Python verification if the project exposes a test suite."),await bj(k().join(a,"requirements.txt"))&&b.push("Install Python dependencies in a virtualenv before running project commands."),b}async function bg(a,b){var c;let d,e,f,h=(c=b,e=[(d=new Date).getFullYear(),b6(d.getMonth()+1),b6(d.getDate()),b6(d.getHours()),b6(d.getMinutes()),b6(d.getSeconds())].join("-"),f=cb(c.replace(/^\[[^\]]+\]\s*/i,"").trim()).slice(0,48).replace(/^-+|-+$/g,"")||"task",`${e}-${f}`),i=k().join(a,"deliverables",h),j=b7(k().join("deliverables",h)),l=b7("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 bh(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 bi(a,b){let c=ca(b);return c?c.split("@")[0]:await bj(k().join(a,"pnpm-lock.yaml"))?"pnpm":await bj(k().join(a,"yarn.lock"))?"yarn":"npm"}async function bj(a){try{return await (0,g.access)(a),!0}catch{return!1}}function bk(a,b){return`${a}-${cb(b)||"agent"}`}function bl(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 bm(a,b){return a.workspaces.find(a=>a.id===b.workspaceId)?.name??k().basename(b.workspacePath)}function bn(a,b){return k().join(a,".openclaw","agents",b,"agent")}function bo(a){return`agent-policy-${cb(a)||"agent"}`}function bp(a){return!!(a&&/^agent-policy-/.test(a))}async function bq(a){var b,c,d;let e,f=bo(a.agentId);return await bb(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
|
|
224
224
|
|
|
225
225
|
Preset: ${e}
|
|
226
226
|
|
|
@@ -230,9 +230,9 @@ Preset: ${e}
|
|
|
230
230
|
- Avoid writing final artifacts to the workspace root unless the task explicitly asks for it.
|
|
231
231
|
|
|
232
232
|
## Operating rules
|
|
233
|
-
${
|
|
233
|
+
${bh(c,d).map(a=>a.replace(/^- /,"- ")).join("\n")}
|
|
234
234
|
`)}
|
|
235
|
-
`),f}function
|
|
235
|
+
`),f}function br(a){return"ux"===a?`# UX Notes
|
|
236
236
|
|
|
237
237
|
- Track interaction patterns, responsive edge cases, and visual risk areas here.
|
|
238
238
|
`:"backend"===a?`# Service Map
|
|
@@ -244,6 +244,6 @@ ${aK(c,d).map(a=>a.replace(/^- /,"- ")).join("\n")}
|
|
|
244
244
|
`:`# Content Brief
|
|
245
245
|
|
|
246
246
|
- Capture audience, channel, tone, CTA, and distribution assumptions for this content workspace.
|
|
247
|
-
`}async function aV(a,b,c){let d=await aW(),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=bh(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 aX(d),f}async function aW(){let a=await (0,q.VP)(["config","get","agents.list","--json"]);return Array.isArray(a)?a:[]}async function aX(a){await (0,q.zB)(["config","set","--strict-json","agents.list",JSON.stringify(a)])}async function aY(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 aZ(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 a$(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 a_(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 a1((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(a0(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(a0(g)),e}function a0(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=bq(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 a1(a,b){let c=a.replace(/\s+/g," ").trim();return c.length<=b?c:`${c.slice(0,Math.max(b-1,1)).trimEnd()}…`}function a2(a){let b=(0,e.createHash)("sha1").update(a).digest("hex").slice(0,8);return`workspace:${b}`}async function a3(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=bd(a.get("SOUL.md"),"My Purpose");if(b)return b;let c=bd(a.get("IDENTITY.md"),"Role");if(c)return c;let d=bd(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=bh([...be(d.get("AGENTS.md"),"Safety defaults"),...be(d.get("AGENTS.md"),"Daily memory"),...be(d.get("SOUL.md"),"How I Operate"),...be(d.get("TOOLS.md"),"Examples")]).slice(0,6)||[],h=bh([...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=>bg(a)).filter(Boolean)}(d.get("IDENTITY.md"),"Vibe"),...be(d.get("SOUL.md"),"My Quirks"),...be(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?bg(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 a4(a,b){let[c,d,e,f,g,h]=await Promise.all([a7(a),a5(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"}]),a5(a,[{id:"memory-md",label:"MEMORY.md",relativePath:"MEMORY.md",kind:"file"}]),a5(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"}]),a5(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"}]),a6(a)]),i=bh(b.flatMap(a=>a.tools)),j=bh([...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 a5(a,b){return Promise.all(b.map(async b=>({id:b.id,label:b.label,present:await ba(k().join(a,b.relativePath),b.kind)})))}async function a6(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 ba(c,"file")?a.name:null}))).filter(a=>"string"==typeof a&&!aS(a)).sort((a,b)=>a.localeCompare(b))}catch{return[]}}async function a7(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=bb(e)?e:{},h=Array.isArray(f.agents)?f.agents.map(a=>bc(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 a8(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=bb(f)?f:{},Array.isArray(d.agents)&&(e=d.agents.map(a=>bc(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=>bb(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:bx(k().basename(a)),d.name="string"==typeof d.name?d.name:k().basename(a),d.updatedAt=new Date().toISOString(),d.agents=h,await aE(c,`${JSON.stringify(d,null,2)}
|
|
248
|
-
`)}async function
|
|
249
|
-
`))}async function
|
|
247
|
+
`}async function bs(a,b,c){let d=await bt(),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=bX(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 bu(d),f}async function bt(){let a=await (0,q.VP)(["config","get","agents.list","--json"]);return Array.isArray(a)?a:[]}async function bu(a){await (0,q.zB)(["config","set","--strict-json","agents.list",JSON.stringify(a)])}async function bv(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 bw(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 bx(a,b){return{runtimeId:a.id,sessionId:a.sessionId,taskId:a.taskId,status:"missing",finalText:null,finalTimestamp:null,stopReason:null,errorMessage:b,items:[],createdFiles:[],warnings:[],warningSummary:null}}function by(a,b){let c=function(a){for(let b of a){if("string"!=typeof b)continue;let a=b.match(/https?:\/\/[^\s<>"'`]+/i);if(!a)continue;let c=a[0].replace(/[)\].,;:!?]+$/g,"");if(c)return c}return null}(b?.urlSources??[]);return{...a,...c?{url:c}:{},...b?.file?{filePath:b.file.path,displayPath:b.file.displayPath}:{}}}function bz(a){return"number"==typeof a&&Number.isFinite(a)?new Date(a).toISOString():new Date().toISOString()}function bA(a,b,c){let d=bC(b,a,c);if("turn"===a.source){let b="string"==typeof a.metadata.turnId?a.metadata.turnId:null,c=b?d.find(a=>a.id===b):function(a,b){let c="string"==typeof a.metadata.mission?a.metadata.mission:null;if(!c)return null;let d=b.filter(a=>u(a.prompt,c));if(0===d.length)return null;let e=a.updatedAt??0;return d.sort((a,b)=>{let c=Date.parse(a.updatedAt),d=Date.parse(b.updatedAt);return Math.abs((Number.isNaN(c)?0:c)-e)-Math.abs((Number.isNaN(d)?0:d)-e)})[0]}(a,d);if(c)return bB(a,c)}let e=d.at(-1);return e?bB(a,e):{runtimeId:a.id,sessionId:a.sessionId,taskId:a.taskId,status:"missing",finalText:null,finalTimestamp:null,stopReason:null,errorMessage:"No transcript entries were found for this runtime.",items:[],createdFiles:[],warnings:[],warningSummary:null}}function bB(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 bC(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 bG((f.find(a=>!a.startsWith("[WARNING]"))||f.find(a=>a.startsWith("[WARNING]"))||`${b.toolName||"tool"} exited with code ${e}`).replace(/^\[WARNING\]\s*/i,"").trim()||`${b.toolName||"tool"} exited with code ${e}`,160)}(d,c.message,h,i);if(!h&&!i&&!("assistant"===d&&c.message.content?.some(a=>"toolCall"===a.type)||"toolResult"===d&&"string"==typeof c.message.toolName&&c.message.toolName.trim()))continue;let l={id:c.id||`${d}-${Date.now()}`,role:d,timestamp:c.timestamp||new Date().toISOString(),text:h||i||"",toolName:"toolResult"===d?c.message.toolName?.trim()||bH(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(bD(g)),g={id:c.id||`turn-${e.length}`,prompt:l.text.replace(/^Sender \(untrusted metadata\):[\s\S]*?```[\s\S]*?```\s*/i,"").replace(/^\[[^\]]+\]\s*/i,"").replace(/\s+/g," ").trim(),sessionId:b.sessionId,runId:void 0,timestamp:l.timestamp,updatedAt:l.timestamp,items:[l],tokenUsage:void 0,errorMessage:null,createdFiles:[],warnings:[],toolNames:[],pendingCreatedFiles:new Map,pendingToolNames:new Set};continue}if(!g)continue;if("assistant"===d&&Array.isArray(c.message.content))for(let a of c.message.content){if("toolCall"!==a.type||("string"==typeof a.name&&a.name.trim()&&g.pendingToolNames.add(a.name.trim()),"write"!==a.name))continue;let b="string"==typeof a.arguments?.path?a.arguments.path.trim():"";if(!b)continue;let d=function(a,b){let c=a.trim();if(!c)return null;let d=k().isAbsolute(c)?k().normalize(c):b?k().resolve(b,c):null;if(!d)return null;let e=b&&d.startsWith(`${k().resolve(b)}${k().sep}`)?k().relative(k().resolve(b),d)||k().basename(d):d;return{path:d,displayPath:e}}(b,f);d&&g.pendingCreatedFiles.set(a.id||`${c.id||"toolCall"}:${b}`,{path:d.path,displayPath:d.displayPath})}if(g.items.push(l),g.updatedAt=l.timestamp,g.errorMessage||=i,j&&!g.warnings.includes(j)&&g.warnings.push(j),"toolResult"===d&&!0!==c.message.isError&&"write"===c.message.toolName&&"string"==typeof c.message.toolCallId){let a=g.pendingCreatedFiles.get(c.message.toolCallId);a&&(g.createdFiles.push(a),g.pendingCreatedFiles.delete(c.message.toolCallId))}if("toolResult"===d){let a=c.message.toolName?.trim()||bH(l.text)?.trim()||null;a&&g.pendingToolNames.add(a)}if("assistant"===d&&c.message.usage){let a=c.message.usage;g.tokenUsage={input:a.input??a.prompt_tokens??0,output:a.output??a.completion_tokens??0,total:a.totalTokens??a.total_tokens??(a.input??a.prompt_tokens??0)+(a.output??a.completion_tokens??0),cacheRead:a.cacheRead??0}}}catch{continue}return g&&e.push(bD(g)),e}function bD(a){let{pendingCreatedFiles:b,pendingToolNames:c,...d}=a,e=[...a.items].reverse().find(a=>"assistant"===a.role&&(a.text.trim().length>0||a.errorMessage)),f=a.items.at(-1),g=e?.stopReason??null,h=!!a.errorMessage||e?.isError===!0||"error"===g||"aborted"===g,i=b4(a.warnings),j=h?"stalled":f?.role==="assistant"&&f.stopReason&&"toolUse"!==f.stopReason?"completed":"running";return{...d,status:j,finalText:e?.text??null,finalTimestamp:e?.timestamp??null,stopReason:g,errorMessage:a.errorMessage||e?.errorMessage||null,createdFiles:bF(a.createdFiles),warnings:i,warningSummary:i[0]??null,toolNames:bX([...a.pendingToolNames])}}function bE(a){return bX(a.flatMap(a=>a.toolNames))}function bF(a){let b=new Set,c=[];for(let d of a)!d.path||b.has(d.path)||(b.add(d.path),c.push(d));return c}function bG(a,b){let c=a.replace(/\s+/g," ").trim();return c.length<=b?c:`${c.slice(0,Math.max(b-1,1)).trimEnd()}…`}function bH(a){let b=a.match(/"tool(Name)?":\s*"([^"]+)"/i);return b?.[2]}function bI(a){let b=(0,e.createHash)("sha1").update(a).digest("hex").slice(0,8);return`workspace:${b}`}async function bJ(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=bT(a.get("SOUL.md"),"My Purpose");if(b)return b;let c=bT(a.get("IDENTITY.md"),"Role");if(c)return c;let d=bT(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=bX([...bU(d.get("AGENTS.md"),"Safety defaults"),...bU(d.get("AGENTS.md"),"Daily memory"),...bU(d.get("SOUL.md"),"How I Operate"),...bU(d.get("TOOLS.md"),"Examples")]).slice(0,6)||[],h=bX([...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=>bW(a)).filter(Boolean)}(d.get("IDENTITY.md"),"Vibe"),...bU(d.get("SOUL.md"),"My Quirks"),...bU(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?bW(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 bK(a,b){let[c,d,e,f,g,h]=await Promise.all([bN(a),bL(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"}]),bL(a,[{id:"memory-md",label:"MEMORY.md",relativePath:"MEMORY.md",kind:"file"}]),bL(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"}]),bL(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"}]),bM(a)]),i=bX(b.flatMap(a=>a.tools)),j=bX([...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 bL(a,b){return Promise.all(b.map(async b=>({id:b.id,label:b.label,present:await bQ(k().join(a,b.relativePath),b.kind)})))}async function bM(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 bQ(c,"file")?a.name:null}))).filter(a=>"string"==typeof a&&!bp(a)).sort((a,b)=>a.localeCompare(b))}catch{return[]}}async function bN(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=bR(e)?e:{},h=Array.isArray(f.agents)?f.agents.map(a=>bS(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 bO(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=bR(f)?f:{},Array.isArray(d.agents)&&(e=d.agents.map(a=>bS(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=>bR(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:cb(k().basename(a)),d.name="string"==typeof d.name?d.name:k().basename(a),d.updatedAt=new Date().toISOString(),d.agents=h,await bb(c,`${JSON.stringify(d,null,2)}
|
|
248
|
+
`)}async function bP(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=bR(b)?b:{}}catch{return}if(!Array.isArray(d.agents))return;let e=d.agents.map(a=>bS(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 bb(c,`${JSON.stringify(d,null,2)}
|
|
249
|
+
`))}async function bQ(a,b){try{let c=await (0,g.stat)(a);return"directory"===b?c.isDirectory():c.isFile()}catch{return!1}}function bR(a){return"object"==typeof a&&null!==a}function bS(a){var b;return bR(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:bR(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 bT(a,b){if(!a)return null;let c=a.findIndex(a=>bV(a)===bV(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(bW(c)),d.length>=2))break}return d.length>0?d.join(" "):null}function bU(a,b){if(!a)return[];let c=a.findIndex(a=>bV(a)===bV(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(bW(c.replace(/^[-*]\s+/,"")));continue}if(d.length>0)break}return d}function bV(a){return a.replace(/^#+\s+/,"").trim().toLowerCase()}function bW(a){return a.replace(/[`*_>#-]/g,"").replace(/\s+/g," ").trim()}function bX(a){return Array.from(new Set(a.filter(Boolean)))}function bY(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 H.entries()){if(c.has(a))continue;let e={...d,status:"stalled"===d.status?"stalled":"cancelled"===d.status?"cancelled":"completed",metadata:{...d.metadata,historical:!0}};b.set(a,e)}let d=function(a){let b=new Map;for(let c of a){let a=c.agentId||c.workspaceId||"global",d=b.get(a)??[];d.push(c),b.set(a,d)}return Array.from(b.values()).flatMap(a=>a.sort(bZ).slice(0,8))}(Array.from(b.values()));return H=new Map(d.filter(a=>!al(a)).map(a=>[a.id,a])),d.sort(bZ)}function bZ(a,b){return(b.updatedAt??0)-(a.updatedAt??0)}function b$(a){return!1!==a.available&&!a.missing}function b_(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 b0(a){return a||k().join(i().homedir(),"Documents","Shared","projects")}async function b1(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 b2(a,b){if(!a)return;let c=`:${b}:`,d=a.indexOf(c);if(-1!==d)return a.slice(d+c.length).split(":")[0]}function b3(a){return a?a.split(/[-_]/g).filter(Boolean).map(a=>a[0].toUpperCase()+a.slice(1)).join(" "):"OpenClaw"}function b4(a){return Array.from(new Set(a))}function b5(a){return!!a}function b6(a){return String(a).padStart(2,"0")}function b7(a){return a.split(k().sep).join("/")}function b8(a,b){let c=b9(a),d=b9(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 b9(a){return a.trim().replace(/^v/i,"").split(/[^0-9a-zA-Z]+/).filter(Boolean).map(a=>/^\d+$/.test(a)?Number(a):a.toLowerCase())}function ca(a){return a?.trim()||void 0}function cb(a){return a.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function cc(a){return(0,e.createHash)("sha1").update(a).digest("hex").slice(0,10)}}};
|