@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
@@ -1,31 +0,0 @@
1
- /**
2
- * City 级 chat authorization 配置存储。
3
- *
4
- * 关键点(中文)
5
- * - 静态 chat 授权配置属于 city 维护的项目侧状态。
6
- * - 这里把配置落在项目 `.downcity/chat/authorization/config.json`。
7
- * - agent 只消费注入进来的读写能力,不再自己管理这份配置。
8
- */
9
- import type { ChatAuthorizationChannel, ChatAuthorizationConfig } from "@downcity/agent";
10
- /**
11
- * 同步读取 chat authorization 配置。
12
- */
13
- export declare function readChatAuthorizationConfigSync(projectRoot: string): ChatAuthorizationConfig;
14
- /**
15
- * 读取 chat authorization 配置。
16
- */
17
- export declare function readChatAuthorizationConfig(projectRoot: string): Promise<ChatAuthorizationConfig>;
18
- /**
19
- * 覆盖写入 chat authorization 配置。
20
- */
21
- export declare function writeChatAuthorizationConfig(projectRoot: string, nextConfig: ChatAuthorizationConfig): Promise<ChatAuthorizationConfig>;
22
- /**
23
- * 设置单个用户角色。
24
- */
25
- export declare function setChatAuthorizationUserRole(params: {
26
- projectRoot: string;
27
- channel: ChatAuthorizationChannel;
28
- userId: string;
29
- roleId: string;
30
- }): Promise<ChatAuthorizationConfig>;
31
- //# sourceMappingURL=Store.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Store.d.ts","sourceRoot":"","sources":["../../../src/platform/chatAuthorization/Store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EACV,wBAAwB,EACxB,uBAAuB,EAGxB,MAAM,iBAAiB,CAAC;AAmHzB;;GAEG;AACH,wBAAgB,+BAA+B,CAAC,WAAW,EAAE,MAAM,GAAG,uBAAuB,CAE5F;AAED;;GAEG;AACH,wBAAsB,2BAA2B,CAC/C,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,uBAAuB,CAAC,CAElC;AAED;;GAEG;AACH,wBAAsB,4BAA4B,CAChD,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,uBAAuB,GAClC,OAAO,CAAC,uBAAuB,CAAC,CAElC;AAED;;GAEG;AACH,wBAAsB,4BAA4B,CAAC,MAAM,EAAE;IACzD,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,wBAAwB,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAenC"}
@@ -1,145 +0,0 @@
1
- /**
2
- * City 级 chat authorization 配置存储。
3
- *
4
- * 关键点(中文)
5
- * - 静态 chat 授权配置属于 city 维护的项目侧状态。
6
- * - 这里把配置落在项目 `.downcity/chat/authorization/config.json`。
7
- * - agent 只消费注入进来的读写能力,不再自己管理这份配置。
8
- */
9
- import fs from "fs-extra";
10
- import path from "node:path";
11
- import { CHAT_AUTHORIZATION_CHANNELS, createDefaultChatAuthorizationRoles, } from "@downcity/agent";
12
- function normalizeText(value) {
13
- const text = String(value || "").trim();
14
- return text || undefined;
15
- }
16
- function normalizeRoleMap(input) {
17
- const defaultRoles = createDefaultChatAuthorizationRoles();
18
- if (!input || typeof input !== "object" || Array.isArray(input))
19
- return defaultRoles;
20
- const roles = {};
21
- for (const [rawRoleId, rawRole] of Object.entries(input)) {
22
- const roleId = normalizeText(rawRoleId);
23
- if (!roleId)
24
- continue;
25
- const roleObj = rawRole && typeof rawRole === "object" && !Array.isArray(rawRole)
26
- ? rawRole
27
- : null;
28
- if (!roleObj)
29
- continue;
30
- const builtinRole = defaultRoles[roleId];
31
- const permissions = Array.isArray(roleObj.permissions)
32
- ? [...new Set(roleObj.permissions.map((item) => normalizeText(item)).filter(Boolean))]
33
- : [];
34
- roles[roleId] = {
35
- roleId,
36
- name: normalizeText(roleObj.name) || builtinRole?.name || roleId,
37
- ...(normalizeText(roleObj.description) || builtinRole?.description
38
- ? {
39
- description: normalizeText(roleObj.description) || builtinRole?.description || undefined,
40
- }
41
- : {}),
42
- permissions: permissions,
43
- };
44
- }
45
- if (Object.keys(roles).length === 0)
46
- return defaultRoles;
47
- if (!roles.default)
48
- roles.default = defaultRoles.default;
49
- return roles;
50
- }
51
- function normalizeBindingMap(input, roles) {
52
- if (!input || typeof input !== "object" || Array.isArray(input))
53
- return {};
54
- const out = {};
55
- for (const [rawId, rawRoleId] of Object.entries(input)) {
56
- const entityId = normalizeText(rawId);
57
- const roleId = normalizeText(rawRoleId);
58
- if (!entityId || !roleId || !roles[roleId])
59
- continue;
60
- out[entityId] = roleId;
61
- }
62
- return out;
63
- }
64
- function normalizeChannelConfig(input, roles) {
65
- const raw = input && typeof input === "object" && !Array.isArray(input)
66
- ? input
67
- : {};
68
- const defaultUserRoleId = normalizeText(raw.defaultUserRoleId) || "default";
69
- return {
70
- defaultUserRoleId: roles[defaultUserRoleId] ? defaultUserRoleId : "default",
71
- userRoles: normalizeBindingMap(raw.userRoles, roles),
72
- };
73
- }
74
- function normalizeAuthorizationConfig(input) {
75
- const raw = input && typeof input === "object" && !Array.isArray(input)
76
- ? input
77
- : {};
78
- const roles = normalizeRoleMap(raw.roles);
79
- const channels = {};
80
- for (const channel of CHAT_AUTHORIZATION_CHANNELS) {
81
- channels[channel] = normalizeChannelConfig(raw.channels?.[channel], roles);
82
- }
83
- return { roles, channels };
84
- }
85
- function getChatAuthorizationConfigPath(projectRoot) {
86
- return path.join(projectRoot, ".downcity", "chat", "authorization", "config.json");
87
- }
88
- function readConfigFile(projectRoot) {
89
- const file = getChatAuthorizationConfigPath(projectRoot);
90
- if (!fs.existsSync(file))
91
- return normalizeAuthorizationConfig({});
92
- try {
93
- return normalizeAuthorizationConfig(fs.readJsonSync(file));
94
- }
95
- catch {
96
- return normalizeAuthorizationConfig({});
97
- }
98
- }
99
- function writeConfigFile(projectRoot, config) {
100
- const file = getChatAuthorizationConfigPath(projectRoot);
101
- fs.ensureDirSync(path.dirname(file));
102
- fs.writeJsonSync(file, normalizeAuthorizationConfig(config), { spaces: 2 });
103
- return normalizeAuthorizationConfig(config);
104
- }
105
- /**
106
- * 同步读取 chat authorization 配置。
107
- */
108
- export function readChatAuthorizationConfigSync(projectRoot) {
109
- return readConfigFile(String(projectRoot || "").trim());
110
- }
111
- /**
112
- * 读取 chat authorization 配置。
113
- */
114
- export async function readChatAuthorizationConfig(projectRoot) {
115
- return readChatAuthorizationConfigSync(projectRoot);
116
- }
117
- /**
118
- * 覆盖写入 chat authorization 配置。
119
- */
120
- export async function writeChatAuthorizationConfig(projectRoot, nextConfig) {
121
- return writeConfigFile(String(projectRoot || "").trim(), nextConfig);
122
- }
123
- /**
124
- * 设置单个用户角色。
125
- */
126
- export async function setChatAuthorizationUserRole(params) {
127
- const projectRoot = String(params.projectRoot || "").trim();
128
- const userId = normalizeText(params.userId);
129
- const roleId = normalizeText(params.roleId);
130
- if (!projectRoot)
131
- throw new Error("projectRoot is required");
132
- if (!userId || !roleId)
133
- throw new Error("userId and roleId are required");
134
- const next = readConfigFile(projectRoot);
135
- next.roles = normalizeRoleMap(next.roles);
136
- if (!next.roles[roleId])
137
- throw new Error(`Unknown roleId: ${roleId}`);
138
- next.channels ??= {};
139
- const channelConfig = normalizeChannelConfig(next.channels[params.channel], next.roles);
140
- channelConfig.userRoles ??= {};
141
- channelConfig.userRoles[userId] = roleId;
142
- next.channels[params.channel] = channelConfig;
143
- return writeConfigFile(projectRoot, next);
144
- }
145
- //# sourceMappingURL=Store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Store.js","sourceRoot":"","sources":["../../../src/platform/chatAuthorization/Store.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- /**
2
- * Local RPC 客户端。
3
- *
4
- * 关键点(中文)
5
- * - 只用于本机受信任 IPC,不附加 HTTP Bearer 鉴权。
6
- * - 返回结构与 HTTP `callServer()` 对齐,便于上层透明切换 transport。
7
- */
8
- import type { DaemonJsonApiCallParams, DaemonJsonApiCallResult } from "../../process/daemon/Api.js";
9
- /**
10
- * 通过本地 IPC 调用 agent runtime。
11
- */
12
- export declare function callLocalServer<T>(params: DaemonJsonApiCallParams): Promise<DaemonJsonApiCallResult<T>>;
13
- //# sourceMappingURL=Client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Client.d.ts","sourceRoot":"","sources":["../../../src/process/rpc/Client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EACV,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,yBAAyB,CAAC;AAejC;;GAEG;AACH,wBAAsB,eAAe,CAAC,CAAC,EACrC,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CA+ErC"}
@@ -1,98 +0,0 @@
1
- /**
2
- * Local RPC 客户端。
3
- *
4
- * 关键点(中文)
5
- * - 只用于本机受信任 IPC,不附加 HTTP Bearer 鉴权。
6
- * - 返回结构与 HTTP `callServer()` 对齐,便于上层透明切换 transport。
7
- */
8
- import net from "node:net";
9
- import { nanoid } from "nanoid";
10
- import { getLocalRpcEndpoint } from "./Paths.js";
11
- const LOCAL_RPC_TIMEOUT_MS = 5_000;
12
- function toLocalRpcRequest(params) {
13
- return {
14
- requestId: nanoid(),
15
- path: String(params.path || "").trim(),
16
- method: params.method || "GET",
17
- ...(params.body !== undefined ? { body: params.body } : {}),
18
- };
19
- }
20
- /**
21
- * 通过本地 IPC 调用 agent runtime。
22
- */
23
- export async function callLocalServer(params) {
24
- const endpoint = getLocalRpcEndpoint(params.projectRoot);
25
- const request = toLocalRpcRequest(params);
26
- const timeoutMs = typeof params.timeoutMs === "number" &&
27
- Number.isFinite(params.timeoutMs) &&
28
- params.timeoutMs > 0
29
- ? Math.floor(params.timeoutMs)
30
- : LOCAL_RPC_TIMEOUT_MS;
31
- return await new Promise((resolve) => {
32
- const socket = net.createConnection(endpoint);
33
- let settled = false;
34
- let buffered = "";
35
- const finish = (result) => {
36
- if (settled)
37
- return;
38
- settled = true;
39
- socket.destroy();
40
- resolve(result);
41
- };
42
- socket.setEncoding("utf8");
43
- socket.setTimeout(timeoutMs);
44
- socket.on("connect", () => {
45
- socket.write(`${JSON.stringify(request)}\n`);
46
- });
47
- socket.on("data", (chunk) => {
48
- buffered += String(chunk || "");
49
- const newlineIndex = buffered.indexOf("\n");
50
- if (newlineIndex < 0)
51
- return;
52
- const raw = buffered.slice(0, newlineIndex).trim();
53
- if (!raw) {
54
- finish({
55
- success: false,
56
- error: `Local RPC returned empty payload from ${endpoint}`,
57
- });
58
- return;
59
- }
60
- try {
61
- const response = JSON.parse(raw);
62
- finish({
63
- success: response.success,
64
- status: response.status,
65
- ...(response.data !== undefined ? { data: response.data } : {}),
66
- ...(response.error ? { error: response.error } : {}),
67
- });
68
- }
69
- catch (error) {
70
- finish({
71
- success: false,
72
- error: `Local RPC returned invalid JSON from ${endpoint}: ${String(error)}`,
73
- });
74
- }
75
- });
76
- socket.on("timeout", () => {
77
- finish({
78
- success: false,
79
- error: `Local RPC timed out after ${timeoutMs}ms (${endpoint})`,
80
- });
81
- });
82
- socket.on("error", (error) => {
83
- finish({
84
- success: false,
85
- error: `Local RPC unavailable at ${endpoint}: ${String(error)}`,
86
- });
87
- });
88
- socket.on("end", () => {
89
- if (settled)
90
- return;
91
- finish({
92
- success: false,
93
- error: `Local RPC closed without response (${endpoint})`,
94
- });
95
- });
96
- });
97
- }
98
- //# sourceMappingURL=Client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Client.js","sourceRoot":"","sources":["../../../src/process/rpc/Client.ts"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- /**
2
- * Local RPC 路径工具。
3
- *
4
- * 关键点(中文)
5
- * - 本地受信任进程之间统一通过 IPC socket/pipe 通信。
6
- * - Unix 平台使用 city 全局 runtime 目录下的稳定 socket 文件,避免不同启动上下文
7
- * 的 `TMPDIR` 不一致,导致同一个 agent 被解析到两个不同 socket 路径。
8
- * - Windows 平台使用命名 pipe,并基于项目路径 hash 保证稳定唯一。
9
- */
10
- /**
11
- * 返回本地 RPC endpoint。
12
- */
13
- export declare function getLocalRpcEndpoint(projectRoot: string): string;
14
- //# sourceMappingURL=Paths.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Paths.d.ts","sourceRoot":"","sources":["../../../src/process/rpc/Paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAuBH;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAQ/D"}
@@ -1,36 +0,0 @@
1
- /**
2
- * Local RPC 路径工具。
3
- *
4
- * 关键点(中文)
5
- * - 本地受信任进程之间统一通过 IPC socket/pipe 通信。
6
- * - Unix 平台使用 city 全局 runtime 目录下的稳定 socket 文件,避免不同启动上下文
7
- * 的 `TMPDIR` 不一致,导致同一个 agent 被解析到两个不同 socket 路径。
8
- * - Windows 平台使用命名 pipe,并基于项目路径 hash 保证稳定唯一。
9
- */
10
- import crypto from "node:crypto";
11
- import path from "node:path";
12
- import { getCityRuntimeDirPath } from "../../process/registry/CityPaths.js";
13
- function buildProjectDigest(projectRoot) {
14
- return crypto
15
- .createHash("sha1")
16
- .update(path.resolve(projectRoot))
17
- .digest("hex")
18
- .slice(0, 16);
19
- }
20
- function buildWindowsPipeName(projectRoot) {
21
- const digest = buildProjectDigest(projectRoot);
22
- return `\\\\.\\pipe\\downcity-local-${digest}`;
23
- }
24
- function getLocalRpcUnixDirPath() {
25
- return path.join(getCityRuntimeDirPath(), "local-rpc");
26
- }
27
- /**
28
- * 返回本地 RPC endpoint。
29
- */
30
- export function getLocalRpcEndpoint(projectRoot) {
31
- if (process.platform === "win32") {
32
- return buildWindowsPipeName(projectRoot);
33
- }
34
- return path.join(getLocalRpcUnixDirPath(), `downcity-local-${buildProjectDigest(projectRoot)}.sock`);
35
- }
36
- //# sourceMappingURL=Paths.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Paths.js","sourceRoot":"","sources":["../../../src/process/rpc/Paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAExE,SAAS,kBAAkB,CAAC,WAAmB;IAC7C,OAAO,MAAM;SACV,UAAU,CAAC,MAAM,CAAC;SAClB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;SACjC,MAAM,CAAC,KAAK,CAAC;SACb,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,oBAAoB,CAAC,WAAmB;IAC/C,MAAM,MAAM,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAC/C,OAAO,+BAA+B,MAAM,EAAE,CAAC;AACjD,CAAC;AAED,SAAS,sBAAsB;IAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,WAAW,CAAC,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB;IACrD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CACd,sBAAsB,EAAE,EACxB,kBAAkB,kBAAkB,CAAC,WAAW,CAAC,OAAO,CACzD,CAAC;AACJ,CAAC"}
@@ -1,181 +0,0 @@
1
- /**
2
- * City 级 chat authorization 配置存储。
3
- *
4
- * 关键点(中文)
5
- * - 静态 chat 授权配置属于 city 维护的项目侧状态。
6
- * - 这里把配置落在项目 `.downcity/chat/authorization/config.json`。
7
- * - agent 只消费注入进来的读写能力,不再自己管理这份配置。
8
- */
9
-
10
- import fs from "fs-extra";
11
- import path from "node:path";
12
- import type {
13
- ChatAuthorizationChannel,
14
- ChatAuthorizationConfig,
15
- ChatAuthorizationRole,
16
- ChatChannelAuthorizationConfig,
17
- } from "@downcity/agent";
18
- import {
19
- CHAT_AUTHORIZATION_CHANNELS,
20
- createDefaultChatAuthorizationRoles,
21
- } from "@downcity/agent";
22
-
23
- function normalizeText(value: unknown): string | undefined {
24
- const text = String(value || "").trim();
25
- return text || undefined;
26
- }
27
-
28
- function normalizeRoleMap(input: unknown): Record<string, ChatAuthorizationRole> {
29
- const defaultRoles = createDefaultChatAuthorizationRoles();
30
- if (!input || typeof input !== "object" || Array.isArray(input)) return defaultRoles;
31
- const roles: Record<string, ChatAuthorizationRole> = {};
32
- for (const [rawRoleId, rawRole] of Object.entries(input as Record<string, unknown>)) {
33
- const roleId = normalizeText(rawRoleId);
34
- if (!roleId) continue;
35
- const roleObj =
36
- rawRole && typeof rawRole === "object" && !Array.isArray(rawRole)
37
- ? (rawRole as {
38
- name?: unknown;
39
- description?: unknown;
40
- permissions?: unknown[];
41
- })
42
- : null;
43
- if (!roleObj) continue;
44
- const builtinRole = defaultRoles[roleId];
45
- const permissions = Array.isArray(roleObj.permissions)
46
- ? [...new Set(roleObj.permissions.map((item) => normalizeText(item)).filter(Boolean))]
47
- : [];
48
- roles[roleId] = {
49
- roleId,
50
- name: normalizeText(roleObj.name) || builtinRole?.name || roleId,
51
- ...(normalizeText(roleObj.description) || builtinRole?.description
52
- ? {
53
- description:
54
- normalizeText(roleObj.description) || builtinRole?.description || undefined,
55
- }
56
- : {}),
57
- permissions: permissions as ChatAuthorizationRole["permissions"],
58
- };
59
- }
60
- if (Object.keys(roles).length === 0) return defaultRoles;
61
- if (!roles.default) roles.default = defaultRoles.default;
62
- return roles;
63
- }
64
-
65
- function normalizeBindingMap(
66
- input: unknown,
67
- roles: Record<string, ChatAuthorizationRole>,
68
- ): Record<string, string> {
69
- if (!input || typeof input !== "object" || Array.isArray(input)) return {};
70
- const out: Record<string, string> = {};
71
- for (const [rawId, rawRoleId] of Object.entries(input as Record<string, unknown>)) {
72
- const entityId = normalizeText(rawId);
73
- const roleId = normalizeText(rawRoleId);
74
- if (!entityId || !roleId || !roles[roleId]) continue;
75
- out[entityId] = roleId;
76
- }
77
- return out;
78
- }
79
-
80
- function normalizeChannelConfig(
81
- input: unknown,
82
- roles: Record<string, ChatAuthorizationRole>,
83
- ): ChatChannelAuthorizationConfig {
84
- const raw =
85
- input && typeof input === "object" && !Array.isArray(input)
86
- ? (input as {
87
- defaultUserRoleId?: unknown;
88
- userRoles?: unknown;
89
- })
90
- : {};
91
- const defaultUserRoleId = normalizeText(raw.defaultUserRoleId) || "default";
92
- return {
93
- defaultUserRoleId: roles[defaultUserRoleId] ? defaultUserRoleId : "default",
94
- userRoles: normalizeBindingMap(raw.userRoles, roles),
95
- };
96
- }
97
-
98
- function normalizeAuthorizationConfig(input: unknown): ChatAuthorizationConfig {
99
- const raw =
100
- input && typeof input === "object" && !Array.isArray(input)
101
- ? (input as { roles?: unknown; channels?: Record<string, unknown> })
102
- : {};
103
- const roles = normalizeRoleMap(raw.roles);
104
- const channels: Partial<Record<ChatAuthorizationChannel, ChatChannelAuthorizationConfig>> = {};
105
- for (const channel of CHAT_AUTHORIZATION_CHANNELS) {
106
- channels[channel] = normalizeChannelConfig(raw.channels?.[channel], roles);
107
- }
108
- return { roles, channels };
109
- }
110
-
111
- function getChatAuthorizationConfigPath(projectRoot: string): string {
112
- return path.join(projectRoot, ".downcity", "chat", "authorization", "config.json");
113
- }
114
-
115
- function readConfigFile(projectRoot: string): ChatAuthorizationConfig {
116
- const file = getChatAuthorizationConfigPath(projectRoot);
117
- if (!fs.existsSync(file)) return normalizeAuthorizationConfig({});
118
- try {
119
- return normalizeAuthorizationConfig(fs.readJsonSync(file));
120
- } catch {
121
- return normalizeAuthorizationConfig({});
122
- }
123
- }
124
-
125
- function writeConfigFile(projectRoot: string, config: ChatAuthorizationConfig): ChatAuthorizationConfig {
126
- const file = getChatAuthorizationConfigPath(projectRoot);
127
- fs.ensureDirSync(path.dirname(file));
128
- fs.writeJsonSync(file, normalizeAuthorizationConfig(config), { spaces: 2 });
129
- return normalizeAuthorizationConfig(config);
130
- }
131
-
132
- /**
133
- * 同步读取 chat authorization 配置。
134
- */
135
- export function readChatAuthorizationConfigSync(projectRoot: string): ChatAuthorizationConfig {
136
- return readConfigFile(String(projectRoot || "").trim());
137
- }
138
-
139
- /**
140
- * 读取 chat authorization 配置。
141
- */
142
- export async function readChatAuthorizationConfig(
143
- projectRoot: string,
144
- ): Promise<ChatAuthorizationConfig> {
145
- return readChatAuthorizationConfigSync(projectRoot);
146
- }
147
-
148
- /**
149
- * 覆盖写入 chat authorization 配置。
150
- */
151
- export async function writeChatAuthorizationConfig(
152
- projectRoot: string,
153
- nextConfig: ChatAuthorizationConfig,
154
- ): Promise<ChatAuthorizationConfig> {
155
- return writeConfigFile(String(projectRoot || "").trim(), nextConfig);
156
- }
157
-
158
- /**
159
- * 设置单个用户角色。
160
- */
161
- export async function setChatAuthorizationUserRole(params: {
162
- projectRoot: string;
163
- channel: ChatAuthorizationChannel;
164
- userId: string;
165
- roleId: string;
166
- }): Promise<ChatAuthorizationConfig> {
167
- const projectRoot = String(params.projectRoot || "").trim();
168
- const userId = normalizeText(params.userId);
169
- const roleId = normalizeText(params.roleId);
170
- if (!projectRoot) throw new Error("projectRoot is required");
171
- if (!userId || !roleId) throw new Error("userId and roleId are required");
172
- const next = readConfigFile(projectRoot);
173
- next.roles = normalizeRoleMap(next.roles);
174
- if (!next.roles[roleId]) throw new Error(`Unknown roleId: ${roleId}`);
175
- next.channels ??= {};
176
- const channelConfig = normalizeChannelConfig(next.channels[params.channel], next.roles);
177
- channelConfig.userRoles ??= {};
178
- channelConfig.userRoles[userId] = roleId;
179
- next.channels[params.channel] = channelConfig;
180
- return writeConfigFile(projectRoot, next);
181
- }
@@ -1,113 +0,0 @@
1
- /**
2
- * Local RPC 客户端。
3
- *
4
- * 关键点(中文)
5
- * - 只用于本机受信任 IPC,不附加 HTTP Bearer 鉴权。
6
- * - 返回结构与 HTTP `callServer()` 对齐,便于上层透明切换 transport。
7
- */
8
-
9
- import net from "node:net";
10
- import { nanoid } from "nanoid";
11
- import type {
12
- DaemonJsonApiCallParams,
13
- DaemonJsonApiCallResult,
14
- } from "@/process/daemon/Api.js";
15
- import type { LocalRpcRequest, LocalRpcResponse } from "@downcity/agent";
16
- import { getLocalRpcEndpoint } from "./Paths.js";
17
-
18
- const LOCAL_RPC_TIMEOUT_MS = 5_000;
19
-
20
- function toLocalRpcRequest(params: DaemonJsonApiCallParams): LocalRpcRequest {
21
- return {
22
- requestId: nanoid(),
23
- path: String(params.path || "").trim(),
24
- method: params.method || "GET",
25
- ...(params.body !== undefined ? { body: params.body } : {}),
26
- };
27
- }
28
-
29
- /**
30
- * 通过本地 IPC 调用 agent runtime。
31
- */
32
- export async function callLocalServer<T>(
33
- params: DaemonJsonApiCallParams,
34
- ): Promise<DaemonJsonApiCallResult<T>> {
35
- const endpoint = getLocalRpcEndpoint(params.projectRoot);
36
- const request = toLocalRpcRequest(params);
37
- const timeoutMs =
38
- typeof params.timeoutMs === "number" &&
39
- Number.isFinite(params.timeoutMs) &&
40
- params.timeoutMs > 0
41
- ? Math.floor(params.timeoutMs)
42
- : LOCAL_RPC_TIMEOUT_MS;
43
-
44
- return await new Promise<DaemonJsonApiCallResult<T>>((resolve) => {
45
- const socket = net.createConnection(endpoint);
46
- let settled = false;
47
- let buffered = "";
48
-
49
- const finish = (result: DaemonJsonApiCallResult<T>): void => {
50
- if (settled) return;
51
- settled = true;
52
- socket.destroy();
53
- resolve(result);
54
- };
55
-
56
- socket.setEncoding("utf8");
57
- socket.setTimeout(timeoutMs);
58
-
59
- socket.on("connect", () => {
60
- socket.write(`${JSON.stringify(request)}\n`);
61
- });
62
-
63
- socket.on("data", (chunk) => {
64
- buffered += String(chunk || "");
65
- const newlineIndex = buffered.indexOf("\n");
66
- if (newlineIndex < 0) return;
67
- const raw = buffered.slice(0, newlineIndex).trim();
68
- if (!raw) {
69
- finish({
70
- success: false,
71
- error: `Local RPC returned empty payload from ${endpoint}`,
72
- });
73
- return;
74
- }
75
- try {
76
- const response = JSON.parse(raw) as LocalRpcResponse;
77
- finish({
78
- success: response.success,
79
- status: response.status,
80
- ...(response.data !== undefined ? { data: response.data as T } : {}),
81
- ...(response.error ? { error: response.error } : {}),
82
- });
83
- } catch (error) {
84
- finish({
85
- success: false,
86
- error: `Local RPC returned invalid JSON from ${endpoint}: ${String(error)}`,
87
- });
88
- }
89
- });
90
-
91
- socket.on("timeout", () => {
92
- finish({
93
- success: false,
94
- error: `Local RPC timed out after ${timeoutMs}ms (${endpoint})`,
95
- });
96
- });
97
-
98
- socket.on("error", (error) => {
99
- finish({
100
- success: false,
101
- error: `Local RPC unavailable at ${endpoint}: ${String(error)}`,
102
- });
103
- });
104
-
105
- socket.on("end", () => {
106
- if (settled) return;
107
- finish({
108
- success: false,
109
- error: `Local RPC closed without response (${endpoint})`,
110
- });
111
- });
112
- });
113
- }