sealclaw 2026.7.29 → 2026.7.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2 -0
- package/dist/build-info.json +3 -3
- package/dist/{channel-BK9zHrYN.js → channel-BLm40qc7.js} +10 -10
- package/dist/{channels.cn-Buix7ae-.js → channels.cn-DAG4fol_.js} +24 -4
- package/dist/cli-startup-metadata.json +1 -1
- package/dist/extensions/feishu/api.js +2 -2
- package/dist/extensions/feishu/channel-plugin-api.js +1 -1
- package/dist/extensions/feishu/index.js +1 -1
- package/dist/extensions/feishu/setup-api.js +1 -1
- package/dist/gateway/server.js +1 -1
- package/dist/{lark-cli-DSD2dZbN.js → lark-cli-BfLpX7UJ.js} +1 -1
- package/dist/{lark-cli-X9ksa9sV.js → lark-cli-CvYGYXO9.js} +3 -1
- package/dist/{message-handler-DCUtahkd.js → message-handler-C0wuchVM.js} +1 -1
- package/dist/{monitor-DBiRTDG7.js → monitor-SDF3Cq9V.js} +1 -1
- package/dist/{monitor.account-Buqn31nP.js → monitor.account-C9H4fNuT.js} +71 -48
- package/dist/plugin-sdk/.boundary-entry-shims.stamp +1 -1
- package/dist/postinstall-inventory.json +13 -13
- package/dist/{server-methods-DhK_tx6O.js → server-methods-D-2SBsLi.js} +1 -1
- package/dist/{server-plugin-bootstrap-B9AZTmfO.js → server-plugin-bootstrap-CmtBet1G.js} +1 -1
- package/dist/{server-plugins-D1lwAViQ.js → server-plugins-CXmbhH3C.js} +1 -1
- package/dist/{server-startup-plugins-0E76wiXn.js → server-startup-plugins-CD669zFA.js} +1 -1
- package/dist/{server-ws-runtime-CVpsmRTi.js → server-ws-runtime-D-Rc5DAy.js} +1 -1
- package/dist/{server.impl-CS2qhNzH.js → server.impl-D--I0QBQ.js} +6 -6
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -109,6 +109,8 @@ Docs: https://docs.openclaw.ai
|
|
|
109
109
|
|
|
110
110
|
### Fixes
|
|
111
111
|
|
|
112
|
+
- Control UI/Feishu: detect when the installed lark-cli is still bound to a previous Feishu application after credential reconfiguration, require fresh authorization, and pass the active App ID explicitly when rebinding so CLI sends use the newly selected application.
|
|
113
|
+
- Feishu: resolve ambiguous `private` message events through the chat API's `chat_mode` before routing, so private groups remain group sessions while true one-to-one chats and lookup failures retain direct-message safeguards.
|
|
112
114
|
- Feishu/Gateway: stop prompt-segment tracing from looping past end-of-input when group mention metadata is the final prompt block, preventing one processed group message from starving the Gateway event loop.
|
|
113
115
|
- Control UI/Models: accept nullable and string-valued optional metadata from the SeaSeek model catalog so production refreshes replace stale persisted model lists instead of failing Gateway validation.
|
|
114
116
|
- Control UI/Skill Center: match installed store skills by stable skill id before name so renamed skills correctly show the available update action.
|
package/dist/build-info.json
CHANGED
|
@@ -1587,31 +1587,31 @@ const feishuPlugin = createChatChannelPlugin({
|
|
|
1587
1587
|
gateway: {
|
|
1588
1588
|
connector: {
|
|
1589
1589
|
cancelLogin: async () => {
|
|
1590
|
-
await (await import("./lark-cli-
|
|
1590
|
+
await (await import("./lark-cli-BfLpX7UJ.js")).cancelLarkCliLogin();
|
|
1591
1591
|
},
|
|
1592
|
-
getStatus: async () => await (await import("./lark-cli-
|
|
1592
|
+
getStatus: async () => await (await import("./lark-cli-BfLpX7UJ.js")).getLarkCliStatus(),
|
|
1593
1593
|
install: async () => {
|
|
1594
|
-
(await import("./lark-cli-
|
|
1594
|
+
(await import("./lark-cli-BfLpX7UJ.js")).startLarkCliInstall();
|
|
1595
1595
|
},
|
|
1596
1596
|
uninstall: async () => {
|
|
1597
|
-
await (await import("./lark-cli-
|
|
1597
|
+
await (await import("./lark-cli-BfLpX7UJ.js")).uninstallLarkCli();
|
|
1598
1598
|
},
|
|
1599
1599
|
enable: async () => {
|
|
1600
|
-
await (await import("./lark-cli-
|
|
1600
|
+
await (await import("./lark-cli-BfLpX7UJ.js")).enableLarkCli();
|
|
1601
1601
|
},
|
|
1602
1602
|
disable: async () => {
|
|
1603
|
-
await (await import("./lark-cli-
|
|
1603
|
+
await (await import("./lark-cli-BfLpX7UJ.js")).disableLarkCli();
|
|
1604
1604
|
},
|
|
1605
1605
|
bind: async ({ appId }) => {
|
|
1606
|
-
await (await import("./lark-cli-
|
|
1606
|
+
await (await import("./lark-cli-BfLpX7UJ.js")).bindLarkCliToOpenClaw(appId);
|
|
1607
1607
|
},
|
|
1608
|
-
login: async () => await (await import("./lark-cli-
|
|
1609
|
-
logout: async () => await (await import("./lark-cli-
|
|
1608
|
+
login: async () => await (await import("./lark-cli-BfLpX7UJ.js")).startLarkCliLogin(),
|
|
1609
|
+
logout: async () => await (await import("./lark-cli-BfLpX7UJ.js")).logoutLarkCli()
|
|
1610
1610
|
},
|
|
1611
1611
|
loginWithQrStart: async (params) => await (await import("./qr-login-xoeCYnaL.js")).startFeishuQrLogin(params),
|
|
1612
1612
|
loginWithQrWait: async (params) => await (await import("./qr-login-xoeCYnaL.js")).waitForFeishuQrLogin(params),
|
|
1613
1613
|
startAccount: async (ctx) => {
|
|
1614
|
-
const { monitorFeishuProvider } = await import("./monitor-
|
|
1614
|
+
const { monitorFeishuProvider } = await import("./monitor-SDF3Cq9V.js");
|
|
1615
1615
|
const account = resolveFeishuRuntimeAccount({
|
|
1616
1616
|
cfg: ctx.cfg,
|
|
1617
1617
|
accountId: ctx.accountId
|
|
@@ -682,6 +682,25 @@ async function getPluginConnector(channel) {
|
|
|
682
682
|
function shouldSyncFeishuQuickConnect(config) {
|
|
683
683
|
return config.enabled === false || Object.prototype.hasOwnProperty.call(config, "app_id") || Object.prototype.hasOwnProperty.call(config, "app_secret");
|
|
684
684
|
}
|
|
685
|
+
function resolveFeishuConnectorAppId(cfg) {
|
|
686
|
+
const feishu = cfg.channels?.feishu;
|
|
687
|
+
const rootAppId = typeof feishu?.appId === "string" ? feishu.appId.trim() : "";
|
|
688
|
+
if (rootAppId) return rootAppId;
|
|
689
|
+
const accountId = feishu?.defaultAccount?.trim() || "default";
|
|
690
|
+
const accountAppId = feishu?.accounts?.[accountId]?.appId;
|
|
691
|
+
return typeof accountAppId === "string" && accountAppId.trim() ? accountAppId.trim() : void 0;
|
|
692
|
+
}
|
|
693
|
+
function reconcileFeishuConnectorStatus(status, cfg) {
|
|
694
|
+
const expectedAppId = resolveFeishuConnectorAppId(cfg);
|
|
695
|
+
const rawAppId = status.appId;
|
|
696
|
+
const boundAppId = typeof rawAppId === "string" ? rawAppId.trim() : void 0;
|
|
697
|
+
if (!expectedAppId || !boundAppId || expectedAppId === boundAppId) return status;
|
|
698
|
+
return {
|
|
699
|
+
...status,
|
|
700
|
+
configured: false,
|
|
701
|
+
authenticated: false
|
|
702
|
+
};
|
|
703
|
+
}
|
|
685
704
|
const ILINK_BASE_URL = "https://ilinkai.weixin.qq.com";
|
|
686
705
|
function makeilinkHeaders(botToken = "") {
|
|
687
706
|
const uinVal = Math.floor(Math.random() * 4294967295);
|
|
@@ -1061,7 +1080,7 @@ const channelsCnHandlers = {
|
|
|
1061
1080
|
respond(false, void 0, errorShape(ErrorCodes.UNAVAILABLE, String(err)));
|
|
1062
1081
|
}
|
|
1063
1082
|
},
|
|
1064
|
-
"channels.cn.connector.status": async ({ params, respond }) => {
|
|
1083
|
+
"channels.cn.connector.status": async ({ params, respond, context }) => {
|
|
1065
1084
|
const channel = typeof params.channel === "string" ? params.channel : "";
|
|
1066
1085
|
const connector = await getPluginConnector(channel);
|
|
1067
1086
|
if (!connector) {
|
|
@@ -1069,7 +1088,8 @@ const channelsCnHandlers = {
|
|
|
1069
1088
|
return;
|
|
1070
1089
|
}
|
|
1071
1090
|
try {
|
|
1072
|
-
const
|
|
1091
|
+
const rawStatus = await connector.getStatus();
|
|
1092
|
+
const status = channel === "feishu" ? reconcileFeishuConnectorStatus(rawStatus, context.getRuntimeConfig()) : rawStatus;
|
|
1073
1093
|
syncConnectorAgentCapabilities(channel, status);
|
|
1074
1094
|
respond(true, status, void 0);
|
|
1075
1095
|
} catch (err) {
|
|
@@ -1090,7 +1110,7 @@ const channelsCnHandlers = {
|
|
|
1090
1110
|
respond(false, void 0, errorShape(ErrorCodes.UNAVAILABLE, String(err)));
|
|
1091
1111
|
}
|
|
1092
1112
|
},
|
|
1093
|
-
"channels.cn.connector.bind": async ({ params, respond }) => {
|
|
1113
|
+
"channels.cn.connector.bind": async ({ params, respond, context }) => {
|
|
1094
1114
|
const channel = typeof params.channel === "string" ? params.channel : "";
|
|
1095
1115
|
const bind = (await getPluginConnector(channel))?.bind;
|
|
1096
1116
|
if (!bind) {
|
|
@@ -1098,7 +1118,7 @@ const channelsCnHandlers = {
|
|
|
1098
1118
|
return;
|
|
1099
1119
|
}
|
|
1100
1120
|
try {
|
|
1101
|
-
await bind({ appId: typeof params.appId === "string" ? params.appId : void 0 });
|
|
1121
|
+
await bind({ appId: (typeof params.appId === "string" ? params.appId.trim() : "") || (channel === "feishu" ? resolveFeishuConnectorAppId(context.getRuntimeConfig()) : void 0) || void 0 });
|
|
1102
1122
|
respond(true, { configured: true }, void 0);
|
|
1103
1123
|
} catch (err) {
|
|
1104
1124
|
respond(false, void 0, errorShape(ErrorCodes.UNAVAILABLE, String(err)));
|
|
@@ -17,5 +17,5 @@
|
|
|
17
17
|
],
|
|
18
18
|
"channelCatalogSignature": "8b05d554ebbdc12aba364c8b9e3e57964185f1aa",
|
|
19
19
|
"rootHelpBundleSignature": "3aa6587c4af3fc358d2243b2cc8c0d184ba89a01",
|
|
20
|
-
"rootHelpText": "\n🦞 SealClaw 2026.7.
|
|
20
|
+
"rootHelpText": "\n🦞 SealClaw 2026.7.30 (862aba9) — I'm the middleware between your ambition and your attention span.\n\nUsage: openclaw [options] [command]\n\nOptions:\n --container <name> Run the CLI inside a running Podman/Docker container\n named <name> (default: env OPENCLAW_CONTAINER)\n --dev Dev profile: isolate state under ~/.openclaw-dev, default\n gateway port 19001, and shift derived ports\n (browser/canvas)\n -h, --help Display help for command\n --log-level <level> Global log level override for file + console\n (silent|fatal|error|warn|info|debug|trace)\n --no-color Disable ANSI colors\n --profile <name> Use a named profile (isolates\n OPENCLAW_STATE_DIR/OPENCLAW_CONFIG_PATH under\n ~/.openclaw-<name>)\n -V, --version output the version number\n\nCommands:\n Hint: commands suffixed with * have subcommands. Run <command> --help for details.\n acp * Agent Control Protocol tools\n agent Run one agent turn via the Gateway\n agents * Manage isolated agents (workspaces, auth, routing)\n approvals * Manage exec approvals (gateway or node host)\n backup * Create and verify local backup archives for OpenClaw\n state\n capability * Run provider-backed inference commands (fallback alias:\n infer)\n channels * Manage connected chat channels (Telegram, Discord, etc.)\n chat Open a local terminal UI (alias for tui --local)\n clawbot * Legacy clawbot command aliases\n commitments * List and manage inferred follow-up commitments\n completion Generate shell completion script\n config * Non-interactive config helpers\n (get/set/unset/file/validate). Default: starts guided\n setup.\n configure Interactive configuration for credentials, channels,\n gateway, and agent defaults\n crestodian Open the ring-zero setup and repair helper\n cron * Manage cron jobs via the Gateway scheduler\n daemon * Gateway service (legacy alias)\n dashboard Open the Control UI with your current token\n devices * Device pairing + token management\n directory * Lookup contact and group IDs (self, peers, groups) for\n supported chat channels\n dns * DNS helpers for wide-area discovery (Tailscale + CoreDNS)\n docs Search the live OpenClaw docs\n doctor Health checks + quick fixes for the gateway and channels\n exec-policy * Show or synchronize requested exec policy with host\n approvals\n gateway * Run, inspect, and query the WebSocket Gateway\n health Fetch health from the running gateway\n help Display help for command\n hooks * Manage internal agent hooks\n infer * Run provider-backed inference commands\n logs Tail gateway file logs via RPC\n mcp * Manage OpenClaw MCP config and channel bridge\n memory Search, inspect, and reindex memory files\n message * Send, read, and manage messages\n migrate * Import state from another agent system\n models * Discover, scan, and configure models\n node * Run and manage the headless node host service\n nodes * Manage gateway-owned node pairing and node commands\n onboard Interactive onboarding for gateway, workspace, and skills\n pairing * Secure DM pairing (approve inbound requests)\n plugins * Manage OpenClaw plugins\n proxy * Run the OpenClaw debug proxy and inspect captured traffic\n qr Generate mobile pairing QR/setup code\n reset Reset local config/state (keeps the CLI installed)\n sandbox * Manage sandbox containers for agent isolation\n secrets * Secrets runtime reload controls\n security * Security tools and local config audits\n sessions * List stored conversation sessions\n setup Initialize local config and agent workspace\n skills * List and inspect available skills\n status Show channel health and recent session recipients\n system * System events, heartbeat, and presence\n tasks * Inspect durable background task state\n terminal Open a local terminal UI (alias for tui --local)\n tui Open a terminal UI connected to the Gateway\n uninstall Uninstall the gateway service + local data (CLI remains)\n update * Update OpenClaw and inspect update channel status\n webhooks * Webhook helpers and integrations\n\nExamples:\n openclaw models --help\n Show detailed help for the models command.\n openclaw channels login --verbose\n Link personal WhatsApp Web and show QR + connection logs.\n openclaw message send --target +15555550123 --message \"Hi\" --json\n Send via your web session and print JSON result.\n openclaw gateway --port 18789\n Run the WebSocket Gateway locally.\n openclaw --dev gateway\n Run a dev Gateway (isolated state/config) on ws://127.0.0.1:19001.\n openclaw gateway --force\n Kill anything bound to the default gateway port, then start it.\n openclaw gateway ...\n Gateway control via WebSocket.\n openclaw agent --to +15555550123 --message \"Run summary\" --deliver\n Talk directly to the agent using the Gateway; optionally send the WhatsApp reply.\n openclaw message send --channel telegram --target @mychat --message \"Hi\"\n Send via your Telegram bot.\n\nDocs: https://docs.openclaw.ai/cli\n\n"
|
|
21
21
|
}
|
|
@@ -8,12 +8,12 @@ import { a as parseFeishuTargetId, i as parseFeishuDirectConversationId, n as bu
|
|
|
8
8
|
import { n as createFeishuThreadBindingManager, r as getFeishuThreadBindingManager, t as __testing } from "../../thread-bindings-BrZyYary.js";
|
|
9
9
|
import { n as handleFeishuSubagentEnded, r as handleFeishuSubagentSpawning, t as handleFeishuSubagentDeliveryTarget } from "../../subagent-hooks-CIJsmAE8.js";
|
|
10
10
|
import { r as listEnabledFeishuAccounts } from "../../accounts-mmubi9Q_.js";
|
|
11
|
-
import { n as feishuSetupWizard, r as runFeishuLogin, t as feishuPlugin } from "../../channel-
|
|
11
|
+
import { n as feishuSetupWizard, r as runFeishuLogin, t as feishuPlugin } from "../../channel-BLm40qc7.js";
|
|
12
12
|
import { r as setFeishuNamedAccountEnabled, t as feishuSetupAdapter } from "../../setup-core-DIh8Guzo.js";
|
|
13
13
|
import { t as getFeishuRuntime } from "../../runtime-BFyqvmDG.js";
|
|
14
14
|
import { M as createFeishuToolClient, N as resolveAnyEnabledFeishuToolsConfig, P as resolveFeishuToolAccount, c as registerFeishuChatTools, n as registerFeishuDriveTools } from "../../drive-rnAtPbcg.js";
|
|
15
15
|
import { n as toolExecutionErrorResult, r as unknownToolActionResult, t as jsonToolResult } from "../../tool-result-CtEBdctx.js";
|
|
16
|
-
import { h as registerFeishuCliIntegration } from "../../lark-cli-
|
|
16
|
+
import { h as registerFeishuCliIntegration } from "../../lark-cli-CvYGYXO9.js";
|
|
17
17
|
import { existsSync } from "node:fs";
|
|
18
18
|
import { basename, isAbsolute, resolve } from "node:path";
|
|
19
19
|
import { homedir } from "node:os";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as feishuPlugin } from "../../channel-
|
|
1
|
+
import { t as feishuPlugin } from "../../channel-BLm40qc7.js";
|
|
2
2
|
export { feishuPlugin };
|
|
@@ -62,7 +62,7 @@ var feishu_default = defineBundledChannelEntry({
|
|
|
62
62
|
},
|
|
63
63
|
registerCliMetadata(api) {
|
|
64
64
|
api.registerCli(async ({ program }) => {
|
|
65
|
-
const { registerFeishuCli } = await import("../../lark-cli-
|
|
65
|
+
const { registerFeishuCli } = await import("../../lark-cli-BfLpX7UJ.js");
|
|
66
66
|
registerFeishuCli(program);
|
|
67
67
|
}, { descriptors: [{
|
|
68
68
|
name: "feishu-cli",
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { n as feishuSetupWizard, t as feishuPlugin } from "../../channel-
|
|
1
|
+
import { n as feishuSetupWizard, t as feishuPlugin } from "../../channel-BLm40qc7.js";
|
|
2
2
|
import { t as feishuSetupAdapter } from "../../setup-core-DIh8Guzo.js";
|
|
3
3
|
export { feishuPlugin, feishuSetupAdapter, feishuSetupWizard };
|
package/dist/gateway/server.js
CHANGED
|
@@ -9,7 +9,7 @@ async function loadServerImpl() {
|
|
|
9
9
|
const startupStartedAt = performance.now();
|
|
10
10
|
const before = performance.now();
|
|
11
11
|
try {
|
|
12
|
-
return await import("../server.impl-
|
|
12
|
+
return await import("../server.impl-D--I0QBQ.js");
|
|
13
13
|
} finally {
|
|
14
14
|
const now = performance.now();
|
|
15
15
|
emitStartupTrace("gateway.server-impl-import", now - before, now - startupStartedAt);
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { _ as startLarkCliLogin, a as enableLarkCli, c as getLarkCliStatus, d as logoutLarkCli, g as startLarkCliInstall, i as disableLarkCli, m as registerFeishuCli, r as cancelLarkCliLogin, t as bindLarkCliToOpenClaw, v as uninstallLarkCli } from "./lark-cli-
|
|
1
|
+
import { _ as startLarkCliLogin, a as enableLarkCli, c as getLarkCliStatus, d as logoutLarkCli, g as startLarkCliInstall, i as disableLarkCli, m as registerFeishuCli, r as cancelLarkCliLogin, t as bindLarkCliToOpenClaw, v as uninstallLarkCli } from "./lark-cli-CvYGYXO9.js";
|
|
2
2
|
export { bindLarkCliToOpenClaw, cancelLarkCliLogin, disableLarkCli, enableLarkCli, getLarkCliStatus, logoutLarkCli, registerFeishuCli, startLarkCliInstall, startLarkCliLogin, uninstallLarkCli };
|
|
@@ -140,6 +140,7 @@ function collectIdentityRecords(status) {
|
|
|
140
140
|
}
|
|
141
141
|
function parseLarkCliStatus(params) {
|
|
142
142
|
const config = parseFirstJsonObject(params.configOutput ?? "");
|
|
143
|
+
const appId = config ? readString(config, ["appId", "app_id"]) : void 0;
|
|
143
144
|
const auth = parseFirstJsonObject(params.authOutput ?? "");
|
|
144
145
|
const identities = auth && isRecord(auth.identities) ? auth.identities : void 0;
|
|
145
146
|
const userIdentity = identities && isRecord(identities.user) ? identities.user : void 0;
|
|
@@ -165,8 +166,9 @@ function parseLarkCliStatus(params) {
|
|
|
165
166
|
return {
|
|
166
167
|
installed: params.installed,
|
|
167
168
|
downloading: Boolean(installTask),
|
|
168
|
-
configured: Boolean(
|
|
169
|
+
configured: Boolean(appId),
|
|
169
170
|
authenticated,
|
|
171
|
+
...appId ? { appId } : {},
|
|
170
172
|
...userName ? { userName } : {},
|
|
171
173
|
...tenantName ? { tenantName } : {},
|
|
172
174
|
...installError ? { error: installError } : {},
|
|
@@ -1458,7 +1458,7 @@ function attachGatewayWsMessageHandler(params) {
|
|
|
1458
1458
|
});
|
|
1459
1459
|
};
|
|
1460
1460
|
(async () => {
|
|
1461
|
-
const { handleGatewayRequest } = await import("./server-methods-
|
|
1461
|
+
const { handleGatewayRequest } = await import("./server-methods-D-2SBsLi.js");
|
|
1462
1462
|
await handleGatewayRequest({
|
|
1463
1463
|
req,
|
|
1464
1464
|
respond,
|
|
@@ -3,7 +3,7 @@ import { l as fetchBotIdentityForMonitor } from "./monitor.state-BTOOUYq4.js";
|
|
|
3
3
|
//#region extensions/feishu/src/monitor.ts
|
|
4
4
|
let monitorAccountRuntimePromise;
|
|
5
5
|
async function loadMonitorAccountRuntime() {
|
|
6
|
-
monitorAccountRuntimePromise ??= import("./monitor.account-
|
|
6
|
+
monitorAccountRuntimePromise ??= import("./monitor.account-C9H4fNuT.js");
|
|
7
7
|
return await monitorAccountRuntimePromise;
|
|
8
8
|
}
|
|
9
9
|
async function monitorFeishuProvider(opts = {}) {
|
|
@@ -181,6 +181,62 @@ async function resolveFeishuSenderName(params) {
|
|
|
181
181
|
return permissionError ? { permissionError } : {};
|
|
182
182
|
}
|
|
183
183
|
//#endregion
|
|
184
|
+
//#region extensions/feishu/src/chat-type.ts
|
|
185
|
+
const resolvedChatTypeCache = /* @__PURE__ */ new Map();
|
|
186
|
+
const CHAT_TYPE_CACHE_TTL_MS = 30 * 6e4;
|
|
187
|
+
const CHAT_TYPE_CACHE_MAX_SIZE = 5e3;
|
|
188
|
+
function normalizeConversationType(value) {
|
|
189
|
+
if (value === "group" || value === "topic" || value === "topic_group" || value === "public") return "group";
|
|
190
|
+
if (value === "p2p") return "p2p";
|
|
191
|
+
}
|
|
192
|
+
function normalizeChatPrivacy(value) {
|
|
193
|
+
if (value === "public") return "group";
|
|
194
|
+
if (value === "private") return "p2p";
|
|
195
|
+
}
|
|
196
|
+
function pruneChatTypeCache(now) {
|
|
197
|
+
for (const [key, entry] of resolvedChatTypeCache.entries()) if (entry.expiresAt <= now) resolvedChatTypeCache.delete(key);
|
|
198
|
+
if (resolvedChatTypeCache.size > CHAT_TYPE_CACHE_MAX_SIZE) {
|
|
199
|
+
const excess = resolvedChatTypeCache.size - CHAT_TYPE_CACHE_MAX_SIZE;
|
|
200
|
+
const iterator = resolvedChatTypeCache.keys();
|
|
201
|
+
for (let index = 0; index < excess; index++) {
|
|
202
|
+
const key = iterator.next().value;
|
|
203
|
+
if (key !== void 0) resolvedChatTypeCache.delete(key);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
function sanitizeLogValue(value) {
|
|
208
|
+
return value.replace(/[\r\n]/g, " ").slice(0, 500);
|
|
209
|
+
}
|
|
210
|
+
async function resolveFeishuConversationChatType(params) {
|
|
211
|
+
const explicitChatType = normalizeConversationType(params.chatType);
|
|
212
|
+
if (explicitChatType) return explicitChatType;
|
|
213
|
+
const chatId = params.chatId?.trim();
|
|
214
|
+
if (!chatId) return "p2p";
|
|
215
|
+
const cacheKey = `${params.account.accountId}:${chatId}`;
|
|
216
|
+
const now = Date.now();
|
|
217
|
+
pruneChatTypeCache(now);
|
|
218
|
+
const cached = resolvedChatTypeCache.get(cacheKey);
|
|
219
|
+
if (cached) return cached.value;
|
|
220
|
+
try {
|
|
221
|
+
const response = await createFeishuClient(params.account).im.chat.get({ path: { chat_id: chatId } });
|
|
222
|
+
if (response.code === 0) {
|
|
223
|
+
const resolvedChatType = normalizeConversationType(response.data?.chat_mode) ?? normalizeChatPrivacy(response.data?.chat_type);
|
|
224
|
+
if (resolvedChatType) {
|
|
225
|
+
resolvedChatTypeCache.set(cacheKey, {
|
|
226
|
+
value: resolvedChatType,
|
|
227
|
+
expiresAt: now + CHAT_TYPE_CACHE_TTL_MS
|
|
228
|
+
});
|
|
229
|
+
return resolvedChatType;
|
|
230
|
+
}
|
|
231
|
+
params.log(`feishu[${params.account.accountId}]: chat lookup missing conversation type; defaulting to p2p`);
|
|
232
|
+
} else params.log(`feishu[${params.account.accountId}]: failed to resolve chat type: ${sanitizeLogValue(response.msg ?? "unknown error")}; defaulting to p2p`);
|
|
233
|
+
} catch (error) {
|
|
234
|
+
const message = error instanceof Error ? error.message : "unknown";
|
|
235
|
+
params.log(`feishu[${params.account.accountId}]: failed to resolve chat type: ${sanitizeLogValue(message)}; defaulting to p2p`);
|
|
236
|
+
}
|
|
237
|
+
return "p2p";
|
|
238
|
+
}
|
|
239
|
+
//#endregion
|
|
184
240
|
//#region extensions/feishu/src/processing-claims.ts
|
|
185
241
|
const EVENT_DEDUP_TTL_MS = 300 * 1e3;
|
|
186
242
|
const EVENT_MEMORY_MAX_SIZE = 2e3;
|
|
@@ -1571,6 +1627,15 @@ async function handleFeishuMessage(params) {
|
|
|
1571
1627
|
return;
|
|
1572
1628
|
}
|
|
1573
1629
|
let ctx = parseFeishuMessageEvent(event, botOpenId, botName);
|
|
1630
|
+
if (ctx.chatType === "private") ctx = {
|
|
1631
|
+
...ctx,
|
|
1632
|
+
chatType: await resolveFeishuConversationChatType({
|
|
1633
|
+
account,
|
|
1634
|
+
chatId: ctx.chatId,
|
|
1635
|
+
chatType: ctx.chatType,
|
|
1636
|
+
log
|
|
1637
|
+
})
|
|
1638
|
+
};
|
|
1574
1639
|
const isGroup = isFeishuGroupChatType(ctx.chatType);
|
|
1575
1640
|
const isDirect = !isGroup;
|
|
1576
1641
|
const senderUserId = normalizeOptionalString(event.sender.sender_id.user_id);
|
|
@@ -2502,55 +2567,13 @@ async function dispatchSyntheticCommand(params) {
|
|
|
2502
2567
|
accountId: params.accountId
|
|
2503
2568
|
});
|
|
2504
2569
|
}
|
|
2505
|
-
function normalizeResolvedCardActionChatType(value) {
|
|
2506
|
-
if (value === "group" || value === "topic" || value === "public") return "group";
|
|
2507
|
-
if (value === "p2p" || value === "private") return "p2p";
|
|
2508
|
-
}
|
|
2509
|
-
const resolvedChatTypeCache = /* @__PURE__ */ new Map();
|
|
2510
|
-
const CHAT_TYPE_CACHE_TTL_MS = 30 * 6e4;
|
|
2511
|
-
const CHAT_TYPE_CACHE_MAX_SIZE = 5e3;
|
|
2512
|
-
function pruneChatTypeCache(now) {
|
|
2513
|
-
for (const [key, entry] of resolvedChatTypeCache.entries()) if (entry.expiresAt <= now) resolvedChatTypeCache.delete(key);
|
|
2514
|
-
if (resolvedChatTypeCache.size > CHAT_TYPE_CACHE_MAX_SIZE) {
|
|
2515
|
-
const excess = resolvedChatTypeCache.size - CHAT_TYPE_CACHE_MAX_SIZE;
|
|
2516
|
-
const iter = resolvedChatTypeCache.keys();
|
|
2517
|
-
for (let i = 0; i < excess; i++) {
|
|
2518
|
-
const key = iter.next().value;
|
|
2519
|
-
if (key !== void 0) resolvedChatTypeCache.delete(key);
|
|
2520
|
-
}
|
|
2521
|
-
}
|
|
2522
|
-
}
|
|
2523
|
-
function sanitizeLogValue(v) {
|
|
2524
|
-
return v.replace(/[\r\n]/g, " ").slice(0, 500);
|
|
2525
|
-
}
|
|
2526
2570
|
async function resolveCardActionChatType(params) {
|
|
2527
|
-
|
|
2528
|
-
|
|
2529
|
-
|
|
2530
|
-
|
|
2531
|
-
|
|
2532
|
-
|
|
2533
|
-
pruneChatTypeCache(now);
|
|
2534
|
-
const cached = resolvedChatTypeCache.get(cacheKey);
|
|
2535
|
-
if (cached) return cached.value;
|
|
2536
|
-
try {
|
|
2537
|
-
const response = await createFeishuClient(params.account).im.chat.get({ path: { chat_id: chatId } });
|
|
2538
|
-
if (response.code === 0) {
|
|
2539
|
-
const resolvedChatType = normalizeResolvedCardActionChatType(response.data?.chat_mode) ?? normalizeResolvedCardActionChatType(response.data?.chat_type);
|
|
2540
|
-
if (resolvedChatType) {
|
|
2541
|
-
resolvedChatTypeCache.set(cacheKey, {
|
|
2542
|
-
value: resolvedChatType,
|
|
2543
|
-
expiresAt: now + CHAT_TYPE_CACHE_TTL_MS
|
|
2544
|
-
});
|
|
2545
|
-
return resolvedChatType;
|
|
2546
|
-
}
|
|
2547
|
-
params.log(`feishu[${params.account.accountId}]: card action missing chat type for chat; defaulting to p2p`);
|
|
2548
|
-
} else params.log(`feishu[${params.account.accountId}]: failed to resolve chat type: ${sanitizeLogValue(response.msg ?? "unknown error")}; defaulting to p2p`);
|
|
2549
|
-
} catch (err) {
|
|
2550
|
-
const message = err instanceof Error ? err.message : "unknown";
|
|
2551
|
-
params.log(`feishu[${params.account.accountId}]: failed to resolve chat type: ${sanitizeLogValue(message)}; defaulting to p2p`);
|
|
2552
|
-
}
|
|
2553
|
-
return "p2p";
|
|
2571
|
+
return resolveFeishuConversationChatType({
|
|
2572
|
+
account: params.account,
|
|
2573
|
+
chatId: params.event.context.chat_id,
|
|
2574
|
+
chatType: params.chatType,
|
|
2575
|
+
log: params.log
|
|
2576
|
+
});
|
|
2554
2577
|
}
|
|
2555
2578
|
async function sendInvalidInteractionNotice(params) {
|
|
2556
2579
|
const reasonText = params.reason === "stale" ? "This card action has expired. Open a fresh launcher card and try again." : params.reason === "wrong_user" ? "This card action belongs to a different user." : params.reason === "wrong_conversation" ? "This card action belongs to a different conversation." : "This card action payload is invalid.";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
2026-
|
|
1
|
+
2026-08-01T13:13:34.852Z
|
|
@@ -290,7 +290,7 @@
|
|
|
290
290
|
"dist/channel-account-context-BF9DXgvi.js",
|
|
291
291
|
"dist/channel-actions-1S8yUzVu.js",
|
|
292
292
|
"dist/channel-activity-BBbF5NRm.js",
|
|
293
|
-
"dist/channel-
|
|
293
|
+
"dist/channel-BLm40qc7.js",
|
|
294
294
|
"dist/channel-bootstrap.runtime-0Ci9Qzod.js",
|
|
295
295
|
"dist/channel-bootstrap.runtime-BFurpGdb.js",
|
|
296
296
|
"dist/channel-bootstrap.runtime.js",
|
|
@@ -354,7 +354,7 @@
|
|
|
354
354
|
"dist/channels-CU_-XuzU.js",
|
|
355
355
|
"dist/channels-status-issues-Cd0GNuyn.js",
|
|
356
356
|
"dist/channels-table-CJyi9lis.js",
|
|
357
|
-
"dist/channels.cn-
|
|
357
|
+
"dist/channels.cn-DAG4fol_.js",
|
|
358
358
|
"dist/chat-abort-DlUpGCxe.js",
|
|
359
359
|
"dist/chat-attachments-DlpXbeG9.js",
|
|
360
360
|
"dist/chat-BGd2bTpY.js",
|
|
@@ -1442,8 +1442,8 @@
|
|
|
1442
1442
|
"dist/lancedb-runtime-D_seGvWG.js",
|
|
1443
1443
|
"dist/lanes-D8DvGtWb.js",
|
|
1444
1444
|
"dist/lanes-DmxlLTSz.js",
|
|
1445
|
-
"dist/lark-cli-
|
|
1446
|
-
"dist/lark-cli-
|
|
1445
|
+
"dist/lark-cli-BfLpX7UJ.js",
|
|
1446
|
+
"dist/lark-cli-CvYGYXO9.js",
|
|
1447
1447
|
"dist/launchd-9E1Cm_78.js",
|
|
1448
1448
|
"dist/lazy-promise-AiZRy56y.js",
|
|
1449
1449
|
"dist/lazy-runtime-C1AaRBNl.js",
|
|
@@ -1609,7 +1609,7 @@
|
|
|
1609
1609
|
"dist/message-channel-core-D9KOV-bk.js",
|
|
1610
1610
|
"dist/message-DYItDxpm.js",
|
|
1611
1611
|
"dist/message-format-DvtCnX8W.js",
|
|
1612
|
-
"dist/message-handler-
|
|
1612
|
+
"dist/message-handler-C0wuchVM.js",
|
|
1613
1613
|
"dist/message-hook-mappers-DJX8gLZj.js",
|
|
1614
1614
|
"dist/message-secret-scope-BMZx4rg6.js",
|
|
1615
1615
|
"dist/message.config.runtime-Cm-YA664.js",
|
|
@@ -1683,8 +1683,8 @@
|
|
|
1683
1683
|
"dist/models-config-Ckly7ITB.js",
|
|
1684
1684
|
"dist/models-http-DV08w6mt.js",
|
|
1685
1685
|
"dist/module-loader-CUMWhfAf.js",
|
|
1686
|
-
"dist/monitor-
|
|
1687
|
-
"dist/monitor.account-
|
|
1686
|
+
"dist/monitor-SDF3Cq9V.js",
|
|
1687
|
+
"dist/monitor.account-C9H4fNuT.js",
|
|
1688
1688
|
"dist/monitor.state-BTOOUYq4.js",
|
|
1689
1689
|
"dist/multimodal-Ct3lNJiA.js",
|
|
1690
1690
|
"dist/mutate-DQJs_QJs.js",
|
|
@@ -6408,15 +6408,15 @@
|
|
|
6408
6408
|
"dist/server-discovery-runtime-otVbssbU.js",
|
|
6409
6409
|
"dist/server-json-DuoKAVYg.js",
|
|
6410
6410
|
"dist/server-maintenance-DOsbvq0d.js",
|
|
6411
|
-
"dist/server-methods-
|
|
6411
|
+
"dist/server-methods-D-2SBsLi.js",
|
|
6412
6412
|
"dist/server-methods-list-TLrNLcWZ.js",
|
|
6413
6413
|
"dist/server-model-catalog-CDYTyS9b.js",
|
|
6414
6414
|
"dist/server-model-catalog-CsBt5ik5.js",
|
|
6415
6415
|
"dist/server-network-runtime-C7LSltd1.js",
|
|
6416
6416
|
"dist/server-node-events-D3UXcR75.js",
|
|
6417
6417
|
"dist/server-node-session-runtime-PWEcawUw.js",
|
|
6418
|
-
"dist/server-plugin-bootstrap-
|
|
6419
|
-
"dist/server-plugins-
|
|
6418
|
+
"dist/server-plugin-bootstrap-CmtBet1G.js",
|
|
6419
|
+
"dist/server-plugins-CXmbhH3C.js",
|
|
6420
6420
|
"dist/server-reload-handlers-CYT4jDdk.js",
|
|
6421
6421
|
"dist/server-request-context-DehcvbxF.js",
|
|
6422
6422
|
"dist/server-restart-sentinel-CUJOW9ph.js",
|
|
@@ -6434,15 +6434,15 @@
|
|
|
6434
6434
|
"dist/server-startup-legacy-workspaces-migration-bOvHeUwX.js",
|
|
6435
6435
|
"dist/server-startup-log-D1EdklEA.js",
|
|
6436
6436
|
"dist/server-startup-memory-Cp8tf3gH.js",
|
|
6437
|
-
"dist/server-startup-plugins-
|
|
6437
|
+
"dist/server-startup-plugins-CD669zFA.js",
|
|
6438
6438
|
"dist/server-startup-post-attach-B6S2tGFO.js",
|
|
6439
6439
|
"dist/server-startup-sealseek-models-DRDwh3Mg.js",
|
|
6440
6440
|
"dist/server-startup-session-migration-6yVl_xtK.js",
|
|
6441
6441
|
"dist/server-startup-unavailable-methods-ehe0vFfx.js",
|
|
6442
6442
|
"dist/server-tailscale-ybcDD6X8.js",
|
|
6443
6443
|
"dist/server-utils-C0TwxD5V.js",
|
|
6444
|
-
"dist/server-ws-runtime-
|
|
6445
|
-
"dist/server.impl-
|
|
6444
|
+
"dist/server-ws-runtime-D-Rc5DAy.js",
|
|
6445
|
+
"dist/server.impl-D--I0QBQ.js",
|
|
6446
6446
|
"dist/service-6ce5J6lU.js",
|
|
6447
6447
|
"dist/service-audit-Cg483YEh.js",
|
|
6448
6448
|
"dist/service-audit-o3BzGl94.js",
|
|
@@ -210,7 +210,7 @@ import { n as updateSystemPresence, t as listSystemPresence } from "./system-pre
|
|
|
210
210
|
import { t as getLastUpdateCheckedAt } from "./update-startup-DiS9G0NB.js";
|
|
211
211
|
import { a as validateVoiceWakeRoutingConfigInput, i as setVoiceWakeRoutingConfig, n as normalizeVoiceWakeRoutingConfig, o as isRoleAuthorizedForMethod, r as resolveVoiceWakeRouteByTrigger, s as parseGatewayRole, t as loadVoiceWakeRoutingConfig } from "./voicewake-routing-iz_kqPpZ.js";
|
|
212
212
|
import { n as resolveSessionKeyForRun } from "./server-session-key-DQ76HcvR.js";
|
|
213
|
-
import { n as channelsCnHandlers } from "./channels.cn-
|
|
213
|
+
import { n as channelsCnHandlers } from "./channels.cn-DAG4fol_.js";
|
|
214
214
|
import { n as buildCanvasScopedHostUrl, r as mintCanvasCapabilityToken, t as CANVAS_CAPABILITY_TTL_MS } from "./canvas-capability-BGC-Pgg9.js";
|
|
215
215
|
import { a as nodeWakeById, n as NODE_WAKE_RECONNECT_RETRY_WAIT_MS, o as nodeWakeNudgeById, r as NODE_WAKE_RECONNECT_WAIT_MS, t as broadcastPresenceSnapshot } from "./presence-events-Dv6_Hz3q.js";
|
|
216
216
|
import { t as invokeGatewayTool } from "./tools-invoke-shared-ESMmMn6-.js";
|
|
@@ -3,7 +3,7 @@ import { t as applyPluginAutoEnable } from "./plugin-auto-enable-CqZoOzt_.js";
|
|
|
3
3
|
import { i as setGatewaySubagentRuntime, r as setGatewayNodesRuntime } from "./gateway-bindings-B6m7pPqS.js";
|
|
4
4
|
import { t as primeConfiguredBindingRegistry } from "./binding-registry-D-_SB4ui.js";
|
|
5
5
|
import { t as mergeActivationSectionsIntoRuntimeConfig } from "./plugin-activation-runtime-config-C8jdG1Pj.js";
|
|
6
|
-
import { a as setPluginSubagentOverridePolicies, n as createGatewaySubagentRuntime, r as loadGatewayPlugins, t as createGatewayNodesRuntime } from "./server-plugins-
|
|
6
|
+
import { a as setPluginSubagentOverridePolicies, n as createGatewaySubagentRuntime, r as loadGatewayPlugins, t as createGatewayNodesRuntime } from "./server-plugins-CXmbhH3C.js";
|
|
7
7
|
//#region src/gateway/server-plugin-bootstrap.ts
|
|
8
8
|
function installGatewayPluginRuntimeEnvironment(cfg) {
|
|
9
9
|
setPluginSubagentOverridePolicies(cfg);
|
|
@@ -163,7 +163,7 @@ async function dispatchGatewayMethod(method, params, options) {
|
|
|
163
163
|
const isWebchatConnect = scope?.isWebchatConnect ?? (() => false);
|
|
164
164
|
if (!context) throw new Error(`Plugin subagent dispatch requires a gateway request scope (method: ${method}). No scope set and no fallback context available.`);
|
|
165
165
|
let result;
|
|
166
|
-
const { handleGatewayRequest } = await import("./server-methods-
|
|
166
|
+
const { handleGatewayRequest } = await import("./server-methods-D-2SBsLi.js");
|
|
167
167
|
const pluginRuntimeOwnerId = typeof options?.pluginRuntimeOwnerId === "string" && options.pluginRuntimeOwnerId.trim() ? options.pluginRuntimeOwnerId.trim() : void 0;
|
|
168
168
|
const syntheticClient = createSyntheticOperatorClient({
|
|
169
169
|
allowModelOverride: options?.allowSyntheticModelOverride === true,
|
|
@@ -97,7 +97,7 @@ async function prepareGatewayPluginBootstrap(params) {
|
|
|
97
97
|
};
|
|
98
98
|
}
|
|
99
99
|
async function loadGatewayStartupPluginRuntime(params) {
|
|
100
|
-
const { loadGatewayStartupPlugins } = await import("./server-plugin-bootstrap-
|
|
100
|
+
const { loadGatewayStartupPlugins } = await import("./server-plugin-bootstrap-CmtBet1G.js");
|
|
101
101
|
return loadGatewayStartupPlugins({
|
|
102
102
|
cfg: params.cfg,
|
|
103
103
|
activationSourceConfig: params.activationSourceConfig,
|
|
@@ -120,7 +120,7 @@ function attachGatewayWsMessageHandlerOnDemand(params) {
|
|
|
120
120
|
queued.push(data);
|
|
121
121
|
};
|
|
122
122
|
params.socket.on("message", queueMessage);
|
|
123
|
-
import("./message-handler-
|
|
123
|
+
import("./message-handler-C0wuchVM.js").then(({ attachGatewayWsMessageHandler }) => {
|
|
124
124
|
params.socket.off("message", queueMessage);
|
|
125
125
|
if (params.isClosed()) return;
|
|
126
126
|
attachGatewayWsMessageHandler(params);
|
|
@@ -48,9 +48,9 @@ import { n as resolveAssistantIdentity } from "./assistant-identity-D9sWu6XN.js"
|
|
|
48
48
|
import { i as getRequiredSharedGatewaySessionGeneration, r as enforceSharedGatewaySessionGenerationForConfigWrite } from "./server-shared-auth-generation-BPhO1xpA.js";
|
|
49
49
|
import { a as createToolEventRecipientRegistry, n as createChatRunState } from "./server-chat-state-Fs_ZNEYv.js";
|
|
50
50
|
import { a as incrementPresenceVersion, i as getPresenceVersion, n as getHealthCache, o as refreshGatewayHealthSnapshot, r as getHealthVersion } from "./health-state-DBjPrOZU.js";
|
|
51
|
-
import { t as autoStartEnabledCnChannels } from "./channels.cn-
|
|
51
|
+
import { t as autoStartEnabledCnChannels } from "./channels.cn-DAG4fol_.js";
|
|
52
52
|
import { i as normalizeCanvasScopedUrl } from "./canvas-capability-BGC-Pgg9.js";
|
|
53
|
-
import { i as setFallbackGatewayContextResolver } from "./server-plugins-
|
|
53
|
+
import { i as setFallbackGatewayContextResolver } from "./server-plugins-CXmbhH3C.js";
|
|
54
54
|
import { n as applyGatewayLaneConcurrency, t as resolveHookClientIpConfig } from "./hook-client-ip-config-DK56Uzz9.js";
|
|
55
55
|
import { t as GATEWAY_EVENTS } from "./server-methods-list-TLrNLcWZ.js";
|
|
56
56
|
import { t as STARTUP_UNAVAILABLE_GATEWAY_METHODS } from "./server-startup-unavailable-methods-ehe0vFfx.js";
|
|
@@ -1673,7 +1673,7 @@ async function startGatewayServer(port = 18789, opts = {}) {
|
|
|
1673
1673
|
const startupConfigModulePromise = import("./server-startup-config-1xqVZH8P.js");
|
|
1674
1674
|
let startupPluginsModulePromise = null;
|
|
1675
1675
|
const loadStartupPluginsModule = () => {
|
|
1676
|
-
startupPluginsModulePromise ??= import("./server-startup-plugins-
|
|
1676
|
+
startupPluginsModulePromise ??= import("./server-startup-plugins-CD669zFA.js");
|
|
1677
1677
|
return startupPluginsModulePromise;
|
|
1678
1678
|
};
|
|
1679
1679
|
const { loadGatewayStartupConfigSnapshot } = await startupConfigModulePromise;
|
|
@@ -2100,7 +2100,7 @@ async function startGatewayServer(port = 18789, opts = {}) {
|
|
|
2100
2100
|
const beforeChannelIds = new Set(beforeChannelTargets.keys());
|
|
2101
2101
|
const [{ loadPluginLookUpTable }, { prepareGatewayPluginLoad }, { startPluginServices }] = await Promise.all([
|
|
2102
2102
|
import("./plugin-lookup-table-dXbdudwd.js"),
|
|
2103
|
-
import("./server-plugin-bootstrap-
|
|
2103
|
+
import("./server-plugin-bootstrap-CmtBet1G.js"),
|
|
2104
2104
|
import("./services-DbtJf7cT.js")
|
|
2105
2105
|
]);
|
|
2106
2106
|
const nextPluginLookUpTable = loadPluginLookUpTable({
|
|
@@ -2237,7 +2237,7 @@ async function startGatewayServer(port = 18789, opts = {}) {
|
|
|
2237
2237
|
} : () => {};
|
|
2238
2238
|
if (!minimalTestGateway) {
|
|
2239
2239
|
if (runtimePluginsLoaded && deferredConfiguredChannelPluginIds.length > 0) {
|
|
2240
|
-
const { reloadDeferredGatewayPlugins } = await import("./server-plugin-bootstrap-
|
|
2240
|
+
const { reloadDeferredGatewayPlugins } = await import("./server-plugin-bootstrap-CmtBet1G.js");
|
|
2241
2241
|
const loaded = reloadDeferredGatewayPlugins({
|
|
2242
2242
|
cfg: gatewayPluginConfigAtStart,
|
|
2243
2243
|
activationSourceConfig: startupActivationSourceConfig,
|
|
@@ -2253,7 +2253,7 @@ async function startGatewayServer(port = 18789, opts = {}) {
|
|
|
2253
2253
|
await refreshAttachedGatewayDiscovery(loaded.pluginRegistry);
|
|
2254
2254
|
}
|
|
2255
2255
|
}
|
|
2256
|
-
const { attachGatewayWsHandlers } = await import("./server-ws-runtime-
|
|
2256
|
+
const { attachGatewayWsHandlers } = await import("./server-ws-runtime-D-Rc5DAy.js");
|
|
2257
2257
|
const canvasHostScheme = gatewayTls.enabled ? "https" : "http";
|
|
2258
2258
|
attachGatewayWsHandlers({
|
|
2259
2259
|
wss,
|