toc-ocra 0.2.4 → 0.2.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.
@@ -1,7 +1,8 @@
1
1
  import { spawn } from 'node:child_process';
2
- import { realpath } from 'node:fs/promises';
3
- import { isAbsolute, relative, resolve } from 'node:path';
2
+ import { mkdir, realpath, stat, writeFile } from 'node:fs/promises';
3
+ import { basename, isAbsolute, join, relative, resolve } from 'node:path';
4
4
  import { createInterface } from 'node:readline';
5
+ import { codexChatProvider } from '../providers/chat/codex-app-server.js';
5
6
  import { resolveHeadlessProvider } from '../providers/registry.js';
6
7
  import { sanitizeTerminalLine } from '../session/terminal-line-sanitizer.js';
7
8
  import { TerminalTailBuffer } from '../session/terminal-tail-buffer.js';
@@ -30,6 +31,7 @@ export class RunSupervisor {
30
31
  recent = new Map();
31
32
  /** Run ids whose finish report has not been acknowledged yet. */
32
33
  unreported = new Set();
34
+ chatRunIds = new Set();
33
35
  constructor(config, logger, reporter, orphans) {
34
36
  this.config = config;
35
37
  this.logger = logger;
@@ -43,8 +45,15 @@ export class RunSupervisor {
43
45
  activeRunIds() {
44
46
  return [...new Set([...this.active.keys(), ...this.unreported])];
45
47
  }
48
+ activeChatRunIds() {
49
+ return this.activeRunIds().filter(id => this.chatRunIds.has(id));
50
+ }
51
+ activeTaskRunIds() {
52
+ return this.activeRunIds().filter(id => !this.chatRunIds.has(id));
53
+ }
46
54
  markReported(runId) {
47
55
  this.unreported.delete(runId);
56
+ this.chatRunIds.delete(runId);
48
57
  }
49
58
  recentRuns() {
50
59
  const running = [...this.active.values()].map((run) => ({ runId: run.runId, workstationId: run.workstationId, status: 'running', at: run.startedAt }));
@@ -60,9 +69,11 @@ export class RunSupervisor {
60
69
  this.logger.info('run-duplicate-ignored', { runId: payload.run_id });
61
70
  return;
62
71
  }
72
+ if (payload.chat_session_id)
73
+ this.chatRunIds.add(payload.run_id);
63
74
  const refuse = async (error) => {
64
75
  this.logger.warn('run-refused', { runId: payload.run_id, error });
65
- this.remember({ runId: payload.run_id, workstationId: payload.workstation_id, tail: new TerminalTailBuffer(), finishedAt: Date.now(), status: 'failed' });
76
+ this.remember({ runId: payload.run_id, workstationId: payload.workstation_id, tail: new TerminalTailBuffer(), finishedAt: Date.now(), status: 'failed', chat: !!payload.chat_session_id });
66
77
  await this.report(payload.run_id, { status: 'failed', error, duration_ms: 0 });
67
78
  };
68
79
  if ([...this.active.values()].some((run) => run.workstationId === payload.workstation_id)) {
@@ -75,11 +86,40 @@ export class RunSupervisor {
75
86
  let workdir;
76
87
  try {
77
88
  provider = resolveHeadlessProvider(payload.agent_type);
78
- workdir = await this.validateWorkdir(payload.workdir || this.config.allowedRoots[0]);
89
+ workdir = payload.chat_session_id && !payload.workdir
90
+ ? await this.defaultChatWorkdir()
91
+ : await this.validateWorkdir(payload.workdir || this.config.allowedRoots[0]);
79
92
  }
80
93
  catch (error) {
81
94
  return refuse(errorMessage(error));
82
95
  }
96
+ const request = {
97
+ prompt: payload.prompt,
98
+ sessionId: payload.session_id,
99
+ model: payload.model,
100
+ reasoningEffort: payload.reasoning_effort,
101
+ workdir
102
+ };
103
+ if (payload.chat_session_id) {
104
+ try {
105
+ if (payload.agent_type !== 'codex')
106
+ throw new Error('此 CLI 的实时聊天驱动尚未启用');
107
+ if (!this.reporter.chatEvents)
108
+ throw new Error('实时聊天转发未配置');
109
+ const attachments = await this.prepareChatAttachments(payload);
110
+ provider = codexChatProvider(request, attachments);
111
+ }
112
+ catch (error) {
113
+ return refuse(errorMessage(error));
114
+ }
115
+ }
116
+ if (!payload.prompt && !payload.attachments?.length)
117
+ return refuse('消息内容为空');
118
+ // Preparing a directory or attachment may yield while another command starts.
119
+ if ([...this.active.values()].some(run => run.workstationId === payload.workstation_id))
120
+ return refuse('本机该工位已有任务在运行');
121
+ if (this.active.size >= this.config.maxConcurrentRuns)
122
+ return refuse('本机同时运行的任务已达上限');
83
123
  const launch = provider.buildLaunch({
84
124
  prompt: payload.prompt,
85
125
  sessionId: payload.session_id,
@@ -95,13 +135,15 @@ export class RunSupervisor {
95
135
  detached: process.platform !== 'win32',
96
136
  shell: false,
97
137
  windowsHide: true,
98
- stdio: ['ignore', 'pipe', 'pipe']
138
+ stdio: [provider.startInput ? 'pipe' : 'ignore', 'pipe', 'pipe']
99
139
  });
100
140
  }
101
141
  catch (error) {
102
142
  return refuse(`无法启动 ${provider.id}:${errorMessage(error)}`);
103
143
  }
104
144
  const run = {
145
+ chat: Boolean(payload.chat_session_id), chatReady: false, eventSequence: 0,
146
+ pendingEvents: [], eventTail: Promise.resolve(), pendingBytes: 0, queuedBytes: 0, forwardingFailed: false,
105
147
  runId: payload.run_id,
106
148
  workstationId: payload.workstation_id,
107
149
  agentType: provider.id,
@@ -127,6 +169,7 @@ export class RunSupervisor {
127
169
  run.tail.append(`● ${provider.id} 启动于 ${workdir}${payload.session_id ? `(继续会话 ${payload.session_id})` : ''}\n`);
128
170
  this.logger.info('run-started', { runId: run.runId, agentType: provider.id, pid: run.pid, resume: Boolean(payload.session_id) });
129
171
  let spawnError = '';
172
+ child.stdin?.on('error', () => undefined);
130
173
  child.once('error', (error) => {
131
174
  spawnError = error.message;
132
175
  });
@@ -141,6 +184,23 @@ export class RunSupervisor {
141
184
  run.tail.append(`${clean}\n`);
142
185
  });
143
186
  child.once('close', (code, signal) => void this.onExit(run, code, signal, spawnError));
187
+ if (provider.startInput) {
188
+ child.once('spawn', () => {
189
+ try {
190
+ provider.startInput?.(message => { child.stdin?.write(message); });
191
+ }
192
+ catch (error) {
193
+ run.turnError = errorMessage(error);
194
+ void killProcessTree(run.pid);
195
+ }
196
+ });
197
+ run.timers.push(setTimeout(() => {
198
+ if (!run.chatReady && this.active.has(run.runId)) {
199
+ run.turnError = 'CLI 实时会话初始化超时';
200
+ void killProcessTree(run.pid);
201
+ }
202
+ }, 60_000));
203
+ }
144
204
  const maxMs = this.config.maxRunSeconds * 1_000;
145
205
  run.timers.push(setTimeout(() => {
146
206
  run.timedOut = true;
@@ -155,6 +215,12 @@ export class RunSupervisor {
155
215
  onStdout(run, rawLine) {
156
216
  const line = sanitizeTerminalLine(rawLine);
157
217
  const parsed = run.provider.parseLine(line);
218
+ if (run.chat && !run.forwardingFailed) {
219
+ for (const event of parsed.chatEvents ?? [])
220
+ this.queueChatEvent(run, event);
221
+ if (parsed.sessionId)
222
+ run.chatReady = true;
223
+ }
158
224
  for (const row of parsed.display)
159
225
  run.tail.append(`${row}\n`);
160
226
  if (parsed.message !== undefined)
@@ -165,6 +231,15 @@ export class RunSupervisor {
165
231
  run.sessionId = parsed.sessionId;
166
232
  void this.reporter.started(run.runId, { session_id: parsed.sessionId }).catch(() => undefined);
167
233
  }
234
+ if (parsed.endProcess) {
235
+ run.child.stdin?.end();
236
+ run.timers.push(setTimeout(() => {
237
+ if (!this.active.has(run.runId))
238
+ return;
239
+ run.killedAfterCompletion = Boolean(parsed.turnCompleted);
240
+ void killProcessTree(run.pid);
241
+ }, 1_000));
242
+ }
168
243
  if ((parsed.turnCompleted || parsed.turnError) && !run.turnCompleted) {
169
244
  run.turnCompleted = true;
170
245
  // The turn is over; do not let a lingering process hold the workstation.
@@ -182,6 +257,10 @@ export class RunSupervisor {
182
257
  clearTimeout(timer);
183
258
  this.active.delete(run.runId);
184
259
  this.orphans?.remove(run.runId);
260
+ if (run.eventTimer)
261
+ clearTimeout(run.eventTimer);
262
+ this.flushChatEvents(run);
263
+ await run.eventTail;
185
264
  const durationMs = Date.now() - run.startedAt;
186
265
  let report;
187
266
  if (run.cancelRequested) {
@@ -210,10 +289,68 @@ export class RunSupervisor {
210
289
  if (run.finalMessage)
211
290
  report.final_message = run.finalMessage;
212
291
  run.tail.append(`● 进程已退出:${report.status}${code !== null ? `(exit ${code})` : ''}\n`);
213
- this.remember({ runId: run.runId, workstationId: run.workstationId, tail: run.tail, finishedAt: Date.now(), status: report.status });
292
+ this.remember({ runId: run.runId, workstationId: run.workstationId, tail: run.tail, finishedAt: Date.now(), status: report.status, chat: !!run.chat });
214
293
  this.logger.info('run-finished', { runId: run.runId, status: report.status, code, durationMs });
215
294
  await this.report(run.runId, report);
216
295
  }
296
+ queueChatEvent(run, event) {
297
+ const bytes = Buffer.byteLength(JSON.stringify(event));
298
+ if (run.queuedBytes + bytes > 8 * 1024 * 1024) {
299
+ run.forwardingFailed = true;
300
+ run.turnError = '实时输出转发积压,请检查设备网络';
301
+ void killProcessTree(run.pid);
302
+ return;
303
+ }
304
+ run.pendingEvents.push({ ...event, sequence: ++run.eventSequence });
305
+ run.pendingBytes += bytes;
306
+ run.queuedBytes += bytes;
307
+ if (run.pendingBytes > 512 * 1024 || run.pendingEvents.length >= 64)
308
+ this.flushChatEvents(run);
309
+ else if (!run.eventTimer)
310
+ run.eventTimer = setTimeout(() => { delete run.eventTimer; this.flushChatEvents(run); }, 60);
311
+ }
312
+ flushChatEvents(run) {
313
+ if (!run.pendingEvents.length)
314
+ return;
315
+ if (run.eventTimer) {
316
+ clearTimeout(run.eventTimer);
317
+ delete run.eventTimer;
318
+ }
319
+ const events = run.pendingEvents.splice(0);
320
+ const bytes = run.pendingBytes;
321
+ run.pendingBytes = 0;
322
+ run.eventTail = run.eventTail.then(async () => {
323
+ if (run.forwardingFailed)
324
+ return;
325
+ await this.reporter.chatEvents?.(run.runId, events);
326
+ }).catch(error => {
327
+ run.forwardingFailed = true;
328
+ run.turnError = `实时输出转发失败:${errorMessage(error)}`;
329
+ this.logger.warn('chat-events-failed', { runId: run.runId, error: errorMessage(error) });
330
+ if (this.active.has(run.runId))
331
+ void killProcessTree(run.pid);
332
+ }).finally(() => { run.queuedBytes -= bytes; });
333
+ }
334
+ async prepareChatAttachments(payload) {
335
+ if (!payload.attachments?.length)
336
+ return [];
337
+ if (!this.reporter.chatMedia)
338
+ throw new Error('附件转发未配置');
339
+ const directory = join(this.config.dataDir, 'chat-media', encodeURIComponent(payload.chat_session_id ?? payload.run_id));
340
+ await mkdir(directory, { recursive: true, mode: 0o700 });
341
+ const files = [];
342
+ for (const attachment of payload.attachments) {
343
+ const name = basename(attachment.name).replace(/[^\p{L}\p{N}._-]/gu, '_').slice(-120) || 'attachment';
344
+ const path = join(directory, `${encodeURIComponent(attachment.media_id)}-${name}`);
345
+ const existing = await stat(path).catch(() => undefined);
346
+ if (!existing?.isFile()) {
347
+ const data = await this.reporter.chatMedia(payload.run_id, attachment.media_id);
348
+ await writeFile(path, data, { mode: 0o600 });
349
+ }
350
+ files.push({ path, name: attachment.name, kind: attachment.kind });
351
+ }
352
+ return files;
353
+ }
217
354
  async report(runId, report) {
218
355
  this.unreported.add(runId);
219
356
  await this.reporter.finished(runId, report);
@@ -260,6 +397,17 @@ export class RunSupervisor {
260
397
  this.recent.delete(id);
261
398
  }
262
399
  }
400
+ async defaultChatWorkdir() {
401
+ // Old configurations can retain a deleted temporary directory as their
402
+ // first root. Only choose another explicitly allowed, existing directory.
403
+ for (const root of this.config.allowedRoots) {
404
+ try {
405
+ return await this.validateWorkdir(root);
406
+ }
407
+ catch { /* try the next allowed root */ }
408
+ }
409
+ throw new Error('没有可用的聊天工作目录,请配置仍存在的允许目录');
410
+ }
263
411
  async validateWorkdir(input) {
264
412
  if (!input)
265
413
  throw new Error('没有配置允许的工作目录');
@@ -1 +1 @@
1
- {"version":3,"file":"run-supervisor.js","sourceRoot":"","sources":["../../../src/runs/run-supervisor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-supervisor.js","sourceRoot":"","sources":["../../../src/runs/run-supervisor.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,7 @@ import type { CliDetectionSnapshot } from '../shared/cli-detection-types.js';
11
11
  export declare class AgentRuntime {
12
12
  private readonly config;
13
13
  private readonly version;
14
+ private readonly chatOnly;
14
15
  private readonly logger;
15
16
  private readonly client;
16
17
  private readonly runs;
@@ -18,6 +19,10 @@ export declare class AgentRuntime {
18
19
  private readonly workspaces;
19
20
  private readonly stopController;
20
21
  private readonly startedAt;
22
+ private readonly chatRunnerId;
23
+ private chatReady;
24
+ private chatLeaseInitialized;
25
+ private chatError;
21
26
  private detection?;
22
27
  private policy;
23
28
  private heartbeatInterval;
@@ -36,7 +41,7 @@ export declare class AgentRuntime {
36
41
  private catalogRefresh;
37
42
  /** Hash of the catalogs the server has stored (from its heartbeat reply). */
38
43
  private serverCatalogHash;
39
- constructor(config: AgentConfig, version: string, logger?: DiagnosticLogger);
44
+ constructor(config: AgentConfig, version: string, logger?: DiagnosticLogger, chatOnly?: boolean);
40
45
  start(): Promise<void>;
41
46
  stop(): Promise<void>;
42
47
  /** Current state, for the local dashboard and the plugin. */
@@ -1,9 +1,10 @@
1
+ import { randomUUID } from 'node:crypto';
1
2
  import { join } from 'node:path';
2
3
  import { executeScript } from '../exec/script-runner.js';
3
4
  import { createDiagnosticLogger } from '../logging/diagnostic-log.js';
4
5
  import { cliDetection } from '../providers/detection.js';
5
6
  import { ModelCatalogCollector } from '../providers/model-catalog-collector.js';
6
- import { readCodexQuotaResetAt } from '../providers/codex-quota.js';
7
+ import { readCLIQuotaReport } from '../providers/quota-reader.js';
7
8
  import { OrphanRegistry } from '../runs/orphan-registry.js';
8
9
  import { RunSupervisor } from '../runs/run-supervisor.js';
9
10
  import { GatewayClient, GatewayError } from '../transport/gateway-client.js';
@@ -23,6 +24,7 @@ const sleep = (ms, signal) => new Promise((resolve) => {
23
24
  export class AgentRuntime {
24
25
  config;
25
26
  version;
27
+ chatOnly;
26
28
  logger;
27
29
  client;
28
30
  runs;
@@ -30,6 +32,10 @@ export class AgentRuntime {
30
32
  workspaces;
31
33
  stopController = new AbortController();
32
34
  startedAt = new Date().toISOString();
35
+ chatRunnerId = randomUUID();
36
+ chatReady = false;
37
+ chatLeaseInitialized = false;
38
+ chatError;
33
39
  detection;
34
40
  policy = DEFAULT_POLICY;
35
41
  heartbeatInterval = 30;
@@ -48,9 +54,10 @@ export class AgentRuntime {
48
54
  catalogRefresh;
49
55
  /** Hash of the catalogs the server has stored (from its heartbeat reply). */
50
56
  serverCatalogHash;
51
- constructor(config, version, logger) {
57
+ constructor(config, version, logger, chatOnly = false) {
52
58
  this.config = config;
53
59
  this.version = version;
60
+ this.chatOnly = chatOnly;
54
61
  this.ownsLogger = !logger;
55
62
  this.logger = logger ?? createDiagnosticLogger(config.logFile, { level: config.logLevel, maxAgeMs: 5 * 60 * 1_000 });
56
63
  this.client = new GatewayClient(config);
@@ -59,25 +66,29 @@ export class AgentRuntime {
59
66
  started: async (runId, report) => {
60
67
  await this.retry(() => this.client.runStarted(runId, report), 3);
61
68
  },
69
+ chatEvents: async (runId, events) => { await this.retry(() => this.client.chatEvents(runId, events), 5); },
70
+ chatMedia: (runId, mediaId) => this.client.chatMedia(runId, mediaId),
62
71
  finished: async (runId, report) => {
63
72
  this.pendingReports.set(runId, report);
64
73
  await this.flushReport(runId);
65
74
  }
66
75
  };
67
76
  this.workspaces = new WorkspaceManager(config, this.logger);
68
- this.orphans = new OrphanRegistry(join(config.dataDir, 'active-runs.json'));
77
+ this.orphans = new OrphanRegistry(join(config.dataDir, chatOnly ? 'chat-active-runs.json' : 'active-runs.json'));
69
78
  this.runs = new RunSupervisor(config, this.logger, reporter, this.orphans);
70
79
  }
71
80
  async start() {
72
81
  // A previous agent that crashed may have left CLI processes running.
73
- const reaped = await this.orphans.reapPrevious();
82
+ const reaped = this.chatOnly ? [] : await this.orphans.reapPrevious();
74
83
  if (reaped.length > 0)
75
84
  this.logger.warn('orphan-runs-stopped', { runIds: reaped.map((r) => r.runId) });
76
85
  this.detection = await cliDetection.detect();
77
86
  await this.refreshCatalogs();
78
87
  await this.heartbeat();
79
88
  void this.heartbeatLoop();
80
- void this.pollLoop();
89
+ if (!this.chatOnly)
90
+ void this.pollLoop();
91
+ void this.pollLoop(true);
81
92
  this.logger.info('agent-started', { serverUrl: this.config.serverUrl, deviceId: this.config.deviceId });
82
93
  process.stdout.write(`toc-ocra ${this.version} 已启动:${this.config.serverUrl}(设备 ${this.deviceName})\n`);
83
94
  }
@@ -127,26 +138,53 @@ export class AgentRuntime {
127
138
  // Catalogs go up only when they differ from what the server holds.
128
139
  const report = this.catalogReport;
129
140
  const sendCatalogs = report !== undefined && report.hash !== this.serverCatalogHash;
141
+ if (!this.chatOnly)
142
+ try {
143
+ const response = await this.client.heartbeat({
144
+ agent_version: this.version,
145
+ hostname: this.config.hostname,
146
+ capabilities: this.capabilitySummary(),
147
+ active_runs: this.runs.activeTaskRunIds(),
148
+ ...(sendCatalogs ? { model_catalogs: report } : {})
149
+ });
150
+ this.serverCatalogHash = response.model_catalog_hash ?? (sendCatalogs ? report.hash : this.serverCatalogHash);
151
+ this.policy = response.policy ?? DEFAULT_POLICY;
152
+ this.heartbeatInterval = Math.min(Math.max(response.heartbeat_interval || 30, 5), 120);
153
+ this.pollWait = Math.min(Math.max(response.poll_wait || 25, 1), 30);
154
+ this.deviceName = response.device_name || this.deviceName;
155
+ if (!this.lastHeartbeatOk)
156
+ this.logger.info('heartbeat-ok', { deviceId: response.device_id });
157
+ this.lastHeartbeatOk = true;
158
+ this.unauthorized = false;
159
+ }
160
+ catch (error) {
161
+ this.noteFailure('heartbeat', error);
162
+ }
130
163
  try {
131
- const response = await this.client.heartbeat({
132
- agent_version: this.version,
133
- hostname: this.config.hostname,
134
- capabilities: this.capabilitySummary(),
135
- active_runs: this.runs.activeRunIds(),
136
- ...(sendCatalogs ? { model_catalogs: report } : {})
137
- });
138
- this.serverCatalogHash = response.model_catalog_hash ?? (sendCatalogs ? report.hash : this.serverCatalogHash);
139
- this.policy = response.policy ?? DEFAULT_POLICY;
140
- this.heartbeatInterval = Math.min(Math.max(response.heartbeat_interval || 30, 5), 120);
141
- this.pollWait = Math.min(Math.max(response.poll_wait || 25, 1), 30);
142
- this.deviceName = response.device_name || this.deviceName;
143
- if (!this.lastHeartbeatOk)
144
- this.logger.info('heartbeat-ok', { deviceId: response.device_id });
145
- this.lastHeartbeatOk = true;
146
- this.unauthorized = false;
164
+ await this.client.chatHeartbeat(this.chatRunnerId, this.detection?.detectedIds.includes('codex') ? ['codex'] : [], this.runs.activeChatRunIds());
165
+ if (!this.chatLeaseInitialized && this.chatOnly) {
166
+ const reaped = await this.orphans.reapPrevious();
167
+ if (reaped.length)
168
+ this.logger.warn('chat-orphans-stopped', { runIds: reaped.map(run => run.runId) });
169
+ }
170
+ this.chatLeaseInitialized = true;
171
+ if (!this.chatReady)
172
+ this.logger.info('chat-channel-ready');
173
+ this.chatReady = true;
174
+ this.chatError = undefined;
175
+ if (this.chatOnly) {
176
+ this.lastHeartbeatOk = true;
177
+ this.heartbeatInterval = 20;
178
+ }
147
179
  }
148
180
  catch (error) {
149
- this.noteFailure('heartbeat', error);
181
+ this.chatReady = false;
182
+ const reason = error instanceof Error ? error.message : String(error);
183
+ if (this.chatError !== reason)
184
+ this.logger.warn('chat-channel-unavailable', { error: reason });
185
+ this.chatError = reason;
186
+ if (this.chatOnly)
187
+ this.noteFailure('chat-heartbeat', error);
150
188
  }
151
189
  // Re-read changed catalogs for the next heartbeat, off the heartbeat path.
152
190
  void this.refreshCatalogs();
@@ -174,6 +212,7 @@ export class AgentRuntime {
174
212
  return { providers: [] };
175
213
  return {
176
214
  providers: snapshot.providers.map((p) => ({ id: p.id, installed: p.installed, runnable: p.available, version: p.version ?? '', path: p.resolvedPath ?? '' })),
215
+ cli_chat: { version: 1, providers: ['codex'] },
177
216
  detected_ids: snapshot.detectedIds,
178
217
  refreshed_at: snapshot.refreshedAt
179
218
  };
@@ -191,11 +230,17 @@ export class AgentRuntime {
191
230
  this.lastError = { reason, at: new Date().toISOString() };
192
231
  }
193
232
  // ---- Commands ----
194
- async pollLoop() {
233
+ async pollLoop(chat = false) {
195
234
  let backoff = 1_000;
196
235
  while (!this.stopController.signal.aborted) {
197
236
  try {
198
- const commands = await this.client.poll(this.pollWait, this.stopController.signal);
237
+ if (chat && !this.chatReady) {
238
+ await sleep(1_000, this.stopController.signal);
239
+ continue;
240
+ }
241
+ const commands = chat
242
+ ? await this.client.pollChat(this.pollWait, this.chatRunnerId, this.stopController.signal)
243
+ : await this.client.poll(this.pollWait, this.stopController.signal);
199
244
  backoff = 1_000;
200
245
  for (const command of commands)
201
246
  void this.handle(command);
@@ -203,7 +248,12 @@ export class AgentRuntime {
203
248
  catch (error) {
204
249
  if (this.stopController.signal.aborted)
205
250
  return;
206
- this.noteFailure('poll', error);
251
+ if (chat) {
252
+ this.chatReady = false;
253
+ this.logger.warn('chat-poll-failed', { error: error instanceof Error ? error.message : String(error) });
254
+ }
255
+ else
256
+ this.noteFailure('poll', error);
207
257
  const unauthorized = error instanceof GatewayError && error.unauthorized;
208
258
  await sleep(unauthorized ? 60_000 : backoff, this.stopController.signal);
209
259
  backoff = Math.min(backoff * 2, 30_000);
@@ -225,11 +275,13 @@ export class AgentRuntime {
225
275
  }
226
276
  async execute(command) {
227
277
  switch (command.type) {
278
+ case 'chat.run.start':
228
279
  case 'run.start': {
229
280
  const payload = RunStartPayloadSchema.parse(command.payload);
230
281
  await this.runs.start(payload);
231
282
  return { success: true, result: { accepted: true } };
232
283
  }
284
+ case 'chat.run.cancel':
233
285
  case 'run.cancel': {
234
286
  const payload = RunCancelPayloadSchema.parse(command.payload);
235
287
  const cancelled = await this.runs.cancel(payload.run_id);
@@ -260,11 +312,12 @@ export class AgentRuntime {
260
312
  }
261
313
  case 'cli.quota': {
262
314
  const payload = CliQuotaPayloadSchema.parse(command.payload ?? {});
263
- if (payload.agent_type.toLowerCase() !== 'codex') {
264
- return { success: false, error: '当前设备代理暂时只支持读取 Codex CLI 的订阅额度' };
315
+ try {
316
+ return { success: true, result: await readCLIQuotaReport(payload.agent_type) };
317
+ }
318
+ catch (error) {
319
+ return { success: false, error: error instanceof Error ? error.message : String(error) };
265
320
  }
266
- const resetAt = await readCodexQuotaResetAt();
267
- return { success: true, result: { agent_type: 'codex', next_reset_at: resetAt, fetched_at: Math.floor(Date.now() / 1000) } };
268
321
  }
269
322
  case 'script.run': {
270
323
  const payload = ScriptRunPayloadSchema.parse(command.payload);