@mndrk/agx 2.0.48 → 2.0.49

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 (345) hide show
  1. package/cloud-runtime/standalone/.next/BUILD_ID +1 -1
  2. package/cloud-runtime/standalone/.next/build-manifest.json +2 -2
  3. package/cloud-runtime/standalone/.next/prerender-manifest.json +3 -3
  4. package/cloud-runtime/standalone/.next/server/app/_global-error.html +2 -2
  5. package/cloud-runtime/standalone/.next/server/app/_global-error.rsc +1 -1
  6. package/cloud-runtime/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  7. package/cloud-runtime/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  8. package/cloud-runtime/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  9. package/cloud-runtime/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  10. package/cloud-runtime/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  11. package/cloud-runtime/standalone/.next/server/app/_not-found.html +2 -2
  12. package/cloud-runtime/standalone/.next/server/app/_not-found.rsc +1 -1
  13. package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  14. package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  15. package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  16. package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  17. package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  18. package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  19. package/cloud-runtime/standalone/.next/server/app/agents.html +2 -2
  20. package/cloud-runtime/standalone/.next/server/app/agents.rsc +1 -1
  21. package/cloud-runtime/standalone/.next/server/app/agents.segments/_full.segment.rsc +1 -1
  22. package/cloud-runtime/standalone/.next/server/app/agents.segments/_head.segment.rsc +1 -1
  23. package/cloud-runtime/standalone/.next/server/app/agents.segments/_index.segment.rsc +1 -1
  24. package/cloud-runtime/standalone/.next/server/app/agents.segments/_tree.segment.rsc +1 -1
  25. package/cloud-runtime/standalone/.next/server/app/agents.segments/agents/__PAGE__.segment.rsc +1 -1
  26. package/cloud-runtime/standalone/.next/server/app/agents.segments/agents.segment.rsc +1 -1
  27. package/cloud-runtime/standalone/.next/server/app/api/agent-specs/route.js +1 -1
  28. package/cloud-runtime/standalone/.next/server/app/api/agent-specs/route.js.nft.json +1 -1
  29. package/cloud-runtime/standalone/.next/server/app/api/agents/[id]/profile/route.js +1 -1
  30. package/cloud-runtime/standalone/.next/server/app/api/agents/[id]/profile/route.js.nft.json +1 -1
  31. package/cloud-runtime/standalone/.next/server/app/api/agents/export/route.js +1 -1
  32. package/cloud-runtime/standalone/.next/server/app/api/agents/export/route.js.nft.json +1 -1
  33. package/cloud-runtime/standalone/.next/server/app/api/chat/route.js +13 -7
  34. package/cloud-runtime/standalone/.next/server/app/api/chat/route.js.nft.json +1 -1
  35. package/cloud-runtime/standalone/.next/server/app/api/file-search/route.js.nft.json +1 -1
  36. package/cloud-runtime/standalone/.next/server/app/api/health/route.js +1 -1
  37. package/cloud-runtime/standalone/.next/server/app/api/health/route.js.nft.json +1 -1
  38. package/cloud-runtime/standalone/.next/server/app/api/knowledge-notes/route.js +1 -1
  39. package/cloud-runtime/standalone/.next/server/app/api/knowledge-notes/route.js.nft.json +1 -1
  40. package/cloud-runtime/standalone/.next/server/app/api/learnings/route.js +1 -1
  41. package/cloud-runtime/standalone/.next/server/app/api/learnings/route.js.nft.json +1 -1
  42. package/cloud-runtime/standalone/.next/server/app/api/linear/callback/route.js +1 -1
  43. package/cloud-runtime/standalone/.next/server/app/api/linear/callback/route.js.nft.json +1 -1
  44. package/cloud-runtime/standalone/.next/server/app/api/linear/issues/context/route.js +1 -1
  45. package/cloud-runtime/standalone/.next/server/app/api/linear/issues/context/route.js.nft.json +1 -1
  46. package/cloud-runtime/standalone/.next/server/app/api/linear/issues/route.js +1 -1
  47. package/cloud-runtime/standalone/.next/server/app/api/linear/issues/route.js.nft.json +1 -1
  48. package/cloud-runtime/standalone/.next/server/app/api/linear/options/route.js +1 -1
  49. package/cloud-runtime/standalone/.next/server/app/api/linear/options/route.js.nft.json +1 -1
  50. package/cloud-runtime/standalone/.next/server/app/api/linear/status/route.js.nft.json +1 -1
  51. package/cloud-runtime/standalone/.next/server/app/api/memories/route.js +1 -1
  52. package/cloud-runtime/standalone/.next/server/app/api/memories/route.js.nft.json +1 -1
  53. package/cloud-runtime/standalone/.next/server/app/api/orchestrator/tasks/[taskId]/start/route.js +1 -1
  54. package/cloud-runtime/standalone/.next/server/app/api/orchestrator/tasks/[taskId]/start/route.js.nft.json +1 -1
  55. package/cloud-runtime/standalone/.next/server/app/api/orchestrator/tasks/[taskId]/status/route.js +1 -1
  56. package/cloud-runtime/standalone/.next/server/app/api/orchestrator/tasks/[taskId]/status/route.js.nft.json +1 -1
  57. package/cloud-runtime/standalone/.next/server/app/api/participants/route.js +1 -1
  58. package/cloud-runtime/standalone/.next/server/app/api/participants/route.js.nft.json +1 -1
  59. package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/agents/route.js +1 -1
  60. package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/agents/route.js.nft.json +1 -1
  61. package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/migrate-v1/route.js +1 -1
  62. package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/migrate-v1/route.js.nft.json +1 -1
  63. package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/migrate-v2/route.js +1 -1
  64. package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/migrate-v2/route.js.nft.json +1 -1
  65. package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/route.js +1 -1
  66. package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/route.js.nft.json +1 -1
  67. package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/skills/route.js +1 -1
  68. package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/skills/route.js.nft.json +1 -1
  69. package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/threads/route.js +1 -1
  70. package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/threads/route.js.nft.json +1 -1
  71. package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/variables/route.js +1 -1
  72. package/cloud-runtime/standalone/.next/server/app/api/projects/[id]/variables/route.js.nft.json +1 -1
  73. package/cloud-runtime/standalone/.next/server/app/api/projects/route.js +1 -1
  74. package/cloud-runtime/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  75. package/cloud-runtime/standalone/.next/server/app/api/prompt-jobs/agents/route.js +1 -1
  76. package/cloud-runtime/standalone/.next/server/app/api/prompt-jobs/agents/route.js.nft.json +1 -1
  77. package/cloud-runtime/standalone/.next/server/app/api/prompt-jobs/poll/route.js +1 -1
  78. package/cloud-runtime/standalone/.next/server/app/api/prompt-jobs/poll/route.js.nft.json +1 -1
  79. package/cloud-runtime/standalone/.next/server/app/api/providers/route.js.nft.json +1 -1
  80. package/cloud-runtime/standalone/.next/server/app/api/queue/complete/route.js +1 -1
  81. package/cloud-runtime/standalone/.next/server/app/api/queue/complete/route.js.nft.json +1 -1
  82. package/cloud-runtime/standalone/.next/server/app/api/queue/route.js +2 -2
  83. package/cloud-runtime/standalone/.next/server/app/api/queue/route.js.nft.json +1 -1
  84. package/cloud-runtime/standalone/.next/server/app/api/schedules/debug/route.js +14 -6
  85. package/cloud-runtime/standalone/.next/server/app/api/schedules/debug/route.js.nft.json +1 -1
  86. package/cloud-runtime/standalone/.next/server/app/api/schedules/poll/route.js +13 -5
  87. package/cloud-runtime/standalone/.next/server/app/api/schedules/poll/route.js.nft.json +1 -1
  88. package/cloud-runtime/standalone/.next/server/app/api/status/route.js.nft.json +1 -1
  89. package/cloud-runtime/standalone/.next/server/app/api/summarize/route.js +1 -1
  90. package/cloud-runtime/standalone/.next/server/app/api/summarize/route.js.nft.json +1 -1
  91. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/comments/[commentId]/route.js +1 -1
  92. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/comments/[commentId]/route.js.nft.json +1 -1
  93. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/comments/route.js +1 -1
  94. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/comments/route.js.nft.json +1 -1
  95. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/costs/route.js +1 -1
  96. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/costs/route.js.nft.json +1 -1
  97. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/dependencies/route.js +1 -1
  98. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/dependencies/route.js.nft.json +1 -1
  99. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/events/route.js +1 -1
  100. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/events/route.js.nft.json +1 -1
  101. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/history/route.js +1 -1
  102. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/history/route.js.nft.json +1 -1
  103. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/metrics/route.js +1 -1
  104. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/metrics/route.js.nft.json +1 -1
  105. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/replan/route.js +1 -1
  106. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/replan/route.js.nft.json +1 -1
  107. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/restart/route.js +1 -1
  108. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/restart/route.js.nft.json +1 -1
  109. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/resume/route.js +1 -1
  110. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/resume/route.js.nft.json +1 -1
  111. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/rollback/route.js +1 -1
  112. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/rollback/route.js.nft.json +1 -1
  113. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/route.js +3 -4
  114. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/route.js.nft.json +1 -1
  115. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/schedule/route.js +1 -1
  116. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/schedule/route.js.nft.json +1 -1
  117. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/start/route.js +1 -1
  118. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/start/route.js.nft.json +1 -1
  119. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/stop/route.js +1 -1
  120. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/graph/stop/route.js.nft.json +1 -1
  121. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/history/route.js +1 -1
  122. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/history/route.js.nft.json +1 -1
  123. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/logs/route.js +1 -1
  124. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/logs/route.js.nft.json +1 -1
  125. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/comments/route.js +1 -1
  126. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/comments/route.js.nft.json +1 -1
  127. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/complete/route.js +3 -4
  128. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/complete/route.js.nft.json +1 -1
  129. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/fail/route.js +3 -4
  130. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/fail/route.js.nft.json +1 -1
  131. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/resume/route.js +3 -4
  132. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/resume/route.js.nft.json +1 -1
  133. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/start/route.js +3 -4
  134. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/start/route.js.nft.json +1 -1
  135. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/stop/route.js +3 -4
  136. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/stop/route.js.nft.json +1 -1
  137. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/verify/route.js +4 -5
  138. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/nodes/[nodeId]/verify/route.js.nft.json +1 -1
  139. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/route.js +1 -1
  140. package/cloud-runtime/standalone/.next/server/app/api/tasks/[id]/route.js.nft.json +1 -1
  141. package/cloud-runtime/standalone/.next/server/app/api/tasks/assign-orphans/route.js +1 -1
  142. package/cloud-runtime/standalone/.next/server/app/api/tasks/assign-orphans/route.js.nft.json +1 -1
  143. package/cloud-runtime/standalone/.next/server/app/api/tasks/extract/route.js +1 -1
  144. package/cloud-runtime/standalone/.next/server/app/api/tasks/extract/route.js.nft.json +1 -1
  145. package/cloud-runtime/standalone/.next/server/app/api/tasks/route.js +2 -2
  146. package/cloud-runtime/standalone/.next/server/app/api/tasks/route.js.nft.json +1 -1
  147. package/cloud-runtime/standalone/.next/server/app/api/threads/knowledge/route.js +1 -1
  148. package/cloud-runtime/standalone/.next/server/app/api/threads/knowledge/route.js.nft.json +1 -1
  149. package/cloud-runtime/standalone/.next/server/app/api/threads/route.js +1 -1
  150. package/cloud-runtime/standalone/.next/server/app/api/threads/route.js.nft.json +1 -1
  151. package/cloud-runtime/standalone/.next/server/app/api/user-settings/route.js +1 -1
  152. package/cloud-runtime/standalone/.next/server/app/api/user-settings/route.js.nft.json +1 -1
  153. package/cloud-runtime/standalone/.next/server/app/automations.html +2 -2
  154. package/cloud-runtime/standalone/.next/server/app/automations.rsc +1 -1
  155. package/cloud-runtime/standalone/.next/server/app/automations.segments/_full.segment.rsc +1 -1
  156. package/cloud-runtime/standalone/.next/server/app/automations.segments/_head.segment.rsc +1 -1
  157. package/cloud-runtime/standalone/.next/server/app/automations.segments/_index.segment.rsc +1 -1
  158. package/cloud-runtime/standalone/.next/server/app/automations.segments/_tree.segment.rsc +1 -1
  159. package/cloud-runtime/standalone/.next/server/app/automations.segments/automations/__PAGE__.segment.rsc +1 -1
  160. package/cloud-runtime/standalone/.next/server/app/automations.segments/automations.segment.rsc +1 -1
  161. package/cloud-runtime/standalone/.next/server/app/board.html +2 -2
  162. package/cloud-runtime/standalone/.next/server/app/board.rsc +1 -1
  163. package/cloud-runtime/standalone/.next/server/app/board.segments/_full.segment.rsc +1 -1
  164. package/cloud-runtime/standalone/.next/server/app/board.segments/_head.segment.rsc +1 -1
  165. package/cloud-runtime/standalone/.next/server/app/board.segments/_index.segment.rsc +1 -1
  166. package/cloud-runtime/standalone/.next/server/app/board.segments/_tree.segment.rsc +1 -1
  167. package/cloud-runtime/standalone/.next/server/app/board.segments/board/__PAGE__.segment.rsc +1 -1
  168. package/cloud-runtime/standalone/.next/server/app/board.segments/board.segment.rsc +1 -1
  169. package/cloud-runtime/standalone/.next/server/app/execution-graph.html +2 -2
  170. package/cloud-runtime/standalone/.next/server/app/execution-graph.rsc +1 -1
  171. package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/_full.segment.rsc +1 -1
  172. package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/_head.segment.rsc +1 -1
  173. package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/_index.segment.rsc +1 -1
  174. package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/_tree.segment.rsc +1 -1
  175. package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/execution-graph/__PAGE__.segment.rsc +1 -1
  176. package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/execution-graph.segment.rsc +1 -1
  177. package/cloud-runtime/standalone/.next/server/app/folders.html +2 -2
  178. package/cloud-runtime/standalone/.next/server/app/folders.rsc +1 -1
  179. package/cloud-runtime/standalone/.next/server/app/folders.segments/_full.segment.rsc +1 -1
  180. package/cloud-runtime/standalone/.next/server/app/folders.segments/_head.segment.rsc +1 -1
  181. package/cloud-runtime/standalone/.next/server/app/folders.segments/_index.segment.rsc +1 -1
  182. package/cloud-runtime/standalone/.next/server/app/folders.segments/_tree.segment.rsc +1 -1
  183. package/cloud-runtime/standalone/.next/server/app/folders.segments/folders/__PAGE__.segment.rsc +1 -1
  184. package/cloud-runtime/standalone/.next/server/app/folders.segments/folders.segment.rsc +1 -1
  185. package/cloud-runtime/standalone/.next/server/app/index.html +2 -2
  186. package/cloud-runtime/standalone/.next/server/app/index.rsc +2 -2
  187. package/cloud-runtime/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  188. package/cloud-runtime/standalone/.next/server/app/index.segments/_full.segment.rsc +2 -2
  189. package/cloud-runtime/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  190. package/cloud-runtime/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  191. package/cloud-runtime/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  192. package/cloud-runtime/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  193. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/thread/[threadId]/page_client-reference-manifest.js +1 -1
  194. package/cloud-runtime/standalone/.next/server/app/projects/orphans.html +2 -2
  195. package/cloud-runtime/standalone/.next/server/app/projects/orphans.rsc +1 -1
  196. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/_full.segment.rsc +1 -1
  197. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/_head.segment.rsc +1 -1
  198. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/_index.segment.rsc +1 -1
  199. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/_tree.segment.rsc +1 -1
  200. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/projects/orphans/__PAGE__.segment.rsc +1 -1
  201. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/projects/orphans.segment.rsc +1 -1
  202. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/projects.segment.rsc +1 -1
  203. package/cloud-runtime/standalone/.next/server/app/projects.html +2 -2
  204. package/cloud-runtime/standalone/.next/server/app/projects.rsc +1 -1
  205. package/cloud-runtime/standalone/.next/server/app/projects.segments/_full.segment.rsc +1 -1
  206. package/cloud-runtime/standalone/.next/server/app/projects.segments/_head.segment.rsc +1 -1
  207. package/cloud-runtime/standalone/.next/server/app/projects.segments/_index.segment.rsc +1 -1
  208. package/cloud-runtime/standalone/.next/server/app/projects.segments/_tree.segment.rsc +1 -1
  209. package/cloud-runtime/standalone/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +1 -1
  210. package/cloud-runtime/standalone/.next/server/app/projects.segments/projects.segment.rsc +1 -1
  211. package/cloud-runtime/standalone/.next/server/app/settings.html +2 -2
  212. package/cloud-runtime/standalone/.next/server/app/settings.rsc +1 -1
  213. package/cloud-runtime/standalone/.next/server/app/settings.segments/_full.segment.rsc +1 -1
  214. package/cloud-runtime/standalone/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  215. package/cloud-runtime/standalone/.next/server/app/settings.segments/_index.segment.rsc +1 -1
  216. package/cloud-runtime/standalone/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  217. package/cloud-runtime/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +1 -1
  218. package/cloud-runtime/standalone/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  219. package/cloud-runtime/standalone/.next/server/app/skills.html +2 -2
  220. package/cloud-runtime/standalone/.next/server/app/skills.rsc +1 -1
  221. package/cloud-runtime/standalone/.next/server/app/skills.segments/_full.segment.rsc +1 -1
  222. package/cloud-runtime/standalone/.next/server/app/skills.segments/_head.segment.rsc +1 -1
  223. package/cloud-runtime/standalone/.next/server/app/skills.segments/_index.segment.rsc +1 -1
  224. package/cloud-runtime/standalone/.next/server/app/skills.segments/_tree.segment.rsc +1 -1
  225. package/cloud-runtime/standalone/.next/server/app/skills.segments/skills/__PAGE__.segment.rsc +1 -1
  226. package/cloud-runtime/standalone/.next/server/app/skills.segments/skills.segment.rsc +1 -1
  227. package/cloud-runtime/standalone/.next/server/app/status.html +2 -2
  228. package/cloud-runtime/standalone/.next/server/app/status.rsc +1 -1
  229. package/cloud-runtime/standalone/.next/server/app/status.segments/_full.segment.rsc +1 -1
  230. package/cloud-runtime/standalone/.next/server/app/status.segments/_head.segment.rsc +1 -1
  231. package/cloud-runtime/standalone/.next/server/app/status.segments/_index.segment.rsc +1 -1
  232. package/cloud-runtime/standalone/.next/server/app/status.segments/_tree.segment.rsc +1 -1
  233. package/cloud-runtime/standalone/.next/server/app/status.segments/status/__PAGE__.segment.rsc +1 -1
  234. package/cloud-runtime/standalone/.next/server/app/status.segments/status.segment.rsc +1 -1
  235. package/cloud-runtime/standalone/.next/server/app/thread/[id]/page_client-reference-manifest.js +1 -1
  236. package/cloud-runtime/standalone/.next/server/app/welcome.html +2 -2
  237. package/cloud-runtime/standalone/.next/server/app/welcome.rsc +1 -1
  238. package/cloud-runtime/standalone/.next/server/app/welcome.segments/_full.segment.rsc +1 -1
  239. package/cloud-runtime/standalone/.next/server/app/welcome.segments/_head.segment.rsc +1 -1
  240. package/cloud-runtime/standalone/.next/server/app/welcome.segments/_index.segment.rsc +1 -1
  241. package/cloud-runtime/standalone/.next/server/app/welcome.segments/_tree.segment.rsc +1 -1
  242. package/cloud-runtime/standalone/.next/server/app/welcome.segments/welcome/__PAGE__.segment.rsc +1 -1
  243. package/cloud-runtime/standalone/.next/server/app/welcome.segments/welcome.segment.rsc +1 -1
  244. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__a300f072._.js → [root-of-the-server]__02a4a323._.js} +2 -2
  245. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__05dedbe1._.js +64 -0
  246. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__4ce74056._.js → [root-of-the-server]__05f0bfbf._.js} +2 -2
  247. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__c22dd3a6._.js → [root-of-the-server]__08c82fe8._.js} +2 -2
  248. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__3fae531a._.js → [root-of-the-server]__09e37b59._.js} +2 -2
  249. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__1a1f66b1._.js → [root-of-the-server]__0e83aabc._.js} +2 -2
  250. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__27da58f0._.js +67 -0
  251. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__9ffa67b7._.js → [root-of-the-server]__2ae8b938._.js} +2 -2
  252. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__2cfd21b8._.js +108 -0
  253. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__f9f7f2df._.js → [root-of-the-server]__3c1403f2._.js} +2 -2
  254. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__143fdf69._.js → [root-of-the-server]__40e9e2e8._.js} +2 -2
  255. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__42e602eb._.js +49 -0
  256. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__a7b2350e._.js → [root-of-the-server]__456840d0._.js} +2 -2
  257. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__5c2848bb._.js +64 -0
  258. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__667c658f._.js +52 -0
  259. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__6a92b882._.js +49 -0
  260. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__6c9baa7c._.js +64 -0
  261. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__c21747df._.js → [root-of-the-server]__719eddc2._.js} +2 -2
  262. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__36d15de5._.js → [root-of-the-server]__7ee3dfe1._.js} +2 -2
  263. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__d324f8a1._.js → [root-of-the-server]__80964fad._.js} +2 -2
  264. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__bab85495._.js → [root-of-the-server]__862cf77d._.js} +2 -2
  265. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__a280fa63._.js → [root-of-the-server]__8b5b9860._.js} +2 -2
  266. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__3170b7bf._.js → [root-of-the-server]__8d475640._.js} +2 -2
  267. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__958dded3._.js +49 -0
  268. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__ab655b9f._.js → [root-of-the-server]__96c424d5._.js} +2 -2
  269. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__5c55f67a._.js → [root-of-the-server]__976ebe46._.js} +2 -2
  270. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__179cb224._.js → [root-of-the-server]__a1cab8fe._.js} +2 -2
  271. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__20a2cb22._.js → [root-of-the-server]__a31dd756._.js} +2 -2
  272. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__a3955224._.js → [root-of-the-server]__ad53dc3f._.js} +2 -2
  273. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__ac6326b6._.js → [root-of-the-server]__b8eeb177._.js} +2 -2
  274. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__fcfa3690._.js → [root-of-the-server]__c10e827d._.js} +2 -2
  275. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__e58e9f91._.js → [root-of-the-server]__c11e0040._.js} +2 -2
  276. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__c40b6f69._.js +49 -0
  277. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__c7d3c7ab._.js +52 -0
  278. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__cdc52544._.js +49 -0
  279. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__8cbd8c56._.js → [root-of-the-server]__d1c698b6._.js} +12 -12
  280. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__d9ea98bd._.js +52 -0
  281. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__ef27f8cd._.js → [root-of-the-server]__df886e3c._.js} +2 -2
  282. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__ca4987eb._.js → [root-of-the-server]__e0b6f424._.js} +2 -2
  283. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__c8890cd6._.js → [root-of-the-server]__f43ecbc2._.js} +2 -2
  284. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__f51c7b72._.js +5 -0
  285. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__f662fd1e._.js +20 -0
  286. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__538b0bdd._.js → [root-of-the-server]__f961230c._.js} +2 -2
  287. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__b627cb83._.js → [root-of-the-server]__feec5b54._.js} +2 -2
  288. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__d16caed5._.js → [root-of-the-server]__ff6ce4b1._.js} +2 -2
  289. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__ff9ce15e._.js +5 -0
  290. package/cloud-runtime/standalone/.next/server/chunks/_26ffc857._.js +121 -0
  291. package/cloud-runtime/standalone/.next/server/chunks/_4d07f8db._.js +1 -1
  292. package/cloud-runtime/standalone/.next/server/chunks/_66d0cf73._.js +6 -0
  293. package/cloud-runtime/standalone/.next/server/chunks/_9b10087f._.js +3 -2
  294. package/cloud-runtime/standalone/.next/server/chunks/_a13c0bef._.js +121 -0
  295. package/cloud-runtime/standalone/.next/server/chunks/{lib_98ae187c._.js → lib_2cd3429c._.js} +2 -2
  296. package/cloud-runtime/standalone/.next/server/chunks/lib_a2a83df5._.js +55 -0
  297. package/cloud-runtime/standalone/.next/server/chunks/lib_a658c9ef._.js +34 -0
  298. package/cloud-runtime/standalone/.next/server/chunks/lib_ba38ea08._.js +55 -0
  299. package/cloud-runtime/standalone/.next/server/chunks/lib_orchestrator_chat-processor_ts_4c335719._.js +27 -29
  300. package/cloud-runtime/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_371d0bff.js +6 -102
  301. package/cloud-runtime/standalone/.next/server/chunks/src_graph_schedule-runner_ts_43a13c69._.js +13 -0
  302. package/cloud-runtime/standalone/.next/server/chunks/ssr/components_chat-ui_bfeda794._.js +1 -1
  303. package/cloud-runtime/standalone/.next/server/middleware-manifest.json +5 -5
  304. package/cloud-runtime/standalone/.next/server/pages/404.html +2 -2
  305. package/cloud-runtime/standalone/.next/server/pages/500.html +2 -2
  306. package/cloud-runtime/standalone/.next/server/server-reference-manifest.js +1 -1
  307. package/cloud-runtime/standalone/.next/server/server-reference-manifest.json +1 -1
  308. package/cloud-runtime/standalone/.next/static/chunks/{442eb8ef62bef9f9.js → 5545da2ad239c0b6.js} +3 -3
  309. package/cloud-runtime/standalone/app/api/chat/route.ts +5 -163
  310. package/cloud-runtime/standalone/app/api/schedules/route.ts +11 -2
  311. package/cloud-runtime/standalone/components/chat-ui/ChatContainer.tsx +0 -13
  312. package/cloud-runtime/standalone/lib/chat/project-context.ts +169 -0
  313. package/cloud-runtime/standalone/lib/orchestrator/runtime.ts +2 -0
  314. package/cloud-runtime/standalone/lib/orchestrator/schedule-runtime.ts +76 -0
  315. package/cloud-runtime/standalone/src/graph/internal-function-dispatcher.ts +201 -16
  316. package/cloud-runtime/standalone/src/graph/work-dispatcher.ts +128 -35
  317. package/cloud-runtime/standalone/state/automations/.state/c4300b01-1203-40fe-b3a9-b9fb9ec0c5cc.json +4 -4
  318. package/cloud-runtime/standalone/tsconfig.tsbuildinfo +1 -1
  319. package/cloud-runtime/standalone/vault/agx/issues/ESO-327/design-doc.md +202 -0
  320. package/cloud-runtime/standalone/worker/index.js +34516 -1717
  321. package/cloud-runtime/standalone/worker/index.ts +3 -0
  322. package/package.json +1 -1
  323. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__067034dd._.js +0 -67
  324. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__152b2000._.js +0 -61
  325. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__33865410._.js +0 -3
  326. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__6c53437e._.js +0 -110
  327. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__6dbe939c._.js +0 -49
  328. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__7012e83d._.js +0 -66
  329. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__da645a5e._.js +0 -15
  330. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__f4b3df16._.js +0 -3
  331. package/cloud-runtime/standalone/.next/server/chunks/_2a5aeb76._.js +0 -3
  332. package/cloud-runtime/standalone/.next/server/chunks/_4689976f._.js +0 -6
  333. package/cloud-runtime/standalone/.next/server/chunks/_682c9d81._.js +0 -6
  334. package/cloud-runtime/standalone/.next/server/chunks/_6e7f0ae4._.js +0 -6
  335. package/cloud-runtime/standalone/.next/server/chunks/_a32a5cdd._.js +0 -6
  336. package/cloud-runtime/standalone/.next/server/chunks/_af7bd752._.js +0 -3
  337. package/cloud-runtime/standalone/.next/server/chunks/_fe32a267._.js +0 -3
  338. package/cloud-runtime/standalone/.next/server/chunks/lib_2492d514._.js +0 -55
  339. package/cloud-runtime/standalone/.next/server/chunks/lib_3c080873._.js +0 -34
  340. package/cloud-runtime/standalone/.next/server/chunks/lib_9f439b27._.js +0 -70
  341. package/cloud-runtime/standalone/.next/server/chunks/src_graph_12d46a92._.js +0 -3
  342. package/cloud-runtime/standalone/.next/server/chunks/src_graph_executor_ts_55c06268._.js +0 -8
  343. /package/cloud-runtime/standalone/.next/static/{gty0FO80D_lbq3o9lSpQQ → ZkFZnP5h74O7GgdHudXgH}/_buildManifest.js +0 -0
  344. /package/cloud-runtime/standalone/.next/static/{gty0FO80D_lbq3o9lSpQQ → ZkFZnP5h74O7GgdHudXgH}/_clientMiddlewareManifest.json +0 -0
  345. /package/cloud-runtime/standalone/.next/static/{gty0FO80D_lbq3o9lSpQQ → ZkFZnP5h74O7GgdHudXgH}/_ssgManifest.js +0 -0
