@arbidocs/blocks 0.5.107 → 0.5.108

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 (341) hide show
  1. package/dist/{ConnectedCallDock-TDYRHPAK.js → ConnectedCallDock-DV4FU376.js} +8 -8
  2. package/dist/{ConnectedCallDock-TDYRHPAK.js.map → ConnectedCallDock-DV4FU376.js.map} +1 -1
  3. package/dist/{ConnectedCallDock-H3WWFGXF.cjs → ConnectedCallDock-EM2VVGZK.cjs} +10 -10
  4. package/dist/{ConnectedCallDock-H3WWFGXF.cjs.map → ConnectedCallDock-EM2VVGZK.cjs.map} +1 -1
  5. package/dist/{ConnectedCallRoom-55O5OUN7.cjs → ConnectedCallRoom-7WEPEWUJ.cjs} +9 -9
  6. package/dist/{ConnectedCallRoom-55O5OUN7.cjs.map → ConnectedCallRoom-7WEPEWUJ.cjs.map} +1 -1
  7. package/dist/{ConnectedCallRoom-Z6F6WCLH.js → ConnectedCallRoom-RYTZP34O.js} +8 -8
  8. package/dist/{ConnectedCallRoom-Z6F6WCLH.js.map → ConnectedCallRoom-RYTZP34O.js.map} +1 -1
  9. package/dist/{ConnectedNativeDocxComparison-NVZRVNOS.js → ConnectedNativeDocxComparison-2NDXXZLQ.js} +15 -15
  10. package/dist/{ConnectedNativeDocxComparison-NVZRVNOS.js.map → ConnectedNativeDocxComparison-2NDXXZLQ.js.map} +1 -1
  11. package/dist/{ConnectedNativeDocxComparison-DGBZJ4XA.cjs → ConnectedNativeDocxComparison-7HOY3AVI.cjs} +16 -16
  12. package/dist/{ConnectedNativeDocxComparison-DGBZJ4XA.cjs.map → ConnectedNativeDocxComparison-7HOY3AVI.cjs.map} +1 -1
  13. package/dist/{ConnectedNativeDocxEditor-R4WINUUB.cjs → ConnectedNativeDocxEditor-CUWDPHXN.cjs} +16 -16
  14. package/dist/{ConnectedNativeDocxEditor-R4WINUUB.cjs.map → ConnectedNativeDocxEditor-CUWDPHXN.cjs.map} +1 -1
  15. package/dist/{ConnectedNativeDocxEditor-RSVBN7DY.js → ConnectedNativeDocxEditor-SPZB6Y27.js} +14 -14
  16. package/dist/{ConnectedNativeDocxEditor-RSVBN7DY.js.map → ConnectedNativeDocxEditor-SPZB6Y27.js.map} +1 -1
  17. package/dist/{ConnectedProductionSetDialog-2DFBXE2X.js → ConnectedProductionSetDialog-N3EDG3SU.js} +4 -4
  18. package/dist/{ConnectedProductionSetDialog-2DFBXE2X.js.map → ConnectedProductionSetDialog-N3EDG3SU.js.map} +1 -1
  19. package/dist/{ConnectedProductionSetDialog-KYDPQ7SG.cjs → ConnectedProductionSetDialog-XAEFEN3N.cjs} +4 -4
  20. package/dist/{ConnectedProductionSetDialog-KYDPQ7SG.cjs.map → ConnectedProductionSetDialog-XAEFEN3N.cjs.map} +1 -1
  21. package/dist/{ConnectedStreamedWordArtifact-HLJ5IIOU.js → ConnectedStreamedWordArtifact-6LTGEAJO.js} +15 -15
  22. package/dist/ConnectedStreamedWordArtifact-6LTGEAJO.js.map +1 -0
  23. package/dist/{ConnectedStreamedWordArtifact-JQ34AOUU.cjs → ConnectedStreamedWordArtifact-HNCRKZTV.cjs} +16 -16
  24. package/dist/ConnectedStreamedWordArtifact-HNCRKZTV.cjs.map +1 -0
  25. package/dist/{DocumentReviewCard-7JSXRJZ2.js → DocumentReviewCard-RJD3CO32.js} +8 -8
  26. package/dist/{DocumentReviewCard-7JSXRJZ2.js.map → DocumentReviewCard-RJD3CO32.js.map} +1 -1
  27. package/dist/{DocumentReviewCard-C4HVT3WM.cjs → DocumentReviewCard-VON7LOOY.cjs} +8 -8
  28. package/dist/{DocumentReviewCard-C4HVT3WM.cjs.map → DocumentReviewCard-VON7LOOY.cjs.map} +1 -1
  29. package/dist/{FilesViewerDialog-IMQTZWKD.js → FilesViewerDialog-7SJGY72Q.js} +21 -21
  30. package/dist/{FilesViewerDialog-IMQTZWKD.js.map → FilesViewerDialog-7SJGY72Q.js.map} +1 -1
  31. package/dist/{FilesViewerDialog-UP7GFHYN.cjs → FilesViewerDialog-VIPTC6OT.cjs} +27 -27
  32. package/dist/{FilesViewerDialog-UP7GFHYN.cjs.map → FilesViewerDialog-VIPTC6OT.cjs.map} +1 -1
  33. package/dist/{RechartsRenderer-GIRCW7DB.cjs → RechartsRenderer-THES2SE5.cjs} +6 -5
  34. package/dist/RechartsRenderer-THES2SE5.cjs.map +1 -0
  35. package/dist/{RechartsRenderer-23OF4H6X.js → RechartsRenderer-XIZLV6GH.js} +6 -5
  36. package/dist/RechartsRenderer-XIZLV6GH.js.map +1 -0
  37. package/dist/{WorkspaceTableView-PJM47B5F.cjs → WorkspaceTableView-FNME7TL6.cjs} +9 -9
  38. package/dist/{WorkspaceTableView-PJM47B5F.cjs.map → WorkspaceTableView-FNME7TL6.cjs.map} +1 -1
  39. package/dist/{WorkspaceTableView-YDA7A4UJ.js → WorkspaceTableView-XQ6J2JKI.js} +7 -7
  40. package/dist/{WorkspaceTableView-YDA7A4UJ.js.map → WorkspaceTableView-XQ6J2JKI.js.map} +1 -1
  41. package/dist/agents/index.cjs +202 -202
  42. package/dist/agents/index.js +8 -8
  43. package/dist/{ai-ADS6YSS2.cjs → ai-3SAMEYBB.cjs} +20 -20
  44. package/dist/ai-3SAMEYBB.cjs.map +1 -0
  45. package/dist/{ai-KHWTGBT5.js → ai-OTQWSYVK.js} +12 -12
  46. package/dist/ai-OTQWSYVK.js.map +1 -0
  47. package/dist/calls/index.cjs +57 -57
  48. package/dist/calls/index.js +9 -9
  49. package/dist/chat/index.cjs +3 -3
  50. package/dist/chat/index.js +3 -3
  51. package/dist/{chunk-O27K7KTZ.cjs → chunk-2TBQBF4Y.cjs} +5 -5
  52. package/dist/{chunk-O27K7KTZ.cjs.map → chunk-2TBQBF4Y.cjs.map} +1 -1
  53. package/dist/{chunk-YJWAGXYM.js → chunk-4ZA2RSQH.js} +3 -3
  54. package/dist/{chunk-YJWAGXYM.js.map → chunk-4ZA2RSQH.js.map} +1 -1
  55. package/dist/{chunk-6A4GNM4T.cjs → chunk-5D2ZINOJ.cjs} +16 -16
  56. package/dist/{chunk-6A4GNM4T.cjs.map → chunk-5D2ZINOJ.cjs.map} +1 -1
  57. package/dist/{chunk-BFVCYBND.cjs → chunk-5HXQOM3I.cjs} +5 -5
  58. package/dist/{chunk-BFVCYBND.cjs.map → chunk-5HXQOM3I.cjs.map} +1 -1
  59. package/dist/{chunk-GSD5U553.cjs → chunk-5KKT65WU.cjs} +3 -3
  60. package/dist/{chunk-GSD5U553.cjs.map → chunk-5KKT65WU.cjs.map} +1 -1
  61. package/dist/{chunk-AVGHTUPE.js → chunk-5PWLXLHY.js} +5 -5
  62. package/dist/chunk-5PWLXLHY.js.map +1 -0
  63. package/dist/{chunk-BBWLFK3C.js → chunk-5XIMUQ63.js} +3 -3
  64. package/dist/{chunk-BBWLFK3C.js.map → chunk-5XIMUQ63.js.map} +1 -1
  65. package/dist/{chunk-AHMRYY7J.cjs → chunk-6DAJXQZZ.cjs} +13 -13
  66. package/dist/{chunk-AHMRYY7J.cjs.map → chunk-6DAJXQZZ.cjs.map} +1 -1
  67. package/dist/{chunk-3PV25ICC.js → chunk-6KKVJ2V6.js} +3 -3
  68. package/dist/{chunk-3PV25ICC.js.map → chunk-6KKVJ2V6.js.map} +1 -1
  69. package/dist/{chunk-OLAYDOPC.js → chunk-6LUHNFEE.js} +6 -6
  70. package/dist/{chunk-OLAYDOPC.js.map → chunk-6LUHNFEE.js.map} +1 -1
  71. package/dist/{chunk-FSXQHEFQ.cjs → chunk-7CDV7Y4U.cjs} +25 -25
  72. package/dist/{chunk-FSXQHEFQ.cjs.map → chunk-7CDV7Y4U.cjs.map} +1 -1
  73. package/dist/{chunk-OAIOOVFN.cjs → chunk-7SJXYEZI.cjs} +36 -36
  74. package/dist/chunk-7SJXYEZI.cjs.map +1 -0
  75. package/dist/{chunk-LFYKB7KF.cjs → chunk-7V6APLF7.cjs} +19 -19
  76. package/dist/{chunk-LFYKB7KF.cjs.map → chunk-7V6APLF7.cjs.map} +1 -1
  77. package/dist/{chunk-4WMGFGYP.cjs → chunk-AJZ66VJC.cjs} +4 -4
  78. package/dist/{chunk-4WMGFGYP.cjs.map → chunk-AJZ66VJC.cjs.map} +1 -1
  79. package/dist/{chunk-KCP42W67.cjs → chunk-ARGQ5YZ5.cjs} +3 -3
  80. package/dist/{chunk-KCP42W67.cjs.map → chunk-ARGQ5YZ5.cjs.map} +1 -1
  81. package/dist/{chunk-BH6IKGZ3.js → chunk-AUAHGQY6.js} +5 -5
  82. package/dist/{chunk-BH6IKGZ3.js.map → chunk-AUAHGQY6.js.map} +1 -1
  83. package/dist/{chunk-KIXFXCHL.js → chunk-CEOCA7ID.js} +3 -3
  84. package/dist/{chunk-KIXFXCHL.js.map → chunk-CEOCA7ID.js.map} +1 -1
  85. package/dist/{chunk-TNKPQ3EF.js → chunk-CIRSOYGK.js} +12 -12
  86. package/dist/{chunk-TNKPQ3EF.js.map → chunk-CIRSOYGK.js.map} +1 -1
  87. package/dist/{chunk-BAUZUIHB.js → chunk-COL2TJGO.js} +83 -83
  88. package/dist/chunk-COL2TJGO.js.map +1 -0
  89. package/dist/{chunk-XHN5KOI2.cjs → chunk-DRLD4P2C.cjs} +8 -8
  90. package/dist/{chunk-XHN5KOI2.cjs.map → chunk-DRLD4P2C.cjs.map} +1 -1
  91. package/dist/{chunk-5AC52BHL.cjs → chunk-DYPFNQTQ.cjs} +140 -140
  92. package/dist/chunk-DYPFNQTQ.cjs.map +1 -0
  93. package/dist/{chunk-SCLGUHLU.cjs → chunk-E7TGSOPR.cjs} +4 -4
  94. package/dist/{chunk-SCLGUHLU.cjs.map → chunk-E7TGSOPR.cjs.map} +1 -1
  95. package/dist/{chunk-CRLFLMTK.cjs → chunk-EOXA4VJH.cjs} +3 -3
  96. package/dist/{chunk-CRLFLMTK.cjs.map → chunk-EOXA4VJH.cjs.map} +1 -1
  97. package/dist/{chunk-DBKZANTC.js → chunk-GA47YVW5.js} +3 -3
  98. package/dist/{chunk-DBKZANTC.js.map → chunk-GA47YVW5.js.map} +1 -1
  99. package/dist/{chunk-RCZRI72J.cjs → chunk-GMODJT4N.cjs} +4 -4
  100. package/dist/{chunk-RCZRI72J.cjs.map → chunk-GMODJT4N.cjs.map} +1 -1
  101. package/dist/{chunk-22KAKJ3W.cjs → chunk-GS5MFUPC.cjs} +4 -4
  102. package/dist/{chunk-22KAKJ3W.cjs.map → chunk-GS5MFUPC.cjs.map} +1 -1
  103. package/dist/{chunk-62OMGQHS.js → chunk-H6W3VXHU.js} +3 -3
  104. package/dist/{chunk-62OMGQHS.js.map → chunk-H6W3VXHU.js.map} +1 -1
  105. package/dist/{chunk-DX3Z2COD.cjs → chunk-HUYKO2ES.cjs} +3 -3
  106. package/dist/{chunk-DX3Z2COD.cjs.map → chunk-HUYKO2ES.cjs.map} +1 -1
  107. package/dist/{chunk-U5F5P4YU.js → chunk-IK234EFX.js} +12 -12
  108. package/dist/{chunk-U5F5P4YU.js.map → chunk-IK234EFX.js.map} +1 -1
  109. package/dist/{chunk-UQ2OBHMV.js → chunk-JUGEFTRC.js} +1010 -1010
  110. package/dist/chunk-JUGEFTRC.js.map +1 -0
  111. package/dist/{chunk-CHQMVIHR.js → chunk-LPGBRMYS.js} +36 -36
  112. package/dist/chunk-LPGBRMYS.js.map +1 -0
  113. package/dist/{chunk-D35EHOK5.cjs → chunk-M23W7IID.cjs} +12 -12
  114. package/dist/chunk-M23W7IID.cjs.map +1 -0
  115. package/dist/{chunk-FPOKWML2.js → chunk-MIVNNQO3.js} +21 -4
  116. package/dist/chunk-MIVNNQO3.js.map +1 -0
  117. package/dist/{chunk-WI3BVKEC.cjs → chunk-MNFI66H5.cjs} +5 -5
  118. package/dist/{chunk-WI3BVKEC.cjs.map → chunk-MNFI66H5.cjs.map} +1 -1
  119. package/dist/{chunk-T5ZMG6MC.js → chunk-NF4M7PUB.js} +3 -3
  120. package/dist/{chunk-T5ZMG6MC.js.map → chunk-NF4M7PUB.js.map} +1 -1
  121. package/dist/{chunk-ZNY5W3VX.js → chunk-NPSFPBIB.js} +3 -3
  122. package/dist/{chunk-ZNY5W3VX.js.map → chunk-NPSFPBIB.js.map} +1 -1
  123. package/dist/{chunk-LYW5A35J.js → chunk-OMIYTUVR.js} +12 -12
  124. package/dist/{chunk-LYW5A35J.js.map → chunk-OMIYTUVR.js.map} +1 -1
  125. package/dist/{chunk-ZMVF7EYJ.cjs → chunk-PBPO54KZ.cjs} +21 -3
  126. package/dist/chunk-PBPO54KZ.cjs.map +1 -0
  127. package/dist/{chunk-7V4OCZS6.cjs → chunk-RA3EGF6K.cjs} +6 -6
  128. package/dist/{chunk-7V4OCZS6.cjs.map → chunk-RA3EGF6K.cjs.map} +1 -1
  129. package/dist/{chunk-PL7O3RJJ.cjs → chunk-RKBAY7GZ.cjs} +3 -3
  130. package/dist/{chunk-PL7O3RJJ.cjs.map → chunk-RKBAY7GZ.cjs.map} +1 -1
  131. package/dist/{chunk-J3E5CSSC.js → chunk-RKFWBIKS.js} +3 -3
  132. package/dist/{chunk-J3E5CSSC.js.map → chunk-RKFWBIKS.js.map} +1 -1
  133. package/dist/{chunk-YLKHTBYA.js → chunk-RRP7MQAO.js} +3 -3
  134. package/dist/{chunk-YLKHTBYA.js.map → chunk-RRP7MQAO.js.map} +1 -1
  135. package/dist/{chunk-U6LQ6Z3P.cjs → chunk-SP3IKIPA.cjs} +6 -6
  136. package/dist/{chunk-U6LQ6Z3P.cjs.map → chunk-SP3IKIPA.cjs.map} +1 -1
  137. package/dist/{chunk-GX75YCWJ.cjs → chunk-SQUOXOY3.cjs} +560 -560
  138. package/dist/chunk-SQUOXOY3.cjs.map +1 -0
  139. package/dist/{chunk-6ZYOUT73.js → chunk-T5LORFHL.js} +7 -7
  140. package/dist/{chunk-6ZYOUT73.js.map → chunk-T5LORFHL.js.map} +1 -1
  141. package/dist/{chunk-45OU2UAA.cjs → chunk-TEMTKBBL.cjs} +10 -10
  142. package/dist/{chunk-45OU2UAA.cjs.map → chunk-TEMTKBBL.cjs.map} +1 -1
  143. package/dist/{chunk-PHDUN4SG.cjs → chunk-THCMGAFX.cjs} +41 -41
  144. package/dist/{chunk-PHDUN4SG.cjs.map → chunk-THCMGAFX.cjs.map} +1 -1
  145. package/dist/{chunk-HTGEAQOA.js → chunk-TOMDMKOD.js} +7 -7
  146. package/dist/{chunk-HTGEAQOA.js.map → chunk-TOMDMKOD.js.map} +1 -1
  147. package/dist/{chunk-WJHRWXWJ.js → chunk-TXIAF4PX.js} +3 -3
  148. package/dist/{chunk-WJHRWXWJ.js.map → chunk-TXIAF4PX.js.map} +1 -1
  149. package/dist/{chunk-6M5NAAWX.js → chunk-UCSEE52D.js} +3 -3
  150. package/dist/{chunk-6M5NAAWX.js.map → chunk-UCSEE52D.js.map} +1 -1
  151. package/dist/{chunk-I7CJDF3V.cjs → chunk-UHMP6S7M.cjs} +104 -103
  152. package/dist/chunk-UHMP6S7M.cjs.map +1 -0
  153. package/dist/{chunk-PGCKTXYH.js → chunk-UHUI6A36.js} +3 -3
  154. package/dist/{chunk-PGCKTXYH.js.map → chunk-UHUI6A36.js.map} +1 -1
  155. package/dist/{chunk-6KQVTMRL.cjs → chunk-UOGXKHTJ.cjs} +3 -3
  156. package/dist/{chunk-6KQVTMRL.cjs.map → chunk-UOGXKHTJ.cjs.map} +1 -1
  157. package/dist/{chunk-7S7YVBFK.js → chunk-VDSDG4FR.js} +3 -3
  158. package/dist/{chunk-7S7YVBFK.js.map → chunk-VDSDG4FR.js.map} +1 -1
  159. package/dist/{chunk-3GFQNJYE.js → chunk-VGWCHX6G.js} +104 -103
  160. package/dist/chunk-VGWCHX6G.js.map +1 -0
  161. package/dist/{chunk-VY3HTT37.js → chunk-VUH547VQ.js} +3 -3
  162. package/dist/{chunk-VY3HTT37.js.map → chunk-VUH547VQ.js.map} +1 -1
  163. package/dist/{chunk-AZCMKGDG.js → chunk-W37PFYFL.js} +4 -4
  164. package/dist/{chunk-AZCMKGDG.js.map → chunk-W37PFYFL.js.map} +1 -1
  165. package/dist/{chunk-JGUM4EXE.cjs → chunk-W3IX3GZS.cjs} +8 -8
  166. package/dist/{chunk-JGUM4EXE.cjs.map → chunk-W3IX3GZS.cjs.map} +1 -1
  167. package/dist/{chunk-UCA4JLLJ.cjs → chunk-X7GT57KW.cjs} +3 -3
  168. package/dist/{chunk-UCA4JLLJ.cjs.map → chunk-X7GT57KW.cjs.map} +1 -1
  169. package/dist/{chunk-IXL2KJOZ.cjs → chunk-XBEGD33U.cjs} +40 -40
  170. package/dist/{chunk-IXL2KJOZ.cjs.map → chunk-XBEGD33U.cjs.map} +1 -1
  171. package/dist/{chunk-FDNIK5YS.cjs → chunk-XBKIFGBB.cjs} +8 -8
  172. package/dist/{chunk-FDNIK5YS.cjs.map → chunk-XBKIFGBB.cjs.map} +1 -1
  173. package/dist/{chunk-HZE5MHQO.js → chunk-XT7HKQ4H.js} +3 -3
  174. package/dist/{chunk-HZE5MHQO.js.map → chunk-XT7HKQ4H.js.map} +1 -1
  175. package/dist/{chunk-M3OK6KGR.js → chunk-ZGQKED5T.js} +3 -3
  176. package/dist/{chunk-M3OK6KGR.js.map → chunk-ZGQKED5T.js.map} +1 -1
  177. package/dist/{chunk-NWBCZ4PA.js → chunk-ZKBYG6MN.js} +4 -4
  178. package/dist/{chunk-NWBCZ4PA.js.map → chunk-ZKBYG6MN.js.map} +1 -1
  179. package/dist/collaboration/index.cjs +1 -1
  180. package/dist/collaboration/index.js +1 -1
  181. package/dist/connect/docx.cjs +19 -19
  182. package/dist/connect/docx.js +15 -15
  183. package/dist/connect/index.cjs +762 -762
  184. package/dist/connect/index.js +63 -63
  185. package/dist/connect/viewer.cjs +14 -14
  186. package/dist/connect/viewer.js +13 -13
  187. package/dist/connection/dashboards/ConnectedDashboardsPage.d.ts +6 -0
  188. package/dist/dashboards/chartModel.d.ts +12 -0
  189. package/dist/dashboards/index.cjs +113 -42
  190. package/dist/dashboards/index.cjs.map +1 -1
  191. package/dist/dashboards/index.js +95 -24
  192. package/dist/dashboards/index.js.map +1 -1
  193. package/dist/embed/index.cjs +29 -29
  194. package/dist/embed/index.js +23 -23
  195. package/dist/facts/index.cjs +43 -43
  196. package/dist/facts/index.js +2 -2
  197. package/dist/files/index.cjs +1 -1
  198. package/dist/files/index.js +1 -1
  199. package/dist/home/index.cjs +31 -31
  200. package/dist/home/index.js +3 -3
  201. package/dist/index.cjs +383 -383
  202. package/dist/index.js +21 -21
  203. package/dist/settings/index.cjs +153 -153
  204. package/dist/settings/index.js +4 -4
  205. package/dist/shell/index.cjs +36 -36
  206. package/dist/shell/index.js +4 -4
  207. package/dist/site/index.cjs +5 -5
  208. package/dist/site/index.js +1 -1
  209. package/dist/studio/index.cjs +19 -19
  210. package/dist/studio/index.js +14 -14
  211. package/dist/styles.css +1 -1
  212. package/dist/workflow-canvas/index.cjs +33 -33
  213. package/dist/workflow-canvas/index.js +22 -22
  214. package/node_modules/@arbidocs/coedit/package.json +2 -2
  215. package/node_modules/@docx-editor.dev/core/dist/automation.cjs +1 -1
  216. package/node_modules/@docx-editor.dev/core/dist/automation.d.ts +60 -13
  217. package/node_modules/@docx-editor.dev/core/dist/automation.js +1 -1
  218. package/node_modules/@docx-editor.dev/core/dist/binding.cjs +1 -1
  219. package/node_modules/@docx-editor.dev/core/dist/binding.d.ts +21 -13
  220. package/node_modules/@docx-editor.dev/core/dist/binding.js +1 -1
  221. package/node_modules/@docx-editor.dev/core/dist/{index-Bsg7oIKP.d.ts → chrome-print-CAs51cpq.d.ts} +31 -21
  222. package/node_modules/@docx-editor.dev/core/dist/{chunk-VDNNLG6X.js → chunk-236O4YQW.js} +1 -1
  223. package/node_modules/@docx-editor.dev/core/dist/chunk-4HENIAFG.js +1 -0
  224. package/node_modules/@docx-editor.dev/core/dist/{chunk-SRPILEWV.cjs → chunk-6JPL6ZAS.cjs} +5 -5
  225. package/node_modules/@docx-editor.dev/core/dist/{chunk-2RC2EPND.js → chunk-6ZQP4HQ7.js} +1 -1
  226. package/node_modules/@docx-editor.dev/core/dist/{chunk-ZUHOMK52.cjs → chunk-7WQ7AAHW.cjs} +1 -1
  227. package/node_modules/@docx-editor.dev/core/dist/{chunk-Z6WBFXJU.js → chunk-BCXH4BXB.js} +3 -3
  228. package/node_modules/@docx-editor.dev/core/dist/{chunk-QMLCVPCD.cjs → chunk-BY2ACZZ6.cjs} +1 -1
  229. package/node_modules/@docx-editor.dev/core/dist/chunk-CAJEXXVG.cjs +4 -0
  230. package/node_modules/@docx-editor.dev/core/dist/chunk-CPWLFPWC.js +30 -0
  231. package/node_modules/@docx-editor.dev/core/dist/{chunk-6APGXLBB.cjs → chunk-D7ZMDMPX.cjs} +2 -2
  232. package/node_modules/@docx-editor.dev/core/dist/chunk-DOHF6FA7.cjs +30 -0
  233. package/node_modules/@docx-editor.dev/core/dist/chunk-DVX32P2P.js +27 -0
  234. package/node_modules/@docx-editor.dev/core/dist/{chunk-6EYYL7FL.js → chunk-E4LOMDNL.js} +1 -1
  235. package/node_modules/@docx-editor.dev/core/dist/chunk-EKLM7NWB.cjs +7 -0
  236. package/node_modules/@docx-editor.dev/core/dist/chunk-G3K63G7P.cjs +27 -0
  237. package/node_modules/@docx-editor.dev/core/dist/{chunk-5CSUYANV.js → chunk-G4HOFIKJ.js} +1 -1
  238. package/node_modules/@docx-editor.dev/core/dist/{chunk-K5U2PLDP.cjs → chunk-JLVBDYVQ.cjs} +1 -1
  239. package/node_modules/@docx-editor.dev/core/dist/chunk-LQX36Z5P.js +7 -0
  240. package/node_modules/@docx-editor.dev/core/dist/{chunk-TSLBZ26X.js → chunk-LSZ6KPKK.js} +1 -1
  241. package/node_modules/@docx-editor.dev/core/dist/{chunk-O2AL2HSJ.cjs → chunk-MM5QBMTE.cjs} +1 -1
  242. package/node_modules/@docx-editor.dev/core/dist/{chunk-ETTO6GK3.js → chunk-OMCG63ZF.js} +1 -1
  243. package/node_modules/@docx-editor.dev/core/dist/chunk-OSFOJTHU.cjs +18 -0
  244. package/node_modules/@docx-editor.dev/core/dist/{chunk-E7BQA6UP.js → chunk-RCLZXP3B.js} +1 -1
  245. package/node_modules/@docx-editor.dev/core/dist/chunk-T6K2QYNZ.cjs +2 -0
  246. package/node_modules/@docx-editor.dev/core/dist/chunk-TRGAVV2Y.js +4 -0
  247. package/node_modules/@docx-editor.dev/core/dist/chunk-U4JZVSOE.js +2 -0
  248. package/node_modules/@docx-editor.dev/core/dist/{chunk-2GO5T2JU.cjs → chunk-UHHYFIDT.cjs} +1 -1
  249. package/node_modules/@docx-editor.dev/core/dist/chunk-V3N4SOAK.cjs +1 -0
  250. package/node_modules/@docx-editor.dev/core/dist/{chunk-6AWEKBLB.cjs → chunk-W35WTWAO.cjs} +1 -1
  251. package/node_modules/@docx-editor.dev/core/dist/chunk-YQ5G6LC7.js +18 -0
  252. package/node_modules/@docx-editor.dev/core/dist/collaboration/replication.cjs +1 -1
  253. package/node_modules/@docx-editor.dev/core/dist/collaboration/replication.d.ts +5 -5
  254. package/node_modules/@docx-editor.dev/core/dist/collaboration/replication.js +1 -1
  255. package/node_modules/@docx-editor.dev/core/dist/collaboration.d.ts +4 -4
  256. package/node_modules/@docx-editor.dev/core/dist/contracts/document.d.ts +3 -3
  257. package/node_modules/@docx-editor.dev/core/dist/contracts/editor.d.ts +9 -10
  258. package/node_modules/@docx-editor.dev/core/dist/contracts/interaction.d.ts +2 -2
  259. package/node_modules/@docx-editor.dev/core/dist/contracts/modules.cjs +1 -1
  260. package/node_modules/@docx-editor.dev/core/dist/contracts/modules.d.ts +33 -9
  261. package/node_modules/@docx-editor.dev/core/dist/contracts/modules.js +1 -1
  262. package/node_modules/@docx-editor.dev/core/dist/contracts/types.d.ts +2 -2
  263. package/node_modules/@docx-editor.dev/core/dist/{custom-node-writes-cvL5rhcD.d.ts → custom-node-writes-Bn6uciLb.d.ts} +2 -2
  264. package/node_modules/@docx-editor.dev/core/dist/diagnostic-context-B8M79cfK.d.ts +30 -0
  265. package/node_modules/@docx-editor.dev/core/dist/diagnostic-hints-BeVjfNOv.d.ts +113 -0
  266. package/node_modules/@docx-editor.dev/core/dist/{document-protection-BAGVGqaP.d.ts → document-protection-CUb55pl_.d.ts} +2 -2
  267. package/node_modules/@docx-editor.dev/core/dist/{editor-Ci7IZGmG.d.ts → editor-CZQZmTIU.d.ts} +386 -9
  268. package/node_modules/@docx-editor.dev/core/dist/{editor-scope-OHPwVQ5l.d.ts → editor-scope-7o9xweiJ.d.ts} +1 -1
  269. package/node_modules/@docx-editor.dev/core/dist/editor.cjs +1 -1
  270. package/node_modules/@docx-editor.dev/core/dist/editor.d.ts +54 -33
  271. package/node_modules/@docx-editor.dev/core/dist/editor.js +1 -1
  272. package/node_modules/@docx-editor.dev/core/dist/export.cjs +2 -2
  273. package/node_modules/@docx-editor.dev/core/dist/export.d.ts +13 -14
  274. package/node_modules/@docx-editor.dev/core/dist/export.js +1 -1
  275. package/node_modules/@docx-editor.dev/core/dist/{font-resolver-BVQB14qT.d.ts → font-resolver-lSBLirLR.d.ts} +3 -3
  276. package/node_modules/@docx-editor.dev/core/dist/{headless-document-view-qH331moE.d.ts → headless-document-view-pp3q7wIh.d.ts} +2 -2
  277. package/node_modules/@docx-editor.dev/core/dist/{image-resources-BN-hUgCn.d.ts → image-resources-tXLQShoC.d.ts} +2 -2
  278. package/node_modules/@docx-editor.dev/core/dist/index.cjs +1 -1
  279. package/node_modules/@docx-editor.dev/core/dist/index.d.ts +65 -20
  280. package/node_modules/@docx-editor.dev/core/dist/index.js +1 -1
  281. package/node_modules/@docx-editor.dev/core/dist/{layout-shaping-BEyuiQOk.d.ts → layout-shaping-BD-dF_rn.d.ts} +1 -1
  282. package/node_modules/@docx-editor.dev/core/dist/layout.cjs +1 -1
  283. package/node_modules/@docx-editor.dev/core/dist/layout.d.ts +17 -20
  284. package/node_modules/@docx-editor.dev/core/dist/layout.js +1 -1
  285. package/node_modules/@docx-editor.dev/core/dist/{note-properties-4Y9o6Gyk.d.ts → note-properties-qQUjO1GQ.d.ts} +3 -3
  286. package/node_modules/@docx-editor.dev/core/dist/{omml-equation-CuzBL5DD.d.ts → omml-equation-BUbU0utM.d.ts} +1 -1
  287. package/node_modules/@docx-editor.dev/core/dist/output.cjs +1 -1
  288. package/node_modules/@docx-editor.dev/core/dist/output.d.ts +8 -9
  289. package/node_modules/@docx-editor.dev/core/dist/output.js +1 -1
  290. package/node_modules/@docx-editor.dev/core/dist/{protocol-Bqk4Izjc.d.ts → protocol-DYzzz2ej.d.ts} +2 -2
  291. package/node_modules/@docx-editor.dev/core/dist/{review-paragraph-order-DT-n6ouC.d.ts → review-paragraph-order-CN_0l2Cb.d.ts} +1 -1
  292. package/node_modules/@docx-editor.dev/core/dist/{semantic-cell-selection-D9D1KSXq.d.ts → semantic-cell-selection-eYag3P47.d.ts} +4 -211
  293. package/node_modules/@docx-editor.dev/core/dist/{semantic-interaction-CIC-PooQ.d.ts → semantic-interaction-kR_QB845.d.ts} +1 -1
  294. package/node_modules/@docx-editor.dev/core/dist/{semantic-paint-BME37OMv.d.ts → semantic-paint-ZayFF3tD.d.ts} +17 -5
  295. package/node_modules/@docx-editor.dev/core/dist/{semantic-record-queries-CBlZqZNa.d.ts → semantic-record-queries-Bsgth6lv.d.ts} +1 -1
  296. package/node_modules/@docx-editor.dev/core/dist/{semantic-records-4B3WwFAi.d.ts → semantic-records-DQmumPgL.d.ts} +1279 -828
  297. package/node_modules/@docx-editor.dev/core/dist/store.cjs +1 -1
  298. package/node_modules/@docx-editor.dev/core/dist/store.d.ts +1466 -1464
  299. package/node_modules/@docx-editor.dev/core/dist/store.js +1 -1
  300. package/node_modules/@docx-editor.dev/core/dist/{tree-package-fragment-BeeKxDw8.d.ts → tree-package-store-CovjNARF.d.ts} +83 -83
  301. package/node_modules/@docx-editor.dev/core/dist/{tree-session-contract-CVbmlMlq.d.ts → tree-session-contract-CZVAGl51.d.ts} +6 -6
  302. package/node_modules/@docx-editor.dev/core/dist/{types-barrel-D3xCgQX6.d.ts → types-barrel-DuC5QBNC.d.ts} +548 -527
  303. package/node_modules/@docx-editor.dev/core/package.json +3 -3
  304. package/node_modules/@docx-editor.dev/react/dist/index.js +3 -3
  305. package/node_modules/@docx-editor.dev/react/dist/index.mjs +3 -3
  306. package/node_modules/@docx-editor.dev/react/package.json +4 -4
  307. package/package.json +8 -8
  308. package/dist/ConnectedStreamedWordArtifact-HLJ5IIOU.js.map +0 -1
  309. package/dist/ConnectedStreamedWordArtifact-JQ34AOUU.cjs.map +0 -1
  310. package/dist/RechartsRenderer-23OF4H6X.js.map +0 -1
  311. package/dist/RechartsRenderer-GIRCW7DB.cjs.map +0 -1
  312. package/dist/ai-ADS6YSS2.cjs.map +0 -1
  313. package/dist/ai-KHWTGBT5.js.map +0 -1
  314. package/dist/chunk-3GFQNJYE.js.map +0 -1
  315. package/dist/chunk-5AC52BHL.cjs.map +0 -1
  316. package/dist/chunk-AVGHTUPE.js.map +0 -1
  317. package/dist/chunk-BAUZUIHB.js.map +0 -1
  318. package/dist/chunk-CHQMVIHR.js.map +0 -1
  319. package/dist/chunk-D35EHOK5.cjs.map +0 -1
  320. package/dist/chunk-FPOKWML2.js.map +0 -1
  321. package/dist/chunk-GX75YCWJ.cjs.map +0 -1
  322. package/dist/chunk-I7CJDF3V.cjs.map +0 -1
  323. package/dist/chunk-OAIOOVFN.cjs.map +0 -1
  324. package/dist/chunk-UQ2OBHMV.js.map +0 -1
  325. package/dist/chunk-ZMVF7EYJ.cjs.map +0 -1
  326. package/node_modules/@docx-editor.dev/core/dist/chunk-4GBTELJV.cjs +0 -28
  327. package/node_modules/@docx-editor.dev/core/dist/chunk-4R3TEXMN.js +0 -18
  328. package/node_modules/@docx-editor.dev/core/dist/chunk-EO4C5QJW.cjs +0 -2
  329. package/node_modules/@docx-editor.dev/core/dist/chunk-FIJZIQXA.cjs +0 -18
  330. package/node_modules/@docx-editor.dev/core/dist/chunk-FRXAOVTB.js +0 -28
  331. package/node_modules/@docx-editor.dev/core/dist/chunk-J6BVWIDB.js +0 -2
  332. package/node_modules/@docx-editor.dev/core/dist/chunk-JGNVNT2A.cjs +0 -2
  333. package/node_modules/@docx-editor.dev/core/dist/chunk-KKIJG3C6.js +0 -2
  334. package/node_modules/@docx-editor.dev/core/dist/chunk-LWDSDCMO.js +0 -27
  335. package/node_modules/@docx-editor.dev/core/dist/chunk-NBCVVZOM.cjs +0 -1
  336. package/node_modules/@docx-editor.dev/core/dist/chunk-O5INAWZQ.js +0 -1
  337. package/node_modules/@docx-editor.dev/core/dist/chunk-RCHS4ZEH.cjs +0 -27
  338. package/node_modules/@docx-editor.dev/core/dist/chunk-VHAVHCQY.js +0 -7
  339. package/node_modules/@docx-editor.dev/core/dist/chunk-VX43VBAX.cjs +0 -7
  340. package/node_modules/@docx-editor.dev/core/dist/review-pane-D9jm8DcY.d.ts +0 -128
  341. package/node_modules/@docx-editor.dev/core/dist/revision-projection-DZ4kKVev.d.ts +0 -242
