@openclaw/crabline 0.1.14 → 0.1.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/dist/src/index.d.ts +2 -2
  2. package/dist/src/index.js +1 -1
  3. package/dist/src/index.js.map +1 -1
  4. package/dist/src/openclaw/bridges/discord.js +17 -4
  5. package/dist/src/openclaw/bridges/discord.js.map +1 -1
  6. package/dist/src/openclaw/bridges/matrix.js +4 -2
  7. package/dist/src/openclaw/bridges/matrix.js.map +1 -1
  8. package/dist/src/openclaw/bridges/mattermost.js +70 -23
  9. package/dist/src/openclaw/bridges/mattermost.js.map +1 -1
  10. package/dist/src/openclaw/bridges/signal.js +10 -3
  11. package/dist/src/openclaw/bridges/signal.js.map +1 -1
  12. package/dist/src/openclaw/bridges/slack.js +5 -3
  13. package/dist/src/openclaw/bridges/slack.js.map +1 -1
  14. package/dist/src/openclaw/bridges/telegram.js +50 -27
  15. package/dist/src/openclaw/bridges/telegram.js.map +1 -1
  16. package/dist/src/openclaw/bridges/whatsapp.js +5 -3
  17. package/dist/src/openclaw/bridges/whatsapp.js.map +1 -1
  18. package/dist/src/openclaw/bridges/zalo.js +4 -3
  19. package/dist/src/openclaw/bridges/zalo.js.map +1 -1
  20. package/dist/src/openclaw/private-file.d.ts +8 -0
  21. package/dist/src/openclaw/private-file.js +99 -8
  22. package/dist/src/openclaw/private-file.js.map +1 -1
  23. package/dist/src/openclaw/shared.d.ts +48 -4
  24. package/dist/src/openclaw/shared.js +68 -9
  25. package/dist/src/openclaw/shared.js.map +1 -1
  26. package/dist/src/openclaw.d.ts +10 -4
  27. package/dist/src/openclaw.js +31 -11
  28. package/dist/src/openclaw.js.map +1 -1
  29. package/dist/src/servers/mattermost.js +42 -14
  30. package/dist/src/servers/mattermost.js.map +1 -1
  31. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../../src/openclaw.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport type { BigIntStats } from \"node:fs\";\nimport {\n CRABLINE_SERVER_CHANNELS,\n isCrablineServerChannel,\n startCrablineServer,\n type CrablineServerChannel,\n type CrablineServerManifest,\n type StartCrablineServerParams,\n type StartedCrablineServer,\n} from \"./servers/index.js\";\nimport { SLACK_OPENCLAW_CRABLINE_PROVIDER_BRIDGE } from \"./openclaw/bridges/slack.js\";\nimport { DISCORD_OPENCLAW_CRABLINE_PROVIDER_BRIDGE } from \"./openclaw/bridges/discord.js\";\nimport { MATTERMOST_OPENCLAW_CRABLINE_PROVIDER_BRIDGE } from \"./openclaw/bridges/mattermost.js\";\nimport { MATRIX_OPENCLAW_CRABLINE_PROVIDER_BRIDGE } from \"./openclaw/bridges/matrix.js\";\nimport { SIGNAL_OPENCLAW_CRABLINE_PROVIDER_BRIDGE } from \"./openclaw/bridges/signal.js\";\nimport { TELEGRAM_OPENCLAW_CRABLINE_PROVIDER_BRIDGE } from \"./openclaw/bridges/telegram.js\";\nimport { WHATSAPP_OPENCLAW_CRABLINE_PROVIDER_BRIDGE } from \"./openclaw/bridges/whatsapp.js\";\nimport { ZALO_OPENCLAW_CRABLINE_PROVIDER_BRIDGE } from \"./openclaw/bridges/zalo.js\";\nimport {\n OPENCLAW_CRABLINE_CHANNEL_CAPABILITY_MATRIX_PATH,\n OPENCLAW_CRABLINE_PROVIDER_READINESS_PATH,\n OPENCLAW_CRABLINE_DEFAULT_CHANNEL,\n OPENCLAW_CRABLINE_ARTIFACT_POINTER_PATH,\n OPENCLAW_CRABLINE_ARTIFACT_STORE_DIRECTORY,\n OPENCLAW_CRABLINE_MANIFEST_PATH,\n getUnsettledOpenClawCrablineProviderProbe,\n isRecord,\n parseQaTarget,\n runOpenClawCrablineProviderProbe,\n type OpenClawCrablineAgentDelivery,\n type OpenClawCrablineChannelDriverSelection,\n type OpenClawCrablineProviderReadinessResult,\n type OpenClawCrablineGatewayBinding,\n type OpenClawCrablineInbound,\n type OpenClawCrablineInboundInput,\n type OpenClawCrablineOutboundMessage,\n type OpenClawCrablineProviderAdapter,\n type OpenClawCrablineProviderBridge,\n type OpenClawCrablineProviderBridgeRegistry,\n type StartedOpenClawCrablineAdapter,\n type StartOpenClawCrablineAdapterParams,\n} from \"./openclaw/shared.js\";\nimport { publishOpenClawCrablineArtifactGeneration } from \"./openclaw/artifact-generation.js\";\nimport { isAcceptedOpenClawCrablineOutbound } from \"./openclaw/outbound-contract.js\";\nimport {\n securePrivateDirectory,\n syncParentDirectory,\n type SecuredPrivateDirectory,\n} from \"./openclaw/private-file.js\";\nimport {\n acquireOpenClawCrablineProviderReadinessLock,\n releaseOpenClawCrablineProviderReadinessLock,\n} from \"./openclaw/provider-readiness-lock.js\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport {\n OPENCLAW_CRABLINE_ARTIFACT_POINTER_PATH,\n OPENCLAW_CRABLINE_ARTIFACT_STORE_DIRECTORY,\n OPENCLAW_CRABLINE_CHANNEL_CAPABILITY_MATRIX_PATH,\n OPENCLAW_CRABLINE_PROVIDER_READINESS_PATH,\n OPENCLAW_CRABLINE_DEFAULT_CHANNEL,\n OPENCLAW_CRABLINE_MANIFEST_PATH,\n};\nexport type {\n OpenClawCrablineAgentDelivery,\n OpenClawCrablineChannelDriverSelection,\n OpenClawCrablineProviderReadinessResult,\n OpenClawCrablineConversation,\n OpenClawCrablineGatewayBinding,\n OpenClawCrablineInbound,\n OpenClawCrablineInboundInput,\n OpenClawCrablineOutboundMessage,\n StartedOpenClawCrablineAdapter,\n StartOpenClawCrablineAdapterParams,\n} from \"./openclaw/shared.js\";\n\nconst OPENCLAW_CRABLINE_PROVIDER_BRIDGES = {\n discord: DISCORD_OPENCLAW_CRABLINE_PROVIDER_BRIDGE,\n mattermost: MATTERMOST_OPENCLAW_CRABLINE_PROVIDER_BRIDGE,\n matrix: MATRIX_OPENCLAW_CRABLINE_PROVIDER_BRIDGE,\n signal: SIGNAL_OPENCLAW_CRABLINE_PROVIDER_BRIDGE,\n slack: SLACK_OPENCLAW_CRABLINE_PROVIDER_BRIDGE,\n telegram: TELEGRAM_OPENCLAW_CRABLINE_PROVIDER_BRIDGE,\n whatsapp: WHATSAPP_OPENCLAW_CRABLINE_PROVIDER_BRIDGE,\n zalo: ZALO_OPENCLAW_CRABLINE_PROVIDER_BRIDGE,\n} satisfies OpenClawCrablineProviderBridgeRegistry;\n\nconst OPENCLAW_CRABLINE_PROVIDER_BRIDGE_LIST = Object.values(\n OPENCLAW_CRABLINE_PROVIDER_BRIDGES,\n) as readonly OpenClawCrablineProviderBridge[];\nconst RECORDER_TEMP_NAME_PATTERN =\n /^\\.([a-z]+)-provider-server\\.[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\.jsonl\\.tmp$/iu;\nconst RECORDER_LOCK_REMOVAL_TOMBSTONE_PATTERN =\n /^\\.(.+)\\.\\d+\\.[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\.remove$/iu;\nconst OPENCLAW_CRABLINE_PROVIDER_PROBE_CLEANUP_GRACE_MS = 250;\n\nfunction isOpenClawCrablineRecorderTemporary(name: string): boolean {\n const channel = RECORDER_TEMP_NAME_PATTERN.exec(name)?.[1]?.toLowerCase();\n return channel !== undefined && isCrablineServerChannel(channel);\n}\n\nfunction hasStringRecordValues(value: unknown): value is Record<string, string> {\n return isRecord(value) && Object.values(value).every((entry) => typeof entry === \"string\");\n}\n\ntype OpenClawCrablineRecorderEvent = {\n accepted: true;\n at: string;\n method: string;\n path: string;\n query: Record<string, string>;\n type: \"admin\" | \"api\";\n};\n\nfunction isOpenClawCrablineRecorderEvent(value: unknown): value is OpenClawCrablineRecorderEvent {\n return (\n isRecord(value) &&\n value.accepted === true &&\n typeof value.at === \"string\" &&\n Number.isFinite(Date.parse(value.at)) &&\n typeof value.method === \"string\" &&\n value.method.length > 0 &&\n typeof value.path === \"string\" &&\n value.path.startsWith(\"/\") &&\n hasStringRecordValues(value.query) &&\n (value.type === \"admin\" || value.type === \"api\")\n );\n}\n\nfunction openClawCrablineProviderProbeRequest(\n manifest: CrablineServerManifest,\n): Pick<OpenClawCrablineRecorderEvent, \"method\" | \"path\"> {\n switch (manifest.provider) {\n case \"discord\":\n return {\n method: \"GET\",\n path: new URL(`${manifest.endpoints.apiRoot}/v10/users/@me`).pathname,\n };\n case \"mattermost\":\n return {\n method: \"GET\",\n path: new URL(`${manifest.endpoints.apiRoot}/users/me`).pathname,\n };\n case \"matrix\":\n return {\n method: \"GET\",\n path: new URL(`${manifest.endpoints.clientApiRoot}/account/whoami`).pathname,\n };\n case \"signal\":\n return {\n method: \"GET\",\n path: new URL(\"/api/v1/check\", manifest.baseUrl).pathname,\n };\n case \"slack\":\n return {\n method: \"POST\",\n path: new URL(\"auth.test\", manifest.endpoints.apiRoot).pathname,\n };\n case \"telegram\":\n return { method: \"GET\", path: \"/bot<redacted>/getMe\" };\n case \"whatsapp\":\n return {\n method: \"GET\",\n path: new URL(manifest.endpoints.phoneNumberUrl).pathname,\n };\n case \"zalo\":\n return { method: \"POST\", path: \"/bot<redacted>/getMe\" };\n }\n}\n\nfunction assertOpenClawCrablineRecorderEvidence(\n contents: string,\n manifest: CrablineServerManifest,\n): void {\n const expectedRequest = openClawCrablineProviderProbeRequest(manifest);\n let recorderEvidence = false;\n for (const line of contents.split(/\\r?\\n/u)) {\n if (!line.trim()) {\n continue;\n }\n let event: unknown;\n try {\n event = JSON.parse(line);\n } catch (error) {\n throw new Error(\n \"OpenClaw Crabline provider probe produced no valid JSONL recorder evidence.\",\n { cause: error },\n );\n }\n if (!isOpenClawCrablineRecorderEvent(event)) {\n throw new Error(\n \"OpenClaw Crabline provider probe produced no valid JSONL recorder evidence.\",\n );\n }\n if (\n event.type === \"api\" &&\n event.method === expectedRequest.method &&\n event.path === expectedRequest.path\n ) {\n recorderEvidence = true;\n }\n }\n if (!recorderEvidence) {\n throw new Error(\"OpenClaw Crabline provider probe produced no valid JSONL recorder evidence.\");\n }\n}\n\nfunction isOpenClawCrablineRecorderTemporaryLock(name: string): boolean {\n return name.endsWith(\".lock\") && isOpenClawCrablineRecorderTemporary(name.slice(0, -5));\n}\n\nfunction openClawCrablineRecorderLockTombstoneBaseName(name: string): string | null {\n const originalName = RECORDER_LOCK_REMOVAL_TOMBSTONE_PATTERN.exec(name)?.[1];\n return originalName !== undefined && isOpenClawCrablineRecorderTemporaryLock(originalName)\n ? originalName\n : null;\n}\n\nasync function reclaimOpenClawCrablineRecorderTemporaryLock(\n directoryPath: string,\n name: string,\n lock: Awaited<ReturnType<typeof acquireOpenClawCrablineProviderReadinessLock>>,\n quarantineBaseName = name,\n): Promise<void> {\n const lockPath = path.join(directoryPath, name);\n let identity: BigIntStats;\n try {\n identity = await fs.lstat(lockPath, { bigint: true });\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return;\n }\n throw error;\n }\n if (!identity.isDirectory()) {\n return;\n }\n const currentUserId = process.geteuid?.();\n if (currentUserId !== undefined && identity.uid !== BigInt(currentUserId)) {\n return;\n }\n\n const quarantinePath = path.join(\n directoryPath,\n `.${quarantineBaseName}.${process.pid}.${randomUUID()}.remove`,\n );\n await lock.assertOwned();\n try {\n await fs.rename(lockPath, quarantinePath);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return;\n }\n throw error;\n }\n const quarantined = await fs.lstat(quarantinePath, { bigint: true });\n if (\n !quarantined.isDirectory() ||\n quarantined.dev !== identity.dev ||\n quarantined.ino !== identity.ino\n ) {\n throw new Error(\"OpenClaw Crabline recorder lock identity changed during recovery.\");\n }\n await syncParentDirectory(quarantinePath);\n await fs.rm(quarantinePath, { force: true, recursive: true });\n await syncParentDirectory(quarantinePath);\n}\n\nasync function reclaimOpenClawCrablineRecorderTemporaries(\n directory: SecuredPrivateDirectory,\n lock: Awaited<ReturnType<typeof acquireOpenClawCrablineProviderReadinessLock>>,\n): Promise<void> {\n const directoryPath = directory.directoryPath;\n await directory.assertIdentityAt();\n for (const entry of await fs.readdir(directoryPath, { withFileTypes: true })) {\n await directory.assertIdentityAt();\n const tombstoneBaseName = entry.isDirectory()\n ? openClawCrablineRecorderLockTombstoneBaseName(entry.name)\n : null;\n if (isOpenClawCrablineRecorderTemporaryLock(entry.name) || tombstoneBaseName !== null) {\n if (entry.isDirectory()) {\n await reclaimOpenClawCrablineRecorderTemporaryLock(\n directoryPath,\n entry.name,\n lock,\n tombstoneBaseName ?? entry.name,\n );\n }\n continue;\n }\n if (\n !isOpenClawCrablineRecorderTemporary(entry.name) ||\n (!entry.isFile() && !entry.isSymbolicLink())\n ) {\n continue;\n }\n await lock.assertOwned();\n const temporaryPath = path.join(directoryPath, entry.name);\n await fs.rm(temporaryPath, { force: true });\n await syncParentDirectory(temporaryPath);\n await directory.assertIdentityAt();\n }\n await directory.assertIdentityAt();\n}\n\ntype RecorderSnapshotIdentity = {\n device: bigint;\n inode: bigint;\n userId: bigint;\n};\n\nfunction assertOwnedRecorderStats(\n stats: BigIntStats,\n expected?: RecorderSnapshotIdentity,\n): RecorderSnapshotIdentity {\n const currentUserId = process.geteuid?.();\n if (\n !stats.isFile() ||\n stats.nlink !== 1n ||\n stats.ino <= 0n ||\n (currentUserId !== undefined && stats.uid !== BigInt(currentUserId)) ||\n (expected !== undefined &&\n (stats.dev !== expected.device ||\n stats.ino !== expected.inode ||\n stats.uid !== expected.userId))\n ) {\n throw new Error(\"OpenClaw Crabline recorder snapshot identity is invalid.\");\n }\n return {\n device: stats.dev,\n inode: stats.ino,\n userId: stats.uid,\n };\n}\n\nasync function readOwnedRecorderSnapshot(\n recorderPath: string,\n directory: SecuredPrivateDirectory,\n): Promise<{ contents: string; identity: RecorderSnapshotIdentity }> {\n await directory.assertIdentityAt();\n const handle = await fs.open(recorderPath, \"r\");\n try {\n const identity = assertOwnedRecorderStats(await handle.stat({ bigint: true }));\n assertOwnedRecorderStats(await fs.lstat(recorderPath, { bigint: true }), identity);\n const contents = await handle.readFile(\"utf8\");\n await directory.assertIdentityAt();\n assertOwnedRecorderStats(await fs.lstat(recorderPath, { bigint: true }), identity);\n return { contents, identity };\n } finally {\n await handle.close();\n }\n}\n\nasync function removeOwnedRecorderTemporary(params: {\n directory: SecuredPrivateDirectory;\n identity?: RecorderSnapshotIdentity;\n recorderPath: string;\n syncParent: (filePath: string) => Promise<void>;\n}): Promise<void> {\n await params.directory.assertIdentityAt();\n let stats: BigIntStats;\n try {\n stats = await fs.lstat(params.recorderPath, { bigint: true });\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n await params.syncParent(params.recorderPath);\n return;\n }\n throw error;\n }\n assertOwnedRecorderStats(stats, params.identity);\n await fs.rm(params.recorderPath);\n await params.directory.assertIdentityAt();\n await params.syncParent(params.recorderPath);\n}\n\nfunction createOpenClawCrablineProviderAdapter(\n manifest: CrablineServerManifest,\n): OpenClawCrablineProviderAdapter {\n const bridge = OPENCLAW_CRABLINE_PROVIDER_BRIDGE_LIST.find(\n (candidate) => candidate.provider === manifest.provider,\n );\n if (bridge) {\n const adapter = bridge.createAdapterFromManifest(manifest);\n return {\n ...adapter,\n createOutboundFromRecorderEvent: (params) =>\n isAcceptedOpenClawCrablineOutbound({\n event: params.event,\n manifest,\n })\n ? adapter.createOutboundFromRecorderEvent(params)\n : null,\n probe: () =>\n runOpenClawCrablineProviderProbe(manifest.provider, (signal) => adapter.probe(signal)),\n };\n }\n throw new Error(\"Unsupported OpenClaw provider binding.\");\n}\n\nexport function resolveOpenClawCrablineChannel(input?: string | null): CrablineServerChannel {\n const channel =\n input === undefined || input === null\n ? OPENCLAW_CRABLINE_DEFAULT_CHANNEL\n : input.trim().toLowerCase();\n if (isCrablineServerChannel(channel)) {\n return channel;\n }\n throw new Error(\n `--channel must be one of ${CRABLINE_SERVER_CHANNELS.join(\", \")} for --channel-driver crabline, got \"${input}\".`,\n );\n}\n\nexport function resolveOpenClawCrablineChannelDriverSelection(params: {\n channel?: string | null;\n}): OpenClawCrablineChannelDriverSelection & {\n providerReadinessArtifactPath: typeof OPENCLAW_CRABLINE_PROVIDER_READINESS_PATH;\n} {\n return {\n channel: resolveOpenClawCrablineChannel(params.channel),\n channelDriver: \"crabline\",\n capabilityMatrixPath: OPENCLAW_CRABLINE_CHANNEL_CAPABILITY_MATRIX_PATH,\n providerReadinessArtifactPath: OPENCLAW_CRABLINE_PROVIDER_READINESS_PATH,\n };\n}\n\nexport async function probeOpenClawCrablineProvider(\n manifest: CrablineServerManifest,\n): Promise<unknown> {\n return await createOpenClawCrablineProviderAdapter(manifest).probe();\n}\n\nexport function createOpenClawCrablineProviderBinding(\n manifest: CrablineServerManifest,\n): OpenClawCrablineGatewayBinding {\n return createOpenClawCrablineProviderAdapter(manifest).createBinding();\n}\n\nexport function createOpenClawCrablineAgentDelivery(params: {\n manifest: CrablineServerManifest;\n target: string;\n}): OpenClawCrablineAgentDelivery {\n return createOpenClawCrablineProviderAdapter(params.manifest).createAgentDelivery(\n parseQaTarget(params.target),\n );\n}\n\nexport function createOpenClawCrablineInbound(params: {\n input: OpenClawCrablineInboundInput;\n manifest: CrablineServerManifest;\n}): OpenClawCrablineInbound {\n return createOpenClawCrablineProviderAdapter(params.manifest).createInbound(params.input);\n}\n\nexport function createOpenClawCrablineOutboundFromRecorderEvent(params: {\n event: unknown;\n manifest: CrablineServerManifest;\n targetByProviderTarget: ReadonlyMap<string, string>;\n}): OpenClawCrablineOutboundMessage | null {\n return createOpenClawCrablineProviderAdapter(params.manifest).createOutboundFromRecorderEvent({\n event: params.event,\n targetByProviderTarget: params.targetByProviderTarget,\n });\n}\n\nexport async function startOpenClawCrablineAdapter(\n params: StartOpenClawCrablineAdapterParams,\n dependencies: {\n createProviderAdapter?: typeof createOpenClawCrablineProviderAdapter;\n startServer?: (params: StartCrablineServerParams) => Promise<StartedCrablineServer>;\n } = {},\n): Promise<StartedOpenClawCrablineAdapter> {\n const server: StartedCrablineServer = await (dependencies.startServer ?? startCrablineServer)({\n channel: params.channel,\n onEvent: params.onEvent,\n recorderPath: params.recorderPath,\n } as StartCrablineServerParams);\n try {\n const providerAdapter = (\n dependencies.createProviderAdapter ?? createOpenClawCrablineProviderAdapter\n )(server.manifest);\n const binding = providerAdapter.createBinding();\n return {\n ...binding,\n close: server.close,\n createGatewayConfig: (openclawConfig = params.openclawConfig ?? {}) =>\n binding.createGatewayConfig(openclawConfig),\n createAgentDelivery: ({ target }) =>\n providerAdapter.createAgentDelivery(parseQaTarget(target)),\n createInbound: ({ input }) => providerAdapter.createInbound(input),\n createOutboundFromRecorderEvent: ({ event, targetByProviderTarget }) =>\n providerAdapter.createOutboundFromRecorderEvent({\n event,\n targetByProviderTarget,\n }),\n manifest: server.manifest,\n probe: () => providerAdapter.probe(),\n };\n } catch (error) {\n try {\n await server.close();\n } catch (closeError) {\n const aggregateError = new AggregateError(\n [error, closeError],\n \"OpenClaw Crabline adapter startup failed.\",\n );\n aggregateError.cause = error;\n throw aggregateError;\n }\n throw error;\n }\n}\n\ntype ProviderReadinessDependencies = {\n acquireLock?: typeof acquireOpenClawCrablineProviderReadinessLock;\n publishGeneration?: typeof publishOpenClawCrablineArtifactGeneration;\n releaseLock?: typeof releaseOpenClawCrablineProviderReadinessLock;\n startAdapter?: typeof startOpenClawCrablineAdapter;\n syncParent?: typeof syncParentDirectory;\n};\n\nfunction attachOpenClawCrablineProbeCleanupFailure(\n probeFailure: Error,\n cleanupError: unknown,\n): void {\n const existingCause = probeFailure.cause;\n try {\n Object.defineProperty(probeFailure, \"cause\", {\n configurable: true,\n value:\n existingCause === undefined\n ? cleanupError\n : new AggregateError(\n [existingCause, cleanupError],\n \"OpenClaw Crabline provider probe cleanup also failed.\",\n ),\n });\n } catch {\n // Some provider errors are frozen; preserving the primary failure is authoritative.\n }\n}\n\nasync function waitForOpenClawCrablineProbeCleanup(probeSettlement: Promise<void>): Promise<void> {\n let timeout: ReturnType<typeof setTimeout> | undefined;\n try {\n await Promise.race([\n probeSettlement,\n new Promise<void>((resolve) => {\n timeout = setTimeout(resolve, OPENCLAW_CRABLINE_PROVIDER_PROBE_CLEANUP_GRACE_MS);\n }),\n ]);\n } finally {\n if (timeout) {\n clearTimeout(timeout);\n }\n }\n}\n\nexport function runOpenClawCrablineProviderReadiness(params: {\n outputDir: string;\n selection: OpenClawCrablineChannelDriverSelection;\n}): Promise<OpenClawCrablineProviderReadinessResult>;\nexport async function runOpenClawCrablineProviderReadiness(\n params: {\n outputDir: string;\n selection: OpenClawCrablineChannelDriverSelection;\n },\n dependencies: ProviderReadinessDependencies = {},\n): Promise<OpenClawCrablineProviderReadinessResult> {\n const outputDir = path.resolve(params.outputDir);\n const releaseLock = dependencies.releaseLock ?? releaseOpenClawCrablineProviderReadinessLock;\n const syncRecorderParent = dependencies.syncParent ?? syncParentDirectory;\n const providerReadinessLock = await (\n dependencies.acquireLock ?? acquireOpenClawCrablineProviderReadinessLock\n )({\n channel: params.selection.channel,\n outputDir,\n });\n let outcome:\n | { committed: false; error: unknown }\n | { committed: true; result: OpenClawCrablineProviderReadinessResult };\n let recorderDirectory: SecuredPrivateDirectory | undefined;\n let recorderIdentity: RecorderSnapshotIdentity | undefined;\n let recorderPath: string | undefined;\n\n try {\n const artifactsDirectory = await securePrivateDirectory(path.join(outputDir, \"artifacts\"));\n recorderDirectory = await securePrivateDirectory(\n path.join(artifactsDirectory.directoryPath, \"crabline\"),\n );\n await artifactsDirectory.assertIdentityAt();\n await recorderDirectory.assertIdentityAt();\n await reclaimOpenClawCrablineRecorderTemporaries(recorderDirectory, providerReadinessLock);\n recorderPath = path.join(\n recorderDirectory.directoryPath,\n `.${params.selection.channel}-provider-server.${randomUUID()}.jsonl.tmp`,\n );\n const adapter = await (dependencies.startAdapter ?? startOpenClawCrablineAdapter)({\n channel: params.selection.channel,\n openclawConfig: {},\n recorderPath,\n });\n let probe: unknown;\n let probeFailed = false;\n let probeFailure: unknown;\n let probeSettlement: Promise<void> | undefined;\n try {\n probe = await adapter.probe();\n } catch (error) {\n probeFailed = true;\n probeFailure = error;\n probeSettlement = getUnsettledOpenClawCrablineProviderProbe(error);\n }\n if (probeSettlement) {\n await waitForOpenClawCrablineProbeCleanup(probeSettlement);\n try {\n await adapter.close();\n } catch (cleanupError) {\n if (probeFailure instanceof Error) {\n attachOpenClawCrablineProbeCleanupFailure(probeFailure, cleanupError);\n } else {\n const combinedError = new Error(\n \"OpenClaw Crabline provider probe and cleanup both failed.\",\n { cause: cleanupError },\n );\n Object.defineProperty(combinedError, \"errors\", {\n value: [probeFailure, cleanupError],\n });\n throw combinedError;\n }\n }\n } else {\n try {\n await adapter.close();\n } catch (cleanupError) {\n if (!probeFailed) {\n throw cleanupError;\n }\n if (probeFailure instanceof Error) {\n attachOpenClawCrablineProbeCleanupFailure(probeFailure, cleanupError);\n throw probeFailure;\n }\n const combinedError = new Error(\n \"OpenClaw Crabline provider probe and cleanup both failed.\",\n {\n cause: cleanupError,\n },\n );\n Object.defineProperty(combinedError, \"errors\", {\n value: [probeFailure, cleanupError],\n });\n throw combinedError;\n }\n }\n if (probeFailed) {\n throw probeFailure;\n }\n const recorderSnapshot = await readOwnedRecorderSnapshot(recorderPath, recorderDirectory);\n recorderIdentity = recorderSnapshot.identity;\n const recorderSnapshotContents = recorderSnapshot.contents;\n assertOpenClawCrablineRecorderEvidence(recorderSnapshotContents, adapter.manifest);\n\n const capabilityReport = {\n result: {\n driver: \"crabline\",\n selectedChannel: params.selection.channel,\n supportedChannels: [...CRABLINE_SERVER_CHANNELS],\n },\n };\n const providerReadiness = {\n result: {\n ok: true,\n proof: \"provider-api-probe\",\n ready: true,\n probe,\n provider: adapter.manifest.provider,\n endpoints: adapter.manifest.endpoints,\n recorderPath: path.relative(outputDir, adapter.manifest.recorderPath),\n },\n };\n const generation = await (\n dependencies.publishGeneration ?? publishOpenClawCrablineArtifactGeneration\n )({\n capabilityReport,\n lock: providerReadinessLock,\n manifest: adapter.manifest,\n outputDir,\n recorderSnapshot: {\n contents: recorderSnapshotContents,\n fileName: `${params.selection.channel}-provider-server.jsonl`,\n },\n selection: params.selection,\n providerReadiness,\n });\n let recorderCleanupWarning: string | undefined;\n try {\n await removeOwnedRecorderTemporary({\n directory: recorderDirectory,\n identity: recorderIdentity,\n recorderPath,\n syncParent: syncRecorderParent,\n });\n recorderPath = undefined;\n } catch (error) {\n const detail = error instanceof Error ? error.message : String(error);\n recorderCleanupWarning = `OpenClaw Crabline recorder snapshot committed but temporary cleanup failed: ${detail}`;\n }\n outcome = {\n committed: true,\n result: {\n artifactPointerPath: generation.pointerPath,\n capabilityReport,\n capabilityMatrixPath: generation.capabilityMatrixPath,\n generation: generation.generation,\n manifestPath: generation.manifestPath,\n providerReadiness: generation.providerReadiness,\n providerReadinessArtifactPath: generation.providerReadinessArtifactPath,\n ...(generation.warnings || recorderCleanupWarning\n ? {\n warnings: [\n ...(generation.warnings ?? []),\n ...(recorderCleanupWarning ? [recorderCleanupWarning] : []),\n ],\n }\n : {}),\n },\n };\n } catch (error) {\n let primaryError = error;\n if (recorderPath && recorderDirectory) {\n try {\n await removeOwnedRecorderTemporary({\n directory: recorderDirectory,\n ...(recorderIdentity ? { identity: recorderIdentity } : {}),\n recorderPath,\n syncParent: syncRecorderParent,\n });\n recorderPath = undefined;\n } catch (cleanupError) {\n if (primaryError instanceof Error) {\n const existingCause = primaryError.cause;\n try {\n Object.defineProperty(primaryError, \"cause\", {\n configurable: true,\n value:\n existingCause === undefined\n ? cleanupError\n : new AggregateError(\n [existingCause, cleanupError],\n \"OpenClaw Crabline readiness failure cleanup also failed.\",\n ),\n });\n } catch {\n // Frozen failures remain authoritative even if temporary cleanup also fails.\n }\n } else {\n const combinedError = new Error(\n \"OpenClaw Crabline readiness and temporary cleanup both failed.\",\n { cause: cleanupError },\n );\n Object.defineProperty(combinedError, \"errors\", {\n value: [primaryError, cleanupError],\n });\n primaryError = combinedError;\n }\n }\n }\n outcome = { committed: false, error: primaryError };\n }\n\n try {\n await releaseLock(providerReadinessLock);\n } catch (cleanupError) {\n // The pointer switch is authoritative; lock removal cannot roll it back.\n if (!outcome.committed) {\n if (outcome.error instanceof Error) {\n const existingCause = outcome.error.cause;\n try {\n Object.defineProperty(outcome.error, \"cause\", {\n configurable: true,\n value:\n existingCause === undefined\n ? cleanupError\n : new AggregateError(\n [existingCause, cleanupError],\n \"OpenClaw Crabline provider readiness failure cleanup also failed.\",\n ),\n });\n } catch {\n // Some failures are frozen; preserving the primary error is authoritative.\n }\n throw outcome.error;\n }\n const combinedError = new Error(\n \"OpenClaw Crabline provider readiness and lock cleanup both failed.\",\n {\n cause: cleanupError,\n },\n );\n Object.defineProperty(combinedError, \"errors\", {\n value: [outcome.error, cleanupError],\n });\n throw combinedError;\n }\n const detail = cleanupError instanceof Error ? cleanupError.message : String(cleanupError);\n outcome.result = {\n ...outcome.result,\n warnings: [\n ...(outcome.result.warnings ?? []),\n `OpenClaw Crabline provider readiness committed but lock cleanup failed: ${detail}`,\n ],\n };\n }\n\n if (!outcome.committed) {\n throw outcome.error;\n }\n return outcome.result;\n}\n\nexport function createOpenClawCrablineChannelReportNotes(\n selection: OpenClawCrablineChannelDriverSelection | null | undefined,\n): string[] {\n if (!selection) {\n return [];\n }\n\n return [\n `Channel driver: ${selection.channelDriver} local provider for ${selection.channel}.`,\n `Channel artifact pointer: ${OPENCLAW_CRABLINE_ARTIFACT_POINTER_PATH}.`,\n `Generation capability filename: ${selection.capabilityMatrixPath}.`,\n `Generation provider-readiness filename: ${selection.providerReadinessArtifactPath}.`,\n \"Crabline verifies the local provider API is ready; OpenClaw channel behavior is proven separately by QA scenarios that run the real channel adapter.\",\n ];\n}\n"]}
