@downcity/city 1.1.32 → 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 (395) hide show
  1. package/README.md +4 -9
  2. package/bin/cli/Index.js +10 -3
  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.d.ts.map +1 -1
  24. package/bin/cli/agent/Init.js +17 -17
  25. package/bin/cli/agent/Init.js.map +1 -1
  26. package/bin/cli/agent/Restart.js +2 -2
  27. package/bin/cli/agent/Restart.js.map +1 -1
  28. package/bin/cli/agent/Run.d.ts +1 -1
  29. package/bin/cli/agent/Run.d.ts.map +1 -1
  30. package/bin/cli/agent/Run.js +44 -30
  31. package/bin/cli/agent/Run.js.map +1 -1
  32. package/bin/cli/agent/Start.js +2 -2
  33. package/bin/cli/agent/Start.js.map +1 -1
  34. package/bin/cli/agent/Stop.js +2 -2
  35. package/bin/cli/agent/Stop.js.map +1 -1
  36. package/bin/cli/control-plane/ControlPlaneProcess.d.ts.map +1 -1
  37. package/bin/cli/control-plane/ControlPlaneProcess.js +7 -8
  38. package/bin/cli/control-plane/ControlPlaneProcess.js.map +1 -1
  39. package/bin/cli/model/ModelCreateCommand.js +1 -1
  40. package/bin/cli/model/ModelCreateCommand.js.map +1 -1
  41. package/bin/cli/model/ModelManageCommand.d.ts.map +1 -1
  42. package/bin/cli/model/ModelManageCommand.js +5 -3
  43. package/bin/cli/model/ModelManageCommand.js.map +1 -1
  44. package/bin/cli/model/ModelManager.js +3 -3
  45. package/bin/cli/model/ModelManager.js.map +1 -1
  46. package/bin/cli/model/ModelSupport.d.ts +0 -1
  47. package/bin/cli/model/ModelSupport.d.ts.map +1 -1
  48. package/bin/cli/model/ModelSupport.js +2 -11
  49. package/bin/cli/model/ModelSupport.js.map +1 -1
  50. package/bin/cli/shared/ChatAuth.d.ts.map +1 -1
  51. package/bin/cli/shared/ChatAuth.js +5 -7
  52. package/bin/cli/shared/ChatAuth.js.map +1 -1
  53. package/bin/cli/shared/ChatManager.d.ts.map +1 -1
  54. package/bin/cli/shared/ChatManager.js +2 -3
  55. package/bin/cli/shared/ChatManager.js.map +1 -1
  56. package/bin/cli/shared/CliReporterTypes.d.ts +1 -1
  57. package/bin/cli/shared/Config.js +2 -2
  58. package/bin/cli/shared/Config.js.map +1 -1
  59. package/bin/cli/shared/Env.d.ts +1 -1
  60. package/bin/cli/shared/Env.d.ts.map +1 -1
  61. package/bin/cli/shared/Env.js +18 -149
  62. package/bin/cli/shared/Env.js.map +1 -1
  63. package/bin/cli/shared/IndexAgentCommand.d.ts.map +1 -1
  64. package/bin/cli/shared/IndexAgentCommand.js +3 -3
  65. package/bin/cli/shared/IndexAgentCommand.js.map +1 -1
  66. package/bin/cli/shared/IndexSupport.d.ts +3 -3
  67. package/bin/cli/shared/IndexSupport.d.ts.map +1 -1
  68. package/bin/cli/shared/IndexSupport.js +14 -8
  69. package/bin/cli/shared/IndexSupport.js.map +1 -1
  70. package/bin/cli/shared/ManagedPluginActionCommands.d.ts +2 -1
  71. package/bin/cli/shared/ManagedPluginActionCommands.d.ts.map +1 -1
  72. package/bin/cli/shared/ManagedPluginActionCommands.js +9 -7
  73. package/bin/cli/shared/ManagedPluginActionCommands.js.map +1 -1
  74. package/bin/cli/shared/ManagedPluginRemote.d.ts.map +1 -1
  75. package/bin/cli/shared/ManagedPluginRemote.js +4 -4
  76. package/bin/cli/shared/ManagedPluginRemote.js.map +1 -1
  77. package/bin/cli/shared/PluginScheduleCommand.d.ts +3 -2
  78. package/bin/cli/shared/PluginScheduleCommand.d.ts.map +1 -1
  79. package/bin/cli/shared/PluginScheduleCommand.js +11 -10
  80. package/bin/cli/shared/PluginScheduleCommand.js.map +1 -1
  81. package/bin/cli/shared/PluginTargetSupport.d.ts +6 -6
  82. package/bin/cli/shared/PluginTargetSupport.d.ts.map +1 -1
  83. package/bin/cli/shared/PluginTargetSupport.js +23 -24
  84. package/bin/cli/shared/PluginTargetSupport.js.map +1 -1
  85. package/bin/cli/shared/Plugins.d.ts.map +1 -1
  86. package/bin/cli/shared/Plugins.js +22 -16
  87. package/bin/cli/shared/Plugins.js.map +1 -1
  88. package/bin/cli/shared/PublicHostEnv.d.ts +1 -1
  89. package/bin/cli/shared/PublicHostEnv.js +2 -2
  90. package/bin/cli/shared/PublicHostEnv.js.map +1 -1
  91. package/bin/cli/shared/Terminal.d.ts +13 -0
  92. package/bin/cli/shared/Terminal.d.ts.map +1 -0
  93. package/bin/cli/shared/Terminal.js +22 -0
  94. package/bin/cli/shared/Terminal.js.map +1 -0
  95. package/bin/config/DowncitySchema.d.ts.map +1 -1
  96. package/bin/config/DowncitySchema.js +3 -111
  97. package/bin/config/DowncitySchema.js.map +1 -1
  98. package/bin/config/Paths.d.ts +0 -56
  99. package/bin/config/Paths.d.ts.map +1 -1
  100. package/bin/config/Paths.js +9 -51
  101. package/bin/config/Paths.js.map +1 -1
  102. package/bin/control/ChannelAccountApiRoutes.d.ts.map +1 -1
  103. package/bin/control/ChannelAccountApiRoutes.js +2 -3
  104. package/bin/control/ChannelAccountApiRoutes.js.map +1 -1
  105. package/bin/control/ControlGateway.d.ts.map +1 -1
  106. package/bin/control/ControlGateway.js +4 -3
  107. package/bin/control/ControlGateway.js.map +1 -1
  108. package/bin/control/EnvApiRoutes.d.ts +1 -1
  109. package/bin/control/EnvApiRoutes.d.ts.map +1 -1
  110. package/bin/control/EnvApiRoutes.js +7 -79
  111. package/bin/control/EnvApiRoutes.js.map +1 -1
  112. package/bin/control/PlatformApiRoutes.d.ts +2 -2
  113. package/bin/control/PlatformApiRoutes.d.ts.map +1 -1
  114. package/bin/control/PlatformApiRoutes.js +2 -2
  115. package/bin/control/PlatformApiRoutes.js.map +1 -1
  116. package/bin/control/PluginApiRoutes.d.ts.map +1 -1
  117. package/bin/control/PluginApiRoutes.js +33 -25
  118. package/bin/control/PluginApiRoutes.js.map +1 -1
  119. package/bin/control/gateway/AgentActions.d.ts +2 -2
  120. package/bin/control/gateway/AgentActions.d.ts.map +1 -1
  121. package/bin/control/gateway/AgentActions.js +23 -18
  122. package/bin/control/gateway/AgentActions.js.map +1 -1
  123. package/bin/control/gateway/AgentCatalog.d.ts +3 -6
  124. package/bin/control/gateway/AgentCatalog.d.ts.map +1 -1
  125. package/bin/control/gateway/AgentCatalog.js +16 -18
  126. package/bin/control/gateway/AgentCatalog.js.map +1 -1
  127. package/bin/control/instant/InstantSessionRunner.d.ts.map +1 -1
  128. package/bin/control/instant/InstantSessionRunner.js +3 -1
  129. package/bin/control/instant/InstantSessionRunner.js.map +1 -1
  130. package/bin/env/ProcessEnv.d.ts +24 -0
  131. package/bin/env/ProcessEnv.d.ts.map +1 -0
  132. package/bin/env/ProcessEnv.js +41 -0
  133. package/bin/env/ProcessEnv.js.map +1 -0
  134. package/bin/http/auth/AuthEnv.d.ts +1 -1
  135. package/bin/http/auth/AuthEnv.js +1 -1
  136. package/bin/model/runtime/CreateRuntimeModel.d.ts +6 -6
  137. package/bin/model/runtime/CreateRuntimeModel.d.ts.map +1 -1
  138. package/bin/model/runtime/CreateRuntimeModel.js +44 -53
  139. package/bin/model/runtime/CreateRuntimeModel.js.map +1 -1
  140. package/bin/model/runtime/ExecutionModelBinding.d.ts +46 -0
  141. package/bin/model/runtime/ExecutionModelBinding.d.ts.map +1 -0
  142. package/bin/model/runtime/ExecutionModelBinding.js +96 -0
  143. package/bin/model/runtime/ExecutionModelBinding.js.map +1 -0
  144. package/bin/model/service/ModelPoolService.d.ts +1 -1
  145. package/bin/model/service/ModelPoolService.d.ts.map +1 -1
  146. package/bin/model/service/ModelPoolService.js +8 -6
  147. package/bin/model/service/ModelPoolService.js.map +1 -1
  148. package/bin/platform/store/StoreEnvRepository.d.ts +5 -49
  149. package/bin/platform/store/StoreEnvRepository.d.ts.map +1 -1
  150. package/bin/platform/store/StoreEnvRepository.js +31 -178
  151. package/bin/platform/store/StoreEnvRepository.js.map +1 -1
  152. package/bin/platform/store/StoreSchema.js +3 -44
  153. package/bin/platform/store/StoreSchema.js.map +1 -1
  154. package/bin/platform/store/index.d.ts +9 -45
  155. package/bin/platform/store/index.d.ts.map +1 -1
  156. package/bin/platform/store/index.js +12 -62
  157. package/bin/platform/store/index.js.map +1 -1
  158. package/bin/platform/store/schema.d.ts +2 -2
  159. package/bin/platform/store/schema.js +2 -2
  160. package/bin/process/daemon/Api.d.ts +1 -1
  161. package/bin/process/daemon/CliArgs.d.ts +1 -0
  162. package/bin/process/daemon/CliArgs.d.ts.map +1 -1
  163. package/bin/process/daemon/CliArgs.js +20 -1
  164. package/bin/process/daemon/CliArgs.js.map +1 -1
  165. package/bin/process/daemon/Client.d.ts +18 -2
  166. package/bin/process/daemon/Client.d.ts.map +1 -1
  167. package/bin/process/daemon/Client.js +70 -20
  168. package/bin/process/daemon/Client.js.map +1 -1
  169. package/bin/process/daemon/Manager.d.ts.map +1 -1
  170. package/bin/process/daemon/Manager.js +2 -1
  171. package/bin/process/daemon/Manager.js.map +1 -1
  172. package/bin/process/registry/AgentHostRuntime.d.ts +1 -9
  173. package/bin/process/registry/AgentHostRuntime.d.ts.map +1 -1
  174. package/bin/process/registry/AgentHostRuntime.js +1 -155
  175. package/bin/process/registry/AgentHostRuntime.js.map +1 -1
  176. package/bin/terminal/admin/auth-error.d.ts +34 -0
  177. package/bin/terminal/admin/auth-error.d.ts.map +1 -0
  178. package/bin/terminal/admin/auth-error.js +51 -0
  179. package/bin/terminal/admin/auth-error.js.map +1 -0
  180. package/bin/terminal/admin/commands/accounts.d.ts +6 -0
  181. package/bin/terminal/admin/commands/accounts.d.ts.map +1 -0
  182. package/bin/terminal/admin/commands/accounts.js +44 -0
  183. package/bin/terminal/admin/commands/accounts.js.map +1 -0
  184. package/bin/terminal/admin/commands/balance.d.ts +6 -0
  185. package/bin/terminal/admin/commands/balance.d.ts.map +1 -0
  186. package/bin/terminal/admin/commands/balance.js +153 -0
  187. package/bin/terminal/admin/commands/balance.js.map +1 -0
  188. package/bin/terminal/admin/commands/config.d.ts +10 -0
  189. package/bin/terminal/admin/commands/config.d.ts.map +1 -0
  190. package/bin/terminal/admin/commands/config.js +11 -0
  191. package/bin/terminal/admin/commands/config.js.map +1 -0
  192. package/bin/terminal/admin/commands/custom.d.ts +6 -0
  193. package/bin/terminal/admin/commands/custom.d.ts.map +1 -0
  194. package/bin/terminal/admin/commands/custom.js +47 -0
  195. package/bin/terminal/admin/commands/custom.js.map +1 -0
  196. package/bin/terminal/admin/commands/instruction.d.ts +9 -0
  197. package/bin/terminal/admin/commands/instruction.d.ts.map +1 -0
  198. package/bin/terminal/admin/commands/instruction.js +10 -0
  199. package/bin/terminal/admin/commands/instruction.js.map +1 -0
  200. package/bin/terminal/admin/commands/models.d.ts +14 -0
  201. package/bin/terminal/admin/commands/models.d.ts.map +1 -0
  202. package/bin/terminal/admin/commands/models.js +61 -0
  203. package/bin/terminal/admin/commands/models.js.map +1 -0
  204. package/bin/terminal/admin/commands/payment.d.ts +6 -0
  205. package/bin/terminal/admin/commands/payment.d.ts.map +1 -0
  206. package/bin/terminal/admin/commands/payment.js +59 -0
  207. package/bin/terminal/admin/commands/payment.js.map +1 -0
  208. package/bin/terminal/admin/commands/products.d.ts +6 -0
  209. package/bin/terminal/admin/commands/products.d.ts.map +1 -0
  210. package/bin/terminal/admin/commands/products.js +80 -0
  211. package/bin/terminal/admin/commands/products.js.map +1 -0
  212. package/bin/terminal/admin/commands/service-env.d.ts +11 -0
  213. package/bin/terminal/admin/commands/service-env.d.ts.map +1 -0
  214. package/bin/terminal/admin/commands/service-env.js +248 -0
  215. package/bin/terminal/admin/commands/service-env.js.map +1 -0
  216. package/bin/terminal/admin/commands/usage.d.ts +6 -0
  217. package/bin/terminal/admin/commands/usage.d.ts.map +1 -0
  218. package/bin/terminal/admin/commands/usage.js +44 -0
  219. package/bin/terminal/admin/commands/usage.js.map +1 -0
  220. package/bin/terminal/admin/loop.d.ts +6 -0
  221. package/bin/terminal/admin/loop.d.ts.map +1 -0
  222. package/bin/terminal/admin/loop.js +70 -0
  223. package/bin/terminal/admin/loop.js.map +1 -0
  224. package/bin/terminal/agent/pi-agent.d.ts +15 -0
  225. package/bin/terminal/agent/pi-agent.d.ts.map +1 -0
  226. package/bin/terminal/agent/pi-agent.js +136 -0
  227. package/bin/terminal/agent/pi-agent.js.map +1 -0
  228. package/bin/terminal/app.d.ts +13 -0
  229. package/bin/terminal/app.d.ts.map +1 -0
  230. package/bin/terminal/app.js +123 -0
  231. package/bin/terminal/app.js.map +1 -0
  232. package/bin/terminal/auth/admin.d.ts +8 -0
  233. package/bin/terminal/auth/admin.d.ts.map +1 -0
  234. package/bin/terminal/auth/admin.js +18 -0
  235. package/bin/terminal/auth/admin.js.map +1 -0
  236. package/bin/terminal/auth/mode-select.d.ts +11 -0
  237. package/bin/terminal/auth/mode-select.d.ts.map +1 -0
  238. package/bin/terminal/auth/mode-select.js +33 -0
  239. package/bin/terminal/auth/mode-select.js.map +1 -0
  240. package/bin/terminal/auth/server-switch.d.ts +22 -0
  241. package/bin/terminal/auth/server-switch.d.ts.map +1 -0
  242. package/bin/terminal/auth/server-switch.js +241 -0
  243. package/bin/terminal/auth/server-switch.js.map +1 -0
  244. package/bin/terminal/auth/user.d.ts +19 -0
  245. package/bin/terminal/auth/user.d.ts.map +1 -0
  246. package/bin/terminal/auth/user.js +261 -0
  247. package/bin/terminal/auth/user.js.map +1 -0
  248. package/bin/terminal/core/browser.d.ts +12 -0
  249. package/bin/terminal/core/browser.d.ts.map +1 -0
  250. package/bin/terminal/core/browser.js +29 -0
  251. package/bin/terminal/core/browser.js.map +1 -0
  252. package/bin/terminal/core/env.d.ts +15 -0
  253. package/bin/terminal/core/env.d.ts.map +1 -0
  254. package/bin/terminal/core/env.js +67 -0
  255. package/bin/terminal/core/env.js.map +1 -0
  256. package/bin/terminal/core/session.d.ts +97 -0
  257. package/bin/terminal/core/session.d.ts.map +1 -0
  258. package/bin/terminal/core/session.js +342 -0
  259. package/bin/terminal/core/session.js.map +1 -0
  260. package/bin/terminal/core/stripe.d.ts +26 -0
  261. package/bin/terminal/core/stripe.d.ts.map +1 -0
  262. package/bin/terminal/core/stripe.js +22 -0
  263. package/bin/terminal/core/stripe.js.map +1 -0
  264. package/bin/terminal/core/ui.d.ts +29 -0
  265. package/bin/terminal/core/ui.d.ts.map +1 -0
  266. package/bin/terminal/core/ui.js +60 -0
  267. package/bin/terminal/core/ui.js.map +1 -0
  268. package/bin/terminal/core/update.d.ts +20 -0
  269. package/bin/terminal/core/update.d.ts.map +1 -0
  270. package/bin/terminal/core/update.js +193 -0
  271. package/bin/terminal/core/update.js.map +1 -0
  272. package/bin/terminal/user/balance.d.ts +31 -0
  273. package/bin/terminal/user/balance.d.ts.map +1 -0
  274. package/bin/terminal/user/balance.js +131 -0
  275. package/bin/terminal/user/balance.js.map +1 -0
  276. package/bin/terminal/user/chat.d.ts +12 -0
  277. package/bin/terminal/user/chat.d.ts.map +1 -0
  278. package/bin/terminal/user/chat.js +70 -0
  279. package/bin/terminal/user/chat.js.map +1 -0
  280. package/bin/terminal/user/loop.d.ts +13 -0
  281. package/bin/terminal/user/loop.d.ts.map +1 -0
  282. package/bin/terminal/user/loop.js +93 -0
  283. package/bin/terminal/user/loop.js.map +1 -0
  284. package/bin/terminal/user/models.d.ts +10 -0
  285. package/bin/terminal/user/models.d.ts.map +1 -0
  286. package/bin/terminal/user/models.js +39 -0
  287. package/bin/terminal/user/models.js.map +1 -0
  288. package/bin/utils/storage.d.ts +0 -1
  289. package/bin/utils/storage.d.ts.map +1 -1
  290. package/bin/utils/storage.js +0 -6
  291. package/bin/utils/storage.js.map +1 -1
  292. package/package.json +7 -2
  293. package/public/app.js +3 -3
  294. package/src/cli/Index.ts +13 -3
  295. package/src/cli/agent/AgentChat.ts +113 -289
  296. package/src/cli/agent/AgentChatTypes.ts +8 -12
  297. package/src/cli/agent/AgentHistory.ts +2 -2
  298. package/src/cli/agent/AgentManager.ts +27 -28
  299. package/src/cli/agent/AgentManagerTypes.ts +2 -2
  300. package/src/cli/agent/AgentReset.ts +4 -4
  301. package/src/cli/agent/AgentSelection.ts +6 -6
  302. package/src/cli/agent/AgentSelectionTypes.ts +1 -1
  303. package/src/cli/agent/Init.ts +22 -21
  304. package/src/cli/agent/Restart.ts +2 -2
  305. package/src/cli/agent/Run.ts +46 -30
  306. package/src/cli/agent/Start.ts +2 -2
  307. package/src/cli/agent/Stop.ts +2 -2
  308. package/src/cli/control-plane/ControlPlaneProcess.ts +7 -8
  309. package/src/cli/model/ModelCreateCommand.ts +1 -1
  310. package/src/cli/model/ModelManageCommand.ts +5 -3
  311. package/src/cli/model/ModelManager.ts +3 -3
  312. package/src/cli/model/ModelSupport.ts +2 -10
  313. package/src/cli/shared/ChatAuth.ts +10 -11
  314. package/src/cli/shared/ChatManager.ts +2 -3
  315. package/src/cli/shared/CliReporterTypes.ts +1 -1
  316. package/src/cli/shared/Config.ts +2 -2
  317. package/src/cli/shared/Env.ts +22 -230
  318. package/src/cli/shared/IndexAgentCommand.ts +3 -4
  319. package/src/cli/shared/IndexSupport.ts +16 -10
  320. package/src/cli/shared/ManagedPluginActionCommands.ts +15 -12
  321. package/src/cli/shared/ManagedPluginRemote.ts +4 -4
  322. package/src/cli/shared/PluginScheduleCommand.ts +11 -10
  323. package/src/cli/shared/PluginTargetSupport.ts +25 -26
  324. package/src/cli/shared/Plugins.ts +26 -20
  325. package/src/cli/shared/PublicHostEnv.ts +2 -2
  326. package/src/cli/shared/Terminal.ts +24 -0
  327. package/src/config/DowncitySchema.ts +3 -113
  328. package/src/config/Paths.ts +9 -90
  329. package/src/control/ChannelAccountApiRoutes.ts +2 -3
  330. package/src/control/ControlGateway.ts +6 -5
  331. package/src/control/EnvApiRoutes.ts +7 -91
  332. package/src/control/PlatformApiRoutes.ts +6 -6
  333. package/src/control/PluginApiRoutes.ts +37 -27
  334. package/src/control/gateway/AgentActions.ts +26 -21
  335. package/src/control/gateway/AgentCatalog.ts +17 -21
  336. package/src/control/instant/InstantSessionRunner.ts +3 -1
  337. package/src/env/ProcessEnv.ts +43 -0
  338. package/src/http/auth/AuthEnv.ts +1 -1
  339. package/src/model/runtime/CreateRuntimeModel.ts +51 -59
  340. package/src/model/runtime/ExecutionModelBinding.ts +120 -0
  341. package/src/model/service/ModelPoolService.ts +13 -11
  342. package/src/platform/store/StoreEnvRepository.ts +31 -234
  343. package/src/platform/store/StoreSchema.ts +3 -49
  344. package/src/platform/store/index.ts +11 -80
  345. package/src/platform/store/schema.ts +2 -2
  346. package/src/process/daemon/Api.ts +1 -1
  347. package/src/process/daemon/CliArgs.ts +24 -1
  348. package/src/process/daemon/Client.ts +90 -22
  349. package/src/process/daemon/Manager.ts +2 -1
  350. package/src/process/registry/AgentHostRuntime.ts +1 -163
  351. package/src/terminal/admin/auth-error.ts +62 -0
  352. package/src/terminal/admin/commands/accounts.ts +44 -0
  353. package/src/terminal/admin/commands/balance.ts +160 -0
  354. package/src/terminal/admin/commands/config.ts +13 -0
  355. package/src/terminal/admin/commands/custom.ts +46 -0
  356. package/src/terminal/admin/commands/instruction.ts +12 -0
  357. package/src/terminal/admin/commands/models.ts +64 -0
  358. package/src/terminal/admin/commands/payment.ts +94 -0
  359. package/src/terminal/admin/commands/products.ts +72 -0
  360. package/src/terminal/admin/commands/service-env.ts +256 -0
  361. package/src/terminal/admin/commands/usage.ts +44 -0
  362. package/src/terminal/admin/loop.ts +69 -0
  363. package/src/terminal/agent/pi-agent.ts +180 -0
  364. package/src/terminal/app.ts +120 -0
  365. package/src/terminal/auth/admin.ts +21 -0
  366. package/src/terminal/auth/mode-select.ts +38 -0
  367. package/src/terminal/auth/server-switch.ts +275 -0
  368. package/src/terminal/auth/user.ts +351 -0
  369. package/src/terminal/core/browser.ts +31 -0
  370. package/src/terminal/core/env.ts +71 -0
  371. package/src/terminal/core/session.ts +450 -0
  372. package/src/terminal/core/stripe.ts +37 -0
  373. package/src/terminal/core/ui.ts +84 -0
  374. package/src/terminal/core/update.ts +230 -0
  375. package/src/terminal/user/balance.ts +215 -0
  376. package/src/terminal/user/chat.ts +80 -0
  377. package/src/terminal/user/loop.ts +112 -0
  378. package/src/terminal/user/models.ts +43 -0
  379. package/src/utils/storage.ts +0 -7
  380. package/tsconfig.json +2 -1
  381. package/bin/platform/chatAuthorization/Store.d.ts +0 -31
  382. package/bin/platform/chatAuthorization/Store.d.ts.map +0 -1
  383. package/bin/platform/chatAuthorization/Store.js +0 -145
  384. package/bin/platform/chatAuthorization/Store.js.map +0 -1
  385. package/bin/process/rpc/Client.d.ts +0 -13
  386. package/bin/process/rpc/Client.d.ts.map +0 -1
  387. package/bin/process/rpc/Client.js +0 -98
  388. package/bin/process/rpc/Client.js.map +0 -1
  389. package/bin/process/rpc/Paths.d.ts +0 -14
  390. package/bin/process/rpc/Paths.d.ts.map +0 -1
  391. package/bin/process/rpc/Paths.js +0 -36
  392. package/bin/process/rpc/Paths.js.map +0 -1
  393. package/src/platform/chatAuthorization/Store.ts +0 -181
  394. package/src/process/rpc/Client.ts +0 -113
  395. package/src/process/rpc/Paths.ts +0 -43
