@qwen-code/channel-qqbot 0.26.4 → 0.26.5
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/QQChannel.d.ts +64 -2
- package/dist/QQChannel.d.ts.map +1 -1
- package/dist/QQChannel.js +250 -3
- package/dist/QQChannel.js.map +1 -1
- package/dist/api.d.ts +9 -0
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +12 -3
- package/dist/api.js.map +1 -1
- package/dist/moderation-tools.d.ts +52 -0
- package/dist/moderation-tools.d.ts.map +1 -0
- package/dist/moderation-tools.js +957 -0
- package/dist/moderation-tools.js.map +1 -0
- package/dist/types.d.ts +19 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/api.d.ts
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* - Access token issuance
|
|
6
6
|
* - WebSocket Gateway URL resolution
|
|
7
7
|
* - Message sending (text / markdown)
|
|
8
|
+
* - Message recall
|
|
8
9
|
*/
|
|
9
10
|
export interface TokenResponse {
|
|
10
11
|
accessToken: string;
|
|
@@ -39,4 +40,12 @@ export declare function getApiBase(sandbox: boolean): string;
|
|
|
39
40
|
* Resolves on success; caller should handle errors and msg_seq tracking.
|
|
40
41
|
*/
|
|
41
42
|
export declare function sendQQMessage(base: string, path: string, accessToken: string, body: Record<string, unknown>): Promise<Response>;
|
|
43
|
+
/** HTTP methods the QQ Bot REST API uses for group management. */
|
|
44
|
+
export type QQApiMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
|
|
45
|
+
/**
|
|
46
|
+
* Call a QQ Bot REST endpoint. Used for the group-management surface, where
|
|
47
|
+
* one thin wrapper per endpoint would only restate the path: callers own the
|
|
48
|
+
* path and interpret the status code and error body themselves.
|
|
49
|
+
*/
|
|
50
|
+
export declare function requestQQApi(base: string, method: QQApiMethod, path: string, accessToken: string, body?: Record<string, unknown>): Promise<Response>;
|
|
42
51
|
//# sourceMappingURL=api.d.ts.map
|
package/dist/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,aAAa,CAAC,CAyBxB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAwBtD;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,MAAM,CAAC,CAkBjB;AAED,wDAAwD;AACxD,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAEnD;AAED;;;GAGG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,QAAQ,CAAC,CAEnB;AAED,kEAAkE;AAClE,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEtE;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,QAAQ,CAAC,CAUnB"}
|
package/dist/api.js
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* - Access token issuance
|
|
6
6
|
* - WebSocket Gateway URL resolution
|
|
7
7
|
* - Message sending (text / markdown)
|
|
8
|
+
* - Message recall
|
|
8
9
|
*/
|
|
9
10
|
const TOKEN_URL = 'https://bots.qq.com/app/getAppAccessToken';
|
|
10
11
|
const API_HOST = 'https://api.sgroup.qq.com';
|
|
@@ -98,13 +99,21 @@ export function getApiBase(sandbox) {
|
|
|
98
99
|
* Resolves on success; caller should handle errors and msg_seq tracking.
|
|
99
100
|
*/
|
|
100
101
|
export async function sendQQMessage(base, path, accessToken, body) {
|
|
102
|
+
return requestQQApi(base, 'POST', path, accessToken, body);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Call a QQ Bot REST endpoint. Used for the group-management surface, where
|
|
106
|
+
* one thin wrapper per endpoint would only restate the path: callers own the
|
|
107
|
+
* path and interpret the status code and error body themselves.
|
|
108
|
+
*/
|
|
109
|
+
export async function requestQQApi(base, method, path, accessToken, body) {
|
|
101
110
|
return fetch(`${base}${path}`, {
|
|
102
|
-
method
|
|
111
|
+
method,
|
|
103
112
|
headers: {
|
|
104
|
-
'Content-Type': 'application/json',
|
|
113
|
+
...(body === undefined ? {} : { 'Content-Type': 'application/json' }),
|
|
105
114
|
Authorization: `QQBot ${accessToken}`,
|
|
106
115
|
},
|
|
107
|
-
body: JSON.stringify(body),
|
|
116
|
+
...(body === undefined ? {} : { body: JSON.stringify(body) }),
|
|
108
117
|
signal: AbortSignal.timeout(FETCH_TIMEOUT),
|
|
109
118
|
});
|
|
110
119
|
}
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QQ group-management tools exposed to the agent as client MCP tools.
|
|
3
|
+
*
|
|
4
|
+
* The model calls these tools autonomously during a turn; the adapter owns the
|
|
5
|
+
* chat binding and the credentials, this module owns the schemas, argument
|
|
6
|
+
* validation, and the mapping from QQ error codes to text the model can act
|
|
7
|
+
* on. Tools marked `reserved` call an endpoint the open platform currently
|
|
8
|
+
* gates behind an invite-only allowlist: they are wired and callable, and
|
|
9
|
+
* surface the platform's refusal instead of a silent no-op.
|
|
10
|
+
*
|
|
11
|
+
* @see https://bot.q.qq.com/wiki/develop/api-v2/server-inter/group/manage/
|
|
12
|
+
*/
|
|
13
|
+
import type { ChannelToolDefinition } from '@qwen-code/channel-base';
|
|
14
|
+
import type { QQApiMethod } from './api.js';
|
|
15
|
+
export type ModerationApiResult = {
|
|
16
|
+
ok: true;
|
|
17
|
+
status: number;
|
|
18
|
+
data: unknown;
|
|
19
|
+
} | {
|
|
20
|
+
ok: false;
|
|
21
|
+
status: number;
|
|
22
|
+
code?: number;
|
|
23
|
+
message: string;
|
|
24
|
+
};
|
|
25
|
+
export interface ModerationChat {
|
|
26
|
+
chatId: string;
|
|
27
|
+
isGroup: boolean;
|
|
28
|
+
}
|
|
29
|
+
export interface ModerationToolDeps {
|
|
30
|
+
/**
|
|
31
|
+
* Chat the turn in progress is about. The channel resolves this from the
|
|
32
|
+
* current turn's envelope, not from the session's routed target: one session
|
|
33
|
+
* can serve many chats under a shared `sessionScope`.
|
|
34
|
+
*/
|
|
35
|
+
resolveChat(sessionId: string): ModerationChat | undefined;
|
|
36
|
+
/** True when the channel is configured not to resolve targets by member. */
|
|
37
|
+
memberRecallDisabled: boolean;
|
|
38
|
+
/** Member whose turn is in progress, when the turn came from a member. */
|
|
39
|
+
currentSenderId(sessionId: string): string | undefined;
|
|
40
|
+
/** Newest still-tracked message from a member in the chat. */
|
|
41
|
+
recentMemberMessage(chatId: string, senderId: string): string | undefined;
|
|
42
|
+
/** Forget a message that was just recalled, so a later call resolves the previous one. */
|
|
43
|
+
dropRecentMessage(chatId: string, messageId: string): void;
|
|
44
|
+
request(input: {
|
|
45
|
+
method: QQApiMethod;
|
|
46
|
+
path: string;
|
|
47
|
+
body?: Record<string, unknown>;
|
|
48
|
+
}): Promise<ModerationApiResult>;
|
|
49
|
+
log(message: string): void;
|
|
50
|
+
}
|
|
51
|
+
export declare function buildModerationTools(deps: ModerationToolDeps): ChannelToolDefinition[];
|
|
52
|
+
//# sourceMappingURL=moderation-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"moderation-tools.d.ts","sourceRoot":"","sources":["../src/moderation-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAEV,qBAAqB,EACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,MAAM,mBAAmB,GAC3B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC3C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAElE,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAAC;IAC3D,4EAA4E;IAC5E,oBAAoB,EAAE,OAAO,CAAC;IAC9B,0EAA0E;IAC1E,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACvD,8DAA8D;IAC9D,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAC1E,0FAA0F;IAC1F,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3D,OAAO,CAAC,KAAK,EAAE;QACb,MAAM,EAAE,WAAW,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAChC,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACjC,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AA0vBD,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,kBAAkB,GACvB,qBAAqB,EAAE,CAmFzB"}
|