@band-app/server 0.33.0 → 0.35.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 (164) hide show
  1. package/README.md +1 -1
  2. package/dist/client/assets/TerminalPanel-CX4dQ8jR.js +1 -0
  3. package/dist/client/assets/{_basePickBy-Dl99bUuK.js → _basePickBy-Dx35lEgW.js} +1 -1
  4. package/dist/client/assets/{_baseUniq-xYPKjKRI.js → _baseUniq-CMkXBei9.js} +1 -1
  5. package/dist/client/assets/addon-search-BvnuewQv.js +1 -0
  6. package/dist/client/assets/addon-unicode11-C7S6GMMR.js +1 -0
  7. package/dist/client/assets/{addon-webgl-q3t2iERs.js → addon-webgl-D9URxm_b.js} +5 -5
  8. package/dist/client/assets/{arc-L0FqLNvl.js → arc-DK3KeNW-.js} +1 -1
  9. package/dist/client/assets/{architectureDiagram-VXUJARFQ-sxFQR6t8.js → architectureDiagram-VXUJARFQ-_hgteJO2.js} +1 -1
  10. package/dist/client/assets/{blockDiagram-VD42YOAC-CKyryScy.js → blockDiagram-VD42YOAC-D4nK8NF5.js} +1 -1
  11. package/dist/client/assets/{c4Diagram-YG6GDRKO-CKkLibM6.js → c4Diagram-YG6GDRKO-D8ZrZiTI.js} +1 -1
  12. package/dist/client/assets/channel-DgStcXMV.js +1 -0
  13. package/dist/client/assets/{chunk-4BX2VUAB-B2Q5eiyh.js → chunk-4BX2VUAB-EqwJIY-C.js} +1 -1
  14. package/dist/client/assets/{chunk-55IACEB6-Bx7ppH1E.js → chunk-55IACEB6-CHNR-VN7.js} +1 -1
  15. package/dist/client/assets/{chunk-B4BG7PRW-z63abbDt.js → chunk-B4BG7PRW-CVzCDJlc.js} +1 -1
  16. package/dist/client/assets/{chunk-DI55MBZ5-CVuxJX-G.js → chunk-DI55MBZ5-oTBFM9ze.js} +1 -1
  17. package/dist/client/assets/{chunk-FMBD7UC4-C4mR-Kqh.js → chunk-FMBD7UC4-Bo-2Dikp.js} +1 -1
  18. package/dist/client/assets/{chunk-QN33PNHL-DC9EuvVO.js → chunk-QN33PNHL-FqjvjGa_.js} +1 -1
  19. package/dist/client/assets/{chunk-QZHKN3VN-BVfYPmR6.js → chunk-QZHKN3VN-CKO815gH.js} +1 -1
  20. package/dist/client/assets/{chunk-TZMSLE5B-BERfyjOQ.js → chunk-TZMSLE5B-3zjd2CiU.js} +1 -1
  21. package/dist/client/assets/classDiagram-2ON5EDUG-DqJ8lUPo.js +1 -0
  22. package/dist/client/assets/classDiagram-v2-WZHVMYZB-DqJ8lUPo.js +1 -0
  23. package/dist/client/assets/clone-BXDlHTU2.js +1 -0
  24. package/dist/client/assets/{cose-bilkent-S5V4N54A-CKYh86Nn.js → cose-bilkent-S5V4N54A-4x0aq1rT.js} +1 -1
  25. package/dist/client/assets/{dagre-6UL2VRFP-CHXYsbsT.js → dagre-6UL2VRFP-C685K4i3.js} +1 -1
  26. package/dist/client/assets/{diagram-PSM6KHXK-BgTabbUt.js → diagram-PSM6KHXK-B6qGMKr7.js} +1 -1
  27. package/dist/client/assets/{diagram-QEK2KX5R-DGko5nSx.js → diagram-QEK2KX5R-Bfd-BbBX.js} +1 -1
  28. package/dist/client/assets/{diagram-S2PKOQOG-CE06Gb7p.js → diagram-S2PKOQOG-BwLaDVQ4.js} +1 -1
  29. package/dist/client/assets/{erDiagram-Q2GNP2WA-DRAdXF3c.js → erDiagram-Q2GNP2WA-DoQMRnGW.js} +1 -1
  30. package/dist/client/assets/{flowDiagram-NV44I4VS-DMdYos4M.js → flowDiagram-NV44I4VS-2yTNMz0q.js} +1 -1
  31. package/dist/client/assets/{ganttDiagram-JELNMOA3-B1hq9zyH.js → ganttDiagram-JELNMOA3-DXqi-DbY.js} +1 -1
  32. package/dist/client/assets/{gitGraphDiagram-V2S2FVAM-BX_eqyqV.js → gitGraphDiagram-V2S2FVAM-C7CSi-Aw.js} +1 -1
  33. package/dist/client/assets/{graph-B1pXNJmu.js → graph-DZMgyc4x.js} +1 -1
  34. package/dist/client/assets/{highlighted-body-B3W2YXNL-xpTIV5H4.js → highlighted-body-B3W2YXNL-CrQyrK8r.js} +1 -1
  35. package/dist/client/assets/{index-DUaIvPpT.js → index-1zFJtuaW.js} +1 -1
  36. package/dist/client/assets/{index-Mpl66MhJ.js → index-BLIt4sly.js} +1 -1
  37. package/dist/client/assets/{index-61SgNErm.js → index-BqO-wiLH.js} +1 -1
  38. package/dist/client/assets/{index-Do4DO4E-.js → index-C0k4s5Ib.js} +1 -1
  39. package/dist/client/assets/{index-BD37kyMP.js → index-C3LMxvTf.js} +1 -1
  40. package/dist/client/assets/{index-Dm9xRcT9.js → index-CHYUiFs8.js} +1 -1
  41. package/dist/client/assets/{index-67ml7mn1.js → index-CIWfGOhs.js} +1 -1
  42. package/dist/client/assets/{index-BAlyKPeT.js → index-CKwJD7xz.js} +1 -1
  43. package/dist/client/assets/{index-BHygUCeT.js → index-CLyGoryJ.js} +1 -1
  44. package/dist/client/assets/{index-DNX82GPp.js → index-CW98CyWe.js} +1 -1
  45. package/dist/client/assets/{index-CoSFZPv4.js → index-DAIY6Xmz.js} +1 -1
  46. package/dist/client/assets/{index-BYm6dlG5.js → index-DilFeEck.js} +1 -1
  47. package/dist/client/assets/{index-CWczZ7eS.js → index-au-xsyz1.js} +1 -1
  48. package/dist/client/assets/{infoDiagram-HS3SLOUP-DHAIDbZu.js → infoDiagram-HS3SLOUP-D_T5UsZX.js} +1 -1
  49. package/dist/client/assets/{journeyDiagram-XKPGCS4Q-BJHZIWhu.js → journeyDiagram-XKPGCS4Q-DVkCPjcS.js} +1 -1
  50. package/dist/client/assets/{kanban-definition-3W4ZIXB7-_qzn6_ii.js → kanban-definition-3W4ZIXB7-DXhSxzi6.js} +1 -1
  51. package/dist/client/assets/{layout-CksxJldr.js → layout-Cf3mHsPQ.js} +1 -1
  52. package/dist/client/assets/main-CXgf0iaP.css +1 -0
  53. package/dist/client/assets/{main-FnYu011V.js → main-KoITWpfm.js} +283 -275
  54. package/dist/client/assets/{mindmap-definition-VGOIOE7T-Deop3o-V.js → mindmap-definition-VGOIOE7T-C2IQK3iT.js} +1 -1
  55. package/dist/client/assets/{pieDiagram-ADFJNKIX-d4k56ZYA.js → pieDiagram-ADFJNKIX-BGQzh0tv.js} +2 -2
  56. package/dist/client/assets/{quadrantDiagram-AYHSOK5B-CBA2J09q.js → quadrantDiagram-AYHSOK5B-LdhEGcnL.js} +1 -1
  57. package/dist/client/assets/{requirementDiagram-UZGBJVZJ-C6Nnujg6.js → requirementDiagram-UZGBJVZJ-cnV0P1YE.js} +1 -1
  58. package/dist/client/assets/{sankeyDiagram-TZEHDZUN-CPfLLuk9.js → sankeyDiagram-TZEHDZUN-BoAgFD3l.js} +1 -1
  59. package/dist/client/assets/{sequenceDiagram-WL72ISMW-C_OY-5TF.js → sequenceDiagram-WL72ISMW-CxF4TFvD.js} +1 -1
  60. package/dist/client/assets/{stateDiagram-FKZM4ZOC-CeuP4CjM.js → stateDiagram-FKZM4ZOC-wf-3-MA5.js} +1 -1
  61. package/dist/client/assets/stateDiagram-v2-4FDKWEC3-BZZ4iqpR.js +1 -0
  62. package/dist/client/assets/{timeline-definition-IT6M3QCI-CL_Rmapn.js → timeline-definition-IT6M3QCI-W-q-JEwZ.js} +1 -1
  63. package/dist/client/assets/{treemap-GDKQZRPO-2uvsx2LQ.js → treemap-GDKQZRPO-Ct5obnww.js} +1 -1
  64. package/dist/client/assets/workspace._workspaceId-BUh7S3Ta.js +1 -0
  65. package/dist/client/assets/{workspace._workspaceId-DF3JNMRG.js → workspace._workspaceId-CeUz5yMg.js} +1 -1
  66. package/dist/client/assets/xterm-EbFzQDSP.js +10 -0
  67. package/dist/client/assets/{xychartDiagram-PRI3JC2R-5Pzm62mv.js → xychartDiagram-PRI3JC2R-sXsIzR4l.js} +1 -1
  68. package/dist/migrations/20260927210840_client_state/migration.sql +11 -0
  69. package/dist/migrations/20260927210840_client_state/snapshot.json +1763 -0
  70. package/dist/migrations/20260928064736_agent_status_sources/migration.sql +10 -0
  71. package/dist/migrations/20260928064736_agent_status_sources/snapshot.json +1841 -0
  72. package/dist/migrations/20260928065233_branch_status_pr/migration.sql +1 -0
  73. package/dist/migrations/20260928065233_branch_status_pr/snapshot.json +1773 -0
  74. package/dist/openapi.json +1217 -69
  75. package/dist/server/assets/{TerminalPanel-DMTU2FMX.js → TerminalPanel-DlJiSPdF.js} +6 -4
  76. package/dist/server/assets/{_basePickBy-CMTHAoTW.js → _basePickBy-DTbj2hwA.js} +2 -2
  77. package/dist/server/assets/{_baseUniq-DkG_FLLk.js → _baseUniq-pix9fqoH.js} +1 -1
  78. package/dist/server/assets/_tanstack-start-manifest_v-B5eaoRZw.js +4 -0
  79. package/dist/server/assets/{addon-search-WCacnXal.js → addon-search-BUjn-C-R.js} +190 -176
  80. package/dist/server/assets/{addon-unicode11-BhCmKRb7.js → addon-unicode11-BQz-Cn6z.js} +14 -20
  81. package/dist/server/assets/{addon-webgl-hypMW_go.js → addon-webgl-CgJYuUAA.js} +47 -48
  82. package/dist/server/assets/{arc-CSj375cS.js → arc-BMzVEd8n.js} +1 -1
  83. package/dist/server/assets/{architecture-7HQA4BMR-MwhJw22a.js → architecture-7HQA4BMR-DUwedg7M.js} +6 -6
  84. package/dist/server/assets/{architectureDiagram-VXUJARFQ-DyVVxp88.js → architectureDiagram-VXUJARFQ-BVdUCEQJ.js} +6 -6
  85. package/dist/server/assets/{blockDiagram-VD42YOAC-aGbi3Kv_.js → blockDiagram-VD42YOAC-7f6jQaSI.js} +6 -6
  86. package/dist/server/assets/{c4Diagram-YG6GDRKO-DhyUvqPs.js → c4Diagram-YG6GDRKO-Dyit97Cn.js} +2 -2
  87. package/dist/server/assets/{channel-CJthnbp1.js → channel-JMSLQrct.js} +1 -1
  88. package/dist/server/assets/{chunk-4BX2VUAB-Ch7bkquC.js → chunk-4BX2VUAB-DqntIakH.js} +1 -1
  89. package/dist/server/assets/{chunk-55IACEB6-CLKopZj8.js → chunk-55IACEB6-CzZbYD81.js} +1 -1
  90. package/dist/server/assets/{chunk-B4BG7PRW-BVv_KeWC.js → chunk-B4BG7PRW-Cxs7LhtB.js} +4 -4
  91. package/dist/server/assets/{chunk-DI55MBZ5-C0_HSk1s.js → chunk-DI55MBZ5-D82pXnd6.js} +3 -3
  92. package/dist/server/assets/{chunk-FMBD7UC4-3fy4TSVt.js → chunk-FMBD7UC4-GTnnxNFW.js} +1 -1
  93. package/dist/server/assets/{chunk-QN33PNHL-QdSQZPQz.js → chunk-QN33PNHL-B5OJJkcK.js} +1 -1
  94. package/dist/server/assets/{chunk-QZHKN3VN-Dak-YXr5.js → chunk-QZHKN3VN-BWZGgInb.js} +1 -1
  95. package/dist/server/assets/{chunk-TZMSLE5B-ThSW8afd.js → chunk-TZMSLE5B-9TD1Q4Kc.js} +1 -1
  96. package/dist/server/assets/{classDiagram-v2-WZHVMYZB-Cmkciu-2.js → classDiagram-2ON5EDUG-CaG6UQL6.js} +5 -5
  97. package/dist/server/assets/{classDiagram-2ON5EDUG-Cmkciu-2.js → classDiagram-v2-WZHVMYZB-CaG6UQL6.js} +5 -5
  98. package/dist/server/assets/{clone-ciZ96ZK2.js → clone-DgeV5mya.js} +1 -1
  99. package/dist/server/assets/{cose-bilkent-S5V4N54A-CP20--8W.js → cose-bilkent-S5V4N54A-DLdWU-b5.js} +1 -1
  100. package/dist/server/assets/{dagre-6UL2VRFP-D9LrmNJH.js → dagre-6UL2VRFP-B0nEEYz6.js} +6 -6
  101. package/dist/server/assets/{diagram-PSM6KHXK-l3xztHYH.js → diagram-PSM6KHXK-CheGKVJh.js} +7 -7
  102. package/dist/server/assets/{diagram-QEK2KX5R-i9twZ5aj.js → diagram-QEK2KX5R-CthFJNjb.js} +6 -6
  103. package/dist/server/assets/{diagram-S2PKOQOG-DIHmhvbo.js → diagram-S2PKOQOG-D07bUeWi.js} +6 -6
  104. package/dist/server/assets/{erDiagram-Q2GNP2WA-fMWrL8ta.js → erDiagram-Q2GNP2WA-Ci87z6gp.js} +4 -4
  105. package/dist/server/assets/{flowDiagram-NV44I4VS-BqKFb2gL.js → flowDiagram-NV44I4VS-DivTbEjK.js} +5 -5
  106. package/dist/server/assets/{ganttDiagram-JELNMOA3-XwScweUm.js → ganttDiagram-JELNMOA3-Bfi_i44A.js} +1 -1
  107. package/dist/server/assets/{gitGraph-G5XIXVHT-DDO_mRkl.js → gitGraph-G5XIXVHT-DHmMmJEG.js} +6 -6
  108. package/dist/server/assets/{gitGraphDiagram-V2S2FVAM-B2e2LaZt.js → gitGraphDiagram-V2S2FVAM-Czb_wB7o.js} +7 -7
  109. package/dist/server/assets/{graph-DqF0fiyC.js → graph-GE1fpS3M.js} +2 -2
  110. package/dist/server/assets/{highlighted-body-B3W2YXNL-B9lH9lqG.js → highlighted-body-B3W2YXNL-B9E1TIHZ.js} +1 -1
  111. package/dist/server/assets/{index-Cz3ed2GU.js → index-7UcRPUFC.js} +1 -1
  112. package/dist/server/assets/{index-iLqcyvvo.js → index-BAImbDDY.js} +1 -1
  113. package/dist/server/assets/{index-C0T5sHCj.js → index-BnjbnlDe.js} +1 -1
  114. package/dist/server/assets/{index-BRPRiIzs.js → index-C3C8EWaf.js} +1 -1
  115. package/dist/server/assets/{index-BFzH6uNZ.js → index-CA0ijKgN.js} +1 -1
  116. package/dist/server/assets/{index-C4LlK8zq.js → index-CJ4gZHux.js} +1 -1
  117. package/dist/server/assets/{index-Oepbj3Cu.js → index-CdUUMlBr.js} +1 -1
  118. package/dist/server/assets/{index-BZSpvQ87.js → index-D6JW20YV.js} +1 -1
  119. package/dist/server/assets/{index-BuxMoI9R.js → index-DaNksnON.js} +1 -1
  120. package/dist/server/assets/{index-ihiIN7Vo.js → index-DkEya4LL.js} +1 -1
  121. package/dist/server/assets/{index-QY-ciJ02.js → index-mKjVv-iY.js} +1 -1
  122. package/dist/server/assets/{index-dOV5Jyvk.js → index-wDH-Tiw_.js} +1 -1
  123. package/dist/server/assets/{index-C35Eg9Oe.js → index-wHjghntc.js} +1 -1
  124. package/dist/server/assets/{info-VBDWY6EO-BSfwYSKN.js → info-VBDWY6EO-DojEXGtR.js} +6 -6
  125. package/dist/server/assets/{infoDiagram-HS3SLOUP-BcPNSucE.js → infoDiagram-HS3SLOUP-CMrDcNjJ.js} +5 -5
  126. package/dist/server/assets/{journeyDiagram-XKPGCS4Q-B_JljIi2.js → journeyDiagram-XKPGCS4Q-arif2oC4.js} +4 -4
  127. package/dist/server/assets/{kanban-definition-3W4ZIXB7-B5aPUZvg.js → kanban-definition-3W4ZIXB7-Ue-uEk6t.js} +2 -2
  128. package/dist/server/assets/{layout-Cv2BYqNX.js → layout-Jl8vkWvB.js} +4 -4
  129. package/dist/server/assets/{mermaid-3ZIDBTTL-D_akVRms.js → mermaid-3ZIDBTTL-BwTrF7xS.js} +1 -1
  130. package/dist/server/assets/{mermaid-parser.core-uDeqwrPN.js → mermaid-parser.core-43ahKWIm.js} +11 -11
  131. package/dist/server/assets/{mindmap-definition-VGOIOE7T-C9LF9XTT.js → mindmap-definition-VGOIOE7T-DrtL2GtX.js} +3 -3
  132. package/dist/server/assets/{packet-DYOGHKS2-lRBX1T35.js → packet-DYOGHKS2-qaKqUqmU.js} +6 -6
  133. package/dist/server/assets/{pie-VRWISCQL-BCZ9vmsj.js → pie-VRWISCQL-sZSNfuEg.js} +6 -6
  134. package/dist/server/assets/{pieDiagram-ADFJNKIX-HYsm0km8.js → pieDiagram-ADFJNKIX-J90TL7dM.js} +7 -7
  135. package/dist/server/assets/{quadrantDiagram-AYHSOK5B-Fdzz2j2T.js → quadrantDiagram-AYHSOK5B-Ciqcx945.js} +1 -1
  136. package/dist/server/assets/{radar-ZZBFDIW7-iZ-6xOx9.js → radar-ZZBFDIW7-Wmt4lMQq.js} +6 -6
  137. package/dist/server/assets/{requirementDiagram-UZGBJVZJ-CeHGAs1A.js → requirementDiagram-UZGBJVZJ-BKq7A1k7.js} +3 -3
  138. package/dist/server/assets/{router-A58OKuIG.js → router-Cj_mF2JU.js} +5275 -1709
  139. package/dist/server/assets/{sankeyDiagram-TZEHDZUN-DXgjoM9B.js → sankeyDiagram-TZEHDZUN-B5D47iqQ.js} +1 -1
  140. package/dist/server/assets/{sequenceDiagram-WL72ISMW-BK24aHRm.js → sequenceDiagram-WL72ISMW-YT-X3Mpm.js} +3 -3
  141. package/dist/server/assets/{stateDiagram-FKZM4ZOC-uW8qduwY.js → stateDiagram-FKZM4ZOC-D8X_Rq8R.js} +8 -8
  142. package/dist/server/assets/{stateDiagram-v2-4FDKWEC3-O0D8F8J2.js → stateDiagram-v2-4FDKWEC3-CHk9LeUj.js} +4 -4
  143. package/dist/server/assets/{timeline-definition-IT6M3QCI-BaSl1O8h.js → timeline-definition-IT6M3QCI-Cq-NLIUZ.js} +2 -2
  144. package/dist/server/assets/{treemap-GDKQZRPO-DqxwR6w-.js → treemap-GDKQZRPO-f0Rq9dJ9.js} +6 -6
  145. package/dist/server/assets/{workspace._workspaceId-B09dwAP5.js → workspace._workspaceId-CHDrJbrs.js} +1 -1
  146. package/dist/server/assets/{workspace._workspaceId-CZZSeH-P.js → workspace._workspaceId-CzpW_AIO.js} +15 -1
  147. package/dist/server/assets/{xterm-DnMRSOdQ.js → xterm-CsaVCelU.js} +517 -579
  148. package/dist/server/assets/{xychartDiagram-PRI3JC2R-Du3l-FcL.js → xychartDiagram-PRI3JC2R-zZQ-PeCr.js} +1 -1
  149. package/dist/server/server.js +2 -2
  150. package/dist/start-server.mjs +11466 -8672
  151. package/dist/terminal-daemon.mjs +230 -233
  152. package/package.json +14 -12
  153. package/dist/client/assets/TerminalPanel-CyltRZLD.js +0 -1
  154. package/dist/client/assets/addon-search-DBOYg5r3.js +0 -1
  155. package/dist/client/assets/addon-unicode11-LsnDChsR.js +0 -1
  156. package/dist/client/assets/channel-CnUqAM2K.js +0 -1
  157. package/dist/client/assets/classDiagram-2ON5EDUG-Bl2ARqSW.js +0 -1
  158. package/dist/client/assets/classDiagram-v2-WZHVMYZB-Bl2ARqSW.js +0 -1
  159. package/dist/client/assets/clone-DoC0Yowh.js +0 -1
  160. package/dist/client/assets/main-D4u0xEOA.css +0 -1
  161. package/dist/client/assets/stateDiagram-v2-4FDKWEC3-B9BH2TF6.js +0 -1
  162. package/dist/client/assets/workspace._workspaceId-D3mRY9_6.js +0 -1
  163. package/dist/client/assets/xterm-CPJFL3h0.js +0 -10
  164. package/dist/server/assets/_tanstack-start-manifest_v-cBOqdEgL.js +0 -4
