@downcity/city 1.1.39 → 1.1.47

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.
Files changed (353) hide show
  1. package/README.md +4 -9
  2. package/bin/cli/Index.js +2 -0
  3. package/bin/cli/Index.js.map +1 -1
  4. package/bin/cli/agent/AgentChat.d.ts +2 -1
  5. package/bin/cli/agent/AgentChat.d.ts.map +1 -1
  6. package/bin/cli/agent/AgentChat.js +93 -214
  7. package/bin/cli/agent/AgentChat.js.map +1 -1
  8. package/bin/cli/agent/AgentChatTypes.d.ts +8 -12
  9. package/bin/cli/agent/AgentChatTypes.d.ts.map +1 -1
  10. package/bin/cli/agent/AgentHistory.js +2 -2
  11. package/bin/cli/agent/AgentHistory.js.map +1 -1
  12. package/bin/cli/agent/AgentManager.d.ts.map +1 -1
  13. package/bin/cli/agent/AgentManager.js +26 -27
  14. package/bin/cli/agent/AgentManager.js.map +1 -1
  15. package/bin/cli/agent/AgentManagerTypes.d.ts +2 -2
  16. package/bin/cli/agent/AgentManagerTypes.d.ts.map +1 -1
  17. package/bin/cli/agent/AgentReset.js +4 -4
  18. package/bin/cli/agent/AgentReset.js.map +1 -1
  19. package/bin/cli/agent/AgentSelection.js +6 -6
  20. package/bin/cli/agent/AgentSelection.js.map +1 -1
  21. package/bin/cli/agent/AgentSelectionTypes.d.ts +1 -1
  22. package/bin/cli/agent/AgentSelectionTypes.d.ts.map +1 -1
  23. package/bin/cli/agent/Init.js +10 -10
  24. package/bin/cli/agent/Init.js.map +1 -1
  25. package/bin/cli/agent/Restart.js +2 -2
  26. package/bin/cli/agent/Restart.js.map +1 -1
  27. package/bin/cli/agent/Run.d.ts +1 -1
  28. package/bin/cli/agent/Run.d.ts.map +1 -1
  29. package/bin/cli/agent/Run.js +37 -17
  30. package/bin/cli/agent/Run.js.map +1 -1
  31. package/bin/cli/agent/Start.js +2 -2
  32. package/bin/cli/agent/Start.js.map +1 -1
  33. package/bin/cli/agent/Stop.js +2 -2
  34. package/bin/cli/agent/Stop.js.map +1 -1
  35. package/bin/cli/control-plane/ControlPlaneProcess.js +5 -5
  36. package/bin/cli/control-plane/ControlPlaneProcess.js.map +1 -1
  37. package/bin/cli/model/ModelCreateCommand.js +1 -1
  38. package/bin/cli/model/ModelCreateCommand.js.map +1 -1
  39. package/bin/cli/model/ModelManageCommand.d.ts.map +1 -1
  40. package/bin/cli/model/ModelManageCommand.js +5 -3
  41. package/bin/cli/model/ModelManageCommand.js.map +1 -1
  42. package/bin/cli/model/ModelManager.js +3 -3
  43. package/bin/cli/model/ModelManager.js.map +1 -1
  44. package/bin/cli/model/ModelSupport.d.ts +0 -1
  45. package/bin/cli/model/ModelSupport.d.ts.map +1 -1
  46. package/bin/cli/model/ModelSupport.js +2 -11
  47. package/bin/cli/model/ModelSupport.js.map +1 -1
  48. package/bin/cli/shared/CliReporterTypes.d.ts +1 -1
  49. package/bin/cli/shared/Config.js +2 -2
  50. package/bin/cli/shared/Config.js.map +1 -1
  51. package/bin/cli/shared/Env.d.ts +1 -1
  52. package/bin/cli/shared/Env.d.ts.map +1 -1
  53. package/bin/cli/shared/Env.js +18 -149
  54. package/bin/cli/shared/Env.js.map +1 -1
  55. package/bin/cli/shared/IndexAgentCommand.d.ts.map +1 -1
  56. package/bin/cli/shared/IndexAgentCommand.js +3 -3
  57. package/bin/cli/shared/IndexAgentCommand.js.map +1 -1
  58. package/bin/cli/shared/IndexSupport.d.ts +3 -3
  59. package/bin/cli/shared/IndexSupport.d.ts.map +1 -1
  60. package/bin/cli/shared/IndexSupport.js +14 -8
  61. package/bin/cli/shared/IndexSupport.js.map +1 -1
  62. package/bin/cli/shared/ManagedPluginActionCommands.d.ts.map +1 -1
  63. package/bin/cli/shared/ManagedPluginActionCommands.js +5 -4
  64. package/bin/cli/shared/ManagedPluginActionCommands.js.map +1 -1
  65. package/bin/cli/shared/ManagedPluginRemote.d.ts.map +1 -1
  66. package/bin/cli/shared/ManagedPluginRemote.js +4 -4
  67. package/bin/cli/shared/ManagedPluginRemote.js.map +1 -1
  68. package/bin/cli/shared/PluginTargetSupport.d.ts +2 -2
  69. package/bin/cli/shared/PluginTargetSupport.d.ts.map +1 -1
  70. package/bin/cli/shared/PluginTargetSupport.js +19 -19
  71. package/bin/cli/shared/PluginTargetSupport.js.map +1 -1
  72. package/bin/cli/shared/Plugins.js +10 -10
  73. package/bin/cli/shared/Plugins.js.map +1 -1
  74. package/bin/cli/shared/PublicHostEnv.d.ts +1 -1
  75. package/bin/cli/shared/PublicHostEnv.js +2 -2
  76. package/bin/cli/shared/PublicHostEnv.js.map +1 -1
  77. package/bin/cli/shared/Terminal.d.ts +13 -0
  78. package/bin/cli/shared/Terminal.d.ts.map +1 -0
  79. package/bin/cli/shared/Terminal.js +22 -0
  80. package/bin/cli/shared/Terminal.js.map +1 -0
  81. package/bin/config/DowncitySchema.d.ts.map +1 -1
  82. package/bin/config/DowncitySchema.js +3 -111
  83. package/bin/config/DowncitySchema.js.map +1 -1
  84. package/bin/config/Paths.d.ts +0 -56
  85. package/bin/config/Paths.d.ts.map +1 -1
  86. package/bin/config/Paths.js +9 -51
  87. package/bin/config/Paths.js.map +1 -1
  88. package/bin/control/ControlGateway.js +1 -1
  89. package/bin/control/ControlGateway.js.map +1 -1
  90. package/bin/control/EnvApiRoutes.d.ts +1 -1
  91. package/bin/control/EnvApiRoutes.d.ts.map +1 -1
  92. package/bin/control/EnvApiRoutes.js +7 -79
  93. package/bin/control/EnvApiRoutes.js.map +1 -1
  94. package/bin/control/PlatformApiRoutes.d.ts +2 -2
  95. package/bin/control/PlatformApiRoutes.d.ts.map +1 -1
  96. package/bin/control/PlatformApiRoutes.js +2 -2
  97. package/bin/control/PlatformApiRoutes.js.map +1 -1
  98. package/bin/control/gateway/AgentActions.d.ts +2 -2
  99. package/bin/control/gateway/AgentActions.d.ts.map +1 -1
  100. package/bin/control/gateway/AgentActions.js +7 -7
  101. package/bin/control/gateway/AgentActions.js.map +1 -1
  102. package/bin/control/gateway/AgentCatalog.d.ts +3 -6
  103. package/bin/control/gateway/AgentCatalog.d.ts.map +1 -1
  104. package/bin/control/gateway/AgentCatalog.js +16 -18
  105. package/bin/control/gateway/AgentCatalog.js.map +1 -1
  106. package/bin/control/instant/InstantSessionRunner.d.ts.map +1 -1
  107. package/bin/control/instant/InstantSessionRunner.js +3 -1
  108. package/bin/control/instant/InstantSessionRunner.js.map +1 -1
  109. package/bin/env/ProcessEnv.d.ts +24 -0
  110. package/bin/env/ProcessEnv.d.ts.map +1 -0
  111. package/bin/env/ProcessEnv.js +41 -0
  112. package/bin/env/ProcessEnv.js.map +1 -0
  113. package/bin/http/auth/AuthEnv.d.ts +1 -1
  114. package/bin/http/auth/AuthEnv.js +1 -1
  115. package/bin/model/runtime/CreateRuntimeModel.d.ts +8 -0
  116. package/bin/model/runtime/CreateRuntimeModel.d.ts.map +1 -1
  117. package/bin/model/runtime/CreateRuntimeModel.js +43 -37
  118. package/bin/model/runtime/CreateRuntimeModel.js.map +1 -1
  119. package/bin/model/service/ModelPoolService.d.ts +1 -1
  120. package/bin/model/service/ModelPoolService.d.ts.map +1 -1
  121. package/bin/model/service/ModelPoolService.js +8 -6
  122. package/bin/model/service/ModelPoolService.js.map +1 -1
  123. package/bin/platform/store/StoreEnvRepository.d.ts +5 -49
  124. package/bin/platform/store/StoreEnvRepository.d.ts.map +1 -1
  125. package/bin/platform/store/StoreEnvRepository.js +31 -178
  126. package/bin/platform/store/StoreEnvRepository.js.map +1 -1
  127. package/bin/platform/store/StoreSchema.js +3 -44
  128. package/bin/platform/store/StoreSchema.js.map +1 -1
  129. package/bin/platform/store/index.d.ts +9 -45
  130. package/bin/platform/store/index.d.ts.map +1 -1
  131. package/bin/platform/store/index.js +12 -62
  132. package/bin/platform/store/index.js.map +1 -1
  133. package/bin/platform/store/schema.d.ts +2 -2
  134. package/bin/platform/store/schema.js +2 -2
  135. package/bin/process/daemon/Api.d.ts +1 -1
  136. package/bin/process/daemon/CliArgs.d.ts +1 -0
  137. package/bin/process/daemon/CliArgs.d.ts.map +1 -1
  138. package/bin/process/daemon/CliArgs.js +20 -1
  139. package/bin/process/daemon/CliArgs.js.map +1 -1
  140. package/bin/process/daemon/Client.d.ts +18 -2
  141. package/bin/process/daemon/Client.d.ts.map +1 -1
  142. package/bin/process/daemon/Client.js +70 -20
  143. package/bin/process/daemon/Client.js.map +1 -1
  144. package/bin/process/daemon/Manager.d.ts.map +1 -1
  145. package/bin/process/daemon/Manager.js +2 -1
  146. package/bin/process/daemon/Manager.js.map +1 -1
  147. package/bin/terminal/admin/auth-error.d.ts +34 -0
  148. package/bin/terminal/admin/auth-error.d.ts.map +1 -0
  149. package/bin/terminal/admin/auth-error.js +51 -0
  150. package/bin/terminal/admin/auth-error.js.map +1 -0
  151. package/bin/terminal/admin/commands/accounts.d.ts +6 -0
  152. package/bin/terminal/admin/commands/accounts.d.ts.map +1 -0
  153. package/bin/terminal/admin/commands/accounts.js +44 -0
  154. package/bin/terminal/admin/commands/accounts.js.map +1 -0
  155. package/bin/terminal/admin/commands/balance.d.ts +6 -0
  156. package/bin/terminal/admin/commands/balance.d.ts.map +1 -0
  157. package/bin/terminal/admin/commands/balance.js +153 -0
  158. package/bin/terminal/admin/commands/balance.js.map +1 -0
  159. package/bin/terminal/admin/commands/config.d.ts +10 -0
  160. package/bin/terminal/admin/commands/config.d.ts.map +1 -0
  161. package/bin/terminal/admin/commands/config.js +11 -0
  162. package/bin/terminal/admin/commands/config.js.map +1 -0
  163. package/bin/terminal/admin/commands/custom.d.ts +6 -0
  164. package/bin/terminal/admin/commands/custom.d.ts.map +1 -0
  165. package/bin/terminal/admin/commands/custom.js +47 -0
  166. package/bin/terminal/admin/commands/custom.js.map +1 -0
  167. package/bin/terminal/admin/commands/instruction.d.ts +9 -0
  168. package/bin/terminal/admin/commands/instruction.d.ts.map +1 -0
  169. package/bin/terminal/admin/commands/instruction.js +10 -0
  170. package/bin/terminal/admin/commands/instruction.js.map +1 -0
  171. package/bin/terminal/admin/commands/models.d.ts +14 -0
  172. package/bin/terminal/admin/commands/models.d.ts.map +1 -0
  173. package/bin/terminal/admin/commands/models.js +61 -0
  174. package/bin/terminal/admin/commands/models.js.map +1 -0
  175. package/bin/terminal/admin/commands/payment.d.ts +6 -0
  176. package/bin/terminal/admin/commands/payment.d.ts.map +1 -0
  177. package/bin/terminal/admin/commands/payment.js +59 -0
  178. package/bin/terminal/admin/commands/payment.js.map +1 -0
  179. package/bin/terminal/admin/commands/products.d.ts +6 -0
  180. package/bin/terminal/admin/commands/products.d.ts.map +1 -0
  181. package/bin/terminal/admin/commands/products.js +80 -0
  182. package/bin/terminal/admin/commands/products.js.map +1 -0
  183. package/bin/terminal/admin/commands/service-env.d.ts +11 -0
  184. package/bin/terminal/admin/commands/service-env.d.ts.map +1 -0
  185. package/bin/terminal/admin/commands/service-env.js +248 -0
  186. package/bin/terminal/admin/commands/service-env.js.map +1 -0
  187. package/bin/terminal/admin/commands/usage.d.ts +6 -0
  188. package/bin/terminal/admin/commands/usage.d.ts.map +1 -0
  189. package/bin/terminal/admin/commands/usage.js +44 -0
  190. package/bin/terminal/admin/commands/usage.js.map +1 -0
  191. package/bin/terminal/admin/loop.d.ts +6 -0
  192. package/bin/terminal/admin/loop.d.ts.map +1 -0
  193. package/bin/terminal/admin/loop.js +70 -0
  194. package/bin/terminal/admin/loop.js.map +1 -0
  195. package/bin/terminal/agent/pi-agent.d.ts +15 -0
  196. package/bin/terminal/agent/pi-agent.d.ts.map +1 -0
  197. package/bin/terminal/agent/pi-agent.js +136 -0
  198. package/bin/terminal/agent/pi-agent.js.map +1 -0
  199. package/bin/terminal/app.d.ts +13 -0
  200. package/bin/terminal/app.d.ts.map +1 -0
  201. package/bin/terminal/app.js +123 -0
  202. package/bin/terminal/app.js.map +1 -0
  203. package/bin/terminal/auth/admin.d.ts +8 -0
  204. package/bin/terminal/auth/admin.d.ts.map +1 -0
  205. package/bin/terminal/auth/admin.js +18 -0
  206. package/bin/terminal/auth/admin.js.map +1 -0
  207. package/bin/terminal/auth/mode-select.d.ts +11 -0
  208. package/bin/terminal/auth/mode-select.d.ts.map +1 -0
  209. package/bin/terminal/auth/mode-select.js +33 -0
  210. package/bin/terminal/auth/mode-select.js.map +1 -0
  211. package/bin/terminal/auth/server-switch.d.ts +22 -0
  212. package/bin/terminal/auth/server-switch.d.ts.map +1 -0
  213. package/bin/terminal/auth/server-switch.js +241 -0
  214. package/bin/terminal/auth/server-switch.js.map +1 -0
  215. package/bin/terminal/auth/user.d.ts +19 -0
  216. package/bin/terminal/auth/user.d.ts.map +1 -0
  217. package/bin/terminal/auth/user.js +261 -0
  218. package/bin/terminal/auth/user.js.map +1 -0
  219. package/bin/terminal/core/browser.d.ts +12 -0
  220. package/bin/terminal/core/browser.d.ts.map +1 -0
  221. package/bin/terminal/core/browser.js +29 -0
  222. package/bin/terminal/core/browser.js.map +1 -0
  223. package/bin/terminal/core/env.d.ts +15 -0
  224. package/bin/terminal/core/env.d.ts.map +1 -0
  225. package/bin/terminal/core/env.js +67 -0
  226. package/bin/terminal/core/env.js.map +1 -0
  227. package/bin/terminal/core/session.d.ts +97 -0
  228. package/bin/terminal/core/session.d.ts.map +1 -0
  229. package/bin/terminal/core/session.js +342 -0
  230. package/bin/terminal/core/session.js.map +1 -0
  231. package/bin/terminal/core/stripe.d.ts +26 -0
  232. package/bin/terminal/core/stripe.d.ts.map +1 -0
  233. package/bin/terminal/core/stripe.js +22 -0
  234. package/bin/terminal/core/stripe.js.map +1 -0
  235. package/bin/terminal/core/ui.d.ts +29 -0
  236. package/bin/terminal/core/ui.d.ts.map +1 -0
  237. package/bin/terminal/core/ui.js +60 -0
  238. package/bin/terminal/core/ui.js.map +1 -0
  239. package/bin/terminal/core/update.d.ts +20 -0
  240. package/bin/terminal/core/update.d.ts.map +1 -0
  241. package/bin/terminal/core/update.js +193 -0
  242. package/bin/terminal/core/update.js.map +1 -0
  243. package/bin/terminal/user/balance.d.ts +31 -0
  244. package/bin/terminal/user/balance.d.ts.map +1 -0
  245. package/bin/terminal/user/balance.js +131 -0
  246. package/bin/terminal/user/balance.js.map +1 -0
  247. package/bin/terminal/user/chat.d.ts +12 -0
  248. package/bin/terminal/user/chat.d.ts.map +1 -0
  249. package/bin/terminal/user/chat.js +70 -0
  250. package/bin/terminal/user/chat.js.map +1 -0
  251. package/bin/terminal/user/loop.d.ts +13 -0
  252. package/bin/terminal/user/loop.d.ts.map +1 -0
  253. package/bin/terminal/user/loop.js +93 -0
  254. package/bin/terminal/user/loop.js.map +1 -0
  255. package/bin/terminal/user/models.d.ts +10 -0
  256. package/bin/terminal/user/models.d.ts.map +1 -0
  257. package/bin/terminal/user/models.js +39 -0
  258. package/bin/terminal/user/models.js.map +1 -0
  259. package/bin/utils/storage.d.ts +0 -1
  260. package/bin/utils/storage.d.ts.map +1 -1
  261. package/bin/utils/storage.js +0 -6
  262. package/bin/utils/storage.js.map +1 -1
  263. package/package.json +7 -3
  264. package/public/app.js +3 -3
  265. package/src/cli/Index.ts +2 -0
  266. package/src/cli/agent/AgentChat.ts +113 -289
  267. package/src/cli/agent/AgentChatTypes.ts +8 -12
  268. package/src/cli/agent/AgentHistory.ts +2 -2
  269. package/src/cli/agent/AgentManager.ts +27 -28
  270. package/src/cli/agent/AgentManagerTypes.ts +2 -2
  271. package/src/cli/agent/AgentReset.ts +4 -4
  272. package/src/cli/agent/AgentSelection.ts +6 -6
  273. package/src/cli/agent/AgentSelectionTypes.ts +1 -1
  274. package/src/cli/agent/Init.ts +13 -13
  275. package/src/cli/agent/Restart.ts +2 -2
  276. package/src/cli/agent/Run.ts +38 -17
  277. package/src/cli/agent/Start.ts +2 -2
  278. package/src/cli/agent/Stop.ts +2 -2
  279. package/src/cli/control-plane/ControlPlaneProcess.ts +5 -5
  280. package/src/cli/model/ModelCreateCommand.ts +1 -1
  281. package/src/cli/model/ModelManageCommand.ts +5 -3
  282. package/src/cli/model/ModelManager.ts +3 -3
  283. package/src/cli/model/ModelSupport.ts +2 -10
  284. package/src/cli/shared/CliReporterTypes.ts +1 -1
  285. package/src/cli/shared/Config.ts +2 -2
  286. package/src/cli/shared/Env.ts +22 -230
  287. package/src/cli/shared/IndexAgentCommand.ts +3 -4
  288. package/src/cli/shared/IndexSupport.ts +16 -10
  289. package/src/cli/shared/ManagedPluginActionCommands.ts +4 -4
  290. package/src/cli/shared/ManagedPluginRemote.ts +4 -4
  291. package/src/cli/shared/PluginTargetSupport.ts +19 -19
  292. package/src/cli/shared/Plugins.ts +10 -10
  293. package/src/cli/shared/PublicHostEnv.ts +2 -2
  294. package/src/cli/shared/Terminal.ts +24 -0
  295. package/src/config/DowncitySchema.ts +3 -113
  296. package/src/config/Paths.ts +9 -90
  297. package/src/control/ControlGateway.ts +3 -3
  298. package/src/control/EnvApiRoutes.ts +7 -91
  299. package/src/control/PlatformApiRoutes.ts +6 -6
  300. package/src/control/gateway/AgentActions.ts +10 -10
  301. package/src/control/gateway/AgentCatalog.ts +17 -21
  302. package/src/control/instant/InstantSessionRunner.ts +3 -1
  303. package/src/env/ProcessEnv.ts +43 -0
  304. package/src/http/auth/AuthEnv.ts +1 -1
  305. package/src/model/runtime/CreateRuntimeModel.ts +54 -37
  306. package/src/model/service/ModelPoolService.ts +13 -11
  307. package/src/platform/store/StoreEnvRepository.ts +31 -234
  308. package/src/platform/store/StoreSchema.ts +3 -49
  309. package/src/platform/store/index.ts +11 -80
  310. package/src/platform/store/schema.ts +2 -2
  311. package/src/process/daemon/Api.ts +1 -1
  312. package/src/process/daemon/CliArgs.ts +24 -1
  313. package/src/process/daemon/Client.ts +90 -22
  314. package/src/process/daemon/Manager.ts +2 -1
  315. package/src/terminal/admin/auth-error.ts +62 -0
  316. package/src/terminal/admin/commands/accounts.ts +44 -0
  317. package/src/terminal/admin/commands/balance.ts +160 -0
  318. package/src/terminal/admin/commands/config.ts +13 -0
  319. package/src/terminal/admin/commands/custom.ts +46 -0
  320. package/src/terminal/admin/commands/instruction.ts +12 -0
  321. package/src/terminal/admin/commands/models.ts +64 -0
  322. package/src/terminal/admin/commands/payment.ts +94 -0
  323. package/src/terminal/admin/commands/products.ts +72 -0
  324. package/src/terminal/admin/commands/service-env.ts +256 -0
  325. package/src/terminal/admin/commands/usage.ts +44 -0
  326. package/src/terminal/admin/loop.ts +69 -0
  327. package/src/terminal/agent/pi-agent.ts +180 -0
  328. package/src/terminal/app.ts +120 -0
  329. package/src/terminal/auth/admin.ts +21 -0
  330. package/src/terminal/auth/mode-select.ts +38 -0
  331. package/src/terminal/auth/server-switch.ts +275 -0
  332. package/src/terminal/auth/user.ts +351 -0
  333. package/src/terminal/core/browser.ts +31 -0
  334. package/src/terminal/core/env.ts +71 -0
  335. package/src/terminal/core/session.ts +450 -0
  336. package/src/terminal/core/stripe.ts +37 -0
  337. package/src/terminal/core/ui.ts +84 -0
  338. package/src/terminal/core/update.ts +230 -0
  339. package/src/terminal/user/balance.ts +215 -0
  340. package/src/terminal/user/chat.ts +80 -0
  341. package/src/terminal/user/loop.ts +112 -0
  342. package/src/terminal/user/models.ts +43 -0
  343. package/src/utils/storage.ts +0 -7
  344. package/bin/process/rpc/Client.d.ts +0 -13
  345. package/bin/process/rpc/Client.d.ts.map +0 -1
  346. package/bin/process/rpc/Client.js +0 -98
  347. package/bin/process/rpc/Client.js.map +0 -1
  348. package/bin/process/rpc/Paths.d.ts +0 -14
  349. package/bin/process/rpc/Paths.d.ts.map +0 -1
  350. package/bin/process/rpc/Paths.js +0 -36
  351. package/bin/process/rpc/Paths.js.map +0 -1
  352. package/src/process/rpc/Client.ts +0 -113
  353. package/src/process/rpc/Paths.ts +0 -43
