@atom8n/n8n-nodes-langchain 2.5.7 → 2.5.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/known/nodes.json +24 -0
- package/dist/methods/defined.json +3 -0
- package/dist/methods/referenced.json +3 -0
- package/dist/nodes/agents/OpenClawAgent/OpenClawAgent.node.js +62 -0
- package/dist/nodes/agents/OpenClawAgent/OpenClawAgent.node.js.map +1 -0
- package/dist/nodes/agents/OpenClawAgent/V1/OpenClawAgentV1.node.js +821 -0
- package/dist/nodes/agents/OpenClawAgent/V1/OpenClawAgentV1.node.js.map +1 -0
- package/dist/nodes/agents/OpenClawAgent/V2/OpenClawAgentV2.node.js +2059 -0
- package/dist/nodes/agents/OpenClawAgent/V2/OpenClawAgentV2.node.js.map +1 -0
- package/dist/nodes/agents/OpenClawAgent/channels/TelegramChannel/TelegramChannel.node.js +329 -0
- package/dist/nodes/agents/OpenClawAgent/channels/TelegramChannel/TelegramChannel.node.js.map +1 -0
- package/dist/nodes/agents/OpenClawAgent/channels/TelegramChannel/telegram-channel.svg +4 -0
- package/dist/nodes/agents/OpenClawAgent/channels/WhatsAppChannel/WhatsAppChannel.node.js +108 -0
- package/dist/nodes/agents/OpenClawAgent/channels/WhatsAppChannel/WhatsAppChannel.node.js.map +1 -0
- package/dist/nodes/agents/OpenClawAgent/channels/WhatsAppChannel/whatsapp-channel.svg +3 -0
- package/dist/nodes/agents/OpenClawAgent/mcpServers/OpenClawMcpServer/OpenClawMcpServer.node.js +228 -0
- package/dist/nodes/agents/OpenClawAgent/mcpServers/OpenClawMcpServer/OpenClawMcpServer.node.js.map +1 -0
- package/dist/nodes/agents/OpenClawAgent/mcpServers/OpenClawMcpServer/openclaw-mcp-server.svg +9 -0
- package/dist/nodes/agents/OpenClawAgent/models/OpenCodeFreeModel/OpenCodeFreeModel.node.js +97 -0
- package/dist/nodes/agents/OpenClawAgent/models/OpenCodeFreeModel/OpenCodeFreeModel.node.js.map +1 -0
- package/dist/nodes/agents/OpenClawAgent/models/OpenCodeFreeModel/opencode-free-model.svg +1 -0
- package/dist/nodes/agents/OpenClawAgent/openclaw.svg +8 -0
- package/dist/nodes/agents/OpenClawAgent/plugins/OpenClawPlugin/OpenClawPlugin.node.js +261 -0
- package/dist/nodes/agents/OpenClawAgent/plugins/OpenClawPlugin/OpenClawPlugin.node.js.map +1 -0
- package/dist/nodes/agents/OpenClawAgent/plugins/OpenClawPlugin/openclaw-plugin.svg +3 -0
- package/dist/nodes/llms/LmChat9Router/LmChat9Router.node.js +40 -3
- package/dist/nodes/llms/LmChat9Router/LmChat9Router.node.js.map +1 -1
- package/dist/types/nodes.json +8 -1
- package/package.json +17 -11
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../nodes/agents/OpenClawAgent/V2/OpenClawAgentV2.node.ts"],"sourcesContent":["import { execSync, spawn, type ChildProcess } from 'child_process';\nimport { randomUUID } from 'crypto';\nimport { existsSync, mkdirSync, readFileSync, statSync, writeFileSync } from 'fs';\nimport { delimiter, dirname, join } from 'path';\n\nimport {\n\tApplicationError,\n\tNodeConnectionTypes,\n\tNodeOperationError,\n\tjsonParse,\n\ttype IDataObject,\n\ttype IExecuteFunctions,\n\ttype INodeExecutionData,\n\ttype INodeType,\n\ttype INodeTypeBaseDescription,\n\ttype INodeTypeDescription,\n\ttype ITriggerFunctions,\n\ttype ITriggerResponse,\n} from 'n8n-workflow';\n\nexport interface ChannelConfig {\n\tchannelType: string;\n\tbotToken?: string;\n\taccountId?: string;\n\tdmPolicy?: string;\n\tgroupPolicy?: string;\n\tallowFrom?: string[];\n\tphoneNumberId?: string;\n\taccessToken?: string;\n\textra?: IDataObject;\n}\n\n/**\n * Configuration returned by Model sub-nodes connected to the OpenClaw agent.\n * The modelId is used to override the --model CLI flag.\n */\nexport interface ModelConfig {\n\tmodelId: string;\n\tmodelSource: string;\n\textra?: IDataObject;\n}\n\n/**\n * Configuration returned by Plugin sub-nodes connected to the OpenClaw agent.\n *\n * - **local**: scans `pluginPath` for `openclaw.plugin.json` and loads manifest info.\n * - **cloud**: references a ClawHub plugin by `pluginId` (e.g. \"clawhub:openai\").\n */\nexport interface PluginConfig {\n\tpluginSource: 'local' | 'cloud';\n\t/** Directory path for local plugins (scanned for openclaw.plugin.json). */\n\tpluginPath?: string;\n\t/** Plugin manifest data loaded from openclaw.plugin.json (local source). */\n\tpluginManifest?: {\n\t\tid?: string;\n\t\tname?: string;\n\t\tdescription?: string;\n\t\tversion?: string;\n\t\tproviders?: string[];\n\t\tchannels?: string[];\n\t};\n\t/** ClawHub plugin package name (cloud source), e.g. \"openai\" or \"@scope/pkg\". */\n\tpluginId?: string;\n\t/** ClawHub plugin version (cloud source). Leave empty for latest. */\n\tpluginVersion?: string;\n\textra?: IDataObject;\n}\n\nexport interface McpServerConfig {\n\tmcpServerSource: 'openclaw';\n\tserverName: string;\n\turl: string;\n\ttransport?: 'sse' | 'streamable-http';\n\theaders?: Record<string, string | number | boolean>;\n\tconnectionTimeoutMs?: number;\n\textra?: IDataObject;\n}\n\ninterface OpenClawProcessResult {\n\tstdout: string;\n\tstderr: string;\n\texitCode: number | null;\n\tsignal: NodeJS.Signals | null;\n\tcommand: string;\n}\n\ninterface ResolvedBinary {\n\tbinaryPath: string;\n\tpathDirectories: string[];\n}\n\ntype SelectorType = 'agent' | 'sessionId' | 'recipient' | 'default';\n\nconst selectorTypeToParameterName: Record<Exclude<SelectorType, 'default'>, string> = {\n\tagent: 'agentId',\n\tsessionId: 'sessionId',\n\trecipient: 'to',\n};\n\nconst selectorTypeToCliFlag: Record<Exclude<SelectorType, 'default'>, string> = {\n\tagent: '--agent',\n\tsessionId: '--session-id',\n\trecipient: '--to',\n};\n\nconst DEFAULT_TIMEOUT_SECONDS = 300;\nconst CLI_SHUTDOWN_GRACE_SECONDS = 90;\nconst OPENCLAW_CONFIG_PATH_ENV = 'OPENCLAW_CONFIG_PATH';\nconst OPENCLAW_STATE_DIR_ENV = 'OPENCLAW_STATE_DIR';\nconst OPENCLAW_OAUTH_DIR_ENV = 'OPENCLAW_OAUTH_DIR';\nconst OPENCLAW_DEFAULT_ACCOUNT_ID = 'default';\nconst OPEN_CODE_FREE_MODEL_SOURCE = 'opencode-free';\nconst OPEN_CODE_FREE_PROVIDER = 'opencode';\nconst OPEN_CODE_FREE_ENV_VAR = 'OPENCODE_API_KEY';\nconst OPEN_CODE_FREE_ENV_ALIAS = 'OPENCODE_ZEN_API_KEY';\nconst OPEN_CODE_FREE_PUBLIC_KEY = 'public';\nconst NINE_ROUTER_MODEL_SOURCE = '9router';\nconst NINE_ROUTER_PROVIDER = '9router';\nconst NINE_ROUTER_DEFAULT_BASE_URL = 'http://localhost:20128/api/v1';\nconst NINE_ROUTER_API = 'openai-completions';\nconst NINE_ROUTER_CONTEXT_WINDOW = 128_000;\nconst NINE_ROUTER_MAX_TOKENS = 32_000;\nconst OPENCLAW_TELEGRAM_CHANNEL_NODE_TYPE = '@n8n/n8n-nodes-langchain.openClawTelegramChannel';\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction getErrorMessage(error: unknown): string {\n\tif (error instanceof Error) {\n\t\treturn error.message;\n\t}\n\treturn String(error);\n}\n\nfunction normalizeOptionalString(value: unknown): string | undefined {\n\tif (typeof value !== 'string') {\n\t\treturn undefined;\n\t}\n\tconst trimmed = value.trim();\n\treturn trimmed || undefined;\n}\n\nfunction normalizeLowercaseStringOrEmpty(value: string | undefined): string {\n\treturn (value ?? '').trim().toLowerCase();\n}\n\nfunction normalizeStringOrNumber(value: unknown): string | undefined {\n\tif (typeof value === 'number' && Number.isFinite(value)) {\n\t\treturn String(value);\n\t}\n\treturn normalizeOptionalString(value);\n}\n\nfunction normalizeTelegramAllowFromEntry(value: unknown): string | undefined {\n\tconst raw = normalizeStringOrNumber(value);\n\tif (!raw) {\n\t\treturn undefined;\n\t}\n\tconst normalized = raw.replace(/^(telegram|tg):/i, '').trim();\n\treturn normalized || undefined;\n}\n\nfunction normalizeAllowFromEntries(value: unknown): string[] {\n\tconst rawEntries = Array.isArray(value)\n\t\t? value\n\t\t: typeof value === 'string'\n\t\t\t? value.split(/[\\n,]/)\n\t\t\t: [];\n\tconst seen = new Set<string>();\n\tconst entries: string[] = [];\n\tfor (const rawEntry of rawEntries) {\n\t\tconst entry = normalizeTelegramAllowFromEntry(rawEntry);\n\t\tif (!entry || seen.has(entry)) {\n\t\t\tcontinue;\n\t\t}\n\t\tseen.add(entry);\n\t\tentries.push(entry);\n\t}\n\treturn entries;\n}\n\nfunction getPublishLiteralExpressionValue(value: string): string | undefined {\n\tconst trimmed = value.trim();\n\tif (!trimmed.startsWith('=')) {\n\t\treturn undefined;\n\t}\n\tconst expression = trimmed.slice(1).trim();\n\tif (!expression || expression.startsWith('{{') || expression.includes('$')) {\n\t\treturn undefined;\n\t}\n\tconst quotedMatch = expression.match(/^(['\"])(.*)\\1$/);\n\tif (quotedMatch) {\n\t\treturn quotedMatch[2];\n\t}\n\treturn expression;\n}\n\nfunction getObjectKeys(value: unknown): string[] | undefined {\n\tif (!isObject(value)) {\n\t\treturn undefined;\n\t}\n\treturn Object.keys(value);\n}\n\nfunction getModelDataPreview(value: unknown): string | undefined {\n\tif (value === undefined || value === null) {\n\t\treturn undefined;\n\t}\n\tif (typeof value === 'string') {\n\t\treturn value.length <= 300 ? value : `${value.slice(0, 300)}...`;\n\t}\n\tif (typeof value !== 'object') {\n\t\treturn String(value);\n\t}\n\tif (Array.isArray(value)) {\n\t\treturn `[array length=${value.length}]`;\n\t}\n\tif (isObject(value)) {\n\t\tconst modelId = normalizeOptionalString(value.modelId);\n\t\tconst modelSource = normalizeOptionalString(value.modelSource);\n\t\tconst extra = isObject(value.extra) ? value.extra : undefined;\n\t\tif (modelId || modelSource || extra) {\n\t\t\treturn JSON.stringify({\n\t\t\t\tmodelId,\n\t\t\t\tmodelSource,\n\t\t\t\textraKeys: getObjectKeys(extra),\n\t\t\t});\n\t\t}\n\t\treturn `[object keys=${Object.keys(value).slice(0, 20).join(',')}]`;\n\t}\n\treturn undefined;\n}\n\nfunction getModelProvider(modelId: string | undefined): string | undefined {\n\tconst provider = modelId?.split('/')[0];\n\treturn normalizeOptionalString(provider);\n}\n\nfunction parseModelRef(modelId: string): { provider: string; model: string } | undefined {\n\tconst [providerPart, ...modelParts] = modelId.split('/');\n\tconst provider = normalizeOptionalString(providerPart)?.toLowerCase();\n\tconst model = normalizeOptionalString(modelParts.join('/'));\n\tif (!provider || !model) {\n\t\treturn undefined;\n\t}\n\treturn { provider, model };\n}\n\nfunction isOpenCodeFreeModel(\n\tmodelConfig: ModelConfig | undefined,\n\tmodelId: string | undefined,\n): boolean {\n\treturn (\n\t\tmodelConfig?.modelSource === OPEN_CODE_FREE_MODEL_SOURCE &&\n\t\tnormalizeLowercaseStringOrEmpty(getModelProvider(modelId)) === OPEN_CODE_FREE_PROVIDER\n\t);\n}\n\nfunction hasOpenCodeAuthEnv(env: NodeJS.ProcessEnv): boolean {\n\treturn (\n\t\tnormalizeOptionalString(env[OPEN_CODE_FREE_ENV_VAR]) !== undefined ||\n\t\tnormalizeOptionalString(env[OPEN_CODE_FREE_ENV_ALIAS]) !== undefined\n\t);\n}\n\nfunction applyOpenCodeFreeAuthEnv(params: {\n\tenv: NodeJS.ProcessEnv;\n\tmodelConfig: ModelConfig | undefined;\n\tmodelId: string | undefined;\n}): { applied: boolean; envVar: string; reason: string } {\n\tif (!isOpenCodeFreeModel(params.modelConfig, params.modelId)) {\n\t\treturn {\n\t\t\tapplied: false,\n\t\t\tenvVar: OPEN_CODE_FREE_ENV_VAR,\n\t\t\treason: 'not-open-code-free',\n\t\t};\n\t}\n\n\tif (hasOpenCodeAuthEnv(params.env) || hasOpenCodeAuthEnv(process.env)) {\n\t\treturn {\n\t\t\tapplied: false,\n\t\t\tenvVar: OPEN_CODE_FREE_ENV_VAR,\n\t\t\treason: 'existing-auth-env',\n\t\t};\n\t}\n\n\tparams.env[OPEN_CODE_FREE_ENV_VAR] = OPEN_CODE_FREE_PUBLIC_KEY;\n\treturn {\n\t\tapplied: true,\n\t\tenvVar: OPEN_CODE_FREE_ENV_VAR,\n\t\treason: 'configured-public-env',\n\t};\n}\n\nfunction getOpenClawConfigPath(): string | undefined {\n\tconst configuredPath = normalizeOptionalString(process.env[OPENCLAW_CONFIG_PATH_ENV]);\n\tif (configuredPath) {\n\t\treturn configuredPath;\n\t}\n\tconst home = getHomeDirectory();\n\treturn home ? join(home, '.openclaw', 'openclaw.json') : undefined;\n}\n\nfunction resolveOpenClawStateDir(): string | undefined {\n\tconst stateDir = normalizeOptionalString(process.env[OPENCLAW_STATE_DIR_ENV]);\n\tif (stateDir) {\n\t\treturn stateDir;\n\t}\n\tconst home = getHomeDirectory();\n\treturn home ? join(home, '.openclaw') : undefined;\n}\n\nfunction resolveOpenClawCredentialsDir(): string | undefined {\n\tconst oauthDir = normalizeOptionalString(process.env[OPENCLAW_OAUTH_DIR_ENV]);\n\tif (oauthDir) {\n\t\treturn oauthDir;\n\t}\n\tconst stateDir = resolveOpenClawStateDir();\n\treturn stateDir ? join(stateDir, 'credentials') : undefined;\n}\n\nfunction safeFilenameKey(value: string): string {\n\treturn value\n\t\t.trim()\n\t\t.toLowerCase()\n\t\t.replace(/[\\\\/:*?\"<>|]/g, '_')\n\t\t.replace(/\\.\\./g, '_');\n}\n\nfunction getTelegramPairingPath(credentialsDir: string): string {\n\treturn join(credentialsDir, 'telegram-pairing.json');\n}\n\nfunction getTelegramAllowFromPaths(credentialsDir: string, accountId: string): string[] {\n\tconst accountPath = join(credentialsDir, `telegram-${safeFilenameKey(accountId)}-allowFrom.json`);\n\tif (accountId === OPENCLAW_DEFAULT_ACCOUNT_ID) {\n\t\treturn [accountPath, join(credentialsDir, 'telegram-allowFrom.json')];\n\t}\n\treturn [accountPath];\n}\n\nfunction getTelegramAllowFromWritePath(credentialsDir: string, accountId: string): string {\n\treturn join(credentialsDir, `telegram-${safeFilenameKey(accountId)}-allowFrom.json`);\n}\n\nfunction readOpenClawStateJsonFile(filePath: string): unknown | undefined {\n\ttry {\n\t\tif (!existsSync(filePath) || !statSync(filePath).isFile()) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn jsonParse<unknown>(readFileSync(filePath, 'utf8'), {\n\t\t\tacceptJSObject: true,\n\t\t\trepairJSON: true,\n\t\t});\n\t} catch (error) {\n\t\tconsole.log('[OpenClawAgentV2] Failed to read Telegram allowFrom source file', {\n\t\t\tfilePath,\n\t\t\terror: getErrorMessage(error),\n\t\t});\n\t\treturn undefined;\n\t}\n}\n\nfunction getMetaString(meta: unknown, key: string): string | undefined {\n\treturn isObject(meta) ? normalizeOptionalString(meta[key]) : undefined;\n}\n\nfunction addTelegramAllowFromEntry(entries: string[], seen: Set<string>, value: unknown): void {\n\tconst entry = normalizeTelegramAllowFromEntry(value);\n\tif (!entry || seen.has(entry)) {\n\t\treturn;\n\t}\n\tseen.add(entry);\n\tentries.push(entry);\n}\n\nfunction getFallbackTelegramAllowFrom(accountId: string): {\n\tallowFrom: string[];\n\tcredentialsDir?: string;\n\tpairingPath?: string;\n\tallowFromPaths?: string[];\n\tpairingCount: number;\n\tallowFromFileCount: number;\n} {\n\tconst credentialsDir = resolveOpenClawCredentialsDir();\n\tif (!credentialsDir) {\n\t\treturn { allowFrom: [], pairingCount: 0, allowFromFileCount: 0 };\n\t}\n\n\tconst pairingPath = getTelegramPairingPath(credentialsDir);\n\tconst allowFromPaths = getTelegramAllowFromPaths(credentialsDir, accountId);\n\tconst entries: string[] = [];\n\tconst seen = new Set<string>();\n\tlet pairingCount = 0;\n\tlet allowFromFileCount = 0;\n\n\tconst pairingStore = readOpenClawStateJsonFile(pairingPath);\n\tconst requests =\n\t\tisObject(pairingStore) && Array.isArray(pairingStore.requests) ? pairingStore.requests : [];\n\tfor (const request of requests) {\n\t\tif (!isObject(request)) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst requestAccountId =\n\t\t\tnormalizeOpenClawAccountId(getMetaString(request.meta, 'accountId')) ??\n\t\t\tOPENCLAW_DEFAULT_ACCOUNT_ID;\n\t\tif (requestAccountId !== accountId) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst beforeCount = entries.length;\n\t\taddTelegramAllowFromEntry(entries, seen, request.id);\n\t\tif (entries.length > beforeCount) {\n\t\t\tpairingCount++;\n\t\t}\n\t}\n\n\tfor (const allowFromPath of allowFromPaths) {\n\t\tconst allowFromStore = readOpenClawStateJsonFile(allowFromPath);\n\t\tconst allowFromEntries =\n\t\t\tisObject(allowFromStore) && Array.isArray(allowFromStore.allowFrom)\n\t\t\t\t? allowFromStore.allowFrom\n\t\t\t\t: [];\n\t\tfor (const entry of allowFromEntries) {\n\t\t\tconst beforeCount = entries.length;\n\t\t\taddTelegramAllowFromEntry(entries, seen, entry);\n\t\t\tif (entries.length > beforeCount) {\n\t\t\t\tallowFromFileCount++;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\tallowFrom: entries,\n\t\tcredentialsDir,\n\t\tpairingPath,\n\t\tallowFromPaths,\n\t\tpairingCount,\n\t\tallowFromFileCount,\n\t};\n}\n\nfunction writeTelegramAllowFromStore(\n\taccountId: string,\n\tallowFrom: string[],\n): {\n\tchanged: boolean;\n\tfilePath?: string;\n} {\n\tconst credentialsDir = resolveOpenClawCredentialsDir();\n\tif (!credentialsDir) {\n\t\tconsole.log(\n\t\t\t'[OpenClawAgentV2] Telegram allowFrom store sync skipped: credentials dir unknown',\n\t\t\t{\n\t\t\t\taccountId,\n\t\t\t\tallowFromCount: allowFrom.length,\n\t\t\t},\n\t\t);\n\t\treturn { changed: false };\n\t}\n\n\tconst filePath = getTelegramAllowFromWritePath(credentialsDir, accountId);\n\tconst existingStore = readOpenClawStateJsonFile(filePath);\n\tconst nextStore: IDataObject = isObject(existingStore)\n\t\t? { ...existingStore, version: 1, allowFrom }\n\t\t: { version: 1, allowFrom };\n\tconst existingJson = isObject(existingStore) ? JSON.stringify(existingStore, null, 2) : undefined;\n\tconst nextJson = JSON.stringify(nextStore, null, 2);\n\tif (existingJson === nextJson) {\n\t\tconsole.log('[OpenClawAgentV2] Telegram allowFrom store already current', {\n\t\t\taccountId,\n\t\t\tfilePath,\n\t\t\tallowFromCount: allowFrom.length,\n\t\t});\n\t\treturn { changed: false, filePath };\n\t}\n\n\tmkdirSync(dirname(filePath), { recursive: true });\n\twriteFileSync(filePath, `${nextJson}\\n`, 'utf8');\n\tconsole.log('[OpenClawAgentV2] Telegram allowFrom store written', {\n\t\taccountId,\n\t\tfilePath,\n\t\tallowFromCount: allowFrom.length,\n\t});\n\treturn { changed: true, filePath };\n}\n\nfunction ensureDataObject(parent: IDataObject, key: string): IDataObject {\n\tconst existing = parent[key];\n\tif (isObject(existing)) {\n\t\treturn existing as IDataObject;\n\t}\n\tconst next: IDataObject = {};\n\tparent[key] = next;\n\treturn next;\n}\n\nfunction setConfigValue(target: IDataObject, key: string, value: unknown): boolean {\n\tif (target[key] === value) {\n\t\treturn false;\n\t}\n\ttarget[key] = value as IDataObject[string];\n\treturn true;\n}\n\nfunction deleteConfigValue(target: IDataObject, key: string): boolean {\n\tif (target[key] === undefined) {\n\t\treturn false;\n\t}\n\tdelete target[key];\n\treturn true;\n}\n\nfunction setOptionalConfigValue(target: IDataObject, key: string, value: unknown): boolean {\n\tif (value === undefined) {\n\t\treturn deleteConfigValue(target, key);\n\t}\n\treturn setConfigValue(target, key, value);\n}\n\nfunction setOptionalStringArrayConfigValue(\n\ttarget: IDataObject,\n\tkey: string,\n\tvalue: string[] | undefined,\n): boolean {\n\tif (value === undefined) {\n\t\treturn deleteConfigValue(target, key);\n\t}\n\tif (value.length === 0) {\n\t\treturn deleteConfigValue(target, key);\n\t}\n\tconst existing = target[key];\n\tif (\n\t\tArray.isArray(existing) &&\n\t\texisting.length === value.length &&\n\t\texisting.every((entry, index) => entry === value[index])\n\t) {\n\t\treturn false;\n\t}\n\ttarget[key] = value as IDataObject[string];\n\treturn true;\n}\n\nfunction setDefaultConfigValue(target: IDataObject, key: string, value: unknown): boolean {\n\tif (target[key] !== undefined) {\n\t\treturn false;\n\t}\n\ttarget[key] = value as IDataObject[string];\n\treturn true;\n}\n\nfunction normalizeOpenClawAccountId(value: string | undefined): string | undefined {\n\tconst trimmed = normalizeOptionalString(value)?.toLowerCase();\n\tif (!trimmed) {\n\t\treturn undefined;\n\t}\n\tconst normalized = trimmed\n\t\t.replace(/[^a-z0-9_-]+/g, '-')\n\t\t.replace(/^-+/, '')\n\t\t.replace(/-+$/, '')\n\t\t.slice(0, 64);\n\tif (!normalized || ['__proto__', 'constructor', 'prototype'].includes(normalized)) {\n\t\treturn undefined;\n\t}\n\treturn normalized;\n}\n\nfunction normalizeOpenClawMcpServerName(value: string | undefined): string | undefined {\n\tconst trimmed = normalizeOptionalString(value);\n\tif (!trimmed) {\n\t\treturn undefined;\n\t}\n\tconst normalized = trimmed\n\t\t.replace(/[^A-Za-z0-9_-]+/g, '-')\n\t\t.replace(/^-+/, '')\n\t\t.replace(/-+$/, '')\n\t\t.slice(0, 80);\n\tif (!normalized || ['__proto__', 'constructor', 'prototype'].includes(normalized)) {\n\t\treturn undefined;\n\t}\n\treturn normalized;\n}\n\nfunction isHttpUrl(value: string): boolean {\n\ttry {\n\t\tconst parsed = new URL(value);\n\t\treturn parsed.protocol === 'http:' || parsed.protocol === 'https:';\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction normalizeMcpTransport(value: unknown): McpServerConfig['transport'] | undefined {\n\tif (value === 'sse' || value === 'streamable-http') {\n\t\treturn value;\n\t}\n\tif (value === 'http') {\n\t\treturn 'streamable-http';\n\t}\n\treturn undefined;\n}\n\nfunction normalizeMcpHeaders(\n\tvalue: unknown,\n): Record<string, string | number | boolean> | undefined {\n\tlet rawHeaders: unknown = value;\n\tif (typeof value === 'string') {\n\t\tconst trimmed = value.trim();\n\t\tif (!trimmed || trimmed === '{}') {\n\t\t\treturn undefined;\n\t\t}\n\t\trawHeaders = jsonParse<unknown>(trimmed, { acceptJSObject: true, repairJSON: true });\n\t}\n\tif (!isObject(rawHeaders)) {\n\t\treturn undefined;\n\t}\n\tconst headers = Object.fromEntries(\n\t\tObject.entries(rawHeaders).filter(\n\t\t\t(entry): entry is [string, string | number | boolean] =>\n\t\t\t\ttypeof entry[1] === 'string' ||\n\t\t\t\ttypeof entry[1] === 'number' ||\n\t\t\t\ttypeof entry[1] === 'boolean',\n\t\t),\n\t);\n\treturn Object.keys(headers).length > 0 ? headers : undefined;\n}\n\nfunction normalizePositiveInteger(value: unknown): number | undefined {\n\tif (typeof value !== 'number' || !Number.isFinite(value) || value <= 0) {\n\t\treturn undefined;\n\t}\n\treturn Math.floor(value);\n}\n\nfunction getActivationVariables(context: ITriggerFunctions): IDataObject {\n\tconst additionalData = (context as unknown as { additionalData?: { variables?: IDataObject } })\n\t\t.additionalData;\n\treturn isObject(additionalData?.variables) ? additionalData.variables : {};\n}\n\nfunction resolveVariableExpression(value: string, variables: IDataObject): unknown | undefined {\n\tconst trimmed = value.trim();\n\tconst expression = trimmed.startsWith('=') ? trimmed.slice(1).trim() : trimmed;\n\tconst match = expression.match(\n\t\t/^\\{\\{\\s*\\$vars(?:\\.([A-Za-z_][A-Za-z0-9_]*)|\\[['\"]([^'\"]+)['\"]\\])\\s*\\}\\}$/,\n\t);\n\tif (!match) {\n\t\treturn undefined;\n\t}\n\tconst key = match[1] ?? match[2];\n\treturn key ? variables[key] : undefined;\n}\n\nfunction resolvePublishParameterValue(value: unknown, variables: IDataObject): unknown {\n\tif (typeof value !== 'string') {\n\t\treturn value;\n\t}\n\tconst trimmed = value.trim();\n\tif (!trimmed.startsWith('=') && !trimmed.startsWith('{{')) {\n\t\treturn value;\n\t}\n\treturn resolveVariableExpression(trimmed, variables);\n}\n\nfunction getPublishAllowFrom(params: {\n\trawValue: unknown;\n\tvariables: IDataObject;\n\tnodeName?: string;\n\taccountId?: string;\n}): string[] | undefined {\n\tconst resolvedValue = resolvePublishParameterValue(params.rawValue, params.variables);\n\tif (resolvedValue === undefined && typeof params.rawValue === 'string') {\n\t\tconst literalValue = getPublishLiteralExpressionValue(params.rawValue);\n\t\tif (literalValue !== undefined) {\n\t\t\tconst literalAllowFrom = normalizeAllowFromEntries(literalValue);\n\t\t\tconsole.log('OpenClaw publish sync: resolved Telegram allowFrom literal expression', {\n\t\t\t\tnodeName: params.nodeName,\n\t\t\t\trawValue: params.rawValue,\n\t\t\t\tallowFromCount: literalAllowFrom.length,\n\t\t\t});\n\t\t\treturn literalAllowFrom;\n\t\t}\n\n\t\tconst accountId = params.accountId ?? OPENCLAW_DEFAULT_ACCOUNT_ID;\n\t\tconst fallback = getFallbackTelegramAllowFrom(accountId);\n\t\tif (fallback.allowFrom.length > 0) {\n\t\t\tconsole.log('OpenClaw publish sync: using Telegram allowFrom fallback from OpenClaw state', {\n\t\t\t\tnodeName: params.nodeName,\n\t\t\t\taccountId,\n\t\t\t\tcredentialsDir: fallback.credentialsDir,\n\t\t\t\tpairingPath: fallback.pairingPath,\n\t\t\t\tallowFromPaths: fallback.allowFromPaths,\n\t\t\t\tpairingCount: fallback.pairingCount,\n\t\t\t\tallowFromFileCount: fallback.allowFromFileCount,\n\t\t\t\tallowFromCount: fallback.allowFrom.length,\n\t\t\t});\n\t\t\treturn fallback.allowFrom;\n\t\t}\n\n\t\tconsole.log('OpenClaw publish sync: Telegram allowFrom expression unresolved, skipping field', {\n\t\t\tnodeName: params.nodeName,\n\t\t\trawValue: params.rawValue,\n\t\t\taccountId,\n\t\t\tcredentialsDir: fallback.credentialsDir,\n\t\t\tpairingPath: fallback.pairingPath,\n\t\t\tallowFromPaths: fallback.allowFromPaths,\n\t\t});\n\t\treturn undefined;\n\t}\n\tif (resolvedValue === undefined) {\n\t\tconst accountId = params.accountId ?? OPENCLAW_DEFAULT_ACCOUNT_ID;\n\t\tconst fallback = getFallbackTelegramAllowFrom(accountId);\n\t\tif (fallback.allowFrom.length > 0) {\n\t\t\tconsole.log('OpenClaw publish sync: using Telegram allowFrom fallback from OpenClaw state', {\n\t\t\t\tnodeName: params.nodeName,\n\t\t\t\taccountId,\n\t\t\t\tcredentialsDir: fallback.credentialsDir,\n\t\t\t\tpairingPath: fallback.pairingPath,\n\t\t\t\tallowFromPaths: fallback.allowFromPaths,\n\t\t\t\tpairingCount: fallback.pairingCount,\n\t\t\t\tallowFromFileCount: fallback.allowFromFileCount,\n\t\t\t\tallowFromCount: fallback.allowFrom.length,\n\t\t\t});\n\t\t\treturn fallback.allowFrom;\n\t\t}\n\t\treturn undefined;\n\t}\n\tconst allowFrom = normalizeAllowFromEntries(resolvedValue);\n\tconsole.log('OpenClaw publish sync: resolved Telegram allowFrom parameter', {\n\t\tnodeName: params.nodeName,\n\t\trawType: typeof params.rawValue,\n\t\tresolvedType: Array.isArray(resolvedValue) ? 'array' : typeof resolvedValue,\n\t\tallowFromCount: allowFrom.length,\n\t});\n\treturn allowFrom;\n}\n\nfunction getMcpServerConfigFromParameters(parameters: Record<string, unknown>): {\n\tconfig?: McpServerConfig;\n\treason?: string;\n} {\n\tconst serverName = normalizeOptionalString(parameters.serverName);\n\tconst url = normalizeOptionalString(parameters.endpointUrl);\n\tif (!serverName && !url) {\n\t\treturn { reason: 'not-mcp-server-node' };\n\t}\n\tif (!serverName) {\n\t\treturn { reason: 'missing-server-name' };\n\t}\n\tif (!url) {\n\t\treturn { reason: 'missing-endpoint-url' };\n\t}\n\n\tconst options = isObject(parameters.options) ? parameters.options : {};\n\tlet headers: McpServerConfig['headers'];\n\ttry {\n\t\theaders = normalizeMcpHeaders(options.headers);\n\t} catch (error) {\n\t\treturn { reason: `invalid-headers:${getErrorMessage(error)}` };\n\t}\n\n\treturn {\n\t\tconfig: {\n\t\t\tmcpServerSource: 'openclaw',\n\t\t\tserverName,\n\t\t\turl,\n\t\t\ttransport: normalizeMcpTransport(parameters.transport),\n\t\t\theaders,\n\t\t\tconnectionTimeoutMs: normalizePositiveInteger(options.connectionTimeoutMs),\n\t\t},\n\t};\n}\n\nfunction readOpenClawConfig(configPath: string): IDataObject {\n\tif (!existsSync(configPath)) {\n\t\treturn {};\n\t}\n\tconst rawConfig = readFileSync(configPath, 'utf8').trim();\n\tif (!rawConfig) {\n\t\treturn {};\n\t}\n\tconst parsed = jsonParse<unknown>(rawConfig, { acceptJSObject: true, repairJSON: true });\n\tif (!isObject(parsed)) {\n\t\tthrow new ApplicationError(`OpenClaw config is not an object: ${configPath}`);\n\t}\n\treturn parsed as IDataObject;\n}\n\nfunction syncChannelConfig(params: {\n\tchannelType: string;\n\tbotToken?: string;\n\treplyAccount?: string;\n\tdmPolicy?: string;\n\tgroupPolicy?: string;\n\tallowFrom?: string[];\n}): {\n\taccountId?: string;\n\tchanged: boolean;\n\tconfigPath: string;\n\ttargetPath: string;\n\tallowFromStorePath?: string;\n} {\n\tconst configPath = getOpenClawConfigPath();\n\tif (!configPath) {\n\t\tthrow new ApplicationError(\n\t\t\t`Could not determine OpenClaw config path. Set ${OPENCLAW_CONFIG_PATH_ENV} or HOME for the n8n process.`,\n\t\t);\n\t}\n\tconst config = readOpenClawConfig(configPath);\n\tconst originalConfigJson = JSON.stringify(config);\n\tconst channels = ensureDataObject(config, 'channels');\n\tconst channel = ensureDataObject(channels, params.channelType);\n\tconst accountId = normalizeOpenClawAccountId(params.replyAccount);\n\tconst useAccountTarget = !!accountId && accountId !== OPENCLAW_DEFAULT_ACCOUNT_ID;\n\tconst target = useAccountTarget\n\t\t? ensureDataObject(ensureDataObject(channel, 'accounts'), accountId)\n\t\t: channel;\n\tconst targetPath = useAccountTarget\n\t\t? `channels.${params.channelType}.accounts.${accountId}`\n\t\t: `channels.${params.channelType}`;\n\tconst dmPolicy = normalizeOptionalString(params.dmPolicy);\n\tconst groupPolicy = normalizeOptionalString(params.groupPolicy);\n\tconst isTelegramChannel = params.channelType === 'telegram';\n\n\tconsole.log('[OpenClawAgentV2] syncChannelConfig: start', {\n\t\tchannelType: params.channelType,\n\t\taccountId: accountId ?? OPENCLAW_DEFAULT_ACCOUNT_ID,\n\t\ttargetPath,\n\t\tconfigPath,\n\t\thasBotToken: !!params.botToken,\n\t\tdmPolicy: dmPolicy ?? '(openclaw-default)',\n\t\tgroupPolicy: groupPolicy ?? '(openclaw-default)',\n\t\tallowFromCount: params.allowFrom?.length,\n\t});\n\n\tlet changed = false;\n\tchanged = setConfigValue(channel, 'enabled', true) || changed;\n\tif (useAccountTarget) {\n\t\tchanged = setConfigValue(target, 'enabled', true) || changed;\n\t}\n\tchanged =\n\t\t(dmPolicy\n\t\t\t? setConfigValue(target, 'dmPolicy', dmPolicy)\n\t\t\t: setDefaultConfigValue(target, 'dmPolicy', 'pairing')) || changed;\n\tchanged =\n\t\t(groupPolicy\n\t\t\t? setConfigValue(target, 'groupPolicy', groupPolicy)\n\t\t\t: setDefaultConfigValue(target, 'groupPolicy', 'allowlist')) || changed;\n\tlet allowFromStorePath: string | undefined;\n\tif (params.allowFrom !== undefined) {\n\t\tif (isTelegramChannel) {\n\t\t\tconst allowFromStoreSync = writeTelegramAllowFromStore(\n\t\t\t\taccountId ?? OPENCLAW_DEFAULT_ACCOUNT_ID,\n\t\t\t\tparams.allowFrom,\n\t\t\t);\n\t\t\tallowFromStorePath = allowFromStoreSync.filePath;\n\t\t\tchanged = allowFromStoreSync.changed || changed;\n\t\t} else {\n\t\t\tchanged = setOptionalStringArrayConfigValue(target, 'allowFrom', params.allowFrom) || changed;\n\t\t}\n\t}\n\tif (isTelegramChannel) {\n\t\tchanged = deleteConfigValue(target, 'allowFrom') || changed;\n\t}\n\n\tif (params.botToken) {\n\t\tchanged = setConfigValue(target, 'botToken', params.botToken) || changed;\n\t}\n\n\tconst configChanged = JSON.stringify(config) !== originalConfigJson;\n\tif (configChanged) {\n\t\tmkdirSync(dirname(configPath), { recursive: true });\n\t\twriteFileSync(configPath, `${JSON.stringify(config, null, 2)}\\n`, 'utf8');\n\t\tconsole.log('[OpenClawAgentV2] syncChannelConfig: openclaw.json written', {\n\t\t\tchannelType: params.channelType,\n\t\t\taccountId: accountId ?? OPENCLAW_DEFAULT_ACCOUNT_ID,\n\t\t\ttargetPath,\n\t\t\tconfigPath,\n\t\t\tallowFromCount: params.allowFrom?.length,\n\t\t\tallowFromStorePath,\n\t\t});\n\t} else if (changed) {\n\t\tconsole.log('[OpenClawAgentV2] syncChannelConfig: external channel store updated', {\n\t\t\tchannelType: params.channelType,\n\t\t\taccountId: accountId ?? OPENCLAW_DEFAULT_ACCOUNT_ID,\n\t\t\ttargetPath,\n\t\t\tconfigPath,\n\t\t\tallowFromCount: params.allowFrom?.length,\n\t\t\tallowFromStorePath,\n\t\t});\n\t} else {\n\t\tconsole.log('[OpenClawAgentV2] syncChannelConfig: no changes needed', {\n\t\t\tchannelType: params.channelType,\n\t\t\taccountId: accountId ?? OPENCLAW_DEFAULT_ACCOUNT_ID,\n\t\t\ttargetPath,\n\t\t\tconfigPath,\n\t\t\tallowFromCount: params.allowFrom?.length,\n\t\t\tallowFromStorePath,\n\t\t});\n\t}\n\treturn { accountId, changed, configPath, targetPath, allowFromStorePath };\n}\n\nfunction getNineRouterModelDefinition(model: string): IDataObject {\n\treturn {\n\t\tid: model,\n\t\tname: model === 'auto' ? '9Router Auto' : model,\n\t\tapi: NINE_ROUTER_API,\n\t\treasoning: false,\n\t\tinput: ['text', 'image'],\n\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },\n\t\tcontextWindow: NINE_ROUTER_CONTEXT_WINDOW,\n\t\tmaxTokens: NINE_ROUTER_MAX_TOKENS,\n\t};\n}\n\nfunction syncNineRouterModelConfig(params: {\n\tmodelConfig: ModelConfig | undefined;\n\tmodelId: string | undefined;\n}): {\n\tchanged: boolean;\n\tconfigPath?: string;\n\treason: string;\n\ttargetPath?: string;\n\tmodelRef?: string;\n\texistingBaseUrl?: string;\n} {\n\tif (\n\t\tparams.modelConfig?.modelSource !== NINE_ROUTER_MODEL_SOURCE ||\n\t\tnormalizeLowercaseStringOrEmpty(getModelProvider(params.modelId)) !== NINE_ROUTER_PROVIDER ||\n\t\t!params.modelId\n\t) {\n\t\treturn { changed: false, reason: 'not-nine-router' };\n\t}\n\n\tconst modelRef = parseModelRef(params.modelId);\n\tif (!modelRef || modelRef.provider !== NINE_ROUTER_PROVIDER) {\n\t\treturn { changed: false, reason: 'invalid-model-id' };\n\t}\n\n\tconst configPath = getOpenClawConfigPath();\n\tif (!configPath) {\n\t\tthrow new ApplicationError(\n\t\t\t`Could not determine OpenClaw config path. Set ${OPENCLAW_CONFIG_PATH_ENV} or HOME for the n8n process.`,\n\t\t);\n\t}\n\n\tconst config = readOpenClawConfig(configPath);\n\tconst models = ensureDataObject(config, 'models');\n\tconst providers = ensureDataObject(models, 'providers');\n\tconst provider = ensureDataObject(providers, NINE_ROUTER_PROVIDER);\n\tconst existingBaseUrl = normalizeOptionalString(provider.baseUrl);\n\n\tlet changed = false;\n\tchanged =\n\t\tsetDefaultConfigValue(\n\t\t\tprovider,\n\t\t\t'baseUrl',\n\t\t\tnormalizeOptionalString(params.modelConfig.extra?.baseUrl) ?? NINE_ROUTER_DEFAULT_BASE_URL,\n\t\t) || changed;\n\tchanged = setConfigValue(provider, 'api', NINE_ROUTER_API) || changed;\n\n\tlet providerModels: IDataObject[];\n\tif (Array.isArray(provider.models)) {\n\t\tproviderModels = provider.models.filter(isObject) as IDataObject[];\n\t\tif (providerModels.length !== provider.models.length) {\n\t\t\tprovider.models = providerModels;\n\t\t\tchanged = true;\n\t\t}\n\t} else {\n\t\tproviderModels = [];\n\t\tprovider.models = providerModels;\n\t\tchanged = true;\n\t}\n\n\tconst existingModel = providerModels.find(\n\t\t(model) => normalizeOptionalString(model.id) === modelRef.model,\n\t);\n\tif (existingModel) {\n\t\tchanged = setConfigValue(existingModel, 'api', NINE_ROUTER_API) || changed;\n\t\tchanged = setDefaultConfigValue(existingModel, 'name', modelRef.model) || changed;\n\t\tchanged = setDefaultConfigValue(existingModel, 'reasoning', false) || changed;\n\t\tchanged = setDefaultConfigValue(existingModel, 'input', ['text', 'image']) || changed;\n\t\tchanged =\n\t\t\tsetDefaultConfigValue(existingModel, 'cost', {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t}) || changed;\n\t\tchanged =\n\t\t\tsetDefaultConfigValue(existingModel, 'contextWindow', NINE_ROUTER_CONTEXT_WINDOW) || changed;\n\t\tchanged = setDefaultConfigValue(existingModel, 'maxTokens', NINE_ROUTER_MAX_TOKENS) || changed;\n\t} else {\n\t\tproviderModels.push(getNineRouterModelDefinition(modelRef.model));\n\t\tchanged = true;\n\t}\n\n\tconst agents = ensureDataObject(config, 'agents');\n\tconst defaults = ensureDataObject(agents, 'defaults');\n\tconst defaultModels = ensureDataObject(defaults, 'models');\n\tconst fullModelRef = `${modelRef.provider}/${modelRef.model}`;\n\tconst existingDefaultModel = defaultModels[fullModelRef];\n\tif (!isObject(existingDefaultModel)) {\n\t\tdefaultModels[fullModelRef] = {};\n\t\tchanged = true;\n\t}\n\n\tif (changed) {\n\t\tmkdirSync(dirname(configPath), { recursive: true });\n\t\twriteFileSync(configPath, `${JSON.stringify(config, null, 2)}\\n`, 'utf8');\n\t}\n\n\treturn {\n\t\tchanged,\n\t\tconfigPath,\n\t\treason: changed ? 'updated-provider' : 'already-current',\n\t\ttargetPath: `models.providers.${NINE_ROUTER_PROVIDER}`,\n\t\tmodelRef: fullModelRef,\n\t\texistingBaseUrl,\n\t};\n}\n\nfunction syncMcpServerConfig(params: { mcpServerConfigs: McpServerConfig[] }): {\n\tchanged: boolean;\n\tconfigPath?: string;\n\tsynced: string[];\n\tskipped: string[];\n} {\n\tconst synced: string[] = [];\n\tconst skipped: string[] = [];\n\tif (params.mcpServerConfigs.length === 0) {\n\t\treturn { changed: false, synced, skipped };\n\t}\n\n\tconst configPath = getOpenClawConfigPath();\n\tif (!configPath) {\n\t\tconst reason = `Could not determine OpenClaw config path. Set ${OPENCLAW_CONFIG_PATH_ENV} or HOME for the n8n process.`;\n\t\tconsole.log('[OpenClawAgentV2] syncMcpServerConfig: skipped all servers', {\n\t\t\treason,\n\t\t\tserverCount: params.mcpServerConfigs.length,\n\t\t});\n\t\treturn { changed: false, synced, skipped: [reason] };\n\t}\n\n\tconsole.log('[OpenClawAgentV2] syncMcpServerConfig: start', {\n\t\tconfigPath,\n\t\tserverCount: params.mcpServerConfigs.length,\n\t\tserverNames: params.mcpServerConfigs.map((server) => server.serverName),\n\t});\n\n\tconst config = readOpenClawConfig(configPath);\n\tconst mcp = ensureDataObject(config, 'mcp');\n\tconst servers = ensureDataObject(mcp, 'servers');\n\n\tlet changed = false;\n\tfor (const serverConfig of params.mcpServerConfigs) {\n\t\tconst serverName = normalizeOpenClawMcpServerName(serverConfig.serverName);\n\t\tconst url = normalizeOptionalString(serverConfig.url);\n\t\tif (!serverName) {\n\t\t\tconst reason = `invalid-name:${serverConfig.serverName}`;\n\t\t\tconsole.log('[OpenClawAgentV2] syncMcpServerConfig: skipping server', {\n\t\t\t\trawServerName: serverConfig.serverName,\n\t\t\t\treason,\n\t\t\t});\n\t\t\tskipped.push(reason);\n\t\t\tcontinue;\n\t\t}\n\t\tif (!url || !isHttpUrl(url)) {\n\t\t\tconst reason = `invalid-url:${serverName}`;\n\t\t\tconsole.log('[OpenClawAgentV2] syncMcpServerConfig: skipping server', {\n\t\t\t\tserverName,\n\t\t\t\thasUrl: !!url,\n\t\t\t\treason,\n\t\t\t});\n\t\t\tskipped.push(reason);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst server = ensureDataObject(servers, serverName);\n\t\tconst transport = normalizeMcpTransport(serverConfig.transport);\n\t\tconst headers =\n\t\t\tserverConfig.headers && Object.keys(serverConfig.headers).length > 0\n\t\t\t\t? serverConfig.headers\n\t\t\t\t: undefined;\n\t\tconst connectionTimeoutMs = normalizePositiveInteger(serverConfig.connectionTimeoutMs);\n\n\t\tchanged = setConfigValue(server, 'url', url) || changed;\n\t\tchanged = setOptionalConfigValue(server, 'transport', transport) || changed;\n\t\tchanged = setOptionalConfigValue(server, 'headers', headers) || changed;\n\t\tchanged = setOptionalConfigValue(server, 'connectionTimeoutMs', connectionTimeoutMs) || changed;\n\n\t\tchanged = deleteConfigValue(server, 'command') || changed;\n\t\tchanged = deleteConfigValue(server, 'args') || changed;\n\t\tchanged = deleteConfigValue(server, 'env') || changed;\n\t\tchanged = deleteConfigValue(server, 'cwd') || changed;\n\t\tchanged = deleteConfigValue(server, 'workingDirectory') || changed;\n\n\t\tconsole.log('[OpenClawAgentV2] syncMcpServerConfig: prepared server', {\n\t\t\tserverName,\n\t\t\trawServerName: serverConfig.serverName,\n\t\t\turl,\n\t\t\ttransport: transport ?? '(openclaw-default)',\n\t\t\theaderKeys: headers ? Object.keys(headers) : [],\n\t\t\tconnectionTimeoutMs,\n\t\t});\n\t\tsynced.push(serverName);\n\t}\n\n\tif (changed) {\n\t\tmkdirSync(dirname(configPath), { recursive: true });\n\t\twriteFileSync(configPath, `${JSON.stringify(config, null, 2)}\\n`, 'utf8');\n\t\tconsole.log('[OpenClawAgentV2] syncMcpServerConfig: openclaw.json written', {\n\t\t\tconfigPath,\n\t\t\tsynced,\n\t\t\tskipped,\n\t\t});\n\t} else {\n\t\tconsole.log('[OpenClawAgentV2] syncMcpServerConfig: no changes needed', {\n\t\t\tconfigPath,\n\t\t\tsynced,\n\t\t\tskipped,\n\t\t});\n\t}\n\n\treturn { changed, configPath, synced, skipped };\n}\n\nfunction syncPluginConfig(params: {\n\tpluginConfigs: PluginConfig[];\n}): { installed: string[]; skipped: string[]; errors: string[] } {\n\tconst installed: string[] = [];\n\tconst skipped: string[] = [];\n\tconst errors: string[] = [];\n\n\t// Read current config to check what's already installed\n\tconst configPath = getOpenClawConfigPath();\n\tlet existingInstalls: Record<string, unknown> = {};\n\tlet existingLoadPaths: string[] = [];\n\tlet existingEntries: Record<string, unknown> = {};\n\tif (configPath) {\n\t\ttry {\n\t\t\tconst config = readOpenClawConfig(configPath);\n\t\t\tconst plugins = config.plugins as IDataObject | undefined;\n\t\t\texistingInstalls = (plugins?.installs as Record<string, unknown>) ?? {};\n\t\t\texistingLoadPaths = ((plugins?.load as IDataObject)?.paths as string[]) ?? [];\n\t\t\texistingEntries = (plugins?.entries as Record<string, unknown>) ?? {};\n\t\t} catch {\n\t\t\t// Config doesn't exist yet — all plugins need install\n\t\t}\n\t}\n\n\t// Resolve the openclaw binary path (same logic as execute())\n\tconst resolvedBinary = resolveOpenClawBinary('openclaw');\n\tconst env = createOpenClawProcessEnv(resolvedBinary.pathDirectories, { NODE_NO_WARNINGS: '1' });\n\n\tfor (const pluginCfg of params.pluginConfigs) {\n\t\tif (pluginCfg.pluginSource === 'local' && pluginCfg.pluginPath) {\n\t\t\tconst pluginPath = pluginCfg.pluginPath;\n\t\t\tconst manifestId = pluginCfg.pluginManifest?.id;\n\n\t\t\t// Check if already installed at this path\n\t\t\tif (manifestId) {\n\t\t\t\tconst isPathLoaded = existingLoadPaths.includes(pluginPath);\n\t\t\t\tconst isEntryEnabled = (existingEntries[manifestId] as IDataObject)?.enabled === true;\n\n\t\t\t\tif (isPathLoaded && isEntryEnabled) {\n\t\t\t\t\tconsole.log('[OpenClawAgentV2] syncPluginConfig: already installed, skipping', {\n\t\t\t\t\t\tmanifestId,\n\t\t\t\t\t\tpluginPath,\n\t\t\t\t\t});\n\t\t\t\t\tskipped.push(manifestId);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Not installed yet — run: openclaw plugins install -l <path>\n\t\t\ttry {\n\t\t\t\tconst cmd = `${resolvedBinary.binaryPath} plugins install -l ${JSON.stringify(pluginPath)}`;\n\t\t\t\tconsole.log('[OpenClawAgentV2] syncPluginConfig: running CLI', { cmd });\n\t\t\t\tconst output = execSync(cmd, {\n\t\t\t\t\ttimeout: 30_000,\n\t\t\t\t\tencoding: 'utf8',\n\t\t\t\t\tstdio: ['pipe', 'pipe', 'pipe'],\n\t\t\t\t\tenv,\n\t\t\t\t});\n\t\t\t\tconsole.log('[OpenClawAgentV2] syncPluginConfig: CLI success', {\n\t\t\t\t\tpluginPath,\n\t\t\t\t\tmanifestId,\n\t\t\t\t\toutput: output.trim().slice(0, 500),\n\t\t\t\t});\n\t\t\t\tinstalled.push(manifestId ?? pluginPath);\n\t\t\t} catch (cliErr) {\n\t\t\t\tconst errMsg = cliErr instanceof Error ? cliErr.message : String(cliErr);\n\t\t\t\tconst stderr =\n\t\t\t\t\tcliErr && typeof cliErr === 'object' && 'stderr' in cliErr\n\t\t\t\t\t\t? String((cliErr as { stderr: unknown }).stderr)\n\t\t\t\t\t\t\t\t.trim()\n\t\t\t\t\t\t\t\t.slice(0, 500)\n\t\t\t\t\t\t: undefined;\n\t\t\t\tconsole.log('[OpenClawAgentV2] syncPluginConfig: CLI failed', {\n\t\t\t\t\tpluginPath,\n\t\t\t\t\terror: errMsg.slice(0, 300),\n\t\t\t\t\tstderr,\n\t\t\t\t});\n\t\t\t\terrors.push(`local:${pluginPath}: ${errMsg.slice(0, 200)}`);\n\t\t\t}\n\t\t} else if (pluginCfg.pluginSource === 'cloud' && pluginCfg.pluginId) {\n\t\t\tconst pluginId = pluginCfg.pluginId;\n\n\t\t\t// Check if already installed\n\t\t\tconst existingRecord = existingInstalls[pluginId] as { source?: string } | undefined;\n\t\t\tif (existingRecord?.source === 'npm' || existingRecord?.source === 'clawhub') {\n\t\t\t\tconsole.log('[OpenClawAgentV2] syncPluginConfig: already installed, skipping', {\n\t\t\t\t\tpluginId,\n\t\t\t\t\tsource: existingRecord.source,\n\t\t\t\t});\n\t\t\t\tskipped.push(pluginId);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst spec = pluginCfg.pluginVersion ? `${pluginId}@${pluginCfg.pluginVersion}` : pluginId;\n\t\t\ttry {\n\t\t\t\tconst cmd = `${resolvedBinary.binaryPath} plugins install ${JSON.stringify(spec)}`;\n\t\t\t\tconsole.log('[OpenClawAgentV2] syncPluginConfig: running CLI', { cmd });\n\t\t\t\tconst output = execSync(cmd, {\n\t\t\t\t\ttimeout: 60_000,\n\t\t\t\t\tencoding: 'utf8',\n\t\t\t\t\tstdio: ['pipe', 'pipe', 'pipe'],\n\t\t\t\t\tenv,\n\t\t\t\t});\n\t\t\t\tconsole.log('[OpenClawAgentV2] syncPluginConfig: CLI success', {\n\t\t\t\t\tpluginId,\n\t\t\t\t\toutput: output.trim().slice(0, 500),\n\t\t\t\t});\n\t\t\t\tinstalled.push(pluginId);\n\t\t\t} catch (cliErr) {\n\t\t\t\tconst errMsg = cliErr instanceof Error ? cliErr.message : String(cliErr);\n\t\t\t\tconsole.log('[OpenClawAgentV2] syncPluginConfig: CLI failed', {\n\t\t\t\t\tpluginId,\n\t\t\t\t\terror: errMsg.slice(0, 300),\n\t\t\t\t});\n\t\t\t\terrors.push(`cloud:${pluginId}: ${errMsg.slice(0, 200)}`);\n\t\t\t}\n\t\t}\n\t}\n\n\tconsole.log('[OpenClawAgentV2] syncPluginConfig: result', {\n\t\tpluginCount: params.pluginConfigs.length,\n\t\tinstalledCount: installed.length,\n\t\tskippedCount: skipped.length,\n\t\terrorCount: errors.length,\n\t\tinstalled: installed.length > 0 ? installed : undefined,\n\t\tskipped: skipped.length > 0 ? skipped : undefined,\n\t\terrors: errors.length > 0 ? errors : undefined,\n\t});\n\n\treturn { installed, skipped, errors };\n}\n\nfunction parseOpenClawOutput(stdout: string): IDataObject {\n\tconst trimmed = stdout.trim();\n\tif (!trimmed) {\n\t\treturn {};\n\t}\n\tconst parsed = jsonParse<unknown>(trimmed);\n\tif (isObject(parsed)) {\n\t\treturn parsed as IDataObject;\n\t}\n\treturn { result: parsed as object };\n}\n\nfunction isUsableFile(filePath: string): boolean {\n\ttry {\n\t\treturn existsSync(filePath) && statSync(filePath).isFile();\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction getHomeDirectory(): string | undefined {\n\treturn (\n\t\tnormalizeOptionalString(process.env.HOME) ?? normalizeOptionalString(process.env.USERPROFILE)\n\t);\n}\n\nfunction getDefaultBinarySearchPaths(binaryName: string): string[] {\n\tconst home = getHomeDirectory();\n\tconst homeCandidates = home\n\t\t? [\n\t\t\t\tjoin(home, '.volta', 'bin', binaryName),\n\t\t\t\tjoin(home, '.local', 'bin', binaryName),\n\t\t\t\tjoin(home, '.npm-global', 'bin', binaryName),\n\t\t\t\tjoin(home, '.bun', 'bin', binaryName),\n\t\t\t\tjoin(home, 'Library', 'pnpm', binaryName),\n\t\t\t]\n\t\t: [];\n\treturn [\n\t\tnormalizeOptionalString(process.env.OPENCLAW_BINARY_PATH),\n\t\tnormalizeOptionalString(process.env.OPENCLAW_BIN),\n\t\t...(process.env.PATH ?? '')\n\t\t\t.split(delimiter)\n\t\t\t.filter(Boolean)\n\t\t\t.map((pathDirectory) => join(pathDirectory, binaryName)),\n\t\t...homeCandidates,\n\t\tjoin('/opt/homebrew/bin', binaryName),\n\t\tjoin('/usr/local/bin', binaryName),\n\t].filter((candidate): candidate is string => typeof candidate === 'string');\n}\n\nfunction resolveOpenClawBinary(binaryPath: string): ResolvedBinary {\n\tif (binaryPath.includes('/') || binaryPath.includes('\\\\')) {\n\t\treturn { binaryPath, pathDirectories: [dirname(binaryPath)] };\n\t}\n\tfor (const candidate of getDefaultBinarySearchPaths(binaryPath)) {\n\t\tif (isUsableFile(candidate)) {\n\t\t\treturn { binaryPath: candidate, pathDirectories: [dirname(candidate)] };\n\t\t}\n\t}\n\treturn { binaryPath, pathDirectories: [] };\n}\n\nfunction createOpenClawProcessEnv(\n\tpathDirectories: string[],\n\tadditionalEnv: NodeJS.ProcessEnv = {},\n): NodeJS.ProcessEnv {\n\tconst existingPath = process.env.PATH ?? '';\n\tconst prependedPath = pathDirectories.filter(Boolean).join(delimiter);\n\tconst nextPath = prependedPath ? `${prependedPath}${delimiter}${existingPath}` : existingPath;\n\treturn { ...process.env, ...additionalEnv, PATH: nextPath };\n}\n\nfunction killOpenClawProcess(child: ChildProcess, signal: NodeJS.Signals): void {\n\ttry {\n\t\tif (child.pid && process.platform !== 'win32') {\n\t\t\tprocess.kill(-child.pid, signal);\n\t\t\treturn;\n\t\t}\n\t} catch {\n\t\t/* fallback */\n\t}\n\ttry {\n\t\tchild.kill(signal);\n\t} catch {\n\t\t/* already exited */\n\t}\n}\n\nfunction summarizeProcessOutput(output: string): string {\n\tconst trimmed = output.trim();\n\tif (!trimmed) return '';\n\tconst maxLength = 2000;\n\treturn trimmed.length <= maxLength ? trimmed : `${trimmed.slice(0, maxLength)}...`;\n}\n\nfunction getWatchdogTimeoutMs(timeoutSeconds: number): number {\n\treturn (timeoutSeconds + CLI_SHUTDOWN_GRACE_SECONDS) * 1000;\n}\n\nfunction getGatewayCallArgs(params: IDataObject, rpcTimeoutMs: number): string[] {\n\treturn [\n\t\t'gateway',\n\t\t'call',\n\t\t'agent',\n\t\t'--expect-final',\n\t\t'--json',\n\t\t'--timeout',\n\t\tString(rpcTimeoutMs),\n\t\t'--params',\n\t\tJSON.stringify(params),\n\t];\n}\n\nfunction quoteCommandArgument(value: string): string {\n\tif (/^[A-Za-z0-9_/:=-]+$/.test(value)) return value;\n\treturn `'${value.replaceAll(\"'\", \"'\\\\''\")}'`;\n}\n\nfunction getOpenClawCommand(binaryPath: string, args: string[]): string {\n\treturn [binaryPath, ...args].map(quoteCommandArgument).join(' ');\n}\n\nasync function runOpenClawCli(params: {\n\tbinaryPath: string;\n\targs: string[];\n\tcwd?: string;\n\ttimeoutMs: number;\n\tenv?: NodeJS.ProcessEnv;\n\tabortSignal?: AbortSignal;\n}): Promise<OpenClawProcessResult> {\n\treturn await new Promise<OpenClawProcessResult>((resolve, reject) => {\n\t\tconst resolvedBinary = resolveOpenClawBinary(params.binaryPath);\n\t\tconst command = getOpenClawCommand(resolvedBinary.binaryPath, params.args);\n\t\tconst child = spawn(resolvedBinary.binaryPath, params.args, {\n\t\t\tcwd: params.cwd,\n\t\t\tdetached: process.platform !== 'win32',\n\t\t\tstdio: ['ignore', 'pipe', 'pipe'],\n\t\t\tenv: createOpenClawProcessEnv(resolvedBinary.pathDirectories, params.env),\n\t\t});\n\n\t\tlet stdout = '';\n\t\tlet stderr = '';\n\t\tlet aborted = false;\n\t\tlet timedOut = false;\n\t\tlet forceKillTimer: NodeJS.Timeout | undefined;\n\n\t\tconst abortHandler = () => {\n\t\t\taborted = true;\n\t\t\tkillOpenClawProcess(child, 'SIGTERM');\n\t\t};\n\t\tconst timeoutTimer = setTimeout(() => {\n\t\t\ttimedOut = true;\n\t\t\tkillOpenClawProcess(child, 'SIGTERM');\n\t\t\tforceKillTimer = setTimeout(() => {\n\t\t\t\tkillOpenClawProcess(child, 'SIGKILL');\n\t\t\t}, 5000);\n\t\t}, params.timeoutMs);\n\n\t\tparams.abortSignal?.addEventListener('abort', abortHandler, { once: true });\n\t\tchild.stdout.on('data', (data: Buffer) => {\n\t\t\tstdout += data.toString();\n\t\t});\n\t\tchild.stderr.on('data', (data: Buffer) => {\n\t\t\tstderr += data.toString();\n\t\t});\n\n\t\tchild.on('error', (error: Error) => {\n\t\t\tclearTimeout(timeoutTimer);\n\t\t\tif (forceKillTimer) clearTimeout(forceKillTimer);\n\t\t\tparams.abortSignal?.removeEventListener('abort', abortHandler);\n\t\t\treject(\n\t\t\t\tnew Error(\n\t\t\t\t\t`Failed to spawn OpenClaw CLI at \"${resolvedBinary.binaryPath}\": ${error.message}. Set Options > Binary Path to the full path of the openclaw executable, or set OPENCLAW_BINARY_PATH in the n8n process environment.`,\n\t\t\t\t),\n\t\t\t);\n\t\t});\n\n\t\tchild.on('close', (exitCode: number | null, signal: NodeJS.Signals | null) => {\n\t\t\tclearTimeout(timeoutTimer);\n\t\t\tif (forceKillTimer) clearTimeout(forceKillTimer);\n\t\t\tparams.abortSignal?.removeEventListener('abort', abortHandler);\n\n\t\t\tif (aborted) {\n\t\t\t\treject(new Error('OpenClaw CLI execution was cancelled'));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (timedOut) {\n\t\t\t\tconst stderrSummary = summarizeProcessOutput(stderr);\n\t\t\t\tconst stdoutSummary = summarizeProcessOutput(stdout);\n\t\t\t\tconst details =\n\t\t\t\t\tstderrSummary || stdoutSummary ? ` Last output: ${stderrSummary || stdoutSummary}` : '';\n\t\t\t\treject(\n\t\t\t\t\tnew Error(\n\t\t\t\t\t\t`OpenClaw CLI did not finish within ${Math.ceil(params.timeoutMs / 1000)} seconds and was stopped.${details}`,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresolve({ stdout, stderr, exitCode, signal, command });\n\t\t});\n\t});\n}\n\nexport class OpenClawAgentV2 implements INodeType {\n\tdescription: INodeTypeDescription;\n\n\tconstructor(baseDescription: INodeTypeBaseDescription) {\n\t\tthis.description = {\n\t\t\t...baseDescription,\n\t\t\tversion: 2,\n\t\t\tsubtitle:\n\t\t\t\t'={{$parameter.selectorType === \"agent\" ? \"Agent: \" + $parameter.agentId : $parameter.selectorType === \"sessionId\" ? \"Session: \" + $parameter.sessionId : $parameter.selectorType === \"recipient\" ? \"To: \" + $parameter.to : \"Default route\"}}',\n\t\t\tdefaults: {\n\t\t\t\tname: 'OpenClaw AI Agent',\n\t\t\t},\n\t\t\tcodex: {\n\t\t\t\talias: ['OpenClaw', 'Agent', 'Gateway', 'Assistant', 'Channel'],\n\t\t\t\tcategories: ['AI'],\n\t\t\t\tsubcategories: {\n\t\t\t\t\tAI: ['Agents', 'Root Nodes'],\n\t\t\t\t},\n\t\t\t\tresources: {\n\t\t\t\t\tprimaryDocumentation: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\turl: 'https://docs.openclaw.ai/cli/agent',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t},\n\t\t\tinputs: [\n\t\t\t\tNodeConnectionTypes.Main,\n\t\t\t\t{\n\t\t\t\t\ttype: NodeConnectionTypes.AiChannel,\n\t\t\t\t\tdisplayName: 'Channel',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttype: NodeConnectionTypes.AiLanguageModel,\n\t\t\t\t\tdisplayName: 'Model',\n\t\t\t\t\trequired: false,\n\t\t\t\t\tmaxConnections: 1,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttype: NodeConnectionTypes.AiTool,\n\t\t\t\t\tdisplayName: 'Plugin',\n\t\t\t\t\trequired: false,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttype: NodeConnectionTypes.AiTool,\n\t\t\t\t\tdisplayName: 'MCP',\n\t\t\t\t\trequired: false,\n\t\t\t\t},\n\t\t\t],\n\t\t\toutputs: [NodeConnectionTypes.Main],\n\t\t\t// No hardcoded credentials — channels provide their own\n\t\t\tproperties: [\n\t\t\t\t{\n\t\t\t\t\tdisplayName:\n\t\t\t\t\t\t'Requires the OpenClaw CLI to be installed and configured on the n8n host. Connect Channel sub-nodes to configure messaging channels (Telegram, WhatsApp, etc.).',\n\t\t\t\t\tname: 'openClawNotice',\n\t\t\t\t\ttype: 'notice',\n\t\t\t\t\tdefault: '',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdisplayName: 'Message',\n\t\t\t\t\tname: 'message',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\trequired: true,\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t'={{ $json.chatInput || $json.chat_input || $json.message || $json.text || \"\" }}',\n\t\t\t\t\tdescription: 'Message body to send to the OpenClaw agent',\n\t\t\t\t\ttypeOptions: { rows: 5 },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdisplayName: 'Route By',\n\t\t\t\t\tname: 'selectorType',\n\t\t\t\t\ttype: 'options',\n\t\t\t\t\tdefault: 'agent',\n\t\t\t\t\tnoDataExpression: true,\n\t\t\t\t\tdescription: 'How to target the OpenClaw agent turn',\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: 'Agent ID',\n\t\t\t\t\t\t\tvalue: 'agent',\n\t\t\t\t\t\t\tdescription: 'Run against a configured OpenClaw agent',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: 'Existing Session ID',\n\t\t\t\t\t\t\tvalue: 'sessionId',\n\t\t\t\t\t\t\tdescription: 'Continue an existing OpenClaw session',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: 'Recipient',\n\t\t\t\t\t\t\tvalue: 'recipient',\n\t\t\t\t\t\t\tdescription: 'Use a recipient/channel target to derive the session',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: 'OpenClaw Default',\n\t\t\t\t\t\t\tvalue: 'default',\n\t\t\t\t\t\t\tdescription: 'Let OpenClaw choose its default route',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdisplayName: 'Agent ID',\n\t\t\t\t\tname: 'agentId',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tdefault: 'main',\n\t\t\t\t\tdescription: 'Configured OpenClaw agent ID',\n\t\t\t\t\tdisplayOptions: { show: { selectorType: ['agent'] } },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdisplayName: 'Session ID',\n\t\t\t\t\tname: 'sessionId',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tdefault: '',\n\t\t\t\t\tdescription: 'OpenClaw session ID to continue',\n\t\t\t\t\tdisplayOptions: { show: { selectorType: ['sessionId'] } },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdisplayName: 'Recipient',\n\t\t\t\t\tname: 'to',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tdefault: '',\n\t\t\t\t\tdescription: 'Recipient or channel target passed to OpenClaw as --to',\n\t\t\t\t\tdisplayOptions: { show: { selectorType: ['recipient'] } },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdisplayName: 'Thinking Level',\n\t\t\t\t\tname: 'thinking',\n\t\t\t\t\ttype: 'options',\n\t\t\t\t\tdefault: '',\n\t\t\t\t\tdescription: 'Optional OpenClaw thinking level override for this run',\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{ name: 'Adaptive', value: 'adaptive' },\n\t\t\t\t\t\t{ name: 'Extra High', value: 'xhigh' },\n\t\t\t\t\t\t{ name: 'High', value: 'high' },\n\t\t\t\t\t\t{ name: 'Low', value: 'low' },\n\t\t\t\t\t\t{ name: 'Max', value: 'max' },\n\t\t\t\t\t\t{ name: 'Medium', value: 'medium' },\n\t\t\t\t\t\t{ name: 'Minimal', value: 'minimal' },\n\t\t\t\t\t\t{ name: 'Off', value: 'off' },\n\t\t\t\t\t\t{ name: 'Use OpenClaw Default', value: '' },\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdisplayName: 'Run Locally',\n\t\t\t\t\tname: 'local',\n\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\tdefault: false,\n\t\t\t\t\tdescription: 'Whether to force OpenClaw embedded local runtime instead of Gateway mode',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdisplayName: 'Deliver Reply',\n\t\t\t\t\tname: 'deliver',\n\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\tdefault: false,\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t'Whether OpenClaw should deliver the reply back to the selected channel/target',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdisplayName: 'Options',\n\t\t\t\t\tname: 'options',\n\t\t\t\t\ttype: 'collection',\n\t\t\t\t\tplaceholder: 'Add Option',\n\t\t\t\t\tdefault: {},\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdisplayName: 'System Message',\n\t\t\t\t\t\t\tname: 'systemMessage',\n\t\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\t\tdescription: 'Additional system instructions for this OpenClaw run',\n\t\t\t\t\t\t\ttypeOptions: { rows: 5 },\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdisplayName: 'Binary Path',\n\t\t\t\t\t\t\tname: 'binaryPath',\n\t\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\t\tdefault: 'openclaw',\n\t\t\t\t\t\t\tdescription: 'Path to the openclaw binary',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdisplayName: 'Working Directory',\n\t\t\t\t\t\t\tname: 'workingDirectory',\n\t\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\t\tdescription: 'Working directory for the OpenClaw process',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdisplayName: 'Timeout',\n\t\t\t\t\t\t\tname: 'timeout',\n\t\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\t\tdefault: DEFAULT_TIMEOUT_SECONDS,\n\t\t\t\t\t\t\tdescription: 'OpenClaw agent timeout in seconds',\n\t\t\t\t\t\t\ttypeOptions: { minValue: 1 },\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdisplayName: 'Verbose',\n\t\t\t\t\t\t\tname: 'verbose',\n\t\t\t\t\t\t\ttype: 'options',\n\t\t\t\t\t\t\tdefault: '',\n\t\t\t\t\t\t\tdescription: 'Optional OpenClaw verbose setting',\n\t\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t\t{ name: 'Full', value: 'full' },\n\t\t\t\t\t\t\t\t{ name: 'Leave Unchanged', value: '' },\n\t\t\t\t\t\t\t\t{ name: 'Off', value: 'off' },\n\t\t\t\t\t\t\t\t{ name: 'On', value: 'on' },\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdisplayName: 'Include Raw Output',\n\t\t\t\t\t\t\tname: 'includeRawOutput',\n\t\t\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\t\t\tdefault: false,\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t'Whether to include raw stdout and stderr from the OpenClaw CLI in the output',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\t}\n\n\tasync trigger(this: ITriggerFunctions): Promise<ITriggerResponse> {\n\t\tconst node = this.getNode();\n\t\tconst workflowId = this.getWorkflow().id;\n\t\tconst activationMode = this.getActivationMode();\n\t\tconsole.log('[OpenClawAgentV2] trigger activation registered', {\n\t\t\tnodeName: node.name,\n\t\t\tworkflowId,\n\t\t\tactivationMode,\n\t\t});\n\t\tconsole.log('OpenClaw publish sync: trigger activated', {\n\t\t\tworkflowId,\n\t\t\tactivationMode,\n\t\t\tnodeName: node.name,\n\t\t});\n\n\t\t// ── Publish-time config sync ──\n\t\t// On activation (publish), discover connected sub-nodes and sync\n\t\t// their configs to openclaw.json so the CLI has up-to-date settings.\n\t\tif (activationMode !== 'init') {\n\t\t\ttry {\n\t\t\t\tconst nodeName = node.name;\n\n\t\t\t\t// Find OpenClaw config sub-nodes connected via AiTool.\n\t\t\t\tconst aiToolParents = this.getParentNodes(nodeName, {\n\t\t\t\t\tincludeNodeParameters: true,\n\t\t\t\t\tconnectionType: NodeConnectionTypes.AiTool,\n\t\t\t\t\tdepth: 1,\n\t\t\t\t});\n\t\t\t\tconst aiChannelParents = this.getParentNodes(nodeName, {\n\t\t\t\t\tincludeNodeParameters: true,\n\t\t\t\t\tconnectionType: NodeConnectionTypes.AiChannel,\n\t\t\t\t\tdepth: 1,\n\t\t\t\t});\n\t\t\t\tconsole.log('OpenClaw publish sync: discovered AI tool config sub-nodes', {\n\t\t\t\t\tcount: aiToolParents.length,\n\t\t\t\t\tnodes: aiToolParents.map((p) => ({\n\t\t\t\t\t\tname: (p as unknown as { name?: string }).name,\n\t\t\t\t\t\ttype: p.type,\n\t\t\t\t\t\tparams: p.parameters ? Object.keys(p.parameters) : [],\n\t\t\t\t\t})),\n\t\t\t\t});\n\t\t\t\tconsole.log('OpenClaw publish sync: discovered AI channel config sub-nodes', {\n\t\t\t\t\tcount: aiChannelParents.length,\n\t\t\t\t\tnodes: aiChannelParents.map((p) => ({\n\t\t\t\t\t\tname: (p as unknown as { name?: string }).name,\n\t\t\t\t\t\ttype: p.type,\n\t\t\t\t\t\tparams: p.parameters ? Object.keys(p.parameters) : [],\n\t\t\t\t\t\thasCredentials: !!(p as unknown as { credentials?: IDataObject }).credentials,\n\t\t\t\t\t})),\n\t\t\t\t});\n\n\t\t\t\tconst activationVariables = getActivationVariables(this);\n\t\t\t\tconst publishChannelConfigs: ChannelConfig[] = [];\n\t\t\t\tfor (const channelNode of aiChannelParents) {\n\t\t\t\t\tconst params = channelNode.parameters ?? {};\n\t\t\t\t\tconst channelNodeName = (channelNode as unknown as { name?: string }).name;\n\t\t\t\t\tif (channelNode.type !== OPENCLAW_TELEGRAM_CHANNEL_NODE_TYPE) {\n\t\t\t\t\t\tconsole.log('OpenClaw publish sync: skipping unsupported channel sub-node', {\n\t\t\t\t\t\t\tnodeName: channelNodeName,\n\t\t\t\t\t\t\ttype: channelNode.type,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst accountId =\n\t\t\t\t\t\tnormalizeOptionalString(\n\t\t\t\t\t\t\tresolvePublishParameterValue(params.accountId, activationVariables),\n\t\t\t\t\t\t) ?? undefined;\n\t\t\t\t\tconst dmPolicy =\n\t\t\t\t\t\tnormalizeOptionalString(\n\t\t\t\t\t\t\tresolvePublishParameterValue(params.dmPolicy, activationVariables),\n\t\t\t\t\t\t) ?? 'pairing';\n\t\t\t\t\tconst groupPolicy =\n\t\t\t\t\t\tnormalizeOptionalString(\n\t\t\t\t\t\t\tresolvePublishParameterValue(params.groupPolicy, activationVariables),\n\t\t\t\t\t\t) ?? 'allowlist';\n\t\t\t\t\tconst allowFrom = getPublishAllowFrom({\n\t\t\t\t\t\trawValue: params.allowFrom,\n\t\t\t\t\t\tvariables: activationVariables,\n\t\t\t\t\t\tnodeName: channelNodeName,\n\t\t\t\t\t\taccountId: accountId ?? OPENCLAW_DEFAULT_ACCOUNT_ID,\n\t\t\t\t\t});\n\n\t\t\t\t\tpublishChannelConfigs.push({\n\t\t\t\t\t\tchannelType: 'telegram',\n\t\t\t\t\t\taccountId,\n\t\t\t\t\t\tdmPolicy,\n\t\t\t\t\t\tgroupPolicy,\n\t\t\t\t\t\tallowFrom,\n\t\t\t\t\t});\n\t\t\t\t\tconsole.log('OpenClaw publish sync: prepared Telegram channel config', {\n\t\t\t\t\t\tnodeName: channelNodeName,\n\t\t\t\t\t\taccountId: accountId ?? OPENCLAW_DEFAULT_ACCOUNT_ID,\n\t\t\t\t\t\tdmPolicy,\n\t\t\t\t\t\tgroupPolicy,\n\t\t\t\t\t\tallowFromCount: allowFrom?.length,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// Build PluginConfig and McpServerConfig objects from discovered sub-node parameters.\n\t\t\t\tconst publishPluginConfigs: PluginConfig[] = [];\n\t\t\t\tconst publishMcpServerConfigs: McpServerConfig[] = [];\n\t\t\t\tfor (const pluginNode of aiToolParents) {\n\t\t\t\t\tconst params = pluginNode.parameters ?? {};\n\t\t\t\t\tconst mcpServerConfig = getMcpServerConfigFromParameters(\n\t\t\t\t\t\tparams as Record<string, unknown>,\n\t\t\t\t\t);\n\t\t\t\t\tif (mcpServerConfig.config) {\n\t\t\t\t\t\tconsole.log('OpenClaw publish sync: processing MCP Server sub-node', {\n\t\t\t\t\t\t\ttype: pluginNode.type,\n\t\t\t\t\t\t\tserverName: mcpServerConfig.config.serverName,\n\t\t\t\t\t\t\turl: mcpServerConfig.config.url,\n\t\t\t\t\t\t\ttransport: mcpServerConfig.config.transport ?? '(openclaw-default)',\n\t\t\t\t\t\t\theaderKeys: mcpServerConfig.config.headers\n\t\t\t\t\t\t\t\t? Object.keys(mcpServerConfig.config.headers)\n\t\t\t\t\t\t\t\t: [],\n\t\t\t\t\t\t});\n\t\t\t\t\t\tpublishMcpServerConfigs.push(mcpServerConfig.config);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else if (mcpServerConfig.reason !== 'not-mcp-server-node') {\n\t\t\t\t\t\tconsole.log('OpenClaw publish sync: skipping MCP Server sub-node', {\n\t\t\t\t\t\t\ttype: pluginNode.type,\n\t\t\t\t\t\t\treason: mcpServerConfig.reason,\n\t\t\t\t\t\t\tparams: JSON.stringify(params).slice(0, 300),\n\t\t\t\t\t\t});\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst pluginSource = (params.pluginSource as string) || 'local';\n\n\t\t\t\t\tconsole.log('OpenClaw publish sync: processing plugin sub-node', {\n\t\t\t\t\t\ttype: pluginNode.type,\n\t\t\t\t\t\tpluginSource,\n\t\t\t\t\t\tparams: JSON.stringify(params).slice(0, 300),\n\t\t\t\t\t});\n\n\t\t\t\t\tif (pluginSource === 'local') {\n\t\t\t\t\t\t// Read pluginDirectory — may be an expression like ={{ $workspace.__dirPath }}\n\t\t\t\t\t\tlet pluginDirectory = (params.pluginDirectory as string) || '';\n\n\t\t\t\t\t\t// If it's an expression referencing $workspace.__dirPath, resolve it manually\n\t\t\t\t\t\t// from the workflow's workspace context (available at trigger/activation time)\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tpluginDirectory.includes('$workspace.__dirPath') ||\n\t\t\t\t\t\t\tpluginDirectory.includes('$workspace[')\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t// Access the workflow's workspace context directly\n\t\t\t\t\t\t\t// The underlying Workflow object is available through the TriggerContext\n\t\t\t\t\t\t\t// cast to access the protected 'workflow' field\n\t\t\t\t\t\t\tconst workflowObj = (this as unknown as { workflow: { workspace?: IDataObject } })\n\t\t\t\t\t\t\t\t.workflow;\n\t\t\t\t\t\t\tconst dirPath = normalizeOptionalString(workflowObj?.workspace?.__dirPath);\n\t\t\t\t\t\t\tconsole.log('OpenClaw publish sync: resolving $workspace.__dirPath expression', {\n\t\t\t\t\t\t\t\trawValue: pluginDirectory,\n\t\t\t\t\t\t\t\tworkspaceAvailable: !!workflowObj?.workspace,\n\t\t\t\t\t\t\t\tdirPath: dirPath ?? '(not set)',\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif (dirPath) {\n\t\t\t\t\t\t\t\tpluginDirectory = dirPath;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t\t\t'OpenClaw publish sync: $workspace.__dirPath is not available, skipping',\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (pluginDirectory.includes('{{') || pluginDirectory.startsWith('=')) {\n\t\t\t\t\t\t\t// Other expressions we can't resolve at activation time\n\t\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t\t'OpenClaw publish sync: pluginDirectory is an unresolvable expression, skipping',\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\trawValue: pluginDirectory,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpluginDirectory = pluginDirectory.trim();\n\t\t\t\t\t\tif (!pluginDirectory) {\n\t\t\t\t\t\t\tconsole.log('OpenClaw publish sync: pluginDirectory is empty, skipping');\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Scan for manifest\n\t\t\t\t\t\tconst manifestPath = join(pluginDirectory, 'openclaw.plugin.json');\n\t\t\t\t\t\tlet pluginManifest: PluginConfig['pluginManifest'];\n\t\t\t\t\t\tif (existsSync(manifestPath)) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst raw = readFileSync(manifestPath, 'utf8').trim();\n\t\t\t\t\t\t\t\tconst parsed = JSON.parse(raw) as IDataObject;\n\t\t\t\t\t\t\t\tpluginManifest = {\n\t\t\t\t\t\t\t\t\tid: typeof parsed.id === 'string' ? parsed.id : undefined,\n\t\t\t\t\t\t\t\t\tname: typeof parsed.name === 'string' ? parsed.name : undefined,\n\t\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\ttypeof parsed.description === 'string' ? parsed.description : undefined,\n\t\t\t\t\t\t\t\t\tversion: typeof parsed.version === 'string' ? parsed.version : undefined,\n\t\t\t\t\t\t\t\t\tproviders: Array.isArray(parsed.providers)\n\t\t\t\t\t\t\t\t\t\t? (parsed.providers as unknown[]).filter(\n\t\t\t\t\t\t\t\t\t\t\t\t(p): p is string => typeof p === 'string',\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\tchannels: Array.isArray(parsed.channels)\n\t\t\t\t\t\t\t\t\t\t? (parsed.channels as unknown[]).filter(\n\t\t\t\t\t\t\t\t\t\t\t\t(c): c is string => typeof c === 'string',\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tconsole.log('OpenClaw publish sync: loaded local manifest', {\n\t\t\t\t\t\t\t\t\tmanifestPath,\n\t\t\t\t\t\t\t\t\tid: pluginManifest.id,\n\t\t\t\t\t\t\t\t\tname: pluginManifest.name,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} catch (parseErr) {\n\t\t\t\t\t\t\t\tconsole.log('OpenClaw publish sync: failed to parse manifest', {\n\t\t\t\t\t\t\t\t\tmanifestPath,\n\t\t\t\t\t\t\t\t\terror: getErrorMessage(parseErr),\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tpublishPluginConfigs.push({\n\t\t\t\t\t\t\tpluginSource: 'local',\n\t\t\t\t\t\t\tpluginPath: pluginDirectory,\n\t\t\t\t\t\t\tpluginManifest,\n\t\t\t\t\t\t});\n\t\t\t\t\t} else if (pluginSource === 'cloud') {\n\t\t\t\t\t\tconst pluginId = ((params.pluginId as string) || '').trim();\n\t\t\t\t\t\tconst pluginVersion = ((params.pluginVersion as string) || '').trim() || undefined;\n\t\t\t\t\t\tif (pluginId) {\n\t\t\t\t\t\t\tpublishPluginConfigs.push({\n\t\t\t\t\t\t\t\tpluginSource: 'cloud',\n\t\t\t\t\t\t\t\tpluginId,\n\t\t\t\t\t\t\t\tpluginVersion,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Sync plugin configs to openclaw.json\n\t\t\t\tif (publishPluginConfigs.length > 0) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst syncResult = syncPluginConfig({ pluginConfigs: publishPluginConfigs });\n\t\t\t\t\t\tconsole.log('OpenClaw publish sync: plugin config synced on activation', {\n\t\t\t\t\t\t\tinstalledCount: syncResult.installed.length,\n\t\t\t\t\t\t\tinstalled: syncResult.installed,\n\t\t\t\t\t\t\terrors: syncResult.errors.length > 0 ? syncResult.errors : undefined,\n\t\t\t\t\t\t\tpluginCount: publishPluginConfigs.length,\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (syncErr) {\n\t\t\t\t\t\tconsole.log('OpenClaw publish sync: plugin config sync failed on activation', {\n\t\t\t\t\t\t\terror: getErrorMessage(syncErr),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log('OpenClaw publish sync: no plugin configs to sync on activation');\n\t\t\t\t}\n\n\t\t\t\tif (publishChannelConfigs.length > 0) {\n\t\t\t\t\tfor (const channelConfig of publishChannelConfigs) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst syncResult = syncChannelConfig({\n\t\t\t\t\t\t\t\tchannelType: channelConfig.channelType,\n\t\t\t\t\t\t\t\treplyAccount: channelConfig.accountId,\n\t\t\t\t\t\t\t\tdmPolicy: channelConfig.dmPolicy,\n\t\t\t\t\t\t\t\tgroupPolicy: channelConfig.groupPolicy,\n\t\t\t\t\t\t\t\tallowFrom: channelConfig.allowFrom,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tconsole.log('OpenClaw publish sync: channel config synced on activation', {\n\t\t\t\t\t\t\t\tchannelType: channelConfig.channelType,\n\t\t\t\t\t\t\t\tchanged: syncResult.changed,\n\t\t\t\t\t\t\t\tconfigPath: syncResult.configPath,\n\t\t\t\t\t\t\t\ttargetPath: syncResult.targetPath,\n\t\t\t\t\t\t\t\taccountId: syncResult.accountId ?? OPENCLAW_DEFAULT_ACCOUNT_ID,\n\t\t\t\t\t\t\t\tallowFromCount: channelConfig.allowFrom?.length,\n\t\t\t\t\t\t\t\tallowFromStorePath: syncResult.allowFromStorePath,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} catch (syncErr) {\n\t\t\t\t\t\t\tconsole.log('OpenClaw publish sync: channel config sync failed on activation', {\n\t\t\t\t\t\t\t\tchannelType: channelConfig.channelType,\n\t\t\t\t\t\t\t\terror: getErrorMessage(syncErr),\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log('OpenClaw publish sync: no channel configs to sync on activation');\n\t\t\t\t}\n\n\t\t\t\tif (publishMcpServerConfigs.length > 0) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst syncResult = syncMcpServerConfig({\n\t\t\t\t\t\t\tmcpServerConfigs: publishMcpServerConfigs,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tconsole.log('OpenClaw publish sync: MCP Server config synced on activation', {\n\t\t\t\t\t\t\tchanged: syncResult.changed,\n\t\t\t\t\t\t\tconfigPath: syncResult.configPath,\n\t\t\t\t\t\t\tsynced: syncResult.synced,\n\t\t\t\t\t\t\tskipped: syncResult.skipped.length > 0 ? syncResult.skipped : undefined,\n\t\t\t\t\t\t\tserverCount: publishMcpServerConfigs.length,\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (syncErr) {\n\t\t\t\t\t\tconsole.log('OpenClaw publish sync: MCP Server config sync failed on activation', {\n\t\t\t\t\t\t\terror: getErrorMessage(syncErr),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log('OpenClaw publish sync: no MCP Server configs to sync on activation');\n\t\t\t\t}\n\t\t\t} catch (publishErr) {\n\t\t\t\tconsole.log('OpenClaw publish sync: activation-time config sync failed (non-fatal)', {\n\t\t\t\t\terror: getErrorMessage(publishErr),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tcloseFunction: async () => {\n\t\t\t\tconsole.log('[OpenClawAgentV2] trigger activation closed', {\n\t\t\t\t\tnodeName: node.name,\n\t\t\t\t\tworkflowId,\n\t\t\t\t});\n\t\t\t\tconsole.log('OpenClaw publish sync: trigger deactivated', {\n\t\t\t\t\tworkflowId,\n\t\t\t\t\tnodeName: node.name,\n\t\t\t\t});\n\t\t\t},\n\t\t};\n\t}\n\n\tasync execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {\n\t\tconst items = this.getInputData();\n\t\tconst returnData: INodeExecutionData[] = [];\n\t\tconsole.log('OpenClaw publish sync: execute started', {\n\t\t\titemCount: items.length,\n\t\t\tnodeName: this.getNode().name,\n\t\t\tworkflowId: this.getWorkflow().id,\n\t\t});\n\n\t\t// Retrieve channel configs from connected sub-nodes\n\t\tlet channelConfigs: ChannelConfig[] = [];\n\t\ttry {\n\t\t\tconst channelData = await this.getInputConnectionData(NodeConnectionTypes.AiChannel, 0);\n\t\t\tif (Array.isArray(channelData)) {\n\t\t\t\tchannelConfigs = channelData as ChannelConfig[];\n\t\t\t} else if (channelData && isObject(channelData)) {\n\t\t\t\tchannelConfigs = [channelData as unknown as ChannelConfig];\n\t\t\t}\n\t\t\tconsole.log('OpenClaw publish sync: resolved channel candidates', {\n\t\t\t\tchannelCount: channelConfigs.length,\n\t\t\t\tchannelTypes: channelConfigs.map((c) => c.channelType),\n\t\t\t\tchannels: channelConfigs.map((channelConfig) => ({\n\t\t\t\t\tchannelType: channelConfig.channelType,\n\t\t\t\t\taccountId: channelConfig.accountId ?? OPENCLAW_DEFAULT_ACCOUNT_ID,\n\t\t\t\t\tdmPolicy: channelConfig.dmPolicy,\n\t\t\t\t\tgroupPolicy: channelConfig.groupPolicy,\n\t\t\t\t\tallowFromCount: channelConfig.allowFrom?.length,\n\t\t\t\t})),\n\t\t\t});\n\t\t} catch {\n\t\t\t// No channels connected — that's fine\n\t\t\tconsole.log('OpenClaw publish sync: no channels connected');\n\t\t}\n\n\t\t// Retrieve model config from connected Model sub-node\n\t\tlet modelConfig: ModelConfig | undefined;\n\t\ttry {\n\t\t\tconst modelData = await this.getInputConnectionData(NodeConnectionTypes.AiLanguageModel, 0);\n\t\t\tconsole.log('[OpenClawAgentV2] Raw model data from getInputConnectionData', {\n\t\t\t\ttype: typeof modelData,\n\t\t\t\tisArray: Array.isArray(modelData),\n\t\t\t\tisObject: isObject(modelData),\n\t\t\t\tconstructorName:\n\t\t\t\t\tmodelData && typeof modelData === 'object'\n\t\t\t\t\t\t? (modelData as object).constructor?.name\n\t\t\t\t\t\t: undefined,\n\t\t\t\tkeys:\n\t\t\t\t\tmodelData && typeof modelData === 'object' && !Array.isArray(modelData)\n\t\t\t\t\t\t? Object.keys(modelData as object)\n\t\t\t\t\t\t: undefined,\n\t\t\t\tpreview: getModelDataPreview(modelData),\n\t\t\t});\n\n\t\t\t// Extract the model config — may come as a single object or wrapped in an array\n\t\t\tlet candidate: unknown = modelData;\n\t\t\tif (Array.isArray(modelData) && modelData.length > 0) {\n\t\t\t\tcandidate = modelData[0];\n\t\t\t\tconsole.log('[OpenClawAgentV2] Model data was array, using first element', {\n\t\t\t\t\tarrayLength: modelData.length,\n\t\t\t\t\telementType: typeof candidate,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tcandidate &&\n\t\t\t\tisObject(candidate) &&\n\t\t\t\ttypeof (candidate as Record<string, unknown>).modelId === 'string'\n\t\t\t) {\n\t\t\t\tmodelConfig = candidate as unknown as ModelConfig;\n\t\t\t\tconsole.log('[OpenClawAgentV2] Model sub-node connected', {\n\t\t\t\t\tmodelId: modelConfig.modelId,\n\t\t\t\t\tmodelSource: modelConfig.modelSource,\n\t\t\t\t\textraKeys: getObjectKeys(modelConfig.extra),\n\t\t\t\t\tbaseUrl: normalizeOptionalString(modelConfig.extra?.baseUrl),\n\t\t\t\t\tapi: normalizeOptionalString(modelConfig.extra?.api),\n\t\t\t\t});\n\t\t\t} else if (candidate) {\n\t\t\t\t// Data came back but doesn't match ModelConfig shape — log for debugging\n\t\t\t\tconsole.log('[OpenClawAgentV2] Model data received but does not match ModelConfig shape', {\n\t\t\t\t\tcandidateType: typeof candidate,\n\t\t\t\t\tisObj: isObject(candidate),\n\t\t\t\t\thasModelId: isObject(candidate)\n\t\t\t\t\t\t? typeof (candidate as Record<string, unknown>).modelId\n\t\t\t\t\t\t: 'n/a',\n\t\t\t\t\tcandidateKeys: isObject(candidate) ? Object.keys(candidate as object) : [],\n\t\t\t\t\tcandidatePreview: getModelDataPreview(candidate),\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (err) {\n\t\t\t// No model connected — that's fine, will use the parameter\n\t\t\tconsole.log('[OpenClawAgentV2] No Model sub-node connected, using text parameter fallback', {\n\t\t\t\terror: err instanceof Error ? err.message : String(err),\n\t\t\t});\n\t\t}\n\t\tconsole.log('OpenClaw publish sync: resolved model sync candidates', {\n\t\t\thasModelSubNode: !!modelConfig,\n\t\t\tmodelId: modelConfig?.modelId,\n\t\t\tmodelSource: modelConfig?.modelSource ?? 'none',\n\t\t});\n\n\t\t// Retrieve plugin configs from connected Plugin sub-nodes\n\t\tlet pluginConfigs: PluginConfig[] = [];\n\t\tlet mcpServerConfigs: McpServerConfig[] = [];\n\t\tconsole.log('[OpenClawAgentV2] About to retrieve OpenClaw AiTool sub-node data');\n\t\ttry {\n\t\t\tconst pluginData = await this.getInputConnectionData(NodeConnectionTypes.AiTool, 0);\n\t\t\tconsole.log('[OpenClawAgentV2] Raw AiTool data from getInputConnectionData', {\n\t\t\t\ttype: typeof pluginData,\n\t\t\t\tisNull: pluginData === null,\n\t\t\t\tisUndefined: pluginData === undefined,\n\t\t\t\tisArray: Array.isArray(pluginData),\n\t\t\t\tisObject: isObject(pluginData),\n\t\t\t\tpreview: pluginData ? JSON.stringify(pluginData).slice(0, 500) : '(empty)',\n\t\t\t});\n\n\t\t\tconst isPluginConfig = (item: unknown): item is PluginConfig =>\n\t\t\t\tisObject(item) && typeof (item as Record<string, unknown>).pluginSource === 'string';\n\t\t\tconst isMcpServerConfig = (item: unknown): item is McpServerConfig =>\n\t\t\t\tisObject(item) &&\n\t\t\t\t(item as Record<string, unknown>).mcpServerSource === 'openclaw' &&\n\t\t\t\ttypeof (item as Record<string, unknown>).serverName === 'string' &&\n\t\t\t\ttypeof (item as Record<string, unknown>).url === 'string';\n\n\t\t\tif (Array.isArray(pluginData)) {\n\t\t\t\tpluginConfigs = pluginData.filter(isPluginConfig);\n\t\t\t\tmcpServerConfigs = pluginData.filter(isMcpServerConfig);\n\t\t\t} else if (pluginData && isPluginConfig(pluginData)) {\n\t\t\t\tpluginConfigs = [pluginData];\n\t\t\t} else if (pluginData && isMcpServerConfig(pluginData)) {\n\t\t\t\tmcpServerConfigs = [pluginData];\n\t\t\t}\n\n\t\t\tif (pluginConfigs.length > 0) {\n\t\t\t\tconsole.log('[OpenClawAgentV2] Plugin sub-nodes connected', {\n\t\t\t\t\tcount: pluginConfigs.length,\n\t\t\t\t\tplugins: pluginConfigs.map((p) => ({\n\t\t\t\t\t\tsource: p.pluginSource,\n\t\t\t\t\t\tpath: p.pluginPath,\n\t\t\t\t\t\tmanifestId: p.pluginManifest?.id,\n\t\t\t\t\t\tmanifestName: p.pluginManifest?.name,\n\t\t\t\t\t\tcloudId: p.pluginId,\n\t\t\t\t\t\tcloudVersion: p.pluginVersion,\n\t\t\t\t\t})),\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconsole.log('[OpenClawAgentV2] No valid Plugin sub-nodes connected');\n\t\t\t}\n\n\t\t\tif (mcpServerConfigs.length > 0) {\n\t\t\t\tconsole.log('[OpenClawAgentV2] MCP Server sub-nodes connected', {\n\t\t\t\t\tcount: mcpServerConfigs.length,\n\t\t\t\t\tservers: mcpServerConfigs.map((server) => ({\n\t\t\t\t\t\tserverName: server.serverName,\n\t\t\t\t\t\turl: server.url,\n\t\t\t\t\t\ttransport: server.transport ?? '(openclaw-default)',\n\t\t\t\t\t\theaderKeys: server.headers ? Object.keys(server.headers) : [],\n\t\t\t\t\t\tconnectionTimeoutMs: server.connectionTimeoutMs,\n\t\t\t\t\t})),\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconsole.log('[OpenClawAgentV2] No valid MCP Server sub-nodes connected');\n\t\t\t}\n\t\t} catch (pluginErr) {\n\t\t\t// Log the actual error — this is critical for troubleshooting\n\t\t\tconsole.log('[OpenClawAgentV2] OpenClaw AiTool sub-node connection FAILED', {\n\t\t\t\terrorType: pluginErr instanceof Error ? pluginErr.constructor.name : typeof pluginErr,\n\t\t\t\terrorMessage: pluginErr instanceof Error ? pluginErr.message : String(pluginErr),\n\t\t\t\terrorStack:\n\t\t\t\t\tpluginErr instanceof Error\n\t\t\t\t\t\t? pluginErr.stack?.split('\\n').slice(0, 5).join('\\n')\n\t\t\t\t\t\t: undefined,\n\t\t\t});\n\t\t\tconsole.log(\n\t\t\t\t'[OpenClawAgentV2] No Plugin or MCP Server sub-nodes connected (AiTool input error)',\n\t\t\t);\n\t\t}\n\t\tconsole.log('OpenClaw publish sync: resolved plugin sync candidates', {\n\t\t\tpluginCount: pluginConfigs.length,\n\t\t\tlocalCount: pluginConfigs.filter((p) => p.pluginSource === 'local').length,\n\t\t\tcloudCount: pluginConfigs.filter((p) => p.pluginSource === 'cloud').length,\n\t\t\tmanifestIds: pluginConfigs\n\t\t\t\t.filter((p) => p.pluginManifest?.id)\n\t\t\t\t.map((p) => p.pluginManifest?.id),\n\t\t\tcloudIds: pluginConfigs.filter((p) => p.pluginId).map((p) => p.pluginId),\n\t\t});\n\t\tconsole.log('OpenClaw publish sync: resolved MCP Server sync candidates', {\n\t\t\tserverCount: mcpServerConfigs.length,\n\t\t\tserverNames: mcpServerConfigs.map((server) => server.serverName),\n\t\t\ttransports: mcpServerConfigs.map((server) => server.transport ?? '(openclaw-default)'),\n\t\t});\n\n\t\tif (mcpServerConfigs.length > 0) {\n\t\t\ttry {\n\t\t\t\tconst syncResult = syncMcpServerConfig({ mcpServerConfigs });\n\t\t\t\tconsole.log('OpenClaw publish sync: MCP Server config sync completed before execute', {\n\t\t\t\t\tchanged: syncResult.changed,\n\t\t\t\t\tconfigPath: syncResult.configPath,\n\t\t\t\t\tsynced: syncResult.synced,\n\t\t\t\t\tskipped: syncResult.skipped.length > 0 ? syncResult.skipped : undefined,\n\t\t\t\t});\n\t\t\t} catch (mcpSyncErr) {\n\t\t\t\tconsole.log('OpenClaw publish sync: MCP Server config sync failed before execute', {\n\t\t\t\t\terror: getErrorMessage(mcpSyncErr),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tfor (let itemIndex = 0; itemIndex < items.length; itemIndex++) {\n\t\t\ttry {\n\t\t\t\tconst message = normalizeOptionalString(this.getNodeParameter('message', itemIndex));\n\t\t\t\tif (!message) {\n\t\t\t\t\tthrow new NodeOperationError(this.getNode(), 'Message must not be empty', { itemIndex });\n\t\t\t\t}\n\n\t\t\t\tconst openClawEnv: NodeJS.ProcessEnv = {};\n\n\t\t\t\t// Plugin env vars for CLI (config sync happens at publish time in trigger())\n\t\t\t\tif (pluginConfigs.length > 0) {\n\t\t\t\t\tconst localPlugins = pluginConfigs.filter((p) => p.pluginSource === 'local');\n\t\t\t\t\tconst cloudPlugins = pluginConfigs.filter((p) => p.pluginSource === 'cloud');\n\n\t\t\t\t\tconst pluginPaths = localPlugins\n\t\t\t\t\t\t.map((p) => p.pluginPath)\n\t\t\t\t\t\t.filter((p): p is string => typeof p === 'string' && p.length > 0);\n\n\t\t\t\t\tconst cloudSpecs = cloudPlugins\n\t\t\t\t\t\t.map((p) => {\n\t\t\t\t\t\t\tif (!p.pluginId) return undefined;\n\t\t\t\t\t\t\treturn p.pluginVersion\n\t\t\t\t\t\t\t\t? `clawhub:${p.pluginId}@${p.pluginVersion}`\n\t\t\t\t\t\t\t\t: `clawhub:${p.pluginId}`;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.filter((s): s is string => typeof s === 'string');\n\n\t\t\t\t\t// Pass local plugin paths via environment variable for the CLI\n\t\t\t\t\tif (pluginPaths.length > 0) {\n\t\t\t\t\t\topenClawEnv.OPENCLAW_PLUGIN_PATHS = pluginPaths.join(';');\n\t\t\t\t\t\tconsole.log('[OpenClawAgentV2] Set OPENCLAW_PLUGIN_PATHS env var', {\n\t\t\t\t\t\t\titemIndex,\n\t\t\t\t\t\t\tvalue: openClawEnv.OPENCLAW_PLUGIN_PATHS,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Pass cloud plugin specs via environment variable for the CLI\n\t\t\t\t\tif (cloudSpecs.length > 0) {\n\t\t\t\t\t\topenClawEnv.OPENCLAW_CLAWHUB_PLUGINS = cloudSpecs.join(';');\n\t\t\t\t\t\tconsole.log('[OpenClawAgentV2] Set OPENCLAW_CLAWHUB_PLUGINS env var', {\n\t\t\t\t\t\t\titemIndex,\n\t\t\t\t\t\t\tvalue: openClawEnv.OPENCLAW_CLAWHUB_PLUGINS,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply channel configs\n\t\t\t\tconst telegramChannel = channelConfigs.find((c) => c.channelType === 'telegram');\n\t\t\t\tconst primaryChannel = channelConfigs[0];\n\n\t\t\t\tif (telegramChannel?.botToken) {\n\t\t\t\t\topenClawEnv.TELEGRAM_BOT_TOKEN = telegramChannel.botToken;\n\t\t\t\t\tconst telegramSync = syncChannelConfig({\n\t\t\t\t\t\tchannelType: 'telegram',\n\t\t\t\t\t\tbotToken: telegramChannel.botToken,\n\t\t\t\t\t\treplyAccount: telegramChannel.accountId,\n\t\t\t\t\t\tdmPolicy: telegramChannel.dmPolicy,\n\t\t\t\t\t\tgroupPolicy: telegramChannel.groupPolicy,\n\t\t\t\t\t\tallowFrom: telegramChannel.allowFrom ?? [],\n\t\t\t\t\t});\n\t\t\t\t\tconsole.log('OpenClaw publish sync: Telegram channel config synced', {\n\t\t\t\t\t\titemIndex,\n\t\t\t\t\t\tchanged: telegramSync.changed,\n\t\t\t\t\t\tconfigPath: telegramSync.configPath,\n\t\t\t\t\t\ttargetPath: telegramSync.targetPath,\n\t\t\t\t\t\taccountId: telegramSync.accountId ?? OPENCLAW_DEFAULT_ACCOUNT_ID,\n\t\t\t\t\t\tallowFromCount: telegramChannel.allowFrom?.length ?? 0,\n\t\t\t\t\t\tallowFromStorePath: telegramSync.allowFromStorePath,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// Apply WhatsApp channel config if present\n\t\t\t\tconst whatsappChannel = channelConfigs.find((c) => c.channelType === 'whatsapp');\n\t\t\t\tif (whatsappChannel?.accessToken) {\n\t\t\t\t\topenClawEnv.WHATSAPP_ACCESS_TOKEN = whatsappChannel.accessToken;\n\t\t\t\t\tif (whatsappChannel.phoneNumberId) {\n\t\t\t\t\t\topenClawEnv.WHATSAPP_PHONE_NUMBER_ID = whatsappChannel.phoneNumberId;\n\t\t\t\t\t}\n\t\t\t\t\tconst whatsappSync = syncChannelConfig({\n\t\t\t\t\t\tchannelType: 'whatsapp',\n\t\t\t\t\t\tbotToken: whatsappChannel.accessToken,\n\t\t\t\t\t\treplyAccount: whatsappChannel.accountId,\n\t\t\t\t\t});\n\t\t\t\t\tconsole.log('OpenClaw publish sync: WhatsApp channel config synced', {\n\t\t\t\t\t\titemIndex,\n\t\t\t\t\t\tchanged: whatsappSync.changed,\n\t\t\t\t\t\tconfigPath: whatsappSync.configPath,\n\t\t\t\t\t\ttargetPath: whatsappSync.targetPath,\n\t\t\t\t\t\taccountId: whatsappSync.accountId ?? OPENCLAW_DEFAULT_ACCOUNT_ID,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tconsole.log('OpenClaw publish sync: channel config sync completed', {\n\t\t\t\t\titemIndex,\n\t\t\t\t\thasTelegram: !!telegramChannel,\n\t\t\t\t\thasWhatsApp: !!whatsappChannel,\n\t\t\t\t\tchannelCount: channelConfigs.length,\n\t\t\t\t});\n\n\t\t\t\tlet args = ['agent', '--message', message, '--json'];\n\t\t\t\tlet processTimeoutMs: number | undefined;\n\t\t\t\tconst gatewayParams: IDataObject = {\n\t\t\t\t\tmessage,\n\t\t\t\t\tidempotencyKey: randomUUID(),\n\t\t\t\t};\n\n\t\t\t\tconst selectorType = this.getNodeParameter('selectorType', itemIndex) as SelectorType;\n\t\t\t\tif (selectorType !== 'default') {\n\t\t\t\t\tconst parameterName = selectorTypeToParameterName[selectorType];\n\t\t\t\t\tconst value = normalizeOptionalString(this.getNodeParameter(parameterName, itemIndex));\n\t\t\t\t\tif (!value) {\n\t\t\t\t\t\tthrow new NodeOperationError(\n\t\t\t\t\t\t\tthis.getNode(),\n\t\t\t\t\t\t\t`${parameterName} must not be empty when Route By is ${selectorType}`,\n\t\t\t\t\t\t\t{ itemIndex },\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\targs.push(selectorTypeToCliFlag[selectorType], value);\n\t\t\t\t\tif (selectorType === 'agent') {\n\t\t\t\t\t\tgatewayParams.agentId = value;\n\t\t\t\t\t} else if (selectorType === 'sessionId') {\n\t\t\t\t\t\tgatewayParams.sessionId = value;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tgatewayParams.to = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Resolve model from connected Model sub-node\n\t\t\t\tconst resolvedModel = modelConfig?.modelId;\n\t\t\t\tconsole.log('[OpenClawAgentV2] Model resolution', {\n\t\t\t\t\titemIndex,\n\t\t\t\t\tconnectedModel: modelConfig?.modelId,\n\t\t\t\t\tresolvedModel,\n\t\t\t\t\tmodelSource: modelConfig?.modelSource ?? 'none',\n\t\t\t\t});\n\t\t\t\tif (resolvedModel) {\n\t\t\t\t\targs.push('--model', resolvedModel);\n\t\t\t\t\tgatewayParams.model = resolvedModel;\n\t\t\t\t}\n\n\t\t\t\tconst openCodeFreeAuth = applyOpenCodeFreeAuthEnv({\n\t\t\t\t\tenv: openClawEnv,\n\t\t\t\t\tmodelConfig,\n\t\t\t\t\tmodelId: resolvedModel,\n\t\t\t\t});\n\t\t\t\tconsole.log('[OpenClawAgentV2] OpenCode free auth env resolution', {\n\t\t\t\t\titemIndex,\n\t\t\t\t\tresolvedModel,\n\t\t\t\t\tmodelSource: modelConfig?.modelSource ?? 'text-parameter',\n\t\t\t\t\tapplied: openCodeFreeAuth.applied,\n\t\t\t\t\tenvVar: openCodeFreeAuth.envVar,\n\t\t\t\t\treason: openCodeFreeAuth.reason,\n\t\t\t\t});\n\n\t\t\t\tconst nineRouterConfigSync = syncNineRouterModelConfig({\n\t\t\t\t\tmodelConfig,\n\t\t\t\t\tmodelId: resolvedModel,\n\t\t\t\t});\n\t\t\t\tconsole.log('[OpenClawAgentV2] 9Router model config sync', {\n\t\t\t\t\titemIndex,\n\t\t\t\t\thasModelSubNode: !!modelConfig,\n\t\t\t\t\tresolvedModel,\n\t\t\t\t\tmodelSource: modelConfig?.modelSource ?? 'text-parameter',\n\t\t\t\t\tselectorType,\n\t\t\t\t\tchanged: nineRouterConfigSync.changed,\n\t\t\t\t\treason: nineRouterConfigSync.reason,\n\t\t\t\t\ttargetPath: nineRouterConfigSync.targetPath,\n\t\t\t\t\tmodelRef: nineRouterConfigSync.modelRef,\n\t\t\t\t\tconfigPath: nineRouterConfigSync.configPath,\n\t\t\t\t\texistingBaseUrl: nineRouterConfigSync.existingBaseUrl,\n\t\t\t\t\trestart: 'publish-only',\n\t\t\t\t});\n\t\t\t\tconsole.log('OpenClaw publish sync: model config sync completed', {\n\t\t\t\t\titemIndex,\n\t\t\t\t\tresolvedModel,\n\t\t\t\t\tmodelSource: modelConfig?.modelSource ?? 'text-parameter',\n\t\t\t\t\tsyncChanged: nineRouterConfigSync.changed,\n\t\t\t\t\tsyncReason: nineRouterConfigSync.reason,\n\t\t\t\t});\n\n\t\t\t\tconst thinking = normalizeOptionalString(this.getNodeParameter('thinking', itemIndex));\n\t\t\t\tif (thinking) {\n\t\t\t\t\targs.push('--thinking', thinking);\n\t\t\t\t\tgatewayParams.thinking = thinking;\n\t\t\t\t}\n\n\t\t\t\tconst runLocally = this.getNodeParameter('local', itemIndex, false) === true;\n\t\t\t\tif (runLocally) args.push('--local');\n\n\t\t\t\tconst deliverReply = this.getNodeParameter('deliver', itemIndex, false) === true;\n\t\t\t\tif (deliverReply) {\n\t\t\t\t\targs.push('--deliver');\n\t\t\t\t\tgatewayParams.deliver = true;\n\t\t\t\t}\n\n\t\t\t\tconst timeout = Number(\n\t\t\t\t\tthis.getNodeParameter('options.timeout', itemIndex, DEFAULT_TIMEOUT_SECONDS),\n\t\t\t\t);\n\t\t\t\tconst timeoutSeconds =\n\t\t\t\t\tNumber.isFinite(timeout) && timeout > 0 ? Math.floor(timeout) : DEFAULT_TIMEOUT_SECONDS;\n\t\t\t\targs.push('--timeout', String(timeoutSeconds));\n\t\t\t\tgatewayParams.timeout = timeoutSeconds;\n\n\t\t\t\t// Auto-set reply channel from connected channels\n\t\t\t\tif (deliverReply && primaryChannel) {\n\t\t\t\t\tconst replyChannel = primaryChannel.channelType;\n\t\t\t\t\targs.push('--reply-channel', replyChannel);\n\t\t\t\t\tgatewayParams.replyChannel = replyChannel;\n\n\t\t\t\t\tif (primaryChannel.accountId) {\n\t\t\t\t\t\targs.push('--reply-account', primaryChannel.accountId);\n\t\t\t\t\t\tgatewayParams.replyAccountId = primaryChannel.accountId;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst verbose = normalizeOptionalString(\n\t\t\t\t\tthis.getNodeParameter('options.verbose', itemIndex, ''),\n\t\t\t\t);\n\t\t\t\tif (verbose) args.push('--verbose', verbose);\n\n\t\t\t\tconst binaryPath =\n\t\t\t\t\tnormalizeOptionalString(this.getNodeParameter('options.binaryPath', itemIndex, '')) ??\n\t\t\t\t\t'openclaw';\n\t\t\t\tconst workingDirectory = normalizeOptionalString(\n\t\t\t\t\tthis.getNodeParameter('options.workingDirectory', itemIndex, ''),\n\t\t\t\t);\n\n\t\t\t\tif (\n\t\t\t\t\tworkingDirectory &&\n\t\t\t\t\t(!existsSync(workingDirectory) || !statSync(workingDirectory).isDirectory())\n\t\t\t\t) {\n\t\t\t\t\tthrow new NodeOperationError(\n\t\t\t\t\t\tthis.getNode(),\n\t\t\t\t\t\t`Working directory does not exist or is not a directory: ${workingDirectory}`,\n\t\t\t\t\t\t{ itemIndex },\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst systemMessage = normalizeOptionalString(\n\t\t\t\t\tthis.getNodeParameter('options.systemMessage', itemIndex, ''),\n\t\t\t\t);\n\t\t\t\tif (systemMessage) {\n\t\t\t\t\tif (runLocally) {\n\t\t\t\t\t\tthrow new NodeOperationError(\n\t\t\t\t\t\t\tthis.getNode(),\n\t\t\t\t\t\t\t'System Message is only supported in OpenClaw Gateway mode. Disable Run Locally to use it.',\n\t\t\t\t\t\t\t{ itemIndex },\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tgatewayParams.extraSystemPrompt = systemMessage;\n\t\t\t\t\tconst rpcTimeoutMs = getWatchdogTimeoutMs(timeoutSeconds);\n\t\t\t\t\targs = getGatewayCallArgs(gatewayParams, rpcTimeoutMs);\n\t\t\t\t\tprocessTimeoutMs = rpcTimeoutMs + 10_000;\n\t\t\t\t}\n\n\t\t\t\tconsole.log('OpenClaw publish sync: launching CLI', {\n\t\t\t\t\titemIndex,\n\t\t\t\t\tbinaryPath,\n\t\t\t\t\targCount: args.length,\n\t\t\t\t\tcwd: workingDirectory ?? '(default)',\n\t\t\t\t\tenvKeys: Object.keys(openClawEnv),\n\t\t\t\t\tresolvedModel,\n\t\t\t\t\tpluginCount: pluginConfigs.length,\n\t\t\t\t\tmcpServerCount: mcpServerConfigs.length,\n\t\t\t\t\tchannelCount: channelConfigs.length,\n\t\t\t\t});\n\n\t\t\t\tconst result = await runOpenClawCli({\n\t\t\t\t\tbinaryPath,\n\t\t\t\t\targs,\n\t\t\t\t\tcwd: workingDirectory,\n\t\t\t\t\ttimeoutMs: processTimeoutMs ?? getWatchdogTimeoutMs(timeoutSeconds),\n\t\t\t\t\tenv: openClawEnv,\n\t\t\t\t\tabortSignal: this.getExecutionCancelSignal(),\n\t\t\t\t});\n\n\t\t\t\tconsole.log('OpenClaw publish sync: CLI execution completed', {\n\t\t\t\t\titemIndex,\n\t\t\t\t\texitCode: result.exitCode,\n\t\t\t\t\tsignal: result.signal,\n\t\t\t\t\tstdoutLength: result.stdout.length,\n\t\t\t\t\tstderrLength: result.stderr.length,\n\t\t\t\t});\n\n\t\t\t\tif (result.exitCode !== 0) {\n\t\t\t\t\tthrow new NodeOperationError(\n\t\t\t\t\t\tthis.getNode(),\n\t\t\t\t\t\tresult.stderr.trim() ||\n\t\t\t\t\t\t\tresult.stdout.trim() ||\n\t\t\t\t\t\t\t`OpenClaw CLI exited with code ${result.exitCode ?? `signal ${result.signal}`}`,\n\t\t\t\t\t\t{ itemIndex },\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst json = parseOpenClawOutput(result.stdout);\n\t\t\t\tjson.command = result.command;\n\t\t\t\tif (this.getNodeParameter('options.includeRawOutput', itemIndex, false) === true) {\n\t\t\t\t\tjson.rawOutput = { stdout: result.stdout, stderr: result.stderr };\n\t\t\t\t}\n\t\t\t\treturnData.push({ json, pairedItem: { item: itemIndex } });\n\t\t\t} catch (error) {\n\t\t\t\tif (this.continueOnFail()) {\n\t\t\t\t\treturnData.push({\n\t\t\t\t\t\tjson: { error: getErrorMessage(error) },\n\t\t\t\t\t\tpairedItem: { item: itemIndex },\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\treturn [returnData];\n\t}\n}\n"],"mappings":"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","names":[]}
|