@nocobase/app-plugin-agents 0.1.0-beta.1 → 0.1.0-beta.10

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 (594) hide show
  1. package/CHANGELOG.md +355 -0
  2. package/README.md +107 -67
  3. package/dist/client/api/client.d.ts +25 -17
  4. package/dist/client/api/client.d.ts.map +1 -1
  5. package/dist/client/api/client.js +29 -27
  6. package/dist/client/api/client.js.map +1 -1
  7. package/dist/client/api/keys.d.ts +1 -1
  8. package/dist/client/api/keys.d.ts.map +1 -1
  9. package/dist/client/api/keys.js +1 -1
  10. package/dist/client/api/keys.js.map +1 -1
  11. package/dist/client/chat/api.d.ts +2 -7
  12. package/dist/client/chat/api.d.ts.map +1 -1
  13. package/dist/client/chat/api.js +0 -7
  14. package/dist/client/chat/api.js.map +1 -1
  15. package/dist/client/chat/consultation-identity.d.ts +7 -0
  16. package/dist/client/chat/consultation-identity.d.ts.map +1 -0
  17. package/dist/client/chat/consultation-identity.js +39 -0
  18. package/dist/client/chat/consultation-identity.js.map +1 -0
  19. package/dist/client/chat/message-model.d.ts +4 -2
  20. package/dist/client/chat/message-model.d.ts.map +1 -1
  21. package/dist/client/chat/message-model.js +28 -3
  22. package/dist/client/chat/message-model.js.map +1 -1
  23. package/dist/client/chat/use-chat.d.ts +2 -10
  24. package/dist/client/chat/use-chat.d.ts.map +1 -1
  25. package/dist/client/chat/use-chat.js +3 -10
  26. package/dist/client/chat/use-chat.js.map +1 -1
  27. package/dist/client/chat.d.ts +4 -1
  28. package/dist/client/chat.d.ts.map +1 -1
  29. package/dist/client/chat.js +3 -0
  30. package/dist/client/chat.js.map +1 -1
  31. package/dist/client/components/agent-picker.d.ts +6 -23
  32. package/dist/client/components/agent-picker.d.ts.map +1 -1
  33. package/dist/client/components/agent-picker.js +19 -39
  34. package/dist/client/components/agent-picker.js.map +1 -1
  35. package/dist/client/components/variables/variable-dialogs.d.ts +6 -1
  36. package/dist/client/components/variables/variable-dialogs.d.ts.map +1 -1
  37. package/dist/client/components/variables/variable-dialogs.js +27 -11
  38. package/dist/client/components/variables/variable-dialogs.js.map +1 -1
  39. package/dist/client/components/variables/variables-panel.d.ts.map +1 -1
  40. package/dist/client/components/variables/variables-panel.js +9 -2
  41. package/dist/client/components/variables/variables-panel.js.map +1 -1
  42. package/dist/client/hooks/use-agent-picker-labels.d.ts.map +1 -1
  43. package/dist/client/hooks/use-agent-picker-labels.js +3 -12
  44. package/dist/client/hooks/use-agent-picker-labels.js.map +1 -1
  45. package/dist/client/kit.d.ts +9 -12
  46. package/dist/client/kit.d.ts.map +1 -1
  47. package/dist/client/kit.js +12 -14
  48. package/dist/client/kit.js.map +1 -1
  49. package/dist/client/lib/agents.d.ts +5 -13
  50. package/dist/client/lib/agents.d.ts.map +1 -1
  51. package/dist/client/lib/agents.js +17 -32
  52. package/dist/client/lib/agents.js.map +1 -1
  53. package/dist/client/lib/install.js +1 -1
  54. package/dist/client/locales/chat.en-US.d.ts +9 -22
  55. package/dist/client/locales/chat.en-US.d.ts.map +1 -1
  56. package/dist/client/locales/chat.en-US.js +13 -25
  57. package/dist/client/locales/chat.en-US.js.map +1 -1
  58. package/dist/client/locales/chat.zh-CN.d.ts.map +1 -1
  59. package/dist/client/locales/chat.zh-CN.js +10 -22
  60. package/dist/client/locales/chat.zh-CN.js.map +1 -1
  61. package/dist/client/locales/en-US.d.ts +100 -219
  62. package/dist/client/locales/en-US.d.ts.map +1 -1
  63. package/dist/client/locales/en-US.js +105 -219
  64. package/dist/client/locales/en-US.js.map +1 -1
  65. package/dist/client/locales/runWait.en-US.d.ts +38 -0
  66. package/dist/client/locales/runWait.en-US.d.ts.map +1 -0
  67. package/dist/client/locales/runWait.en-US.js +37 -0
  68. package/dist/client/locales/runWait.en-US.js.map +1 -0
  69. package/dist/client/locales/runWait.zh-CN.d.ts +5 -0
  70. package/dist/client/locales/runWait.zh-CN.d.ts.map +1 -0
  71. package/dist/client/locales/runWait.zh-CN.js +32 -0
  72. package/dist/client/locales/runWait.zh-CN.js.map +1 -0
  73. package/dist/client/locales/runtimes.en-US.d.ts +55 -0
  74. package/dist/client/locales/runtimes.en-US.d.ts.map +1 -1
  75. package/dist/client/locales/runtimes.en-US.js +58 -3
  76. package/dist/client/locales/runtimes.en-US.js.map +1 -1
  77. package/dist/client/locales/runtimes.zh-CN.d.ts.map +1 -1
  78. package/dist/client/locales/runtimes.zh-CN.js +58 -3
  79. package/dist/client/locales/runtimes.zh-CN.js.map +1 -1
  80. package/dist/client/locales/zh-CN.d.ts.map +1 -1
  81. package/dist/client/locales/zh-CN.js +107 -221
  82. package/dist/client/locales/zh-CN.js.map +1 -1
  83. package/dist/client/online/services.d.ts.map +1 -1
  84. package/dist/client/online/services.js +5 -6
  85. package/dist/client/online/services.js.map +1 -1
  86. package/dist/client/pages/agents/agent-dialog.d.ts +9 -0
  87. package/dist/client/pages/agents/agent-dialog.d.ts.map +1 -0
  88. package/dist/client/pages/agents/agent-dialog.js +106 -0
  89. package/dist/client/pages/agents/agent-dialog.js.map +1 -0
  90. package/dist/client/pages/agents/agent-state.d.ts +11 -0
  91. package/dist/client/pages/agents/agent-state.d.ts.map +1 -0
  92. package/dist/client/pages/agents/agent-state.js +28 -0
  93. package/dist/client/pages/agents/agent-state.js.map +1 -0
  94. package/dist/client/pages/agents/index.d.ts +1 -1
  95. package/dist/client/pages/agents/index.d.ts.map +1 -1
  96. package/dist/client/pages/agents/index.js +6 -100
  97. package/dist/client/pages/agents/index.js.map +1 -1
  98. package/dist/client/pages/agents/runner-agents.d.ts +3 -0
  99. package/dist/client/pages/agents/runner-agents.d.ts.map +1 -0
  100. package/dist/client/pages/agents/runner-agents.js +172 -0
  101. package/dist/client/pages/agents/runner-agents.js.map +1 -0
  102. package/dist/client/pages/runtimes/connect.js +1 -1
  103. package/dist/client/pages/runtimes/connect.js.map +1 -1
  104. package/dist/client/pages/runtimes/index.d.ts.map +1 -1
  105. package/dist/client/pages/runtimes/index.js +3 -2
  106. package/dist/client/pages/runtimes/index.js.map +1 -1
  107. package/dist/client/pages/runtimes/runner-cells.d.ts +1 -1
  108. package/dist/client/pages/runtimes/runner-cells.d.ts.map +1 -1
  109. package/dist/client/pages/runtimes/runner-cells.js +4 -1
  110. package/dist/client/pages/runtimes/runner-cells.js.map +1 -1
  111. package/dist/client/pages/runtimes/runner-sheet.d.ts.map +1 -1
  112. package/dist/client/pages/runtimes/runner-sheet.js +12 -3
  113. package/dist/client/pages/runtimes/runner-sheet.js.map +1 -1
  114. package/dist/client/pages/runtimes/workspace-diagnostics.d.ts +9 -0
  115. package/dist/client/pages/runtimes/workspace-diagnostics.d.ts.map +1 -0
  116. package/dist/client/pages/runtimes/workspace-diagnostics.js +70 -0
  117. package/dist/client/pages/runtimes/workspace-diagnostics.js.map +1 -0
  118. package/dist/client/pages/usage/index.js +2 -2
  119. package/dist/client/pages/usage/index.js.map +1 -1
  120. package/dist/client/profile/default-agent.d.ts.map +1 -1
  121. package/dist/client/profile/default-agent.js +2 -4
  122. package/dist/client/profile/default-agent.js.map +1 -1
  123. package/dist/client/routes.d.ts +1 -1
  124. package/dist/client/routes.d.ts.map +1 -1
  125. package/dist/client/routes.js +1 -13
  126. package/dist/client/routes.js.map +1 -1
  127. package/dist/client/runs/format-wait.d.ts +21 -0
  128. package/dist/client/runs/format-wait.d.ts.map +1 -0
  129. package/dist/client/runs/format-wait.js +90 -0
  130. package/dist/client/runs/format-wait.js.map +1 -0
  131. package/dist/client/runs/subject-runs.d.ts +5 -0
  132. package/dist/client/runs/subject-runs.d.ts.map +1 -1
  133. package/dist/client/runs/subject-runs.js +13 -7
  134. package/dist/client/runs/subject-runs.js.map +1 -1
  135. package/dist/client/runs.d.ts +3 -1
  136. package/dist/client/runs.d.ts.map +1 -1
  137. package/dist/client/runs.js +3 -1
  138. package/dist/client/runs.js.map +1 -1
  139. package/dist/database/migrations/.manifest.json +48 -0
  140. package/dist/database/migrations/202610090001_ag_add_team_runner_variables.d.ts +9 -0
  141. package/dist/database/migrations/202610090001_ag_add_team_runner_variables.d.ts.map +1 -0
  142. package/dist/database/migrations/202610090001_ag_add_team_runner_variables.js +28 -0
  143. package/dist/database/migrations/202610090001_ag_add_team_runner_variables.js.map +1 -0
  144. package/dist/database/migrations/202610090002_ag_create_run_requests.d.ts +10 -0
  145. package/dist/database/migrations/202610090002_ag_create_run_requests.d.ts.map +1 -0
  146. package/dist/database/migrations/202610090002_ag_create_run_requests.js +105 -0
  147. package/dist/database/migrations/202610090002_ag_create_run_requests.js.map +1 -0
  148. package/dist/database/migrations/202610090003_ag_add_execution_history.d.ts +4 -0
  149. package/dist/database/migrations/202610090003_ag_add_execution_history.d.ts.map +1 -0
  150. package/dist/database/migrations/202610090003_ag_add_execution_history.js +17 -0
  151. package/dist/database/migrations/202610090003_ag_add_execution_history.js.map +1 -0
  152. package/dist/database/migrations/202610090004_ag_add_runner_workspace_usage.d.ts +9 -0
  153. package/dist/database/migrations/202610090004_ag_add_runner_workspace_usage.d.ts.map +1 -0
  154. package/dist/database/migrations/202610090004_ag_add_runner_workspace_usage.js +22 -0
  155. package/dist/database/migrations/202610090004_ag_add_runner_workspace_usage.js.map +1 -0
  156. package/dist/database/migrations/202610090005_ag_add_runner_variables.d.ts +10 -0
  157. package/dist/database/migrations/202610090005_ag_add_runner_variables.d.ts.map +1 -0
  158. package/dist/database/migrations/202610090005_ag_add_runner_variables.js +36 -0
  159. package/dist/database/migrations/202610090005_ag_add_runner_variables.js.map +1 -0
  160. package/dist/database/migrations/202610100001_ag_index_run_event_types.d.ts +4 -0
  161. package/dist/database/migrations/202610100001_ag_index_run_event_types.d.ts.map +1 -0
  162. package/dist/database/migrations/202610100001_ag_index_run_event_types.js +17 -0
  163. package/dist/database/migrations/202610100001_ag_index_run_event_types.js.map +1 -0
  164. package/dist/database/migrations/202610100002_ag_add_run_git_credentials.d.ts +9 -0
  165. package/dist/database/migrations/202610100002_ag_add_run_git_credentials.d.ts.map +1 -0
  166. package/dist/database/migrations/202610100002_ag_add_run_git_credentials.js +30 -0
  167. package/dist/database/migrations/202610100002_ag_add_run_git_credentials.js.map +1 -0
  168. package/dist/database/migrations/202610110001_ag_add_fresh_sessions.d.ts +4 -0
  169. package/dist/database/migrations/202610110001_ag_add_fresh_sessions.d.ts.map +1 -0
  170. package/dist/database/migrations/202610110001_ag_add_fresh_sessions.js +23 -0
  171. package/dist/database/migrations/202610110001_ag_add_fresh_sessions.js.map +1 -0
  172. package/dist/database/migrations/202610120001_ag_index_run_retries.d.ts +4 -0
  173. package/dist/database/migrations/202610120001_ag_index_run_retries.d.ts.map +1 -0
  174. package/dist/database/migrations/202610120001_ag_index_run_retries.js +17 -0
  175. package/dist/database/migrations/202610120001_ag_index_run_retries.js.map +1 -0
  176. package/dist/database/migrations/202610120002_ag_add_queue_entered_at.d.ts +4 -0
  177. package/dist/database/migrations/202610120002_ag_add_queue_entered_at.d.ts.map +1 -0
  178. package/dist/database/migrations/202610120002_ag_add_queue_entered_at.js +50 -0
  179. package/dist/database/migrations/202610120002_ag_add_queue_entered_at.js.map +1 -0
  180. package/dist/database/migrations/202610240020_ag_runner_agents.d.ts +4 -0
  181. package/dist/database/migrations/202610240020_ag_runner_agents.d.ts.map +1 -0
  182. package/dist/database/migrations/202610240020_ag_runner_agents.js +115 -0
  183. package/dist/database/migrations/202610240020_ag_runner_agents.js.map +1 -0
  184. package/dist/database/migrations/202610240040_ag_discovery_preferences.d.ts +4 -0
  185. package/dist/database/migrations/202610240040_ag_discovery_preferences.d.ts.map +1 -0
  186. package/dist/database/migrations/202610240040_ag_discovery_preferences.js +18 -0
  187. package/dist/database/migrations/202610240040_ag_discovery_preferences.js.map +1 -0
  188. package/dist/package.json +8 -10
  189. package/dist/server/cli/run-credential.js +1 -1
  190. package/dist/server/composition.d.ts +39 -37
  191. package/dist/server/composition.d.ts.map +1 -1
  192. package/dist/server/composition.js +53 -65
  193. package/dist/server/composition.js.map +1 -1
  194. package/dist/server/core/agents/agent.service.d.ts +51 -43
  195. package/dist/server/core/agents/agent.service.d.ts.map +1 -1
  196. package/dist/server/core/agents/agent.service.js +342 -317
  197. package/dist/server/core/agents/agent.service.js.map +1 -1
  198. package/dist/server/core/agents/agent.store.d.ts +24 -12
  199. package/dist/server/core/agents/agent.store.d.ts.map +1 -1
  200. package/dist/server/core/agents/agent.store.js +65 -64
  201. package/dist/server/core/agents/agent.store.js.map +1 -1
  202. package/dist/server/core/agents/agent.views.d.ts +29 -0
  203. package/dist/server/core/agents/agent.views.d.ts.map +1 -0
  204. package/dist/server/core/agents/agent.views.js +86 -0
  205. package/dist/server/core/agents/agent.views.js.map +1 -0
  206. package/dist/server/core/agents/discovery.d.ts +12 -0
  207. package/dist/server/core/agents/discovery.d.ts.map +1 -0
  208. package/dist/server/core/agents/discovery.js +39 -0
  209. package/dist/server/core/agents/discovery.js.map +1 -0
  210. package/dist/server/core/agents/index.d.ts +2 -1
  211. package/dist/server/core/agents/index.d.ts.map +1 -1
  212. package/dist/server/core/agents/index.js +2 -1
  213. package/dist/server/core/agents/index.js.map +1 -1
  214. package/dist/server/core/brief/brief.js +1 -1
  215. package/dist/server/core/brief/brief.js.map +1 -1
  216. package/dist/server/core/callers/index.d.ts +1 -1
  217. package/dist/server/core/conversations/availability.d.ts +11 -10
  218. package/dist/server/core/conversations/availability.d.ts.map +1 -1
  219. package/dist/server/core/conversations/availability.js +14 -32
  220. package/dist/server/core/conversations/availability.js.map +1 -1
  221. package/dist/server/core/conversations/chat-settings.d.ts.map +1 -1
  222. package/dist/server/core/conversations/chat-settings.js +5 -3
  223. package/dist/server/core/conversations/chat-settings.js.map +1 -1
  224. package/dist/server/core/conversations/conversation.service.d.ts +3 -5
  225. package/dist/server/core/conversations/conversation.service.d.ts.map +1 -1
  226. package/dist/server/core/conversations/conversation.service.js +161 -221
  227. package/dist/server/core/conversations/conversation.service.js.map +1 -1
  228. package/dist/server/core/conversations/ports.d.ts +3 -17
  229. package/dist/server/core/conversations/ports.d.ts.map +1 -1
  230. package/dist/server/core/reports/report.service.d.ts.map +1 -1
  231. package/dist/server/core/reports/report.service.js +5 -2
  232. package/dist/server/core/reports/report.service.js.map +1 -1
  233. package/dist/server/core/runs/availability.d.ts +18 -7
  234. package/dist/server/core/runs/availability.d.ts.map +1 -1
  235. package/dist/server/core/runs/availability.js +35 -24
  236. package/dist/server/core/runs/availability.js.map +1 -1
  237. package/dist/server/core/runs/claim.d.ts +33 -65
  238. package/dist/server/core/runs/claim.d.ts.map +1 -1
  239. package/dist/server/core/runs/claim.js +566 -307
  240. package/dist/server/core/runs/claim.js.map +1 -1
  241. package/dist/server/core/runs/eligibility.d.ts +51 -0
  242. package/dist/server/core/runs/eligibility.d.ts.map +1 -0
  243. package/dist/server/core/runs/eligibility.js +44 -0
  244. package/dist/server/core/runs/eligibility.js.map +1 -0
  245. package/dist/server/core/runs/execution-view.d.ts +10 -0
  246. package/dist/server/core/runs/execution-view.d.ts.map +1 -0
  247. package/dist/server/core/runs/execution-view.js +25 -0
  248. package/dist/server/core/runs/execution-view.js.map +1 -0
  249. package/dist/server/core/runs/execution.d.ts +13 -0
  250. package/dist/server/core/runs/execution.d.ts.map +1 -0
  251. package/dist/server/core/runs/execution.js +85 -0
  252. package/dist/server/core/runs/execution.js.map +1 -0
  253. package/dist/server/core/runs/extensions.d.ts +59 -4
  254. package/dist/server/core/runs/extensions.d.ts.map +1 -1
  255. package/dist/server/core/runs/extensions.js +45 -9
  256. package/dist/server/core/runs/extensions.js.map +1 -1
  257. package/dist/server/core/runs/git-credentials.d.ts +43 -0
  258. package/dist/server/core/runs/git-credentials.d.ts.map +1 -0
  259. package/dist/server/core/runs/git-credentials.js +129 -0
  260. package/dist/server/core/runs/git-credentials.js.map +1 -0
  261. package/dist/server/core/runs/identity.d.ts +6 -0
  262. package/dist/server/core/runs/identity.d.ts.map +1 -0
  263. package/dist/server/core/runs/identity.js +49 -0
  264. package/dist/server/core/runs/identity.js.map +1 -0
  265. package/dist/server/core/runs/index.d.ts +9 -5
  266. package/dist/server/core/runs/index.d.ts.map +1 -1
  267. package/dist/server/core/runs/index.js +9 -5
  268. package/dist/server/core/runs/index.js.map +1 -1
  269. package/dist/server/core/runs/input-gate.d.ts +34 -0
  270. package/dist/server/core/runs/input-gate.d.ts.map +1 -0
  271. package/dist/server/core/runs/input-gate.js +54 -0
  272. package/dist/server/core/runs/input-gate.js.map +1 -0
  273. package/dist/server/core/runs/lifecycle.d.ts +9 -19
  274. package/dist/server/core/runs/lifecycle.d.ts.map +1 -1
  275. package/dist/server/core/runs/lifecycle.js +76 -34
  276. package/dist/server/core/runs/lifecycle.js.map +1 -1
  277. package/dist/server/core/runs/policy.d.ts +8 -0
  278. package/dist/server/core/runs/policy.d.ts.map +1 -1
  279. package/dist/server/core/runs/policy.js +10 -0
  280. package/dist/server/core/runs/policy.js.map +1 -1
  281. package/dist/server/core/runs/ports.d.ts +84 -28
  282. package/dist/server/core/runs/ports.d.ts.map +1 -1
  283. package/dist/server/core/runs/ports.js +2 -13
  284. package/dist/server/core/runs/ports.js.map +1 -1
  285. package/dist/server/core/runs/preview.d.ts.map +1 -1
  286. package/dist/server/core/runs/preview.js +3 -3
  287. package/dist/server/core/runs/preview.js.map +1 -1
  288. package/dist/server/core/runs/run-requests.d.ts +220 -0
  289. package/dist/server/core/runs/run-requests.d.ts.map +1 -0
  290. package/dist/server/core/runs/run-requests.js +475 -0
  291. package/dist/server/core/runs/run-requests.js.map +1 -0
  292. package/dist/server/core/runs/run.service.d.ts +84 -11
  293. package/dist/server/core/runs/run.service.d.ts.map +1 -1
  294. package/dist/server/core/runs/run.service.js +433 -93
  295. package/dist/server/core/runs/run.service.js.map +1 -1
  296. package/dist/server/core/runs/run.store.d.ts +20 -3
  297. package/dist/server/core/runs/run.store.d.ts.map +1 -1
  298. package/dist/server/core/runs/run.store.js +49 -2
  299. package/dist/server/core/runs/run.store.js.map +1 -1
  300. package/dist/server/core/runs/runner-view.d.ts +6 -4
  301. package/dist/server/core/runs/runner-view.d.ts.map +1 -1
  302. package/dist/server/core/runs/runner-view.js +13 -11
  303. package/dist/server/core/runs/runner-view.js.map +1 -1
  304. package/dist/server/core/runs/selection.d.ts +13 -0
  305. package/dist/server/core/runs/selection.d.ts.map +1 -0
  306. package/dist/server/core/runs/selection.js +21 -0
  307. package/dist/server/core/runs/selection.js.map +1 -0
  308. package/dist/server/core/runs/sweeper.d.ts.map +1 -1
  309. package/dist/server/core/runs/sweeper.js +54 -10
  310. package/dist/server/core/runs/sweeper.js.map +1 -1
  311. package/dist/server/core/runs/transitions.d.ts +1 -1
  312. package/dist/server/core/runs/transitions.d.ts.map +1 -1
  313. package/dist/server/core/runs/transitions.js +69 -5
  314. package/dist/server/core/runs/transitions.js.map +1 -1
  315. package/dist/server/core/runs/workload.d.ts +3 -3
  316. package/dist/server/core/runs/workload.d.ts.map +1 -1
  317. package/dist/server/core/runs/workload.js +154 -45
  318. package/dist/server/core/runs/workload.js.map +1 -1
  319. package/dist/server/core/variables/index.d.ts +1 -1
  320. package/dist/server/core/variables/index.d.ts.map +1 -1
  321. package/dist/server/core/variables/index.js +1 -1
  322. package/dist/server/core/variables/index.js.map +1 -1
  323. package/dist/server/core/variables/variable.service.d.ts +38 -6
  324. package/dist/server/core/variables/variable.service.d.ts.map +1 -1
  325. package/dist/server/core/variables/variable.service.js +201 -30
  326. package/dist/server/core/variables/variable.service.js.map +1 -1
  327. package/dist/server/distribution/dist.service.d.ts +27 -5
  328. package/dist/server/distribution/dist.service.d.ts.map +1 -1
  329. package/dist/server/distribution/dist.service.js +41 -5
  330. package/dist/server/distribution/dist.service.js.map +1 -1
  331. package/dist/server/distribution/download-tokens.d.ts +1 -1
  332. package/dist/server/distribution/download-tokens.d.ts.map +1 -1
  333. package/dist/server/distribution/download-tokens.js +7 -4
  334. package/dist/server/distribution/download-tokens.js.map +1 -1
  335. package/dist/server/distribution/index.d.ts +11 -3
  336. package/dist/server/distribution/index.d.ts.map +1 -1
  337. package/dist/server/distribution/index.js +31 -8
  338. package/dist/server/distribution/index.js.map +1 -1
  339. package/dist/server/jobs/index.d.ts +1 -1
  340. package/dist/server/jobs/index.d.ts.map +1 -1
  341. package/dist/server/jobs/index.js +1 -1
  342. package/dist/server/jobs/index.js.map +1 -1
  343. package/dist/server/jobs/job.service.d.ts +3 -1
  344. package/dist/server/jobs/job.service.d.ts.map +1 -1
  345. package/dist/server/jobs/job.service.js +11 -3
  346. package/dist/server/jobs/job.service.js.map +1 -1
  347. package/dist/server/jobs/spec.d.ts +4 -0
  348. package/dist/server/jobs/spec.d.ts.map +1 -1
  349. package/dist/server/jobs/spec.js +6 -0
  350. package/dist/server/jobs/spec.js.map +1 -1
  351. package/dist/server/kernel/errors.d.ts +1 -1
  352. package/dist/server/kernel/errors.d.ts.map +1 -1
  353. package/dist/server/kernel/errors.js +1 -0
  354. package/dist/server/kernel/errors.js.map +1 -1
  355. package/dist/server/kernel/events.d.ts +34 -9
  356. package/dist/server/kernel/events.d.ts.map +1 -1
  357. package/dist/server/kernel/events.js.map +1 -1
  358. package/dist/server/kernel/redaction.d.ts +2 -0
  359. package/dist/server/kernel/redaction.d.ts.map +1 -1
  360. package/dist/server/kernel/redaction.js +17 -0
  361. package/dist/server/kernel/redaction.js.map +1 -1
  362. package/dist/server/online/index.d.ts +0 -5
  363. package/dist/server/online/index.d.ts.map +1 -1
  364. package/dist/server/online/index.js +0 -5
  365. package/dist/server/online/index.js.map +1 -1
  366. package/dist/server/online/routes.d.ts.map +1 -1
  367. package/dist/server/online/routes.js +6 -35
  368. package/dist/server/online/routes.js.map +1 -1
  369. package/dist/server/providers/agents.d.ts +4 -25
  370. package/dist/server/providers/agents.d.ts.map +1 -1
  371. package/dist/server/providers/agents.js +8 -75
  372. package/dist/server/providers/agents.js.map +1 -1
  373. package/dist/server/routes/admin.d.ts.map +1 -1
  374. package/dist/server/routes/admin.js +140 -201
  375. package/dist/server/routes/admin.js.map +1 -1
  376. package/dist/server/routes/chat.d.ts.map +1 -1
  377. package/dist/server/routes/chat.js +12 -70
  378. package/dist/server/routes/chat.js.map +1 -1
  379. package/dist/server/routes/index.d.ts.map +1 -1
  380. package/dist/server/routes/index.js +11 -1
  381. package/dist/server/routes/index.js.map +1 -1
  382. package/dist/server/routes/roster.d.ts.map +1 -1
  383. package/dist/server/routes/roster.js +6 -21
  384. package/dist/server/routes/roster.js.map +1 -1
  385. package/dist/server/routes/run-requests.d.ts +6 -0
  386. package/dist/server/routes/run-requests.d.ts.map +1 -0
  387. package/dist/server/routes/run-requests.js +216 -0
  388. package/dist/server/routes/run-requests.js.map +1 -0
  389. package/dist/server/routes/runners/admin.d.ts +9 -1
  390. package/dist/server/routes/runners/admin.d.ts.map +1 -1
  391. package/dist/server/routes/runners/admin.js +62 -24
  392. package/dist/server/routes/runners/admin.js.map +1 -1
  393. package/dist/server/routes/runners/dist.d.ts +5 -1
  394. package/dist/server/routes/runners/dist.d.ts.map +1 -1
  395. package/dist/server/routes/runners/dist.js +36 -9
  396. package/dist/server/routes/runners/dist.js.map +1 -1
  397. package/dist/server/routes/runners/install.d.ts.map +1 -1
  398. package/dist/server/routes/runners/install.js +98 -15
  399. package/dist/server/routes/runners/install.js.map +1 -1
  400. package/dist/server/routes/runners/runner.d.ts.map +1 -1
  401. package/dist/server/routes/runners/runner.js +25 -7
  402. package/dist/server/routes/runners/runner.js.map +1 -1
  403. package/dist/server/routes/runners/runs.d.ts +1 -1
  404. package/dist/server/routes/runners/runs.d.ts.map +1 -1
  405. package/dist/server/routes/runners/runs.js +23 -3
  406. package/dist/server/routes/runners/runs.js.map +1 -1
  407. package/dist/server/routes/schemas.d.ts +37 -8
  408. package/dist/server/routes/schemas.d.ts.map +1 -1
  409. package/dist/server/routes/schemas.js +367 -82
  410. package/dist/server/routes/schemas.js.map +1 -1
  411. package/dist/server/runners/index.d.ts +1 -0
  412. package/dist/server/runners/index.d.ts.map +1 -1
  413. package/dist/server/runners/index.js +1 -0
  414. package/dist/server/runners/index.js.map +1 -1
  415. package/dist/server/runners/runner.service.d.ts +22 -8
  416. package/dist/server/runners/runner.service.d.ts.map +1 -1
  417. package/dist/server/runners/runner.service.js +112 -14
  418. package/dist/server/runners/runner.service.js.map +1 -1
  419. package/dist/server/runners/runner.store.d.ts +10 -1
  420. package/dist/server/runners/runner.store.d.ts.map +1 -1
  421. package/dist/server/runners/runner.store.js +117 -4
  422. package/dist/server/runners/runner.store.js.map +1 -1
  423. package/dist/server/runners/sweeper.d.ts +5 -0
  424. package/dist/server/runners/sweeper.d.ts.map +1 -1
  425. package/dist/server/runners/sweeper.js +4 -2
  426. package/dist/server/runners/sweeper.js.map +1 -1
  427. package/dist/server/runners/workspaces.d.ts +33 -0
  428. package/dist/server/runners/workspaces.d.ts.map +1 -0
  429. package/dist/server/runners/workspaces.js +248 -0
  430. package/dist/server/runners/workspaces.js.map +1 -0
  431. package/dist/server/testing.d.ts +0 -2
  432. package/dist/server/testing.d.ts.map +1 -1
  433. package/dist/server/testing.js +1 -4
  434. package/dist/server/testing.js.map +1 -1
  435. package/dist/server/tokens.d.ts +12 -9
  436. package/dist/server/tokens.d.ts.map +1 -1
  437. package/dist/server/tokens.js +6 -2
  438. package/dist/server/tokens.js.map +1 -1
  439. package/dist/shared/access.d.ts +2 -6
  440. package/dist/shared/access.d.ts.map +1 -1
  441. package/dist/shared/access.js +2 -6
  442. package/dist/shared/access.js.map +1 -1
  443. package/dist/shared/agents.d.ts +128 -165
  444. package/dist/shared/agents.d.ts.map +1 -1
  445. package/dist/shared/agents.js +46 -97
  446. package/dist/shared/agents.js.map +1 -1
  447. package/dist/shared/conversations.d.ts +43 -89
  448. package/dist/shared/conversations.d.ts.map +1 -1
  449. package/dist/shared/conversations.js +5 -24
  450. package/dist/shared/conversations.js.map +1 -1
  451. package/dist/shared/model-catalog.d.ts +48 -0
  452. package/dist/shared/model-catalog.d.ts.map +1 -0
  453. package/dist/shared/model-catalog.js +148 -0
  454. package/dist/shared/model-catalog.js.map +1 -0
  455. package/dist/shared/models.js +1 -1
  456. package/dist/shared/models.js.map +1 -1
  457. package/dist/shared/runners.d.ts +107 -17
  458. package/dist/shared/runners.d.ts.map +1 -1
  459. package/dist/shared/runners.js +49 -7
  460. package/dist/shared/runners.js.map +1 -1
  461. package/dist/shared/runs.d.ts +203 -1
  462. package/dist/shared/runs.d.ts.map +1 -1
  463. package/dist/shared/runs.js +24 -0
  464. package/dist/shared/runs.js.map +1 -1
  465. package/dist/shared/variables.d.ts +22 -0
  466. package/dist/shared/variables.d.ts.map +1 -1
  467. package/dist/shared/variables.js +9 -1
  468. package/dist/shared/variables.js.map +1 -1
  469. package/package.json +24 -26
  470. package/skills/nocobase-app-plugin-agents/SKILL.md +8 -7
  471. package/skills/nocobase-app-plugin-agents/references/agents.md +30 -0
  472. package/skills/nocobase-app-plugin-agents/references/distribution.md +21 -4
  473. package/skills/nocobase-app-plugin-agents/references/extension-points.md +30 -20
  474. package/skills/nocobase-app-plugin-agents/references/model-services.md +17 -0
  475. package/skills/nocobase-app-plugin-agents/references/runners.md +15 -1
  476. package/skills/nocobase-app-plugin-agents/references/setup-and-config.md +4 -7
  477. package/skills/nocobase-app-plugin-agents/references/variables-skills-usage.md +4 -4
  478. package/skills/nocobase-app-plugin-agents/references/verification-and-troubleshooting.md +33 -32
  479. package/dist/client/chat/settings-section.d.ts +0 -5
  480. package/dist/client/chat/settings-section.d.ts.map +0 -1
  481. package/dist/client/chat/settings-section.js +0 -76
  482. package/dist/client/chat/settings-section.js.map +0 -1
  483. package/dist/client/components/agent-fields.d.ts +0 -45
  484. package/dist/client/components/agent-fields.d.ts.map +0 -1
  485. package/dist/client/components/agent-fields.js +0 -83
  486. package/dist/client/components/agent-fields.js.map +0 -1
  487. package/dist/client/components/agent-type.d.ts +0 -32
  488. package/dist/client/components/agent-type.d.ts.map +0 -1
  489. package/dist/client/components/agent-type.js +0 -80
  490. package/dist/client/components/agent-type.js.map +0 -1
  491. package/dist/client/components/model-entries.d.ts +0 -35
  492. package/dist/client/components/model-entries.d.ts.map +0 -1
  493. package/dist/client/components/model-entries.js +0 -82
  494. package/dist/client/components/model-entries.js.map +0 -1
  495. package/dist/client/hooks/use-agent-save.d.ts +0 -9
  496. package/dist/client/hooks/use-agent-save.d.ts.map +0 -1
  497. package/dist/client/hooks/use-agent-save.js +0 -40
  498. package/dist/client/hooks/use-agent-save.js.map +0 -1
  499. package/dist/client/hooks/use-model-catalog.d.ts +0 -9
  500. package/dist/client/hooks/use-model-catalog.d.ts.map +0 -1
  501. package/dist/client/hooks/use-model-catalog.js +0 -27
  502. package/dist/client/hooks/use-model-catalog.js.map +0 -1
  503. package/dist/client/lib/tool-policy.d.ts +0 -5
  504. package/dist/client/lib/tool-policy.d.ts.map +0 -1
  505. package/dist/client/lib/tool-policy.js +0 -10
  506. package/dist/client/lib/tool-policy.js.map +0 -1
  507. package/dist/client/online/default-model.d.ts +0 -5
  508. package/dist/client/online/default-model.d.ts.map +0 -1
  509. package/dist/client/online/default-model.js +0 -65
  510. package/dist/client/online/default-model.js.map +0 -1
  511. package/dist/client/pages/agents/agent-model.d.ts +0 -73
  512. package/dist/client/pages/agents/agent-model.d.ts.map +0 -1
  513. package/dist/client/pages/agents/agent-model.js +0 -172
  514. package/dist/client/pages/agents/agent-model.js.map +0 -1
  515. package/dist/client/pages/agents/detail/brief-preview.d.ts +0 -7
  516. package/dist/client/pages/agents/detail/brief-preview.d.ts.map +0 -1
  517. package/dist/client/pages/agents/detail/brief-preview.js +0 -43
  518. package/dist/client/pages/agents/detail/brief-preview.js.map +0 -1
  519. package/dist/client/pages/agents/detail/history.d.ts +0 -11
  520. package/dist/client/pages/agents/detail/history.d.ts.map +0 -1
  521. package/dist/client/pages/agents/detail/history.js +0 -149
  522. package/dist/client/pages/agents/detail/history.js.map +0 -1
  523. package/dist/client/pages/agents/detail/index.d.ts +0 -3
  524. package/dist/client/pages/agents/detail/index.d.ts.map +0 -1
  525. package/dist/client/pages/agents/detail/index.js +0 -241
  526. package/dist/client/pages/agents/detail/index.js.map +0 -1
  527. package/dist/client/pages/agents/detail/sections.d.ts +0 -22
  528. package/dist/client/pages/agents/detail/sections.d.ts.map +0 -1
  529. package/dist/client/pages/agents/detail/sections.js +0 -311
  530. package/dist/client/pages/agents/detail/sections.js.map +0 -1
  531. package/dist/client/pages/agents/detail/tab-draft.d.ts +0 -43
  532. package/dist/client/pages/agents/detail/tab-draft.d.ts.map +0 -1
  533. package/dist/client/pages/agents/detail/tab-draft.js +0 -115
  534. package/dist/client/pages/agents/detail/tab-draft.js.map +0 -1
  535. package/dist/client/pages/agents/detail/unsaved-bar.d.ts +0 -13
  536. package/dist/client/pages/agents/detail/unsaved-bar.d.ts.map +0 -1
  537. package/dist/client/pages/agents/detail/unsaved-bar.js +0 -21
  538. package/dist/client/pages/agents/detail/unsaved-bar.js.map +0 -1
  539. package/dist/client/pages/agents/new.d.ts +0 -3
  540. package/dist/client/pages/agents/new.d.ts.map +0 -1
  541. package/dist/client/pages/agents/new.js +0 -149
  542. package/dist/client/pages/agents/new.js.map +0 -1
  543. package/dist/client/pages/agents/preset-picker.d.ts +0 -8
  544. package/dist/client/pages/agents/preset-picker.d.ts.map +0 -1
  545. package/dist/client/pages/agents/preset-picker.js +0 -41
  546. package/dist/client/pages/agents/preset-picker.js.map +0 -1
  547. package/dist/server/core/consultations/consultation.service.d.ts +0 -59
  548. package/dist/server/core/consultations/consultation.service.d.ts.map +0 -1
  549. package/dist/server/core/consultations/consultation.service.js +0 -195
  550. package/dist/server/core/consultations/consultation.service.js.map +0 -1
  551. package/dist/server/core/consultations/index.d.ts +0 -3
  552. package/dist/server/core/consultations/index.d.ts.map +0 -1
  553. package/dist/server/core/consultations/index.js +0 -3
  554. package/dist/server/core/consultations/index.js.map +0 -1
  555. package/dist/server/core/consultations/prompt.d.ts +0 -41
  556. package/dist/server/core/consultations/prompt.d.ts.map +0 -1
  557. package/dist/server/core/consultations/prompt.js +0 -64
  558. package/dist/server/core/consultations/prompt.js.map +0 -1
  559. package/dist/server/core/presets/index.d.ts +0 -19
  560. package/dist/server/core/presets/index.d.ts.map +0 -1
  561. package/dist/server/core/presets/index.js +0 -28
  562. package/dist/server/core/presets/index.js.map +0 -1
  563. package/dist/server/online/cli-command.d.ts +0 -20
  564. package/dist/server/online/cli-command.d.ts.map +0 -1
  565. package/dist/server/online/cli-command.js +0 -345
  566. package/dist/server/online/cli-command.js.map +0 -1
  567. package/dist/server/online/consult-tool.d.ts +0 -54
  568. package/dist/server/online/consult-tool.d.ts.map +0 -1
  569. package/dist/server/online/consult-tool.js +0 -177
  570. package/dist/server/online/consult-tool.js.map +0 -1
  571. package/dist/server/online/executor.d.ts +0 -83
  572. package/dist/server/online/executor.d.ts.map +0 -1
  573. package/dist/server/online/executor.js +0 -714
  574. package/dist/server/online/executor.js.map +0 -1
  575. package/dist/server/online/sandbox.d.ts +0 -32
  576. package/dist/server/online/sandbox.d.ts.map +0 -1
  577. package/dist/server/online/sandbox.js +0 -246
  578. package/dist/server/online/sandbox.js.map +0 -1
  579. package/dist/server/online/scripted.d.ts +0 -12
  580. package/dist/server/online/scripted.d.ts.map +0 -1
  581. package/dist/server/online/scripted.js +0 -176
  582. package/dist/server/online/scripted.js.map +0 -1
  583. package/dist/server/online/tools.d.ts +0 -17
  584. package/dist/server/online/tools.d.ts.map +0 -1
  585. package/dist/server/online/tools.js +0 -31
  586. package/dist/server/online/tools.js.map +0 -1
  587. package/dist/server/vendor/THIRD_PARTY_LICENSES.txt +0 -782
  588. package/dist/server/vendor/just-bash.d.ts +0 -83
  589. package/dist/server/vendor/just-bash.js +0 -2102
  590. package/dist/shared/presets.d.ts +0 -30
  591. package/dist/shared/presets.d.ts.map +0 -1
  592. package/dist/shared/presets.js +0 -2
  593. package/dist/shared/presets.js.map +0 -1
  594. package/skills/nocobase-app-plugin-agents/references/online-agents.md +0 -31