package/README.md CHANGED
@@ -64,8 +64,7 @@ src
64
64
  │ └── store/
65
65
  ├── process/
66
66
  │ ├── daemon/
67
- ├── registry/
68
- │ └── rpc/
67
+ └── registry/
69
68
  ├── types/
70
69
  │ ├── chat/
71
70
  │ ├── contact/
@@ -145,7 +144,7 @@ src
145
144
 
146
145
  - `src/process/`
147
146
  - city runtime 进程侧能力。
148
- - 统一承接 daemonregistry、local rpc,不再散落在顶层目录。
147
+ - 统一承接 daemonregistry,不再散落在顶层目录。
149
148
 
150
149
  - `src/process/daemon/`
151
150
  - Agent daemon 的 pid/log/meta/启停管理。
@@ -155,10 +154,6 @@ src
155
154
  - city runtime 与多 Agent registry 状态。
156
155
  - 记录哪些 agent 已登记、哪些 daemon 正在运行、Console/city pid 路径等。
157
156
 
158
- - `src/process/rpc/`
159
- - city 侧 local RPC 客户端辅助。
160
- - 用于本机调用 Agent 暴露的 IPC 接口。
161
-
162
157
  - `src/types/`
163
158
  - 当前仅保留尚未进一步归位的领域类型。
