agim-cli 1.2.135 → 1.2.137

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 (184) hide show
  1. package/CHANGELOG.md +79 -0
  2. package/dist/core/plan-intent.d.ts.map +1 -1
  3. package/dist/core/plan-intent.js +3 -1
  4. package/dist/core/plan-intent.js.map +1 -1
  5. package/dist/core/skills/loader.d.ts.map +1 -1
  6. package/dist/core/skills/loader.js +26 -1
  7. package/dist/core/skills/loader.js.map +1 -1
  8. package/dist/plugins/agents/native/index.d.ts.map +1 -1
  9. package/dist/plugins/agents/native/index.js +8 -3
  10. package/dist/plugins/agents/native/index.js.map +1 -1
  11. package/dist/web/public/assets/{a2a-oYRz4syc.js → a2a-COCxV3Cc.js} +2 -2
  12. package/dist/web/public/assets/{a2a-oYRz4syc.js.map → a2a-COCxV3Cc.js.map} +1 -1
  13. package/dist/web/public/assets/{activity-CbMd52BC.js → activity-lssr7XnJ.js} +2 -2
  14. package/dist/web/public/assets/{activity-CbMd52BC.js.map → activity-lssr7XnJ.js.map} +1 -1
  15. package/dist/web/public/assets/{admins-BtuJdXZX.js → admins-DSW8IUl9.js} +2 -2
  16. package/dist/web/public/assets/{admins-BtuJdXZX.js.map → admins-DSW8IUl9.js.map} +1 -1
  17. package/dist/web/public/assets/{agents-Dm8fTAks.js → agents-0IMyFVui.js} +2 -2
  18. package/dist/web/public/assets/{agents-Dm8fTAks.js.map → agents-0IMyFVui.js.map} +1 -1
  19. package/dist/web/public/assets/{approvals-Y7FCBVQR.js → approvals-ClzA_Sl1.js} +2 -2
  20. package/dist/web/public/assets/{approvals-Y7FCBVQR.js.map → approvals-ClzA_Sl1.js.map} +1 -1
  21. package/dist/web/public/assets/{arrow-down-BpfVJViL.js → arrow-down-B6b32UC0.js} +2 -2
  22. package/dist/web/public/assets/{arrow-down-BpfVJViL.js.map → arrow-down-B6b32UC0.js.map} +1 -1
  23. package/dist/web/public/assets/{arrow-up-BQxFty9k.js → arrow-up-B-nP5kYY.js} +2 -2
  24. package/dist/web/public/assets/{arrow-up-BQxFty9k.js.map → arrow-up-B-nP5kYY.js.map} +1 -1
  25. package/dist/web/public/assets/{asks-CzeX-NCb.js → asks-DyXhQTTK.js} +2 -2
  26. package/dist/web/public/assets/{asks-CzeX-NCb.js.map → asks-DyXhQTTK.js.map} +1 -1
  27. package/dist/web/public/assets/{audit-DDonnB7I.js → audit-BI7SCouF.js} +2 -2
  28. package/dist/web/public/assets/{audit-DDonnB7I.js.map → audit-BI7SCouF.js.map} +1 -1
  29. package/dist/web/public/assets/{bell-QusEl0TB.js → bell-B3N02OLo.js} +2 -2
  30. package/dist/web/public/assets/{bell-QusEl0TB.js.map → bell-B3N02OLo.js.map} +1 -1
  31. package/dist/web/public/assets/{bgjobs-BIx5fZe2.js → bgjobs-CicZiNip.js} +2 -2
  32. package/dist/web/public/assets/{bgjobs-BIx5fZe2.js.map → bgjobs-CicZiNip.js.map} +1 -1
  33. package/dist/web/public/assets/{brain-CC9HwFtI.js → brain-C6ukvGuf.js} +2 -2
  34. package/dist/web/public/assets/{brain-CC9HwFtI.js.map → brain-C6ukvGuf.js.map} +1 -1
  35. package/dist/web/public/assets/{briefcase-DueOcW1K.js → briefcase-hn1X3B5h.js} +2 -2
  36. package/dist/web/public/assets/{briefcase-DueOcW1K.js.map → briefcase-hn1X3B5h.js.map} +1 -1
  37. package/dist/web/public/assets/{chat-DahEFTcT.js → chat-BDQj16Vz.js} +2 -2
  38. package/dist/web/public/assets/{chat-DahEFTcT.js.map → chat-BDQj16Vz.js.map} +1 -1
  39. package/dist/web/public/assets/{chevron-left-CaGOVECz.js → chevron-left-RxNVjq1Y.js} +2 -2
  40. package/dist/web/public/assets/{chevron-left-CaGOVECz.js.map → chevron-left-RxNVjq1Y.js.map} +1 -1
  41. package/dist/web/public/assets/{chevron-right-BX3t8KY3.js → chevron-right-BUp0DVnl.js} +2 -2
  42. package/dist/web/public/assets/{chevron-right-BX3t8KY3.js.map → chevron-right-BUp0DVnl.js.map} +1 -1
  43. package/dist/web/public/assets/{circle-check-BGjJhA0M.js → circle-check-Bm4WZ21u.js} +2 -2
  44. package/dist/web/public/assets/{circle-check-BGjJhA0M.js.map → circle-check-Bm4WZ21u.js.map} +1 -1
  45. package/dist/web/public/assets/{circle-check-big-CkxzVtPL.js → circle-check-big-BIrgy-jJ.js} +2 -2
  46. package/dist/web/public/assets/{circle-check-big-CkxzVtPL.js.map → circle-check-big-BIrgy-jJ.js.map} +1 -1
  47. package/dist/web/public/assets/{circle-x-BziROBzb.js → circle-x-D3x0-M6I.js} +2 -2
  48. package/dist/web/public/assets/{circle-x-BziROBzb.js.map → circle-x-D3x0-M6I.js.map} +1 -1
  49. package/dist/web/public/assets/{clock-80yAmtz6.js → clock-DS7DQ1w2.js} +2 -2
  50. package/dist/web/public/assets/{clock-80yAmtz6.js.map → clock-DS7DQ1w2.js.map} +1 -1
  51. package/dist/web/public/assets/{confirm-dialog-DAfv5d0M.js → confirm-dialog-C68_XUSd.js} +2 -2
  52. package/dist/web/public/assets/{confirm-dialog-DAfv5d0M.js.map → confirm-dialog-C68_XUSd.js.map} +1 -1
  53. package/dist/web/public/assets/{copy-CDQUdNjG.js → copy-Bzjhsg1p.js} +2 -2
  54. package/dist/web/public/assets/{copy-CDQUdNjG.js.map → copy-Bzjhsg1p.js.map} +1 -1
  55. package/dist/web/public/assets/{data-table-B_sUmaE2.js → data-table-DEXi61Ud.js} +2 -2
  56. package/dist/web/public/assets/{data-table-B_sUmaE2.js.map → data-table-DEXi61Ud.js.map} +1 -1
  57. package/dist/web/public/assets/{dialog-DGdHPiTV.js → dialog-gd2B3olO.js} +2 -2
  58. package/dist/web/public/assets/{dialog-DGdHPiTV.js.map → dialog-gd2B3olO.js.map} +1 -1
  59. package/dist/web/public/assets/{download-CTWGQ8nD.js → download-DCcaTdc6.js} +2 -2
  60. package/dist/web/public/assets/{download-CTWGQ8nD.js.map → download-DCcaTdc6.js.map} +1 -1
  61. package/dist/web/public/assets/{email-D0CbEk1s.js → email-Bp4hAFCc.js} +2 -2
  62. package/dist/web/public/assets/{email-D0CbEk1s.js.map → email-Bp4hAFCc.js.map} +1 -1
  63. package/dist/web/public/assets/{empty-state-CtWM3HCj.js → empty-state-Bzkp-ADK.js} +2 -2
  64. package/dist/web/public/assets/{empty-state-CtWM3HCj.js.map → empty-state-Bzkp-ADK.js.map} +1 -1
  65. package/dist/web/public/assets/{external-link-eCDEU3zh.js → external-link-Deer-Lh8.js} +2 -2
  66. package/dist/web/public/assets/{external-link-eCDEU3zh.js.map → external-link-Deer-Lh8.js.map} +1 -1
  67. package/dist/web/public/assets/{eye-BwZbiu9G.js → eye-aJAK4qYW.js} +2 -2
  68. package/dist/web/public/assets/{eye-BwZbiu9G.js.map → eye-aJAK4qYW.js.map} +1 -1
  69. package/dist/web/public/assets/{facts-CilmUyo5.js → facts-CX8Slc_J.js} +2 -2
  70. package/dist/web/public/assets/{facts-CilmUyo5.js.map → facts-CX8Slc_J.js.map} +1 -1
  71. package/dist/web/public/assets/{goals-ClMqJOcZ.js → goals-CoO5qR3l.js} +2 -2
  72. package/dist/web/public/assets/{goals-ClMqJOcZ.js.map → goals-CoO5qR3l.js.map} +1 -1
  73. package/dist/web/public/assets/{health-2Gc6vytU.js → health-QRL6KLLZ.js} +2 -2
  74. package/dist/web/public/assets/{health-2Gc6vytU.js.map → health-QRL6KLLZ.js.map} +1 -1
  75. package/dist/web/public/assets/{heart-pulse-f2ZP4fOw.js → heart-pulse-DTuy4Tma.js} +2 -2
  76. package/dist/web/public/assets/{heart-pulse-f2ZP4fOw.js.map → heart-pulse-DTuy4Tma.js.map} +1 -1
  77. package/dist/web/public/assets/{heartbeat-T5ecNv9f.js → heartbeat-BLutWB3t.js} +2 -2
  78. package/dist/web/public/assets/{heartbeat-T5ecNv9f.js.map → heartbeat-BLutWB3t.js.map} +1 -1
  79. package/dist/web/public/assets/{hot-hTf3IoT7.js → hot-B96_1Z-G.js} +2 -2
  80. package/dist/web/public/assets/{hot-hTf3IoT7.js.map → hot-B96_1Z-G.js.map} +1 -1
  81. package/dist/web/public/assets/{index-D4Np2s3l.js → index-wVLKSZpI.js} +4 -4
  82. package/dist/web/public/assets/{index-D4Np2s3l.js.map → index-wVLKSZpI.js.map} +1 -1
  83. package/dist/web/public/assets/{installed-3B4RqrKw.js → installed-5bpbtNzF.js} +2 -2
  84. package/dist/web/public/assets/{installed-3B4RqrKw.js.map → installed-5bpbtNzF.js.map} +1 -1
  85. package/dist/web/public/assets/{jobs-rdZMVduE.js → jobs-CPLjCaI5.js} +2 -2
  86. package/dist/web/public/assets/{jobs-rdZMVduE.js.map → jobs-CPLjCaI5.js.map} +1 -1
  87. package/dist/web/public/assets/{layout-CwEKQhrq.js → layout-CN-hNeUX.js} +2 -2
  88. package/dist/web/public/assets/{layout-CwEKQhrq.js.map → layout-CN-hNeUX.js.map} +1 -1
  89. package/dist/web/public/assets/{layout-ofBlvFCx.js → layout-Cdi09rZy.js} +2 -2
  90. package/dist/web/public/assets/{layout-ofBlvFCx.js.map → layout-Cdi09rZy.js.map} +1 -1
  91. package/dist/web/public/assets/{layout-DdSyLqXe.js → layout-DOvroJYL.js} +2 -2
  92. package/dist/web/public/assets/{layout-DdSyLqXe.js.map → layout-DOvroJYL.js.map} +1 -1
  93. package/dist/web/public/assets/{layout-DwNsrPtD.js → layout-K_oWND8q.js} +2 -2
  94. package/dist/web/public/assets/{layout-DwNsrPtD.js.map → layout-K_oWND8q.js.map} +1 -1
  95. package/dist/web/public/assets/{layout-cfySH7sc.js → layout-nYKX1VY4.js} +2 -2
  96. package/dist/web/public/assets/{layout-cfySH7sc.js.map → layout-nYKX1VY4.js.map} +1 -1
  97. package/dist/web/public/assets/{llm-CBLl38AB.js → llm-BDW-Xpvk.js} +2 -2
  98. package/dist/web/public/assets/{llm-CBLl38AB.js.map → llm-BDW-Xpvk.js.map} +1 -1
  99. package/dist/web/public/assets/{loader-circle-BfXi9R6u.js → loader-circle-DPc6botW.js} +2 -2
  100. package/dist/web/public/assets/{loader-circle-BfXi9R6u.js.map → loader-circle-DPc6botW.js.map} +1 -1
  101. package/dist/web/public/assets/{map-pin-E83IWTEe.js → map-pin-ECh-25H3.js} +2 -2
  102. package/dist/web/public/assets/{map-pin-E83IWTEe.js.map → map-pin-ECh-25H3.js.map} +1 -1
  103. package/dist/web/public/assets/{mcp-B-NKHX-f.js → mcp-BV-k5VFD.js} +2 -2
  104. package/dist/web/public/assets/{mcp-B-NKHX-f.js.map → mcp-BV-k5VFD.js.map} +1 -1
  105. package/dist/web/public/assets/{memos-CuY8Ai7a.js → memos-BTsHVXah.js} +2 -2
  106. package/dist/web/public/assets/{memos-CuY8Ai7a.js.map → memos-BTsHVXah.js.map} +1 -1
  107. package/dist/web/public/assets/{messengers-DGnu7I6n.js → messengers-fyjNQwDX.js} +2 -2
  108. package/dist/web/public/assets/{messengers-DGnu7I6n.js.map → messengers-fyjNQwDX.js.map} +1 -1
  109. package/dist/web/public/assets/{mobile-o-Aa_7VP.js → mobile-CeRuQZ-W.js} +2 -2
  110. package/dist/web/public/assets/{mobile-o-Aa_7VP.js.map → mobile-CeRuQZ-W.js.map} +1 -1
  111. package/dist/web/public/assets/{native-agent-Ivct8avv.js → native-agent-Cg-Sab4t.js} +3 -3
  112. package/dist/web/public/assets/{native-agent-Ivct8avv.js.map → native-agent-Cg-Sab4t.js.map} +1 -1
  113. package/dist/web/public/assets/{network-B48dL6Y7.js → network-FK3KNI1a.js} +2 -2
  114. package/dist/web/public/assets/{network-B48dL6Y7.js.map → network-FK3KNI1a.js.map} +1 -1
  115. package/dist/web/public/assets/{outbox-CQutJNfH.js → outbox-DhlxB8l0.js} +2 -2
  116. package/dist/web/public/assets/{outbox-CQutJNfH.js.map → outbox-DhlxB8l0.js.map} +1 -1
  117. package/dist/web/public/assets/{pagination-rJwdesRS.js → pagination-DzNnFLlI.js} +2 -2
  118. package/dist/web/public/assets/{pagination-rJwdesRS.js.map → pagination-DzNnFLlI.js.map} +1 -1
  119. package/dist/web/public/assets/{persona-DJO6f_q5.js → persona-B_EkauQB.js} +2 -2
  120. package/dist/web/public/assets/{persona-DJO6f_q5.js.map → persona-B_EkauQB.js.map} +1 -1
  121. package/dist/web/public/assets/{plans-D-Nf-jL2.js → plans-D4aczyt4.js} +2 -2
  122. package/dist/web/public/assets/{plans-D-Nf-jL2.js.map → plans-D4aczyt4.js.map} +1 -1
  123. package/dist/web/public/assets/{play-DqmSNGi8.js → play-BdTIFReu.js} +2 -2
  124. package/dist/web/public/assets/{play-DqmSNGi8.js.map → play-BdTIFReu.js.map} +1 -1
  125. package/dist/web/public/assets/{plus-CxClG9H0.js → plus-CjK8x5Ta.js} +2 -2
  126. package/dist/web/public/assets/{plus-CxClG9H0.js.map → plus-CjK8x5Ta.js.map} +1 -1
  127. package/dist/web/public/assets/{policy-Mqe38uiR.js → policy-D7vnZQeQ.js} +2 -2
  128. package/dist/web/public/assets/{policy-Mqe38uiR.js.map → policy-D7vnZQeQ.js.map} +1 -1
  129. package/dist/web/public/assets/{qr-code-BAEZ2Sel.js → qr-code-CpmzdYE3.js} +2 -2
  130. package/dist/web/public/assets/{qr-code-BAEZ2Sel.js.map → qr-code-CpmzdYE3.js.map} +1 -1
  131. package/dist/web/public/assets/{refresh-ccw-C7VT3MFu.js → refresh-ccw-C2Q06LWj.js} +2 -2
  132. package/dist/web/public/assets/{refresh-ccw-C7VT3MFu.js.map → refresh-ccw-C2Q06LWj.js.map} +1 -1
  133. package/dist/web/public/assets/{reminders--pCTIhTv.js → reminders-BW3VfYCD.js} +2 -2
  134. package/dist/web/public/assets/{reminders--pCTIhTv.js.map → reminders-BW3VfYCD.js.map} +1 -1
  135. package/dist/web/public/assets/{save-B18KQmEd.js → save-3XXDgdfD.js} +2 -2
  136. package/dist/web/public/assets/{save-B18KQmEd.js.map → save-3XXDgdfD.js.map} +1 -1
  137. package/dist/web/public/assets/{schedules-CA4eHggo.js → schedules-Bg5oBl6i.js} +2 -2
  138. package/dist/web/public/assets/{schedules-CA4eHggo.js.map → schedules-Bg5oBl6i.js.map} +1 -1
  139. package/dist/web/public/assets/{search-CA_pO63g.js → search-BjW_KGfJ.js} +2 -2
  140. package/dist/web/public/assets/{search-CA_pO63g.js.map → search-BjW_KGfJ.js.map} +1 -1
  141. package/dist/web/public/assets/{search-ChcW6uXM.js → search-oQrctQNZ.js} +2 -2
  142. package/dist/web/public/assets/{search-ChcW6uXM.js.map → search-oQrctQNZ.js.map} +1 -1
  143. package/dist/web/public/assets/{security-CeW9WxQO.js → security-ongR2bsH.js} +2 -2
  144. package/dist/web/public/assets/{security-CeW9WxQO.js.map → security-ongR2bsH.js.map} +1 -1
  145. package/dist/web/public/assets/{service-CJRR2q7Q.js → service-CNTTFkAV.js} +2 -2
  146. package/dist/web/public/assets/{service-CJRR2q7Q.js.map → service-CNTTFkAV.js.map} +1 -1
  147. package/dist/web/public/assets/{shield-alert-0q3ul8GH.js → shield-alert-DW0flso9.js} +2 -2
  148. package/dist/web/public/assets/{shield-alert-0q3ul8GH.js.map → shield-alert-DW0flso9.js.map} +1 -1
  149. package/dist/web/public/assets/{status-badge-CN17QMv6.js → status-badge-CnqMu-7R.js} +2 -2
  150. package/dist/web/public/assets/{status-badge-CN17QMv6.js.map → status-badge-CnqMu-7R.js.map} +1 -1
  151. package/dist/web/public/assets/{subtasks-gjO9Hf1a.js → subtasks-ChtI7jpP.js} +2 -2
  152. package/dist/web/public/assets/{subtasks-gjO9Hf1a.js.map → subtasks-ChtI7jpP.js.map} +1 -1
  153. package/dist/web/public/assets/{table-C4P3KPbF.js → table-DVQPjWsi.js} +2 -2
  154. package/dist/web/public/assets/{table-C4P3KPbF.js.map → table-DVQPjWsi.js.map} +1 -1
  155. package/dist/web/public/assets/{topn-BMw-Uy1R.js → topn-Cs-wP6Tf.js} +2 -2
  156. package/dist/web/public/assets/{topn-BMw-Uy1R.js.map → topn-Cs-wP6Tf.js.map} +1 -1
  157. package/dist/web/public/assets/{trash-2-DOV8CHL9.js → trash-2-BXhBc6TL.js} +2 -2
  158. package/dist/web/public/assets/{trash-2-DOV8CHL9.js.map → trash-2-BXhBc6TL.js.map} +1 -1
  159. package/dist/web/public/assets/{use-background-tasks-CgZBaDBR.js → use-background-tasks-DWe_iYgk.js} +2 -2
  160. package/dist/web/public/assets/{use-background-tasks-CgZBaDBR.js.map → use-background-tasks-DWe_iYgk.js.map} +1 -1
  161. package/dist/web/public/assets/{use-llm-admin-BNwZKmJ9.js → use-llm-admin-SE-2iSIe.js} +2 -2
  162. package/dist/web/public/assets/{use-llm-admin-BNwZKmJ9.js.map → use-llm-admin-SE-2iSIe.js.map} +1 -1
  163. package/dist/web/public/assets/{use-memory-D4ViUoXw.js → use-memory-tCgpqYla.js} +2 -2
  164. package/dist/web/public/assets/{use-memory-D4ViUoXw.js.map → use-memory-tCgpqYla.js.map} +1 -1
  165. package/dist/web/public/assets/{use-observability-DJYRVPKp.js → use-observability-CMUSiy5z.js} +2 -2
  166. package/dist/web/public/assets/{use-observability-DJYRVPKp.js.map → use-observability-CMUSiy5z.js.map} +1 -1
  167. package/dist/web/public/assets/{use-settings-XXVWFAv6.js → use-settings-BUM0BmtA.js} +2 -2
  168. package/dist/web/public/assets/{use-settings-XXVWFAv6.js.map → use-settings-BUM0BmtA.js.map} +1 -1
  169. package/dist/web/public/assets/{use-workspace-BgEM7e1m.js → use-workspace-BOUxEbaB.js} +2 -2
  170. package/dist/web/public/assets/{use-workspace-BgEM7e1m.js.map → use-workspace-BOUxEbaB.js.map} +1 -1
  171. package/dist/web/public/assets/{useQuery-B25CPtUF.js → useQuery-II-YwTUw.js} +2 -2
  172. package/dist/web/public/assets/{useQuery-B25CPtUF.js.map → useQuery-II-YwTUw.js.map} +1 -1
  173. package/dist/web/public/assets/{vector-Dh4Sp_ea.js → vector-C83bHtEW.js} +2 -2
  174. package/dist/web/public/assets/{vector-Dh4Sp_ea.js.map → vector-C83bHtEW.js.map} +1 -1
  175. package/dist/web/public/assets/{viewer-B1vINzWu.js → viewer-rMDo9pIb.js} +2 -2
  176. package/dist/web/public/assets/{viewer-B1vINzWu.js.map → viewer-rMDo9pIb.js.map} +1 -1
  177. package/dist/web/public/assets/{workspace-uGVMiBxd.js → workspace-tVixiuWJ.js} +2 -2
  178. package/dist/web/public/assets/{workspace-uGVMiBxd.js.map → workspace-tVixiuWJ.js.map} +1 -1
  179. package/dist/web/public/assets/{workspaces-C8PjcrCq.js → workspaces-CsLKDstm.js} +2 -2
  180. package/dist/web/public/assets/{workspaces-C8PjcrCq.js.map → workspaces-CsLKDstm.js.map} +1 -1
  181. package/dist/web/public/assets/{x-CGfY-U_P.js → x-B0lqsHGi.js} +2 -2
  182. package/dist/web/public/assets/{x-CGfY-U_P.js.map → x-B0lqsHGi.js.map} +1 -1
  183. package/dist/web/public/index.html +1 -1
  184. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
- import{n as e}from"./index-D4Np2s3l.js";/**
1
+ import{n as e}from"./index-wVLKSZpI.js";/**
2
2
  * @license lucide-react v0.469.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
5
5
  * See the LICENSE file in the root directory of this source tree.
6
6
  */const t=e("Trash2",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]]);export{t as T};