@@ -5,24 +5,25 @@
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
 
10
11
  import { createInterface } from "node:readline/promises";
11
12
  import chalk from "chalk";
12
13
  import prompts from "prompts";
13
- import type { AgentSessionEvent } from "@downcity/agent";
14
+ import {
15
+ RemoteAgent,
16
+ type AgentSessionEvent,
17
+ type RemoteAgentSession,
18
+ } from "@downcity/agent";
14
19
  import { emitCliBlock } from "../shared/CliReporter.js";
15
20
  import { printResult } from "@/utils/cli/CliOutput.js";
16
21
  import {
17
- resolveProjectRootByAgentName,
22
+ resolveProjectRootByAgentId,
18
23
  validateAgentProjectRoot,
19
24
  } from "../shared/PluginTargetSupport.js";
20
25
  import { listRegisteredAgentsForCli } from "./AgentSelection.js";
21
- import {
22
- formatCliBearerHeaderValue,
23
- resolveCliAuthToken,
24
- } from "@/http/auth/CliAuthStateStore.js";
25
- import { resolveDaemonEndpoint } from "@/process/daemon/Client.js";
26
+ import { resolveDaemonRpcEndpoint } from "@/process/daemon/Client.js";
26
27
  import type {
27
28
  AgentChatCliOptions,
28
29
  AgentChatExecutionOutcome,
@@ -31,13 +32,11 @@ import type {
31
32
  } from "./AgentChatTypes.js";
32
33
  import { AGENT_CHAT_DEFAULT_SESSION_ID } from "./AgentChatTypes.js";
33
34
 
34
- const SDK_EVENTS_READY_TYPE = "sdk-events-ready";
35
-
36
35
  type ResolvedAgentChatTarget = {
37
36
  /**
38
- * 目标 agent 名称。
37
+ * 目标 agent id。
39
38
  */
40
- agentName: string;
39
+ agentId: string;
41
40
  /**
42
41
  * 目标项目根目录。
43
42
  */
@@ -69,15 +68,15 @@ function buildAgentChatFailureText(error?: string): string {
69
68
  );
70
69
  }
71
70
 
72
- async function resolveChatTargetAgentName(inputName?: string): Promise<string | null> {
73
- const explicit = String(inputName || "").trim();
71
+ async function resolveChatTargetAgentId(inputId?: string): Promise<string | null> {
72
+ const explicit = String(inputId || "").trim();
74
73
  if (explicit) return explicit;
75
74
 
76
75
  if (!process.stdin.isTTY || !process.stdout.isTTY) {
77
76
  emitCliBlock({
78
77
  tone: "error",
79
- title: "Agent name is required",
80
- note: "Use `city agent chat --to <agentName>` or run this command in an interactive terminal.",
78
+ title: "Agent id is required",
79
+ note: "Use `city agent chat --to <id>` or run this command in an interactive terminal.",
81
80
  });
82
81
  return null;
83
82
  }
@@ -96,28 +95,28 @@ async function resolveChatTargetAgentName(inputName?: string): Promise<string |
96
95
 
97
96
  const response = (await prompts({
98
97
  type: "select",
99
- name: "agentName",
98
+ name: "agentId",
100
99
  message: "选择要聊天的 Agent",
101
100
  choices: runningAgents.map((agent) => ({
102
- title: agent.name,
101
+ title: agent.id,
103
102
  description: agent.projectRoot,
104
- value: agent.name,
103
+ value: agent.id,
105
104
  })),
106
105
  initial: 0,
107
- })) as { agentName?: string };
108
- const agentName = String(response.agentName || "").trim();
109
- if (!agentName) {
106
+ })) as { agentId?: string };
107
+ const agentId = String(response.agentId || "").trim();
108
+ if (!agentId) {
110
109
  emitCliBlock({
111
110
  tone: "info",
112
111
  title: "Agent chat cancelled",
113
112
  });
114
113
  return null;
115
114
  }
116
- return agentName;
115
+ return agentId;
117
116
  }