164
159
  - 目前主要是 `chat / contact / task` 三组。
@@ -209,7 +204,7 @@ browser / UI
209
204
  -> src/control/ControlGateway.ts
210
205
  -> src/control/gateway/*
211
206
  -> src/process/registry/*
212
- -> 转发到单 Agent HTTP / RPC
207
+ -> 转发到单 Agent HTTP
213
208
  ```
214
209
 
215
210
  ### 5. 全局模型池
@@ -252,6 +247,6 @@ city model ...
252
247
  - 模型池、provider store 与模型创建逻辑留在 city 宿主层,不下沉回 `@downcity/agent`。
253
248
  - `control/` 是平台 gateway / control plane。
254
249
  - 单 Agent 的 HTTP control API 语义应该留在 `@downcity/agent`。
255
- - `process/` 统一放 city 的进程管理、registry、RPC,不要再散落回顶层。
250
+ - `process/` 统一放 city 的进程管理与 registry,不要再散落回顶层。
256
251
  - `config/` 只放静态配置/schema/路径,不混入运行时 store 逻辑。
257
252
  - CLI 类型、store 类型、city 自有小类型优先就近放在对应模块旁边。
package/bin/cli/Index.js CHANGED
@@ -22,6 +22,7 @@ import { registerEnvCommand } from "./shared/Env.js";
22
22
  import { registerTokenCommand } from "./shared/Token.js";
23
23
  import { registerResetCommand } from "./shared/Reset.js";
24
24
  import { registerChatCommand } from "./shared/Chat.js";
25
+ import { registerTerminalCommand } from "./shared/Terminal.js";
25
26
  import { setCliVerbosity } from "./shared/CliReporter.js";
26
27
  const __filename = fileURLToPath(import.meta.url);
27
28
  const __dirname = dirname(__filename);
@@ -78,6 +79,7 @@ registerTokenCommand(program);
78
79
  registerEnvCommand(program);
79
80
  registerResetCommand(program);
80
81
  registerChatCommand(program);
82
+ registerTerminalCommand(program, packageJson.version);
81
83
  registerPluginsCommand(program);
82
84
  // 受 agent 托管的 plugin 命令统一注册(chat / task / memory / shell / future managed plugins)
83
85
  registerManagedPluginCommandsForCli(program, builtinPlugins);
@@ -1 +1 @@
1
- {"version":3,"file":"Index.js","sourceRoot":"","sources":["../../src/cli/Index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Index.js","sourceRoot":"","sources":["../../src/cli/Index.ts"],"names":[],"mappings":"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"}
@@ -5,13 +5,14 @@
5
5
  * - 统一覆盖交互式持续对话与一次性消息模式,不再保留独立 `quest` 命令。
6
6
  * - 目标 agent 始终按 managed agent registry 名称解析,不依赖当前工作目录。
7
7
  * - 默认使用独立 local-cli 主会话:`local-cli-chat-main`。
8
+ * - 远程访问统一走 `RemoteAgent({ url })`,不再在 CLI 侧维护第二套 HTTP SDK transport。
8
9
  */