package/dist/openapi.json CHANGED
@@ -1562,6 +1562,74 @@
1562
1562
  }
1563
1563
  }
1564
1564
  },
1565
+ "/statuses.refreshBranchStatus": {
1566
+ "post": {
1567
+ "operationId": "statuses.refreshBranchStatus",
1568
+ "description": "Re-read one workspace's git status now and push it on the status stream.\nThe dashboard calls this when the user selects a workspace, so its badge\ndoesn't wait for the next poll tick. `refreshed` is false when no git\nworkspace has that id.",
1569
+ "tags": [
1570
+ "statuses"
1571
+ ],
1572
+ "responses": {
1573
+ "200": {
1574
+ "description": "Successful response",
1575
+ "content": {
1576
+ "application/json": {
1577
+ "schema": {
1578
+ "type": "object",
1579
+ "properties": {
1580
+ "result": {
1581
+ "type": "object",
1582
+ "properties": {
1583
+ "data": {
1584
+ "type": "object",
1585
+ "properties": {
1586
+ "refreshed": {
1587
+ "type": "boolean"
1588
+ }
1589
+ },
1590
+ "required": [
1591
+ "refreshed"
1592
+ ],
1593
+ "additionalProperties": false
1594
+ }
1595
+ },
1596
+ "required": [
1597
+ "data"
1598
+ ]
1599
+ }
1600
+ },
1601
+ "required": [
1602
+ "result"
1603
+ ]
1604
+ }
1605
+ }
1606
+ }
1607
+ },
1608
+ "default": {
1609
+ "$ref": "#/components/responses/Error"
1610
+ }
1611
+ },
1612
+ "requestBody": {
1613
+ "required": true,
1614
+ "content": {
1615
+ "application/json": {
1616
+ "schema": {
1617
+ "type": "object",
1618
+ "properties": {
1619
+ "workspaceId": {
1620
+ "type": "string"
1621
+ }
1622
+ },
1623
+ "required": [
1624
+ "workspaceId"
1625
+ ],
1626
+ "additionalProperties": false
1627
+ }
1628
+ }
1629
+ }
1630
+ }
1631
+ }
1632
+ },
1565
1633
  "/statuses.clearNeedsAttention": {
1566
1634
  "post": {
1567
1635
  "operationId": "statuses.clearNeedsAttention",
@@ -1707,7 +1775,7 @@
1707
1775
  "/statuses.notify": {
1708
1776
  "post": {
1709
1777
  "operationId": "statuses.notify",
1710
- "description": "Agent-agnostic entry point for coding-agent lifecycle notifications\n(e.g. Claude Code hooks piped through `band notify`). The CLI forwards\nthe raw payload plus the agent's cwd; the server resolves the workspace,\nlooks up its configured agent, and dispatches to that agent's adapter to\ntranslate the payload into a status. Keeping the mapping in the adapter\nmeans adding hook support for a new agent never touches the CLI.\n\nFire-and-forget semantics: unknown cwd → no-op `{ ok: true }` (matches the\nCLI hook contract, which must never fail and break the agent).",
1778
+ "description": "Agent-agnostic entry point for coding-agent lifecycle notifications\n(e.g. Claude Code hooks piped through `band notify`). The CLI forwards\nthe raw payload plus the agent's cwd, the agent type the hook command\nnames (`--agent`), and its `BAND_DISPATCH` / `BAND_TERMINAL_ID`. The\nserver resolves the workspace and the sending agent, and dispatches to\nthat agent's adapter to translate the payload into a status. Keeping the\nmapping in the adapter means adding hook support for a new agent never\ntouches the CLI.\n\nFire-and-forget semantics: unknown cwd → no-op `{ ok: true }` (matches the\nCLI hook contract, which must never fail and break the agent).",
1711
1779
  "tags": [
1712
1780
  "statuses"
1713
1781
  ],
@@ -1764,6 +1832,15 @@
1764
1832
  "payload": {
1765
1833
  "type": "object",
1766
1834
  "additionalProperties": {}
1835
+ },
1836
+ "agent": {
1837
+ "type": "string"
1838
+ },
1839
+ "terminalId": {
1840
+ "type": "string"
1841
+ },
1842
+ "dispatch": {
1843
+ "type": "string"
1767
1844
  }
1768
1845
  },
1769
1846
  "required": [
@@ -2326,10 +2403,10 @@
2326
2403
  "range": {
2327
2404
  "type": "string",
2328
2405
  "enum": [
2406
+ "all",
2329
2407
  "hour",
2330
2408
  "day",
2331
- "week",
2332
- "all"
2409
+ "week"
2333
2410
  ]
2334
2411
  }
2335
2412
  },
@@ -3042,6 +3119,297 @@
3042
3119
  ]
3043
3120
  }
3044
3121
  },
