@qwen-code/channel-base 0.16.0-preview.0 → 0.16.1

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.
@@ -0,0 +1,110 @@
1
+ import { EventEmitter } from 'node:events';
2
+ import type { RequestPermissionRequest, RequestPermissionResponse } from '@agentclientprotocol/sdk';
3
+ import type { AvailableCommand } from './AcpBridge.js';
4
+ import type { SessionScope } from './types.js';
5
+ export interface DaemonChannelEvent {
6
+ id?: number;
7
+ v: 1;
8
+ type: string;
9
+ data: unknown;
10
+ originatorClientId?: string;
11
+ }
12
+ export interface DaemonChannelSessionClient {
13
+ readonly sessionId: string;
14
+ readonly workspaceCwd: string;
15
+ readonly lastEventId?: number;
16
+ prompt(req: {
17
+ prompt: Array<Record<string, unknown>>;
18
+ }, signal?: AbortSignal): Promise<{
19
+ stopReason?: string;
20
+ [key: string]: unknown;
21
+ }>;
22
+ events(opts?: {
23
+ signal?: AbortSignal;
24
+ lastEventId?: number;
25
+ resume?: boolean;
26
+ }): AsyncGenerator<DaemonChannelEvent>;
27
+ cancel(): Promise<void>;
28
+ setModel(modelId: string): Promise<Record<string, unknown>>;
29
+ respondToPermission(requestId: string, response: RequestPermissionResponse): Promise<boolean>;
30
+ }
31
+ export interface DaemonChannelSessionFactoryRequest {
32
+ workspaceCwd: string;
33
+ modelServiceId?: string;
34
+ sessionId?: string;
35
+ sessionScope?: SessionScope;
36
+ }
37
+ export type DaemonChannelSessionFactory = (req: DaemonChannelSessionFactoryRequest) => Promise<DaemonChannelSessionClient>;
38
+ export interface DaemonChannelBridgeOptions {
39
+ cwd: string;
40
+ sessionFactory: DaemonChannelSessionFactory;
41
+ modelServiceId?: string;
42
+ sessionScope?: SessionScope;
43
+ }
44
+ export interface DaemonPermissionRequestEvent {
45
+ requestId: string;
46
+ sessionId: string;
47
+ request: RequestPermissionRequest;
48
+ }
49
+ export interface DaemonPermissionResolvedEvent {
50
+ requestId: string;
51
+ outcome?: DaemonPermissionOutcome;
52
+ }
53
+ export interface DaemonPromptCompleteEvent {
54
+ sessionId: string;
55
+ text: string;
56
+ stopReason?: string;
57
+ }
58
+ type DaemonPermissionOutcome = {
59
+ outcome: 'cancelled';
60
+ } | {
61
+ outcome: 'selected';
62
+ optionId: string;
63
+ };
64
+ export declare class DaemonChannelBridge extends EventEmitter {
65
+ private readonly options;
66
+ private readonly sessions;
67
+ private readonly eventControllers;
68
+ private readonly requestToSession;
69
+ private readonly respondedRequestToSession;
70
+ private readonly activePrompts;
71
+ private readonly activePromptControllers;
72
+ private readonly availableCommandsBySession;
73
+ private connected;
74
+ private latestAvailableCommandsSessionId;
75
+ private lastError;
76
+ constructor(options: DaemonChannelBridgeOptions);
77
+ get availableCommands(): AvailableCommand[];
78
+ get lastDaemonError(): unknown;
79
+ getAvailableCommands(sessionId: string): AvailableCommand[];
80
+ start(): Promise<void>;
81
+ newSession(cwd: string): Promise<string>;
82
+ loadSession(sessionId: string, cwd: string): Promise<string>;
83
+ prompt(sessionId: string, text: string, options?: {
84
+ imageBase64?: string;
85
+ imageMimeType?: string;
86
+ }): Promise<string>;
87
+ cancelSession(sessionId: string): Promise<void>;
88
+ setSessionModel(sessionId: string, modelId: string): Promise<Record<string, unknown>>;
89
+ respondToPermission(requestId: string, response: RequestPermissionResponse): Promise<boolean>;
90
+ stop(): void;
91
+ get isConnected(): boolean;
92
+ private attachSession;
93
+ private ensureSession;
94
+ private pumpEvents;
95
+ private isCurrentPump;
96
+ private handleEvent;
97
+ private handleSessionUpdate;
98
+ private handlePermissionRequest;
99
+ private rememberRespondedPermissionRequest;
100
+ private handlePermissionResolved;
101
+ private handleModelSwitched;
102
+ private handleModelSwitchFailed;
103
+ private handleSessionDied;
104
+ private dropSession;
105
+ private getReason;
106
+ private getError;
107
+ private abortActivePrompts;
108
+ private emitProtocolError;
109
+ }
110
+ export {};
@@ -0,0 +1,504 @@
1
+ import { EventEmitter } from 'node:events';
2
+ const MAX_RESPONDED_PERMISSION_REQUESTS = 256;
3
+ function isRecord(value) {
4
+ return typeof value === 'object' && value !== null;
5
+ }
6
+ function getString(value) {
7
+ return typeof value === 'string' ? value : undefined;
8
+ }
9
+ function getTextContent(content) {
10
+ if (!isRecord(content)) {
11
+ return undefined;
12
+ }
13
+ return getString(content['text']);
14
+ }
15
+ function getSessionUpdate(data) {
16
+ if (!isRecord(data) || !isRecord(data['update'])) {
17
+ return undefined;
18
+ }
19
+ return data['update'];
20
+ }
21
+ function isAvailableCommand(value) {
22
+ return isRecord(value) && typeof value['name'] === 'string';
23
+ }
24
+ function isPermissionRequestData(value) {
25
+ if (!isRecord(value) ||
26
+ typeof value['requestId'] !== 'string' ||
27
+ !isRecord(value['toolCall']) ||
28
+ typeof value['toolCall']['toolCallId'] !== 'string' ||
29
+ typeof value['toolCall']['kind'] !== 'string' ||
30
+ !Array.isArray(value['options'])) {
31
+ return false;
32
+ }
33
+ return value['options'].every((option) => isRecord(option) && typeof option['optionId'] === 'string');
34
+ }
35
+ function parsePermissionOutcome(value) {
36
+ if (!isRecord(value)) {
37
+ return undefined;
38
+ }
39
+ if (value['outcome'] === 'cancelled') {
40
+ return { outcome: 'cancelled' };
41
+ }
42
+ if (value['outcome'] === 'selected' &&
43
+ typeof value['optionId'] === 'string') {
44
+ return { outcome: 'selected', optionId: value['optionId'] };
45
+ }
46
+ return undefined;
47
+ }
48
+ function summarizeProtocolDetails(details) {
49
+ if (!isRecord(details)) {
50
+ return { type: typeof details };
51
+ }
52
+ const summary = {};
53
+ for (const key of [
54
+ 'requestId',
55
+ 'sessionId',
56
+ 'sessionUpdate',
57
+ 'modelId',
58
+ 'requestedModelId',
59
+ 'toolCallId',
60
+ 'kind',
61
+ ]) {
62
+ const value = details[key];
63
+ if (typeof value === 'string') {
64
+ summary[key] = value;
65
+ }
66
+ }
67
+ return summary;
68
+ }
69
+ async function drainDaemonEventLoop() {
70
+ // TODO(daemon-roadmap): replace this bounded client-side drain with a daemon
71
+ // terminal turn event / SSE waterline once the typed event schema defines it.
72
+ await new Promise((resolve) => setTimeout(resolve, 0));
73
+ }
74
+ export class DaemonChannelBridge extends EventEmitter {
75
+ options;
76
+ sessions = new Map();
77
+ eventControllers = new Map();
78
+ requestToSession = new Map();
79
+ respondedRequestToSession = new Map();
80
+ activePrompts = new Set();
81
+ activePromptControllers = new Map();
82
+ availableCommandsBySession = new Map();
83
+ connected = false;
84
+ latestAvailableCommandsSessionId;
85
+ lastError;
86
+ constructor(options) {
87
+ super();
88
+ this.options = options;
89
+ this.on('error', (error) => {
90
+ this.lastError = error;
91
+ });
92
+ }
93
+ get availableCommands() {
94
+ if (this.latestAvailableCommandsSessionId) {
95
+ return (this.availableCommandsBySession.get(this.latestAvailableCommandsSessionId) ?? []);
96
+ }
97
+ return Array.from(this.availableCommandsBySession.values()).at(-1) ?? [];
98
+ }
99
+ get lastDaemonError() {
100
+ return this.lastError;
101
+ }
102
+ getAvailableCommands(sessionId) {
103
+ return this.availableCommandsBySession.get(sessionId) ?? [];
104
+ }
105
+ async start() {
106
+ this.connected = true;
107
+ }
108
+ async newSession(cwd) {
109
+ const session = await this.options.sessionFactory({
110
+ workspaceCwd: cwd || this.options.cwd,
111
+ modelServiceId: this.options.modelServiceId,
112
+ sessionScope: this.options.sessionScope ?? 'thread',
113
+ });
114
+ this.attachSession(session);
115
+ return session.sessionId;
116
+ }
117
+ async loadSession(sessionId, cwd) {
118
+ const session = await this.options.sessionFactory({
119
+ workspaceCwd: cwd || this.options.cwd,
120
+ modelServiceId: this.options.modelServiceId,
121
+ sessionId,
122
+ sessionScope: this.options.sessionScope ?? 'thread',
123
+ });
124
+ if (session.sessionId !== sessionId) {
125
+ throw new Error(`Daemon returned session ${session.sessionId} while loading ${sessionId}`);
126
+ }
127
+ this.attachSession(session);
128
+ return session.sessionId;
129
+ }
130
+ async prompt(sessionId, text, options) {
131
+ const session = this.ensureSession(sessionId);
132
+ if (this.activePrompts.has(sessionId)) {
133
+ throw new Error(`Prompt already in flight for daemon session ${sessionId}`);
134
+ }
135
+ this.activePrompts.add(sessionId);
136
+ const controller = new AbortController();
137
+ let controllers = this.activePromptControllers.get(sessionId);
138
+ if (!controllers) {
139
+ controllers = new Set();
140
+ this.activePromptControllers.set(sessionId, controllers);
141
+ }
142
+ controllers.add(controller);
143
+ const chunks = [];
144
+ const onChunk = (sid, chunk) => {
145
+ if (sid === sessionId) {
146
+ chunks.push(chunk);
147
+ }
148
+ };
149
+ const onSessionDied = (info) => {
150
+ if (info.sessionId === sessionId) {
151
+ controller.abort();
152
+ }
153
+ };
154
+ this.on('textChunk', onChunk);
155
+ this.on('sessionDied', onSessionDied);
156
+ const prompt = [];
157
+ if (options?.imageBase64 && options.imageMimeType) {
158
+ prompt.push({
159
+ type: 'image',
160
+ data: options.imageBase64,
161
+ mimeType: options.imageMimeType,
162
+ });
163
+ }
164
+ prompt.push({ type: 'text', text });
165
+ try {
166
+ const result = await session.prompt({ prompt }, controller.signal);
167
+ await drainDaemonEventLoop();
168
+ const textResult = chunks.join('');
169
+ this.emit('promptComplete', {
170
+ sessionId,
171
+ text: textResult,
172
+ stopReason: result.stopReason,
173
+ });
174
+ return textResult;
175
+ }
176
+ finally {
177
+ this.off('textChunk', onChunk);
178
+ this.off('sessionDied', onSessionDied);
179
+ this.activePrompts.delete(sessionId);
180
+ controllers.delete(controller);
181
+ if (controllers.size === 0 &&
182
+ this.activePromptControllers.get(sessionId) === controllers) {
183
+ this.activePromptControllers.delete(sessionId);
184
+ }
185
+ }
186
+ }
187
+ async cancelSession(sessionId) {
188
+ const session = this.ensureSession(sessionId);
189
+ await session.cancel();
190
+ this.abortActivePrompts(sessionId);
191
+ this.activePrompts.delete(sessionId);
192
+ }
193
+ async setSessionModel(sessionId, modelId) {
194
+ return await this.ensureSession(sessionId).setModel(modelId);
195
+ }
196
+ async respondToPermission(requestId, response) {
197
+ const sessionId = this.requestToSession.get(requestId);
198
+ if (!sessionId) {
199
+ return false;
200
+ }
201
+ const session = this.sessions.get(sessionId);
202
+ if (!session) {
203
+ this.requestToSession.delete(requestId);
204
+ this.respondedRequestToSession.delete(requestId);
205
+ return false;
206
+ }
207
+ try {
208
+ const accepted = await session.respondToPermission(requestId, response);
209
+ this.requestToSession.delete(requestId);
210
+ if (accepted) {
211
+ this.rememberRespondedPermissionRequest(requestId, sessionId);
212
+ }
213
+ else {
214
+ this.respondedRequestToSession.delete(requestId);
215
+ }
216
+ return accepted;
217
+ }
218
+ catch (error) {
219
+ this.requestToSession.delete(requestId);
220
+ this.respondedRequestToSession.delete(requestId);
221
+ throw error;
222
+ }
223
+ }
224
+ stop() {
225
+ for (const sessionId of Array.from(this.sessions.keys())) {
226
+ const session = this.sessions.get(sessionId);
227
+ if (session) {
228
+ void session.cancel().catch((error) => {
229
+ this.lastError = error;
230
+ });
231
+ }
232
+ this.dropSession(sessionId, 'bridge_stopped');
233
+ }
234
+ this.latestAvailableCommandsSessionId = undefined;
235
+ this.connected = false;
236
+ }
237
+ get isConnected() {
238
+ return this.connected;
239
+ }
240
+ attachSession(session) {
241
+ if (this.sessions.has(session.sessionId)) {
242
+ this.dropSession(session.sessionId, 'session_replaced');
243
+ }
244
+ this.sessions.set(session.sessionId, session);
245
+ const controller = new AbortController();
246
+ this.eventControllers.set(session.sessionId, controller);
247
+ void this.pumpEvents(session, controller.signal);
248
+ }
249
+ ensureSession(sessionId) {
250
+ const session = this.sessions.get(sessionId);
251
+ if (!session) {
252
+ throw new Error(`No daemon session bound for ${sessionId}`);
253
+ }
254
+ return session;
255
+ }
256
+ async pumpEvents(session, signal) {
257
+ try {
258
+ for await (const event of session.events({
259
+ signal,
260
+ lastEventId: session.lastEventId,
261
+ resume: true,
262
+ })) {
263
+ if (!this.isCurrentPump(session, signal)) {
264
+ return;
265
+ }
266
+ this.handleEvent(session, event);
267
+ }
268
+ if (!signal.aborted && this.isCurrentPump(session, signal)) {
269
+ this.dropSession(session.sessionId, 'stream_ended');
270
+ }
271
+ }
272
+ catch (error) {
273
+ if (!signal.aborted && this.isCurrentPump(session, signal)) {
274
+ this.emit('error', error);
275
+ this.dropSession(session.sessionId, error instanceof Error ? error.message : String(error));
276
+ }
277
+ }
278
+ }
279
+ isCurrentPump(session, signal) {
280
+ return (this.sessions.get(session.sessionId) === session &&
281
+ this.eventControllers.get(session.sessionId)?.signal === signal);
282
+ }
283
+ handleEvent(session, event) {
284
+ switch (event.type) {
285
+ case 'session_update':
286
+ this.handleSessionUpdate(session.sessionId, event.data);
287
+ break;
288
+ case 'permission_request':
289
+ this.handlePermissionRequest(session.sessionId, event.data);
290
+ break;
291
+ case 'permission_resolved':
292
+ this.handlePermissionResolved(session.sessionId, event.data);
293
+ break;
294
+ case 'model_switched':
295
+ this.handleModelSwitched(session.sessionId, event.data);
296
+ break;
297
+ case 'model_switch_failed':
298
+ this.handleModelSwitchFailed(session.sessionId, event.data);
299
+ break;
300
+ case 'session_died':
301
+ this.handleSessionDied(session.sessionId, event.data);
302
+ break;
303
+ case 'client_evicted':
304
+ this.dropSession(session.sessionId, this.getReason(event.data, 'client_evicted'));
305
+ break;
306
+ case 'stream_error':
307
+ this.dropSession(session.sessionId, this.getError(event.data, 'stream_error'));
308
+ break;
309
+ default:
310
+ break;
311
+ }
312
+ }
313
+ handleSessionUpdate(sessionId, data) {
314
+ const update = getSessionUpdate(data);
315
+ if (!update) {
316
+ this.emitProtocolError('Malformed daemon session_update event', data);
317
+ return;
318
+ }
319
+ const type = getString(update['sessionUpdate']);
320
+ switch (type) {
321
+ case 'agent_message_chunk': {
322
+ const text = getTextContent(update['content']);
323
+ if (text) {
324
+ this.emit('textChunk', sessionId, text);
325
+ }
326
+ break;
327
+ }
328
+ case 'agent_thought_chunk': {
329
+ const text = getTextContent(update['content']);
330
+ if (text) {
331
+ this.emit('thoughtChunk', sessionId, text);
332
+ }
333
+ break;
334
+ }
335
+ case 'tool_call':
336
+ case 'tool_call_update': {
337
+ const toolCallId = getString(update['toolCallId']);
338
+ const kind = getString(update['kind']);
339
+ if (!toolCallId || !kind) {
340
+ this.emitProtocolError(`Malformed daemon ${type} event`, update);
341
+ break;
342
+ }
343
+ const event = {
344
+ sessionId,
345
+ toolCallId,
346
+ kind,
347
+ title: getString(update['title']) ?? '',
348
+ status: getString(update['status']) ?? 'pending',
349
+ rawInput: isRecord(update['rawInput'])
350
+ ? update['rawInput']
351
+ : undefined,
352
+ };
353
+ this.emit('toolCall', event);
354
+ break;
355
+ }
356
+ case 'available_commands_update': {
357
+ if (Array.isArray(update['availableCommands'])) {
358
+ const commands = update['availableCommands'].filter(isAvailableCommand);
359
+ this.availableCommandsBySession.set(sessionId, commands);
360
+ this.latestAvailableCommandsSessionId = sessionId;
361
+ }
362
+ else {
363
+ this.emitProtocolError('Malformed daemon available_commands_update event', data);
364
+ }
365
+ break;
366
+ }
367
+ default:
368
+ break;
369
+ }
370
+ this.emit('sessionUpdate', data);
371
+ }
372
+ handlePermissionRequest(sessionId, data) {
373
+ if (!isPermissionRequestData(data)) {
374
+ this.emitProtocolError('Malformed daemon permission_request event', data);
375
+ return;
376
+ }
377
+ const requestId = data['requestId'];
378
+ this.requestToSession.set(requestId, sessionId);
379
+ this.emit('permissionRequest', {
380
+ requestId,
381
+ sessionId,
382
+ request: data,
383
+ });
384
+ }
385
+ rememberRespondedPermissionRequest(requestId, sessionId) {
386
+ this.respondedRequestToSession.set(requestId, sessionId);
387
+ while (this.respondedRequestToSession.size > MAX_RESPONDED_PERMISSION_REQUESTS) {
388
+ const oldestRequestId = this.respondedRequestToSession
389
+ .keys()
390
+ .next().value;
391
+ if (oldestRequestId === undefined) {
392
+ return;
393
+ }
394
+ this.respondedRequestToSession.delete(oldestRequestId);
395
+ }
396
+ }
397
+ handlePermissionResolved(sessionId, data) {
398
+ if (!isRecord(data) || typeof data['requestId'] !== 'string') {
399
+ this.emitProtocolError('Malformed daemon permission_resolved event', data);
400
+ return;
401
+ }
402
+ const requestId = data['requestId'];
403
+ const mappedSessionId = this.requestToSession.get(requestId) ??
404
+ this.respondedRequestToSession.get(requestId);
405
+ if (!mappedSessionId) {
406
+ this.emitProtocolError(`Ignoring daemon permission_resolved for unknown request ${requestId}`, data);
407
+ return;
408
+ }
409
+ if (mappedSessionId !== sessionId) {
410
+ this.requestToSession.delete(requestId);
411
+ this.respondedRequestToSession.delete(requestId);
412
+ this.emitProtocolError(`Ignoring daemon permission_resolved for request ${requestId} from non-owning session ${sessionId}`, data);
413
+ return;
414
+ }
415
+ const outcome = parsePermissionOutcome(data['outcome']);
416
+ if (!outcome) {
417
+ this.requestToSession.delete(requestId);
418
+ this.respondedRequestToSession.delete(requestId);
419
+ this.emitProtocolError('Malformed daemon permission_resolved outcome', data);
420
+ return;
421
+ }
422
+ this.requestToSession.delete(requestId);
423
+ this.respondedRequestToSession.delete(requestId);
424
+ this.emit('permissionResolved', {
425
+ requestId,
426
+ outcome,
427
+ });
428
+ }
429
+ handleModelSwitched(sessionId, data) {
430
+ if (!isRecord(data) || typeof data['modelId'] !== 'string') {
431
+ this.emitProtocolError('Malformed daemon model_switched event', data);
432
+ return;
433
+ }
434
+ this.emit('modelSwitched', {
435
+ sessionId,
436
+ modelId: data['modelId'],
437
+ });
438
+ }
439
+ handleModelSwitchFailed(sessionId, data) {
440
+ if (!isRecord(data)) {
441
+ this.emitProtocolError('Malformed daemon model_switch_failed event', data);
442
+ return;
443
+ }
444
+ this.emit('modelSwitchFailed', {
445
+ sessionId,
446
+ requestedModelId: getString(data['requestedModelId']),
447
+ error: getString(data['error']) ?? 'model_switch_failed',
448
+ });
449
+ }
450
+ handleSessionDied(sessionId, data) {
451
+ this.dropSession(sessionId, this.getReason(data, 'session_died'));
452
+ }
453
+ dropSession(sessionId, reason) {
454
+ if (!this.sessions.has(sessionId)) {
455
+ return;
456
+ }
457
+ this.eventControllers.get(sessionId)?.abort();
458
+ this.eventControllers.delete(sessionId);
459
+ this.sessions.delete(sessionId);
460
+ this.abortActivePrompts(sessionId);
461
+ this.activePrompts.delete(sessionId);
462
+ this.availableCommandsBySession.delete(sessionId);
463
+ if (this.latestAvailableCommandsSessionId === sessionId) {
464
+ this.latestAvailableCommandsSessionId = Array.from(this.availableCommandsBySession.keys()).at(-1);
465
+ }
466
+ for (const [requestId, mappedSessionId] of this.requestToSession) {
467
+ if (mappedSessionId === sessionId) {
468
+ this.requestToSession.delete(requestId);
469
+ }
470
+ }
471
+ for (const [requestId, mappedSessionId] of this.respondedRequestToSession) {
472
+ if (mappedSessionId === sessionId) {
473
+ this.respondedRequestToSession.delete(requestId);
474
+ }
475
+ }
476
+ this.emit('sessionDied', { sessionId, reason });
477
+ }
478
+ getReason(data, fallback) {
479
+ return isRecord(data) && typeof data['reason'] === 'string'
480
+ ? data['reason']
481
+ : fallback;
482
+ }
483
+ getError(data, fallback) {
484
+ return isRecord(data) && typeof data['error'] === 'string'
485
+ ? data['error']
486
+ : fallback;
487
+ }
488
+ abortActivePrompts(sessionId) {
489
+ const promptControllers = this.activePromptControllers.get(sessionId);
490
+ if (!promptControllers) {
491
+ return;
492
+ }
493
+ for (const controller of promptControllers) {
494
+ controller.abort();
495
+ }
496
+ this.activePromptControllers.delete(sessionId);
497
+ }
498
+ emitProtocolError(message, details) {
499
+ const error = new Error(message);
500
+ error.details = summarizeProtocolDetails(details);
501
+ this.emit('error', error);
502
+ }
503
+ }
504
+ //# sourceMappingURL=DaemonChannelBridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DaemonChannelBridge.js","sourceRoot":"","sources":["../src/DaemonChannelBridge.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  export { getGlobalQwenDir, resolvePath } from './paths.js';
2
2
  export { AcpBridge } from './AcpBridge.js';