@@ -4,44 +4,68 @@
4
4
  var chunkZBP4ZSAJ_cjs = require('./chunk-ZBP4ZSAJ.cjs');
5
5
  var react = require('react');
6
6
 
7
+ var status = { callExtId: null, transcribing: false };
8
+ var listeners = /* @__PURE__ */ new Set();
9
+ function publishCallStatus(next) {
10
+ if (next.callExtId === status.callExtId && next.transcribing === status.transcribing) return;
11
+ status = next;
12
+ listeners.forEach((fn) => fn());
13
+ }
14
+ function subscribe(fn) {
15
+ listeners.add(fn);
16
+ return () => listeners.delete(fn);
17
+ }
18
+ function useMyCallStatus(callExtId) {
19
+ const inCall = react.useSyncExternalStore(
20
+ subscribe,
21
+ () => !!callExtId && status.callExtId === callExtId,
22
+ () => false
23
+ );
24
+ const transcribing = react.useSyncExternalStore(
25
+ subscribe,
26
+ () => !!callExtId && status.callExtId === callExtId && status.transcribing,
27
+ () => false
28
+ );
29
+ return { inCall, transcribing };
30
+ }
7
31
  var LEVEL_TICK_MS = 60;
8
32
  var SPEAKING_RELEASE_MS = 350;
9
33
  var EMPTY = { levels: {}, speaking: [], spotlight: null };
10
34
  var snapshot = EMPTY;
11
- var listeners = /* @__PURE__ */ new Set();
35
+ var listeners2 = /* @__PURE__ */ new Set();
12
36
  function publish(next) {
13
37
  snapshot = next;
14
- listeners.forEach((fn) => fn());
38
+ listeners2.forEach((fn) => fn());
15
39
  }
