@akshar5/cohall 0.5.0 → 0.5.1

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/bin/cohall.js.map CHANGED
@@ -2,15 +2,15 @@
2
2
  "version": 3,
3
3
  "sources": ["../packages/protocol/src/index.ts", "../apps/relay/src/config.ts", "../apps/relay/src/hub.ts", "../apps/relay/src/database.ts", "../apps/relay/src/store.ts", "../apps/relay/src/main.ts", "../apps/device/src/main.ts", "../packages/client/src/index.ts", "../apps/device/src/cli.ts", "../packages/providers/src/index.ts", "../apps/device/src/config.ts", "../apps/device/src/delegation.ts", "../apps/device/src/device-overview.ts", "../apps/device/src/setup.ts", "../apps/device/src/relay-migration.ts", "../apps/device/src/service.ts", "../apps/device/src/upgrade.ts", "../apps/device/src/daemon.ts", "../apps/device/src/mcp.ts"],
4
4
  "sourcesContent": [
5
- "import { Schema } from \"effect\"\n\ndeclare const __COHALL_VERSION__: string\nexport const version =\n typeof __COHALL_VERSION__ === \"undefined\" ? \"0.0.0-development\" : __COHALL_VERSION__\n\nexport const maxSocketPayloadBytes = 1024 * 1024\n\nconst bounded = (maxLength: number) =>\n Schema.String.check(Schema.isMinLength(1), Schema.isMaxLength(maxLength))\nconst optionalText = (maxLength: number) => Schema.String.check(Schema.isMaxLength(maxLength))\nconst boundedArray = <S extends Schema.Top>(schema: S, maxLength: number) =>\n Schema.Array(schema).check(Schema.isMaxLength(maxLength))\nconst count = Schema.Int.check(Schema.isBetween({ minimum: 0, maximum: Number.MAX_SAFE_INTEGER }))\nconst uuid = <Name extends string>(name: Name) =>\n Schema.String.check(Schema.isUUID(4)).pipe(Schema.brand(name))\nconst isoTimestamp = <Name extends string>(name: Name) =>\n Schema.String.check(\n Schema.isPattern(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{1,9})?Z$/, {\n expected: \"an ISO-8601 UTC timestamp\",\n }),\n ).pipe(Schema.brand(name))\n\nexport const DeviceId = uuid(\"DeviceId\")\nexport type DeviceId = typeof DeviceId.Type\nexport const ThreadId = uuid(\"ThreadId\")\nexport type ThreadId = typeof ThreadId.Type\nexport const MessageId = uuid(\"MessageId\")\nexport type MessageId = typeof MessageId.Type\nexport const TaskId = uuid(\"TaskId\")\nexport type TaskId = typeof TaskId.Type\nexport const AuthSessionId = uuid(\"AuthSessionId\")\nexport type AuthSessionId = typeof AuthSessionId.Type\nexport const OperationId = uuid(\"OperationId\")\nexport type OperationId = typeof OperationId.Type\nexport const Timestamp = isoTimestamp(\"Timestamp\")\nexport type Timestamp = typeof Timestamp.Type\n\nexport const Platform = Schema.Literals([\"darwin\", \"linux\", \"windows\", \"unknown\"])\nexport type Platform = typeof Platform.Type\nexport const Provider = Schema.Literals([\"codex\", \"claude-code\", \"opencode\"])\nexport type Provider = typeof Provider.Type\nexport const DeviceStatus = Schema.Literals([\"online\", \"busy\", \"offline\"])\nexport type DeviceStatus = typeof DeviceStatus.Type\nexport const TaskStatus = Schema.Literals([\n \"queued\",\n \"assigned\",\n \"running\",\n \"cancelling\",\n \"completed\",\n \"failed\",\n \"cancelled\",\n])\nexport type TaskStatus = typeof TaskStatus.Type\nexport const OperationStatus = Schema.Literals([\n \"queued\",\n \"assigned\",\n \"running\",\n \"completed\",\n \"failed\",\n])\nexport type OperationStatus = typeof OperationStatus.Type\nexport const TaskTraceEventKind = Schema.Literals([...TaskStatus.literals, \"requeued\"])\nexport type TaskTraceEventKind = typeof TaskTraceEventKind.Type\nexport const MessageRole = Schema.Literals([\"human\", \"agent\", \"system\"])\nexport type MessageRole = typeof MessageRole.Type\nexport const ConnectionRole = Schema.Literals([\"client\", \"device\"])\nexport type ConnectionRole = typeof ConnectionRole.Type\n\nexport const AuthSession = Schema.Struct({\n id: AuthSessionId,\n label: bounded(128),\n role: ConnectionRole,\n createdAt: Timestamp,\n expiresAt: Timestamp,\n lastSeenAt: Timestamp,\n deviceId: Schema.optionalKey(DeviceId),\n revokedAt: Schema.optionalKey(Timestamp),\n})\nexport interface AuthSession extends Schema.Schema.Type<typeof AuthSession> {}\n\nexport const CreatePairingInput = Schema.Struct({\n label: bounded(128),\n roles: boundedArray(ConnectionRole, 2),\n})\nexport interface CreatePairingInput extends Schema.Schema.Type<typeof CreatePairingInput> {}\n\nexport const PairingCredential = Schema.Struct({\n token: bounded(256),\n expiresAt: Timestamp,\n})\nexport interface PairingCredential extends Schema.Schema.Type<typeof PairingCredential> {}\n\nexport const ExchangePairingInput = Schema.Struct({\n token: bounded(256),\n})\nexport interface ExchangePairingInput extends Schema.Schema.Type<typeof ExchangePairingInput> {}\n\nexport const SessionCredential = Schema.Struct({\n token: bounded(256),\n session: AuthSession,\n})\nexport interface SessionCredential extends Schema.Schema.Type<typeof SessionCredential> {}\n\nexport const PairingResult = Schema.Struct({\n credentials: boundedArray(SessionCredential, 2),\n})\nexport interface PairingResult extends Schema.Schema.Type<typeof PairingResult> {}\n\nexport const Capability = Schema.Struct({\n id: bounded(64),\n label: bounded(128),\n detail: Schema.optionalKey(optionalText(512)),\n})\nexport interface Capability extends Schema.Schema.Type<typeof Capability> {}\n\nexport const Workspace = Schema.Struct({\n path: bounded(4096),\n label: bounded(256),\n})\nexport interface Workspace extends Schema.Schema.Type<typeof Workspace> {}\n\nexport const Device = Schema.Struct({\n id: DeviceId,\n name: bounded(128),\n hostname: bounded(256),\n platform: Platform,\n architecture: bounded(64),\n status: DeviceStatus,\n providers: boundedArray(Provider, 3),\n capabilities: boundedArray(Capability, 64),\n workspaces: boundedArray(Workspace, 64),\n version: bounded(32),\n lastSeenAt: Timestamp,\n connectedAt: Schema.optionalKey(Timestamp),\n})\nexport interface Device extends Schema.Schema.Type<typeof Device> {}\n\nexport const Thread = Schema.Struct({\n id: ThreadId,\n title: bounded(256),\n createdAt: Timestamp,\n updatedAt: Timestamp,\n defaultDeviceId: Schema.optionalKey(DeviceId),\n})\nexport interface Thread extends Schema.Schema.Type<typeof Thread> {}\n\nexport const Message = Schema.Struct({\n id: MessageId,\n threadId: ThreadId,\n role: MessageRole,\n authorName: bounded(128),\n content: optionalText(131_072),\n createdAt: Timestamp,\n taskId: Schema.optionalKey(TaskId),\n deviceId: Schema.optionalKey(DeviceId),\n})\nexport interface Message extends Schema.Schema.Type<typeof Message> {}\n\nexport const Task = Schema.Struct({\n id: TaskId,\n threadId: ThreadId,\n prompt: bounded(131_072),\n context: Schema.optionalKey(optionalText(131_072)),\n provider: Provider,\n status: TaskStatus,\n sourceDeviceId: Schema.optionalKey(DeviceId),\n targetDeviceId: DeviceId,\n parentTaskId: Schema.optionalKey(TaskId),\n workspace: Schema.optionalKey(bounded(4096)),\n providerSessionId: Schema.optionalKey(bounded(4096)),\n result: Schema.optionalKey(optionalText(131_072)),\n error: Schema.optionalKey(optionalText(16_384)),\n createdAt: Timestamp,\n updatedAt: Timestamp,\n startedAt: Schema.optionalKey(Timestamp),\n completedAt: Schema.optionalKey(Timestamp),\n})\nexport interface Task extends Schema.Schema.Type<typeof Task> {}\n\nconst upgradeVersion = Schema.String.check(\n Schema.isPattern(/^(?:latest|v?\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?)$/, {\n expected: \"latest or an exact semantic version\",\n }),\n)\n\nexport const CreateUpgradeOperationsInput = Schema.Struct({\n target: upgradeVersion,\n restart: Schema.Boolean,\n})\nexport interface CreateUpgradeOperationsInput extends Schema.Schema.Type<\n typeof CreateUpgradeOperationsInput\n> {}\n\nexport const DeviceOperation = Schema.Struct({\n id: OperationId,\n kind: Schema.Literal(\"upgrade\"),\n status: OperationStatus,\n targetDeviceId: DeviceId,\n requestedVersion: upgradeVersion,\n restart: Schema.Boolean,\n result: Schema.optionalKey(optionalText(16_384)),\n error: Schema.optionalKey(optionalText(16_384)),\n createdAt: Timestamp,\n updatedAt: Timestamp,\n completedAt: Schema.optionalKey(Timestamp),\n})\nexport interface DeviceOperation extends Schema.Schema.Type<typeof DeviceOperation> {}\n\nexport const TaskStatusCounts = Schema.Struct({\n queued: count,\n assigned: count,\n running: count,\n cancelling: count,\n completed: count,\n failed: count,\n cancelled: count,\n})\nexport interface TaskStatusCounts extends Schema.Schema.Type<typeof TaskStatusCounts> {}\n\nexport const ProviderUsage = Schema.Struct({\n provider: Provider,\n tasks: count,\n})\nexport interface ProviderUsage extends Schema.Schema.Type<typeof ProviderUsage> {}\n\nexport const DeviceUsage = Schema.Struct({\n deviceId: DeviceId,\n deviceName: bounded(128),\n tasks: count,\n byStatus: TaskStatusCounts,\n byProvider: boundedArray(ProviderUsage, 3),\n})\nexport interface DeviceUsage extends Schema.Schema.Type<typeof DeviceUsage> {}\n\nexport const UsageSummary = Schema.Struct({\n retainedTasks: count,\n byStatus: TaskStatusCounts,\n byProvider: boundedArray(ProviderUsage, 3),\n devices: boundedArray(DeviceUsage, 256),\n})\nexport interface UsageSummary extends Schema.Schema.Type<typeof UsageSummary> {}\n\nexport const TaskTraceEvent = Schema.Struct({\n kind: TaskTraceEventKind,\n at: Timestamp,\n detail: Schema.optionalKey(optionalText(512)),\n})\nexport interface TaskTraceEvent extends Schema.Schema.Type<typeof TaskTraceEvent> {}\n\nexport const TaskTrace = Schema.Struct({\n taskId: TaskId,\n threadId: ThreadId,\n status: TaskStatus,\n provider: Provider,\n sourceDeviceId: Schema.optionalKey(DeviceId),\n targetDevice: Device,\n parentTaskId: Schema.optionalKey(TaskId),\n workspace: Schema.optionalKey(bounded(4096)),\n createdAt: Timestamp,\n updatedAt: Timestamp,\n startedAt: Schema.optionalKey(Timestamp),\n completedAt: Schema.optionalKey(Timestamp),\n events: boundedArray(TaskTraceEvent, 100),\n truncated: Schema.Boolean,\n error: Schema.optionalKey(optionalText(16_384)),\n})\nexport interface TaskTrace extends Schema.Schema.Type<typeof TaskTrace> {}\n\nexport const ThreadContext = Schema.Struct({\n thread: Thread,\n messages: boundedArray(Message, 20),\n tasks: boundedArray(Task, 20),\n truncated: Schema.Boolean,\n})\nexport interface ThreadContext extends Schema.Schema.Type<typeof ThreadContext> {}\n\nexport const CreateTaskInput = Schema.Struct({\n threadId: Schema.optionalKey(ThreadId),\n title: Schema.optionalKey(bounded(256)),\n prompt: bounded(131_072),\n context: Schema.optionalKey(optionalText(131_072)),\n provider: Schema.optionalKey(Provider),\n targetDeviceId: Schema.optionalKey(DeviceId),\n parentTaskId: Schema.optionalKey(TaskId),\n workspace: Schema.optionalKey(bounded(4096)),\n})\nexport interface CreateTaskInput extends Schema.Schema.Type<typeof CreateTaskInput> {}\n\nexport const SocketEvent = Schema.TaggedUnion({\n Authenticate: { token: bounded(256) },\n Connected: { serverVersion: bounded(32), connectedAt: Timestamp },\n DeviceHello: { device: Device },\n DeviceHeartbeat: { deviceId: DeviceId, status: DeviceStatus },\n TaskAssigned: { task: Task },\n TaskAccepted: { taskId: TaskId },\n TaskFinished: {\n taskId: TaskId,\n result: optionalText(131_072),\n providerSessionId: Schema.optionalKey(bounded(4096)),\n },\n TaskFailed: { taskId: TaskId, error: bounded(16_384) },\n TaskCancelled: { taskId: TaskId },\n TaskSettled: { taskId: TaskId },\n CancelTask: { taskId: TaskId },\n OperationAssigned: { operation: DeviceOperation },\n OperationAccepted: { operationId: OperationId },\n OperationFinished: { operationId: OperationId, result: optionalText(16_384) },\n OperationFailed: { operationId: OperationId, error: bounded(16_384) },\n OperationSettled: { operationId: OperationId },\n Error: { code: bounded(64), message: bounded(2048) },\n})\nexport type SocketEvent = typeof SocketEvent.Type\n\nexport const ErrorResponse = Schema.Struct({\n error: bounded(2048),\n})\nexport interface ErrorResponse extends Schema.Schema.Type<typeof ErrorResponse> {}\n\nexport const terminalTaskStatuses: ReadonlySet<TaskStatus> = new Set([\n \"completed\",\n \"failed\",\n \"cancelled\",\n])\nexport const isTerminalTask = (task: Task): boolean => terminalTaskStatuses.has(task.status)\nexport const now = (): Timestamp => Timestamp.make(new Date().toISOString())\nexport const makeDeviceId = (): DeviceId => DeviceId.make(crypto.randomUUID())\nexport const makeThreadId = (): ThreadId => ThreadId.make(crypto.randomUUID())\nexport const makeMessageId = (): MessageId => MessageId.make(crypto.randomUUID())\nexport const makeTaskId = (): TaskId => TaskId.make(crypto.randomUUID())\nexport const makeAuthSessionId = (): AuthSessionId => AuthSessionId.make(crypto.randomUUID())\nexport const makeOperationId = (): OperationId => OperationId.make(crypto.randomUUID())\n\nexport const decodeCreatePairingInput = Schema.decodeUnknownEffect(CreatePairingInput)\nexport const decodeExchangePairingInput = Schema.decodeUnknownEffect(ExchangePairingInput)\nexport const decodeCreateTaskInput = Schema.decodeUnknownEffect(CreateTaskInput)\nexport const decodeCreateUpgradeOperationsInput = Schema.decodeUnknownEffect(\n CreateUpgradeOperationsInput,\n)\nexport const decodeDevice = Schema.decodeUnknownEffect(Device)\nexport const decodeSocketEvent = Schema.decodeUnknownEffect(SocketEvent)\n",
5
+ "import { Schema } from \"effect\"\n\ndeclare const __COHALL_VERSION__: string\nexport const version =\n typeof __COHALL_VERSION__ === \"undefined\" ? \"0.0.0-development\" : __COHALL_VERSION__\n\nexport const maxSocketPayloadBytes = 1024 * 1024\n\nconst bounded = (maxLength: number) =>\n Schema.String.check(Schema.isMinLength(1), Schema.isMaxLength(maxLength))\nconst optionalText = (maxLength: number) => Schema.String.check(Schema.isMaxLength(maxLength))\nconst boundedArray = <S extends Schema.Top>(schema: S, maxLength: number) =>\n Schema.Array(schema).check(Schema.isMaxLength(maxLength))\nconst count = Schema.Int.check(Schema.isBetween({ minimum: 0, maximum: Number.MAX_SAFE_INTEGER }))\nconst uuid = <Name extends string>(name: Name) =>\n Schema.String.check(Schema.isUUID(4)).pipe(Schema.brand(name))\nconst isoTimestamp = <Name extends string>(name: Name) =>\n Schema.String.check(\n Schema.isPattern(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{1,9})?Z$/, {\n expected: \"an ISO-8601 UTC timestamp\",\n }),\n ).pipe(Schema.brand(name))\n\nexport const DeviceId = uuid(\"DeviceId\")\nexport type DeviceId = typeof DeviceId.Type\nexport const ThreadId = uuid(\"ThreadId\")\nexport type ThreadId = typeof ThreadId.Type\nexport const MessageId = uuid(\"MessageId\")\nexport type MessageId = typeof MessageId.Type\nexport const TaskId = uuid(\"TaskId\")\nexport type TaskId = typeof TaskId.Type\nexport const AuthSessionId = uuid(\"AuthSessionId\")\nexport type AuthSessionId = typeof AuthSessionId.Type\nexport const OperationId = uuid(\"OperationId\")\nexport type OperationId = typeof OperationId.Type\nexport const Timestamp = isoTimestamp(\"Timestamp\")\nexport type Timestamp = typeof Timestamp.Type\n\nexport const Platform = Schema.Literals([\"darwin\", \"linux\", \"windows\", \"unknown\"])\nexport type Platform = typeof Platform.Type\nexport const Provider = Schema.Literals([\"codex\", \"claude-code\", \"opencode\"])\nexport type Provider = typeof Provider.Type\nexport const DeviceStatus = Schema.Literals([\"online\", \"busy\", \"offline\"])\nexport type DeviceStatus = typeof DeviceStatus.Type\nexport const TaskStatus = Schema.Literals([\n \"queued\",\n \"assigned\",\n \"running\",\n \"cancelling\",\n \"completed\",\n \"failed\",\n \"cancelled\",\n])\nexport type TaskStatus = typeof TaskStatus.Type\nexport const OperationStatus = Schema.Literals([\n \"queued\",\n \"assigned\",\n \"running\",\n \"completed\",\n \"failed\",\n])\nexport type OperationStatus = typeof OperationStatus.Type\nexport const TaskTraceEventKind = Schema.Literals([...TaskStatus.literals, \"requeued\"])\nexport type TaskTraceEventKind = typeof TaskTraceEventKind.Type\nexport const MessageRole = Schema.Literals([\"human\", \"agent\", \"system\"])\nexport type MessageRole = typeof MessageRole.Type\nexport const ConnectionRole = Schema.Literals([\"client\", \"device\"])\nexport type ConnectionRole = typeof ConnectionRole.Type\n\nexport const AuthSession = Schema.Struct({\n id: AuthSessionId,\n label: bounded(128),\n role: ConnectionRole,\n createdAt: Timestamp,\n expiresAt: Timestamp,\n lastSeenAt: Timestamp,\n deviceId: Schema.optionalKey(DeviceId),\n revokedAt: Schema.optionalKey(Timestamp),\n})\nexport interface AuthSession extends Schema.Schema.Type<typeof AuthSession> {}\n\nexport const CreatePairingInput = Schema.Struct({\n label: bounded(128),\n roles: boundedArray(ConnectionRole, 2),\n})\nexport interface CreatePairingInput extends Schema.Schema.Type<typeof CreatePairingInput> {}\n\nexport const PairingCredential = Schema.Struct({\n token: bounded(256),\n expiresAt: Timestamp,\n})\nexport interface PairingCredential extends Schema.Schema.Type<typeof PairingCredential> {}\n\nexport const ExchangePairingInput = Schema.Struct({\n token: bounded(256),\n})\nexport interface ExchangePairingInput extends Schema.Schema.Type<typeof ExchangePairingInput> {}\n\nexport const SessionCredential = Schema.Struct({\n token: bounded(256),\n session: AuthSession,\n})\nexport interface SessionCredential extends Schema.Schema.Type<typeof SessionCredential> {}\n\nexport const PairingResult = Schema.Struct({\n credentials: boundedArray(SessionCredential, 2),\n})\nexport interface PairingResult extends Schema.Schema.Type<typeof PairingResult> {}\n\nexport const Capability = Schema.Struct({\n id: bounded(64),\n label: bounded(128),\n detail: Schema.optionalKey(optionalText(512)),\n})\nexport interface Capability extends Schema.Schema.Type<typeof Capability> {}\n\nexport const Workspace = Schema.Struct({\n path: bounded(4096),\n label: bounded(256),\n})\nexport interface Workspace extends Schema.Schema.Type<typeof Workspace> {}\n\nexport const Device = Schema.Struct({\n id: DeviceId,\n name: bounded(128),\n hostname: bounded(256),\n platform: Platform,\n architecture: bounded(64),\n status: DeviceStatus,\n providers: boundedArray(Provider, 3),\n capabilities: boundedArray(Capability, 64),\n workspaces: boundedArray(Workspace, 64),\n version: bounded(32),\n lastSeenAt: Timestamp,\n connectedAt: Schema.optionalKey(Timestamp),\n})\nexport interface Device extends Schema.Schema.Type<typeof Device> {}\n\nexport const minimumDeviceOperationVersion = \"0.5.0\"\n\nconst parsedVersion = (value: string): readonly [number, number, number, boolean] | undefined => {\n const match = /^v?(\\d+)\\.(\\d+)\\.(\\d+)(-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?$/.exec(value)\n if (match === null) {\n return undefined\n }\n const core = match.slice(1, 4).map(Number)\n if (core.length !== 3 || core.some((part) => !Number.isSafeInteger(part))) {\n return undefined\n }\n return [core[0] ?? 0, core[1] ?? 0, core[2] ?? 0, match[4] !== undefined]\n}\n\nexport const supportsDeviceOperations = (candidate: string): boolean => {\n if (candidate === \"0.0.0-development\") {\n return true\n }\n const current = parsedVersion(candidate)\n const minimum = parsedVersion(minimumDeviceOperationVersion)\n if (current === undefined || minimum === undefined) {\n return false\n }\n for (let index = 0; index < 3; index += 1) {\n if (current[index] !== minimum[index]) {\n return (current[index] ?? 0) > (minimum[index] ?? 0)\n }\n }\n return !current[3]\n}\n\nexport const assertDeviceOperationSupport = (\n devices: ReadonlyArray<{ readonly name: string; readonly version: string }>,\n): void => {\n const unsupported = devices.filter((device) => !supportsDeviceOperations(device.version))\n if (unsupported.length === 0) {\n return\n }\n throw new Error(\n `All-device upgrades require Cohall ${minimumDeviceOperationVersion} or newer on every device. Upgrade individually first: ${unsupported.map((device) => `${device.name} (${device.version})`).join(\", \")}`,\n )\n}\n\nexport const Thread = Schema.Struct({\n id: ThreadId,\n title: bounded(256),\n createdAt: Timestamp,\n updatedAt: Timestamp,\n defaultDeviceId: Schema.optionalKey(DeviceId),\n})\nexport interface Thread extends Schema.Schema.Type<typeof Thread> {}\n\nexport const Message = Schema.Struct({\n id: MessageId,\n threadId: ThreadId,\n role: MessageRole,\n authorName: bounded(128),\n content: optionalText(131_072),\n createdAt: Timestamp,\n taskId: Schema.optionalKey(TaskId),\n deviceId: Schema.optionalKey(DeviceId),\n})\nexport interface Message extends Schema.Schema.Type<typeof Message> {}\n\nexport const Task = Schema.Struct({\n id: TaskId,\n threadId: ThreadId,\n prompt: bounded(131_072),\n context: Schema.optionalKey(optionalText(131_072)),\n provider: Provider,\n status: TaskStatus,\n sourceDeviceId: Schema.optionalKey(DeviceId),\n targetDeviceId: DeviceId,\n parentTaskId: Schema.optionalKey(TaskId),\n workspace: Schema.optionalKey(bounded(4096)),\n providerSessionId: Schema.optionalKey(bounded(4096)),\n result: Schema.optionalKey(optionalText(131_072)),\n error: Schema.optionalKey(optionalText(16_384)),\n createdAt: Timestamp,\n updatedAt: Timestamp,\n startedAt: Schema.optionalKey(Timestamp),\n completedAt: Schema.optionalKey(Timestamp),\n})\nexport interface Task extends Schema.Schema.Type<typeof Task> {}\n\nconst upgradeVersion = Schema.String.check(\n Schema.isPattern(/^(?:latest|v?\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?)$/, {\n expected: \"latest or an exact semantic version\",\n }),\n)\n\nexport const CreateUpgradeOperationsInput = Schema.Struct({\n target: upgradeVersion,\n restart: Schema.Boolean,\n})\nexport interface CreateUpgradeOperationsInput extends Schema.Schema.Type<\n typeof CreateUpgradeOperationsInput\n> {}\n\nexport const DeviceOperation = Schema.Struct({\n id: OperationId,\n kind: Schema.Literal(\"upgrade\"),\n status: OperationStatus,\n targetDeviceId: DeviceId,\n requestedVersion: upgradeVersion,\n restart: Schema.Boolean,\n result: Schema.optionalKey(optionalText(16_384)),\n error: Schema.optionalKey(optionalText(16_384)),\n createdAt: Timestamp,\n updatedAt: Timestamp,\n completedAt: Schema.optionalKey(Timestamp),\n})\nexport interface DeviceOperation extends Schema.Schema.Type<typeof DeviceOperation> {}\n\nexport const TaskStatusCounts = Schema.Struct({\n queued: count,\n assigned: count,\n running: count,\n cancelling: count,\n completed: count,\n failed: count,\n cancelled: count,\n})\nexport interface TaskStatusCounts extends Schema.Schema.Type<typeof TaskStatusCounts> {}\n\nexport const ProviderUsage = Schema.Struct({\n provider: Provider,\n tasks: count,\n})\nexport interface ProviderUsage extends Schema.Schema.Type<typeof ProviderUsage> {}\n\nexport const DeviceUsage = Schema.Struct({\n deviceId: DeviceId,\n deviceName: bounded(128),\n tasks: count,\n byStatus: TaskStatusCounts,\n byProvider: boundedArray(ProviderUsage, 3),\n})\nexport interface DeviceUsage extends Schema.Schema.Type<typeof DeviceUsage> {}\n\nexport const UsageSummary = Schema.Struct({\n retainedTasks: count,\n byStatus: TaskStatusCounts,\n byProvider: boundedArray(ProviderUsage, 3),\n devices: boundedArray(DeviceUsage, 256),\n})\nexport interface UsageSummary extends Schema.Schema.Type<typeof UsageSummary> {}\n\nexport const TaskTraceEvent = Schema.Struct({\n kind: TaskTraceEventKind,\n at: Timestamp,\n detail: Schema.optionalKey(optionalText(512)),\n})\nexport interface TaskTraceEvent extends Schema.Schema.Type<typeof TaskTraceEvent> {}\n\nexport const TaskTrace = Schema.Struct({\n taskId: TaskId,\n threadId: ThreadId,\n status: TaskStatus,\n provider: Provider,\n sourceDeviceId: Schema.optionalKey(DeviceId),\n targetDevice: Device,\n parentTaskId: Schema.optionalKey(TaskId),\n workspace: Schema.optionalKey(bounded(4096)),\n createdAt: Timestamp,\n updatedAt: Timestamp,\n startedAt: Schema.optionalKey(Timestamp),\n completedAt: Schema.optionalKey(Timestamp),\n events: boundedArray(TaskTraceEvent, 100),\n truncated: Schema.Boolean,\n error: Schema.optionalKey(optionalText(16_384)),\n})\nexport interface TaskTrace extends Schema.Schema.Type<typeof TaskTrace> {}\n\nexport const ThreadContext = Schema.Struct({\n thread: Thread,\n messages: boundedArray(Message, 20),\n tasks: boundedArray(Task, 20),\n truncated: Schema.Boolean,\n})\nexport interface ThreadContext extends Schema.Schema.Type<typeof ThreadContext> {}\n\nexport const CreateTaskInput = Schema.Struct({\n threadId: Schema.optionalKey(ThreadId),\n title: Schema.optionalKey(bounded(256)),\n prompt: bounded(131_072),\n context: Schema.optionalKey(optionalText(131_072)),\n provider: Schema.optionalKey(Provider),\n targetDeviceId: Schema.optionalKey(DeviceId),\n parentTaskId: Schema.optionalKey(TaskId),\n workspace: Schema.optionalKey(bounded(4096)),\n})\nexport interface CreateTaskInput extends Schema.Schema.Type<typeof CreateTaskInput> {}\n\nexport const SocketEvent = Schema.TaggedUnion({\n Authenticate: { token: bounded(256) },\n Connected: { serverVersion: bounded(32), connectedAt: Timestamp },\n DeviceHello: { device: Device },\n DeviceHeartbeat: { deviceId: DeviceId, status: DeviceStatus },\n TaskAssigned: { task: Task },\n TaskAccepted: { taskId: TaskId },\n TaskFinished: {\n taskId: TaskId,\n result: optionalText(131_072),\n providerSessionId: Schema.optionalKey(bounded(4096)),\n },\n TaskFailed: { taskId: TaskId, error: bounded(16_384) },\n TaskCancelled: { taskId: TaskId },\n TaskSettled: { taskId: TaskId },\n CancelTask: { taskId: TaskId },\n OperationAssigned: { operation: DeviceOperation },\n OperationAccepted: { operationId: OperationId },\n OperationFinished: { operationId: OperationId, result: optionalText(16_384) },\n OperationFailed: { operationId: OperationId, error: bounded(16_384) },\n OperationSettled: { operationId: OperationId },\n Error: { code: bounded(64), message: bounded(2048) },\n})\nexport type SocketEvent = typeof SocketEvent.Type\n\nexport const ErrorResponse = Schema.Struct({\n error: bounded(2048),\n})\nexport interface ErrorResponse extends Schema.Schema.Type<typeof ErrorResponse> {}\n\nexport const terminalTaskStatuses: ReadonlySet<TaskStatus> = new Set([\n \"completed\",\n \"failed\",\n \"cancelled\",\n])\nexport const isTerminalTask = (task: Task): boolean => terminalTaskStatuses.has(task.status)\nexport const now = (): Timestamp => Timestamp.make(new Date().toISOString())\nexport const makeDeviceId = (): DeviceId => DeviceId.make(crypto.randomUUID())\nexport const makeThreadId = (): ThreadId => ThreadId.make(crypto.randomUUID())\nexport const makeMessageId = (): MessageId => MessageId.make(crypto.randomUUID())\nexport const makeTaskId = (): TaskId => TaskId.make(crypto.randomUUID())\nexport const makeAuthSessionId = (): AuthSessionId => AuthSessionId.make(crypto.randomUUID())\nexport const makeOperationId = (): OperationId => OperationId.make(crypto.randomUUID())\n\nexport const decodeCreatePairingInput = Schema.decodeUnknownEffect(CreatePairingInput)\nexport const decodeExchangePairingInput = Schema.decodeUnknownEffect(ExchangePairingInput)\nexport const decodeCreateTaskInput = Schema.decodeUnknownEffect(CreateTaskInput)\nexport const decodeCreateUpgradeOperationsInput = Schema.decodeUnknownEffect(\n CreateUpgradeOperationsInput,\n)\nexport const decodeDevice = Schema.decodeUnknownEffect(Device)\nexport const decodeSocketEvent = Schema.decodeUnknownEffect(SocketEvent)\n",
6
6
  "import { Effect, Schema } from \"effect\"\nimport { access, chmod, mkdir, readFile, writeFile } from \"node:fs/promises\"\nimport { homedir, platform } from \"node:os\"\nimport { join, resolve } from \"node:path\"\n\nexport const RelayConfiguration = Schema.Struct({\n host: Schema.NonEmptyString,\n port: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 65_535 })),\n token: Schema.String.check(Schema.isMinLength(32)),\n dataDirectory: Schema.NonEmptyString,\n databasePath: Schema.NonEmptyString,\n allowRemote: Schema.Boolean,\n historyTaskLimit: Schema.Int.check(Schema.isBetween({ minimum: 100, maximum: 100_000 })),\n})\nexport interface RelayConfiguration extends Schema.Schema.Type<typeof RelayConfiguration> {}\n\nconst defaultDataDirectory = (): string => {\n if (platform() === \"win32\") {\n return join(process.env.LOCALAPPDATA ?? join(homedir(), \"AppData\", \"Local\"), \"Cohall\")\n }\n if (platform() === \"darwin\") {\n return join(homedir(), \"Library\", \"Application Support\", \"Cohall\", \"relay\")\n }\n return join(process.env.XDG_DATA_HOME ?? join(homedir(), \".local\", \"share\"), \"cohall\")\n}\n\nconst generatedToken = (): string =>\n Array.from(crypto.getRandomValues(new Uint8Array(32)), (value) =>\n value.toString(16).padStart(2, \"0\"),\n ).join(\"\")\n\nconst tokenFrom = async (path: string): Promise<string> => {\n if (\n await access(path)\n .then(() => true)\n .catch(() => false)\n ) {\n return (await readFile(path, \"utf8\")).trim()\n }\n const token = generatedToken()\n await writeFile(path, `${token}\\n`, { mode: 0o600 })\n if (platform() !== \"win32\") {\n await chmod(path, 0o600)\n }\n return token\n}\n\nconst booleanEnvironment = (name: string): boolean => {\n const value = process.env[name]\n if (value === undefined || value === \"false\" || value === \"0\") {\n return false\n }\n if (value === \"true\" || value === \"1\") {\n return true\n }\n throw new Error(`${name} must be true or false`)\n}\n\nconst isLoopback = (host: string): boolean =>\n host === \"127.0.0.1\" || host === \"localhost\" || host === \"::1\"\n\nexport const loadEnvironmentConfiguration = Effect.tryPromise({\n try: async () => {\n const host = process.env.COHALL_RELAY_HOST ?? \"127.0.0.1\"\n const port = Number(process.env.COHALL_RELAY_PORT ?? \"8787\")\n const allowRemote = booleanEnvironment(\"COHALL_RELAY_ALLOW_REMOTE\")\n if (!isLoopback(host) && !allowRemote) {\n throw new Error(\n \"Remote relay binding is disabled. Use a private network or TLS reverse proxy, then set COHALL_RELAY_ALLOW_REMOTE=true.\",\n )\n }\n const dataDirectory = resolve(process.env.COHALL_DATA_DIR ?? defaultDataDirectory())\n await mkdir(dataDirectory, { recursive: true, mode: 0o700 })\n if (platform() !== \"win32\") {\n await chmod(dataDirectory, 0o700)\n }\n const token = process.env.COHALL_TOKEN ?? (await tokenFrom(join(dataDirectory, \"owner-token\")))\n if (token.length < 32) {\n throw new Error(\"The Cohall relay owner token must be at least 32 characters\")\n }\n const historyTaskLimit = Number(process.env.COHALL_HISTORY_TASK_LIMIT ?? \"1000\")\n return Schema.decodeUnknownSync(RelayConfiguration)({\n host,\n port,\n token,\n dataDirectory,\n databasePath: join(dataDirectory, \"cohall.db\"),\n allowRemote,\n historyTaskLimit,\n })\n },\n catch: (cause) => (cause instanceof Error ? cause : new Error(String(cause))),\n})\n",
7
7
  "import type { AuthSessionId, DeviceId, SocketEvent, Timestamp } from \"@cohall/protocol\"\nimport { WebSocket } from \"ws\"\n\nexport interface ConnectionData {\n processing: Promise<void>\n stageDeadline: ReturnType<typeof setTimeout> | undefined\n preAuthFrameReceived: boolean\n queuedMessages: number\n closed: boolean\n}\n\nexport type ConnectionSocket = WebSocket & { data: ConnectionData }\n\ninterface Principal {\n readonly sessionId?: AuthSessionId\n readonly boundDeviceId?: DeviceId\n readonly expiresAt?: Timestamp\n}\n\nexport class Hub {\n readonly #principals = new Map<ConnectionSocket, Principal>()\n readonly #devices = new Map<DeviceId, ConnectionSocket>()\n readonly #deviceIds = new Map<ConnectionSocket, DeviceId>()\n readonly #sessions = new Map<AuthSessionId, ConnectionSocket>()\n readonly #ownerSockets = new Set<ConnectionSocket>()\n\n attach(socket: ConnectionSocket, principal: Principal): boolean {\n if (principal.sessionId === undefined) {\n if (this.#ownerSockets.size >= 16) {\n return false\n }\n this.#ownerSockets.add(socket)\n } else {\n const existing = this.#sessions.get(principal.sessionId)\n if (existing !== undefined && existing.readyState === WebSocket.OPEN) {\n return false\n }\n this.#sessions.set(principal.sessionId, socket)\n }\n this.#principals.set(socket, principal)\n if (socket.data.stageDeadline !== undefined) {\n clearTimeout(socket.data.stageDeadline)\n socket.data.stageDeadline = undefined\n }\n return true\n }\n\n isAuthorized(socket: ConnectionSocket): boolean {\n const principal = this.#principals.get(socket)\n if (principal === undefined) {\n return false\n }\n if (principal.expiresAt !== undefined && Date.parse(principal.expiresAt) <= Date.now()) {\n socket.close(4003, \"Session expired\")\n return false\n }\n return true\n }\n\n boundDeviceId(socket: ConnectionSocket): DeviceId | undefined {\n return this.#principals.get(socket)?.boundDeviceId\n }\n\n registerDevice(deviceId: DeviceId, socket: ConnectionSocket): boolean {\n if (this.#deviceIds.has(socket)) {\n return false\n }\n const previous = this.#devices.get(deviceId)\n if (previous !== undefined && previous !== socket && previous.readyState === WebSocket.OPEN) {\n return false\n }\n this.#devices.set(deviceId, socket)\n this.#deviceIds.set(socket, deviceId)\n if (socket.data.stageDeadline !== undefined) {\n clearTimeout(socket.data.stageDeadline)\n socket.data.stageDeadline = undefined\n }\n return true\n }\n\n pendingConnections(): number {\n return this.#principals.size - this.#deviceIds.size\n }\n\n detach(socket: ConnectionSocket): DeviceId | undefined {\n if (socket.data.stageDeadline !== undefined) {\n clearTimeout(socket.data.stageDeadline)\n }\n const principal = this.#principals.get(socket)\n this.#principals.delete(socket)\n this.#ownerSockets.delete(socket)\n if (principal?.sessionId !== undefined && this.#sessions.get(principal.sessionId) === socket) {\n this.#sessions.delete(principal.sessionId)\n }\n const deviceId = this.#deviceIds.get(socket)\n this.#deviceIds.delete(socket)\n if (deviceId === undefined || this.#devices.get(deviceId) !== socket) {\n return undefined\n }\n this.#devices.delete(deviceId)\n return deviceId\n }\n\n deviceId(socket: ConnectionSocket): DeviceId | undefined {\n return this.#deviceIds.get(socket)\n }\n\n closeSession(sessionId: AuthSessionId): void {\n for (const [socket, principal] of this.#principals) {\n if (principal.sessionId === sessionId) {\n socket.close(4003, \"Session revoked\")\n }\n }\n }\n\n closeDevice(deviceId: DeviceId): void {\n this.#devices.get(deviceId)?.close(4003, \"Device forgotten\")\n }\n\n hasDevice(deviceId: DeviceId): boolean {\n return this.#devices.get(deviceId)?.readyState === WebSocket.OPEN\n }\n\n sendToDevice(deviceId: DeviceId, event: SocketEvent): boolean {\n const socket = this.#devices.get(deviceId)\n if (socket?.readyState !== WebSocket.OPEN || !this.isAuthorized(socket)) {\n return false\n }\n try {\n socket.send(JSON.stringify(event))\n return true\n } catch {\n return false\n }\n }\n}\n",
8
8
  "import { DatabaseSync, type SQLInputValue, type StatementSync } from \"node:sqlite\"\n\ninterface RunResult {\n readonly changes: number\n}\n\nclass Statement<Row, Parameters extends Array<SQLInputValue>> {\n readonly #statement: StatementSync\n\n constructor(statement: StatementSync) {\n this.#statement = statement\n }\n\n get(...parameters: Parameters): Row | null {\n const row = this.#statement.get(...parameters)\n return row === undefined ? null : (row as unknown as Row)\n }\n\n all(...parameters: Parameters): ReadonlyArray<Row> {\n return this.#statement.all(...parameters) as unknown as ReadonlyArray<Row>\n }\n\n run(...parameters: Parameters): RunResult {\n const result = this.#statement.run(...parameters)\n return { changes: Number(result.changes) }\n }\n}\n\nexport class Database {\n readonly #database: DatabaseSync\n\n constructor(path: string) {\n this.#database = new DatabaseSync(path)\n }\n\n query<\n Row = Record<string, unknown>,\n Parameters extends Array<SQLInputValue> = Array<SQLInputValue>,\n >(sql: string): Statement<Row, Parameters> {\n return new Statement(this.#database.prepare(sql))\n }\n\n exec(sql: string): void {\n this.#database.exec(sql)\n }\n\n transaction<Result>(operation: () => Result): () => Result {\n return () => {\n this.#database.exec(\"BEGIN IMMEDIATE\")\n try {\n const result = operation()\n this.#database.exec(\"COMMIT\")\n return result\n } catch (cause) {\n this.#database.exec(\"ROLLBACK\")\n throw cause\n }\n }\n }\n\n close(): void {\n this.#database.close()\n }\n}\n",
9
- "import {\n AuthSession,\n ConnectionRole,\n Device,\n DeviceId,\n DeviceOperation,\n DeviceUsage,\n Message,\n PairingCredential,\n PairingResult,\n Provider,\n Task,\n TaskId,\n TaskStatus,\n TaskTrace,\n TaskTraceEvent,\n TaskStatusCounts,\n Timestamp,\n Thread,\n ThreadContext,\n UsageSummary,\n makeAuthSessionId,\n makeDeviceId,\n makeMessageId,\n makeOperationId,\n makeTaskId,\n makeThreadId,\n now,\n type AuthSessionId,\n type ConnectionRole as ConnectionRoleName,\n type CreatePairingInput,\n type CreateTaskInput,\n type CreateUpgradeOperationsInput,\n type OperationId,\n type OperationStatus,\n type TaskTraceEventKind,\n type ThreadId,\n} from \"@cohall/protocol\"\nimport { Context, Effect, Layer, Schema } from \"effect\"\nimport { createHash, randomBytes } from \"node:crypto\"\nimport { Database } from \"./database.ts\"\n\nexport class PersistenceError extends Schema.TaggedErrorClass<PersistenceError>()(\n \"RelayStore.PersistenceError\",\n { operation: Schema.String, message: Schema.String },\n) {}\n\ninterface ThreadRow {\n readonly id: string\n readonly title: string\n readonly created_at: string\n readonly updated_at: string\n readonly default_device_id: string | null\n}\n\ninterface MessageRow {\n readonly id: string\n readonly thread_id: string\n readonly role: string\n readonly author_name: string\n readonly content: string\n readonly created_at: string\n readonly task_id: string | null\n readonly device_id: string | null\n}\n\ninterface DeviceRow {\n readonly id: string\n readonly name: string\n readonly hostname: string\n readonly platform: string\n readonly architecture: string\n readonly status: string\n readonly providers_json: string\n readonly capabilities_json: string\n readonly workspaces_json: string\n readonly version: string\n readonly last_seen_at: string\n readonly connected_at: string | null\n}\n\ninterface TaskRow {\n readonly id: string\n readonly thread_id: string\n readonly prompt: string\n readonly context: string | null\n readonly provider: string\n readonly status: string\n readonly source_device_id: string | null\n readonly target_device_id: string\n readonly parent_task_id: string | null\n readonly workspace: string | null\n readonly provider_session_id: string | null\n readonly result: string | null\n readonly error: string | null\n readonly created_at: string\n readonly updated_at: string\n readonly started_at: string | null\n readonly completed_at: string | null\n}\n\ninterface TaskTraceEventRow {\n readonly id: number\n readonly kind: string\n readonly created_at: string\n readonly detail: string | null\n}\n\ninterface DeviceOperationRow {\n readonly id: string\n readonly kind: string\n readonly status: string\n readonly target_device_id: string\n readonly requested_version: string\n readonly restart: number\n readonly result: string | null\n readonly error: string | null\n readonly created_at: string\n readonly updated_at: string\n readonly completed_at: string | null\n}\n\ninterface UsageRow {\n readonly device_id: string\n readonly device_name: string\n readonly status: string\n readonly provider: string\n readonly tasks: number\n}\n\ninterface PairingRow {\n readonly token_hash: string\n readonly label: string\n readonly roles_json: string\n readonly expires_at: string\n readonly used_at: string | null\n}\n\ninterface AuthSessionRow {\n readonly id: string\n readonly token_hash: string\n readonly label: string\n readonly roles_json: string\n readonly created_at: string\n readonly expires_at: string\n readonly last_seen_at: string\n readonly bound_device_id: string | null\n readonly revoked_at: string | null\n}\n\nexport interface TaskUpdate {\n readonly status?: TaskStatus\n readonly providerSessionId?: string\n readonly result?: string\n readonly error?: string\n readonly startedAt?: Timestamp\n readonly completedAt?: Timestamp\n}\n\nexport interface Interface {\n readonly recover: () => Effect.Effect<void, PersistenceError>\n readonly listDevices: () => Effect.Effect<ReadonlyArray<Device>, PersistenceError>\n readonly usage: () => Effect.Effect<UsageSummary, PersistenceError>\n readonly forgetDevice: (deviceId: DeviceId) => Effect.Effect<Device, PersistenceError>\n readonly upsertDevice: (device: Device) => Effect.Effect<Device, PersistenceError>\n readonly heartbeat: (\n deviceId: DeviceId,\n status: \"online\" | \"busy\",\n ) => Effect.Effect<Device, PersistenceError>\n readonly markDeviceOffline: (deviceId: DeviceId) => Effect.Effect<Device, PersistenceError>\n readonly createDelegation: (\n input: CreateTaskInput,\n targetDeviceId: DeviceId,\n sourceDeviceId?: DeviceId,\n providerSessionId?: string,\n ) => Effect.Effect<Task, PersistenceError>\n readonly getTask: (taskId: TaskId) => Effect.Effect<Task, PersistenceError>\n readonly traceTask: (taskId: TaskId) => Effect.Effect<TaskTrace, PersistenceError>\n readonly threadContext: (threadId: ThreadId) => Effect.Effect<ThreadContext, PersistenceError>\n readonly pendingTasksFor: (\n deviceId: DeviceId,\n ) => Effect.Effect<ReadonlyArray<Task>, PersistenceError>\n readonly assignTask: (taskId: TaskId) => Effect.Effect<Task, PersistenceError>\n readonly rollbackAssignment: (taskId: TaskId) => Effect.Effect<Task, PersistenceError>\n readonly acceptTask: (taskId: TaskId, deviceId: DeviceId) => Effect.Effect<Task, PersistenceError>\n readonly finishTask: (\n taskId: TaskId,\n deviceId: DeviceId,\n result: string,\n providerSessionId?: string,\n ) => Effect.Effect<Task, PersistenceError>\n readonly failTask: (\n taskId: TaskId,\n deviceId: DeviceId,\n error: string,\n ) => Effect.Effect<Task, PersistenceError>\n readonly acknowledgeCancellation: (\n taskId: TaskId,\n deviceId: DeviceId,\n ) => Effect.Effect<Task, PersistenceError>\n readonly requestCancellation: (taskId: TaskId) => Effect.Effect<Task, PersistenceError>\n readonly requeueTasksFor: (deviceId: DeviceId) => Effect.Effect<void, PersistenceError>\n readonly createUpgradeOperations: (\n input: CreateUpgradeOperationsInput,\n ) => Effect.Effect<ReadonlyArray<DeviceOperation>, PersistenceError>\n readonly listOperations: () => Effect.Effect<ReadonlyArray<DeviceOperation>, PersistenceError>\n readonly abandonOperation: (\n operationId: OperationId,\n ) => Effect.Effect<DeviceOperation, PersistenceError>\n readonly pendingOperationsFor: (\n deviceId: DeviceId,\n ) => Effect.Effect<ReadonlyArray<DeviceOperation>, PersistenceError>\n readonly assignOperation: (\n operationId: OperationId,\n ) => Effect.Effect<DeviceOperation, PersistenceError>\n readonly rollbackOperation: (\n operationId: OperationId,\n ) => Effect.Effect<DeviceOperation, PersistenceError>\n readonly acceptOperation: (\n operationId: OperationId,\n deviceId: DeviceId,\n ) => Effect.Effect<DeviceOperation, PersistenceError>\n readonly finishOperation: (\n operationId: OperationId,\n deviceId: DeviceId,\n result: string,\n ) => Effect.Effect<DeviceOperation, PersistenceError>\n readonly failOperation: (\n operationId: OperationId,\n deviceId: DeviceId,\n error: string,\n ) => Effect.Effect<DeviceOperation, PersistenceError>\n readonly requeueOperationsFor: (deviceId: DeviceId) => Effect.Effect<void, PersistenceError>\n readonly sessionFor: (\n threadId: ThreadId,\n deviceId: DeviceId,\n provider: Provider,\n ) => Effect.Effect<string | undefined, PersistenceError>\n readonly createPairing: (\n input: CreatePairingInput,\n ) => Effect.Effect<PairingCredential, PersistenceError>\n readonly exchangePairing: (token: string) => Effect.Effect<PairingResult, PersistenceError>\n readonly authenticateSession: (\n token: string,\n role: ConnectionRoleName,\n ) => Effect.Effect<AuthSession | undefined, PersistenceError>\n readonly listAuthSessions: () => Effect.Effect<ReadonlyArray<AuthSession>, PersistenceError>\n readonly revokeAuthSession: (\n sessionId: AuthSessionId,\n ) => Effect.Effect<AuthSession, PersistenceError>\n}\n\nexport class Service extends Context.Service<Service, Interface>()(\"@cohall/RelayStore\") {}\n\nconst operationError =\n (operation: string) =>\n (cause: unknown): PersistenceError =>\n new PersistenceError({\n operation,\n message: cause instanceof Error ? cause.message : String(cause),\n })\n\nconst decode = <S extends Schema.Top & { readonly DecodingServices: never }>(\n operation: string,\n schema: S,\n value: unknown,\n): Effect.Effect<S[\"Type\"], PersistenceError> =>\n Schema.decodeUnknownEffect(schema)(value).pipe(Effect.mapError(operationError(operation)))\n\nconst threadFromRow = (row: ThreadRow): Effect.Effect<Thread, PersistenceError> =>\n decode(\"RelayStore.decodeThread\", Thread, {\n id: row.id,\n title: row.title,\n createdAt: row.created_at,\n updatedAt: row.updated_at,\n ...(row.default_device_id === null ? {} : { defaultDeviceId: row.default_device_id }),\n })\n\nconst messageFromRow = (row: MessageRow): Effect.Effect<Message, PersistenceError> =>\n decode(\"RelayStore.decodeMessage\", Message, {\n id: row.id,\n threadId: row.thread_id,\n role: row.role === \"tool\" ? \"agent\" : row.role,\n authorName: row.author_name,\n content: row.content,\n createdAt: row.created_at,\n ...(row.task_id === null ? {} : { taskId: row.task_id }),\n ...(row.device_id === null ? {} : { deviceId: row.device_id }),\n })\n\nconst deviceFromRow = (row: DeviceRow): Effect.Effect<Device, PersistenceError> =>\n decode(\"RelayStore.decodeDevice\", Device, {\n id: row.id,\n name: row.name,\n hostname: row.hostname,\n platform: row.platform,\n architecture: row.architecture,\n status: row.status,\n providers: JSON.parse(row.providers_json) as unknown,\n capabilities: JSON.parse(row.capabilities_json) as unknown,\n workspaces: JSON.parse(row.workspaces_json) as unknown,\n version: row.version,\n lastSeenAt: row.last_seen_at,\n ...(row.connected_at === null ? {} : { connectedAt: row.connected_at }),\n })\n\nconst taskFromRow = (row: TaskRow): Effect.Effect<Task, PersistenceError> =>\n decode(\"RelayStore.decodeTask\", Task, {\n id: row.id,\n threadId: row.thread_id,\n prompt: row.prompt,\n provider: row.provider,\n status: row.status,\n targetDeviceId: row.target_device_id,\n createdAt: row.created_at,\n updatedAt: row.updated_at,\n ...(row.context === null ? {} : { context: row.context }),\n ...(row.source_device_id === null ? {} : { sourceDeviceId: row.source_device_id }),\n ...(row.parent_task_id === null ? {} : { parentTaskId: row.parent_task_id }),\n ...(row.workspace === null ? {} : { workspace: row.workspace }),\n ...(row.provider_session_id === null ? {} : { providerSessionId: row.provider_session_id }),\n ...(row.result === null ? {} : { result: row.result }),\n ...(row.error === null ? {} : { error: row.error }),\n ...(row.started_at === null ? {} : { startedAt: row.started_at }),\n ...(row.completed_at === null ? {} : { completedAt: row.completed_at }),\n })\n\nconst operationFromRow = (\n row: DeviceOperationRow,\n): Effect.Effect<DeviceOperation, PersistenceError> =>\n decode(\"RelayStore.decodeOperation\", DeviceOperation, {\n id: row.id,\n kind: row.kind,\n status: row.status,\n targetDeviceId: row.target_device_id,\n requestedVersion: row.requested_version,\n restart: row.restart === 1,\n createdAt: row.created_at,\n updatedAt: row.updated_at,\n ...(row.result === null ? {} : { result: row.result }),\n ...(row.error === null ? {} : { error: row.error }),\n ...(row.completed_at === null ? {} : { completedAt: row.completed_at }),\n })\n\nconst emptyStatusCounts = (): Record<TaskStatus, number> => ({\n queued: 0,\n assigned: 0,\n running: 0,\n cancelling: 0,\n completed: 0,\n failed: 0,\n cancelled: 0,\n})\n\nconst taskTraceEventFromRow = (\n row: TaskTraceEventRow,\n): Effect.Effect<TaskTraceEvent, PersistenceError> =>\n decode(\"RelayStore.decodeTaskTraceEvent\", TaskTraceEvent, {\n kind: row.kind,\n at: row.created_at,\n ...(row.detail === null ? {} : { detail: row.detail }),\n })\n\nconst rolesFromRow = (row: AuthSessionRow): ReadonlyArray<ConnectionRoleName> =>\n Schema.decodeUnknownSync(Schema.Array(ConnectionRole))(JSON.parse(row.roles_json))\n\nconst authSessionFromRow = (row: AuthSessionRow): Effect.Effect<AuthSession, PersistenceError> => {\n const roles = rolesFromRow(row)\n const role = roles[0]\n return role === undefined\n ? Effect.fail(\n new PersistenceError({\n operation: \"RelayStore.decodeAuthSession\",\n message: `Session ${row.id} has no role`,\n }),\n )\n : decode(\"RelayStore.decodeAuthSession\", AuthSession, {\n id: row.id,\n label: row.label,\n role,\n createdAt: row.created_at,\n expiresAt: row.expires_at,\n lastSeenAt: row.last_seen_at,\n ...(row.bound_device_id === null ? {} : { deviceId: row.bound_device_id }),\n ...(row.revoked_at === null ? {} : { revokedAt: row.revoked_at }),\n })\n}\n\nconst secret = (prefix: \"pair\" | \"session\"): string => {\n return `cohall_${prefix}_${randomBytes(32).toString(\"hex\")}`\n}\nconst tokenHash = (token: string): string => createHash(\"sha256\").update(token).digest(\"hex\")\n\nconst providerName = (provider: Provider): string => {\n switch (provider) {\n case \"codex\":\n return \"Codex\"\n case \"claude-code\":\n return \"Claude Code\"\n case \"opencode\":\n return \"OpenCode\"\n }\n}\n\nconst recentWithin = <A>(items: ReadonlyArray<A>, byteBudget: number) => {\n const encoder = new TextEncoder()\n const selected: Array<A> = []\n let bytes = 0\n for (let index = items.length - 1; index >= 0; index -= 1) {\n const item = items[index]\n if (item === undefined) {\n continue\n }\n const itemBytes = encoder.encode(JSON.stringify(item)).byteLength\n if (bytes + itemBytes > byteBudget) {\n break\n }\n bytes += itemBytes\n selected.unshift(item)\n }\n return { items: selected, truncated: selected.length < items.length }\n}\n\nconst derivedTraceEvents = (task: Task): ReadonlyArray<TaskTraceEvent> => {\n const detail = \"Derived from task timestamps; earlier trace events were not recorded\"\n const events: Array<TaskTraceEvent> = [\n TaskTraceEvent.make({ kind: \"queued\", at: task.createdAt, detail }),\n ]\n if (task.startedAt !== undefined) {\n events.push(TaskTraceEvent.make({ kind: \"running\", at: task.startedAt, detail }))\n } else if (task.status === \"assigned\") {\n events.push(TaskTraceEvent.make({ kind: \"assigned\", at: task.updatedAt, detail }))\n }\n if (task.status === \"cancelling\") {\n events.push(TaskTraceEvent.make({ kind: \"cancelling\", at: task.updatedAt, detail }))\n }\n if (\n task.completedAt !== undefined &&\n (task.status === \"completed\" || task.status === \"failed\" || task.status === \"cancelled\")\n ) {\n events.push(TaskTraceEvent.make({ kind: task.status, at: task.completedAt, detail }))\n }\n return events\n}\n\nconst makeService = (db: Database, retainedTerminalTasks = 1_000): Interface => {\n const recordTaskTraceEvent = (\n taskId: TaskId,\n kind: TaskTraceEventKind,\n detail: string,\n createdAt: Timestamp = now(),\n ): void => {\n db.query(\n `INSERT INTO task_trace_events (task_id, kind, created_at, detail)\n VALUES (?, ?, ?, ?)`,\n ).run(taskId, kind, createdAt, detail)\n db.query(\n `DELETE FROM task_trace_events WHERE task_id = ? AND id NOT IN (\n SELECT id FROM task_trace_events WHERE task_id = ? ORDER BY id DESC LIMIT 1000\n )`,\n ).run(taskId, taskId)\n }\n\n const pruneTerminalHistory = (preserveTaskId?: TaskId): void => {\n const exclusion = preserveTaskId === undefined ? \"\" : \"AND id <> ?\"\n const offset = preserveTaskId === undefined ? retainedTerminalTasks : retainedTerminalTasks - 1\n const staleTasks = `SELECT id FROM tasks\n WHERE status IN ('completed', 'failed', 'cancelled')\n ${exclusion}\n ORDER BY completed_at DESC, updated_at DESC, id DESC\n LIMIT -1 OFFSET ?`\n const parameters = preserveTaskId === undefined ? [offset] : [preserveTaskId, offset]\n db.query(`DELETE FROM messages WHERE task_id IN (${staleTasks})`).run(...parameters)\n db.query(`DELETE FROM tasks WHERE id IN (${staleTasks})`).run(...parameters)\n db.query(\n `DELETE FROM threads\n WHERE NOT EXISTS (SELECT 1 FROM tasks WHERE tasks.thread_id = threads.id)\n AND NOT EXISTS (SELECT 1 FROM messages WHERE messages.thread_id = threads.id)`,\n ).run()\n }\n\n const pruneTerminalOperations = (preserveOperationId?: OperationId): void => {\n const exclusion = preserveOperationId === undefined ? \"\" : \"AND id <> ?\"\n const offset =\n preserveOperationId === undefined ? retainedTerminalTasks : retainedTerminalTasks - 1\n const parameters = preserveOperationId === undefined ? [offset] : [preserveOperationId, offset]\n db.query(\n `DELETE FROM device_operations\n WHERE id IN (\n SELECT id FROM device_operations\n WHERE status IN ('completed', 'failed') ${exclusion}\n ORDER BY completed_at DESC, updated_at DESC, id DESC\n LIMIT -1 OFFSET ?\n )`,\n ).run(...parameters)\n }\n\n const queryTask = (taskId: TaskId): TaskRow | null =>\n db.query<TaskRow, [string]>(\"SELECT * FROM tasks WHERE id = ?\").get(taskId)\n\n const queryOperation = (operationId: OperationId): DeviceOperationRow | null =>\n db\n .query<DeviceOperationRow, [string]>(\"SELECT * FROM device_operations WHERE id = ?\")\n .get(operationId)\n\n const getTask = Effect.fn(\"RelayStore.getTask\")(function* (taskId: TaskId) {\n const row = yield* Effect.try({\n try: () => queryTask(taskId),\n catch: operationError(\"RelayStore.getTask\"),\n })\n if (row === null) {\n return yield* Effect.fail(\n new PersistenceError({\n operation: \"RelayStore.getTask\",\n message: `Unknown task ${taskId}`,\n }),\n )\n }\n return yield* taskFromRow(row)\n })\n\n const traceTask = Effect.fn(\"RelayStore.traceTask\")(function* (taskId: TaskId) {\n const task = yield* getTask(taskId)\n const [deviceRow, eventRows] = yield* Effect.try({\n try: () =>\n [\n db\n .query<DeviceRow, [string]>(\"SELECT * FROM devices WHERE id = ?\")\n .get(task.targetDeviceId),\n db\n .query<TaskTraceEventRow, [string]>(\n `SELECT * FROM (\n SELECT id, kind, created_at, detail FROM task_trace_events\n WHERE task_id = ? ORDER BY id DESC LIMIT 101\n ) ORDER BY id`,\n )\n .all(taskId),\n ] as const,\n catch: operationError(\"RelayStore.traceTask\"),\n })\n if (deviceRow === null) {\n return yield* Effect.fail(\n new PersistenceError({\n operation: \"RelayStore.traceTask.device\",\n message: `Unknown target device ${task.targetDeviceId}`,\n }),\n )\n }\n const targetDevice = yield* deviceFromRow(deviceRow)\n const selectedRows = eventRows.slice(-100)\n const recordedEvents = yield* Effect.forEach(selectedRows, taskTraceEventFromRow)\n const events = recordedEvents.length === 0 ? derivedTraceEvents(task) : recordedEvents\n return TaskTrace.make({\n taskId: task.id,\n threadId: task.threadId,\n status: task.status,\n provider: task.provider,\n targetDevice,\n createdAt: task.createdAt,\n updatedAt: task.updatedAt,\n events,\n truncated:\n eventRows.length > 100 ||\n recordedEvents.length === 0 ||\n recordedEvents[0]?.kind !== \"queued\",\n ...(task.sourceDeviceId === undefined ? {} : { sourceDeviceId: task.sourceDeviceId }),\n ...(task.parentTaskId === undefined ? {} : { parentTaskId: task.parentTaskId }),\n ...(task.workspace === undefined ? {} : { workspace: task.workspace }),\n ...(task.startedAt === undefined ? {} : { startedAt: task.startedAt }),\n ...(task.completedAt === undefined ? {} : { completedAt: task.completedAt }),\n ...(task.error === undefined ? {} : { error: task.error }),\n })\n })\n\n const listDevices = Effect.fn(\"RelayStore.listDevices\")(function* () {\n const rows = yield* Effect.try({\n try: () =>\n db\n .query<DeviceRow, []>(\n \"SELECT * FROM devices WHERE forgotten_at IS NULL ORDER BY name COLLATE NOCASE, id\",\n )\n .all(),\n catch: operationError(\"RelayStore.listDevices\"),\n })\n return yield* Effect.forEach(rows, deviceFromRow)\n })\n\n const usage = Effect.fn(\"RelayStore.usage\")(function* () {\n const rows = yield* Effect.try({\n try: () =>\n db\n .query<UsageRow, []>(\n `SELECT tasks.target_device_id AS device_id, devices.name AS device_name,\n tasks.status, tasks.provider, COUNT(*) AS tasks\n FROM tasks\n JOIN devices ON devices.id = tasks.target_device_id\n GROUP BY tasks.target_device_id, devices.name, tasks.status, tasks.provider\n ORDER BY devices.name COLLATE NOCASE, tasks.target_device_id, tasks.provider`,\n )\n .all(),\n catch: operationError(\"RelayStore.usage\"),\n })\n const totalStatus = emptyStatusCounts()\n const totalProviders = new Map<Provider, number>()\n const devices = new Map<\n DeviceId,\n {\n readonly name: string\n readonly status: Record<TaskStatus, number>\n readonly providers: Map<Provider, number>\n }\n >()\n let retainedTasks = 0\n for (const row of rows) {\n const status = Schema.decodeUnknownSync(TaskStatus)(row.status)\n const provider = Schema.decodeUnknownSync(Provider)(row.provider)\n const deviceId = Schema.decodeUnknownSync(DeviceId)(row.device_id)\n retainedTasks += row.tasks\n totalStatus[status] += row.tasks\n totalProviders.set(provider, (totalProviders.get(provider) ?? 0) + row.tasks)\n const current = devices.get(deviceId) ?? {\n name: row.device_name,\n status: emptyStatusCounts(),\n providers: new Map<Provider, number>(),\n }\n current.status[status] += row.tasks\n current.providers.set(provider, (current.providers.get(provider) ?? 0) + row.tasks)\n devices.set(deviceId, current)\n }\n const providerUsage = (providers: ReadonlyMap<Provider, number>) =>\n Provider.literals.flatMap((provider) => {\n const tasks = providers.get(provider)\n return tasks === undefined ? [] : [{ provider, tasks }]\n })\n return UsageSummary.make({\n retainedTasks,\n byStatus: TaskStatusCounts.make(totalStatus),\n byProvider: providerUsage(totalProviders),\n devices: [...devices.entries()].map(([deviceId, device]) =>\n DeviceUsage.make({\n deviceId,\n deviceName: device.name,\n tasks: Object.values(device.status).reduce((sum, tasks) => sum + tasks, 0),\n byStatus: TaskStatusCounts.make(device.status),\n byProvider: providerUsage(device.providers),\n }),\n ),\n })\n })\n\n const getOperation = Effect.fn(\"RelayStore.getOperation\")(function* (operationId: OperationId) {\n const row = yield* Effect.try({\n try: () => queryOperation(operationId),\n catch: operationError(\"RelayStore.getOperation\"),\n })\n if (row === null) {\n return yield* Effect.fail(\n new PersistenceError({\n operation: \"RelayStore.getOperation\",\n message: `Unknown device operation ${operationId}`,\n }),\n )\n }\n return yield* operationFromRow(row)\n })\n\n const listOperations = Effect.fn(\"RelayStore.listOperations\")(function* () {\n const rows = yield* Effect.try({\n try: () =>\n db\n .query<DeviceOperationRow, []>(\n \"SELECT * FROM device_operations ORDER BY created_at DESC, id DESC LIMIT 50\",\n )\n .all(),\n catch: operationError(\"RelayStore.listOperations\"),\n })\n return yield* Effect.forEach(rows, operationFromRow)\n })\n\n const createUpgradeOperations = Effect.fn(\"RelayStore.createUpgradeOperations\")(function* (\n input: CreateUpgradeOperationsInput,\n ) {\n const timestamp = now()\n const operations = yield* Effect.try({\n try: () =>\n db.transaction(() => {\n const devices = db\n .query<DeviceRow, []>(\n \"SELECT * FROM devices WHERE forgotten_at IS NULL ORDER BY name COLLATE NOCASE, id\",\n )\n .all()\n if (devices.length === 0) {\n throw new Error(\"No Cohall devices are registered\")\n }\n if (devices.length > 256) {\n throw new Error(\"All-device operations support at most 256 registered devices\")\n }\n for (const device of devices) {\n const outstanding = db\n .query<{ readonly count: number }, [string]>(\n `SELECT COUNT(*) AS count FROM device_operations\n WHERE target_device_id = ? AND status IN ('queued', 'assigned', 'running')`,\n )\n .get(device.id)\n if ((outstanding?.count ?? 0) > 0) {\n throw new Error(`${device.name} already has an upgrade operation in progress`)\n }\n }\n pruneTerminalOperations()\n return devices.map((device) => {\n const operation = DeviceOperation.make({\n id: makeOperationId(),\n kind: \"upgrade\",\n status: \"queued\",\n targetDeviceId: DeviceId.make(device.id),\n requestedVersion: input.target,\n restart: input.restart,\n createdAt: timestamp,\n updatedAt: timestamp,\n })\n db.query(\n `INSERT INTO device_operations (\n id, kind, status, target_device_id, requested_version, restart,\n created_at, updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,\n ).run(\n operation.id,\n operation.kind,\n operation.status,\n operation.targetDeviceId,\n operation.requestedVersion,\n operation.restart ? 1 : 0,\n operation.createdAt,\n operation.updatedAt,\n )\n return operation\n })\n })(),\n catch: operationError(\"RelayStore.createUpgradeOperations\"),\n })\n return operations\n })\n\n const pendingOperationsFor = Effect.fn(\"RelayStore.pendingOperationsFor\")(function* (\n deviceId: DeviceId,\n ) {\n const rows = yield* Effect.try({\n try: () =>\n db\n .query<DeviceOperationRow, [string]>(\n `SELECT * FROM device_operations WHERE target_device_id = ? AND status = 'queued'\n ORDER BY created_at, id LIMIT 10`,\n )\n .all(deviceId),\n catch: operationError(\"RelayStore.pendingOperationsFor\"),\n })\n return yield* Effect.forEach(rows, operationFromRow)\n })\n\n const transitionOperation = Effect.fn(\"RelayStore.transitionOperation\")(function* (\n operationId: OperationId,\n expected: ReadonlyArray<OperationStatus>,\n status: OperationStatus,\n result?: string,\n error?: string,\n ) {\n const current = yield* getOperation(operationId)\n if (!expected.includes(current.status)) {\n return current\n }\n const timestamp = now()\n const completed = status === \"completed\" || status === \"failed\" ? timestamp : undefined\n const placeholders = expected.map(() => \"?\").join(\", \")\n yield* Effect.try({\n try: () =>\n db.transaction(() => {\n const updated = db\n .query(\n `UPDATE device_operations\n SET status = ?, result = ?, error = ?, updated_at = ?, completed_at = ?\n WHERE id = ? AND status IN (${placeholders})`,\n )\n .run(\n status,\n result ?? current.result ?? null,\n error ?? current.error ?? null,\n timestamp,\n completed ?? current.completedAt ?? null,\n operationId,\n ...expected,\n )\n if (updated.changes === 1 && completed !== undefined) {\n pruneTerminalOperations(operationId)\n }\n })(),\n catch: operationError(\"RelayStore.transitionOperation\"),\n })\n return yield* getOperation(operationId)\n })\n\n const requireOperationTarget = Effect.fn(\"RelayStore.requireOperationTarget\")(function* (\n operationId: OperationId,\n deviceId: DeviceId,\n ) {\n const operation = yield* getOperation(operationId)\n if (operation.targetDeviceId !== deviceId) {\n return yield* Effect.fail(\n new PersistenceError({\n operation: \"RelayStore.requireOperationTarget\",\n message: `Device ${deviceId} cannot update operation ${operationId}`,\n }),\n )\n }\n return operation\n })\n\n const assignOperation = Effect.fn(\"RelayStore.assignOperation\")(function* (\n operationId: OperationId,\n ) {\n const current = yield* getOperation(operationId)\n if (current.status !== \"queued\") {\n return current\n }\n const timestamp = now()\n yield* Effect.try({\n try: () =>\n db\n .query(\n `UPDATE device_operations SET status = 'assigned', updated_at = ?\n WHERE id = ? AND status = 'queued'\n AND NOT EXISTS (\n SELECT 1 FROM tasks WHERE target_device_id = ?\n AND status IN ('assigned', 'running', 'cancelling')\n )\n AND NOT EXISTS (\n SELECT 1 FROM device_operations active\n WHERE active.target_device_id = ? AND active.id <> ?\n AND active.status IN ('assigned', 'running')\n )`,\n )\n .run(timestamp, operationId, current.targetDeviceId, current.targetDeviceId, operationId),\n catch: operationError(\"RelayStore.assignOperation\"),\n })\n return yield* getOperation(operationId)\n })\n\n const acceptOperation = (operationId: OperationId, deviceId: DeviceId) =>\n requireOperationTarget(operationId, deviceId).pipe(\n Effect.flatMap(() => transitionOperation(operationId, [\"assigned\"], \"running\")),\n )\n\n const finishOperation = (operationId: OperationId, deviceId: DeviceId, result: string) =>\n requireOperationTarget(operationId, deviceId).pipe(\n Effect.flatMap(() =>\n transitionOperation(operationId, [\"queued\", \"assigned\", \"running\"], \"completed\", result),\n ),\n )\n\n const failOperation = (operationId: OperationId, deviceId: DeviceId, error: string) =>\n requireOperationTarget(operationId, deviceId).pipe(\n Effect.flatMap(() =>\n transitionOperation(\n operationId,\n [\"queued\", \"assigned\", \"running\"],\n \"failed\",\n undefined,\n error,\n ),\n ),\n )\n\n const abandonOperation = (operationId: OperationId) =>\n transitionOperation(\n operationId,\n [\"queued\", \"assigned\", \"running\"],\n \"failed\",\n undefined,\n \"Abandoned by the relay owner\",\n )\n\n const requeueOperationsFor = Effect.fn(\"RelayStore.requeueOperationsFor\")(function* (\n deviceId: DeviceId,\n ) {\n yield* Effect.try({\n try: () =>\n db\n .query(\n `UPDATE device_operations SET status = 'queued', updated_at = ?\n WHERE target_device_id = ? AND status IN ('assigned', 'running')`,\n )\n .run(now(), deviceId),\n catch: operationError(\"RelayStore.requeueOperationsFor\"),\n })\n })\n\n const forgetDevice = Effect.fn(\"RelayStore.forgetDevice\")(function* (deviceId: DeviceId) {\n const row = yield* Effect.try({\n try: () =>\n db.transaction(() => {\n const device = db\n .query<DeviceRow, [string]>(\n \"SELECT * FROM devices WHERE id = ? AND forgotten_at IS NULL\",\n )\n .get(deviceId)\n if (device === null) {\n throw new Error(`Unknown device ${deviceId}`)\n }\n if (device.status !== \"offline\") {\n throw new Error(`Device ${deviceId} must be offline before it can be forgotten`)\n }\n const outstanding = db\n .query<{ readonly count: number }, [string]>(\n `SELECT COUNT(*) AS count FROM tasks\n WHERE target_device_id = ? AND status NOT IN ('completed', 'failed', 'cancelled')`,\n )\n .get(deviceId)\n if ((outstanding?.count ?? 0) > 0) {\n throw new Error(`Device ${deviceId} still has outstanding tasks`)\n }\n const timestamp = now()\n db.query(\n `UPDATE device_operations\n SET status = 'failed', error = ?, updated_at = ?, completed_at = ?\n WHERE target_device_id = ? AND status IN ('queued', 'assigned', 'running')`,\n ).run(\"Target device was forgotten by the relay owner\", timestamp, timestamp, deviceId)\n pruneTerminalOperations()\n db.query(\"UPDATE devices SET forgotten_at = ? WHERE id = ?\").run(timestamp, deviceId)\n db.query(\n \"UPDATE auth_sessions SET revoked_at = ? WHERE bound_device_id = ? AND revoked_at IS NULL\",\n ).run(timestamp, deviceId)\n return device\n })(),\n catch: operationError(\"RelayStore.forgetDevice\"),\n })\n return yield* deviceFromRow(row)\n })\n\n const recover = Effect.fn(\"RelayStore.recover\")(function* () {\n yield* Effect.try({\n try: () =>\n db.transaction(() => {\n const timestamp = now()\n const interrupted = db\n .query<{ readonly id: string }, []>(\n \"SELECT id FROM tasks WHERE status IN ('assigned', 'running')\",\n )\n .all()\n db.query(\"UPDATE devices SET status = 'offline'\").run()\n db.query(\n \"UPDATE tasks SET status = 'queued', updated_at = ? WHERE status IN ('assigned', 'running')\",\n ).run(timestamp)\n db.query(\n \"UPDATE device_operations SET status = 'queued', updated_at = ? WHERE status IN ('assigned', 'running')\",\n ).run(timestamp)\n for (const task of interrupted) {\n recordTaskTraceEvent(\n TaskId.make(task.id),\n \"requeued\",\n \"Relay restarted before the task completed\",\n timestamp,\n )\n }\n db.query(\"DELETE FROM auth_pairings WHERE expires_at <= ? OR used_at IS NOT NULL\").run(\n timestamp,\n )\n db.query(\n \"UPDATE auth_sessions SET revoked_at = ? WHERE revoked_at IS NULL AND roles_json LIKE '%,%'\",\n ).run(timestamp)\n pruneTerminalHistory()\n pruneTerminalOperations()\n })(),\n catch: operationError(\"RelayStore.recover\"),\n })\n })\n\n const upsertDevice = Effect.fn(\"RelayStore.upsertDevice\")(function* (device: Device) {\n yield* Effect.try({\n try: () =>\n db\n .query(\n `INSERT INTO devices (\n id, name, hostname, platform, architecture, status, providers_json,\n capabilities_json, workspaces_json, version, last_seen_at, connected_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT(id) DO UPDATE SET\n name = excluded.name, hostname = excluded.hostname, platform = excluded.platform,\n architecture = excluded.architecture, status = excluded.status,\n providers_json = excluded.providers_json, capabilities_json = excluded.capabilities_json,\n workspaces_json = excluded.workspaces_json, version = excluded.version,\n last_seen_at = excluded.last_seen_at, connected_at = excluded.connected_at,\n forgotten_at = NULL`,\n )\n .run(\n device.id,\n device.name,\n device.hostname,\n device.platform,\n device.architecture,\n device.status,\n JSON.stringify(device.providers),\n JSON.stringify(device.capabilities),\n JSON.stringify(device.workspaces),\n device.version,\n device.lastSeenAt,\n device.connectedAt ?? null,\n ),\n catch: operationError(\"RelayStore.upsertDevice\"),\n })\n return device\n })\n\n const updateDeviceStatus = Effect.fn(\"RelayStore.updateDeviceStatus\")(function* (\n deviceId: DeviceId,\n status: \"online\" | \"busy\" | \"offline\",\n ) {\n const timestamp = now()\n const result = yield* Effect.try({\n try: () =>\n db\n .query(\"UPDATE devices SET status = ?, last_seen_at = ? WHERE id = ?\")\n .run(status, timestamp, deviceId),\n catch: operationError(\"RelayStore.updateDeviceStatus\"),\n })\n if (result.changes !== 1) {\n return yield* Effect.fail(\n new PersistenceError({\n operation: \"RelayStore.updateDeviceStatus\",\n message: `Unknown device ${deviceId}`,\n }),\n )\n }\n const row = db.query<DeviceRow, [string]>(\"SELECT * FROM devices WHERE id = ?\").get(deviceId)\n if (row === null) {\n return yield* Effect.fail(\n new PersistenceError({\n operation: \"RelayStore.updateDeviceStatus.read\",\n message: `Device ${deviceId} disappeared after update`,\n }),\n )\n }\n return yield* deviceFromRow(row)\n })\n\n const createDelegation = Effect.fn(\"RelayStore.createDelegation\")(function* (\n input: CreateTaskInput,\n targetDeviceId: DeviceId,\n sourceDeviceId?: DeviceId,\n providerSessionId?: string,\n ) {\n const timestamp = now()\n const threadId = input.threadId ?? makeThreadId()\n const task = Task.make({\n id: makeTaskId(),\n threadId,\n prompt: input.prompt,\n provider: input.provider ?? \"codex\",\n status: \"queued\",\n targetDeviceId,\n createdAt: timestamp,\n updatedAt: timestamp,\n ...(input.context === undefined ? {} : { context: input.context }),\n ...(sourceDeviceId === undefined ? {} : { sourceDeviceId }),\n ...(input.parentTaskId === undefined ? {} : { parentTaskId: input.parentTaskId }),\n ...(input.workspace === undefined ? {} : { workspace: input.workspace }),\n ...(providerSessionId === undefined ? {} : { providerSessionId }),\n })\n const thread =\n input.threadId === undefined\n ? Thread.make({\n id: threadId,\n title: input.title ?? input.prompt.slice(0, 72),\n createdAt: timestamp,\n updatedAt: timestamp,\n })\n : undefined\n const message = Message.make({\n id: makeMessageId(),\n threadId,\n role: \"human\",\n authorName: sourceDeviceId === undefined ? \"User\" : \"Remote agent\",\n content: input.prompt,\n createdAt: timestamp,\n taskId: task.id,\n ...(sourceDeviceId === undefined ? {} : { deviceId: sourceDeviceId }),\n })\n yield* Effect.try({\n try: () =>\n db.transaction(() => {\n const outstanding = db\n .query<{ readonly count: number }, [string]>(\n `SELECT COUNT(*) AS count FROM tasks WHERE target_device_id = ?\n AND status IN ('queued', 'assigned', 'running', 'cancelling')`,\n )\n .get(targetDeviceId)\n if ((outstanding?.count ?? 0) >= 100) {\n throw new Error(`Device ${targetDeviceId} has reached its outstanding task limit`)\n }\n if (thread !== undefined) {\n db.query(\n \"INSERT INTO threads (id, title, created_at, updated_at) VALUES (?, ?, ?, ?)\",\n ).run(thread.id, thread.title, thread.createdAt, thread.updatedAt)\n } else if (\n db\n .query<{ readonly id: string }, [string]>(\"SELECT id FROM threads WHERE id = ?\")\n .get(threadId) === null\n ) {\n throw new Error(`Unknown thread ${threadId}`)\n }\n db.query(\n `INSERT INTO tasks (\n id, thread_id, prompt, context, provider, status, source_device_id,\n target_device_id, parent_task_id, workspace, provider_session_id,\n created_at, updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n ).run(\n task.id,\n task.threadId,\n task.prompt,\n task.context ?? null,\n task.provider,\n task.status,\n task.sourceDeviceId ?? null,\n task.targetDeviceId,\n task.parentTaskId ?? null,\n task.workspace ?? null,\n task.providerSessionId ?? null,\n task.createdAt,\n task.updatedAt,\n )\n recordTaskTraceEvent(task.id, \"queued\", \"Relay accepted the task\", timestamp)\n db.query(\n `INSERT INTO messages (\n id, thread_id, role, kind, author_id, author_name, content, created_at,\n task_id, device_id\n ) VALUES (?, ?, ?, 'chat', ?, ?, ?, ?, ?, ?)`,\n ).run(\n message.id,\n message.threadId,\n message.role,\n sourceDeviceId ?? \"user\",\n message.authorName,\n message.content,\n message.createdAt,\n message.taskId ?? null,\n message.deviceId ?? null,\n )\n db.query(\"UPDATE threads SET updated_at = ? WHERE id = ?\").run(timestamp, threadId)\n })(),\n catch: operationError(\"RelayStore.createDelegation\"),\n })\n return task\n })\n\n const threadContext = Effect.fn(\"RelayStore.threadContext\")(function* (threadId: ThreadId) {\n const threadRow = yield* Effect.try({\n try: () => db.query<ThreadRow, [string]>(\"SELECT * FROM threads WHERE id = ?\").get(threadId),\n catch: operationError(\"RelayStore.threadContext.thread\"),\n })\n if (threadRow === null) {\n return yield* Effect.fail(\n new PersistenceError({\n operation: \"RelayStore.threadContext\",\n message: `Unknown thread ${threadId}`,\n }),\n )\n }\n const [messageRows, taskRows] = yield* Effect.try({\n try: () =>\n [\n db\n .query<MessageRow, [string]>(\n `SELECT * FROM (\n SELECT * FROM messages WHERE thread_id = ?\n ORDER BY created_at DESC, id DESC LIMIT 21\n ) ORDER BY created_at, id`,\n )\n .all(threadId),\n db\n .query<TaskRow, [string]>(\n `SELECT * FROM (\n SELECT * FROM tasks WHERE thread_id = ?\n ORDER BY created_at DESC, id DESC LIMIT 21\n ) ORDER BY created_at, id`,\n )\n .all(threadId),\n ] as const,\n catch: operationError(\"RelayStore.threadContext.items\"),\n })\n const [thread, messages, tasks] = yield* Effect.all([\n threadFromRow(threadRow),\n Effect.forEach(messageRows.slice(-20), messageFromRow),\n Effect.forEach(taskRows.slice(-20), taskFromRow),\n ])\n const recentMessages = recentWithin(messages, 256 * 1024)\n const recentTasks = recentWithin(tasks, 768 * 1024)\n return ThreadContext.make({\n thread,\n messages: recentMessages.items,\n tasks: recentTasks.items,\n truncated:\n messageRows.length > 20 ||\n taskRows.length > 20 ||\n recentMessages.truncated ||\n recentTasks.truncated,\n })\n })\n\n const pendingTasksFor = Effect.fn(\"RelayStore.pendingTasksFor\")(function* (deviceId: DeviceId) {\n const rows = yield* Effect.try({\n try: () =>\n db\n .query<TaskRow, [string]>(\n `SELECT * FROM tasks WHERE target_device_id = ?\n AND status IN ('queued', 'cancelling') ORDER BY created_at, id LIMIT 100`,\n )\n .all(deviceId),\n catch: operationError(\"RelayStore.pendingTasksFor\"),\n })\n return yield* Effect.forEach(rows, taskFromRow)\n })\n\n const transition = Effect.fn(\"RelayStore.transition\")(function* (\n taskId: TaskId,\n expected: ReadonlyArray<TaskStatus>,\n update: TaskUpdate,\n event?: { readonly kind: TaskTraceEventKind; readonly detail: string },\n ) {\n const current = yield* getTask(taskId)\n if (!expected.includes(current.status)) {\n return current\n }\n const placeholders = expected.map(() => \"?\").join(\", \")\n const timestamp = now()\n yield* Effect.try({\n try: () =>\n db.transaction(() => {\n const result = db\n .query(\n `UPDATE tasks SET status = ?, provider_session_id = ?, result = ?, error = ?,\n started_at = ?, completed_at = ?, updated_at = ?\n WHERE id = ? AND status IN (${placeholders})`,\n )\n .run(\n update.status ?? current.status,\n update.providerSessionId ?? current.providerSessionId ?? null,\n update.result ?? current.result ?? null,\n update.error ?? current.error ?? null,\n update.startedAt ?? current.startedAt ?? null,\n update.completedAt ?? current.completedAt ?? null,\n timestamp,\n taskId,\n ...expected,\n )\n if (result.changes === 1 && event !== undefined) {\n recordTaskTraceEvent(taskId, event.kind, event.detail, timestamp)\n }\n if (\n result.changes === 1 &&\n update.status !== undefined &&\n [\"completed\", \"failed\", \"cancelled\"].includes(update.status)\n ) {\n pruneTerminalHistory(taskId)\n }\n })(),\n catch: operationError(\"RelayStore.transition\"),\n })\n return yield* getTask(taskId)\n })\n\n const assignTask = Effect.fn(\"RelayStore.assignTask\")(function* (taskId: TaskId) {\n const current = yield* getTask(taskId)\n if (current.status !== \"queued\") {\n return current\n }\n const timestamp = now()\n yield* Effect.try({\n try: () =>\n db.transaction(() => {\n const result = db\n .query(\n `UPDATE tasks SET status = 'assigned', updated_at = ?\n WHERE id = ? AND status = 'queued' AND NOT EXISTS (\n SELECT 1 FROM tasks active\n WHERE active.target_device_id = ? AND active.id <> ?\n AND active.status IN ('assigned', 'running', 'cancelling')\n ) AND NOT EXISTS (\n SELECT 1 FROM device_operations active\n WHERE active.target_device_id = ?\n AND active.status IN ('assigned', 'running')\n )`,\n )\n .run(timestamp, taskId, current.targetDeviceId, taskId, current.targetDeviceId)\n if (result.changes === 1) {\n recordTaskTraceEvent(\n taskId,\n \"assigned\",\n \"Relay dispatched the task over the device WebSocket\",\n timestamp,\n )\n }\n })(),\n catch: operationError(\"RelayStore.assignTask\"),\n })\n return yield* getTask(taskId)\n })\n\n const requireTarget = Effect.fn(\"RelayStore.requireTarget\")(function* (\n taskId: TaskId,\n deviceId: DeviceId,\n ) {\n const task = yield* getTask(taskId)\n if (task.targetDeviceId !== deviceId) {\n return yield* Effect.fail(\n new PersistenceError({\n operation: \"RelayStore.requireTarget\",\n message: `Task ${taskId} belongs to another device`,\n }),\n )\n }\n return task\n })\n\n const terminal = Effect.fn(\"RelayStore.terminal\")(function* (\n taskId: TaskId,\n deviceId: DeviceId,\n status: \"completed\" | \"failed\" | \"cancelled\",\n result?: string,\n error?: string,\n providerSessionId?: string,\n ) {\n const current = yield* requireTarget(taskId, deviceId)\n if ([\"completed\", \"failed\", \"cancelled\"].includes(current.status)) {\n return current\n }\n const timestamp = now()\n yield* Effect.try({\n try: () =>\n db.transaction(() => {\n const updated = db\n .query(\n `UPDATE tasks SET status = ?, result = ?, error = ?, provider_session_id = ?,\n completed_at = ?, updated_at = ? WHERE id = ?\n AND status NOT IN ('completed', 'failed', 'cancelled')`,\n )\n .run(\n status,\n result ?? null,\n error ?? null,\n providerSessionId ?? current.providerSessionId ?? null,\n timestamp,\n timestamp,\n taskId,\n )\n if (updated.changes !== 1) {\n return\n }\n recordTaskTraceEvent(\n taskId,\n status,\n status === \"completed\"\n ? \"Target device completed the task\"\n : status === \"failed\"\n ? \"Target device reported a task failure\"\n : \"Target device acknowledged cancellation\",\n timestamp,\n )\n if (providerSessionId !== undefined) {\n db.query(\n `INSERT INTO provider_sessions (thread_id, device_id, provider, session_id, updated_at)\n VALUES (?, ?, ?, ?, ?)\n ON CONFLICT(thread_id, device_id, provider) DO UPDATE SET\n session_id = excluded.session_id, updated_at = excluded.updated_at`,\n ).run(current.threadId, deviceId, current.provider, providerSessionId, timestamp)\n }\n const content = result ?? error\n if (content !== undefined) {\n const role = status === \"completed\" ? \"agent\" : \"system\"\n db.query(\n `INSERT INTO messages (\n id, thread_id, role, kind, author_id, author_name, content, created_at,\n task_id, device_id\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n ).run(\n makeMessageId(),\n current.threadId,\n role,\n status === \"failed\" ? \"error\" : \"chat\",\n deviceId,\n status === \"completed\" ? providerName(current.provider) : \"Cohall\",\n content,\n timestamp,\n taskId,\n deviceId,\n )\n db.query(\"UPDATE threads SET updated_at = ? WHERE id = ?\").run(\n timestamp,\n current.threadId,\n )\n }\n pruneTerminalHistory(taskId)\n })(),\n catch: operationError(\"RelayStore.terminal\"),\n })\n return yield* getTask(taskId)\n })\n\n const requestCancellation = Effect.fn(\"RelayStore.requestCancellation\")(function* (\n taskId: TaskId,\n ) {\n const current = yield* getTask(taskId)\n if ([\"completed\", \"failed\", \"cancelled\"].includes(current.status)) {\n return current\n }\n if (current.status === \"cancelling\") {\n return current\n }\n const timestamp = now()\n return current.status === \"queued\"\n ? yield* transition(\n taskId,\n [\"queued\"],\n { status: \"cancelled\", completedAt: timestamp },\n { kind: \"cancelled\", detail: \"Client cancelled the task before dispatch\" },\n )\n : yield* transition(\n taskId,\n [\"assigned\", \"running\"],\n {\n status: \"cancelling\",\n },\n { kind: \"cancelling\", detail: \"Client requested task cancellation\" },\n )\n })\n\n const requeueTasksFor = Effect.fn(\"RelayStore.requeueTasksFor\")(function* (deviceId: DeviceId) {\n const timestamp = now()\n yield* Effect.try({\n try: () =>\n db.transaction(() => {\n const interrupted = db\n .query<{ readonly id: string }, [string]>(\n `SELECT id FROM tasks WHERE target_device_id = ?\n AND status IN ('assigned', 'running')`,\n )\n .all(deviceId)\n db.query(\n `UPDATE tasks SET status = 'queued', updated_at = ?\n WHERE target_device_id = ? AND status IN ('assigned', 'running')`,\n ).run(timestamp, deviceId)\n for (const task of interrupted) {\n recordTaskTraceEvent(\n TaskId.make(task.id),\n \"requeued\",\n \"Target device disconnected before task completion\",\n timestamp,\n )\n }\n })(),\n catch: operationError(\"RelayStore.requeueTasksFor\"),\n })\n })\n\n const sessionFor = Effect.fn(\"RelayStore.sessionFor\")(function* (\n threadId: ThreadId,\n deviceId: DeviceId,\n provider: Provider,\n ) {\n const row = yield* Effect.try({\n try: () =>\n db\n .query<{ readonly session_id: string }, [string, string, string]>(\n `SELECT session_id FROM provider_sessions\n WHERE thread_id = ? AND device_id = ? AND provider = ?`,\n )\n .get(threadId, deviceId, provider),\n catch: operationError(\"RelayStore.sessionFor\"),\n })\n return row?.session_id\n })\n\n const createPairing = Effect.fn(\"RelayStore.createPairing\")(function* (\n input: CreatePairingInput,\n ) {\n const roles = [...new Set(input.roles)]\n if (roles.length === 0) {\n return yield* Effect.fail(\n new PersistenceError({\n operation: \"RelayStore.createPairing\",\n message: \"A pairing must allow at least one role\",\n }),\n )\n }\n const token = secret(\"pair\")\n const expiresAt = new Date(Date.now() + 10 * 60 * 1_000).toISOString()\n yield* Effect.try({\n try: () =>\n db\n .query(\n `INSERT INTO auth_pairings (token_hash, label, roles_json, expires_at, created_at)\n VALUES (?, ?, ?, ?, ?)`,\n )\n .run(tokenHash(token), input.label, JSON.stringify(roles), expiresAt, now()),\n catch: operationError(\"RelayStore.createPairing\"),\n })\n return PairingCredential.make({ token, expiresAt: Timestamp.make(expiresAt) })\n })\n\n const exchangePairing = Effect.fn(\"RelayStore.exchangePairing\")(function* (token: string) {\n const timestamp = now()\n const expiresAt = new Date(Date.now() + 90 * 24 * 60 * 60 * 1_000).toISOString()\n const created = yield* Effect.try({\n try: () =>\n db.transaction(() => {\n const pairing = db\n .query<PairingRow, [string, string]>(\n `SELECT * FROM auth_pairings\n WHERE token_hash = ? AND used_at IS NULL AND expires_at > ?`,\n )\n .get(tokenHash(token), timestamp)\n if (pairing === null) {\n throw new Error(\"Pairing credential is invalid, expired, or already used\")\n }\n const roles = Schema.decodeUnknownSync(Schema.Array(ConnectionRole))(\n JSON.parse(pairing.roles_json),\n )\n const deviceId = roles.includes(\"device\") ? makeDeviceId() : undefined\n const consumed = db\n .query(\"UPDATE auth_pairings SET used_at = ? WHERE token_hash = ? AND used_at IS NULL\")\n .run(timestamp, pairing.token_hash)\n if (consumed.changes !== 1) {\n throw new Error(\"Pairing credential was already used\")\n }\n return [...new Set(roles)].map((role) => {\n const sessionToken = secret(\"session\")\n const row = {\n id: makeAuthSessionId(),\n token_hash: tokenHash(sessionToken),\n label: pairing.label,\n roles_json: JSON.stringify([role]),\n created_at: timestamp,\n expires_at: expiresAt,\n last_seen_at: timestamp,\n bound_device_id: role === \"device\" ? (deviceId ?? null) : null,\n revoked_at: null,\n } satisfies AuthSessionRow\n db.query(\n `INSERT INTO auth_sessions (\n id, token_hash, label, roles_json, created_at, expires_at, last_seen_at,\n bound_device_id\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,\n ).run(\n row.id,\n row.token_hash,\n row.label,\n row.roles_json,\n row.created_at,\n row.expires_at,\n row.last_seen_at,\n row.bound_device_id,\n )\n return { token: sessionToken, row }\n })\n })(),\n catch: operationError(\"RelayStore.exchangePairing\"),\n })\n const credentials = yield* Effect.forEach(created, ({ token: sessionToken, row }) =>\n authSessionFromRow(row).pipe(Effect.map((session) => ({ token: sessionToken, session }))),\n )\n return PairingResult.make({ credentials })\n })\n\n const authenticateSession = Effect.fn(\"RelayStore.authenticateSession\")(function* (\n token: string,\n role: ConnectionRoleName,\n ) {\n const row = yield* Effect.try({\n try: () =>\n db\n .query<AuthSessionRow, [string, string]>(\n `SELECT * FROM auth_sessions\n WHERE token_hash = ? AND revoked_at IS NULL AND expires_at > ?`,\n )\n .get(tokenHash(token), now()),\n catch: operationError(\"RelayStore.authenticateSession\"),\n })\n if (row === null || !rolesFromRow(row).includes(role)) {\n return undefined\n }\n const lastSeenAt = now()\n yield* Effect.try({\n try: () =>\n db.query(\"UPDATE auth_sessions SET last_seen_at = ? WHERE id = ?\").run(lastSeenAt, row.id),\n catch: operationError(\"RelayStore.authenticateSession.touch\"),\n })\n const session = yield* authSessionFromRow(row)\n return AuthSession.make({ ...session, lastSeenAt })\n })\n\n const listAuthSessions = Effect.fn(\"RelayStore.listAuthSessions\")(function* () {\n const rows = yield* Effect.try({\n try: () =>\n db\n .query<AuthSessionRow, []>(\n \"SELECT * FROM auth_sessions ORDER BY created_at DESC, id LIMIT 1000\",\n )\n .all(),\n catch: operationError(\"RelayStore.listAuthSessions\"),\n })\n return yield* Effect.forEach(rows, authSessionFromRow)\n })\n\n const revokeAuthSession = Effect.fn(\"RelayStore.revokeAuthSession\")(function* (\n sessionId: AuthSessionId,\n ) {\n const revokedAt = now()\n const result = yield* Effect.try({\n try: () =>\n db\n .query(\"UPDATE auth_sessions SET revoked_at = ? WHERE id = ? AND revoked_at IS NULL\")\n .run(revokedAt, sessionId),\n catch: operationError(\"RelayStore.revokeAuthSession\"),\n })\n if (result.changes !== 1) {\n return yield* Effect.fail(\n new PersistenceError({\n operation: \"RelayStore.revokeAuthSession\",\n message: `Unknown or already revoked session ${sessionId}`,\n }),\n )\n }\n const row = db\n .query<AuthSessionRow, [string]>(\"SELECT * FROM auth_sessions WHERE id = ?\")\n .get(sessionId)\n if (row === null) {\n return yield* Effect.fail(\n new PersistenceError({\n operation: \"RelayStore.revokeAuthSession.read\",\n message: `Session ${sessionId} disappeared after revocation`,\n }),\n )\n }\n return yield* authSessionFromRow(row)\n })\n\n return Service.of({\n recover,\n listDevices,\n usage,\n forgetDevice,\n upsertDevice,\n heartbeat: (deviceId, status) => updateDeviceStatus(deviceId, status),\n markDeviceOffline: (deviceId) => updateDeviceStatus(deviceId, \"offline\"),\n createDelegation,\n getTask,\n traceTask,\n threadContext,\n pendingTasksFor,\n assignTask,\n rollbackAssignment: (taskId) =>\n transition(\n taskId,\n [\"assigned\"],\n { status: \"queued\" },\n { kind: \"requeued\", detail: \"Target device was unavailable during dispatch\" },\n ),\n acceptTask: (taskId, deviceId) =>\n requireTarget(taskId, deviceId).pipe(\n Effect.flatMap(() =>\n transition(\n taskId,\n [\"assigned\"],\n { status: \"running\", startedAt: now() },\n { kind: \"running\", detail: \"Target device accepted the task and started the provider\" },\n ),\n ),\n ),\n finishTask: (taskId, deviceId, result, providerSessionId) =>\n terminal(taskId, deviceId, \"completed\", result, undefined, providerSessionId),\n failTask: (taskId, deviceId, error) => terminal(taskId, deviceId, \"failed\", undefined, error),\n acknowledgeCancellation: (taskId, deviceId) => terminal(taskId, deviceId, \"cancelled\"),\n requestCancellation,\n requeueTasksFor,\n createUpgradeOperations,\n listOperations,\n abandonOperation,\n pendingOperationsFor,\n assignOperation,\n rollbackOperation: (operationId) => transitionOperation(operationId, [\"assigned\"], \"queued\"),\n acceptOperation,\n finishOperation,\n failOperation,\n requeueOperationsFor,\n sessionFor,\n createPairing,\n exchangePairing,\n authenticateSession,\n listAuthSessions,\n revokeAuthSession,\n })\n}\n\nconst migrate = (db: Database): Effect.Effect<void, PersistenceError> =>\n Effect.try({\n try: () => {\n db.exec(\"PRAGMA journal_mode = WAL\")\n db.exec(\"PRAGMA foreign_keys = ON\")\n db.exec(\"PRAGMA busy_timeout = 5000\")\n db.exec(`\n CREATE TABLE IF NOT EXISTS devices (\n id TEXT PRIMARY KEY, name TEXT NOT NULL, hostname TEXT NOT NULL,\n platform TEXT NOT NULL, architecture TEXT NOT NULL, status TEXT NOT NULL,\n providers_json TEXT NOT NULL, capabilities_json TEXT NOT NULL,\n workspaces_json TEXT NOT NULL, version TEXT NOT NULL, last_seen_at TEXT NOT NULL,\n connected_at TEXT, forgotten_at TEXT\n );\n CREATE TABLE IF NOT EXISTS threads (\n id TEXT PRIMARY KEY, title TEXT NOT NULL, created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL, archived_at TEXT,\n default_device_id TEXT REFERENCES devices(id)\n );\n CREATE TABLE IF NOT EXISTS messages (\n id TEXT PRIMARY KEY, thread_id TEXT NOT NULL REFERENCES threads(id) ON DELETE CASCADE,\n role TEXT NOT NULL, kind TEXT NOT NULL DEFAULT 'chat', author_id TEXT NOT NULL,\n author_name TEXT NOT NULL, content TEXT NOT NULL, created_at TEXT NOT NULL,\n task_id TEXT, reply_to TEXT, device_id TEXT REFERENCES devices(id)\n );\n CREATE INDEX IF NOT EXISTS messages_thread_created ON messages(thread_id, created_at);\n CREATE TABLE IF NOT EXISTS tasks (\n id TEXT PRIMARY KEY, thread_id TEXT NOT NULL REFERENCES threads(id) ON DELETE CASCADE,\n prompt TEXT NOT NULL, context TEXT, provider TEXT NOT NULL, status TEXT NOT NULL,\n source_device_id TEXT REFERENCES devices(id),\n target_device_id TEXT NOT NULL REFERENCES devices(id), parent_task_id TEXT,\n workspace TEXT, provider_session_id TEXT, result TEXT, error TEXT,\n created_at TEXT NOT NULL, updated_at TEXT NOT NULL, started_at TEXT, completed_at TEXT\n );\n CREATE INDEX IF NOT EXISTS tasks_thread_created ON tasks(thread_id, created_at);\n CREATE INDEX IF NOT EXISTS tasks_target_status ON tasks(target_device_id, status);\n CREATE TABLE IF NOT EXISTS task_trace_events (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n task_id TEXT NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,\n kind TEXT NOT NULL, created_at TEXT NOT NULL, detail TEXT\n );\n CREATE INDEX IF NOT EXISTS task_trace_events_task_id\n ON task_trace_events(task_id, id);\n CREATE TABLE IF NOT EXISTS provider_sessions (\n thread_id TEXT NOT NULL REFERENCES threads(id) ON DELETE CASCADE,\n device_id TEXT NOT NULL REFERENCES devices(id) ON DELETE CASCADE,\n provider TEXT NOT NULL, session_id TEXT NOT NULL, updated_at TEXT NOT NULL,\n PRIMARY KEY(thread_id, device_id, provider)\n );\n CREATE TABLE IF NOT EXISTS device_operations (\n id TEXT PRIMARY KEY, kind TEXT NOT NULL, status TEXT NOT NULL,\n target_device_id TEXT NOT NULL REFERENCES devices(id),\n requested_version TEXT NOT NULL, restart INTEGER NOT NULL,\n result TEXT, error TEXT, created_at TEXT NOT NULL, updated_at TEXT NOT NULL,\n completed_at TEXT\n );\n CREATE INDEX IF NOT EXISTS device_operations_target_status\n ON device_operations(target_device_id, status);\n CREATE TABLE IF NOT EXISTS auth_pairings (\n token_hash TEXT PRIMARY KEY, label TEXT NOT NULL, roles_json TEXT NOT NULL,\n expires_at TEXT NOT NULL, created_at TEXT NOT NULL, used_at TEXT\n );\n CREATE TABLE IF NOT EXISTS auth_sessions (\n id TEXT PRIMARY KEY, token_hash TEXT NOT NULL UNIQUE, label TEXT NOT NULL,\n roles_json TEXT NOT NULL, created_at TEXT NOT NULL, expires_at TEXT NOT NULL,\n last_seen_at TEXT NOT NULL, bound_device_id TEXT, revoked_at TEXT\n );\n CREATE INDEX IF NOT EXISTS auth_sessions_token ON auth_sessions(token_hash);\n `)\n const deviceColumns = db\n .query<{ readonly name: string }, []>(\"PRAGMA table_info(devices)\")\n .all()\n if (!deviceColumns.some((column) => column.name === \"forgotten_at\")) {\n db.exec(\"ALTER TABLE devices ADD COLUMN forgotten_at TEXT\")\n }\n },\n catch: operationError(\"RelayStore.migrate\"),\n })\n\nexport const layer = (path: string, retainedTerminalTasks = 1_000) =>\n Layer.effect(\n Service,\n Effect.acquireRelease(\n Effect.try({\n try: () => new Database(path),\n catch: operationError(\"RelayStore.open\"),\n }).pipe(Effect.tap(migrate)),\n (db) => Effect.sync(() => db.close()),\n ).pipe(Effect.map((db) => makeService(db, retainedTerminalTasks))),\n )\n\nexport const layerFromDatabase = (db: Database) =>\n Layer.effect(Service, migrate(db).pipe(Effect.map(() => makeService(db))))\n\nexport * as RelayStore from \"./store.ts\"\n",
9
+ "import {\n AuthSession,\n ConnectionRole,\n Device,\n DeviceId,\n DeviceOperation,\n DeviceUsage,\n Message,\n PairingCredential,\n PairingResult,\n Provider,\n Task,\n TaskId,\n TaskStatus,\n TaskTrace,\n TaskTraceEvent,\n TaskStatusCounts,\n Timestamp,\n Thread,\n ThreadContext,\n UsageSummary,\n assertDeviceOperationSupport,\n makeAuthSessionId,\n makeDeviceId,\n makeMessageId,\n makeOperationId,\n makeTaskId,\n makeThreadId,\n now,\n type AuthSessionId,\n type ConnectionRole as ConnectionRoleName,\n type CreatePairingInput,\n type CreateTaskInput,\n type CreateUpgradeOperationsInput,\n type OperationId,\n type OperationStatus,\n type TaskTraceEventKind,\n type ThreadId,\n} from \"@cohall/protocol\"\nimport { Context, Effect, Layer, Schema } from \"effect\"\nimport { createHash, randomBytes } from \"node:crypto\"\nimport { Database } from \"./database.ts\"\n\nexport class PersistenceError extends Schema.TaggedErrorClass<PersistenceError>()(\n \"RelayStore.PersistenceError\",\n { operation: Schema.String, message: Schema.String },\n) {}\n\ninterface ThreadRow {\n readonly id: string\n readonly title: string\n readonly created_at: string\n readonly updated_at: string\n readonly default_device_id: string | null\n}\n\ninterface MessageRow {\n readonly id: string\n readonly thread_id: string\n readonly role: string\n readonly author_name: string\n readonly content: string\n readonly created_at: string\n readonly task_id: string | null\n readonly device_id: string | null\n}\n\ninterface DeviceRow {\n readonly id: string\n readonly name: string\n readonly hostname: string\n readonly platform: string\n readonly architecture: string\n readonly status: string\n readonly providers_json: string\n readonly capabilities_json: string\n readonly workspaces_json: string\n readonly version: string\n readonly last_seen_at: string\n readonly connected_at: string | null\n}\n\ninterface TaskRow {\n readonly id: string\n readonly thread_id: string\n readonly prompt: string\n readonly context: string | null\n readonly provider: string\n readonly status: string\n readonly source_device_id: string | null\n readonly target_device_id: string\n readonly parent_task_id: string | null\n readonly workspace: string | null\n readonly provider_session_id: string | null\n readonly result: string | null\n readonly error: string | null\n readonly created_at: string\n readonly updated_at: string\n readonly started_at: string | null\n readonly completed_at: string | null\n}\n\ninterface TaskTraceEventRow {\n readonly id: number\n readonly kind: string\n readonly created_at: string\n readonly detail: string | null\n}\n\ninterface DeviceOperationRow {\n readonly id: string\n readonly kind: string\n readonly status: string\n readonly target_device_id: string\n readonly requested_version: string\n readonly restart: number\n readonly result: string | null\n readonly error: string | null\n readonly created_at: string\n readonly updated_at: string\n readonly completed_at: string | null\n}\n\ninterface UsageRow {\n readonly device_id: string\n readonly device_name: string\n readonly status: string\n readonly provider: string\n readonly tasks: number\n}\n\ninterface PairingRow {\n readonly token_hash: string\n readonly label: string\n readonly roles_json: string\n readonly expires_at: string\n readonly used_at: string | null\n}\n\ninterface AuthSessionRow {\n readonly id: string\n readonly token_hash: string\n readonly label: string\n readonly roles_json: string\n readonly created_at: string\n readonly expires_at: string\n readonly last_seen_at: string\n readonly bound_device_id: string | null\n readonly revoked_at: string | null\n}\n\nexport interface TaskUpdate {\n readonly status?: TaskStatus\n readonly providerSessionId?: string\n readonly result?: string\n readonly error?: string\n readonly startedAt?: Timestamp\n readonly completedAt?: Timestamp\n}\n\nexport interface Interface {\n readonly recover: () => Effect.Effect<void, PersistenceError>\n readonly listDevices: () => Effect.Effect<ReadonlyArray<Device>, PersistenceError>\n readonly usage: () => Effect.Effect<UsageSummary, PersistenceError>\n readonly forgetDevice: (deviceId: DeviceId) => Effect.Effect<Device, PersistenceError>\n readonly upsertDevice: (device: Device) => Effect.Effect<Device, PersistenceError>\n readonly heartbeat: (\n deviceId: DeviceId,\n status: \"online\" | \"busy\",\n ) => Effect.Effect<Device, PersistenceError>\n readonly markDeviceOffline: (deviceId: DeviceId) => Effect.Effect<Device, PersistenceError>\n readonly createDelegation: (\n input: CreateTaskInput,\n targetDeviceId: DeviceId,\n sourceDeviceId?: DeviceId,\n providerSessionId?: string,\n ) => Effect.Effect<Task, PersistenceError>\n readonly getTask: (taskId: TaskId) => Effect.Effect<Task, PersistenceError>\n readonly traceTask: (taskId: TaskId) => Effect.Effect<TaskTrace, PersistenceError>\n readonly threadContext: (threadId: ThreadId) => Effect.Effect<ThreadContext, PersistenceError>\n readonly pendingTasksFor: (\n deviceId: DeviceId,\n ) => Effect.Effect<ReadonlyArray<Task>, PersistenceError>\n readonly assignTask: (taskId: TaskId) => Effect.Effect<Task, PersistenceError>\n readonly rollbackAssignment: (taskId: TaskId) => Effect.Effect<Task, PersistenceError>\n readonly acceptTask: (taskId: TaskId, deviceId: DeviceId) => Effect.Effect<Task, PersistenceError>\n readonly finishTask: (\n taskId: TaskId,\n deviceId: DeviceId,\n result: string,\n providerSessionId?: string,\n ) => Effect.Effect<Task, PersistenceError>\n readonly failTask: (\n taskId: TaskId,\n deviceId: DeviceId,\n error: string,\n ) => Effect.Effect<Task, PersistenceError>\n readonly acknowledgeCancellation: (\n taskId: TaskId,\n deviceId: DeviceId,\n ) => Effect.Effect<Task, PersistenceError>\n readonly requestCancellation: (taskId: TaskId) => Effect.Effect<Task, PersistenceError>\n readonly requeueTasksFor: (deviceId: DeviceId) => Effect.Effect<void, PersistenceError>\n readonly createUpgradeOperations: (\n input: CreateUpgradeOperationsInput,\n ) => Effect.Effect<ReadonlyArray<DeviceOperation>, PersistenceError>\n readonly listOperations: () => Effect.Effect<ReadonlyArray<DeviceOperation>, PersistenceError>\n readonly abandonOperation: (\n operationId: OperationId,\n ) => Effect.Effect<DeviceOperation, PersistenceError>\n readonly pendingOperationsFor: (\n deviceId: DeviceId,\n ) => Effect.Effect<ReadonlyArray<DeviceOperation>, PersistenceError>\n readonly assignOperation: (\n operationId: OperationId,\n ) => Effect.Effect<DeviceOperation, PersistenceError>\n readonly rollbackOperation: (\n operationId: OperationId,\n ) => Effect.Effect<DeviceOperation, PersistenceError>\n readonly acceptOperation: (\n operationId: OperationId,\n deviceId: DeviceId,\n ) => Effect.Effect<DeviceOperation, PersistenceError>\n readonly finishOperation: (\n operationId: OperationId,\n deviceId: DeviceId,\n result: string,\n ) => Effect.Effect<DeviceOperation, PersistenceError>\n readonly failOperation: (\n operationId: OperationId,\n deviceId: DeviceId,\n error: string,\n ) => Effect.Effect<DeviceOperation, PersistenceError>\n readonly requeueOperationsFor: (deviceId: DeviceId) => Effect.Effect<void, PersistenceError>\n readonly sessionFor: (\n threadId: ThreadId,\n deviceId: DeviceId,\n provider: Provider,\n ) => Effect.Effect<string | undefined, PersistenceError>\n readonly createPairing: (\n input: CreatePairingInput,\n ) => Effect.Effect<PairingCredential, PersistenceError>\n readonly exchangePairing: (token: string) => Effect.Effect<PairingResult, PersistenceError>\n readonly authenticateSession: (\n token: string,\n role: ConnectionRoleName,\n ) => Effect.Effect<AuthSession | undefined, PersistenceError>\n readonly listAuthSessions: () => Effect.Effect<ReadonlyArray<AuthSession>, PersistenceError>\n readonly revokeAuthSession: (\n sessionId: AuthSessionId,\n ) => Effect.Effect<AuthSession, PersistenceError>\n}\n\nexport class Service extends Context.Service<Service, Interface>()(\"@cohall/RelayStore\") {}\n\nconst operationError =\n (operation: string) =>\n (cause: unknown): PersistenceError =>\n new PersistenceError({\n operation,\n message: cause instanceof Error ? cause.message : String(cause),\n })\n\nconst decode = <S extends Schema.Top & { readonly DecodingServices: never }>(\n operation: string,\n schema: S,\n value: unknown,\n): Effect.Effect<S[\"Type\"], PersistenceError> =>\n Schema.decodeUnknownEffect(schema)(value).pipe(Effect.mapError(operationError(operation)))\n\nconst threadFromRow = (row: ThreadRow): Effect.Effect<Thread, PersistenceError> =>\n decode(\"RelayStore.decodeThread\", Thread, {\n id: row.id,\n title: row.title,\n createdAt: row.created_at,\n updatedAt: row.updated_at,\n ...(row.default_device_id === null ? {} : { defaultDeviceId: row.default_device_id }),\n })\n\nconst messageFromRow = (row: MessageRow): Effect.Effect<Message, PersistenceError> =>\n decode(\"RelayStore.decodeMessage\", Message, {\n id: row.id,\n threadId: row.thread_id,\n role: row.role === \"tool\" ? \"agent\" : row.role,\n authorName: row.author_name,\n content: row.content,\n createdAt: row.created_at,\n ...(row.task_id === null ? {} : { taskId: row.task_id }),\n ...(row.device_id === null ? {} : { deviceId: row.device_id }),\n })\n\nconst deviceFromRow = (row: DeviceRow): Effect.Effect<Device, PersistenceError> =>\n decode(\"RelayStore.decodeDevice\", Device, {\n id: row.id,\n name: row.name,\n hostname: row.hostname,\n platform: row.platform,\n architecture: row.architecture,\n status: row.status,\n providers: JSON.parse(row.providers_json) as unknown,\n capabilities: JSON.parse(row.capabilities_json) as unknown,\n workspaces: JSON.parse(row.workspaces_json) as unknown,\n version: row.version,\n lastSeenAt: row.last_seen_at,\n ...(row.connected_at === null ? {} : { connectedAt: row.connected_at }),\n })\n\nconst taskFromRow = (row: TaskRow): Effect.Effect<Task, PersistenceError> =>\n decode(\"RelayStore.decodeTask\", Task, {\n id: row.id,\n threadId: row.thread_id,\n prompt: row.prompt,\n provider: row.provider,\n status: row.status,\n targetDeviceId: row.target_device_id,\n createdAt: row.created_at,\n updatedAt: row.updated_at,\n ...(row.context === null ? {} : { context: row.context }),\n ...(row.source_device_id === null ? {} : { sourceDeviceId: row.source_device_id }),\n ...(row.parent_task_id === null ? {} : { parentTaskId: row.parent_task_id }),\n ...(row.workspace === null ? {} : { workspace: row.workspace }),\n ...(row.provider_session_id === null ? {} : { providerSessionId: row.provider_session_id }),\n ...(row.result === null ? {} : { result: row.result }),\n ...(row.error === null ? {} : { error: row.error }),\n ...(row.started_at === null ? {} : { startedAt: row.started_at }),\n ...(row.completed_at === null ? {} : { completedAt: row.completed_at }),\n })\n\nconst operationFromRow = (\n row: DeviceOperationRow,\n): Effect.Effect<DeviceOperation, PersistenceError> =>\n decode(\"RelayStore.decodeOperation\", DeviceOperation, {\n id: row.id,\n kind: row.kind,\n status: row.status,\n targetDeviceId: row.target_device_id,\n requestedVersion: row.requested_version,\n restart: row.restart === 1,\n createdAt: row.created_at,\n updatedAt: row.updated_at,\n ...(row.result === null ? {} : { result: row.result }),\n ...(row.error === null ? {} : { error: row.error }),\n ...(row.completed_at === null ? {} : { completedAt: row.completed_at }),\n })\n\nconst emptyStatusCounts = (): Record<TaskStatus, number> => ({\n queued: 0,\n assigned: 0,\n running: 0,\n cancelling: 0,\n completed: 0,\n failed: 0,\n cancelled: 0,\n})\n\nconst taskTraceEventFromRow = (\n row: TaskTraceEventRow,\n): Effect.Effect<TaskTraceEvent, PersistenceError> =>\n decode(\"RelayStore.decodeTaskTraceEvent\", TaskTraceEvent, {\n kind: row.kind,\n at: row.created_at,\n ...(row.detail === null ? {} : { detail: row.detail }),\n })\n\nconst rolesFromRow = (row: AuthSessionRow): ReadonlyArray<ConnectionRoleName> =>\n Schema.decodeUnknownSync(Schema.Array(ConnectionRole))(JSON.parse(row.roles_json))\n\nconst authSessionFromRow = (row: AuthSessionRow): Effect.Effect<AuthSession, PersistenceError> => {\n const roles = rolesFromRow(row)\n const role = roles[0]\n return role === undefined\n ? Effect.fail(\n new PersistenceError({\n operation: \"RelayStore.decodeAuthSession\",\n message: `Session ${row.id} has no role`,\n }),\n )\n : decode(\"RelayStore.decodeAuthSession\", AuthSession, {\n id: row.id,\n label: row.label,\n role,\n createdAt: row.created_at,\n expiresAt: row.expires_at,\n lastSeenAt: row.last_seen_at,\n ...(row.bound_device_id === null ? {} : { deviceId: row.bound_device_id }),\n ...(row.revoked_at === null ? {} : { revokedAt: row.revoked_at }),\n })\n}\n\nconst secret = (prefix: \"pair\" | \"session\"): string => {\n return `cohall_${prefix}_${randomBytes(32).toString(\"hex\")}`\n}\nconst tokenHash = (token: string): string => createHash(\"sha256\").update(token).digest(\"hex\")\n\nconst providerName = (provider: Provider): string => {\n switch (provider) {\n case \"codex\":\n return \"Codex\"\n case \"claude-code\":\n return \"Claude Code\"\n case \"opencode\":\n return \"OpenCode\"\n }\n}\n\nconst recentWithin = <A>(items: ReadonlyArray<A>, byteBudget: number) => {\n const encoder = new TextEncoder()\n const selected: Array<A> = []\n let bytes = 0\n for (let index = items.length - 1; index >= 0; index -= 1) {\n const item = items[index]\n if (item === undefined) {\n continue\n }\n const itemBytes = encoder.encode(JSON.stringify(item)).byteLength\n if (bytes + itemBytes > byteBudget) {\n break\n }\n bytes += itemBytes\n selected.unshift(item)\n }\n return { items: selected, truncated: selected.length < items.length }\n}\n\nconst derivedTraceEvents = (task: Task): ReadonlyArray<TaskTraceEvent> => {\n const detail = \"Derived from task timestamps; earlier trace events were not recorded\"\n const events: Array<TaskTraceEvent> = [\n TaskTraceEvent.make({ kind: \"queued\", at: task.createdAt, detail }),\n ]\n if (task.startedAt !== undefined) {\n events.push(TaskTraceEvent.make({ kind: \"running\", at: task.startedAt, detail }))\n } else if (task.status === \"assigned\") {\n events.push(TaskTraceEvent.make({ kind: \"assigned\", at: task.updatedAt, detail }))\n }\n if (task.status === \"cancelling\") {\n events.push(TaskTraceEvent.make({ kind: \"cancelling\", at: task.updatedAt, detail }))\n }\n if (\n task.completedAt !== undefined &&\n (task.status === \"completed\" || task.status === \"failed\" || task.status === \"cancelled\")\n ) {\n events.push(TaskTraceEvent.make({ kind: task.status, at: task.completedAt, detail }))\n }\n return events\n}\n\nconst makeService = (db: Database, retainedTerminalTasks = 1_000): Interface => {\n const recordTaskTraceEvent = (\n taskId: TaskId,\n kind: TaskTraceEventKind,\n detail: string,\n createdAt: Timestamp = now(),\n ): void => {\n db.query(\n `INSERT INTO task_trace_events (task_id, kind, created_at, detail)\n VALUES (?, ?, ?, ?)`,\n ).run(taskId, kind, createdAt, detail)\n db.query(\n `DELETE FROM task_trace_events WHERE task_id = ? AND id NOT IN (\n SELECT id FROM task_trace_events WHERE task_id = ? ORDER BY id DESC LIMIT 1000\n )`,\n ).run(taskId, taskId)\n }\n\n const pruneTerminalHistory = (preserveTaskId?: TaskId): void => {\n const exclusion = preserveTaskId === undefined ? \"\" : \"AND id <> ?\"\n const offset = preserveTaskId === undefined ? retainedTerminalTasks : retainedTerminalTasks - 1\n const staleTasks = `SELECT id FROM tasks\n WHERE status IN ('completed', 'failed', 'cancelled')\n ${exclusion}\n ORDER BY completed_at DESC, updated_at DESC, id DESC\n LIMIT -1 OFFSET ?`\n const parameters = preserveTaskId === undefined ? [offset] : [preserveTaskId, offset]\n db.query(`DELETE FROM messages WHERE task_id IN (${staleTasks})`).run(...parameters)\n db.query(`DELETE FROM tasks WHERE id IN (${staleTasks})`).run(...parameters)\n db.query(\n `DELETE FROM threads\n WHERE NOT EXISTS (SELECT 1 FROM tasks WHERE tasks.thread_id = threads.id)\n AND NOT EXISTS (SELECT 1 FROM messages WHERE messages.thread_id = threads.id)`,\n ).run()\n }\n\n const pruneTerminalOperations = (preserveOperationId?: OperationId): void => {\n const exclusion = preserveOperationId === undefined ? \"\" : \"AND id <> ?\"\n const offset =\n preserveOperationId === undefined ? retainedTerminalTasks : retainedTerminalTasks - 1\n const parameters = preserveOperationId === undefined ? [offset] : [preserveOperationId, offset]\n db.query(\n `DELETE FROM device_operations\n WHERE id IN (\n SELECT id FROM device_operations\n WHERE status IN ('completed', 'failed') ${exclusion}\n ORDER BY completed_at DESC, updated_at DESC, id DESC\n LIMIT -1 OFFSET ?\n )`,\n ).run(...parameters)\n }\n\n const queryTask = (taskId: TaskId): TaskRow | null =>\n db.query<TaskRow, [string]>(\"SELECT * FROM tasks WHERE id = ?\").get(taskId)\n\n const queryOperation = (operationId: OperationId): DeviceOperationRow | null =>\n db\n .query<DeviceOperationRow, [string]>(\"SELECT * FROM device_operations WHERE id = ?\")\n .get(operationId)\n\n const getTask = Effect.fn(\"RelayStore.getTask\")(function* (taskId: TaskId) {\n const row = yield* Effect.try({\n try: () => queryTask(taskId),\n catch: operationError(\"RelayStore.getTask\"),\n })\n if (row === null) {\n return yield* Effect.fail(\n new PersistenceError({\n operation: \"RelayStore.getTask\",\n message: `Unknown task ${taskId}`,\n }),\n )\n }\n return yield* taskFromRow(row)\n })\n\n const traceTask = Effect.fn(\"RelayStore.traceTask\")(function* (taskId: TaskId) {\n const task = yield* getTask(taskId)\n const [deviceRow, eventRows] = yield* Effect.try({\n try: () =>\n [\n db\n .query<DeviceRow, [string]>(\"SELECT * FROM devices WHERE id = ?\")\n .get(task.targetDeviceId),\n db\n .query<TaskTraceEventRow, [string]>(\n `SELECT * FROM (\n SELECT id, kind, created_at, detail FROM task_trace_events\n WHERE task_id = ? ORDER BY id DESC LIMIT 101\n ) ORDER BY id`,\n )\n .all(taskId),\n ] as const,\n catch: operationError(\"RelayStore.traceTask\"),\n })\n if (deviceRow === null) {\n return yield* Effect.fail(\n new PersistenceError({\n operation: \"RelayStore.traceTask.device\",\n message: `Unknown target device ${task.targetDeviceId}`,\n }),\n )\n }\n const targetDevice = yield* deviceFromRow(deviceRow)\n const selectedRows = eventRows.slice(-100)\n const recordedEvents = yield* Effect.forEach(selectedRows, taskTraceEventFromRow)\n const events = recordedEvents.length === 0 ? derivedTraceEvents(task) : recordedEvents\n return TaskTrace.make({\n taskId: task.id,\n threadId: task.threadId,\n status: task.status,\n provider: task.provider,\n targetDevice,\n createdAt: task.createdAt,\n updatedAt: task.updatedAt,\n events,\n truncated:\n eventRows.length > 100 ||\n recordedEvents.length === 0 ||\n recordedEvents[0]?.kind !== \"queued\",\n ...(task.sourceDeviceId === undefined ? {} : { sourceDeviceId: task.sourceDeviceId }),\n ...(task.parentTaskId === undefined ? {} : { parentTaskId: task.parentTaskId }),\n ...(task.workspace === undefined ? {} : { workspace: task.workspace }),\n ...(task.startedAt === undefined ? {} : { startedAt: task.startedAt }),\n ...(task.completedAt === undefined ? {} : { completedAt: task.completedAt }),\n ...(task.error === undefined ? {} : { error: task.error }),\n })\n })\n\n const listDevices = Effect.fn(\"RelayStore.listDevices\")(function* () {\n const rows = yield* Effect.try({\n try: () =>\n db\n .query<DeviceRow, []>(\n \"SELECT * FROM devices WHERE forgotten_at IS NULL ORDER BY name COLLATE NOCASE, id\",\n )\n .all(),\n catch: operationError(\"RelayStore.listDevices\"),\n })\n return yield* Effect.forEach(rows, deviceFromRow)\n })\n\n const usage = Effect.fn(\"RelayStore.usage\")(function* () {\n const rows = yield* Effect.try({\n try: () =>\n db\n .query<UsageRow, []>(\n `SELECT tasks.target_device_id AS device_id, devices.name AS device_name,\n tasks.status, tasks.provider, COUNT(*) AS tasks\n FROM tasks\n JOIN devices ON devices.id = tasks.target_device_id\n GROUP BY tasks.target_device_id, devices.name, tasks.status, tasks.provider\n ORDER BY devices.name COLLATE NOCASE, tasks.target_device_id, tasks.provider`,\n )\n .all(),\n catch: operationError(\"RelayStore.usage\"),\n })\n const totalStatus = emptyStatusCounts()\n const totalProviders = new Map<Provider, number>()\n const devices = new Map<\n DeviceId,\n {\n readonly name: string\n readonly status: Record<TaskStatus, number>\n readonly providers: Map<Provider, number>\n }\n >()\n let retainedTasks = 0\n for (const row of rows) {\n const status = Schema.decodeUnknownSync(TaskStatus)(row.status)\n const provider = Schema.decodeUnknownSync(Provider)(row.provider)\n const deviceId = Schema.decodeUnknownSync(DeviceId)(row.device_id)\n retainedTasks += row.tasks\n totalStatus[status] += row.tasks\n totalProviders.set(provider, (totalProviders.get(provider) ?? 0) + row.tasks)\n const current = devices.get(deviceId) ?? {\n name: row.device_name,\n status: emptyStatusCounts(),\n providers: new Map<Provider, number>(),\n }\n current.status[status] += row.tasks\n current.providers.set(provider, (current.providers.get(provider) ?? 0) + row.tasks)\n devices.set(deviceId, current)\n }\n const providerUsage = (providers: ReadonlyMap<Provider, number>) =>\n Provider.literals.flatMap((provider) => {\n const tasks = providers.get(provider)\n return tasks === undefined ? [] : [{ provider, tasks }]\n })\n return UsageSummary.make({\n retainedTasks,\n byStatus: TaskStatusCounts.make(totalStatus),\n byProvider: providerUsage(totalProviders),\n devices: [...devices.entries()].map(([deviceId, device]) =>\n DeviceUsage.make({\n deviceId,\n deviceName: device.name,\n tasks: Object.values(device.status).reduce((sum, tasks) => sum + tasks, 0),\n byStatus: TaskStatusCounts.make(device.status),\n byProvider: providerUsage(device.providers),\n }),\n ),\n })\n })\n\n const getOperation = Effect.fn(\"RelayStore.getOperation\")(function* (operationId: OperationId) {\n const row = yield* Effect.try({\n try: () => queryOperation(operationId),\n catch: operationError(\"RelayStore.getOperation\"),\n })\n if (row === null) {\n return yield* Effect.fail(\n new PersistenceError({\n operation: \"RelayStore.getOperation\",\n message: `Unknown device operation ${operationId}`,\n }),\n )\n }\n return yield* operationFromRow(row)\n })\n\n const listOperations = Effect.fn(\"RelayStore.listOperations\")(function* () {\n const rows = yield* Effect.try({\n try: () =>\n db\n .query<DeviceOperationRow, []>(\n \"SELECT * FROM device_operations ORDER BY created_at DESC, id DESC LIMIT 50\",\n )\n .all(),\n catch: operationError(\"RelayStore.listOperations\"),\n })\n return yield* Effect.forEach(rows, operationFromRow)\n })\n\n const createUpgradeOperations = Effect.fn(\"RelayStore.createUpgradeOperations\")(function* (\n input: CreateUpgradeOperationsInput,\n ) {\n const timestamp = now()\n const operations = yield* Effect.try({\n try: () =>\n db.transaction(() => {\n const devices = db\n .query<DeviceRow, []>(\n \"SELECT * FROM devices WHERE forgotten_at IS NULL ORDER BY name COLLATE NOCASE, id\",\n )\n .all()\n if (devices.length === 0) {\n throw new Error(\"No Cohall devices are registered\")\n }\n if (devices.length > 256) {\n throw new Error(\"All-device operations support at most 256 registered devices\")\n }\n assertDeviceOperationSupport(devices)\n for (const device of devices) {\n const outstanding = db\n .query<{ readonly count: number }, [string]>(\n `SELECT COUNT(*) AS count FROM device_operations\n WHERE target_device_id = ? AND status IN ('queued', 'assigned', 'running')`,\n )\n .get(device.id)\n if ((outstanding?.count ?? 0) > 0) {\n throw new Error(`${device.name} already has an upgrade operation in progress`)\n }\n }\n pruneTerminalOperations()\n return devices.map((device) => {\n const operation = DeviceOperation.make({\n id: makeOperationId(),\n kind: \"upgrade\",\n status: \"queued\",\n targetDeviceId: DeviceId.make(device.id),\n requestedVersion: input.target,\n restart: input.restart,\n createdAt: timestamp,\n updatedAt: timestamp,\n })\n db.query(\n `INSERT INTO device_operations (\n id, kind, status, target_device_id, requested_version, restart,\n created_at, updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,\n ).run(\n operation.id,\n operation.kind,\n operation.status,\n operation.targetDeviceId,\n operation.requestedVersion,\n operation.restart ? 1 : 0,\n operation.createdAt,\n operation.updatedAt,\n )\n return operation\n })\n })(),\n catch: operationError(\"RelayStore.createUpgradeOperations\"),\n })\n return operations\n })\n\n const pendingOperationsFor = Effect.fn(\"RelayStore.pendingOperationsFor\")(function* (\n deviceId: DeviceId,\n ) {\n const rows = yield* Effect.try({\n try: () =>\n db\n .query<DeviceOperationRow, [string]>(\n `SELECT * FROM device_operations WHERE target_device_id = ? AND status = 'queued'\n ORDER BY created_at, id LIMIT 10`,\n )\n .all(deviceId),\n catch: operationError(\"RelayStore.pendingOperationsFor\"),\n })\n return yield* Effect.forEach(rows, operationFromRow)\n })\n\n const transitionOperation = Effect.fn(\"RelayStore.transitionOperation\")(function* (\n operationId: OperationId,\n expected: ReadonlyArray<OperationStatus>,\n status: OperationStatus,\n result?: string,\n error?: string,\n ) {\n const current = yield* getOperation(operationId)\n if (!expected.includes(current.status)) {\n return current\n }\n const timestamp = now()\n const completed = status === \"completed\" || status === \"failed\" ? timestamp : undefined\n const placeholders = expected.map(() => \"?\").join(\", \")\n yield* Effect.try({\n try: () =>\n db.transaction(() => {\n const updated = db\n .query(\n `UPDATE device_operations\n SET status = ?, result = ?, error = ?, updated_at = ?, completed_at = ?\n WHERE id = ? AND status IN (${placeholders})`,\n )\n .run(\n status,\n result ?? current.result ?? null,\n error ?? current.error ?? null,\n timestamp,\n completed ?? current.completedAt ?? null,\n operationId,\n ...expected,\n )\n if (updated.changes === 1 && completed !== undefined) {\n pruneTerminalOperations(operationId)\n }\n })(),\n catch: operationError(\"RelayStore.transitionOperation\"),\n })\n return yield* getOperation(operationId)\n })\n\n const requireOperationTarget = Effect.fn(\"RelayStore.requireOperationTarget\")(function* (\n operationId: OperationId,\n deviceId: DeviceId,\n ) {\n const operation = yield* getOperation(operationId)\n if (operation.targetDeviceId !== deviceId) {\n return yield* Effect.fail(\n new PersistenceError({\n operation: \"RelayStore.requireOperationTarget\",\n message: `Device ${deviceId} cannot update operation ${operationId}`,\n }),\n )\n }\n return operation\n })\n\n const assignOperation = Effect.fn(\"RelayStore.assignOperation\")(function* (\n operationId: OperationId,\n ) {\n const current = yield* getOperation(operationId)\n if (current.status !== \"queued\") {\n return current\n }\n const timestamp = now()\n yield* Effect.try({\n try: () =>\n db\n .query(\n `UPDATE device_operations SET status = 'assigned', updated_at = ?\n WHERE id = ? AND status = 'queued'\n AND NOT EXISTS (\n SELECT 1 FROM tasks WHERE target_device_id = ?\n AND status IN ('assigned', 'running', 'cancelling')\n )\n AND NOT EXISTS (\n SELECT 1 FROM device_operations active\n WHERE active.target_device_id = ? AND active.id <> ?\n AND active.status IN ('assigned', 'running')\n )`,\n )\n .run(timestamp, operationId, current.targetDeviceId, current.targetDeviceId, operationId),\n catch: operationError(\"RelayStore.assignOperation\"),\n })\n return yield* getOperation(operationId)\n })\n\n const acceptOperation = (operationId: OperationId, deviceId: DeviceId) =>\n requireOperationTarget(operationId, deviceId).pipe(\n Effect.flatMap(() => transitionOperation(operationId, [\"assigned\"], \"running\")),\n )\n\n const finishOperation = (operationId: OperationId, deviceId: DeviceId, result: string) =>\n requireOperationTarget(operationId, deviceId).pipe(\n Effect.flatMap(() =>\n transitionOperation(operationId, [\"queued\", \"assigned\", \"running\"], \"completed\", result),\n ),\n )\n\n const failOperation = (operationId: OperationId, deviceId: DeviceId, error: string) =>\n requireOperationTarget(operationId, deviceId).pipe(\n Effect.flatMap(() =>\n transitionOperation(\n operationId,\n [\"queued\", \"assigned\", \"running\"],\n \"failed\",\n undefined,\n error,\n ),\n ),\n )\n\n const abandonOperation = (operationId: OperationId) =>\n transitionOperation(\n operationId,\n [\"queued\", \"assigned\", \"running\"],\n \"failed\",\n undefined,\n \"Abandoned by the relay owner\",\n )\n\n const requeueOperationsFor = Effect.fn(\"RelayStore.requeueOperationsFor\")(function* (\n deviceId: DeviceId,\n ) {\n yield* Effect.try({\n try: () =>\n db\n .query(\n `UPDATE device_operations SET status = 'queued', updated_at = ?\n WHERE target_device_id = ? AND status IN ('assigned', 'running')`,\n )\n .run(now(), deviceId),\n catch: operationError(\"RelayStore.requeueOperationsFor\"),\n })\n })\n\n const forgetDevice = Effect.fn(\"RelayStore.forgetDevice\")(function* (deviceId: DeviceId) {\n const row = yield* Effect.try({\n try: () =>\n db.transaction(() => {\n const device = db\n .query<DeviceRow, [string]>(\n \"SELECT * FROM devices WHERE id = ? AND forgotten_at IS NULL\",\n )\n .get(deviceId)\n if (device === null) {\n throw new Error(`Unknown device ${deviceId}`)\n }\n if (device.status !== \"offline\") {\n throw new Error(`Device ${deviceId} must be offline before it can be forgotten`)\n }\n const outstanding = db\n .query<{ readonly count: number }, [string]>(\n `SELECT COUNT(*) AS count FROM tasks\n WHERE target_device_id = ? AND status NOT IN ('completed', 'failed', 'cancelled')`,\n )\n .get(deviceId)\n if ((outstanding?.count ?? 0) > 0) {\n throw new Error(`Device ${deviceId} still has outstanding tasks`)\n }\n const timestamp = now()\n db.query(\n `UPDATE device_operations\n SET status = 'failed', error = ?, updated_at = ?, completed_at = ?\n WHERE target_device_id = ? AND status IN ('queued', 'assigned', 'running')`,\n ).run(\"Target device was forgotten by the relay owner\", timestamp, timestamp, deviceId)\n pruneTerminalOperations()\n db.query(\"UPDATE devices SET forgotten_at = ? WHERE id = ?\").run(timestamp, deviceId)\n db.query(\n \"UPDATE auth_sessions SET revoked_at = ? WHERE bound_device_id = ? AND revoked_at IS NULL\",\n ).run(timestamp, deviceId)\n return device\n })(),\n catch: operationError(\"RelayStore.forgetDevice\"),\n })\n return yield* deviceFromRow(row)\n })\n\n const recover = Effect.fn(\"RelayStore.recover\")(function* () {\n yield* Effect.try({\n try: () =>\n db.transaction(() => {\n const timestamp = now()\n const interrupted = db\n .query<{ readonly id: string }, []>(\n \"SELECT id FROM tasks WHERE status IN ('assigned', 'running')\",\n )\n .all()\n db.query(\"UPDATE devices SET status = 'offline'\").run()\n db.query(\n \"UPDATE tasks SET status = 'queued', updated_at = ? WHERE status IN ('assigned', 'running')\",\n ).run(timestamp)\n db.query(\n \"UPDATE device_operations SET status = 'queued', updated_at = ? WHERE status IN ('assigned', 'running')\",\n ).run(timestamp)\n for (const task of interrupted) {\n recordTaskTraceEvent(\n TaskId.make(task.id),\n \"requeued\",\n \"Relay restarted before the task completed\",\n timestamp,\n )\n }\n db.query(\"DELETE FROM auth_pairings WHERE expires_at <= ? OR used_at IS NOT NULL\").run(\n timestamp,\n )\n db.query(\n \"UPDATE auth_sessions SET revoked_at = ? WHERE revoked_at IS NULL AND roles_json LIKE '%,%'\",\n ).run(timestamp)\n pruneTerminalHistory()\n pruneTerminalOperations()\n })(),\n catch: operationError(\"RelayStore.recover\"),\n })\n })\n\n const upsertDevice = Effect.fn(\"RelayStore.upsertDevice\")(function* (device: Device) {\n yield* Effect.try({\n try: () =>\n db\n .query(\n `INSERT INTO devices (\n id, name, hostname, platform, architecture, status, providers_json,\n capabilities_json, workspaces_json, version, last_seen_at, connected_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT(id) DO UPDATE SET\n name = excluded.name, hostname = excluded.hostname, platform = excluded.platform,\n architecture = excluded.architecture, status = excluded.status,\n providers_json = excluded.providers_json, capabilities_json = excluded.capabilities_json,\n workspaces_json = excluded.workspaces_json, version = excluded.version,\n last_seen_at = excluded.last_seen_at, connected_at = excluded.connected_at,\n forgotten_at = NULL`,\n )\n .run(\n device.id,\n device.name,\n device.hostname,\n device.platform,\n device.architecture,\n device.status,\n JSON.stringify(device.providers),\n JSON.stringify(device.capabilities),\n JSON.stringify(device.workspaces),\n device.version,\n device.lastSeenAt,\n device.connectedAt ?? null,\n ),\n catch: operationError(\"RelayStore.upsertDevice\"),\n })\n return device\n })\n\n const updateDeviceStatus = Effect.fn(\"RelayStore.updateDeviceStatus\")(function* (\n deviceId: DeviceId,\n status: \"online\" | \"busy\" | \"offline\",\n ) {\n const timestamp = now()\n const result = yield* Effect.try({\n try: () =>\n db\n .query(\"UPDATE devices SET status = ?, last_seen_at = ? WHERE id = ?\")\n .run(status, timestamp, deviceId),\n catch: operationError(\"RelayStore.updateDeviceStatus\"),\n })\n if (result.changes !== 1) {\n return yield* Effect.fail(\n new PersistenceError({\n operation: \"RelayStore.updateDeviceStatus\",\n message: `Unknown device ${deviceId}`,\n }),\n )\n }\n const row = db.query<DeviceRow, [string]>(\"SELECT * FROM devices WHERE id = ?\").get(deviceId)\n if (row === null) {\n return yield* Effect.fail(\n new PersistenceError({\n operation: \"RelayStore.updateDeviceStatus.read\",\n message: `Device ${deviceId} disappeared after update`,\n }),\n )\n }\n return yield* deviceFromRow(row)\n })\n\n const createDelegation = Effect.fn(\"RelayStore.createDelegation\")(function* (\n input: CreateTaskInput,\n targetDeviceId: DeviceId,\n sourceDeviceId?: DeviceId,\n providerSessionId?: string,\n ) {\n const timestamp = now()\n const threadId = input.threadId ?? makeThreadId()\n const task = Task.make({\n id: makeTaskId(),\n threadId,\n prompt: input.prompt,\n provider: input.provider ?? \"codex\",\n status: \"queued\",\n targetDeviceId,\n createdAt: timestamp,\n updatedAt: timestamp,\n ...(input.context === undefined ? {} : { context: input.context }),\n ...(sourceDeviceId === undefined ? {} : { sourceDeviceId }),\n ...(input.parentTaskId === undefined ? {} : { parentTaskId: input.parentTaskId }),\n ...(input.workspace === undefined ? {} : { workspace: input.workspace }),\n ...(providerSessionId === undefined ? {} : { providerSessionId }),\n })\n const thread =\n input.threadId === undefined\n ? Thread.make({\n id: threadId,\n title: input.title ?? input.prompt.slice(0, 72),\n createdAt: timestamp,\n updatedAt: timestamp,\n })\n : undefined\n const message = Message.make({\n id: makeMessageId(),\n threadId,\n role: \"human\",\n authorName: sourceDeviceId === undefined ? \"User\" : \"Remote agent\",\n content: input.prompt,\n createdAt: timestamp,\n taskId: task.id,\n ...(sourceDeviceId === undefined ? {} : { deviceId: sourceDeviceId }),\n })\n yield* Effect.try({\n try: () =>\n db.transaction(() => {\n const outstanding = db\n .query<{ readonly count: number }, [string]>(\n `SELECT COUNT(*) AS count FROM tasks WHERE target_device_id = ?\n AND status IN ('queued', 'assigned', 'running', 'cancelling')`,\n )\n .get(targetDeviceId)\n if ((outstanding?.count ?? 0) >= 100) {\n throw new Error(`Device ${targetDeviceId} has reached its outstanding task limit`)\n }\n if (thread !== undefined) {\n db.query(\n \"INSERT INTO threads (id, title, created_at, updated_at) VALUES (?, ?, ?, ?)\",\n ).run(thread.id, thread.title, thread.createdAt, thread.updatedAt)\n } else if (\n db\n .query<{ readonly id: string }, [string]>(\"SELECT id FROM threads WHERE id = ?\")\n .get(threadId) === null\n ) {\n throw new Error(`Unknown thread ${threadId}`)\n }\n db.query(\n `INSERT INTO tasks (\n id, thread_id, prompt, context, provider, status, source_device_id,\n target_device_id, parent_task_id, workspace, provider_session_id,\n created_at, updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n ).run(\n task.id,\n task.threadId,\n task.prompt,\n task.context ?? null,\n task.provider,\n task.status,\n task.sourceDeviceId ?? null,\n task.targetDeviceId,\n task.parentTaskId ?? null,\n task.workspace ?? null,\n task.providerSessionId ?? null,\n task.createdAt,\n task.updatedAt,\n )\n recordTaskTraceEvent(task.id, \"queued\", \"Relay accepted the task\", timestamp)\n db.query(\n `INSERT INTO messages (\n id, thread_id, role, kind, author_id, author_name, content, created_at,\n task_id, device_id\n ) VALUES (?, ?, ?, 'chat', ?, ?, ?, ?, ?, ?)`,\n ).run(\n message.id,\n message.threadId,\n message.role,\n sourceDeviceId ?? \"user\",\n message.authorName,\n message.content,\n message.createdAt,\n message.taskId ?? null,\n message.deviceId ?? null,\n )\n db.query(\"UPDATE threads SET updated_at = ? WHERE id = ?\").run(timestamp, threadId)\n })(),\n catch: operationError(\"RelayStore.createDelegation\"),\n })\n return task\n })\n\n const threadContext = Effect.fn(\"RelayStore.threadContext\")(function* (threadId: ThreadId) {\n const threadRow = yield* Effect.try({\n try: () => db.query<ThreadRow, [string]>(\"SELECT * FROM threads WHERE id = ?\").get(threadId),\n catch: operationError(\"RelayStore.threadContext.thread\"),\n })\n if (threadRow === null) {\n return yield* Effect.fail(\n new PersistenceError({\n operation: \"RelayStore.threadContext\",\n message: `Unknown thread ${threadId}`,\n }),\n )\n }\n const [messageRows, taskRows] = yield* Effect.try({\n try: () =>\n [\n db\n .query<MessageRow, [string]>(\n `SELECT * FROM (\n SELECT * FROM messages WHERE thread_id = ?\n ORDER BY created_at DESC, id DESC LIMIT 21\n ) ORDER BY created_at, id`,\n )\n .all(threadId),\n db\n .query<TaskRow, [string]>(\n `SELECT * FROM (\n SELECT * FROM tasks WHERE thread_id = ?\n ORDER BY created_at DESC, id DESC LIMIT 21\n ) ORDER BY created_at, id`,\n )\n .all(threadId),\n ] as const,\n catch: operationError(\"RelayStore.threadContext.items\"),\n })\n const [thread, messages, tasks] = yield* Effect.all([\n threadFromRow(threadRow),\n Effect.forEach(messageRows.slice(-20), messageFromRow),\n Effect.forEach(taskRows.slice(-20), taskFromRow),\n ])\n const recentMessages = recentWithin(messages, 256 * 1024)\n const recentTasks = recentWithin(tasks, 768 * 1024)\n return ThreadContext.make({\n thread,\n messages: recentMessages.items,\n tasks: recentTasks.items,\n truncated:\n messageRows.length > 20 ||\n taskRows.length > 20 ||\n recentMessages.truncated ||\n recentTasks.truncated,\n })\n })\n\n const pendingTasksFor = Effect.fn(\"RelayStore.pendingTasksFor\")(function* (deviceId: DeviceId) {\n const rows = yield* Effect.try({\n try: () =>\n db\n .query<TaskRow, [string]>(\n `SELECT * FROM tasks WHERE target_device_id = ?\n AND status IN ('queued', 'cancelling') ORDER BY created_at, id LIMIT 100`,\n )\n .all(deviceId),\n catch: operationError(\"RelayStore.pendingTasksFor\"),\n })\n return yield* Effect.forEach(rows, taskFromRow)\n })\n\n const transition = Effect.fn(\"RelayStore.transition\")(function* (\n taskId: TaskId,\n expected: ReadonlyArray<TaskStatus>,\n update: TaskUpdate,\n event?: { readonly kind: TaskTraceEventKind; readonly detail: string },\n ) {\n const current = yield* getTask(taskId)\n if (!expected.includes(current.status)) {\n return current\n }\n const placeholders = expected.map(() => \"?\").join(\", \")\n const timestamp = now()\n yield* Effect.try({\n try: () =>\n db.transaction(() => {\n const result = db\n .query(\n `UPDATE tasks SET status = ?, provider_session_id = ?, result = ?, error = ?,\n started_at = ?, completed_at = ?, updated_at = ?\n WHERE id = ? AND status IN (${placeholders})`,\n )\n .run(\n update.status ?? current.status,\n update.providerSessionId ?? current.providerSessionId ?? null,\n update.result ?? current.result ?? null,\n update.error ?? current.error ?? null,\n update.startedAt ?? current.startedAt ?? null,\n update.completedAt ?? current.completedAt ?? null,\n timestamp,\n taskId,\n ...expected,\n )\n if (result.changes === 1 && event !== undefined) {\n recordTaskTraceEvent(taskId, event.kind, event.detail, timestamp)\n }\n if (\n result.changes === 1 &&\n update.status !== undefined &&\n [\"completed\", \"failed\", \"cancelled\"].includes(update.status)\n ) {\n pruneTerminalHistory(taskId)\n }\n })(),\n catch: operationError(\"RelayStore.transition\"),\n })\n return yield* getTask(taskId)\n })\n\n const assignTask = Effect.fn(\"RelayStore.assignTask\")(function* (taskId: TaskId) {\n const current = yield* getTask(taskId)\n if (current.status !== \"queued\") {\n return current\n }\n const timestamp = now()\n yield* Effect.try({\n try: () =>\n db.transaction(() => {\n const result = db\n .query(\n `UPDATE tasks SET status = 'assigned', updated_at = ?\n WHERE id = ? AND status = 'queued' AND NOT EXISTS (\n SELECT 1 FROM tasks active\n WHERE active.target_device_id = ? AND active.id <> ?\n AND active.status IN ('assigned', 'running', 'cancelling')\n ) AND NOT EXISTS (\n SELECT 1 FROM device_operations active\n WHERE active.target_device_id = ?\n AND active.status IN ('assigned', 'running')\n )`,\n )\n .run(timestamp, taskId, current.targetDeviceId, taskId, current.targetDeviceId)\n if (result.changes === 1) {\n recordTaskTraceEvent(\n taskId,\n \"assigned\",\n \"Relay dispatched the task over the device WebSocket\",\n timestamp,\n )\n }\n })(),\n catch: operationError(\"RelayStore.assignTask\"),\n })\n return yield* getTask(taskId)\n })\n\n const requireTarget = Effect.fn(\"RelayStore.requireTarget\")(function* (\n taskId: TaskId,\n deviceId: DeviceId,\n ) {\n const task = yield* getTask(taskId)\n if (task.targetDeviceId !== deviceId) {\n return yield* Effect.fail(\n new PersistenceError({\n operation: \"RelayStore.requireTarget\",\n message: `Task ${taskId} belongs to another device`,\n }),\n )\n }\n return task\n })\n\n const terminal = Effect.fn(\"RelayStore.terminal\")(function* (\n taskId: TaskId,\n deviceId: DeviceId,\n status: \"completed\" | \"failed\" | \"cancelled\",\n result?: string,\n error?: string,\n providerSessionId?: string,\n ) {\n const current = yield* requireTarget(taskId, deviceId)\n if ([\"completed\", \"failed\", \"cancelled\"].includes(current.status)) {\n return current\n }\n const timestamp = now()\n yield* Effect.try({\n try: () =>\n db.transaction(() => {\n const updated = db\n .query(\n `UPDATE tasks SET status = ?, result = ?, error = ?, provider_session_id = ?,\n completed_at = ?, updated_at = ? WHERE id = ?\n AND status NOT IN ('completed', 'failed', 'cancelled')`,\n )\n .run(\n status,\n result ?? null,\n error ?? null,\n providerSessionId ?? current.providerSessionId ?? null,\n timestamp,\n timestamp,\n taskId,\n )\n if (updated.changes !== 1) {\n return\n }\n recordTaskTraceEvent(\n taskId,\n status,\n status === \"completed\"\n ? \"Target device completed the task\"\n : status === \"failed\"\n ? \"Target device reported a task failure\"\n : \"Target device acknowledged cancellation\",\n timestamp,\n )\n if (providerSessionId !== undefined) {\n db.query(\n `INSERT INTO provider_sessions (thread_id, device_id, provider, session_id, updated_at)\n VALUES (?, ?, ?, ?, ?)\n ON CONFLICT(thread_id, device_id, provider) DO UPDATE SET\n session_id = excluded.session_id, updated_at = excluded.updated_at`,\n ).run(current.threadId, deviceId, current.provider, providerSessionId, timestamp)\n }\n const content = result ?? error\n if (content !== undefined) {\n const role = status === \"completed\" ? \"agent\" : \"system\"\n db.query(\n `INSERT INTO messages (\n id, thread_id, role, kind, author_id, author_name, content, created_at,\n task_id, device_id\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n ).run(\n makeMessageId(),\n current.threadId,\n role,\n status === \"failed\" ? \"error\" : \"chat\",\n deviceId,\n status === \"completed\" ? providerName(current.provider) : \"Cohall\",\n content,\n timestamp,\n taskId,\n deviceId,\n )\n db.query(\"UPDATE threads SET updated_at = ? WHERE id = ?\").run(\n timestamp,\n current.threadId,\n )\n }\n pruneTerminalHistory(taskId)\n })(),\n catch: operationError(\"RelayStore.terminal\"),\n })\n return yield* getTask(taskId)\n })\n\n const requestCancellation = Effect.fn(\"RelayStore.requestCancellation\")(function* (\n taskId: TaskId,\n ) {\n const current = yield* getTask(taskId)\n if ([\"completed\", \"failed\", \"cancelled\"].includes(current.status)) {\n return current\n }\n if (current.status === \"cancelling\") {\n return current\n }\n const timestamp = now()\n return current.status === \"queued\"\n ? yield* transition(\n taskId,\n [\"queued\"],\n { status: \"cancelled\", completedAt: timestamp },\n { kind: \"cancelled\", detail: \"Client cancelled the task before dispatch\" },\n )\n : yield* transition(\n taskId,\n [\"assigned\", \"running\"],\n {\n status: \"cancelling\",\n },\n { kind: \"cancelling\", detail: \"Client requested task cancellation\" },\n )\n })\n\n const requeueTasksFor = Effect.fn(\"RelayStore.requeueTasksFor\")(function* (deviceId: DeviceId) {\n const timestamp = now()\n yield* Effect.try({\n try: () =>\n db.transaction(() => {\n const interrupted = db\n .query<{ readonly id: string }, [string]>(\n `SELECT id FROM tasks WHERE target_device_id = ?\n AND status IN ('assigned', 'running')`,\n )\n .all(deviceId)\n db.query(\n `UPDATE tasks SET status = 'queued', updated_at = ?\n WHERE target_device_id = ? AND status IN ('assigned', 'running')`,\n ).run(timestamp, deviceId)\n for (const task of interrupted) {\n recordTaskTraceEvent(\n TaskId.make(task.id),\n \"requeued\",\n \"Target device disconnected before task completion\",\n timestamp,\n )\n }\n })(),\n catch: operationError(\"RelayStore.requeueTasksFor\"),\n })\n })\n\n const sessionFor = Effect.fn(\"RelayStore.sessionFor\")(function* (\n threadId: ThreadId,\n deviceId: DeviceId,\n provider: Provider,\n ) {\n const row = yield* Effect.try({\n try: () =>\n db\n .query<{ readonly session_id: string }, [string, string, string]>(\n `SELECT session_id FROM provider_sessions\n WHERE thread_id = ? AND device_id = ? AND provider = ?`,\n )\n .get(threadId, deviceId, provider),\n catch: operationError(\"RelayStore.sessionFor\"),\n })\n return row?.session_id\n })\n\n const createPairing = Effect.fn(\"RelayStore.createPairing\")(function* (\n input: CreatePairingInput,\n ) {\n const roles = [...new Set(input.roles)]\n if (roles.length === 0) {\n return yield* Effect.fail(\n new PersistenceError({\n operation: \"RelayStore.createPairing\",\n message: \"A pairing must allow at least one role\",\n }),\n )\n }\n const token = secret(\"pair\")\n const expiresAt = new Date(Date.now() + 10 * 60 * 1_000).toISOString()\n yield* Effect.try({\n try: () =>\n db\n .query(\n `INSERT INTO auth_pairings (token_hash, label, roles_json, expires_at, created_at)\n VALUES (?, ?, ?, ?, ?)`,\n )\n .run(tokenHash(token), input.label, JSON.stringify(roles), expiresAt, now()),\n catch: operationError(\"RelayStore.createPairing\"),\n })\n return PairingCredential.make({ token, expiresAt: Timestamp.make(expiresAt) })\n })\n\n const exchangePairing = Effect.fn(\"RelayStore.exchangePairing\")(function* (token: string) {\n const timestamp = now()\n const expiresAt = new Date(Date.now() + 90 * 24 * 60 * 60 * 1_000).toISOString()\n const created = yield* Effect.try({\n try: () =>\n db.transaction(() => {\n const pairing = db\n .query<PairingRow, [string, string]>(\n `SELECT * FROM auth_pairings\n WHERE token_hash = ? AND used_at IS NULL AND expires_at > ?`,\n )\n .get(tokenHash(token), timestamp)\n if (pairing === null) {\n throw new Error(\"Pairing credential is invalid, expired, or already used\")\n }\n const roles = Schema.decodeUnknownSync(Schema.Array(ConnectionRole))(\n JSON.parse(pairing.roles_json),\n )\n const deviceId = roles.includes(\"device\") ? makeDeviceId() : undefined\n const consumed = db\n .query(\"UPDATE auth_pairings SET used_at = ? WHERE token_hash = ? AND used_at IS NULL\")\n .run(timestamp, pairing.token_hash)\n if (consumed.changes !== 1) {\n throw new Error(\"Pairing credential was already used\")\n }\n return [...new Set(roles)].map((role) => {\n const sessionToken = secret(\"session\")\n const row = {\n id: makeAuthSessionId(),\n token_hash: tokenHash(sessionToken),\n label: pairing.label,\n roles_json: JSON.stringify([role]),\n created_at: timestamp,\n expires_at: expiresAt,\n last_seen_at: timestamp,\n bound_device_id: role === \"device\" ? (deviceId ?? null) : null,\n revoked_at: null,\n } satisfies AuthSessionRow\n db.query(\n `INSERT INTO auth_sessions (\n id, token_hash, label, roles_json, created_at, expires_at, last_seen_at,\n bound_device_id\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,\n ).run(\n row.id,\n row.token_hash,\n row.label,\n row.roles_json,\n row.created_at,\n row.expires_at,\n row.last_seen_at,\n row.bound_device_id,\n )\n return { token: sessionToken, row }\n })\n })(),\n catch: operationError(\"RelayStore.exchangePairing\"),\n })\n const credentials = yield* Effect.forEach(created, ({ token: sessionToken, row }) =>\n authSessionFromRow(row).pipe(Effect.map((session) => ({ token: sessionToken, session }))),\n )\n return PairingResult.make({ credentials })\n })\n\n const authenticateSession = Effect.fn(\"RelayStore.authenticateSession\")(function* (\n token: string,\n role: ConnectionRoleName,\n ) {\n const row = yield* Effect.try({\n try: () =>\n db\n .query<AuthSessionRow, [string, string]>(\n `SELECT * FROM auth_sessions\n WHERE token_hash = ? AND revoked_at IS NULL AND expires_at > ?`,\n )\n .get(tokenHash(token), now()),\n catch: operationError(\"RelayStore.authenticateSession\"),\n })\n if (row === null || !rolesFromRow(row).includes(role)) {\n return undefined\n }\n const lastSeenAt = now()\n yield* Effect.try({\n try: () =>\n db.query(\"UPDATE auth_sessions SET last_seen_at = ? WHERE id = ?\").run(lastSeenAt, row.id),\n catch: operationError(\"RelayStore.authenticateSession.touch\"),\n })\n const session = yield* authSessionFromRow(row)\n return AuthSession.make({ ...session, lastSeenAt })\n })\n\n const listAuthSessions = Effect.fn(\"RelayStore.listAuthSessions\")(function* () {\n const rows = yield* Effect.try({\n try: () =>\n db\n .query<AuthSessionRow, []>(\n \"SELECT * FROM auth_sessions ORDER BY created_at DESC, id LIMIT 1000\",\n )\n .all(),\n catch: operationError(\"RelayStore.listAuthSessions\"),\n })\n return yield* Effect.forEach(rows, authSessionFromRow)\n })\n\n const revokeAuthSession = Effect.fn(\"RelayStore.revokeAuthSession\")(function* (\n sessionId: AuthSessionId,\n ) {\n const revokedAt = now()\n const result = yield* Effect.try({\n try: () =>\n db\n .query(\"UPDATE auth_sessions SET revoked_at = ? WHERE id = ? AND revoked_at IS NULL\")\n .run(revokedAt, sessionId),\n catch: operationError(\"RelayStore.revokeAuthSession\"),\n })\n if (result.changes !== 1) {\n return yield* Effect.fail(\n new PersistenceError({\n operation: \"RelayStore.revokeAuthSession\",\n message: `Unknown or already revoked session ${sessionId}`,\n }),\n )\n }\n const row = db\n .query<AuthSessionRow, [string]>(\"SELECT * FROM auth_sessions WHERE id = ?\")\n .get(sessionId)\n if (row === null) {\n return yield* Effect.fail(\n new PersistenceError({\n operation: \"RelayStore.revokeAuthSession.read\",\n message: `Session ${sessionId} disappeared after revocation`,\n }),\n )\n }\n return yield* authSessionFromRow(row)\n })\n\n return Service.of({\n recover,\n listDevices,\n usage,\n forgetDevice,\n upsertDevice,\n heartbeat: (deviceId, status) => updateDeviceStatus(deviceId, status),\n markDeviceOffline: (deviceId) => updateDeviceStatus(deviceId, \"offline\"),\n createDelegation,\n getTask,\n traceTask,\n threadContext,\n pendingTasksFor,\n assignTask,\n rollbackAssignment: (taskId) =>\n transition(\n taskId,\n [\"assigned\"],\n { status: \"queued\" },\n { kind: \"requeued\", detail: \"Target device was unavailable during dispatch\" },\n ),\n acceptTask: (taskId, deviceId) =>\n requireTarget(taskId, deviceId).pipe(\n Effect.flatMap(() =>\n transition(\n taskId,\n [\"assigned\"],\n { status: \"running\", startedAt: now() },\n { kind: \"running\", detail: \"Target device accepted the task and started the provider\" },\n ),\n ),\n ),\n finishTask: (taskId, deviceId, result, providerSessionId) =>\n terminal(taskId, deviceId, \"completed\", result, undefined, providerSessionId),\n failTask: (taskId, deviceId, error) => terminal(taskId, deviceId, \"failed\", undefined, error),\n acknowledgeCancellation: (taskId, deviceId) => terminal(taskId, deviceId, \"cancelled\"),\n requestCancellation,\n requeueTasksFor,\n createUpgradeOperations,\n listOperations,\n abandonOperation,\n pendingOperationsFor,\n assignOperation,\n rollbackOperation: (operationId) => transitionOperation(operationId, [\"assigned\"], \"queued\"),\n acceptOperation,\n finishOperation,\n failOperation,\n requeueOperationsFor,\n sessionFor,\n createPairing,\n exchangePairing,\n authenticateSession,\n listAuthSessions,\n revokeAuthSession,\n })\n}\n\nconst migrate = (db: Database): Effect.Effect<void, PersistenceError> =>\n Effect.try({\n try: () => {\n db.exec(\"PRAGMA journal_mode = WAL\")\n db.exec(\"PRAGMA foreign_keys = ON\")\n db.exec(\"PRAGMA busy_timeout = 5000\")\n db.exec(`\n CREATE TABLE IF NOT EXISTS devices (\n id TEXT PRIMARY KEY, name TEXT NOT NULL, hostname TEXT NOT NULL,\n platform TEXT NOT NULL, architecture TEXT NOT NULL, status TEXT NOT NULL,\n providers_json TEXT NOT NULL, capabilities_json TEXT NOT NULL,\n workspaces_json TEXT NOT NULL, version TEXT NOT NULL, last_seen_at TEXT NOT NULL,\n connected_at TEXT, forgotten_at TEXT\n );\n CREATE TABLE IF NOT EXISTS threads (\n id TEXT PRIMARY KEY, title TEXT NOT NULL, created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL, archived_at TEXT,\n default_device_id TEXT REFERENCES devices(id)\n );\n CREATE TABLE IF NOT EXISTS messages (\n id TEXT PRIMARY KEY, thread_id TEXT NOT NULL REFERENCES threads(id) ON DELETE CASCADE,\n role TEXT NOT NULL, kind TEXT NOT NULL DEFAULT 'chat', author_id TEXT NOT NULL,\n author_name TEXT NOT NULL, content TEXT NOT NULL, created_at TEXT NOT NULL,\n task_id TEXT, reply_to TEXT, device_id TEXT REFERENCES devices(id)\n );\n CREATE INDEX IF NOT EXISTS messages_thread_created ON messages(thread_id, created_at);\n CREATE TABLE IF NOT EXISTS tasks (\n id TEXT PRIMARY KEY, thread_id TEXT NOT NULL REFERENCES threads(id) ON DELETE CASCADE,\n prompt TEXT NOT NULL, context TEXT, provider TEXT NOT NULL, status TEXT NOT NULL,\n source_device_id TEXT REFERENCES devices(id),\n target_device_id TEXT NOT NULL REFERENCES devices(id), parent_task_id TEXT,\n workspace TEXT, provider_session_id TEXT, result TEXT, error TEXT,\n created_at TEXT NOT NULL, updated_at TEXT NOT NULL, started_at TEXT, completed_at TEXT\n );\n CREATE INDEX IF NOT EXISTS tasks_thread_created ON tasks(thread_id, created_at);\n CREATE INDEX IF NOT EXISTS tasks_target_status ON tasks(target_device_id, status);\n CREATE TABLE IF NOT EXISTS task_trace_events (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n task_id TEXT NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,\n kind TEXT NOT NULL, created_at TEXT NOT NULL, detail TEXT\n );\n CREATE INDEX IF NOT EXISTS task_trace_events_task_id\n ON task_trace_events(task_id, id);\n CREATE TABLE IF NOT EXISTS provider_sessions (\n thread_id TEXT NOT NULL REFERENCES threads(id) ON DELETE CASCADE,\n device_id TEXT NOT NULL REFERENCES devices(id) ON DELETE CASCADE,\n provider TEXT NOT NULL, session_id TEXT NOT NULL, updated_at TEXT NOT NULL,\n PRIMARY KEY(thread_id, device_id, provider)\n );\n CREATE TABLE IF NOT EXISTS device_operations (\n id TEXT PRIMARY KEY, kind TEXT NOT NULL, status TEXT NOT NULL,\n target_device_id TEXT NOT NULL REFERENCES devices(id),\n requested_version TEXT NOT NULL, restart INTEGER NOT NULL,\n result TEXT, error TEXT, created_at TEXT NOT NULL, updated_at TEXT NOT NULL,\n completed_at TEXT\n );\n CREATE INDEX IF NOT EXISTS device_operations_target_status\n ON device_operations(target_device_id, status);\n CREATE TABLE IF NOT EXISTS auth_pairings (\n token_hash TEXT PRIMARY KEY, label TEXT NOT NULL, roles_json TEXT NOT NULL,\n expires_at TEXT NOT NULL, created_at TEXT NOT NULL, used_at TEXT\n );\n CREATE TABLE IF NOT EXISTS auth_sessions (\n id TEXT PRIMARY KEY, token_hash TEXT NOT NULL UNIQUE, label TEXT NOT NULL,\n roles_json TEXT NOT NULL, created_at TEXT NOT NULL, expires_at TEXT NOT NULL,\n last_seen_at TEXT NOT NULL, bound_device_id TEXT, revoked_at TEXT\n );\n CREATE INDEX IF NOT EXISTS auth_sessions_token ON auth_sessions(token_hash);\n `)\n const deviceColumns = db\n .query<{ readonly name: string }, []>(\"PRAGMA table_info(devices)\")\n .all()\n if (!deviceColumns.some((column) => column.name === \"forgotten_at\")) {\n db.exec(\"ALTER TABLE devices ADD COLUMN forgotten_at TEXT\")\n }\n },\n catch: operationError(\"RelayStore.migrate\"),\n })\n\nexport const layer = (path: string, retainedTerminalTasks = 1_000) =>\n Layer.effect(\n Service,\n Effect.acquireRelease(\n Effect.try({\n try: () => new Database(path),\n catch: operationError(\"RelayStore.open\"),\n }).pipe(Effect.tap(migrate)),\n (db) => Effect.sync(() => db.close()),\n ).pipe(Effect.map((db) => makeService(db, retainedTerminalTasks))),\n )\n\nexport const layerFromDatabase = (db: Database) =>\n Layer.effect(Service, migrate(db).pipe(Effect.map(() => makeService(db))))\n\nexport * as RelayStore from \"./store.ts\"\n",
10
10
  "import {\n AuthSessionId,\n Device,\n DeviceId,\n OperationId,\n SocketEvent,\n maxSocketPayloadBytes,\n TaskId,\n ThreadId,\n decodeCreatePairingInput,\n decodeCreateTaskInput,\n decodeCreateUpgradeOperationsInput,\n decodeExchangePairingInput,\n decodeSocketEvent,\n now,\n version,\n type AuthSession,\n type CreateTaskInput,\n type DeviceId as DeviceIdType,\n type DeviceOperation,\n type Task,\n} from \"@cohall/protocol\"\nimport { Effect, ManagedRuntime, Schema } from \"effect\"\nimport { createHash, timingSafeEqual } from \"node:crypto\"\nimport { access, chmod } from \"node:fs/promises\"\nimport { createServer, type IncomingMessage, type ServerResponse } from \"node:http\"\nimport type { ListenOptions } from \"node:net\"\nimport { platform } from \"node:os\"\nimport { WebSocketServer, type RawData } from \"ws\"\nimport { loadEnvironmentConfiguration, type RelayConfiguration } from \"./config.ts\"\nimport { Hub, type ConnectionSocket } from \"./hub.ts\"\nimport { RelayStore } from \"./store.ts\"\n\ntype RelayListenOptions = ListenOptions | { readonly fd: number }\n\nclass RequestError extends Schema.TaggedErrorClass<RequestError>()(\"Relay.RequestError\", {\n status: Schema.Int,\n message: Schema.String,\n}) {}\n\nexport const relayListenOptions = (\n configuration: Pick<RelayConfiguration, \"host\" | \"port\">,\n environment: NodeJS.ProcessEnv = process.env,\n pid = process.pid,\n): RelayListenOptions => {\n const listenPid = Number(environment.LISTEN_PID)\n const listenFds = Number(environment.LISTEN_FDS)\n if (listenPid !== pid || !Number.isInteger(listenFds) || listenFds < 1) {\n return { host: configuration.host, port: configuration.port }\n }\n\n const descriptorNames = environment.LISTEN_FDNAMES?.split(\":\") ?? []\n const namedIndex = descriptorNames.indexOf(\"cohall-relay\")\n if (namedIndex >= 0 && namedIndex < listenFds) {\n return { fd: 3 + namedIndex }\n }\n if (listenFds === 1) {\n return { fd: 3 }\n }\n throw new Error(\"Cohall received multiple systemd sockets but none was named cohall-relay\")\n}\n\nconst json = (value: unknown, status = 200): Response =>\n Response.json(value, {\n status,\n headers: {\n \"cache-control\": \"no-store\",\n \"x-content-type-options\": \"nosniff\",\n },\n })\n\nconst requestBody = (request: IncomingMessage, limit: number): Promise<Buffer | undefined> => {\n if (request.method === \"GET\" || request.method === \"HEAD\") {\n return Promise.resolve(undefined)\n }\n return new Promise((resolve, reject) => {\n const chunks: Array<Buffer> = []\n let size = 0\n const cleanup = (): void => {\n request.off(\"data\", onData)\n request.off(\"end\", onEnd)\n request.off(\"error\", onError)\n }\n const onData = (chunk: Buffer): void => {\n size += chunk.byteLength\n if (size <= limit) {\n chunks.push(chunk)\n return\n }\n cleanup()\n reject(new Error(\"Request body exceeded 256 KiB\"))\n }\n const onEnd = (): void => {\n cleanup()\n resolve(Buffer.concat(chunks, size))\n }\n const onError = (cause: Error): void => {\n cleanup()\n reject(cause)\n }\n request.on(\"data\", onData)\n request.once(\"end\", onEnd)\n request.once(\"error\", onError)\n })\n}\n\nconst webRequest = async (request: IncomingMessage): Promise<Request> => {\n const headers = new Headers()\n for (let index = 0; index < request.rawHeaders.length; index += 2) {\n const name = request.rawHeaders[index]\n const value = request.rawHeaders[index + 1]\n if (name !== undefined && value !== undefined) {\n headers.append(name, value)\n }\n }\n const payload = await requestBody(request, 256 * 1024)\n return new Request(new URL(request.url ?? \"/\", \"http://cohall.local\"), {\n method: request.method ?? \"GET\",\n headers,\n ...(payload === undefined ? {} : { body: new Uint8Array(payload) }),\n })\n}\n\nconst sendResponse = async (target: ServerResponse, response: Response): Promise<void> => {\n target.statusCode = response.status\n response.headers.forEach((value, name) => target.setHeader(name, value))\n target.end(Buffer.from(await response.arrayBuffer()))\n}\n\nconst socketText = (message: RawData): string => {\n if (Buffer.isBuffer(message)) {\n return message.toString(\"utf8\")\n }\n if (message instanceof ArrayBuffer) {\n return Buffer.from(message).toString(\"utf8\")\n }\n if (Array.isArray(message)) {\n return Buffer.concat(message).toString(\"utf8\")\n }\n return Buffer.from(message).toString(\"utf8\")\n}\n\nconst rejectUpgrade = (socket: NodeJS.WritableStream, status: number, message: string): void => {\n socket.write(`HTTP/1.1 ${status} ${message}\\r\\nConnection: close\\r\\nContent-Length: 0\\r\\n\\r\\n`)\n if (\"destroy\" in socket && typeof socket.destroy === \"function\") {\n socket.destroy()\n }\n}\n\nconst body = <A, E, R>(\n request: Request,\n decode: (input: unknown) => Effect.Effect<A, E, R>,\n): Effect.Effect<A, RequestError, R> =>\n Effect.tryPromise({\n try: () => request.json(),\n catch: () => new RequestError({ status: 400, message: \"Expected a JSON request body\" }),\n }).pipe(\n Effect.flatMap(decode),\n Effect.mapError((cause) =>\n cause instanceof RequestError\n ? cause\n : new RequestError({ status: 400, message: String(cause).slice(0, 2_048) }),\n ),\n )\n\nconst pathId = <S extends Schema.Top & { readonly DecodingServices: never }>(\n schema: S,\n value: string,\n): Effect.Effect<S[\"Type\"], RequestError> =>\n Schema.decodeUnknownEffect(schema)(value).pipe(\n Effect.mapError(\n () => new RequestError({ status: 400, message: `Invalid identifier: ${value}` }),\n ),\n )\n\nconst scoreDevice = (\n device: Device,\n input: CreateTaskInput,\n sourceDeviceId: DeviceIdType | undefined,\n): number => {\n const prompt = `${input.prompt} ${input.context ?? \"\"}`.toLowerCase()\n const needsXcode = /\\b(xcode|ios|macos|swiftui|app store)\\b/.test(prompt)\n const needsBrowser =\n /\\b(browser|chrome|youtube|twitter|logged[- ]?in|signed[- ]?in|x\\.com)\\b/.test(prompt)\n return (\n (device.status === \"offline\" ? 0 : 100) +\n (input.workspace !== undefined &&\n device.workspaces.some(\n (workspace) =>\n input.workspace === workspace.path || input.workspace?.startsWith(`${workspace.path}/`),\n )\n ? 80\n : 0) +\n (needsXcode && device.capabilities.some((capability) => capability.id === \"xcode\") ? 60 : 0) +\n (needsBrowser && device.capabilities.some((capability) => capability.id === \"browser-session\")\n ? 40\n : 0) +\n (sourceDeviceId === device.id ? -5 : 0)\n )\n}\n\nconst chooseDevice = (\n input: CreateTaskInput,\n sourceDeviceId?: DeviceIdType,\n): Effect.Effect<DeviceIdType, RequestError, RelayStore.Service> =>\n Effect.gen(function* () {\n const store = yield* RelayStore.Service\n const devices = yield* store\n .listDevices()\n .pipe(Effect.mapError((cause) => new RequestError({ status: 500, message: cause.message })))\n const provider = input.provider ?? \"codex\"\n if (input.targetDeviceId !== undefined) {\n const target = devices.find((device) => device.id === input.targetDeviceId)\n if (target === undefined) {\n return yield* new RequestError({\n status: 404,\n message: `Unknown target device ${input.targetDeviceId}`,\n })\n }\n if (!target.providers.includes(provider)) {\n return yield* new RequestError({\n status: 409,\n message: `${target.name} does not advertise the ${provider} provider`,\n })\n }\n return target.id\n }\n const selected = devices\n .filter((device) => device.providers.includes(provider))\n .sort(\n (left, right) =>\n scoreDevice(right, input, sourceDeviceId) - scoreDevice(left, input, sourceDeviceId),\n )[0]\n if (selected === undefined) {\n return yield* new RequestError({\n status: 409,\n message: `No Cohall device advertises the ${provider} provider`,\n })\n }\n return selected.id\n })\n\ntype Principal = \"owner\" | AuthSession\n\nexport const runRelay = async (): Promise<void> => {\n const configuration = await Effect.runPromise(loadEnvironmentConfiguration)\n process.umask(0o077)\n const runtime = ManagedRuntime.make(\n RelayStore.layer(configuration.databasePath, configuration.historyTaskLimit),\n )\n const run = <A, E>(effect: Effect.Effect<A, E, RelayStore.Service>): Promise<A> =>\n runtime.runPromise(effect)\n await run(\n Effect.gen(function* () {\n const store = yield* RelayStore.Service\n yield* store.recover()\n }),\n )\n if (\n platform() !== \"win32\" &&\n (await access(configuration.databasePath)\n .then(() => true)\n .catch(() => false))\n ) {\n await chmod(configuration.databasePath, 0o600)\n }\n\n const hub = new Hub()\n let connections = 0\n\n const tokenDigest = (token: string): Buffer => createHash(\"sha256\").update(token).digest()\n const ownerToken = (token: string): boolean =>\n timingSafeEqual(tokenDigest(token), tokenDigest(configuration.token))\n\n const authenticate = async (\n token: string,\n role: \"client\" | \"device\",\n ): Promise<Principal | undefined> => {\n if (ownerToken(token)) {\n return \"owner\"\n }\n return run(\n Effect.gen(function* () {\n const store = yield* RelayStore.Service\n return yield* store.authenticateSession(token, role)\n }),\n ).catch(() => undefined)\n }\n\n const principalFor = async (request: Request): Promise<Principal | undefined> => {\n const authorization = request.headers.get(\"authorization\")\n if (authorization?.startsWith(\"Bearer \") !== true) {\n return undefined\n }\n return authenticate(authorization.slice(\"Bearer \".length), \"client\")\n }\n\n const dispatch = async (task: Task): Promise<Task> => {\n const assigned = await run(\n Effect.gen(function* () {\n const store = yield* RelayStore.Service\n return yield* store.assignTask(task.id)\n }),\n )\n if (assigned.status !== \"assigned\") {\n return assigned\n }\n if (\n hub.sendToDevice(\n assigned.targetDeviceId,\n SocketEvent.make({ _tag: \"TaskAssigned\", task: assigned }),\n )\n ) {\n return assigned\n }\n return run(\n Effect.gen(function* () {\n const store = yield* RelayStore.Service\n return yield* store.rollbackAssignment(task.id)\n }),\n )\n }\n\n const dispatchOperation = async (operation: DeviceOperation): Promise<DeviceOperation> => {\n const assigned = await run(\n Effect.gen(function* () {\n const store = yield* RelayStore.Service\n return yield* store.assignOperation(operation.id)\n }),\n )\n if (assigned.status !== \"assigned\") {\n return assigned\n }\n if (\n hub.sendToDevice(\n assigned.targetDeviceId,\n SocketEvent.make({ _tag: \"OperationAssigned\", operation: assigned }),\n )\n ) {\n return assigned\n }\n return run(\n Effect.gen(function* () {\n const store = yield* RelayStore.Service\n return yield* store.rollbackOperation(operation.id)\n }),\n )\n }\n\n const dispatchPending = async (deviceId: DeviceIdType): Promise<void> => {\n const tasks = await run(\n Effect.gen(function* () {\n const store = yield* RelayStore.Service\n return yield* store.pendingTasksFor(deviceId)\n }),\n )\n for (const task of tasks) {\n if (task.status === \"cancelling\") {\n hub.sendToDevice(deviceId, SocketEvent.make({ _tag: \"CancelTask\", taskId: task.id }))\n } else {\n await dispatch(task)\n }\n }\n const operations = await run(\n Effect.gen(function* () {\n const store = yield* RelayStore.Service\n return yield* store.pendingOperationsFor(deviceId)\n }),\n )\n for (const operation of operations) {\n await dispatchOperation(operation)\n }\n }\n\n const sendError = (socket: ConnectionSocket, code: string, message: string): void => {\n socket.send(\n JSON.stringify(\n SocketEvent.make({\n _tag: \"Error\",\n code: code.slice(0, 64),\n message: message.slice(0, 2_048),\n }),\n ),\n )\n }\n\n const handleSocketEvent = async (socket: ConnectionSocket, input: RawData): Promise<void> => {\n const event = await Effect.runPromise(\n Effect.try({\n try: () => JSON.parse(socketText(input)) as unknown,\n catch: () => new RequestError({ status: 400, message: \"Invalid socket JSON\" }),\n }).pipe(Effect.flatMap(decodeSocketEvent)),\n ).catch((cause: unknown) => {\n sendError(socket, \"invalid_event\", cause instanceof Error ? cause.message : String(cause))\n return undefined\n })\n if (event === undefined) {\n return\n }\n\n if (!hub.isAuthorized(socket)) {\n if (event._tag !== \"Authenticate\") {\n socket.close(4003, \"Authentication required\")\n return\n }\n const principal = await authenticate(event.token, \"device\")\n if (principal === undefined) {\n socket.close(4003, \"Authentication failed\")\n return\n }\n if (hub.pendingConnections() >= 64) {\n socket.close(4008, \"Pending device connection limit reached\")\n return\n }\n const attached = hub.attach(socket, {\n ...(principal === \"owner\" ? {} : { sessionId: principal.id }),\n ...(principal === \"owner\" || principal.deviceId === undefined\n ? {}\n : { boundDeviceId: principal.deviceId }),\n ...(principal === \"owner\" ? {} : { expiresAt: principal.expiresAt }),\n })\n if (!attached) {\n socket.close(4008, \"Credential connection limit reached\")\n return\n }\n socket.data.stageDeadline = setTimeout(() => {\n if (hub.deviceId(socket) === undefined) {\n socket.close(4003, \"Device registration timeout\")\n }\n }, 5_000)\n socket.send(\n JSON.stringify(\n SocketEvent.make({ _tag: \"Connected\", serverVersion: version, connectedAt: now() }),\n ),\n )\n return\n }\n\n if (event._tag === \"Authenticate\") {\n return\n }\n if (event._tag === \"DeviceHello\") {\n const bound = hub.boundDeviceId(socket)\n if (bound !== undefined && bound !== event.device.id) {\n socket.close(4003, \"Device identity does not match its session\")\n return\n }\n const device = Device.make({\n ...event.device,\n status: \"online\",\n connectedAt: now(),\n lastSeenAt: now(),\n })\n if (!hub.registerDevice(device.id, socket)) {\n socket.close(4009, \"Device is already connected\")\n return\n }\n await run(\n Effect.gen(function* () {\n const store = yield* RelayStore.Service\n yield* store.upsertDevice(device)\n }),\n )\n await dispatchPending(device.id)\n return\n }\n\n const deviceId = hub.deviceId(socket)\n if (deviceId === undefined) {\n sendError(socket, \"device_hello_required\", \"Send DeviceHello before device events\")\n return\n }\n\n const settle = (taskId: TaskId): void => {\n socket.send(JSON.stringify(SocketEvent.make({ _tag: \"TaskSettled\", taskId })))\n }\n const settleOperation = (operationId: OperationId): void => {\n socket.send(JSON.stringify(SocketEvent.make({ _tag: \"OperationSettled\", operationId })))\n }\n const processed = await run(\n Effect.gen(function* () {\n const store = yield* RelayStore.Service\n switch (event._tag) {\n case \"DeviceHeartbeat\":\n if (event.deviceId === deviceId) {\n yield* store.heartbeat(deviceId, event.status === \"busy\" ? \"busy\" : \"online\")\n }\n return\n case \"TaskAccepted\":\n yield* store.acceptTask(event.taskId, deviceId)\n return\n case \"TaskFinished\":\n yield* store.finishTask(event.taskId, deviceId, event.result, event.providerSessionId)\n return\n case \"TaskFailed\":\n yield* store.failTask(event.taskId, deviceId, event.error)\n return\n case \"TaskCancelled\":\n yield* store.acknowledgeCancellation(event.taskId, deviceId)\n return\n case \"OperationAccepted\":\n yield* store.acceptOperation(event.operationId, deviceId)\n return\n case \"OperationFinished\":\n yield* store.finishOperation(event.operationId, deviceId, event.result)\n return\n case \"OperationFailed\":\n yield* store.failOperation(event.operationId, deviceId, event.error)\n return\n case \"Connected\":\n case \"TaskAssigned\":\n case \"TaskSettled\":\n case \"CancelTask\":\n case \"OperationAssigned\":\n case \"OperationSettled\":\n case \"Error\":\n return\n }\n }),\n )\n .then(() => true)\n .catch((cause: unknown) => {\n sendError(socket, \"event_failed\", cause instanceof Error ? cause.message : String(cause))\n return false\n })\n if (\n processed &&\n (event._tag === \"TaskFinished\" ||\n event._tag === \"TaskFailed\" ||\n event._tag === \"TaskCancelled\")\n ) {\n settle(event.taskId)\n await dispatchPending(deviceId)\n }\n if (processed && (event._tag === \"OperationFinished\" || event._tag === \"OperationFailed\")) {\n settleOperation(event.operationId)\n await dispatchPending(deviceId)\n }\n }\n\n const api = async (request: Request, url: URL): Promise<Response> => {\n if (url.pathname === \"/api/health\" && request.method === \"GET\") {\n return json({ ok: true, version })\n }\n if (url.pathname === \"/api/auth/pair\" && request.method === \"POST\") {\n return run(\n Effect.gen(function* () {\n const store = yield* RelayStore.Service\n const input = yield* body(request, decodeExchangePairingInput)\n return yield* store.exchangePairing(input.token)\n }),\n )\n .then((value) => json(value, 201))\n .catch(() =>\n json({ error: \"Pairing credential is invalid, expired, or already used\" }, 401),\n )\n }\n\n const principal = await principalFor(request)\n if (principal === undefined) {\n return json({ error: \"Unauthorized\" }, 401)\n }\n const ownerOnly =\n url.pathname.startsWith(\"/api/auth/\") || url.pathname.startsWith(\"/api/operations\")\n if (ownerOnly && principal !== \"owner\") {\n return json({ error: \"Owner token required\" }, 403)\n }\n const sourceDeviceId = principal === \"owner\" ? undefined : principal.deviceId\n\n const effect = Effect.gen(function* () {\n const store = yield* RelayStore.Service\n if (url.pathname === \"/api/auth/pairings\" && request.method === \"POST\") {\n const input = yield* body(request, decodeCreatePairingInput)\n return json(yield* store.createPairing(input), 201)\n }\n if (url.pathname === \"/api/auth/sessions\" && request.method === \"GET\") {\n return json(yield* store.listAuthSessions())\n }\n const revoke = url.pathname.match(/^\\/api\\/auth\\/sessions\\/([^/]+)\\/revoke$/)\n if (request.method === \"POST\" && revoke?.[1] !== undefined) {\n const id = yield* pathId(AuthSessionId, revoke[1])\n const session = yield* store.revokeAuthSession(id)\n hub.closeSession(id)\n return json(session)\n }\n if (url.pathname === \"/api/devices\" && request.method === \"GET\") {\n return json(yield* store.listDevices())\n }\n if (url.pathname === \"/api/usage\" && request.method === \"GET\") {\n return json(yield* store.usage())\n }\n if (url.pathname === \"/api/operations\" && request.method === \"GET\") {\n return json(yield* store.listOperations())\n }\n if (url.pathname === \"/api/operations/upgrades\" && request.method === \"POST\") {\n const input = yield* body(request, decodeCreateUpgradeOperationsInput)\n const operations = yield* store.createUpgradeOperations(input)\n return json(\n yield* Effect.tryPromise(() => Promise.all(operations.map(dispatchOperation))),\n 201,\n )\n }\n const abandonOperation = url.pathname.match(/^\\/api\\/operations\\/([^/]+)\\/abandon$/)\n if (request.method === \"POST\" && abandonOperation?.[1] !== undefined) {\n const operation = yield* store.abandonOperation(\n yield* pathId(OperationId, abandonOperation[1]),\n )\n hub.sendToDevice(\n operation.targetDeviceId,\n SocketEvent.make({ _tag: \"OperationSettled\", operationId: operation.id }),\n )\n return json(operation)\n }\n const forgetDevice = url.pathname.match(/^\\/api\\/devices\\/([^/]+)\\/forget$/)\n if (request.method === \"POST\" && forgetDevice?.[1] !== undefined) {\n if (principal !== \"owner\") {\n return yield* new RequestError({ status: 403, message: \"Owner token required\" })\n }\n const id = yield* pathId(DeviceId, forgetDevice[1])\n if (hub.hasDevice(id)) {\n return yield* new RequestError({\n status: 409,\n message: `Device ${id} must be offline before it can be forgotten`,\n })\n }\n const forgotten = yield* store.forgetDevice(id)\n hub.closeDevice(id)\n return json(forgotten)\n }\n if (url.pathname === \"/api/tasks\" && request.method === \"POST\") {\n const input = yield* body(request, decodeCreateTaskInput)\n const target = yield* chooseDevice(input, sourceDeviceId)\n const providerSessionId =\n input.threadId === undefined\n ? undefined\n : yield* store.sessionFor(input.threadId, target, input.provider ?? \"codex\")\n const task = yield* store.createDelegation(input, target, sourceDeviceId, providerSessionId)\n return json(yield* Effect.tryPromise(() => dispatch(task)), 201)\n }\n const task = url.pathname.match(/^\\/api\\/tasks\\/([^/]+)$/)\n if (request.method === \"GET\" && task?.[1] !== undefined) {\n return json(yield* store.getTask(yield* pathId(TaskId, task[1])))\n }\n const trace = url.pathname.match(/^\\/api\\/tasks\\/([^/]+)\\/trace$/)\n if (request.method === \"GET\" && trace?.[1] !== undefined) {\n return json(yield* store.traceTask(yield* pathId(TaskId, trace[1])))\n }\n const cancel = url.pathname.match(/^\\/api\\/tasks\\/([^/]+)\\/cancel$/)\n if (request.method === \"POST\" && cancel?.[1] !== undefined) {\n const id = yield* pathId(TaskId, cancel[1])\n const updated = yield* store.requestCancellation(id)\n if (updated.status === \"cancelling\") {\n hub.sendToDevice(\n updated.targetDeviceId,\n SocketEvent.make({ _tag: \"CancelTask\", taskId: id }),\n )\n }\n return json(updated)\n }\n const thread = url.pathname.match(/^\\/api\\/threads\\/([^/]+)$/)\n if (request.method === \"GET\" && thread?.[1] !== undefined) {\n return json(yield* store.threadContext(yield* pathId(ThreadId, thread[1])))\n }\n return yield* new RequestError({ status: 404, message: \"Route not found\" })\n }).pipe(\n Effect.mapError((cause) =>\n cause instanceof RequestError\n ? cause\n : new RequestError({\n status:\n cause._tag !== \"RelayStore.PersistenceError\"\n ? 500\n : cause.message.startsWith(\"Unknown\")\n ? 404\n : cause.message.includes(\"outstanding task limit\")\n ? 429\n : cause.message.includes(\"must be offline\") ||\n cause.message.includes(\"still has outstanding tasks\") ||\n cause.message.includes(\"upgrade operation in progress\") ||\n cause.message === \"No Cohall devices are registered\" ||\n cause.message.startsWith(\"All-device operations support\")\n ? 409\n : 500,\n message: cause.message,\n }),\n ),\n )\n return run(effect).catch((cause: unknown) =>\n cause instanceof RequestError\n ? json(\n { error: cause.status === 500 ? \"Relay request failed\" : cause.message },\n cause.status,\n )\n : json({ error: \"Relay request failed\" }, 500),\n )\n }\n\n const websocketServer = new WebSocketServer({\n noServer: true,\n maxPayload: maxSocketPayloadBytes,\n perMessageDeflate: false,\n })\n websocketServer.on(\"connection\", (rawSocket) => {\n const socket = rawSocket as ConnectionSocket\n socket.data = {\n processing: Promise.resolve(),\n stageDeadline: undefined,\n preAuthFrameReceived: false,\n queuedMessages: 0,\n closed: false,\n }\n connections += 1\n socket.data.stageDeadline = setTimeout(() => {\n if (!hub.isAuthorized(socket)) {\n socket.close(4003, \"Authentication timeout\")\n }\n }, 5_000)\n let alive = true\n socket.on(\"pong\", () => {\n alive = true\n })\n const heartbeat = setInterval(() => {\n if (!hub.isAuthorized(socket)) {\n return\n }\n if (!alive) {\n socket.terminate()\n return\n }\n alive = false\n socket.ping()\n }, 30_000)\n heartbeat.unref()\n\n socket.on(\"message\", (message: RawData) => {\n if (!hub.isAuthorized(socket)) {\n const size = Buffer.byteLength(socketText(message))\n if (socket.data.preAuthFrameReceived || size > 1_024) {\n socket.close(4003, \"Only one authentication frame is allowed\")\n return\n }\n socket.data.preAuthFrameReceived = true\n socket.data.processing = handleSocketEvent(socket, message).catch((cause: unknown) => {\n sendError(socket, \"event_failed\", cause instanceof Error ? cause.message : String(cause))\n })\n return\n }\n if (socket.data.queuedMessages >= 8) {\n socket.close(4008, \"Message queue limit reached\")\n return\n }\n socket.data.queuedMessages += 1\n socket.data.processing = socket.data.processing\n .then(() => (socket.data.closed ? undefined : handleSocketEvent(socket, message)))\n .catch((cause: unknown) => {\n sendError(socket, \"event_failed\", cause instanceof Error ? cause.message : String(cause))\n })\n .finally(() => {\n socket.data.queuedMessages = Math.max(0, socket.data.queuedMessages - 1)\n })\n })\n\n socket.once(\"close\", () => {\n clearInterval(heartbeat)\n socket.data.closed = true\n connections = Math.max(0, connections - 1)\n const deviceId = hub.detach(socket)\n if (deviceId === undefined) {\n return\n }\n void run(\n Effect.gen(function* () {\n const store = yield* RelayStore.Service\n yield* store.requeueTasksFor(deviceId)\n yield* store.requeueOperationsFor(deviceId)\n yield* store.markDeviceOffline(deviceId)\n }),\n ).catch((cause: unknown) => console.error(cause))\n })\n })\n\n const server = createServer((incoming, outgoing) => {\n void webRequest(incoming)\n .then((request) => {\n const url = new URL(request.url)\n return url.pathname.startsWith(\"/api/\")\n ? api(request, url)\n : json({ name: \"Cohall relay\", version, status: \"running\" })\n })\n .then((response) => sendResponse(outgoing, response))\n .catch((cause: unknown) =>\n sendResponse(\n outgoing,\n json(\n { error: cause instanceof Error ? cause.message : \"Invalid request\" },\n cause instanceof Error && cause.message.includes(\"256 KiB\") ? 413 : 400,\n ),\n ),\n )\n })\n server.on(\"upgrade\", (request, socket, head) => {\n const url = new URL(request.url ?? \"/\", \"http://cohall.local\")\n if (url.pathname !== \"/ws/device\") {\n rejectUpgrade(socket, 404, \"Not Found\")\n return\n }\n if (connections >= 1_024) {\n rejectUpgrade(socket, 503, \"Service Unavailable\")\n return\n }\n websocketServer.handleUpgrade(request, socket, head, (websocket) => {\n websocketServer.emit(\"connection\", websocket, request)\n })\n })\n await new Promise<void>((resolve, reject) => {\n server.once(\"error\", reject)\n server.listen(relayListenOptions(configuration), () => {\n server.off(\"error\", reject)\n resolve()\n })\n })\n\n const address = server.address()\n const listener =\n typeof address === \"string\"\n ? address\n : address?.family === \"IPv6\"\n ? `[${address.address}]:${address.port}`\n : `${address?.address ?? configuration.host}:${address?.port ?? configuration.port}`\n console.log(`Cohall relay listening on http://${listener}`)\n let stopping = false\n const shutdown = async (): Promise<void> => {\n if (stopping) {\n return\n }\n stopping = true\n for (const socket of websocketServer.clients) {\n socket.close(1001, \"Relay shutting down\")\n }\n await new Promise<void>((resolve) => server.close(() => resolve()))\n websocketServer.close()\n await runtime.dispose()\n }\n process.once(\"SIGINT\", () => void shutdown())\n process.once(\"SIGTERM\", () => void shutdown())\n}\n\nif (import.meta.main) {\n await runRelay().catch((cause: unknown) => {\n console.error(cause instanceof Error ? cause.message : String(cause))\n process.exitCode = 1\n })\n}\n",
11
11
  "#!/usr/bin/env node\n\nimport { version } from \"@cohall/protocol\"\nimport { Effect } from \"effect\"\nimport { printHelp, runCli } from \"./cli.ts\"\nimport { loadClientConfiguration, loadDeviceConfiguration } from \"./config.ts\"\nimport { runDaemon } from \"./daemon.ts\"\nimport { runMcp } from \"./mcp.ts\"\n\nconst main = async (): Promise<void> => {\n const command = process.argv[2]\n if (command === undefined || command === \"help\" || command === \"--help\" || command === \"-h\") {\n printHelp()\n return\n }\n if (command === \"--version\" || command === \"version\") {\n console.log(version)\n return\n }\n const commandArguments = process.argv.slice(3)\n if (\n commandArguments.length === 1 &&\n [\"--help\", \"-h\", \"help\"].includes(commandArguments[0] ?? \"\")\n ) {\n printHelp()\n return\n }\n if ([\"device\", \"mcp\"].includes(command) && process.argv.length > 3) {\n throw new Error(`${command} does not accept arguments`)\n }\n if (command === \"relay\" && commandArguments.length === 0) {\n const { runRelay } = await import(\"@cohall/relay\")\n await runRelay()\n return\n }\n if (command === \"device\") {\n const configuration = await Effect.runPromise(loadDeviceConfiguration)\n await Effect.runPromise(runDaemon(configuration))\n return\n }\n if (command === \"mcp\") {\n const configuration = await Effect.runPromise(loadClientConfiguration)\n await runMcp(configuration)\n return\n }\n await runCli(command, commandArguments)\n}\n\nawait main().catch((cause: unknown) => {\n console.error(\n JSON.stringify({ error: cause instanceof Error ? cause.message : String(cause) }, null, 2),\n )\n process.exitCode = 1\n})\n",
12
12
  "import {\n AuthSession,\n CreatePairingInput,\n CreateTaskInput,\n CreateUpgradeOperationsInput,\n Device,\n DeviceOperation,\n ErrorResponse,\n ExchangePairingInput,\n PairingCredential,\n PairingResult,\n Task,\n TaskTrace,\n ThreadContext,\n UsageSummary,\n type AuthSessionId,\n type DeviceId,\n type OperationId,\n type TaskId,\n type ThreadId,\n} from \"@cohall/protocol\"\nimport { Context, Effect, Layer, Schema } from \"effect\"\n\nexport interface RelayClientOptions {\n readonly baseUrl: string\n readonly token: string\n}\n\nexport class RelayRequestError extends Schema.TaggedErrorClass<RelayRequestError>()(\n \"RelayClient.RequestError\",\n {\n operation: Schema.String,\n message: Schema.String,\n status: Schema.optionalKey(Schema.Number),\n },\n) {}\n\nexport class RelayDecodeError extends Schema.TaggedErrorClass<RelayDecodeError>()(\n \"RelayClient.DecodeError\",\n { operation: Schema.String, message: Schema.String },\n) {}\n\nexport type RelayClientError = RelayRequestError | RelayDecodeError\n\nexport interface Interface {\n readonly devices: () => Effect.Effect<ReadonlyArray<Device>, RelayClientError>\n readonly forgetDevice: (deviceId: DeviceId) => Effect.Effect<Device, RelayClientError>\n readonly createTask: (input: CreateTaskInput) => Effect.Effect<Task, RelayClientError>\n readonly getTask: (taskId: TaskId) => Effect.Effect<Task, RelayClientError>\n readonly traceTask: (taskId: TaskId) => Effect.Effect<TaskTrace, RelayClientError>\n readonly cancelTask: (taskId: TaskId) => Effect.Effect<Task, RelayClientError>\n readonly threadContext: (threadId: ThreadId) => Effect.Effect<ThreadContext, RelayClientError>\n readonly createPairing: (\n input: CreatePairingInput,\n ) => Effect.Effect<PairingCredential, RelayClientError>\n readonly authSessions: () => Effect.Effect<ReadonlyArray<AuthSession>, RelayClientError>\n readonly revokeAuthSession: (\n sessionId: AuthSessionId,\n ) => Effect.Effect<AuthSession, RelayClientError>\n readonly usage: () => Effect.Effect<UsageSummary, RelayClientError>\n readonly createUpgradeOperations: (\n input: CreateUpgradeOperationsInput,\n ) => Effect.Effect<ReadonlyArray<DeviceOperation>, RelayClientError>\n readonly operations: () => Effect.Effect<ReadonlyArray<DeviceOperation>, RelayClientError>\n readonly abandonOperation: (\n operationId: OperationId,\n ) => Effect.Effect<DeviceOperation, RelayClientError>\n}\n\nexport class Service extends Context.Service<Service, Interface>()(\"@cohall/RelayClient\") {}\n\nconst normalizeBaseUrl = (url: string): string => url.replace(/\\/+$/, \"\")\n\nconst jsonBody = async (response: Response, operation: string): Promise<unknown> => {\n if (response.body === null) {\n throw new RelayDecodeError({ operation, message: \"Relay returned an empty response\" })\n }\n const reader = response.body.getReader()\n const chunks: Array<Uint8Array> = []\n let size = 0\n while (true) {\n const chunk = await reader.read()\n if (chunk.done) {\n break\n }\n size += chunk.value.byteLength\n if (size > 2 * 1024 * 1024) {\n await reader.cancel()\n throw new RelayDecodeError({ operation, message: \"Relay response exceeded 2 MiB\" })\n }\n chunks.push(chunk.value)\n }\n const bytes = new Uint8Array(size)\n let offset = 0\n for (const chunk of chunks) {\n bytes.set(chunk, offset)\n offset += chunk.byteLength\n }\n const text = new TextDecoder().decode(bytes)\n try {\n return JSON.parse(text) as unknown\n } catch (cause) {\n throw new RelayDecodeError({\n operation,\n message: cause instanceof Error ? cause.message : String(cause),\n })\n }\n}\n\nconst responseMessage = async (response: Response, operation: string): Promise<string> => {\n const json = await jsonBody(response, operation).catch(() => undefined)\n const decoded = Schema.decodeUnknownOption(ErrorResponse)(json)\n return decoded._tag === \"Some\"\n ? decoded.value.error\n : `${response.status} ${response.statusText}`.trim()\n}\n\nexport const make = (options: RelayClientOptions): Interface => {\n const baseUrl = normalizeBaseUrl(options.baseUrl)\n\n const request = <S extends Schema.Top & { readonly DecodingServices: never }>(\n operation: string,\n path: string,\n schema: S,\n init?: RequestInit,\n ): Effect.Effect<S[\"Type\"], RelayClientError> =>\n Effect.gen(function* () {\n const response = yield* Effect.tryPromise({\n try: (signal) =>\n fetch(`${baseUrl}${path}`, {\n ...init,\n signal: AbortSignal.any([signal, AbortSignal.timeout(30_000)]),\n headers: {\n authorization: `Bearer ${options.token}`,\n \"content-type\": \"application/json\",\n ...init?.headers,\n },\n }),\n catch: (cause) =>\n new RelayRequestError({\n operation,\n message: cause instanceof Error ? cause.message : String(cause),\n }),\n })\n if (!response.ok) {\n return yield* Effect.fail(\n new RelayRequestError({\n operation,\n message: yield* Effect.promise(() => responseMessage(response, operation)),\n status: response.status,\n }),\n )\n }\n const json = yield* Effect.tryPromise({\n try: () => jsonBody(response, operation),\n catch: (cause) =>\n cause instanceof RelayDecodeError\n ? cause\n : new RelayDecodeError({ operation, message: String(cause) }),\n })\n return yield* Schema.decodeUnknownEffect(schema)(json).pipe(\n Effect.mapError((cause) => new RelayDecodeError({ operation, message: String(cause) })),\n )\n })\n\n return Service.of({\n devices: () => request(\"RelayClient.devices\", \"/api/devices\", Schema.Array(Device)),\n forgetDevice: (deviceId) =>\n request(\n \"RelayClient.forgetDevice\",\n `/api/devices/${encodeURIComponent(deviceId)}/forget`,\n Device,\n { method: \"POST\" },\n ),\n createTask: (input) =>\n request(\"RelayClient.createTask\", \"/api/tasks\", Task, {\n method: \"POST\",\n body: JSON.stringify(input),\n }),\n getTask: (taskId) =>\n request(\"RelayClient.getTask\", `/api/tasks/${encodeURIComponent(taskId)}`, Task),\n traceTask: (taskId) =>\n request(\"RelayClient.traceTask\", `/api/tasks/${encodeURIComponent(taskId)}/trace`, TaskTrace),\n cancelTask: (taskId) =>\n request(\"RelayClient.cancelTask\", `/api/tasks/${encodeURIComponent(taskId)}/cancel`, Task, {\n method: \"POST\",\n }),\n threadContext: (threadId) =>\n request(\n \"RelayClient.threadContext\",\n `/api/threads/${encodeURIComponent(threadId)}`,\n ThreadContext,\n ),\n createPairing: (input) =>\n request(\"RelayClient.createPairing\", \"/api/auth/pairings\", PairingCredential, {\n method: \"POST\",\n body: JSON.stringify(input),\n }),\n authSessions: () =>\n request(\"RelayClient.authSessions\", \"/api/auth/sessions\", Schema.Array(AuthSession)),\n revokeAuthSession: (sessionId) =>\n request(\n \"RelayClient.revokeAuthSession\",\n `/api/auth/sessions/${encodeURIComponent(sessionId)}/revoke`,\n AuthSession,\n { method: \"POST\" },\n ),\n usage: () => request(\"RelayClient.usage\", \"/api/usage\", UsageSummary),\n createUpgradeOperations: (input) =>\n request(\n \"RelayClient.createUpgradeOperations\",\n \"/api/operations/upgrades\",\n Schema.Array(DeviceOperation),\n { method: \"POST\", body: JSON.stringify(input) },\n ),\n operations: () =>\n request(\"RelayClient.operations\", \"/api/operations\", Schema.Array(DeviceOperation)),\n abandonOperation: (operationId) =>\n request(\n \"RelayClient.abandonOperation\",\n `/api/operations/${encodeURIComponent(operationId)}/abandon`,\n DeviceOperation,\n { method: \"POST\" },\n ),\n })\n}\n\nexport const exchangePairing = (\n baseUrl: string,\n input: ExchangePairingInput,\n): Effect.Effect<PairingResult, RelayClientError> =>\n Effect.gen(function* () {\n const operation = \"RelayClient.exchangePairing\"\n const response = yield* Effect.tryPromise({\n try: (signal) =>\n fetch(`${normalizeBaseUrl(baseUrl)}/api/auth/pair`, {\n method: \"POST\",\n signal: AbortSignal.any([signal, AbortSignal.timeout(30_000)]),\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(input),\n }),\n catch: (cause) =>\n new RelayRequestError({\n operation,\n message: cause instanceof Error ? cause.message : String(cause),\n }),\n })\n if (!response.ok) {\n return yield* Effect.fail(\n new RelayRequestError({\n operation,\n message: yield* Effect.promise(() => responseMessage(response, operation)),\n status: response.status,\n }),\n )\n }\n const json = yield* Effect.tryPromise({\n try: () => jsonBody(response, operation),\n catch: (cause) =>\n cause instanceof RelayDecodeError\n ? cause\n : new RelayDecodeError({ operation, message: String(cause) }),\n })\n return yield* Schema.decodeUnknownEffect(PairingResult)(json).pipe(\n Effect.mapError((cause) => new RelayDecodeError({ operation, message: String(cause) })),\n )\n })\n\nexport const layer = (options: RelayClientOptions) => Layer.succeed(Service, make(options))\nexport * as RelayClient from \"./index.ts\"\n",
13
- "import { RelayClient } from \"@cohall/client\"\nimport {\n AuthSessionId,\n DeviceId,\n OperationId,\n Provider,\n TaskId,\n ThreadId,\n makeDeviceId,\n version,\n} from \"@cohall/protocol\"\nimport * as Providers from \"@cohall/providers\"\nimport { Effect, Schema } from \"effect\"\nimport { access, mkdir, readFile, stat, writeFile } from \"node:fs/promises\"\nimport { homedir } from \"node:os\"\nimport { dirname, join } from \"node:path\"\nimport skill from \"../../../skills/cohall/SKILL.md\" with { type: \"text\" }\nimport {\n StoredConfiguration,\n configurationPath,\n credentialsForRelay,\n loadClientConfiguration,\n loadOwnerConfiguration,\n makeStoredConfiguration,\n normalizeRelayUrl,\n parseProviders,\n parseWorkspaces,\n readStoredConfiguration,\n writeStoredConfiguration,\n} from \"./config.ts\"\nimport {\n createDelegation,\n followTaskTrace,\n taskResult,\n threadContext,\n waitForTask,\n} from \"./delegation.ts\"\nimport { allDeviceHealth, deviceVersions } from \"./device-overview.ts\"\nimport { guidedSetupInput, joinRelay, terminalPrompter, type Prompter } from \"./setup.ts\"\nimport { backupRelay, restoreRelay, switchRelay } from \"./relay-migration.ts\"\nimport { installDeviceService } from \"./service.ts\"\nimport { deviceVersionWarning, normalizeUpgradeTarget, upgrade } from \"./upgrade.ts\"\n\ninterface Arguments {\n readonly options: ReadonlyMap<string, ReadonlyArray<string> | true>\n readonly positionals: ReadonlyArray<string>\n}\n\nconst valueOptions = new Set([\n \"context\",\n \"context-file\",\n \"label\",\n \"model\",\n \"name\",\n \"prompt\",\n \"prompt-file\",\n \"provider\",\n \"providers\",\n \"relay\",\n \"sandbox\",\n \"target\",\n \"thread\",\n \"timeout\",\n \"token-file\",\n \"to\",\n \"workspace\",\n])\nconst flagOptions = new Set([\n \"all\",\n \"allow-http\",\n \"client-only\",\n \"dry-run\",\n \"follow\",\n \"no-restart\",\n \"no-wait\",\n \"service\",\n])\nconst aliases = new Map([\n [\"-c\", \"context\"],\n [\"-p\", \"prompt\"],\n [\"-t\", \"target\"],\n [\"-T\", \"thread\"],\n [\"-w\", \"workspace\"],\n])\n\nconst help = `Cohall connects agents running on your own devices.\n\nUsage:\n cohall init [--relay url] [--workspace path] [--providers list] [--service]\n cohall join --relay <url> --workspace <path> [--providers list] [--token-file <path>]\n cohall configure [--relay url] [--name name] [--workspace path]\n [--providers codex,opencode|auto] [--model id]\n cohall config\n cohall devices\n cohall delegate [prompt] [--target @device] [--provider provider]\n [--context text] [--thread uuid] [--workspace path]\n [--timeout seconds] [--no-wait]\n cohall status <task-id>\n cohall trace <task-id> [--follow]\n cohall wait <task-id> [--timeout seconds]\n cohall cancel <task-id>\n cohall thread <thread-id>\n cohall pair [--label name] [--client-only]\n cohall sessions\n cohall revoke <session-id>\n cohall forget <device-id>\n cohall doctor [--all]\n cohall versions\n cohall usage\n cohall upgrade [--to version|latest] [--no-restart] [--dry-run]\n cohall upgrade --all [--to version|latest] [--no-restart] [--dry-run]\n cohall upgrades [abandon <operation-id>]\n cohall service install\n cohall device\n cohall relay\n cohall relay backup <directory>\n cohall relay restore <directory>\n cohall relay use <url> [--no-restart] [--allow-http]\n cohall mcp\n cohall skill [install [agents|claude|opencode|all]]\n cohall integrations\n\nProviders: codex, claude-code, opencode.\nConfiguration is stored per user; environment variables override it.`\n\nconst parseArguments = (values: ReadonlyArray<string>): Arguments => {\n const options = new Map<string, ReadonlyArray<string> | true>()\n const positionals: Array<string> = []\n for (let index = 0; index < values.length; index += 1) {\n const argument = values[index]\n if (argument === undefined) {\n break\n }\n if (argument === \"--\") {\n positionals.push(...values.slice(index + 1))\n break\n }\n if (!argument.startsWith(\"-\")) {\n positionals.push(argument)\n continue\n }\n const separator = argument.indexOf(\"=\")\n const rawName = separator === -1 ? argument : argument.slice(0, separator)\n const inline = separator === -1 ? undefined : argument.slice(separator + 1)\n const name = aliases.get(rawName) ?? rawName.replace(/^--/, \"\")\n if (flagOptions.has(name)) {\n if (inline !== undefined) {\n throw new Error(`--${name} does not accept a value`)\n }\n options.set(name, true)\n continue\n }\n if (!valueOptions.has(name)) {\n throw new Error(`Unknown option: ${argument}`)\n }\n const value = inline ?? values[index + 1]\n if (value === undefined || (inline === undefined && value.startsWith(\"-\") && value !== \"-\")) {\n throw new Error(`${rawName} requires a value`)\n }\n const previous = options.get(name)\n options.set(name, previous === undefined || previous === true ? [value] : [...previous, value])\n if (inline === undefined) {\n index += 1\n }\n }\n return { options, positionals }\n}\n\nconst values = (arguments_: Arguments, name: string): ReadonlyArray<string> => {\n const option = arguments_.options.get(name)\n if (option === true) {\n throw new Error(`--${name} requires a value`)\n }\n return option ?? []\n}\nconst option = (arguments_: Arguments, name: string): string | undefined => {\n const found = values(arguments_, name)\n if (found.length > 1 && name !== \"workspace\") {\n throw new Error(`--${name} may only be specified once`)\n }\n return found[0]\n}\nconst allowOptions = (arguments_: Arguments, names: ReadonlyArray<string>): void => {\n const allowed = new Set(names)\n for (const name of arguments_.options.keys()) {\n if (!allowed.has(name)) {\n throw new Error(`--${name} is not valid for this command`)\n }\n }\n}\nconst noPositionals = (arguments_: Arguments, command: string): void => {\n if (arguments_.positionals.length > 0) {\n throw new Error(`${command} does not accept positional arguments`)\n }\n}\nconst identifier = (arguments_: Arguments, label: string): string => {\n const value = arguments_.positionals[0]\n if (value === undefined) {\n throw new Error(`${label} is required`)\n }\n if (arguments_.positionals.length > 1) {\n throw new Error(`Unexpected arguments after ${label}`)\n }\n return value\n}\nconst print = (value: unknown): void => console.log(JSON.stringify(value, null, 2))\nconst printLine = (value: unknown): void => console.log(JSON.stringify(value))\n\nconst readInput = async (\n arguments_: Arguments,\n name: \"prompt\" | \"context\",\n): Promise<string | undefined> => {\n const direct = option(arguments_, name)\n const path = option(arguments_, `${name}-file`)\n if (direct !== undefined && path !== undefined) {\n throw new Error(`Use either --${name} or --${name}-file, not both`)\n }\n if (path !== undefined) {\n if (\n !(await access(path)\n .then(() => true)\n .catch(() => false))\n ) {\n throw new Error(`File does not exist: ${path}`)\n }\n if ((await stat(path)).size > 131_072) {\n throw new Error(`${name} file exceeds 128 KiB`)\n }\n return readFile(path, \"utf8\")\n }\n const result = direct === \"-\" ? await readStdin(131_072, name) : direct\n if (result !== undefined && result.length > 131_072) {\n throw new Error(`${name} exceeds 128 KiB`)\n }\n return result\n}\n\nconst readStdin = async (limit: number, label: string): Promise<string> => {\n const chunks: Array<Buffer> = []\n let size = 0\n for await (const chunk of process.stdin) {\n const bytes = typeof chunk === \"string\" ? Buffer.from(chunk) : Buffer.from(chunk)\n size += bytes.byteLength\n if (size > limit) {\n throw new Error(`${label} exceeds ${Math.floor(limit / 1024)} KiB`)\n }\n chunks.push(bytes)\n }\n return Buffer.concat(chunks, size).toString(\"utf8\")\n}\n\nconst timeout = (arguments_: Arguments): number => {\n const seconds = Number(option(arguments_, \"timeout\") ?? \"900\")\n if (!Number.isInteger(seconds) || seconds < 5 || seconds > 86_400) {\n throw new Error(\"--timeout must be an integer between 5 and 86400\")\n }\n return seconds\n}\n\nconst pairingToken = async (arguments_: Arguments): Promise<string> => {\n const path = option(arguments_, \"token-file\")\n if (\n path !== undefined &&\n !(await access(path)\n .then(() => true)\n .catch(() => false))\n ) {\n throw new Error(`Pairing token file does not exist: ${path}`)\n }\n if (path !== undefined && (await stat(path)).size > 512) {\n throw new Error(\"Pairing token file exceeds 512 bytes\")\n }\n const token = (\n path === undefined ? await readStdin(512, \"Pairing token\") : await readFile(path, \"utf8\")\n ).trim()\n if (token.length === 0 || new TextEncoder().encode(token).byteLength > 256) {\n throw new Error(\"Provide a pairing token on stdin or with --token-file\")\n }\n return token\n}\n\nconst client = async () => {\n const configuration = await Effect.runPromise(loadClientConfiguration)\n return {\n configuration,\n relay: RelayClient.make({ baseUrl: configuration.relayUrl, token: configuration.token }),\n }\n}\n\nconst ownerClient = async () => {\n const configuration = await Effect.runPromise(loadOwnerConfiguration)\n return {\n configuration,\n relay: RelayClient.make({ baseUrl: configuration.relayUrl, token: configuration.token }),\n }\n}\n\nconst installSkill = async (target: string): Promise<ReadonlyArray<string>> => {\n const roots = {\n agents: join(homedir(), \".agents\", \"skills\", \"cohall\", \"SKILL.md\"),\n claude: join(homedir(), \".claude\", \"skills\", \"cohall\", \"SKILL.md\"),\n opencode: join(homedir(), \".config\", \"opencode\", \"skills\", \"cohall\", \"SKILL.md\"),\n } as const\n const selected =\n target === \"all\"\n ? Object.values(roots)\n : target in roots\n ? [roots[target as keyof typeof roots]]\n : undefined\n if (selected === undefined) {\n throw new Error(\"Skill target must be agents, claude, opencode, or all\")\n }\n for (const path of selected) {\n await mkdir(dirname(path), { recursive: true })\n await writeFile(path, skill)\n }\n return selected\n}\n\nexport const printHelp = (): void => console.log(help)\nexport const printSkill = (): void => console.log(skill.trimEnd())\n\nexport const runCli = async (command: string, raw: ReadonlyArray<string>): Promise<void> => {\n const arguments_ = parseArguments(raw)\n\n if (command === \"init\") {\n allowOptions(arguments_, [\n \"client-only\",\n \"name\",\n \"providers\",\n \"relay\",\n \"service\",\n \"token-file\",\n \"workspace\",\n ])\n noPositionals(arguments_, command)\n const token =\n option(arguments_, \"token-file\") === undefined ? undefined : await pairingToken(arguments_)\n const interactive = process.stdin.isTTY === true && process.stderr.isTTY === true\n const relayUrl = option(arguments_, \"relay\")\n const deviceName = option(arguments_, \"name\")\n const providerInput = option(arguments_, \"providers\")\n const prompter: Prompter = interactive\n ? terminalPrompter()\n : {\n answer: (_label, fallback) => Promise.resolve(fallback),\n secret: () => pairingToken(arguments_),\n close: () => undefined,\n }\n try {\n const input = await guidedSetupInput(\n {\n clientOnly: arguments_.options.has(\"client-only\"),\n workspaces: values(arguments_, \"workspace\"),\n cwd: process.cwd(),\n ...(relayUrl === undefined ? {} : { relayUrl }),\n ...(token === undefined ? {} : { token }),\n ...(deviceName === undefined ? {} : { deviceName }),\n ...(providerInput === undefined ? {} : { providers: providerInput }),\n },\n prompter,\n )\n const providers = input.providers === \"auto\" ? \"auto\" : parseProviders(input.providers)\n const existing = await readStoredConfiguration()\n const result = input.reusedConfiguration\n ? {\n configuration: await makeStoredConfiguration({\n relayUrl: input.relayUrl,\n ...(input.deviceName === undefined ? {} : { deviceName: input.deviceName }),\n workspaces: input.workspaces,\n providers,\n }),\n roles: [\n ...(existing?.clientToken === undefined ? [] : ([\"client\"] as const)),\n ...(arguments_.options.has(\"client-only\") || existing?.deviceToken === undefined\n ? []\n : ([\"device\"] as const)),\n ],\n }\n : await joinRelay({\n relayUrl: input.relayUrl,\n token: input.token ?? \"\",\n clientOnly: arguments_.options.has(\"client-only\"),\n ...(input.deviceName === undefined ? {} : { deviceName: input.deviceName }),\n workspaces: input.workspaces,\n providers,\n })\n if (input.reusedConfiguration) {\n await writeStoredConfiguration(result.configuration)\n }\n const installedSkills = await installSkill(\"all\")\n const service = arguments_.options.has(\"service\") ? await installDeviceService() : undefined\n print({\n initialized: true,\n reused_configuration: input.reusedConfiguration,\n config_path: configurationPath(),\n relay_url: result.configuration.relayUrl,\n device_id: result.configuration.deviceId,\n roles: result.roles,\n workspaces: result.configuration.workspaces,\n skills: installedSkills,\n ...(service === undefined ? {} : { service }),\n next:\n service === undefined && !arguments_.options.has(\"client-only\")\n ? \"Run `cohall service install` for background availability, or `cohall device` now.\"\n : \"Run `cohall doctor` to verify this device.\",\n })\n } finally {\n prompter.close()\n }\n return\n }\n\n if (command === \"service\") {\n allowOptions(arguments_, [])\n if (arguments_.positionals.length !== 1 || arguments_.positionals[0] !== \"install\") {\n throw new Error(\"Usage: cohall service install\")\n }\n print(await installDeviceService())\n return\n }\n\n if (command === \"relay\") {\n const action = arguments_.positionals[0]\n if (action === \"backup\") {\n allowOptions(arguments_, [])\n if (arguments_.positionals.length !== 2) {\n throw new Error(\"Usage: cohall relay backup <directory>\")\n }\n print(await backupRelay(arguments_.positionals[1] ?? \"\"))\n return\n }\n if (action === \"restore\") {\n allowOptions(arguments_, [])\n if (arguments_.positionals.length !== 2) {\n throw new Error(\"Usage: cohall relay restore <directory>\")\n }\n print(await restoreRelay(arguments_.positionals[1] ?? \"\"))\n return\n }\n if (action === \"use\") {\n allowOptions(arguments_, [\"allow-http\", \"no-restart\"])\n if (arguments_.positionals.length !== 2) {\n throw new Error(\"Usage: cohall relay use <url> [--no-restart] [--allow-http]\")\n }\n print(\n await switchRelay({\n relayUrl: arguments_.positionals[1] ?? \"\",\n restart: !arguments_.options.has(\"no-restart\"),\n allowHttp: arguments_.options.has(\"allow-http\"),\n }),\n )\n return\n }\n throw new Error(\n \"Usage: cohall relay [backup <directory>|restore <directory>|use <url> [--no-restart] [--allow-http]]\",\n )\n }\n\n if (command === \"upgrade\") {\n allowOptions(arguments_, [\"all\", \"dry-run\", \"no-restart\", \"to\"])\n noPositionals(arguments_, command)\n const target = option(arguments_, \"to\")\n if (arguments_.options.has(\"all\")) {\n const normalizedTarget = normalizeUpgradeTarget(target)\n const { relay } = await ownerClient()\n const restart = !arguments_.options.has(\"no-restart\")\n if (arguments_.options.has(\"dry-run\")) {\n const devices = await Effect.runPromise(relay.devices())\n print({\n dry_run: true,\n requested_version: normalizedTarget,\n restart,\n devices: devices.map((device) => ({ id: device.id, name: device.name })),\n })\n return\n }\n const operations = await Effect.runPromise(\n relay.createUpgradeOperations({ target: normalizedTarget, restart }),\n )\n print({\n queued: operations.length,\n requested_version: normalizedTarget,\n restart,\n operations,\n next: \"Run `cohall upgrades` to inspect progress.\",\n })\n return\n }\n print(\n await upgrade({\n currentVersion: version,\n ...(target === undefined ? {} : { target }),\n restart: !arguments_.options.has(\"no-restart\"),\n dryRun: arguments_.options.has(\"dry-run\"),\n delegated: process.env.COHALL_PROVIDER !== undefined,\n }),\n )\n return\n }\n\n if (command === \"upgrades\") {\n allowOptions(arguments_, [])\n const { relay } = await ownerClient()\n if (arguments_.positionals.length > 0) {\n if (arguments_.positionals.length !== 2 || arguments_.positionals[0] !== \"abandon\") {\n throw new Error(\"Usage: cohall upgrades [abandon <operation-id>]\")\n }\n print(\n await Effect.runPromise(\n relay.abandonOperation(Schema.decodeUnknownSync(OperationId)(arguments_.positionals[1])),\n ),\n )\n return\n }\n print(await Effect.runPromise(relay.operations()))\n return\n }\n\n if (command === \"join\") {\n allowOptions(arguments_, [\n \"client-only\",\n \"name\",\n \"providers\",\n \"relay\",\n \"token-file\",\n \"workspace\",\n ])\n noPositionals(arguments_, command)\n const token = await pairingToken(arguments_)\n const relayUrl = normalizeRelayUrl(option(arguments_, \"relay\") ?? \"http://127.0.0.1:8787\")\n const existing = await readStoredConfiguration()\n const suppliedWorkspaces = values(arguments_, \"workspace\")\n const workspaces = suppliedWorkspaces.length === 0 ? existing?.workspaces : suppliedWorkspaces\n const deviceName = option(arguments_, \"name\")\n const providerInput = option(arguments_, \"providers\")\n const providers =\n providerInput === undefined\n ? undefined\n : providerInput === \"auto\"\n ? \"auto\"\n : parseProviders(providerInput)\n if (!arguments_.options.has(\"client-only\") && (workspaces?.length ?? 0) === 0) {\n throw new Error(\"At least one --workspace is required when joining a device\")\n }\n const clientOnly = arguments_.options.has(\"client-only\")\n const { configuration, roles } = await joinRelay({\n relayUrl,\n token,\n clientOnly,\n ...(deviceName === undefined ? {} : { deviceName }),\n ...(workspaces === undefined ? {} : { workspaces }),\n ...(providers === undefined ? {} : { providers }),\n })\n print({\n configured: true,\n config_path: configurationPath(),\n relay_url: configuration.relayUrl,\n device_id: configuration.deviceId,\n roles,\n workspaces: configuration.workspaces,\n })\n return\n }\n\n if (command === \"config\") {\n allowOptions(arguments_, [])\n noPositionals(arguments_, command)\n const configuration = await readStoredConfiguration()\n print({\n config_path: configurationPath(),\n configured: configuration !== undefined,\n ...(configuration === undefined\n ? {}\n : {\n relay_url: configuration.relayUrl,\n device_id: configuration.deviceId,\n device_name: configuration.deviceName,\n workspaces: configuration.workspaces,\n client_credential: configuration.clientToken !== undefined,\n device_credential: configuration.deviceToken !== undefined,\n providers: configuration.providers ?? \"auto\",\n model: configuration.model,\n sandbox: configuration.sandbox,\n }),\n })\n return\n }\n\n if (command === \"configure\") {\n allowOptions(arguments_, [\"model\", \"name\", \"providers\", \"relay\", \"sandbox\", \"workspace\"])\n noPositionals(arguments_, command)\n const existing = await readStoredConfiguration()\n const relayUrl = normalizeRelayUrl(\n option(arguments_, \"relay\") ?? existing?.relayUrl ?? \"http://127.0.0.1:8787\",\n )\n const supplied = values(arguments_, \"workspace\")\n const workspaces =\n supplied.length === 0\n ? (existing?.workspaces ?? [])\n : await Effect.runPromise(parseWorkspaces(\"\", JSON.stringify(supplied)))\n const sandbox = option(arguments_, \"sandbox\")\n const model = option(arguments_, \"model\") ?? existing?.model\n const providerInput = option(arguments_, \"providers\")\n const providers =\n providerInput === undefined\n ? existing?.providers\n : providerInput === \"auto\"\n ? undefined\n : parseProviders(providerInput)\n const configuration = StoredConfiguration.make({\n version: 1,\n relayUrl,\n deviceId: existing?.deviceId ?? makeDeviceId(),\n deviceName: option(arguments_, \"name\") ?? existing?.deviceName ?? \"cohall-device\",\n workspaces,\n ...credentialsForRelay(existing, relayUrl),\n ...(providers === undefined ? {} : { providers }),\n ...(model === undefined ? {} : { model }),\n ...((sandbox ?? existing?.sandbox) === undefined\n ? {}\n : {\n sandbox: Schema.decodeUnknownSync(\n Schema.Literals([\"read-only\", \"workspace-write\", \"danger-full-access\"]),\n )(sandbox ?? existing?.sandbox),\n }),\n })\n await writeStoredConfiguration(configuration)\n print({ configured: true, config_path: configurationPath() })\n return\n }\n\n if (command === \"skill\") {\n allowOptions(arguments_, [])\n if (arguments_.positionals.length === 0) {\n printSkill()\n return\n }\n if (arguments_.positionals[0] !== \"install\" || arguments_.positionals.length > 2) {\n throw new Error(\"Usage: cohall skill [install [agents|claude|opencode|all]]\")\n }\n print({ installed: await installSkill(arguments_.positionals[1] ?? \"all\") })\n return\n }\n\n if (command === \"integrations\") {\n allowOptions(arguments_, [])\n noPositionals(arguments_, command)\n print({\n cli_skill: \"npx -y @akshar5/cohall skill install all\",\n codex_mcp: \"codex mcp add cohall -- npx -y @akshar5/cohall mcp\",\n claude_mcp:\n \"claude mcp add --transport stdio --scope user cohall -- npx -y @akshar5/cohall mcp\",\n stdio_config: {\n command: \"npx\",\n args: [\"-y\", \"@akshar5/cohall\", \"mcp\"],\n },\n opencode_mcp: {\n type: \"local\",\n command: [\"npx\", \"-y\", \"@akshar5/cohall\", \"mcp\"],\n enabled: true,\n },\n })\n return\n }\n\n if (command === \"doctor\") {\n allowOptions(arguments_, [\"all\"])\n noPositionals(arguments_, command)\n if (arguments_.options.has(\"all\")) {\n const { relay } = await client()\n print(allDeviceHealth(await Effect.runPromise(relay.devices()), version))\n return\n }\n const configuration = await readStoredConfiguration()\n const relayUrl = normalizeRelayUrl(\n process.env.COHALL_RELAY_URL ?? configuration?.relayUrl ?? \"http://127.0.0.1:8787\",\n )\n const storedCredentials = credentialsForRelay(configuration, relayUrl)\n const response = await fetch(`${relayUrl}/api/health`, {\n signal: AbortSignal.timeout(10_000),\n }).catch(() => undefined)\n const providerInput = process.env.COHALL_DEVICE_PROVIDERS\n const selectedProviders =\n providerInput === undefined\n ? configuration?.providers\n : providerInput === \"auto\"\n ? undefined\n : parseProviders(providerInput)\n const providerExecutables = Object.fromEntries(\n Provider.literals.map((provider) => [\n provider,\n Providers.findExecutable(provider === \"claude-code\" ? \"claude\" : provider) ?? \"not found\",\n ]),\n )\n const clientToken = process.env.COHALL_CLIENT_TOKEN ?? storedCredentials.clientToken\n const hasDeviceCredential =\n process.env.COHALL_DEVICE_TOKEN !== undefined || storedCredentials.deviceToken !== undefined\n const deviceId = process.env.COHALL_DEVICE_ID ?? configuration?.deviceId\n const currentDevice =\n response?.ok !== true || clientToken === undefined || deviceId === undefined\n ? undefined\n : await Effect.runPromise(\n RelayClient.make({ baseUrl: relayUrl, token: clientToken }).devices(),\n )\n .then((devices) => devices.find((device) => device.id === deviceId))\n .catch(() => undefined)\n const versionWarning = deviceVersionWarning(version, currentDevice?.version)\n const warnings = [\n ...(response?.ok === true ? [] : [\"Relay is unreachable\"]),\n ...(versionWarning === undefined ? [] : [versionWarning]),\n ...(hasDeviceCredential &&\n response?.ok === true &&\n currentDevice?.status !== \"online\" &&\n currentDevice?.status !== \"busy\"\n ? [\n clientToken === undefined\n ? \"Device status cannot be checked without a client credential\"\n : \"Device daemon is not connected or is not registered with the relay\",\n ]\n : []),\n ...(selectedProviders?.flatMap((provider) =>\n providerExecutables[provider] === \"not found\"\n ? [`Configured provider ${provider} is not installed or not on PATH`]\n : [],\n ) ?? []),\n ]\n print({\n version,\n relay: response?.ok === true ? \"reachable\" : \"unreachable\",\n relay_url: relayUrl,\n config_path: configurationPath(),\n client_credential:\n process.env.COHALL_CLIENT_TOKEN !== undefined ||\n storedCredentials.clientToken !== undefined,\n device_credential: hasDeviceCredential,\n workspaces: configuration?.workspaces ?? [],\n providers: providerExecutables,\n provider_selection: selectedProviders ?? \"auto\",\n provider_authentication: \"checked when delegated work starts\",\n device_status:\n hasDeviceCredential === false ? \"not configured\" : (currentDevice?.status ?? \"unknown\"),\n device_version: currentDevice?.version,\n warnings,\n })\n return\n }\n\n if (command === \"versions\") {\n allowOptions(arguments_, [])\n noPositionals(arguments_, command)\n const { relay } = await client()\n print(deviceVersions(await Effect.runPromise(relay.devices()), version))\n return\n }\n\n if (command === \"usage\") {\n allowOptions(arguments_, [])\n noPositionals(arguments_, command)\n const { relay } = await client()\n print({\n ...(await Effect.runPromise(relay.usage())),\n scope: \"Retained Cohall task activity; provider token and billing usage are not available.\",\n })\n return\n }\n\n if (\n command === \"pair\" ||\n command === \"sessions\" ||\n command === \"revoke\" ||\n command === \"forget\"\n ) {\n const { configuration, relay } = await ownerClient()\n if (command === \"pair\") {\n allowOptions(arguments_, [\"client-only\", \"label\"])\n noPositionals(arguments_, command)\n const roles = arguments_.options.has(\"client-only\")\n ? ([\"client\"] as const)\n : ([\"client\", \"device\"] as const)\n const credential = await Effect.runPromise(\n relay.createPairing({ label: option(arguments_, \"label\") ?? \"Cohall device\", roles }),\n )\n print({\n relay_url: configuration.relayUrl,\n pairing_token: credential.token,\n expires_at: credential.expiresAt,\n roles,\n })\n return\n }\n if (command === \"sessions\") {\n allowOptions(arguments_, [])\n noPositionals(arguments_, command)\n print(await Effect.runPromise(relay.authSessions()))\n return\n }\n if (command === \"forget\") {\n allowOptions(arguments_, [])\n print(\n await Effect.runPromise(\n relay.forgetDevice(\n Schema.decodeUnknownSync(DeviceId)(identifier(arguments_, \"device id\")),\n ),\n ),\n )\n return\n }\n allowOptions(arguments_, [])\n print(\n await Effect.runPromise(\n relay.revokeAuthSession(\n Schema.decodeUnknownSync(AuthSessionId)(identifier(arguments_, \"session id\")),\n ),\n ),\n )\n return\n }\n\n const { configuration, relay } = await client()\n if (command === \"devices\") {\n allowOptions(arguments_, [])\n noPositionals(arguments_, command)\n print(await Effect.runPromise(relay.devices()))\n return\n }\n if (command === \"delegate\") {\n allowOptions(arguments_, [\n \"context\",\n \"context-file\",\n \"no-wait\",\n \"prompt\",\n \"prompt-file\",\n \"provider\",\n \"target\",\n \"thread\",\n \"timeout\",\n \"workspace\",\n ])\n if (option(arguments_, \"prompt\") === \"-\" && option(arguments_, \"context\") === \"-\") {\n throw new Error(\"Only one of --prompt and --context may read from stdin\")\n }\n const suppliedPrompt = await readInput(arguments_, \"prompt\")\n const prompt = suppliedPrompt ?? arguments_.positionals.join(\" \")\n if (prompt.trim().length === 0) {\n throw new Error(\"A prompt is required\")\n }\n if (suppliedPrompt !== undefined && arguments_.positionals.length > 0) {\n throw new Error(\"Use either a positional prompt or --prompt, not both\")\n }\n const context = await readInput(arguments_, \"context\")\n const target = option(arguments_, \"target\")\n const thread = option(arguments_, \"thread\")\n const workspace = option(arguments_, \"workspace\")\n const provider = option(arguments_, \"provider\")\n const task = await Effect.runPromise(\n createDelegation(relay, configuration, {\n prompt,\n ...(target === undefined ? {} : { target }),\n ...(context === undefined ? {} : { context }),\n ...(thread === undefined ? {} : { threadId: Schema.decodeUnknownSync(ThreadId)(thread) }),\n ...(workspace === undefined ? {} : { workspace }),\n ...(provider === undefined\n ? {}\n : { provider: Schema.decodeUnknownSync(Provider)(provider) }),\n }),\n )\n print(\n taskResult(\n arguments_.options.has(\"no-wait\")\n ? task\n : await Effect.runPromise(waitForTask(relay, task, timeout(arguments_))),\n ),\n )\n return\n }\n if (command === \"status\") {\n allowOptions(arguments_, [])\n const id = Schema.decodeUnknownSync(TaskId)(identifier(arguments_, \"task id\"))\n print(taskResult(await Effect.runPromise(relay.getTask(id))))\n return\n }\n if (command === \"trace\") {\n allowOptions(arguments_, [\"follow\"])\n const id = Schema.decodeUnknownSync(TaskId)(identifier(arguments_, \"task id\"))\n if (arguments_.options.has(\"follow\")) {\n await Effect.runPromise(followTaskTrace(relay, id, printLine))\n return\n }\n print(await Effect.runPromise(relay.traceTask(id)))\n return\n }\n if (command === \"wait\") {\n allowOptions(arguments_, [\"timeout\"])\n const id = Schema.decodeUnknownSync(TaskId)(identifier(arguments_, \"task id\"))\n const task = await Effect.runPromise(relay.getTask(id))\n print(taskResult(await Effect.runPromise(waitForTask(relay, task, timeout(arguments_)))))\n return\n }\n if (command === \"cancel\") {\n allowOptions(arguments_, [])\n const id = Schema.decodeUnknownSync(TaskId)(identifier(arguments_, \"task id\"))\n print(taskResult(await Effect.runPromise(relay.cancelTask(id))))\n return\n }\n if (command === \"thread\") {\n allowOptions(arguments_, [])\n const id = Schema.decodeUnknownSync(ThreadId)(identifier(arguments_, \"thread id\"))\n print(await Effect.runPromise(threadContext(relay, id)))\n return\n }\n throw new Error(`Unknown Cohall command: ${command}`)\n}\n",
13
+ "import { RelayClient } from \"@cohall/client\"\nimport {\n AuthSessionId,\n DeviceId,\n OperationId,\n Provider,\n TaskId,\n ThreadId,\n assertDeviceOperationSupport,\n makeDeviceId,\n version,\n} from \"@cohall/protocol\"\nimport * as Providers from \"@cohall/providers\"\nimport { Effect, Schema } from \"effect\"\nimport { access, mkdir, readFile, stat, writeFile } from \"node:fs/promises\"\nimport { homedir } from \"node:os\"\nimport { dirname, join } from \"node:path\"\nimport skill from \"../../../skills/cohall/SKILL.md\" with { type: \"text\" }\nimport {\n StoredConfiguration,\n configurationPath,\n credentialsForRelay,\n loadClientConfiguration,\n loadOwnerConfiguration,\n makeStoredConfiguration,\n normalizeRelayUrl,\n parseProviders,\n parseWorkspaces,\n readStoredConfiguration,\n writeStoredConfiguration,\n} from \"./config.ts\"\nimport {\n createDelegation,\n followTaskTrace,\n taskResult,\n threadContext,\n waitForTask,\n} from \"./delegation.ts\"\nimport { allDeviceHealth, deviceVersions } from \"./device-overview.ts\"\nimport { guidedSetupInput, joinRelay, terminalPrompter, type Prompter } from \"./setup.ts\"\nimport { backupRelay, restoreRelay, switchRelay } from \"./relay-migration.ts\"\nimport { installDeviceService } from \"./service.ts\"\nimport { deviceVersionWarning, normalizeUpgradeTarget, upgrade } from \"./upgrade.ts\"\n\ninterface Arguments {\n readonly options: ReadonlyMap<string, ReadonlyArray<string> | true>\n readonly positionals: ReadonlyArray<string>\n}\n\nconst valueOptions = new Set([\n \"context\",\n \"context-file\",\n \"label\",\n \"model\",\n \"name\",\n \"prompt\",\n \"prompt-file\",\n \"provider\",\n \"providers\",\n \"relay\",\n \"sandbox\",\n \"target\",\n \"thread\",\n \"timeout\",\n \"token-file\",\n \"to\",\n \"workspace\",\n])\nconst flagOptions = new Set([\n \"all\",\n \"allow-http\",\n \"client-only\",\n \"dry-run\",\n \"follow\",\n \"no-restart\",\n \"no-wait\",\n \"service\",\n])\nconst aliases = new Map([\n [\"-c\", \"context\"],\n [\"-p\", \"prompt\"],\n [\"-t\", \"target\"],\n [\"-T\", \"thread\"],\n [\"-w\", \"workspace\"],\n])\n\nconst help = `Cohall connects agents running on your own devices.\n\nUsage:\n cohall init [--relay url] [--workspace path] [--providers list] [--service]\n cohall join --relay <url> --workspace <path> [--providers list] [--token-file <path>]\n cohall configure [--relay url] [--name name] [--workspace path]\n [--providers codex,opencode|auto] [--model id]\n cohall config\n cohall devices\n cohall delegate [prompt] [--target @device] [--provider provider]\n [--context text] [--thread uuid] [--workspace path]\n [--timeout seconds] [--no-wait]\n cohall status <task-id>\n cohall trace <task-id> [--follow]\n cohall wait <task-id> [--timeout seconds]\n cohall cancel <task-id>\n cohall thread <thread-id>\n cohall pair [--label name] [--client-only]\n cohall sessions\n cohall revoke <session-id>\n cohall forget <device-id>\n cohall doctor [--all]\n cohall versions\n cohall usage\n cohall upgrade [--to version|latest] [--no-restart] [--dry-run]\n cohall upgrade --all [--to version|latest] [--no-restart] [--dry-run]\n cohall upgrades [abandon <operation-id>]\n cohall service install\n cohall device\n cohall relay\n cohall relay backup <directory>\n cohall relay restore <directory>\n cohall relay use <url> [--no-restart] [--allow-http]\n cohall mcp\n cohall skill [install [agents|claude|opencode|all]]\n cohall integrations\n\nProviders: codex, claude-code, opencode.\nConfiguration is stored per user; environment variables override it.`\n\nconst parseArguments = (values: ReadonlyArray<string>): Arguments => {\n const options = new Map<string, ReadonlyArray<string> | true>()\n const positionals: Array<string> = []\n for (let index = 0; index < values.length; index += 1) {\n const argument = values[index]\n if (argument === undefined) {\n break\n }\n if (argument === \"--\") {\n positionals.push(...values.slice(index + 1))\n break\n }\n if (!argument.startsWith(\"-\")) {\n positionals.push(argument)\n continue\n }\n const separator = argument.indexOf(\"=\")\n const rawName = separator === -1 ? argument : argument.slice(0, separator)\n const inline = separator === -1 ? undefined : argument.slice(separator + 1)\n const name = aliases.get(rawName) ?? rawName.replace(/^--/, \"\")\n if (flagOptions.has(name)) {\n if (inline !== undefined) {\n throw new Error(`--${name} does not accept a value`)\n }\n options.set(name, true)\n continue\n }\n if (!valueOptions.has(name)) {\n throw new Error(`Unknown option: ${argument}`)\n }\n const value = inline ?? values[index + 1]\n if (value === undefined || (inline === undefined && value.startsWith(\"-\") && value !== \"-\")) {\n throw new Error(`${rawName} requires a value`)\n }\n const previous = options.get(name)\n options.set(name, previous === undefined || previous === true ? [value] : [...previous, value])\n if (inline === undefined) {\n index += 1\n }\n }\n return { options, positionals }\n}\n\nconst values = (arguments_: Arguments, name: string): ReadonlyArray<string> => {\n const option = arguments_.options.get(name)\n if (option === true) {\n throw new Error(`--${name} requires a value`)\n }\n return option ?? []\n}\nconst option = (arguments_: Arguments, name: string): string | undefined => {\n const found = values(arguments_, name)\n if (found.length > 1 && name !== \"workspace\") {\n throw new Error(`--${name} may only be specified once`)\n }\n return found[0]\n}\nconst allowOptions = (arguments_: Arguments, names: ReadonlyArray<string>): void => {\n const allowed = new Set(names)\n for (const name of arguments_.options.keys()) {\n if (!allowed.has(name)) {\n throw new Error(`--${name} is not valid for this command`)\n }\n }\n}\nconst noPositionals = (arguments_: Arguments, command: string): void => {\n if (arguments_.positionals.length > 0) {\n throw new Error(`${command} does not accept positional arguments`)\n }\n}\nconst identifier = (arguments_: Arguments, label: string): string => {\n const value = arguments_.positionals[0]\n if (value === undefined) {\n throw new Error(`${label} is required`)\n }\n if (arguments_.positionals.length > 1) {\n throw new Error(`Unexpected arguments after ${label}`)\n }\n return value\n}\nconst print = (value: unknown): void => console.log(JSON.stringify(value, null, 2))\nconst printLine = (value: unknown): void => console.log(JSON.stringify(value))\n\nconst readInput = async (\n arguments_: Arguments,\n name: \"prompt\" | \"context\",\n): Promise<string | undefined> => {\n const direct = option(arguments_, name)\n const path = option(arguments_, `${name}-file`)\n if (direct !== undefined && path !== undefined) {\n throw new Error(`Use either --${name} or --${name}-file, not both`)\n }\n if (path !== undefined) {\n if (\n !(await access(path)\n .then(() => true)\n .catch(() => false))\n ) {\n throw new Error(`File does not exist: ${path}`)\n }\n if ((await stat(path)).size > 131_072) {\n throw new Error(`${name} file exceeds 128 KiB`)\n }\n return readFile(path, \"utf8\")\n }\n const result = direct === \"-\" ? await readStdin(131_072, name) : direct\n if (result !== undefined && result.length > 131_072) {\n throw new Error(`${name} exceeds 128 KiB`)\n }\n return result\n}\n\nconst readStdin = async (limit: number, label: string): Promise<string> => {\n const chunks: Array<Buffer> = []\n let size = 0\n for await (const chunk of process.stdin) {\n const bytes = typeof chunk === \"string\" ? Buffer.from(chunk) : Buffer.from(chunk)\n size += bytes.byteLength\n if (size > limit) {\n throw new Error(`${label} exceeds ${Math.floor(limit / 1024)} KiB`)\n }\n chunks.push(bytes)\n }\n return Buffer.concat(chunks, size).toString(\"utf8\")\n}\n\nconst timeout = (arguments_: Arguments): number => {\n const seconds = Number(option(arguments_, \"timeout\") ?? \"900\")\n if (!Number.isInteger(seconds) || seconds < 5 || seconds > 86_400) {\n throw new Error(\"--timeout must be an integer between 5 and 86400\")\n }\n return seconds\n}\n\nconst pairingToken = async (arguments_: Arguments): Promise<string> => {\n const path = option(arguments_, \"token-file\")\n if (\n path !== undefined &&\n !(await access(path)\n .then(() => true)\n .catch(() => false))\n ) {\n throw new Error(`Pairing token file does not exist: ${path}`)\n }\n if (path !== undefined && (await stat(path)).size > 512) {\n throw new Error(\"Pairing token file exceeds 512 bytes\")\n }\n const token = (\n path === undefined ? await readStdin(512, \"Pairing token\") : await readFile(path, \"utf8\")\n ).trim()\n if (token.length === 0 || new TextEncoder().encode(token).byteLength > 256) {\n throw new Error(\"Provide a pairing token on stdin or with --token-file\")\n }\n return token\n}\n\nconst client = async () => {\n const configuration = await Effect.runPromise(loadClientConfiguration)\n return {\n configuration,\n relay: RelayClient.make({ baseUrl: configuration.relayUrl, token: configuration.token }),\n }\n}\n\nconst ownerClient = async () => {\n const configuration = await Effect.runPromise(loadOwnerConfiguration)\n return {\n configuration,\n relay: RelayClient.make({ baseUrl: configuration.relayUrl, token: configuration.token }),\n }\n}\n\nconst installSkill = async (target: string): Promise<ReadonlyArray<string>> => {\n const roots = {\n agents: join(homedir(), \".agents\", \"skills\", \"cohall\", \"SKILL.md\"),\n claude: join(homedir(), \".claude\", \"skills\", \"cohall\", \"SKILL.md\"),\n opencode: join(homedir(), \".config\", \"opencode\", \"skills\", \"cohall\", \"SKILL.md\"),\n } as const\n const selected =\n target === \"all\"\n ? Object.values(roots)\n : target in roots\n ? [roots[target as keyof typeof roots]]\n : undefined\n if (selected === undefined) {\n throw new Error(\"Skill target must be agents, claude, opencode, or all\")\n }\n for (const path of selected) {\n await mkdir(dirname(path), { recursive: true })\n await writeFile(path, skill)\n }\n return selected\n}\n\nexport const printHelp = (): void => console.log(help)\nexport const printSkill = (): void => console.log(skill.trimEnd())\n\nexport const runCli = async (command: string, raw: ReadonlyArray<string>): Promise<void> => {\n const arguments_ = parseArguments(raw)\n\n if (command === \"init\") {\n allowOptions(arguments_, [\n \"client-only\",\n \"name\",\n \"providers\",\n \"relay\",\n \"service\",\n \"token-file\",\n \"workspace\",\n ])\n noPositionals(arguments_, command)\n const token =\n option(arguments_, \"token-file\") === undefined ? undefined : await pairingToken(arguments_)\n const interactive = process.stdin.isTTY === true && process.stderr.isTTY === true\n const relayUrl = option(arguments_, \"relay\")\n const deviceName = option(arguments_, \"name\")\n const providerInput = option(arguments_, \"providers\")\n const prompter: Prompter = interactive\n ? terminalPrompter()\n : {\n answer: (_label, fallback) => Promise.resolve(fallback),\n secret: () => pairingToken(arguments_),\n close: () => undefined,\n }\n try {\n const input = await guidedSetupInput(\n {\n clientOnly: arguments_.options.has(\"client-only\"),\n workspaces: values(arguments_, \"workspace\"),\n cwd: process.cwd(),\n ...(relayUrl === undefined ? {} : { relayUrl }),\n ...(token === undefined ? {} : { token }),\n ...(deviceName === undefined ? {} : { deviceName }),\n ...(providerInput === undefined ? {} : { providers: providerInput }),\n },\n prompter,\n )\n const providers = input.providers === \"auto\" ? \"auto\" : parseProviders(input.providers)\n const existing = await readStoredConfiguration()\n const result = input.reusedConfiguration\n ? {\n configuration: await makeStoredConfiguration({\n relayUrl: input.relayUrl,\n ...(input.deviceName === undefined ? {} : { deviceName: input.deviceName }),\n workspaces: input.workspaces,\n providers,\n }),\n roles: [\n ...(existing?.clientToken === undefined ? [] : ([\"client\"] as const)),\n ...(arguments_.options.has(\"client-only\") || existing?.deviceToken === undefined\n ? []\n : ([\"device\"] as const)),\n ],\n }\n : await joinRelay({\n relayUrl: input.relayUrl,\n token: input.token ?? \"\",\n clientOnly: arguments_.options.has(\"client-only\"),\n ...(input.deviceName === undefined ? {} : { deviceName: input.deviceName }),\n workspaces: input.workspaces,\n providers,\n })\n if (input.reusedConfiguration) {\n await writeStoredConfiguration(result.configuration)\n }\n const installedSkills = await installSkill(\"all\")\n const service = arguments_.options.has(\"service\") ? await installDeviceService() : undefined\n print({\n initialized: true,\n reused_configuration: input.reusedConfiguration,\n config_path: configurationPath(),\n relay_url: result.configuration.relayUrl,\n device_id: result.configuration.deviceId,\n roles: result.roles,\n workspaces: result.configuration.workspaces,\n skills: installedSkills,\n ...(service === undefined ? {} : { service }),\n next:\n service === undefined && !arguments_.options.has(\"client-only\")\n ? \"Run `cohall service install` for background availability, or `cohall device` now.\"\n : \"Run `cohall doctor` to verify this device.\",\n })\n } finally {\n prompter.close()\n }\n return\n }\n\n if (command === \"service\") {\n allowOptions(arguments_, [])\n if (arguments_.positionals.length !== 1 || arguments_.positionals[0] !== \"install\") {\n throw new Error(\"Usage: cohall service install\")\n }\n print(await installDeviceService())\n return\n }\n\n if (command === \"relay\") {\n const action = arguments_.positionals[0]\n if (action === \"backup\") {\n allowOptions(arguments_, [])\n if (arguments_.positionals.length !== 2) {\n throw new Error(\"Usage: cohall relay backup <directory>\")\n }\n print(await backupRelay(arguments_.positionals[1] ?? \"\"))\n return\n }\n if (action === \"restore\") {\n allowOptions(arguments_, [])\n if (arguments_.positionals.length !== 2) {\n throw new Error(\"Usage: cohall relay restore <directory>\")\n }\n print(await restoreRelay(arguments_.positionals[1] ?? \"\"))\n return\n }\n if (action === \"use\") {\n allowOptions(arguments_, [\"allow-http\", \"no-restart\"])\n if (arguments_.positionals.length !== 2) {\n throw new Error(\"Usage: cohall relay use <url> [--no-restart] [--allow-http]\")\n }\n print(\n await switchRelay({\n relayUrl: arguments_.positionals[1] ?? \"\",\n restart: !arguments_.options.has(\"no-restart\"),\n allowHttp: arguments_.options.has(\"allow-http\"),\n }),\n )\n return\n }\n throw new Error(\n \"Usage: cohall relay [backup <directory>|restore <directory>|use <url> [--no-restart] [--allow-http]]\",\n )\n }\n\n if (command === \"upgrade\") {\n allowOptions(arguments_, [\"all\", \"dry-run\", \"no-restart\", \"to\"])\n noPositionals(arguments_, command)\n const target = option(arguments_, \"to\")\n if (arguments_.options.has(\"all\")) {\n const normalizedTarget = normalizeUpgradeTarget(target)\n const { relay } = await ownerClient()\n const restart = !arguments_.options.has(\"no-restart\")\n if (arguments_.options.has(\"dry-run\")) {\n const devices = await Effect.runPromise(relay.devices())\n assertDeviceOperationSupport(devices)\n print({\n dry_run: true,\n requested_version: normalizedTarget,\n restart,\n devices: devices.map((device) => ({ id: device.id, name: device.name })),\n })\n return\n }\n const operations = await Effect.runPromise(\n relay.createUpgradeOperations({ target: normalizedTarget, restart }),\n )\n print({\n queued: operations.length,\n requested_version: normalizedTarget,\n restart,\n operations,\n next: \"Run `cohall upgrades` to inspect progress.\",\n })\n return\n }\n print(\n await upgrade({\n currentVersion: version,\n ...(target === undefined ? {} : { target }),\n restart: !arguments_.options.has(\"no-restart\"),\n dryRun: arguments_.options.has(\"dry-run\"),\n delegated: process.env.COHALL_PROVIDER !== undefined,\n }),\n )\n return\n }\n\n if (command === \"upgrades\") {\n allowOptions(arguments_, [])\n const { relay } = await ownerClient()\n if (arguments_.positionals.length > 0) {\n if (arguments_.positionals.length !== 2 || arguments_.positionals[0] !== \"abandon\") {\n throw new Error(\"Usage: cohall upgrades [abandon <operation-id>]\")\n }\n print(\n await Effect.runPromise(\n relay.abandonOperation(Schema.decodeUnknownSync(OperationId)(arguments_.positionals[1])),\n ),\n )\n return\n }\n print(await Effect.runPromise(relay.operations()))\n return\n }\n\n if (command === \"join\") {\n allowOptions(arguments_, [\n \"client-only\",\n \"name\",\n \"providers\",\n \"relay\",\n \"token-file\",\n \"workspace\",\n ])\n noPositionals(arguments_, command)\n const token = await pairingToken(arguments_)\n const relayUrl = normalizeRelayUrl(option(arguments_, \"relay\") ?? \"http://127.0.0.1:8787\")\n const existing = await readStoredConfiguration()\n const suppliedWorkspaces = values(arguments_, \"workspace\")\n const workspaces = suppliedWorkspaces.length === 0 ? existing?.workspaces : suppliedWorkspaces\n const deviceName = option(arguments_, \"name\")\n const providerInput = option(arguments_, \"providers\")\n const providers =\n providerInput === undefined\n ? undefined\n : providerInput === \"auto\"\n ? \"auto\"\n : parseProviders(providerInput)\n if (!arguments_.options.has(\"client-only\") && (workspaces?.length ?? 0) === 0) {\n throw new Error(\"At least one --workspace is required when joining a device\")\n }\n const clientOnly = arguments_.options.has(\"client-only\")\n const { configuration, roles } = await joinRelay({\n relayUrl,\n token,\n clientOnly,\n ...(deviceName === undefined ? {} : { deviceName }),\n ...(workspaces === undefined ? {} : { workspaces }),\n ...(providers === undefined ? {} : { providers }),\n })\n print({\n configured: true,\n config_path: configurationPath(),\n relay_url: configuration.relayUrl,\n device_id: configuration.deviceId,\n roles,\n workspaces: configuration.workspaces,\n })\n return\n }\n\n if (command === \"config\") {\n allowOptions(arguments_, [])\n noPositionals(arguments_, command)\n const configuration = await readStoredConfiguration()\n print({\n config_path: configurationPath(),\n configured: configuration !== undefined,\n ...(configuration === undefined\n ? {}\n : {\n relay_url: configuration.relayUrl,\n device_id: configuration.deviceId,\n device_name: configuration.deviceName,\n workspaces: configuration.workspaces,\n client_credential: configuration.clientToken !== undefined,\n device_credential: configuration.deviceToken !== undefined,\n providers: configuration.providers ?? \"auto\",\n model: configuration.model,\n sandbox: configuration.sandbox,\n }),\n })\n return\n }\n\n if (command === \"configure\") {\n allowOptions(arguments_, [\"model\", \"name\", \"providers\", \"relay\", \"sandbox\", \"workspace\"])\n noPositionals(arguments_, command)\n const existing = await readStoredConfiguration()\n const relayUrl = normalizeRelayUrl(\n option(arguments_, \"relay\") ?? existing?.relayUrl ?? \"http://127.0.0.1:8787\",\n )\n const supplied = values(arguments_, \"workspace\")\n const workspaces =\n supplied.length === 0\n ? (existing?.workspaces ?? [])\n : await Effect.runPromise(parseWorkspaces(\"\", JSON.stringify(supplied)))\n const sandbox = option(arguments_, \"sandbox\")\n const model = option(arguments_, \"model\") ?? existing?.model\n const providerInput = option(arguments_, \"providers\")\n const providers =\n providerInput === undefined\n ? existing?.providers\n : providerInput === \"auto\"\n ? undefined\n : parseProviders(providerInput)\n const configuration = StoredConfiguration.make({\n version: 1,\n relayUrl,\n deviceId: existing?.deviceId ?? makeDeviceId(),\n deviceName: option(arguments_, \"name\") ?? existing?.deviceName ?? \"cohall-device\",\n workspaces,\n ...credentialsForRelay(existing, relayUrl),\n ...(providers === undefined ? {} : { providers }),\n ...(model === undefined ? {} : { model }),\n ...((sandbox ?? existing?.sandbox) === undefined\n ? {}\n : {\n sandbox: Schema.decodeUnknownSync(\n Schema.Literals([\"read-only\", \"workspace-write\", \"danger-full-access\"]),\n )(sandbox ?? existing?.sandbox),\n }),\n })\n await writeStoredConfiguration(configuration)\n print({ configured: true, config_path: configurationPath() })\n return\n }\n\n if (command === \"skill\") {\n allowOptions(arguments_, [])\n if (arguments_.positionals.length === 0) {\n printSkill()\n return\n }\n if (arguments_.positionals[0] !== \"install\" || arguments_.positionals.length > 2) {\n throw new Error(\"Usage: cohall skill [install [agents|claude|opencode|all]]\")\n }\n print({ installed: await installSkill(arguments_.positionals[1] ?? \"all\") })\n return\n }\n\n if (command === \"integrations\") {\n allowOptions(arguments_, [])\n noPositionals(arguments_, command)\n print({\n cli_skill: \"npx -y @akshar5/cohall skill install all\",\n codex_mcp: \"codex mcp add cohall -- npx -y @akshar5/cohall mcp\",\n claude_mcp:\n \"claude mcp add --transport stdio --scope user cohall -- npx -y @akshar5/cohall mcp\",\n stdio_config: {\n command: \"npx\",\n args: [\"-y\", \"@akshar5/cohall\", \"mcp\"],\n },\n opencode_mcp: {\n type: \"local\",\n command: [\"npx\", \"-y\", \"@akshar5/cohall\", \"mcp\"],\n enabled: true,\n },\n })\n return\n }\n\n if (command === \"doctor\") {\n allowOptions(arguments_, [\"all\"])\n noPositionals(arguments_, command)\n if (arguments_.options.has(\"all\")) {\n const { relay } = await client()\n print(allDeviceHealth(await Effect.runPromise(relay.devices()), version))\n return\n }\n const configuration = await readStoredConfiguration()\n const relayUrl = normalizeRelayUrl(\n process.env.COHALL_RELAY_URL ?? configuration?.relayUrl ?? \"http://127.0.0.1:8787\",\n )\n const storedCredentials = credentialsForRelay(configuration, relayUrl)\n const response = await fetch(`${relayUrl}/api/health`, {\n signal: AbortSignal.timeout(10_000),\n }).catch(() => undefined)\n const providerInput = process.env.COHALL_DEVICE_PROVIDERS\n const selectedProviders =\n providerInput === undefined\n ? configuration?.providers\n : providerInput === \"auto\"\n ? undefined\n : parseProviders(providerInput)\n const providerExecutables = Object.fromEntries(\n Provider.literals.map((provider) => [\n provider,\n Providers.findExecutable(provider === \"claude-code\" ? \"claude\" : provider) ?? \"not found\",\n ]),\n )\n const clientToken = process.env.COHALL_CLIENT_TOKEN ?? storedCredentials.clientToken\n const hasDeviceCredential =\n process.env.COHALL_DEVICE_TOKEN !== undefined || storedCredentials.deviceToken !== undefined\n const deviceId = process.env.COHALL_DEVICE_ID ?? configuration?.deviceId\n const currentDevice =\n response?.ok !== true || clientToken === undefined || deviceId === undefined\n ? undefined\n : await Effect.runPromise(\n RelayClient.make({ baseUrl: relayUrl, token: clientToken }).devices(),\n )\n .then((devices) => devices.find((device) => device.id === deviceId))\n .catch(() => undefined)\n const versionWarning = deviceVersionWarning(version, currentDevice?.version)\n const warnings = [\n ...(response?.ok === true ? [] : [\"Relay is unreachable\"]),\n ...(versionWarning === undefined ? [] : [versionWarning]),\n ...(hasDeviceCredential &&\n response?.ok === true &&\n currentDevice?.status !== \"online\" &&\n currentDevice?.status !== \"busy\"\n ? [\n clientToken === undefined\n ? \"Device status cannot be checked without a client credential\"\n : \"Device daemon is not connected or is not registered with the relay\",\n ]\n : []),\n ...(selectedProviders?.flatMap((provider) =>\n providerExecutables[provider] === \"not found\"\n ? [`Configured provider ${provider} is not installed or not on PATH`]\n : [],\n ) ?? []),\n ]\n print({\n version,\n relay: response?.ok === true ? \"reachable\" : \"unreachable\",\n relay_url: relayUrl,\n config_path: configurationPath(),\n client_credential:\n process.env.COHALL_CLIENT_TOKEN !== undefined ||\n storedCredentials.clientToken !== undefined,\n device_credential: hasDeviceCredential,\n workspaces: configuration?.workspaces ?? [],\n providers: providerExecutables,\n provider_selection: selectedProviders ?? \"auto\",\n provider_authentication: \"checked when delegated work starts\",\n device_status:\n hasDeviceCredential === false ? \"not configured\" : (currentDevice?.status ?? \"unknown\"),\n device_version: currentDevice?.version,\n warnings,\n })\n return\n }\n\n if (command === \"versions\") {\n allowOptions(arguments_, [])\n noPositionals(arguments_, command)\n const { relay } = await client()\n print(deviceVersions(await Effect.runPromise(relay.devices()), version))\n return\n }\n\n if (command === \"usage\") {\n allowOptions(arguments_, [])\n noPositionals(arguments_, command)\n const { relay } = await client()\n print({\n ...(await Effect.runPromise(relay.usage())),\n scope: \"Retained Cohall task activity; provider token and billing usage are not available.\",\n })\n return\n }\n\n if (\n command === \"pair\" ||\n command === \"sessions\" ||\n command === \"revoke\" ||\n command === \"forget\"\n ) {\n const { configuration, relay } = await ownerClient()\n if (command === \"pair\") {\n allowOptions(arguments_, [\"client-only\", \"label\"])\n noPositionals(arguments_, command)\n const roles = arguments_.options.has(\"client-only\")\n ? ([\"client\"] as const)\n : ([\"client\", \"device\"] as const)\n const credential = await Effect.runPromise(\n relay.createPairing({ label: option(arguments_, \"label\") ?? \"Cohall device\", roles }),\n )\n print({\n relay_url: configuration.relayUrl,\n pairing_token: credential.token,\n expires_at: credential.expiresAt,\n roles,\n })\n return\n }\n if (command === \"sessions\") {\n allowOptions(arguments_, [])\n noPositionals(arguments_, command)\n print(await Effect.runPromise(relay.authSessions()))\n return\n }\n if (command === \"forget\") {\n allowOptions(arguments_, [])\n print(\n await Effect.runPromise(\n relay.forgetDevice(\n Schema.decodeUnknownSync(DeviceId)(identifier(arguments_, \"device id\")),\n ),\n ),\n )\n return\n }\n allowOptions(arguments_, [])\n print(\n await Effect.runPromise(\n relay.revokeAuthSession(\n Schema.decodeUnknownSync(AuthSessionId)(identifier(arguments_, \"session id\")),\n ),\n ),\n )\n return\n }\n\n const { configuration, relay } = await client()\n if (command === \"devices\") {\n allowOptions(arguments_, [])\n noPositionals(arguments_, command)\n print(await Effect.runPromise(relay.devices()))\n return\n }\n if (command === \"delegate\") {\n allowOptions(arguments_, [\n \"context\",\n \"context-file\",\n \"no-wait\",\n \"prompt\",\n \"prompt-file\",\n \"provider\",\n \"target\",\n \"thread\",\n \"timeout\",\n \"workspace\",\n ])\n if (option(arguments_, \"prompt\") === \"-\" && option(arguments_, \"context\") === \"-\") {\n throw new Error(\"Only one of --prompt and --context may read from stdin\")\n }\n const suppliedPrompt = await readInput(arguments_, \"prompt\")\n const prompt = suppliedPrompt ?? arguments_.positionals.join(\" \")\n if (prompt.trim().length === 0) {\n throw new Error(\"A prompt is required\")\n }\n if (suppliedPrompt !== undefined && arguments_.positionals.length > 0) {\n throw new Error(\"Use either a positional prompt or --prompt, not both\")\n }\n const context = await readInput(arguments_, \"context\")\n const target = option(arguments_, \"target\")\n const thread = option(arguments_, \"thread\")\n const workspace = option(arguments_, \"workspace\")\n const provider = option(arguments_, \"provider\")\n const task = await Effect.runPromise(\n createDelegation(relay, configuration, {\n prompt,\n ...(target === undefined ? {} : { target }),\n ...(context === undefined ? {} : { context }),\n ...(thread === undefined ? {} : { threadId: Schema.decodeUnknownSync(ThreadId)(thread) }),\n ...(workspace === undefined ? {} : { workspace }),\n ...(provider === undefined\n ? {}\n : { provider: Schema.decodeUnknownSync(Provider)(provider) }),\n }),\n )\n print(\n taskResult(\n arguments_.options.has(\"no-wait\")\n ? task\n : await Effect.runPromise(waitForTask(relay, task, timeout(arguments_))),\n ),\n )\n return\n }\n if (command === \"status\") {\n allowOptions(arguments_, [])\n const id = Schema.decodeUnknownSync(TaskId)(identifier(arguments_, \"task id\"))\n print(taskResult(await Effect.runPromise(relay.getTask(id))))\n return\n }\n if (command === \"trace\") {\n allowOptions(arguments_, [\"follow\"])\n const id = Schema.decodeUnknownSync(TaskId)(identifier(arguments_, \"task id\"))\n if (arguments_.options.has(\"follow\")) {\n await Effect.runPromise(followTaskTrace(relay, id, printLine))\n return\n }\n print(await Effect.runPromise(relay.traceTask(id)))\n return\n }\n if (command === \"wait\") {\n allowOptions(arguments_, [\"timeout\"])\n const id = Schema.decodeUnknownSync(TaskId)(identifier(arguments_, \"task id\"))\n const task = await Effect.runPromise(relay.getTask(id))\n print(taskResult(await Effect.runPromise(waitForTask(relay, task, timeout(arguments_)))))\n return\n }\n if (command === \"cancel\") {\n allowOptions(arguments_, [])\n const id = Schema.decodeUnknownSync(TaskId)(identifier(arguments_, \"task id\"))\n print(taskResult(await Effect.runPromise(relay.cancelTask(id))))\n return\n }\n if (command === \"thread\") {\n allowOptions(arguments_, [])\n const id = Schema.decodeUnknownSync(ThreadId)(identifier(arguments_, \"thread id\"))\n print(await Effect.runPromise(threadContext(relay, id)))\n return\n }\n throw new Error(`Unknown Cohall command: ${command}`)\n}\n",
14
14
  "import { Provider, type Provider as ProviderName } from \"@cohall/protocol\"\nimport { Effect, Schema } from \"effect\"\nimport { accessSync, constants } from \"node:fs\"\nimport { chmod, mkdtemp, rm, writeFile } from \"node:fs/promises\"\nimport { homedir, platform, tmpdir } from \"node:os\"\nimport { delimiter, extname, isAbsolute, join } from \"node:path\"\nimport { execFile, spawn } from \"node:child_process\"\nimport type { Readable } from \"node:stream\"\n\nexport class ProviderUnavailableError extends Schema.TaggedErrorClass<ProviderUnavailableError>()(\n \"CohallProvider.Unavailable\",\n { provider: Provider, message: Schema.String },\n) {}\n\nexport class ProviderRunError extends Schema.TaggedErrorClass<ProviderRunError>()(\n \"CohallProvider.RunError\",\n {\n provider: Provider,\n message: Schema.String,\n exitCode: Schema.optionalKey(Schema.Number),\n },\n) {}\n\nexport type ProviderError = ProviderUnavailableError | ProviderRunError\n\nexport interface RunOptions {\n readonly provider: ProviderName\n readonly threadId: string\n readonly prompt: string\n readonly cwd: string\n readonly beforeSpawn?: () => Promise<void>\n readonly sessionId?: string\n readonly model?: string\n readonly sandbox?: \"read-only\" | \"workspace-write\" | \"danger-full-access\"\n}\n\nexport interface RunResult {\n readonly result: string\n readonly sessionId?: string\n}\n\ntype JsonRecord = Readonly<Record<string, unknown>>\n\nconst executables = {\n codex: \"codex\",\n \"claude-code\": \"claude\",\n opencode: \"opencode\",\n} as const satisfies Record<ProviderName, string>\n\nconst providerEnvironment = (): NodeJS.ProcessEnv => ({\n ...Object.fromEntries(\n Object.entries(process.env).filter(\n ([name]) => !name.startsWith(\"COHALL_\") || name === \"COHALL_CONFIG\",\n ),\n ),\n PATH: executableDirectories().join(delimiter),\n})\n\nconst record = (value: unknown): JsonRecord | undefined =>\n typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? Object.fromEntries(Object.entries(value))\n : undefined\nconst text = (value: unknown): string | undefined => (typeof value === \"string\" ? value : undefined)\n\nconst executableCandidates = (command: string): ReadonlyArray<string> => {\n if (platform() !== \"win32\" || extname(command).length > 0) {\n return [command]\n }\n return (process.env.PATHEXT ?? \".COM;.EXE;.BAT;.CMD\")\n .split(\";\")\n .filter((extension) => extension.length > 0)\n .map((extension) => `${command}${extension.toLowerCase()}`)\n}\n\nconst executableDirectories = (): ReadonlyArray<string> => {\n const home = homedir()\n const configured = (process.env.PATH ?? \"\").split(delimiter).filter(Boolean)\n const common =\n platform() === \"win32\"\n ? [\n process.env.APPDATA === undefined ? undefined : join(process.env.APPDATA, \"npm\"),\n process.env.LOCALAPPDATA === undefined\n ? undefined\n : join(process.env.LOCALAPPDATA, \"pnpm\"),\n join(home, \".bun\", \"bin\"),\n ]\n : [\n join(home, \".local\", \"bin\"),\n join(home, \".npm-global\", \"bin\"),\n join(home, \".bun\", \"bin\"),\n join(home, \".local\", \"share\", \"pnpm\"),\n \"/opt/homebrew/bin\",\n \"/usr/local/bin\",\n ]\n return [...new Set([...configured, ...common.filter((path) => path !== undefined)])]\n}\n\nexport const findExecutable = (command: string): string | undefined => {\n const paths =\n isAbsolute(command) || command.includes(\"/\") || command.includes(\"\\\\\")\n ? [\"\"]\n : executableDirectories()\n for (const directory of paths) {\n for (const candidate of executableCandidates(command)) {\n const path = directory.length === 0 ? candidate : join(directory, candidate)\n try {\n accessSync(path, platform() === \"win32\" ? constants.F_OK : constants.X_OK)\n return path\n } catch {\n continue\n }\n }\n }\n return undefined\n}\n\nexport const available = (provider: ProviderName): boolean =>\n findExecutable(executables[provider]) !== undefined\nexport const availableProviders = (): ReadonlyArray<ProviderName> =>\n Provider.literals.filter(available)\n\nconst boundedText = (stream: Readable, limit: number, onOverflow: () => void): Promise<string> =>\n new Promise((resolve, reject) => {\n const chunks: Array<Buffer> = []\n let size = 0\n const cleanup = (): void => {\n stream.off(\"data\", onData)\n stream.off(\"end\", onEnd)\n stream.off(\"error\", onError)\n }\n const onData = (chunk: Buffer | string): void => {\n const bytes = typeof chunk === \"string\" ? Buffer.from(chunk) : chunk\n size += bytes.byteLength\n if (size <= limit) {\n chunks.push(bytes)\n return\n }\n cleanup()\n onOverflow()\n reject(new Error(`Provider output exceeded ${Math.floor(limit / 1024)} KiB`))\n }\n const onEnd = (): void => {\n cleanup()\n resolve(Buffer.concat(chunks, size).toString(\"utf8\"))\n }\n const onError = (cause: Error): void => {\n cleanup()\n reject(cause)\n }\n stream.on(\"data\", onData)\n stream.once(\"end\", onEnd)\n stream.once(\"error\", onError)\n })\n\ninterface CapturedText {\n readonly text: string\n readonly truncated: boolean\n}\n\nconst captureText = (stream: Readable, limit: number): Promise<CapturedText> =>\n new Promise((resolve, reject) => {\n const chunks: Array<Buffer> = []\n let captured = 0\n let truncated = false\n const onData = (chunk: Buffer | string): void => {\n const bytes = typeof chunk === \"string\" ? Buffer.from(chunk) : chunk\n const remaining = limit - captured\n if (remaining > 0) {\n const selected = bytes.byteLength <= remaining ? bytes : bytes.subarray(0, remaining)\n chunks.push(selected)\n captured += selected.byteLength\n }\n truncated ||= bytes.byteLength > remaining\n }\n const onEnd = (): void =>\n resolve({ text: Buffer.concat(chunks, captured).toString(\"utf8\"), truncated })\n stream.on(\"data\", onData)\n stream.once(\"end\", onEnd)\n stream.once(\"error\", reject)\n })\n\nconst failureMessage = (command: string, stderr: CapturedText, exitCode: number): string => {\n const fallback = `${command} exited with status ${exitCode}`\n const suffix = stderr.truncated ? \"\\n[stderr truncated after 64 KiB]\" : \"\"\n const available = 16_384 - suffix.length\n return `${(stderr.text.trim() || fallback).slice(0, available)}${suffix}`\n}\n\nconst codexCommand = (options: RunOptions): ReadonlyArray<string> => {\n const common = [\n \"--json\",\n \"--skip-git-repo-check\",\n \"-c\",\n 'approval_policy=\"never\"',\n ...(options.model === undefined ? [] : [\"--model\", options.model]),\n ...(options.sandbox === undefined\n ? []\n : [\"-c\", `sandbox_mode=${JSON.stringify(options.sandbox)}`]),\n ]\n return options.sessionId === undefined\n ? [\"codex\", \"exec\", ...common, \"-\"]\n : [\"codex\", \"exec\", \"resume\", ...common, options.sessionId, \"-\"]\n}\n\nconst claudeCommand = (options: RunOptions): ReadonlyArray<string> => [\n \"claude\",\n \"-p\",\n \"--output-format\",\n \"json\",\n ...(options.model === undefined ? [] : [\"--model\", options.model]),\n ...(options.sessionId === undefined ? [] : [\"--resume\", options.sessionId]),\n]\n\nconst opencodeCommand = (options: RunOptions, promptPath: string): ReadonlyArray<string> => [\n \"opencode\",\n \"run\",\n \"--format\",\n \"json\",\n ...(options.model === undefined ? [] : [\"--model\", options.model]),\n ...(options.sessionId === undefined ? [] : [\"--session\", options.sessionId]),\n \"--file\",\n promptPath,\n \"Complete the task described in the attached Cohall prompt file.\",\n]\n\ninterface PreparedCommand {\n readonly command: ReadonlyArray<string>\n readonly input?: string\n readonly cleanup: () => Promise<void>\n}\n\nconst prepareCommand = async (options: RunOptions): Promise<PreparedCommand> => {\n switch (options.provider) {\n case \"codex\":\n return {\n command: codexCommand(options),\n input: options.prompt,\n cleanup: () => Promise.resolve(),\n }\n case \"claude-code\":\n return {\n command: claudeCommand(options),\n input: options.prompt,\n cleanup: () => Promise.resolve(),\n }\n case \"opencode\": {\n const directory = await mkdtemp(join(tmpdir(), \"cohall-opencode-\"))\n const promptPath = join(directory, \"prompt.md\")\n try {\n if (platform() !== \"win32\") {\n await chmod(directory, 0o700)\n }\n await writeFile(promptPath, options.prompt, { mode: 0o600 })\n return {\n command: opencodeCommand(options, promptPath),\n cleanup: () => rm(directory, { recursive: true, force: true }),\n }\n } catch (cause) {\n await rm(directory, { recursive: true, force: true }).catch(() => undefined)\n throw cause\n }\n }\n }\n}\n\nconst forEachJsonEvent = async (\n stdout: Readable,\n onEvent: (event: JsonRecord) => void,\n): Promise<void> => {\n const limit = 1024 * 1024\n let chunks: Array<Buffer> = []\n let size = 0\n const append = (chunk: Buffer): void => {\n if (size + chunk.byteLength > limit) {\n throw new Error(\"Provider event exceeded 1024 KiB\")\n }\n if (chunk.byteLength > 0) {\n chunks.push(chunk)\n size += chunk.byteLength\n }\n }\n const emit = (): void => {\n const line = Buffer.concat(chunks, size).toString(\"utf8\")\n chunks = []\n size = 0\n if (line.trim().length === 0) {\n return\n }\n const event = record(JSON.parse(line) as unknown)\n if (event !== undefined) {\n onEvent(event)\n }\n }\n\n for await (const chunk of stdout) {\n const bytes = Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk))\n let start = 0\n for (let newline = bytes.indexOf(0x0a, start); newline !== -1; ) {\n append(bytes.subarray(start, newline))\n emit()\n start = newline + 1\n newline = bytes.indexOf(0x0a, start)\n }\n append(bytes.subarray(start))\n }\n if (size > 0) {\n emit()\n }\n}\n\nconst parseCodex = async (stdout: Readable, existingSession?: string): Promise<RunResult> => {\n let result = \"\"\n let sessionId = existingSession\n await forEachJsonEvent(stdout, (event) => {\n if (text(event.type) === \"thread.started\") {\n sessionId = text(event.thread_id) ?? sessionId\n }\n if (text(event.type) !== \"item.completed\") {\n return\n }\n const item = record(event.item)\n if (text(item?.type) === \"agent_message\") {\n result = text(item?.text) ?? text(item?.content) ?? result\n }\n })\n return {\n result: result || \"Codex completed the task without a text response.\",\n ...(sessionId === undefined ? {} : { sessionId }),\n }\n}\n\nconst parseClaude = (stdout: string, existingSession?: string): RunResult => {\n const value = record(JSON.parse(stdout) as unknown)\n const result = text(value?.result) ?? text(value?.content)\n if (result === undefined) {\n throw new Error(\"Claude Code returned JSON without a result\")\n }\n const sessionId = text(value?.session_id) ?? text(value?.sessionId) ?? existingSession\n return { result, ...(sessionId === undefined ? {} : { sessionId }) }\n}\n\nconst textFromPart = (value: unknown): string | undefined => {\n const part = record(value)\n if (part === undefined) {\n return undefined\n }\n return text(part.text) ?? text(part.content) ?? text(record(part.part)?.text)\n}\n\nconst openCodeError = (event: JsonRecord): string | undefined => {\n if (text(event.type) !== \"error\") {\n return undefined\n }\n const error = record(event.error)\n const name = text(error?.name)\n const message =\n text(record(error?.data)?.message) ??\n text(error?.message) ??\n text(event.message) ??\n text(event.error)\n if (name !== undefined && message !== undefined) {\n return `OpenCode ${name}: ${message}`\n }\n return message === undefined ? \"OpenCode reported an error\" : `OpenCode: ${message}`\n}\n\nconst parseOpenCode = async (stdout: Readable, existingSession?: string): Promise<RunResult> => {\n let result = \"\"\n let sessionId = existingSession\n await forEachJsonEvent(stdout, (event) => {\n const failure = openCodeError(event)\n if (failure !== undefined) {\n throw new Error(failure)\n }\n sessionId =\n text(event.sessionID) ??\n text(event.sessionId) ??\n text(event.session_id) ??\n text(record(event.info)?.sessionID) ??\n sessionId\n const content = textFromPart(event.part) ?? textFromPart(event) ?? text(event.result)\n if (content !== undefined && content.length > 0) {\n result = content\n }\n })\n if (result.length === 0) {\n throw new Error(\n \"OpenCode produced no result; verify its authentication and use a supported project workspace\",\n )\n }\n return { result, ...(sessionId === undefined ? {} : { sessionId }) }\n}\n\nconst parse = async (\n options: RunOptions,\n stdout: Readable,\n onFailure: () => void,\n): Promise<RunResult> => {\n try {\n switch (options.provider) {\n case \"codex\":\n return await parseCodex(stdout, options.sessionId)\n case \"claude-code\":\n return parseClaude(await boundedText(stdout, 1024 * 1024, onFailure), options.sessionId)\n case \"opencode\":\n return await parseOpenCode(stdout, options.sessionId)\n }\n } catch (cause) {\n onFailure()\n throw cause\n }\n}\n\nconst byteLength = (value: string): number => new TextEncoder().encode(value).byteLength\n\nconst processExists = (pid: number): boolean => {\n try {\n process.kill(-pid, 0)\n return true\n } catch (cause) {\n if (typeof cause === \"object\" && cause !== null && \"code\" in cause && cause.code === \"ESRCH\") {\n return false\n }\n throw cause\n }\n}\n\nconst waitForProcessGroup = async (pid: number, timeoutMs: number): Promise<boolean> => {\n const deadline = Date.now() + timeoutMs\n while (processExists(pid)) {\n if (Date.now() >= deadline) {\n return false\n }\n await new Promise((resolve) => setTimeout(resolve, 25))\n }\n return true\n}\n\nconst terminateWindowsTree = (pid: number): Promise<void> =>\n new Promise((resolve) => {\n const systemRoot = process.env.SystemRoot ?? \"C:\\\\Windows\"\n execFile(\n join(systemRoot, \"System32\", \"taskkill.exe\"),\n [\"/PID\", String(pid), \"/T\", \"/F\"],\n { windowsHide: true },\n () => resolve(),\n )\n })\n\nconst terminateProcessTree = async (pid: number): Promise<void> => {\n if (platform() === \"win32\") {\n await terminateWindowsTree(pid)\n return\n }\n try {\n process.kill(-pid, \"SIGTERM\")\n } catch (cause) {\n if (typeof cause === \"object\" && cause !== null && \"code\" in cause && cause.code === \"ESRCH\") {\n return\n }\n throw cause\n }\n if (await waitForProcessGroup(pid, 5_000)) {\n return\n }\n process.kill(-pid, \"SIGKILL\")\n await waitForProcessGroup(pid, 1_000)\n}\n\nexport const run = (options: RunOptions): Effect.Effect<RunResult, ProviderError> =>\n Effect.tryPromise({\n try: async (signal) => {\n const executable = findExecutable(executables[options.provider])\n if (executable === undefined) {\n throw new ProviderUnavailableError({\n provider: options.provider,\n message: `${executables[options.provider]} is not available on this device`,\n })\n }\n const prepared = await prepareCommand(options)\n try {\n await options.beforeSpawn?.()\n const [, ...arguments_] = prepared.command\n const child = spawn(executable, arguments_, {\n cwd: options.cwd,\n env: {\n ...providerEnvironment(),\n COHALL_PROVIDER: options.provider,\n COHALL_THREAD_ID: options.threadId,\n },\n detached: platform() !== \"win32\",\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n })\n const exited = new Promise<number>((resolve, reject) => {\n child.once(\"error\", reject)\n child.once(\"exit\", (code) => resolve(code ?? 1))\n })\n let termination: Promise<void> | undefined\n const terminate = (): void => {\n if (child.pid === undefined || termination !== undefined) {\n return\n }\n termination = terminateProcessTree(child.pid)\n }\n signal.addEventListener(\"abort\", terminate, { once: true })\n if (signal.aborted) {\n terminate()\n }\n child.stdin.end(prepared.input)\n\n try {\n const [result, stderr, exitCode] = await Promise.all([\n parse(options, child.stdout, terminate),\n captureText(child.stderr, 64 * 1024),\n exited,\n ])\n if (exitCode !== 0) {\n throw new ProviderRunError({\n provider: options.provider,\n message: failureMessage(executables[options.provider], stderr, exitCode),\n exitCode,\n })\n }\n if (byteLength(result.result) > 131_072) {\n throw new ProviderRunError({\n provider: options.provider,\n message: \"Provider result exceeded 128 KiB\",\n })\n }\n if (result.sessionId !== undefined && byteLength(result.sessionId) > 4_096) {\n throw new ProviderRunError({\n provider: options.provider,\n message: \"Provider session ID exceeded 4 KiB\",\n })\n }\n return result\n } finally {\n signal.removeEventListener(\"abort\", terminate)\n if (child.exitCode === null) {\n terminate()\n await exited.catch(() => undefined)\n }\n await termination?.catch(() => undefined)\n }\n } finally {\n await prepared.cleanup()\n }\n },\n catch: (cause) => {\n if (cause instanceof ProviderUnavailableError || cause instanceof ProviderRunError) {\n return cause\n }\n return new ProviderRunError({\n provider: options.provider,\n message: (cause instanceof Error ? cause.message : String(cause)).slice(0, 16_384),\n })\n },\n })\n",
15
15
  "import { DeviceId, Provider, makeDeviceId, type Provider as ProviderName } from \"@cohall/protocol\"\nimport { Effect, Schema } from \"effect\"\nimport { access, chmod, mkdir, readFile, realpath, rename, writeFile } from \"node:fs/promises\"\nimport { homedir, hostname, platform } from \"node:os\"\nimport { dirname, join, resolve } from \"node:path\"\n\nconst WorkspaceList = Schema.Array(Schema.NonEmptyString).check(Schema.isMaxLength(64))\nconst ProviderList = Schema.Array(Provider)\n .check(Schema.isMinLength(1))\n .check(Schema.isMaxLength(3))\nconst Sandbox = Schema.Literals([\"read-only\", \"workspace-write\", \"danger-full-access\"])\n\nexport const StoredConfiguration = Schema.Struct({\n version: Schema.Literal(1),\n relayUrl: Schema.NonEmptyString,\n deviceId: DeviceId,\n deviceName: Schema.NonEmptyString,\n workspaces: WorkspaceList,\n clientToken: Schema.optionalKey(Schema.NonEmptyString),\n deviceToken: Schema.optionalKey(Schema.NonEmptyString),\n providers: Schema.optionalKey(ProviderList),\n model: Schema.optionalKey(Schema.NonEmptyString),\n sandbox: Schema.optionalKey(Sandbox),\n})\nexport interface StoredConfiguration extends Schema.Schema.Type<typeof StoredConfiguration> {}\n\nexport const ClientConfiguration = Schema.Struct({\n relayUrl: Schema.NonEmptyString,\n token: Schema.NonEmptyString,\n mcpThreadId: Schema.optionalKey(Schema.String),\n})\nexport interface ClientConfiguration extends Schema.Schema.Type<typeof ClientConfiguration> {}\n\nexport const DeviceConfiguration = Schema.Struct({\n relayUrl: Schema.NonEmptyString,\n token: Schema.NonEmptyString,\n id: DeviceId,\n name: Schema.NonEmptyString,\n workspaces: WorkspaceList,\n providers: Schema.optionalKey(ProviderList),\n model: Schema.optionalKey(Schema.NonEmptyString),\n sandbox: Schema.optionalKey(Sandbox),\n})\nexport interface DeviceConfiguration extends Schema.Schema.Type<typeof DeviceConfiguration> {}\n\nconst defaultConfigDirectory = (): string => {\n if (platform() === \"win32\") {\n return join(process.env.APPDATA ?? join(homedir(), \"AppData\", \"Roaming\"), \"Cohall\")\n }\n if (platform() === \"darwin\") {\n return join(homedir(), \"Library\", \"Application Support\", \"Cohall\")\n }\n return join(process.env.XDG_CONFIG_HOME ?? join(homedir(), \".config\"), \"cohall\")\n}\n\nconst defaultRelayDataDirectory = (): string => {\n if (platform() === \"win32\") {\n return join(process.env.LOCALAPPDATA ?? join(homedir(), \"AppData\", \"Local\"), \"Cohall\")\n }\n if (platform() === \"darwin\") {\n return join(homedir(), \"Library\", \"Application Support\", \"Cohall\", \"relay\")\n }\n return join(process.env.XDG_DATA_HOME ?? join(homedir(), \".local\", \"share\"), \"cohall\")\n}\n\nexport const relayDataDirectory = (): string =>\n resolve(process.env.COHALL_DATA_DIR ?? defaultRelayDataDirectory())\n\nexport const configurationPath = (): string =>\n resolve(process.env.COHALL_CONFIG ?? join(defaultConfigDirectory(), \"config.json\"))\n\nexport const normalizeRelayUrl = (input: string): string => {\n const url = new URL(input)\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n throw new Error(\"Relay URL must use http or https\")\n }\n if (\n url.username.length > 0 ||\n url.password.length > 0 ||\n url.search.length > 0 ||\n url.hash.length > 0\n ) {\n throw new Error(\"Relay URL cannot include credentials, a query, or a fragment\")\n }\n if (url.pathname !== \"/\" && url.pathname !== \"\") {\n throw new Error(\"Relay URL cannot include a path\")\n }\n url.pathname = \"/\"\n return url.toString().replace(/\\/$/, \"\")\n}\n\nexport const parseWorkspaces = (\n workspaceList: string,\n workspaceJson?: string,\n): Effect.Effect<ReadonlyArray<string>, Error> =>\n Effect.tryPromise({\n try: async () => {\n const values =\n workspaceJson === undefined\n ? workspaceList\n .split(\",\")\n .map((workspace) => workspace.trim())\n .filter((workspace) => workspace.length > 0)\n : Schema.decodeUnknownSync(WorkspaceList)(JSON.parse(workspaceJson))\n const canonical = await Promise.all(values.map((workspace) => realpath(resolve(workspace))))\n return [...new Set(canonical)]\n },\n catch: (cause) =>\n new Error(\n `Workspace roots must be existing paths; JSON input must be an array of paths: ${cause instanceof Error ? cause.message : String(cause)}`,\n ),\n })\n\nexport const parseProviders = (input: string): ReadonlyArray<ProviderName> =>\n Schema.decodeUnknownSync(ProviderList)([\n ...new Set(\n input\n .split(\",\")\n .map((provider) => provider.trim())\n .filter(Boolean),\n ),\n ])\n\nexport const readStoredConfiguration = async (): Promise<StoredConfiguration | undefined> => {\n const path = configurationPath()\n if (\n !(await access(path)\n .then(() => true)\n .catch(() => false))\n ) {\n return undefined\n }\n if (platform() !== \"win32\") {\n await chmod(path, 0o600)\n }\n try {\n return Schema.decodeUnknownSync(StoredConfiguration)(JSON.parse(await readFile(path, \"utf8\")))\n } catch (cause) {\n throw new Error(`Invalid Cohall configuration at ${path}: ${String(cause)}`)\n }\n}\n\nexport const writeStoredConfiguration = async (\n configuration: StoredConfiguration,\n): Promise<void> => {\n const path = configurationPath()\n const directory = dirname(path)\n const temporary = `${path}.${process.pid}.tmp`\n await mkdir(directory, { recursive: true, mode: 0o700 })\n if (platform() !== \"win32\") {\n await chmod(directory, 0o700)\n }\n await writeFile(temporary, `${JSON.stringify(configuration, null, 2)}\\n`, { mode: 0o600 })\n await rename(temporary, path)\n if (platform() !== \"win32\") {\n await chmod(path, 0o600)\n }\n}\n\nexport const credentialsForRelay = (\n configuration: StoredConfiguration | undefined,\n relayUrl: string,\n): { readonly clientToken?: string; readonly deviceToken?: string } => {\n if (configuration?.relayUrl !== normalizeRelayUrl(relayUrl)) {\n return {}\n }\n return {\n ...(configuration.clientToken === undefined ? {} : { clientToken: configuration.clientToken }),\n ...(configuration.deviceToken === undefined ? {} : { deviceToken: configuration.deviceToken }),\n }\n}\n\nexport const makeStoredConfiguration = async (input: {\n readonly relayUrl: string\n readonly deviceName?: string\n readonly workspaces?: ReadonlyArray<string>\n readonly providers?: ReadonlyArray<ProviderName> | \"auto\"\n readonly clientToken?: string\n readonly deviceToken?: string\n}): Promise<StoredConfiguration> => {\n const existing = await readStoredConfiguration()\n const relayUrl = normalizeRelayUrl(input.relayUrl)\n const retainedCredentials = credentialsForRelay(existing, relayUrl)\n const canonicalWorkspaces =\n input.workspaces === undefined\n ? (existing?.workspaces ?? [])\n : await Effect.runPromise(parseWorkspaces(\"\", JSON.stringify(input.workspaces)))\n const clientToken = input.clientToken ?? retainedCredentials.clientToken\n const deviceToken = input.deviceToken ?? retainedCredentials.deviceToken\n const providers =\n input.providers === \"auto\" ? undefined : (input.providers ?? existing?.providers)\n return StoredConfiguration.make({\n version: 1,\n relayUrl,\n deviceId: existing?.deviceId ?? makeDeviceId(),\n deviceName: input.deviceName ?? existing?.deviceName ?? hostname(),\n workspaces: canonicalWorkspaces,\n ...(clientToken === undefined ? {} : { clientToken }),\n ...(deviceToken === undefined ? {} : { deviceToken }),\n ...(providers === undefined ? {} : { providers }),\n ...(existing?.model === undefined ? {} : { model: existing.model }),\n ...(existing?.sandbox === undefined ? {} : { sandbox: existing.sandbox }),\n })\n}\n\nconst environmentWorkspaces = async (\n stored: StoredConfiguration | undefined,\n): Promise<ReadonlyArray<string>> => {\n const list = process.env.COHALL_DEVICE_WORKSPACES\n const json = process.env.COHALL_DEVICE_WORKSPACES_JSON\n if (list === undefined && json === undefined) {\n return stored?.workspaces ?? []\n }\n return Effect.runPromise(parseWorkspaces(list ?? \"\", json))\n}\n\nconst environmentProvider = (): string | undefined =>\n process.env.COHALL_MODEL ?? process.env.COHALL_CODEX_MODEL\n\nconst environmentSandbox = (): DeviceConfiguration[\"sandbox\"] => {\n const value = process.env.COHALL_SANDBOX ?? process.env.COHALL_CODEX_SANDBOX\n return value === undefined ? undefined : Schema.decodeUnknownSync(Sandbox)(value)\n}\n\nconst environmentProviders = (\n stored: StoredConfiguration | undefined,\n): ReadonlyArray<ProviderName> | undefined => {\n const value = process.env.COHALL_DEVICE_PROVIDERS\n return value === undefined\n ? stored?.providers\n : value === \"auto\"\n ? undefined\n : parseProviders(value)\n}\n\nconst storedOrDefaults = async (): Promise<StoredConfiguration> => {\n const stored = await readStoredConfiguration()\n return (\n stored ??\n StoredConfiguration.make({\n version: 1,\n relayUrl: \"http://127.0.0.1:8787\",\n deviceId: makeDeviceId(),\n deviceName: hostname(),\n workspaces: [],\n })\n )\n}\n\nexport const loadClientConfiguration = Effect.tryPromise({\n try: async () => {\n const stored = await storedOrDefaults()\n const relayUrl = normalizeRelayUrl(process.env.COHALL_RELAY_URL ?? stored.relayUrl)\n const token =\n process.env.COHALL_CLIENT_TOKEN ?? credentialsForRelay(stored, relayUrl).clientToken\n if (token === undefined) {\n throw new Error(\n `No client credential. Run cohall join with a pairing token on stdin or set COHALL_CLIENT_TOKEN.`,\n )\n }\n return ClientConfiguration.make({\n relayUrl,\n token,\n ...(process.env.COHALL_THREAD_ID === undefined\n ? {}\n : { mcpThreadId: process.env.COHALL_THREAD_ID }),\n })\n },\n catch: (cause) => (cause instanceof Error ? cause : new Error(String(cause))),\n})\n\nexport const loadOwnerConfiguration = Effect.tryPromise({\n try: async () => {\n const stored = await storedOrDefaults()\n const ownerTokenPath = join(relayDataDirectory(), \"owner-token\")\n const token =\n process.env.COHALL_TOKEN ??\n (await readFile(ownerTokenPath, \"utf8\")\n .then((value) => value.trim())\n .catch(() => undefined))\n if (token === undefined || token.length === 0) {\n throw new Error(\n \"No owner credential. Run this command on the relay host or set COHALL_TOKEN.\",\n )\n }\n if (token.length < 32) {\n throw new Error(\"The Cohall relay owner token must be at least 32 characters\")\n }\n return ClientConfiguration.make({\n relayUrl: normalizeRelayUrl(process.env.COHALL_RELAY_URL ?? stored.relayUrl),\n token,\n })\n },\n catch: (cause) => (cause instanceof Error ? cause : new Error(String(cause))),\n})\n\nexport const loadDeviceConfiguration = Effect.tryPromise({\n try: async () => {\n const stored = await storedOrDefaults()\n const relayUrl = normalizeRelayUrl(process.env.COHALL_RELAY_URL ?? stored.relayUrl)\n const token =\n process.env.COHALL_DEVICE_TOKEN ?? credentialsForRelay(stored, relayUrl).deviceToken\n if (token === undefined) {\n throw new Error(\n `No device credential. Run cohall join with a pairing token on stdin or set COHALL_DEVICE_TOKEN.`,\n )\n }\n const workspaces = await environmentWorkspaces(stored)\n if (workspaces.length === 0) {\n throw new Error(\"No device workspace roots are configured\")\n }\n const model = environmentProvider() ?? stored.model\n const sandbox = environmentSandbox() ?? stored.sandbox\n const providers = environmentProviders(stored)\n return DeviceConfiguration.make({\n relayUrl,\n token,\n id:\n process.env.COHALL_DEVICE_ID === undefined\n ? stored.deviceId\n : DeviceId.make(process.env.COHALL_DEVICE_ID),\n name: process.env.COHALL_DEVICE_NAME ?? stored.deviceName,\n workspaces,\n ...(providers === undefined ? {} : { providers }),\n ...(model === undefined ? {} : { model }),\n ...(sandbox === undefined ? {} : { sandbox }),\n })\n },\n catch: (cause) => (cause instanceof Error ? cause : new Error(String(cause))),\n})\n\nexport const knownProviders = Provider.literals\n",
16
16
  "import type { Interface as RelayClient } from \"@cohall/client\"\nimport {\n DeviceId,\n Provider,\n TaskId,\n TaskStatus,\n ThreadId,\n terminalTaskStatuses,\n isTerminalTask,\n type Device,\n type Provider as ProviderName,\n type Task,\n type TaskTrace,\n type ThreadId as ThreadIdType,\n} from \"@cohall/protocol\"\nimport { Effect, Schedule, Schema } from \"effect\"\nimport type { ClientConfiguration } from \"./config.ts\"\n\nexport class DeviceSelectionError extends Schema.TaggedErrorClass<DeviceSelectionError>()(\n \"Cohall.DeviceSelectionError\",\n { message: Schema.String, devices: Schema.Array(Schema.String) },\n) {}\n\nexport class TaskWaitTimeoutError extends Schema.TaggedErrorClass<TaskWaitTimeoutError>()(\n \"Cohall.TaskWaitTimeoutError\",\n { message: Schema.String, taskId: TaskId, status: TaskStatus },\n) {}\n\nexport interface DelegateOptions {\n readonly prompt: string\n readonly target?: string\n readonly context?: string\n readonly threadId?: ThreadIdType\n readonly workspace?: string\n readonly provider?: ProviderName\n}\n\nexport const TaskResult = Schema.Struct({\n task_id: TaskId,\n thread_id: ThreadId,\n status: TaskStatus,\n provider: Provider,\n target_device_id: DeviceId,\n result: Schema.optionalKey(Schema.String),\n error: Schema.optionalKey(Schema.String),\n})\nexport interface TaskResult extends Schema.Schema.Type<typeof TaskResult> {}\n\nconst matchingDevices = (devices: ReadonlyArray<Device>, target: string): ReadonlyArray<Device> => {\n const normalized = target.replace(/^@/, \"\").toLowerCase()\n const byId = devices.find((device) => device.id === target)\n return byId === undefined\n ? devices.filter(\n (device) =>\n device.name.toLowerCase() === normalized || device.hostname.toLowerCase() === normalized,\n )\n : [byId]\n}\n\nexport const taskResult = (task: Task): TaskResult =>\n TaskResult.make({\n task_id: task.id,\n thread_id: task.threadId,\n status: task.status,\n provider: task.provider,\n target_device_id: task.targetDeviceId,\n ...(task.result === undefined ? {} : { result: task.result }),\n ...(task.error === undefined ? {} : { error: task.error }),\n })\n\nexport const createDelegation = Effect.fn(\"Cohall.createDelegation\")(function* (\n client: RelayClient,\n configuration: ClientConfiguration,\n options: DelegateOptions,\n) {\n const devices = yield* client.devices()\n const matches = options.target === undefined ? [] : matchingDevices(devices, options.target)\n if (options.target !== undefined && matches.length !== 1) {\n return yield* new DeviceSelectionError({\n message:\n matches.length === 0\n ? `No Cohall device matches ${options.target}`\n : `${options.target} is ambiguous; use a device ID`,\n devices:\n matches.length === 0\n ? devices.map((device) => `${device.name} (${device.id})`)\n : matches.map((device) => `${device.name} (${device.id})`),\n })\n }\n if (devices.length === 0) {\n return yield* new DeviceSelectionError({\n message: \"No Cohall devices are registered\",\n devices: [],\n })\n }\n const target = matches[0]\n const inheritedThread = configuration.mcpThreadId\n return yield* client.createTask({\n prompt: options.prompt,\n ...(target === undefined ? {} : { targetDeviceId: target.id }),\n ...(options.threadId !== undefined\n ? { threadId: options.threadId }\n : inheritedThread === undefined\n ? {}\n : { threadId: ThreadId.make(inheritedThread) }),\n ...(options.context === undefined ? {} : { context: options.context }),\n ...(options.workspace === undefined ? {} : { workspace: options.workspace }),\n ...(options.provider === undefined ? {} : { provider: options.provider }),\n })\n})\n\nexport const waitForTask = Effect.fn(\"Cohall.waitForTask\")(function* (\n client: RelayClient,\n initial: Task,\n timeoutSeconds: number,\n) {\n const deadline = Date.now() + timeoutSeconds * 1_000\n let task = initial\n while (!isTerminalTask(task)) {\n if (Date.now() >= deadline) {\n return yield* new TaskWaitTimeoutError({\n message: `Task ${task.id} is still ${task.status} after ${timeoutSeconds} seconds`,\n taskId: task.id,\n status: task.status,\n })\n }\n yield* Effect.sleep(\"1 second\")\n task = yield* client.getTask(task.id)\n }\n return task\n})\n\nexport const followTaskTrace = Effect.fn(\"Cohall.followTaskTrace\")(function* (\n client: RelayClient,\n taskId: TaskId,\n onTrace: (trace: TaskTrace) => void,\n) {\n let revision: string | undefined\n const poll = client.traceTask(taskId).pipe(\n Effect.tap((trace) => {\n const latest = trace.events.at(-1)\n const nextRevision = `${trace.status}:${latest?.kind ?? \"none\"}:${latest?.at ?? \"none\"}`\n if (nextRevision === revision) {\n return Effect.succeed(undefined)\n }\n revision = nextRevision\n return Effect.sync(() => onTrace(trace))\n }),\n )\n return yield* poll.pipe(\n Effect.repeat({\n until: (trace) => terminalTaskStatuses.has(trace.status),\n schedule: Schedule.spaced(\"1 second\"),\n }),\n )\n})\n\nexport const threadContext = Effect.fn(\"Cohall.threadContext\")(function* (\n client: RelayClient,\n threadId: ThreadIdType,\n) {\n return yield* client.threadContext(threadId)\n})\n",
@@ -22,7 +22,7 @@
22
22
  "import {\n Device,\n SocketEvent,\n decodeSocketEvent,\n maxSocketPayloadBytes,\n now,\n version,\n type Provider,\n type DeviceOperation,\n type OperationId,\n type Task,\n type TaskId,\n} from \"@cohall/protocol\"\nimport * as Providers from \"@cohall/providers\"\nimport { Effect, Schedule, Schema } from \"effect\"\nimport { constants } from \"node:fs\"\nimport { open, realpath, stat } from \"node:fs/promises\"\nimport { arch, hostname, platform } from \"node:os\"\nimport { basename, isAbsolute, relative } from \"node:path\"\nimport { WebSocket, type RawData } from \"ws\"\nimport type { DeviceConfiguration } from \"./config.ts\"\nimport { upgrade, type UpgradeOptions, type UpgradeResult } from \"./upgrade.ts\"\n\nconst maxQueuedRelayMessages = 8\n\nexport class DeviceConnectionError extends Schema.TaggedErrorClass<DeviceConnectionError>()(\n \"Device.ConnectionError\",\n { message: Schema.String },\n) {}\n\ninterface State {\n socket: WebSocket | undefined\n processing: Promise<void>\n readonly terminal: Map<TaskId, string>\n readonly queue: Array<Task>\n readonly sessions: Map<string, string>\n readonly tasks: Map<TaskId, AbortController>\n readonly completed: Set<TaskId>\n operation: DeviceOperation | undefined\n readonly operationQueue: Array<DeviceOperation>\n readonly operationTerminal: Map<OperationId, string>\n readonly completedOperations: Set<OperationId>\n}\n\nconst socketUrl = (configuration: DeviceConfiguration): string => {\n const url = new URL(configuration.relayUrl)\n url.protocol = url.protocol === \"https:\" ? \"wss:\" : \"ws:\"\n url.pathname = \"/ws/device\"\n return url.toString()\n}\n\nconst providerLabel = (provider: Provider): string => {\n switch (provider) {\n case \"codex\":\n return \"Codex\"\n case \"claude-code\":\n return \"Claude Code\"\n case \"opencode\":\n return \"OpenCode\"\n }\n}\n\nconst capabilities = (providers: ReadonlyArray<Provider>): Device[\"capabilities\"] => {\n const values: Array<Device[\"capabilities\"][number]> = providers.map((provider) => ({\n id: provider,\n label: providerLabel(provider),\n detail: `${providerLabel(provider)} executable detected; authentication is checked when work starts`,\n }))\n if (\n Providers.findExecutable(\"google-chrome\") !== undefined ||\n Providers.findExecutable(\"chromium\") !== undefined ||\n platform() === \"darwin\"\n ) {\n values.push({ id: \"browser-session\", label: \"Signed-in browser\" })\n }\n if (Providers.findExecutable(\"xcodebuild\") !== undefined) {\n values.push({ id: \"xcode\", label: \"Xcode\" })\n }\n if (Providers.findExecutable(\"docker\") !== undefined) {\n values.push({ id: \"docker\", label: \"Docker\" })\n }\n return values\n}\n\nexport const selectProviders = (\n installed: ReadonlyArray<Provider>,\n configured?: ReadonlyArray<Provider>,\n): ReadonlyArray<Provider> =>\n configured === undefined\n ? installed\n : configured.filter((provider) => installed.includes(provider))\n\nconst describeDevice = (\n configuration: DeviceConfiguration,\n status: \"online\" | \"busy\" = \"online\",\n): Device => {\n const operatingSystem = platform()\n const platformName =\n operatingSystem === \"darwin\" || operatingSystem === \"linux\"\n ? operatingSystem\n : operatingSystem === \"win32\"\n ? \"windows\"\n : \"unknown\"\n const installed = Providers.availableProviders()\n const providers = selectProviders(installed, configuration.providers)\n return Device.make({\n id: configuration.id,\n name: configuration.name,\n hostname: hostname(),\n platform: platformName,\n architecture: arch(),\n status,\n providers,\n capabilities: capabilities(providers),\n workspaces: configuration.workspaces.map((path) => ({\n path,\n label: basename(path) || path,\n })),\n version,\n lastSeenAt: now(),\n })\n}\n\nexport const allowedWorkspace = async (\n configuration: DeviceConfiguration,\n requested: string | undefined,\n): Promise<string> => {\n const selected = requested ?? configuration.workspaces[0]\n if (selected === undefined) {\n throw new Error(\"No workspace is configured on this device\")\n }\n const candidate = await realpath(selected)\n const allowed = configuration.workspaces.some((root) => {\n const child = relative(root, candidate)\n return child === \"\" || (!child.startsWith(\"..\") && !isAbsolute(child))\n })\n if (!allowed) {\n throw new Error(`Workspace ${candidate} is outside this device's configured workspace roots`)\n }\n return candidate\n}\n\ninterface AuthorizedWorkspace {\n readonly cwd: string\n readonly validate: () => Promise<void>\n readonly close: () => Promise<void>\n}\n\nexport const openAllowedWorkspace = async (\n configuration: DeviceConfiguration,\n requested: string | undefined,\n): Promise<AuthorizedWorkspace> => {\n const path = await allowedWorkspace(configuration, requested)\n const operatingSystem = platform()\n const flags =\n constants.O_RDONLY |\n (operatingSystem === \"win32\" ? 0 : constants.O_DIRECTORY | constants.O_NOFOLLOW)\n const handle = await open(path, flags)\n const identity = await handle.stat()\n if (!identity.isDirectory()) {\n await handle.close()\n throw new Error(`Workspace ${path} is not a directory`)\n }\n // macOS resolves cwd after closing non-inherited descriptors during posix_spawn,\n // so /dev/fd cannot safely serve as a directory cwd there.\n const cwd = operatingSystem === \"linux\" ? `/proc/self/fd/${handle.fd}` : path\n return {\n cwd,\n validate: async () => {\n const current = await handle.stat()\n if (!current.isDirectory() || current.dev !== identity.dev || current.ino !== identity.ino) {\n throw new Error(`Workspace ${path} changed before provider startup`)\n }\n if (operatingSystem !== \"linux\") {\n const currentPath = await realpath(path)\n const currentPathIdentity = await stat(currentPath)\n if (currentPathIdentity.dev !== identity.dev || currentPathIdentity.ino !== identity.ino) {\n throw new Error(`Workspace ${path} changed before provider startup`)\n }\n }\n },\n close: () => handle.close(),\n }\n}\n\nconst promptFor = (task: Task, deviceName: string): string => {\n const context =\n task.context === undefined\n ? \"\"\n : `\\n\\nRelevant context supplied by the sending agent:\\n${task.context}`\n return [\n `You are the Cohall agent running on ${deviceName}.`,\n \"Complete the delegated task using this device's local workspace, tools, credentials, and signed-in services.\",\n \"Never read, reveal, copy, or use Cohall configuration files or Cohall authentication tokens.\",\n \"Return a concise, complete result with the evidence the sending agent needs.\",\n `\\nTask:\\n${task.prompt}${context}`,\n ].join(\"\\n\")\n}\n\nconst send = (state: State, event: SocketEvent): void => {\n if (state.socket?.readyState === WebSocket.OPEN) {\n state.socket.send(JSON.stringify(event))\n }\n}\n\nconst sendTerminal = (state: State, taskId: TaskId, event: SocketEvent): void => {\n const payload = JSON.stringify(event)\n state.terminal.set(taskId, payload)\n if (state.socket?.readyState === WebSocket.OPEN) {\n state.socket.send(payload)\n }\n}\n\nconst sendOperationTerminal = (\n state: State,\n operationId: OperationId,\n event: SocketEvent,\n): void => {\n const payload = JSON.stringify(event)\n state.operationTerminal.set(operationId, payload)\n if (state.socket?.readyState === WebSocket.OPEN) {\n state.socket.send(payload)\n }\n}\n\nconst remember = (state: State, taskId: TaskId): void => {\n state.completed.add(taskId)\n if (state.completed.size <= 1_000) {\n return\n }\n const oldest = state.completed.values().next()\n if (!oldest.done) {\n state.completed.delete(oldest.value)\n state.terminal.delete(oldest.value)\n }\n}\n\nconst rememberOperation = (state: State, operationId: OperationId): void => {\n state.completedOperations.add(operationId)\n if (state.completedOperations.size <= 100) {\n return\n }\n const oldest = state.completedOperations.values().next()\n if (!oldest.done) {\n state.completedOperations.delete(oldest.value)\n state.operationTerminal.delete(oldest.value)\n }\n}\n\nconst sessionKey = (task: Task): string => `${task.threadId}:${task.provider}`\n\nconst execute = (configuration: DeviceConfiguration, state: State, task: Task): void => {\n if (state.tasks.has(task.id) || state.completed.has(task.id)) {\n return\n }\n const controller = new AbortController()\n state.tasks.set(task.id, controller)\n send(state, SocketEvent.make({ _tag: \"TaskAccepted\", taskId: task.id }))\n\n const workflow = Effect.gen(function* () {\n const workspace = yield* Effect.tryPromise({\n try: () => openAllowedWorkspace(configuration, task.workspace),\n catch: (cause) =>\n new Providers.ProviderRunError({\n provider: task.provider,\n message: cause instanceof Error ? cause.message : String(cause),\n }),\n })\n const sessionId = task.providerSessionId ?? state.sessions.get(sessionKey(task))\n return yield* Providers.run({\n provider: task.provider,\n threadId: task.threadId,\n prompt: promptFor(task, configuration.name),\n cwd: workspace.cwd,\n beforeSpawn: workspace.validate,\n ...(sessionId === undefined ? {} : { sessionId }),\n ...(configuration.model === undefined ? {} : { model: configuration.model }),\n ...(configuration.sandbox === undefined ? {} : { sandbox: configuration.sandbox }),\n }).pipe(Effect.ensuring(Effect.promise(() => workspace.close().catch(() => undefined))))\n })\n\n void Effect.runPromise(workflow, { signal: controller.signal })\n .then((result) => {\n if (result.sessionId !== undefined) {\n state.sessions.set(sessionKey(task), result.sessionId)\n }\n remember(state, task.id)\n sendTerminal(\n state,\n task.id,\n SocketEvent.make({\n _tag: \"TaskFinished\",\n taskId: task.id,\n result: result.result,\n ...(result.sessionId === undefined ? {} : { providerSessionId: result.sessionId }),\n }),\n )\n })\n .catch((cause: unknown) => {\n remember(state, task.id)\n sendTerminal(\n state,\n task.id,\n controller.signal.aborted\n ? SocketEvent.make({ _tag: \"TaskCancelled\", taskId: task.id })\n : SocketEvent.make({\n _tag: \"TaskFailed\",\n taskId: task.id,\n error: (cause instanceof Error ? cause.message : String(cause)).slice(0, 16_384),\n }),\n )\n })\n .finally(() => {\n state.tasks.delete(task.id)\n const operation = state.operationQueue.shift()\n if (operation !== undefined) {\n executeOperation(configuration, state, operation)\n return\n }\n const next = state.queue.shift()\n if (next !== undefined && state.operation === undefined) {\n execute(configuration, state, next)\n }\n })\n}\n\nconst executeOperation = (\n configuration: DeviceConfiguration,\n state: State,\n operation: DeviceOperation,\n): void => {\n if (state.operation !== undefined || state.completedOperations.has(operation.id)) {\n return\n }\n state.operation = operation\n send(state, SocketEvent.make({ _tag: \"OperationAccepted\", operationId: operation.id }))\n void performDeviceOperation(operation, version)\n .then((result) => {\n rememberOperation(state, operation.id)\n sendOperationTerminal(\n state,\n operation.id,\n SocketEvent.make({\n _tag: \"OperationFinished\",\n operationId: operation.id,\n result,\n }),\n )\n })\n .catch((cause: unknown) => {\n rememberOperation(state, operation.id)\n sendOperationTerminal(\n state,\n operation.id,\n SocketEvent.make({\n _tag: \"OperationFailed\",\n operationId: operation.id,\n error: (cause instanceof Error ? cause.message : String(cause)).slice(0, 16_384),\n }),\n )\n })\n .finally(() => {\n state.operation = undefined\n const pending = state.operationQueue.shift()\n if (pending !== undefined) {\n executeOperation(configuration, state, pending)\n return\n }\n const next = state.queue.shift()\n if (next !== undefined && state.tasks.size === 0) {\n execute(configuration, state, next)\n }\n })\n}\n\nconst scheduleOperation = (\n configuration: DeviceConfiguration,\n state: State,\n operation: DeviceOperation,\n): void => {\n if (\n state.completedOperations.has(operation.id) ||\n state.operation?.id === operation.id ||\n state.operationQueue.some((pending) => pending.id === operation.id)\n ) {\n return\n }\n if (state.tasks.size > 0 || state.operation !== undefined) {\n if (state.operationQueue.length >= 10) {\n state.socket?.close(4008, \"Operation queue limit reached\")\n return\n }\n state.operationQueue.push(operation)\n return\n }\n executeOperation(configuration, state, operation)\n}\n\nexport const performDeviceOperation = (\n operation: DeviceOperation,\n currentVersion: string,\n runUpgrade: (options: UpgradeOptions) => Promise<UpgradeResult> = upgrade,\n): Promise<string> =>\n runUpgrade({\n currentVersion,\n target: operation.requestedVersion,\n restart: operation.restart,\n dryRun: false,\n delegated: true,\n }).then((result) => JSON.stringify(result))\n\nconst schedule = (configuration: DeviceConfiguration, state: State, task: Task): void => {\n if (\n state.tasks.has(task.id) ||\n state.completed.has(task.id) ||\n state.queue.some((queued) => queued.id === task.id)\n ) {\n return\n }\n if (task.providerSessionId !== undefined) {\n state.sessions.set(sessionKey(task), task.providerSessionId)\n }\n if (state.tasks.size > 0 || state.operation !== undefined) {\n if (state.queue.length >= 100) {\n state.socket?.close(4008, \"Task queue limit reached\")\n return\n }\n state.queue.push(task)\n return\n }\n execute(configuration, state, task)\n}\n\nconst cancel = (state: State, taskId: TaskId): void => {\n const running = state.tasks.get(taskId)\n if (running !== undefined) {\n running.abort()\n return\n }\n const index = state.queue.findIndex((task) => task.id === taskId)\n if (index !== -1) {\n state.queue.splice(index, 1)\n }\n remember(state, taskId)\n sendTerminal(state, taskId, SocketEvent.make({ _tag: \"TaskCancelled\", taskId }))\n}\n\nconst connect = (\n configuration: DeviceConfiguration,\n state: State,\n): Effect.Effect<void, DeviceConnectionError> =>\n Effect.tryPromise({\n try: (signal) =>\n new Promise<void>((complete) => {\n const socket = new WebSocket(socketUrl(configuration), {\n maxPayload: maxSocketPayloadBytes,\n perMessageDeflate: false,\n })\n const heartbeat = setInterval(() => {\n send(\n state,\n SocketEvent.make({\n _tag: \"DeviceHeartbeat\",\n deviceId: configuration.id,\n status: state.tasks.size > 0 || state.operation !== undefined ? \"busy\" : \"online\",\n }),\n )\n }, 15_000)\n let closed = false\n let queuedMessages = 0\n const close = (): void => {\n if (closed) {\n return\n }\n closed = true\n clearInterval(heartbeat)\n if (state.socket === socket) {\n state.socket = undefined\n }\n complete()\n }\n signal.addEventListener(\n \"abort\",\n () => {\n socket.close()\n close()\n },\n { once: true },\n )\n socket.once(\"open\", () => {\n socket.send(\n JSON.stringify(SocketEvent.make({ _tag: \"Authenticate\", token: configuration.token })),\n )\n })\n socket.on(\"message\", (message: RawData) => {\n if (queuedMessages >= maxQueuedRelayMessages) {\n socket.close(4008, \"Message queue limit reached\")\n return\n }\n queuedMessages += 1\n state.processing = state.processing\n .then(async () => {\n if (closed) {\n return\n }\n const text = Buffer.isBuffer(message)\n ? message.toString(\"utf8\")\n : message instanceof ArrayBuffer\n ? Buffer.from(message).toString(\"utf8\")\n : Array.isArray(message)\n ? Buffer.concat(message).toString(\"utf8\")\n : Buffer.from(message).toString(\"utf8\")\n const event = await Effect.runPromise(\n Effect.try({\n try: () => JSON.parse(text) as unknown,\n catch: () => new DeviceConnectionError({ message: \"Relay sent invalid JSON\" }),\n }).pipe(Effect.flatMap(decodeSocketEvent)),\n )\n if (event._tag === \"Connected\") {\n state.socket = socket\n socket.send(\n JSON.stringify(\n SocketEvent.make({\n _tag: \"DeviceHello\",\n device: describeDevice(\n configuration,\n state.tasks.size > 0 || state.operation !== undefined ? \"busy\" : \"online\",\n ),\n }),\n ),\n )\n for (const payload of state.terminal.values()) {\n socket.send(payload)\n }\n for (const payload of state.operationTerminal.values()) {\n socket.send(payload)\n }\n return\n }\n if (event._tag === \"TaskAssigned\") {\n schedule(configuration, state, event.task)\n return\n }\n if (event._tag === \"CancelTask\") {\n cancel(state, event.taskId)\n return\n }\n if (event._tag === \"TaskSettled\") {\n state.terminal.delete(event.taskId)\n return\n }\n if (event._tag === \"OperationAssigned\") {\n scheduleOperation(configuration, state, event.operation)\n return\n }\n if (event._tag === \"OperationSettled\") {\n state.operationTerminal.delete(event.operationId)\n return\n }\n if (event._tag === \"Error\") {\n console.error(`Relay error: ${event.message}`)\n }\n })\n .catch((cause: unknown) => {\n console.error(\n `Invalid relay event: ${cause instanceof Error ? cause.message : String(cause)}`,\n )\n })\n .finally(() => {\n queuedMessages = Math.max(0, queuedMessages - 1)\n })\n })\n socket.once(\"close\", close)\n socket.once(\"error\", () => socket.close())\n }),\n catch: (cause) =>\n new DeviceConnectionError({\n message: cause instanceof Error ? cause.message : String(cause),\n }),\n })\n\nexport const runDaemon = (\n configuration: DeviceConfiguration,\n): Effect.Effect<void, DeviceConnectionError> => {\n const state: State = {\n socket: undefined,\n processing: Promise.resolve(),\n terminal: new Map(),\n queue: [],\n sessions: new Map(),\n tasks: new Map(),\n completed: new Set(),\n operation: undefined,\n operationQueue: [],\n operationTerminal: new Map(),\n completedOperations: new Set(),\n }\n return connect(configuration, state).pipe(\n Effect.repeat({ schedule: Schedule.spaced(\"2 seconds\") }),\n Effect.ensuring(\n Effect.sync(() => {\n state.socket?.close()\n for (const controller of state.tasks.values()) {\n controller.abort()\n }\n }),\n ),\n )\n}\n",
23
23
  "import { RelayClient } from \"@cohall/client\"\nimport { TaskId, ThreadId, version } from \"@cohall/protocol\"\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\"\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\"\nimport { Effect } from \"effect\"\nimport * as z from \"zod/v4\"\nimport type { ClientConfiguration } from \"./config.ts\"\nimport { createDelegation, taskResult, threadContext, waitForTask } from \"./delegation.ts\"\n\nconst output = (value: unknown) => ({\n content: [{ type: \"text\" as const, text: JSON.stringify(value, null, 2) }],\n})\n\nexport const runMcp = async (configuration: ClientConfiguration): Promise<void> => {\n const client = RelayClient.make({\n baseUrl: configuration.relayUrl,\n token: configuration.token,\n })\n const server = new McpServer({ name: \"cohall\", version })\n\n server.registerTool(\n \"list_devices\",\n {\n title: \"List Cohall devices\",\n description:\n \"List devices, their availability, local providers, capabilities, and allowed workspaces.\",\n inputSchema: {},\n },\n async () => output(await Effect.runPromise(client.devices())),\n )\n\n server.registerTool(\n \"delegate\",\n {\n title: \"Delegate work to another device\",\n description:\n \"Send focused work to another Cohall device. When the request depends on the current conversation, distill its motivation, relevant facts, prior findings, constraints, and desired decision into context; Cohall cannot read the host transcript. Never forward unrelated transcript content. Reuse thread_id for related follow-ups.\",\n inputSchema: {\n prompt: z.string().min(1).max(131_072),\n target: z.string().optional().describe(\"Device name, @name, hostname, or ID\"),\n provider: z.enum([\"codex\", \"claude-code\", \"opencode\"]).default(\"codex\"),\n context: z\n .string()\n .max(131_072)\n .optional()\n .describe(\n \"Distilled context the target needs: why the user is asking, relevant facts and prior findings, constraints, and the intended decision. The calling agent must supply this when the prompt depends on its conversation; omit it only for a self-contained task.\",\n ),\n thread_id: z.string().uuid().optional(),\n workspace: z.string().max(4096).optional(),\n wait: z.boolean().default(true),\n timeout_seconds: z.number().int().min(5).max(86_400).default(900),\n },\n },\n async ({ prompt, target, provider, context, thread_id, workspace, wait, timeout_seconds }) => {\n const task = await Effect.runPromise(\n createDelegation(client, configuration, {\n prompt,\n provider,\n ...(target === undefined ? {} : { target }),\n ...(context === undefined ? {} : { context }),\n ...(thread_id === undefined ? {} : { threadId: ThreadId.make(thread_id) }),\n ...(workspace === undefined ? {} : { workspace }),\n }),\n )\n return output(\n taskResult(\n wait ? await Effect.runPromise(waitForTask(client, task, timeout_seconds)) : task,\n ),\n )\n },\n )\n\n server.registerTool(\n \"task_status\",\n {\n title: \"Get delegated task status\",\n description: \"Read the current state and result of a Cohall task.\",\n inputSchema: { task_id: z.string().uuid() },\n },\n async ({ task_id }) =>\n output(taskResult(await Effect.runPromise(client.getTask(TaskId.make(task_id))))),\n )\n\n server.registerTool(\n \"task_trace\",\n {\n title: \"Trace a delegated task\",\n description:\n \"Read the redacted relay and device lifecycle for troubleshooting a Cohall task.\",\n inputSchema: { task_id: z.string().uuid() },\n },\n async ({ task_id }) => output(await Effect.runPromise(client.traceTask(TaskId.make(task_id)))),\n )\n\n server.registerTool(\n \"wait_task\",\n {\n title: \"Wait for delegated work\",\n description: \"Wait for a Cohall task to finish and return its final result.\",\n inputSchema: {\n task_id: z.string().uuid(),\n timeout_seconds: z.number().int().min(5).max(86_400).default(900),\n },\n },\n async ({ task_id, timeout_seconds }) => {\n const task = await Effect.runPromise(client.getTask(TaskId.make(task_id)))\n return output(taskResult(await Effect.runPromise(waitForTask(client, task, timeout_seconds))))\n },\n )\n\n server.registerTool(\n \"cancel_task\",\n {\n title: \"Cancel delegated work\",\n description: \"Request cancellation and return its acknowledged or pending state.\",\n inputSchema: { task_id: z.string().uuid() },\n },\n async ({ task_id }) =>\n output(taskResult(await Effect.runPromise(client.cancelTask(TaskId.make(task_id))))),\n )\n\n server.registerTool(\n \"thread_context\",\n {\n title: \"Read a Cohall thread\",\n description: \"Read shared task prompts and final results for a cross-device thread.\",\n inputSchema: { thread_id: z.string().uuid() },\n },\n async ({ thread_id }) =>\n output(await Effect.runPromise(threadContext(client, ThreadId.make(thread_id)))),\n )\n\n await server.connect(new StdioServerTransport())\n}\n"
24
24
  ],
25
- "mappings": "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",
26
- "debugId": "42161A8EF448D66964756E2164756E21",
25
+ "mappings": "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",
26
+ "debugId": "2205AFF1105B05BB64756E2164756E21",
27
27
  "names": []
28
28
  }