agim-cli 1.3.2 → 1.3.4

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 (250) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/cli-ui/config-wizard.d.ts.map +1 -1
  3. package/dist/cli-ui/config-wizard.js +222 -98
  4. package/dist/cli-ui/config-wizard.js.map +1 -1
  5. package/dist/cli-ui/i18n.d.ts +42 -8
  6. package/dist/cli-ui/i18n.d.ts.map +1 -1
  7. package/dist/cli-ui/i18n.js +88 -16
  8. package/dist/cli-ui/i18n.js.map +1 -1
  9. package/dist/cli-ui/setup-llm.d.ts.map +1 -1
  10. package/dist/cli-ui/setup-llm.js +38 -13
  11. package/dist/cli-ui/setup-llm.js.map +1 -1
  12. package/dist/cli-ui/setup-mcp.d.ts.map +1 -1
  13. package/dist/cli-ui/setup-mcp.js +31 -2
  14. package/dist/cli-ui/setup-mcp.js.map +1 -1
  15. package/dist/cli-ui/tui/app.d.ts +4 -1
  16. package/dist/cli-ui/tui/app.d.ts.map +1 -1
  17. package/dist/cli-ui/tui/app.js +240 -6
  18. package/dist/cli-ui/tui/app.js.map +1 -1
  19. package/dist/cli-ui/tui/approval-bridge.d.ts +61 -0
  20. package/dist/cli-ui/tui/approval-bridge.d.ts.map +1 -0
  21. package/dist/cli-ui/tui/approval-bridge.js +274 -0
  22. package/dist/cli-ui/tui/approval-bridge.js.map +1 -0
  23. package/dist/cli-ui/tui/approval-view.d.ts +15 -0
  24. package/dist/cli-ui/tui/approval-view.d.ts.map +1 -0
  25. package/dist/cli-ui/tui/approval-view.js +46 -0
  26. package/dist/cli-ui/tui/approval-view.js.map +1 -0
  27. package/dist/cli-ui/tui/index.d.ts.map +1 -1
  28. package/dist/cli-ui/tui/index.js +31 -0
  29. package/dist/cli-ui/tui/index.js.map +1 -1
  30. package/dist/cli.js +56 -2
  31. package/dist/cli.js.map +1 -1
  32. package/dist/core/agent-cwd.js +1 -1
  33. package/dist/core/ask-user-rpc.d.ts +36 -14
  34. package/dist/core/ask-user-rpc.d.ts.map +1 -1
  35. package/dist/core/ask-user-rpc.js +309 -34
  36. package/dist/core/ask-user-rpc.js.map +1 -1
  37. package/dist/core/commands/builtin.d.ts.map +1 -1
  38. package/dist/core/commands/builtin.js +15 -6
  39. package/dist/core/commands/builtin.js.map +1 -1
  40. package/dist/core/llm/imhub-dispatcher.d.ts.map +1 -1
  41. package/dist/core/llm/imhub-dispatcher.js +6 -1
  42. package/dist/core/llm/imhub-dispatcher.js.map +1 -1
  43. package/dist/core/onboarding.js +2 -2
  44. package/dist/core/onboarding.js.map +1 -1
  45. package/dist/core/router.d.ts.map +1 -1
  46. package/dist/core/router.js +12 -9
  47. package/dist/core/router.js.map +1 -1
  48. package/dist/core/types.d.ts +6 -0
  49. package/dist/core/types.d.ts.map +1 -1
  50. package/dist/plugins/agents/claude-code/mcp-approval-server.d.ts +4 -0
  51. package/dist/plugins/agents/claude-code/mcp-approval-server.d.ts.map +1 -1
  52. package/dist/plugins/agents/claude-code/mcp-approval-server.js +11 -6
  53. package/dist/plugins/agents/claude-code/mcp-approval-server.js.map +1 -1
  54. package/dist/plugins/agents/native/index.js +8 -8
  55. package/dist/plugins/agents/native/index.js.map +1 -1
  56. package/dist/plugins/agents/pi-native/factory.d.ts.map +1 -1
  57. package/dist/plugins/agents/pi-native/factory.js +4 -3
  58. package/dist/plugins/agents/pi-native/factory.js.map +1 -1
  59. package/dist/web/llm-api.js +7 -4
  60. package/dist/web/llm-api.js.map +1 -1
  61. package/dist/web/public/assets/{a2a-Dtc6AKjx.js → a2a-Y30Sn8pc.js} +2 -2
  62. package/dist/web/public/assets/{a2a-Dtc6AKjx.js.map → a2a-Y30Sn8pc.js.map} +1 -1
  63. package/dist/web/public/assets/{activity-CWFI_ke7.js → activity--oN7qxFJ.js} +2 -2
  64. package/dist/web/public/assets/{activity-CWFI_ke7.js.map → activity--oN7qxFJ.js.map} +1 -1
  65. package/dist/web/public/assets/{admins-CeQorJdU.js → admins-DONiT3ld.js} +2 -2
  66. package/dist/web/public/assets/{admins-CeQorJdU.js.map → admins-DONiT3ld.js.map} +1 -1
  67. package/dist/web/public/assets/agents-DRbQOH0K.js +7 -0
  68. package/dist/web/public/assets/agents-DRbQOH0K.js.map +1 -0
  69. package/dist/web/public/assets/{approvals-BEPKSyrL.js → approvals-C5jd7Wf9.js} +2 -2
  70. package/dist/web/public/assets/{approvals-BEPKSyrL.js.map → approvals-C5jd7Wf9.js.map} +1 -1
  71. package/dist/web/public/assets/{arrow-down-CzWGZc48.js → arrow-down-x-Lq92tn.js} +2 -2
  72. package/dist/web/public/assets/{arrow-down-CzWGZc48.js.map → arrow-down-x-Lq92tn.js.map} +1 -1
  73. package/dist/web/public/assets/{arrow-up-CXy94NPi.js → arrow-up-Cc28qbjN.js} +2 -2
  74. package/dist/web/public/assets/{arrow-up-CXy94NPi.js.map → arrow-up-Cc28qbjN.js.map} +1 -1
  75. package/dist/web/public/assets/{asks-BszsbhPn.js → asks-CeVcu8SD.js} +2 -2
  76. package/dist/web/public/assets/{asks-BszsbhPn.js.map → asks-CeVcu8SD.js.map} +1 -1
  77. package/dist/web/public/assets/{audit-ACrwMizd.js → audit-Dc9_FDkW.js} +2 -2
  78. package/dist/web/public/assets/{audit-ACrwMizd.js.map → audit-Dc9_FDkW.js.map} +1 -1
  79. package/dist/web/public/assets/{bell-BLwNOhXO.js → bell-CxPf_Xzs.js} +2 -2
  80. package/dist/web/public/assets/{bell-BLwNOhXO.js.map → bell-CxPf_Xzs.js.map} +1 -1
  81. package/dist/web/public/assets/{bgjobs-Cwp0PmTF.js → bgjobs-CYjmAJgs.js} +2 -2
  82. package/dist/web/public/assets/{bgjobs-Cwp0PmTF.js.map → bgjobs-CYjmAJgs.js.map} +1 -1
  83. package/dist/web/public/assets/{brain-5AJBYzXX.js → brain-DjCfwBAT.js} +2 -2
  84. package/dist/web/public/assets/{brain-5AJBYzXX.js.map → brain-DjCfwBAT.js.map} +1 -1
  85. package/dist/web/public/assets/{briefcase-BTDurkZz.js → briefcase-Br1bd_VG.js} +2 -2
  86. package/dist/web/public/assets/{briefcase-BTDurkZz.js.map → briefcase-Br1bd_VG.js.map} +1 -1
  87. package/dist/web/public/assets/chat-uqxuXn2X.js +17 -0
  88. package/dist/web/public/assets/chat-uqxuXn2X.js.map +1 -0
  89. package/dist/web/public/assets/{chevron-left-CnLOhWHE.js → chevron-left-CN-4SIfi.js} +2 -2
  90. package/dist/web/public/assets/{chevron-left-CnLOhWHE.js.map → chevron-left-CN-4SIfi.js.map} +1 -1
  91. package/dist/web/public/assets/{chevron-right-CpWYrqTa.js → chevron-right-BhSTLH2K.js} +2 -2
  92. package/dist/web/public/assets/{chevron-right-CpWYrqTa.js.map → chevron-right-BhSTLH2K.js.map} +1 -1
  93. package/dist/web/public/assets/{circle-check-DhcTh_uP.js → circle-check-B4UdHmdJ.js} +2 -2
  94. package/dist/web/public/assets/{circle-check-DhcTh_uP.js.map → circle-check-B4UdHmdJ.js.map} +1 -1
  95. package/dist/web/public/assets/{circle-check-big-CcknUEHz.js → circle-check-big-CvXnDqiF.js} +2 -2
  96. package/dist/web/public/assets/{circle-check-big-CcknUEHz.js.map → circle-check-big-CvXnDqiF.js.map} +1 -1
  97. package/dist/web/public/assets/{circle-x-QODE2UcL.js → circle-x-B8y8mLHr.js} +2 -2
  98. package/dist/web/public/assets/{circle-x-QODE2UcL.js.map → circle-x-B8y8mLHr.js.map} +1 -1
  99. package/dist/web/public/assets/{clock-BPBx4QWT.js → clock-CK2KO_Rc.js} +2 -2
  100. package/dist/web/public/assets/{clock-BPBx4QWT.js.map → clock-CK2KO_Rc.js.map} +1 -1
  101. package/dist/web/public/assets/{confirm-dialog-HsyBgWxC.js → confirm-dialog-GZyIzSwj.js} +2 -2
  102. package/dist/web/public/assets/{confirm-dialog-HsyBgWxC.js.map → confirm-dialog-GZyIzSwj.js.map} +1 -1
  103. package/dist/web/public/assets/{copy-VJNELMp7.js → copy-CDCgL5Yq.js} +2 -2
  104. package/dist/web/public/assets/{copy-VJNELMp7.js.map → copy-CDCgL5Yq.js.map} +1 -1
  105. package/dist/web/public/assets/{data-table-C0yaCeSS.js → data-table-1cGunUIX.js} +2 -2
  106. package/dist/web/public/assets/{data-table-C0yaCeSS.js.map → data-table-1cGunUIX.js.map} +1 -1
  107. package/dist/web/public/assets/{download-EUh-RXv5.js → download-CuLP0G-q.js} +2 -2
  108. package/dist/web/public/assets/{download-EUh-RXv5.js.map → download-CuLP0G-q.js.map} +1 -1
  109. package/dist/web/public/assets/{email-YUzrp4Tf.js → email-Q-SY9qC9.js} +2 -2
  110. package/dist/web/public/assets/{email-YUzrp4Tf.js.map → email-Q-SY9qC9.js.map} +1 -1
  111. package/dist/web/public/assets/{empty-state-DoiBKL4l.js → empty-state-BRsb30K6.js} +2 -2
  112. package/dist/web/public/assets/{empty-state-DoiBKL4l.js.map → empty-state-BRsb30K6.js.map} +1 -1
  113. package/dist/web/public/assets/{external-link-Bf2430Ji.js → external-link-D-E90Kfw.js} +2 -2
  114. package/dist/web/public/assets/{external-link-Bf2430Ji.js.map → external-link-D-E90Kfw.js.map} +1 -1
  115. package/dist/web/public/assets/{eye-vE4k-Us-.js → eye-DSu_4mW2.js} +2 -2
  116. package/dist/web/public/assets/{eye-vE4k-Us-.js.map → eye-DSu_4mW2.js.map} +1 -1
  117. package/dist/web/public/assets/{facts-BPVTGzM4.js → facts-pmGTfGmv.js} +2 -2
  118. package/dist/web/public/assets/{facts-BPVTGzM4.js.map → facts-pmGTfGmv.js.map} +1 -1
  119. package/dist/web/public/assets/goals-DpRm9-av.js +17 -0
  120. package/dist/web/public/assets/goals-DpRm9-av.js.map +1 -0
  121. package/dist/web/public/assets/{health-CSMAArAj.js → health-mqoH7KDV.js} +2 -2
  122. package/dist/web/public/assets/{health-CSMAArAj.js.map → health-mqoH7KDV.js.map} +1 -1
  123. package/dist/web/public/assets/{heart-pulse-8RDC8GWv.js → heart-pulse-CrCHhXtC.js} +2 -2
  124. package/dist/web/public/assets/{heart-pulse-8RDC8GWv.js.map → heart-pulse-CrCHhXtC.js.map} +1 -1
  125. package/dist/web/public/assets/{heartbeat-BzHZy7Mx.js → heartbeat-EGjLHWU0.js} +2 -2
  126. package/dist/web/public/assets/{heartbeat-BzHZy7Mx.js.map → heartbeat-EGjLHWU0.js.map} +1 -1
  127. package/dist/web/public/assets/hot-B9x1_5yx.js +12 -0
  128. package/dist/web/public/assets/hot-B9x1_5yx.js.map +1 -0
  129. package/dist/web/public/assets/index-BIBWEKxu.js +204 -0
  130. package/dist/web/public/assets/index-BIBWEKxu.js.map +1 -0
  131. package/dist/web/public/assets/{injection-a2kkgRbT.js → injection-CDx5n-mk.js} +2 -2
  132. package/dist/web/public/assets/{injection-a2kkgRbT.js.map → injection-CDx5n-mk.js.map} +1 -1
  133. package/dist/web/public/assets/{installed-XQQEPKh8.js → installed-DV7X4wfv.js} +5 -5
  134. package/dist/web/public/assets/{installed-XQQEPKh8.js.map → installed-DV7X4wfv.js.map} +1 -1
  135. package/dist/web/public/assets/{jobs-Cby1Eq4o.js → jobs-zAigElCl.js} +2 -2
  136. package/dist/web/public/assets/{jobs-Cby1Eq4o.js.map → jobs-zAigElCl.js.map} +1 -1
  137. package/dist/web/public/assets/{layout-BdtJtlu5.js → layout-7wcifbsm.js} +2 -2
  138. package/dist/web/public/assets/{layout-BdtJtlu5.js.map → layout-7wcifbsm.js.map} +1 -1
  139. package/dist/web/public/assets/{layout-BRnEPnky.js → layout-B0RjH6M2.js} +2 -2
  140. package/dist/web/public/assets/{layout-BRnEPnky.js.map → layout-B0RjH6M2.js.map} +1 -1
  141. package/dist/web/public/assets/{layout-Gh29ouFO.js → layout-C6q-GbBZ.js} +2 -2
  142. package/dist/web/public/assets/{layout-Gh29ouFO.js.map → layout-C6q-GbBZ.js.map} +1 -1
  143. package/dist/web/public/assets/layout-CzjqlPxW.js +2 -0
  144. package/dist/web/public/assets/layout-CzjqlPxW.js.map +1 -0
  145. package/dist/web/public/assets/{layout-CbqldDRj.js → layout-DOSpVfND.js} +2 -2
  146. package/dist/web/public/assets/{layout-CbqldDRj.js.map → layout-DOSpVfND.js.map} +1 -1
  147. package/dist/web/public/assets/llm-DwZX5fwY.js +27 -0
  148. package/dist/web/public/assets/llm-DwZX5fwY.js.map +1 -0
  149. package/dist/web/public/assets/{loader-circle-DO3Ni2RJ.js → loader-circle-BQkLEJZw.js} +2 -2
  150. package/dist/web/public/assets/{loader-circle-DO3Ni2RJ.js.map → loader-circle-BQkLEJZw.js.map} +1 -1
  151. package/dist/web/public/assets/{map-pin-BsL35E1s.js → map-pin-B-IMY07m.js} +2 -2
  152. package/dist/web/public/assets/{map-pin-BsL35E1s.js.map → map-pin-B-IMY07m.js.map} +1 -1
  153. package/dist/web/public/assets/{mcp-CWMdxcBf.js → mcp-K0P3-b6q.js} +2 -2
  154. package/dist/web/public/assets/{mcp-CWMdxcBf.js.map → mcp-K0P3-b6q.js.map} +1 -1
  155. package/dist/web/public/assets/{memos-BYQa4d2t.js → memos-DcpDEVN8.js} +2 -2
  156. package/dist/web/public/assets/{memos-BYQa4d2t.js.map → memos-DcpDEVN8.js.map} +1 -1
  157. package/dist/web/public/assets/{messengers-CebazAJ1.js → messengers-DmrNvPMS.js} +2 -2
  158. package/dist/web/public/assets/{messengers-CebazAJ1.js.map → messengers-DmrNvPMS.js.map} +1 -1
  159. package/dist/web/public/assets/{mobile-CMJRNHs2.js → mobile-a-oUiAoR.js} +2 -2
  160. package/dist/web/public/assets/{mobile-CMJRNHs2.js.map → mobile-a-oUiAoR.js.map} +1 -1
  161. package/dist/web/public/assets/{network-pNcx_slv.js → network-Bbh3j5ew.js} +2 -2
  162. package/dist/web/public/assets/{network-pNcx_slv.js.map → network-Bbh3j5ew.js.map} +1 -1
  163. package/dist/web/public/assets/{outbox-87hzZQLn.js → outbox-BP_hfANb.js} +2 -2
  164. package/dist/web/public/assets/{outbox-87hzZQLn.js.map → outbox-BP_hfANb.js.map} +1 -1
  165. package/dist/web/public/assets/{pagination-C4edFAqf.js → pagination-CPLj3V0r.js} +2 -2
  166. package/dist/web/public/assets/{pagination-C4edFAqf.js.map → pagination-CPLj3V0r.js.map} +1 -1
  167. package/dist/web/public/assets/{persona-BcOT3Wms.js → persona-CT38dLd4.js} +2 -2
  168. package/dist/web/public/assets/{persona-BcOT3Wms.js.map → persona-CT38dLd4.js.map} +1 -1
  169. package/dist/web/public/assets/plans-Msw85XkI.js +12 -0
  170. package/dist/web/public/assets/plans-Msw85XkI.js.map +1 -0
  171. package/dist/web/public/assets/{play-Bzdymasn.js → play-tH2nb1Kt.js} +2 -2
  172. package/dist/web/public/assets/{play-Bzdymasn.js.map → play-tH2nb1Kt.js.map} +1 -1
  173. package/dist/web/public/assets/{plus-BxjzY9Wh.js → plus-6MNGQidu.js} +2 -2
  174. package/dist/web/public/assets/{plus-BxjzY9Wh.js.map → plus-6MNGQidu.js.map} +1 -1
  175. package/dist/web/public/assets/{policy-Be-tMZZc.js → policy-BJ7zORVG.js} +2 -2
  176. package/dist/web/public/assets/{policy-Be-tMZZc.js.map → policy-BJ7zORVG.js.map} +1 -1
  177. package/dist/web/public/assets/{qr-code-D1V5cA_X.js → qr-code-DfsxFxoa.js} +2 -2
  178. package/dist/web/public/assets/{qr-code-D1V5cA_X.js.map → qr-code-DfsxFxoa.js.map} +1 -1
  179. package/dist/web/public/assets/{refresh-ccw-BhPAzZAa.js → refresh-ccw-CFPE6zD1.js} +2 -2
  180. package/dist/web/public/assets/{refresh-ccw-BhPAzZAa.js.map → refresh-ccw-CFPE6zD1.js.map} +1 -1
  181. package/dist/web/public/assets/{reminders-DEWtrlH_.js → reminders-CAUNAuDy.js} +2 -2
  182. package/dist/web/public/assets/{reminders-DEWtrlH_.js.map → reminders-CAUNAuDy.js.map} +1 -1
  183. package/dist/web/public/assets/{save-Cye8Vlu5.js → save-CNUmUMEf.js} +2 -2
  184. package/dist/web/public/assets/{save-Cye8Vlu5.js.map → save-CNUmUMEf.js.map} +1 -1
  185. package/dist/web/public/assets/{schedules-CuqRy3t8.js → schedules-C25NyoGh.js} +2 -2
  186. package/dist/web/public/assets/{schedules-CuqRy3t8.js.map → schedules-C25NyoGh.js.map} +1 -1
  187. package/dist/web/public/assets/{search-Dot_W5Eu.js → search-CaRTqZw1.js} +2 -2
  188. package/dist/web/public/assets/{search-Dot_W5Eu.js.map → search-CaRTqZw1.js.map} +1 -1
  189. package/dist/web/public/assets/{search-BQqVArrW.js → search-D9TZs0bG.js} +2 -2
  190. package/dist/web/public/assets/{search-BQqVArrW.js.map → search-D9TZs0bG.js.map} +1 -1
  191. package/dist/web/public/assets/{security-BB-YnetQ.js → security-BMGGzEwr.js} +2 -2
  192. package/dist/web/public/assets/{security-BB-YnetQ.js.map → security-BMGGzEwr.js.map} +1 -1
  193. package/dist/web/public/assets/{service-DgkqlAtM.js → service-BQBoddcT.js} +2 -2
  194. package/dist/web/public/assets/{service-DgkqlAtM.js.map → service-BQBoddcT.js.map} +1 -1
  195. package/dist/web/public/assets/{shield-alert-CBOmgn9W.js → shield-alert-eOBoc2yc.js} +2 -2
  196. package/dist/web/public/assets/{shield-alert-CBOmgn9W.js.map → shield-alert-eOBoc2yc.js.map} +1 -1
  197. package/dist/web/public/assets/{status-badge-9sMFH4uP.js → status-badge-CF1Cya26.js} +2 -2
  198. package/dist/web/public/assets/{status-badge-9sMFH4uP.js.map → status-badge-CF1Cya26.js.map} +1 -1
  199. package/dist/web/public/assets/{subtasks-BrqdQxw_.js → subtasks-CEPB2TSV.js} +2 -2
  200. package/dist/web/public/assets/{subtasks-BrqdQxw_.js.map → subtasks-CEPB2TSV.js.map} +1 -1
  201. package/dist/web/public/assets/{table-CSHCu7pz.js → table-Dww-k14l.js} +2 -2
  202. package/dist/web/public/assets/{table-CSHCu7pz.js.map → table-Dww-k14l.js.map} +1 -1
  203. package/dist/web/public/assets/{topn-DZWbwDge.js → topn-DwgKlIxc.js} +2 -2
  204. package/dist/web/public/assets/{topn-DZWbwDge.js.map → topn-DwgKlIxc.js.map} +1 -1
  205. package/dist/web/public/assets/{trash-2-Cco09tAA.js → trash-2-BF98SY8M.js} +2 -2
  206. package/dist/web/public/assets/{trash-2-Cco09tAA.js.map → trash-2-BF98SY8M.js.map} +1 -1
  207. package/dist/web/public/assets/{use-agim-skills-CJOJKeOZ.js → use-agim-skills-kDpiSMBP.js} +2 -2
  208. package/dist/web/public/assets/{use-agim-skills-CJOJKeOZ.js.map → use-agim-skills-kDpiSMBP.js.map} +1 -1
  209. package/dist/web/public/assets/{use-background-tasks-D77bcfrq.js → use-background-tasks-B1Pxq3JU.js} +2 -2
  210. package/dist/web/public/assets/{use-background-tasks-D77bcfrq.js.map → use-background-tasks-B1Pxq3JU.js.map} +1 -1
  211. package/dist/web/public/assets/{use-memory-CX4B1SYC.js → use-memory-w-EY79Zm.js} +2 -2
  212. package/dist/web/public/assets/{use-memory-CX4B1SYC.js.map → use-memory-w-EY79Zm.js.map} +1 -1
  213. package/dist/web/public/assets/{use-observability-rcc7fRmj.js → use-observability-Cd2dUHb7.js} +2 -2
  214. package/dist/web/public/assets/{use-observability-rcc7fRmj.js.map → use-observability-Cd2dUHb7.js.map} +1 -1
  215. package/dist/web/public/assets/{use-settings-DQnJkPXp.js → use-settings-DG1rm9KU.js} +2 -2
  216. package/dist/web/public/assets/{use-settings-DQnJkPXp.js.map → use-settings-DG1rm9KU.js.map} +1 -1
  217. package/dist/web/public/assets/{use-workspace-J5eeVxw9.js → use-workspace-DvW_xOmj.js} +2 -2
  218. package/dist/web/public/assets/{use-workspace-J5eeVxw9.js.map → use-workspace-DvW_xOmj.js.map} +1 -1
  219. package/dist/web/public/assets/{vector-xRphJ8hW.js → vector-CDJ4p6UI.js} +2 -2
  220. package/dist/web/public/assets/{vector-xRphJ8hW.js.map → vector-CDJ4p6UI.js.map} +1 -1
  221. package/dist/web/public/assets/{viewer-Bq7l2kE8.js → viewer-Bje5-HtQ.js} +2 -2
  222. package/dist/web/public/assets/{viewer-Bq7l2kE8.js.map → viewer-Bje5-HtQ.js.map} +1 -1
  223. package/dist/web/public/assets/workspace-B7QYGLix.js +17 -0
  224. package/dist/web/public/assets/workspace-B7QYGLix.js.map +1 -0
  225. package/dist/web/public/assets/{workspaces-D0pYJfxI.js → workspaces-BlodF0DP.js} +2 -2
  226. package/dist/web/public/assets/{workspaces-D0pYJfxI.js.map → workspaces-BlodF0DP.js.map} +1 -1
  227. package/dist/web/public/index.html +2 -2
  228. package/dist/web/server.js +2 -2
  229. package/dist/web/server.js.map +1 -1
  230. package/package.json +1 -1
  231. package/dist/web/public/assets/agents-DnJruPrS.js +0 -7
  232. package/dist/web/public/assets/agents-DnJruPrS.js.map +0 -1
  233. package/dist/web/public/assets/chat-D7jjr-Rn.js +0 -17
  234. package/dist/web/public/assets/chat-D7jjr-Rn.js.map +0 -1
  235. package/dist/web/public/assets/goals-HsKzf-PG.js +0 -17
  236. package/dist/web/public/assets/goals-HsKzf-PG.js.map +0 -1
  237. package/dist/web/public/assets/hot-DkFvD3H4.js +0 -12
  238. package/dist/web/public/assets/hot-DkFvD3H4.js.map +0 -1
  239. package/dist/web/public/assets/index-D7BuMEIr.js +0 -204
  240. package/dist/web/public/assets/index-D7BuMEIr.js.map +0 -1
  241. package/dist/web/public/assets/layout-0rDvqHCV.js +0 -2
  242. package/dist/web/public/assets/layout-0rDvqHCV.js.map +0 -1
  243. package/dist/web/public/assets/llm-COWnMdB9.js +0 -7
  244. package/dist/web/public/assets/llm-COWnMdB9.js.map +0 -1
  245. package/dist/web/public/assets/native-agent-MGgMeTHN.js +0 -22
  246. package/dist/web/public/assets/native-agent-MGgMeTHN.js.map +0 -1
  247. package/dist/web/public/assets/plans-Ddz5qwqp.js +0 -12
  248. package/dist/web/public/assets/plans-Ddz5qwqp.js.map +0 -1
  249. package/dist/web/public/assets/workspace-BqMuxPFF.js +0 -17
  250. package/dist/web/public/assets/workspace-BqMuxPFF.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"heartbeat-BzHZy7Mx.js","sources":["../../node_modules/lucide-react/dist/esm/icons/pause.js","../../src/routes/tasks/heartbeat.tsx"],"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 Pause = createLucideIcon(\"Pause\", [\n [\"rect\", { x: \"14\", y: \"4\", width: \"4\", height: \"16\", rx: \"1\", key: \"zuxfzm\" }],\n [\"rect\", { x: \"6\", y: \"4\", width: \"4\", height: \"16\", rx: \"1\", key: \"1okwgv\" }]\n]);\n\nexport { Pause as default };\n//# sourceMappingURL=pause.js.map\n","/**\n * /tasks/heartbeat — admin overview of every heartbeat binding (P1).\n */\n\nimport { useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { toast } from 'sonner'\nimport { HeartPulse, Loader2, Pause, Play, RefreshCcw } from 'lucide-react'\n\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport {\n Table, TableBody, TableCell, TableHead, TableHeader, TableRow,\n} from '@/components/ui/table'\nimport {\n useHeartbeatList, useHeartbeatToggle, type HeartbeatRow,\n} from '@/hooks/use-background-tasks'\n\nexport default function TasksHeartbeatRoute(): JSX.Element {\n const { t } = useTranslation(['tasks', 'common'])\n const listQuery = useHeartbeatList()\n const toggle = useHeartbeatToggle()\n const [expandedKey, setExpandedKey] = useState<string | null>(null)\n\n async function onToggle(row: HeartbeatRow, op: 'enable' | 'disable'): Promise<void> {\n try {\n await toggle.mutateAsync({ row, op })\n toast.success(op === 'enable' ? t('heartbeat.enabledToast') : t('heartbeat.disabledToast'))\n } catch (err) {\n toast.error(((err as Error)?.message ?? String(err)))\n }\n }\n\n const rows = listQuery.data?.bindings ?? []\n return (\n <div className=\"mx-auto flex max-w-6xl flex-col gap-4 p-4\">\n <header className=\"flex items-center gap-3\">\n <HeartPulse className=\"h-5 w-5 text-text-dim\" />\n <h1 className=\"text-xl font-semibold\">{t('heartbeat.title')}</h1>\n <Badge variant=\"info\">{rows.length}</Badge>\n <Button\n variant=\"ghost\" size=\"sm\" className=\"ml-auto\"\n onClick={() => void listQuery.refetch()}\n disabled={listQuery.isFetching}\n aria-label={t('actions.refresh', { ns: 'common' })}\n >\n {listQuery.isFetching\n ? <Loader2 className=\"h-4 w-4 animate-spin\" />\n : <RefreshCcw className=\"h-4 w-4\" />}\n <span className=\"hidden sm:inline\">{t('heartbeat.refresh')}</span>\n </Button>\n </header>\n <p className=\"text-sm text-text-dim\">{t('heartbeat.subtitle')}</p>\n\n {listQuery.isLoading ? (\n <div className=\"h-48 rounded-md bg-surface-2 animate-pulse\" />\n ) : rows.length === 0 ? (\n <EmptySection />\n ) : (\n <section className=\"rounded-md border border-border bg-surface\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>{t('heartbeat.col.thread')}</TableHead>\n <TableHead>{t('heartbeat.col.owner')}</TableHead>\n <TableHead>{t('heartbeat.col.interval')}</TableHead>\n <TableHead>{t('heartbeat.col.lastTick')}</TableHead>\n <TableHead>{t('heartbeat.col.enabled')}</TableHead>\n <TableHead>{t('heartbeat.col.body')}</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {rows.map((r) => {\n const key = `${r.platform}:${r.channelId}:${r.threadId}`\n const isExpanded = expandedKey === key\n const tickBadge = !r.lastTickAt\n ? <Badge variant=\"outline\">{t('heartbeat.never')}</Badge>\n : r.lastStatus === 'delivered'\n ? <Badge variant=\"success\">{shortAge(r.lastTickAt, t)}</Badge>\n : r.lastStatus === 'error'\n ? <Badge variant=\"danger\" title={r.lastReason}>{r.lastStatus} · {shortAge(r.lastTickAt, t)}</Badge>\n : <Badge variant=\"outline\" title={r.lastReason}>{r.lastStatus} · {shortAge(r.lastTickAt, t)}</Badge>\n return (\n <TableRow key={key}>\n <TableCell className=\"font-mono text-[11px]\">{r.platform}:{r.threadId}</TableCell>\n <TableCell className=\"font-mono text-[11px]\">{r.userId || '—'}</TableCell>\n <TableCell className=\"text-xs\">{t('heartbeat.intervalMin', { count: r.intervalMinutes })}</TableCell>\n <TableCell>{tickBadge}</TableCell>\n <TableCell>\n <Button\n variant=\"ghost\" size=\"sm\"\n onClick={() => void onToggle(r, r.enabled ? 'disable' : 'enable')}\n disabled={toggle.isPending}\n >\n {r.enabled\n ? <><Pause className=\"h-4 w-4\" /><span>{t('heartbeat.pause')}</span></>\n : <><Play className=\"h-4 w-4\" /><span>{t('heartbeat.enable')}</span></>}\n </Button>\n </TableCell>\n <TableCell className=\"max-w-md\">\n <Button\n variant=\"ghost\" size=\"sm\"\n onClick={() => setExpandedKey(isExpanded ? null : key)}\n className=\"-ml-2\"\n >\n {isExpanded ? t('heartbeat.hide') : t('heartbeat.show')}\n </Button>\n {isExpanded && (\n <pre className=\"mt-2 whitespace-pre-wrap break-words rounded bg-surface-2 p-2 text-[11px] text-text-dim\">\n {r.body}\n </pre>\n )}\n </TableCell>\n </TableRow>\n )\n })}\n </TableBody>\n </Table>\n </section>\n )}\n </div>\n )\n}\n\nfunction EmptySection(): JSX.Element {\n const { t } = useTranslation('tasks')\n return (\n <section className=\"rounded-md border border-border bg-surface p-6 text-center text-sm text-text-dim\">\n {t('heartbeat.empty')}\n </section>\n )\n}\n\nfunction shortAge(iso: string | null, t: (key: string, opts?: Record<string, unknown>) => string): string {\n if (!iso) return t('heartbeat.never')\n const ms = Date.now() - new Date(iso).getTime()\n if (!Number.isFinite(ms) || ms < 0) return t('heartbeat.justNow')\n if (ms < 60_000) return t('heartbeat.justNow')\n if (ms < 3_600_000) return t('heartbeat.minutesAgo', { count: Math.floor(ms / 60_000) })\n if (ms < 86_400_000) return t('heartbeat.hoursAgo', { count: Math.floor(ms / 3_600_000) })\n return t('heartbeat.daysAgo', { count: Math.floor(ms / 86_400_000) })\n}\n"],"names":["Pause","createLucideIcon","TasksHeartbeatRoute","useTranslation","listQuery","useHeartbeatList","toggle","useHeartbeatToggle","expandedKey","setExpandedKey","useState","onToggle","row","op","toast","err","rows","jsxs","jsx","HeartPulse","Badge","Button","Loader2","RefreshCcw","EmptySection","Table","TableHeader","TableRow","TableHead","TableBody","r","key","isExpanded","tickBadge","shortAge","TableCell","Fragment","Play","iso","t","ms"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"heartbeat-EGjLHWU0.js","sources":["../../node_modules/lucide-react/dist/esm/icons/pause.js","../../src/routes/tasks/heartbeat.tsx"],"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 Pause = createLucideIcon(\"Pause\", [\n [\"rect\", { x: \"14\", y: \"4\", width: \"4\", height: \"16\", rx: \"1\", key: \"zuxfzm\" }],\n [\"rect\", { x: \"6\", y: \"4\", width: \"4\", height: \"16\", rx: \"1\", key: \"1okwgv\" }]\n]);\n\nexport { Pause as default };\n//# sourceMappingURL=pause.js.map\n","/**\n * /tasks/heartbeat — admin overview of every heartbeat binding (P1).\n */\n\nimport { useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { toast } from 'sonner'\nimport { HeartPulse, Loader2, Pause, Play, RefreshCcw } from 'lucide-react'\n\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport {\n Table, TableBody, TableCell, TableHead, TableHeader, TableRow,\n} from '@/components/ui/table'\nimport {\n useHeartbeatList, useHeartbeatToggle, type HeartbeatRow,\n} from '@/hooks/use-background-tasks'\n\nexport default function TasksHeartbeatRoute(): JSX.Element {\n const { t } = useTranslation(['tasks', 'common'])\n const listQuery = useHeartbeatList()\n const toggle = useHeartbeatToggle()\n const [expandedKey, setExpandedKey] = useState<string | null>(null)\n\n async function onToggle(row: HeartbeatRow, op: 'enable' | 'disable'): Promise<void> {\n try {\n await toggle.mutateAsync({ row, op })\n toast.success(op === 'enable' ? t('heartbeat.enabledToast') : t('heartbeat.disabledToast'))\n } catch (err) {\n toast.error(((err as Error)?.message ?? String(err)))\n }\n }\n\n const rows = listQuery.data?.bindings ?? []\n return (\n <div className=\"mx-auto flex max-w-6xl flex-col gap-4 p-4\">\n <header className=\"flex items-center gap-3\">\n <HeartPulse className=\"h-5 w-5 text-text-dim\" />\n <h1 className=\"text-xl font-semibold\">{t('heartbeat.title')}</h1>\n <Badge variant=\"info\">{rows.length}</Badge>\n <Button\n variant=\"ghost\" size=\"sm\" className=\"ml-auto\"\n onClick={() => void listQuery.refetch()}\n disabled={listQuery.isFetching}\n aria-label={t('actions.refresh', { ns: 'common' })}\n >\n {listQuery.isFetching\n ? <Loader2 className=\"h-4 w-4 animate-spin\" />\n : <RefreshCcw className=\"h-4 w-4\" />}\n <span className=\"hidden sm:inline\">{t('heartbeat.refresh')}</span>\n </Button>\n </header>\n <p className=\"text-sm text-text-dim\">{t('heartbeat.subtitle')}</p>\n\n {listQuery.isLoading ? (\n <div className=\"h-48 rounded-md bg-surface-2 animate-pulse\" />\n ) : rows.length === 0 ? (\n <EmptySection />\n ) : (\n <section className=\"rounded-md border border-border bg-surface\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>{t('heartbeat.col.thread')}</TableHead>\n <TableHead>{t('heartbeat.col.owner')}</TableHead>\n <TableHead>{t('heartbeat.col.interval')}</TableHead>\n <TableHead>{t('heartbeat.col.lastTick')}</TableHead>\n <TableHead>{t('heartbeat.col.enabled')}</TableHead>\n <TableHead>{t('heartbeat.col.body')}</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {rows.map((r) => {\n const key = `${r.platform}:${r.channelId}:${r.threadId}`\n const isExpanded = expandedKey === key\n const tickBadge = !r.lastTickAt\n ? <Badge variant=\"outline\">{t('heartbeat.never')}</Badge>\n : r.lastStatus === 'delivered'\n ? <Badge variant=\"success\">{shortAge(r.lastTickAt, t)}</Badge>\n : r.lastStatus === 'error'\n ? <Badge variant=\"danger\" title={r.lastReason}>{r.lastStatus} · {shortAge(r.lastTickAt, t)}</Badge>\n : <Badge variant=\"outline\" title={r.lastReason}>{r.lastStatus} · {shortAge(r.lastTickAt, t)}</Badge>\n return (\n <TableRow key={key}>\n <TableCell className=\"font-mono text-[11px]\">{r.platform}:{r.threadId}</TableCell>\n <TableCell className=\"font-mono text-[11px]\">{r.userId || '—'}</TableCell>\n <TableCell className=\"text-xs\">{t('heartbeat.intervalMin', { count: r.intervalMinutes })}</TableCell>\n <TableCell>{tickBadge}</TableCell>\n <TableCell>\n <Button\n variant=\"ghost\" size=\"sm\"\n onClick={() => void onToggle(r, r.enabled ? 'disable' : 'enable')}\n disabled={toggle.isPending}\n >\n {r.enabled\n ? <><Pause className=\"h-4 w-4\" /><span>{t('heartbeat.pause')}</span></>\n : <><Play className=\"h-4 w-4\" /><span>{t('heartbeat.enable')}</span></>}\n </Button>\n </TableCell>\n <TableCell className=\"max-w-md\">\n <Button\n variant=\"ghost\" size=\"sm\"\n onClick={() => setExpandedKey(isExpanded ? null : key)}\n className=\"-ml-2\"\n >\n {isExpanded ? t('heartbeat.hide') : t('heartbeat.show')}\n </Button>\n {isExpanded && (\n <pre className=\"mt-2 whitespace-pre-wrap break-words rounded bg-surface-2 p-2 text-[11px] text-text-dim\">\n {r.body}\n </pre>\n )}\n </TableCell>\n </TableRow>\n )\n })}\n </TableBody>\n </Table>\n </section>\n )}\n </div>\n )\n}\n\nfunction EmptySection(): JSX.Element {\n const { t } = useTranslation('tasks')\n return (\n <section className=\"rounded-md border border-border bg-surface p-6 text-center text-sm text-text-dim\">\n {t('heartbeat.empty')}\n </section>\n )\n}\n\nfunction shortAge(iso: string | null, t: (key: string, opts?: Record<string, unknown>) => string): string {\n if (!iso) return t('heartbeat.never')\n const ms = Date.now() - new Date(iso).getTime()\n if (!Number.isFinite(ms) || ms < 0) return t('heartbeat.justNow')\n if (ms < 60_000) return t('heartbeat.justNow')\n if (ms < 3_600_000) return t('heartbeat.minutesAgo', { count: Math.floor(ms / 60_000) })\n if (ms < 86_400_000) return t('heartbeat.hoursAgo', { count: Math.floor(ms / 3_600_000) })\n return t('heartbeat.daysAgo', { count: Math.floor(ms / 86_400_000) })\n}\n"],"names":["Pause","createLucideIcon","TasksHeartbeatRoute","useTranslation","listQuery","useHeartbeatList","toggle","useHeartbeatToggle","expandedKey","setExpandedKey","useState","onToggle","row","op","toast","err","rows","jsxs","jsx","HeartPulse","Badge","Button","Loader2","RefreshCcw","EmptySection","Table","TableHeader","TableRow","TableHead","TableBody","r","key","isExpanded","tickBadge","shortAge","TableCell","Fragment","Play","iso","t","ms"],"mappings":"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","x_google_ignoreList":[0]}
