@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 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 (allowlist / pairing / open)
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` | DM access control (allowlist / pairing / open) |
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
- | `SenderPolicy` | `'allowlist' \| 'pairing' \| 'open'` |
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: SenderPolicy, allowedUsers?: string[], pairingStore?: PairingStore)
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
@@ -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 act on the resolved session's destructive or
412
- * workspace-leaking commands (/clear, /who). A SHARED session with a non-empty
413
- * allowedUsers list is restricted to those members; a per-user session, or one
414
- * with no allowlist, is unrestricted. Shared verbatim by /clear and /who so the
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":"AAEA,OAAO,KAAK,EACV,aAAa,EACb,sBAAsB,EAEtB,6BAA6B,EAE7B,2BAA2B,EAC3B,6BAA6B,EAE7B,+BAA+B,EAE/B,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EAGzB,yBAAyB,EACzB,8BAA8B,EAI9B,QAAQ,EAGR,aAAa,EACb,2BAA2B,EAC3B,iCAAiC,EAEjC,aAAa,EACb,2BAA2B,EAE5B,MAAM,YAAY,CAAC;AAKpB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAIrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,aAAa,EAA2B,MAAM,oBAAoB,CAAC;AAoB5E,OAAO,KAAK,EAEV,yBAAyB,EACzB,kBAAkB,EAIlB,sBAAsB,EACtB,uBAAuB,EAEvB,aAAa,EACd,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAM3E,OAAO,KAAK,EACV,wBAAwB,EACxB,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AAajC,UAAU,gCAAgC;IACxC,MAAM,EAAE,aAAa,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,OAAO,CAAC;AA2F5C,UAAU,uBAAuB;IAC/B,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAOD,MAAM,MAAM,8BAA8B,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;AACvE,MAAM,MAAM,yBAAyB,GACjC,UAAU,GACV,OAAO,GACP,OAAO,GACP,YAAY,GACZ,mBAAmB,CAAC;AAExB,MAAM,WAAW,8BAA8B;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,8BAA8B,CAAC;IACtC,MAAM,EAAE,yBAAyB,CAAC;CACnC;AAQD,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,sBAAsB,CAAC;IACvC,sBAAsB,CAAC,EAAE,6BAA6B,CAAC;IACvD,2BAA2B,CAAC,EAAE,CAC5B,WAAW,EAAE,8BAA8B,KACxC,IAAI,CAAC;IACV;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,6EAA6E;IAC7E,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;IACjD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,gBAAgB,CAAC,EAAE;QACjB,OAAO,CACL,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,iCAAiC,GAC7C,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACxB,wEAAwE;QACxE,IAAI,CAAC,IAAI,2BAA2B,CAAC;KACtC,CAAC;CACH;AAkDD,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACtD,eAAe,CAAC,CACd,KAAK,EAAE,gBAAgB,EACvB,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;IACpC,aAAa,CACX,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1B,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,YAAY,CAAC,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,wBAAwB;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CACzC;AAED,sFAAsF;AACtF,KAAK,cAAc,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAyH7E,8BAAsB,WAAW;IAC/B,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC;IAChC;;;OAGG;IACH,SAAS,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACrC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC;IAC/B,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC;IAC3B,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IAChD,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA8B;IAC5D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA2B;IAC3D,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC;IACvB,iGAAiG;IACjG,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IACpD,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,yBAAyB,CAAC;IAC1D,gFAAgF;IAChF,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACzB,8EAA8E;IAC9E,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IACrC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,CAAC;IACvC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAyB;IACxD,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAgC;IACxE,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAEnC;IACV,OAAO,CAAC,YAAY,CAAoB;IAKxC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA6B;IAClE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAwB;IACxD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAyC;IAC3E,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAsB;IACrD,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAA2B;IACpE,OAAO,CAAC,kBAAkB,CAA0B;IACpD,OAAO,CAAC,wBAAwB,CAA0B;IAC1D,OAAO,CAAC,kBAAkB,CAA6C;IACvE,OAAO,CAAC,wBAAwB,CAG5B;IACJ,OAAO,CAAC,QAAQ,CAA0C;IAC1D,4EAA4E;IAC5E,OAAO,CAAC,aAAa,CAAyC;IAC9D,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,iBAAiB,CAA6C;IACtE,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAmC;IAC5E,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAU;IAC/C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAkC;IAClE;;;;OAIG;IACH,OAAO,CAAC,kBAAkB,CAAkC;IAC5D,OAAO,CAAC,6BAA6B,CAGjC;IACJ,OAAO,CAAC,sCAAsC,CAG1C;IAEJ,6DAA6D;IAC7D,OAAO,CAAC,aAAa,CAAwC;IAC7D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqC;IAC/D,mDAAmD;IACnD,OAAO,CAAC,cAAc,CAAgD;IACtE,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA2B;IAChE,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAErC;IACF,OAAO,CAAC,QAAQ,CAAC,gCAAgC,CAY/C;IACF,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAIxC;IACF,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAEzC;IACF,OAAO,CAAC,QAAQ,CAAC,+BAA+B,CAQ9C;IACF,OAAO,CAAC,QAAQ,CAAC,gCAAgC,CAI/C;IACF,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAwC;IAC3E,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAA+B;IACxE,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAQrC;IAEF,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IA0BtC,0BAA0B,CAC9B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,yBAAyB,GACnC,OAAO,CAAC,IAAI,CAAC;IAShB,SAAS,CAAC,gCAAgC,CACxC,SAAS,EAAE,MAAM,GAChB,MAAM,GAAG,SAAS;cAgBL,iCAAiC,CAC/C,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,gCAAgC,GAAG,SAAS,CAAC;cA4BxC,iCAAiC,CAC/C,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,gCAAgC,GACzC,OAAO,CAAC,IAAI,CAAC;IAsBhB;;;;;OAKG;cACa,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC;YAIF,SAAS;YAiET,UAAU;IAwDxB,OAAO,CAAC,YAAY;IAkCpB,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,YAAY;IAMd,yBAAyB,CAC7B,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,IAAI,CAAC;IAoIhB,OAAO,CAAC,mBAAmB;IAqF3B,OAAO,CAAC,oBAAoB;IAiG5B,OAAO,CAAC,+BAA+B;IAiCvC,OAAO,CAAC,8BAA8B;IActC,OAAO,CAAC,sBAAsB;YA2EhB,kBAAkB;IAkChC,OAAO,CAAC,wBAAwB;IA2BhC,0BAA0B,CAAC,KAAK,EAAE,uBAAuB,GAAG,IAAI;gBAY9D,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,kBAAkB,EAC1B,OAAO,CAAC,EAAE,kBAAkB;IA2G9B,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IACjC,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IACjE,QAAQ,CAAC,UAAU,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAE3C,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIlC;;;;OAIG;cACa,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC;IAOhB;;;;;OAKG;IACH,SAAS,CAAC,eAAe,CACvB,MAAM,EAAE,yBAAyB,GAChC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAEP,uBAAuB,CACrC,QAAQ,EAAE,8BAA8B,GACvC,OAAO,CAAC,2BAA2B,CAAC;cAIvB,wBAAwB,CACtC,QAAQ,EAAE,+BAA+B,GACxC,OAAO,CAAC,2BAA2B,CAAC;IAIvC,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,oBAAoB;IAuB5B,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,kBAAkB;IAUpB,gBAAgB,CACpB,MAAM,EAAE,sBAAsB,EAC9B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC;IA4ChB,oEAAoE;IACpE,OAAO,CAAC,cAAc,CAAC,CAAS;IAEhC,OAAO,CAAC,qBAAqB;IAwB7B,OAAO,CAAC,kCAAkC;IAI1C,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,oBAAoB;IAsC5B,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,kBAAkB;YAWZ,sBAAsB;IAgBpC,qBAAqB,IAAI,OAAO;IAIhC,SAAS,CAAC,uBAAuB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO;IAIjE,SAAS,CAAC,+BAA+B,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO;IAIzE,SAAS,CAAC,8BAA8B,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO;cAIxD,aAAa,CAC3B,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC;cAcA,qBAAqB,CACnC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC;YAeF,+BAA+B;IA+D7C,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,sBAAsB;IAa9B,OAAO,CAAC,wBAAwB;IAUhC,OAAO,CAAC,iCAAiC;IAWzC,OAAO,CAAC,iCAAiC;YAkB3B,2BAA2B;IA4EzC,OAAO,CAAC,0BAA0B;IAqBlC,OAAO,CAAC,kCAAkC;IAsC1C,uEAAuE;IACvE,SAAS,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAgBrC,aAAa,CACjB,GAAG,EAAE,WAAW,EAChB,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IA4S9B,mBAAmB,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI;IAInD,OAAO,CAAC,wBAAwB;IAmC1B,cAAc,CAClB,IAAI,EAAE,kBAAkB,EACxB,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IA0O9B,OAAO,CAAC,sBAAsB;YAOhB,mBAAmB;YAuCnB,wBAAwB;IAwCtC,OAAO,CAAC,qBAAqB;IAoB7B,SAAS,CAAC,+BAA+B,CACvC,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,gBAAgB,GAAG,OAAO,GAAG,OAA0B,GAC9D,OAAO,CAAC,OAAO,CAAC;IAwDnB,SAAS,CAAC,4BAA4B,CACpC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,gBAAgB,GAAG,OAAO,GAAG,OAA0B,GAC9D,OAAO,CAAC,OAAO,CAAC;IAQnB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,yBAAyB;IAgBjC,OAAO,CAAC,uBAAuB;IAM/B,OAAO,CAAC,uBAAuB;YAMjB,qBAAqB;IAqBnC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI;IAExD,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAQtC;;;;;OAKG;IACH,oBAAoB,IAAI,IAAI;IAE5B,SAAS,CAAC,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAErD,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,kBAAkB;IAS1B;;;;OAIG;IACH,SAAS,CAAC,aAAa,CACrB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,MAAM,GAClB,IAAI;IAEP,SAAS,CAAC,gBAAgB,CACxB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,MAAM,GAClB,IAAI;IAEP,SAAS,CAAC,qBAAqB,CAC7B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EAAE,GACpB,IAAI;IAEP,SAAS,CAAC,qBAAqB,CAC7B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EAAE,GACpB,IAAI;IAEP;;;OAGG;IACH,SAAS,CAAC,WAAW,CACnB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,MAAM,GAClB,IAAI;IAEP;;;;OAIG;IACH,SAAS,CAAC,eAAe,CACvB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,2BAA2B,GACrC,IAAI;IAEP,SAAS,CAAC,kBAAkB,CAC1B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,2BAA2B,EACrC,MAAM,EAAE,6BAA6B,GACpC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvB;;;OAGG;IACH,SAAS,CAAC,kBAAkB,CAC1B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAEP,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC;IAYhB;;;OAGG;IACH,SAAS,CAAC,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIrE,SAAS,CAAC,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIpE,SAAS,CAAC,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIpE,SAAS,CAAC,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIvE,SAAS,CAAC,0BAA0B,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS;IAI5E;;;OAGG;IACH,SAAS,CAAC,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAOpE;;;;OAIG;cACa,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,2BAA2B,GACpC,OAAO,CAAC,IAAI,CAAC;IAShB;;;;OAIG;IACH,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI;IAItE,SAAS,CAAC,qBAAqB,CAAC,IAAI,SAAW,GAAG,IAAI;IAoDtD,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,8BAA8B;IActC,OAAO,CAAC,uBAAuB;IAuB/B,OAAO,CAAC,kCAAkC;IAY1C,OAAO,CAAC,uBAAuB;IAM/B,OAAO,CAAC,eAAe;IAqBvB,OAAO,CAAC,yBAAyB;IAsBjC,OAAO,CAAC,4BAA4B;IA2CpC,OAAO,CAAC,kCAAkC;IAc1C,OAAO,CAAC,uBAAuB;IAuC/B,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,0BAA0B;IA2BlC,OAAO,CAAC,qBAAqB;IAU7B,OAAO,CAAC,8BAA8B;IA+BtC,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,oBAAoB;IAsB5B,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,YAAY;YAeN,+BAA+B;IA+I7C,OAAO,CAAC,iBAAiB;YAWX,gBAAgB;IAiB9B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,uBAAuB;IAQ/B;;;;;;OAMG;IACH,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,wBAAwB;YAUlB,uBAAuB;IA4BrC,OAAO,CAAC,kBAAkB;IAoB1B;;;;;;;;;;;;OAYG;YACW,uBAAuB;YA0CvB,gBAAgB;YAahB,qBAAqB;YAqBrB,0BAA0B;YA6C1B,yBAAyB;IAqIvC,+DAA+D;IAC/D,OAAO,CAAC,sBAAsB;YA4ZhB,iBAAiB;YAyCjB,aAAa;YA4Gb,kBAAkB;YAoFlB,iBAAiB;YAajB,kBAAkB;YAkBlB,cAAc;YAsBd,iBAAiB;IAsD/B,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,kBAAkB;YAQZ,gBAAgB;IAmC9B,OAAO,CAAC,sBAAsB;IAa9B,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,4BAA4B;IA6BpC,kEAAkE;IAClE,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAK/C,OAAO,CAAC,mBAAmB;YAab,wBAAwB;IAStC,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,0BAA0B;IAiBlC,OAAO,CAAC,kCAAkC;IAa1C,OAAO,CAAC,yBAAyB;IAIjC,OAAO,CAAC,0BAA0B;IAmClC,OAAO,CAAC,qBAAqB;YA2Bf,gBAAgB;IAc9B,OAAO,CAAC,0BAA0B;IAQlC,OAAO,CAAC,4BAA4B;IAUpC,OAAO,CAAC,6BAA6B;YAMvB,yBAAyB;IA4ZvC,OAAO,CAAC,iCAAiC;IAUzC,OAAO,CAAC,uBAAuB;YASjB,mCAAmC;IAgCjD,OAAO,CAAC,gCAAgC;IAsBxC,OAAO,CAAC,kCAAkC;YAM5B,2BAA2B;IAwKzC,OAAO,CAAC,yBAAyB;IAIjC,OAAO,CAAC,6BAA6B;IAIrC,OAAO,CAAC,qBAAqB;IAgB7B;;;;;;;;;OASG;IACH,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,qBAAqB;IAQ7B;;;;;OAKG;IACH,OAAO,CAAC,4BAA4B;IAIpC,OAAO,CAAC,oCAAoC;IAU5C,OAAO,CAAC,uBAAuB;IAW/B,OAAO,CAAC,cAAc;IAKtB;;;;;;;;;OASG;YACW,oBAAoB;IAyBlC;;;;;;OAMG;IACH,OAAO,CAAC,YAAY;IAsBpB;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,cAAc;IAmBtB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,mBAAmB;IA2B3B;;;;;;;OAOG;IACH,OAAO,CAAC,0BAA0B;IAWlC,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,iBAAiB;IAiBzB,SAAS,CAAC,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAkC7D,OAAO,CAAC,wBAAwB;IA2BhC,OAAO,CAAC,yBAAyB;IAcjC,OAAO,CAAC,wBAAwB;IAiBhC,OAAO,CAAC,0BAA0B;IA6BlC,SAAS,CAAC,aAAa,CAAC,MAAM,EAAE;QAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,UAAU;IAWd,OAAO,CAAC,eAAe;IAQvB;;;;;OAKG;IACH,SAAS,CAAC,sBAAsB,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO;IAItE,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,cAAc;IAKtB,SAAS,CAAC,gBAAgB,CACxB,QAAQ,EAAE,QAAQ,EAClB,OAAO,GAAE,uBAA4B,GACpC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAuF7B,SAAS,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IASpD,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAkB7D,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;cAMtC,wBAAwB,CACtC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,MAAM,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,EACtC,gBAAgB,GAAE,uBAA4B,GAC7C,OAAO,CAAC,IAAI,CAAC;cAyCA,yBAAyB,CACvC,QAAQ,EAAE,QAAQ,EAClB,OAAO,GAAE,MAAM,OAAO,CAAC,IAAI,CAAuC,GACjE,OAAO,CAAC,IAAI,CAAC;cAYA,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAyCxE,SAAS,CAAC,iBAAiB,CAAC,SAAS,EAAE,QAAQ,GAAG,IAAI;IAEtD;;;;OAIG;IACH,SAAS,CAAC,yBAAyB,IAC/B,2BAA2B,GAC3B,SAAS;IAcb,SAAS,CAAC,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM;IAK1E,SAAS,CAAC,4BAA4B,CACpC,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM;IAST,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,iBAAiB;IAkBzB,OAAO,CAAC,mBAAmB;IAyB3B,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,kBAAkB;IAY1B,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAInD,OAAO,CAAC,iBAAiB;IAsBzB,8EAA8E;YAChE,qBAAqB;IAUnC;;;;;;OAMG;cACa,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA05BjE,OAAO,CAAC,uBAAuB;IAQ/B,OAAO,CAAC,4BAA4B;cAUpB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,0BAA0B,EAClC,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;cAgBA,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,0BAA0B,EAClC,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;CAmBjB"}
@@ -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 = config.senderPolicy === 'pairing' || config.groupPolicy === 'pairing'
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(config.dmPolicy);
884
- this.gate = new SenderGate(config.senderPolicy, config.allowedUsers, pairingStore);
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 authorized senders (config.allowedUsers, when set) and require an
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.config.senderPolicy;
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.isGroup && this.config.groupPolicy === 'pairing'
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 act on the resolved session's destructive or
3972
- * workspace-leaking commands (/clear, /who). A SHARED session with a non-empty
3973
- * allowedUsers list is restricted to those members; a per-user session, or one
3974
- * with no allowlist, is unrestricted. Shared verbatim by /clear and /who so the
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.isAuthorizedForSharedSessionTarget(envelope);
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
- const authorized = this.config.allowedUsers;
3990
- if (authorized.length === 0)
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.config.groupPolicy !== 'pairing' &&
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 lines = this.config.groupPolicy === 'pairing'
4248
- ? entries
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
- if (envelope.isGroup && this.config.groupPolicy === 'pairing') {
4295
- this.markPreflighted(envelope);
4296
- return true;
4297
- }
4350
+ const senderGate = this.senderGateFor(envelope);
4298
4351
  if (options.deferPairingRequests === true &&
4299
- this.config.senderPolicy === 'pairing' &&
4300
- !this.gate.isAllowed(envelope.senderId)) {
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 = this.gate.check(envelope.senderId, envelope.senderName);
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 groupCfg = envelope.isGroup
4819
- ? this.config.groups[envelope.chatId] || this.config.groups['*']
4889
+ const groupMode = envelope.isGroup
4890
+ ? (this.groupConfigFor(envelope.chatId)?.dispatchMode ??
4891
+ this.groupConfigFor('*')?.dispatchMode)
4820
4892
  : undefined;
4821
- const mode = groupCfg?.dispatchMode || this.config.dispatchMode || 'steer';
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,