agent-relay-server 0.47.0 → 0.48.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (344) hide show
  1. package/docs/openapi.json +29 -1
  2. package/package.json +1 -1
  3. package/public/assets/{activity-Dkzmef0Z.js → activity-B7rLbnPy.js} +2 -2
  4. package/public/assets/{activity-Dkzmef0Z.js.map → activity-B7rLbnPy.js.map} +1 -1
  5. package/public/assets/{agent-profiles-DQYHMAyu.js → agent-profiles-D_GQ78i3.js} +2 -2
  6. package/public/assets/{agent-profiles-DQYHMAyu.js.map → agent-profiles-D_GQ78i3.js.map} +1 -1
  7. package/public/assets/{agents-atr6HZ1e.js → agents-BVQGIUe8.js} +2 -2
  8. package/public/assets/{agents-atr6HZ1e.js.map → agents-BVQGIUe8.js.map} +1 -1
  9. package/public/assets/{analytics-azFfAy4R.js → analytics-BoGZ46xL.js} +2 -2
  10. package/public/assets/{analytics-azFfAy4R.js.map → analytics-BoGZ46xL.js.map} +1 -1
  11. package/public/assets/{andromeeda-TOIXRHPH.js → andromeeda-DedNvx3u.js} +1 -1
  12. package/public/assets/{andromeeda-TOIXRHPH.js.map → andromeeda-DedNvx3u.js.map} +1 -1
  13. package/public/assets/{angular-html-BayrRwsh.js → angular-html-BDsKlrFR.js} +2 -2
  14. package/public/assets/{angular-html-BayrRwsh.js.map → angular-html-BDsKlrFR.js.map} +1 -1
  15. package/public/assets/{angular-ts-BSsl-wTg.js → angular-ts-Dj0DuNAz.js} +2 -2
  16. package/public/assets/{angular-ts-BSsl-wTg.js.map → angular-ts-Dj0DuNAz.js.map} +1 -1
  17. package/public/assets/{astro-CMeXtmOY.js → astro-CWT8VbA8.js} +2 -2
  18. package/public/assets/{astro-CMeXtmOY.js.map → astro-CWT8VbA8.js.map} +1 -1
  19. package/public/assets/{aurora-x-COD2iFEK.js → aurora-x-BaB_RRL_.js} +1 -1
  20. package/public/assets/{aurora-x-COD2iFEK.js.map → aurora-x-BaB_RRL_.js.map} +1 -1
  21. package/public/assets/automation-DH0gqxI2.js +2 -0
  22. package/public/assets/{automation-Bk4umHIm.js.map → automation-DH0gqxI2.js.map} +1 -1
  23. package/public/assets/{ayu-dark-C26og0gq.js → ayu-dark-DNAy_9St.js} +1 -1
  24. package/public/assets/{ayu-dark-C26og0gq.js.map → ayu-dark-DNAy_9St.js.map} +1 -1
  25. package/public/assets/{ayu-light-CjU_OF-J.js → ayu-light-CPmuGcAc.js} +1 -1
  26. package/public/assets/{ayu-light-CjU_OF-J.js.map → ayu-light-CPmuGcAc.js.map} +1 -1
  27. package/public/assets/{ayu-mirage-mioaBxYY.js → ayu-mirage-Bl6FPCHF.js} +1 -1
  28. package/public/assets/{ayu-mirage-mioaBxYY.js.map → ayu-mirage-Bl6FPCHF.js.map} +1 -1
  29. package/public/assets/{badge-CFVr4fG9.js → badge-BR4bvEsy.js} +1 -1
  30. package/public/assets/{badge-CFVr4fG9.js.map → badge-BR4bvEsy.js.map} +1 -1
  31. package/public/assets/{blade-B4XscQpM.js → blade-Ba6j-i-7.js} +2 -2
  32. package/public/assets/{blade-B4XscQpM.js.map → blade-Ba6j-i-7.js.map} +1 -1
  33. package/public/assets/{branch-state-badge-DymObp8d.js → branch-state-badge-B8h3vcwK.js} +2 -2
  34. package/public/assets/{branch-state-badge-DymObp8d.js.map → branch-state-badge-B8h3vcwK.js.map} +1 -1
  35. package/public/assets/{bundle-web-C85e9Tgc.js → bundle-web-CXNb85wK.js} +4 -4
  36. package/public/assets/{bundle-web-C85e9Tgc.js.map → bundle-web-CXNb85wK.js.map} +1 -1
  37. package/public/assets/{button-BuTu0MHx.js → button-BwqJZS4O.js} +1 -1
  38. package/public/assets/{button-BuTu0MHx.js.map → button-BwqJZS4O.js.map} +1 -1
  39. package/public/assets/{c-ByxfEyyT.js → c-DMcYlaVJ.js} +1 -1
  40. package/public/assets/{c-ByxfEyyT.js.map → c-DMcYlaVJ.js.map} +1 -1
  41. package/public/assets/{card-C3ErQ372.js → card-C7JtSyuM.js} +1 -1
  42. package/public/assets/{card-C3ErQ372.js.map → card-C7JtSyuM.js.map} +1 -1
  43. package/public/assets/{catppuccin-frappe-Kqc2IrH6.js → catppuccin-frappe-CED1OCCz.js} +1 -1
  44. package/public/assets/{catppuccin-frappe-Kqc2IrH6.js.map → catppuccin-frappe-CED1OCCz.js.map} +1 -1
  45. package/public/assets/{catppuccin-latte-BE2tZ0v0.js → catppuccin-latte-C5iwPIMF.js} +1 -1
  46. package/public/assets/{catppuccin-latte-BE2tZ0v0.js.map → catppuccin-latte-C5iwPIMF.js.map} +1 -1
  47. package/public/assets/{catppuccin-macchiato-Crk2wQFW.js → catppuccin-macchiato-ZH42ATbn.js} +1 -1
  48. package/public/assets/{catppuccin-macchiato-Crk2wQFW.js.map → catppuccin-macchiato-ZH42ATbn.js.map} +1 -1
  49. package/public/assets/{catppuccin-mocha-E6G_9ebZ.js → catppuccin-mocha-BHvtuFhF.js} +1 -1
  50. package/public/assets/{catppuccin-mocha-E6G_9ebZ.js.map → catppuccin-mocha-BHvtuFhF.js.map} +1 -1
  51. package/public/assets/{channels-B_0wDy0s.js → channels-K5yks-NP.js} +2 -2
  52. package/public/assets/{channels-B_0wDy0s.js.map → channels-K5yks-NP.js.map} +1 -1
  53. package/public/assets/{chat-DxV4MyYF.js → chat-CAg1G_AE.js} +2 -2
  54. package/public/assets/{chat-DxV4MyYF.js.map → chat-CAg1G_AE.js.map} +1 -1
  55. package/public/assets/{coffee-ATZfkmsf.js → coffee-ahz2W4ez.js} +2 -2
  56. package/public/assets/{coffee-ATZfkmsf.js.map → coffee-ahz2W4ez.js.map} +1 -1
  57. package/public/assets/{connectors-DLqYF2_3.js → connectors-fy5L_B2T.js} +2 -2
  58. package/public/assets/{connectors-DLqYF2_3.js.map → connectors-fy5L_B2T.js.map} +1 -1
  59. package/public/assets/{copy-button-BOj6uOlU.js → copy-button-nbDhTE0M.js} +2 -2
  60. package/public/assets/{copy-button-BOj6uOlU.js.map → copy-button-nbDhTE0M.js.map} +1 -1
  61. package/public/assets/{cpp-BMZiIqTo.js → cpp-D6codUeh.js} +2 -2
  62. package/public/assets/{cpp-BMZiIqTo.js.map → cpp-D6codUeh.js.map} +1 -1
  63. package/public/assets/{css-pVoA-V-6.js → css-DqWVA79r.js} +1 -1
  64. package/public/assets/{css-pVoA-V-6.js.map → css-DqWVA79r.js.map} +1 -1
  65. package/public/assets/{csv-BSXvLGS5.js → csv-Dkqn3OZd.js} +1 -1
  66. package/public/assets/{csv-BSXvLGS5.js.map → csv-Dkqn3OZd.js.map} +1 -1
  67. package/public/assets/{dark-plus-D92FcoIb.js → dark-plus-Bhbx-RUU.js} +1 -1
  68. package/public/assets/{dark-plus-D92FcoIb.js.map → dark-plus-Bhbx-RUU.js.map} +1 -1
  69. package/public/assets/{display-ConJ9cJB.js → display-CXhnBwGf.js} +2 -2
  70. package/public/assets/display-CXhnBwGf.js.map +1 -0
  71. package/public/assets/dist-tX4uIBFU.js +2 -0
  72. package/public/assets/dist-tX4uIBFU.js.map +1 -0
  73. package/public/assets/{dracula-CLm43lMW.js → dracula-CFWRbQev.js} +1 -1
  74. package/public/assets/{dracula-CLm43lMW.js.map → dracula-CFWRbQev.js.map} +1 -1
  75. package/public/assets/{dracula-soft-BWF1hppd.js → dracula-soft-DgjJVcsb.js} +1 -1
  76. package/public/assets/{dracula-soft-BWF1hppd.js.map → dracula-soft-DgjJVcsb.js.map} +1 -1
  77. package/public/assets/{everforest-dark-T3FmZXFC.js → everforest-dark-BCF48HzC.js} +1 -1
  78. package/public/assets/{everforest-dark-T3FmZXFC.js.map → everforest-dark-BCF48HzC.js.map} +1 -1
  79. package/public/assets/{everforest-light-sVfJGMcT.js → everforest-light-QmYaRFne.js} +1 -1
  80. package/public/assets/{everforest-light-sVfJGMcT.js.map → everforest-light-QmYaRFne.js.map} +1 -1
  81. package/public/assets/{formatted-body-impl-LK0QcFLC.js → formatted-body-impl-Cq3BVd4_.js} +2 -2
  82. package/public/assets/{formatted-body-impl-LK0QcFLC.js.map → formatted-body-impl-Cq3BVd4_.js.map} +1 -1
  83. package/public/assets/{github-dark-DsObA6K_.js → github-dark-CUoBUDXH.js} +1 -1
  84. package/public/assets/{github-dark-DsObA6K_.js.map → github-dark-CUoBUDXH.js.map} +1 -1
  85. package/public/assets/{github-dark-default-BFXKIBjn.js → github-dark-default-xm9OU1Or.js} +1 -1
  86. package/public/assets/{github-dark-default-BFXKIBjn.js.map → github-dark-default-xm9OU1Or.js.map} +1 -1
  87. package/public/assets/{github-dark-dimmed-CA0i637b.js → github-dark-dimmed-DWnz-mHy.js} +1 -1
  88. package/public/assets/{github-dark-dimmed-CA0i637b.js.map → github-dark-dimmed-DWnz-mHy.js.map} +1 -1
  89. package/public/assets/{github-dark-high-contrast-Ca5xjJfx.js → github-dark-high-contrast-vOK_ibgU.js} +1 -1
  90. package/public/assets/{github-dark-high-contrast-Ca5xjJfx.js.map → github-dark-high-contrast-vOK_ibgU.js.map} +1 -1
  91. package/public/assets/{github-light-fLfNb4d8.js → github-light-CSF3E5Ti.js} +1 -1
  92. package/public/assets/{github-light-fLfNb4d8.js.map → github-light-CSF3E5Ti.js.map} +1 -1
  93. package/public/assets/{github-light-default-Dsv_97Kr.js → github-light-default-C01wYcDQ.js} +1 -1
  94. package/public/assets/{github-light-default-Dsv_97Kr.js.map → github-light-default-C01wYcDQ.js.map} +1 -1
  95. package/public/assets/{github-light-high-contrast-DTv2awN9.js → github-light-high-contrast-CKMMnFZg.js} +1 -1
  96. package/public/assets/{github-light-high-contrast-DTv2awN9.js.map → github-light-high-contrast-CKMMnFZg.js.map} +1 -1
  97. package/public/assets/{glsl-Bn23UELY.js → glsl-1QPrVesi.js} +2 -2
  98. package/public/assets/{glsl-Bn23UELY.js.map → glsl-1QPrVesi.js.map} +1 -1
  99. package/public/assets/{graphql-aueZA_Ef.js → graphql-CeRwileo.js} +2 -2
  100. package/public/assets/{graphql-aueZA_Ef.js.map → graphql-CeRwileo.js.map} +1 -1
  101. package/public/assets/{gruvbox-dark-hard-CD8QV-rj.js → gruvbox-dark-hard-DfDjG47E.js} +1 -1
  102. package/public/assets/{gruvbox-dark-hard-CD8QV-rj.js.map → gruvbox-dark-hard-DfDjG47E.js.map} +1 -1
  103. package/public/assets/{gruvbox-dark-medium-DWjrnm0G.js → gruvbox-dark-medium-BaAW7CWr.js} +1 -1
  104. package/public/assets/{gruvbox-dark-medium-DWjrnm0G.js.map → gruvbox-dark-medium-BaAW7CWr.js.map} +1 -1
  105. package/public/assets/{gruvbox-dark-soft-Dutnyk8h.js → gruvbox-dark-soft-BbwgAlEC.js} +1 -1
  106. package/public/assets/{gruvbox-dark-soft-Dutnyk8h.js.map → gruvbox-dark-soft-BbwgAlEC.js.map} +1 -1
  107. package/public/assets/{gruvbox-light-hard-DxOkDhYo.js → gruvbox-light-hard-GnBGwkrS.js} +1 -1
  108. package/public/assets/{gruvbox-light-hard-DxOkDhYo.js.map → gruvbox-light-hard-GnBGwkrS.js.map} +1 -1
  109. package/public/assets/{gruvbox-light-medium-TPSmjstG.js → gruvbox-light-medium-tlbreNy6.js} +1 -1
  110. package/public/assets/{gruvbox-light-medium-TPSmjstG.js.map → gruvbox-light-medium-tlbreNy6.js.map} +1 -1
  111. package/public/assets/{gruvbox-light-soft-Ds4EoYMY.js → gruvbox-light-soft-D2K4d_jB.js} +1 -1
  112. package/public/assets/{gruvbox-light-soft-Ds4EoYMY.js.map → gruvbox-light-soft-D2K4d_jB.js.map} +1 -1
  113. package/public/assets/{haml-I560b6sm.js → haml-CAFaQgkc.js} +2 -2
  114. package/public/assets/{haml-I560b6sm.js.map → haml-CAFaQgkc.js.map} +1 -1
  115. package/public/assets/{handlebars-DDaqkztc.js → handlebars-PzQcjzkd.js} +2 -2
  116. package/public/assets/{handlebars-DDaqkztc.js.map → handlebars-PzQcjzkd.js.map} +1 -1
  117. package/public/assets/{horizon-Btssz0LS.js → horizon-DIDc_X2h.js} +1 -1
  118. package/public/assets/{horizon-Btssz0LS.js.map → horizon-DIDc_X2h.js.map} +1 -1
  119. package/public/assets/{horizon-bright-Wt7Dv8FR.js → horizon-bright-BJPNCJjc.js} +1 -1
  120. package/public/assets/{horizon-bright-Wt7Dv8FR.js.map → horizon-bright-BJPNCJjc.js.map} +1 -1
  121. package/public/assets/{houston-BAzN2-5D.js → houston-OF5sQVBP.js} +1 -1
  122. package/public/assets/{houston-BAzN2-5D.js.map → houston-OF5sQVBP.js.map} +1 -1
  123. package/public/assets/{html-CWUNxVmc.js → html-CO8fGX9G.js} +2 -2
  124. package/public/assets/{html-CWUNxVmc.js.map → html-CO8fGX9G.js.map} +1 -1
  125. package/public/assets/{html-derivative-CZZaFvoZ.js → html-derivative-jkdQXb1I.js} +2 -2
  126. package/public/assets/{html-derivative-CZZaFvoZ.js.map → html-derivative-jkdQXb1I.js.map} +1 -1
  127. package/public/assets/{http-oB_MYwkH.js → http-awp31Uam.js} +2 -2
  128. package/public/assets/{http-oB_MYwkH.js.map → http-awp31Uam.js.map} +1 -1
  129. package/public/assets/{hurl-Dh_Bacst.js → hurl-CYLzH5tU.js} +2 -2
  130. package/public/assets/{hurl-Dh_Bacst.js.map → hurl-CYLzH5tU.js.map} +1 -1
  131. package/public/assets/{imba-CYU3KKfp.js → imba-DSmsmqxt.js} +1 -1
  132. package/public/assets/{imba-CYU3KKfp.js.map → imba-DSmsmqxt.js.map} +1 -1
  133. package/public/assets/index-DY-jpX4m.css +2 -0
  134. package/public/assets/index-DtubrNEq.js +21 -0
  135. package/public/assets/index-DtubrNEq.js.map +1 -0
  136. package/public/assets/{input-CawU8wfc.js → input-YoPXrp72.js} +1 -1
  137. package/public/assets/{input-CawU8wfc.js.map → input-YoPXrp72.js.map} +1 -1
  138. package/public/assets/insights-D9AWKTUT.js +2 -0
  139. package/public/assets/{insights-DZKCKL71.js.map → insights-D9AWKTUT.js.map} +1 -1
  140. package/public/assets/{integrations-CdeQuRSQ.js → integrations-Bg_JSXvm.js} +2 -2
  141. package/public/assets/{integrations-CdeQuRSQ.js.map → integrations-Bg_JSXvm.js.map} +1 -1
  142. package/public/assets/{java-W2nUDe85.js → java-DgkDOVUq.js} +1 -1
  143. package/public/assets/{java-W2nUDe85.js.map → java-DgkDOVUq.js.map} +1 -1
  144. package/public/assets/{javascript-DhhMt2AW.js → javascript-B_u1HgsA.js} +1 -1
  145. package/public/assets/{javascript-DhhMt2AW.js.map → javascript-B_u1HgsA.js.map} +1 -1
  146. package/public/assets/{jinja-BAB89wEM.js → jinja-2vqfsTaa.js} +2 -2
  147. package/public/assets/{jinja-BAB89wEM.js.map → jinja-2vqfsTaa.js.map} +1 -1
  148. package/public/assets/{jison-Be2VyOc7.js → jison-R_8Xl2fT.js} +2 -2
  149. package/public/assets/{jison-Be2VyOc7.js.map → jison-R_8Xl2fT.js.map} +1 -1
  150. package/public/assets/{json-BE_Kg3UN.js → json-gsp9Jz-Q.js} +1 -1
  151. package/public/assets/{json-BE_Kg3UN.js.map → json-gsp9Jz-Q.js.map} +1 -1
  152. package/public/assets/{json5-B1_eJGWL.js → json5-CyawKEQV.js} +1 -1
  153. package/public/assets/{json5-B1_eJGWL.js.map → json5-CyawKEQV.js.map} +1 -1
  154. package/public/assets/{jsonc-c9fYzzNa.js → jsonc-C5zIYKcF.js} +1 -1
  155. package/public/assets/{jsonc-c9fYzzNa.js.map → jsonc-C5zIYKcF.js.map} +1 -1
  156. package/public/assets/{jsonl-DxKnIZRN.js → jsonl-7Iqw6Ajc.js} +1 -1
  157. package/public/assets/{jsonl-DxKnIZRN.js.map → jsonl-7Iqw6Ajc.js.map} +1 -1
  158. package/public/assets/{jsx-DP4JsN7e.js → jsx-6UC0zwzb.js} +1 -1
  159. package/public/assets/{jsx-DP4JsN7e.js.map → jsx-6UC0zwzb.js.map} +1 -1
  160. package/public/assets/{julia-DIA2-AWD.js → julia-B68-s46l.js} +2 -2
  161. package/public/assets/{julia-DIA2-AWD.js.map → julia-B68-s46l.js.map} +1 -1
  162. package/public/assets/{kanagawa-dragon-D7ScO9qT.js → kanagawa-dragon-CXS-g1Gx.js} +1 -1
  163. package/public/assets/{kanagawa-dragon-D7ScO9qT.js.map → kanagawa-dragon-CXS-g1Gx.js.map} +1 -1
  164. package/public/assets/{kanagawa-lotus-BHmtJ61Q.js → kanagawa-lotus-8h3vn-GZ.js} +1 -1
  165. package/public/assets/{kanagawa-lotus-BHmtJ61Q.js.map → kanagawa-lotus-8h3vn-GZ.js.map} +1 -1
  166. package/public/assets/{kanagawa-wave-C8Lga2zE.js → kanagawa-wave-C0HtbWGq.js} +1 -1
  167. package/public/assets/{kanagawa-wave-C8Lga2zE.js.map → kanagawa-wave-C0HtbWGq.js.map} +1 -1
  168. package/public/assets/{laserwave-D4LCoVki.js → laserwave-CbYdyo81.js} +1 -1
  169. package/public/assets/{laserwave-D4LCoVki.js.map → laserwave-CbYdyo81.js.map} +1 -1
  170. package/public/assets/{less-C4-yvJVc.js → less-CfNrES-C.js} +1 -1
  171. package/public/assets/{less-C4-yvJVc.js.map → less-CfNrES-C.js.map} +1 -1
  172. package/public/assets/{lib-BmYG-YKF.js → lib-D8ccisdr.js} +2 -2
  173. package/public/assets/{lib-BmYG-YKF.js.map → lib-D8ccisdr.js.map} +1 -1
  174. package/public/assets/{lib-D3a84zdu.js → lib-VSpj1Yz-.js} +1 -1
  175. package/public/assets/{lib-D3a84zdu.js.map → lib-VSpj1Yz-.js.map} +1 -1
  176. package/public/assets/{light-plus-CKgUzHbZ.js → light-plus-D5ngymkI.js} +1 -1
  177. package/public/assets/{light-plus-CKgUzHbZ.js.map → light-plus-D5ngymkI.js.map} +1 -1
  178. package/public/assets/{maintenance-DbqSE_ps.js → maintenance-B4gOLu3O.js} +2 -2
  179. package/public/assets/{maintenance-DbqSE_ps.js.map → maintenance-B4gOLu3O.js.map} +1 -1
  180. package/public/assets/{managed-agents-BxhRiBVn.js → managed-agents-BiuAnZXF.js} +2 -2
  181. package/public/assets/{managed-agents-BxhRiBVn.js.map → managed-agents-BiuAnZXF.js.map} +1 -1
  182. package/public/assets/{markdown-BJXgi76t.js → markdown-DcNETIgQ.js} +1 -1
  183. package/public/assets/{markdown-BJXgi76t.js.map → markdown-DcNETIgQ.js.map} +1 -1
  184. package/public/assets/{markdown-preview-impl-Dz2Spmat.js → markdown-preview-impl-Dgt126-c.js} +2 -2
  185. package/public/assets/{markdown-preview-impl-Dz2Spmat.js.map → markdown-preview-impl-Dgt126-c.js.map} +1 -1
  186. package/public/assets/{marko-s78cde-R.js → marko-BknKj3Pf.js} +2 -2
  187. package/public/assets/{marko-s78cde-R.js.map → marko-BknKj3Pf.js.map} +1 -1
  188. package/public/assets/{material-theme-ZMpZUDuj.js → material-theme-Gg3xfPe0.js} +1 -1
  189. package/public/assets/{material-theme-ZMpZUDuj.js.map → material-theme-Gg3xfPe0.js.map} +1 -1
  190. package/public/assets/{material-theme-darker-BAQbewVz.js → material-theme-darker-BZuy5-S0.js} +1 -1
  191. package/public/assets/{material-theme-darker-BAQbewVz.js.map → material-theme-darker-BZuy5-S0.js.map} +1 -1
  192. package/public/assets/{material-theme-lighter-FyN5xGWf.js → material-theme-lighter-C5V_iqXU.js} +1 -1
  193. package/public/assets/{material-theme-lighter-FyN5xGWf.js.map → material-theme-lighter-C5V_iqXU.js.map} +1 -1
  194. package/public/assets/{material-theme-ocean-C-7FJG01.js → material-theme-ocean-Bm7qyAET.js} +1 -1
  195. package/public/assets/{material-theme-ocean-C-7FJG01.js.map → material-theme-ocean-Bm7qyAET.js.map} +1 -1
  196. package/public/assets/{material-theme-palenight-CTAI-sIL.js → material-theme-palenight--HkFOey5.js} +1 -1
  197. package/public/assets/{material-theme-palenight-CTAI-sIL.js.map → material-theme-palenight--HkFOey5.js.map} +1 -1
  198. package/public/assets/{mdc-D1B7fLQ0.js → mdc-DZz2DrXs.js} +2 -2
  199. package/public/assets/{mdc-D1B7fLQ0.js.map → mdc-DZz2DrXs.js.map} +1 -1
  200. package/public/assets/{mdx-DZlYR5iE.js → mdx-8jaRik-D.js} +1 -1
  201. package/public/assets/{mdx-DZlYR5iE.js.map → mdx-8jaRik-D.js.map} +1 -1
  202. package/public/assets/{memory-BTjUKTyA.js → memory-C9ugmii9.js} +2 -2
  203. package/public/assets/{memory-BTjUKTyA.js.map → memory-C9ugmii9.js.map} +1 -1
  204. package/public/assets/{messages-C8z05Y3O.js → messages-BTSGjXwT.js} +2 -2
  205. package/public/assets/{messages-C8z05Y3O.js.map → messages-BTSGjXwT.js.map} +1 -1
  206. package/public/assets/{min-dark-BZ3g8z3r.js → min-dark-BwzrQQKV.js} +1 -1
  207. package/public/assets/{min-dark-BZ3g8z3r.js.map → min-dark-BwzrQQKV.js.map} +1 -1
  208. package/public/assets/{min-light-BVOwCf2X.js → min-light-CuZnzJu2.js} +1 -1
  209. package/public/assets/{min-light-BVOwCf2X.js.map → min-light-CuZnzJu2.js.map} +1 -1
  210. package/public/assets/{monokai-BD0UwGu2.js → monokai-DQ6Z_SqG.js} +1 -1
  211. package/public/assets/{monokai-BD0UwGu2.js.map → monokai-DQ6Z_SqG.js.map} +1 -1
  212. package/public/assets/{night-owl-E_m7-w50.js → night-owl-CJ5iV153.js} +1 -1
  213. package/public/assets/{night-owl-E_m7-w50.js.map → night-owl-CJ5iV153.js.map} +1 -1
  214. package/public/assets/{night-owl-light-C4iZ6jhb.js → night-owl-light-C46RDt8C.js} +1 -1
  215. package/public/assets/{night-owl-light-C4iZ6jhb.js.map → night-owl-light-C46RDt8C.js.map} +1 -1
  216. package/public/assets/{nord-DjtS30mp.js → nord-DB8NWghW.js} +1 -1
  217. package/public/assets/{nord-DjtS30mp.js.map → nord-DB8NWghW.js.map} +1 -1
  218. package/public/assets/{one-dark-pro-XzudhQYY.js → one-dark-pro-Dkf7ad3J.js} +1 -1
  219. package/public/assets/{one-dark-pro-XzudhQYY.js.map → one-dark-pro-Dkf7ad3J.js.map} +1 -1
  220. package/public/assets/{one-light-D7oIost9.js → one-light-kl_9JE41.js} +1 -1
  221. package/public/assets/{one-light-D7oIost9.js.map → one-light-kl_9JE41.js.map} +1 -1
  222. package/public/assets/{orchestrators-DQqtYryc.js → orchestrators-BLbeF61k.js} +2 -2
  223. package/public/assets/{orchestrators-DQqtYryc.js.map → orchestrators-BLbeF61k.js.map} +1 -1
  224. package/public/assets/{overview-CGYu6qQr.js → overview-BXtry9lM.js} +2 -2
  225. package/public/assets/{overview-CGYu6qQr.js.map → overview-BXtry9lM.js.map} +1 -1
  226. package/public/assets/{pairs-BgqXzCto.js → pairs-lm0CpPLI.js} +2 -2
  227. package/public/assets/{pairs-BgqXzCto.js.map → pairs-lm0CpPLI.js.map} +1 -1
  228. package/public/assets/{php-jzPvT2nT.js → php-BzbyfbR-.js} +2 -2
  229. package/public/assets/{php-jzPvT2nT.js.map → php-BzbyfbR-.js.map} +1 -1
  230. package/public/assets/{plastic-CbbYdTlt.js → plastic-zJz-m3Rm.js} +1 -1
  231. package/public/assets/{plastic-CbbYdTlt.js.map → plastic-zJz-m3Rm.js.map} +1 -1
  232. package/public/assets/{poimandres-D_GVW1nv.js → poimandres-tJBwotov.js} +1 -1
  233. package/public/assets/{poimandres-D_GVW1nv.js.map → poimandres-tJBwotov.js.map} +1 -1
  234. package/public/assets/{postcss-C9pEROMA.js → postcss-BIneP_cF.js} +1 -1
  235. package/public/assets/{postcss-C9pEROMA.js.map → postcss-BIneP_cF.js.map} +1 -1
  236. package/public/assets/{pug-By7fl28s.js → pug-DA_d_Siw.js} +2 -2
  237. package/public/assets/{pug-By7fl28s.js.map → pug-DA_d_Siw.js.map} +1 -1
  238. package/public/assets/{python-B3yVAntA.js → python-BVsgiBse.js} +1 -1
  239. package/public/assets/{python-B3yVAntA.js.map → python-BVsgiBse.js.map} +1 -1
  240. package/public/assets/{r-Cj0FbcZN.js → r-Eveq-XaR.js} +1 -1
  241. package/public/assets/{r-Cj0FbcZN.js.map → r-Eveq-XaR.js.map} +1 -1
  242. package/public/assets/{red-mpYhQQnN.js → red-BibI5kCP.js} +1 -1
  243. package/public/assets/{red-mpYhQQnN.js.map → red-BibI5kCP.js.map} +1 -1
  244. package/public/assets/{regexp-CZO5qNCb.js → regexp-BfvBV9FB.js} +1 -1
  245. package/public/assets/{regexp-CZO5qNCb.js.map → regexp-BfvBV9FB.js.map} +1 -1
  246. package/public/assets/{rose-pine-BFFt2t6B.js → rose-pine-DvIcl7lT.js} +1 -1
  247. package/public/assets/{rose-pine-BFFt2t6B.js.map → rose-pine-DvIcl7lT.js.map} +1 -1
  248. package/public/assets/{rose-pine-dawn-D85FBDtp.js → rose-pine-dawn-BqS6xqEj.js} +1 -1
  249. package/public/assets/{rose-pine-dawn-D85FBDtp.js.map → rose-pine-dawn-BqS6xqEj.js.map} +1 -1
  250. package/public/assets/{rose-pine-moon-xbAMILS6.js → rose-pine-moon-BGbVQH-B.js} +1 -1
  251. package/public/assets/{rose-pine-moon-xbAMILS6.js.map → rose-pine-moon-BGbVQH-B.js.map} +1 -1
  252. package/public/assets/{sass-Cgtxkbc_.js → sass-BdjHl3zg.js} +1 -1
  253. package/public/assets/{sass-Cgtxkbc_.js.map → sass-BdjHl3zg.js.map} +1 -1
  254. package/public/assets/{scss-BmqDcfJ5.js → scss-BULQDDIU.js} +2 -2
  255. package/public/assets/{scss-BmqDcfJ5.js.map → scss-BULQDDIU.js.map} +1 -1
  256. package/public/assets/{security-BqfRVw-p.js → security-D_GiLWK-.js} +2 -2
  257. package/public/assets/{security-BqfRVw-p.js.map → security-D_GiLWK-.js.map} +1 -1
  258. package/public/assets/select-Dfy3f6py.js +2 -0
  259. package/public/assets/select-Dfy3f6py.js.map +1 -0
  260. package/public/assets/settings-BEHFzRj_.js +10 -0
  261. package/public/assets/settings-BEHFzRj_.js.map +1 -0
  262. package/public/assets/{shellscript-CCotFWp7.js → shellscript-C1qfRdhy.js} +1 -1
  263. package/public/assets/{shellscript-CCotFWp7.js.map → shellscript-C1qfRdhy.js.map} +1 -1
  264. package/public/assets/{slack-dark-DC1pzHlk.js → slack-dark-BLmwQRBe.js} +1 -1
  265. package/public/assets/{slack-dark-DC1pzHlk.js.map → slack-dark-BLmwQRBe.js.map} +1 -1
  266. package/public/assets/{slack-ochin-DzuCpDdy.js → slack-ochin-CRvGVzm3.js} +1 -1
  267. package/public/assets/{slack-ochin-DzuCpDdy.js.map → slack-ochin-CRvGVzm3.js.map} +1 -1
  268. package/public/assets/{snazzy-light-a1eNYevY.js → snazzy-light-SlUvEGGf.js} +1 -1
  269. package/public/assets/{snazzy-light-a1eNYevY.js.map → snazzy-light-SlUvEGGf.js.map} +1 -1
  270. package/public/assets/{solarized-dark-BOM_aOHg.js → solarized-dark-DbIwHRsR.js} +1 -1
  271. package/public/assets/{solarized-dark-BOM_aOHg.js.map → solarized-dark-DbIwHRsR.js.map} +1 -1
  272. package/public/assets/{solarized-light-pc9woDHa.js → solarized-light-CYdGXtLL.js} +1 -1
  273. package/public/assets/{solarized-light-pc9woDHa.js.map → solarized-light-CYdGXtLL.js.map} +1 -1
  274. package/public/assets/{sql-BRVJ7Db3.js → sql-CA1RHzsH.js} +1 -1
  275. package/public/assets/{sql-BRVJ7Db3.js.map → sql-CA1RHzsH.js.map} +1 -1
  276. package/public/assets/{store-B6qT5_de.js → store-qcA2XXVy.js} +2 -2
  277. package/public/assets/{store-B6qT5_de.js.map → store-qcA2XXVy.js.map} +1 -1
  278. package/public/assets/{stylus-D0f0is5z.js → stylus-BbeofjW2.js} +1 -1
  279. package/public/assets/{stylus-D0f0is5z.js.map → stylus-BbeofjW2.js.map} +1 -1
  280. package/public/assets/{svelte-BNHEoLRc.js → svelte-bnIQdxmO.js} +2 -2
  281. package/public/assets/{svelte-BNHEoLRc.js.map → svelte-bnIQdxmO.js.map} +1 -1
  282. package/public/assets/{synthwave-84-B6wFOt-G.js → synthwave-84-DGP9WYc0.js} +1 -1
  283. package/public/assets/{synthwave-84-B6wFOt-G.js.map → synthwave-84-DGP9WYc0.js.map} +1 -1
  284. package/public/assets/{tasks-DiZ_4TYW.js → tasks-D_awpUcE.js} +2 -2
  285. package/public/assets/{tasks-DiZ_4TYW.js.map → tasks-D_awpUcE.js.map} +1 -1
  286. package/public/assets/teams-C0INWuQC.js +2 -0
  287. package/public/assets/teams-C0INWuQC.js.map +1 -0
  288. package/public/assets/{terminal-viewer-impl-D3T1F77z.js → terminal-viewer-impl-DsxxgYft.js} +2 -2
  289. package/public/assets/{terminal-viewer-impl-D3T1F77z.js.map → terminal-viewer-impl-DsxxgYft.js.map} +1 -1
  290. package/public/assets/{tokyo-night-CdlRv-Oa.js → tokyo-night-B7UMNIj1.js} +1 -1
  291. package/public/assets/{tokyo-night-CdlRv-Oa.js.map → tokyo-night-B7UMNIj1.js.map} +1 -1
  292. package/public/assets/{ts-tags-i7eO9SLg.js → ts-tags-BRtdAecP.js} +2 -2
  293. package/public/assets/{ts-tags-i7eO9SLg.js.map → ts-tags-BRtdAecP.js.map} +1 -1
  294. package/public/assets/{tsx-BTTibUSH.js → tsx-BUodVN6v.js} +1 -1
  295. package/public/assets/{tsx-BTTibUSH.js.map → tsx-BUodVN6v.js.map} +1 -1
  296. package/public/assets/{typescript-DpFaB1ya.js → typescript-DqNmJejE.js} +1 -1
  297. package/public/assets/{typescript-DpFaB1ya.js.map → typescript-DqNmJejE.js.map} +1 -1
  298. package/public/assets/{use-keyboard-viewport-ihP7KLb9.js → use-keyboard-viewport-BY99X7eI.js} +1 -1
  299. package/public/assets/{use-keyboard-viewport-ihP7KLb9.js.map → use-keyboard-viewport-BY99X7eI.js.map} +1 -1
  300. package/public/assets/{vesper-DKdu8Hyo.js → vesper-DaqCNT42.js} +1 -1
  301. package/public/assets/{vesper-DKdu8Hyo.js.map → vesper-DaqCNT42.js.map} +1 -1
  302. package/public/assets/{vitesse-black-Be8WuqKU.js → vitesse-black-ClNY6UCb.js} +1 -1
  303. package/public/assets/{vitesse-black-Be8WuqKU.js.map → vitesse-black-ClNY6UCb.js.map} +1 -1
  304. package/public/assets/{vitesse-dark-ClMFyn4F.js → vitesse-dark-C8_hSmOi.js} +1 -1
  305. package/public/assets/{vitesse-dark-ClMFyn4F.js.map → vitesse-dark-C8_hSmOi.js.map} +1 -1
  306. package/public/assets/{vitesse-light-7vho7arZ.js → vitesse-light-BXxp78a7.js} +1 -1
  307. package/public/assets/{vitesse-light-7vho7arZ.js.map → vitesse-light-BXxp78a7.js.map} +1 -1
  308. package/public/assets/{vue-v9GvV0kN.js → vue-Dj6AvMUo.js} +2 -2
  309. package/public/assets/{vue-v9GvV0kN.js.map → vue-Dj6AvMUo.js.map} +1 -1
  310. package/public/assets/{vue-html-CdsVcCQg.js → vue-html-Bbzrp6BF.js} +2 -2
  311. package/public/assets/{vue-html-CdsVcCQg.js.map → vue-html-Bbzrp6BF.js.map} +1 -1
  312. package/public/assets/{vue-vine-N4EjXMTf.js → vue-vine-CzAmGrih.js} +2 -2
  313. package/public/assets/{vue-vine-N4EjXMTf.js.map → vue-vine-CzAmGrih.js.map} +1 -1
  314. package/public/assets/{wasm-LHfX4W14.js → wasm-jf5ULvTY.js} +1 -1
  315. package/public/assets/{wasm-LHfX4W14.js.map → wasm-jf5ULvTY.js.map} +1 -1
  316. package/public/assets/{wasm-DU4DF4l4.js → wasm-tO7wdIO0.js} +1 -1
  317. package/public/assets/{wasm-DU4DF4l4.js.map → wasm-tO7wdIO0.js.map} +1 -1
  318. package/public/assets/{wgsl-C5uU9e4j.js → wgsl-m1TdqKPy.js} +1 -1
  319. package/public/assets/{wgsl-C5uU9e4j.js.map → wgsl-m1TdqKPy.js.map} +1 -1
  320. package/public/assets/{wit-DzVUU5dg.js → wit-Cgq8vEAf.js} +1 -1
  321. package/public/assets/{wit-DzVUU5dg.js.map → wit-Cgq8vEAf.js.map} +1 -1
  322. package/public/assets/{work-queue-C1p2Hybt.js → work-queue-DniyVomK.js} +2 -2
  323. package/public/assets/{work-queue-C1p2Hybt.js.map → work-queue-DniyVomK.js.map} +1 -1
  324. package/public/assets/{workspaces-DqVr0uN7.js → workspaces-BRVqBWat.js} +2 -2
  325. package/public/assets/{workspaces-DqVr0uN7.js.map → workspaces-BRVqBWat.js.map} +1 -1
  326. package/public/assets/{xml-CqN01Zdp.js → xml-Ct93EBnJ.js} +2 -2
  327. package/public/assets/{xml-CqN01Zdp.js.map → xml-Ct93EBnJ.js.map} +1 -1
  328. package/public/assets/{yaml-DV9wFwNg.js → yaml-Bs2vd4Y_.js} +1 -1
  329. package/public/assets/{yaml-DV9wFwNg.js.map → yaml-Bs2vd4Y_.js.map} +1 -1
  330. package/public/index.html +10 -10
  331. package/src/db/teams.ts +7 -0
  332. package/src/routes/index.ts +2 -1
  333. package/src/routes/teams.ts +14 -1
  334. package/public/assets/automation-Bk4umHIm.js +0 -2
  335. package/public/assets/display-ConJ9cJB.js.map +0 -1
  336. package/public/assets/index-CT10XH5Y.js +0 -21
  337. package/public/assets/index-CT10XH5Y.js.map +0 -1
  338. package/public/assets/index-Ryvn1efN.css +0 -2
  339. package/public/assets/insights-DZKCKL71.js +0 -2
  340. package/public/assets/settings-63whklIq.js +0 -10
  341. package/public/assets/settings-63whklIq.js.map +0 -1
  342. package/public/assets/switch-Bp64beKV.js +0 -2
  343. package/public/assets/switch-Bp64beKV.js.map +0 -1
  344. /package/public/assets/{preload-helper-CDM1EFcn.js → preload-helper-CP_edrrL.js} +0 -0
