agim-cli 1.4.5 → 1.4.9

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 (186) hide show
  1. package/dist/core/memory-distiller.d.ts +22 -4
  2. package/dist/core/memory-distiller.d.ts.map +1 -1
  3. package/dist/core/memory-distiller.js +64 -31
  4. package/dist/core/memory-distiller.js.map +1 -1
  5. package/dist/core/persona.d.ts +2 -2
  6. package/dist/core/persona.d.ts.map +1 -1
  7. package/dist/core/persona.js +4 -2
  8. package/dist/core/persona.js.map +1 -1
  9. package/dist/web/public/assets/{a2a-DWibx2v1.js → a2a-CZxwvgvh.js} +2 -2
  10. package/dist/web/public/assets/{a2a-DWibx2v1.js.map → a2a-CZxwvgvh.js.map} +1 -1
  11. package/dist/web/public/assets/{activity-CSppRQoj.js → activity-BnlFGipw.js} +2 -2
  12. package/dist/web/public/assets/{activity-CSppRQoj.js.map → activity-BnlFGipw.js.map} +1 -1
  13. package/dist/web/public/assets/{admins-C9uvJ-ek.js → admins-CH84Rw1d.js} +2 -2
  14. package/dist/web/public/assets/{admins-C9uvJ-ek.js.map → admins-CH84Rw1d.js.map} +1 -1
  15. package/dist/web/public/assets/{agents-rbtxCOzD.js → agents-CFB4Uj6b.js} +2 -2
  16. package/dist/web/public/assets/{agents-rbtxCOzD.js.map → agents-CFB4Uj6b.js.map} +1 -1
  17. package/dist/web/public/assets/{approvals-CgRDzZZP.js → approvals-DnzjbDR6.js} +2 -2
  18. package/dist/web/public/assets/{approvals-CgRDzZZP.js.map → approvals-DnzjbDR6.js.map} +1 -1
  19. package/dist/web/public/assets/{arrow-down-DfVXLyJ6.js → arrow-down-DxlRHrs8.js} +2 -2
  20. package/dist/web/public/assets/{arrow-down-DfVXLyJ6.js.map → arrow-down-DxlRHrs8.js.map} +1 -1
  21. package/dist/web/public/assets/{arrow-up-CMHA89ux.js → arrow-up-CAiQ2jy-.js} +2 -2
  22. package/dist/web/public/assets/{arrow-up-CMHA89ux.js.map → arrow-up-CAiQ2jy-.js.map} +1 -1
  23. package/dist/web/public/assets/{asks-9JCznWEb.js → asks-DyUQopay.js} +2 -2
  24. package/dist/web/public/assets/{asks-9JCznWEb.js.map → asks-DyUQopay.js.map} +1 -1
  25. package/dist/web/public/assets/{audit-DM5sKNA4.js → audit-BVHTMS82.js} +2 -2
  26. package/dist/web/public/assets/{audit-DM5sKNA4.js.map → audit-BVHTMS82.js.map} +1 -1
  27. package/dist/web/public/assets/{bell-BzG0tUiv.js → bell-D7iS7ctN.js} +2 -2
  28. package/dist/web/public/assets/{bell-BzG0tUiv.js.map → bell-D7iS7ctN.js.map} +1 -1
  29. package/dist/web/public/assets/{bgjobs-dLxHKjQK.js → bgjobs-BYCQhd_1.js} +2 -2
  30. package/dist/web/public/assets/{bgjobs-dLxHKjQK.js.map → bgjobs-BYCQhd_1.js.map} +1 -1
  31. package/dist/web/public/assets/{brain-9QmMQ6Ap.js → brain-CCF25Egu.js} +2 -2
  32. package/dist/web/public/assets/{brain-9QmMQ6Ap.js.map → brain-CCF25Egu.js.map} +1 -1
  33. package/dist/web/public/assets/{briefcase-BehkRQvT.js → briefcase-BMLMD8nM.js} +2 -2
  34. package/dist/web/public/assets/{briefcase-BehkRQvT.js.map → briefcase-BMLMD8nM.js.map} +1 -1
  35. package/dist/web/public/assets/{chat-nfyoGDVp.js → chat-DPkKy5y_.js} +2 -2
  36. package/dist/web/public/assets/{chat-nfyoGDVp.js.map → chat-DPkKy5y_.js.map} +1 -1
  37. package/dist/web/public/assets/{chevron-left-DHpm5XR1.js → chevron-left-BDO3vw8G.js} +2 -2
  38. package/dist/web/public/assets/{chevron-left-DHpm5XR1.js.map → chevron-left-BDO3vw8G.js.map} +1 -1
  39. package/dist/web/public/assets/{chevron-right-BIKADdPm.js → chevron-right-5ZUC2opg.js} +2 -2
  40. package/dist/web/public/assets/{chevron-right-BIKADdPm.js.map → chevron-right-5ZUC2opg.js.map} +1 -1
  41. package/dist/web/public/assets/{circle-check-BbAeV_k2.js → circle-check-COhM5JsK.js} +2 -2
  42. package/dist/web/public/assets/{circle-check-BbAeV_k2.js.map → circle-check-COhM5JsK.js.map} +1 -1
  43. package/dist/web/public/assets/{circle-check-big-Cd4Eyz41.js → circle-check-big-DHAHqUlS.js} +2 -2
  44. package/dist/web/public/assets/{circle-check-big-Cd4Eyz41.js.map → circle-check-big-DHAHqUlS.js.map} +1 -1
  45. package/dist/web/public/assets/{circle-x-CrmHcrAS.js → circle-x-7VaoZ7dY.js} +2 -2
  46. package/dist/web/public/assets/{circle-x-CrmHcrAS.js.map → circle-x-7VaoZ7dY.js.map} +1 -1
  47. package/dist/web/public/assets/{clock-jJtwqx8f.js → clock-ZPVXnd6V.js} +2 -2
  48. package/dist/web/public/assets/{clock-jJtwqx8f.js.map → clock-ZPVXnd6V.js.map} +1 -1
  49. package/dist/web/public/assets/{confirm-dialog-D4JCDxHT.js → confirm-dialog-CgpJL9oN.js} +2 -2
  50. package/dist/web/public/assets/{confirm-dialog-D4JCDxHT.js.map → confirm-dialog-CgpJL9oN.js.map} +1 -1
  51. package/dist/web/public/assets/{copy-D9ljWg7b.js → copy-BaZl52tH.js} +2 -2
  52. package/dist/web/public/assets/{copy-D9ljWg7b.js.map → copy-BaZl52tH.js.map} +1 -1
  53. package/dist/web/public/assets/{data-table-yUuGHUSG.js → data-table-BLYG79TX.js} +2 -2
  54. package/dist/web/public/assets/{data-table-yUuGHUSG.js.map → data-table-BLYG79TX.js.map} +1 -1
  55. package/dist/web/public/assets/distill-D9p8O8Jf.js +7 -0
  56. package/dist/web/public/assets/distill-D9p8O8Jf.js.map +1 -0
  57. package/dist/web/public/assets/{download-9zxV6ejH.js → download-bzCepctg.js} +2 -2
  58. package/dist/web/public/assets/{download-9zxV6ejH.js.map → download-bzCepctg.js.map} +1 -1
  59. package/dist/web/public/assets/{email-C8Fx7GcZ.js → email-Douv-rZ5.js} +2 -2
  60. package/dist/web/public/assets/{email-C8Fx7GcZ.js.map → email-Douv-rZ5.js.map} +1 -1
  61. package/dist/web/public/assets/{empty-state-B0sJBvsG.js → empty-state-96qpPTNg.js} +2 -2
  62. package/dist/web/public/assets/{empty-state-B0sJBvsG.js.map → empty-state-96qpPTNg.js.map} +1 -1
  63. package/dist/web/public/assets/{external-link-C3fHPbrL.js → external-link-J4nIlCem.js} +2 -2
  64. package/dist/web/public/assets/{external-link-C3fHPbrL.js.map → external-link-J4nIlCem.js.map} +1 -1
  65. package/dist/web/public/assets/{eye-BrcGR1Ln.js → eye-BvsBLK42.js} +2 -2
  66. package/dist/web/public/assets/{eye-BrcGR1Ln.js.map → eye-BvsBLK42.js.map} +1 -1
  67. package/dist/web/public/assets/{facts-DNcekpR_.js → facts-DMucDXYd.js} +2 -2
  68. package/dist/web/public/assets/{facts-DNcekpR_.js.map → facts-DMucDXYd.js.map} +1 -1
  69. package/dist/web/public/assets/{goals-BJ0I0rVU.js → goals-B9ETHgL0.js} +2 -2
  70. package/dist/web/public/assets/{goals-BJ0I0rVU.js.map → goals-B9ETHgL0.js.map} +1 -1
  71. package/dist/web/public/assets/{health-DCFAQ615.js → health-DLzZ7KHc.js} +2 -2
  72. package/dist/web/public/assets/{health-DCFAQ615.js.map → health-DLzZ7KHc.js.map} +1 -1
  73. package/dist/web/public/assets/{heart-pulse-CiwiVY1D.js → heart-pulse-CVEeD2sz.js} +2 -2
  74. package/dist/web/public/assets/{heart-pulse-CiwiVY1D.js.map → heart-pulse-CVEeD2sz.js.map} +1 -1
  75. package/dist/web/public/assets/{heartbeat-CYIIkyqM.js → heartbeat-B1BEBHge.js} +2 -2
  76. package/dist/web/public/assets/{heartbeat-CYIIkyqM.js.map → heartbeat-B1BEBHge.js.map} +1 -1
  77. package/dist/web/public/assets/{hot-SjwVKjTN.js → hot-Yc7iad0D.js} +2 -2
  78. package/dist/web/public/assets/{hot-SjwVKjTN.js.map → hot-Yc7iad0D.js.map} +1 -1
  79. package/dist/web/public/assets/{index-BiXaJRfQ.js → index-DY2Zglku.js} +32 -32
  80. package/dist/web/public/assets/index-DY2Zglku.js.map +1 -0
  81. package/dist/web/public/assets/{injection-rK-nXEck.js → injection-Ca-9gbo0.js} +2 -2
  82. package/dist/web/public/assets/{injection-rK-nXEck.js.map → injection-Ca-9gbo0.js.map} +1 -1
  83. package/dist/web/public/assets/{installed-C3GsWhFt.js → installed-Zz34apdi.js} +2 -2
  84. package/dist/web/public/assets/{installed-C3GsWhFt.js.map → installed-Zz34apdi.js.map} +1 -1
  85. package/dist/web/public/assets/{jobs-Bu20ae1w.js → jobs-CtVRpl0r.js} +2 -2
  86. package/dist/web/public/assets/{jobs-Bu20ae1w.js.map → jobs-CtVRpl0r.js.map} +1 -1
  87. package/dist/web/public/assets/layout-BTCLgkgN.js +2 -0
  88. package/dist/web/public/assets/layout-BTCLgkgN.js.map +1 -0
  89. package/dist/web/public/assets/{layout-e2mh2uBC.js → layout-CtDc2i7w.js} +2 -2
  90. package/dist/web/public/assets/{layout-e2mh2uBC.js.map → layout-CtDc2i7w.js.map} +1 -1
  91. package/dist/web/public/assets/{layout-B4AOR7bx.js → layout-Cxch59sI.js} +2 -2
  92. package/dist/web/public/assets/{layout-B4AOR7bx.js.map → layout-Cxch59sI.js.map} +1 -1
  93. package/dist/web/public/assets/{layout-C0eeaex1.js → layout-DnANw2Q2.js} +2 -2
  94. package/dist/web/public/assets/{layout-C0eeaex1.js.map → layout-DnANw2Q2.js.map} +1 -1
  95. package/dist/web/public/assets/{layout-BjiHbubM.js → layout-yIZG87fq.js} +2 -2
  96. package/dist/web/public/assets/{layout-BjiHbubM.js.map → layout-yIZG87fq.js.map} +1 -1
  97. package/dist/web/public/assets/{llm-CgMGyAjF.js → llm-CMMa85Ig.js} +2 -2
  98. package/dist/web/public/assets/{llm-CgMGyAjF.js.map → llm-CMMa85Ig.js.map} +1 -1
  99. package/dist/web/public/assets/{loader-circle-D_dW2RUZ.js → loader-circle-D8L1w9c1.js} +2 -2
  100. package/dist/web/public/assets/{loader-circle-D_dW2RUZ.js.map → loader-circle-D8L1w9c1.js.map} +1 -1
  101. package/dist/web/public/assets/{map-pin-jOOaGCmo.js → map-pin--GMunU9n.js} +2 -2
  102. package/dist/web/public/assets/{map-pin-jOOaGCmo.js.map → map-pin--GMunU9n.js.map} +1 -1
  103. package/dist/web/public/assets/{mcp-Ip_omrap.js → mcp-DhnXhO9B.js} +2 -2
  104. package/dist/web/public/assets/{mcp-Ip_omrap.js.map → mcp-DhnXhO9B.js.map} +1 -1
  105. package/dist/web/public/assets/{memos-yOmAURiM.js → memos-DQZc7llR.js} +2 -2
  106. package/dist/web/public/assets/{memos-yOmAURiM.js.map → memos-DQZc7llR.js.map} +1 -1
  107. package/dist/web/public/assets/{messengers-DdS6Tv_H.js → messengers-DwSmauLs.js} +2 -2
  108. package/dist/web/public/assets/{messengers-DdS6Tv_H.js.map → messengers-DwSmauLs.js.map} +1 -1
  109. package/dist/web/public/assets/{mobile-7gRnqslc.js → mobile-CUZ359rQ.js} +2 -2
  110. package/dist/web/public/assets/{mobile-7gRnqslc.js.map → mobile-CUZ359rQ.js.map} +1 -1
  111. package/dist/web/public/assets/{network-ClaA9iUg.js → network-BBdRdrH_.js} +2 -2
  112. package/dist/web/public/assets/{network-ClaA9iUg.js.map → network-BBdRdrH_.js.map} +1 -1
  113. package/dist/web/public/assets/{outbox-YtiqLz-u.js → outbox-CmN0U35l.js} +2 -2
  114. package/dist/web/public/assets/{outbox-YtiqLz-u.js.map → outbox-CmN0U35l.js.map} +1 -1
  115. package/dist/web/public/assets/{pagination-DU9Lf0rD.js → pagination-DcsgDXXM.js} +2 -2
  116. package/dist/web/public/assets/{pagination-DU9Lf0rD.js.map → pagination-DcsgDXXM.js.map} +1 -1
  117. package/dist/web/public/assets/{persona-C9vZYuJJ.js → persona-ig2ac4mY.js} +2 -2
  118. package/dist/web/public/assets/{persona-C9vZYuJJ.js.map → persona-ig2ac4mY.js.map} +1 -1
  119. package/dist/web/public/assets/{plans-doYYvgG_.js → plans-Bzbk8eUr.js} +2 -2
  120. package/dist/web/public/assets/{plans-doYYvgG_.js.map → plans-Bzbk8eUr.js.map} +1 -1
  121. package/dist/web/public/assets/{play-C5MgP1qM.js → play-Di1jqulh.js} +2 -2
  122. package/dist/web/public/assets/{play-C5MgP1qM.js.map → play-Di1jqulh.js.map} +1 -1
  123. package/dist/web/public/assets/{plus-BFi9eVCl.js → plus-C2zyJ1mF.js} +2 -2
  124. package/dist/web/public/assets/{plus-BFi9eVCl.js.map → plus-C2zyJ1mF.js.map} +1 -1
  125. package/dist/web/public/assets/{policy-DS3IIL78.js → policy-yD1c2Pcn.js} +2 -2
  126. package/dist/web/public/assets/{policy-DS3IIL78.js.map → policy-yD1c2Pcn.js.map} +1 -1
  127. package/dist/web/public/assets/{qr-code-BL039OK7.js → qr-code-C-ACsKv_.js} +2 -2
  128. package/dist/web/public/assets/{qr-code-BL039OK7.js.map → qr-code-C-ACsKv_.js.map} +1 -1
  129. package/dist/web/public/assets/{refresh-ccw-DBNikooZ.js → refresh-ccw-7HdadG5V.js} +2 -2
  130. package/dist/web/public/assets/{refresh-ccw-DBNikooZ.js.map → refresh-ccw-7HdadG5V.js.map} +1 -1
  131. package/dist/web/public/assets/{reminders-BcymTbK9.js → reminders-BDeiVYTC.js} +2 -2
  132. package/dist/web/public/assets/{reminders-BcymTbK9.js.map → reminders-BDeiVYTC.js.map} +1 -1
  133. package/dist/web/public/assets/{save-DZiTNYpH.js → save-BYFmz9gD.js} +2 -2
  134. package/dist/web/public/assets/{save-DZiTNYpH.js.map → save-BYFmz9gD.js.map} +1 -1
  135. package/dist/web/public/assets/{schedules-C47XYMM0.js → schedules-BddzBrxI.js} +2 -2
  136. package/dist/web/public/assets/{schedules-C47XYMM0.js.map → schedules-BddzBrxI.js.map} +1 -1
  137. package/dist/web/public/assets/{search-DbPfPYg8.js → search-B8PlbtLg.js} +2 -2
  138. package/dist/web/public/assets/{search-DbPfPYg8.js.map → search-B8PlbtLg.js.map} +1 -1
  139. package/dist/web/public/assets/{search-DSXC_EYz.js → search-DxkvV-8p.js} +2 -2
  140. package/dist/web/public/assets/{search-DSXC_EYz.js.map → search-DxkvV-8p.js.map} +1 -1
  141. package/dist/web/public/assets/{security-D7z1GPFd.js → security-DpOGp3nS.js} +2 -2
  142. package/dist/web/public/assets/{security-D7z1GPFd.js.map → security-DpOGp3nS.js.map} +1 -1
  143. package/dist/web/public/assets/{service-7mISPUwf.js → service-BsY8CaNG.js} +2 -2
  144. package/dist/web/public/assets/{service-7mISPUwf.js.map → service-BsY8CaNG.js.map} +1 -1
  145. package/dist/web/public/assets/{shield-alert-C3F8izo0.js → shield-alert-DXGk9Rak.js} +2 -2
  146. package/dist/web/public/assets/{shield-alert-C3F8izo0.js.map → shield-alert-DXGk9Rak.js.map} +1 -1
  147. package/dist/web/public/assets/{status-badge-CvmA1Y93.js → status-badge-D0nbFSom.js} +2 -2
  148. package/dist/web/public/assets/{status-badge-CvmA1Y93.js.map → status-badge-D0nbFSom.js.map} +1 -1
  149. package/dist/web/public/assets/{subtasks-Bkgb9Pkm.js → subtasks-DFiAXvDp.js} +2 -2
  150. package/dist/web/public/assets/{subtasks-Bkgb9Pkm.js.map → subtasks-DFiAXvDp.js.map} +1 -1
  151. package/dist/web/public/assets/{table-z7CVpKMe.js → table-_WsrnZ_T.js} +2 -2
  152. package/dist/web/public/assets/{table-z7CVpKMe.js.map → table-_WsrnZ_T.js.map} +1 -1
  153. package/dist/web/public/assets/{topn-B7GHdOiE.js → topn-C2PHE4tX.js} +2 -2
  154. package/dist/web/public/assets/{topn-B7GHdOiE.js.map → topn-C2PHE4tX.js.map} +1 -1
  155. package/dist/web/public/assets/{trash-2-DdjC6QH7.js → trash-2-1Km439fW.js} +2 -2
  156. package/dist/web/public/assets/{trash-2-DdjC6QH7.js.map → trash-2-1Km439fW.js.map} +1 -1
  157. package/dist/web/public/assets/{use-agim-skills-CZkKns-g.js → use-agim-skills-COSqZrdH.js} +2 -2
  158. package/dist/web/public/assets/{use-agim-skills-CZkKns-g.js.map → use-agim-skills-COSqZrdH.js.map} +1 -1
  159. package/dist/web/public/assets/{use-background-tasks-CVdojnmx.js → use-background-tasks-wCL7jn68.js} +2 -2
  160. package/dist/web/public/assets/{use-background-tasks-CVdojnmx.js.map → use-background-tasks-wCL7jn68.js.map} +1 -1
  161. package/dist/web/public/assets/use-memory-B9oRyQC8.js +2 -0
  162. package/dist/web/public/assets/use-memory-B9oRyQC8.js.map +1 -0
  163. package/dist/web/public/assets/{use-observability-BtZPZLvB.js → use-observability-DGkN80qa.js} +2 -2
  164. package/dist/web/public/assets/{use-observability-BtZPZLvB.js.map → use-observability-DGkN80qa.js.map} +1 -1
  165. package/dist/web/public/assets/{use-settings-DHEiuHAv.js → use-settings-Co-iafXD.js} +2 -2
  166. package/dist/web/public/assets/{use-settings-DHEiuHAv.js.map → use-settings-Co-iafXD.js.map} +1 -1
  167. package/dist/web/public/assets/{use-workspace-C1gInLvF.js → use-workspace-BDXP5XO1.js} +2 -2
  168. package/dist/web/public/assets/{use-workspace-C1gInLvF.js.map → use-workspace-BDXP5XO1.js.map} +1 -1
  169. package/dist/web/public/assets/{vector-CLlo9px7.js → vector-BfIEx8xX.js} +2 -2
  170. package/dist/web/public/assets/{vector-CLlo9px7.js.map → vector-BfIEx8xX.js.map} +1 -1
  171. package/dist/web/public/assets/{viewer-BGdrQoJC.js → viewer-BPMZkT05.js} +2 -2
  172. package/dist/web/public/assets/{viewer-BGdrQoJC.js.map → viewer-BPMZkT05.js.map} +1 -1
  173. package/dist/web/public/assets/{workspace-zG8AgTev.js → workspace-BbCchiHE.js} +2 -2
  174. package/dist/web/public/assets/{workspace-zG8AgTev.js.map → workspace-BbCchiHE.js.map} +1 -1
  175. package/dist/web/public/assets/{workspaces-DT2xLs5G.js → workspaces-5HE7pjdA.js} +2 -2
  176. package/dist/web/public/assets/{workspaces-DT2xLs5G.js.map → workspaces-5HE7pjdA.js.map} +1 -1
  177. package/dist/web/public/index.html +1 -1
  178. package/dist/web/server.d.ts.map +1 -1
  179. package/dist/web/server.js +44 -0
  180. package/dist/web/server.js.map +1 -1
  181. package/package.json +1 -1
  182. package/dist/web/public/assets/index-BiXaJRfQ.js.map +0 -1
  183. package/dist/web/public/assets/layout-CHFdMCNs.js +0 -2
  184. package/dist/web/public/assets/layout-CHFdMCNs.js.map +0 -1
  185. package/dist/web/public/assets/use-memory-CHARtjQ-.js +0 -2
  186. package/dist/web/public/assets/use-memory-CHARtjQ-.js.map +0 -1