@@ -1,12 +1,13 @@
1
- import { onlineEntriesOrDefault, sameEntry, } from '../../../shared/agents.js';
2
- import { CONVERSATION_HISTORY_IN_PROMPT, CONVERSATION_PAGE_DEFAULT, CONVERSATION_PAGE_MAX, CONVERSATION_SOURCE_PATTERN, CONVERSATION_SUBJECT, CONVERSATION_TITLE_AGENT_MAX, CONVERSATION_TITLE_AUTO_CHARS, CONVERSATION_TITLE_MAX, MESSAGE_CONTENT_MAX, MESSAGE_PAGE_DEFAULT, MESSAGE_PAGE_MAX, chatModelChoices, } from '../../../shared/conversations.js';
1
+ import { CONVERSATION_HISTORY_IN_PROMPT, CONVERSATION_PAGE_DEFAULT, CONVERSATION_PAGE_MAX, CONVERSATION_SOURCE_PATTERN, CONVERSATION_SUBJECT, CONVERSATION_TITLE_AGENT_MAX, CONVERSATION_TITLE_AUTO_CHARS, CONVERSATION_TITLE_MAX, MESSAGE_CONTENT_MAX, MESSAGE_PAGE_DEFAULT, MESSAGE_PAGE_MAX, } from '../../../shared/conversations.js';
2
+ import { runnerTakesAgent } from '../../../shared/runners.js';
3
3
  import { CONSULT_MAX_DEPTH } from '../../../shared/runs.js';
