@yoooclaw/phone-notifications 1.12.2 → 1.12.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../node_modules/ws/lib/constants.js", "../node_modules/ws/lib/buffer-util.js", "../node_modules/ws/lib/limiter.js", "../node_modules/ws/lib/permessage-deflate.js", "../node_modules/ws/lib/validation.js", "../node_modules/ws/lib/receiver.js", "../node_modules/ws/lib/sender.js", "../node_modules/ws/lib/event-target.js", "../node_modules/ws/lib/extension.js", "../node_modules/ws/lib/websocket.js", "../node_modules/ws/lib/stream.js", "../node_modules/ws/lib/subprotocol.js", "../node_modules/ws/lib/websocket-server.js", "../src/logger.ts", "../src/version.ts", "../src/cli/helpers.ts", "../src/cli/ntf-query.ts", "../src/notification/summary.ts", "../src/notification/storage.ts", "../src/notification/feishu-normalize.ts", "../src/ingest-context.ts", "../src/light/repeat.ts", "../src/light/validators.ts", "../src/light-rules/names.ts", "../src/light-rules/storage.ts", "../src/light-rules/gateway.ts", "../src/light/protocol.ts", "../src/auth/credentials.ts", "../src/profile/detect.ts", "../src/profile/paths.ts", "../src/profile/runtime-paths.ts", "../src/env.ts", "../src/light-rules/client.ts", "../src/plugin/light-rules-tools.ts", "../src/light-rules/registry.ts", "../src/index.ts", "../src/update/channel.ts", "../src/update/index.ts", "../src/plugin/shared.ts", "../src/plugin/runtime-state.ts", "../src/update/semver.ts", "../src/update/checker.ts", "../src/update/executor.ts", "../src/update/restart.ts", "../src/plugin/auto-update.ts", "../src/plugin/cli.ts", "../src/cli/auth.ts", "../src/cli/ntf-search.ts", "../src/cli/ntf-summary.ts", "../src/cli/ntf-summary-job.ts", "../src/cli/ntf-stats.ts", "../src/cli/ntf-sync.ts", "../src/cli/ntf-monitor.ts", "../src/monitor/fetch-gen.ts", "../src/light/sender.ts", "../src/cli/light-send.ts", "../src/cli/light-setup-tools.ts", "../src/tunnel/status.ts", "../src/cli/tunnel-status.ts", "../src/cli/ntf-storage-path.ts", "../src/cli/log-search.ts", "../src/cli/env.ts", "../src/cli/doctor.ts", "../src/cli/doctor/check-dangerous-flags.ts", "../src/cli/doctor/check-trusted-proxy.ts", "../src/cli/doctor/check-state-dir-perms.ts", "../src/cli/doctor/check-tool-policy.ts", "../src/cli/doctor/check-credentials.ts", "../src/cli/doctor/check-tunnel.ts", "../src/cli/doctor/check-node-version.ts", "../src/cli/doctor/check-plugin-version.ts", "../src/cli/doctor/checkers.ts", "../src/cli/rec-list.ts", "../src/cli/rec-status.ts", "../src/cli/rec-storage-path.ts", "../src/cli/rec-setup.ts", "../src/cli/image-list.ts", "../src/cli/image-status.ts", "../src/cli/image-path.ts", "../src/cli/image-storage-path.ts", "../src/cli/update.ts", "../src/cli/index.ts", "../src/plugin/ntf-bin.ts", "../src/plugin/lifecycle.ts", "../src/notification/app-name-map.ts", "../src/recording/storage.ts", "../src/recording/state-machine.ts", "../src/recording/transcript-document.ts", "../src/recording/downloader.ts", "../src/recording/asr.ts", "../src/recording/whisper-local.ts", "../src/recording/handler.ts", "../src/recording/result-writer.ts", "../src/image/store.ts", "../src/image/handler.ts", "../src/tunnel/service.ts", "../src/tunnel/relay-client.ts", "../node_modules/ws/wrapper.mjs", "../src/tunnel/utils.ts", "../src/tunnel/proxy.ts", "../src/host-sdk.ts", "../src/tunnel/device-identity.ts", "../src/tunnel/http-proxy.ts", "../src/tunnel/ws-proxy.ts", "../src/tunnel/frame-slimmer.ts", "../src/tunnel/connect-status-reporter.ts", "../src/profile/auth/base-apikey.ts", "../src/profile/auth/openclaw.ts", "../src/profile/auth/arkclaw.ts", "../src/profile/auth/jvsclaw.ts", "../src/profile/auth/index.ts", "../src/plugin/notifications.ts", "../src/plugin/recordings.ts", "../src/plugin/images.ts", "../src/plugin/runtime-mode.ts"],
3
+ "sources": ["../node_modules/ws/lib/constants.js", "../node_modules/ws/lib/buffer-util.js", "../node_modules/ws/lib/limiter.js", "../node_modules/ws/lib/permessage-deflate.js", "../node_modules/ws/lib/validation.js", "../node_modules/ws/lib/receiver.js", "../node_modules/ws/lib/sender.js", "../node_modules/ws/lib/event-target.js", "../node_modules/ws/lib/extension.js", "../node_modules/ws/lib/websocket.js", "../node_modules/ws/lib/stream.js", "../node_modules/ws/lib/subprotocol.js", "../node_modules/ws/lib/websocket-server.js", "../src/logger.ts", "../src/version.ts", "../src/cli/helpers.ts", "../src/cli/ntf-query.ts", "../src/notification/summary.ts", "../src/notification/storage.ts", "../src/notification/feishu-normalize.ts", "../src/ingest-context.ts", "../src/light/repeat.ts", "../src/light/validators.ts", "../src/light-rules/names.ts", "../src/light-rules/storage.ts", "../src/light-rules/gateway.ts", "../src/light/protocol.ts", "../src/auth/credentials.ts", "../src/profile/detect.ts", "../src/profile/paths.ts", "../src/profile/runtime-paths.ts", "../src/env.ts", "../src/light-rules/client.ts", "../src/plugin/light-rules-tools.ts", "../src/light-rules/registry.ts", "../src/index.ts", "../src/update/channel.ts", "../src/update/index.ts", "../src/plugin/shared.ts", "../src/plugin/runtime-state.ts", "../src/update/semver.ts", "../src/update/checker.ts", "../src/update/executor.ts", "../src/update/restart.ts", "../src/plugin/auto-update.ts", "../src/plugin/cli.ts", "../src/cli/auth.ts", "../src/cli/ntf-search.ts", "../src/cli/ntf-summary.ts", "../src/cli/ntf-summary-job.ts", "../src/cli/ntf-stats.ts", "../src/cli/ntf-sync.ts", "../src/cli/ntf-monitor.ts", "../src/monitor/fetch-gen.ts", "../src/light/sender.ts", "../src/cli/light-send.ts", "../src/cli/light-setup-tools.ts", "../src/tunnel/status.ts", "../src/cli/tunnel-status.ts", "../src/cli/ntf-storage-path.ts", "../src/cli/log-search.ts", "../src/cli/env.ts", "../src/cli/doctor.ts", "../src/cli/doctor/check-dangerous-flags.ts", "../src/cli/doctor/check-trusted-proxy.ts", "../src/cli/doctor/check-state-dir-perms.ts", "../src/cli/doctor/check-tool-policy.ts", "../src/cli/doctor/check-credentials.ts", "../src/cli/doctor/check-tunnel.ts", "../src/cli/doctor/check-node-version.ts", "../src/cli/doctor/check-plugin-version.ts", "../src/cli/doctor/checkers.ts", "../src/cli/rec-list.ts", "../src/cli/rec-status.ts", "../src/cli/rec-storage-path.ts", "../src/cli/rec-setup.ts", "../src/cli/image-list.ts", "../src/cli/image-status.ts", "../src/cli/image-path.ts", "../src/cli/image-storage-path.ts", "../src/cli/update.ts", "../src/cli/index.ts", "../src/plugin/ntf-bin.ts", "../src/plugin/lifecycle.ts", "../src/notification/app-name-map.ts", "../src/recording/storage.ts", "../src/recording/state-machine.ts", "../src/recording/transcript-document.ts", "../src/recording/downloader.ts", "../src/recording/result-writer.ts", "../src/image/store.ts", "../src/image/handler.ts", "../src/tunnel/service.ts", "../src/tunnel/relay-client.ts", "../node_modules/ws/wrapper.mjs", "../src/tunnel/utils.ts", "../src/tunnel/proxy.ts", "../src/host-sdk.ts", "../src/tunnel/device-identity.ts", "../src/tunnel/http-proxy.ts", "../src/tunnel/ws-proxy.ts", "../src/tunnel/frame-slimmer.ts", "../src/tunnel/connect-status-reporter.ts", "../src/profile/auth/base-apikey.ts", "../src/profile/auth/openclaw.ts", "../src/profile/auth/arkclaw.ts", "../src/profile/auth/jvsclaw.ts", "../src/profile/auth/index.ts", "../src/plugin/notifications.ts", "../src/plugin/recordings.ts", "../src/plugin/images.ts", "../src/plugin/runtime-mode.ts"],
4
4
  "sourcesContent": [
5
5
  "'use strict';\n\nconst BINARY_TYPES = ['nodebuffer', 'arraybuffer', 'fragments'];\nconst hasBlob = typeof Blob !== 'undefined';\n\nif (hasBlob) BINARY_TYPES.push('blob');\n\nmodule.exports = {\n BINARY_TYPES,\n CLOSE_TIMEOUT: 30000,\n EMPTY_BUFFER: Buffer.alloc(0),\n GUID: '258EAFA5-E914-47DA-95CA-C5AB0DC85B11',\n hasBlob,\n kForOnEventAttribute: Symbol('kIsForOnEventAttribute'),\n kListener: Symbol('kListener'),\n kStatusCode: Symbol('status-code'),\n kWebSocket: Symbol('websocket'),\n NOOP: () => {}\n};\n",
6
6
  "'use strict';\n\nconst { EMPTY_BUFFER } = require('./constants');\n\nconst FastBuffer = Buffer[Symbol.species];\n\n/**\n * Merges an array of buffers into a new buffer.\n *\n * @param {Buffer[]} list The array of buffers to concat\n * @param {Number} totalLength The total length of buffers in the list\n * @return {Buffer} The resulting buffer\n * @public\n */\nfunction concat(list, totalLength) {\n if (list.length === 0) return EMPTY_BUFFER;\n if (list.length === 1) return list[0];\n\n const target = Buffer.allocUnsafe(totalLength);\n let offset = 0;\n\n for (let i = 0; i < list.length; i++) {\n const buf = list[i];\n target.set(buf, offset);\n offset += buf.length;\n }\n\n if (offset < totalLength) {\n return new FastBuffer(target.buffer, target.byteOffset, offset);\n }\n\n return target;\n}\n\n/**\n * Masks a buffer using the given mask.\n *\n * @param {Buffer} source The buffer to mask\n * @param {Buffer} mask The mask to use\n * @param {Buffer} output The buffer where to store the result\n * @param {Number} offset The offset at which to start writing\n * @param {Number} length The number of bytes to mask.\n * @public\n */\nfunction _mask(source, mask, output, offset, length) {\n for (let i = 0; i < length; i++) {\n output[offset + i] = source[i] ^ mask[i & 3];\n }\n}\n\n/**\n * Unmasks a buffer using the given mask.\n *\n * @param {Buffer} buffer The buffer to unmask\n * @param {Buffer} mask The mask to use\n * @public\n */\nfunction _unmask(buffer, mask) {\n for (let i = 0; i < buffer.length; i++) {\n buffer[i] ^= mask[i & 3];\n }\n}\n\n/**\n * Converts a buffer to an `ArrayBuffer`.\n *\n * @param {Buffer} buf The buffer to convert\n * @return {ArrayBuffer} Converted buffer\n * @public\n */\nfunction toArrayBuffer(buf) {\n if (buf.length === buf.buffer.byteLength) {\n return buf.buffer;\n }\n\n return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.length);\n}\n\n/**\n * Converts `data` to a `Buffer`.\n *\n * @param {*} data The data to convert\n * @return {Buffer} The buffer\n * @throws {TypeError}\n * @public\n */\nfunction toBuffer(data) {\n toBuffer.readOnly = true;\n\n if (Buffer.isBuffer(data)) return data;\n\n let buf;\n\n if (data instanceof ArrayBuffer) {\n buf = new FastBuffer(data);\n } else if (ArrayBuffer.isView(data)) {\n buf = new FastBuffer(data.buffer, data.byteOffset, data.byteLength);\n } else {\n buf = Buffer.from(data);\n toBuffer.readOnly = false;\n }\n\n return buf;\n}\n\nmodule.exports = {\n concat,\n mask: _mask,\n toArrayBuffer,\n toBuffer,\n unmask: _unmask\n};\n\n/* istanbul ignore else */\nif (!process.env.WS_NO_BUFFER_UTIL) {\n try {\n const bufferUtil = require('bufferutil');\n\n module.exports.mask = function (source, mask, output, offset, length) {\n if (length < 48) _mask(source, mask, output, offset, length);\n else bufferUtil.mask(source, mask, output, offset, length);\n };\n\n module.exports.unmask = function (buffer, mask) {\n if (buffer.length < 32) _unmask(buffer, mask);\n else bufferUtil.unmask(buffer, mask);\n };\n } catch (e) {\n // Continue regardless of the error.\n }\n}\n",
@@ -33,13 +33,13 @@
33
33
  "/**\n * 宿主检测。\n *\n * - detectHostKind():旧的路径/状态目录家族检测(openclaw | qclaw),行为与 host.ts 完全一致。\n * - resolveClawKind():新的渠道 Profile 选择(openclaw | arkclaw | jvsclaw),\n * 优先级 PHONE_NOTIFICATIONS_CLAW_PROFILE 环境变量 > 持久化 profile >\n * jvsclaw 直解 tgz 痕迹 > openclaw。\n */\nimport { readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { ClawKind, HostKind } from \"./types.js\";\nimport {\n DEFAULT_JVSCLAW_STATE_DIR,\n loadQClawMeta,\n hasOpenClawMarkers,\n resolveConfigPathFromEnv,\n resolvePersistedProfileStateDirs,\n resolvePluginConfigPathOverrideFromEnv,\n resolveStateDirFromEnv,\n trimToUndefined,\n} from \"./paths.js\";\n\nfunction detectHostKindFromPath(value: string | undefined): HostKind | undefined {\n if (!value) {\n return undefined;\n }\n const normalized = value.replace(/\\\\/g, \"/\").toLowerCase();\n if (\n normalized.endsWith(\"/.qclaw\") ||\n normalized.includes(\"/.qclaw/\") ||\n normalized.endsWith(\"/.qclow\") ||\n normalized.includes(\"/.qclow/\")\n ) {\n return \"qclaw\";\n }\n if (normalized.endsWith(\"/.openclaw\") || normalized.includes(\"/.openclaw/\")) {\n return \"openclaw\";\n }\n return undefined;\n}\n\nexport function detectHostKind(): HostKind {\n if (\n trimToUndefined(process.env.QCLAW_STATE_DIR) ||\n trimToUndefined(process.env.QCLAW_CONFIG_PATH) ||\n trimToUndefined(process.env.QCLAW_HOME)\n ) {\n return \"qclaw\";\n }\n\n const pathHintKind =\n detectHostKindFromPath(resolveStateDirFromEnv()) ??\n detectHostKindFromPath(resolveConfigPathFromEnv());\n if (pathHintKind) {\n return pathHintKind;\n }\n\n if (hasOpenClawMarkers()) {\n return \"openclaw\";\n }\n\n if (loadQClawMeta()) {\n return \"qclaw\";\n }\n\n return \"openclaw\";\n}\n\nconst VALID_CLAW_KINDS: ReadonlySet<string> = new Set<ClawKind>([\n \"openclaw\",\n \"arkclaw\",\n \"jvsclaw\",\n]);\nconst PLUGIN_ID = \"phone-notifications\";\n\n/** 读取持久化到可写 stateDir/.env 的 PHONE_NOTIFICATIONS_CLAW_PROFILE。 */\nfunction readPersistedClawProfile(): string | undefined {\n for (const stateDir of resolvePersistedProfileStateDirs()) {\n let content: string;\n try {\n content = readFileSync(join(stateDir, \".env\"), \"utf-8\");\n } catch {\n continue;\n }\n for (const line of content.split(\"\\n\")) {\n const eq = line.indexOf(\"=\");\n if (eq < 1) continue;\n if (line.slice(0, eq).trim() === \"PHONE_NOTIFICATIONS_CLAW_PROFILE\") {\n return line.slice(eq + 1).trim();\n }\n }\n }\n return undefined;\n}\n\nfunction hasJvsclawEnvHint(): boolean {\n return Boolean(\n trimToUndefined(process.env.JVSCLAW_STATE_DIR) ||\n trimToUndefined(process.env.JVSCLAW_CONFIG_PATH) ||\n trimToUndefined(process.env.JVSCLAW_HOME),\n );\n}\n\nfunction readPluginLinkSecret(configPath: string | undefined): string | undefined {\n if (!configPath) return undefined;\n\n let config: unknown;\n try {\n config = JSON.parse(readFileSync(configPath, \"utf-8\"));\n } catch {\n return undefined;\n }\n\n const entries = readObject(readObject(config, \"plugins\"), \"entries\");\n const pluginEntry = readObject(entries, PLUGIN_ID);\n const pluginConfig = readObject(pluginEntry, \"config\");\n const linkSecret = pluginConfig?.link_secret;\n return typeof linkSecret === \"string\"\n ? linkSecret.trim() || undefined\n : undefined;\n}\n\nfunction hasJvsclawLinkSecret(): boolean {\n const paths = [\n resolvePluginConfigPathOverrideFromEnv(),\n resolveConfigPathFromEnv(),\n join(DEFAULT_JVSCLAW_STATE_DIR, \"openclaw.json\"),\n ].filter((value, index, arr): value is string => Boolean(value) && arr.indexOf(value) === index);\n\n return paths.some((configPath) => Boolean(readPluginLinkSecret(configPath)));\n}\n\nfunction readObject(\n value: unknown,\n key: string,\n): Record<string, unknown> | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n const nested = (value as Record<string, unknown>)[key];\n return nested && typeof nested === \"object\"\n ? (nested as Record<string, unknown>)\n : undefined;\n}\n\n/**\n * 选择渠道 Profile。\n * 优先级:PHONE_NOTIFICATIONS_CLAW_PROFILE 环境变量 > 持久化的 .env(安装脚本 --channel)\n * > jvsclaw 直解 tgz 的运行期/配置痕迹 > 默认 openclaw。\n * 安装脚本带 --channel 时写入 .env,运行期零歧义;jvsclaw 线上直解 tgz 时没有这一步,\n * 需要从 JVSCLAW_* env 或宿主注入的 link_secret 识别。\n */\nexport function resolveClawKind(): ClawKind {\n const fromEnv = trimToUndefined(process.env.PHONE_NOTIFICATIONS_CLAW_PROFILE)?.toLowerCase();\n if (fromEnv && VALID_CLAW_KINDS.has(fromEnv)) {\n return fromEnv as ClawKind;\n }\n\n const persisted = readPersistedClawProfile()?.toLowerCase();\n if (persisted && VALID_CLAW_KINDS.has(persisted)) {\n return persisted as ClawKind;\n }\n\n if (hasJvsclawEnvHint() || hasJvsclawLinkSecret()) {\n return \"jvsclaw\";\n }\n\n // 自动检测兜底:qclaw 与 openclaw 同属 apiKey 家族,统一归为 openclaw。\n return \"openclaw\";\n}\n",
34
34
  "/**\n * 宿主原始路径解析。\n *\n * 注意:这里解析的是宿主暴露的目录,不保证可写。JvsClaw 可能把\n * JVSCLAW_STATE_DIR / JVSCLAW_HOME 指向只读 rootfs(例如 /opt/jvs-claw)。\n * 插件自己的可写目录必须通过 runtime-paths.ts 解析。\n */\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\n\ninterface QClawMeta {\n stateDir?: string;\n configPath?: string;\n}\n\nexport const DEFAULT_JVSCLAW_STATE_DIR = \"/home/admin/.openclaw\";\nexport const PHONE_NOTIFICATIONS_STATE_DIR_ENV = \"PHONE_NOTIFICATIONS_STATE_DIR\";\nexport const PHONE_NOTIFICATIONS_CONFIG_PATH_ENV = \"PHONE_NOTIFICATIONS_CONFIG_PATH\";\n\nexport function trimToUndefined(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const trimmed = value.trim();\n return trimmed || undefined;\n}\n\nexport function homeDir(): string {\n return process.env.HOME || process.env.USERPROFILE || \"/tmp\";\n}\n\nexport function expandUserPath(value: string | undefined): string | undefined {\n if (!value) {\n return undefined;\n }\n if (value === \"~\") {\n return homeDir();\n }\n if (value.startsWith(\"~/\")) {\n return join(homeDir(), value.slice(2));\n }\n return value;\n}\n\nfunction candidateMetaPaths(): string[] {\n const home = homeDir();\n return [\n join(home, \".qclaw\", \"qclaw.json\"),\n join(home, \".qclow\", \"qclaw.json\"),\n ];\n}\n\nexport function loadQClawMeta(): QClawMeta | undefined {\n for (const metaPath of candidateMetaPaths()) {\n if (!existsSync(metaPath)) {\n continue;\n }\n try {\n const parsed = JSON.parse(readFileSync(metaPath, \"utf-8\")) as QClawMeta;\n return {\n stateDir: expandUserPath(trimToUndefined(parsed?.stateDir)),\n configPath: expandUserPath(trimToUndefined(parsed?.configPath)),\n };\n } catch {\n // ignore invalid metadata and keep trying\n }\n }\n return undefined;\n}\n\n/** 插件可写状态目录的显式覆盖。与宿主原始 stateDir 分离。 */\nexport function resolvePluginStateDirOverrideFromEnv(): string | undefined {\n return expandUserPath(\n trimToUndefined(process.env[PHONE_NOTIFICATIONS_STATE_DIR_ENV]),\n );\n}\n\n/** 插件使用的配置文件显式覆盖。与宿主原始 configPath 分离。 */\nexport function resolvePluginConfigPathOverrideFromEnv(): string | undefined {\n return expandUserPath(\n trimToUndefined(process.env[PHONE_NOTIFICATIONS_CONFIG_PATH_ENV]),\n );\n}\n\n/** 解析宿主暴露的原始状态目录环境变量。返回值不保证可写。 */\nexport function resolveStateDirFromEnv(): string | undefined {\n return expandUserPath(\n trimToUndefined(process.env.JVSCLAW_STATE_DIR) ??\n trimToUndefined(process.env.JVSCLAW_HOME) ??\n trimToUndefined(process.env.OPENCLAW_STATE_DIR) ??\n trimToUndefined(process.env.QCLAW_STATE_DIR) ??\n trimToUndefined(process.env.OPENCLAW_ROOT) ??\n trimToUndefined(process.env.OPENCLAW_HOME) ??\n trimToUndefined(process.env.QCLAW_HOME),\n );\n}\n\n/** 解析宿主暴露的原始配置文件环境变量。返回值不保证可写。 */\nexport function resolveConfigPathFromEnv(): string | undefined {\n return expandUserPath(\n trimToUndefined(process.env.JVSCLAW_CONFIG_PATH) ??\n trimToUndefined(process.env.OPENCLAW_CONFIG_PATH) ??\n trimToUndefined(process.env.QCLAW_CONFIG_PATH),\n );\n}\n\nexport function hasOpenClawMarkers(): boolean {\n const baseDir = join(homeDir(), \".openclaw\");\n return [\n join(baseDir, \"openclaw.json\"),\n join(baseDir, \"credentials.json\"),\n join(baseDir, \"extensions\"),\n ].some((candidate) => existsSync(candidate));\n}\n\n/**\n * 解析宿主原始状态目录。仅用于必须与宿主运行时交互的场景,例如 Gateway\n * 设备配对。插件文件写入请使用 runtime-paths.ts 的 resolveStateDir()。\n */\nexport function resolveHostStateDir(stateDir?: string): string {\n const explicitDir = expandUserPath(trimToUndefined(stateDir));\n if (explicitDir) {\n return explicitDir;\n }\n\n const envDir = resolveStateDirFromEnv();\n if (envDir) {\n return envDir;\n }\n\n if (hasOpenClawMarkers()) {\n return join(homeDir(), \".openclaw\");\n }\n\n const meta = loadQClawMeta();\n if (meta?.stateDir) {\n return meta.stateDir;\n }\n if (meta?.configPath) {\n return dirname(meta.configPath);\n }\n\n return join(homeDir(), \".openclaw\");\n}\n\n/** 解析宿主原始配置文件路径。返回值不保证位于可写目录。 */\nexport function resolveHostConfigPath(\n stateDir = resolveHostStateDir(),\n): string {\n const envConfigPath = resolveConfigPathFromEnv();\n if (envConfigPath) {\n return envConfigPath;\n }\n\n const meta = loadQClawMeta();\n if (\n meta?.configPath &&\n (!meta.stateDir || !stateDir || meta.stateDir === stateDir)\n ) {\n return meta.configPath;\n }\n\n return join(stateDir, \"openclaw.json\");\n}\n\n/**\n * 返回可能持久化 PHONE_NOTIFICATIONS_CLAW_PROFILE 的目录。\n * detect.ts 使用这些候选路径判断渠道,避免因宿主只读根目录而漏读 JvsClaw 配置。\n */\nexport function resolvePersistedProfileStateDirs(): string[] {\n const dirs: string[] = [];\n const add = (dir: string | undefined) => {\n if (dir && !dirs.includes(dir)) {\n dirs.push(dir);\n }\n };\n\n add(resolvePluginStateDirOverrideFromEnv());\n add(DEFAULT_JVSCLAW_STATE_DIR);\n add(resolveHostStateDir());\n return dirs;\n}\n",
35
35
  "/**\n * 插件可写路径解析。\n *\n * 宿主原始目录与插件可写目录在 OpenClaw / QClaw 下通常相同,但 JvsClaw\n * 可能把宿主目录指向只读 rootfs。所有插件文件写入都应经过这里。\n */\nimport { join } from \"node:path\";\nimport { resolveClawKind } from \"./detect.js\";\nimport {\n DEFAULT_JVSCLAW_STATE_DIR,\n resolveHostConfigPath,\n resolveHostStateDir,\n resolvePluginConfigPathOverrideFromEnv,\n resolvePluginStateDirOverrideFromEnv,\n} from \"./paths.js\";\n\n/**\n * 解析插件可写状态目录。\n *\n * PHONE_NOTIFICATIONS_STATE_DIR 是明确的可写覆盖;JVSCLAW_STATE_DIR 等变量\n * 只描述宿主原始目录,不参与 JvsClaw 插件文件写入。\n */\nexport function resolveStateDir(hostStateDir?: string): string {\n const override = resolvePluginStateDirOverrideFromEnv();\n if (override) {\n return override;\n }\n\n if (resolveClawKind() === \"jvsclaw\") {\n return DEFAULT_JVSCLAW_STATE_DIR;\n }\n\n return resolveHostStateDir(hostStateDir);\n}\n\n/** 解析插件应使用的配置文件路径。 */\nexport function resolveConfigPath(hostStateDir?: string): string {\n const override = resolvePluginConfigPathOverrideFromEnv();\n if (override) {\n return override;\n }\n\n if (resolveClawKind() === \"jvsclaw\") {\n return join(resolveStateDir(hostStateDir), \"openclaw.json\");\n }\n\n return resolveHostConfigPath(resolveHostStateDir(hostStateDir));\n}\n\n/** 解析插件可写状态目录中的文件。 */\nexport function resolveStateFile(\n filename: string,\n hostStateDir?: string,\n): string {\n return join(resolveStateDir(hostStateDir), filename);\n}\n",
36
- "import { randomBytes } from \"node:crypto\";\nimport {\n existsSync,\n mkdirSync,\n readFileSync,\n renameSync,\n rmSync,\n writeFileSync,\n} from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport { readCredentials } from \"./auth/credentials.js\";\nimport { resolveStateFile } from \"./host.js\";\n\n// 容错解析:先按换行切分,再按 KEY= 边界切分,恢复历史上把多条记录粘在同一行的 .env。\n// lookbehind 限定前一个字符不是标识符字符,避免在 key 内部错误切分。\nfunction parseEnvContent(content: string): Map<string, string> {\n const entries = new Map<string, string>();\n const tokens = content\n .split(/\\r?\\n/)\n .flatMap((line) => line.split(/(?<![A-Z0-9_])(?=[A-Z_][A-Z0-9_]*=)/));\n for (const token of tokens) {\n const trimmed = token.trim();\n if (!trimmed || trimmed.startsWith(\"#\")) continue;\n const eq = trimmed.indexOf(\"=\");\n if (eq < 1) continue;\n const key = trimmed.slice(0, eq).trim();\n if (!/^[A-Z_][A-Z0-9_]*$/.test(key)) continue;\n entries.set(key, trimmed.slice(eq + 1).trim());\n }\n return entries;\n}\n\nfunction writeDotEnv(key: string, value: string): void {\n const path = resolveStateFile(\".env\");\n mkdirSync(dirname(path), { recursive: true });\n const existing = existsSync(path) ? readFileSync(path, \"utf-8\") : \"\";\n const entries = parseEnvContent(existing);\n entries.set(key, value);\n const output =\n Array.from(entries, ([k, v]) => `${k}=${v}`).join(\"\\n\") + \"\\n\";\n const tmpPath = `${path}.tmp.${process.pid}.${randomBytes(4).toString(\"hex\")}`;\n try {\n // JvsClaw may leave an existing .env read-only while its state directory\n // remains writable. Replacing a sibling temp file avoids reopening it.\n writeFileSync(tmpPath, output, { encoding: \"utf-8\", mode: 0o600 });\n renameSync(tmpPath, path);\n } catch (error) {\n try {\n rmSync(tmpPath, { force: true });\n } catch {\n // ignore tmp cleanup failure\n }\n throw error;\n }\n}\n\nexport type EnvName = \"development\" | \"test\" | \"production\";\n\nconst DEFAULT_ENV_HOSTS: Record<EnvName, string> = {\n development: \"openclaw-service-dev.yoooclaw.com\",\n test: \"openclaw-service-test.yoooclaw.com\",\n production: \"openclaw-service.yoooclaw.com\",\n};\n\nexport const NOTIFICATION_INTELLIGENCE_LIGHT_RULES_PLUGIN_PATH =\n \"/api/plugin/notification-intelligence/light-rules\";\nconst NOTIFICATION_INTELLIGENCE_LIGHT_RULES_APP_PATH =\n \"/api/notification-intelligence/light-rules\";\nconst NOTIFICATION_INTELLIGENCE_PLUGIN_BASE_PATH =\n \"/api/plugin/notification-intelligence\";\nconst NOTIFICATION_INTELLIGENCE_APP_BASE_PATH =\n \"/api/notification-intelligence\";\n\ninterface EnvUrls {\n lightApiUrl: string;\n notificationIntelligenceLightRulesPluginUrl: string;\n appNameMapUrl: string;\n relayTunnelUrl: string;\n modelProxyLongRecordingSubmitTaskUrl: string;\n modelProxyLongRecordingQueryTaskResultBaseUrl: string;\n gatewayConnectStatusUrl: string;\n /** jvsclaw 实例就绪/密文换 apiKey 接口(复用插件现有接口 host)。 */\n clawManagerInstanceReadyUrl: string;\n}\n\nfunction normalizeHost(host: string | undefined): string | undefined {\n const trimmed = host?.trim();\n if (!trimmed) return undefined;\n return trimmed\n .replace(/^https?:\\/\\//, \"\")\n .replace(/^wss?:\\/\\//, \"\")\n .replace(/\\/+$/, \"\");\n}\n\nfunction getEnvHost(env: EnvName): string {\n let host: string | undefined;\n switch (env) {\n case \"development\":\n host = process.env.OPENCLAW_HOST_DEVELOPMENT;\n break;\n case \"test\":\n host = process.env.OPENCLAW_HOST_TEST;\n break;\n case \"production\":\n host = process.env.OPENCLAW_HOST_PRODUCTION;\n break;\n }\n return normalizeHost(host) ?? DEFAULT_ENV_HOSTS[env];\n}\n\nexport function normalizeNotificationIntelligenceLightRulesPluginUrl(\n url: string,\n): string {\n const trimmed = url.trim().replace(/\\/+$/, \"\");\n if (!trimmed) return trimmed;\n\n if (trimmed.endsWith(NOTIFICATION_INTELLIGENCE_LIGHT_RULES_PLUGIN_PATH)) {\n return trimmed;\n }\n\n if (trimmed.endsWith(NOTIFICATION_INTELLIGENCE_LIGHT_RULES_APP_PATH)) {\n const origin = trimmed.slice(\n 0,\n -NOTIFICATION_INTELLIGENCE_LIGHT_RULES_APP_PATH.length,\n );\n return `${origin}${NOTIFICATION_INTELLIGENCE_LIGHT_RULES_PLUGIN_PATH}`;\n }\n\n if (trimmed.endsWith(NOTIFICATION_INTELLIGENCE_PLUGIN_BASE_PATH)) {\n return `${trimmed}/light-rules`;\n }\n\n if (trimmed.endsWith(NOTIFICATION_INTELLIGENCE_APP_BASE_PATH)) {\n const origin = trimmed.slice(\n 0,\n -NOTIFICATION_INTELLIGENCE_APP_BASE_PATH.length,\n );\n return `${origin}${NOTIFICATION_INTELLIGENCE_LIGHT_RULES_PLUGIN_PATH}`;\n }\n\n if (/^https?:\\/\\/[^/]+$/i.test(trimmed)) {\n return `${trimmed}${NOTIFICATION_INTELLIGENCE_LIGHT_RULES_PLUGIN_PATH}`;\n }\n\n return trimmed;\n}\n\nfunction buildEnvUrls(host: string): EnvUrls {\n const https = `https://${host}`;\n const wss = `wss://${host}`;\n const lightRulesUrl = normalizeNotificationIntelligenceLightRulesPluginUrl(\n process.env.NOTIFICATION_INTELLIGENCE_LIGHT_RULES_URL ||\n `${https}${NOTIFICATION_INTELLIGENCE_LIGHT_RULES_PLUGIN_PATH}`,\n );\n return {\n lightApiUrl: `${https}/api/message/tob/sendMessage`,\n notificationIntelligenceLightRulesPluginUrl: lightRulesUrl,\n relayTunnelUrl: `${wss}/message/messages/ws/plugin`,\n appNameMapUrl: `${https}/api/application-config/app-package/config-all`,\n modelProxyLongRecordingSubmitTaskUrl: `${https}/api/model-proxy/long-recording/submit-task`,\n modelProxyLongRecordingQueryTaskResultBaseUrl: `${https}/api/model-proxy/long-recording/query-task-result`,\n gatewayConnectStatusUrl: `${https}/api/message/messageBridge/plugin/gateway-connect-status`,\n clawManagerInstanceReadyUrl: `${https}/claw-manager/internal/claw-manager/instance/ready`,\n };\n}\n\nconst VALID_ENVS: ReadonlySet<string> = new Set<string>([\n \"development\",\n \"test\",\n \"production\",\n]);\n\nfunction readDotEnv(): Record<string, string> {\n const path = resolveStateFile(\".env\");\n if (!existsSync(path)) return {};\n return Object.fromEntries(parseEnvContent(readFileSync(path, \"utf-8\")));\n}\n\n/** 读取持久化到 .env 的环境名称;仅反映本地配置,不考虑进程环境变量。 */\nexport function readPersistedEnvName(): EnvName | undefined {\n const fromDotEnv = readDotEnv()[\"PHONE_NOTIFICATIONS_ENV\"]?.trim();\n if (fromDotEnv && VALID_ENVS.has(fromDotEnv)) return fromDotEnv as EnvName;\n return undefined;\n}\n\n/** 读取当前环境名称。优先级:PHONE_NOTIFICATIONS_ENV 环境变量 > .env > credentials.json > 默认 production */\nexport function loadEnvName(): EnvName {\n const fromEnvVar = process.env.PHONE_NOTIFICATIONS_ENV?.trim();\n if (fromEnvVar && VALID_ENVS.has(fromEnvVar)) return fromEnvVar as EnvName;\n\n const fromDotEnv = readPersistedEnvName();\n if (fromDotEnv) return fromDotEnv;\n\n const { env } = readCredentials();\n if (env && VALID_ENVS.has(env)) return env as EnvName;\n\n return \"production\";\n}\n\n/** 持久化当前环境到 .env */\nexport function saveEnvName(env: EnvName): void {\n if (!VALID_ENVS.has(env)) {\n throw new Error(\n `无效的环境名称: ${env},可选值: ${[...VALID_ENVS].join(\", \")}`,\n );\n }\n writeDotEnv(\"PHONE_NOTIFICATIONS_ENV\", env);\n}\n\n/** 获取当前环境的 URL 配置 */\nexport function getEnvUrls(env?: EnvName): EnvUrls {\n return buildEnvUrls(getEnvHost(env ?? loadEnvName()));\n}\n\n/** 获取所有可用环境名称 */\nexport function getAvailableEnvs(): EnvName[] {\n return [\"development\", \"test\", \"production\"];\n}\n",
36
+ "import { randomBytes } from \"node:crypto\";\nimport {\n existsSync,\n mkdirSync,\n readFileSync,\n renameSync,\n rmSync,\n writeFileSync,\n} from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport { readCredentials } from \"./auth/credentials.js\";\nimport { resolveStateFile } from \"./host.js\";\n\n// 容错解析:先按换行切分,再按 KEY= 边界切分,恢复历史上把多条记录粘在同一行的 .env。\n// lookbehind 限定前一个字符不是标识符字符,避免在 key 内部错误切分。\nfunction parseEnvContent(content: string): Map<string, string> {\n const entries = new Map<string, string>();\n const tokens = content\n .split(/\\r?\\n/)\n .flatMap((line) => line.split(/(?<![A-Z0-9_])(?=[A-Z_][A-Z0-9_]*=)/));\n for (const token of tokens) {\n const trimmed = token.trim();\n if (!trimmed || trimmed.startsWith(\"#\")) continue;\n const eq = trimmed.indexOf(\"=\");\n if (eq < 1) continue;\n const key = trimmed.slice(0, eq).trim();\n if (!/^[A-Z_][A-Z0-9_]*$/.test(key)) continue;\n entries.set(key, trimmed.slice(eq + 1).trim());\n }\n return entries;\n}\n\nfunction writeDotEnv(key: string, value: string): void {\n const path = resolveStateFile(\".env\");\n mkdirSync(dirname(path), { recursive: true });\n const existing = existsSync(path) ? readFileSync(path, \"utf-8\") : \"\";\n const entries = parseEnvContent(existing);\n entries.set(key, value);\n const output =\n Array.from(entries, ([k, v]) => `${k}=${v}`).join(\"\\n\") + \"\\n\";\n const tmpPath = `${path}.tmp.${process.pid}.${randomBytes(4).toString(\"hex\")}`;\n try {\n // JvsClaw may leave an existing .env read-only while its state directory\n // remains writable. Replacing a sibling temp file avoids reopening it.\n writeFileSync(tmpPath, output, { encoding: \"utf-8\", mode: 0o600 });\n renameSync(tmpPath, path);\n } catch (error) {\n try {\n rmSync(tmpPath, { force: true });\n } catch {\n // ignore tmp cleanup failure\n }\n throw error;\n }\n}\n\nexport type EnvName = \"development\" | \"test\" | \"production\";\n\nconst DEFAULT_ENV_HOSTS: Record<EnvName, string> = {\n development: \"openclaw-service-dev.yoooclaw.com\",\n test: \"openclaw-service-test.yoooclaw.com\",\n production: \"openclaw-service.yoooclaw.com\",\n};\n\nexport const NOTIFICATION_INTELLIGENCE_LIGHT_RULES_PLUGIN_PATH =\n \"/api/plugin/notification-intelligence/light-rules\";\nconst NOTIFICATION_INTELLIGENCE_LIGHT_RULES_APP_PATH =\n \"/api/notification-intelligence/light-rules\";\nconst NOTIFICATION_INTELLIGENCE_PLUGIN_BASE_PATH =\n \"/api/plugin/notification-intelligence\";\nconst NOTIFICATION_INTELLIGENCE_APP_BASE_PATH =\n \"/api/notification-intelligence\";\n\ninterface EnvUrls {\n lightApiUrl: string;\n notificationIntelligenceLightRulesPluginUrl: string;\n appNameMapUrl: string;\n relayTunnelUrl: string;\n modelProxyLongRecordingSubmitTaskUrl: string;\n modelProxyLongRecordingQueryTaskResultBaseUrl: string;\n gatewayConnectStatusUrl: string;\n /** jvsclaw 实例就绪/密文换 apiKey 接口(复用插件现有接口 host)。 */\n clawManagerInstanceReadyUrl: string;\n}\n\nfunction normalizeHost(host: string | undefined): string | undefined {\n const trimmed = host?.trim();\n if (!trimmed) return undefined;\n return trimmed\n .replace(/^https?:\\/\\//, \"\")\n .replace(/^wss?:\\/\\//, \"\")\n .replace(/\\/+$/, \"\");\n}\n\nfunction getEnvHost(env: EnvName): string {\n let host: string | undefined;\n switch (env) {\n case \"development\":\n host = process.env.OPENCLAW_HOST_DEVELOPMENT;\n break;\n case \"test\":\n host = process.env.OPENCLAW_HOST_TEST;\n break;\n case \"production\":\n host = process.env.OPENCLAW_HOST_PRODUCTION;\n break;\n }\n return normalizeHost(host) ?? DEFAULT_ENV_HOSTS[env];\n}\n\nexport function normalizeNotificationIntelligenceLightRulesPluginUrl(\n url: string,\n): string {\n const trimmed = url.trim().replace(/\\/+$/, \"\");\n if (!trimmed) return trimmed;\n\n if (trimmed.endsWith(NOTIFICATION_INTELLIGENCE_LIGHT_RULES_PLUGIN_PATH)) {\n return trimmed;\n }\n\n if (trimmed.endsWith(NOTIFICATION_INTELLIGENCE_LIGHT_RULES_APP_PATH)) {\n const origin = trimmed.slice(\n 0,\n -NOTIFICATION_INTELLIGENCE_LIGHT_RULES_APP_PATH.length,\n );\n return `${origin}${NOTIFICATION_INTELLIGENCE_LIGHT_RULES_PLUGIN_PATH}`;\n }\n\n if (trimmed.endsWith(NOTIFICATION_INTELLIGENCE_PLUGIN_BASE_PATH)) {\n return `${trimmed}/light-rules`;\n }\n\n if (trimmed.endsWith(NOTIFICATION_INTELLIGENCE_APP_BASE_PATH)) {\n const origin = trimmed.slice(\n 0,\n -NOTIFICATION_INTELLIGENCE_APP_BASE_PATH.length,\n );\n return `${origin}${NOTIFICATION_INTELLIGENCE_LIGHT_RULES_PLUGIN_PATH}`;\n }\n\n if (/^https?:\\/\\/[^/]+$/i.test(trimmed)) {\n return `${trimmed}${NOTIFICATION_INTELLIGENCE_LIGHT_RULES_PLUGIN_PATH}`;\n }\n\n return trimmed;\n}\n\nfunction buildEnvUrls(host: string): EnvUrls {\n const https = `https://${host}`;\n const wss = `wss://${host}`;\n const lightRulesUrl = normalizeNotificationIntelligenceLightRulesPluginUrl(\n process.env.NOTIFICATION_INTELLIGENCE_LIGHT_RULES_URL ||\n `${https}${NOTIFICATION_INTELLIGENCE_LIGHT_RULES_PLUGIN_PATH}`,\n );\n return {\n lightApiUrl: `${https}/api/message/tob/sendMessage`,\n notificationIntelligenceLightRulesPluginUrl: lightRulesUrl,\n relayTunnelUrl: `${wss}/message/messages/ws/plugin`,\n appNameMapUrl: `${https}/api/application-config/app-package/config-all`,\n modelProxyLongRecordingSubmitTaskUrl: `${https}/api/model-proxy/long-recording/submit-task`,\n modelProxyLongRecordingQueryTaskResultBaseUrl: `${https}/api/model-proxy/long-recording/query-task-result`,\n gatewayConnectStatusUrl: `${https}/api/message/messageBridge/plugin/gateway-connect-status`,\n clawManagerInstanceReadyUrl: `${https}/claw-manager/internal/claw-manager/instance/ready`,\n };\n}\n\nconst VALID_ENVS: ReadonlySet<string> = new Set<string>([\n \"development\",\n \"test\",\n \"production\",\n]);\n\nfunction readDotEnv(): Record<string, string> {\n const path = resolveStateFile(\".env\");\n if (!existsSync(path)) return {};\n return Object.fromEntries(parseEnvContent(readFileSync(path, \"utf-8\")));\n}\n\n/** 读取持久化到 .env 的环境名称;仅反映本地配置,不考虑进程环境变量。 */\nexport function readPersistedEnvName(): EnvName | undefined {\n const fromDotEnv = readDotEnv()[\"PHONE_NOTIFICATIONS_ENV\"]?.trim();\n if (fromDotEnv && VALID_ENVS.has(fromDotEnv)) return fromDotEnv as EnvName;\n return undefined;\n}\n\n/**\n * 读取当前环境名称。优先级:状态目录 .env > credentials.json > 默认 production。\n *\n * 不再读取 process.env.PHONE_NOTIFICATIONS_ENV:launchd / systemd 等托管服务会把它作为\n * managed env 注入,并在每次重启时用进程当前值重新快照,从而以高于 .env 的优先级覆盖\n * `ntf env switch` 写入的 .env,导致环境切换始终不生效。状态目录 .env switch 的唯一落点,\n * 因此作为最高优先级。\n */\nexport function loadEnvName(): EnvName {\n const fromDotEnv = readPersistedEnvName();\n if (fromDotEnv) return fromDotEnv;\n\n const { env } = readCredentials();\n if (env && VALID_ENVS.has(env)) return env as EnvName;\n\n return \"production\";\n}\n\n/** 持久化当前环境到 .env */\nexport function saveEnvName(env: EnvName): void {\n if (!VALID_ENVS.has(env)) {\n throw new Error(\n `无效的环境名称: ${env},可选值: ${[...VALID_ENVS].join(\", \")}`,\n );\n }\n writeDotEnv(\"PHONE_NOTIFICATIONS_ENV\", env);\n}\n\n/** 获取当前环境的 URL 配置 */\nexport function getEnvUrls(env?: EnvName): EnvUrls {\n return buildEnvUrls(getEnvHost(env ?? loadEnvName()));\n}\n\n/** 获取所有可用环境名称 */\nexport function getAvailableEnvs(): EnvName[] {\n return [\"development\", \"test\", \"production\"];\n}\n",
37
37
  "import { requireApiKey } from \"../auth/credentials.js\";\nimport {\n getEnvUrls,\n NOTIFICATION_INTELLIGENCE_LIGHT_RULES_PLUGIN_PATH,\n normalizeNotificationIntelligenceLightRulesPluginUrl,\n} from \"../env.js\";\nimport type { LightRuleMeta, LightRuleUpdateParams } from \"./types.js\";\n\nexport type LightRuleRecord = LightRuleMeta & { id: string };\n\nexport interface LightRuleCreateInput {\n ruleText: string;\n}\n\nexport interface LightRuleCreateResult {\n id: string;\n name: string;\n requestId?: string;\n warning?: string;\n}\n\nexport interface LightRuleUpdateResult {\n id?: string;\n name?: string;\n title?: string;\n requestId?: string;\n warning?: string;\n updated: true;\n rule?: LightRuleRecord;\n}\n\nexport interface LightRuleDeleteResult {\n id: string;\n name: string;\n requestId?: string;\n}\n\nexport interface LightRuleService {\n list(): Promise<LightRuleRecord[]>;\n create(params: LightRuleCreateInput): Promise<LightRuleCreateResult>;\n update(identifier: string, patch: LightRuleUpdateParams): Promise<LightRuleUpdateResult>;\n delete(identifier: string): Promise<LightRuleDeleteResult>;\n}\n\ninterface ResponseBean<T> {\n code?: string;\n msg?: string;\n message?: string;\n data?: T | null;\n}\n\ninterface BusinessResponse {\n success?: boolean;\n requestId?: string;\n message?: string;\n [key: string]: unknown;\n}\n\ninterface ResolvedIdentifier {\n id: string;\n name: string;\n}\n\nexport class LightRuleApiError extends Error {\n constructor(\n public readonly code: string,\n message: string,\n public readonly status?: number,\n ) {\n super(message);\n this.name = \"LightRuleApiError\";\n }\n}\n\nexport class NotificationIntelligenceLightRuleClient implements LightRuleService {\n constructor(\n private readonly deps: {\n logger?: { info: (message: string) => void; warn: (message: string) => void };\n baseUrl?: string;\n } = {},\n ) {}\n\n async list(): Promise<LightRuleRecord[]> {\n const data = await this.request<{ success?: boolean; rules?: unknown[] }>(\"\");\n const rules = Array.isArray(data.rules) ? data.rules : [];\n return rules.map((rule) => normalizeRuleRecord(rule));\n }\n\n async create(params: LightRuleCreateInput): Promise<LightRuleCreateResult> {\n const ruleText = params.ruleText.trim();\n if (!ruleText) {\n throw new LightRuleApiError(\"INVALID_PARAMS\", \"ruleText is required\");\n }\n\n const data = await this.request<BusinessResponse & { id?: unknown; name?: unknown; warning?: unknown }>(\n \"\",\n {\n method: \"POST\",\n body: JSON.stringify({ ruleText }),\n },\n );\n\n const id = readNonEmptyString(data.id);\n const name = readNonEmptyString(data.name);\n if (!id || !name) {\n throw new LightRuleApiError(\n \"INVALID_RESPONSE\",\n \"Notification Intelligence create response missing id/name\",\n );\n }\n\n return {\n id,\n name,\n requestId: readNonEmptyString(data.requestId),\n warning: readNonEmptyString(data.warning),\n };\n }\n\n async update(\n identifier: string,\n patch: LightRuleUpdateParams,\n ): Promise<LightRuleUpdateResult> {\n const body = sanitizeUpdatePatch(patch);\n if (Object.keys(body).length === 0) {\n throw new LightRuleApiError(\"INVALID_PARAMS\", \"at least one update field is required\");\n }\n\n const normalized = normalizeLookupIdentifier(identifier);\n if (!normalized) {\n throw new LightRuleApiError(\"INVALID_PARAMS\", \"rule id/name is required\");\n }\n\n if (shouldPatchIdentifierDirectly(normalized)) {\n try {\n this.deps.logger?.info(\n `Light rules API update: direct PATCH identifier=${normalized} patchKeys=${formatPatchKeys(body)}`,\n );\n return await this.patchResolvedRule({ id: normalized, name: normalized }, body);\n } catch (err) {\n if (!shouldResolveAfterDirectPatch(err)) throw err;\n this.deps.logger?.info(\n `Light rules API update: direct PATCH missed identifier=${normalized}; resolving by list`,\n );\n }\n }\n\n const resolved = await this.resolveIdentifier(normalized);\n this.deps.logger?.info(\n `Light rules API update: PATCH targetId=${resolved.id} identifier=${normalized} patchKeys=${formatPatchKeys(body)}`,\n );\n return this.patchResolvedRule(resolved, body);\n }\n\n private async patchResolvedRule(\n resolved: ResolvedIdentifier,\n body: Record<string, unknown>,\n ): Promise<LightRuleUpdateResult> {\n const data = await this.request<\n BusinessResponse & {\n id?: unknown;\n name?: unknown;\n title?: unknown;\n rule?: unknown;\n warning?: unknown;\n }\n >(`/${encodeURIComponent(resolved.id)}`, {\n method: \"PATCH\",\n body: JSON.stringify(body),\n });\n\n const rule = data.rule ? normalizeRuleRecord(data.rule) : undefined;\n return {\n id: readNonEmptyString(data.id) ?? rule?.id ?? resolved.id,\n name: readNonEmptyString(data.name) ?? rule?.name ?? resolved.name,\n title: readNonEmptyString(data.title) ?? rule?.title,\n requestId: readNonEmptyString(data.requestId),\n warning: readNonEmptyString(data.warning),\n updated: true,\n rule,\n };\n }\n\n async delete(identifier: string): Promise<LightRuleDeleteResult> {\n const resolved = await this.resolveIdentifier(identifier);\n const data = await this.request<BusinessResponse & { id?: unknown; name?: unknown }>(\n `/${encodeURIComponent(resolved.id)}`,\n { method: \"DELETE\" },\n );\n return {\n id: readNonEmptyString(data.id) ?? resolved.id,\n name: readNonEmptyString(data.name) ?? resolved.name,\n requestId: readNonEmptyString(data.requestId),\n };\n }\n\n private async resolveIdentifier(identifier: string): Promise<ResolvedIdentifier> {\n const normalized = normalizeLookupIdentifier(identifier);\n if (!normalized) {\n throw new LightRuleApiError(\"INVALID_PARAMS\", \"rule id/name is required\");\n }\n\n const rules = await this.list();\n const found = rules.find((rule) => rule.id === normalized || rule.name === normalized);\n if (!found) {\n throw new LightRuleApiError(\"NOT_FOUND\", `灯效规则 '${normalized}' 不存在`);\n }\n\n return { id: found.id, name: found.name };\n }\n\n private async request<T extends BusinessResponse>(\n path: string,\n init: RequestInit = {},\n ): Promise<T> {\n const url = `${this.baseUrl()}${path}`;\n const startedAt = Date.now();\n const res = await fetch(url, {\n ...init,\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-Api-Key-Id\": this.apiKeyHeader(),\n ...(init.headers ?? {}),\n },\n });\n const text = await res.text();\n let parsed: any = null;\n try {\n parsed = parseJsonResponse(text);\n } catch (err) {\n if (res.ok) throw err;\n }\n\n if (!res.ok) {\n const message =\n readNonEmptyString(parsed?.msg) ??\n readNonEmptyString(parsed?.message) ??\n readNonEmptyString((parsed?.data as BusinessResponse | null | undefined)?.message) ??\n readNonEmptyString(text) ??\n `HTTP ${res.status}`;\n this.deps.logger?.warn(\n `Light rules API: ${init.method ?? \"GET\"} ${url} failed status=${res.status} message=${message}`,\n );\n throw new LightRuleApiError(\n String(res.status),\n decorateRemoteErrorMessage(message, url),\n res.status,\n );\n }\n\n const bean = parsed as ResponseBean<T> | null;\n if (!bean || typeof bean !== \"object\") {\n throw new LightRuleApiError(\"INVALID_RESPONSE\", \"empty or invalid JSON response\");\n }\n\n if (bean.code && bean.code !== \"000000\") {\n throw new LightRuleApiError(bean.code, bean.msg ?? bean.message ?? \"remote request failed\");\n }\n\n const data = (bean.data ?? bean) as T | null;\n if (!data || typeof data !== \"object\") {\n throw new LightRuleApiError(\"INVALID_RESPONSE\", \"response data is empty\");\n }\n\n if (data.success === false) {\n throw new LightRuleApiError(\n \"BUSINESS_FAILED\",\n data.message ?? \"remote business request failed\",\n );\n }\n\n this.deps.logger?.info(\n `Light rules API: ${init.method ?? \"GET\"} ${url} ok elapsedMs=${Date.now() - startedAt}`,\n );\n return data;\n }\n\n private baseUrl(): string {\n const configuredBaseUrl = this.deps.baseUrl?.trim();\n return normalizeNotificationIntelligenceLightRulesPluginUrl(\n configuredBaseUrl ||\n getEnvUrls().notificationIntelligenceLightRulesPluginUrl,\n );\n }\n\n private apiKeyHeader(): string {\n let apiKey: string;\n try {\n apiKey = requireApiKey();\n } catch (err: any) {\n throw new LightRuleApiError(\"AUTH_REQUIRED\", err?.message ?? String(err));\n }\n return apiKey.startsWith(\"Bearer \") ? apiKey.slice(\"Bearer \".length) : apiKey;\n }\n}\n\nfunction normalizeRuleRecord(value: unknown): LightRuleRecord {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new LightRuleApiError(\"INVALID_RESPONSE\", \"invalid light rule item\");\n }\n const raw = value as Partial<LightRuleMeta> & { id?: unknown };\n const name = readNonEmptyString(raw.name);\n const id = readNonEmptyString(raw.id) ?? name;\n if (!id || !name) {\n throw new LightRuleApiError(\"INVALID_RESPONSE\", \"light rule item missing id/name\");\n }\n return {\n ...(raw as LightRuleMeta),\n id,\n name,\n title: readNonEmptyString(raw.title) ?? name,\n type: \"light-rule\",\n description: readNonEmptyString(raw.description) ?? name,\n segments: Array.isArray(raw.segments) ? raw.segments : [],\n repeat_times: typeof raw.repeat_times === \"number\" ? raw.repeat_times : 1,\n enabled: typeof raw.enabled === \"boolean\" ? raw.enabled : true,\n createdAt: readNonEmptyString(raw.createdAt) ?? new Date(0).toISOString(),\n };\n}\n\nfunction sanitizeUpdatePatch(params: LightRuleUpdateParams): Record<string, unknown> {\n const patch: Record<string, unknown> = {};\n for (const key of [\n \"ruleText\",\n \"title\",\n \"description\",\n \"enabled\",\n \"segments\",\n \"repeat_times\",\n \"repeat\",\n ] as const) {\n if (params[key] !== undefined) {\n patch[key] = params[key];\n }\n }\n return patch;\n}\n\nfunction parseJsonResponse(text: string): any {\n if (!text.trim()) return null;\n try {\n return JSON.parse(text);\n } catch (err: any) {\n throw new LightRuleApiError(\n \"INVALID_RESPONSE\",\n `invalid JSON response: ${err?.message ?? String(err)}`,\n );\n }\n}\n\nfunction normalizeLookupIdentifier(value: string): string {\n return value.trim().replace(/\\.json$/i, \"\");\n}\n\nfunction shouldPatchIdentifierDirectly(identifier: string): boolean {\n return /^[A-Za-z0-9][A-Za-z0-9._:-]*$/.test(identifier);\n}\n\nfunction shouldResolveAfterDirectPatch(err: unknown): boolean {\n if (!(err instanceof LightRuleApiError)) return false;\n return err.status === 404 || err.code === \"404\" || err.code === \"NOT_FOUND\";\n}\n\nfunction formatPatchKeys(body: Record<string, unknown>): string {\n const keys = Object.keys(body);\n return keys.length > 0 ? keys.join(\",\") : \"none\";\n}\n\nfunction readNonEmptyString(value: unknown): string | undefined {\n if (typeof value !== \"string\") return undefined;\n const trimmed = value.trim();\n return trimmed || undefined;\n}\n\nfunction decorateRemoteErrorMessage(message: string, url: string): string {\n if (!/jwt is missing/i.test(message)) return message;\n if (url.includes(NOTIFICATION_INTELLIGENCE_LIGHT_RULES_PLUGIN_PATH)) {\n return (\n `${message}。请求已命中插件侧 API ` +\n `${NOTIFICATION_INTELLIGENCE_LIGHT_RULES_PLUGIN_PATH},插件侧鉴权应只使用 ` +\n `X-Api-Key-Id;当前 401 来自云端 JWT 鉴权层,说明该插件前缀没有被网关/服务端放行到 API Key 鉴权。` +\n `请后端检查网关白名单和 Notification Intelligence Service 插件路由:${url}`\n );\n }\n return (\n `${message}。灯效规则应调用插件侧 API ` +\n `/api/plugin/notification-intelligence/light-rules,并通过 X-Api-Key-Id 鉴权;` +\n `当前请求可能命中了 App 端 JWT 接口:${url}`\n );\n}\n",
38
38
  "import type { OpenClawPluginApi } from \"openclaw/plugin-sdk\";\nimport type { Logger } from \"../logger.js\";\nimport { assertAncsRepeatTimes, normalizeRepeatTimes } from \"../light/repeat.js\";\nimport { validateSegments, type ValidationWarning } from \"../light/validators.js\";\nimport { MAX_LIGHT_SEGMENTS } from \"../light/protocol.js\";\nimport { LightRuleApiError, type LightRuleService } from \"../light-rules/client.js\";\nimport { LIGHT_RULE_TOOL_NAMES } from \"../light-rules/names.js\";\nimport type { LightRuleUpdateParams } from \"../light-rules/types.js\";\n\nconst segmentItemSchema = {\n type: \"object\",\n required: [\"mode\", \"duration_s\"],\n additionalProperties: false,\n properties: {\n mode: {\n type: \"string\",\n enum: [\"wave\", \"breath\", \"strobe\", \"steady\", \"color_flow\", \"pixel_frame\"],\n description:\n \"灯效模式:wave 波浪 / breath 呼吸 / strobe 频闪 / steady 常亮 / color_flow 流光 / pixel_frame 逐组像素帧\",\n },\n duration_s: { type: \"number\", minimum: 0, description: \"持续时长(秒),0 表示无限\" },\n brightness: { type: \"number\", minimum: 0, maximum: 255 },\n color: {\n type: \"object\",\n required: [\"r\", \"g\", \"b\"],\n additionalProperties: false,\n properties: {\n r: { type: \"number\", minimum: 0, maximum: 255 },\n g: { type: \"number\", minimum: 0, maximum: 255 },\n b: { type: \"number\", minimum: 0, maximum: 255 },\n },\n },\n interval_ms: { type: \"number\", minimum: 0 },\n direction: { type: \"string\", enum: [\"ltr\", \"rtl\"] },\n window: { type: \"number\", enum: [1, 2, 3] },\n breath_timing: {\n type: \"object\",\n additionalProperties: false,\n properties: {\n rise_ms: { type: \"number\", minimum: 0 },\n hold_ms: { type: \"number\", minimum: 0 },\n fall_ms: { type: \"number\", minimum: 0 },\n off_ms: { type: \"number\", minimum: 0 },\n },\n },\n frames: { type: \"array\", items: { type: \"array\", items: { type: \"number\" } } },\n frame_duration_ms: { type: \"number\", minimum: 0 },\n background: {\n type: \"object\",\n required: [\"r\", \"g\", \"b\"],\n additionalProperties: false,\n properties: {\n r: { type: \"number\", minimum: 0, maximum: 255 },\n g: { type: \"number\", minimum: 0, maximum: 255 },\n b: { type: \"number\", minimum: 0, maximum: 255 },\n brightness: { type: \"number\", minimum: 0, maximum: 255 },\n },\n },\n },\n} as const;\n\nconst segmentsSchema = {\n type: \"array\",\n description: \"灯效段序列,1-12 段,按顺序播放\",\n minItems: 1,\n maxItems: MAX_LIGHT_SEGMENTS,\n items: segmentItemSchema,\n} as const;\n\nfunction ok(data: object): { content: [{ type: \"text\"; text: string }]; details: object } {\n return { content: [{ type: \"text\" as const, text: JSON.stringify(data) }], details: data };\n}\n\nfunction err(\n code: string,\n message: string,\n): { content: [{ type: \"text\"; text: string }]; details: object } {\n const data = { ok: false, error: { code, message } };\n return { content: [{ type: \"text\" as const, text: JSON.stringify(data) }], details: data };\n}\n\nfunction toolError(e: unknown): ReturnType<typeof err> {\n if (e instanceof LightRuleApiError) return err(e.code, e.message);\n const message = e instanceof Error ? e.message : String(e);\n return err(\"INTERNAL_ERROR\", message);\n}\n\nfunction resolveRuleIdentifier(params: unknown): string | undefined {\n if (!params || typeof params !== \"object\") return undefined;\n const raw = params as Record<string, unknown>;\n for (const candidate of [raw.id, raw.name, raw.ruleId, raw.ruleName]) {\n if (typeof candidate !== \"string\") continue;\n const normalized = candidate.trim().replace(/\\.json$/i, \"\");\n if (normalized) return normalized;\n }\n return undefined;\n}\n\nfunction readTrimmedString(value: unknown): string | undefined {\n if (typeof value !== \"string\") return undefined;\n const trimmed = value.trim();\n return trimmed || undefined;\n}\n\nfunction hasAnyPlainUpdateField(params: Record<string, unknown>): boolean {\n return [\n \"title\",\n \"description\",\n \"enabled\",\n \"segments\",\n \"repeat_times\",\n \"repeat\",\n ].some((key) => params[key] !== undefined);\n}\n\nfunction formatPatchKeys(patch: LightRuleUpdateParams): string {\n const keys = Object.keys(patch);\n return keys.length > 0 ? keys.join(\",\") : \"none\";\n}\n\ntype BuildPatchResult =\n | { ok: true; patch: LightRuleUpdateParams; warnings: ValidationWarning[] }\n | { ok: false; code: string; message: string };\n\nfunction buildUpdatePatch(params: Record<string, unknown>): BuildPatchResult {\n const ruleText = readTrimmedString(params.ruleText);\n if (params.ruleText !== undefined) {\n if (!ruleText) {\n return { ok: false, code: \"INVALID_PARAMS\", message: \"ruleText must be a non-empty string\" };\n }\n if (hasAnyPlainUpdateField(params)) {\n return {\n ok: false,\n code: \"INVALID_PARAMS\",\n message:\n \"ruleText cannot be mixed with title/enabled/description/segments/repeat_times/repeat\",\n };\n }\n return { ok: true, patch: { ruleText }, warnings: [] };\n }\n\n const patch: LightRuleUpdateParams = {};\n const warnings: ValidationWarning[] = [];\n\n if (params.title !== undefined) {\n const title = readTrimmedString(params.title);\n if (!title) return { ok: false, code: \"INVALID_PARAMS\", message: \"title must be a non-empty string\" };\n patch.title = title;\n }\n if (params.description !== undefined) {\n if (typeof params.description !== \"string\") {\n return { ok: false, code: \"INVALID_PARAMS\", message: \"description must be a string\" };\n }\n patch.description = params.description;\n }\n if (params.enabled !== undefined) {\n if (typeof params.enabled !== \"boolean\") {\n return { ok: false, code: \"INVALID_PARAMS\", message: \"enabled must be a boolean\" };\n }\n patch.enabled = params.enabled;\n }\n if (params.segments !== undefined) {\n const validation = validateSegments(params.segments);\n if (!validation.valid) {\n return { ok: false, code: \"VALIDATION_FAILED\", message: JSON.stringify(validation.errors) };\n }\n patch.segments = validation.segments;\n warnings.push(...validation.warnings);\n }\n if (params.repeat_times !== undefined || params.repeat !== undefined) {\n if (params.repeat_times !== undefined && typeof params.repeat_times !== \"number\") {\n return { ok: false, code: \"INVALID_PARAMS\", message: \"repeat_times must be a number\" };\n }\n if (params.repeat !== undefined && typeof params.repeat !== \"boolean\") {\n return { ok: false, code: \"INVALID_PARAMS\", message: \"repeat must be a boolean\" };\n }\n try {\n const repeatTimes = normalizeRepeatTimes({\n repeat: params.repeat,\n repeat_times: params.repeat_times,\n });\n assertAncsRepeatTimes(repeatTimes);\n patch.repeat_times = repeatTimes;\n } catch (e: any) {\n return { ok: false, code: \"VALIDATION_FAILED\", message: e?.message ?? \"Unknown error\" };\n }\n }\n\n if (Object.keys(patch).length === 0) {\n return { ok: false, code: \"INVALID_PARAMS\", message: \"at least one update field is required\" };\n }\n\n return { ok: true, patch, warnings };\n}\n\nexport function registerLightRulesTools(\n api: OpenClawPluginApi,\n service: LightRuleService,\n logger: Pick<Logger, \"info\" | \"warn\">,\n): void {\n api.registerTool({\n name: LIGHT_RULE_TOOL_NAMES.list,\n label: \"List Light Rules\",\n description:\n \"列出云端 Notification Intelligence Service 中当前账号的灯效规则(包含 enabled/disabled 状态)。\" +\n \"当用户说“列出灯效规则”“有哪些灯效规则”“查看规则”等时调用。\",\n parameters: { type: \"object\", properties: {}, additionalProperties: false },\n async execute() {\n try {\n const rules = await service.list();\n return ok({ ok: true, rules });\n } catch (e) {\n logger.warn(`${LIGHT_RULE_TOOL_NAMES.list} tool failed: ${(e as Error)?.message}`);\n return toolError(e);\n }\n },\n });\n\n api.registerTool({\n name: LIGHT_RULE_TOOL_NAMES.create,\n label: \"Create Light Rule\",\n description:\n \"创建一条云端持久灯效规则。必须把用户原始自然语言诉求整理成 ruleText 传入,\" +\n \"由 Notification Intelligence Service 的独立 Agent 编译 name/title/description/segments/repeat_times 并保存。\" +\n \"当用户说“收到某类通知/消息时亮灯/闪灯/变灯效”“当老板发消息亮红灯”“新增/创建灯效规则”等时调用。\",\n parameters: {\n type: \"object\",\n required: [\"ruleText\"],\n additionalProperties: false,\n properties: {\n ruleText: {\n type: \"string\",\n description: \"用户原始自然语言规则,例如“老板发微信时红灯快闪”\",\n },\n },\n },\n async execute(_toolCallId, params) {\n const ruleText = readTrimmedString((params as { ruleText?: unknown }).ruleText);\n if (!ruleText) return err(\"INVALID_PARAMS\", \"ruleText is required\");\n\n try {\n const result = await service.create({ ruleText });\n logger.info(`${LIGHT_RULE_TOOL_NAMES.create} tool: created ${result.id}/${result.name}`);\n return ok({\n ok: true,\n id: result.id,\n name: result.name,\n ...(result.warning ? { warning: result.warning } : {}),\n ...(result.requestId ? { requestId: result.requestId } : {}),\n });\n } catch (e) {\n logger.warn(`${LIGHT_RULE_TOOL_NAMES.create} tool failed: ${(e as Error)?.message}`);\n return toolError(e);\n }\n },\n });\n\n api.registerTool({\n name: LIGHT_RULE_TOOL_NAMES.update,\n label: \"Update Light Rule\",\n description:\n \"修改云端灯效规则。优先传 id;如果只知道展示名或 name,先调用 lightrules_list 获取规则列表。\" +\n \"传 ruleText 表示让独立 Agent 重新编译规则语义;传 title/enabled/description/segments/repeat_times 表示普通字段局部更新。\" +\n \"ruleText 不能和普通字段在同一次调用中混用。\",\n parameters: {\n type: \"object\",\n additionalProperties: false,\n anyOf: [\n { required: [\"id\"] },\n { required: [\"name\"] },\n { required: [\"ruleId\"] },\n { required: [\"ruleName\"] },\n ],\n properties: {\n id: { type: \"string\", description: \"云端规则 ID(优先使用)\" },\n name: { type: \"string\", description: \"规则语义化 name,兼容旧调用\" },\n ruleId: { type: \"string\", description: \"规则 ID,兼容字段\" },\n ruleName: { type: \"string\", description: \"规则 name,兼容字段\" },\n ruleText: { type: \"string\", description: \"新的自然语言规则,传入后由独立 Agent 重编译\" },\n title: { type: \"string\", description: \"新的展示名/短标题(可选)\" },\n description: { type: \"string\", description: \"新的触发条件描述(可选)\" },\n enabled: { type: \"boolean\", description: \"true=启用,false=禁用\" },\n segments: { ...segmentsSchema, description: \"新的灯效段序列(可选,不填则保持不变)\" },\n repeat_times: { type: \"number\", description: \"新的重复次数:0=无限循环,1=播放一轮\" },\n repeat: { type: \"boolean\", description: \"历史兼容字段:true=无限循环,false=播放一轮\" },\n },\n },\n async execute(_toolCallId, params) {\n const identifier = resolveRuleIdentifier(params);\n if (!identifier) {\n return err(\"INVALID_PARAMS\", \"id is required; call lightrules_list first if needed\");\n }\n\n const patch = buildUpdatePatch(params as Record<string, unknown>);\n if (!patch.ok) return err(patch.code, patch.message);\n\n try {\n logger.info(\n `${LIGHT_RULE_TOOL_NAMES.update} tool: updating ${identifier} patchKeys=${formatPatchKeys(patch.patch)}`,\n );\n const result = await service.update(identifier, patch.patch);\n logger.info(`${LIGHT_RULE_TOOL_NAMES.update} tool: updated ${identifier}`);\n for (const warning of patch.warnings) {\n logger.warn(\n `${LIGHT_RULE_TOOL_NAMES.update} validation warning [${warning.code}] ${warning.field}: ${warning.message}`,\n );\n }\n return ok({\n ok: true,\n id: result.id,\n name: result.name,\n title: result.title,\n updated: true,\n ...(result.rule ? { rule: result.rule } : {}),\n ...(result.warning ? { warning: result.warning } : {}),\n ...(result.requestId ? { requestId: result.requestId } : {}),\n ...(patch.warnings.length > 0 ? { warnings: patch.warnings } : {}),\n });\n } catch (e) {\n logger.warn(`${LIGHT_RULE_TOOL_NAMES.update} tool failed: ${(e as Error)?.message}`);\n return toolError(e);\n }\n },\n });\n\n api.registerTool({\n name: LIGHT_RULE_TOOL_NAMES.delete,\n label: \"Delete Light Rule\",\n description:\n \"删除一条云端灯效规则(云端当前实现为软删除)。优先传 id;如果不确定 id,先调用 lightrules_list。\",\n parameters: {\n type: \"object\",\n additionalProperties: false,\n anyOf: [\n { required: [\"id\"] },\n { required: [\"name\"] },\n { required: [\"ruleId\"] },\n { required: [\"ruleName\"] },\n ],\n properties: {\n id: { type: \"string\", description: \"云端规则 ID(优先使用)\" },\n name: { type: \"string\", description: \"规则语义化 name,兼容旧调用\" },\n ruleId: { type: \"string\", description: \"规则 ID,兼容字段\" },\n ruleName: { type: \"string\", description: \"规则 name,兼容字段\" },\n },\n },\n async execute(_toolCallId, params) {\n const identifier = resolveRuleIdentifier(params);\n if (!identifier) return err(\"INVALID_PARAMS\", \"id is required\");\n\n try {\n const result = await service.delete(identifier);\n logger.info(`${LIGHT_RULE_TOOL_NAMES.delete} tool: deleted ${result.id}/${result.name}`);\n return ok({\n ok: true,\n id: result.id,\n name: result.name,\n deleted: true,\n ...(result.requestId ? { requestId: result.requestId } : {}),\n });\n } catch (e) {\n logger.warn(`${LIGHT_RULE_TOOL_NAMES.delete} tool failed: ${(e as Error)?.message}`);\n return toolError(e);\n }\n },\n });\n}\n",
39
39
  "/**\n * LightRuleRegistry —— 灯效规则的内存索引 + CRUD 包装\n *\n * 角色定位:\n * - 在事件驱动重构方案下,每条通知到达时都需要拿到\"当前 enabled 的全部规则\"\n * 用来拼装 Agent 的 system prompt。如果每次都扫盘 N 个 meta.json,\n * 5 秒延迟预算会被磨穿,所以引入这个常驻内存的 index。\n * - 同时它是 storage.ts 的 CRUD 包装:所有 create/update/delete 都会先落盘、\n * 再更新内存 Map,保证两者一致。\n *\n * 本类**不**做规则匹配 —— 匹配交给 Agent。registry 只负责\"有哪些规则\"和\n * \"按需拼装 prompt\"。\n *\n * 写路径用一个 promise 链做串行化(最朴素的 mutex),保证并发 CRUD\n * 不会出现\"内存和磁盘交错\"的状态。\n *\n * 见 prd-lightrules-event-driven-refactor.md §数据模型 / §触发流程\n */\n\nimport {\n createLightRule,\n deleteLightRule,\n listLightRules,\n updateLightRule,\n type LightRuleStorageContext,\n} from \"./storage.js\";\nimport type { LightRuleMeta } from \"./types.js\";\n\nexport { LightRuleError } from \"./storage.js\";\n\ntype CreateParams = Parameters<typeof createLightRule>[1];\ntype UpdateParams = Parameters<typeof updateLightRule>[1];\ntype CreateResult = ReturnType<typeof createLightRule>;\ntype UpdateResult = ReturnType<typeof updateLightRule>;\ntype DeleteResult = ReturnType<typeof deleteLightRule>;\n\nexport class LightRuleRegistry {\n private readonly ctx: LightRuleStorageContext;\n /** name → meta 的内存索引;落盘成功后才更新 */\n private readonly index = new Map<string, LightRuleMeta>();\n /** 写路径串行化锁:每次 mutate 都 chain 在前一次之后 */\n private writeChain: Promise<unknown> = Promise.resolve();\n\n constructor(ctx: LightRuleStorageContext) {\n this.ctx = ctx;\n this.reload();\n }\n\n /**\n * 从磁盘重新加载全部规则到内存。仅在构造时和外部显式触发时使用。\n * 正常 CRUD 路径不应该调用本方法 —— 通过 create/update/delete 增量维护即可。\n */\n reload(): void {\n this.index.clear();\n for (const meta of listLightRules(this.ctx)) {\n this.index.set(meta.name, meta);\n }\n }\n\n /** 全部规则(包含 disabled),调用方不要改返回值。 */\n list(): LightRuleMeta[] {\n return Array.from(this.index.values());\n }\n\n /** 仅 enabled 的规则。事件驱动评估链路使用。 */\n getEnabled(): LightRuleMeta[] {\n return this.list().filter((rule) => rule.enabled);\n }\n\n /** 按名字精确查找;不存在返回 null。 */\n get(name: string): LightRuleMeta | null {\n return this.index.get(name) ?? null;\n }\n\n /**\n * 创建规则。落盘成功后再写入内存索引。\n * 失败时 storage 抛 LightRuleError,内存索引保持不变。\n */\n async create(params: CreateParams): Promise<CreateResult> {\n return this.runExclusive(() => {\n const result = createLightRule(this.ctx, params);\n this.index.set(result.meta.name, result.meta);\n return result;\n });\n }\n\n /**\n * 更新规则。落盘成功后再刷新内存条目。\n */\n async update(params: UpdateParams): Promise<UpdateResult> {\n return this.runExclusive(() => {\n const result = updateLightRule(this.ctx, params);\n this.index.set(result.meta.name, result.meta);\n return result;\n });\n }\n\n /**\n * 删除规则。落盘成功后再从内存索引移除。\n */\n async delete(name: string): Promise<DeleteResult> {\n return this.runExclusive(() => {\n const result = deleteLightRule(this.ctx, name);\n this.index.delete(result.name);\n return result;\n });\n }\n\n /**\n * 拼装 Agent 评估用的 system prompt。\n *\n * 当前实现是一个最小可用骨架:列出全部 enabled 规则的 title + name + description。\n * M3 接入真实 Agent 链路时,会按 prd-lightrules-event-driven-refactor.md §Prompt 拼装\n * 的模板补齐\"任务说明 / 输出约束\"等段落。\n *\n * 现在先把方法签名冻结,避免后续散落在多个调用点。\n */\n buildSystemPrompt(): string {\n const enabled = this.getEnabled();\n if (enabled.length === 0) {\n return \"当前没有启用任何灯效规则。\";\n }\n\n const lines: string[] = [\n '你是一个判断\"通知 → 灯效规则\"是否命中的助手。',\n \"\",\n \"下面是用户当前启用的全部灯效规则(按创建时间倒序):\",\n \"\",\n ];\n\n const sorted = [...enabled].sort((a, b) =>\n (b.createdAt ?? \"\").localeCompare(a.createdAt ?? \"\"),\n );\n\n sorted.forEach((rule, idx) => {\n lines.push(\n `[${idx + 1}] title: ${rule.title}`,\n ` name: ${rule.name}`,\n ` description: ${rule.description}`,\n \"\",\n );\n });\n\n lines.push(\n '任务:根据用户接下来发给你的\"通知\"内容,判断哪些规则被命中。',\n \"- 命中 0 条:不调用任何工具,直接结束。\",\n \"- 命中 1 条或多条:对每一条命中的规则调用一次 trigger_light(rule_name)。\",\n \"- 不要回复任何自由文本;判定结果**只**通过 tool calling 表达。\",\n '- 拿不准的时候倾向于\"不触发\",避免骚扰用户。',\n );\n\n return lines.join(\"\\n\");\n }\n\n /**\n * 把一段同步操作排队进 write chain,保证 mutate 串行执行。\n *\n * 用 promise 链做 mutex 是最简单的方案:每次 runExclusive 都把\n * `writeChain` 推进一步。即使前一个任务失败,链也会继续往下走,\n * 后续任务不会被永久阻塞。\n */\n private runExclusive<T>(fn: () => T): Promise<T> {\n const next = this.writeChain.then(\n () => fn(),\n () => fn(),\n );\n // 不让链上的失败传播下去(已在 then 的 onRejected 回调里吸收)\n this.writeChain = next.catch(() => undefined);\n return next;\n }\n}\n",
40
- "import type { OpenClawPluginApi } from \"openclaw/plugin-sdk\";\nimport type { Logger } from \"./logger.js\";\nimport {\n createVersionAwareLogger,\n PluginFileLogger as PluginLogger,\n} from \"./logger.js\";\nimport {\n RecordingStorage,\n type RecordingStatusEvent,\n} from \"./recording/index.js\";\nimport { ImageStorage } from \"./image/index.js\";\nimport {\n NOTIFICATION_SUMMARY_RESULT_EVENT,\n NOTIFICATION_SUMMARY_STATUS_EVENT,\n type NotificationSummaryResultEvent,\n type NotificationSummaryStatusEvent,\n} from \"./notification/summary.js\";\nimport {\n getStateFallbackNotificationDir,\n type NotificationStorage,\n} from \"./notification/storage.js\";\nimport { registerLightRulesGateway } from \"./light-rules/gateway.js\";\nimport {\n LIGHT_RULE_GATEWAY_METHOD_LIST,\n LIGHT_RULE_TOOL_NAME_LIST,\n LIGHT_RULE_TOOL_NAMES,\n} from \"./light-rules/names.js\";\nimport { registerLightRulesTools } from \"./plugin/light-rules-tools.js\";\nimport { NotificationIntelligenceLightRuleClient } from \"./light-rules/client.js\";\nimport { LightRuleRegistry } from \"./light-rules/registry.js\";\nimport { join } from \"node:path\";\nimport { registerAutoUpdateLifecycle } from \"./plugin/auto-update.js\";\nimport { registerPluginCli } from \"./plugin/cli.js\";\nimport { ensureNtfBinInstalled } from \"./plugin/ntf-bin.js\";\n\n// 解析 plugin 自身安装目录。多个方案都被 bun build 静态求值(坑):\n// - import.meta.url 被替换成 build 机器源码绝对路径\n// - module.path 被替换成 \"src/index.ts\"\n// - __dirname 被 bun 在 bundle 顶部注入的 `var __dirname = \"<src>\"` 屏蔽\n// 解法:scripts/build.ts 后处理时把 bun 注入的 `var __dirname = ...` 行删掉,\n// 让 Node CJS module wrapper 注入的真值(dist/ 所在目录)生效。\ndeclare const __dirname: string;\nimport {\n registerRelayTunnelLifecycle,\n registerStorageLifecycle,\n} from \"./plugin/lifecycle.js\";\nimport { registerNotificationInterfaces } from \"./plugin/notifications.js\";\nimport { registerRecordingInterfaces } from \"./plugin/recordings.js\";\nimport { registerImageInterfaces } from \"./plugin/images.js\";\nimport { isPluginCliInvocation } from \"./plugin/runtime-mode.js\";\nimport { resolvePluginStateDir } from \"./plugin/runtime-state.js\";\nimport { resolveStateDir } from \"./host.js\";\nimport type { GatewayHandler } from \"./plugin/shared.js\";\nimport { RELAY_TUNNEL_GATEWAY_CLIENT_INSTANCE_ID } from \"./tunnel/proxy.js\";\nimport type { PluginConfig, RawNotification } from \"./types.js\";\nimport type { BroadcastFn } from \"./update/types.js\";\n\nconst LIGHT_RULE_PROMPT_GUIDANCE = [\n \"灯效规则路由提示:\",\n `- 当用户表达“收到/当/如果/有某类通知或消息时,亮灯/闪灯/变成某种灯效”时,这是云端持久灯效规则请求,必须调用 ${LIGHT_RULE_TOOL_NAMES.create} 或 ${LIGHT_RULE_TOOL_NAMES.update}。`,\n \"- 创建规则时把用户的自然语言诉求整理成 ruleText;由 Notification Intelligence Service 的独立 Agent 编译和保存规则。\",\n \"- 灯效规则的创建、修改、删除和查询都走 lightrules_* 工具;不要手写或编辑 tasks/*/meta.json。\",\n \"- 如果 lightrules_* 工具返回错误,必须如实说明本次查询/修改失败;不要使用聊天历史或旧 toolResult 里的规则列表冒充当前云端结果。\",\n \"- 插件不再提供 OpenClaw 层的一次性 light_control,下发、评估和亮灯原因由云端服务处理。\",\n].join(\"\\n\");\n\nexport default {\n id: \"phone-notifications\",\n name: \"Phone Notifications & Light Control\",\n\n register(api: OpenClawPluginApi) {\n const config = (api.pluginConfig ?? {}) as PluginConfig;\n const ignoredApps = new Set(config.ignoredApps ?? []);\n\n let storage: NotificationStorage | null = null;\n let recordingStorage: RecordingStorage | null = null;\n let imageStorage: ImageStorage | null = null;\n let broadcastFn: BroadcastFn | null = null;\n let autoUpdateLifecycle: ReturnType<typeof registerAutoUpdateLifecycle> | null = null;\n let tunnelService: ReturnType<typeof registerRelayTunnelLifecycle> = null;\n\n const openclawDir = resolvePluginStateDir(api);\n const logger: Logger = openclawDir\n ? new PluginLogger(api.logger, openclawDir)\n : createVersionAwareLogger(api.logger);\n\n const asrDataDir =\n openclawDir ??\n resolveStateDir() ??\n process.cwd();\n\n // jvsclaw 线上通道会直接解压 tgz,不走 install-jvsclaw.sh/npm link。\n // 因此独立 `ntf` 命令需要在任何注册模式下自修复,包括 `openclaw ntf ...`\n // 这种 CLI-only 加载路径。\n ensureNtfBinInstalled({\n ntfCjsPath: join(__dirname, \"bin\", \"ntf.cjs\"),\n stateDir: openclawDir,\n logger,\n });\n\n if (isPluginCliInvocation()) {\n registerPluginCli(api, {\n logger,\n openclawDir,\n });\n logger.info(\n \"检测到插件 CLI 命令执行上下文,仅注册 CLI,跳过后台服务以避免影响 Relay tunnel 常驻连接\",\n );\n return;\n }\n\n api.on(\"before_prompt_build\", () => ({\n appendSystemContext: LIGHT_RULE_PROMPT_GUIDANCE,\n }));\n\n function cacheBroadcast(broadcast: BroadcastFn | undefined): void {\n if (!broadcast) {\n return;\n }\n\n const changed = broadcastFn !== broadcast;\n broadcastFn = broadcast;\n if (changed) {\n autoUpdateLifecycle?.notifyBroadcastReady();\n }\n }\n\n function isDirectMobileGatewayRequest(\n opts: Parameters<GatewayHandler>[0],\n ): boolean {\n const client = opts.client?.connect?.client;\n if (!client) return false;\n if (client.instanceId === RELAY_TUNNEL_GATEWAY_CLIENT_INSTANCE_ID) {\n return false;\n }\n return client.id === \"openclaw-ios\" || client.id === \"openclaw-android\";\n }\n\n async function deactivateRelayForDirectGatewayRequest(\n method: string,\n opts: Parameters<GatewayHandler>[0],\n ): Promise<void> {\n if (!tunnelService || !isDirectMobileGatewayRequest(opts)) return;\n\n const client = opts.client?.connect?.client;\n try {\n await tunnelService.deactivateForExternalTunnel(\n `gateway method ${method} from ${client?.id ?? \"unknown\"}`,\n );\n } catch (err: any) {\n logger.warn(\n `Relay tunnel: failed to deactivate after direct gateway method ${method}: ${err?.message ?? String(err)}`,\n );\n }\n }\n\n function registerGatewayMethodWithBroadcastCapture(\n method: string,\n handler: GatewayHandler,\n ): void {\n api.registerGatewayMethod(method, async (opts) => {\n cacheBroadcast(opts.context?.broadcast);\n await deactivateRelayForDirectGatewayRequest(method, opts);\n return handler(opts);\n });\n }\n\n function filterNotifications(items: RawNotification[]): RawNotification[] {\n return items.filter((notification) => !ignoredApps.has(notification.app));\n }\n\n function notifyRecordingStatus(event: RecordingStatusEvent): void {\n const relayEmitted =\n tunnelService?.emitEvent(\"recording.status\", event) ?? false;\n\n if (!broadcastFn) {\n if (relayEmitted) return;\n logger.warn(\n `[recording.status] broadcast 不可用,跳过状态事件: ${event.recordingId} -> ${event.transfer_status}`,\n );\n return;\n }\n\n broadcastFn(\"recording.status\", event);\n }\n\n function notifyNotificationSummaryStatus(\n event: NotificationSummaryStatusEvent,\n ): void {\n const relayEmitted =\n tunnelService?.emitEvent(NOTIFICATION_SUMMARY_STATUS_EVENT, event)\n ?? false;\n\n if (!broadcastFn) {\n if (relayEmitted) return;\n if (event.phase === \"failed\") {\n logger.warn(\n `[${NOTIFICATION_SUMMARY_STATUS_EVENT}] broadcast 不可用,跳过失败状态事件: ${event.jobId}`,\n );\n }\n return;\n }\n\n broadcastFn(NOTIFICATION_SUMMARY_STATUS_EVENT, event);\n }\n\n function notifyNotificationSummaryResult(\n event: NotificationSummaryResultEvent,\n ): void {\n const relayEmitted =\n tunnelService?.emitEvent(NOTIFICATION_SUMMARY_RESULT_EVENT, event)\n ?? false;\n\n if (!broadcastFn) {\n if (relayEmitted) return;\n if (event.status === \"failed\") {\n logger.warn(\n `[${NOTIFICATION_SUMMARY_RESULT_EVENT}] broadcast 不可用,跳过失败结果事件: ${event.jobId}`,\n );\n }\n return;\n }\n\n broadcastFn(NOTIFICATION_SUMMARY_RESULT_EVENT, event);\n }\n\n // Agent 工具走云端 Notification Intelligence Service;WS gateway 方法走本地\n // LightRuleRegistry(落盘 tasks/*/meta.json),两者各自独立。\n const lightRuleClient = new NotificationIntelligenceLightRuleClient({ logger });\n const lightRuleCtx: { workspaceDir?: string; stateDir?: string } = {\n stateDir: openclawDir,\n };\n const lightRuleRegistry = new LightRuleRegistry(lightRuleCtx);\n\n registerStorageLifecycle({\n api,\n logger,\n lightRuleCtx,\n setStorage(nextStorage) {\n storage = nextStorage;\n },\n setRecordingStorage(nextRecordingStorage) {\n recordingStorage = nextRecordingStorage;\n },\n setImageStorage(nextImageStorage) {\n imageStorage = nextImageStorage;\n },\n onStorageReady() {\n // storage service start 完成后 lightRuleCtx 才被回填到真实 workspaceDir,\n // 此时重新扫盘加载已有规则。\n lightRuleRegistry.reload();\n },\n });\n\n tunnelService = registerRelayTunnelLifecycle({\n api,\n config,\n logger,\n openclawDir,\n });\n\n registerNotificationInterfaces({\n api,\n logger,\n getStorage: () => storage,\n summaryNotificationsDir: getStateFallbackNotificationDir(openclawDir),\n filterNotifications,\n registerGatewayMethod: registerGatewayMethodWithBroadcastCapture,\n notifyNotificationSummaryStatus,\n notifyNotificationSummaryResult,\n tunnelService,\n });\n\n registerRecordingInterfaces({\n api,\n logger,\n asrDataDir,\n getRecordingStorage: () => recordingStorage,\n notifyRecordingStatus,\n registerGatewayMethod: registerGatewayMethodWithBroadcastCapture,\n shouldBroadcastStatusOnHttp: () => !!broadcastFn,\n tunnelService,\n });\n\n registerImageInterfaces({\n api,\n logger,\n getImageStorage: () => imageStorage,\n registerGatewayMethod: registerGatewayMethodWithBroadcastCapture,\n maxBytes: config.image?.maxBytes ?? 0,\n tunnelService,\n });\n\n registerLightRulesGateway(api, lightRuleRegistry, logger, cacheBroadcast);\n registerLightRulesTools(api, lightRuleClient, logger);\n logger.info(\n `灯效规则方法已注册: gateway=${LIGHT_RULE_GATEWAY_METHOD_LIST.join(\", \")}; tools=${LIGHT_RULE_TOOL_NAME_LIST.join(\", \")}`,\n );\n\n autoUpdateLifecycle = registerAutoUpdateLifecycle({\n api,\n config,\n logger,\n getBroadcastFn: () => broadcastFn,\n cacheBroadcast,\n tunnelService,\n });\n\n registerPluginCli(api, {\n logger,\n openclawDir,\n });\n },\n};\n",
40
+ "import type { OpenClawPluginApi } from \"openclaw/plugin-sdk\";\nimport type { Logger } from \"./logger.js\";\nimport {\n createVersionAwareLogger,\n PluginFileLogger as PluginLogger,\n} from \"./logger.js\";\nimport {\n RecordingStorage,\n type RecordingStatusEvent,\n} from \"./recording/index.js\";\nimport { ImageStorage } from \"./image/index.js\";\nimport {\n NOTIFICATION_SUMMARY_RESULT_EVENT,\n NOTIFICATION_SUMMARY_STATUS_EVENT,\n type NotificationSummaryResultEvent,\n type NotificationSummaryStatusEvent,\n} from \"./notification/summary.js\";\nimport {\n getStateFallbackNotificationDir,\n type NotificationStorage,\n} from \"./notification/storage.js\";\nimport { registerLightRulesGateway } from \"./light-rules/gateway.js\";\nimport {\n LIGHT_RULE_GATEWAY_METHOD_LIST,\n LIGHT_RULE_TOOL_NAME_LIST,\n LIGHT_RULE_TOOL_NAMES,\n} from \"./light-rules/names.js\";\nimport { registerLightRulesTools } from \"./plugin/light-rules-tools.js\";\nimport { NotificationIntelligenceLightRuleClient } from \"./light-rules/client.js\";\nimport { LightRuleRegistry } from \"./light-rules/registry.js\";\nimport { join } from \"node:path\";\nimport { registerAutoUpdateLifecycle } from \"./plugin/auto-update.js\";\nimport { registerPluginCli } from \"./plugin/cli.js\";\nimport { ensureNtfBinInstalled } from \"./plugin/ntf-bin.js\";\n\n// 解析 plugin 自身安装目录。多个方案都被 bun build 静态求值(坑):\n// - import.meta.url 被替换成 build 机器源码绝对路径\n// - module.path 被替换成 \"src/index.ts\"\n// - __dirname 被 bun 在 bundle 顶部注入的 `var __dirname = \"<src>\"` 屏蔽\n// 解法:scripts/build.ts 后处理时把 bun 注入的 `var __dirname = ...` 行删掉,\n// 让 Node CJS module wrapper 注入的真值(dist/ 所在目录)生效。\ndeclare const __dirname: string;\nimport {\n registerRelayTunnelLifecycle,\n registerStorageLifecycle,\n} from \"./plugin/lifecycle.js\";\nimport { registerNotificationInterfaces } from \"./plugin/notifications.js\";\nimport { registerRecordingInterfaces } from \"./plugin/recordings.js\";\nimport { registerImageInterfaces } from \"./plugin/images.js\";\nimport { isPluginCliInvocation } from \"./plugin/runtime-mode.js\";\nimport { resolvePluginStateDir } from \"./plugin/runtime-state.js\";\nimport type { GatewayHandler } from \"./plugin/shared.js\";\nimport { RELAY_TUNNEL_GATEWAY_CLIENT_INSTANCE_ID } from \"./tunnel/proxy.js\";\nimport type { PluginConfig, RawNotification } from \"./types.js\";\nimport type { BroadcastFn } from \"./update/types.js\";\n\nconst LIGHT_RULE_PROMPT_GUIDANCE = [\n \"灯效规则路由提示:\",\n `- 当用户表达“收到/当/如果/有某类通知或消息时,亮灯/闪灯/变成某种灯效”时,这是云端持久灯效规则请求,必须调用 ${LIGHT_RULE_TOOL_NAMES.create} 或 ${LIGHT_RULE_TOOL_NAMES.update}。`,\n \"- 创建规则时把用户的自然语言诉求整理成 ruleText;由 Notification Intelligence Service 的独立 Agent 编译和保存规则。\",\n \"- 灯效规则的创建、修改、删除和查询都走 lightrules_* 工具;不要手写或编辑 tasks/*/meta.json。\",\n \"- 如果 lightrules_* 工具返回错误,必须如实说明本次查询/修改失败;不要使用聊天历史或旧 toolResult 里的规则列表冒充当前云端结果。\",\n \"- 插件不再提供 OpenClaw 层的一次性 light_control,下发、评估和亮灯原因由云端服务处理。\",\n].join(\"\\n\");\n\nexport default {\n id: \"phone-notifications\",\n name: \"Phone Notifications & Light Control\",\n\n register(api: OpenClawPluginApi) {\n const config = (api.pluginConfig ?? {}) as PluginConfig;\n const ignoredApps = new Set(config.ignoredApps ?? []);\n\n let storage: NotificationStorage | null = null;\n let recordingStorage: RecordingStorage | null = null;\n let imageStorage: ImageStorage | null = null;\n let broadcastFn: BroadcastFn | null = null;\n let autoUpdateLifecycle: ReturnType<typeof registerAutoUpdateLifecycle> | null = null;\n let tunnelService: ReturnType<typeof registerRelayTunnelLifecycle> = null;\n\n const openclawDir = resolvePluginStateDir(api);\n const logger: Logger = openclawDir\n ? new PluginLogger(api.logger, openclawDir)\n : createVersionAwareLogger(api.logger);\n\n\n // jvsclaw 线上通道会直接解压 tgz,不走 install-jvsclaw.sh/npm link。\n // 因此独立 `ntf` 命令需要在任何注册模式下自修复,包括 `openclaw ntf ...`\n // 这种 CLI-only 加载路径。\n ensureNtfBinInstalled({\n ntfCjsPath: join(__dirname, \"bin\", \"ntf.cjs\"),\n stateDir: openclawDir,\n logger,\n });\n\n if (isPluginCliInvocation()) {\n registerPluginCli(api, {\n logger,\n openclawDir,\n });\n logger.info(\n \"检测到插件 CLI 命令执行上下文,仅注册 CLI,跳过后台服务以避免影响 Relay tunnel 常驻连接\",\n );\n return;\n }\n\n api.on(\"before_prompt_build\", () => ({\n appendSystemContext: LIGHT_RULE_PROMPT_GUIDANCE,\n }));\n\n function cacheBroadcast(broadcast: BroadcastFn | undefined): void {\n if (!broadcast) {\n return;\n }\n\n const changed = broadcastFn !== broadcast;\n broadcastFn = broadcast;\n if (changed) {\n autoUpdateLifecycle?.notifyBroadcastReady();\n }\n }\n\n function isDirectMobileGatewayRequest(\n opts: Parameters<GatewayHandler>[0],\n ): boolean {\n const client = opts.client?.connect?.client;\n if (!client) return false;\n if (client.instanceId === RELAY_TUNNEL_GATEWAY_CLIENT_INSTANCE_ID) {\n return false;\n }\n return client.id === \"openclaw-ios\" || client.id === \"openclaw-android\";\n }\n\n async function deactivateRelayForDirectGatewayRequest(\n method: string,\n opts: Parameters<GatewayHandler>[0],\n ): Promise<void> {\n if (!tunnelService || !isDirectMobileGatewayRequest(opts)) return;\n\n const client = opts.client?.connect?.client;\n try {\n await tunnelService.deactivateForExternalTunnel(\n `gateway method ${method} from ${client?.id ?? \"unknown\"}`,\n );\n } catch (err: any) {\n logger.warn(\n `Relay tunnel: failed to deactivate after direct gateway method ${method}: ${err?.message ?? String(err)}`,\n );\n }\n }\n\n function registerGatewayMethodWithBroadcastCapture(\n method: string,\n handler: GatewayHandler,\n ): void {\n api.registerGatewayMethod(method, async (opts) => {\n cacheBroadcast(opts.context?.broadcast);\n await deactivateRelayForDirectGatewayRequest(method, opts);\n return handler(opts);\n });\n }\n\n function filterNotifications(items: RawNotification[]): RawNotification[] {\n return items.filter((notification) => !ignoredApps.has(notification.app));\n }\n\n function notifyRecordingStatus(event: RecordingStatusEvent): void {\n const relayEmitted =\n tunnelService?.emitEvent(\"recording.status\", event) ?? false;\n\n if (!broadcastFn) {\n if (relayEmitted) return;\n logger.warn(\n `[recording.status] broadcast 不可用,跳过状态事件: ${event.recordingId} -> ${event.transfer_status}`,\n );\n return;\n }\n\n broadcastFn(\"recording.status\", event);\n }\n\n function notifyNotificationSummaryStatus(\n event: NotificationSummaryStatusEvent,\n ): void {\n const relayEmitted =\n tunnelService?.emitEvent(NOTIFICATION_SUMMARY_STATUS_EVENT, event)\n ?? false;\n\n if (!broadcastFn) {\n if (relayEmitted) return;\n if (event.phase === \"failed\") {\n logger.warn(\n `[${NOTIFICATION_SUMMARY_STATUS_EVENT}] broadcast 不可用,跳过失败状态事件: ${event.jobId}`,\n );\n }\n return;\n }\n\n broadcastFn(NOTIFICATION_SUMMARY_STATUS_EVENT, event);\n }\n\n function notifyNotificationSummaryResult(\n event: NotificationSummaryResultEvent,\n ): void {\n const relayEmitted =\n tunnelService?.emitEvent(NOTIFICATION_SUMMARY_RESULT_EVENT, event)\n ?? false;\n\n if (!broadcastFn) {\n if (relayEmitted) return;\n if (event.status === \"failed\") {\n logger.warn(\n `[${NOTIFICATION_SUMMARY_RESULT_EVENT}] broadcast 不可用,跳过失败结果事件: ${event.jobId}`,\n );\n }\n return;\n }\n\n broadcastFn(NOTIFICATION_SUMMARY_RESULT_EVENT, event);\n }\n\n // Agent 工具走云端 Notification Intelligence Service;WS gateway 方法走本地\n // LightRuleRegistry(落盘 tasks/*/meta.json),两者各自独立。\n const lightRuleClient = new NotificationIntelligenceLightRuleClient({ logger });\n const lightRuleCtx: { workspaceDir?: string; stateDir?: string } = {\n stateDir: openclawDir,\n };\n const lightRuleRegistry = new LightRuleRegistry(lightRuleCtx);\n\n registerStorageLifecycle({\n api,\n logger,\n lightRuleCtx,\n setStorage(nextStorage) {\n storage = nextStorage;\n },\n setRecordingStorage(nextRecordingStorage) {\n recordingStorage = nextRecordingStorage;\n },\n setImageStorage(nextImageStorage) {\n imageStorage = nextImageStorage;\n },\n onStorageReady() {\n // storage service start 完成后 lightRuleCtx 才被回填到真实 workspaceDir,\n // 此时重新扫盘加载已有规则。\n lightRuleRegistry.reload();\n },\n });\n\n tunnelService = registerRelayTunnelLifecycle({\n api,\n config,\n logger,\n openclawDir,\n });\n\n registerNotificationInterfaces({\n api,\n logger,\n getStorage: () => storage,\n summaryNotificationsDir: getStateFallbackNotificationDir(openclawDir),\n filterNotifications,\n registerGatewayMethod: registerGatewayMethodWithBroadcastCapture,\n notifyNotificationSummaryStatus,\n notifyNotificationSummaryResult,\n tunnelService,\n });\n\n registerRecordingInterfaces({\n api,\n logger,\n getRecordingStorage: () => recordingStorage,\n notifyRecordingStatus,\n registerGatewayMethod: registerGatewayMethodWithBroadcastCapture,\n tunnelService,\n });\n\n registerImageInterfaces({\n api,\n logger,\n getImageStorage: () => imageStorage,\n registerGatewayMethod: registerGatewayMethodWithBroadcastCapture,\n maxBytes: config.image?.maxBytes ?? 0,\n tunnelService,\n });\n\n registerLightRulesGateway(api, lightRuleRegistry, logger, cacheBroadcast);\n registerLightRulesTools(api, lightRuleClient, logger);\n logger.info(\n `灯效规则方法已注册: gateway=${LIGHT_RULE_GATEWAY_METHOD_LIST.join(\", \")}; tools=${LIGHT_RULE_TOOL_NAME_LIST.join(\", \")}`,\n );\n\n autoUpdateLifecycle = registerAutoUpdateLifecycle({\n api,\n config,\n logger,\n getBroadcastFn: () => broadcastFn,\n cacheBroadcast,\n tunnelService,\n });\n\n registerPluginCli(api, {\n logger,\n openclawDir,\n });\n },\n};\n",
41
41
  "import type { EnvName } from \"../env.js\";\nimport type { AutoUpdateConfig } from \"./types.js\";\n\nexport const PRODUCTION_UPDATE_BASE_URL = \"https://artifact.yoooclaw.com/plugin\";\nexport const TEST_UPDATE_BASE_URL = \"https://artifacts-test.yoooclaw.com/plugin\";\n\n/**\n * 解析自动更新频道。\n *\n * 默认规则:\n * - 生产环境的正式安装走 latest,避免正式客户端收到 beta 更新推送\n * - 生产环境的预发布安装继续走 beta,避免 beta 客户端漏掉后续修复\n * - 非生产环境用户显式配置时,以配置为准\n * - 非生产环境默认走 beta\n */\nexport function resolveUpdateChannel(params: {\n configuredChannel?: AutoUpdateConfig[\"channel\"];\n envName: EnvName;\n installedVersion?: string;\n}): \"latest\" | \"beta\" {\n if (params.envName === \"production\") {\n return params.installedVersion?.includes(\"-\") ? \"beta\" : \"latest\";\n }\n\n if (params.configuredChannel) {\n return params.configuredChannel;\n }\n\n return \"beta\";\n}\n\n/**\n * beta 订阅者同时检查 latest,确保正式版转正后能从 prerelease 平滑升级。\n * latest 订阅者只检查正式版,避免稳定安装收到 beta 推送。\n */\nexport function resolveUpdateTags(channel: \"latest\" | \"beta\"): ReadonlyArray<\"latest\" | \"beta\"> {\n return channel === \"beta\" ? [\"latest\", \"beta\"] : [\"latest\"];\n}\n\n/** 解析自动更新制品源。生产默认走正式 OSS;测试环境默认走测试 OSS;其它环境可显式配置。 */\nexport function resolveUpdateBaseUrl(params: {\n configuredBaseUrl?: AutoUpdateConfig[\"baseUrl\"];\n envName: EnvName;\n}): string {\n const configured = params.configuredBaseUrl?.trim().replace(/\\/+$/, \"\");\n if (configured) return configured;\n\n if (params.envName === \"test\") {\n return TEST_UPDATE_BASE_URL;\n }\n\n return PRODUCTION_UPDATE_BASE_URL;\n}\n",
42
- "import { readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { OpenClawPluginApi } from \"openclaw/plugin-sdk\";\nimport type { Logger } from \"../logger.js\";\nimport { resolvePluginStateDir } from \"../plugin/runtime-state.js\";\nimport { PLUGIN_VERSION } from \"../version.js\";\nimport { PRODUCTION_UPDATE_BASE_URL } from \"./channel.js\";\nimport { isNewerVersion } from \"./semver.js\";\nimport type {\n AutoUpdateConfig,\n BroadcastFn,\n ExternalUpdateNotifier,\n UpdateInfo,\n} from \"./types.js\";\nimport { UpdateChecker } from \"./checker.js\";\nimport {\n buildLastUpdateNotice,\n applyPreparedUpdate,\n cleanupPendingDir,\n executeUpdate,\n markLastUpdateReconciled,\n markLastUpdateRestartStatus,\n readLastUpdateStatus,\n startPreparedUpdater,\n} from \"./executor.js\";\nimport { planGatewayRestart } from \"./restart.js\";\n\nconst PLUGIN_ID = \"phone-notifications\";\nconst VERSION_PATTERN = /^\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?$/;\n\n/**\n * Windows 上:\n * - Node 进程 emit SIGUSR1 后宿主常会立刻退出(含 process.exit / spawn replacement),\n * 而 Windows IPC(named pipe / TCP loopback)的 socket flush 比 Unix domain socket\n * 慢得多,1.5s grace 也不足以保证 RPC 回复字节先离开当前进程。\n * - 实测:插件在 Windows 上目录替换成功了,但 app 收不到 plugin.update 的回复。\n * - 取舍:Windows 直接走\"手动重启\"路径——spawn detached updater 等待父进程退出,\n * 然后明确提示用户手动重启 openclaw/gateway。这样 respond 永远不会被 gateway\n * 退出打断;用户手动重启时 updater 自然接管目录替换。\n */\nfunction shouldSkipAutoRestart(): boolean {\n return process.platform === \"win32\";\n}\n\nfunction shouldSuppressUpdateNotifications(): boolean {\n return process.platform === \"win32\";\n}\n\nfunction resolveTargetDir(api: OpenClawPluginApi): string {\n try {\n const cfg = (api.runtime as any).config?.loadConfig?.();\n const installPath = cfg?.plugins?.installs?.[PLUGIN_ID]?.installPath;\n if (installPath) return installPath;\n } catch { /* ignore */ }\n return join(resolvePluginStateDir(api), \"extensions\", PLUGIN_ID);\n}\n\nasync function updateConfigRecord(\n api: OpenClawPluginApi,\n version: string,\n targetDir: string,\n tgzUrl: string,\n): Promise<void> {\n const configApi = (api.runtime as any).config;\n if (!configApi) return;\n const cfg = configApi.loadConfig();\n if (!cfg.plugins) cfg.plugins = {};\n if (!cfg.plugins.installs) cfg.plugins.installs = {};\n cfg.plugins.installs[PLUGIN_ID] = {\n ...cfg.plugins.installs[PLUGIN_ID],\n source: \"archive\" as const,\n sourcePath: tgzUrl,\n installPath: targetDir,\n version,\n installedAt: new Date().toISOString(),\n };\n await configApi.writeConfigFile(cfg);\n}\n\n/**\n * 在\"不依赖 gateway 自动重启\"的平台上落地更新:\n * - 同步 spawn detached updater(等父进程退出后接管目录替换)。\n * - 状态文件维持 status=pending,restartStatus 由调用方决定。\n * - 返回带\"请手动重启\"文案的 result;spawn 失败时返回 success=false。\n */\nfunction applyManualRestart(\n logger: Logger,\n result: Awaited<ReturnType<typeof executeUpdate>>,\n targetDir: string,\n): Awaited<ReturnType<typeof executeUpdate>> {\n const version = result.version ?? \"目标版本\";\n try {\n if (result.preparedStatus) {\n startPreparedUpdater(result.preparedStatus);\n }\n markLastUpdateRestartStatus(targetDir, \"pending\", {\n suggestion: \"Windows 不支持自动重启 gateway,请手动重启后更新生效。\",\n nextActions: [\"手动重启 openclaw/gateway\", \"重启完成后插件会自动应用新版本\"],\n });\n return {\n ...result,\n restartScheduled: false,\n suggestion: \"Windows 不支持自动重启 gateway,请手动重启后更新生效。\",\n nextActions: [\"手动重启 openclaw/gateway\", \"重启完成后插件会自动应用新版本\"],\n message: `已准备更新到 ${version},请手动重启 openclaw/gateway 后生效`,\n };\n } catch (err) {\n logger.warn(`启动后台 updater 失败: ${String(err)}`);\n cleanupPendingDir(result.preparedStatus);\n const errorMessage = err instanceof Error ? err.message : String(err);\n const suggestion = \"后台安装进程启动失败,更新尚未应用。请稍后重试。\";\n const nextActions = [\"稍后重试更新\", \"如果持续失败,请复制错误信息反馈给维护者\"];\n markLastUpdateRestartStatus(targetDir, \"failed\", {\n error: errorMessage,\n suggestion,\n nextActions,\n });\n return {\n ...result,\n success: false,\n restartScheduled: false,\n error: errorMessage,\n suggestion,\n nextActions,\n message: `更新准备完成但后台安装进程启动失败:${errorMessage}`,\n };\n }\n}\n\nfunction finalizeUpdateResult(\n api: OpenClawPluginApi,\n logger: Logger,\n result: Awaited<ReturnType<typeof executeUpdate>>,\n targetDir: string,\n): Awaited<ReturnType<typeof executeUpdate>> {\n if (!result.success) {\n return result;\n }\n\n if (shouldSkipAutoRestart()) {\n return applyManualRestart(logger, result, targetDir);\n }\n\n const restartPlan = planGatewayRestart(logger, {\n loadConfig: () => {\n const configApi = (api.runtime as any).config;\n return configApi?.loadConfig?.();\n },\n });\n\n const version = result.version ?? \"目标版本\";\n if (!restartPlan.scheduled) {\n // 重启不可用 → updater 没启动,pending 目录就是孤儿,主动清理避免下次新更新还要清理。\n cleanupPendingDir(result.preparedStatus);\n markLastUpdateRestartStatus(targetDir, \"failed\", {\n error: restartPlan.reason,\n suggestion: restartPlan.suggestion ?? \"gateway 自动重启不可用,更新尚未应用。\",\n nextActions: restartPlan.nextActions ?? [\"启用 gateway 自动重启后重试更新\"],\n });\n return {\n ...result,\n success: false,\n restartScheduled: false,\n error: restartPlan.reason,\n suggestion: restartPlan.suggestion ?? \"gateway 自动重启不可用,更新尚未应用。\",\n nextActions: restartPlan.nextActions ?? [\"启用 gateway 自动重启后重试更新\"],\n message: `已准备更新到 ${version},但 gateway 自动重启不可用,更新尚未应用`,\n };\n }\n\n const applied = result.preparedStatus\n ? applyPreparedUpdate(result.preparedStatus, \"scheduled\")\n : undefined;\n if (applied && !applied.success) {\n return {\n ...result,\n success: false,\n restartScheduled: false,\n phase: applied.phase,\n error: applied.error,\n suggestion: applied.suggestion,\n nextActions: applied.nextActions,\n message: applied.message,\n };\n }\n\n restartPlan.commit?.();\n\n return {\n ...result,\n restartScheduled: true,\n error: result.error,\n suggestion: result.suggestion,\n nextActions: [\"等待 gateway 自动重启并加载新版本\"],\n message: `已应用更新到 ${version},正在重启 gateway`,\n };\n}\n\nasync function reconcileSucceededUpdateRecord(\n api: OpenClawPluginApi,\n logger: Logger,\n targetDir: string,\n): Promise<void> {\n const status = readLastUpdateStatus(targetDir);\n if (status?.status !== \"succeeded\" || !status.tgzUrl) return;\n // 已 reconcile 过:跳过,避免每次 register 都刷新 installedAt。\n if (status.reconciledAt) return;\n\n try {\n await updateConfigRecord(api, status.version, targetDir, status.tgzUrl);\n markLastUpdateReconciled(targetDir);\n } catch (err) {\n logger.warn(`更新已应用,但配置记录补写失败: ${String(err)}`);\n }\n}\n\nfunction resolveEffectiveCurrentVersion(targetDir: string): string {\n const installedVersion = readInstalledPackageVersion(targetDir);\n if (\n installedVersion &&\n isNewerVersion(installedVersion, PLUGIN_VERSION)\n ) {\n return installedVersion;\n }\n\n const status = readLastUpdateStatus(targetDir);\n if (\n status?.status === \"succeeded\" &&\n status.version &&\n isNewerVersion(status.version, PLUGIN_VERSION)\n ) {\n return status.version;\n }\n return PLUGIN_VERSION;\n}\n\nfunction readInstalledPackageVersion(targetDir: string): string | undefined {\n try {\n const parsed = JSON.parse(\n readFileSync(join(targetDir, \"package.json\"), \"utf-8\"),\n ) as { version?: unknown };\n const version = typeof parsed.version === \"string\"\n ? parsed.version.trim()\n : \"\";\n return VERSION_PATTERN.test(version) ? version : undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * 注册插件自动更新能力:\n * - 定时版本检查(UpdateChecker)\n * - 对话通道:before_prompt_build hook + plugin-update tool\n * - 网关通道:broadcast 推送 + plugin.update gateway method\n *\n * 返回 start/stop 供 registerService 管理生命周期。\n */\nexport function registerAutoUpdate(\n api: OpenClawPluginApi,\n logger: Logger,\n config: AutoUpdateConfig,\n getBroadcast: () => BroadcastFn | null,\n rememberBroadcast?: (broadcast: BroadcastFn | undefined) => void,\n externalUpdateNotifier?: ExternalUpdateNotifier,\n): {\n start: () => void;\n stop: () => void;\n notifyBroadcastReady: () => void;\n} {\n if (config.enabled === false) {\n logger.info(\"自动更新已禁用 (autoUpdate.enabled = false)\");\n return { start() {}, stop() {}, notifyBroadcastReady() {} };\n }\n\n let pendingUpdate: UpdateInfo | null = null;\n let pendingGatewayUpdate: UpdateInfo | null = null;\n const intervalMs = (config.checkIntervalHours ?? 4) * 3_600_000;\n const channel = config.channel ?? \"latest\";\n const baseUrl = config.baseUrl ?? PRODUCTION_UPDATE_BASE_URL;\n const suppressUpdateNotifications = shouldSuppressUpdateNotifications();\n void reconcileSucceededUpdateRecord(api, logger, resolveTargetDir(api));\n\n function clearPendingUpdateNotice(): void {\n pendingUpdate = null;\n pendingGatewayUpdate = null;\n externalUpdateNotifier?.clearPendingUpdate();\n }\n\n function suppressPendingClientUpdateNotice(): void {\n pendingGatewayUpdate = null;\n externalUpdateNotifier?.clearPendingUpdate();\n }\n\n if (suppressUpdateNotifications) {\n logger.info(\"Windows 平台已关闭插件更新通知\");\n clearPendingUpdateNotice();\n }\n\n function tryBroadcastUpdate(update: UpdateInfo): boolean {\n if (suppressUpdateNotifications) return false;\n const broadcast = getBroadcast();\n if (!broadcast) return false;\n\n broadcast(\"plugin.updateAvailable\", {\n pluginId: \"phone-notifications\",\n pluginName: \"消息通知\",\n current: update.current,\n latest: update.latest,\n });\n pendingGatewayUpdate = null;\n return true;\n }\n\n // ── 对话通道:hook 注入 system prompt ──\n\n api.on(\"before_prompt_build\", () => {\n if (suppressUpdateNotifications) return;\n if (!pendingUpdate) return;\n return {\n appendSystemContext:\n `[系统通知] phone-notifications 插件有新版本 ${pendingUpdate.latest} 可用` +\n `(当前版本 ${pendingUpdate.current})。\\n` +\n `请用自然语言在合适时机告知用户,若用户同意更新,` +\n `调用 plugin-update tool 并传入 version 参数。` +\n `若用户拒绝,不再重复提醒。`,\n };\n });\n\n // ── 对话通道:plugin-update tool ──\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n api.registerTool({\n name: \"plugin-update\",\n label: \"Plugin Update\",\n description:\n \"将 phone-notifications 插件更新到指定版本。\" +\n \"仅在用户明确同意更新后调用。更新完成后会自动尝试重启 gateway;如宿主不支持,则需手动重启。\",\n parameters: {\n type: \"object\",\n required: [\"version\"],\n additionalProperties: false,\n properties: {\n version: {\n type: \"string\",\n description: \"目标版本号,如 1.11.0\",\n },\n },\n },\n async execute(_toolCallId: string, params: unknown) {\n const { version } = params as { version: string };\n const targetDir = resolveTargetDir(api);\n const result = await executeUpdate(\n version,\n api.runtime.system.runCommandWithTimeout,\n logger,\n targetDir,\n baseUrl,\n );\n const finalResult = finalizeUpdateResult(api, logger, result, targetDir);\n if (finalResult.success) {\n clearPendingUpdateNotice();\n }\n return {\n content: [{ type: \"text\" as const, text: finalResult.message }],\n details: finalResult,\n };\n },\n } as any);\n\n // ── 版本检查器 ──\n\n if (!suppressUpdateNotifications) {\n logger.info(\n `自动更新已启用: channel=${channel}, baseUrl=${baseUrl}, checkIntervalHours=${config.checkIntervalHours ?? 4}`,\n );\n }\n\n const checker = new UpdateChecker(\n logger,\n (update) => {\n if (suppressUpdateNotifications) return;\n pendingUpdate = update;\n\n const broadcasted = tryBroadcastUpdate(update);\n if (!broadcasted) pendingGatewayUpdate = update;\n if (!broadcasted) {\n externalUpdateNotifier?.notifyUpdateAvailable(update);\n }\n\n logger.info(\n `已通知更新 ${update.current} → ${update.latest}` +\n (broadcasted\n ? \"(对话 + 网关)\"\n : \"(对话通道已生效,等待下次 gateway 请求时补发客户端事件)\"),\n );\n },\n intervalMs,\n channel,\n baseUrl,\n () => resolveEffectiveCurrentVersion(resolveTargetDir(api)),\n );\n\n // ── 网关通道:plugin.update gateway method ──\n\n api.registerGatewayMethod(\"plugin.update\", async ({ params, respond, context }) => {\n const version = (params as { version?: string }).version;\n if (!version) {\n respond(false, undefined, {\n code: \"MISSING_VERSION\",\n message: \"version is required\",\n });\n return;\n }\n suppressPendingClientUpdateNotice();\n rememberBroadcast?.(context?.broadcast);\n\n const targetDir = resolveTargetDir(api);\n const result = await executeUpdate(\n version,\n api.runtime.system.runCommandWithTimeout,\n logger,\n targetDir,\n baseUrl,\n );\n\n // executeUpdate 失败:不涉及重启,直接 respond(false)\n if (!result.success) {\n respond(false, undefined, {\n code: \"UPDATE_FAILED\",\n message: result.message,\n details: {\n phase: result.phase,\n error: result.error,\n suggestion: result.suggestion,\n nextActions: result.nextActions,\n },\n });\n return;\n }\n\n // Windows:不依赖 SIGUSR1 自动重启,spawn updater 后请用户手动重启 gateway。\n // 避免 emit SIGUSR1 触发 gateway 退出导致 Windows IPC respond 字节未 flush。\n if (shouldSkipAutoRestart()) {\n const manualResult = applyManualRestart(logger, result, targetDir);\n if (manualResult.success) {\n clearPendingUpdateNotice();\n respond(true, {\n message: manualResult.message,\n restartScheduled: false,\n updateId: manualResult.updateId,\n statusPath: manualResult.statusPath,\n suggestion: manualResult.suggestion,\n nextActions: manualResult.nextActions,\n });\n } else {\n respond(false, undefined, {\n code: \"UPDATE_FAILED\",\n message: manualResult.message,\n details: {\n phase: manualResult.phase,\n error: manualResult.error,\n suggestion: manualResult.suggestion,\n nextActions: manualResult.nextActions,\n },\n });\n }\n return;\n }\n\n // executeUpdate 成功:先同步做所有可知检查,但不立即注册 SIGUSR1 fire。\n // 这样 RPC respond() 能在 commit 之前完成,确保 app 一定先收到回复再发生 gateway 重启。\n const restartPlan = planGatewayRestart(logger, {\n loadConfig: () => {\n const configApi = (api.runtime as any).config;\n return configApi?.loadConfig?.();\n },\n });\n\n const ver = result.version ?? \"目标版本\";\n\n if (!restartPlan.scheduled) {\n // 重启不可用 → updater 没启动,pending 目录就是孤儿,主动清理。\n cleanupPendingDir(result.preparedStatus);\n const suggestion =\n restartPlan.suggestion ?? \"gateway 自动重启不可用,更新尚未应用。\";\n const nextActions =\n restartPlan.nextActions ?? [\"启用 gateway 自动重启后重试更新\"];\n markLastUpdateRestartStatus(targetDir, \"failed\", {\n error: restartPlan.reason,\n suggestion,\n nextActions,\n });\n respond(false, undefined, {\n code: \"UPDATE_FAILED\",\n message: `已准备更新到 ${ver},但 gateway 自动重启不可用,更新尚未应用`,\n details: {\n phase: result.phase,\n error: restartPlan.reason,\n suggestion,\n nextActions,\n },\n });\n return;\n }\n\n // 重启可用:先原子替换插件目录并把状态落盘,再 respond(true),最后 commit。\n const applied = result.preparedStatus\n ? applyPreparedUpdate(result.preparedStatus, \"scheduled\")\n : undefined;\n if (applied && !applied.success) {\n respond(false, undefined, {\n code: \"UPDATE_FAILED\",\n message: applied.message,\n details: {\n phase: applied.phase,\n error: applied.error,\n suggestion: applied.suggestion,\n nextActions: applied.nextActions,\n },\n });\n return;\n }\n\n clearPendingUpdateNotice();\n\n respond(true, {\n message: `已应用更新到 ${ver},正在重启 gateway`,\n restartScheduled: true,\n updateId: result.updateId,\n statusPath: result.statusPath,\n suggestion: result.suggestion,\n nextActions: [\"等待 gateway 自动重启并加载新版本\"],\n });\n\n // 严格在 respond 之后才注册 SIGUSR1 fire:保证响应字节先离开当前 turn。\n restartPlan.commit!();\n });\n\n // ── 网关通道:plugin.checkUpdate gateway method ──\n // 客户端主动查询是否有新版本;Windows 平台直接静默返回无更新。\n api.registerGatewayMethod(\"plugin.checkUpdate\", async ({ respond, context }) => {\n pendingGatewayUpdate = null;\n rememberBroadcast?.(context?.broadcast);\n if (suppressUpdateNotifications) {\n clearPendingUpdateNotice();\n respond(true, {\n pluginId: PLUGIN_ID,\n pluginName: \"消息通知\",\n current: PLUGIN_VERSION,\n latest: null,\n hasUpdate: false,\n });\n return;\n }\n\n try {\n const targetDir = resolveTargetDir(api);\n const info = await checker.check();\n const current = resolveEffectiveCurrentVersion(targetDir);\n const lastUpdateStatus = readLastUpdateStatus(targetDir);\n const lastUpdateNotice = lastUpdateStatus\n ? buildLastUpdateNotice(lastUpdateStatus)\n : undefined;\n if (!info) {\n clearPendingUpdateNotice();\n }\n respond(true, {\n pluginId: PLUGIN_ID,\n pluginName: \"消息通知\",\n current,\n latest: info?.latest ?? null,\n hasUpdate: !!info,\n ...(lastUpdateNotice ? { lastUpdateNotice } : {}),\n });\n } catch (err) {\n respond(false, undefined, {\n code: \"CHECK_FAILED\",\n message: err instanceof Error ? err.message : String(err),\n });\n }\n });\n\n return {\n start: () => {\n if (!suppressUpdateNotifications) checker.start();\n },\n stop: () => checker.stop(),\n notifyBroadcastReady() {\n if (suppressUpdateNotifications) return;\n const update = pendingGatewayUpdate;\n if (!update) return;\n if (!tryBroadcastUpdate(update)) return;\n logger.info(`已补发插件更新事件 ${update.current} → ${update.latest}`);\n },\n };\n}\n",
42
+ "import { readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { OpenClawPluginApi } from \"openclaw/plugin-sdk\";\nimport type { Logger } from \"../logger.js\";\nimport { resolvePluginStateDir } from \"../plugin/runtime-state.js\";\nimport { PLUGIN_VERSION } from \"../version.js\";\nimport { PRODUCTION_UPDATE_BASE_URL } from \"./channel.js\";\nimport { isNewerVersion, pickNewestVersion } from \"./semver.js\";\nimport type {\n AutoUpdateConfig,\n BroadcastFn,\n ExternalUpdateNotifier,\n UpdateInfo,\n} from \"./types.js\";\nimport { UpdateChecker } from \"./checker.js\";\nimport {\n buildLastUpdateNotice,\n applyPreparedUpdate,\n cleanupPendingDir,\n executeUpdate,\n markLastUpdateReconciled,\n markLastUpdateRestartStatus,\n readLastUpdateStatus,\n startPreparedUpdater,\n} from \"./executor.js\";\nimport { planGatewayRestart } from \"./restart.js\";\n\nconst PLUGIN_ID = \"phone-notifications\";\nconst VERSION_PATTERN = /^\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?$/;\n\n// 打包后本入口为 <installDir>/dist/index.cjs,__dirname=<installDir>/dist。\n// 与 src/index.ts 一致:bun 会在 bundle 顶部注入 `var __dirname = \"<build 源码路径>\"`\n// 屏蔽真实值,scripts/build.ts 后处理时已将其删除,故运行时 __dirname 为安装目录下的 dist。\ndeclare const __dirname: string;\n\n/**\n * Windows 上:\n * - Node 进程 emit SIGUSR1 后宿主常会立刻退出(含 process.exit / spawn replacement),\n * 而 Windows IPC(named pipe / TCP loopback)的 socket flush 比 Unix domain socket\n * 慢得多,1.5s grace 也不足以保证 RPC 回复字节先离开当前进程。\n * - 实测:插件在 Windows 上目录替换成功了,但 app 收不到 plugin.update 的回复。\n * - 取舍:Windows 直接走\"手动重启\"路径——spawn detached updater 等待父进程退出,\n * 然后明确提示用户手动重启 openclaw/gateway。这样 respond 永远不会被 gateway\n * 退出打断;用户手动重启时 updater 自然接管目录替换。\n */\nfunction shouldSkipAutoRestart(): boolean {\n return process.platform === \"win32\";\n}\n\nfunction shouldSuppressUpdateNotifications(): boolean {\n return process.platform === \"win32\";\n}\n\nfunction resolveTargetDir(api: OpenClawPluginApi): string {\n try {\n const cfg = (api.runtime as any).config?.loadConfig?.();\n const installPath = cfg?.plugins?.installs?.[PLUGIN_ID]?.installPath;\n if (installPath) return installPath;\n } catch { /* ignore */ }\n return join(resolvePluginStateDir(api), \"extensions\", PLUGIN_ID);\n}\n\nasync function updateConfigRecord(\n api: OpenClawPluginApi,\n version: string,\n targetDir: string,\n tgzUrl: string,\n): Promise<void> {\n const configApi = (api.runtime as any).config;\n if (!configApi) return;\n const cfg = configApi.loadConfig();\n if (!cfg.plugins) cfg.plugins = {};\n if (!cfg.plugins.installs) cfg.plugins.installs = {};\n cfg.plugins.installs[PLUGIN_ID] = {\n ...cfg.plugins.installs[PLUGIN_ID],\n source: \"archive\" as const,\n sourcePath: tgzUrl,\n installPath: targetDir,\n version,\n installedAt: new Date().toISOString(),\n };\n await configApi.writeConfigFile(cfg);\n}\n\n/**\n * 在\"不依赖 gateway 自动重启\"的平台上落地更新:\n * - 同步 spawn detached updater(等父进程退出后接管目录替换)。\n * - 状态文件维持 status=pending,restartStatus 由调用方决定。\n * - 返回带\"请手动重启\"文案的 result;spawn 失败时返回 success=false。\n */\nfunction applyManualRestart(\n logger: Logger,\n result: Awaited<ReturnType<typeof executeUpdate>>,\n targetDir: string,\n): Awaited<ReturnType<typeof executeUpdate>> {\n const version = result.version ?? \"目标版本\";\n try {\n if (result.preparedStatus) {\n startPreparedUpdater(result.preparedStatus);\n }\n markLastUpdateRestartStatus(targetDir, \"pending\", {\n suggestion: \"Windows 不支持自动重启 gateway,请手动重启后更新生效。\",\n nextActions: [\"手动重启 openclaw/gateway\", \"重启完成后插件会自动应用新版本\"],\n });\n return {\n ...result,\n restartScheduled: false,\n suggestion: \"Windows 不支持自动重启 gateway,请手动重启后更新生效。\",\n nextActions: [\"手动重启 openclaw/gateway\", \"重启完成后插件会自动应用新版本\"],\n message: `已准备更新到 ${version},请手动重启 openclaw/gateway 后生效`,\n };\n } catch (err) {\n logger.warn(`启动后台 updater 失败: ${String(err)}`);\n cleanupPendingDir(result.preparedStatus);\n const errorMessage = err instanceof Error ? err.message : String(err);\n const suggestion = \"后台安装进程启动失败,更新尚未应用。请稍后重试。\";\n const nextActions = [\"稍后重试更新\", \"如果持续失败,请复制错误信息反馈给维护者\"];\n markLastUpdateRestartStatus(targetDir, \"failed\", {\n error: errorMessage,\n suggestion,\n nextActions,\n });\n return {\n ...result,\n success: false,\n restartScheduled: false,\n error: errorMessage,\n suggestion,\n nextActions,\n message: `更新准备完成但后台安装进程启动失败:${errorMessage}`,\n };\n }\n}\n\nfunction finalizeUpdateResult(\n api: OpenClawPluginApi,\n logger: Logger,\n result: Awaited<ReturnType<typeof executeUpdate>>,\n targetDir: string,\n): Awaited<ReturnType<typeof executeUpdate>> {\n if (!result.success) {\n return result;\n }\n\n if (shouldSkipAutoRestart()) {\n return applyManualRestart(logger, result, targetDir);\n }\n\n const restartPlan = planGatewayRestart(logger, {\n loadConfig: () => {\n const configApi = (api.runtime as any).config;\n return configApi?.loadConfig?.();\n },\n });\n\n const version = result.version ?? \"目标版本\";\n if (!restartPlan.scheduled) {\n // 重启不可用 → updater 没启动,pending 目录就是孤儿,主动清理避免下次新更新还要清理。\n cleanupPendingDir(result.preparedStatus);\n markLastUpdateRestartStatus(targetDir, \"failed\", {\n error: restartPlan.reason,\n suggestion: restartPlan.suggestion ?? \"gateway 自动重启不可用,更新尚未应用。\",\n nextActions: restartPlan.nextActions ?? [\"启用 gateway 自动重启后重试更新\"],\n });\n return {\n ...result,\n success: false,\n restartScheduled: false,\n error: restartPlan.reason,\n suggestion: restartPlan.suggestion ?? \"gateway 自动重启不可用,更新尚未应用。\",\n nextActions: restartPlan.nextActions ?? [\"启用 gateway 自动重启后重试更新\"],\n message: `已准备更新到 ${version},但 gateway 自动重启不可用,更新尚未应用`,\n };\n }\n\n const applied = result.preparedStatus\n ? applyPreparedUpdate(result.preparedStatus, \"scheduled\")\n : undefined;\n if (applied && !applied.success) {\n return {\n ...result,\n success: false,\n restartScheduled: false,\n phase: applied.phase,\n error: applied.error,\n suggestion: applied.suggestion,\n nextActions: applied.nextActions,\n message: applied.message,\n };\n }\n\n restartPlan.commit?.();\n\n return {\n ...result,\n restartScheduled: true,\n error: result.error,\n suggestion: result.suggestion,\n nextActions: [\"等待 gateway 自动重启并加载新版本\"],\n message: `已应用更新到 ${version},正在重启 gateway`,\n };\n}\n\nasync function reconcileSucceededUpdateRecord(\n api: OpenClawPluginApi,\n logger: Logger,\n targetDir: string,\n): Promise<void> {\n const status = readLastUpdateStatus(targetDir);\n if (status?.status !== \"succeeded\" || !status.tgzUrl) return;\n // 已 reconcile 过:跳过,避免每次 register 都刷新 installedAt。\n if (status.reconciledAt) return;\n\n try {\n await updateConfigRecord(api, status.version, targetDir, status.tgzUrl);\n markLastUpdateReconciled(targetDir);\n } catch (err) {\n logger.warn(`更新已应用,但配置记录补写失败: ${String(err)}`);\n }\n}\n\n/**\n * 运行模块所在目录下的 package.json 路径。\n *\n * 这是\"插件实际从哪个目录被加载\"的最可靠信号,等价于 `ntf -v` 读到的那份 package.json,\n * 且与宿主的 config schema / stateDir 解析完全无关——升级若由宿主就地替换安装目录完成\n * (不经过本插件的 plugin.update,因此没有 last-update.json,也没写 plugins.installs),\n * resolveTargetDir 可能落到错误目录,但这里始终指向真实安装目录。\n */\nfunction resolveModulePackageJsonPath(): string {\n return join(__dirname, \"..\", \"package.json\");\n}\n\n/**\n * 解析\"实际生效的当前版本\"。\n *\n * 运行时 PLUGIN_VERSION 是编译期常量(__PLUGIN_VERSION__),进程不重启就不会变。\n * 因此升级后若 gateway 未重启,只能重新从磁盘读 package.json 才能感知新版本。\n * 这里同时读 targetDir 与运行模块目录两处并取更新的一个:\n * - targetDir/package.json 覆盖\"配置 installPath / 默认 extensions 路径\"场景;\n * - 运行模块目录/package.json 覆盖\"宿主就地替换、但没把安装信息写进 config\"场景(如 arkclaw)。\n */\nexport function resolveEffectiveCurrentVersion(\n targetDir: string,\n modulePackageJsonPath: string = resolveModulePackageJsonPath(),\n): string {\n const installedVersion = pickNewestVersion([\n readPackageVersionAt(join(targetDir, \"package.json\")),\n readPackageVersionAt(modulePackageJsonPath),\n ]);\n if (\n installedVersion &&\n isNewerVersion(installedVersion, PLUGIN_VERSION)\n ) {\n return installedVersion;\n }\n\n const status = readLastUpdateStatus(targetDir);\n if (\n status?.status === \"succeeded\" &&\n status.version &&\n isNewerVersion(status.version, PLUGIN_VERSION)\n ) {\n return status.version;\n }\n return PLUGIN_VERSION;\n}\n\nfunction readPackageVersionAt(packageJsonPath: string): string | undefined {\n try {\n const parsed = JSON.parse(\n readFileSync(packageJsonPath, \"utf-8\"),\n ) as { version?: unknown };\n const version = typeof parsed.version === \"string\"\n ? parsed.version.trim()\n : \"\";\n return VERSION_PATTERN.test(version) ? version : undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * 注册插件自动更新能力:\n * - 定时版本检查(UpdateChecker)\n * - 对话通道:before_prompt_build hook + plugin-update tool\n * - 网关通道:broadcast 推送 + plugin.update gateway method\n *\n * 返回 start/stop 供 registerService 管理生命周期。\n */\nexport function registerAutoUpdate(\n api: OpenClawPluginApi,\n logger: Logger,\n config: AutoUpdateConfig,\n getBroadcast: () => BroadcastFn | null,\n rememberBroadcast?: (broadcast: BroadcastFn | undefined) => void,\n externalUpdateNotifier?: ExternalUpdateNotifier,\n): {\n start: () => void;\n stop: () => void;\n notifyBroadcastReady: () => void;\n} {\n if (config.enabled === false) {\n logger.info(\"自动更新已禁用 (autoUpdate.enabled = false)\");\n return { start() {}, stop() {}, notifyBroadcastReady() {} };\n }\n\n let pendingUpdate: UpdateInfo | null = null;\n let pendingGatewayUpdate: UpdateInfo | null = null;\n const intervalMs = (config.checkIntervalHours ?? 4) * 3_600_000;\n const channel = config.channel ?? \"latest\";\n const baseUrl = config.baseUrl ?? PRODUCTION_UPDATE_BASE_URL;\n const suppressUpdateNotifications = shouldSuppressUpdateNotifications();\n void reconcileSucceededUpdateRecord(api, logger, resolveTargetDir(api));\n\n function clearPendingUpdateNotice(): void {\n pendingUpdate = null;\n pendingGatewayUpdate = null;\n externalUpdateNotifier?.clearPendingUpdate();\n }\n\n function suppressPendingClientUpdateNotice(): void {\n pendingGatewayUpdate = null;\n externalUpdateNotifier?.clearPendingUpdate();\n }\n\n if (suppressUpdateNotifications) {\n logger.info(\"Windows 平台已关闭插件更新通知\");\n clearPendingUpdateNotice();\n }\n\n function tryBroadcastUpdate(update: UpdateInfo): boolean {\n if (suppressUpdateNotifications) return false;\n const broadcast = getBroadcast();\n if (!broadcast) return false;\n\n broadcast(\"plugin.updateAvailable\", {\n pluginId: \"phone-notifications\",\n pluginName: \"消息通知\",\n current: update.current,\n latest: update.latest,\n });\n pendingGatewayUpdate = null;\n return true;\n }\n\n // ── 对话通道:hook 注入 system prompt ──\n\n api.on(\"before_prompt_build\", () => {\n if (suppressUpdateNotifications) return;\n if (!pendingUpdate) return;\n return {\n appendSystemContext:\n `[系统通知] phone-notifications 插件有新版本 ${pendingUpdate.latest} 可用` +\n `(当前版本 ${pendingUpdate.current})。\\n` +\n `请用自然语言在合适时机告知用户,若用户同意更新,` +\n `调用 plugin-update tool 并传入 version 参数。` +\n `若用户拒绝,不再重复提醒。`,\n };\n });\n\n // ── 对话通道:plugin-update tool ──\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n api.registerTool({\n name: \"plugin-update\",\n label: \"Plugin Update\",\n description:\n \"将 phone-notifications 插件更新到指定版本。\" +\n \"仅在用户明确同意更新后调用。更新完成后会自动尝试重启 gateway;如宿主不支持,则需手动重启。\",\n parameters: {\n type: \"object\",\n required: [\"version\"],\n additionalProperties: false,\n properties: {\n version: {\n type: \"string\",\n description: \"目标版本号,如 1.11.0\",\n },\n },\n },\n async execute(_toolCallId: string, params: unknown) {\n const { version } = params as { version: string };\n const targetDir = resolveTargetDir(api);\n const result = await executeUpdate(\n version,\n api.runtime.system.runCommandWithTimeout,\n logger,\n targetDir,\n baseUrl,\n );\n const finalResult = finalizeUpdateResult(api, logger, result, targetDir);\n if (finalResult.success) {\n clearPendingUpdateNotice();\n }\n return {\n content: [{ type: \"text\" as const, text: finalResult.message }],\n details: finalResult,\n };\n },\n } as any);\n\n // ── 版本检查器 ──\n\n if (!suppressUpdateNotifications) {\n logger.info(\n `自动更新已启用: channel=${channel}, baseUrl=${baseUrl}, checkIntervalHours=${config.checkIntervalHours ?? 4}`,\n );\n }\n\n const checker = new UpdateChecker(\n logger,\n (update) => {\n if (suppressUpdateNotifications) return;\n pendingUpdate = update;\n\n const broadcasted = tryBroadcastUpdate(update);\n if (!broadcasted) pendingGatewayUpdate = update;\n if (!broadcasted) {\n externalUpdateNotifier?.notifyUpdateAvailable(update);\n }\n\n logger.info(\n `已通知更新 ${update.current} → ${update.latest}` +\n (broadcasted\n ? \"(对话 + 网关)\"\n : \"(对话通道已生效,等待下次 gateway 请求时补发客户端事件)\"),\n );\n },\n intervalMs,\n channel,\n baseUrl,\n () => resolveEffectiveCurrentVersion(resolveTargetDir(api)),\n );\n\n // ── 网关通道:plugin.update gateway method ──\n\n api.registerGatewayMethod(\"plugin.update\", async ({ params, respond, context }) => {\n const version = (params as { version?: string }).version;\n if (!version) {\n respond(false, undefined, {\n code: \"MISSING_VERSION\",\n message: \"version is required\",\n });\n return;\n }\n suppressPendingClientUpdateNotice();\n rememberBroadcast?.(context?.broadcast);\n\n const targetDir = resolveTargetDir(api);\n const result = await executeUpdate(\n version,\n api.runtime.system.runCommandWithTimeout,\n logger,\n targetDir,\n baseUrl,\n );\n\n // executeUpdate 失败:不涉及重启,直接 respond(false)\n if (!result.success) {\n respond(false, undefined, {\n code: \"UPDATE_FAILED\",\n message: result.message,\n details: {\n phase: result.phase,\n error: result.error,\n suggestion: result.suggestion,\n nextActions: result.nextActions,\n },\n });\n return;\n }\n\n // Windows:不依赖 SIGUSR1 自动重启,spawn updater 后请用户手动重启 gateway。\n // 避免 emit SIGUSR1 触发 gateway 退出导致 Windows IPC respond 字节未 flush。\n if (shouldSkipAutoRestart()) {\n const manualResult = applyManualRestart(logger, result, targetDir);\n if (manualResult.success) {\n clearPendingUpdateNotice();\n respond(true, {\n message: manualResult.message,\n restartScheduled: false,\n updateId: manualResult.updateId,\n statusPath: manualResult.statusPath,\n suggestion: manualResult.suggestion,\n nextActions: manualResult.nextActions,\n });\n } else {\n respond(false, undefined, {\n code: \"UPDATE_FAILED\",\n message: manualResult.message,\n details: {\n phase: manualResult.phase,\n error: manualResult.error,\n suggestion: manualResult.suggestion,\n nextActions: manualResult.nextActions,\n },\n });\n }\n return;\n }\n\n // executeUpdate 成功:先同步做所有可知检查,但不立即注册 SIGUSR1 fire。\n // 这样 RPC respond() 能在 commit 之前完成,确保 app 一定先收到回复再发生 gateway 重启。\n const restartPlan = planGatewayRestart(logger, {\n loadConfig: () => {\n const configApi = (api.runtime as any).config;\n return configApi?.loadConfig?.();\n },\n });\n\n const ver = result.version ?? \"目标版本\";\n\n if (!restartPlan.scheduled) {\n // 重启不可用 → updater 没启动,pending 目录就是孤儿,主动清理。\n cleanupPendingDir(result.preparedStatus);\n const suggestion =\n restartPlan.suggestion ?? \"gateway 自动重启不可用,更新尚未应用。\";\n const nextActions =\n restartPlan.nextActions ?? [\"启用 gateway 自动重启后重试更新\"];\n markLastUpdateRestartStatus(targetDir, \"failed\", {\n error: restartPlan.reason,\n suggestion,\n nextActions,\n });\n respond(false, undefined, {\n code: \"UPDATE_FAILED\",\n message: `已准备更新到 ${ver},但 gateway 自动重启不可用,更新尚未应用`,\n details: {\n phase: result.phase,\n error: restartPlan.reason,\n suggestion,\n nextActions,\n },\n });\n return;\n }\n\n // 重启可用:先原子替换插件目录并把状态落盘,再 respond(true),最后 commit。\n const applied = result.preparedStatus\n ? applyPreparedUpdate(result.preparedStatus, \"scheduled\")\n : undefined;\n if (applied && !applied.success) {\n respond(false, undefined, {\n code: \"UPDATE_FAILED\",\n message: applied.message,\n details: {\n phase: applied.phase,\n error: applied.error,\n suggestion: applied.suggestion,\n nextActions: applied.nextActions,\n },\n });\n return;\n }\n\n clearPendingUpdateNotice();\n\n respond(true, {\n message: `已应用更新到 ${ver},正在重启 gateway`,\n restartScheduled: true,\n updateId: result.updateId,\n statusPath: result.statusPath,\n suggestion: result.suggestion,\n nextActions: [\"等待 gateway 自动重启并加载新版本\"],\n });\n\n // 严格在 respond 之后才注册 SIGUSR1 fire:保证响应字节先离开当前 turn。\n restartPlan.commit!();\n });\n\n // ── 网关通道:plugin.checkUpdate gateway method ──\n // 客户端主动查询是否有新版本;Windows 平台直接静默返回无更新。\n api.registerGatewayMethod(\"plugin.checkUpdate\", async ({ respond, context }) => {\n pendingGatewayUpdate = null;\n rememberBroadcast?.(context?.broadcast);\n if (suppressUpdateNotifications) {\n clearPendingUpdateNotice();\n respond(true, {\n pluginId: PLUGIN_ID,\n pluginName: \"消息通知\",\n current: PLUGIN_VERSION,\n latest: null,\n hasUpdate: false,\n });\n return;\n }\n\n try {\n const targetDir = resolveTargetDir(api);\n const info = await checker.check();\n const current = resolveEffectiveCurrentVersion(targetDir);\n // App 主动查询时落一行:用于在现场确认 gateway 读到的有效版本与 ntf -v 是否一致,\n // 以及 resolveTargetDir 命中的目录。current 仍等于运行版本时说明磁盘读未感知到升级。\n logger.info(\n `plugin.checkUpdate: running=${PLUGIN_VERSION} effective=${current} ` +\n `latest=${info?.latest ?? \"-\"} hasUpdate=${!!info} targetDir=${targetDir}`,\n );\n const lastUpdateStatus = readLastUpdateStatus(targetDir);\n const lastUpdateNotice = lastUpdateStatus\n ? buildLastUpdateNotice(lastUpdateStatus)\n : undefined;\n if (!info) {\n clearPendingUpdateNotice();\n }\n respond(true, {\n pluginId: PLUGIN_ID,\n pluginName: \"消息通知\",\n current,\n latest: info?.latest ?? null,\n hasUpdate: !!info,\n ...(lastUpdateNotice ? { lastUpdateNotice } : {}),\n });\n } catch (err) {\n respond(false, undefined, {\n code: \"CHECK_FAILED\",\n message: err instanceof Error ? err.message : String(err),\n });\n }\n });\n\n return {\n start: () => {\n if (!suppressUpdateNotifications) checker.start();\n },\n stop: () => checker.stop(),\n notifyBroadcastReady() {\n if (suppressUpdateNotifications) return;\n const update = pendingGatewayUpdate;\n if (!update) return;\n if (!tryBroadcastUpdate(update)) return;\n logger.info(`已补发插件更新事件 ${update.current} → ${update.latest}`);\n },\n };\n}\n",
43
43
  "import type { IncomingMessage } from \"node:http\";\nimport type { OpenClawPluginApi } from \"openclaw/plugin-sdk\";\n\nexport type GatewayHandler = Parameters<OpenClawPluginApi[\"registerGatewayMethod\"]>[1];\n\nexport type GatewayMethodRegistrar = (\n method: string,\n handler: GatewayHandler,\n) => void;\n\nexport function readBody(req: IncomingMessage): Promise<string> {\n return new Promise((resolve, reject) => {\n const chunks: Buffer[] = [];\n req.on(\"data\", (chunk: Buffer) => chunks.push(chunk));\n req.on(\"end\", () => resolve(Buffer.concat(chunks).toString()));\n req.on(\"error\", reject);\n });\n}\n\nexport function trimToUndefined(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n\n const trimmed = value.trim();\n return trimmed || undefined;\n}\n",
44
44
  "import type { OpenClawPluginApi } from \"openclaw/plugin-sdk\";\nimport { resolveStateDir } from \"../host.js\";\nimport { trimToUndefined } from \"./shared.js\";\n\nexport function tryResolveRuntimeStateDir(\n api: Pick<OpenClawPluginApi, \"runtime\">,\n): string | undefined {\n const runtimeState = (api as any)?.runtime?.state;\n const resolveStateDir = runtimeState?.resolveStateDir;\n if (typeof resolveStateDir !== \"function\") {\n return undefined;\n }\n\n try {\n return trimToUndefined(resolveStateDir.call(runtimeState));\n } catch {\n return undefined;\n }\n}\n\nexport function resolvePluginStateDir(\n api: Pick<OpenClawPluginApi, \"runtime\">,\n): string {\n return resolveStateDir(tryResolveRuntimeStateDir(api));\n}\n",
45
45
  "function parseSemver(v: string): { major: number; minor: number; patch: number; pre: string | null } {\n const [main, pre = null] = v.split(\"-\", 2) as [string, string | undefined];\n const [major = 0, minor = 0, patch = 0] = main.split(\".\").map(Number);\n return { major, minor, patch, pre: pre ?? null };\n}\n\nfunction comparePreRelease(a: string, b: string): number {\n const aParts = a.split(\".\");\n const bParts = b.split(\".\");\n for (let i = 0; i < Math.max(aParts.length, bParts.length); i++) {\n const ap = aParts[i] ?? \"\";\n const bp = bParts[i] ?? \"\";\n const an = Number(ap);\n const bn = Number(bp);\n let diff: number;\n if (!Number.isNaN(an) && !Number.isNaN(bn)) {\n diff = an - bn;\n } else if (ap < bp) {\n diff = -1;\n } else if (ap > bp) {\n diff = 1;\n } else {\n diff = 0;\n }\n if (diff !== 0) return diff;\n }\n return 0;\n}\n\nexport function compareVersions(candidate: string, current: string): number {\n const a = parseSemver(candidate);\n const b = parseSemver(current);\n\n if (a.major !== b.major) return a.major - b.major;\n if (a.minor !== b.minor) return a.minor - b.minor;\n if (a.patch !== b.patch) return a.patch - b.patch;\n\n // Same major.minor.patch: stable > pre-release\n if (a.pre === null) return b.pre === null ? 0 : 1;\n if (b.pre === null) return -1;\n\n return comparePreRelease(a.pre, b.pre);\n}\n\n/** Returns true if `candidate` is strictly newer than `current` per semver rules. */\nexport function isNewerVersion(candidate: string, current: string): boolean {\n return compareVersions(candidate, current) > 0;\n}\n\nexport function pickNewestVersion(\n versions: ReadonlyArray<string | null | undefined>,\n): string | null {\n let newest: string | null = null;\n for (const version of versions) {\n if (!version) continue;\n if (!newest || isNewerVersion(version, newest)) {\n newest = version;\n }\n }\n return newest;\n}\n",
@@ -87,18 +87,15 @@
87
87
  "import {\n chmodSync,\n existsSync,\n lstatSync,\n mkdirSync,\n readFileSync,\n realpathSync,\n symlinkSync,\n writeFileSync,\n} from \"node:fs\";\nimport { delimiter, dirname, isAbsolute, join } from \"node:path\";\nimport process from \"node:process\";\nimport type { Logger } from \"../logger.js\";\n\n/**\n * 把 dist/bin/ntf.cjs 暴露成全局可执行的 `ntf` 命令。\n *\n * 策略链(依次尝试,首个成功即返回):\n * 1. `dirname(process.execPath)` —— node 所在目录通常在 PATH,写进去当前 shell 立即可见。\n * 2. 宿主 CLI / PATH 目录 —— jvsclaw 直解 tgz 不跑安装脚本时,优先落到用户实际\n * 执行 `openclaw` 的同级目录或其它已在 PATH 的可写目录。\n * 3. `<stateDir>/bin/ntf` —— 容器/系统 PATH 均不可写时兜底;目录在 PATH 上的概率低,\n * 首次落盘时 logger 给出一行 `export PATH=` 提示。\n *\n * 幂等:若目标已存在且 wrapper 指向相同 target,直接跳过。\n * 安全:若目标命令已被其它工具占用,不覆盖,继续尝试下一个候选目录。\n * 失败:所有策略都不阻断 plugin 加载,只 logger.warn 报告原因。\n */\nexport function ensureNtfBinInstalled(opts: {\n ntfCjsPath: string;\n stateDir?: string;\n logger: Logger;\n /**\n * 测试/特殊宿主可显式覆盖候选目录;生产路径不传。\n * 目录按顺序尝试,首个成功即返回。\n */\n installDirs?: NtfBinInstallDir[];\n}): void {\n const { ntfCjsPath, stateDir, logger } = opts;\n\n if (!existsSync(ntfCjsPath)) {\n logger.warn(`ntf wrapper: 目标不存在 ${ntfCjsPath},跳过`);\n return;\n }\n\n const installDirs =\n opts.installDirs ?? resolveNtfBinInstallDirs({ stateDir, argv: process.argv });\n const failures: string[] = [];\n\n for (const candidate of installDirs) {\n const result = tryInstallWrapper(candidate.dir, ntfCjsPath);\n if (!result.ok) {\n failures.push(`${candidate.label}: ${result.reason ?? \"unknown\"}`);\n continue;\n }\n\n if (result.created) {\n const visibility = candidate.onPath ? \"立即生效\" : \"需要加入 PATH\";\n logger.info(\n `独立 ntf 已注册: ${result.path} -> ${ntfCjsPath}(${candidate.label},${visibility})`,\n );\n if (!candidate.onPath) {\n logger.info(\n `若 ntf 命令未立即生效,请把目录加入 PATH: export PATH=\"${candidate.dir}:$PATH\"`,\n );\n }\n }\n return;\n }\n\n logger.warn(`独立 ntf 注册失败: ${failures.join(\";\") || \"无可用安装目录\"}`);\n}\n\ninterface InstallResult {\n ok: boolean;\n /** wrapper 绝对路径(成功时) */\n path?: string;\n /** 本次是否真的新建/更新(用于幂等情况避免重复日志) */\n created?: boolean;\n reason?: string;\n}\n\nexport interface NtfBinInstallDir {\n dir: string;\n label: string;\n onPath: boolean;\n}\n\nexport function resolveNtfBinInstallDirs(opts: {\n stateDir?: string;\n argv?: string[];\n envPath?: string;\n}): NtfBinInstallDir[] {\n const argv = opts.argv ?? process.argv;\n const envPath = opts.envPath ?? process.env.PATH ?? \"\";\n const pathDirs = splitPathDirs(envPath);\n const candidates: NtfBinInstallDir[] = [];\n\n pushCandidate(candidates, dirname(process.execPath), \"node 同目录\", true);\n\n for (const cliName of inferHostCliNames(argv)) {\n const cliPath = findCommandOnPath(cliName, pathDirs);\n if (cliPath) {\n pushCandidate(candidates, dirname(cliPath), `宿主 CLI (${cliName}) 同目录`, true);\n }\n }\n\n for (const dir of pathDirs) {\n pushCandidate(candidates, dir, \"PATH 目录\", true);\n }\n\n if (opts.stateDir) {\n pushCandidate(candidates, join(opts.stateDir, \"bin\"), \"stateDir/bin 兜底\", false);\n }\n\n return candidates;\n}\n\nfunction tryInstallWrapper(dir: string, target: string): InstallResult {\n try {\n mkdirSync(dir, { recursive: true });\n } catch (err) {\n return { ok: false, reason: `mkdir ${dir} 失败: ${describeError(err)}` };\n }\n\n const wrapperName = process.platform === \"win32\" ? \"ntf.cmd\" : \"ntf\";\n const wrapperPath = join(dir, wrapperName);\n\n if (pathExists(wrapperPath)) {\n if (isExistingWrapperForTarget(wrapperPath, target)) {\n return { ok: true, path: wrapperPath, created: false };\n }\n return { ok: false, reason: `已有 ${wrapperPath},跳过覆盖` };\n }\n\n try {\n if (process.platform === \"win32\") {\n // Windows: 写 .cmd wrapper(symlink 需要管理员权限或 developer mode)\n writeFileSync(wrapperPath, `@echo off\\r\\nnode \"${target}\" %*\\r\\n`, \"utf-8\");\n } else {\n symlinkSync(target, wrapperPath);\n try {\n chmodSync(target, 0o755);\n } catch {\n // target 已经在 dist 里 chmod 过;这里失败不致命\n }\n }\n return { ok: true, path: wrapperPath, created: true };\n } catch (err) {\n return { ok: false, reason: `写入 ${wrapperPath} 失败: ${describeError(err)}` };\n }\n}\n\nfunction pathExists(path: string): boolean {\n try {\n lstatSync(path);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction isExistingWrapperForTarget(wrapperPath: string, target: string): boolean {\n if (process.platform === \"win32\") {\n try {\n return readFileSync(wrapperPath, \"utf-8\").includes(`\"${target}\"`);\n } catch {\n return false;\n }\n }\n\n try {\n if (!lstatSync(wrapperPath).isSymbolicLink()) {\n return false;\n }\n return realpathSync(wrapperPath) === realpathSync(target);\n } catch {\n return false;\n }\n}\n\nfunction describeError(err: unknown): string {\n if (err instanceof Error) return err.message;\n return String(err);\n}\n\nfunction splitPathDirs(envPath: string): string[] {\n return envPath\n .split(delimiter)\n .map((entry) => entry.trim())\n .filter((entry) => entry && isAbsolute(entry));\n}\n\nfunction inferHostCliNames(argv: string[]): string[] {\n const names = [\"openclaw\", \"jvsclaw\", \"qclaw\"];\n const invoked = argv[1]?.split(/[\\\\/]/).pop()?.trim();\n if (invoked && !invoked.startsWith(\"node\") && !names.includes(invoked)) {\n names.unshift(invoked);\n }\n return names;\n}\n\nfunction findCommandOnPath(command: string, pathDirs: string[]): string | undefined {\n const names =\n process.platform === \"win32\" && !command.toLowerCase().endsWith(\".cmd\")\n ? [command, `${command}.cmd`, `${command}.exe`]\n : [command];\n\n for (const dir of pathDirs) {\n for (const name of names) {\n const candidate = join(dir, name);\n if (existsSync(candidate)) {\n return candidate;\n }\n }\n }\n return undefined;\n}\n\nfunction pushCandidate(\n candidates: NtfBinInstallDir[],\n dir: string,\n label: string,\n onPath: boolean,\n): void {\n if (!dir || candidates.some((candidate) => candidate.dir === dir)) {\n return;\n }\n candidates.push({ dir, label, onPath });\n}\n",
88
88
  "import { readFileSync } from \"node:fs\";\nimport type { OpenClawPluginApi } from \"openclaw/plugin-sdk\";\nimport { resolveConfigPath, resolveStateDir } from \"../host.js\";\nimport type { Logger } from \"../logger.js\";\nimport { createAppNameMapProvider } from \"../notification/app-name-map.js\";\nimport {\n NotificationStorage,\n resolveNotificationStorageDir,\n} from \"../notification/storage.js\";\nimport {\n RecordingStorage,\n resolveRecordingStorageDir,\n} from \"../recording/index.js\";\nimport {\n ImageStorage,\n resolveImageStorageDir,\n} from \"../image/index.js\";\nimport {\n createTunnelService,\n type RelayTunnelService,\n} from \"../tunnel/service.js\";\nimport type { PluginConfig } from \"../types.js\";\nimport { getEnvUrls, loadEnvName } from \"../env.js\";\nimport { resolveAuthProvider } from \"../profile/auth/index.js\";\nimport { trimToUndefined } from \"./shared.js\";\n\ninterface LightRuleContext {\n workspaceDir?: string;\n stateDir?: string;\n}\n\ninterface StorageLifecycleDeps {\n api: OpenClawPluginApi;\n logger: Logger;\n lightRuleCtx: LightRuleContext;\n setStorage: (storage: NotificationStorage | null) => void;\n setRecordingStorage: (storage: RecordingStorage | null) => void;\n setImageStorage: (storage: ImageStorage | null) => void;\n /**\n * 在 storage service 完成 start 之后触发,此时 lightRuleCtx 已被回填。\n * 用于让 LightRuleRegistry 等下游组件在拿到真实 workspaceDir 后重新加载状态。\n */\n onStorageReady?: () => void;\n}\n\nexport function registerStorageLifecycle(\n deps: StorageLifecycleDeps,\n): void {\n const {\n api,\n logger,\n lightRuleCtx,\n setStorage,\n setRecordingStorage,\n setImageStorage,\n onStorageReady,\n } = deps;\n\n let storage: NotificationStorage | null = null;\n let recordingStorage: RecordingStorage | null = null;\n let imageStorage: ImageStorage | null = null;\n let appNameMapProvider: ReturnType<typeof createAppNameMapProvider> | null = null;\n\n api.registerService({\n id: \"notification-storage\",\n async start(ctx) {\n const stateDir = resolveStateDir(ctx.stateDir);\n const storageCtx = { ...ctx, stateDir };\n const storageDir = resolveNotificationStorageDir(storageCtx, logger);\n\n appNameMapProvider = createAppNameMapProvider({\n stateDir,\n logger,\n });\n await appNameMapProvider.start();\n\n const resolveDisplayName = appNameMapProvider.resolveDisplayName.bind(appNameMapProvider);\n storage = new NotificationStorage(storageDir, logger, resolveDisplayName);\n await storage.init();\n setStorage(storage);\n logger.info(`通知存储服务已启动: ${storageDir}`);\n\n const recDir = resolveRecordingStorageDir(storageCtx, logger);\n recordingStorage = new RecordingStorage(recDir, logger);\n await recordingStorage.init();\n setRecordingStorage(recordingStorage);\n logger.info(`录音存储服务已启动: ${recDir}`);\n\n const imageDir = resolveImageStorageDir(storageCtx, logger);\n imageStorage = new ImageStorage(imageDir, logger);\n await imageStorage.init();\n setImageStorage(imageStorage);\n logger.info(`图片存储服务已启动: ${imageDir}`);\n\n // storage service start 完成后,把真实的 workspaceDir/stateDir 回填到\n // lightRuleCtx,再触发 onStorageReady 让 LightRuleRegistry 重新扫盘。\n lightRuleCtx.workspaceDir = ctx.workspaceDir;\n lightRuleCtx.stateDir = stateDir;\n onStorageReady?.();\n },\n async stop() {\n await storage?.close();\n storage = null;\n setStorage(null);\n\n await recordingStorage?.close();\n recordingStorage = null;\n setRecordingStorage(null);\n\n await imageStorage?.close();\n imageStorage = null;\n setImageStorage(null);\n\n appNameMapProvider?.stop();\n appNameMapProvider = null;\n logger.info(\"通知/录音/图片存储服务已停止\");\n },\n });\n}\n\nfunction readHostGatewayConfig(params: {\n stateDir?: string;\n logger: Pick<Logger, \"warn\">;\n}) {\n const configPath = params.stateDir\n ? resolveConfigPath(params.stateDir)\n : undefined;\n\n let configData: any;\n\n if (configPath) {\n try {\n configData = JSON.parse(readFileSync(configPath, \"utf-8\"));\n } catch (err: any) {\n if (err?.code !== \"ENOENT\") {\n params.logger.warn(\n `Relay tunnel: 无法读取 gateway 鉴权配置 (${configPath})`,\n );\n }\n }\n }\n\n return configData;\n}\n\nfunction resolveLocalGatewayAuth(params: {\n stateDir?: string;\n logger: Pick<Logger, \"warn\">;\n}): {\n gatewayAuthMode?: \"token\" | \"password\";\n gatewayToken?: string;\n gatewayPassword?: string;\n} {\n const envGatewayToken =\n trimToUndefined(process.env.OPENCLAW_GATEWAY_TOKEN) ??\n trimToUndefined(process.env.QCLAW_GATEWAY_TOKEN);\n const envGatewayPassword =\n trimToUndefined(process.env.OPENCLAW_GATEWAY_PASSWORD) ??\n trimToUndefined(process.env.QCLAW_GATEWAY_PASSWORD);\n\n const configData = readHostGatewayConfig(params);\n let configGatewayAuthMode: \"token\" | \"password\" | undefined;\n const rawGatewayAuthMode = trimToUndefined(configData?.gateway?.auth?.mode);\n if (rawGatewayAuthMode === \"token\" || rawGatewayAuthMode === \"password\") {\n configGatewayAuthMode = rawGatewayAuthMode;\n }\n const configGatewayToken = trimToUndefined(configData?.gateway?.auth?.token);\n const configGatewayPassword = trimToUndefined(configData?.gateway?.auth?.password);\n\n return {\n gatewayAuthMode: configGatewayAuthMode,\n gatewayToken: envGatewayToken ?? configGatewayToken,\n gatewayPassword: envGatewayPassword ?? configGatewayPassword,\n };\n}\n\nconst DISABLED_TAILSCALE_MODES = new Set([\n \"off\",\n \"disabled\",\n \"disable\",\n \"none\",\n \"false\",\n \"no\",\n]);\n\nfunction resolveExclusiveTunnelHint(params: {\n stateDir?: string;\n logger: Pick<Logger, \"warn\">;\n}): string | undefined {\n const configData = readHostGatewayConfig(params);\n const tailscaleMode = trimToUndefined(configData?.gateway?.tailscale?.mode);\n if (\n tailscaleMode &&\n !DISABLED_TAILSCALE_MODES.has(tailscaleMode.toLowerCase())\n ) {\n return `gateway.tailscale.mode=${tailscaleMode}`;\n }\n\n const remoteUrl = trimToUndefined(configData?.gateway?.remote?.url);\n if (remoteUrl && isExternalGatewayRemoteUrl(remoteUrl)) {\n return `gateway.remote.url=${remoteUrl}`;\n }\n\n return undefined;\n}\n\nfunction isExternalGatewayRemoteUrl(rawUrl: string): boolean {\n let host: string;\n try {\n host = new URL(rawUrl).hostname.toLowerCase();\n } catch {\n return false;\n }\n\n if (host === \"localhost\" || host === \"::1\" || host === \"[::1]\") {\n return false;\n }\n\n return !/^127(?:\\.\\d{1,3}){0,3}$/.test(host);\n}\n\ninterface RelayTunnelDeps {\n api: OpenClawPluginApi;\n config: PluginConfig;\n logger: Logger;\n openclawDir?: string;\n}\n\nexport function registerRelayTunnelLifecycle(\n deps: RelayTunnelDeps,\n): RelayTunnelService | null {\n const {\n api,\n config,\n logger,\n openclawDir,\n } = deps;\n\n const envName = loadEnvName();\n const envUrls = getEnvUrls();\n logger.info(\n `phone-notifications env=${envName} relayTunnelUrl=${envUrls.relayTunnelUrl} lightApiUrl=${envUrls.lightApiUrl} lightRulesUrl=${envUrls.notificationIntelligenceLightRulesPluginUrl} clawManagerInstanceReadyUrl=${envUrls.clawManagerInstanceReadyUrl}`,\n );\n\n const tunnelUrl = envUrls.relayTunnelUrl;\n if (!tunnelUrl) {\n return null;\n }\n\n const exclusiveTunnelHint = resolveExclusiveTunnelHint({\n stateDir: openclawDir,\n logger,\n });\n if (exclusiveTunnelHint) {\n logger.info(\n `Relay tunnel: detected ${exclusiveTunnelHint} in host gateway config, skipping relay startup to keep ingress mutually exclusive`,\n );\n return null;\n }\n\n const gatewayPort =\n process.env.OPENCLAW_GATEWAY_PORT ??\n process.env.QCLAW_GATEWAY_PORT ??\n \"18789\";\n const { gatewayAuthMode, gatewayToken, gatewayPassword } =\n resolveLocalGatewayAuth({\n stateDir: openclawDir,\n logger,\n });\n\n const authProvider = resolveAuthProvider({ logger, pluginConfig: config });\n\n const tunnelService = createTunnelService({\n tunnelUrl,\n authProvider,\n heartbeatSec: config.relay?.heartbeatSec,\n reconnectBackoffMs: config.relay?.reconnectBackoffMs,\n gatewayBaseUrl: `http://localhost:${gatewayPort}`,\n gatewayAuthMode,\n gatewayToken,\n gatewayPassword,\n logger,\n });\n\n api.registerService(tunnelService);\n logger.info(\"Relay tunnel 服务已注册\");\n return tunnelService;\n}\n",
89
89
  "import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { loadApiKey, watchCredentials } from \"../auth/credentials.js\";\nimport { getEnvUrls } from \"../env.js\";\n\nconst PLUGIN_STATE_DIR = \"phone-notifications\";\nconst CACHE_FILE = \"app-name-map.json\";\n\n/** 包名→应用名映射 API 地址(默认随环境变化;可用 APP_NAME_MAP_URL 覆盖;需鉴权) */\nconst BUILTIN_APP_NAME_MAP_URL = getEnvUrls().appNameMapUrl;\nconst APP_NAME_MAP_URL =\n (typeof process.env.APP_NAME_MAP_URL === \"string\" && process.env.APP_NAME_MAP_URL.trim()\n ? process.env.APP_NAME_MAP_URL.trim()\n : undefined) ?? BUILTIN_APP_NAME_MAP_URL;\n/** 映射刷新间隔(小时) */\nconst APP_NAME_MAP_REFRESH_HOURS = 12;\n\ninterface Logger {\n info: (message: string) => void;\n warn: (message: string) => void;\n}\n\nfunction isRecordOfStrings(v: unknown): v is Record<string, string> {\n if (v === null || typeof v !== \"object\") return false;\n for (const val of Object.values(v)) if (typeof val !== \"string\") return false;\n return true;\n}\n\n/** API 返回的单项 */\ninterface AppPackageItem {\n appName: string;\n packageName: string;\n iconUrl?: string | null;\n platform?: string | null;\n jumpUrl?: string | null;\n urlParams?: string | null;\n description?: string | null;\n}\n\n/** API 响应格式 */\ninterface AppNameMapApiResponse {\n success?: boolean;\n code?: string;\n message?: string;\n data?: AppPackageItem[];\n}\n\nfunction isAppNameMapApiResponse(v: unknown): v is AppNameMapApiResponse {\n if (v === null || typeof v !== \"object\") return false;\n const o = v as Record<string, unknown>;\n return Array.isArray(o.data) && o.data.every(\n (item: unknown) =>\n item !== null &&\n typeof item === \"object\" &&\n typeof (item as AppPackageItem).packageName === \"string\" &&\n typeof (item as AppPackageItem).appName === \"string\"\n );\n}\n\nfunction getCachePath(stateDir: string): string {\n return join(stateDir, \"plugins\", PLUGIN_STATE_DIR, CACHE_FILE);\n}\n\nexport interface AppNameMapProvider {\n /** 解析包名为显示名(未命中时拉取一次再返回,保证当前落库即有值) */\n resolveDisplayName(packageName: string): Promise<string>;\n start(): Promise<void>;\n stop(): void;\n}\n\nexport function createAppNameMapProvider(opts: {\n stateDir: string;\n logger: Logger;\n}): AppNameMapProvider {\n const { stateDir, logger } = opts;\n const url = APP_NAME_MAP_URL;\n const refreshHours = APP_NAME_MAP_REFRESH_HOURS;\n\n const map = new Map<string, string>();\n let refreshTimer: ReturnType<typeof setInterval> | null = null;\n let stopWatching: (() => void) | null = null;\n let inFlightFetch: Promise<void> | null = null;\n\n function loadFromDisk(): void {\n const path = getCachePath(stateDir);\n if (!existsSync(path)) return;\n try {\n const raw = JSON.parse(readFileSync(path, \"utf-8\"));\n if (!isRecordOfStrings(raw)) return;\n map.clear();\n for (const [k, v] of Object.entries(raw)) map.set(k, v);\n logger.info(`[app-name-map] loaded ${map.size} entries from cache: ${path}`);\n } catch {\n /* ignore */\n }\n }\n\n async function fetchFromServer(): Promise<void> {\n const apiKey = loadApiKey();\n if (!url) {\n logger.warn(\"[app-name-map] APP_NAME_MAP_URL is empty, skip refresh\");\n return;\n }\n if (!apiKey) {\n logger.info(\"[app-name-map] api key missing, skip refresh\");\n return;\n }\n\n const rawApiKey = apiKey.startsWith(\"Bearer \")\n ? apiKey.slice(\"Bearer \".length)\n : apiKey;\n try {\n const res = await fetch(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\", \"X-Api-Key-Id\": rawApiKey },\n body: JSON.stringify({\n platform: \"\"\n })\n });\n if (!res.ok) {\n logger.warn(`[app-name-map] refresh failed: HTTP ${res.status} ${res.statusText}`);\n return;\n }\n const body = await res.json() as unknown;\n if (!isAppNameMapApiResponse(body) || !body.success || !body.data?.length) {\n logger.warn(\"[app-name-map] refresh failed: unexpected response shape or empty data\");\n return;\n }\n map.clear();\n for (const item of body.data) {\n if (item.packageName && item.appName) map.set(item.packageName, item.appName);\n }\n if (map.size === 0) {\n logger.warn(\"[app-name-map] refresh succeeded but got 0 entries\");\n return;\n }\n const dir = join(stateDir, \"plugins\", PLUGIN_STATE_DIR);\n\n mkdirSync(dir, { recursive: true });\n const cachePath = getCachePath(stateDir);\n writeFileSync(cachePath, JSON.stringify(Object.fromEntries(map), null, 2), \"utf-8\");\n logger.info(`[app-name-map] refreshed ${map.size} entries from server and saved: ${cachePath}`);\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n logger.warn(`[app-name-map] refresh error: ${message}`);\n }\n }\n\n async function ensureOneFetch(): Promise<void> {\n if (inFlightFetch) return inFlightFetch;\n inFlightFetch = fetchFromServer().finally(() => {\n inFlightFetch = null;\n });\n return inFlightFetch;\n }\n\n function refreshInBackground(): void {\n void ensureOneFetch().catch((e) => {\n const message = e instanceof Error ? e.message : String(e);\n logger.warn(`[app-name-map] background refresh error: ${message}`);\n });\n }\n\n return {\n async resolveDisplayName(packageName: string): Promise<string> {\n // 临时策略:仅使用内存/磁盘中已有的映射,缺少时不主动触发拉取\n if (map.has(packageName)) return map.get(packageName)!;\n return packageName;\n // 如需在缺少应用名时触发一次拉取再返回,可恢复为:\n // if (!url || !loadApiKey()) return packageName;\n // await ensureOneFetch();\n // return map.get(packageName) ?? packageName;\n },\n\n async start(): Promise<void> {\n loadFromDisk();\n refreshInBackground();\n\n if (!url) return;\n\n if (refreshHours > 0) {\n const ms = refreshHours * 60 * 60 * 1000;\n refreshTimer = setInterval(refreshInBackground, ms);\n }\n stopWatching = watchCredentials(refreshInBackground);\n },\n\n stop(): void {\n stopWatching?.();\n stopWatching = null;\n if (refreshTimer) {\n clearInterval(refreshTimer);\n refreshTimer = null;\n }\n map.clear();\n },\n };\n}\n",
90
- "/**\n * 录音本地存储管理(§5.2)\n *\n * 目录结构:\n * <storageDir>/recordings/\n * ├── audio/ # 原始音频 + 打点文件\n * │ ├── 2026-03-23_14-32.ogg\n * │ └── 2026-03-23_14-32.srt\n * ├── transcript-data/ # 转写 JSON(主存储)\n * │ └── 2026-03-23_14-32.json\n * ├── transcripts/ # 转写文本\n * │ └── 2026-03-23_14-32_与王总沟通产品方向.md\n * ├── summaries/ # 转写摘要\n * │ └── 2026-03-23_14-32.md\n * └── index.json # 元数据索引\n */\n\nimport {\n existsSync,\n mkdirSync,\n readFileSync,\n writeFileSync,\n rmSync,\n readdirSync,\n statSync,\n} from \"node:fs\";\nimport { join, basename } from \"node:path\";\nimport type {\n RecordingMetadata,\n RecordingTransferStatus,\n} from \"../types.js\";\nimport { transition } from \"./state-machine.js\";\nimport type { Logger } from \"../logger.js\";\nimport { currentClientLabel } from \"../ingest-context.js\";\nimport {\n buildTranscriptDataFilename as buildTranscriptDataJsonFilename,\n buildTranscriptDocument,\n extractTranscriptSummaryFromDocument,\n extractTranscriptTextFromDocument,\n extractTranscriptTitleFromDocument,\n parseTranscriptDocument,\n} from \"./transcript-document.js\";\n\n/**\n * 从 OSS URL 中提取音频文件扩展名(含点号,如 \".ogg\")\n * 默认返回 \".ogg\"(小硬件录音为 Opus/OGG 格式)\n */\nfunction extractAudioExt(ossUrl: string): string {\n try {\n const pathname = new URL(ossUrl).pathname;\n const m = pathname.match(/(\\.[a-z0-9]+)(?:\\?|$)/i);\n if (m) return m[1].toLowerCase();\n } catch {\n const m = ossUrl.match(/(\\.[a-z0-9]+)(?:\\?|$)/i);\n if (m) return m[1].toLowerCase();\n }\n return \".ogg\"; // 硬件默认录音格式(Opus/OGG)\n}\n\n// ─── Types ───\n\n/** 持久化到 index.json 的单条录音记录 */\nexport interface RecordingIndexEntry {\n /** 录音 ID,基于文件名(如 \"2026-03-23_14-32\") */\n id: string;\n /** 原始元数据 */\n metadata: RecordingMetadata;\n /** 来源客户端 label;旧数据无该字段,查询时视为 legacy */\n clientLabel?: string;\n /** 当前插件侧状态 */\n status: RecordingTransferStatus;\n /** 本地音频文件相对路径 */\n audioFile?: string;\n /** 本地打点文件相对路径 */\n srtFile?: string;\n /** 本地转写文件相对路径 */\n transcriptFile?: string;\n /** 本地转写 JSON 文件相对路径 */\n transcriptDataFile?: string;\n /** 本地摘要文件相对路径 */\n summaryFile?: string;\n /** 转写标题 */\n title?: string;\n /** 最近一次失败原因(同步失败 / 转写失败) */\n lastError?: string;\n /** 入库时间 ISO 8601 */\n ingestedAt: string;\n /** 最后更新时间 ISO 8601 */\n updatedAt: string;\n}\n\n/** 录音存储索引(整个 index.json) */\ninterface RecordingIndex {\n recordings: RecordingIndexEntry[];\n}\n\nexport interface RecordingStorageContext {\n stateDir: string;\n workspaceDir?: string;\n}\n\n// ─── Constants ───\n\nconst RECORDINGS_DIR = \"recordings\";\nconst AUDIO_DIR = \"audio\";\nconst TRANSCRIPT_DATA_DIR = \"transcript-data\";\nconst TRANSCRIPTS_DIR = \"transcripts\";\nconst SUMMARIES_DIR = \"summaries\";\nconst INDEX_FILE = \"index.json\";\n\nfunction stripMarkdownFence(markdown: string): string {\n return markdown.replace(/\\r\\n/g, \"\\n\");\n}\n\nfunction deriveTitleFromTranscriptPath(\n transcriptFile: string | undefined,\n recordingId: string,\n): string | undefined {\n if (!transcriptFile) return undefined;\n const name = basename(transcriptFile, \".md\");\n const prefix = `${recordingId}_`;\n if (name.startsWith(prefix)) {\n const derived = name.slice(prefix.length).trim();\n return derived || undefined;\n }\n return undefined;\n}\n\nfunction extractTranscriptContent(markdown: string): string {\n const normalized = stripMarkdownFence(markdown);\n const firstDivider = normalized.indexOf(\"\\n---\\n\");\n let body = firstDivider >= 0\n ? normalized.slice(firstDivider + \"\\n---\\n\".length)\n : normalized;\n\n if (body.startsWith(\"\\n\")) {\n body = body.slice(1);\n }\n\n if (body.startsWith(\"### 关键点\")) {\n const secondDivider = body.indexOf(\"\\n---\\n\");\n if (secondDivider >= 0) {\n body = body.slice(secondDivider + \"\\n---\\n\".length);\n if (body.startsWith(\"\\n\")) {\n body = body.slice(1);\n }\n }\n }\n\n const lines = body\n .split(\"\\n\")\n .filter((line) => !/^\\*\\*\\[关键点 .+\\]\\*\\*$/.test(line.trim()))\n .filter((line) => !/^- \\*\\*\\[关键点 .+\\]\\*\\*$/.test(line.trim()));\n\n return lines.join(\"\\n\").replace(/\\n{3,}/g, \"\\n\\n\").trim();\n}\n\n// ─── Public Functions ───\n\n/**\n * 解析录音存储根目录(复用通知同级的 stateDir 路径)\n */\nexport function resolveRecordingStorageDir(\n ctx: RecordingStorageContext,\n logger: Pick<Logger, \"info\" | \"warn\">,\n): string {\n const stateRecDir = join(\n ctx.stateDir,\n \"plugins\",\n \"phone-notifications\",\n RECORDINGS_DIR,\n );\n\n try {\n mkdirSync(stateRecDir, { recursive: true });\n logger.info(`录音将写入 stateDir 路径: ${stateRecDir}`);\n return stateRecDir;\n } catch {\n // fallback\n }\n\n if (ctx.workspaceDir) {\n const wsRecDir = join(ctx.workspaceDir, RECORDINGS_DIR);\n try {\n mkdirSync(wsRecDir, { recursive: true });\n logger.warn(`stateDir 不可用,录音已回退到 workspace 路径: ${wsRecDir}`);\n return wsRecDir;\n } catch {\n // fallthrough\n }\n }\n\n throw new Error(`录音存储目录不可用: ${stateRecDir}`);\n}\n\n// ─── RecordingStorage Class ───\n\nexport class RecordingStorage {\n private readonly dir: string;\n private readonly audioDir: string;\n private readonly transcriptDataDir: string;\n private readonly transcriptsDir: string;\n private readonly summariesDir: string;\n private readonly indexPath: string;\n private index: RecordingIndex = { recordings: [] };\n\n constructor(\n dir: string,\n private readonly logger: Logger,\n ) {\n this.dir = dir;\n this.audioDir = join(dir, AUDIO_DIR);\n this.transcriptDataDir = join(dir, TRANSCRIPT_DATA_DIR);\n this.transcriptsDir = join(dir, TRANSCRIPTS_DIR);\n this.summariesDir = join(dir, SUMMARIES_DIR);\n this.indexPath = join(dir, INDEX_FILE);\n }\n\n /** 初始化目录结构并加载索引 */\n async init(): Promise<void> {\n mkdirSync(this.audioDir, { recursive: true });\n mkdirSync(this.transcriptDataDir, { recursive: true });\n mkdirSync(this.transcriptsDir, { recursive: true });\n mkdirSync(this.summariesDir, { recursive: true });\n this.loadIndex();\n this.logger.info(\n `录音存储已初始化: ${this.dir}(共 ${this.index.recordings.length} 条记录)`,\n );\n }\n\n /** 获取音频目录路径 */\n getAudioDir(): string {\n return this.audioDir;\n }\n\n /** 获取转写 JSON 目录路径 */\n getTranscriptDataDir(): string {\n return this.transcriptDataDir;\n }\n\n /** 获取转写目录路径 */\n getTranscriptsDir(): string {\n return this.transcriptsDir;\n }\n\n /** 获取摘要目录路径 */\n getSummariesDir(): string {\n return this.summariesDir;\n }\n\n // ─── 录音入库 ───\n\n /**\n * 收到 recordings.sync 后,将元数据写入索引。\n * 如果同 ID 录音已存在则更新,否则新建。\n * 返回录音 ID。\n */\n ingest(recordingId: string, metadata: RecordingMetadata): string {\n const id = recordingId;\n const clientLabel = currentClientLabel(\"default\");\n const existing = this.findById(id);\n\n if (existing) {\n const sameAudioUrl = existing.metadata.oss_audio_url === metadata.oss_audio_url;\n const canPreserveSyncState =\n sameAudioUrl\n && !!existing.audioFile\n && existing.status !== \"syncing_openclaw\"\n && existing.status !== \"sync_failed\";\n\n if (canPreserveSyncState) {\n existing.metadata = metadata;\n existing.clientLabel = clientLabel;\n existing.updatedAt = new Date().toISOString();\n this.saveIndex();\n this.logger.info(\n `录音元数据已更新: ${id}(同音频,保留状态 ${existing.status})`,\n );\n return id;\n }\n\n // 更新已有记录(覆盖上传/本地文件缺失场景)\n if (existing.transcriptDataFile) {\n rmSync(join(this.dir, existing.transcriptDataFile), { force: true });\n }\n if (existing.transcriptFile) {\n rmSync(join(this.dir, existing.transcriptFile), { force: true });\n }\n if (existing.summaryFile) {\n rmSync(join(this.dir, existing.summaryFile), { force: true });\n }\n existing.metadata = metadata;\n existing.clientLabel = clientLabel;\n existing.status = \"syncing_openclaw\";\n existing.transcriptDataFile = undefined;\n existing.transcriptFile = undefined;\n existing.summaryFile = undefined;\n existing.title = undefined;\n existing.lastError = undefined;\n existing.updatedAt = new Date().toISOString();\n this.logger.info(`录音元数据已更新: ${id}`);\n } else {\n const entry: RecordingIndexEntry = {\n id,\n metadata,\n clientLabel,\n status: \"syncing_openclaw\",\n ingestedAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n };\n this.index.recordings.push(entry);\n this.logger.info(`录音元数据已入库: ${id}`);\n }\n\n this.saveIndex();\n return id;\n }\n\n // ─── 状态管理 ───\n\n /**\n * 更新录音传输状态(严格状态机校验)\n */\n updateStatus(\n recordingId: string,\n newStatus: RecordingTransferStatus,\n ): RecordingIndexEntry {\n const entry = this.findById(recordingId);\n if (!entry) {\n throw new Error(`录音不存在: ${recordingId}`);\n }\n\n const validatedStatus = transition(entry.status, newStatus);\n entry.status = validatedStatus;\n entry.updatedAt = new Date().toISOString();\n this.saveIndex();\n this.logger.info(`录音状态更新: ${recordingId} → ${newStatus}`);\n return entry;\n }\n\n /** 外部结果写入后,直接标记为已转写。 */\n markResultWritten(recordingId: string): RecordingIndexEntry {\n const entry = this.findById(recordingId);\n if (!entry) {\n throw new Error(`录音不存在: ${recordingId}`);\n }\n entry.status = \"transcribed\";\n entry.lastError = undefined;\n entry.updatedAt = new Date().toISOString();\n this.saveIndex();\n this.logger.info(`录音结果已写入: ${recordingId}`);\n return entry;\n }\n\n /**\n * 记录本地音频文件已下载\n */\n setAudioFile(recordingId: string, filename: string): void {\n const entry = this.findById(recordingId);\n if (!entry) return;\n const nextAudioFile = `${AUDIO_DIR}/${filename}`;\n if (entry.audioFile && entry.audioFile !== nextAudioFile) {\n rmSync(join(this.dir, entry.audioFile), { force: true });\n }\n entry.audioFile = nextAudioFile;\n entry.updatedAt = new Date().toISOString();\n this.saveIndex();\n }\n\n /**\n * 记录本地打点文件已下载\n */\n setSrtFile(recordingId: string, filename: string): void {\n const entry = this.findById(recordingId);\n if (!entry) return;\n entry.srtFile = `${AUDIO_DIR}/${filename}`;\n entry.updatedAt = new Date().toISOString();\n this.saveIndex();\n }\n\n /**\n * 记录转写 JSON 文件路径\n */\n setTranscriptDataFile(recordingId: string, filename: string): void {\n const entry = this.findById(recordingId);\n if (!entry) return;\n const nextTranscriptDataFile = `${TRANSCRIPT_DATA_DIR}/${filename}`;\n if (entry.transcriptDataFile && entry.transcriptDataFile !== nextTranscriptDataFile) {\n rmSync(join(this.dir, entry.transcriptDataFile), { force: true });\n }\n entry.transcriptDataFile = nextTranscriptDataFile;\n entry.updatedAt = new Date().toISOString();\n this.saveIndex();\n }\n\n /**\n * 记录转写文件路径\n */\n setTranscriptFile(recordingId: string, filename: string): void {\n const entry = this.findById(recordingId);\n if (!entry) return;\n const nextTranscriptFile = `${TRANSCRIPTS_DIR}/${filename}`;\n if (entry.transcriptFile && entry.transcriptFile !== nextTranscriptFile) {\n rmSync(join(this.dir, entry.transcriptFile), { force: true });\n }\n entry.transcriptFile = nextTranscriptFile;\n entry.updatedAt = new Date().toISOString();\n this.saveIndex();\n }\n\n /**\n * 记录摘要文件路径\n */\n setSummaryFile(recordingId: string, filename: string): void {\n const entry = this.findById(recordingId);\n if (!entry) return;\n const nextSummaryFile = `${SUMMARIES_DIR}/${filename}`;\n if (entry.summaryFile && entry.summaryFile !== nextSummaryFile) {\n rmSync(join(this.dir, entry.summaryFile), { force: true });\n }\n entry.summaryFile = nextSummaryFile;\n entry.updatedAt = new Date().toISOString();\n this.saveIndex();\n }\n\n /**\n * 记录转写标题\n */\n setTitle(recordingId: string, title?: string): void {\n const entry = this.findById(recordingId);\n if (!entry) return;\n entry.title = title?.trim() || undefined;\n entry.updatedAt = new Date().toISOString();\n this.saveIndex();\n }\n\n /**\n * 记录最近一次失败原因;传 undefined 表示清除错误\n */\n setLastError(recordingId: string, error?: string): void {\n const entry = this.findById(recordingId);\n if (!entry) return;\n entry.lastError = error?.trim() || undefined;\n entry.updatedAt = new Date().toISOString();\n this.saveIndex();\n }\n\n /**\n * 读取摘要文本\n */\n readSummary(recordingId: string): string | undefined {\n const entry = this.findById(recordingId);\n if (!entry) return undefined;\n\n if (entry.summaryFile) {\n const summary = this.readRelativeTextFile(entry.summaryFile);\n if (summary?.trim()) {\n return summary.trim();\n }\n }\n\n const transcriptDoc = entry.transcriptDataFile\n ? this.readRelativeTranscriptDocument(entry.transcriptDataFile)\n : undefined;\n return extractTranscriptSummaryFromDocument(transcriptDoc);\n }\n\n /**\n * 优先从 transcript JSON 中读取正文,旧数据回退读取 Markdown。\n */\n readTranscript(recordingId: string): string | undefined {\n const entry = this.findById(recordingId);\n if (!entry) return undefined;\n\n if (entry.transcriptDataFile) {\n const transcriptDoc = this.readRelativeTranscriptDocument(entry.transcriptDataFile);\n const transcriptFromJson = extractTranscriptTextFromDocument(transcriptDoc);\n if (transcriptFromJson !== undefined) {\n return transcriptFromJson;\n }\n }\n\n if (!entry.transcriptFile) return undefined;\n const markdown = this.readRelativeTextFile(entry.transcriptFile);\n if (!markdown) return undefined;\n const transcript = extractTranscriptContent(markdown);\n return transcript || undefined;\n }\n\n /**\n * 读取结构化 transcript JSON。\n */\n readTranscriptDocument(recordingId: string) {\n const entry = this.findById(recordingId);\n if (!entry?.transcriptDataFile) {\n return undefined;\n }\n return this.readRelativeTranscriptDocument(entry.transcriptDataFile);\n }\n\n // ─── 查询 ───\n\n findById(id: string): RecordingIndexEntry | undefined {\n return this.index.recordings.find((r) => r.id === id);\n }\n\n listAll(): RecordingIndexEntry[] {\n return [...this.index.recordings].sort(\n (a, b) => b.metadata.created_at.localeCompare(a.metadata.created_at),\n );\n }\n\n listByStatus(status: RecordingTransferStatus): RecordingIndexEntry[] {\n return this.listAll().filter((r) => r.status === status);\n }\n\n rename(recordingId: string, name: string): RecordingIndexEntry {\n const entry = this.findById(recordingId);\n if (!entry) {\n throw new Error(`录音不存在: ${recordingId}`);\n }\n\n entry.metadata = {\n ...entry.metadata,\n name,\n };\n entry.updatedAt = new Date().toISOString();\n this.saveIndex();\n this.logger.info(`录音名称已更新: ${recordingId} → ${name}`);\n return entry;\n }\n\n // ─── 删除 ───\n\n /**\n * 删除录音及其本地文件(约束 R-4 安全删除)\n *\n * @param opts.localOnly 仅删除本地文件(音频/打点/转写),保留索引条目。\n * App 端\"仅删除本地\"时使用此模式,插件侧保留元数据记录。\n * 默认 false — 完整删除(文件 + 索引)。\n */\n delete(\n recordingId: string,\n opts?: { localOnly?: boolean },\n ): boolean {\n const entry = this.findById(recordingId);\n if (!entry) return false;\n\n // 删除本地文件\n if (entry.audioFile) {\n const audioPath = join(this.dir, entry.audioFile);\n rmSync(audioPath, { force: true });\n }\n if (entry.srtFile) {\n const srtPath = join(this.dir, entry.srtFile);\n rmSync(srtPath, { force: true });\n }\n if (entry.transcriptDataFile) {\n const transcriptDataPath = join(this.dir, entry.transcriptDataFile);\n rmSync(transcriptDataPath, { force: true });\n }\n if (entry.transcriptFile) {\n const transcriptPath = join(this.dir, entry.transcriptFile);\n rmSync(transcriptPath, { force: true });\n }\n if (entry.summaryFile) {\n const summaryPath = join(this.dir, entry.summaryFile);\n rmSync(summaryPath, { force: true });\n }\n\n if (opts?.localOnly) {\n // 保留索引条目,清除文件引用\n entry.audioFile = undefined;\n entry.srtFile = undefined;\n entry.transcriptDataFile = undefined;\n entry.transcriptFile = undefined;\n entry.summaryFile = undefined;\n entry.updatedAt = new Date().toISOString();\n this.saveIndex();\n this.logger.info(`录音本地文件已删除(保留索引): ${recordingId}`);\n } else {\n // 从索引中移除\n this.index.recordings = this.index.recordings.filter(\n (r) => r.id !== recordingId,\n );\n this.saveIndex();\n this.logger.info(`录音已完整删除: ${recordingId}`);\n }\n return true;\n }\n\n // ─── Helpers ───\n\n /**\n * 生成音频文件名。扩展名从 OSS URL 中提取,未提供时默认 .ogg(硬件录音格式)\n */\n buildAudioFilename(recordingId: string, ossUrl?: string): string {\n const ext = ossUrl ? extractAudioExt(ossUrl) : \".ogg\";\n return `${recordingId}${ext}`;\n }\n\n /**\n * 生成打点文件名\n */\n buildSrtFilename(recordingId: string): string {\n return `${recordingId}.srt`;\n }\n\n /**\n * 生成转写 JSON 文件名\n */\n buildTranscriptDataFilename(recordingId: string): string {\n return buildTranscriptDataJsonFilename(recordingId);\n }\n\n /**\n * 生成转写文件名\n * @param summary 摘要标题(≤ 10 字)\n */\n buildTranscriptFilename(recordingId: string, summary: string): string {\n // 清理文件名中的非法字符\n const safeSummary = summary\n .replace(/[/\\\\:*?\"<>|]/g, \"\")\n .trim()\n .slice(0, 20);\n return safeSummary\n ? `${recordingId}_${safeSummary}.md`\n : `${recordingId}.md`;\n }\n\n /**\n * 生成摘要文件名\n */\n buildSummaryFilename(recordingId: string): string {\n return `${recordingId}.md`;\n }\n\n /**\n * 获取音频文件的绝对路径。ossUrl 用于推断文件扩展名\n */\n getAudioFilePath(recordingId: string, ossUrl?: string): string {\n return join(this.audioDir, this.buildAudioFilename(recordingId, ossUrl));\n }\n\n /**\n * 获取打点文件的绝对路径\n */\n getSrtFilePath(recordingId: string): string {\n return join(this.audioDir, this.buildSrtFilename(recordingId));\n }\n\n /**\n * 获取转写 JSON 文件的绝对路径\n */\n getTranscriptDataFilePath(recordingId: string): string {\n return join(this.transcriptDataDir, this.buildTranscriptDataFilename(recordingId));\n }\n\n /**\n * 获取摘要文件的绝对路径\n */\n getSummaryFilePath(recordingId: string): string {\n return join(this.summariesDir, this.buildSummaryFilename(recordingId));\n }\n\n // ─── Persistence ───\n\n private loadIndex(): void {\n if (!existsSync(this.indexPath)) {\n this.index = { recordings: [] };\n return;\n }\n try {\n const raw = JSON.parse(readFileSync(this.indexPath, \"utf-8\"));\n if (raw && Array.isArray(raw.recordings)) {\n let needsRewrite = false;\n const normalized = raw.recordings\n .filter((entry: unknown) => entry && typeof entry === \"object\")\n .map((entry: any) => {\n const compacted: RecordingIndexEntry = {\n id: entry.id,\n metadata: entry.metadata,\n status: entry.status,\n ingestedAt: entry.ingestedAt,\n updatedAt: entry.updatedAt,\n };\n if (typeof entry.clientLabel === \"string\" && entry.clientLabel.trim()) {\n compacted.clientLabel = entry.clientLabel.trim();\n }\n if (typeof entry.audioFile === \"string\") compacted.audioFile = entry.audioFile;\n if (typeof entry.srtFile === \"string\") compacted.srtFile = entry.srtFile;\n if (typeof entry.transcriptFile === \"string\") {\n compacted.transcriptFile = entry.transcriptFile;\n }\n let transcriptDoc = typeof entry.transcriptDataFile === \"string\"\n ? this.readRelativeTranscriptDocument(entry.transcriptDataFile)\n : undefined;\n if (typeof entry.transcriptDataFile === \"string\" && transcriptDoc) {\n compacted.transcriptDataFile = entry.transcriptDataFile;\n } else {\n const legacyTranscriptText = typeof entry.transcript === \"string\" && entry.transcript.trim()\n ? entry.transcript.trim()\n : compacted.transcriptFile\n ? extractTranscriptContent(\n this.readRelativeTextFile(compacted.transcriptFile) ?? \"\",\n ) || undefined\n : undefined;\n const legacyTitle = typeof entry.title === \"string\" && entry.title.trim()\n ? entry.title.trim()\n : deriveTitleFromTranscriptPath(compacted.transcriptFile, compacted.id);\n const legacySummary = typeof entry.summary === \"string\" && entry.summary.trim()\n ? entry.summary.trim()\n : undefined;\n\n if (legacyTranscriptText) {\n transcriptDoc = buildTranscriptDocument({\n recordingId: compacted.id,\n generatedAt: compacted.updatedAt,\n source: {\n provider: \"legacy-markdown\",\n },\n title: legacyTitle,\n summary: legacySummary,\n text: legacyTranscriptText,\n segments: [],\n });\n const transcriptDataFilename = this.buildTranscriptDataFilename(compacted.id);\n writeFileSync(\n join(this.transcriptDataDir, transcriptDataFilename),\n JSON.stringify(transcriptDoc, null, 2),\n \"utf-8\",\n );\n compacted.transcriptDataFile = `${TRANSCRIPT_DATA_DIR}/${transcriptDataFilename}`;\n needsRewrite = true;\n }\n }\n\n if (typeof entry.summaryFile === \"string\") {\n compacted.summaryFile = entry.summaryFile;\n } else if (typeof entry.summary === \"string\" && entry.summary.trim()) {\n const summaryFilename = this.buildSummaryFilename(entry.id);\n writeFileSync(\n join(this.summariesDir, summaryFilename),\n entry.summary.trim(),\n \"utf-8\",\n );\n compacted.summaryFile = `${SUMMARIES_DIR}/${summaryFilename}`;\n needsRewrite = true;\n } else {\n const summaryFromDocument = extractTranscriptSummaryFromDocument(transcriptDoc);\n if (summaryFromDocument) {\n const summaryFilename = this.buildSummaryFilename(entry.id);\n writeFileSync(\n join(this.summariesDir, summaryFilename),\n summaryFromDocument,\n \"utf-8\",\n );\n compacted.summaryFile = `${SUMMARIES_DIR}/${summaryFilename}`;\n needsRewrite = true;\n }\n }\n if (typeof entry.title === \"string\" && entry.title.trim()) {\n compacted.title = entry.title.trim();\n } else {\n const titleFromDocument = extractTranscriptTitleFromDocument(transcriptDoc);\n const derivedTitle = titleFromDocument ?? deriveTitleFromTranscriptPath(\n compacted.transcriptFile,\n compacted.id,\n );\n if (derivedTitle) {\n compacted.title = derivedTitle;\n needsRewrite = true;\n }\n }\n if (typeof entry.lastError === \"string\" && entry.lastError.trim()) {\n compacted.lastError = entry.lastError.trim();\n }\n if (compacted.status === \"transcribing\") {\n compacted.status = \"transcribe_failed\";\n compacted.lastError = compacted.lastError\n ?? \"转写任务已中断,请重新发起转写\";\n compacted.updatedAt = new Date().toISOString();\n needsRewrite = true;\n }\n return compacted;\n });\n const hadLargeFields = raw.recordings.some(\n (entry: any) => entry && typeof entry === \"object\" && (\"transcript\" in entry || \"summary\" in entry),\n );\n this.index = { recordings: normalized };\n if (hadLargeFields || needsRewrite) {\n this.saveIndex();\n }\n } else {\n this.index = { recordings: [] };\n }\n } catch {\n this.logger.warn(`录音索引文件损坏,已重建: ${this.indexPath}`);\n this.index = { recordings: [] };\n }\n }\n\n private readRelativeTextFile(relativePath: string): string | undefined {\n try {\n return readFileSync(join(this.dir, relativePath), \"utf-8\");\n } catch {\n return undefined;\n }\n }\n\n private readRelativeTranscriptDocument(relativePath: string) {\n const raw = this.readRelativeTextFile(relativePath);\n if (!raw) {\n return undefined;\n }\n return parseTranscriptDocument(raw);\n }\n\n private saveIndex(): void {\n writeFileSync(\n this.indexPath,\n JSON.stringify(this.index, null, 2),\n \"utf-8\",\n );\n }\n\n async close(): Promise<void> {\n // 当前无需额外清理\n }\n}\n",
90
+ "/**\n * 录音本地存储管理(§5.2)\n *\n * 目录结构:\n * <storageDir>/recordings/\n * ├── audio/ # 原始音频 + 打点文件\n * │ ├── 2026-03-23_14-32.ogg\n * │ └── 2026-03-23_14-32.srt\n * ├── transcript-data/ # 转写 JSON(主存储)\n * │ └── 2026-03-23_14-32.json\n * ├── transcripts/ # 转写文本\n * │ └── 2026-03-23_14-32_与王总沟通产品方向.md\n * ├── summaries/ # 转写摘要\n * │ └── 2026-03-23_14-32.md\n * └── index.json # 元数据索引\n */\n\nimport {\n existsSync,\n mkdirSync,\n readFileSync,\n writeFileSync,\n rmSync,\n readdirSync,\n statSync,\n} from \"node:fs\";\nimport { join, basename } from \"node:path\";\nimport type {\n RecordingMetadata,\n RecordingTransferStatus,\n} from \"../types.js\";\nimport { transition } from \"./state-machine.js\";\nimport type { Logger } from \"../logger.js\";\nimport { currentClientLabel } from \"../ingest-context.js\";\nimport {\n buildTranscriptDataFilename as buildTranscriptDataJsonFilename,\n buildTranscriptDocument,\n extractTranscriptSummaryFromDocument,\n extractTranscriptTextFromDocument,\n extractTranscriptTitleFromDocument,\n parseTranscriptDocument,\n} from \"./transcript-document.js\";\n\n/**\n * 从 OSS URL 中提取音频文件扩展名(含点号,如 \".ogg\")\n * 默认返回 \".ogg\"(小硬件录音为 Opus/OGG 格式)\n */\nfunction extractAudioExt(ossUrl: string): string {\n try {\n const pathname = new URL(ossUrl).pathname;\n const m = pathname.match(/(\\.[a-z0-9]+)(?:\\?|$)/i);\n if (m) return m[1].toLowerCase();\n } catch {\n const m = ossUrl.match(/(\\.[a-z0-9]+)(?:\\?|$)/i);\n if (m) return m[1].toLowerCase();\n }\n return \".ogg\"; // 硬件默认录音格式(Opus/OGG)\n}\n\n// ─── Types ───\n\n/** 持久化到 index.json 的单条录音记录 */\nexport interface RecordingIndexEntry {\n /** 录音 ID,基于文件名(如 \"2026-03-23_14-32\") */\n id: string;\n /** 原始元数据 */\n metadata: RecordingMetadata;\n /** 来源客户端 label;旧数据无该字段,查询时视为 legacy */\n clientLabel?: string;\n /** 当前插件侧状态 */\n status: RecordingTransferStatus;\n /** 本地音频文件相对路径 */\n audioFile?: string;\n /** 本地打点文件相对路径 */\n srtFile?: string;\n /** 本地转写文件相对路径 */\n transcriptFile?: string;\n /** 本地转写 JSON 文件相对路径 */\n transcriptDataFile?: string;\n /** 本地摘要文件相对路径 */\n summaryFile?: string;\n /** 转写标题 */\n title?: string;\n /** 最近一次失败原因(同步失败 / 转写失败) */\n lastError?: string;\n /** 入库时间 ISO 8601 */\n ingestedAt: string;\n /** 最后更新时间 ISO 8601 */\n updatedAt: string;\n}\n\n/** 录音存储索引(整个 index.json) */\ninterface RecordingIndex {\n recordings: RecordingIndexEntry[];\n}\n\nexport interface RecordingStorageContext {\n stateDir: string;\n workspaceDir?: string;\n}\n\n// ─── Constants ───\n\nconst RECORDINGS_DIR = \"recordings\";\nconst AUDIO_DIR = \"audio\";\nconst TRANSCRIPT_DATA_DIR = \"transcript-data\";\nconst TRANSCRIPTS_DIR = \"transcripts\";\nconst SUMMARIES_DIR = \"summaries\";\nconst INDEX_FILE = \"index.json\";\n\nfunction stripMarkdownFence(markdown: string): string {\n return markdown.replace(/\\r\\n/g, \"\\n\");\n}\n\nfunction deriveTitleFromTranscriptPath(\n transcriptFile: string | undefined,\n recordingId: string,\n): string | undefined {\n if (!transcriptFile) return undefined;\n const name = basename(transcriptFile, \".md\");\n const prefix = `${recordingId}_`;\n if (name.startsWith(prefix)) {\n const derived = name.slice(prefix.length).trim();\n return derived || undefined;\n }\n return undefined;\n}\n\nfunction extractTranscriptContent(markdown: string): string {\n const normalized = stripMarkdownFence(markdown);\n const firstDivider = normalized.indexOf(\"\\n---\\n\");\n let body = firstDivider >= 0\n ? normalized.slice(firstDivider + \"\\n---\\n\".length)\n : normalized;\n\n if (body.startsWith(\"\\n\")) {\n body = body.slice(1);\n }\n\n if (body.startsWith(\"### 关键点\")) {\n const secondDivider = body.indexOf(\"\\n---\\n\");\n if (secondDivider >= 0) {\n body = body.slice(secondDivider + \"\\n---\\n\".length);\n if (body.startsWith(\"\\n\")) {\n body = body.slice(1);\n }\n }\n }\n\n const lines = body\n .split(\"\\n\")\n .filter((line) => !/^\\*\\*\\[关键点 .+\\]\\*\\*$/.test(line.trim()))\n .filter((line) => !/^- \\*\\*\\[关键点 .+\\]\\*\\*$/.test(line.trim()));\n\n return lines.join(\"\\n\").replace(/\\n{3,}/g, \"\\n\\n\").trim();\n}\n\n// ─── Public Functions ───\n\n/**\n * 解析录音存储根目录(复用通知同级的 stateDir 路径)\n */\nexport function resolveRecordingStorageDir(\n ctx: RecordingStorageContext,\n logger: Pick<Logger, \"info\" | \"warn\">,\n): string {\n const stateRecDir = join(\n ctx.stateDir,\n \"plugins\",\n \"phone-notifications\",\n RECORDINGS_DIR,\n );\n\n try {\n mkdirSync(stateRecDir, { recursive: true });\n logger.info(`录音将写入 stateDir 路径: ${stateRecDir}`);\n return stateRecDir;\n } catch {\n // fallback\n }\n\n if (ctx.workspaceDir) {\n const wsRecDir = join(ctx.workspaceDir, RECORDINGS_DIR);\n try {\n mkdirSync(wsRecDir, { recursive: true });\n logger.warn(`stateDir 不可用,录音已回退到 workspace 路径: ${wsRecDir}`);\n return wsRecDir;\n } catch {\n // fallthrough\n }\n }\n\n throw new Error(`录音存储目录不可用: ${stateRecDir}`);\n}\n\n// ─── RecordingStorage Class ───\n\nexport class RecordingStorage {\n private readonly dir: string;\n private readonly audioDir: string;\n private readonly transcriptDataDir: string;\n private readonly transcriptsDir: string;\n private readonly summariesDir: string;\n private readonly indexPath: string;\n private index: RecordingIndex = { recordings: [] };\n\n constructor(\n dir: string,\n private readonly logger: Logger,\n ) {\n this.dir = dir;\n this.audioDir = join(dir, AUDIO_DIR);\n this.transcriptDataDir = join(dir, TRANSCRIPT_DATA_DIR);\n this.transcriptsDir = join(dir, TRANSCRIPTS_DIR);\n this.summariesDir = join(dir, SUMMARIES_DIR);\n this.indexPath = join(dir, INDEX_FILE);\n }\n\n /** 初始化目录结构并加载索引 */\n async init(): Promise<void> {\n mkdirSync(this.audioDir, { recursive: true });\n mkdirSync(this.transcriptDataDir, { recursive: true });\n mkdirSync(this.transcriptsDir, { recursive: true });\n mkdirSync(this.summariesDir, { recursive: true });\n this.loadIndex();\n this.logger.info(\n `录音存储已初始化: ${this.dir}(共 ${this.index.recordings.length} 条记录)`,\n );\n }\n\n /** 获取音频目录路径 */\n getAudioDir(): string {\n return this.audioDir;\n }\n\n /** 获取转写 JSON 目录路径 */\n getTranscriptDataDir(): string {\n return this.transcriptDataDir;\n }\n\n /** 获取转写目录路径 */\n getTranscriptsDir(): string {\n return this.transcriptsDir;\n }\n\n /** 获取摘要目录路径 */\n getSummariesDir(): string {\n return this.summariesDir;\n }\n\n // ─── 录音入库 ───\n\n /**\n * 将录音元数据写入索引(由 recordings.result.write 触发)。\n * 如果同 ID 录音已存在则更新,否则新建。\n * 返回录音 ID。\n */\n ingest(recordingId: string, metadata: RecordingMetadata): string {\n const id = recordingId;\n const clientLabel = currentClientLabel(\"default\");\n const existing = this.findById(id);\n\n if (existing) {\n const sameAudioUrl = existing.metadata.oss_audio_url === metadata.oss_audio_url;\n const canPreserveSyncState =\n sameAudioUrl\n && !!existing.audioFile\n && existing.status !== \"syncing_openclaw\"\n && existing.status !== \"sync_failed\";\n\n if (canPreserveSyncState) {\n existing.metadata = metadata;\n existing.clientLabel = clientLabel;\n existing.updatedAt = new Date().toISOString();\n this.saveIndex();\n this.logger.info(\n `录音元数据已更新: ${id}(同音频,保留状态 ${existing.status})`,\n );\n return id;\n }\n\n // 更新已有记录(覆盖上传/本地文件缺失场景)\n if (existing.transcriptDataFile) {\n rmSync(join(this.dir, existing.transcriptDataFile), { force: true });\n }\n if (existing.transcriptFile) {\n rmSync(join(this.dir, existing.transcriptFile), { force: true });\n }\n if (existing.summaryFile) {\n rmSync(join(this.dir, existing.summaryFile), { force: true });\n }\n existing.metadata = metadata;\n existing.clientLabel = clientLabel;\n existing.status = \"syncing_openclaw\";\n existing.transcriptDataFile = undefined;\n existing.transcriptFile = undefined;\n existing.summaryFile = undefined;\n existing.title = undefined;\n existing.lastError = undefined;\n existing.updatedAt = new Date().toISOString();\n this.logger.info(`录音元数据已更新: ${id}`);\n } else {\n const entry: RecordingIndexEntry = {\n id,\n metadata,\n clientLabel,\n status: \"syncing_openclaw\",\n ingestedAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n };\n this.index.recordings.push(entry);\n this.logger.info(`录音元数据已入库: ${id}`);\n }\n\n this.saveIndex();\n return id;\n }\n\n // ─── 状态管理 ───\n\n /**\n * 更新录音传输状态(严格状态机校验)\n */\n updateStatus(\n recordingId: string,\n newStatus: RecordingTransferStatus,\n ): RecordingIndexEntry {\n const entry = this.findById(recordingId);\n if (!entry) {\n throw new Error(`录音不存在: ${recordingId}`);\n }\n\n const validatedStatus = transition(entry.status, newStatus);\n entry.status = validatedStatus;\n entry.updatedAt = new Date().toISOString();\n this.saveIndex();\n this.logger.info(`录音状态更新: ${recordingId} → ${newStatus}`);\n return entry;\n }\n\n /** 外部结果写入后,直接标记为已转写。 */\n markResultWritten(recordingId: string): RecordingIndexEntry {\n const entry = this.findById(recordingId);\n if (!entry) {\n throw new Error(`录音不存在: ${recordingId}`);\n }\n entry.status = \"transcribed\";\n entry.lastError = undefined;\n entry.updatedAt = new Date().toISOString();\n this.saveIndex();\n this.logger.info(`录音结果已写入: ${recordingId}`);\n return entry;\n }\n\n /**\n * 记录本地音频文件已下载\n */\n setAudioFile(recordingId: string, filename: string): void {\n const entry = this.findById(recordingId);\n if (!entry) return;\n const nextAudioFile = `${AUDIO_DIR}/${filename}`;\n if (entry.audioFile && entry.audioFile !== nextAudioFile) {\n rmSync(join(this.dir, entry.audioFile), { force: true });\n }\n entry.audioFile = nextAudioFile;\n entry.updatedAt = new Date().toISOString();\n this.saveIndex();\n }\n\n /**\n * 记录本地打点文件已下载\n */\n setSrtFile(recordingId: string, filename: string): void {\n const entry = this.findById(recordingId);\n if (!entry) return;\n entry.srtFile = `${AUDIO_DIR}/${filename}`;\n entry.updatedAt = new Date().toISOString();\n this.saveIndex();\n }\n\n /**\n * 记录转写 JSON 文件路径\n */\n setTranscriptDataFile(recordingId: string, filename: string): void {\n const entry = this.findById(recordingId);\n if (!entry) return;\n const nextTranscriptDataFile = `${TRANSCRIPT_DATA_DIR}/${filename}`;\n if (entry.transcriptDataFile && entry.transcriptDataFile !== nextTranscriptDataFile) {\n rmSync(join(this.dir, entry.transcriptDataFile), { force: true });\n }\n entry.transcriptDataFile = nextTranscriptDataFile;\n entry.updatedAt = new Date().toISOString();\n this.saveIndex();\n }\n\n /**\n * 记录转写文件路径\n */\n setTranscriptFile(recordingId: string, filename: string): void {\n const entry = this.findById(recordingId);\n if (!entry) return;\n const nextTranscriptFile = `${TRANSCRIPTS_DIR}/${filename}`;\n if (entry.transcriptFile && entry.transcriptFile !== nextTranscriptFile) {\n rmSync(join(this.dir, entry.transcriptFile), { force: true });\n }\n entry.transcriptFile = nextTranscriptFile;\n entry.updatedAt = new Date().toISOString();\n this.saveIndex();\n }\n\n /**\n * 记录摘要文件路径\n */\n setSummaryFile(recordingId: string, filename: string): void {\n const entry = this.findById(recordingId);\n if (!entry) return;\n const nextSummaryFile = `${SUMMARIES_DIR}/${filename}`;\n if (entry.summaryFile && entry.summaryFile !== nextSummaryFile) {\n rmSync(join(this.dir, entry.summaryFile), { force: true });\n }\n entry.summaryFile = nextSummaryFile;\n entry.updatedAt = new Date().toISOString();\n this.saveIndex();\n }\n\n /**\n * 记录转写标题\n */\n setTitle(recordingId: string, title?: string): void {\n const entry = this.findById(recordingId);\n if (!entry) return;\n entry.title = title?.trim() || undefined;\n entry.updatedAt = new Date().toISOString();\n this.saveIndex();\n }\n\n /**\n * 记录最近一次失败原因;传 undefined 表示清除错误\n */\n setLastError(recordingId: string, error?: string): void {\n const entry = this.findById(recordingId);\n if (!entry) return;\n entry.lastError = error?.trim() || undefined;\n entry.updatedAt = new Date().toISOString();\n this.saveIndex();\n }\n\n /**\n * 读取摘要文本\n */\n readSummary(recordingId: string): string | undefined {\n const entry = this.findById(recordingId);\n if (!entry) return undefined;\n\n if (entry.summaryFile) {\n const summary = this.readRelativeTextFile(entry.summaryFile);\n if (summary?.trim()) {\n return summary.trim();\n }\n }\n\n const transcriptDoc = entry.transcriptDataFile\n ? this.readRelativeTranscriptDocument(entry.transcriptDataFile)\n : undefined;\n return extractTranscriptSummaryFromDocument(transcriptDoc);\n }\n\n /**\n * 优先从 transcript JSON 中读取正文,旧数据回退读取 Markdown。\n */\n readTranscript(recordingId: string): string | undefined {\n const entry = this.findById(recordingId);\n if (!entry) return undefined;\n\n if (entry.transcriptDataFile) {\n const transcriptDoc = this.readRelativeTranscriptDocument(entry.transcriptDataFile);\n const transcriptFromJson = extractTranscriptTextFromDocument(transcriptDoc);\n if (transcriptFromJson !== undefined) {\n return transcriptFromJson;\n }\n }\n\n if (!entry.transcriptFile) return undefined;\n const markdown = this.readRelativeTextFile(entry.transcriptFile);\n if (!markdown) return undefined;\n const transcript = extractTranscriptContent(markdown);\n return transcript || undefined;\n }\n\n /**\n * 读取结构化 transcript JSON。\n */\n readTranscriptDocument(recordingId: string) {\n const entry = this.findById(recordingId);\n if (!entry?.transcriptDataFile) {\n return undefined;\n }\n return this.readRelativeTranscriptDocument(entry.transcriptDataFile);\n }\n\n // ─── 查询 ───\n\n findById(id: string): RecordingIndexEntry | undefined {\n return this.index.recordings.find((r) => r.id === id);\n }\n\n listAll(): RecordingIndexEntry[] {\n return [...this.index.recordings].sort(\n (a, b) => b.metadata.created_at.localeCompare(a.metadata.created_at),\n );\n }\n\n listByStatus(status: RecordingTransferStatus): RecordingIndexEntry[] {\n return this.listAll().filter((r) => r.status === status);\n }\n\n rename(recordingId: string, name: string): RecordingIndexEntry {\n const entry = this.findById(recordingId);\n if (!entry) {\n throw new Error(`录音不存在: ${recordingId}`);\n }\n\n entry.metadata = {\n ...entry.metadata,\n name,\n };\n entry.updatedAt = new Date().toISOString();\n this.saveIndex();\n this.logger.info(`录音名称已更新: ${recordingId} → ${name}`);\n return entry;\n }\n\n // ─── 删除 ───\n\n /**\n * 删除录音及其本地文件(约束 R-4 安全删除)\n *\n * @param opts.localOnly 仅删除本地文件(音频/打点/转写),保留索引条目。\n * App 端\"仅删除本地\"时使用此模式,插件侧保留元数据记录。\n * 默认 false — 完整删除(文件 + 索引)。\n */\n delete(\n recordingId: string,\n opts?: { localOnly?: boolean },\n ): boolean {\n const entry = this.findById(recordingId);\n if (!entry) return false;\n\n // 删除本地文件\n if (entry.audioFile) {\n const audioPath = join(this.dir, entry.audioFile);\n rmSync(audioPath, { force: true });\n }\n if (entry.srtFile) {\n const srtPath = join(this.dir, entry.srtFile);\n rmSync(srtPath, { force: true });\n }\n if (entry.transcriptDataFile) {\n const transcriptDataPath = join(this.dir, entry.transcriptDataFile);\n rmSync(transcriptDataPath, { force: true });\n }\n if (entry.transcriptFile) {\n const transcriptPath = join(this.dir, entry.transcriptFile);\n rmSync(transcriptPath, { force: true });\n }\n if (entry.summaryFile) {\n const summaryPath = join(this.dir, entry.summaryFile);\n rmSync(summaryPath, { force: true });\n }\n\n if (opts?.localOnly) {\n // 保留索引条目,清除文件引用\n entry.audioFile = undefined;\n entry.srtFile = undefined;\n entry.transcriptDataFile = undefined;\n entry.transcriptFile = undefined;\n entry.summaryFile = undefined;\n entry.updatedAt = new Date().toISOString();\n this.saveIndex();\n this.logger.info(`录音本地文件已删除(保留索引): ${recordingId}`);\n } else {\n // 从索引中移除\n this.index.recordings = this.index.recordings.filter(\n (r) => r.id !== recordingId,\n );\n this.saveIndex();\n this.logger.info(`录音已完整删除: ${recordingId}`);\n }\n return true;\n }\n\n // ─── Helpers ───\n\n /**\n * 生成音频文件名。扩展名从 OSS URL 中提取,未提供时默认 .ogg(硬件录音格式)\n */\n buildAudioFilename(recordingId: string, ossUrl?: string): string {\n const ext = ossUrl ? extractAudioExt(ossUrl) : \".ogg\";\n return `${recordingId}${ext}`;\n }\n\n /**\n * 生成打点文件名\n */\n buildSrtFilename(recordingId: string): string {\n return `${recordingId}.srt`;\n }\n\n /**\n * 生成转写 JSON 文件名\n */\n buildTranscriptDataFilename(recordingId: string): string {\n return buildTranscriptDataJsonFilename(recordingId);\n }\n\n /**\n * 生成转写文件名\n * @param summary 摘要标题(≤ 10 字)\n */\n buildTranscriptFilename(recordingId: string, summary: string): string {\n // 清理文件名中的非法字符\n const safeSummary = summary\n .replace(/[/\\\\:*?\"<>|]/g, \"\")\n .trim()\n .slice(0, 20);\n return safeSummary\n ? `${recordingId}_${safeSummary}.md`\n : `${recordingId}.md`;\n }\n\n /**\n * 生成摘要文件名\n */\n buildSummaryFilename(recordingId: string): string {\n return `${recordingId}.md`;\n }\n\n /**\n * 获取音频文件的绝对路径。ossUrl 用于推断文件扩展名\n */\n getAudioFilePath(recordingId: string, ossUrl?: string): string {\n return join(this.audioDir, this.buildAudioFilename(recordingId, ossUrl));\n }\n\n /**\n * 获取打点文件的绝对路径\n */\n getSrtFilePath(recordingId: string): string {\n return join(this.audioDir, this.buildSrtFilename(recordingId));\n }\n\n /**\n * 获取转写 JSON 文件的绝对路径\n */\n getTranscriptDataFilePath(recordingId: string): string {\n return join(this.transcriptDataDir, this.buildTranscriptDataFilename(recordingId));\n }\n\n /**\n * 获取摘要文件的绝对路径\n */\n getSummaryFilePath(recordingId: string): string {\n return join(this.summariesDir, this.buildSummaryFilename(recordingId));\n }\n\n // ─── Persistence ───\n\n private loadIndex(): void {\n if (!existsSync(this.indexPath)) {\n this.index = { recordings: [] };\n return;\n }\n try {\n const raw = JSON.parse(readFileSync(this.indexPath, \"utf-8\"));\n if (raw && Array.isArray(raw.recordings)) {\n let needsRewrite = false;\n const normalized = raw.recordings\n .filter((entry: unknown) => entry && typeof entry === \"object\")\n .map((entry: any) => {\n const compacted: RecordingIndexEntry = {\n id: entry.id,\n metadata: entry.metadata,\n status: entry.status,\n ingestedAt: entry.ingestedAt,\n updatedAt: entry.updatedAt,\n };\n if (typeof entry.clientLabel === \"string\" && entry.clientLabel.trim()) {\n compacted.clientLabel = entry.clientLabel.trim();\n }\n if (typeof entry.audioFile === \"string\") compacted.audioFile = entry.audioFile;\n if (typeof entry.srtFile === \"string\") compacted.srtFile = entry.srtFile;\n if (typeof entry.transcriptFile === \"string\") {\n compacted.transcriptFile = entry.transcriptFile;\n }\n let transcriptDoc = typeof entry.transcriptDataFile === \"string\"\n ? this.readRelativeTranscriptDocument(entry.transcriptDataFile)\n : undefined;\n if (typeof entry.transcriptDataFile === \"string\" && transcriptDoc) {\n compacted.transcriptDataFile = entry.transcriptDataFile;\n } else {\n const legacyTranscriptText = typeof entry.transcript === \"string\" && entry.transcript.trim()\n ? entry.transcript.trim()\n : compacted.transcriptFile\n ? extractTranscriptContent(\n this.readRelativeTextFile(compacted.transcriptFile) ?? \"\",\n ) || undefined\n : undefined;\n const legacyTitle = typeof entry.title === \"string\" && entry.title.trim()\n ? entry.title.trim()\n : deriveTitleFromTranscriptPath(compacted.transcriptFile, compacted.id);\n const legacySummary = typeof entry.summary === \"string\" && entry.summary.trim()\n ? entry.summary.trim()\n : undefined;\n\n if (legacyTranscriptText) {\n transcriptDoc = buildTranscriptDocument({\n recordingId: compacted.id,\n generatedAt: compacted.updatedAt,\n source: {\n provider: \"legacy-markdown\",\n },\n title: legacyTitle,\n summary: legacySummary,\n text: legacyTranscriptText,\n segments: [],\n });\n const transcriptDataFilename = this.buildTranscriptDataFilename(compacted.id);\n writeFileSync(\n join(this.transcriptDataDir, transcriptDataFilename),\n JSON.stringify(transcriptDoc, null, 2),\n \"utf-8\",\n );\n compacted.transcriptDataFile = `${TRANSCRIPT_DATA_DIR}/${transcriptDataFilename}`;\n needsRewrite = true;\n }\n }\n\n if (typeof entry.summaryFile === \"string\") {\n compacted.summaryFile = entry.summaryFile;\n } else if (typeof entry.summary === \"string\" && entry.summary.trim()) {\n const summaryFilename = this.buildSummaryFilename(entry.id);\n writeFileSync(\n join(this.summariesDir, summaryFilename),\n entry.summary.trim(),\n \"utf-8\",\n );\n compacted.summaryFile = `${SUMMARIES_DIR}/${summaryFilename}`;\n needsRewrite = true;\n } else {\n const summaryFromDocument = extractTranscriptSummaryFromDocument(transcriptDoc);\n if (summaryFromDocument) {\n const summaryFilename = this.buildSummaryFilename(entry.id);\n writeFileSync(\n join(this.summariesDir, summaryFilename),\n summaryFromDocument,\n \"utf-8\",\n );\n compacted.summaryFile = `${SUMMARIES_DIR}/${summaryFilename}`;\n needsRewrite = true;\n }\n }\n if (typeof entry.title === \"string\" && entry.title.trim()) {\n compacted.title = entry.title.trim();\n } else {\n const titleFromDocument = extractTranscriptTitleFromDocument(transcriptDoc);\n const derivedTitle = titleFromDocument ?? deriveTitleFromTranscriptPath(\n compacted.transcriptFile,\n compacted.id,\n );\n if (derivedTitle) {\n compacted.title = derivedTitle;\n needsRewrite = true;\n }\n }\n if (typeof entry.lastError === \"string\" && entry.lastError.trim()) {\n compacted.lastError = entry.lastError.trim();\n }\n if (compacted.status === \"transcribing\") {\n compacted.status = \"transcribe_failed\";\n compacted.lastError = compacted.lastError\n ?? \"转写任务已中断,请重新发起转写\";\n compacted.updatedAt = new Date().toISOString();\n needsRewrite = true;\n }\n return compacted;\n });\n const hadLargeFields = raw.recordings.some(\n (entry: any) => entry && typeof entry === \"object\" && (\"transcript\" in entry || \"summary\" in entry),\n );\n this.index = { recordings: normalized };\n if (hadLargeFields || needsRewrite) {\n this.saveIndex();\n }\n } else {\n this.index = { recordings: [] };\n }\n } catch {\n this.logger.warn(`录音索引文件损坏,已重建: ${this.indexPath}`);\n this.index = { recordings: [] };\n }\n }\n\n private readRelativeTextFile(relativePath: string): string | undefined {\n try {\n return readFileSync(join(this.dir, relativePath), \"utf-8\");\n } catch {\n return undefined;\n }\n }\n\n private readRelativeTranscriptDocument(relativePath: string) {\n const raw = this.readRelativeTextFile(relativePath);\n if (!raw) {\n return undefined;\n }\n return parseTranscriptDocument(raw);\n }\n\n private saveIndex(): void {\n writeFileSync(\n this.indexPath,\n JSON.stringify(this.index, null, 2),\n \"utf-8\",\n );\n }\n\n async close(): Promise<void> {\n // 当前无需额外清理\n }\n}\n",
91
91
  "/**\n * 录音传输状态机(约束 R-3)\n *\n * 状态流转严格不可跳跃:\n * receiving_failed → receiving\n * receiving → pending_oss_upload\n * pending_oss_upload → uploading_oss\n * uploading_oss → oss_uploaded\n * oss_uploaded → syncing_openclaw\n * syncing_openclaw → synced | sync_failed\n * sync_failed → syncing_openclaw\n * synced → transcribing(仅当已配置 ASR)\n * transcribing → transcribed | transcribe_failed\n * transcribe_failed → transcribing\n * transcribed → transcribing(手动强制重新转写)\n */\n\nimport type { RecordingTransferStatus } from \"../types.js\";\n\n/** 合法的状态转换表:from → Set<to> */\nconst VALID_TRANSITIONS: ReadonlyMap<\n RecordingTransferStatus,\n ReadonlySet<RecordingTransferStatus>\n> = new Map<RecordingTransferStatus, ReadonlySet<RecordingTransferStatus>>([\n [\"receiving_failed\", new Set([\"receiving\"])],\n [\"receiving\", new Set([\"pending_oss_upload\"])],\n [\"pending_oss_upload\", new Set([\"uploading_oss\"])],\n [\"uploading_oss\", new Set([\"oss_uploaded\"])],\n [\"oss_uploaded\", new Set([\"syncing_openclaw\"])],\n [\"syncing_openclaw\", new Set([\"synced\", \"sync_failed\"])],\n [\"sync_failed\", new Set([\"syncing_openclaw\"])],\n [\"synced\", new Set([\"transcribing\"])],\n [\"transcribing\", new Set([\"transcribed\", \"transcribe_failed\"])],\n [\"transcribe_failed\", new Set([\"transcribing\"])],\n [\"transcribed\", new Set([\"transcribing\"])],\n]);\n\n/** 插件侧关注的状态:从 syncing_openclaw 开始 */\nexport type PluginSideStatus = Extract<\n RecordingTransferStatus,\n | \"syncing_openclaw\"\n | \"sync_failed\"\n | \"synced\"\n | \"transcribing\"\n | \"transcribe_failed\"\n | \"transcribed\"\n>;\n\n/**\n * 校验状态转换是否合法\n */\nexport function isValidTransition(\n from: RecordingTransferStatus,\n to: RecordingTransferStatus,\n): boolean {\n const allowed = VALID_TRANSITIONS.get(from);\n return allowed ? allowed.has(to) : false;\n}\n\n/**\n * 尝试执行状态转换,非法转换抛出 Error\n */\nexport function transition(\n from: RecordingTransferStatus,\n to: RecordingTransferStatus,\n): RecordingTransferStatus {\n if (!isValidTransition(from, to)) {\n throw new TransitionError(from, to);\n }\n return to;\n}\n\n/**\n * 状态是否为终态(没有后续合法转换)\n */\nexport function isTerminalStatus(status: RecordingTransferStatus): boolean {\n const allowed = VALID_TRANSITIONS.get(status);\n return !allowed || allowed.size === 0;\n}\n\n/**\n * 状态是否允许触发 ASR 转写\n */\nexport function canStartTranscription(status: RecordingTransferStatus): boolean {\n return (\n status === \"synced\"\n || status === \"transcribe_failed\"\n || status === \"transcribed\"\n );\n}\n\n/**\n * 获取当前状态的所有合法后续状态\n */\nexport function getNextStatuses(\n status: RecordingTransferStatus,\n): RecordingTransferStatus[] {\n const allowed = VALID_TRANSITIONS.get(status);\n return allowed ? [...allowed] : [];\n}\n\nexport class TransitionError extends Error {\n constructor(\n public readonly from: RecordingTransferStatus,\n public readonly to: RecordingTransferStatus,\n ) {\n super(`非法状态转换: ${from} → ${to}`);\n this.name = \"TransitionError\";\n }\n}\n",
92
92
  "export const TRANSCRIPT_DOCUMENT_SCHEMA_VERSION = 1;\n\nexport interface TranscriptDocumentSource {\n provider: string;\n taskId?: string;\n requestId?: string;\n status?: string;\n delivery?: string;\n}\n\nexport interface TranscriptDocumentSegment {\n text: string;\n startMs?: number;\n endMs?: number;\n speakerId?: number;\n}\n\nexport interface TranscriptDocumentContentItem {\n content: string;\n speakerId?: number;\n startTime?: number;\n endTime?: number;\n}\n\nexport interface TranscriptDocumentNormalized {\n title?: string;\n category?: string;\n summary?: string;\n text: string;\n segments: TranscriptDocumentSegment[];\n}\n\nexport interface TranscriptDocument {\n schemaVersion: number;\n recordingId: string;\n generatedAt: string;\n source: TranscriptDocumentSource;\n normalized: TranscriptDocumentNormalized;\n raw?: unknown;\n}\n\nexport function buildTranscriptDataFilename(recordingId: string): string {\n return `${recordingId}.json`;\n}\n\nexport function buildTranscriptDocument(params: {\n recordingId: string;\n generatedAt?: string;\n source: TranscriptDocumentSource;\n title?: string;\n category?: string;\n summary?: string;\n text?: string;\n segments?: TranscriptDocumentSegment[];\n raw?: unknown;\n}): TranscriptDocument {\n const segments = normalizeSegments(params.segments);\n const text = normalizePossiblyEmptyText(params.text) ?? joinSegmentsText(segments) ?? \"\";\n\n return {\n schemaVersion: TRANSCRIPT_DOCUMENT_SCHEMA_VERSION,\n recordingId: params.recordingId,\n generatedAt: params.generatedAt ?? new Date().toISOString(),\n source: {\n provider: params.source.provider,\n taskId: normalizeOptionalText(params.source.taskId),\n requestId: normalizeOptionalText(params.source.requestId),\n status: normalizeOptionalText(params.source.status),\n delivery: normalizeOptionalText(params.source.delivery),\n },\n normalized: {\n title: normalizeOptionalText(params.title),\n category: normalizeOptionalText(params.category),\n summary: normalizePossiblyEmptyText(params.summary),\n text,\n segments,\n },\n raw: params.raw,\n };\n}\n\nexport function parseTranscriptDocument(\n value: string | unknown,\n): TranscriptDocument | undefined {\n const parsed = typeof value === \"string\"\n ? parseJson(value)\n : value;\n\n if (!parsed || typeof parsed !== \"object\") {\n return undefined;\n }\n\n const doc = parsed as Record<string, unknown>;\n const recordingId = normalizeOptionalText(doc.recordingId);\n const generatedAt = normalizeOptionalText(doc.generatedAt);\n const source = normalizeSource(doc.source);\n const normalized = normalizeDocumentBody(doc.normalized);\n\n if (!recordingId || !generatedAt || !source || !normalized) {\n return undefined;\n }\n\n return {\n schemaVersion:\n typeof doc.schemaVersion === \"number\"\n ? doc.schemaVersion\n : TRANSCRIPT_DOCUMENT_SCHEMA_VERSION,\n recordingId,\n generatedAt,\n source,\n normalized,\n raw: doc.raw,\n };\n}\n\nexport function extractTranscriptTextFromDocument(\n doc: TranscriptDocument | undefined,\n): string | undefined {\n if (!doc) return undefined;\n return normalizePossiblyEmptyText(doc.normalized.text)\n ?? joinSegmentsText(doc.normalized.segments);\n}\n\nexport function extractTranscriptSummaryFromDocument(\n doc: TranscriptDocument | undefined,\n): string | undefined {\n if (!doc) return undefined;\n return normalizePossiblyEmptyText(doc.normalized.summary);\n}\n\nexport function extractTranscriptTitleFromDocument(\n doc: TranscriptDocument | undefined,\n): string | undefined {\n if (!doc) return undefined;\n return normalizeOptionalText(doc.normalized.title);\n}\n\nexport function extractSourceTextListFromDocument(\n doc: TranscriptDocument | undefined,\n): TranscriptDocumentContentItem[] | undefined {\n if (!doc) return undefined;\n\n const fromNormalized = doc.normalized.segments\n .map((segment) => ({\n content: segment.text,\n speakerId: segment.speakerId,\n startTime: segment.startMs,\n endTime: segment.endMs,\n }))\n .filter((segment) => normalizeOptionalText(segment.content));\n\n if (fromNormalized.length > 0) {\n return fromNormalized;\n }\n\n const rawList = extractRawSourceTextList(doc.raw);\n if (rawList.length > 0) {\n return rawList;\n }\n\n const normalizedText = normalizeOptionalText(doc.normalized.text);\n return normalizedText\n ? [{ content: normalizedText }]\n : undefined;\n}\n\nfunction parseJson(value: string): unknown {\n try {\n return JSON.parse(value);\n } catch {\n return undefined;\n }\n}\n\nfunction normalizeSource(value: unknown): TranscriptDocumentSource | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n\n const source = value as Record<string, unknown>;\n const provider = normalizeOptionalText(source.provider);\n if (!provider) {\n return undefined;\n }\n\n return {\n provider,\n taskId: normalizeOptionalText(source.taskId),\n requestId: normalizeOptionalText(source.requestId),\n status: normalizeOptionalText(source.status),\n delivery: normalizeOptionalText(source.delivery),\n };\n}\n\nfunction normalizeDocumentBody(\n value: unknown,\n): TranscriptDocumentNormalized | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n\n const normalized = value as Record<string, unknown>;\n const segments = normalizeSegments(normalized.segments);\n const text = normalizePossiblyEmptyText(normalized.text) ?? joinSegmentsText(segments);\n if (text === undefined) {\n return undefined;\n }\n\n return {\n title: normalizeOptionalText(normalized.title),\n category: normalizeOptionalText(normalized.category),\n summary: normalizePossiblyEmptyText(normalized.summary),\n text,\n segments,\n };\n}\n\nfunction normalizeSegments(value: unknown): TranscriptDocumentSegment[] {\n if (!Array.isArray(value)) {\n return [];\n }\n\n return value\n .map((item) => normalizeSegment(item))\n .filter((item): item is TranscriptDocumentSegment => !!item);\n}\n\nfunction normalizeSegment(value: unknown): TranscriptDocumentSegment | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n\n const segment = value as Record<string, unknown>;\n const text = normalizeOptionalText(segment.text);\n if (!text) {\n return undefined;\n }\n\n return {\n text,\n startMs: normalizeOptionalNumber(segment.startMs),\n endMs: normalizeOptionalNumber(segment.endMs),\n speakerId: normalizeOptionalInteger(segment.speakerId),\n };\n}\n\nfunction joinSegmentsText(\n segments: TranscriptDocumentSegment[],\n): string | undefined {\n const parts = segments\n .map((segment) => normalizeOptionalText(segment.text))\n .filter((segment): segment is string => !!segment);\n\n if (parts.length === 0) {\n return undefined;\n }\n\n return parts.join(\"\\n\\n\");\n}\n\nfunction extractRawSourceTextList(raw: unknown): TranscriptDocumentContentItem[] {\n if (!raw || typeof raw !== \"object\") {\n return [];\n }\n\n const recordResult = (raw as { recordResult?: unknown }).recordResult;\n if (!recordResult || typeof recordResult !== \"object\") {\n return [];\n }\n\n const sourceTextList = (recordResult as { sourceTextList?: unknown }).sourceTextList;\n if (!Array.isArray(sourceTextList)) {\n return [];\n }\n\n return sourceTextList\n .flatMap((item) => {\n if (!item || typeof item !== \"object\") {\n return [];\n }\n\n const value = item as Record<string, unknown>;\n const content = normalizeOptionalText(value.content);\n if (!content) {\n return [];\n }\n\n return [{\n content,\n speakerId: normalizeOptionalInteger(value.speakerId),\n startTime: normalizeOptionalNumber(value.startTime),\n endTime: normalizeOptionalNumber(value.endTime),\n }];\n });\n}\n\nfunction normalizeOptionalText(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim()\n ? value.trim()\n : undefined;\n}\n\nfunction normalizePossiblyEmptyText(value: unknown): string | undefined {\n return typeof value === \"string\"\n ? value.trim()\n : undefined;\n}\n\nfunction normalizeOptionalNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nfunction normalizeOptionalInteger(value: unknown): number | undefined {\n return Number.isInteger(value)\n ? Number(value)\n : undefined;\n}\n",
93
- "/**\n * OSS 文件下载器(约束 R-6)\n *\n * 从 OSS URL 下载原始音频(mp3)和打点文件(srt)到本地。\n * 支持重试、超时控制、下载进度日志。\n */\n\nimport { createWriteStream, existsSync, mkdirSync, statSync, unlinkSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport { pipeline } from \"node:stream/promises\";\nimport { Readable } from \"node:stream\";\nimport type { Logger } from \"../logger.js\";\n\n// ─── Types ───\n\nexport interface DownloadOptions {\n /** 下载超时(毫秒),默认 5 分钟 */\n timeoutMs?: number;\n /** 最大重试次数,默认 3 */\n maxRetries?: number;\n /** 重试间隔基数(毫秒),默认 2000 */\n retryBackoffMs?: number;\n}\n\nexport interface DownloadResult {\n ok: boolean;\n /** 下载的文件大小(字节) */\n sizeBytes?: number;\n /** 耗时(毫秒) */\n elapsedMs?: number;\n /** 错误信息 */\n error?: string;\n}\n\nconst DEFAULT_TIMEOUT_MS = 5 * 60 * 1000; // 5 分钟(最大 ~56MB 文件)\nconst DEFAULT_MAX_RETRIES = 3;\nconst DEFAULT_RETRY_BACKOFF_MS = 2000;\n\n// ─── Public API ───\n\n/**\n * 从 URL 下载文件到本地路径\n */\nexport async function downloadFile(\n url: string,\n destPath: string,\n logger: Logger,\n options?: DownloadOptions,\n): Promise<DownloadResult> {\n const timeoutMs = options?.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n const maxRetries = options?.maxRetries ?? DEFAULT_MAX_RETRIES;\n const retryBackoffMs = options?.retryBackoffMs ?? DEFAULT_RETRY_BACKOFF_MS;\n\n mkdirSync(dirname(destPath), { recursive: true });\n\n let lastError: string | undefined;\n\n for (let attempt = 1; attempt <= maxRetries; attempt++) {\n const startMs = Date.now();\n try {\n logger.info(\n `[downloader] 开始下载 (attempt ${attempt}/${maxRetries}): ${url}`,\n );\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n\n try {\n const res = await fetch(url, { signal: controller.signal });\n\n if (!res.ok) {\n throw new Error(`HTTP ${res.status} ${res.statusText}`);\n }\n\n if (!res.body) {\n throw new Error(\"响应体为空\");\n }\n\n // 写入文件\n const writeStream = createWriteStream(destPath);\n const readable = Readable.fromWeb(res.body as any);\n await pipeline(readable, writeStream);\n\n const elapsed = Date.now() - startMs;\n const fileSize = existsSync(destPath)\n ? statSync(destPath).size\n : 0;\n\n logger.info(\n `[downloader] 下载完成: ${destPath} (${formatBytes(fileSize)}, ${elapsed}ms)`,\n );\n\n return { ok: true, sizeBytes: fileSize, elapsedMs: elapsed };\n } finally {\n clearTimeout(timer);\n }\n } catch (err: any) {\n lastError = err?.message ?? String(err);\n\n // 清理可能写了一半的文件\n try {\n if (existsSync(destPath)) unlinkSync(destPath);\n } catch {\n // ignore\n }\n\n const isAbort = err?.name === \"AbortError\";\n logger.warn(\n `[downloader] 下载失败 (attempt ${attempt}/${maxRetries}): ${isAbort ? \"超时\" : lastError}`,\n );\n\n if (attempt < maxRetries) {\n const delay = retryBackoffMs * Math.pow(2, attempt - 1);\n logger.info(`[downloader] ${delay}ms 后重试...`);\n await sleep(delay);\n }\n }\n }\n\n return { ok: false, error: lastError ?? \"下载失败\" };\n}\n\n/**\n * 下载录音的音频文件和打点文件\n */\nexport async function downloadRecordingFiles(\n ossAudioUrl: string,\n ossSrtUrl: string | undefined,\n audioDestPath: string,\n srtDestPath: string,\n logger: Logger,\n options?: DownloadOptions,\n): Promise<{\n audio: DownloadResult;\n srt: DownloadResult | null;\n}> {\n // 下载音频(必须)\n const audio = await downloadFile(ossAudioUrl, audioDestPath, logger, options);\n\n // 下载打点文件(可选)\n let srt: DownloadResult | null = null;\n if (ossSrtUrl) {\n srt = await downloadFile(ossSrtUrl, srtDestPath, logger, options);\n if (!srt.ok) {\n // 打点文件下载失败不阻断主流程,仅警告\n logger.warn(`[downloader] 打点文件下载失败(非致命): ${srt.error}`);\n }\n }\n\n return { audio, srt };\n}\n\n// ─── Helpers ───\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes}B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n",
94
- "/**\n * ASR 转写调度器(§6 / §7)\n *\n * 按 arc-long-recording §6.2 定义的两层配置结构调度 ASR:\n * - mode = \"api\":YoooClaw 托管云端 ASR(经 model-proxy 长录音接口调用)\n * - mode = \"local\":已停用(保留枚举值用于兼容旧客户端,调用时直接返回错误)\n * - mode = \"yoooclaw\":YoooClaw 自建 ASR(P2,预留接口)\n *\n * 转写流程:\n * 1. 读取录音 OSS URL 与本地文件\n * 2. 调用云端 model-proxy 获取转写文本\n * 3. 将关键点以 [关键点 MM:SS] 内嵌转写文本\n * 4. 自动生成摘要标题(≤ 10 字)\n * 5. 写入 /recordings/transcripts/日期_时间_摘要.md\n */\n\nimport { existsSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type {\n AsrConfig,\n AsrApiConfig,\n RecordingMarker,\n RecordingAsrInitResult,\n RecordingTranscriptItem,\n} from \"../types.js\";\nimport type { Logger } from \"../logger.js\";\nimport { requireApiKey, loadApiKey } from \"../auth/credentials.js\";\nimport { getEnvUrls } from \"../env.js\";\nimport {\n buildTranscriptDataFilename,\n buildTranscriptDocument,\n extractSourceTextListFromDocument,\n} from \"./transcript-document.js\";\n\nconst DEFAULT_LONG_RECORDING_POLL_INTERVAL_MS = 2000;\nconst DEFAULT_LONG_RECORDING_MAX_POLL_ATTEMPTS = 3600;\nconst LONG_RECORDING_RUNNING_STATUSES = new Set([\"PENDING\", \"RUNNING\", \"SUSPENDED\"]);\nconst LONG_RECORDING_TERMINAL_FAILURE_STATUSES = new Set([\"FAILED\", \"CANCELED\", \"UNKNOWN\"]);\n\nconst DEFAULT_HTTP_MAX_ATTEMPTS = 3;\nconst DEFAULT_HTTP_RETRY_BACKOFF_MS = 2000;\n\n// ─── Types ───\n\nexport interface TranscriptionResult {\n ok: boolean;\n /** 转写全文 */\n text?: string;\n /** 带时间戳的分段(如 ASR 支持) */\n segments?: TranscriptSegment[];\n /** 自动生成的摘要标题 */\n summary?: string;\n /** 给客户端展示的摘要文本 */\n summaryText?: string;\n /** 分类信息(如会议纪要、采访) */\n category?: string;\n /** 转写来源信息 */\n sourceInfo?: {\n provider: string;\n taskId?: string;\n requestId?: string;\n status?: string;\n };\n /** Provider 原始响应,供后续兼容字段演进 */\n rawResponse?: unknown;\n /** 错误信息 */\n error?: string;\n}\n\nexport interface TranscriptSegment {\n /** 开始时间(毫秒) */\n start_ms: number;\n /** 结束时间(毫秒) */\n end_ms: number;\n /** 文本内容 */\n text: string;\n /** 说话人 ID(如云端 ASR 返回) */\n speaker_id?: number;\n}\n\ninterface ModelProxyLongRecordingSubmitRequest {\n audioOssUrl: string;\n language?: string;\n enableNormalization?: boolean;\n}\n\ninterface ModelProxyLongRecordingResult {\n sourceText?: string | null;\n sourceTextList?: ModelProxyLongRecordingSourceTextItem[] | null;\n summaryResult?: string | null;\n category?: string | null;\n title?: string | null;\n}\n\ninterface ModelProxyLongRecordingSourceTextItem {\n content?: string | null;\n speakerId?: number | null;\n startTime?: number | null;\n endTime?: number | null;\n}\n\ninterface ModelProxyLongRecordingStatusResponse {\n taskId?: string;\n status?: string;\n requestId?: string;\n errorMessage?: string | null;\n recordResult?: ModelProxyLongRecordingResult | null;\n}\n\ninterface ResponseEnvelope<T> {\n success?: boolean;\n code?: number | string;\n message?: string | null;\n e?: unknown;\n data?: T | null;\n}\n\n// ─── Public API ───\n\n/**\n * 判断 ASR 是否已配置\n */\nexport function isAsrConfigured(config?: AsrConfig): boolean {\n return !!config && !validateAsrConfig(config);\n}\n\n/**\n * 校验客户端下发的 ASR 配置。\n * 返回 undefined 表示配置可用;返回字符串表示错误原因。\n */\nexport function validateAsrConfig(config?: AsrConfig): string | undefined {\n if (!config?.mode) {\n return \"asr.mode is required\";\n }\n\n switch (config.mode) {\n case \"api\":\n return undefined;\n case \"local\":\n return \"本地 Whisper 模式已停用,请改用 asr.mode = \\\"api\\\"\";\n case \"yoooclaw\":\n return \"YoooClaw ASR 尚未实现(P2)\";\n default:\n return `未知的 ASR mode: ${(config as { mode: string }).mode}`;\n }\n}\n\n/**\n * 显式初始化 ASR 能力。\n * - mode=api:校验插件本地 API Key 是否存在,并返回最终使用的 model-proxy submit-task endpoint\n * - mode=local:按配置预下载模型,并返回本地环境状态\n */\nexport async function initializeAsr(\n config: AsrConfig,\n dataDir: string,\n logger: Logger,\n): Promise<RecordingAsrInitResult> {\n const validationError = validateAsrConfig(config);\n if (validationError) {\n return {\n ok: false,\n mode: config.mode,\n error: validationError,\n };\n }\n\n switch (config.mode) {\n case \"api\": {\n const endpoint = resolveModelProxyLongRecordingSubmitEndpoint(config.api);\n const keyConfigured = hasText(config.api?.apiKey) || hasText(loadApiKey());\n\n if (!keyConfigured) {\n return {\n ok: false,\n mode: \"api\",\n provider: \"model-proxy\",\n endpoint,\n language: config.api?.language ?? \"auto\",\n keyConfigured: false,\n error:\n \"API Key 未设置,请在本次 asr.api.apiKey 中传入,或先写入 credentials.json / 执行 ntf auth set-api-key <apiKey>\",\n };\n }\n\n return {\n ok: true,\n mode: \"api\",\n provider: \"model-proxy\",\n endpoint,\n language: config.api?.language ?? \"auto\",\n keyConfigured: true,\n };\n }\n case \"local\":\n return {\n ok: false,\n mode: \"local\",\n error: \"本地 Whisper 模式已停用,请改用 asr.mode = \\\"api\\\"\",\n };\n case \"yoooclaw\":\n return {\n ok: false,\n mode: \"yoooclaw\",\n error: \"YoooClaw ASR 尚未实现(P2)\",\n };\n default:\n return {\n ok: false,\n mode: config.mode,\n error: `未知的 ASR mode: ${config.mode}`,\n };\n }\n}\n\n/**\n * 执行 ASR 转写\n *\n * @param audioFilePath 本地音频文件绝对路径\n * @param config ASR 配置(两层结构:mode + api/local)\n * @param logger 日志\n * @param options 额外上下文(云端 ASR 需要 OSS URL)\n */\nexport async function transcribeAudio(\n audioFilePath: string,\n config: AsrConfig,\n logger: Logger,\n options: {\n audioOssUrl?: string;\n audioDurationMs?: number;\n } = {},\n): Promise<TranscriptionResult> {\n if (!existsSync(audioFilePath)) {\n return { ok: false, error: `音频文件不存在: ${audioFilePath}` };\n }\n\n logger.info(\n `[asr] 开始转写: mode=${config.mode}, file=${audioFilePath}`,\n );\n\n try {\n switch (config.mode) {\n case \"api\":\n return await transcribeWithModelProxy(\n options.audioOssUrl,\n options.audioDurationMs,\n config.api,\n logger,\n );\n case \"local\":\n return {\n ok: false,\n error: \"本地 Whisper 模式已停用,请改用 asr.mode = \\\"api\\\"\",\n };\n case \"yoooclaw\":\n return { ok: false, error: \"YoooClaw ASR 尚未实现(P2)\" };\n default:\n return {\n ok: false,\n error: `未知的 ASR mode: ${config.mode}`,\n };\n }\n } catch (err: any) {\n const msg = err?.message ?? String(err);\n logger.error(`[asr] 转写异常: ${msg}`);\n return { ok: false, error: msg };\n }\n}\n\n/**\n * 将转写结果与关键点标记合并,生成最终 Markdown 转写文本\n *\n * @param result 转写结果\n * @param markers 关键点列表\n * @param recordingName 录音名称\n * @param durationSec 录音总时长(秒)\n * @param createdAt 录音创建时间\n */\nexport function buildTranscriptMarkdown(\n result: TranscriptionResult,\n markers: RecordingMarker[],\n recordingName: string,\n durationSec: number,\n createdAt: string,\n): string { \n const summary = result.summary ?? recordingName.slice(0, 10);\n const lines: string[] = [];\n\n // 元数据头\n lines.push(`# ${summary}`);\n lines.push(\"\");\n lines.push(`> 录音名称:${recordingName}`);\n lines.push(`> 时长:${formatDuration(durationSec)}`);\n lines.push(`> 创建时间:${createdAt}`);\n if (markers.length > 0) {\n lines.push(`> 关键点数:${markers.length}`);\n }\n lines.push(\"\");\n lines.push(\"---\");\n lines.push(\"\");\n\n if (result.segments && result.segments.length > 0) {\n // 有分段的转写文本:在合适的位置插入关键点标记\n const sortedMarkers = [...markers].sort(\n (a, b) => a.timestamp_ms - b.timestamp_ms,\n );\n let markerIdx = 0;\n\n for (const seg of result.segments) {\n // 在当前段之前插入所有对应的关键点\n while (\n markerIdx < sortedMarkers.length &&\n sortedMarkers[markerIdx].timestamp_ms <= seg.start_ms\n ) {\n const m = sortedMarkers[markerIdx];\n lines.push(\n `**[关键点 ${formatTimestamp(m.timestamp_ms)}]**`,\n );\n lines.push(\"\");\n markerIdx++;\n }\n\n const segmentText = formatTranscriptSegmentText(seg);\n if (segmentText) {\n lines.push(segmentText);\n lines.push(\"\");\n }\n }\n\n // 追加剩余关键点\n while (markerIdx < sortedMarkers.length) {\n const m = sortedMarkers[markerIdx];\n lines.push(\n `**[关键点 ${formatTimestamp(m.timestamp_ms)}]**`,\n );\n lines.push(\"\");\n markerIdx++;\n }\n } else if (result.text) {\n // 纯文本转写:在文本头部集中列出关键点\n if (markers.length > 0) {\n lines.push(\"### 关键点\");\n lines.push(\"\");\n for (const m of markers) {\n lines.push(`- **[关键点 ${formatTimestamp(m.timestamp_ms)}]**`);\n }\n lines.push(\"\");\n lines.push(\"---\");\n lines.push(\"\");\n }\n lines.push(result.text);\n lines.push(\"\");\n }\n\n return lines.join(\"\\n\");\n}\n\n/**\n * 从转写文本中提取摘要标题(≤ 10 字)\n */\nexport function extractSummary(text: string): string {\n // 取第一句话,截断到 10 字\n const firstLine = text.split(/[。!?\\n]/).find((s) => s.trim().length > 0);\n if (!firstLine) return \"录音转写\";\n const trimmed = firstLine.trim();\n return trimmed.length <= 10 ? trimmed : trimmed.slice(0, 10);\n}\n\n/**\n * 完整的转写工作流:转写 → 生成 Markdown → 写入文件\n */\nexport async function runTranscriptionWorkflow(params: {\n audioFilePath: string;\n audioOssUrl?: string;\n config: AsrConfig;\n markers: RecordingMarker[];\n recordingName: string;\n durationSec: number;\n createdAt: string;\n transcriptsDir: string;\n transcriptDataDir: string;\n summariesDir: string;\n recordingId: string;\n logger: Logger;\n}): Promise<{\n ok: boolean;\n transcriptFilename?: string;\n transcriptDataFilename?: string;\n summaryFilename?: string;\n transcript?: RecordingTranscriptItem[];\n summary?: string;\n title?: string;\n error?: string;\n}> {\n const {\n audioFilePath,\n audioOssUrl,\n config,\n markers,\n recordingName,\n durationSec,\n createdAt,\n transcriptsDir,\n transcriptDataDir,\n summariesDir,\n recordingId,\n logger,\n } = params;\n\n // 1. ASR 转写\n const result = await transcribeAudio(audioFilePath, config, logger, {\n audioOssUrl,\n audioDurationMs: Math.max(0, Math.round(durationSec * 1000)),\n });\n if (!result.ok) {\n return { ok: false, error: result.error };\n }\n\n // 2. 提取摘要\n const title = normalizeOptionalText(result.summary)\n ? normalizeOptionalText(result.summary)!\n : extractSummary(result.text ?? \"\");\n const summary = result.summaryText ?? \"\";\n result.summary = title;\n const transcriptData = buildTranscriptDocument({\n recordingId,\n generatedAt: new Date().toISOString(),\n source: result.sourceInfo ?? {\n provider: config.mode === \"api\" ? \"model-proxy\" : config.mode,\n },\n title,\n category: result.category,\n summary,\n text: result.text,\n segments: (result.segments ?? []).map((segment) => ({\n text: segment.text,\n startMs: segment.start_ms,\n endMs: segment.end_ms,\n speakerId: segment.speaker_id,\n })),\n raw: result.rawResponse,\n });\n\n // 3. 生成 Markdown\n const markdown = buildTranscriptMarkdown(\n result,\n markers,\n recordingName,\n durationSec,\n createdAt,\n );\n\n // 4. 写入文件\n const transcriptDataFilename = buildTranscriptDataFilename(recordingId);\n const transcriptDataPath = join(transcriptDataDir, transcriptDataFilename);\n writeFileSync(\n transcriptDataPath,\n JSON.stringify(transcriptData, null, 2),\n \"utf-8\",\n );\n logger.info(`[asr] 转写 JSON 已写入: ${transcriptDataPath}`);\n\n const safeSummary = title\n .replace(/[/\\\\:*?\"<>|]/g, \"\")\n .trim()\n .slice(0, 20);\n const filename = safeSummary\n ? `${recordingId}_${safeSummary}.md`\n : `${recordingId}.md`;\n const filePath = join(transcriptsDir, filename);\n writeFileSync(filePath, markdown, \"utf-8\");\n logger.info(`[asr] 转写文本已写入: ${filePath}`);\n\n let summaryFilename: string | undefined;\n if (summary) {\n summaryFilename = `${recordingId}.md`;\n const summaryFilePath = join(summariesDir, summaryFilename);\n writeFileSync(summaryFilePath, summary, \"utf-8\");\n logger.info(`[asr] 摘要文本已写入: ${summaryFilePath}`);\n }\n\n return {\n ok: true,\n transcriptFilename: filename,\n transcriptDataFilename,\n summaryFilename,\n transcript: extractSourceTextListFromDocument(transcriptData),\n summary,\n title,\n };\n}\n\n// ─── ASR Provider Implementations ───\n\n/**\n * 通过 model-proxy 的长录音接口执行云端转写。\n */\nasync function transcribeWithModelProxy(\n audioOssUrl: string | undefined,\n audioDurationMs: number | undefined,\n apiConfig: AsrApiConfig | undefined,\n logger: Logger,\n): Promise<TranscriptionResult> {\n const normalizedAudioOssUrl = normalizeOptionalText(audioOssUrl);\n if (!normalizedAudioOssUrl) {\n return { ok: false, error: \"API 模式缺少 audioOssUrl,无法调用 model-proxy\" };\n }\n\n const apiKey = resolveModelProxyApiKey(apiConfig);\n const submitEndpoint = resolveModelProxyLongRecordingSubmitEndpoint(apiConfig);\n const submitBody = buildLongRecordingSubmitRequest(normalizedAudioOssUrl, apiConfig);\n\n logger.info(\n `[asr-submit] 提交长录音任务: endpoint=${submitEndpoint}, body=${stringifyForLog(submitBody) ?? \"{}\"}`,\n );\n\n let res: Response;\n try {\n res = await fetchWithRetry(\n submitEndpoint,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-Api-Key-Id\": apiKey,\n },\n body: JSON.stringify(submitBody),\n },\n { logger, context: \"asr-submit\" },\n );\n } catch (err: any) {\n const msg = err?.message ?? String(err);\n logger.error(`[asr-submit] 提交长录音任务网络异常 (已重试): ${msg}`);\n return {\n ok: false,\n error: `Model Proxy ASR submit network error: ${msg}`,\n };\n }\n\n if (!res.ok) {\n const errText = await res.text();\n logger.error(\n `[asr-submit-response] 提交长录音任务失败: status=${res.status}, body=${errText.slice(0, 500)}`,\n );\n return {\n ok: false,\n error: `Model Proxy ASR error: ${res.status} ${errText.slice(0, 200)}`,\n };\n }\n\n const raw = (await res.json()) as\n | ModelProxyLongRecordingStatusResponse\n | ResponseEnvelope<ModelProxyLongRecordingStatusResponse>;\n logger.info(\n `[asr-submit-response] 提交长录音任务响应: ${stringifyForLog(raw) ?? \"{}\"}`,\n );\n const submitEnvelopeError = buildModelProxyEnvelopeError(raw);\n if (submitEnvelopeError) {\n logger.error(\n `[asr-submit-response] 提交长录音任务失败: ${submitEnvelopeError}`,\n );\n return {\n ok: false,\n error: `Model Proxy ASR 提交失败: ${submitEnvelopeError}`,\n };\n }\n\n const data = unwrapResponse(raw);\n const taskId = normalizeOptionalText(data?.taskId);\n const requestId = normalizeOptionalText(data?.requestId);\n const status = normalizeLongRecordingStatus(data?.status);\n\n if (!taskId) {\n return {\n ok: false,\n error: \"Model Proxy ASR 响应缺少 taskId\",\n };\n }\n\n logger.info(\n `[asr] Model Proxy 长录音任务已提交: taskId=${taskId}, status=${status ?? \"UNKNOWN\"}, requestId=${requestId ?? \"n/a\"}`,\n );\n\n if (status && LONG_RECORDING_TERMINAL_FAILURE_STATUSES.has(status)) {\n return {\n ok: false,\n error: buildLongRecordingStatusError(data, status),\n };\n }\n\n return await pollLongRecordingTaskResult({\n apiKey,\n taskId,\n initialRequestId: requestId,\n audioDurationMs,\n apiConfig,\n logger,\n });\n}\n\n// ─── Helpers ───\n\nfunction resolveModelProxyLongRecordingSubmitEndpoint(apiConfig?: AsrApiConfig): string {\n return apiConfig?.endpoint?.trim() || getEnvUrls().modelProxyLongRecordingSubmitTaskUrl;\n}\n\nfunction resolveModelProxyApiKey(apiConfig?: AsrApiConfig): string {\n const requestApiKey = normalizeOptionalText(apiConfig?.apiKey);\n return normalizeApiKeyHeaderValue(requestApiKey ?? requireApiKey());\n}\n\nfunction resolveModelProxyLongRecordingQueryTaskResultBaseUrl(\n apiConfig?: AsrApiConfig,\n): string {\n const customEndpoint = apiConfig?.endpoint?.trim();\n if (customEndpoint) {\n return deriveLongRecordingQueryTaskResultBaseUrl(customEndpoint);\n }\n return getEnvUrls().modelProxyLongRecordingQueryTaskResultBaseUrl;\n}\n\nfunction deriveLongRecordingQueryTaskResultBaseUrl(endpoint: string): string {\n const trimmed = endpoint.replace(/\\/+$/, \"\");\n if (trimmed.endsWith(\"/submit-task\")) {\n return `${trimmed.slice(0, -\"/submit-task\".length)}/query-task-result`;\n }\n return trimmed;\n}\n\nfunction buildLongRecordingSubmitRequest(\n audioOssUrl: string,\n apiConfig?: AsrApiConfig,\n): ModelProxyLongRecordingSubmitRequest {\n const body: ModelProxyLongRecordingSubmitRequest = {\n audioOssUrl,\n };\n\n if (apiConfig?.language?.trim()) {\n body.language = apiConfig.language.trim();\n }\n if (typeof apiConfig?.enableNormalization === \"boolean\") {\n body.enableNormalization = apiConfig.enableNormalization;\n }\n\n return body;\n}\n\nasync function pollLongRecordingTaskResult(params: {\n apiKey: string;\n taskId: string;\n initialRequestId?: string;\n audioDurationMs?: number;\n apiConfig?: AsrApiConfig;\n logger: Logger;\n}): Promise<TranscriptionResult> {\n const {\n apiKey,\n taskId,\n initialRequestId,\n audioDurationMs,\n apiConfig,\n logger,\n } = params;\n const queryBaseUrl = resolveModelProxyLongRecordingQueryTaskResultBaseUrl(apiConfig);\n let lastStatus: string | undefined;\n\n const pollIntervalMs = getPollIntervalMs();\n\n for (let attempt = 1; attempt <= DEFAULT_LONG_RECORDING_MAX_POLL_ATTEMPTS; attempt++) {\n const queryUrl = `${queryBaseUrl}/${encodeURIComponent(taskId)}`;\n let res: Response;\n try {\n res = await fetch(queryUrl, {\n method: \"GET\",\n headers: {\n \"X-Api-Key-Id\": apiKey,\n },\n });\n } catch (err: any) {\n const msg = err?.message ?? String(err);\n logger.warn(\n `[asr-query] 长录音任务查询网络异常: taskId=${taskId}, attempt=${attempt}, error=${msg} — 等待下次轮询`,\n );\n if (attempt < DEFAULT_LONG_RECORDING_MAX_POLL_ATTEMPTS) {\n await sleep(pollIntervalMs);\n continue;\n }\n return {\n ok: false,\n error: `Model Proxy ASR query network error: ${msg}`,\n };\n }\n\n if (!res.ok) {\n const errText = await res.text().catch(() => \"\");\n if (isRetryableHttpStatus(res.status)) {\n logger.warn(\n `[asr-query] 长录音任务查询暂时失败: taskId=${taskId}, attempt=${attempt}, status=${res.status}, body=${errText.slice(0, 200)} — 等待下次轮询`,\n );\n if (attempt < DEFAULT_LONG_RECORDING_MAX_POLL_ATTEMPTS) {\n await sleep(pollIntervalMs);\n continue;\n }\n } else {\n logger.error(\n `[asr-query-response] 长录音任务查询失败: taskId=${taskId}, attempt=${attempt}, status=${res.status}, body=${errText.slice(0, 500)}`,\n );\n }\n return {\n ok: false,\n error: `Model Proxy ASR query error: ${res.status} ${errText.slice(0, 200)}`,\n };\n }\n\n const raw = (await res.json()) as\n | ModelProxyLongRecordingStatusResponse\n | ResponseEnvelope<ModelProxyLongRecordingStatusResponse>;\n const queryEnvelopeError = buildModelProxyEnvelopeError(raw);\n if (queryEnvelopeError) {\n logger.error(\n `[asr-query-response] 长录音任务查询失败: taskId=${taskId}, attempt=${attempt}, ${queryEnvelopeError}`,\n );\n return {\n ok: false,\n error: `Model Proxy ASR 查询失败: ${queryEnvelopeError}`,\n };\n }\n\n const data = unwrapResponse(raw);\n const status = normalizeLongRecordingStatus(data?.status) ?? \"UNKNOWN\";\n const requestId = normalizeOptionalText(data?.requestId) ?? initialRequestId;\n\n if (status !== lastStatus) {\n logger.info(\n `[asr-query-response] 长录音任务查询响应: taskId=${taskId}, attempt=${attempt}, body=${stringifyForLog(raw) ?? \"{}\"}`,\n );\n logger.info(\n `[asr] Model Proxy 长录音任务状态: taskId=${taskId}, status=${status}, attempt=${attempt}, requestId=${requestId ?? \"n/a\"}`,\n );\n lastStatus = status;\n }\n\n if (status === \"SUCCEEDED\") {\n return buildLongRecordingSuccessResult(\n taskId,\n requestId,\n data,\n audioDurationMs,\n logger,\n );\n }\n\n if (LONG_RECORDING_TERMINAL_FAILURE_STATUSES.has(status)) {\n return {\n ok: false,\n error: buildLongRecordingStatusError(data, status),\n };\n }\n\n if (!LONG_RECORDING_RUNNING_STATUSES.has(status)) {\n return {\n ok: false,\n error: `Model Proxy ASR 返回未知任务状态: ${status}`,\n };\n }\n\n if (attempt < DEFAULT_LONG_RECORDING_MAX_POLL_ATTEMPTS) {\n await sleep(pollIntervalMs);\n }\n }\n\n return {\n ok: false,\n error:\n `Model Proxy ASR 轮询超时: taskId=${taskId}, waited=${DEFAULT_LONG_RECORDING_MAX_POLL_ATTEMPTS * pollIntervalMs}ms`,\n };\n}\n\nfunction buildLongRecordingSuccessResult(\n taskId: string,\n requestId: string | undefined,\n data: ModelProxyLongRecordingStatusResponse | undefined,\n audioDurationMs: number | undefined,\n logger: Logger,\n): TranscriptionResult {\n const sourceTextList = normalizeLongRecordingSourceTextList(\n data?.recordResult?.sourceTextList,\n );\n const listResult = extractLongRecordingTextFromList(sourceTextList, audioDurationMs);\n const sourceText = normalizeOptionalText(data?.recordResult?.sourceText);\n const summaryText = normalizeOptionalText(data?.recordResult?.summaryResult) ?? \"\";\n const title = normalizeOptionalText(data?.recordResult?.title);\n const category = normalizeOptionalText(data?.recordResult?.category);\n const text = listResult.text ?? sourceText ?? summaryText;\n const status = normalizeLongRecordingStatus(data?.status) ?? \"SUCCEEDED\";\n\n if (!listResult.text && !sourceText && summaryText) {\n logger.warn(\n `[asr] Model Proxy 长录音结果缺少 sourceTextList/sourceText,已回退使用 summaryResult 作为转写文本: taskId=${taskId}`,\n );\n }\n\n logger.info(\n `[asr] Model Proxy 长录音转写完成: taskId=${taskId}, requestId=${requestId ?? \"n/a\"}, chars=${text.length}`,\n );\n\n return {\n ok: true,\n text,\n segments: listResult.segments,\n summary: title,\n summaryText,\n category,\n sourceInfo: {\n provider: \"model-proxy\",\n taskId,\n requestId,\n status,\n },\n rawResponse: data,\n };\n}\n\nfunction buildLongRecordingStatusError(\n data: ModelProxyLongRecordingStatusResponse | undefined,\n status: string,\n): string {\n const errorMessage = normalizeOptionalText(data?.errorMessage);\n return errorMessage\n ? `Model Proxy ASR ${status}: ${errorMessage}`\n : `Model Proxy ASR ${status}`;\n}\n\nfunction buildModelProxyEnvelopeError(\n payload:\n | ModelProxyLongRecordingStatusResponse\n | ResponseEnvelope<ModelProxyLongRecordingStatusResponse>,\n): string | undefined {\n if (!payload || typeof payload !== \"object\" || !(\"data\" in payload)) {\n return undefined;\n }\n\n const envelope = payload as ResponseEnvelope<ModelProxyLongRecordingStatusResponse>;\n const explicitFailure = envelope.success === false;\n const message = normalizeOptionalText(envelope.message);\n if (!explicitFailure && (!message || envelope.data)) {\n return undefined;\n }\n\n const code = normalizeOptionalCode(envelope.code);\n if (code && message) {\n return `${code} ${message}`;\n }\n return message ?? code ?? \"response envelope indicates failure\";\n}\n\nfunction unwrapResponse(\n payload:\n | ModelProxyLongRecordingStatusResponse\n | ResponseEnvelope<ModelProxyLongRecordingStatusResponse>,\n): ModelProxyLongRecordingStatusResponse | undefined {\n if (\n payload &&\n typeof payload === \"object\" &&\n \"data\" in payload &&\n payload.data &&\n typeof payload.data === \"object\"\n ) {\n return payload.data;\n }\n\n return payload as ModelProxyLongRecordingStatusResponse;\n}\n\nfunction normalizeApiKeyHeaderValue(apiKey: string): string {\n return apiKey.startsWith(\"Bearer \")\n ? apiKey.slice(\"Bearer \".length)\n : apiKey;\n}\n\nfunction normalizeLongRecordingStatus(status: unknown): string | undefined {\n return typeof status === \"string\" && status.trim()\n ? status.trim().toUpperCase()\n : undefined;\n}\n\nfunction normalizeOptionalText(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim()\n ? value.trim()\n : undefined;\n}\n\nfunction normalizeOptionalCode(value: unknown): string | undefined {\n if (typeof value === \"string\" && value.trim()) {\n return value.trim();\n }\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return String(value);\n }\n return undefined;\n}\n\nfunction normalizeOptionalInteger(value: unknown): number | undefined {\n return Number.isInteger(value)\n ? Number(value)\n : undefined;\n}\n\nfunction normalizeOptionalNonNegativeNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0\n ? value\n : undefined;\n}\n\nfunction normalizeLongRecordingSourceTextList(\n value: unknown,\n): Array<{\n content: string;\n speakerId?: number;\n startTime?: number;\n endTime?: number;\n}> {\n if (!Array.isArray(value)) {\n return [];\n }\n\n return value\n .flatMap((item) => {\n if (!item || typeof item !== \"object\") {\n return [];\n }\n\n const record = item as Record<string, unknown>;\n const content = normalizeOptionalText(record.content);\n if (!content) {\n return [];\n }\n\n return [{\n content,\n speakerId: normalizeOptionalInteger(record.speakerId),\n startTime: normalizeOptionalNonNegativeNumber(record.startTime),\n endTime: normalizeOptionalNonNegativeNumber(record.endTime),\n }];\n });\n}\n\nfunction extractLongRecordingTextFromList(\n items: Array<{\n content: string;\n speakerId?: number;\n startTime?: number;\n endTime?: number;\n }>,\n finalFallbackEndMs?: number,\n): {\n text?: string;\n segments: TranscriptSegment[];\n} {\n if (items.length === 0) {\n return {\n segments: [],\n };\n }\n\n const segments = items.map((item, index) => {\n const startMs = item.startTime ?? 0;\n const explicitEndMs = item.endTime;\n const nextStart = items[index + 1]?.startTime;\n const fallbackEndMs = index === items.length - 1\n ? normalizeOptionalNonNegativeNumber(finalFallbackEndMs)\n : undefined;\n const endMs = explicitEndMs ?? nextStart ?? fallbackEndMs ?? startMs;\n\n return {\n start_ms: startMs,\n end_ms: Math.max(startMs, endMs),\n text: item.content,\n speaker_id: item.speakerId,\n };\n });\n\n return {\n text: items.map((item) => item.content).join(\"\\n\\n\"),\n segments,\n };\n}\n\nfunction stringifyForLog(value: unknown, maxLength = 500): string | undefined {\n if (value == null) {\n return undefined;\n }\n\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n return trimmed ? trimmed.slice(0, maxLength) : undefined;\n }\n\n try {\n const serialized = JSON.stringify(value);\n return serialized ? serialized.slice(0, maxLength) : undefined;\n } catch {\n return String(value).slice(0, maxLength);\n }\n}\n\nasync function sleep(ms: number): Promise<void> {\n await new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction isRetryableHttpStatus(status: number): boolean {\n return status === 429 || status >= 500;\n}\n\nfunction getHttpRetryBackoffMs(): number {\n const raw = process.env.OPENCLAW_ASR_HTTP_RETRY_BACKOFF_MS;\n if (raw) {\n const parsed = Number(raw);\n if (Number.isFinite(parsed) && parsed >= 0) {\n return parsed;\n }\n }\n return DEFAULT_HTTP_RETRY_BACKOFF_MS;\n}\n\nfunction getPollIntervalMs(): number {\n const raw = process.env.OPENCLAW_ASR_POLL_INTERVAL_MS;\n if (raw) {\n const parsed = Number(raw);\n if (Number.isFinite(parsed) && parsed >= 0) {\n return parsed;\n }\n }\n return DEFAULT_LONG_RECORDING_POLL_INTERVAL_MS;\n}\n\n/**\n * 带重试的 fetch 包装:\n * - HTTP 5xx / 429:按指数退避重试\n * - 网络异常(fetch throw):按指数退避重试\n * - HTTP 4xx(除 429)/ 2xx / 3xx:直接返回,由调用方处理\n *\n * 用于 ASR submit 这类一次性请求;polling 走自己的节奏,无需此包装。\n */\nasync function fetchWithRetry(\n url: string,\n init: RequestInit,\n options: {\n logger: Logger;\n context: string;\n maxAttempts?: number;\n backoffMs?: number;\n },\n): Promise<Response> {\n const maxAttempts = options.maxAttempts ?? DEFAULT_HTTP_MAX_ATTEMPTS;\n const baseBackoff = options.backoffMs ?? getHttpRetryBackoffMs();\n let lastError: unknown;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n const res = await fetch(url, init);\n if (isRetryableHttpStatus(res.status) && attempt < maxAttempts) {\n const errText = await res.text().catch(() => \"\");\n const delay = baseBackoff * Math.pow(2, attempt - 1);\n options.logger.warn(\n `[${options.context}] HTTP ${res.status} (attempt ${attempt}/${maxAttempts}), ${delay}ms 后重试, body=${errText.slice(0, 200)}`,\n );\n await sleep(delay);\n continue;\n }\n return res;\n } catch (err) {\n lastError = err;\n if (attempt < maxAttempts) {\n const delay = baseBackoff * Math.pow(2, attempt - 1);\n const msg = (err as any)?.message ?? String(err);\n options.logger.warn(\n `[${options.context}] 网络异常 (attempt ${attempt}/${maxAttempts}): ${msg}, ${delay}ms 后重试`,\n );\n await sleep(delay);\n continue;\n }\n }\n }\n\n throw lastError instanceof Error ? lastError : new Error(String(lastError));\n}\n\nfunction extractTranscriptSummary(text: string): string {\n const normalized = text.replace(/\\s+/g, \" \").trim();\n if (!normalized) {\n return \"\";\n }\n\n const sentence = normalized\n .split(/[。!?!?]/)\n .map((part) => part.trim())\n .find((part) => part.length > 0);\n\n const candidate = sentence || normalized;\n return candidate.length <= 120\n ? candidate\n : `${candidate.slice(0, 117).trimEnd()}...`;\n}\n/** 毫秒 → \"MM:SS\" */\nfunction formatTimestamp(ms: number): string {\n const totalSeconds = Math.floor(ms / 1000);\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = totalSeconds % 60;\n return `${String(minutes).padStart(2, \"0\")}:${String(seconds).padStart(2, \"0\")}`;\n}\n\n/** 秒 → \"HH:MM:SS\" 或 \"MM:SS\" */\nfunction formatDuration(seconds: number): string {\n const h = Math.floor(seconds / 3600);\n const m = Math.floor((seconds % 3600) / 60);\n const s = Math.floor(seconds % 60);\n if (h > 0) {\n return `${h}:${String(m).padStart(2, \"0\")}:${String(s).padStart(2, \"0\")}`;\n }\n return `${String(m).padStart(2, \"0\")}:${String(s).padStart(2, \"0\")}`;\n}\n\nfunction hasText(value: unknown): boolean {\n return typeof value === \"string\" && value.trim().length > 0;\n}\n\nfunction formatTranscriptSegmentText(segment: TranscriptSegment): string {\n const text = segment.text.trim();\n if (!text) {\n return text;\n }\n\n if (typeof segment.speaker_id === \"number\") {\n return `说话人${segment.speaker_id}:${text}`;\n }\n\n return text;\n}\n",
95
- "/**\n * 本地 Whisper 转写模块(arc-long-recording §6.4)\n *\n * 插件内置 Whisper 推理能力:\n * 1. 自动检测运行环境与硬件配置(§6.4.1)\n * 2. 选择最优推理后端(§6.4.2)\n * 3. 根据可用内存自动选择模型规格(§6.4.3)\n * 4. 首次使用时下载模型文件(§6.4.5)\n * 5. 通过 whisper.cpp CLI 执行本地离线转写\n */\n\nimport { execSync, execFileSync, spawnSync, type SpawnSyncReturns } from \"node:child_process\";\nimport {\n existsSync,\n mkdirSync,\n readFileSync,\n statSync,\n createWriteStream,\n unlinkSync,\n copyFileSync,\n openSync,\n readSync,\n closeSync,\n} from \"node:fs\";\nimport { join, dirname, basename } from \"node:path\";\nimport { pipeline } from \"node:stream/promises\";\nimport { Readable } from \"node:stream\";\nimport { platform, arch, totalmem, cpus, freemem } from \"node:os\";\nimport type {\n WhisperLocalConfig,\n WhisperModelSize,\n WhisperModelSource,\n WhisperBackend,\n WhisperEnvironmentInfo,\n} from \"../types.js\";\nimport type { Logger } from \"../logger.js\";\nimport type { TranscriptionResult, TranscriptSegment } from \"./asr.js\";\n\n// ─── Constants ───\n\nconst WHISPER_MODELS_DIR = \"whisper-models\";\nconst WHISPER_BIN_DIR = \"whisper-bin\";\n\n/** Hugging Face GGML 模型下载 URL 模板(海外) */\nconst HF_MODEL_URL_TEMPLATE =\n \"https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-{model}.bin\";\n\n/** 国内 ModelScope 镜像 URL 模板(lihuoo/whisper.cpp-asr-model-collection) */\nconst MODELSCOPE_MODEL_URL_TEMPLATE =\n \"https://modelscope.cn/models/lihuoo/whisper.cpp-asr-model-collection/resolve/master/{model}.bin\";\n\n/** 连通性探测超时(ms) */\nconst PROBE_TIMEOUT_MS = 5_000;\n\n/** 模型规格 → 文件名映射 */\nconst MODEL_FILENAMES: Record<WhisperModelSize, string> = {\n tiny: \"ggml-tiny.bin\",\n base: \"ggml-base.bin\",\n small: \"ggml-small.bin\",\n medium: \"ggml-medium.bin\",\n \"large-v3\": \"ggml-large-v3.bin\",\n};\n\n/** 模型规格 → 推理内存需求 GB(§6.4.3) */\nconst MODEL_MEMORY_REQUIREMENTS: Record<WhisperModelSize, number> = {\n tiny: 1,\n base: 1.5,\n small: 3,\n medium: 6,\n \"large-v3\": 11,\n};\n\n/** 模型规格 → 磁盘占用(字节,近似值) */\nconst MODEL_DISK_SIZES: Record<WhisperModelSize, number> = {\n tiny: 75 * 1024 * 1024,\n base: 140 * 1024 * 1024,\n small: 460 * 1024 * 1024,\n medium: 1500 * 1024 * 1024,\n \"large-v3\": 3000 * 1024 * 1024,\n};\n\n/** whisper.cpp JSON 输出格式 */\ninterface WhisperCppJsonOutput {\n transcription?: Array<{\n timestamps?: { from: string; to: string };\n offsets?: { from: number; to: number };\n text: string;\n }>;\n}\n\n// ─── Public API ───\n\n/**\n * 检测运行环境与硬件配置(§6.4.1)\n *\n * 检测操作系统、CPU 架构、GPU、可用内存,\n * 推荐最优推理后端与模型规格。\n */\nexport function detectEnvironment(logger: Logger): WhisperEnvironmentInfo {\n const os = platform() as \"darwin\" | \"linux\" | \"win32\";\n const cpuArch = arch() as \"arm64\" | \"x64\";\n const isAppleSilicon = os === \"darwin\" && cpuArch === \"arm64\";\n const hasCuda = detectCuda(logger);\n\n // 推荐后端(§6.4.2)\n let recommendedBackend: WhisperBackend;\n if (isAppleSilicon) {\n recommendedBackend = \"coreml\";\n } else if (hasCuda) {\n recommendedBackend = \"cuda\";\n } else {\n recommendedBackend = \"cpu\";\n }\n\n // 可用内存\n const availableMemoryGB = getAvailableMemoryGB(recommendedBackend, logger);\n const physicalCores = getPhysicalCoreCount();\n\n // 推荐模型\n const recommendedModel = selectModelByMemory(availableMemoryGB, isAppleSilicon);\n\n const info: WhisperEnvironmentInfo = {\n os,\n arch: cpuArch,\n isAppleSilicon,\n hasCuda,\n recommendedBackend,\n availableMemoryGB: Math.round(availableMemoryGB * 10) / 10,\n recommendedModel,\n physicalCores,\n };\n\n logger.info(\n `[whisper-local] 环境检测完成: os=${os}, arch=${cpuArch}, ` +\n `appleSilicon=${isAppleSilicon}, cuda=${hasCuda}, ` +\n `backend=${recommendedBackend}, memory=${info.availableMemoryGB}GB, ` +\n `model=${recommendedModel}, cores=${physicalCores}`,\n );\n\n return info;\n}\n\n/**\n * 根据可用内存自动选择模型规格(§6.4.3)\n *\n * 策略:优先匹配可用内存最大能承载的模型(向下取最近档位)。\n * Apple Silicon CoreML 后端内存效率更高,同档位需求降低 ~30%。\n */\nexport function selectModelByMemory(\n availableGB: number,\n isAppleSilicon: boolean = false,\n): WhisperModelSize {\n // Apple Silicon CoreML 内存效率提升约 30%\n const effectiveGB = isAppleSilicon ? availableGB / 0.7 : availableGB;\n\n if (effectiveGB >= 12) return \"large-v3\";\n if (effectiveGB >= 8) return \"medium\";\n if (effectiveGB >= 6) return \"small\";\n if (effectiveGB >= 4) return \"base\";\n return \"tiny\";\n}\n\n/**\n * 解析模型存储目录\n */\nexport function resolveModelsDir(dataDir: string): string {\n const dir = join(dataDir, WHISPER_MODELS_DIR);\n mkdirSync(dir, { recursive: true });\n return dir;\n}\n\n/**\n * 解析 whisper.cpp 二进制目录\n */\nexport function resolveBinDir(dataDir: string): string {\n const dir = join(dataDir, WHISPER_BIN_DIR);\n mkdirSync(dir, { recursive: true });\n return dir;\n}\n\n/**\n * 检查模型文件是否已下载(§6.4.5)\n */\nexport function isModelDownloaded(modelsDir: string, modelSize: WhisperModelSize): boolean {\n const modelPath = join(modelsDir, MODEL_FILENAMES[modelSize]);\n if (!existsSync(modelPath)) return false;\n\n // 简单校验:文件大小至少为预期大小的 80%(防止下载不完整)\n try {\n const stat = statSync(modelPath);\n const expectedSize = MODEL_DISK_SIZES[modelSize];\n return stat.size >= expectedSize * 0.8;\n } catch {\n return false;\n }\n}\n\n/**\n * 下载 Whisper 模型文件(§6.4.5)\n *\n * 下载源选择策略:\n * - modelMirrorUrl 存在 → 使用自定义 URL\n * - modelSource = \"huggingface\" → 直接使用 Hugging Face\n * - modelSource = \"domestic\" → 直接使用国内镜像(ModelScope)\n * - modelSource = \"auto\"(默认)→ 先探测 Hugging Face 连通性(5s 超时),\n * 可达则用 HF,不可达则回退国内镜像\n */\nexport async function downloadModel(\n modelsDir: string,\n modelSize: WhisperModelSize,\n logger: Logger,\n modelSource?: WhisperModelSource,\n mirrorUrl?: string,\n): Promise<{ ok: boolean; modelPath: string; error?: string }> {\n const filename = MODEL_FILENAMES[modelSize];\n const modelPath = join(modelsDir, filename);\n\n // 已存在且完整 → 跳过\n if (isModelDownloaded(modelsDir, modelSize)) {\n logger.info(`[whisper-local] 模型已存在,跳过下载: ${filename}`);\n return { ok: true, modelPath };\n }\n\n // 解析下载 URL\n const url = await resolveModelUrl(modelSize, modelSource, mirrorUrl, logger);\n\n logger.info(\n `[whisper-local] 开始下载模型: ${modelSize} (${formatBytes(MODEL_DISK_SIZES[modelSize])})`,\n );\n logger.info(`[whisper-local] 下载 URL: ${url}`);\n\n const result = await downloadFromUrl(url, modelPath, logger);\n\n // auto 模式且 HF 失败 → 尝试国内镜像回退\n if (\n !result.ok &&\n !mirrorUrl &&\n (modelSource === \"auto\" || !modelSource) &&\n url.includes(\"huggingface.co\")\n ) {\n const fallbackUrl = MODELSCOPE_MODEL_URL_TEMPLATE.replace(\"{model}\", modelSize);\n logger.info(\n `[whisper-local] Hugging Face 下载失败,回退至国内镜像(ModelScope): ${fallbackUrl}`,\n );\n return downloadFromUrl(fallbackUrl, modelPath, logger);\n }\n\n return result;\n}\n\n/**\n * 解析模型下载 URL\n */\nasync function resolveModelUrl(\n modelSize: WhisperModelSize,\n modelSource: WhisperModelSource | undefined,\n mirrorUrl: string | undefined,\n logger: Logger,\n): Promise<string> {\n // 自定义 URL 优先级最高\n if (mirrorUrl) {\n return `${mirrorUrl.replace(/\\/$/, \"\")}/${MODEL_FILENAMES[modelSize]}`;\n }\n\n const source = modelSource ?? \"auto\";\n\n switch (source) {\n case \"huggingface\":\n return HF_MODEL_URL_TEMPLATE.replace(\"{model}\", modelSize);\n case \"domestic\":\n return MODELSCOPE_MODEL_URL_TEMPLATE.replace(\"{model}\", modelSize);\n case \"auto\": {\n // 探测 Hugging Face 连通性\n const hfReachable = await probeUrl(\"https://huggingface.co\", logger);\n if (hfReachable) {\n logger.info(\"[whisper-local] Hugging Face 可达,使用海外源\");\n return HF_MODEL_URL_TEMPLATE.replace(\"{model}\", modelSize);\n }\n logger.info(\"[whisper-local] Hugging Face 不可达,使用国内镜像(ModelScope)\");\n return MODELSCOPE_MODEL_URL_TEMPLATE.replace(\"{model}\", modelSize);\n }\n default:\n return HF_MODEL_URL_TEMPLATE.replace(\"{model}\", modelSize);\n }\n}\n\n/**\n * 探测 URL 连通性(HEAD 请求,短超时)\n */\nasync function probeUrl(url: string, logger: Logger): Promise<boolean> {\n try {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), PROBE_TIMEOUT_MS);\n try {\n const res = await fetch(url, {\n method: \"HEAD\",\n signal: controller.signal,\n });\n return res.ok || res.status === 301 || res.status === 302;\n } finally {\n clearTimeout(timer);\n }\n } catch (err: any) {\n logger.info(\n `[whisper-local] 连通性探测失败: ${url} (${err?.name ?? err?.message ?? \"unknown\"})`,\n );\n return false;\n }\n}\n\n/**\n * 从指定 URL 下载模型文件至本地\n */\nasync function downloadFromUrl(\n url: string,\n modelPath: string,\n logger: Logger,\n): Promise<{ ok: boolean; modelPath: string; error?: string }> {\n const tmpPath = `${modelPath}.downloading`;\n\n try {\n mkdirSync(dirname(modelPath), { recursive: true });\n\n const controller = new AbortController();\n // 模型下载超时:30 分钟(large-v3 约 3GB)\n const timer = setTimeout(() => controller.abort(), 30 * 60 * 1000);\n\n try {\n const res = await fetch(url, { signal: controller.signal });\n\n if (!res.ok) {\n return {\n ok: false,\n modelPath,\n error: `模型下载失败: HTTP ${res.status} ${res.statusText}`,\n };\n }\n\n if (!res.body) {\n return { ok: false, modelPath, error: \"模型下载失败: 响应体为空\" };\n }\n\n const contentLength = Number(res.headers.get(\"content-length\") ?? 0);\n const writeStream = createWriteStream(tmpPath);\n const readable = Readable.fromWeb(res.body as any);\n\n // 下载进度日志\n let downloaded = 0;\n let lastLogPercent = 0;\n readable.on(\"data\", (chunk: Buffer) => {\n downloaded += chunk.length;\n if (contentLength > 0) {\n const percent = Math.floor((downloaded / contentLength) * 100);\n if (percent >= lastLogPercent + 10) {\n logger.info(\n `[whisper-local] 下载进度: ${percent}% (${formatBytes(downloaded)} / ${formatBytes(contentLength)})`,\n );\n lastLogPercent = percent;\n }\n }\n });\n\n await pipeline(readable, writeStream);\n } finally {\n clearTimeout(timer);\n }\n\n // 重命名为正式文件\n const { renameSync } = await import(\"node:fs\");\n renameSync(tmpPath, modelPath);\n\n const fileSize = statSync(modelPath).size;\n logger.info(\n `[whisper-local] 模型下载完成: ${basename(modelPath)} (${formatBytes(fileSize)})`,\n );\n\n return { ok: true, modelPath };\n } catch (err: any) {\n // 清理临时文件\n try {\n if (existsSync(tmpPath)) unlinkSync(tmpPath);\n } catch { /* ignore */ }\n\n const msg = err?.name === \"AbortError\"\n ? \"模型下载超时(30 分钟)\"\n : (err?.message ?? String(err));\n logger.error(`[whisper-local] 模型下载失败: ${msg}`);\n return { ok: false, modelPath, error: msg };\n }\n}\n\n/**\n * 查找 whisper.cpp CLI 二进制文件\n *\n * 按以下优先级查找:\n * 1. 插件数据目录下的 whisper-bin/\n * 2. 系统 PATH 中的 whisper-cli / whisper-cpp / whisper\n */\nexport function findWhisperBinary(dataDir: string, logger: Logger): string | null {\n // 1. 检查插件 bin 目录\n const binDir = resolveBinDir(dataDir);\n const binNames = platform() === \"win32\"\n ? [\"whisper-cli.exe\", \"whisper.exe\", \"main.exe\"]\n : [\"whisper-cli\", \"whisper\", \"main\"];\n\n for (const name of binNames) {\n const binPath = join(binDir, name);\n if (existsSync(binPath)) {\n logger.info(`[whisper-local] 找到本地二进制: ${binPath}`);\n return binPath;\n }\n }\n\n // 2. 检查系统 PATH\n const pathNames = platform() === \"win32\"\n ? [\"whisper-cli\", \"whisper-cpp\", \"whisper\"]\n : [\"whisper-cli\", \"whisper-cpp\", \"whisper\"];\n\n for (const name of pathNames) {\n try {\n const cmd = platform() === \"win32\" ? \"where\" : \"which\";\n const result = execSync(`${cmd} ${name}`, { encoding: \"utf-8\", stdio: \"pipe\" }).trim();\n if (result) {\n logger.info(`[whisper-local] 找到系统 PATH 二进制: ${result}`);\n return result.split(\"\\n\")[0].trim();\n }\n } catch {\n // not found, continue\n }\n }\n\n logger.warn(\"[whisper-local] 未找到 whisper.cpp 二进制文件\");\n return null;\n}\n\n/**\n * 使用本地 Whisper 执行转写(§6.4)\n *\n * @param audioFilePath 本地音频文件绝对路径\n * @param localConfig 本地 Whisper 配置\n * @param dataDir 插件数据目录(存放模型和二进制)\n * @param logger 日志\n */\nexport async function transcribeWithWhisperLocal(\n audioFilePath: string,\n localConfig: WhisperLocalConfig,\n dataDir: string,\n logger: Logger,\n): Promise<TranscriptionResult> {\n // 1. 检测环境\n const env = detectEnvironment(logger);\n\n // 2. 确定后端、模型、线程数\n const backend = localConfig.backend ?? env.recommendedBackend;\n const modelSize = localConfig.model ?? env.recommendedModel;\n const threads = localConfig.threads ?? env.physicalCores;\n const language = localConfig.language ?? \"auto\";\n const translate = localConfig.translate ?? false;\n\n logger.info(\n `[whisper-local] 转写参数: backend=${backend}, model=${modelSize}, ` +\n `threads=${threads}, language=${language}, translate=${translate}`,\n );\n\n // 3. 查找 whisper.cpp 二进制\n const whisperBin = findWhisperBinary(dataDir, logger);\n if (!whisperBin) {\n return {\n ok: false,\n error:\n \"未找到 whisper.cpp 二进制文件。请安装 whisper.cpp 并确保 whisper-cli 在 PATH 中,\" +\n `或将二进制文件放入 ${resolveBinDir(dataDir)}`,\n };\n }\n\n // 4. 确保模型已下载\n const modelsDir = resolveModelsDir(dataDir);\n if (!isModelDownloaded(modelsDir, modelSize)) {\n logger.info(`[whisper-local] 模型 ${modelSize} 未下载,开始下载...`);\n const downloadResult = await downloadModel(\n modelsDir,\n modelSize,\n logger,\n localConfig.modelSource,\n localConfig.modelMirrorUrl,\n );\n if (!downloadResult.ok) {\n return { ok: false, error: `模型下载失败: ${downloadResult.error}` };\n }\n }\n\n const modelPath = join(modelsDir, MODEL_FILENAMES[modelSize]);\n\n // 5. 音频格式转换(whisper.cpp 仅支持 16kHz mono WAV)\n // 通过 magic bytes 判断真实格式,不依赖扩展名\n let inputPath = audioFilePath;\n let tmpWavPath: string | null = null;\n\n const actualFmt = detectAudioFormat(audioFilePath);\n if (actualFmt !== \".wav\") {\n tmpWavPath = audioFilePath.replace(/\\.[^.]+$/, \".whisper.wav\");\n logger.info(\n `[whisper-local] 转换音频格式: ${audioFilePath} (${actualFmt ?? \"未知\"}) → WAV (16kHz mono)`,\n );\n\n const convertResult = convertToWav(audioFilePath, tmpWavPath, actualFmt, logger);\n if (!convertResult.ok) {\n return { ok: false, error: convertResult.error! };\n }\n inputPath = tmpWavPath;\n }\n\n // 6. 构建 whisper.cpp CLI 参数\n const args = buildWhisperArgs({\n audioFilePath: inputPath,\n modelPath,\n language,\n translate,\n threads,\n backend,\n });\n\n logger.info(`[whisper-local] 执行: ${whisperBin} ${args.join(\" \")}`);\n\n // 7. 执行转写\n try {\n const startMs = Date.now();\n let result: SpawnSyncReturns<string>;\n\n try {\n result = spawnSync(whisperBin, args, {\n encoding: \"utf-8\" as const,\n timeout: 60 * 60 * 1000, // 1 小时超时(5 小时录音)\n maxBuffer: 100 * 1024 * 1024, // 100MB stdout buffer\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n } catch (err: any) {\n cleanupTmpWav(tmpWavPath);\n return { ok: false, error: `whisper.cpp 执行失败: ${err?.message ?? err}` };\n }\n\n if (result.status !== 0) {\n cleanupTmpWav(tmpWavPath);\n const stderr = result.stderr?.slice(0, 500) ?? \"\";\n return {\n ok: false,\n error: `whisper.cpp 退出码 ${result.status}: ${stderr}`,\n };\n }\n\n const elapsed = Date.now() - startMs;\n logger.info(`[whisper-local] 转写耗时: ${Math.round(elapsed / 1000)}s`);\n\n // 8. 读取 JSON 输出文件(--output-json 将结果写入 {inputPath}.json)\n const jsonPath = inputPath + \".json\";\n let jsonContent: string;\n\n if (existsSync(jsonPath)) {\n jsonContent = readFileSync(jsonPath, \"utf-8\");\n // 清理 JSON 文件\n try { unlinkSync(jsonPath); } catch { /* ignore */ }\n } else {\n // 回退:尝试解析 stdout(部分 whisper.cpp 版本可能输出到 stdout)\n jsonContent = result.stdout;\n }\n\n cleanupTmpWav(tmpWavPath);\n\n return parseWhisperOutput(jsonContent, logger);\n } catch (err: any) {\n cleanupTmpWav(tmpWavPath);\n return { ok: false, error: `whisper.cpp 转写异常: ${err?.message ?? err}` };\n }\n}\n\n/**\n * 获取本地 Whisper 状态信息(供 App 查询环境检测结果)\n */\nexport function getWhisperLocalStatus(\n dataDir: string,\n logger: Logger,\n): {\n environment: WhisperEnvironmentInfo;\n binaryFound: boolean;\n binaryPath: string | null;\n downloadedModels: WhisperModelSize[];\n} {\n const env = detectEnvironment(logger);\n const binaryPath = findWhisperBinary(dataDir, logger);\n const modelsDir = resolveModelsDir(dataDir);\n\n const allModels: WhisperModelSize[] = [\"tiny\", \"base\", \"small\", \"medium\", \"large-v3\"];\n const downloadedModels = allModels.filter((m) => isModelDownloaded(modelsDir, m));\n\n return {\n environment: env,\n binaryFound: binaryPath !== null,\n binaryPath,\n downloadedModels,\n };\n}\n\n// ─── Internal Helpers ───\n\n/**\n * 检测 CUDA 是否可用(§6.4.1)\n */\nfunction detectCuda(logger: Logger): boolean {\n try {\n // 尝试运行 nvidia-smi\n execSync(\"nvidia-smi\", { encoding: \"utf-8\", stdio: \"pipe\", timeout: 5000 });\n logger.info(\"[whisper-local] 检测到 NVIDIA GPU (nvidia-smi)\");\n return true;\n } catch {\n // nvidia-smi 不存在或执行失败\n }\n\n // 检查 CUDA runtime 库\n if (platform() === \"linux\") {\n try {\n const ldconfig = execSync(\"ldconfig -p 2>/dev/null | grep libcudart\", {\n encoding: \"utf-8\",\n stdio: \"pipe\",\n timeout: 5000,\n });\n if (ldconfig.includes(\"libcudart\")) {\n logger.info(\"[whisper-local] 检测到 CUDA runtime (ldconfig)\");\n return true;\n }\n } catch { /* ignore */ }\n }\n\n return false;\n}\n\n/**\n * 获取可用内存(GB)\n *\n * CUDA 后端使用 VRAM,其余使用系统 RAM。\n */\nfunction getAvailableMemoryGB(backend: WhisperBackend, logger: Logger): number {\n if (backend === \"cuda\") {\n // 尝试获取 GPU VRAM\n try {\n const output = execSync(\n \"nvidia-smi --query-gpu=memory.free --format=csv,noheader,nounits\",\n { encoding: \"utf-8\", stdio: \"pipe\", timeout: 5000 },\n );\n const freeVramMB = parseInt(output.trim().split(\"\\n\")[0], 10);\n if (!Number.isNaN(freeVramMB) && freeVramMB > 0) {\n return freeVramMB / 1024;\n }\n } catch {\n logger.warn(\"[whisper-local] 无法获取 GPU VRAM,使用系统 RAM 代替\");\n }\n }\n\n // 使用系统可用内存(取 total 的 80% 和 free 的较大值作为可用估计)\n const totalGB = totalmem() / (1024 * 1024 * 1024);\n const freeGB = freemem() / (1024 * 1024 * 1024);\n return Math.max(freeGB, totalGB * 0.6);\n}\n\n/**\n * 获取物理 CPU 核心数\n */\nfunction getPhysicalCoreCount(): number {\n const cpuList = cpus();\n if (cpuList.length === 0) return 4; // fallback\n\n // 简单估算:逻辑核 / 2(假设超线程)\n // macOS ARM 无超线程,直接使用逻辑核数\n if (platform() === \"darwin\" && arch() === \"arm64\") {\n // Apple Silicon: P-cores only (exclude E-cores for inference)\n // 简化处理:使用总核数\n return cpuList.length;\n }\n\n return Math.max(1, Math.floor(cpuList.length / 2));\n}\n\n/**\n * 通过文件头 magic bytes 检测音频的真实格式\n * @returns 正确的文件扩展名(如 .aiff, .wav, .m4a),或 null\n */\nfunction detectAudioFormat(filePath: string): string | null {\n try {\n const fd = openSync(filePath, \"r\");\n const buf = Buffer.alloc(12);\n readSync(fd, buf, 0, 12, 0);\n closeSync(fd);\n\n const header = buf.toString(\"ascii\", 0, 4);\n const header8 = buf.toString(\"ascii\", 0, 8);\n\n // RIFF....WAVE = WAV\n if (header === \"RIFF\" && buf.toString(\"ascii\", 8, 12) === \"WAVE\") return \".wav\";\n // FORM....AIFF / FORM....AIFC = AIFF\n if (header === \"FORM\") {\n const sub = buf.toString(\"ascii\", 8, 12);\n if (sub === \"AIFF\" || sub === \"AIFC\") return \".aiff\";\n }\n // ftyp = MP4/M4A/AAC container\n if (buf.toString(\"ascii\", 4, 8) === \"ftyp\") return \".m4a\";\n // ID3 or 0xFF 0xFB = MP3\n if (header.startsWith(\"ID3\") || (buf[0] === 0xff && (buf[1] & 0xe0) === 0xe0)) return \".mp3\";\n // OggS = Ogg (Vorbis/Opus)\n if (header === \"OggS\") return \".ogg\";\n // fLaC = FLAC\n if (header === \"fLaC\") return \".flac\";\n\n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * 将音频文件转换为 whisper.cpp 所需的 16kHz mono WAV 格式\n *\n * 转换链(按优先级):\n * 1. ffmpeg — 支持全格式,含 OGG/Opus\n * 2. opusdec — 专用于 OGG/Opus(来自 brew install opus-tools)\n * 3. afconvert — macOS 内置,支持 AIFF/M4A/AAC;需正确文件扩展名\n *\n * @param actualFmt detectAudioFormat 检测到的真实格式(如 \".ogg\", \".aiff\"),可为 null\n */\nfunction convertToWav(\n inputPath: string,\n outputPath: string,\n actualFmt: string | null,\n logger: Logger,\n): { ok: boolean; error?: string } {\n // 尝试 ffmpeg(可自动检测格式,不依赖扩展名)\n try {\n const ffmpegResult = spawnSync(\"ffmpeg\", [\n \"-y\", \"-i\", inputPath,\n \"-ar\", \"16000\", \"-ac\", \"1\", \"-c:a\", \"pcm_s16le\",\n outputPath,\n ], {\n encoding: \"utf-8\",\n timeout: 120_000,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n\n if (ffmpegResult.status === 0 && existsSync(outputPath)) {\n logger.info(`[whisper-local] ffmpeg 转换完成: ${outputPath}`);\n return { ok: true };\n }\n } catch {\n // ffmpeg 不可用,继续尝试其他方式\n }\n\n // 2. opusdec — 专用于 OGG/Opus(ffmpeg 不可用时)\n if (actualFmt === \".ogg\") {\n try {\n const opusResult = spawnSync(\n \"opusdec\",\n [\"--rate\", \"16000\", \"--mono\", inputPath, outputPath],\n { encoding: \"utf-8\", timeout: 120_000, stdio: [\"pipe\", \"pipe\", \"pipe\"] },\n );\n if (opusResult.status === 0 && existsSync(outputPath)) {\n logger.info(`[whisper-local] opusdec 转换完成: ${outputPath}`);\n return { ok: true };\n }\n } catch { /* opusdec 不可用,继续 */ }\n }\n\n // 3. macOS afconvert — 支持 AIFF/M4A/AAC,不支持 OGG\n if (process.platform === \"darwin\" && actualFmt !== \".ogg\") {\n // afconvert 依赖扩展名判断输入格式,先确保扩展名正确\n let actualInputPath = inputPath;\n let tmpCopy: string | null = null;\n const detectedExt = actualFmt;\n\n if (detectedExt && !inputPath.endsWith(detectedExt)) {\n // 扩展名不匹配,创建带正确扩展名的临时副本\n tmpCopy = inputPath + \".detected\" + detectedExt;\n try {\n copyFileSync(inputPath, tmpCopy);\n actualInputPath = tmpCopy;\n logger.info(\n `[whisper-local] 检测到实际格式 ${detectedExt},临时重命名`,\n );\n } catch {\n tmpCopy = null;\n }\n }\n\n try {\n const afResult = spawnSync(\"afconvert\", [\n \"-f\", \"WAVE\", \"-d\", \"LEI16@16000\", \"-c\", \"1\",\n actualInputPath, outputPath,\n ], {\n encoding: \"utf-8\",\n timeout: 120_000,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n\n // 清理临时副本\n if (tmpCopy && existsSync(tmpCopy)) {\n try { unlinkSync(tmpCopy); } catch { /* ignore */ }\n }\n\n if (afResult.status === 0 && existsSync(outputPath)) {\n logger.info(`[whisper-local] afconvert 转换完成: ${outputPath}`);\n return { ok: true };\n }\n\n const stderr = afResult.stderr?.slice(0, 200) ?? \"\";\n return { ok: false, error: `afconvert 转换失败 (exit ${afResult.status}): ${stderr}` };\n } catch (err: any) {\n // 清理临时副本\n if (tmpCopy && existsSync(tmpCopy)) {\n try { unlinkSync(tmpCopy); } catch { /* ignore */ }\n }\n return { ok: false, error: `afconvert 不可用: ${err?.message}` };\n }\n }\n\n const fmtHint = actualFmt === \".ogg\"\n ? \"OGG/Opus 格式需要 ffmpeg 或 opus-tools(brew install opus-tools)\"\n : \"请安装 ffmpeg(brew install ffmpeg)或确保音频文件为 WAV 格式\";\n return { ok: false, error: `无法将音频转换为 WAV 格式。${fmtHint}` };\n}\n\n/** 清理临时 WAV 文件 */\nfunction cleanupTmpWav(path: string | null): void {\n if (path && existsSync(path)) {\n try { unlinkSync(path); } catch { /* ignore */ }\n }\n}\n\n/**\n * 构建 whisper.cpp CLI 参数\n */\nfunction buildWhisperArgs(params: {\n audioFilePath: string;\n modelPath: string;\n language: string;\n translate: boolean;\n threads: number;\n backend: WhisperBackend;\n}): string[] {\n const args: string[] = [\n \"--model\", params.modelPath,\n \"--file\", params.audioFilePath,\n \"--output-json\", // JSON 格式输出到 {audioFilePath}.json\n \"--no-prints\", // 抑制模型信息输出\n \"--threads\", String(params.threads),\n ];\n\n // 语言\n if (params.language && params.language !== \"auto\") {\n args.push(\"--language\", params.language);\n } else {\n args.push(\"--language\", \"auto\");\n }\n\n // 翻译为英文\n if (params.translate) {\n args.push(\"--translate\");\n }\n\n return args;\n}\n\n/**\n * 解析 whisper.cpp JSON 输出\n */\nfunction parseWhisperOutput(\n stdout: string,\n logger: Logger,\n): TranscriptionResult {\n if (!stdout || !stdout.trim()) {\n return { ok: false, error: \"whisper.cpp 无输出\" };\n }\n\n try {\n const data = JSON.parse(stdout.trim()) as WhisperCppJsonOutput;\n\n if (!data.transcription || !Array.isArray(data.transcription)) {\n // 可能是纯文本输出\n return {\n ok: true,\n text: stdout.trim(),\n segments: [],\n };\n }\n\n const segments: TranscriptSegment[] = [];\n const textParts: string[] = [];\n\n for (const item of data.transcription) {\n const text = item.text?.trim() ?? \"\";\n if (!text) continue;\n\n textParts.push(text);\n\n const startMs = item.offsets?.from ?? parseTimestamp(item.timestamps?.from);\n const endMs = item.offsets?.to ?? parseTimestamp(item.timestamps?.to);\n\n segments.push({\n start_ms: startMs,\n end_ms: endMs,\n text,\n });\n }\n\n const fullText = textParts.join(\" \");\n\n logger.info(\n `[whisper-local] 转写完成: ${fullText.length} 字, ${segments.length} 段`,\n );\n\n return {\n ok: true,\n text: fullText,\n segments,\n };\n } catch (err: any) {\n logger.warn(`[whisper-local] JSON 解析失败,尝试纯文本: ${err?.message}`);\n\n // Fallback: 将 stdout 视为纯文本\n return {\n ok: true,\n text: stdout.trim(),\n segments: [],\n };\n }\n}\n\n/**\n * 解析 whisper.cpp 时间戳字符串 \"HH:MM:SS,mmm\" → 毫秒\n */\nfunction parseTimestamp(ts?: string): number {\n if (!ts) return 0;\n // \"00:00:05,000\" or \"00:00:05.000\"\n const match = ts.match(/^(\\d+):(\\d+):(\\d+)[,.](\\d+)$/);\n if (!match) return 0;\n const [, h, m, s, ms] = match;\n return (\n parseInt(h, 10) * 3600000 +\n parseInt(m, 10) * 60000 +\n parseInt(s, 10) * 1000 +\n parseInt(ms, 10)\n );\n}\n\n/**\n * 格式化字节数\n */\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes}B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`;\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(2)}GB`;\n}\n",
96
- "/**\n * 录音同步处理器(§2 阶段 4–5)\n *\n * 统一处理 recordings.sync 请求:\n * 1. 元数据入库\n * 2. 从 OSS 下载音频 + 打点文件\n * 3. 更新状态 → synced\n * 4. 如已配置 ASR → 自动触发转写\n */\n\nimport type {\n RecordingMetadata,\n RecordingSyncResult,\n AsrConfig,\n RecordingTranscriptItem,\n RecordingTransferStatus,\n} from \"../types.js\";\nimport type { Logger } from \"../logger.js\";\nimport { RecordingStorage } from \"./storage.js\";\nimport { downloadRecordingFiles } from \"./downloader.js\";\nimport { isAsrConfigured, runTranscriptionWorkflow } from \"./asr.js\";\nimport { canStartTranscription } from \"./state-machine.js\";\n\nexport interface RecordingStatusEvent {\n recordingId: string;\n transfer_status: RecordingTransferStatus;\n audioFile?: string;\n srtFile?: string;\n transcriptDataFile?: string;\n transcriptFile?: string;\n summaryFile?: string;\n transcript?: RecordingTranscriptItem[];\n summary?: string;\n title: string;\n updatedAt: string;\n error?: string;\n}\n\nexport interface RecordingSyncOptions {\n notifyStatus?: (event: RecordingStatusEvent) => void;\n}\n\nfunction emitRecordingStatus(\n recordingId: string,\n storage: RecordingStorage,\n logger: Logger,\n notifyStatus?: RecordingSyncOptions[\"notifyStatus\"],\n error?: string,\n extras?: Pick<RecordingStatusEvent, \"transcript\" | \"summary\" | \"title\">,\n): void {\n if (!notifyStatus) {\n return;\n }\n\n const entry = storage.findById(recordingId);\n if (!entry) {\n return;\n }\n\n const title = extras?.title?.trim()\n || entry.title?.trim()\n || entry.metadata.name?.trim()\n || entry.id;\n const persistedError = entry.lastError?.trim() || undefined;\n\n try {\n notifyStatus({\n recordingId: entry.id,\n transfer_status: entry.status,\n audioFile: entry.audioFile,\n srtFile: entry.srtFile,\n transcriptDataFile: entry.transcriptDataFile,\n transcriptFile: entry.transcriptFile,\n transcript: extras?.transcript,\n summary: extras?.summary,\n title,\n updatedAt: entry.updatedAt,\n error: error ?? persistedError,\n });\n } catch (err: any) {\n logger.error(\n `[recording-status] 状态事件发送失败: ${recordingId}, ${err?.message ?? err}`,\n );\n }\n}\n\nasync function runRecordingSyncInBackground(\n metadata: RecordingMetadata,\n recordingId: string,\n storage: RecordingStorage,\n asrConfig: AsrConfig | undefined,\n logger: Logger,\n options: RecordingSyncOptions,\n): Promise<void> {\n const audioDestPath = storage.getAudioFilePath(\n recordingId,\n metadata.oss_audio_url,\n );\n const srtDestPath = storage.getSrtFilePath(recordingId);\n\n logger.info(\n `[recording-sync] 开始下载录音文件: ${recordingId}, audio=${metadata.oss_audio_url}`,\n );\n\n const downloadResult = await downloadRecordingFiles(\n metadata.oss_audio_url,\n metadata.oss_srt_url,\n audioDestPath,\n srtDestPath,\n logger,\n );\n\n if (!downloadResult.audio.ok) {\n const error = `音频下载失败: ${downloadResult.audio.error}`;\n logger.error(`[recording-sync] ${error}: ${recordingId}`);\n storage.updateStatus(recordingId, \"sync_failed\");\n storage.setLastError(recordingId, error);\n emitRecordingStatus(\n recordingId,\n storage,\n logger,\n options.notifyStatus,\n error,\n );\n return;\n }\n\n storage.setLastError(recordingId, undefined);\n storage.setAudioFile(\n recordingId,\n storage.buildAudioFilename(recordingId, metadata.oss_audio_url),\n );\n if (downloadResult.srt?.ok) {\n storage.setSrtFile(recordingId, storage.buildSrtFilename(recordingId));\n }\n\n const currentBeforeSynced = storage.findById(recordingId);\n if (\n currentBeforeSynced?.status === \"syncing_openclaw\"\n || currentBeforeSynced?.status === \"sync_failed\"\n ) {\n storage.updateStatus(recordingId, \"synced\");\n } else {\n logger.info(\n `[recording-sync] 录音已被其他通道更新,保留状态: ${recordingId}, status=${currentBeforeSynced?.status}`,\n );\n }\n logger.info(`[recording-sync] 录音已同步: ${recordingId}`);\n emitRecordingStatus(recordingId, storage, logger, options.notifyStatus);\n\n const currentAfterSynced = storage.findById(recordingId);\n if (isAsrConfigured(asrConfig) && canStartTranscription(currentAfterSynced?.status ?? \"synced\")) {\n await triggerTranscription(\n recordingId,\n storage,\n asrConfig!,\n logger,\n options,\n );\n }\n}\n\n/**\n * 处理 recordings.sync 请求的核心逻辑\n */\nexport async function handleRecordingSync(\n recordingId: string,\n metadata: RecordingMetadata,\n storage: RecordingStorage,\n asrConfig: AsrConfig | undefined,\n logger: Logger,\n options: RecordingSyncOptions = {},\n): Promise<RecordingSyncResult> {\n const existing = storage.findById(recordingId);\n const shouldDownloadAndSync =\n !existing\n || existing.metadata.oss_audio_url !== metadata.oss_audio_url\n || !existing.audioFile\n || existing.status === \"syncing_openclaw\"\n || existing.status === \"sync_failed\";\n\n storage.ingest(recordingId, metadata);\n if (shouldDownloadAndSync) {\n runRecordingSyncInBackground(\n metadata,\n recordingId,\n storage,\n asrConfig,\n logger,\n options,\n ).catch((err) => {\n const error = `录音同步失败: ${err?.message ?? err}`;\n logger.error(`[recording-sync] ${error}: ${recordingId}`);\n const current = storage.findById(recordingId);\n if (current?.status === \"syncing_openclaw\") {\n storage.updateStatus(recordingId, \"sync_failed\");\n }\n storage.setLastError(recordingId, error);\n emitRecordingStatus(\n recordingId,\n storage,\n logger,\n options.notifyStatus,\n error,\n );\n });\n } else {\n logger.info(\n `[recording-sync] 录音已存在且音频未变化,跳过重复下载: ${recordingId}`,\n );\n emitRecordingStatus(recordingId, storage, logger, options.notifyStatus);\n\n const current = storage.findById(recordingId);\n if (current?.status === \"synced\" && isAsrConfigured(asrConfig)) {\n triggerTranscription(\n recordingId,\n storage,\n asrConfig!,\n logger,\n options,\n ).catch((err) => {\n logger.error(\n `[asr-trigger] 转写触发失败: ${recordingId}, ${err?.message ?? err}`,\n );\n });\n }\n }\n\n const current = storage.findById(recordingId);\n return {\n ok: true,\n recordingId,\n transfer_status: current?.status ?? \"syncing_openclaw\",\n ...(current?.lastError ? { error: current.lastError } : {}),\n };\n}\n\n/**\n * 触发 ASR 转写(可从 sync handler 自动触发或手动重试调用)\n */\nexport async function triggerTranscription(\n recordingId: string,\n storage: RecordingStorage,\n asrConfig: AsrConfig,\n logger: Logger,\n options: RecordingSyncOptions = {},\n): Promise<void> {\n const entry = storage.findById(recordingId);\n if (!entry) {\n logger.warn(`[asr-trigger] 录音不存在: ${recordingId}`);\n return;\n }\n\n if (!canStartTranscription(entry.status)) {\n logger.warn(\n `[asr-trigger] 当前状态不允许转写: ${recordingId} (status=${entry.status})`,\n );\n return;\n }\n\n // 状态 → transcribing\n storage.updateStatus(recordingId, \"transcribing\");\n storage.setLastError(recordingId, undefined);\n emitRecordingStatus(recordingId, storage, logger, options.notifyStatus);\n\n const audioFilePath = storage.getAudioFilePath(recordingId);\n\n let result: Awaited<ReturnType<typeof runTranscriptionWorkflow>>;\n try {\n result = await runTranscriptionWorkflow({\n audioFilePath,\n audioOssUrl: entry.metadata.oss_audio_url,\n config: asrConfig,\n markers: entry.metadata.markers ?? [],\n recordingName: entry.metadata.name,\n durationSec: entry.metadata.duration_sec,\n createdAt: entry.metadata.created_at,\n transcriptDataDir: storage.getTranscriptDataDir(),\n transcriptsDir: storage.getTranscriptsDir(),\n summariesDir: storage.getSummariesDir(),\n recordingId,\n logger,\n });\n } catch (err: any) {\n const error = `转写任务异常: ${err?.message ?? err}`;\n logger.error(`[asr-trigger] ${error}: ${recordingId}`);\n result = { ok: false, error };\n }\n\n if (result.ok && result.transcriptFilename) {\n if (result.transcriptDataFilename) {\n storage.setTranscriptDataFile(recordingId, result.transcriptDataFilename);\n }\n storage.setTranscriptFile(recordingId, result.transcriptFilename);\n if (result.summaryFilename) {\n storage.setSummaryFile(recordingId, result.summaryFilename);\n }\n storage.setTitle(recordingId, result.title);\n storage.updateStatus(recordingId, \"transcribed\");\n emitRecordingStatus(\n recordingId,\n storage,\n logger,\n options.notifyStatus,\n undefined,\n {\n transcript: result.transcript ?? [],\n summary: result.summary,\n title: result.title ?? \"\",\n },\n );\n logger.info(\n `[asr-trigger] 转写完成: ${recordingId}, summary=\"${result.summary}\"`,\n );\n } else {\n const error = result.error ?? \"ASR 转写失败\";\n storage.updateStatus(recordingId, \"transcribe_failed\");\n storage.setLastError(recordingId, error);\n emitRecordingStatus(\n recordingId,\n storage,\n logger,\n options.notifyStatus,\n error,\n );\n logger.error(\n `[asr-trigger] 转写失败: ${recordingId}, error=${error}`,\n );\n }\n}\n",
97
- "import { writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { Logger } from \"../logger.js\";\nimport type {\n RecordingMetadata,\n RecordingResultSummary,\n RecordingResultTranscript,\n RecordingResultTranscriptSegment,\n RecordingResultWriteParams,\n RecordingResultWriteResult,\n RecordingTranscriptItem,\n} from \"../types.js\";\nimport type { RecordingStatusEvent } from \"./handler.js\";\nimport { downloadFile } from \"./downloader.js\";\nimport { RecordingStorage } from \"./storage.js\";\nimport {\n buildTranscriptDocument,\n extractSourceTextListFromDocument,\n type TranscriptDocumentSegment,\n} from \"./transcript-document.js\";\n\nexport interface RecordingResultWriteOptions {\n notifyStatus?: (event: RecordingStatusEvent) => void;\n}\n\nexport function handleRecordingResultWrite(\n params: RecordingResultWriteParams,\n storage: RecordingStorage,\n logger: Logger,\n options: RecordingResultWriteOptions = {},\n): RecordingResultWriteResult {\n const recordingId = normalizeRequiredText(params.recordingId, \"recordingId\");\n if (!params.transcript && !params.summary) {\n throw new Error(\"transcript or summary is required\");\n }\n\n // 找不到则按占位元数据新建,找得到则在其上覆盖(与 recordings.sync 的 upsert 逻辑一致)\n let entry = storage.findById(recordingId);\n if (!entry) {\n storage.ingest(recordingId, buildPlaceholderMetadata(recordingId, params));\n entry = storage.findById(recordingId);\n if (!entry) {\n throw new Error(`Recording not found: ${recordingId}`);\n }\n logger.info(`[recording-result] 录音不存在,已按结果写入新建: ${recordingId}`);\n }\n\n let transcript: RecordingTranscriptItem[] | undefined;\n let title = entry.title ?? entry.metadata.name ?? recordingId;\n let summaryText: string | undefined;\n\n if (params.transcript) {\n const written = writeTranscript(\n recordingId,\n entry.metadata,\n params.transcript,\n storage,\n logger,\n );\n transcript = written.transcript;\n title = written.title;\n }\n\n if (params.summary) {\n summaryText = writeSummary(recordingId, params.summary, storage, logger);\n }\n\n const updated = storage.markResultWritten(recordingId);\n emitResultStatus(recordingId, storage, logger, options.notifyStatus, {\n transcript,\n summary: summaryText ?? storage.readSummary(recordingId),\n title,\n });\n\n const ossUrl = normalizeText(params.ossUrl);\n if (ossUrl) {\n downloadAudioInBackground(recordingId, ossUrl, storage, logger, options);\n }\n\n return {\n ok: true,\n recordingId,\n transfer_status: updated.status,\n stored: {\n transcriptDataFile: updated.transcriptDataFile,\n transcriptFile: updated.transcriptFile,\n summaryFile: updated.summaryFile,\n },\n };\n}\n\n/**\n * result.write 找不到录音时,用请求里能拿到的信息拼一份占位元数据。\n * 缺失字段给安全默认值;后续 recordings.sync 会用真实元数据覆盖。\n */\nfunction buildPlaceholderMetadata(\n recordingId: string,\n params: RecordingResultWriteParams,\n): RecordingMetadata {\n return {\n name: normalizeText(params.transcript?.title) ?? recordingId,\n duration_sec: 0,\n file_size_bytes: 0,\n created_at: normalizeText(params.transcript?.generatedAt)\n ?? new Date().toISOString(),\n oss_audio_url: normalizeText(params.ossUrl) ?? \"\",\n markers: [],\n transfer_status: \"synced\",\n };\n}\n\nfunction writeTranscript(\n recordingId: string,\n recording: RecordingMetadata,\n transcript: RecordingResultTranscript,\n storage: RecordingStorage,\n logger: Logger,\n): { title: string; transcript: RecordingTranscriptItem[] } {\n const title = normalizeText(transcript.title)\n ?? normalizeText(recording.name)\n ?? recordingId;\n const segments = normalizeSegments(transcript.segments);\n const text = normalizePossiblyEmptyText(transcript.text)\n ?? joinSegmentTexts(segments)\n ?? normalizePossiblyEmptyText(transcript.markdown)\n ?? \"\";\n const transcriptDocument = buildTranscriptDocument({\n recordingId,\n generatedAt: normalizeText(transcript.generatedAt) ?? new Date().toISOString(),\n source: {\n provider: normalizeText(transcript.source?.provider) ?? \"app\",\n taskId: normalizeText(transcript.source?.taskId),\n requestId: normalizeText(transcript.source?.requestId),\n status: normalizeText(transcript.source?.status),\n delivery: \"result-write\",\n },\n title,\n category: normalizeText(transcript.category),\n summary: normalizePossiblyEmptyText(transcript.brief),\n text,\n segments,\n raw: transcript,\n });\n\n const transcriptDataFilename = storage.buildTranscriptDataFilename(recordingId);\n writeFileSync(\n storage.getTranscriptDataFilePath(recordingId),\n JSON.stringify(transcriptDocument, null, 2),\n \"utf-8\",\n );\n storage.setTranscriptDataFile(recordingId, transcriptDataFilename);\n\n const transcriptFilename = storage.buildTranscriptFilename(recordingId, title);\n const markdown = normalizePossiblyEmptyText(transcript.markdown)\n ?? buildTranscriptMarkdown(recording, title, text, segments);\n writeFileSync(\n join(storage.getTranscriptsDir(), transcriptFilename),\n ensureTrailingNewline(markdown),\n \"utf-8\",\n );\n storage.setTranscriptFile(recordingId, transcriptFilename);\n storage.setTitle(recordingId, title);\n logger.info(`[recording-result] 转录文本已写入: ${recordingId}`);\n\n return {\n title,\n transcript: extractSourceTextListFromDocument(transcriptDocument) ?? [],\n };\n}\n\nfunction writeSummary(\n recordingId: string,\n summary: RecordingResultSummary,\n storage: RecordingStorage,\n logger: Logger,\n): string | undefined {\n const markdown = normalizePossiblyEmptyText(summary.markdown)\n ?? buildStructuredSummaryMarkdown(summary.structured);\n if (markdown === undefined) {\n return undefined;\n }\n\n const summaryFilename = storage.buildSummaryFilename(recordingId);\n writeFileSync(\n storage.getSummaryFilePath(recordingId),\n ensureTrailingNewline(markdown),\n \"utf-8\",\n );\n storage.setSummaryFile(recordingId, summaryFilename);\n logger.info(`[recording-result] 总结已写入: ${recordingId}`);\n return markdown.trim();\n}\n\nfunction downloadAudioInBackground(\n recordingId: string,\n ossUrl: string,\n storage: RecordingStorage,\n logger: Logger,\n options: RecordingResultWriteOptions,\n): void {\n const audioDestPath = storage.getAudioFilePath(recordingId, ossUrl);\n\n logger.info(\n `[recording-result] 开始下载音频: ${recordingId}, audio=${ossUrl}`,\n );\n\n downloadFile(ossUrl, audioDestPath, logger).then((result) => {\n if (!result.ok) {\n const error = `音频下载失败: ${result.error}`;\n logger.error(`[recording-result] ${error}: ${recordingId}`);\n storage.setLastError(recordingId, error);\n emitDownloadStatus(recordingId, storage, logger, options.notifyStatus);\n return;\n }\n\n storage.setAudioFile(\n recordingId,\n storage.buildAudioFilename(recordingId, ossUrl),\n );\n logger.info(`[recording-result] 音频已更新: ${recordingId}`);\n emitDownloadStatus(recordingId, storage, logger, options.notifyStatus);\n }).catch((err) => {\n const error = `音频下载异常: ${err?.message ?? err}`;\n logger.error(`[recording-result] ${error}: ${recordingId}`);\n storage.setLastError(recordingId, error);\n emitDownloadStatus(recordingId, storage, logger, options.notifyStatus);\n });\n}\n\nfunction emitDownloadStatus(\n recordingId: string,\n storage: RecordingStorage,\n logger: Logger,\n notifyStatus: RecordingResultWriteOptions[\"notifyStatus\"],\n): void {\n const entry = storage.findById(recordingId);\n if (!entry) return;\n emitResultStatus(recordingId, storage, logger, notifyStatus, {\n summary: storage.readSummary(recordingId),\n title: entry.title ?? entry.metadata.name ?? recordingId,\n });\n}\n\nfunction emitResultStatus(\n recordingId: string,\n storage: RecordingStorage,\n logger: Logger,\n notifyStatus: RecordingResultWriteOptions[\"notifyStatus\"],\n extras: Pick<RecordingStatusEvent, \"transcript\" | \"summary\" | \"title\">,\n): void {\n if (!notifyStatus) return;\n const entry = storage.findById(recordingId);\n if (!entry) return;\n\n try {\n notifyStatus({\n recordingId: entry.id,\n transfer_status: entry.status,\n audioFile: entry.audioFile,\n srtFile: entry.srtFile,\n transcriptDataFile: entry.transcriptDataFile,\n transcriptFile: entry.transcriptFile,\n summaryFile: entry.summaryFile,\n transcript: extras.transcript,\n summary: extras.summary,\n title: extras.title,\n updatedAt: entry.updatedAt,\n error: entry.lastError,\n });\n } catch (err: any) {\n logger.error(\n `[recording-result] 状态事件发送失败: ${recordingId}, ${err?.message ?? err}`,\n );\n }\n}\n\nfunction normalizeSegments(\n segments: RecordingResultTranscriptSegment[] | undefined,\n): TranscriptDocumentSegment[] {\n if (!Array.isArray(segments)) return [];\n return segments.flatMap((segment) => {\n const text = normalizeText(segment.text);\n if (!text) return [];\n return [{\n text,\n startMs: typeof segment.startMs === \"number\" ? segment.startMs : undefined,\n endMs: typeof segment.endMs === \"number\" ? segment.endMs : undefined,\n speakerId: Number.isInteger(segment.speakerId) ? segment.speakerId : undefined,\n }];\n });\n}\n\nfunction joinSegmentTexts(\n segments: TranscriptDocumentSegment[],\n): string | undefined {\n const text = segments\n .map((segment) => segment.text)\n .filter(Boolean)\n .join(\"\\n\\n\")\n .trim();\n return text || undefined;\n}\n\nfunction buildTranscriptMarkdown(\n recording: RecordingMetadata,\n title: string,\n text: string,\n segments: TranscriptDocumentSegment[],\n): string {\n const lines: string[] = [];\n lines.push(`# ${title}`);\n lines.push(\"\");\n lines.push(`> 录音名称:${recording.name}`);\n lines.push(`> 时长:${formatDuration(recording.duration_sec)}`);\n lines.push(`> 创建时间:${recording.created_at}`);\n if ((recording.markers ?? []).length > 0) {\n lines.push(`> 关键点数:${recording.markers.length}`);\n }\n lines.push(\"\");\n lines.push(\"---\");\n lines.push(\"\");\n\n if (segments.length > 0) {\n for (const segment of segments) {\n const prefix = segment.startMs !== undefined\n ? `[${formatTimestamp(segment.startMs)}] `\n : \"\";\n lines.push(`${prefix}${segment.text}`.trim());\n lines.push(\"\");\n }\n } else {\n lines.push(text);\n lines.push(\"\");\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction buildStructuredSummaryMarkdown(structured: unknown): string | undefined {\n if (structured === undefined || structured === null) return undefined;\n if (typeof structured === \"string\") return structured;\n if (typeof structured !== \"object\") return String(structured);\n\n const record = structured as Record<string, unknown>;\n const lines: string[] = [\"# 总结\", \"\"];\n appendSection(lines, \"结论\", record.decisions);\n appendSection(lines, \"待办\", record.todos);\n appendSection(lines, \"风险\", record.risks);\n appendSection(lines, \"未决问题\", record.openQuestions);\n\n if (lines.length === 2) {\n lines.push(\"```json\");\n lines.push(JSON.stringify(structured, null, 2));\n lines.push(\"```\");\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction appendSection(lines: string[], title: string, value: unknown): void {\n if (!Array.isArray(value) || value.length === 0) return;\n lines.push(`## ${title}`);\n lines.push(\"\");\n for (const item of value) {\n lines.push(typeof item === \"string\" ? `- ${item}` : `- ${JSON.stringify(item)}`);\n }\n lines.push(\"\");\n}\n\nfunction normalizeRequiredText(value: unknown, field: string): string {\n const text = normalizeText(value);\n if (!text) {\n throw new Error(`${field} is required`);\n }\n return text;\n}\n\nfunction normalizeText(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim()\n ? value.trim()\n : undefined;\n}\n\nfunction normalizePossiblyEmptyText(value: unknown): string | undefined {\n return typeof value === \"string\"\n ? value.replace(/\\r\\n/g, \"\\n\")\n : undefined;\n}\n\nfunction ensureTrailingNewline(value: string): string {\n return value.endsWith(\"\\n\") ? value : `${value}\\n`;\n}\n\nfunction formatDuration(sec: number): string {\n const hours = Math.floor(sec / 3600);\n const minutes = Math.floor((sec % 3600) / 60);\n const seconds = Math.floor(sec % 60);\n if (hours > 0) {\n return `${hours}:${String(minutes).padStart(2, \"0\")}:${String(seconds).padStart(2, \"0\")}`;\n }\n return `${minutes}:${String(seconds).padStart(2, \"0\")}`;\n}\n\nfunction formatTimestamp(ms: number): string {\n const totalSec = Math.floor(ms / 1000);\n const minutes = Math.floor(totalSec / 60);\n const seconds = totalSec % 60;\n return `${String(minutes).padStart(2, \"0\")}:${String(seconds).padStart(2, \"0\")}`;\n}\n",
93
+ "/**\n * OSS 文件下载器(约束 R-6)\n *\n * 从 OSS URL 下载原始音频(mp3)和打点文件(srt)到本地。\n * 支持重试、超时控制、下载进度日志。\n */\n\nimport { createWriteStream, existsSync, mkdirSync, statSync, unlinkSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport { pipeline } from \"node:stream/promises\";\nimport { Readable } from \"node:stream\";\nimport type { Logger } from \"../logger.js\";\n\n// ─── Types ───\n\nexport interface DownloadOptions {\n /** 下载超时(毫秒),默认 5 分钟 */\n timeoutMs?: number;\n /** 最大重试次数,默认 3 */\n maxRetries?: number;\n /** 重试间隔基数(毫秒),默认 2000 */\n retryBackoffMs?: number;\n}\n\nexport interface DownloadResult {\n ok: boolean;\n /** 下载的文件大小(字节) */\n sizeBytes?: number;\n /** 耗时(毫秒) */\n elapsedMs?: number;\n /** 错误信息 */\n error?: string;\n}\n\nconst DEFAULT_TIMEOUT_MS = 5 * 60 * 1000; // 5 分钟(最大 ~56MB 文件)\nconst DEFAULT_MAX_RETRIES = 3;\nconst DEFAULT_RETRY_BACKOFF_MS = 2000;\n\n// ─── Public API ───\n\n/**\n * 从 URL 下载文件到本地路径\n */\nexport async function downloadFile(\n url: string,\n destPath: string,\n logger: Logger,\n options?: DownloadOptions,\n): Promise<DownloadResult> {\n const timeoutMs = options?.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n const maxRetries = options?.maxRetries ?? DEFAULT_MAX_RETRIES;\n const retryBackoffMs = options?.retryBackoffMs ?? DEFAULT_RETRY_BACKOFF_MS;\n\n mkdirSync(dirname(destPath), { recursive: true });\n\n let lastError: string | undefined;\n\n for (let attempt = 1; attempt <= maxRetries; attempt++) {\n const startMs = Date.now();\n try {\n logger.info(\n `[downloader] 开始下载 (attempt ${attempt}/${maxRetries}): ${url}`,\n );\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n\n try {\n const res = await fetch(url, { signal: controller.signal });\n\n if (!res.ok) {\n throw new Error(`HTTP ${res.status} ${res.statusText}`);\n }\n\n if (!res.body) {\n throw new Error(\"响应体为空\");\n }\n\n // 写入文件\n const writeStream = createWriteStream(destPath);\n const readable = Readable.fromWeb(res.body as any);\n await pipeline(readable, writeStream);\n\n const elapsed = Date.now() - startMs;\n const fileSize = existsSync(destPath)\n ? statSync(destPath).size\n : 0;\n\n logger.info(\n `[downloader] 下载完成: ${destPath} (${formatBytes(fileSize)}, ${elapsed}ms)`,\n );\n\n return { ok: true, sizeBytes: fileSize, elapsedMs: elapsed };\n } finally {\n clearTimeout(timer);\n }\n } catch (err: any) {\n lastError = err?.message ?? String(err);\n\n // 清理可能写了一半的文件\n try {\n if (existsSync(destPath)) unlinkSync(destPath);\n } catch {\n // ignore\n }\n\n const isAbort = err?.name === \"AbortError\";\n logger.warn(\n `[downloader] 下载失败 (attempt ${attempt}/${maxRetries}): ${isAbort ? \"超时\" : lastError}`,\n );\n\n if (attempt < maxRetries) {\n const delay = retryBackoffMs * Math.pow(2, attempt - 1);\n logger.info(`[downloader] ${delay}ms 后重试...`);\n await sleep(delay);\n }\n }\n }\n\n return { ok: false, error: lastError ?? \"下载失败\" };\n}\n\n// ─── Helpers ───\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes}B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n",
94
+ "import { writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { Logger } from \"../logger.js\";\nimport type {\n RecordingMetadata,\n RecordingResultSummary,\n RecordingResultTranscript,\n RecordingResultTranscriptSegment,\n RecordingResultWriteParams,\n RecordingResultWriteResult,\n RecordingStatusEvent,\n RecordingTranscriptItem,\n} from \"../types.js\";\nimport { downloadFile } from \"./downloader.js\";\nimport { RecordingStorage } from \"./storage.js\";\nimport {\n buildTranscriptDocument,\n extractSourceTextListFromDocument,\n type TranscriptDocumentSegment,\n} from \"./transcript-document.js\";\n\nexport interface RecordingResultWriteOptions {\n notifyStatus?: (event: RecordingStatusEvent) => void;\n}\n\nexport function handleRecordingResultWrite(\n params: RecordingResultWriteParams,\n storage: RecordingStorage,\n logger: Logger,\n options: RecordingResultWriteOptions = {},\n): RecordingResultWriteResult {\n const recordingId = normalizeRequiredText(params.recordingId, \"recordingId\");\n if (!params.transcript && !params.summary) {\n throw new Error(\"transcript or summary is required\");\n }\n\n // 找不到则按占位元数据新建,找得到则在其上覆盖(upsert)\n let entry = storage.findById(recordingId);\n if (!entry) {\n storage.ingest(recordingId, buildPlaceholderMetadata(recordingId, params));\n entry = storage.findById(recordingId);\n if (!entry) {\n throw new Error(`Recording not found: ${recordingId}`);\n }\n logger.info(`[recording-result] 录音不存在,已按结果写入新建: ${recordingId}`);\n }\n\n let transcript: RecordingTranscriptItem[] | undefined;\n let title = entry.title ?? entry.metadata.name ?? recordingId;\n let summaryText: string | undefined;\n\n if (params.transcript) {\n const written = writeTranscript(\n recordingId,\n entry.metadata,\n params.transcript,\n storage,\n logger,\n );\n transcript = written.transcript;\n title = written.title;\n }\n\n if (params.summary) {\n summaryText = writeSummary(recordingId, params.summary, storage, logger);\n }\n\n const updated = storage.markResultWritten(recordingId);\n emitResultStatus(recordingId, storage, logger, options.notifyStatus, {\n transcript,\n summary: summaryText ?? storage.readSummary(recordingId),\n title,\n });\n\n const ossUrl = normalizeText(params.ossUrl);\n if (ossUrl) {\n downloadAudioInBackground(recordingId, ossUrl, storage, logger, options);\n }\n\n return {\n ok: true,\n recordingId,\n transfer_status: updated.status,\n stored: {\n transcriptDataFile: updated.transcriptDataFile,\n transcriptFile: updated.transcriptFile,\n summaryFile: updated.summaryFile,\n },\n };\n}\n\n/**\n * result.write 找不到录音时,用请求里能拿到的信息拼一份占位元数据。\n * 缺失字段给安全默认值。\n */\nfunction buildPlaceholderMetadata(\n recordingId: string,\n params: RecordingResultWriteParams,\n): RecordingMetadata {\n return {\n name: normalizeText(params.transcript?.title) ?? recordingId,\n duration_sec: 0,\n file_size_bytes: 0,\n created_at: normalizeText(params.transcript?.generatedAt)\n ?? new Date().toISOString(),\n oss_audio_url: normalizeText(params.ossUrl) ?? \"\",\n markers: [],\n transfer_status: \"synced\",\n };\n}\n\nfunction writeTranscript(\n recordingId: string,\n recording: RecordingMetadata,\n transcript: RecordingResultTranscript,\n storage: RecordingStorage,\n logger: Logger,\n): { title: string; transcript: RecordingTranscriptItem[] } {\n const title = normalizeText(transcript.title)\n ?? normalizeText(recording.name)\n ?? recordingId;\n const segments = normalizeSegments(transcript.segments);\n const text = normalizePossiblyEmptyText(transcript.text)\n ?? joinSegmentTexts(segments)\n ?? normalizePossiblyEmptyText(transcript.markdown)\n ?? \"\";\n const transcriptDocument = buildTranscriptDocument({\n recordingId,\n generatedAt: normalizeText(transcript.generatedAt) ?? new Date().toISOString(),\n source: {\n provider: normalizeText(transcript.source?.provider) ?? \"app\",\n taskId: normalizeText(transcript.source?.taskId),\n requestId: normalizeText(transcript.source?.requestId),\n status: normalizeText(transcript.source?.status),\n delivery: \"result-write\",\n },\n title,\n category: normalizeText(transcript.category),\n summary: normalizePossiblyEmptyText(transcript.brief),\n text,\n segments,\n raw: transcript,\n });\n\n const transcriptDataFilename = storage.buildTranscriptDataFilename(recordingId);\n writeFileSync(\n storage.getTranscriptDataFilePath(recordingId),\n JSON.stringify(transcriptDocument, null, 2),\n \"utf-8\",\n );\n storage.setTranscriptDataFile(recordingId, transcriptDataFilename);\n\n const transcriptFilename = storage.buildTranscriptFilename(recordingId, title);\n const markdown = normalizePossiblyEmptyText(transcript.markdown)\n ?? buildTranscriptMarkdown(recording, title, text, segments);\n writeFileSync(\n join(storage.getTranscriptsDir(), transcriptFilename),\n ensureTrailingNewline(markdown),\n \"utf-8\",\n );\n storage.setTranscriptFile(recordingId, transcriptFilename);\n storage.setTitle(recordingId, title);\n logger.info(`[recording-result] 转录文本已写入: ${recordingId}`);\n\n return {\n title,\n transcript: extractSourceTextListFromDocument(transcriptDocument) ?? [],\n };\n}\n\nfunction writeSummary(\n recordingId: string,\n summary: RecordingResultSummary,\n storage: RecordingStorage,\n logger: Logger,\n): string | undefined {\n const markdown = normalizePossiblyEmptyText(summary.markdown)\n ?? buildStructuredSummaryMarkdown(summary.structured);\n if (markdown === undefined) {\n return undefined;\n }\n\n const summaryFilename = storage.buildSummaryFilename(recordingId);\n writeFileSync(\n storage.getSummaryFilePath(recordingId),\n ensureTrailingNewline(markdown),\n \"utf-8\",\n );\n storage.setSummaryFile(recordingId, summaryFilename);\n logger.info(`[recording-result] 总结已写入: ${recordingId}`);\n return markdown.trim();\n}\n\nfunction downloadAudioInBackground(\n recordingId: string,\n ossUrl: string,\n storage: RecordingStorage,\n logger: Logger,\n options: RecordingResultWriteOptions,\n): void {\n const audioDestPath = storage.getAudioFilePath(recordingId, ossUrl);\n\n logger.info(\n `[recording-result] 开始下载音频: ${recordingId}, audio=${ossUrl}`,\n );\n\n downloadFile(ossUrl, audioDestPath, logger).then((result) => {\n if (!result.ok) {\n const error = `音频下载失败: ${result.error}`;\n logger.error(`[recording-result] ${error}: ${recordingId}`);\n storage.setLastError(recordingId, error);\n emitDownloadStatus(recordingId, storage, logger, options.notifyStatus);\n return;\n }\n\n storage.setAudioFile(\n recordingId,\n storage.buildAudioFilename(recordingId, ossUrl),\n );\n logger.info(`[recording-result] 音频已更新: ${recordingId}`);\n emitDownloadStatus(recordingId, storage, logger, options.notifyStatus);\n }).catch((err) => {\n const error = `音频下载异常: ${err?.message ?? err}`;\n logger.error(`[recording-result] ${error}: ${recordingId}`);\n storage.setLastError(recordingId, error);\n emitDownloadStatus(recordingId, storage, logger, options.notifyStatus);\n });\n}\n\nfunction emitDownloadStatus(\n recordingId: string,\n storage: RecordingStorage,\n logger: Logger,\n notifyStatus: RecordingResultWriteOptions[\"notifyStatus\"],\n): void {\n const entry = storage.findById(recordingId);\n if (!entry) return;\n emitResultStatus(recordingId, storage, logger, notifyStatus, {\n summary: storage.readSummary(recordingId),\n title: entry.title ?? entry.metadata.name ?? recordingId,\n });\n}\n\nfunction emitResultStatus(\n recordingId: string,\n storage: RecordingStorage,\n logger: Logger,\n notifyStatus: RecordingResultWriteOptions[\"notifyStatus\"],\n extras: Pick<RecordingStatusEvent, \"transcript\" | \"summary\" | \"title\">,\n): void {\n if (!notifyStatus) return;\n const entry = storage.findById(recordingId);\n if (!entry) return;\n\n try {\n notifyStatus({\n recordingId: entry.id,\n transfer_status: entry.status,\n audioFile: entry.audioFile,\n srtFile: entry.srtFile,\n transcriptDataFile: entry.transcriptDataFile,\n transcriptFile: entry.transcriptFile,\n summaryFile: entry.summaryFile,\n transcript: extras.transcript,\n summary: extras.summary,\n title: extras.title,\n updatedAt: entry.updatedAt,\n error: entry.lastError,\n });\n } catch (err: any) {\n logger.error(\n `[recording-result] 状态事件发送失败: ${recordingId}, ${err?.message ?? err}`,\n );\n }\n}\n\nfunction normalizeSegments(\n segments: RecordingResultTranscriptSegment[] | undefined,\n): TranscriptDocumentSegment[] {\n if (!Array.isArray(segments)) return [];\n return segments.flatMap((segment) => {\n const text = normalizeText(segment.text);\n if (!text) return [];\n return [{\n text,\n startMs: typeof segment.startMs === \"number\" ? segment.startMs : undefined,\n endMs: typeof segment.endMs === \"number\" ? segment.endMs : undefined,\n speakerId: Number.isInteger(segment.speakerId) ? segment.speakerId : undefined,\n }];\n });\n}\n\nfunction joinSegmentTexts(\n segments: TranscriptDocumentSegment[],\n): string | undefined {\n const text = segments\n .map((segment) => segment.text)\n .filter(Boolean)\n .join(\"\\n\\n\")\n .trim();\n return text || undefined;\n}\n\nfunction buildTranscriptMarkdown(\n recording: RecordingMetadata,\n title: string,\n text: string,\n segments: TranscriptDocumentSegment[],\n): string {\n const lines: string[] = [];\n lines.push(`# ${title}`);\n lines.push(\"\");\n lines.push(`> 录音名称:${recording.name}`);\n lines.push(`> 时长:${formatDuration(recording.duration_sec)}`);\n lines.push(`> 创建时间:${recording.created_at}`);\n if ((recording.markers ?? []).length > 0) {\n lines.push(`> 关键点数:${recording.markers.length}`);\n }\n lines.push(\"\");\n lines.push(\"---\");\n lines.push(\"\");\n\n if (segments.length > 0) {\n for (const segment of segments) {\n const prefix = segment.startMs !== undefined\n ? `[${formatTimestamp(segment.startMs)}] `\n : \"\";\n lines.push(`${prefix}${segment.text}`.trim());\n lines.push(\"\");\n }\n } else {\n lines.push(text);\n lines.push(\"\");\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction buildStructuredSummaryMarkdown(structured: unknown): string | undefined {\n if (structured === undefined || structured === null) return undefined;\n if (typeof structured === \"string\") return structured;\n if (typeof structured !== \"object\") return String(structured);\n\n const record = structured as Record<string, unknown>;\n const lines: string[] = [\"# 总结\", \"\"];\n appendSection(lines, \"结论\", record.decisions);\n appendSection(lines, \"待办\", record.todos);\n appendSection(lines, \"风险\", record.risks);\n appendSection(lines, \"未决问题\", record.openQuestions);\n\n if (lines.length === 2) {\n lines.push(\"```json\");\n lines.push(JSON.stringify(structured, null, 2));\n lines.push(\"```\");\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction appendSection(lines: string[], title: string, value: unknown): void {\n if (!Array.isArray(value) || value.length === 0) return;\n lines.push(`## ${title}`);\n lines.push(\"\");\n for (const item of value) {\n lines.push(typeof item === \"string\" ? `- ${item}` : `- ${JSON.stringify(item)}`);\n }\n lines.push(\"\");\n}\n\nfunction normalizeRequiredText(value: unknown, field: string): string {\n const text = normalizeText(value);\n if (!text) {\n throw new Error(`${field} is required`);\n }\n return text;\n}\n\nfunction normalizeText(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim()\n ? value.trim()\n : undefined;\n}\n\nfunction normalizePossiblyEmptyText(value: unknown): string | undefined {\n return typeof value === \"string\"\n ? value.replace(/\\r\\n/g, \"\\n\")\n : undefined;\n}\n\nfunction ensureTrailingNewline(value: string): string {\n return value.endsWith(\"\\n\") ? value : `${value}\\n`;\n}\n\nfunction formatDuration(sec: number): string {\n const hours = Math.floor(sec / 3600);\n const minutes = Math.floor((sec % 3600) / 60);\n const seconds = Math.floor(sec % 60);\n if (hours > 0) {\n return `${hours}:${String(minutes).padStart(2, \"0\")}:${String(seconds).padStart(2, \"0\")}`;\n }\n return `${minutes}:${String(seconds).padStart(2, \"0\")}`;\n}\n\nfunction formatTimestamp(ms: number): string {\n const totalSec = Math.floor(ms / 1000);\n const minutes = Math.floor(totalSec / 60);\n const seconds = totalSec % 60;\n return `${String(minutes).padStart(2, \"0\")}:${String(seconds).padStart(2, \"0\")}`;\n}\n",
98
95
  "/**\n * 图片本地存储管理\n *\n * 目录结构:\n * <storageDir>/images/\n * ├── files/ # 下载的原图\n * │ └── <imageId>.jpg\n * └── index.json # 元数据索引({ images: [] })\n *\n * 字段与 CLI(YoooClaw/cli internal/image)严格对齐,三端共享同一份 index.json。\n */\n\nimport {\n existsSync,\n mkdirSync,\n readFileSync,\n writeFileSync,\n rmSync,\n} from \"node:fs\";\nimport { join, isAbsolute } from \"node:path\";\nimport type { ImageMetadata, ImageTransferStatus } from \"../types.js\";\nimport type { Logger } from \"../logger.js\";\nimport { currentClientLabel } from \"../ingest-context.js\";\n\n// ─── Types ───\n\n/** 持久化到 index.json 的单条图片记录 */\nexport interface ImageIndexEntry {\n /** 图片 ID(客户端下发) */\n imageId: string;\n /** 来源客户端 label;旧数据无该字段,查询时视为 legacy */\n clientLabel?: string;\n /** 原始元数据 */\n metadata: ImageMetadata;\n /** 本地文件相对路径(如 \"files/<id>.jpg\") */\n localFile?: string;\n /** 缩略图相对路径(阶段一不下载,仅透传保留字段对齐) */\n thumbnail?: string;\n /** 当前同步状态 */\n status: ImageTransferStatus;\n /** 最近一次失败原因 */\n lastError?: string;\n /** 下载完成时间 ISO 8601 */\n syncedAt?: string;\n}\n\n/** 图片存储索引(整个 index.json) */\ninterface ImageIndex {\n images: ImageIndexEntry[];\n}\n\nexport interface ImageStorageContext {\n stateDir: string;\n workspaceDir?: string;\n}\n\n// ─── Constants ───\n\nconst IMAGES_DIR = \"images\";\nconst FILES_DIR = \"files\";\nconst INDEX_FILE = \"index.json\";\n\n/** 从 MIME 推断扩展名(与 CLI extFromMime 对齐),未知时回退 jpg */\nexport function extFromMime(mime?: string): string {\n const m = (mime ?? \"\").toLowerCase();\n if (m.includes(\"png\")) return \"png\";\n if (m.includes(\"webp\")) return \"webp\";\n if (m.includes(\"gif\")) return \"gif\";\n return \"jpg\";\n}\n\n/**\n * 解析图片存储根目录(与录音同级,优先 stateDir,回退 workspace)\n */\nexport function resolveImageStorageDir(\n ctx: ImageStorageContext,\n logger: Pick<Logger, \"info\" | \"warn\">,\n): string {\n const stateImagesDir = join(\n ctx.stateDir,\n \"plugins\",\n \"phone-notifications\",\n IMAGES_DIR,\n );\n\n try {\n mkdirSync(stateImagesDir, { recursive: true });\n logger.info(`图片将写入 stateDir 路径: ${stateImagesDir}`);\n return stateImagesDir;\n } catch {\n // fallback\n }\n\n if (ctx.workspaceDir) {\n const wsImagesDir = join(ctx.workspaceDir, IMAGES_DIR);\n try {\n mkdirSync(wsImagesDir, { recursive: true });\n logger.warn(`stateDir 不可用,图片已回退到 workspace 路径: ${wsImagesDir}`);\n return wsImagesDir;\n } catch {\n // fallthrough\n }\n }\n\n throw new Error(`图片存储目录不可用: ${stateImagesDir}`);\n}\n\n// ─── ImageStorage Class ───\n\nexport class ImageStorage {\n private readonly dir: string;\n private readonly filesDir: string;\n private readonly indexPath: string;\n private index: ImageIndex = { images: [] };\n\n constructor(\n dir: string,\n private readonly logger: Logger,\n ) {\n this.dir = dir;\n this.filesDir = join(dir, FILES_DIR);\n this.indexPath = join(dir, INDEX_FILE);\n }\n\n /** 初始化目录结构并加载索引 */\n async init(): Promise<void> {\n mkdirSync(this.filesDir, { recursive: true });\n this.loadIndex();\n this.logger.info(\n `图片存储已初始化: ${this.dir}(共 ${this.index.images.length} 条记录)`,\n );\n }\n\n getFilesDir(): string {\n return this.filesDir;\n }\n\n // ─── 入库 ───\n\n /**\n * 收到 images.sync 后,将元数据写入索引并置为 syncing。\n * 同 ID 已存在则覆盖元数据并重置同步状态。\n */\n ingest(imageId: string, metadata: ImageMetadata): ImageIndexEntry {\n const clientLabel = currentClientLabel(\"default\");\n const existing = this.findById(imageId);\n\n if (existing) {\n // 复用已下载文件:同 URL 且已 synced 时保留本地文件与状态\n if (\n existing.metadata.oss_image_url === metadata.oss_image_url &&\n existing.status === \"synced\" &&\n existing.localFile\n ) {\n existing.metadata = metadata;\n existing.clientLabel = clientLabel;\n this.saveIndex();\n return existing;\n }\n\n if (existing.localFile) {\n rmSync(join(this.dir, existing.localFile), { force: true });\n }\n existing.metadata = metadata;\n existing.clientLabel = clientLabel;\n existing.status = \"syncing\";\n existing.localFile = undefined;\n existing.lastError = undefined;\n existing.syncedAt = undefined;\n this.saveIndex();\n this.logger.info(`图片元数据已更新: ${imageId}`);\n return existing;\n }\n\n const entry: ImageIndexEntry = {\n imageId,\n clientLabel,\n metadata,\n status: \"syncing\",\n };\n this.index.images.push(entry);\n this.saveIndex();\n this.logger.info(`图片元数据已入库: ${imageId}`);\n return entry;\n }\n\n // ─── 状态管理 ───\n\n /** 标记下载完成 */\n setSynced(imageId: string, localFile: string): void {\n const entry = this.findById(imageId);\n if (!entry) return;\n entry.localFile = localFile;\n entry.status = \"synced\";\n entry.lastError = undefined;\n entry.syncedAt = new Date().toISOString();\n this.saveIndex();\n }\n\n /** 标记下载失败 */\n setSyncFailed(imageId: string, error: string): void {\n const entry = this.findById(imageId);\n if (!entry) return;\n entry.status = \"sync_failed\";\n entry.lastError = error.trim() || \"下载失败\";\n entry.localFile = undefined;\n this.saveIndex();\n }\n\n // ─── Helpers ───\n\n /** 生成本地文件名 <imageId>.<ext> */\n buildFilename(imageId: string, mime?: string): string {\n return `${imageId}.${extFromMime(mime)}`;\n }\n\n /** 本地文件相对路径(用于写入 localFile 字段) */\n buildRelativeFilePath(imageId: string, mime?: string): string {\n return `${FILES_DIR}/${this.buildFilename(imageId, mime)}`;\n }\n\n /** 本地文件绝对路径 */\n getFilePath(imageId: string, mime?: string): string {\n return join(this.filesDir, this.buildFilename(imageId, mime));\n }\n\n /** 把索引中的相对路径解析为绝对路径 */\n resolveFile(relative: string): string {\n return isAbsolute(relative) ? relative : join(this.dir, relative);\n }\n\n // ─── 查询 ───\n\n findById(id: string): ImageIndexEntry | undefined {\n return this.index.images.find((e) => e.imageId === id);\n }\n\n listAll(): ImageIndexEntry[] {\n return [...this.index.images].sort((a, b) =>\n b.metadata.created_at.localeCompare(a.metadata.created_at),\n );\n }\n\n // ─── 索引 IO ───\n\n private loadIndex(): void {\n if (!existsSync(this.indexPath)) {\n this.index = { images: [] };\n return;\n }\n try {\n const raw = JSON.parse(readFileSync(this.indexPath, \"utf-8\"));\n this.index =\n raw && Array.isArray(raw.images) ? { images: raw.images } : { images: [] };\n } catch {\n this.logger.warn(`图片索引文件损坏,已重建: ${this.indexPath}`);\n this.index = { images: [] };\n }\n }\n\n private saveIndex(): void {\n writeFileSync(this.indexPath, JSON.stringify(this.index, null, 2), \"utf-8\");\n }\n\n async close(): Promise<void> {\n // 当前无需额外清理\n }\n}\n",
99
96
  "/**\n * 图片同步处理器\n *\n * 处理 images.sync / POST /images:\n * 1. 校验 + 去重\n * 2. 元数据入库(status=syncing)\n * 3. 后台从 OSS 下载原图(带大小上限)\n * 4. 更新状态 → synced / sync_failed\n */\n\nimport { createWriteStream, existsSync, mkdirSync, unlinkSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport type { ImageMetadata, ImageSyncResult } from \"../types.js\";\nimport type { Logger } from \"../logger.js\";\nimport { ImageStorage } from \"./store.js\";\n\n/** 默认单张图片大小上限:20MB(与 CLI 对齐) */\nexport const DEFAULT_IMAGE_MAX_BYTES = 20 * 1024 * 1024;\n\n/** 下载超时:5 分钟 */\nconst DOWNLOAD_TIMEOUT_MS = 5 * 60 * 1000;\n\n/**\n * 处理 images.sync 的核心逻辑。元数据同步落库,下载在后台进行。\n */\nexport function handleImageSync(\n imageId: string,\n metadata: ImageMetadata,\n storage: ImageStorage,\n maxBytes: number,\n logger: Logger,\n): ImageSyncResult {\n const cap = maxBytes > 0 ? maxBytes : DEFAULT_IMAGE_MAX_BYTES;\n\n // 去重:同 id + 同 url 已 synced 直接返回\n const existing = storage.findById(imageId);\n if (\n existing &&\n existing.status === \"synced\" &&\n existing.localFile &&\n existing.metadata.oss_image_url === metadata.oss_image_url\n ) {\n storage.ingest(imageId, metadata); // 仅刷新元数据,保留文件与状态\n return { ok: true, imageId, status: \"synced\", deduped: true };\n }\n\n storage.ingest(imageId, metadata);\n\n runImageDownloadInBackground(imageId, metadata, storage, cap, logger).catch(\n (err) => {\n const error = `图片同步失败: ${err?.message ?? err}`;\n logger.error(`[image-sync] ${error}: ${imageId}`);\n storage.setSyncFailed(imageId, error);\n },\n );\n\n return { ok: true, imageId, status: \"syncing\" };\n}\n\nasync function runImageDownloadInBackground(\n imageId: string,\n metadata: ImageMetadata,\n storage: ImageStorage,\n maxBytes: number,\n logger: Logger,\n): Promise<void> {\n const destPath = storage.getFilePath(imageId, metadata.mime_type);\n const relativePath = storage.buildRelativeFilePath(imageId, metadata.mime_type);\n\n logger.info(\n `[image-sync] 开始下载图片: ${imageId}, url=${metadata.oss_image_url}`,\n );\n\n const result = await downloadImage(\n metadata.oss_image_url,\n destPath,\n maxBytes,\n logger,\n );\n\n if (!result.ok) {\n const error = `图片下载失败: ${result.error}`;\n logger.error(`[image-sync] ${error}: ${imageId}`);\n storage.setSyncFailed(imageId, error);\n return;\n }\n\n storage.setSynced(imageId, relativePath);\n logger.info(`[image-sync] 图片已同步: ${imageId} (${result.sizeBytes} bytes)`);\n}\n\ninterface ImageDownloadResult {\n ok: boolean;\n sizeBytes?: number;\n error?: string;\n}\n\n/**\n * 下载图片到本地,超过 maxBytes 即中止并清理半成品。\n */\nasync function downloadImage(\n url: string,\n destPath: string,\n maxBytes: number,\n logger: Logger,\n): Promise<ImageDownloadResult> {\n mkdirSync(dirname(destPath), { recursive: true });\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), DOWNLOAD_TIMEOUT_MS);\n\n const cleanup = () => {\n try {\n if (existsSync(destPath)) unlinkSync(destPath);\n } catch {\n // ignore\n }\n };\n\n try {\n const res = await fetch(url, { signal: controller.signal });\n if (!res.ok) {\n return { ok: false, error: `HTTP ${res.status} ${res.statusText}` };\n }\n if (!res.body) {\n return { ok: false, error: \"响应体为空\" };\n }\n\n const contentLength = Number(res.headers.get(\"content-length\") ?? \"0\");\n if (contentLength > 0 && contentLength > maxBytes) {\n return { ok: false, error: `图片超过上限 ${maxBytes} 字节` };\n }\n\n const writeStream = createWriteStream(destPath);\n let total = 0;\n try {\n for await (const chunk of res.body as any) {\n total += chunk.length;\n if (total > maxBytes) {\n writeStream.destroy();\n cleanup();\n return { ok: false, error: `图片超过上限 ${maxBytes} 字节` };\n }\n if (!writeStream.write(chunk)) {\n await new Promise<void>((resolve) =>\n writeStream.once(\"drain\", resolve),\n );\n }\n }\n await new Promise<void>((resolve, reject) => {\n writeStream.end((err?: Error | null) =>\n err ? reject(err) : resolve(),\n );\n });\n } catch (err: any) {\n writeStream.destroy();\n cleanup();\n throw err;\n }\n\n return { ok: true, sizeBytes: total };\n } catch (err: any) {\n cleanup();\n const isAbort = err?.name === \"AbortError\";\n const message = isAbort ? \"下载超时\" : err?.message ?? String(err);\n logger.warn(`[image-sync] 下载异常: ${message}`);\n return { ok: false, error: message };\n } finally {\n clearTimeout(timer);\n }\n}\n",
100
97
  "import {\n closeSync,\n mkdirSync,\n openSync,\n readFileSync,\n unlinkSync,\n writeFileSync,\n} from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { RelayClient } from \"./relay-client.js\";\nimport type { AuthProvider } from \"../profile/types.js\";\nimport { credentialsPath } from \"../auth/credentials.js\";\nimport { resolveHostStateDir, resolveStateDir } from \"../host.js\";\nimport { TunnelProxy } from \"./proxy.js\";\nimport { createConnectStatusReporter } from \"./connect-status-reporter.js\";\nimport type { UpdateInfo } from \"../update/types.js\";\nimport { redactUrlSecrets } from \"./utils.js\";\n\nconst DEFAULT_HEARTBEAT_SEC = 10;\nconst DEFAULT_RECONNECT_BACKOFF_MS = 2000;\nconst AUTH_CHANGE_DEBOUNCE_MS = 500;\n/** 锁心跳刷新倍数:持锁者每 heartbeatSec 刷新一次锁文件 updatedAt。 */\nconst LOCK_REFRESH_HEARTBEAT_MULTIPLIER = 1;\n/**\n * 锁失效倍数:updatedAt 超过 heartbeatSec × 该倍数未刷新即视为僵死锁,可被抢占。\n * 取较宽松的倍数(默认 60s),避免误抢健康持锁者。\n */\nconst LOCK_STALE_HEARTBEAT_MULTIPLIER = 6;\n\ninterface TunnelServiceOptions {\n /** Relay Server WebSocket 地址(构建时从 RELAY_TUNNEL_URL 注入) */\n tunnelUrl: string;\n /** 认证 Provider:提供 ensureProvisioned 门 + relay 连接凭据。 */\n authProvider: AuthProvider;\n gatewayBaseUrl: string;\n /** Gateway 鉴权模式 */\n gatewayAuthMode?: \"token\" | \"password\";\n /** Gateway 鉴权 token */\n gatewayToken?: string;\n /** Gateway 鉴权密码 */\n gatewayPassword?: string;\n /** 心跳间隔(秒),默认 10 */\n heartbeatSec?: number;\n /** 重连基础退避时间(毫秒),默认 2000 */\n reconnectBackoffMs?: number;\n logger: {\n info: (msg: string) => void;\n warn: (msg: string) => void;\n error: (msg: string) => void;\n };\n}\n\nexport interface RelayTunnelService {\n id: string;\n start(ctx: { stateDir: string }): Promise<void>;\n stop(): Promise<void>;\n emitEvent(event: string, payload: unknown): boolean;\n notifyUpdateAvailable(update: UpdateInfo): void;\n clearPendingUpdate(): void;\n deactivateForExternalTunnel(reason: string): Promise<void>;\n}\n\n/** 生成僵死锁的可读原因,用于日志。 */\nfunction describeStaleLock(\n ownerPid: number | null,\n updatedAt: number | null,\n staleMs: number,\n): string {\n const pidLabel = `pid=${ownerPid ?? \"?\"}`;\n if (ownerPid !== null && !isProcessAliveByPid(ownerPid)) {\n return `dead ${pidLabel}`;\n }\n if (updatedAt === null) {\n return `${pidLabel}, missing heartbeat`;\n }\n return `${pidLabel}, heartbeat stale ${Date.now() - updatedAt}ms > ${staleMs}ms`;\n}\n\n/** 判断指定 pid 是否存活(模块级,供锁逻辑复用)。 */\nfunction isProcessAliveByPid(pid: number): boolean {\n if (!Number.isInteger(pid) || pid <= 0) return false;\n if (pid === process.pid) return true;\n try {\n process.kill(pid, 0);\n return true;\n } catch (err: any) {\n return err?.code === \"EPERM\";\n }\n}\n\n/**\n * 隧道服务:组装 RelayClient + TunnelProxy,作为 registerService 的入口。\n */\nexport function createTunnelService(\n opts: TunnelServiceOptions,\n): RelayTunnelService {\n let client: RelayClient | null = null;\n let proxy: TunnelProxy | null = null;\n let abortController: AbortController | null = null;\n let provisionAbortController: AbortController | null = null;\n let lockFilePath: string | null = null;\n let lockFd: number | null = null;\n let lockStartedAt: string | null = null;\n let lockRefreshTimer: ReturnType<typeof setInterval> | null = null;\n let pendingPluginUpdate: UpdateInfo | null = null;\n let suppressedByExternalTunnel = false;\n let serviceStopped = true;\n let lastStartCtx: { stateDir: string } | null = null;\n let unwatchAuth: (() => void) | null = null;\n let authRefreshTimer: ReturnType<typeof setTimeout> | null = null;\n let authRefreshPromise: Promise<void> | null = null;\n let pendingAuthRefreshReason: string | null = null;\n\n function emitRelayEvent(event: string, payload: unknown): boolean {\n if (!client?.isConnected()) return false;\n const frame = JSON.stringify({\n type: \"event\",\n event,\n payload,\n });\n client.sendRaw(frame);\n return true;\n }\n\n function emitPendingPluginUpdate(reason: string): void {\n const update = pendingPluginUpdate;\n if (!update) return;\n\n const payload = {\n pluginId: \"phone-notifications\",\n pluginName: \"消息通知\",\n current: update.current,\n latest: update.latest,\n };\n if (!emitRelayEvent(\"plugin.updateAvailable\", payload)) return;\n\n opts.logger.info(\n `Relay tunnel: sending plugin.updateAvailable ${update.current} → ${update.latest} (${reason})`,\n );\n }\n\n function readLockInfo(filePath: string): {\n pid: number | null;\n updatedAt: number | null;\n } {\n try {\n const parsed = JSON.parse(readFileSync(filePath, \"utf-8\")) as {\n pid?: unknown;\n updatedAt?: unknown;\n };\n const pid = typeof parsed.pid === \"number\" ? parsed.pid : null;\n const updatedAtMs =\n typeof parsed.updatedAt === \"string\"\n ? Date.parse(parsed.updatedAt)\n : Number.NaN;\n return {\n pid,\n updatedAt: Number.isFinite(updatedAtMs) ? updatedAtMs : null,\n };\n } catch {\n return { pid: null, updatedAt: null };\n }\n }\n\n function buildLockPayload(): string {\n return (\n JSON.stringify({\n pid: process.pid,\n startedAt: lockStartedAt ?? new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n tunnelUrl: redactUrlSecrets(opts.tunnelUrl),\n }) + \"\\n\"\n );\n }\n\n function stopLockRefresh(): void {\n if (lockRefreshTimer) {\n clearInterval(lockRefreshTimer);\n lockRefreshTimer = null;\n }\n }\n\n /**\n * 持锁期间周期性刷新 updatedAt 心跳。其他进程据此判断锁是否僵死,\n * 即便持锁 pid 仍“存活”(进程挂死或 pid 被复用)也能被安全抢占。\n */\n function startLockRefresh(intervalMs: number): void {\n stopLockRefresh();\n lockRefreshTimer = setInterval(() => {\n const filePath = lockFilePath;\n if (!filePath) return;\n try {\n writeFileSync(filePath, buildLockPayload(), { mode: 0o600 });\n } catch {\n // 刷新失败不影响主流程,下个周期重试\n }\n }, intervalMs);\n lockRefreshTimer.unref?.();\n }\n\n function releaseLock(): void {\n stopLockRefresh();\n const filePath = lockFilePath;\n const fd = lockFd;\n lockFilePath = null;\n lockFd = null;\n lockStartedAt = null;\n\n if (fd !== null) {\n try {\n closeSync(fd);\n } catch {\n // ignore\n }\n }\n if (filePath) {\n try {\n unlinkSync(filePath);\n } catch {\n // ignore\n }\n }\n }\n\n function acquireLock(filePath: string): boolean {\n mkdirSync(dirname(filePath), { recursive: true });\n\n const heartbeatSec = opts.heartbeatSec ?? DEFAULT_HEARTBEAT_SEC;\n const refreshMs = heartbeatSec * 1000 * LOCK_REFRESH_HEARTBEAT_MULTIPLIER;\n const staleMs = heartbeatSec * 1000 * LOCK_STALE_HEARTBEAT_MULTIPLIER;\n\n for (let attempt = 0; attempt < 2; attempt++) {\n try {\n lockStartedAt = new Date().toISOString();\n const fd = openSync(filePath, \"wx\", 0o600);\n writeFileSync(fd, buildLockPayload());\n lockFilePath = filePath;\n lockFd = fd;\n startLockRefresh(refreshMs);\n return true;\n } catch (err: any) {\n lockStartedAt = null;\n if (err?.code !== \"EEXIST\") {\n opts.logger.error(\n `Relay tunnel: failed to acquire local lock ${filePath}: ${String(err)}`,\n );\n return false;\n }\n\n const { pid: ownerPid, updatedAt } = readLockInfo(filePath);\n const ownerDead = ownerPid !== null && !isProcessAliveByPid(ownerPid);\n // updatedAt 缺失(旧版本锁文件)或心跳超时都视为僵死:即便 pid 仍“存活”\n // (进程挂死 / pid 被复用)也允许抢占,避免新连接被永久占用。\n const heartbeatStale =\n updatedAt === null || Date.now() - updatedAt > staleMs;\n\n if (ownerDead || heartbeatStale) {\n const staleReason = describeStaleLock(ownerPid, updatedAt, staleMs);\n opts.logger.warn(\n `Relay tunnel: removing stale local lock (${staleReason})`,\n );\n try {\n unlinkSync(filePath);\n } catch {\n // ignore, retry below will fail if lock is still present\n }\n continue;\n }\n\n opts.logger.warn(\n `Relay tunnel: another local process already owns the tunnel lock${ownerPid ? ` (pid=${ownerPid})` : \"\"}; skipping connection to avoid duplicate token sessions`,\n );\n return false;\n }\n }\n\n return false;\n }\n\n async function shutdownRuntime(reason: string): Promise<void> {\n if (provisionAbortController) {\n provisionAbortController.abort();\n provisionAbortController = null;\n }\n await client?.stop(reason);\n if (abortController) {\n abortController.abort();\n abortController = null;\n }\n releaseLock();\n proxy?.cleanup();\n proxy = null;\n client = null;\n }\n\n function teardownAuthWatcher(): void {\n if (!unwatchAuth) return;\n try {\n unwatchAuth();\n } catch {\n // ignore\n }\n unwatchAuth = null;\n }\n\n function setupAuthWatcher(): void {\n teardownAuthWatcher();\n try {\n unwatchAuth = opts.authProvider.watch(() => {\n scheduleAuthRefresh(\"auth provider changed\");\n });\n } catch (err) {\n opts.logger.warn(\n `Relay tunnel: failed to watch auth changes: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n }\n\n function clearAuthRefreshTimer(): void {\n if (!authRefreshTimer) return;\n clearTimeout(authRefreshTimer);\n authRefreshTimer = null;\n }\n\n function scheduleAuthRefresh(reason: string): void {\n pendingAuthRefreshReason = pendingAuthRefreshReason\n ? `${pendingAuthRefreshReason}; ${reason}`\n : reason;\n clearAuthRefreshTimer();\n authRefreshTimer = setTimeout(() => {\n authRefreshTimer = null;\n runAuthRefresh();\n }, AUTH_CHANGE_DEBOUNCE_MS);\n authRefreshTimer.unref?.();\n }\n\n function runAuthRefresh(): void {\n if (authRefreshPromise) return;\n\n const reason = pendingAuthRefreshReason ?? \"auth changed\";\n pendingAuthRefreshReason = null;\n authRefreshPromise = (async () => {\n const ctx = lastStartCtx;\n if (serviceStopped || !ctx) return;\n\n opts.logger.info(\n `Relay tunnel: auth changed (${reason}), refreshing credentials and restarting relay`,\n );\n teardownAuthWatcher();\n try {\n await shutdownRuntime(`auth changed: ${reason}`);\n if (!serviceStopped && !suppressedByExternalTunnel) {\n await startRuntime(ctx);\n }\n } finally {\n if (!serviceStopped) {\n setupAuthWatcher();\n }\n }\n })()\n .catch((err) => {\n opts.logger.error(\n `Relay tunnel: auth refresh restart failed: ${err instanceof Error ? err.message : String(err)}`,\n );\n })\n .finally(() => {\n authRefreshPromise = null;\n const nextReason = pendingAuthRefreshReason;\n if (nextReason) {\n pendingAuthRefreshReason = null;\n scheduleAuthRefresh(nextReason);\n }\n });\n }\n\n async function startRuntime(ctx: { stateDir: string }): Promise<void> {\n if (suppressedByExternalTunnel) {\n opts.logger.info(\n \"Relay tunnel: external tunnel currently owns ingress; skipping relay startup\",\n );\n return;\n }\n\n // provision 门:openclaw/arkclaw 为 no-op;jvsclaw 在此重试置换 apiKey 直到成功。\n // stop() 会中止此重试,避免置换长时间失败时 start() 永远挂起。\n provisionAbortController = new AbortController();\n await opts.authProvider.ensureProvisioned(provisionAbortController.signal);\n\n const authStatus = await opts.authProvider.status();\n if (!authStatus.ready) {\n opts.logger.warn(\n `Relay tunnel: 认证未就绪(${authStatus.reason ?? \"n/a\"},credentials=${credentialsPath()}),跳过隧道连接。请执行 ntf auth set-api-key <apiKey>`,\n );\n return;\n }\n\n const { logger } = opts;\n const hostStateDir = resolveHostStateDir(ctx.stateDir);\n const stateDir = resolveStateDir(hostStateDir);\n const baseStateDir = join(stateDir, \"plugins\", \"phone-notifications\");\n logger.info(\n `Relay tunnel: starting (pid=${process.pid}, url=${redactUrlSecrets(opts.tunnelUrl)}, heartbeat=${opts.heartbeatSec ?? DEFAULT_HEARTBEAT_SEC}s, backoff=${opts.reconnectBackoffMs ?? DEFAULT_RECONNECT_BACKOFF_MS}ms, gateway=${opts.gatewayBaseUrl}, hasGatewayToken=${!!opts.gatewayToken}, hasGatewayPwd=${!!opts.gatewayPassword})`,\n );\n const statusFilePath = join(baseStateDir, \"tunnel-status.json\");\n const lockPath = join(baseStateDir, \"relay-tunnel.lock\");\n\n if (!acquireLock(lockPath)) {\n return;\n }\n\n try {\n client = new RelayClient({\n tunnelUrl: opts.tunnelUrl,\n credentialProvider: () => opts.authProvider.getRelayCredential(),\n heartbeatSec: opts.heartbeatSec ?? DEFAULT_HEARTBEAT_SEC,\n reconnectBackoffMs: opts.reconnectBackoffMs ?? DEFAULT_RECONNECT_BACKOFF_MS,\n statusFilePath,\n logger,\n });\n\n proxy = new TunnelProxy({\n stateDir: baseStateDir,\n hostStateDir,\n gatewayBaseUrl: opts.gatewayBaseUrl,\n gatewayAuthMode: opts.gatewayAuthMode,\n gatewayToken: opts.gatewayToken,\n gatewayPassword: opts.gatewayPassword,\n client,\n logger,\n });\n\n const connectStatusReporter = createConnectStatusReporter({ logger });\n\n client.onInbound((frame) => proxy!.handleFrame(frame));\n client.onConnected(() => {\n connectStatusReporter.report(\"connected\");\n emitPendingPluginUpdate(\"relay connected\");\n });\n client.onDisconnected((reason) => {\n logger.warn(\n `Relay tunnel: relay disconnected, cleaning local proxy state (${reason})`,\n );\n connectStatusReporter.report(\"disconnected\");\n proxy?.cleanup();\n });\n\n abortController = new AbortController();\n // 非阻塞启动,connectWithAutoReconnect 内部会保持运行\n client.connectWithAutoReconnect(abortController.signal).catch((err) => {\n releaseLock();\n logger.error(`Relay tunnel: unexpected error: ${err}`);\n });\n\n logger.info(\"Relay tunnel 服务已启动\");\n } catch (err) {\n releaseLock();\n throw err;\n }\n }\n\n return {\n id: \"relay-tunnel\",\n\n async start(ctx: { stateDir: string }) {\n serviceStopped = false;\n lastStartCtx = ctx;\n clearAuthRefreshTimer();\n teardownAuthWatcher();\n\n // 先清理上一轮连接,防止 start() 被重复调用时产生多个 RelayClient 互踢\n if (abortController) {\n opts.logger.info(\"Relay tunnel: aborting previous connection before restart\");\n await shutdownRuntime(\"service restarting\");\n }\n\n try {\n await startRuntime(ctx);\n } finally {\n if (!serviceStopped) {\n setupAuthWatcher();\n }\n }\n },\n\n async stop() {\n serviceStopped = true;\n suppressedByExternalTunnel = false;\n lastStartCtx = null;\n clearAuthRefreshTimer();\n pendingAuthRefreshReason = null;\n teardownAuthWatcher();\n await shutdownRuntime(\"service stopping\");\n opts.logger.info(\"Relay tunnel 服务已停止\");\n },\n\n async deactivateForExternalTunnel(reason: string) {\n if (suppressedByExternalTunnel && !client && !proxy && !abortController) {\n return;\n }\n\n suppressedByExternalTunnel = true;\n opts.logger.info(\n `Relay tunnel: external tunnel claimed ingress (${reason}), shutting down relay connection`,\n );\n await shutdownRuntime(\"external tunnel active\");\n },\n\n emitEvent(event: string, payload: unknown) {\n return emitRelayEvent(event, payload);\n },\n\n notifyUpdateAvailable(update: UpdateInfo) {\n pendingPluginUpdate = update;\n emitPendingPluginUpdate(\"update detected\");\n },\n\n clearPendingUpdate() {\n pendingPluginUpdate = null;\n },\n };\n}\n",
101
- "import { writeFileSync, mkdirSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport WebSocket from \"ws\";\nimport type { InboundFrame, OutboundFrame } from \"./types.js\";\nimport { maskSecret, redactUrlSecrets } from \"./utils.js\";\nimport type { AuthCredential } from \"../profile/types.js\";\n\n/** 每次(重)连接时获取最新连接凭据;jvsclaw 等可在此透明刷新 token。 */\nexport type CredentialProvider = () => Promise<AuthCredential>;\n\nfunction previewText(text: string, max = 500): string {\n return text.length <= max ? text : `${text.substring(0, max)}…`;\n}\n\nfunction formatWebSocketError(err: Error): string {\n const statusMatch = /\\bUnexpected server response:\\s*(\\d{3})\\b/.exec(\n err.message,\n );\n if (!statusMatch) {\n return err.message;\n }\n return `${err.message}, upgradeStatus=${statusMatch[1]}`;\n}\n\n/** 从凭据里挑一个代表性密文用于脱敏日志(优先 query.apiKey,其次首个 header 值)。 */\nfunction maskableSecret(credential: AuthCredential): string {\n return (\n credential.query?.apiKey ??\n Object.values(credential.headers ?? {})[0] ??\n \"\"\n );\n}\n\n/** WebSocket Upgrade 握手超时(毫秒)。云上常见 NAT/中间盒吞包场景下兜底用。 */\nconst HANDSHAKE_TIMEOUT_MS = 15_000;\n/** 兜底 watchdog:如果握手超时也没触发,强制 terminate 进入重连路径。 */\nconst CONNECT_WATCHDOG_MS = 20_000;\n/** 断线期间发送会非常密集,限频避免把真正的断线原因刷掉。 */\nconst SEND_SKIPPED_LOG_INTERVAL_MS = 30_000;\n\n/** 持久化到磁盘的隧道连接状态 */\nexport interface TunnelStatusInfo {\n /** 当前连接状态 */\n state: \"connected\" | \"disconnected\" | \"connecting\" | \"stopped\";\n /** 状态变更时间 ISO */\n since: string;\n /** 累计重连次数 */\n reconnectAttempt: number;\n /** 上次断开原因(仅 disconnected 时有值) */\n lastDisconnectReason?: string;\n}\n\nexport interface RelayClientOptions {\n tunnelUrl: string;\n /** 每次连接时获取连接凭据(query/headers);支持 token 刷新。 */\n credentialProvider: CredentialProvider;\n heartbeatSec: number;\n reconnectBackoffMs: number;\n /** 状态文件路径,设置后会在连接状态变更时写入 */\n statusFilePath?: string;\n logger: {\n info: (msg: string) => void;\n warn: (msg: string) => void;\n error: (msg: string) => void;\n };\n}\n\nexport type InboundHandler = (frame: InboundFrame) => void | Promise<void>;\nexport type ConnectedHandler = () => void | Promise<void>;\nexport type DisconnectedHandler = (reason: string) => void | Promise<void>;\n\n/**\n * Relay WebSocket 客户端。\n * 负责建连、token 认证、心跳保活、断线指数退避重连。\n */\nexport class RelayClient {\n private ws: WebSocket | null = null;\n private heartbeatTimer: ReturnType<typeof setInterval> | null = null;\n private reconnectAttempt = 0;\n private reconnectTimer: ReturnType<typeof setTimeout> | null = null;\n private handlers: InboundHandler[] = [];\n private connectedHandlers: ConnectedHandler[] = [];\n private disconnectedHandlers: DisconnectedHandler[] = [];\n private aborted = false;\n private lastInboundAt = 0;\n private stopPromise: Promise<void> | null = null;\n private skippedSendLogLastAt: number | null = null;\n private skippedSendLogSuppressed = 0;\n\n constructor(private readonly opts: RelayClientOptions) {}\n\n /** 写连接状态到磁盘 */\n private writeStatus(\n state: TunnelStatusInfo[\"state\"],\n lastDisconnectReason?: string,\n ): void {\n if (!this.opts.statusFilePath) return;\n const info: TunnelStatusInfo = {\n state,\n since: new Date().toISOString(),\n reconnectAttempt: this.reconnectAttempt,\n lastDisconnectReason,\n };\n try {\n mkdirSync(dirname(this.opts.statusFilePath), { recursive: true });\n writeFileSync(this.opts.statusFilePath, JSON.stringify(info, null, 2));\n } catch {\n // 写状态文件失败不影响主流程\n }\n }\n\n /** 注册入站帧处理函数 */\n onInbound(handler: InboundHandler): void {\n this.handlers.push(handler);\n }\n\n /** 注册连接成功后的回调 */\n onConnected(handler: ConnectedHandler): void {\n this.connectedHandlers.push(handler);\n }\n\n /** 注册 Relay 连接断开后的回调 */\n onDisconnected(handler: DisconnectedHandler): void {\n this.disconnectedHandlers.push(handler);\n }\n\n /** 当前是否已连上 Relay */\n isConnected(): boolean {\n return this.ws?.readyState === WebSocket.OPEN;\n }\n\n /** 优雅停止客户端,优先发送 close 帧,超时后再强制 terminate */\n async stop(reason = \"client stopping\"): Promise<void> {\n if (this.stopPromise) {\n return this.stopPromise;\n }\n\n this.aborted = true;\n this.writeStatus(\"stopped\");\n this.stopHeartbeat();\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n\n const ws = this.ws;\n this.ws = null;\n if (!ws) {\n return;\n }\n\n this.opts.logger.info(\n `Relay tunnel: stopping client (readyState=${ws.readyState}, reason=${reason})`,\n );\n\n if (\n ws.readyState === WebSocket.CLOSED ||\n ws.readyState === WebSocket.CLOSING\n ) {\n return;\n }\n\n if (ws.readyState !== WebSocket.OPEN) {\n try {\n ws.terminate();\n } catch {\n // ignore\n }\n return;\n }\n\n this.stopPromise = new Promise<void>((resolve) => {\n let finished = false;\n let fallbackTimer: ReturnType<typeof setTimeout> | null = null;\n\n const finish = () => {\n if (finished) return;\n finished = true;\n if (fallbackTimer) {\n clearTimeout(fallbackTimer);\n fallbackTimer = null;\n }\n ws.off(\"close\", handleClose);\n ws.off(\"error\", handleError);\n this.stopPromise = null;\n resolve();\n };\n\n const handleClose = () => finish();\n const handleError = () => finish();\n\n ws.once(\"close\", handleClose);\n ws.once(\"error\", handleError);\n\n fallbackTimer = setTimeout(() => {\n this.opts.logger.warn(\n \"Relay tunnel: graceful close timed out, forcing terminate\",\n );\n try {\n ws.terminate();\n } catch {\n // ignore\n }\n finish();\n }, 1500);\n\n try {\n ws.close(1000, reason);\n } catch {\n finish();\n }\n });\n\n await this.stopPromise;\n }\n\n /** 发送出站帧 */\n send(frame: OutboundFrame): void {\n const ws = this.ws;\n if (ws?.readyState === WebSocket.OPEN) {\n const payload = JSON.stringify(frame);\n this.opts.logger.info(\n `Relay tunnel: ▶ send frame type=${frame.type}, id=${\"id\" in frame ? frame.id : \"N/A\"} (${payload.length} chars)`,\n );\n try {\n ws.send(payload);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n this.opts.logger.warn(\n `Relay tunnel: send failed, forcing reconnect: ${message}`,\n );\n this.forceReconnectFromSocket(ws, `send-failed: ${message}`);\n }\n } else {\n this.logSendSkipped(\"send\", `frame type=${frame.type}`);\n }\n }\n\n /** 原样透传文本到 Relay(用于 Gateway WS 响应直接回传) */\n sendRaw(text: string): void {\n const ws = this.ws;\n if (ws?.readyState === WebSocket.OPEN) {\n this.opts.logger.info(\n `Relay tunnel: ▶ sendRaw (${text.length} chars): ${text.length <= 500 ? text : text.substring(0, 500) + \"…\"}`,\n );\n try {\n ws.send(text);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n this.opts.logger.warn(\n `Relay tunnel: sendRaw failed, forcing reconnect: ${message}`,\n );\n this.forceReconnectFromSocket(ws, `sendRaw-failed: ${message}`);\n }\n } else {\n this.logSendSkipped(\"sendRaw\");\n }\n }\n\n /** 启动连接,带自动重连,直到 abortSignal 触发 */\n async connectWithAutoReconnect(abortSignal?: AbortSignal): Promise<void> {\n if (abortSignal) {\n abortSignal.addEventListener(\n \"abort\",\n () => {\n void this.stop();\n },\n { once: true },\n );\n }\n\n await this.connect();\n\n // 保持运行直到 abort\n return new Promise<void>((resolve) => {\n if (abortSignal) {\n abortSignal.addEventListener(\"abort\", () => resolve(), { once: true });\n }\n });\n }\n\n private async connect(): Promise<void> {\n if (this.aborted) return;\n\n // 确保旧连接和定时器都被清理,防止重复连接\n this.cleanup(true);\n\n let credential: AuthCredential;\n try {\n credential = await this.opts.credentialProvider();\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n this.opts.logger.warn(\n `Relay tunnel: failed to resolve credential, scheduling reconnect: ${message}`,\n );\n this.writeStatus(\"disconnected\", `credential-error: ${message}`);\n this.scheduleReconnect();\n return;\n }\n\n this.opts.logger.info(\n `Relay tunnel: connecting to ${redactUrlSecrets(this.opts.tunnelUrl)} (attempt=${this.reconnectAttempt}, heartbeat=${this.opts.heartbeatSec}s, apiKey=${maskSecret(maskableSecret(credential))})`,\n );\n this.writeStatus(\"connecting\");\n\n return new Promise<void>((resolve) => {\n let settled = false;\n const settle = () => {\n if (!settled) {\n settled = true;\n resolve();\n }\n };\n\n const wsUrl = new URL(this.opts.tunnelUrl);\n // 凭据中的 query 参数(如 apiKey)拼到连接 URL;已显式带上的不覆盖。\n for (const [key, value] of Object.entries(credential.query ?? {})) {\n if (!wsUrl.searchParams.get(key)) {\n wsUrl.searchParams.set(key, value);\n }\n }\n\n const loggableUrl = new URL(wsUrl.toString());\n const apiKey = loggableUrl.searchParams.get(\"apiKey\");\n if (apiKey) {\n loggableUrl.searchParams.set(\n \"apiKey\",\n apiKey.length > 8 ? `${apiKey.substring(0, 8)}…` : \"…\",\n );\n }\n this.opts.logger.info(\n `Relay tunnel: connecting to ${loggableUrl.toString()} (attempt=${this.reconnectAttempt + 1})`,\n );\n\n const ws = new WebSocket(wsUrl.toString(), {\n headers: credential.headers ?? {},\n // 防止 TCP 通但 HTTP Upgrade 响应被吞导致永久挂在 CONNECTING\n handshakeTimeout: HANDSHAKE_TIMEOUT_MS,\n });\n // 将握手中的 socket 也记为当前连接,确保首连失败/握手前断开也能触发重连。\n this.ws = ws;\n\n // 兜底 watchdog:即使 handshakeTimeout 因某些原因失效,也强制 terminate 走重连路径。\n let connectWatchdog: ReturnType<typeof setTimeout> | null = setTimeout(\n () => {\n connectWatchdog = null;\n if (this.ws !== ws || ws.readyState === WebSocket.OPEN) {\n return;\n }\n this.opts.logger.warn(\n `Relay tunnel: connect watchdog fired (readyState=${ws.readyState}, attempt=${this.reconnectAttempt}), forcing reconnect`,\n );\n this.forceReconnectFromSocket(ws, \"connect-watchdog-timeout\");\n settle();\n },\n CONNECT_WATCHDOG_MS,\n );\n\n const clearConnectWatchdog = () => {\n if (connectWatchdog) {\n clearTimeout(connectWatchdog);\n connectWatchdog = null;\n }\n };\n\n ws.on(\"open\", () => {\n clearConnectWatchdog();\n if (this.aborted || this.ws !== ws) {\n this.opts.logger.warn(\n `Relay tunnel: open fired but aborted=${this.aborted}, stale=${this.ws !== ws}, closing`,\n );\n try {\n ws.terminate();\n } catch {\n // ignore\n }\n settle();\n return;\n }\n this.reconnectAttempt = 0;\n this.lastInboundAt = Date.now();\n this.startHeartbeat();\n this.opts.logger.info(\"Relay tunnel: ✔ connected, heartbeat started\");\n this.writeStatus(\"connected\");\n this.emitConnected();\n settle();\n });\n\n ws.on(\"pong\", () => {\n if (this.ws === ws) {\n this.opts.logger.info(\"Relay tunnel: ← pong received\");\n this.markInboundActivity();\n }\n });\n\n ws.on(\"message\", (data: WebSocket.RawData) => {\n if (this.ws !== ws) {\n return;\n }\n this.handleMessage(data);\n });\n\n ws.on(\"close\", (code: number, reason: Buffer) => {\n clearConnectWatchdog();\n const reasonStr = reason.toString();\n const lastInboundAgoMs = this.lastInboundAt\n ? Date.now() - this.lastInboundAt\n : null;\n const isCurrentSocket = this.ws === ws;\n const logMessage =\n `Relay tunnel: disconnected (code=${code}, reason=${previewText(reasonStr, 200)}, lastInboundAgoMs=${lastInboundAgoMs ?? \"N/A\"}, reconnectAttempt=${this.reconnectAttempt})`;\n if (this.aborted || !isCurrentSocket) {\n this.opts.logger.info(logMessage);\n } else {\n this.opts.logger.warn(logMessage);\n }\n if (isCurrentSocket) {\n this.stopHeartbeat();\n this.ws = null;\n const disconnectReason = `code=${code}, reason=${reasonStr}`;\n this.writeStatus(\"disconnected\", disconnectReason);\n this.emitDisconnected(disconnectReason);\n this.scheduleReconnect();\n }\n settle();\n });\n\n ws.on(\"error\", (err: Error) => {\n clearConnectWatchdog();\n const message = formatWebSocketError(err);\n this.opts.logger.error(\n `Relay tunnel: WebSocket error: ${message} (readyState=${ws.readyState}, reconnectAttempt=${this.reconnectAttempt}, url=${redactUrlSecrets(wsUrl.toString())})`,\n );\n // 多数情况 error 后 ws 会再触发 close;但部分底层错误只 error 不 close,\n // 这里幂等地兜底一次 scheduleReconnect,scheduleReconnect 内部对已排程的重连会跳过。\n if (this.ws === ws) {\n this.forceReconnectFromSocket(ws, `error: ${message}`);\n }\n settle();\n });\n });\n }\n\n private emitConnected(): void {\n for (const handler of this.connectedHandlers) {\n Promise.resolve(handler()).catch((err) => {\n this.opts.logger.warn(\n `Relay tunnel: onConnected handler failed: ${err instanceof Error ? err.message : String(err)}`,\n );\n });\n }\n }\n\n private emitDisconnected(reason: string): void {\n for (const handler of this.disconnectedHandlers) {\n Promise.resolve(handler(reason)).catch((err) => {\n this.opts.logger.warn(\n `Relay tunnel: onDisconnected handler failed: ${err instanceof Error ? err.message : String(err)}`,\n );\n });\n }\n }\n\n private handleMessage(data: WebSocket.RawData): void {\n const text =\n typeof data === \"string\"\n ? data\n : Buffer.isBuffer(data)\n ? data.toString()\n : String(data);\n\n this.markInboundActivity();\n\n // 应用层心跳 pong 直接消费,不走帧解析\n if (text === \"pong\") {\n return;\n }\n\n this.opts.logger.info(\n `Relay tunnel: ★ received message (${text.length} chars): ${previewText(text)}`,\n );\n\n let frame: InboundFrame;\n try {\n frame = JSON.parse(text) as InboundFrame;\n } catch {\n this.opts.logger.warn(\n `Relay tunnel: received invalid frame, ignoring (preview=${previewText(text, 200)})`,\n );\n return;\n }\n\n this.opts.logger.info(`Relay tunnel: parsed frame type=${frame.type}, id=${\"id\" in frame ? frame.id : \"N/A\"}`);\n\n for (const handler of this.handlers) {\n try {\n const result = handler(frame);\n if (result instanceof Promise) {\n result.catch((err) => {\n this.opts.logger.error(`Relay tunnel: handler error: ${err}`);\n });\n }\n } catch (err) {\n this.opts.logger.error(`Relay tunnel: handler error: ${err}`);\n }\n }\n }\n\n private startHeartbeat(): void {\n this.stopHeartbeat();\n const intervalMs = this.opts.heartbeatSec * 1000;\n this.sendHeartbeat();\n this.heartbeatTimer = setInterval(() => {\n this.sendHeartbeat();\n }, intervalMs);\n }\n\n private stopHeartbeat(): void {\n if (this.heartbeatTimer) {\n clearInterval(this.heartbeatTimer);\n this.heartbeatTimer = null;\n }\n }\n\n private getHeartbeatTimeoutMs(): number {\n return this.opts.heartbeatSec * 3 * 1000;\n }\n\n private sendHeartbeat(): void {\n const ws = this.ws;\n if (ws?.readyState !== WebSocket.OPEN) {\n return;\n }\n\n const idleMs = Date.now() - this.lastInboundAt;\n const timeoutMs = this.getHeartbeatTimeoutMs();\n if (idleMs >= timeoutMs) {\n this.opts.logger.warn(\n `Relay tunnel: heartbeat timeout, no inbound activity for ${idleMs}ms (threshold=${timeoutMs}ms)`,\n );\n this.forceReconnectFromSocket(ws, `heartbeat-timeout idleMs=${idleMs}`);\n return;\n }\n\n this.opts.logger.info('Relay tunnel: → heartbeat \"ping\"');\n try {\n ws.send(\"ping\");\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n this.opts.logger.warn(\n `Relay tunnel: heartbeat text ping failed, forcing reconnect: ${message}`,\n );\n this.forceReconnectFromSocket(ws, `heartbeat-send-failed: ${message}`);\n return;\n }\n try {\n ws.ping();\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n this.opts.logger.warn(\n `Relay tunnel: heartbeat control ping failed, forcing reconnect: ${message}`,\n );\n this.forceReconnectFromSocket(ws, `heartbeat-ping-failed: ${message}`);\n }\n }\n\n private markInboundActivity(): void {\n this.lastInboundAt = Date.now();\n }\n\n private cleanup(force = false): void {\n this.opts.logger.info(\n `Relay tunnel: cleanup (ws=${this.ws ? \"open\" : \"null\"}, heartbeat=${!!this.heartbeatTimer}, reconnect=${!!this.reconnectTimer})`,\n );\n this.stopHeartbeat();\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n if (this.ws) {\n try {\n if (force) {\n this.ws.terminate();\n } else {\n this.ws.close();\n }\n } catch {\n // ignore\n }\n this.ws = null;\n }\n }\n\n private forceReconnectFromSocket(ws: WebSocket, reason: string): void {\n if (this.aborted || this.ws !== ws) return;\n\n this.stopHeartbeat();\n this.ws = null;\n this.writeStatus(\"disconnected\", reason);\n this.emitDisconnected(reason);\n this.scheduleReconnect();\n\n try {\n if (ws.readyState !== WebSocket.CLOSED) {\n ws.terminate();\n }\n } catch {\n // ignore\n }\n }\n\n private logSendSkipped(kind: \"send\" | \"sendRaw\", detail?: string): void {\n const now = Date.now();\n const shouldLog =\n this.skippedSendLogLastAt === null ||\n now - this.skippedSendLogLastAt >= SEND_SKIPPED_LOG_INTERVAL_MS;\n\n if (!shouldLog) {\n this.skippedSendLogSuppressed++;\n return;\n }\n\n const suppressedSuffix =\n this.skippedSendLogSuppressed > 0\n ? `, suppressed=${this.skippedSendLogSuppressed}`\n : \"\";\n const detailSuffix = detail ? `, ${detail}` : \"\";\n this.opts.logger.warn(\n `Relay tunnel: ▶ ${kind} skipped, ws not open (readyState=${this.ws?.readyState ?? \"null\"}${detailSuffix}${suppressedSuffix})`,\n );\n this.skippedSendLogLastAt = now;\n this.skippedSendLogSuppressed = 0;\n }\n\n private scheduleReconnect(): void {\n if (this.aborted) return;\n\n // 已经排了一次重连就不再重排,避免 error+close 双触发或 watchdog 与 close 双触发时\n // attempt 被多扣、退避被无意义重置。\n if (this.reconnectTimer) {\n return;\n }\n\n const baseMs = this.opts.reconnectBackoffMs;\n const delayMs = Math.min(\n baseMs * Math.pow(2, this.reconnectAttempt),\n 60_000,\n );\n this.reconnectAttempt++;\n\n this.opts.logger.info(\n `Relay tunnel: reconnecting in ${delayMs}ms (attempt ${this.reconnectAttempt})`,\n );\n\n this.reconnectTimer = setTimeout(() => {\n this.reconnectTimer = null;\n if (!this.aborted) {\n this.connect().catch((err) => {\n this.opts.logger.error(`Relay tunnel: reconnect failed: ${err}`);\n });\n }\n }, delayMs);\n }\n}\n",
98
+ "import { writeFileSync, mkdirSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport WebSocket from \"ws\";\nimport type { InboundFrame, OutboundFrame } from \"./types.js\";\nimport { maskSecret, redactUrlSecrets } from \"./utils.js\";\nimport type { AuthCredential } from \"../profile/types.js\";\n\n/** 每次(重)连接时获取最新连接凭据;jvsclaw 等可在此透明刷新 token。 */\nexport type CredentialProvider = () => Promise<AuthCredential>;\n\nfunction previewText(text: string, max = 500): string {\n return text.length <= max ? text : `${text.substring(0, max)}…`;\n}\n\nfunction formatWebSocketError(err: Error): string {\n const statusMatch = /\\bUnexpected server response:\\s*(\\d{3})\\b/.exec(\n err.message,\n );\n if (!statusMatch) {\n return err.message;\n }\n return `${err.message}, upgradeStatus=${statusMatch[1]}`;\n}\n\n/** 从凭据里挑一个代表性密文用于脱敏日志(优先 query.apiKey,其次首个 header 值)。 */\nfunction maskableSecret(credential: AuthCredential): string {\n return (\n credential.query?.apiKey ??\n Object.values(credential.headers ?? {})[0] ??\n \"\"\n );\n}\n\n/** WebSocket Upgrade 握手超时(毫秒)。云上常见 NAT/中间盒吞包场景下兜底用。 */\nconst HANDSHAKE_TIMEOUT_MS = 15_000;\n/** 兜底 watchdog:如果握手超时也没触发,强制 terminate 进入重连路径。 */\nconst CONNECT_WATCHDOG_MS = 20_000;\n/** 断线期间发送会非常密集,限频避免把真正的断线原因刷掉。 */\nconst SEND_SKIPPED_LOG_INTERVAL_MS = 30_000;\n/**\n * WebSocket close code 1013(Try Again Later):服务端主动要求稍后重试,\n * 通常是滚动重启 / 主动迁移连接,应立即回连而不做指数退避。\n */\nconst WS_TRY_AGAIN_LATER_CODE = 1013;\n\n/** 持久化到磁盘的隧道连接状态 */\nexport interface TunnelStatusInfo {\n /** 当前连接状态 */\n state: \"connected\" | \"disconnected\" | \"connecting\" | \"stopped\";\n /** 状态变更时间 ISO */\n since: string;\n /** 累计重连次数 */\n reconnectAttempt: number;\n /** 上次断开原因(仅 disconnected 时有值) */\n lastDisconnectReason?: string;\n}\n\nexport interface RelayClientOptions {\n tunnelUrl: string;\n /** 每次连接时获取连接凭据(query/headers);支持 token 刷新。 */\n credentialProvider: CredentialProvider;\n heartbeatSec: number;\n reconnectBackoffMs: number;\n /** 状态文件路径,设置后会在连接状态变更时写入 */\n statusFilePath?: string;\n logger: {\n info: (msg: string) => void;\n warn: (msg: string) => void;\n error: (msg: string) => void;\n };\n}\n\nexport type InboundHandler = (frame: InboundFrame) => void | Promise<void>;\nexport type ConnectedHandler = () => void | Promise<void>;\nexport type DisconnectedHandler = (reason: string) => void | Promise<void>;\n\n/**\n * Relay WebSocket 客户端。\n * 负责建连、token 认证、心跳保活、断线指数退避重连。\n */\nexport class RelayClient {\n private ws: WebSocket | null = null;\n private heartbeatTimer: ReturnType<typeof setInterval> | null = null;\n private reconnectAttempt = 0;\n private reconnectTimer: ReturnType<typeof setTimeout> | null = null;\n private handlers: InboundHandler[] = [];\n private connectedHandlers: ConnectedHandler[] = [];\n private disconnectedHandlers: DisconnectedHandler[] = [];\n private aborted = false;\n private lastInboundAt = 0;\n private stopPromise: Promise<void> | null = null;\n private skippedSendLogLastAt: number | null = null;\n private skippedSendLogSuppressed = 0;\n\n constructor(private readonly opts: RelayClientOptions) {}\n\n /** 写连接状态到磁盘 */\n private writeStatus(\n state: TunnelStatusInfo[\"state\"],\n lastDisconnectReason?: string,\n ): void {\n if (!this.opts.statusFilePath) return;\n const info: TunnelStatusInfo = {\n state,\n since: new Date().toISOString(),\n reconnectAttempt: this.reconnectAttempt,\n lastDisconnectReason,\n };\n try {\n mkdirSync(dirname(this.opts.statusFilePath), { recursive: true });\n writeFileSync(this.opts.statusFilePath, JSON.stringify(info, null, 2));\n } catch {\n // 写状态文件失败不影响主流程\n }\n }\n\n /** 注册入站帧处理函数 */\n onInbound(handler: InboundHandler): void {\n this.handlers.push(handler);\n }\n\n /** 注册连接成功后的回调 */\n onConnected(handler: ConnectedHandler): void {\n this.connectedHandlers.push(handler);\n }\n\n /** 注册 Relay 连接断开后的回调 */\n onDisconnected(handler: DisconnectedHandler): void {\n this.disconnectedHandlers.push(handler);\n }\n\n /** 当前是否已连上 Relay */\n isConnected(): boolean {\n return this.ws?.readyState === WebSocket.OPEN;\n }\n\n /** 优雅停止客户端,优先发送 close 帧,超时后再强制 terminate */\n async stop(reason = \"client stopping\"): Promise<void> {\n if (this.stopPromise) {\n return this.stopPromise;\n }\n\n this.aborted = true;\n this.writeStatus(\"stopped\");\n this.stopHeartbeat();\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n\n const ws = this.ws;\n this.ws = null;\n if (!ws) {\n return;\n }\n\n this.opts.logger.info(\n `Relay tunnel: stopping client (readyState=${ws.readyState}, reason=${reason})`,\n );\n\n if (\n ws.readyState === WebSocket.CLOSED ||\n ws.readyState === WebSocket.CLOSING\n ) {\n return;\n }\n\n if (ws.readyState !== WebSocket.OPEN) {\n try {\n ws.terminate();\n } catch {\n // ignore\n }\n return;\n }\n\n this.stopPromise = new Promise<void>((resolve) => {\n let finished = false;\n let fallbackTimer: ReturnType<typeof setTimeout> | null = null;\n\n const finish = () => {\n if (finished) return;\n finished = true;\n if (fallbackTimer) {\n clearTimeout(fallbackTimer);\n fallbackTimer = null;\n }\n ws.off(\"close\", handleClose);\n ws.off(\"error\", handleError);\n this.stopPromise = null;\n resolve();\n };\n\n const handleClose = () => finish();\n const handleError = () => finish();\n\n ws.once(\"close\", handleClose);\n ws.once(\"error\", handleError);\n\n fallbackTimer = setTimeout(() => {\n this.opts.logger.warn(\n \"Relay tunnel: graceful close timed out, forcing terminate\",\n );\n try {\n ws.terminate();\n } catch {\n // ignore\n }\n finish();\n }, 1500);\n\n try {\n ws.close(1000, reason);\n } catch {\n finish();\n }\n });\n\n await this.stopPromise;\n }\n\n /** 发送出站帧 */\n send(frame: OutboundFrame): void {\n const ws = this.ws;\n if (ws?.readyState === WebSocket.OPEN) {\n const payload = JSON.stringify(frame);\n this.opts.logger.info(\n `Relay tunnel: ▶ send frame type=${frame.type}, id=${\"id\" in frame ? frame.id : \"N/A\"} (${payload.length} chars)`,\n );\n try {\n ws.send(payload);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n this.opts.logger.warn(\n `Relay tunnel: send failed, forcing reconnect: ${message}`,\n );\n this.forceReconnectFromSocket(ws, `send-failed: ${message}`);\n }\n } else {\n this.logSendSkipped(\"send\", `frame type=${frame.type}`);\n }\n }\n\n /** 原样透传文本到 Relay(用于 Gateway WS 响应直接回传) */\n sendRaw(text: string): void {\n const ws = this.ws;\n if (ws?.readyState === WebSocket.OPEN) {\n this.opts.logger.info(\n `Relay tunnel: ▶ sendRaw (${text.length} chars): ${text.length <= 500 ? text : text.substring(0, 500) + \"…\"}`,\n );\n try {\n ws.send(text);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n this.opts.logger.warn(\n `Relay tunnel: sendRaw failed, forcing reconnect: ${message}`,\n );\n this.forceReconnectFromSocket(ws, `sendRaw-failed: ${message}`);\n }\n } else {\n this.logSendSkipped(\"sendRaw\");\n }\n }\n\n /** 启动连接,带自动重连,直到 abortSignal 触发 */\n async connectWithAutoReconnect(abortSignal?: AbortSignal): Promise<void> {\n if (abortSignal) {\n abortSignal.addEventListener(\n \"abort\",\n () => {\n void this.stop();\n },\n { once: true },\n );\n }\n\n await this.connect();\n\n // 保持运行直到 abort\n return new Promise<void>((resolve) => {\n if (abortSignal) {\n abortSignal.addEventListener(\"abort\", () => resolve(), { once: true });\n }\n });\n }\n\n private async connect(): Promise<void> {\n if (this.aborted) return;\n\n // 确保旧连接和定时器都被清理,防止重复连接\n this.cleanup(true);\n\n let credential: AuthCredential;\n try {\n credential = await this.opts.credentialProvider();\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n this.opts.logger.warn(\n `Relay tunnel: failed to resolve credential, scheduling reconnect: ${message}`,\n );\n this.writeStatus(\"disconnected\", `credential-error: ${message}`);\n this.scheduleReconnect();\n return;\n }\n\n this.opts.logger.info(\n `Relay tunnel: connecting to ${redactUrlSecrets(this.opts.tunnelUrl)} (attempt=${this.reconnectAttempt}, heartbeat=${this.opts.heartbeatSec}s, apiKey=${maskSecret(maskableSecret(credential))})`,\n );\n this.writeStatus(\"connecting\");\n\n return new Promise<void>((resolve) => {\n let settled = false;\n const settle = () => {\n if (!settled) {\n settled = true;\n resolve();\n }\n };\n\n const wsUrl = new URL(this.opts.tunnelUrl);\n // 凭据中的 query 参数(如 apiKey)拼到连接 URL;已显式带上的不覆盖。\n for (const [key, value] of Object.entries(credential.query ?? {})) {\n if (!wsUrl.searchParams.get(key)) {\n wsUrl.searchParams.set(key, value);\n }\n }\n\n const loggableUrl = new URL(wsUrl.toString());\n const apiKey = loggableUrl.searchParams.get(\"apiKey\");\n if (apiKey) {\n loggableUrl.searchParams.set(\n \"apiKey\",\n apiKey.length > 8 ? `${apiKey.substring(0, 8)}…` : \"…\",\n );\n }\n this.opts.logger.info(\n `Relay tunnel: connecting to ${loggableUrl.toString()} (attempt=${this.reconnectAttempt + 1})`,\n );\n\n const ws = new WebSocket(wsUrl.toString(), {\n headers: credential.headers ?? {},\n // 防止 TCP 通但 HTTP Upgrade 响应被吞导致永久挂在 CONNECTING\n handshakeTimeout: HANDSHAKE_TIMEOUT_MS,\n });\n // 将握手中的 socket 也记为当前连接,确保首连失败/握手前断开也能触发重连。\n this.ws = ws;\n\n // 兜底 watchdog:即使 handshakeTimeout 因某些原因失效,也强制 terminate 走重连路径。\n let connectWatchdog: ReturnType<typeof setTimeout> | null = setTimeout(\n () => {\n connectWatchdog = null;\n if (this.ws !== ws || ws.readyState === WebSocket.OPEN) {\n return;\n }\n this.opts.logger.warn(\n `Relay tunnel: connect watchdog fired (readyState=${ws.readyState}, attempt=${this.reconnectAttempt}), forcing reconnect`,\n );\n this.forceReconnectFromSocket(ws, \"connect-watchdog-timeout\");\n settle();\n },\n CONNECT_WATCHDOG_MS,\n );\n\n const clearConnectWatchdog = () => {\n if (connectWatchdog) {\n clearTimeout(connectWatchdog);\n connectWatchdog = null;\n }\n };\n\n ws.on(\"open\", () => {\n clearConnectWatchdog();\n if (this.aborted || this.ws !== ws) {\n this.opts.logger.warn(\n `Relay tunnel: open fired but aborted=${this.aborted}, stale=${this.ws !== ws}, closing`,\n );\n try {\n ws.terminate();\n } catch {\n // ignore\n }\n settle();\n return;\n }\n this.reconnectAttempt = 0;\n this.lastInboundAt = Date.now();\n this.startHeartbeat();\n this.opts.logger.info(\"Relay tunnel: ✔ connected, heartbeat started\");\n this.writeStatus(\"connected\");\n this.emitConnected();\n settle();\n });\n\n ws.on(\"pong\", () => {\n if (this.ws === ws) {\n this.opts.logger.info(\"Relay tunnel: ← pong received\");\n this.markInboundActivity();\n }\n });\n\n ws.on(\"message\", (data: WebSocket.RawData) => {\n if (this.ws !== ws) {\n return;\n }\n this.handleMessage(data);\n });\n\n ws.on(\"close\", (code: number, reason: Buffer) => {\n clearConnectWatchdog();\n const reasonStr = reason.toString();\n const lastInboundAgoMs = this.lastInboundAt\n ? Date.now() - this.lastInboundAt\n : null;\n const isCurrentSocket = this.ws === ws;\n const logMessage =\n `Relay tunnel: disconnected (code=${code}, reason=${previewText(reasonStr, 200)}, lastInboundAgoMs=${lastInboundAgoMs ?? \"N/A\"}, reconnectAttempt=${this.reconnectAttempt})`;\n if (this.aborted || !isCurrentSocket) {\n this.opts.logger.info(logMessage);\n } else {\n this.opts.logger.warn(logMessage);\n }\n if (isCurrentSocket) {\n this.stopHeartbeat();\n this.ws = null;\n const disconnectReason = `code=${code}, reason=${reasonStr}`;\n this.writeStatus(\"disconnected\", disconnectReason);\n this.emitDisconnected(disconnectReason);\n this.scheduleReconnect({\n immediate: code === WS_TRY_AGAIN_LATER_CODE,\n });\n }\n settle();\n });\n\n ws.on(\"error\", (err: Error) => {\n clearConnectWatchdog();\n const message = formatWebSocketError(err);\n this.opts.logger.error(\n `Relay tunnel: WebSocket error: ${message} (readyState=${ws.readyState}, reconnectAttempt=${this.reconnectAttempt}, url=${redactUrlSecrets(wsUrl.toString())})`,\n );\n // 多数情况 error 后 ws 会再触发 close;但部分底层错误只 error 不 close,\n // 这里幂等地兜底一次 scheduleReconnect,scheduleReconnect 内部对已排程的重连会跳过。\n if (this.ws === ws) {\n this.forceReconnectFromSocket(ws, `error: ${message}`);\n }\n settle();\n });\n });\n }\n\n private emitConnected(): void {\n for (const handler of this.connectedHandlers) {\n Promise.resolve(handler()).catch((err) => {\n this.opts.logger.warn(\n `Relay tunnel: onConnected handler failed: ${err instanceof Error ? err.message : String(err)}`,\n );\n });\n }\n }\n\n private emitDisconnected(reason: string): void {\n for (const handler of this.disconnectedHandlers) {\n Promise.resolve(handler(reason)).catch((err) => {\n this.opts.logger.warn(\n `Relay tunnel: onDisconnected handler failed: ${err instanceof Error ? err.message : String(err)}`,\n );\n });\n }\n }\n\n private handleMessage(data: WebSocket.RawData): void {\n const text =\n typeof data === \"string\"\n ? data\n : Buffer.isBuffer(data)\n ? data.toString()\n : String(data);\n\n this.markInboundActivity();\n\n // 应用层心跳 pong 直接消费,不走帧解析\n if (text === \"pong\") {\n return;\n }\n\n this.opts.logger.info(\n `Relay tunnel: ★ received message (${text.length} chars): ${previewText(text)}`,\n );\n\n let frame: InboundFrame;\n try {\n frame = JSON.parse(text) as InboundFrame;\n } catch {\n this.opts.logger.warn(\n `Relay tunnel: received invalid frame, ignoring (preview=${previewText(text, 200)})`,\n );\n return;\n }\n\n this.opts.logger.info(`Relay tunnel: parsed frame type=${frame.type}, id=${\"id\" in frame ? frame.id : \"N/A\"}`);\n\n for (const handler of this.handlers) {\n try {\n const result = handler(frame);\n if (result instanceof Promise) {\n result.catch((err) => {\n this.opts.logger.error(`Relay tunnel: handler error: ${err}`);\n });\n }\n } catch (err) {\n this.opts.logger.error(`Relay tunnel: handler error: ${err}`);\n }\n }\n }\n\n private startHeartbeat(): void {\n this.stopHeartbeat();\n const intervalMs = this.opts.heartbeatSec * 1000;\n this.sendHeartbeat();\n this.heartbeatTimer = setInterval(() => {\n this.sendHeartbeat();\n }, intervalMs);\n }\n\n private stopHeartbeat(): void {\n if (this.heartbeatTimer) {\n clearInterval(this.heartbeatTimer);\n this.heartbeatTimer = null;\n }\n }\n\n private getHeartbeatTimeoutMs(): number {\n return this.opts.heartbeatSec * 3 * 1000;\n }\n\n private sendHeartbeat(): void {\n const ws = this.ws;\n if (ws?.readyState !== WebSocket.OPEN) {\n return;\n }\n\n const idleMs = Date.now() - this.lastInboundAt;\n const timeoutMs = this.getHeartbeatTimeoutMs();\n if (idleMs >= timeoutMs) {\n this.opts.logger.warn(\n `Relay tunnel: heartbeat timeout, no inbound activity for ${idleMs}ms (threshold=${timeoutMs}ms)`,\n );\n this.forceReconnectFromSocket(ws, `heartbeat-timeout idleMs=${idleMs}`);\n return;\n }\n\n this.opts.logger.info('Relay tunnel: → heartbeat \"ping\"');\n try {\n ws.send(\"ping\");\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n this.opts.logger.warn(\n `Relay tunnel: heartbeat text ping failed, forcing reconnect: ${message}`,\n );\n this.forceReconnectFromSocket(ws, `heartbeat-send-failed: ${message}`);\n return;\n }\n try {\n ws.ping();\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n this.opts.logger.warn(\n `Relay tunnel: heartbeat control ping failed, forcing reconnect: ${message}`,\n );\n this.forceReconnectFromSocket(ws, `heartbeat-ping-failed: ${message}`);\n }\n }\n\n private markInboundActivity(): void {\n this.lastInboundAt = Date.now();\n }\n\n private cleanup(force = false): void {\n this.opts.logger.info(\n `Relay tunnel: cleanup (ws=${this.ws ? \"open\" : \"null\"}, heartbeat=${!!this.heartbeatTimer}, reconnect=${!!this.reconnectTimer})`,\n );\n this.stopHeartbeat();\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n if (this.ws) {\n try {\n if (force) {\n this.ws.terminate();\n } else {\n this.ws.close();\n }\n } catch {\n // ignore\n }\n this.ws = null;\n }\n }\n\n private forceReconnectFromSocket(ws: WebSocket, reason: string): void {\n if (this.aborted || this.ws !== ws) return;\n\n this.stopHeartbeat();\n this.ws = null;\n this.writeStatus(\"disconnected\", reason);\n this.emitDisconnected(reason);\n this.scheduleReconnect();\n\n try {\n if (ws.readyState !== WebSocket.CLOSED) {\n ws.terminate();\n }\n } catch {\n // ignore\n }\n }\n\n private logSendSkipped(kind: \"send\" | \"sendRaw\", detail?: string): void {\n const now = Date.now();\n const shouldLog =\n this.skippedSendLogLastAt === null ||\n now - this.skippedSendLogLastAt >= SEND_SKIPPED_LOG_INTERVAL_MS;\n\n if (!shouldLog) {\n this.skippedSendLogSuppressed++;\n return;\n }\n\n const suppressedSuffix =\n this.skippedSendLogSuppressed > 0\n ? `, suppressed=${this.skippedSendLogSuppressed}`\n : \"\";\n const detailSuffix = detail ? `, ${detail}` : \"\";\n this.opts.logger.warn(\n `Relay tunnel: ▶ ${kind} skipped, ws not open (readyState=${this.ws?.readyState ?? \"null\"}${detailSuffix}${suppressedSuffix})`,\n );\n this.skippedSendLogLastAt = now;\n this.skippedSendLogSuppressed = 0;\n }\n\n private scheduleReconnect(opts: { immediate?: boolean } = {}): void {\n if (this.aborted) return;\n\n // 已经排了一次重连就不再重排,避免 error+close 双触发或 watchdog 与 close 双触发时\n // attempt 被多扣、退避被无意义重置。\n if (this.reconnectTimer) {\n return;\n }\n\n // 服务端要求稍后重试(close 1013)时立即回连,跳过指数退避;\n // 其余情况按 base * 2^attempt 退避,封顶 60s。\n const baseMs = this.opts.reconnectBackoffMs;\n const delayMs = opts.immediate\n ? 0\n : Math.min(baseMs * Math.pow(2, this.reconnectAttempt), 60_000);\n this.reconnectAttempt++;\n\n this.opts.logger.info(\n `Relay tunnel: reconnecting in ${delayMs}ms (attempt ${this.reconnectAttempt}${opts.immediate ? \", immediate\" : \"\"})`,\n );\n\n this.reconnectTimer = setTimeout(() => {\n this.reconnectTimer = null;\n if (!this.aborted) {\n this.connect().catch((err) => {\n this.opts.logger.error(`Relay tunnel: reconnect failed: ${err}`);\n });\n }\n }, delayMs);\n }\n}\n",
102
99
  "import createWebSocketStream from './lib/stream.js';\nimport extension from './lib/extension.js';\nimport PerMessageDeflate from './lib/permessage-deflate.js';\nimport Receiver from './lib/receiver.js';\nimport Sender from './lib/sender.js';\nimport subprotocol from './lib/subprotocol.js';\nimport WebSocket from './lib/websocket.js';\nimport WebSocketServer from './lib/websocket-server.js';\n\nexport {\n createWebSocketStream,\n extension,\n PerMessageDeflate,\n Receiver,\n Sender,\n subprotocol,\n WebSocket,\n WebSocketServer\n};\n\nexport default WebSocket;\n",
103
100
  "export function previewText(text: string | undefined, max = 200): string {\n if (!text) return \"\";\n return text.length <= max ? text : `${text.substring(0, max)}…`;\n}\n\nexport function maskSecret(value: string | undefined): string {\n if (!value) return \"empty\";\n if (value.length <= 8) {\n return `${value.slice(0, 2)}...${value.slice(-2)}`;\n }\n return `${value.slice(0, 4)}...${value.slice(-4)}`;\n}\n\nexport function redactUrlSecrets(rawUrl: string): string {\n try {\n const url = new URL(rawUrl);\n for (const key of [\"apiKey\", \"token\", \"access_token\"]) {\n const value = url.searchParams.get(key);\n if (value) {\n url.searchParams.set(key, maskSecret(value));\n }\n }\n return url.toString();\n } catch {\n return rawUrl.replace(\n /([?&](?:apiKey|token|access_token)=)([^&]+)/gi,\n (_match, prefix: string, value: string) => {\n let decoded = value;\n try {\n decoded = decodeURIComponent(value);\n } catch {\n // Keep the original value when the URL is malformed.\n }\n return `${prefix}${maskSecret(decoded)}`;\n },\n );\n }\n}\n\nexport function findHeaderValue(\n headers: Record<string, string> | undefined,\n key: string,\n): string | undefined {\n if (!headers) return undefined;\n const lowerKey = key.toLowerCase();\n for (const [headerKey, headerValue] of Object.entries(headers)) {\n if (headerKey.toLowerCase() === lowerKey) {\n return headerValue;\n }\n }\n return undefined;\n}\n\nexport function summarizeRequestHeaders(headers: Record<string, string> | undefined): string {\n const contentType = findHeaderValue(headers, \"content-type\");\n const requestId = findHeaderValue(headers, \"x-request-id\");\n const parts: string[] = [];\n if (contentType) {\n parts.push(`contentType=${contentType}`);\n }\n if (requestId) {\n parts.push(`xRequestId=${previewText(requestId, 120)}`);\n }\n return parts.length ? `, ${parts.join(\", \")}` : \"\";\n}\n",
104
101
  "import { randomUUID } from \"node:crypto\";\nimport WebSocket from \"ws\";\nimport { importHostSdkModule } from \"../host-sdk.js\";\nimport type { RelayClient } from \"./relay-client.js\";\nimport type { ReqFrame, InboundFrame, RequestFrame } from \"./types.js\";\nimport { previewText } from \"./utils.js\";\nimport { resolveHostStateDir } from \"../host.js\";\nimport {\n type DeviceIdentity,\n resolveClientStateDir,\n loadOrCreateDeviceIdentity,\n loadDeviceAuthToken,\n storeDeviceAuthToken,\n clearDeviceAuthToken,\n buildDeviceAuthPayload,\n signDevicePayload,\n publicKeyRawBase64UrlFromPem,\n} from \"./device-identity.js\";\nimport { handleHttpRequest } from \"./http-proxy.js\";\nimport { WsProxy } from \"./ws-proxy.js\";\nimport { slimRelayFrameText } from \"./frame-slimmer.js\";\n\n// ─── Types ───\n\nexport const RELAY_TUNNEL_GATEWAY_CLIENT_INSTANCE_ID =\n \"phone-notifications-relay-tunnel\";\n\nconst GATEWAY_OPERATOR_SCOPES = [\n \"operator.admin\",\n \"operator.approvals\",\n \"operator.pairing\",\n \"operator.read\",\n \"operator.write\",\n] as const;\n\n// openclaw 2026.5.12 起本地 gateway RPC 要求 protocol >= 4;保留 3 以兼容老网关。\nconst GATEWAY_RPC_MIN_PROTOCOL = 3;\nconst GATEWAY_RPC_MAX_PROTOCOL = 4;\n\ninterface ProxyOptions {\n stateDir?: string;\n hostStateDir?: string;\n gatewayBaseUrl: string;\n /** Gateway 鉴权模式 */\n gatewayAuthMode?: \"token\" | \"password\";\n /** Gateway 鉴权 token,代理请求到本地 gateway 时使用 */\n gatewayToken?: string;\n /** Gateway 鉴权密码,代理请求到本地 gateway 时使用 */\n gatewayPassword?: string;\n client: RelayClient;\n logger: {\n info: (msg: string) => void;\n warn: (msg: string) => void;\n error: (msg: string) => void;\n };\n}\n\nconst MAX_AUTO_PAIRING_APPROVALS = 3;\nconst RECENT_ABORTED_CHAT_RUN_TTL_MS = 60_000;\nconst GATEWAY_RPC_HANDSHAKE_TIMEOUT_MS = 10_000;\nconst MAX_GATEWAY_WS_PENDING = 200;\n\ninterface PendingGatewayReqMeta {\n method: string;\n sessionKey?: string;\n}\n\ninterface PendingGatewayPayload {\n payload: string;\n reqId?: string;\n}\n\ninterface RecentAbortedChatRun {\n sessionKey: string;\n abortedAtMs: number;\n}\n\ntype ApproveDevicePairingFn = (\n requestId: string,\n hostStateDir?: string,\n) => Promise<unknown>;\n\nlet approveDevicePairingPromise: Promise<ApproveDevicePairingFn | null> | null =\n null;\nlet approveDevicePairingWarned = false;\ntype DeviceBootstrap = typeof import(\"openclaw/plugin-sdk/device-bootstrap\");\n\nfunction formatErrorMessage(err: unknown): string {\n if (err instanceof Error && err.message) return err.message;\n return String(err);\n}\n\nasync function loadApproveDevicePairing(\n logger: ProxyOptions[\"logger\"],\n): Promise<ApproveDevicePairingFn | null> {\n if (!approveDevicePairingPromise) {\n approveDevicePairingPromise = importHostSdkModule<DeviceBootstrap>(\n \"openclaw/plugin-sdk/device-bootstrap\",\n )\n .then((mod) =>\n typeof mod.approveDevicePairing === \"function\"\n ? (mod.approveDevicePairing as ApproveDevicePairingFn)\n : null,\n )\n .catch((err: unknown) => {\n if (!approveDevicePairingWarned) {\n approveDevicePairingWarned = true;\n logger.warn(\n `TunnelProxy: local gateway auto-pairing disabled because current OpenClaw runtime does not expose device bootstrap SDK (${formatErrorMessage(err)})`,\n );\n }\n return null;\n });\n }\n\n const approveDevicePairing = await approveDevicePairingPromise;\n if (!approveDevicePairing && !approveDevicePairingWarned) {\n approveDevicePairingWarned = true;\n logger.warn(\n \"TunnelProxy: local gateway auto-pairing disabled because current OpenClaw runtime does not expose device bootstrap SDK\",\n );\n }\n return approveDevicePairing;\n}\n\n/**\n * 透明代理:接收 Relay 转发的请求帧,代理到本地 gateway,回传响应帧。\n * 支持 HTTP 请求代理和 WebSocket 连接代理。\n */\nexport class TunnelProxy {\n /** 到本地 Gateway 的持久 RPC WebSocket 连接 */\n private gatewayWs: WebSocket | null = null;\n private gatewayWsConnecting = false;\n /** 握手是否已完成(收到 hello-ok) */\n private gatewayWsReady = false;\n /** 收到本地自动配对成功后,在 close 回调里触发重连 */\n private gatewayWsReconnectRequested = false;\n /** 本地自动配对审批进行中,期间 Gateway 关闭连接时先保留 pending 请求。 */\n private gatewayWsPairingApprovalPending = false;\n /** 防止配对失败时无限重连 */\n private gatewayWsAutoPairingApprovals = 0;\n /** 等待 Gateway WS 握手完成后发送的帧队列 */\n private gatewayWsPending: PendingGatewayPayload[] = [];\n /** 记录已转发到 Gateway 的 req 元信息,便于回包时做定向处理。 */\n private gatewayReqMetaById = new Map<string, PendingGatewayReqMeta>();\n /** 最近由用户手动中断的 chat.run,用于过滤 runtime 误补发的 synthetic failure。 */\n private recentAbortedChatRuns = new Map<string, RecentAbortedChatRun>();\n /** Relay 断开或服务停止时要中断的 HTTP 代理请求。 */\n private httpAbortControllers = new Map<string, AbortController>();\n\n /** 设备身份,用于 Gateway connect 握手 */\n private deviceIdentity: DeviceIdentity;\n\n private readonly stateDir: string;\n private readonly hostStateDir: string;\n private readonly wsProxy: WsProxy;\n\n constructor(private readonly opts: ProxyOptions) {\n this.stateDir = resolveClientStateDir(opts.stateDir);\n this.hostStateDir = opts.hostStateDir ?? resolveHostStateDir();\n this.deviceIdentity = loadOrCreateDeviceIdentity(this.stateDir);\n opts.logger.info(\n `TunnelProxy: loaded device identity (deviceId=${this.deviceIdentity.deviceId})`,\n );\n this.wsProxy = new WsProxy({\n gatewayBaseUrl: opts.gatewayBaseUrl,\n client: opts.client,\n logger: opts.logger,\n });\n }\n\n // ─── Frame dispatcher ───\n\n /** 处理从 Relay 收到的入站帧 */\n async handleFrame(frame: InboundFrame): Promise<void> {\n this.opts.logger.info(\n `TunnelProxy: handling frame type=${frame.type}, id=${\"id\" in frame ? frame.id : \"N/A\"}`,\n );\n switch (frame.type) {\n case \"request\":\n await this.handleRequestFrame(frame);\n break;\n case \"req\":\n this.handleReqFrame(frame);\n break;\n case \"ws_open\":\n this.wsProxy.handleWsOpen(frame);\n break;\n case \"ws_data\":\n this.wsProxy.handleWsData(frame);\n break;\n case \"ws_close\":\n this.wsProxy.handleWsClose(frame);\n break;\n default:\n this.opts.logger.warn(\n `TunnelProxy: unknown frame type=\"${(frame as any).type}\", id=${\"id\" in frame ? (frame as any).id : \"N/A\"}, forwarding raw to gateway`,\n );\n // 未知帧类型也尝试通过 RPC WS 转发,避免静默丢弃\n this.forwardRawToGateway(JSON.stringify(frame));\n break;\n }\n }\n\n /** 清理所有代理的 WebSocket 连接 */\n cleanup(): void {\n this.opts.logger.info(\n `TunnelProxy: cleanup, closing ${this.wsProxy.activeCount} active WS connections, gatewayWs=${!!this.gatewayWs}`,\n );\n this.wsProxy.cleanup();\n for (const [id, controller] of this.httpAbortControllers) {\n this.opts.logger.info(`TunnelProxy: aborting HTTP proxy id=${id}`);\n controller.abort();\n }\n this.httpAbortControllers.clear();\n\n const gatewayWs = this.gatewayWs;\n this.gatewayWs = null;\n this.gatewayWsReady = false;\n this.gatewayWsConnecting = false;\n this.gatewayWsReconnectRequested = false;\n this.gatewayWsPairingApprovalPending = false;\n this.gatewayWsAutoPairingApprovals = 0;\n this.gatewayWsPending = [];\n this.gatewayReqMetaById.clear();\n this.recentAbortedChatRuns.clear();\n if (gatewayWs) {\n try {\n gatewayWs.close();\n } catch {\n // ignore\n }\n }\n }\n\n // ─── Gateway RPC WebSocket ───\n\n private async handleRequestFrame(frame: RequestFrame): Promise<void> {\n const controller = new AbortController();\n this.httpAbortControllers.set(frame.id, controller);\n try {\n await handleHttpRequest(\n {\n ...this.opts,\n abortSignal: controller.signal,\n },\n frame,\n );\n } finally {\n this.httpAbortControllers.delete(frame.id);\n }\n }\n\n private pushGatewayPending(\n entry: PendingGatewayPayload,\n reason: string,\n ): boolean {\n if (this.gatewayWsPending.length >= MAX_GATEWAY_WS_PENDING) {\n this.opts.logger.error(\n `TunnelProxy: gateway WS pending queue overflow (${this.gatewayWsPending.length}/${MAX_GATEWAY_WS_PENDING}); failing ${entry.reqId ? `req id=${entry.reqId}` : \"raw frame\"}`,\n );\n this.failGatewayPendingEntry(\n entry,\n \"GATEWAY_RPC_QUEUE_FULL\",\n \"local gateway RPC queue is full\",\n );\n return false;\n }\n\n this.gatewayWsPending.push(entry);\n this.opts.logger.info(\n `TunnelProxy: gateway WS pending queue size=${this.gatewayWsPending.length} (${reason})`,\n );\n return true;\n }\n\n /** 将未知帧原样转发到 Gateway WS */\n private forwardRawToGateway(payload: string): void {\n if (this.gatewayWsReady && this.gatewayWs?.readyState === WebSocket.OPEN) {\n this.sendGatewayPayload(this.gatewayWs, { payload }, \"raw frame\");\n } else {\n if (\n this.pushGatewayPending(\n { payload },\n \"raw frame queued before gateway WS ready\",\n )\n ) {\n this.ensureGatewayWs();\n }\n }\n }\n\n /** 处理 Relay 转发的 Gateway RPC 请求帧,原样通过 WebSocket 发给本地 Gateway */\n private handleReqFrame(frame: ReqFrame): void {\n const payload = JSON.stringify(frame);\n this.gatewayReqMetaById.set(frame.id, {\n method: frame.method,\n sessionKey: this.normalizeSessionKey(frame.params?.sessionKey),\n });\n this.opts.logger.info(\n `TunnelProxy: req id=${frame.id} method=${frame.method} → gateway WS (${payload.length} chars)`,\n );\n\n if (this.gatewayWsReady && this.gatewayWs?.readyState === WebSocket.OPEN) {\n this.sendGatewayPayload(\n this.gatewayWs,\n { payload, reqId: frame.id },\n `req id=${frame.id}`,\n );\n } else {\n this.opts.logger.info(\n `TunnelProxy: req id=${frame.id} queued, gateway WS not ready yet`,\n );\n if (\n this.pushGatewayPending(\n { payload, reqId: frame.id },\n `req id=${frame.id} queued before gateway WS handshake`,\n )\n ) {\n this.ensureGatewayWs();\n }\n }\n }\n\n private sendGatewayRpcError(\n id: string,\n code: string,\n message: string,\n ): void {\n this.gatewayReqMetaById.delete(id);\n this.opts.client.sendRaw(\n JSON.stringify({\n type: \"res\",\n id,\n ok: false,\n error: {\n code,\n message,\n },\n }),\n );\n }\n\n private failGatewayPendingEntry(\n entry: PendingGatewayPayload,\n code: string,\n message: string,\n ): void {\n if (!entry.reqId) return;\n this.sendGatewayRpcError(entry.reqId, code, message);\n }\n\n private failGatewayPending(code: string, message: string): void {\n if (this.gatewayWsPending.length === 0) return;\n const pending = this.gatewayWsPending;\n this.gatewayWsPending = [];\n this.opts.logger.warn(\n `TunnelProxy: failing ${pending.length} pending gateway RPC frame(s): ${message}`,\n );\n for (const entry of pending) {\n this.failGatewayPendingEntry(entry, code, message);\n }\n }\n\n private failGatewayInflight(code: string, message: string): void {\n if (this.gatewayReqMetaById.size === 0) return;\n const ids = [...this.gatewayReqMetaById.keys()];\n this.opts.logger.warn(\n `TunnelProxy: failing ${ids.length} in-flight gateway RPC request(s): ${message}`,\n );\n for (const id of ids) {\n this.sendGatewayRpcError(id, code, message);\n }\n }\n\n private failAllGatewayRequests(code: string, message: string): void {\n this.failGatewayPending(code, message);\n this.failGatewayInflight(code, message);\n }\n\n private sendGatewayPayload(\n ws: WebSocket,\n entry: PendingGatewayPayload,\n context: string,\n ): boolean {\n try {\n ws.send(entry.payload);\n return true;\n } catch (err) {\n const message = formatErrorMessage(err);\n this.opts.logger.warn(\n `TunnelProxy: RPC WS send failed for ${context}: ${message}`,\n );\n this.failGatewayPendingEntry(\n entry,\n \"GATEWAY_RPC_SEND_FAILED\",\n `local gateway RPC send failed: ${message}`,\n );\n this.failGatewayInflight(\n \"GATEWAY_RPC_SEND_FAILED\",\n \"local gateway RPC connection closed after send failure\",\n );\n if (this.gatewayWs === ws) {\n this.gatewayWs = null;\n this.gatewayWsReady = false;\n this.gatewayWsConnecting = false;\n }\n try {\n if (typeof (ws as any).terminate === \"function\") {\n (ws as any).terminate();\n } else {\n ws.close();\n }\n } catch {\n // ignore\n }\n return false;\n }\n }\n\n // ─── Gateway connect auth helpers ───\n\n private resolveGatewayConnectAuth():\n | { token?: string; password?: string }\n | undefined {\n const token = this.opts.gatewayToken?.trim() || undefined;\n const password = this.opts.gatewayPassword?.trim() || undefined;\n if (!token && !password) return undefined;\n return { token, password };\n }\n\n private loadStoredDeviceToken(role: string): string | undefined {\n return (\n loadDeviceAuthToken({\n stateDir: this.stateDir,\n deviceId: this.deviceIdentity.deviceId,\n role,\n })?.token ?? undefined\n );\n }\n\n private buildGatewayConnectAuth(role: string): {\n auth?: { token?: string; deviceToken?: string; password?: string };\n authToken?: string;\n authPassword?: string;\n deviceToken?: string;\n } {\n const explicitAuth = this.resolveGatewayConnectAuth();\n const authPassword = explicitAuth?.password?.trim() || undefined;\n const explicitGatewayToken = explicitAuth?.token?.trim() || undefined;\n const deviceToken = explicitGatewayToken\n ? undefined\n : this.loadStoredDeviceToken(role);\n const authToken = explicitGatewayToken ?? deviceToken;\n const auth =\n authToken || authPassword || deviceToken\n ? { token: authToken, deviceToken, password: authPassword }\n : undefined;\n return { auth, authToken, authPassword, deviceToken };\n }\n\n private storeIssuedDeviceToken(params: {\n fallbackRole: string;\n fallbackScopes: string[];\n authInfo: any;\n }): void {\n const token = params.authInfo?.deviceToken;\n if (typeof token !== \"string\" || !token.trim()) return;\n const role =\n typeof params.authInfo?.role === \"string\" && params.authInfo.role.trim()\n ? params.authInfo.role.trim()\n : params.fallbackRole;\n const scopes = Array.isArray(params.authInfo?.scopes)\n ? params.authInfo.scopes.filter(\n (scope: unknown): scope is string =>\n typeof scope === \"string\" && !!scope.trim(),\n )\n : params.fallbackScopes;\n storeDeviceAuthToken({\n stateDir: this.stateDir,\n deviceId: this.deviceIdentity.deviceId,\n role,\n token: token.trim(),\n scopes,\n });\n }\n\n private maybeClearStoredDeviceTokenOnMismatch(code: number, reason: string): void {\n const explicitAuth = this.resolveGatewayConnectAuth();\n if (explicitAuth?.token || explicitAuth?.password) return;\n if (code !== 1008 || !reason.toLowerCase().includes(\"device token mismatch\")) return;\n clearDeviceAuthToken({\n stateDir: this.stateDir,\n deviceId: this.deviceIdentity.deviceId,\n role: \"operator\",\n });\n this.opts.logger.warn(\n `TunnelProxy: cleared stale stored device token after gateway mismatch (deviceId=${this.deviceIdentity.deviceId})`,\n );\n }\n\n private async maybeAutoApproveGatewayPairing(frame: any): Promise<boolean> {\n const errorCode =\n typeof frame?.error?.code === \"string\" ? frame.error.code : undefined;\n const detailsCode =\n typeof frame?.error?.details?.code === \"string\"\n ? frame.error.details.code\n : undefined;\n if (errorCode !== \"NOT_PAIRED\" && detailsCode !== \"PAIRING_REQUIRED\") {\n return false;\n }\n\n const requestId =\n typeof frame?.error?.details?.requestId === \"string\"\n ? frame.error.details.requestId.trim()\n : \"\";\n const reason =\n typeof frame?.error?.details?.reason === \"string\"\n ? frame.error.details.reason.trim()\n : \"\";\n\n if (!requestId) {\n this.opts.logger.warn(\n \"TunnelProxy: gateway pairing required but requestId missing; unable to auto-approve\",\n );\n return false;\n }\n\n if (\n reason &&\n reason !== \"not-paired\" &&\n reason !== \"scope-upgrade\"\n ) {\n this.opts.logger.warn(\n `TunnelProxy: gateway pairing required with unsupported reason=${reason}; skipping auto-approve`,\n );\n return false;\n }\n\n if (this.gatewayWsAutoPairingApprovals >= MAX_AUTO_PAIRING_APPROVALS) {\n this.opts.logger.warn(\n `TunnelProxy: reached auto-pairing retry limit (${MAX_AUTO_PAIRING_APPROVALS}); requestId=${requestId}`,\n );\n return false;\n }\n\n this.gatewayWsPairingApprovalPending = true;\n try {\n const approveDevicePairing = await loadApproveDevicePairing(this.opts.logger);\n if (!approveDevicePairing) {\n this.gatewayWsPairingApprovalPending = false;\n return false;\n }\n const approved = await approveDevicePairing(requestId, this.hostStateDir);\n if (!approved) {\n this.gatewayWsPairingApprovalPending = false;\n this.opts.logger.warn(\n `TunnelProxy: gateway pairing request ${requestId} not found in host state ${this.hostStateDir}`,\n );\n return false;\n }\n this.gatewayWsAutoPairingApprovals += 1;\n this.gatewayWsReconnectRequested = true;\n this.gatewayWsPairingApprovalPending = false;\n this.opts.logger.info(\n `TunnelProxy: auto-approved local gateway pairing request ${requestId} (reason=${reason || \"not-paired\"}, hostStateDir=${this.hostStateDir}, approval=${this.gatewayWsAutoPairingApprovals}/${MAX_AUTO_PAIRING_APPROVALS})`,\n );\n return true;\n } catch (err: any) {\n this.gatewayWsPairingApprovalPending = false;\n this.opts.logger.warn(\n `TunnelProxy: failed to auto-approve gateway pairing request ${requestId}: ${err?.message ?? String(err)}`,\n );\n return false;\n }\n }\n\n // ─── Gateway RPC WebSocket lifecycle ───\n\n private normalizeSessionKey(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n }\n\n private normalizeRunId(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n }\n\n private pruneRecentAbortedChatRuns(now = Date.now()): void {\n for (const [runId, entry] of this.recentAbortedChatRuns) {\n if (now - entry.abortedAtMs > RECENT_ABORTED_CHAT_RUN_TTL_MS) {\n this.recentAbortedChatRuns.delete(runId);\n }\n }\n }\n\n private rememberRecentAbortedChatRun(runId: unknown, sessionKey: unknown): void {\n const normalizedRunId = this.normalizeRunId(runId);\n const normalizedSessionKey = this.normalizeSessionKey(sessionKey);\n if (!normalizedRunId || !normalizedSessionKey) return;\n this.pruneRecentAbortedChatRuns();\n this.recentAbortedChatRuns.set(normalizedRunId, {\n sessionKey: normalizedSessionKey,\n abortedAtMs: Date.now(),\n });\n }\n\n private getAssistantMessageText(message: any): string {\n if (!message || typeof message !== \"object\") return \"\";\n if (typeof message.text === \"string\") return message.text;\n if (!Array.isArray(message.content)) return \"\";\n return message.content\n .filter(\n (item: any) =>\n item &&\n typeof item === \"object\" &&\n item.type === \"text\" &&\n typeof item.text === \"string\",\n )\n .map((item: any) => item.text)\n .join(\"\");\n }\n\n private looksLikeSyntheticAbortFailureText(text: string): boolean {\n const normalized = text.trim().toLowerCase();\n if (!normalized) return false;\n return (\n normalized.includes(\"agent failed before reply:\") &&\n normalized.includes(\"aborted\") &&\n normalized.includes(\"openclaw logs --follow\")\n );\n }\n\n private isSyntheticAbortHistoryMessage(\n message: any,\n sessionKey: string,\n ): boolean {\n const text = this.getAssistantMessageText(message);\n if (!this.looksLikeSyntheticAbortFailureText(text)) return false;\n const messageTimestamp =\n typeof message?.timestamp === \"number\" ? message.timestamp : null;\n const now = Date.now();\n this.pruneRecentAbortedChatRuns(now);\n for (const entry of this.recentAbortedChatRuns.values()) {\n if (entry.sessionKey !== sessionKey) continue;\n if (messageTimestamp === null) return true;\n if (Math.abs(messageTimestamp - entry.abortedAtMs) <= RECENT_ABORTED_CHAT_RUN_TTL_MS) {\n return true;\n }\n }\n return false;\n }\n\n private maybeRewriteGatewayFrame(text: string, frame: any): string | null {\n this.pruneRecentAbortedChatRuns();\n\n if (\n frame?.type === \"event\" &&\n frame?.event === \"chat\" &&\n frame?.payload?.state === \"aborted\"\n ) {\n this.rememberRecentAbortedChatRun(\n frame.payload?.runId,\n frame.payload?.sessionKey,\n );\n return text;\n }\n\n if (frame?.type === \"ack\" && frame?.ok === false && typeof frame?.id === \"string\") {\n this.gatewayReqMetaById.delete(frame.id);\n return text;\n }\n\n let reqMeta: PendingGatewayReqMeta | undefined;\n if (frame?.type === \"res\" && typeof frame?.id === \"string\") {\n reqMeta = this.gatewayReqMetaById.get(frame.id);\n this.gatewayReqMetaById.delete(frame.id);\n }\n\n if (\n frame?.type === \"res\" &&\n frame?.ok === true &&\n reqMeta?.method === \"chat.abort\"\n ) {\n const runIds = Array.isArray(frame?.payload?.runIds)\n ? frame.payload.runIds\n : [];\n for (const runId of runIds) {\n this.rememberRecentAbortedChatRun(runId, reqMeta.sessionKey);\n }\n return text;\n }\n\n if (\n frame?.type === \"event\" &&\n frame?.event === \"chat\" &&\n frame?.payload?.state === \"final\"\n ) {\n const runId = this.normalizeRunId(frame?.payload?.runId);\n const assistantText = this.getAssistantMessageText(frame?.payload?.message);\n const recentAbort = runId ? this.recentAbortedChatRuns.get(runId) : undefined;\n if (\n recentAbort &&\n this.looksLikeSyntheticAbortFailureText(assistantText)\n ) {\n this.opts.logger.info(\n `TunnelProxy: suppressing synthetic abort failure final for runId=${runId}`,\n );\n return null;\n }\n return text;\n }\n\n if (\n frame?.type === \"res\" &&\n frame?.ok === true &&\n reqMeta?.method === \"chat.history\" &&\n Array.isArray(frame?.payload?.messages)\n ) {\n const sessionKey =\n this.normalizeSessionKey(frame?.payload?.sessionKey) ?? reqMeta.sessionKey;\n if (!sessionKey) return text;\n const filteredMessages = frame.payload.messages.filter(\n (message: any) =>\n !this.isSyntheticAbortHistoryMessage(message, sessionKey),\n );\n if (filteredMessages.length === frame.payload.messages.length) {\n return text;\n }\n this.opts.logger.info(\n `TunnelProxy: removed ${frame.payload.messages.length - filteredMessages.length} synthetic abort history message(s) for session=${sessionKey}`,\n );\n return JSON.stringify({\n ...frame,\n payload: {\n ...frame.payload,\n messages: filteredMessages,\n },\n });\n }\n\n return text;\n }\n\n /** 确保到本地 Gateway 的 RPC WebSocket 已连接且握手完成 */\n private ensureGatewayWs(): void {\n if (this.gatewayWsReady && this.gatewayWs?.readyState === WebSocket.OPEN)\n return;\n if (this.gatewayWsConnecting) return;\n\n this.gatewayWsConnecting = true;\n this.gatewayWsReady = false;\n const wsUrl = this.opts.gatewayBaseUrl.replace(/^http/, \"ws\");\n\n this.opts.logger.info(\n `TunnelProxy: RPC WS connecting to gateway ${wsUrl} (pending=${this.gatewayWsPending.length})`,\n );\n\n let ws: WebSocket;\n try {\n ws = new WebSocket(wsUrl, {\n handshakeTimeout: GATEWAY_RPC_HANDSHAKE_TIMEOUT_MS,\n });\n } catch (err) {\n const message = formatErrorMessage(err);\n this.gatewayWsConnecting = false;\n this.opts.logger.error(\n `TunnelProxy: RPC WS failed to create gateway connection: ${message}`,\n );\n this.failAllGatewayRequests(\n \"GATEWAY_RPC_CONNECT_FAILED\",\n `local gateway RPC connect failed: ${message}`,\n );\n return;\n }\n\n this.gatewayWs = ws;\n let handshakeTimer: ReturnType<typeof setTimeout> | null = setTimeout(\n () => {\n handshakeTimer = null;\n if (this.gatewayWs !== ws || this.gatewayWsReady) return;\n this.opts.logger.warn(\n `TunnelProxy: RPC WS handshake timed out after ${GATEWAY_RPC_HANDSHAKE_TIMEOUT_MS}ms (pending=${this.gatewayWsPending.length})`,\n );\n this.gatewayWs = null;\n this.gatewayWsReady = false;\n this.gatewayWsConnecting = false;\n this.failAllGatewayRequests(\n \"GATEWAY_RPC_HANDSHAKE_TIMEOUT\",\n \"local gateway RPC handshake timed out\",\n );\n try {\n if (typeof (ws as any).terminate === \"function\") {\n (ws as any).terminate();\n } else {\n ws.close();\n }\n } catch {\n // ignore\n }\n },\n GATEWAY_RPC_HANDSHAKE_TIMEOUT_MS,\n );\n\n const clearHandshakeTimer = () => {\n if (handshakeTimer) {\n clearTimeout(handshakeTimer);\n handshakeTimer = null;\n }\n };\n\n ws.on(\"open\", () => {\n this.opts.logger.info(\n `TunnelProxy: RPC WS tcp connected, waiting for connect.challenge (pending=${this.gatewayWsPending.length})`,\n );\n });\n\n ws.on(\"message\", async (data: WebSocket.RawData) => {\n let text: string;\n if (typeof data === \"string\") {\n text = data;\n } else if (Buffer.isBuffer(data)) {\n text = data.toString();\n } else {\n text = Buffer.from(data as ArrayBuffer).toString();\n }\n\n const preview = text.length <= 500 ? text : text.substring(0, 500) + \"…\";\n this.opts.logger.info(\n `TunnelProxy: RPC WS ← gateway (${text.length} chars): ${preview}`,\n );\n\n let frame: any;\n try {\n frame = JSON.parse(text);\n } catch {\n this.opts.logger.warn(\n \"TunnelProxy: RPC WS received non-JSON, ignoring\",\n );\n return;\n }\n\n // 1) 收到 connect.challenge → 回复 connect 请求(带设备身份签名)\n if (frame.type === \"event\" && frame.event === \"connect.challenge\") {\n this.handleConnectChallenge(ws, frame);\n return;\n }\n\n // 2) 收到 connect 的 hello-ok 响应 → 握手完成,flush 待发帧\n if (\n frame.type === \"res\" &&\n frame.ok === true &&\n frame.payload?.type === \"hello-ok\"\n ) {\n clearHandshakeTimer();\n this.storeIssuedDeviceToken({\n fallbackRole: \"operator\",\n fallbackScopes: [...GATEWAY_OPERATOR_SCOPES],\n authInfo: frame.payload?.auth,\n });\n this.gatewayWsAutoPairingApprovals = 0;\n this.gatewayWsReconnectRequested = false;\n this.gatewayWsReady = true;\n this.gatewayWsConnecting = false;\n this.opts.logger.info(\n `TunnelProxy: RPC WS handshake done (hello-ok), flushing ${this.gatewayWsPending.length} pending frames`,\n );\n const pending = this.gatewayWsPending;\n this.gatewayWsPending = [];\n for (let i = 0; i < pending.length; i++) {\n const entry = pending[i];\n if (!this.sendGatewayPayload(ws, entry, entry.reqId ?? \"pending frame\")) {\n return;\n }\n }\n return;\n }\n\n // 3) 收到 connect 失败响应 → 关闭连接\n if (frame.type === \"res\" && frame.ok === false && !this.gatewayWsReady) {\n const autoApproved = await this.maybeAutoApproveGatewayPairing(frame);\n if (autoApproved) {\n const wsAlreadyClosed =\n ws.readyState === WebSocket.CLOSING ||\n ws.readyState === WebSocket.CLOSED ||\n this.gatewayWs !== ws;\n this.opts.logger.info(\n `TunnelProxy: RPC WS handshake requested local pairing approval, reconnecting${wsAlreadyClosed ? \" immediately\" : \" after close\"} (pending=${this.gatewayWsPending.length})`,\n );\n if (wsAlreadyClosed) {\n this.gatewayWsReconnectRequested = false;\n this.ensureGatewayWs();\n return;\n }\n ws.close(1000, \"pairing approved, reconnecting\");\n return;\n }\n this.opts.logger.error(\n `TunnelProxy: RPC WS handshake failed (pending=${this.gatewayWsPending.length}): ${previewText(JSON.stringify(frame.error), 500)}`,\n );\n clearHandshakeTimer();\n this.failAllGatewayRequests(\n \"GATEWAY_RPC_HANDSHAKE_FAILED\",\n `local gateway RPC handshake failed: ${previewText(JSON.stringify(frame.error), 500)}`,\n );\n ws.close();\n return;\n }\n\n // 4) 握手后的普通消息 → 瘦身超大工具输出后透传回 Relay\n const rewritten = this.maybeRewriteGatewayFrame(text, frame);\n if (rewritten !== null) {\n this.opts.client.sendRaw(slimRelayFrameText(rewritten, this.opts.logger));\n }\n });\n\n ws.on(\"close\", (code: number, reason: Buffer) => {\n clearHandshakeTimer();\n const wasReady = this.gatewayWsReady;\n const pendingCount = this.gatewayWsPending.length;\n const reasonText = reason.toString();\n const shouldReconnect =\n this.gatewayWsReconnectRequested && pendingCount > 0;\n const shouldHoldForPairing =\n this.gatewayWsPairingApprovalPending && pendingCount > 0;\n this.opts.logger.info(\n `TunnelProxy: RPC WS closed by gateway (code=${code}, reason=${reasonText}, ready=${wasReady}, pending=${pendingCount}, activeWs=${this.wsProxy.activeCount})`,\n );\n if (this.gatewayWs === ws) {\n this.gatewayWs = null;\n this.gatewayWsReady = false;\n }\n this.gatewayWsConnecting = false;\n this.maybeClearStoredDeviceTokenOnMismatch(code, reasonText);\n if (shouldReconnect) {\n this.gatewayWsReconnectRequested = false;\n this.opts.logger.info(\n `TunnelProxy: retrying RPC WS after local pairing approval (pending=${this.gatewayWsPending.length})`,\n );\n queueMicrotask(() => this.ensureGatewayWs());\n } else if (\n !shouldHoldForPairing &&\n (pendingCount > 0 || this.gatewayReqMetaById.size > 0)\n ) {\n this.failAllGatewayRequests(\n \"GATEWAY_RPC_DISCONNECTED\",\n `local gateway RPC disconnected: code=${code}, reason=${reasonText}`,\n );\n }\n });\n\n ws.on(\"error\", (err: Error) => {\n clearHandshakeTimer();\n this.opts.logger.warn(\n `TunnelProxy: RPC WS error: ${err.message} (ready=${this.gatewayWsReady}, pending=${this.gatewayWsPending.length}, activeWs=${this.wsProxy.activeCount})`,\n );\n const shouldFailRequests =\n this.gatewayWs === ws &&\n (this.gatewayWsPending.length > 0 || this.gatewayReqMetaById.size > 0);\n this.gatewayWsConnecting = false;\n if (this.gatewayWs === ws) {\n this.gatewayWs = null;\n this.gatewayWsReady = false;\n }\n if (shouldFailRequests) {\n this.failAllGatewayRequests(\n \"GATEWAY_RPC_ERROR\",\n `local gateway RPC error: ${err.message}`,\n );\n }\n try {\n if (typeof (ws as any).terminate === \"function\") {\n (ws as any).terminate();\n }\n } catch {\n // ignore\n }\n });\n }\n\n private handleConnectChallenge(ws: WebSocket, frame: any): void {\n const challengeNonce: string = frame.payload?.nonce ?? \"\";\n const connectRequestId = `tunnel-connect-${randomUUID()}`;\n const role = \"operator\";\n const scopes = [...GATEWAY_OPERATOR_SCOPES];\n const gatewayConnectAuth = this.buildGatewayConnectAuth(role);\n this.opts.logger.info(\n `TunnelProxy: received connect.challenge (nonce=${challengeNonce}, connectReqId=${connectRequestId}, hasToken=${!!gatewayConnectAuth.authToken}, hasPassword=${!!gatewayConnectAuth.authPassword}, hasDeviceToken=${!!gatewayConnectAuth.deviceToken}), sending connect request with device identity`,\n );\n\n const signedAtMs = Date.now();\n const clientId = \"gateway-client\";\n const clientMode = \"backend\";\n\n const authPayload = buildDeviceAuthPayload({\n deviceId: this.deviceIdentity.deviceId,\n clientId,\n clientMode,\n role,\n scopes,\n signedAtMs,\n token: gatewayConnectAuth.authToken ?? null,\n nonce: challengeNonce,\n });\n const signature = signDevicePayload(\n this.deviceIdentity.privateKeyPem,\n authPayload,\n );\n\n const connectReq = {\n type: \"req\",\n id: connectRequestId,\n method: \"connect\",\n params: {\n minProtocol: GATEWAY_RPC_MIN_PROTOCOL,\n maxProtocol: GATEWAY_RPC_MAX_PROTOCOL,\n client: {\n id: clientId,\n version: \"1.0.0\",\n platform: process.platform,\n mode: clientMode,\n instanceId: RELAY_TUNNEL_GATEWAY_CLIENT_INSTANCE_ID,\n },\n role,\n scopes,\n ...(gatewayConnectAuth.auth ? { auth: gatewayConnectAuth.auth } : {}),\n device: {\n id: this.deviceIdentity.deviceId,\n publicKey: publicKeyRawBase64UrlFromPem(\n this.deviceIdentity.publicKeyPem,\n ),\n signature,\n signedAt: signedAtMs,\n nonce: challengeNonce,\n },\n },\n };\n ws.send(JSON.stringify(connectReq));\n }\n}\n",
@@ -106,7 +103,7 @@
106
103
  "import * as crypto from \"node:crypto\";\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { resolveStateDir } from \"../host.js\";\n\n// ─── Types ───\n\nexport interface DeviceIdentity {\n deviceId: string;\n publicKeyPem: string;\n privateKeyPem: string;\n}\n\nexport interface DeviceAuthEntry {\n token: string;\n role: string;\n scopes: string[];\n updatedAtMs: number;\n}\n\ninterface DeviceAuthStore {\n version: 1;\n deviceId: string;\n tokens: Record<string, DeviceAuthEntry>;\n}\n\n// ─── Crypto helpers ───\n\nconst ED25519_SPKI_PREFIX = Buffer.from(\"302a300506032b6570032100\", \"hex\");\n\nexport function base64UrlEncode(buf: Buffer): string {\n return buf\n .toString(\"base64\")\n .replaceAll(\"+\", \"-\")\n .replaceAll(\"/\", \"_\")\n .replace(/=+$/g, \"\");\n}\n\nexport function derivePublicKeyRaw(publicKeyPem: string): Buffer {\n const spki = crypto.createPublicKey(publicKeyPem).export({\n type: \"spki\",\n format: \"der\",\n });\n if (\n spki.length === ED25519_SPKI_PREFIX.length + 32 &&\n spki.subarray(0, ED25519_SPKI_PREFIX.length).equals(ED25519_SPKI_PREFIX)\n )\n return spki.subarray(ED25519_SPKI_PREFIX.length);\n return spki;\n}\n\nexport function fingerprintPublicKey(publicKeyPem: string): string {\n const raw = derivePublicKeyRaw(publicKeyPem);\n return crypto.createHash(\"sha256\").update(raw).digest(\"hex\");\n}\n\nexport function publicKeyRawBase64UrlFromPem(publicKeyPem: string): string {\n return base64UrlEncode(derivePublicKeyRaw(publicKeyPem));\n}\n\nexport function signDevicePayload(privateKeyPem: string, payload: string): string {\n const key = crypto.createPrivateKey(privateKeyPem);\n return base64UrlEncode(crypto.sign(null, Buffer.from(payload, \"utf8\"), key));\n}\n\nexport function buildDeviceAuthPayload(params: {\n deviceId: string;\n clientId: string;\n clientMode: string;\n role: string;\n scopes: string[];\n signedAtMs: number;\n token: string | null;\n nonce: string;\n}): string {\n const scopes = params.scopes.join(\",\");\n const token = params.token ?? \"\";\n return [\n \"v2\",\n params.deviceId,\n params.clientId,\n params.clientMode,\n params.role,\n scopes,\n String(params.signedAtMs),\n token,\n params.nonce,\n ].join(\"|\");\n}\n\n// ─── File I/O helpers ───\n\nexport function resolveClientStateDir(stateDir: string | undefined): string {\n return stateDir ?? resolveStateDir();\n}\n\nfunction ensureDir(filePath: string): void {\n fs.mkdirSync(path.dirname(filePath), { recursive: true });\n}\n\nfunction resolveIdentityPath(stateDir: string): string {\n return path.join(stateDir, \"identity\", \"device.json\");\n}\n\nfunction normalizeDeviceAuthRole(role: string): string {\n return role.trim();\n}\n\nfunction normalizeDeviceAuthScopes(scopes: string[]): string[] {\n const out = new Set<string>();\n for (const scope of scopes) {\n const trimmed = scope.trim();\n if (trimmed) {\n out.add(trimmed);\n }\n }\n return [...out].sort();\n}\n\nfunction resolveDeviceAuthPath(stateDir: string): string {\n return path.join(stateDir, \"identity\", \"device-auth.json\");\n}\n\nfunction readDeviceAuthStore(filePath: string): DeviceAuthStore | null {\n try {\n if (!fs.existsSync(filePath)) return null;\n const raw = fs.readFileSync(filePath, \"utf8\");\n const parsed = JSON.parse(raw);\n if (parsed?.version !== 1 || typeof parsed.deviceId !== \"string\") return null;\n if (!parsed.tokens || typeof parsed.tokens !== \"object\") return null;\n return parsed as DeviceAuthStore;\n } catch {\n return null;\n }\n}\n\nfunction writeDeviceAuthStore(filePath: string, store: DeviceAuthStore): void {\n ensureDir(filePath);\n fs.writeFileSync(filePath, `${JSON.stringify(store, null, 2)}\\n`, {\n mode: 0o600,\n });\n try {\n fs.chmodSync(filePath, 0o600);\n } catch {\n // ignore chmod errors on unsupported filesystems\n }\n}\n\n// ─── Token CRUD ───\n\nexport function loadDeviceAuthToken(params: {\n stateDir: string;\n deviceId: string;\n role: string;\n}): DeviceAuthEntry | null {\n const store = readDeviceAuthStore(resolveDeviceAuthPath(params.stateDir));\n if (!store || store.deviceId !== params.deviceId) return null;\n const entry = store.tokens[normalizeDeviceAuthRole(params.role)];\n if (!entry || typeof entry.token !== \"string\") return null;\n return entry;\n}\n\nexport function storeDeviceAuthToken(params: {\n stateDir: string;\n deviceId: string;\n role: string;\n token: string;\n scopes: string[];\n}): DeviceAuthEntry {\n const filePath = resolveDeviceAuthPath(params.stateDir);\n const existing = readDeviceAuthStore(filePath);\n const role = normalizeDeviceAuthRole(params.role);\n const next: DeviceAuthStore = {\n version: 1,\n deviceId: params.deviceId,\n tokens:\n existing && existing.deviceId === params.deviceId && existing.tokens\n ? { ...existing.tokens }\n : {},\n };\n const entry: DeviceAuthEntry = {\n token: params.token,\n role,\n scopes: normalizeDeviceAuthScopes(params.scopes),\n updatedAtMs: Date.now(),\n };\n next.tokens[role] = entry;\n writeDeviceAuthStore(filePath, next);\n return entry;\n}\n\nexport function clearDeviceAuthToken(params: {\n stateDir: string;\n deviceId: string;\n role: string;\n}): void {\n const filePath = resolveDeviceAuthPath(params.stateDir);\n const store = readDeviceAuthStore(filePath);\n if (!store || store.deviceId !== params.deviceId) return;\n const role = normalizeDeviceAuthRole(params.role);\n if (!store.tokens[role]) return;\n const next: DeviceAuthStore = {\n version: 1,\n deviceId: store.deviceId,\n tokens: { ...store.tokens },\n };\n delete next.tokens[role];\n writeDeviceAuthStore(filePath, next);\n}\n\n// ─── Identity lifecycle ───\n\nexport function loadOrCreateDeviceIdentity(stateDir: string): DeviceIdentity {\n const filePath = resolveIdentityPath(stateDir);\n try {\n if (fs.existsSync(filePath)) {\n const raw = fs.readFileSync(filePath, \"utf8\");\n const parsed = JSON.parse(raw);\n if (\n parsed?.version === 1 &&\n typeof parsed.deviceId === \"string\" &&\n typeof parsed.publicKeyPem === \"string\" &&\n typeof parsed.privateKeyPem === \"string\"\n ) {\n const derivedId = fingerprintPublicKey(parsed.publicKeyPem);\n return {\n deviceId: derivedId,\n publicKeyPem: parsed.publicKeyPem,\n privateKeyPem: parsed.privateKeyPem,\n };\n }\n }\n } catch {\n // fall through to generate\n }\n // Generate new identity\n const { publicKey, privateKey } = crypto.generateKeyPairSync(\"ed25519\");\n const publicKeyPem = publicKey\n .export({ type: \"spki\", format: \"pem\" })\n .toString();\n const privateKeyPem = privateKey\n .export({ type: \"pkcs8\", format: \"pem\" })\n .toString();\n const identity: DeviceIdentity = {\n deviceId: fingerprintPublicKey(publicKeyPem),\n publicKeyPem,\n privateKeyPem,\n };\n fs.mkdirSync(path.dirname(filePath), { recursive: true });\n const stored = {\n version: 1,\n ...identity,\n createdAtMs: Date.now(),\n };\n ensureDir(filePath);\n fs.writeFileSync(filePath, `${JSON.stringify(stored, null, 2)}\\n`, {\n mode: 0o600,\n });\n return identity;\n}\n",
107
104
  "import type { RelayClient } from \"./relay-client.js\";\nimport type { RequestFrame } from \"./types.js\";\nimport { previewText, summarizeRequestHeaders } from \"./utils.js\";\n\nexport const RELAY_INTERNAL_HTTP_HEADER = \"x-openclaw-relay-internal\";\n\nexport interface HttpProxyOptions {\n gatewayBaseUrl: string;\n gatewayAuthMode?: \"token\" | \"password\";\n gatewayToken?: string;\n gatewayPassword?: string;\n abortSignal?: AbortSignal;\n client: RelayClient;\n logger: {\n info: (msg: string) => void;\n warn: (msg: string) => void;\n error: (msg: string) => void;\n };\n}\n\n// ─── 路径映射 ───\n\nconst PATH_MAP: Record<string, string> = {\n \"/api/message/messageBridge/send\": \"/notifications\",\n};\n\nexport function mapPath(p: string): string {\n return PATH_MAP[p] ?? p;\n}\n\n// ─── Auth helpers ───\n\nfunction resolveGatewayConnectAuth(opts: HttpProxyOptions):\n | { token?: string; password?: string }\n | undefined {\n const token = opts.gatewayToken?.trim() || undefined;\n const password = opts.gatewayPassword?.trim() || undefined;\n if (!token && !password) return undefined;\n return { token, password };\n}\n\nexport function buildLocalGatewayAuthAttempts(\n opts: HttpProxyOptions,\n baseHeaders: Record<string, string>,\n): Array<{ label: string; headers: Record<string, string> }> {\n const auth = resolveGatewayConnectAuth(opts);\n const attempts: Array<{ label: string; headers: Record<string, string> }> = [];\n const seen = new Set<string>();\n const authMode = opts.gatewayAuthMode;\n\n const addAttempt = (kind: \"token\" | \"password\", secret?: string): void => {\n if (!secret) return;\n\n const dedupeKey = `${kind}:${secret}`;\n if (seen.has(dedupeKey)) return;\n seen.add(dedupeKey);\n\n const headers = { ...baseHeaders };\n headers.authorization = `Bearer ${secret}`;\n\n if (kind === \"password\") {\n headers[\"x-openclaw-password\"] = secret;\n } else {\n delete headers[\"x-openclaw-password\"];\n }\n\n attempts.push({\n label: kind === \"token\" ? \"gateway-token\" : \"gateway-password\",\n headers,\n });\n };\n\n if (authMode === \"password\") {\n addAttempt(\"password\", auth?.password);\n addAttempt(\"token\", auth?.token);\n } else {\n addAttempt(\"token\", auth?.token);\n addAttempt(\"password\", auth?.password);\n }\n\n if (attempts.length === 0) {\n attempts.push({\n label: \"no-auth\",\n headers: { ...baseHeaders },\n });\n }\n\n return attempts;\n}\n\n// ─── HTTP request proxy ───\n\nexport async function handleHttpRequest(\n opts: HttpProxyOptions,\n frame: RequestFrame,\n): Promise<void> {\n const mappedPath = mapPath(frame.path);\n const url = new URL(mappedPath, opts.gatewayBaseUrl);\n const startedAtMs = Date.now();\n\n // 代理到本地 gateway 时,替换外部鉴权头为本地 gateway token/password。\n const localHeaders: Record<string, string> = {};\n for (const [k, v] of Object.entries(frame.headers ?? {})) {\n const lower = k.toLowerCase();\n if (lower !== \"authorization\" && lower !== \"x-openclaw-password\") {\n localHeaders[k] = v;\n }\n }\n localHeaders[RELAY_INTERNAL_HTTP_HEADER] = \"1\";\n\n const authAttempts = buildLocalGatewayAuthAttempts(opts, localHeaders);\n opts.logger.info(\n `TunnelProxy: HTTP id=${frame.id} ${frame.method} ${frame.path} → ${url.toString()}${summarizeRequestHeaders(frame.headers)}, authAttempts=${authAttempts.map((a) => a.label).join(\" -> \")}, body=${previewText(frame.body)}`,\n );\n\n try {\n for (let attemptIndex = 0; attemptIndex < authAttempts.length; attemptIndex++) {\n const attempt = authAttempts[attemptIndex];\n opts.logger.info(\n `TunnelProxy: HTTP id=${frame.id} attempt ${attemptIndex + 1}/${authAttempts.length} auth=${attempt.label}`,\n );\n const res = await fetch(url.toString(), {\n method: frame.method,\n headers: attempt.headers,\n signal: opts.abortSignal,\n body:\n frame.method !== \"GET\" && frame.method !== \"HEAD\"\n ? frame.body\n : undefined,\n });\n\n const hasFallback = attemptIndex < authAttempts.length - 1;\n if (res.status === 401 && hasFallback) {\n const body = await res.text();\n opts.logger.warn(\n `TunnelProxy: HTTP id=${frame.id} local gateway auth via ${attempt.label} returned 401 after ${Date.now() - startedAtMs}ms, retrying next credential${body ? `, body=${previewText(body)}` : \"\"}`,\n );\n continue;\n }\n\n await sendHttpResponse(opts, {\n frameId: frame.id,\n method: frame.method,\n path: mappedPath,\n authLabel: attempt.label,\n startedAtMs,\n res,\n });\n return;\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n opts.logger.error(\n `TunnelProxy: HTTP id=${frame.id} ${frame.method} ${mappedPath} failed after ${Date.now() - startedAtMs}ms: ${message}`,\n );\n opts.client.send({\n type: \"proxy_error\",\n id: frame.id,\n status: 502,\n message: `gateway unreachable: ${message}`,\n });\n }\n}\n\n// ─── Response helpers ───\n\nasync function sendHttpResponse(\n opts: HttpProxyOptions,\n params: {\n frameId: string;\n method: string;\n path: string;\n authLabel: string;\n startedAtMs: number;\n res: Response;\n },\n): Promise<void> {\n const { frameId, method, path, authLabel, startedAtMs, res } = params;\n const contentType = res.headers.get(\"content-type\") ?? \"\";\n const isStreaming = contentType.includes(\"text/event-stream\");\n const elapsedMs = Date.now() - startedAtMs;\n\n opts.logger.info(\n `TunnelProxy: HTTP id=${frameId} ${method} ${path} <= ${res.status} (${elapsedMs}ms, auth=${authLabel}, content-type=${contentType}, streaming=${isStreaming})`,\n );\n\n if (isStreaming && res.body) {\n await streamResponse(opts, frameId, res, startedAtMs);\n return;\n }\n\n const body = await res.text();\n opts.logger.info(\n `TunnelProxy: HTTP id=${frameId} response body=${previewText(body)}`,\n );\n const headers: Record<string, string> = {};\n res.headers.forEach((value, key) => {\n headers[key] = value;\n });\n\n opts.client.send({\n type: \"proxy_response\",\n id: frameId,\n status: res.status,\n headers,\n body,\n });\n}\n\nasync function streamResponse(\n opts: HttpProxyOptions,\n requestId: string,\n res: Response,\n startedAtMs: number,\n): Promise<void> {\n const reader = res.body!.getReader();\n const decoder = new TextDecoder();\n let chunkCount = 0;\n\n opts.logger.info(`TunnelProxy: stream start id=${requestId}`);\n\n try {\n while (true) {\n if (opts.abortSignal?.aborted) {\n throw new DOMException(\"relay tunnel disconnected\", \"AbortError\");\n }\n const { done, value } = await reader.read();\n if (done) break;\n\n chunkCount++;\n const chunk = decoder.decode(value, { stream: true });\n opts.logger.info(\n `TunnelProxy: stream delta id=${requestId} chunk#${chunkCount} (${chunk.length} chars)`,\n );\n opts.client.send({\n type: \"stream\",\n id: requestId,\n state: \"delta\",\n data: chunk,\n });\n }\n\n opts.logger.info(\n `TunnelProxy: stream end id=${requestId}, total chunks=${chunkCount}, totalElapsedMs=${Date.now() - startedAtMs}`,\n );\n opts.client.send({\n type: \"stream\",\n id: requestId,\n state: \"end\",\n data: \"\",\n });\n } catch (err) {\n opts.logger.error(\n `TunnelProxy: stream error id=${requestId} after ${chunkCount} chunks and ${Date.now() - startedAtMs}ms: ${err instanceof Error ? err.message : String(err)}`,\n );\n opts.client.send({\n type: \"proxy_error\",\n id: requestId,\n status: 502,\n message: `stream error: ${err instanceof Error ? err.message : String(err)}`,\n });\n }\n}\n",
108
105
  "import WebSocket from \"ws\";\nimport type { RelayClient } from \"./relay-client.js\";\nimport type { WsOpenFrame, WsDataFrame, WsCloseFrame } from \"./types.js\";\nimport { mapPath } from \"./http-proxy.js\";\n\nconst GATEWAY_WS_HANDSHAKE_TIMEOUT_MS = 10_000;\n\nexport interface WsProxyOptions {\n gatewayBaseUrl: string;\n client: RelayClient;\n logger: {\n info: (msg: string) => void;\n warn: (msg: string) => void;\n error: (msg: string) => void;\n };\n}\n\nexport class WsProxy {\n /** 活跃的 WebSocket 代理连接,按帧 id 索引 */\n private connections = new Map<string, WebSocket>();\n\n constructor(private readonly opts: WsProxyOptions) {}\n\n get activeCount(): number {\n return this.connections.size;\n }\n\n cleanup(): void {\n const connections = [...this.connections.entries()];\n this.connections.clear();\n for (const [id, ws] of connections) {\n this.opts.logger.info(`WsProxy: closing WS id=${id}`);\n try {\n ws.close();\n } catch {\n // ignore\n }\n }\n }\n\n handleWsOpen(frame: WsOpenFrame): void {\n const wsUrl =\n this.opts.gatewayBaseUrl.replace(/^http/, \"ws\") +\n mapPath(frame.path);\n this.opts.logger.info(\n `TunnelProxy: WS open id=${frame.id}, path=${frame.path} → ${wsUrl}`,\n );\n\n try {\n const existing = this.connections.get(frame.id);\n if (existing) {\n this.opts.logger.warn(\n `TunnelProxy: WS id=${frame.id} already exists, closing previous gateway connection`,\n );\n try {\n existing.close(1000, \"replaced by new relay ws_open\");\n } catch {\n // ignore\n }\n }\n\n const ws = new WebSocket(wsUrl, {\n headers: frame.headers,\n handshakeTimeout: GATEWAY_WS_HANDSHAKE_TIMEOUT_MS,\n });\n this.connections.set(frame.id, ws);\n\n let notifiedClosed = false;\n let connectTimer: ReturnType<typeof setTimeout> | null = setTimeout(\n () => {\n connectTimer = null;\n if (\n this.connections.get(frame.id) !== ws ||\n ws.readyState === WebSocket.OPEN\n ) {\n return;\n }\n this.opts.logger.warn(\n `TunnelProxy: WS id=${frame.id} connect timed out after ${GATEWAY_WS_HANDSHAKE_TIMEOUT_MS}ms`,\n );\n notifyClosed(1011, \"gateway websocket connect timeout\");\n try {\n if (typeof (ws as any).terminate === \"function\") {\n (ws as any).terminate();\n } else {\n ws.close();\n }\n } catch {\n // ignore\n }\n },\n GATEWAY_WS_HANDSHAKE_TIMEOUT_MS,\n );\n\n const clearConnectTimer = () => {\n if (connectTimer) {\n clearTimeout(connectTimer);\n connectTimer = null;\n }\n };\n\n const notifyClosed = (code: number, reason: string) => {\n if (notifiedClosed) return;\n notifiedClosed = true;\n clearConnectTimer();\n if (this.connections.get(frame.id) === ws) {\n this.connections.delete(frame.id);\n }\n this.opts.client.send({\n type: \"ws_close\",\n id: frame.id,\n code,\n reason,\n });\n };\n\n ws.on(\"open\", () => {\n clearConnectTimer();\n if (this.connections.get(frame.id) !== ws) {\n try {\n ws.close(1000, \"stale relay ws_open\");\n } catch {\n // ignore\n }\n return;\n }\n this.opts.logger.info(\n `TunnelProxy: WS id=${frame.id} connected to gateway, active=${this.connections.size}`,\n );\n this.opts.client.send({\n type: \"ws_opened\",\n id: frame.id,\n });\n });\n\n ws.on(\"message\", (data: WebSocket.RawData) => {\n if (this.connections.get(frame.id) !== ws) {\n return;\n }\n const text =\n typeof data === \"string\"\n ? data\n : Buffer.isBuffer(data)\n ? data.toString()\n : String(data);\n\n this.opts.logger.info(\n `TunnelProxy: WS id=${frame.id} ← gateway data (${text.length} chars): ${text.substring(0, 200)}`,\n );\n this.opts.client.send({\n type: \"ws_data\",\n id: frame.id,\n data: text,\n });\n });\n\n ws.on(\"close\", (code: number, reason: Buffer) => {\n clearConnectTimer();\n const reasonText = reason.toString();\n const isCurrent = this.connections.get(frame.id) === ws;\n if (isCurrent) {\n this.connections.delete(frame.id);\n }\n this.opts.logger.info(\n `TunnelProxy: WS id=${frame.id} closed by gateway (code=${code}, reason=${reasonText}), active=${this.connections.size}`,\n );\n if (isCurrent) {\n notifyClosed(code, reasonText);\n }\n });\n\n ws.on(\"error\", (err: Error) => {\n clearConnectTimer();\n this.opts.logger.warn(\n `TunnelProxy: WS id=${frame.id} error: ${err.message}, active=${this.connections.size}`,\n );\n if (this.connections.get(frame.id) === ws) {\n notifyClosed(1011, err.message);\n }\n try {\n if (typeof (ws as any).terminate === \"function\") {\n (ws as any).terminate();\n }\n } catch {\n // ignore\n }\n });\n } catch (err) {\n this.opts.logger.error(\n `TunnelProxy: WS id=${frame.id} failed to connect: ${err instanceof Error ? err.message : String(err)}`,\n );\n this.opts.client.send({\n type: \"ws_close\",\n id: frame.id,\n code: 1011,\n reason: `failed to connect: ${err instanceof Error ? err.message : String(err)}`,\n });\n }\n }\n\n handleWsData(frame: WsDataFrame): void {\n const ws = this.connections.get(frame.id);\n if (ws?.readyState === WebSocket.OPEN) {\n this.opts.logger.info(\n `TunnelProxy: WS id=${frame.id} → gateway data (${frame.data.length} chars): ${frame.data.substring(0, 200)}`,\n );\n ws.send(frame.data);\n } else {\n this.opts.logger.warn(\n `TunnelProxy: WS id=${frame.id} data dropped, ws not open (exists=${!!ws}, readyState=${ws?.readyState ?? \"N/A\"})`,\n );\n }\n }\n\n handleWsClose(frame: WsCloseFrame): void {\n const ws = this.connections.get(frame.id);\n if (ws) {\n this.opts.logger.info(\n `TunnelProxy: WS id=${frame.id} close requested by relay (code=${frame.code ?? 1000}, reason=${frame.reason ?? \"\"})`,\n );\n this.connections.delete(frame.id);\n try {\n ws.close(frame.code ?? 1000, frame.reason ?? \"\");\n } catch {\n // ignore\n }\n } else {\n this.opts.logger.warn(\n `TunnelProxy: WS id=${frame.id} close requested but connection not found`,\n );\n }\n }\n}\n",
109
- "/**\n * Relay 出站帧瘦身:截断超大的工具输出,避免单帧超过 App 端 WebSocket\n * 单消息上限(iOS URLSessionWebSocketTask 默认 1MiB)导致连接被杀。\n *\n * 已知的放大点(见 2026-05-12 日志,单次命令输出曾产生两帧各 ~226KB):\n * - agent 事件 stream=\"command_output\" 的 data.output 带全量命令输出;\n * - agent 事件 stream=\"item\"(kind=\"command\")的 data.summary 重复同一份全文;\n * - chat.history 响应里 toolResult 消息携带历史工具输出。\n * - sessions.list 响应里 lastMessagePreview/lastMessage 会夹带 memory 任务长文本。\n */\n\n/** 低于该长度的帧直接透传,不付出 parse/stringify 开销。 */\nexport const SLIM_TRIGGER_CHARS = 32 * 1024;\n\n/** 工具输出类文本的保留上限(command_output.output、history 里的 toolResult)。 */\nexport const AGENT_OUTPUT_CAP = 16 * 1024;\n\n/** 会话列表仅展示预览,避免 memory 沉淀任务把列表响应撑到数百 KB。 */\nexport const SESSION_LIST_PREVIEW_CAP = 256;\n\n/** 列表项若附带 lastMessage 全文,也只保留短摘要;详情由 chat.history 拉取。 */\nexport const SESSION_LIST_MESSAGE_CAP = 1024;\n\n/**\n * command 类 item 的 summary 保留上限。全量输出已由同一 toolCallId 的\n * command_output 帧承载(按 AGENT_OUTPUT_CAP 截断),summary 只需短预览,\n * 避免同一份内容以两帧全文重复下发。\n */\nexport const COMMAND_SUMMARY_CAP = 4 * 1024;\n\n/** 截断时避免落在 UTF-16 代理对中间,防止产生孤立代理项。 */\nfunction safeSliceEnd(text: string, end: number): number {\n const code = text.charCodeAt(end - 1);\n return code >= 0xd800 && code <= 0xdbff ? end - 1 : end;\n}\n\nfunction safeSliceStart(text: string, start: number): number {\n const code = text.charCodeAt(start);\n return code >= 0xdc00 && code <= 0xdfff ? start + 1 : start;\n}\n\n/** 保留首尾截断中段;命令输出的报错通常在结尾,尾部多留一些。 */\nexport function truncateText(text: string, cap: number): string {\n if (text.length <= cap) return text;\n const headLen = safeSliceEnd(text, Math.ceil(cap * 0.6));\n const tailStart = safeSliceStart(text, text.length - Math.floor(cap * 0.4));\n const omitted = tailStart - headLen;\n return (\n text.slice(0, headLen) +\n `\\n……[内容过长,已省略中间 ${omitted} 字符]……\\n` +\n text.slice(tailStart)\n );\n}\n\n/** 列表预览用单行截断,避免把换行省略标记直接展示在会话列表里。 */\nexport function truncatePreviewText(text: string, cap: number): string {\n if (text.length <= cap) return text;\n const end = safeSliceEnd(text, cap);\n return `${text.slice(0, end)}…[已截断 ${text.length - end} 字符]`;\n}\n\nfunction slimAgentEventPayload(payload: any): boolean {\n const data = payload?.data;\n if (!data || typeof data !== \"object\") return false;\n\n let changed = false;\n if (\n payload.stream === \"command_output\" &&\n typeof data.output === \"string\" &&\n data.output.length > AGENT_OUTPUT_CAP\n ) {\n data.output = truncateText(data.output, AGENT_OUTPUT_CAP);\n changed = true;\n }\n if (payload.stream === \"item\" && typeof data.summary === \"string\") {\n const cap =\n data.kind === \"command\" ? COMMAND_SUMMARY_CAP : AGENT_OUTPUT_CAP;\n if (data.summary.length > cap) {\n data.summary = truncateText(data.summary, cap);\n changed = true;\n }\n }\n return changed;\n}\n\nfunction slimToolResultContentItem(item: any): boolean {\n if (!item || typeof item !== \"object\") return false;\n\n let changed = false;\n if (\n typeof item.text === \"string\" &&\n item.text.length > AGENT_OUTPUT_CAP\n ) {\n item.text = truncateText(item.text, AGENT_OUTPUT_CAP);\n changed = true;\n }\n if (Array.isArray(item.content)) {\n for (const nested of item.content) {\n if (slimToolResultContentItem(nested)) changed = true;\n }\n }\n return changed;\n}\n\nfunction slimStringProp(\n target: any,\n prop: string,\n cap: number,\n preview = false,\n): boolean {\n if (!target || typeof target !== \"object\") return false;\n if (typeof target[prop] !== \"string\" || target[prop].length <= cap) {\n return false;\n }\n target[prop] = preview\n ? truncatePreviewText(target[prop], cap)\n : truncateText(target[prop], cap);\n return true;\n}\n\nfunction slimMessageTextContent(value: any, cap: number): boolean {\n if (!value) return false;\n\n if (typeof value === \"object\" && !Array.isArray(value)) {\n let changed = false;\n if (slimStringProp(value, \"text\", cap)) changed = true;\n if (slimStringProp(value, \"content\", cap)) changed = true;\n if (Array.isArray(value.content)) {\n for (const item of value.content) {\n if (slimMessageTextContent(item, cap)) changed = true;\n }\n }\n return changed;\n }\n\n if (Array.isArray(value)) {\n let changed = false;\n for (const item of value) {\n if (slimMessageTextContent(item, cap)) changed = true;\n }\n return changed;\n }\n\n return false;\n}\n\n/** 截断 chat.history 等响应里 toolResult 消息/内容块携带的工具输出全文。 */\nfunction slimMessagesPayload(payload: any): boolean {\n if (!Array.isArray(payload?.messages)) return false;\n\n let changed = false;\n for (const message of payload.messages) {\n if (!message || typeof message !== \"object\") continue;\n const isToolRole =\n message.role === \"toolResult\" || message.role === \"tool\";\n\n if (isToolRole && typeof message.content === \"string\") {\n if (message.content.length > AGENT_OUTPUT_CAP) {\n message.content = truncateText(message.content, AGENT_OUTPUT_CAP);\n changed = true;\n }\n continue;\n }\n\n if (!Array.isArray(message.content)) continue;\n for (const item of message.content) {\n if (!item || typeof item !== \"object\") continue;\n const isToolItem =\n item.type === \"toolResult\" || item.type === \"tool_result\";\n if (isToolRole || isToolItem) {\n if (slimToolResultContentItem(item)) changed = true;\n }\n }\n }\n return changed;\n}\n\n/** 截断 sessions.list 列表项里的长预览,保留 chat.history 的完整详情通道。 */\nfunction slimSessionsListPayload(payload: any): boolean {\n if (!Array.isArray(payload?.sessions)) return false;\n\n let changed = false;\n for (const session of payload.sessions) {\n if (!session || typeof session !== \"object\") continue;\n if (\n slimStringProp(\n session,\n \"lastMessagePreview\",\n SESSION_LIST_PREVIEW_CAP,\n true,\n )\n ) {\n changed = true;\n }\n if (slimMessageTextContent(session.lastMessage, SESSION_LIST_MESSAGE_CAP)) {\n changed = true;\n }\n }\n return changed;\n}\n\n/** 就地瘦身已解析的帧,返回是否有修改。 */\nexport function slimRelayFrame(frame: any): boolean {\n if (frame?.type === \"event\" && frame.event === \"agent\") {\n return slimAgentEventPayload(frame.payload);\n }\n if (frame?.type === \"res\" && frame.ok === true) {\n const sessionsChanged = slimSessionsListPayload(frame.payload);\n const messagesChanged = slimMessagesPayload(frame.payload);\n return sessionsChanged || messagesChanged;\n }\n return false;\n}\n\n/**\n * 对即将回传 Relay 的帧文本瘦身。小帧与无法解析的帧原样返回。\n */\nexport function slimRelayFrameText(\n text: string,\n logger?: { info: (msg: string) => void },\n): string {\n if (text.length <= SLIM_TRIGGER_CHARS) return text;\n\n let frame: any;\n try {\n frame = JSON.parse(text);\n } catch {\n return text;\n }\n\n if (!slimRelayFrame(frame)) return text;\n\n const slimmed = JSON.stringify(frame);\n logger?.info(\n `TunnelProxy: slimmed relay-bound frame ${text.length} → ${slimmed.length} chars`,\n );\n return slimmed;\n}\n",
106
+ "/**\n * Relay 出站帧瘦身:截断超大的工具输出,避免单帧超过 App 端 WebSocket\n * 单消息上限(iOS URLSessionWebSocketTask 默认 1MiB)导致连接被杀。\n *\n * 已知的放大点(见 2026-05-12 日志,单次命令输出曾产生两帧各 ~226KB):\n * - agent 事件 stream=\"command_output\" 的 data.output 带全量命令输出;\n * - agent 事件 stream=\"item\"(kind=\"command\")的 data.summary 重复同一份全文;\n * - chat.history 响应里 toolResult 消息携带历史工具输出。\n * - sessions.list 响应里 lastMessagePreview/lastMessage 会夹带 memory 任务长文本。\n * - cron.runs 响应里 summary/result/output 会夹带后台任务长总结。\n * - config.get 响应会携带 raw config 与完整模型配置,移动端准备会话无需全量文本。\n */\n\n/** 低于该长度的帧直接透传,不付出 parse/stringify 开销。 */\nexport const SLIM_TRIGGER_CHARS = 24 * 1024;\n\n/** 工具输出类文本的保留上限(command_output.output、history 里的 toolResult)。 */\nexport const AGENT_OUTPUT_CAP = 16 * 1024;\n\n/** 会话列表仅展示预览,避免 memory 沉淀任务把列表响应撑到数百 KB。 */\nexport const SESSION_LIST_PREVIEW_CAP = 256;\n\n/** 列表项若附带 lastMessage 全文,也只保留短摘要;详情由 chat.history 拉取。 */\nexport const SESSION_LIST_MESSAGE_CAP = 256;\n\n/** 移动端列表页最多保留最近的会话项,完整分页由后续 sessions.list 请求补齐。 */\nexport const SESSION_LIST_ITEM_CAP = 50;\n\n/** 会话列表里的普通标量字段保守截断,避免系统提示/路径等字段撑大列表响应。 */\nexport const SESSION_LIST_SCALAR_CAP = 512;\n\n/** 会话列表项只保留很小的嵌套对象,较大的详情字段交给详情接口加载。 */\nexport const SESSION_LIST_SMALL_VALUE_CAP = 1024;\n\n/** cron run 的历史输出只用于列表回看,保留首尾摘要即可。 */\nexport const CRON_RUN_TEXT_CAP = 1024;\n\n/** config.get 的长文本字段保留上限。 */\nexport const CONFIG_TEXT_CAP = 1024;\n\n/** config.get 中超长数组的保留项数,避免完整模型列表反复下发到移动端。 */\nexport const CONFIG_ARRAY_CAP = 50;\n\n/**\n * command 类 item 的 summary 保留上限。全量输出已由同一 toolCallId 的\n * command_output 帧承载(按 AGENT_OUTPUT_CAP 截断),summary 只需短预览,\n * 避免同一份内容以两帧全文重复下发。\n */\nexport const COMMAND_SUMMARY_CAP = 4 * 1024;\n\nconst CONFIG_RAW_PLACEHOLDER =\n \"[omitted by relay tunnel from large config.get response]\";\n\ninterface SlimResult<T = any> {\n value: T;\n changed: boolean;\n}\n\nfunction isRecord(value: unknown): value is Record<string, any> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isJsonScalar(value: unknown): boolean {\n return (\n value === null ||\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n );\n}\n\nfunction jsonLength(value: unknown): number {\n try {\n return JSON.stringify(value).length;\n } catch {\n return Number.POSITIVE_INFINITY;\n }\n}\n\nfunction slimScalar(\n value: unknown,\n cap: number,\n preview = false,\n): SlimResult<unknown> {\n if (typeof value !== \"string\" || value.length <= cap) {\n return { value, changed: false };\n }\n return {\n value: preview ? truncatePreviewText(value, cap) : truncateText(value, cap),\n changed: true,\n };\n}\n\n/** 截断时避免落在 UTF-16 代理对中间,防止产生孤立代理项。 */\nfunction safeSliceEnd(text: string, end: number): number {\n const code = text.charCodeAt(end - 1);\n return code >= 0xd800 && code <= 0xdbff ? end - 1 : end;\n}\n\nfunction safeSliceStart(text: string, start: number): number {\n const code = text.charCodeAt(start);\n return code >= 0xdc00 && code <= 0xdfff ? start + 1 : start;\n}\n\n/** 保留首尾截断中段;命令输出的报错通常在结尾,尾部多留一些。 */\nexport function truncateText(text: string, cap: number): string {\n if (text.length <= cap) return text;\n const headLen = safeSliceEnd(text, Math.ceil(cap * 0.6));\n const tailStart = safeSliceStart(text, text.length - Math.floor(cap * 0.4));\n const omitted = tailStart - headLen;\n return (\n text.slice(0, headLen) +\n `\\n……[内容过长,已省略中间 ${omitted} 字符]……\\n` +\n text.slice(tailStart)\n );\n}\n\n/** 列表预览用单行截断,避免把换行省略标记直接展示在会话列表里。 */\nexport function truncatePreviewText(text: string, cap: number): string {\n if (text.length <= cap) return text;\n const end = safeSliceEnd(text, cap);\n return `${text.slice(0, end)}…[已截断 ${text.length - end} 字符]`;\n}\n\nfunction slimAgentEventPayload(payload: any): boolean {\n const data = payload?.data;\n if (!data || typeof data !== \"object\") return false;\n\n let changed = false;\n if (\n payload.stream === \"command_output\" &&\n typeof data.output === \"string\" &&\n data.output.length > AGENT_OUTPUT_CAP\n ) {\n data.output = truncateText(data.output, AGENT_OUTPUT_CAP);\n changed = true;\n }\n if (payload.stream === \"item\" && typeof data.summary === \"string\") {\n const cap =\n data.kind === \"command\" ? COMMAND_SUMMARY_CAP : AGENT_OUTPUT_CAP;\n if (data.summary.length > cap) {\n data.summary = truncateText(data.summary, cap);\n changed = true;\n }\n }\n return changed;\n}\n\nfunction slimToolResultContentItem(item: any): boolean {\n if (!item || typeof item !== \"object\") return false;\n\n let changed = false;\n if (\n typeof item.text === \"string\" &&\n item.text.length > AGENT_OUTPUT_CAP\n ) {\n item.text = truncateText(item.text, AGENT_OUTPUT_CAP);\n changed = true;\n }\n if (Array.isArray(item.content)) {\n for (const nested of item.content) {\n if (slimToolResultContentItem(nested)) changed = true;\n }\n }\n return changed;\n}\n\nfunction slimStringProp(\n target: any,\n prop: string,\n cap: number,\n preview = false,\n): boolean {\n if (!target || typeof target !== \"object\") return false;\n if (typeof target[prop] !== \"string\" || target[prop].length <= cap) {\n return false;\n }\n target[prop] = preview\n ? truncatePreviewText(target[prop], cap)\n : truncateText(target[prop], cap);\n return true;\n}\n\nfunction slimMessageTextContent(value: any, cap: number): boolean {\n if (!value) return false;\n\n if (typeof value === \"object\" && !Array.isArray(value)) {\n let changed = false;\n if (slimStringProp(value, \"text\", cap)) changed = true;\n if (slimStringProp(value, \"content\", cap)) changed = true;\n if (Array.isArray(value.content)) {\n for (const item of value.content) {\n if (slimMessageTextContent(item, cap)) changed = true;\n }\n }\n return changed;\n }\n\n if (Array.isArray(value)) {\n let changed = false;\n for (const item of value) {\n if (slimMessageTextContent(item, cap)) changed = true;\n }\n return changed;\n }\n\n return false;\n}\n\nfunction slimSessionMessageValue(value: any, cap: number): SlimResult {\n if (isJsonScalar(value)) {\n return slimScalar(value, cap);\n }\n\n if (Array.isArray(value)) {\n const keepCount = Math.min(value.length, 6);\n const items: any[] = [];\n let changed = value.length > keepCount;\n for (let i = 0; i < keepCount; i++) {\n const item = slimSessionMessageValue(value[i], cap);\n items.push(item.value);\n if (item.changed) changed = true;\n }\n return { value: items, changed };\n }\n\n if (!isRecord(value)) return { value, changed: false };\n\n const slimmed: Record<string, any> = {};\n let changed = false;\n\n for (const [key, child] of Object.entries(value)) {\n if (key === \"content\" || key === \"text\" || key === \"summary\") {\n const item = slimSessionMessageValue(child, cap);\n slimmed[key] = item.value;\n if (item.changed) changed = true;\n continue;\n }\n\n if (isJsonScalar(child)) {\n const item = slimScalar(child, SESSION_LIST_SCALAR_CAP, true);\n slimmed[key] = item.value;\n if (item.changed) changed = true;\n continue;\n }\n\n if (jsonLength(child) <= SESSION_LIST_SMALL_VALUE_CAP) {\n slimmed[key] = child;\n continue;\n }\n\n changed = true;\n }\n\n if (Object.keys(slimmed).length !== Object.keys(value).length) {\n changed = true;\n }\n return { value: slimmed, changed };\n}\n\nfunction slimSessionListItem(session: any): SlimResult {\n if (!isRecord(session)) return { value: session, changed: false };\n\n const slimmed: Record<string, any> = {};\n let changed = false;\n\n for (const [key, value] of Object.entries(session)) {\n if (key === \"lastMessagePreview\") {\n const item = slimScalar(value, SESSION_LIST_PREVIEW_CAP, true);\n slimmed[key] = item.value;\n if (item.changed) changed = true;\n continue;\n }\n\n if (key === \"lastMessage\") {\n const item = slimSessionMessageValue(value, SESSION_LIST_MESSAGE_CAP);\n slimmed[key] = item.value;\n if (item.changed) changed = true;\n continue;\n }\n\n if (isJsonScalar(value)) {\n const item = slimScalar(value, SESSION_LIST_SCALAR_CAP, true);\n slimmed[key] = item.value;\n if (item.changed) changed = true;\n continue;\n }\n\n if (jsonLength(value) <= SESSION_LIST_SMALL_VALUE_CAP) {\n slimmed[key] = value;\n continue;\n }\n\n changed = true;\n }\n\n if (Object.keys(slimmed).length !== Object.keys(session).length) {\n changed = true;\n }\n return changed ? { value: slimmed, changed } : { value: session, changed };\n}\n\n/** 截断 chat.history 等响应里 toolResult 消息/内容块携带的工具输出全文。 */\nfunction slimMessagesPayload(payload: any): boolean {\n if (!Array.isArray(payload?.messages)) return false;\n\n let changed = false;\n for (const message of payload.messages) {\n if (!message || typeof message !== \"object\") continue;\n const isToolRole =\n message.role === \"toolResult\" || message.role === \"tool\";\n\n if (isToolRole && typeof message.content === \"string\") {\n if (message.content.length > AGENT_OUTPUT_CAP) {\n message.content = truncateText(message.content, AGENT_OUTPUT_CAP);\n changed = true;\n }\n continue;\n }\n\n if (!Array.isArray(message.content)) continue;\n for (const item of message.content) {\n if (!item || typeof item !== \"object\") continue;\n const isToolItem =\n item.type === \"toolResult\" || item.type === \"tool_result\";\n if (isToolRole || isToolItem) {\n if (slimToolResultContentItem(item)) changed = true;\n }\n }\n }\n return changed;\n}\n\n/** 瘦身 sessions.list 列表项,保留 chat.history 的完整详情通道。 */\nfunction slimSessionsListPayload(payload: any): boolean {\n if (!Array.isArray(payload?.sessions)) return false;\n\n let changed = false;\n if (payload.sessions.length > SESSION_LIST_ITEM_CAP) {\n payload.sessions = payload.sessions.slice(0, SESSION_LIST_ITEM_CAP);\n changed = true;\n }\n\n for (let i = 0; i < payload.sessions.length; i++) {\n const session = payload.sessions[i];\n if (!session || typeof session !== \"object\") continue;\n const item = slimSessionListItem(session);\n if (item.changed) {\n payload.sessions[i] = item.value;\n changed = true;\n }\n }\n return changed;\n}\n\nfunction slimNestedLargeValues(\n value: any,\n options: {\n textCap: number;\n arrayCap?: number;\n maxDepth: number;\n rawPlaceholder?: string;\n },\n depth = 0,\n): boolean {\n if (!value || typeof value !== \"object\" || depth > options.maxDepth) {\n return false;\n }\n\n let changed = false;\n\n if (Array.isArray(value)) {\n if (\n typeof options.arrayCap === \"number\" &&\n value.length > options.arrayCap\n ) {\n value.splice(options.arrayCap);\n changed = true;\n }\n for (const item of value) {\n if (slimNestedLargeValues(item, options, depth + 1)) changed = true;\n }\n return changed;\n }\n\n for (const [key, child] of Object.entries(value)) {\n if (key === \"raw\" && options.rawPlaceholder) {\n if ((value as Record<string, any>)[key] !== options.rawPlaceholder) {\n (value as Record<string, any>)[key] = options.rawPlaceholder;\n changed = true;\n }\n continue;\n }\n\n if (typeof child === \"string\" && child.length > options.textCap) {\n (value as Record<string, any>)[key] = truncateText(\n child,\n options.textCap,\n );\n changed = true;\n continue;\n }\n\n if (child && typeof child === \"object\") {\n if (slimNestedLargeValues(child, options, depth + 1)) changed = true;\n }\n }\n\n return changed;\n}\n\nfunction slimCronRunsPayload(payload: any): boolean {\n if (!Array.isArray(payload?.entries)) return false;\n\n let hasCronRun = false;\n for (const entry of payload.entries) {\n if (\n isRecord(entry) &&\n (\"jobId\" in entry || (\"action\" in entry && \"status\" in entry))\n ) {\n hasCronRun = true;\n break;\n }\n }\n if (!hasCronRun) return false;\n\n let changed = false;\n for (const entry of payload.entries) {\n if (\n slimNestedLargeValues(entry, {\n textCap: CRON_RUN_TEXT_CAP,\n arrayCap: 20,\n maxDepth: 6,\n })\n ) {\n changed = true;\n }\n }\n return changed;\n}\n\nfunction slimConfigGetPayload(payload: any): boolean {\n if (!isRecord(payload) || !(\"parsed\" in payload) || !(\"exists\" in payload)) {\n return false;\n }\n\n return slimNestedLargeValues(payload, {\n textCap: CONFIG_TEXT_CAP,\n arrayCap: CONFIG_ARRAY_CAP,\n maxDepth: 8,\n rawPlaceholder: CONFIG_RAW_PLACEHOLDER,\n });\n}\n\n/** 就地瘦身已解析的帧,返回是否有修改。 */\nexport function slimRelayFrame(frame: any): boolean {\n if (frame?.type === \"event\" && frame.event === \"agent\") {\n return slimAgentEventPayload(frame.payload);\n }\n if (frame?.type === \"res\" && frame.ok === true) {\n const sessionsChanged = slimSessionsListPayload(frame.payload);\n const messagesChanged = slimMessagesPayload(frame.payload);\n const cronChanged = slimCronRunsPayload(frame.payload);\n const configChanged = slimConfigGetPayload(frame.payload);\n return sessionsChanged || messagesChanged || cronChanged || configChanged;\n }\n return false;\n}\n\n/**\n * 对即将回传 Relay 的帧文本瘦身。小帧与无法解析的帧原样返回。\n */\nexport function slimRelayFrameText(\n text: string,\n logger?: { info: (msg: string) => void },\n): string {\n if (text.length <= SLIM_TRIGGER_CHARS) return text;\n\n let frame: any;\n try {\n frame = JSON.parse(text);\n } catch {\n return text;\n }\n\n if (!slimRelayFrame(frame)) return text;\n\n const slimmed = JSON.stringify(frame);\n logger?.info(\n `TunnelProxy: slimmed relay-bound frame ${text.length} → ${slimmed.length} chars`,\n );\n return slimmed;\n}\n",
110
107
  "import { loadApiKey } from \"../auth/credentials.js\";\nimport { getEnvUrls } from \"../env.js\";\n\nexport type GatewayConnectStatus = \"connected\" | \"disconnected\";\n\ninterface Logger {\n info: (msg: string) => void;\n warn: (msg: string) => void;\n}\n\nexport interface ConnectStatusReporter {\n report(status: GatewayConnectStatus): void;\n reset(): void;\n}\n\nexport function createConnectStatusReporter(opts: {\n logger: Logger;\n}): ConnectStatusReporter {\n const { logger } = opts;\n let lastReported: GatewayConnectStatus | null = null;\n let inFlight: Promise<void> | null = null;\n\n async function post(status: GatewayConnectStatus): Promise<void> {\n const url = getEnvUrls().gatewayConnectStatusUrl;\n if (!url) {\n logger.warn(\n \"[gateway-connect-status] url is empty for current env, skip report\",\n );\n return;\n }\n const apiKey = loadApiKey();\n if (!apiKey) {\n logger.info(\n \"[gateway-connect-status] api key missing, skip report\",\n );\n return;\n }\n const rawApiKey = apiKey.startsWith(\"Bearer \")\n ? apiKey.slice(\"Bearer \".length)\n : apiKey;\n try {\n const res = await fetch(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ apiKey: rawApiKey, connectStatus: status }),\n });\n if (!res.ok) {\n logger.warn(\n `[gateway-connect-status] report ${status} failed: HTTP ${res.status} ${res.statusText}`,\n );\n return;\n }\n logger.info(`[gateway-connect-status] reported ${status}`);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n logger.warn(`[gateway-connect-status] report ${status} error: ${message}`);\n }\n }\n\n return {\n report(status: GatewayConnectStatus): void {\n if (lastReported === status) return;\n lastReported = status;\n const run = async () => {\n if (inFlight) {\n try {\n await inFlight;\n } catch {\n // ignore\n }\n }\n await post(status);\n };\n inFlight = run().finally(() => {\n inFlight = null;\n });\n },\n reset(): void {\n lastReported = null;\n },\n };\n}\n",
111
108
  "/**\n * 基于 credentials.json 的 apiKey 认证基类。\n *\n * openclaw / arkclaw / jvsclaw 三者共用同一套 apiKey 存储后端(auth/credentials.ts),\n * 仅在 ensureProvisioned(如何拿到 apiKey)上分叉。relay/HTTP 连接拿到 apiKey 后行为一致。\n *\n * 注意:插件其余位置(app-name-map / asr / light-control 等)仍直接调用 loadApiKey()\n * 读取同一个 credentials.json,因此本 Provider 只是覆盖在其上的薄层,不替换它们。\n */\nimport {\n credentialsPath,\n clearApiKeys,\n loadApiKey,\n watchCredentials,\n} from \"../../auth/credentials.js\";\nimport type { AuthCredential, AuthProvider, AuthStatus, ClawKind } from \"../types.js\";\n\n/** 去掉可能存在的 \"Bearer \" 前缀,得到裸 apiKey。 */\nfunction stripBearer(apiKey: string): string {\n return apiKey.startsWith(\"Bearer \") ? apiKey.slice(\"Bearer \".length) : apiKey;\n}\n\nexport abstract class BaseApiKeyAuthProvider implements AuthProvider {\n abstract readonly kind: ClawKind;\n\n /** 默认 no-op;jvsclaw 等需要置换 apiKey 的宿主覆写此方法。 */\n async ensureProvisioned(_abortSignal?: AbortSignal): Promise<void> {\n // openclaw / arkclaw:apiKey 由 `ntf auth set-api-key` 写入,无需置换。\n }\n\n async status(): Promise<AuthStatus> {\n const apiKey = loadApiKey();\n if (!apiKey) {\n return { ready: false, reason: \"apiKey 未设置\" };\n }\n return { ready: true, apiKeyPreview: `${apiKey.slice(0, 8)}…` };\n }\n\n async getRelayCredential(): Promise<AuthCredential> {\n const apiKey = loadApiKey();\n if (!apiKey) {\n throw new Error(\n `apiKey 未设置,请先执行 ntf auth set-api-key <apiKey>(或 ${credentialsPath()})`,\n );\n }\n const raw = stripBearer(apiKey);\n return {\n query: { apiKey: raw },\n headers: { \"X-Api-Key-Id\": raw },\n };\n }\n\n async clear(): Promise<void> {\n clearApiKeys();\n }\n\n watch(onChange: () => void): () => void {\n return watchCredentials(onChange);\n }\n}\n",
112
109
  "import { BaseApiKeyAuthProvider } from \"./base-apikey.js\";\nimport type { ClawKind } from \"../types.js\";\n\n/** 本地 openclaw:apiKey 由用户通过 `ntf auth set-api-key` 写入,ensureProvisioned 为 no-op。 */\nexport class OpenclawAuthProvider extends BaseApiKeyAuthProvider {\n readonly kind: ClawKind = \"openclaw\";\n}\n",
@@ -114,11 +111,11 @@
114
111
  "/**\n * jvsclaw(阿里云)认证 Provider。\n *\n * jvsclaw 实例启动时由宿主把密文写入 openclaw.json 的\n * `plugins.entries.phone-notifications.config.link_secret`。当前 jvsclaw 宿主可能把\n * pluginConfig 从错误的 openclaw.json 注入进来,所以这里优先从 profile 层统一解析的\n * 可写配置路径读取;JvsClaw 默认是 /home/admin/.openclaw/openclaw.json。\n * 拿到密文后调 claw-manager 的 instance/ready 接口换取 apiKey,落盘后再走与\n * openclaw 相同的 apiKey 连接流程。\n *\n * POST {host}/claw-manager/internal/claw-manager/instance/ready\n * body: { token, clawCode:\"JvsClaw\", pluginVersion, hostname }\n * resp: { code:\"000000\", msg:\"success\", data:{ apiKey:\"oc_api_xxx\" } }\n *\n * 失败策略:指数退避重试直到成功(拿不到 apiKey 就不放行 relay 连接);插件停止时\n * 通过 abortSignal 中止重试。但若返回参数/绑定/归属等不可恢复的错误码\n * (见 FATAL_READY_CODES),继续轮询也不会成功,直接停止重试。\n * 已有 apiKey 且 link_secret 未变化时幂等返回。\n */\nimport { createHash } from \"node:crypto\";\nimport os from \"node:os\";\nimport { readFileSync, watch } from \"node:fs\";\nimport { basename, dirname, join } from \"node:path\";\nimport {\n loadApiKey,\n readCredentials,\n writeCredentials,\n} from \"../../auth/credentials.js\";\nimport { getEnvUrls } from \"../../env.js\";\nimport { PLUGIN_VERSION } from \"../../version.js\";\nimport { resolveConfigPath } from \"../runtime-paths.js\";\nimport { DEFAULT_JVSCLAW_STATE_DIR } from \"../paths.js\";\nimport { BaseApiKeyAuthProvider } from \"./base-apikey.js\";\nimport type { ClawKind } from \"../types.js\";\nimport type { AuthProviderDeps } from \"./index.js\";\n\nconst CLAW_CODE = \"JvsClaw\";\nconst RETRY_BASE_MS = 2_000;\nconst RETRY_MAX_MS = 60_000;\n\n/**\n * instance/ready 返回这些 code 时表示参数/绑定/归属等不可恢复的错误,\n * 继续轮询也不会成功,直接放弃重试。\n */\nconst FATAL_READY_CODES = new Set<string>([\n \"54016\", // JVS_READY_PARAM_INVALID: request/token is required\n \"54017\", // JVS_READY_UNSUPPORTED_CLAW_CODE: unsupported clawCode\n \"54018\", // JVS_READY_TOKEN_INVALID: JvsClaw Token解析失败\n \"54020\", // JVS_READY_BIND_CONFLICT: JvsClaw实例绑定冲突\n \"54024\", // JVS_READY_OWNERSHIP_NOT_FOUND: JvsClaw用户归属不存在\n]);\nexport const JVSCLAW_LINK_SECRET_CONFIG_PATH = join(\n DEFAULT_JVSCLAW_STATE_DIR,\n \"openclaw.json\",\n);\nconst PLUGIN_ID = \"phone-notifications\";\nconst LINK_SECRET_WATCH_DEBOUNCE_MS = 250;\n\ninterface InstanceReadyResponse {\n code?: string;\n msg?: string;\n data?: { apiKey?: string };\n}\n\n/** instance/ready 返回不可恢复错误码时抛出,用于中止轮询。 */\nclass FatalReadyError extends Error {\n constructor(\n readonly code: string,\n message: string,\n ) {\n super(message);\n this.name = \"FatalReadyError\";\n }\n}\n\nexport class JvsclawAuthProvider extends BaseApiKeyAuthProvider {\n readonly kind: ClawKind = \"jvsclaw\";\n\n constructor(private readonly deps: AuthProviderDeps) {\n super();\n }\n\n override async ensureProvisioned(abortSignal?: AbortSignal): Promise<void> {\n const existingApiKey = loadApiKey();\n const provisionInput = this.resolveProvisionInput();\n if (existingApiKey && !provisionInput) {\n this.deps.logger.info(\n \"jvsclaw auth: apiKey 已存在且未找到 link_secret,跳过置换\",\n );\n return;\n }\n\n if (\n existingApiKey &&\n provisionInput &&\n readCredentials().jvsclawLinkSecretHash === provisionInput.linkSecretHash\n ) {\n this.deps.logger.info(\n \"jvsclaw auth: apiKey 已存在且 link_secret 未变化,跳过置换\",\n );\n return;\n }\n\n const { logger } = this.deps;\n let attempt = 0;\n\n while (!abortSignal?.aborted) {\n attempt += 1;\n try {\n const currentProvisionInput = this.resolveProvisionInput();\n const apiKey = await this.exchangeApiKey(currentProvisionInput);\n const creds = readCredentials();\n delete creds.apiKeys;\n writeCredentials({\n ...creds,\n apiKey,\n token: undefined,\n jvsclawLinkSecretHash: currentProvisionInput?.linkSecretHash,\n });\n logger.info(\n `jvsclaw auth: instance/ready 置换 apiKey 成功(attempt ${attempt})`,\n );\n return;\n } catch (err: any) {\n if (err instanceof FatalReadyError) {\n logger.error(\n `jvsclaw auth: 置换失败且不可恢复(code=${err.code}): ${err.message},停止轮询`,\n );\n return;\n }\n const delayMs = Math.min(\n RETRY_BASE_MS * 2 ** (attempt - 1),\n RETRY_MAX_MS,\n );\n logger.warn(\n `jvsclaw auth: 置换失败(attempt ${attempt}): ${err?.message ?? String(err)},${delayMs}ms 后重试`,\n );\n const aborted = await sleep(delayMs, abortSignal);\n if (aborted) break;\n }\n }\n\n logger.warn(\"jvsclaw auth: 置换重试被中止(插件停止)\");\n }\n\n /** 从 jvsclaw 可写 openclaw.json 取密文并调用 instance/ready 换取 apiKey。 */\n private async exchangeApiKey(\n input = this.resolveProvisionInput(),\n ): Promise<string> {\n if (!input) {\n const configPath = resolveConfigPath();\n throw new Error(\n `未在 ${configPath} 找到 link_secret(路径: plugins.entries.${PLUGIN_ID}.config.link_secret)`,\n );\n }\n\n const url = getEnvUrls().clawManagerInstanceReadyUrl;\n if (!url) {\n throw new Error(\"instance/ready 接口地址为空(检查 host 配置)\");\n }\n\n this.deps.logger.info(`jvsclaw auth: POST ${url}`);\n\n const resp = await fetch(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n token: input.token,\n clawCode: CLAW_CODE,\n pluginVersion: PLUGIN_VERSION,\n hostname: os.hostname(),\n }),\n });\n\n if (!resp.ok) {\n throw new Error(`instance/ready HTTP ${resp.status}`);\n }\n\n const json = (await resp.json()) as InstanceReadyResponse;\n if (json.code !== \"000000\") {\n const message = `instance/ready 返回 code=${json.code} msg=${json.msg ?? \"n/a\"}`;\n if (json.code && FATAL_READY_CODES.has(json.code)) {\n throw new FatalReadyError(json.code, message);\n }\n throw new Error(message);\n }\n\n const apiKey = json.data?.apiKey?.trim();\n if (!apiKey) {\n throw new Error(\"instance/ready 响应未包含 apiKey\");\n }\n return apiKey;\n }\n\n private resolveProvisionInput():\n | { token: string; linkSecretHash: string }\n | undefined {\n const configPath = resolveConfigPath();\n const token =\n readJvsclawLinkSecretFromConfigFile(configPath) ??\n this.deps.pluginConfig.link_secret?.trim();\n if (!token) return undefined;\n return {\n token,\n linkSecretHash: hashLinkSecret(token),\n };\n }\n\n override watch(onChange: () => void): () => void {\n const unwatchCredentials = super.watch(onChange);\n const configPath = resolveConfigPath();\n const configDir = dirname(configPath);\n const configFile = basename(configPath);\n let debounceTimer: ReturnType<typeof setTimeout> | null = null;\n let configWatcher: ReturnType<typeof watch> | null = null;\n\n const emitChange = () => {\n if (debounceTimer) clearTimeout(debounceTimer);\n debounceTimer = setTimeout(() => {\n debounceTimer = null;\n onChange();\n }, LINK_SECRET_WATCH_DEBOUNCE_MS);\n debounceTimer.unref?.();\n };\n\n try {\n configWatcher = watch(\n configDir,\n { persistent: false },\n (_event, changedName) => {\n if (!changedName) return;\n const name = String(changedName);\n if (name === configFile || name.endsWith(configFile)) {\n emitChange();\n }\n },\n );\n } catch {\n // 配置目录可能尚未创建;credentials watcher 仍可处理手动写 key 的场景。\n }\n\n return () => {\n unwatchCredentials();\n if (debounceTimer) {\n clearTimeout(debounceTimer);\n debounceTimer = null;\n }\n configWatcher?.close();\n };\n }\n}\n\nfunction hashLinkSecret(value: string): string {\n return createHash(\"sha256\").update(value).digest(\"hex\");\n}\n\nexport function readJvsclawLinkSecretFromConfigFile(\n configPath = resolveConfigPath(),\n): string | undefined {\n let config: unknown;\n try {\n config = JSON.parse(readFileSync(configPath, \"utf-8\"));\n } catch {\n return undefined;\n }\n\n const entries = readObject(readObject(config, \"plugins\"), \"entries\");\n const pluginEntry = readObject(entries, PLUGIN_ID);\n const pluginConfig = readObject(pluginEntry, \"config\");\n const linkSecret = pluginConfig?.link_secret;\n return typeof linkSecret === \"string\"\n ? linkSecret.trim() || undefined\n : undefined;\n}\n\nfunction readObject(\n value: unknown,\n key: string,\n): Record<string, unknown> | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n const nested = (value as Record<string, unknown>)[key];\n return nested && typeof nested === \"object\"\n ? (nested as Record<string, unknown>)\n : undefined;\n}\n\n/** 可被 abortSignal 提前唤醒的 sleep;返回 true 表示是被中止唤醒的。 */\nfunction sleep(ms: number, signal?: AbortSignal): Promise<boolean> {\n return new Promise((resolve) => {\n if (signal?.aborted) {\n resolve(true);\n return;\n }\n const timer = setTimeout(() => {\n signal?.removeEventListener(\"abort\", onAbort);\n resolve(false);\n }, ms);\n const onAbort = () => {\n clearTimeout(timer);\n resolve(true);\n };\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n",
115
112
  "/**\n * 按当前渠道 Profile 选择 AuthProvider。\n *\n * 调用方在拿到运行期依赖(logger 等)后调用本函数,避免把这些依赖穿透进\n * resolveClawProfile()。三者共享 credentials.json 存储,仅 ensureProvisioned 分叉。\n */\nimport { resolveClawKind } from \"../detect.js\";\nimport type { AuthProvider } from \"../types.js\";\nimport type { PluginConfig } from \"../../types.js\";\nimport { OpenclawAuthProvider } from \"./openclaw.js\";\nimport { ArkclawAuthProvider } from \"./arkclaw.js\";\nimport { JvsclawAuthProvider } from \"./jvsclaw.js\";\n\nexport interface AuthProviderDeps {\n logger: {\n info: (msg: string) => void;\n warn: (msg: string) => void;\n error: (msg: string) => void;\n };\n /** 当前插件运行期的 pluginConfig;jvsclaw 从中读取 link_secret 密文。 */\n pluginConfig: PluginConfig;\n}\n\nexport function resolveAuthProvider(deps: AuthProviderDeps): AuthProvider {\n switch (resolveClawKind()) {\n case \"arkclaw\":\n return new ArkclawAuthProvider();\n case \"jvsclaw\":\n return new JvsclawAuthProvider(deps);\n case \"openclaw\":\n default:\n return new OpenclawAuthProvider();\n }\n}\n\nexport { BaseApiKeyAuthProvider } from \"./base-apikey.js\";\nexport { OpenclawAuthProvider } from \"./openclaw.js\";\nexport { ArkclawAuthProvider } from \"./arkclaw.js\";\nexport { JvsclawAuthProvider } from \"./jvsclaw.js\";\n",
116
113
  "import { randomBytes } from \"node:crypto\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\nimport type { OpenClawPluginApi } from \"openclaw/plugin-sdk\";\nimport type { Logger } from \"../logger.js\";\nimport {\n type NotificationIngestResult,\n NotificationStorage,\n} from \"../notification/storage.js\";\nimport {\n NOTIFICATION_SUMMARY_RESULT_EVENT,\n NOTIFICATION_SUMMARY_STATUS_EVENT,\n NotificationSummaryError,\n runNotificationSummary,\n type NotificationSummaryOptions,\n type NotificationSummaryProgressEvent,\n type NotificationSummaryResult,\n type NotificationSummaryResultEvent,\n type NotificationSummaryStatusEvent,\n} from \"../notification/summary.js\";\nimport { RELAY_INTERNAL_HTTP_HEADER } from \"../tunnel/http-proxy.js\";\nimport type { RelayTunnelService } from \"../tunnel/service.js\";\nimport type {\n HttpNotificationBody,\n NotificationPushParams,\n RawNotification,\n} from \"../types.js\";\nimport {\n readBody,\n trimToUndefined,\n type GatewayMethodRegistrar,\n} from \"./shared.js\";\n\nfunction newIngestId(): string {\n return `ing_${randomBytes(4).toString(\"hex\")}`;\n}\n\nfunction summarizeIncomingBatch(items: RawNotification[]): string {\n const total = items.length;\n if (total === 0) return \"items=0\";\n const now = Date.now();\n let earliest = Number.POSITIVE_INFINITY;\n let latest = Number.NEGATIVE_INFINITY;\n for (const n of items) {\n const t = new Date(n.timestamp).getTime();\n if (Number.isNaN(t)) continue;\n if (t < earliest) earliest = t;\n if (t > latest) latest = t;\n }\n if (!Number.isFinite(earliest)) {\n return `items=${total} (all ts invalid)`;\n }\n const maxLag = now - earliest;\n const minLag = now - latest;\n return `items=${total} earliestTs=${new Date(earliest).toISOString()} lag=${minLag}..${maxLag}ms`;\n}\n\nfunction createEmptyIngestResult(): NotificationIngestResult {\n return {\n received: 0,\n ingested: 0,\n dedupedById: 0,\n dedupedByContent: 0,\n invalid: 0,\n inserted: [],\n };\n}\n\nfunction isRelayInternalHttpRequest(req: IncomingMessage): boolean {\n const header = req.headers?.[RELAY_INTERNAL_HTTP_HEADER];\n if (Array.isArray(header)) {\n return header.includes(\"1\");\n }\n return header === \"1\";\n}\n\n/**\n * 将 ingest 内部结果转成对外响应:丢弃 `inserted` 字段,\n * 该字段只用于插件内部记录新写入条目,不应该出现在 gateway / HTTP 响应里。\n */\nfunction toIngestResponse(\n result: NotificationIngestResult,\n): Omit<NotificationIngestResult, \"inserted\"> {\n const { inserted: _inserted, ...rest } = result;\n return rest;\n}\n\ninterface NotificationInterfaceDeps {\n api: OpenClawPluginApi;\n logger: Logger;\n getStorage: () => NotificationStorage | null;\n summaryNotificationsDir?: string;\n filterNotifications: (items: RawNotification[]) => RawNotification[];\n registerGatewayMethod: GatewayMethodRegistrar;\n notifyNotificationSummaryStatus?: (event: NotificationSummaryStatusEvent) => void;\n notifyNotificationSummaryResult?: (event: NotificationSummaryResultEvent) => void;\n tunnelService?: RelayTunnelService | null;\n}\n\ninterface NotificationSummaryJobState {\n jobId: string;\n status: \"queued\" | \"running\" | \"complete\" | \"failed\";\n createdAt: string;\n updatedAt: string;\n progress?: NotificationSummaryStatusEvent;\n result?: NotificationSummaryResult;\n error?: {\n code: string;\n message: string;\n };\n}\n\nconst SUMMARY_JOB_HISTORY_LIMIT = 20;\n\nfunction newSummaryJobId(): string {\n const stamp = new Date()\n .toISOString()\n .replace(/[-:.TZ]/g, \"\")\n .slice(0, 14);\n return `sum_${stamp}_${randomBytes(4).toString(\"hex\")}`;\n}\n\nfunction nowIso(): string {\n return new Date().toISOString();\n}\n\nfunction readSummaryOptions(params: unknown): NotificationSummaryOptions {\n return params && typeof params === \"object\"\n ? (params as NotificationSummaryOptions)\n : {};\n}\n\nfunction serializeSummaryJob(state: NotificationSummaryJobState): Record<string, unknown> {\n return {\n ok: true,\n jobId: state.jobId,\n status: state.status,\n createdAt: state.createdAt,\n updatedAt: state.updatedAt,\n progress: state.progress ?? null,\n result: state.result ?? null,\n error: state.error ?? null,\n };\n}\n\nfunction toSummaryError(err: unknown): { code: string; message: string } {\n if (err instanceof NotificationSummaryError) {\n return { code: err.code, message: err.message };\n }\n return {\n code: \"SUMMARY_FAILED\",\n message: err instanceof Error ? err.message : String(err),\n };\n}\n\nfunction summarizeResultForEvent(\n jobId: string,\n result: NotificationSummaryResult,\n): NotificationSummaryResultEvent {\n return {\n jobId,\n status: \"complete\",\n ok: true,\n updatedAt: nowIso(),\n message: \"通知总结已完成\",\n title: \"未读通知总结\",\n markdown: result.displayMarkdown,\n total: result.total,\n limit: result.limit,\n cappedLimit: result.cappedLimit,\n range: result.range,\n progress: result.progress,\n scan: result.scan,\n byApp: result.byApp,\n bySender: result.bySender,\n byConversation: result.byConversation,\n };\n}\n\nfunction failedResultEvent(\n jobId: string,\n error: { code: string; message: string },\n): NotificationSummaryResultEvent {\n return {\n jobId,\n status: \"failed\",\n ok: false,\n updatedAt: nowIso(),\n message: `通知总结失败:${error.message}`,\n error,\n };\n}\n\ntype SummaryToolUpdate = (event: NotificationSummaryStatusEvent) => void;\ntype SummaryToolResultUpdate = (event: NotificationSummaryResultEvent) => void;\n\nexport function registerNotificationInterfaces(\n deps: NotificationInterfaceDeps,\n): void {\n const {\n api,\n logger,\n getStorage,\n summaryNotificationsDir,\n filterNotifications,\n registerGatewayMethod,\n notifyNotificationSummaryStatus,\n notifyNotificationSummaryResult,\n tunnelService,\n } = deps;\n const summaryJobs = new Map<string, NotificationSummaryJobState>();\n\n function pruneSummaryJobs(): void {\n while (summaryJobs.size > SUMMARY_JOB_HISTORY_LIMIT) {\n const oldest = summaryJobs.keys().next().value;\n if (!oldest) return;\n summaryJobs.delete(oldest);\n }\n }\n\n function rememberSummaryProgress(\n jobId: string,\n event: NotificationSummaryProgressEvent,\n ): NotificationSummaryStatusEvent {\n const statusEvent: NotificationSummaryStatusEvent = {\n ...event,\n jobId,\n };\n const existing = summaryJobs.get(jobId);\n const createdAt = existing?.createdAt ?? statusEvent.updatedAt;\n summaryJobs.set(jobId, {\n jobId,\n status: statusEvent.status,\n createdAt,\n updatedAt: statusEvent.updatedAt,\n progress: statusEvent,\n result: existing?.result,\n error: existing?.error,\n });\n pruneSummaryJobs();\n return statusEvent;\n }\n\n function emitSummaryProgress(\n jobId: string,\n event: NotificationSummaryProgressEvent,\n ): NotificationSummaryStatusEvent {\n const statusEvent = rememberSummaryProgress(jobId, event);\n notifyNotificationSummaryStatus?.(statusEvent);\n return statusEvent;\n }\n\n function markSummaryResult(\n jobId: string,\n result: NotificationSummaryResult,\n ): NotificationSummaryResultEvent {\n const updatedAt = nowIso();\n const existing = summaryJobs.get(jobId);\n summaryJobs.set(jobId, {\n jobId,\n status: \"complete\",\n createdAt: existing?.createdAt ?? updatedAt,\n updatedAt,\n progress: existing?.progress,\n result,\n });\n pruneSummaryJobs();\n const resultEvent = summarizeResultForEvent(jobId, result);\n notifyNotificationSummaryResult?.(resultEvent);\n return resultEvent;\n }\n\n function markSummaryFailed(jobId: string, err: unknown): NotificationSummaryResultEvent {\n const updatedAt = nowIso();\n const error = toSummaryError(err);\n const failedEvent = rememberSummaryProgress(jobId, {\n phase: \"failed\",\n status: \"failed\",\n message: `通知摘要失败:${error.message}`,\n updatedAt,\n error,\n });\n const existing = summaryJobs.get(jobId);\n summaryJobs.set(jobId, {\n jobId,\n status: \"failed\",\n createdAt: existing?.createdAt ?? updatedAt,\n updatedAt,\n progress: failedEvent,\n error,\n });\n notifyNotificationSummaryStatus?.(failedEvent);\n pruneSummaryJobs();\n const resultEvent = failedResultEvent(jobId, error);\n notifyNotificationSummaryResult?.(resultEvent);\n return resultEvent;\n }\n\n async function runSummaryJob(\n jobId: string,\n notificationsDir: string,\n options: NotificationSummaryOptions,\n onToolUpdate?: SummaryToolUpdate,\n onToolResultUpdate?: SummaryToolResultUpdate,\n ): Promise<NotificationSummaryResult> {\n const result = await runNotificationSummary({\n notificationsDir,\n options,\n jobId,\n onProgress(event) {\n const statusEvent = emitSummaryProgress(jobId, event);\n onToolUpdate?.(statusEvent);\n },\n });\n const resultEvent = markSummaryResult(jobId, result);\n onToolResultUpdate?.(resultEvent);\n return result;\n }\n\n function resolveSummaryNotificationsDir(): string | null {\n return getStorage()?.getStorageDir() ?? summaryNotificationsDir ?? null;\n }\n\n registerGatewayMethod(\n \"notifications.push\",\n async ({ params, respond }) => {\n const storage = getStorage();\n if (!storage) {\n respond(false, null, {\n code: \"NOT_READY\",\n message: \"Storage service not ready\",\n });\n return;\n }\n\n const { items } = params as unknown as NotificationPushParams;\n if (!Array.isArray(items)) {\n respond(false, null, {\n code: \"INVALID_PARAMS\",\n message: \"items must be an array\",\n });\n return;\n }\n\n const ingestId = newIngestId();\n const startMs = Date.now();\n logger.info(\n `notifications[${ingestId}]: gateway notifications.push received ${summarizeIncomingBatch(items)}`,\n );\n\n const filtered = filterNotifications(items);\n if (filtered.length !== items.length) {\n logger.info(\n `notifications[${ingestId}]: filtered ${items.length - filtered.length} ignored-app item(s), kept=${filtered.length}`,\n );\n }\n const result = filtered.length\n ? await storage.ingest(filtered, ingestId)\n : createEmptyIngestResult();\n\n logger.info(\n `notifications[${ingestId}]: ingest done in ${Date.now() - startMs}ms ` +\n `(received=${result.received} ingested=${result.ingested} ` +\n `dedupedById=${result.dedupedById} dedupedByContent=${result.dedupedByContent} invalid=${result.invalid})`,\n );\n\n respond(true, toIngestResponse(result));\n },\n );\n\n registerGatewayMethod(\"notifications.summary.start\", async ({ params, respond }) => {\n const notificationsDir = resolveSummaryNotificationsDir();\n if (!notificationsDir) {\n respond(false, null, {\n code: \"NOT_READY\",\n message: \"Storage service not ready\",\n });\n return;\n }\n\n const jobId = newSummaryJobId();\n const updatedAt = nowIso();\n const options = readSummaryOptions(params);\n emitSummaryProgress(jobId, {\n phase: \"queued\",\n status: \"queued\",\n message: \"已开始通知摘要任务...\",\n updatedAt,\n });\n\n respond(true, {\n ok: true,\n jobId,\n status: \"queued\",\n event: NOTIFICATION_SUMMARY_STATUS_EVENT,\n resultEvent: NOTIFICATION_SUMMARY_RESULT_EVENT,\n });\n\n queueMicrotask(() => {\n runSummaryJob(jobId, notificationsDir, options).catch((err) => {\n logger.warn(\n `notifications.summary.start failed: ${err instanceof Error ? err.message : String(err)}`,\n );\n markSummaryFailed(jobId, err);\n });\n });\n });\n\n registerGatewayMethod(\"notifications.summary.status\", async ({ params, respond }) => {\n const jobId = trimToUndefined((params as { jobId?: unknown } | undefined)?.jobId);\n if (!jobId) {\n respond(false, null, {\n code: \"INVALID_PARAMS\",\n message: \"jobId is required\",\n });\n return;\n }\n\n const state = summaryJobs.get(jobId);\n if (!state) {\n respond(false, null, {\n code: \"NOT_FOUND\",\n message: `summary job not found: ${jobId}`,\n });\n return;\n }\n\n respond(true, serializeSummaryJob(state));\n });\n\n registerGatewayMethod(\"notifications.summary.result\", async ({ params, respond }) => {\n const jobId = trimToUndefined((params as { jobId?: unknown } | undefined)?.jobId);\n if (!jobId) {\n respond(false, null, {\n code: \"INVALID_PARAMS\",\n message: \"jobId is required\",\n });\n return;\n }\n\n const state = summaryJobs.get(jobId);\n if (!state) {\n respond(false, null, {\n code: \"NOT_FOUND\",\n message: `summary job not found: ${jobId}`,\n });\n return;\n }\n\n respond(true, {\n ...serializeSummaryJob(state),\n done: state.status === \"complete\" || state.status === \"failed\",\n });\n });\n\n api.registerTool({\n name: \"notifications_summary\",\n label: \"Summarize Notifications\",\n description:\n \"总结手机通知/消息并在执行过程中广播 notification.summary.status 进度事件。\" +\n \"当用户要求总结最近通知、未读通知、最近消息、约 N 条通知时优先调用。\" +\n \"如果用户给出约 N 条/最近 N 条,必须把 N 原样传给 limit;未读通知没有独立过滤字段时按最近通知处理,不要自行放大数量。\" +\n \"完成时会广播 notification.summary.result,携带可直接展示的完整总结 Markdown。\" +\n \"返回的是压缩后的 Markdown 摘要输入,后续回复应基于它提炼中文总结,避免逐条罗列。\",\n parameters: {\n type: \"object\",\n additionalProperties: false,\n properties: {\n from: {\n type: \"string\",\n description: \"开始时间,ISO 8601,例如 2026-06-13T09:00:00+08:00\",\n },\n to: {\n type: \"string\",\n description: \"结束时间,ISO 8601\",\n },\n app: {\n type: \"string\",\n description: \"按应用名或显示名过滤\",\n },\n sender: {\n type: \"string\",\n description: \"按发送人/标题过滤\",\n },\n conversationType: {\n type: \"string\",\n enum: [\"group\", \"private\"],\n description: \"按会话类型过滤\",\n },\n keyword: {\n type: \"string\",\n description: \"在标题、正文、发送人、会话名中搜索关键词\",\n },\n limit: {\n type: \"number\",\n minimum: 1,\n maximum: 3000,\n description: \"纳入摘要的最大通知条数;默认 700,上限 3000\",\n },\n chunkSize: {\n type: \"number\",\n minimum: 1,\n maximum: 500,\n description: \"每个分片的通知条数;默认 150\",\n },\n },\n },\n async execute(\n _toolCallId: string,\n params: unknown,\n _signal?: AbortSignal,\n onUpdate?: (partialResult: {\n content: Array<{ type: \"text\"; text: string }>;\n details: unknown;\n }) => void,\n ) {\n const notificationsDir = resolveSummaryNotificationsDir();\n if (!notificationsDir) {\n return {\n content: [{ type: \"text\" as const, text: \"通知存储服务尚未就绪\" }],\n details: {\n ok: false,\n error: {\n code: \"NOT_READY\",\n message: \"Storage service not ready\",\n },\n },\n };\n }\n\n const jobId = newSummaryJobId();\n emitSummaryProgress(jobId, {\n phase: \"queued\",\n status: \"queued\",\n message: \"已开始通知摘要任务...\",\n updatedAt: nowIso(),\n });\n onUpdate?.({\n content: [{ type: \"text\" as const, text: \"已开始通知摘要任务...\" }],\n details: {\n ok: true,\n jobId,\n status: \"queued\",\n event: NOTIFICATION_SUMMARY_STATUS_EVENT,\n resultEvent: NOTIFICATION_SUMMARY_RESULT_EVENT,\n },\n });\n\n try {\n const result = await runSummaryJob(\n jobId,\n notificationsDir,\n readSummaryOptions(params),\n (event) => {\n onUpdate?.({\n content: [{ type: \"text\" as const, text: event.message }],\n details: {\n ok: true,\n event: NOTIFICATION_SUMMARY_STATUS_EVENT,\n ...event,\n },\n });\n },\n (event) => {\n onUpdate?.({\n content: [\n {\n type: \"text\" as const,\n text: event.markdown ?? event.message,\n },\n ],\n details: {\n event: NOTIFICATION_SUMMARY_RESULT_EVENT,\n ...event,\n },\n });\n },\n );\n return {\n content: [{ type: \"text\" as const, text: result.markdown }],\n details: result,\n };\n } catch (err) {\n const resultEvent = markSummaryFailed(jobId, err);\n onUpdate?.({\n content: [{ type: \"text\" as const, text: resultEvent.message }],\n details: {\n event: NOTIFICATION_SUMMARY_RESULT_EVENT,\n ...resultEvent,\n },\n });\n const error = toSummaryError(err);\n return {\n content: [{ type: \"text\" as const, text: error.message }],\n details: {\n ok: false,\n jobId,\n error,\n },\n };\n }\n },\n });\n\n api.registerHttpRoute({\n path: \"/notifications\",\n auth: \"gateway\",\n async handler(req: IncomingMessage, res: ServerResponse) {\n if (req.method !== \"POST\") {\n res.writeHead(405, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ ok: false, error: \"Method Not Allowed\" }));\n return;\n }\n\n if (!isRelayInternalHttpRequest(req)) {\n await tunnelService?.deactivateForExternalTunnel(\"POST /notifications\");\n }\n\n const storage = getStorage();\n if (!storage) {\n res.writeHead(503, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ ok: false, error: \"Service Not Ready\" }));\n return;\n }\n\n let body: HttpNotificationBody;\n try {\n const raw = await readBody(req);\n body = JSON.parse(raw);\n } catch {\n res.writeHead(400, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ ok: false, error: \"Invalid JSON\" }));\n return;\n }\n\n if (!Array.isArray(body.notifications)) {\n res.writeHead(400, { \"Content-Type\": \"application/json\" });\n res.end(\n JSON.stringify({\n ok: false,\n error: \"notifications must be an array\",\n }),\n );\n return;\n }\n\n const ingestId = newIngestId();\n const startMs = Date.now();\n logger.info(\n `notifications[${ingestId}]: HTTP POST /notifications received ${summarizeIncomingBatch(body.notifications)}`,\n );\n\n const filtered = filterNotifications(body.notifications);\n if (filtered.length !== body.notifications.length) {\n logger.info(\n `notifications[${ingestId}]: filtered ${body.notifications.length - filtered.length} ignored-app item(s), kept=${filtered.length}`,\n );\n }\n const result = filtered.length\n ? await storage.ingest(filtered, ingestId)\n : createEmptyIngestResult();\n\n logger.info(\n `notifications[${ingestId}]: ingest done in ${Date.now() - startMs}ms ` +\n `(received=${result.received} ingested=${result.ingested} ` +\n `dedupedById=${result.dedupedById} dedupedByContent=${result.dedupedByContent} invalid=${result.invalid})`,\n );\n\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ ok: true, ...toIngestResponse(result) }));\n },\n });\n\n logger.info(\n \"Gateway 通知方法已注册: notifications.push / notifications.summary.start / notifications.summary.status / notifications.summary.result\",\n );\n logger.info(\"Agent 通知工具已注册: notifications_summary\");\n logger.info(\"HTTP 通知端点已注册: POST /notifications\");\n}\n",
117
- "import type { IncomingMessage, ServerResponse } from \"node:http\";\nimport type { OpenClawPluginApi } from \"openclaw/plugin-sdk\";\nimport type { Logger } from \"../logger.js\";\nimport {\n RecordingStorage,\n canStartTranscription,\n extractSourceTextListFromDocument,\n extractTranscriptTitleFromDocument,\n handleRecordingResultWrite,\n handleRecordingSync,\n initializeAsr,\n triggerTranscription,\n type RecordingIndexEntry,\n type RecordingStatusEvent,\n validateAsrConfig,\n} from \"../recording/index.js\";\nimport { RELAY_INTERNAL_HTTP_HEADER } from \"../tunnel/http-proxy.js\";\nimport type { RelayTunnelService } from \"../tunnel/service.js\";\nimport type {\n HttpRecordingBody,\n RecordingAsrInitParams,\n RecordingDetail,\n RecordingListItem,\n RecordingListParams,\n RecordingRenameParams,\n RecordingResultWriteParams,\n RecordingRetranscribeParams,\n RecordingStatusParams,\n RecordingSyncParams,\n RecordingTransferStatus,\n} from \"../types.js\";\nimport {\n readBody,\n trimToUndefined,\n type GatewayMethodRegistrar,\n} from \"./shared.js\";\n\nconst RECORDING_TRANSFER_STATUSES = new Set<RecordingTransferStatus>([\n \"receiving_failed\",\n \"receiving\",\n \"pending_oss_upload\",\n \"uploading_oss\",\n \"oss_uploaded\",\n \"syncing_openclaw\",\n \"sync_failed\",\n \"synced\",\n \"transcribing\",\n \"transcribe_failed\",\n \"transcribed\",\n]);\n\nfunction isRecordingTransferStatus(\n value: string,\n): value is RecordingTransferStatus {\n return RECORDING_TRANSFER_STATUSES.has(value as RecordingTransferStatus);\n}\n\nfunction buildRecordingListItem(entry: RecordingIndexEntry): RecordingListItem {\n return {\n recordingId: entry.id,\n name: entry.metadata.name,\n duration_sec: entry.metadata.duration_sec,\n file_size_bytes: entry.metadata.file_size_bytes,\n created_at: entry.metadata.created_at,\n transfer_status: entry.status,\n marker_count: entry.metadata.markers?.length ?? 0,\n has_audio: !!entry.audioFile,\n has_srt: !!entry.srtFile,\n has_transcript: !!entry.transcriptFile,\n audioFile: entry.audioFile,\n transcriptDataFile: entry.transcriptDataFile,\n transcriptFile: entry.transcriptFile,\n updatedAt: entry.updatedAt,\n ...(entry.lastError ? { error: entry.lastError } : {}),\n };\n}\n\nfunction isRelayInternalHttpRequest(req: IncomingMessage): boolean {\n const header = req.headers?.[RELAY_INTERNAL_HTTP_HEADER];\n if (Array.isArray(header)) {\n return header.includes(\"1\");\n }\n return header === \"1\";\n}\n\nfunction buildRecordingDetail(\n entry: RecordingIndexEntry,\n extras?: Partial<Pick<\n RecordingDetail,\n \"summary\" | \"title\" | \"transcript\" | \"transcriptData\"\n >>,\n): RecordingDetail {\n const title = entry.title?.trim()\n || extras?.title?.trim()\n || entry.metadata.name?.trim()\n || entry.id;\n\n return {\n recordingId: entry.id,\n name: entry.metadata.name,\n duration_sec: entry.metadata.duration_sec,\n file_size_bytes: entry.metadata.file_size_bytes,\n created_at: entry.metadata.created_at,\n location: entry.metadata.location,\n oss_audio_url: entry.metadata.oss_audio_url,\n oss_srt_url: entry.metadata.oss_srt_url,\n markers: entry.metadata.markers ?? [],\n transfer_status: entry.status,\n audioFile: entry.audioFile,\n srtFile: entry.srtFile,\n transcriptDataFile: entry.transcriptDataFile,\n transcriptFile: entry.transcriptFile,\n summaryFile: entry.summaryFile,\n title,\n summary: extras?.summary,\n transcript: extras?.transcript,\n transcriptData: extras?.transcriptData,\n ingestedAt: entry.ingestedAt,\n updatedAt: entry.updatedAt,\n ...(entry.lastError ? { error: entry.lastError } : {}),\n };\n}\n\ninterface RecordingInterfaceDeps {\n api: OpenClawPluginApi;\n logger: Logger;\n asrDataDir: string;\n getRecordingStorage: () => RecordingStorage | null;\n notifyRecordingStatus: (event: RecordingStatusEvent) => void;\n registerGatewayMethod: GatewayMethodRegistrar;\n shouldBroadcastStatusOnHttp: () => boolean;\n tunnelService?: RelayTunnelService | null;\n}\n\nexport function registerRecordingInterfaces(\n deps: RecordingInterfaceDeps,\n): void {\n const {\n api,\n logger,\n asrDataDir,\n getRecordingStorage,\n notifyRecordingStatus,\n registerGatewayMethod,\n shouldBroadcastStatusOnHttp,\n tunnelService,\n } = deps;\n\n registerGatewayMethod(\"recordings.sync\", async ({ params, respond }) => {\n const recordingStorage = getRecordingStorage();\n if (!recordingStorage) {\n respond(false, null, {\n code: \"NOT_READY\",\n message: \"Recording storage service not ready\",\n });\n return;\n }\n\n const {\n recordingId: rawRecordingId,\n recording,\n asr,\n } = params as unknown as RecordingSyncParams;\n const recordingId = trimToUndefined(rawRecordingId);\n if (!recordingId) {\n respond(false, null, {\n code: \"INVALID_PARAMS\",\n message: \"recordingId is required\",\n });\n return;\n }\n\n if (!recording || !recording.oss_audio_url || !recording.created_at) {\n respond(false, null, {\n code: \"INVALID_PARAMS\",\n message: \"recording with oss_audio_url and created_at is required\",\n });\n return;\n }\n\n const asrError = asr ? validateAsrConfig(asr) : undefined;\n if (asrError) {\n respond(false, null, {\n code: \"INVALID_PARAMS\",\n message: asrError,\n });\n return;\n }\n\n const result = await handleRecordingSync(\n recordingId,\n recording,\n recordingStorage,\n asr,\n logger,\n { notifyStatus: notifyRecordingStatus },\n );\n respond(\n result.ok,\n result,\n result.ok\n ? undefined\n : {\n code: \"SYNC_FAILED\",\n message: result.error ?? \"Unknown error\",\n },\n );\n });\n\n registerGatewayMethod(\"recordings.result.write\", async ({ params, respond }) => {\n const recordingStorage = getRecordingStorage();\n if (!recordingStorage) {\n respond(false, null, {\n code: \"NOT_READY\",\n message: \"Recording storage service not ready\",\n });\n return;\n }\n\n const rawParams = params as unknown as RecordingResultWriteParams;\n const recordingId = trimToUndefined(rawParams.recordingId);\n if (!recordingId) {\n respond(false, null, {\n code: \"INVALID_PARAMS\",\n message: \"recordingId is required\",\n });\n return;\n }\n\n if (!rawParams.transcript && !rawParams.summary) {\n respond(false, null, {\n code: \"INVALID_PARAMS\",\n message: \"transcript or summary is required\",\n });\n return;\n }\n\n try {\n const result = handleRecordingResultWrite(\n {\n ...rawParams,\n recordingId,\n },\n recordingStorage,\n logger,\n { notifyStatus: notifyRecordingStatus },\n );\n respond(true, result, undefined);\n } catch (err: any) {\n respond(false, null, {\n code: err?.message?.startsWith(\"Recording not found:\")\n ? \"NOT_FOUND\"\n : \"RESULT_WRITE_FAILED\",\n message: err?.message ?? \"recording result write failed\",\n });\n }\n });\n\n registerGatewayMethod(\"recordings.list\", async ({ params, respond }) => {\n const recordingStorage = getRecordingStorage();\n if (!recordingStorage) {\n respond(false, null, {\n code: \"NOT_READY\",\n message: \"Recording storage service not ready\",\n });\n return;\n }\n\n const rawStatus = trimToUndefined(\n (params as RecordingListParams | undefined)?.status,\n );\n if (rawStatus && !isRecordingTransferStatus(rawStatus)) {\n respond(false, null, {\n code: \"INVALID_PARAMS\",\n message: `invalid recording status: ${rawStatus}`,\n });\n return;\n }\n\n const status = rawStatus as RecordingTransferStatus | undefined;\n const entries = status\n ? recordingStorage.listByStatus(status)\n : recordingStorage.listAll();\n\n respond(true, {\n total: entries.length,\n recordings: entries.map(buildRecordingListItem),\n });\n });\n\n registerGatewayMethod(\"recordings.status\", async ({ params, respond }) => {\n const recordingStorage = getRecordingStorage();\n if (!recordingStorage) {\n respond(false, null, {\n code: \"NOT_READY\",\n message: \"Recording storage service not ready\",\n });\n return;\n }\n\n const { recordingId } = params as unknown as RecordingStatusParams;\n if (!recordingId) {\n respond(false, null, {\n code: \"INVALID_PARAMS\",\n message: \"recordingId is required\",\n });\n return;\n }\n\n const entry = recordingStorage.findById(recordingId);\n if (!entry) {\n respond(false, null, {\n code: \"NOT_FOUND\",\n message: `Recording not found: ${recordingId}`,\n });\n return;\n }\n\n respond(\n true,\n (() => {\n const transcriptDocument =\n recordingStorage.readTranscriptDocument(recordingId);\n\n return buildRecordingDetail(entry, {\n summary: recordingStorage.readSummary(recordingId),\n title: extractTranscriptTitleFromDocument(transcriptDocument),\n transcript: extractSourceTextListFromDocument(transcriptDocument),\n transcriptData: transcriptDocument,\n });\n })(),\n );\n });\n\n registerGatewayMethod(\"recordings.rename\", async ({ params, respond }) => {\n const recordingStorage = getRecordingStorage();\n if (!recordingStorage) {\n respond(false, null, {\n code: \"NOT_READY\",\n message: \"Recording storage service not ready\",\n });\n return;\n }\n\n const { recordingId: rawRecordingId, name: rawName } =\n params as unknown as RecordingRenameParams;\n const recordingId = trimToUndefined(rawRecordingId);\n const name = trimToUndefined(rawName);\n if (!recordingId) {\n respond(false, null, {\n code: \"INVALID_PARAMS\",\n message: \"recordingId is required\",\n });\n return;\n }\n if (!name) {\n respond(false, null, {\n code: \"INVALID_PARAMS\",\n message: \"name is required\",\n });\n return;\n }\n\n const entry = recordingStorage.findById(recordingId);\n if (!entry) {\n respond(false, null, {\n code: \"NOT_FOUND\",\n message: `Recording not found: ${recordingId}`,\n });\n return;\n }\n\n const updated = recordingStorage.rename(recordingId, name);\n respond(true, buildRecordingDetail(updated));\n });\n\n registerGatewayMethod(\"recordings.delete\", async ({ params, respond }) => {\n const recordingStorage = getRecordingStorage();\n if (!recordingStorage) {\n respond(false, null, {\n code: \"NOT_READY\",\n message: \"Recording storage service not ready\",\n });\n return;\n }\n\n const { recordingId, deleteRemote } = params as {\n recordingId: string;\n deleteRemote?: boolean;\n };\n if (!recordingId) {\n respond(false, null, {\n code: \"INVALID_PARAMS\",\n message: \"recordingId is required\",\n });\n return;\n }\n\n if (deleteRemote) {\n const deleted = recordingStorage.delete(recordingId);\n respond(\n deleted,\n { ok: deleted, recordingId, deletedRemote: true },\n deleted\n ? undefined\n : {\n code: \"NOT_FOUND\",\n message: `Recording not found: ${recordingId}`,\n },\n );\n return;\n }\n\n const deleted = recordingStorage.delete(recordingId, {\n localOnly: true,\n });\n respond(\n deleted,\n { ok: deleted, recordingId, deletedRemote: false },\n deleted\n ? undefined\n : {\n code: \"NOT_FOUND\",\n message: `Recording not found: ${recordingId}`,\n },\n );\n });\n\n registerGatewayMethod(\n \"recordings.retranscribe\",\n async ({ params, respond }) => {\n const recordingStorage = getRecordingStorage();\n if (!recordingStorage) {\n respond(false, null, {\n code: \"NOT_READY\",\n message: \"Recording storage service not ready\",\n });\n return;\n }\n\n const { recordingId, asr } =\n params as unknown as RecordingRetranscribeParams;\n if (!recordingId) {\n respond(false, null, {\n code: \"INVALID_PARAMS\",\n message: \"recordingId is required\",\n });\n return;\n }\n\n const asrError = validateAsrConfig(asr);\n if (asrError) {\n respond(false, null, {\n code: \"ASR_NOT_CONFIGURED\",\n message: asrError,\n });\n return;\n }\n\n const entry = recordingStorage.findById(recordingId);\n if (!entry) {\n respond(false, null, {\n code: \"NOT_FOUND\",\n message: `Recording not found: ${recordingId}`,\n });\n return;\n }\n\n if (!canStartTranscription(entry.status)) {\n respond(false, null, {\n code: \"INVALID_STATE\",\n message: `Recording status does not allow retranscribe: ${entry.status}`,\n });\n return;\n }\n\n triggerTranscription(recordingId, recordingStorage, asr, logger, {\n notifyStatus: notifyRecordingStatus,\n }).catch((err) => {\n logger.error(\n `[recordings.retranscribe] 重试转写失败: ${recordingId}, ${err?.message ?? err}`,\n );\n });\n\n respond(true, { ok: true, recordingId, message: \"转写已重新触发\" });\n },\n );\n\n registerGatewayMethod(\"recordings.asr.init\", async ({ params, respond }) => {\n const { asr } = params as unknown as RecordingAsrInitParams;\n const asrError = validateAsrConfig(asr);\n if (asrError) {\n respond(false, null, {\n code: \"INVALID_PARAMS\",\n message: asrError,\n });\n return;\n }\n\n const result = await initializeAsr(asr, asrDataDir, logger);\n respond(\n result.ok,\n result,\n result.ok\n ? undefined\n : {\n code: \"ASR_INIT_FAILED\",\n message: result.error ?? \"ASR init failed\",\n },\n );\n });\n\n api.registerHttpRoute({\n path: \"/recordings\",\n auth: \"gateway\",\n async handler(req: IncomingMessage, res: ServerResponse) {\n if (req.method !== \"POST\") {\n res.writeHead(405, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ ok: false, error: \"Method Not Allowed\" }));\n return;\n }\n\n if (!isRelayInternalHttpRequest(req)) {\n await tunnelService?.deactivateForExternalTunnel(\"POST /recordings\");\n }\n\n const recordingStorage = getRecordingStorage();\n if (!recordingStorage) {\n res.writeHead(503, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ ok: false, error: \"Service Not Ready\" }));\n return;\n }\n\n let body: HttpRecordingBody;\n try {\n const raw = await readBody(req);\n body = JSON.parse(raw);\n } catch {\n res.writeHead(400, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ ok: false, error: \"Invalid JSON\" }));\n return;\n }\n\n const recordingId = trimToUndefined(body.recordingId);\n if (!recordingId) {\n res.writeHead(400, { \"Content-Type\": \"application/json\" });\n res.end(\n JSON.stringify({\n ok: false,\n error: \"recordingId is required\",\n }),\n );\n return;\n }\n\n if (!body.recording || !body.recording.oss_audio_url) {\n res.writeHead(400, { \"Content-Type\": \"application/json\" });\n res.end(\n JSON.stringify({\n ok: false,\n error: \"recording with oss_audio_url is required\",\n }),\n );\n return;\n }\n\n const asrError = body.asr ? validateAsrConfig(body.asr) : undefined;\n if (asrError) {\n res.writeHead(400, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ ok: false, error: asrError }));\n return;\n }\n\n const result = await handleRecordingSync(\n recordingId,\n body.recording,\n recordingStorage,\n body.asr,\n logger,\n shouldBroadcastStatusOnHttp()\n ? { notifyStatus: notifyRecordingStatus }\n : undefined,\n );\n\n res.writeHead(result.ok ? 200 : 500, {\n \"Content-Type\": \"application/json\",\n });\n res.end(JSON.stringify(result));\n },\n } as any);\n\n logger.info(\n \"Gateway 录音方法已注册: recordings.sync / recordings.result.write / recordings.list / recordings.status / recordings.rename / recordings.delete / recordings.retranscribe / recordings.asr.init\",\n );\n logger.info(\"HTTP 录音端点已注册: POST /recordings\");\n}\n",
114
+ "import type { IncomingMessage, ServerResponse } from \"node:http\";\nimport type { OpenClawPluginApi } from \"openclaw/plugin-sdk\";\nimport type { Logger } from \"../logger.js\";\nimport {\n RecordingStorage,\n extractSourceTextListFromDocument,\n extractTranscriptTitleFromDocument,\n handleRecordingResultWrite,\n type RecordingIndexEntry,\n type RecordingStatusEvent,\n} from \"../recording/index.js\";\nimport { RELAY_INTERNAL_HTTP_HEADER } from \"../tunnel/http-proxy.js\";\nimport type { RelayTunnelService } from \"../tunnel/service.js\";\nimport type {\n RecordingDetail,\n RecordingListItem,\n RecordingListParams,\n RecordingRenameParams,\n RecordingResultWriteParams,\n RecordingStatusParams,\n RecordingTransferStatus,\n} from \"../types.js\";\nimport {\n trimToUndefined,\n type GatewayMethodRegistrar,\n} from \"./shared.js\";\n\nconst RECORDING_TRANSFER_STATUSES = new Set<RecordingTransferStatus>([\n \"receiving_failed\",\n \"receiving\",\n \"pending_oss_upload\",\n \"uploading_oss\",\n \"oss_uploaded\",\n \"syncing_openclaw\",\n \"sync_failed\",\n \"synced\",\n \"transcribing\",\n \"transcribe_failed\",\n \"transcribed\",\n]);\n\nfunction isRecordingTransferStatus(\n value: string,\n): value is RecordingTransferStatus {\n return RECORDING_TRANSFER_STATUSES.has(value as RecordingTransferStatus);\n}\n\nfunction buildRecordingListItem(entry: RecordingIndexEntry): RecordingListItem {\n return {\n recordingId: entry.id,\n name: entry.metadata.name,\n duration_sec: entry.metadata.duration_sec,\n file_size_bytes: entry.metadata.file_size_bytes,\n created_at: entry.metadata.created_at,\n transfer_status: entry.status,\n marker_count: entry.metadata.markers?.length ?? 0,\n has_audio: !!entry.audioFile,\n has_srt: !!entry.srtFile,\n has_transcript: !!entry.transcriptFile,\n audioFile: entry.audioFile,\n transcriptDataFile: entry.transcriptDataFile,\n transcriptFile: entry.transcriptFile,\n updatedAt: entry.updatedAt,\n ...(entry.lastError ? { error: entry.lastError } : {}),\n };\n}\n\nfunction isRelayInternalHttpRequest(req: IncomingMessage): boolean {\n const header = req.headers?.[RELAY_INTERNAL_HTTP_HEADER];\n if (Array.isArray(header)) {\n return header.includes(\"1\");\n }\n return header === \"1\";\n}\n\nfunction buildRecordingDetail(\n entry: RecordingIndexEntry,\n extras?: Partial<Pick<\n RecordingDetail,\n \"summary\" | \"title\" | \"transcript\" | \"transcriptData\"\n >>,\n): RecordingDetail {\n const title = entry.title?.trim()\n || extras?.title?.trim()\n || entry.metadata.name?.trim()\n || entry.id;\n\n return {\n recordingId: entry.id,\n name: entry.metadata.name,\n duration_sec: entry.metadata.duration_sec,\n file_size_bytes: entry.metadata.file_size_bytes,\n created_at: entry.metadata.created_at,\n location: entry.metadata.location,\n oss_audio_url: entry.metadata.oss_audio_url,\n oss_srt_url: entry.metadata.oss_srt_url,\n markers: entry.metadata.markers ?? [],\n transfer_status: entry.status,\n audioFile: entry.audioFile,\n srtFile: entry.srtFile,\n transcriptDataFile: entry.transcriptDataFile,\n transcriptFile: entry.transcriptFile,\n summaryFile: entry.summaryFile,\n title,\n summary: extras?.summary,\n transcript: extras?.transcript,\n transcriptData: extras?.transcriptData,\n ingestedAt: entry.ingestedAt,\n updatedAt: entry.updatedAt,\n ...(entry.lastError ? { error: entry.lastError } : {}),\n };\n}\n\ninterface RecordingInterfaceDeps {\n api: OpenClawPluginApi;\n logger: Logger;\n getRecordingStorage: () => RecordingStorage | null;\n notifyRecordingStatus: (event: RecordingStatusEvent) => void;\n registerGatewayMethod: GatewayMethodRegistrar;\n tunnelService?: RelayTunnelService | null;\n}\n\nexport function registerRecordingInterfaces(\n deps: RecordingInterfaceDeps,\n): void {\n const {\n api,\n logger,\n getRecordingStorage,\n notifyRecordingStatus,\n registerGatewayMethod,\n tunnelService,\n } = deps;\n\n registerGatewayMethod(\"recordings.result.write\", async ({ params, respond }) => {\n const recordingStorage = getRecordingStorage();\n if (!recordingStorage) {\n respond(false, null, {\n code: \"NOT_READY\",\n message: \"Recording storage service not ready\",\n });\n return;\n }\n\n const rawParams = params as unknown as RecordingResultWriteParams;\n const recordingId = trimToUndefined(rawParams.recordingId);\n if (!recordingId) {\n respond(false, null, {\n code: \"INVALID_PARAMS\",\n message: \"recordingId is required\",\n });\n return;\n }\n\n if (!rawParams.transcript && !rawParams.summary) {\n respond(false, null, {\n code: \"INVALID_PARAMS\",\n message: \"transcript or summary is required\",\n });\n return;\n }\n\n try {\n const result = handleRecordingResultWrite(\n {\n ...rawParams,\n recordingId,\n },\n recordingStorage,\n logger,\n { notifyStatus: notifyRecordingStatus },\n );\n respond(true, result, undefined);\n } catch (err: any) {\n respond(false, null, {\n code: err?.message?.startsWith(\"Recording not found:\")\n ? \"NOT_FOUND\"\n : \"RESULT_WRITE_FAILED\",\n message: err?.message ?? \"recording result write failed\",\n });\n }\n });\n\n registerGatewayMethod(\"recordings.list\", async ({ params, respond }) => {\n const recordingStorage = getRecordingStorage();\n if (!recordingStorage) {\n respond(false, null, {\n code: \"NOT_READY\",\n message: \"Recording storage service not ready\",\n });\n return;\n }\n\n const rawStatus = trimToUndefined(\n (params as RecordingListParams | undefined)?.status,\n );\n if (rawStatus && !isRecordingTransferStatus(rawStatus)) {\n respond(false, null, {\n code: \"INVALID_PARAMS\",\n message: `invalid recording status: ${rawStatus}`,\n });\n return;\n }\n\n const status = rawStatus as RecordingTransferStatus | undefined;\n const entries = status\n ? recordingStorage.listByStatus(status)\n : recordingStorage.listAll();\n\n respond(true, {\n total: entries.length,\n recordings: entries.map(buildRecordingListItem),\n });\n });\n\n registerGatewayMethod(\"recordings.status\", async ({ params, respond }) => {\n const recordingStorage = getRecordingStorage();\n if (!recordingStorage) {\n respond(false, null, {\n code: \"NOT_READY\",\n message: \"Recording storage service not ready\",\n });\n return;\n }\n\n const { recordingId } = params as unknown as RecordingStatusParams;\n if (!recordingId) {\n respond(false, null, {\n code: \"INVALID_PARAMS\",\n message: \"recordingId is required\",\n });\n return;\n }\n\n const entry = recordingStorage.findById(recordingId);\n if (!entry) {\n respond(false, null, {\n code: \"NOT_FOUND\",\n message: `Recording not found: ${recordingId}`,\n });\n return;\n }\n\n respond(\n true,\n (() => {\n const transcriptDocument =\n recordingStorage.readTranscriptDocument(recordingId);\n\n return buildRecordingDetail(entry, {\n summary: recordingStorage.readSummary(recordingId),\n title: extractTranscriptTitleFromDocument(transcriptDocument),\n transcript: extractSourceTextListFromDocument(transcriptDocument),\n transcriptData: transcriptDocument,\n });\n })(),\n );\n });\n\n registerGatewayMethod(\"recordings.rename\", async ({ params, respond }) => {\n const recordingStorage = getRecordingStorage();\n if (!recordingStorage) {\n respond(false, null, {\n code: \"NOT_READY\",\n message: \"Recording storage service not ready\",\n });\n return;\n }\n\n const { recordingId: rawRecordingId, name: rawName } =\n params as unknown as RecordingRenameParams;\n const recordingId = trimToUndefined(rawRecordingId);\n const name = trimToUndefined(rawName);\n if (!recordingId) {\n respond(false, null, {\n code: \"INVALID_PARAMS\",\n message: \"recordingId is required\",\n });\n return;\n }\n if (!name) {\n respond(false, null, {\n code: \"INVALID_PARAMS\",\n message: \"name is required\",\n });\n return;\n }\n\n const entry = recordingStorage.findById(recordingId);\n if (!entry) {\n respond(false, null, {\n code: \"NOT_FOUND\",\n message: `Recording not found: ${recordingId}`,\n });\n return;\n }\n\n const updated = recordingStorage.rename(recordingId, name);\n respond(true, buildRecordingDetail(updated));\n });\n\n registerGatewayMethod(\"recordings.delete\", async ({ params, respond }) => {\n const recordingStorage = getRecordingStorage();\n if (!recordingStorage) {\n respond(false, null, {\n code: \"NOT_READY\",\n message: \"Recording storage service not ready\",\n });\n return;\n }\n\n const { recordingId, deleteRemote } = params as {\n recordingId: string;\n deleteRemote?: boolean;\n };\n if (!recordingId) {\n respond(false, null, {\n code: \"INVALID_PARAMS\",\n message: \"recordingId is required\",\n });\n return;\n }\n\n if (deleteRemote) {\n const deleted = recordingStorage.delete(recordingId);\n respond(\n deleted,\n { ok: deleted, recordingId, deletedRemote: true },\n deleted\n ? undefined\n : {\n code: \"NOT_FOUND\",\n message: `Recording not found: ${recordingId}`,\n },\n );\n return;\n }\n\n const deleted = recordingStorage.delete(recordingId, {\n localOnly: true,\n });\n respond(\n deleted,\n { ok: deleted, recordingId, deletedRemote: false },\n deleted\n ? undefined\n : {\n code: \"NOT_FOUND\",\n message: `Recording not found: ${recordingId}`,\n },\n );\n });\n\n api.registerHttpRoute({\n path: \"/recordings\",\n auth: \"gateway\",\n async handler(req: IncomingMessage, res: ServerResponse) {\n if (req.method !== \"POST\") {\n res.writeHead(405, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ ok: false, error: \"Method Not Allowed\" }));\n return;\n }\n\n if (!isRelayInternalHttpRequest(req)) {\n await tunnelService?.deactivateForExternalTunnel(\"POST /recordings\");\n }\n\n const recordingStorage = getRecordingStorage();\n if (!recordingStorage) {\n res.writeHead(503, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ ok: false, error: \"Service Not Ready\" }));\n return;\n }\n\n // 录音同步链路已下线:HTTP 入口保留(兼容 relay 隧道排除逻辑),\n // 但不再下载/转写,统一引导至 gateway 方法 recordings.result.write。\n res.writeHead(410, { \"Content-Type\": \"application/json\" });\n res.end(\n JSON.stringify({\n ok: false,\n error:\n \"POST /recordings 已停用,请改用 gateway 方法 recordings.result.write\",\n }),\n );\n },\n } as any);\n\n logger.info(\n \"Gateway 录音方法已注册: recordings.result.write / recordings.list / recordings.status / recordings.rename / recordings.delete\",\n );\n logger.info(\"HTTP 录音端点已注册: POST /recordings (已停用,返回 410)\");\n}\n",
118
115
  "import type { IncomingMessage, ServerResponse } from \"node:http\";\nimport type { OpenClawPluginApi } from \"openclaw/plugin-sdk\";\nimport type { Logger } from \"../logger.js\";\nimport {\n ImageStorage,\n handleImageSync,\n DEFAULT_IMAGE_MAX_BYTES,\n} from \"../image/index.js\";\nimport { RELAY_INTERNAL_HTTP_HEADER } from \"../tunnel/http-proxy.js\";\nimport type { RelayTunnelService } from \"../tunnel/service.js\";\nimport type { HttpImageBody, ImageMetadata, ImageSyncParams } from \"../types.js\";\nimport {\n readBody,\n trimToUndefined,\n type GatewayMethodRegistrar,\n} from \"./shared.js\";\n\nfunction isRelayInternalHttpRequest(req: IncomingMessage): boolean {\n const header = req.headers?.[RELAY_INTERNAL_HTTP_HEADER];\n if (Array.isArray(header)) {\n return header.includes(\"1\");\n }\n return header === \"1\";\n}\n\n/** 校验图片元数据必填字段,返回错误信息或 undefined */\nfunction validateImageMetadata(metadata?: ImageMetadata): string | undefined {\n if (!metadata) return \"image is required\";\n if (!trimToUndefined(metadata.oss_image_url)) {\n return \"image.oss_image_url is required\";\n }\n if (!trimToUndefined(metadata.created_at)) {\n return \"image.created_at is required\";\n }\n return undefined;\n}\n\ninterface ImageInterfaceDeps {\n api: OpenClawPluginApi;\n logger: Logger;\n getImageStorage: () => ImageStorage | null;\n registerGatewayMethod: GatewayMethodRegistrar;\n maxBytes: number;\n tunnelService?: RelayTunnelService | null;\n}\n\nexport function registerImageInterfaces(deps: ImageInterfaceDeps): void {\n const {\n api,\n logger,\n getImageStorage,\n registerGatewayMethod,\n maxBytes,\n tunnelService,\n } = deps;\n\n const effectiveMaxBytes = maxBytes > 0 ? maxBytes : DEFAULT_IMAGE_MAX_BYTES;\n\n registerGatewayMethod(\"images.sync\", async ({ params, respond }) => {\n const imageStorage = getImageStorage();\n if (!imageStorage) {\n respond(false, null, {\n code: \"NOT_READY\",\n message: \"Image storage service not ready\",\n });\n return;\n }\n\n const { imageId: rawImageId, image } = params as unknown as ImageSyncParams;\n const imageId = trimToUndefined(rawImageId);\n if (!imageId) {\n respond(false, null, {\n code: \"INVALID_PARAMS\",\n message: \"imageId is required\",\n });\n return;\n }\n\n const metaError = validateImageMetadata(image);\n if (metaError) {\n respond(false, null, { code: \"INVALID_PARAMS\", message: metaError });\n return;\n }\n\n const result = handleImageSync(\n imageId,\n image,\n imageStorage,\n effectiveMaxBytes,\n logger,\n );\n respond(\n result.ok,\n result,\n result.ok\n ? undefined\n : { code: \"SYNC_FAILED\", message: result.error ?? \"Unknown error\" },\n );\n });\n\n api.registerHttpRoute({\n path: \"/images\",\n auth: \"gateway\",\n async handler(req: IncomingMessage, res: ServerResponse) {\n if (req.method !== \"POST\") {\n res.writeHead(405, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ ok: false, error: \"Method Not Allowed\" }));\n return;\n }\n\n if (!isRelayInternalHttpRequest(req)) {\n await tunnelService?.deactivateForExternalTunnel(\"POST /images\");\n }\n\n const imageStorage = getImageStorage();\n if (!imageStorage) {\n res.writeHead(503, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ ok: false, error: \"Service Not Ready\" }));\n return;\n }\n\n let body: HttpImageBody;\n try {\n const raw = await readBody(req);\n body = JSON.parse(raw);\n } catch {\n res.writeHead(400, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ ok: false, error: \"Invalid JSON\" }));\n return;\n }\n\n const imageId = trimToUndefined(body.imageId);\n if (!imageId) {\n res.writeHead(400, { \"Content-Type\": \"application/json\" });\n res.end(\n JSON.stringify({ ok: false, error: \"imageId is required\" }),\n );\n return;\n }\n\n const metaError = validateImageMetadata(body.image);\n if (metaError) {\n res.writeHead(400, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ ok: false, error: metaError }));\n return;\n }\n\n const result = handleImageSync(\n imageId,\n body.image,\n imageStorage,\n effectiveMaxBytes,\n logger,\n );\n res.writeHead(result.ok ? 200 : 500, {\n \"Content-Type\": \"application/json\",\n });\n res.end(JSON.stringify(result));\n },\n } as any);\n\n logger.info(\"Gateway 图片方法已注册: images.sync\");\n logger.info(\"HTTP 图片端点已注册: POST /images\");\n}\n",
119
116
  "const PLUGIN_CLI_COMMANDS = new Set([\"ntf\", \"phone-notifications\"]);\nconst GLOBAL_OPTIONS_WITH_VALUE = [\n \"--container\",\n \"--log-level\",\n \"--profile\",\n] as const;\nconst GLOBAL_OPTIONS_WITH_VALUE_SET = new Set<string>(GLOBAL_OPTIONS_WITH_VALUE);\n\nfunction resolvePrimaryCommand(argv = process.argv): string | undefined {\n const args = argv.slice(2);\n\n for (let index = 0; index < args.length; index++) {\n const arg = args[index];\n if (!arg || arg === \"--\") {\n return undefined;\n }\n\n if (GLOBAL_OPTIONS_WITH_VALUE_SET.has(arg)) {\n index++;\n continue;\n }\n\n if (\n GLOBAL_OPTIONS_WITH_VALUE.some((option) => arg.startsWith(`${option}=`))\n ) {\n continue;\n }\n\n if (arg.startsWith(\"-\")) {\n continue;\n }\n\n return arg;\n }\n\n return undefined;\n}\n\nexport function isPluginCliInvocation(argv = process.argv): boolean {\n const primaryCommand = resolvePrimaryCommand(argv);\n return primaryCommand ? PLUGIN_CLI_COMMANDS.has(primaryCommand) : false;\n}\n"
120
117
  ],
121
- "mappings": "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AAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAC7C;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAC7C;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAC7C;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAC7C;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAC7C;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAC7C;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAC7C;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG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",
122
- "debugId": "3838A06742EC9ED664756E2164756E21",
118
+ "mappings": "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AAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAC7C;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAC7C;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAC7C;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAC7C;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAC7C;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAC7C;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAC7C;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG;AAAA,IAAG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",
119
+ "debugId": "1C4AEF73472B01C364756E2164756E21",
123
120
  "names": []
124
121
  }