@band-app/server 0.37.0 → 0.38.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 (143) hide show
  1. package/dist/client/assets/{TerminalPanel-B6hpsMbz.js → TerminalPanel-CddLlPAX.js} +1 -1
  2. package/dist/client/assets/{_basePickBy-DCmd5ciV.js → _basePickBy-Mr2ui_ok.js} +1 -1
  3. package/dist/client/assets/{_baseUniq-D9VK2Z8h.js → _baseUniq-BbCun8O9.js} +1 -1
  4. package/dist/client/assets/{arc-CUv7R2hs.js → arc-D72GLVnK.js} +1 -1
  5. package/dist/client/assets/{architectureDiagram-VXUJARFQ-p6VpjWC_.js → architectureDiagram-VXUJARFQ-CtL_pV38.js} +1 -1
  6. package/dist/client/assets/{blockDiagram-VD42YOAC-BqO2dZTh.js → blockDiagram-VD42YOAC-DqyIIG7r.js} +1 -1
  7. package/dist/client/assets/{c4Diagram-YG6GDRKO-Dj3Q1dN_.js → c4Diagram-YG6GDRKO-nrzjw8-Z.js} +1 -1
  8. package/dist/client/assets/channel-CLpfxzfv.js +1 -0
  9. package/dist/client/assets/{chunk-4BX2VUAB-ZCRzpI76.js → chunk-4BX2VUAB-CxMLZjJR.js} +1 -1
  10. package/dist/client/assets/{chunk-55IACEB6-N8w7W4nW.js → chunk-55IACEB6-mmYFV3uk.js} +1 -1
  11. package/dist/client/assets/{chunk-B4BG7PRW-Bd2C6K3g.js → chunk-B4BG7PRW-D5v9xl9X.js} +1 -1
  12. package/dist/client/assets/{chunk-DI55MBZ5-CSmsIkhT.js → chunk-DI55MBZ5-D265fj7U.js} +1 -1
  13. package/dist/client/assets/{chunk-FMBD7UC4-CSFx-rdE.js → chunk-FMBD7UC4-Dup-9g-C.js} +1 -1
  14. package/dist/client/assets/{chunk-QN33PNHL-OZhPV9ZW.js → chunk-QN33PNHL-C-rWtyk3.js} +1 -1
  15. package/dist/client/assets/{chunk-QZHKN3VN-CmQTIqBs.js → chunk-QZHKN3VN-DFPCO41y.js} +1 -1
  16. package/dist/client/assets/{chunk-TZMSLE5B-CZXFZkbf.js → chunk-TZMSLE5B-DsmBPBDj.js} +1 -1
  17. package/dist/client/assets/classDiagram-2ON5EDUG-CHqpXULX.js +1 -0
  18. package/dist/client/assets/classDiagram-v2-WZHVMYZB-CHqpXULX.js +1 -0
  19. package/dist/client/assets/clone-kZf8-x5k.js +1 -0
  20. package/dist/client/assets/{cose-bilkent-S5V4N54A-D2ZJ7fd6.js → cose-bilkent-S5V4N54A-CCWn4YDT.js} +1 -1
  21. package/dist/client/assets/{dagre-6UL2VRFP-DWWSarQ5.js → dagre-6UL2VRFP-CnSoXX5n.js} +1 -1
  22. package/dist/client/assets/{diagram-PSM6KHXK-Brpmw2Hy.js → diagram-PSM6KHXK-D9Zqn5kT.js} +1 -1
  23. package/dist/client/assets/{diagram-QEK2KX5R-ChxL1lOj.js → diagram-QEK2KX5R-B22XMhhn.js} +1 -1
  24. package/dist/client/assets/{diagram-S2PKOQOG-CWk5ucVa.js → diagram-S2PKOQOG-CtPm91f8.js} +1 -1
  25. package/dist/client/assets/{erDiagram-Q2GNP2WA-TKtLKYBO.js → erDiagram-Q2GNP2WA-Ctgsmx_B.js} +1 -1
  26. package/dist/client/assets/{flowDiagram-NV44I4VS-CNkvODlq.js → flowDiagram-NV44I4VS-BCt5r11U.js} +1 -1
  27. package/dist/client/assets/{ganttDiagram-JELNMOA3-GpiTT-6g.js → ganttDiagram-JELNMOA3-P1o9TA7p.js} +1 -1
  28. package/dist/client/assets/{gitGraphDiagram-V2S2FVAM-Dka5-Ebv.js → gitGraphDiagram-V2S2FVAM-CxVbFEsr.js} +1 -1
  29. package/dist/client/assets/{graph-BJfBQ-lk.js → graph-HCBV9xMB.js} +1 -1
  30. package/dist/client/assets/{highlighted-body-B3W2YXNL-Dcw7_8Mg.js → highlighted-body-B3W2YXNL-Gaqu4_Bi.js} +1 -1
  31. package/dist/client/assets/{index-Bf0KQTWS.js → index-B8S7APPC.js} +1 -1
  32. package/dist/client/assets/{index-D4kWf9j1.js → index-B9QUYOAR.js} +1 -1
  33. package/dist/client/assets/{index-BVmOFLZL.js → index-BQlNjJ1Y.js} +1 -1
  34. package/dist/client/assets/{index-BBjfnWP1.js → index-BR7y3Gjm.js} +1 -1
  35. package/dist/client/assets/{index-B55cfwG2.js → index-Bl-ZW84y.js} +1 -1
  36. package/dist/client/assets/{index-GWun5iKj.js → index-BsNWuo_5.js} +1 -1
  37. package/dist/client/assets/{index-C04T_A2n.js → index-C6aNqpcf.js} +1 -1
  38. package/dist/client/assets/{index-BqB0fXhh.js → index-CfHnPAjk.js} +1 -1
  39. package/dist/client/assets/{index-D7ptzMHA.js → index-CnoZP7Fs.js} +1 -1
  40. package/dist/client/assets/{index-Bw0gx-LL.js → index-D05HI19D.js} +1 -1
  41. package/dist/client/assets/{index-B8-bfanc.js → index-D854qjw6.js} +1 -1
  42. package/dist/client/assets/{index-D6AQfoh3.js → index-DIJ2_F70.js} +1 -1
  43. package/dist/client/assets/{index-DNCwYJJi.js → index-Gh5XAQRT.js} +1 -1
  44. package/dist/client/assets/{infoDiagram-HS3SLOUP-yepsEzeD.js → infoDiagram-HS3SLOUP-CmsTlZB8.js} +1 -1
  45. package/dist/client/assets/{journeyDiagram-XKPGCS4Q-Ah-IVMRC.js → journeyDiagram-XKPGCS4Q-D-GI9JIi.js} +1 -1
  46. package/dist/client/assets/{kanban-definition-3W4ZIXB7-4lmmn3Kf.js → kanban-definition-3W4ZIXB7-55Qs5mRI.js} +1 -1
  47. package/dist/client/assets/{layout-WnM58jJN.js → layout-B2VqN6hx.js} +1 -1
  48. package/dist/client/assets/{main-D7maoxCk.js → main-BYGBqn5C.js} +175 -175
  49. package/dist/client/assets/main-uTpkFvkD.css +1 -0
  50. package/dist/client/assets/{mindmap-definition-VGOIOE7T-CW03vZML.js → mindmap-definition-VGOIOE7T-5E-mnLiw.js} +1 -1
  51. package/dist/client/assets/{pieDiagram-ADFJNKIX-b38HzvV9.js → pieDiagram-ADFJNKIX--iuEHqnb.js} +1 -1
  52. package/dist/client/assets/{quadrantDiagram-AYHSOK5B-D7COvUcB.js → quadrantDiagram-AYHSOK5B-DuZPB3Et.js} +1 -1
  53. package/dist/client/assets/{requirementDiagram-UZGBJVZJ-Dbo91lMQ.js → requirementDiagram-UZGBJVZJ-CZiE6M78.js} +1 -1
  54. package/dist/client/assets/{sankeyDiagram-TZEHDZUN-DPpuI6f6.js → sankeyDiagram-TZEHDZUN-Dp81iX-I.js} +1 -1
  55. package/dist/client/assets/{sequenceDiagram-WL72ISMW-osyniVrm.js → sequenceDiagram-WL72ISMW-BHT8ZcM2.js} +1 -1
  56. package/dist/client/assets/{stateDiagram-FKZM4ZOC-CEtXxDG2.js → stateDiagram-FKZM4ZOC-15v8J55n.js} +1 -1
  57. package/dist/client/assets/stateDiagram-v2-4FDKWEC3-DKjPuiuj.js +1 -0
  58. package/dist/client/assets/{timeline-definition-IT6M3QCI-Bbim-hJj.js → timeline-definition-IT6M3QCI-C4Y7a-dk.js} +1 -1
  59. package/dist/client/assets/{treemap-GDKQZRPO-Bo5jz1c4.js → treemap-GDKQZRPO-1nZ3vFhH.js} +1 -1
  60. package/dist/client/assets/{workspace._workspaceId-Dx3IQ0uo.js → workspace._workspaceId-BflC9g6E.js} +1 -1
  61. package/dist/client/assets/{workspace._workspaceId-BAa7JD1w.js → workspace._workspaceId-FEoumKx5.js} +1 -1
  62. package/dist/client/assets/{xychartDiagram-PRI3JC2R-CwV1AnKv.js → xychartDiagram-PRI3JC2R-Cdm6l1QL.js} +1 -1
  63. package/dist/openapi.json +117 -36
  64. package/dist/server/assets/{TerminalPanel-oz5y-mkP.js → TerminalPanel-DFfLVpnD.js} +1 -1
  65. package/dist/server/assets/{_basePickBy-DEzTaMUa.js → _basePickBy-BJp7LAxW.js} +2 -2
  66. package/dist/server/assets/{_baseUniq-CnsXScTA.js → _baseUniq-C6AsZ3Xv.js} +1 -1
  67. package/dist/server/assets/_tanstack-start-manifest_v-CY2brxDW.js +4 -0
  68. package/dist/server/assets/{arc-DFOFayWx.js → arc-CdG8tMD4.js} +1 -1
  69. package/dist/server/assets/{architecture-7HQA4BMR-n9VmbCuR.js → architecture-7HQA4BMR-DAiqr3_e.js} +6 -6
  70. package/dist/server/assets/{architectureDiagram-VXUJARFQ-IeNkR88v.js → architectureDiagram-VXUJARFQ-B5KfJFud.js} +6 -6
  71. package/dist/server/assets/{blockDiagram-VD42YOAC-CWXr6KW7.js → blockDiagram-VD42YOAC-DHqCP2b4.js} +6 -6
  72. package/dist/server/assets/{c4Diagram-YG6GDRKO-DIRimETA.js → c4Diagram-YG6GDRKO-BxUADYG0.js} +2 -2
  73. package/dist/server/assets/{channel-Cdqq5j16.js → channel-AccynRMn.js} +1 -1
  74. package/dist/server/assets/{chunk-4BX2VUAB-Cozm9hqk.js → chunk-4BX2VUAB-Dr1erjpr.js} +1 -1
  75. package/dist/server/assets/{chunk-55IACEB6-DRjrJM1L.js → chunk-55IACEB6-Bp9fy_-K.js} +1 -1
  76. package/dist/server/assets/{chunk-B4BG7PRW-BwiA7gAZ.js → chunk-B4BG7PRW-DIekCOU0.js} +4 -4
  77. package/dist/server/assets/{chunk-DI55MBZ5-DYx-lIkt.js → chunk-DI55MBZ5-DdsSqZAU.js} +3 -3
  78. package/dist/server/assets/{chunk-FMBD7UC4-Bd38Wnw9.js → chunk-FMBD7UC4-yK1qgpi7.js} +1 -1
  79. package/dist/server/assets/{chunk-QN33PNHL-ONbSMsSY.js → chunk-QN33PNHL-BbG6vBLZ.js} +1 -1
  80. package/dist/server/assets/{chunk-QZHKN3VN-fU_vVgPJ.js → chunk-QZHKN3VN-x8T6uBe6.js} +1 -1
  81. package/dist/server/assets/{chunk-TZMSLE5B-BBpSfNKJ.js → chunk-TZMSLE5B-DLaeAZ2i.js} +1 -1
  82. package/dist/server/assets/{classDiagram-v2-WZHVMYZB-BLteCxZe.js → classDiagram-2ON5EDUG-Dm_cGVOP.js} +5 -5
  83. package/dist/server/assets/{classDiagram-2ON5EDUG-BLteCxZe.js → classDiagram-v2-WZHVMYZB-Dm_cGVOP.js} +5 -5
  84. package/dist/server/assets/{clone-DHWXuNGD.js → clone-CORmWwEs.js} +1 -1
  85. package/dist/server/assets/{cose-bilkent-S5V4N54A-Dqv8g3XR.js → cose-bilkent-S5V4N54A-BfBG7OY2.js} +1 -1
  86. package/dist/server/assets/{dagre-6UL2VRFP-DvvoFaVJ.js → dagre-6UL2VRFP-LXGdLIDl.js} +6 -6
  87. package/dist/server/assets/{diagram-PSM6KHXK-CbKKlJvK.js → diagram-PSM6KHXK-Dq-nGhg0.js} +7 -7
  88. package/dist/server/assets/{diagram-QEK2KX5R-GLrYhnWw.js → diagram-QEK2KX5R-rd29zHZp.js} +6 -6
  89. package/dist/server/assets/{diagram-S2PKOQOG-uaww8JQd.js → diagram-S2PKOQOG-pULTY82u.js} +6 -6
  90. package/dist/server/assets/{erDiagram-Q2GNP2WA-CBpgZJNk.js → erDiagram-Q2GNP2WA-BB0T0Xnn.js} +4 -4
  91. package/dist/server/assets/{flowDiagram-NV44I4VS-DwqeGUt2.js → flowDiagram-NV44I4VS-DpODroRz.js} +5 -5
  92. package/dist/server/assets/{ganttDiagram-JELNMOA3-CSDzrG3u.js → ganttDiagram-JELNMOA3-Cv3UNeb8.js} +1 -1
  93. package/dist/server/assets/{gitGraph-G5XIXVHT-CI6QTqC-.js → gitGraph-G5XIXVHT-Gi_FOXtP.js} +6 -6
  94. package/dist/server/assets/{gitGraphDiagram-V2S2FVAM-4Hraf1YX.js → gitGraphDiagram-V2S2FVAM-BJPLdwXn.js} +7 -7
  95. package/dist/server/assets/{graph-BKeol0ik.js → graph-DZvAvEGU.js} +2 -2
  96. package/dist/server/assets/{highlighted-body-B3W2YXNL-C_Th2vxh.js → highlighted-body-B3W2YXNL-BpysDJ-x.js} +1 -1
  97. package/dist/server/assets/{index-BQEmg9fY.js → index-1E-3f8Qq.js} +1 -1
  98. package/dist/server/assets/{index-CoOBJObR.js → index-BERXawHP.js} +1 -1
  99. package/dist/server/assets/{index-B-VeeFTd.js → index-BN_8r_Ld.js} +1 -1
  100. package/dist/server/assets/{index-DOtn1sP2.js → index-C3lgs4G4.js} +1 -1
  101. package/dist/server/assets/{index-dS3n7bt3.js → index-CKDVINR-.js} +1 -1
  102. package/dist/server/assets/{index-KTMc95HN.js → index-CSCKMAKA.js} +1 -1
  103. package/dist/server/assets/{index-BtAQWAP4.js → index-ChLbrNFl.js} +1 -1
  104. package/dist/server/assets/{index-CklLNUhb.js → index-ChPBr3vZ.js} +1 -1
  105. package/dist/server/assets/{index-SeV-ZdZi.js → index-CzlCSrfR.js} +1 -1
  106. package/dist/server/assets/{index-CXm0C-yc.js → index-D1exxtRP.js} +1 -1
  107. package/dist/server/assets/{index-BVY32Ndh.js → index-U-1MZOIQ.js} +1 -1
  108. package/dist/server/assets/{index-BmH5PL3t.js → index-Y0CJ6FO8.js} +1 -1
  109. package/dist/server/assets/{index-WYUrghvu.js → index-iqainN_h.js} +1 -1
  110. package/dist/server/assets/{info-VBDWY6EO-qXtU7fls.js → info-VBDWY6EO-Ba8HLWBX.js} +6 -6
  111. package/dist/server/assets/{infoDiagram-HS3SLOUP-Bnhyc8dm.js → infoDiagram-HS3SLOUP-BYfrlW-j.js} +5 -5
  112. package/dist/server/assets/{journeyDiagram-XKPGCS4Q-DCeht2II.js → journeyDiagram-XKPGCS4Q-VV4qbZDl.js} +4 -4
  113. package/dist/server/assets/{kanban-definition-3W4ZIXB7-D2wyptyQ.js → kanban-definition-3W4ZIXB7-TtjjtFt_.js} +2 -2
  114. package/dist/server/assets/{layout-D8oV2IEs.js → layout-CxNf3z_2.js} +4 -4
  115. package/dist/server/assets/{mermaid-3ZIDBTTL-BLpPLDqd.js → mermaid-3ZIDBTTL-ChndXjXw.js} +1 -1
  116. package/dist/server/assets/{mermaid-parser.core-BbOvn3Uv.js → mermaid-parser.core-nvqu-aiP.js} +11 -11
  117. package/dist/server/assets/{mindmap-definition-VGOIOE7T-CKJkiH58.js → mindmap-definition-VGOIOE7T-DME5Y_pR.js} +3 -3
  118. package/dist/server/assets/{packet-DYOGHKS2-CnxepCEW.js → packet-DYOGHKS2-Bt1WHvgh.js} +6 -6
  119. package/dist/server/assets/{pie-VRWISCQL-KXauGON3.js → pie-VRWISCQL-WTXmin9S.js} +6 -6
  120. package/dist/server/assets/{pieDiagram-ADFJNKIX-B8juLdbl.js → pieDiagram-ADFJNKIX-CUbwYVab.js} +7 -7
  121. package/dist/server/assets/{quadrantDiagram-AYHSOK5B-CLY3QLCC.js → quadrantDiagram-AYHSOK5B-BB6u0IN3.js} +1 -1
  122. package/dist/server/assets/{radar-ZZBFDIW7-CIRaA_9T.js → radar-ZZBFDIW7-BWKvWMhz.js} +6 -6
  123. package/dist/server/assets/{requirementDiagram-UZGBJVZJ-CgDmK30l.js → requirementDiagram-UZGBJVZJ-BLRtjxGN.js} +3 -3
  124. package/dist/server/assets/{router-G1mE-O-Q.js → router-BjXwm096.js} +187 -129
  125. package/dist/server/assets/{sankeyDiagram-TZEHDZUN-B9355ZLW.js → sankeyDiagram-TZEHDZUN-BF1Ts-tv.js} +1 -1
  126. package/dist/server/assets/{sequenceDiagram-WL72ISMW-SyLdlVhU.js → sequenceDiagram-WL72ISMW-DB8euEl-.js} +3 -3
  127. package/dist/server/assets/{stateDiagram-FKZM4ZOC-B8krws9Z.js → stateDiagram-FKZM4ZOC-CgrYrlDa.js} +8 -8
  128. package/dist/server/assets/{stateDiagram-v2-4FDKWEC3-CqkUhCge.js → stateDiagram-v2-4FDKWEC3-Ch28pf2n.js} +4 -4
  129. package/dist/server/assets/{timeline-definition-IT6M3QCI-eG_EzXZg.js → timeline-definition-IT6M3QCI-jW-suedf.js} +2 -2
  130. package/dist/server/assets/{treemap-GDKQZRPO-DS3w9TMX.js → treemap-GDKQZRPO-ClNoljcd.js} +6 -6
  131. package/dist/server/assets/{workspace._workspaceId-DMYkHS43.js → workspace._workspaceId-CBpMR_kd.js} +1 -1
  132. package/dist/server/assets/{workspace._workspaceId-Bd4v7PwG.js → workspace._workspaceId-CD0MjjsK.js} +1 -1
  133. package/dist/server/assets/{xychartDiagram-PRI3JC2R-DAi7zkg3.js → xychartDiagram-PRI3JC2R-BKGpeSar.js} +1 -1
  134. package/dist/server/server.js +2 -2
  135. package/dist/start-server.mjs +279 -58
  136. package/package.json +4 -4
  137. package/dist/client/assets/channel-30zU4uX-.js +0 -1
  138. package/dist/client/assets/classDiagram-2ON5EDUG-xMXNI9Qc.js +0 -1
  139. package/dist/client/assets/classDiagram-v2-WZHVMYZB-xMXNI9Qc.js +0 -1
  140. package/dist/client/assets/clone-D1RDOFVG.js +0 -1
  141. package/dist/client/assets/main-C-PIkr2h.css +0 -1
  142. package/dist/client/assets/stateDiagram-v2-4FDKWEC3-DtnGHNEG.js +0 -1
  143. package/dist/server/assets/_tanstack-start-manifest_v-CGO9e_6B.js +0 -4
