@akshar5/cohall 0.10.2 → 0.11.0
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/CHANGELOG.md +7 -0
- package/README.md +3 -1
- package/bin/cohall.js +489 -107
- package/bin/cohall.js.map +8 -7
- package/docs/install.md +15 -3
- package/docs/integrations.md +31 -2
- package/docs/onboarding.md +116 -0
- package/package.json +1 -1
package/bin/cohall.js.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 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/grok-bot.ts", "../apps/device/src/bot-replies.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/task-attachments.ts", "../apps/device/src/bounded-file.ts", "../apps/device/src/mcp-diagnostics.ts", "../apps/device/src/daemon.ts", "../apps/device/src/mcp.ts", "../apps/device/src/mcp-build-notice.ts"],
|
|
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/grok-bot.ts", "../apps/device/src/bot-replies.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/task-attachments.ts", "../apps/device/src/bounded-file.ts", "../apps/device/src/mcp-diagnostics.ts", "../apps/device/src/mcp-host-diagnostics.ts", "../apps/device/src/daemon.ts", "../apps/device/src/mcp.ts", "../apps/device/src/mcp-build-notice.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import { Effect, 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\nexport const maxAttachmentBytes = 256 * 1024\nexport const maxTaskAttachments = 2\nexport const maxProgressNoteBytes = 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 BotId = bounded(256).pipe(Schema.brand(\"BotId\"))\nexport type BotId = typeof BotId.Type\n\nexport const Bot = Schema.Struct({\n id: BotId,\n name: bounded(128),\n description: Schema.optionalKey(optionalText(512)),\n})\nexport interface Bot extends Schema.Schema.Type<typeof Bot> {}\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 TaskRequestId = uuid(\"TaskRequestId\")\nexport type TaskRequestId = typeof TaskRequestId.Type\nexport const TaskRunId = uuid(\"TaskRunId\")\nexport type TaskRunId = typeof TaskRunId.Type\nexport const ClarificationId = uuid(\"ClarificationId\")\nexport type ClarificationId = typeof ClarificationId.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 TaskDeadline = Timestamp.check(\n Schema.makeFilter((value) => {\n const time = Date.parse(value)\n return Number.isFinite(time) && new Date(time).toISOString().slice(0, 19) === value.slice(0, 19)\n ? undefined\n : \"Expected a valid ISO-8601 UTC deadline\"\n }),\n)\nexport const taskDeadlineError = \"Task deadline exceeded\"\nexport const taskDeadlinePassed = (task: { readonly expiresAt?: Timestamp }, time = Date.now()) =>\n task.expiresAt !== undefined && Date.parse(task.expiresAt) <= time\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\", \"grok-bot\"])\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 \"needs_input\",\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([\n ...TaskStatus.literals,\n \"requeued\",\n \"input_requested\",\n \"input_answered\",\n])\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, Provider.literals.length),\n bots: Schema.optionalKey(boundedArray(Bot, 256)),\n capabilities: boundedArray(Capability, 64),\n workspaces: boundedArray(Workspace, 64),\n version: bounded(32),\n lastSeenAt: Timestamp,\n connectedAt: Schema.optionalKey(Timestamp),\n queue: Schema.optionalKey(\n Schema.Struct({\n queued: count,\n oldestQueuedAt: Schema.optionalKey(Timestamp),\n }),\n ),\n})\nexport interface Device extends Schema.Schema.Type<typeof Device> {}\n\nexport const maxDevicePageDevices = 16\nexport const maxDevicePageResponseBytes = 3 * 1024 * 1024\nexport const DevicePage = Schema.Struct({\n devices: boundedArray(Device, maxDevicePageDevices),\n nextCursor: Schema.optionalKey(DeviceId),\n}).check(\n Schema.makeFilter((page) => {\n let previous: DeviceId | undefined\n for (const device of page.devices) {\n if (previous !== undefined && device.id <= previous)\n return \"Device pages must be ordered by ID\"\n previous = device.id\n }\n return page.nextCursor === undefined || page.nextCursor === previous\n ? undefined\n : \"The next cursor must be the last device ID\"\n }),\n)\nexport interface DevicePage extends Schema.Schema.Type<typeof DevicePage> {}\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 AttachmentName = Schema.String.check(\n Schema.isMinLength(1),\n Schema.isMaxLength(128),\n Schema.makeFilter((name) =>\n name !== \".\" &&\n name !== \"..\" &&\n !/[<>:\"/\\\\|?*]/.test(name) &&\n !/[. ]$/.test(name) &&\n !/^(?:CON|PRN|AUX|NUL|CONIN\\$|CONOUT\\$|COM[1-9¹²³]|LPT[1-9¹²³])(?:\\.|$)/i.test(name) &&\n new TextEncoder().encode(name).byteLength <= 128 &&\n [...name].every((character) => character.charCodeAt(0) >= 32 && character.charCodeAt(0) !== 127)\n ? undefined\n : \"Use a file name without path separators or control characters\",\n ),\n)\nexport type AttachmentName = typeof AttachmentName.Type\n\nexport const AttachmentDirection = Schema.Literals([\"input\", \"output\"])\nexport type AttachmentDirection = typeof AttachmentDirection.Type\n\nexport const TaskAttachment = Schema.Struct({\n name: AttachmentName,\n direction: AttachmentDirection,\n bytes: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: maxAttachmentBytes })),\n})\nexport interface TaskAttachment extends Schema.Schema.Type<typeof TaskAttachment> {}\n\nexport const InputAttachment = Schema.Struct({\n name: AttachmentName,\n data: Schema.String.check(\n Schema.isMaxLength(Math.ceil(maxAttachmentBytes / 3) * 4),\n Schema.makeFilter((value) =>\n value.length > 0 &&\n value.length % 4 === 0 &&\n (value.length / 4) * 3 - (value.endsWith(\"==\") ? 2 : value.endsWith(\"=\") ? 1 : 0) <=\n maxAttachmentBytes &&\n /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(value)\n ? undefined\n : \"Expected nonempty base64 data\",\n ),\n ),\n})\nexport interface InputAttachment extends Schema.Schema.Type<typeof InputAttachment> {}\n\nconst attachments = boundedArray(InputAttachment, maxTaskAttachments).check(\n Schema.makeFilter((files) =>\n new Set(files.map((file) => file.name.normalize(\"NFC\").toLocaleLowerCase(\"en-US\"))).size ===\n files.length\n ? undefined\n : \"Attachment names must be unique\",\n ),\n)\n\nconst validBotTarget = (input: {\n readonly provider?: Provider\n readonly botId?: BotId\n readonly workspace?: string\n}) => {\n const provider = input.provider ?? (input.botId === undefined ? \"codex\" : \"grok-bot\")\n if (provider === \"grok-bot\" && input.workspace !== undefined) {\n return \"Grok Bots use their own computer context; omit workspace\"\n }\n return (provider === \"grok-bot\") === (input.botId !== undefined)\n ? undefined\n : \"The grok-bot provider requires botId; other providers cannot select a bot\"\n}\n\nexport const TaskProgressInput = Schema.Struct({\n note: bounded(maxProgressNoteBytes)\n .check(\n Schema.makeFilter((value) =>\n value.trim().length > 0 &&\n new TextEncoder().encode(value).byteLength <= maxProgressNoteBytes\n ? undefined\n : `Expected a nonblank progress note of at most ${maxProgressNoteBytes} UTF-8 bytes`,\n ),\n )\n .pipe(Schema.brand(\"TaskProgressNote\")),\n})\nexport interface TaskProgressInput extends Schema.Schema.Type<typeof TaskProgressInput> {}\n\nexport const TaskProgress = Schema.Struct({ ...TaskProgressInput.fields, at: Timestamp })\nexport interface TaskProgress extends Schema.Schema.Type<typeof TaskProgress> {}\n\nexport const maxClarificationBytes = 4096\nexport const maxTaskClarifications = 10\nconst clarificationText = bounded(maxClarificationBytes)\n .check(\n Schema.makeFilter((value) =>\n value.trim().length > 0 && new TextEncoder().encode(value).byteLength <= maxClarificationBytes\n ? undefined\n : `Expected nonblank text of at most ${maxClarificationBytes} UTF-8 bytes`,\n ),\n )\n .pipe(Schema.brand(\"ClarificationText\"))\n\nexport const RequestTaskInput = Schema.Struct({ runId: TaskRunId, question: clarificationText })\nexport interface RequestTaskInput extends Schema.Schema.Type<typeof RequestTaskInput> {}\nexport const AnswerTaskInput = Schema.Struct({\n requestId: ClarificationId,\n answer: clarificationText,\n})\nexport interface AnswerTaskInput extends Schema.Schema.Type<typeof AnswerTaskInput> {}\nexport const TaskClarification = Schema.Struct({\n id: ClarificationId,\n question: RequestTaskInput.fields.question,\n at: Timestamp,\n answer: Schema.optionalKey(Schema.Struct({ text: AnswerTaskInput.fields.answer, at: Timestamp })),\n})\nexport interface TaskClarification extends Schema.Schema.Type<typeof TaskClarification> {}\nconst clarifications = boundedArray(TaskClarification, maxTaskClarifications)\n\nconst validClarificationState = (task: {\n readonly status: TaskStatus\n readonly clarifications?: ReadonlyArray<TaskClarification>\n}) =>\n task.status !== \"needs_input\" ||\n (task.clarifications?.at(-1) !== undefined && task.clarifications.at(-1)?.answer === undefined)\n ? undefined\n : \"A task awaiting input must have an unanswered question\"\n\nexport const Task = Schema.Struct({\n id: TaskId,\n runId: Schema.optionalKey(TaskRunId),\n threadId: ThreadId,\n prompt: bounded(131_072),\n context: Schema.optionalKey(optionalText(131_072)),\n provider: Provider,\n botId: Schema.optionalKey(BotId),\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 inputAttachmentNames: Schema.optionalKey(boundedArray(AttachmentName, maxTaskAttachments)),\n error: Schema.optionalKey(optionalText(16_384)),\n progress: Schema.optionalKey(TaskProgress),\n clarifications: Schema.optionalKey(clarifications),\n createdAt: Timestamp,\n updatedAt: Timestamp,\n startedAt: Schema.optionalKey(Timestamp),\n completedAt: Schema.optionalKey(Timestamp),\n expiresAt: Schema.optionalKey(TaskDeadline),\n}).check(Schema.makeFilter(validBotTarget), Schema.makeFilter(validClarificationState))\nexport interface Task extends Schema.Schema.Type<typeof Task> {}\n\nexport const TaskInboxItem = Schema.Struct({\n id: TaskId,\n threadId: ThreadId,\n targetDeviceId: DeviceId,\n provider: Provider,\n botId: Schema.optionalKey(BotId),\n status: Schema.Literals([\"needs_input\", \"completed\", \"failed\", \"cancelled\"]),\n promptPreview: optionalText(320),\n resultPreview: Schema.optionalKey(optionalText(1024)),\n errorPreview: Schema.optionalKey(optionalText(1024)),\n completedAt: Schema.optionalKey(Timestamp),\n inputRequest: Schema.optionalKey(TaskClarification),\n}).check(\n Schema.makeFilter((item) =>\n item.status === \"needs_input\"\n ? item.inputRequest !== undefined &&\n item.inputRequest.answer === undefined &&\n item.completedAt === undefined\n ? undefined\n : \"An input request must have an unanswered question and no completion time\"\n : item.completedAt !== undefined && item.inputRequest === undefined\n ? undefined\n : \"A completion must have a completion time and no input request\",\n ),\n)\nexport interface TaskInboxItem extends Schema.Schema.Type<typeof TaskInboxItem> {}\n\nexport const TaskInbox = Schema.Struct({\n items: boundedArray(TaskInboxItem, 20),\n hasMore: Schema.Boolean,\n})\nexport interface TaskInbox extends Schema.Schema.Type<typeof TaskInbox> {}\n\nexport const taskSlot = (task: Pick<Task, \"provider\" | \"botId\">): string =>\n task.provider === \"grok-bot\" ? `grok-bot:${task.botId}` : \"cli\"\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 needs_input: Schema.optionalKey(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, Provider.literals.length),\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, Provider.literals.length),\n devices: Schema.Array(DeviceUsage),\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 botId: Schema.optionalKey(BotId),\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 expiresAt: Schema.optionalKey(TaskDeadline),\n events: boundedArray(TaskTraceEvent, 100),\n truncated: Schema.Boolean,\n error: Schema.optionalKey(optionalText(16_384)),\n progress: Schema.optionalKey(TaskProgress),\n clarifications: Schema.optionalKey(clarifications),\n}).check(Schema.makeFilter(validBotTarget), Schema.makeFilter(validClarificationState))\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 requestId: Schema.optionalKey(TaskRequestId),\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 botId: Schema.optionalKey(BotId),\n targetDeviceId: Schema.optionalKey(DeviceId),\n parentTaskId: Schema.optionalKey(TaskId),\n expiresAt: Schema.optionalKey(TaskDeadline),\n workspace: Schema.optionalKey(bounded(4096)),\n attachments: Schema.optionalKey(attachments),\n}).check(Schema.makeFilter(validBotTarget))\nexport interface CreateTaskInput extends Schema.Schema.Type<typeof CreateTaskInput> {}\n\nexport const SocketEvent = Schema.TaggedUnion({\n Authenticate: { token: bounded(256) },\n Connected: {\n serverVersion: bounded(32),\n connectedAt: Timestamp,\n taskAttachments: Schema.optionalKey(Schema.Boolean),\n taskClarification: Schema.optionalKey(Schema.Boolean),\n taskDeadlines: Schema.optionalKey(Schema.Boolean),\n },\n DeviceHello: { device: Device },\n DeviceHeartbeat: {\n deviceId: DeviceId,\n status: DeviceStatus,\n bots: Schema.optionalKey(boundedArray(Bot, 256)),\n },\n TaskAssigned: { task: Task },\n TaskAccepted: { taskId: TaskId, runId: Schema.optionalKey(TaskRunId) },\n TaskFinished: {\n taskId: TaskId,\n runId: Schema.optionalKey(TaskRunId),\n result: optionalText(131_072),\n attachments: Schema.optionalKey(attachments),\n providerSessionId: Schema.optionalKey(bounded(4096)),\n },\n TaskInputRequested: {\n taskId: TaskId,\n ...RequestTaskInput.fields,\n },\n TaskFailed: { taskId: TaskId, runId: Schema.optionalKey(TaskRunId), error: bounded(16_384) },\n TaskCancelled: { taskId: TaskId, runId: Schema.optionalKey(TaskRunId) },\n TaskSettled: { taskId: TaskId, runId: Schema.optionalKey(TaskRunId) },\n CancelTask: { taskId: TaskId, runId: Schema.optionalKey(TaskRunId) },\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 decodeTaskProgressInput = Schema.decodeUnknownEffect(TaskProgressInput)\nexport const decodeRequestTaskInput = Schema.decodeUnknownEffect(RequestTaskInput)\nexport const decodeAnswerTaskInput = Schema.decodeUnknownEffect(AnswerTaskInput)\nexport const decodeExchangePairingInput = Schema.decodeUnknownEffect(ExchangePairingInput)\nexport const decodeCreateTaskInput = (input: unknown) =>\n Schema.decodeUnknownEffect(CreateTaskInput)(input).pipe(\n Effect.map(\n (task): CreateTaskInput => ({\n ...task,\n provider: task.provider ?? (task.botId === undefined ? \"codex\" : \"grok-bot\"),\n }),\n ),\n )\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 { isAbsolute, 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\nexport const 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 const dataHome = process.env.XDG_DATA_HOME\n return join(\n dataHome !== undefined && isAbsolute(dataHome) ? dataHome : join(homedir(), \".local\", \"share\"),\n \"cohall\",\n )\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",
|
|
@@ -10,25 +10,26 @@
|
|
|
10
10
|
"import {\n AuthSessionId,\n AttachmentName,\n AttachmentDirection,\n Device,\n DeviceId,\n OperationId,\n SocketEvent,\n maxSocketPayloadBytes,\n maxAttachmentBytes,\n TaskId,\n ThreadId,\n decodeCreatePairingInput,\n decodeCreateTaskInput,\n decodeTaskProgressInput,\n decodeRequestTaskInput,\n decodeAnswerTaskInput,\n decodeCreateUpgradeOperationsInput,\n decodeExchangePairingInput,\n decodeSocketEvent,\n now,\n isTerminalTask,\n taskSlot,\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, Schedule } 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 ${Math.floor(limit / 1024)} 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\nexport const maxTaskRequestBodyBytes = 3 * 1024 * 1024\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 pathname = new URL(request.url ?? \"/\", \"http://cohall.local\").pathname\n const payload = await requestBody(\n request,\n pathname === \"/api/tasks\" ? maxTaskRequestBodyBytes : maxAttachmentBytes,\n )\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\nexport const resolveDelegation = (\n input: CreateTaskInput,\n sourceDeviceId?: DeviceIdType,\n): Effect.Effect<\n { readonly input: CreateTaskInput; readonly targetDeviceId: DeviceIdType },\n RequestError,\n RelayStore.Service\n> =>\n Effect.gen(function* () {\n const store = yield* RelayStore.Service\n const ancestors: Array<Task> = []\n const seen = new Set<TaskId>()\n let nextParentId = input.parentTaskId\n while (nextParentId !== undefined && !seen.has(nextParentId)) {\n const parentId = nextParentId\n seen.add(parentId)\n const parent = yield* store.getTask(parentId).pipe(\n Effect.catch((cause) => {\n const missing = cause.message === `Unknown task ${parentId}`\n if (missing && ancestors.length > 0) return Effect.succeed(undefined)\n return Effect.fail(\n new RequestError({ status: missing ? 404 : 500, message: cause.message }),\n )\n }),\n )\n if (parent === undefined) break\n ancestors.push(parent)\n nextParentId = parent.parentTaskId\n }\n const parent = ancestors[0]\n if (\n parent !== undefined &&\n input.threadId !== undefined &&\n input.threadId !== parent.threadId\n ) {\n return yield* new RequestError({\n status: 400,\n message: \"A child task must use its parent's thread\",\n })\n }\n const resolvedInput = parent === undefined ? input : { ...input, threadId: parent.threadId }\n const devices = yield* store\n .listDevices()\n .pipe(Effect.mapError((cause) => new RequestError({ status: 500, message: cause.message })))\n const provider = input.provider ?? (input.botId === undefined ? \"codex\" : \"grok-bot\")\n if (input.expiresAt !== undefined && provider === \"grok-bot\")\n return yield* new RequestError({\n status: 400,\n message: \"Task deadlines require a coding provider\",\n })\n const hasAttachments = (input.attachments?.length ?? 0) > 0\n if (hasAttachments && provider === \"grok-bot\") {\n return yield* new RequestError({\n status: 400,\n message: \"File attachments require a coding provider\",\n })\n }\n const slot = taskSlot({\n provider,\n ...(input.botId === undefined ? {} : { botId: input.botId }),\n })\n const blocked = new Set(\n ancestors\n .filter(\n (task) =>\n !isTerminalTask(task) && task.status !== \"needs_input\" && taskSlot(task) === slot,\n )\n .map((task) => task.targetDeviceId),\n )\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 if (\n input.expiresAt !== undefined &&\n !target.capabilities.some((capability) => capability.id === \"task-deadlines\")\n )\n return yield* new RequestError({\n status: 409,\n message: `${target.name} does not support task deadlines; upgrade its Cohall worker`,\n })\n if (\n hasAttachments &&\n !target.capabilities.some((capability) => capability.id === \"task-attachments\")\n ) {\n return yield* new RequestError({\n status: 409,\n message: `${target.name} does not support file attachments; upgrade its Cohall worker`,\n })\n }\n if (input.botId !== undefined && !target.bots?.some((bot) => bot.id === input.botId)) {\n return yield* new RequestError({\n status: 404,\n message: `${target.name} does not advertise bot ${input.botId}; refresh the bot list`,\n })\n }\n if (blocked.has(target.id)) {\n return yield* new RequestError({\n status: 409,\n message: `${target.name} cannot run this task while an unfinished parent occupies the same worker slot; select another device or bot`,\n })\n }\n return { input: resolvedInput, targetDeviceId: target.id }\n }\n const providerDevices = devices.filter(\n (device) =>\n device.providers.includes(provider) &&\n (input.expiresAt === undefined ||\n device.capabilities.some((capability) => capability.id === \"task-deadlines\")) &&\n (input.botId === undefined || device.bots?.some((bot) => bot.id === input.botId)),\n )\n const candidates = hasAttachments\n ? providerDevices.filter((device) =>\n device.capabilities.some((capability) => capability.id === \"task-attachments\"),\n )\n : providerDevices\n if (input.botId !== undefined && candidates.length > 1) {\n return yield* new RequestError({\n status: 409,\n message: `Bot ${input.botId} is advertised by more than one device; select a device`,\n })\n }\n const selected = candidates\n .filter((device) => !blocked.has(device.id))\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:\n candidates.length > 0\n ? \"No available delegation target avoids an unfinished parent's worker slot; select another device or bot\"\n : hasAttachments && providerDevices.length > 0\n ? `No Cohall device advertising the ${provider} provider supports file attachments; upgrade a Cohall worker`\n : input.expiresAt !== undefined\n ? `No Cohall device advertising the ${provider} provider supports task deadlines; upgrade a Cohall worker`\n : input.botId === undefined\n ? `No Cohall device advertises the ${provider} provider`\n : `No Cohall device advertises bot ${input.botId}; refresh the bot list`,\n })\n }\n return { input: resolvedInput, targetDeviceId: selected.id }\n })\n\ntype Principal = \"owner\" | AuthSession\n\nexport const canReadTaskAttachments = (\n principal: Principal,\n task: Pick<Task, \"targetDeviceId\">,\n): boolean =>\n principal === \"owner\" || principal.role === \"client\" || principal.deviceId === task.targetDeviceId\n\nconst requiresClarificationSupport = (task: Pick<Task, \"provider\" | \"runId\" | \"clarifications\">) =>\n (task.clarifications?.length ?? 0) > 0 ||\n (task.provider === \"grok-bot\" && task.runId !== undefined)\n\nexport const canDispatchTaskToDevice = (\n task: Pick<Task, \"provider\" | \"runId\" | \"inputAttachmentNames\" | \"clarifications\" | \"expiresAt\">,\n device: Pick<Device, \"capabilities\"> | undefined,\n): boolean =>\n (task.expiresAt === undefined ||\n device?.capabilities.some((capability) => capability.id === \"task-deadlines\") === true) &&\n ((task.inputAttachmentNames?.length ?? 0) === 0 ||\n device?.capabilities.some((capability) => capability.id === \"task-attachments\") === true) &&\n (!requiresClarificationSupport(task) ||\n device?.capabilities.some((capability) => capability.id === \"task-clarification\") === true)\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 (\n request: Request,\n allowDevice = false,\n ): Promise<Principal | undefined> => {\n const authorization = request.headers.get(\"authorization\")\n if (authorization?.startsWith(\"Bearer \") !== true) {\n return undefined\n }\n const token = authorization.slice(\"Bearer \".length)\n return (\n (await authenticate(token, \"client\")) ??\n (allowDevice ? authenticate(token, \"device\") : undefined)\n )\n }\n\n const sendCancellation = (task: Task): void => {\n hub.sendToDevice(\n task.targetDeviceId,\n SocketEvent.make({\n _tag: \"CancelTask\",\n taskId: task.id,\n ...(task.runId === undefined ? {} : { runId: task.runId }),\n }),\n )\n }\n\n const dispatch = async (task: Task): Promise<Task> => {\n const store = await run(RelayStore.Service)\n if (\n task.expiresAt !== undefined ||\n (task.inputAttachmentNames?.length ?? 0) > 0 ||\n requiresClarificationSupport(task)\n ) {\n const devices = await Effect.runPromise(store.listDevices())\n const target = devices.find((device) => device.id === task.targetDeviceId)\n if (\n task.expiresAt !== undefined &&\n !target?.capabilities.some((capability) => capability.id === \"task-deadlines\")\n )\n return task\n if (\n requiresClarificationSupport(task) &&\n !target?.capabilities.some((capability) => capability.id === \"task-clarification\")\n )\n return task\n if (!canDispatchTaskToDevice(task, target)) {\n return Effect.runPromise(\n store.failTask(\n task.id,\n task.targetDeviceId,\n \"Target worker no longer supports task file attachments. Upgrade the worker and retry.\",\n task.runId,\n ),\n )\n }\n }\n if (!hub.hasDevice(task.targetDeviceId)) return task\n const assigned = await Effect.runPromise(store.assignTask(task.id))\n if (assigned.status !== \"assigned\") {\n if (assigned.status === \"cancelling\") sendCancellation(assigned)\n return assigned\n }\n const assignment = SocketEvent.make({ _tag: \"TaskAssigned\", task: assigned })\n if (Buffer.byteLength(JSON.stringify(assignment)) > maxSocketPayloadBytes) {\n return Effect.runPromise(\n store.failTask(\n assigned.id,\n assigned.targetDeviceId,\n \"Task prompt, context, and clarification history exceed the 1 MiB transfer limit. Retry with a shorter prompt or context.\",\n assigned.runId,\n ),\n )\n }\n if (\n hub.sendToDevice(\n assigned.targetDeviceId,\n assignment,\n assigned.provider === \"grok-bot\"\n ? () => Effect.runSync(store.markTaskDispatched(assigned.id))\n : undefined,\n )\n ) {\n return assigned\n }\n return Effect.runPromise(store.rollbackAssignment(task.id))\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 dispatchPendingOperations = async (deviceId: DeviceIdType): Promise<void> => {\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 dispatchPendingTasks = 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 sendCancellation(task)\n } else {\n await dispatch(task)\n }\n }\n }\n\n const dispatchPending = async (deviceId: DeviceIdType): Promise<void> => {\n await dispatchPendingOperations(deviceId)\n await dispatchPendingTasks(deviceId)\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({\n _tag: \"Connected\",\n serverVersion: version,\n connectedAt: now(),\n taskAttachments: true,\n taskClarification: true,\n taskDeadlines: true,\n }),\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 // Reconcile work the daemon may still be running before an upgrade can occupy the device.\n await dispatchPendingTasks(device.id)\n await dispatchPendingOperations(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, runId?: Task[\"runId\"]): void => {\n socket.send(\n JSON.stringify(\n SocketEvent.make({\n _tag: \"TaskSettled\",\n taskId,\n ...(runId === undefined ? {} : { runId }),\n }),\n ),\n )\n }\n const settleOperation = (operationId: OperationId): void => {\n socket.send(JSON.stringify(SocketEvent.make({ _tag: \"OperationSettled\", operationId })))\n }\n const taskTerminal =\n event._tag === \"TaskFinished\" ||\n event._tag === \"TaskInputRequested\" ||\n event._tag === \"TaskFailed\" ||\n event._tag === \"TaskCancelled\"\n const operationTerminal = event._tag === \"OperationFinished\" || event._tag === \"OperationFailed\"\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(\n deviceId,\n event.status === \"busy\" ? \"busy\" : \"online\",\n event.bots,\n )\n }\n return\n case \"TaskAccepted\":\n yield* store.acceptTask(event.taskId, deviceId, event.runId)\n return\n case \"TaskFinished\":\n yield* store.finishTask(\n event.taskId,\n deviceId,\n event.result,\n event.providerSessionId,\n event.attachments,\n event.runId,\n )\n return\n case \"TaskInputRequested\": {\n yield* store.pauseTaskForInput(event.taskId, deviceId, {\n runId: event.runId,\n question: event.question,\n })\n return\n }\n case \"TaskFailed\":\n yield* store.failTask(event.taskId, deviceId, event.error, event.runId)\n return\n case \"TaskCancelled\":\n yield* store.acknowledgeCancellation(event.taskId, deviceId, event.runId)\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 // History pruning must not leave workers replaying replies that can no longer be saved.\n if (\n cause instanceof RelayStore.PersistenceError &&\n ((taskTerminal && cause.missingRecord === \"task\") ||\n (operationTerminal && cause.missingRecord === \"operation\"))\n )\n return true\n sendError(socket, \"event_failed\", cause instanceof Error ? cause.message : String(cause))\n return false\n })\n if (processed && taskTerminal) {\n settle(event.taskId, event.runId)\n await dispatchPending(deviceId)\n }\n if (processed && operationTerminal) {\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({\n ok: true,\n version,\n taskAttachments: true,\n taskProgress: true,\n taskClarification: true,\n taskDeadlines: true,\n taskIdempotency: true,\n })\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 if (url.pathname === \"/api/device/credential\" && request.method === \"GET\") {\n const authorization = request.headers.get(\"authorization\")\n const token =\n authorization?.startsWith(\"Bearer \") === true\n ? authorization.slice(\"Bearer \".length)\n : undefined\n if (token === undefined || (await authenticate(token, \"device\")) === undefined) {\n return json({ error: \"Unauthorized\" }, 401)\n }\n return json({ ok: true })\n }\n\n const attachmentRoute =\n request.method === \"GET\" &&\n /^\\/api\\/tasks\\/[^/]+\\/attachments(?:\\/[^/]+)?$/.test(url.pathname)\n const progressRoute =\n request.method === \"POST\" && /^\\/api\\/tasks\\/[^/]+\\/progress$/.test(url.pathname)\n const inputRoute =\n request.method === \"POST\" && /^\\/api\\/tasks\\/[^/]+\\/input$/.test(url.pathname)\n const principal = await principalFor(request, attachmentRoute || progressRoute || inputRoute)\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/page\" && request.method === \"GET\") {\n const after = url.searchParams.get(\"after\")\n return json(\n yield* store.listDevicePage(after === null ? undefined : yield* pathId(DeviceId, after)),\n )\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 requestedInput = yield* body(request, decodeCreateTaskInput)\n const existing = yield* store.findDelegation(requestedInput, principal)\n if (existing !== undefined) return json(existing)\n const { input, targetDeviceId: target } = yield* resolveDelegation(\n requestedInput,\n sourceDeviceId,\n )\n const providerSessionId =\n input.threadId === undefined || input.provider === \"grok-bot\"\n ? undefined\n : yield* store.sessionFor(input.threadId, target, input.provider ?? \"codex\")\n const task = yield* store.createDelegation(\n input,\n target,\n principal,\n providerSessionId,\n requestedInput,\n )\n return json(yield* Effect.tryPromise(() => dispatch(task)), 201)\n }\n if (url.pathname === \"/api/inbox\" && request.method === \"GET\") {\n return json(yield* store.inboxFor(principal))\n }\n const acknowledge = url.pathname.match(/^\\/api\\/inbox\\/([^/]+)\\/ack$/)\n if (request.method === \"POST\" && acknowledge?.[1] !== undefined) {\n return json(\n yield* store.acknowledgeCompletion(yield* pathId(TaskId, acknowledge[1]), principal),\n )\n }\n const attachments = url.pathname.match(/^\\/api\\/tasks\\/([^/]+)\\/attachments$/)\n if (request.method === \"GET\" && attachments?.[1] !== undefined) {\n const id = yield* pathId(TaskId, attachments[1])\n const task = yield* store.getTask(id)\n if (!canReadTaskAttachments(principal, task)) {\n return yield* new RequestError({\n status: 403,\n message: \"Device cannot read this task's attachments\",\n })\n }\n return json(yield* store.listAttachments(id))\n }\n const attachment = url.pathname.match(/^\\/api\\/tasks\\/([^/]+)\\/attachments\\/([^/]+)$/)\n if (\n attachment?.[1] !== undefined &&\n attachment[2] !== undefined &&\n request.method === \"GET\"\n ) {\n const id = yield* pathId(TaskId, attachment[1])\n const name = yield* Effect.try({\n try: () => decodeURIComponent(attachment[2]!),\n catch: () => new RequestError({ status: 400, message: \"Invalid attachment name\" }),\n }).pipe(Effect.flatMap((value) => pathId(AttachmentName, value)))\n const task = yield* store.getTask(id)\n if (!canReadTaskAttachments(principal, task)) {\n return yield* new RequestError({\n status: 403,\n message: \"Device cannot read this task's attachments\",\n })\n }\n const directionInput = url.searchParams.get(\"direction\")\n const direction =\n directionInput === null ? undefined : yield* pathId(AttachmentDirection, directionInput)\n const data = yield* store.readAttachment(id, name, direction)\n return new Response(new Uint8Array(data), {\n headers: {\n \"content-type\": \"application/octet-stream\",\n \"cache-control\": \"no-store\",\n \"x-content-type-options\": \"nosniff\",\n },\n })\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 progress = url.pathname.match(/^\\/api\\/tasks\\/([^/]+)\\/progress$/)\n if (request.method === \"POST\" && progress?.[1] !== undefined) {\n const id = yield* pathId(TaskId, progress[1])\n const input = yield* body(request, decodeTaskProgressInput)\n const task = yield* store.getTask(id)\n const deviceId = principal === \"owner\" ? task.targetDeviceId : principal.deviceId\n if (deviceId === undefined) {\n return yield* new RequestError({\n status: 403,\n message: \"Only the target device can report progress\",\n })\n }\n return json(yield* store.reportTaskProgress(id, deviceId, input.note))\n }\n const cancel = url.pathname.match(/^\\/api\\/tasks\\/([^/]+)\\/cancel$/)\n const inputRequest = url.pathname.match(/^\\/api\\/tasks\\/([^/]+)\\/input$/)\n if (request.method === \"POST\" && inputRequest?.[1] !== undefined) {\n const id = yield* pathId(TaskId, inputRequest[1])\n const input = yield* body(request, decodeRequestTaskInput)\n const task = yield* store.getTask(id)\n const deviceId = principal === \"owner\" ? task.targetDeviceId : principal.deviceId\n if (deviceId === undefined)\n return yield* new RequestError({\n status: 403,\n message: \"Only the target device can request input\",\n })\n return json(yield* store.requestTaskInput(id, deviceId, input))\n }\n const answer = url.pathname.match(/^\\/api\\/tasks\\/([^/]+)\\/answer$/)\n if (request.method === \"POST\" && answer?.[1] !== undefined) {\n const task = yield* store.answerTaskInput(\n yield* pathId(TaskId, answer[1]),\n principal,\n yield* body(request, decodeAnswerTaskInput),\n )\n return json(\n yield* Effect.tryPromise({\n try: () => dispatch(task),\n catch: (cause) =>\n new RequestError({\n status: 500,\n message: cause instanceof Error ? cause.message : String(cause),\n }),\n }),\n )\n }\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 sendCancellation(updated)\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 : cause._tag === \"RelayStore.TaskProgressError\" ||\n cause._tag === \"RelayStore.TaskInputError\" ||\n cause._tag === \"RelayStore.TaskDeadlineError\" ||\n cause._tag === \"RelayStore.TaskRequestError\"\n ? new RequestError({ status: cause.status, message: cause.message })\n : new RequestError({\n status:\n cause._tag !== \"RelayStore.PersistenceError\"\n ? 500\n : cause.message.startsWith(\"Unknown\")\n ? 404\n : cause.message.includes(\"cannot cancel an individual Cohall request\")\n ? 409\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 allowSynchronousEvents: false,\n })\n websocketServer.on(\"connection\", (rawSocket) => {\n const socket = rawSocket as ConnectionSocket\n socket.on(\"error\", () => socket.terminate())\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(\"Request body exceeded\") ? 413 : 400,\n ),\n ),\n )\n })\n server.on(\"upgrade\", (request, socket, head) => {\n const url = URL.parse(request.url ?? \"/\", \"http://cohall.local\")\n if (url === null) {\n rejectUpgrade(socket, 400, \"Bad Request\")\n return\n }\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 const deadlineController = new AbortController()\n const enforceDeadlines = Effect.gen(function* () {\n const store = yield* RelayStore.Service\n const overdue = yield* store.expireTasks()\n for (const task of overdue) if (task.status === \"cancelling\") sendCancellation(task)\n }).pipe(\n Effect.catch((cause) => Effect.logError(cause)),\n Effect.repeat({ schedule: Schedule.spaced(\"1 second\") }),\n )\n const deadlineWork = runtime\n .runPromise(enforceDeadlines, { signal: deadlineController.signal })\n .catch((cause: unknown) => {\n if (!deadlineController.signal.aborted)\n console.error(\n `Task deadline enforcement failed: ${cause instanceof Error ? cause.message : String(cause)}`,\n )\n })\n let stopping = false\n const shutdown = async (): Promise<void> => {\n if (stopping) {\n return\n }\n stopping = true\n deadlineController.abort()\n await deadlineWork\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 const controller = new AbortController()\n const stop = () => controller.abort()\n process.on(\"SIGINT\", stop)\n process.on(\"SIGTERM\", stop)\n try {\n await Effect.runPromise(runDaemon(configuration), { signal: controller.signal }).catch(\n (cause: unknown) => {\n if (!controller.signal.aborted) throw cause\n },\n )\n } finally {\n process.off(\"SIGINT\", stop)\n process.off(\"SIGTERM\", stop)\n }\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 DevicePage,\n DeviceOperation,\n ErrorResponse,\n ExchangePairingInput,\n PairingCredential,\n PairingResult,\n Task,\n TaskProgress,\n TaskClarification,\n type RequestTaskInput,\n type AnswerTaskInput,\n type TaskProgressInput,\n TaskAttachment,\n maxAttachmentBytes,\n maxDevicePageResponseBytes,\n TaskInbox,\n TaskInboxItem,\n TaskTrace,\n ThreadContext,\n UsageSummary,\n type AuthSessionId,\n type AttachmentDirection,\n type AttachmentName as AttachmentNameType,\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 verifyDeviceCredential: () => Effect.Effect<void, 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 reportTaskProgress: (\n taskId: TaskId,\n input: TaskProgressInput,\n ) => Effect.Effect<TaskProgress, RelayClientError>\n readonly requestTaskInput: (\n taskId: TaskId,\n input: RequestTaskInput,\n ) => Effect.Effect<TaskClarification, RelayClientError>\n readonly answerTaskInput: (\n taskId: TaskId,\n input: AnswerTaskInput,\n ) => Effect.Effect<Task, RelayClientError>\n readonly listAttachments: (\n taskId: TaskId,\n ) => Effect.Effect<ReadonlyArray<TaskAttachment>, RelayClientError>\n readonly readAttachment: (\n taskId: TaskId,\n name: AttachmentNameType,\n direction?: AttachmentDirection,\n ) => Effect.Effect<Uint8Array, RelayClientError>\n readonly inbox: () => Effect.Effect<TaskInbox, RelayClientError>\n readonly acknowledgeCompletion: (taskId: TaskId) => Effect.Effect<TaskInboxItem, 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 compareDevices = (left: Device, right: Device): number => {\n // SQLite NOCASE folds ASCII only; match the legacy device-list order.\n const fold = (name: string) => name.replace(/[A-Z]/g, (letter) => letter.toLowerCase())\n const byName = Buffer.compare(Buffer.from(fold(left.name)), Buffer.from(fold(right.name)))\n return byName || (left.id < right.id ? -1 : left.id > right.id ? 1 : 0)\n}\n\nconst maxJsonResponseBytes = 2 * 1024 * 1024\nconst maxTraceResponseBytes = 4 * 1024 * 1024\n\nconst jsonBody = async (\n response: Response,\n operation: string,\n maxBytes = maxJsonResponseBytes,\n): 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 > maxBytes) {\n await reader.cancel()\n throw new RelayDecodeError({\n operation,\n message: `Relay response exceeded ${maxBytes / (1024 * 1024)} MiB`,\n })\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 maxResponseBytes = maxJsonResponseBytes,\n ): Effect.Effect<S[\"Type\"], RelayClientError> =>\n Effect.gen(function* () {\n const json = yield* Effect.tryPromise({\n try: async (signal) => {\n const response = await 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 if (!response.ok) {\n throw new RelayRequestError({\n operation,\n message: await responseMessage(response, operation),\n status: response.status,\n })\n }\n return jsonBody(response, operation, maxResponseBytes).catch((cause: unknown) => {\n throw cause instanceof RelayDecodeError\n ? cause\n : new RelayDecodeError({ operation, message: String(cause) })\n })\n },\n catch: (cause) =>\n cause instanceof RelayRequestError || cause instanceof RelayDecodeError\n ? cause\n : new RelayRequestError({\n operation,\n message: cause instanceof Error ? cause.message : String(cause),\n }),\n })\n return yield* Schema.decodeUnknownEffect(schema)(json).pipe(\n Effect.mapError((cause) => new RelayDecodeError({ operation, message: String(cause) })),\n )\n })\n\n const devicePage = (after?: DeviceId) =>\n request(\n \"RelayClient.devices\",\n `/api/devices/page${after === undefined ? \"\" : `?after=${encodeURIComponent(after)}`}`,\n DevicePage,\n undefined,\n maxDevicePageResponseBytes,\n )\n\n return Service.of({\n verifyDeviceCredential: () =>\n request(\n \"RelayClient.verifyDeviceCredential\",\n \"/api/device/credential\",\n Schema.Struct({ ok: Schema.Literal(true) }),\n ).pipe(Effect.asVoid),\n devices: () =>\n Effect.gen(function* () {\n const first = yield* devicePage().pipe(\n Effect.catch((cause) =>\n cause instanceof RelayRequestError && cause.status === 404\n ? request(\"RelayClient.devices\", \"/api/devices\", Schema.Array(Device))\n : Effect.fail(cause),\n ),\n )\n if (!(\"devices\" in first)) return first\n const devices = [...first.devices]\n let cursor = first.nextCursor\n while (cursor !== undefined) {\n const page = yield* devicePage(cursor)\n const next = page.devices[0]\n if (next === undefined) break\n if (next.id <= cursor)\n return yield* new RelayDecodeError({\n operation: \"RelayClient.devices\",\n message: \"Relay device page did not advance\",\n })\n devices.push(...page.devices)\n cursor = page.nextCursor\n }\n return devices.sort(compareDevices)\n }),\n forgetDevice: (deviceId) =>\n request(\n \"RelayClient.forgetDevice\",\n `/api/devices/${encodeURIComponent(deviceId)}/forget`,\n Device,\n { method: \"POST\" },\n ),\n createTask: (input) =>\n Effect.gen(function* () {\n const hasAttachments = (input.attachments?.length ?? 0) > 0\n if (input.requestId !== undefined || input.expiresAt !== undefined || hasAttachments) {\n const health = yield* request(\n \"RelayClient.taskSupport\",\n \"/api/health\",\n Schema.Struct({\n taskIdempotency: Schema.optionalKey(Schema.Boolean),\n taskDeadlines: Schema.optionalKey(Schema.Boolean),\n taskAttachments: Schema.optionalKey(Schema.Boolean),\n }),\n )\n if (input.requestId !== undefined && health.taskIdempotency !== true) {\n return yield* new RelayRequestError({\n operation: \"RelayClient.createTask\",\n message: \"Upgrade the Cohall relay before using task request IDs\",\n })\n }\n if (input.expiresAt !== undefined && health.taskDeadlines !== true)\n return yield* new RelayRequestError({\n operation: \"RelayClient.createTask\",\n message: \"Upgrade the Cohall relay before using task deadlines\",\n })\n if (hasAttachments && health.taskAttachments !== true) {\n return yield* new RelayRequestError({\n operation: \"RelayClient.createTask\",\n message: \"Upgrade the Cohall relay before sending file attachments\",\n })\n }\n }\n return yield* request(\"RelayClient.createTask\", \"/api/tasks\", Task, {\n method: \"POST\",\n body: JSON.stringify(input),\n })\n }),\n requestTaskInput: (taskId, input) =>\n Effect.gen(function* () {\n const health = yield* request(\n \"RelayClient.clarificationSupport\",\n \"/api/health\",\n Schema.Struct({ taskClarification: Schema.optionalKey(Schema.Boolean) }),\n )\n if (health.taskClarification !== true)\n return yield* new RelayRequestError({\n operation: \"RelayClient.requestTaskInput\",\n message: \"Upgrade the Cohall relay before requesting clarification\",\n })\n return yield* request(\n \"RelayClient.requestTaskInput\",\n `/api/tasks/${encodeURIComponent(taskId)}/input`,\n TaskClarification,\n { method: \"POST\", body: JSON.stringify(input) },\n )\n }),\n answerTaskInput: (taskId, input) =>\n request(\n \"RelayClient.answerTaskInput\",\n `/api/tasks/${encodeURIComponent(taskId)}/answer`,\n Task,\n { method: \"POST\", body: JSON.stringify(input) },\n ),\n getTask: (taskId) =>\n request(\"RelayClient.getTask\", `/api/tasks/${encodeURIComponent(taskId)}`, Task),\n reportTaskProgress: (taskId, input) =>\n Effect.gen(function* () {\n const health = yield* request(\n \"RelayClient.progressSupport\",\n \"/api/health\",\n Schema.Struct({ taskProgress: Schema.optionalKey(Schema.Boolean) }),\n )\n if (health.taskProgress !== true) {\n return yield* new RelayRequestError({\n operation: \"RelayClient.reportTaskProgress\",\n message: \"Upgrade the Cohall relay before reporting task progress\",\n })\n }\n return yield* request(\n \"RelayClient.reportTaskProgress\",\n `/api/tasks/${encodeURIComponent(taskId)}/progress`,\n TaskProgress,\n { method: \"POST\", body: JSON.stringify(input) },\n )\n }),\n listAttachments: (taskId) =>\n request(\n \"RelayClient.listAttachments\",\n `/api/tasks/${encodeURIComponent(taskId)}/attachments`,\n Schema.Array(TaskAttachment),\n ),\n readAttachment: (taskId, name, direction) =>\n Effect.tryPromise({\n try: async (signal) => {\n const operation = \"RelayClient.readAttachment\"\n const response = await fetch(\n `${baseUrl}/api/tasks/${encodeURIComponent(taskId)}/attachments/${encodeURIComponent(name)}${direction === undefined ? \"\" : `?direction=${direction}`}`,\n {\n headers: { authorization: `Bearer ${options.token}` },\n signal: AbortSignal.any([signal, AbortSignal.timeout(30_000)]),\n },\n )\n if (!response.ok) {\n throw new RelayRequestError({\n operation,\n message: await responseMessage(response, operation),\n status: response.status,\n })\n }\n if (response.body === null) {\n throw new RelayDecodeError({\n operation,\n message: \"Relay returned an empty attachment response\",\n })\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) break\n size += chunk.value.byteLength\n if (size > maxAttachmentBytes) {\n await reader.cancel()\n throw new RelayDecodeError({ operation, message: \"Attachment exceeded 256 KiB\" })\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 return bytes\n },\n catch: (cause) =>\n cause instanceof RelayRequestError || cause instanceof RelayDecodeError\n ? cause\n : new RelayRequestError({\n operation: \"RelayClient.readAttachment\",\n message: cause instanceof Error ? cause.message : String(cause),\n }),\n }),\n inbox: () => request(\"RelayClient.inbox\", \"/api/inbox\", TaskInbox),\n acknowledgeCompletion: (taskId) =>\n request(\n \"RelayClient.acknowledgeCompletion\",\n `/api/inbox/${encodeURIComponent(taskId)}/ack`,\n TaskInboxItem,\n { method: \"POST\" },\n ),\n traceTask: (taskId) =>\n request(\n \"RelayClient.traceTask\",\n `/api/tasks/${encodeURIComponent(taskId)}/trace`,\n TaskTrace,\n undefined,\n maxTraceResponseBytes,\n ),\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 json = yield* Effect.tryPromise({\n try: async (signal) => {\n const response = await 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 if (!response.ok) {\n throw new RelayRequestError({\n operation,\n message: await responseMessage(response, operation),\n status: response.status,\n })\n }\n return jsonBody(response, operation).catch((cause: unknown) => {\n throw cause instanceof RelayDecodeError\n ? cause\n : new RelayDecodeError({ operation, message: String(cause) })\n })\n },\n catch: (cause) =>\n cause instanceof RelayRequestError || cause instanceof RelayDecodeError\n ? cause\n : new RelayRequestError({\n operation,\n message: cause instanceof Error ? cause.message : String(cause),\n }),\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, RelayRequestError } from \"@cohall/client\"\nimport {\n AuthSessionId,\n AttachmentName,\n AttachmentDirection,\n DeviceId,\n OperationId,\n Provider,\n TaskId,\n TaskDeadline,\n TaskRequestId,\n TaskProgressInput,\n RequestTaskInput,\n AnswerTaskInput,\n TaskRunId,\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, open, stat, writeFile } from \"node:fs/promises\"\nimport { homedir } from \"node:os\"\nimport { dirname, join, resolve } 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 acknowledgedTaskResult,\n createDelegation,\n followTaskTrace,\n listBots,\n taskResult,\n threadContext,\n waitForTask,\n requestInput,\n} from \"./delegation.ts\"\nimport { allDeviceHealth, deviceVersions } from \"./device-overview.ts\"\nimport { discoverGrokBots } from \"./grok-bot.ts\"\nimport { writeBotReply } from \"./bot-replies.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\"\nimport { readInputAttachments } from \"./task-attachments.ts\"\nimport { checkMcp } from \"./mcp-diagnostics.ts\"\nimport { readBoundedFile } from \"./bounded-file.ts\"\n\ninterface Arguments {\n readonly options: ReadonlyMap<string, ReadonlyArray<string> | true>\n readonly positionals: ReadonlyArray<string>\n}\n\nconst valueOptions = new Set([\n \"attach\",\n \"context\",\n \"context-file\",\n \"deadline\",\n \"direction\",\n \"grok-gateway\",\n \"error\",\n \"label\",\n \"model\",\n \"message\",\n \"message-file\",\n \"name\",\n \"output\",\n \"parent\",\n \"prompt\",\n \"prompt-file\",\n \"question\",\n \"request-id\",\n \"provider\",\n \"providers\",\n \"relay\",\n \"run-id\",\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 [--grok-gateway path]\n cohall config\n cohall devices\n cohall progress [task-id] --message <note>\n cohall request-input [task-id] --question <text> [--run-id uuid]\n cohall answer <task-id> --request-id uuid --message <text>\n cohall bots\n cohall send [@device-or-bot] [prompt] [delegate options]\n cohall delegate [prompt] [--target @device-or-bot] [--provider provider]\n [--context text] [--thread uuid] [--parent task-id] [--workspace path]\n [--attach path] [--request-id uuid] [--timeout seconds] [--deadline UTC-timestamp] [--no-wait]\n cohall status <task-id>\n cohall inbox [ack <task-id>]\n cohall trace <task-id> [--follow]\n cohall wait <task-id> [--timeout seconds]\n cohall attachments <task-id>\n cohall download <task-id> <name> --output path [--direction input|output]\n cohall cancel <task-id>\n cohall reply <task-id> [--run-id uuid] --message-file path | --message text | --message - | --error text | --question text\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, grok-bot.\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 readTextFile = async (path: string, limit: number, exceeded: string): Promise<string> => {\n if ((await stat(path)).size > limit) throw new Error(exceeded)\n const file = await open(path, \"r\")\n try {\n const data = await readBoundedFile(file, limit)\n if (data.length > limit) throw new Error(exceeded)\n return data.toString(\"utf8\")\n } finally {\n await file.close()\n }\n}\n\nconst readInput = async (\n arguments_: Arguments,\n name: \"prompt\" | \"context\" | \"message\",\n): Promise<string | undefined> => {\n const direct = option(arguments_, name)\n const path = option(arguments_, `${name}-file`)\n const byteLimit = name === \"message\" ? 4 * 131_072 : 131_072\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 }\n const result =\n path === undefined\n ? direct === \"-\"\n ? await readStdin(byteLimit, name)\n : direct\n : await readTextFile(path, byteLimit, `${name} file exceeds ${byteLimit / 1024} KiB`)\n if (result !== undefined && result.length > 131_072) {\n throw new Error(`${name} exceeds 131072 characters`)\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 const token = (\n path === undefined\n ? await readStdin(512, \"Pairing token\")\n : await readTextFile(path, 512, \"Pairing token file exceeds 512 bytes\")\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 === \"reply\") {\n allowOptions(arguments_, [\"message\", \"message-file\", \"error\", \"question\", \"run-id\"])\n const id = Schema.decodeUnknownSync(TaskId)(identifier(arguments_, \"task id\"))\n const error = option(arguments_, \"error\")\n const question = option(arguments_, \"question\")\n const rawRunId = option(arguments_, \"run-id\")\n const runId = rawRunId === undefined ? undefined : Schema.decodeUnknownSync(TaskRunId)(rawRunId)\n if (\n (error !== undefined || question !== undefined) &&\n (option(arguments_, \"message\") !== undefined ||\n option(arguments_, \"message-file\") !== undefined ||\n (error !== undefined && question !== undefined))\n ) {\n throw new Error(\"Use one of --question, --error, or --message/--message-file\")\n }\n const message =\n error === undefined && question === undefined\n ? await readInput(arguments_, \"message\")\n : undefined\n if (error === undefined && question === undefined && message === undefined) {\n throw new Error(\"A bot reply requires --message, --message-file, --error, or --question\")\n }\n const reply =\n question !== undefined\n ? { question: Schema.decodeUnknownSync(RequestTaskInput.fields.question)(question) }\n : error === undefined\n ? { result: message ?? \"\" }\n : { error }\n await writeBotReply(id, reply, runId)\n print({ submitted: true, task_id: id })\n return\n }\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 grok_gateway: configuration.grokGateway,\n }),\n })\n return\n }\n\n if (command === \"configure\") {\n allowOptions(arguments_, [\n \"grok-gateway\",\n \"model\",\n \"name\",\n \"providers\",\n \"relay\",\n \"sandbox\",\n \"workspace\",\n ])\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 gatewayInput = option(arguments_, \"grok-gateway\") ?? existing?.grokGateway\n const grokGateway = gatewayInput === undefined ? undefined : resolve(gatewayInput)\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 ...(grokGateway === undefined ? {} : { grokGateway }),\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\n .filter((provider) => provider !== \"grok-bot\")\n .map((provider) => [\n provider,\n Providers.findExecutable(provider === \"claude-code\" ? \"claude\" : provider) ?? \"not found\",\n ]),\n )\n const grokGateway = process.env.COHALL_GROK_GATEWAY ?? configuration?.grokGateway\n const grokBots =\n grokGateway === undefined\n ? undefined\n : await discoverGrokBots(grokGateway).catch(() => undefined)\n const clientToken = process.env.COHALL_CLIENT_TOKEN ?? storedCredentials.clientToken\n const mcp =\n clientToken === undefined\n ? { status: \"not configured\" as const }\n : await checkMcp(process.argv[1] ?? \"\", relayUrl, 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 clientAuthentication =\n clientToken === undefined\n ? { status: \"not configured\" as const }\n : response?.ok !== true\n ? { status: \"not checked\" as const }\n : await Effect.runPromise(\n RelayClient.make({ baseUrl: relayUrl, token: clientToken })\n .devices()\n .pipe(\n Effect.match({\n onSuccess: (devices) => ({ status: \"ok\" as const, devices }),\n onFailure: (error) => {\n const httpStatus =\n error instanceof RelayRequestError ? error.status : undefined\n const reason =\n httpStatus === 401 || httpStatus === 403\n ? \"Client credential was rejected by the relay\"\n : \"Client relay check failed\"\n return {\n status: \"error\" as const,\n ...(httpStatus === undefined ? {} : { http_status: httpStatus }),\n error: `${reason}: ${error.message}`,\n }\n },\n }),\n ),\n )\n const currentDevice =\n clientAuthentication.status === \"ok\"\n ? clientAuthentication.devices.find((device) => device.id === deviceId)\n : undefined\n const versionWarning = deviceVersionWarning(version, currentDevice?.version)\n const warnings = [\n ...(response?.ok === true ? [] : [\"Relay is unreachable\"]),\n ...(versionWarning === undefined ? [] : [versionWarning]),\n ...(mcp.status === \"error\" ? [`MCP check failed: ${mcp.error}`] : []),\n ...(clientAuthentication.status === \"error\" ? [clientAuthentication.error] : []),\n ...(hasDeviceCredential &&\n response?.ok === true &&\n clientAuthentication.status !== \"error\" &&\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 ?? (grokGateway === undefined ? [] : [\"grok-bot\"])).flatMap(\n (provider) =>\n provider === \"grok-bot\"\n ? grokBots === undefined\n ? [\n \"Configured Grok Bot gateway is unavailable; check its discovery file and host process\",\n ]\n : []\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 client_authentication:\n clientAuthentication.status === \"ok\" ? { status: \"ok\" } : clientAuthentication,\n mcp,\n device_credential: hasDeviceCredential,\n workspaces: configuration?.workspaces ?? [],\n providers: providerExecutables,\n ...(grokGateway === undefined\n ? {}\n : {\n grok_gateway: {\n path: grokGateway,\n reachable: grokBots !== undefined,\n bots: grokBots?.length ?? 0,\n },\n }),\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 === \"request-input\") {\n allowOptions(arguments_, [\"question\", \"run-id\"])\n const rawQuestion = option(arguments_, \"question\")\n if (rawQuestion === undefined) throw new Error(\"--question is required\")\n const question = Schema.decodeUnknownSync(RequestTaskInput.fields.question)(rawQuestion)\n const id =\n arguments_.positionals.length === 0\n ? undefined\n : Schema.decodeUnknownSync(TaskId)(identifier(arguments_, \"task id\"))\n const rawRunId = option(arguments_, \"run-id\")\n const runId = rawRunId === undefined ? undefined : Schema.decodeUnknownSync(TaskRunId)(rawRunId)\n print(await Effect.runPromise(requestInput(relay, configuration, question, id, runId)))\n return\n }\n if (command === \"answer\") {\n allowOptions(arguments_, [\"request-id\", \"message\", \"message-file\"])\n const id = Schema.decodeUnknownSync(TaskId)(identifier(arguments_, \"task id\"))\n const requestId = option(arguments_, \"request-id\")\n if (requestId === undefined)\n throw new Error(\"--request-id is required; use the input request id from status or inbox\")\n const input = Schema.decodeUnknownSync(AnswerTaskInput)({\n requestId,\n answer: await readInput(arguments_, \"message\"),\n })\n print(taskResult(await Effect.runPromise(relay.answerTaskInput(id, input))))\n return\n }\n if (command === \"progress\") {\n allowOptions(arguments_, [\"message\"])\n const rawId =\n arguments_.positionals.length === 0\n ? configuration.mcpTaskId\n : identifier(arguments_, \"task id\")\n if (rawId === undefined) throw new Error(\"Task id is required outside delegated work\")\n const note = option(arguments_, \"message\")\n if (note === undefined) throw new Error(\"--message is required\")\n const input = Schema.decodeUnknownSync(TaskProgressInput)({ note })\n print(\n await Effect.runPromise(\n relay.reportTaskProgress(Schema.decodeUnknownSync(TaskId)(rawId), input),\n ),\n )\n return\n }\n if (command === \"devices\") {\n allowOptions(arguments_, [])\n noPositionals(arguments_, command)\n print(await Effect.runPromise(relay.devices()))\n return\n }\n if (command === \"bots\") {\n allowOptions(arguments_, [])\n noPositionals(arguments_, command)\n print(listBots(await Effect.runPromise(relay.devices())))\n return\n }\n if (command === \"delegate\" || command === \"send\") {\n allowOptions(arguments_, [\n \"context\",\n \"context-file\",\n \"deadline\",\n \"attach\",\n \"no-wait\",\n \"parent\",\n \"prompt\",\n \"prompt-file\",\n \"provider\",\n \"request-id\",\n \"target\",\n \"thread\",\n \"timeout\",\n \"workspace\",\n ])\n const waitSeconds = timeout(arguments_)\n const positionalTarget =\n command === \"send\" && arguments_.positionals[0]?.startsWith(\"@\")\n ? arguments_.positionals[0]\n : undefined\n const positionals =\n positionalTarget === undefined ? arguments_.positionals : arguments_.positionals.slice(1)\n if (positionalTarget !== undefined && option(arguments_, \"target\") !== undefined) {\n throw new Error(\"Use either a positional target or --target, not both\")\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 ?? positionals.join(\" \")\n if (prompt.trim().length === 0) {\n throw new Error(\"A prompt is required\")\n }\n if (suppliedPrompt !== undefined && 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 attachments = await readInputAttachments(values(arguments_, \"attach\"))\n const target = positionalTarget ?? option(arguments_, \"target\")\n const thread = option(arguments_, \"thread\")\n const workspace = option(arguments_, \"workspace\")\n const provider = option(arguments_, \"provider\")\n const parent = option(arguments_, \"parent\")\n const deadline = option(arguments_, \"deadline\")\n const requestId = option(arguments_, \"request-id\")\n const task = await Effect.runPromise(\n createDelegation(relay, configuration, {\n prompt,\n ...(requestId === undefined\n ? {}\n : { requestId: Schema.decodeUnknownSync(TaskRequestId)(requestId) }),\n ...(target === undefined ? {} : { target }),\n ...(context === undefined ? {} : { context }),\n ...(thread === undefined ? {} : { threadId: Schema.decodeUnknownSync(ThreadId)(thread) }),\n ...(parent === undefined ? {} : { parentTaskId: Schema.decodeUnknownSync(TaskId)(parent) }),\n ...(workspace === undefined ? {} : { workspace }),\n ...(provider === undefined\n ? {}\n : { provider: Schema.decodeUnknownSync(Provider)(provider) }),\n ...(attachments.length === 0 ? {} : { attachments }),\n ...(deadline === undefined\n ? {}\n : { expiresAt: Schema.decodeUnknownSync(TaskDeadline)(deadline) }),\n }),\n )\n const completed = arguments_.options.has(\"no-wait\")\n ? task\n : await Effect.runPromise(waitForTask(relay, task, waitSeconds))\n print(\n arguments_.options.has(\"no-wait\")\n ? taskResult(completed)\n : await acknowledgedTaskResult(relay, completed),\n )\n return\n }\n if (command === \"inbox\") {\n allowOptions(arguments_, [])\n if (arguments_.positionals[0] === \"ack\") {\n if (arguments_.positionals.length !== 2) throw new Error(\"Usage: cohall inbox ack <task-id>\")\n const id = Schema.decodeUnknownSync(TaskId)(arguments_.positionals[1])\n print(await Effect.runPromise(relay.acknowledgeCompletion(id)))\n return\n }\n noPositionals(arguments_, command)\n print(await Effect.runPromise(relay.inbox()))\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 === \"attachments\") {\n allowOptions(arguments_, [])\n const id = Schema.decodeUnknownSync(TaskId)(identifier(arguments_, \"task id\"))\n print(await Effect.runPromise(relay.listAttachments(id)))\n return\n }\n if (command === \"download\") {\n allowOptions(arguments_, [\"output\", \"direction\"])\n if (arguments_.positionals.length !== 2) {\n throw new Error(\n \"Usage: cohall download <task-id> <name> --output path [--direction input|output]\",\n )\n }\n const destination = option(arguments_, \"output\")\n if (destination === undefined) {\n throw new Error(\"--output is required\")\n }\n const id = Schema.decodeUnknownSync(TaskId)(arguments_.positionals[0])\n const name = Schema.decodeUnknownSync(AttachmentName)(arguments_.positionals[1])\n const directionInput = option(arguments_, \"direction\")\n const direction =\n directionInput === undefined\n ? undefined\n : Schema.decodeUnknownSync(AttachmentDirection)(directionInput)\n const data = await Effect.runPromise(relay.readAttachment(id, name, direction))\n await writeFile(destination, data, { flag: \"wx\", mode: 0o600 })\n print({ task_id: id, name, path: resolve(destination), bytes: data.length })\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 print(taskResult(await Effect.runPromise(waitForTask(relay, id, 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, RelayRequestError } from \"@cohall/client\"\nimport {\n AuthSessionId,\n AttachmentName,\n AttachmentDirection,\n DeviceId,\n OperationId,\n Provider,\n TaskId,\n TaskDeadline,\n TaskRequestId,\n TaskProgressInput,\n RequestTaskInput,\n AnswerTaskInput,\n TaskRunId,\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, open, stat, writeFile } from \"node:fs/promises\"\nimport { homedir } from \"node:os\"\nimport { dirname, join, resolve } from \"node:path\"\nimport skill from \"../../../skills/cohall/SKILL.md\" with { type: \"text\" }\nimport onboarding from \"../../../docs/onboarding.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 acknowledgedTaskResult,\n createDelegation,\n followTaskTrace,\n listBots,\n taskResult,\n threadContext,\n waitForTask,\n requestInput,\n} from \"./delegation.ts\"\nimport { allDeviceHealth, deviceVersions } from \"./device-overview.ts\"\nimport { discoverGrokBots } from \"./grok-bot.ts\"\nimport { writeBotReply } from \"./bot-replies.ts\"\nimport {\n guidedSetupInput,\n joinRelay,\n setupRelayUrl,\n terminalPrompter,\n type Prompter,\n} from \"./setup.ts\"\nimport { backupRelay, restoreRelay, switchRelay } from \"./relay-migration.ts\"\nimport { installDeviceService } from \"./service.ts\"\nimport { deviceVersionWarning, normalizeUpgradeTarget, upgrade } from \"./upgrade.ts\"\nimport { readInputAttachments } from \"./task-attachments.ts\"\nimport { checkMcp, readMcpHostDiagnostics } from \"./mcp-diagnostics.ts\"\nimport { readBoundedFile } from \"./bounded-file.ts\"\n\ninterface Arguments {\n readonly options: ReadonlyMap<string, ReadonlyArray<string> | true>\n readonly positionals: ReadonlyArray<string>\n}\n\nconst valueOptions = new Set([\n \"attach\",\n \"context\",\n \"context-file\",\n \"deadline\",\n \"direction\",\n \"grok-gateway\",\n \"error\",\n \"label\",\n \"model\",\n \"message\",\n \"message-file\",\n \"name\",\n \"output\",\n \"parent\",\n \"prompt\",\n \"prompt-file\",\n \"question\",\n \"request-id\",\n \"provider\",\n \"providers\",\n \"relay\",\n \"run-id\",\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 onboard\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 [--grok-gateway path]\n cohall config\n cohall devices\n cohall progress [task-id] --message <note>\n cohall request-input [task-id] --question <text> [--run-id uuid]\n cohall answer <task-id> --request-id uuid --message <text>\n cohall bots\n cohall send [@device-or-bot] [prompt] [delegate options]\n cohall delegate [prompt] [--target @device-or-bot] [--provider provider]\n [--context text] [--thread uuid] [--parent task-id] [--workspace path]\n [--attach path] [--request-id uuid] [--timeout seconds] [--deadline UTC-timestamp] [--no-wait]\n cohall status <task-id>\n cohall inbox [ack <task-id>]\n cohall trace <task-id> [--follow]\n cohall wait <task-id> [--timeout seconds]\n cohall attachments <task-id>\n cohall download <task-id> <name> --output path [--direction input|output]\n cohall cancel <task-id>\n cohall reply <task-id> [--run-id uuid] --message-file path | --message text | --message - | --error text | --question text\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, grok-bot.\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 readTextFile = async (path: string, limit: number, exceeded: string): Promise<string> => {\n if ((await stat(path)).size > limit) throw new Error(exceeded)\n const file = await open(path, \"r\")\n try {\n const data = await readBoundedFile(file, limit)\n if (data.length > limit) throw new Error(exceeded)\n return data.toString(\"utf8\")\n } finally {\n await file.close()\n }\n}\n\nconst readInput = async (\n arguments_: Arguments,\n name: \"prompt\" | \"context\" | \"message\",\n): Promise<string | undefined> => {\n const direct = option(arguments_, name)\n const path = option(arguments_, `${name}-file`)\n const byteLimit = name === \"message\" ? 4 * 131_072 : 131_072\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 }\n const result =\n path === undefined\n ? direct === \"-\"\n ? await readStdin(byteLimit, name)\n : direct\n : await readTextFile(path, byteLimit, `${name} file exceeds ${byteLimit / 1024} KiB`)\n if (result !== undefined && result.length > 131_072) {\n throw new Error(`${name} exceeds 131072 characters`)\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 const token = (\n path === undefined\n ? await readStdin(512, \"Pairing token\")\n : await readTextFile(path, 512, \"Pairing token file exceeds 512 bytes\")\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 === \"onboard\") {\n allowOptions(arguments_, [])\n noPositionals(arguments_, command)\n console.log(onboarding.trimEnd())\n return\n }\n\n if (command === \"reply\") {\n allowOptions(arguments_, [\"message\", \"message-file\", \"error\", \"question\", \"run-id\"])\n const id = Schema.decodeUnknownSync(TaskId)(identifier(arguments_, \"task id\"))\n const error = option(arguments_, \"error\")\n const question = option(arguments_, \"question\")\n const rawRunId = option(arguments_, \"run-id\")\n const runId = rawRunId === undefined ? undefined : Schema.decodeUnknownSync(TaskRunId)(rawRunId)\n if (\n (error !== undefined || question !== undefined) &&\n (option(arguments_, \"message\") !== undefined ||\n option(arguments_, \"message-file\") !== undefined ||\n (error !== undefined && question !== undefined))\n ) {\n throw new Error(\"Use one of --question, --error, or --message/--message-file\")\n }\n const message =\n error === undefined && question === undefined\n ? await readInput(arguments_, \"message\")\n : undefined\n if (error === undefined && question === undefined && message === undefined) {\n throw new Error(\"A bot reply requires --message, --message-file, --error, or --question\")\n }\n const reply =\n question !== undefined\n ? { question: Schema.decodeUnknownSync(RequestTaskInput.fields.question)(question) }\n : error === undefined\n ? { result: message ?? \"\" }\n : { error }\n await writeBotReply(id, reply, runId)\n print({ submitted: true, task_id: id })\n return\n }\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 if (arguments_.options.has(\"client-only\") && arguments_.options.has(\"service\")) {\n throw new Error(\"A client-only setup cannot install a device service\")\n }\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. Then run `cohall doctor` and the delegation check in `cohall onboard`.\"\n : \"Run `cohall doctor`, then the delegation check in `cohall onboard`.\",\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 existing = await readStoredConfiguration()\n const relayUrl = setupRelayUrl(option(arguments_, \"relay\") ?? existing?.relayUrl)\n const token = await pairingToken(arguments_)\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 grok_gateway: configuration.grokGateway,\n }),\n })\n return\n }\n\n if (command === \"configure\") {\n allowOptions(arguments_, [\n \"grok-gateway\",\n \"model\",\n \"name\",\n \"providers\",\n \"relay\",\n \"sandbox\",\n \"workspace\",\n ])\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 gatewayInput = option(arguments_, \"grok-gateway\") ?? existing?.grokGateway\n const grokGateway = gatewayInput === undefined ? undefined : resolve(gatewayInput)\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 ...(grokGateway === undefined ? {} : { grokGateway }),\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\n .filter((provider) => provider !== \"grok-bot\")\n .map((provider) => [\n provider,\n Providers.findExecutable(provider === \"claude-code\" ? \"claude\" : provider) ?? \"not found\",\n ]),\n )\n const grokGateway = process.env.COHALL_GROK_GATEWAY ?? configuration?.grokGateway\n const grokBots =\n grokGateway === undefined\n ? undefined\n : await discoverGrokBots(grokGateway).catch(() => undefined)\n const clientToken = process.env.COHALL_CLIENT_TOKEN ?? storedCredentials.clientToken\n const mcpHost = await readMcpHostDiagnostics()\n const mcp =\n clientToken === undefined\n ? { status: \"not configured\" as const }\n : await checkMcp(process.argv[1] ?? \"\", relayUrl, 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 clientAuthentication =\n clientToken === undefined\n ? { status: \"not configured\" as const }\n : response?.ok !== true\n ? { status: \"not checked\" as const }\n : await Effect.runPromise(\n RelayClient.make({ baseUrl: relayUrl, token: clientToken })\n .devices()\n .pipe(\n Effect.match({\n onSuccess: (devices) => ({ status: \"ok\" as const, devices }),\n onFailure: (error) => {\n const httpStatus =\n error instanceof RelayRequestError ? error.status : undefined\n const reason =\n httpStatus === 401 || httpStatus === 403\n ? \"Client credential was rejected by the relay\"\n : \"Client relay check failed\"\n return {\n status: \"error\" as const,\n ...(httpStatus === undefined ? {} : { http_status: httpStatus }),\n error: `${reason}: ${error.message}`,\n }\n },\n }),\n ),\n )\n const currentDevice =\n clientAuthentication.status === \"ok\"\n ? clientAuthentication.devices.find((device) => device.id === deviceId)\n : undefined\n const versionWarning = deviceVersionWarning(version, currentDevice?.version)\n const warnings = [\n ...(response?.ok === true ? [] : [\"Relay is unreachable\"]),\n ...(versionWarning === undefined ? [] : [versionWarning]),\n ...(mcp.status === \"error\" ? [`MCP check failed: ${mcp.error}`] : []),\n ...mcpHost.warnings,\n ...(mcpHost.status === \"unavailable\"\n ? [`MCP host diagnostics unavailable: ${mcpHost.error}`]\n : []),\n ...(clientAuthentication.status === \"error\" ? [clientAuthentication.error] : []),\n ...(hasDeviceCredential &&\n response?.ok === true &&\n clientAuthentication.status !== \"error\" &&\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 ?? (grokGateway === undefined ? [] : [\"grok-bot\"])).flatMap(\n (provider) =>\n provider === \"grok-bot\"\n ? grokBots === undefined\n ? [\n \"Configured Grok Bot gateway is unavailable; check its discovery file and host process\",\n ]\n : []\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 client_authentication:\n clientAuthentication.status === \"ok\" ? { status: \"ok\" } : clientAuthentication,\n mcp: { ...mcp, scope: \"server self-test\" },\n mcp_host: mcpHost,\n device_credential: hasDeviceCredential,\n workspaces: configuration?.workspaces ?? [],\n providers: providerExecutables,\n ...(grokGateway === undefined\n ? {}\n : {\n grok_gateway: {\n path: grokGateway,\n reachable: grokBots !== undefined,\n bots: grokBots?.length ?? 0,\n },\n }),\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 join_instructions: `Join my existing Cohall relay at ${configuration.relayUrl} as ${arguments_.options.has(\"client-only\") ? \"a client that submits work only\" : \"a worker and client\"}. Follow https://github.com/AksharP5/cohall/blob/main/docs/onboarding.md, \"Join an existing relay\". I will provide the one-time pairing token separately; read it through a hidden terminal prompt, stdin, or a token file. ${arguments_.options.has(\"client-only\") ? \"Use cohall init --client-only; no device service is needed.\" : \"Choose existing workspace roots and installed providers before running cohall init.\"} Finish the verification steps and report what passed.`,\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 === \"request-input\") {\n allowOptions(arguments_, [\"question\", \"run-id\"])\n const rawQuestion = option(arguments_, \"question\")\n if (rawQuestion === undefined) throw new Error(\"--question is required\")\n const question = Schema.decodeUnknownSync(RequestTaskInput.fields.question)(rawQuestion)\n const id =\n arguments_.positionals.length === 0\n ? undefined\n : Schema.decodeUnknownSync(TaskId)(identifier(arguments_, \"task id\"))\n const rawRunId = option(arguments_, \"run-id\")\n const runId = rawRunId === undefined ? undefined : Schema.decodeUnknownSync(TaskRunId)(rawRunId)\n print(await Effect.runPromise(requestInput(relay, configuration, question, id, runId)))\n return\n }\n if (command === \"answer\") {\n allowOptions(arguments_, [\"request-id\", \"message\", \"message-file\"])\n const id = Schema.decodeUnknownSync(TaskId)(identifier(arguments_, \"task id\"))\n const requestId = option(arguments_, \"request-id\")\n if (requestId === undefined)\n throw new Error(\"--request-id is required; use the input request id from status or inbox\")\n const input = Schema.decodeUnknownSync(AnswerTaskInput)({\n requestId,\n answer: await readInput(arguments_, \"message\"),\n })\n print(taskResult(await Effect.runPromise(relay.answerTaskInput(id, input))))\n return\n }\n if (command === \"progress\") {\n allowOptions(arguments_, [\"message\"])\n const rawId =\n arguments_.positionals.length === 0\n ? configuration.mcpTaskId\n : identifier(arguments_, \"task id\")\n if (rawId === undefined) throw new Error(\"Task id is required outside delegated work\")\n const note = option(arguments_, \"message\")\n if (note === undefined) throw new Error(\"--message is required\")\n const input = Schema.decodeUnknownSync(TaskProgressInput)({ note })\n print(\n await Effect.runPromise(\n relay.reportTaskProgress(Schema.decodeUnknownSync(TaskId)(rawId), input),\n ),\n )\n return\n }\n if (command === \"devices\") {\n allowOptions(arguments_, [])\n noPositionals(arguments_, command)\n print(await Effect.runPromise(relay.devices()))\n return\n }\n if (command === \"bots\") {\n allowOptions(arguments_, [])\n noPositionals(arguments_, command)\n print(listBots(await Effect.runPromise(relay.devices())))\n return\n }\n if (command === \"delegate\" || command === \"send\") {\n allowOptions(arguments_, [\n \"context\",\n \"context-file\",\n \"deadline\",\n \"attach\",\n \"no-wait\",\n \"parent\",\n \"prompt\",\n \"prompt-file\",\n \"provider\",\n \"request-id\",\n \"target\",\n \"thread\",\n \"timeout\",\n \"workspace\",\n ])\n const waitSeconds = timeout(arguments_)\n const positionalTarget =\n command === \"send\" && arguments_.positionals[0]?.startsWith(\"@\")\n ? arguments_.positionals[0]\n : undefined\n const positionals =\n positionalTarget === undefined ? arguments_.positionals : arguments_.positionals.slice(1)\n if (positionalTarget !== undefined && option(arguments_, \"target\") !== undefined) {\n throw new Error(\"Use either a positional target or --target, not both\")\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 ?? positionals.join(\" \")\n if (prompt.trim().length === 0) {\n throw new Error(\"A prompt is required\")\n }\n if (suppliedPrompt !== undefined && 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 attachments = await readInputAttachments(values(arguments_, \"attach\"))\n const target = positionalTarget ?? option(arguments_, \"target\")\n const thread = option(arguments_, \"thread\")\n const workspace = option(arguments_, \"workspace\")\n const provider = option(arguments_, \"provider\")\n const parent = option(arguments_, \"parent\")\n const deadline = option(arguments_, \"deadline\")\n const requestId = option(arguments_, \"request-id\")\n const task = await Effect.runPromise(\n createDelegation(relay, configuration, {\n prompt,\n ...(requestId === undefined\n ? {}\n : { requestId: Schema.decodeUnknownSync(TaskRequestId)(requestId) }),\n ...(target === undefined ? {} : { target }),\n ...(context === undefined ? {} : { context }),\n ...(thread === undefined ? {} : { threadId: Schema.decodeUnknownSync(ThreadId)(thread) }),\n ...(parent === undefined ? {} : { parentTaskId: Schema.decodeUnknownSync(TaskId)(parent) }),\n ...(workspace === undefined ? {} : { workspace }),\n ...(provider === undefined\n ? {}\n : { provider: Schema.decodeUnknownSync(Provider)(provider) }),\n ...(attachments.length === 0 ? {} : { attachments }),\n ...(deadline === undefined\n ? {}\n : { expiresAt: Schema.decodeUnknownSync(TaskDeadline)(deadline) }),\n }),\n )\n const completed = arguments_.options.has(\"no-wait\")\n ? task\n : await Effect.runPromise(waitForTask(relay, task, waitSeconds))\n print(\n arguments_.options.has(\"no-wait\")\n ? taskResult(completed)\n : await acknowledgedTaskResult(relay, completed),\n )\n return\n }\n if (command === \"inbox\") {\n allowOptions(arguments_, [])\n if (arguments_.positionals[0] === \"ack\") {\n if (arguments_.positionals.length !== 2) throw new Error(\"Usage: cohall inbox ack <task-id>\")\n const id = Schema.decodeUnknownSync(TaskId)(arguments_.positionals[1])\n print(await Effect.runPromise(relay.acknowledgeCompletion(id)))\n return\n }\n noPositionals(arguments_, command)\n print(await Effect.runPromise(relay.inbox()))\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 === \"attachments\") {\n allowOptions(arguments_, [])\n const id = Schema.decodeUnknownSync(TaskId)(identifier(arguments_, \"task id\"))\n print(await Effect.runPromise(relay.listAttachments(id)))\n return\n }\n if (command === \"download\") {\n allowOptions(arguments_, [\"output\", \"direction\"])\n if (arguments_.positionals.length !== 2) {\n throw new Error(\n \"Usage: cohall download <task-id> <name> --output path [--direction input|output]\",\n )\n }\n const destination = option(arguments_, \"output\")\n if (destination === undefined) {\n throw new Error(\"--output is required\")\n }\n const id = Schema.decodeUnknownSync(TaskId)(arguments_.positionals[0])\n const name = Schema.decodeUnknownSync(AttachmentName)(arguments_.positionals[1])\n const directionInput = option(arguments_, \"direction\")\n const direction =\n directionInput === undefined\n ? undefined\n : Schema.decodeUnknownSync(AttachmentDirection)(directionInput)\n const data = await Effect.runPromise(relay.readAttachment(id, name, direction))\n await writeFile(destination, data, { flag: \"wx\", mode: 0o600 })\n print({ task_id: id, name, path: resolve(destination), bytes: data.length })\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 print(taskResult(await Effect.runPromise(waitForTask(relay, id, 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 { execa } from \"execa\"\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 } 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\nexport type CliProvider = Exclude<ProviderName, \"grok-bot\">\n\nexport interface RunOptions {\n readonly provider: CliProvider\n readonly threadId: string\n readonly taskId?: string\n readonly runId?: 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>>\nconst maxResultBytes = 131_072\nconst maxJsonBytes = 1024 * 1024\n\nconst executables = {\n codex: \"codex\",\n \"claude-code\": \"claude\",\n opencode: \"opencode\",\n} as const satisfies Record<CliProvider, string>\n\nconst providerEnvironment = (): NodeJS.ProcessEnv => ({\n ...Object.fromEntries(\n Object.entries(process.env).filter(([name]) => {\n const key = platform() === \"win32\" ? name.toUpperCase() : name\n return !key.startsWith(\"COHALL_\") || key === \"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 provider !== \"grok-bot\" && findExecutable(executables[provider]) !== undefined\nexport const availableProviders = (): ReadonlyArray<CliProvider> =>\n Provider.literals\n .filter((provider): provider is CliProvider => provider !== \"grok-bot\")\n .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 \"Complete the task described in the attached Cohall prompt file.\",\n `--file=${promptPath}`,\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 onOversized: () => void,\n): Promise<void> => {\n let chunks: Array<Buffer> = []\n let size = 0\n let oversized = false\n const append = (chunk: Buffer): void => {\n if (oversized) {\n return\n }\n if (size + chunk.byteLength > maxJsonBytes) {\n chunks = []\n size = 0\n oversized = true\n return\n }\n if (chunk.byteLength > 0) {\n chunks.push(chunk)\n size += chunk.byteLength\n }\n }\n const emit = (): void => {\n if (oversized) {\n oversized = false\n onOversized()\n return\n }\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 || oversized) {\n emit()\n }\n}\n\nconst parseCodex = async (stdout: Readable, existingSession?: string): Promise<RunResult> => {\n let result = \"\"\n let sessionId = existingSession\n let discardedEvent = false\n await forEachJsonEvent(\n stdout,\n (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 const content = text(item?.text) ?? text(item?.content)\n result = content ?? result\n if (content !== undefined && content.length > 0) discardedEvent = false\n }\n },\n () => {\n discardedEvent = true\n },\n )\n if (discardedEvent) {\n throw new Error(\"Provider JSON event exceeded 1 MiB without a later text response\")\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 let discardedEvent = false\n let messageId: string | undefined\n const parts = new Map<string, string>()\n let partBytes = 0\n let oversizedMessage = false\n const selectMessage = (id: string | undefined): void => {\n messageId = id\n parts.clear()\n partBytes = 0\n oversizedMessage = false\n result = \"\"\n }\n await forEachJsonEvent(\n stdout,\n (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 part = record(event.part)\n const nextMessageId = text(part?.messageID)\n // After a discarded event, only a visible new-message boundary proves its parts are complete.\n if (\n text(event.type) === \"step_start\" &&\n nextMessageId !== undefined &&\n nextMessageId !== messageId\n ) {\n selectMessage(nextMessageId)\n discardedEvent = false\n return\n }\n if (text(event.type) !== \"text\") return\n const content = textFromPart(part) ?? textFromPart(event) ?? text(event.result)\n if (content === undefined) return\n const partId = text(part?.id)\n if (nextMessageId !== undefined && partId !== undefined) {\n if (nextMessageId !== messageId) selectMessage(nextMessageId)\n if (oversizedMessage) return\n const previous = parts.get(partId)\n if (content.length === 0 && previous === undefined) return\n partBytes +=\n byteLength(content) -\n byteLength(previous ?? \"\") +\n (previous === undefined ? byteLength(partId) : 0)\n if (partBytes > maxJsonBytes) {\n oversizedMessage = true\n parts.clear()\n return\n }\n parts.set(partId, content)\n return\n }\n if (content.length === 0) return\n selectMessage(undefined)\n result = content\n discardedEvent = false\n },\n () => {\n discardedEvent = true\n },\n )\n if (discardedEvent) {\n throw new Error(\"Provider JSON event exceeded 1 MiB without a later text response\")\n }\n if (oversizedMessage) throw new Error(\"OpenCode message exceeded 1 MiB\")\n if (parts.size > 0)\n result = [...parts.values()].filter((content) => content.length > 0).join(\"\\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, maxJsonBytes, 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.callback((resume, signal) => {\n const running = (async () => {\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 signal.throwIfAborted()\n const [, ...arguments_] = prepared.command\n const child = execa(executable, arguments_, {\n cwd: options.cwd,\n env: {\n ...providerEnvironment(),\n COHALL_PROVIDER: options.provider,\n COHALL_THREAD_ID: options.threadId,\n ...(options.taskId === undefined ? {} : { COHALL_TASK_ID: options.taskId }),\n ...(options.runId === undefined ? {} : { COHALL_TASK_RUN_ID: options.runId }),\n },\n extendEnv: false,\n detached: platform() !== \"win32\",\n stdin: \"pipe\",\n stdout: \"pipe\",\n stderr: \"pipe\",\n buffer: false,\n reject: false,\n cleanup: false,\n })\n let finished = false\n const exited = child.then(({ exitCode, failed, originalMessage, shortMessage }) => {\n finished = true\n if (failed && exitCode === undefined) {\n throw new Error(originalMessage ?? shortMessage ?? \"Provider failed to start\")\n }\n return exitCode ?? 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).catch(() => undefined)\n }\n signal.addEventListener(\"abort\", terminate, { once: true })\n if (signal.aborted) {\n terminate()\n }\n try {\n const written = new Promise<void>((resolve, reject) => {\n child.stdin.once(\"error\", reject)\n child.stdin.end(prepared.input, (cause?: Error | null) =>\n cause === undefined || cause === null ? resolve() : reject(cause),\n )\n })\n const [result, stderr, exitCode] = await Promise.all([\n parse(options, child.stdout, terminate),\n captureText(child.stderr, 64 * 1024),\n exited,\n written,\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) > maxResultBytes) {\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 (!finished) {\n terminate()\n await exited.catch(() => undefined)\n }\n await termination\n }\n } finally {\n await prepared.cleanup()\n }\n })()\n void running.then(\n (result) => resume(Effect.succeed(result)),\n (cause: unknown) =>\n resume(\n Effect.fail(\n cause instanceof ProviderUnavailableError || cause instanceof ProviderRunError\n ? cause\n : new ProviderRunError({\n provider: options.provider,\n message: (cause instanceof Error ? cause.message : String(cause)).slice(\n 0,\n 16_384,\n ),\n }),\n ),\n ),\n )\n // Keep the device's task slot occupied until interruption has finished cleanup.\n return Effect.promise(() =>\n running.then(\n () => undefined,\n () => undefined,\n ),\n )\n })\n",
|
|
15
15
|
"import {\n DeviceId,\n Provider,\n TaskRunId,\n makeDeviceId,\n type Provider as ProviderName,\n} from \"@cohall/protocol\"\nimport { Effect, Schema } from \"effect\"\nimport { access, chmod, mkdir, readFile, realpath, rename, stat, writeFile } from \"node:fs/promises\"\nimport { homedir, hostname, platform } from \"node:os\"\nimport { dirname, isAbsolute, 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(Provider.literals.length))\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 grokGateway: Schema.optionalKey(Schema.NonEmptyString),\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 mcpTaskId: Schema.optionalKey(Schema.String),\n mcpTaskRunId: Schema.optionalKey(TaskRunId),\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 grokGateway: Schema.optionalKey(Schema.NonEmptyString),\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 const configHome = process.env.XDG_CONFIG_HOME\n return join(\n configHome !== undefined && isAbsolute(configHome) ? configHome : join(homedir(), \".config\"),\n \"cohall\",\n )\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 const dataHome = process.env.XDG_DATA_HOME\n return join(\n dataHome !== undefined && isAbsolute(dataHome) ? dataHome : join(homedir(), \".local\", \"share\"),\n \"cohall\",\n )\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(\n values.map(async (workspace) => {\n const path = await realpath(resolve(workspace))\n if (!(await stat(path)).isDirectory()) {\n throw new Error(`Not a directory: ${workspace}`)\n }\n return path\n }),\n )\n return [...new Set(canonical)]\n },\n catch: (cause) =>\n new Error(\n `Workspace roots must be existing directories; 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 ...(existing?.grokGateway === undefined ? {} : { grokGateway: existing.grokGateway }),\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 ...(process.env.COHALL_TASK_ID === undefined\n ? {}\n : { mcpTaskId: process.env.COHALL_TASK_ID }),\n ...(process.env.COHALL_TASK_RUN_ID === undefined\n ? {}\n : { mcpTaskRunId: Schema.decodeUnknownSync(TaskRunId)(process.env.COHALL_TASK_RUN_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 const grokGateway = process.env.COHALL_GROK_GATEWAY ?? stored.grokGateway\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 ...(grokGateway === undefined ? {} : { grokGateway: resolve(grokGateway) }),\n })\n },\n catch: (cause) => (cause instanceof Error ? cause : new Error(String(cause))),\n})\n\nexport const knownProviders = Provider.literals\n",
|
|
16
16
|
"import { RelayRequestError, type Interface as RelayClient } from \"@cohall/client\"\nimport {\n BotId,\n DeviceId,\n Provider,\n TaskId,\n TaskStatus,\n TaskProgress,\n TaskClarification,\n TaskRunId,\n TaskDeadline,\n type Timestamp,\n TaskRequestId,\n type RequestTaskInput,\n ThreadId,\n terminalTaskStatuses,\n isTerminalTask,\n type Device,\n type InputAttachment,\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: Schema.optionalKey(TaskStatus) },\n) {}\n\nexport interface DelegateOptions {\n readonly requestId?: TaskRequestId\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 readonly parentTaskId?: TaskId\n readonly attachments?: ReadonlyArray<InputAttachment>\n readonly expiresAt?: Timestamp\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 bot_id: Schema.optionalKey(BotId),\n result: Schema.optionalKey(Schema.String),\n error: Schema.optionalKey(Schema.String),\n inbox_warning: Schema.optionalKey(Schema.String),\n progress: Schema.optionalKey(TaskProgress),\n input_request: Schema.optionalKey(TaskClarification),\n expires_at: Schema.optionalKey(TaskDeadline),\n})\nexport interface TaskResult extends Schema.Schema.Type<typeof TaskResult> {}\n\nconst matchingDevices = (devices: ReadonlyArray<Device>, target: string): ReadonlyArray<Device> => {\n const value = target.replace(/^@/, \"\")\n const normalized = value.toLowerCase()\n const byId = devices.find((device) => device.id === value)\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 listBots = (devices: ReadonlyArray<Device>) =>\n devices.flatMap((device) =>\n (device.bots ?? []).map((bot) => ({\n id: bot.id,\n name: bot.name,\n ...(bot.description === undefined ? {} : { description: bot.description }),\n device_id: device.id,\n device_name: device.name,\n status: device.status,\n target: `@${device.id}/${bot.id}`,\n })),\n )\n\nconst selectTarget = Effect.fn(\"Cohall.selectTarget\")(function* (\n devices: ReadonlyArray<Device>,\n target: string,\n) {\n const value = target.replace(/^@/, \"\")\n const separator = value.indexOf(\"/\")\n const qualified = separator !== -1\n const deviceMatches = matchingDevices(devices, qualified ? value.slice(0, separator) : value)\n const botValue = qualified ? value.slice(separator + 1) : value\n const bots = listBots(qualified ? deviceMatches : devices)\n const botsById = bots.filter((bot) => bot.id === botValue)\n const botMatches =\n botsById.length > 0\n ? botsById\n : bots.filter((bot) => bot.name.toLowerCase() === botValue.toLowerCase())\n // An exact device ID remains a direct device target, even if a bot uses it as a name.\n const exactDevice = qualified ? undefined : deviceMatches.find((device) => device.id === value)\n if (exactDevice !== undefined) return { deviceId: exactDevice.id, botId: undefined }\n const matches = [\n ...(qualified\n ? []\n : deviceMatches.map((device) => ({ deviceId: device.id, botId: undefined }))),\n ...botMatches.map((bot) => ({ deviceId: bot.device_id, botId: bot.id })),\n ]\n const selected = matches[0]\n if (matches.length === 1 && selected !== undefined) return selected\n return yield* new DeviceSelectionError({\n message:\n matches.length === 0\n ? `No Cohall device or bot matches ${target}; use cohall devices or cohall bots`\n : `${target} is ambiguous; use a device ID or @device-id/bot-id from cohall bots`,\n devices: [\n ...deviceMatches.map((device) => `${device.name} (@${device.id})`),\n ...botMatches.map((bot) => `${bot.name} on ${bot.device_name} (${bot.target})`),\n ],\n })\n})\n\nexport const taskResult = (task: Task): TaskResult => {\n const question = task.clarifications?.at(-1)\n return 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.botId === undefined ? {} : { bot_id: task.botId }),\n ...(task.result === undefined ? {} : { result: task.result }),\n ...(task.error === undefined ? {} : { error: task.error }),\n ...(task.expiresAt === undefined ? {} : { expires_at: task.expiresAt }),\n ...(task.progress === undefined ? {} : { progress: task.progress }),\n ...(task.status === \"needs_input\" && question !== undefined ? { input_request: question } : {}),\n })\n}\n\nexport const acknowledgedTaskResult = async (\n client: RelayClient,\n task: Task,\n signal?: AbortSignal,\n): Promise<TaskResult> => {\n signal?.throwIfAborted()\n const result = taskResult(task)\n if (!isTerminalTask(task)) return result\n const acknowledgementError = await Effect.runPromise(client.acknowledgeCompletion(task.id), {\n signal,\n })\n .then(() => undefined)\n .catch((cause: unknown) => {\n signal?.throwIfAborted()\n if (cause instanceof RelayRequestError && cause.status === 404) return undefined\n return cause instanceof Error ? cause.message : String(cause)\n })\n return acknowledgementError === undefined\n ? result\n : TaskResult.make({\n ...result,\n inbox_warning: `Result received, but the inbox could not be cleared: ${acknowledgementError}`,\n })\n}\n\nexport const requestInput = Effect.fn(\"Cohall.requestInput\")(function* (\n client: RelayClient,\n configuration: ClientConfiguration,\n question: RequestTaskInput[\"question\"],\n taskId?: TaskId,\n runId?: TaskRunId,\n) {\n const id =\n taskId ??\n (configuration.mcpTaskId === undefined\n ? undefined\n : yield* Schema.decodeUnknownEffect(TaskId)(configuration.mcpTaskId))\n if (id === undefined)\n return yield* new RelayRequestError({\n operation: \"Cohall.requestInput\",\n message: \"Task id is required outside delegated work\",\n })\n const inheritedRun = id === configuration.mcpTaskId ? configuration.mcpTaskRunId : undefined\n const turn = runId ?? inheritedRun ?? (yield* client.getTask(id)).runId\n if (turn === undefined)\n return yield* new RelayRequestError({\n operation: \"Cohall.requestInput\",\n message: \"Task has no current worker turn; upgrade the relay and worker\",\n })\n return yield* client.requestTaskInput(id, { runId: turn, question })\n})\n\nexport const createDelegation = Effect.fn(\"Cohall.createDelegation\")(function* (\n client: RelayClient,\n configuration: ClientConfiguration,\n options: DelegateOptions,\n) {\n if (\n options.requestId !== undefined &&\n options.threadId !== undefined &&\n options.target === undefined &&\n options.provider === undefined &&\n options.parentTaskId === undefined &&\n configuration.mcpTaskId === undefined\n )\n return yield* new DeviceSelectionError({\n message: \"With a request ID, select a target or provider explicitly for thread follow-ups\",\n devices: [],\n })\n const directTarget = (() => {\n if (options.requestId === undefined || options.target === undefined) return undefined\n const value = options.target.replace(/^@/, \"\")\n const separator = value.indexOf(\"/\")\n const id = Schema.decodeUnknownOption(DeviceId)(\n separator < 0 ? value : value.slice(0, separator),\n )\n if (id._tag === \"None\") return undefined\n return {\n deviceId: id.value,\n botId:\n separator < 0 ? undefined : Schema.decodeUnknownSync(BotId)(value.slice(separator + 1)),\n }\n })()\n const needsDiscovery =\n directTarget === undefined && (options.requestId === undefined || options.target !== undefined)\n const devices = needsDiscovery ? yield* client.devices() : []\n if (needsDiscovery && devices.length === 0) {\n return yield* new DeviceSelectionError({\n message: \"No Cohall devices are registered\",\n devices: [],\n })\n }\n let target =\n directTarget ??\n (options.target === undefined ? undefined : yield* selectTarget(devices, options.target))\n if (\n target === undefined &&\n options.requestId === undefined &&\n options.threadId !== undefined &&\n options.provider === undefined &&\n options.parentTaskId === undefined &&\n configuration.mcpTaskId === undefined\n ) {\n const context = yield* client.threadContext(options.threadId)\n const previous = context.tasks.findLast((task) => task.parentTaskId === undefined)\n if (previous === undefined && context.truncated) {\n return yield* new DeviceSelectionError({\n message: \"Earlier thread targets are no longer in the retained context; specify --target\",\n devices: [],\n })\n }\n if (previous?.provider === \"grok-bot\" && previous.botId !== undefined) {\n target = yield* selectTarget(devices, `@${previous.targetDeviceId}/${previous.botId}`)\n }\n }\n const botId = target?.botId\n if (botId !== undefined && options.provider !== undefined && options.provider !== \"grok-bot\") {\n return yield* new DeviceSelectionError({\n message: `A bot target requires provider grok-bot, not ${options.provider}`,\n devices: [],\n })\n }\n if (botId === undefined && options.provider === \"grok-bot\") {\n return yield* new DeviceSelectionError({\n message: \"Select a bot with --target; use cohall bots to list available bots\",\n devices: [],\n })\n }\n const provider = botId === undefined ? options.provider : \"grok-bot\"\n const inheritedThread = configuration.mcpThreadId\n const parentTaskId =\n options.parentTaskId ??\n (configuration.mcpTaskId === undefined\n ? undefined\n : yield* Schema.decodeUnknownEffect(TaskId)(configuration.mcpTaskId))\n return yield* client.createTask({\n prompt: options.prompt,\n ...(options.requestId === undefined ? {} : { requestId: options.requestId }),\n ...(target === undefined ? {} : { targetDeviceId: target.deviceId }),\n ...(botId === undefined ? {} : { botId }),\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 ...(provider === undefined ? {} : { provider }),\n ...(parentTaskId === undefined ? {} : { parentTaskId }),\n ...(options.attachments === undefined ? {} : { attachments: options.attachments }),\n ...(options.expiresAt === undefined ? {} : { expiresAt: options.expiresAt }),\n })\n})\n\nexport const waitForTask = Effect.fn(\"Cohall.waitForTask\")(function* (\n client: RelayClient,\n initial: Task | TaskId,\n timeoutSeconds: number,\n) {\n const id = typeof initial === \"string\" ? initial : initial.id\n let task = typeof initial === \"string\" ? undefined : initial\n return yield* Effect.gen(function* () {\n if (task === undefined) task = yield* client.getTask(id)\n while (!isTerminalTask(task) && task.status !== \"needs_input\") {\n yield* Effect.sleep(\"1 second\")\n task = yield* client.getTask(id)\n }\n return task\n }).pipe(\n Effect.timeoutOrElse({\n duration: timeoutSeconds * 1_000,\n orElse: () =>\n new TaskWaitTimeoutError({\n message:\n task === undefined\n ? `Task ${id} did not return its status after ${timeoutSeconds} seconds`\n : `Task ${id} is still ${task.status} after ${timeoutSeconds} seconds`,\n taskId: id,\n ...(task === undefined ? {} : { status: task.status }),\n }),\n }),\n )\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\"}:${trace.progress?.at ?? \"\"}:${trace.progress?.note ?? \"\"}:${JSON.stringify(trace.clarifications)}`\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",
|
|
17
17
|
"import type { Device } from \"@cohall/protocol\"\n\nexport const deviceVersions = (devices: ReadonlyArray<Device>, localVersion: string) => ({\n local_version: localVersion,\n current: devices.filter((device) => device.version === localVersion).length,\n different: devices.filter((device) => device.version !== localVersion).length,\n devices: devices.map((device) => ({\n id: device.id,\n name: device.name,\n status: device.status,\n version: device.version,\n current: device.version === localVersion,\n })),\n})\n\nexport const allDeviceHealth = (devices: ReadonlyArray<Device>, localVersion: string) => {\n const summaries = devices.map((device) => {\n const warnings = [\n ...(device.status === \"offline\" ? [\"Device is offline\"] : []),\n ...(device.providers.length === 0 ? [\"No provider executable is available\"] : []),\n ...(device.version === localVersion\n ? []\n : [`Running Cohall ${device.version}; local CLI is ${localVersion}`]),\n ]\n return {\n id: device.id,\n name: device.name,\n hostname: device.hostname,\n platform: device.platform,\n architecture: device.architecture,\n status: device.status,\n version: device.version,\n providers: device.providers,\n workspaces: device.workspaces.map((workspace) => workspace.path),\n last_seen_at: device.lastSeenAt,\n ...(device.queue === undefined ? {} : { queue: device.queue }),\n warnings,\n }\n })\n return {\n healthy: summaries.length > 0 && summaries.every((device) => device.warnings.length === 0),\n total: devices.length,\n online: devices.filter((device) => device.status === \"online\").length,\n busy: devices.filter((device) => device.status === \"busy\").length,\n offline: devices.filter((device) => device.status === \"offline\").length,\n warnings: summaries.length === 0 ? [\"No Cohall devices are registered\"] : [],\n devices: summaries,\n }\n}\n",
|
|
18
18
|
"import { Bot, type RequestTaskInput, type Task } from \"@cohall/protocol\"\nimport { Effect, Schedule, Schema } from \"effect\"\nimport { open } from \"node:fs/promises\"\nimport { isIP } from \"node:net\"\nimport { claimBotDispatch, prepareBotReply, readBotReply } from \"./bot-replies.ts\"\n\nconst maxResponseBytes = 4 * 1024 * 1024\nconst maxDiscoveryBytes = 64 * 1024\nconst text = Schema.NonEmptyString\nconst Discovery = Schema.Struct({\n port: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 65_535 })),\n host: Schema.optionalKey(text),\n scheme: Schema.optionalKey(Schema.Literals([\"http\", \"https\"])),\n token: Schema.optionalKey(Schema.String.check(Schema.isMaxLength(16_384))),\n})\nconst Agent = Schema.Struct({\n id: Bot.fields.id,\n name: Bot.fields.name,\n description: Schema.optionalKey(Schema.String),\n isGroup: Schema.optionalKey(Schema.Boolean),\n})\nconst Roster = Schema.Array(Agent).check(Schema.isMaxLength(1024))\nconst Acceptance = Schema.Union([\n Schema.Struct({ outcome: Schema.Literals([\"not-found\", \"unknown-durability\"]) }),\n Schema.Struct({\n outcome: Schema.Literal(\"found\"),\n record: Schema.Struct({\n status: Schema.Literals([\"accepted\", \"pending\", \"rejected\"]),\n }),\n }),\n])\nconst SendResult = Schema.Struct({ accepted: Schema.Literal(true) })\nclass GatewayError extends Error {}\n\nconst decode = <S extends Schema.ConstraintDecoder<unknown>>(\n schema: S,\n value: unknown,\n label: string,\n): S[\"Type\"] => {\n const result = Schema.decodeUnknownResult(schema)(value)\n if (result._tag === \"Failure\") throw new GatewayError(`Grok Bot returned an invalid ${label}`)\n return result.success\n}\n\nconst readConnection = async (path: string) => {\n const value = await (async () => {\n const file = await open(path, \"r\")\n try {\n const buffer = Buffer.alloc(maxDiscoveryBytes + 1)\n const { bytesRead } = await file.read(buffer, 0, buffer.length, 0)\n if (bytesRead > maxDiscoveryBytes) throw new Error(\"Discovery file exceeds its size limit\")\n return decode(\n Discovery,\n JSON.parse(buffer.subarray(0, bytesRead).toString(\"utf8\")),\n \"discovery file\",\n )\n } finally {\n await file.close()\n }\n })().catch(() => {\n throw new Error(\n \"Cannot read Grok Bot gateway discovery; check its configured file and running gateway\",\n )\n })\n const host = value.host ?? \"127.0.0.1\"\n const normalized =\n host === \"0.0.0.0\" || host === \"localhost\"\n ? \"127.0.0.1\"\n : host === \"::\" || host === \"::1\" || host === \"[::1]\"\n ? \"[::1]\"\n : host\n if (!(normalized === \"[::1]\" || (isIP(normalized) === 4 && normalized.startsWith(\"127.\")))) {\n throw new Error(\"Grok Bot gateway must use a loopback address on this device\")\n }\n return { url: `${value.scheme ?? \"http\"}://${normalized}:${value.port}`, token: value.token }\n}\n\ntype Connection = Awaited<ReturnType<typeof readConnection>>\n\nconst rpc = async <S extends Schema.ConstraintDecoder<unknown>>(\n connection: Connection,\n method: string,\n args: object,\n schema: S,\n signal?: AbortSignal,\n): Promise<S[\"Type\"]> => {\n const controller = new AbortController()\n const deadline = setTimeout(() => controller.abort(), 20_000)\n const combined =\n signal === undefined ? controller.signal : AbortSignal.any([signal, controller.signal])\n try {\n const response = await fetch(`${connection.url}/api/${method}`, {\n method: \"POST\",\n redirect: \"error\",\n headers: {\n \"content-type\": \"application/json\",\n \"x-sand-slim-avatars\": \"1\",\n ...(connection.token === undefined || connection.token.length === 0\n ? {}\n : { authorization: `Bearer ${connection.token}` }),\n },\n body: JSON.stringify(args),\n signal: combined,\n })\n if (!response.ok) {\n await response.body?.cancel()\n throw new GatewayError(`Grok Bot ${method} failed (HTTP ${response.status})`)\n }\n if (response.body === null) throw new GatewayError(\"Grok Bot returned an empty response\")\n const reader = response.body.getReader()\n const chunks: Array<Uint8Array> = []\n let size = 0\n try {\n for (;;) {\n const chunk = await reader.read()\n if (chunk.done) break\n size += chunk.value.byteLength\n if (size > maxResponseBytes) throw new GatewayError(\"Grok Bot response exceeded 4 MiB\")\n chunks.push(chunk.value)\n }\n } finally {\n await reader.cancel().catch(() => undefined)\n reader.releaseLock()\n }\n let json: unknown\n try {\n json = JSON.parse(Buffer.concat(chunks, size).toString(\"utf8\"))\n } catch {\n throw new GatewayError(`Grok Bot ${method} returned invalid JSON`)\n }\n return decode(schema, json, `${method} response`)\n } catch (cause) {\n // Fetch errors and decoder failures can contain bearer tokens or private response bodies.\n if (signal?.aborted)\n throw new Error(\"Stopped waiting for Grok Bot; its run may still be active\")\n if (cause instanceof GatewayError) throw cause\n throw new Error(`Grok Bot ${method} failed; check gateway availability and compatibility`)\n } finally {\n clearTimeout(deadline)\n }\n}\n\nexport const discoverGrokBots = async (path: string): Promise<ReadonlyArray<Bot>> => {\n const connection = await readConnection(path)\n const roster = await rpc(connection, \"listAgents\", {}, Roster)\n const bots = roster.filter((agent) => agent.isGroup !== true)\n if (bots.length > 256) throw new Error(\"Grok Bot discovery exceeds Cohall's limit of 256 bots\")\n if (new Set(bots.map((bot) => bot.id)).size !== bots.length) {\n throw new Error(\"Grok Bot returned duplicate bot identities\")\n }\n return bots.map(({ id, name, description }) => ({\n id,\n name,\n ...(description === undefined ? {} : { description: description.slice(0, 512) }),\n }))\n}\n\nconst poll = <A>(pass: (signal: AbortSignal) => Promise<A | undefined>, intervalMs = 1000) =>\n Effect.tryPromise({ try: pass, catch: (cause) => cause }).pipe(\n Effect.repeat({\n schedule: Schedule.spaced(intervalMs),\n until: (value) => value !== undefined,\n }),\n )\n\nconst timeoutMessage =\n \"Timed out waiting for the bot to reply through Cohall; the bot may still be running.\"\n\nconst requireTime = (deadline: number): void => {\n if (Date.now() >= deadline) throw new Error(timeoutMessage)\n}\n\nconst finishReply = (\n reply: NonNullable<Awaited<ReturnType<typeof readBotReply>>>,\n): { result: string; question?: RequestTaskInput[\"question\"] } => {\n if (reply.question !== undefined) return { result: \"\", question: reply.question }\n if (reply.error !== undefined) throw new Error(reply.error)\n if (reply.result === undefined) throw new Error(\"Grok Bot returned an invalid Cohall reply\")\n return { result: reply.result }\n}\n\nconst taskPrompt = (task: Task, command: string, supportsClarification: boolean): string => {\n const reply = `${command} reply ${task.id}${task.runId === undefined ? \"\" : ` --run-id ${task.runId}`}`\n return [\n task.prompt,\n task.context === undefined ? \"\" : `Context:\\n${task.context}`,\n `This request came through Cohall. Thread: ${task.threadId}. Task: ${task.id}.`,\n `You may use your own tools and delegate work to another Cohall device when the request calls for it. Discover devices with: ${command} devices`,\n `Delegation example: ${command} delegate --thread ${task.threadId} --parent ${task.id} --target @device --provider codex --prompt 'Concrete task' --context 'Relevant context'`,\n \"When finished, hand the final answer back to Cohall so it reaches the requesting device. Write it to a UTF-8 file on this computer, then run:\",\n `${reply} --message-file /absolute/path/to/your-answer.txt`,\n `Alternatively pipe your answer into: ${reply} --message -`,\n `If you cannot complete this task, report the reason with: ${reply} --error 'Reason'`,\n ...(supportsClarification && task.runId !== undefined\n ? [\n `If essential information is missing, run ${reply} --question 'Your question' and end this turn. Cohall will pause the task and send a new turn with the answer. Do not send a final reply after asking.`,\n ...(task.clarifications ?? []).flatMap((question) =>\n question.answer === undefined\n ? []\n : [\n `Clarification question:\\n${question.question}\\nSender's answer:\\n${question.answer.text}`,\n ],\n ),\n ]\n : []),\n \"The callback command must succeed. After submitting a final result, send the same answer in this chat. After submitting a question, end the turn. A normal chat message alone does not complete the Cohall task.\",\n ]\n .filter(Boolean)\n .join(\"\\n\\n\")\n}\n\nexport const runGrokBot = async (\n path: string | undefined,\n task: Task,\n signal: AbortSignal,\n supportsClarification = false,\n): Promise<{ result: string; question?: RequestTaskInput[\"question\"] }> => {\n const existing = await readBotReply(task.id, task.runId)\n if (existing !== undefined) return finishReply(existing)\n const { deadline, command, dispatched } = await prepareBotReply(task)\n requireTime(deadline)\n const agentId = task.botId\n if (agentId === undefined) throw new Error(\"Select a Grok Bot for this task\")\n const lookup = async (lookupSignal = signal) => {\n if (path === undefined)\n throw new Error(\"Configure this device's Grok Bot gateway discovery file first\")\n return rpc(\n await readConnection(path),\n \"promptAcceptanceStatus\",\n { accountSlot: \"host\", agentId, clientNonce: task.runId ?? task.id },\n Acceptance,\n lookupSignal,\n )\n }\n const waitForReply = (reconcile = false) => {\n const receipt = poll(async () => {\n const receipt = await readBotReply(task.id, task.runId)\n if (receipt !== undefined) return finishReply(receipt)\n requireTime(deadline)\n return undefined\n })\n if (!reconcile || path === undefined) return Effect.runPromise(receipt, { signal })\n // Acceptance ends reconciliation; only the local reply completes the task.\n const acceptance = poll(async (lookupSignal) => {\n const current = await lookup(lookupSignal).catch(() => undefined)\n if (current?.outcome !== \"found\") return undefined\n if (current.record.status === \"rejected\")\n throw new Error(\"Grok Bot rejected this task; check its conversation\")\n return current.record.status === \"accepted\" ? true : undefined\n }, 5000).pipe(Effect.andThen(Effect.never))\n return Effect.runPromise(Effect.raceFirst(receipt, acceptance), { signal })\n }\n if (dispatched) return waitForReply(true)\n if (path === undefined)\n throw new Error(\"Configure this device's Grok Bot gateway discovery file first\")\n const connection = await readConnection(path)\n let acceptance = await lookup()\n if (acceptance.outcome === \"unknown-durability\")\n throw new Error(\n \"Grok Bot cannot confirm whether this task was accepted; check its conversation before retrying\",\n )\n if (acceptance.outcome === \"not-found\") {\n const receipt = await readBotReply(task.id, task.runId)\n if (receipt !== undefined) return finishReply(receipt)\n requireTime(deadline)\n const roster = await rpc(connection, \"listAgents\", {}, Roster, signal)\n if (!roster.some((row) => row.id === agentId && row.isGroup !== true)) {\n throw new Error(\"The selected Grok Bot no longer exists on this device\")\n }\n requireTime(deadline)\n acceptance = await lookup()\n if (acceptance.outcome === \"not-found\") {\n requireTime(deadline)\n if (!(await claimBotDispatch(task.id, task.runId))) {\n return waitForReply(true)\n }\n try {\n await rpc(\n connection,\n \"sendPrompt\",\n {\n agentId,\n prompt: taskPrompt(task, command, supportsClarification),\n clientNonce: task.runId ?? task.id,\n directAddressedAcceptance: true,\n },\n SendResult,\n signal,\n )\n } catch {\n if (signal.aborted)\n throw new Error(\"Stopped waiting for Grok Bot; its run may still be active\")\n const receipt = await readBotReply(task.id, task.runId)\n if (receipt !== undefined) return finishReply(receipt)\n return waitForReply(true)\n }\n return waitForReply()\n }\n }\n if (acceptance.outcome === \"unknown-durability\")\n throw new Error(\"Grok Bot cannot confirm task acceptance; the prompt was not resent\")\n if (acceptance.outcome === \"found\" && acceptance.record.status === \"rejected\")\n throw new Error(\"Grok Bot rejected this task; check its conversation\")\n return waitForReply(acceptance.outcome === \"found\" && acceptance.record.status === \"pending\")\n}\n",
|
|
19
19
|
"import { BotId, TaskId, TaskRunId, RequestTaskInput, ThreadId, type Task } from \"@cohall/protocol\"\nimport { Schema } from \"effect\"\nimport { randomUUID } from \"node:crypto\"\nimport { chmod, link, mkdir, open, unlink } from \"node:fs/promises\"\nimport { dirname, join } from \"node:path\"\nimport { platform } from \"node:os\"\nimport { configurationPath } from \"./config.ts\"\n\nconst replyLifetimeMs = 6 * 60 * 60 * 1_000\nconst Pending = Schema.Struct({\n taskId: TaskId,\n botId: BotId,\n threadId: ThreadId,\n deadline: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)),\n})\nconst Dispatch = Schema.Struct({ taskId: TaskId })\nconst Reply = Schema.Union([\n Schema.Struct({\n result: Schema.String.check(Schema.isMaxLength(131_072)),\n error: Schema.optionalKey(Schema.Never),\n question: Schema.optionalKey(Schema.Never),\n }),\n Schema.Struct({\n error: Schema.NonEmptyString.check(Schema.isMaxLength(16_384)),\n result: Schema.optionalKey(Schema.Never),\n question: Schema.optionalKey(Schema.Never),\n }),\n Schema.Struct({\n question: RequestTaskInput.fields.question,\n result: Schema.optionalKey(Schema.Never),\n error: Schema.optionalKey(Schema.Never),\n }),\n])\nexport type BotReply = typeof Reply.Type\nconst Receipt = Schema.Struct({\n taskId: TaskId,\n submittedAt: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)),\n reply: Reply,\n})\n\nconst isMissing = (cause: unknown) =>\n cause instanceof Error && \"code\" in cause && cause.code === \"ENOENT\"\nconst alreadyExists = (cause: unknown) =>\n cause instanceof Error && \"code\" in cause && cause.code === \"EEXIST\"\n\nconst paths = (taskId: TaskId, runId?: TaskRunId) => {\n const id = Schema.decodeUnknownSync(TaskId)(taskId)\n const directory = join(dirname(configurationPath()), \"bot-replies\")\n const key = runId === undefined ? id : `${id}.${Schema.decodeUnknownSync(TaskRunId)(runId)}`\n return {\n directory,\n pending: join(directory, `${key}.pending.json`),\n receipt: join(directory, `${key}.reply.json`),\n dispatch: join(directory, `${key}.dispatch.json`),\n }\n}\n\nconst readJson = async (path: string, limit: number): Promise<unknown | undefined> => {\n const file = await open(path, \"r\").catch((cause: unknown) => {\n if (isMissing(cause)) return undefined\n throw cause\n })\n if (file === undefined) return undefined\n try {\n const buffer = Buffer.alloc(limit + 1)\n let size = 0\n while (size < buffer.length) {\n const { bytesRead } = await file.read(buffer, size, buffer.length - size, size)\n if (bytesRead === 0) break\n size += bytesRead\n }\n if (size > limit) throw new Error(\"Bot reply record exceeds its size limit\")\n return JSON.parse(buffer.subarray(0, size).toString(\"utf8\"))\n } catch {\n throw new Error(\"Invalid local bot reply record\")\n } finally {\n await file.close()\n }\n}\n\nconst pendingReply = async (taskId: TaskId, runId?: TaskRunId) => {\n const value = await readJson(paths(taskId, runId).pending, 4096)\n if (value === undefined) return undefined\n const decoded = Schema.decodeUnknownResult(Pending)(value)\n if (decoded._tag === \"Failure\" || decoded.success.taskId !== taskId) {\n throw new Error(\"Invalid local bot reply manifest\")\n }\n return decoded.success\n}\n\nconst publish = async (path: string, value: object): Promise<boolean> => {\n const temporary = `${path}.${randomUUID()}.tmp`\n const file = await open(temporary, \"wx\", 0o600)\n try {\n try {\n await file.writeFile(`${JSON.stringify(value)}\\n`, \"utf8\")\n await file.sync()\n } finally {\n await file.close()\n }\n await link(temporary, path)\n if (platform() !== \"win32\") {\n const directory = await open(dirname(path), \"r\")\n try {\n await directory.sync()\n } finally {\n await directory.close()\n }\n }\n return true\n } catch (cause) {\n if (alreadyExists(cause)) return false\n throw cause\n } finally {\n await unlink(temporary)\n }\n}\n\nconst shellQuote = (value: string) => `'${value.replaceAll(\"'\", \"'\\\\''\")}'`\n\nexport const prepareBotReply = async (\n task: Task,\n): Promise<{ deadline: number; command: string; dispatched: boolean }> => {\n if (task.provider !== \"grok-bot\" || task.botId === undefined) {\n throw new Error(\"Only a named Grok Bot task can receive a bot reply\")\n }\n const files = paths(task.id, task.runId)\n await mkdir(files.directory, { recursive: true, mode: 0o700 })\n await chmod(files.directory, 0o700)\n const record = Pending.make({\n taskId: task.id,\n botId: task.botId,\n threadId: task.threadId,\n deadline: Date.now() + replyLifetimeMs,\n })\n await publish(files.pending, record)\n const pending = await pendingReply(task.id, task.runId)\n if (pending === undefined || pending.botId !== task.botId || pending.threadId !== task.threadId) {\n throw new Error(\"Bot reply manifest does not match this task\")\n }\n const dispatch = await readJson(files.dispatch, 4096)\n if (dispatch !== undefined) {\n const decoded = Schema.decodeUnknownResult(Dispatch)(dispatch)\n if (decoded._tag === \"Failure\" || decoded.success.taskId !== task.id) {\n throw new Error(\"Invalid local bot dispatch record\")\n }\n }\n return {\n deadline: pending.deadline,\n command: `COHALL_CONFIG=${shellQuote(configurationPath())} cohall`,\n dispatched: dispatch !== undefined,\n }\n}\n\nexport const claimBotDispatch = async (taskId: TaskId, runId?: TaskRunId): Promise<boolean> => {\n const pending = await pendingReply(taskId, runId)\n if (pending === undefined) throw new Error(\"No pending bot reply for this task\")\n if (Date.now() >= pending.deadline) throw new Error(\"Bot reply deadline has expired\")\n return publish(paths(taskId, runId).dispatch, { taskId })\n}\n\nexport const readBotReply = async (\n taskId: TaskId,\n runId?: TaskRunId,\n): Promise<BotReply | undefined> => {\n const pending = await pendingReply(taskId, runId)\n if (pending === undefined) return undefined\n const value = await readJson(paths(taskId, runId).receipt, 1024 * 1024)\n if (value === undefined) return undefined\n const decoded = Schema.decodeUnknownResult(Receipt)(value)\n if (decoded._tag === \"Failure\" || decoded.success.taskId !== taskId) {\n throw new Error(\"Invalid local bot reply receipt\")\n }\n if (decoded.success.submittedAt >= pending.deadline) {\n throw new Error(\"Bot reply was submitted after its deadline\")\n }\n return decoded.success.reply\n}\n\nexport const writeBotReply = async (\n taskId: TaskId,\n reply: BotReply,\n runId?: TaskRunId,\n): Promise<void> => {\n const decoded = Schema.decodeUnknownResult(Reply)(reply)\n if (decoded._tag === \"Failure\") {\n throw new Error(\n \"Provide a result of at most 131072 characters, a nonempty error of at most 16384 characters, or a clarification question of at most 4096 UTF-8 bytes\",\n )\n }\n const pending = await pendingReply(taskId, runId)\n if (pending === undefined) throw new Error(\"No pending bot reply for this task\")\n const existing = await readBotReply(taskId, runId)\n if (existing !== undefined) {\n if (JSON.stringify(existing) === JSON.stringify(decoded.success)) return\n throw new Error(\"A different reply has already been submitted for this task\")\n }\n const submittedAt = Date.now()\n if (submittedAt >= pending.deadline) throw new Error(\"Bot reply deadline has expired\")\n if (await publish(paths(taskId, runId).receipt, { taskId, submittedAt, reply: decoded.success }))\n return\n const winner = await readBotReply(taskId, runId)\n if (JSON.stringify(winner) !== JSON.stringify(decoded.success)) {\n throw new Error(\"A different reply has already been submitted for this task\")\n }\n}\n\nexport const cleanupBotReply = async (taskId: TaskId, runId?: TaskRunId): Promise<void> => {\n const files = paths(taskId, runId)\n for (const path of [files.pending, files.receipt, files.dispatch]) {\n await unlink(path).catch((cause: unknown) => {\n if (!isMissing(cause)) throw cause\n })\n }\n}\n",
|
|
20
|
-
"import { exchangePairing } from \"@cohall/client\"\nimport { type Provider as ProviderName } from \"@cohall/protocol\"\nimport { Effect } from \"effect\"\nimport { hostname } from \"node:os\"\nimport { Writable } from \"node:stream\"\nimport { createInterface } from \"node:readline/promises\"\nimport {\n StoredConfiguration,\n credentialsForRelay,\n makeStoredConfiguration,\n normalizeRelayUrl,\n readStoredConfiguration,\n writeStoredConfiguration,\n} from \"./config.ts\"\n\nexport interface JoinOptions {\n readonly relayUrl: string\n readonly token: string\n readonly clientOnly: boolean\n readonly deviceName?: string\n readonly workspaces?: ReadonlyArray<string>\n readonly providers?: ReadonlyArray<ProviderName> | \"auto\"\n}\n\nexport interface JoinResult {\n readonly configuration: StoredConfiguration\n readonly roles: ReadonlyArray<\"client\" | \"device\">\n}\n\nexport const joinRelay = async (options: JoinOptions): Promise<JoinResult> => {\n const draft = await makeStoredConfiguration({\n relayUrl: options.relayUrl,\n ...(options.deviceName === undefined ? {} : { deviceName: options.deviceName }),\n ...(options.workspaces === undefined ? {} : { workspaces: options.workspaces }),\n ...(options.providers === undefined ? {} : { providers: options.providers }),\n })\n if (!options.clientOnly && draft.workspaces.length === 0) {\n throw new Error(\"At least one workspace is required when joining a device\")\n }\n\n const paired = await Effect.runPromise(exchangePairing(draft.relayUrl, { token: options.token }))\n const clientToken = paired.credentials.find(\n (credential) => credential.session.role === \"client\",\n )?.token\n const deviceCredential = paired.credentials.find(\n (credential) => credential.session.role === \"device\",\n )\n if (options.clientOnly && clientToken === undefined) {\n throw new Error(\"The pairing credential did not include client access\")\n }\n if (!options.clientOnly && deviceCredential === undefined) {\n throw new Error(\"The pairing credential did not include device access\")\n }\n\n const {\n clientToken: _retainedClientToken,\n deviceToken: _retainedDeviceToken,\n ...configurationDraft\n } = draft\n const configuration = StoredConfiguration.make({\n ...configurationDraft,\n deviceId: options.clientOnly\n ? configurationDraft.deviceId\n : (deviceCredential?.session.deviceId ?? configurationDraft.deviceId),\n ...(clientToken === undefined ? {} : { clientToken }),\n ...(options.clientOnly || deviceCredential === undefined\n ? {}\n : { deviceToken: deviceCredential.token }),\n })\n await writeStoredConfiguration(configuration)\n return {\n configuration,\n roles: options.clientOnly\n ? paired.credentials\n .map((credential) => credential.session.role)\n .filter((role) => role === \"client\")\n : paired.credentials.map((credential) => credential.session.role),\n }\n}\n\nexport interface Prompter {\n readonly answer: (label: string, fallback: string) => Promise<string>\n readonly secret: (label: string) => Promise<string>\n readonly close: () => void\n}\n\nexport const terminalPrompter = (): Prompter => {\n let muted = false\n const output = new Writable({\n write(chunk: Buffer | string, _encoding, callback) {\n if (!muted) {\n process.stderr.write(chunk)\n }\n callback()\n },\n })\n const terminal = createInterface({ input: process.stdin, output, terminal: true })\n return {\n answer: async (label, fallback) => {\n const value = (await terminal.question(`${label} [${fallback}]: `)).trim()\n return value || fallback\n },\n secret: async (label) => {\n const pending = terminal.question(`${label}: `)\n muted = true\n try {\n return (await pending).trim()\n } finally {\n muted = false\n process.stderr.write(\"\\n\")\n }\n },\n close: () => terminal.close(),\n }\n}\n\nexport interface GuidedSetupOptions {\n readonly relayUrl?: string\n readonly token?: string\n readonly clientOnly: boolean\n readonly deviceName?: string\n readonly workspaces: ReadonlyArray<string>\n readonly providers?: string\n readonly cwd: string\n}\n\nexport interface GuidedSetupInput {\n readonly relayUrl: string\n readonly token?: string\n readonly deviceName?: string\n readonly workspaces: ReadonlyArray<string>\n readonly providers: string\n readonly reusedConfiguration: boolean\n}\n\nexport const guidedSetupInput = async (\n options: GuidedSetupOptions,\n prompter: Prompter,\n): Promise<GuidedSetupInput> => {\n const existing = await readStoredConfiguration()\n const relayUrl =
|
|
20
|
+
"import { exchangePairing } from \"@cohall/client\"\nimport { type Provider as ProviderName } from \"@cohall/protocol\"\nimport { Effect } from \"effect\"\nimport { hostname } from \"node:os\"\nimport { Writable } from \"node:stream\"\nimport { createInterface } from \"node:readline/promises\"\nimport {\n StoredConfiguration,\n credentialsForRelay,\n makeStoredConfiguration,\n normalizeRelayUrl,\n readStoredConfiguration,\n writeStoredConfiguration,\n} from \"./config.ts\"\n\nexport interface JoinOptions {\n readonly relayUrl: string\n readonly token: string\n readonly clientOnly: boolean\n readonly deviceName?: string\n readonly workspaces?: ReadonlyArray<string>\n readonly providers?: ReadonlyArray<ProviderName> | \"auto\"\n}\n\nexport interface JoinResult {\n readonly configuration: StoredConfiguration\n readonly roles: ReadonlyArray<\"client\" | \"device\">\n}\n\nexport const joinRelay = async (options: JoinOptions): Promise<JoinResult> => {\n const draft = await makeStoredConfiguration({\n relayUrl: options.relayUrl,\n ...(options.deviceName === undefined ? {} : { deviceName: options.deviceName }),\n ...(options.workspaces === undefined ? {} : { workspaces: options.workspaces }),\n ...(options.providers === undefined ? {} : { providers: options.providers }),\n })\n if (!options.clientOnly && draft.workspaces.length === 0) {\n throw new Error(\"At least one workspace is required when joining a device\")\n }\n\n const paired = await Effect.runPromise(exchangePairing(draft.relayUrl, { token: options.token }))\n const clientToken = paired.credentials.find(\n (credential) => credential.session.role === \"client\",\n )?.token\n const deviceCredential = paired.credentials.find(\n (credential) => credential.session.role === \"device\",\n )\n if (options.clientOnly && clientToken === undefined) {\n throw new Error(\"The pairing credential did not include client access\")\n }\n if (!options.clientOnly && deviceCredential === undefined) {\n throw new Error(\"The pairing credential did not include device access\")\n }\n\n const {\n clientToken: _retainedClientToken,\n deviceToken: _retainedDeviceToken,\n ...configurationDraft\n } = draft\n const configuration = StoredConfiguration.make({\n ...configurationDraft,\n deviceId: options.clientOnly\n ? configurationDraft.deviceId\n : (deviceCredential?.session.deviceId ?? configurationDraft.deviceId),\n ...(clientToken === undefined ? {} : { clientToken }),\n ...(options.clientOnly || deviceCredential === undefined\n ? {}\n : { deviceToken: deviceCredential.token }),\n })\n await writeStoredConfiguration(configuration)\n return {\n configuration,\n roles: options.clientOnly\n ? paired.credentials\n .map((credential) => credential.session.role)\n .filter((role) => role === \"client\")\n : paired.credentials.map((credential) => credential.session.role),\n }\n}\n\nexport interface Prompter {\n readonly answer: (label: string, fallback: string) => Promise<string>\n readonly secret: (label: string) => Promise<string>\n readonly close: () => void\n}\n\nexport const terminalPrompter = (): Prompter => {\n let muted = false\n const output = new Writable({\n write(chunk: Buffer | string, _encoding, callback) {\n if (!muted) {\n process.stderr.write(chunk)\n }\n callback()\n },\n })\n const terminal = createInterface({ input: process.stdin, output, terminal: true })\n return {\n answer: async (label, fallback) => {\n const value = (await terminal.question(`${label} [${fallback}]: `)).trim()\n return value || fallback\n },\n secret: async (label) => {\n const pending = terminal.question(`${label}: `)\n muted = true\n try {\n return (await pending).trim()\n } finally {\n muted = false\n process.stderr.write(\"\\n\")\n }\n },\n close: () => terminal.close(),\n }\n}\n\nexport interface GuidedSetupOptions {\n readonly relayUrl?: string\n readonly token?: string\n readonly clientOnly: boolean\n readonly deviceName?: string\n readonly workspaces: ReadonlyArray<string>\n readonly providers?: string\n readonly cwd: string\n}\n\nexport interface GuidedSetupInput {\n readonly relayUrl: string\n readonly token?: string\n readonly deviceName?: string\n readonly workspaces: ReadonlyArray<string>\n readonly providers: string\n readonly reusedConfiguration: boolean\n}\n\nexport const setupRelayUrl = (input: string | undefined): string => {\n if (input === undefined || input.trim().length === 0) {\n throw new Error(\n \"Relay URL is required. Run `cohall onboard` to choose a relay host or join an existing relay.\",\n )\n }\n return normalizeRelayUrl(input)\n}\n\nexport const guidedSetupInput = async (\n options: GuidedSetupOptions,\n prompter: Prompter,\n): Promise<GuidedSetupInput> => {\n const existing = await readStoredConfiguration()\n const relayUrl = setupRelayUrl(\n options.relayUrl ?? (await prompter.answer(\"Relay URL\", existing?.relayUrl ?? \"\")),\n )\n const credentials = credentialsForRelay(existing, relayUrl)\n const hasRequiredCredentials =\n credentials.clientToken !== undefined &&\n (options.clientOnly || credentials.deviceToken !== undefined)\n let workspaces = options.clientOnly ? (existing?.workspaces ?? []) : options.workspaces\n if (!options.clientOnly && workspaces.length === 0) {\n const root = await prompter.answer(\"Workspace root\", existing?.workspaces[0] ?? options.cwd)\n workspaces =\n existing !== undefined && root === existing.workspaces[0] ? existing.workspaces : [root]\n }\n const deviceName = options.clientOnly\n ? undefined\n : (options.deviceName ??\n (await prompter.answer(\"Device name\", existing?.deviceName ?? hostname())))\n const providers =\n options.providers ??\n (options.clientOnly\n ? (existing?.providers?.join(\",\") ?? \"auto\")\n : await prompter.answer(\"Providers\", existing?.providers?.join(\",\") ?? \"auto\"))\n const token =\n options.token ?? (hasRequiredCredentials ? undefined : await prompter.secret(\"Pairing token\"))\n if (!hasRequiredCredentials && (token === undefined || token.length === 0)) {\n throw new Error(\"A pairing token is required\")\n }\n if (token !== undefined && new TextEncoder().encode(token).byteLength > 256) {\n throw new Error(\"Pairing token exceeds 256 bytes\")\n }\n return {\n relayUrl,\n ...(token === undefined ? {} : { token }),\n ...(deviceName === undefined ? {} : { deviceName }),\n workspaces,\n providers,\n reusedConfiguration: hasRequiredCredentials && token === undefined,\n }\n}\n",
|
|
21
21
|
"import { RelayClient, RelayRequestError } from \"@cohall/client\"\nimport { SocketEvent, Timestamp, version } from \"@cohall/protocol\"\nimport { Effect, Schema } from \"effect\"\nimport { createHash } from \"node:crypto\"\nimport { createReadStream } from \"node:fs\"\nimport {\n access,\n chmod,\n copyFile,\n lstat,\n mkdir,\n mkdtemp,\n readFile,\n realpath,\n rename,\n rm,\n stat,\n writeFile,\n} from \"node:fs/promises\"\nimport { basename, dirname, join, resolve } from \"node:path\"\nimport { backup as sqliteBackup, DatabaseSync } from \"node:sqlite\"\nimport { WebSocket } from \"ws\"\nimport {\n StoredConfiguration,\n normalizeRelayUrl,\n readStoredConfiguration,\n relayDataDirectory,\n writeStoredConfiguration,\n} from \"./config.ts\"\nimport { restartDeviceService, type DeviceServiceRestart } from \"./service.ts\"\n\nconst sha256 = Schema.String.check(\n Schema.isPattern(/^[a-f0-9]{64}$/, { expected: \"a lowercase SHA-256 digest\" }),\n)\n\nconst RelayBackupManifest = Schema.Struct({\n formatVersion: Schema.Literal(1),\n cohallVersion: Schema.NonEmptyString,\n createdAt: Timestamp,\n databaseSha256: sha256,\n ownerTokenSha256: sha256,\n})\ninterface RelayBackupManifest extends Schema.Schema.Type<typeof RelayBackupManifest> {}\n\nconst exists = (path: string): Promise<boolean> =>\n access(path)\n .then(() => true)\n .catch(() => false)\n\nconst digest = async (path: string): Promise<string> => {\n const hash = createHash(\"sha256\")\n for await (const chunk of createReadStream(path)) {\n hash.update(chunk)\n }\n return hash.digest(\"hex\")\n}\n\nconst verifyBackupMember = async (path: string, maximumBytes?: number): Promise<void> => {\n const metadata = await lstat(path)\n if (!metadata.isFile()) {\n throw new Error(`Relay backup member must be a regular file: ${path}`)\n }\n if (maximumBytes !== undefined && metadata.size > maximumBytes) {\n throw new Error(`Relay backup member exceeds ${maximumBytes} bytes: ${path}`)\n }\n}\n\nconst readManifest = async (path: string): Promise<RelayBackupManifest> => {\n await verifyBackupMember(path, 16_384)\n return Schema.decodeUnknownSync(RelayBackupManifest)(JSON.parse(await readFile(path, \"utf8\")))\n}\n\nconst verifyBackupDestinationParent = async (path: string): Promise<void> => {\n if (process.platform === \"win32\") {\n return\n }\n for (let current = await realpath(path); ; current = dirname(current)) {\n const metadata = await stat(current)\n const writableByOthers = (metadata.mode & 0o022) !== 0\n const sticky = (metadata.mode & 0o1000) !== 0\n if (writableByOthers && !sticky) {\n throw new Error(\n `Backup destination ancestors must not be group- or world-writable unless they use the sticky bit: ${current}`,\n )\n }\n const parent = dirname(current)\n if (parent === current) {\n return\n }\n }\n}\n\nconst ownerToken = async (dataDirectory: string): Promise<string> => {\n const path = join(dataDirectory, \"owner-token\")\n const configured = process.env.COHALL_TOKEN\n if (configured !== undefined) {\n return configured\n }\n if (!(await exists(path))) {\n throw new Error(`Relay owner token was not found at ${path}`)\n }\n if ((await stat(path)).size > 512) {\n throw new Error(\"Relay owner token file exceeds 512 bytes\")\n }\n return (await readFile(path, \"utf8\")).trim()\n}\n\nconst verifyDatabase = (path: string): void => {\n const database = new DatabaseSync(path, { readOnly: true })\n try {\n const result = database.prepare(\"PRAGMA quick_check\").get()\n if (result === undefined || Object.values(result)[0] !== \"ok\") {\n throw new Error(`SQLite integrity check failed for ${path}`)\n }\n } finally {\n database.close()\n }\n}\n\nexport interface RelayBackupResult {\n readonly backup_directory: string\n readonly database: string\n readonly created_at: Timestamp\n readonly warning: string\n}\n\nexport const backupRelay = async (destinationInput: string): Promise<RelayBackupResult> => {\n const sourceDirectory = relayDataDirectory()\n const sourceDatabase = join(sourceDirectory, \"cohall.db\")\n if (!(await exists(sourceDatabase))) {\n throw new Error(`Relay database was not found at ${sourceDatabase}`)\n }\n const destination = resolve(destinationInput)\n if (await exists(destination)) {\n throw new Error(`Backup destination already exists: ${destination}`)\n }\n await verifyBackupDestinationParent(dirname(destination))\n await mkdir(destination, { mode: 0o700 })\n try {\n const databasePath = join(destination, \"cohall.db\")\n const ownerTokenPath = join(destination, \"owner-token\")\n const database = new DatabaseSync(sourceDatabase, { readOnly: true })\n try {\n await sqliteBackup(database, databasePath)\n } finally {\n database.close()\n }\n verifyDatabase(databasePath)\n const token = await ownerToken(sourceDirectory)\n if (token.length < 32 || new TextEncoder().encode(token).byteLength > 512) {\n throw new Error(\"The relay owner token must contain between 32 and 512 bytes\")\n }\n await writeFile(ownerTokenPath, `${token}\\n`, { mode: 0o600 })\n await Promise.all([chmod(databasePath, 0o600), chmod(ownerTokenPath, 0o600)])\n const createdAt = Timestamp.make(new Date().toISOString())\n const manifest = RelayBackupManifest.make({\n formatVersion: 1,\n cohallVersion: version,\n createdAt,\n databaseSha256: await digest(databasePath),\n ownerTokenSha256: await digest(ownerTokenPath),\n })\n await writeFile(join(destination, \"manifest.json\"), `${JSON.stringify(manifest, null, 2)}\\n`, {\n mode: 0o600,\n })\n return {\n backup_directory: destination,\n database: databasePath,\n created_at: createdAt,\n warning:\n \"This backup contains relay credentials and task history. Transfer and store it privately.\",\n }\n } catch (cause) {\n await rm(destination, { recursive: true, force: true })\n throw cause\n }\n}\n\nexport interface RelayRestoreResult {\n readonly restored: true\n readonly data_directory: string\n readonly backup_version: string\n readonly next: string\n}\n\nexport const restoreRelay = async (sourceInput: string): Promise<RelayRestoreResult> => {\n const source = resolve(sourceInput)\n const sourceDatabase = join(source, \"cohall.db\")\n const sourceOwnerToken = join(source, \"owner-token\")\n const sourceManifest = join(source, \"manifest.json\")\n for (const path of [sourceDatabase, sourceOwnerToken, sourceManifest]) {\n if (!(await exists(path))) {\n throw new Error(`Relay backup is missing ${basename(path)}`)\n }\n }\n await Promise.all([\n verifyBackupMember(sourceDatabase),\n verifyBackupMember(sourceOwnerToken, 1_024),\n verifyBackupMember(sourceManifest, 16_384),\n ])\n\n const target = relayDataDirectory()\n if (await exists(target)) {\n throw new Error(\n `Relay data directory already exists: ${target}. Restore into a new COHALL_DATA_DIR.`,\n )\n }\n const parent = dirname(target)\n await mkdir(parent, { recursive: true, mode: 0o700 })\n const staging = await mkdtemp(join(parent, `.${basename(target)}.restore-`))\n let backupVersion = \"\"\n try {\n await chmod(staging, 0o700)\n const databasePath = join(staging, \"cohall.db\")\n const ownerTokenPath = join(staging, \"owner-token\")\n const manifestPath = join(staging, \"migration-manifest.json\")\n await Promise.all([\n copyFile(sourceDatabase, databasePath),\n copyFile(sourceOwnerToken, ownerTokenPath),\n copyFile(sourceManifest, manifestPath),\n ])\n await Promise.all([\n chmod(databasePath, 0o600),\n chmod(ownerTokenPath, 0o600),\n chmod(manifestPath, 0o600),\n ])\n const manifest = await readManifest(manifestPath)\n if (\n (await digest(databasePath)) !== manifest.databaseSha256 ||\n (await digest(ownerTokenPath)) !== manifest.ownerTokenSha256\n ) {\n throw new Error(\"Relay backup checksum verification failed\")\n }\n verifyDatabase(databasePath)\n const token = (await readFile(ownerTokenPath, \"utf8\")).trim()\n if (token.length < 32 || new TextEncoder().encode(token).byteLength > 512) {\n throw new Error(\"Relay backup contains an invalid owner token\")\n }\n backupVersion = manifest.cohallVersion\n await rename(staging, target)\n } catch (cause) {\n await rm(staging, { recursive: true, force: true })\n throw cause\n }\n return {\n restored: true,\n data_directory: target,\n backup_version: backupVersion,\n next: \"Start the relay at its new address, then run `cohall relay use <new-url>` on each client and device.\",\n }\n}\n\nconst websocketUrl = (relayUrl: string): string => {\n const url = new URL(relayUrl)\n url.protocol = url.protocol === \"https:\" ? \"wss:\" : \"ws:\"\n url.pathname = \"/ws/device\"\n return url.toString()\n}\n\nconst isLoopback = (url: URL): boolean =>\n url.hostname === \"localhost\" ||\n url.hostname === \"[::1]\" ||\n /^127(?:\\.\\d{1,3}){3}$/.test(url.hostname)\n\nconst verifyClientCredential = async (relayUrl: string, token: string): Promise<void> => {\n await Effect.runPromise(RelayClient.make({ baseUrl: relayUrl, token }).devices())\n}\n\nconst verifyLegacyDeviceCredential = (relayUrl: string, token: string): Promise<void> =>\n new Promise((resolvePromise, reject) => {\n const socket = new WebSocket(websocketUrl(relayUrl), {\n handshakeTimeout: 10_000,\n maxPayload: 1024 * 1024,\n perMessageDeflate: false,\n })\n let settled = false\n const finish = (error?: Error): void => {\n if (settled) {\n return\n }\n settled = true\n clearTimeout(timeout)\n socket.terminate()\n if (error === undefined) {\n resolvePromise()\n return\n }\n reject(error)\n }\n const timeout = setTimeout(\n () => finish(new Error(\"Timed out while verifying the device credential\")),\n 10_000,\n )\n socket.once(\"open\", () => {\n socket.send(JSON.stringify(SocketEvent.make({ _tag: \"Authenticate\", token })))\n })\n socket.on(\"message\", (data) => {\n try {\n const event = Schema.decodeUnknownSync(SocketEvent)(JSON.parse(data.toString()) as unknown)\n if (event._tag === \"Connected\") {\n finish()\n } else if (event._tag === \"Error\") {\n finish(new Error(event.message))\n }\n } catch (cause) {\n finish(new Error(`New relay returned an invalid device response: ${String(cause)}`))\n }\n })\n socket.once(\"error\", (cause) => finish(cause))\n socket.once(\"close\", () => finish(new Error(\"New relay rejected the stored device credential\")))\n })\n\nconst verifyDeviceCredential = (relayUrl: string, token: string): Promise<void> =>\n Effect.runPromise(RelayClient.make({ baseUrl: relayUrl, token }).verifyDeviceCredential()).catch(\n (cause: unknown) => {\n // Older relays can reject device HTTP authentication before checking for a missing route.\n if (cause instanceof RelayRequestError && (cause.status === 401 || cause.status === 404)) {\n return verifyLegacyDeviceCredential(relayUrl, token)\n }\n throw cause\n },\n )\n\nexport interface RelaySwitchResult {\n readonly updated: boolean\n readonly relay_url: string\n readonly verified_roles: ReadonlyArray<\"client\" | \"device\">\n readonly service: DeviceServiceRestart\n readonly warning?: string\n}\n\nexport const switchRelay = async (options: {\n readonly relayUrl: string\n readonly restart: boolean\n readonly allowHttp?: boolean\n readonly verifyClient?: (relayUrl: string, token: string) => Promise<void>\n readonly verifyDevice?: (relayUrl: string, token: string) => Promise<void>\n readonly restartService?: () => Promise<DeviceServiceRestart>\n}): Promise<RelaySwitchResult> => {\n if (process.env.COHALL_RELAY_URL !== undefined) {\n throw new Error(\"Unset COHALL_RELAY_URL before changing the stored relay URL\")\n }\n const configuration = await readStoredConfiguration()\n if (configuration === undefined) {\n throw new Error(\"This user has no stored Cohall configuration\")\n }\n const relayUrl = normalizeRelayUrl(options.relayUrl)\n const parsedRelayUrl = new URL(relayUrl)\n if (\n parsedRelayUrl.protocol === \"http:\" &&\n !isLoopback(parsedRelayUrl) &&\n options.allowHttp !== true\n ) {\n throw new Error(\n \"Refusing to send stored credentials over remote HTTP. Use HTTPS, or --allow-http only on an independently encrypted private network.\",\n )\n }\n const clientTokens = [configuration.clientToken, process.env.COHALL_CLIENT_TOKEN].filter(\n (token): token is string => token !== undefined,\n )\n const deviceTokens = [configuration.deviceToken, process.env.COHALL_DEVICE_TOKEN].filter(\n (token): token is string => token !== undefined,\n )\n if (clientTokens.length === 0 && deviceTokens.length === 0) {\n throw new Error(\"This configuration has no client or device credentials to verify\")\n }\n const roles: Array<\"client\" | \"device\"> = []\n if (clientTokens.length > 0) {\n for (const token of new Set(clientTokens)) {\n await (options.verifyClient ?? verifyClientCredential)(relayUrl, token)\n }\n roles.push(\"client\")\n }\n if (deviceTokens.length > 0) {\n for (const token of new Set(deviceTokens)) {\n await (options.verifyDevice ?? verifyDeviceCredential)(relayUrl, token)\n }\n roles.push(\"device\")\n }\n const updated = configuration.relayUrl !== relayUrl\n if (updated) {\n await writeStoredConfiguration(StoredConfiguration.make({ ...configuration, relayUrl }))\n }\n let service: DeviceServiceRestart = { running: false, restarted: false }\n let warning: string | undefined\n if (options.restart && deviceTokens.length > 0) {\n service = await (options.restartService ?? restartDeviceService)().catch((cause: unknown) => {\n warning = `Relay URL is saved, but the device service could not restart: ${cause instanceof Error ? cause.message : String(cause)}. Retry cohall relay use ${relayUrl} to restart an active worker.`\n return { running: true, restarted: false }\n })\n }\n return {\n updated,\n relay_url: relayUrl,\n verified_roles: roles,\n service,\n ...(warning === undefined ? {} : { warning }),\n }\n}\n",
|
|
22
22
|
"import { execFile, type ExecFileException } from \"node:child_process\"\nimport { chmod, mkdir, writeFile } from \"node:fs/promises\"\nimport { homedir } from \"node:os\"\nimport { dirname, isAbsolute, join } from \"node:path\"\nimport { configurationPath } from \"./config.ts\"\nimport {\n resolvePackageInstallation,\n pnpmServiceDirectories,\n serviceCandidates,\n trustedExecutable,\n type CommandResult,\n type CommandRunner,\n} from \"./upgrade.ts\"\n\ninterface ServiceFile {\n readonly path: string\n readonly content: string\n readonly mode: number\n}\n\nexport interface DeviceServicePlan {\n readonly file: ServiceFile\n readonly commands: ReadonlyArray<{\n readonly command: string\n readonly arguments: ReadonlyArray<string>\n }>\n readonly note?: string\n}\n\nconst xml = (value: string): string =>\n value\n .replaceAll(\"&\", \"&\")\n .replaceAll(\"<\", \"<\")\n .replaceAll(\">\", \">\")\n .replaceAll('\"', \""\")\n .replaceAll(\"'\", \"'\")\n\nconst systemdArgument = (value: string): string =>\n `\"${value.replaceAll(\"\\\\\", \"\\\\\\\\\").replaceAll('\"', '\\\\\"').replaceAll(\"%\", \"%%\").replaceAll(\"\\n\", \"\\\\n\").replaceAll(\"\\r\", \"\\\\r\")}\"`\n\nconst pnpmHomeDirectory = (platform: NodeJS.Platform, home: string): string => {\n if (process.env.PNPM_HOME) return process.env.PNPM_HOME\n if (process.env.XDG_DATA_HOME) return join(process.env.XDG_DATA_HOME, \"pnpm\")\n if (platform === \"darwin\") return join(home, \"Library\", \"pnpm\")\n if (platform !== \"win32\") return join(home, \".local\", \"share\", \"pnpm\")\n return process.env.LOCALAPPDATA ? join(process.env.LOCALAPPDATA, \"pnpm\") : join(home, \".pnpm\")\n}\n\nexport const deviceServicePlan = (options: {\n readonly platform: NodeJS.Platform\n readonly entrypoint: string\n readonly home: string\n readonly nodeExecutable: string\n readonly pnpm?: {\n readonly home: string\n readonly executable: string\n readonly globalDir: string\n readonly bin: string\n readonly store: string\n }\n readonly configPath: string\n readonly uid?: number\n}): DeviceServicePlan => {\n const pnpmHome =\n options.pnpm?.home ??\n (options.platform === \"darwin\"\n ? join(options.home, \"Library\", \"pnpm\")\n : join(options.home, \".local\", \"share\", \"pnpm\"))\n const servicePath = [\n dirname(options.nodeExecutable),\n join(options.home, \".local\", \"bin\"),\n join(options.home, \".npm-global\", \"bin\"),\n join(options.home, \".bun\", \"bin\"),\n ...(options.pnpm === undefined ? [] : [options.pnpm.bin]),\n join(pnpmHome, \"bin\"),\n pnpmHome,\n ...(options.platform === \"darwin\" ? [\"/opt/homebrew/bin\"] : []),\n \"/usr/local/bin\",\n \"/usr/bin\",\n \"/bin\",\n ].join(\":\")\n if (options.platform === \"linux\") {\n const configured = process.env.XDG_CONFIG_HOME\n const configHome =\n configured !== undefined && isAbsolute(configured)\n ? configured\n : join(options.home, \".config\")\n const path = join(configHome, \"systemd\", \"user\", \"cohall-device.service\")\n return {\n file: {\n path,\n mode: 0o600,\n content: `[Unit]\\nDescription=Cohall device agent\\nAfter=network-online.target\\nWants=network-online.target\\n\\n[Service]\\nType=simple\\nEnvironment=${systemdArgument(`PATH=${servicePath}`)}\\nEnvironment=${systemdArgument(`COHALL_CONFIG=${options.configPath}`)}\\n${options.pnpm === undefined ? \"\" : `Environment=${systemdArgument(`PNPM_HOME=${options.pnpm.home}`)}\\nEnvironment=${systemdArgument(`COHALL_PNPM_EXECUTABLE=${options.pnpm.executable}`)}\\nEnvironment=${systemdArgument(`COHALL_PNPM_GLOBAL_DIR=${options.pnpm.globalDir}`)}\\nEnvironment=${systemdArgument(`COHALL_PNPM_STORE_DIR=${options.pnpm.store}`)}\\nEnvironment=${systemdArgument(`COHALL_PNPM_GLOBAL_BIN_DIR=${options.pnpm.bin}`)}\\n`}ExecStart=${systemdArgument(options.entrypoint)} device\\nRestart=always\\nRestartSec=3\\nUMask=0077\\nNoNewPrivileges=true\\nPrivateTmp=true\\n\\n[Install]\\nWantedBy=default.target\\n`,\n },\n commands: [\n { command: \"systemctl\", arguments: [\"--user\", \"daemon-reload\"] },\n { command: \"systemctl\", arguments: [\"--user\", \"enable\", \"cohall-device.service\"] },\n { command: \"systemctl\", arguments: [\"--user\", \"restart\", \"cohall-device.service\"] },\n ],\n note: \"The device starts after login. Run loginctl enable-linger $USER if it must run before login.\",\n }\n }\n if (options.platform === \"darwin\") {\n const label = \"com.cohall.device\"\n const path = join(options.home, \"Library\", \"LaunchAgents\", `${label}.plist`)\n const domain = `gui/${options.uid ?? 0}`\n return {\n file: {\n path,\n mode: 0o600,\n content: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\\n<plist version=\"1.0\">\\n<dict>\\n <key>Label</key>\\n <string>${label}</string>\\n <key>ProgramArguments</key>\\n <array>\\n <string>${xml(options.entrypoint)}</string>\\n <string>device</string>\\n </array>\\n <key>EnvironmentVariables</key>\\n <dict>\\n <key>PATH</key>\\n <string>${xml(servicePath)}</string>\\n <key>COHALL_CONFIG</key>\\n <string>${xml(options.configPath)}</string>\\n${options.pnpm === undefined ? \"\" : ` <key>PNPM_HOME</key>\\n <string>${xml(options.pnpm.home)}</string>\\n <key>COHALL_PNPM_EXECUTABLE</key>\\n <string>${xml(options.pnpm.executable)}</string>\\n <key>COHALL_PNPM_STORE_DIR</key>\\n <string>${xml(options.pnpm.store)}</string>\\n <key>COHALL_PNPM_GLOBAL_DIR</key>\\n <string>${xml(options.pnpm.globalDir)}</string>\\n <key>COHALL_PNPM_GLOBAL_BIN_DIR</key>\\n <string>${xml(options.pnpm.bin)}</string>\\n`} </dict>\\n <key>RunAtLoad</key>\\n <true/>\\n <key>KeepAlive</key>\\n <dict>\\n <key>NetworkState</key>\\n <true/>\\n <key>SuccessfulExit</key>\\n <false/>\\n </dict>\\n <key>ThrottleInterval</key>\\n <integer>3</integer>\\n <key>ProcessType</key>\\n <string>Background</string>\\n</dict>\\n</plist>\\n`,\n },\n commands: [\n { command: \"launchctl\", arguments: [\"bootout\", domain, path] },\n { command: \"launchctl\", arguments: [\"bootstrap\", domain, path] },\n { command: \"launchctl\", arguments: [\"kickstart\", \"-k\", `${domain}/${label}`] },\n ],\n }\n }\n throw new Error(\"Automatic device service installation supports Linux and macOS\")\n}\n\nconst defaultRunner: CommandRunner = {\n run: async (command, arguments_, timeoutMs = 60_000) => {\n const executable = await trustedExecutable(command)\n return new Promise((resolve) => {\n execFile(\n executable,\n [...arguments_],\n { encoding: \"utf8\", maxBuffer: 1024 * 1024, timeout: timeoutMs, windowsHide: true },\n (error: ExecFileException | null, stdout, stderr) =>\n resolve({\n exitCode: typeof error?.code === \"number\" ? error.code : error === null ? 0 : 1,\n stdout,\n stderr,\n ...(error === null ? {} : { error: error.message }),\n }),\n )\n })\n },\n}\n\nconst checked = async (\n runner: CommandRunner,\n command: string,\n arguments_: ReadonlyArray<string>,\n allowFailure = false,\n): Promise<CommandResult> => {\n const result = await runner.run(command, arguments_, 60_000)\n if (result.exitCode === 0 || allowFailure) {\n return result\n }\n throw new Error(\n `${command} failed: ${result.stderr.trim() || result.stdout.trim() || result.error || `status ${result.exitCode}`}`,\n )\n}\n\nexport const installDeviceService = async (\n options: {\n readonly entrypoint?: string\n readonly platform?: NodeJS.Platform\n readonly home?: string\n readonly uid?: number\n readonly runner?: CommandRunner\n readonly resolveExecutable?: (command: string) => Promise<string>\n } = {},\n): Promise<{ readonly installed: string; readonly note?: string }> => {\n const { entrypoint, canonicalEntrypoint, pnpmExecutable, globalDir, globalRoot } =\n await resolvePackageInstallation(options.entrypoint ?? process.argv[1] ?? \"\", {\n ...(options.platform === undefined ? {} : { platform: options.platform }),\n ...(options.runner === undefined ? {} : { runner: options.runner }),\n ...(options.resolveExecutable === undefined\n ? {}\n : { resolveExecutable: options.resolveExecutable }),\n })\n const platform = options.platform ?? process.platform\n const home = options.home ?? homedir()\n const pnpm =\n pnpmExecutable === undefined || globalDir === undefined || globalRoot === undefined\n ? undefined\n : {\n home: pnpmHomeDirectory(platform, home),\n executable: pnpmExecutable,\n globalDir,\n ...(await pnpmServiceDirectories(pnpmExecutable, globalRoot, options.runner)),\n }\n const runner = options.runner ?? defaultRunner\n if (platform === \"win32\") {\n const script = join(\n dirname(dirname(canonicalEntrypoint)),\n \"deploy\",\n \"windows\",\n \"install-device.ps1\",\n )\n await checked(runner, \"powershell.exe\", [\n \"-NoProfile\",\n \"-ExecutionPolicy\",\n \"Bypass\",\n \"-File\",\n script,\n \"-NodeExecutable\",\n process.execPath,\n \"-Entrypoint\",\n entrypoint,\n \"-ConfigurationPath\",\n configurationPath(),\n ...(pnpm === undefined\n ? []\n : [\n \"-PnpmHome\",\n pnpm.home,\n \"-PnpmExecutable\",\n pnpm.executable,\n \"-PnpmStoreDir\",\n pnpm.store,\n \"-PnpmGlobalDir\",\n pnpm.globalDir,\n \"-PnpmGlobalBinDir\",\n pnpm.bin,\n ]),\n ])\n return { installed: \"scheduled-task:Cohall Device\" }\n }\n const uid = options.uid ?? process.getuid?.()\n const plan = deviceServicePlan({\n platform,\n entrypoint,\n home,\n nodeExecutable: process.execPath,\n configPath: configurationPath(),\n ...(pnpm === undefined ? {} : { pnpm }),\n ...(uid === undefined ? {} : { uid }),\n })\n await mkdir(dirname(plan.file.path), { recursive: true, mode: 0o700 })\n await writeFile(plan.file.path, plan.file.content, { mode: plan.file.mode })\n await chmod(plan.file.path, plan.file.mode)\n for (const [index, command] of plan.commands.entries()) {\n await checked(runner, command.command, command.arguments, platform === \"darwin\" && index === 0)\n }\n return {\n installed: plan.file.path,\n ...(plan.note === undefined ? {} : { note: plan.note }),\n }\n}\n\nexport interface DeviceServiceRestart {\n readonly running: boolean\n readonly restarted: boolean\n readonly service?: string\n}\n\nexport const restartDeviceService = async (\n options: {\n readonly platform?: NodeJS.Platform\n readonly uid?: number\n readonly runner?: CommandRunner\n } = {},\n): Promise<DeviceServiceRestart> => {\n const platform = options.platform ?? process.platform\n const runner = options.runner ?? defaultRunner\n const service = serviceCandidates(platform, options.uid ?? process.getuid?.()).find(\n (candidate) => candidate.device,\n )\n if (service === undefined) return { running: false, restarted: false }\n\n const check = await runner.run(service.check.command, service.check.arguments, 10_000)\n if (\n check.exitCode !== 0 ||\n (service.activeOutput !== undefined &&\n !service.activeOutput.test(`${check.stdout}\\n${check.stderr}`))\n ) {\n return { running: false, restarted: false }\n }\n for (const command of service.restart) {\n await checked(runner, command.command, command.arguments, command.allowFailure)\n }\n return { running: true, restarted: true, service: service.label }\n}\n",
|
|
23
23
|
"import { Schema } from \"effect\"\nimport { execa } from \"execa\"\nimport { constants } from \"node:fs\"\nimport {\n access,\n chmod,\n mkdir,\n readFile,\n readdir,\n realpath,\n rename,\n rm,\n stat,\n writeFile,\n} from \"node:fs/promises\"\nimport { delimiter, dirname, extname, isAbsolute, join, relative, resolve } from \"node:path\"\nimport { platform as operatingSystem } from \"node:os\"\nimport { configurationPath } from \"./config.ts\"\n\nconst packageName = \"@akshar5/cohall\"\nconst minimumBunLookupVersion = \"1.2.15\"\nconst semanticVersion =\n /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?(?:\\+[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)?$/\n\nconst parseVersion = (value: string) => {\n const [, major, minor, patch, prerelease] = semanticVersion.exec(value) ?? []\n if (major === undefined || minor === undefined || patch === undefined) return undefined\n const identifiers = prerelease?.split(\".\") ?? []\n if (identifiers.some((part) => /^0\\d+$/.test(part))) return undefined\n return {\n core: [BigInt(major), BigInt(minor), BigInt(patch)],\n prerelease: identifiers,\n }\n}\n\nconst compareVersions = (left: string, right: string): number => {\n const a = parseVersion(left)\n const b = parseVersion(right)\n if (a === undefined || b === undefined) {\n throw new Error(`Could not safely compare Cohall versions ${left} and ${right}`)\n }\n for (const [index, part] of a.core.entries()) {\n const other = b.core[index]\n if (other !== undefined && part !== other) return part > other ? 1 : -1\n }\n if (a.prerelease.length === 0 || b.prerelease.length === 0) {\n return Number(b.prerelease.length > 0) - Number(a.prerelease.length > 0)\n }\n for (let index = 0; index < Math.max(a.prerelease.length, b.prerelease.length); index += 1) {\n const part = a.prerelease[index]\n const other = b.prerelease[index]\n if (part === undefined) return -1\n if (other === undefined) return 1\n if (part === other) continue\n const numeric = /^\\d+$/.test(part)\n const otherNumeric = /^\\d+$/.test(other)\n if (numeric !== otherNumeric) return numeric ? -1 : 1\n return numeric ? (BigInt(part) > BigInt(other) ? 1 : -1) : part > other ? 1 : -1\n }\n return 0\n}\n\nexport const PackageManager = Schema.Literals([\"npm\", \"bun\", \"pnpm\"])\nexport type PackageManager = typeof PackageManager.Type\nexport type ServiceManager = \"launchd\" | \"scheduled-task\" | \"systemd-system\" | \"systemd-user\"\n\nexport interface CommandResult {\n readonly exitCode: number\n readonly stdout: string\n readonly stderr: string\n readonly error?: string\n}\n\nexport interface CommandRunner {\n readonly run: (\n command: string,\n arguments_: ReadonlyArray<string>,\n timeoutMs?: number,\n environment?: Readonly<Record<string, string>>,\n ) => Promise<CommandResult>\n}\n\nexport interface PackageInstallation {\n readonly manager: PackageManager\n readonly prefix?: string\n readonly globalDir?: string\n readonly entrypoint: string\n}\n\nexport interface ManagedService {\n readonly id: string\n readonly label: string\n readonly manager: ServiceManager\n readonly device: boolean\n readonly check: CommandInvocation\n readonly activeOutput?: RegExp\n readonly entrypoint?: {\n readonly inspect: CommandInvocation\n readonly parse: (output: string) => string | undefined\n }\n readonly restart: ReadonlyArray<CommandInvocation>\n}\n\nexport interface CommandInvocation {\n readonly command: string\n readonly arguments: ReadonlyArray<string>\n readonly allowFailure?: boolean\n readonly environment?: Readonly<Record<string, string>>\n}\n\nconst RestartReceipt = Schema.Struct({\n version: Schema.String,\n fromVersion: Schema.String,\n packageManager: PackageManager,\n pendingServices: Schema.Array(Schema.String),\n restartedServices: Schema.Array(Schema.String),\n restartingService: Schema.optionalKey(Schema.String),\n})\ninterface RestartReceipt extends Schema.Schema.Type<typeof RestartReceipt> {}\n\nexport interface UpgradeOptions {\n readonly currentVersion: string\n readonly target?: string\n readonly restart: boolean\n readonly dryRun: boolean\n readonly entrypoint?: string\n readonly platform?: NodeJS.Platform\n readonly uid?: number\n readonly statePath?: string\n readonly delegated?: boolean\n readonly runner?: CommandRunner\n readonly resolveExecutable?: (command: string) => Promise<string>\n}\n\nexport interface UpgradeResult {\n readonly upgraded: boolean\n readonly from_version: string\n readonly installed_version: string\n readonly requested_version: string\n readonly package_manager: PackageManager\n readonly services_restarted: ReadonlyArray<string>\n readonly services_pending_restart: ReadonlyArray<string>\n readonly resumed_after_restart: boolean\n readonly dry_run: boolean\n}\n\nconst pnpmEnvironment = () =>\n Object.fromEntries<string>([\n [\"COREPACK_ENABLE_PROJECT_SPEC\", \"0\"],\n // pnpm 11 uses its own namespace; pnpm 10 reads npm's configuration namespace.\n ...([\"GLOBAL_DIR\", \"GLOBAL_BIN_DIR\", \"STORE_DIR\"] as const).flatMap((name) => {\n const value = process.env[`COHALL_PNPM_${name}`]\n return value === undefined\n ? []\n : ([\n [`npm_config_${name.toLowerCase()}`, value],\n [`pnpm_config_${name.toLowerCase()}`, value],\n ] as const)\n }),\n ])\n\nconst normalizePath = (path: string): string => path.replaceAll(\"\\\\\", \"/\")\nconst pnpmGlobalDirectory = /^(.*\\/global\\/v?\\d+)\\//\n\nexport const normalizeUpgradeTarget = (target: string | undefined): string => {\n if (target === undefined || target === \"latest\") {\n return \"latest\"\n }\n const normalized = target.startsWith(\"v\") ? target.slice(1) : target\n if (parseVersion(normalized) === undefined) {\n throw new Error(\"--to must be latest or an exact semantic version\")\n }\n return normalized\n}\n\nexport const deviceVersionWarning = (\n cliVersion: string,\n deviceVersion: string | undefined,\n): string | undefined =>\n deviceVersion === undefined || deviceVersion === cliVersion\n ? undefined\n : `Running device daemon uses Cohall ${deviceVersion}, while this CLI is ${cliVersion}. Run upgrade through the executable configured by the device service.`\n\nexport const packageInstallation = (\n canonicalEntrypoint: string,\n entrypoint = canonicalEntrypoint,\n runtimePlatform: NodeJS.Platform = process.platform,\n): PackageInstallation => {\n const path = normalizePath(canonicalEntrypoint)\n const marker = `/node_modules/${packageName}/`\n const packageIndex = path.lastIndexOf(marker)\n if (packageIndex === -1) {\n throw new Error(\n \"cohall upgrade requires a global npm, Bun, or pnpm installation; package-runner and source-checkout executions cannot upgrade themselves\",\n )\n }\n if (\n [path, normalizePath(entrypoint)].some(\n (candidate) =>\n candidate.includes(\"/.npm/_npx/\") ||\n candidate.includes(\"/.bunx/\") ||\n candidate.includes(\"/dlx/\"),\n )\n ) {\n throw new Error(\n \"This Cohall process is running from a temporary package-runner cache; install it globally before using cohall upgrade\",\n )\n }\n if (path.includes(\"/.bun/install/global/node_modules/\")) {\n return { manager: \"bun\", entrypoint }\n }\n if (\n pnpmGlobalDirectory.test(path) ||\n /\\/v\\d+\\/links\\//.test(path) ||\n path.includes(\"/node_modules/.pnpm/\") ||\n pnpmGlobalDirectory.test(normalizePath(entrypoint))\n ) {\n return { manager: \"pnpm\", entrypoint }\n }\n\n const nodeModulesParent = path.slice(0, packageIndex)\n const prefix =\n runtimePlatform !== \"win32\" && nodeModulesParent.endsWith(\"/lib\")\n ? nodeModulesParent.slice(0, -\"/lib\".length)\n : nodeModulesParent\n return { manager: \"npm\", prefix, entrypoint }\n}\n\nexport const resolvePackageInstallation = async (\n entrypoint: string,\n options: {\n readonly runner?: CommandRunner\n readonly resolveExecutable?: (command: string) => Promise<string>\n readonly platform?: NodeJS.Platform\n } = {},\n) => {\n const canonicalEntrypoint = await realpath(entrypoint)\n const runtimePlatform = options.platform ?? process.platform\n const installation = packageInstallation(\n canonicalEntrypoint,\n resolve(entrypoint),\n runtimePlatform,\n )\n if (installation.manager !== \"pnpm\") {\n const prefix = installation.prefix\n if (installation.manager === \"npm\" && prefix !== undefined) {\n const packageEntry = join(\n prefix,\n ...(runtimePlatform === \"win32\" ? [] : [\"lib\"]),\n \"node_modules\",\n packageName,\n \"bin\",\n \"cohall.js\",\n )\n const command = join(prefix, ...(runtimePlatform === \"win32\" ? [] : [\"bin\"]), \"cohall\")\n const globalCommand =\n runtimePlatform === \"win32\"\n ? await readFile(`${command}.cmd`, \"utf8\")\n .then((shim) =>\n /\"%dp0%\\\\node_modules\\\\@akshar5\\\\cohall\\\\bin\\\\cohall\\.js\"\\s+%\\*/i.test(shim),\n )\n .catch(() => false)\n : (await realpath(command).catch(() => undefined)) === canonicalEntrypoint\n if (\n globalCommand &&\n (await realpath(packageEntry).catch(() => undefined)) === canonicalEntrypoint\n )\n return {\n ...installation,\n canonicalEntrypoint,\n pnpmExecutable: undefined,\n globalRoot: undefined,\n }\n }\n const bun = await (options.resolveExecutable ?? trustedExecutable)(\"bun\").catch(() => undefined)\n if (bun !== undefined) {\n const result = await (options.runner ?? defaultRunner).run(\n bun,\n [\"pm\", \"ls\", \"--global\"],\n 10_000,\n )\n const root = result.stdout\n .split(/\\r?\\n/, 1)[0]\n ?.match(/^(.*?) node_modules \\(\\d+(?: installed)?\\)$/)?.[1]\n if (\n result.exitCode === 0 &&\n root !== undefined &&\n isAbsolute(root) &&\n (await realpath(join(root, \"node_modules\", packageName, \"bin\", \"cohall.js\")).catch(\n () => undefined,\n )) === canonicalEntrypoint\n )\n return {\n manager: \"bun\" as const,\n entrypoint: resolve(entrypoint),\n canonicalEntrypoint,\n globalDir: root,\n pnpmExecutable: undefined,\n globalRoot: undefined,\n }\n }\n throw new Error(\n \"This operation requires a verified global npm, Bun, or pnpm installation. Project-local packages cannot upgrade or install a service; run the global cohall command with its package manager's configuration.\",\n )\n }\n\n const lexicalPath = normalizePath(installation.entrypoint)\n const globalRoot =\n lexicalPath.match(pnpmGlobalDirectory)?.[1] ?? lexicalPath.match(/^(.*\\/v?\\d+)\\//)?.[1]\n const globalEntrypointError = () =>\n new Error(\n \"This operation requires a global pnpm entrypoint; project-local and shared-store executions cannot select a global installation. Run the global cohall command.\",\n )\n if (globalRoot === undefined) throw globalEntrypointError()\n const selectedManager = process.env.COHALL_PNPM_EXECUTABLE ?? \"pnpm\"\n const pnpmExecutable =\n options.resolveExecutable === undefined\n ? await trustedExecutable(selectedManager, { preserveSymlink: true })\n : await options.resolveExecutable(selectedManager)\n const result = await checked(\n options.runner ?? defaultRunner,\n {\n command: pnpmExecutable,\n arguments: [\"root\", \"--global\"],\n environment: pnpmEnvironment(),\n },\n 10_000,\n )\n const reported = normalizePath(result.stdout.trim().split(/\\r?\\n/).at(-1)?.trim() ?? \"\")\n const root = reported.endsWith(\"/node_modules\") ? dirname(reported) : reported\n const selected = resolve(globalRoot)\n const configured = isAbsolute(root) ? resolve(root) : undefined\n if (\n configured === undefined ||\n (process.platform === \"win32\"\n ? selected.toLowerCase() !== configured.toLowerCase()\n : selected !== configured)\n )\n throw globalEntrypointError()\n const packageEntry = (root: string) => join(root, \"node_modules\", packageName, \"bin\", \"cohall.js\")\n const entries = await readdir(globalRoot, { withFileTypes: true })\n const candidates = [\n packageEntry(globalRoot),\n ...entries\n .filter((entry) => entry.isSymbolicLink())\n .map((entry) => packageEntry(join(globalRoot, entry.name))),\n ]\n for (const candidate of candidates) {\n if ((await realpath(candidate).catch(() => undefined)) === canonicalEntrypoint)\n return {\n ...installation,\n entrypoint: candidate,\n canonicalEntrypoint,\n globalDir: dirname(globalRoot),\n globalRoot,\n pnpmExecutable,\n }\n }\n throw new Error(\n \"Could not find a stable pnpm global executable for this installation. Run the global cohall command, then use cohall service install before upgrading.\",\n )\n}\n\nexport const pnpmServiceDirectories = async (\n executable: string,\n globalRoot: string,\n runner: CommandRunner = defaultRunner,\n) => {\n const query = async (arguments_: ReadonlyArray<string>): Promise<string> => {\n const result = await checked(\n runner,\n { command: executable, arguments: arguments_, environment: pnpmEnvironment() },\n 10_000,\n )\n const directory = result.stdout.trim().split(/\\r?\\n/).at(-1)?.trim() ?? \"\"\n if (!isAbsolute(directory))\n throw new Error(`pnpm ${arguments_.join(\" \")} did not report an absolute directory`)\n return directory\n }\n const [bin, store] = await Promise.all([\n query([\"bin\", \"--global\"]),\n query([\"--dir\", globalRoot, \"--ignore-workspace\", \"store\", \"path\"]),\n ])\n return { bin, store }\n}\n\nexport const packageInstallCommand = (\n installation: PackageInstallation,\n target: string,\n): CommandInvocation => {\n const specification = `${packageName}@${target}`\n switch (installation.manager) {\n case \"bun\":\n return {\n command: \"bun\",\n arguments: [\"add\", \"--global\", specification],\n ...(installation.globalDir === undefined\n ? {}\n : { environment: { BUN_INSTALL_GLOBAL_DIR: installation.globalDir } }),\n }\n case \"pnpm\":\n return {\n command: \"pnpm\",\n arguments: [\n \"add\",\n \"--global\",\n ...(installation.globalDir === undefined ? [] : [\"--global-dir\", installation.globalDir]),\n ...(process.env.COHALL_PNPM_GLOBAL_BIN_DIR === undefined\n ? []\n : [\"--global-bin-dir\", process.env.COHALL_PNPM_GLOBAL_BIN_DIR]),\n specification,\n ],\n environment: pnpmEnvironment(),\n }\n case \"npm\":\n return {\n command: \"npm\",\n arguments: [\n \"install\",\n \"--global\",\n ...(installation.prefix === undefined ? [] : [\"--prefix\", installation.prefix]),\n specification,\n ],\n }\n }\n}\n\nconst executableNames = (command: string): ReadonlyArray<string> => {\n if (operatingSystem() !== \"win32\" || extname(command).length > 0) {\n return [command]\n }\n return (process.env.PATHEXT ?? \".COM;.EXE;.BAT;.CMD\")\n .split(\";\")\n .filter(Boolean)\n .map((extension) => `${command}${extension.toLowerCase()}`)\n}\n\nconst containsPath = (root: string, path: string): boolean => {\n const child = relative(root, path)\n return child === \"\" || (!child.startsWith(\"..\") && !isAbsolute(child))\n}\n\nconst linuxSystemExecutableRoots = [\n \"/bin\",\n \"/sbin\",\n \"/usr/bin\",\n \"/usr/sbin\",\n \"/usr/lib/node_modules\",\n \"/usr/share/nodejs\",\n \"/nix/store\",\n]\nconst macosHomebrewRoots = [\"/opt/homebrew\", \"/usr/local\"]\nconst macosAdminGroup = 80\n\nexport const isTrustedSystemPath = (platform: NodeJS.Platform, path: string): boolean =>\n platform === \"linux\" &&\n (path === \"/home\" ||\n linuxSystemExecutableRoots.some((root) => containsPath(root, path) || containsPath(path, root)))\n\nexport const isTrustedGroupWritablePath = (options: {\n readonly platform: NodeJS.Platform\n readonly canonical: string\n readonly writableRoot: string | undefined\n readonly path: string\n readonly uid: number | undefined\n readonly ownerUid: number\n readonly ownerGid: number\n}): boolean => {\n const writableRoot = options.writableRoot\n return (\n options.platform === \"darwin\" &&\n writableRoot !== undefined &&\n options.uid !== undefined &&\n options.ownerUid === options.uid &&\n options.ownerGid === macosAdminGroup &&\n macosHomebrewRoots.some((root) => containsPath(root, writableRoot)) &&\n containsPath(writableRoot, options.canonical) &&\n containsPath(writableRoot, options.path)\n )\n}\n\nconst validateExecutable = async (\n candidate: string,\n installationRoot: string | undefined,\n preserveSymlink = false,\n): Promise<string> => {\n const canonical = await realpath(candidate)\n if (operatingSystem() === \"win32\") {\n return preserveSymlink ? resolve(candidate) : canonical\n }\n const uid = process.getuid?.()\n const writableRoot = installationRoot === undefined ? undefined : await realpath(installationRoot)\n for (const executablePath of preserveSymlink ? [canonical, resolve(candidate)] : [canonical]) {\n for (let path = executablePath; ; path = dirname(path)) {\n const metadata = await stat(path)\n // Homebrew's shared prefix is admin-group writable. Local administrators are already inside\n // the OS trust boundary; arbitrary shared Unix groups remain rejected.\n const trustedGroupWritablePath = isTrustedGroupWritablePath({\n platform: operatingSystem(),\n canonical,\n writableRoot,\n path,\n uid,\n ownerUid: metadata.uid,\n ownerGid: metadata.gid,\n })\n if (\n (metadata.mode & 0o002) !== 0 ||\n ((metadata.mode & 0o020) !== 0 && !trustedGroupWritablePath)\n ) {\n throw new Error(`Refusing executable beneath group- or world-writable path ${path}`)\n }\n // User namespaces can hide host-root ownership. Only fixed OS paths are trusted this way;\n // user-installed executables and their private ancestors must still belong to this user.\n if (\n uid !== undefined &&\n metadata.uid !== 0 &&\n metadata.uid !== uid &&\n !isTrustedSystemPath(operatingSystem(), path)\n ) {\n throw new Error(`Refusing executable owned by another user at ${path}`)\n }\n const parent = dirname(path)\n if (parent === path) {\n break\n }\n }\n }\n return preserveSymlink ? resolve(candidate) : canonical\n}\n\nexport const trustedExecutable = async (\n command: string,\n options: { readonly writableRoot?: string; readonly preserveSymlink?: boolean } = {},\n): Promise<string> => {\n const candidates = isAbsolute(command)\n ? [command]\n : (process.env.PATH ?? \"\")\n .split(delimiter)\n .filter(Boolean)\n .flatMap((directory) => executableNames(command).map((name) => join(directory, name)))\n let failure: unknown\n for (const path of candidates) {\n const available = await access(\n path,\n operatingSystem() === \"win32\" ? constants.F_OK : constants.X_OK,\n )\n .then(() => true)\n .catch(() => false)\n if (!available) continue\n try {\n return await validateExecutable(path, options.writableRoot, options.preserveSymlink)\n } catch (cause) {\n failure ??= cause\n }\n }\n throw failure ?? new Error(`Could not find ${command} on PATH`)\n}\n\nconst trustedServices = async (\n services: ReadonlyArray<ManagedService>,\n resolveExecutable: (command: string) => Promise<string>,\n): Promise<ReadonlyArray<ManagedService>> => {\n const resolved = new Map<string, Promise<string>>()\n const invocation = async (value: CommandInvocation): Promise<CommandInvocation> => {\n let command = resolved.get(value.command)\n if (command === undefined) {\n command = resolveExecutable(value.command)\n resolved.set(value.command, command)\n }\n return { ...value, command: await command }\n }\n const secured: Array<ManagedService> = []\n for (const service of services) {\n let check: CommandInvocation\n try {\n check = await invocation(service.check)\n } catch (cause) {\n if (cause instanceof Error && cause.message.startsWith(\"Could not find \")) {\n continue\n }\n throw cause\n }\n secured.push({\n ...service,\n check,\n ...(service.entrypoint === undefined\n ? {}\n : {\n entrypoint: {\n ...service.entrypoint,\n inspect: await invocation(service.entrypoint.inspect),\n },\n }),\n restart: await Promise.all(service.restart.map(invocation)),\n })\n }\n return secured\n}\n\nconst ScheduledTaskAction = Schema.Struct({\n Execute: Schema.NonEmptyString,\n Arguments: Schema.NonEmptyString,\n})\nconst powershellLiteral = \"(?:[^'\\\\r\\\\n]|'')+\"\nconst scheduledTaskBootstrap = new RegExp(\n [\n \"^\\\\$ErrorActionPreference = 'Stop'\",\n `\\\\$env:COHALL_CONFIG = '${powershellLiteral}'`,\n `(?:\\\\$env:PNPM_HOME = '${powershellLiteral}'\\\\r?\\\\n\\\\$env:PATH = '${powershellLiteral}' \\\\+ ';' \\\\+ \\\\$env:PATH\\\\r?\\\\n)?(?:\\\\$env:COHALL_PNPM_EXECUTABLE = '${powershellLiteral}'\\\\r?\\\\n)?(?:\\\\$env:COHALL_PNPM_STORE_DIR = '${powershellLiteral}'\\\\r?\\\\n)?(?:\\\\$env:COHALL_PNPM_GLOBAL_DIR = '${powershellLiteral}'\\\\r?\\\\n)?(?:\\\\$env:COHALL_PNPM_GLOBAL_BIN_DIR = '${powershellLiteral}'\\\\r?\\\\n\\\\$env:PATH = '${powershellLiteral}' \\\\+ ';' \\\\+ \\\\$env:PATH\\\\r?\\\\n)?\\\\$env:PATH = '${powershellLiteral}' \\\\+ ';' \\\\+ \\\\$env:PATH`,\n `& '(${powershellLiteral})' '(${powershellLiteral})' device`,\n \"exit \\\\$LASTEXITCODE(?:\\\\r?\\\\n)?$\",\n ].join(\"\\\\r?\\\\n\"),\n)\n\nconst scheduledTaskEntrypoint = (output: string): string | undefined => {\n let value: unknown\n try {\n value = JSON.parse(output) as unknown\n } catch {\n return undefined\n }\n const decoded = Schema.decodeUnknownOption(ScheduledTaskAction)(value)\n if (decoded._tag === \"None\") return undefined\n const action = decoded.value\n if (!/(?:^|[/\\\\])(?:powershell|pwsh)\\.exe$/i.test(action.Execute)) return undefined\n const encoded =\n /^-NoLogo\\s+-NoProfile\\s+-NonInteractive\\s+-EncodedCommand\\s+([A-Za-z0-9+/]+={0,2})\\s*$/i.exec(\n action.Arguments,\n )?.[1]\n if (encoded === undefined) return undefined\n const bytes = Buffer.from(encoded, \"base64\")\n if (bytes.length % 2 !== 0 || bytes.toString(\"base64\") !== encoded) return undefined\n // Recognize the complete installer bootstrap without executing the saved script.\n const bootstrap = scheduledTaskBootstrap.exec(bytes.toString(\"utf16le\"))\n const node = bootstrap?.[1]?.replaceAll(\"''\", \"'\")\n if (node === undefined || !/(?:^|[/\\\\])node\\.exe$/i.test(node)) return undefined\n return bootstrap?.[2]?.replaceAll(\"''\", \"'\")\n}\n\nexport const serviceCandidates = (\n runtimePlatform: NodeJS.Platform,\n uid: number | undefined,\n): ReadonlyArray<ManagedService> => {\n if (runtimePlatform === \"linux\") {\n const systemd = (\n manager: \"systemd-user\" | \"systemd-system\",\n unit: string,\n device: boolean,\n ): ManagedService => {\n const user = manager === \"systemd-user\" ? [\"--user\"] : []\n return {\n id: `${manager}:${unit}`,\n label: unit,\n manager,\n device,\n check: { command: \"systemctl\", arguments: [...user, \"is-active\", \"--quiet\", unit] },\n entrypoint: {\n inspect: {\n command: \"systemctl\",\n arguments: [...user, \"show\", \"--property=ExecStart\", \"--value\", unit],\n },\n parse: (output) => output.match(/\\bpath=(.*?)\\s*;/)?.[1]?.trim(),\n },\n restart: [{ command: \"systemctl\", arguments: [...user, \"restart\", unit] }],\n }\n }\n return [\n systemd(\"systemd-user\", \"cohall-relay.service\", false),\n systemd(\"systemd-system\", \"cohall-relay.service\", false),\n systemd(\"systemd-user\", \"cohall-device.service\", true),\n ]\n }\n\n if (runtimePlatform === \"darwin\") {\n const domain = `gui/${uid ?? 0}`\n const launchd = (label: string, device: boolean): ManagedService => ({\n id: `launchd:${label}`,\n label,\n manager: \"launchd\",\n device,\n check: { command: \"launchctl\", arguments: [\"print\", `${domain}/${label}`] },\n activeOutput: /\\bstate\\s*=\\s*running\\b/,\n entrypoint: {\n inspect: { command: \"launchctl\", arguments: [\"print\", `${domain}/${label}`] },\n parse: (output) => output.match(/^\\s*program\\s*=\\s*(.+)$/m)?.[1]?.trim(),\n },\n restart: [{ command: \"launchctl\", arguments: [\"kickstart\", \"-k\", `${domain}/${label}`] }],\n })\n return [launchd(\"com.cohall.relay\", false), launchd(\"com.cohall.device\", true)]\n }\n\n if (runtimePlatform === \"win32\") {\n return [\n {\n id: \"scheduled-task:Cohall Device\",\n label: \"Cohall Device\",\n manager: \"scheduled-task\",\n device: true,\n check: {\n command: \"powershell.exe\",\n arguments: [\n \"-NoProfile\",\n \"-NonInteractive\",\n \"-Command\",\n \"if ((Get-ScheduledTask -TaskName 'Cohall Device' -ErrorAction SilentlyContinue).State -eq 'Running') { exit 0 } else { exit 1 }\",\n ],\n },\n entrypoint: {\n inspect: {\n command: \"powershell.exe\",\n arguments: [\n \"-NoProfile\",\n \"-NonInteractive\",\n \"-Command\",\n \"@((Get-ScheduledTask -TaskName 'Cohall Device' -TaskPath '\\\\' -ErrorAction Stop).Actions) | Select-Object Execute, Arguments | ConvertTo-Json -Compress\",\n ],\n },\n parse: scheduledTaskEntrypoint,\n },\n restart: [\n {\n command: \"schtasks.exe\",\n arguments: [\"/End\", \"/TN\", \"Cohall Device\"],\n allowFailure: true,\n },\n { command: \"schtasks.exe\", arguments: [\"/Run\", \"/TN\", \"Cohall Device\"] },\n ],\n },\n ]\n }\n\n return []\n}\n\nconst defaultRunner: CommandRunner = {\n run: async (command, arguments_, timeoutMs = 300_000, environment) => {\n const result = await execa(command, arguments_, {\n encoding: \"utf8\",\n maxBuffer: 1024 * 1024,\n timeout: timeoutMs,\n windowsHide: true,\n stdin: \"ignore\",\n ...(environment === undefined ? {} : { env: environment }),\n reject: false,\n stripFinalNewline: false,\n })\n return {\n exitCode: result.failed ? result.exitCode || 1 : 0,\n stdout: result.stdout,\n stderr: result.stderr,\n ...(result.shortMessage === undefined ? {} : { error: result.shortMessage.slice(0, 16_384) }),\n }\n },\n}\n\nconst checked = async (\n runner: CommandRunner,\n invocation: CommandInvocation,\n timeoutMs?: number,\n): Promise<CommandResult> => {\n const result = await runner.run(\n invocation.command,\n invocation.arguments,\n timeoutMs,\n invocation.environment,\n )\n if (result.exitCode === 0 || invocation.allowFailure === true) {\n return result\n }\n const detail = (\n result.stderr.trim() ||\n result.stdout.trim() ||\n result.error ||\n \"unknown error\"\n ).slice(0, 16_384)\n throw new Error(\n `${invocation.command} ${invocation.arguments.join(\" \")} failed with status ${result.exitCode}: ${detail}`,\n )\n}\n\nconst activeServices = async (\n runner: CommandRunner,\n candidates: ReadonlyArray<ManagedService>,\n): Promise<ReadonlyArray<ManagedService>> => {\n const active: Array<ManagedService> = []\n for (const service of candidates) {\n const result = await runner.run(service.check.command, service.check.arguments, 10_000)\n if (\n result.exitCode === 0 &&\n (service.activeOutput === undefined ||\n service.activeOutput.test(`${result.stdout}\\n${result.stderr}`))\n ) {\n active.push(service)\n }\n }\n return active\n}\n\nconst assertServiceInstallations = async (\n runner: CommandRunner,\n services: ReadonlyArray<ManagedService>,\n installation: Awaited<ReturnType<typeof resolvePackageInstallation>>,\n): Promise<void> => {\n for (const service of services) {\n if (service.entrypoint === undefined) {\n continue\n }\n const result = await checked(runner, service.entrypoint.inspect, 10_000)\n const serviceEntrypoint = service.entrypoint.parse(`${result.stdout}\\n${result.stderr}`)\n if (serviceEntrypoint === undefined) {\n throw new Error(\n `Could not determine the executable used by active ${service.label}${service.manager === \"scheduled-task\" ? \". Reinstall the task with cohall service install.\" : \"\"}`,\n )\n }\n const canonicalServiceEntrypoint = await realpath(serviceEntrypoint).catch((cause: unknown) => {\n throw new Error(\n `Could not resolve the executable used by active ${service.label}: ${cause instanceof Error ? cause.message : String(cause)}`,\n )\n })\n if (canonicalServiceEntrypoint === installation.canonicalEntrypoint) {\n const servicePath = resolve(serviceEntrypoint)\n const sameEntrypoint =\n service.manager === \"scheduled-task\"\n ? servicePath.toLowerCase() === installation.entrypoint.toLowerCase()\n : servicePath === installation.entrypoint\n if (installation.manager === \"pnpm\" && !sameEntrypoint)\n throw new Error(\n `Active ${service.label} is pinned to a pnpm package directory that changes during upgrades. ${\n service.device\n ? \"Run cohall service install through the global cohall command before upgrading.\"\n : `Update the relay service executable to ${installation.entrypoint} before upgrading.`\n }`,\n )\n continue\n }\n throw new Error(\n `Active ${service.label} uses ${serviceEntrypoint}, but this Cohall CLI uses ${installation.entrypoint}. Run the service executable's upgrade command so its installation is updated before restart.`,\n )\n }\n}\n\nconst readReceipt = async (path: string): Promise<RestartReceipt | undefined> =>\n readFile(path, \"utf8\")\n .then((content) => Schema.decodeUnknownOption(RestartReceipt)(JSON.parse(content)))\n .then((decoded) => (decoded._tag === \"Some\" ? decoded.value : undefined))\n .catch(() => undefined)\n\nconst writeReceipt = async (path: string, value: RestartReceipt): Promise<void> => {\n const directory = dirname(path)\n const temporary = `${path}.${process.pid}.tmp`\n await mkdir(directory, { recursive: true, mode: 0o700 })\n if (operatingSystem() !== \"win32\") {\n await chmod(directory, 0o700)\n }\n await writeFile(temporary, `${JSON.stringify(value, null, 2)}\\n`, { mode: 0o600 })\n await rename(temporary, path)\n}\n\nconst installedVersion = async (entrypoint: string): Promise<string> => {\n const canonicalEntrypoint = await realpath(entrypoint)\n const metadata: unknown = JSON.parse(\n await readFile(join(dirname(dirname(canonicalEntrypoint)), \"package.json\"), \"utf8\"),\n )\n if (\n typeof metadata !== \"object\" ||\n metadata === null ||\n !(\"name\" in metadata) ||\n metadata.name !== packageName ||\n !(\"version\" in metadata) ||\n typeof metadata.version !== \"string\"\n ) {\n throw new Error(`Could not verify the installed ${packageName} version`)\n }\n return metadata.version\n}\n\nconst restartReceiptPath = (): string => join(dirname(configurationPath()), \"upgrade-restart.json\")\n\nconst restartServices = async (\n runner: CommandRunner,\n services: ReadonlyArray<ManagedService>,\n statePath: string,\n state: RestartReceipt,\n preserveDeviceReceipt: boolean,\n): Promise<RestartReceipt> => {\n let current = state\n for (const service of services) {\n current = { ...current, restartingService: service.id }\n await writeReceipt(statePath, current)\n try {\n for (const invocation of service.restart) {\n await checked(runner, invocation, 60_000)\n }\n } catch (cause) {\n current = {\n version: current.version,\n fromVersion: current.fromVersion,\n packageManager: current.packageManager,\n pendingServices: current.pendingServices,\n restartedServices: current.restartedServices,\n }\n await writeReceipt(statePath, current)\n throw cause\n }\n if (service.device && preserveDeviceReceipt) {\n // Some service managers return before terminating this process. The replacement task consumes the marker.\n return current\n }\n current = {\n version: current.version,\n fromVersion: current.fromVersion,\n packageManager: current.packageManager,\n pendingServices: current.pendingServices.filter((id) => id !== service.id),\n restartedServices: [...current.restartedServices, service.id],\n }\n await writeReceipt(statePath, current)\n }\n return current\n}\n\nconst reportedRestartServices = (receipt: RestartReceipt): ReadonlyArray<string> =>\n receipt.restartingService === undefined ||\n receipt.restartedServices.includes(receipt.restartingService)\n ? receipt.restartedServices\n : [...receipt.restartedServices, receipt.restartingService]\n\nexport const upgrade = async (options: UpgradeOptions): Promise<UpgradeResult> => {\n const target = normalizeUpgradeTarget(options.target)\n const runner = options.runner ?? defaultRunner\n const resolveExecutable = options.resolveExecutable ?? trustedExecutable\n const runtimePlatform = options.platform ?? process.platform\n const uid = options.uid ?? process.getuid?.()\n const candidates = await trustedServices(\n serviceCandidates(runtimePlatform, uid),\n resolveExecutable,\n )\n const statePath = options.statePath ?? restartReceiptPath()\n const previous = await readReceipt(statePath)\n const entrypoint = options.entrypoint ?? process.argv[1]\n if (entrypoint === undefined) {\n throw new Error(\"Could not resolve the Cohall executable path\")\n }\n const installation = await resolvePackageInstallation(entrypoint, {\n runner,\n platform: runtimePlatform,\n ...(options.resolveExecutable === undefined ? {} : { resolveExecutable }),\n })\n\n if (\n previous?.version === options.currentVersion &&\n (target === \"latest\" || target === previous.version)\n ) {\n const pending = candidates.filter((service) => previous.pendingServices.includes(service.id))\n const active = await activeServices(runner, pending)\n await assertServiceInstallations(runner, active, installation)\n if (options.dryRun || !options.restart) {\n return {\n upgraded: previous.fromVersion !== previous.version,\n from_version: previous.fromVersion,\n installed_version: previous.version,\n requested_version: previous.version,\n package_manager: previous.packageManager,\n services_restarted: previous.restartedServices,\n services_pending_restart: previous.pendingServices,\n resumed_after_restart: false,\n dry_run: options.dryRun,\n }\n }\n const activeIds = new Set(active.map((service) => service.id))\n const completedByRestart = pending.filter(\n (service) =>\n options.delegated === true &&\n service.device &&\n service.id === previous.restartingService &&\n activeIds.has(service.id),\n )\n const completedIds = new Set(completedByRestart.map((service) => service.id))\n const remaining = active.filter((service) => !completedIds.has(service.id))\n let resumed: RestartReceipt = {\n version: previous.version,\n fromVersion: previous.fromVersion,\n packageManager: previous.packageManager,\n pendingServices: previous.pendingServices.filter((id) => !completedIds.has(id)),\n restartedServices: [\n ...previous.restartedServices,\n ...completedByRestart.map((service) => service.id),\n ],\n }\n if (remaining.length > 0) {\n await writeReceipt(statePath, resumed)\n resumed = await restartServices(\n runner,\n remaining,\n statePath,\n resumed,\n options.delegated === true,\n )\n } else if (completedIds.size > 0) {\n await writeReceipt(statePath, resumed)\n }\n if (resumed.pendingServices.length === 0) {\n await rm(statePath, { force: true })\n }\n return {\n upgraded: previous.fromVersion !== previous.version,\n from_version: previous.fromVersion,\n installed_version: previous.version,\n requested_version: previous.version,\n package_manager: previous.packageManager,\n services_restarted: reportedRestartServices(resumed),\n services_pending_restart: resumed.pendingServices.filter(\n (id) => id !== resumed.restartingService,\n ),\n resumed_after_restart: true,\n dry_run: false,\n }\n }\n\n const services = await activeServices(runner, candidates)\n await assertServiceInstallations(runner, services, installation)\n const pendingServices = [\n ...new Set([...(previous?.pendingServices ?? []), ...services.map((service) => service.id)]),\n ]\n\n const resolvePackageManager = (): Promise<string> => {\n if (installation.pnpmExecutable !== undefined)\n return Promise.resolve(installation.pnpmExecutable)\n return options.resolveExecutable === undefined\n ? trustedExecutable(\n installation.manager,\n installation.prefix === undefined ? {} : { writableRoot: installation.prefix },\n )\n : resolveExecutable(installation.manager)\n }\n let packageManagerExecutable: string | undefined\n let resolvedTarget = target\n if (target === \"latest\") {\n packageManagerExecutable = await resolvePackageManager()\n if (installation.manager === \"bun\") {\n const information = await checked(\n runner,\n { command: packageManagerExecutable, arguments: [\"--version\"] },\n 10_000,\n )\n if (compareVersions(information.stdout.trim(), minimumBunLookupVersion) < 0) {\n throw new Error(\n `Latest upgrades require Bun ${minimumBunLookupVersion} or newer; upgrade Bun or use --to <exact-version>`,\n )\n }\n }\n const lookup = await checked(\n runner,\n {\n command: packageManagerExecutable,\n arguments: [\n ...(installation.manager === \"bun\" ? [\"pm\"] : []),\n \"view\",\n ...(installation.manager === \"pnpm\" ? [] : [\"--global\"]),\n ...(installation.prefix === undefined ? [] : [\"--prefix\", installation.prefix]),\n `${packageName}@latest`,\n \"version\",\n \"--json\",\n ],\n ...(installation.manager === \"pnpm\" ? { environment: pnpmEnvironment() } : {}),\n },\n 30_000,\n )\n const latest: unknown = JSON.parse(lookup.stdout)\n if (typeof latest !== \"string\" || parseVersion(latest) === undefined) {\n throw new Error(`Could not resolve ${packageName}@latest to an exact semantic version`)\n }\n resolvedTarget = latest\n }\n let nextVersion = await installedVersion(installation.entrypoint).catch((cause: unknown) => {\n if (target === \"latest\") {\n throw new Error(\n \"Could not verify the installed version before upgrading latest; use --to <version> to repair this installation\",\n { cause },\n )\n }\n return undefined\n })\n if (\n target === \"latest\" &&\n (compareVersions(resolvedTarget, options.currentVersion) < 0 ||\n compareVersions(resolvedTarget, nextVersion ?? options.currentVersion) < 0)\n ) {\n return {\n upgraded: false,\n from_version: options.currentVersion,\n installed_version: nextVersion ?? options.currentVersion,\n requested_version: target,\n package_manager: installation.manager,\n services_restarted: [],\n services_pending_restart: [],\n resumed_after_restart: false,\n dry_run: options.dryRun,\n }\n }\n\n if (options.dryRun) {\n return {\n upgraded: false,\n from_version: options.currentVersion,\n installed_version: options.currentVersion,\n requested_version: target,\n package_manager: installation.manager,\n services_restarted: [],\n services_pending_restart: pendingServices,\n resumed_after_restart: false,\n dry_run: true,\n }\n }\n\n if (nextVersion === undefined || resolvedTarget !== nextVersion) {\n const install = packageInstallCommand(installation, resolvedTarget)\n const installExecutable = packageManagerExecutable ?? (await resolvePackageManager())\n await checked(runner, { ...install, command: installExecutable })\n nextVersion = await installedVersion(installation.entrypoint)\n }\n if (nextVersion !== resolvedTarget) {\n throw new Error(`Installed Cohall ${nextVersion}, expected ${resolvedTarget}`)\n }\n const upgraded = nextVersion !== options.currentVersion\n\n const initial: RestartReceipt = {\n version: nextVersion,\n fromVersion: options.currentVersion,\n packageManager: installation.manager,\n pendingServices,\n restartedServices: [],\n }\n if (initial.pendingServices.length > 0) {\n await writeReceipt(statePath, initial)\n }\n const completed = options.restart\n ? await restartServices(runner, services, statePath, initial, options.delegated === true)\n : initial\n if (completed.pendingServices.length === 0) {\n await rm(statePath, { force: true })\n }\n return {\n upgraded,\n from_version: options.currentVersion,\n installed_version: nextVersion,\n requested_version: target,\n package_manager: installation.manager,\n services_restarted: reportedRestartServices(completed),\n services_pending_restart: completed.pendingServices.filter(\n (id) => id !== completed.restartingService,\n ),\n resumed_after_restart: false,\n dry_run: false,\n }\n}\n",
|
|
24
24
|
"import { RelayClient } from \"@cohall/client\"\nimport {\n AttachmentName,\n maxAttachmentBytes,\n maxTaskAttachments,\n type InputAttachment,\n type TaskId,\n} from \"@cohall/protocol\"\nimport { Effect, Schema } from \"effect\"\nimport { constants } from \"node:fs\"\nimport { lstat, mkdtemp, mkdir, open, readdir, rm, writeFile } from \"node:fs/promises\"\nimport { tmpdir } from \"node:os\"\nimport { basename, join } from \"node:path\"\nimport type { DeviceConfiguration } from \"./config.ts\"\nimport { readBoundedFile } from \"./bounded-file.ts\"\n\nexport const readInputAttachments = async (\n paths: ReadonlyArray<string>,\n): Promise<ReadonlyArray<InputAttachment>> => {\n if (paths.length > maxTaskAttachments) {\n throw new Error(`A task supports at most ${maxTaskAttachments} input files`)\n }\n const names = new Set<string>()\n return Promise.all(\n paths.map(async (path) => {\n const name = Schema.decodeUnknownSync(AttachmentName)(basename(path))\n const key = name.normalize(\"NFC\").toLocaleLowerCase(\"en-US\")\n if (names.has(key)) {\n throw new Error(`Attachment name ${name} is repeated`)\n }\n names.add(key)\n const source = await lstat(path)\n if (!source.isFile()) {\n throw new Error(`Attachment ${name} must be a regular file`)\n }\n const handle = await open(\n path,\n constants.O_RDONLY |\n (process.platform === \"win32\" ? 0 : constants.O_NOFOLLOW | constants.O_NONBLOCK),\n )\n try {\n const metadata = await handle.stat()\n if (\n !metadata.isFile() ||\n metadata.dev !== source.dev ||\n metadata.ino !== source.ino ||\n metadata.size < 1 ||\n metadata.size > maxAttachmentBytes\n ) {\n throw new Error(\n `Attachment ${name} must be a regular file of 1 to ${maxAttachmentBytes} bytes`,\n )\n }\n const data = await readBoundedFile(handle, maxAttachmentBytes)\n if (data.length < 1 || data.length > maxAttachmentBytes) {\n throw new Error(`Attachment ${name} changed size while reading`)\n }\n return { name, data: data.toString(\"base64\") }\n } finally {\n await handle.close()\n }\n }),\n )\n}\n\nexport interface TaskFiles {\n readonly input: string\n readonly output: string\n readonly inputNames: ReadonlyArray<string>\n readonly collectOutputs: () => Promise<ReadonlyArray<InputAttachment>>\n}\n\nexport const prepareTaskFiles = Effect.fn(\"TaskFiles.prepare\")(function* (\n configuration: DeviceConfiguration,\n taskId: TaskId,\n inputNames: ReadonlyArray<AttachmentName>,\n) {\n const client = RelayClient.make({ baseUrl: configuration.relayUrl, token: configuration.token })\n const root = yield* Effect.acquireRelease(\n Effect.tryPromise({\n try: () => mkdtemp(join(tmpdir(), \"cohall-task-\")),\n catch: (cause) => cause,\n }),\n (root) => Effect.promise(() => rm(root, { recursive: true, force: true })),\n )\n const input = join(root, \"input\")\n const output = join(root, \"output\")\n // Filesystem operations must finish before the scope can remove their directory.\n yield* Effect.tryPromise({ try: () => mkdir(input), catch: (cause) => cause }).pipe(\n Effect.uninterruptible,\n )\n yield* Effect.tryPromise({ try: () => mkdir(output), catch: (cause) => cause }).pipe(\n Effect.uninterruptible,\n )\n for (const name of inputNames) {\n const data = yield* client.readAttachment(taskId, name)\n yield* Effect.tryPromise({\n try: () => writeFile(join(input, name), data, { flag: \"wx\", mode: 0o600 }),\n catch: (cause) => cause,\n }).pipe(Effect.uninterruptible)\n }\n return {\n input,\n output,\n inputNames,\n collectOutputs: () => collectOutputs(output),\n }\n})\n\nconst collectOutputs = async (directory: string): Promise<ReadonlyArray<InputAttachment>> => {\n const entries = await readdir(directory, { withFileTypes: true })\n if (entries.length > maxTaskAttachments) {\n throw new Error(`A task can return at most ${maxTaskAttachments} files`)\n }\n const files: Array<InputAttachment> = []\n const names = new Set<string>()\n for (const entry of entries) {\n const name = Schema.decodeUnknownSync(AttachmentName)(entry.name)\n if (!entry.isFile()) {\n throw new Error(`Output ${name} must be a regular file`)\n }\n const key = name.normalize(\"NFC\").toLocaleLowerCase(\"en-US\")\n if (names.has(key)) {\n throw new Error(`Output ${name} repeats another file name`)\n }\n names.add(key)\n const handle = await open(\n join(directory, name),\n constants.O_RDONLY |\n (process.platform === \"win32\" ? 0 : constants.O_NOFOLLOW | constants.O_NONBLOCK),\n )\n try {\n const metadata = await handle.stat()\n const pathMetadata = await lstat(join(directory, name))\n if (\n !metadata.isFile() ||\n !pathMetadata.isFile() ||\n metadata.dev !== pathMetadata.dev ||\n metadata.ino !== pathMetadata.ino ||\n metadata.size < 1 ||\n metadata.size > maxAttachmentBytes\n ) {\n throw new Error(`Output ${name} must be a regular file of 1 to ${maxAttachmentBytes} bytes`)\n }\n const data = await readBoundedFile(handle, maxAttachmentBytes)\n if (data.length < 1 || data.length > maxAttachmentBytes) {\n throw new Error(`Output ${name} changed size while reading`)\n }\n files.push({ name, data: data.toString(\"base64\") })\n } finally {\n await handle.close()\n }\n }\n return files\n}\n",
|
|
25
25
|
"import type { FileHandle } from \"node:fs/promises\"\n\nexport const readBoundedFile = async (handle: FileHandle, limit: number): Promise<Buffer> => {\n const buffer = Buffer.allocUnsafe(limit + 1)\n let size = 0\n while (size < buffer.length) {\n const { bytesRead } = await handle.read({\n buffer,\n offset: size,\n length: buffer.length - size,\n position: null,\n })\n if (bytesRead === 0) break\n size += bytesRead\n }\n return buffer.subarray(0, size)\n}\n",
|
|
26
|
-
"import { version } from \"@cohall/protocol\"\nimport { Client } from \"@modelcontextprotocol/sdk/client/index.js\"\nimport {\n getDefaultEnvironment,\n StdioClientTransport,\n} from \"@modelcontextprotocol/sdk/client/stdio.js\"\nimport { configurationPath } from \"./config.ts\"\n\nexport const checkMcp = async (\n entrypoint: string,\n relayUrl: string,\n token: string,\n): Promise<{ status: \"ok\"; tool_count: number } | { status: \"error\"; error: string }> => {\n const client = new Client({ name: \"cohall-doctor\", version })\n const transport = new StdioClientTransport({\n command: process.execPath,\n args: [entrypoint, \"mcp\"],\n env: {\n ...getDefaultEnvironment(),\n COHALL_CONFIG: configurationPath(),\n COHALL_RELAY_URL: relayUrl,\n COHALL_CLIENT_TOKEN: token,\n },\n stderr: \"pipe\",\n })\n\n try {\n await client.connect(transport, { timeout: 5_000 })\n const { tools } = await client.listTools(undefined, { timeout: 5_000 })\n if (tools.length === 0) return { status: \"error\", error: \"MCP server exposed no tools\" }\n return { status: \"ok\", tool_count: tools.length }\n } catch (cause) {\n return { status: \"error\", error: cause instanceof Error ? cause.message : String(cause) }\n } finally {\n await client.close()\n }\n}\n",
|
|
26
|
+
"import { version } from \"@cohall/protocol\"\nimport { Client } from \"@modelcontextprotocol/sdk/client/index.js\"\nimport {\n getDefaultEnvironment,\n StdioClientTransport,\n} from \"@modelcontextprotocol/sdk/client/stdio.js\"\nimport { configurationPath } from \"./config.ts\"\n\nexport const checkMcp = async (\n entrypoint: string,\n relayUrl: string,\n token: string,\n): Promise<{ status: \"ok\"; tool_count: number } | { status: \"error\"; error: string }> => {\n const client = new Client({ name: \"cohall-doctor\", version })\n const transport = new StdioClientTransport({\n command: process.execPath,\n args: [entrypoint, \"mcp\"],\n env: {\n ...getDefaultEnvironment(),\n COHALL_CONFIG: configurationPath(),\n COHALL_MCP_SELF_TEST: \"1\",\n COHALL_RELAY_URL: relayUrl,\n COHALL_CLIENT_TOKEN: token,\n },\n stderr: \"pipe\",\n })\n\n try {\n await client.connect(transport, { timeout: 5_000 })\n const { tools } = await client.listTools(undefined, { timeout: 5_000 })\n if (tools.length === 0) return { status: \"error\", error: \"MCP server exposed no tools\" }\n return { status: \"ok\", tool_count: tools.length }\n } catch (cause) {\n return { status: \"error\", error: cause instanceof Error ? cause.message : String(cause) }\n } finally {\n await client.close()\n }\n}\n\nexport {\n readMcpHostDiagnostics,\n type McpHostDiagnostics,\n type McpHostSession,\n} from \"./mcp-host-diagnostics.ts\"\n",
|
|
27
|
+
"import { now, Timestamp, version } from \"@cohall/protocol\"\nimport type { Server } from \"@modelcontextprotocol/sdk/server/index.js\"\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\"\nimport type { RequestId } from \"@modelcontextprotocol/sdk/types.js\"\nimport { Schema } from \"effect\"\nimport { randomUUID } from \"node:crypto\"\nimport { constants } from \"node:fs\"\nimport { lstat, mkdir, open, opendir, rename, rm, writeFile } from \"node:fs/promises\"\nimport { join } from \"node:path\"\nimport { readBoundedFile } from \"./bounded-file.ts\"\nimport { configurationPath } from \"./config.ts\"\n\nconst maxRecords = 8\nconst maxRecordBytes = 4_096\nconst retentionMs = 7 * 24 * 60 * 60 * 1_000\nconst recordName = /^[\\da-f]{8}-[\\da-f]{4}-4[\\da-f]{3}-[89ab][\\da-f]{3}-[\\da-f]{12}\\.json$/\nconst text = Schema.String.check(Schema.isMaxLength(128))\nconst count = Schema.Int.check(Schema.isBetween({ minimum: 0, maximum: Number.MAX_SAFE_INTEGER }))\n\nexport const McpHostSession = Schema.Struct({\n schema_version: Schema.Literal(1),\n launch_id: Schema.String.check(Schema.isUUID(4)),\n launched_at: Timestamp,\n server_version: text,\n initialized_at: Schema.optionalKey(Timestamp),\n client: Schema.optionalKey(Schema.Struct({ name: text, version: text })),\n tools_list: Schema.optionalKey(Schema.Struct({ at: Timestamp, tool_count: count })),\n tools_call_count: count,\n last_tool_call_at: Schema.optionalKey(Timestamp),\n closed_at: Schema.optionalKey(Timestamp),\n})\nexport interface McpHostSession extends Schema.Schema.Type<typeof McpHostSession> {}\n\nexport type McpHostDiagnostics = {\n readonly path: string\n readonly sessions: ReadonlyArray<McpHostSession>\n readonly warnings: ReadonlyArray<string>\n} & (\n | { readonly status: \"observed\" | \"not_observed\" }\n | { readonly status: \"unavailable\"; readonly error: string }\n)\n\nconst storagePath = (configPath: string): string => `${configPath}.mcp-hosts`\n\nconst recordsIn = async (directory: string) => {\n const records: Array<{ path: string; modified: number }> = []\n let entries = 0\n for await (const entry of await opendir(directory)) {\n if (++entries > 64) throw new Error(\"MCP host diagnostics directory exceeded its entry limit\")\n if (!recordName.test(entry.name)) continue\n const path = join(directory, entry.name)\n const metadata = await lstat(path).catch((cause: unknown) => {\n if (cause instanceof Error && \"code\" in cause && cause.code === \"ENOENT\") return undefined\n throw cause\n })\n if (metadata !== undefined) records.push({ path, modified: metadata.mtimeMs })\n }\n return records.sort(\n (left, right) => right.modified - left.modified || left.path.localeCompare(right.path),\n )\n}\n\nexport const readMcpHostDiagnostics = async (\n configPath = configurationPath(),\n): Promise<McpHostDiagnostics> => {\n const path = storagePath(configPath)\n const warnings: Array<string> = []\n let records: Awaited<ReturnType<typeof recordsIn>>\n try {\n records = await recordsIn(path)\n } catch (cause) {\n if (cause instanceof Error && \"code\" in cause && cause.code === \"ENOENT\") {\n return { status: \"not_observed\", path, sessions: [], warnings }\n }\n return {\n status: \"unavailable\",\n path,\n sessions: [],\n warnings,\n error: `Cannot read MCP host diagnostics at ${path}. Restore access to this diagnostics directory, then restart the Cohall MCP connection in your host.`,\n }\n }\n const sessions: Array<McpHostSession> = []\n let invalid = 0\n for (const record of records\n .filter((record) => record.modified >= Date.now() - retentionMs)\n .slice(0, maxRecords)) {\n try {\n const handle = await open(\n record.path,\n constants.O_RDONLY |\n (process.platform === \"win32\" ? 0 : constants.O_NOFOLLOW | constants.O_NONBLOCK),\n )\n try {\n const metadata = await handle.stat()\n if (!metadata.isFile() || metadata.size > maxRecordBytes) throw new Error(\"Invalid record\")\n const data = await readBoundedFile(handle, maxRecordBytes)\n if (data.length > maxRecordBytes) throw new Error(\"Invalid record\")\n sessions.push(Schema.decodeUnknownSync(McpHostSession)(JSON.parse(data.toString(\"utf8\"))))\n } finally {\n await handle.close()\n }\n } catch (cause) {\n if (!(cause instanceof Error && \"code\" in cause && cause.code === \"ENOENT\")) invalid += 1\n }\n }\n if (invalid > 0) {\n warnings.push(\n `${invalid} MCP host diagnostics record(s) could not be read. Reset the diagnostics directory ${path}, then restart the Cohall MCP connection in your host.`,\n )\n }\n if (sessions.length === 0 && invalid > 0) {\n return {\n status: \"unavailable\",\n path,\n sessions,\n warnings,\n error: \"No valid MCP host diagnostics records could be read\",\n }\n }\n const latest = sessions[0]\n if (latest !== undefined) {\n if (latest.initialized_at === undefined) {\n warnings.push(\n `${latest.closed_at === undefined ? \"An MCP launch was recorded\" : \"A recorded MCP launch ended\"} without client initialization. If your host still lacks Cohall tools, check its MCP command and selected config, then restart its Cohall connection.`,\n )\n } else if (latest.tools_list?.tool_count === 0) {\n warnings.push(\n \"A recorded MCP launch returned an empty tools list. If Cohall tools are missing, check the host's Cohall MCP command and update or restart its connection.\",\n )\n } else if (latest.tools_list === undefined && latest.tools_call_count === 0) {\n warnings.push(\n \"An MCP host initialized Cohall but no tool discovery or calls were observed. If Cohall tools are missing, refresh or restart its MCP connection in that host.\",\n )\n }\n }\n return {\n status: sessions.some((session) => session.initialized_at !== undefined)\n ? \"observed\"\n : \"not_observed\",\n path,\n sessions,\n warnings,\n }\n}\n\nexport const createMcpHostDiagnostics = (server: Server): StdioServerTransport => {\n const transport = new StdioServerTransport()\n if (process.env.COHALL_MCP_SELF_TEST === \"1\") return transport\n const directory = storagePath(configurationPath())\n let session = McpHostSession.make({\n schema_version: 1,\n launch_id: randomUUID(),\n launched_at: now(),\n server_version: version,\n tools_call_count: 0,\n })\n const path = join(directory, `${session.launch_id}.json`)\n let dirty = true\n let disabled = false\n let stopped = false\n let writing: Promise<void> | undefined\n let timer: ReturnType<typeof setTimeout> | undefined\n\n const schedule = () => {\n if (disabled || stopped || timer !== undefined) return\n timer = setTimeout(() => {\n timer = undefined\n void flush()\n }, 250)\n timer.unref()\n }\n const flush = (): Promise<void> => {\n if (writing !== undefined) return writing\n if (!dirty || disabled) return Promise.resolve()\n dirty = false\n const snapshot = session\n writing = (async () => {\n await mkdir(directory, { recursive: true, mode: 0o700 })\n await recordsIn(directory)\n const temporary = `${path}.tmp`\n try {\n const json = `${JSON.stringify(snapshot)}\\n`\n if (Buffer.byteLength(json) > maxRecordBytes) throw new Error(\"Record exceeded its limit\")\n await writeFile(temporary, json, { flag: \"wx\", mode: 0o600 })\n await rename(temporary, path)\n } finally {\n await rm(temporary, { force: true })\n }\n const records = await recordsIn(directory)\n const expired = records.filter(\n (record, index) => index >= maxRecords || record.modified < Date.now() - retentionMs,\n )\n await Promise.all(expired.map((record) => rm(record.path, { force: true })))\n })()\n .catch((cause: unknown) => {\n disabled = true\n const reason =\n cause instanceof Error\n ? \"code\" in cause && typeof cause.code === \"string\"\n ? cause.code\n : cause.message\n : \"Unknown filesystem error\"\n console.error(\n `Cohall MCP host diagnostics are unavailable (${reason.replace(/[\\r\\n]/g, \" \").slice(0, 160)}). Check diagnostics storage access; MCP tools remain available.`,\n )\n })\n .finally(() => {\n writing = undefined\n if (dirty) schedule()\n })\n return writing\n }\n const changed = () => {\n dirty = true\n schedule()\n }\n const shutdown = async () => {\n if (stopped) return\n stopped = true\n clearTimeout(timer)\n session = { ...session, closed_at: now() }\n dirty = true\n await writing\n await flush()\n }\n void flush()\n process.once(\"beforeExit\", () => void shutdown())\n const initialized = server.oninitialized\n server.oninitialized = () => {\n initialized?.()\n const client = server.getClientVersion()\n session = {\n ...session,\n initialized_at: now(),\n ...(client === undefined\n ? {}\n : { client: { name: client.name.slice(0, 128), version: client.version.slice(0, 128) } }),\n }\n changed()\n }\n const closed = server.onclose\n server.onclose = () => {\n closed?.()\n void shutdown()\n }\n const pendingLists = new Set<RequestId>()\n const start = transport.start.bind(transport)\n transport.start = async () => {\n const receive = transport.onmessage\n transport.onmessage = (message) => {\n if (\"id\" in message && message.id !== undefined && \"method\" in message) {\n if (message.method === \"tools/list\" && pendingLists.size < 32) pendingLists.add(message.id)\n if (message.method === \"tools/call\") {\n session = {\n ...session,\n tools_call_count: Math.min(session.tools_call_count + 1, Number.MAX_SAFE_INTEGER),\n last_tool_call_at: now(),\n }\n changed()\n }\n }\n receive?.(message)\n }\n await start()\n }\n const send = transport.send.bind(transport)\n transport.send = async (message) => {\n await send(message)\n if (\n \"id\" in message &&\n message.id !== undefined &&\n pendingLists.delete(message.id) &&\n \"result\" in message &&\n Array.isArray(message.result.tools)\n ) {\n session = { ...session, tools_list: { at: now(), tool_count: message.result.tools.length } }\n changed()\n }\n }\n return transport\n}\n",
|
|
27
28
|
"import {\n Device,\n SocketEvent,\n decodeSocketEvent,\n maxSocketPayloadBytes,\n now,\n taskSlot,\n version,\n type Bot,\n type Provider,\n type DeviceOperation,\n type InputAttachment,\n type OperationId,\n type Task,\n type TaskId,\n type TaskRunId,\n type RequestTaskInput,\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, sep } from \"node:path\"\nimport { WebSocket, type RawData } from \"ws\"\nimport type { DeviceConfiguration } from \"./config.ts\"\nimport { discoverGrokBots, runGrokBot } from \"./grok-bot.ts\"\nimport { cleanupBotReply } from \"./bot-replies.ts\"\nimport { upgrade, type UpgradeOptions, type UpgradeResult } from \"./upgrade.ts\"\nimport { prepareTaskFiles, type TaskFiles } from \"./task-attachments.ts\"\n\nconst maxQueuedRelayMessages = 8\n\ntype TaskTerminalEvent = Extract<\n SocketEvent,\n { readonly _tag: \"TaskFinished\" | \"TaskFailed\" | \"TaskCancelled\" | \"TaskInputRequested\" }\n>\n\nexport class DeviceConnectionError extends Schema.TaggedErrorClass<DeviceConnectionError>()(\n \"Device.ConnectionError\",\n { message: Schema.String },\n) {}\n\ninterface State {\n socket: WebSocket | undefined\n stopping: boolean\n supportsAttachments: boolean\n supportsClarification: boolean\n processing: Promise<void>\n readonly terminal: Map<string, TaskTerminalEvent>\n readonly queue: Array<Task>\n readonly sessions: Map<string, string>\n readonly tasks: Map<\n TaskId,\n { readonly task: Task; readonly controller: AbortController; readonly done: Promise<void> }\n >\n readonly completed: Set<string>\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 case \"grok-bot\":\n return \"Grok Bot\"\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:\n provider === \"grok-bot\"\n ? \"Named bots through this computer's local Grok Bot gateway\"\n : `${providerLabel(provider)} executable detected; authentication is checked when work starts`,\n }))\n if (providers.some((provider) => provider !== \"grok-bot\")) {\n values.push({ id: \"task-attachments\", label: \"Task file attachments\" })\n }\n values.push({ id: \"task-clarification\", label: \"Task clarification and resume\" })\n values.push({ id: \"task-deadlines\", label: \"Task deadlines\" })\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 bots: ReadonlyArray<Bot> = [],\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: ReadonlyArray<Provider> = [\n ...Providers.availableProviders(),\n ...(configuration.grokGateway === undefined ? [] : [\"grok-bot\" as const]),\n ]\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 ...(providers.includes(\"grok-bot\") ? { bots } : {}),\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(`..${sep}`) && !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 = (\n task: Task,\n deviceName: string,\n supportsClarification: boolean,\n files?: TaskFiles,\n): 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 \"For long tasks, optionally report a brief milestone with `cohall progress --message 'Running tests'`. Do not include logs or secrets in progress notes.\",\n ...(supportsClarification\n ? [\n \"If essential information is missing, run `cohall request-input --question 'Your question'` or the task_request_input MCP tool, then end this turn immediately. Cohall will pause the task and resume it when the sender answers. Do not guess, keep working, or report a final result after requesting input.\",\n ]\n : []),\n ...(files === undefined\n ? []\n : [\n ...(files.inputNames.length === 0\n ? []\n : [\n `Input directory: ${files.input}`,\n `Input file names: ${files.inputNames.join(\", \")}`,\n ]),\n `Output directory: ${files.output}`,\n \"To return files, write at most 2 regular files of up to 256 KiB each in the output directory and mention them in your result.\",\n ]),\n `\\nTask:\\n${task.prompt}${context}`,\n ...(task.clarifications ?? []).flatMap((question) =>\n question.answer === undefined\n ? []\n : [\n `Clarification question:\\n${question.question}\\nSender's answer:\\n${question.answer.text}`,\n ],\n ),\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 taskRunKey = (taskId: TaskId, runId: TaskRunId | undefined): string =>\n `${taskId}:${runId ?? \"\"}`\n\nconst omitOutputFiles = (event: TaskTerminalEvent, note: string): TaskTerminalEvent => {\n if (event._tag !== \"TaskFinished\" || (event.attachments?.length ?? 0) === 0) {\n return event\n }\n const message = `\\n\\n[Output files omitted: ${note}]`\n return SocketEvent.cases.TaskFinished.make({\n _tag: \"TaskFinished\",\n taskId: event.taskId,\n ...(event.runId === undefined ? {} : { runId: event.runId }),\n result: `${event.result.slice(0, 131_072 - message.length)}${message}`,\n ...(event.providerSessionId === undefined\n ? {}\n : { providerSessionId: event.providerSessionId }),\n })\n}\n\nconst sendTerminal = (state: State, event: TaskTerminalEvent): void => {\n const safeEvent = state.supportsAttachments\n ? event\n : omitOutputFiles(event, \"the relay does not support attachments. Upgrade the relay and retry.\")\n state.terminal.set(taskRunKey(event.taskId, event.runId), safeEvent)\n if (state.socket?.readyState === WebSocket.OPEN) {\n state.socket.send(JSON.stringify(safeEvent))\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, task: Pick<Task, \"id\" | \"runId\">): void => {\n state.completed.add(taskRunKey(task.id, task.runId))\n if (state.completed.size <= 1_000) {\n return\n }\n const oldest = state.completed.keys().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}`\nconst hasCompletedRun = (state: State, task: Task): boolean =>\n state.completed.has(taskRunKey(task.id, task.runId))\n\nconst drain = (configuration: DeviceConfiguration, state: State): void => {\n if (state.stopping || state.operation !== undefined) {\n return\n }\n if (state.tasks.size === 0) {\n const operation = state.operationQueue.shift()\n if (operation !== undefined) {\n executeOperation(configuration, state, operation)\n return\n }\n }\n const occupied = new Set([...state.tasks.values()].map(({ task }) => taskSlot(task)))\n for (let index = 0; index < state.queue.length; ) {\n const next = state.queue[index]\n if (next === undefined || occupied.has(taskSlot(next))) {\n index += 1\n continue\n }\n state.queue.splice(index, 1)\n occupied.add(taskSlot(next))\n execute(configuration, state, next)\n }\n}\n\nconst execute = (configuration: DeviceConfiguration, state: State, task: Task): void => {\n if (state.tasks.has(task.id) || hasCompletedRun(state, task)) {\n return\n }\n const controller = new AbortController()\n let deadlineTimer: ReturnType<typeof setTimeout> | undefined\n const enforceDeadline = (): void => {\n if (task.expiresAt === undefined) return\n const remaining = Date.parse(task.expiresAt) - Date.now()\n if (remaining <= 0) {\n controller.abort()\n return\n }\n deadlineTimer = setTimeout(enforceDeadline, Math.min(remaining, 2_147_483_647))\n }\n enforceDeadline()\n send(\n state,\n SocketEvent.make({\n _tag: \"TaskAccepted\",\n taskId: task.id,\n ...(task.runId === undefined ? {} : { runId: task.runId }),\n }),\n )\n\n const workflow: Effect.Effect<\n Providers.RunResult & {\n readonly attachments?: ReadonlyArray<InputAttachment>\n readonly question?: RequestTaskInput[\"question\"]\n },\n Providers.ProviderError\n > = Effect.scoped(\n Effect.gen(function* () {\n if (\n configuration.providers !== undefined &&\n !configuration.providers.includes(task.provider)\n ) {\n return yield* new Providers.ProviderRunError({\n provider: task.provider,\n message: `${task.provider} is not enabled on this device. Update its configured providers and restart the worker before retrying.`,\n })\n }\n if (task.provider === \"grok-bot\") {\n return yield* Effect.tryPromise({\n try: (signal) =>\n runGrokBot(configuration.grokGateway, task, signal, state.supportsClarification),\n catch: (cause) =>\n new Providers.ProviderRunError({\n provider: task.provider,\n message: cause instanceof Error ? cause.message : String(cause),\n }),\n })\n }\n const provider = task.provider\n if (!state.supportsAttachments && (task.inputAttachmentNames?.length ?? 0) > 0) {\n return yield* new Providers.ProviderRunError({\n provider,\n message: \"The relay does not support task file attachments\",\n })\n }\n const workspace = yield* Effect.acquireRelease(\n Effect.tryPromise({\n try: () => openAllowedWorkspace(configuration, task.workspace),\n catch: (cause) =>\n new Providers.ProviderRunError({\n provider,\n message: cause instanceof Error ? cause.message : String(cause),\n }),\n }),\n (workspace) => Effect.promise(() => workspace.close().catch(() => undefined)),\n )\n const files = state.supportsAttachments\n ? yield* prepareTaskFiles(configuration, task.id, task.inputAttachmentNames ?? []).pipe(\n Effect.mapError(\n (cause) =>\n new Providers.ProviderRunError({\n provider,\n message: cause instanceof Error ? cause.message : String(cause),\n }),\n ),\n )\n : undefined\n const sessionId = task.providerSessionId ?? state.sessions.get(sessionKey(task))\n return yield* Providers.run({\n provider,\n threadId: task.threadId,\n taskId: task.id,\n prompt: promptFor(task, configuration.name, state.supportsClarification, files),\n cwd: workspace.cwd,\n beforeSpawn: workspace.validate,\n ...(sessionId === undefined ? {} : { sessionId }),\n ...(task.runId === undefined ? {} : { runId: task.runId }),\n ...(configuration.model === undefined ? {} : { model: configuration.model }),\n ...(configuration.sandbox === undefined ? {} : { sandbox: configuration.sandbox }),\n }).pipe(\n Effect.flatMap((result) =>\n files === undefined\n ? Effect.succeed(result)\n : Effect.tryPromise({\n try: async () => ({ ...result, attachments: await files.collectOutputs() }),\n catch: (cause) =>\n new Providers.ProviderRunError({\n provider,\n message: cause instanceof Error ? cause.message : String(cause),\n }),\n }).pipe(Effect.uninterruptible),\n ),\n )\n }),\n )\n\n const done = Effect.runPromise(workflow, { signal: controller.signal })\n .then((result) => {\n let finished: TaskTerminalEvent\n if (result.question !== undefined) {\n if (!state.supportsClarification || task.runId === undefined)\n throw new Error(\"Upgrade the relay before requesting clarification\")\n finished = SocketEvent.cases.TaskInputRequested.make({\n _tag: \"TaskInputRequested\",\n taskId: task.id,\n runId: task.runId,\n question: result.question,\n })\n } else {\n finished = SocketEvent.cases.TaskFinished.make({\n _tag: \"TaskFinished\",\n taskId: task.id,\n ...(task.runId === undefined ? {} : { runId: task.runId }),\n result: result.result,\n ...(result.sessionId === undefined ? {} : { providerSessionId: result.sessionId }),\n ...(result.attachments === undefined || result.attachments.length === 0\n ? {}\n : { attachments: result.attachments }),\n })\n }\n const bounded =\n Buffer.byteLength(JSON.stringify(finished)) > maxSocketPayloadBytes\n ? omitOutputFiles(\n finished,\n \"the combined result exceeded the 1 MiB transfer limit. Shorten the result or files and retry.\",\n )\n : finished\n if (result.sessionId !== undefined) {\n state.sessions.set(sessionKey(task), result.sessionId)\n }\n remember(state, task)\n sendTerminal(state, bounded)\n })\n .catch((cause: unknown) => {\n remember(state, task)\n sendTerminal(\n state,\n controller.signal.aborted\n ? SocketEvent.cases.TaskCancelled.make({\n _tag: \"TaskCancelled\",\n taskId: task.id,\n ...(task.runId === undefined ? {} : { runId: task.runId }),\n })\n : SocketEvent.cases.TaskFailed.make({\n _tag: \"TaskFailed\",\n taskId: task.id,\n ...(task.runId === undefined ? {} : { runId: task.runId }),\n error: (cause instanceof Error ? cause.message : String(cause)).slice(0, 16_384),\n }),\n )\n })\n .finally(() => {\n clearTimeout(deadlineTimer)\n state.tasks.delete(task.id)\n drain(configuration, state)\n })\n state.tasks.set(task.id, { task, controller, done })\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 drain(configuration, state)\n })\n}\n\nconst scheduleOperation = (\n configuration: DeviceConfiguration,\n state: State,\n operation: DeviceOperation,\n): void => {\n if (state.stopping) return\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 (state.stopping) return\n if (\n hasCompletedRun(state, task) ||\n state.queue.some((queued) => queued.id === task.id && queued.runId === task.runId)\n ) {\n return\n }\n const running = state.tasks.get(task.id)\n if (running !== undefined && running.task.runId === task.runId) {\n send(\n state,\n SocketEvent.make({\n _tag: \"TaskAccepted\",\n taskId: task.id,\n ...(task.runId === undefined ? {} : { runId: task.runId }),\n }),\n )\n return\n }\n if (task.providerSessionId !== undefined) {\n state.sessions.set(sessionKey(task), task.providerSessionId)\n }\n if (\n [...state.tasks.values()].some(({ task: active }) => taskSlot(active) === taskSlot(task)) ||\n state.operation !== undefined\n ) {\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, runId?: TaskRunId): void => {\n const running = state.tasks.get(taskId)\n if (running !== undefined && (runId === undefined || running.task.runId === runId)) {\n if (running.task.provider !== \"grok-bot\") {\n running.controller.abort()\n }\n return\n }\n const index = state.queue.findIndex(\n (task) => task.id === taskId && (runId === undefined || task.runId === runId),\n )\n if (index !== -1) {\n state.queue.splice(index, 1)\n }\n remember(state, { id: taskId, ...(runId === undefined ? {} : { runId }) })\n sendTerminal(\n state,\n SocketEvent.cases.TaskCancelled.make({\n _tag: \"TaskCancelled\",\n taskId,\n ...(runId === undefined ? {} : { runId }),\n }),\n )\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 allowSynchronousEvents: false,\n })\n let closed = false\n let connectionDeadline = setTimeout(() => socket.terminate(), 10_000)\n const resetConnectionDeadline = (): void => {\n if (closed || state.socket !== socket) return\n clearTimeout(connectionDeadline)\n // The relay pings every 30 seconds; allow another 15 seconds for delivery.\n connectionDeadline = setTimeout(() => socket.terminate(), 45_000)\n }\n socket.on(\"ping\", resetConnectionDeadline)\n let bots: ReadonlyArray<Bot> = []\n let refreshing = false\n const refreshBots = async (): Promise<void> => {\n if (\n refreshing ||\n configuration.grokGateway === undefined ||\n (configuration.providers !== undefined && !configuration.providers.includes(\"grok-bot\"))\n ) {\n return\n }\n refreshing = true\n bots = await discoverGrokBots(configuration.grokGateway).catch(() => [])\n refreshing = false\n if (!closed) {\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 bots,\n }),\n )\n }\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 ...(configuration.grokGateway === undefined ? {} : { bots }),\n }),\n )\n void refreshBots()\n }, 15_000)\n let queuedMessages = 0\n const close = (): void => {\n if (closed) {\n return\n }\n closed = true\n clearTimeout(connectionDeadline)\n clearInterval(heartbeat)\n if (state.socket === socket) {\n state.socket = undefined\n }\n complete()\n }\n signal.addEventListener(\n \"abort\",\n () => {\n socket.terminate()\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.supportsAttachments = event.taskAttachments === true\n state.supportsClarification = event.taskClarification === true\n state.socket = socket\n resetConnectionDeadline()\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 bots,\n ),\n }),\n ),\n )\n for (const [key, pending] of state.terminal) {\n const safeEvent = state.supportsAttachments\n ? pending\n : omitOutputFiles(\n pending,\n \"the relay does not support attachments. Upgrade the relay and retry.\",\n )\n state.terminal.set(key, safeEvent)\n socket.send(JSON.stringify(safeEvent))\n }\n for (const payload of state.operationTerminal.values()) {\n socket.send(payload)\n }\n void refreshBots()\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, event.runId)\n return\n }\n if (event._tag === \"TaskSettled\") {\n state.terminal.delete(taskRunKey(event.taskId, event.runId))\n void cleanupBotReply(event.taskId, event.runId).catch(() => {\n console.error(`Could not remove local bot reply for settled task ${event.taskId}`)\n })\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 stopping: false,\n supportsAttachments: false,\n supportsClarification: false,\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.promise(async () => {\n state.stopping = true\n state.socket?.close()\n const running = [...state.tasks.values()]\n for (const { controller } of running) {\n controller.abort()\n }\n await Promise.allSettled(running.map(({ done }) => done))\n }),\n ),\n )\n}\n",
|
|
28
|
-
"import { RelayClient } from \"@cohall/client\"\nimport {\n AttachmentDirection,\n AttachmentName,\n Provider,\n TaskId,\n TaskDeadline,\n TaskProgressInput,\n TaskRunId,\n TaskRequestId,\n RequestTaskInput,\n AnswerTaskInput,\n maxClarificationBytes,\n maxProgressNoteBytes,\n ThreadId,\n version,\n} from \"@cohall/protocol\"\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\"\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\"\nimport { Effect, Schema } from \"effect\"\nimport * as z from \"zod/v4\"\nimport { writeFile } from \"node:fs/promises\"\nimport type { ClientConfiguration } from \"./config.ts\"\nimport {\n acknowledgedTaskResult,\n createDelegation,\n listBots,\n taskResult,\n threadContext,\n waitForTask,\n requestInput,\n} from \"./delegation.ts\"\nimport { readInputAttachments } from \"./task-attachments.ts\"\nimport { createMcpBuildNotice } from \"./mcp-build-notice.ts\"\n\nexport const runMcp = async (configuration: ClientConfiguration): Promise<void> => {\n const buildNotice = await createMcpBuildNotice(process.argv[1], version)\n const output = (value: unknown) =>\n buildNotice({ content: [{ type: \"text\", text: JSON.stringify(value, null, 2) }] })\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 \"task_request_input\",\n {\n title: \"Ask for task clarification\",\n description:\n \"Ask the original sender for essential missing information. After this succeeds, end the current worker turn immediately. Cohall pauses when the turn exits and resumes the same task after an answer. Inherits the delegated task and turn when omitted.\",\n inputSchema: {\n task_id: z.string().uuid().optional(),\n run_id: z.string().uuid().optional(),\n question: z.string().min(1).max(maxClarificationBytes),\n },\n },\n async ({ task_id, run_id, question }) =>\n output(\n await Effect.runPromise(\n requestInput(\n client,\n configuration,\n Schema.decodeUnknownSync(RequestTaskInput.fields.question)(question),\n task_id === undefined ? undefined : Schema.decodeUnknownSync(TaskId)(task_id),\n run_id === undefined ? undefined : Schema.decodeUnknownSync(TaskRunId)(run_id),\n ),\n ),\n ),\n )\n\n server.registerTool(\n \"task_answer\",\n {\n title: \"Answer a worker's question\",\n description:\n \"Answer the current clarification and resume the same task. Use input_request.id from task_status or delegate as request_id, or inputRequest.id from completion_inbox. Only the original requester or relay owner can answer. Use wait_task to collect the resumed result.\",\n inputSchema: {\n task_id: z.string().uuid(),\n request_id: z.string().uuid(),\n answer: z.string().min(1).max(maxClarificationBytes),\n },\n },\n async ({ task_id, request_id, answer }) =>\n output(\n taskResult(\n await Effect.runPromise(\n client.answerTaskInput(\n Schema.decodeUnknownSync(TaskId)(task_id),\n Schema.decodeUnknownSync(AnswerTaskInput)({ requestId: request_id, answer }),\n ),\n ),\n ),\n ),\n )\n\n server.registerTool(\n \"task_progress\",\n {\n title: \"Report task progress\",\n description: `Replace the latest progress note for a running task on this device. Use brief milestones, up to ${maxProgressNoteBytes} UTF-8 bytes. Inherits the delegated task ID when omitted.`,\n inputSchema: {\n task_id: z.string().uuid().optional(),\n note: z.string().min(1).max(maxProgressNoteBytes),\n },\n },\n async ({ task_id, note }) => {\n const id = task_id ?? configuration.mcpTaskId\n if (id === undefined) throw new Error(\"Task id is required outside delegated work\")\n const input = Schema.decodeUnknownSync(TaskProgressInput)({ note })\n return output(\n await Effect.runPromise(\n client.reportTaskProgress(Schema.decodeUnknownSync(TaskId)(id), input),\n ),\n )\n },\n )\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 \"list_bots\",\n {\n title: \"List Cohall bots\",\n description:\n \"List named Grok Bots on paired devices, their host availability, and unambiguous targets for delegate. Bot names can also be used when unique.\",\n inputSchema: {},\n },\n async () => output(listBots(await Effect.runPromise(client.devices()))),\n )\n\n server.registerTool(\n \"delegate\",\n {\n title: \"Send work to a device or bot\",\n description:\n \"Send focused work to a Cohall device or named Grok Bot. 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. Grok Bots use their existing conversation; a Cohall thread does not isolate it.\",\n inputSchema: {\n prompt: z.string().min(1).max(131_072),\n request_id: z\n .string()\n .uuid()\n .optional()\n .describe(\n \"A UUID v4 generated before submitting. Reuse with identical input and the same client credential after a lost response to recover the original task. Use stable device IDs or device/bot IDs for retries. For thread follow-ups, select a target or provider explicitly; select Bots explicitly.\",\n ),\n target: z\n .string()\n .optional()\n .describe(\n \"Device name, hostname or ID; @BotName; or @device/BotName. Use list_bots targets to disambiguate.\",\n ),\n provider: z\n .enum(Provider.literals)\n .optional()\n .describe(\"Inferred as grok-bot for a bot target; otherwise defaults to 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 parent_task_id: z\n .string()\n .uuid()\n .optional()\n .describe(\"The task delegating this work. Inherited from COHALL_TASK_ID when present.\"),\n workspace: z\n .string()\n .max(4096)\n .optional()\n .describe(\"Coding provider workspace. Omit for named Grok Bots.\"),\n attachment_paths: z\n .array(z.string())\n .max(2)\n .optional()\n .describe(\n \"Local files to send with the task, up to 2 files of 256 KiB each. Coding providers only.\",\n ),\n wait: z.boolean().default(true),\n timeout_seconds: z.number().int().min(5).max(86_400).default(900),\n deadline: z\n .string()\n .optional()\n .describe(\n \"Absolute ISO-8601 UTC deadline for coding work, preserved through clarification. Overdue work stops; timeout_seconds only limits waiting.\",\n ),\n },\n },\n async (\n {\n prompt,\n request_id,\n target,\n provider,\n context,\n thread_id,\n parent_task_id,\n workspace,\n attachment_paths,\n wait,\n timeout_seconds,\n deadline,\n },\n { signal },\n ) => {\n const attachments = await readInputAttachments(attachment_paths ?? [])\n const task = await Effect.runPromise(\n createDelegation(client, configuration, {\n prompt,\n ...(request_id === undefined\n ? {}\n : { requestId: Schema.decodeUnknownSync(TaskRequestId)(request_id) }),\n ...(provider === undefined ? {} : { provider }),\n ...(target === undefined ? {} : { target }),\n ...(context === undefined ? {} : { context }),\n ...(thread_id === undefined ? {} : { threadId: ThreadId.make(thread_id) }),\n ...(parent_task_id === undefined ? {} : { parentTaskId: TaskId.make(parent_task_id) }),\n ...(workspace === undefined ? {} : { workspace }),\n ...(attachments.length === 0 ? {} : { attachments }),\n ...(deadline === undefined\n ? {}\n : { expiresAt: Schema.decodeUnknownSync(TaskDeadline)(deadline) }),\n }),\n { signal },\n )\n const completed = wait\n ? await Effect.runPromise(waitForTask(client, task, timeout_seconds), { signal })\n : task\n return output(\n wait ? await acknowledgedTaskResult(client, completed, signal) : taskResult(completed),\n )\n },\n )\n\n server.registerTool(\n \"completion_inbox\",\n {\n title: \"List pending questions and completed work\",\n description:\n \"List up to 20 unanswered clarification requests and unacknowledged completed tasks sent by this client. hasMore signals additional entries. Answer questions with task_answer; use task_status for full results and acknowledge only handled completions.\",\n inputSchema: {},\n },\n async () => output(await Effect.runPromise(client.inbox())),\n )\n\n server.registerTool(\n \"acknowledge_completion\",\n {\n title: \"Acknowledge completed work\",\n description: \"Remove a handled task from this client's completion inbox.\",\n inputSchema: { task_id: z.string().uuid() },\n },\n async ({ task_id }) =>\n output(await Effect.runPromise(client.acknowledgeCompletion(TaskId.make(task_id)))),\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 \"list_task_attachments\",\n {\n title: \"List task files\",\n description: \"List input and output files retained with a delegated task.\",\n inputSchema: { task_id: z.string().uuid() },\n },\n async ({ task_id }) =>\n output(await Effect.runPromise(client.listAttachments(TaskId.make(task_id)))),\n )\n\n server.registerTool(\n \"download_task_attachment\",\n {\n title: \"Download a task file\",\n description: \"Save one task file to a new local path. Existing files are never overwritten.\",\n inputSchema: {\n task_id: z.string().uuid(),\n name: z.string(),\n output_path: z.string(),\n direction: z.enum([\"input\", \"output\"]).optional(),\n },\n },\n async ({ task_id, name, output_path, direction }, { signal }) => {\n const safeName = Schema.decodeUnknownSync(AttachmentName)(name)\n const safeDirection =\n direction === undefined\n ? undefined\n : Schema.decodeUnknownSync(AttachmentDirection)(direction)\n const data = await Effect.runPromise(\n client.readAttachment(TaskId.make(task_id), safeName, safeDirection),\n { signal },\n )\n signal.throwIfAborted()\n await writeFile(output_path, data, { flag: \"wx\", mode: 0o600, signal })\n return output({ task_id, name: safeName, output_path, bytes: data.length })\n },\n )\n\n server.registerTool(\n \"task_trace\",\n {\n title: \"Trace a delegated task\",\n description:\n \"Read the relay and device lifecycle and latest worker progress note 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:\n \"Wait for a Cohall task to finish or need input. Answer a needs_input result with task_answer, then wait again.\",\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 }, { signal }) => {\n return output(\n taskResult(\n await Effect.runPromise(waitForTask(client, TaskId.make(task_id), timeout_seconds), {\n signal,\n }),\n ),\n )\n },\n )\n\n server.registerTool(\n \"cancel_task\",\n {\n title: \"Cancel delegated work\",\n description:\n \"Cancel coding work, a paused task, or a Bot task that has never been dispatched. Active Grok Bot tasks must be stopped in Grok Bot.\",\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",
|
|
29
|
+
"import { RelayClient } from \"@cohall/client\"\nimport {\n AttachmentDirection,\n AttachmentName,\n Provider,\n TaskId,\n TaskDeadline,\n TaskProgressInput,\n TaskRunId,\n TaskRequestId,\n RequestTaskInput,\n AnswerTaskInput,\n maxClarificationBytes,\n maxProgressNoteBytes,\n ThreadId,\n version,\n} from \"@cohall/protocol\"\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\"\nimport { Effect, Schema } from \"effect\"\nimport * as z from \"zod/v4\"\nimport { writeFile } from \"node:fs/promises\"\nimport type { ClientConfiguration } from \"./config.ts\"\nimport {\n acknowledgedTaskResult,\n createDelegation,\n listBots,\n taskResult,\n threadContext,\n waitForTask,\n requestInput,\n} from \"./delegation.ts\"\nimport { readInputAttachments } from \"./task-attachments.ts\"\nimport { createMcpBuildNotice } from \"./mcp-build-notice.ts\"\nimport { createMcpHostDiagnostics } from \"./mcp-host-diagnostics.ts\"\n\nexport const runMcp = async (configuration: ClientConfiguration): Promise<void> => {\n const buildNotice = await createMcpBuildNotice(process.argv[1], version)\n const output = (value: unknown) =>\n buildNotice({ content: [{ type: \"text\", text: JSON.stringify(value, null, 2) }] })\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 \"task_request_input\",\n {\n title: \"Ask for task clarification\",\n description:\n \"Ask the original sender for essential missing information. After this succeeds, end the current worker turn immediately. Cohall pauses when the turn exits and resumes the same task after an answer. Inherits the delegated task and turn when omitted.\",\n inputSchema: {\n task_id: z.string().uuid().optional(),\n run_id: z.string().uuid().optional(),\n question: z.string().min(1).max(maxClarificationBytes),\n },\n },\n async ({ task_id, run_id, question }) =>\n output(\n await Effect.runPromise(\n requestInput(\n client,\n configuration,\n Schema.decodeUnknownSync(RequestTaskInput.fields.question)(question),\n task_id === undefined ? undefined : Schema.decodeUnknownSync(TaskId)(task_id),\n run_id === undefined ? undefined : Schema.decodeUnknownSync(TaskRunId)(run_id),\n ),\n ),\n ),\n )\n\n server.registerTool(\n \"task_answer\",\n {\n title: \"Answer a worker's question\",\n description:\n \"Answer the current clarification and resume the same task. Use input_request.id from task_status or delegate as request_id, or inputRequest.id from completion_inbox. Only the original requester or relay owner can answer. Use wait_task to collect the resumed result.\",\n inputSchema: {\n task_id: z.string().uuid(),\n request_id: z.string().uuid(),\n answer: z.string().min(1).max(maxClarificationBytes),\n },\n },\n async ({ task_id, request_id, answer }) =>\n output(\n taskResult(\n await Effect.runPromise(\n client.answerTaskInput(\n Schema.decodeUnknownSync(TaskId)(task_id),\n Schema.decodeUnknownSync(AnswerTaskInput)({ requestId: request_id, answer }),\n ),\n ),\n ),\n ),\n )\n\n server.registerTool(\n \"task_progress\",\n {\n title: \"Report task progress\",\n description: `Replace the latest progress note for a running task on this device. Use brief milestones, up to ${maxProgressNoteBytes} UTF-8 bytes. Inherits the delegated task ID when omitted.`,\n inputSchema: {\n task_id: z.string().uuid().optional(),\n note: z.string().min(1).max(maxProgressNoteBytes),\n },\n },\n async ({ task_id, note }) => {\n const id = task_id ?? configuration.mcpTaskId\n if (id === undefined) throw new Error(\"Task id is required outside delegated work\")\n const input = Schema.decodeUnknownSync(TaskProgressInput)({ note })\n return output(\n await Effect.runPromise(\n client.reportTaskProgress(Schema.decodeUnknownSync(TaskId)(id), input),\n ),\n )\n },\n )\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 \"list_bots\",\n {\n title: \"List Cohall bots\",\n description:\n \"List named Grok Bots on paired devices, their host availability, and unambiguous targets for delegate. Bot names can also be used when unique.\",\n inputSchema: {},\n },\n async () => output(listBots(await Effect.runPromise(client.devices()))),\n )\n\n server.registerTool(\n \"delegate\",\n {\n title: \"Send work to a device or bot\",\n description:\n \"Send focused work to a Cohall device or named Grok Bot. 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. Grok Bots use their existing conversation; a Cohall thread does not isolate it.\",\n inputSchema: {\n prompt: z.string().min(1).max(131_072),\n request_id: z\n .string()\n .uuid()\n .optional()\n .describe(\n \"A UUID v4 generated before submitting. Reuse with identical input and the same client credential after a lost response to recover the original task. Use stable device IDs or device/bot IDs for retries. For thread follow-ups, select a target or provider explicitly; select Bots explicitly.\",\n ),\n target: z\n .string()\n .optional()\n .describe(\n \"Device name, hostname or ID; @BotName; or @device/BotName. Use list_bots targets to disambiguate.\",\n ),\n provider: z\n .enum(Provider.literals)\n .optional()\n .describe(\"Inferred as grok-bot for a bot target; otherwise defaults to 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 parent_task_id: z\n .string()\n .uuid()\n .optional()\n .describe(\"The task delegating this work. Inherited from COHALL_TASK_ID when present.\"),\n workspace: z\n .string()\n .max(4096)\n .optional()\n .describe(\"Coding provider workspace. Omit for named Grok Bots.\"),\n attachment_paths: z\n .array(z.string())\n .max(2)\n .optional()\n .describe(\n \"Local files to send with the task, up to 2 files of 256 KiB each. Coding providers only.\",\n ),\n wait: z.boolean().default(true),\n timeout_seconds: z.number().int().min(5).max(86_400).default(900),\n deadline: z\n .string()\n .optional()\n .describe(\n \"Absolute ISO-8601 UTC deadline for coding work, preserved through clarification. Overdue work stops; timeout_seconds only limits waiting.\",\n ),\n },\n },\n async (\n {\n prompt,\n request_id,\n target,\n provider,\n context,\n thread_id,\n parent_task_id,\n workspace,\n attachment_paths,\n wait,\n timeout_seconds,\n deadline,\n },\n { signal },\n ) => {\n const attachments = await readInputAttachments(attachment_paths ?? [])\n const task = await Effect.runPromise(\n createDelegation(client, configuration, {\n prompt,\n ...(request_id === undefined\n ? {}\n : { requestId: Schema.decodeUnknownSync(TaskRequestId)(request_id) }),\n ...(provider === undefined ? {} : { provider }),\n ...(target === undefined ? {} : { target }),\n ...(context === undefined ? {} : { context }),\n ...(thread_id === undefined ? {} : { threadId: ThreadId.make(thread_id) }),\n ...(parent_task_id === undefined ? {} : { parentTaskId: TaskId.make(parent_task_id) }),\n ...(workspace === undefined ? {} : { workspace }),\n ...(attachments.length === 0 ? {} : { attachments }),\n ...(deadline === undefined\n ? {}\n : { expiresAt: Schema.decodeUnknownSync(TaskDeadline)(deadline) }),\n }),\n { signal },\n )\n const completed = wait\n ? await Effect.runPromise(waitForTask(client, task, timeout_seconds), { signal })\n : task\n return output(\n wait ? await acknowledgedTaskResult(client, completed, signal) : taskResult(completed),\n )\n },\n )\n\n server.registerTool(\n \"completion_inbox\",\n {\n title: \"List pending questions and completed work\",\n description:\n \"List up to 20 unanswered clarification requests and unacknowledged completed tasks sent by this client. hasMore signals additional entries. Answer questions with task_answer; use task_status for full results and acknowledge only handled completions.\",\n inputSchema: {},\n },\n async () => output(await Effect.runPromise(client.inbox())),\n )\n\n server.registerTool(\n \"acknowledge_completion\",\n {\n title: \"Acknowledge completed work\",\n description: \"Remove a handled task from this client's completion inbox.\",\n inputSchema: { task_id: z.string().uuid() },\n },\n async ({ task_id }) =>\n output(await Effect.runPromise(client.acknowledgeCompletion(TaskId.make(task_id)))),\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 \"list_task_attachments\",\n {\n title: \"List task files\",\n description: \"List input and output files retained with a delegated task.\",\n inputSchema: { task_id: z.string().uuid() },\n },\n async ({ task_id }) =>\n output(await Effect.runPromise(client.listAttachments(TaskId.make(task_id)))),\n )\n\n server.registerTool(\n \"download_task_attachment\",\n {\n title: \"Download a task file\",\n description: \"Save one task file to a new local path. Existing files are never overwritten.\",\n inputSchema: {\n task_id: z.string().uuid(),\n name: z.string(),\n output_path: z.string(),\n direction: z.enum([\"input\", \"output\"]).optional(),\n },\n },\n async ({ task_id, name, output_path, direction }, { signal }) => {\n const safeName = Schema.decodeUnknownSync(AttachmentName)(name)\n const safeDirection =\n direction === undefined\n ? undefined\n : Schema.decodeUnknownSync(AttachmentDirection)(direction)\n const data = await Effect.runPromise(\n client.readAttachment(TaskId.make(task_id), safeName, safeDirection),\n { signal },\n )\n signal.throwIfAborted()\n await writeFile(output_path, data, { flag: \"wx\", mode: 0o600, signal })\n return output({ task_id, name: safeName, output_path, bytes: data.length })\n },\n )\n\n server.registerTool(\n \"task_trace\",\n {\n title: \"Trace a delegated task\",\n description:\n \"Read the relay and device lifecycle and latest worker progress note 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:\n \"Wait for a Cohall task to finish or need input. Answer a needs_input result with task_answer, then wait again.\",\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 }, { signal }) => {\n return output(\n taskResult(\n await Effect.runPromise(waitForTask(client, TaskId.make(task_id), timeout_seconds), {\n signal,\n }),\n ),\n )\n },\n )\n\n server.registerTool(\n \"cancel_task\",\n {\n title: \"Cancel delegated work\",\n description:\n \"Cancel coding work, a paused task, or a Bot task that has never been dispatched. Active Grok Bot tasks must be stopped in Grok Bot.\",\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(createMcpHostDiagnostics(server.server))\n}\n",
|
|
29
30
|
"import type { CallToolResult } from \"@modelcontextprotocol/sdk/types.js\"\nimport { execFile } from \"node:child_process\"\nimport { stat } from \"node:fs/promises\"\nimport { promisify } from \"node:util\"\n\nconst execute = promisify(execFile)\nconst fingerprint = async (entrypoint: string) =>\n stat(entrypoint, { bigint: true })\n .then((file) => `${file.dev}:${file.ino}:${file.size}:${file.mtimeNs}:${file.ctimeNs}`)\n .catch(() => undefined)\n\nexport const createMcpBuildNotice = async (\n entrypoint: string | undefined,\n runningVersion: string,\n {\n checkIntervalMs = 60_000,\n probeTimeoutMs = 2_000,\n now = Date.now,\n }: {\n checkIntervalMs?: number\n probeTimeoutMs?: number\n now?: () => number\n } = {},\n) => {\n let previous = entrypoint === undefined ? undefined : await fingerprint(entrypoint)\n let nextCheckAt = 0\n const reported = new Set<string>()\n\n return async (result: CallToolResult): Promise<CallToolResult> => {\n if (entrypoint === undefined || now() < nextCheckAt) return result\n nextCheckAt = now() + checkIntervalMs\n const current = await fingerprint(entrypoint)\n if (current === undefined || current === previous) return result\n\n // A replacement may still be in progress. Retry failed probes at the next interval.\n const installedVersion = await execute(process.execPath, [entrypoint, \"--version\"], {\n timeout: probeTimeoutMs,\n killSignal: \"SIGKILL\",\n maxBuffer: 4_096,\n windowsHide: true,\n })\n .then(({ stdout }) => stdout.trim())\n .catch(() => undefined)\n if (\n installedVersion === undefined ||\n !/^\\d+\\.\\d+\\.\\d+(?:-[\\da-zA-Z.-]+)?(?:\\+[\\da-zA-Z.-]+)?$/.test(installedVersion)\n ) {\n return result\n }\n previous = current\n if (installedVersion === runningVersion || reported.has(installedVersion)) return result\n reported.add(installedVersion)\n return {\n ...result,\n content: [\n ...result.content,\n {\n type: \"text\",\n text: `Cohall MCP is still running ${runningVersion}; its executable is now ${installedVersion}. Restart the Cohall MCP connection in your agent host to load it.`,\n },\n ],\n }\n }\n}\n"
|
|
30
31
|
],
|
|
31
|
-
"mappings": "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",
|
|
32
|
-
"debugId": "
|
|
32
|
+
"mappings": "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",
|
|
33
|
+
"debugId": "6DD87AF6E4752A1764756E2164756E21",
|
|
33
34
|
"names": []
|
|
34
35
|
}
|