@downcity/city 1.1.18 → 1.1.19

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 +1 @@
1
- {"version":3,"file":"AgentChat.d.ts","sourceRoot":"","sources":["../../../src/cli/agent/AgentChat.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAmBH,OAAO,KAAK,EACV,mBAAmB,EACnB,yBAAyB,EAEzB,yBAAyB,EAC1B,MAAM,qBAAqB,CAAC;AA4G7B;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,yBAAyB,CAAC;CACvC,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAiFrC;AAyKD;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoC7E"}
1
+ {"version":3,"file":"AgentChat.d.ts","sourceRoot":"","sources":["../../../src/cli/agent/AgentChat.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAqBH,OAAO,KAAK,EACV,mBAAmB,EACnB,yBAAyB,EAEzB,yBAAyB,EAC1B,MAAM,qBAAqB,CAAC;AAiX7B;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,yBAAyB,CAAC;CACvC,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAsDrC;AAqID;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoC7E"}
@@ -9,12 +9,13 @@
9
9
  import { createInterface } from "node:readline/promises";
10
10
  import chalk from "chalk";
11
11
  import prompts from "prompts";
12
- import { callAgentTransport } from "@downcity/agent";
12
+ import { callAgentTransport, } from "@downcity/agent";
13
13
  import { emitCliBlock } from "../shared/CliReporter.js";
14
- import { runWithSpinner, } from "../../utils/cli/Spinner.js";
15
14
  import { printResult } from "../../utils/cli/CliOutput.js";
16
15
  import { resolveProjectRootByAgentName, validateAgentProjectRoot, } from "../service/ServiceCommandSupport.js";
17
16
  import { listRegisteredAgentsForCli } from "./AgentSelection.js";
17
+ import { formatCliBearerHeaderValue, resolveCliAuthToken, } from "../../http/auth/CliAuthStateStore.js";
18
+ import { resolveDaemonEndpoint } from "../../process/daemon/Client.js";
18
19
  import { AGENT_CHAT_DEFAULT_SESSION_ID } from "./AgentChatTypes.js";
19
20
  const AGENT_CHAT_EXECUTE_TIMEOUT_MS = 120_000;
20
21
  function normalizeChatMessage(input) {
@@ -30,6 +31,10 @@ function isReadlineAbortError(error) {
30
31
  const name = "name" in error ? String(error.name || "") : "";
31
32
  return code === "ABORT_ERR" || name === "AbortError";
32
33
  }
34
+ function buildAgentChatFailureText(error) {
35
+ return (String(error || "").trim() ||
36
+ "Agent daemon returned empty error (check config with `city agent status`)");
37
+ }
33
38
  function isChatSuccess(payload) {
34
39
  if (!payload || payload.success !== true)
35
40
  return false;
@@ -79,6 +84,54 @@ async function resolveChatTargetAgentName(inputName) {
79
84
  }
80
85
  return agentName;
81
86
  }
87
+ async function resolveAgentChatTarget(agentNameInput) {
88
+ const agentName = String(agentNameInput || "").trim();
89
+ const sessionId = AGENT_CHAT_DEFAULT_SESSION_ID;
90
+ if (!agentName) {
91
+ return {
92
+ success: false,
93
+ outcome: {
94
+ agentName: "",
95
+ sessionId,
96
+ success: false,
97
+ error: "Missing target agent name.",
98
+ },
99
+ };
100
+ }
101
+ const resolved = await resolveProjectRootByAgentName(agentName);
102
+ if (!resolved.projectRoot) {
103
+ return {
104
+ success: false,
105
+ outcome: {
106
+ agentName,
107
+ sessionId,
108
+ success: false,
109
+ error: resolved.error || "Failed to resolve agent project path",
110
+ },
111
+ };
112
+ }
113
+ const pathError = validateAgentProjectRoot(resolved.projectRoot);
114
+ if (pathError) {
115
+ return {
116
+ success: false,
117
+ outcome: {
118
+ agentName,
119
+ projectRoot: resolved.projectRoot,
120
+ sessionId,
121
+ success: false,
122
+ error: pathError,
123
+ },
124
+ };
125
+ }
126
+ return {
127
+ success: true,
128
+ target: {
129
+ agentName,
130
+ projectRoot: resolved.projectRoot,
131
+ sessionId,
132
+ },
133
+ };
134
+ }
82
135
  function printAssistantReply(replyText) {
83
136
  const text = String(replyText || "").trim();
84
137
  if (!text) {
@@ -111,50 +164,169 @@ function printQueuedResult(params) {
111
164
  ],
112
165
  });
113
166
  }
114
- /**
115
- * 向目标 agent 的 Console 主会话发送一轮消息。
116
- */
117
- export async function executeAgentChatTurn(params) {
118
- const agentName = String(params.agentName || "").trim();
167
+ function printAgentChatFailure(params) {
168
+ emitCliBlock({
169
+ tone: "error",
170
+ title: "Agent chat failed",
171
+ facts: [
172
+ {
173
+ label: "agent",
174
+ value: params.agentName,
175
+ },
176
+ {
177
+ label: "error",
178
+ value: buildAgentChatFailureText(params.error),
179
+ },
180
+ ],
181
+ });
182
+ }
183
+ async function readStreamFailure(response) {
184
+ const contentType = String(response.headers.get("content-type") || "").toLowerCase();
185
+ const text = await response.text().catch(() => "");
186
+ if (contentType.includes("application/json")) {
187
+ try {
188
+ const payload = JSON.parse(text);
189
+ return (String(payload.error || payload.message || "").trim() ||
190
+ `HTTP ${response.status}`);
191
+ }
192
+ catch {
193
+ // ignore malformed json payloads
194
+ }
195
+ }
196
+ return String(text || "").trim() || `HTTP ${response.status}`;
197
+ }
198
+ async function streamAgentChatTurn(params) {
119
199
  const message = normalizeChatMessage(params.message);
120
- const sessionId = AGENT_CHAT_DEFAULT_SESSION_ID;
121
- if (!agentName) {
200
+ if (!message) {
122
201
  return {
123
- agentName: "",
124
- sessionId,
125
202
  success: false,
126
- error: "Missing target agent name.",
203
+ error: "Chat message is required.",
204
+ emittedVisibleText: false,
127
205
  };
128
206
  }
129
- if (!message) {
207
+ const resolved = await resolveAgentChatTarget(params.agentName);
208
+ if (!resolved.success) {
130
209
  return {
131
- agentName,
132
- sessionId,
133
210
  success: false,
134
- error: "Chat message is required.",
211
+ error: resolved.outcome.error,
212
+ emittedVisibleText: false,
135
213
  };
136
214
  }
137
- const resolved = await resolveProjectRootByAgentName(agentName);
138
- if (!resolved.projectRoot) {
215
+ const { target } = resolved;
216
+ const endpoint = resolveDaemonEndpoint({
217
+ projectRoot: target.projectRoot,
218
+ host: params.transport?.host,
219
+ port: params.transport?.port,
220
+ });
221
+ const authHeaderValue = formatCliBearerHeaderValue(resolveCliAuthToken({
222
+ explicitToken: params.transport?.token,
223
+ }));
224
+ const response = await fetch(new URL(`/api/control/sessions/${encodeURIComponent(target.sessionId)}/stream`, endpoint.baseUrl).toString(), {
225
+ method: "POST",
226
+ headers: {
227
+ "Content-Type": "application/json",
228
+ ...(authHeaderValue ? { Authorization: authHeaderValue } : {}),
229
+ },
230
+ body: JSON.stringify({
231
+ instructions: message,
232
+ }),
233
+ }).catch((error) => {
234
+ throw new Error(`Failed to call ${endpoint.baseUrl}: ${String(error)}`);
235
+ });
236
+ if (!response.ok || !response.body) {
139
237
  return {
140
- agentName,
141
- sessionId,
142
238
  success: false,
143
- error: resolved.error || "Failed to resolve agent project path",
239
+ error: await readStreamFailure(response),
240
+ emittedVisibleText: false,
144
241
  };
145
242
  }
146
- const pathError = validateAgentProjectRoot(resolved.projectRoot);
147
- if (pathError) {
243
+ const decoder = new TextDecoder();
244
+ const reader = response.body.getReader();
245
+ let buffered = "";
246
+ let printedLeadingNewline = false;
247
+ let emittedVisibleText = false;
248
+ const renderEvent = (event) => {
249
+ if (event.type !== "text-delta" || !event.text)
250
+ return;
251
+ if (!printedLeadingNewline) {
252
+ process.stdout.write("\n");
253
+ printedLeadingNewline = true;
254
+ }
255
+ process.stdout.write(event.text);
256
+ emittedVisibleText = true;
257
+ };
258
+ try {
259
+ while (true) {
260
+ const { done, value } = await reader.read();
261
+ if (done)
262
+ break;
263
+ buffered += decoder.decode(value, { stream: true });
264
+ let newlineIndex = buffered.indexOf("\n");
265
+ while (newlineIndex >= 0) {
266
+ const line = buffered.slice(0, newlineIndex).trim();
267
+ buffered = buffered.slice(newlineIndex + 1);
268
+ if (line) {
269
+ const event = JSON.parse(line);
270
+ if (event.type === "error") {
271
+ return {
272
+ success: false,
273
+ error: event.error,
274
+ emittedVisibleText,
275
+ };
276
+ }
277
+ renderEvent(event);
278
+ }
279
+ newlineIndex = buffered.indexOf("\n");
280
+ }
281
+ }
282
+ const tail = buffered.trim();
283
+ if (tail) {
284
+ const event = JSON.parse(tail);
285
+ if (event.type === "error") {
286
+ return {
287
+ success: false,
288
+ error: event.error,
289
+ emittedVisibleText,
290
+ };
291
+ }
292
+ renderEvent(event);
293
+ }
294
+ }
295
+ catch (error) {
148
296
  return {
149
- agentName,
150
- projectRoot: resolved.projectRoot,
297
+ success: false,
298
+ error: error instanceof Error ? error.message : String(error),
299
+ emittedVisibleText,
300
+ };
301
+ }
302
+ if (printedLeadingNewline) {
303
+ process.stdout.write("\n\n");
304
+ }
305
+ return {
306
+ success: true,
307
+ emittedVisibleText,
308
+ };
309
+ }
310
+ /**
311
+ * 向目标 agent 的 Console 主会话发送一轮消息。
312
+ */
313
+ export async function executeAgentChatTurn(params) {
314
+ const message = normalizeChatMessage(params.message);
315
+ const sessionId = AGENT_CHAT_DEFAULT_SESSION_ID;
316
+ if (!message) {
317
+ return {
318
+ agentName: String(params.agentName || "").trim(),
151
319
  sessionId,
152
320
  success: false,
153
- error: pathError,
321
+ error: "Chat message is required.",
154
322
  };
155
323
  }
324
+ const resolved = await resolveAgentChatTarget(params.agentName);
325
+ if (!resolved.success)
326
+ return resolved.outcome;
327
+ const { target } = resolved;
156
328
  const remote = await callAgentTransport({
157
- projectRoot: resolved.projectRoot,
329
+ projectRoot: target.projectRoot,
158
330
  path: `/api/control/sessions/${encodeURIComponent(sessionId)}/execute`,
159
331
  method: "POST",
160
332
  timeoutMs: AGENT_CHAT_EXECUTE_TIMEOUT_MS,
@@ -167,16 +339,16 @@ export async function executeAgentChatTurn(params) {
167
339
  });
168
340
  if (!remote.success || !remote.data) {
169
341
  return {
170
- agentName,
171
- projectRoot: resolved.projectRoot,
342
+ agentName: target.agentName,
343
+ projectRoot: target.projectRoot,
172
344
  sessionId,
173
345
  success: false,
174
346
  error: remote.error || "Agent daemon unreachable or returned empty error (try `city agent restart`)",
175
347
  };
176
348
  }
177
349
  return {
178
- agentName,
179
- projectRoot: resolved.projectRoot,
350
+ agentName: target.agentName,
351
+ projectRoot: target.projectRoot,
180
352
  sessionId: String(remote.data.sessionId || sessionId),
181
353
  success: isChatSuccess(remote.data),
182
354
  payload: remote.data,
@@ -189,8 +361,8 @@ export async function executeAgentChatTurn(params) {
189
361
  };
190
362
  }
191
363
  async function runOneShotChat(params) {
192
- const outcome = await runWithSpinner(async () => {
193
- return await executeAgentChatTurn({
364
+ if (params.options.json === true) {
365
+ const outcome = await executeAgentChatTurn({
194
366
  agentName: params.agentName,
195
367
  message: params.message,
196
368
  transport: {
@@ -199,11 +371,6 @@ async function runOneShotChat(params) {
199
371
  token: params.options.token,
200
372
  },
201
373
  });
202
- }, {
203
- text: `${params.agentName} is replying...`,
204
- disabled: params.options.json === true,
205
- });
206
- if (params.options.json === true) {
207
374
  printResult({
208
375
  asJson: true,
209
376
  success: outcome.success,
@@ -218,31 +385,24 @@ async function runOneShotChat(params) {
218
385
  });
219
386
  return;
220
387
  }
221
- if (!outcome.success || !outcome.payload) {
222
- emitCliBlock({
223
- tone: "error",
224
- title: "Agent chat failed",
225
- facts: [
226
- {
227
- label: "agent",
228
- value: params.agentName,
229
- },
230
- {
231
- label: "error",
232
- value: outcome.error || "Agent daemon returned empty error (check config with `city agent status`)",
233
- },
234
- ],
235
- });
236
- return;
237
- }
238
- if (outcome.payload.result?.queued === true) {
239
- printQueuedResult({
388
+ const outcome = await streamAgentChatTurn({
389
+ agentName: params.agentName,
390
+ message: params.message,
391
+ transport: {
392
+ host: params.options.host,
393
+ port: params.options.port,
394
+ token: params.options.token,
395
+ },
396
+ });
397
+ if (!outcome.success) {
398
+ printAgentChatFailure({
240
399
  agentName: params.agentName,
241
- payload: outcome.payload,
400
+ error: outcome.error,
242
401
  });
243
402
  return;
244
403
  }
245
- printAssistantReply(String(outcome.payload.result?.userVisible || ""));
404
+ if (!outcome.emittedVisibleText)
405
+ printAssistantReply("");
246
406
  }
247
407
  /**
248
408
  * 启动交互式持续对话。
@@ -294,44 +454,24 @@ async function runInteractiveChat(params) {
294
454
  console.log(helpText.join("\n"));
295
455
  continue;
296
456
  }
297
- const outcome = await runWithSpinner(async () => {
298
- return await executeAgentChatTurn({
299
- agentName: params.agentName,
300
- message: text,
301
- transport: {
302
- host: params.options.host,
303
- port: params.options.port,
304
- token: params.options.token,
305
- },
306
- });
307
- }, {
308
- text: `${params.agentName} is replying...`,
457
+ const outcome = await streamAgentChatTurn({
458
+ agentName: params.agentName,
459
+ message: text,
460
+ transport: {
461
+ host: params.options.host,
462
+ port: params.options.port,
463
+ token: params.options.token,
464
+ },
309
465
  });
310
- if (!outcome.success || !outcome.payload) {
311
- emitCliBlock({
312
- tone: "error",
313
- title: "Agent chat failed",
314
- facts: [
315
- {
316
- label: "agent",
317
- value: params.agentName,
318
- },
319
- {
320
- label: "error",
321
- value: outcome.error || "Agent daemon returned empty error (check config with `city agent status`)",
322
- },
323
- ],
324
- });
325
- continue;
326
- }
327
- if (outcome.payload.result?.queued === true) {
328
- printQueuedResult({
466
+ if (!outcome.success) {
467
+ printAgentChatFailure({
329
468
  agentName: params.agentName,
330
- payload: outcome.payload,
469
+ error: outcome.error,
331
470
  });
332
471
  continue;
333
472
  }
334
- printAssistantReply(String(outcome.payload.result?.userVisible || ""));
473
+ if (!outcome.emittedVisibleText)
474
+ printAssistantReply("");
335
475
  }
336
476
  }
337
477
  finally {
@@ -1 +1 @@
1
- {"version":3,"file":"AgentChat.js","sourceRoot":"","sources":["../../../src/cli/agent/AgentChat.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AgentChat.js","sourceRoot":"","sources":["../../../src/cli/agent/AgentChat.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,21 @@
5
5
  * - 业务模块统一通过 daemon API 与运行时通信。
6
6
  * - 地址解析优先级:CLI 参数 > 环境变量 > daemon meta > 默认值。
7
7
  */
8
- import { type DaemonJsonApiCallParams, type DaemonJsonApiCallResult } from "./Api.js";
8
+ import { type DaemonEndpoint, type DaemonJsonApiCallParams, type DaemonJsonApiCallResult } from "./Api.js";
9
+ /**
10
+ * 解析 daemon endpoint。
11
+ *
12
+ * 优先级(中文)
13
+ * 1) 显式入参 `host/port`
14
+ * 2) 环境变量 `DC_SERVER_*` / `DC_CTX_SERVER_*`
15
+ * 3) daemon meta args(`downcity.daemon.json`)
16
+ * 4) 默认 `127.0.0.1:5314`
17
+ */
18
+ export declare function resolveDaemonEndpoint(params: {
19
+ projectRoot: string;
20
+ host?: string;
21
+ port?: number;
22
+ }): DaemonEndpoint;
9
23
  /**
10
24
  * 调用 daemon JSON API。
11
25
  *
@@ -1 +1 @@
1
- {"version":3,"file":"Client.d.ts","sourceRoot":"","sources":["../../../src/process/daemon/Client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC7B,MAAM,UAAU,CAAC;AAqGlB;;;;;;GAMG;AACH,wBAAsB,UAAU,CAAC,CAAC,EAChC,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CA0DrC"}
1
+ {"version":3,"file":"Client.d.ts","sourceRoot":"","sources":["../../../src/process/daemon/Client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC7B,MAAM,UAAU,CAAC;AAmDlB;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,cAAc,CAmCjB;AAED;;;;;;GAMG;AACH,wBAAsB,UAAU,CAAC,CAAC,EAChC,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CA0DrC"}
@@ -64,7 +64,7 @@ function pickArgValue(args, key) {
64
64
  * 3) daemon meta args(`downcity.daemon.json`)
65
65
  * 4) 默认 `127.0.0.1:5314`
66
66
  */
67
- function resolveDaemonEndpoint(params) {
67
+ export function resolveDaemonEndpoint(params) {
68
68
  const explicitHost = normalizeHost(params.host);
69
69
  const explicitPort = parsePortLike(params.port);
70
70
  const envHost = normalizeHost(process.env.DC_SERVER_HOST) ||
@@ -1 +1 @@
1
- {"version":3,"file":"Client.js","sourceRoot":"","sources":["../../../src/process/daemon/Client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Client.js","sourceRoot":"","sources":["../../../src/process/daemon/Client.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@downcity/city",
3
- "version": "1.1.18",
3
+ "version": "1.1.19",
4
4
  "type": "module",
5
5
  "description": "Downcity City 平台 — CLI、daemon 管理、Console 网关、能力平台",
6
6
  "bin": {
@@ -36,7 +36,7 @@
36
36
  "prompts": "^2.4.0",
37
37
  "ws": "^8.19.0",
38
38
  "zod": "^3.24.0",
39
- "@downcity/agent": "^1.1.18"
39
+ "@downcity/agent": "^1.1.19"
40
40
  },
41
41
  "devDependencies": {
42
42
  "@types/better-sqlite3": "^7.6.13",
@@ -10,20 +10,22 @@
10
10
  import { createInterface } from "node:readline/promises";
11
11
  import chalk from "chalk";
12
12
  import prompts from "prompts";
13
- import { callAgentTransport } from "@downcity/agent";
14
- import { emitCliBlock } from "../shared/CliReporter.js";
15
13
  import {
16
- createSpinner,
17
- runWithSpinner,
18
- shouldRenderSpinner,
19
- type Spinner,
20
- } from "@/utils/cli/Spinner.js";
14
+ callAgentTransport,
15
+ type AgentSessionStreamEvent,
16
+ } from "@downcity/agent";
17
+ import { emitCliBlock } from "../shared/CliReporter.js";
21
18
  import { printResult } from "@/utils/cli/CliOutput.js";
22
19
  import {
23
20
  resolveProjectRootByAgentName,
24
21
  validateAgentProjectRoot,
25
22
  } from "../service/ServiceCommandSupport.js";
26
23
  import { listRegisteredAgentsForCli } from "./AgentSelection.js";
24
+ import {
25
+ formatCliBearerHeaderValue,
26
+ resolveCliAuthToken,
27
+ } from "@/http/auth/CliAuthStateStore.js";
28
+ import { resolveDaemonEndpoint } from "@/process/daemon/Client.js";
27
29
  import type {
28
30
  AgentChatCliOptions,
29
31
  AgentChatExecutionOutcome,
@@ -33,6 +35,22 @@ import type {
33
35
  import { AGENT_CHAT_DEFAULT_SESSION_ID } from "./AgentChatTypes.js";
34
36
 
35
37
  const AGENT_CHAT_EXECUTE_TIMEOUT_MS = 120_000;
38
+
39
+ type ResolvedAgentChatTarget = {
40
+ /**
41
+ * 目标 agent 名称。
42
+ */
43
+ agentName: string;
44
+ /**
45
+ * 目标项目根目录。
46
+ */
47
+ projectRoot: string;
48
+ /**
49
+ * 当前 chat 绑定的 sessionId。
50
+ */
51
+ sessionId: string;
52
+ };
53
+
36
54
  function normalizeChatMessage(input: string): string {
37
55
  return String(input || "").trim();
38
56
  }
@@ -47,6 +65,13 @@ function isReadlineAbortError(error: unknown): boolean {
47
65
  return code === "ABORT_ERR" || name === "AbortError";
48
66
  }
49
67
 
68
+ function buildAgentChatFailureText(error?: string): string {
69
+ return (
70
+ String(error || "").trim() ||
71
+ "Agent daemon returned empty error (check config with `city agent status`)"
72
+ );
73
+ }
74
+
50
75
  function isChatSuccess(payload: AgentChatExecuteResponse | undefined): boolean {
51
76
  if (!payload || payload.success !== true) return false;
52
77
  if (payload.result?.success === false) return false;
@@ -100,6 +125,69 @@ async function resolveChatTargetAgentName(inputName?: string): Promise<string |
100
125
  return agentName;
101
126
  }
102
127
 
128
+ async function resolveAgentChatTarget(
129
+ agentNameInput: string,
130
+ ): Promise<
131
+ | {
132
+ success: true;
133
+ target: ResolvedAgentChatTarget;
134
+ }
135
+ | {
136
+ success: false;
137
+ outcome: AgentChatExecutionOutcome;
138
+ }
139
+ > {
140
+ const agentName = String(agentNameInput || "").trim();
141
+ const sessionId = AGENT_CHAT_DEFAULT_SESSION_ID;
142
+ if (!agentName) {
143
+ return {
144
+ success: false,
145
+ outcome: {
146
+ agentName: "",
147
+ sessionId,
148
+ success: false,
149
+ error: "Missing target agent name.",
150
+ },
151
+ };
152
+ }
153
+
154
+ const resolved = await resolveProjectRootByAgentName(agentName);
155
+ if (!resolved.projectRoot) {
156
+ return {
157
+ success: false,
158
+ outcome: {
159
+ agentName,
160
+ sessionId,
161
+ success: false,
162
+ error: resolved.error || "Failed to resolve agent project path",
163
+ },
164
+ };
165
+ }
166
+
167
+ const pathError = validateAgentProjectRoot(resolved.projectRoot);
168
+ if (pathError) {
169
+ return {
170
+ success: false,
171
+ outcome: {
172
+ agentName,
173
+ projectRoot: resolved.projectRoot,
174
+ sessionId,
175
+ success: false,
176
+ error: pathError,
177
+ },
178
+ };
179
+ }
180
+
181
+ return {
182
+ success: true,
183
+ target: {
184
+ agentName,
185
+ projectRoot: resolved.projectRoot,
186
+ sessionId,
187
+ },
188
+ };
189
+ }
190
+
103
191
  function printAssistantReply(replyText: string): void {
104
192
  const text = String(replyText || "").trim();
105
193
  if (!text) {
@@ -137,59 +225,207 @@ function printQueuedResult(params: {
137
225
  });
138
226
  }
139
227
 
140
- /**
141
- * 向目标 agent 的 Console 主会话发送一轮消息。
142
- */
143
- export async function executeAgentChatTurn(params: {
228
+ function printAgentChatFailure(params: {
229
+ agentName: string;
230
+ error?: string;
231
+ }): void {
232
+ emitCliBlock({
233
+ tone: "error",
234
+ title: "Agent chat failed",
235
+ facts: [
236
+ {
237
+ label: "agent",
238
+ value: params.agentName,
239
+ },
240
+ {
241
+ label: "error",
242
+ value: buildAgentChatFailureText(params.error),
243
+ },
244
+ ],
245
+ });
246
+ }
247
+
248
+ async function readStreamFailure(response: Response): Promise<string> {
249
+ const contentType = String(response.headers.get("content-type") || "").toLowerCase();
250
+ const text = await response.text().catch(() => "");
251
+ if (contentType.includes("application/json")) {
252
+ try {
253
+ const payload = JSON.parse(text) as {
254
+ error?: string;
255
+ message?: string;
256
+ };
257
+ return (
258
+ String(payload.error || payload.message || "").trim() ||
259
+ `HTTP ${response.status}`
260
+ );
261
+ } catch {
262
+ // ignore malformed json payloads
263
+ }
264
+ }
265
+ return String(text || "").trim() || `HTTP ${response.status}`;
266
+ }
267
+
268
+ async function streamAgentChatTurn(params: {
144
269
  agentName: string;
145
270
  message: string;
146
271
  transport?: AgentChatTransportOptions;
147
- }): Promise<AgentChatExecutionOutcome> {
148
- const agentName = String(params.agentName || "").trim();
272
+ }): Promise<{
273
+ success: boolean;
274
+ error?: string;
275
+ emittedVisibleText: boolean;
276
+ }> {
149
277
  const message = normalizeChatMessage(params.message);
150
- const sessionId = AGENT_CHAT_DEFAULT_SESSION_ID;
278
+ if (!message) {
279
+ return {
280
+ success: false,
281
+ error: "Chat message is required.",
282
+ emittedVisibleText: false,
283
+ };
284
+ }
151
285
 
152
- if (!agentName) {
286
+ const resolved = await resolveAgentChatTarget(params.agentName);
287
+ if (!resolved.success) {
153
288
  return {
154
- agentName: "",
155
- sessionId,
156
289
  success: false,
157
- error: "Missing target agent name.",
290
+ error: resolved.outcome.error,
291
+ emittedVisibleText: false,
158
292
  };
159
293
  }
160
294
 
161
- if (!message) {
295
+ const { target } = resolved;
296
+ const endpoint = resolveDaemonEndpoint({
297
+ projectRoot: target.projectRoot,
298
+ host: params.transport?.host,
299
+ port: params.transport?.port,
300
+ });
301
+ const authHeaderValue = formatCliBearerHeaderValue(
302
+ resolveCliAuthToken({
303
+ explicitToken: params.transport?.token,
304
+ }),
305
+ );
306
+ const response = await fetch(
307
+ new URL(
308
+ `/api/control/sessions/${encodeURIComponent(target.sessionId)}/stream`,
309
+ endpoint.baseUrl,
310
+ ).toString(),
311
+ {
312
+ method: "POST",
313
+ headers: {
314
+ "Content-Type": "application/json",
315
+ ...(authHeaderValue ? { Authorization: authHeaderValue } : {}),
316
+ },
317
+ body: JSON.stringify({
318
+ instructions: message,
319
+ }),
320
+ },
321
+ ).catch((error) => {
322
+ throw new Error(`Failed to call ${endpoint.baseUrl}: ${String(error)}`);
323
+ });
324
+
325
+ if (!response.ok || !response.body) {
162
326
  return {
163
- agentName,
164
- sessionId,
165
327
  success: false,
166
- error: "Chat message is required.",
328
+ error: await readStreamFailure(response),
329
+ emittedVisibleText: false,
167
330
  };
168
331
  }
169
332
 
170
- const resolved = await resolveProjectRootByAgentName(agentName);
171
- if (!resolved.projectRoot) {
333
+ const decoder = new TextDecoder();
334
+ const reader = response.body.getReader();
335
+ let buffered = "";
336
+ let printedLeadingNewline = false;
337
+ let emittedVisibleText = false;
338
+
339
+ const renderEvent = (event: AgentSessionStreamEvent): void => {
340
+ if (event.type !== "text-delta" || !event.text) return;
341
+ if (!printedLeadingNewline) {
342
+ process.stdout.write("\n");
343
+ printedLeadingNewline = true;
344
+ }
345
+ process.stdout.write(event.text);
346
+ emittedVisibleText = true;
347
+ };
348
+
349
+ try {
350
+ while (true) {
351
+ const { done, value } = await reader.read();
352
+ if (done) break;
353
+ buffered += decoder.decode(value, { stream: true });
354
+ let newlineIndex = buffered.indexOf("\n");
355
+ while (newlineIndex >= 0) {
356
+ const line = buffered.slice(0, newlineIndex).trim();
357
+ buffered = buffered.slice(newlineIndex + 1);
358
+ if (line) {
359
+ const event = JSON.parse(line) as AgentSessionStreamEvent;
360
+ if (event.type === "error") {
361
+ return {
362
+ success: false,
363
+ error: event.error,
364
+ emittedVisibleText,
365
+ };
366
+ }
367
+ renderEvent(event);
368
+ }
369
+ newlineIndex = buffered.indexOf("\n");
370
+ }
371
+ }
372
+
373
+ const tail = buffered.trim();
374
+ if (tail) {
375
+ const event = JSON.parse(tail) as AgentSessionStreamEvent;
376
+ if (event.type === "error") {
377
+ return {
378
+ success: false,
379
+ error: event.error,
380
+ emittedVisibleText,
381
+ };
382
+ }
383
+ renderEvent(event);
384
+ }
385
+ } catch (error) {
172
386
  return {
173
- agentName,
174
- sessionId,
175
387
  success: false,
176
- error: resolved.error || "Failed to resolve agent project path",
388
+ error: error instanceof Error ? error.message : String(error),
389
+ emittedVisibleText,
177
390
  };
178
391
  }
179
392
 
180
- const pathError = validateAgentProjectRoot(resolved.projectRoot);
181
- if (pathError) {
393
+ if (printedLeadingNewline) {
394
+ process.stdout.write("\n\n");
395
+ }
396
+
397
+ return {
398
+ success: true,
399
+ emittedVisibleText,
400
+ };
401
+ }
402
+
403
+ /**
404
+ * 向目标 agent 的 Console 主会话发送一轮消息。
405
+ */
406
+ export async function executeAgentChatTurn(params: {
407
+ agentName: string;
408
+ message: string;
409
+ transport?: AgentChatTransportOptions;
410
+ }): Promise<AgentChatExecutionOutcome> {
411
+ const message = normalizeChatMessage(params.message);
412
+ const sessionId = AGENT_CHAT_DEFAULT_SESSION_ID;
413
+
414
+ if (!message) {
182
415
  return {
183
- agentName,
184
- projectRoot: resolved.projectRoot,
416
+ agentName: String(params.agentName || "").trim(),
185
417
  sessionId,
186
418
  success: false,
187
- error: pathError,
419
+ error: "Chat message is required.",
188
420
  };
189
421
  }
190
422
 
423
+ const resolved = await resolveAgentChatTarget(params.agentName);
424
+ if (!resolved.success) return resolved.outcome;
425
+
426
+ const { target } = resolved;
191
427
  const remote = await callAgentTransport<AgentChatExecuteResponse>({
192
- projectRoot: resolved.projectRoot,
428
+ projectRoot: target.projectRoot,
193
429
  path: `/api/control/sessions/${encodeURIComponent(sessionId)}/execute`,
194
430
  method: "POST",
195
431
  timeoutMs: AGENT_CHAT_EXECUTE_TIMEOUT_MS,
@@ -203,8 +439,8 @@ export async function executeAgentChatTurn(params: {
203
439
 
204
440
  if (!remote.success || !remote.data) {
205
441
  return {
206
- agentName,
207
- projectRoot: resolved.projectRoot,
442
+ agentName: target.agentName,
443
+ projectRoot: target.projectRoot,
208
444
  sessionId,
209
445
  success: false,
210
446
  error: remote.error || "Agent daemon unreachable or returned empty error (try `city agent restart`)",
@@ -212,8 +448,8 @@ export async function executeAgentChatTurn(params: {
212
448
  }
213
449
 
214
450
  return {
215
- agentName,
216
- projectRoot: resolved.projectRoot,
451
+ agentName: target.agentName,
452
+ projectRoot: target.projectRoot,
217
453
  sessionId: String(remote.data.sessionId || sessionId),
218
454
  success: isChatSuccess(remote.data),
219
455
  payload: remote.data,
@@ -232,8 +468,8 @@ async function runOneShotChat(params: {
232
468
  message: string;
233
469
  options: AgentChatCliOptions;
234
470
  }): Promise<void> {
235
- const outcome = await runWithSpinner(async () => {
236
- return await executeAgentChatTurn({
471
+ if (params.options.json === true) {
472
+ const outcome = await executeAgentChatTurn({
237
473
  agentName: params.agentName,
238
474
  message: params.message,
239
475
  transport: {
@@ -242,12 +478,6 @@ async function runOneShotChat(params: {
242
478
  token: params.options.token,
243
479
  },
244
480
  });
245
- }, {
246
- text: `${params.agentName} is replying...`,
247
- disabled: params.options.json === true,
248
- });
249
-
250
- if (params.options.json === true) {
251
481
  printResult({
252
482
  asJson: true,
253
483
  success: outcome.success,
@@ -263,33 +493,25 @@ async function runOneShotChat(params: {
263
493
  return;
264
494
  }
265
495
 
266
- if (!outcome.success || !outcome.payload) {
267
- emitCliBlock({
268
- tone: "error",
269
- title: "Agent chat failed",
270
- facts: [
271
- {
272
- label: "agent",
273
- value: params.agentName,
274
- },
275
- {
276
- label: "error",
277
- value: outcome.error || "Agent daemon returned empty error (check config with `city agent status`)",
278
- },
279
- ],
280
- });
281
- return;
282
- }
496
+ const outcome = await streamAgentChatTurn({
497
+ agentName: params.agentName,
498
+ message: params.message,
499
+ transport: {
500
+ host: params.options.host,
501
+ port: params.options.port,
502
+ token: params.options.token,
503
+ },
504
+ });
283
505
 
284
- if (outcome.payload.result?.queued === true) {
285
- printQueuedResult({
506
+ if (!outcome.success) {
507
+ printAgentChatFailure({
286
508
  agentName: params.agentName,
287
- payload: outcome.payload,
509
+ error: outcome.error,
288
510
  });
289
511
  return;
290
512
  }
291
513
 
292
- printAssistantReply(String(outcome.payload.result?.userVisible || ""));
514
+ if (!outcome.emittedVisibleText) printAssistantReply("");
293
515
  }
294
516
 
295
517
  /**
@@ -346,47 +568,25 @@ async function runInteractiveChat(params: {
346
568
  continue;
347
569
  }
348
570
 
349
- const outcome = await runWithSpinner(async () => {
350
- return await executeAgentChatTurn({
351
- agentName: params.agentName,
352
- message: text,
353
- transport: {
354
- host: params.options.host,
355
- port: params.options.port,
356
- token: params.options.token,
357
- },
358
- });
359
- }, {
360
- text: `${params.agentName} is replying...`,
571
+ const outcome = await streamAgentChatTurn({
572
+ agentName: params.agentName,
573
+ message: text,
574
+ transport: {
575
+ host: params.options.host,
576
+ port: params.options.port,
577
+ token: params.options.token,
578
+ },
361
579
  });
362
580
 
363
- if (!outcome.success || !outcome.payload) {
364
- emitCliBlock({
365
- tone: "error",
366
- title: "Agent chat failed",
367
- facts: [
368
- {
369
- label: "agent",
370
- value: params.agentName,
371
- },
372
- {
373
- label: "error",
374
- value: outcome.error || "Agent daemon returned empty error (check config with `city agent status`)",
375
- },
376
- ],
377
- });
378
- continue;
379
- }
380
-
381
- if (outcome.payload.result?.queued === true) {
382
- printQueuedResult({
581
+ if (!outcome.success) {
582
+ printAgentChatFailure({
383
583
  agentName: params.agentName,
384
- payload: outcome.payload,
584
+ error: outcome.error,
385
585
  });
386
586
  continue;
387
587
  }
388
588
 
389
- printAssistantReply(String(outcome.payload.result?.userVisible || ""));
589
+ if (!outcome.emittedVisibleText) printAssistantReply("");
390
590
  }
391
591
  } finally {
392
592
  rl.close();
@@ -71,7 +71,7 @@ function pickArgValue(args: string[], key: string): string | undefined {
71
71
  * 3) daemon meta args(`downcity.daemon.json`)
72
72
  * 4) 默认 `127.0.0.1:5314`
73
73
  */
74
- function resolveDaemonEndpoint(params: {
74
+ export function resolveDaemonEndpoint(params: {
75
75
  projectRoot: string;
76
76
  host?: string;
77
77
  port?: number;