@@ -92313,11 +92313,17 @@ function notify(chatId) {
92313
92313
  }
92314
92314
  function cloneMessage(msg) {
92315
92315
  return {
92316
- id: msg.id,
92317
- text: msg.text,
92316
+ ...msg,
92318
92317
  files: msg.files ? msg.files.map((f2) => ({ ...f2 })) : void 0
92319
92318
  };
92320
92319
  }
92320
+ function turnOptions(input) {
92321
+ return {
92322
+ ...input.mode !== void 0 && { mode: input.mode },
92323
+ ...input.model !== void 0 && { model: input.model },
92324
+ ...input.codingAgentId !== void 0 && { codingAgentId: input.codingAgentId }
92325
+ };
92326
+ }
92321
92327
  function subscribeQueue(listener) {
92322
92328
  queueListeners.add(listener);
92323
92329
  return () => {
@@ -92328,7 +92334,8 @@ function pushQueuedMessage(chatId, input) {
92328
92334
  const message = {
92329
92335
  id: randomUUID(),
92330
92336
  text: input.text,
92331
- files: input.files && input.files.length > 0 ? input.files.map((f2) => ({ ...f2 })) : void 0
92337
+ files: input.files && input.files.length > 0 ? input.files.map((f2) => ({ ...f2 })) : void 0,
92338
+ ...turnOptions(input)
92332
92339
  };
92333
92340
  const msgs = store.get(chatId);
92334
92341
  if (msgs) {
@@ -92343,11 +92350,17 @@ function setQueuedMessages(chatId, messages) {
92343
92350
  if (messages.length === 0) {
92344
92351
  store.delete(chatId);
92345
92352
  } else {
92346
- const stored = messages.map((m3) => ({
92347
- id: m3.id ?? randomUUID(),
92348
- text: m3.text,
92349
- files: m3.files && m3.files.length > 0 ? m3.files.map((f2) => ({ ...f2 })) : void 0
92350
- }));
92353
+ const previous = new Map((store.get(chatId) ?? []).map((m3) => [m3.id, m3]));
92354
+ const stored = messages.map((m3) => {
92355
+ const kept = m3.id !== void 0 ? previous.get(m3.id) : void 0;
92356
+ return {
92357
+ id: m3.id ?? randomUUID(),
92358
+ text: m3.text,
92359
+ files: m3.files && m3.files.length > 0 ? m3.files.map((f2) => ({ ...f2 })) : void 0,
92360
+ ...kept && turnOptions(kept),
92361
+ ...turnOptions(m3)
92362
+ };
92363
+ });
92351
92364
  store.set(chatId, stored);
92352
92365
  }
92353
92366
  notify(chatId);
@@ -92355,6 +92368,13 @@ function setQueuedMessages(chatId, messages) {
92355
92368
  function getQueuedMessages(chatId) {
92356
92369
  return (store.get(chatId) ?? []).map(cloneMessage);
92357
92370
  }
92371
+ function hasQueuedMessages(chatId) {
92372
+ return (store.get(chatId)?.length ?? 0) > 0;
92373
+ }
92374
+ function peekQueuedMessage(chatId) {
92375
+ const first = store.get(chatId)?.[0];
92376
+ return first ? cloneMessage(first) : null;
92377
+ }
92358
92378
  function shiftQueuedMessage(chatId) {
92359
92379
  const msgs = store.get(chatId);
92360
92380
  if (!msgs || msgs.length === 0) return null;
@@ -107359,8 +107379,42 @@ var CLIENT_CAPABILITIES = {
107359
107379
  // Claude Code's AskUserQuestion arrives as a form elicitation, and is
107360
107380
  // disabled when the client can't render one.
107361
107381
  elicitation: { form: {} },
107362
- session: { notices: {} }
107363
- };
107382
+ session: { notices: {} },
107383
+ // JetBrains AIR extension: the Claude adapter reports background work
107384
+ // (background Bash, Monitor, workflows) as `async_task_*` updates only to
107385
+ // a client that lists `asyncTasks`. Band uses them to keep the process
107386
+ // alive while that work runs.
107387
+ _meta: { jetbrains: { air: { version: 1, capabilities: ["asyncTasks"] } } }
107388
+ };
107389
+ function asAsyncTaskNotification(message) {
107390
+ if (!message || typeof message !== "object") return null;
107391
+ const m3 = message;
107392
+ if (m3.method !== methods.client.session.update) return null;
107393
+ const params = m3.params;
107394
+ const update = params?.update;
107395
+ if (typeof params?.sessionId !== "string" || typeof update?.sessionUpdate !== "string" || !update.sessionUpdate.startsWith("async_task_") || typeof update.asyncTaskId !== "string") {
107396
+ return null;
107397
+ }
107398
+ return params;
107399
+ }
107400
+ function splitAsyncTasks(readable, onAsyncTask) {
107401
+ return readable.pipeThrough(
107402
+ new TransformStream({
107403
+ transform(message, controller) {
107404
+ const task = asAsyncTaskNotification(message);
107405
+ if (!task) {
107406
+ controller.enqueue(message);
107407
+ return;
107408
+ }
107409
+ try {
107410
+ onAsyncTask(task);
107411
+ } catch (err) {
107412
+ log.warn({ err }, "async task handler threw");
107413
+ }
107414
+ }
107415
+ })
107416
+ );
107417
+ }
107364
107418
  function stderrTail() {
107365
107419
  let buf = "";
107366
107420
  return {
@@ -107426,10 +107480,14 @@ var AcpAgentProcess = class _AcpAgentProcess {
107426
107480
  } catch (err) {
107427
107481
  throw new Error(`Could not start ${label}: ${err.message}`);
107428
107482
  }
107429
- const stream = ndJsonStream2(
107483
+ const wire = ndJsonStream2(
107430
107484
  Writable.toWeb(child.stdin),
107431
107485
  Readable.toWeb(child.stdout)
107432
107486
  );
107487
+ const stream = {
107488
+ writable: wire.writable,
107489
+ readable: splitAsyncTasks(wire.readable, (n) => handlers3.onAsyncTask?.(n))
107490
+ };
107433
107491
  const connection = client({ name: "band" }).onNotification(methods.client.session.update, (ctx) => {
107434
107492
  handlers3.onUpdate(ctx.params);
107435
107493
  }).onRequest(methods.client.session.requestPermission, async (ctx) => ({
@@ -107801,11 +107859,11 @@ function resumeCliInvocation(agentType, sessionId, opts) {
107801
107859
  var CLAUDE_CODE_INTERACTIVE_TOOLS = /* @__PURE__ */ new Set(["AskUserQuestion", "ExitPlanMode"]);
107802
107860
  function mapClaudeCodeHookStatus(payload) {
107803
107861
  const hookEvent = typeof payload.hook_event_name === "string" ? payload.hook_event_name : "";
107804
- const toolName = typeof payload.tool_name === "string" ? payload.tool_name : "";
107862
+ const toolName2 = typeof payload.tool_name === "string" ? payload.tool_name : "";
107805
107863
  if (hookEvent === "Stop") {
107806
107864
  return "needs_attention";
107807
107865
  }
107808
- if ((hookEvent === "PreToolUse" || hookEvent === "PermissionRequest") && CLAUDE_CODE_INTERACTIVE_TOOLS.has(toolName)) {
107866
+ if ((hookEvent === "PreToolUse" || hookEvent === "PermissionRequest") && CLAUDE_CODE_INTERACTIVE_TOOLS.has(toolName2)) {
107809
107867
  return "needs_attention";
107810
107868
  }
107811
107869
  return "working";
@@ -116936,6 +116994,101 @@ var ChatEventQueries = class {
116936
116994
  }
116937
116995
  };
116938
116996
 
116997
+ // src/server/services/_utils/agent-pending-work.ts
116998
+ var MAX_HOLD_MS = 8 * 60 * 6e4;
116999
+ var MONITOR_DEFAULT_TIMEOUT_MS = 5 * 6e4;
117000
+ function toolName(update) {
117001
+ const meta2 = update._meta;
117002
+ const name3 = meta2?.claudeCode?.toolName ?? update.name;
117003
+ return typeof name3 === "string" ? name3 : void 0;
117004
+ }
117005
+ function finiteNumber(value) {
117006
+ return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : void 0;
117007
+ }
117008
+ var PendingWork = class {
117009
+ holds = /* @__PURE__ */ new Map();
117010
+ /** Tool calls an async task was announced for. */
117011
+ taskToolCalls = /* @__PURE__ */ new Set();
117012
+ /** Notes what a `session/update` starts or ends. `inTurn` is whether a
117013
+ * Band-started turn is running. */
117014
+ observeUpdate(update, inTurn, now = Date.now()) {
117015
+ if (update.sessionUpdate !== "tool_call" && update.sessionUpdate !== "tool_call_update") return;
117016
+ const key2 = `tool:${update.toolCallId}`;
117017
+ if (this.taskToolCalls.has(update.toolCallId)) return;
117018
+ if (update.status === "failed") {
117019
+ this.holds.delete(key2);
117020
+ return;
117021
+ }
117022
+ const held = this.holds.get(key2);
117023
+ if (update.status === "completed") {
117024
+ if (held?.untilCompleted) this.holds.delete(key2);
117025
+ return;
117026
+ }
117027
+ if (held) return;
117028
+ const hold = this.toolHold(update, now);
117029
+ if (hold) {
117030
+ this.set(key2, hold, now);
117031
+ return;
117032
+ }
117033
+ if (!inTurn && update.sessionUpdate === "tool_call") {
117034
+ this.set(key2, { reason: "tool call", until: now + MAX_HOLD_MS, untilCompleted: true }, now);
117035
+ }
117036
+ }
117037
+ /** Notes an AIR async task starting or ending. */
117038
+ observeAsyncTask(update, now = Date.now()) {
117039
+ const key2 = `task:${update.asyncTaskId}`;
117040
+ if (update.sessionUpdate === "async_task_spawned") {
117041
+ if (update.toolCallId) {
117042
+ this.taskToolCalls.add(update.toolCallId);
117043
+ this.holds.delete(`tool:${update.toolCallId}`);
117044
+ }
117045
+ this.set(
117046
+ key2,
117047
+ { reason: `${update.taskType ?? "background"} task`, until: now + MAX_HOLD_MS },
117048
+ now
117049
+ );
117050
+ } else if (update.sessionUpdate === "async_task_state_update" && (update.state === "completed" || update.state === "failed" || update.state === "stopped")) {
117051
+ this.holds.delete(key2);
117052
+ if (update.toolCallId) this.holds.delete(`tool:${update.toolCallId}`);
117053
+ }
117054
+ }
117055
+ /** The holds still in force, dropping the ones that lapsed. */
117056
+ outstanding(now = Date.now()) {
117057
+ for (const [key2, hold] of this.holds) {
117058
+ if (hold.until <= now) this.holds.delete(key2);
117059
+ }
117060
+ return [...this.holds.values()];
117061
+ }
117062
+ clear() {
117063
+ this.holds.clear();
117064
+ this.taskToolCalls.clear();
117065
+ }
117066
+ toolHold(update, now) {
117067
+ const input = update.rawInput;
117068
+ if (!input || typeof input !== "object") return null;
117069
+ switch (toolName(update)) {
117070
+ case "ScheduleWakeup": {
117071
+ const delaySeconds = finiteNumber(input.delaySeconds);
117072
+ return delaySeconds === void 0 ? null : { reason: "scheduled wakeup", until: now + delaySeconds * 1e3 };
117073
+ }
117074
+ case "CronCreate":
117075
+ return { reason: "cron job", until: now + MAX_HOLD_MS };
117076
+ case "Monitor": {
117077
+ const timeout = finiteNumber(input.timeout_ms) ?? MONITOR_DEFAULT_TIMEOUT_MS;
117078
+ return { reason: "monitor", until: now + timeout };
117079
+ }
117080
+ case "Bash":
117081
+ case "PowerShell":
117082
+ return input.run_in_background === true ? { reason: "background command", until: now + MAX_HOLD_MS, untilCompleted: true } : null;
117083
+ default:
117084
+ return null;
117085
+ }
117086
+ }
117087
+ set(key2, hold, now) {
117088
+ this.holds.set(key2, { ...hold, until: Math.min(hold.until, now + MAX_HOLD_MS) });
117089
+ }
117090
+ };
117091
+
116939
117092
  // src/server/services/_utils/chat-log-replay.ts
116940
117093
  function textChunk(row) {
116941
117094
  const event = row.event;
@@ -145503,6 +145656,25 @@ function submitTask(options2) {
145503
145656
  });
145504
145657
  return toTaskInfo(task);
145505
145658
  }
145659
+ function submitOrQueueTask(options2) {
145660
+ const { workspaceId: workspaceId2, chatId } = options2;
145661
+ if (!workspaceService.resolve(workspaceId2)) {
145662
+ throw new WorkspaceNotFoundError(workspaceId2);
145663
+ }
145664
+ const running = tasks2.get(chatId)?.status === "running";
145665
+ if (!running && !hasQueuedMessages(chatId)) {
145666
+ return { queued: false, task: submitTask(options2) };
145667
+ }
145668
+ const queued = pushQueuedMessage(chatId, {
145669
+ text: options2.prompt,
145670
+ files: options2.attachments,
145671
+ mode: options2.mode,
145672
+ model: options2.model,
145673
+ codingAgentId: options2.codingAgentId
145674
+ });
145675
+ if (!running) drainQueue(workspaceId2, chatId);
145676
+ return { queued: true, queuedMessageId: queued.id };
145677
+ }
145506
145678
  async function runTask(task) {
145507
145679
  const { chatId } = task;
145508
145680
  chatService.updateStatus(chatId, "running");
@@ -145632,7 +145804,7 @@ function finishTask(task, outcome) {
145632
145804
  task.completedAt = Date.now();
145633
145805
  persistTask(task);
145634
145806
  if (tasks2.get(task.chatId) === task) tasks2.delete(task.chatId);
145635
- if (status === "completed" && drainQueue(task)) return;
145807
+ if (status === "completed" && drainQueue(task.workspaceId, task.chatId)) return;
145636
145808
  chatService.updateStatus(task.chatId, status === "completed" ? "idle" : "error");
145637
145809
  const stopped = outcome === "cancelled" || task.cancelRequested === true;
145638
145810
  const updated = setWorkspaceSourceStatus(task.workspaceId, chatStatusSource(task.chatId), {
@@ -145640,20 +145812,24 @@ function finishTask(task, outcome) {
145640
145812
  });
145641
145813
  emit({ kind: "update", status: updated });
145642
145814
  }
145643
- function drainQueue(task) {
145644
- const queued = shiftQueuedMessage(task.chatId);
145815
+ function drainQueue(workspaceId2, chatId) {
145816
+ const queued = peekQueuedMessage(chatId);
145645
145817
  if (!queued) return false;
145646
145818
  try {
145647
145819
  const attachments = (queued.files ?? []).filter((f2) => f2.path).map((f2) => ({ path: f2.path, mediaType: f2.mediaType, url: f2.url, filename: f2.filename }));
145648
145820
  submitTask({
145649
- workspaceId: task.workspaceId,
145650
- chatId: task.chatId,
145821
+ workspaceId: workspaceId2,
145822
+ chatId,
145651
145823
  prompt: queued.text,
145652
- attachments
145824
+ attachments,
145825
+ mode: queued.mode,
145826
+ model: queued.model,
145827
+ codingAgentId: queued.codingAgentId
145653
145828
  });
145829
+ removeQueuedMessage(chatId, queued.id);
145654
145830
  return true;
145655
145831
  } catch (err) {
145656
- log19.warn({ chatId: task.chatId, err }, "failed to auto-start queued task");
145832
+ log19.warn({ chatId, err }, "failed to auto-start queued task");
145657
145833
  return false;
145658
145834
  }
145659
145835
  }
@@ -145700,6 +145876,9 @@ var TaskService = class {
145700
145876
  submitTask(options2) {
145701
145877
  return submitTask(options2);
145702
145878
  }
145879
+ submitOrQueueTask(options2) {
145880
+ return submitOrQueueTask(options2);
145881
+ }
145703
145882
  abortTask(chatId) {
145704
145883
  return abortTask(chatId);
145705
145884
  }
@@ -149584,6 +149763,7 @@ var chatService = new ChatService();
149584
149763
  var log31 = createLogger("agent-sessions");
149585
149764
  var IDLE_TIMEOUT_MS = 15 * 6e4;
149586
149765
  var CANCEL_GRACE_MS = 15e3;
149766
+ var MAX_TIMER_MS = 2 ** 31 - 1;
149587
149767
  var PROBE_SETTLE_MS = 1500;
149588
149768
  var events = new ChatEventQueries();
149589
149769
  var settings = new SettingsQueries();
@@ -149662,6 +149842,7 @@ function runtimeFor(chat, def2) {
149662
149842
  turnSeq: 0,
149663
149843
  live: emptyLive(),
149664
149844
  pending: /* @__PURE__ */ new Map(),
149845
+ work: new PendingWork(),
149665
149846
  idleTimer: null,
149666
149847
  claudeCli: null
149667
149848
  };
@@ -149677,19 +149858,41 @@ function stopRuntime(rt) {
149677
149858
  rt.sessionId = null;
149678
149859
  runtimes.delete(rt.chatId);
149679
149860
  }
149680
- function scheduleIdle(rt) {
149861
+ function idleTimeoutMs() {
149862
+ const override = Number(process.env.BAND_AGENT_IDLE_TIMEOUT_MS);
149863
+ return Number.isFinite(override) && override > 0 ? override : IDLE_TIMEOUT_MS;
149864
+ }
149865
+ function scheduleIdle(rt, delayMs = idleTimeoutMs()) {
149681
149866
  if (rt.idleTimer) clearTimeout(rt.idleTimer);
149867
+ const delay2 = Math.min(delayMs, MAX_TIMER_MS);
149682
149868
  rt.idleTimer = setTimeout(() => {
149683
149869
  rt.idleTimer = null;
149684
149870
  if (rt.inTurn || rt.pending.size > 0 || rt.attaching) return;
149871
+ const now = Date.now();
149872
+ const holds = rt.work.outstanding(now);
149873
+ if (holds.length > 0) {
149874
+ const until = Math.max(...holds.map((h) => h.until));
149875
+ log31.info(
149876
+ {
149877
+ chatId: rt.chatId,
149878
+ work: holds.map((h) => ({ reason: h.reason, until: new Date(h.until).toISOString() }))
149879
+ },
149880
+ "idle agent has pending work; not stopping it"
149881
+ );
149882
+ scheduleIdle(rt, until - now + idleTimeoutMs());
149883
+ return;
149884
+ }
149685
149885
  log31.info({ chatId: rt.chatId }, "stopping idle agent");
149686
149886
  rt.process?.close();
149687
149887
  rt.process = null;
149688
149888
  rt.sessionId = null;
149689
149889
  if (runtimes.get(rt.chatId) === rt) runtimes.delete(rt.chatId);
149690
- }, IDLE_TIMEOUT_MS);
149890
+ }, delay2);
149691
149891
  rt.idleTimer.unref?.();
149692
149892
  }
149893
+ function agentActive(rt) {
149894
+ if (!rt.inTurn && !rt.attaching && rt.process) scheduleIdle(rt);
149895
+ }
149693
149896
  function record2(rt, event, turnStart = false) {
149694
149897
  if (!rt.sessionId) {
149695
149898
  broadcastTransient(rt.chatId, event);
@@ -149805,6 +150008,10 @@ function routeUpdate(rt, notification) {
149805
150008
  }
149806
150009
  const update = notification.update;
149807
150010
  applyLive(rt, update);
150011
+ if (!rt.attaching) {
150012
+ rt.work.observeUpdate(update, rt.inTurn);
150013
+ agentActive(rt);
150014
+ }
149808
150015
  if (rt.routing === "drop") return;
149809
150016
  if (update.sessionUpdate === "user_message_chunk") {
149810
150017
  if (rt.inTurn) return;
@@ -149875,6 +150082,11 @@ function requestElicitation(rt, request, signal) {
149875
150082
  function handlersFor(rt, generation) {
149876
150083
  return {
149877
150084
  onUpdate: (n) => routeUpdate(rt, n),
150085
+ onAsyncTask: (n) => {
150086
+ if (n.sessionId !== rt.sessionId || rt.attaching) return;
150087
+ rt.work.observeAsyncTask(n.update);
150088
+ agentActive(rt);
150089
+ },
149878
150090
  onPermission: (req, signal) => requestPermission(rt, req, signal),
149879
150091
  onElicitation: (req, signal) => requestElicitation(rt, req, signal),
149880
150092
  onExit: (code, stderr) => {
@@ -149882,6 +150094,7 @@ function handlersFor(rt, generation) {
149882
150094
  log31.info({ chatId: rt.chatId, code }, "agent exited");
149883
150095
  log31.debug({ chatId: rt.chatId, stderr: stderr.slice(-500) }, "agent stderr");
149884
150096
  for (const p3 of [...rt.pending.values()]) p3.cancel();
150097
+ rt.work.clear();
149885
150098
  rt.process = null;
149886
150099
  rt.starting = null;
149887
150100
  }
@@ -150844,7 +151057,7 @@ async function handleChatSubmit(req, res, chatId) {
150844
151057
  }));
150845
151058
  }
150846
151059
  try {
150847
- taskService.submitTask({
151060
+ const result = taskService.submitOrQueueTask({
150848
151061
  workspaceId: workspaceId2,
150849
151062
  chatId,
150850
151063
  prompt: text3,
@@ -150854,18 +151067,12 @@ async function handleChatSubmit(req, res, chatId) {
150854
151067
  model,
150855
151068
  codingAgentId
150856
151069
  });
150857
- log33.info({ chatId, workspaceId: workspaceId2 }, "chat-submit: task started");
150858
- sendJson2(res, 200, { ok: true, queued: false });
151070
+ log33.info(
151071
+ { chatId, workspaceId: workspaceId2 },
151072
+ result.queued ? "chat-submit: chat busy, message queued" : "chat-submit: task started"
151073
+ );
151074
+ sendJson2(res, 200, { ok: true, queued: result.queued });
150859
151075
  } catch (err) {
150860
- if (err instanceof TaskConflictError) {
150861
- pushQueuedMessage(chatId, {
150862
- text: text3,
150863
- ...attachments.length > 0 && { files: attachments }
150864
- });
150865
- log33.info({ chatId, workspaceId: workspaceId2 }, "chat-submit: task busy, message queued");
150866
- sendJson2(res, 200, { ok: true, queued: true });
150867
- return;
150868
- }
150869
151076
  if (err instanceof WorkspaceNotFoundError) {
150870
151077
  sendJson2(res, 404, { error: err.message });
150871
151078
  return;
@@ -155807,7 +156014,7 @@ var McpServer = class {
155807
156014
  /**
155808
156015
  * Validates tool input arguments against the tool's input schema.
155809
156016
  */
155810
- async validateToolInput(tool, args, toolName) {
156017
+ async validateToolInput(tool, args, toolName2) {
155811
156018
  if (!tool.inputSchema) {
155812
156019
  return void 0;
155813
156020
  }
@@ -155817,14 +156024,14 @@ var McpServer = class {
155817
156024
  if (!parseResult.success) {
155818
156025
  const error40 = "error" in parseResult ? parseResult.error : "Unknown error";
155819
156026
  const errorMessage = getParseErrorMessage(error40);
155820
- throw new McpError(ErrorCode.InvalidParams, `Input validation error: Invalid arguments for tool ${toolName}: ${errorMessage}`);
156027
+ throw new McpError(ErrorCode.InvalidParams, `Input validation error: Invalid arguments for tool ${toolName2}: ${errorMessage}`);
155821
156028
  }
155822
156029
  return parseResult.data;
155823
156030
  }
155824
156031
  /**
155825
156032
  * Validates tool output against the tool's output schema.
155826
156033
  */
155827
- async validateToolOutput(tool, result, toolName) {
156034
+ async validateToolOutput(tool, result, toolName2) {
155828
156035
  if (!tool.outputSchema) {
155829
156036
  return;
155830
156037
  }
@@ -155835,14 +156042,14 @@ var McpServer = class {
155835
156042
  return;
155836
156043
  }
155837
156044
  if (!result.structuredContent) {
155838
- throw new McpError(ErrorCode.InvalidParams, `Output validation error: Tool ${toolName} has an output schema but no structured content was provided`);
156045
+ throw new McpError(ErrorCode.InvalidParams, `Output validation error: Tool ${toolName2} has an output schema but no structured content was provided`);
155839
156046
  }
155840
156047
  const outputObj = normalizeObjectSchema(tool.outputSchema);
155841
156048
  const parseResult = await safeParseAsync3(outputObj, result.structuredContent);
155842
156049
  if (!parseResult.success) {
155843
156050
  const error40 = "error" in parseResult ? parseResult.error : "Unknown error";
155844
156051
  const errorMessage = getParseErrorMessage(error40);
155845
- throw new McpError(ErrorCode.InvalidParams, `Output validation error: Invalid structured content for tool ${toolName}: ${errorMessage}`);
156052
+ throw new McpError(ErrorCode.InvalidParams, `Output validation error: Invalid structured content for tool ${toolName2}: ${errorMessage}`);
155846
156053
  }
155847
156054
  }
155848
156055
  /**
@@ -158627,23 +158834,25 @@ var chatsRouter = t3.router({
158627
158834
  if (!chat) {
158628
158835
  chat = chatService.create(input.workspaceId, { id: input.chatId, name: "Chat" });
158629
158836
  }
158630
- try {
158631
- const task = taskService.submitTask({
158632
- workspaceId: chat.workspaceId,
158633
- chatId: chat.id,
158634
- prompt: input.message,
158635
- sessionId: input.sessionId
158636
- });
158637
- return { taskId: task.id, sessionId: task.sessionId };
158638
- } catch (err) {
158639
- if (err instanceof TaskConflictError) {
158640
- throw new TRPCError({
158641
- code: "CONFLICT",
158642
- message: "Task already running for this chat pane"
158643
- });
158644
- }
158645
- throw err;
158837
+ const result = taskService.submitOrQueueTask({
158838
+ workspaceId: chat.workspaceId,
158839
+ chatId: chat.id,
158840
+ prompt: input.message,
158841
+ sessionId: input.sessionId
158842
+ });
158843
+ if (result.queued) {
158844
+ return {
158845
+ queued: true,
158846
+ queuedMessageId: result.queuedMessageId,
158847
+ taskId: null,
158848
+ sessionId: null
158849
+ };
158646
158850
  }
158851
+ return {
158852
+ queued: false,
158853
+ taskId: result.task.id,
158854
+ sessionId: result.task.sessionId
158855
+ };
158647
158856
  }),
158648
158857
  stop: publicProcedure.input(external_exports2.object({ chatId: external_exports2.string() })).mutation(({ input }) => {
158649
158858
  taskService.abortTask(input.chatId);
@@ -162148,7 +162357,7 @@ var tasksRouter = t3.router({
162148
162357
  }));
162149
162358
  }
162150
162359
  try {
162151
- const task = taskService.submitTask({
162360
+ const result = taskService.submitOrQueueTask({
162152
162361
  workspaceId: input.workspaceId,
162153
162362
  chatId,
162154
162363
  prompt: input.prompt,
@@ -162158,7 +162367,19 @@ var tasksRouter = t3.router({
162158
162367
  model: input.model,
162159
162368
  codingAgentId: input.codingAgentId
162160
162369
  });
162370
+ if (result.queued) {
162371
+ return {
162372
+ queued: true,
162373
+ id: null,
162374
+ queuedMessageId: result.queuedMessageId,
162375
+ workspaceId: input.workspaceId,
162376
+ chatId,
162377
+ sessionId: null
162378
+ };
162379
+ }
162380
+ const { task } = result;
162161
162381
  return {
162382
+ queued: false,
162162
162383
  id: task.id,
162163
162384
  workspaceId: task.workspaceId,
162164
162385
  chatId: task.chatId,
@@ -164993,10 +165214,10 @@ function discoverProcedures() {
164993
165214
  for (const [path, procedure] of Object.entries(procRecord)) {
164994
165215
  const type = procedure._def.type;
164995
165216
  if (type === "subscription") continue;
164996
- const toolName = `band_${path.replace(/\./g, "_")}`;
165217
+ const toolName2 = `band_${path.replace(/\./g, "_")}`;
164997
165218
  const inputs = procedure._def.inputs;
164998
165219
  const inputSchema = inputs.length > 0 ? inputs[0] : void 0;
164999
- procedures.push({ path, toolName, type, inputSchema });
165220
+ procedures.push({ path, toolName: toolName2, type, inputSchema });
165000
165221
  }
165001
165222
  return procedures;
165002
165223
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@band-app/server",
3
- "version": "0.37.0",
3
+ "version": "0.38.0",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "band-server": "./bin/band-server.mjs"
@@ -127,11 +127,11 @@
127
127
  "ws": "^8.18.0",
128
128
  "zod": "^3.25.67",
129
129
  "zustand": "^5.0.0",
130
- "@band-app/coding-agent": "^0.37.0",
131
- "@band-app/logger": "^0.37.0",
130
+ "@band-app/coding-agent": "^0.38.0",
131
+ "@band-app/logger": "^0.38.0",
132
132
  "@band-app/plugin-api": "^0.1.0",
133
133
  "@band-app/plugin-github": "^0.1.0",
134
- "@band-app/ui": "^0.37.0"
134
+ "@band-app/ui": "^0.38.0"
135
135
  },
136
136
  "scripts": {
137
137
  "dev": "NODE_ENV=development tsx watch start-server.ts",
@@ -1 +0,0 @@
1
- import{Y as a,Z as n}from"./main-D7maoxCk.js";const t=(r,o)=>a.lang.round(n.parse(r)[o]);export{t as c};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-B4BG7PRW-Bd2C6K3g.js";import{_ as i}from"./main-D7maoxCk.js";import"./chunk-FMBD7UC4-CSFx-rdE.js";import"./chunk-55IACEB6-N8w7W4nW.js";import"./chunk-QN33PNHL-OZhPV9ZW.js";var p={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{p as diagram};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-B4BG7PRW-Bd2C6K3g.js";import{_ as i}from"./main-D7maoxCk.js";import"./chunk-FMBD7UC4-CSFx-rdE.js";import"./chunk-55IACEB6-N8w7W4nW.js";import"./chunk-QN33PNHL-OZhPV9ZW.js";var p={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{p as diagram};
@@ -1 +0,0 @@
1
- import{b as r}from"./_baseUniq-D9VK2Z8h.js";var e=4;function a(o){return r(o,e)}export{a as c};