4
4
  import { ACCESS_NAMESPACE } from '../../../shared/access.js';
5
5
  import { sampleValue } from '../../../shared/briefs.js';
6
6
  import { forbidden, invalid, notFound, ProtocolError, } from '../../kernel/errors.js';
7
7
  import { asJson } from '../../kernel/values.js';
8
8
  import { findAgent } from '../agents/index.js';
9
- import { eventsAfter, hasSession, lastSummary, onlineEntryOf, openRunsOnEach, } from '../runs/index.js';
9
+ import { agentNamesOf } from '../agents/agent.store.js';
10
+ import { eventsAfter, hasSession, lastSummary, openRunsOnEach, queuedRun, } from '../runs/index.js';
10
11
  import { findRunRecord, toRun } from '../runs/run.store.js';
11
12
  import { readAttachmentIds, storedAttachments, } from './attachments.js';
12
13
  import { availabilityOf, wakeable } from './availability.js';
@@ -76,6 +77,10 @@ function noticeText(notice, names) {
76
77
  switch (notice.code) {
77
78
  case 'switchedToDefault':
78
79
  return `This conversation now uses ${name(notice.agentId)}, the default agent, until you switch back to ${name(notice.fromAgentId)}.`;
80
+ case 'switchedToOnline':
81
+ return `${name(notice.fromAgentId)} has no runner for you now, so ${name(notice.agentId)} answers until you switch back.`;
82
+ case 'onlineFallbackUnavailable':
83
+ return `The online fallback agent cannot answer (${notice.reason}). This conversation stays with ${name(notice.fromAgentId)} while it waits for a runner.`;
79
84
  case 'switchedBack':
80
85
  return `This conversation is back with ${name(notice.agentId)}.`;
81
86
  case 'runFailed':
@@ -125,7 +130,7 @@ export function createConversationService(deps) {
125
130
  name: agent?.name ?? null,
126
131
  nameText: agent?.nameText ?? null,
127
132
  avatar: agent?.avatar ?? null,
128
- archived: Boolean(agent?.archivedAt),
133
+ archived: agent ? agent.status !== 'enabled' : false,
129
134
  };
130
135
  }
131
136
  function runRef(runs) {
@@ -134,29 +139,7 @@ export function createConversationService(deps) {
134
139
  ? { id: run.id, status: run.status, acceptsInput: run.acceptsInput }
135
140
  : null;
136
141
  }
137
- /** The entry the owner chose for the conversation, if any. */
138
- function chosenModel(record) {
139
- return record.modelService && record.model
140
- ? { modelService: record.modelService, model: record.model }
141
- : undefined;
142
- }
143
- /**
144
- * The entry an online conversation answers with now (the system default chat model, `defaultModel`, for an agent
145
- * that lists none); null for a runner one or a missing agent.
146
- */
147
- function modelOf(record, agent, defaultModel) {
148
- if (record.mode !== 'online' || !agent)
149
- return null;
150
- return onlineEntryOf(agent, chosenModel(record), defaultModel);
151
- }
152
- async function summaries(conn, records,
153
- /** The system default chat model, when the caller has read it; read here when an online one needs it. */
154
- known) {
155
- const defaultModel = known !== undefined
156
- ? known
157
- : records.some((record) => record.mode === 'online')
158
- ? ((await deps.models.catalog()).defaultModel ?? null)
159
- : null;
142
+ async function summaries(conn, records) {
160
143
  const agents = new Map();
161
144
  for (const record of records)
162
145
  for (const id of [record.agentId, record.fallbackFromAgentId])
@@ -174,7 +157,6 @@ export function createConversationService(deps) {
174
157
  fallbackFrom: record.fallbackFromAgentId
175
158
  ? agentRef(record.fallbackFromAgentId, agents.get(record.fallbackFromAgentId) ?? null)
176
159
  : null,
177
- model: modelOf(record, agents.get(record.agentId) ?? null, defaultModel),
178
160
  read: Boolean(record.read),
179
161
  lastMessageAt: record.lastMessageAt,
180
162
  archivedAt: record.archivedAt,
@@ -190,25 +172,49 @@ export function createConversationService(deps) {
190
172
  const agent = await findAgent(conn, defaultAgentId);
191
173
  return wakeable(agent, userId, deps.agents.mayInvoke) ? agent : null;
192
174
  }
193
- async function detailOf(conn, record, runners) {
194
- const catalog = await deps.models.catalog();
195
- const [summary] = await summaries(conn, [record], catalog.defaultModel);
175
+ /** Reads the same features and variable restrictions as claim, before any write transaction. */
176
+ async function availabilityFor(conn, agent, userId, runners) {
177
+ if (!wakeable(agent, userId, deps.agents.mayInvoke))
178
+ return availabilityOf(agent, userId, deps.agents.mayInvoke, 0);
179
+ const online = runners ??
180
+ (await deps.runners.list()).filter((runner) => runner.status === 'online');
181
+ const eligible = await deps.eligibility.runnersFor(conn, agent, {
182
+ actorUserId: userId,
183
+ runners: online,
184
+ });
185
+ return availabilityOf(agent, userId, deps.agents.mayInvoke, eligible.length, online.some((runner) => runnerTakesAgent(runner, agent)));
186
+ }
187
+ async function canAnswer(conn, agent, userId) {
188
+ if (!wakeable(agent, userId, deps.agents.mayInvoke))
189
+ return false;
190
+ return deps.eligibility.canClaim(conn, agent, { actorUserId: userId });
191
+ }
192
+ /**
193
+ * The agent `fallback` switches the conversation to: the system default when it can answer. Null while the
194
+ * conversation already uses another agent in place of its own.
195
+ */
196
+ async function fallbackTarget(conn, record) {
197
+ if (record.fallbackFromAgentId)
198
+ return null;
199
+ const system = await systemDefault(conn, record.userId);
200
+ if (system &&
201
+ system.id !== record.agentId &&
202
+ (await canAnswer(conn, system, record.userId)))
203
+ return system;
204
+ return null;
205
+ }
206
+ async function detailOf(conn, record) {
207
+ const [summary] = await summaries(conn, [record]);
196
208
  const agent = await findAgent(conn, record.agentId);
197
209
  const fallbackFrom = record.fallbackFromAgentId
198
210
  ? await findAgent(conn, record.fallbackFromAgentId)
199
211
  : null;
200
- const system = await systemDefault(conn, record.userId);
212
+ const target = await fallbackTarget(conn, record);
201
213
  return {
202
214
  ...summary,
203
- availability: availabilityOf(agent, record.userId, deps.agents.mayInvoke, runners ?? (await deps.runners.list()), catalog, chosenModel(record)),
204
- models: record.mode === 'online' && agent
205
- ? chatModelChoices(onlineEntriesOrDefault(agent, catalog.defaultModel ?? null), catalog)
206
- : [],
207
- canFallback: Boolean(system &&
208
- !record.fallbackFromAgentId &&
209
- system.id !== record.agentId &&
210
- system.type === record.mode),
211
- canRestore: wakeable(fallbackFrom, record.userId, deps.agents.mayInvoke),
215
+ availability: await availabilityFor(conn, agent, record.userId),
216
+ canFallback: Boolean(target),
217
+ canRestore: await canAnswer(conn, fallbackFrom, record.userId),
212
218
  };
213
219
  }
214
220
  async function detail(userId, id) {
@@ -232,9 +238,13 @@ export function createConversationService(deps) {
232
238
  return appended;
233
239
  }
234
240
  async function notice(unit, record, value, runId = null) {
235
- const agentIds = value.code === 'switchedToDefault' || value.code === 'switchedBack'
241
+ const agentIds = value.code === 'switchedToDefault' ||
242
+ value.code === 'switchedToOnline' ||
243
+ value.code === 'switchedBack'
236
244
  ? [value.agentId, value.fromAgentId]
237
- : [];
245
+ : value.code === 'onlineFallbackUnavailable'
246
+ ? [value.fromAgentId]
247
+ : [];
238
248
  const names = new Map();
239
249
  for (const id of agentIds) {
240
250
  const agent = await findAgent(unit.conn, id);
@@ -272,7 +282,7 @@ export function createConversationService(deps) {
272
282
  let result = null;
273
283
  for (const message of messages) {
274
284
  const files = storedAttachments(message.attachments);
275
- const enqueued = await deps.runs.enqueue({
285
+ const enqueued = queuedRun(await deps.runs.enqueue({
276
286
  agentId: agent.id,
277
287
  subject: subjectOf(record.id),
278
288
  threadScope: threadScopeOf(record),
@@ -287,28 +297,30 @@ export function createConversationService(deps) {
287
297
  conversationId: record.id,
288
298
  messageId: message.id,
289
299
  seq: Number(message.seq),
290
- // An online agent's executor shows the images among them to its model.
291
300
  ...(files.length > 0
292
301
  ? { attachmentIds: files.map((file) => file.id) }
293
302
  : {}),
294
303
  },
295
304
  },
296
- }, unit);
305
+ }, unit));
297
306
  await updateMessageRun(unit.conn, message, enqueued.runId, { inputId: enqueued.inputId }, now());
298
307
  result = { id: enqueued.runId, outcome: enqueued.outcome };
299
308
  }
300
309
  return result;
301
310
  }
302
311
  /**
303
- * Moves the conversation to `agentId`: its queued work is withdrawn, the thread moves on (a new session), and the
312
+ * Moves the conversation to `agent`: its queued work is withdrawn, the thread moves on (a new session), and the
304
313
  * messages nobody answered go to the new agent.
305
314
  */
306
- async function rebind(unit, record, agentId, fallbackFromAgentId, value) {
315
+ async function rebind(unit, record, agent, fallbackFromAgentId, value) {
307
316
  const withdrawn = await deps.runs.withdrawQueued({ subject: subjectOf(record.id), byUserId: record.userId }, unit);
308
317
  await conversationsRepo(unit.conn).updateMany({
309
318
  filter: { id: record.id },
310
319
  values: {
311
- agentId,
320
+ agentId: agent.id,
321
+ mode: 'runner',
322
+ modelService: null,
323
+ model: null,
312
324
  fallbackFromAgentId,
313
325
  thread: Number(record.thread) + 1,
314
326
  updatedAt: now(),
@@ -365,13 +377,6 @@ export function createConversationService(deps) {
365
377
  agentId: run.agentId,
366
378
  runEventSeq: Number(event.seq),
367
379
  };
368
- // An online agent's draft of this text becomes the final message, where the person watched it grow.
369
- const draft = await findDraft(unit.conn, record.id, run.id);
370
- if (draft) {
371
- await rewriteMessage(unit.conn, draft, { text, metadata, runEventSeq: Number(event.seq) }, now());
372
- changed(unit, record, Number(draft.seq));
373
- continue;
374
- }
375
380
  await append(unit, record, {
376
381
  role: 'assistant',
377
382
  text,
@@ -394,7 +399,7 @@ export function createConversationService(deps) {
394
399
  // The run subject
395
400
  // -------------------------------------------------------------------------------------------------------------------
396
401
  /** A run's assembly in `conversation`, as its owner (`ownerName`) left it: `history` the messages before its inputs. */
397
- async function conversationAssembly(conn, claim, conversation, ownerName, history, previousSummary, chosen) {
402
+ async function conversationAssembly(conn, claim, conversation, ownerName, history, previousSummary) {
398
403
  const key = conversationKey(conversation.id);
399
404
  const added = await Promise.all(rules.map((source) => source(conn, {
400
405
  conversation: {
@@ -407,7 +412,6 @@ export function createConversationService(deps) {
407
412
  agent: claim.agent,
408
413
  ownerName,
409
414
  cli: claim.cli,
410
- dialect: claim.dialect,
411
415
  })));
412
416
  return {
413
417
  subject: {
@@ -422,7 +426,6 @@ export function createConversationService(deps) {
422
426
  key,
423
427
  cli: claim.cli,
424
428
  appName: claim.appName,
425
- dialect: claim.dialect,
426
429
  rules: added.flatMap((lines) => lines.rules ?? []),
427
430
  sections: added.flatMap((lines) => lines.sections ?? []),
428
431
  }),
@@ -451,14 +454,11 @@ export function createConversationService(deps) {
451
454
  },
452
455
  dirs: [],
453
456
  scopes: [],
454
- ...(chosen ? { model: chosen } : {}),
455
457
  };
456
458
  }
457
459
  const binding = {
458
460
  kind: CONVERSATION_SUBJECT,
459
461
  private: true,
460
- // A conversation needs no working directory: online agents answer in it as well as runner agents.
461
- agentTypes: ['online', 'runner'],
462
462
  title: { key: 'subjects.conversation', ns: ACCESS_NAMESPACE },
463
463
  triggers: CONVERSATION_TRIGGERS,
464
464
  // "Preview full prompt": a new conversation of the previewer's, with one message, both made up.
@@ -481,7 +481,7 @@ export function createConversationService(deps) {
481
481
  title: sampleValue('This week'),
482
482
  source: 'panel',
483
483
  createdAt: claim.run.createdAt,
484
- }, await nameOf(conn, claim.run.actorUserId ?? ''), [], null, null);
484
+ }, await nameOf(conn, claim.run.actorUserId ?? ''), [], null);
485
485
  },
486
486
  },
487
487
  context: {
@@ -542,7 +542,7 @@ export function createConversationService(deps) {
542
542
  subjectId: record.id,
543
543
  }, claim.run.id)
544
544
  : null;
545
- return conversationAssembly(conn, claim, { ...refOf(record), createdAt: record.createdAt }, ownerName, history, previousSummary, chosenModel(record) ?? null);
545
+ return conversationAssembly(conn, claim, { ...refOf(record), createdAt: record.createdAt }, ownerName, history, previousSummary);
546
546
  },
547
547
  },
548
548
  sink: {
@@ -740,17 +740,8 @@ export function createConversationService(deps) {
740
740
  };
741
741
  },
742
742
  async create(userId, request) {
743
- const wanted = request.model ?? null;
744
- // Read before the transaction, which a read on another connection would wait for.
745
- const fallback = wanted
746
- ? ((await deps.models.catalog()).defaultModel ?? null)
747
- : null;
748
743
  const id = await tx.run(async (unit) => {
749
744
  const agent = await pickAgent(unit.conn, userId, request.agentId);
750
- if (wanted &&
751
- (agent.type !== 'online' ||
752
- !onlineEntriesOrDefault(agent, fallback).some((entry) => sameEntry(entry, wanted))))
753
- throw invalid(`The agent does not list the model ${wanted.modelService} · ${wanted.model}.`, { reason: 'MODEL_NOT_LISTED' });
754
745
  const title = request.title === undefined
755
746
  ? null
756
747
  : titleFor(request.title, CONVERSATION_TITLE_MAX);
@@ -764,10 +755,10 @@ export function createConversationService(deps) {
764
755
  id: conversationId,
765
756
  userId,
766
757
  agentId: agent.id,
767
- mode: agent.type,
758
+ mode: 'runner',
768
759
  fallbackFromAgentId: null,
769
- modelService: wanted?.modelService ?? null,
770
- model: wanted?.model ?? null,
760
+ modelService: null,
761
+ model: null,
771
762
  title,
772
763
  titleSource: title ? 'user' : 'auto',
773
764
  category: 'chat',
@@ -791,10 +782,6 @@ export function createConversationService(deps) {
791
782
  },
792
783
  get: detail,
793
784
  async update(userId, id, patch) {
794
- // Read before the transaction, which a read on another connection would wait for.
795
- const fallback = patch.model !== undefined && patch.model !== null
796
- ? ((await deps.models.catalog()).defaultModel ?? null)
797
- : null;
798
785
  await tx.run(async (unit) => {
799
786
  const record = await lockOwned(unit, userId, id);
800
787
  const values = {};
@@ -806,18 +793,6 @@ export function createConversationService(deps) {
806
793
  values.archivedAt = patch.archived
807
794
  ? (record.archivedAt ?? now())
808
795
  : null;
809
- if (patch.model !== undefined) {
810
- const wanted = patch.model;
811
- if (wanted !== null) {
812
- const agent = await findAgent(unit.conn, record.agentId);
813
- if (record.mode !== 'online' ||
814
- !agent ||
815
- !onlineEntriesOrDefault(agent, fallback).some((entry) => sameEntry(entry, wanted)))
816
- throw invalid(`The agent does not list the model ${wanted.modelService} · ${wanted.model}.`, { reason: 'MODEL_NOT_LISTED' });
817
- }
818
- values.modelService = wanted?.modelService ?? null;
819
- values.model = wanted?.model ?? null;
820
- }
821
796
  if (Object.keys(values).length === 0)
822
797
  return;
823
798
  await conversationsRepo(unit.conn).updateMany({
@@ -861,8 +836,51 @@ export function createConversationService(deps) {
861
836
  hasMore = newest.length > limit;
862
837
  rows = newest.slice(0, limit).reverse();
863
838
  }
839
+ const items = rows.map((row) => viewOf(row));
840
+ const consultationRuns = items.flatMap((item) => item.metadata?.notice?.code === 'consultation' &&
841
+ !item.metadata?.notice.agentId &&
842
+ item.metadata?.notice.runId
843
+ ? [item.metadata?.notice.runId]
844
+ : []);
845
+ const consultedRuns = consultationRuns.length
846
+ ? await conn.query
847
+ .selectFrom('agRuns')
848
+ .select(['id', 'agentId'])
849
+ .where('id', 'in', consultationRuns)
850
+ .execute()
851
+ : [];
852
+ const runAgents = new Map(consultedRuns.map((run) => [String(run.id), String(run.agentId)]));
853
+ const ids = items.flatMap((item) => item.metadata?.notice?.code === 'consultation'
854
+ ? [
855
+ item.metadata?.notice.agentId ??
856
+ (item.metadata?.notice.runId
857
+ ? runAgents.get(item.metadata?.notice.runId)
858
+ : undefined),
859
+ ].filter((id) => Boolean(id))
860
+ : []);
861
+ const names = await agentNamesOf(conn, ids);
864
862
  return {
865
- items: rows.map((row) => viewOf(row)),
863
+ items: items.map((item) => {
864
+ if (item.metadata?.notice?.code !== 'consultation')
865
+ return item;
866
+ const agentId = item.metadata?.notice.agentId ??
867
+ (item.metadata?.notice.runId
868
+ ? (runAgents.get(item.metadata?.notice.runId) ?? null)
869
+ : null);
870
+ const name = agentId ? names.get(agentId) : undefined;
871
+ return {
872
+ ...item,
873
+ metadata: {
874
+ ...item.metadata,
875
+ notice: {
876
+ ...item.metadata.notice,
877
+ agentId,
878
+ agentName: name ?? item.metadata.notice.agentName,
879
+ identitySnapshot: name === undefined,
880
+ },
881
+ },
882
+ };
883
+ }),
866
884
  hasMore,
867
885
  lastSeq: Number(current.lastSeq),
868
886
  };
@@ -916,31 +934,44 @@ export function createConversationService(deps) {
916
934
  return detail(userId, id);
917
935
  },
918
936
  async fallback(userId, id) {
937
+ const before = await owned(tx.read(), userId, id);
938
+ const target = await fallbackTarget(tx.read(), before);
919
939
  await tx.run(async (unit) => {
920
940
  const record = await lockOwned(unit, userId, id);
921
- const system = await systemDefault(unit.conn, userId);
922
- if (!system ||
923
- record.fallbackFromAgentId ||
924
- system.id === record.agentId ||
925
- system.type !== record.mode)
926
- throw conversationConflict('noFallback', 'This conversation cannot switch to the default agent.');
927
- await rebind(unit, record, system.id, record.agentId, {
941
+ const current = target ? await findAgent(unit.conn, target.id) : null;
942
+ if (!target ||
943
+ !wakeable(current, userId, deps.agents.mayInvoke) ||
944
+ current.revision !== target.revision ||
945
+ record.agentId !== before.agentId ||
946
+ record.thread !== before.thread ||
947
+ record.fallbackFromAgentId !== before.fallbackFromAgentId)
948
+ throw conversationConflict('noFallback', 'This conversation cannot switch to another agent.');
949
+ await rebind(unit, record, current, record.agentId, {
928
950
  code: 'switchedToDefault',
929
- agentId: system.id,
951
+ agentId: target.id,
930
952
  fromAgentId: record.agentId,
931
953
  });
932
954
  });
933
955
  return detail(userId, id);
934
956
  },
935
957
  async restore(userId, id) {
958
+ const before = await owned(tx.read(), userId, id);
959
+ const own = before.fallbackFromAgentId
960
+ ? await findAgent(tx.read(), before.fallbackFromAgentId)
961
+ : null;
962
+ const available = await canAnswer(tx.read(), own, userId);
936
963
  await tx.run(async (unit) => {
937
964
  const record = await lockOwned(unit, userId, id);
938
- const own = record.fallbackFromAgentId
939
- ? await findAgent(unit.conn, record.fallbackFromAgentId)
940
- : null;
941
- if (!own || !wakeable(own, userId, deps.agents.mayInvoke))
965
+ const current = own ? await findAgent(unit.conn, own.id) : null;
966
+ if (!own ||
967
+ !available ||
968
+ !wakeable(current, userId, deps.agents.mayInvoke) ||
969
+ current.revision !== own.revision ||
970
+ record.agentId !== before.agentId ||
971
+ record.thread !== before.thread ||
972
+ record.fallbackFromAgentId !== own.id)
942
973
  throw conversationConflict('noRestore', 'This conversation cannot switch back to its own agent now.');
943
- await rebind(unit, record, own.id, null, {
974
+ await rebind(unit, record, current, null, {
944
975
  code: 'switchedBack',
945
976
  agentId: own.id,
946
977
  fromAgentId: record.agentId,
@@ -994,41 +1025,6 @@ export function createConversationService(deps) {
994
1025
  return null;
995
1026
  return refOf(record);
996
1027
  },
997
- async consultation(run, card) {
998
- if (run.subject.kind !== CONVERSATION_SUBJECT)
999
- return;
1000
- await tx.run(async (unit) => {
1001
- const record = await lockConversation(unit.conn, run.subject.id, now());
1002
- if (!record || record.userId !== run.actorUserId)
1003
- return;
1004
- const metadata = {
1005
- notice: card,
1006
- ...(card.agentId ? { agentId: card.agentId } : {}),
1007
- ...(card.state === 'running' ? { streaming: true } : {}),
1008
- };
1009
- const existing = (await messagesRepo(unit.conn).findMany({
1010
- filter: {
1011
- conversationId: record.id,
1012
- runId: run.id,
1013
- role: 'system',
1014
- },
1015
- })).find((message) => {
1016
- const notice = metadataOf(message).notice;
1017
- return (notice?.code === 'consultation' && notice.callId === card.callId);
1018
- });
1019
- if (existing) {
1020
- await rewriteMessage(unit.conn, existing, { text: noticeText(card, new Map()), metadata }, now());
1021
- changed(unit, record, Number(existing.seq));
1022
- return;
1023
- }
1024
- await append(unit, record, {
1025
- role: 'system',
1026
- text: noticeText(card, new Map()),
1027
- metadata,
1028
- runId: run.id,
1029
- });
1030
- });
1031
- },
1032
1028
  async deliver(outer, conversationId, news) {
1033
1029
  const record = await lockConversation(outer.conn, conversationId, now());
1034
1030
  if (!record)
@@ -1039,14 +1035,14 @@ export function createConversationService(deps) {
1039
1035
  const agent = await findAgent(outer.conn, record.agentId);
1040
1036
  if (!wakeable(agent, record.userId, deps.agents.mayInvoke))
1041
1037
  return null;
1042
- const enqueued = await deps.runs.enqueue({
1038
+ const enqueued = queuedRun(await deps.runs.enqueue({
1043
1039
  agentId: agent.id,
1044
1040
  subject: subjectOf(record.id),
1045
1041
  threadScope: threadScopeOf(record),
1046
1042
  actorUserId: record.userId,
1047
1043
  ownerUserId: record.userId,
1048
1044
  input: news.input,
1049
- }, outer);
1045
+ }, outer));
1050
1046
  return { id: enqueued.runId, outcome: enqueued.outcome };
1051
1047
  },
1052
1048
  lock: async (conn, id) => (await lockConversation(conn, id, now())) !== null,
@@ -1066,92 +1062,36 @@ export function createConversationService(deps) {
1066
1062
  return;
1067
1063
  await tx.run((unit) => syncIn(unit, run));
1068
1064
  },
1069
- async streamDraft(run, text) {
1070
- if (run.subject.kind !== CONVERSATION_SUBJECT)
1071
- return;
1072
- await tx.run(async (unit) => {
1073
- const record = await lockConversation(unit.conn, run.subject.id, now());
1074
- if (!record || record.userId !== run.actorUserId)
1075
- return;
1076
- const draft = await findDraft(unit.conn, record.id, run.id);
1077
- if (draft) {
1078
- await rewriteMessage(unit.conn, draft, {
1079
- text,
1080
- metadata: { ...metadataOf(draft), streaming: true },
1081
- }, now());
1082
- changed(unit, record, Number(draft.seq));
1083
- return;
1084
- }
1085
- if (text.trim() === '')
1086
- return;
1087
- await append(unit, record, {
1088
- role: 'assistant',
1089
- text,
1090
- runId: run.id,
1091
- metadata: { agentId: run.agentId, streaming: true },
1092
- });
1093
- });
1094
- },
1095
1065
  async chatAgents(userId) {
1096
1066
  const conn = tx.read();
1097
- const [agents, runners, settings, preferences, catalog] = await Promise.all([
1067
+ const [agents, runners, settings, preferences] = await Promise.all([
1098
1068
  deps.agents.list(),
1099
- deps.runners.list(),
1069
+ deps.runners
1070
+ .list()
1071
+ .then((all) => all.filter((runner) => runner.status === 'online')),
1100
1072
  deps.settings.settings(conn),
1101
1073
  deps.settings.preferences(userId, conn),
1102
- deps.models.catalog(),
1103
1074
  ]);
1104
- return agents
1105
- .filter((agent) => deps.agents.mayInvoke(agent, userId))
1106
- .map((agent) => ({
1107
- id: agent.id,
1108
- name: agent.name,
1109
- description: agent.description,
1110
- nameText: agent.nameText,
1111
- descriptionText: agent.descriptionText,
1112
- avatar: agent.avatar,
1113
- type: agent.type,
1114
- models: agent.type === 'online'
1115
- ? chatModelChoices(onlineEntriesOrDefault(agent, catalog.defaultModel ?? null), catalog)
1116
- : [],
1117
- personal: agent.ownerUserId === userId && agent.access === 'ownerOnly',
1118
- isSystemDefault: agent.id === settings.defaultAgentId,
1119
- isMyDefault: agent.id === preferences.defaultAgentId,
1120
- availability: availabilityOf(agent, userId, deps.agents.mayInvoke, runners, catalog),
1075
+ return Promise.all(agents
1076
+ // People talk to the agents discovered from runners; an application's own agents do work of its own.
1077
+ .filter((agent) => agent.source === 'runner' && deps.agents.mayInvoke(agent, userId))
1078
+ .map(async (agent) => {
1079
+ const fitting = runners.filter((runner) => runnerTakesAgent(runner, agent));
1080
+ return {
1081
+ id: agent.id,
1082
+ name: agent.name,
1083
+ description: agent.description,
1084
+ nameText: agent.nameText,
1085
+ descriptionText: agent.descriptionText,
1086
+ avatar: agent.avatar,
1087
+ isSystemDefault: agent.id === settings.defaultAgentId,
1088
+ isMyDefault: agent.id === preferences.defaultAgentId,
1089
+ availability: await availabilityFor(conn, agent, userId, runners),
1090
+ personalOnly: fitting.length > 0 &&
1091
+ fitting.every((runner) => runner.trust !== 'team'),
1092
+ };
1121
1093
  }));
1122
1094
  },
1123
- async copyAgent(userId, agentId, request) {
1124
- const source = await deps.agents.get(agentId);
1125
- if (!deps.agents.mayInvoke(source, userId))
1126
- throw notFound('Agent');
1127
- const name = request.name?.trim() || `${source.name} (copy)`;
1128
- if ([...name].length > 200)
1129
- throw invalid('name must be at most 200 characters.');
1130
- const copy = await deps.agents.create(userId, {
1131
- name,
1132
- description: source.description,
1133
- descriptionText: source.descriptionText,
1134
- avatar: source.avatar,
1135
- type: source.type,
1136
- modelEntries: source.modelEntries,
1137
- instructions: source.instructions,
1138
- actions: source.actions,
1139
- confirmChanges: source.confirmChanges,
1140
- access: 'ownerOnly',
1141
- userIds: [],
1142
- ownerUserId: userId,
1143
- runnerIds: source.runnerIds,
1144
- skillIds: source.skillIds,
1145
- maxConcurrentRuns: source.maxConcurrentRuns,
1146
- maxAttempts: source.maxAttempts,
1147
- toolPolicy: source.toolPolicy,
1148
- });
1149
- if (request.makeDefault)
1150
- await deps.settings.updatePreferences(userId, {
1151
- defaultAgentId: copy.id,
1152
- });
1153
- return copy;
1154
- },
1155
1095
  };
1156
1096
  return service;
1157
1097
  }