@oxgeneral/orch 0.3.2 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/dist/App-NN7HR7UE.js +20 -0
  2. package/dist/chunk-3MQNQ7QW.js +2 -0
  3. package/dist/{chunk-2UC4SVJB.js → chunk-BGHCY7WY.js} +7 -3
  4. package/dist/chunk-BGHCY7WY.js.map +1 -0
  5. package/dist/chunk-IS3YBE2B.js +3 -0
  6. package/dist/chunk-KPCT44WU.js +2 -0
  7. package/dist/chunk-NLQAJ7TW.js +147 -0
  8. package/dist/chunk-NLQAJ7TW.js.map +1 -0
  9. package/dist/{chunk-ZA5Z33GO.js → chunk-OQKREZUF.js} +1 -1
  10. package/dist/chunk-QFKVCNKL.js +2 -0
  11. package/dist/{chunk-MGFMVPRD.js → chunk-S3QYSBW4.js} +11 -4
  12. package/dist/chunk-S3QYSBW4.js.map +1 -0
  13. package/dist/{chunk-QEEM67OA.js → chunk-UIJYU3J7.js} +3 -3
  14. package/dist/{chunk-QEEM67OA.js.map → chunk-UIJYU3J7.js.map} +1 -1
  15. package/dist/claude-GQZNDJ6L.js +2 -0
  16. package/dist/{claude-RIB3RQS5.js → claude-INM52PTH.js} +13 -7
  17. package/dist/claude-INM52PTH.js.map +1 -0
  18. package/dist/cli.js +1 -1
  19. package/dist/{clipboard-service-PDTSZIR5.js → clipboard-service-MYLSWM5E.js} +1 -1
  20. package/dist/{codex-VBUSA2GJ.js → codex-QGH2GRV6.js} +17 -9
  21. package/dist/codex-QGH2GRV6.js.map +1 -0
  22. package/dist/codex-SJV7ZZBY.js +2 -0
  23. package/dist/container-NEKK5W2B.js +6 -0
  24. package/dist/cursor-4JQOCP5X.js +2 -0
  25. package/dist/{cursor-4QIOTDBW.js → cursor-KQJTQ73D.js} +11 -6
  26. package/dist/cursor-KQJTQ73D.js.map +1 -0
  27. package/dist/{doctor-KBK5JZBZ.js → doctor-UAII4VWN.js} +1 -1
  28. package/dist/index.d.ts +53 -41
  29. package/dist/index.js +13 -11
  30. package/dist/index.js.map +1 -1
  31. package/dist/{init-WRDFAFS2.js → init-2D4RAN7B.js} +1 -1
  32. package/dist/{logs-5QHJWMEG.js → logs-UXFXVYCP.js} +1 -1
  33. package/dist/orchestrator-KF4UY5GD.js +5 -0
  34. package/dist/{orchestrator-FGGXK3N3.js.map → orchestrator-KF4UY5GD.js.map} +1 -1
  35. package/dist/{orchestrator-R7IWZUT6.js → orchestrator-MFL3XK5L.js} +4 -4
  36. package/dist/shell-F42UUF3U.js +2 -0
  37. package/dist/{shell-IH2MMTVP.js → shell-UXJNTNBC.js} +7 -4
  38. package/dist/shell-UXJNTNBC.js.map +1 -0
  39. package/dist/{task-J6ZN7ALI.js → task-AP2TIOOF.js} +1 -1
  40. package/dist/{tui-LW7WIDE3.js → tui-PIQT4ZZ2.js} +1 -1
  41. package/dist/{workspace-manager-KOOYTO7E.js → workspace-manager-DYN3XJ7X.js} +1 -1
  42. package/dist/{workspace-manager-T6AXG7XL.js → workspace-manager-EVD67GCG.js} +4 -4
  43. package/dist/{workspace-manager-T6AXG7XL.js.map → workspace-manager-EVD67GCG.js.map} +1 -1
  44. package/package.json +1 -1
  45. package/readme.md +1 -1
  46. package/dist/App-YJM5QGP7.js +0 -19
  47. package/dist/chunk-2UC4SVJB.js.map +0 -1
  48. package/dist/chunk-GZ2Q56YZ.js +0 -2
  49. package/dist/chunk-IQXRQBUK.js +0 -83
  50. package/dist/chunk-IQXRQBUK.js.map +0 -1
  51. package/dist/chunk-L3FYR45M.js +0 -2
  52. package/dist/chunk-MGFMVPRD.js.map +0 -1
  53. package/dist/chunk-MNXU3KCD.js +0 -2
  54. package/dist/chunk-UW6GUUE6.js +0 -3
  55. package/dist/claude-E36EGXUV.js +0 -2
  56. package/dist/claude-RIB3RQS5.js.map +0 -1
  57. package/dist/codex-OTZKVESD.js +0 -2
  58. package/dist/codex-VBUSA2GJ.js.map +0 -1
  59. package/dist/container-OIXLFSX2.js +0 -6
  60. package/dist/cursor-3DJA6LWS.js +0 -2
  61. package/dist/cursor-4QIOTDBW.js.map +0 -1
  62. package/dist/orchestrator-FGGXK3N3.js +0 -5
  63. package/dist/shell-EOJBDWTH.js +0 -2
  64. package/dist/shell-IH2MMTVP.js.map +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/application/event-bus.ts","../src/application/task-service.ts","../src/application/agent-service.ts","../src/application/run-service.ts","../src/infrastructure/clipboard-service.ts","../src/infrastructure/storage/task-store.ts","../src/infrastructure/storage/agent-store.ts","../src/infrastructure/storage/run-store.ts","../src/domain/state.ts","../src/infrastructure/storage/state-store.ts","../src/domain/config.ts","../src/infrastructure/storage/config-store.ts","../src/domain/global-config.ts","../src/infrastructure/storage/global-config-store.ts","../src/infrastructure/storage/context-store.ts","../src/infrastructure/storage/message-store.ts","../src/domain/goal.ts","../src/infrastructure/storage/goal-store.ts","../src/infrastructure/storage/team-store.ts","../src/domain/message.ts","../src/application/message-service.ts","../src/application/goal-service.ts","../src/domain/team.ts","../src/application/team-service.ts","../src/container.ts"],"names":["nanoid","execFileCb","fs","path","isExpired","AdapterRegistry","Orchestrator"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Typed event bus.\n *\n * The single communication channel between all layers.\n * Synchronous emit — handlers run inline.\n * TUI, logger, run store, state all subscribe independently.\n */\n\nimport type {\n OrchestratorEvent,\n OrchestratorEventType,\n EventPayload,\n} from '../domain/events.js';\n\ntype Handler<T> = (event: T) => void;\n\nexport class EventBus {\n private handlers = new Map<string, Set<Handler<any>>>();\n private wildcardHandlers = new Set<Handler<OrchestratorEvent>>();\n private maxListeners: number = 10;\n private warnedTypes = new Set<string>();\n\n /**\n * Set the maximum number of listeners per event type before a warning is emitted.\n * Helps detect memory leaks from repeated subscriptions in watch mode.\n */\n setMaxListeners(n: number): void {\n this.maxListeners = n;\n }\n\n getMaxListeners(): number {\n return this.maxListeners;\n }\n\n /**\n * Get the number of listeners for a specific event type.\n */\n listenerCount(type: OrchestratorEventType): number {\n return this.handlers.get(type)?.size ?? 0;\n }\n\n /**\n * Subscribe to events of a specific type.\n * Returns an unsubscribe function.\n */\n on<T extends OrchestratorEventType>(\n type: T,\n handler: Handler<EventPayload<T>>,\n ): () => void {\n if (!this.handlers.has(type)) {\n this.handlers.set(type, new Set());\n }\n const set = this.handlers.get(type)!;\n set.add(handler);\n\n // Warn once per type when listener count exceeds maxListeners\n if (this.maxListeners > 0 && set.size > this.maxListeners && !this.warnedTypes.has(type)) {\n this.warnedTypes.add(type);\n console.warn(\n `EventBus: possible memory leak detected. ${set.size} listeners added for \"${type}\". ` +\n `Use setMaxListeners() to increase limit if this is intentional.`,\n );\n }\n\n return () => this.off(type, handler);\n }\n\n /**\n * Subscribe to an event type, auto-unsubscribe after first call.\n */\n once<T extends OrchestratorEventType>(\n type: T,\n handler: Handler<EventPayload<T>>,\n ): () => void {\n const wrapper: Handler<EventPayload<T>> = (event) => {\n this.off(type, wrapper);\n handler(event);\n };\n return this.on(type, wrapper);\n }\n\n /**\n * Unsubscribe a handler from an event type.\n */\n off<T extends OrchestratorEventType>(\n type: T,\n handler: Handler<EventPayload<T>>,\n ): void {\n this.handlers.get(type)?.delete(handler);\n }\n\n /**\n * Emit an event synchronously to all subscribed handlers.\n */\n emit(event: OrchestratorEvent): void {\n const typed = this.handlers.get(event.type);\n if (typed) this.dispatchToSet(typed, event, 'handler');\n this.dispatchToSet(this.wildcardHandlers, event, 'wildcard handler');\n }\n\n private dispatchToSet(handlers: Iterable<Handler<any>>, event: OrchestratorEvent, label: string): void {\n for (const handler of handlers) {\n try {\n handler(event);\n } catch (err) {\n console.error(`EventBus ${label} error for \"${event.type}\":`, err);\n }\n }\n }\n\n /**\n * Subscribe to ALL events regardless of type.\n */\n onAny(handler: Handler<OrchestratorEvent>): () => void {\n this.wildcardHandlers.add(handler);\n\n if (\n this.maxListeners > 0 &&\n this.wildcardHandlers.size > this.maxListeners &&\n !this.warnedTypes.has('*')\n ) {\n this.warnedTypes.add('*');\n console.warn(\n `EventBus: possible memory leak detected. ${this.wildcardHandlers.size} wildcard listeners added. ` +\n `Use setMaxListeners() to increase limit if this is intentional.`,\n );\n }\n\n return () => { this.wildcardHandlers.delete(handler); };\n }\n\n /**\n * Remove all handlers.\n */\n clear(): void {\n this.handlers.clear();\n this.wildcardHandlers.clear();\n this.warnedTypes.clear();\n }\n}\n","/**\n * Task service — business logic for task lifecycle.\n *\n * Validates state transitions, emits events, manages CRUD.\n * CLI commands call this service, not storage directly.\n */\n\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { nanoid } from 'nanoid';\nimport type { Task, CreateTaskInput, TaskStatus } from '../domain/task.js';\nimport { canTransition, isTerminal } from '../domain/transitions.js';\nimport {\n TaskNotFoundError,\n InvalidTransitionError,\n InvalidArgumentsError,\n} from '../domain/errors.js';\nimport type { ITaskStore } from '../infrastructure/storage/interfaces.js';\nimport type { Paths } from '../infrastructure/storage/paths.js';\nimport type { OrchestratorConfig } from '../domain/config.js';\nimport type { EventBus } from './event-bus.js';\nimport { ensureDir } from '../infrastructure/storage/fs-utils.js';\n\nexport class TaskService {\n constructor(\n private readonly taskStore: ITaskStore,\n private readonly eventBus: EventBus,\n private readonly config: OrchestratorConfig,\n private readonly paths?: Paths,\n ) {}\n\n async create(input: CreateTaskInput): Promise<Task> {\n if (!input.title.trim()) {\n throw new InvalidArgumentsError('Task title is required');\n }\n\n const priority = input.priority ?? this.config.defaults.task.priority;\n if (!Number.isInteger(priority) || priority < 1 || priority > 4) {\n throw new InvalidArgumentsError('Priority must be an integer between 1 and 4');\n }\n\n if (input.depends_on?.length) {\n const results = await Promise.all(\n input.depends_on.map(async (depId) => ({ depId, exists: !!(await this.taskStore.get(depId)) })),\n );\n const missing = results.filter((r) => !r.exists).map((r) => r.depId);\n if (missing.length > 0) {\n throw new InvalidArgumentsError(\n `Unknown depends_on task ID(s): ${missing.join(', ')}`,\n );\n }\n }\n\n const now = new Date().toISOString();\n const task: Task = {\n id: `tsk_${nanoid(7)}`,\n title: input.title.trim(),\n description: input.description?.trim() ?? '',\n status: 'todo',\n priority,\n assignee: input.assignee,\n labels: input.labels ?? [],\n depends_on: input.depends_on ?? [],\n created_at: now,\n updated_at: now,\n attempts: 0,\n max_attempts: input.max_attempts ?? this.config.defaults.task.max_attempts,\n workspace_mode: input.workspace_mode,\n review_criteria: input.review_criteria,\n scope: input.scope,\n goalId: input.goalId,\n };\n\n if (input.attachments?.length && this.paths) {\n const attachmentNames = await this.copyAttachments(task.id, input.attachments);\n task.attachments = attachmentNames;\n }\n\n await this.taskStore.save(task);\n this.eventBus.emit({ type: 'task:created', task });\n\n return task;\n }\n\n async list(filter?: { status?: TaskStatus; goalId?: string }): Promise<Task[]> {\n return this.taskStore.list(filter);\n }\n\n async get(id: string): Promise<Task> {\n const task = await this.taskStore.get(id);\n if (!task) throw new TaskNotFoundError(id);\n return task;\n }\n\n async updateStatus(id: string, newStatus: TaskStatus): Promise<Task> {\n const task = await this.get(id);\n const oldStatus = task.status;\n\n if (!canTransition(oldStatus, newStatus)) {\n throw new InvalidTransitionError(id, oldStatus, newStatus);\n }\n\n task.status = newStatus;\n task.updated_at = new Date().toISOString();\n await this.taskStore.save(task);\n\n this.eventBus.emit({\n type: 'task:status_changed',\n taskId: id,\n from: oldStatus,\n to: newStatus,\n });\n\n return task;\n }\n\n async assign(taskId: string, agentId: string): Promise<Task> {\n const task = await this.get(taskId);\n task.assignee = agentId;\n task.updated_at = new Date().toISOString();\n await this.taskStore.save(task);\n\n this.eventBus.emit({\n type: 'task:assigned',\n taskId,\n agentId,\n });\n\n return task;\n }\n\n async cancel(id: string): Promise<Task> {\n const task = await this.get(id);\n\n if (isTerminal(task.status)) {\n throw new InvalidTransitionError(id, task.status, 'cancelled');\n }\n\n return this.updateStatus(id, 'cancelled');\n }\n\n async retry(id: string): Promise<Task> {\n const task = await this.get(id);\n\n if (task.status !== 'failed' && task.status !== 'cancelled') {\n throw new InvalidTransitionError(id, task.status, 'todo');\n }\n\n const oldStatus = task.status;\n task.status = 'todo';\n task.attempts = 0;\n task.updated_at = new Date().toISOString();\n await this.taskStore.save(task);\n\n this.eventBus.emit({\n type: 'task:status_changed',\n taskId: id,\n from: oldStatus,\n to: 'todo',\n });\n\n return task;\n }\n\n async reject(id: string, feedback?: string): Promise<Task> {\n const task = await this.get(id);\n\n if (task.status !== 'review') {\n throw new InvalidTransitionError(id, task.status, 'todo');\n }\n\n const oldStatus = task.status;\n task.status = 'todo';\n task.attempts = 0;\n task.feedback = feedback;\n task.updated_at = new Date().toISOString();\n await this.taskStore.save(task);\n\n this.eventBus.emit({\n type: 'task:status_changed',\n taskId: id,\n from: oldStatus,\n to: 'todo',\n });\n\n return task;\n }\n\n async update(id: string, fields: { title?: string; description?: string; priority?: number; labels?: string[]; attachments?: string[] }): Promise<Task> {\n const task = await this.get(id);\n\n if (fields.title !== undefined) {\n if (!fields.title.trim()) throw new InvalidArgumentsError('Task title cannot be empty');\n task.title = fields.title.trim();\n }\n if (fields.description !== undefined) task.description = fields.description.trim();\n if (fields.priority !== undefined) {\n if (!Number.isInteger(fields.priority) || fields.priority < 1 || fields.priority > 4) {\n throw new InvalidArgumentsError('Priority must be an integer between 1 and 4');\n }\n task.priority = fields.priority;\n }\n if (fields.labels !== undefined) task.labels = fields.labels;\n if (fields.attachments?.length && this.paths) {\n const attachmentNames = await this.copyAttachments(id, fields.attachments);\n task.attachments = [...(task.attachments ?? []), ...attachmentNames];\n }\n\n task.updated_at = new Date().toISOString();\n await this.taskStore.save(task);\n return task;\n }\n\n async delete(id: string): Promise<void> {\n const task = await this.get(id);\n if (task.status === 'in_progress') {\n throw new InvalidArgumentsError('Cannot delete a running task. Cancel it first.');\n }\n await this.taskStore.delete(id);\n\n if (this.paths) {\n const dir = this.paths.taskAttachmentsDir(id);\n await fs.rm(dir, { recursive: true, force: true });\n }\n }\n\n getAttachmentPath(taskId: string, filename: string): string {\n if (!this.paths) {\n throw new InvalidArgumentsError('Paths not configured');\n }\n return path.join(this.paths.taskAttachmentsDir(taskId), filename);\n }\n\n private async copyAttachments(taskId: string, sourcePaths: string[]): Promise<string[]> {\n if (!this.paths) return [];\n\n const dir = this.paths.taskAttachmentsDir(taskId);\n await ensureDir(dir);\n\n // Validate all files exist first\n await Promise.all(\n sourcePaths.map(async (srcPath) => {\n try {\n await fs.access(srcPath);\n } catch {\n throw new InvalidArgumentsError(`Attachment file not found: ${srcPath}`);\n }\n }),\n );\n\n // Copy all files in parallel\n const names = await Promise.all(\n sourcePaths.map(async (srcPath) => {\n const basename = path.basename(srcPath);\n await fs.copyFile(srcPath, path.join(dir, basename));\n return basename;\n }),\n );\n\n return names;\n }\n\n async incrementAttempts(id: string): Promise<Task> {\n const task = await this.get(id);\n task.attempts += 1;\n task.updated_at = new Date().toISOString();\n await this.taskStore.save(task);\n return task;\n }\n}\n","/**\n * Agent service — business logic for agent lifecycle.\n *\n * Manages agent CRUD, availability, and task assignment matching.\n */\n\nimport { nanoid } from 'nanoid';\nimport type { Agent, CreateAgentInput, AgentStatus } from '../domain/agent.js';\nimport type { Task } from '../domain/task.js';\nimport { AgentNotFoundError, InvalidArgumentsError } from '../domain/errors.js';\nimport type { IAgentStore, IStateStore } from '../infrastructure/storage/interfaces.js';\nimport type { OrchestratorConfig } from '../domain/config.js';\nimport type { EventBus } from './event-bus.js';\n\nexport class AgentService {\n constructor(\n private readonly agentStore: IAgentStore,\n private readonly stateStore: IStateStore,\n private readonly eventBus: EventBus,\n private readonly config: OrchestratorConfig,\n ) {}\n\n async create(input: CreateAgentInput): Promise<Agent> {\n if (!input.name.trim()) {\n throw new InvalidArgumentsError('Agent name is required');\n }\n\n // Check for duplicate name\n const existing = await this.agentStore.getByName(input.name);\n if (existing) {\n throw new InvalidArgumentsError(`Agent \"${input.name}\" already exists`);\n }\n\n const agent: Agent = {\n id: `agt_${nanoid(7)}`,\n name: input.name.trim(),\n adapter: input.adapter || this.config.defaults.agent.adapter,\n role: input.role,\n config: {\n command: input.command,\n model: input.model,\n approval_policy: input.approval_policy ?? this.config.defaults.agent.approval_policy,\n max_turns: input.max_turns ?? this.config.defaults.agent.max_turns,\n timeout_ms: input.timeout_ms ?? this.config.defaults.agent.timeout_ms,\n stall_timeout_ms: input.stall_timeout_ms ?? this.config.defaults.agent.stall_timeout_ms,\n env: input.env,\n system_prompt: input.system_prompt,\n workspace_mode: input.workspace_mode,\n skills: input.skills,\n },\n status: 'idle',\n stats: {\n tasks_completed: 0,\n tasks_failed: 0,\n total_runs: 0,\n total_runtime_ms: 0,\n },\n };\n\n await this.agentStore.save(agent);\n return agent;\n }\n\n async list(): Promise<Agent[]> {\n return this.agentStore.list();\n }\n\n async get(id: string): Promise<Agent> {\n const agent = await this.agentStore.get(id);\n if (!agent) throw new AgentNotFoundError(id);\n return agent;\n }\n\n async remove(id: string): Promise<void> {\n const agent = await this.get(id);\n if (agent.status === 'running') {\n // Check if actually running (has entry in state.running)\n const state = await this.stateStore.read();\n const isActuallyRunning = Object.values(state.running).some((e) => e.agent_id === id);\n if (isActuallyRunning) {\n throw new InvalidArgumentsError('Cannot remove a running agent. Stop it first.');\n }\n // Agent stuck in 'running' with no active run — reset and allow delete\n agent.status = 'idle';\n await this.agentStore.save(agent);\n }\n await this.agentStore.delete(id);\n }\n\n async update(id: string, fields: { name?: string; role?: string; model?: string; approval_policy?: Agent['config']['approval_policy'] }): Promise<Agent> {\n const agent = await this.get(id);\n\n if (fields.name !== undefined) {\n if (!fields.name.trim()) throw new InvalidArgumentsError('Agent name cannot be empty');\n // Check for duplicate name (excluding self)\n const existing = await this.agentStore.getByName(fields.name.trim());\n if (existing && existing.id !== id) {\n throw new InvalidArgumentsError(`Agent \"${fields.name}\" already exists`);\n }\n agent.name = fields.name.trim();\n }\n if (fields.role !== undefined) agent.role = fields.role || undefined;\n if (fields.model !== undefined) agent.config.model = fields.model || undefined;\n if (fields.approval_policy !== undefined) agent.config.approval_policy = fields.approval_policy;\n\n await this.agentStore.save(agent);\n return agent;\n }\n\n async disable(id: string): Promise<Agent> {\n return this.setStatus(id, 'disabled');\n }\n\n async enable(id: string): Promise<Agent> {\n return this.setStatus(id, 'idle');\n }\n\n async setAutonomous(id: string, enabled: boolean): Promise<Agent> {\n const agent = await this.get(id);\n agent.autonomous = enabled;\n await this.agentStore.save(agent);\n this.eventBus.emit({ type: 'agent:autonomous_toggled', agentId: id, autonomous: enabled });\n return agent;\n }\n\n async setStatus(id: string, status: AgentStatus): Promise<Agent> {\n const agent = await this.get(id);\n agent.status = status;\n await this.agentStore.save(agent);\n return agent;\n }\n\n async updateStats(\n id: string,\n update: Partial<Agent['stats']>,\n ): Promise<Agent> {\n const agent = await this.get(id);\n Object.assign(agent.stats, update);\n await this.agentStore.save(agent);\n return agent;\n }\n\n /**\n * Find the best available agent for a task using scoring.\n *\n * Scoring:\n * - Explicit assignee match = 100\n * - Skill match with task labels = 50 per match\n * - Role match with task labels = 30\n * - Idle status bonus = 20\n * - Success rate bonus = 0–10 (scaled by completed / total)\n */\n async findBestAgent(task: Task): Promise<Agent | null> {\n const agents = await this.agentStore.list();\n const available = agents.filter(\n (a) => a.status === 'idle',\n );\n\n if (available.length === 0) return null;\n\n // Explicit assignee — hard constraint\n if (task.assignee) {\n const assigned = agents.find((a) => a.id === task.assignee);\n if (assigned && assigned.status === 'idle') return assigned;\n return null;\n }\n\n // Pre-compute lowercase task labels once\n const lowerLabels = task.labels?.length\n ? task.labels.map((l) => l.toLowerCase())\n : undefined;\n\n // Score each available agent\n const scored = available.map((agent) => {\n let score = 0;\n\n // Skill match with task labels: 50 per matching skill\n if (lowerLabels && agent.config.skills?.length) {\n const skillSet = new Set(agent.config.skills.map((s) => s.toLowerCase()));\n for (const label of lowerLabels) {\n if (skillSet.has(label)) {\n score += 50;\n }\n }\n }\n\n // Role match with task labels: 30\n if (lowerLabels && agent.role) {\n const lowerRole = agent.role.toLowerCase();\n if (lowerLabels.some((l) => lowerRole.includes(l))) {\n score += 30;\n }\n }\n\n // Idle bonus\n if (agent.status === 'idle') {\n score += 20;\n }\n\n // Success rate bonus: 0–10\n const totalTasks = agent.stats.tasks_completed + agent.stats.tasks_failed;\n if (totalTasks > 0) {\n score += Math.round((agent.stats.tasks_completed / totalTasks) * 10);\n }\n\n return { agent, score };\n });\n\n // Sort descending by score\n scored.sort((a, b) => b.score - a.score);\n\n return scored[0]?.agent ?? null;\n }\n}\n","/**\n * Run service — manages run lifecycle and event streaming.\n */\n\nimport { nanoid } from 'nanoid';\nimport type { Run, RunEvent, RunStatus, TokenUsage } from '../domain/run.js';\nimport type { IRunStore } from '../infrastructure/storage/interfaces.js';\nimport type { EventBus } from './event-bus.js';\n\nexport class RunService {\n constructor(\n private readonly runStore: IRunStore,\n private readonly eventBus: EventBus,\n ) {}\n\n async create(params: {\n taskId: string;\n agentId: string;\n attempt: number;\n prompt: string;\n workspacePath: string;\n }): Promise<Run> {\n const run: Run = {\n id: `run_${nanoid(7)}`,\n task_id: params.taskId,\n agent_id: params.agentId,\n attempt: params.attempt,\n status: 'preparing',\n started_at: new Date().toISOString(),\n workspace_path: params.workspacePath,\n prompt: params.prompt,\n };\n\n await this.runStore.save(run);\n return run;\n }\n\n async get(id: string): Promise<Run | null> {\n return this.runStore.get(id);\n }\n\n async start(id: string, pid: number): Promise<Run> {\n const run = await this.runStore.get(id);\n if (!run) throw new Error(`Run not found: ${id}`);\n\n run.status = 'running';\n run.pid = pid;\n await this.runStore.save(run);\n\n this.eventBus.emit({\n type: 'agent:started',\n agentId: run.agent_id,\n taskId: run.task_id,\n runId: id,\n });\n\n return run;\n }\n\n async finish(\n id: string,\n status: RunStatus,\n tokens?: TokenUsage,\n error?: string,\n ): Promise<Run> {\n const run = await this.runStore.get(id);\n if (!run) throw new Error(`Run not found: ${id}`);\n\n run.status = status;\n run.finished_at = new Date().toISOString();\n run.tokens = tokens;\n run.error = error;\n await this.runStore.save(run);\n\n this.eventBus.emit({\n type: 'agent:completed',\n runId: id,\n agentId: run.agent_id,\n success: status === 'succeeded',\n });\n\n return run;\n }\n\n async appendEvent(runId: string, event: RunEvent): Promise<void> {\n await this.runStore.appendEvent(runId, event);\n }\n\n async listAll(): Promise<Run[]> {\n return this.runStore.listAll();\n }\n\n async listForTask(taskId: string): Promise<Run[]> {\n return this.runStore.listForTask(taskId);\n }\n\n async listForAgent(agentId: string): Promise<Run[]> {\n return this.runStore.listForAgent(agentId);\n }\n\n async readEvents(runId: string): Promise<RunEvent[]> {\n return this.runStore.readEvents(runId);\n }\n\n async readEventsTail(runId: string, count: number): Promise<RunEvent[]> {\n return this.runStore.readEventsTail(runId, count);\n }\n\n /**\n * Get error and last N lines of output from the most recent failed run for a task.\n * Used to provide retry context so agents can learn from previous failures.\n */\n async getLastFailedRunContext(\n taskId: string,\n maxOutputLines = 50,\n ): Promise<{ error: string; output: string } | null> {\n const runs = await this.runStore.listForTask(taskId);\n const failedRun = runs\n .filter((r) => r.status === 'failed')\n .sort((a, b) => (b.finished_at ?? '').localeCompare(a.finished_at ?? ''))\n [0];\n\n if (!failedRun) return null;\n\n const error = failedRun.error ?? 'Unknown error';\n\n // Read events and extract last N output lines\n let output = '';\n try {\n // Read only tail of events to avoid loading multi-MB JSONL files\n const events = await this.runStore.readEventsTail(failedRun.id, maxOutputLines * 2);\n const outputLines = events\n .filter((e) => e.type === 'agent_output' || e.type === 'error')\n .map((e) => (typeof e.data === 'string' ? e.data : JSON.stringify(e.data)))\n .join('\\n')\n .split('\\n');\n\n output = outputLines.slice(-maxOutputLines).join('\\n');\n } catch {\n // Events file may not exist — that's fine\n }\n\n return { error, output };\n }\n}\n","/**\n * Clipboard service for detecting and extracting images from the system clipboard.\n *\n * Platform support:\n * - macOS: osascript (clipboard info / clipboard as PNGf)\n * - Linux: xclip -selection clipboard\n * - Windows: PowerShell Get-Clipboard\n */\n\nimport { execFile as execFileCb, execFileSync } from 'node:child_process';\nimport { promisify } from 'node:util';\nimport { writeFile, readFile, unlink, mkdtemp, rm } from 'node:fs/promises';\nimport { tmpdir } from 'node:os';\nimport { join } from 'node:path';\nimport { OrchestryError } from '../domain/errors.js';\n\nconst execFile = promisify(execFileCb);\n\nconst EXEC_TIMEOUT_MS = 3_000;\n\nexport type ClipboardContentType = 'image' | 'text' | 'empty';\n\nexport interface ClipboardImage {\n data: Buffer;\n ext: string;\n}\n\n/**\n * Checks whether the required clipboard tool is available on this platform.\n *\n * - macOS: pbpaste (always present)\n * - Linux: xclip\n * - Windows: PowerShell (always present)\n */\nexport function isClipboardToolAvailable(): boolean {\n const platform = process.platform;\n\n if (platform === 'darwin') {\n // pbpaste/osascript are always available on macOS\n return true;\n }\n\n if (platform === 'linux') {\n try {\n execFileSync('which', ['xclip'], { timeout: EXEC_TIMEOUT_MS, stdio: 'ignore' });\n return true;\n } catch {\n return false;\n }\n }\n\n if (platform === 'win32') {\n // PowerShell is always available on modern Windows\n return true;\n }\n\n return false;\n}\n\n/**\n * Detects the type of content currently in the system clipboard.\n *\n * Returns 'image' if the clipboard contains an image (PNG or TIFF),\n * 'text' if it contains text, or 'empty' if the clipboard is empty.\n */\nexport async function detectClipboardType(): Promise<ClipboardContentType> {\n const platform = process.platform;\n\n if (platform === 'darwin') {\n return detectMacOS();\n }\n\n if (platform === 'linux') {\n return detectLinux();\n }\n\n if (platform === 'win32') {\n return detectWindows();\n }\n\n throw new OrchestryError(\n `Unsupported platform for clipboard: ${platform}`,\n 1,\n 'Supported: macOS, Linux, Windows',\n );\n}\n\n/**\n * Extracts an image from the system clipboard.\n *\n * Returns the image data as a Buffer with its file extension,\n * or null if the clipboard does not contain an image.\n */\nexport async function getClipboardImage(): Promise<ClipboardImage | null> {\n const type = await detectClipboardType();\n if (type !== 'image') return null;\n\n const platform = process.platform;\n\n if (platform === 'darwin') {\n return getImageMacOS();\n }\n\n if (platform === 'linux') {\n return getImageLinux();\n }\n\n if (platform === 'win32') {\n return getImageWindows();\n }\n\n return null;\n}\n\n// ─── macOS ────────────────────────────────────────────────────────────────────\n\nasync function detectMacOS(): Promise<ClipboardContentType> {\n try {\n const { stdout } = await execFile('osascript', ['-e', 'clipboard info'], {\n timeout: EXEC_TIMEOUT_MS,\n });\n\n if (stdout.includes('«class PNGf»') || stdout.includes('«class TIFF»')) {\n return 'image';\n }\n\n if (stdout.includes('«class ut16»') || stdout.includes('«class utf8»')) {\n return 'text';\n }\n\n // If clipboard info returned something but not text or image\n return stdout.trim().length > 0 ? 'text' : 'empty';\n } catch {\n return 'empty';\n }\n}\n\nasync function getImageMacOS(): Promise<ClipboardImage | null> {\n const dir = await mkdtemp(join(tmpdir(), 'orch-clip-'));\n const filePath = join(dir, 'clipboard.png');\n\n try {\n // AppleScript to write clipboard image (as PNG) to a temp file\n const script = `\n set theFile to POSIX file \"${filePath}\"\n try\n set imgData to the clipboard as «class PNGf»\n set fRef to open for access theFile with write permission\n write imgData to fRef\n close access fRef\n return \"ok\"\n on error\n try\n close access theFile\n end try\n return \"error\"\n end try\n `;\n\n const { stdout } = await execFile('osascript', ['-e', script], {\n timeout: EXEC_TIMEOUT_MS,\n });\n\n if (stdout.trim() !== 'ok') return null;\n\n const data = await readFile(filePath);\n return { data, ext: 'png' };\n } catch {\n return null;\n } finally {\n // Cleanup temp file\n try {\n await unlink(filePath);\n } catch {\n // Ignore cleanup errors\n }\n try {\n await rm(dir, { recursive: true });\n } catch {\n // Ignore cleanup errors\n }\n }\n}\n\n// ─── Linux ────────────────────────────────────────────────────────────────────\n\nasync function detectLinux(): Promise<ClipboardContentType> {\n try {\n const { stdout } = await execFile(\n 'xclip',\n ['-selection', 'clipboard', '-t', 'TARGETS', '-o'],\n { timeout: EXEC_TIMEOUT_MS },\n );\n\n const targets = stdout.toLowerCase();\n\n if (targets.includes('image/png') || targets.includes('image/tiff') || targets.includes('image/jpeg')) {\n return 'image';\n }\n\n if (targets.includes('text/plain') || targets.includes('utf8_string') || targets.includes('string')) {\n return 'text';\n }\n\n return targets.trim().length > 0 ? 'text' : 'empty';\n } catch {\n return 'empty';\n }\n}\n\nasync function getImageLinux(): Promise<ClipboardImage | null> {\n try {\n const { stdout } = await execFile(\n 'xclip',\n ['-selection', 'clipboard', '-t', 'image/png', '-o'],\n { timeout: EXEC_TIMEOUT_MS, encoding: 'buffer' as unknown as BufferEncoding, maxBuffer: 50 * 1024 * 1024 },\n );\n\n // stdout is a Buffer when encoding is 'buffer'\n const data = Buffer.isBuffer(stdout) ? stdout : Buffer.from(stdout, 'binary');\n if (data.length === 0) return null;\n\n return { data, ext: 'png' };\n } catch {\n return null;\n }\n}\n\n// ─── Windows ──────────────────────────────────────────────────────────────────\n\nasync function detectWindows(): Promise<ClipboardContentType> {\n try {\n // Check for image first\n const { stdout: imgCheck } = await execFile(\n 'powershell',\n ['-NoProfile', '-Command', 'if (Get-Clipboard -Format Image) { \"image\" } else { \"none\" }'],\n { timeout: EXEC_TIMEOUT_MS },\n );\n\n if (imgCheck.trim() === 'image') return 'image';\n\n // Check for text\n const { stdout: textCheck } = await execFile(\n 'powershell',\n ['-NoProfile', '-Command', 'if (Get-Clipboard) { \"text\" } else { \"empty\" }'],\n { timeout: EXEC_TIMEOUT_MS },\n );\n\n return textCheck.trim() === 'text' ? 'text' : 'empty';\n } catch {\n return 'empty';\n }\n}\n\nasync function getImageWindows(): Promise<ClipboardImage | null> {\n const dir = await mkdtemp(join(tmpdir(), 'orch-clip-'));\n const filePath = join(dir, 'clipboard.png');\n\n try {\n const script = `\n Add-Type -AssemblyName System.Windows.Forms\n $img = [System.Windows.Forms.Clipboard]::GetImage()\n if ($img) {\n $img.Save('${filePath.replace(/\\\\/g, '\\\\\\\\')}', [System.Drawing.Imaging.ImageFormat]::Png)\n Write-Output 'ok'\n } else {\n Write-Output 'error'\n }\n `;\n\n const { stdout } = await execFile('powershell', ['-NoProfile', '-Command', script], {\n timeout: EXEC_TIMEOUT_MS,\n });\n\n if (stdout.trim() !== 'ok') return null;\n\n const data = await readFile(filePath);\n return { data, ext: 'png' };\n } catch {\n return null;\n } finally {\n try {\n await unlink(filePath);\n } catch {\n // Ignore cleanup errors\n }\n try {\n await rm(dir, { recursive: true });\n } catch {\n // Ignore cleanup errors\n }\n }\n}\n","/**\n * File-based task store.\n *\n * Tasks are stored as individual YAML files in .orchestry/tasks/.\n * All writes are atomic (temp → rename).\n */\n\nimport type { Task, TaskStatus } from '../../domain/task.js';\nimport type { ITaskStore } from './interfaces.js';\nimport type { Paths } from './paths.js';\nimport { listFiles, readYaml, writeYaml, ensureDir } from './fs-utils.js';\nimport fs from 'node:fs/promises';\n\nexport class TaskStore implements ITaskStore {\n constructor(private readonly paths: Paths) {}\n\n async list(filter?: { status?: TaskStatus; goalId?: string }): Promise<Task[]> {\n await ensureDir(this.paths.tasksDir);\n const files = await listFiles(this.paths.tasksDir, '.yml');\n\n const tasksResults = await Promise.all(\n files.map(file => {\n const id = file.replace('.yml', '');\n return readYaml<Task>(this.paths.taskPath(id));\n })\n );\n\n const tasks = tasksResults.filter(\n (task): task is Task => task !== null\n && (!filter?.status || task.status === filter.status)\n && (!filter?.goalId || task.goalId === filter.goalId)\n );\n\n return tasks.sort((a, b) => {\n const statusOrder = statusPriority(a.status) - statusPriority(b.status);\n if (statusOrder !== 0) return statusOrder;\n const bTime = b.updated_at ?? '';\n const aTime = a.updated_at ?? '';\n return bTime < aTime ? -1 : bTime > aTime ? 1 : 0;\n });\n }\n\n async get(id: string): Promise<Task | null> {\n return readYaml<Task>(this.paths.taskPath(id));\n }\n\n async save(task: Task): Promise<void> {\n await ensureDir(this.paths.tasksDir);\n await writeYaml(this.paths.taskPath(task.id), task);\n }\n\n async delete(id: string): Promise<void> {\n try {\n await fs.unlink(this.paths.taskPath(id));\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') throw err;\n }\n }\n}\n\nfunction statusPriority(status: TaskStatus): number {\n const order: Record<TaskStatus, number> = {\n in_progress: 0,\n retrying: 1,\n review: 2,\n todo: 3,\n done: 4,\n failed: 5,\n cancelled: 6,\n };\n return order[status];\n}\n","/**\n * File-based agent store.\n *\n * Agents are stored as individual YAML files in .orchestry/agents/.\n * All writes are atomic (temp → rename).\n */\n\nimport type { Agent } from '../../domain/agent.js';\nimport type { IAgentStore } from './interfaces.js';\nimport type { Paths } from './paths.js';\nimport { listFiles, readYaml, writeYaml, ensureDir } from './fs-utils.js';\nimport fs from 'node:fs/promises';\n\nexport class AgentStore implements IAgentStore {\n constructor(private readonly paths: Paths) {}\n\n async list(): Promise<Agent[]> {\n await ensureDir(this.paths.agentsDir);\n const files = await listFiles(this.paths.agentsDir, '.yml');\n\n const results = await Promise.all(\n files.map(file => {\n const id = file.replace('.yml', '');\n return readYaml<Agent>(this.paths.agentPath(id));\n })\n );\n\n return results.filter((agent): agent is Agent => agent !== null);\n }\n\n async get(id: string): Promise<Agent | null> {\n return readYaml<Agent>(this.paths.agentPath(id));\n }\n\n async getByName(name: string): Promise<Agent | null> {\n const agents = await this.list();\n return agents.find((a) => a.name === name) ?? null;\n }\n\n async save(agent: Agent): Promise<void> {\n await ensureDir(this.paths.agentsDir);\n await writeYaml(this.paths.agentPath(agent.id), agent);\n }\n\n async delete(id: string): Promise<void> {\n try {\n await fs.unlink(this.paths.agentPath(id));\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') throw err;\n }\n }\n}\n","/**\n * File-based run store.\n *\n * Run metadata: .orchestry/runs/<id>.json (atomic write)\n * Run events: .orchestry/runs/<id>.jsonl (append-only)\n */\n\nimport type { Run, RunEvent } from '../../domain/run.js';\nimport type { IRunStore } from './interfaces.js';\nimport type { Paths } from './paths.js';\nimport {\n readJson,\n writeJson,\n appendJsonl,\n readJsonl,\n readJsonlTail,\n ensureDir,\n listFiles,\n pathExists,\n} from './fs-utils.js';\nimport { createReadStream } from 'node:fs';\n\nexport class RunStore implements IRunStore {\n constructor(private readonly paths: Paths) {}\n\n async save(run: Run): Promise<void> {\n await ensureDir(this.paths.runsDir);\n await writeJson(this.paths.runPath(run.id), run);\n }\n\n async get(id: string): Promise<Run | null> {\n return readJson<Run>(this.paths.runPath(id));\n }\n\n async listAll(): Promise<Run[]> {\n return this.listFiltered(() => true);\n }\n\n async listForTask(taskId: string): Promise<Run[]> {\n return this.listFiltered((run) => run.task_id === taskId);\n }\n\n async listForAgent(agentId: string): Promise<Run[]> {\n return this.listFiltered((run) => run.agent_id === agentId);\n }\n\n async appendEvent(runId: string, event: RunEvent): Promise<void> {\n await ensureDir(this.paths.runsDir);\n await appendJsonl(this.paths.runEventsPath(runId), event);\n }\n\n async readEvents(runId: string): Promise<RunEvent[]> {\n return readJsonl<RunEvent>(this.paths.runEventsPath(runId));\n }\n\n /**\n * Read the last N events for a run without loading the entire JSONL file.\n */\n async readEventsTail(runId: string, count: number): Promise<RunEvent[]> {\n return readJsonlTail<RunEvent>(this.paths.runEventsPath(runId), count);\n }\n\n async *streamEvents(runId: string, signal?: AbortSignal): AsyncGenerator<RunEvent> {\n const filePath = this.paths.runEventsPath(runId);\n\n // Wait for file to exist (max 30s to avoid infinite polling)\n const deadline = Date.now() + 30_000;\n while (!signal?.aborted && Date.now() < deadline) {\n if (await pathExists(filePath)) break;\n await new Promise((r) => setTimeout(r, 100));\n }\n\n if (signal?.aborted || Date.now() >= deadline) return;\n\n const stream = createReadStream(filePath);\n\n const { readLines } = await import('../process/process-manager.js');\n\n try {\n for await (const line of readLines(stream)) {\n if (signal?.aborted) break;\n if (line.trim()) {\n try {\n yield JSON.parse(line) as RunEvent;\n } catch {\n process.stderr.write(`[RunStore] skipping corrupt JSONL line: ${line.slice(0, 200)}\\n`);\n }\n }\n }\n } finally {\n stream.destroy();\n }\n }\n\n private async listFiltered(predicate: (run: Run) => boolean): Promise<Run[]> {\n await ensureDir(this.paths.runsDir);\n const files = await listFiles(this.paths.runsDir, '.json');\n\n // Batch reads to avoid EMFILE (macOS default ulimit 256)\n const BATCH = 64;\n const all: Run[] = [];\n for (let i = 0; i < files.length; i += BATCH) {\n const batch = files.slice(i, i + BATCH);\n const results = await Promise.all(\n batch.map(file => {\n const id = file.endsWith('.json') ? file.slice(0, -5) : file;\n return readJson<Run>(this.paths.runPath(id));\n }),\n );\n for (const run of results) {\n if (run !== null && predicate(run)) all.push(run);\n }\n }\n\n return all.sort(\n (a, b) => new Date(b.started_at).getTime() - new Date(a.started_at).getTime(),\n );\n }\n}\n","/**\n * Orchestrator runtime state.\n *\n * Persisted in .orchestry/state.json.\n * Updated on every mutation. Not intended for git.\n */\n\nexport interface RunningEntry {\n run_id: string;\n agent_id: string;\n task_id: string;\n pid: number;\n started_at: string;\n last_event_at: string;\n}\n\nexport interface RetryEntry {\n task_id: string;\n attempt: number;\n due_at: string;\n error: string;\n}\n\nexport interface OrchestratorState {\n version: 1;\n pid?: number;\n started_at?: string;\n running: Record<string, RunningEntry>;\n claimed: Set<string>;\n retry_queue: RetryEntry[];\n stats: {\n total_runs: number;\n total_tasks_completed: number;\n total_tasks_failed: number;\n total_tokens: { input: number; output: number; total: number };\n total_runtime_ms: number;\n };\n}\n\nexport const DEFAULT_STATE: OrchestratorState = {\n version: 1,\n running: {},\n claimed: new Set<string>(),\n retry_queue: [],\n stats: {\n total_runs: 0,\n total_tasks_completed: 0,\n total_tasks_failed: 0,\n total_tokens: { input: 0, output: 0, total: 0 },\n total_runtime_ms: 0,\n },\n};\n","/**\n * File-based orchestrator state store.\n *\n * State is stored in .orchestry/state.json.\n * Updated atomically on every mutation.\n */\n\nimport { DEFAULT_STATE, type OrchestratorState } from '../../domain/state.js';\nimport type { IStateStore } from './interfaces.js';\nimport type { Paths } from './paths.js';\nimport { readJson, writeJson } from './fs-utils.js';\n\nexport class StateStore implements IStateStore {\n constructor(private readonly paths: Paths) {}\n\n async read(): Promise<OrchestratorState> {\n const raw = await readJson<Partial<OrchestratorState>>(this.paths.statePath);\n if (!raw) return structuredClone(DEFAULT_STATE);\n\n const defaults = structuredClone(DEFAULT_STATE);\n return {\n version: raw.version ?? defaults.version,\n pid: raw.pid,\n started_at: raw.started_at,\n running:\n raw.running && typeof raw.running === 'object' ? raw.running : defaults.running,\n claimed: Array.isArray(raw.claimed) ? new Set<string>(raw.claimed) : new Set<string>(defaults.claimed),\n retry_queue: Array.isArray(raw.retry_queue) ? raw.retry_queue : defaults.retry_queue,\n stats: {\n total_runs: raw.stats?.total_runs ?? defaults.stats.total_runs,\n total_tasks_completed:\n raw.stats?.total_tasks_completed ?? defaults.stats.total_tasks_completed,\n total_tasks_failed: raw.stats?.total_tasks_failed ?? defaults.stats.total_tasks_failed,\n total_tokens: raw.stats?.total_tokens ?? defaults.stats.total_tokens,\n total_runtime_ms: raw.stats?.total_runtime_ms ?? defaults.stats.total_runtime_ms,\n },\n };\n }\n\n async write(state: OrchestratorState): Promise<void> {\n const serializable = { ...state, claimed: Array.from(state.claimed) };\n await writeJson(this.paths.statePath, serializable);\n }\n}\n","/**\n * Configuration domain model.\n *\n * Represents the structure of .orchestry/config.yml\n */\n\nimport type { ApprovalPolicy } from './agent.js';\nimport type { WorkspaceMode } from './task.js';\n\nexport interface ProjectConfig {\n name: string;\n description?: string;\n}\n\nexport interface AgentDefaults {\n adapter: string;\n approval_policy: ApprovalPolicy;\n max_turns: number;\n timeout_ms: number;\n stall_timeout_ms: number;\n workspace_mode: WorkspaceMode;\n}\n\nexport interface TaskDefaults {\n max_attempts: number;\n priority: number;\n}\n\nexport interface SchedulingConfig {\n poll_interval_ms: number;\n max_concurrent_agents: number;\n retry_base_delay_ms: number;\n retry_max_delay_ms: number;\n}\n\nexport interface OrchestratorConfig {\n project: ProjectConfig;\n defaults: {\n agent: AgentDefaults;\n task: TaskDefaults;\n };\n scheduling: SchedulingConfig;\n prompt?: {\n template?: string;\n };\n}\n\nexport const DEFAULT_CONFIG: OrchestratorConfig = {\n project: {\n name: 'my-project',\n },\n defaults: {\n agent: {\n adapter: 'claude',\n approval_policy: 'auto',\n max_turns: 50,\n timeout_ms: 3_600_000,\n stall_timeout_ms: 300_000,\n workspace_mode: 'worktree',\n },\n task: {\n max_attempts: 3,\n priority: 3,\n },\n },\n scheduling: {\n poll_interval_ms: 10_000,\n max_concurrent_agents: 6,\n retry_base_delay_ms: 10_000,\n retry_max_delay_ms: 300_000,\n },\n};\n","/**\n * File-based config store.\n *\n * Reads/writes .orchestry/config.yml.\n * Supports dot-notation access for get/set.\n */\n\nimport { DEFAULT_CONFIG, type OrchestratorConfig } from '../../domain/config.js';\nimport type { IConfigStore } from './interfaces.js';\nimport type { Paths } from './paths.js';\nimport { readYaml, writeYaml } from './fs-utils.js';\n\nexport class ConfigStore implements IConfigStore {\n constructor(private readonly paths: Paths) {}\n\n async read(): Promise<OrchestratorConfig> {\n const config = await readYaml<Record<string, unknown>>(this.paths.configPath);\n return deepMerge(\n DEFAULT_CONFIG as unknown as Record<string, unknown>,\n config ?? {},\n ) as unknown as OrchestratorConfig;\n }\n\n async write(config: OrchestratorConfig): Promise<void> {\n await writeYaml(this.paths.configPath, config as unknown as Record<string, unknown>);\n }\n\n async get(keyPath: string): Promise<unknown> {\n const config = await this.read();\n return getByPath(config as unknown as Record<string, unknown>, keyPath);\n }\n\n async set(keyPath: string, value: unknown): Promise<void> {\n const config = await this.read();\n setByPath(config as unknown as Record<string, unknown>, keyPath, value);\n await this.write(config);\n }\n}\n\nfunction getByPath(obj: Record<string, unknown>, keyPath: string): unknown {\n const keys = keyPath.split('.');\n let current: unknown = obj;\n\n for (const key of keys) {\n if (current === null || current === undefined || typeof current !== 'object') {\n return undefined;\n }\n current = (current as Record<string, unknown>)[key];\n }\n\n return current;\n}\n\nfunction setByPath(obj: Record<string, unknown>, keyPath: string, value: unknown): void {\n const keys = keyPath.split('.');\n let current: Record<string, unknown> = obj;\n\n for (let i = 0; i < keys.length - 1; i++) {\n const key = keys[i]!;\n if (typeof current[key] !== 'object' || current[key] === null) {\n current[key] = {};\n }\n current = current[key] as Record<string, unknown>;\n }\n\n const lastKey = keys[keys.length - 1]!;\n current[lastKey] = value;\n}\n\nfunction deepMerge(target: Record<string, unknown>, source: Record<string, unknown>): Record<string, unknown> {\n const result = { ...target };\n\n for (const key of Object.keys(source)) {\n const sourceVal = source[key];\n const targetVal = result[key];\n\n if (\n sourceVal !== null &&\n sourceVal !== undefined &&\n typeof sourceVal === 'object' &&\n !Array.isArray(sourceVal) &&\n typeof targetVal === 'object' &&\n targetVal !== null &&\n !Array.isArray(targetVal)\n ) {\n result[key] = deepMerge(\n targetVal as Record<string, unknown>,\n sourceVal as Record<string, unknown>,\n );\n } else {\n result[key] = sourceVal;\n }\n }\n\n return result;\n}\n","/**\n * Global configuration — persists across projects.\n *\n * Stored at ~/.orchestry/global.yml\n */\n\n/** Activity feed filter preset name */\nexport type ActivityFilterPreset = 'all' | 'text' | 'tools' | 'errors' | 'events';\n\nexport interface TuiPreferences {\n activity_filter: ActivityFilterPreset;\n}\n\nexport interface GlobalConfig {\n tui: TuiPreferences;\n}\n\nexport const DEFAULT_GLOBAL_CONFIG: GlobalConfig = {\n tui: {\n activity_filter: 'all',\n },\n};\n","/**\n * Global config store — reads/writes ~/.orchestry/global.yml\n *\n * Persists across projects. Creates directory if needed.\n */\n\nimport path from 'node:path';\nimport { homedir } from 'node:os';\nimport { mkdir } from 'node:fs/promises';\nimport { DEFAULT_GLOBAL_CONFIG, type GlobalConfig } from '../../domain/global-config.js';\nimport { readYaml, writeYaml } from './fs-utils.js';\n\nconst GLOBAL_DIR = path.join(homedir(), '.orchestry');\nconst GLOBAL_CONFIG_PATH = path.join(GLOBAL_DIR, 'global.yml');\n\nexport class GlobalConfigStore {\n async read(): Promise<GlobalConfig> {\n const data = await readYaml<Record<string, unknown>>(GLOBAL_CONFIG_PATH);\n if (!data) return { ...DEFAULT_GLOBAL_CONFIG };\n return {\n tui: {\n activity_filter: (data.tui as Record<string, unknown>)?.activity_filter as GlobalConfig['tui']['activity_filter']\n ?? DEFAULT_GLOBAL_CONFIG.tui.activity_filter,\n },\n };\n }\n\n async write(config: GlobalConfig): Promise<void> {\n await mkdir(GLOBAL_DIR, { recursive: true });\n await writeYaml(GLOBAL_CONFIG_PATH, config as unknown as Record<string, unknown>);\n }\n\n async set<K extends keyof GlobalConfig['tui']>(key: K, value: GlobalConfig['tui'][K]): Promise<void> {\n const config = await this.read();\n config.tui[key] = value;\n await this.write(config);\n }\n}\n","/**\n * File-based shared context store.\n *\n * Entries are stored as individual JSON files in .orchestry/context/.\n * Supports optional TTL for automatic expiration.\n * All writes are atomic (temp → rename).\n */\n\nimport type { ContextEntry, IContextStore } from './interfaces.js';\nimport type { Paths } from './paths.js';\nimport { listFiles, readJson, writeJson, ensureDir } from './fs-utils.js';\nimport fs from 'node:fs/promises';\n\nexport class ContextStore implements IContextStore {\n constructor(private readonly paths: Paths) {}\n\n async get(key: string): Promise<ContextEntry | null> {\n const entry = await readJson<ContextEntry>(this.paths.contextPath(key));\n if (!entry) return null;\n\n if (isExpired(entry)) {\n await this.delete(key);\n return null;\n }\n\n return entry;\n }\n\n /** Max TTL: 30 days in milliseconds */\n private static readonly MAX_TTL_MS = 30 * 24 * 60 * 60 * 1000;\n\n async set(key: string, value: string, ttlMs?: number): Promise<void> {\n if (ttlMs !== undefined) {\n if (!Number.isFinite(ttlMs) || ttlMs <= 0 || ttlMs > ContextStore.MAX_TTL_MS) {\n throw new Error(`TTL must be a positive number up to ${ContextStore.MAX_TTL_MS}ms (30 days)`);\n }\n }\n\n await ensureDir(this.paths.contextDir);\n\n const now = new Date().toISOString();\n const existing = await readJson<ContextEntry>(this.paths.contextPath(key));\n\n const entry: ContextEntry = {\n key,\n value,\n created_at: existing?.created_at ?? now,\n updated_at: now,\n ttl_ms: ttlMs,\n expires_at: ttlMs ? new Date(Date.now() + ttlMs).toISOString() : undefined,\n };\n\n await writeJson(this.paths.contextPath(key), entry);\n }\n\n async delete(key: string): Promise<void> {\n try {\n await fs.unlink(this.paths.contextPath(key));\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') throw err;\n }\n }\n\n async list(): Promise<ContextEntry[]> {\n await ensureDir(this.paths.contextDir);\n const files = await listFiles(this.paths.contextDir, '.json');\n\n const results = await Promise.all(\n files.map(file => {\n const key = file.replace('.json', '');\n return readJson<ContextEntry>(this.paths.contextPath(key));\n }),\n );\n\n const entries: ContextEntry[] = [];\n for (const entry of results) {\n if (!entry) continue;\n if (isExpired(entry)) {\n await this.delete(entry.key);\n continue;\n }\n entries.push(entry);\n }\n\n return entries.sort((a, b) => a.key.localeCompare(b.key));\n }\n\n async getAll(): Promise<Record<string, string>> {\n const entries = await this.list();\n const result: Record<string, string> = {};\n for (const entry of entries) {\n result[entry.key] = entry.value;\n }\n return result;\n }\n}\n\nfunction isExpired(entry: ContextEntry): boolean {\n if (!entry.expires_at) return false;\n return new Date(entry.expires_at).getTime() < Date.now();\n}\n","/**\n * File-based message store.\n *\n * Each message is a JSON file in .orchestry/messages/.\n * All writes are atomic (temp → rename).\n */\n\nimport type { Message } from '../../domain/message.js';\nimport type { IMessageStore } from './interfaces.js';\nimport type { Paths } from './paths.js';\nimport { listFiles, readJson, writeJson, ensureDir } from './fs-utils.js';\nimport fs from 'node:fs/promises';\n\nexport class MessageStore implements IMessageStore {\n constructor(private readonly paths: Paths) {}\n\n async save(message: Message): Promise<void> {\n await ensureDir(this.paths.messagesDir);\n await writeJson(this.paths.messagePath(message.id), message);\n }\n\n async get(id: string): Promise<Message | null> {\n return readJson<Message>(this.paths.messagePath(id));\n }\n\n async list(): Promise<Message[]> {\n const files = await listFiles(this.paths.messagesDir, '.json');\n const results = await Promise.all(\n files.map((f) => readJson<Message>(this.paths.messagePath(f.replace('.json', '')))),\n );\n return results\n .filter((m): m is Message => m !== null)\n .sort((a, b) => a.created_at.localeCompare(b.created_at));\n }\n\n async listPending(agentId: string): Promise<Message[]> {\n const all = await this.list();\n const now = Date.now();\n return all.filter((m) => {\n if (m.status !== 'pending') return false;\n if (m.expires_at && new Date(m.expires_at).getTime() < now) return false;\n return m.to_agent_id === agentId;\n });\n }\n\n async markDelivered(id: string): Promise<void> {\n const msg = await this.get(id);\n if (!msg) return;\n msg.status = 'delivered';\n msg.delivered_at = new Date().toISOString();\n await writeJson(this.paths.messagePath(id), msg);\n }\n\n async delete(id: string): Promise<void> {\n try {\n await fs.unlink(this.paths.messagePath(id));\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') throw err;\n }\n }\n\n async purgeExpired(): Promise<number> {\n const all = await this.list();\n const now = Date.now();\n const toDelete = all.filter((m) => {\n const isExpired = m.expires_at && new Date(m.expires_at).getTime() < now;\n const isOldDelivered = m.delivered_at && now - new Date(m.delivered_at).getTime() > 3600_000;\n return isExpired || isOldDelivered;\n });\n await Promise.all(toDelete.map((m) => this.delete(m.id)));\n return toDelete.length;\n }\n}\n","/**\n * Goal domain model.\n *\n * A Goal is a persistent objective that drives autonomous agent work.\n * Goals have lower priority than tasks — agents work on goals only\n * when no regular tasks are available.\n *\n * State machine: active → achieved | abandoned\n * active ↔ paused\n */\n\nexport const GOAL_STATUSES = ['active', 'paused', 'achieved', 'abandoned'] as const;\nexport type GoalStatus = (typeof GOAL_STATUSES)[number];\n\n/** Terminal goal statuses — no further transitions possible. */\nexport const TERMINAL_GOAL_STATUSES: ReadonlySet<GoalStatus> = new Set(['achieved', 'abandoned']);\n\nexport function isGoalTerminal(status: GoalStatus): boolean {\n return TERMINAL_GOAL_STATUSES.has(status);\n}\n\n/** Canonical sort order for goal statuses. */\nexport const GOAL_STATUS_ORDER: Record<GoalStatus, number> = {\n active: 0,\n paused: 1,\n achieved: 2,\n abandoned: 3,\n};\n\nexport interface Goal {\n id: string;\n title: string;\n description: string;\n status: GoalStatus;\n assignee?: string;\n created_at: string;\n updated_at?: string;\n}\n\nexport interface CreateGoalInput {\n title: string;\n description?: string;\n assignee?: string;\n}\n","/**\n * File-based goal store.\n *\n * Goals are stored as individual YAML files in .orchestry/goals/.\n * All writes are atomic (temp → rename).\n */\n\nimport { GOAL_STATUS_ORDER, type Goal, type GoalStatus } from '../../domain/goal.js';\nimport type { IGoalStore } from './interfaces.js';\nimport type { Paths } from './paths.js';\nimport { listFiles, readYaml, writeYaml } from './fs-utils.js';\nimport fs from 'node:fs/promises';\n\nexport class GoalStore implements IGoalStore {\n constructor(private readonly paths: Paths) {}\n\n async list(filter?: { status?: GoalStatus }): Promise<Goal[]> {\n const files = await listFiles(this.paths.goalsDir, '.yml');\n\n const results = await Promise.all(\n files.map(file => {\n const id = file.replace('.yml', '');\n return readYaml<Goal>(this.paths.goalPath(id));\n })\n );\n\n const goals = results.filter(\n (goal): goal is Goal => goal !== null && (!filter?.status || goal.status === filter.status)\n );\n\n return goals.sort((a, b) => {\n const statusOrder = GOAL_STATUS_ORDER[a.status] - GOAL_STATUS_ORDER[b.status];\n if (statusOrder !== 0) return statusOrder;\n const bTime = b.updated_at ?? '';\n const aTime = a.updated_at ?? '';\n return bTime < aTime ? -1 : bTime > aTime ? 1 : 0;\n });\n }\n\n async get(id: string): Promise<Goal | null> {\n return readYaml<Goal>(this.paths.goalPath(id));\n }\n\n async save(goal: Goal): Promise<void> {\n await writeYaml(this.paths.goalPath(goal.id), goal);\n }\n\n async delete(id: string): Promise<void> {\n try {\n await fs.unlink(this.paths.goalPath(id));\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') throw err;\n }\n }\n}\n\n","/**\n * File-based team store.\n *\n * Teams stored as YAML files in .orchestry/teams/.\n */\n\nimport type { Team } from '../../domain/team.js';\nimport type { ITeamStore } from './interfaces.js';\nimport type { Paths } from './paths.js';\nimport { listFiles, readYaml, writeYaml, ensureDir } from './fs-utils.js';\nimport fs from 'node:fs/promises';\n\nexport class TeamStore implements ITeamStore {\n constructor(private readonly paths: Paths) {}\n\n async save(team: Team): Promise<void> {\n await ensureDir(this.paths.teamsDir);\n await writeYaml(this.paths.teamPath(team.id), team);\n }\n\n async get(id: string): Promise<Team | null> {\n return readYaml<Team>(this.paths.teamPath(id));\n }\n\n async getByName(name: string): Promise<Team | null> {\n const teams = await this.list();\n return teams.find((t) => t.name === name) ?? null;\n }\n\n async list(): Promise<Team[]> {\n await ensureDir(this.paths.teamsDir);\n const files = await listFiles(this.paths.teamsDir, '.yml');\n const results = await Promise.all(\n files.map((f) => readYaml<Team>(this.paths.teamPath(f.replace('.yml', '')))),\n );\n return results.filter((t): t is Team => t !== null);\n }\n\n async delete(id: string): Promise<void> {\n try {\n await fs.unlink(this.paths.teamPath(id));\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') throw err;\n }\n }\n}\n","/**\n * Message domain model.\n *\n * A Message is a unit of inter-agent communication.\n * Messages are stored as JSON files and injected into agent prompts at dispatch time.\n */\n\nexport type MessageChannel = 'direct' | 'broadcast' | 'lead';\n\nexport type MessageStatus = 'pending' | 'delivered' | 'expired';\n\nexport interface Message {\n id: string;\n channel: MessageChannel;\n from_agent_id: string;\n to_agent_id: string | null;\n subject: string;\n body: string;\n created_at: string;\n expires_at?: string;\n status: MessageStatus;\n delivered_at?: string;\n team_id?: string;\n reply_to?: string;\n}\n\nexport interface CreateMessageInput {\n channel: MessageChannel;\n from_agent_id: string;\n to_agent_id?: string;\n subject: string;\n body: string;\n ttl_ms?: number;\n team_id?: string;\n reply_to?: string;\n}\n\n/** Maximum TTL: 7 days */\nexport const MAX_MESSAGE_TTL_MS = 7 * 24 * 60 * 60 * 1000;\n\n/** Default TTL: 24 hours */\nexport const DEFAULT_MESSAGE_TTL_MS = 24 * 60 * 60 * 1000;\n","/**\n * MessageService — business logic for inter-agent messaging.\n *\n * Handles message creation, routing (direct/broadcast/lead),\n * delivery into agent prompts, and cleanup of expired messages.\n */\n\nimport { nanoid } from 'nanoid';\nimport type { Message, CreateMessageInput, MessageChannel } from '../domain/message.js';\nimport { DEFAULT_MESSAGE_TTL_MS, MAX_MESSAGE_TTL_MS } from '../domain/message.js';\nimport { InvalidArgumentsError } from '../domain/errors.js';\nimport type { IMessageStore, IAgentStore, ITeamStore } from '../infrastructure/storage/interfaces.js';\nimport type { EventBus } from './event-bus.js';\n\nexport class MessageService {\n constructor(\n private readonly messageStore: IMessageStore,\n private readonly agentStore: IAgentStore,\n private readonly teamStore: ITeamStore,\n private readonly eventBus: EventBus,\n ) {}\n\n /**\n * Send a message. For broadcast, creates one message per recipient agent.\n * For 'lead' channel, resolves team lead and sends direct.\n */\n async send(input: CreateMessageInput): Promise<Message[]> {\n if (!input.body.trim()) throw new InvalidArgumentsError('Message body is required');\n\n const ttlMs = input.ttl_ms ?? DEFAULT_MESSAGE_TTL_MS;\n if (ttlMs <= 0 || ttlMs > MAX_MESSAGE_TTL_MS) {\n throw new InvalidArgumentsError(`TTL must be between 1ms and ${MAX_MESSAGE_TTL_MS}ms`);\n }\n\n // Validate sender exists\n const sender = await this.agentStore.get(input.from_agent_id);\n if (!sender && input.from_agent_id !== 'cli') {\n throw new InvalidArgumentsError(`Sender agent not found: ${input.from_agent_id}`);\n }\n\n const now = new Date();\n const baseMessage = {\n channel: input.channel,\n from_agent_id: input.from_agent_id,\n subject: (input.subject || '(no subject)').slice(0, 200),\n body: input.body.slice(0, 4000),\n created_at: now.toISOString(),\n expires_at: new Date(now.getTime() + ttlMs).toISOString(),\n status: 'pending' as const,\n team_id: input.team_id,\n reply_to: input.reply_to,\n };\n\n const messages: Message[] = [];\n\n if (input.channel === 'broadcast') {\n // Fan-out: one message per agent (excluding sender)\n let agents = await this.agentStore.list();\n\n // If team_id specified, only broadcast to team members\n if (input.team_id) {\n const team = await this.teamStore.get(input.team_id);\n if (team) {\n const memberIds = new Set(team.members.map((m) => m.agent_id));\n agents = agents.filter((a) => memberIds.has(a.id));\n }\n }\n\n const recipients = agents.filter((a) => a.id !== input.from_agent_id && a.status !== 'disabled');\n const broadcastMsgs = recipients.map((agent) => ({\n ...baseMessage,\n id: `msg_${nanoid(7)}`,\n to_agent_id: agent.id,\n } as Message));\n await Promise.all(broadcastMsgs.map((msg) => this.messageStore.save(msg)));\n for (const msg of broadcastMsgs) {\n messages.push(msg);\n this.emitSent(msg);\n }\n } else if (input.channel === 'lead') {\n // Resolve team lead\n if (!input.team_id) throw new InvalidArgumentsError('team_id is required for lead channel');\n const team = await this.teamStore.get(input.team_id);\n if (!team) throw new InvalidArgumentsError(`Team not found: ${input.team_id}`);\n\n const msg: Message = {\n ...baseMessage,\n id: `msg_${nanoid(7)}`,\n to_agent_id: team.lead_agent_id,\n };\n await this.messageStore.save(msg);\n messages.push(msg);\n this.emitSent(msg);\n } else {\n // Direct message\n if (!input.to_agent_id) throw new InvalidArgumentsError('to_agent_id is required for direct messages');\n const recipient = await this.agentStore.get(input.to_agent_id);\n if (!recipient) throw new InvalidArgumentsError(`Recipient agent not found: ${input.to_agent_id}`);\n\n const msg: Message = {\n ...baseMessage,\n id: `msg_${nanoid(7)}`,\n to_agent_id: input.to_agent_id,\n };\n await this.messageStore.save(msg);\n messages.push(msg);\n this.emitSent(msg);\n }\n\n return messages;\n }\n\n /**\n * Drain mailbox: fetch pending messages for an agent and mark them delivered.\n * Called by the orchestrator during dispatchTask.\n */\n async drainMailbox(agentId: string, taskId: string): Promise<Message[]> {\n const pending = await this.messageStore.listPending(agentId);\n await Promise.all(pending.map((msg) => this.messageStore.markDelivered(msg.id)));\n for (const msg of pending) {\n this.eventBus.emit({\n type: 'message:delivered',\n messageId: msg.id,\n toAgentId: agentId,\n taskId,\n });\n }\n return pending;\n }\n\n async listAll(): Promise<Message[]> {\n return this.messageStore.list();\n }\n\n async listPendingForAgent(agentId: string): Promise<Message[]> {\n return this.messageStore.listPending(agentId);\n }\n\n async listForAgent(agentId: string): Promise<Message[]> {\n const all = await this.messageStore.list();\n return all.filter((m) => m.to_agent_id === agentId || m.from_agent_id === agentId);\n }\n\n async purgeExpired(): Promise<number> {\n return this.messageStore.purgeExpired();\n }\n\n private emitSent(msg: Message): void {\n this.eventBus.emit({\n type: 'message:sent',\n messageId: msg.id,\n fromAgentId: msg.from_agent_id,\n toAgentId: msg.to_agent_id,\n channel: msg.channel,\n });\n }\n}\n","/**\n * Goal service — business logic for goal lifecycle.\n *\n * Goals are persistent objectives that drive autonomous agent work.\n * State machine: active → achieved | abandoned\n * active ↔ paused\n *\n * Side effect: assigning an agent to a goal auto-enables autonomous mode;\n * removing the last active goal from an agent auto-disables it.\n */\n\nimport { nanoid } from 'nanoid';\nimport type { Goal, GoalStatus, CreateGoalInput } from '../domain/goal.js';\nimport { isGoalTerminal } from '../domain/goal.js';\nimport { AUTONOMOUS_LABEL, type Task } from '../domain/task.js';\nimport { GoalNotFoundError, InvalidArgumentsError } from '../domain/errors.js';\nimport type { IGoalStore, IContextStore } from '../infrastructure/storage/interfaces.js';\nimport type { EventBus } from './event-bus.js';\nimport type { AgentService } from './agent-service.js';\nimport type { TaskService } from './task-service.js';\n\nconst VALID_TRANSITIONS: Record<GoalStatus, GoalStatus[]> = {\n active: ['paused', 'achieved', 'abandoned'],\n paused: ['active', 'abandoned'],\n achieved: [],\n abandoned: [],\n};\n\nexport class GoalService {\n constructor(\n private readonly goalStore: IGoalStore,\n private readonly eventBus: EventBus,\n private readonly agentService?: AgentService,\n private readonly taskService?: TaskService,\n private readonly contextStore?: IContextStore,\n ) {}\n\n async create(input: CreateGoalInput): Promise<Goal> {\n if (!input.title.trim()) {\n throw new InvalidArgumentsError('Goal title is required');\n }\n\n const now = new Date().toISOString();\n const goal: Goal = {\n id: `goal_${nanoid(7)}`,\n title: input.title.trim(),\n description: input.description?.trim() ?? '',\n status: 'active',\n assignee: input.assignee,\n created_at: now,\n updated_at: now,\n };\n\n await this.goalStore.save(goal);\n this.eventBus.emit({ type: 'goal:created', goalId: goal.id, title: goal.title });\n\n if (goal.assignee) {\n await this.enableAutonomous(goal.assignee);\n }\n\n return goal;\n }\n\n async list(filter?: { status?: GoalStatus }): Promise<Goal[]> {\n return this.goalStore.list(filter);\n }\n\n async get(id: string): Promise<Goal> {\n const goal = await this.goalStore.get(id);\n if (!goal) throw new GoalNotFoundError(id);\n return goal;\n }\n\n async updateStatus(id: string, newStatus: GoalStatus): Promise<Goal> {\n const goal = await this.get(id);\n const oldStatus = goal.status;\n\n if (!VALID_TRANSITIONS[oldStatus].includes(newStatus)) {\n throw new InvalidArgumentsError(\n `Cannot transition goal from '${oldStatus}' to '${newStatus}'`,\n );\n }\n\n goal.status = newStatus;\n goal.updated_at = new Date().toISOString();\n await this.goalStore.save(goal);\n\n this.eventBus.emit({ type: 'goal:status_changed', goalId: id, from: oldStatus, to: newStatus });\n\n if (goal.assignee) {\n if (newStatus === 'paused') {\n // Pause: disable autonomous + cancel pending autonomous tasks\n await this.maybeDisableAutonomous(goal.assignee);\n await this.cancelPendingAutonomousTasks(goal.assignee);\n } else if (newStatus === 'active' && oldStatus === 'paused') {\n // Resume: re-enable autonomous mode\n await this.enableAutonomous(goal.assignee);\n } else if (isGoalTerminal(newStatus)) {\n // Terminal: check if agent still has other active goals\n await this.maybeDisableAutonomous(goal.assignee);\n }\n }\n\n return goal;\n }\n\n async update(id: string, fields: { title?: string; description?: string; assignee?: string }): Promise<Goal> {\n const goal = await this.get(id);\n const oldAssignee = goal.assignee;\n\n if (fields.title !== undefined) {\n if (!fields.title.trim()) throw new InvalidArgumentsError('Goal title cannot be empty');\n goal.title = fields.title.trim();\n }\n if (fields.description !== undefined) goal.description = fields.description.trim();\n if (fields.assignee !== undefined) goal.assignee = fields.assignee || undefined;\n\n goal.updated_at = new Date().toISOString();\n await this.goalStore.save(goal);\n this.eventBus.emit({ type: 'goal:updated', goalId: id });\n\n // Handle assignee change — independent agents, run in parallel\n const newAssignee = goal.assignee;\n if (newAssignee !== oldAssignee) {\n const ops: Promise<void>[] = [];\n if (newAssignee) ops.push(this.enableAutonomous(newAssignee));\n if (oldAssignee) ops.push(this.maybeDisableAutonomous(oldAssignee));\n await Promise.all(ops);\n }\n\n return goal;\n }\n\n async delete(id: string): Promise<void> {\n const goal = await this.get(id);\n const { assignee } = goal;\n await this.goalStore.delete(id);\n this.eventBus.emit({ type: 'goal:deleted', goalId: id });\n\n if (assignee) {\n await this.maybeDisableAutonomous(assignee);\n }\n }\n\n async listTasksForGoal(goalId: string): Promise<Task[]> {\n return this.taskService?.list({ goalId }) ?? [];\n }\n\n async getProgressReport(goalId: string): Promise<string | undefined> {\n if (!this.contextStore) return undefined;\n const entry = await this.contextStore.get(`${goalId}-progress`);\n return entry?.value;\n }\n\n /** Enable autonomous mode on an agent. */\n private async enableAutonomous(agentId: string): Promise<void> {\n if (!this.agentService) return;\n try {\n await this.agentService.setAutonomous(agentId, true);\n } catch {\n // Agent may not exist — ignore silently\n }\n }\n\n /** Check if an agent has at least one active goal. */\n private async hasActiveGoalsForAgent(agentId: string): Promise<boolean> {\n const activeGoals = await this.goalStore.list({ status: 'active' });\n return activeGoals.some((g) => g.assignee === agentId);\n }\n\n /** Cancel dispatchable (todo/retrying) autonomous tasks assigned to the agent. */\n private async cancelPendingAutonomousTasks(agentId: string): Promise<void> {\n if (!this.taskService) return;\n try {\n const [todos, retrying] = await Promise.all([\n this.taskService.list({ status: 'todo' }),\n this.taskService.list({ status: 'retrying' }),\n ]);\n const pending = [...todos, ...retrying].filter(\n (t) => t.assignee === agentId && t.labels?.includes(AUTONOMOUS_LABEL),\n );\n await Promise.all(pending.map((t) => this.taskService!.cancel(t.id).catch(() => {})));\n } catch {\n // Best-effort cleanup\n }\n }\n\n /** Disable autonomous if agent has no other active goals. */\n private async maybeDisableAutonomous(agentId: string): Promise<void> {\n if (!this.agentService) return;\n try {\n if (!(await this.hasActiveGoalsForAgent(agentId))) {\n await this.agentService.setAutonomous(agentId, false);\n }\n } catch {\n // Agent may not exist — ignore silently\n }\n }\n}\n","/**\n * Team domain model.\n *\n * A Team groups agents with a lead for coordinated work.\n * Teams share a task pool and enable broadcast messaging.\n */\n\nexport type TeamStatus = 'active' | 'paused' | 'disbanded';\n\nexport interface TeamMember {\n agent_id: string;\n role: 'lead' | 'member';\n joined_at: string;\n}\n\nexport interface Team {\n id: string;\n name: string;\n description?: string;\n status: TeamStatus;\n members: TeamMember[];\n task_pool: string[];\n lead_agent_id: string;\n created_at: string;\n updated_at: string;\n config: TeamConfig;\n}\n\nexport interface TeamConfig {\n max_concurrent_tasks?: number;\n auto_claim: boolean;\n message_ttl_ms?: number;\n}\n\nexport interface CreateTeamInput {\n name: string;\n description?: string;\n lead_agent_id: string;\n member_agent_ids?: string[];\n config?: Partial<TeamConfig>;\n}\n\nexport const DEFAULT_TEAM_CONFIG: TeamConfig = {\n auto_claim: true,\n message_ttl_ms: 24 * 60 * 60 * 1000,\n};\n","/**\n * TeamService — business logic for team lifecycle.\n *\n * Manages team creation, membership, task pool, and self-claiming.\n */\n\nimport { nanoid } from 'nanoid';\nimport type { Team, CreateTeamInput, TeamMember } from '../domain/team.js';\nimport { DEFAULT_TEAM_CONFIG } from '../domain/team.js';\nimport { InvalidArgumentsError, TeamNotFoundError } from '../domain/errors.js';\nimport type { ITeamStore, IAgentStore, ITaskStore } from '../infrastructure/storage/interfaces.js';\nimport type { EventBus } from './event-bus.js';\n\nexport class TeamService {\n constructor(\n private readonly teamStore: ITeamStore,\n private readonly agentStore: IAgentStore,\n private readonly taskStore: ITaskStore,\n private readonly eventBus: EventBus,\n ) {}\n\n async create(input: CreateTeamInput): Promise<Team> {\n if (!input.name.trim()) throw new InvalidArgumentsError('Team name is required');\n\n const lead = await this.agentStore.get(input.lead_agent_id);\n if (!lead) throw new InvalidArgumentsError(`Lead agent not found: ${input.lead_agent_id}`);\n\n const existing = await this.teamStore.getByName(input.name.trim());\n if (existing) throw new InvalidArgumentsError(`Team \"${input.name}\" already exists`);\n\n const now = new Date().toISOString();\n const leadMember: TeamMember = { agent_id: input.lead_agent_id, role: 'lead', joined_at: now };\n\n const additionalMembers: TeamMember[] = [];\n for (const agentId of input.member_agent_ids ?? []) {\n if (agentId === input.lead_agent_id) continue;\n const agent = await this.agentStore.get(agentId);\n if (!agent) throw new InvalidArgumentsError(`Member agent not found: ${agentId}`);\n additionalMembers.push({ agent_id: agentId, role: 'member', joined_at: now });\n }\n\n const team: Team = {\n id: `team_${nanoid(7)}`,\n name: input.name.trim(),\n description: input.description,\n status: 'active',\n members: [leadMember, ...additionalMembers],\n task_pool: [],\n lead_agent_id: input.lead_agent_id,\n created_at: now,\n updated_at: now,\n config: { ...DEFAULT_TEAM_CONFIG, ...(input.config ?? {}) },\n };\n\n await this.teamStore.save(team);\n\n this.eventBus.emit({ type: 'team:created', teamId: team.id, name: team.name, leadAgentId: team.lead_agent_id });\n for (const member of additionalMembers) {\n this.eventBus.emit({ type: 'team:member_joined', teamId: team.id, agentId: member.agent_id });\n }\n\n return team;\n }\n\n async get(id: string): Promise<Team> {\n const team = await this.teamStore.get(id);\n if (!team) throw new TeamNotFoundError(id);\n return team;\n }\n\n async list(): Promise<Team[]> {\n return this.teamStore.list();\n }\n\n async join(teamId: string, agentId: string): Promise<Team> {\n const team = await this.get(teamId);\n if (team.members.some((m) => m.agent_id === agentId)) {\n throw new InvalidArgumentsError(`Agent ${agentId} is already a member of team ${teamId}`);\n }\n const agent = await this.agentStore.get(agentId);\n if (!agent) throw new InvalidArgumentsError(`Agent not found: ${agentId}`);\n\n team.members.push({ agent_id: agentId, role: 'member', joined_at: new Date().toISOString() });\n team.updated_at = new Date().toISOString();\n await this.teamStore.save(team);\n\n this.eventBus.emit({ type: 'team:member_joined', teamId, agentId });\n return team;\n }\n\n async leave(teamId: string, agentId: string): Promise<Team> {\n const team = await this.get(teamId);\n if (agentId === team.lead_agent_id) {\n throw new InvalidArgumentsError('Lead cannot leave team. Disband the team or transfer lead first.');\n }\n team.members = team.members.filter((m) => m.agent_id !== agentId);\n team.updated_at = new Date().toISOString();\n await this.teamStore.save(team);\n\n this.eventBus.emit({ type: 'team:member_left', teamId, agentId });\n return team;\n }\n\n async addTask(teamId: string, taskId: string): Promise<Team> {\n const team = await this.get(teamId);\n const task = await this.taskStore.get(taskId);\n if (!task) throw new InvalidArgumentsError(`Task not found: ${taskId}`);\n\n if (!team.task_pool.includes(taskId)) {\n team.task_pool.push(taskId);\n team.updated_at = new Date().toISOString();\n await this.teamStore.save(team);\n this.eventBus.emit({ type: 'team:task_added', teamId, taskId });\n }\n return team;\n }\n\n async removeTask(teamId: string, taskId: string): Promise<Team> {\n const team = await this.get(teamId);\n team.task_pool = team.task_pool.filter((id) => id !== taskId);\n team.updated_at = new Date().toISOString();\n await this.teamStore.save(team);\n return team;\n }\n\n async setLead(teamId: string, agentId: string): Promise<Team> {\n const team = await this.get(teamId);\n const member = team.members.find((m) => m.agent_id === agentId);\n if (!member) throw new InvalidArgumentsError(`Agent ${agentId} is not a member of team ${teamId}`);\n\n // Demote current lead\n const currentLead = team.members.find((m) => m.agent_id === team.lead_agent_id);\n if (currentLead) currentLead.role = 'member';\n\n member.role = 'lead';\n team.lead_agent_id = agentId;\n team.updated_at = new Date().toISOString();\n await this.teamStore.save(team);\n return team;\n }\n\n async disband(teamId: string): Promise<void> {\n const team = await this.get(teamId);\n team.status = 'disbanded';\n team.updated_at = new Date().toISOString();\n await this.teamStore.save(team);\n this.eventBus.emit({ type: 'team:disbanded', teamId });\n }\n\n /**\n * Find the team an agent belongs to (if any).\n */\n async findTeamForAgent(agentId: string): Promise<Team | null> {\n const teams = await this.teamStore.list();\n return teams.find((t) => t.status === 'active' && t.members.some((m) => m.agent_id === agentId)) ?? null;\n }\n}\n","/**\n * Dependency injection container.\n *\n * Plain TypeScript object — no framework, no decorators.\n * Two modes:\n * - LightContainer: stores + services only (fast, for read-only commands)\n * - Container: full (+ orchestrator, adapters, template engine)\n */\n\nimport type { OrchestratorConfig } from './domain/config.js';\nimport type { CliContext } from './cli/context.js';\nimport type { ITaskStore, IAgentStore, IRunStore, IStateStore, IConfigStore, IContextStore, IMessageStore, IGoalStore, ITeamStore } from './infrastructure/storage/interfaces.js';\nimport type { IWorkspaceManager } from './infrastructure/workspace/interface.js';\nimport type { ITemplateEngine } from './infrastructure/template/template-engine.js';\nimport type { IProcessManager } from './infrastructure/process/process-manager.js';\nimport type { AdapterRegistry } from './infrastructure/adapters/registry.js';\n\nimport type { GlobalConfig } from './domain/global-config.js';\nimport { Paths } from './infrastructure/storage/paths.js';\nimport { TaskStore } from './infrastructure/storage/task-store.js';\nimport { AgentStore } from './infrastructure/storage/agent-store.js';\nimport { RunStore } from './infrastructure/storage/run-store.js';\nimport { StateStore } from './infrastructure/storage/state-store.js';\nimport { ConfigStore } from './infrastructure/storage/config-store.js';\nimport { GlobalConfigStore } from './infrastructure/storage/global-config-store.js';\nimport { ContextStore } from './infrastructure/storage/context-store.js';\nimport { MessageStore } from './infrastructure/storage/message-store.js';\nimport { GoalStore } from './infrastructure/storage/goal-store.js';\nimport { TeamStore } from './infrastructure/storage/team-store.js';\n\nimport { EventBus } from './application/event-bus.js';\nimport { TaskService } from './application/task-service.js';\nimport { AgentService } from './application/agent-service.js';\nimport { RunService } from './application/run-service.js';\nimport { MessageService } from './application/message-service.js';\nimport { GoalService } from './application/goal-service.js';\nimport { TeamService } from './application/team-service.js';\n\nimport type { Orchestrator } from './application/orchestrator.js';\nimport type { DoctorService } from './application/doctor-service.js';\n\n/** Light container — stores + services. No heavy deps (adapters, orchestrator, LiquidJS). */\nexport interface LightContainer {\n // Context\n context: CliContext;\n paths: Paths;\n config: OrchestratorConfig;\n\n // Infrastructure — stores only\n taskStore: ITaskStore;\n agentStore: IAgentStore;\n runStore: IRunStore;\n stateStore: IStateStore;\n configStore: IConfigStore;\n globalConfigStore: GlobalConfigStore;\n globalConfig: GlobalConfig;\n contextStore: IContextStore;\n messageStore: IMessageStore;\n goalStore: IGoalStore;\n teamStore: ITeamStore;\n\n // Application — services only\n eventBus: EventBus;\n taskService: TaskService;\n agentService: AgentService;\n runService: RunService;\n messageService: MessageService;\n goalService: GoalService;\n teamService: TeamService;\n}\n\n/** Full container — everything from light + orchestrator, adapters, workspace, template. */\nexport interface Container extends LightContainer {\n processManager: IProcessManager;\n adapterRegistry: AdapterRegistry;\n workspaceManager: IWorkspaceManager;\n templateEngine: ITemplateEngine;\n doctorService: DoctorService;\n orchestrator: Orchestrator;\n}\n\n/**\n * Build a light container (stores + services).\n * Fast — no ProcessManager, no adapters, no LiquidJS, no Orchestrator.\n * Used by read-only commands: task, agent, context, msg, goal, team, logs, status, config.\n */\nexport async function buildLightContainer(context: CliContext): Promise<LightContainer> {\n const paths = new Paths(context.projectRoot);\n\n // Fail fast if .orchestry/ does not exist\n await paths.requireInit();\n\n // Infrastructure — stores\n const configStore = new ConfigStore(paths);\n const globalConfigStore = new GlobalConfigStore();\n const [config, globalConfig] = await Promise.all([\n configStore.read(),\n globalConfigStore.read(),\n ]);\n const taskStore = new TaskStore(paths);\n const agentStore = new AgentStore(paths);\n const runStore = new RunStore(paths);\n const stateStore = new StateStore(paths);\n const contextStore = new ContextStore(paths);\n const messageStore = new MessageStore(paths);\n const goalStore = new GoalStore(paths);\n const teamStore = new TeamStore(paths);\n\n // Application — services\n const eventBus = new EventBus();\n const taskService = new TaskService(taskStore, eventBus, config, paths);\n const agentService = new AgentService(agentStore, stateStore, eventBus, config);\n const runService = new RunService(runStore, eventBus);\n const messageService = new MessageService(messageStore, agentStore, teamStore, eventBus);\n const goalService = new GoalService(goalStore, eventBus, agentService, taskService, contextStore);\n const teamService = new TeamService(teamStore, agentStore, taskStore, eventBus);\n\n return {\n context,\n paths,\n config,\n taskStore,\n agentStore,\n runStore,\n stateStore,\n configStore,\n globalConfigStore,\n globalConfig,\n contextStore,\n messageStore,\n goalStore,\n teamStore,\n eventBus,\n taskService,\n agentService,\n runService,\n messageService,\n goalService,\n teamService,\n };\n}\n\n/**\n * Build a full container (light + orchestrator + adapters + template).\n * Used by: run, tui, doctor.\n */\nexport async function buildFullContainer(context: CliContext): Promise<Container> {\n const light = await buildLightContainer(context);\n\n // Dynamic imports — avoid loading heavy deps at top level\n const [\n { ProcessManager },\n { AdapterRegistry },\n { ClaudeAdapter },\n { CodexAdapter },\n { CursorAdapter },\n { ShellAdapter },\n { WorkspaceManager },\n { LiquidTemplateEngine },\n { Orchestrator },\n { DoctorService },\n ] = await Promise.all([\n import('./infrastructure/process/process-manager.js'),\n import('./infrastructure/adapters/registry.js'),\n import('./infrastructure/adapters/claude.js'),\n import('./infrastructure/adapters/codex.js'),\n import('./infrastructure/adapters/cursor.js'),\n import('./infrastructure/adapters/shell.js'),\n import('./infrastructure/workspace/workspace-manager.js'),\n import('./infrastructure/template/template-engine.js'),\n import('./application/orchestrator.js'),\n import('./application/doctor-service.js'),\n ]);\n\n const processManager = new ProcessManager();\n const templateEngine = new LiquidTemplateEngine();\n const workspaceManager = new WorkspaceManager(\n context.projectRoot,\n light.paths.root,\n processManager,\n );\n\n // Adapter registry\n const adapterRegistry = new AdapterRegistry();\n adapterRegistry.register(new ClaudeAdapter(processManager));\n adapterRegistry.register(new CodexAdapter(processManager));\n adapterRegistry.register(new CursorAdapter(processManager));\n adapterRegistry.register(new ShellAdapter(processManager));\n\n const doctorService = new DoctorService(adapterRegistry, processManager, context.projectRoot);\n const orchestrator = new Orchestrator({\n taskStore: light.taskStore,\n agentStore: light.agentStore,\n runStore: light.runStore,\n stateStore: light.stateStore,\n adapterRegistry,\n workspaceManager,\n templateEngine,\n processManager,\n eventBus: light.eventBus,\n taskService: light.taskService,\n agentService: light.agentService,\n runService: light.runService,\n contextStore: light.contextStore,\n messageService: light.messageService,\n goalStore: light.goalStore,\n config: light.config,\n projectRoot: context.projectRoot,\n lockPath: light.paths.lockPath,\n });\n\n return {\n ...light,\n processManager,\n adapterRegistry,\n workspaceManager,\n templateEngine,\n doctorService,\n orchestrator,\n };\n}\n\n/**\n * @deprecated Use buildLightContainer or buildFullContainer directly.\n * Kept for backward compatibility with tests.\n */\nexport async function buildContainer(context: CliContext): Promise<Container> {\n return buildFullContainer(context);\n}\n"]}
