agor-live 0.21.2 → 0.22.0

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 (431) hide show
  1. package/dist/cli/commands/branch/env/restart.js +1 -1
  2. package/dist/cli/commands/branch/env/start.js +1 -1
  3. package/dist/cli/commands/branch/env/stop.js +1 -1
  4. package/dist/core/api/index.cjs +5 -1
  5. package/dist/core/api/index.d.ts +6 -1
  6. package/dist/core/api/index.d.ts.map +1 -1
  7. package/dist/core/api/index.js +5 -1
  8. package/dist/core/claude/index.cjs +162 -14
  9. package/dist/core/claude/index.js +166 -18
  10. package/dist/core/client/index.cjs +43 -3
  11. package/dist/core/client/index.js +37 -3
  12. package/dist/core/config/browser.cjs +2 -2
  13. package/dist/core/config/browser.js +2 -2
  14. package/dist/core/config/config-manager.d.ts.map +1 -1
  15. package/dist/core/config/constants.d.ts +1 -1
  16. package/dist/core/config/index.cjs +174 -20
  17. package/dist/core/config/index.js +178 -24
  18. package/dist/core/config/types.d.ts +8 -0
  19. package/dist/core/config/types.d.ts.map +1 -1
  20. package/dist/core/db/index.cjs +495 -86
  21. package/dist/core/db/index.js +482 -75
  22. package/dist/core/db/repositories/artifacts.d.ts.map +1 -1
  23. package/dist/core/db/repositories/branches.d.ts +13 -1
  24. package/dist/core/db/repositories/branches.d.ts.map +1 -1
  25. package/dist/core/db/repositories/gateway-channels.d.ts.map +1 -1
  26. package/dist/core/db/repositories/index.d.ts +1 -0
  27. package/dist/core/db/repositories/index.d.ts.map +1 -1
  28. package/dist/core/db/repositories/session-relationships.d.ts +30 -0
  29. package/dist/core/db/repositories/session-relationships.d.ts.map +1 -0
  30. package/dist/core/db/repositories/users.d.ts +11 -0
  31. package/dist/core/db/repositories/users.d.ts.map +1 -1
  32. package/dist/core/db/schema.d.ts +421 -4
  33. package/dist/core/db/schema.d.ts.map +1 -1
  34. package/dist/core/db/schema.postgres.d.ts +226 -2
  35. package/dist/core/db/schema.postgres.d.ts.map +1 -1
  36. package/dist/core/db/schema.sqlite.d.ts +228 -2
  37. package/dist/core/db/schema.sqlite.d.ts.map +1 -1
  38. package/dist/core/drizzle/postgres/0050_artifact_source_session.sql +3 -0
  39. package/dist/core/drizzle/postgres/0051_session_relationships.sql +26 -0
  40. package/dist/core/drizzle/postgres/meta/_journal.json +14 -0
  41. package/dist/core/drizzle/sqlite/0059_artifact_source_session.sql +2 -0
  42. package/dist/core/drizzle/sqlite/0060_session_relationships.sql +23 -0
  43. package/dist/core/drizzle/sqlite/meta/_journal.json +14 -0
  44. package/dist/core/gateway/connector-registry.d.ts.map +1 -1
  45. package/dist/core/gateway/connector.d.ts +22 -0
  46. package/dist/core/gateway/connector.d.ts.map +1 -1
  47. package/dist/core/gateway/connectors/slack.d.ts +35 -3
  48. package/dist/core/gateway/connectors/slack.d.ts.map +1 -1
  49. package/dist/core/gateway/connectors/teams.d.ts +107 -0
  50. package/dist/core/gateway/connectors/teams.d.ts.map +1 -0
  51. package/dist/core/gateway/context.d.ts.map +1 -1
  52. package/dist/core/gateway/index.cjs +552 -52
  53. package/dist/core/gateway/index.d.ts +3 -2
  54. package/dist/core/gateway/index.d.ts.map +1 -1
  55. package/dist/core/gateway/index.js +544 -52
  56. package/dist/core/gateway/system-message.d.ts +21 -0
  57. package/dist/core/gateway/system-message.d.ts.map +1 -1
  58. package/dist/core/index.cjs +616 -127
  59. package/dist/core/index.js +597 -116
  60. package/dist/core/mcp/index.cjs +146 -9
  61. package/dist/core/mcp/index.js +146 -9
  62. package/dist/core/mcp/template-resolver.d.ts.map +1 -1
  63. package/dist/core/seed/index.cjs +375 -59
  64. package/dist/core/seed/index.js +378 -62
  65. package/dist/core/sessions/index.cjs +19 -0
  66. package/dist/core/sessions/index.js +19 -0
  67. package/dist/core/templates/agor-system-prompt.md +21 -53
  68. package/dist/core/templates/session-context.cjs +2 -73
  69. package/dist/core/templates/session-context.d.ts +9 -53
  70. package/dist/core/templates/session-context.d.ts.map +1 -1
  71. package/dist/core/templates/session-context.js +2 -72
  72. package/dist/core/tools/mcp/jwt-auth.cjs +2 -20
  73. package/dist/core/tools/mcp/jwt-auth.d.ts.map +1 -1
  74. package/dist/core/tools/mcp/jwt-auth.js +2 -20
  75. package/dist/core/tools/mcp/oauth-mcp-transport.cjs +2 -15
  76. package/dist/core/tools/mcp/oauth-mcp-transport.d.ts.map +1 -1
  77. package/dist/core/tools/mcp/oauth-mcp-transport.js +2 -15
  78. package/dist/core/tools/mcp/oauth-refresh.cjs +167 -19
  79. package/dist/core/tools/mcp/oauth-refresh.js +167 -19
  80. package/dist/core/types/artifact.d.ts +5 -1
  81. package/dist/core/types/artifact.d.ts.map +1 -1
  82. package/dist/core/types/branch.d.ts +14 -0
  83. package/dist/core/types/branch.d.ts.map +1 -1
  84. package/dist/core/types/gateway.d.ts +1 -1
  85. package/dist/core/types/gateway.d.ts.map +1 -1
  86. package/dist/core/types/id.d.ts +1 -0
  87. package/dist/core/types/id.d.ts.map +1 -1
  88. package/dist/core/types/index.cjs +36 -0
  89. package/dist/core/types/index.js +30 -0
  90. package/dist/core/types/session.d.ts +65 -1
  91. package/dist/core/types/session.d.ts.map +1 -1
  92. package/dist/core/types/task.d.ts +9 -0
  93. package/dist/core/types/task.d.ts.map +1 -1
  94. package/dist/core/unix/index.cjs +371 -55
  95. package/dist/core/unix/index.js +374 -58
  96. package/dist/core/unix/unix-integration-service.d.ts +10 -7
  97. package/dist/core/unix/unix-integration-service.d.ts.map +1 -1
  98. package/dist/core/utils/permission-mode-mapper.cjs +19 -0
  99. package/dist/core/utils/permission-mode-mapper.js +19 -0
  100. package/dist/daemon/declarations.d.ts +7 -0
  101. package/dist/daemon/declarations.d.ts.map +1 -1
  102. package/dist/daemon/hooks/gateway-route.d.ts.map +1 -1
  103. package/dist/daemon/hooks/gateway-route.js +53 -1
  104. package/dist/daemon/index.js +3760 -2107
  105. package/dist/daemon/main.js +3760 -2107
  106. package/dist/daemon/mcp/server.js +155 -17
  107. package/dist/daemon/mcp/tools/analytics.js +6 -7
  108. package/dist/daemon/mcp/tools/artifacts.d.ts.map +1 -1
  109. package/dist/daemon/mcp/tools/artifacts.js +7 -7
  110. package/dist/daemon/mcp/tools/boards.js +6 -7
  111. package/dist/daemon/mcp/tools/branches.js +6 -7
  112. package/dist/daemon/mcp/tools/card-types.js +6 -7
  113. package/dist/daemon/mcp/tools/cards.js +6 -7
  114. package/dist/daemon/mcp/tools/environment.d.ts.map +1 -1
  115. package/dist/daemon/mcp/tools/environment.js +19 -12
  116. package/dist/daemon/mcp/tools/knowledge.js +6 -7
  117. package/dist/daemon/mcp/tools/mcp-servers.js +6 -7
  118. package/dist/daemon/mcp/tools/messages.js +6 -7
  119. package/dist/daemon/mcp/tools/proxies.js +6 -7
  120. package/dist/daemon/mcp/tools/repos.js +6 -7
  121. package/dist/daemon/mcp/tools/schedules.js +6 -7
  122. package/dist/daemon/mcp/tools/search.js +6 -7
  123. package/dist/daemon/mcp/tools/sessions.d.ts.map +1 -1
  124. package/dist/daemon/mcp/tools/sessions.js +140 -11
  125. package/dist/daemon/mcp/tools/tasks.js +6 -7
  126. package/dist/daemon/mcp/tools/users.js +6 -7
  127. package/dist/daemon/mcp/tools/widgets.js +7 -8
  128. package/dist/daemon/register-hooks.d.ts +5 -1
  129. package/dist/daemon/register-hooks.d.ts.map +1 -1
  130. package/dist/daemon/register-hooks.js +404 -179
  131. package/dist/daemon/register-routes.d.ts.map +1 -1
  132. package/dist/daemon/register-routes.js +360 -162
  133. package/dist/daemon/register-services.d.ts.map +1 -1
  134. package/dist/daemon/register-services.js +1928 -671
  135. package/dist/daemon/services/artifacts.d.ts +10 -1
  136. package/dist/daemon/services/artifacts.d.ts.map +1 -1
  137. package/dist/daemon/services/artifacts.js +25 -1
  138. package/dist/daemon/services/branches.d.ts +11 -1
  139. package/dist/daemon/services/branches.d.ts.map +1 -1
  140. package/dist/daemon/services/branches.js +470 -184
  141. package/dist/daemon/services/claude-models.js +879 -339
  142. package/dist/daemon/services/gateway.d.ts +58 -2
  143. package/dist/daemon/services/gateway.d.ts.map +1 -1
  144. package/dist/daemon/services/gateway.js +590 -47
  145. package/dist/daemon/services/groups.d.ts +2 -0
  146. package/dist/daemon/services/groups.d.ts.map +1 -1
  147. package/dist/daemon/services/groups.js +56 -0
  148. package/dist/daemon/services/mcp-servers.d.ts.map +1 -1
  149. package/dist/daemon/services/mcp-servers.js +0 -6
  150. package/dist/daemon/services/scheduler.d.ts.map +1 -1
  151. package/dist/daemon/services/scheduler.js +6 -2
  152. package/dist/daemon/services/sessions.d.ts +11 -3
  153. package/dist/daemon/services/sessions.d.ts.map +1 -1
  154. package/dist/daemon/services/sessions.js +68 -7
  155. package/dist/daemon/services/tasks.d.ts +13 -2
  156. package/dist/daemon/services/tasks.d.ts.map +1 -1
  157. package/dist/daemon/services/tasks.js +42 -26
  158. package/dist/daemon/startup.js +6 -2
  159. package/dist/daemon/utils/session-stop.d.ts +43 -0
  160. package/dist/daemon/utils/session-stop.d.ts.map +1 -0
  161. package/dist/daemon/utils/session-stop.js +102 -0
  162. package/dist/daemon/utils/session-task-state.d.ts +7 -2
  163. package/dist/daemon/utils/session-task-state.d.ts.map +1 -1
  164. package/dist/daemon/utils/session-task-state.js +9 -3
  165. package/dist/daemon/utils/session-tasks.d.ts +4 -4
  166. package/dist/daemon/utils/session-tasks.d.ts.map +1 -1
  167. package/dist/daemon/utils/session-tasks.js +4 -8
  168. package/dist/executor/commands/environment.d.ts +13 -0
  169. package/dist/executor/commands/environment.d.ts.map +1 -0
  170. package/dist/executor/commands/environment.js +287 -0
  171. package/dist/executor/commands/index.d.ts.map +1 -1
  172. package/dist/executor/commands/index.js +5 -1
  173. package/dist/executor/commands/unix.d.ts +8 -1
  174. package/dist/executor/commands/unix.d.ts.map +1 -1
  175. package/dist/executor/commands/unix.js +157 -2
  176. package/dist/executor/payload-types.d.ts +201 -5
  177. package/dist/executor/payload-types.d.ts.map +1 -1
  178. package/dist/executor/payload-types.js +98 -0
  179. package/dist/executor/sdk-handlers/base/mcp-scoping.d.ts.map +1 -1
  180. package/dist/executor/sdk-handlers/base/mcp-scoping.js +14 -0
  181. package/dist/executor/sdk-handlers/claude/message-processor.d.ts.map +1 -1
  182. package/dist/executor/sdk-handlers/claude/message-processor.js +0 -1
  183. package/dist/executor/sdk-handlers/claude/query-builder.d.ts +1 -0
  184. package/dist/executor/sdk-handlers/claude/query-builder.d.ts.map +1 -1
  185. package/dist/executor/sdk-handlers/claude/query-builder.js +91 -39
  186. package/dist/executor/sdk-handlers/codex/prompt-service.d.ts +12 -5
  187. package/dist/executor/sdk-handlers/codex/prompt-service.d.ts.map +1 -1
  188. package/dist/executor/sdk-handlers/codex/prompt-service.js +72 -30
  189. package/dist/executor/sdk-handlers/copilot/prompt-service.d.ts +2 -4
  190. package/dist/executor/sdk-handlers/copilot/prompt-service.d.ts.map +1 -1
  191. package/dist/executor/sdk-handlers/copilot/prompt-service.js +4 -13
  192. package/dist/executor/sdk-handlers/gemini/prompt-service.d.ts +2 -4
  193. package/dist/executor/sdk-handlers/gemini/prompt-service.d.ts.map +1 -1
  194. package/dist/executor/sdk-handlers/gemini/prompt-service.js +4 -13
  195. package/dist/ui/assets/App-DcEY8Ota.js +3 -0
  196. package/dist/ui/assets/App-DcEY8Ota.js.gz +0 -0
  197. package/dist/ui/assets/{ArtifactConsentModal-ParNk5kW.js → ArtifactConsentModal-CiCbK9iv.js} +1 -1
  198. package/dist/ui/assets/ArtifactConsentModal-CiCbK9iv.js.gz +0 -0
  199. package/dist/ui/assets/ArtifactFullscreenPage-CfsTEGKd.js +9 -0
  200. package/dist/ui/assets/ArtifactFullscreenPage-CfsTEGKd.js.gz +0 -0
  201. package/dist/ui/assets/AutocompleteTextarea-BAFFH_5e.js +18 -0
  202. package/dist/ui/assets/AutocompleteTextarea-BAFFH_5e.js.gz +0 -0
  203. package/dist/ui/assets/BoardObjectNodes-D-O6bZIG.js +34 -0
  204. package/dist/ui/assets/BoardObjectNodes-D-O6bZIG.js.gz +0 -0
  205. package/dist/ui/assets/{CodeEditor.inner-D51Z_CLQ.js → CodeEditor.inner-DBgsP4tn.js} +2 -2
  206. package/dist/ui/assets/CodeEditor.inner-DBgsP4tn.js.gz +0 -0
  207. package/dist/ui/assets/ConversationView-CUWR0gR6.js +1 -0
  208. package/dist/ui/assets/ConversationView-CUWR0gR6.js.gz +0 -0
  209. package/dist/ui/assets/KnowledgePage-B2bzlXfn.js +24 -0
  210. package/dist/ui/assets/KnowledgePage-B2bzlXfn.js.gz +0 -0
  211. package/dist/ui/assets/MarketingScreenshotPage-9Qd7eZsm.css +1 -0
  212. package/dist/ui/assets/MarketingScreenshotPage-zv5RUCuV.js +143 -0
  213. package/dist/ui/assets/MarketingScreenshotPage-zv5RUCuV.js.gz +0 -0
  214. package/dist/ui/assets/MobileApp-VgVnsnsN.js +1 -0
  215. package/dist/ui/assets/MobileApp-VgVnsnsN.js.gz +0 -0
  216. package/dist/ui/assets/SessionCanvas-f1-1Gbcw.js +20 -0
  217. package/dist/ui/assets/SessionCanvas-f1-1Gbcw.js.gz +0 -0
  218. package/dist/ui/assets/{App-BAdBsEnV.css → SessionCanvas-mEmYGZhC.css} +1 -1
  219. package/dist/ui/assets/SessionCanvas-mEmYGZhC.css.gz +0 -0
  220. package/dist/ui/assets/{StreamdownDemoPage-B9wbgp2s.js → StreamdownDemoPage-wzWaqWwr.js} +1 -1
  221. package/dist/ui/assets/StreamdownDemoPage-wzWaqWwr.js.gz +0 -0
  222. package/dist/ui/assets/{ThemeSwitcher-ubn6IOz9.js → ThemeSwitcher-Dly2y9pi.js} +1 -1
  223. package/dist/ui/assets/ThemeSwitcher-Dly2y9pi.js.gz +0 -0
  224. package/dist/ui/assets/antd-CfbbHJOz.js +401 -0
  225. package/dist/ui/assets/antd-CfbbHJOz.js.gz +0 -0
  226. package/dist/ui/assets/architecture-U656AL7Q-CykGFbQU.js +1 -0
  227. package/dist/ui/assets/{architectureDiagram-VXUJARFQ-ChmZt3zk.js → architectureDiagram-VXUJARFQ-C8HXAenz.js} +1 -1
  228. package/dist/ui/assets/architectureDiagram-VXUJARFQ-C8HXAenz.js.gz +0 -0
  229. package/dist/ui/assets/{blockDiagram-VD42YOAC-CzGHAHao.js → blockDiagram-VD42YOAC-BhZaEN19.js} +1 -1
  230. package/dist/ui/assets/blockDiagram-VD42YOAC-BhZaEN19.js.gz +0 -0
  231. package/dist/ui/assets/{c4Diagram-YG6GDRKO-DscJyaWN.js → c4Diagram-YG6GDRKO-Dk_UH-sY.js} +1 -1
  232. package/dist/ui/assets/c4Diagram-YG6GDRKO-Dk_UH-sY.js.gz +0 -0
  233. package/dist/ui/assets/channel-D6_nUWlW.js +1 -0
  234. package/dist/ui/assets/{chunk-4BX2VUAB-DoWpTvP8.js → chunk-4BX2VUAB-XprbG2TG.js} +1 -1
  235. package/dist/ui/assets/chunk-55IACEB6-ByzqIgSb.js +1 -0
  236. package/dist/ui/assets/{chunk-ABZYJK2D-RzDCrjE6.js → chunk-ABZYJK2D-BJcrryHK.js} +1 -1
  237. package/dist/ui/assets/chunk-ABZYJK2D-BJcrryHK.js.gz +0 -0
  238. package/dist/ui/assets/{chunk-AGHRB4JF-jidCS5Of.js → chunk-AGHRB4JF-DvxmfbM0.js} +1 -1
  239. package/dist/ui/assets/chunk-AGHRB4JF-DvxmfbM0.js.gz +0 -0
  240. package/dist/ui/assets/{chunk-ATLVNIR6-BEIIfJtC.js → chunk-ATLVNIR6-DbeJ0OrR.js} +1 -1
  241. package/dist/ui/assets/chunk-ATLVNIR6-DbeJ0OrR.js.gz +0 -0
  242. package/dist/ui/assets/{chunk-B4BG7PRW-B8b6dQQ2.js → chunk-B4BG7PRW-C53q2ggf.js} +1 -1
  243. package/dist/ui/assets/chunk-B4BG7PRW-C53q2ggf.js.gz +0 -0
  244. package/dist/ui/assets/{chunk-CVBHYZKI-D-mQAfrk.js → chunk-CVBHYZKI-B3EBSlb3.js} +1 -1
  245. package/dist/ui/assets/{chunk-DI55MBZ5-BfATX3V8.js → chunk-DI55MBZ5-vIyNEQN-.js} +1 -1
  246. package/dist/ui/assets/chunk-DI55MBZ5-vIyNEQN-.js.gz +0 -0
  247. package/dist/ui/assets/chunk-EXTU4WIE-B3ObkuOm.js +1 -0
  248. package/dist/ui/assets/{chunk-FMBD7UC4-fqXscNvc.js → chunk-FMBD7UC4-rddmfK-Z.js} +1 -1
  249. package/dist/ui/assets/{chunk-HN2XXSSU-BCHvD80g.js → chunk-HN2XXSSU-Dttqcg3b.js} +1 -1
  250. package/dist/ui/assets/chunk-HN2XXSSU-Dttqcg3b.js.gz +0 -0
  251. package/dist/ui/assets/{chunk-JA3XYJ7Z-Cp6dqHnY.js → chunk-JA3XYJ7Z-DbNDev3D.js} +1 -1
  252. package/dist/ui/assets/chunk-JA3XYJ7Z-DbNDev3D.js.gz +0 -0
  253. package/dist/ui/assets/{chunk-JZLCHNYA-cKMooY3y.js → chunk-JZLCHNYA-EUmx2y4H.js} +1 -1
  254. package/dist/ui/assets/chunk-JZLCHNYA-EUmx2y4H.js.gz +0 -0
  255. package/dist/ui/assets/{chunk-MI3HLSF2-BlzO5wOE.js → chunk-MI3HLSF2-65n9Mkyc.js} +1 -1
  256. package/dist/ui/assets/chunk-MI3HLSF2-65n9Mkyc.js.gz +0 -0
  257. package/dist/ui/assets/chunk-N4CR4FBY-mv5koXqW.js +2 -0
  258. package/dist/ui/assets/chunk-N4CR4FBY-mv5koXqW.js.gz +0 -0
  259. package/dist/ui/assets/{chunk-QN33PNHL-DIHGQ_pd.js → chunk-QN33PNHL-DsRKK6NR.js} +1 -1
  260. package/dist/ui/assets/{chunk-QXUST7PY-C9l0muI0.js → chunk-QXUST7PY-BCYnMiS3.js} +1 -1
  261. package/dist/ui/assets/chunk-QXUST7PY-BCYnMiS3.js.gz +0 -0
  262. package/dist/ui/assets/chunk-QZHKN3VN-HucAw4xW.js +1 -0
  263. package/dist/ui/assets/{chunk-S3R3BYOJ-VJiLzt2o.js → chunk-S3R3BYOJ-CWMEa9Dc.js} +1 -1
  264. package/dist/ui/assets/chunk-S3R3BYOJ-CWMEa9Dc.js.gz +0 -0
  265. package/dist/ui/assets/{chunk-TZMSLE5B-DZwI0C_2.js → chunk-TZMSLE5B-BuQUQcTr.js} +1 -1
  266. package/dist/ui/assets/chunk-TZMSLE5B-BuQUQcTr.js.gz +0 -0
  267. package/dist/ui/assets/classDiagram-2ON5EDUG-CUT3rPTB.js +1 -0
  268. package/dist/ui/assets/classDiagram-v2-WZHVMYZB-CUT3rPTB.js +1 -0
  269. package/dist/ui/assets/{cose-bilkent-S5V4N54A-Ipik-oSD.js → cose-bilkent-S5V4N54A-CnPB3ARO.js} +1 -1
  270. package/dist/ui/assets/cose-bilkent-S5V4N54A-CnPB3ARO.js.gz +0 -0
  271. package/dist/ui/assets/cursor-QEb7m-rN.png +0 -0
  272. package/dist/ui/assets/{dagre-6UL2VRFP-BDpyWQnh.js → dagre-6UL2VRFP-DhS-k_Se.js} +1 -1
  273. package/dist/ui/assets/dagre-6UL2VRFP-DhS-k_Se.js.gz +0 -0
  274. package/dist/ui/assets/{dagre-CgA4KhUX.js → dagre-KgLoHEuy.js} +1 -1
  275. package/dist/ui/assets/dagre-KgLoHEuy.js.gz +0 -0
  276. package/dist/ui/assets/{diagram-PSM6KHXK-B4GRzxLJ.js → diagram-PSM6KHXK-BZg3MJmb.js} +1 -1
  277. package/dist/ui/assets/diagram-PSM6KHXK-BZg3MJmb.js.gz +0 -0
  278. package/dist/ui/assets/{diagram-QEK2KX5R-BWPW28XI.js → diagram-QEK2KX5R-BPCitvbo.js} +1 -1
  279. package/dist/ui/assets/diagram-QEK2KX5R-BPCitvbo.js.gz +0 -0
  280. package/dist/ui/assets/{diagram-S2PKOQOG-BIHhcGoV.js → diagram-S2PKOQOG-NW4uK6sx.js} +1 -1
  281. package/dist/ui/assets/diagram-S2PKOQOG-NW4uK6sx.js.gz +0 -0
  282. package/dist/ui/assets/{editor-C-HJ7Yw0.js → editor-CzFWIUw2.js} +1 -1
  283. package/dist/ui/assets/editor-CzFWIUw2.js.gz +0 -0
  284. package/dist/ui/assets/{emoji-D8F6B62m.js → emoji-Dkz4Zzv_.js} +1 -1
  285. package/dist/ui/assets/emoji-Dkz4Zzv_.js.gz +0 -0
  286. package/dist/ui/assets/{erDiagram-Q2GNP2WA-ubTaAFcK.js → erDiagram-Q2GNP2WA-me1fboaf.js} +1 -1
  287. package/dist/ui/assets/erDiagram-Q2GNP2WA-me1fboaf.js.gz +0 -0
  288. package/dist/ui/assets/{flowDiagram-NV44I4VS-BHLCTYjI.js → flowDiagram-NV44I4VS-DzE8dGsh.js} +1 -1
  289. package/dist/ui/assets/flowDiagram-NV44I4VS-DzE8dGsh.js.gz +0 -0
  290. package/dist/ui/assets/{ganttDiagram-LVOFAZNH-ClC3pay1.js → ganttDiagram-LVOFAZNH-CFQD09Mi.js} +2 -2
  291. package/dist/ui/assets/ganttDiagram-LVOFAZNH-CFQD09Mi.js.gz +0 -0
  292. package/dist/ui/assets/{gitGraph-F6HP7TQM-DghoobE6.js → gitGraph-F6HP7TQM-CfFE_uAC.js} +1 -1
  293. package/dist/ui/assets/{gitGraphDiagram-NY62KEGX-Clqpiswu.js → gitGraphDiagram-NY62KEGX-CaVoxU4C.js} +1 -1
  294. package/dist/ui/assets/gitGraphDiagram-NY62KEGX-CaVoxU4C.js.gz +0 -0
  295. package/dist/ui/assets/index-BN5_Qq7R.js +324 -0
  296. package/dist/ui/assets/index-BN5_Qq7R.js.gz +0 -0
  297. package/dist/ui/assets/index-DxuPq13l.css +1 -0
  298. package/dist/ui/assets/index-DxuPq13l.css.gz +0 -0
  299. package/dist/ui/assets/{info-NVLQJR56-0ZldEXPQ.js → info-NVLQJR56-i_xHYg3f.js} +1 -1
  300. package/dist/ui/assets/{infoDiagram-ER5ION4S-DMmPX-il.js → infoDiagram-ER5ION4S-2NL93b78.js} +1 -1
  301. package/dist/ui/assets/{journeyDiagram-XKPGCS4Q-CrVickA2.js → journeyDiagram-XKPGCS4Q-CZF-2DHU.js} +1 -1
  302. package/dist/ui/assets/journeyDiagram-XKPGCS4Q-CZF-2DHU.js.gz +0 -0
  303. package/dist/ui/assets/{kanban-definition-3W4ZIXB7-C_BsdHYL.js → kanban-definition-3W4ZIXB7-CfvJIOny.js} +1 -1
  304. package/dist/ui/assets/kanban-definition-3W4ZIXB7-CfvJIOny.js.gz +0 -0
  305. package/dist/ui/assets/{line-CfBP7Yic.js → line-DDv8kOJk.js} +1 -1
  306. package/dist/ui/assets/{linear-BsjageUB.js → linear-Daef-l29.js} +1 -1
  307. package/dist/ui/assets/linear-Daef-l29.js.gz +0 -0
  308. package/dist/ui/assets/{mermaid-parser.core-DZdP-NFq.js → mermaid-parser.core-CdK9QgYV.js} +2 -2
  309. package/dist/ui/assets/mermaid-parser.core-CdK9QgYV.js.gz +0 -0
  310. package/dist/ui/assets/{mermaid.core-TNrI0pHG.js → mermaid.core-D6GS9mU-.js} +3 -3
  311. package/dist/ui/assets/mermaid.core-D6GS9mU-.js.gz +0 -0
  312. package/dist/ui/assets/message-SqLqNYcv.js +36 -0
  313. package/dist/ui/assets/message-SqLqNYcv.js.gz +0 -0
  314. package/dist/ui/assets/{mindmap-definition-VGOIOE7T-BbmaUjMY.js → mindmap-definition-VGOIOE7T-Cb3QMflX.js} +1 -1
  315. package/dist/ui/assets/mindmap-definition-VGOIOE7T-Cb3QMflX.js.gz +0 -0
  316. package/dist/ui/assets/{packet-BFZMPI3H-D_ZhkXuT.js → packet-BFZMPI3H-Bm2uwz4i.js} +1 -1
  317. package/dist/ui/assets/{particles-Dv28pjOd.js → particles-DsJFOarW.js} +1 -1
  318. package/dist/ui/assets/particles-DsJFOarW.js.gz +0 -0
  319. package/dist/ui/assets/{pie-7BOR55EZ-Dn0Q3qNx.js → pie-7BOR55EZ-5i17tVnF.js} +1 -1
  320. package/dist/ui/assets/{pieDiagram-ADFJNKIX-BbyjfYu8.js → pieDiagram-ADFJNKIX-BxIwQWvw.js} +1 -1
  321. package/dist/ui/assets/pieDiagram-ADFJNKIX-BxIwQWvw.js.gz +0 -0
  322. package/dist/ui/assets/{quadrantDiagram-AYHSOK5B-Bc3GqMKz.js → quadrantDiagram-AYHSOK5B-B5HPe4ga.js} +1 -1
  323. package/dist/ui/assets/quadrantDiagram-AYHSOK5B-B5HPe4ga.js.gz +0 -0
  324. package/dist/ui/assets/{radar-NHE76QYJ-BHwoAy1q.js → radar-NHE76QYJ-BTn-tq0k.js} +1 -1
  325. package/dist/ui/assets/{reactflow-BVYPxNhc.js → reactflow-Bf74ngoo.js} +2 -2
  326. package/dist/ui/assets/reactflow-Bf74ngoo.js.gz +0 -0
  327. package/dist/ui/assets/{requirementDiagram-UZGBJVZJ-BQaKKL09.js → requirementDiagram-UZGBJVZJ-YfI6llkX.js} +1 -1
  328. package/dist/ui/assets/requirementDiagram-UZGBJVZJ-YfI6llkX.js.gz +0 -0
  329. package/dist/ui/assets/{sandpack-BQW_FQ7G.js → sandpack-D7koO5op.js} +1 -1
  330. package/dist/ui/assets/sandpack-D7koO5op.js.gz +0 -0
  331. package/dist/ui/assets/{sankeyDiagram-TZEHDZUN-DiJvDvhb.js → sankeyDiagram-TZEHDZUN-DOk_B10B.js} +1 -1
  332. package/dist/ui/assets/sankeyDiagram-TZEHDZUN-DOk_B10B.js.gz +0 -0
  333. package/dist/ui/assets/{sequenceDiagram-WL72ISMW-Dw32824o.js → sequenceDiagram-WL72ISMW-DAe4Um17.js} +1 -1
  334. package/dist/ui/assets/sequenceDiagram-WL72ISMW-DAe4Um17.js.gz +0 -0
  335. package/dist/ui/assets/{stateDiagram-FKZM4ZOC-BCOpNdHV.js → stateDiagram-FKZM4ZOC-CCesDu_C.js} +1 -1
  336. package/dist/ui/assets/stateDiagram-FKZM4ZOC-CCesDu_C.js.gz +0 -0
  337. package/dist/ui/assets/stateDiagram-v2-4FDKWEC3-CMlIrsoO.js +1 -0
  338. package/dist/ui/assets/{syntax-VJrU5BEu.js → syntax-C-M-8jOU.js} +1 -1
  339. package/dist/ui/assets/syntax-C-M-8jOU.js.gz +0 -0
  340. package/dist/ui/assets/{theme-DZtFA8b4.js → theme-BQZdiqwv.js} +1 -1
  341. package/dist/ui/assets/{timeline-definition-IT6M3QCI-Jh_WZzXv.js → timeline-definition-IT6M3QCI-D6P5txjT.js} +1 -1
  342. package/dist/ui/assets/timeline-definition-IT6M3QCI-D6P5txjT.js.gz +0 -0
  343. package/dist/ui/assets/{treemap-KMMF4GRG-CPYIgjxE.js → treemap-KMMF4GRG-Bitm3gy4.js} +1 -1
  344. package/dist/ui/assets/{knowledgeRoutes-CivaUqha.js → useUserLocalStorage-Ckb8HsIw.js} +1 -1
  345. package/dist/ui/assets/useUserLocalStorage-Ckb8HsIw.js.gz +0 -0
  346. package/dist/ui/assets/{xychartDiagram-PRI3JC2R-CERc7Rdb.js → xychartDiagram-PRI3JC2R-CsybjUbd.js} +1 -1
  347. package/dist/ui/assets/xychartDiagram-PRI3JC2R-CsybjUbd.js.gz +0 -0
  348. package/dist/ui/index.html +13 -11
  349. package/dist/ui/index.html.gz +0 -0
  350. package/package.json +10 -9
  351. package/dist/ui/assets/App-9s2WHM6S.js +0 -22
  352. package/dist/ui/assets/App-9s2WHM6S.js.gz +0 -0
  353. package/dist/ui/assets/App-BAdBsEnV.css.gz +0 -0
  354. package/dist/ui/assets/ArtifactConsentModal-ParNk5kW.js.gz +0 -0
  355. package/dist/ui/assets/ArtifactFullscreenPage-VQxLMCiN.js +0 -9
  356. package/dist/ui/assets/ArtifactFullscreenPage-VQxLMCiN.js.gz +0 -0
  357. package/dist/ui/assets/AutocompleteTextarea-3RchrIgk.js +0 -18
  358. package/dist/ui/assets/AutocompleteTextarea-3RchrIgk.js.gz +0 -0
  359. package/dist/ui/assets/CodeEditor.inner-D51Z_CLQ.js.gz +0 -0
  360. package/dist/ui/assets/ConversationView-Dyddw2b1.js +0 -34
  361. package/dist/ui/assets/ConversationView-Dyddw2b1.js.gz +0 -0
  362. package/dist/ui/assets/KnowledgePage-CdftslnF.js +0 -24
  363. package/dist/ui/assets/KnowledgePage-CdftslnF.js.gz +0 -0
  364. package/dist/ui/assets/MobileApp-BdBMpnJ1.js +0 -1
  365. package/dist/ui/assets/MobileApp-BdBMpnJ1.js.gz +0 -0
  366. package/dist/ui/assets/StreamdownDemoPage-B9wbgp2s.js.gz +0 -0
  367. package/dist/ui/assets/ThemeSwitcher-ubn6IOz9.js.gz +0 -0
  368. package/dist/ui/assets/antd-C-HfEC4E.js +0 -400
  369. package/dist/ui/assets/antd-C-HfEC4E.js.gz +0 -0
  370. package/dist/ui/assets/architecture-U656AL7Q-dkBewUpN.js +0 -1
  371. package/dist/ui/assets/architectureDiagram-VXUJARFQ-ChmZt3zk.js.gz +0 -0
  372. package/dist/ui/assets/blockDiagram-VD42YOAC-CzGHAHao.js.gz +0 -0
  373. package/dist/ui/assets/c4Diagram-YG6GDRKO-DscJyaWN.js.gz +0 -0
  374. package/dist/ui/assets/channel-DvRQqEqC.js +0 -1
  375. package/dist/ui/assets/chunk-55IACEB6-DojF2pZN.js +0 -1
  376. package/dist/ui/assets/chunk-ABZYJK2D-RzDCrjE6.js.gz +0 -0
  377. package/dist/ui/assets/chunk-AGHRB4JF-jidCS5Of.js.gz +0 -0
  378. package/dist/ui/assets/chunk-ATLVNIR6-BEIIfJtC.js.gz +0 -0
  379. package/dist/ui/assets/chunk-B4BG7PRW-B8b6dQQ2.js.gz +0 -0
  380. package/dist/ui/assets/chunk-DI55MBZ5-BfATX3V8.js.gz +0 -0
  381. package/dist/ui/assets/chunk-EXTU4WIE-BKt6lPJM.js +0 -1
  382. package/dist/ui/assets/chunk-HN2XXSSU-BCHvD80g.js.gz +0 -0
  383. package/dist/ui/assets/chunk-JA3XYJ7Z-Cp6dqHnY.js.gz +0 -0
  384. package/dist/ui/assets/chunk-JZLCHNYA-cKMooY3y.js.gz +0 -0
  385. package/dist/ui/assets/chunk-MI3HLSF2-BlzO5wOE.js.gz +0 -0
  386. package/dist/ui/assets/chunk-N4CR4FBY-pASDorUx.js +0 -2
  387. package/dist/ui/assets/chunk-N4CR4FBY-pASDorUx.js.gz +0 -0
  388. package/dist/ui/assets/chunk-QXUST7PY-C9l0muI0.js.gz +0 -0
  389. package/dist/ui/assets/chunk-QZHKN3VN-CZskCFCf.js +0 -1
  390. package/dist/ui/assets/chunk-S3R3BYOJ-VJiLzt2o.js.gz +0 -0
  391. package/dist/ui/assets/chunk-TZMSLE5B-DZwI0C_2.js.gz +0 -0
  392. package/dist/ui/assets/classDiagram-2ON5EDUG-BFASUbmZ.js +0 -1
  393. package/dist/ui/assets/classDiagram-v2-WZHVMYZB-BFASUbmZ.js +0 -1
  394. package/dist/ui/assets/cose-bilkent-S5V4N54A-Ipik-oSD.js.gz +0 -0
  395. package/dist/ui/assets/dagre-6UL2VRFP-BDpyWQnh.js.gz +0 -0
  396. package/dist/ui/assets/dagre-CgA4KhUX.js.gz +0 -0
  397. package/dist/ui/assets/diagram-PSM6KHXK-B4GRzxLJ.js.gz +0 -0
  398. package/dist/ui/assets/diagram-QEK2KX5R-BWPW28XI.js.gz +0 -0
  399. package/dist/ui/assets/diagram-S2PKOQOG-BIHhcGoV.js.gz +0 -0
  400. package/dist/ui/assets/editor-C-HJ7Yw0.js.gz +0 -0
  401. package/dist/ui/assets/emoji-D8F6B62m.js.gz +0 -0
  402. package/dist/ui/assets/erDiagram-Q2GNP2WA-ubTaAFcK.js.gz +0 -0
  403. package/dist/ui/assets/flowDiagram-NV44I4VS-BHLCTYjI.js.gz +0 -0
  404. package/dist/ui/assets/ganttDiagram-LVOFAZNH-ClC3pay1.js.gz +0 -0
  405. package/dist/ui/assets/gitGraphDiagram-NY62KEGX-Clqpiswu.js.gz +0 -0
  406. package/dist/ui/assets/index-D9OElx9A.css +0 -1
  407. package/dist/ui/assets/index-D9OElx9A.css.gz +0 -0
  408. package/dist/ui/assets/index-DxPuzG7E.js +0 -350
  409. package/dist/ui/assets/index-DxPuzG7E.js.gz +0 -0
  410. package/dist/ui/assets/journeyDiagram-XKPGCS4Q-CrVickA2.js.gz +0 -0
  411. package/dist/ui/assets/kanban-definition-3W4ZIXB7-C_BsdHYL.js.gz +0 -0
  412. package/dist/ui/assets/knowledgeRoutes-CivaUqha.js.gz +0 -0
  413. package/dist/ui/assets/linear-BsjageUB.js.gz +0 -0
  414. package/dist/ui/assets/mermaid-parser.core-DZdP-NFq.js.gz +0 -0
  415. package/dist/ui/assets/mermaid.core-TNrI0pHG.js.gz +0 -0
  416. package/dist/ui/assets/message-BtWWJ9Af.js +0 -36
  417. package/dist/ui/assets/message-BtWWJ9Af.js.gz +0 -0
  418. package/dist/ui/assets/mindmap-definition-VGOIOE7T-BbmaUjMY.js.gz +0 -0
  419. package/dist/ui/assets/particles-Dv28pjOd.js.gz +0 -0
  420. package/dist/ui/assets/pieDiagram-ADFJNKIX-BbyjfYu8.js.gz +0 -0
  421. package/dist/ui/assets/quadrantDiagram-AYHSOK5B-Bc3GqMKz.js.gz +0 -0
  422. package/dist/ui/assets/reactflow-BVYPxNhc.js.gz +0 -0
  423. package/dist/ui/assets/requirementDiagram-UZGBJVZJ-BQaKKL09.js.gz +0 -0
  424. package/dist/ui/assets/sandpack-BQW_FQ7G.js.gz +0 -0
  425. package/dist/ui/assets/sankeyDiagram-TZEHDZUN-DiJvDvhb.js.gz +0 -0
  426. package/dist/ui/assets/sequenceDiagram-WL72ISMW-Dw32824o.js.gz +0 -0
  427. package/dist/ui/assets/stateDiagram-FKZM4ZOC-BCOpNdHV.js.gz +0 -0
  428. package/dist/ui/assets/stateDiagram-v2-4FDKWEC3-Cuqwvgfg.js +0 -1
  429. package/dist/ui/assets/syntax-VJrU5BEu.js.gz +0 -0
  430. package/dist/ui/assets/timeline-definition-IT6M3QCI-Jh_WZzXv.js.gz +0 -0
  431. package/dist/ui/assets/xychartDiagram-PRI3JC2R-CERc7Rdb.js.gz +0 -0