1
+ {"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../../src/openclaw.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport type { BigIntStats } from \"node:fs\";\nimport {\n CRABLINE_SERVER_CHANNELS,\n isCrablineServerChannel,\n startCrablineServer,\n type CrablineServerChannel,\n type CrablineServerManifest,\n type StartCrablineServerParams,\n type StartedCrablineServer,\n} from \"./servers/index.js\";\nimport { SLACK_OPENCLAW_CRABLINE_PROVIDER_BRIDGE } from \"./openclaw/bridges/slack.js\";\nimport { DISCORD_OPENCLAW_CRABLINE_PROVIDER_BRIDGE } from \"./openclaw/bridges/discord.js\";\nimport { MATTERMOST_OPENCLAW_CRABLINE_PROVIDER_BRIDGE } from \"./openclaw/bridges/mattermost.js\";\nimport { MATRIX_OPENCLAW_CRABLINE_PROVIDER_BRIDGE } from \"./openclaw/bridges/matrix.js\";\nimport { SIGNAL_OPENCLAW_CRABLINE_PROVIDER_BRIDGE } from \"./openclaw/bridges/signal.js\";\nimport { TELEGRAM_OPENCLAW_CRABLINE_PROVIDER_BRIDGE } from \"./openclaw/bridges/telegram.js\";\nimport { WHATSAPP_OPENCLAW_CRABLINE_PROVIDER_BRIDGE } from \"./openclaw/bridges/whatsapp.js\";\nimport { ZALO_OPENCLAW_CRABLINE_PROVIDER_BRIDGE } from \"./openclaw/bridges/zalo.js\";\nimport {\n OPENCLAW_CRABLINE_CHANNEL_CAPABILITY_MATRIX_PATH,\n OPENCLAW_CRABLINE_PROVIDER_READINESS_PATH,\n OPENCLAW_CRABLINE_DEFAULT_CHANNEL,\n OPENCLAW_CRABLINE_ARTIFACT_POINTER_PATH,\n OPENCLAW_CRABLINE_ARTIFACT_STORE_DIRECTORY,\n OPENCLAW_CRABLINE_MANIFEST_PATH,\n getUnsettledOpenClawCrablineProviderProbe,\n isRecord,\n parseQaDeliveryTarget,\n runOpenClawCrablineProviderProbe,\n correlateOpenClawCrablineOutboundObservation,\n type OpenClawCrablineChannelDriverSelection,\n type OpenClawCrablineCorrelatedAgentDelivery,\n type OpenClawCrablineProviderReadinessResult,\n type OpenClawCrablineGatewayBinding,\n type OpenClawCrablineInbound,\n type OpenClawCrablineInboundInput,\n type OpenClawCrablineOutboundMessage,\n type OpenClawCrablineOutboundObservation,\n type OpenClawCrablineProviderAdapter,\n type OpenClawCrablineProviderBridge,\n type OpenClawCrablineProviderBridgeRegistry,\n type StartedOpenClawCrablineCorrelatedAdapter,\n type StartOpenClawCrablineAdapterParams,\n} from \"./openclaw/shared.js\";\nimport { publishOpenClawCrablineArtifactGeneration } from \"./openclaw/artifact-generation.js\";\nimport { isAcceptedOpenClawCrablineOutbound } from \"./openclaw/outbound-contract.js\";\nimport {\n securePrivateDirectory,\n syncParentDirectory,\n type SecuredPrivateDirectory,\n} from \"./openclaw/private-file.js\";\nimport {\n acquireOpenClawCrablineProviderReadinessLock,\n releaseOpenClawCrablineProviderReadinessLock,\n} from \"./openclaw/provider-readiness-lock.js\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport {\n OPENCLAW_CRABLINE_ARTIFACT_POINTER_PATH,\n OPENCLAW_CRABLINE_ARTIFACT_STORE_DIRECTORY,\n OPENCLAW_CRABLINE_CHANNEL_CAPABILITY_MATRIX_PATH,\n OPENCLAW_CRABLINE_PROVIDER_READINESS_PATH,\n OPENCLAW_CRABLINE_DEFAULT_CHANNEL,\n OPENCLAW_CRABLINE_MANIFEST_PATH,\n};\nexport type {\n OpenClawCrablineAgentDelivery,\n OpenClawCrablineChannelDriverSelection,\n OpenClawCrablineCorrelatedAgentDelivery,\n OpenClawCrablineProviderReadinessResult,\n OpenClawCrablineConversation,\n OpenClawCrablineGatewayBinding,\n OpenClawCrablineInbound,\n OpenClawCrablineInboundInput,\n OpenClawCrablineOutboundMessage,\n OpenClawCrablineOutboundObservation,\n StartedOpenClawCrablineAdapter,\n StartedOpenClawCrablineCorrelatedAdapter,\n StartOpenClawCrablineAdapterParams,\n} from \"./openclaw/shared.js\";\n\nconst OPENCLAW_CRABLINE_PROVIDER_BRIDGES = {\n discord: DISCORD_OPENCLAW_CRABLINE_PROVIDER_BRIDGE,\n mattermost: MATTERMOST_OPENCLAW_CRABLINE_PROVIDER_BRIDGE,\n matrix: MATRIX_OPENCLAW_CRABLINE_PROVIDER_BRIDGE,\n signal: SIGNAL_OPENCLAW_CRABLINE_PROVIDER_BRIDGE,\n slack: SLACK_OPENCLAW_CRABLINE_PROVIDER_BRIDGE,\n telegram: TELEGRAM_OPENCLAW_CRABLINE_PROVIDER_BRIDGE,\n whatsapp: WHATSAPP_OPENCLAW_CRABLINE_PROVIDER_BRIDGE,\n zalo: ZALO_OPENCLAW_CRABLINE_PROVIDER_BRIDGE,\n} satisfies OpenClawCrablineProviderBridgeRegistry;\n\nconst OPENCLAW_CRABLINE_PROVIDER_BRIDGE_LIST = Object.values(\n OPENCLAW_CRABLINE_PROVIDER_BRIDGES,\n) as readonly OpenClawCrablineProviderBridge[];\nconst RECORDER_TEMP_NAME_PATTERN =\n /^\\.([a-z]+)-provider-server\\.[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\.jsonl\\.tmp$/iu;\nconst RECORDER_LOCK_REMOVAL_TOMBSTONE_PATTERN =\n /^\\.(.+)\\.\\d+\\.[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\.remove$/iu;\nconst OPENCLAW_CRABLINE_PROVIDER_PROBE_CLEANUP_GRACE_MS = 250;\n\nfunction isOpenClawCrablineRecorderTemporary(name: string): boolean {\n const channel = RECORDER_TEMP_NAME_PATTERN.exec(name)?.[1]?.toLowerCase();\n return channel !== undefined && isCrablineServerChannel(channel);\n}\n\nfunction hasStringRecordValues(value: unknown): value is Record<string, string> {\n return isRecord(value) && Object.values(value).every((entry) => typeof entry === \"string\");\n}\n\ntype OpenClawCrablineRecorderEvent = {\n accepted: true;\n at: string;\n method: string;\n path: string;\n query: Record<string, string>;\n type: \"admin\" | \"api\";\n};\n\nfunction isOpenClawCrablineRecorderEvent(value: unknown): value is OpenClawCrablineRecorderEvent {\n return (\n isRecord(value) &&\n value.accepted === true &&\n typeof value.at === \"string\" &&\n Number.isFinite(Date.parse(value.at)) &&\n typeof value.method === \"string\" &&\n value.method.length > 0 &&\n typeof value.path === \"string\" &&\n value.path.startsWith(\"/\") &&\n hasStringRecordValues(value.query) &&\n (value.type === \"admin\" || value.type === \"api\")\n );\n}\n\nfunction openClawCrablineProviderProbeRequest(\n manifest: CrablineServerManifest,\n): Pick<OpenClawCrablineRecorderEvent, \"method\" | \"path\"> {\n switch (manifest.provider) {\n case \"discord\":\n return {\n method: \"GET\",\n path: new URL(`${manifest.endpoints.apiRoot}/v10/users/@me`).pathname,\n };\n case \"mattermost\":\n return {\n method: \"GET\",\n path: new URL(`${manifest.endpoints.apiRoot}/users/me`).pathname,\n };\n case \"matrix\":\n return {\n method: \"GET\",\n path: new URL(`${manifest.endpoints.clientApiRoot}/account/whoami`).pathname,\n };\n case \"signal\":\n return {\n method: \"GET\",\n path: new URL(\"/api/v1/check\", manifest.baseUrl).pathname,\n };\n case \"slack\":\n return {\n method: \"POST\",\n path: new URL(\"auth.test\", manifest.endpoints.apiRoot).pathname,\n };\n case \"telegram\":\n return { method: \"GET\", path: \"/bot<redacted>/getMe\" };\n case \"whatsapp\":\n return {\n method: \"GET\",\n path: new URL(manifest.endpoints.phoneNumberUrl).pathname,\n };\n case \"zalo\":\n return { method: \"POST\", path: \"/bot<redacted>/getMe\" };\n }\n}\n\nfunction assertOpenClawCrablineRecorderEvidence(\n contents: string,\n manifest: CrablineServerManifest,\n): void {\n const expectedRequest = openClawCrablineProviderProbeRequest(manifest);\n let recorderEvidence = false;\n for (const line of contents.split(/\\r?\\n/u)) {\n if (!line.trim()) {\n continue;\n }\n let event: unknown;\n try {\n event = JSON.parse(line);\n } catch (error) {\n throw new Error(\n \"OpenClaw Crabline provider probe produced no valid JSONL recorder evidence.\",\n { cause: error },\n );\n }\n if (!isOpenClawCrablineRecorderEvent(event)) {\n throw new Error(\n \"OpenClaw Crabline provider probe produced no valid JSONL recorder evidence.\",\n );\n }\n if (\n event.type === \"api\" &&\n event.method === expectedRequest.method &&\n event.path === expectedRequest.path\n ) {\n recorderEvidence = true;\n }\n }\n if (!recorderEvidence) {\n throw new Error(\"OpenClaw Crabline provider probe produced no valid JSONL recorder evidence.\");\n }\n}\n\nfunction isOpenClawCrablineRecorderTemporaryLock(name: string): boolean {\n return name.endsWith(\".lock\") && isOpenClawCrablineRecorderTemporary(name.slice(0, -5));\n}\n\nfunction openClawCrablineRecorderLockTombstoneBaseName(name: string): string | null {\n const originalName = RECORDER_LOCK_REMOVAL_TOMBSTONE_PATTERN.exec(name)?.[1];\n return originalName !== undefined && isOpenClawCrablineRecorderTemporaryLock(originalName)\n ? originalName\n : null;\n}\n\nasync function reclaimOpenClawCrablineRecorderTemporaryLock(\n directoryPath: string,\n name: string,\n lock: Awaited<ReturnType<typeof acquireOpenClawCrablineProviderReadinessLock>>,\n quarantineBaseName = name,\n): Promise<void> {\n const lockPath = path.join(directoryPath, name);\n let identity: BigIntStats;\n try {\n identity = await fs.lstat(lockPath, { bigint: true });\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return;\n }\n throw error;\n }\n if (!identity.isDirectory()) {\n return;\n }\n const currentUserId = process.geteuid?.();\n if (currentUserId !== undefined && identity.uid !== BigInt(currentUserId)) {\n return;\n }\n\n const quarantinePath = path.join(\n directoryPath,\n `.${quarantineBaseName}.${process.pid}.${randomUUID()}.remove`,\n );\n await lock.assertOwned();\n try {\n await fs.rename(lockPath, quarantinePath);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return;\n }\n throw error;\n }\n const quarantined = await fs.lstat(quarantinePath, { bigint: true });\n if (\n !quarantined.isDirectory() ||\n quarantined.dev !== identity.dev ||\n quarantined.ino !== identity.ino\n ) {\n throw new Error(\"OpenClaw Crabline recorder lock identity changed during recovery.\");\n }\n await syncParentDirectory(quarantinePath);\n await fs.rm(quarantinePath, { force: true, recursive: true });\n await syncParentDirectory(quarantinePath);\n}\n\nasync function reclaimOpenClawCrablineRecorderTemporaries(\n directory: SecuredPrivateDirectory,\n lock: Awaited<ReturnType<typeof acquireOpenClawCrablineProviderReadinessLock>>,\n): Promise<void> {\n const directoryPath = directory.directoryPath;\n await directory.assertIdentityAt();\n for (const entry of await fs.readdir(directoryPath, { withFileTypes: true })) {\n await directory.assertIdentityAt();\n const tombstoneBaseName = entry.isDirectory()\n ? openClawCrablineRecorderLockTombstoneBaseName(entry.name)\n : null;\n if (isOpenClawCrablineRecorderTemporaryLock(entry.name) || tombstoneBaseName !== null) {\n if (entry.isDirectory()) {\n await reclaimOpenClawCrablineRecorderTemporaryLock(\n directoryPath,\n entry.name,\n lock,\n tombstoneBaseName ?? entry.name,\n );\n }\n continue;\n }\n if (\n !isOpenClawCrablineRecorderTemporary(entry.name) ||\n (!entry.isFile() && !entry.isSymbolicLink())\n ) {\n continue;\n }\n await lock.assertOwned();\n const temporaryPath = path.join(directoryPath, entry.name);\n await fs.rm(temporaryPath, { force: true });\n await syncParentDirectory(temporaryPath);\n await directory.assertIdentityAt();\n }\n await directory.assertIdentityAt();\n}\n\ntype RecorderSnapshotIdentity = {\n device: bigint;\n inode: bigint;\n userId: bigint;\n};\n\nfunction assertOwnedRecorderStats(\n stats: BigIntStats,\n expected?: RecorderSnapshotIdentity,\n): RecorderSnapshotIdentity {\n const currentUserId = process.geteuid?.();\n if (\n !stats.isFile() ||\n stats.nlink !== 1n ||\n stats.ino <= 0n ||\n (currentUserId !== undefined && stats.uid !== BigInt(currentUserId)) ||\n (expected !== undefined &&\n (stats.dev !== expected.device ||\n stats.ino !== expected.inode ||\n stats.uid !== expected.userId))\n ) {\n throw new Error(\"OpenClaw Crabline recorder snapshot identity is invalid.\");\n }\n return {\n device: stats.dev,\n inode: stats.ino,\n userId: stats.uid,\n };\n}\n\nasync function readOwnedRecorderSnapshot(\n recorderPath: string,\n directory: SecuredPrivateDirectory,\n): Promise<{ contents: string; identity: RecorderSnapshotIdentity }> {\n await directory.assertIdentityAt();\n const handle = await fs.open(recorderPath, \"r\");\n try {\n const identity = assertOwnedRecorderStats(await handle.stat({ bigint: true }));\n assertOwnedRecorderStats(await fs.lstat(recorderPath, { bigint: true }), identity);\n const contents = await handle.readFile(\"utf8\");\n await directory.assertIdentityAt();\n assertOwnedRecorderStats(await fs.lstat(recorderPath, { bigint: true }), identity);\n return { contents, identity };\n } finally {\n await handle.close();\n }\n}\n\nasync function removeOwnedRecorderTemporary(params: {\n directory: SecuredPrivateDirectory;\n identity?: RecorderSnapshotIdentity;\n recorderPath: string;\n syncParent: (filePath: string) => Promise<void>;\n}): Promise<void> {\n await params.directory.assertIdentityAt();\n let stats: BigIntStats;\n try {\n stats = await fs.lstat(params.recorderPath, { bigint: true });\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n await params.syncParent(params.recorderPath);\n return;\n }\n throw error;\n }\n assertOwnedRecorderStats(stats, params.identity);\n await fs.rm(params.recorderPath);\n await params.directory.assertIdentityAt();\n await params.syncParent(params.recorderPath);\n}\n\nfunction createOpenClawCrablineProviderAdapter(\n manifest: CrablineServerManifest,\n): OpenClawCrablineProviderAdapter {\n const bridge = OPENCLAW_CRABLINE_PROVIDER_BRIDGE_LIST.find(\n (candidate) => candidate.provider === manifest.provider,\n );\n if (bridge) {\n const adapter = bridge.createAdapterFromManifest(manifest);\n return {\n ...adapter,\n createOutboundObservation: (params) =>\n isAcceptedOpenClawCrablineOutbound({\n event: params.event,\n manifest,\n })\n ? adapter.createOutboundObservation(params)\n : null,\n probe: () =>\n runOpenClawCrablineProviderProbe(manifest.provider, (signal) => adapter.probe(signal)),\n };\n }\n throw new Error(\"Unsupported OpenClaw provider binding.\");\n}\n\nexport function resolveOpenClawCrablineChannel(input?: string | null): CrablineServerChannel {\n const channel =\n input === undefined || input === null\n ? OPENCLAW_CRABLINE_DEFAULT_CHANNEL\n : input.trim().toLowerCase();\n if (isCrablineServerChannel(channel)) {\n return channel;\n }\n throw new Error(\n `--channel must be one of ${CRABLINE_SERVER_CHANNELS.join(\", \")} for --channel-driver crabline, got \"${input}\".`,\n );\n}\n\nexport function resolveOpenClawCrablineChannelDriverSelection(params: {\n channel?: string | null;\n}): OpenClawCrablineChannelDriverSelection & {\n providerReadinessArtifactPath: typeof OPENCLAW_CRABLINE_PROVIDER_READINESS_PATH;\n} {\n return {\n channel: resolveOpenClawCrablineChannel(params.channel),\n channelDriver: \"crabline\",\n capabilityMatrixPath: OPENCLAW_CRABLINE_CHANNEL_CAPABILITY_MATRIX_PATH,\n providerReadinessArtifactPath: OPENCLAW_CRABLINE_PROVIDER_READINESS_PATH,\n };\n}\n\nexport async function probeOpenClawCrablineProvider(\n manifest: CrablineServerManifest,\n): Promise<unknown> {\n return await createOpenClawCrablineProviderAdapter(manifest).probe();\n}\n\nexport function createOpenClawCrablineProviderBinding(\n manifest: CrablineServerManifest,\n): OpenClawCrablineGatewayBinding {\n return createOpenClawCrablineProviderAdapter(manifest).createBinding();\n}\n\nexport function createOpenClawCrablineAgentDelivery(params: {\n manifest: CrablineServerManifest;\n target: string;\n threadId?: string | undefined;\n}): OpenClawCrablineCorrelatedAgentDelivery {\n return createOpenClawCrablineProviderAdapter(params.manifest).createAgentDelivery(\n parseQaDeliveryTarget(params),\n );\n}\n\nexport function createOpenClawCrablineInbound(params: {\n input: OpenClawCrablineInboundInput;\n manifest: CrablineServerManifest;\n}): OpenClawCrablineInbound {\n return createOpenClawCrablineProviderAdapter(params.manifest).createInbound(params.input);\n}\n\n/** @deprecated Use createOpenClawCrablineOutboundObservation and correlate in the consumer. */\nexport function createOpenClawCrablineOutboundFromRecorderEvent(params: {\n event: unknown;\n manifest: CrablineServerManifest;\n targetByProviderTarget: ReadonlyMap<string, string>;\n}): OpenClawCrablineOutboundMessage | null {\n const observation = createOpenClawCrablineOutboundObservation({\n event: params.event,\n manifest: params.manifest,\n });\n return observation\n ? correlateOpenClawCrablineOutboundObservation({\n observation,\n targetByProviderTarget: params.targetByProviderTarget,\n })\n : null;\n}\n\nexport function createOpenClawCrablineOutboundObservation(params: {\n event: unknown;\n manifest: CrablineServerManifest;\n}): OpenClawCrablineOutboundObservation | null {\n return createOpenClawCrablineProviderAdapter(params.manifest).createOutboundObservation({\n event: params.event,\n });\n}\n\nexport async function startOpenClawCrablineAdapter(\n params: StartOpenClawCrablineAdapterParams,\n dependencies: {\n createProviderAdapter?: typeof createOpenClawCrablineProviderAdapter;\n startServer?: (params: StartCrablineServerParams) => Promise<StartedCrablineServer>;\n } = {},\n): Promise<StartedOpenClawCrablineCorrelatedAdapter> {\n const server: StartedCrablineServer = await (dependencies.startServer ?? startCrablineServer)({\n channel: params.channel,\n onEvent: params.onEvent,\n recorderPath: params.recorderPath,\n } as StartCrablineServerParams);\n try {\n const providerAdapter = (\n dependencies.createProviderAdapter ?? createOpenClawCrablineProviderAdapter\n )(server.manifest);\n const binding = providerAdapter.createBinding();\n return {\n ...binding,\n close: server.close,\n createGatewayConfig: (openclawConfig = params.openclawConfig ?? {}) =>\n binding.createGatewayConfig(openclawConfig),\n createAgentDelivery: ({ target, threadId }) =>\n providerAdapter.createAgentDelivery(parseQaDeliveryTarget({ target, threadId })),\n createInbound: ({ input }) => providerAdapter.createInbound(input),\n createOutboundObservation: ({ event }) =>\n providerAdapter.createOutboundObservation({ event }),\n createOutboundFromRecorderEvent: ({ event, targetByProviderTarget }) => {\n const observation = providerAdapter.createOutboundObservation({ event });\n return observation\n ? correlateOpenClawCrablineOutboundObservation({\n observation,\n targetByProviderTarget,\n })\n : null;\n },\n manifest: server.manifest,\n probe: () => providerAdapter.probe(),\n resolveInboundProviderTargetKey: ({ inbound, response }) =>\n providerAdapter.resolveInboundProviderTargetKey?.({ inbound, response }) ??\n inbound.providerTargetKey,\n };\n } catch (error) {\n try {\n await server.close();\n } catch (closeError) {\n const aggregateError = new AggregateError(\n [error, closeError],\n \"OpenClaw Crabline adapter startup failed.\",\n );\n aggregateError.cause = error;\n throw aggregateError;\n }\n throw error;\n }\n}\n\ntype ProviderReadinessDependencies = {\n acquireLock?: typeof acquireOpenClawCrablineProviderReadinessLock;\n publishGeneration?: typeof publishOpenClawCrablineArtifactGeneration;\n releaseLock?: typeof releaseOpenClawCrablineProviderReadinessLock;\n startAdapter?: typeof startOpenClawCrablineAdapter;\n syncParent?: typeof syncParentDirectory;\n};\n\nfunction attachOpenClawCrablineProbeCleanupFailure(\n probeFailure: Error,\n cleanupError: unknown,\n): void {\n const existingCause = probeFailure.cause;\n try {\n Object.defineProperty(probeFailure, \"cause\", {\n configurable: true,\n value:\n existingCause === undefined\n ? cleanupError\n : new AggregateError(\n [existingCause, cleanupError],\n \"OpenClaw Crabline provider probe cleanup also failed.\",\n ),\n });\n } catch {\n // Some provider errors are frozen; preserving the primary failure is authoritative.\n }\n}\n\nasync function waitForOpenClawCrablineProbeCleanup(probeSettlement: Promise<void>): Promise<void> {\n let timeout: ReturnType<typeof setTimeout> | undefined;\n try {\n await Promise.race([\n probeSettlement,\n new Promise<void>((resolve) => {\n timeout = setTimeout(resolve, OPENCLAW_CRABLINE_PROVIDER_PROBE_CLEANUP_GRACE_MS);\n }),\n ]);\n } finally {\n if (timeout) {\n clearTimeout(timeout);\n }\n }\n}\n\nexport function runOpenClawCrablineProviderReadiness(params: {\n outputDir: string;\n selection: OpenClawCrablineChannelDriverSelection;\n}): Promise<OpenClawCrablineProviderReadinessResult>;\nexport async function runOpenClawCrablineProviderReadiness(\n params: {\n outputDir: string;\n selection: OpenClawCrablineChannelDriverSelection;\n },\n dependencies: ProviderReadinessDependencies = {},\n): Promise<OpenClawCrablineProviderReadinessResult> {\n const outputDir = path.resolve(params.outputDir);\n const releaseLock = dependencies.releaseLock ?? releaseOpenClawCrablineProviderReadinessLock;\n const syncRecorderParent = dependencies.syncParent ?? syncParentDirectory;\n const providerReadinessLock = await (\n dependencies.acquireLock ?? acquireOpenClawCrablineProviderReadinessLock\n )({\n channel: params.selection.channel,\n outputDir,\n });\n let outcome:\n | { committed: false; error: unknown }\n | { committed: true; result: OpenClawCrablineProviderReadinessResult };\n let recorderDirectory: SecuredPrivateDirectory | undefined;\n let recorderIdentity: RecorderSnapshotIdentity | undefined;\n let recorderPath: string | undefined;\n\n try {\n const artifactsDirectory = await securePrivateDirectory(path.join(outputDir, \"artifacts\"));\n recorderDirectory = await securePrivateDirectory(\n path.join(artifactsDirectory.directoryPath, \"crabline\"),\n );\n await artifactsDirectory.assertIdentityAt();\n await recorderDirectory.assertIdentityAt();\n await reclaimOpenClawCrablineRecorderTemporaries(recorderDirectory, providerReadinessLock);\n recorderPath = path.join(\n recorderDirectory.directoryPath,\n `.${params.selection.channel}-provider-server.${randomUUID()}.jsonl.tmp`,\n );\n const adapter = await (dependencies.startAdapter ?? startOpenClawCrablineAdapter)({\n channel: params.selection.channel,\n openclawConfig: {},\n recorderPath,\n });\n let probe: unknown;\n let probeFailed = false;\n let probeFailure: unknown;\n let probeSettlement: Promise<void> | undefined;\n try {\n probe = await adapter.probe();\n } catch (error) {\n probeFailed = true;\n probeFailure = error;\n probeSettlement = getUnsettledOpenClawCrablineProviderProbe(error);\n }\n if (probeSettlement) {\n await waitForOpenClawCrablineProbeCleanup(probeSettlement);\n try {\n await adapter.close();\n } catch (cleanupError) {\n if (probeFailure instanceof Error) {\n attachOpenClawCrablineProbeCleanupFailure(probeFailure, cleanupError);\n } else {\n const combinedError = new Error(\n \"OpenClaw Crabline provider probe and cleanup both failed.\",\n { cause: cleanupError },\n );\n Object.defineProperty(combinedError, \"errors\", {\n value: [probeFailure, cleanupError],\n });\n throw combinedError;\n }\n }\n } else {\n try {\n await adapter.close();\n } catch (cleanupError) {\n if (!probeFailed) {\n throw cleanupError;\n }\n if (probeFailure instanceof Error) {\n attachOpenClawCrablineProbeCleanupFailure(probeFailure, cleanupError);\n throw probeFailure;\n }\n const combinedError = new Error(\n \"OpenClaw Crabline provider probe and cleanup both failed.\",\n {\n cause: cleanupError,\n },\n );\n Object.defineProperty(combinedError, \"errors\", {\n value: [probeFailure, cleanupError],\n });\n throw combinedError;\n }\n }\n if (probeFailed) {\n throw probeFailure;\n }\n const recorderSnapshot = await readOwnedRecorderSnapshot(recorderPath, recorderDirectory);\n recorderIdentity = recorderSnapshot.identity;\n const recorderSnapshotContents = recorderSnapshot.contents;\n assertOpenClawCrablineRecorderEvidence(recorderSnapshotContents, adapter.manifest);\n\n const capabilityReport = {\n result: {\n driver: \"crabline\",\n selectedChannel: params.selection.channel,\n supportedChannels: [...CRABLINE_SERVER_CHANNELS],\n },\n };\n const providerReadiness = {\n result: {\n ok: true,\n proof: \"provider-api-probe\",\n ready: true,\n probe,\n provider: adapter.manifest.provider,\n endpoints: adapter.manifest.endpoints,\n recorderPath: path.relative(outputDir, adapter.manifest.recorderPath),\n },\n };\n const generation = await (\n dependencies.publishGeneration ?? publishOpenClawCrablineArtifactGeneration\n )({\n capabilityReport,\n lock: providerReadinessLock,\n manifest: adapter.manifest,\n outputDir,\n recorderSnapshot: {\n contents: recorderSnapshotContents,\n fileName: `${params.selection.channel}-provider-server.jsonl`,\n },\n selection: params.selection,\n providerReadiness,\n });\n let recorderCleanupWarning: string | undefined;\n try {\n await removeOwnedRecorderTemporary({\n directory: recorderDirectory,\n identity: recorderIdentity,\n recorderPath,\n syncParent: syncRecorderParent,\n });\n recorderPath = undefined;\n } catch (error) {\n const detail = error instanceof Error ? error.message : String(error);\n recorderCleanupWarning = `OpenClaw Crabline recorder snapshot committed but temporary cleanup failed: ${detail}`;\n }\n outcome = {\n committed: true,\n result: {\n artifactPointerPath: generation.pointerPath,\n capabilityReport,\n capabilityMatrixPath: generation.capabilityMatrixPath,\n generation: generation.generation,\n manifestPath: generation.manifestPath,\n providerReadiness: generation.providerReadiness,\n providerReadinessArtifactPath: generation.providerReadinessArtifactPath,\n ...(generation.warnings || recorderCleanupWarning\n ? {\n warnings: [\n ...(generation.warnings ?? []),\n ...(recorderCleanupWarning ? [recorderCleanupWarning] : []),\n ],\n }\n : {}),\n },\n };\n } catch (error) {\n let primaryError = error;\n if (recorderPath && recorderDirectory) {\n try {\n await removeOwnedRecorderTemporary({\n directory: recorderDirectory,\n ...(recorderIdentity ? { identity: recorderIdentity } : {}),\n recorderPath,\n syncParent: syncRecorderParent,\n });\n recorderPath = undefined;\n } catch (cleanupError) {\n if (primaryError instanceof Error) {\n const existingCause = primaryError.cause;\n try {\n Object.defineProperty(primaryError, \"cause\", {\n configurable: true,\n value:\n existingCause === undefined\n ? cleanupError\n : new AggregateError(\n [existingCause, cleanupError],\n \"OpenClaw Crabline readiness failure cleanup also failed.\",\n ),\n });\n } catch {\n // Frozen failures remain authoritative even if temporary cleanup also fails.\n }\n } else {\n const combinedError = new Error(\n \"OpenClaw Crabline readiness and temporary cleanup both failed.\",\n { cause: cleanupError },\n );\n Object.defineProperty(combinedError, \"errors\", {\n value: [primaryError, cleanupError],\n });\n primaryError = combinedError;\n }\n }\n }\n outcome = { committed: false, error: primaryError };\n }\n\n try {\n await releaseLock(providerReadinessLock);\n } catch (cleanupError) {\n // The pointer switch is authoritative; lock removal cannot roll it back.\n if (!outcome.committed) {\n if (outcome.error instanceof Error) {\n const existingCause = outcome.error.cause;\n try {\n Object.defineProperty(outcome.error, \"cause\", {\n configurable: true,\n value:\n existingCause === undefined\n ? cleanupError\n : new AggregateError(\n [existingCause, cleanupError],\n \"OpenClaw Crabline provider readiness failure cleanup also failed.\",\n ),\n });\n } catch {\n // Some failures are frozen; preserving the primary error is authoritative.\n }\n throw outcome.error;\n }\n const combinedError = new Error(\n \"OpenClaw Crabline provider readiness and lock cleanup both failed.\",\n {\n cause: cleanupError,\n },\n );\n Object.defineProperty(combinedError, \"errors\", {\n value: [outcome.error, cleanupError],\n });\n throw combinedError;\n }\n const detail = cleanupError instanceof Error ? cleanupError.message : String(cleanupError);\n outcome.result = {\n ...outcome.result,\n warnings: [\n ...(outcome.result.warnings ?? []),\n `OpenClaw Crabline provider readiness committed but lock cleanup failed: ${detail}`,\n ],\n };\n }\n\n if (!outcome.committed) {\n throw outcome.error;\n }\n return outcome.result;\n}\n\nexport function createOpenClawCrablineChannelReportNotes(\n selection: OpenClawCrablineChannelDriverSelection | null | undefined,\n): string[] {\n if (!selection) {\n return [];\n }\n\n return [\n `Channel driver: ${selection.channelDriver} local provider for ${selection.channel}.`,\n `Channel artifact pointer: ${OPENCLAW_CRABLINE_ARTIFACT_POINTER_PATH}.`,\n `Generation capability filename: ${selection.capabilityMatrixPath}.`,\n `Generation provider-readiness filename: ${selection.providerReadinessArtifactPath}.`,\n \"Crabline verifies the local provider API is ready; OpenClaw channel behavior is proven separately by QA scenarios that run the real channel adapter.\",\n ];\n}\n"]}
@@ -30,6 +30,9 @@ function resolvePositiveLimit(value, name, fallback) {
30
30
  export function mattermostId(value) {
31
31
  return createHash("sha256").update(value).digest("hex").slice(0, 26);
32
32
  }
33
+ function mattermostDirectChannelName(firstUserId, secondUserId) {
34
+ return [firstUserId, secondUserId].sort().join("__");
35
+ }
33
36
  async function appendEvent(state, event, committed = false) {
34
37
  const params = { event, onEvent: state.onEvent, recorderPath: state.recorderPath };
35
38
  await (committed ? recordCommittedServerEvent(params) : recordServerEvent(params));
@@ -271,6 +274,9 @@ function nextDirectChannelId(state, seed) {
271
274
  } while (state.channels.has(channelId));
272
275
  return channelId;
273
276
  }
277
+ function findDirectChannel(state, channelName) {
278
+ return [...state.channels.values()].find((channel) => channel.type === "D" && channel.name === channelName);
279
+ }
274
280
  function webSocketEventTooLargeResponse() {
275
281
  return mattermostError("WebSocket event is too large", 413);
276
282
  }
@@ -280,13 +286,13 @@ function handleAdminInbound(params) {
280
286
  return jsonResponse({ error: `${field} must be a string`, ok: false }, 400);
281
287
  }
282
288
  }
