subharness 0.0.5 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +59 -3
- package/dist/adapters/claude-process.js +8 -1
- package/dist/adapters/claude-process.js.map +1 -1
- package/dist/adapters/claude-tools.d.ts +6 -2
- package/dist/adapters/claude-tools.js +14 -12
- package/dist/adapters/claude-tools.js.map +1 -1
- package/dist/adapters/claude-worker-client.d.ts +49 -0
- package/dist/adapters/claude-worker-client.js +359 -0
- package/dist/adapters/claude-worker-client.js.map +1 -0
- package/dist/adapters/claude-worker-process.d.ts +20 -0
- package/dist/adapters/claude-worker-process.js +76 -0
- package/dist/adapters/claude-worker-process.js.map +1 -0
- package/dist/adapters/claude-worker-protocol.d.ts +38 -0
- package/dist/adapters/claude-worker-protocol.js +2 -0
- package/dist/adapters/claude-worker-protocol.js.map +1 -0
- package/dist/adapters/claude-worker.d.ts +1 -0
- package/dist/adapters/claude-worker.js +126 -0
- package/dist/adapters/claude-worker.js.map +1 -0
- package/dist/adapters/claude.d.ts +16 -6
- package/dist/adapters/claude.js +138 -68
- package/dist/adapters/claude.js.map +1 -1
- package/dist/cli/catalog-worker.js.map +1 -1
- package/dist/cli/dashboard-client.js +19 -30
- package/dist/cli/dashboard-client.js.map +1 -1
- package/dist/cli/main.js +53 -45
- package/dist/cli/main.js.map +1 -1
- package/dist/errors.d.ts +2 -2
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/runtime/approval-registry.d.ts +9 -0
- package/dist/runtime/approval-registry.js +143 -4
- package/dist/runtime/approval-registry.js.map +1 -1
- package/dist/runtime/capture.d.ts +22 -0
- package/dist/runtime/capture.js +320 -0
- package/dist/runtime/capture.js.map +1 -0
- package/dist/runtime/catalog.d.ts +39 -0
- package/dist/runtime/catalog.js +84 -0
- package/dist/runtime/catalog.js.map +1 -0
- package/dist/runtime/client.d.ts +2 -1
- package/dist/runtime/client.js +52 -65
- package/dist/runtime/client.js.map +1 -1
- package/dist/runtime/coordinator.d.ts +44 -7
- package/dist/runtime/coordinator.js +265 -31
- package/dist/runtime/coordinator.js.map +1 -1
- package/dist/runtime/daemon.js +12 -6
- package/dist/runtime/daemon.js.map +1 -1
- package/dist/runtime/dashboard-workspace.js +5 -1
- package/dist/runtime/dashboard-workspace.js.map +1 -1
- package/dist/runtime/definition.d.ts +6 -1
- package/dist/runtime/definition.js +31 -1
- package/dist/runtime/definition.js.map +1 -1
- package/dist/runtime/native-owner.js +7 -1
- package/dist/runtime/native-owner.js.map +1 -1
- package/dist/runtime/pagination.d.ts +9 -0
- package/dist/runtime/pagination.js +36 -0
- package/dist/runtime/pagination.js.map +1 -0
- package/dist/runtime/sdk-observation.d.ts +8 -0
- package/dist/runtime/sdk-observation.js +75 -0
- package/dist/runtime/sdk-observation.js.map +1 -0
- package/dist/runtime/sdk-projection.d.ts +8 -0
- package/dist/runtime/sdk-projection.js +19 -0
- package/dist/runtime/sdk-projection.js.map +1 -0
- package/dist/runtime/sdk-service.d.ts +11 -0
- package/dist/runtime/sdk-service.js +109 -0
- package/dist/runtime/sdk-service.js.map +1 -0
- package/dist/runtime/select-native.d.ts +4 -1
- package/dist/runtime/select-native.js +14 -17
- package/dist/runtime/select-native.js.map +1 -1
- package/dist/runtime/service.d.ts +11 -1
- package/dist/runtime/service.js +178 -3
- package/dist/runtime/service.js.map +1 -1
- package/dist/runtime/session-launcher.js +1 -1
- package/dist/runtime/session-launcher.js.map +1 -1
- package/dist/runtime/snapshots.d.ts +103 -0
- package/dist/runtime/snapshots.js +124 -0
- package/dist/runtime/snapshots.js.map +1 -0
- package/dist/runtime/state.d.ts +26 -0
- package/dist/runtime/state.js +86 -17
- package/dist/runtime/state.js.map +1 -1
- package/dist/runtime/task-data.d.ts +38 -0
- package/dist/runtime/task-data.js +2 -0
- package/dist/runtime/task-data.js.map +1 -0
- package/dist/runtime/transport.d.ts +13 -0
- package/dist/runtime/transport.js +166 -0
- package/dist/runtime/transport.js.map +1 -0
- package/dist/runtime/types.d.ts +28 -9
- package/dist/runtime/types.js.map +1 -1
- package/dist/runtime/worker-client.js +2 -0
- package/dist/runtime/worker-client.js.map +1 -1
- package/dist/runtime/worker-server.js +105 -24
- package/dist/runtime/worker-server.js.map +1 -1
- package/dist/sdk/connected-types.d.ts +42 -0
- package/dist/sdk/connected-types.js +2 -0
- package/dist/sdk/connected-types.js.map +1 -0
- package/dist/sdk/connected.d.ts +3 -0
- package/dist/sdk/connected.js +232 -0
- package/dist/sdk/connected.js.map +1 -0
- package/dist/sdk/execution-definition.d.ts +3 -0
- package/dist/sdk/execution-definition.js +59 -0
- package/dist/sdk/execution-definition.js.map +1 -0
- package/dist/sdk/execution-driver.d.ts +6 -0
- package/dist/sdk/execution-driver.js +86 -0
- package/dist/sdk/execution-driver.js.map +1 -0
- package/dist/sdk/execution-observation.d.ts +3 -0
- package/dist/sdk/execution-observation.js +35 -0
- package/dist/sdk/execution-observation.js.map +1 -0
- package/dist/sdk/execution-options.d.ts +17 -0
- package/dist/sdk/execution-options.js +115 -0
- package/dist/sdk/execution-options.js.map +1 -0
- package/dist/sdk/execution-types.d.ts +72 -0
- package/dist/sdk/execution-types.js +2 -0
- package/dist/sdk/execution-types.js.map +1 -0
- package/dist/sdk/execution.d.ts +3 -0
- package/dist/sdk/execution.js +3 -0
- package/dist/sdk/execution.js.map +1 -0
- package/dist/sdk/hosted-error.d.ts +3 -0
- package/dist/sdk/hosted-error.js +14 -0
- package/dist/sdk/hosted-error.js.map +1 -0
- package/dist/sdk/hosted.d.ts +23 -0
- package/dist/sdk/hosted.js +204 -0
- package/dist/sdk/hosted.js.map +1 -0
- package/dist/sdk/runner.d.ts +5 -0
- package/dist/sdk/runner.js +107 -0
- package/dist/sdk/runner.js.map +1 -0
- package/dist/sdk/tools.js +4 -1
- package/dist/sdk/tools.js.map +1 -1
- package/package.json +3 -3
- package/sdk/access-config.md +2 -0
- package/sdk/adapter-contract.md +8 -0
- package/sdk/agent.md +1 -1
- package/sdk/approvals.md +2 -0
- package/sdk/completion-notifications.md +2 -0
- package/sdk/distribution.md +4 -2
- package/sdk/examples/chat-tool.ts +126 -0
- package/sdk/execution.md +743 -0
- package/sdk/index.md +45 -21
- package/sdk/message-delivery.md +2 -0
- package/sdk/permissions.md +2 -0
- package/sdk/plugins/sub-agents.md +4 -2
- package/sdk/project-team.md +23 -1
- package/sdk/sessions.md +2 -0
- package/sdk/tools.md +3 -1
- package/sdk/v1-runtime.md +7 -5
- package/dist/cli/catalog.d.ts +0 -26
- package/dist/cli/catalog.js +0 -41
- package/dist/cli/catalog.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coordinator.js","sourceRoot":"","sources":["../../src/runtime/coordinator.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from 'node:crypto';\nimport { waitForChange } from './observation.js';\nimport { AgentError, errorInfo } from '../errors.js';\nimport { terminal, type DriverFactory, type Observation, type Receipt, type Session, type SessionInput, type Task, type Delivery } from './types.js';\nimport { dashboardHarness, dashboardTitle, type DashboardDetail, type DashboardRelatedTask,\n type DashboardRow, type DashboardSession, type DashboardSnapshot, type DashboardWorkspace } from './dashboard.js';\nimport { resolveDashboardWorkspace } from './dashboard-workspace.js';\nimport { ApprovalRegistry } from './approval-registry.js';\n\nexport class Coordinator {\n private sessions = new Map<string, Session>();\n private tasks = new Map<string, Task>();\n private dashboardHistory?: Task[];\n private closed = false;\n private approvals = new ApprovalRegistry(id => this.approvalChanged(this.task(id)));\n constructor(private readonly factory: DriverFactory, private readonly now: () => number = Date.now) {}\n\n parentContext(token: string) {\n const session = [...this.sessions.values()].find(session => session.token === token);\n const task = session?.active ? this.task(session.active) : undefined;\n if (!session || !task || task.stopping || terminal(task.state))\n throw new AgentError('INVALID_PARENT', 'The parent context is no longer active.');\n return {taskId: task.id, reference: session.input.reference, cwd: session.input.cwd};\n }\n\n run(input: SessionInput): Receipt {\n this.validateAdmission(undefined, input.prompt, input.parentToken);\n const selected = 'kind' in input.reference ? input.reference.harness.kind : undefined;\n const session: Session = { id: `ses_${randomUUID()}`, token: randomUUID(), input,\n tasks: [], paused: false, commands: Promise.resolve(), controls: 0, harness: dashboardHarness(selected),\n workspace: resolveDashboardWorkspace(input.cwd) };\n this.sessions.set(session.id, session);\n return this.admit(session, input.prompt, false, input.parentToken);\n }\n\n async send(id: string, prompt: string, delivery: Delivery, parentToken?: string): Promise<Receipt> {\n const session = this.session(id);\n const operation = async (): Promise<Receipt> => {\n if (!['queue', 'steer', 'interrupt'].includes(delivery)) throw new AgentError('INVALID_ARGUMENT', 'Unknown delivery mode.');\n this.validateAdmission(session, prompt, parentToken, delivery !== 'queue');\n if (delivery === 'queue') return this.admit(session, prompt, false, parentToken);\n const task = session.active ? this.task(session.active) : undefined;\n if (delivery === 'steer') {\n if (!task || terminal(task.state) || task.stopping) throw new AgentError('NO_ACTIVE_TASK', 'There is no active task accepting steering.');\n if (!task.nativeActive) {\n void this.execute(task, prompt);\n return {version: 1, type: 'accepted', sessionId: id, taskId: task.id, delivery: 'steer'};\n }\n try {\n await (await session.driver!).steer(prompt);\n this.touch(task);\n return {version: 1, type: 'accepted', sessionId: id, taskId: task.id, delivery: 'steer'};\n } catch (error) {\n if (!(error instanceof AgentError) || error.code !== 'UNSUPPORTED_DELIVERY') throw error;\n }\n }\n if (task && (!terminal(task.state) || task.stopUnconfirmed || task.state === 'failed')) await this.stop(task, 'interrupted');\n session.paused = false;\n const receipt = this.admit(session, prompt, true, parentToken);\n return {...receipt, requestedDelivery: delivery, delivery: 'interrupt'};\n };\n return this.command(session, operation);\n }\n\n async observe(id: string, after?: string, readerToken?: string, signal?: AbortSignal): Promise<Observation> {\n const task = this.task(id);\n const position = after ? task.responses.findIndex(response => response.responseId === after) : -1;\n if (after && position === -1) throw new AgentError('UNKNOWN_RESPONSE', 'The response does not belong to this task.');\n for (;;) {\n const response = task.responses[position + 1];\n if (response) {\n if (terminal(response.state)) this.acknowledge(task, readerToken);\n return response;\n }\n if (terminal(task.state)) {\n this.acknowledge(task, readerToken);\n return { version: 1, type: 'terminal', taskId: id,\n sessionId: task.sessionId, state: task.state, ...(task.error ? {error:task.error} : {}) };\n }\n const requests = this.pendingApprovals(task);\n if (requests.length) return {version:1,type:'approval_required',taskId:id,\n sessionId:task.sessionId,state:task.state,requests};\n await waitForChange(task.changed, signal);\n }\n }\n\n private acknowledge(task: Task, readerToken?: string) {\n if (!readerToken || !task.parentId || task.stopUnconfirmed) return;\n const parent = this.task(task.parentId);\n if (this.session(parent.sessionId).token === readerToken && parent.nativeActive)\n parent.inbox = parent.inbox.filter(result => result.taskId !== task.id);\n }\n\n status(id: string, full = false) {\n const task = this.task(id), response = task.responses.at(-1);\n const requests = this.pendingApprovals(task);\n return { version: 1, type: 'status', taskId: id, sessionId: task.sessionId, state: task.state,\n ...(requests.length ? {requests} : {}),\n ...(task.error ? {error: task.error} : {}), ...(response ? { response: {\n responseId: response.responseId, text: full ? response.text : response.text.slice(0, 4000),\n truncated: !full && response.text.length > 4000 }} : {}) };\n }\n\n respond(id: string, content: unknown, parentToken?: string) {\n const request = this.approvals.request(id);\n if (parentToken !== undefined) {\n let caller: string;\n try { caller = this.parentContext(parentToken).taskId; }\n catch { throw new AgentError('INVALID_APPROVAL_OWNER','The caller cannot answer this permission request.'); }\n let ancestor = this.task(request.taskId).parentId;\n while (ancestor && ancestor !== caller) ancestor = this.task(ancestor).parentId;\n if (!ancestor) throw new AgentError('INVALID_APPROVAL_OWNER','Only an active strict ancestor can answer this permission request.');\n }\n return this.approvals.respond(id,content);\n }\n\n async dashboard(): Promise<DashboardSnapshot> {\n // New sessions join the next snapshot; every serialized row has resolved context.\n const admitted = [...this.sessions.values()];\n const workspaces = new Map(await Promise.all(admitted.map(async session =>\n [session.id, await session.workspace] as const)));\n const current: Task[] = [];\n for (const session of admitted) {\n const id = session.active ?? session.tasks[0];\n if (!id) continue;\n const task = this.task(id);\n if (task.state === 'failed' || !terminal(task.state)) current.push(task);\n }\n // Map insertion order records admission order; stable sorting preserves its reversed ties.\n this.dashboardHistory ??= [...this.tasks.values()].reverse().filter(task => terminal(task.state))\n .sort((first, second) => second.finishedAt! - first.finishedAt!);\n const visible = new Set(current.map(task => task.id));\n const tasks = [...current, ...this.dashboardHistory.filter(task => workspaces.has(task.sessionId) && !visible.has(task.id))];\n const sessions = tasks.map(task => this.dashboardRow(task, workspaces.get(task.sessionId)!));\n return {version: 1, type: 'dashboard', history: true, grouping: true, sessions};\n }\n\n async dashboardDetail(id: string, includePrompt = true, knownResponseId?: string): Promise<DashboardDetail> {\n const task = this.task(id);\n const session = this.session(task.sessionId);\n const workspace = await session.workspace;\n const response = task.responses.at(-1);\n return {\n version: 1,\n type: 'dashboard-detail',\n task: this.dashboardRow(task, workspace),\n ...(includePrompt ? {prompt: task.prompt} : {}),\n ...(response ? {response: {\n responseId: response.responseId,\n ...(response.responseId === knownResponseId ? {} : {text: response.text}),\n }} : {}),\n ...(task.error ? {error: task.error} : {}),\n children: [...task.children].map(childId => this.dashboardRelatedTask(this.task(childId))),\n queue: {\n paused: session.paused,\n tasks: session.tasks.map(taskId => this.dashboardRelatedTask(this.task(taskId))),\n },\n stopUnconfirmed: task.stopUnconfirmed ?? false,\n };\n }\n\n async dashboardSession(id: string): Promise<DashboardSession> {\n const session = this.session(this.task(id).sessionId);\n const workspace = await session.workspace;\n // Collect all metadata after discovery, without another asynchronous boundary.\n const retained = [...this.tasks.values()];\n const tasks = retained.filter(task => task.sessionId === session.id);\n const childIds = new Set(tasks.flatMap(task => [...task.children]));\n const childSessions = new Set(retained.filter(task => childIds.has(task.id)).map(task => task.sessionId));\n const latest = new Map<string, string>();\n const titles = new Map<string, string>();\n for (const task of retained) {\n latest.set(task.sessionId, task.id);\n if (!titles.has(task.sessionId)) titles.set(task.sessionId, task.title);\n }\n const representative = (candidate: Session) => this.task(candidate.active ?? candidate.tasks[0]\n ?? latest.get(candidate.id)!);\n const requests = tasks.map((task, index) => ({...this.dashboardRow(task, workspace),\n ordinal: index + 1, stopUnconfirmed: task.stopUnconfirmed ?? false}));\n requests.sort((first, second) => Number(second.state === 'queued') - Number(first.state === 'queued')\n || second.ordinal - first.ordinal);\n return {\n version: 1, type: 'dashboard-session', taskId: id, sessionId: session.id,\n title: titles.get(session.id)!, harness: session.harness,\n state: representative(session).state, workspace, requests,\n subagents: [...childSessions].map(sessionId => {\n const child = this.session(sessionId);\n return {...this.dashboardRelatedTask(representative(child)), title: titles.get(child.id)!};\n }),\n queuePaused: session.paused,\n };\n }\n\n private dashboardRow(task: Task, workspace: DashboardWorkspace): DashboardRow {\n return {sessionId: task.sessionId, taskId: task.id,\n harness: this.session(task.sessionId).harness, title: task.title, state: task.state,\n workspace, updatedAt: task.updatedAt,\n ...(task.dispatchedAt === undefined ? {} : {dispatchedAt: task.dispatchedAt}),\n ...(task.failedAt === undefined ? {} : {failedAt: task.failedAt}),\n ...(task.finishedAt === undefined ? {} : {finishedAt: task.finishedAt})};\n }\n\n private dashboardRelatedTask(task: Task): DashboardRelatedTask {\n return {taskId: task.id, sessionId: task.sessionId, harness: this.session(task.sessionId).harness,\n title: task.title, state: task.state};\n }\n\n private finish(task: Task, state: 'completed' | 'failed' | 'cancelled' | 'interrupted', at = this.now(), updatedAt = at) {\n task.state = state;\n task.finishedAt = at;\n task.updatedAt = updatedAt;\n this.dashboardHistory = undefined;\n }\n\n queue(id: string) {\n const session = this.session(id);\n const summary = (task: Task) => ({taskId: task.id, state: task.state, description: task.prompt.slice(0, 120)});\n return {version: 1, type: 'queue', sessionId: id, paused: session.paused,\n ...(session.active ? {active: summary(this.task(session.active))} : {}),\n tasks: session.tasks.map(id => summary(this.task(id)))};\n }\n\n async resume(id: string): Promise<Receipt> {\n const session = this.session(id);\n return this.command(session, async () => {\n const task = session.active ? this.task(session.active) : undefined;\n if (!task || task.state !== 'failed') throw new AgentError('NOT_FAILED', 'This session has no failed task to resume.');\n if (task.stopUnconfirmed || task.stopPromise) throw new AgentError('CANCEL_FAILED', 'Confirm cancellation of the affected executions before recovery.');\n task.stopping = false; task.error = undefined; task.failedAt = undefined; task.finishedAt = undefined; session.paused = false;\n this.dashboardHistory = undefined;\n void this.execute(task, '', true);\n return {version: 1, type: 'started', sessionId: id, taskId: task.id, state: task.state, resumed: true};\n });\n }\n\n async close() {\n this.closed = true;\n for (const task of this.tasks.values()) if (!terminal(task.state)) task.stopping = true;\n this.approvals.close();\n await Promise.allSettled([...this.sessions.values()].map(async session => (await session.driver)?.close()));\n }\n\n async cancel(id: string): Promise<Receipt> {\n const task = this.task(id);\n return this.command(this.session(task.sessionId), async () => {\n if (!terminal(task.state) || task.stopUnconfirmed) await this.stop(task, 'cancelled');\n else if (task.state === 'failed') {\n const session = this.session(task.sessionId);\n if (session.active === task.id) { session.active = undefined; session.paused = false; }\n }\n return {version: 1, type: 'cancelled', taskId: id, sessionId: task.sessionId, state: task.state};\n });\n }\n\n private command<T>(session: Session, operation: () => Promise<T>): Promise<T> {\n session.controls++;\n const result = session.commands.then(operation, operation).finally(() => {\n session.controls--;\n this.dispatch(session);\n });\n session.commands = result.catch(() => undefined);\n return result;\n }\n\n private stop(task: Task, outcome: 'cancelled' | 'interrupted'): Promise<void> {\n if (task.stopPromise) return task.stopPromise;\n task.stopPromise = this.finishStop(task, outcome).finally(() => {\n task.stopPromise = undefined;\n this.dispatch(this.session(task.sessionId));\n });\n return task.stopPromise;\n }\n\n private async finishStop(task: Task, outcome: 'cancelled' | 'interrupted') {\n const session = this.session(task.sessionId);\n task.stopping = true;\n this.approvals.retireTask(task.id);\n session.tasks = session.tasks.filter(id => id !== task.id);\n try {\n const stops = [...task.children].map(id => this.task(id)).filter(child => !terminal(child.state) || child.stopUnconfirmed).map(child => this.stop(child, 'cancelled'));\n if (task.nativeActive && session.driver) stops.push(session.driver.then(async driver => {\n await driver.interrupt(); task.nativeActive = false;\n }));\n const outcomes = await Promise.allSettled(stops);\n if (outcomes.some(outcome => outcome.status === 'rejected')) throw new Error('Cancellation unconfirmed');\n } catch {\n task.failedAt = this.now();\n this.finish(task, 'failed', task.failedAt); task.error = {code:'CANCEL_FAILED', message:'Native execution could not be confirmed stopped.'};\n task.stopUnconfirmed = true;\n session.paused = true; this.notify(task);\n throw new AgentError('CANCEL_FAILED', task.error.message);\n }\n task.nativeActive = false; this.finish(task, outcome); task.stopUnconfirmed = false; task.error = undefined;\n if (session.active === task.id) { session.active = undefined; session.paused = false; }\n this.notify(task); this.deliver(task);\n }\n\n private admit(session: Session, prompt: string, front = false, parentToken?: string): Receipt {\n const parent = this.validateAdmission(session, prompt, parentToken, front);\n const blockedByTaskId = session.paused ? session.active : undefined;\n const task: Task = { id: `tsk_${randomUUID()}`, sessionId: session.id, prompt, title: dashboardTitle(prompt),\n parentId: parent?.id, state: 'queued', responses: [], children: new Set(), inbox: [], nativeActive: false,\n stopping: false, updatedAt: this.now(), changed: new Set() };\n this.tasks.set(task.id, task);\n parent?.children.add(task.id);\n if (front) session.tasks.unshift(task.id); else session.tasks.push(task.id);\n this.dispatch(session);\n return {version: 1, type: 'started', sessionId: session.id, taskId: task.id, state: task.state,\n ...(blockedByTaskId ? {paused: true, blockedByTaskId} : {})};\n }\n\n private validateAdmission(session: Session | undefined, prompt: string, parentToken?: string, replacement = false) {\n if (this.closed) throw new AgentError('COORDINATOR_UNAVAILABLE','The coordinator is shutting down.');\n if (typeof prompt !== 'string' || !prompt.trim() || Buffer.byteLength(prompt) > 1024 * 1024)\n throw new AgentError('INVALID_ARGUMENT', 'Prompt must contain text and cannot exceed 1 MiB.');\n if (!replacement && session && session.tasks.length >= 100) throw new AgentError('QUEUE_FULL', 'The session already has 100 queued tasks.');\n const parent = parentToken ? this.task(this.parentContext(parentToken).taskId) : undefined;\n let depth = 0, ancestor = parent;\n while (ancestor) {\n if (ancestor.sessionId === session?.id) throw new AgentError('INVALID_PARENT', 'A managed task cannot queue work in its own or an ancestor session.');\n depth++; ancestor = ancestor.parentId ? this.task(ancestor.parentId) : undefined;\n }\n if (depth > 8) throw new AgentError('DELEGATION_LIMIT', 'Maximum delegation depth is 8.');\n return parent;\n }\n\n private dispatch(session: Session) {\n if (this.closed || session.active || session.paused || session.controls) return;\n const id = session.tasks.shift();\n if (!id) return;\n session.active = id;\n void this.execute(this.task(id), this.task(id).prompt);\n }\n\n private async execute(task: Task, prompt: string, recovering = false) {\n const session = this.session(task.sessionId);\n const dispatchedAt = this.now();\n task.dispatchedAt ??= dispatchedAt;\n this.touch(task, dispatchedAt);\n task.state = 'running'; task.nativeActive = true;\n try {\n session.driver ??= this.factory({...session.input, sessionId: session.id, token: session.token,\n onApproval: async (request,signal) => {\n const active = session.active ? this.task(session.active) : undefined;\n if (this.closed || !active || active.stopping || !active.nativeActive || terminal(active.state))\n throw new AgentError('REQUEST_EXPIRED','The native permission request is no longer pending.');\n return this.approvals.register(active.id,session.id,request,signal);\n }});\n const driver = await session.driver;\n if (driver.selectedHarness) {\n const harness = dashboardHarness(driver.selectedHarness);\n if (session.harness !== harness) { session.harness = harness; this.touch(task); }\n }\n if (task.stopping) return;\n const text = recovering ? await driver.resume() : await driver.turn(prompt);\n this.approvals.retireTask(task.id);\n if (task.stopping) return;\n if (Buffer.byteLength(text) > 1024 * 1024) throw new AgentError('OUTPUT_TOO_LARGE', 'The response exceeds 1 MiB.');\n task.nativeActive = false;\n task.state = this.pending(task) ? 'waiting' : 'completed';\n const respondedAt = this.now();\n if (task.state === 'completed') this.finish(task, 'completed', respondedAt);\n else this.touch(task, respondedAt);\n task.responses.push({version: 1, type: 'response', sessionId: session.id, taskId: task.id,\n responseId: `rsp_${randomUUID()}`, state: task.state, text});\n this.notify(task);\n if (task.state === 'completed') {\n session.active = undefined;\n this.deliver(task);\n this.dispatch(session);\n } else this.continueParent(task);\n } catch (error) {\n this.approvals.retireTask(task.id);\n if (task.stopping) return;\n task.failedAt = this.now();\n task.nativeActive = false;\n task.stopping = true;\n const stopped = await Promise.allSettled([...task.children].map(id => this.task(id)).filter(child => !terminal(child.state) || child.stopUnconfirmed).map(child => this.stop(child, 'cancelled')));\n task.stopUnconfirmed = stopped.some(result => result.status === 'rejected');\n this.finish(task, 'failed', task.failedAt, this.now()); task.error = task.stopUnconfirmed\n ? {code:'CANCEL_FAILED', message:'Descendant execution could not be confirmed stopped.'} : errorInfo(error);\n session.paused = true; this.notify(task); this.deliver(task);\n }\n }\n\n private pending(task: Task) {\n return task.inbox.length > 0 || [...task.children].some(id => !terminal(this.task(id).state) || this.task(id).stopUnconfirmed);\n }\n\n private deliver(child: Task) {\n if (!child.parentId || child.stopUnconfirmed) return;\n const parent = this.task(child.parentId);\n if (parent.stopping || terminal(parent.state)) return;\n parent.inbox.push({taskId: child.id, state: child.state,\n text: child.error?.message ?? child.responses.at(-1)?.text ?? child.state});\n // Let an attached child command acknowledge delivery through its native tool output first.\n setImmediate(() => this.continueParent(parent));\n }\n\n private continueParent(task: Task) {\n if (task.nativeActive || task.stopping || terminal(task.state) || !task.inbox.length) return;\n const results = task.inbox.splice(0);\n const prompt = 'Delegated task outcomes (continue the current task):\\n' +\n results.map(result => `${result.taskId} [${result.state}]:\\n${result.text}`).join('\\n\\n');\n void this.execute(task, prompt);\n }\n\n private touch(task: Task, at = this.now()) { task.updatedAt = at; }\n private pendingApprovals(task: Task): import('./types.js').ApprovalRequest[] {\n return [...this.approvals.pendingFor(task.id), ...[...task.children].flatMap(id => this.pendingApprovals(this.task(id)))];\n }\n private approvalChanged(task: Task) {\n if (!task.stopping && task.nativeActive) task.state = this.approvals.pendingFor(task.id).length ? 'awaiting_approval' : 'running';\n this.touch(task);\n let current: Task | undefined = task;\n while (current) { this.notify(current); current = current.parentId ? this.task(current.parentId) : undefined; }\n }\n private notify(task: Task) { for (const resolve of task.changed) resolve(); task.changed.clear(); }\n private task(id: string) { const task = this.tasks.get(id); if (!task) throw new AgentError('UNKNOWN_TASK', 'Task is unavailable in this coordinator.'); return task; }\n private session(id: string) { const session = this.sessions.get(id); if (!session) throw new AgentError('UNKNOWN_SESSION', 'Session is unavailable in this coordinator.'); return session; }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"coordinator.js","sourceRoot":"","sources":["../../src/runtime/coordinator.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from 'node:crypto';\nimport { waitForChange } from './observation.js';\nimport { AgentError, errorInfo } from '../errors.js';\nimport { terminal, type DriverFactory, type Observation, type Receipt, type Session, type SessionInput, type SessionCreateInput, type Task, type Delivery, type PreparedExecution } from './types.js';\nimport { dashboardHarness, dashboardTitle, type DashboardDetail, type DashboardRelatedTask,\n type DashboardRow, type DashboardSession, type DashboardSnapshot, type DashboardWorkspace } from './dashboard.js';\nimport { resolveDashboardWorkspace } from './dashboard-workspace.js';\nimport { ApprovalRegistry } from './approval-registry.js';\nimport { createSnapshotWatch, detached, type SessionSnapshot, type TaskSnapshot, type TaskSummary,\n type SdkSessionSnapshot, type SdkSessionSummary, type SdkTaskDetails, type SdkTaskSnapshot,\n type SdkTaskSummary, type TaskResult, type CompleteResponse, type Page, type PageOptions } from './snapshots.js';\nimport type { ApprovalResponse } from './task-data.js';\nimport { paginate } from './pagination.js';\nimport { responseReplay, terminalInterval } from './sdk-observation.js';\nimport { sdkSessionSummary as projectSessionSummary, sdkTaskSnapshot as projectTaskSnapshot,\n sdkTaskSummary as projectTaskSummary } from './sdk-projection.js';\n\nexport class Coordinator {\n private sessions = new Map<string, Session>();\n private tasks = new Map<string, Task>();\n private dashboardHistory?: Task[];\n private closed = false;\n private closeComplete = false;\n private closePromise?: Promise<void>;\n private membership = 0;\n private approvals = new ApprovalRegistry(id => this.approvalChanged(this.task(id)));\n constructor(private readonly factory: DriverFactory, private readonly now: () => number = Date.now,\n private readonly instanceId: string = randomUUID()) {}\n\n parentContext(token: string) {\n const session = [...this.sessions.values()].find(session => session.token === token);\n const task = session?.active ? this.task(session.active) : undefined;\n if (!session || !task || task.stopping || terminal(task.state))\n throw new AgentError('INVALID_PARENT', 'The parent context is no longer active.');\n return {taskId: task.id, sessionId: session.id, reference: session.input.reference, cwd: session.input.cwd};\n }\n\n createSession(input: SessionCreateInput, prepared?: PreparedExecution): string {\n if (this.closed) throw new AgentError('COORDINATOR_UNAVAILABLE','The coordinator is shutting down.');\n const selected = 'kind' in input.reference && input.reference.kind === 'harness'\n ? input.reference.harness.kind : undefined;\n const session: Session = { id: `ses_${randomUUID()}`, token: randomUUID(), input,\n tasks: [], paused: false, commands: Promise.resolve(), controls: 0, nextOrdinal: 1,\n membership: ++this.membership, prepared,\n harness: dashboardHarness(selected), workspace: 'kind' in input.reference && input.reference.kind === 'inline'\n ? Promise.resolve({directory: input.cwd}) : resolveDashboardWorkspace(input.cwd), state: 'open' };\n this.sessions.set(session.id, session);\n return session.id;\n }\n\n run(input: SessionInput, prepared?: PreparedExecution): Receipt {\n this.validateAdmission(undefined, input.prompt, input.parentToken);\n const {prompt,parentToken,...creation} = input;\n const session = this.session(this.createSession(creation,prepared));\n return this.admit(session, input.prompt, false, input.parentToken);\n }\n\n async send(id: string, prompt: string, delivery: Delivery, parentToken?: string): Promise<Receipt> {\n const session = this.session(id);\n const operation = async (): Promise<Receipt> => {\n if (!['queue', 'steer', 'interrupt'].includes(delivery)) throw new AgentError('INVALID_ARGUMENT', 'Unknown delivery mode.');\n this.validateAdmission(session, prompt, parentToken, delivery !== 'queue');\n if (delivery === 'queue') return this.admit(session, prompt, false, parentToken);\n const task = session.active ? this.task(session.active) : undefined;\n if (delivery === 'steer') {\n if (!task || terminal(task.state) || task.stopping) throw new AgentError('NO_ACTIVE_TASK', 'There is no active task accepting steering.');\n if (!task.nativeActive) {\n void this.execute(task, prompt);\n return {version: 1, type: 'accepted', sessionId: id, taskId: task.id, delivery: 'steer'};\n }\n try {\n await (await session.driver!).steer(prompt);\n this.touch(task);\n return {version: 1, type: 'accepted', sessionId: id, taskId: task.id, delivery: 'steer'};\n } catch (error) {\n if (!(error instanceof AgentError) || error.code !== 'UNSUPPORTED_DELIVERY') throw error;\n }\n }\n if (task && (!terminal(task.state) || task.stopUnconfirmed || task.state === 'failed')) await this.stop(task, 'interrupted');\n session.paused = false;\n const receipt = this.admit(session, prompt, true, parentToken);\n return {...receipt, requestedDelivery: delivery, delivery: 'interrupt'};\n };\n return this.command(session, operation);\n }\n\n async observe(id: string, after?: string, readerToken?: string, signal?: AbortSignal): Promise<Observation> {\n if (signal?.aborted) throw new AgentError('OBSERVATION_CLOSED', 'The observer disconnected.');\n const task = this.task(id);\n const hasCursor = after !== undefined;\n const position = hasCursor ? task.responses.findIndex(response => response.responseId === after) : -1;\n if (hasCursor && position === -1) throw new AgentError('UNKNOWN_RESPONSE', 'The response does not belong to this task.');\n for (;;) {\n const response = task.responses[position + 1];\n if (response) {\n if (terminal(response.state)) this.acknowledge(task, readerToken);\n return detached(response);\n }\n if (terminal(task.state)) {\n this.acknowledge(task, readerToken);\n return detached({ version: 1, type: 'terminal', taskId: id,\n sessionId: task.sessionId, state: task.state, ...(task.error ? {error:task.error} : {}),\n stopUnconfirmed: task.stopUnconfirmed ?? false });\n }\n const requests = this.pendingApprovals(task);\n if (requests.length) return detached({version:1,type:'approval_required',taskId:id,\n sessionId:task.sessionId,state:task.state,requests});\n await waitForChange(task.changed, signal);\n }\n }\n\n private acknowledge(task: Task, readerToken?: string) {\n if (!readerToken || !task.parentId || task.stopUnconfirmed) return;\n const parent = this.task(task.parentId);\n if (this.session(parent.sessionId).token === readerToken && parent.nativeActive)\n parent.inbox = parent.inbox.filter(result => result.taskId !== task.id);\n }\n\n status(id: string, full = false) {\n const task = this.task(id), response = task.responses.at(-1);\n const requests = this.pendingApprovals(task);\n return { version: 1, type: 'status', taskId: id, sessionId: task.sessionId, state: task.state,\n ...(requests.length ? {requests} : {}),\n ...(task.error ? {error: task.error} : {}), ...(response ? { response: {\n responseId: response.responseId, text: full ? response.text : response.text.slice(0, 4000),\n truncated: !full && response.text.length > 4000 }} : {}) };\n }\n\n snapshot(id: string): TaskSnapshot {\n const task = this.task(id);\n const response = task.responses.at(-1);\n return detached({\n ...this.summary(task),\n revision: task.revision,\n ...(task.parentId ? {parentTaskId: task.parentId} : {}),\n children: [...task.children].map(childId => this.summary(this.task(childId))),\n requests: this.pendingApprovals(task),\n ...(response ? {latestResponse: {responseId: response.responseId, text: response.text, state: response.state}} : {}),\n ...(task.error ? {error: task.error} : {}),\n stopUnconfirmed: task.stopUnconfirmed ?? false,\n });\n }\n\n sessionSnapshot(id: string): SessionSnapshot {\n const session = this.session(id);\n return detached({\n sessionId: session.id,\n state: session.state,\n paused: session.paused,\n ...(session.active ? {active: this.summary(this.task(session.active))} : {}),\n queued: session.tasks.map(taskId => this.summary(this.task(taskId))),\n });\n }\n\n sdkTaskSnapshot(id: string): SdkTaskSnapshot {\n const task = this.task(id);\n return detached(projectTaskSnapshot(task,candidate=>this.sdkSummary(candidate),candidate=>this.task(candidate),\n this.sdkPendingApprovals(task)));\n }\n\n async sdkSessionSnapshot(id: string): Promise<SdkSessionSnapshot> {\n const session = this.session(id);\n const workspace=await session.workspace;\n return detached({...this.sdkSessionSummaryResolved(session,workspace),\n queued:session.tasks.map(taskId=>this.sdkSummary(this.task(taskId)))});\n }\n\n taskDetails(id: string): SdkTaskDetails {\n const task = this.task(id);\n return detached({...this.sdkTaskSnapshot(id),prompt:task.prompt});\n }\n\n taskResult(id: string, signal?: AbortSignal): Promise<TaskResult> {\n const task = this.task(id);\n return terminalInterval(task,()=>this.sdkTaskSnapshot(id),signal).then(({snapshot,response}) => {\n if (snapshot.state === 'completed') {\n if (!response) throw new AgentError('HARNESS_FAILED','The completed task has no final response.');\n return detached({taskId:task.id,sessionId:task.sessionId,responseId:response.responseId,text:response.text});\n }\n if (snapshot.state === 'cancelled') throw new AgentError('CANCELLED','The task was cancelled.');\n if (snapshot.state === 'interrupted') throw new AgentError('INTERRUPTED','The task was interrupted.');\n throw new AgentError(snapshot.error?.code ?? 'HARNESS_FAILED',snapshot.error?.message ?? 'Task execution failed.');\n });\n }\n\n taskResponses(id: string, after?: string, signal?: AbortSignal): AsyncIterable<CompleteResponse> {\n const task = this.task(id);\n const start = after === undefined ? 0 : task.responses.findIndex(response=>response.responseId===after) + 1;\n if (after !== undefined && start === 0) throw new AgentError('UNKNOWN_RESPONSE','The response does not belong to this task.');\n return responseReplay(task,start,signal);\n }\n\n watchTask(id: string, signal?: AbortSignal): AsyncIterable<SdkTaskSnapshot> {\n const task = this.task(id);\n return createSnapshotWatch(()=>this.sdkTaskSnapshot(id),changed=>{\n task.watchers.add(changed); return ()=>task.watchers.delete(changed);\n },signal);\n }\n\n async listSessions(options?: PageOptions): Promise<Page<SdkSessionSummary>> {\n const page = paginate([...this.sessions.values()],options,\n {instance:this.instanceId,collection:'sessions',filter:''},value=>value.membership);\n return detached({items:await Promise.all(page.items.map(session=>this.sdkSessionSummary(session))),\n ...(page.nextCursor ? {nextCursor:page.nextCursor} : {})});\n }\n\n listTasks(options?: PageOptions & {readonly sessionId?: string}): Page<SdkTaskSummary> {\n const sessionId = options?.sessionId;\n if (sessionId !== undefined) this.session(sessionId);\n const candidates = [...this.tasks.values()].filter(task=>sessionId === undefined || task.sessionId === sessionId);\n const page = paginate(candidates,options,\n {instance:this.instanceId,collection:'tasks',filter:sessionId ?? ''},value=>value.membership);\n return detached({items:page.items.map(task=>this.sdkSummary(task)),...(page.nextCursor ? {nextCursor:page.nextCursor} : {})});\n }\n\n respondSdk(id: string, response: ApprovalResponse) { return this.approvals.respondSdk(id,response); }\n\n watch(id: string, signal?: AbortSignal): AsyncIterable<TaskSnapshot> {\n const task = this.task(id);\n return createSnapshotWatch(\n () => this.snapshot(task.id),\n changed => {\n task.watchers.add(changed);\n return () => task.watchers.delete(changed);\n },\n signal,\n );\n }\n\n respond(id: string, content: unknown, parentToken?: string) {\n const request = this.approvals.request(id);\n if (parentToken !== undefined) {\n let caller: string;\n try { caller = this.parentContext(parentToken).taskId; }\n catch { throw new AgentError('INVALID_APPROVAL_OWNER','The caller cannot answer this permission request.'); }\n let ancestor = this.task(request.taskId).parentId;\n while (ancestor && ancestor !== caller) ancestor = this.task(ancestor).parentId;\n if (!ancestor) throw new AgentError('INVALID_APPROVAL_OWNER','Only an active strict ancestor can answer this permission request.');\n }\n return this.approvals.respond(id,content);\n }\n\n async dashboard(): Promise<DashboardSnapshot> {\n // New sessions join the next snapshot; every serialized row has resolved context.\n const admitted = [...this.sessions.values()];\n const workspaces = new Map(await Promise.all(admitted.map(async session =>\n [session.id, await session.workspace] as const)));\n const current: Task[] = [];\n for (const session of admitted) {\n const id = session.active ?? session.tasks[0];\n if (!id) continue;\n const task = this.task(id);\n if (task.state === 'failed' || !terminal(task.state)) current.push(task);\n }\n // Map insertion order records admission order; stable sorting preserves its reversed ties.\n this.dashboardHistory ??= [...this.tasks.values()].reverse().filter(task => terminal(task.state))\n .sort((first, second) => second.finishedAt! - first.finishedAt!);\n const visible = new Set(current.map(task => task.id));\n const tasks = [...current, ...this.dashboardHistory.filter(task => workspaces.has(task.sessionId) && !visible.has(task.id))];\n const sessions = tasks.map(task => this.dashboardRow(task, workspaces.get(task.sessionId)!));\n return {version: 1, type: 'dashboard', history: true, grouping: true, sessions};\n }\n\n async dashboardDetail(id: string, includePrompt = true, knownResponseId?: string): Promise<DashboardDetail> {\n const task = this.task(id);\n const session = this.session(task.sessionId);\n const workspace = await session.workspace;\n const response = task.responses.at(-1);\n return {\n version: 1,\n type: 'dashboard-detail',\n task: this.dashboardRow(task, workspace),\n ...(includePrompt ? {prompt: task.prompt} : {}),\n ...(response ? {response: {\n responseId: response.responseId,\n ...(response.responseId === knownResponseId ? {} : {text: response.text}),\n }} : {}),\n ...(task.error ? {error: task.error} : {}),\n children: [...task.children].map(childId => this.dashboardRelatedTask(this.task(childId))),\n queue: {\n paused: session.paused,\n tasks: session.tasks.map(taskId => this.dashboardRelatedTask(this.task(taskId))),\n },\n stopUnconfirmed: task.stopUnconfirmed ?? false,\n };\n }\n\n async dashboardSession(id: string): Promise<DashboardSession> {\n const session = this.session(this.task(id).sessionId);\n const workspace = await session.workspace;\n // Collect all metadata after discovery, without another asynchronous boundary.\n const retained = [...this.tasks.values()];\n const tasks = retained.filter(task => task.sessionId === session.id);\n const childIds = new Set(tasks.flatMap(task => [...task.children]));\n const childSessions = new Set(retained.filter(task => childIds.has(task.id)).map(task => task.sessionId));\n const latest = new Map<string, string>();\n const titles = new Map<string, string>();\n for (const task of retained) {\n latest.set(task.sessionId, task.id);\n if (!titles.has(task.sessionId)) titles.set(task.sessionId, task.title);\n }\n const representative = (candidate: Session) => this.task(candidate.active ?? candidate.tasks[0]\n ?? latest.get(candidate.id)!);\n const requests = tasks.map((task, index) => ({...this.dashboardRow(task, workspace),\n ordinal: index + 1, stopUnconfirmed: task.stopUnconfirmed ?? false}));\n requests.sort((first, second) => Number(second.state === 'queued') - Number(first.state === 'queued')\n || second.ordinal - first.ordinal);\n return {\n version: 1, type: 'dashboard-session', taskId: id, sessionId: session.id,\n title: titles.get(session.id)!, harness: session.harness,\n state: representative(session).state, workspace, requests,\n subagents: [...childSessions].map(sessionId => {\n const child = this.session(sessionId);\n return {...this.dashboardRelatedTask(representative(child)), title: titles.get(child.id)!};\n }),\n queuePaused: session.paused,\n };\n }\n\n private dashboardRow(task: Task, workspace: DashboardWorkspace): DashboardRow {\n return {sessionId: task.sessionId, taskId: task.id,\n harness: this.session(task.sessionId).harness, title: task.title, state: task.state,\n workspace, updatedAt: task.updatedAt,\n ...(task.dispatchedAt === undefined ? {} : {dispatchedAt: task.dispatchedAt}),\n ...(task.failedAt === undefined ? {} : {failedAt: task.failedAt}),\n ...(task.finishedAt === undefined ? {} : {finishedAt: task.finishedAt})};\n }\n\n private dashboardRelatedTask(task: Task): DashboardRelatedTask {\n return {taskId: task.id, sessionId: task.sessionId, harness: this.session(task.sessionId).harness,\n title: task.title, state: task.state};\n }\n\n private finish(task: Task, state: 'completed' | 'failed' | 'cancelled' | 'interrupted', at = this.now(), updatedAt = at) {\n task.state = state;\n task.finishedAt = at;\n task.updatedAt = updatedAt;\n this.dashboardHistory = undefined;\n }\n\n queue(id: string) {\n const session = this.session(id);\n const summary = (task: Task) => ({taskId: task.id, state: task.state, description: task.prompt.slice(0, 120)});\n return {version: 1, type: 'queue', sessionId: id, paused: session.paused,\n ...(session.active ? {active: summary(this.task(session.active))} : {}),\n tasks: session.tasks.map(id => summary(this.task(id)))};\n }\n\n async resume(id: string): Promise<Receipt> {\n const session = this.session(id);\n return this.command(session, async () => {\n const task = session.active ? this.task(session.active) : undefined;\n if (!task || task.state !== 'failed') throw new AgentError('NOT_FAILED', 'This session has no failed task to resume.');\n if (task.stopUnconfirmed || task.stopPromise) throw new AgentError('CANCEL_FAILED', 'Confirm cancellation of the affected executions before recovery.');\n task.stopping = false; task.error = undefined; task.failedAt = undefined; task.finishedAt = undefined; session.paused = false;\n this.dashboardHistory = undefined;\n void this.execute(task, '', true);\n return {version: 1, type: 'started', sessionId: id, taskId: task.id, state: task.state, resumed: true};\n });\n }\n\n close(): Promise<void> {\n this.closed = true;\n this.approvals.close();\n if (this.closeComplete) return Promise.resolve();\n if (this.closePromise) return this.closePromise;\n const attempt = (async () => {\n const results = await Promise.allSettled([...this.sessions].map(([id]) => this.closeSession(id)));\n const failures = results.flatMap(result => result.status === 'rejected'\n ? this.cleanupErrors(result.reason, 'Runner cleanup could not be confirmed.') : []);\n if (failures.length) throw new AggregateError(failures, 'Coordinator cleanup failed.');\n this.closeComplete = true;\n })();\n this.closePromise = attempt.finally(() => { this.closePromise = undefined; });\n return this.closePromise;\n }\n\n closeSession(id: string): Promise<void> {\n const session = this.session(id);\n if (session.state === 'closed') return Promise.resolve();\n if (session.closePromise) return session.closePromise;\n session.state = 'closing';\n const attempt = this.cleanupSession(session);\n session.closePromise = attempt.finally(() => { session.closePromise = undefined; });\n return session.closePromise;\n }\n\n private async cleanupSession(session: Session): Promise<void> {\n const targets = [...this.tasks.values()].filter(task => task.sessionId === session.id &&\n (!terminal(task.state) || task.stopUnconfirmed));\n let preparedFailure=false;\n const preparedClose = !session.preparedClosed && session.prepared\n ? session.prepared.close().then(()=>{ session.preparedClosed=true; },()=>{ preparedFailure=true; })\n : Promise.resolve();\n let stopped = await Promise.allSettled(targets.map(task => this.stop(task, 'cancelled')));\n await session.commands.catch(() => undefined);\n let driverClosedDuringAttempt = false;\n const failures: AgentError[] = [];\n if (!session.driverClosed && session.driver) {\n let driver;\n try { driver = await session.driver; }\n catch { session.driverClosed = true; driverClosedDuringAttempt = true; }\n if (driver) {\n try {\n await driver.close();\n session.driverClosed = true; driverClosedDuringAttempt = true;\n for (const task of this.tasks.values()) if (task.sessionId === session.id) task.nativeActive = false;\n } catch {\n failures.push(new AgentError('HARNESS_FAILED', 'Native session cleanup could not be confirmed.'));\n }\n }\n }\n await preparedClose;\n if (preparedFailure) failures.push(new AgentError('HARNESS_FAILED','Prepared execution cleanup could not be confirmed.'));\n if ((driverClosedDuringAttempt || session.preparedClosed) && stopped.some(result => result.status === 'rejected')) {\n const retry = targets.filter(task => task.stopUnconfirmed);\n stopped = await Promise.allSettled(retry.map(task => this.stop(task, 'cancelled')));\n }\n failures.push(...stopped.flatMap(result => result.status === 'rejected'\n ? [new AgentError('CANCEL_FAILED', 'Task execution could not be confirmed stopped.')] : []));\n if (failures.length) throw new AggregateError(failures, 'Session cleanup failed.');\n session.paused = false;\n session.state = 'closed';\n }\n\n private cleanupErrors(reason: unknown, message: string): AgentError[] {\n if (reason instanceof AggregateError) {\n const errors = [...reason.errors];\n return errors.length ? errors.map(error => error instanceof AgentError\n ? new AgentError(error.code, error.message) : new AgentError('HARNESS_FAILED', message)) : [];\n }\n return [reason instanceof AgentError\n ? new AgentError(reason.code, reason.message)\n : new AgentError('HARNESS_FAILED', message)];\n }\n\n async cancel(id: string): Promise<Receipt> {\n const task = this.task(id);\n return this.command(this.session(task.sessionId), async () => {\n if (!terminal(task.state) || task.stopUnconfirmed) await this.stop(task, 'cancelled');\n else if (task.state === 'failed') {\n const session = this.session(task.sessionId);\n if (session.active === task.id) { session.active = undefined; session.paused = false; }\n }\n return {version: 1, type: 'cancelled', taskId: id, sessionId: task.sessionId, state: task.state};\n });\n }\n\n private command<T>(session: Session, operation: () => Promise<T>): Promise<T> {\n session.controls++;\n const result = session.commands.then(operation, operation).finally(() => {\n session.controls--;\n this.dispatch(session);\n });\n session.commands = result.catch(() => undefined);\n return result;\n }\n\n private stop(task: Task, outcome: 'cancelled' | 'interrupted'): Promise<void> {\n if (task.stopPromise) return task.stopPromise;\n task.stopPromise = this.finishStop(task, outcome).finally(() => {\n task.stopPromise = undefined;\n this.dispatch(this.session(task.sessionId));\n });\n return task.stopPromise;\n }\n\n private async finishStop(task: Task, outcome: 'cancelled' | 'interrupted') {\n const session = this.session(task.sessionId);\n task.stopping = true;\n this.approvals.retireTask(task.id);\n session.tasks = session.tasks.filter(id => id !== task.id);\n try {\n const stops = [...task.children].map(id => this.task(id)).filter(child => !terminal(child.state) || child.stopUnconfirmed).map(child => this.stop(child, 'cancelled'));\n if (task.nativeActive && session.driver) stops.push(session.driver.then(async driver => {\n await driver.interrupt(); task.nativeActive = false;\n }, () => { task.nativeActive = false; }));\n const outcomes = await Promise.allSettled(stops);\n if (outcomes.some(outcome => outcome.status === 'rejected')) throw new Error('Cancellation unconfirmed');\n } catch {\n task.failedAt = this.now();\n this.finish(task, 'failed', task.failedAt); task.error = {code:'CANCEL_FAILED', message:'Native execution could not be confirmed stopped.'};\n task.stopUnconfirmed = true;\n session.paused = true; this.publish(task);\n throw new AgentError('CANCEL_FAILED', task.error.message);\n }\n task.nativeActive = false; this.finish(task, outcome); task.stopUnconfirmed = false; task.error = undefined;\n if (session.active === task.id) { session.active = undefined; session.paused = false; }\n this.publish(task); this.deliver(task);\n }\n\n private admit(session: Session, prompt: string, front = false, parentToken?: string): Receipt {\n const parent = this.validateAdmission(session, prompt, parentToken, front);\n const blockedByTaskId = session.paused ? session.active : undefined;\n const task: Task = { id: `tsk_${randomUUID()}`, sessionId: session.id, prompt, title: dashboardTitle(prompt),\n parentId: parent?.id, state: 'queued', responses: [], children: new Set(), inbox: [], nativeActive: false,\n stopping: false, updatedAt: this.now(), revision: 1, ordinal:session.nextOrdinal++, membership:++this.membership,\n changed: new Set(), watchers: new Set() };\n this.tasks.set(task.id, task);\n parent?.children.add(task.id);\n if (parent) this.publish(parent);\n if (front) session.tasks.unshift(task.id); else session.tasks.push(task.id);\n this.dispatch(session);\n return {version: 1, type: 'started', sessionId: session.id, taskId: task.id, state: task.state,\n ...(blockedByTaskId ? {paused: true, blockedByTaskId} : {})};\n }\n\n private validateAdmission(session: Session | undefined, prompt: string, parentToken?: string, replacement = false) {\n if (this.closed) throw new AgentError('COORDINATOR_UNAVAILABLE','The coordinator is shutting down.');\n if (session && session.state !== 'open') throw new AgentError('SESSION_CLOSED','The session is closing or closed.');\n if (typeof prompt !== 'string' || !prompt.trim() || Buffer.byteLength(prompt) > 1024 * 1024)\n throw new AgentError('INVALID_ARGUMENT', 'Prompt must contain text and cannot exceed 1 MiB.');\n if (!replacement && session && session.tasks.length >= 100) throw new AgentError('QUEUE_FULL', 'The session already has 100 queued tasks.');\n const parent = parentToken ? this.task(this.parentContext(parentToken).taskId) : undefined;\n let depth = 0, ancestor = parent;\n while (ancestor) {\n if (ancestor.sessionId === session?.id) throw new AgentError('INVALID_PARENT', 'A managed task cannot queue work in its own or an ancestor session.');\n depth++; ancestor = ancestor.parentId ? this.task(ancestor.parentId) : undefined;\n }\n if (depth > 8) throw new AgentError('DELEGATION_LIMIT', 'Maximum delegation depth is 8.');\n return parent;\n }\n\n private dispatch(session: Session) {\n if (this.closed || session.state !== 'open' || session.active || session.paused || session.controls) return;\n const id = session.tasks.shift();\n if (!id) return;\n session.active = id;\n void this.execute(this.task(id), this.task(id).prompt);\n }\n\n private async execute(task: Task, prompt: string, recovering = false) {\n const session = this.session(task.sessionId);\n const dispatchedAt = this.now();\n task.dispatchedAt ??= dispatchedAt;\n task.state = 'running'; task.nativeActive = true;\n this.touch(task, dispatchedAt); this.publish(task);\n try {\n const open = session.prepared ? session.prepared.open.bind(session.prepared) : this.factory;\n session.driver ??= open({...session.input, sessionId: session.id, token: session.token,\n onApproval: async (request,signal) => {\n const active = session.active ? this.task(session.active) : undefined;\n if (this.closed || !active || active.stopping || !active.nativeActive || terminal(active.state))\n throw new AgentError('REQUEST_EXPIRED','The native permission request is no longer pending.');\n return this.approvals.register(active.id,session.id,request,signal);\n }});\n const driver = await session.driver;\n if (driver.selectedHarness) {\n const harness = dashboardHarness(driver.selectedHarness);\n if (session.selectedHarness !== driver.selectedHarness) {\n session.selectedHarness = driver.selectedHarness;\n session.harness = harness;\n this.touch(task);\n for (const candidate of this.tasks.values()) if (candidate.sessionId === session.id) this.publish(candidate);\n }\n }\n if (task.stopping) return;\n const text = recovering ? await driver.resume() : await driver.turn(prompt);\n this.approvals.retireTask(task.id);\n if (task.stopping) return;\n if (Buffer.byteLength(text) > 1024 * 1024) throw new AgentError('OUTPUT_TOO_LARGE', 'The response exceeds 1 MiB.');\n task.nativeActive = false;\n task.state = this.pending(task) ? 'waiting' : 'completed';\n const respondedAt = this.now();\n if (task.state === 'completed') this.finish(task, 'completed', respondedAt);\n else this.touch(task, respondedAt);\n task.responses.push({version: 1, type: 'response', sessionId: session.id, taskId: task.id,\n responseId: `rsp_${randomUUID()}`, state: task.state, text});\n this.publish(task);\n if (task.state === 'completed') {\n session.active = undefined;\n this.deliver(task);\n this.dispatch(session);\n } else this.continueParent(task);\n } catch (error) {\n this.approvals.retireTask(task.id);\n if (task.stopping) return;\n task.failedAt = this.now();\n task.nativeActive = false;\n task.stopping = true;\n const stopped = await Promise.allSettled([...task.children].map(id => this.task(id)).filter(child => !terminal(child.state) || child.stopUnconfirmed).map(child => this.stop(child, 'cancelled')));\n task.stopUnconfirmed = stopped.some(result => result.status === 'rejected');\n this.finish(task, 'failed', task.failedAt, this.now()); task.error = task.stopUnconfirmed\n ? {code:'CANCEL_FAILED', message:'Descendant execution could not be confirmed stopped.'} : errorInfo(error);\n session.paused = true; this.publish(task); this.deliver(task);\n }\n }\n\n private pending(task: Task) {\n return task.inbox.length > 0 || [...task.children].some(id => !terminal(this.task(id).state) || this.task(id).stopUnconfirmed);\n }\n\n private deliver(child: Task) {\n if (!child.parentId || child.stopUnconfirmed) return;\n const parent = this.task(child.parentId);\n if (parent.stopping || terminal(parent.state)) return;\n parent.inbox.push({taskId: child.id, state: child.state,\n text: child.error?.message ?? child.responses.at(-1)?.text ?? child.state});\n // Let an attached child command acknowledge delivery through its native tool output first.\n setImmediate(() => this.continueParent(parent));\n }\n\n private continueParent(task: Task) {\n if (task.nativeActive || task.stopping || terminal(task.state) || !task.inbox.length) return;\n const results = task.inbox.splice(0);\n const prompt = 'Delegated task outcomes (continue the current task):\\n' +\n results.map(result => `${result.taskId} [${result.state}]:\\n${result.text}`).join('\\n\\n');\n void this.execute(task, prompt);\n }\n\n private summary(task: Task): TaskSummary {\n const selectedHarness = this.session(task.sessionId).selectedHarness;\n return {taskId: task.id, sessionId: task.sessionId, state: task.state,\n ...(selectedHarness ? {selectedHarness} : {})};\n }\n private sdkSummary(task: Task): SdkTaskSummary {\n return projectTaskSummary(task,this.session(task.sessionId).selectedHarness);\n }\n private async sdkSessionSummary(session: Session): Promise<SdkSessionSummary> {\n const workspace=await session.workspace;\n return this.sdkSessionSummaryResolved(session,workspace);\n }\n private sdkSessionSummaryResolved(session:Session,workspace:import('./dashboard.js').DashboardWorkspace):SdkSessionSummary {\n return projectSessionSummary(session,workspace,task=>this.sdkSummary(task),id=>this.task(id));\n }\n private sdkPendingApprovals(task: Task): import('./task-data.js').SdkApprovalRequest[] {\n return [...this.approvals.sdkPendingFor(task.id),\n ...[...task.children].flatMap(id=>this.sdkPendingApprovals(this.task(id)))];\n }\n private touch(task: Task, at = this.now()) { task.updatedAt = at; }\n private publish(task: Task) {\n let current: Task | undefined = task;\n while (current) {\n current.revision++;\n this.notify(current);\n current = current.parentId ? this.task(current.parentId) : undefined;\n }\n }\n private pendingApprovals(task: Task): import('./types.js').ApprovalRequest[] {\n return [...this.approvals.pendingFor(task.id), ...[...task.children].flatMap(id => this.pendingApprovals(this.task(id)))];\n }\n private approvalChanged(task: Task) {\n if (!task.stopping && task.nativeActive) task.state = this.approvals.pendingFor(task.id).length ? 'awaiting_approval' : 'running';\n this.touch(task);\n let current: Task | undefined = task;\n while (current) { current.revision++; this.notify(current); current = current.parentId ? this.task(current.parentId) : undefined; }\n }\n private notify(task: Task) {\n for (const resolve of task.changed) resolve();\n task.changed.clear();\n for (const update of task.watchers) update();\n }\n private task(id: string) { const task = this.tasks.get(id); if (!task) throw new AgentError('UNKNOWN_TASK', 'Task is unavailable in this coordinator.'); return task; }\n private session(id: string) { const session = this.sessions.get(id); if (!session) throw new AgentError('UNKNOWN_SESSION', 'Session is unavailable in this coordinator.'); return session; }\n}\n"]}
|
package/dist/runtime/daemon.js
CHANGED
|
@@ -5,7 +5,7 @@ import { Coordinator } from './coordinator.js';
|
|
|
5
5
|
import { createWorker } from './worker-client.js';
|
|
6
6
|
import { startService } from './service.js';
|
|
7
7
|
import { acquireStartupOwnership } from './startup-lock.js';
|
|
8
|
-
import { privateDirectory,
|
|
8
|
+
import { privateDirectory, probeEndpoint, stateDirectory } from './state.js';
|
|
9
9
|
import { isStartupRetirementRequest } from './startup-protocol.js';
|
|
10
10
|
const directory = resolve(stateDirectory());
|
|
11
11
|
await privateDirectory(directory);
|
|
@@ -24,14 +24,20 @@ process.on('message', message => {
|
|
|
24
24
|
async function startCandidate() {
|
|
25
25
|
let ownership;
|
|
26
26
|
let temporary;
|
|
27
|
+
const deadline = Date.now() + lockTimeout;
|
|
27
28
|
try {
|
|
28
|
-
ownership = acquireStartupOwnership(directory,
|
|
29
|
-
if (
|
|
29
|
+
ownership = acquireStartupOwnership(directory, Math.max(0, deadline - Date.now()));
|
|
30
|
+
if (Date.now() >= deadline)
|
|
31
|
+
throw new Error('Coordinator startup deadline elapsed.');
|
|
32
|
+
if (retirementRequested)
|
|
33
|
+
return { version: 1, type: 'startup-outcome', state: 'retired' };
|
|
34
|
+
const existing = await probeEndpoint(directory, { capability: 'sdk-v1', timeoutMs: Math.max(1, deadline - Date.now()) });
|
|
35
|
+
if (existing.kind !== 'absent' && !(existing.kind === 'unresponsive' && existing.owner === 'dead'))
|
|
30
36
|
return { version: 1, type: 'startup-outcome', state: 'retired' };
|
|
31
|
-
const engine = new Coordinator(input => createWorker({ ...input, env: { ...input.env, AGENT_STATE_DIR: directory } }));
|
|
32
|
-
const token = randomBytes(32).toString('hex');
|
|
33
37
|
const instanceId = randomUUID();
|
|
34
|
-
|
|
38
|
+
const engine = new Coordinator(input => createWorker({ ...input, env: { ...input.env, AGENT_STATE_DIR: directory } }), undefined, instanceId);
|
|
39
|
+
const token = randomBytes(32).toString('hex');
|
|
40
|
+
service = await startService(engine, token, instanceId, directory);
|
|
35
41
|
if (retirementRequested) {
|
|
36
42
|
await closeUnpublished();
|
|
37
43
|
return { version: 1, type: 'startup-outcome', state: 'retired' };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/runtime/daemon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/runtime/daemon.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomBytes, randomUUID } from 'node:crypto';\nimport { join, resolve } from 'node:path';\nimport { writeFile, rename, unlink } from 'node:fs/promises';\nimport { Coordinator } from './coordinator.js';\nimport { createWorker } from './worker-client.js';\nimport { startService } from './service.js';\nimport { acquireStartupOwnership } from './startup-lock.js';\nimport { privateDirectory, probeEndpoint, stateDirectory } from './state.js';\nimport { isStartupRetirementRequest, type StartupOutcome } from './startup-protocol.js';\n\nconst directory = resolve(stateDirectory());\nawait privateDirectory(directory);\nconst requestedTimeout = Number(process.argv[2]);\nconst lockTimeout = Number.isSafeInteger(requestedTimeout) && requestedTimeout >= 0 ? requestedTimeout : 15_000;\nlet service: Awaited<ReturnType<typeof startService>> | undefined;\nlet outcome: StartupOutcome | undefined;\nlet retirementRequested = false;\nprocess.on('message',message => {\n if (!isStartupRetirementRequest(message)) return;\n retirementRequested = true;\n if (outcome) void report(outcome);\n});\n\nasync function startCandidate(): Promise<StartupOutcome> {\n let ownership: ReturnType<typeof acquireStartupOwnership> | undefined;\n let temporary: string | undefined;\n const deadline=Date.now()+lockTimeout;\n try {\n ownership = acquireStartupOwnership(directory,Math.max(0,deadline-Date.now()));\n if(Date.now()>=deadline)throw new Error('Coordinator startup deadline elapsed.');\n if (retirementRequested)\n return {version:1,type:'startup-outcome',state:'retired'};\n const existing = await probeEndpoint(directory,{capability:'sdk-v1',timeoutMs:Math.max(1,deadline-Date.now())});\n if (existing.kind !== 'absent' && !(existing.kind === 'unresponsive' && existing.owner === 'dead'))\n return {version:1,type:'startup-outcome',state:'retired'};\n const instanceId = randomUUID();\n const engine = new Coordinator(\n input => createWorker({...input,env:{...input.env,AGENT_STATE_DIR:directory}}),\n undefined,\n instanceId,\n );\n const token = randomBytes(32).toString('hex');\n service = await startService(engine,token,instanceId,directory);\n if (retirementRequested) {\n await closeUnpublished();\n return {version:1,type:'startup-outcome',state:'retired'};\n }\n const endpointFile = join(directory,'coordinator.json');\n temporary = endpointFile + `.${process.pid}`;\n const endpoint = {url:service.url,token,pid:process.pid,instanceId};\n await writeFile(temporary,JSON.stringify(endpoint),{mode:0o600});\n if (retirementRequested) {\n await unlink(temporary).catch(()=>{});\n await closeUnpublished();\n return {version:1,type:'startup-outcome',state:'retired'};\n }\n // A retirement request received while rename is in flight must observe publication.\n await rename(temporary,endpointFile);\n temporary = undefined;\n return {version:1,type:'startup-outcome',state:'published',endpoint};\n } catch (error) {\n if (temporary) await unlink(temporary).catch(()=>{});\n await closeUnpublished();\n throw error;\n } finally {\n ownership?.release();\n }\n}\n\nasync function closeUnpublished() {\n if (!service) return;\n const active = service;\n service = undefined;\n await active.close();\n}\n\nasync function report(message: StartupOutcome) {\n if (!process.send || !process.connected) return;\n await new Promise<void>(resolveMessage => {\n try { process.send!(message,()=>resolveMessage()); }\n catch { resolveMessage(); }\n });\n}\n\nlet startupError: unknown;\ntry { outcome = await startCandidate(); }\ncatch (error) {\n startupError = error;\n outcome = {version:1,type:'startup-outcome',state:'retired'};\n}\nawait report(outcome);\n\nif (outcome.state === 'retired') {\n if (process.connected) process.disconnect?.();\n if (startupError) throw startupError;\n} else if (service) {\n const activeService = service;\n let closing = false;\n async function close() {\n if (closing) return; closing = true;\n await activeService.close();\n process.exit();\n }\n process.on('SIGTERM',()=>void close());\n process.on('SIGINT',()=>void close());\n}\n"]}
|
|
@@ -13,7 +13,11 @@ async function canonical(path) {
|
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
15
|
function gitEnvironment() {
|
|
16
|
-
|
|
16
|
+
const environment = { ...process.env };
|
|
17
|
+
for (const name of Object.keys(environment))
|
|
18
|
+
if (name.startsWith('GIT_'))
|
|
19
|
+
delete environment[name];
|
|
20
|
+
return environment;
|
|
17
21
|
}
|
|
18
22
|
export async function resolveDashboardWorkspace(cwd) {
|
|
19
23
|
const fallback = await canonical(cwd);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-workspace.js","sourceRoot":"","sources":["../../src/runtime/dashboard-workspace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAC,QAAQ,EAAC,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAC,MAAM,WAAW,CAAC;AACrD,OAAO,EAAC,SAAS,EAAC,MAAM,WAAW,CAAC;AAGpC,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AACpC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAE/B,KAAK,UAAU,SAAS,CAAC,IAAY;IACnC,IAAI,CAAC;QAAC,OAAO,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;IAAC,CAAC;IACpC,MAAM,CAAC;QAAC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,CAAC;AACjC,CAAC;AAED,SAAS,cAAc;IACrB,
|
|
1
|
+
{"version":3,"file":"dashboard-workspace.js","sourceRoot":"","sources":["../../src/runtime/dashboard-workspace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAC,QAAQ,EAAC,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAC,MAAM,WAAW,CAAC;AACrD,OAAO,EAAC,SAAS,EAAC,MAAM,WAAW,CAAC;AAGpC,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AACpC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAE/B,KAAK,UAAU,SAAS,CAAC,IAAY;IACnC,IAAI,CAAC;QAAC,OAAO,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;IAAC,CAAC;IACpC,MAAM,CAAC;QAAC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,CAAC;AACjC,CAAC;AAED,SAAS,cAAc;IACrB,MAAM,WAAW,GAAmB,EAAC,GAAG,OAAO,CAAC,GAAG,EAAC,CAAC;IACrD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;QAAE,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;IACnG,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,GAAW;IACzD,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,cAAc,EAAE,CAAC;QAC7B,qFAAqF;QACrF,MAAM,CAAC,cAAc,EAAE,YAAY,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,CAAC,GAAG,CAAC,KAAK,EAAC,KAAK,EAAC,EAAE;YACjH,MAAM,EAAC,MAAM,EAAC,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wBAAwB,EAAE,KAAK,CAAC,EAClG,EAAC,GAAG,EAAE,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,IAAI,EAAC,CAAC,CAAC;YAC7E,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC9D,CAAC,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,cAAc,IAAI,CAAC,YAAY;YAAE,OAAO,EAAC,SAAS,EAAE,QAAQ,EAAC,CAAC;QACnE,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,cAAc,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,CAAC;QAC7C,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC1E,OAAO,EAAC,SAAS,EAAE,UAAU,EAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAC,SAAS,EAAE,QAAQ,EAAC,CAAC;IAC/B,CAAC;AACH,CAAC","sourcesContent":["import {execFile} from 'node:child_process';\nimport {realpath} from 'node:fs/promises';\nimport {basename, dirname, resolve} from 'node:path';\nimport {promisify} from 'node:util';\nimport type {DashboardWorkspace} from './dashboard.js';\n\nconst execute = promisify(execFile);\nconst discoveryTimeout = 2_000;\n\nasync function canonical(path: string) {\n try { return await realpath(path); }\n catch { return resolve(path); }\n}\n\nfunction gitEnvironment(): NodeJS.ProcessEnv {\n const environment:NodeJS.ProcessEnv={...process.env};\n for (const name of Object.keys(environment)) if (name.startsWith('GIT_')) delete environment[name];\n return environment;\n}\n\nexport async function resolveDashboardWorkspace(cwd: string): Promise<DashboardWorkspace> {\n const fallback = await canonical(cwd);\n try {\n const env = gitEnvironment();\n // Separate results preserve newlines and trailing whitespace inside directory names.\n const [checkoutOutput, commonOutput] = await Promise.all(['--show-toplevel', '--git-common-dir'].map(async field => {\n const {stdout} = await execute('git', ['-C', fallback, 'rev-parse', '--path-format=absolute', field],\n {env, timeout: discoveryTimeout, maxBuffer: 64 * 1024, windowsHide: true});\n return stdout.endsWith('\\n') ? stdout.slice(0, -1) : stdout;\n }));\n if (!checkoutOutput || !commonOutput) return {directory: fallback};\n const directory = await canonical(checkoutOutput);\n const common = await canonical(commonOutput);\n const repository = basename(common) === '.git' ? dirname(common) : common;\n return {directory, repository};\n } catch {\n return {directory: fallback};\n }\n}\n"]}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import type { ExecutionDefinition } from '../adapters/types.js';
|
|
2
|
-
import type { HarnessKind } from '../sdk/types.js';
|
|
2
|
+
import type { HarnessConfig, HarnessKind } from '../sdk/types.js';
|
|
3
3
|
import type { ExecutionReference, HarnessReference } from './types.js';
|
|
4
4
|
export declare function harnessReference(kind: HarnessKind, model?: string, effort?: string): HarnessReference;
|
|
5
5
|
/** Generic sessions do not import user definitions or add a specialist role. */
|
|
6
6
|
export declare function loadExecutionDefinition(reference: ExecutionReference): Promise<ExecutionDefinition>;
|
|
7
|
+
/** Resolves and retains the selected executable definition in the evaluating process. */
|
|
8
|
+
export declare function captureExecutionDefinition(selected: string | HarnessConfig, cwd: string): Promise<{
|
|
9
|
+
reference: ExecutionReference;
|
|
10
|
+
definition: ExecutionDefinition;
|
|
11
|
+
}>;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { loadDefinition } from '../config/loader.js';
|
|
1
|
+
import { discover, loadDefinition } from '../config/loader.js';
|
|
2
2
|
import { AgentError } from '../errors.js';
|
|
3
|
+
import { validateAgent } from '../sdk/definitions.js';
|
|
3
4
|
export function harnessReference(kind, model, effort) {
|
|
4
5
|
if ((kind === 'opencode' || kind === 'copilot' || kind === 'cursor') && !model?.trim()) {
|
|
5
6
|
throw new AgentError('INVALID_CONFIG', `${kind} requires --model with an explicit nonempty model identifier.`);
|
|
@@ -23,7 +24,36 @@ export function harnessReference(kind, model, effort) {
|
|
|
23
24
|
export async function loadExecutionDefinition(reference) {
|
|
24
25
|
if ('file' in reference)
|
|
25
26
|
return loadDefinition(reference.file, reference.subagents);
|
|
27
|
+
if (reference.kind === 'inline')
|
|
28
|
+
throw new AgentError('INVALID_DEFINITION', 'Inline agent definitions cannot be loaded by native CLI workers.');
|
|
26
29
|
const name = reference.harness.kind === 'claudeCode' ? 'claude' : reference.harness.kind;
|
|
27
30
|
return { name, description: `Run the native ${name} harness.`, instructions: '', harness: reference.harness };
|
|
28
31
|
}
|
|
32
|
+
/** Resolves and retains the selected executable definition in the evaluating process. */
|
|
33
|
+
export async function captureExecutionDefinition(selected, cwd) {
|
|
34
|
+
if (typeof selected !== 'string') {
|
|
35
|
+
validateAgent({ name: 'direct', description: 'Direct native harness.', instructions: 'Run.', harness: selected });
|
|
36
|
+
const reference = { kind: 'harness', harness: selected };
|
|
37
|
+
return { reference, definition: await loadExecutionDefinition(reference) };
|
|
38
|
+
}
|
|
39
|
+
let reference;
|
|
40
|
+
if (selected === 'codex')
|
|
41
|
+
reference = harnessReference('codex');
|
|
42
|
+
else if (selected === 'claude')
|
|
43
|
+
reference = harnessReference('claudeCode');
|
|
44
|
+
else if (selected === 'fx')
|
|
45
|
+
reference = harnessReference('fx');
|
|
46
|
+
else if (selected === 'opencode' || selected === 'copilot' || selected === 'cursor')
|
|
47
|
+
throw new AgentError('INVALID_CONFIG', `${selected} requires an explicit model configuration.`);
|
|
48
|
+
else if (selected.startsWith('subagent:'))
|
|
49
|
+
throw new AgentError('UNKNOWN_AGENT', 'Managed subagents require an active parent context.');
|
|
50
|
+
if (reference)
|
|
51
|
+
return { reference, definition: await loadExecutionDefinition(reference) };
|
|
52
|
+
const entries = await discover(cwd);
|
|
53
|
+
const matches = entries.filter(entry => entry.id === selected || entry.name === selected);
|
|
54
|
+
if (matches.length !== 1)
|
|
55
|
+
throw new AgentError(matches.length ? 'AMBIGUOUS_AGENT' : 'UNKNOWN_AGENT', matches.length ? `Choose ${matches.map(entry => entry.id).join(' or ')}.` : 'Agent not found.');
|
|
56
|
+
const match = matches[0];
|
|
57
|
+
return { reference: { file: match.file, subagents: [] }, definition: match.definition };
|
|
58
|
+
}
|
|
29
59
|
//# sourceMappingURL=definition.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.js","sourceRoot":"","sources":["../../src/runtime/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"definition.js","sourceRoot":"","sources":["../../src/runtime/definition.ts"],"names":[],"mappings":"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","sourcesContent":["import { discover, loadDefinition } from '../config/loader.js';\nimport { AgentError } from '../errors.js';\nimport type { ExecutionDefinition } from '../adapters/types.js';\nimport { validateAgent } from '../sdk/definitions.js';\nimport type { HarnessConfig, HarnessKind } from '../sdk/types.js';\nimport type { ExecutionReference, HarnessReference } from './types.js';\n\nexport function harnessReference(kind: HarnessKind, model?: string, effort?: string): HarnessReference {\n if ((kind === 'opencode' || kind === 'copilot' || kind === 'cursor') && !model?.trim()) {\n throw new AgentError('INVALID_CONFIG', `${kind} requires --model with an explicit nonempty model identifier.`);\n }\n if ((kind === 'opencode' || kind === 'copilot' || kind === 'cursor') && effort !== undefined) {\n throw new AgentError('INVALID_ARGUMENT', `${kind} does not support --effort.`);\n }\n if (kind === 'claudeCode') {\n if (effort !== undefined && effort !== 'low' && effort !== 'medium' && effort !== 'high' && effort !== 'xhigh' && effort !== 'max') {\n throw new AgentError('INVALID_ARGUMENT', 'Claude effort must be low, medium, high, xhigh, or max.');\n }\n return {kind: 'harness', harness: {kind, model, effort, fast: false}};\n }\n if (kind === 'fx') return {kind: 'harness', harness: {kind, model, effort}};\n if (kind === 'codex') return {kind: 'harness', harness: {kind, model, effort, fast: false}};\n return {kind: 'harness', harness: {kind, model: model!}};\n}\n\n/** Generic sessions do not import user definitions or add a specialist role. */\nexport async function loadExecutionDefinition(reference: ExecutionReference): Promise<ExecutionDefinition> {\n if ('file' in reference) return loadDefinition(reference.file, reference.subagents);\n if (reference.kind === 'inline')\n throw new AgentError('INVALID_DEFINITION', 'Inline agent definitions cannot be loaded by native CLI workers.');\n const name = reference.harness.kind === 'claudeCode' ? 'claude' : reference.harness.kind;\n return {name, description: `Run the native ${name} harness.`, instructions: '', harness: reference.harness};\n}\n\n/** Resolves and retains the selected executable definition in the evaluating process. */\nexport async function captureExecutionDefinition(\n selected: string | HarnessConfig,\n cwd: string,\n): Promise<{reference:ExecutionReference;definition:ExecutionDefinition}> {\n if (typeof selected !== 'string') {\n validateAgent({name:'direct',description:'Direct native harness.',instructions:'Run.',harness:selected});\n const reference: HarnessReference = {kind:'harness',harness:selected};\n return {reference,definition:await loadExecutionDefinition(reference)};\n }\n let reference: ExecutionReference | undefined;\n if (selected === 'codex') reference = harnessReference('codex');\n else if (selected === 'claude') reference = harnessReference('claudeCode');\n else if (selected === 'fx') reference = harnessReference('fx');\n else if (selected === 'opencode' || selected === 'copilot' || selected === 'cursor')\n throw new AgentError('INVALID_CONFIG',`${selected} requires an explicit model configuration.`);\n else if (selected.startsWith('subagent:'))\n throw new AgentError('UNKNOWN_AGENT','Managed subagents require an active parent context.');\n if (reference) return {reference,definition:await loadExecutionDefinition(reference)};\n const entries = await discover(cwd);\n const matches = entries.filter(entry=>entry.id===selected || entry.name===selected);\n if (matches.length !== 1) throw new AgentError(matches.length ? 'AMBIGUOUS_AGENT' : 'UNKNOWN_AGENT',\n matches.length ? `Choose ${matches.map(entry=>entry.id).join(' or ')}.` : 'Agent not found.');\n const match = matches[0]!;\n return {reference:{file:match.file,subagents:[]},definition:match.definition};\n}\n"]}
|
|
@@ -15,10 +15,16 @@ export class NativeOwner {
|
|
|
15
15
|
return native;
|
|
16
16
|
}
|
|
17
17
|
close() {
|
|
18
|
-
this.closing
|
|
18
|
+
if (this.closing)
|
|
19
|
+
return this.closing;
|
|
20
|
+
const attempt = (async () => {
|
|
19
21
|
const native = await this.opening?.catch(() => undefined);
|
|
20
22
|
await native?.close();
|
|
21
23
|
})();
|
|
24
|
+
this.closing = attempt.catch(error => {
|
|
25
|
+
this.closing = undefined;
|
|
26
|
+
throw error;
|
|
27
|
+
});
|
|
22
28
|
return this.closing;
|
|
23
29
|
}
|
|
24
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-owner.js","sourceRoot":"","sources":["../../src/runtime/native-owner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,oFAAoF;AACpF,MAAM,OAAO,WAAW;IACd,OAAO,CAA0B;IACjC,OAAO,CAAiB;IAEhC,KAAK,CAAC,IAAI,CAAC,OAAqC;QAC9C,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,UAAU,CAAC,gBAAgB,EAAC,wCAAwC,CAAC,CAAC;QAClH,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC;QAClC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,OAAO,CAAC;YACnB,MAAM,IAAI,UAAU,CAAC,yBAAyB,EAAC,8CAA8C,CAAC,CAAC;QACjG,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"native-owner.js","sourceRoot":"","sources":["../../src/runtime/native-owner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,oFAAoF;AACpF,MAAM,OAAO,WAAW;IACd,OAAO,CAA0B;IACjC,OAAO,CAAiB;IAEhC,KAAK,CAAC,IAAI,CAAC,OAAqC;QAC9C,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,UAAU,CAAC,gBAAgB,EAAC,wCAAwC,CAAC,CAAC;QAClH,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC;QAClC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,OAAO,CAAC;YACnB,MAAM,IAAI,UAAU,CAAC,yBAAyB,EAAC,8CAA8C,CAAC,CAAC;QACjG,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC;QACtC,MAAM,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE;YAC1B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC1D,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC;QACxB,CAAC,CAAC,EAAE,CAAC;QACL,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YACnC,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;YACzB,MAAM,KAAK,CAAC;QACd,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF","sourcesContent":["import type { NativeSession } from '../adapters/types.js';\nimport { AgentError } from '../errors.js';\n\n/** Ensures startup cannot publish a session after its process owner disconnects. */\nexport class NativeOwner {\n private opening?: Promise<NativeSession>;\n private closing?: Promise<void>;\n\n async open(factory: () => Promise<NativeSession>) {\n if (this.closing || this.opening) throw new AgentError('HARNESS_FAILED','Native session startup is unavailable.');\n this.opening = factory();\n const native = await this.opening;\n if (this.closing) {\n await this.closing;\n throw new AgentError('COORDINATOR_UNAVAILABLE','The coordinator disconnected during startup.');\n }\n return native;\n }\n\n close(): Promise<void> {\n if (this.closing) return this.closing;\n const attempt = (async () => {\n const native = await this.opening?.catch(() => undefined);\n await native?.close();\n })();\n this.closing = attempt.catch(error => {\n this.closing = undefined;\n throw error;\n });\n return this.closing;\n }\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { PageOptions } from './snapshots.js';
|
|
2
|
+
export declare function paginate<T>(values: T[], options: PageOptions | undefined, binding: {
|
|
3
|
+
instance: string;
|
|
4
|
+
collection: string;
|
|
5
|
+
filter: string;
|
|
6
|
+
}, membership: (value: T) => number): {
|
|
7
|
+
items: T[];
|
|
8
|
+
nextCursor?: string;
|
|
9
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { AgentError } from '../errors.js';
|
|
2
|
+
export function paginate(values, options, binding, membership) {
|
|
3
|
+
const limit = options?.limit ?? 100;
|
|
4
|
+
if (!Number.isInteger(limit) || limit < 1 || limit > 1_000)
|
|
5
|
+
throw new AgentError('INVALID_ARGUMENT', 'Page limit must be an integer from 1 through 1000.');
|
|
6
|
+
const current = values.reduce((max, value) => Math.max(max, membership(value)), 0);
|
|
7
|
+
let watermark = current, after = 0;
|
|
8
|
+
if (options?.cursor !== undefined) {
|
|
9
|
+
if (typeof options.cursor !== 'string' || !options.cursor)
|
|
10
|
+
invalid();
|
|
11
|
+
let cursor;
|
|
12
|
+
try {
|
|
13
|
+
cursor = JSON.parse(Buffer.from(options.cursor, 'base64url').toString('utf8'));
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
invalid();
|
|
17
|
+
}
|
|
18
|
+
if (!cursor || typeof cursor !== 'object' || Array.isArray(cursor)
|
|
19
|
+
|| Object.keys(cursor).sort().join(',') !== 'after,collection,filter,instance,v,watermark'
|
|
20
|
+
|| cursor.v !== 1 || cursor.instance !== binding.instance || cursor.collection !== binding.collection
|
|
21
|
+
|| cursor.filter !== binding.filter || !Number.isSafeInteger(cursor.watermark) || cursor.watermark < 0
|
|
22
|
+
|| cursor.watermark > current || !Number.isSafeInteger(cursor.after) || cursor.after < 0
|
|
23
|
+
|| cursor.after > cursor.watermark)
|
|
24
|
+
invalid();
|
|
25
|
+
watermark = cursor.watermark;
|
|
26
|
+
after = cursor.after;
|
|
27
|
+
}
|
|
28
|
+
const eligible = values.filter(value => membership(value) <= watermark && membership(value) > after);
|
|
29
|
+
const items = eligible.slice(0, limit);
|
|
30
|
+
if (eligible.length <= items.length)
|
|
31
|
+
return { items };
|
|
32
|
+
const cursor = { v: 1, ...binding, watermark, after: membership(items.at(-1)) };
|
|
33
|
+
return { items, nextCursor: Buffer.from(JSON.stringify(cursor)).toString('base64url') };
|
|
34
|
+
}
|
|
35
|
+
function invalid() { throw new AgentError('INVALID_CURSOR', 'The page cursor is invalid for this collection.'); }
|
|
36
|
+
//# sourceMappingURL=pagination.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/runtime/pagination.ts"],"names":[],"mappings":"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","sourcesContent":["import { AgentError } from '../errors.js';\nimport type { PageOptions } from './snapshots.js';\n\nexport function paginate<T>(values:T[], options:PageOptions|undefined, binding:{instance:string;collection:string;filter:string},\n membership:(value:T)=>number): {items:T[];nextCursor?:string} {\n const limit=options?.limit ?? 100;\n if (!Number.isInteger(limit) || limit < 1 || limit > 1_000)\n throw new AgentError('INVALID_ARGUMENT','Page limit must be an integer from 1 through 1000.');\n const current=values.reduce((max,value)=>Math.max(max,membership(value)),0);\n let watermark=current, after=0;\n if (options?.cursor !== undefined) {\n if (typeof options.cursor !== 'string' || !options.cursor) invalid();\n let cursor: any;\n try { cursor=JSON.parse(Buffer.from(options.cursor,'base64url').toString('utf8')); } catch { invalid(); }\n if (!cursor || typeof cursor !== 'object' || Array.isArray(cursor)\n || Object.keys(cursor).sort().join(',') !== 'after,collection,filter,instance,v,watermark'\n || cursor.v !== 1 || cursor.instance !== binding.instance || cursor.collection !== binding.collection\n || cursor.filter !== binding.filter || !Number.isSafeInteger(cursor.watermark) || cursor.watermark < 0\n || cursor.watermark > current || !Number.isSafeInteger(cursor.after) || cursor.after < 0\n || cursor.after > cursor.watermark) invalid();\n watermark=cursor.watermark; after=cursor.after;\n }\n const eligible=values.filter(value=>membership(value)<=watermark && membership(value)>after);\n const items=eligible.slice(0,limit);\n if (eligible.length <= items.length) return {items};\n const cursor={v:1,...binding,watermark,after:membership(items.at(-1)!)};\n return {items,nextCursor:Buffer.from(JSON.stringify(cursor)).toString('base64url')};\n}\n\nfunction invalid():never { throw new AgentError('INVALID_CURSOR','The page cursor is invalid for this collection.'); }\n"]}
|