16
- function subscribe(fn) {
17
- listeners.add(fn);
18
- return () => listeners.delete(fn);
40
+ function subscribe2(fn) {
41
+ listeners2.add(fn);
42
+ return () => listeners2.delete(fn);
19
43
  }
20
44
  var get = () => snapshot;
21
45
  function useVoiceLevel(identity) {
22
46
  return react.useSyncExternalStore(
23
- subscribe,
47
+ subscribe2,
24
48
  () => identity ? get().levels[identity] ?? 0 : 0,
25
49
  () => 0
26
50
  );
27
51
  }
28
52
  function useVoiceLevels() {
29
53
  return react.useSyncExternalStore(
30
- subscribe,
54
+ subscribe2,
31
55
  () => get().levels,
32
56
  () => EMPTY.levels
33
57
  );
34
58
  }
35
59
  function useIsSpeaking(identity) {
36
60
  return react.useSyncExternalStore(
37
- subscribe,
61
+ subscribe2,
38
62
  () => identity ? get().speaking.includes(identity) : false,
39
63
  () => false
40
64
  );
41
65
  }
42
66
  function useSpeakingIds() {
43
67
  const key = react.useSyncExternalStore(
44
- subscribe,
68
+ subscribe2,
45
69
  () => get().speaking.join("\n"),
46
70
  () => ""
47
71
  );
@@ -49,7 +73,7 @@ function useSpeakingIds() {
49
73
  }
50
74
  function useSpotlightId() {
51
75
  return react.useSyncExternalStore(
52
- subscribe,
76
+ subscribe2,
53
77
  () => get().spotlight,
54
78
  () => null
55
79
  );
@@ -130,30 +154,6 @@ function startVoiceLevels(sources) {
130
154
  publish(EMPTY);
131
155
  };
132
156
  }
133
- var status = { callExtId: null, transcribing: false };
134
- var listeners2 = /* @__PURE__ */ new Set();
135
- function publishCallStatus(next) {
136
- if (next.callExtId === status.callExtId && next.transcribing === status.transcribing) return;
137
- status = next;
138
- listeners2.forEach((fn) => fn());
139
- }
140
- function subscribe2(fn) {
141
- listeners2.add(fn);
142
- return () => listeners2.delete(fn);
143
- }
144
- function useMyCallStatus(callExtId) {
145
- const inCall = react.useSyncExternalStore(
146
- subscribe2,
147
- () => !!callExtId && status.callExtId === callExtId,
148
- () => false
149
- );
150
- const transcribing = react.useSyncExternalStore(
151
- subscribe2,
152
- () => !!callExtId && status.callExtId === callExtId && status.transcribing,
153
- () => false
154
- );
155
- return { inCall, transcribing };
156
- }
157
157
 
158
158
  exports.LEVEL_TICK_MS = LEVEL_TICK_MS;
159
159
  exports.publishCallStatus = publishCallStatus;
@@ -164,5 +164,5 @@ exports.useSpeakingIds = useSpeakingIds;
164
164
  exports.useSpotlightId = useSpotlightId;
165
165
  exports.useVoiceLevel = useVoiceLevel;
166
166
  exports.useVoiceLevels = useVoiceLevels;
167
- //# sourceMappingURL=chunk-OAIOOVFN.cjs.map
168
- //# sourceMappingURL=chunk-OAIOOVFN.cjs.map
167
+ //# sourceMappingURL=chunk-7SJXYEZI.cjs.map
168
+ //# sourceMappingURL=chunk-7SJXYEZI.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/calls/call-status.ts","../src/calls/voice-levels.ts"],"names":["useSyncExternalStore","listeners","subscribe","INITIAL_SPOTLIGHT","prev","SPEAKING_LEVEL","id","nextSpotlight"],"mappings":"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","file":"chunk-7SJXYEZI.cjs","sourcesContent":["/**\n * The call I am in, as the rest of the app needs it (its conversation's empty state and\n * provisional transcript rows): which call, and whether it is being transcribed. Published by the\n * call room; plain data, no LiveKit.\n */\n\nimport { useSyncExternalStore } from 'react'\n\ninterface CallStatus {\n callExtId: string | null\n transcribing: boolean\n}\n\nlet status: CallStatus = { callExtId: null, transcribing: false }\nconst listeners = new Set<() => void>()\n\nexport function publishCallStatus(next: CallStatus): void {\n if (next.callExtId === status.callExtId && next.transcribing === status.transcribing) return\n status = next\n listeners.forEach((fn) => fn())\n}\n\nfunction subscribe(fn: () => void): () => void {\n listeners.add(fn)\n return () => listeners.delete(fn)\n}\n\n/** Whether I am in this call, and whether it is transcribed. */\nexport function useMyCallStatus(callExtId: string | null | undefined): {\n inCall: boolean\n transcribing: boolean\n} {\n const inCall = useSyncExternalStore(\n subscribe,\n () => !!callExtId && status.callExtId === callExtId,\n () => false\n )\n const transcribing = useSyncExternalStore(\n subscribe,\n () => !!callExtId && status.callExtId === callExtId && status.transcribing,\n () => false\n )\n return { inCall, transcribing }\n}\n","/**\n * Who is talking, fast: each participant's microphone level, measured in this browser from the\n * audio it already plays (WebAudio analysers, ~60 ms), not from the media server's slower\n * active-speaker events. One store for the whole app, so the call panel (rings, spotlight, live\n * speaker list) and the conversation beside it (the transcript line being spoken) agree.\n *\n * The store is plain data; `startVoiceLevels` (used by the call room) feeds it.\n */\n\nimport { useSyncExternalStore } from 'react'\nimport { INITIAL_SPOTLIGHT, SPEAKING_LEVEL, nextSpotlight, type SpotlightState } from './layout'\n\n/** Sampling period. */\nexport const LEVEL_TICK_MS = 60\n/** A voice stays \"speaking\" this long after it drops below the threshold (no flicker between words). */\nconst SPEAKING_RELEASE_MS = 350\n\ninterface Snapshot {\n /** identity → level 0..1, rounded to 0.05. */\n levels: Readonly<Record<string, number>>\n /** Talking now, loudest first. */\n speaking: readonly string[]\n /** The speaker view's spotlight (with hysteresis). */\n spotlight: string | null\n}\n\nconst EMPTY: Snapshot = { levels: {}, speaking: [], spotlight: null }\nlet snapshot: Snapshot = EMPTY\nconst listeners = new Set<() => void>()\n\nfunction publish(next: Snapshot) {\n snapshot = next\n listeners.forEach((fn) => fn())\n}\n\nfunction subscribe(fn: () => void): () => void {\n listeners.add(fn)\n return () => listeners.delete(fn)\n}\n\nconst get = () => snapshot\n\n/** My voice level (0..1, in 0.05 steps) — re-renders only when it changes. */\nexport function useVoiceLevel(identity: string | null | undefined): number {\n return useSyncExternalStore(\n subscribe,\n () => (identity ? (get().levels[identity] ?? 0) : 0),\n () => 0\n )\n}\n\n/** Everyone's level (re-renders at the level rate: for small lists). */\nexport function useVoiceLevels(): Readonly<Record<string, number>> {\n return useSyncExternalStore(\n subscribe,\n () => get().levels,\n () => EMPTY.levels\n )\n}\n\nexport function useIsSpeaking(identity: string | null | undefined): boolean {\n return useSyncExternalStore(\n subscribe,\n () => (identity ? get().speaking.includes(identity) : false),\n () => false\n )\n}\n\n/** Identities talking now, loudest first (a stable string key, split by the caller). */\nexport function useSpeakingIds(): string[] {\n const key = useSyncExternalStore(\n subscribe,\n () => get().speaking.join('\\n'),\n () => ''\n )\n return key ? key.split('\\n') : []\n}\n\nexport function useSpotlightId(): string | null {\n return useSyncExternalStore(\n subscribe,\n () => get().spotlight,\n () => null\n )\n}\n\n/** A track to measure: whose it is, and its audio. */\nexport interface VoiceSource {\n identity: string\n track: MediaStreamTrack | null\n /** Mic muted / off: level 0 without measuring. */\n muted: boolean\n /** Me: measured (my ring, \"Speaking: … (me)\") but never put in the spotlight. */\n local?: boolean\n}\n\ninterface Meter {\n track: MediaStreamTrack\n source: MediaStreamAudioSourceNode\n analyser: AnalyserNode\n buf: Float32Array<ArrayBuffer>\n}\n\n/**\n * Measure the given sources every {@link LEVEL_TICK_MS} until stopped. `sources()` is read each\n * tick, so the caller can hand over a ref to its current track list.\n */\nexport function startVoiceLevels(sources: () => VoiceSource[]): () => void {\n let ctx: AudioContext | null = null\n try {\n ctx = typeof AudioContext !== 'undefined' ? new AudioContext() : null\n } catch {\n ctx = null\n }\n const meters = new Map<string, Meter>()\n const smoothed = new Map<string, number>()\n const loudAt = new Map<string, number>()\n let spot: SpotlightState = INITIAL_SPOTLIGHT\n\n const meterFor = (s: VoiceSource): Meter | null => {\n if (!ctx || !s.track || s.track.readyState === 'ended') return null\n const have = meters.get(s.identity)\n if (have && have.track === s.track) return have\n have?.source.disconnect()\n try {\n const source = ctx.createMediaStreamSource(new MediaStream([s.track]))\n const analyser = ctx.createAnalyser()\n analyser.fftSize = 512\n source.connect(analyser)\n const m = { track: s.track, source, analyser, buf: new Float32Array(analyser.fftSize) }\n meters.set(s.identity, m)\n return m\n } catch {\n return null\n }\n }\n\n const tick = () => {\n if (ctx?.state === 'suspended') void ctx.resume().catch(() => undefined)\n const now = Date.now()\n const list = sources()\n const seen = new Set<string>()\n const levels: Record<string, number> = {}\n for (const s of list) {\n seen.add(s.identity)\n let raw = 0\n const m = s.muted ? null : meterFor(s)\n if (m) {\n m.analyser.getFloatTimeDomainData(m.buf)\n let sum = 0\n for (let i = 0; i < m.buf.length; i++) sum += m.buf[i] * m.buf[i]\n raw = Math.min(1, Math.sqrt(sum / m.buf.length) * 5)\n }\n // Fast attack, gentle release.\n const prev = smoothed.get(s.identity) ?? 0\n const level = raw >= prev ? raw : prev * 0.8 + raw * 0.2\n smoothed.set(s.identity, level)\n if (level >= SPEAKING_LEVEL) loudAt.set(s.identity, now)\n levels[s.identity] = Math.round(level * 20) / 20\n }\n for (const id of [...meters.keys()]) {\n if (!seen.has(id)) {\n meters.get(id)?.source.disconnect()\n meters.delete(id)\n smoothed.delete(id)\n loudAt.delete(id)\n }\n }\n const speaking = list\n .map((s) => s.identity)\n .filter((id) => now - (loudAt.get(id) ?? -Infinity) <= SPEAKING_RELEASE_MS)\n .sort((a, b) => (smoothed.get(b) ?? 0) - (smoothed.get(a) ?? 0))\n spot = nextSpotlight(spot, Object.fromEntries(smoothed), now, {\n exclude: list.filter((s) => s.local).map((s) => s.identity),\n })\n if (spot.id && !seen.has(spot.id)) spot = INITIAL_SPOTLIGHT\n const prev = snapshot\n const same =\n prev.spotlight === spot.id &&\n prev.speaking.join('\\n') === speaking.join('\\n') &&\n Object.keys(levels).length === Object.keys(prev.levels).length &&\n Object.entries(levels).every(([k, v]) => prev.levels[k] === v)\n if (!same) publish({ levels, speaking, spotlight: spot.id })\n }\n\n const id = setInterval(tick, LEVEL_TICK_MS)\n return () => {\n clearInterval(id)\n for (const m of meters.values()) m.source.disconnect()\n meters.clear()\n void ctx?.close().catch(() => undefined)\n publish(EMPTY)\n }\n}\n"]}
@@ -1,11 +1,11 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkUCA4JLLJ_cjs = require('./chunk-UCA4JLLJ.cjs');
5
- var chunk7V4OCZS6_cjs = require('./chunk-7V4OCZS6.cjs');
6
- var chunk7JLJH5CW_cjs = require('./chunk-7JLJH5CW.cjs');
7
- var chunkFDNIK5YS_cjs = require('./chunk-FDNIK5YS.cjs');
4
+ var chunkX7GT57KW_cjs = require('./chunk-X7GT57KW.cjs');
5
+ var chunkRA3EGF6K_cjs = require('./chunk-RA3EGF6K.cjs');
8
6
  var chunk3YZKDCWY_cjs = require('./chunk-3YZKDCWY.cjs');
7
+ var chunk7JLJH5CW_cjs = require('./chunk-7JLJH5CW.cjs');
8
+ var chunkXBKIFGBB_cjs = require('./chunk-XBKIFGBB.cjs');
9
9
  var chunk5F4DCIHS_cjs = require('./chunk-5F4DCIHS.cjs');
10
10
  var chunkQRAQZTJE_cjs = require('./chunk-QRAQZTJE.cjs');
11
11
  var chunkWGWP4ATS_cjs = require('./chunk-WGWP4ATS.cjs');
@@ -50,11 +50,11 @@ function useLaunchWorkflow({
50
50
  } = {}) {
51
51
  const { data: documents = [] } = react.useDocuments();
52
52
  const { data: workspaceTags = [] } = react.useTags();
53
- const tags = react$1.useMemo(() => chunkFDNIK5YS_cjs.documentScopeLabels(workspaceTags), [workspaceTags]);
53
+ const tags = react$1.useMemo(() => chunkXBKIFGBB_cjs.documentScopeLabels(workspaceTags), [workspaceTags]);
54
54
  const createTag = react.useCreateTag();
55
55
  const updateTag = react.useUpdateTag();
56
56
  const generate = react.useGenerateDocTags();
57
- const { create: createTask } = chunkUCA4JLLJ_cjs.useWorkflowTasks();
57
+ const { create: createTask } = chunkX7GT57KW_cjs.useWorkflowTasks();
58
58
  const applyModel = react.useApplyChatModel();
59
59
  const session = react.useArbiSessionStore();
60
60
  const { notify, openFiles, openNewConversation } = chunkWGWP4ATS_cjs.useBlocksEnvironment();
@@ -62,7 +62,7 @@ function useLaunchWorkflow({
62
62
  async ({ inputs, scope }) => {
63
63
  const description = text(inputs, "description");
64
64
  const name = text(inputs, "name") || chunk7JLJH5CW_cjs.deriveAnnotationName(description);
65
- const matching = chunkFDNIK5YS_cjs.matchWorkflowScope(documents, scope);
65
+ const matching = chunkXBKIFGBB_cjs.matchWorkflowScope(documents, scope);
66
66
  if (!name || !description || matching.length === 0) return;
67
67
  try {
68
68
  const existing = tags.find((t) => t.name.toLowerCase() === name.toLowerCase());
@@ -162,7 +162,7 @@ function useLaunchWorkflow({
162
162
  const binding = PROMPT_BINDINGS[workflow.id];
163
163
  const prepare = () => {
164
164
  if (binding?.attachScope !== false && !chunkQRAQZTJE_cjs.isEmptyWorkflowScope(scope)) {
165
- const ids = chunkFDNIK5YS_cjs.matchWorkflowScope(documents, scope).map((d) => d.external_id);
165
+ const ids = chunkXBKIFGBB_cjs.matchWorkflowScope(documents, scope).map((d) => d.external_id);
166
166
  if (ids.length > 0) {
167
167
  session.setConversationDocuments(
168
168
  inPlace ? session.getState().conversationId ?? "new" : "new",
@@ -213,7 +213,7 @@ function ConnectedWorkflowStart({
213
213
  );
214
214
  const { openUpload } = chunkWGWP4ATS_cjs.useBlocksEnvironment();
215
215
  const { data: workspaceTags = [] } = react.useTags();
216
- const tags = react$1.useMemo(() => chunkFDNIK5YS_cjs.documentScopeLabels(workspaceTags), [workspaceTags]);
216
+ const tags = react$1.useMemo(() => chunkXBKIFGBB_cjs.documentScopeLabels(workspaceTags), [workspaceTags]);
217
217
  const fieldPlaceholder = react$1.useCallback(
218
218
  (field, inputs, workflow) => {
219
219
  if (workflow.id !== chunk7JLJH5CW_cjs.ANNOTATE_ID || field.name !== "name") return void 0;
@@ -223,7 +223,7 @@ function ConnectedWorkflowStart({
223
223
  []
224
224
  );
225
225
  return /* @__PURE__ */ jsxRuntime.jsx(
226
- chunk7V4OCZS6_cjs.ConnectedWorkflowLauncher,
226
+ chunkRA3EGF6K_cjs.ConnectedWorkflowLauncher,
227
227
  {
228
228
  ...rest,
229
229
  workflows,
@@ -268,7 +268,7 @@ function canOpenSkill(workflow, skillsEnabled) {
268
268
  return workflow.run.kind === "prompt" && (skillsEnabled || chunk7JLJH5CW_cjs.isSkillPackWorkflow(workflow));
269
269
  }
270
270
  function useSlashSkillWorkflows({ landing, send }) {
271
- const { skills, skillsEnabled } = chunkUCA4JLLJ_cjs.useWorkflowDefinitions();
271
+ const { skills, skillsEnabled } = chunkX7GT57KW_cjs.useWorkflowDefinitions();
272
272
  const { commands } = react.useBuiltinCommands();
273
273
  const [active, setActive] = react$1.useState(null);
274
274
  const open = react$1.useCallback(
@@ -332,11 +332,11 @@ function useSlashSkillWorkflows({ landing, send }) {
332
332
  }
333
333
  var NO_SKILLS = [];
334
334
  function useSlashMenuItems(builtinSkills = NO_SKILLS) {
335
- const hostSkills = chunkUCA4JLLJ_cjs.useHostSkills();
336
- const listings = chunkUCA4JLLJ_cjs.useUsableSkillListings(hostSkills);
337
- const skillsEnabled = chunkUCA4JLLJ_cjs.useSkillsEnabled();
335
+ const hostSkills = chunkX7GT57KW_cjs.useHostSkills();
336
+ const listings = chunkX7GT57KW_cjs.useUsableSkillListings(hostSkills);
337
+ const skillsEnabled = chunkX7GT57KW_cjs.useSkillsEnabled();
338
338
  const { commands } = react.useBuiltinCommands();
339
- const builtins = chunkUCA4JLLJ_cjs.useNamedWorkflows(builtinSkills);
339
+ const builtins = chunkX7GT57KW_cjs.useNamedWorkflows(builtinSkills);
340
340
  const items = react$1.useMemo(() => {
341
341
  const packSlugs = new Set(hostSkills.map((w) => w.id));
342
342
  return chunk5F4DCIHS_cjs.buildSlashItems(
@@ -347,7 +347,7 @@ function useSlashMenuItems(builtinSkills = NO_SKILLS) {
347
347
  kind: "command"
348
348
  })),
349
349
  [
350
- ...hostSkills.map(chunkUCA4JLLJ_cjs.hostSkillItem),
350
+ ...hostSkills.map(chunkX7GT57KW_cjs.hostSkillItem),
351
351
  ...skillsEnabled ? skillItems(
352
352
  builtins.filter((w) => !packSlugs.has(w.id)),
353
353
  listings
@@ -355,7 +355,7 @@ function useSlashMenuItems(builtinSkills = NO_SKILLS) {
355
355
  ]
356
356
  );
357
357
  }, [commands, hostSkills, listings, skillsEnabled, builtins]);
358
- return { items, canBrowseSkills: chunkUCA4JLLJ_cjs.useCanBrowseSkills() };
358
+ return { items, canBrowseSkills: chunkX7GT57KW_cjs.useCanBrowseSkills() };
359
359
  }
360
360
  function useSlashItems(text2, builtinSkills = NO_SKILLS) {
361
361
  const { items, canBrowseSkills } = useSlashMenuItems(builtinSkills);
@@ -402,5 +402,5 @@ exports.useLaunchWorkflow = useLaunchWorkflow;
402
402
  exports.useSlashItems = useSlashItems;
403
403
  exports.useSlashMenuItems = useSlashMenuItems;
404
404
  exports.useSlashSkillWorkflows = useSlashSkillWorkflows;
405
- //# sourceMappingURL=chunk-LFYKB7KF.cjs.map
406
- //# sourceMappingURL=chunk-LFYKB7KF.cjs.map
405
+ //# sourceMappingURL=chunk-7V6APLF7.cjs.map
406
+ //# sourceMappingURL=chunk-7V6APLF7.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/connection/workflows/launch-bindings.ts","../src/connection/workflows/useLaunchWorkflow.ts","../src/connection/workflows/ConnectedWorkflowStart.tsx","../src/connection/workflows/useSlashSkillWorkflows.tsx","../src/connection/conversation/useSlashItems.ts"],"names":["GENERATE_IMAGE_ID","buildRetrievalChunkTool","buildRetrievalFullContextTool","IMAGE_ASPECT_AUTO","useDocuments","useTags","useMemo","documentScopeLabels","useCreateTag","useUpdateTag","useGenerateDocTags","useWorkflowTasks","useApplyChatModel","useArbiSessionStore","useBlocksEnvironment","useCallback","deriveAnnotationName","matchWorkflowScope","ANNOTATE_ID","recordWorkflowUse","getDocumentTitle","composeWorkflowPrompt","isEmptyWorkflowScope","useHost","renderWorkflowIcon","jsx","ConnectedWorkflowLauncher","jsxs","TriangleAlert","isSkillPackWorkflow","useWorkflowDefinitions","useBuiltinCommands","useState","text","promptFieldName","useHostSkills","useUsableSkillListings","useSkillsEnabled","useNamedWorkflows","buildSlashItems","hostSkillItem","useCanBrowseSkills","parseSlashTokenInProgress","filterSlashItems","mergeSkillWorkflows"],"mappings":"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","file":"chunk-LFYKB7KF.cjs","sourcesContent":["/**\n * Host bindings of prompt workflows that need more than words on send. Bound by workflow id, the\n * same way the annotation operation is: blocks and the registry stay declarative, and the one\n * place that knows the wire shape is here.\n *\n * Generate image: the reference images and the aspect ratio ride structured tool arguments\n * (`retrieval_full_context` over every reference, `image_generation.aspect_ratio`), never the\n * prompt text: the image model does not reliably honour a shape or sources worded into the prompt,\n * and the references go to the separate image model in its own request, so (unlike the app's\n * one-at-a-time pinned document) several of them do not compound against the agent's context.\n */\n\nimport type { WorkflowInputs, WorkflowScope } from '../../agents/workflows/types'\nimport { buildRetrievalChunkTool, buildRetrievalFullContextTool } from '@arbidocs/sdk/browser'\nimport type { TurnTools } from '@arbidocs/react'\nimport { GENERATE_IMAGE_ID, IMAGE_ASPECT_AUTO } from '../../agents/workflows/catalogue/seed'\n\nexport interface PromptBinding {\n /** Attach the scoped files to the chat (default true). Off when the files are tool inputs. */\n attachScope: boolean\n /** Structured tools for the one send, from the form's inputs. */\n tools?: (inputs: WorkflowInputs) => TurnTools\n}\n\nconst referencesOf = (inputs: WorkflowInputs): string[] => {\n const value = inputs.references as WorkflowScope | undefined\n return value?.documents ?? []\n}\n\nexport const PROMPT_BINDINGS: Record<string, PromptBinding> = {\n [GENERATE_IMAGE_ID]: {\n attachScope: false,\n tools: (inputs) => {\n const aspectRatio = typeof inputs.aspect_ratio === 'string' ? inputs.aspect_ratio : ''\n return {\n retrieval_chunk: buildRetrievalChunkTool([]),\n retrieval_full_context: buildRetrievalFullContextTool(referencesOf(inputs)),\n ...(aspectRatio && aspectRatio !== IMAGE_ASPECT_AUTO\n ? {\n image_generation: {\n name: 'image_generation' as const,\n description: 'image generation',\n tool_args: { aspect_ratio: aspectRatio },\n tool_responses: {},\n },\n }\n : {}),\n }\n },\n },\n}\n","/**\n * The host side of the launch contract: `onLaunch({workflow, inputs, scope, agentId})`.\n *\n * Blocks only say WHAT to run; this performs it, so workspace isolation stays host-side:\n *\n * - prompt workflow, my assistant: open a fresh chat (or stay in this one when `inPlace`), scope\n * its documents, set the composed draft and ask for it to be sent (`autoSendDraft`). The host's\n * send waits for the new chat's documents to be seeded, so a scoped run is never sent with the\n * wrong files. Order matters: `openNewConversation` resets the draft, so it is set after it.\n * - prompt workflow, another agent: a run-now task assigned to that agent (the interactive chat\n * query has no agent parameter), created through the same path as the task composer.\n * - operation workflow (tier B): the handler bound to its id (annotation).\n * - a workflow's own model becomes the chat's (`useApplyChatModel`).\n *\n * The prompt is composed in exactly one place: `composeWorkflowPrompt(workflow, inputs)`.\n */\n\nimport {\n useApplyChatModel,\n useArbiSessionStore,\n useCreateTag,\n useDocuments,\n useGenerateDocTags,\n useTags,\n useUpdateTag,\n} from '@arbidocs/react'\nimport { getDocumentTitle } from '@arbidocs/react/ui'\nimport { useCallback, useMemo } from 'react'\nimport { composeWorkflowPrompt, isEmptyWorkflowScope } from '../../agents/workflows/workflow'\nimport { documentScopeLabels, matchWorkflowScope } from '../../agents/workflows/workspaceScope'\nimport {\n type WorkflowInputs,\n type WorkflowLanding,\n type WorkflowLaunch,\n} from '../../agents/workflows/types'\nimport { deriveAnnotationName } from '../../agents/workflows/catalogue/annotation-name'\nimport { useBlocksEnvironment } from '../../provider/environment'\nimport { PROMPT_BINDINGS } from './launch-bindings'\nimport { ANNOTATE_ID } from '../../agents/workflows/catalogue/seed'\nimport { useWorkflowTasks } from './useWorkflowTasks'\nimport { recordWorkflowUse } from '../../agents/workflows/catalogue/workflow-usage'\n\nexport interface UseLaunchWorkflowOptions {\n /**\n * Where launches from this surface land, over each workflow's own default. The empty chat and\n * the slash menu send into the conversation on screen (`current-chat`); everything else opens a\n * fresh one. A single launch can still override it (`WorkflowLaunch.landing`).\n */\n landing?: WorkflowLanding\n /**\n * A prompt run on the user's own assistant is sent here instead of through the session's draft:\n * the surface's own chat (`ChatPage`) or its own ask (the document ask). Everything else is the\n * same: the file scope, the workflow's model and its bound tools are set on the session in scope\n * (before a send in place, after a send that opens a fresh chat), so the turn carries them.\n */\n send?: (prompt: string) => void\n}\n\nconst text = (inputs: WorkflowInputs, name: string): string => {\n const v = inputs[name]\n return typeof v === 'string' ? v.trim() : ''\n}\n\nexport function useLaunchWorkflow({\n landing: surfaceLanding,\n send,\n}: UseLaunchWorkflowOptions = {}) {\n const { data: documents = [] } = useDocuments()\n const { data: workspaceTags = [] } = useTags()\n const tags = useMemo(() => documentScopeLabels(workspaceTags), [workspaceTags])\n const createTag = useCreateTag()\n const updateTag = useUpdateTag()\n const generate = useGenerateDocTags()\n const { create: createTask } = useWorkflowTasks()\n const applyModel = useApplyChatModel()\n const session = useArbiSessionStore()\n const { notify, openFiles, openNewConversation } = useBlocksEnvironment()\n\n /** Annotation: create (or reuse) the label, start the AI run, land on Files filtered to the set. */\n const annotate = useCallback(\n async ({ inputs, scope }: WorkflowLaunch) => {\n const description = text(inputs, 'description')\n const name = text(inputs, 'name') || deriveAnnotationName(description)\n const matching = matchWorkflowScope(documents, scope)\n if (!name || !description || matching.length === 0) return\n try {\n // A same-named label is reused rather than duplicated, the rule the Files page's\n // label-creation paths follow.\n const existing = tags.find((t) => t.name.toLowerCase() === name.toLowerCase())\n let tagId: string\n if (existing) {\n tagId = existing.external_id\n await updateTag.mutateAsync({\n tagId: tagId,\n change: { instruction: description },\n })\n } else {\n const created = await createTag.mutateAsync({\n name,\n tagType: { type: 'text', options: [] },\n shared: true,\n instruction: description,\n })\n const createdId = (created as { external_id?: string } | undefined)?.external_id\n if (!createdId) throw new Error('tag create returned no id')\n tagId = createdId\n }\n const docIds = matching.map((d) => d.external_id)\n // overwrite=true so a re-run on an existing field refreshes stale values, matching the\n // Files page's default review behaviour.\n await generate.mutateAsync({ tagIds: [tagId], docIds: docIds, overwrite: true })\n // Land on Files with those documents selected and the view narrowed to the annotated set\n // through the same tri-state quick filter the pickers write to. An empty scope selected\n // every file, so no filter is applied.\n const filters: Record<string, 'include'> = {}\n scope.folders.forEach((folder) => {\n filters[folder === '' ? 'folder:none' : `folder:${folder}`] = 'include'\n })\n scope.labels.forEach((labelId) => {\n filters[labelId] = 'include'\n })\n openFiles({ select: docIds, filters })\n } catch (error) {\n notify('Could not start the annotation', 'error')\n throw error\n }\n },\n [documents, tags, createTag, updateTag, generate, openFiles, notify]\n )\n\n return useCallback(\n async (launch: WorkflowLaunch) => {\n const { workflow, inputs, scope, agentId } = launch\n if (workflow.run.kind === 'operation') {\n if (workflow.id === ANNOTATE_ID) {\n await annotate(launch)\n recordWorkflowUse(workflow.id)\n return\n }\n throw new Error(`No host handler for workflow \"${workflow.id}\"`)\n }\n\n // Names for the wording: a `documents` field quotes the files it picked.\n const documentTitles = Object.fromEntries(\n documents.map((d) => [d.external_id, getDocumentTitle(d, d.external_id)])\n )\n const prompt = composeWorkflowPrompt(workflow, inputs, { documentTitles })\n if (!prompt) return\n recordWorkflowUse(workflow.id)\n\n if (agentId) {\n try {\n const created = await createTask({\n workflow,\n values: {\n assignee: 'agent',\n workflowId: workflow.id,\n inputs,\n when: 'now',\n runAt: '',\n rrule: '',\n timezone: 'UTC',\n eventKind: '',\n afterTaskId: '',\n parentTaskId: '',\n shared: true,\n description: '',\n dueAt: '',\n agentId,\n name: '',\n notifyOnComplete: true,\n access: 'ask_each_run',\n },\n })\n const ran = created.kind === 'work' ? created.ran : null\n const title = created.kind === 'work' ? created.task.title : created.workflow.name\n notify(\n ran === false\n ? 'Task created, but the run could not start'\n : `Running \\u201c${title ?? workflow.title}\\u201d`,\n ran === false ? 'warning' : 'success'\n )\n } catch (error) {\n notify(\n error instanceof Error && error.message.startsWith('Open a workspace')\n ? error.message\n : 'Could not start the run',\n 'error'\n )\n throw error\n }\n return\n }\n\n const landing = launch.landing ?? surfaceLanding ?? workflow.landing\n const inPlace = landing === 'current-chat'\n const binding = PROMPT_BINDINGS[workflow.id]\n /** The run's setup on the session in scope: its file scope, its model, its bound tools. */\n const prepare = () => {\n // Scope the chat to the chosen files when a restriction was made; otherwise the\n // workspace's usual \"all documents\" attachment (useDocumentAutoAdd) applies.\n if (binding?.attachScope !== false && !isEmptyWorkflowScope(scope)) {\n const ids = matchWorkflowScope(documents, scope).map((d) => d.external_id)\n if (ids.length > 0) {\n session.setConversationDocuments(\n inPlace ? (session.getState().conversationId ?? 'new') : 'new',\n ids.map((docId) => ({ docId, isPinned: false }))\n )\n }\n }\n if (workflow.model) void applyModel(workflow.model, `Workflow - ${workflow.title}`)\n // The tools ride the next send of the session in scope.\n session.setPendingTools(binding?.tools?.(inputs) ?? null)\n }\n // A fresh chat's reset clears the draft and the model, so the setup follows it. A surface\n // with its own send sends in its chat (set up first) or opens a fresh one (set up after).\n if (send) {\n if (inPlace) prepare()\n send(prompt)\n if (!inPlace) prepare()\n return\n }\n if (!inPlace) openNewConversation()\n prepare()\n session.setDraft(prompt)\n session.setAutoSendDraft(true)\n },\n [\n annotate,\n applyModel,\n createTask,\n documents,\n surfaceLanding,\n session,\n notify,\n openNewConversation,\n send,\n ]\n )\n}\n","/**\n * The workflow launcher, wired to run what it launches: `ConnectedWorkflowLauncher` (the\n * workspace's files behind scope and file fields, the user's agents behind \"Run as\") with the one\n * launch handler (`useLaunchWorkflow`), the host's upload dialog for adding files\n * (`environment.openUpload`), and the touches of the annotation operation (its derived name and\n * overwrite warning, \"Annotate N documents\").\n *\n * The dashboard's Start band, Files (\"Create new\") and, headless, the slash menu use it.\n */\n\nimport { useTags } from '@arbidocs/react'\nimport { useCallback, useMemo, type ReactNode } from 'react'\nimport { TriangleAlert } from 'lucide-react'\nimport { documentScopeLabels } from '../../agents/workflows/workspaceScope'\nimport {\n type WorkflowDefinition,\n type WorkflowField,\n type WorkflowInputs,\n type WorkflowLanding,\n} from '../../agents/workflows/types'\nimport { ConnectedWorkflowLauncher } from '../ConnectedWorkflowLauncher'\nimport { type StartTile } from '../../home/StartTiles'\nimport { useBlocksEnvironment } from '../../provider/environment'\nimport { useHost } from '../../provider/host'\nimport { deriveAnnotationName } from '../../agents/workflows/catalogue/annotation-name'\nimport { ANNOTATE_ID, renderWorkflowIcon } from '../../agents/workflows/catalogue/seed'\nimport { useLaunchWorkflow } from './useLaunchWorkflow'\n\n// The agent picker names the person it hands the work to: the default \"Run as\" / \"My assistant\"\n// copy did not say who an assistant is.\nconst AGENT_LABELS = { label: 'Who this runs for', myAssistant: 'Me (your own assistant)' }\n\nexport interface ConnectedWorkflowStartProps {\n workflows: WorkflowDefinition[]\n /** Which of `workflows` get a tile (a filtered or capped view). */\n tileWorkflows?: WorkflowDefinition[]\n /** Render the Start band (off when another surface opens the dialog). */\n showTiles?: boolean\n caption?: string\n captionTestId?: string\n testId?: string\n /** Plain tiles appended to the band (e.g. the \"Create a file\" menu). */\n extraTiles?: StartTile[]\n /** Controlled open workflow id. */\n activeId?: string | null\n onActiveIdChange?: (id: string | null) => void\n initialInputsFor?: (workflow: WorkflowDefinition) => Partial<WorkflowInputs> | undefined\n /** Where launches land, over each workflow's default (`current-chat` = the chat on screen). */\n landing?: WorkflowLanding\n /** A prompt run's own send (a chat that is not the session's conversation). See `useLaunchWorkflow`. */\n send?: (prompt: string) => void\n /** The host's own \"Add\" control, offered when a workflow needs files and there are none. */\n addFilesAction?: ReactNode\n tileTestId?: (workflow: WorkflowDefinition) => string | undefined\n disabledReason?: (workflow: WorkflowDefinition) => string | undefined\n}\n\nexport function ConnectedWorkflowStart({\n workflows,\n landing,\n send,\n addFilesAction,\n ...rest\n}: ConnectedWorkflowStartProps) {\n const onLaunch = useLaunchWorkflow({ landing, send })\n // The host's icons first (a skill pack names its own), then the kit's, then the skill icon.\n const hostIcon = useHost().workflows?.renderIcon\n const renderIcon = useCallback(\n (key: string) => hostIcon?.(key) ?? renderWorkflowIcon(key) ?? renderWorkflowIcon('skill'),\n [hostIcon]\n )\n const { openUpload } = useBlocksEnvironment()\n const { data: workspaceTags = [] } = useTags()\n const tags = useMemo(() => documentScopeLabels(workspaceTags), [workspaceTags])\n\n // The annotation's name is optional: left blank it is taken from the question, which the\n // field's placeholder shows before anything runs.\n const fieldPlaceholder = useCallback(\n (field: WorkflowField, inputs: WorkflowInputs, workflow: WorkflowDefinition) => {\n if (workflow.id !== ANNOTATE_ID || field.name !== 'name') return undefined\n const derived = deriveAnnotationName(String(inputs.description ?? ''))\n return derived ? `Otherwise “${derived}”` : 'Taken from the description'\n },\n []\n )\n\n return (\n <ConnectedWorkflowLauncher\n {...rest}\n workflows={workflows}\n onLaunch={onLaunch}\n renderIcon={renderIcon}\n onAddFiles={openUpload}\n agentLabels={AGENT_LABELS}\n addFilesAction={addFilesAction}\n fieldPlaceholder={fieldPlaceholder}\n submitLabel={({ workflow, matchedCount }) =>\n workflow.id === ANNOTATE_ID && matchedCount !== null\n ? `Annotate ${matchedCount} document${matchedCount !== 1 ? 's' : ''}`\n : undefined\n }\n renderNotice={({ workflow, inputs }) => {\n if (workflow.id !== ANNOTATE_ID) return null\n // A same-named label is reused: warn that this overwrites its stored description and the\n // cell values for the selected documents.\n const name =\n String(inputs.name ?? '').trim() || deriveAnnotationName(String(inputs.description ?? ''))\n const existing = name\n ? tags.find((t) => t.name.toLowerCase() === name.toLowerCase())\n : undefined\n if (!existing) return null\n return (\n <div\n className=\"flex items-start gap-2 rounded-md border border-amber-500/40 bg-amber-500/10 px-3 py-2 text-sm text-amber-800 dark:text-amber-200\"\n role=\"status\"\n data-testid=\"workflow-existing-label-warning\"\n >\n <TriangleAlert className=\"mt-0.5 size-4 shrink-0 text-amber-500\" />\n <span>\n An annotation called <span className=\"font-medium\">{existing.name}</span> already\n exists. Annotating will overwrite its description and the current cell values for the\n selected files.\n </span>\n </div>\n )\n }}\n />\n )\n}\n","/**\n * Slash skills are launched prompt-first, through the one workflow launcher.\n *\n * A skill (or a prompt-style built-in such as Deep research) is run WITH a prompt, so it never\n * just executes:\n * - picking it in the slash menu opens its form (the prompt field first, focused, required);\n * - typing `/slug` and pressing Enter opens the same form with the field empty;\n * - typing `/slug some text` and pressing Enter opens it with the text already in the field.\n * The rule is the same for any recognised skill slug as the FIRST token of the draft; a backend\n * command (`/goal`, `/compact`, ...) is never a skill and is sent as typed. Nothing is sent from\n * the composer until the user starts it in the form. Without skills enabled (`show_skills`) this\n * applies to the host's skill packs only (`host.workflows.skillPacks`): the menu lists no other\n * skills and any other `/text` is sent as typed.\n *\n * The run lands where the surface says (`landing`), through the one launch handler. A chat that\n * is not the session's conversation (`ChatPage`, the document ask) passes `send`: the composed\n * prompt then goes to its own send, as a typed message would.\n */\n\nimport { useCallback, useMemo, useState, type ReactNode } from 'react'\nimport { promptFieldName } from '../../agents/workflows/workflow'\nimport { isSkillPackWorkflow } from '../../agents/workflows/skillPack'\nimport { type SlashMenuItem } from '../../chat/SlashMenu'\nimport {\n type WorkflowDefinition,\n type WorkflowInputs,\n type WorkflowLanding,\n} from '../../agents/workflows/types'\nimport { useBuiltinCommands } from '@arbidocs/react'\nimport { ConnectedWorkflowStart } from './ConnectedWorkflowStart'\nimport { useWorkflowDefinitions } from './useWorkflowDefinitions'\n\n/** `/slug` or `/slug rest of the line`: the first token and the text after it. */\nconst TYPED_SKILL = /^\\s*\\/([a-zA-Z0-9][a-zA-Z0-9_-]*)(?:\\s+([\\s\\S]*))?$/\n\n/** What the typed draft names: its slug (lower-cased) and the text after it (trimmed). */\nexport function parseTypedSkill(draft: string): { slug: string; text: string } | null {\n const m = TYPED_SKILL.exec(draft)\n return m ? { slug: m[1].toLowerCase(), text: (m[2] ?? '').trim() } : null\n}\n\n/**\n * Whether a skill opens its form from a menu (the `/` menus, the command palette): a prompt skill,\n * and with skills switched off (`show_skills`) only the host's packs. The one gate both share.\n */\nexport function canOpenSkill(workflow: WorkflowDefinition, skillsEnabled: boolean): boolean {\n return workflow.run.kind === 'prompt' && (skillsEnabled || isSkillPackWorkflow(workflow))\n}\n\nexport interface UseSlashSkillWorkflowsOptions {\n landing: WorkflowLanding\n /** Where the composed prompt goes, for a chat that is not the session's conversation. */\n send?: (prompt: string) => void\n}\n\nexport function useSlashSkillWorkflows({ landing, send }: UseSlashSkillWorkflowsOptions): {\n /** Opens the launcher for a picked menu item. True when it did (the caller then clears the draft). */\n openFor: (item: SlashMenuItem) => boolean\n /**\n * Opens the launcher for a typed `/slug text` draft, text pre-filled. True when the draft names\n * a skill (the caller then clears the draft and sends nothing).\n */\n openForDraft: (draft: string) => boolean\n /**\n * Opens the launcher for a skill by id (a surface listing the skills itself, the command\n * palette). True when it is a skill this person may run here.\n */\n openSkill: (id: string) => boolean\n /** The skills this person may open here: the host's packs, and the rest with `show_skills`. */\n openable: WorkflowDefinition[]\n /** Render once, anywhere in the surface that hosts the slash menu. */\n launcher: ReactNode\n} {\n const { skills, skillsEnabled } = useWorkflowDefinitions()\n const { commands } = useBuiltinCommands()\n const [active, setActive] = useState<{ id: string; text: string } | null>(null)\n\n // Stable while the lists are, so a surface can memoise what it builds on them.\n const open = useCallback(\n (workflow: WorkflowDefinition | undefined, text: string): boolean => {\n if (!workflow || !canOpenSkill(workflow, skillsEnabled)) return false\n setActive({ id: workflow.id, text })\n return true\n },\n [skillsEnabled]\n )\n\n const openFor = useCallback(\n (item: SlashMenuItem): boolean =>\n item.kind === 'skill' &&\n open(\n skills.find((w) => w.id === item.name),\n ''\n ),\n [open, skills]\n )\n\n const openSkill = useCallback(\n (id: string): boolean =>\n open(\n skills.find((w) => w.id === id),\n ''\n ),\n [open, skills]\n )\n\n const openable = useMemo(\n () => skills.filter((w) => canOpenSkill(w, skillsEnabled)),\n [skills, skillsEnabled]\n )\n\n const openForDraft = useCallback(\n (draft: string): boolean => {\n const typed = parseTypedSkill(draft)\n if (!typed) return false\n // A backend command wins a name collision, as in the menu: it is sent as typed.\n if (commands.some((c) => c.name.toLowerCase() === typed.slug)) return false\n return open(\n skills.find((w) => w.id.toLowerCase() === typed.slug),\n typed.text\n )\n },\n [open, skills, commands]\n )\n\n // Mounted only while a workflow is open: the ask bar lives in every page's topbar, so the\n // launcher's data hooks (files, agents, tasks) must not run until it is needed.\n const launcher = useMemo(() => {\n if (active === null) return null\n const initialInputsFor = (\n workflow: WorkflowDefinition\n ): Partial<WorkflowInputs> | undefined => {\n const field = promptFieldName(workflow)\n return field && active.text ? { [field]: active.text } : undefined\n }\n return (\n <ConnectedWorkflowStart\n workflows={skills}\n showTiles={false}\n landing={landing}\n send={send}\n activeId={active.id}\n onActiveIdChange={(id) => id === null && setActive(null)}\n initialInputsFor={initialInputsFor}\n />\n )\n }, [active, skills, landing, send])\n\n return { openFor, openForDraft, openSkill, openable, launcher }\n}\n","/**\n * The slash menu's data, in one place for every surface that hosts it (the chat composers, the\n * workspace ask bar, the document ask and `ChatPage`): the backend's built-in commands, the host's\n * skill packs and the user's skills, filtered by the slash token in progress. Commands and the\n * user's skills are typed `/<slug>` and dispatched by the backend; a skill opens its form\n * (`useSlashSkillWorkflows`).\n */\n\nimport { useMemo } from 'react'\nimport { useBuiltinCommands } from '@arbidocs/react'\nimport type { SlashMenuItem } from '../../chat/SlashMenu'\nimport { buildSlashItems, filterSlashItems, parseSlashToken } from '../../chat/slash-menu-helpers'\nimport { mergeSkillWorkflows } from '../../agents/workflows/workflow'\nimport type { WorkflowDefinition } from '../../agents/workflows/types'\nimport { useCanBrowseSkills, useSkillsEnabled } from '../workflows/useSkillsEnabled'\nimport { hostSkillItem, useHostSkills } from '../workflows/useHostSkills'\nimport { useUsableSkillListings } from '../workflows/useWorkflowDefinitions'\nimport { useNamedWorkflows } from '../workflows/useNamedWorkflows'\n\nconst NO_SKILLS: ReadonlyArray<WorkflowDefinition> = []\n\n/**\n * Every row of the menu, unfiltered: commands, then the host's packs (always: the host offers\n * them), then, for skills users (`show_skills`), the built-in skills and the user's own.\n *\n * @param builtinSkills The built-in skills to offer (prompt workflows offered as `/slug`), for a\n * surface that can open their form; default none.\n */\nexport function useSlashMenuItems(builtinSkills: ReadonlyArray<WorkflowDefinition> = NO_SKILLS): {\n items: SlashMenuItem[]\n /** The menu's \"Browse all\" footer opens the Skills browser: skills users, never guests. */\n canBrowseSkills: boolean\n} {\n const hostSkills = useHostSkills()\n const listings = useUsableSkillListings(hostSkills)\n const skillsEnabled = useSkillsEnabled()\n const { commands } = useBuiltinCommands()\n const builtins = useNamedWorkflows(builtinSkills)\n const items = useMemo<SlashMenuItem[]>(() => {\n const packSlugs = new Set(hostSkills.map((w) => w.id))\n return buildSlashItems(\n commands.map((c) => ({\n name: c.name,\n description: c.description,\n argHint: c.arg_hint,\n kind: 'command' as const,\n })),\n [\n ...hostSkills.map(hostSkillItem),\n ...(skillsEnabled\n ? skillItems(\n builtins.filter((w) => !packSlugs.has(w.id)),\n listings\n )\n : []),\n ]\n )\n }, [commands, hostSkills, listings, skillsEnabled, builtins])\n return { items, canBrowseSkills: useCanBrowseSkills() }\n}\n\n/**\n * @param text The draft.\n * @param builtinSkills The built-in skills (prompt workflows offered as `/slug`).\n */\nexport function useSlashItems(\n text: string,\n builtinSkills: ReadonlyArray<WorkflowDefinition> = NO_SKILLS\n) {\n const { items, canBrowseSkills } = useSlashMenuItems(builtinSkills)\n const slashToken = parseSlashToken(text)\n const filteredItems = useMemo(\n () => (slashToken !== null ? filterSlashItems(items, slashToken) : []),\n [items, slashToken]\n )\n return {\n slashToken,\n filteredItems,\n isOpen: slashToken !== null && filteredItems.length > 0,\n canBrowseSkills,\n }\n}\n\ntype SkillListings = ReturnType<typeof useUsableSkillListings>\n\n/**\n * Built-in skills share the list and the `/slug` path; a same-slug skill of the user's own shadows\n * the built-in, as on the backend.\n */\nfunction skillItems(\n builtinSkills: ReadonlyArray<WorkflowDefinition>,\n listings: SkillListings\n): SlashMenuItem[] {\n const { host, skills } = mergeSkillWorkflows([...builtinSkills], listings)\n const listing = new Map(listings.map((s) => [s.slug, s]))\n return [\n ...host.map((w): SlashMenuItem => ({\n name: w.id,\n description: w.description,\n argHint: w.inputs[0]?.label ?? '',\n visibility: 'global',\n kind: 'skill',\n })),\n ...skills.map((w): SlashMenuItem => {\n const s = listing.get(w.id)\n return {\n name: w.id,\n description: s?.description || (w.title !== w.id ? w.title : ''),\n argHint: s?.arg_hint ?? '',\n visibility: s?.visibility === 'global' ? 'global' : 'mine',\n kind: 'skill',\n }\n }),\n ]\n}\n"]}
1
+ {"version":3,"sources":["../src/connection/workflows/launch-bindings.ts","../src/connection/workflows/useLaunchWorkflow.ts","../src/connection/workflows/ConnectedWorkflowStart.tsx","../src/connection/workflows/useSlashSkillWorkflows.tsx","../src/connection/conversation/useSlashItems.ts"],"names":["GENERATE_IMAGE_ID","buildRetrievalChunkTool","buildRetrievalFullContextTool","IMAGE_ASPECT_AUTO","useDocuments","useTags","useMemo","documentScopeLabels","useCreateTag","useUpdateTag","useGenerateDocTags","useWorkflowTasks","useApplyChatModel","useArbiSessionStore","useBlocksEnvironment","useCallback","deriveAnnotationName","matchWorkflowScope","ANNOTATE_ID","recordWorkflowUse","getDocumentTitle","composeWorkflowPrompt","isEmptyWorkflowScope","useHost","renderWorkflowIcon","jsx","ConnectedWorkflowLauncher","jsxs","TriangleAlert","isSkillPackWorkflow","useWorkflowDefinitions","useBuiltinCommands","useState","text","promptFieldName","useHostSkills","useUsableSkillListings","useSkillsEnabled","useNamedWorkflows","buildSlashItems","hostSkillItem","useCanBrowseSkills","parseSlashTokenInProgress","filterSlashItems","mergeSkillWorkflows"],"mappings":";;;;;;;;;;;;;;;;;AAwBA,IAAM,YAAA,GAAe,CAAC,MAAA,KAAqC;AACzD,EAAA,MAAM,QAAQ,MAAA,CAAO,UAAA;AACrB,EAAA,OAAO,KAAA,EAAO,aAAa,EAAC;AAC9B,CAAA;AAEO,IAAM,eAAA,GAAiD;AAAA,EAC5D,CAACA,mCAAiB,GAAG;AAAA,IACnB,WAAA,EAAa,KAAA;AAAA,IACb,KAAA,EAAO,CAAC,MAAA,KAAW;AACjB,MAAA,MAAM,cAAc,OAAO,MAAA,CAAO,YAAA,KAAiB,QAAA,GAAW,OAAO,YAAA,GAAe,EAAA;AACpF,MAAA,OAAO;AAAA,QACL,eAAA,EAAiBC,+BAAA,CAAwB,EAAE,CAAA;AAAA,QAC3C,sBAAA,EAAwBC,qCAAA,CAA8B,YAAA,CAAa,MAAM,CAAC,CAAA;AAAA,QAC1E,GAAI,WAAA,IAAe,WAAA,KAAgBC,mCAAA,GAC/B;AAAA,UACE,gBAAA,EAAkB;AAAA,YAChB,IAAA,EAAM,kBAAA;AAAA,YACN,WAAA,EAAa,kBAAA;AAAA,YACb,SAAA,EAAW,EAAE,YAAA,EAAc,WAAA,EAAY;AAAA,YACvC,gBAAgB;AAAC;AACnB,YAEF;AAAC,OACP;AAAA,IACF;AAAA;AAEJ;ACQA,IAAM,IAAA,GAAO,CAAC,MAAA,EAAwB,IAAA,KAAyB;AAC7D,EAAA,MAAM,CAAA,GAAI,OAAO,IAAI,CAAA;AACrB,EAAA,OAAO,OAAO,CAAA,KAAM,QAAA,GAAW,CAAA,CAAE,MAAK,GAAI,EAAA;AAC5C,CAAA;AAEO,SAAS,iBAAA,CAAkB;AAAA,EAChC,OAAA,EAAS,cAAA;AAAA,EACT;AACF,CAAA,GAA8B,EAAC,EAAG;AAChC,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,GAAY,EAAC,KAAMC,kBAAA,EAAa;AAC9C,EAAA,MAAM,EAAE,IAAA,EAAM,aAAA,GAAgB,EAAC,KAAMC,aAAA,EAAQ;AAC7C,EAAA,MAAM,IAAA,GAAOC,gBAAQ,MAAMC,qCAAA,CAAoB,aAAa,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAC9E,EAAA,MAAM,YAAYC,kBAAA,EAAa;AAC/B,EAAA,MAAM,YAAYC,kBAAA,EAAa;AAC/B,EAAA,MAAM,WAAWC,wBAAA,EAAmB;AACpC,EAAA,MAAM,EAAE,MAAA,EAAQ,UAAA,EAAW,GAAIC,kCAAA,EAAiB;AAChD,EAAA,MAAM,aAAaC,uBAAA,EAAkB;AACrC,EAAA,MAAM,UAAUC,yBAAA,EAAoB;AACpC,EAAA,MAAM,EAAE,MAAA,EAAQ,SAAA,EAAW,mBAAA,KAAwBC,sCAAA,EAAqB;AAGxE,EAAA,MAAM,QAAA,GAAWC,mBAAA;AAAA,IACf,OAAO,EAAE,MAAA,EAAQ,KAAA,EAAM,KAAsB;AAC3C,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,MAAA,EAAQ,aAAa,CAAA;AAC9C,MAAA,MAAM,OAAO,IAAA,CAAK,MAAA,EAAQ,MAAM,CAAA,IAAKC,uCAAqB,WAAW,CAAA;AACrE,MAAA,MAAM,QAAA,GAAWC,oCAAA,CAAmB,SAAA,EAAW,KAAK,CAAA;AACpD,MAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,WAAA,IAAe,QAAA,CAAS,WAAW,CAAA,EAAG;AACpD,MAAA,IAAI;AAGF,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,CAAK,WAAA,EAAY,KAAM,IAAA,CAAK,WAAA,EAAa,CAAA;AAC7E,QAAA,IAAI,KAAA;AACJ,QAAA,IAAI,QAAA,EAAU;AACZ,UAAA,KAAA,GAAQ,QAAA,CAAS,WAAA;AACjB,UAAA,MAAM,UAAU,WAAA,CAAY;AAAA,YAC1B,KAAA;AAAA,YACA,MAAA,EAAQ,EAAE,WAAA,EAAa,WAAA;AAAY,WACpC,CAAA;AAAA,QACH,CAAA,MAAO;AACL,UAAA,MAAM,OAAA,GAAU,MAAM,SAAA,CAAU,WAAA,CAAY;AAAA,YAC1C,IAAA;AAAA,YACA,SAAS,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,EAAC,EAAE;AAAA,YACrC,MAAA,EAAQ,IAAA;AAAA,YACR,WAAA,EAAa;AAAA,WACd,CAAA;AACD,UAAA,MAAM,YAAa,OAAA,EAAkD,WAAA;AACrE,UAAA,IAAI,CAAC,SAAA,EAAW,MAAM,IAAI,MAAM,2BAA2B,CAAA;AAC3D,UAAA,KAAA,GAAQ,SAAA;AAAA,QACV;AACA,QAAA,MAAM,SAAS,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,WAAW,CAAA;AAGhD,QAAA,MAAM,QAAA,CAAS,WAAA,CAAY,EAAE,MAAA,EAAQ,CAAC,KAAK,CAAA,EAAG,MAAA,EAAgB,SAAA,EAAW,IAAA,EAAM,CAAA;AAI/E,QAAA,MAAM,UAAqC,EAAC;AAC5C,QAAA,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,CAAC,MAAA,KAAW;AAChC,UAAA,OAAA,CAAQ,WAAW,EAAA,GAAK,aAAA,GAAgB,CAAA,OAAA,EAAU,MAAM,EAAE,CAAA,GAAI,SAAA;AAAA,QAChE,CAAC,CAAA;AACD,QAAA,KAAA,CAAM,MAAA,CAAO,OAAA,CAAQ,CAAC,OAAA,KAAY;AAChC,UAAA,OAAA,CAAQ,OAAO,CAAA,GAAI,SAAA;AAAA,QACrB,CAAC,CAAA;AACD,QAAA,SAAA,CAAU,EAAE,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS,CAAA;AAAA,MACvC,SAAS,KAAA,EAAO;AACd,QAAA,MAAA,CAAO,kCAAkC,OAAO,CAAA;AAChD,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF,CAAA;AAAA,IACA,CAAC,SAAA,EAAW,IAAA,EAAM,WAAW,SAAA,EAAW,QAAA,EAAU,WAAW,MAAM;AAAA,GACrE;AAEA,EAAA,OAAOF,mBAAA;AAAA,IACL,OAAO,MAAA,KAA2B;AAChC,MAAA,MAAM,EAAE,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,SAAQ,GAAI,MAAA;AAC7C,MAAA,IAAI,QAAA,CAAS,GAAA,CAAI,IAAA,KAAS,WAAA,EAAa;AACrC,QAAA,IAAI,QAAA,CAAS,OAAOG,6BAAA,EAAa;AAC/B,UAAA,MAAM,SAAS,MAAM,CAAA;AACrB,UAAAC,mCAAA,CAAkB,SAAS,EAAE,CAAA;AAC7B,UAAA;AAAA,QACF;AACA,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,8BAAA,EAAiC,QAAA,CAAS,EAAE,CAAA,CAAA,CAAG,CAAA;AAAA,MACjE;AAGA,MAAA,MAAM,iBAAiB,MAAA,CAAO,WAAA;AAAA,QAC5B,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,WAAA,EAAaC,mBAAA,CAAiB,CAAA,EAAG,CAAA,CAAE,WAAW,CAAC,CAAC;AAAA,OAC1E;AACA,MAAA,MAAM,SAASC,uCAAA,CAAsB,QAAA,EAAU,MAAA,EAAQ,EAAE,gBAAgB,CAAA;AACzE,MAAA,IAAI,CAAC,MAAA,EAAQ;AACb,MAAAF,mCAAA,CAAkB,SAAS,EAAE,CAAA;AAE7B,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,IAAI;AACF,UAAA,MAAM,OAAA,GAAU,MAAM,UAAA,CAAW;AAAA,YAC/B,QAAA;AAAA,YACA,MAAA,EAAQ;AAAA,cACN,QAAA,EAAU,OAAA;AAAA,cACV,YAAY,QAAA,CAAS,EAAA;AAAA,cACrB,MAAA;AAAA,cACA,IAAA,EAAM,KAAA;AAAA,cACN,KAAA,EAAO,EAAA;AAAA,cACP,KAAA,EAAO,EAAA;AAAA,cACP,QAAA,EAAU,KAAA;AAAA,cACV,SAAA,EAAW,EAAA;AAAA,cACX,WAAA,EAAa,EAAA;AAAA,cACb,YAAA,EAAc,EAAA;AAAA,cACd,MAAA,EAAQ,IAAA;AAAA,cACR,WAAA,EAAa,EAAA;AAAA,cACb,KAAA,EAAO,EAAA;AAAA,cACP,OAAA;AAAA,cACA,IAAA,EAAM,EAAA;AAAA,cACN,gBAAA,EAAkB,IAAA;AAAA,cAClB,MAAA,EAAQ;AAAA;AACV,WACD,CAAA;AACD,UAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,IAAA,KAAS,MAAA,GAAS,QAAQ,GAAA,GAAM,IAAA;AACpD,UAAA,MAAM,KAAA,GAAQ,QAAQ,IAAA,KAAS,MAAA,GAAS,QAAQ,IAAA,CAAK,KAAA,GAAQ,QAAQ,QAAA,CAAS,IAAA;AAC9E,UAAA,MAAA;AAAA,YACE,QAAQ,KAAA,GACJ,2CAAA,GACA,CAAA,cAAA,EAAiB,KAAA,IAAS,SAAS,KAAK,CAAA,MAAA,CAAA;AAAA,YAC5C,GAAA,KAAQ,QAAQ,SAAA,GAAY;AAAA,WAC9B;AAAA,QACF,SAAS,KAAA,EAAO;AACd,UAAA,MAAA;AAAA,YACE,KAAA,YAAiB,SAAS,KAAA,CAAM,OAAA,CAAQ,WAAW,kBAAkB,CAAA,GACjE,MAAM,OAAA,GACN,yBAAA;AAAA,YACJ;AAAA,WACF;AACA,UAAA,MAAM,KAAA;AAAA,QACR;AACA,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,IAAW,cAAA,IAAkB,QAAA,CAAS,OAAA;AAC7D,MAAA,MAAM,UAAU,OAAA,KAAY,cAAA;AAC5B,MAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,QAAA,CAAS,EAAE,CAAA;AAE3C,MAAA,MAAM,UAAU,MAAM;AAGpB,QAAA,IAAI,SAAS,WAAA,KAAgB,KAAA,IAAS,CAACG,sCAAA,CAAqB,KAAK,CAAA,EAAG;AAClE,UAAA,MAAM,GAAA,GAAML,qCAAmB,SAAA,EAAW,KAAK,EAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAA;AACzE,UAAA,IAAI,GAAA,CAAI,SAAS,CAAA,EAAG;AAClB,YAAA,OAAA,CAAQ,wBAAA;AAAA,cACN,OAAA,GAAW,OAAA,CAAQ,QAAA,EAAS,CAAE,kBAAkB,KAAA,GAAS,KAAA;AAAA,cACzD,GAAA,CAAI,IAAI,CAAC,KAAA,MAAW,EAAE,KAAA,EAAO,QAAA,EAAU,OAAM,CAAE;AAAA,aACjD;AAAA,UACF;AAAA,QACF;AACA,QAAA,IAAI,QAAA,CAAS,OAAO,KAAK,UAAA,CAAW,SAAS,KAAA,EAAO,CAAA,WAAA,EAAc,QAAA,CAAS,KAAK,CAAA,CAAE,CAAA;AAElF,QAAA,OAAA,CAAQ,eAAA,CAAgB,OAAA,EAAS,KAAA,GAAQ,MAAM,KAAK,IAAI,CAAA;AAAA,MAC1D,CAAA;AAGA,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,IAAI,SAAS,OAAA,EAAQ;AACrB,QAAA,IAAA,CAAK,MAAM,CAAA;AACX,QAAA,IAAI,CAAC,SAAS,OAAA,EAAQ;AACtB,QAAA;AAAA,MACF;AACA,MAAA,IAAI,CAAC,SAAS,mBAAA,EAAoB;AAClC,MAAA,OAAA,EAAQ;AACR,MAAA,OAAA,CAAQ,SAAS,MAAM,CAAA;AACvB,MAAA,OAAA,CAAQ,iBAAiB,IAAI,CAAA;AAAA,IAC/B,CAAA;AAAA,IACA;AAAA,MACE,QAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA,cAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAA;AAAA,MACA,mBAAA;AAAA,MACA;AAAA;AACF,GACF;AACF;ACjNA,IAAM,YAAA,GAAe,EAAE,KAAA,EAAO,mBAAA,EAAqB,aAAa,yBAAA,EAA0B;AA2BnF,SAAS,sBAAA,CAAuB;AAAA,EACrC,SAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,cAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAgC;AAC9B,EAAA,MAAM,QAAA,GAAW,iBAAA,CAAkB,EAAE,OAAA,EAAS,MAAM,CAAA;AAEpD,EAAA,MAAM,QAAA,GAAWM,yBAAA,EAAQ,CAAE,SAAA,EAAW,UAAA;AACtC,EAAA,MAAM,UAAA,GAAaR,mBAAAA;AAAA,IACjB,CAAC,QAAgB,QAAA,GAAW,GAAG,KAAKS,oCAAA,CAAmB,GAAG,CAAA,IAAKA,oCAAA,CAAmB,OAAO,CAAA;AAAA,IACzF,CAAC,QAAQ;AAAA,GACX;AACA,EAAA,MAAM,EAAE,UAAA,EAAW,GAAIV,sCAAA,EAAqB;AAC5C,EAAA,MAAM,EAAE,IAAA,EAAM,aAAA,GAAgB,EAAC,KAAMT,aAAAA,EAAQ;AAC7C,EAAA,MAAM,IAAA,GAAOC,gBAAQ,MAAMC,qCAAA,CAAoB,aAAa,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAI9E,EAAA,MAAM,gBAAA,GAAmBQ,mBAAAA;AAAA,IACvB,CAAC,KAAA,EAAsB,MAAA,EAAwB,QAAA,KAAiC;AAC9E,MAAA,IAAI,SAAS,EAAA,KAAOG,6BAAA,IAAe,KAAA,CAAM,IAAA,KAAS,QAAQ,OAAO,MAAA;AACjE,MAAA,MAAM,UAAUF,sCAAA,CAAqB,MAAA,CAAO,MAAA,CAAO,WAAA,IAAe,EAAE,CAAC,CAAA;AACrE,MAAA,OAAO,OAAA,GAAU,CAAA,gBAAA,EAAc,OAAO,CAAA,MAAA,CAAA,GAAM,4BAAA;AAAA,IAC9C,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,uBACES,cAAA;AAAA,IAACC,2CAAA;AAAA,IAAA;AAAA,MACE,GAAG,IAAA;AAAA,MACJ,SAAA;AAAA,MACA,QAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA,EAAY,UAAA;AAAA,MACZ,WAAA,EAAa,YAAA;AAAA,MACb,cAAA;AAAA,MACA,gBAAA;AAAA,MACA,aAAa,CAAC,EAAE,UAAU,YAAA,EAAa,KACrC,SAAS,EAAA,KAAOR,6BAAA,IAAe,YAAA,KAAiB,IAAA,GAC5C,YAAY,YAAY,CAAA,SAAA,EAAY,iBAAiB,CAAA,GAAI,GAAA,GAAM,EAAE,CAAA,CAAA,GACjE,MAAA;AAAA,MAEN,YAAA,EAAc,CAAC,EAAE,QAAA,EAAU,QAAO,KAAM;AACtC,QAAA,IAAI,QAAA,CAAS,EAAA,KAAOA,6BAAA,EAAa,OAAO,IAAA;AAGxC,QAAA,MAAM,IAAA,GACJ,MAAA,CAAO,MAAA,CAAO,IAAA,IAAQ,EAAE,CAAA,CAAE,IAAA,EAAK,IAAKF,sCAAA,CAAqB,MAAA,CAAO,MAAA,CAAO,WAAA,IAAe,EAAE,CAAC,CAAA;AAC3F,QAAA,MAAM,QAAA,GAAW,IAAA,GACb,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,CAAK,WAAA,EAAY,KAAM,IAAA,CAAK,WAAA,EAAa,CAAA,GAC5D,MAAA;AACJ,QAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AACtB,QAAA,uBACEW,eAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,mIAAA;AAAA,YACV,IAAA,EAAK,QAAA;AAAA,YACL,aAAA,EAAY,iCAAA;AAAA,YAEZ,QAAA,EAAA;AAAA,8BAAAF,cAAA,CAACG,yBAAA,EAAA,EAAc,WAAU,uCAAA,EAAwC,CAAA;AAAA,8CAChE,MAAA,EAAA,EAAK,QAAA,EAAA;AAAA,gBAAA,uBAAA;AAAA,gCACiBH,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAe,mBAAS,IAAA,EAAK,CAAA;AAAA,gBAAO;AAAA,eAAA,EAG3E;AAAA;AAAA;AAAA,SACF;AAAA,MAEJ;AAAA;AAAA,GACF;AAEJ;AC/FA,IAAM,WAAA,GAAc,qDAAA;AAGb,SAAS,gBAAgB,KAAA,EAAsD;AACpF,EAAA,MAAM,CAAA,GAAI,WAAA,CAAY,IAAA,CAAK,KAAK,CAAA;AAChC,EAAA,OAAO,CAAA,GAAI,EAAE,IAAA,EAAM,CAAA,CAAE,CAAC,CAAA,CAAE,WAAA,EAAY,EAAG,IAAA,EAAA,CAAO,EAAE,CAAC,CAAA,IAAK,EAAA,EAAI,IAAA,IAAO,GAAI,IAAA;AACvE;AAMO,SAAS,YAAA,CAAa,UAA8B,aAAA,EAAiC;AAC1F,EAAA,OAAO,SAAS,GAAA,CAAI,IAAA,KAAS,QAAA,KAAa,aAAA,IAAiBI,sCAAoB,QAAQ,CAAA,CAAA;AACzF;AAQO,SAAS,sBAAA,CAAuB,EAAE,OAAA,EAAS,IAAA,EAAK,EAiBrD;AACA,EAAA,MAAM,EAAE,MAAA,EAAQ,aAAA,EAAc,GAAIC,wCAAA,EAAuB;AACzD,EAAA,MAAM,EAAE,QAAA,EAAS,GAAIC,wBAAA,EAAmB;AACxC,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIC,iBAA8C,IAAI,CAAA;AAG9E,EAAA,MAAM,IAAA,GAAOjB,mBAAAA;AAAA,IACX,CAAC,UAA0CkB,KAAAA,KAA0B;AACnE,MAAA,IAAI,CAAC,QAAA,IAAY,CAAC,aAAa,QAAA,EAAU,aAAa,GAAG,OAAO,KAAA;AAChE,MAAA,SAAA,CAAU,EAAE,EAAA,EAAI,QAAA,CAAS,EAAA,EAAI,IAAA,EAAAA,OAAM,CAAA;AACnC,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,CAAC,aAAa;AAAA,GAChB;AAEA,EAAA,MAAM,OAAA,GAAUlB,mBAAAA;AAAA,IACd,CAAC,IAAA,KACC,IAAA,CAAK,IAAA,KAAS,OAAA,IACd,IAAA;AAAA,MACE,OAAO,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,EAAA,KAAO,KAAK,IAAI,CAAA;AAAA,MACrC;AAAA,KACF;AAAA,IACF,CAAC,MAAM,MAAM;AAAA,GACf;AAEA,EAAA,MAAM,SAAA,GAAYA,mBAAAA;AAAA,IAChB,CAAC,EAAA,KACC,IAAA;AAAA,MACE,OAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,EAAE,CAAA;AAAA,MAC9B;AAAA,KACF;AAAA,IACF,CAAC,MAAM,MAAM;AAAA,GACf;AAEA,EAAA,MAAM,QAAA,GAAWT,eAAAA;AAAA,IACf,MAAM,OAAO,MAAA,CAAO,CAAC,MAAM,YAAA,CAAa,CAAA,EAAG,aAAa,CAAC,CAAA;AAAA,IACzD,CAAC,QAAQ,aAAa;AAAA,GACxB;AAEA,EAAA,MAAM,YAAA,GAAeS,mBAAAA;AAAA,IACnB,CAAC,KAAA,KAA2B;AAC1B,MAAA,MAAM,KAAA,GAAQ,gBAAgB,KAAK,CAAA;AACnC,MAAA,IAAI,CAAC,OAAO,OAAO,KAAA;AAEnB,MAAA,IAAI,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,CAAK,WAAA,EAAY,KAAM,KAAA,CAAM,IAAI,CAAA,EAAG,OAAO,KAAA;AACtE,MAAA,OAAO,IAAA;AAAA,QACL,MAAA,CAAO,KAAK,CAAC,CAAA,KAAM,EAAE,EAAA,CAAG,WAAA,EAAY,KAAM,KAAA,CAAM,IAAI,CAAA;AAAA,QACpD,KAAA,CAAM;AAAA,OACR;AAAA,IACF,CAAA;AAAA,IACA,CAAC,IAAA,EAAM,MAAA,EAAQ,QAAQ;AAAA,GACzB;AAIA,EAAA,MAAM,QAAA,GAAWT,gBAAQ,MAAM;AAC7B,IAAA,IAAI,MAAA,KAAW,MAAM,OAAO,IAAA;AAC5B,IAAA,MAAM,gBAAA,GAAmB,CACvB,QAAA,KACwC;AACxC,MAAA,MAAM,KAAA,GAAQ4B,kCAAgB,QAAQ,CAAA;AACtC,MAAA,OAAO,KAAA,IAAS,OAAO,IAAA,GAAO,EAAE,CAAC,KAAK,GAAG,MAAA,CAAO,IAAA,EAAK,GAAI,MAAA;AAAA,IAC3D,CAAA;AACA,IAAA,uBACET,cAAAA;AAAA,MAAC,sBAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,MAAA;AAAA,QACX,SAAA,EAAW,KAAA;AAAA,QACX,OAAA;AAAA,QACA,IAAA;AAAA,QACA,UAAU,MAAA,CAAO,EAAA;AAAA,QACjB,kBAAkB,CAAC,EAAA,KAAO,EAAA,KAAO,IAAA,IAAQ,UAAU,IAAI,CAAA;AAAA,QACvD;AAAA;AAAA,KACF;AAAA,EAEJ,GAAG,CAAC,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS,IAAI,CAAC,CAAA;AAElC,EAAA,OAAO,EAAE,OAAA,EAAS,YAAA,EAAc,SAAA,EAAW,UAAU,QAAA,EAAS;AAChE;AClIA,IAAM,YAA+C,EAAC;AAS/C,SAAS,iBAAA,CAAkB,gBAAmD,SAAA,EAInF;AACA,EAAA,MAAM,aAAaU,+BAAA,EAAc;AACjC,EAAA,MAAM,QAAA,GAAWC,yCAAuB,UAAU,CAAA;AAClD,EAAA,MAAM,gBAAgBC,kCAAA,EAAiB;AACvC,EAAA,MAAM,EAAE,QAAA,EAAS,GAAIN,wBAAAA,EAAmB;AACxC,EAAA,MAAM,QAAA,GAAWO,oCAAkB,aAAa,CAAA;AAChD,EAAA,MAAM,KAAA,GAAQhC,gBAAyB,MAAM;AAC3C,IAAA,MAAM,SAAA,GAAY,IAAI,GAAA,CAAI,UAAA,CAAW,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAC,CAAA;AACrD,IAAA,OAAOiC,iCAAA;AAAA,MACL,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,QACnB,MAAM,CAAA,CAAE,IAAA;AAAA,QACR,aAAa,CAAA,CAAE,WAAA;AAAA,QACf,SAAS,CAAA,CAAE,QAAA;AAAA,QACX,IAAA,EAAM;AAAA,OACR,CAAE,CAAA;AAAA,MACF;AAAA,QACE,GAAG,UAAA,CAAW,GAAA,CAAIC,+BAAa,CAAA;AAAA,QAC/B,GAAI,aAAA,GACA,UAAA;AAAA,UACE,QAAA,CAAS,OAAO,CAAC,CAAA,KAAM,CAAC,SAAA,CAAU,GAAA,CAAI,CAAA,CAAE,EAAE,CAAC,CAAA;AAAA,UAC3C;AAAA,YAEF;AAAC;AACP,KACF;AAAA,EACF,GAAG,CAAC,QAAA,EAAU,YAAY,QAAA,EAAU,aAAA,EAAe,QAAQ,CAAC,CAAA;AAC5D,EAAA,OAAO,EAAE,KAAA,EAAO,eAAA,EAAiBC,oCAAA,EAAmB,EAAE;AACxD;AAMO,SAAS,aAAA,CACdR,KAAAA,EACA,aAAA,GAAmD,SAAA,EACnD;AACA,EAAA,MAAM,EAAE,KAAA,EAAO,eAAA,EAAgB,GAAI,kBAAkB,aAAa,CAAA;AAClE,EAAA,MAAM,UAAA,GAAaS,4CAAgBT,KAAI,CAAA;AACvC,EAAA,MAAM,aAAA,GAAgB3B,eAAAA;AAAA,IACpB,MAAO,UAAA,KAAe,IAAA,GAAOqC,mCAAiB,KAAA,EAAO,UAAU,IAAI,EAAC;AAAA,IACpE,CAAC,OAAO,UAAU;AAAA,GACpB;AACA,EAAA,OAAO;AAAA,IACL,UAAA;AAAA,IACA,aAAA;AAAA,IACA,MAAA,EAAQ,UAAA,KAAe,IAAA,IAAQ,aAAA,CAAc,MAAA,GAAS,CAAA;AAAA,IACtD;AAAA,GACF;AACF;AAQA,SAAS,UAAA,CACP,eACA,QAAA,EACiB;AACjB,EAAA,MAAM,EAAE,MAAM,MAAA,EAAO,GAAIC,sCAAoB,CAAC,GAAG,aAAa,CAAA,EAAG,QAAQ,CAAA;AACzE,EAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,IAAA,EAAM,CAAC,CAAC,CAAC,CAAA;AACxD,EAAA,OAAO;AAAA,IACL,GAAG,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,MAAsB;AAAA,MACjC,MAAM,CAAA,CAAE,EAAA;AAAA,MACR,aAAa,CAAA,CAAE,WAAA;AAAA,MACf,OAAA,EAAS,CAAA,CAAE,MAAA,CAAO,CAAC,GAAG,KAAA,IAAS,EAAA;AAAA,MAC/B,UAAA,EAAY,QAAA;AAAA,MACZ,IAAA,EAAM;AAAA,KACR,CAAE,CAAA;AAAA,IACF,GAAG,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAqB;AAClC,MAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA;AAC1B,MAAA,OAAO;AAAA,QACL,MAAM,CAAA,CAAE,EAAA;AAAA,QACR,WAAA,EAAa,GAAG,WAAA,KAAgB,CAAA,CAAE,UAAU,CAAA,CAAE,EAAA,GAAK,EAAE,KAAA,GAAQ,EAAA,CAAA;AAAA,QAC7D,OAAA,EAAS,GAAG,QAAA,IAAY,EAAA;AAAA,QACxB,UAAA,EAAY,CAAA,EAAG,UAAA,KAAe,QAAA,GAAW,QAAA,GAAW,MAAA;AAAA,QACpD,IAAA,EAAM;AAAA,OACR;AAAA,IACF,CAAC;AAAA,GACH;AACF","file":"chunk-7V6APLF7.cjs","sourcesContent":["/**\n * Host bindings of prompt workflows that need more than words on send. Bound by workflow id, the\n * same way the annotation operation is: blocks and the registry stay declarative, and the one\n * place that knows the wire shape is here.\n *\n * Generate image: the reference images and the aspect ratio ride structured tool arguments\n * (`retrieval_full_context` over every reference, `image_generation.aspect_ratio`), never the\n * prompt text: the image model does not reliably honour a shape or sources worded into the prompt,\n * and the references go to the separate image model in its own request, so (unlike the app's\n * one-at-a-time pinned document) several of them do not compound against the agent's context.\n */\n\nimport type { WorkflowInputs, WorkflowScope } from '../../agents/workflows/types'\nimport { buildRetrievalChunkTool, buildRetrievalFullContextTool } from '@arbidocs/sdk/browser'\nimport type { TurnTools } from '@arbidocs/react'\nimport { GENERATE_IMAGE_ID, IMAGE_ASPECT_AUTO } from '../../agents/workflows/catalogue/seed'\n\nexport interface PromptBinding {\n /** Attach the scoped files to the chat (default true). Off when the files are tool inputs. */\n attachScope: boolean\n /** Structured tools for the one send, from the form's inputs. */\n tools?: (inputs: WorkflowInputs) => TurnTools\n}\n\nconst referencesOf = (inputs: WorkflowInputs): string[] => {\n const value = inputs.references as WorkflowScope | undefined\n return value?.documents ?? []\n}\n\nexport const PROMPT_BINDINGS: Record<string, PromptBinding> = {\n [GENERATE_IMAGE_ID]: {\n attachScope: false,\n tools: (inputs) => {\n const aspectRatio = typeof inputs.aspect_ratio === 'string' ? inputs.aspect_ratio : ''\n return {\n retrieval_chunk: buildRetrievalChunkTool([]),\n retrieval_full_context: buildRetrievalFullContextTool(referencesOf(inputs)),\n ...(aspectRatio && aspectRatio !== IMAGE_ASPECT_AUTO\n ? {\n image_generation: {\n name: 'image_generation' as const,\n description: 'image generation',\n tool_args: { aspect_ratio: aspectRatio },\n tool_responses: {},\n },\n }\n : {}),\n }\n },\n },\n}\n","/**\n * The host side of the launch contract: `onLaunch({workflow, inputs, scope, agentId})`.\n *\n * Blocks only say WHAT to run; this performs it, so workspace isolation stays host-side:\n *\n * - prompt workflow, my assistant: open a fresh chat (or stay in this one when `inPlace`), scope\n * its documents, set the composed draft and ask for it to be sent (`autoSendDraft`). The host's\n * send waits for the new chat's documents to be seeded, so a scoped run is never sent with the\n * wrong files. Order matters: `openNewConversation` resets the draft, so it is set after it.\n * - prompt workflow, another agent: a run-now task assigned to that agent (the interactive chat\n * query has no agent parameter), created through the same path as the task composer.\n * - operation workflow (tier B): the handler bound to its id (annotation).\n * - a workflow's own model becomes the chat's (`useApplyChatModel`).\n *\n * The prompt is composed in exactly one place: `composeWorkflowPrompt(workflow, inputs)`.\n */\n\nimport {\n useApplyChatModel,\n useArbiSessionStore,\n useCreateTag,\n useDocuments,\n useGenerateDocTags,\n useTags,\n useUpdateTag,\n} from '@arbidocs/react'\nimport { getDocumentTitle } from '@arbidocs/react/ui'\nimport { useCallback, useMemo } from 'react'\nimport { composeWorkflowPrompt, isEmptyWorkflowScope } from '../../agents/workflows/workflow'\nimport { documentScopeLabels, matchWorkflowScope } from '../../agents/workflows/workspaceScope'\nimport {\n type WorkflowInputs,\n type WorkflowLanding,\n type WorkflowLaunch,\n} from '../../agents/workflows/types'\nimport { deriveAnnotationName } from '../../agents/workflows/catalogue/annotation-name'\nimport { useBlocksEnvironment } from '../../provider/environment'\nimport { PROMPT_BINDINGS } from './launch-bindings'\nimport { ANNOTATE_ID } from '../../agents/workflows/catalogue/seed'\nimport { useWorkflowTasks } from './useWorkflowTasks'\nimport { recordWorkflowUse } from '../../agents/workflows/catalogue/workflow-usage'\n\nexport interface UseLaunchWorkflowOptions {\n /**\n * Where launches from this surface land, over each workflow's own default. The empty chat and\n * the slash menu send into the conversation on screen (`current-chat`); everything else opens a\n * fresh one. A single launch can still override it (`WorkflowLaunch.landing`).\n */\n landing?: WorkflowLanding\n /**\n * A prompt run on the user's own assistant is sent here instead of through the session's draft:\n * the surface's own chat (`ChatPage`) or its own ask (the document ask). Everything else is the\n * same: the file scope, the workflow's model and its bound tools are set on the session in scope\n * (before a send in place, after a send that opens a fresh chat), so the turn carries them.\n */\n send?: (prompt: string) => void\n}\n\nconst text = (inputs: WorkflowInputs, name: string): string => {\n const v = inputs[name]\n return typeof v === 'string' ? v.trim() : ''\n}\n\nexport function useLaunchWorkflow({\n landing: surfaceLanding,\n send,\n}: UseLaunchWorkflowOptions = {}) {\n const { data: documents = [] } = useDocuments()\n const { data: workspaceTags = [] } = useTags()\n const tags = useMemo(() => documentScopeLabels(workspaceTags), [workspaceTags])\n const createTag = useCreateTag()\n const updateTag = useUpdateTag()\n const generate = useGenerateDocTags()\n const { create: createTask } = useWorkflowTasks()\n const applyModel = useApplyChatModel()\n const session = useArbiSessionStore()\n const { notify, openFiles, openNewConversation } = useBlocksEnvironment()\n\n /** Annotation: create (or reuse) the label, start the AI run, land on Files filtered to the set. */\n const annotate = useCallback(\n async ({ inputs, scope }: WorkflowLaunch) => {\n const description = text(inputs, 'description')\n const name = text(inputs, 'name') || deriveAnnotationName(description)\n const matching = matchWorkflowScope(documents, scope)\n if (!name || !description || matching.length === 0) return\n try {\n // A same-named label is reused rather than duplicated, the rule the Files page's\n // label-creation paths follow.\n const existing = tags.find((t) => t.name.toLowerCase() === name.toLowerCase())\n let tagId: string\n if (existing) {\n tagId = existing.external_id\n await updateTag.mutateAsync({\n tagId: tagId,\n change: { instruction: description },\n })\n } else {\n const created = await createTag.mutateAsync({\n name,\n tagType: { type: 'text', options: [] },\n shared: true,\n instruction: description,\n })\n const createdId = (created as { external_id?: string } | undefined)?.external_id\n if (!createdId) throw new Error('tag create returned no id')\n tagId = createdId\n }\n const docIds = matching.map((d) => d.external_id)\n // overwrite=true so a re-run on an existing field refreshes stale values, matching the\n // Files page's default review behaviour.\n await generate.mutateAsync({ tagIds: [tagId], docIds: docIds, overwrite: true })\n // Land on Files with those documents selected and the view narrowed to the annotated set\n // through the same tri-state quick filter the pickers write to. An empty scope selected\n // every file, so no filter is applied.\n const filters: Record<string, 'include'> = {}\n scope.folders.forEach((folder) => {\n filters[folder === '' ? 'folder:none' : `folder:${folder}`] = 'include'\n })\n scope.labels.forEach((labelId) => {\n filters[labelId] = 'include'\n })\n openFiles({ select: docIds, filters })\n } catch (error) {\n notify('Could not start the annotation', 'error')\n throw error\n }\n },\n [documents, tags, createTag, updateTag, generate, openFiles, notify]\n )\n\n return useCallback(\n async (launch: WorkflowLaunch) => {\n const { workflow, inputs, scope, agentId } = launch\n if (workflow.run.kind === 'operation') {\n if (workflow.id === ANNOTATE_ID) {\n await annotate(launch)\n recordWorkflowUse(workflow.id)\n return\n }\n throw new Error(`No host handler for workflow \"${workflow.id}\"`)\n }\n\n // Names for the wording: a `documents` field quotes the files it picked.\n const documentTitles = Object.fromEntries(\n documents.map((d) => [d.external_id, getDocumentTitle(d, d.external_id)])\n )\n const prompt = composeWorkflowPrompt(workflow, inputs, { documentTitles })\n if (!prompt) return\n recordWorkflowUse(workflow.id)\n\n if (agentId) {\n try {\n const created = await createTask({\n workflow,\n values: {\n assignee: 'agent',\n workflowId: workflow.id,\n inputs,\n when: 'now',\n runAt: '',\n rrule: '',\n timezone: 'UTC',\n eventKind: '',\n afterTaskId: '',\n parentTaskId: '',\n shared: true,\n description: '',\n dueAt: '',\n agentId,\n name: '',\n notifyOnComplete: true,\n access: 'ask_each_run',\n },\n })\n const ran = created.kind === 'work' ? created.ran : null\n const title = created.kind === 'work' ? created.task.title : created.workflow.name\n notify(\n ran === false\n ? 'Task created, but the run could not start'\n : `Running \\u201c${title ?? workflow.title}\\u201d`,\n ran === false ? 'warning' : 'success'\n )\n } catch (error) {\n notify(\n error instanceof Error && error.message.startsWith('Open a workspace')\n ? error.message\n : 'Could not start the run',\n 'error'\n )\n throw error\n }\n return\n }\n\n const landing = launch.landing ?? surfaceLanding ?? workflow.landing\n const inPlace = landing === 'current-chat'\n const binding = PROMPT_BINDINGS[workflow.id]\n /** The run's setup on the session in scope: its file scope, its model, its bound tools. */\n const prepare = () => {\n // Scope the chat to the chosen files when a restriction was made; otherwise the\n // workspace's usual \"all documents\" attachment (useDocumentAutoAdd) applies.\n if (binding?.attachScope !== false && !isEmptyWorkflowScope(scope)) {\n const ids = matchWorkflowScope(documents, scope).map((d) => d.external_id)\n if (ids.length > 0) {\n session.setConversationDocuments(\n inPlace ? (session.getState().conversationId ?? 'new') : 'new',\n ids.map((docId) => ({ docId, isPinned: false }))\n )\n }\n }\n if (workflow.model) void applyModel(workflow.model, `Workflow - ${workflow.title}`)\n // The tools ride the next send of the session in scope.\n session.setPendingTools(binding?.tools?.(inputs) ?? null)\n }\n // A fresh chat's reset clears the draft and the model, so the setup follows it. A surface\n // with its own send sends in its chat (set up first) or opens a fresh one (set up after).\n if (send) {\n if (inPlace) prepare()\n send(prompt)\n if (!inPlace) prepare()\n return\n }\n if (!inPlace) openNewConversation()\n prepare()\n session.setDraft(prompt)\n session.setAutoSendDraft(true)\n },\n [\n annotate,\n applyModel,\n createTask,\n documents,\n surfaceLanding,\n session,\n notify,\n openNewConversation,\n send,\n ]\n )\n}\n","/**\n * The workflow launcher, wired to run what it launches: `ConnectedWorkflowLauncher` (the\n * workspace's files behind scope and file fields, the user's agents behind \"Run as\") with the one\n * launch handler (`useLaunchWorkflow`), the host's upload dialog for adding files\n * (`environment.openUpload`), and the touches of the annotation operation (its derived name and\n * overwrite warning, \"Annotate N documents\").\n *\n * The dashboard's Start band, Files (\"Create new\") and, headless, the slash menu use it.\n */\n\nimport { useTags } from '@arbidocs/react'\nimport { useCallback, useMemo, type ReactNode } from 'react'\nimport { TriangleAlert } from 'lucide-react'\nimport { documentScopeLabels } from '../../agents/workflows/workspaceScope'\nimport {\n type WorkflowDefinition,\n type WorkflowField,\n type WorkflowInputs,\n type WorkflowLanding,\n} from '../../agents/workflows/types'\nimport { ConnectedWorkflowLauncher } from '../ConnectedWorkflowLauncher'\nimport { type StartTile } from '../../home/StartTiles'\nimport { useBlocksEnvironment } from '../../provider/environment'\nimport { useHost } from '../../provider/host'\nimport { deriveAnnotationName } from '../../agents/workflows/catalogue/annotation-name'\nimport { ANNOTATE_ID, renderWorkflowIcon } from '../../agents/workflows/catalogue/seed'\nimport { useLaunchWorkflow } from './useLaunchWorkflow'\n\n// The agent picker names the person it hands the work to: the default \"Run as\" / \"My assistant\"\n// copy did not say who an assistant is.\nconst AGENT_LABELS = { label: 'Who this runs for', myAssistant: 'Me (your own assistant)' }\n\nexport interface ConnectedWorkflowStartProps {\n workflows: WorkflowDefinition[]\n /** Which of `workflows` get a tile (a filtered or capped view). */\n tileWorkflows?: WorkflowDefinition[]\n /** Render the Start band (off when another surface opens the dialog). */\n showTiles?: boolean\n caption?: string\n captionTestId?: string\n testId?: string\n /** Plain tiles appended to the band (e.g. the \"Create a file\" menu). */\n extraTiles?: StartTile[]\n /** Controlled open workflow id. */\n activeId?: string | null\n onActiveIdChange?: (id: string | null) => void\n initialInputsFor?: (workflow: WorkflowDefinition) => Partial<WorkflowInputs> | undefined\n /** Where launches land, over each workflow's default (`current-chat` = the chat on screen). */\n landing?: WorkflowLanding\n /** A prompt run's own send (a chat that is not the session's conversation). See `useLaunchWorkflow`. */\n send?: (prompt: string) => void\n /** The host's own \"Add\" control, offered when a workflow needs files and there are none. */\n addFilesAction?: ReactNode\n tileTestId?: (workflow: WorkflowDefinition) => string | undefined\n disabledReason?: (workflow: WorkflowDefinition) => string | undefined\n}\n\nexport function ConnectedWorkflowStart({\n workflows,\n landing,\n send,\n addFilesAction,\n ...rest\n}: ConnectedWorkflowStartProps) {\n const onLaunch = useLaunchWorkflow({ landing, send })\n // The host's icons first (a skill pack names its own), then the kit's, then the skill icon.\n const hostIcon = useHost().workflows?.renderIcon\n const renderIcon = useCallback(\n (key: string) => hostIcon?.(key) ?? renderWorkflowIcon(key) ?? renderWorkflowIcon('skill'),\n [hostIcon]\n )\n const { openUpload } = useBlocksEnvironment()\n const { data: workspaceTags = [] } = useTags()\n const tags = useMemo(() => documentScopeLabels(workspaceTags), [workspaceTags])\n\n // The annotation's name is optional: left blank it is taken from the question, which the\n // field's placeholder shows before anything runs.\n const fieldPlaceholder = useCallback(\n (field: WorkflowField, inputs: WorkflowInputs, workflow: WorkflowDefinition) => {\n if (workflow.id !== ANNOTATE_ID || field.name !== 'name') return undefined\n const derived = deriveAnnotationName(String(inputs.description ?? ''))\n return derived ? `Otherwise “${derived}”` : 'Taken from the description'\n },\n []\n )\n\n return (\n <ConnectedWorkflowLauncher\n {...rest}\n workflows={workflows}\n onLaunch={onLaunch}\n renderIcon={renderIcon}\n onAddFiles={openUpload}\n agentLabels={AGENT_LABELS}\n addFilesAction={addFilesAction}\n fieldPlaceholder={fieldPlaceholder}\n submitLabel={({ workflow, matchedCount }) =>\n workflow.id === ANNOTATE_ID && matchedCount !== null\n ? `Annotate ${matchedCount} document${matchedCount !== 1 ? 's' : ''}`\n : undefined\n }\n renderNotice={({ workflow, inputs }) => {\n if (workflow.id !== ANNOTATE_ID) return null\n // A same-named label is reused: warn that this overwrites its stored description and the\n // cell values for the selected documents.\n const name =\n String(inputs.name ?? '').trim() || deriveAnnotationName(String(inputs.description ?? ''))\n const existing = name\n ? tags.find((t) => t.name.toLowerCase() === name.toLowerCase())\n : undefined\n if (!existing) return null\n return (\n <div\n className=\"flex items-start gap-2 rounded-md border border-amber-500/40 bg-amber-500/10 px-3 py-2 text-sm text-amber-800 dark:text-amber-200\"\n role=\"status\"\n data-testid=\"workflow-existing-label-warning\"\n >\n <TriangleAlert className=\"mt-0.5 size-4 shrink-0 text-amber-500\" />\n <span>\n An annotation called <span className=\"font-medium\">{existing.name}</span> already\n exists. Annotating will overwrite its description and the current cell values for the\n selected files.\n </span>\n </div>\n )\n }}\n />\n )\n}\n","/**\n * Slash skills are launched prompt-first, through the one workflow launcher.\n *\n * A skill (or a prompt-style built-in such as Deep research) is run WITH a prompt, so it never\n * just executes:\n * - picking it in the slash menu opens its form (the prompt field first, focused, required);\n * - typing `/slug` and pressing Enter opens the same form with the field empty;\n * - typing `/slug some text` and pressing Enter opens it with the text already in the field.\n * The rule is the same for any recognised skill slug as the FIRST token of the draft; a backend\n * command (`/goal`, `/compact`, ...) is never a skill and is sent as typed. Nothing is sent from\n * the composer until the user starts it in the form. Without skills enabled (`show_skills`) this\n * applies to the host's skill packs only (`host.workflows.skillPacks`): the menu lists no other\n * skills and any other `/text` is sent as typed.\n *\n * The run lands where the surface says (`landing`), through the one launch handler. A chat that\n * is not the session's conversation (`ChatPage`, the document ask) passes `send`: the composed\n * prompt then goes to its own send, as a typed message would.\n */\n\nimport { useCallback, useMemo, useState, type ReactNode } from 'react'\nimport { promptFieldName } from '../../agents/workflows/workflow'\nimport { isSkillPackWorkflow } from '../../agents/workflows/skillPack'\nimport { type SlashMenuItem } from '../../chat/SlashMenu'\nimport {\n type WorkflowDefinition,\n type WorkflowInputs,\n type WorkflowLanding,\n} from '../../agents/workflows/types'\nimport { useBuiltinCommands } from '@arbidocs/react'\nimport { ConnectedWorkflowStart } from './ConnectedWorkflowStart'\nimport { useWorkflowDefinitions } from './useWorkflowDefinitions'\n\n/** `/slug` or `/slug rest of the line`: the first token and the text after it. */\nconst TYPED_SKILL = /^\\s*\\/([a-zA-Z0-9][a-zA-Z0-9_-]*)(?:\\s+([\\s\\S]*))?$/\n\n/** What the typed draft names: its slug (lower-cased) and the text after it (trimmed). */\nexport function parseTypedSkill(draft: string): { slug: string; text: string } | null {\n const m = TYPED_SKILL.exec(draft)\n return m ? { slug: m[1].toLowerCase(), text: (m[2] ?? '').trim() } : null\n}\n\n/**\n * Whether a skill opens its form from a menu (the `/` menus, the command palette): a prompt skill,\n * and with skills switched off (`show_skills`) only the host's packs. The one gate both share.\n */\nexport function canOpenSkill(workflow: WorkflowDefinition, skillsEnabled: boolean): boolean {\n return workflow.run.kind === 'prompt' && (skillsEnabled || isSkillPackWorkflow(workflow))\n}\n\nexport interface UseSlashSkillWorkflowsOptions {\n landing: WorkflowLanding\n /** Where the composed prompt goes, for a chat that is not the session's conversation. */\n send?: (prompt: string) => void\n}\n\nexport function useSlashSkillWorkflows({ landing, send }: UseSlashSkillWorkflowsOptions): {\n /** Opens the launcher for a picked menu item. True when it did (the caller then clears the draft). */\n openFor: (item: SlashMenuItem) => boolean\n /**\n * Opens the launcher for a typed `/slug text` draft, text pre-filled. True when the draft names\n * a skill (the caller then clears the draft and sends nothing).\n */\n openForDraft: (draft: string) => boolean\n /**\n * Opens the launcher for a skill by id (a surface listing the skills itself, the command\n * palette). True when it is a skill this person may run here.\n */\n openSkill: (id: string) => boolean\n /** The skills this person may open here: the host's packs, and the rest with `show_skills`. */\n openable: WorkflowDefinition[]\n /** Render once, anywhere in the surface that hosts the slash menu. */\n launcher: ReactNode\n} {\n const { skills, skillsEnabled } = useWorkflowDefinitions()\n const { commands } = useBuiltinCommands()\n const [active, setActive] = useState<{ id: string; text: string } | null>(null)\n\n // Stable while the lists are, so a surface can memoise what it builds on them.\n const open = useCallback(\n (workflow: WorkflowDefinition | undefined, text: string): boolean => {\n if (!workflow || !canOpenSkill(workflow, skillsEnabled)) return false\n setActive({ id: workflow.id, text })\n return true\n },\n [skillsEnabled]\n )\n\n const openFor = useCallback(\n (item: SlashMenuItem): boolean =>\n item.kind === 'skill' &&\n open(\n skills.find((w) => w.id === item.name),\n ''\n ),\n [open, skills]\n )\n\n const openSkill = useCallback(\n (id: string): boolean =>\n open(\n skills.find((w) => w.id === id),\n ''\n ),\n [open, skills]\n )\n\n const openable = useMemo(\n () => skills.filter((w) => canOpenSkill(w, skillsEnabled)),\n [skills, skillsEnabled]\n )\n\n const openForDraft = useCallback(\n (draft: string): boolean => {\n const typed = parseTypedSkill(draft)\n if (!typed) return false\n // A backend command wins a name collision, as in the menu: it is sent as typed.\n if (commands.some((c) => c.name.toLowerCase() === typed.slug)) return false\n return open(\n skills.find((w) => w.id.toLowerCase() === typed.slug),\n typed.text\n )\n },\n [open, skills, commands]\n )\n\n // Mounted only while a workflow is open: the ask bar lives in every page's topbar, so the\n // launcher's data hooks (files, agents, tasks) must not run until it is needed.\n const launcher = useMemo(() => {\n if (active === null) return null\n const initialInputsFor = (\n workflow: WorkflowDefinition\n ): Partial<WorkflowInputs> | undefined => {\n const field = promptFieldName(workflow)\n return field && active.text ? { [field]: active.text } : undefined\n }\n return (\n <ConnectedWorkflowStart\n workflows={skills}\n showTiles={false}\n landing={landing}\n send={send}\n activeId={active.id}\n onActiveIdChange={(id) => id === null && setActive(null)}\n initialInputsFor={initialInputsFor}\n />\n )\n }, [active, skills, landing, send])\n\n return { openFor, openForDraft, openSkill, openable, launcher }\n}\n","/**\n * The slash menu's data, in one place for every surface that hosts it (the chat composers, the\n * workspace ask bar, the document ask and `ChatPage`): the backend's built-in commands, the host's\n * skill packs and the user's skills, filtered by the slash token in progress. Commands and the\n * user's skills are typed `/<slug>` and dispatched by the backend; a skill opens its form\n * (`useSlashSkillWorkflows`).\n */\n\nimport { useMemo } from 'react'\nimport { useBuiltinCommands } from '@arbidocs/react'\nimport type { SlashMenuItem } from '../../chat/SlashMenu'\nimport { buildSlashItems, filterSlashItems, parseSlashToken } from '../../chat/slash-menu-helpers'\nimport { mergeSkillWorkflows } from '../../agents/workflows/workflow'\nimport type { WorkflowDefinition } from '../../agents/workflows/types'\nimport { useCanBrowseSkills, useSkillsEnabled } from '../workflows/useSkillsEnabled'\nimport { hostSkillItem, useHostSkills } from '../workflows/useHostSkills'\nimport { useUsableSkillListings } from '../workflows/useWorkflowDefinitions'\nimport { useNamedWorkflows } from '../workflows/useNamedWorkflows'\n\nconst NO_SKILLS: ReadonlyArray<WorkflowDefinition> = []\n\n/**\n * Every row of the menu, unfiltered: commands, then the host's packs (always: the host offers\n * them), then, for skills users (`show_skills`), the built-in skills and the user's own.\n *\n * @param builtinSkills The built-in skills to offer (prompt workflows offered as `/slug`), for a\n * surface that can open their form; default none.\n */\nexport function useSlashMenuItems(builtinSkills: ReadonlyArray<WorkflowDefinition> = NO_SKILLS): {\n items: SlashMenuItem[]\n /** The menu's \"Browse all\" footer opens the Skills browser: skills users, never guests. */\n canBrowseSkills: boolean\n} {\n const hostSkills = useHostSkills()\n const listings = useUsableSkillListings(hostSkills)\n const skillsEnabled = useSkillsEnabled()\n const { commands } = useBuiltinCommands()\n const builtins = useNamedWorkflows(builtinSkills)\n const items = useMemo<SlashMenuItem[]>(() => {\n const packSlugs = new Set(hostSkills.map((w) => w.id))\n return buildSlashItems(\n commands.map((c) => ({\n name: c.name,\n description: c.description,\n argHint: c.arg_hint,\n kind: 'command' as const,\n })),\n [\n ...hostSkills.map(hostSkillItem),\n ...(skillsEnabled\n ? skillItems(\n builtins.filter((w) => !packSlugs.has(w.id)),\n listings\n )\n : []),\n ]\n )\n }, [commands, hostSkills, listings, skillsEnabled, builtins])\n return { items, canBrowseSkills: useCanBrowseSkills() }\n}\n\n/**\n * @param text The draft.\n * @param builtinSkills The built-in skills (prompt workflows offered as `/slug`).\n */\nexport function useSlashItems(\n text: string,\n builtinSkills: ReadonlyArray<WorkflowDefinition> = NO_SKILLS\n) {\n const { items, canBrowseSkills } = useSlashMenuItems(builtinSkills)\n const slashToken = parseSlashToken(text)\n const filteredItems = useMemo(\n () => (slashToken !== null ? filterSlashItems(items, slashToken) : []),\n [items, slashToken]\n )\n return {\n slashToken,\n filteredItems,\n isOpen: slashToken !== null && filteredItems.length > 0,\n canBrowseSkills,\n }\n}\n\ntype SkillListings = ReturnType<typeof useUsableSkillListings>\n\n/**\n * Built-in skills share the list and the `/slug` path; a same-slug skill of the user's own shadows\n * the built-in, as on the backend.\n */\nfunction skillItems(\n builtinSkills: ReadonlyArray<WorkflowDefinition>,\n listings: SkillListings\n): SlashMenuItem[] {\n const { host, skills } = mergeSkillWorkflows([...builtinSkills], listings)\n const listing = new Map(listings.map((s) => [s.slug, s]))\n return [\n ...host.map((w): SlashMenuItem => ({\n name: w.id,\n description: w.description,\n argHint: w.inputs[0]?.label ?? '',\n visibility: 'global',\n kind: 'skill',\n })),\n ...skills.map((w): SlashMenuItem => {\n const s = listing.get(w.id)\n return {\n name: w.id,\n description: s?.description || (w.title !== w.id ? w.title : ''),\n argHint: s?.arg_hint ?? '',\n visibility: s?.visibility === 'global' ? 'global' : 'mine',\n kind: 'skill',\n }\n }),\n ]\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunk6A4GNM4T_cjs = require('./chunk-6A4GNM4T.cjs');
4
+ var chunk5D2ZINOJ_cjs = require('./chunk-5D2ZINOJ.cjs');
5
5
  var chunkQGVOT7E4_cjs = require('./chunk-QGVOT7E4.cjs');
6
6
  var react = require('react');
7
7
 
@@ -45,7 +45,7 @@ function useWorkflowPreview(workflow, { answer = "{prompt}", delayMs = 400, reso
45
45
  }, delayMs)
46
46
  );
47
47
  }, [states, steps, workflow]);
48
- return chunk6A4GNM4T_cjs.useWorkflowView({
48
+ return chunk5D2ZINOJ_cjs.useWorkflowView({
49
49
  steps,
50
50
  states,
51
51
  inputs,
@@ -58,5 +58,5 @@ function useWorkflowPreview(workflow, { answer = "{prompt}", delayMs = 400, reso
58
58
  }
59
59
 
60
60
  exports.useWorkflowPreview = useWorkflowPreview;
61
- //# sourceMappingURL=chunk-4WMGFGYP.cjs.map
62
- //# sourceMappingURL=chunk-4WMGFGYP.cjs.map
61
+ //# sourceMappingURL=chunk-AJZ66VJC.cjs.map
62
+ //# sourceMappingURL=chunk-AJZ66VJC.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/agents/workflows/useWorkflowPreview.ts"],"names":["workflowSteps","useState","initialRunInputs","useRef","useEffect","stepPhase","composeStepPrompt","useWorkflowView"],"mappings":";;;;;;AAwBO,SAAS,kBAAA,CACd,QAAA,EACA,EAAE,MAAA,GAAS,UAAA,EAAY,OAAA,GAAU,GAAA,EAAK,eAAA,EAAiB,OAAA,EAAQ,GAA+B,EAAC,EAC9E;AACjB,EAAA,MAAM,KAAA,GAAQA,gCAAc,QAAQ,CAAA;AACpC,EAAA,MAAM,CAAC,QAAQ,SAAS,CAAA,GAAIC,eAAyB,MAAMC,kCAAA,CAAiB,QAAQ,CAAC,CAAA;AACrF,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAID,cAAA,CAA4C,EAAE,CAAA;AAC1E,EAAA,MAAM,GAAA,GAAM,CAAC,EAAA,EAAY,KAAA,KAA6B,UAAU,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,CAAC,EAAE,GAAG,OAAM,CAAE,CAAA;AAI9F,EAAA,MAAM,MAAA,GAASE,YAAA,iBAAO,IAAI,GAAA,EAA4C,CAAA;AACtE,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AACvB,IAAA,OAAO,MAAM;AACX,MAAA,KAAA,MAAW,CAAA,IAAK,OAAA,CAAQ,MAAA,EAAO,eAAgB,CAAC,CAAA;AAChD,MAAA,OAAA,CAAQ,KAAA,EAAM;AACd,MAAA,SAAA;AAAA,QAAU,CAAC,MACT,MAAA,CAAO,WAAA;AAAA,UACL,MAAA,CAAO,QAAQ,CAAC,CAAA,CAAE,IAAI,CAAC,CAAC,EAAA,EAAI,CAAC,CAAA,KAAM;AAAA,YACjC,EAAA;AAAA,YACA,EAAE,MAAA,KAAW,SAAA,GAAY,EAAE,MAAA,EAAQ,WAAU,GAAI;AAAA,WAClD;AAAA;AACH,OACF;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAGL,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,KAAW,SAAS,CAAA,EAAG;AAE/D,IAAA,MAAM,OAAO,KAAA,CAAM,IAAA;AAAA,MACjB,CAAC,CAAA,KAAA,CACE,CAAA,CAAE,IAAA,KAAS,OAAA,IAAW,CAAA,CAAE,IAAA,KAAS,QAAA,KAAaC,2BAAA,CAAU,KAAA,EAAO,MAAA,EAAQ,CAAA,CAAE,EAAE,CAAA,KAAM;AAAA,KACtF;AACA,IAAA,IAAI,CAAC,IAAA,IAAS,IAAA,CAAK,SAAS,OAAA,IAAW,IAAA,CAAK,SAAS,QAAA,EAAW;AAChE,IAAA,MAAM,MAAA,GACJ,IAAA,CAAK,IAAA,KAAS,OAAA,GACVC,mCAAA,CAAkB,QAAA,EAAU,IAAA,EAAM,MAAA,EAAQ,EAAE,eAAA,EAAiB,OAAA,EAAS,CAAA,GACtE,EAAA;AACN,IAAA,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,EAAE,MAAA,EAAQ,SAAA,EAAW,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY,EAAG,CAAA;AACvE,IAAA,MAAA,CAAO,OAAA,CAAQ,GAAA;AAAA,MACb,IAAA,CAAK,EAAA;AAAA,MACL,WAAW,MAAM;AACf,QAAA,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,IAAA,CAAK,EAAE,CAAA;AAC7B,QAAA,GAAA;AAAA,UACE,IAAA,CAAK,EAAA;AAAA,UACL,IAAA,CAAK,IAAA,KAAS,OAAA,GACV,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,MAAA,CAAO,OAAA,CAAQ,YAAY,MAAM,CAAA,EAAE,GAC3D,EAAE,QAAQ,MAAA;AAAO,SACvB;AAAA,MACF,GAAG,OAAO;AAAA,KACZ;AAAA,EAGF,CAAA,EAAG,CAAC,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAC,CAAA;AAE5B,EAAA,OAAOC,iCAAA,CAAgB;AAAA,IACrB,KAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA,EAAU,CAAC,IAAA,EAAM,KAAA,KAAU,UAAU,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,CAAC,IAAI,GAAG,OAAM,CAAE,CAAA;AAAA,IACrE,QAAA,EAAU,OAAO,IAAA,KAAS,GAAA,CAAI,KAAK,EAAA,EAAI,EAAE,MAAA,EAAQ,MAAA,EAAQ,CAAA;AAAA,IACzD,IAAA,EAAM,OAAO,EAAA,KAAO,GAAA,CAAI,IAAI,EAAE,MAAA,EAAQ,WAAW,CAAA;AAAA,IACjD,KAAA,EAAO,OAAO,EAAA,KAAO,GAAA,CAAI,IAAI,EAAE,MAAA,EAAQ,WAAW,CAAA;AAAA,IAClD,UAAU,CAAC,EAAA,KAAO,MAAA,CAAO,EAAE,GAAG,MAAA,KAAW;AAAA,GAC1C,CAAA;AACH","file":"chunk-4WMGFGYP.cjs","sourcesContent":["/**\n * A stepped workflow run on screen only (the builder's preview): agent steps run one at a time,\n * the way the server does, and answer with the prompt they would send; action steps just finish.\n * No thread, no agent.\n */\n\nimport { useEffect, useRef, useState } from 'react'\nimport {\n composeStepPrompt,\n initialRunInputs,\n stepPhase,\n workflowSteps,\n type StepComposeOptions,\n} from './run'\nimport type { WorkflowDefinition, WorkflowInputs, WorkflowStepState } from './types'\nimport { useWorkflowView, type WorkflowRunView } from './useWorkflowView'\n\nexport interface UseWorkflowPreviewOptions extends StepComposeOptions {\n /** What a stand-in agent step answers; `{prompt}` is replaced with the prompt it would send. */\n answer?: string\n /** How long a stand-in step takes. */\n delayMs?: number\n}\n\nexport function useWorkflowPreview(\n workflow: WorkflowDefinition,\n { answer = '{prompt}', delayMs = 400, resolveWorkflow, compose }: UseWorkflowPreviewOptions = {}\n): WorkflowRunView {\n const steps = workflowSteps(workflow)\n const [inputs, setInputs] = useState<WorkflowInputs>(() => initialRunInputs(workflow))\n const [states, setStates] = useState<Record<string, WorkflowStepState>>({})\n const set = (id: string, state: WorkflowStepState) => setStates((s) => ({ ...s, [id]: state }))\n\n // A stand-in step's timer outlives the re-render its start causes; it is cleared on unmount, and\n // a step it cut short starts again (StrictMode mounts twice).\n const timers = useRef(new Map<string, ReturnType<typeof setTimeout>>())\n useEffect(() => {\n const pending = timers.current\n return () => {\n for (const t of pending.values()) clearTimeout(t)\n pending.clear()\n setStates((s) =>\n Object.fromEntries(\n Object.entries(s).map(([id, v]) => [\n id,\n v.status === 'running' ? { status: 'pending' } : v,\n ])\n )\n )\n }\n }, [])\n\n // One turn at a time: start the first ready agent step when nothing is running.\n useEffect(() => {\n if (Object.values(states).some((s) => s.status === 'running')) return\n // An action step (a signature, an email, a review) stands in the same way, with no answer.\n const next = steps.find(\n (s) =>\n (s.kind === 'agent' || s.kind === 'action') && stepPhase(steps, states, s.id) === 'ready'\n )\n if (!next || (next.kind !== 'agent' && next.kind !== 'action')) return\n const prompt =\n next.kind === 'agent'\n ? composeStepPrompt(workflow, next, inputs, { resolveWorkflow, compose })\n : ''\n set(next.id, { status: 'running', startedAt: new Date().toISOString() })\n timers.current.set(\n next.id,\n setTimeout(() => {\n timers.current.delete(next.id)\n set(\n next.id,\n next.kind === 'agent'\n ? { status: 'done', text: answer.replace('{prompt}', prompt) }\n : { status: 'done' }\n )\n }, delayMs)\n )\n // `inputs` are read when a step starts, not watched.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [states, steps, workflow])\n\n return useWorkflowView({\n steps,\n states,\n inputs,\n setInput: (name, value) => setInputs((i) => ({ ...i, [name]: value })),\n complete: async (step) => set(step.id, { status: 'done' }),\n skip: async (id) => set(id, { status: 'skipped' }),\n retry: async (id) => set(id, { status: 'pending' }),\n isLocked: (id) => states[id]?.status === 'done',\n })\n}\n"]}
1
+ {"version":3,"sources":["../src/agents/workflows/useWorkflowPreview.ts"],"names":["workflowSteps","useState","initialRunInputs","useRef","useEffect","stepPhase","composeStepPrompt","useWorkflowView"],"mappings":"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","file":"chunk-AJZ66VJC.cjs","sourcesContent":["/**\n * A stepped workflow run on screen only (the builder's preview): agent steps run one at a time,\n * the way the server does, and answer with the prompt they would send; action steps just finish.\n * No thread, no agent.\n */\n\nimport { useEffect, useRef, useState } from 'react'\nimport {\n composeStepPrompt,\n initialRunInputs,\n stepPhase,\n workflowSteps,\n type StepComposeOptions,\n} from './run'\nimport type { WorkflowDefinition, WorkflowInputs, WorkflowStepState } from './types'\nimport { useWorkflowView, type WorkflowRunView } from './useWorkflowView'\n\nexport interface UseWorkflowPreviewOptions extends StepComposeOptions {\n /** What a stand-in agent step answers; `{prompt}` is replaced with the prompt it would send. */\n answer?: string\n /** How long a stand-in step takes. */\n delayMs?: number\n}\n\nexport function useWorkflowPreview(\n workflow: WorkflowDefinition,\n { answer = '{prompt}', delayMs = 400, resolveWorkflow, compose }: UseWorkflowPreviewOptions = {}\n): WorkflowRunView {\n const steps = workflowSteps(workflow)\n const [inputs, setInputs] = useState<WorkflowInputs>(() => initialRunInputs(workflow))\n const [states, setStates] = useState<Record<string, WorkflowStepState>>({})\n const set = (id: string, state: WorkflowStepState) => setStates((s) => ({ ...s, [id]: state }))\n\n // A stand-in step's timer outlives the re-render its start causes; it is cleared on unmount, and\n // a step it cut short starts again (StrictMode mounts twice).\n const timers = useRef(new Map<string, ReturnType<typeof setTimeout>>())\n useEffect(() => {\n const pending = timers.current\n return () => {\n for (const t of pending.values()) clearTimeout(t)\n pending.clear()\n setStates((s) =>\n Object.fromEntries(\n Object.entries(s).map(([id, v]) => [\n id,\n v.status === 'running' ? { status: 'pending' } : v,\n ])\n )\n )\n }\n }, [])\n\n // One turn at a time: start the first ready agent step when nothing is running.\n useEffect(() => {\n if (Object.values(states).some((s) => s.status === 'running')) return\n // An action step (a signature, an email, a review) stands in the same way, with no answer.\n const next = steps.find(\n (s) =>\n (s.kind === 'agent' || s.kind === 'action') && stepPhase(steps, states, s.id) === 'ready'\n )\n if (!next || (next.kind !== 'agent' && next.kind !== 'action')) return\n const prompt =\n next.kind === 'agent'\n ? composeStepPrompt(workflow, next, inputs, { resolveWorkflow, compose })\n : ''\n set(next.id, { status: 'running', startedAt: new Date().toISOString() })\n timers.current.set(\n next.id,\n setTimeout(() => {\n timers.current.delete(next.id)\n set(\n next.id,\n next.kind === 'agent'\n ? { status: 'done', text: answer.replace('{prompt}', prompt) }\n : { status: 'done' }\n )\n }, delayMs)\n )\n // `inputs` are read when a step starts, not watched.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [states, steps, workflow])\n\n return useWorkflowView({\n steps,\n states,\n inputs,\n setInput: (name, value) => setInputs((i) => ({ ...i, [name]: value })),\n complete: async (step) => set(step.id, { status: 'done' }),\n skip: async (id) => set(id, { status: 'skipped' }),\n retry: async (id) => set(id, { status: 'pending' }),\n isLocked: (id) => states[id]?.status === 'done',\n })\n}\n"]}
@@ -5,9 +5,9 @@ var chunk3YEXZX4H_cjs = require('./chunk-3YEXZX4H.cjs');
5
5
  var chunk4PA6VCCR_cjs = require('./chunk-4PA6VCCR.cjs');
6
6
  var chunkRL2HI6NP_cjs = require('./chunk-RL2HI6NP.cjs');
7
7
  var chunk6UZC4XVV_cjs = require('./chunk-6UZC4XVV.cjs');
8
- var chunkXNXNLXIC_cjs = require('./chunk-XNXNLXIC.cjs');
9
8
  var chunkSJSGSHIT_cjs = require('./chunk-SJSGSHIT.cjs');
10
9
  var chunkZW6FPIFC_cjs = require('./chunk-ZW6FPIFC.cjs');
10
+ var chunkXNXNLXIC_cjs = require('./chunk-XNXNLXIC.cjs');
11
11
  var chunkIPSHAMO2_cjs = require('./chunk-IPSHAMO2.cjs');
12
12
  var chunkPLIF5CUV_cjs = require('./chunk-PLIF5CUV.cjs');
13
13
  var ui = require('@arbidocs/react/ui');
@@ -805,5 +805,5 @@ exports.WORKFLOW_COLUMN_ORDER = WORKFLOW_COLUMN_ORDER;
805
805
  exports.WorkflowCatalogueSections = WorkflowCatalogueSections;
806
806
  exports.WorkflowsTable = WorkflowsTable;
807
807
  exports.createWorkflowColumns = createWorkflowColumns;
808
- //# sourceMappingURL=chunk-KCP42W67.cjs.map
809
- //# sourceMappingURL=chunk-KCP42W67.cjs.map
808
+ //# sourceMappingURL=chunk-ARGQ5YZ5.cjs.map
809
+ //# sourceMappingURL=chunk-ARGQ5YZ5.cjs.map