agim-cli 1.4.8 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (537) hide show
  1. package/CHANGELOG.md +415 -402
  2. package/README.md +4 -4
  3. package/bin/agim_rpc.py +12 -12
  4. package/dist/cli-ui/cmd-handlers.d.ts +3 -3
  5. package/dist/cli-ui/cmd-handlers.d.ts.map +1 -1
  6. package/dist/cli-ui/cmd-handlers.js +11 -19
  7. package/dist/cli-ui/cmd-handlers.js.map +1 -1
  8. package/dist/cli-ui/config-wizard.js +27 -27
  9. package/dist/cli-ui/config-wizard.js.map +1 -1
  10. package/dist/cli-ui/env-file.d.ts +4 -4
  11. package/dist/cli-ui/env-file.js +13 -13
  12. package/dist/cli-ui/env-file.js.map +1 -1
  13. package/dist/cli-ui/i18n.d.ts +2 -2
  14. package/dist/cli-ui/i18n.js +9 -9
  15. package/dist/cli-ui/i18n.js.map +1 -1
  16. package/dist/cli-ui/lang-picker.js +1 -1
  17. package/dist/cli-ui/lang-picker.js.map +1 -1
  18. package/dist/cli-ui/paths.d.ts.map +1 -1
  19. package/dist/cli-ui/paths.js +2 -4
  20. package/dist/cli-ui/paths.js.map +1 -1
  21. package/dist/cli-ui/service.d.ts +7 -7
  22. package/dist/cli-ui/service.d.ts.map +1 -1
  23. package/dist/cli-ui/service.js +57 -72
  24. package/dist/cli-ui/service.js.map +1 -1
  25. package/dist/cli-ui/tui/app.js +2 -2
  26. package/dist/cli-ui/tui/app.js.map +1 -1
  27. package/dist/cli-ui/tui/index.js +6 -6
  28. package/dist/cli-ui/tui/index.js.map +1 -1
  29. package/dist/cli-ui/tui/mouse-stdin.js +1 -1
  30. package/dist/cli-ui/tui/mouse-stdin.js.map +1 -1
  31. package/dist/cli-ui/tui/stream-reveal.d.ts +2 -2
  32. package/dist/cli-ui/tui/stream-reveal.d.ts.map +1 -1
  33. package/dist/cli-ui/tui/stream-reveal.js +4 -4
  34. package/dist/cli-ui/tui/stream-reveal.js.map +1 -1
  35. package/dist/cli.js +24 -45
  36. package/dist/cli.js.map +1 -1
  37. package/dist/core/a2a-notify.js +5 -5
  38. package/dist/core/a2a-notify.js.map +1 -1
  39. package/dist/core/a2a.d.ts +2 -2
  40. package/dist/core/a2a.d.ts.map +1 -1
  41. package/dist/core/a2a.js +12 -12
  42. package/dist/core/a2a.js.map +1 -1
  43. package/dist/core/access-token.d.ts +1 -1
  44. package/dist/core/access-token.js +7 -7
  45. package/dist/core/access-token.js.map +1 -1
  46. package/dist/core/acp-server.js +5 -5
  47. package/dist/core/acp-server.js.map +1 -1
  48. package/dist/core/admin-allowlist.js +5 -5
  49. package/dist/core/admin-allowlist.js.map +1 -1
  50. package/dist/core/agent-base.d.ts +1 -1
  51. package/dist/core/agent-base.js +3 -3
  52. package/dist/core/agent-base.js.map +1 -1
  53. package/dist/core/agent-cwd.d.ts +5 -6
  54. package/dist/core/agent-cwd.d.ts.map +1 -1
  55. package/dist/core/agent-cwd.js +15 -16
  56. package/dist/core/agent-cwd.js.map +1 -1
  57. package/dist/core/agim-paths.d.ts +1 -4
  58. package/dist/core/agim-paths.d.ts.map +1 -1
  59. package/dist/core/agim-paths.js +18 -35
  60. package/dist/core/agim-paths.js.map +1 -1
  61. package/dist/core/approval-bus.d.ts +4 -4
  62. package/dist/core/approval-bus.d.ts.map +1 -1
  63. package/dist/core/approval-bus.js +14 -14
  64. package/dist/core/approval-bus.js.map +1 -1
  65. package/dist/core/approval-router.js +2 -2
  66. package/dist/core/artifacts.js +3 -3
  67. package/dist/core/artifacts.js.map +1 -1
  68. package/dist/core/ask-user-rpc.js +1 -1
  69. package/dist/core/ask-user-rpc.js.map +1 -1
  70. package/dist/core/audit-log.js +2 -2
  71. package/dist/core/audit-log.js.map +1 -1
  72. package/dist/core/bgjob-reader.d.ts +1 -1
  73. package/dist/core/bgjob-reader.js +4 -4
  74. package/dist/core/bgjob-reader.js.map +1 -1
  75. package/dist/core/commands/approval.js +2 -2
  76. package/dist/core/commands/approval.js.map +1 -1
  77. package/dist/core/commands/heartbeat.js +2 -2
  78. package/dist/core/commands/heartbeat.js.map +1 -1
  79. package/dist/core/commands/memo.js +1 -1
  80. package/dist/core/commands/memo.js.map +1 -1
  81. package/dist/core/commands/model.js +1 -1
  82. package/dist/core/commands/model.js.map +1 -1
  83. package/dist/core/commands/plan.js +3 -3
  84. package/dist/core/commands/plan.js.map +1 -1
  85. package/dist/core/commands/router-compare.js +3 -3
  86. package/dist/core/commands/router-compare.js.map +1 -1
  87. package/dist/core/commands/service.d.ts.map +1 -1
  88. package/dist/core/commands/service.js +1 -3
  89. package/dist/core/commands/service.js.map +1 -1
  90. package/dist/core/commands/sessions.js +4 -4
  91. package/dist/core/commands/sessions.js.map +1 -1
  92. package/dist/core/commands/skill.js +1 -1
  93. package/dist/core/commands/skill.js.map +1 -1
  94. package/dist/core/commands/stats.js +1 -1
  95. package/dist/core/commands/stats.js.map +1 -1
  96. package/dist/core/commands/web.js +5 -5
  97. package/dist/core/commands/web.js.map +1 -1
  98. package/dist/core/config-schema.js +1 -1
  99. package/dist/core/coord-systems.d.ts +1 -1
  100. package/dist/core/coord-systems.js +4 -4
  101. package/dist/core/coord-systems.js.map +1 -1
  102. package/dist/core/event-bus.d.ts +5 -5
  103. package/dist/core/event-bus.d.ts.map +1 -1
  104. package/dist/core/event-bus.js +3 -3
  105. package/dist/core/event-bus.js.map +1 -1
  106. package/dist/core/feature-flags.d.ts +2 -2
  107. package/dist/core/feature-flags.js +4 -4
  108. package/dist/core/feature-flags.js.map +1 -1
  109. package/dist/core/goal-rpc.js +2 -2
  110. package/dist/core/goal-rpc.js.map +1 -1
  111. package/dist/core/goals.d.ts +1 -1
  112. package/dist/core/goals.js +3 -3
  113. package/dist/core/goals.js.map +1 -1
  114. package/dist/core/heartbeat-store.d.ts +1 -1
  115. package/dist/core/heartbeat-store.d.ts.map +1 -1
  116. package/dist/core/heartbeat-store.js +3 -3
  117. package/dist/core/heartbeat-store.js.map +1 -1
  118. package/dist/core/heartbeat.js +4 -4
  119. package/dist/core/heartbeat.js.map +1 -1
  120. package/dist/core/intent-llm.d.ts +2 -2
  121. package/dist/core/intent-llm.js +5 -5
  122. package/dist/core/intent-llm.js.map +1 -1
  123. package/dist/core/job-board.d.ts +5 -5
  124. package/dist/core/job-board.d.ts.map +1 -1
  125. package/dist/core/job-board.js +17 -17
  126. package/dist/core/job-board.js.map +1 -1
  127. package/dist/core/llm/agent-loop.d.ts +3 -3
  128. package/dist/core/llm/agent-loop.js +14 -14
  129. package/dist/core/llm/agent-loop.js.map +1 -1
  130. package/dist/core/llm/{imhub-dispatcher.d.ts → agim-dispatcher.d.ts} +4 -4
  131. package/dist/core/llm/agim-dispatcher.d.ts.map +1 -0
  132. package/dist/core/llm/{imhub-dispatcher.js → agim-dispatcher.js} +43 -43
  133. package/dist/core/llm/agim-dispatcher.js.map +1 -0
  134. package/dist/core/llm/agim-rpc-server.js +17 -17
  135. package/dist/core/llm/agim-rpc-server.js.map +1 -1
  136. package/dist/core/llm/auto-compact.d.ts +3 -3
  137. package/dist/core/llm/auto-compact.d.ts.map +1 -1
  138. package/dist/core/llm/auto-compact.js +5 -5
  139. package/dist/core/llm/auto-compact.js.map +1 -1
  140. package/dist/core/llm/builtin-dispatcher.js +3 -3
  141. package/dist/core/llm/builtin-dispatcher.js.map +1 -1
  142. package/dist/core/llm/exec-dispatcher.d.ts +2 -2
  143. package/dist/core/llm/exec-dispatcher.d.ts.map +1 -1
  144. package/dist/core/llm/exec-dispatcher.js +20 -22
  145. package/dist/core/llm/exec-dispatcher.js.map +1 -1
  146. package/dist/core/llm/fs-dispatcher.js +8 -8
  147. package/dist/core/llm/fs-dispatcher.js.map +1 -1
  148. package/dist/core/llm/goal-critic.js +4 -4
  149. package/dist/core/llm/goal-critic.js.map +1 -1
  150. package/dist/core/llm/hallucination-detector.js +2 -2
  151. package/dist/core/llm/hallucination-detector.js.map +1 -1
  152. package/dist/core/llm/mcp-client.d.ts +1 -1
  153. package/dist/core/llm/mcp-client.js +3 -3
  154. package/dist/core/llm/mcp-client.js.map +1 -1
  155. package/dist/core/llm/mcp-registry.js +3 -3
  156. package/dist/core/llm/mcp-registry.js.map +1 -1
  157. package/dist/core/llm/openai-compat-provider.d.ts +1 -1
  158. package/dist/core/llm/openai-compat-provider.js +2 -2
  159. package/dist/core/llm/openai-compat-provider.js.map +1 -1
  160. package/dist/core/llm/provider-base.d.ts +1 -1
  161. package/dist/core/llm/secrets.d.ts +2 -2
  162. package/dist/core/llm/secrets.d.ts.map +1 -1
  163. package/dist/core/llm/tool-dispatcher.d.ts +1 -1
  164. package/dist/core/llm/web-dispatcher.d.ts +1 -1
  165. package/dist/core/llm/web-dispatcher.js +15 -15
  166. package/dist/core/llm/web-dispatcher.js.map +1 -1
  167. package/dist/core/logger.d.ts +1 -1
  168. package/dist/core/logger.js +3 -3
  169. package/dist/core/logger.js.map +1 -1
  170. package/dist/core/memo-rpc.js +3 -3
  171. package/dist/core/memo-rpc.js.map +1 -1
  172. package/dist/core/memory-consolidate.js +4 -4
  173. package/dist/core/memory-consolidate.js.map +1 -1
  174. package/dist/core/memory-distill.js +4 -4
  175. package/dist/core/memory-distill.js.map +1 -1
  176. package/dist/core/memory-distiller.d.ts +10 -4
  177. package/dist/core/memory-distiller.d.ts.map +1 -1
  178. package/dist/core/memory-distiller.js +31 -17
  179. package/dist/core/memory-distiller.js.map +1 -1
  180. package/dist/core/memory-vector.js +9 -9
  181. package/dist/core/memory-vector.js.map +1 -1
  182. package/dist/core/memory.js +2 -2
  183. package/dist/core/memory.js.map +1 -1
  184. package/dist/core/memos.js +6 -6
  185. package/dist/core/memos.js.map +1 -1
  186. package/dist/core/message-sink.js +13 -13
  187. package/dist/core/message-sink.js.map +1 -1
  188. package/dist/core/notification-evaluator.d.ts +2 -2
  189. package/dist/core/notification-evaluator.js +4 -4
  190. package/dist/core/notification-evaluator.js.map +1 -1
  191. package/dist/core/onboarding.js +3 -3
  192. package/dist/core/onboarding.js.map +1 -1
  193. package/dist/core/outbox.js +2 -2
  194. package/dist/core/outbox.js.map +1 -1
  195. package/dist/core/persona.d.ts +1 -1
  196. package/dist/core/persona.d.ts.map +1 -1
  197. package/dist/core/persona.js +2 -2
  198. package/dist/core/persona.js.map +1 -1
  199. package/dist/core/plan-history.js +1 -1
  200. package/dist/core/plan-history.js.map +1 -1
  201. package/dist/core/plan-intent.js +5 -5
  202. package/dist/core/plan-intent.js.map +1 -1
  203. package/dist/core/plan-mode-state.d.ts +1 -1
  204. package/dist/core/plan-mode-state.js +4 -4
  205. package/dist/core/plan-mode-state.js.map +1 -1
  206. package/dist/core/push-rpc.d.ts +1 -1
  207. package/dist/core/push-rpc.js +6 -6
  208. package/dist/core/push-rpc.js.map +1 -1
  209. package/dist/core/registry.d.ts +4 -4
  210. package/dist/core/registry.js +10 -10
  211. package/dist/core/registry.js.map +1 -1
  212. package/dist/core/reminders.js +1 -1
  213. package/dist/core/reminders.js.map +1 -1
  214. package/dist/core/restart-flow.d.ts.map +1 -1
  215. package/dist/core/restart-flow.js +5 -7
  216. package/dist/core/restart-flow.js.map +1 -1
  217. package/dist/core/router.d.ts +1 -1
  218. package/dist/core/router.js +5 -5
  219. package/dist/core/router.js.map +1 -1
  220. package/dist/core/schedule.d.ts +2 -2
  221. package/dist/core/schedule.js +4 -4
  222. package/dist/core/schedule.js.map +1 -1
  223. package/dist/core/self-protect.js +3 -3
  224. package/dist/core/self-protect.js.map +1 -1
  225. package/dist/core/sender-allowlist.js +7 -7
  226. package/dist/core/sender-allowlist.js.map +1 -1
  227. package/dist/core/sensitive-paths.d.ts.map +1 -1
  228. package/dist/core/sensitive-paths.js +1 -2
  229. package/dist/core/sensitive-paths.js.map +1 -1
  230. package/dist/core/session.js +2 -2
  231. package/dist/core/session.js.map +1 -1
  232. package/dist/core/skills/builtin/ECC_NOTICE.md +1 -1
  233. package/dist/core/skills/builtin/agim-memory/SKILL.md +1 -1
  234. package/dist/core/skills/builtin/agim-reminders/SKILL.md +2 -2
  235. package/dist/core/skills/builtin/agim-self/SKILL.md +9 -9
  236. package/dist/core/skills/builtin/agim-skill-discovery/SKILL.md +5 -5
  237. package/dist/core/skills/builtin/image-generation/SKILL.md +2 -2
  238. package/dist/core/skills/builtin/long-goal/SKILL.md +7 -7
  239. package/dist/core/skills/builtin/my/SKILL.md +2 -2
  240. package/dist/core/skills/builtin/skill-creator/SKILL.md +2 -2
  241. package/dist/core/skills/loader.d.ts +4 -4
  242. package/dist/core/skills/loader.js +22 -22
  243. package/dist/core/skills/loader.js.map +1 -1
  244. package/dist/core/skills-rpc.js +1 -1
  245. package/dist/core/skills-rpc.js.map +1 -1
  246. package/dist/core/transcribe.js +13 -13
  247. package/dist/core/transcribe.js.map +1 -1
  248. package/dist/core/tunnel.js +1 -1
  249. package/dist/core/tunnel.js.map +1 -1
  250. package/dist/core/types.d.ts +2 -2
  251. package/dist/core/types.d.ts.map +1 -1
  252. package/dist/core/user-coord-prefs.js +1 -1
  253. package/dist/core/user-coord-prefs.js.map +1 -1
  254. package/dist/core/viewer-config.d.ts +8 -8
  255. package/dist/core/viewer-config.js +17 -17
  256. package/dist/core/viewer-config.js.map +1 -1
  257. package/dist/core/viewer-local.js +4 -4
  258. package/dist/core/viewer-local.js.map +1 -1
  259. package/dist/core/viewer-remote.js +1 -1
  260. package/dist/core/viewer-remote.js.map +1 -1
  261. package/dist/plugins/agents/acp/url-guard.d.ts +1 -1
  262. package/dist/plugins/agents/acp/url-guard.js +2 -2
  263. package/dist/plugins/agents/acp/url-guard.js.map +1 -1
  264. package/dist/plugins/agents/antigravity/ensure-mcp-config.d.ts +6 -6
  265. package/dist/plugins/agents/antigravity/ensure-mcp-config.d.ts.map +1 -1
  266. package/dist/plugins/agents/antigravity/ensure-mcp-config.js +12 -12
  267. package/dist/plugins/agents/antigravity/ensure-mcp-config.js.map +1 -1
  268. package/dist/plugins/agents/antigravity/index.js +10 -10
  269. package/dist/plugins/agents/antigravity/index.js.map +1 -1
  270. package/dist/plugins/agents/claude-code/index.d.ts +2 -2
  271. package/dist/plugins/agents/claude-code/index.js +16 -16
  272. package/dist/plugins/agents/claude-code/index.js.map +1 -1
  273. package/dist/plugins/agents/claude-code/mcp-approval-server.js +13 -13
  274. package/dist/plugins/agents/claude-code/mcp-approval-server.js.map +1 -1
  275. package/dist/plugins/agents/codex/build-mcp-cli-args.d.ts +4 -4
  276. package/dist/plugins/agents/codex/build-mcp-cli-args.js +14 -14
  277. package/dist/plugins/agents/codex/build-mcp-cli-args.js.map +1 -1
  278. package/dist/plugins/agents/codex/index.d.ts +3 -3
  279. package/dist/plugins/agents/codex/index.js +14 -14
  280. package/dist/plugins/agents/codex/index.js.map +1 -1
  281. package/dist/plugins/agents/cursor/ensure-mcp-config.d.ts +5 -5
  282. package/dist/plugins/agents/cursor/ensure-mcp-config.d.ts.map +1 -1
  283. package/dist/plugins/agents/cursor/ensure-mcp-config.js +11 -11
  284. package/dist/plugins/agents/cursor/ensure-mcp-config.js.map +1 -1
  285. package/dist/plugins/agents/cursor/index.d.ts +1 -1
  286. package/dist/plugins/agents/cursor/index.js +12 -12
  287. package/dist/plugins/agents/cursor/index.js.map +1 -1
  288. package/dist/plugins/agents/native/index.js +14 -14
  289. package/dist/plugins/agents/native/index.js.map +1 -1
  290. package/dist/plugins/agents/native/tool-registry.d.ts +3 -3
  291. package/dist/plugins/agents/native/tool-registry.d.ts.map +1 -1
  292. package/dist/plugins/agents/native/tool-registry.js +5 -5
  293. package/dist/plugins/agents/native/tool-registry.js.map +1 -1
  294. package/dist/plugins/agents/opencode/ensure-mcp-config.d.ts +1 -1
  295. package/dist/plugins/agents/opencode/ensure-mcp-config.js +9 -9
  296. package/dist/plugins/agents/opencode/ensure-mcp-config.js.map +1 -1
  297. package/dist/plugins/agents/opencode/index.js +3 -3
  298. package/dist/plugins/agents/opencode/index.js.map +1 -1
  299. package/dist/plugins/agents/opencode/opencode-http-adapter.d.ts +4 -0
  300. package/dist/plugins/agents/opencode/opencode-http-adapter.d.ts.map +1 -1
  301. package/dist/plugins/agents/opencode/opencode-http-adapter.js +16 -12
  302. package/dist/plugins/agents/opencode/opencode-http-adapter.js.map +1 -1
  303. package/dist/plugins/agents/opencode/opencode-stdio-adapter.d.ts +2 -2
  304. package/dist/plugins/agents/opencode/opencode-stdio-adapter.d.ts.map +1 -1
  305. package/dist/plugins/agents/opencode/opencode-stdio-adapter.js +7 -5
  306. package/dist/plugins/agents/opencode/opencode-stdio-adapter.js.map +1 -1
  307. package/dist/plugins/agents/opencode/serve-manager.d.ts +1 -1
  308. package/dist/plugins/agents/opencode/serve-manager.d.ts.map +1 -1
  309. package/dist/plugins/agents/opencode/serve-manager.js +10 -10
  310. package/dist/plugins/agents/opencode/serve-manager.js.map +1 -1
  311. package/dist/plugins/agents/pi-native/factory.js +10 -10
  312. package/dist/plugins/agents/pi-native/factory.js.map +1 -1
  313. package/dist/plugins/agents/pi-native/index.d.ts +3 -3
  314. package/dist/plugins/agents/pi-native/index.d.ts.map +1 -1
  315. package/dist/plugins/agents/pi-native/index.js +2 -2
  316. package/dist/plugins/agents/pi-native/index.js.map +1 -1
  317. package/dist/plugins/agents/pi-native/tool-bridge.js +1 -1
  318. package/dist/plugins/agents/pi-native/tool-bridge.js.map +1 -1
  319. package/dist/plugins/agents/pi-native/tools.js +4 -4
  320. package/dist/plugins/agents/pi-native/tools.js.map +1 -1
  321. package/dist/plugins/messengers/dingtalk/dingtalk-adapter.d.ts +1 -1
  322. package/dist/plugins/messengers/dingtalk/dingtalk-adapter.js +2 -2
  323. package/dist/plugins/messengers/dingtalk/dingtalk-adapter.js.map +1 -1
  324. package/dist/plugins/messengers/email/email-adapter.js +15 -15
  325. package/dist/plugins/messengers/email/email-adapter.js.map +1 -1
  326. package/dist/plugins/messengers/telegram/media-download.d.ts +1 -1
  327. package/dist/plugins/messengers/telegram/media-download.js +4 -4
  328. package/dist/plugins/messengers/telegram/media-download.js.map +1 -1
  329. package/dist/plugins/messengers/telegram/telegram-adapter.d.ts +1 -1
  330. package/dist/plugins/messengers/telegram/telegram-adapter.js +3 -3
  331. package/dist/plugins/messengers/telegram/telegram-adapter.js.map +1 -1
  332. package/dist/plugins/messengers/wechat/context-store.js +1 -1
  333. package/dist/plugins/messengers/wechat/context-store.js.map +1 -1
  334. package/dist/plugins/messengers/wechat/ilink-adapter.js +1 -1
  335. package/dist/plugins/messengers/wechat/ilink-adapter.js.map +1 -1
  336. package/dist/plugins/messengers/wechat/ilink-client.js +1 -1
  337. package/dist/plugins/messengers/wechat/ilink-client.js.map +1 -1
  338. package/dist/plugins/messengers/wechat/media-download.js +1 -1
  339. package/dist/plugins/messengers/wechat/media-download.js.map +1 -1
  340. package/dist/scripts/migrate-gcj02-to-wgs84.js +1 -1
  341. package/dist/scripts/migrate-gcj02-to-wgs84.js.map +1 -1
  342. package/dist/web/public/assets/{a2a-Dnc-MHI-.js → a2a-D7MoJ1iT.js} +2 -2
  343. package/dist/web/public/assets/{a2a-Dnc-MHI-.js.map → a2a-D7MoJ1iT.js.map} +1 -1
  344. package/dist/web/public/assets/{activity-CKQwfSVC.js → activity-BAgb2WZC.js} +2 -2
  345. package/dist/web/public/assets/{activity-CKQwfSVC.js.map → activity-BAgb2WZC.js.map} +1 -1
  346. package/dist/web/public/assets/{admins-C7MdDEF0.js → admins-CZYANmhn.js} +2 -2
  347. package/dist/web/public/assets/{admins-C7MdDEF0.js.map → admins-CZYANmhn.js.map} +1 -1
  348. package/dist/web/public/assets/{agents-Be4IUCYz.js → agents-BXThDW6f.js} +2 -2
  349. package/dist/web/public/assets/agents-BXThDW6f.js.map +1 -0
  350. package/dist/web/public/assets/{approvals-KCd1BSvN.js → approvals-ByPXIYVl.js} +2 -2
  351. package/dist/web/public/assets/{approvals-KCd1BSvN.js.map → approvals-ByPXIYVl.js.map} +1 -1
  352. package/dist/web/public/assets/{arrow-down-NRUr_gzg.js → arrow-down-B8DkdbEY.js} +2 -2
  353. package/dist/web/public/assets/{arrow-down-NRUr_gzg.js.map → arrow-down-B8DkdbEY.js.map} +1 -1
  354. package/dist/web/public/assets/{arrow-up-4KyqPaSd.js → arrow-up-i_dEdXkz.js} +2 -2
  355. package/dist/web/public/assets/{arrow-up-4KyqPaSd.js.map → arrow-up-i_dEdXkz.js.map} +1 -1
  356. package/dist/web/public/assets/{asks-nKwuDJpD.js → asks-yD_inOnM.js} +2 -2
  357. package/dist/web/public/assets/{asks-nKwuDJpD.js.map → asks-yD_inOnM.js.map} +1 -1
  358. package/dist/web/public/assets/{audit-Bf4Yv1or.js → audit-teCIRtgN.js} +2 -2
  359. package/dist/web/public/assets/{audit-Bf4Yv1or.js.map → audit-teCIRtgN.js.map} +1 -1
  360. package/dist/web/public/assets/{bell--lSOhH-X.js → bell-CeWDMs8_.js} +2 -2
  361. package/dist/web/public/assets/{bell--lSOhH-X.js.map → bell-CeWDMs8_.js.map} +1 -1
  362. package/dist/web/public/assets/{bgjobs-Daya2BMh.js → bgjobs-Rc05aEy9.js} +2 -2
  363. package/dist/web/public/assets/bgjobs-Rc05aEy9.js.map +1 -0
  364. package/dist/web/public/assets/{brain-DF90t0yo.js → brain-BQqv0Zhc.js} +2 -2
  365. package/dist/web/public/assets/{brain-DF90t0yo.js.map → brain-BQqv0Zhc.js.map} +1 -1
  366. package/dist/web/public/assets/{briefcase-aRM_fCrr.js → briefcase-DUXbR4xs.js} +2 -2
  367. package/dist/web/public/assets/{briefcase-aRM_fCrr.js.map → briefcase-DUXbR4xs.js.map} +1 -1
  368. package/dist/web/public/assets/{chat-BhnNXkIJ.js → chat-DQpQLW9j.js} +2 -2
  369. package/dist/web/public/assets/{chat-BhnNXkIJ.js.map → chat-DQpQLW9j.js.map} +1 -1
  370. package/dist/web/public/assets/{chevron-left-DK-fhgiL.js → chevron-left-RC6mMSiX.js} +2 -2
  371. package/dist/web/public/assets/{chevron-left-DK-fhgiL.js.map → chevron-left-RC6mMSiX.js.map} +1 -1
  372. package/dist/web/public/assets/{chevron-right-BGhMfCcE.js → chevron-right-DrkYVi19.js} +2 -2
  373. package/dist/web/public/assets/{chevron-right-BGhMfCcE.js.map → chevron-right-DrkYVi19.js.map} +1 -1
  374. package/dist/web/public/assets/{circle-check-BWBI4Qhk.js → circle-check-DZnkaUdk.js} +2 -2
  375. package/dist/web/public/assets/{circle-check-BWBI4Qhk.js.map → circle-check-DZnkaUdk.js.map} +1 -1
  376. package/dist/web/public/assets/{circle-check-big-BppjBT7j.js → circle-check-big-BC8ntMsz.js} +2 -2
  377. package/dist/web/public/assets/{circle-check-big-BppjBT7j.js.map → circle-check-big-BC8ntMsz.js.map} +1 -1
  378. package/dist/web/public/assets/{circle-x-BZ3UUhcm.js → circle-x-DHK7ypFY.js} +2 -2
  379. package/dist/web/public/assets/{circle-x-BZ3UUhcm.js.map → circle-x-DHK7ypFY.js.map} +1 -1
  380. package/dist/web/public/assets/{clock-ChP0IxI4.js → clock-DXHhWqJH.js} +2 -2
  381. package/dist/web/public/assets/{clock-ChP0IxI4.js.map → clock-DXHhWqJH.js.map} +1 -1
  382. package/dist/web/public/assets/{confirm-dialog-DrP5Lfwx.js → confirm-dialog-gPKJnvEW.js} +2 -2
  383. package/dist/web/public/assets/{confirm-dialog-DrP5Lfwx.js.map → confirm-dialog-gPKJnvEW.js.map} +1 -1
  384. package/dist/web/public/assets/{copy-CR2c0pyG.js → copy-DtQxgcR0.js} +2 -2
  385. package/dist/web/public/assets/{copy-CR2c0pyG.js.map → copy-DtQxgcR0.js.map} +1 -1
  386. package/dist/web/public/assets/{data-table-DElP7TJm.js → data-table-DOKUic1J.js} +2 -2
  387. package/dist/web/public/assets/{data-table-DElP7TJm.js.map → data-table-DOKUic1J.js.map} +1 -1
  388. package/dist/web/public/assets/distill-p6P7-1UR.js +7 -0
  389. package/dist/web/public/assets/distill-p6P7-1UR.js.map +1 -0
  390. package/dist/web/public/assets/{download-DO4Kw3Fi.js → download-CqNiIHa8.js} +2 -2
  391. package/dist/web/public/assets/{download-DO4Kw3Fi.js.map → download-CqNiIHa8.js.map} +1 -1
  392. package/dist/web/public/assets/email-DwbfTUlV.js +7 -0
  393. package/dist/web/public/assets/email-DwbfTUlV.js.map +1 -0
  394. package/dist/web/public/assets/{empty-state-DGH3i5i2.js → empty-state-CTwOQemt.js} +2 -2
  395. package/dist/web/public/assets/{empty-state-DGH3i5i2.js.map → empty-state-CTwOQemt.js.map} +1 -1
  396. package/dist/web/public/assets/{external-link-B6aOBfUG.js → external-link-BY7Ye8yi.js} +2 -2
  397. package/dist/web/public/assets/{external-link-B6aOBfUG.js.map → external-link-BY7Ye8yi.js.map} +1 -1
  398. package/dist/web/public/assets/{eye-BMxHZFil.js → eye-6RUADoDS.js} +2 -2
  399. package/dist/web/public/assets/{eye-BMxHZFil.js.map → eye-6RUADoDS.js.map} +1 -1
  400. package/dist/web/public/assets/{facts-B9PlO3xo.js → facts-DXE0aJmb.js} +2 -2
  401. package/dist/web/public/assets/{facts-B9PlO3xo.js.map → facts-DXE0aJmb.js.map} +1 -1
  402. package/dist/web/public/assets/{goals-DX_RjDAM.js → goals-C1LCm3qL.js} +2 -2
  403. package/dist/web/public/assets/{goals-DX_RjDAM.js.map → goals-C1LCm3qL.js.map} +1 -1
  404. package/dist/web/public/assets/{health-BAcwcy02.js → health-wqCp-K_o.js} +2 -2
  405. package/dist/web/public/assets/{health-BAcwcy02.js.map → health-wqCp-K_o.js.map} +1 -1
  406. package/dist/web/public/assets/{heart-pulse-Cl-tJTJY.js → heart-pulse-DfqI4GF7.js} +2 -2
  407. package/dist/web/public/assets/{heart-pulse-Cl-tJTJY.js.map → heart-pulse-DfqI4GF7.js.map} +1 -1
  408. package/dist/web/public/assets/{heartbeat-BF_rPcKb.js → heartbeat-Bumv4XtQ.js} +2 -2
  409. package/dist/web/public/assets/{heartbeat-BF_rPcKb.js.map → heartbeat-Bumv4XtQ.js.map} +1 -1
  410. package/dist/web/public/assets/{hot-XOCA1xAY.js → hot-B-CMjQIr.js} +2 -2
  411. package/dist/web/public/assets/{hot-XOCA1xAY.js.map → hot-B-CMjQIr.js.map} +1 -1
  412. package/dist/web/public/assets/{index-CzlhMSb2.js → index-DHh1LYlA.js} +29 -29
  413. package/dist/web/public/assets/{index-CzlhMSb2.js.map → index-DHh1LYlA.js.map} +1 -1
  414. package/dist/web/public/assets/{injection-ecvQ-6Ya.js → injection-Dn_XqgLG.js} +2 -2
  415. package/dist/web/public/assets/{injection-ecvQ-6Ya.js.map → injection-Dn_XqgLG.js.map} +1 -1
  416. package/dist/web/public/assets/{installed-D8VzYRBe.js → installed-Cet-1M2Q.js} +2 -2
  417. package/dist/web/public/assets/{installed-D8VzYRBe.js.map → installed-Cet-1M2Q.js.map} +1 -1
  418. package/dist/web/public/assets/{jobs-CpuY6G8D.js → jobs-CfEzOOAC.js} +2 -2
  419. package/dist/web/public/assets/{jobs-CpuY6G8D.js.map → jobs-CfEzOOAC.js.map} +1 -1
  420. package/dist/web/public/assets/{layout-BROGs5wv.js → layout-BX43KyXM.js} +2 -2
  421. package/dist/web/public/assets/{layout-BROGs5wv.js.map → layout-BX43KyXM.js.map} +1 -1
  422. package/dist/web/public/assets/{layout--XsfZzpI.js → layout-BcYZlaqf.js} +2 -2
  423. package/dist/web/public/assets/{layout--XsfZzpI.js.map → layout-BcYZlaqf.js.map} +1 -1
  424. package/dist/web/public/assets/{layout-DdbuRh8P.js → layout-Cb7looUv.js} +2 -2
  425. package/dist/web/public/assets/{layout-DdbuRh8P.js.map → layout-Cb7looUv.js.map} +1 -1
  426. package/dist/web/public/assets/{layout-BezPqRLV.js → layout-D7xH78OU.js} +2 -2
  427. package/dist/web/public/assets/{layout-BezPqRLV.js.map → layout-D7xH78OU.js.map} +1 -1
  428. package/dist/web/public/assets/{layout-Pxfmfh_2.js → layout-D_3ZcVG7.js} +2 -2
  429. package/dist/web/public/assets/{layout-Pxfmfh_2.js.map → layout-D_3ZcVG7.js.map} +1 -1
  430. package/dist/web/public/assets/llm-BZ9qqp-D.js +27 -0
  431. package/dist/web/public/assets/llm-BZ9qqp-D.js.map +1 -0
  432. package/dist/web/public/assets/{loader-circle-AgQ2XO06.js → loader-circle-DgdBWYl0.js} +2 -2
  433. package/dist/web/public/assets/{loader-circle-AgQ2XO06.js.map → loader-circle-DgdBWYl0.js.map} +1 -1
  434. package/dist/web/public/assets/{map-pin-C6sGB9SZ.js → map-pin-3QS1A0-I.js} +2 -2
  435. package/dist/web/public/assets/{map-pin-C6sGB9SZ.js.map → map-pin-3QS1A0-I.js.map} +1 -1
  436. package/dist/web/public/assets/{mcp-jqsjSumH.js → mcp-DwKZULET.js} +2 -2
  437. package/dist/web/public/assets/{mcp-jqsjSumH.js.map → mcp-DwKZULET.js.map} +1 -1
  438. package/dist/web/public/assets/{memos-C38YN2Rf.js → memos-BBtqFcoH.js} +2 -2
  439. package/dist/web/public/assets/{memos-C38YN2Rf.js.map → memos-BBtqFcoH.js.map} +1 -1
  440. package/dist/web/public/assets/{messengers-l74nqYZF.js → messengers-i7WvNT3o.js} +2 -2
  441. package/dist/web/public/assets/messengers-i7WvNT3o.js.map +1 -0
  442. package/dist/web/public/assets/{mobile-CHhYS0Tw.js → mobile-Bq0FH9JV.js} +2 -2
  443. package/dist/web/public/assets/{mobile-CHhYS0Tw.js.map → mobile-Bq0FH9JV.js.map} +1 -1
  444. package/dist/web/public/assets/{network-CIrcKaZn.js → network--s113Jkm.js} +2 -2
  445. package/dist/web/public/assets/{network-CIrcKaZn.js.map → network--s113Jkm.js.map} +1 -1
  446. package/dist/web/public/assets/{outbox-O1lzMZPk.js → outbox-BbfC5kuG.js} +2 -2
  447. package/dist/web/public/assets/{outbox-O1lzMZPk.js.map → outbox-BbfC5kuG.js.map} +1 -1
  448. package/dist/web/public/assets/{pagination-CXBUSf6r.js → pagination-DkdCTctJ.js} +2 -2
  449. package/dist/web/public/assets/{pagination-CXBUSf6r.js.map → pagination-DkdCTctJ.js.map} +1 -1
  450. package/dist/web/public/assets/{persona-CI4tkm_n.js → persona-BvtcZh6G.js} +2 -2
  451. package/dist/web/public/assets/{persona-CI4tkm_n.js.map → persona-BvtcZh6G.js.map} +1 -1
  452. package/dist/web/public/assets/{plans-D8RZ9aXq.js → plans-i3a6lrqF.js} +2 -2
  453. package/dist/web/public/assets/{plans-D8RZ9aXq.js.map → plans-i3a6lrqF.js.map} +1 -1
  454. package/dist/web/public/assets/{play-DQ3P_XWl.js → play-CPoE_JnS.js} +2 -2
  455. package/dist/web/public/assets/{play-DQ3P_XWl.js.map → play-CPoE_JnS.js.map} +1 -1
  456. package/dist/web/public/assets/{plus-Zai0UXKL.js → plus-CfzKV_0u.js} +2 -2
  457. package/dist/web/public/assets/{plus-Zai0UXKL.js.map → plus-CfzKV_0u.js.map} +1 -1
  458. package/dist/web/public/assets/policy-Cm88P8LO.js +2 -0
  459. package/dist/web/public/assets/policy-Cm88P8LO.js.map +1 -0
  460. package/dist/web/public/assets/{qr-code-zcjicWRK.js → qr-code-DMkV8nv2.js} +2 -2
  461. package/dist/web/public/assets/{qr-code-zcjicWRK.js.map → qr-code-DMkV8nv2.js.map} +1 -1
  462. package/dist/web/public/assets/{refresh-ccw-CM-Cjwud.js → refresh-ccw-nBMm5Xal.js} +2 -2
  463. package/dist/web/public/assets/{refresh-ccw-CM-Cjwud.js.map → refresh-ccw-nBMm5Xal.js.map} +1 -1
  464. package/dist/web/public/assets/{reminders-BR6noe6I.js → reminders-DjEujanC.js} +2 -2
  465. package/dist/web/public/assets/{reminders-BR6noe6I.js.map → reminders-DjEujanC.js.map} +1 -1
  466. package/dist/web/public/assets/{save-xBMgs6Bd.js → save-DbrrCFDM.js} +2 -2
  467. package/dist/web/public/assets/{save-xBMgs6Bd.js.map → save-DbrrCFDM.js.map} +1 -1
  468. package/dist/web/public/assets/{schedules-Brp1Fomd.js → schedules-DzwDWykc.js} +2 -2
  469. package/dist/web/public/assets/{schedules-Brp1Fomd.js.map → schedules-DzwDWykc.js.map} +1 -1
  470. package/dist/web/public/assets/search-5q3dkINm.js +17 -0
  471. package/dist/web/public/assets/search-5q3dkINm.js.map +1 -0
  472. package/dist/web/public/assets/{search-CIc8bWW1.js → search-DbE4VEm9.js} +2 -2
  473. package/dist/web/public/assets/{search-CIc8bWW1.js.map → search-DbE4VEm9.js.map} +1 -1
  474. package/dist/web/public/assets/security-BIcnUrAs.js +2 -0
  475. package/dist/web/public/assets/security-BIcnUrAs.js.map +1 -0
  476. package/dist/web/public/assets/{service-Bo9rkfQX.js → service-CnorFHzZ.js} +2 -2
  477. package/dist/web/public/assets/{service-Bo9rkfQX.js.map → service-CnorFHzZ.js.map} +1 -1
  478. package/dist/web/public/assets/{shield-alert-bg0_ILjD.js → shield-alert-WOa69jy3.js} +2 -2
  479. package/dist/web/public/assets/{shield-alert-bg0_ILjD.js.map → shield-alert-WOa69jy3.js.map} +1 -1
  480. package/dist/web/public/assets/{status-badge-Bw4TDDCb.js → status-badge-D5xhwquL.js} +2 -2
  481. package/dist/web/public/assets/{status-badge-Bw4TDDCb.js.map → status-badge-D5xhwquL.js.map} +1 -1
  482. package/dist/web/public/assets/{subtasks-D58R9C_Z.js → subtasks-DMRyk6YS.js} +2 -2
  483. package/dist/web/public/assets/{subtasks-D58R9C_Z.js.map → subtasks-DMRyk6YS.js.map} +1 -1
  484. package/dist/web/public/assets/{table-D4S5FCk_.js → table-Dx65w6V0.js} +2 -2
  485. package/dist/web/public/assets/{table-D4S5FCk_.js.map → table-Dx65w6V0.js.map} +1 -1
  486. package/dist/web/public/assets/{topn-DDxDNIZf.js → topn-L7Juczp3.js} +2 -2
  487. package/dist/web/public/assets/{topn-DDxDNIZf.js.map → topn-L7Juczp3.js.map} +1 -1
  488. package/dist/web/public/assets/{trash-2-CB7X8tay.js → trash-2-7xrfqd-v.js} +2 -2
  489. package/dist/web/public/assets/{trash-2-CB7X8tay.js.map → trash-2-7xrfqd-v.js.map} +1 -1
  490. package/dist/web/public/assets/{use-agim-skills-BV2IJPlc.js → use-agim-skills-pFjfgqMF.js} +2 -2
  491. package/dist/web/public/assets/{use-agim-skills-BV2IJPlc.js.map → use-agim-skills-pFjfgqMF.js.map} +1 -1
  492. package/dist/web/public/assets/{use-background-tasks-Dk9S55ip.js → use-background-tasks-D1--hHjp.js} +2 -2
  493. package/dist/web/public/assets/{use-background-tasks-Dk9S55ip.js.map → use-background-tasks-D1--hHjp.js.map} +1 -1
  494. package/dist/web/public/assets/{use-memory-DncmZXGJ.js → use-memory-Bz1Zao7g.js} +2 -2
  495. package/dist/web/public/assets/{use-memory-DncmZXGJ.js.map → use-memory-Bz1Zao7g.js.map} +1 -1
  496. package/dist/web/public/assets/{use-observability-CcDO7PdN.js → use-observability-DtqSWVjM.js} +2 -2
  497. package/dist/web/public/assets/{use-observability-CcDO7PdN.js.map → use-observability-DtqSWVjM.js.map} +1 -1
  498. package/dist/web/public/assets/{use-settings-DZhfMpNR.js → use-settings-DKbDqCEJ.js} +2 -2
  499. package/dist/web/public/assets/{use-settings-DZhfMpNR.js.map → use-settings-DKbDqCEJ.js.map} +1 -1
  500. package/dist/web/public/assets/{use-workspace-ywkrT7Aj.js → use-workspace-CConjEx0.js} +2 -2
  501. package/dist/web/public/assets/{use-workspace-ywkrT7Aj.js.map → use-workspace-CConjEx0.js.map} +1 -1
  502. package/dist/web/public/assets/vector-D8sEa2W-.js +2 -0
  503. package/dist/web/public/assets/vector-D8sEa2W-.js.map +1 -0
  504. package/dist/web/public/assets/viewer-aSIjAKVA.js +12 -0
  505. package/dist/web/public/assets/viewer-aSIjAKVA.js.map +1 -0
  506. package/dist/web/public/assets/{workspace-BvrXvliN.js → workspace-BqwWoinI.js} +2 -2
  507. package/dist/web/public/assets/{workspace-BvrXvliN.js.map → workspace-BqwWoinI.js.map} +1 -1
  508. package/dist/web/public/assets/{workspaces-0H6Dzz6N.js → workspaces-ChsJcrav.js} +2 -2
  509. package/dist/web/public/assets/{workspaces-0H6Dzz6N.js.map → workspaces-ChsJcrav.js.map} +1 -1
  510. package/dist/web/public/index.html +1 -1
  511. package/dist/web/public/loc.html +1 -1
  512. package/dist/web/public/login.html +2 -2
  513. package/dist/web/server.d.ts +2 -2
  514. package/dist/web/server.js +121 -120
  515. package/dist/web/server.js.map +1 -1
  516. package/package.json +2 -3
  517. package/dist/core/llm/imhub-dispatcher.d.ts.map +0 -1
  518. package/dist/core/llm/imhub-dispatcher.js.map +0 -1
  519. package/dist/web/public/assets/agents-Be4IUCYz.js.map +0 -1
  520. package/dist/web/public/assets/bgjobs-Daya2BMh.js.map +0 -1
  521. package/dist/web/public/assets/distill-DxSq7g_8.js +0 -7
  522. package/dist/web/public/assets/distill-DxSq7g_8.js.map +0 -1
  523. package/dist/web/public/assets/email-Dkqwudqq.js +0 -7
  524. package/dist/web/public/assets/email-Dkqwudqq.js.map +0 -1
  525. package/dist/web/public/assets/llm-IXFv_MMM.js +0 -27
  526. package/dist/web/public/assets/llm-IXFv_MMM.js.map +0 -1
  527. package/dist/web/public/assets/messengers-l74nqYZF.js.map +0 -1
  528. package/dist/web/public/assets/policy-BodrOHl5.js +0 -2
  529. package/dist/web/public/assets/policy-BodrOHl5.js.map +0 -1
  530. package/dist/web/public/assets/search-nk8nyLFI.js +0 -17
  531. package/dist/web/public/assets/search-nk8nyLFI.js.map +0 -1
  532. package/dist/web/public/assets/security-DWxWfpuX.js +0 -2
  533. package/dist/web/public/assets/security-DWxWfpuX.js.map +0 -1
  534. package/dist/web/public/assets/vector-B3h4iyfn.js +0 -2
  535. package/dist/web/public/assets/vector-B3h4iyfn.js.map +0 -1
  536. package/dist/web/public/assets/viewer-Bz3wL-99.js +0 -12
  537. package/dist/web/public/assets/viewer-Bz3wL-99.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"hot-XOCA1xAY.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]}
1
+ {"version":3,"file":"hot-B-CMjQIr.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]}