@@ -1,2 +1,2 @@
1
- import{r as e}from"./chunk-CilyBKbf.js";import{B as t,D as n,E as r,I as ee,M as i,Rt as te,Un as a,jn as o,m as ne,pn as re}from"./lucide-react-ChOGD4vc.js";import{o as ie,t as s}from"./store-B6qT5_de.js";import{H as c,d as ae,h as l}from"./display-ConJ9cJB.js";import{t as u}from"./badge-CFVr4fG9.js";import{t as d}from"./button-BuTu0MHx.js";import{t as f}from"./input-CawU8wfc.js";import{M as oe,r as se,s as ce}from"./index-CT10XH5Y.js";import{i as p,n as m,r as h,t as g}from"./card-C3ErQ372.js";var _=e(a(),1),v=o(),y=[`organization`,`role`,`project`,`task`,`interaction`,`agent`],le=[`private`,`project`,`org`,`public`],ue=[`public`,`normal`,`sensitive`,`secret`],b=[`reported`,`inferred`,`verified`];function x(){return{type:`project`,scope:`default`,title:``,content:``,tags:``,visibility:`project`,sensitivity:`normal`,confidence:`reported`,relevanceScore:`0.7`}}function S(e){return{type:e.type,scope:e.scope,title:e.title,content:e.content,tags:e.tags.join(`, `),visibility:e.visibility,sensitivity:e.sensitivity,confidence:e.confidence,relevanceScore:String(e.relevanceScore)}}function C(e){return e.split(`,`).map(e=>e.trim()).filter(Boolean)}function de(e){let t={limit:100};e.type&&(t.type=e.type),e.scope.trim()&&(t.scope=e.scope.trim()),e.visibility&&(t.visibility=e.visibility);let n=C(e.tags);if(n.length&&(t.tags=n),e.minRelevance.trim()){let n=Number(e.minRelevance);Number.isFinite(n)&&(t.minRelevance=Math.max(0,Math.min(1,n)))}return t}function w(e){return e===`secret`?`bg-red-500/10 text-red-400 border-red-500/30`:e===`sensitive`?`bg-yellow-500/10 text-yellow-400 border-yellow-500/30`:e===`public`?`bg-blue-500/10 text-blue-400 border-blue-500/30`:`bg-zinc-500/10 text-zinc-400 border-zinc-500/30`}function T(e){return e>=.8?`text-emerald-400`:e>=.5?`text-yellow-400`:`text-zinc-400`}function fe(e){return e?Object.entries(e).map(([e,t])=>`${e}=${Array.isArray(t)?t.join(` `):String(t)}`).join(` `):`default`}function pe(e){return e.filter(e=>![`system`,`user`,`channel`].includes(e.kind||``))}function E(){let e=ie(),a=s(e=>e.agents),o=s(e=>e.memories),E=s(e=>e.memoryTotal),O=s(e=>e.memoryStats),k=s(e=>e.memoryBrokerInfo),A=s(e=>e.memoryFilters),j=s(e=>e.selectedMemoryId),he=s(e=>e.memoryLoading),M=s(e=>e.set),ge=s(e=>e.fetchMemories),N=s(e=>e.refreshMemory),P=s(e=>e.saveMemory),F=s(e=>e.deleteMemory),I=s(e=>e.injectMemory),L=o.find(e=>e.id===j),[R,z]=(0,_.useState)(`create`),[B,V]=(0,_.useState)(x),[H,U]=(0,_.useState)(``),[W,_e]=(0,_.useState)(`manual`),[G,ve]=(0,_.useState)(`1600`),[K,ye]=(0,_.useState)(`8`),[q,be]=(0,_.useState)(``),J=(0,_.useMemo)(()=>pe(a),[a]);(0,_.useEffect)(()=>{!H&&J[0]&&U(J[0].id)},[J,H]),(0,_.useEffect)(()=>{L&&R===`edit`&&V(S(L))},[L?.id,R]);let Y=(0,_.useMemo)(()=>{let e=A.search.trim().toLowerCase();return e?o.filter(t=>[t.id,t.type,t.scope,t.title,t.content,...t.tags].some(t=>String(t).toLowerCase().includes(e))):o},[o,A.search]);function X(e){M({memoryFilters:{...A,...e}})}async function Z(){let e=Number(B.relevanceScore),t={title:B.title.trim(),content:B.content.trim(),tags:C(B.tags),visibility:B.visibility,sensitivity:B.sensitivity,confidence:B.confidence,relevanceScore:Number.isFinite(e)?Math.max(0,Math.min(1,e)):.7};if(R===`edit`&&L){await P(t,L.id);return}await P({...t,type:B.type,scope:B.scope.trim()}),z(`create`),V(x())}async function Q(e){if(!H)return;let t=await I({agentId:H,memoryIds:e,query:e?.length?void 0:de(A),reason:W.trim()||`manual`,budget:{maxTokens:Math.max(200,Number(G)||1600),maxMemories:Math.max(1,Number(K)||8),priorityCutoff:3}});t?.command?.id&&be(t.command.id)}function xe(){z(`create`),V(x())}function Se(){L&&(z(`edit`),V(S(L)))}let Ce=B.title.trim()&&B.content.trim()&&(R===`edit`||B.scope.trim()),$=fe(k?.config);return(0,v.jsxs)(`div`,{className:`space-y-4`,children:[(0,v.jsxs)(`div`,{className:`flex items-center justify-between gap-3 flex-wrap`,children:[(0,v.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,v.jsx)(re,{className:`w-5 h-5 text-muted-foreground`}),(0,v.jsx)(`h2`,{className:`text-lg font-semibold`,children:`Memory`}),(0,v.jsx)(u,{variant:`secondary`,children:O?.total??E}),k&&(0,v.jsx)(u,{className:k.external?`bg-blue-500/15 text-blue-400 border-blue-500/30`:`bg-emerald-500/15 text-emerald-400 border-emerald-500/30`,children:k.type})]}),(0,v.jsxs)(d,{size:`sm`,variant:`outline`,className:`gap-1.5`,onClick:()=>N(),children:[(0,v.jsx)(i,{className:`w-3.5 h-3.5 ${he?`animate-spin`:``}`}),`Refresh`]})]}),(0,v.jsxs)(`div`,{className:`grid gap-3 xl:grid-cols-[1.2fr_0.8fr]`,children:[(0,v.jsxs)(g,{children:[(0,v.jsx)(h,{className:`py-3 px-4`,children:(0,v.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,v.jsxs)(p,{className:`text-sm font-medium flex items-center gap-2`,children:[(0,v.jsx)(te,{className:`w-4 h-4 text-muted-foreground`}),`Broker`]}),k?.capabilities&&(0,v.jsx)(`div`,{className:`flex flex-wrap gap-1 justify-end`,children:Object.entries(k.capabilities).filter(([,e])=>!!e).map(([e])=>(0,v.jsx)(u,{variant:`outline`,className:`text-[10px] px-1.5 py-0`,children:e},e))})]})}),(0,v.jsxs)(m,{className:`px-4 pb-4 space-y-3`,children:[(0,v.jsxs)(`div`,{className:`grid grid-cols-2 md:grid-cols-5 gap-2`,children:[(0,v.jsx)(D,{label:`total`,value:O?.total??E}),(0,v.jsx)(D,{label:`project`,value:O?.byType?.project??0}),(0,v.jsx)(D,{label:`task`,value:O?.byType?.task??0}),(0,v.jsx)(D,{label:`agent`,value:O?.byType?.agent??0}),(0,v.jsx)(D,{label:`sensitive`,value:(O?.bySensitivity?.sensitive??0)+(O?.bySensitivity?.secret??0)})]}),(0,v.jsx)(`div`,{className:`font-mono text-xs text-muted-foreground truncate`,title:$,children:$})]})]}),(0,v.jsxs)(g,{children:[(0,v.jsx)(h,{className:`py-3 px-4`,children:(0,v.jsx)(p,{className:`text-sm font-medium`,children:`Inject`})}),(0,v.jsxs)(m,{className:`px-4 pb-4 space-y-2`,children:[(0,v.jsxs)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 gap-2`,children:[(0,v.jsxs)(`select`,{className:`rounded-md border border-input bg-background px-2 py-1.5 text-sm`,value:H,onChange:e=>U(e.target.value),children:[(0,v.jsx)(`option`,{value:``,children:`Agent`}),J.map(e=>(0,v.jsx)(`option`,{value:e.id,children:ae(e)},e.id))]}),(0,v.jsx)(f,{value:W,onChange:e=>_e(e.target.value),placeholder:`reason`}),(0,v.jsx)(f,{value:G,onChange:e=>ve(e.target.value),inputMode:`numeric`,placeholder:`tokens`}),(0,v.jsx)(f,{value:K,onChange:e=>ye(e.target.value),inputMode:`numeric`,placeholder:`memories`})]}),(0,v.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,v.jsxs)(d,{size:`sm`,className:`gap-1.5`,disabled:!H||!L,onClick:()=>L&&Q([L.id]),children:[(0,v.jsx)(r,{className:`w-3.5 h-3.5`}),`Selected`]}),(0,v.jsxs)(d,{size:`sm`,variant:`outline`,className:`gap-1.5`,disabled:!H,onClick:()=>Q(),children:[(0,v.jsx)(n,{className:`w-3.5 h-3.5`}),`Filtered`]}),q&&(0,v.jsx)(u,{variant:`outline`,className:`font-mono text-[10px]`,children:q})]})]})]})]}),(0,v.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-[minmax(0,1fr)_420px]`,children:[(0,v.jsxs)(`div`,{className:`space-y-3`,children:[(0,v.jsx)(g,{children:(0,v.jsx)(m,{className:`p-3`,children:(0,v.jsxs)(`div`,{className:`grid grid-cols-2 lg:grid-cols-6 gap-2`,children:[(0,v.jsx)(f,{className:`lg:col-span-2`,value:A.search,onChange:e=>X({search:e.target.value}),placeholder:`Search visible memories`}),(0,v.jsxs)(`select`,{className:`rounded-md border border-input bg-background px-2 py-1.5 text-sm`,value:A.type,onChange:e=>X({type:e.target.value}),children:[(0,v.jsx)(`option`,{value:``,children:`All types`}),y.map(e=>(0,v.jsx)(`option`,{value:e,children:e},e))]}),(0,v.jsx)(f,{value:A.scope,onChange:e=>X({scope:e.target.value}),placeholder:`scope`}),(0,v.jsx)(f,{value:A.tags,onChange:e=>X({tags:e.target.value}),placeholder:`tags`}),(0,v.jsxs)(`div`,{className:`flex gap-2`,children:[(0,v.jsx)(f,{value:A.minRelevance,onChange:e=>X({minRelevance:e.target.value}),placeholder:`score`}),(0,v.jsx)(d,{size:`sm`,variant:`outline`,className:`h-8 px-2`,onClick:()=>ge(),children:(0,v.jsx)(n,{className:`w-4 h-4`})})]})]})})}),(0,v.jsx)(ce,{className:`h-[calc(100dvh-24rem)] min-h-[360px]`,children:(0,v.jsxs)(`div`,{className:`space-y-2 pr-2`,children:[Y.length===0&&(0,v.jsx)(`div`,{className:`text-center text-sm text-muted-foreground py-16`,children:`No memories`}),Y.map(t=>(0,v.jsx)(me,{memory:t,selected:t.id===j,now:e,onSelect:()=>M({selectedMemoryId:t.id})},t.id))]})})]}),(0,v.jsxs)(g,{children:[(0,v.jsx)(h,{className:`py-3 px-4`,children:(0,v.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,v.jsx)(p,{className:`text-sm font-medium`,children:R===`edit`?`Edit Memory`:`New Memory`}),(0,v.jsxs)(`div`,{className:`flex gap-1`,children:[(0,v.jsx)(d,{size:`sm`,variant:`ghost`,className:`h-7 px-2`,onClick:xe,title:`New memory`,children:(0,v.jsx)(ee,{className:`w-3.5 h-3.5`})}),(0,v.jsx)(d,{size:`sm`,variant:`ghost`,className:`h-7 px-2`,onClick:Se,disabled:!L,title:`Edit selected`,children:(0,v.jsx)(t,{className:`w-3.5 h-3.5`})}),(0,v.jsx)(d,{size:`sm`,variant:`ghost`,className:`h-7 px-2 text-red-400 hover:text-red-300`,disabled:!L,onClick:()=>L&&F(L.id),title:`Delete selected`,children:(0,v.jsx)(ne,{className:`w-3.5 h-3.5`})})]})]})}),(0,v.jsxs)(m,{className:`px-4 pb-4 space-y-3`,children:[L&&(0,v.jsxs)(v.Fragment,{children:[(0,v.jsxs)(`div`,{className:`space-y-2`,children:[(0,v.jsxs)(`div`,{className:`flex flex-wrap gap-1`,children:[(0,v.jsx)(u,{variant:`secondary`,children:L.type}),(0,v.jsx)(u,{variant:`outline`,children:L.scope}),(0,v.jsx)(u,{className:w(L.sensitivity),children:L.sensitivity}),(0,v.jsx)(u,{variant:`outline`,className:T(L.relevanceScore),children:L.relevanceScore.toFixed(2)})]}),(0,v.jsxs)(`div`,{className:`text-xs text-muted-foreground`,title:l(L.updatedAt),children:[`updated `,c(e,L.updatedAt)]}),(0,v.jsx)(`p`,{className:`text-sm font-medium`,children:L.title}),(0,v.jsx)(`p`,{className:`text-xs text-muted-foreground whitespace-pre-wrap max-h-24 overflow-auto`,children:L.content})]}),(0,v.jsx)(oe,{})]}),(0,v.jsxs)(`div`,{className:`grid grid-cols-2 gap-2`,children:[(0,v.jsx)(`select`,{className:`rounded-md border border-input bg-background px-2 py-1.5 text-sm`,disabled:R===`edit`,value:B.type,onChange:e=>V({...B,type:e.target.value}),children:y.map(e=>(0,v.jsx)(`option`,{value:e,children:e},e))}),(0,v.jsx)(f,{disabled:R===`edit`,value:B.scope,onChange:e=>V({...B,scope:e.target.value}),placeholder:`scope`}),(0,v.jsx)(f,{className:`col-span-2`,value:B.title,onChange:e=>V({...B,title:e.target.value}),placeholder:`title`}),(0,v.jsx)(se,{className:`col-span-2 min-h-32`,value:B.content,onChange:e=>V({...B,content:e.target.value}),placeholder:`content`}),(0,v.jsx)(f,{className:`col-span-2`,value:B.tags,onChange:e=>V({...B,tags:e.target.value}),placeholder:`tags`}),(0,v.jsx)(`select`,{className:`rounded-md border border-input bg-background px-2 py-1.5 text-sm`,value:B.visibility,onChange:e=>V({...B,visibility:e.target.value}),children:le.map(e=>(0,v.jsx)(`option`,{value:e,children:e},e))}),(0,v.jsx)(`select`,{className:`rounded-md border border-input bg-background px-2 py-1.5 text-sm`,value:B.sensitivity,onChange:e=>V({...B,sensitivity:e.target.value}),children:ue.map(e=>(0,v.jsx)(`option`,{value:e,children:e},e))}),(0,v.jsx)(`select`,{className:`rounded-md border border-input bg-background px-2 py-1.5 text-sm`,value:B.confidence,onChange:e=>V({...B,confidence:e.target.value}),children:b.map(e=>(0,v.jsx)(`option`,{value:e,children:e},e))}),(0,v.jsx)(f,{value:B.relevanceScore,onChange:e=>V({...B,relevanceScore:e.target.value}),inputMode:`decimal`,placeholder:`score`})]}),(0,v.jsx)(d,{size:`sm`,className:`w-full`,disabled:!Ce,onClick:Z,children:R===`edit`?`Save memory`:`Create memory`})]})]})]})]})}function D({label:e,value:t}){return(0,v.jsxs)(`div`,{className:`rounded-md border border-border bg-muted/20 px-3 py-2`,children:[(0,v.jsx)(`div`,{className:`text-lg font-semibold tabular-nums`,children:t}),(0,v.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:e})]})}function me({memory:e,selected:t,now:n,onSelect:r}){return(0,v.jsx)(`button`,{onClick:r,className:`w-full text-left rounded-md border p-3 transition-colors ${t?`border-primary bg-primary/5`:`border-border bg-card hover:border-zinc-600`}`,children:(0,v.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,v.jsxs)(`div`,{className:`min-w-0`,children:[(0,v.jsxs)(`div`,{className:`flex items-center gap-1.5 flex-wrap`,children:[(0,v.jsx)(u,{variant:`secondary`,className:`text-[10px]`,children:e.type}),(0,v.jsx)(u,{variant:`outline`,className:`text-[10px] font-mono`,children:e.scope}),(0,v.jsx)(u,{className:`text-[10px] ${w(e.sensitivity)}`,children:e.sensitivity})]}),(0,v.jsx)(`div`,{className:`font-medium text-sm mt-2 truncate`,children:e.title}),(0,v.jsx)(`div`,{className:`text-xs text-muted-foreground line-clamp-2 mt-1`,children:e.content}),e.tags.length>0&&(0,v.jsx)(`div`,{className:`flex gap-1 flex-wrap mt-2`,children:e.tags.slice(0,8).map(e=>(0,v.jsxs)(u,{variant:`outline`,className:`text-[10px] text-zinc-400`,children:[`#`,e]},e))})]}),(0,v.jsxs)(`div`,{className:`text-right shrink-0 space-y-1`,children:[(0,v.jsx)(`div`,{className:`text-sm font-semibold tabular-nums ${T(e.relevanceScore)}`,children:e.relevanceScore.toFixed(2)}),(0,v.jsx)(`div`,{className:`text-[10px] text-muted-foreground`,title:l(e.updatedAt),children:c(n,e.updatedAt)}),e.accessCount>0&&(0,v.jsxs)(`div`,{className:`text-[10px] text-muted-foreground`,children:[e.accessCount,` hits`]})]})]})})}export{E as MemoryView};
2
- //# sourceMappingURL=memory-BTjUKTyA.js.map
1
+ import{r as e}from"./chunk-CilyBKbf.js";import{B as t,D as n,E as r,I as ee,M as i,Rt as te,Un as a,jn as o,m as ne,pn as re}from"./lucide-react-ChOGD4vc.js";import{o as ie,t as s}from"./store-qcA2XXVy.js";import{H as c,d as ae,h as l}from"./display-CXhnBwGf.js";import{t as u}from"./badge-BR4bvEsy.js";import{t as d}from"./button-BwqJZS4O.js";import{t as f}from"./input-YoPXrp72.js";import{M as oe,r as se,s as ce}from"./index-DtubrNEq.js";import{i as p,n as m,r as h,t as g}from"./card-C7JtSyuM.js";var _=e(a(),1),v=o(),y=[`organization`,`role`,`project`,`task`,`interaction`,`agent`],le=[`private`,`project`,`org`,`public`],ue=[`public`,`normal`,`sensitive`,`secret`],b=[`reported`,`inferred`,`verified`];function x(){return{type:`project`,scope:`default`,title:``,content:``,tags:``,visibility:`project`,sensitivity:`normal`,confidence:`reported`,relevanceScore:`0.7`}}function S(e){return{type:e.type,scope:e.scope,title:e.title,content:e.content,tags:e.tags.join(`, `),visibility:e.visibility,sensitivity:e.sensitivity,confidence:e.confidence,relevanceScore:String(e.relevanceScore)}}function C(e){return e.split(`,`).map(e=>e.trim()).filter(Boolean)}function de(e){let t={limit:100};e.type&&(t.type=e.type),e.scope.trim()&&(t.scope=e.scope.trim()),e.visibility&&(t.visibility=e.visibility);let n=C(e.tags);if(n.length&&(t.tags=n),e.minRelevance.trim()){let n=Number(e.minRelevance);Number.isFinite(n)&&(t.minRelevance=Math.max(0,Math.min(1,n)))}return t}function w(e){return e===`secret`?`bg-red-500/10 text-red-400 border-red-500/30`:e===`sensitive`?`bg-yellow-500/10 text-yellow-400 border-yellow-500/30`:e===`public`?`bg-blue-500/10 text-blue-400 border-blue-500/30`:`bg-zinc-500/10 text-zinc-400 border-zinc-500/30`}function T(e){return e>=.8?`text-emerald-400`:e>=.5?`text-yellow-400`:`text-zinc-400`}function fe(e){return e?Object.entries(e).map(([e,t])=>`${e}=${Array.isArray(t)?t.join(` `):String(t)}`).join(` `):`default`}function pe(e){return e.filter(e=>![`system`,`user`,`channel`].includes(e.kind||``))}function E(){let e=ie(),a=s(e=>e.agents),o=s(e=>e.memories),E=s(e=>e.memoryTotal),O=s(e=>e.memoryStats),k=s(e=>e.memoryBrokerInfo),A=s(e=>e.memoryFilters),j=s(e=>e.selectedMemoryId),he=s(e=>e.memoryLoading),M=s(e=>e.set),ge=s(e=>e.fetchMemories),N=s(e=>e.refreshMemory),P=s(e=>e.saveMemory),F=s(e=>e.deleteMemory),I=s(e=>e.injectMemory),L=o.find(e=>e.id===j),[R,z]=(0,_.useState)(`create`),[B,V]=(0,_.useState)(x),[H,U]=(0,_.useState)(``),[W,_e]=(0,_.useState)(`manual`),[G,ve]=(0,_.useState)(`1600`),[K,ye]=(0,_.useState)(`8`),[q,be]=(0,_.useState)(``),J=(0,_.useMemo)(()=>pe(a),[a]);(0,_.useEffect)(()=>{!H&&J[0]&&U(J[0].id)},[J,H]),(0,_.useEffect)(()=>{L&&R===`edit`&&V(S(L))},[L?.id,R]);let Y=(0,_.useMemo)(()=>{let e=A.search.trim().toLowerCase();return e?o.filter(t=>[t.id,t.type,t.scope,t.title,t.content,...t.tags].some(t=>String(t).toLowerCase().includes(e))):o},[o,A.search]);function X(e){M({memoryFilters:{...A,...e}})}async function Z(){let e=Number(B.relevanceScore),t={title:B.title.trim(),content:B.content.trim(),tags:C(B.tags),visibility:B.visibility,sensitivity:B.sensitivity,confidence:B.confidence,relevanceScore:Number.isFinite(e)?Math.max(0,Math.min(1,e)):.7};if(R===`edit`&&L){await P(t,L.id);return}await P({...t,type:B.type,scope:B.scope.trim()}),z(`create`),V(x())}async function Q(e){if(!H)return;let t=await I({agentId:H,memoryIds:e,query:e?.length?void 0:de(A),reason:W.trim()||`manual`,budget:{maxTokens:Math.max(200,Number(G)||1600),maxMemories:Math.max(1,Number(K)||8),priorityCutoff:3}});t?.command?.id&&be(t.command.id)}function xe(){z(`create`),V(x())}function Se(){L&&(z(`edit`),V(S(L)))}let Ce=B.title.trim()&&B.content.trim()&&(R===`edit`||B.scope.trim()),$=fe(k?.config);return(0,v.jsxs)(`div`,{className:`space-y-4`,children:[(0,v.jsxs)(`div`,{className:`flex items-center justify-between gap-3 flex-wrap`,children:[(0,v.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,v.jsx)(re,{className:`w-5 h-5 text-muted-foreground`}),(0,v.jsx)(`h2`,{className:`text-lg font-semibold`,children:`Memory`}),(0,v.jsx)(u,{variant:`secondary`,children:O?.total??E}),k&&(0,v.jsx)(u,{className:k.external?`bg-blue-500/15 text-blue-400 border-blue-500/30`:`bg-emerald-500/15 text-emerald-400 border-emerald-500/30`,children:k.type})]}),(0,v.jsxs)(d,{size:`sm`,variant:`outline`,className:`gap-1.5`,onClick:()=>N(),children:[(0,v.jsx)(i,{className:`w-3.5 h-3.5 ${he?`animate-spin`:``}`}),`Refresh`]})]}),(0,v.jsxs)(`div`,{className:`grid gap-3 xl:grid-cols-[1.2fr_0.8fr]`,children:[(0,v.jsxs)(g,{children:[(0,v.jsx)(h,{className:`py-3 px-4`,children:(0,v.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,v.jsxs)(p,{className:`text-sm font-medium flex items-center gap-2`,children:[(0,v.jsx)(te,{className:`w-4 h-4 text-muted-foreground`}),`Broker`]}),k?.capabilities&&(0,v.jsx)(`div`,{className:`flex flex-wrap gap-1 justify-end`,children:Object.entries(k.capabilities).filter(([,e])=>!!e).map(([e])=>(0,v.jsx)(u,{variant:`outline`,className:`text-[10px] px-1.5 py-0`,children:e},e))})]})}),(0,v.jsxs)(m,{className:`px-4 pb-4 space-y-3`,children:[(0,v.jsxs)(`div`,{className:`grid grid-cols-2 md:grid-cols-5 gap-2`,children:[(0,v.jsx)(D,{label:`total`,value:O?.total??E}),(0,v.jsx)(D,{label:`project`,value:O?.byType?.project??0}),(0,v.jsx)(D,{label:`task`,value:O?.byType?.task??0}),(0,v.jsx)(D,{label:`agent`,value:O?.byType?.agent??0}),(0,v.jsx)(D,{label:`sensitive`,value:(O?.bySensitivity?.sensitive??0)+(O?.bySensitivity?.secret??0)})]}),(0,v.jsx)(`div`,{className:`font-mono text-xs text-muted-foreground truncate`,title:$,children:$})]})]}),(0,v.jsxs)(g,{children:[(0,v.jsx)(h,{className:`py-3 px-4`,children:(0,v.jsx)(p,{className:`text-sm font-medium`,children:`Inject`})}),(0,v.jsxs)(m,{className:`px-4 pb-4 space-y-2`,children:[(0,v.jsxs)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 gap-2`,children:[(0,v.jsxs)(`select`,{className:`rounded-md border border-input bg-background px-2 py-1.5 text-sm`,value:H,onChange:e=>U(e.target.value),children:[(0,v.jsx)(`option`,{value:``,children:`Agent`}),J.map(e=>(0,v.jsx)(`option`,{value:e.id,children:ae(e)},e.id))]}),(0,v.jsx)(f,{value:W,onChange:e=>_e(e.target.value),placeholder:`reason`}),(0,v.jsx)(f,{value:G,onChange:e=>ve(e.target.value),inputMode:`numeric`,placeholder:`tokens`}),(0,v.jsx)(f,{value:K,onChange:e=>ye(e.target.value),inputMode:`numeric`,placeholder:`memories`})]}),(0,v.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,v.jsxs)(d,{size:`sm`,className:`gap-1.5`,disabled:!H||!L,onClick:()=>L&&Q([L.id]),children:[(0,v.jsx)(r,{className:`w-3.5 h-3.5`}),`Selected`]}),(0,v.jsxs)(d,{size:`sm`,variant:`outline`,className:`gap-1.5`,disabled:!H,onClick:()=>Q(),children:[(0,v.jsx)(n,{className:`w-3.5 h-3.5`}),`Filtered`]}),q&&(0,v.jsx)(u,{variant:`outline`,className:`font-mono text-[10px]`,children:q})]})]})]})]}),(0,v.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-[minmax(0,1fr)_420px]`,children:[(0,v.jsxs)(`div`,{className:`space-y-3`,children:[(0,v.jsx)(g,{children:(0,v.jsx)(m,{className:`p-3`,children:(0,v.jsxs)(`div`,{className:`grid grid-cols-2 lg:grid-cols-6 gap-2`,children:[(0,v.jsx)(f,{className:`lg:col-span-2`,value:A.search,onChange:e=>X({search:e.target.value}),placeholder:`Search visible memories`}),(0,v.jsxs)(`select`,{className:`rounded-md border border-input bg-background px-2 py-1.5 text-sm`,value:A.type,onChange:e=>X({type:e.target.value}),children:[(0,v.jsx)(`option`,{value:``,children:`All types`}),y.map(e=>(0,v.jsx)(`option`,{value:e,children:e},e))]}),(0,v.jsx)(f,{value:A.scope,onChange:e=>X({scope:e.target.value}),placeholder:`scope`}),(0,v.jsx)(f,{value:A.tags,onChange:e=>X({tags:e.target.value}),placeholder:`tags`}),(0,v.jsxs)(`div`,{className:`flex gap-2`,children:[(0,v.jsx)(f,{value:A.minRelevance,onChange:e=>X({minRelevance:e.target.value}),placeholder:`score`}),(0,v.jsx)(d,{size:`sm`,variant:`outline`,className:`h-8 px-2`,onClick:()=>ge(),children:(0,v.jsx)(n,{className:`w-4 h-4`})})]})]})})}),(0,v.jsx)(ce,{className:`h-[calc(100dvh-24rem)] min-h-[360px]`,children:(0,v.jsxs)(`div`,{className:`space-y-2 pr-2`,children:[Y.length===0&&(0,v.jsx)(`div`,{className:`text-center text-sm text-muted-foreground py-16`,children:`No memories`}),Y.map(t=>(0,v.jsx)(me,{memory:t,selected:t.id===j,now:e,onSelect:()=>M({selectedMemoryId:t.id})},t.id))]})})]}),(0,v.jsxs)(g,{children:[(0,v.jsx)(h,{className:`py-3 px-4`,children:(0,v.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,v.jsx)(p,{className:`text-sm font-medium`,children:R===`edit`?`Edit Memory`:`New Memory`}),(0,v.jsxs)(`div`,{className:`flex gap-1`,children:[(0,v.jsx)(d,{size:`sm`,variant:`ghost`,className:`h-7 px-2`,onClick:xe,title:`New memory`,children:(0,v.jsx)(ee,{className:`w-3.5 h-3.5`})}),(0,v.jsx)(d,{size:`sm`,variant:`ghost`,className:`h-7 px-2`,onClick:Se,disabled:!L,title:`Edit selected`,children:(0,v.jsx)(t,{className:`w-3.5 h-3.5`})}),(0,v.jsx)(d,{size:`sm`,variant:`ghost`,className:`h-7 px-2 text-red-400 hover:text-red-300`,disabled:!L,onClick:()=>L&&F(L.id),title:`Delete selected`,children:(0,v.jsx)(ne,{className:`w-3.5 h-3.5`})})]})]})}),(0,v.jsxs)(m,{className:`px-4 pb-4 space-y-3`,children:[L&&(0,v.jsxs)(v.Fragment,{children:[(0,v.jsxs)(`div`,{className:`space-y-2`,children:[(0,v.jsxs)(`div`,{className:`flex flex-wrap gap-1`,children:[(0,v.jsx)(u,{variant:`secondary`,children:L.type}),(0,v.jsx)(u,{variant:`outline`,children:L.scope}),(0,v.jsx)(u,{className:w(L.sensitivity),children:L.sensitivity}),(0,v.jsx)(u,{variant:`outline`,className:T(L.relevanceScore),children:L.relevanceScore.toFixed(2)})]}),(0,v.jsxs)(`div`,{className:`text-xs text-muted-foreground`,title:l(L.updatedAt),children:[`updated `,c(e,L.updatedAt)]}),(0,v.jsx)(`p`,{className:`text-sm font-medium`,children:L.title}),(0,v.jsx)(`p`,{className:`text-xs text-muted-foreground whitespace-pre-wrap max-h-24 overflow-auto`,children:L.content})]}),(0,v.jsx)(oe,{})]}),(0,v.jsxs)(`div`,{className:`grid grid-cols-2 gap-2`,children:[(0,v.jsx)(`select`,{className:`rounded-md border border-input bg-background px-2 py-1.5 text-sm`,disabled:R===`edit`,value:B.type,onChange:e=>V({...B,type:e.target.value}),children:y.map(e=>(0,v.jsx)(`option`,{value:e,children:e},e))}),(0,v.jsx)(f,{disabled:R===`edit`,value:B.scope,onChange:e=>V({...B,scope:e.target.value}),placeholder:`scope`}),(0,v.jsx)(f,{className:`col-span-2`,value:B.title,onChange:e=>V({...B,title:e.target.value}),placeholder:`title`}),(0,v.jsx)(se,{className:`col-span-2 min-h-32`,value:B.content,onChange:e=>V({...B,content:e.target.value}),placeholder:`content`}),(0,v.jsx)(f,{className:`col-span-2`,value:B.tags,onChange:e=>V({...B,tags:e.target.value}),placeholder:`tags`}),(0,v.jsx)(`select`,{className:`rounded-md border border-input bg-background px-2 py-1.5 text-sm`,value:B.visibility,onChange:e=>V({...B,visibility:e.target.value}),children:le.map(e=>(0,v.jsx)(`option`,{value:e,children:e},e))}),(0,v.jsx)(`select`,{className:`rounded-md border border-input bg-background px-2 py-1.5 text-sm`,value:B.sensitivity,onChange:e=>V({...B,sensitivity:e.target.value}),children:ue.map(e=>(0,v.jsx)(`option`,{value:e,children:e},e))}),(0,v.jsx)(`select`,{className:`rounded-md border border-input bg-background px-2 py-1.5 text-sm`,value:B.confidence,onChange:e=>V({...B,confidence:e.target.value}),children:b.map(e=>(0,v.jsx)(`option`,{value:e,children:e},e))}),(0,v.jsx)(f,{value:B.relevanceScore,onChange:e=>V({...B,relevanceScore:e.target.value}),inputMode:`decimal`,placeholder:`score`})]}),(0,v.jsx)(d,{size:`sm`,className:`w-full`,disabled:!Ce,onClick:Z,children:R===`edit`?`Save memory`:`Create memory`})]})]})]})]})}function D({label:e,value:t}){return(0,v.jsxs)(`div`,{className:`rounded-md border border-border bg-muted/20 px-3 py-2`,children:[(0,v.jsx)(`div`,{className:`text-lg font-semibold tabular-nums`,children:t}),(0,v.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:e})]})}function me({memory:e,selected:t,now:n,onSelect:r}){return(0,v.jsx)(`button`,{onClick:r,className:`w-full text-left rounded-md border p-3 transition-colors ${t?`border-primary bg-primary/5`:`border-border bg-card hover:border-zinc-600`}`,children:(0,v.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,v.jsxs)(`div`,{className:`min-w-0`,children:[(0,v.jsxs)(`div`,{className:`flex items-center gap-1.5 flex-wrap`,children:[(0,v.jsx)(u,{variant:`secondary`,className:`text-[10px]`,children:e.type}),(0,v.jsx)(u,{variant:`outline`,className:`text-[10px] font-mono`,children:e.scope}),(0,v.jsx)(u,{className:`text-[10px] ${w(e.sensitivity)}`,children:e.sensitivity})]}),(0,v.jsx)(`div`,{className:`font-medium text-sm mt-2 truncate`,children:e.title}),(0,v.jsx)(`div`,{className:`text-xs text-muted-foreground line-clamp-2 mt-1`,children:e.content}),e.tags.length>0&&(0,v.jsx)(`div`,{className:`flex gap-1 flex-wrap mt-2`,children:e.tags.slice(0,8).map(e=>(0,v.jsxs)(u,{variant:`outline`,className:`text-[10px] text-zinc-400`,children:[`#`,e]},e))})]}),(0,v.jsxs)(`div`,{className:`text-right shrink-0 space-y-1`,children:[(0,v.jsx)(`div`,{className:`text-sm font-semibold tabular-nums ${T(e.relevanceScore)}`,children:e.relevanceScore.toFixed(2)}),(0,v.jsx)(`div`,{className:`text-[10px] text-muted-foreground`,title:l(e.updatedAt),children:c(n,e.updatedAt)}),e.accessCount>0&&(0,v.jsxs)(`div`,{className:`text-[10px] text-muted-foreground`,children:[e.accessCount,` hits`]})]})]})})}export{E as MemoryView};
2
+ //# sourceMappingURL=memory-C9ugmii9.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"memory-BTjUKTyA.js","names":[],"sources":["../../dashboard/src/components/views/memory.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react'\nimport { useRelayStore, useNow } from '@/store'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'\nimport { Input } from '@/components/ui/input'\nimport { Textarea } from '@/components/ui/textarea'\nimport { ScrollArea } from '@/components/ui/scroll-area'\nimport { Separator } from '@/components/ui/separator'\nimport { BrainCircuit, Database, Edit3, Plus, RefreshCw, Search, Send, Trash2 } from 'lucide-react'\nimport { displayName, fmtTime, timeAgo } from '@/lib/display'\nimport type { Agent, CreateMemoryInput, Memory, MemoryFilterState, MemoryQuery, MemoryType, UpdateMemoryInput } from '@/types'\n\nconst MEMORY_TYPES: MemoryType[] = ['organization', 'role', 'project', 'task', 'interaction', 'agent']\nconst VISIBILITIES = ['private', 'project', 'org', 'public'] as const\nconst SENSITIVITIES = ['public', 'normal', 'sensitive', 'secret'] as const\nconst CONFIDENCES = ['reported', 'inferred', 'verified'] as const\n\ntype MemoryForm = {\n type: MemoryType\n scope: string\n title: string\n content: string\n tags: string\n visibility: (typeof VISIBILITIES)[number]\n sensitivity: (typeof SENSITIVITIES)[number]\n confidence: (typeof CONFIDENCES)[number]\n relevanceScore: string\n}\n\nfunction blankForm(): MemoryForm {\n return {\n type: 'project',\n scope: 'default',\n title: '',\n content: '',\n tags: '',\n visibility: 'project',\n sensitivity: 'normal',\n confidence: 'reported',\n relevanceScore: '0.7',\n }\n}\n\nfunction formFromMemory(memory: Memory): MemoryForm {\n return {\n type: memory.type,\n scope: memory.scope,\n title: memory.title,\n content: memory.content,\n tags: memory.tags.join(', '),\n visibility: memory.visibility,\n sensitivity: memory.sensitivity,\n confidence: memory.confidence,\n relevanceScore: String(memory.relevanceScore),\n }\n}\n\nfunction csv(value: string): string[] {\n return value.split(',').map((item) => item.trim()).filter(Boolean)\n}\n\nfunction queryFromFilters(filters: MemoryFilterState): MemoryQuery {\n const query: MemoryQuery = { limit: 100 }\n if (filters.type) query.type = filters.type as MemoryQuery['type']\n if (filters.scope.trim()) query.scope = filters.scope.trim()\n if (filters.visibility) query.visibility = filters.visibility as MemoryQuery['visibility']\n const tags = csv(filters.tags)\n if (tags.length) query.tags = tags\n if (filters.minRelevance.trim()) {\n const minRelevance = Number(filters.minRelevance)\n if (Number.isFinite(minRelevance)) query.minRelevance = Math.max(0, Math.min(1, minRelevance))\n }\n return query\n}\n\nfunction sensitivityClass(value: string) {\n if (value === 'secret') return 'bg-red-500/10 text-red-400 border-red-500/30'\n if (value === 'sensitive') return 'bg-yellow-500/10 text-yellow-400 border-yellow-500/30'\n if (value === 'public') return 'bg-blue-500/10 text-blue-400 border-blue-500/30'\n return 'bg-zinc-500/10 text-zinc-400 border-zinc-500/30'\n}\n\nfunction scoreClass(score: number) {\n if (score >= 0.8) return 'text-emerald-400'\n if (score >= 0.5) return 'text-yellow-400'\n return 'text-zinc-400'\n}\n\nfunction compactConfig(config: Record<string, unknown> | undefined): string {\n if (!config) return 'default'\n return Object.entries(config)\n .map(([key, value]) => `${key}=${Array.isArray(value) ? value.join(' ') : String(value)}`)\n .join(' ')\n}\n\nfunction agentOptions(agents: Agent[]) {\n return agents.filter((agent) => !['system', 'user', 'channel'].includes(agent.kind || ''))\n}\n\nexport function MemoryView() {\n const now = useNow()\n const agents = useRelayStore((s) => s.agents)\n const memories = useRelayStore((s) => s.memories)\n const memoryTotal = useRelayStore((s) => s.memoryTotal)\n const memoryStats = useRelayStore((s) => s.memoryStats)\n const memoryBrokerInfo = useRelayStore((s) => s.memoryBrokerInfo)\n const memoryFilters = useRelayStore((s) => s.memoryFilters)\n const selectedMemoryId = useRelayStore((s) => s.selectedMemoryId)\n const memoryLoading = useRelayStore((s) => s.memoryLoading)\n const set = useRelayStore((s) => s.set)\n const fetchMemories = useRelayStore((s) => s.fetchMemories)\n const refreshMemory = useRelayStore((s) => s.refreshMemory)\n const saveMemory = useRelayStore((s) => s.saveMemory)\n const deleteMemory = useRelayStore((s) => s.deleteMemory)\n const injectMemory = useRelayStore((s) => s.injectMemory)\n\n const selectedMemory = memories.find((memory) => memory.id === selectedMemoryId)\n const [formMode, setFormMode] = useState<'create' | 'edit'>('create')\n const [form, setForm] = useState<MemoryForm>(blankForm)\n const [injectAgent, setInjectAgent] = useState('')\n const [injectReason, setInjectReason] = useState('manual')\n const [maxTokens, setMaxTokens] = useState('1600')\n const [maxMemories, setMaxMemories] = useState('8')\n const [lastCommand, setLastCommand] = useState('')\n\n const candidates = useMemo(() => agentOptions(agents), [agents])\n\n useEffect(() => {\n if (!injectAgent && candidates[0]) setInjectAgent(candidates[0].id)\n }, [candidates, injectAgent])\n\n useEffect(() => {\n if (selectedMemory && formMode === 'edit') setForm(formFromMemory(selectedMemory))\n }, [selectedMemory?.id, formMode])\n\n const visibleMemories = useMemo(() => {\n const needle = memoryFilters.search.trim().toLowerCase()\n if (!needle) return memories\n return memories.filter((memory) => [\n memory.id, memory.type, memory.scope, memory.title, memory.content, ...memory.tags,\n ].some((value) => String(value).toLowerCase().includes(needle)))\n }, [memories, memoryFilters.search])\n\n function updateFilter(partial: Partial<MemoryFilterState>) {\n set({ memoryFilters: { ...memoryFilters, ...partial } })\n }\n\n async function submitMemory() {\n const score = Number(form.relevanceScore)\n const common = {\n title: form.title.trim(),\n content: form.content.trim(),\n tags: csv(form.tags),\n visibility: form.visibility,\n sensitivity: form.sensitivity,\n confidence: form.confidence,\n relevanceScore: Number.isFinite(score) ? Math.max(0, Math.min(1, score)) : 0.7,\n }\n if (formMode === 'edit' && selectedMemory) {\n await saveMemory(common satisfies UpdateMemoryInput, selectedMemory.id)\n return\n }\n const input: CreateMemoryInput = {\n ...common,\n type: form.type,\n scope: form.scope.trim(),\n }\n await saveMemory(input)\n setFormMode('create')\n setForm(blankForm())\n }\n\n async function runInject(memoryIds?: string[]) {\n if (!injectAgent) return\n const result = await injectMemory({\n agentId: injectAgent,\n memoryIds,\n query: memoryIds?.length ? undefined : queryFromFilters(memoryFilters),\n reason: injectReason.trim() || 'manual',\n budget: {\n maxTokens: Math.max(200, Number(maxTokens) || 1600),\n maxMemories: Math.max(1, Number(maxMemories) || 8),\n priorityCutoff: 3,\n },\n })\n if (result?.command?.id) setLastCommand(result.command.id)\n }\n\n function startCreate() {\n setFormMode('create')\n setForm(blankForm())\n }\n\n function startEdit() {\n if (!selectedMemory) return\n setFormMode('edit')\n setForm(formFromMemory(selectedMemory))\n }\n\n const canSave = form.title.trim() && form.content.trim() && (formMode === 'edit' || form.scope.trim())\n const configText = compactConfig(memoryBrokerInfo?.config)\n\n return (\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between gap-3 flex-wrap\">\n <div className=\"flex items-center gap-2\">\n <BrainCircuit className=\"w-5 h-5 text-muted-foreground\" />\n <h2 className=\"text-lg font-semibold\">Memory</h2>\n <Badge variant=\"secondary\">{memoryStats?.total ?? memoryTotal}</Badge>\n {memoryBrokerInfo && (\n <Badge className={memoryBrokerInfo.external ? 'bg-blue-500/15 text-blue-400 border-blue-500/30' : 'bg-emerald-500/15 text-emerald-400 border-emerald-500/30'}>\n {memoryBrokerInfo.type}\n </Badge>\n )}\n </div>\n <Button size=\"sm\" variant=\"outline\" className=\"gap-1.5\" onClick={() => refreshMemory()}>\n <RefreshCw className={`w-3.5 h-3.5 ${memoryLoading ? 'animate-spin' : ''}`} />\n Refresh\n </Button>\n </div>\n\n <div className=\"grid gap-3 xl:grid-cols-[1.2fr_0.8fr]\">\n <Card>\n <CardHeader className=\"py-3 px-4\">\n <div className=\"flex items-center justify-between gap-2\">\n <CardTitle className=\"text-sm font-medium flex items-center gap-2\">\n <Database className=\"w-4 h-4 text-muted-foreground\" />\n Broker\n </CardTitle>\n {memoryBrokerInfo?.capabilities && (\n <div className=\"flex flex-wrap gap-1 justify-end\">\n {Object.entries(memoryBrokerInfo.capabilities).filter(([, enabled]) => Boolean(enabled)).map(([key]) => (\n <Badge key={key} variant=\"outline\" className=\"text-[10px] px-1.5 py-0\">{key}</Badge>\n ))}\n </div>\n )}\n </div>\n </CardHeader>\n <CardContent className=\"px-4 pb-4 space-y-3\">\n <div className=\"grid grid-cols-2 md:grid-cols-5 gap-2\">\n <Metric label=\"total\" value={memoryStats?.total ?? memoryTotal} />\n <Metric label=\"project\" value={memoryStats?.byType?.project ?? 0} />\n <Metric label=\"task\" value={memoryStats?.byType?.task ?? 0} />\n <Metric label=\"agent\" value={memoryStats?.byType?.agent ?? 0} />\n <Metric label=\"sensitive\" value={(memoryStats?.bySensitivity?.sensitive ?? 0) + (memoryStats?.bySensitivity?.secret ?? 0)} />\n </div>\n <div className=\"font-mono text-xs text-muted-foreground truncate\" title={configText}>{configText}</div>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader className=\"py-3 px-4\">\n <CardTitle className=\"text-sm font-medium\">Inject</CardTitle>\n </CardHeader>\n <CardContent className=\"px-4 pb-4 space-y-2\">\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-2\">\n <select className=\"rounded-md border border-input bg-background px-2 py-1.5 text-sm\" value={injectAgent} onChange={(e) => setInjectAgent(e.target.value)}>\n <option value=\"\">Agent</option>\n {candidates.map((agent) => <option key={agent.id} value={agent.id}>{displayName(agent)}</option>)}\n </select>\n <Input value={injectReason} onChange={(e) => setInjectReason(e.target.value)} placeholder=\"reason\" />\n <Input value={maxTokens} onChange={(e) => setMaxTokens(e.target.value)} inputMode=\"numeric\" placeholder=\"tokens\" />\n <Input value={maxMemories} onChange={(e) => setMaxMemories(e.target.value)} inputMode=\"numeric\" placeholder=\"memories\" />\n </div>\n <div className=\"flex flex-wrap gap-2\">\n <Button size=\"sm\" className=\"gap-1.5\" disabled={!injectAgent || !selectedMemory} onClick={() => selectedMemory && runInject([selectedMemory.id])}>\n <Send className=\"w-3.5 h-3.5\" />\n Selected\n </Button>\n <Button size=\"sm\" variant=\"outline\" className=\"gap-1.5\" disabled={!injectAgent} onClick={() => runInject()}>\n <Search className=\"w-3.5 h-3.5\" />\n Filtered\n </Button>\n {lastCommand && <Badge variant=\"outline\" className=\"font-mono text-[10px]\">{lastCommand}</Badge>}\n </div>\n </CardContent>\n </Card>\n </div>\n\n <div className=\"grid gap-4 xl:grid-cols-[minmax(0,1fr)_420px]\">\n <div className=\"space-y-3\">\n <Card>\n <CardContent className=\"p-3\">\n <div className=\"grid grid-cols-2 lg:grid-cols-6 gap-2\">\n <Input className=\"lg:col-span-2\" value={memoryFilters.search} onChange={(e) => updateFilter({ search: e.target.value })} placeholder=\"Search visible memories\" />\n <select className=\"rounded-md border border-input bg-background px-2 py-1.5 text-sm\" value={memoryFilters.type} onChange={(e) => updateFilter({ type: e.target.value })}>\n <option value=\"\">All types</option>\n {MEMORY_TYPES.map((type) => <option key={type} value={type}>{type}</option>)}\n </select>\n <Input value={memoryFilters.scope} onChange={(e) => updateFilter({ scope: e.target.value })} placeholder=\"scope\" />\n <Input value={memoryFilters.tags} onChange={(e) => updateFilter({ tags: e.target.value })} placeholder=\"tags\" />\n <div className=\"flex gap-2\">\n <Input value={memoryFilters.minRelevance} onChange={(e) => updateFilter({ minRelevance: e.target.value })} placeholder=\"score\" />\n <Button size=\"sm\" variant=\"outline\" className=\"h-8 px-2\" onClick={() => fetchMemories()}>\n <Search className=\"w-4 h-4\" />\n </Button>\n </div>\n </div>\n </CardContent>\n </Card>\n\n <ScrollArea className=\"h-[calc(100dvh-24rem)] min-h-[360px]\">\n <div className=\"space-y-2 pr-2\">\n {visibleMemories.length === 0 && (\n <div className=\"text-center text-sm text-muted-foreground py-16\">No memories</div>\n )}\n {visibleMemories.map((memory) => (\n <MemoryRow\n key={memory.id}\n memory={memory}\n selected={memory.id === selectedMemoryId}\n now={now}\n onSelect={() => set({ selectedMemoryId: memory.id })}\n />\n ))}\n </div>\n </ScrollArea>\n </div>\n\n <Card>\n <CardHeader className=\"py-3 px-4\">\n <div className=\"flex items-center justify-between gap-2\">\n <CardTitle className=\"text-sm font-medium\">{formMode === 'edit' ? 'Edit Memory' : 'New Memory'}</CardTitle>\n <div className=\"flex gap-1\">\n <Button size=\"sm\" variant=\"ghost\" className=\"h-7 px-2\" onClick={startCreate} title=\"New memory\">\n <Plus className=\"w-3.5 h-3.5\" />\n </Button>\n <Button size=\"sm\" variant=\"ghost\" className=\"h-7 px-2\" onClick={startEdit} disabled={!selectedMemory} title=\"Edit selected\">\n <Edit3 className=\"w-3.5 h-3.5\" />\n </Button>\n <Button size=\"sm\" variant=\"ghost\" className=\"h-7 px-2 text-red-400 hover:text-red-300\" disabled={!selectedMemory} onClick={() => selectedMemory && deleteMemory(selectedMemory.id)} title=\"Delete selected\">\n <Trash2 className=\"w-3.5 h-3.5\" />\n </Button>\n </div>\n </div>\n </CardHeader>\n <CardContent className=\"px-4 pb-4 space-y-3\">\n {selectedMemory && (\n <>\n <div className=\"space-y-2\">\n <div className=\"flex flex-wrap gap-1\">\n <Badge variant=\"secondary\">{selectedMemory.type}</Badge>\n <Badge variant=\"outline\">{selectedMemory.scope}</Badge>\n <Badge className={sensitivityClass(selectedMemory.sensitivity)}>{selectedMemory.sensitivity}</Badge>\n <Badge variant=\"outline\" className={scoreClass(selectedMemory.relevanceScore)}>{selectedMemory.relevanceScore.toFixed(2)}</Badge>\n </div>\n <div className=\"text-xs text-muted-foreground\" title={fmtTime(selectedMemory.updatedAt)}>\n updated {timeAgo(now, selectedMemory.updatedAt)}\n </div>\n <p className=\"text-sm font-medium\">{selectedMemory.title}</p>\n <p className=\"text-xs text-muted-foreground whitespace-pre-wrap max-h-24 overflow-auto\">{selectedMemory.content}</p>\n </div>\n <Separator />\n </>\n )}\n\n <div className=\"grid grid-cols-2 gap-2\">\n <select className=\"rounded-md border border-input bg-background px-2 py-1.5 text-sm\" disabled={formMode === 'edit'} value={form.type} onChange={(e) => setForm({ ...form, type: e.target.value as MemoryType })}>\n {MEMORY_TYPES.map((type) => <option key={type} value={type}>{type}</option>)}\n </select>\n <Input disabled={formMode === 'edit'} value={form.scope} onChange={(e) => setForm({ ...form, scope: e.target.value })} placeholder=\"scope\" />\n <Input className=\"col-span-2\" value={form.title} onChange={(e) => setForm({ ...form, title: e.target.value })} placeholder=\"title\" />\n <Textarea className=\"col-span-2 min-h-32\" value={form.content} onChange={(e) => setForm({ ...form, content: e.target.value })} placeholder=\"content\" />\n <Input className=\"col-span-2\" value={form.tags} onChange={(e) => setForm({ ...form, tags: e.target.value })} placeholder=\"tags\" />\n <select className=\"rounded-md border border-input bg-background px-2 py-1.5 text-sm\" value={form.visibility} onChange={(e) => setForm({ ...form, visibility: e.target.value as MemoryForm['visibility'] })}>\n {VISIBILITIES.map((value) => <option key={value} value={value}>{value}</option>)}\n </select>\n <select className=\"rounded-md border border-input bg-background px-2 py-1.5 text-sm\" value={form.sensitivity} onChange={(e) => setForm({ ...form, sensitivity: e.target.value as MemoryForm['sensitivity'] })}>\n {SENSITIVITIES.map((value) => <option key={value} value={value}>{value}</option>)}\n </select>\n <select className=\"rounded-md border border-input bg-background px-2 py-1.5 text-sm\" value={form.confidence} onChange={(e) => setForm({ ...form, confidence: e.target.value as MemoryForm['confidence'] })}>\n {CONFIDENCES.map((value) => <option key={value} value={value}>{value}</option>)}\n </select>\n <Input value={form.relevanceScore} onChange={(e) => setForm({ ...form, relevanceScore: e.target.value })} inputMode=\"decimal\" placeholder=\"score\" />\n </div>\n <Button size=\"sm\" className=\"w-full\" disabled={!canSave} onClick={submitMemory}>\n {formMode === 'edit' ? 'Save memory' : 'Create memory'}\n </Button>\n </CardContent>\n </Card>\n </div>\n </div>\n )\n}\n\nfunction Metric({ label, value }: { label: string; value: number }) {\n return (\n <div className=\"rounded-md border border-border bg-muted/20 px-3 py-2\">\n <div className=\"text-lg font-semibold tabular-nums\">{value}</div>\n <div className=\"text-xs text-muted-foreground\">{label}</div>\n </div>\n )\n}\n\nfunction MemoryRow({ memory, selected, now, onSelect }: { memory: Memory; selected: boolean; now: number; onSelect: () => void }) {\n return (\n <button\n onClick={onSelect}\n className={`w-full text-left rounded-md border p-3 transition-colors ${selected ? 'border-primary bg-primary/5' : 'border-border bg-card hover:border-zinc-600'}`}\n >\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-1.5 flex-wrap\">\n <Badge variant=\"secondary\" className=\"text-[10px]\">{memory.type}</Badge>\n <Badge variant=\"outline\" className=\"text-[10px] font-mono\">{memory.scope}</Badge>\n <Badge className={`text-[10px] ${sensitivityClass(memory.sensitivity)}`}>{memory.sensitivity}</Badge>\n </div>\n <div className=\"font-medium text-sm mt-2 truncate\">{memory.title}</div>\n <div className=\"text-xs text-muted-foreground line-clamp-2 mt-1\">{memory.content}</div>\n {memory.tags.length > 0 && (\n <div className=\"flex gap-1 flex-wrap mt-2\">\n {memory.tags.slice(0, 8).map((tag) => <Badge key={tag} variant=\"outline\" className=\"text-[10px] text-zinc-400\">#{tag}</Badge>)}\n </div>\n )}\n </div>\n <div className=\"text-right shrink-0 space-y-1\">\n <div className={`text-sm font-semibold tabular-nums ${scoreClass(memory.relevanceScore)}`}>{memory.relevanceScore.toFixed(2)}</div>\n <div className=\"text-[10px] text-muted-foreground\" title={fmtTime(memory.updatedAt)}>{timeAgo(now, memory.updatedAt)}</div>\n {memory.accessCount > 0 && <div className=\"text-[10px] text-muted-foreground\">{memory.accessCount} hits</div>}\n </div>\n </div>\n </button>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"memory-C9ugmii9.js","names":[],"sources":["../../dashboard/src/components/views/memory.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react'\nimport { useRelayStore, useNow } from '@/store'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'\nimport { Input } from '@/components/ui/input'\nimport { Textarea } from '@/components/ui/textarea'\nimport { ScrollArea } from '@/components/ui/scroll-area'\nimport { Separator } from '@/components/ui/separator'\nimport { BrainCircuit, Database, Edit3, Plus, RefreshCw, Search, Send, Trash2 } from 'lucide-react'\nimport { displayName, fmtTime, timeAgo } from '@/lib/display'\nimport type { Agent, CreateMemoryInput, Memory, MemoryFilterState, MemoryQuery, MemoryType, UpdateMemoryInput } from '@/types'\n\nconst MEMORY_TYPES: MemoryType[] = ['organization', 'role', 'project', 'task', 'interaction', 'agent']\nconst VISIBILITIES = ['private', 'project', 'org', 'public'] as const\nconst SENSITIVITIES = ['public', 'normal', 'sensitive', 'secret'] as const\nconst CONFIDENCES = ['reported', 'inferred', 'verified'] as const\n\ntype MemoryForm = {\n type: MemoryType\n scope: string\n title: string\n content: string\n tags: string\n visibility: (typeof VISIBILITIES)[number]\n sensitivity: (typeof SENSITIVITIES)[number]\n confidence: (typeof CONFIDENCES)[number]\n relevanceScore: string\n}\n\nfunction blankForm(): MemoryForm {\n return {\n type: 'project',\n scope: 'default',\n title: '',\n content: '',\n tags: '',\n visibility: 'project',\n sensitivity: 'normal',\n confidence: 'reported',\n relevanceScore: '0.7',\n }\n}\n\nfunction formFromMemory(memory: Memory): MemoryForm {\n return {\n type: memory.type,\n scope: memory.scope,\n title: memory.title,\n content: memory.content,\n tags: memory.tags.join(', '),\n visibility: memory.visibility,\n sensitivity: memory.sensitivity,\n confidence: memory.confidence,\n relevanceScore: String(memory.relevanceScore),\n }\n}\n\nfunction csv(value: string): string[] {\n return value.split(',').map((item) => item.trim()).filter(Boolean)\n}\n\nfunction queryFromFilters(filters: MemoryFilterState): MemoryQuery {\n const query: MemoryQuery = { limit: 100 }\n if (filters.type) query.type = filters.type as MemoryQuery['type']\n if (filters.scope.trim()) query.scope = filters.scope.trim()\n if (filters.visibility) query.visibility = filters.visibility as MemoryQuery['visibility']\n const tags = csv(filters.tags)\n if (tags.length) query.tags = tags\n if (filters.minRelevance.trim()) {\n const minRelevance = Number(filters.minRelevance)\n if (Number.isFinite(minRelevance)) query.minRelevance = Math.max(0, Math.min(1, minRelevance))\n }\n return query\n}\n\nfunction sensitivityClass(value: string) {\n if (value === 'secret') return 'bg-red-500/10 text-red-400 border-red-500/30'\n if (value === 'sensitive') return 'bg-yellow-500/10 text-yellow-400 border-yellow-500/30'\n if (value === 'public') return 'bg-blue-500/10 text-blue-400 border-blue-500/30'\n return 'bg-zinc-500/10 text-zinc-400 border-zinc-500/30'\n}\n\nfunction scoreClass(score: number) {\n if (score >= 0.8) return 'text-emerald-400'\n if (score >= 0.5) return 'text-yellow-400'\n return 'text-zinc-400'\n}\n\nfunction compactConfig(config: Record<string, unknown> | undefined): string {\n if (!config) return 'default'\n return Object.entries(config)\n .map(([key, value]) => `${key}=${Array.isArray(value) ? value.join(' ') : String(value)}`)\n .join(' ')\n}\n\nfunction agentOptions(agents: Agent[]) {\n return agents.filter((agent) => !['system', 'user', 'channel'].includes(agent.kind || ''))\n}\n\nexport function MemoryView() {\n const now = useNow()\n const agents = useRelayStore((s) => s.agents)\n const memories = useRelayStore((s) => s.memories)\n const memoryTotal = useRelayStore((s) => s.memoryTotal)\n const memoryStats = useRelayStore((s) => s.memoryStats)\n const memoryBrokerInfo = useRelayStore((s) => s.memoryBrokerInfo)\n const memoryFilters = useRelayStore((s) => s.memoryFilters)\n const selectedMemoryId = useRelayStore((s) => s.selectedMemoryId)\n const memoryLoading = useRelayStore((s) => s.memoryLoading)\n const set = useRelayStore((s) => s.set)\n const fetchMemories = useRelayStore((s) => s.fetchMemories)\n const refreshMemory = useRelayStore((s) => s.refreshMemory)\n const saveMemory = useRelayStore((s) => s.saveMemory)\n const deleteMemory = useRelayStore((s) => s.deleteMemory)\n const injectMemory = useRelayStore((s) => s.injectMemory)\n\n const selectedMemory = memories.find((memory) => memory.id === selectedMemoryId)\n const [formMode, setFormMode] = useState<'create' | 'edit'>('create')\n const [form, setForm] = useState<MemoryForm>(blankForm)\n const [injectAgent, setInjectAgent] = useState('')\n const [injectReason, setInjectReason] = useState('manual')\n const [maxTokens, setMaxTokens] = useState('1600')\n const [maxMemories, setMaxMemories] = useState('8')\n const [lastCommand, setLastCommand] = useState('')\n\n const candidates = useMemo(() => agentOptions(agents), [agents])\n\n useEffect(() => {\n if (!injectAgent && candidates[0]) setInjectAgent(candidates[0].id)\n }, [candidates, injectAgent])\n\n useEffect(() => {\n if (selectedMemory && formMode === 'edit') setForm(formFromMemory(selectedMemory))\n }, [selectedMemory?.id, formMode])\n\n const visibleMemories = useMemo(() => {\n const needle = memoryFilters.search.trim().toLowerCase()\n if (!needle) return memories\n return memories.filter((memory) => [\n memory.id, memory.type, memory.scope, memory.title, memory.content, ...memory.tags,\n ].some((value) => String(value).toLowerCase().includes(needle)))\n }, [memories, memoryFilters.search])\n\n function updateFilter(partial: Partial<MemoryFilterState>) {\n set({ memoryFilters: { ...memoryFilters, ...partial } })\n }\n\n async function submitMemory() {\n const score = Number(form.relevanceScore)\n const common = {\n title: form.title.trim(),\n content: form.content.trim(),\n tags: csv(form.tags),\n visibility: form.visibility,\n sensitivity: form.sensitivity,\n confidence: form.confidence,\n relevanceScore: Number.isFinite(score) ? Math.max(0, Math.min(1, score)) : 0.7,\n }\n if (formMode === 'edit' && selectedMemory) {\n await saveMemory(common satisfies UpdateMemoryInput, selectedMemory.id)\n return\n }\n const input: CreateMemoryInput = {\n ...common,\n type: form.type,\n scope: form.scope.trim(),\n }\n await saveMemory(input)\n setFormMode('create')\n setForm(blankForm())\n }\n\n async function runInject(memoryIds?: string[]) {\n if (!injectAgent) return\n const result = await injectMemory({\n agentId: injectAgent,\n memoryIds,\n query: memoryIds?.length ? undefined : queryFromFilters(memoryFilters),\n reason: injectReason.trim() || 'manual',\n budget: {\n maxTokens: Math.max(200, Number(maxTokens) || 1600),\n maxMemories: Math.max(1, Number(maxMemories) || 8),\n priorityCutoff: 3,\n },\n })\n if (result?.command?.id) setLastCommand(result.command.id)\n }\n\n function startCreate() {\n setFormMode('create')\n setForm(blankForm())\n }\n\n function startEdit() {\n if (!selectedMemory) return\n setFormMode('edit')\n setForm(formFromMemory(selectedMemory))\n }\n\n const canSave = form.title.trim() && form.content.trim() && (formMode === 'edit' || form.scope.trim())\n const configText = compactConfig(memoryBrokerInfo?.config)\n\n return (\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between gap-3 flex-wrap\">\n <div className=\"flex items-center gap-2\">\n <BrainCircuit className=\"w-5 h-5 text-muted-foreground\" />\n <h2 className=\"text-lg font-semibold\">Memory</h2>\n <Badge variant=\"secondary\">{memoryStats?.total ?? memoryTotal}</Badge>\n {memoryBrokerInfo && (\n <Badge className={memoryBrokerInfo.external ? 'bg-blue-500/15 text-blue-400 border-blue-500/30' : 'bg-emerald-500/15 text-emerald-400 border-emerald-500/30'}>\n {memoryBrokerInfo.type}\n </Badge>\n )}\n </div>\n <Button size=\"sm\" variant=\"outline\" className=\"gap-1.5\" onClick={() => refreshMemory()}>\n <RefreshCw className={`w-3.5 h-3.5 ${memoryLoading ? 'animate-spin' : ''}`} />\n Refresh\n </Button>\n </div>\n\n <div className=\"grid gap-3 xl:grid-cols-[1.2fr_0.8fr]\">\n <Card>\n <CardHeader className=\"py-3 px-4\">\n <div className=\"flex items-center justify-between gap-2\">\n <CardTitle className=\"text-sm font-medium flex items-center gap-2\">\n <Database className=\"w-4 h-4 text-muted-foreground\" />\n Broker\n </CardTitle>\n {memoryBrokerInfo?.capabilities && (\n <div className=\"flex flex-wrap gap-1 justify-end\">\n {Object.entries(memoryBrokerInfo.capabilities).filter(([, enabled]) => Boolean(enabled)).map(([key]) => (\n <Badge key={key} variant=\"outline\" className=\"text-[10px] px-1.5 py-0\">{key}</Badge>\n ))}\n </div>\n )}\n </div>\n </CardHeader>\n <CardContent className=\"px-4 pb-4 space-y-3\">\n <div className=\"grid grid-cols-2 md:grid-cols-5 gap-2\">\n <Metric label=\"total\" value={memoryStats?.total ?? memoryTotal} />\n <Metric label=\"project\" value={memoryStats?.byType?.project ?? 0} />\n <Metric label=\"task\" value={memoryStats?.byType?.task ?? 0} />\n <Metric label=\"agent\" value={memoryStats?.byType?.agent ?? 0} />\n <Metric label=\"sensitive\" value={(memoryStats?.bySensitivity?.sensitive ?? 0) + (memoryStats?.bySensitivity?.secret ?? 0)} />\n </div>\n <div className=\"font-mono text-xs text-muted-foreground truncate\" title={configText}>{configText}</div>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader className=\"py-3 px-4\">\n <CardTitle className=\"text-sm font-medium\">Inject</CardTitle>\n </CardHeader>\n <CardContent className=\"px-4 pb-4 space-y-2\">\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-2\">\n <select className=\"rounded-md border border-input bg-background px-2 py-1.5 text-sm\" value={injectAgent} onChange={(e) => setInjectAgent(e.target.value)}>\n <option value=\"\">Agent</option>\n {candidates.map((agent) => <option key={agent.id} value={agent.id}>{displayName(agent)}</option>)}\n </select>\n <Input value={injectReason} onChange={(e) => setInjectReason(e.target.value)} placeholder=\"reason\" />\n <Input value={maxTokens} onChange={(e) => setMaxTokens(e.target.value)} inputMode=\"numeric\" placeholder=\"tokens\" />\n <Input value={maxMemories} onChange={(e) => setMaxMemories(e.target.value)} inputMode=\"numeric\" placeholder=\"memories\" />\n </div>\n <div className=\"flex flex-wrap gap-2\">\n <Button size=\"sm\" className=\"gap-1.5\" disabled={!injectAgent || !selectedMemory} onClick={() => selectedMemory && runInject([selectedMemory.id])}>\n <Send className=\"w-3.5 h-3.5\" />\n Selected\n </Button>\n <Button size=\"sm\" variant=\"outline\" className=\"gap-1.5\" disabled={!injectAgent} onClick={() => runInject()}>\n <Search className=\"w-3.5 h-3.5\" />\n Filtered\n </Button>\n {lastCommand && <Badge variant=\"outline\" className=\"font-mono text-[10px]\">{lastCommand}</Badge>}\n </div>\n </CardContent>\n </Card>\n </div>\n\n <div className=\"grid gap-4 xl:grid-cols-[minmax(0,1fr)_420px]\">\n <div className=\"space-y-3\">\n <Card>\n <CardContent className=\"p-3\">\n <div className=\"grid grid-cols-2 lg:grid-cols-6 gap-2\">\n <Input className=\"lg:col-span-2\" value={memoryFilters.search} onChange={(e) => updateFilter({ search: e.target.value })} placeholder=\"Search visible memories\" />\n <select className=\"rounded-md border border-input bg-background px-2 py-1.5 text-sm\" value={memoryFilters.type} onChange={(e) => updateFilter({ type: e.target.value })}>\n <option value=\"\">All types</option>\n {MEMORY_TYPES.map((type) => <option key={type} value={type}>{type}</option>)}\n </select>\n <Input value={memoryFilters.scope} onChange={(e) => updateFilter({ scope: e.target.value })} placeholder=\"scope\" />\n <Input value={memoryFilters.tags} onChange={(e) => updateFilter({ tags: e.target.value })} placeholder=\"tags\" />\n <div className=\"flex gap-2\">\n <Input value={memoryFilters.minRelevance} onChange={(e) => updateFilter({ minRelevance: e.target.value })} placeholder=\"score\" />\n <Button size=\"sm\" variant=\"outline\" className=\"h-8 px-2\" onClick={() => fetchMemories()}>\n <Search className=\"w-4 h-4\" />\n </Button>\n </div>\n </div>\n </CardContent>\n </Card>\n\n <ScrollArea className=\"h-[calc(100dvh-24rem)] min-h-[360px]\">\n <div className=\"space-y-2 pr-2\">\n {visibleMemories.length === 0 && (\n <div className=\"text-center text-sm text-muted-foreground py-16\">No memories</div>\n )}\n {visibleMemories.map((memory) => (\n <MemoryRow\n key={memory.id}\n memory={memory}\n selected={memory.id === selectedMemoryId}\n now={now}\n onSelect={() => set({ selectedMemoryId: memory.id })}\n />\n ))}\n </div>\n </ScrollArea>\n </div>\n\n <Card>\n <CardHeader className=\"py-3 px-4\">\n <div className=\"flex items-center justify-between gap-2\">\n <CardTitle className=\"text-sm font-medium\">{formMode === 'edit' ? 'Edit Memory' : 'New Memory'}</CardTitle>\n <div className=\"flex gap-1\">\n <Button size=\"sm\" variant=\"ghost\" className=\"h-7 px-2\" onClick={startCreate} title=\"New memory\">\n <Plus className=\"w-3.5 h-3.5\" />\n </Button>\n <Button size=\"sm\" variant=\"ghost\" className=\"h-7 px-2\" onClick={startEdit} disabled={!selectedMemory} title=\"Edit selected\">\n <Edit3 className=\"w-3.5 h-3.5\" />\n </Button>\n <Button size=\"sm\" variant=\"ghost\" className=\"h-7 px-2 text-red-400 hover:text-red-300\" disabled={!selectedMemory} onClick={() => selectedMemory && deleteMemory(selectedMemory.id)} title=\"Delete selected\">\n <Trash2 className=\"w-3.5 h-3.5\" />\n </Button>\n </div>\n </div>\n </CardHeader>\n <CardContent className=\"px-4 pb-4 space-y-3\">\n {selectedMemory && (\n <>\n <div className=\"space-y-2\">\n <div className=\"flex flex-wrap gap-1\">\n <Badge variant=\"secondary\">{selectedMemory.type}</Badge>\n <Badge variant=\"outline\">{selectedMemory.scope}</Badge>\n <Badge className={sensitivityClass(selectedMemory.sensitivity)}>{selectedMemory.sensitivity}</Badge>\n <Badge variant=\"outline\" className={scoreClass(selectedMemory.relevanceScore)}>{selectedMemory.relevanceScore.toFixed(2)}</Badge>\n </div>\n <div className=\"text-xs text-muted-foreground\" title={fmtTime(selectedMemory.updatedAt)}>\n updated {timeAgo(now, selectedMemory.updatedAt)}\n </div>\n <p className=\"text-sm font-medium\">{selectedMemory.title}</p>\n <p className=\"text-xs text-muted-foreground whitespace-pre-wrap max-h-24 overflow-auto\">{selectedMemory.content}</p>\n </div>\n <Separator />\n </>\n )}\n\n <div className=\"grid grid-cols-2 gap-2\">\n <select className=\"rounded-md border border-input bg-background px-2 py-1.5 text-sm\" disabled={formMode === 'edit'} value={form.type} onChange={(e) => setForm({ ...form, type: e.target.value as MemoryType })}>\n {MEMORY_TYPES.map((type) => <option key={type} value={type}>{type}</option>)}\n </select>\n <Input disabled={formMode === 'edit'} value={form.scope} onChange={(e) => setForm({ ...form, scope: e.target.value })} placeholder=\"scope\" />\n <Input className=\"col-span-2\" value={form.title} onChange={(e) => setForm({ ...form, title: e.target.value })} placeholder=\"title\" />\n <Textarea className=\"col-span-2 min-h-32\" value={form.content} onChange={(e) => setForm({ ...form, content: e.target.value })} placeholder=\"content\" />\n <Input className=\"col-span-2\" value={form.tags} onChange={(e) => setForm({ ...form, tags: e.target.value })} placeholder=\"tags\" />\n <select className=\"rounded-md border border-input bg-background px-2 py-1.5 text-sm\" value={form.visibility} onChange={(e) => setForm({ ...form, visibility: e.target.value as MemoryForm['visibility'] })}>\n {VISIBILITIES.map((value) => <option key={value} value={value}>{value}</option>)}\n </select>\n <select className=\"rounded-md border border-input bg-background px-2 py-1.5 text-sm\" value={form.sensitivity} onChange={(e) => setForm({ ...form, sensitivity: e.target.value as MemoryForm['sensitivity'] })}>\n {SENSITIVITIES.map((value) => <option key={value} value={value}>{value}</option>)}\n </select>\n <select className=\"rounded-md border border-input bg-background px-2 py-1.5 text-sm\" value={form.confidence} onChange={(e) => setForm({ ...form, confidence: e.target.value as MemoryForm['confidence'] })}>\n {CONFIDENCES.map((value) => <option key={value} value={value}>{value}</option>)}\n </select>\n <Input value={form.relevanceScore} onChange={(e) => setForm({ ...form, relevanceScore: e.target.value })} inputMode=\"decimal\" placeholder=\"score\" />\n </div>\n <Button size=\"sm\" className=\"w-full\" disabled={!canSave} onClick={submitMemory}>\n {formMode === 'edit' ? 'Save memory' : 'Create memory'}\n </Button>\n </CardContent>\n </Card>\n </div>\n </div>\n )\n}\n\nfunction Metric({ label, value }: { label: string; value: number }) {\n return (\n <div className=\"rounded-md border border-border bg-muted/20 px-3 py-2\">\n <div className=\"text-lg font-semibold tabular-nums\">{value}</div>\n <div className=\"text-xs text-muted-foreground\">{label}</div>\n </div>\n )\n}\n\nfunction MemoryRow({ memory, selected, now, onSelect }: { memory: Memory; selected: boolean; now: number; onSelect: () => void }) {\n return (\n <button\n onClick={onSelect}\n className={`w-full text-left rounded-md border p-3 transition-colors ${selected ? 'border-primary bg-primary/5' : 'border-border bg-card hover:border-zinc-600'}`}\n >\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-1.5 flex-wrap\">\n <Badge variant=\"secondary\" className=\"text-[10px]\">{memory.type}</Badge>\n <Badge variant=\"outline\" className=\"text-[10px] font-mono\">{memory.scope}</Badge>\n <Badge className={`text-[10px] ${sensitivityClass(memory.sensitivity)}`}>{memory.sensitivity}</Badge>\n </div>\n <div className=\"font-medium text-sm mt-2 truncate\">{memory.title}</div>\n <div className=\"text-xs text-muted-foreground line-clamp-2 mt-1\">{memory.content}</div>\n {memory.tags.length > 0 && (\n <div className=\"flex gap-1 flex-wrap mt-2\">\n {memory.tags.slice(0, 8).map((tag) => <Badge key={tag} variant=\"outline\" className=\"text-[10px] text-zinc-400\">#{tag}</Badge>)}\n </div>\n )}\n </div>\n <div className=\"text-right shrink-0 space-y-1\">\n <div className={`text-sm font-semibold tabular-nums ${scoreClass(memory.relevanceScore)}`}>{memory.relevanceScore.toFixed(2)}</div>\n <div className=\"text-[10px] text-muted-foreground\" title={fmtTime(memory.updatedAt)}>{timeAgo(now, memory.updatedAt)}</div>\n {memory.accessCount > 0 && <div className=\"text-[10px] text-muted-foreground\">{memory.accessCount} hits</div>}\n </div>\n </div>\n </button>\n )\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{r as e}from"./chunk-CilyBKbf.js";import{$ as t,A as n,Qt as r,Un as i,Y as a,_t as o,i as s,jn as c,m as l,p as u,vn as d,z as f}from"./lucide-react-ChOGD4vc.js";import{o as p,t as m}from"./store-B6qT5_de.js";import{D as h,H as g,d as _,f as v,h as y}from"./display-ConJ9cJB.js";import{t as b}from"./badge-CFVr4fG9.js";import{t as x}from"./button-BuTu0MHx.js";import{H as S,L as C,t as w}from"./index-CT10XH5Y.js";import{n as T,t as E}from"./card-C3ErQ372.js";var D=e(i(),1),O=c();function k(e,t){if(t.startsWith(`/`))return t;let n=`${e.replace(/\/+$/,``)}/${t}`.split(`/`),r=[];for(let e of n)!e||e===`.`||(e===`..`?r.pop():r.push(e));return`/`+r.join(`/`)}function A(e){let t=e.replace(/\/+$/,``),n=t.lastIndexOf(`/`);return n>0?t.slice(0,n):`/`}function j(){let e=p(),n=m(e=>e.messages),r=m(e=>e.agentsById),i=m(e=>e.selectedAgent),o=m(e=>e.channelFilter),c=m(e=>e.tagFilter),l=m(e=>e.replyTo),u=m(e=>e.set),d=m(e=>e.openCompose),h=m(e=>e.startReply),g=m(e=>e.doClaim),v=m(e=>e.doDeliveryAction),y=m(e=>e.doDeleteMessage),w=m(e=>e.openThread),T=m(e=>e.cancelReply),E=C(),k=S(),A=(0,D.useMemo)(()=>{let e=[...n].sort((e,t)=>t.id-e.id);return i&&(e=e.filter(e=>e.from===i||e.to===i)),o&&(e=e.filter(e=>e.channel===o)),c&&(e=e.filter(e=>((r[e.from]||r[e.to])?.tags||[]).includes(c))),e},[n,i,o,c,r]),j=(0,D.useMemo)(()=>{let e=[],t=new Map;for(let n of A){let r=n.threadId??n.id;t.has(r)||t.set(r,[]),t.get(r).push(n),n.id===r&&e.push(n)}let n=new Set(e.map(e=>e.id));for(let t of A)!n.has(t.threadId??t.id)&&!e.find(e=>e.id===t.id)&&e.push(t);return e.sort((e,t)=>t.id-e.id),e.map(e=>({root:e,replies:(t.get(e.id)||[]).filter(t=>t.id!==e.id).sort((e,t)=>e.id-t.id)}))},[A]);function N(e){return r[e]?_(r[e]):e.slice(-10)}let P=(0,D.useMemo)(()=>[...new Set(n.map(e=>e.channel).filter(Boolean))],[n]);return(0,O.jsxs)(`div`,{className:`space-y-4`,children:[(0,O.jsxs)(`div`,{className:`flex items-center justify-between flex-wrap gap-2`,children:[(0,O.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,O.jsx)(t,{className:`w-5 h-5 text-muted-foreground`}),(0,O.jsx)(`h2`,{className:`text-lg font-semibold`,children:`Messages`}),(0,O.jsx)(b,{variant:`secondary`,children:A.length})]}),(0,O.jsxs)(x,{size:`sm`,onClick:d,children:[(0,O.jsx)(f,{className:`w-4 h-4 mr-1`}),` Compose`]})]}),(0,O.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,O.jsxs)(`select`,{className:`rounded-md border border-input bg-background px-3 py-1.5 text-sm`,value:i,onChange:e=>u({selectedAgent:e.target.value}),children:[(0,O.jsx)(`option`,{value:``,children:`All agents`}),E.map(e=>(0,O.jsx)(`option`,{value:e.id,children:_(e)},e.id))]}),(0,O.jsxs)(`select`,{className:`rounded-md border border-input bg-background px-3 py-1.5 text-sm`,value:c,onChange:e=>u({tagFilter:e.target.value}),children:[(0,O.jsx)(`option`,{value:``,children:`All tags`}),k.map(e=>(0,O.jsxs)(`option`,{value:e,children:[`#`,e]},e))]}),(0,O.jsxs)(`select`,{className:`rounded-md border border-input bg-background px-3 py-1.5 text-sm`,value:o,onChange:e=>u({channelFilter:e.target.value}),children:[(0,O.jsx)(`option`,{value:``,children:`All channels`}),P.map(e=>(0,O.jsx)(`option`,{value:e,children:e},e))]})]}),l&&(0,O.jsxs)(`div`,{className:`flex items-center gap-2 rounded-md bg-blue-500/10 border border-blue-500/20 px-3 py-2 text-sm text-blue-300`,children:[(0,O.jsx)(a,{className:`w-4 h-4 shrink-0`}),(0,O.jsxs)(`span`,{children:[`Replying to message #`,l.id,` from `,(0,O.jsx)(`strong`,{children:N(l.from)})]}),(0,O.jsx)(x,{variant:`ghost`,size:`sm`,className:`ml-auto h-6 px-1.5`,onClick:T,children:(0,O.jsx)(s,{className:`w-3.5 h-3.5`})})]}),(0,O.jsx)(`div`,{className:`h-[calc(100dvh-15rem)] overflow-y-auto`,children:(0,O.jsxs)(`div`,{className:`space-y-2 pr-2`,children:[j.length===0&&(0,O.jsx)(`div`,{className:`text-center text-muted-foreground py-16 text-sm`,children:`No messages`}),j.map(({root:t,replies:n})=>(0,O.jsxs)(`div`,{className:`space-y-1`,children:[(0,O.jsx)(M,{msg:t,now:e,agentLabel:N,agentsById:r,onReply:()=>h(t),onClaim:()=>g(t.id),onRetry:()=>v(t.id,`retry-now`),onMarkDead:()=>v(t.id,`mark-dead`,`Marked dead from dashboard`),onClear:()=>v(t.id,`clear`,`Cleared after manual handling`),onDelete:()=>y(t.id),onThread:t.threadId?()=>w(t.threadId):void 0,replyCount:n.length}),n.map(t=>(0,O.jsx)(`div`,{className:`ml-6`,children:(0,O.jsx)(M,{msg:t,now:e,agentLabel:N,agentsById:r,onReply:()=>h(t),onClaim:()=>g(t.id),onRetry:()=>v(t.id,`retry-now`),onMarkDead:()=>v(t.id,`mark-dead`,`Marked dead from dashboard`),onClear:()=>v(t.id,`clear`,`Cleared after manual handling`),onDelete:()=>y(t.id)})},t.id))]},t.id))]})})]})}function M({msg:e,now:t,agentLabel:i,agentsById:s,onReply:c,onClaim:u,onRetry:f,onMarkDead:p,onClear:_,onDelete:S,onThread:C,replyCount:j}){let[M,P]=(0,D.useState)(!1),F=h(e),I=m(e=>e.openFilesAt),L=e.deliveryStatus===`queued`||e.deliveryStatus===`failed`||e.deliveryStatus===`dead`||!!(e.deliveryLastError||e.deliveryPoisonReason),R=s[e.from===`user`?e.to:e.from];function z(e){return k((typeof R?.meta?.cwd==`string`?R.meta.cwd:``)||`/`,e)}function B(e,t){let n=z(e);I({path:A(n),selectedPath:n,line:t,overlay:!0})}return(0,O.jsx)(E,{className:`group relative`,children:(0,O.jsxs)(T,{className:`p-3`,children:[(0,O.jsxs)(`div`,{className:`min-w-0`,children:[(0,O.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap text-xs text-muted-foreground mb-1`,children:[(0,O.jsx)(`span`,{className:`font-medium text-foreground`,children:i(e.from)}),(0,O.jsx)(`span`,{children:`→`}),(0,O.jsx)(`span`,{children:v(e.to,s)}),e.channel&&(0,O.jsxs)(b,{variant:`outline`,className:`text-xs px-1.5 py-0 gap-0.5`,children:[(0,O.jsx)(o,{className:`w-2.5 h-2.5`}),e.channel]}),e.claimedBy&&(0,O.jsxs)(b,{variant:`outline`,className:`text-xs px-1.5 py-0 text-emerald-400 border-emerald-500/30`,children:[(0,O.jsx)(r,{className:`w-2.5 h-2.5 mr-0.5`}),`claimed`]}),L&&(0,O.jsx)(N,{msg:e,now:t}),e.subject&&(0,O.jsx)(`span`,{className:`font-medium text-foreground`,children:e.subject}),(0,O.jsxs)(`span`,{className:`ml-auto shrink-0`,title:y(e.createdAt),children:[(0,O.jsxs)(`span`,{className:`opacity-40 mr-1`,children:[`#`,e.id]}),g(t,e.createdAt)]})]}),F&&(0,O.jsx)(`div`,{className:`cursor-pointer`,onClick:()=>P(e=>!e),children:(0,O.jsx)(w,{text:F,rawBody:e.body,className:`text-sm text-muted-foreground ${M?``:`max-h-[3.75rem] overflow-hidden`}`,onOpenPath:B,resolvePathTitle:(e,t)=>`${z(e)}${t?`:${t}`:``}`})})]}),(0,O.jsxs)(`div`,{className:`absolute top-2 right-2 flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity bg-card rounded-md shadow-sm border border-border px-1 py-0.5`,children:[(0,O.jsx)(x,{variant:`ghost`,size:`sm`,className:`h-7 px-2 text-xs`,onClick:c,title:`Reply`,children:(0,O.jsx)(a,{className:`w-3.5 h-3.5`})}),e.claimable&&!e.claimedBy&&(0,O.jsx)(x,{variant:`ghost`,size:`sm`,className:`h-7 px-2 text-xs text-orange-400 hover:text-orange-300`,onClick:u,title:`Claim`,children:(0,O.jsx)(r,{className:`w-3.5 h-3.5`})}),L&&(0,O.jsx)(x,{variant:`ghost`,size:`sm`,className:`h-7 px-2 text-xs text-blue-400 hover:text-blue-300`,onClick:f,title:`Retry delivery now`,children:(0,O.jsx)(n,{className:`w-3.5 h-3.5`})}),e.deliveryStatus!==`dead`&&L&&(0,O.jsx)(x,{variant:`ghost`,size:`sm`,className:`h-7 px-2 text-xs text-red-400 hover:text-red-300`,onClick:p,title:`Mark dead`,children:(0,O.jsx)(d,{className:`w-3.5 h-3.5`})}),(e.deliveryStatus===`failed`||e.deliveryStatus===`dead`)&&(0,O.jsx)(x,{variant:`ghost`,size:`sm`,className:`h-7 px-2 text-xs text-emerald-400 hover:text-emerald-300`,onClick:_,title:`Clear after manual handling`,children:(0,O.jsx)(r,{className:`w-3.5 h-3.5`})}),C&&(j??0)>0&&(0,O.jsxs)(x,{variant:`ghost`,size:`sm`,className:`h-7 px-2 text-xs`,onClick:C,title:`Thread`,children:[`+`,j]}),(0,O.jsx)(x,{variant:`ghost`,size:`sm`,className:`h-7 px-2 text-xs text-red-400 hover:text-red-300`,onClick:S,title:`Delete`,children:(0,O.jsx)(l,{className:`w-3.5 h-3.5`})})]})]})})}function N({msg:e,now:t}){let n=e.deliveryStatus||`pending`,r=e.deliveryPoisonReason||e.deliveryLastError||(e.deliveryNextRetryAt?`retry ${g(t,e.deliveryNextRetryAt)}`:void 0);return(0,O.jsxs)(b,{variant:`outline`,className:`text-xs px-1.5 py-0 ${n===`dead`?`text-red-300 border-red-500/30 bg-red-500/10`:n===`failed`?`text-amber-300 border-amber-500/30 bg-amber-500/10`:`text-blue-300 border-blue-500/30 bg-blue-500/10`}`,title:r||n,children:[(0,O.jsx)(u,{className:`w-2.5 h-2.5 mr-0.5`}),n,e.deliveryAttempts?` ${e.deliveryAttempts}x`:``]})}export{j as MessagesView};
2
- //# sourceMappingURL=messages-C8z05Y3O.js.map
1
+ import{r as e}from"./chunk-CilyBKbf.js";import{$ as t,A as n,Qt as r,Un as i,Y as a,_t as o,i as s,jn as c,m as l,p as u,vn as d,z as f}from"./lucide-react-ChOGD4vc.js";import{o as p,t as m}from"./store-qcA2XXVy.js";import{D as h,H as g,d as _,f as v,h as y}from"./display-CXhnBwGf.js";import{t as b}from"./badge-BR4bvEsy.js";import{t as x}from"./button-BwqJZS4O.js";import{R as S,U as C,t as w}from"./index-DtubrNEq.js";import{n as T,t as E}from"./card-C7JtSyuM.js";var D=e(i(),1),O=c();function k(e,t){if(t.startsWith(`/`))return t;let n=`${e.replace(/\/+$/,``)}/${t}`.split(`/`),r=[];for(let e of n)!e||e===`.`||(e===`..`?r.pop():r.push(e));return`/`+r.join(`/`)}function A(e){let t=e.replace(/\/+$/,``),n=t.lastIndexOf(`/`);return n>0?t.slice(0,n):`/`}function j(){let e=p(),n=m(e=>e.messages),r=m(e=>e.agentsById),i=m(e=>e.selectedAgent),o=m(e=>e.channelFilter),c=m(e=>e.tagFilter),l=m(e=>e.replyTo),u=m(e=>e.set),d=m(e=>e.openCompose),h=m(e=>e.startReply),g=m(e=>e.doClaim),v=m(e=>e.doDeliveryAction),y=m(e=>e.doDeleteMessage),w=m(e=>e.openThread),T=m(e=>e.cancelReply),E=S(),k=C(),A=(0,D.useMemo)(()=>{let e=[...n].sort((e,t)=>t.id-e.id);return i&&(e=e.filter(e=>e.from===i||e.to===i)),o&&(e=e.filter(e=>e.channel===o)),c&&(e=e.filter(e=>((r[e.from]||r[e.to])?.tags||[]).includes(c))),e},[n,i,o,c,r]),j=(0,D.useMemo)(()=>{let e=[],t=new Map;for(let n of A){let r=n.threadId??n.id;t.has(r)||t.set(r,[]),t.get(r).push(n),n.id===r&&e.push(n)}let n=new Set(e.map(e=>e.id));for(let t of A)!n.has(t.threadId??t.id)&&!e.find(e=>e.id===t.id)&&e.push(t);return e.sort((e,t)=>t.id-e.id),e.map(e=>({root:e,replies:(t.get(e.id)||[]).filter(t=>t.id!==e.id).sort((e,t)=>e.id-t.id)}))},[A]);function N(e){return r[e]?_(r[e]):e.slice(-10)}let P=(0,D.useMemo)(()=>[...new Set(n.map(e=>e.channel).filter(Boolean))],[n]);return(0,O.jsxs)(`div`,{className:`space-y-4`,children:[(0,O.jsxs)(`div`,{className:`flex items-center justify-between flex-wrap gap-2`,children:[(0,O.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,O.jsx)(t,{className:`w-5 h-5 text-muted-foreground`}),(0,O.jsx)(`h2`,{className:`text-lg font-semibold`,children:`Messages`}),(0,O.jsx)(b,{variant:`secondary`,children:A.length})]}),(0,O.jsxs)(x,{size:`sm`,onClick:d,children:[(0,O.jsx)(f,{className:`w-4 h-4 mr-1`}),` Compose`]})]}),(0,O.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,O.jsxs)(`select`,{className:`rounded-md border border-input bg-background px-3 py-1.5 text-sm`,value:i,onChange:e=>u({selectedAgent:e.target.value}),children:[(0,O.jsx)(`option`,{value:``,children:`All agents`}),E.map(e=>(0,O.jsx)(`option`,{value:e.id,children:_(e)},e.id))]}),(0,O.jsxs)(`select`,{className:`rounded-md border border-input bg-background px-3 py-1.5 text-sm`,value:c,onChange:e=>u({tagFilter:e.target.value}),children:[(0,O.jsx)(`option`,{value:``,children:`All tags`}),k.map(e=>(0,O.jsxs)(`option`,{value:e,children:[`#`,e]},e))]}),(0,O.jsxs)(`select`,{className:`rounded-md border border-input bg-background px-3 py-1.5 text-sm`,value:o,onChange:e=>u({channelFilter:e.target.value}),children:[(0,O.jsx)(`option`,{value:``,children:`All channels`}),P.map(e=>(0,O.jsx)(`option`,{value:e,children:e},e))]})]}),l&&(0,O.jsxs)(`div`,{className:`flex items-center gap-2 rounded-md bg-blue-500/10 border border-blue-500/20 px-3 py-2 text-sm text-blue-300`,children:[(0,O.jsx)(a,{className:`w-4 h-4 shrink-0`}),(0,O.jsxs)(`span`,{children:[`Replying to message #`,l.id,` from `,(0,O.jsx)(`strong`,{children:N(l.from)})]}),(0,O.jsx)(x,{variant:`ghost`,size:`sm`,className:`ml-auto h-6 px-1.5`,onClick:T,children:(0,O.jsx)(s,{className:`w-3.5 h-3.5`})})]}),(0,O.jsx)(`div`,{className:`h-[calc(100dvh-15rem)] overflow-y-auto`,children:(0,O.jsxs)(`div`,{className:`space-y-2 pr-2`,children:[j.length===0&&(0,O.jsx)(`div`,{className:`text-center text-muted-foreground py-16 text-sm`,children:`No messages`}),j.map(({root:t,replies:n})=>(0,O.jsxs)(`div`,{className:`space-y-1`,children:[(0,O.jsx)(M,{msg:t,now:e,agentLabel:N,agentsById:r,onReply:()=>h(t),onClaim:()=>g(t.id),onRetry:()=>v(t.id,`retry-now`),onMarkDead:()=>v(t.id,`mark-dead`,`Marked dead from dashboard`),onClear:()=>v(t.id,`clear`,`Cleared after manual handling`),onDelete:()=>y(t.id),onThread:t.threadId?()=>w(t.threadId):void 0,replyCount:n.length}),n.map(t=>(0,O.jsx)(`div`,{className:`ml-6`,children:(0,O.jsx)(M,{msg:t,now:e,agentLabel:N,agentsById:r,onReply:()=>h(t),onClaim:()=>g(t.id),onRetry:()=>v(t.id,`retry-now`),onMarkDead:()=>v(t.id,`mark-dead`,`Marked dead from dashboard`),onClear:()=>v(t.id,`clear`,`Cleared after manual handling`),onDelete:()=>y(t.id)})},t.id))]},t.id))]})})]})}function M({msg:e,now:t,agentLabel:i,agentsById:s,onReply:c,onClaim:u,onRetry:f,onMarkDead:p,onClear:_,onDelete:S,onThread:C,replyCount:j}){let[M,P]=(0,D.useState)(!1),F=h(e),I=m(e=>e.openFilesAt),L=e.deliveryStatus===`queued`||e.deliveryStatus===`failed`||e.deliveryStatus===`dead`||!!(e.deliveryLastError||e.deliveryPoisonReason),R=s[e.from===`user`?e.to:e.from];function z(e){return k((typeof R?.meta?.cwd==`string`?R.meta.cwd:``)||`/`,e)}function B(e,t){let n=z(e);I({path:A(n),selectedPath:n,line:t,overlay:!0})}return(0,O.jsx)(E,{className:`group relative`,children:(0,O.jsxs)(T,{className:`p-3`,children:[(0,O.jsxs)(`div`,{className:`min-w-0`,children:[(0,O.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap text-xs text-muted-foreground mb-1`,children:[(0,O.jsx)(`span`,{className:`font-medium text-foreground`,children:i(e.from)}),(0,O.jsx)(`span`,{children:`→`}),(0,O.jsx)(`span`,{children:v(e.to,s)}),e.channel&&(0,O.jsxs)(b,{variant:`outline`,className:`text-xs px-1.5 py-0 gap-0.5`,children:[(0,O.jsx)(o,{className:`w-2.5 h-2.5`}),e.channel]}),e.claimedBy&&(0,O.jsxs)(b,{variant:`outline`,className:`text-xs px-1.5 py-0 text-emerald-400 border-emerald-500/30`,children:[(0,O.jsx)(r,{className:`w-2.5 h-2.5 mr-0.5`}),`claimed`]}),L&&(0,O.jsx)(N,{msg:e,now:t}),e.subject&&(0,O.jsx)(`span`,{className:`font-medium text-foreground`,children:e.subject}),(0,O.jsxs)(`span`,{className:`ml-auto shrink-0`,title:y(e.createdAt),children:[(0,O.jsxs)(`span`,{className:`opacity-40 mr-1`,children:[`#`,e.id]}),g(t,e.createdAt)]})]}),F&&(0,O.jsx)(`div`,{className:`cursor-pointer`,onClick:()=>P(e=>!e),children:(0,O.jsx)(w,{text:F,rawBody:e.body,className:`text-sm text-muted-foreground ${M?``:`max-h-[3.75rem] overflow-hidden`}`,onOpenPath:B,resolvePathTitle:(e,t)=>`${z(e)}${t?`:${t}`:``}`})})]}),(0,O.jsxs)(`div`,{className:`absolute top-2 right-2 flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity bg-card rounded-md shadow-sm border border-border px-1 py-0.5`,children:[(0,O.jsx)(x,{variant:`ghost`,size:`sm`,className:`h-7 px-2 text-xs`,onClick:c,title:`Reply`,children:(0,O.jsx)(a,{className:`w-3.5 h-3.5`})}),e.claimable&&!e.claimedBy&&(0,O.jsx)(x,{variant:`ghost`,size:`sm`,className:`h-7 px-2 text-xs text-orange-400 hover:text-orange-300`,onClick:u,title:`Claim`,children:(0,O.jsx)(r,{className:`w-3.5 h-3.5`})}),L&&(0,O.jsx)(x,{variant:`ghost`,size:`sm`,className:`h-7 px-2 text-xs text-blue-400 hover:text-blue-300`,onClick:f,title:`Retry delivery now`,children:(0,O.jsx)(n,{className:`w-3.5 h-3.5`})}),e.deliveryStatus!==`dead`&&L&&(0,O.jsx)(x,{variant:`ghost`,size:`sm`,className:`h-7 px-2 text-xs text-red-400 hover:text-red-300`,onClick:p,title:`Mark dead`,children:(0,O.jsx)(d,{className:`w-3.5 h-3.5`})}),(e.deliveryStatus===`failed`||e.deliveryStatus===`dead`)&&(0,O.jsx)(x,{variant:`ghost`,size:`sm`,className:`h-7 px-2 text-xs text-emerald-400 hover:text-emerald-300`,onClick:_,title:`Clear after manual handling`,children:(0,O.jsx)(r,{className:`w-3.5 h-3.5`})}),C&&(j??0)>0&&(0,O.jsxs)(x,{variant:`ghost`,size:`sm`,className:`h-7 px-2 text-xs`,onClick:C,title:`Thread`,children:[`+`,j]}),(0,O.jsx)(x,{variant:`ghost`,size:`sm`,className:`h-7 px-2 text-xs text-red-400 hover:text-red-300`,onClick:S,title:`Delete`,children:(0,O.jsx)(l,{className:`w-3.5 h-3.5`})})]})]})})}function N({msg:e,now:t}){let n=e.deliveryStatus||`pending`,r=e.deliveryPoisonReason||e.deliveryLastError||(e.deliveryNextRetryAt?`retry ${g(t,e.deliveryNextRetryAt)}`:void 0);return(0,O.jsxs)(b,{variant:`outline`,className:`text-xs px-1.5 py-0 ${n===`dead`?`text-red-300 border-red-500/30 bg-red-500/10`:n===`failed`?`text-amber-300 border-amber-500/30 bg-amber-500/10`:`text-blue-300 border-blue-500/30 bg-blue-500/10`}`,title:r||n,children:[(0,O.jsx)(u,{className:`w-2.5 h-2.5 mr-0.5`}),n,e.deliveryAttempts?` ${e.deliveryAttempts}x`:``]})}export{j as MessagesView};
2
+ //# sourceMappingURL=messages-BTSGjXwT.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"messages-C8z05Y3O.js","names":[],"sources":["../../dashboard/src/components/views/messages.tsx"],"sourcesContent":["import { useMemo, useState } from 'react'\nimport { useRelayStore, useNow } from '@/store'\nimport { useComposeAgents, useUniqueTags } from '@/hooks/use-selectors'\nimport { Card, CardContent } from '@/components/ui/card'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { FormattedBody } from '@/components/shared/formatted-body'\nimport {\n Mail, Pencil, MessageSquareReply, CheckCircle2, Trash2, X, Hash, AlertTriangle, RotateCcw, Ban,\n} from 'lucide-react'\nimport { displayName, displayTarget, messageBody, timeAgo, fmtTime } from '@/lib/display'\nimport type { Message } from '@/types'\n\nfunction resolveRelativePath(cwd: string, path: string): string {\n if (path.startsWith('/')) return path\n const parts = `${cwd.replace(/\\/+$/, '')}/${path}`.split('/')\n const stack: string[] = []\n for (const part of parts) {\n if (!part || part === '.') continue\n if (part === '..') stack.pop()\n else stack.push(part)\n }\n return '/' + stack.join('/')\n}\n\nfunction parentPath(path: string): string {\n const trimmed = path.replace(/\\/+$/, '')\n const index = trimmed.lastIndexOf('/')\n return index > 0 ? trimmed.slice(0, index) : '/'\n}\n\nexport function MessagesView() {\n const now = useNow()\n const messages = useRelayStore((s) => s.messages)\n const agentsById = useRelayStore((s) => s.agentsById)\n const selectedAgent = useRelayStore((s) => s.selectedAgent)\n const channelFilter = useRelayStore((s) => s.channelFilter)\n const tagFilter = useRelayStore((s) => s.tagFilter)\n const replyTo = useRelayStore((s) => s.replyTo)\n const set = useRelayStore((s) => s.set)\n const openCompose = useRelayStore((s) => s.openCompose)\n const startReply = useRelayStore((s) => s.startReply)\n const doClaim = useRelayStore((s) => s.doClaim)\n const doDeliveryAction = useRelayStore((s) => s.doDeliveryAction)\n const doDeleteMessage = useRelayStore((s) => s.doDeleteMessage)\n const openThread = useRelayStore((s) => s.openThread)\n const cancelReply = useRelayStore((s) => s.cancelReply)\n\n const composeAgents = useComposeAgents()\n const uniqueTags = useUniqueTags()\n\n const filtered = useMemo(() => {\n let list = [...messages].sort((a, b) => b.id - a.id)\n if (selectedAgent) list = list.filter((m) => m.from === selectedAgent || m.to === selectedAgent)\n if (channelFilter) list = list.filter((m) => m.channel === channelFilter)\n if (tagFilter) list = list.filter((m) => {\n const agent = agentsById[m.from] || agentsById[m.to]\n return (agent?.tags || []).includes(tagFilter)\n })\n return list\n }, [messages, selectedAgent, channelFilter, tagFilter, agentsById])\n\n // Group by threadId — show root messages, collapse replies\n const grouped = useMemo(() => {\n const roots: Message[] = []\n const threads = new Map<number, Message[]>()\n for (const msg of filtered) {\n const tid = msg.threadId ?? msg.id\n if (!threads.has(tid)) threads.set(tid, [])\n threads.get(tid)!.push(msg)\n if (msg.id === tid) roots.push(msg)\n }\n // messages without a known root\n const seenRoots = new Set(roots.map((r) => r.id))\n for (const msg of filtered) {\n if (!seenRoots.has(msg.threadId ?? msg.id) && !roots.find((r) => r.id === msg.id)) {\n roots.push(msg)\n }\n }\n roots.sort((a, b) => b.id - a.id)\n return roots.map((r) => ({ root: r, replies: (threads.get(r.id) || []).filter((m) => m.id !== r.id).sort((a, b) => a.id - b.id) }))\n }, [filtered])\n\n function agentLabel(id: string) {\n return agentsById[id] ? displayName(agentsById[id]) : id.slice(-10)\n }\n\n const uniqueChannels = useMemo(() => {\n return [...new Set(messages.map((m) => m.channel).filter(Boolean) as string[])]\n }, [messages])\n\n return (\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between flex-wrap gap-2\">\n <div className=\"flex items-center gap-2\">\n <Mail className=\"w-5 h-5 text-muted-foreground\" />\n <h2 className=\"text-lg font-semibold\">Messages</h2>\n <Badge variant=\"secondary\">{filtered.length}</Badge>\n </div>\n <Button size=\"sm\" onClick={openCompose}>\n <Pencil className=\"w-4 h-4 mr-1\" /> Compose\n </Button>\n </div>\n\n <div className=\"flex flex-wrap gap-2\">\n <select\n className=\"rounded-md border border-input bg-background px-3 py-1.5 text-sm\"\n value={selectedAgent}\n onChange={(e) => set({ selectedAgent: e.target.value })}\n >\n <option value=\"\">All agents</option>\n {composeAgents.map((a) => <option key={a.id} value={a.id}>{displayName(a)}</option>)}\n </select>\n <select\n className=\"rounded-md border border-input bg-background px-3 py-1.5 text-sm\"\n value={tagFilter}\n onChange={(e) => set({ tagFilter: e.target.value })}\n >\n <option value=\"\">All tags</option>\n {uniqueTags.map((t) => <option key={t} value={t}>#{t}</option>)}\n </select>\n <select\n className=\"rounded-md border border-input bg-background px-3 py-1.5 text-sm\"\n value={channelFilter}\n onChange={(e) => set({ channelFilter: e.target.value })}\n >\n <option value=\"\">All channels</option>\n {uniqueChannels.map((c) => <option key={c} value={c}>{c}</option>)}\n </select>\n </div>\n\n {replyTo && (\n <div className=\"flex items-center gap-2 rounded-md bg-blue-500/10 border border-blue-500/20 px-3 py-2 text-sm text-blue-300\">\n <MessageSquareReply className=\"w-4 h-4 shrink-0\" />\n <span>Replying to message #{replyTo.id} from <strong>{agentLabel(replyTo.from)}</strong></span>\n <Button variant=\"ghost\" size=\"sm\" className=\"ml-auto h-6 px-1.5\" onClick={cancelReply}>\n <X className=\"w-3.5 h-3.5\" />\n </Button>\n </div>\n )}\n\n <div className=\"h-[calc(100dvh-15rem)] overflow-y-auto\">\n <div className=\"space-y-2 pr-2\">\n {grouped.length === 0 && (\n <div className=\"text-center text-muted-foreground py-16 text-sm\">No messages</div>\n )}\n {grouped.map(({ root, replies }) => (\n <div key={root.id} className=\"space-y-1\">\n <MessageRow\n msg={root}\n now={now}\n agentLabel={agentLabel}\n agentsById={agentsById}\n onReply={() => startReply(root)}\n onClaim={() => doClaim(root.id)}\n onRetry={() => doDeliveryAction(root.id, 'retry-now')}\n onMarkDead={() => doDeliveryAction(root.id, 'mark-dead', 'Marked dead from dashboard')}\n onClear={() => doDeliveryAction(root.id, 'clear', 'Cleared after manual handling')}\n onDelete={() => doDeleteMessage(root.id)}\n onThread={root.threadId ? () => openThread(root.threadId!) : undefined}\n replyCount={replies.length}\n />\n {replies.map((r) => (\n <div key={r.id} className=\"ml-6\">\n <MessageRow\n msg={r}\n now={now}\n agentLabel={agentLabel}\n agentsById={agentsById}\n onReply={() => startReply(r)}\n onClaim={() => doClaim(r.id)}\n onRetry={() => doDeliveryAction(r.id, 'retry-now')}\n onMarkDead={() => doDeliveryAction(r.id, 'mark-dead', 'Marked dead from dashboard')}\n onClear={() => doDeliveryAction(r.id, 'clear', 'Cleared after manual handling')}\n onDelete={() => doDeleteMessage(r.id)}\n />\n </div>\n ))}\n </div>\n ))}\n </div>\n </div>\n </div>\n )\n}\n\nfunction MessageRow({\n msg, now, agentLabel, agentsById, onReply, onClaim, onRetry, onMarkDead, onClear, onDelete, onThread, replyCount,\n}: {\n msg: Message\n now: number\n agentLabel: (id: string) => string\n agentsById: Record<string, import('@/types').Agent>\n onReply: () => void\n onClaim: () => void\n onRetry: () => void\n onMarkDead: () => void\n onClear: () => void\n onDelete: () => void\n onThread?: () => void\n replyCount?: number\n}) {\n const [expanded, setExpanded] = useState(false)\n const body = messageBody(msg)\n const openFilesAt = useRelayStore((s) => s.openFilesAt)\n const deliveryProblem = msg.deliveryStatus === 'queued' || msg.deliveryStatus === 'failed' || msg.deliveryStatus === 'dead' || Boolean(msg.deliveryLastError || msg.deliveryPoisonReason)\n const peer = msg.from === 'user' ? msg.to : msg.from\n const peerAgent = agentsById[peer]\n\n function resolvedReferencedPath(path: string): string {\n const cwd = typeof peerAgent?.meta?.cwd === 'string' ? peerAgent.meta.cwd : ''\n return resolveRelativePath(cwd || '/', path)\n }\n\n function openReferencedPath(path: string, line?: number) {\n const absolute = resolvedReferencedPath(path)\n void openFilesAt({ path: parentPath(absolute), selectedPath: absolute, line, overlay: true })\n }\n\n return (\n <Card className=\"group relative\">\n <CardContent className=\"p-3\">\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-2 flex-wrap text-xs text-muted-foreground mb-1\">\n <span className=\"font-medium text-foreground\">{agentLabel(msg.from)}</span>\n <span>→</span>\n <span>{displayTarget(msg.to, agentsById)}</span>\n {msg.channel && (\n <Badge variant=\"outline\" className=\"text-xs px-1.5 py-0 gap-0.5\">\n <Hash className=\"w-2.5 h-2.5\" />{msg.channel}\n </Badge>\n )}\n {msg.claimedBy && (\n <Badge variant=\"outline\" className=\"text-xs px-1.5 py-0 text-emerald-400 border-emerald-500/30\">\n <CheckCircle2 className=\"w-2.5 h-2.5 mr-0.5\" />claimed\n </Badge>\n )}\n {deliveryProblem && <DeliveryBadge msg={msg} now={now} />}\n {msg.subject && <span className=\"font-medium text-foreground\">{msg.subject}</span>}\n <span className=\"ml-auto shrink-0\" title={fmtTime(msg.createdAt)}><span className=\"opacity-40 mr-1\">#{msg.id}</span>{timeAgo(now, msg.createdAt)}</span>\n </div>\n {body && (\n <div className=\"cursor-pointer\" onClick={() => setExpanded((v) => !v)}>\n <FormattedBody text={body} rawBody={msg.body} className={`text-sm text-muted-foreground ${expanded ? '' : 'max-h-[3.75rem] overflow-hidden'}`} onOpenPath={openReferencedPath} resolvePathTitle={(path, line) => `${resolvedReferencedPath(path)}${line ? `:${line}` : ''}`} />\n </div>\n )}\n </div>\n <div className=\"absolute top-2 right-2 flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity bg-card rounded-md shadow-sm border border-border px-1 py-0.5\">\n <Button variant=\"ghost\" size=\"sm\" className=\"h-7 px-2 text-xs\" onClick={onReply} title=\"Reply\">\n <MessageSquareReply className=\"w-3.5 h-3.5\" />\n </Button>\n {msg.claimable && !msg.claimedBy && (\n <Button variant=\"ghost\" size=\"sm\" className=\"h-7 px-2 text-xs text-orange-400 hover:text-orange-300\" onClick={onClaim} title=\"Claim\">\n <CheckCircle2 className=\"w-3.5 h-3.5\" />\n </Button>\n )}\n {deliveryProblem && (\n <Button variant=\"ghost\" size=\"sm\" className=\"h-7 px-2 text-xs text-blue-400 hover:text-blue-300\" onClick={onRetry} title=\"Retry delivery now\">\n <RotateCcw className=\"w-3.5 h-3.5\" />\n </Button>\n )}\n {msg.deliveryStatus !== 'dead' && deliveryProblem && (\n <Button variant=\"ghost\" size=\"sm\" className=\"h-7 px-2 text-xs text-red-400 hover:text-red-300\" onClick={onMarkDead} title=\"Mark dead\">\n <Ban className=\"w-3.5 h-3.5\" />\n </Button>\n )}\n {(msg.deliveryStatus === 'failed' || msg.deliveryStatus === 'dead') && (\n <Button variant=\"ghost\" size=\"sm\" className=\"h-7 px-2 text-xs text-emerald-400 hover:text-emerald-300\" onClick={onClear} title=\"Clear after manual handling\">\n <CheckCircle2 className=\"w-3.5 h-3.5\" />\n </Button>\n )}\n {onThread && (replyCount ?? 0) > 0 && (\n <Button variant=\"ghost\" size=\"sm\" className=\"h-7 px-2 text-xs\" onClick={onThread} title=\"Thread\">\n +{replyCount}\n </Button>\n )}\n <Button variant=\"ghost\" size=\"sm\" className=\"h-7 px-2 text-xs text-red-400 hover:text-red-300\" onClick={onDelete} title=\"Delete\">\n <Trash2 className=\"w-3.5 h-3.5\" />\n </Button>\n </div>\n </CardContent>\n </Card>\n )\n}\n\nfunction DeliveryBadge({ msg, now }: { msg: Message; now: number }) {\n const status = msg.deliveryStatus || 'pending'\n const detail = msg.deliveryPoisonReason || msg.deliveryLastError || (msg.deliveryNextRetryAt ? `retry ${timeAgo(now, msg.deliveryNextRetryAt)}` : undefined)\n const className = status === 'dead'\n ? 'text-red-300 border-red-500/30 bg-red-500/10'\n : status === 'failed'\n ? 'text-amber-300 border-amber-500/30 bg-amber-500/10'\n : 'text-blue-300 border-blue-500/30 bg-blue-500/10'\n return (\n <Badge variant=\"outline\" className={`text-xs px-1.5 py-0 ${className}`} title={detail || status}>\n <AlertTriangle className=\"w-2.5 h-2.5 mr-0.5\" />\n {status}{msg.deliveryAttempts ? ` ${msg.deliveryAttempts}x` : ''}\n </Badge>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"messages-BTSGjXwT.js","names":[],"sources":["../../dashboard/src/components/views/messages.tsx"],"sourcesContent":["import { useMemo, useState } from 'react'\nimport { useRelayStore, useNow } from '@/store'\nimport { useComposeAgents, useUniqueTags } from '@/hooks/use-selectors'\nimport { Card, CardContent } from '@/components/ui/card'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { FormattedBody } from '@/components/shared/formatted-body'\nimport {\n Mail, Pencil, MessageSquareReply, CheckCircle2, Trash2, X, Hash, AlertTriangle, RotateCcw, Ban,\n} from 'lucide-react'\nimport { displayName, displayTarget, messageBody, timeAgo, fmtTime } from '@/lib/display'\nimport type { Message } from '@/types'\n\nfunction resolveRelativePath(cwd: string, path: string): string {\n if (path.startsWith('/')) return path\n const parts = `${cwd.replace(/\\/+$/, '')}/${path}`.split('/')\n const stack: string[] = []\n for (const part of parts) {\n if (!part || part === '.') continue\n if (part === '..') stack.pop()\n else stack.push(part)\n }\n return '/' + stack.join('/')\n}\n\nfunction parentPath(path: string): string {\n const trimmed = path.replace(/\\/+$/, '')\n const index = trimmed.lastIndexOf('/')\n return index > 0 ? trimmed.slice(0, index) : '/'\n}\n\nexport function MessagesView() {\n const now = useNow()\n const messages = useRelayStore((s) => s.messages)\n const agentsById = useRelayStore((s) => s.agentsById)\n const selectedAgent = useRelayStore((s) => s.selectedAgent)\n const channelFilter = useRelayStore((s) => s.channelFilter)\n const tagFilter = useRelayStore((s) => s.tagFilter)\n const replyTo = useRelayStore((s) => s.replyTo)\n const set = useRelayStore((s) => s.set)\n const openCompose = useRelayStore((s) => s.openCompose)\n const startReply = useRelayStore((s) => s.startReply)\n const doClaim = useRelayStore((s) => s.doClaim)\n const doDeliveryAction = useRelayStore((s) => s.doDeliveryAction)\n const doDeleteMessage = useRelayStore((s) => s.doDeleteMessage)\n const openThread = useRelayStore((s) => s.openThread)\n const cancelReply = useRelayStore((s) => s.cancelReply)\n\n const composeAgents = useComposeAgents()\n const uniqueTags = useUniqueTags()\n\n const filtered = useMemo(() => {\n let list = [...messages].sort((a, b) => b.id - a.id)\n if (selectedAgent) list = list.filter((m) => m.from === selectedAgent || m.to === selectedAgent)\n if (channelFilter) list = list.filter((m) => m.channel === channelFilter)\n if (tagFilter) list = list.filter((m) => {\n const agent = agentsById[m.from] || agentsById[m.to]\n return (agent?.tags || []).includes(tagFilter)\n })\n return list\n }, [messages, selectedAgent, channelFilter, tagFilter, agentsById])\n\n // Group by threadId — show root messages, collapse replies\n const grouped = useMemo(() => {\n const roots: Message[] = []\n const threads = new Map<number, Message[]>()\n for (const msg of filtered) {\n const tid = msg.threadId ?? msg.id\n if (!threads.has(tid)) threads.set(tid, [])\n threads.get(tid)!.push(msg)\n if (msg.id === tid) roots.push(msg)\n }\n // messages without a known root\n const seenRoots = new Set(roots.map((r) => r.id))\n for (const msg of filtered) {\n if (!seenRoots.has(msg.threadId ?? msg.id) && !roots.find((r) => r.id === msg.id)) {\n roots.push(msg)\n }\n }\n roots.sort((a, b) => b.id - a.id)\n return roots.map((r) => ({ root: r, replies: (threads.get(r.id) || []).filter((m) => m.id !== r.id).sort((a, b) => a.id - b.id) }))\n }, [filtered])\n\n function agentLabel(id: string) {\n return agentsById[id] ? displayName(agentsById[id]) : id.slice(-10)\n }\n\n const uniqueChannels = useMemo(() => {\n return [...new Set(messages.map((m) => m.channel).filter(Boolean) as string[])]\n }, [messages])\n\n return (\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between flex-wrap gap-2\">\n <div className=\"flex items-center gap-2\">\n <Mail className=\"w-5 h-5 text-muted-foreground\" />\n <h2 className=\"text-lg font-semibold\">Messages</h2>\n <Badge variant=\"secondary\">{filtered.length}</Badge>\n </div>\n <Button size=\"sm\" onClick={openCompose}>\n <Pencil className=\"w-4 h-4 mr-1\" /> Compose\n </Button>\n </div>\n\n <div className=\"flex flex-wrap gap-2\">\n <select\n className=\"rounded-md border border-input bg-background px-3 py-1.5 text-sm\"\n value={selectedAgent}\n onChange={(e) => set({ selectedAgent: e.target.value })}\n >\n <option value=\"\">All agents</option>\n {composeAgents.map((a) => <option key={a.id} value={a.id}>{displayName(a)}</option>)}\n </select>\n <select\n className=\"rounded-md border border-input bg-background px-3 py-1.5 text-sm\"\n value={tagFilter}\n onChange={(e) => set({ tagFilter: e.target.value })}\n >\n <option value=\"\">All tags</option>\n {uniqueTags.map((t) => <option key={t} value={t}>#{t}</option>)}\n </select>\n <select\n className=\"rounded-md border border-input bg-background px-3 py-1.5 text-sm\"\n value={channelFilter}\n onChange={(e) => set({ channelFilter: e.target.value })}\n >\n <option value=\"\">All channels</option>\n {uniqueChannels.map((c) => <option key={c} value={c}>{c}</option>)}\n </select>\n </div>\n\n {replyTo && (\n <div className=\"flex items-center gap-2 rounded-md bg-blue-500/10 border border-blue-500/20 px-3 py-2 text-sm text-blue-300\">\n <MessageSquareReply className=\"w-4 h-4 shrink-0\" />\n <span>Replying to message #{replyTo.id} from <strong>{agentLabel(replyTo.from)}</strong></span>\n <Button variant=\"ghost\" size=\"sm\" className=\"ml-auto h-6 px-1.5\" onClick={cancelReply}>\n <X className=\"w-3.5 h-3.5\" />\n </Button>\n </div>\n )}\n\n <div className=\"h-[calc(100dvh-15rem)] overflow-y-auto\">\n <div className=\"space-y-2 pr-2\">\n {grouped.length === 0 && (\n <div className=\"text-center text-muted-foreground py-16 text-sm\">No messages</div>\n )}\n {grouped.map(({ root, replies }) => (\n <div key={root.id} className=\"space-y-1\">\n <MessageRow\n msg={root}\n now={now}\n agentLabel={agentLabel}\n agentsById={agentsById}\n onReply={() => startReply(root)}\n onClaim={() => doClaim(root.id)}\n onRetry={() => doDeliveryAction(root.id, 'retry-now')}\n onMarkDead={() => doDeliveryAction(root.id, 'mark-dead', 'Marked dead from dashboard')}\n onClear={() => doDeliveryAction(root.id, 'clear', 'Cleared after manual handling')}\n onDelete={() => doDeleteMessage(root.id)}\n onThread={root.threadId ? () => openThread(root.threadId!) : undefined}\n replyCount={replies.length}\n />\n {replies.map((r) => (\n <div key={r.id} className=\"ml-6\">\n <MessageRow\n msg={r}\n now={now}\n agentLabel={agentLabel}\n agentsById={agentsById}\n onReply={() => startReply(r)}\n onClaim={() => doClaim(r.id)}\n onRetry={() => doDeliveryAction(r.id, 'retry-now')}\n onMarkDead={() => doDeliveryAction(r.id, 'mark-dead', 'Marked dead from dashboard')}\n onClear={() => doDeliveryAction(r.id, 'clear', 'Cleared after manual handling')}\n onDelete={() => doDeleteMessage(r.id)}\n />\n </div>\n ))}\n </div>\n ))}\n </div>\n </div>\n </div>\n )\n}\n\nfunction MessageRow({\n msg, now, agentLabel, agentsById, onReply, onClaim, onRetry, onMarkDead, onClear, onDelete, onThread, replyCount,\n}: {\n msg: Message\n now: number\n agentLabel: (id: string) => string\n agentsById: Record<string, import('@/types').Agent>\n onReply: () => void\n onClaim: () => void\n onRetry: () => void\n onMarkDead: () => void\n onClear: () => void\n onDelete: () => void\n onThread?: () => void\n replyCount?: number\n}) {\n const [expanded, setExpanded] = useState(false)\n const body = messageBody(msg)\n const openFilesAt = useRelayStore((s) => s.openFilesAt)\n const deliveryProblem = msg.deliveryStatus === 'queued' || msg.deliveryStatus === 'failed' || msg.deliveryStatus === 'dead' || Boolean(msg.deliveryLastError || msg.deliveryPoisonReason)\n const peer = msg.from === 'user' ? msg.to : msg.from\n const peerAgent = agentsById[peer]\n\n function resolvedReferencedPath(path: string): string {\n const cwd = typeof peerAgent?.meta?.cwd === 'string' ? peerAgent.meta.cwd : ''\n return resolveRelativePath(cwd || '/', path)\n }\n\n function openReferencedPath(path: string, line?: number) {\n const absolute = resolvedReferencedPath(path)\n void openFilesAt({ path: parentPath(absolute), selectedPath: absolute, line, overlay: true })\n }\n\n return (\n <Card className=\"group relative\">\n <CardContent className=\"p-3\">\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-2 flex-wrap text-xs text-muted-foreground mb-1\">\n <span className=\"font-medium text-foreground\">{agentLabel(msg.from)}</span>\n <span>→</span>\n <span>{displayTarget(msg.to, agentsById)}</span>\n {msg.channel && (\n <Badge variant=\"outline\" className=\"text-xs px-1.5 py-0 gap-0.5\">\n <Hash className=\"w-2.5 h-2.5\" />{msg.channel}\n </Badge>\n )}\n {msg.claimedBy && (\n <Badge variant=\"outline\" className=\"text-xs px-1.5 py-0 text-emerald-400 border-emerald-500/30\">\n <CheckCircle2 className=\"w-2.5 h-2.5 mr-0.5\" />claimed\n </Badge>\n )}\n {deliveryProblem && <DeliveryBadge msg={msg} now={now} />}\n {msg.subject && <span className=\"font-medium text-foreground\">{msg.subject}</span>}\n <span className=\"ml-auto shrink-0\" title={fmtTime(msg.createdAt)}><span className=\"opacity-40 mr-1\">#{msg.id}</span>{timeAgo(now, msg.createdAt)}</span>\n </div>\n {body && (\n <div className=\"cursor-pointer\" onClick={() => setExpanded((v) => !v)}>\n <FormattedBody text={body} rawBody={msg.body} className={`text-sm text-muted-foreground ${expanded ? '' : 'max-h-[3.75rem] overflow-hidden'}`} onOpenPath={openReferencedPath} resolvePathTitle={(path, line) => `${resolvedReferencedPath(path)}${line ? `:${line}` : ''}`} />\n </div>\n )}\n </div>\n <div className=\"absolute top-2 right-2 flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity bg-card rounded-md shadow-sm border border-border px-1 py-0.5\">\n <Button variant=\"ghost\" size=\"sm\" className=\"h-7 px-2 text-xs\" onClick={onReply} title=\"Reply\">\n <MessageSquareReply className=\"w-3.5 h-3.5\" />\n </Button>\n {msg.claimable && !msg.claimedBy && (\n <Button variant=\"ghost\" size=\"sm\" className=\"h-7 px-2 text-xs text-orange-400 hover:text-orange-300\" onClick={onClaim} title=\"Claim\">\n <CheckCircle2 className=\"w-3.5 h-3.5\" />\n </Button>\n )}\n {deliveryProblem && (\n <Button variant=\"ghost\" size=\"sm\" className=\"h-7 px-2 text-xs text-blue-400 hover:text-blue-300\" onClick={onRetry} title=\"Retry delivery now\">\n <RotateCcw className=\"w-3.5 h-3.5\" />\n </Button>\n )}\n {msg.deliveryStatus !== 'dead' && deliveryProblem && (\n <Button variant=\"ghost\" size=\"sm\" className=\"h-7 px-2 text-xs text-red-400 hover:text-red-300\" onClick={onMarkDead} title=\"Mark dead\">\n <Ban className=\"w-3.5 h-3.5\" />\n </Button>\n )}\n {(msg.deliveryStatus === 'failed' || msg.deliveryStatus === 'dead') && (\n <Button variant=\"ghost\" size=\"sm\" className=\"h-7 px-2 text-xs text-emerald-400 hover:text-emerald-300\" onClick={onClear} title=\"Clear after manual handling\">\n <CheckCircle2 className=\"w-3.5 h-3.5\" />\n </Button>\n )}\n {onThread && (replyCount ?? 0) > 0 && (\n <Button variant=\"ghost\" size=\"sm\" className=\"h-7 px-2 text-xs\" onClick={onThread} title=\"Thread\">\n +{replyCount}\n </Button>\n )}\n <Button variant=\"ghost\" size=\"sm\" className=\"h-7 px-2 text-xs text-red-400 hover:text-red-300\" onClick={onDelete} title=\"Delete\">\n <Trash2 className=\"w-3.5 h-3.5\" />\n </Button>\n </div>\n </CardContent>\n </Card>\n )\n}\n\nfunction DeliveryBadge({ msg, now }: { msg: Message; now: number }) {\n const status = msg.deliveryStatus || 'pending'\n const detail = msg.deliveryPoisonReason || msg.deliveryLastError || (msg.deliveryNextRetryAt ? `retry ${timeAgo(now, msg.deliveryNextRetryAt)}` : undefined)\n const className = status === 'dead'\n ? 'text-red-300 border-red-500/30 bg-red-500/10'\n : status === 'failed'\n ? 'text-amber-300 border-amber-500/30 bg-amber-500/10'\n : 'text-blue-300 border-blue-500/30 bg-blue-500/10'\n return (\n <Badge variant=\"outline\" className={`text-xs px-1.5 py-0 ${className}`} title={detail || status}>\n <AlertTriangle className=\"w-2.5 h-2.5 mr-0.5\" />\n {status}{msg.deliveryAttempts ? ` ${msg.deliveryAttempts}x` : ''}\n </Badge>\n )\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
1
  var e=Object.freeze(JSON.parse(`{"colors":{"activityBar.background":"#1A1A1A","activityBar.foreground":"#7D7D7D","activityBarBadge.background":"#383838","badge.background":"#383838","badge.foreground":"#C1C1C1","button.background":"#333","debugIcon.breakpointCurrentStackframeForeground":"#79b8ff","debugIcon.breakpointDisabledForeground":"#848484","debugIcon.breakpointForeground":"#FF7A84","debugIcon.breakpointStackframeForeground":"#79b8ff","debugIcon.breakpointUnverifiedForeground":"#848484","debugIcon.continueForeground":"#FF7A84","debugIcon.disconnectForeground":"#FF7A84","debugIcon.pauseForeground":"#FF7A84","debugIcon.restartForeground":"#79b8ff","debugIcon.startForeground":"#79b8ff","debugIcon.stepBackForeground":"#FF7A84","debugIcon.stepIntoForeground":"#FF7A84","debugIcon.stepOutForeground":"#FF7A84","debugIcon.stepOverForeground":"#FF7A84","debugIcon.stopForeground":"#79b8ff","diffEditor.insertedTextBackground":"#3a632a4b","diffEditor.removedTextBackground":"#88063852","editor.background":"#1f1f1f","editor.lineHighlightBorder":"#303030","editorGroupHeader.tabsBackground":"#1A1A1A","editorGroupHeader.tabsBorder":"#1A1A1A","editorIndentGuide.activeBackground":"#383838","editorIndentGuide.background":"#2A2A2A","editorLineNumber.foreground":"#727272","editorRuler.foreground":"#2A2A2A","editorSuggestWidget.background":"#1A1A1A","focusBorder":"#444","foreground":"#888888","gitDecoration.ignoredResourceForeground":"#444444","input.background":"#2A2A2A","input.foreground":"#E0E0E0","inputOption.activeBackground":"#3a3a3a","list.activeSelectionBackground":"#212121","list.activeSelectionForeground":"#F5F5F5","list.focusBackground":"#292929","list.highlightForeground":"#EAEAEA","list.hoverBackground":"#262626","list.hoverForeground":"#9E9E9E","list.inactiveSelectionBackground":"#212121","list.inactiveSelectionForeground":"#F5F5F5","panelTitle.activeBorder":"#1f1f1f","panelTitle.activeForeground":"#FAFAFA","panelTitle.inactiveForeground":"#484848","peekView.border":"#444","peekViewEditor.background":"#242424","pickerGroup.border":"#363636","pickerGroup.foreground":"#EAEAEA","progressBar.background":"#FAFAFA","scrollbar.shadow":"#1f1f1f","sideBar.background":"#1A1A1A","sideBarSectionHeader.background":"#202020","statusBar.background":"#1A1A1A","statusBar.debuggingBackground":"#1A1A1A","statusBar.foreground":"#7E7E7E","statusBar.noFolderBackground":"#1A1A1A","statusBarItem.prominentBackground":"#fafafa1a","statusBarItem.remoteBackground":"#1a1a1a00","statusBarItem.remoteForeground":"#7E7E7E","symbolIcon.classForeground":"#FF9800","symbolIcon.constructorForeground":"#b392f0","symbolIcon.enumeratorForeground":"#FF9800","symbolIcon.enumeratorMemberForeground":"#79b8ff","symbolIcon.eventForeground":"#FF9800","symbolIcon.fieldForeground":"#79b8ff","symbolIcon.functionForeground":"#b392f0","symbolIcon.interfaceForeground":"#79b8ff","symbolIcon.methodForeground":"#b392f0","symbolIcon.variableForeground":"#79b8ff","tab.activeBorder":"#1e1e1e","tab.activeForeground":"#FAFAFA","tab.border":"#1A1A1A","tab.inactiveBackground":"#1A1A1A","tab.inactiveForeground":"#727272","terminal.ansiBrightBlack":"#5c5c5c","textLink.activeForeground":"#fafafa","textLink.foreground":"#CCC","titleBar.activeBackground":"#1A1A1A","titleBar.border":"#00000000"},"displayName":"Min Dark","name":"min-dark","semanticHighlighting":true,"tokenColors":[{"settings":{"foreground":"#b392f0"}},{"scope":["support.function","keyword.operator.accessor","meta.group.braces.round.function.arguments","meta.template.expression","markup.fenced_code meta.embedded.block"],"settings":{"foreground":"#b392f0"}},{"scope":"emphasis","settings":{"fontStyle":"italic"}},{"scope":["strong","markup.heading.markdown","markup.bold.markdown"],"settings":{"fontStyle":"bold","foreground":"#FF7A84"}},{"scope":["markup.italic.markdown"],"settings":{"fontStyle":"italic"}},{"scope":"meta.link.inline.markdown","settings":{"fontStyle":"underline","foreground":"#1976D2"}},{"scope":["string","markup.fenced_code","markup.inline"],"settings":{"foreground":"#9db1c5"}},{"scope":["comment","string.quoted.docstring.multi"],"settings":{"foreground":"#6b737c"}},{"scope":["constant.language","variable.language.this","variable.other.object","variable.other.class","variable.other.constant","meta.property-name","support","string.other.link.title.markdown"],"settings":{"foreground":"#79b8ff"}},{"scope":["constant.numeric","constant.other.placeholder","constant.character.format.placeholder","meta.property-value","keyword.other.unit","keyword.other.template","entity.name.tag.yaml","entity.other.attribute-name","support.type.property-name.json"],"settings":{"foreground":"#f8f8f8"}},{"scope":["keyword","storage.modifier","storage.type","storage.control.clojure","entity.name.function.clojure","support.function.node","punctuation.separator.key-value","punctuation.definition.template-expression"],"settings":{"foreground":"#f97583"}},{"scope":"variable.parameter.function","settings":{"foreground":"#FF9800"}},{"scope":["entity.name.type","entity.other.inherited-class","meta.function-call","meta.instance.constructor","entity.other.attribute-name","entity.name.function","constant.keyword.clojure"],"settings":{"foreground":"#b392f0"}},{"scope":["entity.name.tag","string.quoted","string.regexp","string.interpolated","string.template","string.unquoted.plain.out.yaml","keyword.other.template"],"settings":{"foreground":"#ffab70"}},{"scope":"token.info-token","settings":{"foreground":"#316bcd"}},{"scope":"token.warn-token","settings":{"foreground":"#cd9731"}},{"scope":"token.error-token","settings":{"foreground":"#cd3131"}},{"scope":"token.debug-token","settings":{"foreground":"#800080"}},{"scope":["punctuation.definition.arguments","punctuation.definition.dict","punctuation.separator","meta.function-call.arguments"],"settings":{"foreground":"#bbbbbb"}},{"scope":"markup.underline.link","settings":{"foreground":"#ffab70"}},{"scope":["beginning.punctuation.definition.list.markdown"],"settings":{"foreground":"#FF7A84"}},{"scope":"punctuation.definition.metadata.markdown","settings":{"foreground":"#ffab70"}},{"scope":["punctuation.definition.string.begin.markdown","punctuation.definition.string.end.markdown"],"settings":{"foreground":"#79b8ff"}}],"type":"dark"}`));export{e as default};
2
- //# sourceMappingURL=min-dark-BZ3g8z3r.js.map
2
+ //# sourceMappingURL=min-dark-BwzrQQKV.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"min-dark-BZ3g8z3r.js","names":[],"sources":["../../dashboard/node_modules/@shikijs/themes/dist/min-dark.mjs"],"sourcesContent":["/* Theme: min-dark */\nexport default Object.freeze(JSON.parse(\"{\\\"colors\\\":{\\\"activityBar.background\\\":\\\"#1A1A1A\\\",\\\"activityBar.foreground\\\":\\\"#7D7D7D\\\",\\\"activityBarBadge.background\\\":\\\"#383838\\\",\\\"badge.background\\\":\\\"#383838\\\",\\\"badge.foreground\\\":\\\"#C1C1C1\\\",\\\"button.background\\\":\\\"#333\\\",\\\"debugIcon.breakpointCurrentStackframeForeground\\\":\\\"#79b8ff\\\",\\\"debugIcon.breakpointDisabledForeground\\\":\\\"#848484\\\",\\\"debugIcon.breakpointForeground\\\":\\\"#FF7A84\\\",\\\"debugIcon.breakpointStackframeForeground\\\":\\\"#79b8ff\\\",\\\"debugIcon.breakpointUnverifiedForeground\\\":\\\"#848484\\\",\\\"debugIcon.continueForeground\\\":\\\"#FF7A84\\\",\\\"debugIcon.disconnectForeground\\\":\\\"#FF7A84\\\",\\\"debugIcon.pauseForeground\\\":\\\"#FF7A84\\\",\\\"debugIcon.restartForeground\\\":\\\"#79b8ff\\\",\\\"debugIcon.startForeground\\\":\\\"#79b8ff\\\",\\\"debugIcon.stepBackForeground\\\":\\\"#FF7A84\\\",\\\"debugIcon.stepIntoForeground\\\":\\\"#FF7A84\\\",\\\"debugIcon.stepOutForeground\\\":\\\"#FF7A84\\\",\\\"debugIcon.stepOverForeground\\\":\\\"#FF7A84\\\",\\\"debugIcon.stopForeground\\\":\\\"#79b8ff\\\",\\\"diffEditor.insertedTextBackground\\\":\\\"#3a632a4b\\\",\\\"diffEditor.removedTextBackground\\\":\\\"#88063852\\\",\\\"editor.background\\\":\\\"#1f1f1f\\\",\\\"editor.lineHighlightBorder\\\":\\\"#303030\\\",\\\"editorGroupHeader.tabsBackground\\\":\\\"#1A1A1A\\\",\\\"editorGroupHeader.tabsBorder\\\":\\\"#1A1A1A\\\",\\\"editorIndentGuide.activeBackground\\\":\\\"#383838\\\",\\\"editorIndentGuide.background\\\":\\\"#2A2A2A\\\",\\\"editorLineNumber.foreground\\\":\\\"#727272\\\",\\\"editorRuler.foreground\\\":\\\"#2A2A2A\\\",\\\"editorSuggestWidget.background\\\":\\\"#1A1A1A\\\",\\\"focusBorder\\\":\\\"#444\\\",\\\"foreground\\\":\\\"#888888\\\",\\\"gitDecoration.ignoredResourceForeground\\\":\\\"#444444\\\",\\\"input.background\\\":\\\"#2A2A2A\\\",\\\"input.foreground\\\":\\\"#E0E0E0\\\",\\\"inputOption.activeBackground\\\":\\\"#3a3a3a\\\",\\\"list.activeSelectionBackground\\\":\\\"#212121\\\",\\\"list.activeSelectionForeground\\\":\\\"#F5F5F5\\\",\\\"list.focusBackground\\\":\\\"#292929\\\",\\\"list.highlightForeground\\\":\\\"#EAEAEA\\\",\\\"list.hoverBackground\\\":\\\"#262626\\\",\\\"list.hoverForeground\\\":\\\"#9E9E9E\\\",\\\"list.inactiveSelectionBackground\\\":\\\"#212121\\\",\\\"list.inactiveSelectionForeground\\\":\\\"#F5F5F5\\\",\\\"panelTitle.activeBorder\\\":\\\"#1f1f1f\\\",\\\"panelTitle.activeForeground\\\":\\\"#FAFAFA\\\",\\\"panelTitle.inactiveForeground\\\":\\\"#484848\\\",\\\"peekView.border\\\":\\\"#444\\\",\\\"peekViewEditor.background\\\":\\\"#242424\\\",\\\"pickerGroup.border\\\":\\\"#363636\\\",\\\"pickerGroup.foreground\\\":\\\"#EAEAEA\\\",\\\"progressBar.background\\\":\\\"#FAFAFA\\\",\\\"scrollbar.shadow\\\":\\\"#1f1f1f\\\",\\\"sideBar.background\\\":\\\"#1A1A1A\\\",\\\"sideBarSectionHeader.background\\\":\\\"#202020\\\",\\\"statusBar.background\\\":\\\"#1A1A1A\\\",\\\"statusBar.debuggingBackground\\\":\\\"#1A1A1A\\\",\\\"statusBar.foreground\\\":\\\"#7E7E7E\\\",\\\"statusBar.noFolderBackground\\\":\\\"#1A1A1A\\\",\\\"statusBarItem.prominentBackground\\\":\\\"#fafafa1a\\\",\\\"statusBarItem.remoteBackground\\\":\\\"#1a1a1a00\\\",\\\"statusBarItem.remoteForeground\\\":\\\"#7E7E7E\\\",\\\"symbolIcon.classForeground\\\":\\\"#FF9800\\\",\\\"symbolIcon.constructorForeground\\\":\\\"#b392f0\\\",\\\"symbolIcon.enumeratorForeground\\\":\\\"#FF9800\\\",\\\"symbolIcon.enumeratorMemberForeground\\\":\\\"#79b8ff\\\",\\\"symbolIcon.eventForeground\\\":\\\"#FF9800\\\",\\\"symbolIcon.fieldForeground\\\":\\\"#79b8ff\\\",\\\"symbolIcon.functionForeground\\\":\\\"#b392f0\\\",\\\"symbolIcon.interfaceForeground\\\":\\\"#79b8ff\\\",\\\"symbolIcon.methodForeground\\\":\\\"#b392f0\\\",\\\"symbolIcon.variableForeground\\\":\\\"#79b8ff\\\",\\\"tab.activeBorder\\\":\\\"#1e1e1e\\\",\\\"tab.activeForeground\\\":\\\"#FAFAFA\\\",\\\"tab.border\\\":\\\"#1A1A1A\\\",\\\"tab.inactiveBackground\\\":\\\"#1A1A1A\\\",\\\"tab.inactiveForeground\\\":\\\"#727272\\\",\\\"terminal.ansiBrightBlack\\\":\\\"#5c5c5c\\\",\\\"textLink.activeForeground\\\":\\\"#fafafa\\\",\\\"textLink.foreground\\\":\\\"#CCC\\\",\\\"titleBar.activeBackground\\\":\\\"#1A1A1A\\\",\\\"titleBar.border\\\":\\\"#00000000\\\"},\\\"displayName\\\":\\\"Min Dark\\\",\\\"name\\\":\\\"min-dark\\\",\\\"semanticHighlighting\\\":true,\\\"tokenColors\\\":[{\\\"settings\\\":{\\\"foreground\\\":\\\"#b392f0\\\"}},{\\\"scope\\\":[\\\"support.function\\\",\\\"keyword.operator.accessor\\\",\\\"meta.group.braces.round.function.arguments\\\",\\\"meta.template.expression\\\",\\\"markup.fenced_code meta.embedded.block\\\"],\\\"settings\\\":{\\\"foreground\\\":\\\"#b392f0\\\"}},{\\\"scope\\\":\\\"emphasis\\\",\\\"settings\\\":{\\\"fontStyle\\\":\\\"italic\\\"}},{\\\"scope\\\":[\\\"strong\\\",\\\"markup.heading.markdown\\\",\\\"markup.bold.markdown\\\"],\\\"settings\\\":{\\\"fontStyle\\\":\\\"bold\\\",\\\"foreground\\\":\\\"#FF7A84\\\"}},{\\\"scope\\\":[\\\"markup.italic.markdown\\\"],\\\"settings\\\":{\\\"fontStyle\\\":\\\"italic\\\"}},{\\\"scope\\\":\\\"meta.link.inline.markdown\\\",\\\"settings\\\":{\\\"fontStyle\\\":\\\"underline\\\",\\\"foreground\\\":\\\"#1976D2\\\"}},{\\\"scope\\\":[\\\"string\\\",\\\"markup.fenced_code\\\",\\\"markup.inline\\\"],\\\"settings\\\":{\\\"foreground\\\":\\\"#9db1c5\\\"}},{\\\"scope\\\":[\\\"comment\\\",\\\"string.quoted.docstring.multi\\\"],\\\"settings\\\":{\\\"foreground\\\":\\\"#6b737c\\\"}},{\\\"scope\\\":[\\\"constant.language\\\",\\\"variable.language.this\\\",\\\"variable.other.object\\\",\\\"variable.other.class\\\",\\\"variable.other.constant\\\",\\\"meta.property-name\\\",\\\"support\\\",\\\"string.other.link.title.markdown\\\"],\\\"settings\\\":{\\\"foreground\\\":\\\"#79b8ff\\\"}},{\\\"scope\\\":[\\\"constant.numeric\\\",\\\"constant.other.placeholder\\\",\\\"constant.character.format.placeholder\\\",\\\"meta.property-value\\\",\\\"keyword.other.unit\\\",\\\"keyword.other.template\\\",\\\"entity.name.tag.yaml\\\",\\\"entity.other.attribute-name\\\",\\\"support.type.property-name.json\\\"],\\\"settings\\\":{\\\"foreground\\\":\\\"#f8f8f8\\\"}},{\\\"scope\\\":[\\\"keyword\\\",\\\"storage.modifier\\\",\\\"storage.type\\\",\\\"storage.control.clojure\\\",\\\"entity.name.function.clojure\\\",\\\"support.function.node\\\",\\\"punctuation.separator.key-value\\\",\\\"punctuation.definition.template-expression\\\"],\\\"settings\\\":{\\\"foreground\\\":\\\"#f97583\\\"}},{\\\"scope\\\":\\\"variable.parameter.function\\\",\\\"settings\\\":{\\\"foreground\\\":\\\"#FF9800\\\"}},{\\\"scope\\\":[\\\"entity.name.type\\\",\\\"entity.other.inherited-class\\\",\\\"meta.function-call\\\",\\\"meta.instance.constructor\\\",\\\"entity.other.attribute-name\\\",\\\"entity.name.function\\\",\\\"constant.keyword.clojure\\\"],\\\"settings\\\":{\\\"foreground\\\":\\\"#b392f0\\\"}},{\\\"scope\\\":[\\\"entity.name.tag\\\",\\\"string.quoted\\\",\\\"string.regexp\\\",\\\"string.interpolated\\\",\\\"string.template\\\",\\\"string.unquoted.plain.out.yaml\\\",\\\"keyword.other.template\\\"],\\\"settings\\\":{\\\"foreground\\\":\\\"#ffab70\\\"}},{\\\"scope\\\":\\\"token.info-token\\\",\\\"settings\\\":{\\\"foreground\\\":\\\"#316bcd\\\"}},{\\\"scope\\\":\\\"token.warn-token\\\",\\\"settings\\\":{\\\"foreground\\\":\\\"#cd9731\\\"}},{\\\"scope\\\":\\\"token.error-token\\\",\\\"settings\\\":{\\\"foreground\\\":\\\"#cd3131\\\"}},{\\\"scope\\\":\\\"token.debug-token\\\",\\\"settings\\\":{\\\"foreground\\\":\\\"#800080\\\"}},{\\\"scope\\\":[\\\"punctuation.definition.arguments\\\",\\\"punctuation.definition.dict\\\",\\\"punctuation.separator\\\",\\\"meta.function-call.arguments\\\"],\\\"settings\\\":{\\\"foreground\\\":\\\"#bbbbbb\\\"}},{\\\"scope\\\":\\\"markup.underline.link\\\",\\\"settings\\\":{\\\"foreground\\\":\\\"#ffab70\\\"}},{\\\"scope\\\":[\\\"beginning.punctuation.definition.list.markdown\\\"],\\\"settings\\\":{\\\"foreground\\\":\\\"#FF7A84\\\"}},{\\\"scope\\\":\\\"punctuation.definition.metadata.markdown\\\",\\\"settings\\\":{\\\"foreground\\\":\\\"#ffab70\\\"}},{\\\"scope\\\":[\\\"punctuation.definition.string.begin.markdown\\\",\\\"punctuation.definition.string.end.markdown\\\"],\\\"settings\\\":{\\\"foreground\\\":\\\"#79b8ff\\\"}}],\\\"type\\\":\\\"dark\\\"}\"))\n"],"x_google_ignoreList":[0],"mappings":"AACA,IAAA,EAAe,OAAO,OAAO,KAAK,MAAM,0lMAAowN,CAAC"}
1
+ {"version":3,"file":"min-dark-BwzrQQKV.js","names":[],"sources":["../../dashboard/node_modules/@shikijs/themes/dist/min-dark.mjs"],"sourcesContent":["/* Theme: min-dark */\nexport default Object.freeze(JSON.parse(\"{\\\"colors\\\":{\\\"activityBar.background\\\":\\\"#1A1A1A\\\",\\\"activityBar.foreground\\\":\\\"#7D7D7D\\\",\\\"activityBarBadge.background\\\":\\\"#383838\\\",\\\"badge.background\\\":\\\"#383838\\\",\\\"badge.foreground\\\":\\\"#C1C1C1\\\",\\\"button.background\\\":\\\"#333\\\",\\\"debugIcon.breakpointCurrentStackframeForeground\\\":\\\"#79b8ff\\\",\\\"debugIcon.breakpointDisabledForeground\\\":\\\"#848484\\\",\\\"debugIcon.breakpointForeground\\\":\\\"#FF7A84\\\",\\\"debugIcon.breakpointStackframeForeground\\\":\\\"#79b8ff\\\",\\\"debugIcon.breakpointUnverifiedForeground\\\":\\\"#848484\\\",\\\"debugIcon.continueForeground\\\":\\\"#FF7A84\\\",\\\"debugIcon.disconnectForeground\\\":\\\"#FF7A84\\\",\\\"debugIcon.pauseForeground\\\":\\\"#FF7A84\\\",\\\"debugIcon.restartForeground\\\":\\\"#79b8ff\\\",\\\"debugIcon.startForeground\\\":\\\"#79b8ff\\\",\\\"debugIcon.stepBackForeground\\\":\\\"#FF7A84\\\",\\\"debugIcon.stepIntoForeground\\\":\\\"#FF7A84\\\",\\\"debugIcon.stepOutForeground\\\":\\\"#FF7A84\\\",\\\"debugIcon.stepOverForeground\\\":\\\"#FF7A84\\\",\\\"debugIcon.stopForeground\\\":\\\"#79b8ff\\\",\\\"diffEditor.insertedTextBackground\\\":\\\"#3a632a4b\\\",\\\"diffEditor.removedTextBackground\\\":\\\"#88063852\\\",\\\"editor.background\\\":\\\"#1f1f1f\\\",\\\"editor.lineHighlightBorder\\\":\\\"#303030\\\",\\\"editorGroupHeader.tabsBackground\\\":\\\"#1A1A1A\\\",\\\"editorGroupHeader.tabsBorder\\\":\\\"#1A1A1A\\\",\\\"editorIndentGuide.activeBackground\\\":\\\"#383838\\\",\\\"editorIndentGuide.background\\\":\\\"#2A2A2A\\\",\\\"editorLineNumber.foreground\\\":\\\"#727272\\\",\\\"editorRuler.foreground\\\":\\\"#2A2A2A\\\",\\\"editorSuggestWidget.background\\\":\\\"#1A1A1A\\\",\\\"focusBorder\\\":\\\"#444\\\",\\\"foreground\\\":\\\"#888888\\\",\\\"gitDecoration.ignoredResourceForeground\\\":\\\"#444444\\\",\\\"input.background\\\":\\\"#2A2A2A\\\",\\\"input.foreground\\\":\\\"#E0E0E0\\\",\\\"inputOption.activeBackground\\\":\\\"#3a3a3a\\\",\\\"list.activeSelectionBackground\\\":\\\"#212121\\\",\\\"list.activeSelectionForeground\\\":\\\"#F5F5F5\\\",\\\"list.focusBackground\\\":\\\"#292929\\\",\\\"list.highlightForeground\\\":\\\"#EAEAEA\\\",\\\"list.hoverBackground\\\":\\\"#262626\\\",\\\"list.hoverForeground\\\":\\\"#9E9E9E\\\",\\\"list.inactiveSelectionBackground\\\":\\\"#212121\\\",\\\"list.inactiveSelectionForeground\\\":\\\"#F5F5F5\\\",\\\"panelTitle.activeBorder\\\":\\\"#1f1f1f\\\",\\\"panelTitle.activeForeground\\\":\\\"#FAFAFA\\\",\\\"panelTitle.inactiveForeground\\\":\\\"#484848\\\",\\\"peekView.border\\\":\\\"#444\\\",\\\"peekViewEditor.background\\\":\\\"#242424\\\",\\\"pickerGroup.border\\\":\\\"#363636\\\",\\\"pickerGroup.foreground\\\":\\\"#EAEAEA\\\",\\\"progressBar.background\\\":\\\"#FAFAFA\\\",\\\"scrollbar.shadow\\\":\\\"#1f1f1f\\\",\\\"sideBar.background\\\":\\\"#1A1A1A\\\",\\\"sideBarSectionHeader.background\\\":\\\"#202020\\\",\\\"statusBar.background\\\":\\\"#1A1A1A\\\",\\\"statusBar.debuggingBackground\\\":\\\"#1A1A1A\\\",\\\"statusBar.foreground\\\":\\\"#7E7E7E\\\",\\\"statusBar.noFolderBackground\\\":\\\"#1A1A1A\\\",\\\"statusBarItem.prominentBackground\\\":\\\"#fafafa1a\\\",\\\"statusBarItem.remoteBackground\\\":\\\"#1a1a1a00\\\",\\\"statusBarItem.remoteForeground\\\":\\\"#7E7E7E\\\",\\\"symbolIcon.classForeground\\\":\\\"#FF9800\\\",\\\"symbolIcon.constructorForeground\\\":\\\"#b392f0\\\",\\\"symbolIcon.enumeratorForeground\\\":\\\"#FF9800\\\",\\\"symbolIcon.enumeratorMemberForeground\\\":\\\"#79b8ff\\\",\\\"symbolIcon.eventForeground\\\":\\\"#FF9800\\\",\\\"symbolIcon.fieldForeground\\\":\\\"#79b8ff\\\",\\\"symbolIcon.functionForeground\\\":\\\"#b392f0\\\",\\\"symbolIcon.interfaceForeground\\\":\\\"#79b8ff\\\",\\\"symbolIcon.methodForeground\\\":\\\"#b392f0\\\",\\\"symbolIcon.variableForeground\\\":\\\"#79b8ff\\\",\\\"tab.activeBorder\\\":\\\"#1e1e1e\\\",\\\"tab.activeForeground\\\":\\\"#FAFAFA\\\",\\\"tab.border\\\":\\\"#1A1A1A\\\",\\\"tab.inactiveBackground\\\":\\\"#1A1A1A\\\",\\\"tab.inactiveForeground\\\":\\\"#727272\\\",\\\"terminal.ansiBrightBlack\\\":\\\"#5c5c5c\\\",\\\"textLink.activeForeground\\\":\\\"#fafafa\\\",\\\"textLink.foreground\\\":\\\"#CCC\\\",\\\"titleBar.activeBackground\\\":\\\"#1A1A1A\\\",\\\"titleBar.border\\\":\\\"#00000000\\\"},\\\"displayName\\\":\\\"Min Dark\\\",\\\"name\\\":\\\"min-dark\\\",\\\"semanticHighlighting\\\":true,\\\"tokenColors\\\":[{\\\"settings\\\":{\\\"foreground\\\":\\\"#b392f0\\\"}},{\\\"scope\\\":[\\\"support.function\\\",\\\"keyword.operator.accessor\\\",\\\"meta.group.braces.round.function.arguments\\\",\\\"meta.template.expression\\\",\\\"markup.fenced_code meta.embedded.block\\\"],\\\"settings\\\":{\\\"foreground\\\":\\\"#b392f0\\\"}},{\\\"scope\\\":\\\"emphasis\\\",\\\"settings\\\":{\\\"fontStyle\\\":\\\"italic\\\"}},{\\\"scope\\\":[\\\"strong\\\",\\\"markup.heading.markdown\\\",\\\"markup.bold.markdown\\\"],\\\"settings\\\":{\\\"fontStyle\\\":\\\"bold\\\",\\\"foreground\\\":\\\"#FF7A84\\\"}},{\\\"scope\\\":[\\\"markup.italic.markdown\\\"],\\\"settings\\\":{\\\"fontStyle\\\":\\\"italic\\\"}},{\\\"scope\\\":\\\"meta.link.inline.markdown\\\",\\\"settings\\\":{\\\"fontStyle\\\":\\\"underline\\\",\\\"foreground\\\":\\\"#1976D2\\\"}},{\\\"scope\\\":[\\\"string\\\",\\\"markup.fenced_code\\\",\\\"markup.inline\\\"],\\\"settings\\\":{\\\"foreground\\\":\\\"#9db1c5\\\"}},{\\\"scope\\\":[\\\"comment\\\",\\\"string.quoted.docstring.multi\\\"],\\\"settings\\\":{\\\"foreground\\\":\\\"#6b737c\\\"}},{\\\"scope\\\":[\\\"constant.language\\\",\\\"variable.language.this\\\",\\\"variable.other.object\\\",\\\"variable.other.class\\\",\\\"variable.other.constant\\\",\\\"meta.property-name\\\",\\\"support\\\",\\\"string.other.link.title.markdown\\\"],\\\"settings\\\":{\\\"foreground\\\":\\\"#79b8ff\\\"}},{\\\"scope\\\":[\\\"constant.numeric\\\",\\\"constant.other.placeholder\\\",\\\"constant.character.format.placeholder\\\",\\\"meta.property-value\\\",\\\"keyword.other.unit\\\",\\\"keyword.other.template\\\",\\\"entity.name.tag.yaml\\\",\\\"entity.other.attribute-name\\\",\\\"support.type.property-name.json\\\"],\\\"settings\\\":{\\\"foreground\\\":\\\"#f8f8f8\\\"}},{\\\"scope\\\":[\\\"keyword\\\",\\\"storage.modifier\\\",\\\"storage.type\\\",\\\"storage.control.clojure\\\",\\\"entity.name.function.clojure\\\",\\\"support.function.node\\\",\\\"punctuation.separator.key-value\\\",\\\"punctuation.definition.template-expression\\\"],\\\"settings\\\":{\\\"foreground\\\":\\\"#f97583\\\"}},{\\\"scope\\\":\\\"variable.parameter.function\\\",\\\"settings\\\":{\\\"foreground\\\":\\\"#FF9800\\\"}},{\\\"scope\\\":[\\\"entity.name.type\\\",\\\"entity.other.inherited-class\\\",\\\"meta.function-call\\\",\\\"meta.instance.constructor\\\",\\\"entity.other.attribute-name\\\",\\\"entity.name.function\\\",\\\"constant.keyword.clojure\\\"],\\\"settings\\\":{\\\"foreground\\\":\\\"#b392f0\\\"}},{\\\"scope\\\":[\\\"entity.name.tag\\\",\\\"string.quoted\\\",\\\"string.regexp\\\",\\\"string.interpolated\\\",\\\"string.template\\\",\\\"string.unquoted.plain.out.yaml\\\",\\\"keyword.other.template\\\"],\\\"settings\\\":{\\\"foreground\\\":\\\"#ffab70\\\"}},{\\\"scope\\\":\\\"token.info-token\\\",\\\"settings\\\":{\\\"foreground\\\":\\\"#316bcd\\\"}},{\\\"scope\\\":\\\"token.warn-token\\\",\\\"settings\\\":{\\\"foreground\\\":\\\"#cd9731\\\"}},{\\\"scope\\\":\\\"token.error-token\\\",\\\"settings\\\":{\\\"foreground\\\":\\\"#cd3131\\\"}},{\\\"scope\\\":\\\"token.debug-token\\\",\\\"settings\\\":{\\\"foreground\\\":\\\"#800080\\\"}},{\\\"scope\\\":[\\\"punctuation.definition.arguments\\\",\\\"punctuation.definition.dict\\\",\\\"punctuation.separator\\\",\\\"meta.function-call.arguments\\\"],\\\"settings\\\":{\\\"foreground\\\":\\\"#bbbbbb\\\"}},{\\\"scope\\\":\\\"markup.underline.link\\\",\\\"settings\\\":{\\\"foreground\\\":\\\"#ffab70\\\"}},{\\\"scope\\\":[\\\"beginning.punctuation.definition.list.markdown\\\"],\\\"settings\\\":{\\\"foreground\\\":\\\"#FF7A84\\\"}},{\\\"scope\\\":\\\"punctuation.definition.metadata.markdown\\\",\\\"settings\\\":{\\\"foreground\\\":\\\"#ffab70\\\"}},{\\\"scope\\\":[\\\"punctuation.definition.string.begin.markdown\\\",\\\"punctuation.definition.string.end.markdown\\\"],\\\"settings\\\":{\\\"foreground\\\":\\\"#79b8ff\\\"}}],\\\"type\\\":\\\"dark\\\"}\"))\n"],"x_google_ignoreList":[0],"mappings":"AACA,IAAA,EAAe,OAAO,OAAO,KAAK,MAAM,0lMAAowN,CAAC"}
@@ -1,2 +1,2 @@
1
1
  var e=Object.freeze(JSON.parse(`{"colors":{"activityBar.background":"#f6f6f6","activityBar.foreground":"#9E9E9E","activityBarBadge.background":"#616161","badge.background":"#E0E0E0","badge.foreground":"#616161","button.background":"#757575","button.hoverBackground":"#616161","debugIcon.breakpointCurrentStackframeForeground":"#1976D2","debugIcon.breakpointDisabledForeground":"#848484","debugIcon.breakpointForeground":"#D32F2F","debugIcon.breakpointStackframeForeground":"#1976D2","debugIcon.continueForeground":"#6f42c1","debugIcon.disconnectForeground":"#6f42c1","debugIcon.pauseForeground":"#6f42c1","debugIcon.restartForeground":"#1976D2","debugIcon.startForeground":"#1976D2","debugIcon.stepBackForeground":"#6f42c1","debugIcon.stepIntoForeground":"#6f42c1","debugIcon.stepOutForeground":"#6f42c1","debugIcon.stepOverForeground":"#6f42c1","debugIcon.stopForeground":"#1976D2","diffEditor.insertedTextBackground":"#b7e7a44b","diffEditor.removedTextBackground":"#e597af52","editor.background":"#ffffff","editor.foreground":"#212121","editor.lineHighlightBorder":"#f2f2f2","editorBracketMatch.background":"#E7F3FF","editorBracketMatch.border":"#c8e1ff","editorGroupHeader.tabsBackground":"#f6f6f6","editorGroupHeader.tabsBorder":"#fff","editorIndentGuide.background":"#EEE","editorLineNumber.activeForeground":"#757575","editorLineNumber.foreground":"#CCC","editorSuggestWidget.background":"#F3F3F3","extensionButton.prominentBackground":"#000000AA","extensionButton.prominentHoverBackground":"#000000BB","focusBorder":"#D0D0D0","foreground":"#757575","gitDecoration.ignoredResourceForeground":"#AAAAAA","input.border":"#E9E9E9","inputOption.activeBackground":"#EDEDED","list.activeSelectionBackground":"#EEE","list.activeSelectionForeground":"#212121","list.focusBackground":"#ddd","list.focusForeground":"#212121","list.highlightForeground":"#212121","list.inactiveSelectionBackground":"#E0E0E0","list.inactiveSelectionForeground":"#212121","panel.background":"#fff","panel.border":"#f4f4f4","panelTitle.activeBorder":"#fff","panelTitle.inactiveForeground":"#BDBDBD","peekView.border":"#E0E0E0","peekViewEditor.background":"#f8f8f8","pickerGroup.foreground":"#000","progressBar.background":"#000","scrollbar.shadow":"#FFF","sideBar.background":"#f6f6f6","sideBar.border":"#f6f6f6","sideBarSectionHeader.background":"#EEE","sideBarTitle.foreground":"#999","statusBar.background":"#f6f6f6","statusBar.border":"#f6f6f6","statusBar.debuggingBackground":"#f6f6f6","statusBar.foreground":"#7E7E7E","statusBar.noFolderBackground":"#f6f6f6","statusBarItem.prominentBackground":"#0000001a","statusBarItem.remoteBackground":"#f6f6f600","statusBarItem.remoteForeground":"#7E7E7E","symbolIcon.classForeground":"#dd8500","symbolIcon.constructorForeground":"#6f42c1","symbolIcon.enumeratorForeground":"#dd8500","symbolIcon.enumeratorMemberForeground":"#1976D2","symbolIcon.eventForeground":"#dd8500","symbolIcon.fieldForeground":"#1976D2","symbolIcon.functionForeground":"#6f42c1","symbolIcon.interfaceForeground":"#1976D2","symbolIcon.methodForeground":"#6f42c1","symbolIcon.variableForeground":"#1976D2","tab.activeBorder":"#FFF","tab.activeForeground":"#424242","tab.border":"#f6f6f6","tab.inactiveBackground":"#f6f6f6","tab.inactiveForeground":"#BDBDBD","tab.unfocusedActiveBorder":"#fff","terminal.ansiBlack":"#333","terminal.ansiBlue":"#e0e0e0","terminal.ansiBrightBlack":"#a1a1a1","terminal.ansiBrightBlue":"#6871ff","terminal.ansiBrightCyan":"#57d9ad","terminal.ansiBrightGreen":"#a3d900","terminal.ansiBrightMagenta":"#a37acc","terminal.ansiBrightRed":"#d6656a","terminal.ansiBrightWhite":"#7E7E7E","terminal.ansiBrightYellow":"#e7c547","terminal.ansiCyan":"#4dbf99","terminal.ansiGreen":"#77cc00","terminal.ansiMagenta":"#9966cc","terminal.ansiRed":"#D32F2F","terminal.ansiWhite":"#c7c7c7","terminal.ansiYellow":"#f29718","terminal.background":"#fff","textLink.activeForeground":"#000","textLink.foreground":"#000","titleBar.activeBackground":"#f6f6f6","titleBar.border":"#FFFFFF00","titleBar.inactiveBackground":"#f6f6f6"},"displayName":"Min Light","name":"min-light","tokenColors":[{"settings":{"foreground":"#24292eff"}},{"scope":["keyword.operator.accessor","meta.group.braces.round.function.arguments","meta.template.expression","markup.fenced_code meta.embedded.block"],"settings":{"foreground":"#24292eff"}},{"scope":"emphasis","settings":{"fontStyle":"italic"}},{"scope":["strong","markup.heading.markdown","markup.bold.markdown"],"settings":{"fontStyle":"bold"}},{"scope":["markup.italic.markdown"],"settings":{"fontStyle":"italic"}},{"scope":"meta.link.inline.markdown","settings":{"fontStyle":"underline","foreground":"#1976D2"}},{"scope":["string","markup.fenced_code","markup.inline"],"settings":{"foreground":"#2b5581"}},{"scope":["comment","string.quoted.docstring.multi"],"settings":{"foreground":"#c2c3c5"}},{"scope":["constant.numeric","constant.language","constant.other.placeholder","constant.character.format.placeholder","variable.language.this","variable.other.object","variable.other.class","variable.other.constant","meta.property-name","meta.property-value","support"],"settings":{"foreground":"#1976D2"}},{"scope":["keyword","storage.modifier","storage.type","storage.control.clojure","entity.name.function.clojure","entity.name.tag.yaml","support.function.node","support.type.property-name.json","punctuation.separator.key-value","punctuation.definition.template-expression"],"settings":{"foreground":"#D32F2F"}},{"scope":"variable.parameter.function","settings":{"foreground":"#FF9800"}},{"scope":["support.function","entity.name.type","entity.other.inherited-class","meta.function-call","meta.instance.constructor","entity.other.attribute-name","entity.name.function","constant.keyword.clojure"],"settings":{"foreground":"#6f42c1"}},{"scope":["entity.name.tag","string.quoted","string.regexp","string.interpolated","string.template","string.unquoted.plain.out.yaml","keyword.other.template"],"settings":{"foreground":"#22863a"}},{"scope":"token.info-token","settings":{"foreground":"#316bcd"}},{"scope":"token.warn-token","settings":{"foreground":"#cd9731"}},{"scope":"token.error-token","settings":{"foreground":"#cd3131"}},{"scope":"token.debug-token","settings":{"foreground":"#800080"}},{"scope":["strong","markup.heading.markdown","markup.bold.markdown"],"settings":{"foreground":"#6f42c1"}},{"scope":["punctuation.definition.arguments","punctuation.definition.dict","punctuation.separator","meta.function-call.arguments"],"settings":{"foreground":"#212121"}},{"scope":["markup.underline.link","punctuation.definition.metadata.markdown"],"settings":{"foreground":"#22863a"}},{"scope":["beginning.punctuation.definition.list.markdown"],"settings":{"foreground":"#6f42c1"}},{"scope":["punctuation.definition.string.begin.markdown","punctuation.definition.string.end.markdown","string.other.link.title.markdown","string.other.link.description.markdown"],"settings":{"foreground":"#d32f2f"}}],"type":"light"}`));export{e as default};
2
- //# sourceMappingURL=min-light-BVOwCf2X.js.map
2
+ //# sourceMappingURL=min-light-CuZnzJu2.js.map