@@ -0,0 +1,12 @@
1
+ import{o as w,b as y,d as C,u as x,j as e,B as u,I as S,l as m,c as k,D as L,t as D,v as F,w as H,x as R,m as j}from"./index-BIBWEKxu.js";import{r as o}from"./react-DlP5eolq.js";import{E as z}from"./empty-state-BRsb30K6.js";import{E}from"./external-link-D-E90Kfw.js";import{L as M}from"./loader-circle-BQkLEJZw.js";import{R as T}from"./refresh-ccw-CFPE6zD1.js";import{S as I}from"./search-D9TZs0bG.js";import{D as $}from"./download-CuLP0G-q.js";import{C as A}from"./copy-CDCgL5Yq.js";/**
2
+ * @license lucide-react v0.469.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const N=w("Flame",[["path",{d:"M8.5 14.5A2.5 2.5 0 0 0 11 12c0-1.38-.5-2-1-3-1.072-2.143-.224-4.054 2-6 .5 2.5 2 4.9 4 6.5 2 1.6 3 3.5 3 5.5a7 7 0 1 1-14 0c0-1.153.433-2.294 1-3a2.5 2.5 0 0 0 2.5 2.5z",key:"96xj49"}]]);/**
7
+ * @license lucide-react v0.469.0 - ISC
8
+ *
9
+ * This source code is licensed under the ISC license.
10
+ * See the LICENSE file in the root directory of this source tree.
11
+ */const B=w("Star",[["path",{d:"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z",key:"r04s7s"}]]),q={remoteHot:["skills","remote","hot"]};function K(){return y({queryKey:q.remoteHot,queryFn:()=>C.getSkillsRemoteHot(),staleTime:6e4})}function ee(){const{t:s}=x(["skills","common"]),{data:n,isLoading:l,isFetching:r,refetch:i}=K(),a=n?.skills??[],[h,b]=o.useState(""),[p,g]=o.useState(null),f=o.useMemo(()=>{const t=h.trim().toLowerCase();return t?a.filter(d=>d.slug.toLowerCase().includes(t)||(d.name||"").toLowerCase().includes(t)||(d.description||"").toLowerCase().includes(t)||(d.category||"").toLowerCase().includes(t)):a},[a,h]),v=p?a.find(t=>t.slug===p)??null:null;return e.jsxs("div",{className:"mx-auto flex max-w-5xl flex-col gap-4",children:[e.jsxs("header",{className:"flex flex-col gap-1",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[e.jsxs("h1",{className:"text-xl font-semibold inline-flex items-center gap-2",children:[e.jsx(N,{className:"h-5 w-5 text-warning"}),s("hot.title")]}),e.jsxs("div",{className:"ml-auto flex items-center gap-2",children:[e.jsx(u,{asChild:!0,variant:"ghost",size:"sm",children:e.jsxs("a",{href:"https://skillhub.cn",target:"_blank",rel:"noopener noreferrer",children:[e.jsx(E,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:s("hot.openHub")})]})}),e.jsxs(u,{variant:"ghost",size:"sm",onClick:()=>i(),disabled:r,"aria-label":s("actions.refresh",{ns:"common"}),children:[r?e.jsx(M,{className:"h-4 w-4 animate-spin"}):e.jsx(T,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:s("actions.refresh",{ns:"common"})})]})]})]}),e.jsx("p",{className:"text-sm text-text-dim",children:s("hot.subtitle")}),n&&e.jsx(O,{cached:!!n.cached,stale:!!n.stale,fetchedAt:n.fetchedAt})]}),a.length>0&&e.jsxs("div",{className:"flex flex-wrap items-end gap-2",children:[e.jsxs("div",{className:"relative flex-1 min-w-[180px] max-w-md",children:[e.jsx(I,{className:"pointer-events-none absolute left-2 top-1/2 -translate-y-1/2 h-4 w-4 text-text-muted"}),e.jsx(S,{value:h,onChange:t=>b(t.target.value),placeholder:s("actions.search",{ns:"common"}),className:"pl-7"})]}),e.jsxs(m,{variant:"secondary",className:"ml-auto",children:[f.length," / ",a.length]})]}),l?e.jsx("div",{className:"h-48 w-full rounded-md bg-surface-2 animate-pulse"}):a.length===0?e.jsx(z,{icon:e.jsx(N,{}),title:s("hot.empty")}):e.jsx("ul",{className:"flex flex-col gap-2",children:f.map(t=>e.jsx("li",{children:e.jsxs("button",{type:"button",onClick:()=>g(t.slug),className:k("flex w-full flex-col gap-1 rounded-md border border-border bg-surface px-3 py-2 text-left","transition-colors hover:border-border-strong hover:bg-surface-hover"),children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"font-medium text-text",children:t.name||t.slug}),t.version&&e.jsxs("span",{className:"text-text-muted text-xs font-mono",children:["v",t.version]}),t.category&&e.jsx(m,{variant:"outline",children:t.category}),e.jsxs("div",{className:"ml-auto flex items-center gap-3 text-xs text-text-dim tabular-nums",children:[e.jsxs("span",{className:"inline-flex items-center gap-1",children:[e.jsx(B,{className:"h-3 w-3"}),c(t.stars)]}),e.jsxs("span",{className:"inline-flex items-center gap-1",children:[e.jsx($,{className:"h-3 w-3"}),c(t.installs)]})]})]}),e.jsx("code",{className:"text-text-muted text-xs font-mono",children:t.slug}),t.description&&e.jsx("p",{className:"line-clamp-2 text-sm text-text-dim",children:t.description})]})},t.slug))}),e.jsx(Q,{skill:v,onOpenChange:t=>{t||g(null)}})]})}function O({cached:s,stale:n,fetchedAt:l}){const{t:r}=x("skills"),i=o.useMemo(()=>{try{const a=new Date(l);return Number.isNaN(a.getTime())?"":a.toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}catch{return""}},[l]);return e.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-xs text-text-muted",children:[e.jsx("span",{children:r("hot.updatedAt",{at:i})}),s&&e.jsx(m,{variant:"outline",children:r("hot.cached")}),n&&e.jsx(m,{variant:"warning",children:r("hot.stale")})]})}function Q({skill:s,onOpenChange:n}){const{t:l,i18n:r}=x("skills"),i=o.useMemo(()=>s?[{key:"cliInstall",cmd:`skillhub install ${s.slug}`},{key:"cliSearch",cmd:`skillhub search ${s.slug}`},{key:"imAsk",cmd:r.language.startsWith("zh")?`请用 skillhub 安装 ${s.slug} 技能`:`Please install ${s.slug} via skillhub`}]:[],[r.language,s]);return e.jsx(L,{open:s!=null,onOpenChange:n,children:e.jsxs(D,{className:"sm:max-w-2xl",children:[e.jsxs(F,{children:[e.jsx(H,{children:s?.name||s?.slug||""}),s?.description&&e.jsx(R,{children:s.description})]}),s&&e.jsxs(e.Fragment,{children:[e.jsxs("dl",{className:"grid grid-cols-[max-content_1fr] gap-x-3 gap-y-1 text-xs",children:[e.jsx("dt",{className:"text-text-dim",children:l("hot.detail.slug")}),e.jsx("dd",{className:"font-mono",children:s.slug}),s.version&&e.jsxs(e.Fragment,{children:[e.jsx("dt",{className:"text-text-dim",children:l("hot.detail.version")}),e.jsxs("dd",{className:"font-mono",children:["v",s.version]})]}),s.category&&e.jsxs(e.Fragment,{children:[e.jsx("dt",{className:"text-text-dim",children:l("hot.detail.category")}),e.jsx("dd",{children:s.category})]}),e.jsx("dt",{className:"text-text-dim",children:l("hot.detail.stars")}),e.jsx("dd",{className:"tabular-nums",children:c(s.stars)}),e.jsx("dt",{className:"text-text-dim",children:l("hot.detail.installs")}),e.jsx("dd",{className:"tabular-nums",children:c(s.installs)}),s.downloads!=null&&e.jsxs(e.Fragment,{children:[e.jsx("dt",{className:"text-text-dim",children:l("hot.detail.downloads")}),e.jsx("dd",{className:"tabular-nums",children:c(s.downloads)})]})]}),e.jsxs("div",{className:"mt-4 border-t border-border pt-3",children:[e.jsx("h3",{className:"text-sm font-medium",children:l("hot.detail.howInstall")}),e.jsx("ul",{className:"mt-2 flex flex-col gap-2",children:i.map(a=>e.jsxs("li",{className:"flex flex-col gap-1 sm:flex-row sm:items-center sm:gap-2",children:[e.jsx("span",{className:"text-xs text-text-dim sm:w-40 sm:shrink-0",children:l(`hot.detail.label.${a.key}`)}),e.jsx("code",{className:"flex-1 rounded bg-surface-2 px-2 py-1 font-mono text-xs break-all",children:a.cmd}),e.jsx(_,{text:a.cmd})]},a.key))}),e.jsx("p",{className:"mt-3 text-[11px] text-text-muted",children:l("hot.detail.hint")})]})]})]})})}function _({text:s}){const{t:n}=x("skills"),[l,r]=o.useState(!1);async function i(){try{await navigator.clipboard.writeText(s),r(!0),j.success(n("hot.detail.copied")),setTimeout(()=>r(!1),1500)}catch(a){j.error(String(a?.message??a))}}return e.jsxs(u,{type:"button",variant:"secondary",size:"sm",onClick:()=>void i(),className:"shrink-0",children:[e.jsx(A,{className:"h-3 w-3"}),n(l?"hot.detail.copied":"hot.detail.copy")]})}function c(s){return s==null||!Number.isFinite(s)?"—":s.toLocaleString()}export{ee as default};
12
+ //# sourceMappingURL=hot-B9x1_5yx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hot-B9x1_5yx.js","sources":["../../node_modules/lucide-react/dist/esm/icons/flame.js","../../node_modules/lucide-react/dist/esm/icons/star.js","../../src/hooks/use-skills.ts","../../src/routes/settings/agim-skills/hot.tsx"],"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 Flame = createLucideIcon(\"Flame\", [\n [\n \"path\",\n {\n d: \"M8.5 14.5A2.5 2.5 0 0 0 11 12c0-1.38-.5-2-1-3-1.072-2.143-.224-4.054 2-6 .5 2.5 2 4.9 4 6.5 2 1.6 3 3.5 3 5.5a7 7 0 1 1-14 0c0-1.153.433-2.294 1-3a2.5 2.5 0 0 0 2.5 2.5z\",\n key: \"96xj49\"\n }\n ]\n]);\n\nexport { Flame as default };\n//# sourceMappingURL=flame.js.map\n","/**\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 Star = createLucideIcon(\"Star\", [\n [\n \"path\",\n {\n d: \"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z\",\n key: \"r04s7s\"\n }\n ]\n]);\n\nexport { Star as default };\n//# sourceMappingURL=star.js.map\n","/**\n * useSkills — read-only browse of the agent skills.\n *\n * useSkills() — list of every skill on disk\n * useSkillDetail(slug) — markdown body, fetched on demand\n * when the modal opens\n *\n * No mutations: installs happen via the skillhub CLI on the host,\n * agim is strictly read-only here.\n */\n\nimport { useQuery } from '@tanstack/react-query'\nimport { api } from '@/lib/api/endpoints'\nimport type {\n ListSkillsResponse,\n RemoteHotSkillsResponse,\n SkillDetail,\n} from '@/types/api'\n\nexport const skillsKeys = {\n all: ['skills'] as const,\n list: ['skills', 'list'] as const,\n detail: (slug: string) => ['skills', 'detail', slug] as const,\n remoteHot: ['skills', 'remote', 'hot'] as const,\n}\n\nexport function useSkills() {\n return useQuery<ListSkillsResponse>({\n queryKey: skillsKeys.list,\n queryFn: () => api.listSkills(),\n })\n}\n\nexport function useSkillDetail(slug: string | null) {\n return useQuery<SkillDetail>({\n queryKey: skillsKeys.detail(slug ?? ''),\n queryFn: () => api.getSkillDetail(slug as string),\n enabled: Boolean(slug),\n })\n}\n\n/** skillhub.cn hot list. The proxy on the server caches for 5 min and\n * serves stale-while-error, so we don't need an aggressive client-side\n * refresh — the operator hits the refresh button when they want fresh\n * data. staleTime keeps tab-switch round-trips cheap. */\nexport function useSkillsRemoteHot() {\n return useQuery<RemoteHotSkillsResponse>({\n queryKey: skillsKeys.remoteHot,\n queryFn: () => api.getSkillsRemoteHot(),\n staleTime: 60_000,\n })\n}\n","/**\n * /skills/hot — read-only browse of skillhub.cn's hot list.\n *\n * Backed by /api/skills/remote/hot (server proxies upstream with a\n * 5-min cache + stale-while-error). agim never auto-runs an install:\n * the detail dialog surfaces three copy-pasteable commands and the\n * operator decides where to execute.\n *\n * Restored from v1's tasks.html in 2026-05; the v2 SPA had the\n * installed-skills view but had dropped the hot list during the\n * memory-tab port.\n */\n\nimport { useMemo, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { toast } from 'sonner'\nimport {\n Copy,\n Download,\n ExternalLink,\n Flame,\n Loader2,\n RefreshCcw,\n Search,\n Star,\n} from 'lucide-react'\n\nimport { EmptyState } from '@/components/common/empty-state'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from '@/components/ui/dialog'\nimport { Input } from '@/components/ui/input'\nimport { useSkillsRemoteHot } from '@/hooks/use-skills'\nimport type { RemoteSkill } from '@/types/api'\nimport { cn } from '@/lib/utils'\n\nexport default function SkillsHotRoute(): JSX.Element {\n const { t } = useTranslation(['skills', 'common'])\n const { data, isLoading, isFetching, refetch } = useSkillsRemoteHot()\n\n const skills: RemoteSkill[] = data?.skills ?? []\n const [q, setQ] = useState('')\n const [openSlug, setOpenSlug] = useState<string | null>(null)\n\n const filtered = useMemo(() => {\n const needle = q.trim().toLowerCase()\n if (!needle) return skills\n return skills.filter((s) =>\n s.slug.toLowerCase().includes(needle)\n || (s.name || '').toLowerCase().includes(needle)\n || (s.description || '').toLowerCase().includes(needle)\n || (s.category || '').toLowerCase().includes(needle)\n )\n }, [skills, q])\n\n const openSkill = openSlug ? skills.find((s) => s.slug === openSlug) ?? null : null\n\n return (\n <div className=\"mx-auto flex max-w-5xl flex-col gap-4\">\n <header className=\"flex flex-col gap-1\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <h1 className=\"text-xl font-semibold inline-flex items-center gap-2\">\n <Flame className=\"h-5 w-5 text-warning\" />\n {t('hot.title')}\n </h1>\n <div className=\"ml-auto flex items-center gap-2\">\n <Button\n asChild\n variant=\"ghost\"\n size=\"sm\"\n >\n <a\n href=\"https://skillhub.cn\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <ExternalLink className=\"h-4 w-4\" />\n <span className=\"hidden sm:inline\">{t('hot.openHub')}</span>\n </a>\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => refetch()}\n disabled={isFetching}\n aria-label={t('actions.refresh', { ns: 'common' })}\n >\n {isFetching ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <RefreshCcw className=\"h-4 w-4\" />}\n <span className=\"hidden sm:inline\">{t('actions.refresh', { ns: 'common' })}</span>\n </Button>\n </div>\n </div>\n <p className=\"text-sm text-text-dim\">{t('hot.subtitle')}</p>\n {data && (\n <CacheMeta\n cached={!!data.cached}\n stale={!!data.stale}\n fetchedAt={data.fetchedAt}\n />\n )}\n </header>\n\n {skills.length > 0 && (\n <div className=\"flex flex-wrap items-end gap-2\">\n <div className=\"relative flex-1 min-w-[180px] max-w-md\">\n <Search className=\"pointer-events-none absolute left-2 top-1/2 -translate-y-1/2 h-4 w-4 text-text-muted\" />\n <Input\n value={q}\n onChange={(e) => setQ(e.target.value)}\n placeholder={t('actions.search', { ns: 'common' })}\n className=\"pl-7\"\n />\n </div>\n <Badge variant=\"secondary\" className=\"ml-auto\">\n {filtered.length} / {skills.length}\n </Badge>\n </div>\n )}\n\n {isLoading ? (\n <div className=\"h-48 w-full rounded-md bg-surface-2 animate-pulse\" />\n ) : skills.length === 0 ? (\n <EmptyState icon={<Flame />} title={t('hot.empty')} />\n ) : (\n <ul className=\"flex flex-col gap-2\">\n {filtered.map((s) => (\n <li key={s.slug}>\n <button\n type=\"button\"\n onClick={() => setOpenSlug(s.slug)}\n className={cn(\n 'flex w-full flex-col gap-1 rounded-md border border-border bg-surface px-3 py-2 text-left',\n 'transition-colors hover:border-border-strong hover:bg-surface-hover',\n )}\n >\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className=\"font-medium text-text\">{s.name || s.slug}</span>\n {s.version && (\n <span className=\"text-text-muted text-xs font-mono\">v{s.version}</span>\n )}\n {s.category && (\n <Badge variant=\"outline\">{s.category}</Badge>\n )}\n <div className=\"ml-auto flex items-center gap-3 text-xs text-text-dim tabular-nums\">\n <span className=\"inline-flex items-center gap-1\">\n <Star className=\"h-3 w-3\" />\n {formatNum(s.stars)}\n </span>\n <span className=\"inline-flex items-center gap-1\">\n <Download className=\"h-3 w-3\" />\n {formatNum(s.installs)}\n </span>\n </div>\n </div>\n <code className=\"text-text-muted text-xs font-mono\">{s.slug}</code>\n {s.description && (\n <p className=\"line-clamp-2 text-sm text-text-dim\">{s.description}</p>\n )}\n </button>\n </li>\n ))}\n </ul>\n )}\n\n <RemoteSkillDialog\n skill={openSkill}\n onOpenChange={(open) => { if (!open) setOpenSlug(null) }}\n />\n </div>\n )\n}\n\nfunction CacheMeta({\n cached,\n stale,\n fetchedAt,\n}: {\n cached: boolean\n stale: boolean\n fetchedAt: number\n}): JSX.Element | null {\n const { t } = useTranslation('skills')\n const when = useMemo(() => {\n try {\n const d = new Date(fetchedAt)\n if (Number.isNaN(d.getTime())) return ''\n return d.toLocaleString(undefined, {\n month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit',\n })\n } catch {\n return ''\n }\n }, [fetchedAt])\n return (\n <div className=\"flex flex-wrap items-center gap-2 text-xs text-text-muted\">\n <span>{t('hot.updatedAt', { at: when })}</span>\n {cached && <Badge variant=\"outline\">{t('hot.cached')}</Badge>}\n {stale && <Badge variant=\"warning\">{t('hot.stale')}</Badge>}\n </div>\n )\n}\n\ninterface RemoteSkillDialogProps {\n skill: RemoteSkill | null\n onOpenChange: (open: boolean) => void\n}\n\nfunction RemoteSkillDialog({ skill, onOpenChange }: RemoteSkillDialogProps): JSX.Element {\n const { t, i18n } = useTranslation('skills')\n\n // Three copy-pasteable install paths. agim never executes them itself\n // — the operator chooses CLI or IM.\n const commands = useMemo(() => {\n if (!skill) return []\n return [\n { key: 'cliInstall', cmd: `skillhub install ${skill.slug}` },\n { key: 'cliSearch', cmd: `skillhub search ${skill.slug}` },\n {\n key: 'imAsk',\n cmd: i18n.language.startsWith('zh')\n ? `请用 skillhub 安装 ${skill.slug} 技能`\n : `Please install ${skill.slug} via skillhub`,\n },\n ]\n }, [i18n.language, skill])\n\n return (\n <Dialog open={skill != null} onOpenChange={onOpenChange}>\n <DialogContent className=\"sm:max-w-2xl\">\n <DialogHeader>\n <DialogTitle>{skill?.name || skill?.slug || ''}</DialogTitle>\n {skill?.description && (\n <DialogDescription>{skill.description}</DialogDescription>\n )}\n </DialogHeader>\n\n {skill && (\n <>\n <dl className=\"grid grid-cols-[max-content_1fr] gap-x-3 gap-y-1 text-xs\">\n <dt className=\"text-text-dim\">{t('hot.detail.slug')}</dt>\n <dd className=\"font-mono\">{skill.slug}</dd>\n {skill.version && (\n <>\n <dt className=\"text-text-dim\">{t('hot.detail.version')}</dt>\n <dd className=\"font-mono\">v{skill.version}</dd>\n </>\n )}\n {skill.category && (\n <>\n <dt className=\"text-text-dim\">{t('hot.detail.category')}</dt>\n <dd>{skill.category}</dd>\n </>\n )}\n <dt className=\"text-text-dim\">{t('hot.detail.stars')}</dt>\n <dd className=\"tabular-nums\">{formatNum(skill.stars)}</dd>\n <dt className=\"text-text-dim\">{t('hot.detail.installs')}</dt>\n <dd className=\"tabular-nums\">{formatNum(skill.installs)}</dd>\n {skill.downloads != null && (\n <>\n <dt className=\"text-text-dim\">{t('hot.detail.downloads')}</dt>\n <dd className=\"tabular-nums\">{formatNum(skill.downloads)}</dd>\n </>\n )}\n </dl>\n\n <div className=\"mt-4 border-t border-border pt-3\">\n <h3 className=\"text-sm font-medium\">{t('hot.detail.howInstall')}</h3>\n <ul className=\"mt-2 flex flex-col gap-2\">\n {commands.map((c) => (\n <li key={c.key} className=\"flex flex-col gap-1 sm:flex-row sm:items-center sm:gap-2\">\n <span className=\"text-xs text-text-dim sm:w-40 sm:shrink-0\">\n {t(`hot.detail.label.${c.key}`)}\n </span>\n <code className=\"flex-1 rounded bg-surface-2 px-2 py-1 font-mono text-xs break-all\">\n {c.cmd}\n </code>\n <CopyButton text={c.cmd} />\n </li>\n ))}\n </ul>\n <p className=\"mt-3 text-[11px] text-text-muted\">{t('hot.detail.hint')}</p>\n </div>\n </>\n )}\n </DialogContent>\n </Dialog>\n )\n}\n\nfunction CopyButton({ text }: { text: string }): JSX.Element {\n const { t } = useTranslation('skills')\n const [copied, setCopied] = useState(false)\n async function onClick(): Promise<void> {\n try {\n await navigator.clipboard.writeText(text)\n setCopied(true)\n toast.success(t('hot.detail.copied'))\n setTimeout(() => setCopied(false), 1500)\n } catch (err) {\n toast.error(String((err as Error)?.message ?? err))\n }\n }\n return (\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"sm\"\n onClick={() => void onClick()}\n className=\"shrink-0\"\n >\n <Copy className=\"h-3 w-3\" />\n {copied ? t('hot.detail.copied') : t('hot.detail.copy')}\n </Button>\n )\n}\n\nfunction formatNum(n: number | undefined): string {\n if (n == null || !Number.isFinite(n)) return '—'\n return n.toLocaleString()\n}\n"],"names":["Flame","createLucideIcon","Star","skillsKeys","useSkillsRemoteHot","useQuery","api","SkillsHotRoute","t","useTranslation","data","isLoading","isFetching","refetch","skills","q","setQ","useState","openSlug","setOpenSlug","filtered","useMemo","needle","s","openSkill","jsxs","jsx","Button","ExternalLink","Loader2","RefreshCcw","CacheMeta","Search","Input","e","Badge","EmptyState","cn","formatNum","Download","RemoteSkillDialog","open","cached","stale","fetchedAt","when","d","skill","onOpenChange","i18n","commands","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","Fragment","c","CopyButton","text","copied","setCopied","onClick","toast","err","Copy","n"],"mappings":"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","x_google_ignoreList":[0,1]}