@oxgeneral/orch 0.2.2 → 0.2.4
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/dist/{App-NHSVGERJ.js → App-KHUT3IV7.js} +316 -105
- package/dist/{chunk-VTA74YWX.js → chunk-2KSBOAW3.js} +1 -1
- package/dist/{chunk-O5AO5QIR.js → chunk-3TGCIXJA.js} +7 -1
- package/dist/{chunk-6GFVB6EK.js → chunk-FRTKB575.js} +24 -38
- package/dist/chunk-K6DMQERQ.js +89 -0
- package/dist/{chunk-2B32FPEB.js → chunk-QTDKQYZI.js} +3 -3
- package/dist/{chunk-2B32FPEB.js.map → chunk-QTDKQYZI.js.map} +1 -1
- package/dist/{chunk-ZU6AY2VU.js → chunk-VAAOW526.js} +2 -2
- package/dist/chunk-VAAOW526.js.map +1 -0
- package/dist/chunk-ZTQ3KWXR.js +13 -0
- package/dist/chunk-ZTQ3KWXR.js.map +1 -0
- package/dist/cli.js +17 -20
- package/dist/{container-JV7TAUP5.js → container-KPH4HVAJ.js} +6 -6
- package/dist/{doctor-IO4PV4D6.js → doctor-GHRV5I2S.js} +4 -4
- package/dist/doctor-service-QEJCE5FK.js +3 -0
- package/dist/doctor-service-QEJCE5FK.js.map +1 -0
- package/dist/doctor-service-TPOMFAIG.js +2 -0
- package/dist/index.d.ts +20 -4
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/{init-UCVRVBVI.js → init-EQTGQ4G2.js} +60 -52
- package/dist/{logs-IAUAS5TX.js → logs-AK255DEJ.js} +1 -1
- package/dist/orchestrator-L6QX2LJ7.js +2 -0
- package/dist/{orchestrator-TAFBYQQ5.js.map → orchestrator-L6QX2LJ7.js.map} +1 -1
- package/dist/{orchestrator-VGYKSOZJ.js → orchestrator-OMU46RCE.js} +47 -19
- package/dist/{task-5OJTXW27.js → task-35SDKXFC.js} +1 -1
- package/dist/{tui-AAEAU4HT.js → tui-AR6PVMBQ.js} +6 -1
- package/dist/{update-72GZMF65.js → update-DCCWVISK.js} +1 -1
- package/dist/update-check-4YKLGBFB.js +2 -0
- package/dist/workspace-manager-AS4TFA7R.js +3 -0
- package/dist/workspace-manager-AS4TFA7R.js.map +1 -0
- package/dist/{workspace-manager-47KI7B27.js → workspace-manager-G5EQRS72.js} +38 -2
- package/package.json +1 -1
- package/readme.md +6 -15
- package/scripts/release.sh +32 -0
- package/dist/chunk-E3TCKHU6.js +0 -13
- package/dist/chunk-E3TCKHU6.js.map +0 -1
- package/dist/chunk-XI4TU6VU.js +0 -50
- package/dist/chunk-ZU6AY2VU.js.map +0 -1
- package/dist/doctor-service-A34DHPKI.js +0 -2
- package/dist/doctor-service-NTWBWOM2.js +0 -2
- package/dist/doctor-service-NTWBWOM2.js.map +0 -1
- package/dist/orchestrator-TAFBYQQ5.js +0 -2
- package/dist/update-check-4RV7Z6WT.js +0 -2
- package/dist/workspace-manager-7M46ESUL.js +0 -2
- package/dist/workspace-manager-7M46ESUL.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {k,a as a$1,b as b$2,h,j as j$2,d,c as c$1,e,f as f$1,g as g$1,i as i$1}from'./chunk-2B32FPEB.js';import {a,b as b$1}from'./chunk-E3TCKHU6.js';export{f as Orchestrator,a as canTransition,d as isBlocked,c as isDispatchable,b as isTerminal,e as resolveFailureStatus}from'./chunk-E3TCKHU6.js';import {c,f,i,g,k as k$1,j as j$1}from'./chunk-ZU6AY2VU.js';export{g as AgentNotFoundError,b as NotInitializedError,a as OrchestryError,f as TaskNotFoundError}from'./chunk-ZU6AY2VU.js';import {a as a$2}from'./chunk-AELEEEV3.js';export{a as AdapterRegistry}from'./chunk-6HENRUYZ.js';export{a as createTokenUsage}from'./chunk-PBFE5V3G.js';import {b as b$3}from'./chunk-POUC4CPC.js';import {nanoid}from'nanoid';import Rt,{mkdir}from'fs/promises';import {createReadStream}from'fs';import ct from'path';import {homedir}from'os';var P=class{handlers=new Map;wildcardHandlers=new Set;maxListeners=10;warnedTypes=new Set;setMaxListeners(t){this.maxListeners=t;}getMaxListeners(){return this.maxListeners}listenerCount(t){return this.handlers.get(t)?.size??0}on(t,e){this.handlers.has(t)||this.handlers.set(t,new Set);let s=this.handlers.get(t);return s.add(e),this.maxListeners>0&&s.size>this.maxListeners&&!this.warnedTypes.has(t)&&(this.warnedTypes.add(t),console.warn(`EventBus: possible memory leak detected. ${s.size} listeners added for "${t}". Use setMaxListeners() to increase limit if this is intentional.`)),()=>this.off(t,e)}once(t,e){let s=r=>{this.off(t,s),e(r);};return this.on(t,s)}off(t,e){this.handlers.get(t)?.delete(e);}emit(t){let e=this.handlers.get(t.type);e&&this.dispatchToSet(e,t,"handler"),this.dispatchToSet(this.wildcardHandlers,t,"wildcard handler");}dispatchToSet(t,e,s){for(let r of t)try{r(e);}catch(a){console.error(`EventBus ${s} error for "${e.type}":`,a);}}onAny(t){return this.wildcardHandlers.add(t),this.maxListeners>0&&this.wildcardHandlers.size>this.maxListeners&&!this.warnedTypes.has("*")&&(this.warnedTypes.add("*"),console.warn(`EventBus: possible memory leak detected. ${this.wildcardHandlers.size} wildcard listeners added. Use setMaxListeners() to increase limit if this is intentional.`)),()=>{this.wildcardHandlers.delete(t);}}clear(){this.handlers.clear(),this.wildcardHandlers.clear(),this.warnedTypes.clear();}};var b=class{constructor(t,e,s){this.taskStore=t;this.eventBus=e;this.config=s;}async create(t){if(!t.title.trim())throw new c("Task title is required");let e=t.priority??this.config.defaults.task.priority;if(!Number.isInteger(e)||e<1||e>4)throw new c("Priority must be an integer between 1 and 4");if(t.depends_on?.length){let n=(await Promise.all(t.depends_on.map(async i=>({depId:i,exists:!!await this.taskStore.get(i)})))).filter(i=>!i.exists).map(i=>i.depId);if(n.length>0)throw new c(`Unknown depends_on task ID(s): ${n.join(", ")}`)}let s=new Date().toISOString(),r={id:`tsk_${nanoid(7)}`,title:t.title.trim(),description:t.description?.trim()??"",status:"todo",priority:e,assignee:t.assignee,labels:t.labels??[],depends_on:t.depends_on??[],created_at:s,updated_at:s,attempts:0,max_attempts:t.max_attempts??this.config.defaults.task.max_attempts,workspace_mode:t.workspace_mode,review_criteria:t.review_criteria,scope:t.scope};return await this.taskStore.save(r),this.eventBus.emit({type:"task:created",task:r}),r}async list(t){return this.taskStore.list(t)}async get(t){let e=await this.taskStore.get(t);if(!e)throw new f(t);return e}async updateStatus(t,e){let s=await this.get(t),r=s.status;if(!a(r,e))throw new i(t,r,e);return s.status=e,s.updated_at=new Date().toISOString(),await this.taskStore.save(s),this.eventBus.emit({type:"task:status_changed",taskId:t,from:r,to:e}),s}async assign(t,e){let s=await this.get(t);return s.assignee=e,s.updated_at=new Date().toISOString(),await this.taskStore.save(s),this.eventBus.emit({type:"task:assigned",taskId:t,agentId:e}),s}async cancel(t){let e=await this.get(t);if(b$1(e.status))throw new i(t,e.status,"cancelled");return this.updateStatus(t,"cancelled")}async retry(t){let e=await this.get(t);if(e.status!=="failed"&&e.status!=="cancelled")throw new i(t,e.status,"todo");let s=e.status;return e.status="todo",e.attempts=0,e.updated_at=new Date().toISOString(),await this.taskStore.save(e),this.eventBus.emit({type:"task:status_changed",taskId:t,from:s,to:"todo"}),e}async reject(t,e){let s=await this.get(t);if(s.status!=="review")throw new i(t,s.status,"todo");let r=s.status;return s.status="todo",s.attempts=0,s.feedback=e,s.updated_at=new Date().toISOString(),await this.taskStore.save(s),this.eventBus.emit({type:"task:status_changed",taskId:t,from:r,to:"todo"}),s}async update(t,e){let s=await this.get(t);if(e.title!==void 0){if(!e.title.trim())throw new c("Task title cannot be empty");s.title=e.title.trim();}if(e.description!==void 0&&(s.description=e.description.trim()),e.priority!==void 0){if(!Number.isInteger(e.priority)||e.priority<1||e.priority>4)throw new c("Priority must be an integer between 1 and 4");s.priority=e.priority;}return e.labels!==void 0&&(s.labels=e.labels),s.updated_at=new Date().toISOString(),await this.taskStore.save(s),s}async delete(t){if((await this.get(t)).status==="in_progress")throw new c("Cannot delete a running task. Cancel it first.");await this.taskStore.delete(t);}async incrementAttempts(t){let e=await this.get(t);return e.attempts+=1,e.updated_at=new Date().toISOString(),await this.taskStore.save(e),e}};var A=class{constructor(t,e,s,r){this.agentStore=t;this.stateStore=e;this.eventBus=s;this.config=r;}async create(t){if(!t.name.trim())throw new c("Agent name is required");if(await this.agentStore.getByName(t.name))throw new c(`Agent "${t.name}" already exists`);let s={id:`agt_${nanoid(7)}`,name:t.name.trim(),adapter:t.adapter||this.config.defaults.agent.adapter,role:t.role,config:{command:t.command,model:t.model,approval_policy:t.approval_policy??this.config.defaults.agent.approval_policy,max_turns:t.max_turns??this.config.defaults.agent.max_turns,timeout_ms:t.timeout_ms??this.config.defaults.agent.timeout_ms,stall_timeout_ms:t.stall_timeout_ms??this.config.defaults.agent.stall_timeout_ms,env:t.env,system_prompt:t.system_prompt,workspace_mode:t.workspace_mode,skills:t.skills},status:"idle",stats:{tasks_completed:0,tasks_failed:0,total_runs:0,total_runtime_ms:0}};return await this.agentStore.save(s),s}async list(){return this.agentStore.list()}async get(t){let e=await this.agentStore.get(t);if(!e)throw new g(t);return e}async remove(t){let e=await this.get(t);if(e.status==="running"){let s=await this.stateStore.read();if(Object.values(s.running).some(a=>a.agent_id===t))throw new c("Cannot remove a running agent. Stop it first.");e.status="idle",await this.agentStore.save(e);}await this.agentStore.delete(t);}async update(t,e){let s=await this.get(t);if(e.name!==void 0){if(!e.name.trim())throw new c("Agent name cannot be empty");let r=await this.agentStore.getByName(e.name.trim());if(r&&r.id!==t)throw new c(`Agent "${e.name}" already exists`);s.name=e.name.trim();}return e.role!==void 0&&(s.role=e.role||void 0),e.model!==void 0&&(s.config.model=e.model||void 0),e.approval_policy!==void 0&&(s.config.approval_policy=e.approval_policy),await this.agentStore.save(s),s}async disable(t){return this.setStatus(t,"disabled")}async enable(t){return this.setStatus(t,"idle")}async setAutonomous(t,e){let s=await this.get(t);return s.autonomous=e,await this.agentStore.save(s),this.eventBus.emit({type:"agent:autonomous_toggled",agentId:t,autonomous:e}),s}async setStatus(t,e){let s=await this.get(t);return s.status=e,await this.agentStore.save(s),s}async updateStats(t,e){let s=await this.get(t);return Object.assign(s.stats,e),await this.agentStore.save(s),s}async findBestAgent(t){let e=await this.agentStore.list(),s=e.filter(a=>a.status==="idle");if(s.length===0)return null;if(t.assignee){let a=e.find(n=>n.id===t.assignee);return a&&a.status==="idle"?a:null}let r=s.map(a=>{let n=0;if(t.labels?.length>0&&a.config.skills?.length)for(let o of t.labels){let c=o.toLowerCase();a.config.skills.some(d=>d.toLowerCase()===c)&&(n+=50);}if(t.labels?.length>0&&a.role){let o=a.role.toLowerCase();t.labels.some(c=>o.includes(c.toLowerCase()))&&(n+=30);}a.status==="idle"&&(n+=20);let i=a.stats.tasks_completed+a.stats.tasks_failed;return i>0&&(n+=Math.round(a.stats.tasks_completed/i*10)),{agent:a,score:n}});return r.sort((a,n)=>n.score-a.score),r[0]?.agent??null}};var x=class{constructor(t,e){this.runStore=t;this.eventBus=e;}async create(t){let e={id:`run_${nanoid(7)}`,task_id:t.taskId,agent_id:t.agentId,attempt:t.attempt,status:"preparing",started_at:new Date().toISOString(),workspace_path:t.workspacePath,prompt:t.prompt};return await this.runStore.save(e),e}async get(t){return this.runStore.get(t)}async start(t,e){let s=await this.runStore.get(t);if(!s)throw new Error(`Run not found: ${t}`);return s.status="running",s.pid=e,await this.runStore.save(s),this.eventBus.emit({type:"agent:started",agentId:s.agent_id,taskId:s.task_id,runId:t}),s}async finish(t,e,s,r){let a=await this.runStore.get(t);if(!a)throw new Error(`Run not found: ${t}`);return a.status=e,a.finished_at=new Date().toISOString(),a.tokens=s,a.error=r,await this.runStore.save(a),this.eventBus.emit({type:"agent:completed",runId:t,agentId:a.agent_id,success:e==="succeeded"}),a}async appendEvent(t,e){await this.runStore.appendEvent(t,e);}async listAll(){return this.runStore.listAll()}async listForTask(t){return this.runStore.listForTask(t)}async listForAgent(t){return this.runStore.listForAgent(t)}async readEvents(t){return this.runStore.readEvents(t)}async readEventsTail(t,e){return this.runStore.readEventsTail(t,e)}async getLastFailedRunContext(t,e=50){let r=(await this.runStore.listForTask(t)).filter(i=>i.status==="failed").sort((i,o)=>(o.finished_at??"").localeCompare(i.finished_at??""))[0];if(!r)return null;let a=r.error??"Unknown error",n="";try{n=(await this.runStore.readEventsTail(r.id,e*2)).filter(c=>c.type==="agent_output"||c.type==="error").map(c=>typeof c.data=="string"?c.data:JSON.stringify(c.data)).join(`
|
|
1
|
+
import {k,a as a$1,b as b$2,h,j as j$2,d,c as c$1,e,f as f$1,g as g$1,i as i$1}from'./chunk-QTDKQYZI.js';import {a,b as b$1}from'./chunk-ZTQ3KWXR.js';export{f as Orchestrator,a as canTransition,d as isBlocked,c as isDispatchable,b as isTerminal,e as resolveFailureStatus}from'./chunk-ZTQ3KWXR.js';import {c,f,i,g,k as k$1,j as j$1}from'./chunk-VAAOW526.js';export{g as AgentNotFoundError,b as NotInitializedError,a as OrchestryError,f as TaskNotFoundError,l as WorkspaceError}from'./chunk-VAAOW526.js';import {a as a$2}from'./chunk-AELEEEV3.js';export{a as AdapterRegistry}from'./chunk-6HENRUYZ.js';export{a as createTokenUsage}from'./chunk-PBFE5V3G.js';import {b as b$3}from'./chunk-POUC4CPC.js';import {nanoid}from'nanoid';import Ot,{mkdir}from'fs/promises';import {createReadStream}from'fs';import ct from'path';import {homedir}from'os';var P=class{handlers=new Map;wildcardHandlers=new Set;maxListeners=10;warnedTypes=new Set;setMaxListeners(t){this.maxListeners=t;}getMaxListeners(){return this.maxListeners}listenerCount(t){return this.handlers.get(t)?.size??0}on(t,e){this.handlers.has(t)||this.handlers.set(t,new Set);let s=this.handlers.get(t);return s.add(e),this.maxListeners>0&&s.size>this.maxListeners&&!this.warnedTypes.has(t)&&(this.warnedTypes.add(t),console.warn(`EventBus: possible memory leak detected. ${s.size} listeners added for "${t}". Use setMaxListeners() to increase limit if this is intentional.`)),()=>this.off(t,e)}once(t,e){let s=r=>{this.off(t,s),e(r);};return this.on(t,s)}off(t,e){this.handlers.get(t)?.delete(e);}emit(t){let e=this.handlers.get(t.type);e&&this.dispatchToSet(e,t,"handler"),this.dispatchToSet(this.wildcardHandlers,t,"wildcard handler");}dispatchToSet(t,e,s){for(let r of t)try{r(e);}catch(a){console.error(`EventBus ${s} error for "${e.type}":`,a);}}onAny(t){return this.wildcardHandlers.add(t),this.maxListeners>0&&this.wildcardHandlers.size>this.maxListeners&&!this.warnedTypes.has("*")&&(this.warnedTypes.add("*"),console.warn(`EventBus: possible memory leak detected. ${this.wildcardHandlers.size} wildcard listeners added. Use setMaxListeners() to increase limit if this is intentional.`)),()=>{this.wildcardHandlers.delete(t);}}clear(){this.handlers.clear(),this.wildcardHandlers.clear(),this.warnedTypes.clear();}};var b=class{constructor(t,e,s){this.taskStore=t;this.eventBus=e;this.config=s;}async create(t){if(!t.title.trim())throw new c("Task title is required");let e=t.priority??this.config.defaults.task.priority;if(!Number.isInteger(e)||e<1||e>4)throw new c("Priority must be an integer between 1 and 4");if(t.depends_on?.length){let n=(await Promise.all(t.depends_on.map(async i=>({depId:i,exists:!!await this.taskStore.get(i)})))).filter(i=>!i.exists).map(i=>i.depId);if(n.length>0)throw new c(`Unknown depends_on task ID(s): ${n.join(", ")}`)}let s=new Date().toISOString(),r={id:`tsk_${nanoid(7)}`,title:t.title.trim(),description:t.description?.trim()??"",status:"todo",priority:e,assignee:t.assignee,labels:t.labels??[],depends_on:t.depends_on??[],created_at:s,updated_at:s,attempts:0,max_attempts:t.max_attempts??this.config.defaults.task.max_attempts,workspace_mode:t.workspace_mode,review_criteria:t.review_criteria,scope:t.scope};return await this.taskStore.save(r),this.eventBus.emit({type:"task:created",task:r}),r}async list(t){return this.taskStore.list(t)}async get(t){let e=await this.taskStore.get(t);if(!e)throw new f(t);return e}async updateStatus(t,e){let s=await this.get(t),r=s.status;if(!a(r,e))throw new i(t,r,e);return s.status=e,s.updated_at=new Date().toISOString(),await this.taskStore.save(s),this.eventBus.emit({type:"task:status_changed",taskId:t,from:r,to:e}),s}async assign(t,e){let s=await this.get(t);return s.assignee=e,s.updated_at=new Date().toISOString(),await this.taskStore.save(s),this.eventBus.emit({type:"task:assigned",taskId:t,agentId:e}),s}async cancel(t){let e=await this.get(t);if(b$1(e.status))throw new i(t,e.status,"cancelled");return this.updateStatus(t,"cancelled")}async retry(t){let e=await this.get(t);if(e.status!=="failed"&&e.status!=="cancelled")throw new i(t,e.status,"todo");let s=e.status;return e.status="todo",e.attempts=0,e.updated_at=new Date().toISOString(),await this.taskStore.save(e),this.eventBus.emit({type:"task:status_changed",taskId:t,from:s,to:"todo"}),e}async reject(t,e){let s=await this.get(t);if(s.status!=="review")throw new i(t,s.status,"todo");let r=s.status;return s.status="todo",s.attempts=0,s.feedback=e,s.updated_at=new Date().toISOString(),await this.taskStore.save(s),this.eventBus.emit({type:"task:status_changed",taskId:t,from:r,to:"todo"}),s}async update(t,e){let s=await this.get(t);if(e.title!==void 0){if(!e.title.trim())throw new c("Task title cannot be empty");s.title=e.title.trim();}if(e.description!==void 0&&(s.description=e.description.trim()),e.priority!==void 0){if(!Number.isInteger(e.priority)||e.priority<1||e.priority>4)throw new c("Priority must be an integer between 1 and 4");s.priority=e.priority;}return e.labels!==void 0&&(s.labels=e.labels),s.updated_at=new Date().toISOString(),await this.taskStore.save(s),s}async delete(t){if((await this.get(t)).status==="in_progress")throw new c("Cannot delete a running task. Cancel it first.");await this.taskStore.delete(t);}async incrementAttempts(t){let e=await this.get(t);return e.attempts+=1,e.updated_at=new Date().toISOString(),await this.taskStore.save(e),e}};var A=class{constructor(t,e,s,r){this.agentStore=t;this.stateStore=e;this.eventBus=s;this.config=r;}async create(t){if(!t.name.trim())throw new c("Agent name is required");if(await this.agentStore.getByName(t.name))throw new c(`Agent "${t.name}" already exists`);let s={id:`agt_${nanoid(7)}`,name:t.name.trim(),adapter:t.adapter||this.config.defaults.agent.adapter,role:t.role,config:{command:t.command,model:t.model,approval_policy:t.approval_policy??this.config.defaults.agent.approval_policy,max_turns:t.max_turns??this.config.defaults.agent.max_turns,timeout_ms:t.timeout_ms??this.config.defaults.agent.timeout_ms,stall_timeout_ms:t.stall_timeout_ms??this.config.defaults.agent.stall_timeout_ms,env:t.env,system_prompt:t.system_prompt,workspace_mode:t.workspace_mode,skills:t.skills},status:"idle",stats:{tasks_completed:0,tasks_failed:0,total_runs:0,total_runtime_ms:0}};return await this.agentStore.save(s),s}async list(){return this.agentStore.list()}async get(t){let e=await this.agentStore.get(t);if(!e)throw new g(t);return e}async remove(t){let e=await this.get(t);if(e.status==="running"){let s=await this.stateStore.read();if(Object.values(s.running).some(a=>a.agent_id===t))throw new c("Cannot remove a running agent. Stop it first.");e.status="idle",await this.agentStore.save(e);}await this.agentStore.delete(t);}async update(t,e){let s=await this.get(t);if(e.name!==void 0){if(!e.name.trim())throw new c("Agent name cannot be empty");let r=await this.agentStore.getByName(e.name.trim());if(r&&r.id!==t)throw new c(`Agent "${e.name}" already exists`);s.name=e.name.trim();}return e.role!==void 0&&(s.role=e.role||void 0),e.model!==void 0&&(s.config.model=e.model||void 0),e.approval_policy!==void 0&&(s.config.approval_policy=e.approval_policy),await this.agentStore.save(s),s}async disable(t){return this.setStatus(t,"disabled")}async enable(t){return this.setStatus(t,"idle")}async setAutonomous(t,e){let s=await this.get(t);return s.autonomous=e,await this.agentStore.save(s),this.eventBus.emit({type:"agent:autonomous_toggled",agentId:t,autonomous:e}),s}async setStatus(t,e){let s=await this.get(t);return s.status=e,await this.agentStore.save(s),s}async updateStats(t,e){let s=await this.get(t);return Object.assign(s.stats,e),await this.agentStore.save(s),s}async findBestAgent(t){let e=await this.agentStore.list(),s=e.filter(a=>a.status==="idle");if(s.length===0)return null;if(t.assignee){let a=e.find(n=>n.id===t.assignee);return a&&a.status==="idle"?a:null}let r=s.map(a=>{let n=0;if(t.labels?.length>0&&a.config.skills?.length)for(let m of t.labels){let c=m.toLowerCase();a.config.skills.some(d=>d.toLowerCase()===c)&&(n+=50);}if(t.labels?.length>0&&a.role){let m=a.role.toLowerCase();t.labels.some(c=>m.includes(c.toLowerCase()))&&(n+=30);}a.status==="idle"&&(n+=20);let i=a.stats.tasks_completed+a.stats.tasks_failed;return i>0&&(n+=Math.round(a.stats.tasks_completed/i*10)),{agent:a,score:n}});return r.sort((a,n)=>n.score-a.score),r[0]?.agent??null}};var x=class{constructor(t,e){this.runStore=t;this.eventBus=e;}async create(t){let e={id:`run_${nanoid(7)}`,task_id:t.taskId,agent_id:t.agentId,attempt:t.attempt,status:"preparing",started_at:new Date().toISOString(),workspace_path:t.workspacePath,prompt:t.prompt};return await this.runStore.save(e),e}async get(t){return this.runStore.get(t)}async start(t,e){let s=await this.runStore.get(t);if(!s)throw new Error(`Run not found: ${t}`);return s.status="running",s.pid=e,await this.runStore.save(s),this.eventBus.emit({type:"agent:started",agentId:s.agent_id,taskId:s.task_id,runId:t}),s}async finish(t,e,s,r){let a=await this.runStore.get(t);if(!a)throw new Error(`Run not found: ${t}`);return a.status=e,a.finished_at=new Date().toISOString(),a.tokens=s,a.error=r,await this.runStore.save(a),this.eventBus.emit({type:"agent:completed",runId:t,agentId:a.agent_id,success:e==="succeeded"}),a}async appendEvent(t,e){await this.runStore.appendEvent(t,e);}async listAll(){return this.runStore.listAll()}async listForTask(t){return this.runStore.listForTask(t)}async listForAgent(t){return this.runStore.listForAgent(t)}async readEvents(t){return this.runStore.readEvents(t)}async readEventsTail(t,e){return this.runStore.readEventsTail(t,e)}async getLastFailedRunContext(t,e=50){let r=(await this.runStore.listForTask(t)).filter(i=>i.status==="failed").sort((i,m)=>(m.finished_at??"").localeCompare(i.finished_at??""))[0];if(!r)return null;let a=r.error??"Unknown error",n="";try{n=(await this.runStore.readEventsTail(r.id,e*2)).filter(c=>c.type==="agent_output"||c.type==="error").map(c=>typeof c.data=="string"?c.data:JSON.stringify(c.data)).join(`
|
|
2
2
|
`).split(`
|
|
3
3
|
`).slice(-e).join(`
|
|
4
|
-
`);}catch{}return {error:a,output:n}}};var I=class{constructor(t){this.paths=t;}async list(t){await h(this.paths.tasksDir);let e=await j$2(this.paths.tasksDir,".yml");return (await Promise.all(e.map(a=>{let n=a.replace(".yml","");return a$1(this.paths.taskPath(n))}))).filter(a=>a!==null&&(!t?.status||a.status===t.status)).sort((a,n)=>{let i=it(a.status)-it(n.status);if(i!==0)return i;let
|
|
5
|
-
`);}}}finally{a.destroy();}}async listFiltered(t){await h(this.paths.runsDir);let e=await j$2(this.paths.runsDir,".json"),s=64,r=[];for(let a=0;a<e.length;a+=s){let n=e.slice(a,a+s),i=await Promise.all(n.map(o=>{let c=o.endsWith(".json")?o.slice(0,-5):o;return c$1(this.paths.runPath(c))}));for(let o of i)o!==null&&t(o)&&r.push(o);}return r.sort((a,n)=>new Date(n.started_at).getTime()-new Date(a.started_at).getTime())}};var W={version:1,running:{},claimed:[],retry_queue:[],stats:{total_runs:0,total_tasks_completed:0,total_tasks_failed:0,total_tokens:{input:0,output:0,total:0},total_runtime_ms:0}};var R=class{constructor(t){this.paths=t;}async read(){let t=await c$1(this.paths.statePath);if(!t)return structuredClone(W);let e=structuredClone(W);return {version:t.version??e.version,pid:t.pid,started_at:t.started_at,running:t.running&&typeof t.running=="object"?t.running:e.running,claimed:Array.isArray(t.claimed)?t.claimed:e.claimed,retry_queue:Array.isArray(t.retry_queue)?t.retry_queue:e.retry_queue,stats:{total_runs:t.stats?.total_runs??e.stats.total_runs,total_tasks_completed:t.stats?.total_tasks_completed??e.stats.total_tasks_completed,total_tasks_failed:t.stats?.total_tasks_failed??e.stats.total_tasks_failed,total_tokens:t.stats?.total_tokens??e.stats.total_tokens,total_runtime_ms:t.stats?.total_runtime_ms??e.stats.total_runtime_ms}}}async write(t){await d(this.paths.statePath,t);}};var ot={project:{name:"my-project"},defaults:{agent:{adapter:"claude",approval_policy:"auto",max_turns:50,timeout_ms:36e5,stall_timeout_ms:3e5,workspace_mode:"worktree"},task:{max_attempts:3,priority:3}},scheduling:{poll_interval_ms:3e4,max_concurrent_agents:6,retry_base_delay_ms:1e4,retry_max_delay_ms:3e5}};var O=class{constructor(t){this.paths=t;}async read(){let t=await a$1(this.paths.configPath);return mt(ot,t??{})}async write(t){await b$2(this.paths.configPath,t);}async get(t){let e=await this.read();return Mt(e,t)}async set(t,e){let s=await this.read();Gt(s,t,e),await this.write(s);}};function Mt(m,t){let e=t.split("."),s=m;for(let r of e){if(s==null||typeof s!="object")return;s=s[r];}return s}function Gt(m,t,e){let s=t.split("."),r=m;for(let n=0;n<s.length-1;n++){let i=s[n];(typeof r[i]!="object"||r[i]===null)&&(r[i]={}),r=r[i];}let a=s[s.length-1];r[a]=e;}function mt(m,t){let e={...m};for(let s of Object.keys(t)){let r=t[s],a=e[s];r!=null&&typeof r=="object"&&!Array.isArray(r)&&typeof a=="object"&&a!==null&&!Array.isArray(a)?e[s]=mt(a,r):e[s]=r;}return e}var z={tui:{activity_filter:"all"}};var dt=ct.join(homedir(),".orchestry"),lt=ct.join(dt,"global.yml"),D=class{async read(){let t=await a$1(lt);return t?{tui:{activity_filter:t.tui?.activity_filter??z.tui.activity_filter}}:{...z}}async write(t){await mkdir(dt,{recursive:true}),await b$2(lt,t);}async set(t,e){let s=await this.read();s.tui[t]=e,await this.write(s);}};var M=class m{constructor(t){this.paths=t;}async get(t){let e=await c$1(this.paths.contextPath(t));return e?gt(e)?(await this.delete(t),null):e:null}static MAX_TTL_MS=720*60*60*1e3;async set(t,e,s){if(s!==void 0&&(!Number.isFinite(s)||s<=0||s>m.MAX_TTL_MS))throw new Error(`TTL must be a positive number up to ${m.MAX_TTL_MS}ms (30 days)`);await h(this.paths.contextDir);let r=new Date().toISOString(),a=await c$1(this.paths.contextPath(t)),n={key:t,value:e,created_at:a?.created_at??r,updated_at:r,ttl_ms:s,expires_at:s?new Date(Date.now()+s).toISOString():void 0};await d(this.paths.contextPath(t),n);}async delete(t){try{await Rt.unlink(this.paths.contextPath(t));}catch(e){if(e.code!=="ENOENT")throw e}}async list(){await h(this.paths.contextDir);let t=await j$2(this.paths.contextDir,".json"),e=await Promise.all(t.map(r=>{let a=r.replace(".json","");return c$1(this.paths.contextPath(a))})),s=[];for(let r of e)if(r){if(gt(r)){await this.delete(r.key);continue}s.push(r);}return s.sort((r,a)=>r.key.localeCompare(a.key))}async getAll(){let t=await this.list(),e={};for(let s of t)e[s.key]=s.value;return e}};function gt(m){return m.expires_at?new Date(m.expires_at).getTime()<Date.now():false}var G=class{constructor(t){this.paths=t;}async save(t){await h(this.paths.messagesDir),await d(this.paths.messagePath(t.id),t);}async get(t){return c$1(this.paths.messagePath(t))}async list(){let t=await j$2(this.paths.messagesDir,".json");return (await Promise.all(t.map(s=>c$1(this.paths.messagePath(s.replace(".json","")))))).filter(s=>s!==null).sort((s,r)=>s.created_at.localeCompare(r.created_at))}async listPending(t){let e=await this.list(),s=Date.now();return e.filter(r=>r.status!=="pending"||r.expires_at&&new Date(r.expires_at).getTime()<s?false:r.to_agent_id===t)}async markDelivered(t){let e=await this.get(t);e&&(e.status="delivered",e.delivered_at=new Date().toISOString(),await d(this.paths.messagePath(t),e));}async delete(t){try{await Rt.unlink(this.paths.messagePath(t));}catch(e){if(e.code!=="ENOENT")throw e}}async purgeExpired(){let t=await this.list(),e=Date.now(),s=t.filter(r=>{let a=r.expires_at&&new Date(r.expires_at).getTime()<e,n=r.delivered_at&&e-new Date(r.delivered_at).getTime()>36e5;return a||n});return await Promise.all(s.map(r=>this.delete(r.id))),s.length}};var $t=new Set(["achieved","abandoned"]);function ut(m){return $t.has(m)}var X={active:0,paused:1,achieved:2,abandoned:3};var L=class{constructor(t){this.paths=t;}async list(t){let e=await j$2(this.paths.goalsDir,".yml");return (await Promise.all(e.map(a=>{let n=a.replace(".yml","");return a$1(this.paths.goalPath(n))}))).filter(a=>a!==null&&(!t?.status||a.status===t.status)).sort((a,n)=>{let i=X[a.status]-X[n.status];if(i!==0)return i;let o=n.updated_at??"",c=a.updated_at??"";return o<c?-1:o>c?1:0})}async get(t){return a$1(this.paths.goalPath(t))}async save(t){await b$2(this.paths.goalPath(t.id),t);}async delete(t){try{await Rt.unlink(this.paths.goalPath(t));}catch(e){if(e.code!=="ENOENT")throw e}}};var B=class{constructor(t){this.paths=t;}async save(t){await h(this.paths.teamsDir),await b$2(this.paths.teamPath(t.id),t);}async get(t){return a$1(this.paths.teamPath(t))}async getByName(t){return (await this.list()).find(s=>s.name===t)??null}async list(){await h(this.paths.teamsDir);let t=await j$2(this.paths.teamsDir,".yml");return (await Promise.all(t.map(s=>a$1(this.paths.teamPath(s.replace(".yml","")))))).filter(s=>s!==null)}async delete(t){try{await Rt.unlink(this.paths.teamPath(t));}catch(e){if(e.code!=="ENOENT")throw e}}};var F=class{constructor(t,e,s,r){this.messageStore=t;this.agentStore=e;this.teamStore=s;this.eventBus=r;}async send(t){if(!t.body.trim())throw new c("Message body is required");let e=t.ttl_ms??864e5;if(e<=0||e>6048e5)throw new c(`TTL must be between 1ms and ${6048e5}ms`);if(!await this.agentStore.get(t.from_agent_id)&&t.from_agent_id!=="cli")throw new c(`Sender agent not found: ${t.from_agent_id}`);let r=new Date,a={channel:t.channel,from_agent_id:t.from_agent_id,subject:(t.subject||"(no subject)").slice(0,200),body:t.body.slice(0,4e3),created_at:r.toISOString(),expires_at:new Date(r.getTime()+e).toISOString(),status:"pending",team_id:t.team_id,reply_to:t.reply_to},n=[];if(t.channel==="broadcast"){let i=await this.agentStore.list();if(t.team_id){let d=await this.teamStore.get(t.team_id);if(d){let v=new Set(d.members.map(p=>p.agent_id));i=i.filter(p=>v.has(p.id));}}let c=i.filter(d=>d.id!==t.from_agent_id&&d.status!=="disabled").map(d=>({...a,id:`msg_${nanoid(7)}`,to_agent_id:d.id}));await Promise.all(c.map(d=>this.messageStore.save(d)));for(let d of c)n.push(d),this.emitSent(d);}else if(t.channel==="lead"){if(!t.team_id)throw new c("team_id is required for lead channel");let i=await this.teamStore.get(t.team_id);if(!i)throw new c(`Team not found: ${t.team_id}`);let o={...a,id:`msg_${nanoid(7)}`,to_agent_id:i.lead_agent_id};await this.messageStore.save(o),n.push(o),this.emitSent(o);}else {if(!t.to_agent_id)throw new c("to_agent_id is required for direct messages");if(!await this.agentStore.get(t.to_agent_id))throw new c(`Recipient agent not found: ${t.to_agent_id}`);let o={...a,id:`msg_${nanoid(7)}`,to_agent_id:t.to_agent_id};await this.messageStore.save(o),n.push(o),this.emitSent(o);}return n}async drainMailbox(t,e){let s=await this.messageStore.listPending(t);await Promise.all(s.map(r=>this.messageStore.markDelivered(r.id)));for(let r of s)this.eventBus.emit({type:"message:delivered",messageId:r.id,toAgentId:t,taskId:e});return s}async listAll(){return this.messageStore.list()}async listPendingForAgent(t){return this.messageStore.listPending(t)}async listForAgent(t){return (await this.messageStore.list()).filter(s=>s.to_agent_id===t||s.from_agent_id===t)}async purgeExpired(){return this.messageStore.purgeExpired()}emitSent(t){this.eventBus.emit({type:"message:sent",messageId:t.id,fromAgentId:t.from_agent_id,toAgentId:t.to_agent_id,channel:t.channel});}};var Yt={active:["paused","achieved","abandoned"],paused:["active","abandoned"],achieved:[],abandoned:[]},N=class{constructor(t,e,s,r){this.goalStore=t;this.eventBus=e;this.agentService=s;this.taskService=r;}async create(t){if(!t.title.trim())throw new c("Goal title is required");let e=new Date().toISOString(),s={id:`goal_${nanoid(7)}`,title:t.title.trim(),description:t.description?.trim()??"",status:"active",assignee:t.assignee,created_at:e,updated_at:e};return await this.goalStore.save(s),this.eventBus.emit({type:"goal:created",goalId:s.id,title:s.title}),s.assignee&&await this.enableAutonomous(s.assignee),s}async list(t){return this.goalStore.list(t)}async get(t){let e=await this.goalStore.get(t);if(!e)throw new j$1(t);return e}async updateStatus(t,e){let s=await this.get(t),r=s.status;if(!Yt[r].includes(e))throw new c(`Cannot transition goal from '${r}' to '${e}'`);return s.status=e,s.updated_at=new Date().toISOString(),await this.goalStore.save(s),this.eventBus.emit({type:"goal:status_changed",goalId:t,from:r,to:e}),s.assignee&&(e==="paused"?(await this.maybeDisableAutonomous(s.assignee),await this.cancelPendingAutonomousTasks(s.assignee)):e==="active"&&r==="paused"?await this.enableAutonomous(s.assignee):ut(e)&&await this.maybeDisableAutonomous(s.assignee)),s}async update(t,e){let s=await this.get(t),r=s.assignee;if(e.title!==void 0){if(!e.title.trim())throw new c("Goal title cannot be empty");s.title=e.title.trim();}e.description!==void 0&&(s.description=e.description.trim()),e.assignee!==void 0&&(s.assignee=e.assignee||void 0),s.updated_at=new Date().toISOString(),await this.goalStore.save(s),this.eventBus.emit({type:"goal:updated",goalId:t});let a=s.assignee;if(a!==r){let n=[];a&&n.push(this.enableAutonomous(a)),r&&n.push(this.maybeDisableAutonomous(r)),await Promise.all(n);}return s}async delete(t){let e=await this.get(t),{assignee:s}=e;await this.goalStore.delete(t),this.eventBus.emit({type:"goal:deleted",goalId:t}),s&&await this.maybeDisableAutonomous(s);}async enableAutonomous(t){if(this.agentService)try{await this.agentService.setAutonomous(t,!0);}catch{}}async hasActiveGoalsForAgent(t){return (await this.goalStore.list({status:"active"})).some(s=>s.assignee===t)}async cancelPendingAutonomousTasks(t){if(this.taskService)try{let[e,s]=await Promise.all([this.taskService.list({status:"todo"}),this.taskService.list({status:"retrying"})]),r=[...e,...s].filter(a=>a.assignee===t&&a.labels?.includes(a$2));await Promise.all(r.map(a=>this.taskService.cancel(a.id).catch(()=>{})));}catch{}}async maybeDisableAutonomous(t){if(this.agentService)try{await this.hasActiveGoalsForAgent(t)||await this.agentService.setAutonomous(t,!1);}catch{}}};var ht={auto_claim:true,message_ttl_ms:864e5};var $=class{constructor(t,e,s,r){this.teamStore=t;this.agentStore=e;this.taskStore=s;this.eventBus=r;}async create(t){if(!t.name.trim())throw new c("Team name is required");if(!await this.agentStore.get(t.lead_agent_id))throw new c(`Lead agent not found: ${t.lead_agent_id}`);if(await this.teamStore.getByName(t.name.trim()))throw new c(`Team "${t.name}" already exists`);let r=new Date().toISOString(),a={agent_id:t.lead_agent_id,role:"lead",joined_at:r},n=[];for(let o of t.member_agent_ids??[]){if(o===t.lead_agent_id)continue;if(!await this.agentStore.get(o))throw new c(`Member agent not found: ${o}`);n.push({agent_id:o,role:"member",joined_at:r});}let i={id:`team_${nanoid(7)}`,name:t.name.trim(),description:t.description,status:"active",members:[a,...n],task_pool:[],lead_agent_id:t.lead_agent_id,created_at:r,updated_at:r,config:{...ht,...t.config??{}}};await this.teamStore.save(i),this.eventBus.emit({type:"team:created",teamId:i.id,name:i.name,leadAgentId:i.lead_agent_id});for(let o of n)this.eventBus.emit({type:"team:member_joined",teamId:i.id,agentId:o.agent_id});return i}async get(t){let e=await this.teamStore.get(t);if(!e)throw new k$1(t);return e}async list(){return this.teamStore.list()}async join(t,e){let s=await this.get(t);if(s.members.some(a=>a.agent_id===e))throw new c(`Agent ${e} is already a member of team ${t}`);if(!await this.agentStore.get(e))throw new c(`Agent not found: ${e}`);return s.members.push({agent_id:e,role:"member",joined_at:new Date().toISOString()}),s.updated_at=new Date().toISOString(),await this.teamStore.save(s),this.eventBus.emit({type:"team:member_joined",teamId:t,agentId:e}),s}async leave(t,e){let s=await this.get(t);if(e===s.lead_agent_id)throw new c("Lead cannot leave team. Disband the team or transfer lead first.");return s.members=s.members.filter(r=>r.agent_id!==e),s.updated_at=new Date().toISOString(),await this.teamStore.save(s),this.eventBus.emit({type:"team:member_left",teamId:t,agentId:e}),s}async addTask(t,e){let s=await this.get(t);if(!await this.taskStore.get(e))throw new c(`Task not found: ${e}`);return s.task_pool.includes(e)||(s.task_pool.push(e),s.updated_at=new Date().toISOString(),await this.teamStore.save(s),this.eventBus.emit({type:"team:task_added",teamId:t,taskId:e})),s}async removeTask(t,e){let s=await this.get(t);return s.task_pool=s.task_pool.filter(r=>r!==e),s.updated_at=new Date().toISOString(),await this.teamStore.save(s),s}async setLead(t,e){let s=await this.get(t),r=s.members.find(n=>n.agent_id===e);if(!r)throw new c(`Agent ${e} is not a member of team ${t}`);let a=s.members.find(n=>n.agent_id===s.lead_agent_id);return a&&(a.role="member"),r.role="lead",s.lead_agent_id=e,s.updated_at=new Date().toISOString(),await this.teamStore.save(s),s}async disband(t){let e=await this.get(t);e.status="disbanded",e.updated_at=new Date().toISOString(),await this.teamStore.save(e),this.eventBus.emit({type:"team:disbanded",teamId:t});}async findTeamForAgent(t){return (await this.teamStore.list()).find(s=>s.status==="active"&&s.members.some(r=>r.agent_id===t))??null}};async function ft(m){let t=new k(m.projectRoot);await t.requireInit();let e=new O(t),s=new D,[r,a]=await Promise.all([e.read(),s.read()]),n=new I(t),i=new C(t),o=new j(t),c=new R(t),d=new M(t),v=new G(t),p=new L(t),k$1=new B(t),w=new P,_=new b(n,w,r),E=new A(i,c,w,r),U=new x(o,w),wt=new F(v,i,k$1,w),_t=new N(p,w,E,_),St=new $(k$1,i,n,w);return {context:m,paths:t,config:r,taskStore:n,agentStore:i,runStore:o,stateStore:c,configStore:e,globalConfigStore:s,globalConfig:a,contextStore:d,messageStore:v,goalStore:p,teamStore:k$1,eventBus:w,taskService:_,agentService:E,runService:U,messageService:wt,goalService:_t,teamService:St}}async function yt(m){let t=await ft(m),[{ProcessManager:e},{AdapterRegistry:s},{ClaudeAdapter:r},{CodexAdapter:a},{CursorAdapter:n},{ShellAdapter:i},{WorkspaceManager:o},{LiquidTemplateEngine:c},{Orchestrator:d},{DoctorService:v}]=await Promise.all([import('./process-manager-TLZOTO4Y.js'),import('./registry-UQAHK77P.js'),import('./claude-S47YTIHU.js'),import('./codex-2CH57B7G.js'),import('./cursor-QFUNKPCQ.js'),import('./shell-OGTSH4RJ.js'),import('./workspace-manager-7M46ESUL.js'),import('./template-engine-322SCRR6.js'),import('./orchestrator-TAFBYQQ5.js'),import('./doctor-service-NTWBWOM2.js')]),p=new e,k=new c,w=new o(m.projectRoot,t.paths.root,p),_=new s;_.register(new r(p)),_.register(new a(p)),_.register(new n(p)),_.register(new i(p));let E=new v(_,p),U=new d({taskStore:t.taskStore,agentStore:t.agentStore,runStore:t.runStore,stateStore:t.stateStore,adapterRegistry:_,workspaceManager:w,templateEngine:k,processManager:p,eventBus:t.eventBus,taskService:t.taskService,agentService:t.agentService,runService:t.runService,contextStore:t.contextStore,messageService:t.messageService,goalStore:t.goalStore,config:t.config,projectRoot:m.projectRoot,lockPath:t.paths.lockPath});return {...t,processManager:p,adapterRegistry:_,workspaceManager:w,templateEngine:k,doctorService:E,orchestrator:U}}async function zt(m){return yt(m)}export{A as AgentService,P as EventBus,x as RunService,b as TaskService,zt as buildContainer,yt as buildFullContainer,ft as buildLightContainer};//# sourceMappingURL=index.js.map
|
|
4
|
+
`);}catch{}return {error:a,output:n}}};var I=class{constructor(t){this.paths=t;}async list(t){await h(this.paths.tasksDir);let e=await j$2(this.paths.tasksDir,".yml");return (await Promise.all(e.map(a=>{let n=a.replace(".yml","");return a$1(this.paths.taskPath(n))}))).filter(a=>a!==null&&(!t?.status||a.status===t.status)).sort((a,n)=>{let i=it(a.status)-it(n.status);if(i!==0)return i;let m=n.updated_at??"",c=a.updated_at??"";return m<c?-1:m>c?1:0})}async get(t){return a$1(this.paths.taskPath(t))}async save(t){await h(this.paths.tasksDir),await b$2(this.paths.taskPath(t.id),t);}async delete(t){try{await Ot.unlink(this.paths.taskPath(t));}catch(e){if(e.code!=="ENOENT")throw e}}};function it(o){return {in_progress:0,retrying:1,review:2,todo:3,done:4,failed:5,cancelled:6}[o]}var C=class{constructor(t){this.paths=t;}async list(){await h(this.paths.agentsDir);let t=await j$2(this.paths.agentsDir,".yml");return (await Promise.all(t.map(s=>{let r=s.replace(".yml","");return a$1(this.paths.agentPath(r))}))).filter(s=>s!==null)}async get(t){return a$1(this.paths.agentPath(t))}async getByName(t){return (await this.list()).find(s=>s.name===t)??null}async save(t){await h(this.paths.agentsDir),await b$2(this.paths.agentPath(t.id),t);}async delete(t){try{await Ot.unlink(this.paths.agentPath(t));}catch(e){if(e.code!=="ENOENT")throw e}}};var j=class{constructor(t){this.paths=t;}async save(t){await h(this.paths.runsDir),await d(this.paths.runPath(t.id),t);}async get(t){return c$1(this.paths.runPath(t))}async listAll(){return this.listFiltered(()=>true)}async listForTask(t){return this.listFiltered(e=>e.task_id===t)}async listForAgent(t){return this.listFiltered(e=>e.agent_id===t)}async appendEvent(t,e$1){await h(this.paths.runsDir),await e(this.paths.runEventsPath(t),e$1);}async readEvents(t){return f$1(this.paths.runEventsPath(t))}async readEventsTail(t,e){return g$1(this.paths.runEventsPath(t),e)}async*streamEvents(t,e){let s=this.paths.runEventsPath(t),r=Date.now()+3e4;for(;!e?.aborted&&Date.now()<r&&!await i$1(s);)await new Promise(n=>setTimeout(n,100));if(e?.aborted||Date.now()>=r)return;let a=createReadStream(s);try{for await(let n of b$3(a)){if(e?.aborted)break;if(n.trim())try{yield JSON.parse(n);}catch{process.stderr.write(`[RunStore] skipping corrupt JSONL line: ${n.slice(0,200)}
|
|
5
|
+
`);}}}finally{a.destroy();}}async listFiltered(t){await h(this.paths.runsDir);let e=await j$2(this.paths.runsDir,".json"),s=64,r=[];for(let a=0;a<e.length;a+=s){let n=e.slice(a,a+s),i=await Promise.all(n.map(m=>{let c=m.endsWith(".json")?m.slice(0,-5):m;return c$1(this.paths.runPath(c))}));for(let m of i)m!==null&&t(m)&&r.push(m);}return r.sort((a,n)=>new Date(n.started_at).getTime()-new Date(a.started_at).getTime())}};var W={version:1,running:{},claimed:[],retry_queue:[],stats:{total_runs:0,total_tasks_completed:0,total_tasks_failed:0,total_tokens:{input:0,output:0,total:0},total_runtime_ms:0}};var R=class{constructor(t){this.paths=t;}async read(){let t=await c$1(this.paths.statePath);if(!t)return structuredClone(W);let e=structuredClone(W);return {version:t.version??e.version,pid:t.pid,started_at:t.started_at,running:t.running&&typeof t.running=="object"?t.running:e.running,claimed:Array.isArray(t.claimed)?t.claimed:e.claimed,retry_queue:Array.isArray(t.retry_queue)?t.retry_queue:e.retry_queue,stats:{total_runs:t.stats?.total_runs??e.stats.total_runs,total_tasks_completed:t.stats?.total_tasks_completed??e.stats.total_tasks_completed,total_tasks_failed:t.stats?.total_tasks_failed??e.stats.total_tasks_failed,total_tokens:t.stats?.total_tokens??e.stats.total_tokens,total_runtime_ms:t.stats?.total_runtime_ms??e.stats.total_runtime_ms}}}async write(t){await d(this.paths.statePath,t);}};var ot={project:{name:"my-project"},defaults:{agent:{adapter:"claude",approval_policy:"auto",max_turns:50,timeout_ms:36e5,stall_timeout_ms:3e5,workspace_mode:"worktree"},task:{max_attempts:3,priority:3}},scheduling:{poll_interval_ms:3e4,max_concurrent_agents:6,retry_base_delay_ms:1e4,retry_max_delay_ms:3e5}};var O=class{constructor(t){this.paths=t;}async read(){let t=await a$1(this.paths.configPath);return mt(ot,t??{})}async write(t){await b$2(this.paths.configPath,t);}async get(t){let e=await this.read();return Gt(e,t)}async set(t,e){let s=await this.read();Lt(s,t,e),await this.write(s);}};function Gt(o,t){let e=t.split("."),s=o;for(let r of e){if(s==null||typeof s!="object")return;s=s[r];}return s}function Lt(o,t,e){let s=t.split("."),r=o;for(let n=0;n<s.length-1;n++){let i=s[n];(typeof r[i]!="object"||r[i]===null)&&(r[i]={}),r=r[i];}let a=s[s.length-1];r[a]=e;}function mt(o,t){let e={...o};for(let s of Object.keys(t)){let r=t[s],a=e[s];r!=null&&typeof r=="object"&&!Array.isArray(r)&&typeof a=="object"&&a!==null&&!Array.isArray(a)?e[s]=mt(a,r):e[s]=r;}return e}var z={tui:{activity_filter:"all"}};var dt=ct.join(homedir(),".orchestry"),lt=ct.join(dt,"global.yml"),D=class{async read(){let t=await a$1(lt);return t?{tui:{activity_filter:t.tui?.activity_filter??z.tui.activity_filter}}:{...z}}async write(t){await mkdir(dt,{recursive:true}),await b$2(lt,t);}async set(t,e){let s=await this.read();s.tui[t]=e,await this.write(s);}};var M=class o{constructor(t){this.paths=t;}async get(t){let e=await c$1(this.paths.contextPath(t));return e?gt(e)?(await this.delete(t),null):e:null}static MAX_TTL_MS=720*60*60*1e3;async set(t,e,s){if(s!==void 0&&(!Number.isFinite(s)||s<=0||s>o.MAX_TTL_MS))throw new Error(`TTL must be a positive number up to ${o.MAX_TTL_MS}ms (30 days)`);await h(this.paths.contextDir);let r=new Date().toISOString(),a=await c$1(this.paths.contextPath(t)),n={key:t,value:e,created_at:a?.created_at??r,updated_at:r,ttl_ms:s,expires_at:s?new Date(Date.now()+s).toISOString():void 0};await d(this.paths.contextPath(t),n);}async delete(t){try{await Ot.unlink(this.paths.contextPath(t));}catch(e){if(e.code!=="ENOENT")throw e}}async list(){await h(this.paths.contextDir);let t=await j$2(this.paths.contextDir,".json"),e=await Promise.all(t.map(r=>{let a=r.replace(".json","");return c$1(this.paths.contextPath(a))})),s=[];for(let r of e)if(r){if(gt(r)){await this.delete(r.key);continue}s.push(r);}return s.sort((r,a)=>r.key.localeCompare(a.key))}async getAll(){let t=await this.list(),e={};for(let s of t)e[s.key]=s.value;return e}};function gt(o){return o.expires_at?new Date(o.expires_at).getTime()<Date.now():false}var G=class{constructor(t){this.paths=t;}async save(t){await h(this.paths.messagesDir),await d(this.paths.messagePath(t.id),t);}async get(t){return c$1(this.paths.messagePath(t))}async list(){let t=await j$2(this.paths.messagesDir,".json");return (await Promise.all(t.map(s=>c$1(this.paths.messagePath(s.replace(".json","")))))).filter(s=>s!==null).sort((s,r)=>s.created_at.localeCompare(r.created_at))}async listPending(t){let e=await this.list(),s=Date.now();return e.filter(r=>r.status!=="pending"||r.expires_at&&new Date(r.expires_at).getTime()<s?false:r.to_agent_id===t)}async markDelivered(t){let e=await this.get(t);e&&(e.status="delivered",e.delivered_at=new Date().toISOString(),await d(this.paths.messagePath(t),e));}async delete(t){try{await Ot.unlink(this.paths.messagePath(t));}catch(e){if(e.code!=="ENOENT")throw e}}async purgeExpired(){let t=await this.list(),e=Date.now(),s=t.filter(r=>{let a=r.expires_at&&new Date(r.expires_at).getTime()<e,n=r.delivered_at&&e-new Date(r.delivered_at).getTime()>36e5;return a||n});return await Promise.all(s.map(r=>this.delete(r.id))),s.length}};var Ut=new Set(["achieved","abandoned"]);function ut(o){return Ut.has(o)}var X={active:0,paused:1,achieved:2,abandoned:3};var L=class{constructor(t){this.paths=t;}async list(t){let e=await j$2(this.paths.goalsDir,".yml");return (await Promise.all(e.map(a=>{let n=a.replace(".yml","");return a$1(this.paths.goalPath(n))}))).filter(a=>a!==null&&(!t?.status||a.status===t.status)).sort((a,n)=>{let i=X[a.status]-X[n.status];if(i!==0)return i;let m=n.updated_at??"",c=a.updated_at??"";return m<c?-1:m>c?1:0})}async get(t){return a$1(this.paths.goalPath(t))}async save(t){await b$2(this.paths.goalPath(t.id),t);}async delete(t){try{await Ot.unlink(this.paths.goalPath(t));}catch(e){if(e.code!=="ENOENT")throw e}}};var B=class{constructor(t){this.paths=t;}async save(t){await h(this.paths.teamsDir),await b$2(this.paths.teamPath(t.id),t);}async get(t){return a$1(this.paths.teamPath(t))}async getByName(t){return (await this.list()).find(s=>s.name===t)??null}async list(){await h(this.paths.teamsDir);let t=await j$2(this.paths.teamsDir,".yml");return (await Promise.all(t.map(s=>a$1(this.paths.teamPath(s.replace(".yml","")))))).filter(s=>s!==null)}async delete(t){try{await Ot.unlink(this.paths.teamPath(t));}catch(e){if(e.code!=="ENOENT")throw e}}};var F=class{constructor(t,e,s,r){this.messageStore=t;this.agentStore=e;this.teamStore=s;this.eventBus=r;}async send(t){if(!t.body.trim())throw new c("Message body is required");let e=t.ttl_ms??864e5;if(e<=0||e>6048e5)throw new c(`TTL must be between 1ms and ${6048e5}ms`);if(!await this.agentStore.get(t.from_agent_id)&&t.from_agent_id!=="cli")throw new c(`Sender agent not found: ${t.from_agent_id}`);let r=new Date,a={channel:t.channel,from_agent_id:t.from_agent_id,subject:(t.subject||"(no subject)").slice(0,200),body:t.body.slice(0,4e3),created_at:r.toISOString(),expires_at:new Date(r.getTime()+e).toISOString(),status:"pending",team_id:t.team_id,reply_to:t.reply_to},n=[];if(t.channel==="broadcast"){let i=await this.agentStore.list();if(t.team_id){let d=await this.teamStore.get(t.team_id);if(d){let v=new Set(d.members.map(p=>p.agent_id));i=i.filter(p=>v.has(p.id));}}let c=i.filter(d=>d.id!==t.from_agent_id&&d.status!=="disabled").map(d=>({...a,id:`msg_${nanoid(7)}`,to_agent_id:d.id}));await Promise.all(c.map(d=>this.messageStore.save(d)));for(let d of c)n.push(d),this.emitSent(d);}else if(t.channel==="lead"){if(!t.team_id)throw new c("team_id is required for lead channel");let i=await this.teamStore.get(t.team_id);if(!i)throw new c(`Team not found: ${t.team_id}`);let m={...a,id:`msg_${nanoid(7)}`,to_agent_id:i.lead_agent_id};await this.messageStore.save(m),n.push(m),this.emitSent(m);}else {if(!t.to_agent_id)throw new c("to_agent_id is required for direct messages");if(!await this.agentStore.get(t.to_agent_id))throw new c(`Recipient agent not found: ${t.to_agent_id}`);let m={...a,id:`msg_${nanoid(7)}`,to_agent_id:t.to_agent_id};await this.messageStore.save(m),n.push(m),this.emitSent(m);}return n}async drainMailbox(t,e){let s=await this.messageStore.listPending(t);await Promise.all(s.map(r=>this.messageStore.markDelivered(r.id)));for(let r of s)this.eventBus.emit({type:"message:delivered",messageId:r.id,toAgentId:t,taskId:e});return s}async listAll(){return this.messageStore.list()}async listPendingForAgent(t){return this.messageStore.listPending(t)}async listForAgent(t){return (await this.messageStore.list()).filter(s=>s.to_agent_id===t||s.from_agent_id===t)}async purgeExpired(){return this.messageStore.purgeExpired()}emitSent(t){this.eventBus.emit({type:"message:sent",messageId:t.id,fromAgentId:t.from_agent_id,toAgentId:t.to_agent_id,channel:t.channel});}};var Wt={active:["paused","achieved","abandoned"],paused:["active","abandoned"],achieved:[],abandoned:[]},N=class{constructor(t,e,s,r){this.goalStore=t;this.eventBus=e;this.agentService=s;this.taskService=r;}async create(t){if(!t.title.trim())throw new c("Goal title is required");let e=new Date().toISOString(),s={id:`goal_${nanoid(7)}`,title:t.title.trim(),description:t.description?.trim()??"",status:"active",assignee:t.assignee,created_at:e,updated_at:e};return await this.goalStore.save(s),this.eventBus.emit({type:"goal:created",goalId:s.id,title:s.title}),s.assignee&&await this.enableAutonomous(s.assignee),s}async list(t){return this.goalStore.list(t)}async get(t){let e=await this.goalStore.get(t);if(!e)throw new j$1(t);return e}async updateStatus(t,e){let s=await this.get(t),r=s.status;if(!Wt[r].includes(e))throw new c(`Cannot transition goal from '${r}' to '${e}'`);return s.status=e,s.updated_at=new Date().toISOString(),await this.goalStore.save(s),this.eventBus.emit({type:"goal:status_changed",goalId:t,from:r,to:e}),s.assignee&&(e==="paused"?(await this.maybeDisableAutonomous(s.assignee),await this.cancelPendingAutonomousTasks(s.assignee)):e==="active"&&r==="paused"?await this.enableAutonomous(s.assignee):ut(e)&&await this.maybeDisableAutonomous(s.assignee)),s}async update(t,e){let s=await this.get(t),r=s.assignee;if(e.title!==void 0){if(!e.title.trim())throw new c("Goal title cannot be empty");s.title=e.title.trim();}e.description!==void 0&&(s.description=e.description.trim()),e.assignee!==void 0&&(s.assignee=e.assignee||void 0),s.updated_at=new Date().toISOString(),await this.goalStore.save(s),this.eventBus.emit({type:"goal:updated",goalId:t});let a=s.assignee;if(a!==r){let n=[];a&&n.push(this.enableAutonomous(a)),r&&n.push(this.maybeDisableAutonomous(r)),await Promise.all(n);}return s}async delete(t){let e=await this.get(t),{assignee:s}=e;await this.goalStore.delete(t),this.eventBus.emit({type:"goal:deleted",goalId:t}),s&&await this.maybeDisableAutonomous(s);}async enableAutonomous(t){if(this.agentService)try{await this.agentService.setAutonomous(t,!0);}catch{}}async hasActiveGoalsForAgent(t){return (await this.goalStore.list({status:"active"})).some(s=>s.assignee===t)}async cancelPendingAutonomousTasks(t){if(this.taskService)try{let[e,s]=await Promise.all([this.taskService.list({status:"todo"}),this.taskService.list({status:"retrying"})]),r=[...e,...s].filter(a=>a.assignee===t&&a.labels?.includes(a$2));await Promise.all(r.map(a=>this.taskService.cancel(a.id).catch(()=>{})));}catch{}}async maybeDisableAutonomous(t){if(this.agentService)try{await this.hasActiveGoalsForAgent(t)||await this.agentService.setAutonomous(t,!1);}catch{}}};var ht={auto_claim:true,message_ttl_ms:864e5};var $=class{constructor(t,e,s,r){this.teamStore=t;this.agentStore=e;this.taskStore=s;this.eventBus=r;}async create(t){if(!t.name.trim())throw new c("Team name is required");if(!await this.agentStore.get(t.lead_agent_id))throw new c(`Lead agent not found: ${t.lead_agent_id}`);if(await this.teamStore.getByName(t.name.trim()))throw new c(`Team "${t.name}" already exists`);let r=new Date().toISOString(),a={agent_id:t.lead_agent_id,role:"lead",joined_at:r},n=[];for(let m of t.member_agent_ids??[]){if(m===t.lead_agent_id)continue;if(!await this.agentStore.get(m))throw new c(`Member agent not found: ${m}`);n.push({agent_id:m,role:"member",joined_at:r});}let i={id:`team_${nanoid(7)}`,name:t.name.trim(),description:t.description,status:"active",members:[a,...n],task_pool:[],lead_agent_id:t.lead_agent_id,created_at:r,updated_at:r,config:{...ht,...t.config??{}}};await this.teamStore.save(i),this.eventBus.emit({type:"team:created",teamId:i.id,name:i.name,leadAgentId:i.lead_agent_id});for(let m of n)this.eventBus.emit({type:"team:member_joined",teamId:i.id,agentId:m.agent_id});return i}async get(t){let e=await this.teamStore.get(t);if(!e)throw new k$1(t);return e}async list(){return this.teamStore.list()}async join(t,e){let s=await this.get(t);if(s.members.some(a=>a.agent_id===e))throw new c(`Agent ${e} is already a member of team ${t}`);if(!await this.agentStore.get(e))throw new c(`Agent not found: ${e}`);return s.members.push({agent_id:e,role:"member",joined_at:new Date().toISOString()}),s.updated_at=new Date().toISOString(),await this.teamStore.save(s),this.eventBus.emit({type:"team:member_joined",teamId:t,agentId:e}),s}async leave(t,e){let s=await this.get(t);if(e===s.lead_agent_id)throw new c("Lead cannot leave team. Disband the team or transfer lead first.");return s.members=s.members.filter(r=>r.agent_id!==e),s.updated_at=new Date().toISOString(),await this.teamStore.save(s),this.eventBus.emit({type:"team:member_left",teamId:t,agentId:e}),s}async addTask(t,e){let s=await this.get(t);if(!await this.taskStore.get(e))throw new c(`Task not found: ${e}`);return s.task_pool.includes(e)||(s.task_pool.push(e),s.updated_at=new Date().toISOString(),await this.teamStore.save(s),this.eventBus.emit({type:"team:task_added",teamId:t,taskId:e})),s}async removeTask(t,e){let s=await this.get(t);return s.task_pool=s.task_pool.filter(r=>r!==e),s.updated_at=new Date().toISOString(),await this.teamStore.save(s),s}async setLead(t,e){let s=await this.get(t),r=s.members.find(n=>n.agent_id===e);if(!r)throw new c(`Agent ${e} is not a member of team ${t}`);let a=s.members.find(n=>n.agent_id===s.lead_agent_id);return a&&(a.role="member"),r.role="lead",s.lead_agent_id=e,s.updated_at=new Date().toISOString(),await this.teamStore.save(s),s}async disband(t){let e=await this.get(t);e.status="disbanded",e.updated_at=new Date().toISOString(),await this.teamStore.save(e),this.eventBus.emit({type:"team:disbanded",teamId:t});}async findTeamForAgent(t){return (await this.teamStore.list()).find(s=>s.status==="active"&&s.members.some(r=>r.agent_id===t))??null}};async function ft(o){let t=new k(o.projectRoot);await t.requireInit();let e=new O(t),s=new D,[r,a]=await Promise.all([e.read(),s.read()]),n=new I(t),i=new C(t),m=new j(t),c=new R(t),d=new M(t),v=new G(t),p=new L(t),k$1=new B(t),w=new P,_=new b(n,w,r),E=new A(i,c,w,r),U=new x(m,w),wt=new F(v,i,k$1,w),_t=new N(p,w,E,_),St=new $(k$1,i,n,w);return {context:o,paths:t,config:r,taskStore:n,agentStore:i,runStore:m,stateStore:c,configStore:e,globalConfigStore:s,globalConfig:a,contextStore:d,messageStore:v,goalStore:p,teamStore:k$1,eventBus:w,taskService:_,agentService:E,runService:U,messageService:wt,goalService:_t,teamService:St}}async function yt(o){let t=await ft(o),[{ProcessManager:e},{AdapterRegistry:s},{ClaudeAdapter:r},{CodexAdapter:a},{CursorAdapter:n},{ShellAdapter:i},{WorkspaceManager:m},{LiquidTemplateEngine:c},{Orchestrator:d},{DoctorService:v}]=await Promise.all([import('./process-manager-TLZOTO4Y.js'),import('./registry-UQAHK77P.js'),import('./claude-S47YTIHU.js'),import('./codex-2CH57B7G.js'),import('./cursor-QFUNKPCQ.js'),import('./shell-OGTSH4RJ.js'),import('./workspace-manager-AS4TFA7R.js'),import('./template-engine-322SCRR6.js'),import('./orchestrator-L6QX2LJ7.js'),import('./doctor-service-QEJCE5FK.js')]),p=new e,k=new c,w=new m(o.projectRoot,t.paths.root,p),_=new s;_.register(new r(p)),_.register(new a(p)),_.register(new n(p)),_.register(new i(p));let E=new v(_,p,o.projectRoot),U=new d({taskStore:t.taskStore,agentStore:t.agentStore,runStore:t.runStore,stateStore:t.stateStore,adapterRegistry:_,workspaceManager:w,templateEngine:k,processManager:p,eventBus:t.eventBus,taskService:t.taskService,agentService:t.agentService,runService:t.runService,contextStore:t.contextStore,messageService:t.messageService,goalStore:t.goalStore,config:t.config,projectRoot:o.projectRoot,lockPath:t.paths.lockPath});return {...t,processManager:p,adapterRegistry:_,workspaceManager:w,templateEngine:k,doctorService:E,orchestrator:U}}async function Xt(o){return yt(o)}export{A as AgentService,P as EventBus,x as RunService,b as TaskService,Xt as buildContainer,yt as buildFullContainer,ft as buildLightContainer};//# sourceMappingURL=index.js.map
|
|
6
6
|
//# sourceMappingURL=index.js.map
|