7
- //# sourceMappingURL=trash-2-DOV8CHL9.js.map
7
+ //# sourceMappingURL=trash-2-BXhBc6TL.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"trash-2-DOV8CHL9.js","sources":["../../node_modules/lucide-react/dist/esm/icons/trash-2.js"],"sourcesContent":["/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Trash2 = createLucideIcon(\"Trash2\", [\n [\"path\", { d: \"M3 6h18\", key: \"d0wm0j\" }],\n [\"path\", { d: \"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\", key: \"4alrt4\" }],\n [\"path\", { d: \"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\", key: \"v07s0e\" }],\n [\"line\", { x1: \"10\", x2: \"10\", y1: \"11\", y2: \"17\", key: \"1uufr5\" }],\n [\"line\", { x1: \"14\", x2: \"14\", y1: \"11\", y2: \"17\", key: \"xtxkd\" }]\n]);\n\nexport { Trash2 as default };\n//# sourceMappingURL=trash-2.js.map\n"],"names":["Trash2","createLucideIcon"],"mappings":"wCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAASC,EAAiB,SAAU,CACxC,CAAC,OAAQ,CAAE,EAAG,UAAW,IAAK,QAAQ,CAAE,EACxC,CAAC,OAAQ,CAAE,EAAG,wCAAyC,IAAK,QAAQ,CAAE,EACtE,CAAC,OAAQ,CAAE,EAAG,qCAAsC,IAAK,QAAQ,CAAE,EACnE,CAAC,OAAQ,CAAE,GAAI,KAAM,GAAI,KAAM,GAAI,KAAM,GAAI,KAAM,IAAK,QAAQ,CAAE,EAClE,CAAC,OAAQ,CAAE,GAAI,KAAM,GAAI,KAAM,GAAI,KAAM,GAAI,KAAM,IAAK,OAAO,CAAE,CACnE,CAAC","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"trash-2-BXhBc6TL.js","sources":["../../node_modules/lucide-react/dist/esm/icons/trash-2.js"],"sourcesContent":["/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Trash2 = createLucideIcon(\"Trash2\", [\n [\"path\", { d: \"M3 6h18\", key: \"d0wm0j\" }],\n [\"path\", { d: \"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\", key: \"4alrt4\" }],\n [\"path\", { d: \"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\", key: \"v07s0e\" }],\n [\"line\", { x1: \"10\", x2: \"10\", y1: \"11\", y2: \"17\", key: \"1uufr5\" }],\n [\"line\", { x1: \"14\", x2: \"14\", y1: \"11\", y2: \"17\", key: \"xtxkd\" }]\n]);\n\nexport { Trash2 as default };\n//# sourceMappingURL=trash-2.js.map\n"],"names":["Trash2","createLucideIcon"],"mappings":"wCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAASC,EAAiB,SAAU,CACxC,CAAC,OAAQ,CAAE,EAAG,UAAW,IAAK,QAAQ,CAAE,EACxC,CAAC,OAAQ,CAAE,EAAG,wCAAyC,IAAK,QAAQ,CAAE,EACtE,CAAC,OAAQ,CAAE,EAAG,qCAAsC,IAAK,QAAQ,CAAE,EACnE,CAAC,OAAQ,CAAE,GAAI,KAAM,GAAI,KAAM,GAAI,KAAM,GAAI,KAAM,IAAK,QAAQ,CAAE,EAClE,CAAC,OAAQ,CAAE,GAAI,KAAM,GAAI,KAAM,GAAI,KAAM,GAAI,KAAM,IAAK,OAAO,CAAE,CACnE,CAAC","x_google_ignoreList":[0]}
@@ -1,2 +1,2 @@
1
- import{u as s}from"./useQuery-B25CPtUF.js";import{a as i,b as l,o as a}from"./index-D4Np2s3l.js";const r={all:["heartbeat"],list:["heartbeat","list"]};function c(e){return`${e.platform}:${e.channelId}:${e.threadId}`}function g(){return s({queryKey:r.list,queryFn:()=>a.get("/api/heartbeat/bindings"),refetchInterval:1e4,refetchIntervalInBackground:!1})}function p(){const e=i();return l({mutationFn:({row:t,op:n})=>a.post(`/api/heartbeat/bindings/${encodeURIComponent(c(t))}/${n}`),onSuccess:()=>e.invalidateQueries({queryKey:r.all})})}const u={all:["goals"],list:["goals","list"]};function h(){return s({queryKey:u.list,queryFn:()=>a.get("/api/goals"),refetchInterval:3e4})}function m(){const e=i();return l({mutationFn:({id:t,status:n})=>a.put(`/api/goals/${t}/status`,{body:{status:n}}),onSuccess:()=>e.invalidateQueries({queryKey:u.all})})}const o={all:["asks"],list:["asks","list"]};function q(){return s({queryKey:o.list,queryFn:()=>a.get("/api/asks/pending"),refetchInterval:5e3})}function K(){const e=i();return l({mutationFn:t=>a.post(`/api/asks/pending/${encodeURIComponent(t)}/cancel`),onSuccess:()=>e.invalidateQueries({queryKey:o.all})})}const y={all:["plans"],list:(e,t)=>["plans","list",e??null,t??null]};function b(e={}){const t=new URLSearchParams;e.threadKey&&t.set("thread_key",e.threadKey),e.limit!=null&&t.set("limit",String(e.limit));const n=t.toString();return s({queryKey:y.list(e.threadKey,e.limit),queryFn:()=>a.get(`/api/plans${n?`?${n}`:""}`)})}export{p as a,h as b,m as c,q as d,K as e,b as f,g as u};
2
- //# sourceMappingURL=use-background-tasks-CgZBaDBR.js.map
1
+ import{u as s}from"./useQuery-II-YwTUw.js";import{a as i,b as l,o as a}from"./index-wVLKSZpI.js";const r={all:["heartbeat"],list:["heartbeat","list"]};function c(e){return`${e.platform}:${e.channelId}:${e.threadId}`}function g(){return s({queryKey:r.list,queryFn:()=>a.get("/api/heartbeat/bindings"),refetchInterval:1e4,refetchIntervalInBackground:!1})}function p(){const e=i();return l({mutationFn:({row:t,op:n})=>a.post(`/api/heartbeat/bindings/${encodeURIComponent(c(t))}/${n}`),onSuccess:()=>e.invalidateQueries({queryKey:r.all})})}const u={all:["goals"],list:["goals","list"]};function h(){return s({queryKey:u.list,queryFn:()=>a.get("/api/goals"),refetchInterval:3e4})}function m(){const e=i();return l({mutationFn:({id:t,status:n})=>a.put(`/api/goals/${t}/status`,{body:{status:n}}),onSuccess:()=>e.invalidateQueries({queryKey:u.all})})}const o={all:["asks"],list:["asks","list"]};function q(){return s({queryKey:o.list,queryFn:()=>a.get("/api/asks/pending"),refetchInterval:5e3})}function K(){const e=i();return l({mutationFn:t=>a.post(`/api/asks/pending/${encodeURIComponent(t)}/cancel`),onSuccess:()=>e.invalidateQueries({queryKey:o.all})})}const y={all:["plans"],list:(e,t)=>["plans","list",e??null,t??null]};function b(e={}){const t=new URLSearchParams;e.threadKey&&t.set("thread_key",e.threadKey),e.limit!=null&&t.set("limit",String(e.limit));const n=t.toString();return s({queryKey:y.list(e.threadKey,e.limit),queryFn:()=>a.get(`/api/plans${n?`?${n}`:""}`)})}export{p as a,h as b,m as c,q as d,K as e,b as f,g as u};
2
+ //# sourceMappingURL=use-background-tasks-DWe_iYgk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-background-tasks-CgZBaDBR.js","sources":["../../src/hooks/use-background-tasks.ts"],"sourcesContent":["/**\n * use-background-tasks — react-query hooks for the P1 follow-up\n * admin panels (heartbeat / goals / asks).\n *\n * All three sit under the same `/tasks/*` SPA group + share polling\n * intervals because operators tend to flip between them. Each list\n * polls every 10s while foreground so live activity (a new ask\n * landing, a heartbeat tick completing) shows up without a manual\n * refresh.\n */\n\nimport { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'\nimport { client } from '@/lib/api/client'\n\n// ─── Heartbeat ──────────────────────────────────────────────────\n\nexport interface HeartbeatRow {\n platform: string\n channelId: string\n threadId: string\n userId: string\n body: string\n intervalMinutes: number\n enabled: boolean\n lastTickAt: string | null\n lastStatus: string\n lastReason: string\n lastTextPreview: string\n createdAt: string\n}\n\nexport interface HeartbeatListResponse {\n bindings: HeartbeatRow[]\n count: number\n}\n\nconst hbKeys = {\n all: ['heartbeat'] as const,\n list: ['heartbeat', 'list'] as const,\n}\n\nfunction bindingKey(r: { platform: string; channelId: string; threadId: string }): string {\n return `${r.platform}:${r.channelId}:${r.threadId}`\n}\n\nexport function useHeartbeatList() {\n return useQuery<HeartbeatListResponse>({\n queryKey: hbKeys.list,\n queryFn: () => client.get<HeartbeatListResponse>('/api/heartbeat/bindings'),\n refetchInterval: 10_000,\n refetchIntervalInBackground: false,\n })\n}\n\nexport function useHeartbeatToggle() {\n const qc = useQueryClient()\n return useMutation<unknown, Error, { row: HeartbeatRow; op: 'enable' | 'disable' }>({\n mutationFn: ({ row, op }) => client.post(\n `/api/heartbeat/bindings/${encodeURIComponent(bindingKey(row))}/${op}`,\n ),\n onSuccess: () => qc.invalidateQueries({ queryKey: hbKeys.all }),\n })\n}\n\n// ─── Goals ──────────────────────────────────────────────────────\n\nexport interface GoalRow {\n id: number\n platform: string\n channelId: string\n threadId: string\n userId: string\n title: string\n body: string\n status: 'active' | 'paused' | 'completed' | 'cancelled'\n progressLog: Array<{ ts: string; by: string; text: string }>\n progressCount: number\n createdAt: string\n updatedAt: string\n closedAt: string | null\n}\n\nexport interface GoalsListResponse {\n goals: GoalRow[]\n count: number\n scope: 'all-active' | 'thread'\n}\n\nconst goalKeys = {\n all: ['goals'] as const,\n list: ['goals', 'list'] as const,\n}\n\nexport function useGoalsList() {\n return useQuery<GoalsListResponse>({\n queryKey: goalKeys.list,\n queryFn: () => client.get<GoalsListResponse>('/api/goals'),\n refetchInterval: 30_000,\n })\n}\n\nexport function useGoalUpdateStatus() {\n const qc = useQueryClient()\n return useMutation<unknown, Error, { id: number; status: GoalRow['status'] }>({\n mutationFn: ({ id, status }) => client.put(\n `/api/goals/${id}/status`, { body: { status } },\n ),\n onSuccess: () => qc.invalidateQueries({ queryKey: goalKeys.all }),\n })\n}\n\n// ─── Pending asks ───────────────────────────────────────────────\n\nexport interface PendingAskRow {\n reqId: string\n platform: string\n threadId: string\n question: string\n choices: number\n ageMs: number\n}\n\nexport interface AsksListResponse {\n pending: PendingAskRow[]\n count: number\n}\n\nconst askKeys = {\n all: ['asks'] as const,\n list: ['asks', 'list'] as const,\n}\n\nexport function useAsksList() {\n return useQuery<AsksListResponse>({\n queryKey: askKeys.list,\n queryFn: () => client.get<AsksListResponse>('/api/asks/pending'),\n refetchInterval: 5_000, // asks are short-lived; poll faster\n })\n}\n\nexport function useAskCancel() {\n const qc = useQueryClient()\n return useMutation<unknown, Error, string>({\n mutationFn: (reqId) => client.post(`/api/asks/pending/${encodeURIComponent(reqId)}/cancel`),\n onSuccess: () => qc.invalidateQueries({ queryKey: askKeys.all }),\n })\n}\n\n// ─── Plan history (v1.2.133) ────────────────────────────────────\n\nexport type PlanOutcome = 'approved' | 'rejected' | 'edited' | 'expired'\n\nexport interface PlanHistoryRow {\n id: number\n threadKey: string\n planMd: string\n outcome: PlanOutcome\n detail: string | null\n resolvedAt: string\n pendingMs: number | null\n}\n\nexport interface PlansListResponse {\n plans: PlanHistoryRow[]\n total: number\n}\n\nconst planKeys = {\n all: ['plans'] as const,\n list: (threadKey?: string, limit?: number) =>\n ['plans', 'list', threadKey ?? null, limit ?? null] as const,\n}\n\n/** GET /api/plans — admin list of native_exit_plan_mode handshakes\n * with outcome + pending duration + the plan markdown. Filters on\n * thread_key (optional) and limit (clamped 1..500 server-side). */\nexport function usePlansList(opts: { threadKey?: string; limit?: number } = {}) {\n const params = new URLSearchParams()\n if (opts.threadKey) params.set('thread_key', opts.threadKey)\n if (opts.limit != null) params.set('limit', String(opts.limit))\n const qs = params.toString()\n return useQuery<PlansListResponse>({\n queryKey: planKeys.list(opts.threadKey, opts.limit),\n queryFn: () => client.get<PlansListResponse>(`/api/plans${qs ? `?${qs}` : ''}`),\n })\n}\n"],"names":["hbKeys","bindingKey","r","useHeartbeatList","useQuery","client","useHeartbeatToggle","qc","useQueryClient","useMutation","row","op","goalKeys","useGoalsList","useGoalUpdateStatus","id","status","askKeys","useAsksList","useAskCancel","reqId","planKeys","threadKey","limit","usePlansList","opts","params","qs"],"mappings":"iGAoCA,MAAMA,EAAS,CACb,IAAM,CAAC,WAAW,EAClB,KAAM,CAAC,YAAa,MAAM,CAC5B,EAEA,SAASC,EAAWC,EAAsE,CACxF,MAAO,GAAGA,EAAE,QAAQ,IAAIA,EAAE,SAAS,IAAIA,EAAE,QAAQ,EACnD,CAEO,SAASC,GAAmB,CACjC,OAAOC,EAAgC,CACrC,SAAUJ,EAAO,KACjB,QAAS,IAAMK,EAAO,IAA2B,yBAAyB,EAC1E,gBAAiB,IACjB,4BAA6B,EAAA,CAC9B,CACH,CAEO,SAASC,GAAqB,CACnC,MAAMC,EAAKC,EAAA,EACX,OAAOC,EAA6E,CAClF,WAAY,CAAC,CAAE,IAAAC,EAAK,GAAAC,CAAA,IAASN,EAAO,KAClC,2BAA2B,mBAAmBJ,EAAWS,CAAG,CAAC,CAAC,IAAIC,CAAE,EAAA,EAEtE,UAAW,IAAMJ,EAAG,kBAAkB,CAAE,SAAUP,EAAO,IAAK,CAAA,CAC/D,CACH,CA0BA,MAAMY,EAAW,CACf,IAAM,CAAC,OAAO,EACd,KAAM,CAAC,QAAS,MAAM,CACxB,EAEO,SAASC,GAAe,CAC7B,OAAOT,EAA4B,CACjC,SAAUQ,EAAS,KACnB,QAAS,IAAMP,EAAO,IAAuB,YAAY,EACzD,gBAAiB,GAAA,CAClB,CACH,CAEO,SAASS,GAAsB,CACpC,MAAMP,EAAKC,EAAA,EACX,OAAOC,EAAuE,CAC5E,WAAY,CAAC,CAAE,GAAAM,EAAI,OAAAC,CAAA,IAAaX,EAAO,IACrC,cAAcU,CAAE,UAAW,CAAE,KAAM,CAAE,OAAAC,CAAA,CAAO,CAAE,EAEhD,UAAW,IAAMT,EAAG,kBAAkB,CAAE,SAAUK,EAAS,IAAK,CAAA,CACjE,CACH,CAkBA,MAAMK,EAAU,CACd,IAAM,CAAC,MAAM,EACb,KAAM,CAAC,OAAQ,MAAM,CACvB,EAEO,SAASC,GAAc,CAC5B,OAAOd,EAA2B,CAChC,SAAUa,EAAQ,KAClB,QAAS,IAAMZ,EAAO,IAAsB,mBAAmB,EAC/D,gBAAiB,GAAA,CAClB,CACH,CAEO,SAASc,GAAe,CAC7B,MAAMZ,EAAKC,EAAA,EACX,OAAOC,EAAoC,CACzC,WAAaW,GAAUf,EAAO,KAAK,qBAAqB,mBAAmBe,CAAK,CAAC,SAAS,EAC1F,UAAW,IAAMb,EAAG,kBAAkB,CAAE,SAAUU,EAAQ,IAAK,CAAA,CAChE,CACH,CAqBA,MAAMI,EAAW,CACf,IAAM,CAAC,OAAO,EACd,KAAM,CAACC,EAAoBC,IACzB,CAAC,QAAS,OAAQD,GAAa,KAAMC,GAAS,IAAI,CACtD,EAKO,SAASC,EAAaC,EAA+C,GAAI,CAC9E,MAAMC,EAAS,IAAI,gBACfD,EAAK,WAAWC,EAAO,IAAI,aAAcD,EAAK,SAAS,EACvDA,EAAK,OAAS,MAAMC,EAAO,IAAI,QAAS,OAAOD,EAAK,KAAK,CAAC,EAC9D,MAAME,EAAKD,EAAO,SAAA,EAClB,OAAOtB,EAA4B,CACjC,SAAUiB,EAAS,KAAKI,EAAK,UAAWA,EAAK,KAAK,EAClD,QAAS,IAAMpB,EAAO,IAAuB,aAAasB,EAAK,IAAIA,CAAE,GAAK,EAAE,EAAE,CAAA,CAC/E,CACH"}
1
+ {"version":3,"file":"use-background-tasks-DWe_iYgk.js","sources":["../../src/hooks/use-background-tasks.ts"],"sourcesContent":["/**\n * use-background-tasks — react-query hooks for the P1 follow-up\n * admin panels (heartbeat / goals / asks).\n *\n * All three sit under the same `/tasks/*` SPA group + share polling\n * intervals because operators tend to flip between them. Each list\n * polls every 10s while foreground so live activity (a new ask\n * landing, a heartbeat tick completing) shows up without a manual\n * refresh.\n */\n\nimport { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'\nimport { client } from '@/lib/api/client'\n\n// ─── Heartbeat ──────────────────────────────────────────────────\n\nexport interface HeartbeatRow {\n platform: string\n channelId: string\n threadId: string\n userId: string\n body: string\n intervalMinutes: number\n enabled: boolean\n lastTickAt: string | null\n lastStatus: string\n lastReason: string\n lastTextPreview: string\n createdAt: string\n}\n\nexport interface HeartbeatListResponse {\n bindings: HeartbeatRow[]\n count: number\n}\n\nconst hbKeys = {\n all: ['heartbeat'] as const,\n list: ['heartbeat', 'list'] as const,\n}\n\nfunction bindingKey(r: { platform: string; channelId: string; threadId: string }): string {\n return `${r.platform}:${r.channelId}:${r.threadId}`\n}\n\nexport function useHeartbeatList() {\n return useQuery<HeartbeatListResponse>({\n queryKey: hbKeys.list,\n queryFn: () => client.get<HeartbeatListResponse>('/api/heartbeat/bindings'),\n refetchInterval: 10_000,\n refetchIntervalInBackground: false,\n })\n}\n\nexport function useHeartbeatToggle() {\n const qc = useQueryClient()\n return useMutation<unknown, Error, { row: HeartbeatRow; op: 'enable' | 'disable' }>({\n mutationFn: ({ row, op }) => client.post(\n `/api/heartbeat/bindings/${encodeURIComponent(bindingKey(row))}/${op}`,\n ),\n onSuccess: () => qc.invalidateQueries({ queryKey: hbKeys.all }),\n })\n}\n\n// ─── Goals ──────────────────────────────────────────────────────\n\nexport interface GoalRow {\n id: number\n platform: string\n channelId: string\n threadId: string\n userId: string\n title: string\n body: string\n status: 'active' | 'paused' | 'completed' | 'cancelled'\n progressLog: Array<{ ts: string; by: string; text: string }>\n progressCount: number\n createdAt: string\n updatedAt: string\n closedAt: string | null\n}\n\nexport interface GoalsListResponse {\n goals: GoalRow[]\n count: number\n scope: 'all-active' | 'thread'\n}\n\nconst goalKeys = {\n all: ['goals'] as const,\n list: ['goals', 'list'] as const,\n}\n\nexport function useGoalsList() {\n return useQuery<GoalsListResponse>({\n queryKey: goalKeys.list,\n queryFn: () => client.get<GoalsListResponse>('/api/goals'),\n refetchInterval: 30_000,\n })\n}\n\nexport function useGoalUpdateStatus() {\n const qc = useQueryClient()\n return useMutation<unknown, Error, { id: number; status: GoalRow['status'] }>({\n mutationFn: ({ id, status }) => client.put(\n `/api/goals/${id}/status`, { body: { status } },\n ),\n onSuccess: () => qc.invalidateQueries({ queryKey: goalKeys.all }),\n })\n}\n\n// ─── Pending asks ───────────────────────────────────────────────\n\nexport interface PendingAskRow {\n reqId: string\n platform: string\n threadId: string\n question: string\n choices: number\n ageMs: number\n}\n\nexport interface AsksListResponse {\n pending: PendingAskRow[]\n count: number\n}\n\nconst askKeys = {\n all: ['asks'] as const,\n list: ['asks', 'list'] as const,\n}\n\nexport function useAsksList() {\n return useQuery<AsksListResponse>({\n queryKey: askKeys.list,\n queryFn: () => client.get<AsksListResponse>('/api/asks/pending'),\n refetchInterval: 5_000, // asks are short-lived; poll faster\n })\n}\n\nexport function useAskCancel() {\n const qc = useQueryClient()\n return useMutation<unknown, Error, string>({\n mutationFn: (reqId) => client.post(`/api/asks/pending/${encodeURIComponent(reqId)}/cancel`),\n onSuccess: () => qc.invalidateQueries({ queryKey: askKeys.all }),\n })\n}\n\n// ─── Plan history (v1.2.133) ────────────────────────────────────\n\nexport type PlanOutcome = 'approved' | 'rejected' | 'edited' | 'expired'\n\nexport interface PlanHistoryRow {\n id: number\n threadKey: string\n planMd: string\n outcome: PlanOutcome\n detail: string | null\n resolvedAt: string\n pendingMs: number | null\n}\n\nexport interface PlansListResponse {\n plans: PlanHistoryRow[]\n total: number\n}\n\nconst planKeys = {\n all: ['plans'] as const,\n list: (threadKey?: string, limit?: number) =>\n ['plans', 'list', threadKey ?? null, limit ?? null] as const,\n}\n\n/** GET /api/plans — admin list of native_exit_plan_mode handshakes\n * with outcome + pending duration + the plan markdown. Filters on\n * thread_key (optional) and limit (clamped 1..500 server-side). */\nexport function usePlansList(opts: { threadKey?: string; limit?: number } = {}) {\n const params = new URLSearchParams()\n if (opts.threadKey) params.set('thread_key', opts.threadKey)\n if (opts.limit != null) params.set('limit', String(opts.limit))\n const qs = params.toString()\n return useQuery<PlansListResponse>({\n queryKey: planKeys.list(opts.threadKey, opts.limit),\n queryFn: () => client.get<PlansListResponse>(`/api/plans${qs ? `?${qs}` : ''}`),\n })\n}\n"],"names":["hbKeys","bindingKey","r","useHeartbeatList","useQuery","client","useHeartbeatToggle","qc","useQueryClient","useMutation","row","op","goalKeys","useGoalsList","useGoalUpdateStatus","id","status","askKeys","useAsksList","useAskCancel","reqId","planKeys","threadKey","limit","usePlansList","opts","params","qs"],"mappings":"iGAoCA,MAAMA,EAAS,CACb,IAAM,CAAC,WAAW,EAClB,KAAM,CAAC,YAAa,MAAM,CAC5B,EAEA,SAASC,EAAWC,EAAsE,CACxF,MAAO,GAAGA,EAAE,QAAQ,IAAIA,EAAE,SAAS,IAAIA,EAAE,QAAQ,EACnD,CAEO,SAASC,GAAmB,CACjC,OAAOC,EAAgC,CACrC,SAAUJ,EAAO,KACjB,QAAS,IAAMK,EAAO,IAA2B,yBAAyB,EAC1E,gBAAiB,IACjB,4BAA6B,EAAA,CAC9B,CACH,CAEO,SAASC,GAAqB,CACnC,MAAMC,EAAKC,EAAA,EACX,OAAOC,EAA6E,CAClF,WAAY,CAAC,CAAE,IAAAC,EAAK,GAAAC,CAAA,IAASN,EAAO,KAClC,2BAA2B,mBAAmBJ,EAAWS,CAAG,CAAC,CAAC,IAAIC,CAAE,EAAA,EAEtE,UAAW,IAAMJ,EAAG,kBAAkB,CAAE,SAAUP,EAAO,IAAK,CAAA,CAC/D,CACH,CA0BA,MAAMY,EAAW,CACf,IAAM,CAAC,OAAO,EACd,KAAM,CAAC,QAAS,MAAM,CACxB,EAEO,SAASC,GAAe,CAC7B,OAAOT,EAA4B,CACjC,SAAUQ,EAAS,KACnB,QAAS,IAAMP,EAAO,IAAuB,YAAY,EACzD,gBAAiB,GAAA,CAClB,CACH,CAEO,SAASS,GAAsB,CACpC,MAAMP,EAAKC,EAAA,EACX,OAAOC,EAAuE,CAC5E,WAAY,CAAC,CAAE,GAAAM,EAAI,OAAAC,CAAA,IAAaX,EAAO,IACrC,cAAcU,CAAE,UAAW,CAAE,KAAM,CAAE,OAAAC,CAAA,CAAO,CAAE,EAEhD,UAAW,IAAMT,EAAG,kBAAkB,CAAE,SAAUK,EAAS,IAAK,CAAA,CACjE,CACH,CAkBA,MAAMK,EAAU,CACd,IAAM,CAAC,MAAM,EACb,KAAM,CAAC,OAAQ,MAAM,CACvB,EAEO,SAASC,GAAc,CAC5B,OAAOd,EAA2B,CAChC,SAAUa,EAAQ,KAClB,QAAS,IAAMZ,EAAO,IAAsB,mBAAmB,EAC/D,gBAAiB,GAAA,CAClB,CACH,CAEO,SAASc,GAAe,CAC7B,MAAMZ,EAAKC,EAAA,EACX,OAAOC,EAAoC,CACzC,WAAaW,GAAUf,EAAO,KAAK,qBAAqB,mBAAmBe,CAAK,CAAC,SAAS,EAC1F,UAAW,IAAMb,EAAG,kBAAkB,CAAE,SAAUU,EAAQ,IAAK,CAAA,CAChE,CACH,CAqBA,MAAMI,EAAW,CACf,IAAM,CAAC,OAAO,EACd,KAAM,CAACC,EAAoBC,IACzB,CAAC,QAAS,OAAQD,GAAa,KAAMC,GAAS,IAAI,CACtD,EAKO,SAASC,EAAaC,EAA+C,GAAI,CAC9E,MAAMC,EAAS,IAAI,gBACfD,EAAK,WAAWC,EAAO,IAAI,aAAcD,EAAK,SAAS,EACvDA,EAAK,OAAS,MAAMC,EAAO,IAAI,QAAS,OAAOD,EAAK,KAAK,CAAC,EAC9D,MAAME,EAAKD,EAAO,SAAA,EAClB,OAAOtB,EAA4B,CACjC,SAAUiB,EAAS,KAAKI,EAAK,UAAWA,EAAK,KAAK,EAClD,QAAS,IAAMpB,EAAO,IAAuB,aAAasB,EAAK,IAAIA,CAAE,GAAK,EAAE,EAAE,CAAA,CAC/E,CACH"}
@@ -1,2 +1,2 @@
1
- import{u as c}from"./useQuery-B25CPtUF.js";import{a as u,b as s,o as t}from"./index-D4Np2s3l.js";const a={all:["llm"],list:["llm","list"]};function r(){return c({queryKey:a.list,queryFn:()=>t.get("/api/llm")})}function m(){const e=u();return s({mutationFn:n=>t.post("/api/llm/backends",{body:n}),onSuccess:()=>e.invalidateQueries({queryKey:a.all})})}function p(){const e=u();return s({mutationFn:n=>t.delete(`/api/llm/backends/${encodeURIComponent(n)}`),onSuccess:()=>e.invalidateQueries({queryKey:a.all})})}function d(){const e=u();return s({mutationFn:n=>t.put("/api/llm/roles",{body:n}),onSuccess:()=>e.invalidateQueries({queryKey:a.all})})}function y(){return s({mutationFn:e=>t.post(`/api/llm/backends/${encodeURIComponent(e)}/ping`)})}const i={all:["mcp"],list:["mcp","list"]};function q(){return c({queryKey:i.list,queryFn:()=>t.get("/api/mcp")})}function v(){const e=u();return s({mutationFn:n=>t.post("/api/mcp/servers",{body:n}),onSuccess:()=>e.invalidateQueries({queryKey:i.all})})}function f(){const e=u();return s({mutationFn:n=>t.delete(`/api/mcp/servers/${encodeURIComponent(n)}`),onSuccess:()=>e.invalidateQueries({queryKey:i.all})})}function K(){const e=u();return s({mutationFn:n=>t.post(`/api/mcp/servers/${encodeURIComponent(n)}/health`),onSuccess:()=>e.invalidateQueries({queryKey:i.all})})}export{p as a,y as b,d as c,m as d,q as e,f,K as g,v as h,r as u};
2
- //# sourceMappingURL=use-llm-admin-BNwZKmJ9.js.map
1
+ import{u as c}from"./useQuery-II-YwTUw.js";import{a as u,b as s,o as t}from"./index-wVLKSZpI.js";const a={all:["llm"],list:["llm","list"]};function r(){return c({queryKey:a.list,queryFn:()=>t.get("/api/llm")})}function m(){const e=u();return s({mutationFn:n=>t.post("/api/llm/backends",{body:n}),onSuccess:()=>e.invalidateQueries({queryKey:a.all})})}function p(){const e=u();return s({mutationFn:n=>t.delete(`/api/llm/backends/${encodeURIComponent(n)}`),onSuccess:()=>e.invalidateQueries({queryKey:a.all})})}function d(){const e=u();return s({mutationFn:n=>t.put("/api/llm/roles",{body:n}),onSuccess:()=>e.invalidateQueries({queryKey:a.all})})}function y(){return s({mutationFn:e=>t.post(`/api/llm/backends/${encodeURIComponent(e)}/ping`)})}const i={all:["mcp"],list:["mcp","list"]};function q(){return c({queryKey:i.list,queryFn:()=>t.get("/api/mcp")})}function v(){const e=u();return s({mutationFn:n=>t.post("/api/mcp/servers",{body:n}),onSuccess:()=>e.invalidateQueries({queryKey:i.all})})}function f(){const e=u();return s({mutationFn:n=>t.delete(`/api/mcp/servers/${encodeURIComponent(n)}`),onSuccess:()=>e.invalidateQueries({queryKey:i.all})})}function K(){const e=u();return s({mutationFn:n=>t.post(`/api/mcp/servers/${encodeURIComponent(n)}/health`),onSuccess:()=>e.invalidateQueries({queryKey:i.all})})}export{p as a,y as b,d as c,m as d,q as e,f,K as g,v as h,r as u};
2
+ //# sourceMappingURL=use-llm-admin-SE-2iSIe.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-llm-admin-BNwZKmJ9.js","sources":["../../src/hooks/use-llm-admin.ts"],"sourcesContent":["/**\n * use-llm-admin / use-mcp-admin — react-query wrappers for the\n * Stage 6 LLM + MCP configuration REST surfaces.\n *\n * Intentionally NOT generated through endpoints.json — the panels are\n * the only consumers, the shapes are small, and a hand-written hook\n * keeps the diff manageable without churning the generated endpoints\n * file. When the panels stabilize we can promote them to endpoints.json\n * for type-checked round-tripping.\n */\n\nimport { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'\nimport { client } from '@/lib/api/client'\n\n// ─── LLM types (mirror the backend wire shapes) ──────────────────\n\nexport interface LlmBackendRow {\n name: string\n provider: 'openai-compat' | 'anthropic'\n baseUrl?: string\n model: string\n secret: { source: 'env' | 'file' | 'none'; envKey: string }\n}\n\nexport interface LlmListResponse {\n backends: LlmBackendRow[]\n roles: Record<string, string>\n}\n\nexport interface LlmAddBody {\n name: string\n provider: 'openai-compat' | 'anthropic'\n baseUrl: string\n model: string\n apiKey?: string\n}\n\nexport interface LlmPingResponse {\n name: string\n ok: boolean\n durationMs?: number\n tokensIn?: number\n tokensOut?: number\n sampleText?: string\n error?: string\n}\n\nconst llmKeys = {\n all: ['llm'] as const,\n list: ['llm', 'list'] as const,\n}\n\nexport function useLlmList() {\n return useQuery<LlmListResponse>({\n queryKey: llmKeys.list,\n queryFn: () => client.get<LlmListResponse>('/api/llm'),\n })\n}\n\nexport function useLlmAddBackend() {\n const qc = useQueryClient()\n return useMutation<{ name: string; secretStored: boolean }, Error, LlmAddBody>({\n mutationFn: (body) => client.post('/api/llm/backends', { body }),\n onSuccess: () => qc.invalidateQueries({ queryKey: llmKeys.all }),\n })\n}\n\nexport function useLlmRemoveBackend() {\n const qc = useQueryClient()\n return useMutation<{ removedRoles: number }, Error, string>({\n mutationFn: (name) => client.delete(`/api/llm/backends/${encodeURIComponent(name)}`),\n onSuccess: () => qc.invalidateQueries({ queryKey: llmKeys.all }),\n })\n}\n\nexport function useLlmPutRoles() {\n const qc = useQueryClient()\n return useMutation<{ roles: Record<string, string> }, Error, Record<string, string | null>>({\n mutationFn: (body) => client.put('/api/llm/roles', { body }),\n onSuccess: () => qc.invalidateQueries({ queryKey: llmKeys.all }),\n })\n}\n\nexport function useLlmSetSecret() {\n const qc = useQueryClient()\n return useMutation<{ name: string; source: 'env' | 'file' | 'none' }, Error, { name: string; apiKey: string }>({\n mutationFn: ({ name, apiKey }) => client.post(\n `/api/llm/secrets/${encodeURIComponent(name)}`, { body: { apiKey } },\n ),\n onSuccess: () => qc.invalidateQueries({ queryKey: llmKeys.all }),\n })\n}\n\nexport function useLlmPing() {\n return useMutation<LlmPingResponse, Error, string>({\n mutationFn: (name) => client.post(`/api/llm/backends/${encodeURIComponent(name)}/ping`),\n })\n}\n\n// ─── MCP types (mirror the backend wire shapes) ──────────────────\n\nexport interface McpServerRow {\n name: string\n command?: string\n args?: string[]\n url?: string\n enabled?: boolean\n}\n\nexport interface McpRuntime {\n servers: Array<{ name: string; connected: boolean; toolCount: number; error?: string }>\n totalTools: number\n}\n\nexport interface McpListResponse {\n servers: McpServerRow[]\n runtime: McpRuntime\n}\n\nexport interface McpAddBody {\n name: string\n command?: string\n args?: string[]\n env?: Record<string, string>\n url?: string\n headers?: Record<string, string>\n enabled?: boolean\n}\n\nexport interface McpHealthResponse {\n name: string\n connected: boolean\n toolCount: number\n lastError?: string\n}\n\nconst mcpKeys = {\n all: ['mcp'] as const,\n list: ['mcp', 'list'] as const,\n}\n\nexport function useMcpList() {\n return useQuery<McpListResponse>({\n queryKey: mcpKeys.list,\n queryFn: () => client.get<McpListResponse>('/api/mcp'),\n })\n}\n\nexport function useMcpAddServer() {\n const qc = useQueryClient()\n return useMutation<{ name: string }, Error, McpAddBody>({\n mutationFn: (body) => client.post('/api/mcp/servers', { body }),\n onSuccess: () => qc.invalidateQueries({ queryKey: mcpKeys.all }),\n })\n}\n\nexport function useMcpRemoveServer() {\n const qc = useQueryClient()\n return useMutation<{ name: string }, Error, string>({\n mutationFn: (name) => client.delete(`/api/mcp/servers/${encodeURIComponent(name)}`),\n onSuccess: () => qc.invalidateQueries({ queryKey: mcpKeys.all }),\n })\n}\n\nexport function useMcpHealth() {\n const qc = useQueryClient()\n return useMutation<McpHealthResponse, Error, string>({\n mutationFn: (name) => client.post(`/api/mcp/servers/${encodeURIComponent(name)}/health`),\n onSuccess: () => qc.invalidateQueries({ queryKey: mcpKeys.all }),\n })\n}\n"],"names":["llmKeys","useLlmList","useQuery","client","useLlmAddBackend","qc","useQueryClient","useMutation","body","useLlmRemoveBackend","name","useLlmPutRoles","useLlmPing","mcpKeys","useMcpList","useMcpAddServer","useMcpRemoveServer","useMcpHealth"],"mappings":"iGA+CA,MAAMA,EAAU,CACd,IAAM,CAAC,KAAK,EACZ,KAAM,CAAC,MAAO,MAAM,CACtB,EAEO,SAASC,GAAa,CAC3B,OAAOC,EAA0B,CAC/B,SAAUF,EAAQ,KAClB,QAAS,IAAMG,EAAO,IAAqB,UAAU,CAAA,CACtD,CACH,CAEO,SAASC,GAAmB,CACjC,MAAMC,EAAKC,EAAA,EACX,OAAOC,EAAwE,CAC7E,WAAaC,GAASL,EAAO,KAAK,oBAAqB,CAAE,KAAAK,EAAM,EAC/D,UAAW,IAAMH,EAAG,kBAAkB,CAAE,SAAUL,EAAQ,IAAK,CAAA,CAChE,CACH,CAEO,SAASS,GAAsB,CACpC,MAAMJ,EAAKC,EAAA,EACX,OAAOC,EAAqD,CAC1D,WAAaG,GAASP,EAAO,OAAO,qBAAqB,mBAAmBO,CAAI,CAAC,EAAE,EACnF,UAAW,IAAML,EAAG,kBAAkB,CAAE,SAAUL,EAAQ,IAAK,CAAA,CAChE,CACH,CAEO,SAASW,GAAiB,CAC/B,MAAMN,EAAKC,EAAA,EACX,OAAOC,EAAqF,CAC1F,WAAaC,GAASL,EAAO,IAAI,iBAAkB,CAAE,KAAAK,EAAM,EAC3D,UAAW,IAAMH,EAAG,kBAAkB,CAAE,SAAUL,EAAQ,IAAK,CAAA,CAChE,CACH,CAYO,SAASY,GAAa,CAC3B,OAAOL,EAA4C,CACjD,WAAaG,GAASP,EAAO,KAAK,qBAAqB,mBAAmBO,CAAI,CAAC,OAAO,CAAA,CACvF,CACH,CAuCA,MAAMG,EAAU,CACd,IAAM,CAAC,KAAK,EACZ,KAAM,CAAC,MAAO,MAAM,CACtB,EAEO,SAASC,GAAa,CAC3B,OAAOZ,EAA0B,CAC/B,SAAUW,EAAQ,KAClB,QAAS,IAAMV,EAAO,IAAqB,UAAU,CAAA,CACtD,CACH,CAEO,SAASY,GAAkB,CAChC,MAAMV,EAAKC,EAAA,EACX,OAAOC,EAAiD,CACtD,WAAaC,GAASL,EAAO,KAAK,mBAAoB,CAAE,KAAAK,EAAM,EAC9D,UAAW,IAAMH,EAAG,kBAAkB,CAAE,SAAUQ,EAAQ,IAAK,CAAA,CAChE,CACH,CAEO,SAASG,GAAqB,CACnC,MAAMX,EAAKC,EAAA,EACX,OAAOC,EAA6C,CAClD,WAAaG,GAASP,EAAO,OAAO,oBAAoB,mBAAmBO,CAAI,CAAC,EAAE,EAClF,UAAW,IAAML,EAAG,kBAAkB,CAAE,SAAUQ,EAAQ,IAAK,CAAA,CAChE,CACH,CAEO,SAASI,GAAe,CAC7B,MAAMZ,EAAKC,EAAA,EACX,OAAOC,EAA8C,CACnD,WAAaG,GAASP,EAAO,KAAK,oBAAoB,mBAAmBO,CAAI,CAAC,SAAS,EACvF,UAAW,IAAML,EAAG,kBAAkB,CAAE,SAAUQ,EAAQ,IAAK,CAAA,CAChE,CACH"}
1
+ {"version":3,"file":"use-llm-admin-SE-2iSIe.js","sources":["../../src/hooks/use-llm-admin.ts"],"sourcesContent":["/**\n * use-llm-admin / use-mcp-admin — react-query wrappers for the\n * Stage 6 LLM + MCP configuration REST surfaces.\n *\n * Intentionally NOT generated through endpoints.json — the panels are\n * the only consumers, the shapes are small, and a hand-written hook\n * keeps the diff manageable without churning the generated endpoints\n * file. When the panels stabilize we can promote them to endpoints.json\n * for type-checked round-tripping.\n */\n\nimport { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'\nimport { client } from '@/lib/api/client'\n\n// ─── LLM types (mirror the backend wire shapes) ──────────────────\n\nexport interface LlmBackendRow {\n name: string\n provider: 'openai-compat' | 'anthropic'\n baseUrl?: string\n model: string\n secret: { source: 'env' | 'file' | 'none'; envKey: string }\n}\n\nexport interface LlmListResponse {\n backends: LlmBackendRow[]\n roles: Record<string, string>\n}\n\nexport interface LlmAddBody {\n name: string\n provider: 'openai-compat' | 'anthropic'\n baseUrl: string\n model: string\n apiKey?: string\n}\n\nexport interface LlmPingResponse {\n name: string\n ok: boolean\n durationMs?: number\n tokensIn?: number\n tokensOut?: number\n sampleText?: string\n error?: string\n}\n\nconst llmKeys = {\n all: ['llm'] as const,\n list: ['llm', 'list'] as const,\n}\n\nexport function useLlmList() {\n return useQuery<LlmListResponse>({\n queryKey: llmKeys.list,\n queryFn: () => client.get<LlmListResponse>('/api/llm'),\n })\n}\n\nexport function useLlmAddBackend() {\n const qc = useQueryClient()\n return useMutation<{ name: string; secretStored: boolean }, Error, LlmAddBody>({\n mutationFn: (body) => client.post('/api/llm/backends', { body }),\n onSuccess: () => qc.invalidateQueries({ queryKey: llmKeys.all }),\n })\n}\n\nexport function useLlmRemoveBackend() {\n const qc = useQueryClient()\n return useMutation<{ removedRoles: number }, Error, string>({\n mutationFn: (name) => client.delete(`/api/llm/backends/${encodeURIComponent(name)}`),\n onSuccess: () => qc.invalidateQueries({ queryKey: llmKeys.all }),\n })\n}\n\nexport function useLlmPutRoles() {\n const qc = useQueryClient()\n return useMutation<{ roles: Record<string, string> }, Error, Record<string, string | null>>({\n mutationFn: (body) => client.put('/api/llm/roles', { body }),\n onSuccess: () => qc.invalidateQueries({ queryKey: llmKeys.all }),\n })\n}\n\nexport function useLlmSetSecret() {\n const qc = useQueryClient()\n return useMutation<{ name: string; source: 'env' | 'file' | 'none' }, Error, { name: string; apiKey: string }>({\n mutationFn: ({ name, apiKey }) => client.post(\n `/api/llm/secrets/${encodeURIComponent(name)}`, { body: { apiKey } },\n ),\n onSuccess: () => qc.invalidateQueries({ queryKey: llmKeys.all }),\n })\n}\n\nexport function useLlmPing() {\n return useMutation<LlmPingResponse, Error, string>({\n mutationFn: (name) => client.post(`/api/llm/backends/${encodeURIComponent(name)}/ping`),\n })\n}\n\n// ─── MCP types (mirror the backend wire shapes) ──────────────────\n\nexport interface McpServerRow {\n name: string\n command?: string\n args?: string[]\n url?: string\n enabled?: boolean\n}\n\nexport interface McpRuntime {\n servers: Array<{ name: string; connected: boolean; toolCount: number; error?: string }>\n totalTools: number\n}\n\nexport interface McpListResponse {\n servers: McpServerRow[]\n runtime: McpRuntime\n}\n\nexport interface McpAddBody {\n name: string\n command?: string\n args?: string[]\n env?: Record<string, string>\n url?: string\n headers?: Record<string, string>\n enabled?: boolean\n}\n\nexport interface McpHealthResponse {\n name: string\n connected: boolean\n toolCount: number\n lastError?: string\n}\n\nconst mcpKeys = {\n all: ['mcp'] as const,\n list: ['mcp', 'list'] as const,\n}\n\nexport function useMcpList() {\n return useQuery<McpListResponse>({\n queryKey: mcpKeys.list,\n queryFn: () => client.get<McpListResponse>('/api/mcp'),\n })\n}\n\nexport function useMcpAddServer() {\n const qc = useQueryClient()\n return useMutation<{ name: string }, Error, McpAddBody>({\n mutationFn: (body) => client.post('/api/mcp/servers', { body }),\n onSuccess: () => qc.invalidateQueries({ queryKey: mcpKeys.all }),\n })\n}\n\nexport function useMcpRemoveServer() {\n const qc = useQueryClient()\n return useMutation<{ name: string }, Error, string>({\n mutationFn: (name) => client.delete(`/api/mcp/servers/${encodeURIComponent(name)}`),\n onSuccess: () => qc.invalidateQueries({ queryKey: mcpKeys.all }),\n })\n}\n\nexport function useMcpHealth() {\n const qc = useQueryClient()\n return useMutation<McpHealthResponse, Error, string>({\n mutationFn: (name) => client.post(`/api/mcp/servers/${encodeURIComponent(name)}/health`),\n onSuccess: () => qc.invalidateQueries({ queryKey: mcpKeys.all }),\n })\n}\n"],"names":["llmKeys","useLlmList","useQuery","client","useLlmAddBackend","qc","useQueryClient","useMutation","body","useLlmRemoveBackend","name","useLlmPutRoles","useLlmPing","mcpKeys","useMcpList","useMcpAddServer","useMcpRemoveServer","useMcpHealth"],"mappings":"iGA+CA,MAAMA,EAAU,CACd,IAAM,CAAC,KAAK,EACZ,KAAM,CAAC,MAAO,MAAM,CACtB,EAEO,SAASC,GAAa,CAC3B,OAAOC,EAA0B,CAC/B,SAAUF,EAAQ,KAClB,QAAS,IAAMG,EAAO,IAAqB,UAAU,CAAA,CACtD,CACH,CAEO,SAASC,GAAmB,CACjC,MAAMC,EAAKC,EAAA,EACX,OAAOC,EAAwE,CAC7E,WAAaC,GAASL,EAAO,KAAK,oBAAqB,CAAE,KAAAK,EAAM,EAC/D,UAAW,IAAMH,EAAG,kBAAkB,CAAE,SAAUL,EAAQ,IAAK,CAAA,CAChE,CACH,CAEO,SAASS,GAAsB,CACpC,MAAMJ,EAAKC,EAAA,EACX,OAAOC,EAAqD,CAC1D,WAAaG,GAASP,EAAO,OAAO,qBAAqB,mBAAmBO,CAAI,CAAC,EAAE,EACnF,UAAW,IAAML,EAAG,kBAAkB,CAAE,SAAUL,EAAQ,IAAK,CAAA,CAChE,CACH,CAEO,SAASW,GAAiB,CAC/B,MAAMN,EAAKC,EAAA,EACX,OAAOC,EAAqF,CAC1F,WAAaC,GAASL,EAAO,IAAI,iBAAkB,CAAE,KAAAK,EAAM,EAC3D,UAAW,IAAMH,EAAG,kBAAkB,CAAE,SAAUL,EAAQ,IAAK,CAAA,CAChE,CACH,CAYO,SAASY,GAAa,CAC3B,OAAOL,EAA4C,CACjD,WAAaG,GAASP,EAAO,KAAK,qBAAqB,mBAAmBO,CAAI,CAAC,OAAO,CAAA,CACvF,CACH,CAuCA,MAAMG,EAAU,CACd,IAAM,CAAC,KAAK,EACZ,KAAM,CAAC,MAAO,MAAM,CACtB,EAEO,SAASC,GAAa,CAC3B,OAAOZ,EAA0B,CAC/B,SAAUW,EAAQ,KAClB,QAAS,IAAMV,EAAO,IAAqB,UAAU,CAAA,CACtD,CACH,CAEO,SAASY,GAAkB,CAChC,MAAMV,EAAKC,EAAA,EACX,OAAOC,EAAiD,CACtD,WAAaC,GAASL,EAAO,KAAK,mBAAoB,CAAE,KAAAK,EAAM,EAC9D,UAAW,IAAMH,EAAG,kBAAkB,CAAE,SAAUQ,EAAQ,IAAK,CAAA,CAChE,CACH,CAEO,SAASG,GAAqB,CACnC,MAAMX,EAAKC,EAAA,EACX,OAAOC,EAA6C,CAClD,WAAaG,GAASP,EAAO,OAAO,oBAAoB,mBAAmBO,CAAI,CAAC,EAAE,EAClF,UAAW,IAAML,EAAG,kBAAkB,CAAE,SAAUQ,EAAQ,IAAK,CAAA,CAChE,CACH,CAEO,SAASI,GAAe,CAC7B,MAAMZ,EAAKC,EAAA,EACX,OAAOC,EAA8C,CACnD,WAAaG,GAASP,EAAO,KAAK,oBAAoB,mBAAmBO,CAAI,CAAC,SAAS,EACvF,UAAW,IAAML,EAAG,kBAAkB,CAAE,SAAUQ,EAAQ,IAAK,CAAA,CAChE,CACH"}
@@ -1,2 +1,2 @@
1
- import{u}from"./useQuery-B25CPtUF.js";import{a as t,b as o,d as n,Z as i}from"./index-D4Np2s3l.js";const r={all:["memory"],users:["memory","users"],facts:e=>["memory","facts",e],persona:e=>["memory","persona",e],consolidate:["memory","consolidate"]};function y(){return u({queryKey:r.users,queryFn:()=>n.listMemoryUsers()})}function d(e,s={}){return u({queryKey:r.facts(e),queryFn:()=>n.listMemoryFacts(e),enabled:s.enabled!==!1&&!!e.user_key})}function m(){const e=t();return o({mutationFn:({id:s,user_key:a})=>n.deleteMemoryFactById(s,{user_key:a}),onSuccess:()=>e.invalidateQueries({queryKey:r.all})})}function f(){const e=t();return o({mutationFn:({user_key:s,body:a})=>n.deleteMemoryFacts({user_key:s},a),onSuccess:()=>e.invalidateQueries({queryKey:r.all})})}function q(e,s={}){return u({queryKey:r.persona(e),queryFn:async()=>{try{return await n.getMemoryPersona({user_key:e})}catch(a){if(a instanceof i&&a.status===404)return null;throw a}},enabled:s.enabled!==!1&&!!e})}function F(){const e=t();return o({mutationFn:({user_key:s,body:a})=>n.updateMemoryPersona({user_key:s},a),onSuccess:(s,a)=>{e.invalidateQueries({queryKey:r.persona(a.user_key)}),e.invalidateQueries({queryKey:r.users})}})}function K(){const e=t();return o({mutationFn:s=>n.deleteMemoryPersona({user_key:s}),onSuccess:(s,a)=>{e.invalidateQueries({queryKey:r.persona(a)}),e.invalidateQueries({queryKey:r.users})}})}function M(e={}){return u({queryKey:r.consolidate,queryFn:()=>n.getMemoryConsolidateStatus(),refetchInterval:3e3,refetchIntervalInBackground:!1,enabled:e.enabled!==!1})}function p(){const e=t();return o({mutationFn:()=>n.consolidateMemory(),onSuccess:()=>{e.invalidateQueries({queryKey:r.consolidate}),e.invalidateQueries({queryKey:r.all})}})}export{d as a,m as b,f as c,q as d,p as e,M as f,F as g,K as h,r as m,y as u};
2
- //# sourceMappingURL=use-memory-D4ViUoXw.js.map
1
+ import{u}from"./useQuery-II-YwTUw.js";import{a as t,b as o,d as n,Z as i}from"./index-wVLKSZpI.js";const r={all:["memory"],users:["memory","users"],facts:e=>["memory","facts",e],persona:e=>["memory","persona",e],consolidate:["memory","consolidate"]};function y(){return u({queryKey:r.users,queryFn:()=>n.listMemoryUsers()})}function d(e,s={}){return u({queryKey:r.facts(e),queryFn:()=>n.listMemoryFacts(e),enabled:s.enabled!==!1&&!!e.user_key})}function m(){const e=t();return o({mutationFn:({id:s,user_key:a})=>n.deleteMemoryFactById(s,{user_key:a}),onSuccess:()=>e.invalidateQueries({queryKey:r.all})})}function f(){const e=t();return o({mutationFn:({user_key:s,body:a})=>n.deleteMemoryFacts({user_key:s},a),onSuccess:()=>e.invalidateQueries({queryKey:r.all})})}function q(e,s={}){return u({queryKey:r.persona(e),queryFn:async()=>{try{return await n.getMemoryPersona({user_key:e})}catch(a){if(a instanceof i&&a.status===404)return null;throw a}},enabled:s.enabled!==!1&&!!e})}function F(){const e=t();return o({mutationFn:({user_key:s,body:a})=>n.updateMemoryPersona({user_key:s},a),onSuccess:(s,a)=>{e.invalidateQueries({queryKey:r.persona(a.user_key)}),e.invalidateQueries({queryKey:r.users})}})}function K(){const e=t();return o({mutationFn:s=>n.deleteMemoryPersona({user_key:s}),onSuccess:(s,a)=>{e.invalidateQueries({queryKey:r.persona(a)}),e.invalidateQueries({queryKey:r.users})}})}function M(e={}){return u({queryKey:r.consolidate,queryFn:()=>n.getMemoryConsolidateStatus(),refetchInterval:3e3,refetchIntervalInBackground:!1,enabled:e.enabled!==!1})}function p(){const e=t();return o({mutationFn:()=>n.consolidateMemory(),onSuccess:()=>{e.invalidateQueries({queryKey:r.consolidate}),e.invalidateQueries({queryKey:r.all})}})}export{d as a,m as b,f as c,q as d,p as e,M as f,F as g,K as h,r as m,y as u};
2
+ //# sourceMappingURL=use-memory-tCgpqYla.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-memory-D4ViUoXw.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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"}
1
+ {"version":3,"file":"use-memory-tCgpqYla.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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"}
@@ -1,2 +1,2 @@
1
- import{u as a}from"./useQuery-B25CPtUF.js";import{d as i}from"./index-D4Np2s3l.js";const n={all:["observability"],health:e=>["observability","health",e],topN:(e,t,r,u)=>["observability","topn",e,t,r,u],audit:e=>["observability","audit",e]};function o(e){return a({queryKey:n.health(e),queryFn:()=>i.getHealthSummary({days:e}),refetchInterval:3e4,refetchIntervalInBackground:!1})}function s(e){const t=e.days??7,r=e.limit??10;return a({queryKey:n.topN(e.dim,e.by,t,r),queryFn:()=>i.getHealthTopN({dim:e.dim,by:e.by,days:t,limit:r}),refetchInterval:6e4,refetchIntervalInBackground:!1})}function c(e){return a({queryKey:n.audit(e),queryFn:()=>i.getAudit(e),refetchInterval:1e4,refetchIntervalInBackground:!1})}export{s as a,c as b,o as u};
2
- //# sourceMappingURL=use-observability-DJYRVPKp.js.map
1
+ import{u as a}from"./useQuery-II-YwTUw.js";import{d as i}from"./index-wVLKSZpI.js";const n={all:["observability"],health:e=>["observability","health",e],topN:(e,t,r,u)=>["observability","topn",e,t,r,u],audit:e=>["observability","audit",e]};function o(e){return a({queryKey:n.health(e),queryFn:()=>i.getHealthSummary({days:e}),refetchInterval:3e4,refetchIntervalInBackground:!1})}function s(e){const t=e.days??7,r=e.limit??10;return a({queryKey:n.topN(e.dim,e.by,t,r),queryFn:()=>i.getHealthTopN({dim:e.dim,by:e.by,days:t,limit:r}),refetchInterval:6e4,refetchIntervalInBackground:!1})}function c(e){return a({queryKey:n.audit(e),queryFn:()=>i.getAudit(e),refetchInterval:1e4,refetchIntervalInBackground:!1})}export{s as a,c as b,o as u};
2
+ //# sourceMappingURL=use-observability-CMUSiy5z.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-observability-DJYRVPKp.js","sources":["../../src/hooks/use-observability.ts"],"sourcesContent":["/**\n * useObservability — react-query wrappers for the operational\n * dashboard.\n *\n * useHealthSummary({ days }) — totals + byDay roll-up\n * useTopN({ dim, by, days, limit }) — leaderboard by dimension\n * useAudit(query) — recent invocations\n *\n * All three are read-only; observability stays a passive view.\n * Refetch intervals are tuned to match operator expectations:\n * health summary every 30s (background sweep latency); audit\n * every 10s (fresher); TopN every 60s (the leaderboard moves\n * slowly enough).\n */\n\nimport { useQuery } from '@tanstack/react-query'\nimport { api } from '@/lib/api/endpoints'\nimport type {\n AuditResponse,\n HealthSummary,\n ListAuditQuery,\n TopNDim,\n TopNMetric,\n TopNResponse,\n} from '@/types/api'\n\nexport const observabilityKeys = {\n all: ['observability'] as const,\n health: (days: number) => ['observability', 'health', days] as const,\n topN: (dim: TopNDim, by: TopNMetric, days: number, limit: number) =>\n ['observability', 'topn', dim, by, days, limit] as const,\n audit: (q: ListAuditQuery) => ['observability', 'audit', q] as const,\n}\n\nexport function useHealthSummary(days: number) {\n return useQuery<HealthSummary>({\n queryKey: observabilityKeys.health(days),\n queryFn: () => api.getHealthSummary({ days }),\n refetchInterval: 30_000,\n refetchIntervalInBackground: false,\n })\n}\n\nexport function useTopN(opts: { dim: TopNDim; by: TopNMetric; days?: number; limit?: number }) {\n const days = opts.days ?? 7\n const limit = opts.limit ?? 10\n return useQuery<TopNResponse>({\n queryKey: observabilityKeys.topN(opts.dim, opts.by, days, limit),\n queryFn: () => api.getHealthTopN({ dim: opts.dim, by: opts.by, days, limit }),\n refetchInterval: 60_000,\n refetchIntervalInBackground: false,\n })\n}\n\nexport function useAudit(query: ListAuditQuery) {\n return useQuery<AuditResponse>({\n queryKey: observabilityKeys.audit(query),\n queryFn: () => api.getAudit(query),\n refetchInterval: 10_000,\n refetchIntervalInBackground: false,\n })\n}\n"],"names":["observabilityKeys","days","dim","by","limit","q","useHealthSummary","useQuery","api","useTopN","opts","useAudit","query"],"mappings":"mFA0BO,MAAMA,EAAoB,CAC/B,IAAS,CAAC,eAAe,EACzB,OAAUC,GAAiB,CAAC,gBAAiB,SAAUA,CAAI,EAC3D,KAAS,CAACC,EAAcC,EAAgBF,EAAcG,IACpD,CAAC,gBAAiB,OAAQF,EAAKC,EAAIF,EAAMG,CAAK,EAChD,MAAUC,GAAsB,CAAC,gBAAiB,QAASA,CAAC,CAC9D,EAEO,SAASC,EAAiBL,EAAc,CAC7C,OAAOM,EAAwB,CAC7B,SAAUP,EAAkB,OAAOC,CAAI,EACvC,QAAS,IAAMO,EAAI,iBAAiB,CAAE,KAAAP,EAAM,EAC5C,gBAAiB,IACjB,4BAA6B,EAAA,CAC9B,CACH,CAEO,SAASQ,EAAQC,EAAuE,CAC7F,MAAMT,EAAOS,EAAK,MAAQ,EACpBN,EAAQM,EAAK,OAAS,GAC5B,OAAOH,EAAuB,CAC5B,SAAUP,EAAkB,KAAKU,EAAK,IAAKA,EAAK,GAAIT,EAAMG,CAAK,EAC/D,QAAS,IAAMI,EAAI,cAAc,CAAE,IAAKE,EAAK,IAAK,GAAIA,EAAK,GAAI,KAAAT,EAAM,MAAAG,EAAO,EAC5E,gBAAiB,IACjB,4BAA6B,EAAA,CAC9B,CACH,CAEO,SAASO,EAASC,EAAuB,CAC9C,OAAOL,EAAwB,CAC7B,SAAUP,EAAkB,MAAMY,CAAK,EACvC,QAAS,IAAMJ,EAAI,SAASI,CAAK,EACjC,gBAAiB,IACjB,4BAA6B,EAAA,CAC9B,CACH"}
1
+ {"version":3,"file":"use-observability-CMUSiy5z.js","sources":["../../src/hooks/use-observability.ts"],"sourcesContent":["/**\n * useObservability — react-query wrappers for the operational\n * dashboard.\n *\n * useHealthSummary({ days }) — totals + byDay roll-up\n * useTopN({ dim, by, days, limit }) — leaderboard by dimension\n * useAudit(query) — recent invocations\n *\n * All three are read-only; observability stays a passive view.\n * Refetch intervals are tuned to match operator expectations:\n * health summary every 30s (background sweep latency); audit\n * every 10s (fresher); TopN every 60s (the leaderboard moves\n * slowly enough).\n */\n\nimport { useQuery } from '@tanstack/react-query'\nimport { api } from '@/lib/api/endpoints'\nimport type {\n AuditResponse,\n HealthSummary,\n ListAuditQuery,\n TopNDim,\n TopNMetric,\n TopNResponse,\n} from '@/types/api'\n\nexport const observabilityKeys = {\n all: ['observability'] as const,\n health: (days: number) => ['observability', 'health', days] as const,\n topN: (dim: TopNDim, by: TopNMetric, days: number, limit: number) =>\n ['observability', 'topn', dim, by, days, limit] as const,\n audit: (q: ListAuditQuery) => ['observability', 'audit', q] as const,\n}\n\nexport function useHealthSummary(days: number) {\n return useQuery<HealthSummary>({\n queryKey: observabilityKeys.health(days),\n queryFn: () => api.getHealthSummary({ days }),\n refetchInterval: 30_000,\n refetchIntervalInBackground: false,\n })\n}\n\nexport function useTopN(opts: { dim: TopNDim; by: TopNMetric; days?: number; limit?: number }) {\n const days = opts.days ?? 7\n const limit = opts.limit ?? 10\n return useQuery<TopNResponse>({\n queryKey: observabilityKeys.topN(opts.dim, opts.by, days, limit),\n queryFn: () => api.getHealthTopN({ dim: opts.dim, by: opts.by, days, limit }),\n refetchInterval: 60_000,\n refetchIntervalInBackground: false,\n })\n}\n\nexport function useAudit(query: ListAuditQuery) {\n return useQuery<AuditResponse>({\n queryKey: observabilityKeys.audit(query),\n queryFn: () => api.getAudit(query),\n refetchInterval: 10_000,\n refetchIntervalInBackground: false,\n })\n}\n"],"names":["observabilityKeys","days","dim","by","limit","q","useHealthSummary","useQuery","api","useTopN","opts","useAudit","query"],"mappings":"mFA0BO,MAAMA,EAAoB,CAC/B,IAAS,CAAC,eAAe,EACzB,OAAUC,GAAiB,CAAC,gBAAiB,SAAUA,CAAI,EAC3D,KAAS,CAACC,EAAcC,EAAgBF,EAAcG,IACpD,CAAC,gBAAiB,OAAQF,EAAKC,EAAIF,EAAMG,CAAK,EAChD,MAAUC,GAAsB,CAAC,gBAAiB,QAASA,CAAC,CAC9D,EAEO,SAASC,EAAiBL,EAAc,CAC7C,OAAOM,EAAwB,CAC7B,SAAUP,EAAkB,OAAOC,CAAI,EACvC,QAAS,IAAMO,EAAI,iBAAiB,CAAE,KAAAP,EAAM,EAC5C,gBAAiB,IACjB,4BAA6B,EAAA,CAC9B,CACH,CAEO,SAASQ,EAAQC,EAAuE,CAC7F,MAAMT,EAAOS,EAAK,MAAQ,EACpBN,EAAQM,EAAK,OAAS,GAC5B,OAAOH,EAAuB,CAC5B,SAAUP,EAAkB,KAAKU,EAAK,IAAKA,EAAK,GAAIT,EAAMG,CAAK,EAC/D,QAAS,IAAMI,EAAI,cAAc,CAAE,IAAKE,EAAK,IAAK,GAAIA,EAAK,GAAI,KAAAT,EAAM,MAAAG,EAAO,EAC5E,gBAAiB,IACjB,4BAA6B,EAAA,CAC9B,CACH,CAEO,SAASO,EAASC,EAAuB,CAC9C,OAAOL,EAAwB,CAC7B,SAAUP,EAAkB,MAAMY,CAAK,EACvC,QAAS,IAAMJ,EAAI,SAASI,CAAK,EACjC,gBAAiB,IACjB,4BAA6B,EAAA,CAC9B,CACH"}
@@ -1,2 +1,2 @@
1
- import{u}from"./useQuery-B25CPtUF.js";import{a as i,b as s,d as n}from"./index-D4Np2s3l.js";const r={all:["settings"],env:e=>["settings","env",e],service:["settings","service"],admins:["settings","admins"],config:["settings","config"],workspaces:["settings","workspaces"]};function v(e={}){const t=!!e.reveal;return u({queryKey:r.env(t),queryFn:()=>n.getEnv({reveal:t})})}function l(){const e=i();return s({mutationFn:t=>n.updateEnv(t),onSuccess:()=>e.invalidateQueries({queryKey:["settings","env"]})})}function f(){return u({queryKey:r.service,queryFn:()=>n.getServiceStatus(),refetchInterval:5e3,refetchIntervalInBackground:!1})}function a(e,t){return s({mutationFn:e,onSuccess:()=>t.invalidateQueries({queryKey:r.service})})}function y(){const e=i();return a(()=>n.startService(),e)}function d(){const e=i();return a(()=>n.stopService(),e)}function m(){const e=i();return a(()=>n.restartService(),e)}function q(){return u({queryKey:r.admins,queryFn:()=>n.listAdminAllowlist()})}function g(){const e=i();return s({mutationFn:t=>n.addAdminAllowlist(t),onSuccess:()=>e.invalidateQueries({queryKey:r.admins})})}function p(){const e=i();return s({mutationFn:t=>n.removeAdminAllowlist(t),onSuccess:()=>e.invalidateQueries({queryKey:r.admins})})}function S(){return u({queryKey:r.config,queryFn:()=>n.getConfig()})}function F(){const e=i();return s({mutationFn:t=>n.updateConfig(t),onSuccess:()=>e.invalidateQueries({queryKey:r.config})})}function A(){return u({queryKey:r.workspaces,queryFn:()=>n.listWorkspacesFull()})}function h(){const e=i();return s({mutationFn:t=>n.upsertWorkspace(t),onSuccess:()=>e.invalidateQueries({queryKey:r.workspaces})})}function K(){return s({mutationFn:()=>n.startWechatQr()})}function w(e){return u({queryKey:["settings","wechat-qr",e??""],queryFn:()=>n.getWechatQrStatus({token:e}),enabled:!!e,refetchInterval:2e3,refetchIntervalInBackground:!1})}function Q(){return s({mutationFn:e=>n.testAcpAgent(e)})}function k(){return s({mutationFn:e=>n.discoverAcpAgents(e)})}function W(){return s({mutationFn:()=>n.testEmail()})}function E(){return u({queryKey:["settings","search","providers"],queryFn:()=>n.getSearchProviders()})}function I(){return s({mutationFn:e=>n.testSearchProvider(e)})}function C(){return u({queryKey:["settings","viewer-tunnel"],queryFn:()=>n.getViewerTunnel()})}export{l as a,S as b,F as c,K as d,w as e,W as f,C as g,Q as h,k as i,f as j,y as k,d as l,m,q as n,g as o,p,A as q,h as r,E as s,I as t,v as u};
2
- //# sourceMappingURL=use-settings-XXVWFAv6.js.map
1
+ import{u}from"./useQuery-II-YwTUw.js";import{a as i,b as s,d as n}from"./index-wVLKSZpI.js";const r={all:["settings"],env:e=>["settings","env",e],service:["settings","service"],admins:["settings","admins"],config:["settings","config"],workspaces:["settings","workspaces"]};function v(e={}){const t=!!e.reveal;return u({queryKey:r.env(t),queryFn:()=>n.getEnv({reveal:t})})}function l(){const e=i();return s({mutationFn:t=>n.updateEnv(t),onSuccess:()=>e.invalidateQueries({queryKey:["settings","env"]})})}function f(){return u({queryKey:r.service,queryFn:()=>n.getServiceStatus(),refetchInterval:5e3,refetchIntervalInBackground:!1})}function a(e,t){return s({mutationFn:e,onSuccess:()=>t.invalidateQueries({queryKey:r.service})})}function y(){const e=i();return a(()=>n.startService(),e)}function d(){const e=i();return a(()=>n.stopService(),e)}function m(){const e=i();return a(()=>n.restartService(),e)}function q(){return u({queryKey:r.admins,queryFn:()=>n.listAdminAllowlist()})}function g(){const e=i();return s({mutationFn:t=>n.addAdminAllowlist(t),onSuccess:()=>e.invalidateQueries({queryKey:r.admins})})}function p(){const e=i();return s({mutationFn:t=>n.removeAdminAllowlist(t),onSuccess:()=>e.invalidateQueries({queryKey:r.admins})})}function S(){return u({queryKey:r.config,queryFn:()=>n.getConfig()})}function F(){const e=i();return s({mutationFn:t=>n.updateConfig(t),onSuccess:()=>e.invalidateQueries({queryKey:r.config})})}function A(){return u({queryKey:r.workspaces,queryFn:()=>n.listWorkspacesFull()})}function h(){const e=i();return s({mutationFn:t=>n.upsertWorkspace(t),onSuccess:()=>e.invalidateQueries({queryKey:r.workspaces})})}function K(){return s({mutationFn:()=>n.startWechatQr()})}function w(e){return u({queryKey:["settings","wechat-qr",e??""],queryFn:()=>n.getWechatQrStatus({token:e}),enabled:!!e,refetchInterval:2e3,refetchIntervalInBackground:!1})}function Q(){return s({mutationFn:e=>n.testAcpAgent(e)})}function k(){return s({mutationFn:e=>n.discoverAcpAgents(e)})}function W(){return s({mutationFn:()=>n.testEmail()})}function E(){return u({queryKey:["settings","search","providers"],queryFn:()=>n.getSearchProviders()})}function I(){return s({mutationFn:e=>n.testSearchProvider(e)})}function C(){return u({queryKey:["settings","viewer-tunnel"],queryFn:()=>n.getViewerTunnel()})}export{l as a,S as b,F as c,K as d,w as e,W as f,C as g,Q as h,k as i,f as j,y as k,d as l,m,q as n,g as o,p,A as q,h as r,E as s,I as t,v as u};
2
+ //# sourceMappingURL=use-settings-BUM0BmtA.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-settings-XXVWFAv6.js","sources":["../../src/hooks/use-settings.ts"],"sourcesContent":["/**\n * useSettings — react-query wrappers for the env editor + service\n * control surfaces.\n *\n * useEnv({ reveal }) — env file values (masked when\n * reveal is false)\n * useUpdateEnv() — bulk update\n * useServiceStatus() — pid / mode / uptime\n * useStart/Stop/Restart() — service lifecycle\n *\n * Service status polls every 5s while the page is foreground so\n * the operator sees restart progress live.\n */\n\nimport { useQueryClient, useQuery, useMutation } from '@tanstack/react-query'\nimport { api } from '@/lib/api/endpoints'\nimport type {\n ACPDiscoverBody,\n ACPDiscoverResponse,\n ACPTestBody,\n ACPTestResponse,\n EmailTestResponse,\n ViewerTunnelStatusResponse,\n AddAdminBody,\n AdminAllowlistResponse,\n AdminMutationResponse,\n AppConfig,\n EnvResponse,\n RemoveAdminBody,\n SearchProvidersResponse,\n SearchTestBody,\n SearchTestResponse,\n ServiceActionResponse,\n ServiceStatus,\n UpdateEnvBody,\n WechatQrStartResponse,\n WechatQrStatusResponse,\n WorkspaceConfig,\n} from '@/types/api'\n\nexport const settingsKeys = {\n all: ['settings'] as const,\n env: (reveal: boolean) => ['settings', 'env', reveal] as const,\n service: ['settings', 'service'] as const,\n admins: ['settings', 'admins'] as const,\n config: ['settings', 'config'] as const,\n workspaces: ['settings', 'workspaces'] as const,\n}\n\nexport function useEnv(opts: { reveal?: boolean } = {}) {\n const reveal = !!opts.reveal\n return useQuery<EnvResponse>({\n queryKey: settingsKeys.env(reveal),\n queryFn: () => api.getEnv({ reveal }),\n })\n}\n\nexport function useUpdateEnv() {\n const qc = useQueryClient()\n return useMutation<EnvResponse, Error, UpdateEnvBody>({\n mutationFn: (body) => api.updateEnv(body),\n onSuccess: () => qc.invalidateQueries({ queryKey: ['settings', 'env'] }),\n })\n}\n\nexport function useServiceStatus() {\n return useQuery<ServiceStatus>({\n queryKey: settingsKeys.service,\n queryFn: () => api.getServiceStatus(),\n refetchInterval: 5000,\n refetchIntervalInBackground: false,\n })\n}\n\nfunction makeServiceMutation(\n fn: () => Promise<ServiceActionResponse>,\n qc: ReturnType<typeof useQueryClient>,\n) {\n return useMutation<ServiceActionResponse, Error, void>({\n mutationFn: fn,\n onSuccess: () => qc.invalidateQueries({ queryKey: settingsKeys.service }),\n })\n}\n\nexport function useStartService() {\n const qc = useQueryClient()\n return makeServiceMutation(() => api.startService(), qc)\n}\n\nexport function useStopService() {\n const qc = useQueryClient()\n return makeServiceMutation(() => api.stopService(), qc)\n}\n\nexport function useRestartService() {\n const qc = useQueryClient()\n return makeServiceMutation(() => api.restartService(), qc)\n}\n\n/* ─────────────── Admin allowlist ─────────────── */\n\nexport function useAdminAllowlist() {\n return useQuery<AdminAllowlistResponse>({\n queryKey: settingsKeys.admins,\n queryFn: () => api.listAdminAllowlist(),\n })\n}\n\nexport function useAddAdmin() {\n const qc = useQueryClient()\n return useMutation<AdminMutationResponse, Error, AddAdminBody>({\n mutationFn: (body) => api.addAdminAllowlist(body),\n onSuccess: () => qc.invalidateQueries({ queryKey: settingsKeys.admins }),\n })\n}\n\nexport function useRemoveAdmin() {\n const qc = useQueryClient()\n return useMutation<AdminMutationResponse, Error, RemoveAdminBody>({\n mutationFn: (body) => api.removeAdminAllowlist(body),\n onSuccess: () => qc.invalidateQueries({ queryKey: settingsKeys.admins }),\n })\n}\n\n/* ─────────────── App config ─────────────── */\n\nexport function useConfig() {\n return useQuery<AppConfig>({\n queryKey: settingsKeys.config,\n queryFn: () => api.getConfig(),\n })\n}\n\nexport function useUpdateConfig() {\n const qc = useQueryClient()\n return useMutation<AppConfig, Error, Partial<AppConfig>>({\n mutationFn: (body) => api.updateConfig(body),\n onSuccess: () => qc.invalidateQueries({ queryKey: settingsKeys.config }),\n })\n}\n\n/* ─────────────── Workspaces ─────────────── */\n\nexport function useWorkspaces() {\n return useQuery<{ workspaces: WorkspaceConfig[] }>({\n queryKey: settingsKeys.workspaces,\n queryFn: () => api.listWorkspacesFull(),\n })\n}\n\nexport function useUpsertWorkspace() {\n const qc = useQueryClient()\n return useMutation<\n { ok: boolean; workspace: WorkspaceConfig },\n Error,\n WorkspaceConfig\n >({\n mutationFn: (body) => api.upsertWorkspace(body),\n onSuccess: () => qc.invalidateQueries({ queryKey: settingsKeys.workspaces }),\n })\n}\n\n/* ─────────────── WeChat QR ─────────────── */\n\nexport function useStartWechatQr() {\n return useMutation<WechatQrStartResponse, Error, void>({\n mutationFn: () => api.startWechatQr(),\n })\n}\n\n/** Poll the QR status every 2s while the modal is open. Caller\n * passes `token` once it has it from the start mutation; passing\n * null disables the polling. On status='confirmed' the backend\n * persists wechat-ilink → re-fetch config to update the toggle. */\nexport function useWechatQrStatus(token: string | null) {\n return useQuery<WechatQrStatusResponse>({\n queryKey: ['settings', 'wechat-qr', token ?? ''],\n queryFn: () => api.getWechatQrStatus({ token: token as string }),\n enabled: Boolean(token),\n refetchInterval: 2000,\n refetchIntervalInBackground: false,\n })\n}\n\n/** Probe a single ACP endpoint by fetching its manifest. Used by\n * the \"Test\" buttons in /settings/agents to validate an entry\n * before saving it to config. Errors flow back as ApiError. */\nexport function useTestAcp() {\n return useMutation<ACPTestResponse, Error, ACPTestBody>({\n mutationFn: (body) => api.testAcpAgent(body),\n })\n}\n\n/** Probe a `<baseUrl>/.well-known/acp` doc for an agent list. Used\n * by the \"Discover\" form in /settings/agents to bulk-import. The\n * caller still has to PUT /api/config { acpAgents } to persist. */\nexport function useDiscoverAcp() {\n return useMutation<ACPDiscoverResponse, Error, ACPDiscoverBody>({\n mutationFn: (body) => api.discoverAcpAgents(body),\n })\n}\n\n/** Verify SMTP creds in the running env. Doesn't actually send mail —\n * just `nodemailer.verify()`. Returns `{ ok, message }` on success or\n * throws ApiError otherwise (the route catches + toasts the message). */\nexport function useTestEmail() {\n return useMutation<EmailTestResponse, Error, void>({\n mutationFn: () => api.testEmail(),\n })\n}\n\n/** v1.2.126 — registered web_search providers + their current\n * availability + the resolved chain. Used by /settings/search to\n * paint per-provider rows and the chain preview at the top. Polls\n * once on mount; manual refetch after Save. */\nexport function useSearchProviders() {\n return useQuery<SearchProvidersResponse>({\n queryKey: ['settings', 'search', 'providers'],\n queryFn: () => api.getSearchProviders(),\n })\n}\n\n/** Ping one provider. Always resolves (no throw on provider error —\n * the response carries `{ ok, error }`); throws only on transport\n * error. The page renders the result inline beside the row. */\nexport function useTestSearchProvider() {\n return useMutation<SearchTestResponse, Error, SearchTestBody>({\n mutationFn: (body) => api.testSearchProvider(body),\n })\n}\n\n/** Live viewer config + cloudflared tunnel state. Used by the Viewer\n * card on /settings/viewer to render the \"Tunnel: running / URL: X /\n * binary: …\" panel. Operators click a manual Refresh button to\n * re-fetch — no auto-polling because tunnel state is essentially\n * static between operator actions (start / stop / link expiry). */\nexport function useViewerTunnel() {\n return useQuery<ViewerTunnelStatusResponse>({\n queryKey: ['settings', 'viewer-tunnel'],\n queryFn: () => api.getViewerTunnel(),\n })\n}\n"],"names":["settingsKeys","reveal","useEnv","opts","useQuery","api","useUpdateEnv","qc","useQueryClient","useMutation","body","useServiceStatus","makeServiceMutation","fn","useStartService","useStopService","useRestartService","useAdminAllowlist","useAddAdmin","useRemoveAdmin","useConfig","useUpdateConfig","useWorkspaces","useUpsertWorkspace","useStartWechatQr","useWechatQrStatus","token","useTestAcp","useDiscoverAcp","useTestEmail","useSearchProviders","useTestSearchProvider","useViewerTunnel"],"mappings":"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"}
1
+ {"version":3,"file":"use-settings-BUM0BmtA.js","sources":["../../src/hooks/use-settings.ts"],"sourcesContent":["/**\n * useSettings — react-query wrappers for the env editor + service\n * control surfaces.\n *\n * useEnv({ reveal }) — env file values (masked when\n * reveal is false)\n * useUpdateEnv() — bulk update\n * useServiceStatus() — pid / mode / uptime\n * useStart/Stop/Restart() — service lifecycle\n *\n * Service status polls every 5s while the page is foreground so\n * the operator sees restart progress live.\n */\n\nimport { useQueryClient, useQuery, useMutation } from '@tanstack/react-query'\nimport { api } from '@/lib/api/endpoints'\nimport type {\n ACPDiscoverBody,\n ACPDiscoverResponse,\n ACPTestBody,\n ACPTestResponse,\n EmailTestResponse,\n ViewerTunnelStatusResponse,\n AddAdminBody,\n AdminAllowlistResponse,\n AdminMutationResponse,\n AppConfig,\n EnvResponse,\n RemoveAdminBody,\n SearchProvidersResponse,\n SearchTestBody,\n SearchTestResponse,\n ServiceActionResponse,\n ServiceStatus,\n UpdateEnvBody,\n WechatQrStartResponse,\n WechatQrStatusResponse,\n WorkspaceConfig,\n} from '@/types/api'\n\nexport const settingsKeys = {\n all: ['settings'] as const,\n env: (reveal: boolean) => ['settings', 'env', reveal] as const,\n service: ['settings', 'service'] as const,\n admins: ['settings', 'admins'] as const,\n config: ['settings', 'config'] as const,\n workspaces: ['settings', 'workspaces'] as const,\n}\n\nexport function useEnv(opts: { reveal?: boolean } = {}) {\n const reveal = !!opts.reveal\n return useQuery<EnvResponse>({\n queryKey: settingsKeys.env(reveal),\n queryFn: () => api.getEnv({ reveal }),\n })\n}\n\nexport function useUpdateEnv() {\n const qc = useQueryClient()\n return useMutation<EnvResponse, Error, UpdateEnvBody>({\n mutationFn: (body) => api.updateEnv(body),\n onSuccess: () => qc.invalidateQueries({ queryKey: ['settings', 'env'] }),\n })\n}\n\nexport function useServiceStatus() {\n return useQuery<ServiceStatus>({\n queryKey: settingsKeys.service,\n queryFn: () => api.getServiceStatus(),\n refetchInterval: 5000,\n refetchIntervalInBackground: false,\n })\n}\n\nfunction makeServiceMutation(\n fn: () => Promise<ServiceActionResponse>,\n qc: ReturnType<typeof useQueryClient>,\n) {\n return useMutation<ServiceActionResponse, Error, void>({\n mutationFn: fn,\n onSuccess: () => qc.invalidateQueries({ queryKey: settingsKeys.service }),\n })\n}\n\nexport function useStartService() {\n const qc = useQueryClient()\n return makeServiceMutation(() => api.startService(), qc)\n}\n\nexport function useStopService() {\n const qc = useQueryClient()\n return makeServiceMutation(() => api.stopService(), qc)\n}\n\nexport function useRestartService() {\n const qc = useQueryClient()\n return makeServiceMutation(() => api.restartService(), qc)\n}\n\n/* ─────────────── Admin allowlist ─────────────── */\n\nexport function useAdminAllowlist() {\n return useQuery<AdminAllowlistResponse>({\n queryKey: settingsKeys.admins,\n queryFn: () => api.listAdminAllowlist(),\n })\n}\n\nexport function useAddAdmin() {\n const qc = useQueryClient()\n return useMutation<AdminMutationResponse, Error, AddAdminBody>({\n mutationFn: (body) => api.addAdminAllowlist(body),\n onSuccess: () => qc.invalidateQueries({ queryKey: settingsKeys.admins }),\n })\n}\n\nexport function useRemoveAdmin() {\n const qc = useQueryClient()\n return useMutation<AdminMutationResponse, Error, RemoveAdminBody>({\n mutationFn: (body) => api.removeAdminAllowlist(body),\n onSuccess: () => qc.invalidateQueries({ queryKey: settingsKeys.admins }),\n })\n}\n\n/* ─────────────── App config ─────────────── */\n\nexport function useConfig() {\n return useQuery<AppConfig>({\n queryKey: settingsKeys.config,\n queryFn: () => api.getConfig(),\n })\n}\n\nexport function useUpdateConfig() {\n const qc = useQueryClient()\n return useMutation<AppConfig, Error, Partial<AppConfig>>({\n mutationFn: (body) => api.updateConfig(body),\n onSuccess: () => qc.invalidateQueries({ queryKey: settingsKeys.config }),\n })\n}\n\n/* ─────────────── Workspaces ─────────────── */\n\nexport function useWorkspaces() {\n return useQuery<{ workspaces: WorkspaceConfig[] }>({\n queryKey: settingsKeys.workspaces,\n queryFn: () => api.listWorkspacesFull(),\n })\n}\n\nexport function useUpsertWorkspace() {\n const qc = useQueryClient()\n return useMutation<\n { ok: boolean; workspace: WorkspaceConfig },\n Error,\n WorkspaceConfig\n >({\n mutationFn: (body) => api.upsertWorkspace(body),\n onSuccess: () => qc.invalidateQueries({ queryKey: settingsKeys.workspaces }),\n })\n}\n\n/* ─────────────── WeChat QR ─────────────── */\n\nexport function useStartWechatQr() {\n return useMutation<WechatQrStartResponse, Error, void>({\n mutationFn: () => api.startWechatQr(),\n })\n}\n\n/** Poll the QR status every 2s while the modal is open. Caller\n * passes `token` once it has it from the start mutation; passing\n * null disables the polling. On status='confirmed' the backend\n * persists wechat-ilink → re-fetch config to update the toggle. */\nexport function useWechatQrStatus(token: string | null) {\n return useQuery<WechatQrStatusResponse>({\n queryKey: ['settings', 'wechat-qr', token ?? ''],\n queryFn: () => api.getWechatQrStatus({ token: token as string }),\n enabled: Boolean(token),\n refetchInterval: 2000,\n refetchIntervalInBackground: false,\n })\n}\n\n/** Probe a single ACP endpoint by fetching its manifest. Used by\n * the \"Test\" buttons in /settings/agents to validate an entry\n * before saving it to config. Errors flow back as ApiError. */\nexport function useTestAcp() {\n return useMutation<ACPTestResponse, Error, ACPTestBody>({\n mutationFn: (body) => api.testAcpAgent(body),\n })\n}\n\n/** Probe a `<baseUrl>/.well-known/acp` doc for an agent list. Used\n * by the \"Discover\" form in /settings/agents to bulk-import. The\n * caller still has to PUT /api/config { acpAgents } to persist. */\nexport function useDiscoverAcp() {\n return useMutation<ACPDiscoverResponse, Error, ACPDiscoverBody>({\n mutationFn: (body) => api.discoverAcpAgents(body),\n })\n}\n\n/** Verify SMTP creds in the running env. Doesn't actually send mail —\n * just `nodemailer.verify()`. Returns `{ ok, message }` on success or\n * throws ApiError otherwise (the route catches + toasts the message). */\nexport function useTestEmail() {\n return useMutation<EmailTestResponse, Error, void>({\n mutationFn: () => api.testEmail(),\n })\n}\n\n/** v1.2.126 — registered web_search providers + their current\n * availability + the resolved chain. Used by /settings/search to\n * paint per-provider rows and the chain preview at the top. Polls\n * once on mount; manual refetch after Save. */\nexport function useSearchProviders() {\n return useQuery<SearchProvidersResponse>({\n queryKey: ['settings', 'search', 'providers'],\n queryFn: () => api.getSearchProviders(),\n })\n}\n\n/** Ping one provider. Always resolves (no throw on provider error —\n * the response carries `{ ok, error }`); throws only on transport\n * error. The page renders the result inline beside the row. */\nexport function useTestSearchProvider() {\n return useMutation<SearchTestResponse, Error, SearchTestBody>({\n mutationFn: (body) => api.testSearchProvider(body),\n })\n}\n\n/** Live viewer config + cloudflared tunnel state. Used by the Viewer\n * card on /settings/viewer to render the \"Tunnel: running / URL: X /\n * binary: …\" panel. Operators click a manual Refresh button to\n * re-fetch — no auto-polling because tunnel state is essentially\n * static between operator actions (start / stop / link expiry). */\nexport function useViewerTunnel() {\n return useQuery<ViewerTunnelStatusResponse>({\n queryKey: ['settings', 'viewer-tunnel'],\n queryFn: () => api.getViewerTunnel(),\n })\n}\n"],"names":["settingsKeys","reveal","useEnv","opts","useQuery","api","useUpdateEnv","qc","useQueryClient","useMutation","body","useServiceStatus","makeServiceMutation","fn","useStartService","useStopService","useRestartService","useAdminAllowlist","useAddAdmin","useRemoveAdmin","useConfig","useUpdateConfig","useWorkspaces","useUpsertWorkspace","useStartWechatQr","useWechatQrStatus","token","useTestAcp","useDiscoverAcp","useTestEmail","useSearchProviders","useTestSearchProvider","useViewerTunnel"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{u as a}from"./useQuery-B25CPtUF.js";import{a as o,b as i,d as u}from"./index-D4Np2s3l.js";const t={all:["workspace"],files:(e,s)=>["workspace","files",e,s]};function y(){return a({queryKey:["agents","status"],queryFn:()=>u.getAgentsStatus()})}function f(e,s,r={}){return a({queryKey:t.files(e,s),queryFn:()=>u.getWorkspaceFiles({agent:e,...s?{path:s}:{}}),enabled:r.enabled!==!1&&!!e})}function p(){const e=o();return i({mutationFn:({agent:s,path:r,body:n})=>u.writeWorkspaceFile({agent:s,path:r},n),onSuccess:()=>e.invalidateQueries({queryKey:t.all})})}export{f as a,p as b,y as u};
2
- //# sourceMappingURL=use-workspace-BgEM7e1m.js.map
1
+ import{u as a}from"./useQuery-II-YwTUw.js";import{a as o,b as i,d as u}from"./index-wVLKSZpI.js";const t={all:["workspace"],files:(e,s)=>["workspace","files",e,s]};function y(){return a({queryKey:["agents","status"],queryFn:()=>u.getAgentsStatus()})}function f(e,s,r={}){return a({queryKey:t.files(e,s),queryFn:()=>u.getWorkspaceFiles({agent:e,...s?{path:s}:{}}),enabled:r.enabled!==!1&&!!e})}function p(){const e=o();return i({mutationFn:({agent:s,path:r,body:n})=>u.writeWorkspaceFile({agent:s,path:r},n),onSuccess:()=>e.invalidateQueries({queryKey:t.all})})}export{f as a,p as b,y as u};
2
+ //# sourceMappingURL=use-workspace-BOUxEbaB.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-workspace-BgEM7e1m.js","sources":["../../src/hooks/use-workspace.ts"],"sourcesContent":["/**\n * useWorkspace — agent picker source + per-agent file browser +\n * write mutation.\n *\n * useAgentsStatus() — populate the picker\n * useWorkspaceFiles(agent, path) — dir listing or file\n * content (discriminated\n * by `type`)\n * useWriteWorkspaceFile() — PUT a file\n *\n * Both reads stay cached at the default 30s staleTime; the write\n * invalidates so the saved size/mtime re-paint immediately.\n */\n\nimport { useQueryClient, useQuery, useMutation } from '@tanstack/react-query'\nimport { api } from '@/lib/api/endpoints'\nimport type {\n WorkspaceFilesResponse,\n WriteWorkspaceFileBody,\n WriteWorkspaceFileResponse,\n} from '@/types/api'\n\nexport const workspaceKeys = {\n all: ['workspace'] as const,\n files: (agent: string, path: string) =>\n ['workspace', 'files', agent, path] as const,\n}\n\nexport function useAgentsStatus() {\n return useQuery<Record<string, boolean>>({\n queryKey: ['agents', 'status'],\n queryFn: () => api.getAgentsStatus(),\n })\n}\n\nexport function useWorkspaceFiles(\n agent: string,\n path: string,\n opts: { enabled?: boolean } = {},\n) {\n return useQuery<WorkspaceFilesResponse>({\n queryKey: workspaceKeys.files(agent, path),\n queryFn: () => api.getWorkspaceFiles({ agent, ...(path ? { path } : {}) }),\n enabled: opts.enabled !== false && Boolean(agent),\n })\n}\n\nexport function useInvalidateWorkspace() {\n const qc = useQueryClient()\n return () => qc.invalidateQueries({ queryKey: workspaceKeys.all })\n}\n\nexport function useWriteWorkspaceFile() {\n const qc = useQueryClient()\n return useMutation<\n WriteWorkspaceFileResponse,\n Error,\n { agent: string; path: string; body: WriteWorkspaceFileBody }\n >({\n mutationFn: ({ agent, path, body }) =>\n api.writeWorkspaceFile({ agent, path }, body),\n onSuccess: () => qc.invalidateQueries({ queryKey: workspaceKeys.all }),\n })\n}\n"],"names":["workspaceKeys","agent","path","useAgentsStatus","useQuery","api","useWorkspaceFiles","opts","useWriteWorkspaceFile","qc","useQueryClient","useMutation","body"],"mappings":"iGAsBO,MAAMA,EAAgB,CAC3B,IAAO,CAAC,WAAW,EACnB,MAAO,CAACC,EAAeC,IACrB,CAAC,YAAa,QAASD,EAAOC,CAAI,CACtC,EAEO,SAASC,GAAkB,CAChC,OAAOC,EAAkC,CACvC,SAAU,CAAC,SAAU,QAAQ,EAC7B,QAAS,IAAMC,EAAI,gBAAA,CAAgB,CACpC,CACH,CAEO,SAASC,EACdL,EACAC,EACAK,EAA8B,CAAA,EAC9B,CACA,OAAOH,EAAiC,CACtC,SAAUJ,EAAc,MAAMC,EAAOC,CAAI,EACzC,QAAS,IAAMG,EAAI,kBAAkB,CAAE,MAAAJ,EAAO,GAAIC,EAAO,CAAE,KAAAA,GAAS,CAAA,EAAK,EACzE,QAASK,EAAK,UAAY,IAAS,EAAQN,CAAK,CACjD,CACH,CAOO,SAASO,GAAwB,CACtC,MAAMC,EAAKC,EAAA,EACX,OAAOC,EAIL,CACA,WAAY,CAAC,CAAE,MAAAV,EAAO,KAAAC,EAAM,KAAAU,CAAA,IAC1BP,EAAI,mBAAmB,CAAE,MAAAJ,EAAO,KAAAC,CAAA,EAAQU,CAAI,EAC9C,UAAW,IAAMH,EAAG,kBAAkB,CAAE,SAAUT,EAAc,IAAK,CAAA,CACtE,CACH"}
1
+ {"version":3,"file":"use-workspace-BOUxEbaB.js","sources":["../../src/hooks/use-workspace.ts"],"sourcesContent":["/**\n * useWorkspace — agent picker source + per-agent file browser +\n * write mutation.\n *\n * useAgentsStatus() — populate the picker\n * useWorkspaceFiles(agent, path) — dir listing or file\n * content (discriminated\n * by `type`)\n * useWriteWorkspaceFile() — PUT a file\n *\n * Both reads stay cached at the default 30s staleTime; the write\n * invalidates so the saved size/mtime re-paint immediately.\n */\n\nimport { useQueryClient, useQuery, useMutation } from '@tanstack/react-query'\nimport { api } from '@/lib/api/endpoints'\nimport type {\n WorkspaceFilesResponse,\n WriteWorkspaceFileBody,\n WriteWorkspaceFileResponse,\n} from '@/types/api'\n\nexport const workspaceKeys = {\n all: ['workspace'] as const,\n files: (agent: string, path: string) =>\n ['workspace', 'files', agent, path] as const,\n}\n\nexport function useAgentsStatus() {\n return useQuery<Record<string, boolean>>({\n queryKey: ['agents', 'status'],\n queryFn: () => api.getAgentsStatus(),\n })\n}\n\nexport function useWorkspaceFiles(\n agent: string,\n path: string,\n opts: { enabled?: boolean } = {},\n) {\n return useQuery<WorkspaceFilesResponse>({\n queryKey: workspaceKeys.files(agent, path),\n queryFn: () => api.getWorkspaceFiles({ agent, ...(path ? { path } : {}) }),\n enabled: opts.enabled !== false && Boolean(agent),\n })\n}\n\nexport function useInvalidateWorkspace() {\n const qc = useQueryClient()\n return () => qc.invalidateQueries({ queryKey: workspaceKeys.all })\n}\n\nexport function useWriteWorkspaceFile() {\n const qc = useQueryClient()\n return useMutation<\n WriteWorkspaceFileResponse,\n Error,\n { agent: string; path: string; body: WriteWorkspaceFileBody }\n >({\n mutationFn: ({ agent, path, body }) =>\n api.writeWorkspaceFile({ agent, path }, body),\n onSuccess: () => qc.invalidateQueries({ queryKey: workspaceKeys.all }),\n })\n}\n"],"names":["workspaceKeys","agent","path","useAgentsStatus","useQuery","api","useWorkspaceFiles","opts","useWriteWorkspaceFile","qc","useQueryClient","useMutation","body"],"mappings":"iGAsBO,MAAMA,EAAgB,CAC3B,IAAO,CAAC,WAAW,EACnB,MAAO,CAACC,EAAeC,IACrB,CAAC,YAAa,QAASD,EAAOC,CAAI,CACtC,EAEO,SAASC,GAAkB,CAChC,OAAOC,EAAkC,CACvC,SAAU,CAAC,SAAU,QAAQ,EAC7B,QAAS,IAAMC,EAAI,gBAAA,CAAgB,CACpC,CACH,CAEO,SAASC,EACdL,EACAC,EACAK,EAA8B,CAAA,EAC9B,CACA,OAAOH,EAAiC,CACtC,SAAUJ,EAAc,MAAMC,EAAOC,CAAI,EACzC,QAAS,IAAMG,EAAI,kBAAkB,CAAE,MAAAJ,EAAO,GAAIC,EAAO,CAAE,KAAAA,GAAS,CAAA,EAAK,EACzE,QAASK,EAAK,UAAY,IAAS,EAAQN,CAAK,CACjD,CACH,CAOO,SAASO,GAAwB,CACtC,MAAMC,EAAKC,EAAA,EACX,OAAOC,EAIL,CACA,WAAY,CAAC,CAAE,MAAAV,EAAO,KAAAC,EAAM,KAAAU,CAAA,IAC1BP,EAAI,mBAAmB,CAAE,MAAAJ,EAAO,KAAAC,CAAA,EAAQU,CAAI,EAC9C,UAAW,IAAMH,EAAG,kBAAkB,CAAE,SAAUT,EAAc,IAAK,CAAA,CACtE,CACH"}
@@ -1,2 +1,2 @@
1
- import{a1 as G,a2 as N,a3 as c,a4 as M,a5 as g,a6 as x,a7 as _,a8 as B,a9 as J,aa as I,ab as X,ac as Y,ad as A,ae as z,af as V,a as Z}from"./index-D4Np2s3l.js";import{r as d}from"./react-Cb2sDjhD.js";var $=class extends G{constructor(t,e){super(),this.options=e,this.#s=t,this.#r=null,this.#i=N(),this.bindMethods(),this.setOptions(e)}#s;#t=void 0;#p=void 0;#e=void 0;#n;#u;#i;#r;#v;#l;#d;#o;#h;#a;#f=new Set;bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(this.#t.addObserver(this),j(this.#t,this.options)?this.#c():this.updateResult(),this.#g())}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return P(this.#t,this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return P(this.#t,this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,this.#y(),this.#S(),this.#t.removeObserver(this)}setOptions(t){const e=this.options,s=this.#t;if(this.options=this.#s.defaultQueryOptions(t),this.options.enabled!==void 0&&typeof this.options.enabled!="boolean"&&typeof this.options.enabled!="function"&&typeof c(this.options.enabled,this.#t)!="boolean")throw new Error("Expected enabled to be a boolean or a callback that returns a boolean");this.#O(),this.#t.setOptions(this.options),e._defaulted&&!M(this.options,e)&&this.#s.getQueryCache().notify({type:"observerOptionsUpdated",query:this.#t,observer:this});const i=this.hasListeners();i&&H(this.#t,s,this.options,e)&&this.#c(),this.updateResult(),i&&(this.#t!==s||c(this.options.enabled,this.#t)!==c(e.enabled,this.#t)||g(this.options.staleTime,this.#t)!==g(e.staleTime,this.#t))&&this.#b();const a=this.#R();i&&(this.#t!==s||c(this.options.enabled,this.#t)!==c(e.enabled,this.#t)||a!==this.#a)&&this.#m(a)}getOptimisticResult(t){const e=this.#s.getQueryCache().build(this.#s,t),s=this.createResult(e,t);return tt(this,s)&&(this.#e=s,this.#u=this.options,this.#n=this.#t.state),s}getCurrentResult(){return this.#e}trackResult(t,e){return new Proxy(t,{get:(s,i)=>(this.trackProp(i),e?.(i),i==="promise"&&(this.trackProp("data"),!this.options.experimental_prefetchInRender&&this.#i.status==="pending"&&this.#i.reject(new Error("experimental_prefetchInRender feature flag is not enabled"))),Reflect.get(s,i))})}trackProp(t){this.#f.add(t)}getCurrentQuery(){return this.#t}refetch({...t}={}){return this.fetch({...t})}fetchOptimistic(t){const e=this.#s.defaultQueryOptions(t),s=this.#s.getQueryCache().build(this.#s,e);return s.fetch().then(()=>this.createResult(s,e))}fetch(t){return this.#c({...t,cancelRefetch:t.cancelRefetch??!0}).then(()=>(this.updateResult(),this.#e))}#c(t){this.#O();let e=this.#t.fetch(this.options,t);return t?.throwOnError||(e=e.catch(x)),e}#b(){this.#y();const t=g(this.options.staleTime,this.#t);if(_.isServer()||this.#e.isStale||!B(t))return;const s=J(this.#e.dataUpdatedAt,t)+1;this.#o=I.setTimeout(()=>{this.#e.isStale||this.updateResult()},s)}#R(){return(typeof this.options.refetchInterval=="function"?this.options.refetchInterval(this.#t):this.options.refetchInterval)??!1}#m(t){this.#S(),this.#a=t,!(_.isServer()||c(this.options.enabled,this.#t)===!1||!B(this.#a)||this.#a===0)&&(this.#h=I.setInterval(()=>{(this.options.refetchIntervalInBackground||X.isFocused())&&this.#c()},this.#a))}#g(){this.#b(),this.#m(this.#R())}#y(){this.#o!==void 0&&(I.clearTimeout(this.#o),this.#o=void 0)}#S(){this.#h!==void 0&&(I.clearInterval(this.#h),this.#h=void 0)}createResult(t,e){const s=this.#t,i=this.options,a=this.#e,u=this.#n,n=this.#u,b=t!==s?t.state:this.#p,{state:y}=t;let r={...y},l=!1,o;if(e._optimisticResults){const h=this.hasListeners(),m=!h&&j(t,e),O=h&&H(t,s,e,i);(m||O)&&(r={...r,...Y(y.data,t.options)}),e._optimisticResults==="isRestoring"&&(r.fetchStatus="idle")}let{error:R,errorUpdatedAt:S,status:v}=r;o=r.data;let U=!1;if(e.placeholderData!==void 0&&o===void 0&&v==="pending"){let h;a?.isPlaceholderData&&e.placeholderData===n?.placeholderData?(h=a.data,U=!0):h=typeof e.placeholderData=="function"?e.placeholderData(this.#d?.state.data,this.#d):e.placeholderData,h!==void 0&&(v="success",o=A(a?.data,h,e),l=!0)}if(e.select&&o!==void 0&&!U)if(a&&o===u?.data&&e.select===this.#v)o=this.#l;else try{this.#v=e.select,o=e.select(o),o=A(a?.data,o,e),this.#l=o,this.#r=null}catch(h){this.#r=h}this.#r&&(R=this.#r,o=this.#l,S=Date.now(),v="error");const T=r.fetchStatus==="fetching",w=v==="pending",Q=v==="error",D=w&&T,k=o!==void 0,p={status:v,fetchStatus:r.fetchStatus,isPending:w,isSuccess:v==="success",isError:Q,isInitialLoading:D,isLoading:D,data:o,dataUpdatedAt:r.dataUpdatedAt,error:R,errorUpdatedAt:S,failureCount:r.fetchFailureCount,failureReason:r.fetchFailureReason,errorUpdateCount:r.errorUpdateCount,isFetched:t.isFetched(),isFetchedAfterMount:r.dataUpdateCount>b.dataUpdateCount||r.errorUpdateCount>b.errorUpdateCount,isFetching:T,isRefetching:T&&!w,isLoadingError:Q&&!k,isPaused:r.fetchStatus==="paused",isPlaceholderData:l,isRefetchError:Q&&k,isStale:F(t,e),refetch:this.refetch,promise:this.#i,isEnabled:c(e.enabled,t)!==!1};if(this.options.experimental_prefetchInRender){const h=p.data!==void 0,m=p.status==="error"&&!h,O=C=>{m?C.reject(p.error):h&&C.resolve(p.data)},L=()=>{const C=this.#i=p.promise=N();O(C)},E=this.#i;switch(E.status){case"pending":t.queryHash===s.queryHash&&O(E);break;case"fulfilled":(m||p.data!==E.value)&&L();break;case"rejected":(!m||p.error!==E.reason)&&L();break}}return p}updateResult(){const t=this.#e,e=this.createResult(this.#t,this.options);if(this.#n=this.#t.state,this.#u=this.options,this.#n.data!==void 0&&(this.#d=this.#t),M(e,t))return;this.#e=e;const s=()=>{if(!t)return!0;const{notifyOnChangeProps:i}=this.options,a=typeof i=="function"?i():i;if(a==="all"||!a&&!this.#f.size)return!0;const u=new Set(a??this.#f);return this.options.throwOnError&&u.add("error"),Object.keys(this.#e).some(n=>{const f=n;return this.#e[f]!==t[f]&&u.has(f)})};this.#E({listeners:s()})}#O(){const t=this.#s.getQueryCache().build(this.#s,this.options);if(t===this.#t)return;const e=this.#t;this.#t=t,this.#p=t.state,this.hasListeners()&&(e?.removeObserver(this),t.addObserver(this))}onQueryUpdate(){this.updateResult(),this.hasListeners()&&this.#g()}#E(t){z.batch(()=>{t.listeners&&this.listeners.forEach(e=>{e(this.#e)}),this.#s.getQueryCache().notify({query:this.#t,type:"observerResultsUpdated"})})}};function q(t,e){return c(e.enabled,t)!==!1&&t.state.data===void 0&&!(t.state.status==="error"&&c(e.retryOnMount,t)===!1)}function j(t,e){return q(t,e)||t.state.data!==void 0&&P(t,e,e.refetchOnMount)}function P(t,e,s){if(c(e.enabled,t)!==!1&&g(e.staleTime,t)!=="static"){const i=typeof s=="function"?s(t):s;return i==="always"||i!==!1&&F(t,e)}return!1}function H(t,e,s,i){return(t!==e||c(i.enabled,t)===!1)&&(!s.suspense||t.state.status!=="error")&&F(t,s)}function F(t,e){return c(e.enabled,t)!==!1&&t.isStaleByTime(g(e.staleTime,t))}function tt(t,e){return!M(t.getCurrentResult(),e)}var K=d.createContext(!1),et=()=>d.useContext(K);K.Provider;function st(){let t=!1;return{clearReset:()=>{t=!1},reset:()=>{t=!0},isReset:()=>t}}var it=d.createContext(st()),rt=()=>d.useContext(it),at=(t,e,s)=>{const i=s?.state.error&&typeof t.throwOnError=="function"?V(t.throwOnError,[s.state.error,s]):t.throwOnError;(t.suspense||t.experimental_prefetchInRender||i)&&(e.isReset()||(t.retryOnMount=!1))},nt=t=>{d.useEffect(()=>{t.clearReset()},[t])},ot=({result:t,errorResetBoundary:e,throwOnError:s,query:i,suspense:a})=>t.isError&&!e.isReset()&&!t.isFetching&&i&&(a&&t.data===void 0||V(s,[t.error,i])),ht=t=>{if(t.suspense){const s=a=>a==="static"?a:Math.max(a??1e3,1e3),i=t.staleTime;t.staleTime=typeof i=="function"?(...a)=>s(i(...a)):s(i),typeof t.gcTime=="number"&&(t.gcTime=Math.max(t.gcTime,1e3))}},ct=(t,e)=>t.isLoading&&t.isFetching&&!e,ut=(t,e)=>t?.suspense&&e.isPending,W=(t,e,s)=>e.fetchOptimistic(t).catch(()=>{s.clearReset()});function lt(t,e,s){const i=et(),a=rt(),u=Z(),n=u.defaultQueryOptions(t);u.getDefaultOptions().queries?._experimental_beforeQuery?.(n);const f=u.getQueryCache().get(n.queryHash),b=t.subscribed!==!1;n._optimisticResults=i?"isRestoring":b?"optimistic":void 0,ht(n),at(n,a,f),nt(a);const y=!u.getQueryCache().get(n.queryHash),[r]=d.useState(()=>new e(u,n)),l=r.getOptimisticResult(n),o=!i&&b;if(d.useSyncExternalStore(d.useCallback(R=>{const S=o?r.subscribe(z.batchCalls(R)):x;return r.updateResult(),S},[r,o]),()=>r.getCurrentResult(),()=>r.getCurrentResult()),d.useEffect(()=>{r.setOptions(n)},[n,r]),ut(n,l))throw W(n,r,a);if(ot({result:l,errorResetBoundary:a,throwOnError:n.throwOnError,query:f,suspense:n.suspense}))throw l.error;return u.getDefaultOptions().queries?._experimental_afterQuery?.(n,l),n.experimental_prefetchInRender&&!_.isServer()&&ct(l,i)&&(y?W(n,r,a):f?.promise)?.catch(x).finally(()=>{r.updateResult()}),n.notifyOnChangeProps?l:r.trackResult(l)}function vt(t,e){return lt(t,$)}export{vt as u};
2
- //# sourceMappingURL=useQuery-B25CPtUF.js.map
1
+ import{a1 as G,a2 as N,a3 as c,a4 as M,a5 as g,a6 as x,a7 as _,a8 as B,a9 as J,aa as I,ab as X,ac as Y,ad as A,ae as z,af as V,a as Z}from"./index-wVLKSZpI.js";import{r as d}from"./react-Cb2sDjhD.js";var $=class extends G{constructor(t,e){super(),this.options=e,this.#s=t,this.#r=null,this.#i=N(),this.bindMethods(),this.setOptions(e)}#s;#t=void 0;#p=void 0;#e=void 0;#n;#u;#i;#r;#v;#l;#d;#o;#h;#a;#f=new Set;bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(this.#t.addObserver(this),j(this.#t,this.options)?this.#c():this.updateResult(),this.#g())}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return P(this.#t,this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return P(this.#t,this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,this.#y(),this.#S(),this.#t.removeObserver(this)}setOptions(t){const e=this.options,s=this.#t;if(this.options=this.#s.defaultQueryOptions(t),this.options.enabled!==void 0&&typeof this.options.enabled!="boolean"&&typeof this.options.enabled!="function"&&typeof c(this.options.enabled,this.#t)!="boolean")throw new Error("Expected enabled to be a boolean or a callback that returns a boolean");this.#O(),this.#t.setOptions(this.options),e._defaulted&&!M(this.options,e)&&this.#s.getQueryCache().notify({type:"observerOptionsUpdated",query:this.#t,observer:this});const i=this.hasListeners();i&&H(this.#t,s,this.options,e)&&this.#c(),this.updateResult(),i&&(this.#t!==s||c(this.options.enabled,this.#t)!==c(e.enabled,this.#t)||g(this.options.staleTime,this.#t)!==g(e.staleTime,this.#t))&&this.#b();const a=this.#R();i&&(this.#t!==s||c(this.options.enabled,this.#t)!==c(e.enabled,this.#t)||a!==this.#a)&&this.#m(a)}getOptimisticResult(t){const e=this.#s.getQueryCache().build(this.#s,t),s=this.createResult(e,t);return tt(this,s)&&(this.#e=s,this.#u=this.options,this.#n=this.#t.state),s}getCurrentResult(){return this.#e}trackResult(t,e){return new Proxy(t,{get:(s,i)=>(this.trackProp(i),e?.(i),i==="promise"&&(this.trackProp("data"),!this.options.experimental_prefetchInRender&&this.#i.status==="pending"&&this.#i.reject(new Error("experimental_prefetchInRender feature flag is not enabled"))),Reflect.get(s,i))})}trackProp(t){this.#f.add(t)}getCurrentQuery(){return this.#t}refetch({...t}={}){return this.fetch({...t})}fetchOptimistic(t){const e=this.#s.defaultQueryOptions(t),s=this.#s.getQueryCache().build(this.#s,e);return s.fetch().then(()=>this.createResult(s,e))}fetch(t){return this.#c({...t,cancelRefetch:t.cancelRefetch??!0}).then(()=>(this.updateResult(),this.#e))}#c(t){this.#O();let e=this.#t.fetch(this.options,t);return t?.throwOnError||(e=e.catch(x)),e}#b(){this.#y();const t=g(this.options.staleTime,this.#t);if(_.isServer()||this.#e.isStale||!B(t))return;const s=J(this.#e.dataUpdatedAt,t)+1;this.#o=I.setTimeout(()=>{this.#e.isStale||this.updateResult()},s)}#R(){return(typeof this.options.refetchInterval=="function"?this.options.refetchInterval(this.#t):this.options.refetchInterval)??!1}#m(t){this.#S(),this.#a=t,!(_.isServer()||c(this.options.enabled,this.#t)===!1||!B(this.#a)||this.#a===0)&&(this.#h=I.setInterval(()=>{(this.options.refetchIntervalInBackground||X.isFocused())&&this.#c()},this.#a))}#g(){this.#b(),this.#m(this.#R())}#y(){this.#o!==void 0&&(I.clearTimeout(this.#o),this.#o=void 0)}#S(){this.#h!==void 0&&(I.clearInterval(this.#h),this.#h=void 0)}createResult(t,e){const s=this.#t,i=this.options,a=this.#e,u=this.#n,n=this.#u,b=t!==s?t.state:this.#p,{state:y}=t;let r={...y},l=!1,o;if(e._optimisticResults){const h=this.hasListeners(),m=!h&&j(t,e),O=h&&H(t,s,e,i);(m||O)&&(r={...r,...Y(y.data,t.options)}),e._optimisticResults==="isRestoring"&&(r.fetchStatus="idle")}let{error:R,errorUpdatedAt:S,status:v}=r;o=r.data;let U=!1;if(e.placeholderData!==void 0&&o===void 0&&v==="pending"){let h;a?.isPlaceholderData&&e.placeholderData===n?.placeholderData?(h=a.data,U=!0):h=typeof e.placeholderData=="function"?e.placeholderData(this.#d?.state.data,this.#d):e.placeholderData,h!==void 0&&(v="success",o=A(a?.data,h,e),l=!0)}if(e.select&&o!==void 0&&!U)if(a&&o===u?.data&&e.select===this.#v)o=this.#l;else try{this.#v=e.select,o=e.select(o),o=A(a?.data,o,e),this.#l=o,this.#r=null}catch(h){this.#r=h}this.#r&&(R=this.#r,o=this.#l,S=Date.now(),v="error");const T=r.fetchStatus==="fetching",w=v==="pending",Q=v==="error",D=w&&T,k=o!==void 0,p={status:v,fetchStatus:r.fetchStatus,isPending:w,isSuccess:v==="success",isError:Q,isInitialLoading:D,isLoading:D,data:o,dataUpdatedAt:r.dataUpdatedAt,error:R,errorUpdatedAt:S,failureCount:r.fetchFailureCount,failureReason:r.fetchFailureReason,errorUpdateCount:r.errorUpdateCount,isFetched:t.isFetched(),isFetchedAfterMount:r.dataUpdateCount>b.dataUpdateCount||r.errorUpdateCount>b.errorUpdateCount,isFetching:T,isRefetching:T&&!w,isLoadingError:Q&&!k,isPaused:r.fetchStatus==="paused",isPlaceholderData:l,isRefetchError:Q&&k,isStale:F(t,e),refetch:this.refetch,promise:this.#i,isEnabled:c(e.enabled,t)!==!1};if(this.options.experimental_prefetchInRender){const h=p.data!==void 0,m=p.status==="error"&&!h,O=C=>{m?C.reject(p.error):h&&C.resolve(p.data)},L=()=>{const C=this.#i=p.promise=N();O(C)},E=this.#i;switch(E.status){case"pending":t.queryHash===s.queryHash&&O(E);break;case"fulfilled":(m||p.data!==E.value)&&L();break;case"rejected":(!m||p.error!==E.reason)&&L();break}}return p}updateResult(){const t=this.#e,e=this.createResult(this.#t,this.options);if(this.#n=this.#t.state,this.#u=this.options,this.#n.data!==void 0&&(this.#d=this.#t),M(e,t))return;this.#e=e;const s=()=>{if(!t)return!0;const{notifyOnChangeProps:i}=this.options,a=typeof i=="function"?i():i;if(a==="all"||!a&&!this.#f.size)return!0;const u=new Set(a??this.#f);return this.options.throwOnError&&u.add("error"),Object.keys(this.#e).some(n=>{const f=n;return this.#e[f]!==t[f]&&u.has(f)})};this.#E({listeners:s()})}#O(){const t=this.#s.getQueryCache().build(this.#s,this.options);if(t===this.#t)return;const e=this.#t;this.#t=t,this.#p=t.state,this.hasListeners()&&(e?.removeObserver(this),t.addObserver(this))}onQueryUpdate(){this.updateResult(),this.hasListeners()&&this.#g()}#E(t){z.batch(()=>{t.listeners&&this.listeners.forEach(e=>{e(this.#e)}),this.#s.getQueryCache().notify({query:this.#t,type:"observerResultsUpdated"})})}};function q(t,e){return c(e.enabled,t)!==!1&&t.state.data===void 0&&!(t.state.status==="error"&&c(e.retryOnMount,t)===!1)}function j(t,e){return q(t,e)||t.state.data!==void 0&&P(t,e,e.refetchOnMount)}function P(t,e,s){if(c(e.enabled,t)!==!1&&g(e.staleTime,t)!=="static"){const i=typeof s=="function"?s(t):s;return i==="always"||i!==!1&&F(t,e)}return!1}function H(t,e,s,i){return(t!==e||c(i.enabled,t)===!1)&&(!s.suspense||t.state.status!=="error")&&F(t,s)}function F(t,e){return c(e.enabled,t)!==!1&&t.isStaleByTime(g(e.staleTime,t))}function tt(t,e){return!M(t.getCurrentResult(),e)}var K=d.createContext(!1),et=()=>d.useContext(K);K.Provider;function st(){let t=!1;return{clearReset:()=>{t=!1},reset:()=>{t=!0},isReset:()=>t}}var it=d.createContext(st()),rt=()=>d.useContext(it),at=(t,e,s)=>{const i=s?.state.error&&typeof t.throwOnError=="function"?V(t.throwOnError,[s.state.error,s]):t.throwOnError;(t.suspense||t.experimental_prefetchInRender||i)&&(e.isReset()||(t.retryOnMount=!1))},nt=t=>{d.useEffect(()=>{t.clearReset()},[t])},ot=({result:t,errorResetBoundary:e,throwOnError:s,query:i,suspense:a})=>t.isError&&!e.isReset()&&!t.isFetching&&i&&(a&&t.data===void 0||V(s,[t.error,i])),ht=t=>{if(t.suspense){const s=a=>a==="static"?a:Math.max(a??1e3,1e3),i=t.staleTime;t.staleTime=typeof i=="function"?(...a)=>s(i(...a)):s(i),typeof t.gcTime=="number"&&(t.gcTime=Math.max(t.gcTime,1e3))}},ct=(t,e)=>t.isLoading&&t.isFetching&&!e,ut=(t,e)=>t?.suspense&&e.isPending,W=(t,e,s)=>e.fetchOptimistic(t).catch(()=>{s.clearReset()});function lt(t,e,s){const i=et(),a=rt(),u=Z(),n=u.defaultQueryOptions(t);u.getDefaultOptions().queries?._experimental_beforeQuery?.(n);const f=u.getQueryCache().get(n.queryHash),b=t.subscribed!==!1;n._optimisticResults=i?"isRestoring":b?"optimistic":void 0,ht(n),at(n,a,f),nt(a);const y=!u.getQueryCache().get(n.queryHash),[r]=d.useState(()=>new e(u,n)),l=r.getOptimisticResult(n),o=!i&&b;if(d.useSyncExternalStore(d.useCallback(R=>{const S=o?r.subscribe(z.batchCalls(R)):x;return r.updateResult(),S},[r,o]),()=>r.getCurrentResult(),()=>r.getCurrentResult()),d.useEffect(()=>{r.setOptions(n)},[n,r]),ut(n,l))throw W(n,r,a);if(ot({result:l,errorResetBoundary:a,throwOnError:n.throwOnError,query:f,suspense:n.suspense}))throw l.error;return u.getDefaultOptions().queries?._experimental_afterQuery?.(n,l),n.experimental_prefetchInRender&&!_.isServer()&&ct(l,i)&&(y?W(n,r,a):f?.promise)?.catch(x).finally(()=>{r.updateResult()}),n.notifyOnChangeProps?l:r.trackResult(l)}function vt(t,e){return lt(t,$)}export{vt as u};
2
+ //# sourceMappingURL=useQuery-II-YwTUw.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useQuery-B25CPtUF.js","sources":["../../node_modules/@tanstack/query-core/build/modern/queryObserver.js","../../node_modules/@tanstack/react-query/build/modern/IsRestoringProvider.js","../../node_modules/@tanstack/react-query/build/modern/QueryErrorResetBoundary.js","../../node_modules/@tanstack/react-query/build/modern/errorBoundaryUtils.js","../../node_modules/@tanstack/react-query/build/modern/suspense.js","../../node_modules/@tanstack/react-query/build/modern/useBaseQuery.js","../../node_modules/@tanstack/react-query/build/modern/useQuery.js"],"sourcesContent":["// src/queryObserver.ts\nimport { focusManager } from \"./focusManager.js\";\nimport { environmentManager } from \"./environmentManager.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { fetchState } from \"./query.js\";\nimport { Subscribable } from \"./subscribable.js\";\nimport { pendingThenable } from \"./thenable.js\";\nimport {\n isValidTimeout,\n noop,\n replaceData,\n resolveQueryBoolean,\n resolveStaleTime,\n shallowEqualObjects,\n timeUntilStale\n} from \"./utils.js\";\nimport { timeoutManager } from \"./timeoutManager.js\";\nvar QueryObserver = class extends Subscribable {\n constructor(client, options) {\n super();\n this.options = options;\n this.#client = client;\n this.#selectError = null;\n this.#currentThenable = pendingThenable();\n this.bindMethods();\n this.setOptions(options);\n }\n #client;\n #currentQuery = void 0;\n #currentQueryInitialState = void 0;\n #currentResult = void 0;\n #currentResultState;\n #currentResultOptions;\n #currentThenable;\n #selectError;\n #selectFn;\n #selectResult;\n // This property keeps track of the last query with defined data.\n // It will be used to pass the previous data and query to the placeholder function between renders.\n #lastQueryWithDefinedData;\n #staleTimeoutId;\n #refetchIntervalId;\n #currentRefetchInterval;\n #trackedProps = /* @__PURE__ */ new Set();\n bindMethods() {\n this.refetch = this.refetch.bind(this);\n }\n onSubscribe() {\n if (this.listeners.size === 1) {\n this.#currentQuery.addObserver(this);\n if (shouldFetchOnMount(this.#currentQuery, this.options)) {\n this.#executeFetch();\n } else {\n this.updateResult();\n }\n this.#updateTimers();\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.destroy();\n }\n }\n shouldFetchOnReconnect() {\n return shouldFetchOn(\n this.#currentQuery,\n this.options,\n this.options.refetchOnReconnect\n );\n }\n shouldFetchOnWindowFocus() {\n return shouldFetchOn(\n this.#currentQuery,\n this.options,\n this.options.refetchOnWindowFocus\n );\n }\n destroy() {\n this.listeners = /* @__PURE__ */ new Set();\n this.#clearStaleTimeout();\n this.#clearRefetchInterval();\n this.#currentQuery.removeObserver(this);\n }\n setOptions(options) {\n const prevOptions = this.options;\n const prevQuery = this.#currentQuery;\n this.options = this.#client.defaultQueryOptions(options);\n if (this.options.enabled !== void 0 && typeof this.options.enabled !== \"boolean\" && typeof this.options.enabled !== \"function\" && typeof resolveQueryBoolean(this.options.enabled, this.#currentQuery) !== \"boolean\") {\n throw new Error(\n \"Expected enabled to be a boolean or a callback that returns a boolean\"\n );\n }\n this.#updateQuery();\n this.#currentQuery.setOptions(this.options);\n if (prevOptions._defaulted && !shallowEqualObjects(this.options, prevOptions)) {\n this.#client.getQueryCache().notify({\n type: \"observerOptionsUpdated\",\n query: this.#currentQuery,\n observer: this\n });\n }\n const mounted = this.hasListeners();\n if (mounted && shouldFetchOptionally(\n this.#currentQuery,\n prevQuery,\n this.options,\n prevOptions\n )) {\n this.#executeFetch();\n }\n this.updateResult();\n if (mounted && (this.#currentQuery !== prevQuery || resolveQueryBoolean(this.options.enabled, this.#currentQuery) !== resolveQueryBoolean(prevOptions.enabled, this.#currentQuery) || resolveStaleTime(this.options.staleTime, this.#currentQuery) !== resolveStaleTime(prevOptions.staleTime, this.#currentQuery))) {\n this.#updateStaleTimeout();\n }\n const nextRefetchInterval = this.#computeRefetchInterval();\n if (mounted && (this.#currentQuery !== prevQuery || resolveQueryBoolean(this.options.enabled, this.#currentQuery) !== resolveQueryBoolean(prevOptions.enabled, this.#currentQuery) || nextRefetchInterval !== this.#currentRefetchInterval)) {\n this.#updateRefetchInterval(nextRefetchInterval);\n }\n }\n getOptimisticResult(options) {\n const query = this.#client.getQueryCache().build(this.#client, options);\n const result = this.createResult(query, options);\n if (shouldAssignObserverCurrentProperties(this, result)) {\n this.#currentResult = result;\n this.#currentResultOptions = this.options;\n this.#currentResultState = this.#currentQuery.state;\n }\n return result;\n }\n getCurrentResult() {\n return this.#currentResult;\n }\n trackResult(result, onPropTracked) {\n return new Proxy(result, {\n get: (target, key) => {\n this.trackProp(key);\n onPropTracked?.(key);\n if (key === \"promise\") {\n this.trackProp(\"data\");\n if (!this.options.experimental_prefetchInRender && this.#currentThenable.status === \"pending\") {\n this.#currentThenable.reject(\n new Error(\n \"experimental_prefetchInRender feature flag is not enabled\"\n )\n );\n }\n }\n return Reflect.get(target, key);\n }\n });\n }\n trackProp(key) {\n this.#trackedProps.add(key);\n }\n getCurrentQuery() {\n return this.#currentQuery;\n }\n refetch({ ...options } = {}) {\n return this.fetch({\n ...options\n });\n }\n fetchOptimistic(options) {\n const defaultedOptions = this.#client.defaultQueryOptions(options);\n const query = this.#client.getQueryCache().build(this.#client, defaultedOptions);\n return query.fetch().then(() => this.createResult(query, defaultedOptions));\n }\n fetch(fetchOptions) {\n return this.#executeFetch({\n ...fetchOptions,\n cancelRefetch: fetchOptions.cancelRefetch ?? true\n }).then(() => {\n this.updateResult();\n return this.#currentResult;\n });\n }\n #executeFetch(fetchOptions) {\n this.#updateQuery();\n let promise = this.#currentQuery.fetch(\n this.options,\n fetchOptions\n );\n if (!fetchOptions?.throwOnError) {\n promise = promise.catch(noop);\n }\n return promise;\n }\n #updateStaleTimeout() {\n this.#clearStaleTimeout();\n const staleTime = resolveStaleTime(\n this.options.staleTime,\n this.#currentQuery\n );\n if (environmentManager.isServer() || this.#currentResult.isStale || !isValidTimeout(staleTime)) {\n return;\n }\n const time = timeUntilStale(this.#currentResult.dataUpdatedAt, staleTime);\n const timeout = time + 1;\n this.#staleTimeoutId = timeoutManager.setTimeout(() => {\n if (!this.#currentResult.isStale) {\n this.updateResult();\n }\n }, timeout);\n }\n #computeRefetchInterval() {\n return (typeof this.options.refetchInterval === \"function\" ? this.options.refetchInterval(this.#currentQuery) : this.options.refetchInterval) ?? false;\n }\n #updateRefetchInterval(nextInterval) {\n this.#clearRefetchInterval();\n this.#currentRefetchInterval = nextInterval;\n if (environmentManager.isServer() || resolveQueryBoolean(this.options.enabled, this.#currentQuery) === false || !isValidTimeout(this.#currentRefetchInterval) || this.#currentRefetchInterval === 0) {\n return;\n }\n this.#refetchIntervalId = timeoutManager.setInterval(() => {\n if (this.options.refetchIntervalInBackground || focusManager.isFocused()) {\n this.#executeFetch();\n }\n }, this.#currentRefetchInterval);\n }\n #updateTimers() {\n this.#updateStaleTimeout();\n this.#updateRefetchInterval(this.#computeRefetchInterval());\n }\n #clearStaleTimeout() {\n if (this.#staleTimeoutId !== void 0) {\n timeoutManager.clearTimeout(this.#staleTimeoutId);\n this.#staleTimeoutId = void 0;\n }\n }\n #clearRefetchInterval() {\n if (this.#refetchIntervalId !== void 0) {\n timeoutManager.clearInterval(this.#refetchIntervalId);\n this.#refetchIntervalId = void 0;\n }\n }\n createResult(query, options) {\n const prevQuery = this.#currentQuery;\n const prevOptions = this.options;\n const prevResult = this.#currentResult;\n const prevResultState = this.#currentResultState;\n const prevResultOptions = this.#currentResultOptions;\n const queryChange = query !== prevQuery;\n const queryInitialState = queryChange ? query.state : this.#currentQueryInitialState;\n const { state } = query;\n let newState = { ...state };\n let isPlaceholderData = false;\n let data;\n if (options._optimisticResults) {\n const mounted = this.hasListeners();\n const fetchOnMount = !mounted && shouldFetchOnMount(query, options);\n const fetchOptionally = mounted && shouldFetchOptionally(query, prevQuery, options, prevOptions);\n if (fetchOnMount || fetchOptionally) {\n newState = {\n ...newState,\n ...fetchState(state.data, query.options)\n };\n }\n if (options._optimisticResults === \"isRestoring\") {\n newState.fetchStatus = \"idle\";\n }\n }\n let { error, errorUpdatedAt, status } = newState;\n data = newState.data;\n let skipSelect = false;\n if (options.placeholderData !== void 0 && data === void 0 && status === \"pending\") {\n let placeholderData;\n if (prevResult?.isPlaceholderData && options.placeholderData === prevResultOptions?.placeholderData) {\n placeholderData = prevResult.data;\n skipSelect = true;\n } else {\n placeholderData = typeof options.placeholderData === \"function\" ? options.placeholderData(\n this.#lastQueryWithDefinedData?.state.data,\n this.#lastQueryWithDefinedData\n ) : options.placeholderData;\n }\n if (placeholderData !== void 0) {\n status = \"success\";\n data = replaceData(\n prevResult?.data,\n placeholderData,\n options\n );\n isPlaceholderData = true;\n }\n }\n if (options.select && data !== void 0 && !skipSelect) {\n if (prevResult && data === prevResultState?.data && options.select === this.#selectFn) {\n data = this.#selectResult;\n } else {\n try {\n this.#selectFn = options.select;\n data = options.select(data);\n data = replaceData(prevResult?.data, data, options);\n this.#selectResult = data;\n this.#selectError = null;\n } catch (selectError) {\n this.#selectError = selectError;\n }\n }\n }\n if (this.#selectError) {\n error = this.#selectError;\n data = this.#selectResult;\n errorUpdatedAt = Date.now();\n status = \"error\";\n }\n const isFetching = newState.fetchStatus === \"fetching\";\n const isPending = status === \"pending\";\n const isError = status === \"error\";\n const isLoading = isPending && isFetching;\n const hasData = data !== void 0;\n const result = {\n status,\n fetchStatus: newState.fetchStatus,\n isPending,\n isSuccess: status === \"success\",\n isError,\n isInitialLoading: isLoading,\n isLoading,\n data,\n dataUpdatedAt: newState.dataUpdatedAt,\n error,\n errorUpdatedAt,\n failureCount: newState.fetchFailureCount,\n failureReason: newState.fetchFailureReason,\n errorUpdateCount: newState.errorUpdateCount,\n isFetched: query.isFetched(),\n isFetchedAfterMount: newState.dataUpdateCount > queryInitialState.dataUpdateCount || newState.errorUpdateCount > queryInitialState.errorUpdateCount,\n isFetching,\n isRefetching: isFetching && !isPending,\n isLoadingError: isError && !hasData,\n isPaused: newState.fetchStatus === \"paused\",\n isPlaceholderData,\n isRefetchError: isError && hasData,\n isStale: isStale(query, options),\n refetch: this.refetch,\n promise: this.#currentThenable,\n isEnabled: resolveQueryBoolean(options.enabled, query) !== false\n };\n const nextResult = result;\n if (this.options.experimental_prefetchInRender) {\n const hasResultData = nextResult.data !== void 0;\n const isErrorWithoutData = nextResult.status === \"error\" && !hasResultData;\n const finalizeThenableIfPossible = (thenable) => {\n if (isErrorWithoutData) {\n thenable.reject(nextResult.error);\n } else if (hasResultData) {\n thenable.resolve(nextResult.data);\n }\n };\n const recreateThenable = () => {\n const pending = this.#currentThenable = nextResult.promise = pendingThenable();\n finalizeThenableIfPossible(pending);\n };\n const prevThenable = this.#currentThenable;\n switch (prevThenable.status) {\n case \"pending\":\n if (query.queryHash === prevQuery.queryHash) {\n finalizeThenableIfPossible(prevThenable);\n }\n break;\n case \"fulfilled\":\n if (isErrorWithoutData || nextResult.data !== prevThenable.value) {\n recreateThenable();\n }\n break;\n case \"rejected\":\n if (!isErrorWithoutData || nextResult.error !== prevThenable.reason) {\n recreateThenable();\n }\n break;\n }\n }\n return nextResult;\n }\n updateResult() {\n const prevResult = this.#currentResult;\n const nextResult = this.createResult(this.#currentQuery, this.options);\n this.#currentResultState = this.#currentQuery.state;\n this.#currentResultOptions = this.options;\n if (this.#currentResultState.data !== void 0) {\n this.#lastQueryWithDefinedData = this.#currentQuery;\n }\n if (shallowEqualObjects(nextResult, prevResult)) {\n return;\n }\n this.#currentResult = nextResult;\n const shouldNotifyListeners = () => {\n if (!prevResult) {\n return true;\n }\n const { notifyOnChangeProps } = this.options;\n const notifyOnChangePropsValue = typeof notifyOnChangeProps === \"function\" ? notifyOnChangeProps() : notifyOnChangeProps;\n if (notifyOnChangePropsValue === \"all\" || !notifyOnChangePropsValue && !this.#trackedProps.size) {\n return true;\n }\n const includedProps = new Set(\n notifyOnChangePropsValue ?? this.#trackedProps\n );\n if (this.options.throwOnError) {\n includedProps.add(\"error\");\n }\n return Object.keys(this.#currentResult).some((key) => {\n const typedKey = key;\n const changed = this.#currentResult[typedKey] !== prevResult[typedKey];\n return changed && includedProps.has(typedKey);\n });\n };\n this.#notify({ listeners: shouldNotifyListeners() });\n }\n #updateQuery() {\n const query = this.#client.getQueryCache().build(this.#client, this.options);\n if (query === this.#currentQuery) {\n return;\n }\n const prevQuery = this.#currentQuery;\n this.#currentQuery = query;\n this.#currentQueryInitialState = query.state;\n if (this.hasListeners()) {\n prevQuery?.removeObserver(this);\n query.addObserver(this);\n }\n }\n onQueryUpdate() {\n this.updateResult();\n if (this.hasListeners()) {\n this.#updateTimers();\n }\n }\n #notify(notifyOptions) {\n notifyManager.batch(() => {\n if (notifyOptions.listeners) {\n this.listeners.forEach((listener) => {\n listener(this.#currentResult);\n });\n }\n this.#client.getQueryCache().notify({\n query: this.#currentQuery,\n type: \"observerResultsUpdated\"\n });\n });\n }\n};\nfunction shouldLoadOnMount(query, options) {\n return resolveQueryBoolean(options.enabled, query) !== false && query.state.data === void 0 && !(query.state.status === \"error\" && resolveQueryBoolean(options.retryOnMount, query) === false);\n}\nfunction shouldFetchOnMount(query, options) {\n return shouldLoadOnMount(query, options) || query.state.data !== void 0 && shouldFetchOn(query, options, options.refetchOnMount);\n}\nfunction shouldFetchOn(query, options, field) {\n if (resolveQueryBoolean(options.enabled, query) !== false && resolveStaleTime(options.staleTime, query) !== \"static\") {\n const value = typeof field === \"function\" ? field(query) : field;\n return value === \"always\" || value !== false && isStale(query, options);\n }\n return false;\n}\nfunction shouldFetchOptionally(query, prevQuery, options, prevOptions) {\n return (query !== prevQuery || resolveQueryBoolean(prevOptions.enabled, query) === false) && (!options.suspense || query.state.status !== \"error\") && isStale(query, options);\n}\nfunction isStale(query, options) {\n return resolveQueryBoolean(options.enabled, query) !== false && query.isStaleByTime(resolveStaleTime(options.staleTime, query));\n}\nfunction shouldAssignObserverCurrentProperties(observer, optimisticResult) {\n if (!shallowEqualObjects(observer.getCurrentResult(), optimisticResult)) {\n return true;\n }\n return false;\n}\nexport {\n QueryObserver\n};\n//# sourceMappingURL=queryObserver.js.map","\"use client\";\n\n// src/IsRestoringProvider.ts\nimport * as React from \"react\";\nvar IsRestoringContext = React.createContext(false);\nvar useIsRestoring = () => React.useContext(IsRestoringContext);\nvar IsRestoringProvider = IsRestoringContext.Provider;\nexport {\n IsRestoringProvider,\n useIsRestoring\n};\n//# sourceMappingURL=IsRestoringProvider.js.map","\"use client\";\n\n// src/QueryErrorResetBoundary.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createValue() {\n let isReset = false;\n return {\n clearReset: () => {\n isReset = false;\n },\n reset: () => {\n isReset = true;\n },\n isReset: () => {\n return isReset;\n }\n };\n}\nvar QueryErrorResetBoundaryContext = React.createContext(createValue());\nvar useQueryErrorResetBoundary = () => React.useContext(QueryErrorResetBoundaryContext);\nvar QueryErrorResetBoundary = ({\n children\n}) => {\n const [value] = React.useState(() => createValue());\n return /* @__PURE__ */ jsx(QueryErrorResetBoundaryContext.Provider, { value, children: typeof children === \"function\" ? children(value) : children });\n};\nexport {\n QueryErrorResetBoundary,\n useQueryErrorResetBoundary\n};\n//# sourceMappingURL=QueryErrorResetBoundary.js.map","\"use client\";\n\n// src/errorBoundaryUtils.ts\nimport * as React from \"react\";\nimport { shouldThrowError } from \"@tanstack/query-core\";\nvar ensurePreventErrorBoundaryRetry = (options, errorResetBoundary, query) => {\n const throwOnError = query?.state.error && typeof options.throwOnError === \"function\" ? shouldThrowError(options.throwOnError, [query.state.error, query]) : options.throwOnError;\n if (options.suspense || options.experimental_prefetchInRender || throwOnError) {\n if (!errorResetBoundary.isReset()) {\n options.retryOnMount = false;\n }\n }\n};\nvar useClearResetErrorBoundary = (errorResetBoundary) => {\n React.useEffect(() => {\n errorResetBoundary.clearReset();\n }, [errorResetBoundary]);\n};\nvar getHasError = ({\n result,\n errorResetBoundary,\n throwOnError,\n query,\n suspense\n}) => {\n return result.isError && !errorResetBoundary.isReset() && !result.isFetching && query && (suspense && result.data === void 0 || shouldThrowError(throwOnError, [result.error, query]));\n};\nexport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary\n};\n//# sourceMappingURL=errorBoundaryUtils.js.map","// src/suspense.ts\nvar defaultThrowOnError = (_error, query) => query.state.data === void 0;\nvar ensureSuspenseTimers = (defaultedOptions) => {\n if (defaultedOptions.suspense) {\n const MIN_SUSPENSE_TIME_MS = 1e3;\n const clamp = (value) => value === \"static\" ? value : Math.max(value ?? MIN_SUSPENSE_TIME_MS, MIN_SUSPENSE_TIME_MS);\n const originalStaleTime = defaultedOptions.staleTime;\n defaultedOptions.staleTime = typeof originalStaleTime === \"function\" ? (...args) => clamp(originalStaleTime(...args)) : clamp(originalStaleTime);\n if (typeof defaultedOptions.gcTime === \"number\") {\n defaultedOptions.gcTime = Math.max(\n defaultedOptions.gcTime,\n MIN_SUSPENSE_TIME_MS\n );\n }\n }\n};\nvar willFetch = (result, isRestoring) => result.isLoading && result.isFetching && !isRestoring;\nvar shouldSuspend = (defaultedOptions, result) => defaultedOptions?.suspense && result.isPending;\nvar fetchOptimistic = (defaultedOptions, observer, errorResetBoundary) => observer.fetchOptimistic(defaultedOptions).catch(() => {\n errorResetBoundary.clearReset();\n});\nexport {\n defaultThrowOnError,\n ensureSuspenseTimers,\n fetchOptimistic,\n shouldSuspend,\n willFetch\n};\n//# sourceMappingURL=suspense.js.map","\"use client\";\n\n// src/useBaseQuery.ts\nimport * as React from \"react\";\nimport { environmentManager, noop, notifyManager } from \"@tanstack/query-core\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nimport { useQueryErrorResetBoundary } from \"./QueryErrorResetBoundary.js\";\nimport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary\n} from \"./errorBoundaryUtils.js\";\nimport { useIsRestoring } from \"./IsRestoringProvider.js\";\nimport {\n ensureSuspenseTimers,\n fetchOptimistic,\n shouldSuspend,\n willFetch\n} from \"./suspense.js\";\nfunction useBaseQuery(options, Observer, queryClient) {\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof options !== \"object\" || Array.isArray(options)) {\n throw new Error(\n 'Bad argument type. Starting with v5, only the \"Object\" form is allowed when calling query related functions. Please use the error stack to find the culprit call. More info here: https://tanstack.com/query/latest/docs/react/guides/migrating-to-v5#supports-a-single-signature-one-object'\n );\n }\n }\n const isRestoring = useIsRestoring();\n const errorResetBoundary = useQueryErrorResetBoundary();\n const client = useQueryClient(queryClient);\n const defaultedOptions = client.defaultQueryOptions(options);\n client.getDefaultOptions().queries?._experimental_beforeQuery?.(\n defaultedOptions\n );\n const query = client.getQueryCache().get(defaultedOptions.queryHash);\n if (process.env.NODE_ENV !== \"production\") {\n if (!defaultedOptions.queryFn) {\n console.error(\n `[${defaultedOptions.queryHash}]: No queryFn was passed as an option, and no default queryFn was found. The queryFn parameter is only optional when using a default queryFn. More info here: https://tanstack.com/query/latest/docs/framework/react/guides/default-query-function`\n );\n }\n }\n const subscribed = options.subscribed !== false;\n defaultedOptions._optimisticResults = isRestoring ? \"isRestoring\" : subscribed ? \"optimistic\" : void 0;\n ensureSuspenseTimers(defaultedOptions);\n ensurePreventErrorBoundaryRetry(defaultedOptions, errorResetBoundary, query);\n useClearResetErrorBoundary(errorResetBoundary);\n const isNewCacheEntry = !client.getQueryCache().get(defaultedOptions.queryHash);\n const [observer] = React.useState(\n () => new Observer(\n client,\n defaultedOptions\n )\n );\n const result = observer.getOptimisticResult(defaultedOptions);\n const shouldSubscribe = !isRestoring && subscribed;\n React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) => {\n const unsubscribe = shouldSubscribe ? observer.subscribe(notifyManager.batchCalls(onStoreChange)) : noop;\n observer.updateResult();\n return unsubscribe;\n },\n [observer, shouldSubscribe]\n ),\n () => observer.getCurrentResult(),\n () => observer.getCurrentResult()\n );\n React.useEffect(() => {\n observer.setOptions(defaultedOptions);\n }, [defaultedOptions, observer]);\n if (shouldSuspend(defaultedOptions, result)) {\n throw fetchOptimistic(defaultedOptions, observer, errorResetBoundary);\n }\n if (getHasError({\n result,\n errorResetBoundary,\n throwOnError: defaultedOptions.throwOnError,\n query,\n suspense: defaultedOptions.suspense\n })) {\n throw result.error;\n }\n ;\n client.getDefaultOptions().queries?._experimental_afterQuery?.(\n defaultedOptions,\n result\n );\n if (defaultedOptions.experimental_prefetchInRender && !environmentManager.isServer() && willFetch(result, isRestoring)) {\n const promise = isNewCacheEntry ? (\n // Fetch immediately on render in order to ensure `.promise` is resolved even if the component is unmounted\n fetchOptimistic(defaultedOptions, observer, errorResetBoundary)\n ) : (\n // subscribe to the \"cache promise\" so that we can finalize the currentThenable once data comes in\n query?.promise\n );\n promise?.catch(noop).finally(() => {\n observer.updateResult();\n });\n }\n return !defaultedOptions.notifyOnChangeProps ? observer.trackResult(result) : result;\n}\nexport {\n useBaseQuery\n};\n//# sourceMappingURL=useBaseQuery.js.map","\"use client\";\n\n// src/useQuery.ts\nimport { QueryObserver } from \"@tanstack/query-core\";\nimport { useBaseQuery } from \"./useBaseQuery.js\";\nfunction useQuery(options, queryClient) {\n return useBaseQuery(options, QueryObserver, queryClient);\n}\nexport {\n useQuery\n};\n//# sourceMappingURL=useQuery.js.map"],"names":["QueryObserver","Subscribable","client","options","#client","#selectError","#currentThenable","pendingThenable","#currentQuery","#currentQueryInitialState","#currentResult","#currentResultState","#currentResultOptions","#selectFn","#selectResult","#lastQueryWithDefinedData","#staleTimeoutId","#refetchIntervalId","#currentRefetchInterval","#trackedProps","shouldFetchOnMount","#executeFetch","#updateTimers","shouldFetchOn","#clearStaleTimeout","#clearRefetchInterval","prevOptions","prevQuery","resolveQueryBoolean","#updateQuery","shallowEqualObjects","mounted","shouldFetchOptionally","resolveStaleTime","#updateStaleTimeout","nextRefetchInterval","#computeRefetchInterval","#updateRefetchInterval","query","result","shouldAssignObserverCurrentProperties","onPropTracked","target","key","defaultedOptions","fetchOptions","promise","noop","staleTime","environmentManager","isValidTimeout","timeout","timeUntilStale","timeoutManager","nextInterval","focusManager","prevResult","prevResultState","prevResultOptions","queryInitialState","state","newState","isPlaceholderData","data","fetchOnMount","fetchOptionally","fetchState","error","errorUpdatedAt","status","skipSelect","placeholderData","replaceData","selectError","isFetching","isPending","isError","isLoading","hasData","nextResult","isStale","hasResultData","isErrorWithoutData","finalizeThenableIfPossible","thenable","recreateThenable","pending","prevThenable","shouldNotifyListeners","notifyOnChangeProps","notifyOnChangePropsValue","includedProps","typedKey","#notify","notifyOptions","notifyManager","listener","shouldLoadOnMount","field","value","observer","optimisticResult","IsRestoringContext","React.createContext","useIsRestoring","React.useContext","createValue","isReset","QueryErrorResetBoundaryContext","useQueryErrorResetBoundary","ensurePreventErrorBoundaryRetry","errorResetBoundary","throwOnError","shouldThrowError","useClearResetErrorBoundary","React.useEffect","getHasError","suspense","ensureSuspenseTimers","clamp","originalStaleTime","args","willFetch","isRestoring","shouldSuspend","fetchOptimistic","useBaseQuery","Observer","queryClient","useQueryClient","subscribed","isNewCacheEntry","React.useState","shouldSubscribe","React.useSyncExternalStore","React.useCallback","onStoreChange","unsubscribe","useQuery"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6]}
1
+ {"version":3,"file":"useQuery-II-YwTUw.js","sources":["../../node_modules/@tanstack/query-core/build/modern/queryObserver.js","../../node_modules/@tanstack/react-query/build/modern/IsRestoringProvider.js","../../node_modules/@tanstack/react-query/build/modern/QueryErrorResetBoundary.js","../../node_modules/@tanstack/react-query/build/modern/errorBoundaryUtils.js","../../node_modules/@tanstack/react-query/build/modern/suspense.js","../../node_modules/@tanstack/react-query/build/modern/useBaseQuery.js","../../node_modules/@tanstack/react-query/build/modern/useQuery.js"],"sourcesContent":["// src/queryObserver.ts\nimport { focusManager } from \"./focusManager.js\";\nimport { environmentManager } from \"./environmentManager.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { fetchState } from \"./query.js\";\nimport { Subscribable } from \"./subscribable.js\";\nimport { pendingThenable } from \"./thenable.js\";\nimport {\n isValidTimeout,\n noop,\n replaceData,\n resolveQueryBoolean,\n resolveStaleTime,\n shallowEqualObjects,\n timeUntilStale\n} from \"./utils.js\";\nimport { timeoutManager } from \"./timeoutManager.js\";\nvar QueryObserver = class extends Subscribable {\n constructor(client, options) {\n super();\n this.options = options;\n this.#client = client;\n this.#selectError = null;\n this.#currentThenable = pendingThenable();\n this.bindMethods();\n this.setOptions(options);\n }\n #client;\n #currentQuery = void 0;\n #currentQueryInitialState = void 0;\n #currentResult = void 0;\n #currentResultState;\n #currentResultOptions;\n #currentThenable;\n #selectError;\n #selectFn;\n #selectResult;\n // This property keeps track of the last query with defined data.\n // It will be used to pass the previous data and query to the placeholder function between renders.\n #lastQueryWithDefinedData;\n #staleTimeoutId;\n #refetchIntervalId;\n #currentRefetchInterval;\n #trackedProps = /* @__PURE__ */ new Set();\n bindMethods() {\n this.refetch = this.refetch.bind(this);\n }\n onSubscribe() {\n if (this.listeners.size === 1) {\n this.#currentQuery.addObserver(this);\n if (shouldFetchOnMount(this.#currentQuery, this.options)) {\n this.#executeFetch();\n } else {\n this.updateResult();\n }\n this.#updateTimers();\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.destroy();\n }\n }\n shouldFetchOnReconnect() {\n return shouldFetchOn(\n this.#currentQuery,\n this.options,\n this.options.refetchOnReconnect\n );\n }\n shouldFetchOnWindowFocus() {\n return shouldFetchOn(\n this.#currentQuery,\n this.options,\n this.options.refetchOnWindowFocus\n );\n }\n destroy() {\n this.listeners = /* @__PURE__ */ new Set();\n this.#clearStaleTimeout();\n this.#clearRefetchInterval();\n this.#currentQuery.removeObserver(this);\n }\n setOptions(options) {\n const prevOptions = this.options;\n const prevQuery = this.#currentQuery;\n this.options = this.#client.defaultQueryOptions(options);\n if (this.options.enabled !== void 0 && typeof this.options.enabled !== \"boolean\" && typeof this.options.enabled !== \"function\" && typeof resolveQueryBoolean(this.options.enabled, this.#currentQuery) !== \"boolean\") {\n throw new Error(\n \"Expected enabled to be a boolean or a callback that returns a boolean\"\n );\n }\n this.#updateQuery();\n this.#currentQuery.setOptions(this.options);\n if (prevOptions._defaulted && !shallowEqualObjects(this.options, prevOptions)) {\n this.#client.getQueryCache().notify({\n type: \"observerOptionsUpdated\",\n query: this.#currentQuery,\n observer: this\n });\n }\n const mounted = this.hasListeners();\n if (mounted && shouldFetchOptionally(\n this.#currentQuery,\n prevQuery,\n this.options,\n prevOptions\n )) {\n this.#executeFetch();\n }\n this.updateResult();\n if (mounted && (this.#currentQuery !== prevQuery || resolveQueryBoolean(this.options.enabled, this.#currentQuery) !== resolveQueryBoolean(prevOptions.enabled, this.#currentQuery) || resolveStaleTime(this.options.staleTime, this.#currentQuery) !== resolveStaleTime(prevOptions.staleTime, this.#currentQuery))) {\n this.#updateStaleTimeout();\n }\n const nextRefetchInterval = this.#computeRefetchInterval();\n if (mounted && (this.#currentQuery !== prevQuery || resolveQueryBoolean(this.options.enabled, this.#currentQuery) !== resolveQueryBoolean(prevOptions.enabled, this.#currentQuery) || nextRefetchInterval !== this.#currentRefetchInterval)) {\n this.#updateRefetchInterval(nextRefetchInterval);\n }\n }\n getOptimisticResult(options) {\n const query = this.#client.getQueryCache().build(this.#client, options);\n const result = this.createResult(query, options);\n if (shouldAssignObserverCurrentProperties(this, result)) {\n this.#currentResult = result;\n this.#currentResultOptions = this.options;\n this.#currentResultState = this.#currentQuery.state;\n }\n return result;\n }\n getCurrentResult() {\n return this.#currentResult;\n }\n trackResult(result, onPropTracked) {\n return new Proxy(result, {\n get: (target, key) => {\n this.trackProp(key);\n onPropTracked?.(key);\n if (key === \"promise\") {\n this.trackProp(\"data\");\n if (!this.options.experimental_prefetchInRender && this.#currentThenable.status === \"pending\") {\n this.#currentThenable.reject(\n new Error(\n \"experimental_prefetchInRender feature flag is not enabled\"\n )\n );\n }\n }\n return Reflect.get(target, key);\n }\n });\n }\n trackProp(key) {\n this.#trackedProps.add(key);\n }\n getCurrentQuery() {\n return this.#currentQuery;\n }\n refetch({ ...options } = {}) {\n return this.fetch({\n ...options\n });\n }\n fetchOptimistic(options) {\n const defaultedOptions = this.#client.defaultQueryOptions(options);\n const query = this.#client.getQueryCache().build(this.#client, defaultedOptions);\n return query.fetch().then(() => this.createResult(query, defaultedOptions));\n }\n fetch(fetchOptions) {\n return this.#executeFetch({\n ...fetchOptions,\n cancelRefetch: fetchOptions.cancelRefetch ?? true\n }).then(() => {\n this.updateResult();\n return this.#currentResult;\n });\n }\n #executeFetch(fetchOptions) {\n this.#updateQuery();\n let promise = this.#currentQuery.fetch(\n this.options,\n fetchOptions\n );\n if (!fetchOptions?.throwOnError) {\n promise = promise.catch(noop);\n }\n return promise;\n }\n #updateStaleTimeout() {\n this.#clearStaleTimeout();\n const staleTime = resolveStaleTime(\n this.options.staleTime,\n this.#currentQuery\n );\n if (environmentManager.isServer() || this.#currentResult.isStale || !isValidTimeout(staleTime)) {\n return;\n }\n const time = timeUntilStale(this.#currentResult.dataUpdatedAt, staleTime);\n const timeout = time + 1;\n this.#staleTimeoutId = timeoutManager.setTimeout(() => {\n if (!this.#currentResult.isStale) {\n this.updateResult();\n }\n }, timeout);\n }\n #computeRefetchInterval() {\n return (typeof this.options.refetchInterval === \"function\" ? this.options.refetchInterval(this.#currentQuery) : this.options.refetchInterval) ?? false;\n }\n #updateRefetchInterval(nextInterval) {\n this.#clearRefetchInterval();\n this.#currentRefetchInterval = nextInterval;\n if (environmentManager.isServer() || resolveQueryBoolean(this.options.enabled, this.#currentQuery) === false || !isValidTimeout(this.#currentRefetchInterval) || this.#currentRefetchInterval === 0) {\n return;\n }\n this.#refetchIntervalId = timeoutManager.setInterval(() => {\n if (this.options.refetchIntervalInBackground || focusManager.isFocused()) {\n this.#executeFetch();\n }\n }, this.#currentRefetchInterval);\n }\n #updateTimers() {\n this.#updateStaleTimeout();\n this.#updateRefetchInterval(this.#computeRefetchInterval());\n }\n #clearStaleTimeout() {\n if (this.#staleTimeoutId !== void 0) {\n timeoutManager.clearTimeout(this.#staleTimeoutId);\n this.#staleTimeoutId = void 0;\n }\n }\n #clearRefetchInterval() {\n if (this.#refetchIntervalId !== void 0) {\n timeoutManager.clearInterval(this.#refetchIntervalId);\n this.#refetchIntervalId = void 0;\n }\n }\n createResult(query, options) {\n const prevQuery = this.#currentQuery;\n const prevOptions = this.options;\n const prevResult = this.#currentResult;\n const prevResultState = this.#currentResultState;\n const prevResultOptions = this.#currentResultOptions;\n const queryChange = query !== prevQuery;\n const queryInitialState = queryChange ? query.state : this.#currentQueryInitialState;\n const { state } = query;\n let newState = { ...state };\n let isPlaceholderData = false;\n let data;\n if (options._optimisticResults) {\n const mounted = this.hasListeners();\n const fetchOnMount = !mounted && shouldFetchOnMount(query, options);\n const fetchOptionally = mounted && shouldFetchOptionally(query, prevQuery, options, prevOptions);\n if (fetchOnMount || fetchOptionally) {\n newState = {\n ...newState,\n ...fetchState(state.data, query.options)\n };\n }\n if (options._optimisticResults === \"isRestoring\") {\n newState.fetchStatus = \"idle\";\n }\n }\n let { error, errorUpdatedAt, status } = newState;\n data = newState.data;\n let skipSelect = false;\n if (options.placeholderData !== void 0 && data === void 0 && status === \"pending\") {\n let placeholderData;\n if (prevResult?.isPlaceholderData && options.placeholderData === prevResultOptions?.placeholderData) {\n placeholderData = prevResult.data;\n skipSelect = true;\n } else {\n placeholderData = typeof options.placeholderData === \"function\" ? options.placeholderData(\n this.#lastQueryWithDefinedData?.state.data,\n this.#lastQueryWithDefinedData\n ) : options.placeholderData;\n }\n if (placeholderData !== void 0) {\n status = \"success\";\n data = replaceData(\n prevResult?.data,\n placeholderData,\n options\n );\n isPlaceholderData = true;\n }\n }\n if (options.select && data !== void 0 && !skipSelect) {\n if (prevResult && data === prevResultState?.data && options.select === this.#selectFn) {\n data = this.#selectResult;\n } else {\n try {\n this.#selectFn = options.select;\n data = options.select(data);\n data = replaceData(prevResult?.data, data, options);\n this.#selectResult = data;\n this.#selectError = null;\n } catch (selectError) {\n this.#selectError = selectError;\n }\n }\n }\n if (this.#selectError) {\n error = this.#selectError;\n data = this.#selectResult;\n errorUpdatedAt = Date.now();\n status = \"error\";\n }\n const isFetching = newState.fetchStatus === \"fetching\";\n const isPending = status === \"pending\";\n const isError = status === \"error\";\n const isLoading = isPending && isFetching;\n const hasData = data !== void 0;\n const result = {\n status,\n fetchStatus: newState.fetchStatus,\n isPending,\n isSuccess: status === \"success\",\n isError,\n isInitialLoading: isLoading,\n isLoading,\n data,\n dataUpdatedAt: newState.dataUpdatedAt,\n error,\n errorUpdatedAt,\n failureCount: newState.fetchFailureCount,\n failureReason: newState.fetchFailureReason,\n errorUpdateCount: newState.errorUpdateCount,\n isFetched: query.isFetched(),\n isFetchedAfterMount: newState.dataUpdateCount > queryInitialState.dataUpdateCount || newState.errorUpdateCount > queryInitialState.errorUpdateCount,\n isFetching,\n isRefetching: isFetching && !isPending,\n isLoadingError: isError && !hasData,\n isPaused: newState.fetchStatus === \"paused\",\n isPlaceholderData,\n isRefetchError: isError && hasData,\n isStale: isStale(query, options),\n refetch: this.refetch,\n promise: this.#currentThenable,\n isEnabled: resolveQueryBoolean(options.enabled, query) !== false\n };\n const nextResult = result;\n if (this.options.experimental_prefetchInRender) {\n const hasResultData = nextResult.data !== void 0;\n const isErrorWithoutData = nextResult.status === \"error\" && !hasResultData;\n const finalizeThenableIfPossible = (thenable) => {\n if (isErrorWithoutData) {\n thenable.reject(nextResult.error);\n } else if (hasResultData) {\n thenable.resolve(nextResult.data);\n }\n };\n const recreateThenable = () => {\n const pending = this.#currentThenable = nextResult.promise = pendingThenable();\n finalizeThenableIfPossible(pending);\n };\n const prevThenable = this.#currentThenable;\n switch (prevThenable.status) {\n case \"pending\":\n if (query.queryHash === prevQuery.queryHash) {\n finalizeThenableIfPossible(prevThenable);\n }\n break;\n case \"fulfilled\":\n if (isErrorWithoutData || nextResult.data !== prevThenable.value) {\n recreateThenable();\n }\n break;\n case \"rejected\":\n if (!isErrorWithoutData || nextResult.error !== prevThenable.reason) {\n recreateThenable();\n }\n break;\n }\n }\n return nextResult;\n }\n updateResult() {\n const prevResult = this.#currentResult;\n const nextResult = this.createResult(this.#currentQuery, this.options);\n this.#currentResultState = this.#currentQuery.state;\n this.#currentResultOptions = this.options;\n if (this.#currentResultState.data !== void 0) {\n this.#lastQueryWithDefinedData = this.#currentQuery;\n }\n if (shallowEqualObjects(nextResult, prevResult)) {\n return;\n }\n this.#currentResult = nextResult;\n const shouldNotifyListeners = () => {\n if (!prevResult) {\n return true;\n }\n const { notifyOnChangeProps } = this.options;\n const notifyOnChangePropsValue = typeof notifyOnChangeProps === \"function\" ? notifyOnChangeProps() : notifyOnChangeProps;\n if (notifyOnChangePropsValue === \"all\" || !notifyOnChangePropsValue && !this.#trackedProps.size) {\n return true;\n }\n const includedProps = new Set(\n notifyOnChangePropsValue ?? this.#trackedProps\n );\n if (this.options.throwOnError) {\n includedProps.add(\"error\");\n }\n return Object.keys(this.#currentResult).some((key) => {\n const typedKey = key;\n const changed = this.#currentResult[typedKey] !== prevResult[typedKey];\n return changed && includedProps.has(typedKey);\n });\n };\n this.#notify({ listeners: shouldNotifyListeners() });\n }\n #updateQuery() {\n const query = this.#client.getQueryCache().build(this.#client, this.options);\n if (query === this.#currentQuery) {\n return;\n }\n const prevQuery = this.#currentQuery;\n this.#currentQuery = query;\n this.#currentQueryInitialState = query.state;\n if (this.hasListeners()) {\n prevQuery?.removeObserver(this);\n query.addObserver(this);\n }\n }\n onQueryUpdate() {\n this.updateResult();\n if (this.hasListeners()) {\n this.#updateTimers();\n }\n }\n #notify(notifyOptions) {\n notifyManager.batch(() => {\n if (notifyOptions.listeners) {\n this.listeners.forEach((listener) => {\n listener(this.#currentResult);\n });\n }\n this.#client.getQueryCache().notify({\n query: this.#currentQuery,\n type: \"observerResultsUpdated\"\n });\n });\n }\n};\nfunction shouldLoadOnMount(query, options) {\n return resolveQueryBoolean(options.enabled, query) !== false && query.state.data === void 0 && !(query.state.status === \"error\" && resolveQueryBoolean(options.retryOnMount, query) === false);\n}\nfunction shouldFetchOnMount(query, options) {\n return shouldLoadOnMount(query, options) || query.state.data !== void 0 && shouldFetchOn(query, options, options.refetchOnMount);\n}\nfunction shouldFetchOn(query, options, field) {\n if (resolveQueryBoolean(options.enabled, query) !== false && resolveStaleTime(options.staleTime, query) !== \"static\") {\n const value = typeof field === \"function\" ? field(query) : field;\n return value === \"always\" || value !== false && isStale(query, options);\n }\n return false;\n}\nfunction shouldFetchOptionally(query, prevQuery, options, prevOptions) {\n return (query !== prevQuery || resolveQueryBoolean(prevOptions.enabled, query) === false) && (!options.suspense || query.state.status !== \"error\") && isStale(query, options);\n}\nfunction isStale(query, options) {\n return resolveQueryBoolean(options.enabled, query) !== false && query.isStaleByTime(resolveStaleTime(options.staleTime, query));\n}\nfunction shouldAssignObserverCurrentProperties(observer, optimisticResult) {\n if (!shallowEqualObjects(observer.getCurrentResult(), optimisticResult)) {\n return true;\n }\n return false;\n}\nexport {\n QueryObserver\n};\n//# sourceMappingURL=queryObserver.js.map","\"use client\";\n\n// src/IsRestoringProvider.ts\nimport * as React from \"react\";\nvar IsRestoringContext = React.createContext(false);\nvar useIsRestoring = () => React.useContext(IsRestoringContext);\nvar IsRestoringProvider = IsRestoringContext.Provider;\nexport {\n IsRestoringProvider,\n useIsRestoring\n};\n//# sourceMappingURL=IsRestoringProvider.js.map","\"use client\";\n\n// src/QueryErrorResetBoundary.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createValue() {\n let isReset = false;\n return {\n clearReset: () => {\n isReset = false;\n },\n reset: () => {\n isReset = true;\n },\n isReset: () => {\n return isReset;\n }\n };\n}\nvar QueryErrorResetBoundaryContext = React.createContext(createValue());\nvar useQueryErrorResetBoundary = () => React.useContext(QueryErrorResetBoundaryContext);\nvar QueryErrorResetBoundary = ({\n children\n}) => {\n const [value] = React.useState(() => createValue());\n return /* @__PURE__ */ jsx(QueryErrorResetBoundaryContext.Provider, { value, children: typeof children === \"function\" ? children(value) : children });\n};\nexport {\n QueryErrorResetBoundary,\n useQueryErrorResetBoundary\n};\n//# sourceMappingURL=QueryErrorResetBoundary.js.map","\"use client\";\n\n// src/errorBoundaryUtils.ts\nimport * as React from \"react\";\nimport { shouldThrowError } from \"@tanstack/query-core\";\nvar ensurePreventErrorBoundaryRetry = (options, errorResetBoundary, query) => {\n const throwOnError = query?.state.error && typeof options.throwOnError === \"function\" ? shouldThrowError(options.throwOnError, [query.state.error, query]) : options.throwOnError;\n if (options.suspense || options.experimental_prefetchInRender || throwOnError) {\n if (!errorResetBoundary.isReset()) {\n options.retryOnMount = false;\n }\n }\n};\nvar useClearResetErrorBoundary = (errorResetBoundary) => {\n React.useEffect(() => {\n errorResetBoundary.clearReset();\n }, [errorResetBoundary]);\n};\nvar getHasError = ({\n result,\n errorResetBoundary,\n throwOnError,\n query,\n suspense\n}) => {\n return result.isError && !errorResetBoundary.isReset() && !result.isFetching && query && (suspense && result.data === void 0 || shouldThrowError(throwOnError, [result.error, query]));\n};\nexport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary\n};\n//# sourceMappingURL=errorBoundaryUtils.js.map","// src/suspense.ts\nvar defaultThrowOnError = (_error, query) => query.state.data === void 0;\nvar ensureSuspenseTimers = (defaultedOptions) => {\n if (defaultedOptions.suspense) {\n const MIN_SUSPENSE_TIME_MS = 1e3;\n const clamp = (value) => value === \"static\" ? value : Math.max(value ?? MIN_SUSPENSE_TIME_MS, MIN_SUSPENSE_TIME_MS);\n const originalStaleTime = defaultedOptions.staleTime;\n defaultedOptions.staleTime = typeof originalStaleTime === \"function\" ? (...args) => clamp(originalStaleTime(...args)) : clamp(originalStaleTime);\n if (typeof defaultedOptions.gcTime === \"number\") {\n defaultedOptions.gcTime = Math.max(\n defaultedOptions.gcTime,\n MIN_SUSPENSE_TIME_MS\n );\n }\n }\n};\nvar willFetch = (result, isRestoring) => result.isLoading && result.isFetching && !isRestoring;\nvar shouldSuspend = (defaultedOptions, result) => defaultedOptions?.suspense && result.isPending;\nvar fetchOptimistic = (defaultedOptions, observer, errorResetBoundary) => observer.fetchOptimistic(defaultedOptions).catch(() => {\n errorResetBoundary.clearReset();\n});\nexport {\n defaultThrowOnError,\n ensureSuspenseTimers,\n fetchOptimistic,\n shouldSuspend,\n willFetch\n};\n//# sourceMappingURL=suspense.js.map","\"use client\";\n\n// src/useBaseQuery.ts\nimport * as React from \"react\";\nimport { environmentManager, noop, notifyManager } from \"@tanstack/query-core\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nimport { useQueryErrorResetBoundary } from \"./QueryErrorResetBoundary.js\";\nimport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary\n} from \"./errorBoundaryUtils.js\";\nimport { useIsRestoring } from \"./IsRestoringProvider.js\";\nimport {\n ensureSuspenseTimers,\n fetchOptimistic,\n shouldSuspend,\n willFetch\n} from \"./suspense.js\";\nfunction useBaseQuery(options, Observer, queryClient) {\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof options !== \"object\" || Array.isArray(options)) {\n throw new Error(\n 'Bad argument type. Starting with v5, only the \"Object\" form is allowed when calling query related functions. Please use the error stack to find the culprit call. More info here: https://tanstack.com/query/latest/docs/react/guides/migrating-to-v5#supports-a-single-signature-one-object'\n );\n }\n }\n const isRestoring = useIsRestoring();\n const errorResetBoundary = useQueryErrorResetBoundary();\n const client = useQueryClient(queryClient);\n const defaultedOptions = client.defaultQueryOptions(options);\n client.getDefaultOptions().queries?._experimental_beforeQuery?.(\n defaultedOptions\n );\n const query = client.getQueryCache().get(defaultedOptions.queryHash);\n if (process.env.NODE_ENV !== \"production\") {\n if (!defaultedOptions.queryFn) {\n console.error(\n `[${defaultedOptions.queryHash}]: No queryFn was passed as an option, and no default queryFn was found. The queryFn parameter is only optional when using a default queryFn. More info here: https://tanstack.com/query/latest/docs/framework/react/guides/default-query-function`\n );\n }\n }\n const subscribed = options.subscribed !== false;\n defaultedOptions._optimisticResults = isRestoring ? \"isRestoring\" : subscribed ? \"optimistic\" : void 0;\n ensureSuspenseTimers(defaultedOptions);\n ensurePreventErrorBoundaryRetry(defaultedOptions, errorResetBoundary, query);\n useClearResetErrorBoundary(errorResetBoundary);\n const isNewCacheEntry = !client.getQueryCache().get(defaultedOptions.queryHash);\n const [observer] = React.useState(\n () => new Observer(\n client,\n defaultedOptions\n )\n );\n const result = observer.getOptimisticResult(defaultedOptions);\n const shouldSubscribe = !isRestoring && subscribed;\n React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) => {\n const unsubscribe = shouldSubscribe ? observer.subscribe(notifyManager.batchCalls(onStoreChange)) : noop;\n observer.updateResult();\n return unsubscribe;\n },\n [observer, shouldSubscribe]\n ),\n () => observer.getCurrentResult(),\n () => observer.getCurrentResult()\n );\n React.useEffect(() => {\n observer.setOptions(defaultedOptions);\n }, [defaultedOptions, observer]);\n if (shouldSuspend(defaultedOptions, result)) {\n throw fetchOptimistic(defaultedOptions, observer, errorResetBoundary);\n }\n if (getHasError({\n result,\n errorResetBoundary,\n throwOnError: defaultedOptions.throwOnError,\n query,\n suspense: defaultedOptions.suspense\n })) {\n throw result.error;\n }\n ;\n client.getDefaultOptions().queries?._experimental_afterQuery?.(\n defaultedOptions,\n result\n );\n if (defaultedOptions.experimental_prefetchInRender && !environmentManager.isServer() && willFetch(result, isRestoring)) {\n const promise = isNewCacheEntry ? (\n // Fetch immediately on render in order to ensure `.promise` is resolved even if the component is unmounted\n fetchOptimistic(defaultedOptions, observer, errorResetBoundary)\n ) : (\n // subscribe to the \"cache promise\" so that we can finalize the currentThenable once data comes in\n query?.promise\n );\n promise?.catch(noop).finally(() => {\n observer.updateResult();\n });\n }\n return !defaultedOptions.notifyOnChangeProps ? observer.trackResult(result) : result;\n}\nexport {\n useBaseQuery\n};\n//# sourceMappingURL=useBaseQuery.js.map","\"use client\";\n\n// src/useQuery.ts\nimport { QueryObserver } from \"@tanstack/query-core\";\nimport { useBaseQuery } from \"./useBaseQuery.js\";\nfunction useQuery(options, queryClient) {\n return useBaseQuery(options, QueryObserver, queryClient);\n}\nexport {\n useQuery\n};\n//# sourceMappingURL=useQuery.js.map"],"names":["QueryObserver","Subscribable","client","options","#client","#selectError","#currentThenable","pendingThenable","#currentQuery","#currentQueryInitialState","#currentResult","#currentResultState","#currentResultOptions","#selectFn","#selectResult","#lastQueryWithDefinedData","#staleTimeoutId","#refetchIntervalId","#currentRefetchInterval","#trackedProps","shouldFetchOnMount","#executeFetch","#updateTimers","shouldFetchOn","#clearStaleTimeout","#clearRefetchInterval","prevOptions","prevQuery","resolveQueryBoolean","#updateQuery","shallowEqualObjects","mounted","shouldFetchOptionally","resolveStaleTime","#updateStaleTimeout","nextRefetchInterval","#computeRefetchInterval","#updateRefetchInterval","query","result","shouldAssignObserverCurrentProperties","onPropTracked","target","key","defaultedOptions","fetchOptions","promise","noop","staleTime","environmentManager","isValidTimeout","timeout","timeUntilStale","timeoutManager","nextInterval","focusManager","prevResult","prevResultState","prevResultOptions","queryInitialState","state","newState","isPlaceholderData","data","fetchOnMount","fetchOptionally","fetchState","error","errorUpdatedAt","status","skipSelect","placeholderData","replaceData","selectError","isFetching","isPending","isError","isLoading","hasData","nextResult","isStale","hasResultData","isErrorWithoutData","finalizeThenableIfPossible","thenable","recreateThenable","pending","prevThenable","shouldNotifyListeners","notifyOnChangeProps","notifyOnChangePropsValue","includedProps","typedKey","#notify","notifyOptions","notifyManager","listener","shouldLoadOnMount","field","value","observer","optimisticResult","IsRestoringContext","React.createContext","useIsRestoring","React.useContext","createValue","isReset","QueryErrorResetBoundaryContext","useQueryErrorResetBoundary","ensurePreventErrorBoundaryRetry","errorResetBoundary","throwOnError","shouldThrowError","useClearResetErrorBoundary","React.useEffect","getHasError","suspense","ensureSuspenseTimers","clamp","originalStaleTime","args","willFetch","isRestoring","shouldSuspend","fetchOptimistic","useBaseQuery","Observer","queryClient","useQueryClient","subscribed","isNewCacheEntry","React.useState","shouldSubscribe","React.useSyncExternalStore","React.useCallback","onStoreChange","unsubscribe","useQuery"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6]}