283
- const channelId = readMattermostId(params.body.channelId ?? params.body.channel_id);
289
+ const requestedChannelId = readMattermostId(params.body.channelId ?? params.body.channel_id);
284
290
  const senderId = readMattermostId(params.body.senderId ?? params.body.user_id);
285
291
  const text = readMattermostMessage(params.body.text ?? params.body.message);
286
- if (!channelId || !senderId || !text) {
287
- return jsonResponse({ error: "channelId, senderId, and text are required", ok: false }, 400);
292
+ if (!senderId || !text) {
293
+ return jsonResponse({ error: "senderId and text are required", ok: false }, 400);
288
294
  }
289
- if (!isMattermostId(channelId)) {
295
+ if (requestedChannelId && !isMattermostId(requestedChannelId)) {
290
296
  return jsonResponse({ error: "channelId must be a 26-character Mattermost ID", ok: false }, 400);
291
297
  }
292
298
  if (!isMattermostId(senderId)) {
@@ -311,7 +317,6 @@ function handleAdminInbound(params) {
311
317
  return pendingQueueFullResponse(params.state);
312
318
  }
313
319
  const previousUser = params.state.users.get(senderId);
314
- const previousChannel = params.state.channels.get(channelId);
315
320
  const senderName = params.body.senderName === undefined
316
321
  ? (previousUser?.username ?? senderId)
317
322
  : normalizeMattermostUsername(params.body.senderName);
@@ -325,18 +330,40 @@ function handleAdminInbound(params) {
325
330
  if (usernameOwner && usernameOwner !== senderId) {
326
331
  return jsonResponse({ error: "senderName is already in use", ok: false }, 400);
327
332
  }
333
+ const requestedChannel = requestedChannelId
334
+ ? params.state.channels.get(requestedChannelId)
335
+ : undefined;
328
336
  const channelType = params.body.channelType === undefined
329
- ? (previousChannel?.type ?? "D")
337
+ ? (requestedChannel?.type ?? "D")
330
338
  : readMattermostString(params.body.channelType);
331
339
  if (!channelType || !MATTERMOST_CHANNEL_TYPES.has(channelType)) {
332
340
  return jsonResponse({ error: "channelType is not supported", ok: false }, 400);
333
341
  }
334
- const channelName = readMattermostString(params.body.channelName ?? params.body.channel_name) ??
335
- previousChannel?.name ??
336
- channelId;
342
+ const suppliedChannelName = readMattermostString(params.body.channelName ?? params.body.channel_name);
343
+ const canonicalDirectName = mattermostDirectChannelName(params.state.botUserId, senderId);
344
+ const resolveCanonicalDirect = channelType === "D" && !requestedChannelId;
345
+ if (!requestedChannelId && !resolveCanonicalDirect) {
346
+ return jsonResponse({ error: "channelId is required", ok: false }, 400);
347
+ }
348
+ const existingDirect = resolveCanonicalDirect
349
+ ? findDirectChannel(params.state, canonicalDirectName)
350
+ : undefined;
351
+ const channelId = resolveCanonicalDirect
352
+ ? (existingDirect?.id ??
353
+ nextDirectChannelId(params.state, `dm:${canonicalDirectName.replace("__", ":")}`))
354
+ : requestedChannelId;
355
+ if (!channelId) {
356
+ return jsonResponse({ error: "channelId is required", ok: false }, 400);
357
+ }
358
+ const previousChannel = params.state.channels.get(channelId);
359
+ const channelName = resolveCanonicalDirect
360
+ ? canonicalDirectName
361
+ : (suppliedChannelName ??
362
+ previousChannel?.name ??
363
+ (channelType === "D" ? canonicalDirectName : channelId));
337
364
  const channelDisplayName = readMattermostString(params.body.channelDisplayName ?? params.body.channel_display_name) ??
338
365
  previousChannel?.display_name ??
339
- channelName;
366
+ (channelType === "D" ? "" : channelName);
340
367
  const channel = {
341
368
  display_name: channelDisplayName,
342
369
  id: channelId,
@@ -469,16 +496,15 @@ async function handleApi(params) {
469
496
  if (firstUserId !== state.botUserId && secondUserId !== state.botUserId) {
470
497
  return mattermostError("Authenticated user must belong to the direct channel", 403);
471
498
  }
472
- const participantIds = [...userIds].sort();
473
- const channelName = participantIds.join("__");
474
- const existingChannel = [...state.channels.values()].find((channel) => channel.type === "D" && channel.name === channelName);
499
+ const channelName = mattermostDirectChannelName(firstUserId, secondUserId);
500
+ const existingChannel = findDirectChannel(state, channelName);
475
501
  if (existingChannel) {
476
502
  return jsonResponse(existingChannel, 201);
477
503
  }
478
504
  if (state.channels.size >= state.maxCommittedChannels) {
479
505
  return mattermostError("Too many retained channels", 503);
480
506
  }
481
- const channelId = nextDirectChannelId(state, `dm:${participantIds.join(":")}`);
507
+ const channelId = nextDirectChannelId(state, `dm:${channelName.replace("__", ":")}`);
482
508
  const channel = { display_name: "", id: channelId, name: channelName, type: "D" };
483
509
  if (!canRetainCommittedValues(state, [[undefined, channel]])) {
484
510
  return mattermostError("Too much retained state", 503);
@@ -671,6 +697,8 @@ async function handleRequest(request, state) {
671
697
  });
672
698
  if (method === "POST" && url.pathname === "/api/v4/posts") {
673
699
  event.accepted = response.status === 201;
700
+ const channelId = isJsonObject(body) ? readMattermostId(body.channel_id) : undefined;
701
+ event.channel = channelId ? state.channels.get(channelId) : undefined;
674
702
  }
675
703
  event.accepted ??= response.ok;
676
704
  await appendEvent(state, event, response.ok && method !== "GET");