@qwen-code/channel-base 0.23.1 → 0.23.2-nightly.20260909.2e212144d3

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
@@ -89,7 +89,6 @@ Inbound: Platform message
89
89
  → ChannelAgentBridge.prompt() → agent
90
90
 
91
91
  Outbound: Agent response
92
- → BlockStreamer (if enabled: split into blocks at paragraph boundaries)
93
92
  → sendMessage() → platform
94
93
  ```
95
94
 
@@ -103,7 +102,6 @@ Everything between `handleInbound()` and `sendMessage()` is handled by the base
103
102
  | --------------- | ------------------------------------------------------------------------------------ |
104
103
  | `ChannelBase` | Abstract base class — extend this to build a channel adapter |
105
104
  | `AcpBridge` | Current standalone `qwen channel start` bridge implementation over `qwen-code --acp` |
106
- | `BlockStreamer` | Progressive multi-message delivery for block streaming |
107
105
  | `SessionRouter` | Maps senders to agent sessions with configurable scoping |
108
106
  | `SenderGate` | DM access control (allowlist / pairing / open) |
109
107
  | `GroupGate` | Group chat policy and @mention gating |
@@ -154,8 +152,6 @@ constructor(name: string, config: ChannelConfig, bridge: ChannelAgentBridge, opt
154
152
  | `onResponseChunk(chatId, chunk, sessionId, segment)` | Hook called per streaming text chunk — override for progressive display while preserving immutable `segment.sourceLabel` attribution (default: no-op) |
155
153
  | `onResponseComplete(chatId, fullText, sessionId, segment)` | Hook called when full response is ready — override to customize delivery (default: attributes delivery with `segment.sourceLabel` in named-task mode) |
156
154
 
157
- **Block streaming:** When `blockStreaming: "on"` is set in the channel config, the base class automatically splits the agent's streaming response into multiple messages at paragraph boundaries. See [Block Streaming](#block-streaming) below.
158
-
159
155
  **Built-in slash commands:** `/clear` (`/reset`, `/new`), `/help`, `/status`
160
156
 
161
157
  **ChannelBaseOptions:**
@@ -363,27 +359,11 @@ interface Attachment {
363
359
 
364
360
  `handleInbound()` automatically resolves attachments: images with `data` are sent to the model as vision input, files with `filePath` get their path appended to the prompt text so the agent can read them with its tools.
365
361
 
366
- ## Block Streaming
367
-
368
- When `blockStreaming: "on"` is set in a channel's config, the agent's response is delivered as multiple separate messages instead of one large wall of text. The `BlockStreamer` accumulates streaming chunks and emits completed blocks based on paragraph boundaries and size heuristics.
369
-
370
- **Config fields** (on `ChannelConfig`):
371
-
372
- | Field | Type | Default | Description |
373
- | ------------------------ | ------------------------ | --------------- | --------------------------------------------------------------------------- |
374
- | `blockStreaming` | `'on' \| 'off'` | `'off'` | Enable/disable block streaming |
375
- | `blockStreamingChunk` | `{ minChars, maxChars }` | `{ 400, 1000 }` | `minChars`: don't emit until this size. `maxChars`: force-emit at this size |
376
- | `blockStreamingCoalesce` | `{ idleMs }` | `{ 1500 }` | Emit buffered text after this many ms of silence from the agent |
377
-
378
- **How it works:**
362
+ ## Response delivery
379
363
 
380
- 1. Text accumulates as the agent streams its response
381
- 2. When the buffer reaches `minChars` and hits a paragraph break (`\n\n`), that block is sent as a separate message
382
- 3. If the buffer reaches `maxChars` without a paragraph break, it force-splits at the best break point (newline > space)
383
- 4. If the agent goes quiet for `idleMs`, the buffer is flushed (as long as it's past `minChars`)
384
- 5. When the agent finishes, any remaining text is sent immediately regardless of `minChars`
364
+ For an inbound turn the base class forwards streaming chunks to adapter callbacks and routes the completed response through `onResponseComplete`. Scheduled loop runs, webhook-triggered tasks, and background replies forward chunks the same way but deliver through `pushProactive` / `deliverBackgroundReply`, so an adapter that enables proactive send must not treat `onResponseComplete` as its only delivery seam. Adapters may provide native progressive display, such as updating an existing card in place. Platform length splitting is unchanged.
385
365
 
386
- Block streaming and `onResponseChunk` work independently — plugins can override `onResponseChunk` for their own purposes while block streaming handles delivery.
366
+ The obsolete `blockStreaming`, `blockStreamingChunk`, and `blockStreamingCoalesce` settings have been removed. The base class no longer sends separate messages at paragraph boundaries or after an idle timer.
387
367
 
388
368
  ## Further reading
389
369
 
@@ -1,4 +1,4 @@
1
- import type { ChannelConfig, ChannelMemoryCallbacks, ChannelMemoryIntentClassifier, ChannelOutputSegmentContext, ChannelOutputSegmentEndReason, 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, 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';
@@ -32,6 +32,7 @@ export interface ChannelMemoryRecallObservation {
32
32
  result: ChannelMemoryRecallResult;
33
33
  }
34
34
  export interface ChannelBaseOptions {
35
+ locale?: 'en' | 'zh';
35
36
  router?: SessionRouter;
36
37
  proxy?: string;
37
38
  /** Qwen UI language used by adapter-owned presentation. */
@@ -89,6 +90,7 @@ export declare abstract class ChannelBase {
89
90
  protected proxy?: string;
90
91
  /** Adapter-owned persistent state directory, when supplied by the runtime. */
91
92
  protected readonly stateDir?: string;
93
+ protected readonly locale: 'en' | 'zh';
92
94
  private readonly channelMemory?;
93
95
  private readonly memoryIntentClassifier?;
94
96
  private readonly channelMemoryRecallObserver?;
@@ -154,6 +156,9 @@ export declare abstract class ChannelBase {
154
156
  private cancelAllBtw;
155
157
  dispatchPermissionRequest(event: PermissionRequestEvent): Promise<void>;
156
158
  private tryPresentUserInput;
159
+ private tryPresentPermission;
160
+ private permissionPresentationDecisions;
161
+ private permissionPresentationResponse;
157
162
  private normalizeUserQuestions;
158
163
  private respondToUserInput;
159
164
  private permissionTargetForEvent;
@@ -177,6 +182,7 @@ export declare abstract class ChannelBase {
177
182
  */
178
183
  protected onTaskLifecycle(_event: ChannelTaskLifecycleEvent): void | Promise<void>;
179
184
  protected presentUserInputRequest(_context: ChannelUserInputRequestContext): Promise<UserInputPresentationResult>;
185
+ protected presentPermissionRequest(_context: ChannelPermissionRequestContext): Promise<UserInputPresentationResult>;
180
186
  private emitTaskLifecycle;
181
187
  private logTaskLifecycleError;
182
188
  private lifecycleError;
@@ -307,6 +313,7 @@ export declare abstract class ChannelBase {
307
313
  private permissionToolName;
308
314
  private permissionParameterSummary;
309
315
  private permissionOptionLabel;
316
+ private localizedPermissionOptionLabel;
310
317
  private approvalOption;
311
318
  private approvalOptionId;
312
319
  private approvalAlwaysOption;
@@ -415,10 +422,8 @@ export declare abstract class ChannelBase {
415
422
  private isAuthorizedForSharedSessionTarget;
416
423
  private isAuthorizedForSharedSessionToolCall;
417
424
  private toolCallerName;
418
- private stopActiveStreaming;
419
425
  /**
420
- * Cancel the active turn and wait (bounded) for it to wind down. Stops the
421
- * BlockStreamer so buffered text can't leak via the idle timer, then fires a
426
+ * Cancel the active turn and wait (bounded) for it to wind down. Fires a
422
427
  * best-effort cancelSession (NOT awaited — a wedged child/daemon can leave the
423
428
  * request pending forever). Returns true if active.done settled first, false
424
429
  * if the CLEAR_CANCEL_TIMEOUT_MS bound won (the turn never wound down). Used by
@@ -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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"}
@@ -1,6 +1,5 @@
1
1
  import { basename, join } from 'node:path';
2
2
  import { randomUUID } from 'node:crypto';
3
- import { BlockStreamer } from './BlockStreamer.js';
4
3
  import { ChannelProactiveDeliveryError, isChannelProactiveDeliveryError, } from './ChannelProactiveDeliveryError.js';
5
4
  import { GroupGate } from './GroupGate.js';
6
5
  import { DmGate } from './DmGate.js';
@@ -68,6 +67,48 @@ const SENSITIVE_PAYLOAD_KEY_PATTERN = new RegExp([
68
67
  function isRecord(value) {
69
68
  return value !== null && typeof value === 'object' && !Array.isArray(value);
70
69
  }
70
+ const PERMISSION_COPY = {
71
+ en: {
72
+ toolUse: 'Tool use',
73
+ allowOnce: 'Allow once',
74
+ allowAlwaysProject: 'always allow for this project',
75
+ allowAlwaysUser: 'always allow for this user',
76
+ allowAlways: 'always allow',
77
+ deny: 'Deny',
78
+ required: 'Permission required to run a tool',
79
+ request: 'Request:',
80
+ tool: 'Tool:',
81
+ action: 'Action:',
82
+ parameters: 'Parameters:',
83
+ replyWith: 'Reply with:',
84
+ },
85
+ zh: {
86
+ toolUse: '工具调用',
87
+ allowOnce: '仅允许本次',
88
+ allowAlwaysProject: '始终允许此项目',
89
+ allowAlwaysUser: '始终允许此用户',
90
+ allowAlways: '始终允许',
91
+ deny: '拒绝',
92
+ required: '运行工具需要授权',
93
+ request: '请求:',
94
+ tool: '工具:',
95
+ action: '操作:',
96
+ parameters: '参数:',
97
+ replyWith: '回复以下命令:',
98
+ },
99
+ };
100
+ /**
101
+ * Translate the stock prefix of a scoped always-allow label, keeping the
102
+ * command/tool scope that exec and mcp confirmations append to it.
103
+ */
104
+ function localizedScopedAlwaysLabel(label, stockLabel, localizedLabel) {
105
+ if (label === stockLabel)
106
+ return localizedLabel;
107
+ const scopeSeparator = ': ';
108
+ if (!label.startsWith(stockLabel + scopeSeparator))
109
+ return undefined;
110
+ return `${localizedLabel}:${label.slice(stockLabel.length + scopeSeparator.length)}`;
111
+ }
71
112
  /**
72
113
  * Character class (sans the enclosing `[]`) for a slash-command token: alphanumerics
73
114
  * plus `_`, `:` and `-`, so hyphenated and namespaced agent commands (e.g.
@@ -115,6 +156,7 @@ export class ChannelBase {
115
156
  proxy;
116
157
  /** Adapter-owned persistent state directory, when supplied by the runtime. */
117
158
  stateDir;
159
+ locale;
118
160
  channelMemory;
119
161
  memoryIntentClassifier;
120
162
  channelMemoryRecallObserver;
@@ -486,6 +528,10 @@ export class ChannelBase {
486
528
  if (presentation && (await presentation)) {
487
529
  return;
488
530
  }
531
+ const permissionPresentation = this.tryPresentPermission(pending);
532
+ if (permissionPresentation && (await permissionPresentation)) {
533
+ return;
534
+ }
489
535
  const text = this.formatPermissionRequest(pending);
490
536
  if (target.threadId !== undefined &&
491
537
  this.supportsProactiveSend() &&
@@ -576,6 +622,117 @@ export class ChannelBase {
576
622
  }
577
623
  })();
578
624
  }
625
+ tryPresentPermission(pending) {
626
+ const active = this.activePrompts.get(pending.sessionId);
627
+ const toolCall = pending.request.toolCall;
628
+ const meta = isRecord(toolCall['_meta']) ? toolCall['_meta'] : undefined;
629
+ const isUserQuestion = meta?.['qwenInteractionKind'] === 'user_question' ||
630
+ meta?.['toolName'] === 'ask_user_question' ||
631
+ toolCall['kind'] === 'ask_user_question';
632
+ const decisions = this.permissionPresentationDecisions(pending);
633
+ if (!active ||
634
+ active.loopPrompt ||
635
+ !active.owner ||
636
+ isUserQuestion ||
637
+ !decisions) {
638
+ return undefined;
639
+ }
640
+ const precedingSegment = this.closeOutputSegment(pending.sessionId, active, pending.target);
641
+ let respondInvoked = false;
642
+ const context = {
643
+ requestId: pending.requestId,
644
+ sessionId: pending.sessionId,
645
+ runId: active.runId,
646
+ owner: active.owner,
647
+ target: pending.target,
648
+ ...(precedingSegment
649
+ ? { precedingSegmentId: precedingSegment.segmentId }
650
+ : {}),
651
+ title: this.permissionTitle(pending.request.toolCall),
652
+ decisions,
653
+ onSettled: (listener) => {
654
+ if (pending.settled) {
655
+ listener(pending.settled);
656
+ return () => { };
657
+ }
658
+ pending.settlementListeners.add(listener);
659
+ return () => {
660
+ pending.settlementListeners.delete(listener);
661
+ };
662
+ },
663
+ respond: (decision) => {
664
+ const response = this.permissionPresentationResponse(pending, decision);
665
+ if (!response)
666
+ return Promise.resolve(false);
667
+ respondInvoked = true;
668
+ return this.respondToUserInput(pending, response);
669
+ },
670
+ };
671
+ pending.permissionPresented = true;
672
+ return (async () => {
673
+ try {
674
+ if (precedingSegment) {
675
+ await this.notifyOutputSegmentEnd(pending.target.chatId, pending.sessionId, precedingSegment, 'input_requested');
676
+ }
677
+ if (this.pendingPermissions.get(pending.requestId) !== pending) {
678
+ return true;
679
+ }
680
+ const result = await this.presentPermissionRequest(context);
681
+ if (this.pendingPermissions.get(pending.requestId) !== pending) {
682
+ return true;
683
+ }
684
+ if (result.kind === 'presented' ||
685
+ (result.kind === 'handled' && respondInvoked)) {
686
+ return true;
687
+ }
688
+ pending.permissionPresented = false;
689
+ return false;
690
+ }
691
+ catch (err) {
692
+ process.stderr.write(`[${this.name}] permission presentation failed for request ${sanitizeLogText(pending.requestId, 128)}: ${this.lifecycleError(err)}\n`);
693
+ if (this.pendingPermissions.get(pending.requestId) !== pending) {
694
+ return true;
695
+ }
696
+ pending.permissionPresented = false;
697
+ return false;
698
+ }
699
+ })();
700
+ }
701
+ permissionPresentationDecisions(pending) {
702
+ const allowOnce = this.approvalOption(pending);
703
+ if (!allowOnce)
704
+ return undefined;
705
+ const copy = PERMISSION_COPY[this.locale];
706
+ const allowAlways = this.approvalAlwaysOption(pending);
707
+ return [
708
+ {
709
+ kind: 'allow_once',
710
+ label: sanitizeQuotedText(this.permissionOptionLabel(allowOnce, copy.allowOnce), 80),
711
+ },
712
+ ...(allowAlways
713
+ ? [
714
+ {
715
+ kind: 'allow_always',
716
+ label: sanitizeQuotedText(allowAlways.label, 80),
717
+ },
718
+ ]
719
+ : []),
720
+ {
721
+ kind: 'deny',
722
+ label: sanitizeQuotedText(this.permissionOptionLabel(this.denialOption(pending), copy.deny), 80),
723
+ },
724
+ ];
725
+ }
726
+ permissionPresentationResponse(pending, decision) {
727
+ if (decision === 'deny')
728
+ return this.denialResponse(pending);
729
+ const optionId = decision === 'allow_once'
730
+ ? this.approvalOptionId(pending)
731
+ : this.approvalAlwaysOption(pending)?.optionId;
732
+ return optionId
733
+ ? { outcome: { outcome: 'selected', optionId } }
734
+ : undefined;
735
+ }
579
736
  normalizeUserQuestions(pending) {
580
737
  const toolCall = pending.request.toolCall;
581
738
  const meta = isRecord(toolCall['_meta']) ? toolCall['_meta'] : undefined;
@@ -639,7 +796,8 @@ export class ChannelBase {
639
796
  }
640
797
  async respondToUserInput(pending, response) {
641
798
  if (pending.responsePromise) {
642
- return pending.responsePromise;
799
+ await pending.responsePromise;
800
+ return false;
643
801
  }
644
802
  if (this.pendingPermissions.get(pending.requestId) !== pending ||
645
803
  !this.bridge.respondToPermission) {
@@ -699,6 +857,7 @@ export class ChannelBase {
699
857
  this.config = config;
700
858
  this.messagePrefix = config.messagePrefix?.trim() || undefined;
701
859
  this.bridge = bridge;
860
+ this.locale = options?.locale ?? 'en';
702
861
  this.proxy = options?.proxy;
703
862
  this.stateDir = options?.stateDir;
704
863
  this.identity = Object.freeze(this.resolveIdentity(name, config));
@@ -770,6 +929,9 @@ export class ChannelBase {
770
929
  async presentUserInputRequest(_context) {
771
930
  return { kind: 'unsupported' };
772
931
  }
932
+ async presentPermissionRequest(_context) {
933
+ return { kind: 'unsupported' };
934
+ }
773
935
  emitTaskLifecycle(event) {
774
936
  try {
775
937
  const result = this.onTaskLifecycle(event);
@@ -1734,7 +1896,6 @@ export class ChannelBase {
1734
1896
  return false;
1735
1897
  }
1736
1898
  active.cancelled = true;
1737
- this.stopActiveStreaming(active, sessionId, reason);
1738
1899
  this.dropCollectBuffer(sessionId);
1739
1900
  this.removePendingPermissionsForSession(sessionId, 'run_cancelled');
1740
1901
  this.emitTaskCancellation(active, sessionId, reason);
@@ -2058,17 +2219,18 @@ export class ChannelBase {
2058
2219
  canEnvelopeAnswerPendingPermission(envelope, pending) {
2059
2220
  return (pending.target.chatId === envelope.chatId &&
2060
2221
  pending.target.threadId === envelope.threadId &&
2061
- (!pending.userInputPresented ||
2222
+ ((!pending.userInputPresented && !pending.permissionPresented) ||
2062
2223
  pending.target.senderId === envelope.senderId) &&
2063
2224
  (this.isSharedSessionTarget(pending.target) ||
2064
2225
  pending.target.senderId === envelope.senderId));
2065
2226
  }
2066
2227
  formatPermissionRequest(pending) {
2067
2228
  const { toolCall } = pending.request;
2229
+ const copy = PERMISSION_COPY[this.locale];
2068
2230
  const parameters = this.permissionParameterSummary(toolCall);
2069
- const approveLabel = this.permissionOptionLabel(this.approvalOption(pending), 'allow once');
2231
+ const approveLabel = this.permissionOptionLabel(this.approvalOption(pending), copy.allowOnce.toLocaleLowerCase(this.locale));
2070
2232
  const alwaysOption = this.approvalAlwaysOption(pending);
2071
- const denyLabel = this.permissionOptionLabel(this.denialOption(pending), 'deny');
2233
+ const denyLabel = this.permissionOptionLabel(this.denialOption(pending), copy.deny.toLocaleLowerCase(this.locale));
2072
2234
  const requestSuffix = pending.taskName ? ` ${pending.requestId}` : '';
2073
2235
  const replyPadding = pending.taskName
2074
2236
  ? { approve: ' ', always: ' ', deny: ' ' }
@@ -2083,14 +2245,14 @@ export class ChannelBase {
2083
2245
  `${this.prefixedCommand(`/deny${requestSuffix}`)}${replyPadding.deny}${denyLabel}`,
2084
2246
  ];
2085
2247
  return [
2086
- 'Permission required to run a tool',
2087
- ...(pending.taskName ? [`Request: ${pending.requestId}`] : []),
2248
+ copy.required,
2249
+ ...(pending.taskName ? [`${copy.request} ${pending.requestId}`] : []),
2088
2250
  '',
2089
- `Tool: ${this.permissionToolName(toolCall)}`,
2090
- `Action: ${this.permissionTitle(toolCall)}`,
2091
- ...(parameters ? [`Parameters: ${parameters}`] : []),
2251
+ `${copy.tool} ${this.permissionToolName(toolCall)}`,
2252
+ `${copy.action} ${this.permissionTitle(toolCall)}`,
2253
+ ...(parameters ? [`${copy.parameters} ${parameters}`] : []),
2092
2254
  '',
2093
- 'Reply with:',
2255
+ copy.replyWith,
2094
2256
  ...replies,
2095
2257
  ].join('\n');
2096
2258
  }
@@ -2102,7 +2264,8 @@ export class ChannelBase {
2102
2264
  }
2103
2265
  permissionTitle(toolCall) {
2104
2266
  const rawTitle = typeof toolCall.title === 'string' ? toolCall.title : undefined;
2105
- return sanitizeQuotedText(rawTitle || '', 160).trim() || 'Tool use';
2267
+ return (sanitizeQuotedText(rawTitle || '', 160).trim() ||
2268
+ PERMISSION_COPY[this.locale].toolUse);
2106
2269
  }
2107
2270
  permissionToolName(toolCall) {
2108
2271
  const rawToolCall = toolCall;
@@ -2146,7 +2309,31 @@ export class ChannelBase {
2146
2309
  permissionOptionLabel(option, fallback) {
2147
2310
  const rawLabel = typeof option?.name === 'string' ? option.name : '';
2148
2311
  const label = sanitizeQuotedText(rawLabel, 160).trim();
2149
- return label || fallback;
2312
+ if (!label)
2313
+ return fallback;
2314
+ return this.localizedPermissionOptionLabel(option, label) ?? label;
2315
+ }
2316
+ localizedPermissionOptionLabel(option, label) {
2317
+ if (this.locale !== 'zh')
2318
+ return undefined;
2319
+ const copy = PERMISSION_COPY[this.locale];
2320
+ if (option?.kind === 'allow_always') {
2321
+ if (option.optionId === 'proceed_always_project') {
2322
+ return localizedScopedAlwaysLabel(label, 'Always Allow in project', copy.allowAlwaysProject);
2323
+ }
2324
+ if (option.optionId === 'proceed_always_user') {
2325
+ return localizedScopedAlwaysLabel(label, 'Always Allow for user', copy.allowAlwaysUser);
2326
+ }
2327
+ if (option.optionId === 'proceed_always' && label === 'Allow All Edits') {
2328
+ return copy.allowAlways;
2329
+ }
2330
+ return undefined;
2331
+ }
2332
+ if (label === 'Allow' || label === 'Allow once')
2333
+ return copy.allowOnce;
2334
+ if (label === 'Deny' || label === 'Reject')
2335
+ return copy.deny;
2336
+ return undefined;
2150
2337
  }
2151
2338
  approvalOption(pending) {
2152
2339
  const options = pending.request.options;
@@ -2174,13 +2361,14 @@ export class ChannelBase {
2174
2361
  return options.find((option) => option.optionId === `proceed_always_${scope}`);
2175
2362
  }
2176
2363
  approvalAlwaysLabel(option) {
2364
+ const copy = PERMISSION_COPY[this.locale];
2177
2365
  if (option.optionId === 'proceed_always_project') {
2178
- return 'always allow for this project';
2366
+ return copy.allowAlwaysProject;
2179
2367
  }
2180
2368
  if (option.optionId === 'proceed_always_user') {
2181
- return 'always allow for this user';
2369
+ return copy.allowAlwaysUser;
2182
2370
  }
2183
- return 'always allow';
2371
+ return copy.allowAlways;
2184
2372
  }
2185
2373
  denialResponse(pending) {
2186
2374
  const option = this.denialOption(pending);
@@ -2265,9 +2453,10 @@ export class ChannelBase {
2265
2453
  }
2266
2454
  let accepted;
2267
2455
  try {
2268
- accepted = pending.userInputPresented
2269
- ? await this.respondToUserInput(pending, response)
2270
- : await this.bridge.respondToPermission(pending.requestId, response);
2456
+ accepted =
2457
+ pending.userInputPresented || pending.permissionPresented
2458
+ ? await this.respondToUserInput(pending, response)
2459
+ : await this.bridge.respondToPermission(pending.requestId, response);
2271
2460
  }
2272
2461
  catch (err) {
2273
2462
  this.removePendingPermission(pending.requestId);
@@ -3807,17 +3996,8 @@ export class ChannelBase {
3807
3996
  const active = this.activePrompts.get(sessionId);
3808
3997
  return active?.senderName || active?.senderId || target.senderId || 'agent';
3809
3998
  }
3810
- stopActiveStreaming(active, sessionId, reason) {
3811
- try {
3812
- active.stopStreaming?.();
3813
- }
3814
- catch (err) {
3815
- process.stderr.write(`[${this.name}] stopStreaming threw during ${reason} for session ${sessionId}: ${err instanceof Error ? err.message : err}\n`);
3816
- }
3817
- }
3818
3999
  /**
3819
- * Cancel the active turn and wait (bounded) for it to wind down. Stops the
3820
- * BlockStreamer so buffered text can't leak via the idle timer, then fires a
4000
+ * Cancel the active turn and wait (bounded) for it to wind down. Fires a
3821
4001
  * best-effort cancelSession (NOT awaited — a wedged child/daemon can leave the
3822
4002
  * request pending forever). Returns true if active.done settled first, false
3823
4003
  * if the CLEAR_CANCEL_TIMEOUT_MS bound won (the turn never wound down). Used by
@@ -3828,7 +4008,6 @@ export class ChannelBase {
3828
4008
  */
3829
4009
  async cancelAndAwaitActive(active, sessionId) {
3830
4010
  active.cancelled = true;
3831
- this.stopActiveStreaming(active, sessionId, 'cancel');
3832
4011
  // Fire-and-forget, but LOG the IPC failure: a swallowed reason leaves a
3833
4012
  // wedged turn undiagnosable (operator sees only the wind-down timeout below
3834
4013
  // with no cause).
@@ -4741,7 +4920,6 @@ export class ChannelBase {
4741
4920
  active.cancelled = true;
4742
4921
  if (firstCancellation) {
4743
4922
  process.stderr.write(`[${this.name}] steer: cancelled active turn for ${envelope.senderId} in session ${sessionId}\n`);
4744
- this.stopActiveStreaming(active, sessionId, 'steer');
4745
4923
  // Fire-and-forget, but LOG the IPC failure rather than swallow it, so a
4746
4924
  // best-effort cancel that fails isn't silently invisible to operators.
4747
4925
  void this.bridge.cancelSession(sessionId).catch((err) => {
@@ -4794,7 +4972,6 @@ export class ChannelBase {
4794
4972
  // keeps the generation captured when its buffer drained, so /clear cannot
4795
4973
  // resurrect it while preprocessing runs before this queue.
4796
4974
  const generation = namedTurn?.generation ?? this.sessionGenerations.get(sessionId) ?? 0;
4797
- const useBlockStreaming = this.config.blockStreaming === 'on';
4798
4975
  if (namedTurn) {
4799
4976
  namedTurn.claimed = true;
4800
4977
  }
@@ -4920,23 +5097,12 @@ export class ChannelBase {
4920
5097
  catch (err) {
4921
5098
  process.stderr.write(`[${this.name}] onPromptStart threw for session ${sessionId}: ${this.lifecycleError(err)}\n`);
4922
5099
  }
4923
- const streamer = useBlockStreaming
4924
- ? new BlockStreamer({
4925
- minChars: this.config.blockStreamingChunk?.minChars ?? 400,
4926
- maxChars: this.config.blockStreamingChunk?.maxChars ?? 1000,
4927
- idleMs: this.config.blockStreamingCoalesce?.idleMs ?? 1500,
4928
- send: (text) => this.sendResponseMessage(envelope.chatId, text, sessionId, sourceLabel),
4929
- })
4930
- : null;
4931
- promptState.stopStreaming = () => streamer?.stop();
4932
5100
  // Chunks arriving while a cancel is PENDING are held here: pushing them
4933
5101
  // to any visible sink could send output the cancel can't recall. On a
4934
5102
  // failed cancel they're replayed; on success, discarded.
4935
5103
  const heldChunks = [];
4936
- let hasStreamedText = false;
4937
5104
  const releaseHeldChunks = () => {
4938
5105
  for (const held of heldChunks.splice(0)) {
4939
- hasStreamedText = true;
4940
5106
  const segment = this.ensureOutputSegment(sessionId, promptState);
4941
5107
  this.emitTaskLifecycle({
4942
5108
  ...this.lifecycleBase(envelope.chatId, sessionId, envelope.messageId),
@@ -4944,7 +5110,6 @@ export class ChannelBase {
4944
5110
  chunk: held,
4945
5111
  });
4946
5112
  this.onResponseChunk(envelope.chatId, held, sessionId, segment);
4947
- streamer?.push(held);
4948
5113
  }
4949
5114
  };
4950
5115
  const onChunk = (sid, chunk) => {
@@ -4963,10 +5128,8 @@ export class ChannelBase {
4963
5128
  return;
4964
5129
  }
4965
5130
  heldChunks.length = 0;
4966
- hasStreamedText = false;
4967
5131
  const segment = this.closeOutputSegment(sessionId, promptState);
4968
5132
  void this.notifyOutputSegmentEnd(envelope.chatId, sessionId, segment, 'response_boundary');
4969
- streamer?.stop();
4970
5133
  };
4971
5134
  // Queue wait and memory recall can outlive a bridge crash. Capture the
4972
5135
  // bridge only after the latest recovery has restored session routing.
@@ -4988,18 +5151,10 @@ export class ChannelBase {
4988
5151
  // If cancelled, skip sending the response
4989
5152
  if (!promptState.cancelled && response) {
4990
5153
  promptState.deliveryStarted = true;
4991
- if (streamer) {
4992
- if (!hasStreamedText) {
4993
- streamer.push(response);
4994
- }
4995
- await streamer.flush();
4996
- }
4997
- else {
4998
- const segment = this.ensureOutputSegment(sessionId, promptState);
4999
- await this.onResponseComplete(envelope.chatId, response, sessionId, segment);
5000
- if (segment && promptState.activeSegmentId === segment.segmentId) {
5001
- promptState.activeSegmentId = undefined;
5002
- }
5154
+ const segment = this.ensureOutputSegment(sessionId, promptState);
5155
+ await this.onResponseComplete(envelope.chatId, response, sessionId, segment);
5156
+ if (segment && promptState.activeSegmentId === segment.segmentId) {
5157
+ promptState.activeSegmentId = undefined;
5003
5158
  }
5004
5159
  }
5005
5160
  // Once delivery started the turn's outcome is fixed — don't let a
@@ -5051,13 +5206,6 @@ export class ChannelBase {
5051
5206
  finally {
5052
5207
  promptBridge.off('textChunk', onChunk);
5053
5208
  promptBridge.off('responseBoundary', onResponseBoundary);
5054
- if (streamer) {
5055
- streamer.stop();
5056
- // Queued block sends belong to this turn: let them land before
5057
- // onPromptEnd settles turn-scoped adapter state, or a send racing
5058
- // the settle can recreate discarded state and leak unredacted text.
5059
- await streamer.drain();
5060
- }
5061
5209
  // Identity guard: a turn that wedged past /clear's bounded wait gets
5062
5210
  // EVICTED — /clear gives up on active.done, deletes activePrompts, and a
5063
5211
  // turn the user starts AFTER the clear can re-seed activePrompts (and own