1
+ {"version":3,"sources":["../src/application/event-bus.ts","../src/application/task-service.ts","../src/application/agent-service.ts","../src/application/run-service.ts","../src/infrastructure/clipboard-service.ts","../src/infrastructure/storage/task-store.ts","../src/infrastructure/storage/agent-store.ts","../src/infrastructure/storage/run-store.ts","../src/domain/state.ts","../src/infrastructure/storage/state-store.ts","../src/domain/config.ts","../src/infrastructure/storage/config-store.ts","../src/domain/global-config.ts","../src/infrastructure/storage/global-config-store.ts","../src/infrastructure/storage/context-store.ts","../src/infrastructure/storage/message-store.ts","../src/domain/goal.ts","../src/infrastructure/storage/goal-store.ts","../src/infrastructure/storage/team-store.ts","../src/domain/message.ts","../src/application/message-service.ts","../src/application/goal-service.ts","../src/domain/team.ts","../src/application/team-service.ts","../src/container.ts"],"names":["nanoid","execFileCb","fs","path","isExpired","AdapterRegistry","Orchestrator"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Typed event bus.\n *\n * The single communication channel between all layers.\n * Synchronous emit — handlers run inline.\n * TUI, logger, run store, state all subscribe independently.\n */\n\nimport type {\n OrchestratorEvent,\n OrchestratorEventType,\n EventPayload,\n} from '../domain/events.js';\n\ntype Handler<T> = (event: T) => void;\n\nexport class EventBus {\n private handlers = new Map<string, Set<Handler<any>>>();\n private wildcardHandlers = new Set<Handler<OrchestratorEvent>>();\n private maxListeners: number = 10;\n private warnedTypes = new Set<string>();\n\n /**\n * Set the maximum number of listeners per event type before a warning is emitted.\n * Helps detect memory leaks from repeated subscriptions in watch mode.\n */\n setMaxListeners(n: number): void {\n this.maxListeners = n;\n }\n\n getMaxListeners(): number {\n return this.maxListeners;\n }\n\n /**\n * Get the number of listeners for a specific event type.\n */\n listenerCount(type: OrchestratorEventType): number {\n return this.handlers.get(type)?.size ?? 0;\n }\n\n /**\n * Subscribe to events of a specific type.\n * Returns an unsubscribe function.\n */\n on<T extends OrchestratorEventType>(\n type: T,\n handler: Handler<EventPayload<T>>,\n ): () => void {\n if (!this.handlers.has(type)) {\n this.handlers.set(type, new Set());\n }\n const set = this.handlers.get(type)!;\n set.add(handler);\n\n // Warn once per type when listener count exceeds maxListeners\n if (this.maxListeners > 0 && set.size > this.maxListeners && !this.warnedTypes.has(type)) {\n this.warnedTypes.add(type);\n console.warn(\n `EventBus: possible memory leak detected. ${set.size} listeners added for \"${type}\". ` +\n `Use setMaxListeners() to increase limit if this is intentional.`,\n );\n }\n\n return () => this.off(type, handler);\n }\n\n /**\n * Subscribe to an event type, auto-unsubscribe after first call.\n */\n once<T extends OrchestratorEventType>(\n type: T,\n handler: Handler<EventPayload<T>>,\n ): () => void {\n const wrapper: Handler<EventPayload<T>> = (event) => {\n this.off(type, wrapper);\n handler(event);\n };\n return this.on(type, wrapper);\n }\n\n /**\n * Unsubscribe a handler from an event type.\n */\n off<T extends OrchestratorEventType>(\n type: T,\n handler: Handler<EventPayload<T>>,\n ): void {\n this.handlers.get(type)?.delete(handler);\n }\n\n /**\n * Emit an event synchronously to all subscribed handlers.\n */\n emit(event: OrchestratorEvent): void {\n const typed = this.handlers.get(event.type);\n if (typed) this.dispatchToSet(typed, event, 'handler');\n this.dispatchToSet(this.wildcardHandlers, event, 'wildcard handler');\n }\n\n private dispatchToSet(handlers: Iterable<Handler<any>>, event: OrchestratorEvent, label: string): void {\n for (const handler of handlers) {\n try {\n handler(event);\n } catch (err) {\n console.error(`EventBus ${label} error for \"${event.type}\":`, err);\n }\n }\n }\n\n /**\n * Subscribe to ALL events regardless of type.\n */\n onAny(handler: Handler<OrchestratorEvent>): () => void {\n this.wildcardHandlers.add(handler);\n\n if (\n this.maxListeners > 0 &&\n this.wildcardHandlers.size > this.maxListeners &&\n !this.warnedTypes.has('*')\n ) {\n this.warnedTypes.add('*');\n console.warn(\n `EventBus: possible memory leak detected. ${this.wildcardHandlers.size} wildcard listeners added. ` +\n `Use setMaxListeners() to increase limit if this is intentional.`,\n );\n }\n\n return () => { this.wildcardHandlers.delete(handler); };\n }\n\n /**\n * Remove all handlers.\n */\n clear(): void {\n this.handlers.clear();\n this.wildcardHandlers.clear();\n this.warnedTypes.clear();\n }\n}\n","/**\n * Task service — business logic for task lifecycle.\n *\n * Validates state transitions, emits events, manages CRUD.\n * CLI commands call this service, not storage directly.\n */\n\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { nanoid } from 'nanoid';\nimport type { Task, CreateTaskInput, TaskStatus } from '../domain/task.js';\nimport { canTransition, isTerminal } from '../domain/transitions.js';\nimport {\n TaskNotFoundError,\n InvalidTransitionError,\n InvalidArgumentsError,\n} from '../domain/errors.js';\nimport type { ITaskStore } from '../infrastructure/storage/interfaces.js';\nimport type { Paths } from '../infrastructure/storage/paths.js';\nimport type { OrchestratorConfig } from '../domain/config.js';\nimport type { EventBus } from './event-bus.js';\nimport { ensureDir } from '../infrastructure/storage/fs-utils.js';\n\nexport class TaskService {\n constructor(\n private readonly taskStore: ITaskStore,\n private readonly eventBus: EventBus,\n private readonly config: OrchestratorConfig,\n private readonly paths?: Paths,\n ) {}\n\n async create(input: CreateTaskInput): Promise<Task> {\n if (!input.title.trim()) {\n throw new InvalidArgumentsError('Task title is required');\n }\n\n const priority = input.priority ?? this.config.defaults.task.priority;\n if (!Number.isInteger(priority) || priority < 1 || priority > 4) {\n throw new InvalidArgumentsError('Priority must be an integer between 1 and 4');\n }\n\n if (input.depends_on?.length) {\n const results = await Promise.all(\n input.depends_on.map(async (depId) => ({ depId, exists: !!(await this.taskStore.get(depId)) })),\n );\n const missing = results.filter((r) => !r.exists).map((r) => r.depId);\n if (missing.length > 0) {\n throw new InvalidArgumentsError(\n `Unknown depends_on task ID(s): ${missing.join(', ')}`,\n );\n }\n }\n\n const now = new Date().toISOString();\n const task: Task = {\n id: `tsk_${nanoid(7)}`,\n title: input.title.trim(),\n description: input.description?.trim() ?? '',\n status: 'todo',\n priority,\n assignee: input.assignee,\n labels: input.labels ?? [],\n depends_on: input.depends_on ?? [],\n created_at: now,\n updated_at: now,\n attempts: 0,\n max_attempts: input.max_attempts ?? this.config.defaults.task.max_attempts,\n workspace_mode: input.workspace_mode,\n review_criteria: input.review_criteria,\n scope: input.scope,\n goalId: input.goalId,\n };\n\n if (input.attachments?.length && this.paths) {\n const attachmentNames = await this.copyAttachments(task.id, input.attachments);\n task.attachments = attachmentNames;\n }\n\n await this.taskStore.save(task);\n this.eventBus.emit({ type: 'task:created', task });\n\n return task;\n }\n\n async list(filter?: { status?: TaskStatus; goalId?: string }): Promise<Task[]> {\n return this.taskStore.list(filter);\n }\n\n async get(id: string): Promise<Task> {\n const task = await this.taskStore.get(id);\n if (!task) throw new TaskNotFoundError(id);\n return task;\n }\n\n async updateStatus(id: string, newStatus: TaskStatus): Promise<Task> {\n const task = await this.get(id);\n const oldStatus = task.status;\n\n if (!canTransition(oldStatus, newStatus)) {\n throw new InvalidTransitionError(id, oldStatus, newStatus);\n }\n\n task.status = newStatus;\n task.updated_at = new Date().toISOString();\n await this.taskStore.save(task);\n\n this.eventBus.emit({\n type: 'task:status_changed',\n taskId: id,\n from: oldStatus,\n to: newStatus,\n });\n\n return task;\n }\n\n async assign(taskId: string, agentId: string): Promise<Task> {\n const task = await this.get(taskId);\n task.assignee = agentId;\n task.updated_at = new Date().toISOString();\n await this.taskStore.save(task);\n\n this.eventBus.emit({\n type: 'task:assigned',\n taskId,\n agentId,\n });\n\n return task;\n }\n\n async cancel(id: string): Promise<Task> {\n const task = await this.get(id);\n\n if (isTerminal(task.status)) {\n throw new InvalidTransitionError(id, task.status, 'cancelled');\n }\n\n return this.updateStatus(id, 'cancelled');\n }\n\n async retry(id: string): Promise<Task> {\n const task = await this.get(id);\n\n if (task.status !== 'failed' && task.status !== 'cancelled') {\n throw new InvalidTransitionError(id, task.status, 'todo');\n }\n\n const oldStatus = task.status;\n task.status = 'todo';\n task.attempts = 0;\n task.updated_at = new Date().toISOString();\n await this.taskStore.save(task);\n\n this.eventBus.emit({\n type: 'task:status_changed',\n taskId: id,\n from: oldStatus,\n to: 'todo',\n });\n\n return task;\n }\n\n async reject(id: string, feedback?: string): Promise<Task> {\n const task = await this.get(id);\n\n if (task.status !== 'review') {\n throw new InvalidTransitionError(id, task.status, 'todo');\n }\n\n const oldStatus = task.status;\n task.status = 'todo';\n task.attempts = 0;\n task.feedback = feedback;\n task.updated_at = new Date().toISOString();\n await this.taskStore.save(task);\n\n this.eventBus.emit({\n type: 'task:status_changed',\n taskId: id,\n from: oldStatus,\n to: 'todo',\n });\n\n return task;\n }\n\n async update(id: string, fields: { title?: string; description?: string; priority?: number; labels?: string[]; attachments?: string[] }): Promise<Task> {\n const task = await this.get(id);\n\n if (fields.title !== undefined) {\n if (!fields.title.trim()) throw new InvalidArgumentsError('Task title cannot be empty');\n task.title = fields.title.trim();\n }\n if (fields.description !== undefined) task.description = fields.description.trim();\n if (fields.priority !== undefined) {\n if (!Number.isInteger(fields.priority) || fields.priority < 1 || fields.priority > 4) {\n throw new InvalidArgumentsError('Priority must be an integer between 1 and 4');\n }\n task.priority = fields.priority;\n }\n if (fields.labels !== undefined) task.labels = fields.labels;\n if (fields.attachments?.length && this.paths) {\n const attachmentNames = await this.copyAttachments(id, fields.attachments);\n task.attachments = [...(task.attachments ?? []), ...attachmentNames];\n }\n\n task.updated_at = new Date().toISOString();\n await this.taskStore.save(task);\n return task;\n }\n\n async delete(id: string): Promise<void> {\n const task = await this.get(id);\n if (task.status === 'in_progress') {\n throw new InvalidArgumentsError('Cannot delete a running task. Cancel it first.');\n }\n await this.taskStore.delete(id);\n\n if (this.paths) {\n const dir = this.paths.taskAttachmentsDir(id);\n await fs.rm(dir, { recursive: true, force: true });\n }\n }\n\n getAttachmentPath(taskId: string, filename: string): string {\n if (!this.paths) {\n throw new InvalidArgumentsError('Paths not configured');\n }\n return path.join(this.paths.taskAttachmentsDir(taskId), filename);\n }\n\n private async copyAttachments(taskId: string, sourcePaths: string[]): Promise<string[]> {\n if (!this.paths) return [];\n\n const dir = this.paths.taskAttachmentsDir(taskId);\n await ensureDir(dir);\n\n // Validate all files exist first\n await Promise.all(\n sourcePaths.map(async (srcPath) => {\n try {\n await fs.access(srcPath);\n } catch {\n throw new InvalidArgumentsError(`Attachment file not found: ${srcPath}`);\n }\n }),\n );\n\n // Copy all files in parallel\n const names = await Promise.all(\n sourcePaths.map(async (srcPath) => {\n const basename = path.basename(srcPath);\n await fs.copyFile(srcPath, path.join(dir, basename));\n return basename;\n }),\n );\n\n return names;\n }\n\n async incrementAttempts(id: string): Promise<Task> {\n const task = await this.get(id);\n task.attempts += 1;\n task.updated_at = new Date().toISOString();\n await this.taskStore.save(task);\n return task;\n }\n}\n","/**\n * Agent service — business logic for agent lifecycle.\n *\n * Manages agent CRUD, availability, and task assignment matching.\n */\n\nimport { nanoid } from 'nanoid';\nimport type { Agent, CreateAgentInput, AgentStatus } from '../domain/agent.js';\nimport type { Task } from '../domain/task.js';\nimport { AgentNotFoundError, InvalidArgumentsError } from '../domain/errors.js';\nimport type { IAgentStore, IStateStore } from '../infrastructure/storage/interfaces.js';\nimport type { OrchestratorConfig } from '../domain/config.js';\nimport type { EventBus } from './event-bus.js';\n\nexport class AgentService {\n constructor(\n private readonly agentStore: IAgentStore,\n private readonly stateStore: IStateStore,\n private readonly eventBus: EventBus,\n private readonly config: OrchestratorConfig,\n ) {}\n\n async create(input: CreateAgentInput): Promise<Agent> {\n if (!input.name.trim()) {\n throw new InvalidArgumentsError('Agent name is required');\n }\n\n // Check for duplicate name\n const existing = await this.agentStore.getByName(input.name);\n if (existing) {\n throw new InvalidArgumentsError(`Agent \"${input.name}\" already exists`);\n }\n\n const agent: Agent = {\n id: `agt_${nanoid(7)}`,\n name: input.name.trim(),\n adapter: input.adapter || this.config.defaults.agent.adapter,\n role: input.role,\n config: {\n command: input.command,\n model: input.model,\n approval_policy: input.approval_policy ?? this.config.defaults.agent.approval_policy,\n max_turns: input.max_turns ?? this.config.defaults.agent.max_turns,\n timeout_ms: input.timeout_ms ?? this.config.defaults.agent.timeout_ms,\n stall_timeout_ms: input.stall_timeout_ms ?? this.config.defaults.agent.stall_timeout_ms,\n env: input.env,\n system_prompt: input.system_prompt,\n workspace_mode: input.workspace_mode,\n skills: input.skills,\n },\n status: 'idle',\n stats: {\n tasks_completed: 0,\n tasks_failed: 0,\n total_runs: 0,\n total_runtime_ms: 0,\n },\n };\n\n await this.agentStore.save(agent);\n return agent;\n }\n\n async list(): Promise<Agent[]> {\n return this.agentStore.list();\n }\n\n async get(id: string): Promise<Agent> {\n const agent = await this.agentStore.get(id);\n if (!agent) throw new AgentNotFoundError(id);\n return agent;\n }\n\n async remove(id: string): Promise<void> {\n const agent = await this.get(id);\n if (agent.status === 'running') {\n // Check if actually running (has entry in state.running)\n const state = await this.stateStore.read();\n const isActuallyRunning = Object.values(state.running).some((e) => e.agent_id === id);\n if (isActuallyRunning) {\n throw new InvalidArgumentsError('Cannot remove a running agent. Stop it first.');\n }\n // Agent stuck in 'running' with no active run — reset and allow delete\n agent.status = 'idle';\n await this.agentStore.save(agent);\n }\n await this.agentStore.delete(id);\n }\n\n async update(id: string, fields: { name?: string; role?: string; model?: string; approval_policy?: Agent['config']['approval_policy'] }): Promise<Agent> {\n const agent = await this.get(id);\n\n if (fields.name !== undefined) {\n if (!fields.name.trim()) throw new InvalidArgumentsError('Agent name cannot be empty');\n // Check for duplicate name (excluding self)\n const existing = await this.agentStore.getByName(fields.name.trim());\n if (existing && existing.id !== id) {\n throw new InvalidArgumentsError(`Agent \"${fields.name}\" already exists`);\n }\n agent.name = fields.name.trim();\n }\n if (fields.role !== undefined) agent.role = fields.role || undefined;\n if (fields.model !== undefined) agent.config.model = fields.model || undefined;\n if (fields.approval_policy !== undefined) agent.config.approval_policy = fields.approval_policy;\n\n await this.agentStore.save(agent);\n return agent;\n }\n\n async disable(id: string): Promise<Agent> {\n return this.setStatus(id, 'disabled');\n }\n\n async enable(id: string): Promise<Agent> {\n return this.setStatus(id, 'idle');\n }\n\n async setAutonomous(id: string, enabled: boolean): Promise<Agent> {\n const agent = await this.get(id);\n agent.autonomous = enabled;\n await this.agentStore.save(agent);\n this.eventBus.emit({ type: 'agent:autonomous_toggled', agentId: id, autonomous: enabled });\n return agent;\n }\n\n async setStatus(id: string, status: AgentStatus): Promise<Agent> {\n const agent = await this.get(id);\n agent.status = status;\n await this.agentStore.save(agent);\n return agent;\n }\n\n async updateStats(\n id: string,\n update: Partial<Agent['stats']>,\n ): Promise<Agent> {\n const agent = await this.get(id);\n Object.assign(agent.stats, update);\n await this.agentStore.save(agent);\n return agent;\n }\n\n /**\n * Find the best available agent for a task using scoring.\n *\n * Scoring:\n * - Explicit assignee match = 100\n * - Skill match with task labels = 50 per match\n * - Role match with task labels = 30\n * - Idle status bonus = 20\n * - Success rate bonus = 0–10 (scaled by completed / total)\n */\n async findBestAgent(task: Task): Promise<Agent | null> {\n const agents = await this.agentStore.list();\n const available = agents.filter(\n (a) => a.status === 'idle',\n );\n\n if (available.length === 0) return null;\n\n // Explicit assignee — hard constraint\n if (task.assignee) {\n const assigned = agents.find((a) => a.id === task.assignee);\n if (assigned && assigned.status === 'idle') return assigned;\n return null;\n }\n\n // Pre-compute lowercase task labels once\n const lowerLabels = task.labels?.length\n ? task.labels.map((l) => l.toLowerCase())\n : undefined;\n\n // Score each available agent\n const scored = available.map((agent) => {\n let score = 0;\n\n // Skill match with task labels: 50 per matching skill\n if (lowerLabels && agent.config.skills?.length) {\n const skillSet = new Set(agent.config.skills.map((s) => s.toLowerCase()));\n for (const label of lowerLabels) {\n if (skillSet.has(label)) {\n score += 50;\n }\n }\n }\n\n // Role match with task labels: 30\n if (lowerLabels && agent.role) {\n const lowerRole = agent.role.toLowerCase();\n if (lowerLabels.some((l) => lowerRole.includes(l))) {\n score += 30;\n }\n }\n\n // Idle bonus\n if (agent.status === 'idle') {\n score += 20;\n }\n\n // Success rate bonus: 0–10\n const totalTasks = agent.stats.tasks_completed + agent.stats.tasks_failed;\n if (totalTasks > 0) {\n score += Math.round((agent.stats.tasks_completed / totalTasks) * 10);\n }\n\n return { agent, score };\n });\n\n // Sort descending by score\n scored.sort((a, b) => b.score - a.score);\n\n return scored[0]?.agent ?? null;\n }\n}\n","/**\n * Run service — manages run lifecycle and event streaming.\n */\n\nimport { nanoid } from 'nanoid';\nimport type { Run, RunEvent, RunStatus, TokenUsage } from '../domain/run.js';\nimport type { IRunStore } from '../infrastructure/storage/interfaces.js';\nimport type { EventBus } from './event-bus.js';\n\nexport class RunService {\n constructor(\n private readonly runStore: IRunStore,\n private readonly eventBus: EventBus,\n ) {}\n\n async create(params: {\n taskId: string;\n agentId: string;\n attempt: number;\n prompt: string;\n workspacePath: string;\n }): Promise<Run> {\n const run: Run = {\n id: `run_${nanoid(7)}`,\n task_id: params.taskId,\n agent_id: params.agentId,\n attempt: params.attempt,\n status: 'preparing',\n started_at: new Date().toISOString(),\n workspace_path: params.workspacePath,\n prompt: params.prompt,\n };\n\n await this.runStore.save(run);\n return run;\n }\n\n async get(id: string): Promise<Run | null> {\n return this.runStore.get(id);\n }\n\n async start(id: string, pid: number): Promise<Run> {\n const run = await this.runStore.get(id);\n if (!run) throw new Error(`Run not found: ${id}`);\n\n run.status = 'running';\n run.pid = pid;\n await this.runStore.save(run);\n\n this.eventBus.emit({\n type: 'agent:started',\n agentId: run.agent_id,\n taskId: run.task_id,\n runId: id,\n });\n\n return run;\n }\n\n async finish(\n id: string,\n status: RunStatus,\n tokens?: TokenUsage,\n error?: string,\n ): Promise<Run> {\n const run = await this.runStore.get(id);\n if (!run) throw new Error(`Run not found: ${id}`);\n\n run.status = status;\n run.finished_at = new Date().toISOString();\n run.tokens = tokens;\n run.error = error;\n await this.runStore.save(run);\n\n this.eventBus.emit({\n type: 'agent:completed',\n runId: id,\n agentId: run.agent_id,\n success: status === 'succeeded',\n });\n\n return run;\n }\n\n async appendEvent(runId: string, event: RunEvent): Promise<void> {\n await this.runStore.appendEvent(runId, event);\n }\n\n async listAll(): Promise<Run[]> {\n return this.runStore.listAll();\n }\n\n async listForTask(taskId: string): Promise<Run[]> {\n return this.runStore.listForTask(taskId);\n }\n\n async listForAgent(agentId: string): Promise<Run[]> {\n return this.runStore.listForAgent(agentId);\n }\n\n async readEvents(runId: string): Promise<RunEvent[]> {\n return this.runStore.readEvents(runId);\n }\n\n async readEventsTail(runId: string, count: number): Promise<RunEvent[]> {\n return this.runStore.readEventsTail(runId, count);\n }\n\n /**\n * Get error and last N lines of output from the most recent failed run for a task.\n * Used to provide retry context so agents can learn from previous failures.\n */\n async getLastFailedRunContext(\n taskId: string,\n maxOutputLines = 50,\n ): Promise<{ error: string; output: string } | null> {\n const runs = await this.runStore.listForTask(taskId);\n const failedRun = runs\n .filter((r) => r.status === 'failed')\n .sort((a, b) => (b.finished_at ?? '').localeCompare(a.finished_at ?? ''))\n [0];\n\n if (!failedRun) return null;\n\n const error = failedRun.error ?? 'Unknown error';\n\n // Read events and extract last N output lines\n let output = '';\n try {\n // Read only tail of events to avoid loading multi-MB JSONL files\n const events = await this.runStore.readEventsTail(failedRun.id, maxOutputLines * 2);\n const outputLines = events\n .filter((e) => e.type === 'agent_output' || e.type === 'error')\n .map((e) => (typeof e.data === 'string' ? e.data : JSON.stringify(e.data)))\n .join('\\n')\n .split('\\n');\n\n output = outputLines.slice(-maxOutputLines).join('\\n');\n } catch {\n // Events file may not exist — that's fine\n }\n\n return { error, output };\n }\n}\n","/**\n * Clipboard service for detecting and extracting images from the system clipboard.\n *\n * Platform support:\n * - macOS: osascript (clipboard info / clipboard as PNGf)\n * - Linux: xclip -selection clipboard\n * - Windows: PowerShell Get-Clipboard\n */\n\nimport { execFile as execFileCb, execFileSync } from 'node:child_process';\nimport { promisify } from 'node:util';\nimport { writeFile, readFile, unlink, mkdtemp, rm } from 'node:fs/promises';\nimport { tmpdir } from 'node:os';\nimport { join } from 'node:path';\nimport { OrchestryError } from '../domain/errors.js';\n\nconst execFile = promisify(execFileCb);\n\nconst EXEC_TIMEOUT_MS = 3_000;\n\nexport type ClipboardContentType = 'image' | 'text' | 'empty';\n\nexport interface ClipboardImage {\n data: Buffer;\n ext: string;\n}\n\n/**\n * Checks whether the required clipboard tool is available on this platform.\n *\n * - macOS: pbpaste (always present)\n * - Linux: xclip\n * - Windows: PowerShell (always present)\n */\nexport function isClipboardToolAvailable(): boolean {\n const platform = process.platform;\n\n if (platform === 'darwin') {\n // pbpaste/osascript are always available on macOS\n return true;\n }\n\n if (platform === 'linux') {\n try {\n execFileSync('which', ['xclip'], { timeout: EXEC_TIMEOUT_MS, stdio: 'ignore' });\n return true;\n } catch {\n return false;\n }\n }\n\n if (platform === 'win32') {\n // PowerShell is always available on modern Windows\n return true;\n }\n\n return false;\n}\n\n/**\n * Detects the type of content currently in the system clipboard.\n *\n * Returns 'image' if the clipboard contains an image (PNG or TIFF),\n * 'text' if it contains text, or 'empty' if the clipboard is empty.\n */\nexport async function detectClipboardType(): Promise<ClipboardContentType> {\n const platform = process.platform;\n\n if (platform === 'darwin') {\n return detectMacOS();\n }\n\n if (platform === 'linux') {\n return detectLinux();\n }\n\n if (platform === 'win32') {\n return detectWindows();\n }\n\n throw new OrchestryError(\n `Unsupported platform for clipboard: ${platform}`,\n 1,\n 'Supported: macOS, Linux, Windows',\n );\n}\n\n/**\n * Extracts an image from the system clipboard.\n *\n * Returns the image data as a Buffer with its file extension,\n * or null if the clipboard does not contain an image.\n */\nexport async function getClipboardImage(): Promise<ClipboardImage | null> {\n const type = await detectClipboardType();\n if (type !== 'image') return null;\n\n const platform = process.platform;\n\n if (platform === 'darwin') {\n return getImageMacOS();\n }\n\n if (platform === 'linux') {\n return getImageLinux();\n }\n\n if (platform === 'win32') {\n return getImageWindows();\n }\n\n return null;\n}\n\n// ─── macOS ────────────────────────────────────────────────────────────────────\n\nasync function detectMacOS(): Promise<ClipboardContentType> {\n try {\n const { stdout } = await execFile('osascript', ['-e', 'clipboard info'], {\n timeout: EXEC_TIMEOUT_MS,\n });\n\n if (stdout.includes('«class PNGf»') || stdout.includes('«class TIFF»')) {\n return 'image';\n }\n\n if (stdout.includes('«class ut16»') || stdout.includes('«class utf8»')) {\n return 'text';\n }\n\n // If clipboard info returned something but not text or image\n return stdout.trim().length > 0 ? 'text' : 'empty';\n } catch {\n return 'empty';\n }\n}\n\nasync function getImageMacOS(): Promise<ClipboardImage | null> {\n const dir = await mkdtemp(join(tmpdir(), 'orch-clip-'));\n const filePath = join(dir, 'clipboard.png');\n\n try {\n // AppleScript to write clipboard image (as PNG) to a temp file\n const script = `\n set theFile to POSIX file \"${filePath}\"\n try\n set imgData to the clipboard as «class PNGf»\n set fRef to open for access theFile with write permission\n write imgData to fRef\n close access fRef\n return \"ok\"\n on error\n try\n close access theFile\n end try\n return \"error\"\n end try\n `;\n\n const { stdout } = await execFile('osascript', ['-e', script], {\n timeout: EXEC_TIMEOUT_MS,\n });\n\n if (stdout.trim() !== 'ok') return null;\n\n const data = await readFile(filePath);\n return { data, ext: 'png' };\n } catch {\n return null;\n } finally {\n // Cleanup temp file\n try {\n await unlink(filePath);\n } catch {\n // Ignore cleanup errors\n }\n try {\n await rm(dir, { recursive: true });\n } catch {\n // Ignore cleanup errors\n }\n }\n}\n\n// ─── Linux ────────────────────────────────────────────────────────────────────\n\nasync function detectLinux(): Promise<ClipboardContentType> {\n try {\n const { stdout } = await execFile(\n 'xclip',\n ['-selection', 'clipboard', '-t', 'TARGETS', '-o'],\n { timeout: EXEC_TIMEOUT_MS },\n );\n\n const targets = stdout.toLowerCase();\n\n if (targets.includes('image/png') || targets.includes('image/tiff') || targets.includes('image/jpeg')) {\n return 'image';\n }\n\n if (targets.includes('text/plain') || targets.includes('utf8_string') || targets.includes('string')) {\n return 'text';\n }\n\n return targets.trim().length > 0 ? 'text' : 'empty';\n } catch {\n return 'empty';\n }\n}\n\nasync function getImageLinux(): Promise<ClipboardImage | null> {\n try {\n const { stdout } = await execFile(\n 'xclip',\n ['-selection', 'clipboard', '-t', 'image/png', '-o'],\n { timeout: EXEC_TIMEOUT_MS, encoding: 'buffer' as unknown as BufferEncoding, maxBuffer: 50 * 1024 * 1024 },\n );\n\n // stdout is a Buffer when encoding is 'buffer'\n const data = Buffer.isBuffer(stdout) ? stdout : Buffer.from(stdout, 'binary');\n if (data.length === 0) return null;\n\n return { data, ext: 'png' };\n } catch {\n return null;\n }\n}\n\n// ─── Windows ──────────────────────────────────────────────────────────────────\n\nasync function detectWindows(): Promise<ClipboardContentType> {\n try {\n // Check for image first\n const { stdout: imgCheck } = await execFile(\n 'powershell',\n ['-NoProfile', '-Command', 'if (Get-Clipboard -Format Image) { \"image\" } else { \"none\" }'],\n { timeout: EXEC_TIMEOUT_MS },\n );\n\n if (imgCheck.trim() === 'image') return 'image';\n\n // Check for text\n const { stdout: textCheck } = await execFile(\n 'powershell',\n ['-NoProfile', '-Command', 'if (Get-Clipboard) { \"text\" } else { \"empty\" }'],\n { timeout: EXEC_TIMEOUT_MS },\n );\n\n return textCheck.trim() === 'text' ? 'text' : 'empty';\n } catch {\n return 'empty';\n }\n}\n\nasync function getImageWindows(): Promise<ClipboardImage | null> {\n const dir = await mkdtemp(join(tmpdir(), 'orch-clip-'));\n const filePath = join(dir, 'clipboard.png');\n\n try {\n const script = `\n Add-Type -AssemblyName System.Windows.Forms\n $img = [System.Windows.Forms.Clipboard]::GetImage()\n if ($img) {\n $img.Save('${filePath.replace(/\\\\/g, '\\\\\\\\')}', [System.Drawing.Imaging.ImageFormat]::Png)\n Write-Output 'ok'\n } else {\n Write-Output 'error'\n }\n `;\n\n const { stdout } = await execFile('powershell', ['-NoProfile', '-Command', script], {\n timeout: EXEC_TIMEOUT_MS,\n });\n\n if (stdout.trim() !== 'ok') return null;\n\n const data = await readFile(filePath);\n return { data, ext: 'png' };\n } catch {\n return null;\n } finally {\n try {\n await unlink(filePath);\n } catch {\n // Ignore cleanup errors\n }\n try {\n await rm(dir, { recursive: true });\n } catch {\n // Ignore cleanup errors\n }\n }\n}\n","/**\n * File-based task store.\n *\n * Tasks are stored as individual YAML files in .orchestry/tasks/.\n * All writes are atomic (temp → rename).\n */\n\nimport type { Task, TaskStatus } from '../../domain/task.js';\nimport type { ITaskStore } from './interfaces.js';\nimport type { Paths } from './paths.js';\nimport { listFiles, readYaml, writeYaml, ensureDir } from './fs-utils.js';\nimport fs from 'node:fs/promises';\n\nexport class TaskStore implements ITaskStore {\n constructor(private readonly paths: Paths) {}\n\n async list(filter?: { status?: TaskStatus; goalId?: string }): Promise<Task[]> {\n await ensureDir(this.paths.tasksDir);\n const files = await listFiles(this.paths.tasksDir, '.yml');\n\n const tasksResults = await Promise.all(\n files.map(file => {\n const id = file.replace('.yml', '');\n return readYaml<Task>(this.paths.taskPath(id));\n })\n );\n\n const tasks = tasksResults.filter(\n (task): task is Task => task !== null\n && (!filter?.status || task.status === filter.status)\n && (!filter?.goalId || task.goalId === filter.goalId)\n );\n\n return tasks.sort((a, b) => {\n const statusOrder = statusPriority(a.status) - statusPriority(b.status);\n if (statusOrder !== 0) return statusOrder;\n const bTime = b.updated_at ?? '';\n const aTime = a.updated_at ?? '';\n return bTime < aTime ? -1 : bTime > aTime ? 1 : 0;\n });\n }\n\n async get(id: string): Promise<Task | null> {\n return readYaml<Task>(this.paths.taskPath(id));\n }\n\n async save(task: Task): Promise<void> {\n await ensureDir(this.paths.tasksDir);\n await writeYaml(this.paths.taskPath(task.id), task);\n }\n\n async delete(id: string): Promise<void> {\n try {\n await fs.unlink(this.paths.taskPath(id));\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') throw err;\n }\n }\n}\n\nfunction statusPriority(status: TaskStatus): number {\n const order: Record<TaskStatus, number> = {\n in_progress: 0,\n retrying: 1,\n review: 2,\n todo: 3,\n done: 4,\n failed: 5,\n cancelled: 6,\n };\n return order[status];\n}\n","/**\n * File-based agent store.\n *\n * Agents are stored as individual YAML files in .orchestry/agents/.\n * All writes are atomic (temp → rename).\n */\n\nimport type { Agent } from '../../domain/agent.js';\nimport type { IAgentStore } from './interfaces.js';\nimport type { Paths } from './paths.js';\nimport { listFiles, readYaml, writeYaml, ensureDir } from './fs-utils.js';\nimport fs from 'node:fs/promises';\n\nexport class AgentStore implements IAgentStore {\n constructor(private readonly paths: Paths) {}\n\n async list(): Promise<Agent[]> {\n await ensureDir(this.paths.agentsDir);\n const files = await listFiles(this.paths.agentsDir, '.yml');\n\n const results = await Promise.all(\n files.map(file => {\n const id = file.replace('.yml', '');\n return readYaml<Agent>(this.paths.agentPath(id));\n })\n );\n\n return results.filter((agent): agent is Agent => agent !== null);\n }\n\n async get(id: string): Promise<Agent | null> {\n return readYaml<Agent>(this.paths.agentPath(id));\n }\n\n async getByName(name: string): Promise<Agent | null> {\n const agents = await this.list();\n return agents.find((a) => a.name === name) ?? null;\n }\n\n async save(agent: Agent): Promise<void> {\n await ensureDir(this.paths.agentsDir);\n await writeYaml(this.paths.agentPath(agent.id), agent);\n }\n\n async delete(id: string): Promise<void> {\n try {\n await fs.unlink(this.paths.agentPath(id));\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') throw err;\n }\n }\n}\n","/**\n * File-based run store.\n *\n * Run metadata: .orchestry/runs/<id>.json (atomic write)\n * Run events: .orchestry/runs/<id>.jsonl (append-only)\n */\n\nimport type { Run, RunEvent } from '../../domain/run.js';\nimport type { IRunStore } from './interfaces.js';\nimport type { Paths } from './paths.js';\nimport {\n readJson,\n writeJson,\n appendJsonl,\n readJsonl,\n readJsonlTail,\n ensureDir,\n listFiles,\n pathExists,\n} from './fs-utils.js';\nimport { createReadStream } from 'node:fs';\n\nexport class RunStore implements IRunStore {\n constructor(private readonly paths: Paths) {}\n\n async save(run: Run): Promise<void> {\n await ensureDir(this.paths.runsDir);\n await writeJson(this.paths.runPath(run.id), run);\n }\n\n async get(id: string): Promise<Run | null> {\n return readJson<Run>(this.paths.runPath(id));\n }\n\n async listAll(): Promise<Run[]> {\n return this.listFiltered(() => true);\n }\n\n async listForTask(taskId: string): Promise<Run[]> {\n return this.listFiltered((run) => run.task_id === taskId);\n }\n\n async listForAgent(agentId: string): Promise<Run[]> {\n return this.listFiltered((run) => run.agent_id === agentId);\n }\n\n async appendEvent(runId: string, event: RunEvent): Promise<void> {\n await ensureDir(this.paths.runsDir);\n await appendJsonl(this.paths.runEventsPath(runId), event);\n }\n\n async readEvents(runId: string): Promise<RunEvent[]> {\n return readJsonl<RunEvent>(this.paths.runEventsPath(runId));\n }\n\n /**\n * Read the last N events for a run without loading the entire JSONL file.\n */\n async readEventsTail(runId: string, count: number): Promise<RunEvent[]> {\n return readJsonlTail<RunEvent>(this.paths.runEventsPath(runId), count);\n }\n\n async *streamEvents(runId: string, signal?: AbortSignal): AsyncGenerator<RunEvent> {\n const filePath = this.paths.runEventsPath(runId);\n\n // Wait for file to exist (max 30s to avoid infinite polling)\n const deadline = Date.now() + 30_000;\n while (!signal?.aborted && Date.now() < deadline) {\n if (await pathExists(filePath)) break;\n await new Promise((r) => setTimeout(r, 100));\n }\n\n if (signal?.aborted || Date.now() >= deadline) return;\n\n const stream = createReadStream(filePath);\n\n const { readLines } = await import('../process/process-manager.js');\n\n try {\n for await (const line of readLines(stream)) {\n if (signal?.aborted) break;\n if (line.trim()) {\n try {\n yield JSON.parse(line) as RunEvent;\n } catch {\n process.stderr.write(`[RunStore] skipping corrupt JSONL line: ${line.slice(0, 200)}\\n`);\n }\n }\n }\n } finally {\n stream.destroy();\n }\n }\n\n private async listFiltered(predicate: (run: Run) => boolean): Promise<Run[]> {\n await ensureDir(this.paths.runsDir);\n const files = await listFiles(this.paths.runsDir, '.json');\n\n // Batch reads to avoid EMFILE (macOS default ulimit 256)\n const BATCH = 64;\n const all: Run[] = [];\n for (let i = 0; i < files.length; i += BATCH) {\n const batch = files.slice(i, i + BATCH);\n const results = await Promise.all(\n batch.map(file => {\n const id = file.endsWith('.json') ? file.slice(0, -5) : file;\n return readJson<Run>(this.paths.runPath(id));\n }),\n );\n for (const run of results) {\n if (run !== null && predicate(run)) all.push(run);\n }\n }\n\n return all.sort(\n (a, b) => new Date(b.started_at).getTime() - new Date(a.started_at).getTime(),\n );\n }\n}\n","/**\n * Orchestrator runtime state.\n *\n * Persisted in .orchestry/state.json.\n * Updated on every mutation. Not intended for git.\n */\n\nexport interface RunningEntry {\n run_id: string;\n agent_id: string;\n task_id: string;\n pid: number;\n started_at: string;\n last_event_at: string;\n}\n\nexport interface RetryEntry {\n task_id: string;\n attempt: number;\n due_at: string;\n error: string;\n}\n\nexport interface OrchestratorState {\n version: 1;\n pid?: number;\n started_at?: string;\n onboardingCompleted?: boolean;\n running: Record<string, RunningEntry>;\n claimed: Set<string>;\n retry_queue: RetryEntry[];\n stats: {\n total_runs: number;\n total_tasks_completed: number;\n total_tasks_failed: number;\n total_tokens: { input: number; output: number; total: number };\n total_runtime_ms: number;\n };\n}\n\nexport const DEFAULT_STATE: OrchestratorState = {\n version: 1,\n onboardingCompleted: false,\n running: {},\n claimed: new Set<string>(),\n retry_queue: [],\n stats: {\n total_runs: 0,\n total_tasks_completed: 0,\n total_tasks_failed: 0,\n total_tokens: { input: 0, output: 0, total: 0 },\n total_runtime_ms: 0,\n },\n};\n","/**\n * File-based orchestrator state store.\n *\n * State is stored in .orchestry/state.json.\n * Updated atomically on every mutation.\n */\n\nimport { DEFAULT_STATE, type OrchestratorState } from '../../domain/state.js';\nimport type { IStateStore } from './interfaces.js';\nimport type { Paths } from './paths.js';\nimport { readJson, writeJson } from './fs-utils.js';\n\nexport class StateStore implements IStateStore {\n constructor(private readonly paths: Paths) {}\n\n async read(): Promise<OrchestratorState> {\n const raw = await readJson<Partial<OrchestratorState>>(this.paths.statePath);\n if (!raw) return structuredClone(DEFAULT_STATE);\n\n const defaults = structuredClone(DEFAULT_STATE);\n return {\n version: raw.version ?? defaults.version,\n pid: raw.pid,\n started_at: raw.started_at,\n onboardingCompleted: typeof raw.onboardingCompleted === 'boolean' ? raw.onboardingCompleted : false,\n running:\n raw.running && typeof raw.running === 'object' ? raw.running : defaults.running,\n claimed: Array.isArray(raw.claimed) ? new Set<string>(raw.claimed) : new Set<string>(defaults.claimed),\n retry_queue: Array.isArray(raw.retry_queue) ? raw.retry_queue : defaults.retry_queue,\n stats: {\n total_runs: raw.stats?.total_runs ?? defaults.stats.total_runs,\n total_tasks_completed:\n raw.stats?.total_tasks_completed ?? defaults.stats.total_tasks_completed,\n total_tasks_failed: raw.stats?.total_tasks_failed ?? defaults.stats.total_tasks_failed,\n total_tokens: raw.stats?.total_tokens ?? defaults.stats.total_tokens,\n total_runtime_ms: raw.stats?.total_runtime_ms ?? defaults.stats.total_runtime_ms,\n },\n };\n }\n\n async write(state: OrchestratorState): Promise<void> {\n const serializable = { ...state, claimed: Array.from(state.claimed) };\n await writeJson(this.paths.statePath, serializable);\n }\n}\n","/**\n * Configuration domain model.\n *\n * Represents the structure of .orchestry/config.yml\n */\n\nimport type { ApprovalPolicy } from './agent.js';\nimport type { WorkspaceMode } from './task.js';\n\nexport interface ProjectConfig {\n name: string;\n description?: string;\n}\n\nexport interface AgentDefaults {\n adapter: string;\n approval_policy: ApprovalPolicy;\n max_turns: number;\n timeout_ms: number;\n stall_timeout_ms: number;\n workspace_mode: WorkspaceMode;\n}\n\nexport interface TaskDefaults {\n max_attempts: number;\n priority: number;\n}\n\nexport interface SchedulingConfig {\n poll_interval_ms: number;\n max_concurrent_agents: number;\n retry_base_delay_ms: number;\n retry_max_delay_ms: number;\n}\n\nexport interface OrchestratorConfig {\n project: ProjectConfig;\n defaults: {\n agent: AgentDefaults;\n task: TaskDefaults;\n };\n scheduling: SchedulingConfig;\n prompt?: {\n template?: string;\n };\n}\n\nexport const DEFAULT_CONFIG: OrchestratorConfig = {\n project: {\n name: 'my-project',\n },\n defaults: {\n agent: {\n adapter: 'claude',\n approval_policy: 'auto',\n max_turns: 50,\n timeout_ms: 3_600_000,\n stall_timeout_ms: 300_000,\n workspace_mode: 'worktree',\n },\n task: {\n max_attempts: 3,\n priority: 3,\n },\n },\n scheduling: {\n poll_interval_ms: 10_000,\n max_concurrent_agents: 6,\n retry_base_delay_ms: 10_000,\n retry_max_delay_ms: 300_000,\n },\n};\n","/**\n * File-based config store.\n *\n * Reads/writes .orchestry/config.yml.\n * Supports dot-notation access for get/set.\n */\n\nimport { DEFAULT_CONFIG, type OrchestratorConfig } from '../../domain/config.js';\nimport type { IConfigStore } from './interfaces.js';\nimport type { Paths } from './paths.js';\nimport { readYaml, writeYaml } from './fs-utils.js';\n\nexport class ConfigStore implements IConfigStore {\n constructor(private readonly paths: Paths) {}\n\n async read(): Promise<OrchestratorConfig> {\n const config = await readYaml<Record<string, unknown>>(this.paths.configPath);\n return deepMerge(\n DEFAULT_CONFIG as unknown as Record<string, unknown>,\n config ?? {},\n ) as unknown as OrchestratorConfig;\n }\n\n async write(config: OrchestratorConfig): Promise<void> {\n await writeYaml(this.paths.configPath, config as unknown as Record<string, unknown>);\n }\n\n async get(keyPath: string): Promise<unknown> {\n const config = await this.read();\n return getByPath(config as unknown as Record<string, unknown>, keyPath);\n }\n\n async set(keyPath: string, value: unknown): Promise<void> {\n const config = await this.read();\n setByPath(config as unknown as Record<string, unknown>, keyPath, value);\n await this.write(config);\n }\n}\n\nfunction getByPath(obj: Record<string, unknown>, keyPath: string): unknown {\n const keys = keyPath.split('.');\n let current: unknown = obj;\n\n for (const key of keys) {\n if (current === null || current === undefined || typeof current !== 'object') {\n return undefined;\n }\n current = (current as Record<string, unknown>)[key];\n }\n\n return current;\n}\n\nfunction setByPath(obj: Record<string, unknown>, keyPath: string, value: unknown): void {\n const keys = keyPath.split('.');\n let current: Record<string, unknown> = obj;\n\n for (let i = 0; i < keys.length - 1; i++) {\n const key = keys[i]!;\n if (typeof current[key] !== 'object' || current[key] === null) {\n current[key] = {};\n }\n current = current[key] as Record<string, unknown>;\n }\n\n const lastKey = keys[keys.length - 1]!;\n current[lastKey] = value;\n}\n\nfunction deepMerge(target: Record<string, unknown>, source: Record<string, unknown>): Record<string, unknown> {\n const result = { ...target };\n\n for (const key of Object.keys(source)) {\n const sourceVal = source[key];\n const targetVal = result[key];\n\n if (\n sourceVal !== null &&\n sourceVal !== undefined &&\n typeof sourceVal === 'object' &&\n !Array.isArray(sourceVal) &&\n typeof targetVal === 'object' &&\n targetVal !== null &&\n !Array.isArray(targetVal)\n ) {\n result[key] = deepMerge(\n targetVal as Record<string, unknown>,\n sourceVal as Record<string, unknown>,\n );\n } else {\n result[key] = sourceVal;\n }\n }\n\n return result;\n}\n","/**\n * Global configuration — persists across projects.\n *\n * Stored at ~/.orchestry/global.yml\n */\n\n/** Activity feed filter preset name */\nexport type ActivityFilterPreset = 'all' | 'text' | 'tools' | 'errors' | 'events';\n\nexport interface TuiPreferences {\n activity_filter: ActivityFilterPreset;\n}\n\nexport interface GlobalConfig {\n tui: TuiPreferences;\n}\n\nexport const DEFAULT_GLOBAL_CONFIG: GlobalConfig = {\n tui: {\n activity_filter: 'all',\n },\n};\n","/**\n * Global config store — reads/writes ~/.orchestry/global.yml\n *\n * Persists across projects. Creates directory if needed.\n */\n\nimport path from 'node:path';\nimport { homedir } from 'node:os';\nimport { mkdir } from 'node:fs/promises';\nimport { DEFAULT_GLOBAL_CONFIG, type GlobalConfig } from '../../domain/global-config.js';\nimport { readYaml, writeYaml } from './fs-utils.js';\n\nconst GLOBAL_DIR = path.join(homedir(), '.orchestry');\nconst GLOBAL_CONFIG_PATH = path.join(GLOBAL_DIR, 'global.yml');\n\nexport class GlobalConfigStore {\n async read(): Promise<GlobalConfig> {\n const data = await readYaml<Record<string, unknown>>(GLOBAL_CONFIG_PATH);\n if (!data) return { ...DEFAULT_GLOBAL_CONFIG };\n return {\n tui: {\n activity_filter: (data.tui as Record<string, unknown>)?.activity_filter as GlobalConfig['tui']['activity_filter']\n ?? DEFAULT_GLOBAL_CONFIG.tui.activity_filter,\n },\n };\n }\n\n async write(config: GlobalConfig): Promise<void> {\n await mkdir(GLOBAL_DIR, { recursive: true });\n await writeYaml(GLOBAL_CONFIG_PATH, config as unknown as Record<string, unknown>);\n }\n\n async set<K extends keyof GlobalConfig['tui']>(key: K, value: GlobalConfig['tui'][K]): Promise<void> {\n const config = await this.read();\n config.tui[key] = value;\n await this.write(config);\n }\n}\n","/**\n * File-based shared context store.\n *\n * Entries are stored as individual JSON files in .orchestry/context/.\n * Supports optional TTL for automatic expiration.\n * All writes are atomic (temp → rename).\n */\n\nimport type { ContextEntry, IContextStore } from './interfaces.js';\nimport type { Paths } from './paths.js';\nimport { listFiles, readJson, writeJson, ensureDir } from './fs-utils.js';\nimport fs from 'node:fs/promises';\n\nexport class ContextStore implements IContextStore {\n constructor(private readonly paths: Paths) {}\n\n async get(key: string): Promise<ContextEntry | null> {\n const entry = await readJson<ContextEntry>(this.paths.contextPath(key));\n if (!entry) return null;\n\n if (isExpired(entry)) {\n await this.delete(key);\n return null;\n }\n\n return entry;\n }\n\n /** Max TTL: 30 days in milliseconds */\n private static readonly MAX_TTL_MS = 30 * 24 * 60 * 60 * 1000;\n\n async set(key: string, value: string, ttlMs?: number): Promise<void> {\n if (ttlMs !== undefined) {\n if (!Number.isFinite(ttlMs) || ttlMs <= 0 || ttlMs > ContextStore.MAX_TTL_MS) {\n throw new Error(`TTL must be a positive number up to ${ContextStore.MAX_TTL_MS}ms (30 days)`);\n }\n }\n\n await ensureDir(this.paths.contextDir);\n\n const now = new Date().toISOString();\n const existing = await readJson<ContextEntry>(this.paths.contextPath(key));\n\n const entry: ContextEntry = {\n key,\n value,\n created_at: existing?.created_at ?? now,\n updated_at: now,\n ttl_ms: ttlMs,\n expires_at: ttlMs ? new Date(Date.now() + ttlMs).toISOString() : undefined,\n };\n\n await writeJson(this.paths.contextPath(key), entry);\n }\n\n async delete(key: string): Promise<void> {\n try {\n await fs.unlink(this.paths.contextPath(key));\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') throw err;\n }\n }\n\n async list(): Promise<ContextEntry[]> {\n await ensureDir(this.paths.contextDir);\n const files = await listFiles(this.paths.contextDir, '.json');\n\n const results = await Promise.all(\n files.map(file => {\n const key = file.replace('.json', '');\n return readJson<ContextEntry>(this.paths.contextPath(key));\n }),\n );\n\n const entries: ContextEntry[] = [];\n for (const entry of results) {\n if (!entry) continue;\n if (isExpired(entry)) {\n await this.delete(entry.key);\n continue;\n }\n entries.push(entry);\n }\n\n return entries.sort((a, b) => a.key.localeCompare(b.key));\n }\n\n async getAll(): Promise<Record<string, string>> {\n const entries = await this.list();\n const result: Record<string, string> = {};\n for (const entry of entries) {\n result[entry.key] = entry.value;\n }\n return result;\n }\n}\n\nfunction isExpired(entry: ContextEntry): boolean {\n if (!entry.expires_at) return false;\n return new Date(entry.expires_at).getTime() < Date.now();\n}\n","/**\n * File-based message store.\n *\n * Each message is a JSON file in .orchestry/messages/.\n * All writes are atomic (temp → rename).\n */\n\nimport type { Message } from '../../domain/message.js';\nimport type { IMessageStore } from './interfaces.js';\nimport type { Paths } from './paths.js';\nimport { listFiles, readJson, writeJson, ensureDir } from './fs-utils.js';\nimport fs from 'node:fs/promises';\n\nexport class MessageStore implements IMessageStore {\n constructor(private readonly paths: Paths) {}\n\n async save(message: Message): Promise<void> {\n await ensureDir(this.paths.messagesDir);\n await writeJson(this.paths.messagePath(message.id), message);\n }\n\n async get(id: string): Promise<Message | null> {\n return readJson<Message>(this.paths.messagePath(id));\n }\n\n async list(): Promise<Message[]> {\n const files = await listFiles(this.paths.messagesDir, '.json');\n const results = await Promise.all(\n files.map((f) => readJson<Message>(this.paths.messagePath(f.replace('.json', '')))),\n );\n return results\n .filter((m): m is Message => m !== null)\n .sort((a, b) => a.created_at.localeCompare(b.created_at));\n }\n\n async listPending(agentId: string): Promise<Message[]> {\n const all = await this.list();\n const now = Date.now();\n return all.filter((m) => {\n if (m.status !== 'pending') return false;\n if (m.expires_at && new Date(m.expires_at).getTime() < now) return false;\n return m.to_agent_id === agentId;\n });\n }\n\n async markDelivered(id: string): Promise<void> {\n const msg = await this.get(id);\n if (!msg) return;\n msg.status = 'delivered';\n msg.delivered_at = new Date().toISOString();\n await writeJson(this.paths.messagePath(id), msg);\n }\n\n async delete(id: string): Promise<void> {\n try {\n await fs.unlink(this.paths.messagePath(id));\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') throw err;\n }\n }\n\n async purgeExpired(): Promise<number> {\n const all = await this.list();\n const now = Date.now();\n const toDelete = all.filter((m) => {\n const isExpired = m.expires_at && new Date(m.expires_at).getTime() < now;\n const isOldDelivered = m.delivered_at && now - new Date(m.delivered_at).getTime() > 3600_000;\n return isExpired || isOldDelivered;\n });\n await Promise.all(toDelete.map((m) => this.delete(m.id)));\n return toDelete.length;\n }\n}\n","/**\n * Goal domain model.\n *\n * A Goal is a persistent objective that drives autonomous agent work.\n * Goals have lower priority than tasks — agents work on goals only\n * when no regular tasks are available.\n *\n * State machine: active → achieved | abandoned\n * active ↔ paused\n */\n\nexport const GOAL_STATUSES = ['active', 'paused', 'achieved', 'abandoned'] as const;\nexport type GoalStatus = (typeof GOAL_STATUSES)[number];\n\n/** Terminal goal statuses — no further transitions possible. */\nexport const TERMINAL_GOAL_STATUSES: ReadonlySet<GoalStatus> = new Set(['achieved', 'abandoned']);\n\nexport function isGoalTerminal(status: GoalStatus): boolean {\n return TERMINAL_GOAL_STATUSES.has(status);\n}\n\n/** Canonical sort order for goal statuses. */\nexport const GOAL_STATUS_ORDER: Record<GoalStatus, number> = {\n active: 0,\n paused: 1,\n achieved: 2,\n abandoned: 3,\n};\n\nexport interface Goal {\n id: string;\n title: string;\n description: string;\n status: GoalStatus;\n assignee?: string;\n created_at: string;\n updated_at?: string;\n}\n\nexport interface CreateGoalInput {\n title: string;\n description?: string;\n assignee?: string;\n}\n","/**\n * File-based goal store.\n *\n * Goals are stored as individual YAML files in .orchestry/goals/.\n * All writes are atomic (temp → rename).\n */\n\nimport { GOAL_STATUS_ORDER, type Goal, type GoalStatus } from '../../domain/goal.js';\nimport type { IGoalStore } from './interfaces.js';\nimport type { Paths } from './paths.js';\nimport { listFiles, readYaml, writeYaml } from './fs-utils.js';\nimport fs from 'node:fs/promises';\n\nexport class GoalStore implements IGoalStore {\n constructor(private readonly paths: Paths) {}\n\n async list(filter?: { status?: GoalStatus }): Promise<Goal[]> {\n const files = await listFiles(this.paths.goalsDir, '.yml');\n\n const results = await Promise.all(\n files.map(file => {\n const id = file.replace('.yml', '');\n return readYaml<Goal>(this.paths.goalPath(id));\n })\n );\n\n const goals = results.filter(\n (goal): goal is Goal => goal !== null && (!filter?.status || goal.status === filter.status)\n );\n\n return goals.sort((a, b) => {\n const statusOrder = GOAL_STATUS_ORDER[a.status] - GOAL_STATUS_ORDER[b.status];\n if (statusOrder !== 0) return statusOrder;\n const bTime = b.updated_at ?? '';\n const aTime = a.updated_at ?? '';\n return bTime < aTime ? -1 : bTime > aTime ? 1 : 0;\n });\n }\n\n async get(id: string): Promise<Goal | null> {\n return readYaml<Goal>(this.paths.goalPath(id));\n }\n\n async save(goal: Goal): Promise<void> {\n await writeYaml(this.paths.goalPath(goal.id), goal);\n }\n\n async delete(id: string): Promise<void> {\n try {\n await fs.unlink(this.paths.goalPath(id));\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') throw err;\n }\n }\n}\n\n","/**\n * File-based team store.\n *\n * Teams stored as YAML files in .orchestry/teams/.\n */\n\nimport type { Team } from '../../domain/team.js';\nimport type { ITeamStore } from './interfaces.js';\nimport type { Paths } from './paths.js';\nimport { listFiles, readYaml, writeYaml, ensureDir } from './fs-utils.js';\nimport fs from 'node:fs/promises';\n\nexport class TeamStore implements ITeamStore {\n constructor(private readonly paths: Paths) {}\n\n async save(team: Team): Promise<void> {\n await ensureDir(this.paths.teamsDir);\n await writeYaml(this.paths.teamPath(team.id), team);\n }\n\n async get(id: string): Promise<Team | null> {\n return readYaml<Team>(this.paths.teamPath(id));\n }\n\n async getByName(name: string): Promise<Team | null> {\n const teams = await this.list();\n return teams.find((t) => t.name === name) ?? null;\n }\n\n async list(): Promise<Team[]> {\n await ensureDir(this.paths.teamsDir);\n const files = await listFiles(this.paths.teamsDir, '.yml');\n const results = await Promise.all(\n files.map((f) => readYaml<Team>(this.paths.teamPath(f.replace('.yml', '')))),\n );\n return results.filter((t): t is Team => t !== null);\n }\n\n async delete(id: string): Promise<void> {\n try {\n await fs.unlink(this.paths.teamPath(id));\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') throw err;\n }\n }\n}\n","/**\n * Message domain model.\n *\n * A Message is a unit of inter-agent communication.\n * Messages are stored as JSON files and injected into agent prompts at dispatch time.\n */\n\nexport type MessageChannel = 'direct' | 'broadcast' | 'lead';\n\nexport type MessageStatus = 'pending' | 'delivered' | 'expired';\n\nexport interface Message {\n id: string;\n channel: MessageChannel;\n from_agent_id: string;\n to_agent_id: string | null;\n subject: string;\n body: string;\n created_at: string;\n expires_at?: string;\n status: MessageStatus;\n delivered_at?: string;\n team_id?: string;\n reply_to?: string;\n}\n\nexport interface CreateMessageInput {\n channel: MessageChannel;\n from_agent_id: string;\n to_agent_id?: string;\n subject: string;\n body: string;\n ttl_ms?: number;\n team_id?: string;\n reply_to?: string;\n}\n\n/** Maximum TTL: 7 days */\nexport const MAX_MESSAGE_TTL_MS = 7 * 24 * 60 * 60 * 1000;\n\n/** Default TTL: 24 hours */\nexport const DEFAULT_MESSAGE_TTL_MS = 24 * 60 * 60 * 1000;\n","/**\n * MessageService — business logic for inter-agent messaging.\n *\n * Handles message creation, routing (direct/broadcast/lead),\n * delivery into agent prompts, and cleanup of expired messages.\n */\n\nimport { nanoid } from 'nanoid';\nimport type { Message, CreateMessageInput, MessageChannel } from '../domain/message.js';\nimport { DEFAULT_MESSAGE_TTL_MS, MAX_MESSAGE_TTL_MS } from '../domain/message.js';\nimport { InvalidArgumentsError } from '../domain/errors.js';\nimport type { IMessageStore, IAgentStore, ITeamStore } from '../infrastructure/storage/interfaces.js';\nimport type { EventBus } from './event-bus.js';\n\nexport class MessageService {\n constructor(\n private readonly messageStore: IMessageStore,\n private readonly agentStore: IAgentStore,\n private readonly teamStore: ITeamStore,\n private readonly eventBus: EventBus,\n ) {}\n\n /**\n * Send a message. For broadcast, creates one message per recipient agent.\n * For 'lead' channel, resolves team lead and sends direct.\n */\n async send(input: CreateMessageInput): Promise<Message[]> {\n if (!input.body.trim()) throw new InvalidArgumentsError('Message body is required');\n\n const ttlMs = input.ttl_ms ?? DEFAULT_MESSAGE_TTL_MS;\n if (ttlMs <= 0 || ttlMs > MAX_MESSAGE_TTL_MS) {\n throw new InvalidArgumentsError(`TTL must be between 1ms and ${MAX_MESSAGE_TTL_MS}ms`);\n }\n\n // Validate sender exists\n const sender = await this.agentStore.get(input.from_agent_id);\n if (!sender && input.from_agent_id !== 'cli') {\n throw new InvalidArgumentsError(`Sender agent not found: ${input.from_agent_id}`);\n }\n\n const now = new Date();\n const baseMessage = {\n channel: input.channel,\n from_agent_id: input.from_agent_id,\n subject: (input.subject || '(no subject)').slice(0, 200),\n body: input.body.slice(0, 4000),\n created_at: now.toISOString(),\n expires_at: new Date(now.getTime() + ttlMs).toISOString(),\n status: 'pending' as const,\n team_id: input.team_id,\n reply_to: input.reply_to,\n };\n\n const messages: Message[] = [];\n\n if (input.channel === 'broadcast') {\n // Fan-out: one message per agent (excluding sender)\n let agents = await this.agentStore.list();\n\n // If team_id specified, only broadcast to team members\n if (input.team_id) {\n const team = await this.teamStore.get(input.team_id);\n if (team) {\n const memberIds = new Set(team.members.map((m) => m.agent_id));\n agents = agents.filter((a) => memberIds.has(a.id));\n }\n }\n\n const recipients = agents.filter((a) => a.id !== input.from_agent_id && a.status !== 'disabled');\n const broadcastMsgs = recipients.map((agent) => ({\n ...baseMessage,\n id: `msg_${nanoid(7)}`,\n to_agent_id: agent.id,\n } as Message));\n await Promise.all(broadcastMsgs.map((msg) => this.messageStore.save(msg)));\n for (const msg of broadcastMsgs) {\n messages.push(msg);\n this.emitSent(msg);\n }\n } else if (input.channel === 'lead') {\n // Resolve team lead\n if (!input.team_id) throw new InvalidArgumentsError('team_id is required for lead channel');\n const team = await this.teamStore.get(input.team_id);\n if (!team) throw new InvalidArgumentsError(`Team not found: ${input.team_id}`);\n\n const msg: Message = {\n ...baseMessage,\n id: `msg_${nanoid(7)}`,\n to_agent_id: team.lead_agent_id,\n };\n await this.messageStore.save(msg);\n messages.push(msg);\n this.emitSent(msg);\n } else {\n // Direct message\n if (!input.to_agent_id) throw new InvalidArgumentsError('to_agent_id is required for direct messages');\n const recipient = await this.agentStore.get(input.to_agent_id);\n if (!recipient) throw new InvalidArgumentsError(`Recipient agent not found: ${input.to_agent_id}`);\n\n const msg: Message = {\n ...baseMessage,\n id: `msg_${nanoid(7)}`,\n to_agent_id: input.to_agent_id,\n };\n await this.messageStore.save(msg);\n messages.push(msg);\n this.emitSent(msg);\n }\n\n return messages;\n }\n\n /**\n * Drain mailbox: fetch pending messages for an agent and mark them delivered.\n * Called by the orchestrator during dispatchTask.\n */\n async drainMailbox(agentId: string, taskId: string): Promise<Message[]> {\n const pending = await this.messageStore.listPending(agentId);\n await Promise.all(pending.map((msg) => this.messageStore.markDelivered(msg.id)));\n for (const msg of pending) {\n this.eventBus.emit({\n type: 'message:delivered',\n messageId: msg.id,\n toAgentId: agentId,\n taskId,\n });\n }\n return pending;\n }\n\n async listAll(): Promise<Message[]> {\n return this.messageStore.list();\n }\n\n async listPendingForAgent(agentId: string): Promise<Message[]> {\n return this.messageStore.listPending(agentId);\n }\n\n async listForAgent(agentId: string): Promise<Message[]> {\n const all = await this.messageStore.list();\n return all.filter((m) => m.to_agent_id === agentId || m.from_agent_id === agentId);\n }\n\n async purgeExpired(): Promise<number> {\n return this.messageStore.purgeExpired();\n }\n\n private emitSent(msg: Message): void {\n this.eventBus.emit({\n type: 'message:sent',\n messageId: msg.id,\n fromAgentId: msg.from_agent_id,\n toAgentId: msg.to_agent_id,\n channel: msg.channel,\n });\n }\n}\n","/**\n * Goal service — business logic for goal lifecycle.\n *\n * Goals are persistent objectives that drive autonomous agent work.\n * State machine: active → achieved | abandoned\n * active ↔ paused\n *\n * Side effect: assigning an agent to a goal auto-enables autonomous mode;\n * removing the last active goal from an agent auto-disables it.\n */\n\nimport { nanoid } from 'nanoid';\nimport type { Goal, GoalStatus, CreateGoalInput } from '../domain/goal.js';\nimport { isGoalTerminal } from '../domain/goal.js';\nimport { AUTONOMOUS_LABEL, type Task } from '../domain/task.js';\nimport { GoalNotFoundError, InvalidArgumentsError } from '../domain/errors.js';\nimport type { IGoalStore, IContextStore } from '../infrastructure/storage/interfaces.js';\nimport type { EventBus } from './event-bus.js';\nimport type { AgentService } from './agent-service.js';\nimport type { TaskService } from './task-service.js';\n\nconst VALID_TRANSITIONS: Record<GoalStatus, GoalStatus[]> = {\n active: ['paused', 'achieved', 'abandoned'],\n paused: ['active', 'abandoned'],\n achieved: [],\n abandoned: [],\n};\n\nexport class GoalService {\n constructor(\n private readonly goalStore: IGoalStore,\n private readonly eventBus: EventBus,\n private readonly agentService?: AgentService,\n private readonly taskService?: TaskService,\n private readonly contextStore?: IContextStore,\n ) {}\n\n async create(input: CreateGoalInput): Promise<Goal> {\n if (!input.title.trim()) {\n throw new InvalidArgumentsError('Goal title is required');\n }\n\n const now = new Date().toISOString();\n const goal: Goal = {\n id: `goal_${nanoid(7)}`,\n title: input.title.trim(),\n description: input.description?.trim() ?? '',\n status: 'active',\n assignee: input.assignee,\n created_at: now,\n updated_at: now,\n };\n\n await this.goalStore.save(goal);\n this.eventBus.emit({ type: 'goal:created', goalId: goal.id, title: goal.title });\n\n if (goal.assignee) {\n await this.enableAutonomous(goal.assignee);\n }\n\n return goal;\n }\n\n async list(filter?: { status?: GoalStatus }): Promise<Goal[]> {\n return this.goalStore.list(filter);\n }\n\n async get(id: string): Promise<Goal> {\n const goal = await this.goalStore.get(id);\n if (!goal) throw new GoalNotFoundError(id);\n return goal;\n }\n\n async updateStatus(id: string, newStatus: GoalStatus): Promise<Goal> {\n const goal = await this.get(id);\n const oldStatus = goal.status;\n\n if (!VALID_TRANSITIONS[oldStatus].includes(newStatus)) {\n throw new InvalidArgumentsError(\n `Cannot transition goal from '${oldStatus}' to '${newStatus}'`,\n );\n }\n\n goal.status = newStatus;\n goal.updated_at = new Date().toISOString();\n await this.goalStore.save(goal);\n\n this.eventBus.emit({ type: 'goal:status_changed', goalId: id, from: oldStatus, to: newStatus });\n\n if (goal.assignee) {\n if (newStatus === 'paused') {\n // Pause: disable autonomous + cancel pending autonomous tasks\n await this.maybeDisableAutonomous(goal.assignee);\n await this.cancelPendingAutonomousTasks(goal.assignee);\n } else if (newStatus === 'active' && oldStatus === 'paused') {\n // Resume: re-enable autonomous mode\n await this.enableAutonomous(goal.assignee);\n } else if (isGoalTerminal(newStatus)) {\n // Terminal: check if agent still has other active goals\n await this.maybeDisableAutonomous(goal.assignee);\n }\n }\n\n return goal;\n }\n\n async update(id: string, fields: { title?: string; description?: string; assignee?: string }): Promise<Goal> {\n const goal = await this.get(id);\n const oldAssignee = goal.assignee;\n\n if (fields.title !== undefined) {\n if (!fields.title.trim()) throw new InvalidArgumentsError('Goal title cannot be empty');\n goal.title = fields.title.trim();\n }\n if (fields.description !== undefined) goal.description = fields.description.trim();\n if (fields.assignee !== undefined) goal.assignee = fields.assignee || undefined;\n\n goal.updated_at = new Date().toISOString();\n await this.goalStore.save(goal);\n this.eventBus.emit({ type: 'goal:updated', goalId: id });\n\n // Handle assignee change — independent agents, run in parallel\n const newAssignee = goal.assignee;\n if (newAssignee !== oldAssignee) {\n const ops: Promise<void>[] = [];\n if (newAssignee) ops.push(this.enableAutonomous(newAssignee));\n if (oldAssignee) ops.push(this.maybeDisableAutonomous(oldAssignee));\n await Promise.all(ops);\n }\n\n return goal;\n }\n\n async delete(id: string): Promise<void> {\n const goal = await this.get(id);\n const { assignee } = goal;\n await this.goalStore.delete(id);\n this.eventBus.emit({ type: 'goal:deleted', goalId: id });\n\n if (assignee) {\n await this.maybeDisableAutonomous(assignee);\n }\n }\n\n async listTasksForGoal(goalId: string): Promise<Task[]> {\n return this.taskService?.list({ goalId }) ?? [];\n }\n\n async getProgressReport(goalId: string): Promise<string | undefined> {\n if (!this.contextStore) return undefined;\n const entry = await this.contextStore.get(`${goalId}-progress`);\n return entry?.value;\n }\n\n /** Enable autonomous mode on an agent. */\n private async enableAutonomous(agentId: string): Promise<void> {\n if (!this.agentService) return;\n try {\n await this.agentService.setAutonomous(agentId, true);\n } catch {\n // Agent may not exist — ignore silently\n }\n }\n\n /** Check if an agent has at least one active goal. */\n private async hasActiveGoalsForAgent(agentId: string): Promise<boolean> {\n const activeGoals = await this.goalStore.list({ status: 'active' });\n return activeGoals.some((g) => g.assignee === agentId);\n }\n\n /** Cancel dispatchable (todo/retrying) autonomous tasks assigned to the agent. */\n private async cancelPendingAutonomousTasks(agentId: string): Promise<void> {\n if (!this.taskService) return;\n try {\n const [todos, retrying] = await Promise.all([\n this.taskService.list({ status: 'todo' }),\n this.taskService.list({ status: 'retrying' }),\n ]);\n const pending = [...todos, ...retrying].filter(\n (t) => t.assignee === agentId && t.labels?.includes(AUTONOMOUS_LABEL),\n );\n await Promise.all(pending.map((t) => this.taskService!.cancel(t.id).catch(() => {})));\n } catch {\n // Best-effort cleanup\n }\n }\n\n /** Disable autonomous if agent has no other active goals. */\n private async maybeDisableAutonomous(agentId: string): Promise<void> {\n if (!this.agentService) return;\n try {\n if (!(await this.hasActiveGoalsForAgent(agentId))) {\n await this.agentService.setAutonomous(agentId, false);\n }\n } catch {\n // Agent may not exist — ignore silently\n }\n }\n}\n","/**\n * Team domain model.\n *\n * A Team groups agents with a lead for coordinated work.\n * Teams share a task pool and enable broadcast messaging.\n */\n\nexport type TeamStatus = 'active' | 'paused' | 'disbanded';\n\nexport interface TeamMember {\n agent_id: string;\n role: 'lead' | 'member';\n joined_at: string;\n}\n\nexport interface Team {\n id: string;\n name: string;\n description?: string;\n status: TeamStatus;\n members: TeamMember[];\n task_pool: string[];\n lead_agent_id: string;\n created_at: string;\n updated_at: string;\n config: TeamConfig;\n}\n\nexport interface TeamConfig {\n max_concurrent_tasks?: number;\n auto_claim: boolean;\n message_ttl_ms?: number;\n}\n\nexport interface CreateTeamInput {\n name: string;\n description?: string;\n lead_agent_id: string;\n member_agent_ids?: string[];\n config?: Partial<TeamConfig>;\n}\n\nexport const DEFAULT_TEAM_CONFIG: TeamConfig = {\n auto_claim: true,\n message_ttl_ms: 24 * 60 * 60 * 1000,\n};\n","/**\n * TeamService — business logic for team lifecycle.\n *\n * Manages team creation, membership, task pool, and self-claiming.\n */\n\nimport { nanoid } from 'nanoid';\nimport type { Team, CreateTeamInput, TeamMember } from '../domain/team.js';\nimport { DEFAULT_TEAM_CONFIG } from '../domain/team.js';\nimport { InvalidArgumentsError, TeamNotFoundError } from '../domain/errors.js';\nimport type { ITeamStore, IAgentStore, ITaskStore } from '../infrastructure/storage/interfaces.js';\nimport type { EventBus } from './event-bus.js';\n\nexport class TeamService {\n constructor(\n private readonly teamStore: ITeamStore,\n private readonly agentStore: IAgentStore,\n private readonly taskStore: ITaskStore,\n private readonly eventBus: EventBus,\n ) {}\n\n async create(input: CreateTeamInput): Promise<Team> {\n if (!input.name.trim()) throw new InvalidArgumentsError('Team name is required');\n\n const lead = await this.agentStore.get(input.lead_agent_id);\n if (!lead) throw new InvalidArgumentsError(`Lead agent not found: ${input.lead_agent_id}`);\n\n const existing = await this.teamStore.getByName(input.name.trim());\n if (existing) throw new InvalidArgumentsError(`Team \"${input.name}\" already exists`);\n\n const now = new Date().toISOString();\n const leadMember: TeamMember = { agent_id: input.lead_agent_id, role: 'lead', joined_at: now };\n\n const additionalMembers: TeamMember[] = [];\n for (const agentId of input.member_agent_ids ?? []) {\n if (agentId === input.lead_agent_id) continue;\n const agent = await this.agentStore.get(agentId);\n if (!agent) throw new InvalidArgumentsError(`Member agent not found: ${agentId}`);\n additionalMembers.push({ agent_id: agentId, role: 'member', joined_at: now });\n }\n\n const team: Team = {\n id: `team_${nanoid(7)}`,\n name: input.name.trim(),\n description: input.description,\n status: 'active',\n members: [leadMember, ...additionalMembers],\n task_pool: [],\n lead_agent_id: input.lead_agent_id,\n created_at: now,\n updated_at: now,\n config: { ...DEFAULT_TEAM_CONFIG, ...(input.config ?? {}) },\n };\n\n await this.teamStore.save(team);\n\n this.eventBus.emit({ type: 'team:created', teamId: team.id, name: team.name, leadAgentId: team.lead_agent_id });\n for (const member of additionalMembers) {\n this.eventBus.emit({ type: 'team:member_joined', teamId: team.id, agentId: member.agent_id });\n }\n\n return team;\n }\n\n async get(id: string): Promise<Team> {\n const team = await this.teamStore.get(id);\n if (!team) throw new TeamNotFoundError(id);\n return team;\n }\n\n async list(): Promise<Team[]> {\n return this.teamStore.list();\n }\n\n async join(teamId: string, agentId: string): Promise<Team> {\n const team = await this.get(teamId);\n if (team.members.some((m) => m.agent_id === agentId)) {\n throw new InvalidArgumentsError(`Agent ${agentId} is already a member of team ${teamId}`);\n }\n const agent = await this.agentStore.get(agentId);\n if (!agent) throw new InvalidArgumentsError(`Agent not found: ${agentId}`);\n\n team.members.push({ agent_id: agentId, role: 'member', joined_at: new Date().toISOString() });\n team.updated_at = new Date().toISOString();\n await this.teamStore.save(team);\n\n this.eventBus.emit({ type: 'team:member_joined', teamId, agentId });\n return team;\n }\n\n async leave(teamId: string, agentId: string): Promise<Team> {\n const team = await this.get(teamId);\n if (agentId === team.lead_agent_id) {\n throw new InvalidArgumentsError('Lead cannot leave team. Disband the team or transfer lead first.');\n }\n team.members = team.members.filter((m) => m.agent_id !== agentId);\n team.updated_at = new Date().toISOString();\n await this.teamStore.save(team);\n\n this.eventBus.emit({ type: 'team:member_left', teamId, agentId });\n return team;\n }\n\n async addTask(teamId: string, taskId: string): Promise<Team> {\n const team = await this.get(teamId);\n const task = await this.taskStore.get(taskId);\n if (!task) throw new InvalidArgumentsError(`Task not found: ${taskId}`);\n\n if (!team.task_pool.includes(taskId)) {\n team.task_pool.push(taskId);\n team.updated_at = new Date().toISOString();\n await this.teamStore.save(team);\n this.eventBus.emit({ type: 'team:task_added', teamId, taskId });\n }\n return team;\n }\n\n async removeTask(teamId: string, taskId: string): Promise<Team> {\n const team = await this.get(teamId);\n team.task_pool = team.task_pool.filter((id) => id !== taskId);\n team.updated_at = new Date().toISOString();\n await this.teamStore.save(team);\n return team;\n }\n\n async setLead(teamId: string, agentId: string): Promise<Team> {\n const team = await this.get(teamId);\n const member = team.members.find((m) => m.agent_id === agentId);\n if (!member) throw new InvalidArgumentsError(`Agent ${agentId} is not a member of team ${teamId}`);\n\n // Demote current lead\n const currentLead = team.members.find((m) => m.agent_id === team.lead_agent_id);\n if (currentLead) currentLead.role = 'member';\n\n member.role = 'lead';\n team.lead_agent_id = agentId;\n team.updated_at = new Date().toISOString();\n await this.teamStore.save(team);\n return team;\n }\n\n async disband(teamId: string): Promise<void> {\n const team = await this.get(teamId);\n team.status = 'disbanded';\n team.updated_at = new Date().toISOString();\n await this.teamStore.save(team);\n this.eventBus.emit({ type: 'team:disbanded', teamId });\n }\n\n /**\n * Find the team an agent belongs to (if any).\n */\n async findTeamForAgent(agentId: string): Promise<Team | null> {\n const teams = await this.teamStore.list();\n return teams.find((t) => t.status === 'active' && t.members.some((m) => m.agent_id === agentId)) ?? null;\n }\n}\n","/**\n * Dependency injection container.\n *\n * Plain TypeScript object — no framework, no decorators.\n * Two modes:\n * - LightContainer: stores + services only (fast, for read-only commands)\n * - Container: full (+ orchestrator, adapters, template engine)\n */\n\nimport type { OrchestratorConfig } from './domain/config.js';\nimport type { CliContext } from './cli/context.js';\nimport type { ITaskStore, IAgentStore, IRunStore, IStateStore, IConfigStore, IContextStore, IMessageStore, IGoalStore, ITeamStore } from './infrastructure/storage/interfaces.js';\nimport type { IWorkspaceManager } from './infrastructure/workspace/interface.js';\nimport type { ITemplateEngine } from './infrastructure/template/template-engine.js';\nimport type { IProcessManager } from './infrastructure/process/process-manager.js';\nimport type { AdapterRegistry } from './infrastructure/adapters/registry.js';\n\nimport type { GlobalConfig } from './domain/global-config.js';\nimport { Paths } from './infrastructure/storage/paths.js';\nimport { TaskStore } from './infrastructure/storage/task-store.js';\nimport { AgentStore } from './infrastructure/storage/agent-store.js';\nimport { RunStore } from './infrastructure/storage/run-store.js';\nimport { StateStore } from './infrastructure/storage/state-store.js';\nimport { ConfigStore } from './infrastructure/storage/config-store.js';\nimport { GlobalConfigStore } from './infrastructure/storage/global-config-store.js';\nimport { ContextStore } from './infrastructure/storage/context-store.js';\nimport { MessageStore } from './infrastructure/storage/message-store.js';\nimport { GoalStore } from './infrastructure/storage/goal-store.js';\nimport { TeamStore } from './infrastructure/storage/team-store.js';\n\nimport { EventBus } from './application/event-bus.js';\nimport { TaskService } from './application/task-service.js';\nimport { AgentService } from './application/agent-service.js';\nimport { RunService } from './application/run-service.js';\nimport { MessageService } from './application/message-service.js';\nimport { GoalService } from './application/goal-service.js';\nimport { TeamService } from './application/team-service.js';\n\nimport type { Orchestrator } from './application/orchestrator.js';\nimport type { DoctorService } from './application/doctor-service.js';\n\n/** Light container — stores + services. No heavy deps (adapters, orchestrator, LiquidJS). */\nexport interface LightContainer {\n // Context\n context: CliContext;\n paths: Paths;\n config: OrchestratorConfig;\n\n // Infrastructure — stores only\n taskStore: ITaskStore;\n agentStore: IAgentStore;\n runStore: IRunStore;\n stateStore: IStateStore;\n configStore: IConfigStore;\n globalConfigStore: GlobalConfigStore;\n globalConfig: GlobalConfig;\n contextStore: IContextStore;\n messageStore: IMessageStore;\n goalStore: IGoalStore;\n teamStore: ITeamStore;\n\n // Application — services only\n eventBus: EventBus;\n taskService: TaskService;\n agentService: AgentService;\n runService: RunService;\n messageService: MessageService;\n goalService: GoalService;\n teamService: TeamService;\n}\n\n/** Full container — everything from light + orchestrator, adapters, workspace, template. */\nexport interface Container extends LightContainer {\n processManager: IProcessManager;\n adapterRegistry: AdapterRegistry;\n workspaceManager: IWorkspaceManager;\n templateEngine: ITemplateEngine;\n doctorService: DoctorService;\n orchestrator: Orchestrator;\n}\n\n/**\n * Build a light container (stores + services).\n * Fast — no ProcessManager, no adapters, no LiquidJS, no Orchestrator.\n * Used by read-only commands: task, agent, context, msg, goal, team, logs, status, config.\n */\nexport async function buildLightContainer(context: CliContext): Promise<LightContainer> {\n const paths = new Paths(context.projectRoot);\n\n // Fail fast if .orchestry/ does not exist\n await paths.requireInit();\n\n // Infrastructure — stores\n const configStore = new ConfigStore(paths);\n const globalConfigStore = new GlobalConfigStore();\n const [config, globalConfig] = await Promise.all([\n configStore.read(),\n globalConfigStore.read(),\n ]);\n const taskStore = new TaskStore(paths);\n const agentStore = new AgentStore(paths);\n const runStore = new RunStore(paths);\n const stateStore = new StateStore(paths);\n const contextStore = new ContextStore(paths);\n const messageStore = new MessageStore(paths);\n const goalStore = new GoalStore(paths);\n const teamStore = new TeamStore(paths);\n\n // Application — services\n const eventBus = new EventBus();\n const taskService = new TaskService(taskStore, eventBus, config, paths);\n const agentService = new AgentService(agentStore, stateStore, eventBus, config);\n const runService = new RunService(runStore, eventBus);\n const messageService = new MessageService(messageStore, agentStore, teamStore, eventBus);\n const goalService = new GoalService(goalStore, eventBus, agentService, taskService, contextStore);\n const teamService = new TeamService(teamStore, agentStore, taskStore, eventBus);\n\n return {\n context,\n paths,\n config,\n taskStore,\n agentStore,\n runStore,\n stateStore,\n configStore,\n globalConfigStore,\n globalConfig,\n contextStore,\n messageStore,\n goalStore,\n teamStore,\n eventBus,\n taskService,\n agentService,\n runService,\n messageService,\n goalService,\n teamService,\n };\n}\n\n/**\n * Build a full container (light + orchestrator + adapters + template).\n * Used by: run, tui, doctor.\n */\nexport async function buildFullContainer(context: CliContext): Promise<Container> {\n const light = await buildLightContainer(context);\n\n // Dynamic imports — avoid loading heavy deps at top level\n const [\n { ProcessManager },\n { AdapterRegistry },\n { ClaudeAdapter },\n { CodexAdapter },\n { CursorAdapter },\n { ShellAdapter },\n { WorkspaceManager },\n { LiquidTemplateEngine },\n { Orchestrator },\n { DoctorService },\n ] = await Promise.all([\n import('./infrastructure/process/process-manager.js'),\n import('./infrastructure/adapters/registry.js'),\n import('./infrastructure/adapters/claude.js'),\n import('./infrastructure/adapters/codex.js'),\n import('./infrastructure/adapters/cursor.js'),\n import('./infrastructure/adapters/shell.js'),\n import('./infrastructure/workspace/workspace-manager.js'),\n import('./infrastructure/template/template-engine.js'),\n import('./application/orchestrator.js'),\n import('./application/doctor-service.js'),\n ]);\n\n const processManager = new ProcessManager();\n const templateEngine = new LiquidTemplateEngine();\n const workspaceManager = new WorkspaceManager(\n context.projectRoot,\n light.paths.root,\n processManager,\n );\n\n // Adapter registry\n const adapterRegistry = new AdapterRegistry();\n adapterRegistry.register(new ClaudeAdapter(processManager));\n adapterRegistry.register(new CodexAdapter(processManager));\n adapterRegistry.register(new CursorAdapter(processManager));\n adapterRegistry.register(new ShellAdapter(processManager));\n\n const doctorService = new DoctorService(adapterRegistry, processManager, context.projectRoot);\n const orchestrator = new Orchestrator({\n taskStore: light.taskStore,\n agentStore: light.agentStore,\n runStore: light.runStore,\n stateStore: light.stateStore,\n adapterRegistry,\n workspaceManager,\n templateEngine,\n processManager,\n eventBus: light.eventBus,\n taskService: light.taskService,\n agentService: light.agentService,\n runService: light.runService,\n contextStore: light.contextStore,\n messageService: light.messageService,\n goalStore: light.goalStore,\n config: light.config,\n projectRoot: context.projectRoot,\n lockPath: light.paths.lockPath,\n });\n\n return {\n ...light,\n processManager,\n adapterRegistry,\n workspaceManager,\n templateEngine,\n doctorService,\n orchestrator,\n };\n}\n\n/**\n * @deprecated Use buildLightContainer or buildFullContainer directly.\n * Kept for backward compatibility with tests.\n */\nexport async function buildContainer(context: CliContext): Promise<Container> {\n return buildFullContainer(context);\n}\n"]}