@qwen-code/channel-base 0.21.7 → 0.21.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/README.md +23 -18
- package/dist/ChannelBase.d.ts +17 -3
- package/dist/ChannelBase.d.ts.map +1 -1
- package/dist/ChannelBase.js +111 -14
- package/dist/ChannelBase.js.map +1 -1
- package/dist/GroupGate.d.ts +19 -7
- package/dist/GroupGate.d.ts.map +1 -1
- package/dist/GroupGate.js +29 -6
- package/dist/GroupGate.js.map +1 -1
- package/dist/PairingStore.d.ts +25 -4
- package/dist/PairingStore.d.ts.map +1 -1
- package/dist/PairingStore.js +106 -16
- package/dist/PairingStore.js.map +1 -1
- package/dist/SenderGate.d.ts +3 -2
- package/dist/SenderGate.d.ts.map +1 -1
- package/dist/SenderGate.js +5 -2
- package/dist/SenderGate.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +63 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -120,7 +120,7 @@ Everything between `handleInbound()` and `sendMessage()` is handled by the base
|
|
|
120
120
|
| `ChannelPlugin` | Plugin factory interface (what you export) |
|
|
121
121
|
| `Envelope` | Normalized inbound message format |
|
|
122
122
|
| `SenderPolicy` | `'allowlist' \| 'pairing' \| 'open'` |
|
|
123
|
-
| `GroupPolicy` | `'disabled' \| 'allowlist' \| 'open'`
|
|
123
|
+
| `GroupPolicy` | `'disabled' \| 'allowlist' \| 'pairing' \| 'open'` |
|
|
124
124
|
| `SessionScope` | `'user' \| 'thread' \| 'single'` |
|
|
125
125
|
| `GroupConfig` | Per-group settings (e.g. `requireMention`) |
|
|
126
126
|
| `SessionTarget` | Maps a session back to its channel/sender/chat |
|
|
@@ -263,9 +263,9 @@ constructor(bridge: ChannelAgentBridge, defaultCwd: string, scope?: SessionScope
|
|
|
263
263
|
constructor(policy: SenderPolicy, allowedUsers?: string[], pairingStore?: PairingStore)
|
|
264
264
|
```
|
|
265
265
|
|
|
266
|
-
| Method | Description
|
|
267
|
-
| ------------------------------ |
|
|
268
|
-
| `check(senderId, senderName?)` | Returns `{ allowed: boolean,
|
|
266
|
+
| Method | Description |
|
|
267
|
+
| ------------------------------ | -------------------------------------------------------------------- |
|
|
268
|
+
| `check(senderId, senderName?)` | Returns `{ allowed: boolean, pairing?: CreatePairingRequestResult }` |
|
|
269
269
|
|
|
270
270
|
**Policy behavior:**
|
|
271
271
|
|
|
@@ -278,12 +278,12 @@ constructor(policy: SenderPolicy, allowedUsers?: string[], pairingStore?: Pairin
|
|
|
278
278
|
### GroupGate
|
|
279
279
|
|
|
280
280
|
```typescript
|
|
281
|
-
constructor(policy?: GroupPolicy, groups?: Record<string, GroupConfig
|
|
281
|
+
constructor(policy?: GroupPolicy, groups?: Record<string, GroupConfig>, pairingStore?: PairingStore)
|
|
282
282
|
```
|
|
283
283
|
|
|
284
|
-
| Method
|
|
285
|
-
|
|
|
286
|
-
| `check(envelope)` | Returns `
|
|
284
|
+
| Method | Description |
|
|
285
|
+
| --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
286
|
+
| `check(envelope, options?)` | Returns the group policy decision and an optional pairing result. Under `pairing`, a mention/reply from an unapproved group creates (or reuses) a pending pairing request; pass `{ createPairingRequest: false }` for read-only probes |
|
|
287
287
|
|
|
288
288
|
**Policy behavior:**
|
|
289
289
|
|
|
@@ -291,6 +291,7 @@ constructor(policy?: GroupPolicy, groups?: Record<string, GroupConfig>)
|
|
|
291
291
|
| ----------- | ---------------------------------------- |
|
|
292
292
|
| `disabled` | All group messages rejected |
|
|
293
293
|
| `allowlist` | Only groups listed in config are allowed |
|
|
294
|
+
| `pairing` | A group must be approved once by chat ID |
|
|
294
295
|
| `open` | All groups allowed |
|
|
295
296
|
|
|
296
297
|
When `requireMention` is `true` (default), group messages are only processed if the bot is @mentioned or the message is a reply to the bot.
|
|
@@ -301,16 +302,20 @@ When `requireMention` is `true` (default), group messages are only processed if
|
|
|
301
302
|
constructor(channelName: string, workspaceCwd?: string)
|
|
302
303
|
```
|
|
303
304
|
|
|
304
|
-
Persists pairing state to `{channelName}-pairing.json` and `{channelName}-
|
|
305
|
-
|
|
306
|
-
| Method | Description
|
|
307
|
-
| ------------------------------------- |
|
|
308
|
-
| `createRequest(senderId, senderName)` | Generate an 8-char pairing code (or return existing). Returns `
|
|
309
|
-
| `
|
|
310
|
-
| `
|
|
311
|
-
| `
|
|
312
|
-
| `
|
|
313
|
-
| `
|
|
305
|
+
Persists pending pairing state to `{channelName}-pairing.json`, user approvals to `{channelName}-allowlist.json`, and group approvals to `{channelName}-groups.json`. With `workspaceCwd` (what `ChannelBase` passes — the channel's `cwd`), the files live under the workspace-scoped directory `~/.qwen/channels/<workspace-scope>/` so two workspaces reusing the same channel name never share pairing requests or allowlist entries. Without it, the legacy global `~/.qwen/channels/` layout is used. The first time a given (workspace, channel) pair is constructed, existing legacy global files are copied in once (grandfathering) so already-approved senders stay approved; a per-channel `<channel>.migrated` sentinel in the scope directory marks that decision, after which legacy files are never consulted again for that channel. Channel names are URI-encoded in file names, so a name containing path separators cannot escape the scope directory. `revoke(senderId)` removes the sender only from this store's allowlist and never mutates the legacy global baseline.
|
|
306
|
+
|
|
307
|
+
| Method | Description |
|
|
308
|
+
| ------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
309
|
+
| `createRequest(senderId, senderName)` | Generate an 8-char pairing code (or return the existing one). Returns `{ rejected: 'sender_pending' }` if the sender already holds a request, or `{ rejected: 'cap_reached' }` if 3 requests are already pending. |
|
|
310
|
+
| `createGroupRequest(...)` | Generate a request keyed by stable group ID and record its initiating sender. |
|
|
311
|
+
| `approve(code)` | Approve a user or group request and update its corresponding allowlist. |
|
|
312
|
+
| `isApproved(senderId)` | Check if sender is in the approved allowlist |
|
|
313
|
+
| `isGroupApproved(groupId)` | Check if a group is approved |
|
|
314
|
+
| `listPending()` | Get active (non-expired) pending requests |
|
|
315
|
+
| `getAllowlist()` | Get approved sender IDs |
|
|
316
|
+
| `getGroupAllowlist()` | Get approved group IDs |
|
|
317
|
+
| `revoke(senderId)` | Remove an approved sender. Returns whether the sender was present. |
|
|
318
|
+
| `revokeGroup(groupId)` | Remove an approved group. Returns whether the group was present. |
|
|
314
319
|
|
|
315
320
|
## Envelope
|
|
316
321
|
|
package/dist/ChannelBase.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import type { ChannelConfig, ChannelMemoryCallbacks, ChannelMemoryIntentClassifier, ChannelOutputSegmentContext, ChannelOutputSegmentEndReason, ChannelProactiveTarget, ChannelRuntimeIdentity, ChannelRuntimeMemoryScope, ChannelTaskLifecycleEvent, ChannelUserInputRequestContext, Envelope, ObservedChannelContactObservation, SessionTarget, UserInputPresentationResult } from './types.js';
|
|
1
|
+
import type { ChannelConfig, ChannelMemoryCallbacks, ChannelMemoryIntentClassifier, ChannelOutputSegmentContext, ChannelOutputSegmentEndReason, ChannelProactiveTarget, ChannelRuntimeIdentity, ChannelRuntimeMemoryScope, ChannelTaskLifecycleEvent, ChannelUserInputRequestContext, Envelope, ObservedChannelContactGraph, ObservedChannelContactObservation, SessionTarget, UserInputPresentationResult } from './types.js';
|
|
2
2
|
import { GroupGate } from './GroupGate.js';
|
|
3
3
|
import { DmGate } from './DmGate.js';
|
|
4
4
|
import { SenderGate } from './SenderGate.js';
|
|
5
|
+
import type { CreatePairingRequestResult } from './PairingStore.js';
|
|
5
6
|
import { SessionRouter } from './SessionRouter.js';
|
|
6
7
|
import type { ChannelAgentBridge, PermissionRequestEvent, PermissionResolvedEvent, ToolCallEvent } from './ChannelAgentBridge.js';
|
|
7
8
|
import type { ChannelLoop, ChannelLoopInput } from './ChannelLoopStore.js';
|
|
@@ -42,6 +43,8 @@ export interface ChannelBaseOptions {
|
|
|
42
43
|
loopController?: ChannelLoopController;
|
|
43
44
|
observedContacts?: {
|
|
44
45
|
observe(channelName: string, observation: ObservedChannelContactObservation): void | Promise<void>;
|
|
46
|
+
/** Read persisted observations so adapters can hydrate label caches. */
|
|
47
|
+
list?(): ObservedChannelContactGraph;
|
|
45
48
|
};
|
|
46
49
|
}
|
|
47
50
|
export interface ChannelLoopController {
|
|
@@ -81,6 +84,7 @@ export declare abstract class ChannelBase {
|
|
|
81
84
|
private readonly memoryIntentClassifier?;
|
|
82
85
|
private readonly channelMemoryRecallObserver?;
|
|
83
86
|
private groupHistory;
|
|
87
|
+
private readonly groupPairingNotified;
|
|
84
88
|
private readonly loopController?;
|
|
85
89
|
private readonly observedContacts?;
|
|
86
90
|
private readonly observedContactEnvelopes;
|
|
@@ -394,7 +398,14 @@ export declare abstract class ChannelBase {
|
|
|
394
398
|
protected logPreflightRejected(reason: string): void;
|
|
395
399
|
protected logDebugPayload(platform: string, payload: unknown): void;
|
|
396
400
|
handleInbound(envelope: Envelope): Promise<void>;
|
|
397
|
-
|
|
401
|
+
protected recordObservedContact(envelope: Envelope): Promise<void>;
|
|
402
|
+
protected onObservedContact(_envelope: Envelope): void;
|
|
403
|
+
/**
|
|
404
|
+
* Observations persisted for this channel, when a read path is configured.
|
|
405
|
+
* Adapters hydrate label caches from it after a restart so known labels are
|
|
406
|
+
* not reverted to raw IDs by the next initial write.
|
|
407
|
+
*/
|
|
408
|
+
protected persistedObservedContacts(): ObservedChannelContactGraph | undefined;
|
|
398
409
|
protected markPreflighted(envelope: Envelope): void;
|
|
399
410
|
/** Wait until the currently active bridge recovery, if any, has completed. */
|
|
400
411
|
private waitForBridgeRecovery;
|
|
@@ -406,7 +417,10 @@ export declare abstract class ChannelBase {
|
|
|
406
417
|
* already preflighted, such as during collect-buffer drain.
|
|
407
418
|
*/
|
|
408
419
|
protected processInbound(envelope: Envelope): Promise<void>;
|
|
409
|
-
|
|
420
|
+
private pairingRejectionMessage;
|
|
421
|
+
private groupPairingRejectionMessage;
|
|
422
|
+
protected onPairingRequired(chatId: string, result: CreatePairingRequestResult, threadId?: string): Promise<void>;
|
|
423
|
+
protected onGroupPairingRequired(chatId: string, result: CreatePairingRequestResult, threadId?: string): Promise<void>;
|
|
410
424
|
}
|
|
411
425
|
export {};
|
|
412
426
|
//# sourceMappingURL=ChannelBase.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChannelBase.d.ts","sourceRoot":"","sources":["../src/ChannelBase.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ChannelBase.d.ts","sourceRoot":"","sources":["../src/ChannelBase.ts"],"names":[],"mappings":"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"}
|
package/dist/ChannelBase.js
CHANGED
|
@@ -114,6 +114,11 @@ export class ChannelBase {
|
|
|
114
114
|
memoryIntentClassifier;
|
|
115
115
|
channelMemoryRecallObserver;
|
|
116
116
|
groupHistory;
|
|
117
|
+
// Tracks the pairing code already announced per group so repeated triggers
|
|
118
|
+
// of the same pending request (extra mentions, parallel notification lanes)
|
|
119
|
+
// post the public notification once. In-memory by design: a restart can
|
|
120
|
+
// re-post once per still-pending request, but never per trigger.
|
|
121
|
+
groupPairingNotified = new Map();
|
|
117
122
|
loopController;
|
|
118
123
|
observedContacts;
|
|
119
124
|
observedContactEnvelopes = new WeakSet();
|
|
@@ -454,13 +459,13 @@ export class ChannelBase {
|
|
|
454
459
|
this.loopController = options?.loopController;
|
|
455
460
|
this.observedContacts = options?.observedContacts;
|
|
456
461
|
this.bridgeRecovery = options?.bridgeRecovery;
|
|
457
|
-
this.groupGate = new GroupGate(config.groupPolicy, config.groups);
|
|
458
|
-
this.dmGate = new DmGate(config.dmPolicy);
|
|
459
462
|
// Scoped by the channel's workspace cwd: two workspaces reusing the same
|
|
460
463
|
// channel name must not share pairing/allowlist state (#7017).
|
|
461
|
-
const pairingStore = config.senderPolicy === 'pairing'
|
|
464
|
+
const pairingStore = config.senderPolicy === 'pairing' || config.groupPolicy === 'pairing'
|
|
462
465
|
? new PairingStore(name, config.cwd)
|
|
463
466
|
: undefined;
|
|
467
|
+
this.groupGate = new GroupGate(config.groupPolicy, config.groups, pairingStore);
|
|
468
|
+
this.dmGate = new DmGate(config.dmPolicy);
|
|
464
469
|
this.gate = new SenderGate(config.senderPolicy, config.allowedUsers, pairingStore);
|
|
465
470
|
this.router =
|
|
466
471
|
options?.router ||
|
|
@@ -879,6 +884,7 @@ export class ChannelBase {
|
|
|
879
884
|
text: coalesced,
|
|
880
885
|
alreadyPrefixed: true,
|
|
881
886
|
referencedText: undefined,
|
|
887
|
+
mentionedMemberIds: undefined,
|
|
882
888
|
attachments: undefined,
|
|
883
889
|
metadata: undefined,
|
|
884
890
|
imageBase64: undefined,
|
|
@@ -2438,9 +2444,11 @@ export class ChannelBase {
|
|
|
2438
2444
|
isMentioned: true,
|
|
2439
2445
|
isReplyToBot: true,
|
|
2440
2446
|
};
|
|
2441
|
-
return (this.groupGate.check(envelope).allowed &&
|
|
2447
|
+
return (this.groupGate.check(envelope, { createPairingRequest: false }).allowed &&
|
|
2442
2448
|
this.dmGate.check(envelope).allowed &&
|
|
2443
|
-
|
|
2449
|
+
(normalizedTarget.isGroup && this.config.groupPolicy === 'pairing'
|
|
2450
|
+
? true
|
|
2451
|
+
: this.gate.isAllowed(normalizedTarget.senderId)) &&
|
|
2444
2452
|
this.isAuthorizedForSharedSession(envelope));
|
|
2445
2453
|
}
|
|
2446
2454
|
/** Check if a message text matches a registered local command. */
|
|
@@ -3219,7 +3227,8 @@ export class ChannelBase {
|
|
|
3219
3227
|
return;
|
|
3220
3228
|
}
|
|
3221
3229
|
const senderId = truncateGroupHistoryField(envelope.senderId);
|
|
3222
|
-
if (
|
|
3230
|
+
if (this.config.groupPolicy !== 'pairing' &&
|
|
3231
|
+
!this.gate.isAllowed(senderId)) {
|
|
3223
3232
|
return;
|
|
3224
3233
|
}
|
|
3225
3234
|
const entry = {
|
|
@@ -3244,7 +3253,12 @@ export class ChannelBase {
|
|
|
3244
3253
|
return [];
|
|
3245
3254
|
}
|
|
3246
3255
|
try {
|
|
3247
|
-
|
|
3256
|
+
const entries = this.groupHistory.drain(this.groupHistoryKey(envelope), limit);
|
|
3257
|
+
if (this.config.groupPolicy === 'pairing' &&
|
|
3258
|
+
!this.groupGate.isGroupApproved(envelope.chatId)) {
|
|
3259
|
+
return [];
|
|
3260
|
+
}
|
|
3261
|
+
return entries;
|
|
3248
3262
|
}
|
|
3249
3263
|
catch (err) {
|
|
3250
3264
|
process.stderr.write(`[${this.name}] failed to drain group history for chat ${sanitizeLogText(envelope.chatId, 64)}: ${err instanceof Error ? err.message : err}\n`);
|
|
@@ -3271,7 +3285,9 @@ export class ChannelBase {
|
|
|
3271
3285
|
if (entries.length === 0) {
|
|
3272
3286
|
return promptText;
|
|
3273
3287
|
}
|
|
3274
|
-
const lines =
|
|
3288
|
+
const lines = this.config.groupPolicy === 'pairing'
|
|
3289
|
+
? entries
|
|
3290
|
+
: entries.filter((entry) => this.gate.isAllowed(entry.senderId));
|
|
3275
3291
|
if (lines.length === 0) {
|
|
3276
3292
|
return promptText;
|
|
3277
3293
|
}
|
|
@@ -3285,10 +3301,22 @@ export class ChannelBase {
|
|
|
3285
3301
|
preflightInbound(envelope) {
|
|
3286
3302
|
const groupResult = this.groupGate.check(envelope);
|
|
3287
3303
|
if (!groupResult.allowed) {
|
|
3304
|
+
if (groupResult.pairing !== undefined) {
|
|
3305
|
+
this.logPreflightRejected('group_pairing_required');
|
|
3306
|
+
return this.onGroupPairingRequired(envelope.chatId, groupResult.pairing, envelope.threadId)
|
|
3307
|
+
.then(() => false)
|
|
3308
|
+
.catch((err) => {
|
|
3309
|
+
process.stderr.write(`[Channel:${this.name}] group pairing notification failed: ${sanitizeLogText(err instanceof Error ? err.message : String(err), 200)}\n`);
|
|
3310
|
+
return false;
|
|
3311
|
+
});
|
|
3312
|
+
}
|
|
3288
3313
|
if (groupResult.reason === 'mention_required') {
|
|
3289
3314
|
// This is the expected high-frequency drop path for group bots.
|
|
3290
3315
|
this.recordPendingGroupHistory(envelope);
|
|
3291
3316
|
}
|
|
3317
|
+
else if (groupResult.reason === 'pairing_trigger_required') {
|
|
3318
|
+
return false;
|
|
3319
|
+
}
|
|
3292
3320
|
else {
|
|
3293
3321
|
this.logPreflightRejected(`group_${groupResult.reason ?? 'denied'}`);
|
|
3294
3322
|
}
|
|
@@ -3299,11 +3327,15 @@ export class ChannelBase {
|
|
|
3299
3327
|
this.logPreflightRejected(`dm_${dmResult.reason ?? 'denied'}`);
|
|
3300
3328
|
return false;
|
|
3301
3329
|
}
|
|
3330
|
+
if (envelope.isGroup && this.config.groupPolicy === 'pairing') {
|
|
3331
|
+
this.markPreflighted(envelope);
|
|
3332
|
+
return true;
|
|
3333
|
+
}
|
|
3302
3334
|
const result = this.gate.check(envelope.senderId, envelope.senderName);
|
|
3303
3335
|
if (!result.allowed) {
|
|
3304
|
-
if (result.
|
|
3336
|
+
if (result.pairing !== undefined) {
|
|
3305
3337
|
this.logPreflightRejected('sender_pairing_required');
|
|
3306
|
-
return this.onPairingRequired(envelope.chatId, result.
|
|
3338
|
+
return this.onPairingRequired(envelope.chatId, result.pairing, envelope.threadId)
|
|
3307
3339
|
.then(() => false)
|
|
3308
3340
|
.catch((err) => {
|
|
3309
3341
|
process.stderr.write(`[Channel:${this.name}] pairing notification failed: ${sanitizeLogText(err instanceof Error ? err.message : String(err), 200)}\n`);
|
|
@@ -3374,6 +3406,27 @@ export class ChannelBase {
|
|
|
3374
3406
|
process.stderr.write(`[Channel:${sanitizeLogText(this.name, 80)}] observed contact persistence failed.\n`);
|
|
3375
3407
|
}
|
|
3376
3408
|
}
|
|
3409
|
+
onObservedContact(_envelope) { }
|
|
3410
|
+
/**
|
|
3411
|
+
* Observations persisted for this channel, when a read path is configured.
|
|
3412
|
+
* Adapters hydrate label caches from it after a restart so known labels are
|
|
3413
|
+
* not reverted to raw IDs by the next initial write.
|
|
3414
|
+
*/
|
|
3415
|
+
persistedObservedContacts() {
|
|
3416
|
+
const list = this.observedContacts?.list;
|
|
3417
|
+
if (!list)
|
|
3418
|
+
return undefined;
|
|
3419
|
+
try {
|
|
3420
|
+
const graph = list();
|
|
3421
|
+
return {
|
|
3422
|
+
users: graph.users.filter((user) => user.channelName === this.name),
|
|
3423
|
+
groups: graph.groups.filter((group) => group.channelName === this.name),
|
|
3424
|
+
};
|
|
3425
|
+
}
|
|
3426
|
+
catch {
|
|
3427
|
+
return undefined;
|
|
3428
|
+
}
|
|
3429
|
+
}
|
|
3377
3430
|
markPreflighted(envelope) {
|
|
3378
3431
|
this.preflightedEnvelopes.add(envelope);
|
|
3379
3432
|
}
|
|
@@ -3403,6 +3456,7 @@ export class ChannelBase {
|
|
|
3403
3456
|
if (this.observedContacts && !this.observedContactEnvelopes.has(envelope)) {
|
|
3404
3457
|
this.observedContactEnvelopes.add(envelope);
|
|
3405
3458
|
await this.recordObservedContact(envelope);
|
|
3459
|
+
this.onObservedContact(envelope);
|
|
3406
3460
|
}
|
|
3407
3461
|
let memoryIntent = parseChannelMemoryIntent(envelope.text);
|
|
3408
3462
|
let memoryIntentFromClassifier = false;
|
|
@@ -3525,6 +3579,24 @@ export class ChannelBase {
|
|
|
3525
3579
|
!recognizedSlashCommand) {
|
|
3526
3580
|
const who = sanitizeSenderName(envelope.senderName || envelope.senderId || 'unknown');
|
|
3527
3581
|
promptText = `[${who}] ${sanitizePromptText(promptText)}`;
|
|
3582
|
+
// Render the non-bot mention marker AFTER sanitization (like the
|
|
3583
|
+
// [Replying to:] wrapper below). Inside `text` it would pass through
|
|
3584
|
+
// sanitizePromptText, which strips brackets only on content <=64 chars
|
|
3585
|
+
// and folds its newline — so with IDs included, the delivered format
|
|
3586
|
+
// would depend on the ID list's length. IDs are platform-controlled, so
|
|
3587
|
+
// neutralize them like quoted text before they bypass the sanitizer here.
|
|
3588
|
+
if (envelope.mentionedMemberIds?.length) {
|
|
3589
|
+
const ids = envelope.mentionedMemberIds
|
|
3590
|
+
.map((id) => sanitizeQuotedText(id, 64).trim())
|
|
3591
|
+
// A junk-only ID over the cap truncates to a bare '…' (not
|
|
3592
|
+
// whitespace), which would advertise a phantom member — drop it
|
|
3593
|
+
// like an empty ID.
|
|
3594
|
+
.filter((id) => id.length > 0 && id !== '…');
|
|
3595
|
+
if (ids.length > 0) {
|
|
3596
|
+
const memberLabel = ids.length === 1 ? 'member' : 'members';
|
|
3597
|
+
promptText = `[Mentioned ${ids.length} other group ${memberLabel}: ${ids.join(', ')}]\n\n${promptText}`;
|
|
3598
|
+
}
|
|
3599
|
+
}
|
|
3528
3600
|
}
|
|
3529
3601
|
if (envelope.referencedText) {
|
|
3530
3602
|
// Quoted text is attacker-controlled. sanitizeQuotedText strips C0/DEL
|
|
@@ -4009,6 +4081,7 @@ export class ChannelBase {
|
|
|
4009
4081
|
alreadyPrefixed: true,
|
|
4010
4082
|
// Clear attachments/references — already resolved in original text
|
|
4011
4083
|
referencedText: undefined,
|
|
4084
|
+
mentionedMemberIds: undefined,
|
|
4012
4085
|
attachments: undefined,
|
|
4013
4086
|
metadata: undefined,
|
|
4014
4087
|
imageBase64: undefined,
|
|
@@ -4026,12 +4099,36 @@ export class ChannelBase {
|
|
|
4026
4099
|
this.sessionQueues.set(sessionId, current.catch(() => { }));
|
|
4027
4100
|
await current;
|
|
4028
4101
|
}
|
|
4029
|
-
|
|
4030
|
-
|
|
4031
|
-
|
|
4102
|
+
pairingRejectionMessage(rejected) {
|
|
4103
|
+
return rejected === 'sender_pending'
|
|
4104
|
+
? 'You already have a pending pairing request. It must be approved or expire before another can be created.'
|
|
4105
|
+
: 'Too many pending pairing requests. Please try again later.';
|
|
4106
|
+
}
|
|
4107
|
+
groupPairingRejectionMessage(rejected) {
|
|
4108
|
+
// Group variant: the DM wording would publicly attribute the mentioning
|
|
4109
|
+
// member's unrelated pending request to the whole group.
|
|
4110
|
+
return rejected === 'sender_pending'
|
|
4111
|
+
? 'A pairing request cannot be created right now. Another member can mention the bot to start group approval, or try again later.'
|
|
4112
|
+
: 'Too many pending pairing requests. Please try again later.';
|
|
4113
|
+
}
|
|
4114
|
+
async onPairingRequired(chatId, result, threadId) {
|
|
4115
|
+
if ('code' in result) {
|
|
4116
|
+
await this.sendThreadMessage(chatId, threadId, `Your pairing code is: ${result.code}\n\nAsk the bot operator to approve you with:\n qwen channel pairing approve ${this.name} ${result.code}`);
|
|
4117
|
+
}
|
|
4118
|
+
else {
|
|
4119
|
+
await this.sendThreadMessage(chatId, threadId, this.pairingRejectionMessage(result.rejected));
|
|
4120
|
+
}
|
|
4121
|
+
}
|
|
4122
|
+
async onGroupPairingRequired(chatId, result, threadId) {
|
|
4123
|
+
if ('code' in result) {
|
|
4124
|
+
if (this.groupPairingNotified.get(chatId) === result.code) {
|
|
4125
|
+
return;
|
|
4126
|
+
}
|
|
4127
|
+
await this.sendThreadMessage(chatId, threadId, `This group requires approval. Its pairing code is: ${result.code}\n\nAsk the bot operator to approve the group with:\n qwen channel pairing approve ${this.name} ${result.code}`);
|
|
4128
|
+
this.groupPairingNotified.set(chatId, result.code);
|
|
4032
4129
|
}
|
|
4033
4130
|
else {
|
|
4034
|
-
await this.sendThreadMessage(chatId, threadId,
|
|
4131
|
+
await this.sendThreadMessage(chatId, threadId, this.groupPairingRejectionMessage(result.rejected));
|
|
4035
4132
|
}
|
|
4036
4133
|
}
|
|
4037
4134
|
}
|