3
3
  export type { AcpBridgeOptions, AvailableCommand, ToolCallEvent, } from './AcpBridge.js';
4
+ export { DaemonChannelBridge } from './DaemonChannelBridge.js';
5
+ export type { DaemonChannelBridgeOptions, DaemonChannelEvent, DaemonChannelSessionClient, DaemonChannelSessionFactory, DaemonChannelSessionFactoryRequest, DaemonPromptCompleteEvent, DaemonPermissionRequestEvent, DaemonPermissionResolvedEvent, } from './DaemonChannelBridge.js';
4
6
  export { BlockStreamer } from './BlockStreamer.js';
5
7
  export type { BlockStreamerOptions } from './BlockStreamer.js';
6
8
  export { ChannelBase } from './ChannelBase.js';
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export { getGlobalQwenDir, resolvePath } from './paths.js';
2
2
  export { AcpBridge } from './AcpBridge.js';
3
+ export { DaemonChannelBridge } from './DaemonChannelBridge.js';
3
4
  export { BlockStreamer } from './BlockStreamer.js';
4
5
  export { ChannelBase } from './ChannelBase.js';
5
6
  export { PairingStore } from './PairingStore.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAM3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAM3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAW/D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qwen-code/channel-base",
3
- "version": "0.16.0-preview.0",
3
+ "version": "0.16.1",
4
4
  "description": "Base channel infrastructure for Qwen Code",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",