@@ -0,0 +1,202 @@
1
+ # ESO-327: Sandbox, Onboarding & Auth for app.runagx.com
2
+
3
+ **Status:** Draft v2 — revised after feedback
4
+ **Date:** 2026-04-08
5
+ **Author:** Jane
6
+
7
+ ---
8
+
9
+ ## Core Premise
10
+
11
+ app.runagx.com is a **hosted runtime** — it runs agents server-side in sandboxed containers. This is not just a dashboard. The architecture follows agx-game's proven three-tier container model.
12
+
13
+ ---
14
+
15
+ ## Architecture: Three-Tier Container Model
16
+
17
+ Directly adapted from agx-game's production setup:
18
+
19
+ ```
20
+ ┌─────────────────────────────────────────────────┐
21
+ │ Relay (public API / app.runagx.com) │
22
+ │ - Auth (Clerk JWT) │
23
+ │ - Company registry & membership │
24
+ │ - Container lifecycle management │
25
+ │ - WebSocket/WebRTC proxy │
26
+ └────────────┬───────────────┬────────────────────┘
27
+ │ │
28
+ ┌────────▼────┐ ┌──────▼──────┐
29
+ │ Runtime │ │ Runtime │ (one per tenant)
30
+ │ Container │ │ Container │
31
+ │ - SQLite │ │ - SQLite │
32
+ │ - Engine │ │ - Engine │
33
+ │ - Tick │ │ - Tick │
34
+ └────────┬────┘ └──────┬──────┘
35
+ │ │
36
+ ┌────────▼────┐ ┌──────▼──────┐
37
+ │ Sandbox │ │ Sandbox │ (one per tenant)
38
+ │ Container │ │ Container │
39
+ │ - Agent │ │ - Agent │
40
+ │ tools │ │ tools │
41
+ │ - CLI exec │ │ - CLI exec │
42
+ └─────────────┘ └─────────────┘
43
+ ```
44
+
45
+ ### Relay (Public Tier)
46
+ - Serves app.runagx.com (Next.js on Vercel or standalone)
47
+ - Handles auth, company CRUD, membership/invites
48
+ - Manages container lifecycle (create, start, stop, health check)
49
+ - Proxies terminal sessions and browser streams to runtime containers
50
+ - Communicates with Docker host via Tailscale (prod) or localhost (dev)
51
+
52
+ ### Runtime Container (Per-Tenant)
53
+ - Runs the simulation engine: tick loop, task scheduling, run orchestration
54
+ - Owns the SQLite database (single writer)
55
+ - Launches agent runs via `docker exec` into the paired sandbox
56
+ - Replicates DB as read-only to sandbox for agent context
57
+ - Handles health checks, dead PID detection, state repair
58
+
59
+ ### Sandbox Container (Per-Tenant)
60
+ - Long-lived execution environment for agents
61
+ - Pre-installed tools: claude-code, codex, gemini-cli, gh, git, node, python
62
+ - Runs as non-root `player` user (UID 1000)
63
+ - Read-only access to company data (SQLite replica at mode 0o444)
64
+ - Shared `/home/player` volume with runtime for file exchange
65
+
66
+ ---
67
+
68
+ ## Security Model
69
+
70
+ ### Isolation Boundaries
71
+ | Layer | Mechanism |
72
+ |-------|-----------|
73
+ | Tenant isolation | Separate Docker containers per company (PID, network, filesystem namespaces) |
74
+ | User privilege | Non-root `player` user in both containers |
75
+ | Data protection | SQLite DB read-only in sandbox, writes only from runtime |
76
+ | Network | Bridge network per tenant, no cross-tenant communication |
77
+ | Resource caps | CPU: 2 cores (configurable), Memory: 4GB (configurable) |
78
+ | Session limits | Max 2 terminal sessions, max 5 concurrent runs, 15min timeout per run |
79
+
80
+ ### Inter-Container Auth
81
+ - Runtime ↔ Sandbox: HMAC-SHA256 shared secret per company
82
+ - Token generation: `buildCompanyRuntimeToken(companyId, secret)`
83
+ - Terminal sessions: Time-limited JWTs with ticket system
84
+
85
+ ### Known Limitations (inherited from agx-game)
86
+ - Sandbox has passwordless sudo — suitable for semi-trusted agent execution
87
+ - No seccomp/AppArmor profiles (standard Docker defaults)
88
+ - Credentials stored in environment, not encrypted at rest
89
+ - Shared volume between runtime and sandbox is trust-based
90
+
91
+ **Decision needed:** Do we tighten these for app.runagx.com? Options:
92
+ 1. Ship with agx-game's current security posture (fast, proven)
93
+ 2. Remove sudo from sandbox, add seccomp profiles (slower, more secure for untrusted users)
94
+
95
+ ---
96
+
97
+ ## Auth & Onboarding
98
+
99
+ ### User Auth Flow
100
+ 1. User signs up / logs in at app.runagx.com via **Clerk**
101
+ 2. Clerk JWT validated by relay backend (JWKS with 5min TTL cache)
102
+ 3. User creates or joins a **company** (tenant unit)
103
+ 4. Company containers provisioned on first access via `ensureReady()`
104
+
105
+ ### CLI Connection (`agx auth login`)
106
+ 1. CLI opens browser to `app.runagx.com/auth/cli`
107
+ 2. User authenticates via Clerk
108
+ 3. Server generates a scoped API token tied to the user + company
109
+ 4. Token returned to CLI via localhost callback
110
+ 5. CLI stores token at `~/.agx/credentials.json`
111
+ 6. Subsequent CLI commands authenticate via `Authorization: Bearer <token>`
112
+
113
+ ### Dev Mode Bypass
114
+ - `AUTH_DISABLED=1` + loopback host check for local development
115
+ - Matches agx-game's existing pattern
116
+
117
+ ---
118
+
119
+ ## Execution Lifecycle
120
+
121
+ ```
122
+ User creates task (dashboard or CLI)
123
+ → Relay forwards to Runtime container
124
+ → SimulationService.step() ticks
125
+ → tickWorld() evaluates conditions, dequeues runnable tasks
126
+ → launchRun(RunRequest) builds execution plan
127
+ → docker exec -i -u player -w {workdir} {sandbox} {command}
128
+ → Agent runs (claude, codex, gemini, ollama)
129
+ → stdout/stderr streamed, exit code captured
130
+ → parseRunResult() extracts status, artifacts
131
+ → applyRunResultToWorld() updates state
132
+ → Results visible in dashboard
133
+ ```
134
+
135
+ ### Run Configuration
136
+ ```typescript
137
+ interface RunRequest {
138
+ id: RunId;
139
+ threadId: ThreadId;
140
+ actorId: ActorId;
141
+ provider: "claude" | "codex" | "gemini" | "ollama" | "z.ai";
142
+ model?: string;
143
+ prompt: string;
144
+ cwd?: string;
145
+ metadata?: Record<string, unknown>;
146
+ }
147
+ ```
148
+
149
+ ---
150
+
151
+ ## Infrastructure
152
+
153
+ ### Container Images
154
+ - **Sandbox:** Ubuntu 24.04, Node 22, Python 3, git, gh, claude-code, codex, gemini-cli, tmux, ripgrep, etc.
155
+ - **Runtime:** Ubuntu 24.04, Node 22, Docker CLI, Go (browser-streamer), Playwright/Chromium, FFmpeg
156
+
157
+ ### Deployment Topology
158
+ - **Relay:** Vercel (or standalone Node) — public internet
159
+ - **Docker Host:** Private server behind Tailscale — runs runtime + sandbox containers
160
+ - **Communication:** Relay → Docker host via Tailscale; browser sessions via WebRTC (fallback: WebSocket)
161
+
162
+ ### Per-Tenant Resources
163
+ - Volumes: `agx-home-{companyId}` (shared), `agx-state-{companyId}` (runtime only)
164
+ - Containers: `agx-company-runtime-{companyId}`, `agx-company-sandbox-{companyId}`
165
+ - Database: One SQLite file per tenant (WAL mode, single writer in runtime)
166
+
167
+ ---
168
+
169
+ ## Rollout Phases
170
+
171
+ ### Phase 1: Foundation
172
+ - Fork agx-game's container infrastructure (Dockerfiles, compose configs, container service)
173
+ - Adapt relay for app.runagx.com (strip game-specific simulation, keep container lifecycle)
174
+ - Clerk auth integration
175
+ - Basic dashboard: company creation, task list, run status
176
+
177
+ ### Phase 2: Agent Execution
178
+ - Wire up run lifecycle (create task → execute in sandbox → stream results)
179
+ - Terminal session proxy (WebSocket to sandbox)
180
+ - CLI auth flow (`agx auth login`)
181
+ - Provider configuration (user brings their own API keys)
182
+
183
+ ### Phase 3: Multi-Tenancy Hardening
184
+ - Container health monitoring and auto-recovery
185
+ - Resource limit tuning per plan tier
186
+ - Usage metering (run count, compute time, storage)
187
+ - Invite system and role-based access
188
+
189
+ ### Phase 4: Scale & Polish
190
+ - Multi-host container scheduling (when single Docker host is insufficient)
191
+ - Browser streaming (WebRTC, carried over from agx-game)
192
+ - Billing integration
193
+ - Cloud-native option evaluation (Fly.io Machines, etc.)
194
+
195
+ ---
196
+
197
+ ## Open Decisions
198
+
199
+ 1. **Security posture:** Ship with agx-game defaults or tighten for public SaaS?
200
+ 2. **Docker host provider:** Self-managed (Hetzner/OVH) vs. managed (Fly.io Machines)?
201
+ 3. **Billing model:** Per-run, per-compute-minute, or flat tier?
202
+ 4. **API key management:** Users provide their own LLM keys, or we proxy through a shared key with metering?