@openclaw/qqbot 2026.5.2-beta.2 → 2026.5.3-beta.1
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/api.js +646 -0
- package/dist/approval-cg0SVahb.js +94 -0
- package/dist/channel-N6Y_Rcjp.js +551 -0
- package/dist/channel-plugin-api.js +2 -0
- package/dist/channel.setup-ByCRAe5H.js +25 -0
- package/dist/config-D6545NkC.js +94 -0
- package/dist/config-schema-DFcjQw73.js +309 -0
- package/dist/exec-approvals-COUsM6wZ.js +138 -0
- package/dist/gateway-CmSUJKSt.js +6726 -0
- package/dist/handler-runtime-Bqm6N0WG.js +120 -0
- package/dist/index.js +29 -0
- package/dist/narrowing-BoieBTIU.js +25 -0
- package/dist/outbound-BJfhwrPg.js +1357 -0
- package/dist/request-context-DXtpwWui.js +921 -0
- package/dist/resolve-D_06fV6-.js +284 -0
- package/dist/runtime-BJAS3eXW.js +18 -0
- package/dist/runtime-api.js +2 -0
- package/dist/secret-contract-api.js +56 -0
- package/dist/sender-p-B14eLG.js +1987 -0
- package/dist/setup-entry.js +15 -0
- package/dist/setup-plugin-api.js +2 -0
- package/dist/string-normalize-Ci6NM5DE.js +98 -0
- package/dist/target-parser-Y0prnrXD.js +245 -0
- package/package.json +15 -6
- package/api.ts +0 -56
- package/channel-plugin-api.ts +0 -1
- package/index.ts +0 -29
- package/runtime-api.ts +0 -9
- package/setup-entry.ts +0 -9
- package/setup-plugin-api.ts +0 -3
- package/src/bridge/approval/capability.ts +0 -237
- package/src/bridge/approval/handler-runtime.ts +0 -204
- package/src/bridge/bootstrap.ts +0 -135
- package/src/bridge/channel-entry.ts +0 -18
- package/src/bridge/commands/framework-context-adapter.ts +0 -60
- package/src/bridge/commands/framework-registration.ts +0 -47
- package/src/bridge/commands/from-parser.test.ts +0 -86
- package/src/bridge/commands/from-parser.ts +0 -60
- package/src/bridge/commands/result-dispatcher.ts +0 -76
- package/src/bridge/config-shared.ts +0 -132
- package/src/bridge/config.ts +0 -111
- package/src/bridge/gateway.ts +0 -174
- package/src/bridge/logger.ts +0 -31
- package/src/bridge/narrowing.ts +0 -31
- package/src/bridge/plugin-version.test.ts +0 -146
- package/src/bridge/plugin-version.ts +0 -102
- package/src/bridge/runtime.ts +0 -25
- package/src/bridge/sdk-adapter.ts +0 -131
- package/src/bridge/setup/finalize.ts +0 -144
- package/src/bridge/setup/surface.ts +0 -34
- package/src/bridge/tools/channel.ts +0 -58
- package/src/bridge/tools/index.ts +0 -15
- package/src/bridge/tools/remind.test.ts +0 -124
- package/src/bridge/tools/remind.ts +0 -91
- package/src/channel.setup.ts +0 -33
- package/src/channel.ts +0 -288
- package/src/command-auth.test.ts +0 -62
- package/src/config-schema.ts +0 -84
- package/src/config.test.ts +0 -364
- package/src/engine/access/access-control.test.ts +0 -198
- package/src/engine/access/access-control.ts +0 -226
- package/src/engine/access/index.ts +0 -16
- package/src/engine/access/resolve-policy.test.ts +0 -59
- package/src/engine/access/resolve-policy.ts +0 -57
- package/src/engine/access/sender-match.test.ts +0 -60
- package/src/engine/access/sender-match.ts +0 -55
- package/src/engine/access/types.ts +0 -53
- package/src/engine/adapter/audio.port.ts +0 -27
- package/src/engine/adapter/commands.port.ts +0 -22
- package/src/engine/adapter/history.port.ts +0 -52
- package/src/engine/adapter/index.ts +0 -139
- package/src/engine/adapter/mention-gate.port.ts +0 -50
- package/src/engine/adapter/types.ts +0 -38
- package/src/engine/api/api-client.ts +0 -212
- package/src/engine/api/media-chunked.test.ts +0 -336
- package/src/engine/api/media-chunked.ts +0 -622
- package/src/engine/api/media.ts +0 -218
- package/src/engine/api/messages.ts +0 -293
- package/src/engine/api/retry.ts +0 -217
- package/src/engine/api/routes.ts +0 -95
- package/src/engine/api/token.ts +0 -271
- package/src/engine/approval/index.test.ts +0 -22
- package/src/engine/approval/index.ts +0 -224
- package/src/engine/commands/builtin/log-helpers.ts +0 -319
- package/src/engine/commands/builtin/register-all.ts +0 -17
- package/src/engine/commands/builtin/register-approve.ts +0 -201
- package/src/engine/commands/builtin/register-basic.ts +0 -95
- package/src/engine/commands/builtin/register-clear-storage.ts +0 -187
- package/src/engine/commands/builtin/register-logs.ts +0 -20
- package/src/engine/commands/builtin/register-streaming.ts +0 -137
- package/src/engine/commands/builtin/state.ts +0 -31
- package/src/engine/commands/slash-command-auth.ts +0 -48
- package/src/engine/commands/slash-command-handler.ts +0 -146
- package/src/engine/commands/slash-commands-impl.test.ts +0 -8
- package/src/engine/commands/slash-commands-impl.ts +0 -61
- package/src/engine/commands/slash-commands.ts +0 -199
- package/src/engine/config/credential-backup.test.ts +0 -88
- package/src/engine/config/credential-backup.ts +0 -107
- package/src/engine/config/credentials.ts +0 -76
- package/src/engine/config/group.test.ts +0 -234
- package/src/engine/config/group.ts +0 -299
- package/src/engine/config/resolve.test.ts +0 -152
- package/src/engine/config/resolve.ts +0 -283
- package/src/engine/config/setup-logic.ts +0 -84
- package/src/engine/engine-import-boundary.test.ts +0 -73
- package/src/engine/gateway/codec.ts +0 -47
- package/src/engine/gateway/constants.ts +0 -117
- package/src/engine/gateway/event-dispatcher.ts +0 -177
- package/src/engine/gateway/gateway-connection.ts +0 -371
- package/src/engine/gateway/gateway.ts +0 -291
- package/src/engine/gateway/inbound-attachments.test.ts +0 -126
- package/src/engine/gateway/inbound-attachments.ts +0 -360
- package/src/engine/gateway/inbound-context.ts +0 -195
- package/src/engine/gateway/inbound-pipeline.self-echo.test.ts +0 -218
- package/src/engine/gateway/inbound-pipeline.ts +0 -235
- package/src/engine/gateway/interaction-handler.ts +0 -220
- package/src/engine/gateway/message-queue.test.ts +0 -282
- package/src/engine/gateway/message-queue.ts +0 -499
- package/src/engine/gateway/outbound-dispatch.test.ts +0 -231
- package/src/engine/gateway/outbound-dispatch.ts +0 -575
- package/src/engine/gateway/reconnect.ts +0 -199
- package/src/engine/gateway/stages/access-stage.ts +0 -132
- package/src/engine/gateway/stages/assembly-stage.ts +0 -156
- package/src/engine/gateway/stages/content-stage.test.ts +0 -77
- package/src/engine/gateway/stages/content-stage.ts +0 -77
- package/src/engine/gateway/stages/envelope-stage.test.ts +0 -152
- package/src/engine/gateway/stages/envelope-stage.ts +0 -144
- package/src/engine/gateway/stages/group-gate-stage.ts +0 -292
- package/src/engine/gateway/stages/index.ts +0 -18
- package/src/engine/gateway/stages/quote-stage.ts +0 -113
- package/src/engine/gateway/stages/refidx-stage.ts +0 -62
- package/src/engine/gateway/stages/stub-contexts.ts +0 -116
- package/src/engine/gateway/types.ts +0 -264
- package/src/engine/gateway/typing-keepalive.ts +0 -79
- package/src/engine/group/activation.test.ts +0 -114
- package/src/engine/group/activation.ts +0 -147
- package/src/engine/group/history.test.ts +0 -314
- package/src/engine/group/history.ts +0 -321
- package/src/engine/group/mention.test.ts +0 -141
- package/src/engine/group/mention.ts +0 -197
- package/src/engine/group/message-gating.test.ts +0 -188
- package/src/engine/group/message-gating.ts +0 -216
- package/src/engine/messaging/decode-media-path.ts +0 -82
- package/src/engine/messaging/media-source.ts +0 -215
- package/src/engine/messaging/media-type-detect.ts +0 -37
- package/src/engine/messaging/outbound-audio-port.ts +0 -38
- package/src/engine/messaging/outbound-deliver.ts +0 -810
- package/src/engine/messaging/outbound-media-send.ts +0 -702
- package/src/engine/messaging/outbound-reply.ts +0 -27
- package/src/engine/messaging/outbound-result-helpers.ts +0 -54
- package/src/engine/messaging/outbound-types.ts +0 -45
- package/src/engine/messaging/outbound.ts +0 -485
- package/src/engine/messaging/reply-dispatcher.ts +0 -597
- package/src/engine/messaging/reply-limiter.ts +0 -164
- package/src/engine/messaging/sender.ts +0 -729
- package/src/engine/messaging/streaming-c2c.ts +0 -1192
- package/src/engine/messaging/streaming-media-send.ts +0 -544
- package/src/engine/messaging/target-parser.ts +0 -104
- package/src/engine/ref/format-message-ref.ts +0 -142
- package/src/engine/ref/format-ref-entry.test.ts +0 -60
- package/src/engine/ref/format-ref-entry.ts +0 -27
- package/src/engine/ref/store.ts +0 -208
- package/src/engine/ref/types.ts +0 -27
- package/src/engine/session/known-users.ts +0 -137
- package/src/engine/session/session-store.ts +0 -204
- package/src/engine/tools/channel-api.ts +0 -244
- package/src/engine/tools/remind-logic.test.ts +0 -280
- package/src/engine/tools/remind-logic.ts +0 -377
- package/src/engine/types.ts +0 -313
- package/src/engine/utils/attachment-tags.test.ts +0 -186
- package/src/engine/utils/attachment-tags.ts +0 -174
- package/src/engine/utils/audio.test.ts +0 -250
- package/src/engine/utils/audio.ts +0 -585
- package/src/engine/utils/data-paths.ts +0 -38
- package/src/engine/utils/diagnostics.ts +0 -109
- package/src/engine/utils/file-utils.test.ts +0 -72
- package/src/engine/utils/file-utils.ts +0 -225
- package/src/engine/utils/format.test.ts +0 -68
- package/src/engine/utils/format.ts +0 -70
- package/src/engine/utils/image-size.test.ts +0 -158
- package/src/engine/utils/image-size.ts +0 -249
- package/src/engine/utils/log.test.ts +0 -28
- package/src/engine/utils/log.ts +0 -61
- package/src/engine/utils/media-tags.test.ts +0 -32
- package/src/engine/utils/media-tags.ts +0 -177
- package/src/engine/utils/payload.test.ts +0 -68
- package/src/engine/utils/payload.ts +0 -145
- package/src/engine/utils/platform-storage-laziness.test.ts +0 -63
- package/src/engine/utils/platform.test.ts +0 -148
- package/src/engine/utils/platform.ts +0 -343
- package/src/engine/utils/request-context.ts +0 -60
- package/src/engine/utils/string-normalize.ts +0 -91
- package/src/engine/utils/stt.test.ts +0 -104
- package/src/engine/utils/stt.ts +0 -100
- package/src/engine/utils/text-parsing.test.ts +0 -29
- package/src/engine/utils/text-parsing.ts +0 -155
- package/src/engine/utils/upload-cache.ts +0 -96
- package/src/engine/utils/voice-text.ts +0 -15
- package/src/exec-approvals.ts +0 -218
- package/src/manifest-schema.test.ts +0 -56
- package/src/qqbot-test-support.ts +0 -29
- package/src/types.ts +0 -210
- package/tsconfig.json +0 -16
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { l as ensurePlatformAdapter, u as getBridgeLogger } from "./resolve-D_06fV6-.js";
|
|
2
|
+
import { a as resolveApprovalTarget, n as buildExecApprovalText, r as buildPluginApprovalText, t as buildApprovalKeyboard } from "./approval-cg0SVahb.js";
|
|
3
|
+
import { a as resolveQQBotAccount } from "./config-D6545NkC.js";
|
|
4
|
+
import { a as resolveQQBotExecApprovalConfig, i as matchesQQBotApprovalAccount, o as shouldHandleQQBotExecApprovalRequest, r as isQQBotExecApprovalClientEnabled } from "./exec-approvals-COUsM6wZ.js";
|
|
5
|
+
import { c as getMessageApi, t as accountToCreds } from "./sender-p-B14eLG.js";
|
|
6
|
+
import { resolveApprovalRequestSessionConversation } from "openclaw/plugin-sdk/approval-native-runtime";
|
|
7
|
+
import { createChannelApprovalNativeRuntimeAdapter } from "openclaw/plugin-sdk/approval-handler-runtime";
|
|
8
|
+
//#region extensions/qqbot/src/bridge/approval/handler-runtime.ts
|
|
9
|
+
function isExecRequest(request) {
|
|
10
|
+
return "expiresAtMs" in request;
|
|
11
|
+
}
|
|
12
|
+
function resolveQQTarget(request) {
|
|
13
|
+
const sessionConversation = resolveApprovalRequestSessionConversation({
|
|
14
|
+
request,
|
|
15
|
+
channel: "qqbot",
|
|
16
|
+
bundledFallback: true
|
|
17
|
+
});
|
|
18
|
+
const target = resolveApprovalTarget(request.request.sessionKey ?? null, request.request.turnSourceTo ?? null);
|
|
19
|
+
if (target) return target;
|
|
20
|
+
if (sessionConversation?.id) return {
|
|
21
|
+
type: sessionConversation.kind === "group" ? "group" : "c2c",
|
|
22
|
+
id: sessionConversation.id
|
|
23
|
+
};
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
const qqbotApprovalNativeRuntime = createChannelApprovalNativeRuntimeAdapter({
|
|
27
|
+
eventKinds: ["exec", "plugin"],
|
|
28
|
+
availability: {
|
|
29
|
+
isConfigured: ({ cfg, accountId }) => {
|
|
30
|
+
if (resolveQQBotExecApprovalConfig({
|
|
31
|
+
cfg,
|
|
32
|
+
accountId
|
|
33
|
+
}) !== void 0) {
|
|
34
|
+
const result = isQQBotExecApprovalClientEnabled({
|
|
35
|
+
cfg,
|
|
36
|
+
accountId
|
|
37
|
+
});
|
|
38
|
+
getBridgeLogger().debug?.(`[qqbot:approval-runtime] isConfigured(profile) accountId=${accountId} → ${result}`);
|
|
39
|
+
return result;
|
|
40
|
+
}
|
|
41
|
+
const account = resolveQQBotAccount(cfg, accountId ?? void 0);
|
|
42
|
+
const result = account.enabled && account.secretSource !== "none";
|
|
43
|
+
getBridgeLogger().debug?.(`[qqbot:approval-runtime] isConfigured(fallback) accountId=${accountId} enabled=${account.enabled} secretSource=${account.secretSource} → ${result}`);
|
|
44
|
+
return result;
|
|
45
|
+
},
|
|
46
|
+
shouldHandle: ({ cfg, accountId, request }) => {
|
|
47
|
+
if (resolveQQBotExecApprovalConfig({
|
|
48
|
+
cfg,
|
|
49
|
+
accountId
|
|
50
|
+
}) !== void 0) {
|
|
51
|
+
const result = shouldHandleQQBotExecApprovalRequest({
|
|
52
|
+
cfg,
|
|
53
|
+
accountId,
|
|
54
|
+
request
|
|
55
|
+
});
|
|
56
|
+
getBridgeLogger().debug?.(`[qqbot:approval-runtime] shouldHandle(profile) accountId=${accountId} → ${result}`);
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
const target = resolveQQTarget(request);
|
|
60
|
+
if (target === null) {
|
|
61
|
+
getBridgeLogger().debug?.(`[qqbot:approval-runtime] shouldHandle(fallback) accountId=${accountId} target=null → false`);
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
const accountMatches = matchesQQBotApprovalAccount({
|
|
65
|
+
cfg,
|
|
66
|
+
accountId,
|
|
67
|
+
request
|
|
68
|
+
});
|
|
69
|
+
getBridgeLogger().debug?.(`[qqbot:approval-runtime] shouldHandle(fallback) accountId=${accountId} target=${JSON.stringify(target)} accountMatches=${accountMatches} → ${accountMatches}`);
|
|
70
|
+
return accountMatches;
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
presentation: {
|
|
74
|
+
buildPendingPayload: ({ request, view }) => {
|
|
75
|
+
const req = request;
|
|
76
|
+
const text = isExecRequest(req) ? buildExecApprovalText(req) : buildPluginApprovalText(req);
|
|
77
|
+
const keyboard = buildApprovalKeyboard(req.id, view.actions.map((action) => action.decision));
|
|
78
|
+
getBridgeLogger().debug?.(`[qqbot:approval-runtime] buildPendingPayload requestId=${req.id} kind=${isExecRequest(req) ? "exec" : "plugin"}`);
|
|
79
|
+
return {
|
|
80
|
+
text,
|
|
81
|
+
keyboard
|
|
82
|
+
};
|
|
83
|
+
},
|
|
84
|
+
buildResolvedResult: () => ({ kind: "leave" }),
|
|
85
|
+
buildExpiredResult: () => ({ kind: "leave" })
|
|
86
|
+
},
|
|
87
|
+
transport: {
|
|
88
|
+
prepareTarget: ({ request }) => {
|
|
89
|
+
const target = resolveQQTarget(request);
|
|
90
|
+
getBridgeLogger().debug?.(`[qqbot:approval-runtime] prepareTarget requestId=${request.id} target=${JSON.stringify(target)}`);
|
|
91
|
+
if (!target) return null;
|
|
92
|
+
return {
|
|
93
|
+
target,
|
|
94
|
+
dedupeKey: `${target.type}:${target.id}`
|
|
95
|
+
};
|
|
96
|
+
},
|
|
97
|
+
deliverPending: async ({ cfg, accountId, preparedTarget, pendingPayload }) => {
|
|
98
|
+
ensurePlatformAdapter();
|
|
99
|
+
const account = resolveQQBotAccount(cfg, accountId ?? void 0);
|
|
100
|
+
const creds = accountToCreds(account);
|
|
101
|
+
const messageApi = getMessageApi(account.appId);
|
|
102
|
+
let result;
|
|
103
|
+
try {
|
|
104
|
+
getBridgeLogger().debug?.(`[qqbot:approval-runtime] deliverPending accountId=${accountId} target=${preparedTarget.type}:${preparedTarget.id}`);
|
|
105
|
+
result = await messageApi.sendMessage(preparedTarget.type, preparedTarget.id, pendingPayload.text, creds, { inlineKeyboard: pendingPayload.keyboard });
|
|
106
|
+
} catch (err) {
|
|
107
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
108
|
+
throw new Error(`Failed to send approval message to ${preparedTarget.type}:${preparedTarget.id}: ${msg}`, { cause: err });
|
|
109
|
+
}
|
|
110
|
+
getBridgeLogger().debug?.(`[qqbot:approval-runtime] deliverPending success accountId=${accountId} messageId=${result.id ?? ""}`);
|
|
111
|
+
return {
|
|
112
|
+
messageId: result.id,
|
|
113
|
+
targetType: preparedTarget.type,
|
|
114
|
+
targetId: preparedTarget.id
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
//#endregion
|
|
120
|
+
export { qqbotApprovalNativeRuntime };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { defineBundledChannelEntry, loadBundledEntryExportSync } from "openclaw/plugin-sdk/channel-entry-contract";
|
|
2
|
+
//#region extensions/qqbot/index.ts
|
|
3
|
+
function registerQQBotFull(api) {
|
|
4
|
+
loadBundledEntryExportSync(import.meta.url, {
|
|
5
|
+
specifier: "./api.js",
|
|
6
|
+
exportName: "registerQQBotFull"
|
|
7
|
+
})(api);
|
|
8
|
+
}
|
|
9
|
+
var qqbot_default = defineBundledChannelEntry({
|
|
10
|
+
id: "qqbot",
|
|
11
|
+
name: "QQ Bot",
|
|
12
|
+
description: "QQ Bot channel plugin",
|
|
13
|
+
importMetaUrl: import.meta.url,
|
|
14
|
+
plugin: {
|
|
15
|
+
specifier: "./channel-plugin-api.js",
|
|
16
|
+
exportName: "qqbotPlugin"
|
|
17
|
+
},
|
|
18
|
+
secrets: {
|
|
19
|
+
specifier: "./secret-contract-api.js",
|
|
20
|
+
exportName: "channelSecrets"
|
|
21
|
+
},
|
|
22
|
+
runtime: {
|
|
23
|
+
specifier: "./runtime-api.js",
|
|
24
|
+
exportName: "setQQBotRuntime"
|
|
25
|
+
},
|
|
26
|
+
registerFull: registerQQBotFull
|
|
27
|
+
});
|
|
28
|
+
//#endregion
|
|
29
|
+
export { qqbot_default as default };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
//#region extensions/qqbot/src/bridge/narrowing.ts
|
|
2
|
+
/**
|
|
3
|
+
* Map resolved plugin account to the engine gateway account shape (single assertion on nested config).
|
|
4
|
+
*/
|
|
5
|
+
function toGatewayAccount(account) {
|
|
6
|
+
return {
|
|
7
|
+
accountId: account.accountId,
|
|
8
|
+
appId: account.appId,
|
|
9
|
+
clientSecret: account.clientSecret,
|
|
10
|
+
markdownSupport: account.markdownSupport,
|
|
11
|
+
systemPrompt: account.systemPrompt,
|
|
12
|
+
config: account.config
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Persist OpenClaw config through the injected plugin runtime (typed entry point).
|
|
17
|
+
*/
|
|
18
|
+
async function writeOpenClawConfigThroughRuntime(runtime, cfg) {
|
|
19
|
+
await runtime.config.replaceConfigFile({
|
|
20
|
+
nextConfig: cfg,
|
|
21
|
+
afterWrite: { mode: "auto" }
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
export { writeOpenClawConfigThroughRuntime as n, toGatewayAccount as t };
|