@@ -79,9 +79,7 @@ export declare class CopilotPromptService {
79
79
  private sessionsRepo;
80
80
  private sessionMCPServerRepo?;
81
81
  private branchesRepo?;
82
- private reposRepo?;
83
82
  private mcpServerRepo?;
84
- private usersRepo?;
85
83
  private client;
86
84
  private stopRequested;
87
85
  private apiKey;
@@ -91,7 +89,7 @@ export declare class CopilotPromptService {
91
89
  private tasksService?;
92
90
  private sessionsService?;
93
91
  private permissionLocks;
94
- constructor(messagesRepo: MessagesRepository, sessionsRepo: SessionRepository, sessionMCPServerRepo?: SessionMCPServerRepository | undefined, branchesRepo?: BranchRepository | undefined, reposRepo?: RepoRepository | undefined, apiKey?: string, mcpServerRepo?: MCPServerRepository | undefined, usersRepo?: UsersRepository | undefined, permissionService?: PermissionService, messagesService?: MessagesService, tasksService?: TasksService, sessionsService?: SessionsPatchClient);
92
+ constructor(messagesRepo: MessagesRepository, sessionsRepo: SessionRepository, sessionMCPServerRepo?: SessionMCPServerRepository | undefined, branchesRepo?: BranchRepository | undefined, _reposRepo?: RepoRepository, apiKey?: string, mcpServerRepo?: MCPServerRepository | undefined, _usersRepo?: UsersRepository, permissionService?: PermissionService, messagesService?: MessagesService, tasksService?: TasksService, sessionsService?: SessionsPatchClient);
95
93
  /**
96
94
  * Build MCP servers configuration for Copilot session
97
95
  *
@@ -100,7 +98,7 @@ export declare class CopilotPromptService {
100
98
  */
101
99
  private buildMcpServers;
102
100
  /**
103
- * Create Agor system prompt for Copilot session context
101
+ * Create static Agor system prompt for Copilot orientation
104
102
  */
105
103
  private buildSystemMessage;
106
104
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-service.d.ts","sourceRoot":"","sources":["../../../src/sdk-handlers/copilot/prompt-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompt-service.d.ts","sourceRoot":"","sources":["../../../src/sdk-handlers/copilot/prompt-service.ts"],"names":[],"mappings":"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"}
@@ -23,9 +23,7 @@ export class CopilotPromptService {
23
23
  sessionsRepo;
24
24
  sessionMCPServerRepo;
25
25
  branchesRepo;
26
- reposRepo;
27
26
  mcpServerRepo;
28
- usersRepo;
29
27
  client = null;
30
28
  stopRequested = new Map();
31
29
  apiKey;
@@ -36,13 +34,11 @@ export class CopilotPromptService {
36
34
  tasksService;
37
35
  sessionsService;
38
36
  permissionLocks = new Map();
39
- constructor(messagesRepo, sessionsRepo, sessionMCPServerRepo, branchesRepo, reposRepo, apiKey, mcpServerRepo, usersRepo, permissionService, messagesService, tasksService, sessionsService) {
37
+ constructor(messagesRepo, sessionsRepo, sessionMCPServerRepo, branchesRepo, _reposRepo, apiKey, mcpServerRepo, _usersRepo, permissionService, messagesService, tasksService, sessionsService) {
40
38
  this.sessionsRepo = sessionsRepo;
41
39
  this.sessionMCPServerRepo = sessionMCPServerRepo;
42
40
  this.branchesRepo = branchesRepo;
43
- this.reposRepo = reposRepo;
44
41
  this.mcpServerRepo = mcpServerRepo;
45
- this.usersRepo = usersRepo;
46
42
  this.apiKey = apiKey;
47
43
  this.messagesRepo = messagesRepo;
48
44
  this.permissionService = permissionService;
@@ -107,15 +103,10 @@ export class CopilotPromptService {
107
103
  return copilotMcpServers;
108
104
  }
109
105
  /**
110
- * Create Agor system prompt for Copilot session context
106
+ * Create static Agor system prompt for Copilot orientation
111
107
  */
112
- async buildSystemMessage(sessionId) {
113
- return renderAgorSystemPrompt(sessionId, {
114
- sessions: this.sessionsRepo,
115
- branches: this.branchesRepo,
116
- repos: this.reposRepo,
117
- users: this.usersRepo,
118
- });
108
+ async buildSystemMessage(_sessionId) {
109
+ return renderAgorSystemPrompt();
119
110
  }
120
111
  /**
121
112
  * Execute prompt with streaming support
@@ -57,11 +57,9 @@ export declare function resolveGeminiInvocationModel(session: {
57
57
  export declare class GeminiPromptService {
58
58
  private sessionsRepo;
59
59
  private branchesRepo?;
60
- private reposRepo?;
61
60
  private mcpServerRepo?;
62
61
  private sessionMCPRepo?;
63
62
  private mcpEnabled?;
64
- private usersRepo?;
65
63
  private tasksService?;
66
64
  private sessionClients;
67
65
  /** Invocation model bound on each cached client — triggers recreate when it changes. */
@@ -69,8 +67,8 @@ export declare class GeminiPromptService {
69
67
  private activeControllers;
70
68
  private apiKey?;
71
69
  private useNativeAuth;
72
- constructor(_messagesRepo: MessagesRepository, sessionsRepo: SessionRepository, apiKey?: string, branchesRepo?: BranchRepository | undefined, reposRepo?: RepoRepository | undefined, mcpServerRepo?: MCPServerRepository | undefined, sessionMCPRepo?: SessionMCPServerRepository | undefined, mcpEnabled?: boolean | undefined, useNativeAuth?: boolean, // Flag from base-executor indicating OAuth should be used
73
- usersRepo?: UsersRepository | undefined, tasksService?: TasksService | undefined);
70
+ constructor(_messagesRepo: MessagesRepository, sessionsRepo: SessionRepository, apiKey?: string, branchesRepo?: BranchRepository | undefined, _reposRepo?: RepoRepository, mcpServerRepo?: MCPServerRepository | undefined, sessionMCPRepo?: SessionMCPServerRepository | undefined, mcpEnabled?: boolean | undefined, useNativeAuth?: boolean, // Flag from base-executor indicating OAuth should be used
71
+ _usersRepo?: UsersRepository, tasksService?: TasksService | undefined);
74
72
  /**
75
73
  * Execute prompt with streaming via @google/gemini-cli-core SDK
76
74
  *
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-service.d.ts","sourceRoot":"","sources":["../../../src/sdk-handlers/gemini/prompt-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompt-service.d.ts","sourceRoot":"","sources":["../../../src/sdk-handlers/gemini/prompt-service.ts"],"names":[],"mappings":"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"}
@@ -31,11 +31,9 @@ export function resolveGeminiInvocationModel(session) {
31
31
  export class GeminiPromptService {
32
32
  sessionsRepo;
33
33
  branchesRepo;
34
- reposRepo;
35
34
  mcpServerRepo;
36
35
  sessionMCPRepo;
37
36
  mcpEnabled;
38
- usersRepo;
39
37
  tasksService;
40
38
  sessionClients = new Map();
41
39
  /** Invocation model bound on each cached client — triggers recreate when it changes. */
@@ -43,15 +41,13 @@ export class GeminiPromptService {
43
41
  activeControllers = new Map();
44
42
  apiKey; // Resolved API key from base-executor
45
43
  useNativeAuth; // Whether to use OAuth (no API key found)
46
- constructor(_messagesRepo, sessionsRepo, apiKey, branchesRepo, reposRepo, mcpServerRepo, sessionMCPRepo, mcpEnabled, useNativeAuth, // Flag from base-executor indicating OAuth should be used
47
- usersRepo, tasksService) {
44
+ constructor(_messagesRepo, sessionsRepo, apiKey, branchesRepo, _reposRepo, mcpServerRepo, sessionMCPRepo, mcpEnabled, useNativeAuth, // Flag from base-executor indicating OAuth should be used
45
+ _usersRepo, tasksService) {
48
46
  this.sessionsRepo = sessionsRepo;
49
47
  this.branchesRepo = branchesRepo;
50
- this.reposRepo = reposRepo;
51
48
  this.mcpServerRepo = mcpServerRepo;
52
49
  this.sessionMCPRepo = sessionMCPRepo;
53
50
  this.mcpEnabled = mcpEnabled;
54
- this.usersRepo = usersRepo;
55
51
  this.tasksService = tasksService;
56
52
  this.apiKey = apiKey;
57
53
  this.useNativeAuth = useNativeAuth ?? false; // Default to false if not provided
@@ -480,18 +476,13 @@ export class GeminiPromptService {
480
476
  const model = invocationModel;
481
477
  // approvalMode already mapped at top of function
482
478
  console.log(`🔧 [Gemini] Creating new client with approval mode: ${permissionMode || 'ask'} → ${approvalMode}`);
483
- // Inject Agor session context via temp file (no race conditions!)
479
+ // Inject static Agor orientation via temp file (no race conditions!)
484
480
  // Gemini SDK supports geminiMdFilePaths parameter to load additional context files.
485
481
  // We use a per-session temp file to avoid race conditions between concurrent sessions.
486
482
  //
487
483
  // IMPORTANT: Gemini uses GEMINI.md (not CLAUDE.md) for project instructions!
488
484
  // User's project GEMINI.md files are still loaded hierarchically.
489
- const agorSystemPrompt = await renderAgorSystemPrompt(sessionId, {
490
- sessions: this.sessionsRepo,
491
- branches: this.branchesRepo,
492
- repos: this.reposRepo,
493
- users: this.usersRepo,
494
- });
485
+ const agorSystemPrompt = await renderAgorSystemPrompt();
495
486
  // Write to temp file (unique per session, no races!)
496
487
  // Use mode 0o600 (rw-------) to prevent other users from reading session metadata
497
488
  const tempSessionContextPath = path.join(os.tmpdir(), `agor-gemini-${sessionId}.md`);
@@ -0,0 +1,3 @@
1
+ import{o as e}from"./rolldown-runtime--c01j_DQ.js";import{$ as t,A as n,An as r,At as i,B as a,Bn as o,Bt as s,Cn as c,Ct as l,Dn as u,Dt as d,E as f,En as p,Et as m,F as h,Fn as g,Ft as _,Gt as v,H as y,Hn as b,In as x,Jt as S,Kn as C,M as w,Mn as T,Mt as E,Nt as D,On as O,Pn as k,Pt as A,Qn as ee,Rn as j,Rt as te,Sn as M,Tt as N,U as P,V as F,Vt as ne,Wn as I,X as re,Xt as ie,Y as ae,Yt as oe,Zt as L,_n as se,_t as R,a as z,an as ce,b as le,bn as B,d as ue,ft as de,gn as fe,gt as pe,jn as me,jt as he,kn as ge,kt as _e,l as ve,m as ye,mt as be,n as xe,nn as Se,o as Ce,on as V,pt as we,qn as Te,qt as Ee,r as De,rn as Oe,tn as H,tt as ke,u as Ae,un as je,ut as Me,vt as Ne,wn as U,wt as Pe,x as Fe,xn as Ie,yn as Le,zn as Re}from"./antd-CfbbHJOz.js";import{B as W,F as ze,G as Be,H as G,P as K,R as Ve,V as He,W as Ue,X as We,a as Ge,d as Ke,dt as qe,f as Je,ht as Ye,mt as q,n as Xe,ot as Ze,t as Qe,u as $e}from"./message-SqLqNYcv.js";import{N as et}from"./editor-CzFWIUw2.js";import{n as tt}from"./theme-BQZdiqwv.js";import{$ as nt,$t as rt,A as it,At as at,C as ot,Ct as st,D as J,Dt as ct,E as lt,Et as ut,Ft as dt,G as ft,H as pt,Ht as mt,It as ht,J as gt,Jt as _t,K as vt,Kt as yt,Nt as bt,O as xt,P as St,Q as Ct,Qt as wt,Rt as Y,S as Tt,St as Et,T as Dt,U as Ot,Ut as kt,V as At,W as jt,X as Mt,Xt as Nt,Y as Pt,Yt as X,Zt as Ft,a as It,b as Lt,bt as Rt,cn as zt,ct as Bt,d as Vt,dt as Ht,f as Ut,ft as Wt,g as Gt,gt as Kt,h as qt,ht as Jt,i as Yt,in as Xt,it as Zt,j as Qt,l as $t,lt as en,m as tn,mt as nn,n as rn,nn as an,nt as on,o as sn,on as cn,ot as ln,p as un,q as dn,qt as fn,r as pn,rn as mn,sn as hn,st as gn,t as _n,tt as vn,u as yn,ut as bn,v as xn,vt as Z,w as Sn,wt as Cn,x as wn,xt as Tn,yt as En,z as Dn}from"./index-BN5_Qq7R.js";import{i as On,n as kn,r as An,t as jn}from"./useUserLocalStorage-Ckb8HsIw.js";import{_ as Mn,a as Nn,c as Pn,d as Fn,f as In,g as Ln,h as Rn,i as zn,l as Bn,m as Vn,n as Hn,o as Un,p as Wn,r as Gn,s as Kn,t as qn,u as Jn}from"./SessionCanvas-f1-1Gbcw.js";import{a as Yn}from"./BoardObjectNodes-D-O6bZIG.js";import{i as Xn,s as Zn,t as Qn}from"./AutocompleteTextarea-BAFFH_5e.js";import{n as $n,t as er}from"./ConversationView-CUWR0gR6.js";import{n as tr,r as nr,t as rr}from"./xterm-BkujP7YO.js";var Q=e(ee(),1),$=et(),ir=(0,Q.createContext)(void 0),ar=(0,Q.createContext)(void 0),or=(0,Q.createContext)(void 0),sr=(0,Q.createContext)(void 0),cr=({children:e,value:t})=>(0,$.jsx)(ir.Provider,{value:t,children:e}),lr=({children:e,value:t})=>(0,$.jsx)(ar.Provider,{value:t,children:e}),ur=({children:e,value:t})=>(0,$.jsx)(or.Provider,{value:t,children:e}),dr=({children:e,value:t})=>(0,$.jsx)(sr.Provider,{value:t,children:e}),fr=({children:e,value:t})=>(0,$.jsx)(cr,{value:(0,Q.useMemo)(()=>({repoById:t.repoById}),[t.repoById]),children:(0,$.jsx)(lr,{value:(0,Q.useMemo)(()=>({userById:t.userById}),[t.userById]),children:(0,$.jsx)(ur,{value:(0,Q.useMemo)(()=>({mcpServerById:t.mcpServerById,userAuthenticatedMcpServerIds:t.userAuthenticatedMcpServerIds}),[t.mcpServerById,t.userAuthenticatedMcpServerIds]),children:e})})}),pr=()=>{let e=(0,Q.useContext)(ir);if(!e)throw Error(`useAppRepoData must be used within an AppRepoDataProvider`);return e},mr=()=>{let e=(0,Q.useContext)(ar);if(!e)throw Error(`useAppUserData must be used within an AppUserDataProvider`);return e},hr=()=>{let e=(0,Q.useContext)(or);if(!e)throw Error(`useAppMcpData must be used within an AppMcpDataProvider`);return e},gr=()=>{let e=(0,Q.useContext)(sr);if(!e)throw Error(`useAppLiveData must be used within an AppLiveDataProvider`);return e},_r=mn();function vr(e){(0,Q.useEffect)(()=>(e?.icon&&e?.name?document.title=`${e.icon} ${e.name}`:e?.name?document.title=e.name:document.title=_r,()=>{document.title=_r}),[e?.icon,e?.name])}function yr(e){let{client:t,enabled:n,maxEvents:r=500}=e,[i,a]=(0,Q.useState)([]),o=(0,Q.useCallback)(()=>{a([])},[]);return(0,Q.useEffect)(()=>{if(!n||!t?.io){a([]);return}let e=(e,...t)=>{if(e===`created`||e===`patched`||e===`updated`||e===`removed`)return;let n=`other`;if(e===`cursor-move`||e===`cursor-leave`||e===`cursor-moved`||e===`cursor-left`||e===`presence-updated`)n=`cursor`;else if(e.includes(`message`)||e===`thinking:chunk`){n=`message`;let e=t.length===1?t[0]:void 0;if(e&&typeof e==`object`&&`content`in e){let t=e.content;Array.isArray(t)&&t.some(e=>{if(typeof e==`object`&&e&&`type`in e){let t=e.type;return t===`tool_use`||t===`tool_result`}return!1})&&(n=`tool`)}}else e.includes(`created`)||e.includes(`patched`)||e.includes(`updated`)||e.includes(`removed`)?n=`crud`:(e===`connect`||e===`disconnect`||e.includes(`connect`))&&(n=`connection`);let i=t.length===0?void 0:t.length===1?t[0]:t,o={id:`${Date.now()}-${Math.random().toString(36).substr(2,9)}`,timestamp:new Date,type:n,eventName:e,data:i};a(e=>[o,...e].slice(0,r))};return t.io.onAny(e),()=>{t.io.offAny(e)}},[t,n,r]),{events:i,clearEvents:o}}function br(e,t,n,r){return new Promise((i,a)=>{let o=document.createElement(`canvas`);o.width=32,o.height=32;let s=o.getContext(`2d`),c=new Image;c.onload=()=>{s.drawImage(c,0,0,32,32),t&&(s.beginPath(),s.arc(7,25,6,0,2*Math.PI),s.fillStyle=`#000000`,s.fill(),s.beginPath(),s.arc(7,25,10/2,0,2*Math.PI),s.fillStyle=`#ffffff`,s.fill()),n&&(s.beginPath(),s.arc(25,25,6,0,2*Math.PI),s.fillStyle=`#000000`,s.fill(),s.beginPath(),s.arc(25,25,10/2,0,2*Math.PI),s.fillStyle=r,s.fill()),i(o.toDataURL())},c.onerror=e=>{a(e)},c.src=e})}function xr(e,t,n){let[r]=(0,Q.useState)(an()),{token:i}=A.useToken();(0,Q.useEffect)(()=>{let a=!1,o=e=>{if(a)return;let t=document.querySelector(`link[rel~='icon']`);t&&(t.href=e)};if(!e)return br(r,!1,!1,i.colorSuccessText).then(o),()=>{a=!0};let s=new Set(n.filter(e=>e.branch_id).map(e=>e.branch_id)),c=Array.from(s).flatMap(e=>t.get(e)||[]).filter(e=>!e.archived);return br(r,c.some(e=>e.status===Ue.RUNNING),c.some(e=>e.ready_for_prompt),i.colorSuccessText).then(o),()=>{a=!0}},[e,t,n,r,i.colorSuccessText])}function Sr(e,t,n){let r=(0,Q.useRef)(new Set),i=(0,Q.useRef)(n);(0,Q.useEffect)(()=>{i.current=n},[n]),(0,Q.useEffect)(()=>{if(!e||!t)return;let n=e.service(`tasks`),a=r.current,o=!1,s=e=>e?.created_by===t,c=e=>{if(!(!e?.task_id||!s(e))){if(e.status===He.RUNNING){a.add(e.task_id);return}a.delete(e.task_id)&&G(e.status)&&It(e,i.current)}},l=e=>{e?.task_id&&a.delete(e.task_id)};return n.on(`created`,c),n.on(`patched`,c),n.on(`updated`,c),n.on(`removed`,l),n.findAll({query:{status:He.RUNNING,created_by:t}}).then(e=>{if(!o)for(let t of e)t?.task_id&&a.add(t.task_id)}).catch(()=>{}),()=>{o=!0,n.removeListener(`created`,c),n.removeListener(`patched`,c),n.removeListener(`updated`,c),n.removeListener(`removed`,l),a.clear()}},[e,t])}async function Cr(e,t){let n=t.repoById.get(e.repoId),r=e.branchName||`private-${_t(e.displayName)}`,i=e.sourceBranch||n?.default_branch||`main`;if(!t.client)throw Error(`Not connected`);let a=e.displayName.trim()||`My Assistant`,o=(await t.client.service(`boards`).create({name:`${a}'s Board`,icon:e.emoji||`🤖`})).board_id;await X({client:t.client,boardId:o,assistantName:a,assistantEmoji:e.emoji});let s={kind:`assistant`,displayName:e.displayName.trim(),emoji:e.emoji||void 0,frameworkRepo:n?.slug,createdViaOnboarding:!1},c=await t.onCreateBranch(e.repoId,{name:r,ref:r,createBranch:!0,sourceBranch:i,pullLatest:!0,boardId:o,custom_context:{assistant:s},...e.description?.trim()?{notes:e.description.trim()}:{}});return c&&(o&&!c.board_id&&await t.onUpdateBranch(c.branch_id,{board_id:o}),o&&await t.client?.service(`boards`).setPrimaryAssistant({boardId:o,branchId:c.branch_id})),c}function wr(e){return!!(e.sessionShortId||e.branchShortId||e.artifactShortId)}var Tr=22,Er={height:Tr,width:Tr,minWidth:Tr,padding:0};function Dr({repo:e,branch:t,sessionCount:r,onOpenBranch:i,onStartEnvironment:a,onStopEnvironment:o,onNukeEnvironment:s,onViewLogs:c,canControlEnvironment:l,connectionDisabled:u=!1,showEnvButtons:d=!0,showNukeEnvironment:f=!0,identityLink:p,compact:m=!1}){let{token:h}=A.useToken(),g=at(),_=$t(e),v=_.hasConfig,y=t.environment_instance,b=At(y),x=t.app_url,S=l??!0,C=S?void 0:`Requires branch 'all' permission or admin access`,w=y?.status||`stopped`,D=w===`running`,O=w===`starting`,k=w===`stopping`,ee=w===`running`||w===`starting`,j=u||!S||!v||!a||O||k||D,M=u||!S||!v||!o||k||!ee,P=e=>n=>{n.stopPropagation(),i?.(t.branch_id,e)},F=()=>{i?.(t.branch_id)},ne=(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(Ne,{style:{fontSize:12}}),!m&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`span`,{style:{fontFamily:h.fontFamilyCode,fontSize:h.fontSizeSM},children:e.slug}),(0,$.jsx)(N,{style:{fontSize:10,opacity:.6}})]}),(0,$.jsx)(`span`,{style:{fontFamily:h.fontFamilyCode,fontSize:h.fontSizeSM,maxWidth:m?220:180,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`},children:t.name})]}),I=()=>{switch(b){case`stopped`:return(0,$.jsx)(ye,{style:{color:h.colorTextDisabled,fontSize:11}});case`starting`:case`stopping`:return(0,$.jsx)(oe,{size:`small`,style:{fontSize:11}});case`healthy`:return(0,$.jsx)(pe,{style:{color:h.colorSuccess,fontSize:11}});case`unhealthy`:return(0,$.jsx)(xe,{style:{color:h.colorWarning,fontSize:11}});case`running`:return(0,$.jsx)(pe,{style:{color:h.colorInfo,fontSize:11}});case`error`:return(0,$.jsx)(be,{style:{color:h.colorError,fontSize:11}});default:return(0,$.jsx)(ye,{style:{color:h.colorTextDisabled,fontSize:11}})}},re=()=>{if(!v)return`Click to configure environment`;let e=y?.last_health_check,t=e?.message?` - ${e.message}`:``;switch(b){case`healthy`:return x?`Healthy - ${x}${t}`:`Healthy${t}`;case`unhealthy`:return x?`Unhealthy - ${x}${t}`:`Unhealthy${t}`;case`running`:return x?`Running - ${x}`:`Running (no health check)`;case`starting`:return`Starting...`;case`stopping`:return`Stopping...`;case`error`:return`Failed to start`;default:return`Stopped`}},ie=p?`${e.slug} / ${t.name} · Open session`:m?`${e.slug} / ${t.name} · Open branch settings`:`Open branch settings`,L={display:`inline-flex`,alignItems:`center`,gap:4,padding:m?`0 6px`:`0 8px`,cursor:`pointer`,height:Tr,color:`inherit`,textDecoration:`none`},se=p?.startsWith(`/`);return(0,$.jsxs)(zt,{color:nt.branch,style:{userSelect:`none`,padding:0,overflow:`hidden`,lineHeight:`${Tr}px`,display:`inline-flex`,alignItems:`stretch`,cursor:`default`},children:[(0,$.jsx)(T,{title:ie,children:p&&se?(0,$.jsx)(Ge,{to:p,onClick:e=>e.stopPropagation(),style:L,children:ne}):p?(0,$.jsx)(`a`,{href:p,onClick:e=>e.stopPropagation(),style:L,children:ne}):(0,$.jsx)(`button`,{type:`button`,onClick:F,style:{display:`inline-flex`,alignItems:`center`,gap:4,padding:m?`0 6px`:`0 8px`,cursor:`pointer`,height:Tr,background:`none`,border:`none`,color:`inherit`,font:`inherit`},children:ne})}),d&&(0,$.jsx)(`div`,{style:{display:`inline-flex`,alignItems:`center`,gap:2,padding:`0 4px`,height:Tr,borderLeft:`1px solid ${h.colorBorderSecondary}`},children:v?(0,$.jsxs)($.Fragment,{children:[D&&x?(0,$.jsx)(T,{title:`Open ${x}`,children:(0,$.jsxs)(`a`,{href:x,target:`_blank`,rel:`noopener noreferrer`,onClick:e=>e.stopPropagation(),style:{display:`inline-flex`,alignItems:`center`,gap:3,color:`inherit`,textDecoration:`none`,padding:`0 2px`},children:[I(),(0,$.jsx)(`span`,{style:{fontFamily:h.fontFamilyCode,fontSize:11},children:`env`})]})}):(0,$.jsx)(T,{title:re(),children:(0,$.jsxs)(`button`,{type:`button`,onClick:P(`environment`),style:{display:`inline-flex`,alignItems:`center`,gap:3,cursor:`pointer`,padding:`0 2px`,background:`none`,border:`none`,color:`inherit`,font:`inherit`},children:[I(),(0,$.jsx)(`span`,{style:{fontFamily:h.fontFamilyCode,fontSize:11},children:`env`})]})}),a&&(0,$.jsx)(T,{title:C??(D?`Environment running`:`Start environment`),children:(0,$.jsx)(U,{type:`text`,size:`small`,"aria-label":`Start environment`,icon:(0,$.jsx)(n,{}),onClick:e=>{e.stopPropagation(),j||a(t.branch_id)},disabled:j,style:Er})}),o&&(0,$.jsx)(T,{title:C??(D?`Stop environment`:O?`Cancel startup`:k?`Stopping...`:`Not running`),children:(0,$.jsx)(U,{type:`text`,size:`small`,"aria-label":`Stop environment`,icon:(0,$.jsx)(ye,{}),onClick:e=>{e.stopPropagation(),M||o(t.branch_id)},disabled:M,style:Er})}),c&&_.logs&&(0,$.jsx)(T,{title:C??`View logs`,children:(0,$.jsx)(U,{type:`text`,size:`small`,"aria-label":`View environment logs`,icon:(0,$.jsx)(Oe,{}),onClick:e=>{e.stopPropagation(),S&&c(t.branch_id)},disabled:!S,style:Er})}),f&&!m&&s&&t.nuke_command&&(0,$.jsx)(T,{title:C??`Nuke environment (destructive)`,children:(0,$.jsx)(U,{type:`text`,size:`small`,danger:!0,"aria-label":`Nuke environment`,icon:(0,$.jsx)(ke,{}),onClick:e=>{e.stopPropagation(),S&&!u&&g(()=>s(t.branch_id))},disabled:u||!S,style:Er})})]}):(0,$.jsx)(T,{title:`Configure environment`,children:(0,$.jsxs)(`button`,{type:`button`,onClick:P(`environment`),style:{display:`inline-flex`,alignItems:`center`,gap:3,cursor:`pointer`,opacity:.5,padding:`0 2px`,background:`none`,border:`none`,color:`inherit`,font:`inherit`},children:[(0,$.jsx)(ae,{style:{fontSize:11}}),(0,$.jsx)(`span`,{style:{fontFamily:h.fontFamilyCode,fontSize:11},children:`env`})]})})}),(0,$.jsxs)(`div`,{style:{display:`inline-flex`,alignItems:`center`,gap:1,padding:`0 3px`,height:Tr,borderLeft:`1px solid ${h.colorBorderSecondary}`},children:[(0,$.jsx)(T,{title:`Sessions${r==null?``:` (${r})`}`,children:(0,$.jsx)(U,{type:`text`,size:`small`,"aria-label":`Sessions`,icon:(0,$.jsx)(ue,{}),onClick:P(`sessions`),style:Er})}),(0,$.jsx)(T,{title:`Files`,children:(0,$.jsx)(U,{type:`text`,size:`small`,"aria-label":`Files`,icon:(0,$.jsx)(te,{}),onClick:P(`files`),style:Er})}),(0,$.jsx)(T,{title:`Schedule`,children:(0,$.jsx)(U,{type:`text`,size:`small`,"aria-label":`Schedule`,icon:(0,$.jsx)(je,{}),onClick:P(`schedule`),style:Er})}),(0,$.jsx)(T,{title:`Edit branch`,children:(0,$.jsx)(U,{type:`text`,size:`small`,"aria-label":`Edit branch`,icon:(0,$.jsx)(E,{}),onClick:e=>{e.stopPropagation(),F()},style:Er})})]})]})}var Or=({branch:e,size:t=12})=>{let n=mt(),r=e?.board_id;return!e||!r?null:(0,$.jsx)(T,{title:`Go to card on board`,children:(0,$.jsx)(m,{style:{fontSize:t,cursor:`pointer`,flexShrink:0,opacity:.5},onClick:t=>{t.stopPropagation(),n(e.branch_id,{boardId:r})}})})},kr=e=>{let t=Lt(e);return t===`success`||t==="default"?null:t},Ar=({board:e,currentBoardId:t,branchById:n,repoById:r,sessionsByBranch:a,onSessionClick:o,onAfterSessionClick:s})=>{let{token:c}=A.useToken(),[l,u]=(0,Q.useState)(``),[d,f]=ct(Bn,`recent`),p=(0,Q.useMemo)(()=>{let e=[];for(let r of n.values())r.board_id===t&&e.push(r.branch_id);return e.flatMap(e=>a.get(e)||[])},[a,n,t]),m=l.trim(),h=Fn(m),_=(0,Q.useMemo)(()=>h?In(p,m).map(({session:e})=>e):Vn(p,d),[p,h,m,d]);return(0,$.jsxs)(`div`,{style:{height:`100%`,position:`relative`,overflow:`hidden`},children:[(0,$.jsx)(`div`,{style:{padding:`16px 24px`,borderBottom:`1px solid ${c.colorBorder}`},children:(0,$.jsx)(Nn,{value:l,onChange:u,sort:d,onSortChange:f,searching:h})}),(0,$.jsx)(`div`,{style:{padding:`8px 0`},children:_.length===0?h?(0,$.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,alignItems:`center`,padding:`28px 16px`,gap:6},children:[(0,$.jsx)(`div`,{style:{width:36,height:36,borderRadius:`50%`,background:c.colorFillTertiary,display:`flex`,alignItems:`center`,justifyContent:`center`,marginBottom:2},children:(0,$.jsx)(g,{style:{fontSize:16,color:c.colorTextTertiary}})}),(0,$.jsx)(i.Text,{strong:!0,style:{fontSize:13},children:`No results`}),(0,$.jsxs)(i.Text,{type:`secondary`,style:{fontSize:12,textAlign:`center`,lineHeight:1.5,maxWidth:200},children:[`Nothing matched `,(0,$.jsx)(i.Text,{code:!0,children:m})]})]}):(0,$.jsx)(i.Text,{type:`secondary`,style:{display:`block`,textAlign:`center`,padding:`24px 0`,fontSize:12},children:`No sessions in this board`}):_.map(e=>{let t=e.branch_id?n.get(e.branch_id):void 0,a=t?r.get(t.repo_id):void 0,l=vt(e,{includeAgentFallback:!0}),u=h&&e.title&&e.description?Jn(e.description,m):null,d=h&&Wn(e,m);return(0,$.jsxs)(`div`,{style:{cursor:`pointer`,padding:`10px 24px`,transition:`background 0.2s`},onMouseEnter:e=>{e.currentTarget.style.background=c.colorBgTextHover},onMouseLeave:e=>{e.currentTarget.style.background=`transparent`},onClick:()=>{o(e.session_id),s?.()},children:[(0,$.jsxs)(`div`,{style:{display:`flex`,alignItems:`flex-start`,gap:8,minWidth:0},children:[(0,$.jsx)(`span`,{style:{flexShrink:0,display:`inline-flex`},children:(()=>{let t=kr(e.status),n=(0,$.jsx)(hn,{tool:e.agentic_tool,size:18});return t?(0,$.jsx)(O,{dot:!0,status:t,offset:[-3,3],children:n}):n})()}),(0,$.jsx)(i.Text,{ellipsis:{tooltip:l},style:{flex:1,minWidth:0},children:(0,$.jsx)(En,{text:l,query:m})}),(0,$.jsx)(Un,{session:e}),(0,$.jsx)(Or,{branch:t})]}),d&&(0,$.jsxs)(i.Text,{type:`secondary`,style:{display:`block`,fontSize:11,marginTop:3,marginLeft:26},children:[`Agent: `,(0,$.jsx)(En,{text:e.agentic_tool,query:m})]}),u&&u!==l&&(0,$.jsx)(i.Text,{type:`secondary`,style:{fontSize:11,display:`block`,marginTop:3,marginLeft:26,lineHeight:1.4,fontStyle:`italic`},children:(0,$.jsx)(En,{text:u,query:m})}),(0,$.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,justifyContent:`space-between`,gap:8,marginTop:6,marginLeft:26,minWidth:0},children:[(0,$.jsx)(`div`,{style:{minWidth:0,overflow:`hidden`},children:t?(0,$.jsx)(Mt,{branch:t.name,compact:!0,title:a?`${a.slug} / ${t.name}`:t.name}):(0,$.jsx)(i.Text,{type:`secondary`,style:{fontSize:12},children:`No branch`})}),(0,$.jsx)(T,{title:Z(e.last_updated),children:(0,$.jsx)(i.Text,{type:`secondary`,style:{fontSize:11,whiteSpace:`nowrap`,flexShrink:0},children:Kt(e.last_updated)})})]})]},e.session_id)})}),e&&(0,$.jsx)(`div`,{style:{position:`absolute`,bottom:0,left:0,right:0,padding:`16px 24px`,borderTop:`1px solid ${c.colorBorder}`,background:c.colorBgContainer},children:(0,$.jsx)(i.Text,{type:`secondary`,style:{fontSize:12},children:h?(0,$.jsxs)($.Fragment,{children:[_.length,` of `,p.length,` · `,(0,$.jsx)(zn,{}),e.description&&` • ${e.description}`]}):`${p.length} session${p.length===1?``:`s`}${e.description?` • ${e.description}`:``}`})})]})},jr=({board:e,activeTab:t,onTabChange:n,primaryAssistantBranch:r,primaryAssistantRepo:a,primaryAssistantInaccessible:o,sessionsByBranch:s,branchById:c,repoById:l,userById:d,currentUserId:p,selectedSessionId:m,onSessionClick:h,onCreateSession:g,onForkSession:_,onSpawnSession:v,onOpenSettings:y,onOpenSessionSettings:b,comments:x=[],boardObjects:S,onSendComment:w,onReplyComment:E,onResolveComment:D,onToggleReaction:O,onDeleteComment:ee,hoveredCommentId:te,selectedCommentId:M,onCollapse:N,client:P})=>{let{token:F}=A.useToken(),{message:ne}=Re.useApp(),I=o?`all-sessions`:`assistant`,[re,ie]=(0,Q.useState)(I),ae=t!==void 0,L=t??re,se=e=>{ie(e),n?.(e)};(0,Q.useEffect)(()=>{ie(I),ae||n?.(I)},[I,e?.board_id,ae,n]);let R=(0,Q.useMemo)(()=>Array.from(c.values()).filter(e=>Ye(e)&&!e.archived).sort((e,t)=>{let n=q(e),r=q(t);return(n?.displayName??e.name).localeCompare(r?.displayName??t.name)}).map(e=>{let t=q(e),n=l.get(e.repo_id),r=t?.displayName??e.name;return{value:e.branch_id,label:r,searchText:`${r} ${e.name} ${n?.slug??``}`,branch:e,repo:n}}),[c,l]),[z,ce]=(0,Q.useState)(),[le,B]=(0,Q.useState)(!1);(0,Q.useEffect)(()=>{z&&R.some(e=>e.value===z)||ce(R[0]?.value)},[R,z]);let ue=async()=>{if(!e||!P||!z)return;let t=c.get(z);if(t){B(!0);try{t.board_id!==e.board_id&&await P.service(`branches`).patch(z,{board_id:e.board_id}),await P.service(`boards`).setPrimaryAssistant({boardId:e.board_id,branchId:z}),ne.success(`Assistant assigned`)}catch(e){ne.error(`Failed to assign assistant: ${e instanceof Error?e.message:String(e)}`)}finally{B(!1)}}},de=(0,Q.useMemo)(()=>r&&s.get(r.branch_id)||[],[r,s]),fe=(()=>{if(r&&a){let e=q(r),t=r.notes?.trim(),n=r.filesystem_status===`creating`;return(0,$.jsxs)(`div`,{style:{padding:16},children:[(0,$.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:10,paddingBottom:12,marginBottom:4,borderBottom:`1px solid ${F.colorBorderSecondary}`},children:[(0,$.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:10,minWidth:0},children:[(0,$.jsx)(`div`,{style:{width:36,height:36,display:`flex`,alignItems:`center`,justifyContent:`center`,flexShrink:0},children:n?(0,$.jsx)(oe,{}):e?.emoji?(0,$.jsx)(`span`,{style:{fontSize:30},children:e.emoji}):(0,$.jsx)(f,{style:{fontSize:30,color:F.colorInfo}})}),(0,$.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,minWidth:0},children:[(0,$.jsx)(i.Title,{level:4,style:{margin:0,fontWeight:600},ellipsis:{tooltip:e?.displayName??r.name},children:e?.displayName??r.name}),(0,$.jsx)(i.Text,{type:`secondary`,style:{fontSize:12},children:`Primary assistant`})]})]}),(0,$.jsxs)(V,{size:4,wrap:!0,children:[(0,$.jsx)(Dr,{repo:a,branch:r,sessionCount:de.length,onOpenBranch:y,showEnvButtons:!1,compact:!0}),r.created_by&&(0,$.jsx)(ft,{createdBy:r.created_by,currentUserId:p,userById:d,prefix:`Created by`}),r.issue_url&&(0,$.jsx)(vn,{issueUrl:r.issue_url,currentRepo:a}),r.pull_request_url&&(0,$.jsx)(Zt,{prUrl:r.pull_request_url,currentRepo:a})]}),t&&(0,$.jsx)(`div`,{className:`markdown-compact`,style:{color:F.colorTextSecondary},children:(0,$.jsx)(St,{content:t,compact:!0,showControls:!1})})]}),(0,$.jsx)(Gn,{branch:r,sessions:de,userById:d,currentUserId:p,selectedSessionId:m,onSessionClick:h,onCreateSession:g,onForkSession:_,onSpawnSession:v,onOpenSessionSettings:b,mode:`panel`,client:P})]})}return o?(0,$.jsx)(`div`,{style:{padding:16},children:(0,$.jsx)(C,{type:`info`,showIcon:!0,message:`Assistant unavailable`,description:`This board has a primary assistant, but you do not have access to that assistant branch.`})}):(0,$.jsxs)(`div`,{style:{padding:16},children:[(0,$.jsx)(j,{image:j.PRESENTED_IMAGE_SIMPLE,description:(0,$.jsx)(i.Text,{type:`secondary`,children:`This board does not have a primary assistant yet.`}),style:{padding:`24px 0 16px`}}),(0,$.jsxs)(V,{orientation:`vertical`,size:12,style:{width:`100%`},children:[(0,$.jsx)(i.Text,{strong:!0,children:`Assign an existing assistant`}),(0,$.jsx)(k,{showSearch:!0,placeholder:`Select an assistant`,value:z,onChange:ce,options:R,optionFilterProp:`searchText`,disabled:le||R.length===0,style:{width:`100%`}}),R.length===0&&(0,$.jsx)(i.Text,{type:`secondary`,style:{fontSize:12},children:`No existing assistants are available to assign.`}),(0,$.jsx)(U,{type:`primary`,onClick:ue,loading:le,disabled:!z||!e||!P,children:`Assign`})]})]})})();return(0,$.jsx)(`div`,{style:{height:`100%`,background:F.colorBgContainer,borderRight:`1px solid ${F.colorBorderSecondary}`,overflow:`hidden`},children:(0,$.jsx)(Ie,{activeKey:L,onChange:e=>se(e),items:[{key:`assistant`,label:`Assistant`,children:(0,$.jsx)(`div`,{style:{height:`calc(100vh - 112px)`,overflow:`auto`},children:fe})},{key:`all-sessions`,label:`All sessions`,children:e?(0,$.jsx)(`div`,{style:{height:`calc(100vh - 112px)`,overflow:`auto`},children:(0,$.jsx)(Ar,{board:e,currentBoardId:e.board_id,branchById:c,repoById:l,sessionsByBranch:s,onSessionClick:h})}):(0,$.jsx)(j,{image:j.PRESENTED_IMAGE_SIMPLE,description:`No board selected`})},{key:`comments`,label:`Comments`,children:e?(0,$.jsx)(`div`,{style:{height:`calc(100vh - 112px)`},children:(0,$.jsx)($n,{client:P,boardId:e.board_id,comments:x,userById:d,currentUserId:p||`unknown`,boardObjects:S,branchById:c,onSendComment:e=>w?.(e),onReplyComment:E,onResolveComment:D,onToggleReaction:O,onDeleteComment:ee,hoveredCommentId:te,selectedCommentId:M})}):(0,$.jsx)(j,{image:j.PRESENTED_IMAGE_SIMPLE,description:`No board selected`})}],style:{height:`100%`},tabBarStyle:{margin:0,padding:`0 12px`},tabBarExtraContent:{right:N?(0,$.jsx)(T,{title:`Collapse panel`,placement:`bottom`,children:(0,$.jsx)(U,{type:`text`,size:`small`,icon:(0,$.jsx)(u,{style:{fontSize:11}}),onClick:N,style:{marginRight:4}})}):void 0}})})};function Mr(e){let[t]=H.useForm(),[n,r]=(0,Q.useState)(!1),[i,a]=(0,Q.useState)(!1),o=(0,Q.useRef)(``),s=(0,Q.useCallback)(()=>{let n=t.getFieldsValue(),i=!!n.displayName?.trim(),a=!!(n.repoId||e?.repo_id);r(i&&a)},[t,e]);return(0,Q.useEffect)(()=>{e&&!t.getFieldValue(`repoId`)&&t.setFieldValue(`repoId`,e.repo_id),s()},[e,t,s]),{form:t,isFormValid:n,setIsFormValid:r,customRepoSelected:i,setCustomRepoSelected:a,validateForm:s,handleDisplayNameChange:(0,Q.useCallback)(e=>{let n=e.target.value,r=t.getFieldValue(`name`),i=`private-${_t(n)}`;(!r||r===o.current)&&(t.setFieldValue(`name`,i),o.current=i),s()},[t,s]),resetForm:(0,Q.useCallback)(()=>{t.resetFields(),r(!1),a(!1),o.current=``},[t])}}var Nr=12e4;function Pr(e,t,{enabled:n=!0}={}){let r=rt(e),[i,a]=(0,Q.useState)(!1),o=(0,Q.useRef)(!1);return(0,Q.useEffect)(()=>{if(r){a(!1),o.current=!1;return}if(!n||!t||o.current)return;o.current=!0,a(!0),Promise.resolve(t({url:wt,slug:Ft,default_branch:`main`})).catch(()=>{});let e=setTimeout(()=>{a(!1),o.current=!1},Nr);return()=>clearTimeout(e)},[r,t,n]),(0,Q.useEffect)(()=>{!n&&!r&&(o.current=!1)},[n,r]),{frameworkRepo:r,isCloning:i&&!r}}var Fr=({form:e,repos:t,frameworkRepo:n,isCloning:r,onDisplayNameChange:a,customRepoSelected:s,onCustomRepoChange:c,extraBeforeAdvanced:l})=>{let u=n?`${n.name||n.slug} (default)`:r?`Setting up framework repository...`:`No framework repository found`;return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(H.Item,{label:`Name`,required:!0,tooltip:`Human-friendly name and icon for this assistant`,children:(0,$.jsxs)(V.Compact,{style:{display:`flex`},children:[(0,$.jsx)(yt,{form:e,fieldName:`emoji`,defaultEmoji:`🤖`}),(0,$.jsx)(H.Item,{name:`displayName`,noStyle:!0,rules:[{required:!0,message:`Please enter a name`}],children:(0,$.jsx)(L,{placeholder:`e.g. PR Reviewer, Command Center`,autoFocus:!0,onChange:a,style:{flex:1}})})]})}),(0,$.jsx)(H.Item,{name:`description`,label:`Description`,tooltip:`What does this assistant do? Visible to other agents via MCP.`,children:(0,$.jsx)(L.TextArea,{placeholder:`e.g. Reviews PRs and provides feedback, Monitors CI/CD pipelines`,rows:2})}),(0,$.jsx)(C,{type:`info`,showIcon:!1,style:{marginBottom:16},title:(0,$.jsx)(i.Text,{type:`secondary`,style:{fontSize:12},children:`Each assistant gets a fresh board and becomes that board's primary assistant.`})}),l,r&&!n&&(0,$.jsx)(C,{type:`info`,showIcon:!0,icon:(0,$.jsx)(I,{}),style:{marginBottom:16},title:`Setting up framework repository`,description:(0,$.jsx)(i.Text,{type:`secondary`,style:{fontSize:12},children:`Cloning preset-io/agor-assistant. This usually takes 10-30 seconds.`})}),(0,$.jsx)(o,{ghost:!0,size:`small`,destroyOnHidden:!1,expandIcon:({isActive:e})=>(0,$.jsx)(x,{rotate:e?180:0}),items:[{key:`advanced`,label:(0,$.jsxs)(V,{size:6,children:[(0,$.jsx)(i.Text,{type:`secondary`,children:`Advanced Assistant Settings`}),(0,$.jsx)(T,{title:`Assistants live in an Agor branch. These settings control the framework repository, branch name, and source branch used to create that assistant branch.`,children:(0,$.jsx)(y,{style:{color:`var(--ant-color-text-tertiary)`}})})]}),children:(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(H.Item,{name:`repoId`,label:`Framework Repository`,children:(0,$.jsx)(k,{placeholder:u,allowClear:!0,showSearch:!0,disabled:r&&!n,filterOption:(e,t)=>String(t?.label??``).toLowerCase().includes(e.toLowerCase()),options:[...t].sort((e,t)=>(e.name||e.slug).localeCompare(t.name||t.slug)).map(e=>({value:e.repo_id,label:`${e.name||e.slug}${e.repo_id===n?.repo_id?` (default)`:``}`})),onChange:e=>{c(!!e&&e!==n?.repo_id)},onClear:()=>c(!1)})}),s&&(0,$.jsx)(C,{type:`warning`,showIcon:!0,icon:(0,$.jsx)(y,{}),style:{marginBottom:16},title:`Custom repository selected`,description:(0,$.jsx)(i.Text,{type:`secondary`,style:{fontSize:12},children:`The repository should be preset-io/agor-assistant or a fork/derivative. It contains an OpenClaw-inspired agent framework adapted for Agor that your assistant needs to operate.`})}),(0,$.jsx)(H.Item,{name:`name`,label:`Branch Name`,rules:[{pattern:/^[a-z0-9-]+$/,message:`Only lowercase letters, numbers, and hyphens allowed`}],tooltip:`Auto-generated from display name. Override if needed.`,children:(0,$.jsx)(L,{placeholder:`private-my-assistant`})}),(0,$.jsx)(H.Item,{name:`sourceBranch`,label:`Source Branch`,children:(0,$.jsx)(L,{placeholder:`main`})})]})}]})]})},Ir=({repoById:e,onValidityChange:t,formRef:n,onCreateRepo:r,availableAgents:a,mcpServerById:s=new Map,currentUser:c,client:l})=>{let u=Array.from(e.values()),{frameworkRepo:d,isCloning:f}=Pr(u,r),[p,m]=(0,Q.useState)(`claude-code`),{form:h,isFormValid:g,customRepoSelected:_,setCustomRepoSelected:v,validateForm:y,handleDisplayNameChange:b}=Mr(d);return(0,Q.useEffect)(()=>{!a.some(e=>e.id===p)&&a[0]?.id&&m(a[0].id)},[a,p]),(0,Q.useEffect)(()=>{let e=c?.default_agentic_config?.[p];h.setFieldsValue({...wn(p,e),...p!==`codex`&&{codexSandboxMode:void 0,codexApprovalPolicy:void 0,codexNetworkAccess:void 0}})},[p,c,h]),(0,Q.useEffect)(()=>{t(g)},[g,t]),n.current=async()=>{try{let e=await h.validateFields(),t=c?.default_agentic_config?.[p],n=e.permissionMode??t?.permissionMode??Be(p),r={displayName:e.displayName.trim(),description:e.description||void 0,emoji:e.emoji||void 0,repoId:e.repoId||d?.repo_id,branchName:e.name||`private-${_t(e.displayName)}`,sourceBranch:e.sourceBranch||`main`,agent:p,modelConfig:e.modelConfig??t?.modelConfig,effort:e.effort??t?.modelConfig?.effort,mcpServerIds:e.mcpServerIds??t?.mcpServerIds,permissionMode:n};if(p===`codex`){let i=ze(n);r.codexSandboxMode=e.codexSandboxMode??t?.codexSandboxMode??i.sandboxMode,r.codexApprovalPolicy=e.codexApprovalPolicy??t?.codexApprovalPolicy??i.approvalPolicy,r.codexNetworkAccess=e.codexNetworkAccess??t?.codexNetworkAccess??i.networkAccess}return r}catch{return null}},(0,$.jsx)(H,{form:h,layout:`vertical`,onFieldsChange:y,initialValues:{sourceBranch:`main`},children:(0,$.jsx)(Fr,{form:h,repos:u,frameworkRepo:d,isCloning:f,onDisplayNameChange:b,customRepoSelected:_,onCustomRepoChange:v,extraBeforeAdvanced:(0,$.jsx)(o,{ghost:!0,size:`small`,defaultActiveKey:[`first-session`],destroyOnHidden:!1,expandIcon:({isActive:e})=>(0,$.jsx)(x,{rotate:e?180:0}),items:[{key:`first-session`,label:(0,$.jsx)(i.Text,{strong:!0,children:`First Session Configuration`}),children:(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(H.Item,{label:`Agentic Tool`,required:!0,children:(0,$.jsx)(cn,{agents:a,selectedAgentId:p,onSelect:e=>m(e),variant:`select`,showComparisonLink:!0})}),(0,$.jsx)(o,{ghost:!0,size:`small`,destroyOnHidden:!1,expandIcon:({isActive:e})=>(0,$.jsx)(x,{rotate:e?180:0}),items:[{key:`session-config`,label:(0,$.jsx)(i.Text,{type:`secondary`,children:`Session Configuration`}),children:(0,$.jsx)(Tt,{agenticTool:p,mcpServerById:s,showHelpText:!1,client:l})}]})]})}],style:{marginBottom:8}})})})},Lr=({onValidityChange:e,formRef:t})=>{let[n]=H.useForm(),r=(0,Q.useCallback)(()=>{setTimeout(()=>{e(!!n.getFieldsValue().name?.trim())},0)},[n,e]);return t.current=async()=>{try{return await n.validateFields(),qt(n)}catch{return null}},(0,$.jsx)(H,{form:n,layout:`vertical`,preserve:!0,onValuesChange:r,children:(0,$.jsx)(tn,{form:n,autoFocus:!0})})},Rr=({repoById:e,boardById:t=new Map,currentBoardId:n,defaultPosition:r,onValidityChange:i,formRef:a,branchStorageConfig:o})=>{let[s]=H.useForm(),[c,l]=(0,Q.useState)(null),u=c?e.get(c):void 0,d=(0,Q.useCallback)(()=>{setTimeout(()=>{let e=s.getFieldsValue();i(!!(e.repoId&&e.sourceBranch&&e.name&&e.boardId))},0)},[s,i]),f=(0,Q.useRef)(!1);return(0,Q.useEffect)(()=>{if(f.current||e.size===0)return;let t=localStorage.getItem(`agor-last-repo-id`);if(t&&e.has(t))f.current=!0,s.setFieldsValue({repoId:t,sourceBranch:e.get(t)?.default_branch,...n?{boardId:n}:{}}),l(t),d();else if(e.size>0){f.current=!0;let t=Rt(e)[0];s.setFieldsValue({repoId:t.repo_id,sourceBranch:t.default_branch,...n?{boardId:n}:{}}),l(t.repo_id),d()}},[e,n,s,d]),a.current=async()=>{try{let e=await s.validateFields(),t=e.refType||`branch`,n=Vt(e.storage_mode,o),i=n===`clone`&&typeof e.clone_depth==`number`&&e.clone_depth>0?e.clone_depth:void 0,a={repoId:e.repoId,name:e.name,ref:e.name,refType:t,createBranch:!0,sourceBranch:e.sourceBranch||u?.default_branch||`main`,pullLatest:!0,issue_url:e.issue_url,pull_request_url:e.pull_request_url,board_id:e.boardId,position:r,storage_mode:n,...i===void 0?{}:{clone_depth:i}};return e.repoId&&localStorage.setItem(`agor-last-repo-id`,e.repoId),a}catch{return null}},(0,$.jsx)(H,{form:s,layout:`vertical`,onValuesChange:d,children:(0,$.jsx)(yn,{repoById:e,boardById:t,selectedRepoId:c,onRepoChange:t=>{l(t);let n=e.get(t);n?.default_branch&&s.setFieldValue(`sourceBranch`,n.default_branch)},defaultBranch:u?.default_branch||`main`,showUrlFields:!0,showBoardSelector:!0,requireBoard:!0,onFormChange:d,branchStorageConfig:o})})},zr=({onValidityChange:e,formRef:t})=>{let[n]=H.useForm(),[r,i]=(0,Q.useState)(`remote`),a=(0,Q.useCallback)(()=>{setTimeout(()=>{let t=n.getFieldsValue();e(r===`local`?!!t.path?.trim():!!(t.url?.trim()&&t.slug?.trim()))},0)},[n,e,r]);return t.current=async()=>{try{let e=await n.validateFields();return r===`local`?{mode:`local`,local:{path:e.path,slug:e.slug||void 0}}:{mode:`remote`,remote:{url:e.url,slug:e.slug,default_branch:e.default_branch||`main`}}}catch{return null}},(0,$.jsx)(H,{form:n,layout:`vertical`,onValuesChange:a,initialValues:{default_branch:`main`},children:(0,$.jsx)(sn,{form:n,mode:`create`,repoMode:r,onRepoModeChange:t=>{let r=t.target.value;i(r),n.resetFields(),n.setFieldsValue({default_branch:r===`remote`?`main`:void 0}),e(!1)}})})},Br={branch:!1,assistant:!1,board:!1,repository:!1},Vr={branch:(0,$.jsxs)($.Fragment,{children:[`A branch (built on`,` `,(0,$.jsx)(`a`,{href:`https://git-scm.com/docs/git-branch`,target:`_blank`,rel:`noopener noreferrer`,children:`git branches`}),`) is essentially a place in the filesystem representing an isolated development branch. This is where one or more coding sessions take place. In Agor, they're generally ephemeral and follow the lifecycle of a given feature.`]}),assistant:`Assistants are long-lived agents with an identity, purpose, and goals. Think of them like employees. They have memory, can build their own skills, coordinate multiple coding agents, typically operate on their own Agor board, and can act proactively.`,board:`Boards are spatial canvases for organizing work. They contain branches, zones, cards, and other visual elements. Use boards to create workspaces for teams, projects, or assistants.`,repository:`Repositories connect your code to Agor. They can be cloned from GitHub or registered from a local path. Once connected, you can create branches for coding tasks.`},Hr={branch:`Create Branch`,assistant:`Create Assistant`,board:`Create Board`,repository:`Add Repository`};function Ur(e){Promise.resolve(e).catch(()=>{})}var Wr=({open:e,onClose:t,repoById:n,boardById:r,currentBoardId:i,defaultPosition:a,availableAgents:o,mcpServerById:s,currentUser:c,client:u,defaultTab:d=`assistant`,onCreateBranch:p,onCreateBoard:m,onCreateRepo:h,onCreateLocalRepo:g,onCreateAssistant:_,branchStorageConfig:v})=>{let[y,b]=(0,Q.useState)(d),[x,S]=(0,Q.useState)(Br),w=x[y],[T,E]=(0,Q.useState)(!1),[D,O]=(0,Q.useState)(null),[k,A]=(0,Q.useState)(null),ee=(0,Q.useRef)(null),j=(0,Q.useRef)(null),M=(0,Q.useRef)(null),N=(0,Q.useRef)(null);(0,Q.useEffect)(()=>{e||(S(Br),b(d),E(!1),O(null),A(null))},[e,d]);let P=(0,Q.useCallback)((e,t)=>{S(n=>n[e]===t?n:{...n,[e]:t})},[]),F=(0,Q.useCallback)(e=>P(`branch`,e),[P]),ne=(0,Q.useCallback)(e=>P(`assistant`,e),[P]),I=(0,Q.useCallback)(e=>P(`board`,e),[P]),re=(0,Q.useCallback)(e=>P(`repository`,e),[P]),ie=e=>{b(e),A(null),O(null)},ae=async()=>{E(!0),A(null),O(null);try{switch(y){case`branch`:{let e=await ee.current?.();e&&(Ur(p(e)),t());break}case`board`:{let e=await j.current?.();e&&(Ur(m(e)),t());break}case`repository`:{let e=await M.current?.();e&&(e.mode===`local`&&e.local?Ur(g(e.local)):e.remote&&Ur(h(e.remote)),t());break}case`assistant`:{let e=await N.current?.();e&&(O(`Creating assistant…`),await _(e,{onStatusChange:O}),t());break}}}catch(e){A(e instanceof Error?e.message:String(e))}finally{E(!1)}},oe=()=>{T||t()},L=[{key:`assistant`,label:(0,$.jsxs)(`span`,{children:[(0,$.jsx)(f,{style:{marginRight:8}}),`Assistant`]}),children:(0,$.jsxs)(`div`,{children:[(0,$.jsx)(C,{type:`info`,showIcon:!0,description:Vr.assistant,style:{marginBottom:16}}),(0,$.jsx)(Ir,{repoById:n,onValidityChange:ne,formRef:N,onCreateRepo:h,availableAgents:o,mcpServerById:s,currentUser:c,client:u})]})},{key:`branch`,label:(0,$.jsxs)(`span`,{children:[(0,$.jsx)(Ne,{style:{marginRight:8}}),`Branch`]}),children:(0,$.jsxs)(`div`,{children:[(0,$.jsx)(C,{type:`info`,showIcon:!0,description:Vr.branch,style:{marginBottom:16}}),(0,$.jsx)(Rr,{repoById:n,boardById:r,currentBoardId:i,defaultPosition:a,onValidityChange:F,formRef:ee,branchStorageConfig:v})]})},{key:`board`,label:(0,$.jsxs)(`span`,{children:[(0,$.jsx)(l,{style:{marginRight:8}}),`Board`]}),children:(0,$.jsxs)(`div`,{children:[(0,$.jsx)(C,{type:`info`,showIcon:!0,description:Vr.board,style:{marginBottom:16}}),(0,$.jsx)(Lr,{onValidityChange:I,formRef:j})]})},{key:`repository`,label:(0,$.jsxs)(`span`,{children:[(0,$.jsx)(te,{style:{marginRight:8}}),`Repository`]}),children:(0,$.jsxs)(`div`,{children:[(0,$.jsx)(C,{type:`info`,showIcon:!0,description:Vr.repository,style:{marginBottom:16}}),(0,$.jsx)(zr,{onValidityChange:re,formRef:M})]})}];return(0,$.jsxs)(Ee,{title:`Create New...`,open:e,onCancel:oe,destroyOnHidden:!0,width:720,closable:!T,maskClosable:!T,keyboard:!T,footer:[(0,$.jsx)(U,{onClick:oe,disabled:T,children:`Cancel`},`cancel`),(0,$.jsx)(U,{type:`primary`,onClick:ae,disabled:!w,loading:T,children:T&&D?D:Hr[y]},`create`)],styles:{body:{padding:`8px 0 0`}},children:[(0,$.jsx)(Ie,{activeKey:y,onChange:ie,items:L,style:{minHeight:360}}),k&&(0,$.jsx)(C,{type:`error`,showIcon:!0,message:`Couldn't finish creating this item`,description:k,style:{marginTop:16}})]})},{Text:Gr}=i,Kr=Q.memo(({event:e,branchById:t,sessionById:n,sessionsByBranch:r,repos:i,userById:a,currentUserId:o,selectedSessionId:s,branchActions:c,client:l})=>{let{token:u}=A.useToken(),d=()=>{switch(e.type){case`cursor`:return(0,$.jsx)(m,{style:{color:u.colorInfo}});case`message`:return(0,$.jsx)(h,{style:{color:u.colorSuccess}});case`tool`:return(0,$.jsx)(ve,{style:{color:u.colorPrimary}});case`crud`:return(0,$.jsx)(Ae,{style:{color:u.colorWarning}});case`connection`:return(0,$.jsx)(Pe,{style:{color:u.colorError}});default:return(0,$.jsx)(ve,{style:{color:u.colorTextSecondary}})}},f=()=>{switch(e.type){case`cursor`:return`blue`;case`message`:return`green`;case`tool`:return`purple`;case`crud`:return`orange`;case`connection`:return`red`;default:return`default`}},p=e=>e.toLocaleTimeString(`en-US`,{hour12:!1,hour:`2-digit`,minute:`2-digit`,second:`2-digit`,fractionalSecondDigits:3}),g=e=>{if(e==null)return``;try{return JSON.stringify(e,null,2)}catch{return String(e)}},_=e=>{let t=[`created`,`patched`,`updated`,`removed`].find(t=>e.includes(t));return t?{entity:e.replace(t,``).trim(),action:t}:{entity:e}},v=e.data&&typeof e.data==`object`&&`session_id`in e.data?e.data.session_id:void 0,b=e.data&&typeof e.data==`object`&&`branch_id`in e.data?e.data.branch_id:void 0,x=e.data&&typeof e.data==`object`&&`created_by`in e.data?e.data.created_by:void 0,S=v?n.get(v):void 0,C=b||S?.branch_id,w=C?t.get(C):void 0,T=w?i.find(e=>e.repo_id===w.repo_id):void 0,E=w&&r.get(w.branch_id)||[],D=x?a.get(x):void 0,{entity:O,action:k}=_(e.eventName),ee=e.data?(0,$.jsx)(`div`,{style:{maxWidth:400,maxHeight:400,overflow:`auto`},children:(0,$.jsx)(`pre`,{style:{margin:0,padding:12,background:u.colorBgLayout,borderRadius:u.borderRadiusSM,fontSize:11,wordBreak:`break-all`,whiteSpace:`pre-wrap`},children:g(e.data)})}):(0,$.jsx)(Gr,{type:`secondary`,children:`No data`});return(0,$.jsxs)(`div`,{style:{padding:`6px 12px`,borderLeft:`3px solid ${u.colorPrimary}`,borderBottom:`1px solid ${u.colorBorderSecondary}`,background:u.colorBgContainer,display:`flex`,flexWrap:`wrap`,alignItems:`center`,gap:4,fontSize:12},children:[d(),(0,$.jsx)(Gr,{code:!0,style:{fontSize:11,color:u.colorTextSecondary,minWidth:85},children:p(e.timestamp)}),(0,$.jsx)(zt,{color:f(),style:{margin:0,fontSize:11,minWidth:70,textAlign:`center`},children:e.type}),O&&(0,$.jsx)(zt,{style:{margin:0,fontSize:11,backgroundColor:u.colorBgContainer,borderColor:u.colorBorder,color:u.colorText},children:O}),k&&(0,$.jsx)(zt,{color:k===`created`?`green`:k===`removed`?`red`:k===`patched`||k===`updated`?`orange`:`default`,style:{margin:0,fontSize:11},children:k}),!O&&!k&&(0,$.jsx)(Gr,{strong:!0,style:{fontSize:12,flex:1,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`},children:e.eventName}),(0,$.jsx)(`div`,{style:{flex:1}}),v&&(0,$.jsx)(Jt,{id:v,icon:we,color:nt.session,copyLabel:`Session ID`,metadataCard:S?(0,$.jsx)(jt,{session:S,branch:w,repo:T,userById:a,currentUserId:o,compact:!0}):void 0}),C&&w&&T&&(0,$.jsx)(Jt,{id:C,label:w.name,icon:te,color:nt.branch,copyLabel:`Branch ID`,metadataCard:(0,$.jsx)(Hn,{branch:w,repo:T,sessions:E,userById:a,currentUserId:o,selectedSessionId:s,inPopover:!0,client:l,...c})}),D&&(0,$.jsx)(Bt,{user:D,compact:!0,style:{margin:0,fontSize:11}}),e.data?(0,$.jsx)(me,{content:ee,title:`Event Data`,trigger:`click`,placement:`left`,children:(0,$.jsx)(U,{type:`text`,size:`small`,icon:(0,$.jsx)(y,{}),style:{padding:`0 4px`}})}):null]})}),{Text:qr,Title:Jr}=i,Yr=({collapsed:e,onToggleCollapse:t,events:r,onClear:i,width:a=700,currentUserId:o,selectedSessionId:s,branchActions:c,currentBoard:l,client:u})=>{let{token:d}=A.useToken(),{branchById:f,sessionById:p,sessionsByBranch:m}=gr(),{repoById:h}=pr(),{userById:g}=mr(),_=(0,Q.useMemo)(()=>Array.from(h.values()),[h]),{onFork:v,onSubsession:y,onOpenTerminal:b,onStartEnvironment:x,onStopEnvironment:S,onViewLogs:C}=Mn(),T=(0,Q.useMemo)(()=>({...c,onForkSession:v,onSpawnSession:y,onOpenTerminal:b,onStartEnvironment:x,onStopEnvironment:S,onViewLogs:C}),[c,v,y,b,x,S,C]),[E,ee]=(0,Q.useState)(!1),[te,M]=(0,Q.useState)(!1),[N,P]=(0,Q.useState)(!1),[F,ne]=(0,Q.useState)(!1),[I,re]=(0,Q.useState)(new Set),[ie,ae]=(0,Q.useState)(new Set),[oe,L]=(0,Q.useState)([]),se=()=>{F||L(r),ne(!F)},R=F?oe:r,z=(0,Q.useMemo)(()=>R.filter(e=>{if(!E&&e.type===`cursor`||!te&&e.type===`message`||!N&&e.eventName.includes(`terminals`)||I.size>0&&!I.has(e.type))return!1;if(ie.size>0&&e.type===`crud`){let t=[`created`,`patched`,`updated`,`removed`].find(t=>e.eventName.includes(t));if(!t||!ie.has(t))return!1}return!0}),[R,E,te,N,I,ie]),ce=R.length,le=z.length,B=F?r.length-oe.length:0;return e?null:(0,$.jsxs)(`div`,{style:{width:`100%`,height:`100%`,backgroundColor:d.colorBgContainer,borderLeft:`1px solid ${d.colorBorder}`,display:`flex`,flexDirection:`column`},children:[(0,$.jsxs)(`div`,{style:{padding:12,borderBottom:`1px solid ${d.colorBorder}`,display:`flex`,alignItems:`center`,justifyContent:`space-between`},children:[(0,$.jsxs)(V,{children:[(0,$.jsx)(Pe,{}),(0,$.jsx)(Jr,{level:5,style:{margin:0},children:`Live Event Stream`}),(0,$.jsx)(zt,{color:`blue`,style:{fontSize:10,marginLeft:4},children:`BETA`}),l&&(0,$.jsx)(zt,{icon:l.icon?(0,$.jsx)(`span`,{children:l.icon}):void 0,style:{fontSize:11,marginLeft:4},children:l.name})]}),t&&(0,$.jsx)(U,{type:`text`,size:`small`,icon:(0,$.jsx)(Te,{}),onClick:t,danger:!0})]}),(0,$.jsx)(`div`,{style:{padding:`12px 12px 8px`,borderBottom:`1px solid ${d.colorBorder}`,backgroundColor:d.colorBgContainer},children:(0,$.jsxs)(V,{size:`small`,children:[(0,$.jsx)(U,{icon:F?(0,$.jsx)(n,{}):(0,$.jsx)(w,{}),onClick:se,type:F?`primary`:`default`,size:`small`,children:F?`Resume`:`Pause`}),(0,$.jsx)(U,{icon:(0,$.jsx)(D,{}),onClick:i,disabled:ce===0,type:`text`,size:`small`,danger:!0,children:`Clear`})]})}),(0,$.jsxs)(`div`,{style:{padding:12,borderBottom:`1px solid ${d.colorBorder}`,backgroundColor:d.colorBgContainer},children:[(0,$.jsxs)(`div`,{style:{marginBottom:12,display:`flex`,alignItems:`center`,gap:4},children:[(0,$.jsx)(qr,{type:`secondary`,style:{fontSize:12},children:`Showing`}),(0,$.jsx)(O,{count:le,showZero:!0,style:{backgroundColor:d.colorPrimaryBgHover,color:d.colorText}}),(0,$.jsx)(qr,{type:`secondary`,style:{fontSize:12},children:`out of`}),(0,$.jsx)(O,{count:ce,showZero:!0,style:{backgroundColor:d.colorPrimaryBgHover,color:d.colorText}}),(0,$.jsx)(qr,{type:`secondary`,style:{fontSize:12},children:`events`}),F&&B>0&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(qr,{type:`secondary`,style:{fontSize:12,marginLeft:8},children:`•`}),(0,$.jsx)(O,{count:B,style:{backgroundColor:d.colorWarningBg,color:d.colorWarning}}),(0,$.jsx)(qr,{type:`warning`,style:{fontSize:11},children:`new while paused`})]})]}),(0,$.jsx)(qr,{type:`secondary`,style:{display:`block`,marginBottom:8,fontSize:12},children:`Quick Filters:`}),(0,$.jsxs)(V,{wrap:!0,size:`middle`,style:{width:`100%`},children:[(0,$.jsx)(Le,{checked:E,onChange:e=>ee(e.target.checked),children:(0,$.jsx)(qr,{style:{fontSize:12},children:`Cursor movement`})}),(0,$.jsx)(Le,{checked:te,onChange:e=>M(e.target.checked),children:(0,$.jsx)(qr,{style:{fontSize:12},children:`Message streams`})}),(0,$.jsx)(Le,{checked:N,onChange:e=>P(e.target.checked),children:(0,$.jsx)(qr,{style:{fontSize:12},children:`Terminal data`})})]}),(0,$.jsxs)(V,{orientation:`horizontal`,size:`small`,style:{width:`100%`,marginTop:12},wrap:!0,children:[(0,$.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,flex:1,minWidth:200},children:[(0,$.jsx)(qr,{type:`secondary`,style:{marginBottom:4,fontSize:11},children:`Event Types:`}),(0,$.jsx)(k,{mode:`multiple`,placeholder:`Filter by type`,value:Array.from(I),onChange:e=>re(new Set(e)),style:{width:`100%`},size:`small`,allowClear:!0,maxTagCount:`responsive`,children:[`cursor`,`message`,`tool`,`crud`,`connection`,`other`].map(e=>(0,$.jsx)(k.Option,{value:e,children:e},e))})]}),(0,$.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,flex:1,minWidth:200},children:[(0,$.jsx)(qr,{type:`secondary`,style:{marginBottom:4,fontSize:11},children:`CRUD Operations:`}),(0,$.jsx)(k,{mode:`multiple`,placeholder:`Filter by operation`,value:Array.from(ie),onChange:e=>ae(new Set(e)),style:{width:`100%`},size:`small`,allowClear:!0,maxTagCount:`responsive`,children:[`created`,`patched`,`updated`,`removed`].map(e=>(0,$.jsx)(k.Option,{value:e,children:e},e))})]})]})]}),(0,$.jsx)(`div`,{style:{flex:1,overflow:`auto`},children:z.length===0?(0,$.jsx)(j,{description:ce===0?`No events captured yet`:`No events match current filters`,style:{marginTop:60}}):(0,$.jsx)(`div`,{style:{border:`1px solid ${d.colorBorderSecondary}`,borderRadius:d.borderRadius,overflow:`hidden`,margin:12},children:z.map(e=>(0,$.jsx)(Kr,{event:e,branchById:f,sessionById:p,sessionsByBranch:m,repos:_,userById:g,currentUserId:o,selectedSessionId:s,branchActions:T,client:u},e.id))})})]})},{Title:Xr}=i,Zr=({title:e,icon:t,info:n,extra:r})=>{let{token:i}=A.useToken();return(0,$.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,justifyContent:`space-between`,gap:12,marginBottom:12},children:[(0,$.jsxs)(V,{size:8,children:[t,(0,$.jsx)(Xr,{level:4,style:{margin:0},children:e}),n&&(0,$.jsx)(me,{content:(0,$.jsx)(`div`,{style:{maxWidth:320},children:n}),trigger:`hover`,placement:`rightTop`,children:(0,$.jsx)(y,{style:{color:i.colorTextTertiary,cursor:`help`}})})]}),r]})},Qr=(e,t)=>{if(e.startsWith(`#`)){let n=e.slice(1),r=n.length===3?n.split(``).map(e=>`${e}${e}`).join(``):n;if(r.length===6){let e=Number.parseInt(r,16);return`rgba(${e>>16&255}, ${e>>8&255}, ${e&255}, ${t})`}}let n=e.match(/^rgba?\(([^)]+)\)$/);if(n){let[e,r,i]=n[1].split(`,`).map(e=>e.trim()).slice(0,3);return`rgba(${e}, ${r}, ${i}, ${t})`}return e},$r=(e,t=.5)=>({background:Qr(e.colorBgContainer,t),backgroundColor:Qr(e.colorBgContainer,t),backdropFilter:`blur(12px)`,WebkitBackdropFilter:`blur(12px)`}),{Text:ei}=i,ti=100,ni=({icon:e,message:t,time:n})=>{let{token:i}=A.useToken();return(0,$.jsx)(S.Item,{style:{padding:`10px 0`},children:(0,$.jsxs)(V,{align:`start`,children:[(0,$.jsx)(r,{size:`small`,style:{background:i.colorFillSecondary,color:i.colorText},children:e}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`div`,{children:t}),n&&(0,$.jsx)(ei,{type:`secondary`,style:{fontSize:12},children:Kt(n)})]})]})})},ri=({branchById:e,boardById:t,sessionById:n,userById:r,onBoardClick:i,onBranchClick:a,onSessionClick:o})=>{let{token:s}=A.useToken(),c=$r(s),[l,u]=(0,Q.useState)(`all`),d=(0,Q.useMemo)(()=>({cursor:`pointer`,marginInlineEnd:0}),[]),p=(0,Q.useCallback)((e,n)=>{let o=e.board_id?t.get(e.board_id):void 0,s=r.get(e.created_by),c=q(e),l=c?.displayName??e.name;return(0,$.jsxs)(V,{size:4,wrap:!0,children:[s?(0,$.jsx)(Bt,{user:s,compact:!0}):(0,$.jsx)(ei,{strong:!0,children:`Someone`}),(0,$.jsx)(ei,{type:`secondary`,children:`created`}),n?(0,$.jsx)(gt,{name:l,emoji:c?.emoji,compact:!0,title:e.name,onClick:()=>a(e.branch_id),style:d}):(0,$.jsx)(Mt,{branch:l,compact:!0,title:e.name,onClick:()=>a(e.branch_id)}),o&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(ei,{type:`secondary`,children:`on`}),(0,$.jsx)(Pt,{board:o,compact:!0,onClick:()=>i(o.board_id),style:d})]})]})},[t,d,i,a,r]),m=(0,Q.useCallback)(n=>{let s=e.get(n.branch_id),c=s?.board_id?t.get(s.board_id):void 0,l=r.get(n.created_by),u=vt(n,{includeAgentFallback:!0,includeIdFallback:!0}),f=new Date(n.created_at).getTime(),p=new Date(n.last_updated).getTime(),m=Math.abs(p-f)<1e3?`started`:`updated`;return(0,$.jsxs)(V,{size:4,wrap:!0,children:[l?(0,$.jsx)(Bt,{user:l,compact:!0}):(0,$.jsx)(ei,{strong:!0,children:`Someone`}),(0,$.jsx)(ei,{type:`secondary`,children:m}),(0,$.jsx)(me,{trigger:`hover`,title:(0,$.jsx)(ei,{style:{maxWidth:320,display:`block`},children:u}),content:(0,$.jsxs)(ei,{type:`secondary`,style:{fontSize:12},children:[n.agentic_tool,` · `,n.status.replaceAll(`_`,` `)]}),children:(0,$.jsx)(ln,{ariaLabel:u,title:u,onClick:()=>o(n.session_id),style:{...d,display:`inline-flex`,alignItems:`center`,paddingInline:6}})}),s&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(ei,{type:`secondary`,children:`in`}),(0,$.jsx)(Mt,{branch:s.name,compact:!0,onClick:()=>a(s.branch_id)})]}),c&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(ei,{type:`secondary`,children:`on`}),(0,$.jsx)(Pt,{board:c,compact:!0,onClick:()=>i(c.board_id),style:d})]})]})},[t,e,i,a,o,d,r]),h=(0,Q.useMemo)(()=>[...Array.from(e.values()).filter(e=>!e.archived).map(e=>{let t=Ye(e);return{id:`branch:${e.branch_id}`,type:t?`assistants`:`branches`,dttm:e.created_at,entityId:e.branch_id}}),...Array.from(n.values()).filter(e=>!e.archived).map(e=>({id:`session:${e.session_id}`,type:`sessions`,dttm:e.last_updated,entityId:e.session_id}))].filter(e=>l===`all`||e.type===l).sort((e,t)=>new Date(t.dttm).getTime()-new Date(e.dttm).getTime()).slice(0,ti),[e,n,l]),g=(0,Q.useCallback)(e=>e.type===`sessions`?(0,$.jsx)(Ce,{}):e.type===`assistants`?(0,$.jsx)(f,{}):(0,$.jsx)(Ne,{}),[]),_=(0,Q.useCallback)(t=>{if(t.type===`sessions`){let e=n.get(t.entityId);return e?m(e):null}let r=e.get(t.entityId);return r?p(r,t.type===`assistants`):null},[e,p,n,m]);return(0,$.jsxs)(B,{style:{minHeight:0,flex:1,...c},styles:{body:{height:`100%`,display:`flex`,flexDirection:`column`,background:`transparent`}},children:[(0,$.jsx)(Zr,{title:`Team activity`,icon:(0,$.jsx)(ue,{}),info:`Up to ${ti} recent branch, assistant, and session events derived from local state and sorted together by event time. A persisted activity summary endpoint can replace this later for comments, artifacts, and prompt events.`,extra:(0,$.jsx)(fe,{size:`small`,value:l,onChange:u,options:[{label:(0,$.jsx)(T,{title:`All activity`,children:`All`}),value:`all`},{label:(0,$.jsx)(T,{title:`Branches`,children:(0,$.jsx)(Ne,{})}),value:`branches`},{label:(0,$.jsx)(T,{title:`Sessions`,children:(0,$.jsx)(Ce,{})}),value:`sessions`},{label:(0,$.jsx)(T,{title:`Assistants`,children:(0,$.jsx)(f,{})}),value:`assistants`}]})}),(0,$.jsx)(`div`,{style:{overflow:`auto`,minHeight:0},children:h.length===0?(0,$.jsx)(j,{image:j.PRESENTED_IMAGE_SIMPLE,description:`No recent activity`}):(0,$.jsx)(S,{rowKey:`id`,dataSource:h,renderItem:e=>{let t=_(e);return t?(0,$.jsx)(ni,{icon:g(e),message:t,time:e.dttm}):null}})})]})},{Text:ii}=i,ai=50,oi=new Set([`running`,`stopping`,`awaiting_permission`,`awaiting_input`]),si=e=>{let t=new Map;for(let n of e.values()){if(n.archived||!n.board_id)continue;let e=t.get(n.board_id)??[];e.push(n),t.set(n.board_id,e)}return t},ci=e=>{let t=new Map;for(let[n,r]of e){let e=r.filter(e=>!e.archived);e.length>0&&t.set(n,e)}return t},li=({boardById:e,recentBoardIds:t,branchById:n,sessionsByBranch:r})=>{let i=new Map((t??[]).map((e,t)=>[e,t])),a=si(n),o=ci(r);return Array.from(e.values()).filter(e=>!e.archived).map(e=>{let t=a.get(e.board_id)??[],r=t.flatMap(e=>o.get(e.branch_id)??[]),s=e.primary_assistant_id?n.get(e.primary_assistant_id):void 0,c=Math.max(new Date(e.last_updated).getTime(),...t.map(e=>new Date(e.updated_at||e.created_at).getTime()),...r.map(e=>new Date(e.last_updated).getTime()));return{board:e,branches:t,sessions:r,primaryAssistant:s,latest:Number.isFinite(c)?c:0,visitRank:i.get(e.board_id)??1/0}}).sort((e,t)=>e.visitRank-t.visitRank||t.latest-e.latest||e.board.name.localeCompare(t.board.name)).slice(0,ai)},ui=({board:e,branches:t,sessions:n,primaryAssistant:i,onClick:a})=>{let{token:o}=A.useToken(),s=$r(o),c=i?q(i):null,[l,u]=(0,Q.useState)(!1),d=n.filter(e=>oi.has(e.status)).length,p=[...n].sort((e,t)=>new Date(t.last_updated).getTime()-new Date(e.last_updated).getTime())[0],m=e.description?.trim()??``,h=m.split(/\r?\n/)[0]?.trim()??``;return(0,$.jsx)(B,{hoverable:!0,onClick:a,onMouseEnter:()=>u(!0),onMouseLeave:()=>u(!1),style:{width:320,flex:`0 0 320px`,borderColor:l?o.colorPrimaryBorderHover:o.colorBorderSecondary,...s,background:l?Qr(o.colorBgElevated,.65):s.background,backgroundColor:l?Qr(o.colorBgElevated,.65):s.backgroundColor,boxShadow:l?o.boxShadowSecondary:void 0,transition:`border-color 0.2s, background 0.2s, box-shadow 0.2s`},styles:{body:{minHeight:136,background:`transparent`}},children:(0,$.jsxs)(V,{direction:`vertical`,size:12,style:{width:`100%`},children:[(0,$.jsx)(V,{align:`start`,style:{width:`100%`,justifyContent:`space-between`},children:(0,$.jsxs)(V,{size:10,style:{minWidth:0},children:[(0,$.jsx)(r,{style:{background:o.colorFillSecondary,color:o.colorText,flexShrink:0},children:e.icon||`📋`}),(0,$.jsxs)(`div`,{style:{minWidth:0},children:[(0,$.jsxs)(V,{size:6,style:{maxWidth:230},children:[(0,$.jsx)(ii,{strong:!0,ellipsis:{tooltip:e.name},style:{display:`block`,maxWidth:i?190:220},children:e.name}),i&&(0,$.jsx)(T,{title:`Primary assistant: ${c?.displayName??i.name}`,children:(0,$.jsx)(f,{"aria-label":`Primary assistant`,style:{color:o.colorPrimary,fontSize:13,flexShrink:0}})})]}),(0,$.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:6,maxWidth:220,minHeight:20},children:[(0,$.jsx)(ii,{type:`secondary`,ellipsis:m?{tooltip:h}:!1,style:{display:`block`,fontSize:12,flex:1,minWidth:0,whiteSpace:`nowrap`},children:h||`\xA0`}),m&&(0,$.jsx)(me,{content:(0,$.jsx)(`div`,{style:{maxWidth:360,maxHeight:320,overflow:`auto`},children:(0,$.jsx)(St,{content:m,compact:!0,showControls:!1})}),title:`Board description`,trigger:`hover`,placement:`rightTop`,children:(0,$.jsx)(y,{style:{color:o.colorTextTertiary,cursor:`help`,flexShrink:0,fontSize:12}})})]})]})]})}),(0,$.jsxs)(V,{wrap:!0,size:[6,6],children:[(0,$.jsxs)(_,{icon:(0,$.jsx)(Ne,{}),children:[t.length,` branch`,t.length===1?``:`es`]}),(0,$.jsxs)(_,{children:[n.length,` session`,n.length===1?``:`s`]}),d>0&&(0,$.jsxs)(_,{color:`processing`,children:[d,` active`]})]}),(0,$.jsx)(ii,{type:`secondary`,style:{fontSize:12},children:p?(0,$.jsxs)($.Fragment,{children:[`Last session `,Kt(p.last_updated)]}):`No sessions yet`})]})})},di=({boardById:e,recentBoardIds:t=[],branchById:n,sessionsByBranch:r,onBoardClick:i})=>{let{token:a}=A.useToken(),o=(0,Q.useMemo)(()=>li({boardById:e,recentBoardIds:t,branchById:n,sessionsByBranch:r}),[e,t,n,r]);return(0,$.jsxs)(`section`,{children:[(0,$.jsx)(Zr,{title:`Boards`,icon:(0,$.jsx)(N,{}),info:`Up to ${ai} accessible boards, sorted by this browser’s last-visited board order when available, then by recent board, branch, or session activity.`}),o.length===0?(0,$.jsx)(B,{style:$r(a),children:(0,$.jsx)(j,{image:j.PRESENTED_IMAGE_SIMPLE,description:`No boards yet. Use the create button to make your first board, assistant, repo, or branch.`})}):(0,$.jsx)(`div`,{style:{display:`flex`,gap:16,overflowX:`auto`,paddingTop:2,paddingBottom:10,scrollbarColor:`${a.colorFill} transparent`},children:o.map(({board:e,branches:t,sessions:n,primaryAssistant:r})=>(0,$.jsx)(ui,{board:e,branches:t,sessions:n,primaryAssistant:r,onClick:()=>i(e.board_id)},e.board_id))})]})},{Text:fi}=i,pi=50,mi=e=>Array.isArray(e)?e:e.data??[],hi=({doc:e})=>{let{token:t}=A.useToken(),n=Ke(),r=Zn(e.uri),i=Xn(`/knowledge`,r,e.path);return(0,$.jsx)(S.Item,{onClick:()=>n(i),style:{cursor:`pointer`,padding:`10px 0`},children:(0,$.jsx)(S.Item.Meta,{avatar:e.icon_emoji?(0,$.jsx)(`span`,{style:{fontSize:18,lineHeight:`22px`},children:e.icon_emoji}):(0,$.jsx)(s,{style:{color:t.colorTextTertiary}}),title:(0,$.jsxs)(V,{size:6,style:{maxWidth:`100%`},children:[(0,$.jsx)(fi,{ellipsis:{tooltip:e.title||e.path},style:{minWidth:0},children:e.title||e.path}),(0,$.jsx)(on,{namespace:r||`Knowledge`,style:{marginInlineEnd:0}})]}),description:(0,$.jsxs)(V,{size:6,wrap:!0,children:[(0,$.jsx)(fi,{type:`secondary`,style:{fontSize:12},children:e.path}),e.updated_at&&(0,$.jsxs)(fi,{type:`secondary`,style:{fontSize:12},children:[`· `,Kt(e.updated_at)]})]})})})},gi=({client:e,connected:t})=>{let{token:n}=A.useToken(),r=$r(n),[i,a]=(0,Q.useState)([]),[o,s]=(0,Q.useState)(!1);return(0,Q.useEffect)(()=>{let t=!1;if(e)return s(!0),e.service(`kb/documents`).find({query:{archived:!1,$limit:pi,$sort:{updated_at:-1}}}).then(e=>{t||a(mi(e).sort((e,t)=>new Date(t.updated_at||t.created_at||0).getTime()-new Date(e.updated_at||e.created_at||0).getTime()).slice(0,pi))}).catch(e=>{t||console.error(`Failed to load recent Knowledge:`,e)}).finally(()=>{t||s(!1)}),()=>{t=!0}},[e]),(0,$.jsxs)(B,{loading:o,style:{minHeight:0,flex:1,...r},styles:{body:{height:`100%`,display:`flex`,flexDirection:`column`,background:`transparent`}},children:[(0,$.jsx)(Zr,{title:`Recent Knowledge`,icon:(0,$.jsx)(R,{}),info:`Up to ${pi} recently updated readable Knowledge documents from kb/documents. Access checks remain server-side through the existing Knowledge service.`}),(0,$.jsx)(`div`,{style:{overflow:`auto`,minHeight:0},children:t?i.length===0?(0,$.jsx)(j,{image:j.PRESENTED_IMAGE_SIMPLE,description:`No Knowledge docs yet`}):(0,$.jsx)(S,{rowKey:`document_id`,dataSource:i,renderItem:e=>(0,$.jsx)(hi,{doc:e})}):(0,$.jsx)(j,{image:j.PRESENTED_IMAGE_SIMPLE,description:`Reconnect to refresh Knowledge`})})]})},{Text:_i}=i,vi=100,yi=new Set([`awaiting_permission`,`awaiting_input`,`failed`,`timed_out`]),bi=({session:e,branch:t,board:n,repo:r,searchQuery:i,searchActive:a,onClick:o})=>{let{token:s}=A.useToken(),c=vt(e,{includeAgentFallback:!0}),l=Lt(e.status),u=a&&e.title&&e.description?Jn(e.description,i):null,d=a&&Wn(e,i);return(0,$.jsx)(S.Item,{onClick:o,style:{cursor:`pointer`,padding:`10px 16px`,borderBlockEnd:`1px solid ${s.colorBorderSecondary}`},children:(0,$.jsx)(S.Item.Meta,{avatar:(0,$.jsx)(O,{dot:l!==`success`&&l!=="default",status:l===`success`||l==="default"?void 0:l,children:(0,$.jsx)(Ce,{style:{fontSize:20,color:s.colorTextSecondary}})}),title:(0,$.jsxs)(V,{size:8,style:{width:`100%`},children:[(0,$.jsx)(_i,{ellipsis:{tooltip:c},style:{maxWidth:420},children:(0,$.jsx)(En,{text:c,query:i})}),e.ready_for_prompt&&(0,$.jsx)(_,{color:`cyan`,children:`ready`}),yi.has(e.status)&&(0,$.jsx)(_,{color:`warning`,children:e.status.replaceAll(`_`,` `)})]}),description:(0,$.jsxs)(V,{direction:`vertical`,size:4,style:{width:`100%`},children:[d&&(0,$.jsxs)(_i,{type:`secondary`,style:{fontSize:11},children:[`Agent: `,(0,$.jsx)(En,{text:e.agentic_tool,query:i})]}),u&&u!==c&&(0,$.jsx)(_i,{type:`secondary`,italic:!0,style:{fontSize:11,lineHeight:1.4},children:(0,$.jsx)(En,{text:u,query:i})}),(0,$.jsxs)(V,{size:8,wrap:!0,children:[(0,$.jsx)(T,{title:Z(e.last_updated),children:(0,$.jsx)(_i,{type:`secondary`,style:{fontSize:12},children:Kt(e.last_updated)})}),n&&(0,$.jsx)(Pt,{board:n,compact:!0}),t&&(0,$.jsx)(Mt,{branch:t.name,compact:!0,title:r?`${r.slug} / ${t.name}`:t.name})]})]})})})},xi=({sessionById:e,branchById:t,boardById:n,repoById:r,currentUserId:i,onSessionClick:a})=>{let{token:o}=A.useToken(),s=$r(o),[c,l]=(0,Q.useState)(``),[u,d]=ct(Bn,`recent`),f=(0,Q.useMemo)(()=>Array.from(e.values()).filter(e=>!e.archived&&(!i||e.created_by===i)),[i,e]),p=c.trim(),m=Fn(p),h=(0,Q.useMemo)(()=>(m?In(f,p).map(({session:e})=>e):Vn(f,u)).slice(0,vi),[f,m,p,u]);return(0,$.jsxs)(`section`,{style:{minHeight:0,flex:1,display:`flex`,flexDirection:`column`},children:[(0,$.jsx)(Zr,{title:i?`My Sessions`:`Sessions`,icon:(0,$.jsx)(Ce,{}),info:`Up to ${vi} ${i?`of your`:`cross-board`} sessions using the same local session state as the board left panel. Board and branch pills are included because this list is not filtered to one board.`}),(0,$.jsxs)(B,{styles:{body:{padding:0,display:`flex`,flexDirection:`column`,height:`100%`,background:`transparent`}},style:{minHeight:0,flex:1,...s},children:[(0,$.jsx)(`div`,{style:{padding:16},children:(0,$.jsx)(Nn,{value:c,onChange:l,sort:u,onSortChange:d,searching:m,placeholder:`Search sessions...`})}),(0,$.jsx)(`div`,{style:{overflow:`auto`,minHeight:0,flex:1},children:h.length===0?(0,$.jsx)(j,{image:j.PRESENTED_IMAGE_SIMPLE,description:m?`No matching sessions`:`No sessions yet`,style:{padding:`28px 0`}}):(0,$.jsx)(S,{rowKey:`session_id`,dataSource:h,renderItem:e=>{let i=t.get(e.branch_id);return(0,$.jsx)(bi,{session:e,branch:i,board:i?.board_id?n.get(i.board_id):void 0,repo:i?r.get(i.repo_id):void 0,searchQuery:p,searchActive:m,onClick:()=>a(e.session_id)})}})})]})]})},{Text:Si,Title:Ci}=i,wi=e=>{let{token:t}=A.useToken(),n=Yn[tt(t)?`dark`:`light`];return(0,$.jsx)(`div`,{style:{height:`100%`,width:`100%`,overflow:`hidden`,background:n},children:(0,$.jsxs)(`div`,{style:{height:`100%`,minHeight:0,padding:`32px clamp(32px, 5vw, 80px) 28px`,display:`grid`,gridTemplateColumns:`minmax(0, 1fr) minmax(380px, 540px)`,gap:24},children:[(0,$.jsxs)(`main`,{style:{minWidth:0,minHeight:0,display:`flex`,flexDirection:`column`,gap:24},children:[(0,$.jsx)(`div`,{children:(0,$.jsxs)(V,{direction:`vertical`,size:4,children:[(0,$.jsx)(Ci,{level:2,style:{margin:0},children:`Home`}),(0,$.jsx)(Si,{type:`secondary`,children:`Jump into boards, resume your sessions, and see recent team context.`})]})}),(0,$.jsx)(di,{boardById:e.boardById,recentBoardIds:e.recentBoardIds,branchById:e.branchById,sessionsByBranch:e.sessionsByBranch,onBoardClick:e.onBoardClick}),(0,$.jsx)(xi,{sessionById:e.sessionById,branchById:e.branchById,boardById:e.boardById,repoById:e.repoById,currentUserId:e.currentUserId,onSessionClick:e.onSessionClick})]}),(0,$.jsxs)(`aside`,{style:{minHeight:0,display:`flex`,flexDirection:`column`,gap:16},children:[(0,$.jsx)(ri,{branchById:e.branchById,boardById:e.boardById,sessionById:e.sessionById,userById:e.userById,onBoardClick:e.onBoardClick,onBranchClick:e.onBranchClick,onSessionClick:e.onSessionClick}),(0,$.jsx)(gi,{client:e.client,connected:e.connected})]})]})})},Ti=({onClick:e})=>{let t=Y();return(0,$.jsx)(T,{title:t?`Disconnected from daemon`:`Create new...`,placement:`left`,children:(0,$.jsx)(U,{type:`primary`,shape:`circle`,size:`large`,icon:(0,$.jsx)(M,{style:{fontSize:20}}),onClick:e,disabled:t,style:{position:`absolute`,right:24,top:24,width:56,height:56,boxShadow:`0 4px 12px rgba(0, 0, 0, 0.15)`,zIndex:100}})})},Ei=({open:e,onClose:t,onCreate:n,availableAgents:r,branchId:a,branch:s,mcpServerById:c=new Map,currentUser:l,client:u,userById:d})=>{let[f]=H.useForm(),[p,m]=(0,Q.useState)(`claude-code`),[h,g]=(0,Q.useState)(!1),[_,v]=(0,Q.useState)([]),y=!!p;return(0,Q.useEffect)(()=>{if(!e)return;m(`claude-code`),g(!1),v([]);let t=l?.default_agentic_config?.[`claude-code`],n=wn(`claude-code`,t),r=s?.mcp_server_ids;f.setFieldsValue({title:``,initialPrompt:``,...n,mcpServerIds:r&&r.length>0?r:n.mcpServerIds})},[e,f]),(0,Q.useEffect)(()=>{if(p){let e=p,t=l?.default_agentic_config?.[e],n=wn(e,t);f.setFieldsValue({...n,mcpServerIds:s?.mcp_server_ids&&s.mcp_server_ids.length>0?s.mcp_server_ids:n.mcpServerIds,...e!==`codex`&&{codexSandboxMode:void 0,codexApprovalPolicy:void 0,codexNetworkAccess:void 0}})}},[p,f,l,s?.mcp_server_ids]),(0,$.jsx)(Ee,{title:`Create New Session`,open:e,onOk:()=>{f.validateFields().then(()=>{let e=f.getFieldsValue(!0);g(!0);let t=l?.default_agentic_config?.[p],r=s?.mcp_server_ids,i=r&&r.length>0?r:t?.mcpServerIds,o=e.permissionMode??t?.permissionMode??Be(p),c={branch_id:a,agent:p,title:e.title,initialPrompt:e.initialPrompt,modelConfig:e.modelConfig??t?.modelConfig,effort:e.effort??t?.modelConfig?.effort,mcpServerIds:e.mcpServerIds??i,permissionMode:o,envVarNames:_.length>0?_:void 0};if(p===`codex`){let n=ze(o);c.codexSandboxMode=e.codexSandboxMode??t?.codexSandboxMode??n.sandboxMode,c.codexApprovalPolicy=e.codexApprovalPolicy??t?.codexApprovalPolicy??n.approvalPolicy,c.codexNetworkAccess=e.codexNetworkAccess??t?.codexNetworkAccess??n.networkAccess}n(c)})},onCancel:()=>{f.resetFields(),t()},okText:`Create Session`,cancelText:`Cancel`,width:700,okButtonProps:{disabled:!y||h,loading:h},children:(0,$.jsxs)(H,{form:f,layout:`vertical`,style:{marginTop:16},preserve:!1,children:[s&&(0,$.jsx)(C,{title:(0,$.jsxs)($.Fragment,{children:[`Creating session in branch: `,(0,$.jsx)(`strong`,{children:s.name}),` (`,s.ref,`)`]}),type:`info`,showIcon:!0,style:{marginBottom:16}}),(0,$.jsx)(H.Item,{label:`Select Coding Agent`,required:!0,children:(0,$.jsx)(cn,{agents:r,selectedAgentId:p,onSelect:m,columns:2,showHelperText:!0,showComparisonLink:!0})}),(0,$.jsx)(H.Item,{name:`title`,label:`Title (optional)`,children:(0,$.jsx)(L,{placeholder:`e.g., Add authentication system`})}),(0,$.jsx)(H.Item,{name:`initialPrompt`,label:`Initial Prompt (optional)`,help:`First message to send to the agent when session starts`,children:(0,$.jsx)(Qn,{value:f.getFieldValue(`initialPrompt`)||``,onChange:e=>f.setFieldValue(`initialPrompt`,e),placeholder:`e.g., Build a JWT authentication system with secure password storage... (type @ for autocomplete)`,autoSize:{minRows:4,maxRows:8},client:u,sessionId:null,userById:d,enableKnowledgeMentions:!0,kbLinkTarget:`absolute-route`})}),(0,$.jsx)(it,{mcpServerById:c}),(0,$.jsx)(o,{ghost:!0,destroyOnHidden:!1,expandIcon:({isActive:e})=>(0,$.jsx)(x,{rotate:e?180:0}),items:[{key:`agentic-tool-config`,label:(0,$.jsx)(i.Text,{strong:!0,children:`Agentic Tool Configuration`}),children:(0,$.jsx)(Tt,{agenticTool:p||`claude-code`,mcpServerById:c,showHelpText:!0,hideMcpServers:!0,client:u})},...l&&u?[{key:`env-vars`,label:(0,$.jsx)(i.Text,{strong:!0,children:`Environment Variables`}),children:(0,$.jsx)(Pn,{ownerUserId:l.user_id,client:u,value:_,onChange:v})}]:[]],style:{marginTop:16}})]})})};function Di(e,t){if(e?.auth?.type!==`oauth`)return!1;let n=e.auth.oauth_token_expires_at,r=!!(n&&n<=Date.now());return!(e.auth.oauth_access_token&&!r||t.has(e.mcp_server_id)&&!r)}var{TextArea:Oi}=L,{Text:ki}=i,Ai=({sessionId:e,daemonUrl:t,open:n,onClose:r,onUploadComplete:i,onInsertMention:a,initialFiles:o})=>{let{showSuccess:s,showWarning:l,showError:u}=Qe(),[f,p]=(0,Q.useState)([]),[m,h]=(0,Q.useState)(`branch`),[g,_]=(0,Q.useState)(!0),[v,y]=(0,Q.useState)(`Please review this file: {filepath}`),[b,x]=(0,Q.useState)(!1),S=(0,Q.useRef)([]);S.current=f;let C=(0,Q.useCallback)(e=>{let t=e,n=e.type.startsWith(`image/`);return{uid:t.uid||`${Date.now()}-${e.name}`,name:e.name,status:`done`,originFileObj:t,thumbUrl:n?URL.createObjectURL(e):void 0}},[]),w=(0,Q.useCallback)(e=>{e.thumbUrl?.startsWith(`blob:`)&&URL.revokeObjectURL(e.thumbUrl)},[]),T=(0,Q.useCallback)(()=>{S.current.forEach(w),p([])},[w]);return(0,Q.useEffect)(()=>()=>S.current.forEach(w),[w]),(0,Q.useEffect)(()=>{o&&o.length>0&&n&&(S.current.forEach(w),p(o.map(C)))},[o,n,C,w]),(0,$.jsx)(Ee,{title:`Upload File(s)`,open:n,onCancel:()=>{T(),_(!1),y(`Please review this file: {filepath}`),r()},onOk:async()=>{if(f.length===0){l(`Please select at least one file`);return}x(!0);try{let n=new FormData;f.forEach(e=>{e.originFileObj?n.append(`files`,e.originFileObj):console.warn(`[FileUpload] File missing originFileObj:`,e.name)}),n.append(`notifyAgent`,String(g)),n.append(`message`,v);let o=`${t}/sessions/${e}/upload?destination=${encodeURIComponent(m)}`,c=localStorage.getItem(bt),l={};c?l.Authorization=`Bearer ${c}`:console.warn(`[FileUpload] No access token found in localStorage`);let u=await fetch(o,{method:`POST`,headers:l,body:n});if(!u.ok){let e=await u.text(),t={};try{t=JSON.parse(e)}catch{t={error:e||`Upload failed`}}throw Error(t.error||`Upload failed`)}let d=await u.json();if(d.files.length===1?s(`Uploaded as: ${d.files[0].filename}`):s(`Uploaded ${d.files.length} files successfully`),i&&i(d.files),!g&&a&&d.files.length>0){let e=d.files[0];a(e.path.includes(` `)?`"${e.path}"`:e.path)}T(),_(!1),y(`Please review this file: {filepath}`),r()}catch(e){console.error(`Upload error:`,e),u(e instanceof Error?e.message:`Failed to upload files`)}finally{x(!1)}},confirmLoading:b,okText:`Upload`,cancelText:`Cancel`,width:600,children:(0,$.jsxs)(V,{orientation:`vertical`,style:{width:`100%`},size:`large`,children:[(0,$.jsx)(d,{multiple:!0,listType:`picture`,fileList:f,beforeUpload:e=>(p(t=>[...t,C(e)]),!1),onRemove:e=>{w(e),p(t=>t.filter(t=>t.uid!==e.uid))},children:(0,$.jsx)(U,{icon:(0,$.jsx)(z,{}),children:`Select Files`})}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(ki,{strong:!0,children:`Destination:`}),(0,$.jsx)(c.Group,{value:m,onChange:e=>h(e.target.value),style:{marginTop:8,display:`block`},children:(0,$.jsxs)(V,{orientation:`vertical`,children:[(0,$.jsx)(c,{value:`branch`,children:(0,$.jsxs)(V,{orientation:`vertical`,size:0,children:[(0,$.jsx)(ki,{children:`Branch (.agor/uploads/)`}),(0,$.jsx)(ki,{type:`secondary`,style:{fontSize:`12px`},children:`Default - Agent-accessible, can be committed`})]})}),(0,$.jsx)(c,{value:`temp`,children:(0,$.jsxs)(V,{orientation:`vertical`,size:0,children:[(0,$.jsx)(ki,{children:`Temp folder`}),(0,$.jsx)(ki,{type:`secondary`,style:{fontSize:`12px`},children:`Ephemeral, auto-cleanup`})]})}),(0,$.jsx)(c,{value:`global`,children:(0,$.jsxs)(V,{orientation:`vertical`,size:0,children:[(0,$.jsx)(ki,{children:`Global (~/.agor/uploads/)`}),(0,$.jsx)(ki,{type:`secondary`,style:{fontSize:`12px`},children:`Shared across sessions`})]})})]})})]}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(Le,{checked:g,onChange:e=>_(e.target.checked),children:`Notify the agent about this file`}),g&&(0,$.jsxs)(`div`,{style:{marginTop:8},children:[(0,$.jsx)(Oi,{value:v,onChange:e=>y(e.target.value),placeholder:`Message to agent (use {filepath} for file path)`,autoSize:{minRows:2,maxRows:4}}),(0,$.jsxs)(ki,{type:`secondary`,style:{fontSize:`12px`,marginTop:4},children:[`Use `,`{filepath}`,` to reference the uploaded file path`]})]})]})]})})},ji=(0,Q.forwardRef)(({onClick:e,disabled:t,size:n=`middle`},r)=>(0,$.jsx)(U,{ref:r,icon:(0,$.jsx)(_e,{}),onClick:e,disabled:t,size:n,title:`Upload files`}));function Mi(e){try{let{hostname:t}=new URL(e);if(t===`github.com`||t.endsWith(`.github.com`))return(0,$.jsx)(re,{})}catch{}return(0,$.jsx)(ae,{})}var Ni=({items:e})=>{let{token:t}=A.useToken();return e.length===0?null:(0,$.jsx)(ce,{menu:{items:e.map(e=>({key:e.key,icon:Mi(e.url),label:(0,$.jsx)(T,{title:e.name.length>40?e.name:void 0,placement:`left`,children:(0,$.jsx)(`span`,{style:{display:`inline-block`,maxWidth:200,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`},children:e.name})}),onClick:()=>window.open(e.url,`_blank`)}))},trigger:[`click`],placement:`bottomRight`,children:(0,$.jsx)(T,{title:`Attachments`,children:(0,$.jsx)(O,{count:e.length,color:t.colorPrimary,size:`small`,offset:[-4,4],children:(0,$.jsx)(U,{type:`text`,icon:(0,$.jsx)(a,{style:{color:t.colorPrimary}})})})})})};function Pi(e,t,n){let r=0,i=0;for(let a of e){let e=t.get(a);if(!e){r+=1;continue}Di(e,n)&&(i+=1)}let a=e.length,o=Math.max(0,a-r-i),s=r+i;return{attachedCount:a,missingCount:r,needsAuthCount:i,healthyCount:o,tone:r>0?`error`:i>0?`warning`:`default`,label:`MCP (${a})`,tooltip:s>0?`${s} MCP server${s===1?``:`s`} need attention`:a>0?`${a} MCP server${a===1?``:`s`} attached`:`No MCP servers attached`}}var Fi=({client:e,sessionId:t,sessionMcpServerIds:n,mcpServerById:r,userAuthenticatedMcpServerIds:a,onOpenSessionSettings:o})=>{let{token:s}=A.useToken(),{showSuccess:c,showError:l}=Qe(),[u,d]=Q.useState(!1),[f,p]=Q.useState(!1),m=Q.useMemo(()=>Pi(n,r,a),[n,r,a]),h=Q.useMemo(()=>n.map(e=>r.get(e)).filter(e=>!!e),[n,r]);return(0,$.jsx)(me,{open:u,onOpenChange:d,trigger:`click`,placement:`top`,getPopupContainer:e=>e.parentElement??document.body,title:null,content:(0,$.jsx)(`div`,{style:{width:340,maxWidth:`min(340px, 80vw)`},children:(0,$.jsxs)(V,{direction:`vertical`,size:10,style:{width:`100%`},children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(i.Text,{strong:!0,children:`Session MCP servers`}),(0,$.jsx)(i.Paragraph,{type:`secondary`,style:{margin:`${s.sizeUnit}px 0 0`},children:`Attach tools/connectors that the agent can use in this conversation.`})]}),h.length>0&&(0,$.jsx)(V,{size:6,wrap:!0,children:h.map(t=>(0,$.jsx)(pt,{server:t,needsAuth:Di(t,a),client:e},t.mcp_server_id))}),(0,$.jsx)(Qt,{mcpServers:Array.from(r.values()),placeholder:`Attach MCP servers…`,value:n,onChange:async r=>{if(e){p(!0);try{await _n(e,t,n,r),c(`Session MCP servers updated`)}catch(e){l(`Failed to update MCP servers: ${e instanceof Error?e.message:String(e)}`)}finally{p(!1)}}},loading:f,disabled:!e,style:{width:`100%`}}),(0,$.jsx)(se,{style:{margin:`${s.sizeUnit}px 0`}}),(0,$.jsx)(U,{block:!0,icon:(0,$.jsx)(le,{}),onClick:()=>{d(!1),o?.(t)},children:`Open session settings`})]})}),children:(0,$.jsxs)(zt,{icon:(0,$.jsx)(Pe,{}),color:`default`,title:`${m.tooltip}. Click to add or change MCP servers.`,style:{cursor:`pointer`,height:22,display:`inline-flex`,alignItems:`center`},children:[(0,$.jsx)(`span`,{children:`MCP`}),(0,$.jsx)(_,{color:m.tone===`error`?`error`:m.tone===`warning`?`warning`:void 0,style:{marginInlineStart:s.sizeUnit,marginInlineEnd:0,minWidth:16,height:14,paddingInline:4,display:`inline-flex`,alignItems:`center`,justifyContent:`center`,lineHeight:`12px`,fontSize:10,textAlign:`center`,fontVariantNumeric:`tabular-nums`,verticalAlign:`middle`},children:m.attachedCount}),(0,$.jsx)(M,{style:{marginLeft:s.sizeUnit*1.5}})]})})},Ii=({client:e,userId:t,branchId:n,focusTabName:r,ensureCliSessionId:i,height:a=480,fill:o=!1,visible:s=!0})=>{let c=(0,Q.useRef)(null),l=(0,Q.useRef)(null),[u,d]=(0,Q.useState)(null),[f,p]=(0,Q.useState)(!1);return(0,Q.useEffect)(()=>{if(!e||!t||!c.current)return;let a=!0,o=null,s=e.io,u=e=>{e.userId===t&&l.current&&l.current.write(e.data)},f=e=>{e.userId===t&&l.current&&(l.current.writeln(`\r\n\r\n[Terminal exited with code ${e.exitCode}]`),p(!1))},m=new rr({allowProposedApi:!0,fontSize:13,fontFamily:`Menlo, Monaco, "Courier New", monospace`,cursorBlink:!0,scrollback:1e3,rows:24,cols:80,theme:{background:`#141414`,foreground:`#ffffff`,cursor:`#2e9a92`,cursorAccent:`#141414`}});m.open(c.current),m.loadAddon(new nr),m.loadAddon(new tr((e,t)=>{window.open(t,`_blank`,`noopener,noreferrer`)})),l.current=m;let h=c.current.querySelector(`.xterm`);h&&(h.style.width=`100%`,h.style.height=`100%`);let g=()=>{if(!l.current||!c.current)return;let e=l.current._core,t=e?._renderService?.dimensions?.css?.cell?.width,n=e?._renderService?.dimensions?.css?.cell?.height;if(!t||!n||t<=0||n<=0)return;let r=c.current.getBoundingClientRect();if(r.width<=0||r.height<=0)return;let i=Math.max(20,Math.floor(r.width/t)),a=Math.max(5,Math.floor(r.height/n));if(i!==l.current.cols||a!==l.current.rows)try{l.current.resize(i,a)}catch{}},_=null;try{_=m.onRender(()=>g())}catch{}requestAnimationFrame(()=>{g(),requestAnimationFrame(g)});let v=setInterval(g,100),y=setTimeout(()=>clearInterval(v),1500);typeof document<`u`&&`fonts`in document&&document.fonts.ready.then(()=>g()).catch(()=>{});let b=new ResizeObserver(()=>g());return b.observe(c.current),(async()=>{try{let c=await e.service(`terminals`).create({rows:m.rows,cols:m.cols,branchId:n,focusTabName:r,ensureCliSessionId:i});if(!a)return;o=c.channel,s.emit(`join`,c.channel),s.on(`terminal:output`,u),s.on(`terminal:exit`,f),m.onData(e=>{s.emit(`terminal:input`,{userId:t,input:e})}),m.onResize(({cols:e,rows:n})=>{s.emit(`terminal:resize`,{userId:t,cols:e,rows:n})}),s.emit(`terminal:resize`,{userId:t,cols:m.cols,rows:m.rows}),p(!0)}catch(e){let t=e instanceof Error?e.message:String(e);d(t),l.current&&(l.current.writeln(`\r
2
+ [Failed to attach to terminal]`),l.current.writeln(`[Error: ${t}]`))}})(),()=>{a=!1,b.disconnect(),clearInterval(v),clearTimeout(y);try{_?.dispose()}catch{}l.current&&=(l.current.dispose(),null),s&&(s.off(`terminal:output`,u),s.off(`terminal:exit`,f),o&&s.emit(`leave`,o)),p(!1)}},[e,t,n,r,i]),(0,Q.useEffect)(()=>{if(!s||!e||!t||!r)return;let a=!1;return(async()=>{try{await e.service(`terminals`).create({rows:l.current?.rows??30,cols:l.current?.cols??140,branchId:n,focusTabName:r,ensureCliSessionId:i})}catch(e){if(a)return;console.warn(`[EmbeddedTerminal] refocus failed`,e)}})(),()=>{a=!0}},[s,e,t,n,r,i]),(0,$.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:4,background:`#000`,padding:8,borderRadius:4,...o?{flex:1,minHeight:0,height:`100%`}:{minHeight:a}},children:[(0,$.jsx)(`div`,{ref:c,style:o?{flex:1,minHeight:0}:{flex:1,minHeight:a-24}}),u&&(0,$.jsxs)(`div`,{style:{color:`#ff7875`,fontSize:12,padding:4},children:[`Terminal error: `,u]}),!f&&!u&&(0,$.jsx)(`div`,{style:{color:`#bfbfbf`,fontSize:12,padding:4},children:`Connecting to terminal…`})]})},Li=Q.memo(({client:e,session:t,branch:n=null,currentUserId:r,scrollToBottom:a,scrollToTop:o,setScrollToBottom:s,setScrollToTop:c,queuedTasks:l,setQueuedTasks:u,spawnModalOpen:d,setSpawnModalOpen:f,onSpawnModalConfirm:p,inputValueRef:m,isOpen:h,cliViewMode:g=`terminal`,setCliViewMode:_})=>{let{token:y}=A.useToken(),{showSuccess:b,showError:x}=Qe(),{userById:S}=mr(),{repoById:C}=pr(),{mcpServerById:w}=hr(),{onOpenBranch:E,onStartEnvironment:O,onStopEnvironment:k,onNukeEnvironment:ee,onViewLogs:j,onPermissionDecision:te}=Mn(),M=n&&C.get(n.repo_id)||null,N=Q.useCallback((e,t)=>{s(()=>e),c(()=>t)},[s,c]);return(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`div`,{style:{marginBottom:y.sizeUnit,display:`flex`,alignItems:`center`,justifyContent:`space-between`,gap:y.sizeUnit*2},children:[n&&(0,$.jsxs)(V,{size:8,wrap:!0,style:{flex:1},children:[n&&M&&(0,$.jsx)(Dr,{repo:M,branch:n,onOpenBranch:E,onStartEnvironment:O,onStopEnvironment:k,onNukeEnvironment:ee,onViewLogs:j,identityLink:K(t.session_id)}),n?.issue_url&&(0,$.jsx)(vn,{issueUrl:n.issue_url,currentRepo:M??void 0}),n?.pull_request_url&&(0,$.jsx)(Zt,{prUrl:n.pull_request_url,currentRepo:M??void 0})]}),!n&&(0,$.jsx)(`div`,{style:{flex:1}}),(0,$.jsxs)(V,{size:4,children:[(0,$.jsx)(T,{title:`Scroll to top of conversation`,children:(0,$.jsx)(U,{type:`text`,size:`small`,icon:(0,$.jsx)(ge,{}),onClick:()=>o?.(),disabled:!o})}),(0,$.jsx)(T,{title:`Scroll to bottom of conversation`,children:(0,$.jsx)(U,{type:`text`,size:`small`,icon:(0,$.jsx)(De,{}),onClick:()=>a?.(),disabled:!a})})]})]}),t.agentic_tool===`claude-code-cli`&&_?(0,$.jsxs)(`div`,{style:{display:`flex`,alignItems:`flex-end`,justifyContent:`space-between`,gap:y.sizeUnit*2,marginTop:y.sizeUnit*2},children:[(0,$.jsx)(Ie,{activeKey:g,onChange:e=>_(e),size:`small`,style:{flex:1,marginBottom:-1},items:[{key:`terminal`,label:(0,$.jsxs)(`span`,{children:[(0,$.jsx)(we,{style:{marginRight:6}}),`CLI terminal`]})},{key:`conversation`,label:(0,$.jsxs)(`span`,{children:[(0,$.jsx)(de,{style:{marginRight:6}}),`Agor conversation`]})}]}),g===`terminal`&&e&&(0,$.jsx)(T,{title:`Restart claude REPL in this tab (closes the Zellij tab and re-spawns claude — JSONL transcript preserved, watcher resumes from offset)`,children:(0,$.jsx)(U,{size:`small`,icon:(0,$.jsx)(v,{}),onClick:async()=>{try{await e.service(`sessions/${t.session_id}/restart-cli`).create({}),b(`Restarting claude…`)}catch(e){x(`Failed to restart: ${e instanceof Error?e.message:String(e)}`)}},style:{marginBottom:y.sizeUnit},children:`Restart`})})]}):(0,$.jsx)(se,{style:{margin:`${y.sizeUnit*2}px 0`}}),t.agentic_tool===`claude-code-cli`&&(0,$.jsx)(`div`,{style:{display:g===`terminal`?`flex`:`none`,flex:1,minHeight:0,flexDirection:`column`},children:(0,$.jsx)(Ii,{client:e,userId:r,branchId:t.branch_id,focusTabName:`cli-${Ze(t.session_id)}`,ensureCliSessionId:t.session_id,fill:!0,visible:g===`terminal`})}),(0,$.jsx)(`div`,{style:{display:t.agentic_tool===`claude-code-cli`&&g===`terminal`?`none`:`contents`},children:(0,$.jsx)(er,{client:e,sessionId:t.session_id,agentic_tool:t.agentic_tool,sessionModel:t.model_config?.model,userById:S,currentUserId:r,onScrollRef:N,onPermissionDecision:te,branchName:n?.name,scheduledFromBranch:t.scheduled_from_branch,scheduledRunAt:t.scheduled_run_at,isActive:h,genealogy:t.genealogy,assistantEmoji:n&&Ye(n)?q(n)?.emoji:void 0})}),l.length>0&&(0,$.jsxs)(`div`,{style:{flexShrink:0,background:y.colorBgElevated,borderTop:`1px solid ${y.colorBorderSecondary}`,borderTopLeftRadius:y.borderRadiusLG,borderTopRightRadius:y.borderRadiusLG,padding:`${y.sizeUnit*3}px ${y.sizeUnit*6}px`,marginLeft:-y.sizeUnit*6+y.sizeUnit*2,marginRight:-y.sizeUnit*6+y.sizeUnit*2,marginTop:y.sizeUnit*2,boxShadow:`0 -2px 8px ${y.colorBgMask}`},children:[(0,$.jsxs)(i.Text,{type:`secondary`,style:{fontSize:y.fontSizeSM,display:`block`,marginBottom:y.sizeUnit*2,fontWeight:500,textTransform:`uppercase`,letterSpacing:`0.5px`},children:[`Queued Tasks (`,l.length,`)`]}),(0,$.jsx)(V,{orientation:`vertical`,size:8,style:{width:`100%`},children:l.map((n,r)=>(0,$.jsxs)(`div`,{style:{background:y.colorBgContainer,padding:`${y.sizeUnit*2}px ${y.sizeUnit*3}px`,borderRadius:y.borderRadius,border:`1px solid ${y.colorBorder}`,display:`flex`,justifyContent:`space-between`,alignItems:`center`,gap:y.sizeUnit*2},children:[(0,$.jsxs)(i.Text,{ellipsis:!0,style:{flex:1},children:[(0,$.jsxs)(`span`,{style:{color:y.colorTextSecondary,marginRight:y.sizeUnit},children:[r+1,`.`]}),n.full_prompt]}),(0,$.jsxs)(V,{size:4,children:[(0,$.jsx)(U,{type:`text`,size:`small`,icon:(0,$.jsx)(he,{}),onClick:async()=>{await Xe(n.full_prompt),b(`Message copied to clipboard`)}}),(0,$.jsx)(U,{type:`text`,size:`small`,danger:!0,icon:(0,$.jsx)(D,{}),onClick:async()=>{if(e)try{u(e=>e.filter(e=>e.task_id!==n.task_id)),await e.service(`tasks`).remove(n.task_id)}catch(n){x(`Failed to remove queued task: ${n instanceof Error?n.message:String(n)}`),u((await e.service(`sessions/${t.session_id}/tasks/queue`).find()).data||[])}}})]})]},n.task_id))})]}),(0,$.jsx)(Kn,{open:d,action:`spawn`,session:t,currentUser:r&&S.get(r)||null,mcpServerById:w,initialPrompt:m.current??``,onConfirm:p,onCancel:()=>f(!1),client:e,userById:S})]})}),Ri=({client:e,session:t,modelLabel:n,modelConfig:r,onModelConfigChange:a,effortLevel:o,onEffortChange:s,permissionMode:c,onPermissionModeChange:l,codexSandboxMode:u,codexApprovalPolicy:d,onCodexPermissionChange:p})=>{let{token:m}=A.useToken();return(0,$.jsx)(me,{trigger:`click`,placement:`top`,getPopupContainer:e=>e.parentElement??document.body,content:(0,$.jsx)(`div`,{style:{width:320,maxWidth:`min(320px, 80vw)`},children:(0,$.jsxs)(V,{direction:`vertical`,size:12,style:{width:`100%`},children:[(0,$.jsx)(`div`,{children:(0,$.jsx)(i.Text,{strong:!0,children:`Quick session settings`})}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(i.Text,{type:`secondary`,style:{fontSize:12},children:`Model`}),(0,$.jsx)(`div`,{style:{marginTop:m.sizeUnit},children:(0,$.jsx)(lt,{value:r,onChange:a,agentic_tool:t.agentic_tool,client:e,compact:!0})})]}),t.agentic_tool===`claude-code`&&(0,$.jsxs)(`div`,{children:[(0,$.jsx)(i.Text,{type:`secondary`,style:{fontSize:12},children:`Reasoning effort`}),(0,$.jsx)(`div`,{style:{marginTop:m.sizeUnit},children:(0,$.jsx)(J,{value:o,onChange:s,size:`small`,compact:!0,plain:!0,fullWidth:!0})})]}),(0,$.jsxs)(`div`,{children:[(0,$.jsx)(i.Text,{type:`secondary`,style:{fontSize:12},children:`Permissions`}),(0,$.jsx)(`div`,{style:{marginTop:m.sizeUnit},children:(0,$.jsx)(Dt,{value:c,onChange:l,agentic_tool:t.agentic_tool,codexSandboxMode:u,codexApprovalPolicy:d,onCodexChange:p,compact:!0,iconOnly:!1,plain:!0,fullWidth:!0,size:`small`})})]})]})}),title:null,children:n?(0,$.jsxs)(zt,{icon:(0,$.jsx)(f,{}),color:`default`,title:`Model and run settings`,style:{cursor:`pointer`,height:22,display:`inline-flex`,alignItems:`center`},children:[(0,$.jsx)(`span`,{children:bn(n)}),(0,$.jsx)(le,{style:{marginLeft:m.sizeUnit*1.5}})]}):(0,$.jsx)(zt,{icon:(0,$.jsx)(le,{}),color:`default`,style:{cursor:`pointer`,height:22,display:`inline-flex`,alignItems:`center`},children:`Run`})})},zi=Q.forwardRef(({sessionId:e,getDraft:t,saveDraft:n,deleteDraft:r,onHasInputChange:i,inputValueRef:a,onSubmit:o,placeholder:s,autoSize:c,client:l,userById:u,onFilesDrop:d,slashCommands:f,skills:p},m)=>{let[h,g]=Q.useState(()=>t(e)),_=Q.useRef(h);_.current=h,a.current=h;let v=Q.useRef(!!h.trim());Q.useEffect(()=>{let e=!!h.trim();e!==v.current&&(v.current=e,i(e))},[h,i]),Q.useImperativeHandle(m,()=>({getValue:()=>_.current,clear:()=>{g(``),r(e)},insertText:e=>{g(t=>{let n=t.trim();return`${n}${n?` `:``}${e}`})}}),[e,r]);let y=Q.useRef(e);Q.useEffect(()=>{y.current!==e&&(n(y.current,_.current),g(t(e)),y.current=e)},[e,n,t]),Q.useEffect(()=>{let t=setTimeout(()=>n(e,h),300);return()=>clearTimeout(t)},[h,e,n]);let b=Q.useRef(n);b.current=n;let x=Q.useRef(e);return x.current=e,Q.useEffect(()=>()=>b.current(x.current,_.current),[]),(0,$.jsx)(Qn,{value:h,onChange:g,placeholder:s,autoSize:c,onKeyPress:Q.useCallback(e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),_.current.trim()&&o())},[o]),client:l,sessionId:e,userById:u,onFilesDrop:d,slashCommands:f,skills:p,enableKnowledgeMentions:!0,kbLinkTarget:`absolute-route`,highlightWhenEmpty:!0})});zi.displayName=`PromptInput`;var Bi=Q.memo(({client:e,session:n,branch:r=null,currentUserId:a,sessionMcpServerIds:o=[],open:s,onClose:c})=>{let{token:l}=A.useToken(),{modal:u}=Re.useApp(),{showSuccess:d,showInfo:f,showError:h}=Qe(),g=Y(),_=mt(),{userById:v}=mr(),{mcpServerById:y,userAuthenticatedMcpServerIds:b}=hr(),{onSendPrompt:x,onFork:S,onBtwFork:w,onOpenSettings:E,onUpdateSession:D,onOpenTerminal:k}=Mn(),{archiveSession:ee}=Cn(e),j=n?.agentic_tool?qe[n.agentic_tool]:void 0,te=Q.useMemo(()=>o.map(e=>y.get(e)).filter(e=>Di(e,b)).map(e=>e),[o,y,b]),M=`agor-draft-`,N=Q.useCallback(e=>{try{return localStorage.getItem(`${M}${e}`)||``}catch{return``}},[]),F=Q.useCallback((e,t)=>{try{t.trim()?localStorage.setItem(`${M}${e}`,t):localStorage.removeItem(`${M}${e}`)}catch{}},[]),ne=Q.useCallback(e=>{try{localStorage.removeItem(`${M}${e}`)}catch{}},[]),I=Q.useRef(null),re=Q.useRef(n?N(n.session_id):``),[ie,ae]=Q.useState(()=>!!re.current.trim()),L=Q.useCallback(e=>ae(e),[]),se=n?.permission_config?.mode??(n?.agentic_tool?Be(n.agentic_tool):Be(`claude-code`)),R=ze(se),[z,B]=Q.useState(se),[ue,de]=Q.useState(n?.permission_config?.codex?.sandboxMode??R.sandboxMode),[fe,pe]=Q.useState(n?.permission_config?.codex?.approvalPolicy??R.approvalPolicy),[me,he]=Q.useState(n?.model_config?.effort||`high`),[ge,_e]=Q.useState(`terminal`),[ve,be]=Q.useState(null),[xe,Ce]=Q.useState(null),[Ee,De]=Q.useState([]),[Oe,H]=Q.useState(!1),[ke,Ae]=Q.useState(!1),[je,Me]=Q.useState([]),[Pe,Ie]=Q.useState(!1),{state:Le}=Et(e,n?.session_id??null,{enabled:s,reactiveOptions:{taskHydration:`none`}}),W=Le?.tasks||[];Q.useEffect(()=>{if(!e||!n)return;(async()=>{try{De((await e.service(`/sessions/${n.session_id}/tasks/queue`).find()).data||[])}catch(e){console.error(`[SessionPanel] Failed to fetch queue:`,e)}})();let t=e.service(`tasks`),r=e=>{e.session_id===n.session_id&&De(t=>t.some(t=>t.task_id===e.task_id)?t:[...t,e].sort((e,t)=>(e.queue_position??0)-(t.queue_position??0)))},i=e=>{e.session_id===n.session_id&&e.status!==He.QUEUED&&De(t=>t.filter(t=>t.task_id!==e.task_id))},a=e=>{e.session_id===n.session_id&&De(t=>t.filter(t=>t.task_id!==e.task_id))};return t.on(`queued`,r),t.on(`patched`,i),t.on(`updated`,i),t.on(`removed`,a),()=>{t.off(`queued`,r),t.off(`patched`,i),t.off(`updated`,i),t.off(`removed`,a)}},[e,n]);let G=Q.useMemo(()=>n?.agentic_tool?W.reduce((e,t)=>{if(!t.normalized_sdk_response)return e;let{tokenUsage:n,costUsd:r}=t.normalized_sdk_response;return{total:e.total+n.totalTokens,input:e.input+n.inputTokens,output:e.output+n.outputTokens,cacheRead:e.cacheRead+(n.cacheReadTokens||0),cacheCreation:e.cacheCreation+(n.cacheCreationTokens||0),cost:e.cost+(r||0)}},{total:0,input:0,output:0,cacheRead:0,cacheCreation:0,cost:0}):{total:0,input:0,output:0,cacheRead:0,cacheCreation:0,cost:0},[W,n?.agentic_tool]),K=Q.useMemo(()=>{if(!n?.agentic_tool)return null;for(let e=W.length-1;e>=0;e--){let t=W[e];if(t.computed_context_window!==void 0&&t.normalized_sdk_response){let{contextWindowLimit:e}=t.normalized_sdk_response;if(t.computed_context_window>0)return{used:t.computed_context_window,limit:e||0,taskMetadata:{model:t.model,duration_ms:t.duration_ms,agentic_tool:n.agentic_tool,raw_sdk_response:t.raw_sdk_response,normalized_sdk_response:t.normalized_sdk_response}}}}return null},[W,n?.agentic_tool]),Ve=Q.useMemo(()=>{let e=[];return r?.issue_url&&e.push({key:`issue`,name:`Issue: ${en(r.issue_url)}`,url:r.issue_url}),r?.pull_request_url&&e.push({key:`pr`,name:`PR: ${en(r.pull_request_url)}`,url:r.pull_request_url}),e},[r?.issue_url,r?.pull_request_url]),We=Q.useMemo(()=>{if(K)return nn(K.used,K.limit,K.taskMetadata.normalized_sdk_response?.contextUsageSnapshot)},[K]),Ge=Q.useMemo(()=>{if(W.length===0)return null;for(let e=W.length-1;e>=0;--e){let t=W[e];if(t.status===He.RUNNING||t.status===He.STOPPING||t.status===He.AWAITING_PERMISSION||t.status===He.AWAITING_INPUT)return t}return W[W.length-1]},[W]);if(Q.useEffect(()=>{n?.permission_config?.mode?B(n.permission_config.mode):n?.agentic_tool&&B(Be(n.agentic_tool)),n?.agentic_tool===`codex`&&n?.permission_config?.codex&&(de(n.permission_config.codex.sandboxMode),pe(n.permission_config.codex.approvalPolicy))},[n?.permission_config?.mode,n?.permission_config?.codex,n?.agentic_tool]),Q.useEffect(()=>{he(n?.model_config?.effort||`high`)},[n?.model_config?.effort]),!n)return null;let Ke=()=>{if(!e||g){h(`Cannot archive while disconnected from the daemon.`);return}u.confirm({title:`Archive session?`,content:`Are you sure you want to archive this session?`,okText:`Archive`,cancelText:`Cancel`,onOk:async()=>{await ee(n.session_id)?(d(`Session archived`),c()):h(`Failed to archive session`)}})},Je=!!r,Ye=[...r?[{key:`center-map`,icon:(0,$.jsx)(m,{}),label:`Center map on branch`,onClick:()=>_(r.branch_id,{boardId:r.board_id??void 0})}]:[],...k&&r?[{key:`terminal`,icon:(0,$.jsx)(we,{}),label:`Open terminal`,onClick:()=>k([`cd ${r.path}`],r.branch_id)}]:[],...Je?[{type:`divider`}]:[],...E?[{key:`settings`,icon:(0,$.jsx)(le,{}),label:`Session Settings`,onClick:()=>E(n.session_id)}]:[],{key:`archive`,icon:(0,$.jsx)(P,{}),label:g?`Archive (disconnected)`:`Archive session`,disabled:g||!e,onClick:Ke}],q=n.status===Ue.RUNNING||n.status===Ue.STOPPING,Xe=n.status===Ue.STOPPING,Ze=async()=>{let e=I.current?.getValue()??``;if(!e.trim()||g)return;let t=e.trim();I.current?.clear(),x?.(n.session_id,t,z)},$e=async()=>{if(!(!n||!e||Pe)){Xe&&f(`Retrying stop request...`),Ie(!0);try{await e.service(`sessions/${n.session_id}/stop`).create({})}catch(e){console.error(`Failed to stop execution:`,e),h(`Failed to stop execution. You can try again.`)}finally{Ie(!1)}}},et=async()=>{if(!n)return;let e=(I.current?.getValue()??``).trim();if(e)try{await S?.(n.session_id,e),I.current?.clear()}catch(e){console.error(`Fork failed — keeping prompt in compose box:`,e)}},tt=async()=>{let e=I.current?.getValue()??``;if(!e.trim()||g)return;let t=e.trim();try{await w?.(n.session_id,t),I.current?.clear()}catch(e){console.error(`BTW fork failed — keeping prompt in compose box:`,e)}},nt=async t=>{if(!n||!e)return;let r=typeof t==`string`?{userPrompt:t}:{userPrompt:t.prompt||``,agenticTool:t.agent,permissionMode:t.permissionMode,modelConfig:t.modelConfig,codexSandboxMode:t.codexSandboxMode,codexApprovalPolicy:t.codexApprovalPolicy,codexNetworkAccess:t.codexNetworkAccess,mcpServerIds:t.mcpServerIds,callbackConfig:{enableCallback:t.enableCallback,includeLastMessage:t.includeLastMessage,includeOriginalPrompt:t.includeOriginalPrompt},extraInstructions:t.extraInstructions};await e.service(`sessions/${n.session_id}/spawn-prompt`).create({...r,parentPermissionMode:z}),H(!1),I.current?.clear()},rt=e=>{B(e),n&&D&&D(n.session_id,{permission_config:{...n.permission_config,mode:e}})},it=(e,t)=>{de(e),pe(t),n&&D&&D(n.session_id,{permission_config:{...n.permission_config,codex:{...n.permission_config?.codex,sandboxMode:e,approvalPolicy:t}}})},at=e=>{he(e),n&&D&&n.model_config&&D(n.session_id,{model_config:{...n.model_config,effort:e}})},ot=e=>{if(n&&D){let t={...n.model_config,mode:e.mode,model:e.model,...e.provider?{provider:e.provider}:{},updated_at:new Date().toISOString()};e.advisorModel?t.advisorModel=e.advisorModel:delete t.advisorModel,D(n.session_id,{model_config:t})}},st=()=>{switch(n.status){case`running`:return`processing`;case`completed`:return`success`;case`failed`:return`error`;case`timed_out`:return`warning`;default:return`default`}},J=n.model_config?.model&&n.agentic_tool===`opencode`&&n.model_config.provider?`${n.model_config.provider}/${n.model_config.model}`:n.model_config?.model,ct=n.model_config?.model?{mode:n.model_config.mode||`alias`,model:n.model_config.model,provider:n.model_config.provider,advisorModel:n.model_config.advisorModel}:void 0,lt=(0,$.jsxs)(`div`,{style:{position:`relative`,flexShrink:0,background:l.colorBgContainer,borderTop:`1px solid ${l.colorBorder}`,padding:`${l.sizeUnit*2}px ${l.sizeUnit*6}px ${l.sizeUnit*3}px`,marginLeft:-l.sizeUnit*6,marginRight:-l.sizeUnit*6},children:[We&&(0,$.jsx)(`div`,{style:{position:`absolute`,top:0,left:0,right:0,bottom:0,background:We,pointerEvents:`none`,zIndex:0}}),(0,$.jsxs)(V,{orientation:`vertical`,style:{width:`100%`,position:`relative`,zIndex:1},size:8,children:[te.length>0&&(0,$.jsx)(C,{type:`warning`,showIcon:!0,title:(0,$.jsxs)(`span`,{children:[te.map(t=>(0,$.jsx)(pt,{server:t,needsAuth:!0,client:e},t.mcp_server_id)),` `,`not authenticated — click to sign in.`]}),style:{marginBottom:0,borderRadius:l.borderRadius},banner:!0}),(0,$.jsx)(zi,{ref:I,sessionId:n.session_id,getDraft:N,saveDraft:F,deleteDraft:ne,onHasInputChange:L,inputValueRef:re,onSubmit:Ze,placeholder:q?`Queue here… @ for mentions, : for emoji`:`Prompt here… @ for mentions, : for emoji`,autoSize:{minRows:1,maxRows:10},client:e,userById:v,onFilesDrop:e=>{Me(e),Ae(!0)},slashCommands:(()=>{let e=n?.custom_context;return Array.isArray(e?.slash_commands)?e.slash_commands:void 0})(),skills:(()=>{let e=n?.custom_context;return Array.isArray(e?.skills)?e.skills:void 0})()}),(0,$.jsxs)(`div`,{style:{display:`flex`,flexWrap:`wrap`,gap:`${l.sizeUnit}px`,alignItems:`center`,justifyContent:`space-between`},children:[(0,$.jsxs)(V,{size:4,wrap:!0,children:[(0,$.jsx)(Fi,{client:e,sessionId:n.session_id,sessionMcpServerIds:o,mcpServerById:y,userAuthenticatedMcpServerIds:b,onOpenSessionSettings:E}),Ge&&(0,$.jsx)(Ot,{status:Ge.status,startedAt:Ge.message_range?.start_timestamp||Ge.created_at,endedAt:Ge.message_range?.end_timestamp||Ge.completed_at,durationMs:Ge.duration_ms,lastExecutorHeartbeatAt:Ge.last_executor_heartbeat_at}),(0,$.jsx)(Ht,{session:n}),G.total>0&&(0,$.jsx)(gn,{count:G.total,estimatedCost:G.cost,inputTokens:G.input,outputTokens:G.output,cacheReadTokens:G.cacheRead,cacheCreationTokens:G.cacheCreation}),K&&(0,$.jsx)(Ct,{used:K.used,limit:K.limit,taskMetadata:K.taskMetadata})]}),(0,$.jsxs)(V,{size:4,wrap:!0,style:{marginLeft:`auto`},children:[q&&(0,$.jsx)(oe,{size:`small`}),(0,$.jsx)(Ri,{client:e,session:n,modelLabel:J,modelConfig:ct,onModelConfigChange:ot,effortLevel:me,onEffortChange:at,permissionMode:z,onPermissionModeChange:rt,codexSandboxMode:ue,codexApprovalPolicy:fe,onCodexPermissionChange:it}),(0,$.jsxs)(V.Compact,{children:[(0,$.jsx)(T,{title:Pe?`Sending stop request...`:Xe?`Stopping... (Click again to retry if stuck)`:q?`Stop Execution`:`No active execution`,children:(0,$.jsx)(U,{danger:!0,icon:(0,$.jsx)(ye,{}),onClick:$e,disabled:!q||Pe,loading:Xe&&!Pe})}),j?.supportsSessionFork!==!1&&(0,$.jsx)(T,{title:g?`Disconnected from daemon`:`Fork Session`,children:(0,$.jsx)(U,{icon:(0,$.jsx)(t,{}),onClick:et,disabled:g})}),j?.supportsChildSpawn!==!1&&(0,$.jsx)(T,{title:g?`Disconnected from daemon`:q?`Session is running...`:`Spawn Subsession`,children:(0,$.jsx)(U,{icon:(0,$.jsx)(Ne,{}),onClick:()=>H(!0),disabled:g||q})}),j?.supportsSessionFork!==!1&&(0,$.jsx)(T,{title:`Ask a side question via ephemeral fork (btw)`,children:(0,$.jsx)(U,{icon:(0,$.jsx)(Se,{}),onClick:tt,disabled:g})}),(0,$.jsx)(T,{title:g?`Disconnected from daemon`:`Upload Files`,children:(0,$.jsx)(ji,{onClick:()=>Ae(!0),disabled:g})}),(0,$.jsx)(T,{title:g?`Disconnected from daemon`:q?`Queue Message`:`Send Prompt`,children:(0,$.jsx)(U,{type:`primary`,icon:(0,$.jsx)(Fe,{}),onClick:Ze,disabled:g||!ie})})]})]})]})]})]});return(0,$.jsxs)(`div`,{style:{width:`100%`,height:`100%`,display:s?`flex`:`none`,flexDirection:`column`,background:l.colorBgElevated,borderLeft:`1px solid ${l.colorBorder}`},children:[(0,$.jsx)(`div`,{style:{flexShrink:0,padding:`${l.sizeUnit*3}px ${l.sizeUnit*6}px`,borderBottom:`1px solid ${l.colorBorder}`,background:l.colorBgContainer},children:(0,$.jsxs)(`div`,{style:{display:`flex`,justifyContent:`space-between`,alignItems:`flex-start`},children:[(0,$.jsxs)(V,{size:12,align:`start`,style:{flex:1},children:[(0,$.jsx)(hn,{tool:n.agentic_tool,size:40}),(0,$.jsxs)(`div`,{style:{flex:1},children:[(0,$.jsxs)(`div`,{style:{marginBottom:4},children:[(0,$.jsx)(i.Text,{strong:!0,style:{fontSize:18,...dn(2)},children:vt(n,{includeAgentFallback:!0})}),(0,$.jsx)(O,{status:st(),text:n.status.toUpperCase(),style:{marginLeft:12}})]}),n.created_by&&(0,$.jsx)(`div`,{children:(0,$.jsx)(ft,{createdBy:n.created_by,currentUserId:a,userById:v,prefix:`Created by`})})]})]}),(0,$.jsxs)(V,{size:4,children:[(0,$.jsx)(Ni,{items:Ve}),(0,$.jsx)(ce,{menu:{items:Ye},trigger:[`click`],placement:`bottomRight`,children:(0,$.jsx)(T,{title:`More actions`,children:(0,$.jsx)(U,{type:`text`,icon:(0,$.jsx)(p,{})})})}),(0,$.jsx)(T,{title:`Close Panel`,children:(0,$.jsx)(U,{type:`text`,icon:(0,$.jsx)(Te,{}),onClick:c,style:{marginLeft:l.sizeUnit}})})]})]})}),(0,$.jsxs)(`div`,{style:{flex:1,overflow:`hidden`,display:`flex`,flexDirection:`column`,padding:`${l.sizeUnit*3}px ${l.sizeUnit*6}px 0`},children:[(0,$.jsx)(Li,{client:e,session:n,branch:r,currentUserId:a,sessionMcpServerIds:o,scrollToBottom:ve,scrollToTop:xe,setScrollToBottom:be,setScrollToTop:Ce,queuedTasks:Ee,setQueuedTasks:De,spawnModalOpen:Oe,setSpawnModalOpen:H,onSpawnModalConfirm:nt,inputValueRef:re,isOpen:s,cliViewMode:ge,setCliViewMode:_e}),!(n.agentic_tool===`claude-code-cli`&&ge===`terminal`)&&lt,n&&(0,$.jsx)(Ai,{sessionId:n.session_id,daemonUrl:dt(),open:ke,onClose:()=>{Ae(!1),Me([])},initialFiles:je,onUploadComplete:e=>{d(`Uploaded ${e.length} file(s)`)},onInsertMention:e=>{I.current?.insertText(`@${e}`)}})]})]})}),Vi=({showHelpText:e=!0})=>(0,$.jsx)(H.Item,{name:`custom_context`,label:`Custom Context (JSON)`,help:e?`Add custom fields for use in zone trigger templates (e.g., {{ session.context.yourField }})`:void 0,rules:[{validator:un}],children:(0,$.jsx)(Ut,{placeholder:`{"teamName": "Backend", "sprintNumber": 42}`,rows:4})}),{Text:Hi,Paragraph:Ui}=i,{TextArea:Wi}=L,Gi=({showHelpText:e=!1})=>(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(H.Item,{name:[`callbackConfig`,`enabled`],label:`Enable Child Completion Callbacks`,valuePropName:`checked`,children:(0,$.jsx)(ne,{})}),e&&(0,$.jsx)(Ui,{type:`secondary`,style:{fontSize:12,marginTop:-16,marginBottom:16},children:`When enabled, this session will receive notifications when spawned child sessions complete their tasks. The callback message includes the child's final result inline.`}),(0,$.jsx)(H.Item,{name:[`callbackConfig`,`includeLastMessage`],label:`Include Child's Final Answer`,valuePropName:`checked`,children:(0,$.jsx)(ne,{defaultChecked:!0})}),e&&(0,$.jsx)(Ui,{type:`secondary`,style:{fontSize:12,marginTop:-16,marginBottom:16},children:`Include the child session's last assistant message in the callback. Disable if you only want task status and statistics.`}),(0,$.jsx)(H.Item,{name:[`callbackConfig`,`template`],label:(0,$.jsxs)($.Fragment,{children:[`Custom Template `,(0,$.jsx)(Hi,{type:`secondary`,children:`(Optional)`})]}),children:(0,$.jsx)(Wi,{placeholder:`Leave empty to use default template...`,autoSize:{minRows:4,maxRows:12},style:{fontFamily:`monospace`,fontSize:12}})}),e&&(0,$.jsxs)(Ui,{type:`secondary`,style:{fontSize:12,marginTop:-16},children:[`Advanced: Customize the callback message template using Handlebars syntax. Available variables: `,(0,$.jsx)(Hi,{code:!0,children:`childSessionId`}),`, `,(0,$.jsx)(Hi,{code:!0,children:`spawnPrompt`}),`,`,` `,(0,$.jsx)(Hi,{code:!0,children:`status`}),`, `,(0,$.jsx)(Hi,{code:!0,children:`messageCount`}),`, `,(0,$.jsx)(Hi,{code:!0,children:`toolUseCount`}),`,`,` `,(0,$.jsx)(Hi,{code:!0,children:`lastAssistantMessage`})]})]});function Ki(e){switch(e){case`running`:return`processing`;case`completed`:return`success`;case`failed`:return`error`;case`timed_out`:return`warning`;default:return`default`}}var qi=({session:e,onNavigate:t})=>{let{token:n}=A.useToken(),{onSessionClick:r}=Mn(),{sessionById:o}=gr(),s=e.remote_relationships?.as_target?.find(e=>e.relationship_type===`remote_create`),c=s?.source_session_id,l=e.callback_config?.callback_session_id??s?.callback_session_id??c??e.genealogy?.parent_session_id;if(!l)return null;let u=o.get(l),d=e.callback_config?.enabled??s?.callback_enabled??!0,f=u?.archived===!0,p=u?vt(u,{includeAgentFallback:!0,includeIdFallback:!0}):`${Ze(l)} (not loaded)`,m=r?(0,$.jsxs)(i.Link,{onClick:e=>{e.preventDefault(),r&&(r(l),t?.())},children:[(0,$.jsx)(a,{style:{marginRight:4}}),(0,$.jsx)(`strong`,{children:p})]}):(0,$.jsx)(`strong`,{children:p}),h=f?`archived`:u?.status,g=d?n.colorPrimaryBorder:n.colorBorder,_=d?n.colorPrimaryBg:n.colorFillTertiary,v=d?n.colorPrimary:n.colorTextSecondary;return(0,$.jsx)(`div`,{style:{marginBottom:12,padding:`${n.sizeUnit*2}px ${n.sizeUnit*3}px`,border:`1px solid ${g}`,background:_,borderRadius:n.borderRadius},children:(0,$.jsxs)(V,{size:6,wrap:!0,children:[d?(0,$.jsx)(a,{style:{color:v}}):(0,$.jsx)(Me,{style:{color:v}}),(0,$.jsxs)(i.Text,{strong:!0,style:{color:v},children:[`Callbacks `,d?`ON`:`OFF`]}),(0,$.jsxs)(i.Text,{type:`secondary`,children:[` — `,d?`notifying`:`would notify`]}),m,u&&(0,$.jsxs)(V,{size:4,children:[(0,$.jsx)(O,{status:Ki(u.status)}),(0,$.jsx)(i.Text,{type:`secondary`,style:{fontSize:12},children:h})]})]})})},Ji=({showHelpText:e=!0})=>(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(H.Item,{name:`codexSandboxMode`,label:`Sandbox Mode`,help:e?`Controls where Codex can write files (workspace vs. full access)`:void 0,children:(0,$.jsx)(k,{placeholder:`Select sandbox mode`,options:Sn.map(({value:e,label:t,description:n})=>({value:e,label:`${t} · ${n}`}))})}),(0,$.jsx)(H.Item,{name:`codexApprovalPolicy`,label:`Approval Policy`,help:e?`Controls whether Codex must ask before executing commands`:void 0,children:(0,$.jsx)(k,{placeholder:`Select approval policy`,options:ot.map(({value:e,label:t,description:n})=>({value:e,label:`${t} · ${n}`}))})}),(0,$.jsx)(H.Item,{name:`codexNetworkAccess`,label:`Network Access`,help:e?`Allow outbound HTTP/HTTPS requests (workspace-write sandbox only)`:void 0,valuePropName:`checked`,children:(0,$.jsx)(xt,{showWarning:e})})]}),Yi=({showHelpText:e=!0,titleRequired:t=!1,titleLabel:n=`Session Title`})=>(0,$.jsx)(H.Item,{name:`title`,label:n,rules:[{required:t,message:`Please enter a session title`}],help:e&&!t?`A short descriptive name for this session`:void 0,children:(0,$.jsx)(L,{placeholder:`e.g., Auth System Implementation`})});function Xi(e,t){let n=e.permission_config?.mode??Be(e.agentic_tool),r=ze(n);return{title:e.title||``,mcpServerIds:t,modelConfig:e.model_config,permissionMode:n,codexSandboxMode:e.permission_config?.codex?.sandboxMode??r.sandboxMode,codexApprovalPolicy:e.permission_config?.codex?.approvalPolicy??r.approvalPolicy,codexNetworkAccess:e.permission_config?.codex?.networkAccess??r.networkAccess,custom_context:e.custom_context?JSON.stringify(e.custom_context,null,2):``,callbackConfig:{enabled:e.callback_config?.enabled??!0,includeLastMessage:e.callback_config?.include_last_message??!0,template:e.callback_config?.template}}}function Zi(e,t){let n={};if(e.title!==t.title&&(n.title=e.title),e.modelConfig&&(n.model_config={...e.modelConfig,updated_at:new Date().toISOString()}),e.permissionMode&&(n.permission_config={...t.permission_config,mode:e.permissionMode}),t.agentic_tool===`codex`&&(n.permission_config={...t.permission_config,...n.permission_config,codex:{sandboxMode:e.codexSandboxMode||t.permission_config?.codex?.sandboxMode||`workspace-write`,approvalPolicy:e.codexApprovalPolicy||t.permission_config?.codex?.approvalPolicy||`on-request`,networkAccess:e.codexNetworkAccess??t.permission_config?.codex?.networkAccess??!1}}),e.custom_context)try{n.custom_context=JSON.parse(e.custom_context)}catch{}else e.custom_context===``&&(n.custom_context=void 0);return e.callbackConfig&&(n.callback_config={enabled:e.callbackConfig.enabled??!0,include_last_message:e.callbackConfig.includeLastMessage??!0,template:e.callbackConfig.template||void 0}),n}var Qi=({open:e,onClose:t,session:n,mcpServerById:r,sessionMcpServerIds:a,onUpdate:s,onUpdateSessionMcpServers:c,onUpdateSessionEnvSelections:l,client:u,currentUser:d})=>{let[f]=H.useForm(),[p,m]=Q.useState(()=>Xi(n,a)),[h,g]=Q.useState([]),[_,v]=Q.useState([]),y=Q.useRef(!1),b=Q.useRef(n.session_id),S=Q.useMemo(()=>{if(!d)return!1;if(d.user_id===n.created_by)return!0;let e=d.role;return e===`admin`||e===`superadmin`},[d,n.created_by]);Q.useEffect(()=>{let t=y.current,r=n.session_id!==b.current;if(y.current=e,b.current=n.session_id,e&&!t||e&&r){let e=Xi(n,a);m(e),f.setFieldsValue(e)}},[e,n,a,f]),Q.useEffect(()=>{if(!e||!u||!S)return;let t=!1;return(async()=>{try{let e=await u.service(`sessions/${n.session_id}/env-selections`).find();t||(g(e),v(e))}catch{t||(g([]),v([]))}})(),()=>{t=!0}},[e,u,S,n.session_id]);let C=()=>{f.validateFields().then(()=>{let e=f.getFieldsValue(!0),r=Zi(e,n);Object.keys(r).length>0&&s&&s(n.session_id,r),c&&c(n.session_id,e.mcpServerIds||[]),S&&l&&(h.length!==_.length||h.some(e=>!_.includes(e)))&&l(n.session_id,h),t()})},w=()=>{f.resetFields(),t()},T=n.agentic_tool===`codex`,E=[];return T&&E.push({key:`codex-settings`,label:(0,$.jsxs)(i.Text,{strong:!0,children:[(0,$.jsx)(le,{style:{marginRight:8}}),`Codex Sandbox & Policies`]}),children:(0,$.jsx)(Ji,{showHelpText:!0})}),S&&u&&E.push({key:`env-selections`,label:(0,$.jsxs)(i.Text,{strong:!0,children:[(0,$.jsx)(F,{style:{marginRight:8}}),`Environment Variables`]}),children:(0,$.jsx)(Pn,{ownerUserId:n.created_by,client:u,value:h,onChange:g})}),E.push({key:`callback-config`,label:(0,$.jsxs)(i.Text,{strong:!0,children:[(0,$.jsx)(Ae,{style:{marginRight:8}}),`Callbacks`]}),children:(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(qi,{session:n,onNavigate:t}),(0,$.jsx)(Gi,{showHelpText:!0})]})}),E.push({key:`advanced`,label:(0,$.jsxs)(i.Text,{strong:!0,children:[(0,$.jsx)(le,{style:{marginRight:8}}),`Advanced`]}),children:(0,$.jsx)(Xt,{fallbackTitle:`Failed to load Advanced settings.`,resetKey:n.session_id,children:(0,$.jsx)(Vi,{showHelpText:!0})})}),(0,$.jsx)(Ee,{title:`Session Settings`,open:e,onOk:C,onCancel:w,okText:`Save`,cancelText:`Cancel`,width:600,children:(0,$.jsxs)(H,{form:f,layout:`vertical`,initialValues:p,children:[(0,$.jsx)(Yi,{showHelpText:!1,titleRequired:!1,titleLabel:`Title`}),(0,$.jsx)(H.Item,{label:`Session IDs`,children:(0,$.jsx)(Wt,{session:n})}),(0,$.jsx)(Tt,{agenticTool:n.agentic_tool,mcpServerById:r,showHelpText:!1,compact:!0,client:u}),(0,$.jsx)(se,{dashed:!0,style:{margin:`8px 0 16px`}}),(0,$.jsx)(o,{ghost:!0,destroyOnHidden:!1,expandIcon:({isActive:e})=>(0,$.jsx)(x,{rotate:e?180:0}),items:E})]})})},$i=Ve.MEMBER,ea=`\x1B]8;`,ta=`\x1B]8;;\x07`,na=`\x07`,ra=e=>{let t=``,n=0;for(;n<e.length;){let r=e.indexOf(ea,n);if(r===-1){t+=e.slice(n);break}t+=e.slice(n,r);let i=r+4,a=e.indexOf(na,i);if(a===-1){t+=e.slice(r);break}let o=e.slice(i,a),s=o.lastIndexOf(`;`),c=(s===-1?o:o.slice(s+1)).trim(),l=a+1,u=e.indexOf(ta,l);if(u===-1){t+=e.slice(l);break}let d=e.slice(l,u);if(!c)t+=d;else if(d.includes(c))t+=d;else{let e=d.trim(),n=e.length>0?e:c;t+=`${n} (${c})`}n=u+6}return t},ia=({open:e,onClose:t,client:n,user:r,branchId:i,initialCommands:a=[]})=>{let{modal:o}=Re.useApp(),s=(0,Q.useRef)(null),c=(0,Q.useRef)(null),[l,u]=(0,Q.useState)(!1),[d,f]=(0,Q.useState)(!1),[p,m]=(0,Q.useState)(!1),[h,g]=(0,Q.useState)({}),_=W(r?.role,$i);return(0,Q.useEffect)(()=>{if(!e||!d||!s.current||!n||!_)return;if(!r?.user_id){console.error(`[Terminal] Terminal requires authenticated user`);return}let t=!0,o=null,l=e=>e,f=n.io,p=()=>{f&&(f.off(`terminal:output`,h),f.off(`terminal:exit`,v),o&&f.emit(`leave`,o))},h=e=>{c.current&&e.userId===r?.user_id&&c.current.write(l(e.data))},v=e=>{c.current&&e.userId===r?.user_id&&(c.current.writeln(`\r\n\r\n[Terminal exited with code ${e.exitCode}]`),c.current.writeln(`[Close and reopen terminal to start a new session]`),u(!1))},y=()=>{let e=new rr({allowProposedApi:!0,fontSize:14,fontFamily:`Menlo, Monaco, "Courier New", monospace`,cursorBlink:!0,scrollback:1e3,rows:40,cols:160,linkHandler:{activate:(e,t)=>{window.open(t,`_blank`,`noopener,noreferrer`)},hover:()=>{}},theme:{background:`#141414`,foreground:`#ffffff`,cursor:`#2e9a92`,cursorAccent:`#141414`,black:`#000000`,red:`#ff4d4f`,green:`#52c41a`,yellow:`#faad14`,blue:`#1890ff`,magenta:`#eb2f96`,cyan:`#2e9a92`,white:`#f0f0f0`,brightBlack:`#8c8c8c`,brightRed:`#ff7875`,brightGreen:`#95de64`,brightYellow:`#ffc53d`,brightBlue:`#40a9ff`,brightMagenta:`#f759ab`,brightCyan:`#3db5ab`,brightWhite:`#ffffff`}});e.open(s.current),c.current=e;let t=new nr;e.loadAddon(t);let n=new tr((e,t)=>{window.open(t,`_blank`,`noopener,noreferrer`)});return e.loadAddon(n),e};return(async()=>{let e=y();try{let s=await n.service(`terminals`).create({rows:40,cols:160,branchId:i});if(!t)return;if(o=s.channel,u(!0),l=ra,g({zellijSession:s.sessionName,zellijReused:!s.isNew,branchName:s.branchName}),s.isNew&&e.clear(),f.emit(`join`,s.channel),f.on(`terminal:output`,h),f.on(`terminal:exit`,v),e.onData(e=>{f.emit(`terminal:input`,{userId:r?.user_id,input:e})}),e.onResize(({cols:e,rows:t})=>{f.emit(`terminal:resize`,{userId:r?.user_id,cols:e,rows:t})}),f.emit(`terminal:resize`,{userId:r?.user_id,cols:e.cols,rows:e.rows}),a.length>0)for(let e of a)f.emit(`terminal:input`,{userId:r?.user_id,input:`${e}\r`})}catch(e){console.error(`[Terminal] Failed to create terminal:`,e);let t=e instanceof Error?e.message:String(e);if(/zellij is not installed/i.test(t)){m(!0),c.current&&=(c.current.dispose(),null);return}c.current&&(c.current.writeln(`\r
3
+ Failed to connect to terminal`),c.current.writeln(`Error: ${t}`))}})(),()=>{t=!1,c.current&&=(c.current.dispose(),null),p(),u(!1),g({}),m(!1)}},[e,d,n,a,_,i,r?.user_id]),(0,$.jsx)(Ee,{title:`Terminal${h.branchName?` - ${h.branchName}`:``}`,open:e,onCancel:()=>{l?o.confirm({title:`Close Terminal?`,content:`The Zellij session will continue running in the background. You can reconnect by reopening the terminal.`,okText:`Close`,okType:`primary`,cancelText:`Cancel`,onOk:()=>{t()}}):t()},afterOpenChange:f,footer:null,width:`auto`,styles:{body:{padding:`16px`,background:`#000`}},centered:!0,children:_?p?(0,$.jsxs)(`div`,{style:{padding:`24px`,color:`#fff`,maxWidth:560},children:[(0,$.jsx)(`p`,{style:{marginTop:0},children:(0,$.jsx)(`strong`,{children:`Zellij isn't installed on the daemon host.`})}),(0,$.jsxs)(`p`,{children:[`The web terminal uses`,` `,(0,$.jsx)(`a`,{href:`https://zellij.dev/`,target:`_blank`,rel:`noopener noreferrer`,style:{color:`#3db5ab`},children:`Zellij`}),` `,`for persistent, multiplexed sessions. Install it to enable terminals — everything else in Agor works without it.`]}),(0,$.jsx)(`p`,{style:{marginBottom:0},children:(0,$.jsx)(`a`,{href:`https://agor.live/guide/extended-install#optional-zellij-for-the-web-terminal`,target:`_blank`,rel:`noopener noreferrer`,style:{color:`#3db5ab`},children:`Extended install guide →`})})]}):(0,$.jsx)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:12,color:`#fff`},children:(0,$.jsx)(`div`,{ref:s})}):(0,$.jsxs)(`div`,{style:{padding:`24px`,color:`#fff`},children:[(0,$.jsxs)(`p`,{children:[`Terminal access requires at least `,(0,$.jsx)(`strong`,{children:$i}),` role.`]}),(0,$.jsx)(`p`,{style:{marginBottom:0},children:`Contact your Agor administrator to request elevated permissions.`})]})})},{Text:aa,Link:oa}=i,sa=({open:e,onClose:t})=>{let{customTheme:n,setCustomTheme:r,setThemeMode:i}=ht(),[a]=H.useForm();(0,Q.useEffect)(()=>{if(e){let e=n?JSON.stringify(n,null,2):ca();a.setFieldsValue({themeConfig:e})}},[e,n,a]);let o=async()=>{try{let e=await a.validateFields();r(JSON.parse(e.themeConfig)),i(`custom`),t()}catch(e){console.error(`Theme validation failed:`,e)}},s=()=>{a.setFieldsValue({themeConfig:ca()})},c=()=>{a.resetFields(),t()};return(0,$.jsxs)(Ee,{title:`Custom Theme Editor`,open:e,onCancel:c,width:700,footer:(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(U,{onClick:s,children:`Reset to Default`}),(0,$.jsx)(U,{onClick:c,children:`Cancel`}),(0,$.jsx)(U,{type:`primary`,onClick:o,children:`Save & Apply`})]}),children:[(0,$.jsx)(C,{title:`Edit your custom theme configuration`,description:(0,$.jsxs)(aa,{children:[`Modify the JSON below to customize your Ant Design theme. See the`,` `,(0,$.jsx)(oa,{href:`https://ant.design/docs/react/customize-theme`,target:`_blank`,rel:`noopener noreferrer`,children:`Ant Design theme documentation`}),` `,`for available options.`]}),type:`info`,showIcon:!0,style:{marginBottom:16}}),(0,$.jsx)(H,{form:a,layout:`vertical`,children:(0,$.jsx)(H.Item,{name:`themeConfig`,rules:[{required:!0,message:`Please enter theme configuration`},{validator:un}],children:(0,$.jsx)(Ut,{placeholder:`Enter your custom theme JSON configuration...`,rows:16})})})]})};function ca(){return JSON.stringify({token:{colorPrimary:`#2e9a92`,colorSuccess:`#52c41a`,colorWarning:`#faad14`,colorError:`#ff4d4f`,colorInfo:`#2e9a92`,colorLink:`#2e9a92`,borderRadius:8}},null,2)}var la=e=>({...e,collapsed:!1,activeTab:`comments`}),ua=e=>e.collapsed?{collapsed:!1,activeTab:`assistant`}:{...e,collapsed:!0},{Content:da}=ie,fa=({setCurrentBoardId:e})=>(kt(e),null),pa=Object.freeze([]),ma=Object.freeze([]),ha=320,ga=45,_a=44,va=30,ya=e=>Math.min(ga,ha/e*100),ba=(e,t,n)=>Math.min(n,Math.max(t,e)),xa=({client:e,user:t,connected:n=!1,connecting:r=!1,sessionById:i,sessionsByBranch:a,availableAgents:o,boardById:s,boardObjectById:c,boardObjectsByBoardId:l,commentById:f,cardById:p,cardTypeById:m,repoById:h,branchById:g,userById:_,mcpServerById:v,sessionMcpServerIds:y,userAuthenticatedMcpServerIds:x,initialBoardId:S,openSettingsTab:C,onSettingsClose:w,openUserSettings:E,onUserSettingsClose:D,openNewBranchModal:O,onNewBranchModalClose:k,suppressLeftPanel:A=!1,onCreateSession:ee,onForkSession:j,onBtwForkSession:te,onSpawnSession:M,onSendPrompt:N,onUpdateSession:P,onDeleteSession:F,onCreateBoard:ne,onUpdateBoard:I,onDeleteBoard:re,onArchiveBoard:ae,onUnarchiveBoard:oe,onCreateRepo:L,onCreateLocalRepo:se,onUpdateRepo:R,onDeleteRepo:z,onArchiveOrDeleteBranch:ce,onUnarchiveBranch:le,onUpdateBranch:B,onCreateBranch:ue,onStartEnvironment:de,onStopEnvironment:fe,onNukeEnvironment:pe,onExecuteScheduleNow:me,onCreateUser:he,onUpdateUser:ge,onDeleteUser:_e,onCreateMCPServer:ve,onDeleteMCPServer:ye,gatewayChannelById:be,onCreateGatewayChannel:xe,onUpdateGatewayChannel:Se,onDeleteGatewayChannel:Ce,artifactById:V,onUpdateArtifact:we,onDeleteArtifact:Te,onUpdateSessionMcpServers:Ee,onUpdateSessionEnvSelections:De,onSendComment:Oe,onReplyComment:H,onResolveComment:ke,onToggleReaction:Ae,onDeleteComment:je,onLogout:Me,onRetryConnection:Ne,onRestartOnboarding:U,instanceLabel:Pe,instanceDescription:Fe,webTerminalEnabled:Ie=!1,branchStorageConfig:Le})=>{let{showWarning:Re}=Qe(),ze=$e(),Be=Je(),G=ze.pathname===`/`,K=wr(Be),[Ve,He]=(0,Q.useState)(!1),Ue=(0,Q.useRef)(null),[Ge,Ke]=(0,Q.useState)(null),[qe,Ye]=(0,Q.useState)(!1),[q,Xe]=(0,Q.useState)(`assistant`),[Ze,et]=(0,Q.useState)(null),[tt,nt]=(0,Q.useState)(null),[rt,it]=(0,Q.useState)(null),at=rt?.kind===`branch`?rt.id:null,ot=rt?.kind===`artifact`?rt.id:null,J=(0,Q.useMemo)(()=>!G&&!Ve&&tt&&i.has(tt)?tt:null,[G,Ve,tt,i]),[lt,dt]=(0,Q.useState)(`assistant`),[ft,pt]=(0,Q.useState)(!1),[mt,ht]=(0,Q.useState)(()=>typeof window>`u`?1440:window.innerWidth);(0,Q.useEffect)(()=>{if(typeof window>`u`)return;let e=()=>ht(window.innerWidth);return window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[]);let gt=(0,Q.useMemo)(()=>ya(mt),[mt]),{isOpen:_t,section:vt,openSettings:yt,closeSettings:bt,setSection:xt}=st(),St=_t||!!C,Ct=C||vt,wt=ft||!!E,[Y,Tt]=(0,Q.useState)(()=>S||``),[Et,Dt]=ct(`agor:commentsPanelCollapsed`,!1),[Ot,kt]=jn(t?.user_id,`panel:left:size`,24),At=s.get(Y),jt=(G||Ve)&&!K,Mt=jt?``:Y,Pt=jt?void 0:At;(0,Q.useLayoutEffect)(()=>{!G||K||(Y&&Tt(``),tt&&nt(null),rt&&it(null),Ve&&He(!1))},[rt,Y,K,G,Ve,tt]);let X=Et||A||jt,Ft=(0,Q.useRef)(null),It=ba(Ot,gt,ga),[Lt,zt]=jn(t?.user_id,`panel:right:size`,50),Bt=ba(Lt,15,75),Vt=(0,Q.useRef)(null),Ht=(0,Q.useRef)(!1),Ut=(0,Q.useRef)(!1),[Wt,Kt]=(0,Q.useState)(null),[qt,Jt]=(0,Q.useState)(null),[Xt,Zt]=(0,Q.useState)(!1),[Qt,$t]=(0,Q.useState)([]),[en,tn]=(0,Q.useState)(void 0),[nn,an]=(0,Q.useState)(null),[on,sn]=(0,Q.useState)(null),[cn,ln]=(0,Q.useState)(void 0),[un,dn]=(0,Q.useState)(null),[mn,hn]=(0,Q.useState)(!1),[gn,_n]=ct(`agor:eventStreamPanelCollapsed`,!0),{recentBoards:vn,recentBoardIds:yn,trackBoardVisit:bn}=ut(Rt(s),Y);(0,Q.useEffect)(()=>{Y&&(localStorage.setItem(`agor:currentBoardId`,Y),bn(Y))},[Y,bn]),(0,Q.useEffect)(()=>{Yt()},[]),Sr(e,t?.user_id,t?.preferences?.audio),(0,Q.useEffect)(()=>{Ft.current&&(X?Ft.current.collapse():(Ft.current.expand(),Ft.current.resize(It)))},[It,X]),(0,Q.useEffect)(()=>{Vt.current&&(J||!gn)&&Vt.current.resize(Bt)},[J,Bt,gn]),Tn({currentBoardId:Y,currentSessionId:J,boardById:s,sessionById:i,branchById:g,artifactById:V,onBoardChange:e=>{Tt(e)},onSessionChange:e=>{nt(e)},onActiveUrlTargetChange:it});let Z=Gt({boardById:s,sessionById:i,branchById:g,artifactById:V}),Sn=(0,Q.useCallback)(e=>{e!==Y&&nt(null),Tt(e)},[Y]);(0,Q.useEffect)(()=>{if(s.size===0){if(!n)return;Y&&Sn(``);return}Y&&!s.has(Y)&&Sn(Rt(s)[0]?.board_id||``)},[s,Y,Sn,n]),(0,Q.useEffect)(()=>{if(qe){let e=Ue.current?.getViewportCenter();et(e||null)}},[Y,qe]);let Cn=(0,Q.useMemo)(()=>Y&&l.get(Y)||ma,[l,Y]);xr(Y,a,Cn);let wn=t?.preferences?.eventStream?.enabled??!0,{events:En,clearEvents:Mn}=yr({client:e,enabled:!gn}),Nn=(0,Q.useCallback)((e=[],t)=>{$t(e),tn(t),Zt(!0)},[]),Pn=(0,Q.useCallback)(e=>{dt(e.activeTab),Dt(e.collapsed)},[Dt]),Fn=(0,Q.useCallback)(()=>{Pn(ua({collapsed:X,activeTab:lt}))},[Pn,X,lt]),In=(0,Q.useCallback)(()=>{Pn(la({collapsed:!0,activeTab:`assistant`}))},[Pn]),zn=(0,Q.useCallback)(e=>{Jt(t=>t===e?null:e)},[]),Bn=(0,Q.useCallback)(()=>{Y&&Z.goToBoard(Y)},[Z,Y]),Vn=()=>{Zt(!1),$t([]),tn(void 0)},Hn=async e=>{let t=await ee?.(e,Y);Ke(null),t&&Z.goToSession(t)},Un=async e=>{let t=await ue?.(e.repoId,{name:e.name,ref:e.ref,refType:e.refType,createBranch:e.createBranch,sourceBranch:e.sourceBranch,pullLatest:e.pullLatest,issue_url:e.issue_url,pull_request_url:e.pull_request_url,...e.board_id?{boardId:e.board_id}:{},...e.position?{position:e.position}:{},...e.storage_mode?{storage_mode:e.storage_mode}:{},...e.clone_depth===void 0?{}:{clone_depth:e.clone_depth}});Ye(!1),t&&Z.goToBranch(t.branch_id)},Wn=async e=>{if(!ne)return;let t=await ne(e);t?.board_id&&Z.goToBoard(t.board_id)},Gn=async(n,r)=>{let i=n.repoId;if(!i||!ue||!B)throw Error(`Missing repository or branch creation handler for assistant creation.`);r?.onStatusChange?.(`Creating assistant branch…`);let a=await Cr({displayName:n.displayName,description:n.description,emoji:n.emoji,repoId:i,branchName:n.branchName,sourceBranch:n.sourceBranch},{client:e,repoById:h,onCreateBranch:ue,onUpdateBranch:B});if(!a)throw Error(`Assistant branch could not be created. Please check the branch details and try again.`);let o={branch_id:a.branch_id,agent:n.agent,title:`${n.emoji?`${n.emoji} `:``}${n.displayName} bootstrap`,initialPrompt:Nt({displayName:n.displayName,emoji:n.emoji,description:n.description,userName:t?.name,userEmail:t?.email}),modelConfig:n.modelConfig,effort:n.effort,mcpServerIds:n.mcpServerIds,permissionMode:n.permissionMode,codexSandboxMode:n.codexSandboxMode,codexApprovalPolicy:n.codexApprovalPolicy,codexNetworkAccess:n.codexNetworkAccess};try{if(!ee)throw Error(`Missing session creation handler.`);let t=await fn({client:e,branchId:a.branch_id,boardId:a.board_id||Y,sessionConfig:o,onCreateSession:ee,onStatusChange:r?.onStatusChange});Z.goToSession(t);return}catch(e){console.error(`Assistant session bootstrap failed:`,e),Re(`Assistant branch was created, but the first session could not start: ${e instanceof Error?e.message:String(e)}. Opening the branch instead.`,{key:`assistant-bootstrap-session`,duration:8})}r?.onStatusChange?.(`Opening assistant branch…`),Z.goToBranch(a.branch_id)},Kn=(0,Q.useRef)(i);Kn.current=i;let Jn=(0,Q.useRef)(g);Jn.current=g;let Yn=(0,Q.useCallback)(t=>{let n=Kn.current.get(t);e&&n?.ready_for_prompt&&e.service(`sessions`).patch(t,{ready_for_prompt:!1}).catch(()=>{});let r=n?.branch_id?Jn.current.get(n.branch_id):void 0;e&&r?.needs_attention&&e.service(`branches`).patch(r.branch_id,{needs_attention:!1}).catch(()=>{}),Z.goToSession(t)},[e,Z]),Xn=(0,Q.useCallback)(async(n,r,i,a,o)=>{if(e)try{await e.service(`sessions/${n}/permission-decision`).create({requestId:r,taskId:i,allow:a,reason:a?`Approved by user`:`Denied by user`,remember:o!==We.ONCE,scope:o,decidedBy:t?.user_id||`unknown`})}catch(e){console.error(`❌ Failed to send permission decision:`,e)}},[e,t?.user_id]),Zn=J&&i.get(J)||null,Qn=Zn?g.get(Zn.branch_id):null;(0,Q.useEffect)(()=>{tt&&!i.has(tt)&&(Be.sessionShortId&&Y&&Z.goToBoard(Y,{replace:!0}),nt(null))},[Y,Z,Be.sessionShortId,tt,i]);let $n=nn?i.get(nn):null,er=At?.primary_assistant_id??null,tr=er?g.get(er):void 0,nr=tr?h.get(tr.repo_id):void 0,rr=!!(er&&!tr);(0,Q.useEffect)(()=>{dt(rr?`all-sessions`:`assistant`)},[At?.board_id,rr]),vr(At);let ir=on?g.get(on):null,ar=ir?h.get(ir.repo_id):null,or=ir&&a.get(ir.branch_id)||[],sr=Ge?g.get(Ge):null,cr=(0,Q.useMemo)(()=>Cn.filter(e=>e.branch_id).map(e=>g.get(e.branch_id)).filter(e=>e!==void 0),[Cn,g]),lr=Rt(f).filter(e=>e.board_id===Y&&!e.resolved),ur=t?.name||t?.email?.split(`@`)[0]||``,pr=!!ur&&lr.some(e=>[`@${ur}`,`@"${ur}"`,`@${t?.email}`,`@"${t?.email}"`].some(t=>e.content.includes(t))),mr=(0,Q.useMemo)(()=>({repoById:h,userById:_,mcpServerById:v,userAuthenticatedMcpServerIds:x}),[h,_,v,x]),hr=(0,Q.useMemo)(()=>({sessionById:i,branchById:g,sessionsByBranch:a}),[i,g,a]),gr=Ie&&W(t?.role,$i);return(0,$.jsx)(fr,{value:mr,children:(0,$.jsx)(dr,{value:hr,children:(0,$.jsxs)(Ln,{value:(0,Q.useMemo)(()=>({onSendPrompt:N,onFork:j,onBtwFork:te,onSubsession:M,onUpdateSession:P,onDeleteSession:F,onPermissionDecision:Xn,onStartEnvironment:de,onStopEnvironment:fe,onNukeEnvironment:pe,onViewLogs:e=>dn(e),onOpenSettings:e=>an(e),onSessionClick:Yn,onOpenBranch:(e,t)=>{sn(e),ln(t)},onOpenTerminal:gr?Nn:void 0}),[N,j,te,M,P,F,Xn,de,fe,pe,Yn,Nn,gr]),children:[(0,$.jsx)(fa,{setCurrentBoardId:Sn}),(0,$.jsxs)(ie,{style:{height:`100vh`},children:[(0,$.jsx)(Rn,{user:t,presenceClient:e,presenceUsers:Rt(_),currentUserId:t?.user_id,connected:n,connecting:r,onMenuClick:Fn,onCommentsClick:In,onEventStreamClick:()=>{J?(Y&&Z.goToBoard(Y),_n(!1)):_n(!gn)},onSettingsClick:()=>yt(),onUserSettingsClick:()=>pt(!0),onThemeEditorClick:()=>hn(!0),onLogout:Me,onRetryConnection:Ne,currentBoardName:Pt?.name,currentBoardIcon:Pt?.icon,unreadCommentsCount:lr.filter(e=>!e.parent_comment_id).length,eventStreamEnabled:wn,hasUserMentions:pr,boards:Rt(s),currentBoardId:Mt,onBoardChange:Z.goToBoard,onHomeClick:()=>{He(!0),Z.goHome()},branchById:g,boardById:s,onUserClick:(e,t,n)=>{t&&Z.goToBoard(t)},instanceLabel:Pe,recentBoards:vn,instanceDescription:Fe,sessionById:i,artifactById:V,mcpServerById:v}),(0,$.jsxs)(da,{style:{position:`relative`,overflow:`hidden`,display:`flex`},children:[(0,$.jsxs)(An,{id:`main-layout`,direction:`horizontal`,style:{flex:1},onLayout:e=>{!X&&Ht.current&&e.length>=2&&kt(ba(e[0],gt,ga))},children:[(0,$.jsx)(kn,{id:`assistant-panel`,order:1,ref:Ft,collapsible:!0,defaultSize:X?0:It,collapsedSize:0,minSize:X?0:gt,maxSize:ga,style:{minWidth:X?0:ha},children:!X&&(0,$.jsx)(jr,{client:e,board:At||null,activeTab:lt,onTabChange:dt,primaryAssistantBranch:tr,primaryAssistantRepo:nr,primaryAssistantInaccessible:rr,sessionsByBranch:a,branchById:g,repoById:h,userById:_,currentUserId:t?.user_id,selectedSessionId:J,onSessionClick:Yn,onCreateSession:Ke,onForkSession:j,onSpawnSession:M,onArchiveOrDelete:ce,onOpenSettings:(e,t)=>{sn(e),ln(t)},onOpenSessionSettings:an,onOpenTerminal:gr?Nn:void 0,onStartEnvironment:de,onStopEnvironment:fe,onViewLogs:dn,onNukeEnvironment:pe,onExecuteScheduleNow:me,comments:Rt(f).filter(e=>e.board_id===Y),boardObjects:At?.objects,onSendComment:e=>Oe?.(Y||``,e),onReplyComment:H,onResolveComment:ke,onToggleReaction:Ae,onDeleteComment:je,hoveredCommentId:Wt,selectedCommentId:qt,onCollapse:()=>Dt(!0)})}),(0,$.jsx)(On,{style:{position:`relative`,width:X?`0px`:`4px`,background:`var(--ant-color-border-secondary)`,cursor:X?`default`:`col-resize`,transition:`background 0.2s`,pointerEvents:X?`none`:`auto`,overflow:`visible`,zIndex:10},onDragging:e=>{Ht.current=e},onMouseEnter:e=>{X||(e.currentTarget.style.background=`var(--ant-color-primary)`)},onMouseLeave:e=>{X||(e.currentTarget.style.background=`var(--ant-color-border-secondary)`)}}),(0,$.jsx)(kn,{id:`content-panel`,order:2,defaultSize:X?100:100-It,minSize:40,children:(0,$.jsxs)(An,{id:`canvas-session`,direction:`horizontal`,style:{flex:1},onLayout:e=>{J&&Ut.current&&e.length===2&&zt(ba(e[1],15,75))},children:[(0,$.jsx)(kn,{id:`canvas-panel`,order:1,defaultSize:J?100-Bt:100,minSize:20,children:(0,$.jsxs)(`div`,{style:{position:`relative`,overflow:`hidden`,height:`100%`},children:[jt?(0,$.jsx)(wi,{client:e,connected:n,boardById:s,recentBoardIds:yn,branchById:g,repoById:h,sessionById:i,sessionsByBranch:a,userById:_,currentUserId:t?.user_id,onBoardClick:Z.goToBoard,onBranchClick:Z.goToBranch,onSessionClick:Yn}):(0,$.jsx)(qn,{ref:Ue,board:At||null,client:e,sessionById:i,sessionsByBranch:a,userById:_,repoById:h,branches:cr,primaryAssistantId:er,branchById:g,boardObjectById:c,boardObjectsByBoardId:l,commentById:f,cardById:p,currentUserId:t?.user_id,selectedSessionId:J,activeUrlTargetBranchId:at,activeUrlTargetArtifactId:ot,availableAgents:o,mcpServerById:v,sessionMcpServerIds:y,onSessionClick:Yn,onSessionUpdate:P,onSessionDelete:F,onForkSession:j,onSpawnSession:M,onUpdateSessionMcpServers:Ee,onOpenSettings:an,onCreateSessionForBranch:Ke,onOpenBranch:sn,onArchiveOrDeleteBranch:ce,onOpenTerminal:gr?Nn:void 0,onStartEnvironment:de,onStopEnvironment:fe,onViewLogs:dn,onNukeEnvironment:pe,onOpenCommentsPanel:In,onCommentHover:Kt,onCommentSelect:zn}),(0,$.jsx)(Ti,{onClick:()=>{et((jt?null:Ue.current?.getViewportCenter())||null),Xe(`assistant`),Ye(!0)}})]})}),(J||!gn)&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(On,{style:{width:`4px`,background:`var(--ant-color-border-secondary)`,cursor:`col-resize`,transition:`background 0.2s`},onDragging:e=>{Ut.current=e},onMouseEnter:e=>{e.currentTarget.style.background=`var(--ant-color-primary)`},onMouseLeave:e=>{e.currentTarget.style.background=`var(--ant-color-border-secondary)`}}),(0,$.jsx)(kn,{id:`session-panel`,order:2,ref:Vt,defaultSize:Bt,minSize:15,maxSize:75,children:J?(0,$.jsx)(Bi,{client:e,session:Zn,branch:Qn,currentUserId:t?.user_id,sessionMcpServerIds:y.get(J)??pa,open:!!J,onClose:Bn}):(0,$.jsx)(Yr,{collapsed:!1,onToggleCollapse:()=>_n(!0),events:En,onClear:Mn,currentUserId:t?.user_id,selectedSessionId:J,currentBoard:At,client:e,branchActions:{onSessionClick:Yn,onCreateSession:e=>Ke(e),onOpenSettings:e=>sn(e),onNukeEnvironment:pe}})})]})]})})]}),At&&(0,$.jsx)(T,{title:X?`Open side panel`:`Close side panel`,placement:`right`,getPopupContainer:()=>document.body,children:(0,$.jsx)(`button`,{type:`button`,"aria-label":X?`Open side panel`:`Close side panel`,onClick:()=>Dt(!Et),style:{position:`absolute`,top:`50%`,left:X?0:`calc(${It}% + 2px)`,transform:`translate(-50%, -50%)`,width:_a,height:_a,padding:0,border:0,background:`transparent`,cursor:`pointer`,pointerEvents:`auto`,zIndex:20,display:`flex`,alignItems:`center`,justifyContent:`center`},children:(0,$.jsx)(`span`,{"aria-hidden":`true`,style:{width:va,height:va,borderRadius:`50%`,border:`1px solid var(--ant-color-border)`,background:`var(--ant-color-bg-container)`,boxShadow:`0 1px 4px rgba(0,0,0,0.18)`,color:`var(--ant-color-text)`,cursor:`pointer`,display:`flex`,alignItems:`center`,justifyContent:`center`},children:X?(0,$.jsx)(b,{style:{fontSize:12}}):(0,$.jsx)(u,{style:{fontSize:12}})})})})]}),(0,$.jsx)(d,{style:{display:`none`},openFileDialogOnClick:!1,showUploadList:!1}),Ge&&(0,$.jsx)(Ei,{open:!0,onClose:()=>Ke(null),onCreate:Hn,availableAgents:o,branchId:Ge,branch:sr||void 0,mcpServerById:v,currentUser:t,client:e,userById:_}),(0,$.jsx)(rn,{open:St,onClose:()=>{bt(),w?.()},client:e,currentUser:t,boardById:s,boardObjects:Rt(c),repoById:h,branchById:g,sessionById:i,sessionsByBranch:a,userById:_,mcpServerById:v,cardById:p,cardTypeById:m,activeTab:Ct,onTabChange:e=>{xt(e),C&&w?.()},onCreateBoard:ne,onUpdateBoard:I,onDeleteBoard:re,onArchiveBoard:ae,onUnarchiveBoard:oe,onCreateRepo:L,onCreateLocalRepo:se,onUpdateRepo:R,onDeleteRepo:z,onArchiveOrDeleteBranch:ce,onUnarchiveBranch:le,onUpdateBranch:B,onCreateBranch:ue,onStartEnvironment:de,onStopEnvironment:fe,onCreateUser:he,onUpdateUser:ge,onDeleteUser:_e,onCreateMCPServer:ve,onDeleteMCPServer:ye,gatewayChannelById:be,onCreateGatewayChannel:xe,onUpdateGatewayChannel:Se,onDeleteGatewayChannel:Ce,artifactById:V,onUpdateArtifact:we,onDeleteArtifact:Te,onCreateAssistant:()=>{bt(),w?.(),et(null),Xe(`assistant`),Ye(!0)},branchStorageConfig:Le}),$n&&(0,$.jsx)(Qi,{open:!!nn,onClose:()=>an(null),session:$n,mcpServerById:v,sessionMcpServerIds:nn&&y.get(nn)||[],onUpdate:P,onUpdateSessionMcpServers:Ee,onUpdateSessionEnvSelections:De,client:e,currentUser:t}),(0,$.jsx)(xn,{open:!!on,onClose:()=>{sn(null),ln(void 0)},defaultTab:cn,branch:ir||null,repo:ar||null,sessions:or,boardById:s,mcpServerById:v,client:e,currentUser:t,onUpdateBranch:B,onUpdateRepo:R,onArchiveOrDelete:ce,onOpenSettings:()=>{sn(null),yt()},onSessionClick:Yn,onExecuteScheduleNow:me}),(0,$.jsx)(ia,{open:Xt,onClose:Vn,client:e,user:t,branchId:en,initialCommands:Qt}),(0,$.jsx)(Wr,{open:qe,onClose:()=>{Ye(!1),Xe(`assistant`),et(null)},defaultTab:q,repoById:h,boardById:s,currentBoardId:Y,defaultPosition:Ze||void 0,onCreateBranch:Un,onCreateBoard:Wn,onCreateRepo:e=>L?.(e),onCreateLocalRepo:e=>se?.(e),onCreateAssistant:Gn,availableAgents:o,mcpServerById:v,currentUser:t,client:e,branchStorageConfig:Le}),un&&(0,$.jsx)(Dn,{open:!!un,onClose:()=>dn(null),branch:g.get(un),client:e}),(0,$.jsx)(sa,{open:mn,onClose:()=>hn(!1)}),(0,$.jsx)(pn,{open:wt,onClose:()=>{pt(!1),D?.()},user:t||null,currentUser:t||null,mcpServerById:v,client:e,onUpdate:ge,onRestartOnboarding:async()=>{pt(!1),D?.(),await U?.()}})]})]})})})};export{xa as App};
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime--c01j_DQ.js";import{An as t,At as n,B as r,Cn as i,Ft as a,T as o,Wn as s,Xn as c,bn as l,n as u,on as d,qt as f,w as p,wn as m}from"./antd-C-HfEC4E.js";import{t as h}from"./message-BtWWJ9Af.js";import{i as g,r as _}from"./sandpack-BQW_FQ7G.js";import{N as v}from"./editor-C-HJ7Yw0.js";import{B as y,Ft as b,H as x,Lt as S,Rt as C,V as w}from"./index-DxPuzG7E.js";function T(e){let t=`body{margin:0}`,n=`/styles.css`,r=e[n];return r?.includes(t)?e:{...e,[n]:r?`${t}\n${r}`:t}}var E=e(c(),1);function D(){return typeof window>`u`?null:S()??localStorage.getItem(`feathers-jwt`)}function O(){let e=D();return{"Content-Type":`application/json`,...e?{Authorization:`Bearer ${e}`}:{}}}function k(){let e=D();if(!e)return null;try{let t=e.split(`.`);if(t.length<2)return null;let n=t[1].replace(/-/g,`+`).replace(/_/g,`/`);for(;n.length%4!=0;)n+=`=`;let r=JSON.parse(atob(n));return typeof r.sub==`string`?r.sub:null}catch{return null}}var A=v(),j=50,M=2e3,N=1e3,P=6e3;function F({artifactId:e,contentHash:t}){let{logs:n}=g({resetOnPreviewRestart:!1}),r=(0,E.useRef)(0),i=(0,E.useRef)(0),a=(0,E.useRef)(null);return(0,E.useEffect)(()=>{if(n.length<=r.current)return;let o=()=>{let a=n.slice(r.current,r.current+j);r.current=Math.min(n.length,r.current+j),i.current=Date.now();let o=a.map(e=>({timestamp:Date.now(),level:e.method===`warn`?`warn`:e.method===`error`?`error`:e.method===`info`?`info`:`log`,message:e.data?.map(e=>typeof e==`string`?e:JSON.stringify(e)).join(` `)??``}));fetch(`${C()}/artifacts/${e}/console`,{method:`POST`,headers:O(),body:JSON.stringify({entries:o,content_hash:t})}).catch(()=>{})},s=Date.now()-i.current;return s>=M?o():a.current||=setTimeout(()=>{a.current=null,o()},M-s),()=>{a.current&&=(clearTimeout(a.current),null)}},[n,e,t]),null}function I({artifactId:e,contentHash:t}){let{sandpack:n}=_(),r=(0,E.useRef)(null),i=(0,E.useRef)(null),a=(0,E.useRef)(null);return(0,E.useEffect)(()=>{let o=`${n.error?.message??``}\0${n.status}`;if(o===r.current)return;let s=()=>{r.current=o,a.current=null;let i={error:n.error?{message:n.error.message,...n.error.title?{title:n.error.title}:{},...n.error.path?{path:n.error.path}:{},...n.error.line==null?{}:{line:n.error.line},...n.error.column==null?{}:{column:n.error.column}}:null,status:n.status};fetch(`${C()}/artifacts/${e}/sandpack-error`,{method:`POST`,headers:O(),body:JSON.stringify({...i,content_hash:t})}).catch(()=>{})};return i.current&&clearTimeout(i.current),a.current=s,i.current=setTimeout(()=>{i.current=null,s()},N),()=>{i.current&&(clearTimeout(i.current),i.current=null,a.current?.())}},[n.error,n.status,e,t]),null}function L({artifactId:e}){let{sandpack:t}=_(),n=(0,E.useRef)(t);return n.current=t,(0,E.useEffect)(()=>{let t=t=>{let r=t.detail;if(!r||r.artifact_id!==e)return;if(r.requested_by_user_id){let e=k();if(!e||e!==r.requested_by_user_id)return}let i=r.request_id,a=n.current,o=Object.keys(a.clients),s=(o.length>0?a.clients[o[0]]:null)?.iframe?.contentWindow??null;if(!s)return;let c=async t=>{try{await fetch(`${C()}/artifacts/${e}/runtime-response/${i}`,{method:`POST`,headers:O(),body:JSON.stringify(t)})}catch{}},l=()=>{window.removeEventListener(`message`,u),clearTimeout(d)},u=e=>{let t=e.data;!t||typeof t!=`object`||t.type!==`agor:result`||t.requestId!==i||e.source===s&&(l(),c({ok:!!t.ok,result:t.result,error:t.error}))},d=setTimeout(()=>{l(),c({ok:!1,error:`Iframe did not respond before timeout (agor-runtime.js may be missing).`})},P);window.addEventListener(`message`,u),s.postMessage({type:`agor:query`,requestId:i,kind:r.kind,args:r.args},`*`)};return window.addEventListener(`agor:artifact-runtime-query`,t),()=>window.removeEventListener(`agor:artifact-runtime-query`,t)},[e]),null}function R(e,n,i={}){let o={fontSize:10,marginLeft:4,...i.style},s=e.trust_state;return s===`no_secrets_needed`?null:s===`self`?(0,A.jsx)(a,{color:`blue`,icon:(0,A.jsx)(p,{}),style:o,children:`Yours`}):s===`trusted`?(0,A.jsx)(t,{title:`Secrets injected — trust granted for ${e.trust_scope===`instance`?`instance-wide`:e.trust_scope===`author`?`this author`:e.trust_scope===`session`?`just-once`:`this artifact`}`,children:(0,A.jsx)(a,{color:`green`,icon:(0,A.jsx)(p,{}),style:o,children:`Trusted`})}):(0,A.jsx)(t,{title:`Click to review and grant trust so secrets are injected`,children:(0,A.jsx)(a,{color:`orange`,icon:(0,A.jsx)(r,{}),className:n?i.className:void 0,style:{...o,cursor:n?`pointer`:void 0},onClick:n?e=>{e.stopPropagation(),n()}:void 0,children:`Untrusted`})})}function z(){globalThis.crypto===void 0||globalThis.crypto.subtle||(globalThis.crypto.subtle={async digest(e,t){let n=new Uint8Array(t),r=0;for(let e of n)r=r*31+e|0;let i=new ArrayBuffer(4);return new DataView(i).setInt32(0,r),i}})}var B=new Set([`agor_token`]);function V({open:e,artifactId:t,name:c,files:p,requiredEnvVars:g,grants:_,hideInstanceScope:v,onClose:S,onGranted:T}){let{featuresConfig:D}=b(),{showSuccess:k,showError:j}=h(),[M,N]=(0,E.useState)(`artifact`),[P,F]=(0,E.useState)(null),[I,L]=(0,E.useState)(!1),R=!!_.agor_token,z=v??D?.multiUser===!0,B=(0,E.useMemo)(()=>Object.entries(p).map(([e,t])=>({path:e.startsWith(`/`)?e.slice(1):e,title:e.split(`/`).pop()??e,size:t.length,lastModified:new Date(0).toISOString(),isText:!0})),[p]),V=H(_);return(0,A.jsxs)(f,{title:(0,A.jsxs)(`span`,{children:[(0,A.jsx)(o,{style:{marginRight:8}}),`Trust “`,c,`” to render with secrets`]}),open:e,onCancel:S,width:920,footer:null,destroyOnHidden:!0,children:[(0,A.jsx)(s,{type:`warning`,showIcon:!0,icon:(0,A.jsx)(u,{}),style:{marginBottom:16},title:`Read the source before granting trust`,description:`Granting trust injects your env-var values and any requested daemon capabilities into this artifact's runtime. The artifact's JS can read those values. Secrets never enter LLM context — but the artifact iframe can still exfiltrate them via fetch().`}),(0,A.jsxs)(`div`,{style:{display:`grid`,gridTemplateColumns:`minmax(0, 1fr) minmax(0, 2fr)`,gap:16},children:[(0,A.jsx)(l,{size:`small`,title:`Files in this artifact`,styles:{body:{padding:0}},children:(0,A.jsx)(`div`,{style:{maxHeight:360,overflow:`auto`},children:(0,A.jsx)(y,{files:B,onFileClick:e=>F(`/${e.path}`),emptyMessage:`No files in this artifact`})})}),(0,A.jsx)(l,{size:`small`,title:P?`Preview: ${P}`:`Pick a file to preview`,styles:{body:{padding:0,minWidth:0}},children:(0,A.jsx)(`div`,{style:{maxHeight:360,overflow:`auto`},children:P?(0,A.jsx)(x,{language:w(P),showLineNumbers:!0,customStyle:{margin:0,borderRadius:0,fontSize:12,maxHeight:`none`},children:p[P]??`(file is empty)`}):(0,A.jsx)(`div`,{style:{padding:12,fontSize:12,opacity:.6},children:`Click a file on the left to preview it.`})})})]}),(0,A.jsxs)(`div`,{style:{marginTop:16},children:[(0,A.jsx)(n.Title,{level:5,style:{marginBottom:8},children:`Requested env vars`}),(0,A.jsxs)(d,{size:[4,4],wrap:!0,children:[g.length===0&&(0,A.jsx)(n.Text,{type:`secondary`,children:`(none)`}),g.map(e=>(0,A.jsx)(a,{icon:(0,A.jsx)(r,{}),color:`gold`,children:e},e))]})]}),(0,A.jsxs)(`div`,{style:{marginTop:16},children:[(0,A.jsx)(n.Title,{level:5,style:{marginBottom:8},children:`Daemon capabilities`}),(0,A.jsxs)(d,{size:[4,4],wrap:!0,children:[V.length===0&&(0,A.jsx)(n.Text,{type:`secondary`,children:`(none)`}),V]}),R&&(0,A.jsx)(s,{type:`info`,showIcon:!0,style:{marginTop:8},title:`agor_token is artifact-scoped only`,description:`Author and instance grants do NOT cover agor_token — granting it here only affects this artifact, regardless of the scope you pick below.`})]}),(0,A.jsxs)(`div`,{style:{marginTop:16},children:[(0,A.jsx)(n.Title,{level:5,style:{marginBottom:8},children:`Trust scope`}),(0,A.jsx)(i.Group,{value:M,onChange:e=>N(e.target.value),children:(0,A.jsxs)(d,{orientation:`vertical`,children:[(0,A.jsx)(i,{value:`session`,children:`Just once (in-memory; cleared when daemon restarts)`}),(0,A.jsx)(i,{value:`artifact`,children:`This artifact only`}),(0,A.jsxs)(i,{value:`author`,disabled:R,children:[`Anything published by this author`,R?` (disabled — agor_token requires artifact scope)`:``]}),!z&&(0,A.jsxs)(i,{value:`instance`,disabled:R,children:[`Anything on this Agor instance`,R?` (disabled — agor_token requires artifact scope)`:``]})]})})]}),(0,A.jsxs)(`div`,{style:{marginTop:24,display:`flex`,justifyContent:`flex-end`,gap:8},children:[(0,A.jsx)(m,{onClick:S,children:`Render without secrets`}),(0,A.jsx)(m,{type:`primary`,loading:I,onClick:async()=>{L(!0);try{let e=await fetch(`${C()}/artifacts/${t}/trust`,{method:`POST`,headers:O(),body:JSON.stringify({scopeType:M})});if(!e.ok){let t=await e.text().catch(()=>``);j(`Failed to grant trust: ${e.statusText} ${t}`);return}k(`Trust granted`),T()}catch(e){j(`Failed to grant trust: ${e instanceof Error?e.message:String(e)}`)}finally{L(!1)}},children:`Render with secrets`})]})]})}function H(e){let t=[];for(let[n,r]of Object.entries(e)){if(n===`agor_proxies`){let e=r??[];for(let n of e)t.push((0,A.jsxs)(a,{color:`purple`,children:[`agor_proxies:`,n]},`proxy:${n}`));continue}if(!r)continue;let e=B.has(n);t.push((0,A.jsx)(a,{color:e?`red`:`blue`,icon:e?(0,A.jsx)(u,{}):void 0,children:n},n))}return t}export{I as a,T as c,L as i,z as n,R as o,F as r,O as s,V as t};
1
+ import{o as e}from"./rolldown-runtime--c01j_DQ.js";import{At as t,Cn as n,Ft as r,Kn as i,Mn as a,Qn as o,T as s,bn as c,n as l,on as u,qt as d,w as f,wn as p,z as m}from"./antd-CfbbHJOz.js";import{t as h}from"./message-SqLqNYcv.js";import{i as g,r as _}from"./sandpack-D7koO5op.js";import{N as v}from"./editor-CzFWIUw2.js";import{Ft as y,I as b,L as x,Mt as S,Pt as C,R as w}from"./index-BN5_Qq7R.js";function T(e){let t=`body{margin:0}`,n=`/styles.css`,r=e[n];return r?.includes(t)?e:{...e,[n]:r?`${t}\n${r}`:t}}var E=e(o(),1);function D(){return typeof window>`u`?null:C()??localStorage.getItem(`feathers-jwt`)}function O(){let e=D();return{"Content-Type":`application/json`,...e?{Authorization:`Bearer ${e}`}:{}}}function k(){let e=D();if(!e)return null;try{let t=e.split(`.`);if(t.length<2)return null;let n=t[1].replace(/-/g,`+`).replace(/_/g,`/`);for(;n.length%4!=0;)n+=`=`;let r=JSON.parse(atob(n));return typeof r.sub==`string`?r.sub:null}catch{return null}}var A=v(),j=50,M=2e3,N=1e3,P=6e3;function F({artifactId:e,contentHash:t}){let{logs:n}=g({resetOnPreviewRestart:!1}),r=(0,E.useRef)(0),i=(0,E.useRef)(0),a=(0,E.useRef)(null);return(0,E.useEffect)(()=>{if(n.length<=r.current)return;let o=()=>{let a=n.slice(r.current,r.current+j);r.current=Math.min(n.length,r.current+j),i.current=Date.now();let o=a.map(e=>({timestamp:Date.now(),level:e.method===`warn`?`warn`:e.method===`error`?`error`:e.method===`info`?`info`:`log`,message:e.data?.map(e=>typeof e==`string`?e:JSON.stringify(e)).join(` `)??``}));fetch(`${y()}/artifacts/${e}/console`,{method:`POST`,headers:O(),body:JSON.stringify({entries:o,content_hash:t})}).catch(()=>{})},s=Date.now()-i.current;return s>=M?o():a.current||=setTimeout(()=>{a.current=null,o()},M-s),()=>{a.current&&=(clearTimeout(a.current),null)}},[n,e,t]),null}function I({artifactId:e,contentHash:t}){let{sandpack:n}=_(),r=(0,E.useRef)(null),i=(0,E.useRef)(null),a=(0,E.useRef)(null);return(0,E.useEffect)(()=>{let o=`${n.error?.message??``}\0${n.status}`;if(o===r.current)return;let s=()=>{r.current=o,a.current=null;let i={error:n.error?{message:n.error.message,...n.error.title?{title:n.error.title}:{},...n.error.path?{path:n.error.path}:{},...n.error.line==null?{}:{line:n.error.line},...n.error.column==null?{}:{column:n.error.column}}:null,status:n.status};fetch(`${y()}/artifacts/${e}/sandpack-error`,{method:`POST`,headers:O(),body:JSON.stringify({...i,content_hash:t})}).catch(()=>{})};return i.current&&clearTimeout(i.current),a.current=s,i.current=setTimeout(()=>{i.current=null,s()},N),()=>{i.current&&(clearTimeout(i.current),i.current=null,a.current?.())}},[n.error,n.status,e,t]),null}function L({artifactId:e}){let{sandpack:t}=_(),n=(0,E.useRef)(t);return n.current=t,(0,E.useEffect)(()=>{let t=t=>{let r=t.detail;if(!r||r.artifact_id!==e)return;if(r.requested_by_user_id){let e=k();if(!e||e!==r.requested_by_user_id)return}let i=r.request_id,a=n.current,o=Object.keys(a.clients),s=(o.length>0?a.clients[o[0]]:null)?.iframe?.contentWindow??null;if(!s)return;let c=async t=>{try{await fetch(`${y()}/artifacts/${e}/runtime-response/${i}`,{method:`POST`,headers:O(),body:JSON.stringify(t)})}catch{}},l=()=>{window.removeEventListener(`message`,u),clearTimeout(d)},u=e=>{let t=e.data;!t||typeof t!=`object`||t.type!==`agor:result`||t.requestId!==i||e.source===s&&(l(),c({ok:!!t.ok,result:t.result,error:t.error}))},d=setTimeout(()=>{l(),c({ok:!1,error:`Iframe did not respond before timeout (agor-runtime.js may be missing).`})},P);window.addEventListener(`message`,u),s.postMessage({type:`agor:query`,requestId:i,kind:r.kind,args:r.args},`*`)};return window.addEventListener(`agor:artifact-runtime-query`,t),()=>window.removeEventListener(`agor:artifact-runtime-query`,t)},[e]),null}function R(e,t,n={}){let i={fontSize:10,marginLeft:4,...n.style},o=e.trust_state;return o===`no_secrets_needed`?null:o===`self`?(0,A.jsx)(r,{color:`blue`,icon:(0,A.jsx)(f,{}),style:i,children:`Yours`}):o===`trusted`?(0,A.jsx)(a,{title:`Secrets injected — trust granted for ${e.trust_scope===`instance`?`instance-wide`:e.trust_scope===`author`?`this author`:e.trust_scope===`session`?`just-once`:`this artifact`}`,children:(0,A.jsx)(r,{color:`green`,icon:(0,A.jsx)(f,{}),style:i,children:`Trusted`})}):(0,A.jsx)(a,{title:`Click to review and grant trust so secrets are injected`,children:(0,A.jsx)(r,{color:`orange`,icon:(0,A.jsx)(m,{}),className:t?n.className:void 0,style:{...i,cursor:t?`pointer`:void 0},onClick:t?e=>{e.stopPropagation(),t()}:void 0,children:`Untrusted`})})}function z(){globalThis.crypto===void 0||globalThis.crypto.subtle||(globalThis.crypto.subtle={async digest(e,t){let n=new Uint8Array(t),r=0;for(let e of n)r=r*31+e|0;let i=new ArrayBuffer(4);return new DataView(i).setInt32(0,r),i}})}var B=new Set([`agor_token`]);function V({open:e,artifactId:a,name:o,files:f,requiredEnvVars:g,grants:_,hideInstanceScope:v,onClose:C,onGranted:T}){let{featuresConfig:D}=S(),{showSuccess:k,showError:j}=h(),[M,N]=(0,E.useState)(`artifact`),[P,F]=(0,E.useState)(null),[I,L]=(0,E.useState)(!1),R=!!_.agor_token,z=v??D?.multiUser===!0,B=(0,E.useMemo)(()=>Object.entries(f).map(([e,t])=>({path:e.startsWith(`/`)?e.slice(1):e,title:e.split(`/`).pop()??e,size:t.length,lastModified:new Date(0).toISOString(),isText:!0})),[f]),V=H(_);return(0,A.jsxs)(d,{title:(0,A.jsxs)(`span`,{children:[(0,A.jsx)(s,{style:{marginRight:8}}),`Trust “`,o,`” to render with secrets`]}),open:e,onCancel:C,width:920,footer:null,destroyOnHidden:!0,children:[(0,A.jsx)(i,{type:`warning`,showIcon:!0,icon:(0,A.jsx)(l,{}),style:{marginBottom:16},title:`Read the source before granting trust`,description:`Granting trust injects your env-var values and any requested daemon capabilities into this artifact's runtime. The artifact's JS can read those values. Secrets never enter LLM context — but the artifact iframe can still exfiltrate them via fetch().`}),(0,A.jsxs)(`div`,{style:{display:`grid`,gridTemplateColumns:`minmax(0, 1fr) minmax(0, 2fr)`,gap:16},children:[(0,A.jsx)(c,{size:`small`,title:`Files in this artifact`,styles:{body:{padding:0}},children:(0,A.jsx)(`div`,{style:{maxHeight:360,overflow:`auto`},children:(0,A.jsx)(b,{files:B,onFileClick:e=>F(`/${e.path}`),emptyMessage:`No files in this artifact`})})}),(0,A.jsx)(c,{size:`small`,title:P?`Preview: ${P}`:`Pick a file to preview`,styles:{body:{padding:0,minWidth:0}},children:(0,A.jsx)(`div`,{style:{maxHeight:360,overflow:`auto`},children:P?(0,A.jsx)(w,{language:x(P),showLineNumbers:!0,customStyle:{margin:0,borderRadius:0,fontSize:12,maxHeight:`none`},children:f[P]??`(file is empty)`}):(0,A.jsx)(`div`,{style:{padding:12,fontSize:12,opacity:.6},children:`Click a file on the left to preview it.`})})})]}),(0,A.jsxs)(`div`,{style:{marginTop:16},children:[(0,A.jsx)(t.Title,{level:5,style:{marginBottom:8},children:`Requested env vars`}),(0,A.jsxs)(u,{size:[4,4],wrap:!0,children:[g.length===0&&(0,A.jsx)(t.Text,{type:`secondary`,children:`(none)`}),g.map(e=>(0,A.jsx)(r,{icon:(0,A.jsx)(m,{}),color:`gold`,children:e},e))]})]}),(0,A.jsxs)(`div`,{style:{marginTop:16},children:[(0,A.jsx)(t.Title,{level:5,style:{marginBottom:8},children:`Daemon capabilities`}),(0,A.jsxs)(u,{size:[4,4],wrap:!0,children:[V.length===0&&(0,A.jsx)(t.Text,{type:`secondary`,children:`(none)`}),V]}),R&&(0,A.jsx)(i,{type:`info`,showIcon:!0,style:{marginTop:8},title:`agor_token is artifact-scoped only`,description:`Author and instance grants do NOT cover agor_token — granting it here only affects this artifact, regardless of the scope you pick below.`})]}),(0,A.jsxs)(`div`,{style:{marginTop:16},children:[(0,A.jsx)(t.Title,{level:5,style:{marginBottom:8},children:`Trust scope`}),(0,A.jsx)(n.Group,{value:M,onChange:e=>N(e.target.value),children:(0,A.jsxs)(u,{orientation:`vertical`,children:[(0,A.jsx)(n,{value:`session`,children:`Just once (in-memory; cleared when daemon restarts)`}),(0,A.jsx)(n,{value:`artifact`,children:`This artifact only`}),(0,A.jsxs)(n,{value:`author`,disabled:R,children:[`Anything published by this author`,R?` (disabled — agor_token requires artifact scope)`:``]}),!z&&(0,A.jsxs)(n,{value:`instance`,disabled:R,children:[`Anything on this Agor instance`,R?` (disabled — agor_token requires artifact scope)`:``]})]})})]}),(0,A.jsxs)(`div`,{style:{marginTop:24,display:`flex`,justifyContent:`flex-end`,gap:8},children:[(0,A.jsx)(p,{onClick:C,children:`Render without secrets`}),(0,A.jsx)(p,{type:`primary`,loading:I,onClick:async()=>{L(!0);try{let e=await fetch(`${y()}/artifacts/${a}/trust`,{method:`POST`,headers:O(),body:JSON.stringify({scopeType:M})});if(!e.ok){let t=await e.text().catch(()=>``);j(`Failed to grant trust: ${e.statusText} ${t}`);return}k(`Trust granted`),T()}catch(e){j(`Failed to grant trust: ${e instanceof Error?e.message:String(e)}`)}finally{L(!1)}},children:`Render with secrets`})]})]})}function H(e){let t=[];for(let[n,i]of Object.entries(e)){if(n===`agor_proxies`){let e=i??[];for(let n of e)t.push((0,A.jsxs)(r,{color:`purple`,children:[`agor_proxies:`,n]},`proxy:${n}`));continue}if(!i)continue;let e=B.has(n);t.push((0,A.jsx)(r,{color:e?`red`:`blue`,icon:e?(0,A.jsx)(l,{}):void 0,children:n},n))}return t}export{I as a,T as c,L as i,z as n,R as o,F as r,O as s,V as t};
@@ -0,0 +1,9 @@
1
+ import{o as e}from"./rolldown-runtime--c01j_DQ.js";import{$t as t,At as n,F as r,Gt as i,Kn as a,Mn as o,Pt as s,Qn as c,St as l,Xt as u,Yt as d,n as f,on as p,wn as m}from"./antd-CfbbHJOz.js";import{P as h,f as g,p as _}from"./message-SqLqNYcv.js";import{n as v,t as y}from"./sandpack-D7koO5op.js";import{N as b}from"./editor-CzFWIUw2.js";import{Ft as x,_ as S,en as C}from"./index-BN5_Qq7R.js";import{n as w,t as T}from"./ThemeSwitcher-Dly2y9pi.js";import{a as E,c as D,i as O,n as k,o as A,r as j,s as M,t as N}from"./ArtifactConsentModal-CiCbK9iv.js";var P=e(c(),1),F=b();k();var{Header:I,Content:L}=u,{Title:R}=n;function z({artifact:e,payload:n,title:a,loading:c,currentUser:u,onReload:d,onTrustClick:f,onHideNavbar:g,onUserSettingsClick:_,onLogout:v}){let{token:y}=s.useToken(),b=n?A(n,f):null;return(0,F.jsxs)(I,{style:{height:56,padding:`0 16px`,background:y.colorBgContainer,borderBottom:`1px solid ${y.colorBorderSecondary}`,display:`flex`,alignItems:`center`,justifyContent:`space-between`,gap:16},children:[(0,F.jsxs)(p,{size:12,style:{minWidth:0,flex:1,overflow:`hidden`},children:[(0,F.jsx)(m,{type:`text`,icon:(0,F.jsx)(l,{}),href:e?.url??void 0,disabled:!e?.url,children:`Board`}),(0,F.jsx)(C,{level:5}),(0,F.jsxs)(`div`,{style:{minWidth:0,maxWidth:420,display:`flex`,alignItems:`center`,gap:4},children:[(0,F.jsx)(R,{level:5,style:{margin:0,lineHeight:1.2,minWidth:0,flex:`1 1 auto`},ellipsis:!0,children:a}),(0,F.jsx)(o,{title:`Hide navbar`,children:(0,F.jsx)(m,{type:`text`,size:`small`,"aria-label":`Hide navbar`,icon:(0,F.jsx)(t,{}),onClick:g,style:{display:`inline-flex`,alignItems:`center`,justifyContent:`center`,flexShrink:0}})})]}),b]}),(0,F.jsxs)(p,{style:{flexShrink:0},children:[(n?.source_session_id||e?.source_session_id)&&(0,F.jsx)(o,{title:`Open session that created this artifact`,children:(0,F.jsx)(m,{icon:(0,F.jsx)(r,{}),href:S(h(n?.source_session_id??e?.source_session_id)),target:`_blank`,rel:`noopener noreferrer`,children:`Session`})}),e?.url&&(0,F.jsx)(m,{href:e.url,target:`_blank`,rel:`noopener noreferrer`,children:`Open board link`}),(0,F.jsx)(m,{icon:(0,F.jsx)(i,{}),onClick:d,loading:c,children:`Reload`}),(0,F.jsx)(T,{}),(0,F.jsx)(w,{user:u,onUserSettingsClick:_,onLogout:v})]})]})}function B({client:e,currentUser:t,onUserSettingsClick:n,onLogout:r}){let{token:i}=s.useToken(),{artifactShortId:o}=g(),[c,l]=_(),p=c.get(`show_navbar`)!==`false`&&c.get(`chrome`)!==`0`&&c.get(`navbar`)!==`0`,[h,b]=(0,P.useState)(null),[S,C]=(0,P.useState)(null),[w,T]=(0,P.useState)(!0),[k,A]=(0,P.useState)(null),[I,R]=(0,P.useState)(!1),B=(0,P.useRef)(null),V=o??``,H=(0,P.useCallback)(async()=>{if(V)try{T(!0),A(null);let t=await fetch(`${x()}/artifacts/${V}/payload`,{headers:M()});if(!t.ok)throw Error(`Failed to load artifact: ${t.statusText}`);let n=await t.json();if(C(n),e)try{b(await e.service(`artifacts`).get(n.artifact_id))}catch{b(null)}B.current=n.content_hash}catch(e){A(e instanceof Error?e.message:String(e))}finally{T(!1)}},[V,e]);(0,P.useEffect)(()=>{H()},[H]),(0,P.useEffect)(()=>{if(!e)return;let t=e.service(`artifacts`),n=e=>{window.dispatchEvent(new CustomEvent(`agor:artifact-runtime-query`,{detail:e}))};return t.on(`agor-query`,n),()=>{t.removeListener(`agor-query`,n)}},[e]),(0,P.useEffect)(()=>{if(!e)return;let t=e.service(`artifacts`),n=e=>{let t=S?.artifact_id??h?.artifact_id;!t||e.artifact_id!==t||(b(e),e.content_hash&&e.content_hash!==B.current&&H())};return t.on(`patched`,n),t.on(`updated`,n),()=>{t.removeListener(`patched`,n),t.removeListener(`updated`,n)}},[h?.artifact_id,e,H,S?.artifact_id]);let U=S?.sandpack_config??{},W=U.options??{},G=S?{...U.customSetup??{},...S.dependencies&&!U.customSetup?.dependencies?{dependencies:S.dependencies}:{}}:{},K=U.template??S?.template??`react`,q=S?.name??h?.name??`Artifact ${V}`,J=(0,P.useCallback)(()=>{let e=new URLSearchParams(c);e.set(`show_navbar`,`false`),e.delete(`chrome`),e.delete(`navbar`),l(e,{replace:!0})},[c,l]),Y=(0,P.useCallback)(()=>{let e=new URLSearchParams(c);e.delete(`show_navbar`),e.delete(`chrome`),e.delete(`navbar`),l(e,{replace:!0})},[c,l]),X=w&&!S?(0,F.jsx)(d,{size:`large`,tip:`Loading artifact...`}):k?(0,F.jsx)(a,{type:`error`,showIcon:!0,title:`Failed to load artifact`,description:k,action:(0,F.jsx)(m,{onClick:H,children:`Retry`})}):S?(0,F.jsxs)(`div`,{style:{height:`100%`,width:`100%`,display:`flex`,flexDirection:`column`},children:[S.legacy?.is_legacy&&(0,F.jsx)(a,{type:`warning`,showIcon:!0,icon:(0,F.jsx)(f,{}),message:`Legacy artifact — may not render correctly`,description:`Open the board artifact card for the copyable upgrade prompt.`,style:{borderRadius:0}}),(0,F.jsx)(`style`,{children:`
2
+ .artifact-fullscreen-sandpack .sp-wrapper,
3
+ .artifact-fullscreen-sandpack .sp-layout,
4
+ .artifact-fullscreen-sandpack .sp-stack,
5
+ .artifact-fullscreen-sandpack .sp-preview,
6
+ .artifact-fullscreen-sandpack .sp-preview-container {
7
+ height: 100% !important;
8
+ }
9
+ `}),(0,F.jsx)(`div`,{className:`artifact-fullscreen-sandpack`,style:{flex:1,minHeight:0},children:(0,F.jsxs)(v,{template:K,files:D(S.files),customSetup:Object.keys(G).length>0?G:void 0,theme:U.theme,options:{initMode:`user-visible`,...W,...S.entry&&!W.activeFile?{activeFile:S.entry}:{}},children:[(0,F.jsx)(y,{style:{height:`100%`,border:`none`},showNavigator:!1,showOpenInCodeSandbox:!1,showRefreshButton:!0}),(0,F.jsx)(j,{artifactId:S.artifact_id,contentHash:S.runtime_report_hash??S.content_hash}),(0,F.jsx)(E,{artifactId:S.artifact_id,contentHash:S.runtime_report_hash??S.content_hash}),(0,F.jsx)(O,{artifactId:S.artifact_id})]},S.content_hash)})]}):null;return(0,F.jsxs)(u,{style:{minHeight:`100vh`,background:i.colorBgLayout},children:[p?(0,F.jsx)(z,{artifact:h,payload:S,title:q,loading:w,currentUser:t,onReload:H,onTrustClick:()=>R(!0),onHideNavbar:J,onUserSettingsClick:n,onLogout:r}):(0,F.jsx)(m,{size:`small`,onClick:Y,style:{position:`fixed`,top:12,right:12,zIndex:10},children:`Show navbar`}),(0,F.jsx)(L,{style:{height:p?`calc(100vh - 56px)`:`100vh`,display:`flex`,alignItems:w&&!S?`center`:`stretch`,justifyContent:w&&!S?`center`:`stretch`,overflow:`hidden`,background:i.colorBgContainer},children:X}),S&&I&&(0,F.jsx)(N,{open:I,artifactId:S.artifact_id,name:S.name,files:S.files,requiredEnvVars:S.required_env_vars??[],grants:S.agor_grants??{},onClose:()=>R(!1),onGranted:()=>{R(!1),H()}})]})}export{B as ArtifactFullscreenPage};