118
117
 
119
118
  async function resolveAgentChatTarget(
120
- agentNameInput: string,
119
+ agentIdInput: string,
121
120
  ): Promise<
122
121
  | {
123
122
  success: true;
@@ -128,26 +127,26 @@ async function resolveAgentChatTarget(
128
127
  outcome: AgentChatExecutionOutcome;
129
128
  }
130
129
  > {
131
- const agentName = String(agentNameInput || "").trim();
130
+ const agentId = String(agentIdInput || "").trim();
132
131
  const sessionId = AGENT_CHAT_DEFAULT_SESSION_ID;
133
- if (!agentName) {
132
+ if (!agentId) {
134
133
  return {
135
134
  success: false,
136
135
  outcome: {
137
- agentName: "",
136
+ agentId: "",
138
137
  sessionId,
139
138
  success: false,
140
- error: "Missing target agent name.",
139
+ error: "Missing target agent id.",
141
140
  },
142
141
  };
143
142
  }
144
143
 
145
- const resolved = await resolveProjectRootByAgentName(agentName);
144
+ const resolved = await resolveProjectRootByAgentId(agentId);
146
145
  if (!resolved.projectRoot) {
147
146
  return {
148
147
  success: false,
149
148
  outcome: {
150
- agentName,
149
+ agentId,
151
150
  sessionId,
152
151
  success: false,
153
152
  error: resolved.error || "Failed to resolve agent project path",
@@ -160,7 +159,7 @@ async function resolveAgentChatTarget(
160
159
  return {
161
160
  success: false,
162
161
  outcome: {
163
- agentName,
162
+ agentId,
164
163
  projectRoot: resolved.projectRoot,
165
164
  sessionId,
166
165
  success: false,
@@ -172,7 +171,7 @@ async function resolveAgentChatTarget(
172
171
  return {
173
172
  success: true,
174
173
  target: {
175
- agentName,
174
+ agentId,
176
175
  projectRoot: resolved.projectRoot,
177
176
  sessionId,
178
177
  },
@@ -193,7 +192,7 @@ function printAssistantReply(replyText: string): void {
193
192
  }
194
193
 
195
194
  function printAgentChatFailure(params: {
196
- agentName: string;
195
+ agentId: string;
197
196
  error?: string;
198
197
  }): void {
199
198
  emitCliBlock({
@@ -202,7 +201,7 @@ function printAgentChatFailure(params: {
202
201
  facts: [
203
202
  {
204
203
  label: "agent",
205
- value: params.agentName,
204
+ value: params.agentId,
206
205
  },
207
206
  {
208
207
  label: "error",
@@ -212,93 +211,35 @@ function printAgentChatFailure(params: {
212
211
  });
213
212
  }
214
213
 
215
- async function readHttpFailure(response: Response): Promise<string> {
216
- const contentType = String(response.headers.get("content-type") || "").toLowerCase();
217
- const text = await response.text().catch(() => "");
218
- if (contentType.includes("application/json")) {
219
- try {
220
- const payload = JSON.parse(text) as {
221
- error?: string;
222
- message?: string;
223
- };
224
- return (
225
- String(payload.error || payload.message || "").trim() ||
226
- `HTTP ${response.status}`
227
- );
228
- } catch {
229
- // ignore malformed json payloads
230
- }
231
- }
232
- return String(text || "").trim() || `HTTP ${response.status}`;
233
- }
234
-
235
- function isSdkEventsReadyFrame(value: unknown): boolean {
236
- return (
237
- typeof value === "object" &&
238
- value !== null &&
239
- "type" in value &&
240
- String((value as { type?: unknown }).type || "") === SDK_EVENTS_READY_TYPE
241
- );
242
- }
243
-
244
- async function postSdkPrompt(params: {
245
- endpointBaseUrl: string;
246
- sessionId: string;
247
- message: string;
248
- authHeaderValue?: string;
249
- }): Promise<
250
- | {
251
- success: true;
252
- turnId: string;
253
- }
254
- | {
255
- success: false;
256
- error: string;
257
- }
258
- > {
259
- const response = await fetch(
260
- new URL(
261
- `/api/sdk/sessions/${encodeURIComponent(params.sessionId)}/prompt`,
262
- params.endpointBaseUrl,
263
- ).toString(),
264
- {
265
- method: "POST",
266
- headers: {
267
- "Content-Type": "application/json",
268
- ...(params.authHeaderValue ? { Authorization: params.authHeaderValue } : {}),
269
- },
270
- body: JSON.stringify({
271
- query: params.message,
272
- }),
273
- },
274
- ).catch((error) => {
275
- throw new Error(`Failed to call ${params.endpointBaseUrl}: ${String(error)}`);
214
+ function createRemoteAgent(params: {
215
+ projectRoot: string;
216
+ transport?: AgentChatTransportOptions;
217
+ }): RemoteAgent {
218
+ const endpoint = resolveDaemonRpcEndpoint({
219
+ projectRoot: params.projectRoot,
220
+ host: params.transport?.host,
221
+ port: params.transport?.port,
222
+ });
223
+ return new RemoteAgent({
224
+ url: `rpc://${endpoint.host}:${endpoint.port}`,
276
225
  });
226
+ }
277
227
 
278
- const payload = (await response.json().catch(() => ({}))) as {
279
- success?: boolean;
280
- error?: string;
281
- turn?: {
282
- id?: string;
283
- };
284
- };
285
- const turnId = String(payload.turn?.id || "").trim();
286
- if (!response.ok || payload.success !== true || !turnId) {
287
- return {
288
- success: false,
289
- error:
290
- String(payload.error || "").trim() ||
291
- `SDK prompt failed with HTTP ${response.status}`,
292
- };
228
+ async function getOrCreateRemoteSession(params: {
229
+ remote_agent: RemoteAgent;
230
+ session_id: string;
231
+ }): Promise<RemoteAgentSession> {
232
+ try {
233
+ return await params.remote_agent.getSession(params.session_id);
234
+ } catch {
235
+ return await params.remote_agent.createSession({
236
+ sessionId: params.session_id,
237
+ });
293
238
  }
294
- return {
295
- success: true,
296
- turnId,
297
- };
298
239
  }
299
240
 
300
241
  async function runSdkPromptTurn(params: {
301
- agentName: string;
242
+ agentId: string;
302
243
  message: string;
303
244
  transport?: AgentChatTransportOptions;
304
245
  renderText?: boolean;
@@ -318,7 +259,7 @@ async function runSdkPromptTurn(params: {
318
259
  };
319
260
  }
320
261
 
321
- const resolved = await resolveAgentChatTarget(params.agentName);
262
+ const resolved = await resolveAgentChatTarget(params.agentId);
322
263
  if (!resolved.success) {
323
264
  return {
324
265
  success: false,
@@ -328,188 +269,76 @@ async function runSdkPromptTurn(params: {
328
269
  };
329
270
  }
330
271
 
331
- const { target } = resolved;
332
- const abortController = new AbortController();
333
- const endpoint = resolveDaemonEndpoint({
334
- projectRoot: target.projectRoot,
335
- host: params.transport?.host,
336
- port: params.transport?.port,
272
+ const remote_agent = createRemoteAgent({
273
+ projectRoot: resolved.target.projectRoot,
274
+ transport: params.transport,
337
275
  });
338
- const authHeaderValue = formatCliBearerHeaderValue(
339
- resolveCliAuthToken({
340
- explicitToken: params.transport?.token,
341
- }),
342
- );
343
- const response = await fetch(
344
- new URL(
345
- `/api/sdk/sessions/${encodeURIComponent(target.sessionId)}/events`,
346
- endpoint.baseUrl,
347
- ).toString(),
348
- {
349
- headers: {
350
- ...(authHeaderValue ? { Authorization: authHeaderValue } : {}),
351
- },
352
- signal: abortController.signal,
353
- },
354
- ).catch((error) => {
355
- throw new Error(`Failed to call ${endpoint.baseUrl}: ${String(error)}`);
276
+ const session = await getOrCreateRemoteSession({
277
+ remote_agent,
278
+ session_id: resolved.target.sessionId,
356
279
  });
357
280
 
358
- if (!response.ok || !response.body) {
359
- return {
360
- success: false,
361
- error: await readHttpFailure(response),
362
- emittedVisibleText: false,
363
- text: "",
364
- };
365
- }
366
-
367
- const decoder = new TextDecoder();
368
- const reader = response.body.getReader();
369
- let buffered = "";
370
- let printedLeadingNewline = false;
371
- let emittedVisibleText = false;
372
- let promptTurnId = "";
373
- let promptPosted = false;
374
- let finalText = "";
281
+ let printed_leading_newline = false;
282
+ let emitted_visible_text = false;
283
+ let final_text = "";
284
+ let target_turn_id = "";
375
285
 
376
286
  const renderEvent = (event: AgentSessionEvent): void => {
377
- if (event.type !== "text-delta" || event.turnId !== promptTurnId || !event.text) return;
287
+ if (event.type !== "text-delta" || event.turnId !== target_turn_id || !event.text) {
288
+ return;
289
+ }
378
290
  if (params.renderText === false) return;
379
- if (!printedLeadingNewline) {
291
+ if (!printed_leading_newline) {
380
292
  process.stdout.write("\n");
381
- printedLeadingNewline = true;
293
+ printed_leading_newline = true;
382
294
  }
383
295
  process.stdout.write(event.text);
384
- emittedVisibleText = true;
296
+ emitted_visible_text = true;
385
297
  };
386
298
 
387
- const handleLine = async (line: string): Promise<
388
- | {
389
- done: true;
390
- error?: string;
391
- }
392
- | {
393
- done: false;
394
- }
395
- > => {
396
- const value = JSON.parse(line) as unknown;
397
- if (isSdkEventsReadyFrame(value)) {
398
- if (!promptPosted) {
399
- promptPosted = true;
400
- const promptResult = await postSdkPrompt({
401
- endpointBaseUrl: endpoint.baseUrl,
402
- sessionId: target.sessionId,
403
- message,
404
- authHeaderValue,
405
- });
406
- if (!promptResult.success) {
407
- return {
408
- done: true,
409
- error: promptResult.error,
410
- };
411
- }
412
- promptTurnId = promptResult.turnId;
413
- }
414
- return { done: false };
415
- }
416
-
417
- const event = value as AgentSessionEvent;
418
- if (event.type === "error") {
419
- return {
420
- done: true,
421
- error: event.message,
422
- };
423
- }
299
+ const unsubscribe = session.subscribe((event) => {
424
300
  renderEvent(event);
425
- if (event.type === "turn-finish" && event.turnId === promptTurnId) {
426
- finalText = event.text;
427
- return {
428
- done: true,
429
- ...(event.success ? {} : { error: event.error || "Agent turn failed" }),
430
- };
301
+ if (event.type === "turn-finish" && event.turnId === target_turn_id) {
302
+ final_text = event.text;
431
303
  }
432
- return { done: false };
433
- };
304
+ });
305
+
306
+ try {
307
+ const turn = await session.prompt({ query: message });
308
+ target_turn_id = turn.id;
309
+ const result = await turn.finished;
310
+ final_text = result.text;
434
311
 
435
- const finishTurn = (result: {
436
- success: boolean;
437
- error?: string;
438
- }): {
439
- success: boolean;
440
- error?: string;
441
- emittedVisibleText: boolean;
442
- text: string;
443
- } => {
444
- if (printedLeadingNewline) {
312
+ if (printed_leading_newline) {
445
313
  process.stdout.write("\n\n");
446
314
  }
315
+
447
316
  return {
448
317
  success: result.success,
449
318
  ...(result.error ? { error: result.error } : {}),
450
- emittedVisibleText,
451
- text: finalText,
319
+ emittedVisibleText: emitted_visible_text,
320
+ text: final_text,
452
321
  };
453
- };
454
-
455
- try {
456
- while (true) {
457
- const { done, value } = await reader.read();
458
- if (done) break;
459
- buffered += decoder.decode(value, { stream: true });
460
- let newlineIndex = buffered.indexOf("\n");
461
- while (newlineIndex >= 0) {
462
- const line = buffered.slice(0, newlineIndex).trim();
463
- buffered = buffered.slice(newlineIndex + 1);
464
- if (line) {
465
- const result = await handleLine(line);
466
- if (result.done) {
467
- return finishTurn({
468
- success: !result.error,
469
- ...(result.error ? { error: result.error } : {}),
470
- });
471
- }
472
- }
473
- newlineIndex = buffered.indexOf("\n");
474
- }
475
- }
476
-
477
- const tail = buffered.trim();
478
- if (tail) {
479
- const result = await handleLine(tail);
480
- if (result.done) {
481
- return finishTurn({
482
- success: !result.error,
483
- ...(result.error ? { error: result.error } : {}),
484
- });
485
- }
486
- }
487
322
  } catch (error) {
488
- return finishTurn({
323
+ if (printed_leading_newline) {
324
+ process.stdout.write("\n\n");
325
+ }
326
+ return {
489
327
  success: false,
490
328
  error: error instanceof Error ? error.message : String(error),
491
- });
329
+ emittedVisibleText: emitted_visible_text,
330
+ text: final_text,
331
+ };
492
332
  } finally {
493
- abortController.abort();
494
- await reader.cancel().catch(() => undefined);
495
- try {
496
- reader.releaseLock();
497
- } catch {
498
- // ignore
499
- }
333
+ unsubscribe();
500
334
  }
501
-
502
- return finishTurn({
503
- success: promptPosted && Boolean(promptTurnId),
504
- ...(promptPosted && promptTurnId ? {} : { error: "SDK events connection closed before prompt was accepted." }),
505
- });
506
335
  }
507
336
 
508
337
  /**
509
338
  * 向目标 agent 的 SDK actor session 发送一轮消息。
510
339
  */
511
340
  export async function executeAgentChatTurn(params: {
512
- agentName: string;
341
+ agentId: string;
513
342
  message: string;
514
343
  transport?: AgentChatTransportOptions;
515
344
  }): Promise<AgentChatExecutionOutcome> {
@@ -518,25 +347,25 @@ export async function executeAgentChatTurn(params: {
518
347
 
519
348
  if (!message) {
520
349
  return {
521
- agentName: String(params.agentName || "").trim(),
350
+ agentId: String(params.agentId || "").trim(),
522
351
  sessionId,
523
352
  success: false,
524
353
  error: "Chat message is required.",
525
354
  };
526
355
  }
527
356
 
528
- const resolved = await resolveAgentChatTarget(params.agentName);
357
+ const resolved = await resolveAgentChatTarget(params.agentId);
529
358
  if (!resolved.success) return resolved.outcome;
530
359
 
531
360
  const outcome = await runSdkPromptTurn({
532
- agentName: params.agentName,
361
+ agentId: params.agentId,
533
362
  message,
534
363
  transport: params.transport,
535
364
  renderText: false,
536
365
  });
537
366
 
538
367
  return {
539
- agentName: params.agentName,
368
+ agentId: params.agentId,
540
369
  ...(resolved.target.projectRoot ? { projectRoot: resolved.target.projectRoot } : {}),
541
370
  sessionId,
542
371
  success: outcome.success,
@@ -555,18 +384,17 @@ export async function executeAgentChatTurn(params: {
555
384
  }
556
385
 
557
386
  async function runOneShotChat(params: {
558
- agentName: string;
387
+ agentId: string;
559
388
  message: string;
560
389
  options: AgentChatCliOptions;
561
390
  }): Promise<void> {
562
391
  if (params.options.json === true) {
563
392
  const outcome = await executeAgentChatTurn({
564
- agentName: params.agentName,
393
+ agentId: params.agentId,
565
394
  message: params.message,
566
395
  transport: {
567
396
  host: params.options.host,
568
397
  port: params.options.port,
569
- token: params.options.token,
570
398
  },
571
399
  });
572
400
  printResult({
@@ -574,7 +402,7 @@ async function runOneShotChat(params: {
574
402
  success: outcome.success,
575
403
  title: "agent chat",
576
404
  payload: {
577
- agent: params.agentName,
405
+ agent: params.agentId,
578
406
  ...(outcome.projectRoot ? { projectRoot: outcome.projectRoot } : {}),
579
407
  sessionId: outcome.sessionId,
580
408
  ...(outcome.payload?.result ? { result: outcome.payload.result } : {}),
@@ -585,18 +413,17 @@ async function runOneShotChat(params: {
585
413
  }
586
414
 
587
415
  const outcome = await runSdkPromptTurn({
588
- agentName: params.agentName,
416
+ agentId: params.agentId,
589
417
  message: params.message,
590
418
  transport: {
591
419
  host: params.options.host,
592
420
  port: params.options.port,
593
- token: params.options.token,
594
421
  },
595
422
  });
596
423
 
597
424
  if (!outcome.success) {
598
425
  printAgentChatFailure({
599
- agentName: params.agentName,
426
+ agentId: params.agentId,
600
427
  error: outcome.error,
601
428
  });
602
429
  return;
@@ -609,10 +436,10 @@ async function runOneShotChat(params: {
609
436
  * 启动交互式持续对话。
610
437
  */
611
438
  async function runInteractiveChat(params: {
612
- agentName: string;
439
+ agentId: string;
613
440
  options: AgentChatCliOptions;
614
441
  }): Promise<void> {
615
- const prompt = `${chalk.cyan(params.agentName)} ${chalk.dim("›")} `;
442
+ const prompt = `${chalk.cyan(params.agentId)} ${chalk.dim("›")} `;
616
443
  const helpText = [
617
444
  `${chalk.dim("/exit, /quit — 退出对话")}`,
618
445
  `${chalk.dim("/clear — 清屏")}`,
@@ -622,7 +449,7 @@ async function runInteractiveChat(params: {
622
449
 
623
450
  emitCliBlock({
624
451
  tone: "info",
625
- title: `Agent chat · ${params.agentName}`,
452
+ title: `Agent chat · ${params.agentId}`,
626
453
  note: `Session: local-cli-chat-main · ${helpText[0].replace(chalk.dim(""), "").trim()}`,
627
454
  });
628
455
  console.log(helpText.join("\n"));
@@ -639,8 +466,6 @@ async function runInteractiveChat(params: {
639
466
  try {
640
467
  line = await rl.question(prompt);
641
468
  } catch (error) {
642
- // 关键点(中文):Node 24 下 Ctrl+C 会让 readline.question 以 AbortError 拒绝。
643
- // 这里按正常退出处理,避免把交互式 chat 变成未捕获异常。
644
469
  if (isReadlineAbortError(error)) {
645
470
  console.log();
646
471
  break;
@@ -660,18 +485,17 @@ async function runInteractiveChat(params: {
660
485
  }
661
486
 
662
487
  const outcome = await runSdkPromptTurn({
663
- agentName: params.agentName,
488
+ agentId: params.agentId,
664
489
  message: text,
665
490
  transport: {
666
491
  host: params.options.host,
667
492
  port: params.options.port,
668
- token: params.options.token,
669
493
  },
670
494
  });
671
495
 
672
496
  if (!outcome.success) {
673
497
  printAgentChatFailure({
674
- agentName: params.agentName,
498
+ agentId: params.agentId,
675
499
  error: outcome.error,
676
500
  });
677
501
  continue;
@@ -689,13 +513,13 @@ async function runInteractiveChat(params: {
689
513
  * `city agent chat` 统一入口。
690
514
  */
691
515
  export async function chatCommand(options: AgentChatCliOptions): Promise<void> {
692
- const agentName = await resolveChatTargetAgentName(options.to);
693
- if (!agentName) return;
516
+ const agentId = await resolveChatTargetAgentId(options.to);
517
+ if (!agentId) return;
694
518
 
695
519
  const oneShotMessage = normalizeChatMessage(String(options.message || ""));
696
520
  if (oneShotMessage) {
697
521
  await runOneShotChat({
698
- agentName,
522
+ agentId,
699
523
  message: oneShotMessage,
700
524
  options,
701
525
  });
@@ -721,7 +545,7 @@ export async function chatCommand(options: AgentChatCliOptions): Promise<void> {
721
545
  }
722
546
 
723
547
  await runInteractiveChat({
724
- agentName,
548
+ agentId,
725
549
  options,
726
550
  });
727
551
  }