@@ -1,2 +0,0 @@
1
- import{u as m,j as e,S as d,g as u,h as p,i as h,k as i,f,T as b,N as j,c as x,O as g}from"./index-BiXaJRfQ.js";import{u as y}from"./use-memory-CHARtjQ-.js";import"./react-DlP5eolq.js";function _({value:c,onChange:n,className:l}){const{t:r}=m("memory"),{data:o,isLoading:s}=y(),a=o?.users??[];return e.jsxs(d,{value:c||"__placeholder__",onValueChange:t=>n(t==="__placeholder__"?"":t),disabled:s||a.length===0,children:[e.jsx(u,{className:l??"h-9 w-72 max-w-full",children:e.jsx(p,{placeholder:r("userPicker.placeholder")})}),e.jsxs(h,{children:[e.jsx(i,{value:"__placeholder__",disabled:!0,children:r("userPicker.placeholder")}),a.map(t=>e.jsx(i,{value:t.user_key,children:e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"font-mono text-xs",children:t.user_key}),e.jsx("span",{className:"text-text-dim text-xs",children:r("userPicker.factsLabel",{count:t.fact_count})}),t.has_persona&&e.jsxs("span",{className:"text-accent text-xs",children:["·",r("userPicker.personaTag"),"·"]})]})},t.user_key))]})]})}const v=[{to:"facts",i18nKey:"tabs.facts",mounted:!0},{to:"persona",i18nKey:"tabs.persona",mounted:!0},{to:"vector",i18nKey:"tabs.vector",mounted:!0}];function P(){const{t:c}=m("memory"),[n,l]=f(),r=n.get("user")??"";function o(s){const a=new URLSearchParams(n);s?a.set("user",s):a.delete("user"),l(a,{replace:!0})}return e.jsxs("div",{className:"flex min-h-dvh flex-col bg-bg",children:[e.jsx(b,{}),e.jsx("div",{className:"border-b border-border bg-surface px-3 sm:px-4 py-2",children:e.jsxs("div",{className:"mx-auto flex max-w-7xl items-center gap-3",children:[e.jsx("span",{className:"text-sm text-text-dim shrink-0",children:c("userPicker.label")}),e.jsx(_,{value:r,onChange:o})]})}),e.jsx("nav",{className:x("sticky top-0 z-10","flex items-center gap-1","border-b border-border bg-surface","px-3 sm:px-4 py-1","overflow-x-auto"),"aria-label":c("pageTitle"),children:v.filter(s=>s.mounted).map(s=>e.jsx(j,{to:s.to,className:({isActive:a})=>x("shrink-0 rounded-md px-3 py-1.5 text-sm no-underline","transition-colors tap-target",a?"bg-accent-bg text-accent font-medium":"text-text-dim hover:bg-surface-hover hover:text-text"),children:c(s.i18nKey)},s.to))}),e.jsx("main",{className:"flex-1 px-3 sm:px-4 py-4 pb-safe",children:e.jsx(g,{})})]})}export{P as default};
2
- //# sourceMappingURL=layout-CHFdMCNs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"layout-CHFdMCNs.js","sources":["../../src/components/memory/user-picker.tsx","../../src/routes/memory/layout.tsx"],"sourcesContent":["/**\n * MemoryUserPicker — Select for the user_key the /memory route\n * targets. Sources the option list from useMemoryUsers, shows the\n * per-user fact_count + persona-presence as inline metadata so the\n * operator can tell which users are interesting at a glance.\n *\n * Loading: while users fetch, the trigger shows the placeholder so\n * the page doesn't jump.\n *\n * Empty bank: no users → the dropdown is disabled with a tooltip\n * explaining there's nothing to pick. Avoids a confusing \"no items\"\n * dropdown state.\n */\n\nimport { useTranslation } from 'react-i18next'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select'\nimport { useMemoryUsers } from '@/hooks/use-memory'\n\nexport interface MemoryUserPickerProps {\n value: string\n onChange: (next: string) => void\n className?: string\n}\n\nexport function MemoryUserPicker({ value, onChange, className }: MemoryUserPickerProps): JSX.Element {\n const { t } = useTranslation('memory')\n const { data, isLoading } = useMemoryUsers()\n const users = data?.users ?? []\n\n return (\n <Select\n value={value || '__placeholder__'}\n onValueChange={(v) => onChange(v === '__placeholder__' ? '' : v)}\n disabled={isLoading || users.length === 0}\n >\n <SelectTrigger className={className ?? 'h-9 w-72 max-w-full'}>\n <SelectValue placeholder={t('userPicker.placeholder')} />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"__placeholder__\" disabled>\n {t('userPicker.placeholder')}\n </SelectItem>\n {users.map((u) => (\n <SelectItem key={u.user_key} value={u.user_key}>\n <span className=\"flex items-center gap-2\">\n <span className=\"font-mono text-xs\">{u.user_key}</span>\n <span className=\"text-text-dim text-xs\">\n {t('userPicker.factsLabel', { count: u.fact_count })}\n </span>\n {u.has_persona && (\n <span className=\"text-accent text-xs\">·{t('userPicker.personaTag')}·</span>\n )}\n </span>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )\n}\n","/**\n * /memory — layout shell shared by every sub-tab.\n *\n * Memory is partitioned per user_key. The picker lives in the\n * layout so it's the first thing the operator sees and stays put\n * across sub-tabs (facts / persona / vector / skills). The chosen\n * user is held in URL state (?user=) so sub-tabs read it via\n * useSearchParams.\n *\n * Sub-tabs: facts / persona / vector. Skills used to live here too\n * but was promoted to its own top-level /skills tab in 2026-05 — the\n * router keeps a redirect for old /memory/skills bookmarks.\n */\n\nimport { NavLink, Outlet, useSearchParams } from 'react-router-dom'\nimport { useTranslation } from 'react-i18next'\nimport { Topbar } from '@/components/shell/topbar'\nimport { MemoryUserPicker } from '@/components/memory/user-picker'\nimport { cn } from '@/lib/utils'\n\ninterface SubTab {\n to: string\n i18nKey: string\n mounted: boolean\n}\n\nconst SUB_TABS: SubTab[] = [\n { to: 'facts', i18nKey: 'tabs.facts', mounted: true },\n { to: 'persona', i18nKey: 'tabs.persona', mounted: true },\n { to: 'vector', i18nKey: 'tabs.vector', mounted: true },\n // 'skills' was here; promoted to top-level /skills in 2026-05.\n]\n\nexport default function MemoryLayout(): JSX.Element {\n const { t } = useTranslation('memory')\n const [params, setParams] = useSearchParams()\n const userKey = params.get('user') ?? ''\n\n function setUserKey(next: string): void {\n const p = new URLSearchParams(params)\n if (!next) p.delete('user')\n else p.set('user', next)\n setParams(p, { replace: true })\n }\n\n return (\n <div className=\"flex min-h-dvh flex-col bg-bg\">\n <Topbar />\n\n {/* User picker — the primary navigation control for this page */}\n <div className=\"border-b border-border bg-surface px-3 sm:px-4 py-2\">\n <div className=\"mx-auto flex max-w-7xl items-center gap-3\">\n <span className=\"text-sm text-text-dim shrink-0\">{t('userPicker.label')}</span>\n <MemoryUserPicker value={userKey} onChange={setUserKey} />\n </div>\n </div>\n\n {/* Sub-tab nav */}\n <nav\n className={cn(\n 'sticky top-0 z-10',\n 'flex items-center gap-1',\n 'border-b border-border bg-surface',\n 'px-3 sm:px-4 py-1',\n 'overflow-x-auto',\n )}\n aria-label={t('pageTitle')}\n >\n {SUB_TABS.filter((tab) => tab.mounted).map((tab) => (\n <NavLink\n key={tab.to}\n to={tab.to}\n className={({ isActive }) =>\n cn(\n 'shrink-0 rounded-md px-3 py-1.5 text-sm no-underline',\n 'transition-colors tap-target',\n isActive\n ? 'bg-accent-bg text-accent font-medium'\n : 'text-text-dim hover:bg-surface-hover hover:text-text',\n )\n }\n >\n {t(tab.i18nKey)}\n </NavLink>\n ))}\n </nav>\n\n <main className=\"flex-1 px-3 sm:px-4 py-4 pb-safe\">\n <Outlet />\n </main>\n </div>\n )\n}\n"],"names":["MemoryUserPicker","value","onChange","className","t","useTranslation","data","isLoading","useMemoryUsers","users","jsxs","Select","v","jsx","SelectTrigger","SelectValue","SelectContent","SelectItem","u","SUB_TABS","MemoryLayout","params","setParams","useSearchParams","userKey","setUserKey","next","p","Topbar","cn","tab","NavLink","isActive","Outlet"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{b as u,d as r,a as t,e as o,a6 as i}from"./index-BiXaJRfQ.js";const n={all:["memory"],users:["memory","users"],facts:e=>["memory","facts",e],persona:e=>["memory","persona",e],consolidate:["memory","consolidate"]};function l(){return u({queryKey:n.users,queryFn:()=>r.listMemoryUsers()})}function y(e,s={}){return u({queryKey:n.facts(e),queryFn:()=>r.listMemoryFacts(e),enabled:s.enabled!==!1&&!!e.user_key})}function d(){const e=t();return o({mutationFn:({id:s,user_key:a})=>r.deleteMemoryFactById(s,{user_key:a}),onSuccess:()=>e.invalidateQueries({queryKey:n.all})})}function m(){const e=t();return o({mutationFn:({user_key:s,body:a})=>r.deleteMemoryFacts({user_key:s},a),onSuccess:()=>e.invalidateQueries({queryKey:n.all})})}function f(e,s={}){return u({queryKey:n.persona(e),queryFn:async()=>{try{return await r.getMemoryPersona({user_key:e})}catch(a){if(a instanceof i&&a.status===404)return null;throw a}},enabled:s.enabled!==!1&&!!e})}function q(){const e=t();return o({mutationFn:({user_key:s,body:a})=>r.updateMemoryPersona({user_key:s},a),onSuccess:(s,a)=>{e.invalidateQueries({queryKey:n.persona(a.user_key)}),e.invalidateQueries({queryKey:n.users})}})}function F(){const e=t();return o({mutationFn:s=>r.deleteMemoryPersona({user_key:s}),onSuccess:(s,a)=>{e.invalidateQueries({queryKey:n.persona(a)}),e.invalidateQueries({queryKey:n.users})}})}function K(e={}){return u({queryKey:n.consolidate,queryFn:()=>r.getMemoryConsolidateStatus(),refetchInterval:3e3,refetchIntervalInBackground:!1,enabled:e.enabled!==!1})}function M(){const e=t();return o({mutationFn:()=>r.consolidateMemory(),onSuccess:()=>{e.invalidateQueries({queryKey:n.consolidate}),e.invalidateQueries({queryKey:n.all})}})}export{y as a,d as b,m as c,f as d,M as e,K as f,q as g,F as h,n as m,l as u};
2
- //# sourceMappingURL=use-memory-CHARtjQ-.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-memory-CHARtjQ-.js","sources":["../../src/hooks/use-memory.ts"],"sourcesContent":["/**\n * useMemory — react-query wrappers for the agent long-term memory.\n *\n * useMemoryUsers() — pick list of users that have\n * facts in the bank\n * useMemoryFacts(query) — pageable facts for one user\n * useDeleteFactById() — single-row delete\n * useBulkDeleteFacts() — multi / category / threshold\n *\n * No SSE channel; memory mutations are operator-driven and the\n * react-query 30s staleTime is enough. Mutations invalidate the\n * full ['memory'] tree so adjacent views (e.g. the user summary's\n * fact_count) stay in sync.\n */\n\nimport { useQueryClient, useQuery, useMutation } from '@tanstack/react-query'\nimport { api } from '@/lib/api/endpoints'\nimport { ApiClientError } from '@/lib/api/client'\nimport type {\n ConsolidateMemoryResponse,\n ConsolidateStatusResponse,\n DeleteMemoryFactsBody,\n DeleteMemoryFactsResponse,\n ListMemoryFactsQuery,\n ListMemoryFactsResponse,\n ListMemoryUsersResponse,\n OkResponse,\n Persona,\n UpdatePersonaBody,\n} from '@/types/api'\n\nexport const memoryKeys = {\n all: ['memory'] as const,\n users: ['memory', 'users'] as const,\n facts: (q: ListMemoryFactsQuery) => ['memory', 'facts', q] as const,\n persona: (user_key: string) => ['memory', 'persona', user_key] as const,\n consolidate: ['memory', 'consolidate'] as const,\n}\n\nexport function useMemoryUsers() {\n return useQuery<ListMemoryUsersResponse>({\n queryKey: memoryKeys.users,\n queryFn: () => api.listMemoryUsers(),\n })\n}\n\nexport function useMemoryFacts(query: ListMemoryFactsQuery, opts: { enabled?: boolean } = {}) {\n return useQuery<ListMemoryFactsResponse>({\n queryKey: memoryKeys.facts(query),\n queryFn: () => api.listMemoryFacts(query),\n // Caller passes enabled=false until a user_key is chosen so the\n // hook doesn't fire with an empty key.\n enabled: opts.enabled !== false && Boolean(query.user_key),\n })\n}\n\nexport function useInvalidateMemory() {\n const qc = useQueryClient()\n return () => qc.invalidateQueries({ queryKey: memoryKeys.all })\n}\n\nexport function useDeleteFactById() {\n const qc = useQueryClient()\n return useMutation<\n OkResponse & { id: number },\n Error,\n { id: number; user_key: string }\n >({\n mutationFn: ({ id, user_key }) => api.deleteMemoryFactById(id, { user_key }),\n onSuccess: () => qc.invalidateQueries({ queryKey: memoryKeys.all }),\n })\n}\n\nexport function useBulkDeleteFacts() {\n const qc = useQueryClient()\n return useMutation<\n DeleteMemoryFactsResponse,\n Error,\n { user_key: string; body: DeleteMemoryFactsBody }\n >({\n mutationFn: ({ user_key, body }) => api.deleteMemoryFacts({ user_key }, body),\n onSuccess: () => qc.invalidateQueries({ queryKey: memoryKeys.all }),\n })\n}\n\n/* ─────────────── Persona ─────────────── */\n\n/** Fetch the persona for a user. The backend returns 404 when the\n * user has no persona yet — we map that to `data: null` so the\n * route can render the \"not set yet\" state without a try/catch. */\nexport function useMemoryPersona(user_key: string, opts: { enabled?: boolean } = {}) {\n return useQuery<Persona | null>({\n queryKey: memoryKeys.persona(user_key),\n queryFn: async () => {\n try {\n return await api.getMemoryPersona({ user_key })\n } catch (err) {\n if (err instanceof ApiClientError && err.status === 404) return null\n throw err\n }\n },\n enabled: opts.enabled !== false && Boolean(user_key),\n })\n}\n\nexport function useUpdatePersona() {\n const qc = useQueryClient()\n return useMutation<\n { ok: boolean },\n Error,\n { user_key: string; body: UpdatePersonaBody }\n >({\n mutationFn: ({ user_key, body }) => api.updateMemoryPersona({ user_key }, body),\n onSuccess: (_data, vars) => {\n qc.invalidateQueries({ queryKey: memoryKeys.persona(vars.user_key) })\n qc.invalidateQueries({ queryKey: memoryKeys.users })\n },\n })\n}\n\nexport function useDeletePersona() {\n const qc = useQueryClient()\n return useMutation<{ ok: boolean }, Error, string>({\n mutationFn: (user_key) => api.deleteMemoryPersona({ user_key }),\n onSuccess: (_data, user_key) => {\n qc.invalidateQueries({ queryKey: memoryKeys.persona(user_key) })\n qc.invalidateQueries({ queryKey: memoryKeys.users })\n },\n })\n}\n\n/* ─────────────── Consolidate ─────────────── */\n\n/** Status of the in-flight + recent consolidation jobs. Polls while\n * the page is open since consolidate runs asynchronously and we\n * want the operator to see when it completes without manual\n * refresh. */\nexport function useConsolidateStatus(opts: { enabled?: boolean } = {}) {\n return useQuery<ConsolidateStatusResponse>({\n queryKey: memoryKeys.consolidate,\n queryFn: () => api.getMemoryConsolidateStatus(),\n refetchInterval: 3000,\n refetchIntervalInBackground: false,\n enabled: opts.enabled !== false,\n })\n}\n\nexport function useTriggerConsolidate() {\n const qc = useQueryClient()\n return useMutation<ConsolidateMemoryResponse, Error, void>({\n mutationFn: () => api.consolidateMemory(),\n onSuccess: () => {\n qc.invalidateQueries({ queryKey: memoryKeys.consolidate })\n qc.invalidateQueries({ queryKey: memoryKeys.all })\n },\n })\n}\n"],"names":["memoryKeys","q","user_key","useMemoryUsers","useQuery","api","useMemoryFacts","query","opts","useDeleteFactById","qc","useQueryClient","useMutation","id","useBulkDeleteFacts","body","useMemoryPersona","err","ApiClientError","useUpdatePersona","_data","vars","useDeletePersona","useConsolidateStatus","useTriggerConsolidate"],"mappings":"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"}