@qwen-code/channel-base 0.24.5-preview.0 → 0.24.6
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 +26 -4
- package/dist/ChannelBase.d.ts +26 -7
- package/dist/ChannelBase.d.ts.map +1 -1
- package/dist/ChannelBase.js +129 -52
- package/dist/ChannelBase.js.map +1 -1
- package/dist/ChannelLoopStore.js +4 -1
- package/dist/ChannelLoopStore.js.map +1 -1
- package/dist/GroupGate.d.ts +5 -0
- package/dist/GroupGate.d.ts.map +1 -1
- package/dist/GroupGate.js +14 -3
- package/dist/GroupGate.js.map +1 -1
- package/dist/SenderGate.d.ts +2 -2
- package/dist/SenderGate.d.ts.map +1 -1
- package/dist/SenderGate.js +4 -0
- package/dist/SenderGate.js.map +1 -1
- package/dist/SessionRouter.d.ts +4 -3
- package/dist/SessionRouter.d.ts.map +1 -1
- package/dist/SessionRouter.js +28 -8
- package/dist/SessionRouter.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/message-routes.d.ts +7 -0
- package/dist/message-routes.d.ts.map +1 -0
- package/dist/message-routes.js +29 -0
- package/dist/message-routes.js.map +1 -0
- package/dist/private-policy.d.ts +7 -0
- package/dist/private-policy.d.ts.map +1 -0
- package/dist/private-policy.js +20 -0
- package/dist/private-policy.js.map +1 -0
- package/dist/types.d.ts +28 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -82,7 +82,8 @@ In daemon-managed mode, every named channel's `cwd` must resolve to exactly one
|
|
|
82
82
|
Inbound: Platform message
|
|
83
83
|
→ Envelope (with attachments)
|
|
84
84
|
→ GroupGate (group policy + mention gating)
|
|
85
|
-
→ SenderGate (
|
|
85
|
+
→ SenderGate (privatePolicy for personal messages; groups.senders
|
|
86
|
+
for group members, default open)
|
|
86
87
|
→ Slash commands (/clear, /help, /status)
|
|
87
88
|
→ SessionRouter (resolve or create agent session)
|
|
88
89
|
→ Resolve attachments (images → bridge, files → prompt text)
|
|
@@ -103,7 +104,7 @@ Everything between `handleInbound()` and `sendMessage()` is handled by the base
|
|
|
103
104
|
| `ChannelBase` | Abstract base class — extend this to build a channel adapter |
|
|
104
105
|
| `AcpBridge` | Current standalone `qwen channel start` bridge implementation over `qwen-code --acp` |
|
|
105
106
|
| `SessionRouter` | Maps senders to agent sessions with configurable scoping |
|
|
106
|
-
| `SenderGate` |
|
|
107
|
+
| `SenderGate` | Sender access control (allowlist / pairing / open), one axis per side |
|
|
107
108
|
| `GroupGate` | Group chat policy and @mention gating |
|
|
108
109
|
| `PairingStore` | Pairing code generation, approval, and allowlist persistence |
|
|
109
110
|
|
|
@@ -118,8 +119,9 @@ Everything between `handleInbound()` and `sendMessage()` is handled by the base
|
|
|
118
119
|
| `ChannelConfig` | Channel configuration from `settings.json` |
|
|
119
120
|
| `ChannelPlugin` | Plugin factory interface (what you export) |
|
|
120
121
|
| `Envelope` | Normalized inbound message format |
|
|
121
|
-
| `
|
|
122
|
+
| `PrivatePolicy` | `'disabled' \| 'allowlist' \| 'pairing' \| 'open'` |
|
|
122
123
|
| `GroupPolicy` | `'disabled' \| 'allowlist' \| 'pairing' \| 'open'` |
|
|
124
|
+
| `GroupSenderPolicy` | `'open' \| 'allowlist'` — never `pairing` |
|
|
123
125
|
| `SessionScope` | `'user' \| 'chat_thread' \| 'single'`; legacy `'thread'` is deprecated |
|
|
124
126
|
| `GroupConfig` | Per-group settings (e.g. `requireMention`) |
|
|
125
127
|
| `SessionTarget` | Maps a session back to its channel/sender/chat |
|
|
@@ -268,7 +270,7 @@ constructor(bridge: ChannelAgentBridge, defaultCwd: string, scope?: SessionScope
|
|
|
268
270
|
### SenderGate
|
|
269
271
|
|
|
270
272
|
```typescript
|
|
271
|
-
constructor(policy:
|
|
273
|
+
constructor(policy: PrivatePolicy, allowedUsers?: string[], pairingStore?: PairingStore)
|
|
272
274
|
```
|
|
273
275
|
|
|
274
276
|
| Method | Description |
|
|
@@ -279,10 +281,30 @@ constructor(policy: SenderPolicy, allowedUsers?: string[], pairingStore?: Pairin
|
|
|
279
281
|
|
|
280
282
|
| Policy | Behavior |
|
|
281
283
|
| ----------- | --------------------------------------------------------------------------------------------------------- |
|
|
284
|
+
| `disabled` | Nobody allowed; no pairing requests |
|
|
282
285
|
| `open` | Everyone allowed |
|
|
283
286
|
| `allowlist` | Only `allowedUsers` allowed |
|
|
284
287
|
| `pairing` | Check allowlist, then approved pairings, then generate a pairing code (8-char, 1hr expiry, max 3 pending) |
|
|
285
288
|
|
|
289
|
+
**Per-conversation gate:** `this.gate` is the direct-message gate. A group
|
|
290
|
+
resolves its own `senders` (`groups[chatId]`, then `groups["*"]`, field by
|
|
291
|
+
field; every admitted group defaults to `open`). Any
|
|
292
|
+
sender check an adapter makes itself must go through
|
|
293
|
+
`this.senderGateFor({ isGroup, chatId })` rather than `this.gate`, or the
|
|
294
|
+
group's setting is silently ignored on that lane. A group gate never carries
|
|
295
|
+
`pairing`: an approval there would also unlock direct messages.
|
|
296
|
+
|
|
297
|
+
**Operators:** commands that act on a shared session (`/approve`, `/cancel`,
|
|
298
|
+
`/clear`, `/loop`, the loop tool, steering, ...) check
|
|
299
|
+
`isSharedSessionOperator`, not the sender gates. Only explicit `config.operators`
|
|
300
|
+
grants shared-session operator permissions; omitted or empty means nobody.
|
|
301
|
+
Private policy, user pairing, and group member admission never imply this role.
|
|
302
|
+
|
|
303
|
+
`resolvePrivatePolicy(config)` resolves the four-value private policy. Explicit
|
|
304
|
+
`privatePolicy` takes precedence over deprecated `dmPolicy` and `senderPolicy`;
|
|
305
|
+
otherwise disabled DM policy wins, then sender policy, then legacy `allowlist`.
|
|
306
|
+
Group sender policy is independent and only accepts `open` or `allowlist`.
|
|
307
|
+
|
|
286
308
|
### GroupGate
|
|
287
309
|
|
|
288
310
|
```typescript
|
package/dist/ChannelBase.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ChannelConfig, ChannelMemoryCallbacks, ChannelMemoryIntentClassifier, ChannelOutputSegmentContext, ChannelOutputSegmentEndReason, ChannelPermissionRequestContext, ChannelProactiveTarget, ChannelRuntimeIdentity, ChannelRuntimeMemoryScope, ChannelTaskLifecycleEvent, ChannelUserInputRequestContext, Envelope, ObservedChannelContactGraph, ObservedChannelContactObservation, SessionTarget, UserInputPresentationResult } from './types.js';
|
|
1
|
+
import type { ChannelConfig, ChannelMemoryCallbacks, ChannelMemoryIntentClassifier, ChannelOutputSegmentContext, ChannelOutputSegmentEndReason, ChannelPermissionRequestContext, ChannelProactiveTarget, ChannelRuntimeIdentity, ChannelRuntimeMemoryScope, ChannelTaskLifecycleEvent, ChannelUserInputRequestContext, Envelope, PrivatePolicy, 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';
|
|
@@ -81,7 +81,10 @@ export declare abstract class ChannelBase {
|
|
|
81
81
|
protected groupGate: GroupGate;
|
|
82
82
|
protected dmGate: DmGate;
|
|
83
83
|
protected gate: SenderGate;
|
|
84
|
+
protected readonly privatePolicy: PrivatePolicy;
|
|
84
85
|
protected router: SessionRouter;
|
|
86
|
+
private readonly messageRoutes;
|
|
87
|
+
private readonly routedEnvelopes;
|
|
85
88
|
protected name: string;
|
|
86
89
|
/** Resolved (defaulted + frozen) identity/scope — adapters should read these, not raw config. */
|
|
87
90
|
protected readonly identity: ChannelRuntimeIdentity;
|
|
@@ -408,15 +411,14 @@ export declare abstract class ChannelBase {
|
|
|
408
411
|
private isSharedSession;
|
|
409
412
|
private isSharedSessionTarget;
|
|
410
413
|
/**
|
|
411
|
-
* Whether `envelope.senderId` may
|
|
412
|
-
*
|
|
413
|
-
*
|
|
414
|
-
*
|
|
415
|
-
* gate can't drift; each caller sends its own rejection wording.
|
|
414
|
+
* Whether `envelope.senderId` may operate the resolved session: answer its
|
|
415
|
+
* permission prompts, steer it, or run /cancel, /clear, /who, /status, /loop
|
|
416
|
+
* and /btw. Shared verbatim by every such command so the gate can't drift;
|
|
417
|
+
* each caller sends its own rejection wording.
|
|
416
418
|
*/
|
|
417
419
|
private isAuthorizedForSharedSession;
|
|
418
|
-
private isAuthorizedForSharedSessionTarget;
|
|
419
420
|
private isAuthorizedForSharedSessionToolCall;
|
|
421
|
+
private isSharedSessionOperator;
|
|
420
422
|
private toolCallerName;
|
|
421
423
|
/**
|
|
422
424
|
* Cancel the active turn and wait (bounded) for it to wind down. Fires a
|
|
@@ -484,6 +486,22 @@ export declare abstract class ChannelBase {
|
|
|
484
486
|
private forgetPendingGroupHistory;
|
|
485
487
|
private clearPendingGroupHistory;
|
|
486
488
|
private prependGroupHistoryContext;
|
|
489
|
+
protected senderGateFor(target: {
|
|
490
|
+
isGroup?: boolean;
|
|
491
|
+
chatId: string;
|
|
492
|
+
}): SenderGate;
|
|
493
|
+
private groupSendersFor;
|
|
494
|
+
/**
|
|
495
|
+
* Whether a group-shaped conversation acts on behalf of one person, such as
|
|
496
|
+
* a document comment thread or a task. Its sender follows `privatePolicy`
|
|
497
|
+
* like a direct message, and `groups` does not apply; its
|
|
498
|
+
* group shape still decides routing, memory, and presentation.
|
|
499
|
+
*/
|
|
500
|
+
protected isPersonalConversation(_target: {
|
|
501
|
+
chatId: string;
|
|
502
|
+
}): boolean;
|
|
503
|
+
private groupAllowedUsersFor;
|
|
504
|
+
private groupConfigFor;
|
|
487
505
|
protected preflightInbound(envelope: Envelope, options?: PreflightInboundOptions): boolean | Promise<boolean>;
|
|
488
506
|
protected logPreflightRejected(reason: string): void;
|
|
489
507
|
protected logDebugPayload(platform: string, payload: unknown): void;
|
|
@@ -506,6 +524,7 @@ export declare abstract class ChannelBase {
|
|
|
506
524
|
private sanitizeSourceSender;
|
|
507
525
|
private sourceLabelForTurn;
|
|
508
526
|
protected markPreflighted(envelope: Envelope): void;
|
|
527
|
+
private applyMessageRoute;
|
|
509
528
|
/** Wait until the currently active bridge recovery, if any, has completed. */
|
|
510
529
|
private waitForBridgeRecovery;
|
|
511
530
|
/**
|
|
@@ -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
|
@@ -4,9 +4,11 @@ import { ChannelProactiveDeliveryError, isChannelProactiveDeliveryError, } from
|
|
|
4
4
|
import { GroupGate } from './GroupGate.js';
|
|
5
5
|
import { DmGate } from './DmGate.js';
|
|
6
6
|
import { GroupHistoryStore } from './group-history-store.js';
|
|
7
|
+
import { resolvePrivatePolicy } from './private-policy.js';
|
|
7
8
|
import { SenderGate } from './SenderGate.js';
|
|
8
9
|
import { PairingStore } from './PairingStore.js';
|
|
9
10
|
import { SessionRouter, readDaemonHttpErrorCode } from './SessionRouter.js';
|
|
11
|
+
import { matchMessageRoute } from './message-routes.js';
|
|
10
12
|
import { NamedSessionManager, NamedSessionTaskError, } from './named-session-manager.js';
|
|
11
13
|
import { getGlobalQwenDir } from './paths.js';
|
|
12
14
|
import { sanitizeSenderName, sanitizeQuotedText, sanitizePromptText, sanitizePromptPath, sanitizeLogText, sanitizeDisplayText, truncateCodePoints, PROMPT_UNSAFE_INVISIBLES, } from './sanitize.js';
|
|
@@ -146,7 +148,10 @@ export class ChannelBase {
|
|
|
146
148
|
groupGate;
|
|
147
149
|
dmGate;
|
|
148
150
|
gate;
|
|
151
|
+
privatePolicy;
|
|
149
152
|
router;
|
|
153
|
+
messageRoutes;
|
|
154
|
+
routedEnvelopes = new WeakSet();
|
|
150
155
|
name;
|
|
151
156
|
/** Resolved (defaulted + frozen) identity/scope — adapters should read these, not raw config. */
|
|
152
157
|
identity;
|
|
@@ -860,6 +865,20 @@ export class ChannelBase {
|
|
|
860
865
|
constructor(name, config, bridge, options) {
|
|
861
866
|
this.name = name;
|
|
862
867
|
this.config = config;
|
|
868
|
+
this.messageRoutes = new Map(Object.entries(config.messageRoutes ?? {}));
|
|
869
|
+
if (config.multiSession && this.messageRoutes.size > 0) {
|
|
870
|
+
throw new Error('messageRoutes cannot be combined with multiSession.');
|
|
871
|
+
}
|
|
872
|
+
if ([...this.messageRoutes].some(([prefix, instructions]) => !prefix.trim() ||
|
|
873
|
+
prefix !== prefix.trim() ||
|
|
874
|
+
typeof instructions !== 'string')) {
|
|
875
|
+
throw new Error('Message routes require non-empty prefixes and string instructions.');
|
|
876
|
+
}
|
|
877
|
+
if (config.defaultMessageRoute !== undefined &&
|
|
878
|
+
!this.messageRoutes.has(config.defaultMessageRoute)) {
|
|
879
|
+
throw new Error('defaultMessageRoute must name a configured message route.');
|
|
880
|
+
}
|
|
881
|
+
this.privatePolicy = resolvePrivatePolicy(config);
|
|
863
882
|
this.bridge = bridge;
|
|
864
883
|
this.locale = options?.locale ?? 'en';
|
|
865
884
|
this.proxy = options?.proxy;
|
|
@@ -876,12 +895,12 @@ export class ChannelBase {
|
|
|
876
895
|
this.bridgeRecovery = options?.bridgeRecovery;
|
|
877
896
|
// Scoped by the channel's workspace cwd: two workspaces reusing the same
|
|
878
897
|
// channel name must not share pairing/allowlist state (#7017).
|
|
879
|
-
const pairingStore =
|
|
898
|
+
const pairingStore = this.privatePolicy === 'pairing' || config.groupPolicy === 'pairing'
|
|
880
899
|
? new PairingStore(name, config.cwd)
|
|
881
900
|
: undefined;
|
|
882
901
|
this.groupGate = new GroupGate(config.groupPolicy, config.groups, pairingStore);
|
|
883
|
-
this.dmGate = new DmGate(
|
|
884
|
-
this.gate = new SenderGate(
|
|
902
|
+
this.dmGate = new DmGate(this.privatePolicy === 'disabled' ? 'disabled' : 'open');
|
|
903
|
+
this.gate = new SenderGate(this.privatePolicy, config.allowedUsers, pairingStore);
|
|
885
904
|
this.router =
|
|
886
905
|
options?.router ||
|
|
887
906
|
new SessionRouter(bridge, config.cwd, config.sessionScope);
|
|
@@ -1173,6 +1192,11 @@ export class ChannelBase {
|
|
|
1173
1192
|
if (this.config.instructions) {
|
|
1174
1193
|
staticContext.push(this.config.instructions);
|
|
1175
1194
|
}
|
|
1195
|
+
const routeInstructions = target.messageRoute === undefined
|
|
1196
|
+
? undefined
|
|
1197
|
+
: this.messageRoutes.get(target.messageRoute);
|
|
1198
|
+
if (routeInstructions)
|
|
1199
|
+
staticContext.push(routeInstructions);
|
|
1176
1200
|
// Boundary block goes last: recency bias means later instructions win,
|
|
1177
1201
|
// and the isolation boundary must not be overridable by operator text.
|
|
1178
1202
|
if (this.shouldPrependChannelBoundaryPrompt()) {
|
|
@@ -1371,7 +1395,7 @@ export class ChannelBase {
|
|
|
1371
1395
|
throw new Error(`Loop ${job.id} target is no longer authorized.`);
|
|
1372
1396
|
}
|
|
1373
1397
|
await this.waitForBridgeRecovery();
|
|
1374
|
-
const sessionId = await this.router.resolve(this.name, job.target.senderId, job.target.chatId, job.target.threadId, job.cwd, job.target.isGroup);
|
|
1398
|
+
const sessionId = await this.router.resolve(this.name, job.target.senderId, job.target.chatId, job.target.threadId, job.cwd, job.target.isGroup, { routeKey: job.target.messageRoute });
|
|
1375
1399
|
const label = sanitizeQuotedText(job.label || job.id, 80);
|
|
1376
1400
|
const createdBy = sanitizeSenderName(job.createdBy || 'unknown');
|
|
1377
1401
|
// Without the delivery-contract sentence the model treats "post X" prompts
|
|
@@ -2490,7 +2514,7 @@ export class ChannelBase {
|
|
|
2490
2514
|
if (this.namedSessions) {
|
|
2491
2515
|
return (await this.namedSessions.current(this.namedSessionOwner(envelope)))?.sessionId;
|
|
2492
2516
|
}
|
|
2493
|
-
return this.router.getSession(this.name, envelope.senderId, envelope.chatId, envelope.threadId);
|
|
2517
|
+
return this.router.getSession(this.name, envelope.senderId, envelope.chatId, envelope.threadId, envelope.messageRoute);
|
|
2494
2518
|
}
|
|
2495
2519
|
reserveQueuedTurn(sessionId) {
|
|
2496
2520
|
this.queuedTurns.set(sessionId, (this.queuedTurns.get(sessionId) ?? 0) + 1);
|
|
@@ -2782,7 +2806,7 @@ export class ChannelBase {
|
|
|
2782
2806
|
let removedIds;
|
|
2783
2807
|
const retiringSessionId = this.namedSessions
|
|
2784
2808
|
? undefined
|
|
2785
|
-
: this.router.getSession(this.name, envelope.senderId, envelope.chatId, envelope.threadId);
|
|
2809
|
+
: this.router.getSession(this.name, envelope.senderId, envelope.chatId, envelope.threadId, envelope.messageRoute);
|
|
2786
2810
|
if (retiringSessionId)
|
|
2787
2811
|
this.onSessionRetiring(retiringSessionId);
|
|
2788
2812
|
if (this.namedSessions) {
|
|
@@ -2808,7 +2832,7 @@ export class ChannelBase {
|
|
|
2808
2832
|
}
|
|
2809
2833
|
}
|
|
2810
2834
|
else {
|
|
2811
|
-
removedIds = this.router.removeSession(this.name, envelope.senderId, envelope.chatId, envelope.threadId);
|
|
2835
|
+
removedIds = this.router.removeSession(this.name, envelope.senderId, envelope.chatId, envelope.threadId, envelope.messageRoute);
|
|
2812
2836
|
}
|
|
2813
2837
|
this.clearPendingGroupHistory(envelope);
|
|
2814
2838
|
if (removedIds.length > 0) {
|
|
@@ -2916,7 +2940,7 @@ export class ChannelBase {
|
|
|
2916
2940
|
}
|
|
2917
2941
|
};
|
|
2918
2942
|
// For a shared session, clearing it affects everyone who shares it: restrict
|
|
2919
|
-
// it to
|
|
2943
|
+
// it to the session's operators (see isSharedSessionOperator) and require an
|
|
2920
2944
|
// explicit "confirm". DMs on per-user/thread scope and per-user groups clear
|
|
2921
2945
|
// directly — there /clear only touches the caller's own session.
|
|
2922
2946
|
const clearHandler = async (envelope, args) => {
|
|
@@ -2952,7 +2976,7 @@ export class ChannelBase {
|
|
|
2952
2976
|
}
|
|
2953
2977
|
const active = this.namedSessions
|
|
2954
2978
|
? Boolean(await this.currentSessionId(envelope))
|
|
2955
|
-
: this.router.hasSession(this.name, envelope.senderId, envelope.chatId, envelope.threadId);
|
|
2979
|
+
: this.router.hasSession(this.name, envelope.senderId, envelope.chatId, envelope.threadId, envelope.messageRoute);
|
|
2956
2980
|
// `single` collapses EVERY DM and group to one `__single__` session, so it
|
|
2957
2981
|
// is shared channel-wide regardless of where the /who came from — report
|
|
2958
2982
|
// that explicitly (a group `single` session understates its blast radius as
|
|
@@ -3057,8 +3081,10 @@ export class ChannelBase {
|
|
|
3057
3081
|
}
|
|
3058
3082
|
const hasSession = this.namedSessions
|
|
3059
3083
|
? Boolean(await this.currentSessionId(envelope))
|
|
3060
|
-
: this.router.hasSession(this.name, envelope.senderId, envelope.chatId, envelope.threadId);
|
|
3061
|
-
const policy = this.
|
|
3084
|
+
: this.router.hasSession(this.name, envelope.senderId, envelope.chatId, envelope.threadId, envelope.messageRoute);
|
|
3085
|
+
const policy = envelope.isGroup && !this.isPersonalConversation(envelope)
|
|
3086
|
+
? this.groupSendersFor(envelope)
|
|
3087
|
+
: this.privatePolicy;
|
|
3062
3088
|
const lines = [
|
|
3063
3089
|
`Session: ${hasSession ? 'active' : 'none'}`,
|
|
3064
3090
|
`Access: ${policy}`,
|
|
@@ -3351,6 +3377,9 @@ export class ChannelBase {
|
|
|
3351
3377
|
loopTargetFromEnvelope(envelope) {
|
|
3352
3378
|
return this.normalizeLoopTarget({
|
|
3353
3379
|
channelName: this.name,
|
|
3380
|
+
...(envelope.messageRoute !== undefined
|
|
3381
|
+
? { messageRoute: envelope.messageRoute }
|
|
3382
|
+
: {}),
|
|
3354
3383
|
senderId: envelope.senderId,
|
|
3355
3384
|
chatId: envelope.chatId,
|
|
3356
3385
|
threadId: envelope.threadId,
|
|
@@ -3377,6 +3406,9 @@ export class ChannelBase {
|
|
|
3377
3406
|
return normalizedTarget;
|
|
3378
3407
|
}
|
|
3379
3408
|
isStoredLoopTargetAuthorized(target, senderName) {
|
|
3409
|
+
if (target.messageRoute !== undefined &&
|
|
3410
|
+
!this.messageRoutes.has(target.messageRoute))
|
|
3411
|
+
return false;
|
|
3380
3412
|
const normalizedTarget = this.normalizeLoopTarget(target);
|
|
3381
3413
|
const envelope = {
|
|
3382
3414
|
channelName: this.name,
|
|
@@ -3391,9 +3423,7 @@ export class ChannelBase {
|
|
|
3391
3423
|
};
|
|
3392
3424
|
return (this.groupGate.check(envelope, { createPairingRequest: false }).allowed &&
|
|
3393
3425
|
this.dmGate.check(envelope).allowed &&
|
|
3394
|
-
(normalizedTarget.
|
|
3395
|
-
? true
|
|
3396
|
-
: this.gate.isAllowed(normalizedTarget.senderId)) &&
|
|
3426
|
+
this.senderGateFor(envelope).isAllowed(normalizedTarget.senderId) &&
|
|
3397
3427
|
this.isAuthorizedForSharedSession(envelope));
|
|
3398
3428
|
}
|
|
3399
3429
|
/** Check if a message text matches a registered local command. */
|
|
@@ -3402,7 +3432,7 @@ export class ChannelBase {
|
|
|
3402
3432
|
return parsed !== null && this.commands.has(parsed.command);
|
|
3403
3433
|
}
|
|
3404
3434
|
findActiveSessionId(envelope) {
|
|
3405
|
-
const sessionId = this.router.getSession(this.name, envelope.senderId, envelope.chatId, envelope.threadId);
|
|
3435
|
+
const sessionId = this.router.getSession(this.name, envelope.senderId, envelope.chatId, envelope.threadId, envelope.messageRoute);
|
|
3406
3436
|
return sessionId && this.activePrompts.has(sessionId)
|
|
3407
3437
|
? sessionId
|
|
3408
3438
|
: undefined;
|
|
@@ -3464,7 +3494,7 @@ export class ChannelBase {
|
|
|
3464
3494
|
if (matched) {
|
|
3465
3495
|
return;
|
|
3466
3496
|
}
|
|
3467
|
-
const sessionId = this.router.getSession(this.name, envelope.senderId, envelope.chatId, envelope.threadId);
|
|
3497
|
+
const sessionId = this.router.getSession(this.name, envelope.senderId, envelope.chatId, envelope.threadId, envelope.messageRoute);
|
|
3468
3498
|
if (sessionId) {
|
|
3469
3499
|
this.unattendedMemorySessions.delete(sessionId);
|
|
3470
3500
|
}
|
|
@@ -3968,29 +3998,22 @@ export class ChannelBase {
|
|
|
3968
3998
|
(target.isGroup === true && this.config.sessionScope === 'thread'));
|
|
3969
3999
|
}
|
|
3970
4000
|
/**
|
|
3971
|
-
* Whether `envelope.senderId` may
|
|
3972
|
-
*
|
|
3973
|
-
*
|
|
3974
|
-
*
|
|
3975
|
-
* gate can't drift; each caller sends its own rejection wording.
|
|
4001
|
+
* Whether `envelope.senderId` may operate the resolved session: answer its
|
|
4002
|
+
* permission prompts, steer it, or run /cancel, /clear, /who, /status, /loop
|
|
4003
|
+
* and /btw. Shared verbatim by every such command so the gate can't drift;
|
|
4004
|
+
* each caller sends its own rejection wording.
|
|
3976
4005
|
*/
|
|
3977
4006
|
isAuthorizedForSharedSession(envelope) {
|
|
3978
|
-
return this.
|
|
3979
|
-
}
|
|
3980
|
-
isAuthorizedForSharedSessionTarget(target) {
|
|
3981
|
-
if (!this.isSharedSessionTarget(target))
|
|
3982
|
-
return true;
|
|
3983
|
-
const authorized = this.config.allowedUsers;
|
|
3984
|
-
return authorized.length === 0 || authorized.includes(target.senderId);
|
|
4007
|
+
return this.isSharedSessionOperator(envelope, envelope.senderId);
|
|
3985
4008
|
}
|
|
3986
4009
|
isAuthorizedForSharedSessionToolCall(target, sessionId) {
|
|
4010
|
+
return this.isSharedSessionOperator(target, this.activePrompts.get(sessionId)?.senderId);
|
|
4011
|
+
}
|
|
4012
|
+
isSharedSessionOperator(target, senderId) {
|
|
3987
4013
|
if (!this.isSharedSessionTarget(target))
|
|
3988
4014
|
return true;
|
|
3989
|
-
|
|
3990
|
-
|
|
3991
|
-
return true;
|
|
3992
|
-
const senderId = this.activePrompts.get(sessionId)?.senderId;
|
|
3993
|
-
return senderId !== undefined && authorized.includes(senderId);
|
|
4015
|
+
return (senderId !== undefined &&
|
|
4016
|
+
this.config.operators?.includes(senderId) === true);
|
|
3994
4017
|
}
|
|
3995
4018
|
toolCallerName(sessionId, target) {
|
|
3996
4019
|
const active = this.activePrompts.get(sessionId);
|
|
@@ -4146,6 +4169,7 @@ export class ChannelBase {
|
|
|
4146
4169
|
this.name,
|
|
4147
4170
|
envelope.chatId,
|
|
4148
4171
|
envelope.threadId ?? null,
|
|
4172
|
+
...(envelope.messageRoute !== undefined ? [envelope.messageRoute] : []),
|
|
4149
4173
|
]);
|
|
4150
4174
|
}
|
|
4151
4175
|
groupHistoryLimit(envelope) {
|
|
@@ -4164,6 +4188,8 @@ export class ChannelBase {
|
|
|
4164
4188
|
return Math.floor(configured);
|
|
4165
4189
|
}
|
|
4166
4190
|
recordPendingGroupHistory(envelope) {
|
|
4191
|
+
if (!this.applyMessageRoute(envelope))
|
|
4192
|
+
return;
|
|
4167
4193
|
const limit = this.groupHistoryLimit(envelope);
|
|
4168
4194
|
if (limit <= 0 || envelope.text.trim().length === 0) {
|
|
4169
4195
|
return;
|
|
@@ -4174,8 +4200,7 @@ export class ChannelBase {
|
|
|
4174
4200
|
if (envelope.syntheticText)
|
|
4175
4201
|
return;
|
|
4176
4202
|
const senderId = truncateGroupHistoryField(envelope.senderId);
|
|
4177
|
-
if (this.
|
|
4178
|
-
!this.gate.isAllowed(senderId)) {
|
|
4203
|
+
if (!this.senderGateFor(envelope).isAllowed(senderId)) {
|
|
4179
4204
|
return;
|
|
4180
4205
|
}
|
|
4181
4206
|
const entry = {
|
|
@@ -4240,13 +4265,12 @@ export class ChannelBase {
|
|
|
4240
4265
|
process.stderr.write(`[${this.name}] failed to clear group history for chat ${sanitizeLogText(envelope.chatId, 64)}: ${err instanceof Error ? err.message : err}\n`);
|
|
4241
4266
|
}
|
|
4242
4267
|
}
|
|
4243
|
-
prependGroupHistoryContext(promptText, entries) {
|
|
4268
|
+
prependGroupHistoryContext(envelope, promptText, entries) {
|
|
4244
4269
|
if (entries.length === 0) {
|
|
4245
4270
|
return promptText;
|
|
4246
4271
|
}
|
|
4247
|
-
const
|
|
4248
|
-
|
|
4249
|
-
: entries.filter((entry) => this.gate.isAllowed(entry.senderId));
|
|
4272
|
+
const senderGate = this.senderGateFor(envelope);
|
|
4273
|
+
const lines = entries.filter((entry) => senderGate.isAllowed(entry.senderId));
|
|
4250
4274
|
if (lines.length === 0) {
|
|
4251
4275
|
return promptText;
|
|
4252
4276
|
}
|
|
@@ -4257,7 +4281,39 @@ export class ChannelBase {
|
|
|
4257
4281
|
});
|
|
4258
4282
|
return `${GROUP_HISTORY_CONTEXT_MARKER}\n${formatted.join('\n')}\n\n${CURRENT_MESSAGE_MARKER}\n${promptText}`;
|
|
4259
4283
|
}
|
|
4284
|
+
senderGateFor(target) {
|
|
4285
|
+
if (target.isGroup !== true || this.isPersonalConversation(target)) {
|
|
4286
|
+
return this.gate;
|
|
4287
|
+
}
|
|
4288
|
+
const senders = this.groupSendersFor(target);
|
|
4289
|
+
return new SenderGate(senders, senders === 'allowlist' ? this.groupAllowedUsersFor(target.chatId) : []);
|
|
4290
|
+
}
|
|
4291
|
+
groupSendersFor(target) {
|
|
4292
|
+
return (this.groupConfigFor(target.chatId)?.senders ??
|
|
4293
|
+
this.groupConfigFor('*')?.senders ??
|
|
4294
|
+
'open');
|
|
4295
|
+
}
|
|
4296
|
+
/**
|
|
4297
|
+
* Whether a group-shaped conversation acts on behalf of one person, such as
|
|
4298
|
+
* a document comment thread or a task. Its sender follows `privatePolicy`
|
|
4299
|
+
* like a direct message, and `groups` does not apply; its
|
|
4300
|
+
* group shape still decides routing, memory, and presentation.
|
|
4301
|
+
*/
|
|
4302
|
+
isPersonalConversation(_target) {
|
|
4303
|
+
return false;
|
|
4304
|
+
}
|
|
4305
|
+
groupAllowedUsersFor(chatId) {
|
|
4306
|
+
return (this.groupConfigFor(chatId)?.allowedUsers ??
|
|
4307
|
+
this.groupConfigFor('*')?.allowedUsers ??
|
|
4308
|
+
[]);
|
|
4309
|
+
}
|
|
4310
|
+
groupConfigFor(key) {
|
|
4311
|
+
const groups = this.config.groups;
|
|
4312
|
+
return Object.hasOwn(groups, key) ? groups[key] : undefined;
|
|
4313
|
+
}
|
|
4260
4314
|
preflightInbound(envelope, options = {}) {
|
|
4315
|
+
if (!this.applyMessageRoute(envelope))
|
|
4316
|
+
return false;
|
|
4261
4317
|
const groupResult = this.groupGate.check(envelope, {
|
|
4262
4318
|
createPairingRequest: !options.deferPairingRequests,
|
|
4263
4319
|
});
|
|
@@ -4291,17 +4347,15 @@ export class ChannelBase {
|
|
|
4291
4347
|
this.logPreflightRejected(`dm_${dmResult.reason ?? 'denied'}`);
|
|
4292
4348
|
return false;
|
|
4293
4349
|
}
|
|
4294
|
-
|
|
4295
|
-
this.markPreflighted(envelope);
|
|
4296
|
-
return true;
|
|
4297
|
-
}
|
|
4350
|
+
const senderGate = this.senderGateFor(envelope);
|
|
4298
4351
|
if (options.deferPairingRequests === true &&
|
|
4299
|
-
|
|
4300
|
-
|
|
4352
|
+
senderGate === this.gate &&
|
|
4353
|
+
this.privatePolicy === 'pairing' &&
|
|
4354
|
+
!senderGate.isAllowed(envelope.senderId)) {
|
|
4301
4355
|
this.markPreflighted(envelope);
|
|
4302
4356
|
return true;
|
|
4303
4357
|
}
|
|
4304
|
-
const result =
|
|
4358
|
+
const result = senderGate.check(envelope.senderId, envelope.senderName);
|
|
4305
4359
|
if (!result.allowed) {
|
|
4306
4360
|
if (result.pairing !== undefined) {
|
|
4307
4361
|
this.logPreflightRejected('sender_pairing_required');
|
|
@@ -4312,7 +4366,7 @@ export class ChannelBase {
|
|
|
4312
4366
|
return false;
|
|
4313
4367
|
});
|
|
4314
4368
|
}
|
|
4315
|
-
this.logPreflightRejected('sender_denied');
|
|
4369
|
+
this.logPreflightRejected(senderGate === this.gate ? 'sender_denied' : 'group_sender_denied');
|
|
4316
4370
|
return false;
|
|
4317
4371
|
}
|
|
4318
4372
|
this.markPreflighted(envelope);
|
|
@@ -4509,6 +4563,23 @@ export class ChannelBase {
|
|
|
4509
4563
|
markPreflighted(envelope) {
|
|
4510
4564
|
this.preflightedEnvelopes.add(envelope);
|
|
4511
4565
|
}
|
|
4566
|
+
applyMessageRoute(envelope) {
|
|
4567
|
+
if (this.routedEnvelopes.has(envelope))
|
|
4568
|
+
return true;
|
|
4569
|
+
if (this.messageRoutes.size === 0 ||
|
|
4570
|
+
envelope.bypassMessageRoutes ||
|
|
4571
|
+
envelope.syntheticText) {
|
|
4572
|
+
this.routedEnvelopes.add(envelope);
|
|
4573
|
+
return true;
|
|
4574
|
+
}
|
|
4575
|
+
const matched = matchMessageRoute(envelope.text, this.messageRoutes, this.config.defaultMessageRoute);
|
|
4576
|
+
if (!matched)
|
|
4577
|
+
return false;
|
|
4578
|
+
envelope.text = matched.text;
|
|
4579
|
+
envelope.messageRoute = matched.prefix;
|
|
4580
|
+
this.routedEnvelopes.add(envelope);
|
|
4581
|
+
return true;
|
|
4582
|
+
}
|
|
4512
4583
|
/** Wait until the currently active bridge recovery, if any, has completed. */
|
|
4513
4584
|
async waitForBridgeRecovery() {
|
|
4514
4585
|
let completedRecovery;
|
|
@@ -4675,7 +4746,7 @@ export class ChannelBase {
|
|
|
4675
4746
|
}
|
|
4676
4747
|
}
|
|
4677
4748
|
else {
|
|
4678
|
-
sessionId = await this.router.resolve(this.name, envelope.senderId, envelope.chatId, envelope.threadId, this.config.cwd, envelope.isGroup);
|
|
4749
|
+
sessionId = await this.router.resolve(this.name, envelope.senderId, envelope.chatId, envelope.threadId, this.config.cwd, envelope.isGroup, { routeKey: envelope.messageRoute });
|
|
4679
4750
|
}
|
|
4680
4751
|
const sourceLabel = this.namedSessions
|
|
4681
4752
|
? this.sourceLabelForTurn(sessionId, envelope)
|
|
@@ -4815,10 +4886,11 @@ export class ChannelBase {
|
|
|
4815
4886
|
promptText = promptText + '\n\n' + sanitizePromptText(envelope.metadata);
|
|
4816
4887
|
}
|
|
4817
4888
|
// Resolve dispatch mode: per-group override → channel config → default
|
|
4818
|
-
const
|
|
4819
|
-
? this.
|
|
4889
|
+
const groupMode = envelope.isGroup
|
|
4890
|
+
? (this.groupConfigFor(envelope.chatId)?.dispatchMode ??
|
|
4891
|
+
this.groupConfigFor('*')?.dispatchMode)
|
|
4820
4892
|
: undefined;
|
|
4821
|
-
const mode =
|
|
4893
|
+
const mode = groupMode ?? this.config.dispatchMode ?? 'steer';
|
|
4822
4894
|
const active = this.activePrompts.get(sessionId);
|
|
4823
4895
|
// Diagnostic watchdog for a steered turn that chains behind a wedged
|
|
4824
4896
|
// predecessor. Chain-and-wait (option a) means a hung predecessor bridge.prompt()
|
|
@@ -4966,6 +5038,11 @@ export class ChannelBase {
|
|
|
4966
5038
|
if (this.config.instructions) {
|
|
4967
5039
|
sessionContext.push(this.config.instructions);
|
|
4968
5040
|
}
|
|
5041
|
+
const routeInstructions = envelope.messageRoute === undefined
|
|
5042
|
+
? undefined
|
|
5043
|
+
: this.messageRoutes.get(envelope.messageRoute);
|
|
5044
|
+
if (routeInstructions)
|
|
5045
|
+
sessionContext.push(routeInstructions);
|
|
4969
5046
|
// Boundary block goes last: recency bias means later instructions win,
|
|
4970
5047
|
// and the isolation boundary must not be overridable by operator text.
|
|
4971
5048
|
if (this.shouldPrependChannelBoundaryPrompt()) {
|
|
@@ -5015,7 +5092,7 @@ export class ChannelBase {
|
|
|
5015
5092
|
const groupHistoryEntries = recognizedSlashCommand
|
|
5016
5093
|
? []
|
|
5017
5094
|
: this.drainPendingGroupHistory(envelope);
|
|
5018
|
-
let promptToSend = this.prependGroupHistoryContext(promptText, groupHistoryEntries);
|
|
5095
|
+
let promptToSend = this.prependGroupHistoryContext(envelope, promptText, groupHistoryEntries);
|
|
5019
5096
|
const hiddenContext = [
|
|
5020
5097
|
...(acceptedRecallContext ? [acceptedRecallContext] : []),
|
|
5021
5098
|
...sessionContext,
|