9
10
  import type { AgentChatCliOptions, AgentChatExecutionOutcome, AgentChatTransportOptions } from "./AgentChatTypes.js";
10
11
  /**
11
12
  * 向目标 agent 的 SDK actor session 发送一轮消息。
12
13
  */
13
14
  export declare function executeAgentChatTurn(params: {
14
- agentName: string;
15
+ agentId: string;
15
16
  message: string;
16
17
  transport?: AgentChatTransportOptions;
17
18
  }): Promise<AgentChatExecutionOutcome>;
@@ -1 +1 @@
1
- {"version":3,"file":"AgentChat.d.ts","sourceRoot":"","sources":["../../../src/cli/agent/AgentChat.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAkBH,OAAO,KAAK,EACV,mBAAmB,EACnB,yBAAyB,EAEzB,yBAAyB,EAC1B,MAAM,qBAAqB,CAAC;AA6d7B;;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,CAwCrC;AAqID;;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;;;;;;;;GAQG;AAkBH,OAAO,KAAK,EACV,mBAAmB,EACnB,yBAAyB,EAEzB,yBAAyB,EAC1B,MAAM,qBAAqB,CAAC;AAiT7B;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,yBAAyB,CAAC;CACvC,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAwCrC;AAgID;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoC7E"}
@@ -5,18 +5,18 @@
5
5
  * - 统一覆盖交互式持续对话与一次性消息模式,不再保留独立 `quest` 命令。
6
6
  * - 目标 agent 始终按 managed agent registry 名称解析,不依赖当前工作目录。
7
7
  * - 默认使用独立 local-cli 主会话:`local-cli-chat-main`。
8
+ * - 远程访问统一走 `RemoteAgent({ url })`,不再在 CLI 侧维护第二套 HTTP SDK transport。
8
9
  */
9
10
  import { createInterface } from "node:readline/promises";
10
11
  import chalk from "chalk";
11
12
  import prompts from "prompts";
13
+ import { RemoteAgent, } from "@downcity/agent";
12
14
  import { emitCliBlock } from "../shared/CliReporter.js";
13
15
  import { printResult } from "../../utils/cli/CliOutput.js";
14
- import { resolveProjectRootByAgentName, validateAgentProjectRoot, } from "../shared/PluginTargetSupport.js";
16
+ import { resolveProjectRootByAgentId, validateAgentProjectRoot, } from "../shared/PluginTargetSupport.js";
15
17
  import { listRegisteredAgentsForCli } from "./AgentSelection.js";
16
- import { formatCliBearerHeaderValue, resolveCliAuthToken, } from "../../http/auth/CliAuthStateStore.js";
17
- import { resolveDaemonEndpoint } from "../../process/daemon/Client.js";
18
+ import { resolveDaemonRpcEndpoint } from "../../process/daemon/Client.js";
18
19
  import { AGENT_CHAT_DEFAULT_SESSION_ID } from "./AgentChatTypes.js";
19
- const SDK_EVENTS_READY_TYPE = "sdk-events-ready";
20
20
  function normalizeChatMessage(input) {
21
21
  return String(input || "").trim();
22
22
  }
@@ -34,15 +34,15 @@ function buildAgentChatFailureText(error) {
34
34
  return (String(error || "").trim() ||
35
35
  "Agent daemon returned empty error (check config with `city agent status`)");
36
36
  }
37
- async function resolveChatTargetAgentName(inputName) {
38
- const explicit = String(inputName || "").trim();
37
+ async function resolveChatTargetAgentId(inputId) {
38
+ const explicit = String(inputId || "").trim();
39
39
  if (explicit)
40
40
  return explicit;
41
41
  if (!process.stdin.isTTY || !process.stdout.isTTY) {
42
42
  emitCliBlock({
43
43
  tone: "error",
44
- title: "Agent name is required",
45
- note: "Use `city agent chat --to <agentName>` or run this command in an interactive terminal.",
44
+ title: "Agent id is required",
45
+ note: "Use `city agent chat --to <id>` or run this command in an interactive terminal.",
46
46
  });
47
47
  return null;
48
48
  }
@@ -57,45 +57,45 @@ async function resolveChatTargetAgentName(inputName) {
57
57
  }
58
58
  const response = (await prompts({
59
59
  type: "select",
60
- name: "agentName",
60
+ name: "agentId",
61
61
  message: "选择要聊天的 Agent",
62
62
  choices: runningAgents.map((agent) => ({
63
- title: agent.name,
63
+ title: agent.id,
64
64
  description: agent.projectRoot,
65
- value: agent.name,
65
+ value: agent.id,
66
66
  })),
67
67
  initial: 0,
68
68
  }));
69
- const agentName = String(response.agentName || "").trim();
70
- if (!agentName) {
69
+ const agentId = String(response.agentId || "").trim();
70
+ if (!agentId) {
71
71
  emitCliBlock({
72
72
  tone: "info",
73
73
  title: "Agent chat cancelled",
74
74
  });
75
75
  return null;
76
76
  }
77
- return agentName;
77
+ return agentId;
78
78
  }
79
- async function resolveAgentChatTarget(agentNameInput) {
80
- const agentName = String(agentNameInput || "").trim();
79
+ async function resolveAgentChatTarget(agentIdInput) {
80
+ const agentId = String(agentIdInput || "").trim();
81
81
  const sessionId = AGENT_CHAT_DEFAULT_SESSION_ID;
82
- if (!agentName) {
82
+ if (!agentId) {
83
83
  return {
84
84
  success: false,
85
85
  outcome: {
86
- agentName: "",
86
+ agentId: "",
87
87
  sessionId,
88
88
  success: false,
89
- error: "Missing target agent name.",
89
+ error: "Missing target agent id.",
90
90
  },
91
91
  };
92
92
  }
93
- const resolved = await resolveProjectRootByAgentName(agentName);
93
+ const resolved = await resolveProjectRootByAgentId(agentId);
94
94
  if (!resolved.projectRoot) {
95
95
  return {
96
96
  success: false,
97
97
  outcome: {
98
- agentName,
98
+ agentId,
99
99
  sessionId,
100
100
  success: false,
101
101
  error: resolved.error || "Failed to resolve agent project path",
@@ -107,7 +107,7 @@ async function resolveAgentChatTarget(agentNameInput) {
107
107
  return {
108
108
  success: false,
109
109
  outcome: {
110
- agentName,
110
+ agentId,
111
111
  projectRoot: resolved.projectRoot,
112
112
  sessionId,
113
113
  success: false,
@@ -118,7 +118,7 @@ async function resolveAgentChatTarget(agentNameInput) {
118
118
  return {
119
119
  success: true,
120
120
  target: {
121
- agentName,
121
+ agentId,
122
122
  projectRoot: resolved.projectRoot,
123
123
  sessionId,
124
124
  },
@@ -143,7 +143,7 @@ function printAgentChatFailure(params) {
143
143
  facts: [
144
144
  {
145
145
  label: "agent",
146
- value: params.agentName,
146
+ value: params.agentId,
147
147
  },
148
148
  {
149
149
  label: "error",
@@ -152,53 +152,25 @@ function printAgentChatFailure(params) {
152
152
  ],
153
153
  });
154
154
  }
155
- async function readHttpFailure(response) {
156
- const contentType = String(response.headers.get("content-type") || "").toLowerCase();
157
- const text = await response.text().catch(() => "");
158
- if (contentType.includes("application/json")) {
159
- try {
160
- const payload = JSON.parse(text);
161
- return (String(payload.error || payload.message || "").trim() ||
162
- `HTTP ${response.status}`);
163
- }
164
- catch {
165
- // ignore malformed json payloads
166
- }
167
- }
168
- return String(text || "").trim() || `HTTP ${response.status}`;
169
- }
170
- function isSdkEventsReadyFrame(value) {
171
- return (typeof value === "object" &&
172
- value !== null &&
173
- "type" in value &&
174
- String(value.type || "") === SDK_EVENTS_READY_TYPE);
175
- }
176
- async function postSdkPrompt(params) {
177
- const response = await fetch(new URL(`/api/sdk/sessions/${encodeURIComponent(params.sessionId)}/prompt`, params.endpointBaseUrl).toString(), {
178
- method: "POST",
179
- headers: {
180
- "Content-Type": "application/json",
181
- ...(params.authHeaderValue ? { Authorization: params.authHeaderValue } : {}),
182
- },
183
- body: JSON.stringify({
184
- query: params.message,
185
- }),
186
- }).catch((error) => {
187
- throw new Error(`Failed to call ${params.endpointBaseUrl}: ${String(error)}`);
155
+ function createRemoteAgent(params) {
156
+ const endpoint = resolveDaemonRpcEndpoint({
157
+ projectRoot: params.projectRoot,
158
+ host: params.transport?.host,
159
+ port: params.transport?.port,
188
160
  });
189
- const payload = (await response.json().catch(() => ({})));
190
- const turnId = String(payload.turn?.id || "").trim();
191
- if (!response.ok || payload.success !== true || !turnId) {
192
- return {
193
- success: false,
194
- error: String(payload.error || "").trim() ||
195
- `SDK prompt failed with HTTP ${response.status}`,
196
- };
161
+ return new RemoteAgent({
162
+ url: `rpc://${endpoint.host}:${endpoint.port}`,
163
+ });
164
+ }
165
+ async function getOrCreateRemoteSession(params) {
166
+ try {
167
+ return await params.remote_agent.getSession(params.session_id);
168
+ }
169
+ catch {
170
+ return await params.remote_agent.createSession({
171
+ sessionId: params.session_id,
172
+ });
197
173
  }
198
- return {
199
- success: true,
200
- turnId,
201
- };
202
174
  }
203
175
  async function runSdkPromptTurn(params) {
204
176
  const message = normalizeChatMessage(params.message);
@@ -210,7 +182,7 @@ async function runSdkPromptTurn(params) {
210
182
  text: "",
211
183
  };
212
184
  }
213
- const resolved = await resolveAgentChatTarget(params.agentName);
185
+ const resolved = await resolveAgentChatTarget(params.agentId);
214
186
  if (!resolved.success) {
215
187
  return {
216
188
  success: false,
@@ -219,154 +191,66 @@ async function runSdkPromptTurn(params) {
219
191
  text: "",
220
192
  };
221
193
  }
222
- const { target } = resolved;
223
- const abortController = new AbortController();
224
- const endpoint = resolveDaemonEndpoint({
225
- projectRoot: target.projectRoot,
226
- host: params.transport?.host,
227
- port: params.transport?.port,
194
+ const remote_agent = createRemoteAgent({
195
+ projectRoot: resolved.target.projectRoot,
196
+ transport: params.transport,
228
197
  });
229
- const authHeaderValue = formatCliBearerHeaderValue(resolveCliAuthToken({
230
- explicitToken: params.transport?.token,
231
- }));
232
- const response = await fetch(new URL(`/api/sdk/sessions/${encodeURIComponent(target.sessionId)}/events`, endpoint.baseUrl).toString(), {
233
- headers: {
234
- ...(authHeaderValue ? { Authorization: authHeaderValue } : {}),
235
- },
236
- signal: abortController.signal,
237
- }).catch((error) => {
238
- throw new Error(`Failed to call ${endpoint.baseUrl}: ${String(error)}`);
198
+ const session = await getOrCreateRemoteSession({
199
+ remote_agent,
200
+ session_id: resolved.target.sessionId,
239
201
  });
240
- if (!response.ok || !response.body) {
241
- return {
242
- success: false,
243
- error: await readHttpFailure(response),
244
- emittedVisibleText: false,
245
- text: "",
246
- };
247
- }
248
- const decoder = new TextDecoder();
249
- const reader = response.body.getReader();
250
- let buffered = "";
251
- let printedLeadingNewline = false;
252
- let emittedVisibleText = false;
253
- let promptTurnId = "";
254
- let promptPosted = false;
255
- let finalText = "";
202
+ let printed_leading_newline = false;
203
+ let emitted_visible_text = false;
204
+ let final_text = "";
205
+ let target_turn_id = "";
256
206
  const renderEvent = (event) => {
257
- if (event.type !== "text-delta" || event.turnId !== promptTurnId || !event.text)
207
+ if (event.type !== "text-delta" || event.turnId !== target_turn_id || !event.text) {
258
208
  return;
209
+ }
259
210
  if (params.renderText === false)
260
211
  return;
261
- if (!printedLeadingNewline) {
212
+ if (!printed_leading_newline) {
262
213
  process.stdout.write("\n");
263
- printedLeadingNewline = true;
214
+ printed_leading_newline = true;
264
215
  }
265
216
  process.stdout.write(event.text);
266
- emittedVisibleText = true;
217
+ emitted_visible_text = true;
267
218
  };
268
- const handleLine = async (line) => {
269
- const value = JSON.parse(line);
270
- if (isSdkEventsReadyFrame(value)) {
271
- if (!promptPosted) {
272
- promptPosted = true;
273
- const promptResult = await postSdkPrompt({
274
- endpointBaseUrl: endpoint.baseUrl,
275
- sessionId: target.sessionId,
276
- message,
277
- authHeaderValue,
278
- });
279
- if (!promptResult.success) {
280
- return {
281
- done: true,
282
- error: promptResult.error,
283
- };
284
- }
285
- promptTurnId = promptResult.turnId;
286
- }
287
- return { done: false };
288
- }
289
- const event = value;
290
- if (event.type === "error") {
291
- return {
292
- done: true,
293
- error: event.message,
294
- };
295
- }
219
+ const unsubscribe = session.subscribe((event) => {
296
220
  renderEvent(event);
297
- if (event.type === "turn-finish" && event.turnId === promptTurnId) {
298
- finalText = event.text;
299
- return {
300
- done: true,
301
- ...(event.success ? {} : { error: event.error || "Agent turn failed" }),
302
- };
221
+ if (event.type === "turn-finish" && event.turnId === target_turn_id) {
222
+ final_text = event.text;
303
223
  }
304
- return { done: false };
305
- };
306
- const finishTurn = (result) => {
307
- if (printedLeadingNewline) {
224
+ });
225
+ try {
226
+ const turn = await session.prompt({ query: message });
227
+ target_turn_id = turn.id;
228
+ const result = await turn.finished;
229
+ final_text = result.text;
230
+ if (printed_leading_newline) {
308
231
  process.stdout.write("\n\n");
309
232
  }
310
233
  return {
311
234
  success: result.success,
312
235
  ...(result.error ? { error: result.error } : {}),
313
- emittedVisibleText,
314
- text: finalText,
236
+ emittedVisibleText: emitted_visible_text,
237
+ text: final_text,
315
238
  };
316
- };
317
- try {
318
- while (true) {
319
- const { done, value } = await reader.read();
320
- if (done)
321
- break;
322
- buffered += decoder.decode(value, { stream: true });
323
- let newlineIndex = buffered.indexOf("\n");
324
- while (newlineIndex >= 0) {
325
- const line = buffered.slice(0, newlineIndex).trim();
326
- buffered = buffered.slice(newlineIndex + 1);
327
- if (line) {
328
- const result = await handleLine(line);
329
- if (result.done) {
330
- return finishTurn({
331
- success: !result.error,
332
- ...(result.error ? { error: result.error } : {}),
333
- });
334
- }
335
- }
336
- newlineIndex = buffered.indexOf("\n");
337
- }
338
- }
339
- const tail = buffered.trim();
340
- if (tail) {
341
- const result = await handleLine(tail);
342
- if (result.done) {
343
- return finishTurn({
344
- success: !result.error,
345
- ...(result.error ? { error: result.error } : {}),
346
- });
347
- }
348
- }
349
239
  }
350
240
  catch (error) {
351
- return finishTurn({
241
+ if (printed_leading_newline) {
242
+ process.stdout.write("\n\n");
243
+ }
244
+ return {
352
245
  success: false,
353
246
  error: error instanceof Error ? error.message : String(error),
354
- });
247
+ emittedVisibleText: emitted_visible_text,
248
+ text: final_text,
249
+ };
355
250
  }
356
251
  finally {
357
- abortController.abort();
358
- await reader.cancel().catch(() => undefined);
359
- try {
360
- reader.releaseLock();
361
- }
362
- catch {
363
- // ignore
364
- }
252
+ unsubscribe();
365
253
  }
366
- return finishTurn({
367
- success: promptPosted && Boolean(promptTurnId),
368
- ...(promptPosted && promptTurnId ? {} : { error: "SDK events connection closed before prompt was accepted." }),
369
- });
370
254
  }
371
255
  /**
372
256
  * 向目标 agent 的 SDK actor session 发送一轮消息。
@@ -376,23 +260,23 @@ export async function executeAgentChatTurn(params) {
376
260
  const sessionId = AGENT_CHAT_DEFAULT_SESSION_ID;
377
261
  if (!message) {
378
262
  return {
379
- agentName: String(params.agentName || "").trim(),
263
+ agentId: String(params.agentId || "").trim(),
380
264
  sessionId,
381
265
  success: false,
382
266
  error: "Chat message is required.",
383
267
  };
384
268
  }
385
- const resolved = await resolveAgentChatTarget(params.agentName);
269
+ const resolved = await resolveAgentChatTarget(params.agentId);
386
270
  if (!resolved.success)
387
271
  return resolved.outcome;
388
272
  const outcome = await runSdkPromptTurn({
389
- agentName: params.agentName,
273
+ agentId: params.agentId,
390
274
  message,
391
275
  transport: params.transport,
392
276
  renderText: false,
393
277
  });
394
278
  return {
395
- agentName: params.agentName,
279
+ agentId: params.agentId,
396
280
  ...(resolved.target.projectRoot ? { projectRoot: resolved.target.projectRoot } : {}),
397
281
  sessionId,
398
282
  success: outcome.success,
@@ -412,12 +296,11 @@ export async function executeAgentChatTurn(params) {
412
296
  async function runOneShotChat(params) {
413
297
  if (params.options.json === true) {
414
298
  const outcome = await executeAgentChatTurn({
415
- agentName: params.agentName,
299
+ agentId: params.agentId,
416
300
  message: params.message,
417
301
  transport: {
418
302
  host: params.options.host,
419
303
  port: params.options.port,
420
- token: params.options.token,
421
304
  },
422
305
  });
423
306
  printResult({
@@ -425,7 +308,7 @@ async function runOneShotChat(params) {
425
308
  success: outcome.success,
426
309
  title: "agent chat",
427
310
  payload: {
428
- agent: params.agentName,
311
+ agent: params.agentId,
429
312
  ...(outcome.projectRoot ? { projectRoot: outcome.projectRoot } : {}),
430
313
  sessionId: outcome.sessionId,
431
314
  ...(outcome.payload?.result ? { result: outcome.payload.result } : {}),
@@ -435,17 +318,16 @@ async function runOneShotChat(params) {
435
318
  return;
436
319
  }
437
320
  const outcome = await runSdkPromptTurn({
438
- agentName: params.agentName,
321
+ agentId: params.agentId,
439
322
  message: params.message,
440
323
  transport: {
441
324
  host: params.options.host,
442
325
  port: params.options.port,
443
- token: params.options.token,
444
326
  },
445
327
  });
446
328
  if (!outcome.success) {
447
329
  printAgentChatFailure({
448
- agentName: params.agentName,
330
+ agentId: params.agentId,
449
331
  error: outcome.error,
450
332
  });
451
333
  return;
@@ -457,7 +339,7 @@ async function runOneShotChat(params) {
457
339
  * 启动交互式持续对话。
458
340
  */
459
341
  async function runInteractiveChat(params) {
460
- const prompt = `${chalk.cyan(params.agentName)} ${chalk.dim("›")} `;
342
+ const prompt = `${chalk.cyan(params.agentId)} ${chalk.dim("›")} `;
461
343
  const helpText = [
462
344
  `${chalk.dim("/exit, /quit — 退出对话")}`,
463
345
  `${chalk.dim("/clear — 清屏")}`,
@@ -466,7 +348,7 @@ async function runInteractiveChat(params) {
466
348
  ];
467
349
  emitCliBlock({
468
350
  tone: "info",
469
- title: `Agent chat · ${params.agentName}`,
351
+ title: `Agent chat · ${params.agentId}`,
470
352
  note: `Session: local-cli-chat-main · ${helpText[0].replace(chalk.dim(""), "").trim()}`,
471
353
  });
472
354
  console.log(helpText.join("\n"));
@@ -482,8 +364,6 @@ async function runInteractiveChat(params) {
482
364
  line = await rl.question(prompt);
483
365
  }
484
366
  catch (error) {
485
- // 关键点(中文):Node 24 下 Ctrl+C 会让 readline.question 以 AbortError 拒绝。
486
- // 这里按正常退出处理,避免把交互式 chat 变成未捕获异常。
487
367
  if (isReadlineAbortError(error)) {
488
368
  console.log();
489
369
  break;
@@ -504,17 +384,16 @@ async function runInteractiveChat(params) {
504
384
  continue;
505
385
  }
506
386
  const outcome = await runSdkPromptTurn({
507
- agentName: params.agentName,
387
+ agentId: params.agentId,
508
388
  message: text,
509
389
  transport: {
510
390
  host: params.options.host,
511
391
  port: params.options.port,
512
- token: params.options.token,
513
392
  },
514
393
  });
515
394
  if (!outcome.success) {
516
395
  printAgentChatFailure({
517
- agentName: params.agentName,
396
+ agentId: params.agentId,
518
397
  error: outcome.error,
519
398
  });
520
399
  continue;
@@ -532,13 +411,13 @@ async function runInteractiveChat(params) {
532
411
  * `city agent chat` 统一入口。
533
412
  */
534
413
  export async function chatCommand(options) {
535
- const agentName = await resolveChatTargetAgentName(options.to);
536
- if (!agentName)
414
+ const agentId = await resolveChatTargetAgentId(options.to);
415
+ if (!agentId)
537
416
  return;
538
417
  const oneShotMessage = normalizeChatMessage(String(options.message || ""));
539
418
  if (oneShotMessage) {
540
419
  await runOneShotChat({
541
- agentName,
420
+ agentId,
542
421
  message: oneShotMessage,
543
422
  options,
544
423
  });
@@ -561,7 +440,7 @@ export async function chatCommand(options) {
561
440
  return;
562
441
  }
563
442
  await runInteractiveChat({
564
- agentName,
443
+ agentId,
565
444
  options,
566
445
  });
567
446
  }