3122
+ "/plugins.list": {
3123
+ "get": {
3124
+ "operationId": "plugins.list",
3125
+ "description": "The bundled plugins and their state. The dashboard hides the UI of disabled ones.",
3126
+ "tags": [
3127
+ "plugins"
3128
+ ],
3129
+ "responses": {
3130
+ "200": {
3131
+ "description": "Successful response",
3132
+ "content": {
3133
+ "application/json": {
3134
+ "schema": {
3135
+ "type": "object",
3136
+ "properties": {
3137
+ "result": {
3138
+ "type": "object",
3139
+ "properties": {
3140
+ "data": {
3141
+ "type": "array",
3142
+ "items": {
3143
+ "$ref": "#/components/schemas/PluginInfo"
3144
+ }
3145
+ }
3146
+ },
3147
+ "required": [
3148
+ "data"
3149
+ ]
3150
+ }
3151
+ },
3152
+ "required": [
3153
+ "result"
3154
+ ]
3155
+ }
3156
+ }
3157
+ }
3158
+ },
3159
+ "default": {
3160
+ "$ref": "#/components/responses/Error"
3161
+ }
3162
+ }
3163
+ }
3164
+ },
3165
+ "/reviews.forWorkspace": {
3166
+ "get": {
3167
+ "operationId": "reviews.forWorkspace",
3168
+ "description": "The review for the workspace's branch with its checks, or the branch's\nCI jobs when there is no review. Provider failures come back as\n`status: \"error\"` rather than a thrown error, so the panel can show them.",
3169
+ "tags": [
3170
+ "reviews"
3171
+ ],
3172
+ "responses": {
3173
+ "200": {
3174
+ "description": "Successful response",
3175
+ "content": {
3176
+ "application/json": {
3177
+ "schema": {
3178
+ "type": "object",
3179
+ "properties": {
3180
+ "result": {
3181
+ "type": "object",
3182
+ "properties": {
3183
+ "data": {
3184
+ "oneOf": [
3185
+ {
3186
+ "type": "object",
3187
+ "properties": {
3188
+ "status": {
3189
+ "type": "string",
3190
+ "const": "ok"
3191
+ },
3192
+ "provider": {
3193
+ "type": "object",
3194
+ "properties": {
3195
+ "id": {
3196
+ "type": "string"
3197
+ },
3198
+ "name": {
3199
+ "type": "string"
3200
+ }
3201
+ },
3202
+ "required": [
3203
+ "id",
3204
+ "name"
3205
+ ],
3206
+ "additionalProperties": false
3207
+ },
3208
+ "repo": {
3209
+ "$ref": "#/components/schemas/RepoInfo"
3210
+ },
3211
+ "branch": {
3212
+ "type": "string"
3213
+ },
3214
+ "review": {
3215
+ "oneOf": [
3216
+ {
3217
+ "$ref": "#/components/schemas/ReviewInfo"
3218
+ },
3219
+ {
3220
+ "type": "null"
3221
+ }
3222
+ ]
3223
+ },
3224
+ "checks": {
3225
+ "$ref": "#/components/schemas/ChecksReport"
3226
+ },
3227
+ "fetchedAt": {
3228
+ "type": "string"
3229
+ }
3230
+ },
3231
+ "required": [
3232
+ "status",
3233
+ "provider",
3234
+ "repo",
3235
+ "branch",
3236
+ "review",
3237
+ "checks",
3238
+ "fetchedAt"
3239
+ ],
3240
+ "additionalProperties": false
3241
+ },
3242
+ {
3243
+ "type": "object",
3244
+ "properties": {
3245
+ "status": {
3246
+ "type": "string",
3247
+ "const": "unavailable"
3248
+ },
3249
+ "reason": {
3250
+ "type": "string",
3251
+ "enum": [
3252
+ "plain-project",
3253
+ "detached-head",
3254
+ "no-remote",
3255
+ "no-provider"
3256
+ ]
3257
+ },
3258
+ "message": {
3259
+ "type": "string"
3260
+ }
3261
+ },
3262
+ "required": [
3263
+ "status",
3264
+ "reason",
3265
+ "message"
3266
+ ],
3267
+ "additionalProperties": false
3268
+ },
3269
+ {
3270
+ "type": "object",
3271
+ "properties": {
3272
+ "status": {
3273
+ "type": "string",
3274
+ "const": "error"
3275
+ },
3276
+ "message": {
3277
+ "type": "string"
3278
+ }
3279
+ },
3280
+ "required": [
3281
+ "status",
3282
+ "message"
3283
+ ],
3284
+ "additionalProperties": false
3285
+ }
3286
+ ],
3287
+ "discriminator": {
3288
+ "propertyName": "status"
3289
+ },
3290
+ "description": "What the core returns for a workspace's review panel: the review for the\nworkspace's branch, or when there is none, the checks on the branch."
3291
+ }
3292
+ },
3293
+ "required": [
3294
+ "data"
3295
+ ]
3296
+ }
3297
+ },
3298
+ "required": [
3299
+ "result"
3300
+ ]
3301
+ }
3302
+ }
3303
+ }
3304
+ },
3305
+ "default": {
3306
+ "$ref": "#/components/responses/Error"
3307
+ }
3308
+ },
3309
+ "parameters": [
3310
+ {
3311
+ "name": "input",
3312
+ "in": "query",
3313
+ "required": true,
3314
+ "style": "deepObject",
3315
+ "content": {
3316
+ "application/json": {
3317
+ "schema": {
3318
+ "type": "object",
3319
+ "properties": {
3320
+ "workspaceId": {
3321
+ "type": "string"
3322
+ }
3323
+ },
3324
+ "required": [
3325
+ "workspaceId"
3326
+ ],
3327
+ "additionalProperties": false
3328
+ }
3329
+ }
3330
+ }
3331
+ }
3332
+ ]
3333
+ }
3334
+ },
3335
+ "/reviews.merge": {
3336
+ "post": {
3337
+ "operationId": "reviews.merge",
3338
+ "description": "Merge the workspace branch's open review.",
3339
+ "tags": [
3340
+ "reviews"
3341
+ ],
3342
+ "responses": {
3343
+ "200": {
3344
+ "description": "Successful response",
3345
+ "content": {
3346
+ "application/json": {
3347
+ "schema": {
3348
+ "type": "object",
3349
+ "properties": {
3350
+ "result": {
3351
+ "type": "object",
3352
+ "properties": {
3353
+ "data": {
3354
+ "type": "object",
3355
+ "properties": {
3356
+ "ok": {
3357
+ "type": "boolean",
3358
+ "const": true
3359
+ }
3360
+ },
3361
+ "required": [
3362
+ "ok"
3363
+ ],
3364
+ "additionalProperties": false
3365
+ }
3366
+ },
3367
+ "required": [
3368
+ "data"
3369
+ ]
3370
+ }
3371
+ },
3372
+ "required": [
3373
+ "result"
3374
+ ]
3375
+ }
3376
+ }
3377
+ }
3378
+ },
3379
+ "default": {
3380
+ "$ref": "#/components/responses/Error"
3381
+ }
3382
+ },
3383
+ "requestBody": {
3384
+ "required": true,
3385
+ "content": {
3386
+ "application/json": {
3387
+ "schema": {
3388
+ "type": "object",
3389
+ "properties": {
3390
+ "workspaceId": {
3391
+ "type": "string"
3392
+ },
3393
+ "method": {
3394
+ "type": "string",
3395
+ "enum": [
3396
+ "merge",
3397
+ "squash",
3398
+ "rebase"
3399
+ ]
3400
+ }
3401
+ },
3402
+ "required": [
3403
+ "workspaceId",
3404
+ "method"
3405
+ ],
3406
+ "additionalProperties": false
3407
+ }
3408
+ }
3409
+ }
3410
+ }
3411
+ }
3412
+ },
3045
3413
  "/services.health": {
3046
3414
  "get": {
3047
3415
  "operationId": "services.health",
@@ -5206,17 +5574,52 @@
5206
5574
  "type": "object",
5207
5575
  "properties": {
5208
5576
  "data": {
5209
- "type": "object",
5210
- "properties": {
5211
- "ok": {
5212
- "type": "boolean",
5213
- "const": true
5577
+ "oneOf": [
5578
+ {
5579
+ "type": "object",
5580
+ "properties": {
5581
+ "ok": {
5582
+ "type": "boolean",
5583
+ "const": true
5584
+ }
5585
+ },
5586
+ "required": [
5587
+ "ok"
5588
+ ],
5589
+ "additionalProperties": false
5590
+ },
5591
+ {
5592
+ "type": "object",
5593
+ "properties": {
5594
+ "ok": {
5595
+ "type": "boolean",
5596
+ "const": false
5597
+ },
5598
+ "reason": {
5599
+ "type": "string",
5600
+ "enum": [
5601
+ "local-changes",
5602
+ "no-upstream",
5603
+ "behind-remote",
5604
+ "nothing-to-commit"
5605
+ ],
5606
+ "description": "Result of a workspace git pull, push or commit, shared by the server and\nthe dashboard.\n\nGit refusing an operation for an ordinary reason (local changes in the way\nof a pull, a push the remote rejects as non-fast-forward, nothing to\ncommit) is a normal outcome, so the server returns it as `ok: false` with a\nplain-words `message` instead of throwing. The dashboard shows that message\nas an informational notice. Anything else still throws and shows as an\nerror."
5607
+ },
5608
+ "message": {
5609
+ "type": "string"
5610
+ }
5611
+ },
5612
+ "required": [
5613
+ "ok",
5614
+ "reason",
5615
+ "message"
5616
+ ],
5617
+ "additionalProperties": false
5214
5618
  }
5215
- },
5216
- "required": [
5217
- "ok"
5218
5619
  ],
5219
- "additionalProperties": false
5620
+ "discriminator": {
5621
+ "propertyName": "ok"
5622
+ }
5220
5623
  }
5221
5624
  },
5222
5625
  "required": [
@@ -5278,17 +5681,52 @@
5278
5681
  "type": "object",
5279
5682
  "properties": {
5280
5683
  "data": {
5281
- "type": "object",
5282
- "properties": {
5283
- "ok": {
5284
- "type": "boolean",
5285
- "const": true
5684
+ "oneOf": [
5685
+ {
5686
+ "type": "object",
5687
+ "properties": {
5688
+ "ok": {
5689
+ "type": "boolean",
5690
+ "const": true
5691
+ }
5692
+ },
5693
+ "required": [
5694
+ "ok"
5695
+ ],
5696
+ "additionalProperties": false
5697
+ },
5698
+ {
5699
+ "type": "object",
5700
+ "properties": {
5701
+ "ok": {
5702
+ "type": "boolean",
5703
+ "const": false
5704
+ },
5705
+ "reason": {
5706
+ "type": "string",
5707
+ "enum": [
5708
+ "local-changes",
5709
+ "no-upstream",
5710
+ "behind-remote",
5711
+ "nothing-to-commit"
5712
+ ],
5713
+ "description": "Result of a workspace git pull, push or commit, shared by the server and\nthe dashboard.\n\nGit refusing an operation for an ordinary reason (local changes in the way\nof a pull, a push the remote rejects as non-fast-forward, nothing to\ncommit) is a normal outcome, so the server returns it as `ok: false` with a\nplain-words `message` instead of throwing. The dashboard shows that message\nas an informational notice. Anything else still throws and shows as an\nerror."
5714
+ },
5715
+ "message": {
5716
+ "type": "string"
5717
+ }
5718
+ },
5719
+ "required": [
5720
+ "ok",
5721
+ "reason",
5722
+ "message"
5723
+ ],
5724
+ "additionalProperties": false
5286
5725
  }
5287
- },
5288
- "required": [
5289
- "ok"
5290
5726
  ],
5291
- "additionalProperties": false
5727
+ "discriminator": {
5728
+ "propertyName": "ok"
5729
+ }
5292
5730
  }
5293
5731
  },
5294
5732
  "required": [
@@ -6455,17 +6893,52 @@
6455
6893
  "type": "object",
6456
6894
  "properties": {
6457
6895
  "data": {
6458
- "type": "object",
6459
- "properties": {
6460
- "ok": {
6461
- "type": "boolean",
6462
- "const": true
6896
+ "oneOf": [
6897
+ {
6898
+ "type": "object",
6899
+ "properties": {
6900
+ "ok": {
6901
+ "type": "boolean",
6902
+ "const": true
6903
+ }
6904
+ },
6905
+ "required": [
6906
+ "ok"
6907
+ ],
6908
+ "additionalProperties": false
6909
+ },
6910
+ {
6911
+ "type": "object",
6912
+ "properties": {
6913
+ "ok": {
6914
+ "type": "boolean",
6915
+ "const": false
6916
+ },
6917
+ "reason": {
6918
+ "type": "string",
6919
+ "enum": [
6920
+ "local-changes",
6921
+ "no-upstream",
6922
+ "behind-remote",
6923
+ "nothing-to-commit"
6924
+ ],
6925
+ "description": "Result of a workspace git pull, push or commit, shared by the server and\nthe dashboard.\n\nGit refusing an operation for an ordinary reason (local changes in the way\nof a pull, a push the remote rejects as non-fast-forward, nothing to\ncommit) is a normal outcome, so the server returns it as `ok: false` with a\nplain-words `message` instead of throwing. The dashboard shows that message\nas an informational notice. Anything else still throws and shows as an\nerror."
6926
+ },
6927
+ "message": {
6928
+ "type": "string"
6929
+ }
6930
+ },
6931
+ "required": [
6932
+ "ok",
6933
+ "reason",
6934
+ "message"
6935
+ ],
6936
+ "additionalProperties": false
6463
6937
  }
6464
- },
6465
- "required": [
6466
- "ok"
6467
6938
  ],
6468
- "additionalProperties": false
6939
+ "discriminator": {
6940
+ "propertyName": "ok"
6941
+ }
6469
6942
  }
6470
6943
  },
6471
6944
  "required": [
@@ -6523,17 +6996,52 @@
6523
6996
  "type": "object",
6524
6997
  "properties": {
6525
6998
  "data": {
6526
- "type": "object",
6527
- "properties": {
6528
- "ok": {
6529
- "type": "boolean",
6530
- "const": true
6999
+ "oneOf": [
7000
+ {
7001
+ "type": "object",
7002
+ "properties": {
7003
+ "ok": {
7004
+ "type": "boolean",
7005
+ "const": true
7006
+ }
7007
+ },
7008
+ "required": [
7009
+ "ok"
7010
+ ],
7011
+ "additionalProperties": false
7012
+ },
7013
+ {
7014
+ "type": "object",
7015
+ "properties": {
7016
+ "ok": {
7017
+ "type": "boolean",
7018
+ "const": false
7019
+ },
7020
+ "reason": {
7021
+ "type": "string",
7022
+ "enum": [
7023
+ "local-changes",
7024
+ "no-upstream",
7025
+ "behind-remote",
7026
+ "nothing-to-commit"
7027
+ ],
7028
+ "description": "Result of a workspace git pull, push or commit, shared by the server and\nthe dashboard.\n\nGit refusing an operation for an ordinary reason (local changes in the way\nof a pull, a push the remote rejects as non-fast-forward, nothing to\ncommit) is a normal outcome, so the server returns it as `ok: false` with a\nplain-words `message` instead of throwing. The dashboard shows that message\nas an informational notice. Anything else still throws and shows as an\nerror."
7029
+ },
7030
+ "message": {
7031
+ "type": "string"
7032
+ }
7033
+ },
7034
+ "required": [
7035
+ "ok",
7036
+ "reason",
7037
+ "message"
7038
+ ],
7039
+ "additionalProperties": false
6531
7040
  }
6532
- },
6533
- "required": [
6534
- "ok"
6535
7041
  ],
6536
- "additionalProperties": false
7042
+ "discriminator": {
7043
+ "propertyName": "ok"
7044
+ }
6537
7045
  }
6538
7046
  },
6539
7047
  "required": [
@@ -6591,17 +7099,52 @@
6591
7099
  "type": "object",
6592
7100
  "properties": {
6593
7101
  "data": {
6594
- "type": "object",
6595
- "properties": {
6596
- "ok": {
6597
- "type": "boolean",
6598
- "const": true
7102
+ "oneOf": [
7103
+ {
7104
+ "type": "object",
7105
+ "properties": {
7106
+ "ok": {
7107
+ "type": "boolean",
7108
+ "const": true
7109
+ }
7110
+ },
7111
+ "required": [
7112
+ "ok"
7113
+ ],
7114
+ "additionalProperties": false
7115
+ },
7116
+ {
7117
+ "type": "object",
7118
+ "properties": {
7119
+ "ok": {
7120
+ "type": "boolean",
7121
+ "const": false
7122
+ },
7123
+ "reason": {
7124
+ "type": "string",
7125
+ "enum": [
7126
+ "local-changes",
7127
+ "no-upstream",
7128
+ "behind-remote",
7129
+ "nothing-to-commit"
7130
+ ],
7131
+ "description": "Result of a workspace git pull, push or commit, shared by the server and\nthe dashboard.\n\nGit refusing an operation for an ordinary reason (local changes in the way\nof a pull, a push the remote rejects as non-fast-forward, nothing to\ncommit) is a normal outcome, so the server returns it as `ok: false` with a\nplain-words `message` instead of throwing. The dashboard shows that message\nas an informational notice. Anything else still throws and shows as an\nerror."
7132
+ },
7133
+ "message": {
7134
+ "type": "string"
7135
+ }
7136
+ },
7137
+ "required": [
7138
+ "ok",
7139
+ "reason",
7140
+ "message"
7141
+ ],
7142
+ "additionalProperties": false
6599
7143
  }
6600
- },
6601
- "required": [
6602
- "ok"
6603
7144
  ],
6604
- "additionalProperties": false
7145
+ "discriminator": {
7146
+ "propertyName": "ok"
7147
+ }
6605
7148
  }
6606
7149
  },
6607
7150
  "required": [
@@ -10434,14 +10977,294 @@
10434
10977
  }
10435
10978
  }
10436
10979
  }
10437
- ]
10980
+ ]
10981
+ }
10982
+ },
10983
+ "/panelFocus.set": {
10984
+ "post": {
10985
+ "operationId": "panelFocus.set",
10986
+ "tags": [
10987
+ "panelFocus"
10988
+ ],
10989
+ "responses": {
10990
+ "200": {
10991
+ "description": "Successful response",
10992
+ "content": {
10993
+ "application/json": {
10994
+ "schema": {
10995
+ "type": "object",
10996
+ "properties": {
10997
+ "result": {
10998
+ "type": "object",
10999
+ "properties": {
11000
+ "data": {
11001
+ "type": "object",
11002
+ "properties": {
11003
+ "ok": {
11004
+ "type": "boolean"
11005
+ }
11006
+ },
11007
+ "required": [
11008
+ "ok"
11009
+ ],
11010
+ "additionalProperties": false
11011
+ }
11012
+ },
11013
+ "required": [
11014
+ "data"
11015
+ ]
11016
+ }
11017
+ },
11018
+ "required": [
11019
+ "result"
11020
+ ]
11021
+ }
11022
+ }
11023
+ }
11024
+ },
11025
+ "default": {
11026
+ "$ref": "#/components/responses/Error"
11027
+ }
11028
+ },
11029
+ "requestBody": {
11030
+ "required": true,
11031
+ "content": {
11032
+ "application/json": {
11033
+ "schema": {
11034
+ "type": "object",
11035
+ "properties": {
11036
+ "workspaceId": {
11037
+ "type": "string"
11038
+ },
11039
+ "panelType": {
11040
+ "type": "string",
11041
+ "enum": [
11042
+ "chat",
11043
+ "terminal",
11044
+ "browser"
11045
+ ]
11046
+ },
11047
+ "panelId": {
11048
+ "type": "string"
11049
+ }
11050
+ },
11051
+ "required": [
11052
+ "workspaceId",
11053
+ "panelType",
11054
+ "panelId"
11055
+ ],
11056
+ "additionalProperties": false
11057
+ }
11058
+ }
11059
+ }
11060
+ }
11061
+ }
11062
+ },
11063
+ "/clientState.list": {
11064
+ "get": {
11065
+ "operationId": "clientState.list",
11066
+ "tags": [
11067
+ "clientState"
11068
+ ],
11069
+ "responses": {
11070
+ "200": {
11071
+ "description": "Successful response",
11072
+ "content": {
11073
+ "application/json": {
11074
+ "schema": {
11075
+ "type": "object",
11076
+ "properties": {
11077
+ "result": {
11078
+ "type": "object",
11079
+ "properties": {
11080
+ "data": {
11081
+ "type": "object",
11082
+ "properties": {
11083
+ "entries": {
11084
+ "type": "array",
11085
+ "items": {
11086
+ "$ref": "#/components/schemas/ClientStateEntry"
11087
+ }
11088
+ }
11089
+ },
11090
+ "required": [
11091
+ "entries"
11092
+ ],
11093
+ "additionalProperties": false
11094
+ }
11095
+ },
11096
+ "required": [
11097
+ "data"
11098
+ ]
11099
+ }
11100
+ },
11101
+ "required": [
11102
+ "result"
11103
+ ]
11104
+ }
11105
+ }
11106
+ }
11107
+ },
11108
+ "default": {
11109
+ "$ref": "#/components/responses/Error"
11110
+ }
11111
+ },
11112
+ "parameters": [
11113
+ {
11114
+ "name": "input",
11115
+ "in": "query",
11116
+ "required": true,
11117
+ "style": "deepObject",
11118
+ "content": {
11119
+ "application/json": {
11120
+ "schema": {
11121
+ "type": "object",
11122
+ "properties": {
11123
+ "workspaceId": {
11124
+ "type": [
11125
+ "string",
11126
+ "null"
11127
+ ]
11128
+ },
11129
+ "deviceType": {
11130
+ "type": "string",
11131
+ "enum": [
11132
+ "desktop",
11133
+ "mobile"
11134
+ ]
11135
+ }
11136
+ },
11137
+ "required": [
11138
+ "workspaceId",
11139
+ "deviceType"
11140
+ ],
11141
+ "additionalProperties": false
11142
+ }
11143
+ }
11144
+ }
11145
+ }
11146
+ ]
11147
+ }
11148
+ },
11149
+ "/clientState.set": {
11150
+ "post": {
11151
+ "operationId": "clientState.set",
11152
+ "tags": [
11153
+ "clientState"
11154
+ ],
11155
+ "responses": {
11156
+ "200": {
11157
+ "description": "Successful response",
11158
+ "content": {
11159
+ "application/json": {
11160
+ "schema": {
11161
+ "type": "object",
11162
+ "properties": {
11163
+ "result": {
11164
+ "type": "object",
11165
+ "properties": {
11166
+ "data": {
11167
+ "oneOf": [
11168
+ {
11169
+ "type": "object",
11170
+ "properties": {
11171
+ "ok": {
11172
+ "type": "boolean",
11173
+ "const": true
11174
+ },
11175
+ "entry": {
11176
+ "$ref": "#/components/schemas/ClientStateEntry"
11177
+ }
11178
+ },
11179
+ "required": [
11180
+ "ok",
11181
+ "entry"
11182
+ ],
11183
+ "additionalProperties": false
11184
+ },
11185
+ {
11186
+ "type": "object",
11187
+ "properties": {
11188
+ "ok": {
11189
+ "type": "boolean",
11190
+ "const": false
11191
+ },
11192
+ "entry": {
11193
+ "$ref": "#/components/schemas/ClientStateEntry"
11194
+ }
11195
+ },
11196
+ "required": [
11197
+ "ok",
11198
+ "entry"
11199
+ ],
11200
+ "additionalProperties": false
11201
+ }
11202
+ ],
11203
+ "discriminator": {
11204
+ "propertyName": "ok"
11205
+ }
11206
+ }
11207
+ },
11208
+ "required": [
11209
+ "data"
11210
+ ]
11211
+ }
11212
+ },
11213
+ "required": [
11214
+ "result"
11215
+ ]
11216
+ }
11217
+ }
11218
+ }
11219
+ },
11220
+ "default": {
11221
+ "$ref": "#/components/responses/Error"
11222
+ }
11223
+ },
11224
+ "requestBody": {
11225
+ "required": true,
11226
+ "content": {
11227
+ "application/json": {
11228
+ "schema": {
11229
+ "type": "object",
11230
+ "properties": {
11231
+ "key": {
11232
+ "type": "string"
11233
+ },
11234
+ "scope": {
11235
+ "type": "string",
11236
+ "enum": [
11237
+ "desktop",
11238
+ "mobile",
11239
+ "all"
11240
+ ]
11241
+ },
11242
+ "baseVersion": {
11243
+ "type": "number"
11244
+ },
11245
+ "clientId": {
11246
+ "type": "string"
11247
+ },
11248
+ "value": {}
11249
+ },
11250
+ "required": [
11251
+ "key",
11252
+ "scope",
11253
+ "baseVersion",
11254
+ "clientId"
11255
+ ],
11256
+ "additionalProperties": false
11257
+ }
11258
+ }
11259
+ }
11260
+ }
10438
11261
  }
10439
11262
  },
10440
- "/panelFocus.set": {
11263
+ "/clientState.delete": {
10441
11264
  "post": {
10442
- "operationId": "panelFocus.set",
11265
+ "operationId": "clientState.delete",
10443
11266
  "tags": [
10444
- "panelFocus"
11267
+ "clientState"
10445
11268
  ],
10446
11269
  "responses": {
10447
11270
  "200": {
@@ -10455,16 +11278,45 @@
10455
11278
  "type": "object",
10456
11279
  "properties": {
10457
11280
  "data": {
10458
- "type": "object",
10459
- "properties": {
10460
- "ok": {
10461
- "type": "boolean"
11281
+ "oneOf": [
11282
+ {
11283
+ "type": "object",
11284
+ "properties": {
11285
+ "ok": {
11286
+ "type": "boolean",
11287
+ "const": true
11288
+ },
11289
+ "entry": {
11290
+ "$ref": "#/components/schemas/ClientStateEntry"
11291
+ }
11292
+ },
11293
+ "required": [
11294
+ "ok",
11295
+ "entry"
11296
+ ],
11297
+ "additionalProperties": false
11298
+ },
11299
+ {
11300
+ "type": "object",
11301
+ "properties": {
11302
+ "ok": {
11303
+ "type": "boolean",
11304
+ "const": false
11305
+ },
11306
+ "entry": {
11307
+ "$ref": "#/components/schemas/ClientStateEntry"
11308
+ }
11309
+ },
11310
+ "required": [
11311
+ "ok",
11312
+ "entry"
11313
+ ],
11314
+ "additionalProperties": false
10462
11315
  }
10463
- },
10464
- "required": [
10465
- "ok"
10466
11316
  ],
10467
- "additionalProperties": false
11317
+ "discriminator": {
11318
+ "propertyName": "ok"
11319
+ }
10468
11320
  }
10469
11321
  },
10470
11322
  "required": [
@@ -10490,25 +11342,29 @@
10490
11342
  "schema": {
10491
11343
  "type": "object",
10492
11344
  "properties": {
10493
- "workspaceId": {
11345
+ "key": {
10494
11346
  "type": "string"
10495
11347
  },
10496
- "panelType": {
11348
+ "scope": {
10497
11349
  "type": "string",
10498
11350
  "enum": [
10499
- "chat",
10500
- "terminal",
10501
- "browser"
11351
+ "desktop",
11352
+ "mobile",
11353
+ "all"
10502
11354
  ]
10503
11355
  },
10504
- "panelId": {
11356
+ "baseVersion": {
11357
+ "type": "number"
11358
+ },
11359
+ "clientId": {
10505
11360
  "type": "string"
10506
11361
  }
10507
11362
  },
10508
11363
  "required": [
10509
- "workspaceId",
10510
- "panelType",
10511
- "panelId"
11364
+ "key",
11365
+ "scope",
11366
+ "baseVersion",
11367
+ "clientId"
10512
11368
  ],
10513
11369
  "additionalProperties": false
10514
11370
  }
@@ -11518,6 +12374,242 @@
11518
12374
  ],
11519
12375
  "additionalProperties": false
11520
12376
  },
12377
+ "PluginInfo": {
12378
+ "type": "object",
12379
+ "properties": {
12380
+ "id": {
12381
+ "type": "string"
12382
+ },
12383
+ "name": {
12384
+ "type": "string"
12385
+ },
12386
+ "version": {
12387
+ "type": "string"
12388
+ },
12389
+ "status": {
12390
+ "type": "string",
12391
+ "enum": [
12392
+ "active",
12393
+ "inactive",
12394
+ "disabled",
12395
+ "errored"
12396
+ ]
12397
+ },
12398
+ "error": {
12399
+ "type": [
12400
+ "string",
12401
+ "null"
12402
+ ],
12403
+ "description": "The last activation error, when `status` is `errored`."
12404
+ },
12405
+ "slots": {
12406
+ "type": "array",
12407
+ "items": {
12408
+ "type": "string",
12409
+ "const": "workspace.sideTabs"
12410
+ }
12411
+ }
12412
+ },
12413
+ "required": [
12414
+ "id",
12415
+ "name",
12416
+ "version",
12417
+ "status",
12418
+ "error",
12419
+ "slots"
12420
+ ],
12421
+ "additionalProperties": false
12422
+ },
12423
+ "RepoInfo": {
12424
+ "type": "object",
12425
+ "properties": {
12426
+ "host": {
12427
+ "type": "string"
12428
+ },
12429
+ "owner": {
12430
+ "type": "string"
12431
+ },
12432
+ "repo": {
12433
+ "type": "string"
12434
+ }
12435
+ },
12436
+ "required": [
12437
+ "host",
12438
+ "owner",
12439
+ "repo"
12440
+ ],
12441
+ "additionalProperties": false
12442
+ },
12443
+ "ReviewInfo": {
12444
+ "type": "object",
12445
+ "properties": {
12446
+ "number": {
12447
+ "type": "number"
12448
+ },
12449
+ "url": {
12450
+ "type": "string"
12451
+ },
12452
+ "title": {
12453
+ "type": "string"
12454
+ },
12455
+ "state": {
12456
+ "type": "string",
12457
+ "enum": [
12458
+ "open",
12459
+ "draft",
12460
+ "merged",
12461
+ "closed"
12462
+ ]
12463
+ },
12464
+ "updatedAt": {
12465
+ "type": "string"
12466
+ },
12467
+ "reviewDecision": {
12468
+ "type": [
12469
+ "string",
12470
+ "null"
12471
+ ],
12472
+ "enum": [
12473
+ "approved",
12474
+ "changes_requested",
12475
+ "review_required"
12476
+ ]
12477
+ },
12478
+ "mergeState": {
12479
+ "type": "string",
12480
+ "enum": [
12481
+ "dirty",
12482
+ "unknown",
12483
+ "draft",
12484
+ "clean",
12485
+ "unstable",
12486
+ "has_hooks",
12487
+ "blocked",
12488
+ "behind"
12489
+ ],
12490
+ "description": "Whether the review can merge now, and if not, why."
12491
+ },
12492
+ "checks": {
12493
+ "$ref": "#/components/schemas/ChecksReport"
12494
+ }
12495
+ },
12496
+ "required": [
12497
+ "number",
12498
+ "url",
12499
+ "title",
12500
+ "state",
12501
+ "updatedAt",
12502
+ "reviewDecision",
12503
+ "mergeState",
12504
+ "checks"
12505
+ ],
12506
+ "additionalProperties": false
12507
+ },
12508
+ "ChecksReport": {
12509
+ "type": "object",
12510
+ "properties": {
12511
+ "state": {
12512
+ "type": "string",
12513
+ "enum": [
12514
+ "running",
12515
+ "cancelled",
12516
+ "success",
12517
+ "failure",
12518
+ "pending",
12519
+ "none"
12520
+ ],
12521
+ "description": "The overall state of a set of checks. `none` means there are no checks."
12522
+ },
12523
+ "headSha": {
12524
+ "type": [
12525
+ "string",
12526
+ "null"
12527
+ ],
12528
+ "description": "The commit the checks ran on."
12529
+ },
12530
+ "checks": {
12531
+ "type": "array",
12532
+ "items": {
12533
+ "$ref": "#/components/schemas/CheckRun"
12534
+ }
12535
+ }
12536
+ },
12537
+ "required": [
12538
+ "state",
12539
+ "headSha",
12540
+ "checks"
12541
+ ],
12542
+ "additionalProperties": false
12543
+ },
12544
+ "CheckRun": {
12545
+ "type": "object",
12546
+ "properties": {
12547
+ "id": {
12548
+ "type": "string",
12549
+ "description": "Stable within one report, for list keys."
12550
+ },
12551
+ "name": {
12552
+ "type": "string"
12553
+ },
12554
+ "workflowName": {
12555
+ "type": [
12556
+ "string",
12557
+ "null"
12558
+ ],
12559
+ "description": "The CI workflow that ran the job, when the check came from one."
12560
+ },
12561
+ "state": {
12562
+ "type": "string",
12563
+ "enum": [
12564
+ "running",
12565
+ "cancelled",
12566
+ "success",
12567
+ "failure",
12568
+ "pending",
12569
+ "skipped",
12570
+ "neutral"
12571
+ ],
12572
+ "description": "The state of one check or CI job."
12573
+ },
12574
+ "url": {
12575
+ "type": [
12576
+ "string",
12577
+ "null"
12578
+ ],
12579
+ "description": "The job's page on the forge."
12580
+ },
12581
+ "startedAt": {
12582
+ "type": [
12583
+ "string",
12584
+ "null"
12585
+ ]
12586
+ },
12587
+ "completedAt": {
12588
+ "type": [
12589
+ "string",
12590
+ "null"
12591
+ ]
12592
+ },
12593
+ "description": {
12594
+ "type": [
12595
+ "string",
12596
+ "null"
12597
+ ],
12598
+ "description": "A one-line result, e.g. a check run's title or a commit status description."
12599
+ }
12600
+ },
12601
+ "required": [
12602
+ "id",
12603
+ "name",
12604
+ "workflowName",
12605
+ "state",
12606
+ "url",
12607
+ "startedAt",
12608
+ "completedAt",
12609
+ "description"
12610
+ ],
12611
+ "additionalProperties": false
12612
+ },
11521
12613
  "TerminalListEntry": {
11522
12614
  "type": "object",
11523
12615
  "properties": {
@@ -11652,6 +12744,19 @@
11652
12744
  },
11653
12745
  "additionalProperties": {},
11654
12746
  "description": "Agent preferences (issue #682). `defaultMode` is how an agent session\nstarts when the caller sends no mode: `gui` in a chat pane, `tui` as the\nagent's CLI in a terminal. Browsers keep their own per-device mode and\nalways send it, so this applies to the CLI, cronjobs and MCP. Replaces\n`cli.defaultVia`, which boot migrates once."
12747
+ },
12748
+ "plugins": {
12749
+ "type": "object",
12750
+ "properties": {
12751
+ "disabled": {
12752
+ "type": "array",
12753
+ "items": {
12754
+ "type": "string"
12755
+ }
12756
+ }
12757
+ },
12758
+ "additionalProperties": {},
12759
+ "description": "Bundled plugins (`plugins/<id>/`). A plugin whose id is in `disabled`\nnever activates and its UI is hidden. Read once at boot."
11655
12760
  }
11656
12761
  },
11657
12762
  "additionalProperties": {}
@@ -13201,6 +14306,49 @@
13201
14306
  },
13202
14307
  "additionalProperties": false
13203
14308
  },
14309
+ "ClientStateEntry": {
14310
+ "type": "object",
14311
+ "properties": {
14312
+ "key": {
14313
+ "type": "string"
14314
+ },
14315
+ "scope": {
14316
+ "type": "string",
14317
+ "enum": [
14318
+ "desktop",
14319
+ "mobile",
14320
+ "all"
14321
+ ],
14322
+ "description": "Client-state types shared by the server and the dashboard.\n\nClient state is small UI state (open center tabs, panel widths, drafts, …)\nthat the dashboard keeps on the Band server so every device shows the same\nthing. Each entry has a scope: `all` is one value for every device, and\n`desktop` / `mobile` hold a separate value per device type.\n\nEvery write names the version it was based on. The server refuses a write\nwhose base is not the current version, so a client that missed another\ndevice's change (offline, reconnecting) can never overwrite it."
14323
+ },
14324
+ "workspaceId": {
14325
+ "type": [
14326
+ "string",
14327
+ "null"
14328
+ ],
14329
+ "description": "The workspace the key belongs to, or null for a global key."
14330
+ },
14331
+ "value": {
14332
+ "description": "The stored JSON value, or null once the key has been deleted."
14333
+ },
14334
+ "version": {
14335
+ "type": "number",
14336
+ "description": "Starts at 1 and goes up by one on every write, including a delete."
14337
+ },
14338
+ "updatedAt": {
14339
+ "type": "number"
14340
+ }
14341
+ },
14342
+ "required": [
14343
+ "key",
14344
+ "scope",
14345
+ "workspaceId",
14346
+ "value",
14347
+ "version",
14348
+ "updatedAt"
14349
+ ],
14350
+ "additionalProperties": false
14351
+ },
13204
14352
  "SubmitResult": {
13205
14353
  "type": "object",
13206
14354
  "properties": {