@qwen-code/channel-base 0.23.2-preview.0 → 0.23.2
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 +3 -23
- package/dist/ChannelBase.d.ts +9 -4
- package/dist/ChannelBase.d.ts.map +1 -1
- package/dist/ChannelBase.js +214 -66
- package/dist/ChannelBase.js.map +1 -1
- package/dist/index.d.ts +1 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +16 -16
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
- package/dist/BlockStreamer.d.ts +0 -62
- package/dist/BlockStreamer.d.ts.map +0 -1
- package/dist/BlockStreamer.js +0 -128
- package/dist/BlockStreamer.js.map +0 -1
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
|
-
##
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
package/dist/ChannelBase.d.ts
CHANGED
|
@@ -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.
|
|
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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"}
|
package/dist/ChannelBase.js
CHANGED
|
@@ -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
|
-
|
|
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),
|
|
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),
|
|
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
|
-
|
|
2087
|
-
...(pending.taskName ? [
|
|
2248
|
+
copy.required,
|
|
2249
|
+
...(pending.taskName ? [`${copy.request} ${pending.requestId}`] : []),
|
|
2088
2250
|
'',
|
|
2089
|
-
|
|
2090
|
-
|
|
2091
|
-
...(parameters ? [
|
|
2251
|
+
`${copy.tool} ${this.permissionToolName(toolCall)}`,
|
|
2252
|
+
`${copy.action} ${this.permissionTitle(toolCall)}`,
|
|
2253
|
+
...(parameters ? [`${copy.parameters} ${parameters}`] : []),
|
|
2092
2254
|
'',
|
|
2093
|
-
|
|
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() ||
|
|
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
|
-
|
|
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
|
|
2366
|
+
return copy.allowAlwaysProject;
|
|
2179
2367
|
}
|
|
2180
2368
|
if (option.optionId === 'proceed_always_user') {
|
|
2181
|
-
return
|
|
2369
|
+
return copy.allowAlwaysUser;
|
|
2182
2370
|
}
|
|
2183
|
-
return
|
|
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 =
|
|
2269
|
-
|
|
2270
|
-
|
|
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.
|
|
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
|
-
|
|
4992
|
-
|
|
4993
|
-
|
|
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
|