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":"layout-DdbuRh8P.js","sources":["../../src/components/memory/user-picker.tsx","../../src/routes/memory/layout.tsx"],"sourcesContent":["/**\n * MemoryUserPicker — Select for the user_key the /memory route\n * targets. Sources the option list from useMemoryUsers, shows the\n * per-user fact_count + persona-presence as inline metadata so the\n * operator can tell which users are interesting at a glance.\n *\n * Loading: while users fetch, the trigger shows the placeholder so\n * the page doesn't jump.\n *\n * Empty bank: no users → the dropdown is disabled with a tooltip\n * explaining there's nothing to pick. Avoids a confusing \"no items\"\n * dropdown state.\n */\n\nimport { useTranslation } from 'react-i18next'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select'\nimport { useMemoryUsers } from '@/hooks/use-memory'\n\nexport interface MemoryUserPickerProps {\n value: string\n onChange: (next: string) => void\n className?: string\n}\n\nexport function MemoryUserPicker({ value, onChange, className }: MemoryUserPickerProps): JSX.Element {\n const { t } = useTranslation('memory')\n const { data, isLoading } = useMemoryUsers()\n const users = data?.users ?? []\n\n return (\n <Select\n value={value || '__placeholder__'}\n onValueChange={(v) => onChange(v === '__placeholder__' ? '' : v)}\n disabled={isLoading || users.length === 0}\n >\n <SelectTrigger className={className ?? 'h-9 w-72 max-w-full'}>\n <SelectValue placeholder={t('userPicker.placeholder')} />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"__placeholder__\" disabled>\n {t('userPicker.placeholder')}\n </SelectItem>\n {users.map((u) => (\n <SelectItem key={u.user_key} value={u.user_key}>\n <span className=\"flex items-center gap-2\">\n <span className=\"font-mono text-xs\">{u.user_key}</span>\n <span className=\"text-text-dim text-xs\">\n {t('userPicker.factsLabel', { count: u.fact_count })}\n </span>\n {u.has_persona && (\n <span className=\"text-accent text-xs\">·{t('userPicker.personaTag')}·</span>\n )}\n </span>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )\n}\n","/**\n * /memory — layout shell shared by every sub-tab.\n *\n * Memory is partitioned per user_key. The picker lives in the\n * layout so it's the first thing the operator sees and stays put\n * across sub-tabs (facts / persona / vector / skills). The chosen\n * user is held in URL state (?user=) so sub-tabs read it via\n * useSearchParams.\n *\n * Sub-tabs: facts / persona / vector. Skills used to live here too\n * but was promoted to its own top-level /skills tab in 2026-05 — the\n * router keeps a redirect for old /memory/skills bookmarks.\n */\n\nimport { NavLink, Outlet, useSearchParams } from 'react-router-dom'\nimport { useTranslation } from 'react-i18next'\nimport { Topbar } from '@/components/shell/topbar'\nimport { MemoryUserPicker } from '@/components/memory/user-picker'\nimport { cn } from '@/lib/utils'\n\ninterface SubTab {\n to: string\n i18nKey: string\n mounted: boolean\n}\n\nconst SUB_TABS: SubTab[] = [\n { to: 'facts', i18nKey: 'tabs.facts', mounted: true },\n { to: 'persona', i18nKey: 'tabs.persona', mounted: true },\n { to: 'distill', i18nKey: 'tabs.distill', mounted: true },\n { to: 'vector', i18nKey: 'tabs.vector', mounted: true },\n // 'skills' was here; promoted to top-level /skills in 2026-05.\n]\n\nexport default function MemoryLayout(): JSX.Element {\n const { t } = useTranslation('memory')\n const [params, setParams] = useSearchParams()\n const userKey = params.get('user') ?? ''\n\n function setUserKey(next: string): void {\n const p = new URLSearchParams(params)\n if (!next) p.delete('user')\n else p.set('user', next)\n setParams(p, { replace: true })\n }\n\n return (\n <div className=\"flex min-h-dvh flex-col bg-bg\">\n <Topbar />\n\n {/* User picker — the primary navigation control for this page */}\n <div className=\"border-b border-border bg-surface px-3 sm:px-4 py-2\">\n <div className=\"mx-auto flex max-w-7xl items-center gap-3\">\n <span className=\"text-sm text-text-dim shrink-0\">{t('userPicker.label')}</span>\n <MemoryUserPicker value={userKey} onChange={setUserKey} />\n </div>\n </div>\n\n {/* Sub-tab nav */}\n <nav\n className={cn(\n 'sticky top-0 z-10',\n 'flex items-center gap-1',\n 'border-b border-border bg-surface',\n 'px-3 sm:px-4 py-1',\n 'overflow-x-auto',\n )}\n aria-label={t('pageTitle')}\n >\n {SUB_TABS.filter((tab) => tab.mounted).map((tab) => (\n <NavLink\n key={tab.to}\n to={tab.to}\n className={({ isActive }) =>\n cn(\n 'shrink-0 rounded-md px-3 py-1.5 text-sm no-underline',\n 'transition-colors tap-target',\n isActive\n ? 'bg-accent-bg text-accent font-medium'\n : 'text-text-dim hover:bg-surface-hover hover:text-text',\n )\n }\n >\n {t(tab.i18nKey)}\n </NavLink>\n ))}\n </nav>\n\n <main className=\"flex-1 px-3 sm:px-4 py-4 pb-safe\">\n <Outlet />\n </main>\n </div>\n )\n}\n"],"names":["MemoryUserPicker","value","onChange","className","t","useTranslation","data","isLoading","useMemoryUsers","users","jsxs","Select","v","jsx","SelectTrigger","SelectValue","SelectContent","SelectItem","u","SUB_TABS","MemoryLayout","params","setParams","useSearchParams","userKey","setUserKey","next","p","Topbar","cn","tab","NavLink","isActive","Outlet"],"mappings":"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"}
1
+ {"version":3,"file":"layout-Cb7looUv.js","sources":["../../src/components/memory/user-picker.tsx","../../src/routes/memory/layout.tsx"],"sourcesContent":["/**\n * MemoryUserPicker — Select for the user_key the /memory route\n * targets. Sources the option list from useMemoryUsers, shows the\n * per-user fact_count + persona-presence as inline metadata so the\n * operator can tell which users are interesting at a glance.\n *\n * Loading: while users fetch, the trigger shows the placeholder so\n * the page doesn't jump.\n *\n * Empty bank: no users → the dropdown is disabled with a tooltip\n * explaining there's nothing to pick. Avoids a confusing \"no items\"\n * dropdown state.\n */\n\nimport { useTranslation } from 'react-i18next'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select'\nimport { useMemoryUsers } from '@/hooks/use-memory'\n\nexport interface MemoryUserPickerProps {\n value: string\n onChange: (next: string) => void\n className?: string\n}\n\nexport function MemoryUserPicker({ value, onChange, className }: MemoryUserPickerProps): JSX.Element {\n const { t } = useTranslation('memory')\n const { data, isLoading } = useMemoryUsers()\n const users = data?.users ?? []\n\n return (\n <Select\n value={value || '__placeholder__'}\n onValueChange={(v) => onChange(v === '__placeholder__' ? '' : v)}\n disabled={isLoading || users.length === 0}\n >\n <SelectTrigger className={className ?? 'h-9 w-72 max-w-full'}>\n <SelectValue placeholder={t('userPicker.placeholder')} />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"__placeholder__\" disabled>\n {t('userPicker.placeholder')}\n </SelectItem>\n {users.map((u) => (\n <SelectItem key={u.user_key} value={u.user_key}>\n <span className=\"flex items-center gap-2\">\n <span className=\"font-mono text-xs\">{u.user_key}</span>\n <span className=\"text-text-dim text-xs\">\n {t('userPicker.factsLabel', { count: u.fact_count })}\n </span>\n {u.has_persona && (\n <span className=\"text-accent text-xs\">·{t('userPicker.personaTag')}·</span>\n )}\n </span>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )\n}\n","/**\n * /memory — layout shell shared by every sub-tab.\n *\n * Memory is partitioned per user_key. The picker lives in the\n * layout so it's the first thing the operator sees and stays put\n * across sub-tabs (facts / persona / vector / skills). The chosen\n * user is held in URL state (?user=) so sub-tabs read it via\n * useSearchParams.\n *\n * Sub-tabs: facts / persona / vector. Skills used to live here too\n * but was promoted to its own top-level /skills tab in 2026-05 — the\n * router keeps a redirect for old /memory/skills bookmarks.\n */\n\nimport { NavLink, Outlet, useSearchParams } from 'react-router-dom'\nimport { useTranslation } from 'react-i18next'\nimport { Topbar } from '@/components/shell/topbar'\nimport { MemoryUserPicker } from '@/components/memory/user-picker'\nimport { cn } from '@/lib/utils'\n\ninterface SubTab {\n to: string\n i18nKey: string\n mounted: boolean\n}\n\nconst SUB_TABS: SubTab[] = [\n { to: 'facts', i18nKey: 'tabs.facts', mounted: true },\n { to: 'persona', i18nKey: 'tabs.persona', mounted: true },\n { to: 'distill', i18nKey: 'tabs.distill', mounted: true },\n { to: 'vector', i18nKey: 'tabs.vector', mounted: true },\n // 'skills' was here; promoted to top-level /skills in 2026-05.\n]\n\nexport default function MemoryLayout(): JSX.Element {\n const { t } = useTranslation('memory')\n const [params, setParams] = useSearchParams()\n const userKey = params.get('user') ?? ''\n\n function setUserKey(next: string): void {\n const p = new URLSearchParams(params)\n if (!next) p.delete('user')\n else p.set('user', next)\n setParams(p, { replace: true })\n }\n\n return (\n <div className=\"flex min-h-dvh flex-col bg-bg\">\n <Topbar />\n\n {/* User picker — the primary navigation control for this page */}\n <div className=\"border-b border-border bg-surface px-3 sm:px-4 py-2\">\n <div className=\"mx-auto flex max-w-7xl items-center gap-3\">\n <span className=\"text-sm text-text-dim shrink-0\">{t('userPicker.label')}</span>\n <MemoryUserPicker value={userKey} onChange={setUserKey} />\n </div>\n </div>\n\n {/* Sub-tab nav */}\n <nav\n className={cn(\n 'sticky top-0 z-10',\n 'flex items-center gap-1',\n 'border-b border-border bg-surface',\n 'px-3 sm:px-4 py-1',\n 'overflow-x-auto',\n )}\n aria-label={t('pageTitle')}\n >\n {SUB_TABS.filter((tab) => tab.mounted).map((tab) => (\n <NavLink\n key={tab.to}\n to={tab.to}\n className={({ isActive }) =>\n cn(\n 'shrink-0 rounded-md px-3 py-1.5 text-sm no-underline',\n 'transition-colors tap-target',\n isActive\n ? 'bg-accent-bg text-accent font-medium'\n : 'text-text-dim hover:bg-surface-hover hover:text-text',\n )\n }\n >\n {t(tab.i18nKey)}\n </NavLink>\n ))}\n </nav>\n\n <main className=\"flex-1 px-3 sm:px-4 py-4 pb-safe\">\n <Outlet />\n </main>\n </div>\n )\n}\n"],"names":["MemoryUserPicker","value","onChange","className","t","useTranslation","data","isLoading","useMemoryUsers","users","jsxs","Select","v","jsx","SelectTrigger","SelectValue","SelectContent","SelectItem","u","SUB_TABS","MemoryLayout","params","setParams","useSearchParams","userKey","setUserKey","next","p","Topbar","cn","tab","NavLink","isActive","Outlet"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{u as n,j as t,N as o,c as s,O as l}from"./index-CzlhMSb2.js";import"./react-DlP5eolq.js";const r=[{to:"installed",i18nKey:"agimSkills.tab.installed"},{to:"hot",i18nKey:"agimSkills.tab.hot"},{to:"injection",i18nKey:"agimSkills.tab.injection"}];function c(){const{t:i}=n(["settings"]);return t.jsxs("div",{className:"flex flex-col gap-4",children:[t.jsx("nav",{className:s("flex items-center gap-1","border-b border-border","-mx-3 sm:-mx-4 px-3 sm:px-4 pb-2","overflow-x-auto"),"aria-label":i("agimSkills.title"),children:r.map(e=>t.jsx(o,{to:e.to,className:({isActive:a})=>s("shrink-0 rounded-md px-3 py-1.5 text-sm no-underline","transition-colors tap-target",a?"bg-accent-bg text-accent font-medium":"text-text-dim hover:bg-surface-hover hover:text-text"),children:i(e.i18nKey)},e.to))}),t.jsx(l,{})]})}export{c as default};
2
- //# sourceMappingURL=layout-BezPqRLV.js.map
1
+ import{u as n,j as t,N as o,c as s,O as l}from"./index-DHh1LYlA.js";import"./react-DlP5eolq.js";const r=[{to:"installed",i18nKey:"agimSkills.tab.installed"},{to:"hot",i18nKey:"agimSkills.tab.hot"},{to:"injection",i18nKey:"agimSkills.tab.injection"}];function c(){const{t:i}=n(["settings"]);return t.jsxs("div",{className:"flex flex-col gap-4",children:[t.jsx("nav",{className:s("flex items-center gap-1","border-b border-border","-mx-3 sm:-mx-4 px-3 sm:px-4 pb-2","overflow-x-auto"),"aria-label":i("agimSkills.title"),children:r.map(e=>t.jsx(o,{to:e.to,className:({isActive:a})=>s("shrink-0 rounded-md px-3 py-1.5 text-sm no-underline","transition-colors tap-target",a?"bg-accent-bg text-accent font-medium":"text-text-dim hover:bg-surface-hover hover:text-text"),children:i(e.i18nKey)},e.to))}),t.jsx(l,{})]})}export{c as default};
2
+ //# sourceMappingURL=layout-D7xH78OU.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"layout-BezPqRLV.js","sources":["../../src/routes/settings/agim-skills/layout.tsx"],"sourcesContent":["/**\n * /settings/agim-skills — combined skill management.\n *\n * 2026-05 consolidation: the v2 SPA briefly had two skill entry points\n * (top-level /skills + this settings route) which duplicated 95% of\n * the data after multi-root scanning landed. We merged both flows here:\n *\n * installed — agim's own loader view; CRUD against the writable\n * workspace dir, read-only for builtins and skills\n * inherited from ~/.claude/skills + opencode + codex.\n * hot — skillhub.cn 热门 (moved from /skills/hot).\n *\n * Old URLs under /skills still resolve via redirects in router.tsx\n * so bookmarks keep working.\n */\n\nimport { NavLink, Outlet } from 'react-router-dom'\nimport { useTranslation } from 'react-i18next'\nimport { cn } from '@/lib/utils'\n\ninterface SubTab {\n to: string\n i18nKey: string\n}\n\nconst SUB_TABS: SubTab[] = [\n { to: 'installed', i18nKey: 'agimSkills.tab.installed' },\n { to: 'hot', i18nKey: 'agimSkills.tab.hot' },\n // v1.2.151 — system-prompt skill block editor (operator override).\n { to: 'injection', i18nKey: 'agimSkills.tab.injection' },\n]\n\nexport default function SettingsAgimSkillsLayout(): JSX.Element {\n const { t } = useTranslation(['settings'])\n return (\n <div className=\"flex flex-col gap-4\">\n <nav\n className={cn(\n 'flex items-center gap-1',\n 'border-b border-border',\n '-mx-3 sm:-mx-4 px-3 sm:px-4 pb-2',\n 'overflow-x-auto',\n )}\n aria-label={t('agimSkills.title')}\n >\n {SUB_TABS.map((tab) => (\n <NavLink\n key={tab.to}\n to={tab.to}\n className={({ isActive }) =>\n cn(\n 'shrink-0 rounded-md px-3 py-1.5 text-sm no-underline',\n 'transition-colors tap-target',\n isActive\n ? 'bg-accent-bg text-accent font-medium'\n : 'text-text-dim hover:bg-surface-hover hover:text-text',\n )\n }\n >\n {t(tab.i18nKey)}\n </NavLink>\n ))}\n </nav>\n <Outlet />\n </div>\n )\n}\n"],"names":["SUB_TABS","SettingsAgimSkillsLayout","t","useTranslation","jsxs","jsx","cn","tab","NavLink","isActive","Outlet"],"mappings":"gGAyBA,MAAMA,EAAqB,CACzB,CAAE,GAAI,YAAa,QAAS,0BAAA,EAC5B,CAAE,GAAI,MAAa,QAAS,oBAAA,EAE5B,CAAE,GAAI,YAAa,QAAS,0BAAA,CAC9B,EAEA,SAAwBC,GAAwC,CAC9D,KAAM,CAAE,EAAAC,CAAA,EAAMC,EAAe,CAAC,UAAU,CAAC,EACzC,OACEC,EAAAA,KAAC,MAAA,CAAI,UAAU,sBACb,SAAA,CAAAC,EAAAA,IAAC,MAAA,CACC,UAAWC,EACT,0BACA,yBACA,mCACA,iBAAA,EAEF,aAAYJ,EAAE,kBAAkB,EAE/B,SAAAF,EAAS,IAAKO,GACbF,EAAAA,IAACG,EAAA,CAEC,GAAID,EAAI,GACR,UAAW,CAAC,CAAE,SAAAE,CAAA,IACZH,EACE,uDACA,+BACAG,EACI,uCACA,sDAAA,EAIP,SAAAP,EAAEK,EAAI,OAAO,CAAA,EAZTA,EAAI,EAAA,CAcZ,CAAA,CAAA,QAEFG,EAAA,CAAA,CAAO,CAAA,EACV,CAEJ"}
1
+ {"version":3,"file":"layout-D7xH78OU.js","sources":["../../src/routes/settings/agim-skills/layout.tsx"],"sourcesContent":["/**\n * /settings/agim-skills — combined skill management.\n *\n * 2026-05 consolidation: the v2 SPA briefly had two skill entry points\n * (top-level /skills + this settings route) which duplicated 95% of\n * the data after multi-root scanning landed. We merged both flows here:\n *\n * installed — agim's own loader view; CRUD against the writable\n * workspace dir, read-only for builtins and skills\n * inherited from ~/.claude/skills + opencode + codex.\n * hot — skillhub.cn 热门 (moved from /skills/hot).\n *\n * Old URLs under /skills still resolve via redirects in router.tsx\n * so bookmarks keep working.\n */\n\nimport { NavLink, Outlet } from 'react-router-dom'\nimport { useTranslation } from 'react-i18next'\nimport { cn } from '@/lib/utils'\n\ninterface SubTab {\n to: string\n i18nKey: string\n}\n\nconst SUB_TABS: SubTab[] = [\n { to: 'installed', i18nKey: 'agimSkills.tab.installed' },\n { to: 'hot', i18nKey: 'agimSkills.tab.hot' },\n // v1.2.151 — system-prompt skill block editor (operator override).\n { to: 'injection', i18nKey: 'agimSkills.tab.injection' },\n]\n\nexport default function SettingsAgimSkillsLayout(): JSX.Element {\n const { t } = useTranslation(['settings'])\n return (\n <div className=\"flex flex-col gap-4\">\n <nav\n className={cn(\n 'flex items-center gap-1',\n 'border-b border-border',\n '-mx-3 sm:-mx-4 px-3 sm:px-4 pb-2',\n 'overflow-x-auto',\n )}\n aria-label={t('agimSkills.title')}\n >\n {SUB_TABS.map((tab) => (\n <NavLink\n key={tab.to}\n to={tab.to}\n className={({ isActive }) =>\n cn(\n 'shrink-0 rounded-md px-3 py-1.5 text-sm no-underline',\n 'transition-colors tap-target',\n isActive\n ? 'bg-accent-bg text-accent font-medium'\n : 'text-text-dim hover:bg-surface-hover hover:text-text',\n )\n }\n >\n {t(tab.i18nKey)}\n </NavLink>\n ))}\n </nav>\n <Outlet />\n </div>\n )\n}\n"],"names":["SUB_TABS","SettingsAgimSkillsLayout","t","useTranslation","jsxs","jsx","cn","tab","NavLink","isActive","Outlet"],"mappings":"gGAyBA,MAAMA,EAAqB,CACzB,CAAE,GAAI,YAAa,QAAS,0BAAA,EAC5B,CAAE,GAAI,MAAa,QAAS,oBAAA,EAE5B,CAAE,GAAI,YAAa,QAAS,0BAAA,CAC9B,EAEA,SAAwBC,GAAwC,CAC9D,KAAM,CAAE,EAAAC,CAAA,EAAMC,EAAe,CAAC,UAAU,CAAC,EACzC,OACEC,EAAAA,KAAC,MAAA,CAAI,UAAU,sBACb,SAAA,CAAAC,EAAAA,IAAC,MAAA,CACC,UAAWC,EACT,0BACA,yBACA,mCACA,iBAAA,EAEF,aAAYJ,EAAE,kBAAkB,EAE/B,SAAAF,EAAS,IAAKO,GACbF,EAAAA,IAACG,EAAA,CAEC,GAAID,EAAI,GACR,UAAW,CAAC,CAAE,SAAAE,CAAA,IACZH,EACE,uDACA,+BACAG,EACI,uCACA,sDAAA,EAIP,SAAAP,EAAEK,EAAI,OAAO,CAAA,EAZTA,EAAI,EAAA,CAcZ,CAAA,CAAA,QAEFG,EAAA,CAAA,CAAO,CAAA,EACV,CAEJ"}
@@ -1,2 +1,2 @@
1
- import{u as c,f as x,j as e,T as d,S as m,g as p,h as u,i as h,k as b,N as g,c as n,O as y}from"./index-CzlhMSb2.js";import"./react-DlP5eolq.js";const f=[{to:"health",i18nKey:"tabs.health"},{to:"topn",i18nKey:"tabs.topn"},{to:"audit",i18nKey:"tabs.audit"}],j=[1,7,30,90];function N(){const{t}=c("observability"),[r,i]=x(),l=Math.max(1,Number(r.get("days"))||7);function o(s){const a=new URLSearchParams(r);s===7?a.delete("days"):a.set("days",String(s)),i(a,{replace:!0})}return e.jsxs("div",{className:"flex min-h-dvh flex-col bg-bg",children:[e.jsx(d,{}),e.jsx("div",{className:"border-b border-border bg-surface px-3 sm:px-4 py-2",children:e.jsxs("div",{className:"mx-auto flex max-w-7xl items-center gap-3",children:[e.jsx("span",{className:"text-sm text-text-dim shrink-0",children:t("window.label")}),e.jsxs(m,{value:String(l),onValueChange:s=>o(Number(s)),children:[e.jsx(p,{className:"w-32",children:e.jsx(u,{})}),e.jsx(h,{children:j.map(s=>e.jsx(b,{value:String(s),children:t("window.days",{count:s})},s))})]})]})}),e.jsx("nav",{className:n("sticky top-0 z-10","flex items-center gap-1","border-b border-border bg-surface","px-3 sm:px-4 py-1","overflow-x-auto"),"aria-label":t("pageTitle"),children:f.map(s=>e.jsx(g,{to:s.to,className:({isActive:a})=>n("shrink-0 rounded-md px-3 py-1.5 text-sm no-underline","transition-colors tap-target",a?"bg-accent-bg text-accent font-medium":"text-text-dim hover:bg-surface-hover hover:text-text"),children:t(s.i18nKey)},s.to))}),e.jsx("main",{className:"flex-1 px-3 sm:px-4 py-4 pb-safe",children:e.jsx(y,{})})]})}export{N as default};
2
- //# sourceMappingURL=layout-Pxfmfh_2.js.map
1
+ import{u as c,f as x,j as e,T as d,S as m,g as p,h as u,i as h,k as b,N as g,c as n,O as y}from"./index-DHh1LYlA.js";import"./react-DlP5eolq.js";const f=[{to:"health",i18nKey:"tabs.health"},{to:"topn",i18nKey:"tabs.topn"},{to:"audit",i18nKey:"tabs.audit"}],j=[1,7,30,90];function N(){const{t}=c("observability"),[r,i]=x(),l=Math.max(1,Number(r.get("days"))||7);function o(s){const a=new URLSearchParams(r);s===7?a.delete("days"):a.set("days",String(s)),i(a,{replace:!0})}return e.jsxs("div",{className:"flex min-h-dvh flex-col bg-bg",children:[e.jsx(d,{}),e.jsx("div",{className:"border-b border-border bg-surface px-3 sm:px-4 py-2",children:e.jsxs("div",{className:"mx-auto flex max-w-7xl items-center gap-3",children:[e.jsx("span",{className:"text-sm text-text-dim shrink-0",children:t("window.label")}),e.jsxs(m,{value:String(l),onValueChange:s=>o(Number(s)),children:[e.jsx(p,{className:"w-32",children:e.jsx(u,{})}),e.jsx(h,{children:j.map(s=>e.jsx(b,{value:String(s),children:t("window.days",{count:s})},s))})]})]})}),e.jsx("nav",{className:n("sticky top-0 z-10","flex items-center gap-1","border-b border-border bg-surface","px-3 sm:px-4 py-1","overflow-x-auto"),"aria-label":t("pageTitle"),children:f.map(s=>e.jsx(g,{to:s.to,className:({isActive:a})=>n("shrink-0 rounded-md px-3 py-1.5 text-sm no-underline","transition-colors tap-target",a?"bg-accent-bg text-accent font-medium":"text-text-dim hover:bg-surface-hover hover:text-text"),children:t(s.i18nKey)},s.to))}),e.jsx("main",{className:"flex-1 px-3 sm:px-4 py-4 pb-safe",children:e.jsx(y,{})})]})}export{N as default};
2
+ //# sourceMappingURL=layout-D_3ZcVG7.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"layout-Pxfmfh_2.js","sources":["../../src/routes/observability/layout.tsx"],"sourcesContent":["/**\n * /observability — layout shell with sub-tab nav (health / topn /\n * audit) + a global time-window selector that every sub-tab reads\n * via useSearchParams (?days=).\n */\n\nimport { NavLink, Outlet, useSearchParams } from 'react-router-dom'\nimport { useTranslation } from 'react-i18next'\nimport { Topbar } from '@/components/shell/topbar'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select'\nimport { cn } from '@/lib/utils'\n\nconst SUB_TABS = [\n { to: 'health', i18nKey: 'tabs.health' },\n { to: 'topn', i18nKey: 'tabs.topn' },\n { to: 'audit', i18nKey: 'tabs.audit' },\n]\n\nconst DAY_WINDOWS = [1, 7, 30, 90]\n\nexport default function ObservabilityLayout(): JSX.Element {\n const { t } = useTranslation('observability')\n const [params, setParams] = useSearchParams()\n const days = Math.max(1, Number(params.get('days')) || 7)\n\n function setDays(next: number): void {\n const p = new URLSearchParams(params)\n if (next === 7) p.delete('days')\n else p.set('days', String(next))\n setParams(p, { replace: true })\n }\n\n return (\n <div className=\"flex min-h-dvh flex-col bg-bg\">\n <Topbar />\n\n <div className=\"border-b border-border bg-surface px-3 sm:px-4 py-2\">\n <div className=\"mx-auto flex max-w-7xl items-center gap-3\">\n <span className=\"text-sm text-text-dim shrink-0\">{t('window.label')}</span>\n <Select value={String(days)} onValueChange={(v) => setDays(Number(v))}>\n <SelectTrigger className=\"w-32\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {DAY_WINDOWS.map((n) => (\n <SelectItem key={n} value={String(n)}>\n {t('window.days', { count: n })}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n\n <nav\n className={cn(\n 'sticky top-0 z-10',\n 'flex items-center gap-1',\n 'border-b border-border bg-surface',\n 'px-3 sm:px-4 py-1',\n 'overflow-x-auto',\n )}\n aria-label={t('pageTitle')}\n >\n {SUB_TABS.map((tab) => (\n <NavLink\n key={tab.to}\n to={tab.to}\n className={({ isActive }) =>\n cn(\n 'shrink-0 rounded-md px-3 py-1.5 text-sm no-underline',\n 'transition-colors tap-target',\n isActive\n ? 'bg-accent-bg text-accent font-medium'\n : 'text-text-dim hover:bg-surface-hover hover:text-text',\n )\n }\n >\n {t(tab.i18nKey)}\n </NavLink>\n ))}\n </nav>\n\n <main className=\"flex-1 px-3 sm:px-4 py-4 pb-safe\">\n <Outlet />\n </main>\n </div>\n )\n}\n"],"names":["SUB_TABS","DAY_WINDOWS","ObservabilityLayout","useTranslation","params","setParams","useSearchParams","days","setDays","next","p","jsxs","jsx","Topbar","Select","v","SelectTrigger","SelectValue","SelectContent","n","SelectItem","cn","tab","NavLink","isActive","Outlet"],"mappings":"iJAkBA,MAAMA,EAAW,CACf,CAAE,GAAI,SAAU,QAAS,aAAA,EACzB,CAAE,GAAI,OAAU,QAAS,WAAA,EACzB,CAAE,GAAI,QAAU,QAAS,YAAA,CAC3B,EAEMC,EAAc,CAAC,EAAG,EAAG,GAAI,EAAE,EAEjC,SAAwBC,GAAmC,CACzD,KAAM,CAAE,CAAA,EAAMC,EAAe,eAAe,EACtC,CAACC,EAAQC,CAAS,EAAIC,EAAA,EACtBC,EAAO,KAAK,IAAI,EAAG,OAAOH,EAAO,IAAI,MAAM,CAAC,GAAK,CAAC,EAExD,SAASI,EAAQC,EAAoB,CACnC,MAAMC,EAAI,IAAI,gBAAgBN,CAAM,EAChCK,IAAS,EAAGC,EAAE,OAAO,MAAM,EAC1BA,EAAE,IAAI,OAAQ,OAAOD,CAAI,CAAC,EAC/BJ,EAAUK,EAAG,CAAE,QAAS,EAAA,CAAM,CAChC,CAEA,OACEC,EAAAA,KAAC,MAAA,CAAI,UAAU,gCACb,SAAA,CAAAC,EAAAA,IAACC,EAAA,EAAO,QAEP,MAAA,CAAI,UAAU,sDACb,SAAAF,EAAAA,KAAC,MAAA,CAAI,UAAU,4CACb,SAAA,CAAAC,MAAC,OAAA,CAAK,UAAU,iCAAkC,SAAA,EAAE,cAAc,EAAE,EACpED,EAAAA,KAACG,EAAA,CAAO,MAAO,OAAOP,CAAI,EAAG,cAAgBQ,GAAMP,EAAQ,OAAOO,CAAC,CAAC,EAClE,SAAA,CAAAH,MAACI,EAAA,CAAc,UAAU,OACvB,SAAAJ,MAACK,IAAY,EACf,EACAL,MAACM,GACE,SAAAjB,EAAY,IAAKkB,GAChBP,EAAAA,IAACQ,GAAmB,MAAO,OAAOD,CAAC,EAChC,SAAA,EAAE,cAAe,CAAE,MAAOA,EAAG,CAAA,EADfA,CAEjB,CACD,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,EAEAP,EAAAA,IAAC,MAAA,CACC,UAAWS,EACT,oBACA,0BACA,oCACA,oBACA,iBAAA,EAEF,aAAY,EAAE,WAAW,EAExB,SAAArB,EAAS,IAAKsB,GACbV,EAAAA,IAACW,EAAA,CAEC,GAAID,EAAI,GACR,UAAW,CAAC,CAAE,SAAAE,CAAA,IACZH,EACE,uDACA,+BACAG,EACI,uCACA,sDAAA,EAIP,SAAA,EAAEF,EAAI,OAAO,CAAA,EAZTA,EAAI,EAAA,CAcZ,CAAA,CAAA,QAGF,OAAA,CAAK,UAAU,mCACd,SAAAV,EAAAA,IAACa,IAAO,CAAA,CACV,CAAA,EACF,CAEJ"}
1
+ {"version":3,"file":"layout-D_3ZcVG7.js","sources":["../../src/routes/observability/layout.tsx"],"sourcesContent":["/**\n * /observability — layout shell with sub-tab nav (health / topn /\n * audit) + a global time-window selector that every sub-tab reads\n * via useSearchParams (?days=).\n */\n\nimport { NavLink, Outlet, useSearchParams } from 'react-router-dom'\nimport { useTranslation } from 'react-i18next'\nimport { Topbar } from '@/components/shell/topbar'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select'\nimport { cn } from '@/lib/utils'\n\nconst SUB_TABS = [\n { to: 'health', i18nKey: 'tabs.health' },\n { to: 'topn', i18nKey: 'tabs.topn' },\n { to: 'audit', i18nKey: 'tabs.audit' },\n]\n\nconst DAY_WINDOWS = [1, 7, 30, 90]\n\nexport default function ObservabilityLayout(): JSX.Element {\n const { t } = useTranslation('observability')\n const [params, setParams] = useSearchParams()\n const days = Math.max(1, Number(params.get('days')) || 7)\n\n function setDays(next: number): void {\n const p = new URLSearchParams(params)\n if (next === 7) p.delete('days')\n else p.set('days', String(next))\n setParams(p, { replace: true })\n }\n\n return (\n <div className=\"flex min-h-dvh flex-col bg-bg\">\n <Topbar />\n\n <div className=\"border-b border-border bg-surface px-3 sm:px-4 py-2\">\n <div className=\"mx-auto flex max-w-7xl items-center gap-3\">\n <span className=\"text-sm text-text-dim shrink-0\">{t('window.label')}</span>\n <Select value={String(days)} onValueChange={(v) => setDays(Number(v))}>\n <SelectTrigger className=\"w-32\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {DAY_WINDOWS.map((n) => (\n <SelectItem key={n} value={String(n)}>\n {t('window.days', { count: n })}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n\n <nav\n className={cn(\n 'sticky top-0 z-10',\n 'flex items-center gap-1',\n 'border-b border-border bg-surface',\n 'px-3 sm:px-4 py-1',\n 'overflow-x-auto',\n )}\n aria-label={t('pageTitle')}\n >\n {SUB_TABS.map((tab) => (\n <NavLink\n key={tab.to}\n to={tab.to}\n className={({ isActive }) =>\n cn(\n 'shrink-0 rounded-md px-3 py-1.5 text-sm no-underline',\n 'transition-colors tap-target',\n isActive\n ? 'bg-accent-bg text-accent font-medium'\n : 'text-text-dim hover:bg-surface-hover hover:text-text',\n )\n }\n >\n {t(tab.i18nKey)}\n </NavLink>\n ))}\n </nav>\n\n <main className=\"flex-1 px-3 sm:px-4 py-4 pb-safe\">\n <Outlet />\n </main>\n </div>\n )\n}\n"],"names":["SUB_TABS","DAY_WINDOWS","ObservabilityLayout","useTranslation","params","setParams","useSearchParams","days","setDays","next","p","jsxs","jsx","Topbar","Select","v","SelectTrigger","SelectValue","SelectContent","n","SelectItem","cn","tab","NavLink","isActive","Outlet"],"mappings":"iJAkBA,MAAMA,EAAW,CACf,CAAE,GAAI,SAAU,QAAS,aAAA,EACzB,CAAE,GAAI,OAAU,QAAS,WAAA,EACzB,CAAE,GAAI,QAAU,QAAS,YAAA,CAC3B,EAEMC,EAAc,CAAC,EAAG,EAAG,GAAI,EAAE,EAEjC,SAAwBC,GAAmC,CACzD,KAAM,CAAE,CAAA,EAAMC,EAAe,eAAe,EACtC,CAACC,EAAQC,CAAS,EAAIC,EAAA,EACtBC,EAAO,KAAK,IAAI,EAAG,OAAOH,EAAO,IAAI,MAAM,CAAC,GAAK,CAAC,EAExD,SAASI,EAAQC,EAAoB,CACnC,MAAMC,EAAI,IAAI,gBAAgBN,CAAM,EAChCK,IAAS,EAAGC,EAAE,OAAO,MAAM,EAC1BA,EAAE,IAAI,OAAQ,OAAOD,CAAI,CAAC,EAC/BJ,EAAUK,EAAG,CAAE,QAAS,EAAA,CAAM,CAChC,CAEA,OACEC,EAAAA,KAAC,MAAA,CAAI,UAAU,gCACb,SAAA,CAAAC,EAAAA,IAACC,EAAA,EAAO,QAEP,MAAA,CAAI,UAAU,sDACb,SAAAF,EAAAA,KAAC,MAAA,CAAI,UAAU,4CACb,SAAA,CAAAC,MAAC,OAAA,CAAK,UAAU,iCAAkC,SAAA,EAAE,cAAc,EAAE,EACpED,EAAAA,KAACG,EAAA,CAAO,MAAO,OAAOP,CAAI,EAAG,cAAgBQ,GAAMP,EAAQ,OAAOO,CAAC,CAAC,EAClE,SAAA,CAAAH,MAACI,EAAA,CAAc,UAAU,OACvB,SAAAJ,MAACK,IAAY,EACf,EACAL,MAACM,GACE,SAAAjB,EAAY,IAAKkB,GAChBP,EAAAA,IAACQ,GAAmB,MAAO,OAAOD,CAAC,EAChC,SAAA,EAAE,cAAe,CAAE,MAAOA,EAAG,CAAA,EADfA,CAEjB,CACD,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,EAEAP,EAAAA,IAAC,MAAA,CACC,UAAWS,EACT,oBACA,0BACA,oCACA,oBACA,iBAAA,EAEF,aAAY,EAAE,WAAW,EAExB,SAAArB,EAAS,IAAKsB,GACbV,EAAAA,IAACW,EAAA,CAEC,GAAID,EAAI,GACR,UAAW,CAAC,CAAE,SAAAE,CAAA,IACZH,EACE,uDACA,+BACAG,EACI,uCACA,sDAAA,EAIP,SAAA,EAAEF,EAAI,OAAO,CAAA,EAZTA,EAAI,EAAA,CAcZ,CAAA,CAAA,QAGF,OAAA,CAAK,UAAU,mCACd,SAAAV,EAAAA,IAACa,IAAO,CAAA,CACV,CAAA,EACF,CAEJ"}
@@ -0,0 +1,27 @@
1
+ import{o as k,u as p,j as e,B as _,l as T,X as F,I as m,S as O,g as w,h as V,i as D,k as f,m as j,L as v,a6 as Y,ac as q,ad as W,ae as $,a7 as J}from"./index-DHh1LYlA.js";import{r as b}from"./react-DlP5eolq.js";import{T as Z,a as Q,b as K,c as E,d as ee,e as C}from"./table-Dx65w6V0.js";import{u as te,b as ae}from"./use-settings-DKbDqCEJ.js";import{L}from"./loader-circle-DgdBWYl0.js";import{R as X}from"./refresh-ccw-nBMm5Xal.js";import{S as se}from"./save-DbrrCFDM.js";import{N as ne}from"./network--s113Jkm.js";import{S as le}from"./shield-alert-WOa69jy3.js";import{B as re}from"./bell-CeWDMs8_.js";import{H as ce}from"./heart-pulse-DfqI4GF7.js";import{T as ie}from"./trash-2-7xrfqd-v.js";import{P as oe}from"./plus-CfzKV_0u.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 me=k("Cpu",[["rect",{width:"16",height:"16",x:"4",y:"4",rx:"2",key:"14l7u7"}],["rect",{width:"6",height:"6",x:"9",y:"9",rx:"1",key:"5aljv4"}],["path",{d:"M15 2v2",key:"13l42r"}],["path",{d:"M15 20v2",key:"15mkzm"}],["path",{d:"M2 15h2",key:"1gxd5l"}],["path",{d:"M2 9h2",key:"1bbxkp"}],["path",{d:"M20 15h2",key:"19e6y8"}],["path",{d:"M20 9h2",key:"19tzq7"}],["path",{d:"M9 2v2",key:"165o2o"}],["path",{d:"M9 20v2",key:"i2bqo8"}]]);/**
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 de=k("FileStack",[["path",{d:"M21 7h-3a2 2 0 0 1-2-2V2",key:"9rb54x"}],["path",{d:"M21 6v6.5c0 .8-.7 1.5-1.5 1.5h-7c-.8 0-1.5-.7-1.5-1.5v-9c0-.8.7-1.5 1.5-1.5H17Z",key:"1059l0"}],["path",{d:"M7 8v8.8c0 .3.2.6.4.8.2.2.5.4.8.4H15",key:"16874u"}],["path",{d:"M3 12v8.8c0 .3.2.6.4.8.2.2.5.4.8.4H11",key:"k2ox98"}]]);/**
12
+ * @license lucide-react v0.469.0 - ISC
13
+ *
14
+ * This source code is licensed under the ISC license.
15
+ * See the LICENSE file in the root directory of this source tree.
16
+ */const xe=k("Gauge",[["path",{d:"m12 14 4-4",key:"9kzdfg"}],["path",{d:"M3.34 19a10 10 0 1 1 17.32 0",key:"19p75a"}]]);/**
17
+ * @license lucide-react v0.469.0 - ISC
18
+ *
19
+ * This source code is licensed under the ISC license.
20
+ * See the LICENSE file in the root directory of this source tree.
21
+ */const he=k("Waves",[["path",{d:"M2 6c.6.5 1.2 1 2.5 1C7 7 7 5 9.5 5c2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1",key:"knzxuh"}],["path",{d:"M2 12c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1",key:"2jd2cc"}],["path",{d:"M2 18c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1",key:"rd2r6e"}]]);/**
22
+ * @license lucide-react v0.469.0 - ISC
23
+ *
24
+ * This source code is licensed under the ISC license.
25
+ * See the LICENSE file in the root directory of this source tree.
26
+ */const ue=k("Zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]]);function pe(t){return{role:t.AGIM_NATIVE_AGENT_ROLE??"",mode:t.AGIM_NATIVE_AGENT_MODE||"read-only",autoAllow:t.AGIM_NATIVE_AGENT_AUTOALLOW??"",denyList:t.AGIM_NATIVE_AGENT_DENYLIST??"",evalEnabled:y(t.AGIM_NOTIFICATION_EVALUATOR),evalSources:t.AGIM_NOTIFICATION_EVALUATOR_SOURCES??"",hbEnabled:y(t.AGIM_HEARTBEAT_ENABLED),hbTickMs:t.AGIM_HEARTBEAT_TICK_INTERVAL_MS??"",hbDefaultMin:t.AGIM_HEARTBEAT_DEFAULT_INTERVAL_MIN??"",toolResultCap:t.AGIM_NATIVE_TOOL_RESULT_MAX_CHARS??"",toolTimeoutMs:t.AGIM_NATIVE_TOOL_TIMEOUT_MS??"",blankRetryMax:t.AGIM_NATIVE_BLANK_RETRY_MAX??"",lengthRecoveryMax:t.AGIM_NATIVE_LENGTH_RECOVERY_MAX??"",a2aMaxDepth:t.AGIM_A2A_MAX_DEPTH??"",a2aTimeoutMs:t.AGIM_A2A_TIMEOUT_DEFAULT_MS??"",callAgentInProcess:!G(t.AGIM_NATIVE_CALL_AGENT_IN_PROCESS),callAgentMaxPerTurn:t.AGIM_NATIVE_CALL_AGENT_MAX_PER_TURN??"",semanticStuckLoop:!G(t.AGIM_NATIVE_SEMANTIC_STUCK_LOOP),criticEnabled:y(t.AGIM_NATIVE_CRITIC),criticRole:t.AGIM_NATIVE_CRITIC_ROLE??"",planModeDefault:y(t.AGIM_NATIVE_PLAN_MODE),planIntentAuto:y(t.AGIM_PLAN_INTENT_AUTO),planIntentPhrases:t.AGIM_PLAN_INTENT_PHRASES??"",compactTriggerChars:t.AGIM_NATIVE_COMPACT_TRIGGER_CHARS??"",compactKeepTurns:t.AGIM_NATIVE_COMPACT_KEEP_TURNS??"",compactKeepFirst:t.AGIM_NATIVE_COMPACT_KEEP_FIRST??"",compactSummaryChars:t.AGIM_NATIVE_COMPACT_SUMMARY_CHARS??"",streamPartial:!G(t.AGIM_NATIVE_STREAM_PARTIAL),maxIter:t.AGIM_NATIVE_AGENT_MAX_ITER??""}}function G(t){if(!t)return!1;const s=t.toLowerCase().trim();return s==="off"||s==="false"||s==="0"||s==="no"}function y(t){if(!t)return!1;const s=t.toLowerCase();return s==="1"||s==="true"||s==="yes"||s==="on"}function ge(){const{t}=p(["settings","common"]),s=t("nativeAgent.subtitle"),a=t("nativeAgent.llmLink"),l=s.indexOf(a);return l===-1?e.jsx("p",{className:"text-sm text-text-dim",children:s}):e.jsxs("p",{className:"text-sm text-text-dim",children:[s.slice(0,l),e.jsx("a",{className:"underline",href:a,children:a}),s.slice(l+a.length)]})}function Ae({embedded:t=!1}){const{t:s}=p(["settings","common"]),a=te({reveal:!1}),l=ae(),g=a.data?.env??{},r=b.useMemo(()=>pe(g),[g]),[n,h]=b.useState(r),[A,i]=b.useState("");b.useEffect(()=>{const c=JSON.stringify(r);c!==A&&(h(r),i(c))},[r,A]);const d=JSON.stringify(n)!==JSON.stringify(r);function u(c,M){h(P=>({...P,[c]:M}))}async function I(){const c={};if(n.role!==r.role&&(c.AGIM_NATIVE_AGENT_ROLE=n.role.trim()||null),n.mode!==r.mode&&(c.AGIM_NATIVE_AGENT_MODE=n.mode),n.autoAllow!==r.autoAllow&&(c.AGIM_NATIVE_AGENT_AUTOALLOW=n.autoAllow.trim()||null),n.denyList!==r.denyList&&(c.AGIM_NATIVE_AGENT_DENYLIST=n.denyList.trim()||null),n.evalEnabled!==r.evalEnabled&&(c.AGIM_NOTIFICATION_EVALUATOR=n.evalEnabled?"on":null),n.evalSources!==r.evalSources&&(c.AGIM_NOTIFICATION_EVALUATOR_SOURCES=n.evalSources.trim()||null),n.hbEnabled!==r.hbEnabled&&(c.AGIM_HEARTBEAT_ENABLED=n.hbEnabled?"on":null),n.hbTickMs!==r.hbTickMs&&(c.AGIM_HEARTBEAT_TICK_INTERVAL_MS=n.hbTickMs.trim()||null),n.hbDefaultMin!==r.hbDefaultMin&&(c.AGIM_HEARTBEAT_DEFAULT_INTERVAL_MIN=n.hbDefaultMin.trim()||null),n.toolResultCap!==r.toolResultCap&&(c.AGIM_NATIVE_TOOL_RESULT_MAX_CHARS=n.toolResultCap.trim()||null),n.toolTimeoutMs!==r.toolTimeoutMs&&(c.AGIM_NATIVE_TOOL_TIMEOUT_MS=n.toolTimeoutMs.trim()||null),n.blankRetryMax!==r.blankRetryMax&&(c.AGIM_NATIVE_BLANK_RETRY_MAX=n.blankRetryMax.trim()||null),n.lengthRecoveryMax!==r.lengthRecoveryMax&&(c.AGIM_NATIVE_LENGTH_RECOVERY_MAX=n.lengthRecoveryMax.trim()||null),n.a2aMaxDepth!==r.a2aMaxDepth&&(c.AGIM_A2A_MAX_DEPTH=n.a2aMaxDepth.trim()||null),n.a2aTimeoutMs!==r.a2aTimeoutMs&&(c.AGIM_A2A_TIMEOUT_DEFAULT_MS=n.a2aTimeoutMs.trim()||null),n.callAgentInProcess!==r.callAgentInProcess&&(c.AGIM_NATIVE_CALL_AGENT_IN_PROCESS=n.callAgentInProcess?null:"off"),n.callAgentMaxPerTurn!==r.callAgentMaxPerTurn&&(c.AGIM_NATIVE_CALL_AGENT_MAX_PER_TURN=n.callAgentMaxPerTurn.trim()||null),n.semanticStuckLoop!==r.semanticStuckLoop&&(c.AGIM_NATIVE_SEMANTIC_STUCK_LOOP=n.semanticStuckLoop?null:"off"),n.criticEnabled!==r.criticEnabled&&(c.AGIM_NATIVE_CRITIC=n.criticEnabled?"on":null),n.criticRole!==r.criticRole&&(c.AGIM_NATIVE_CRITIC_ROLE=n.criticRole.trim()||null),n.planModeDefault!==r.planModeDefault&&(c.AGIM_NATIVE_PLAN_MODE=n.planModeDefault?"1":null),n.planIntentAuto!==r.planIntentAuto&&(c.AGIM_PLAN_INTENT_AUTO=n.planIntentAuto?"on":null),n.planIntentPhrases!==r.planIntentPhrases&&(c.AGIM_PLAN_INTENT_PHRASES=n.planIntentPhrases.trim()||null),n.compactTriggerChars!==r.compactTriggerChars&&(c.AGIM_NATIVE_COMPACT_TRIGGER_CHARS=n.compactTriggerChars.trim()||null),n.compactKeepTurns!==r.compactKeepTurns&&(c.AGIM_NATIVE_COMPACT_KEEP_TURNS=n.compactKeepTurns.trim()||null),n.compactKeepFirst!==r.compactKeepFirst&&(c.AGIM_NATIVE_COMPACT_KEEP_FIRST=n.compactKeepFirst.trim()||null),n.compactSummaryChars!==r.compactSummaryChars&&(c.AGIM_NATIVE_COMPACT_SUMMARY_CHARS=n.compactSummaryChars.trim()||null),n.streamPartial!==r.streamPartial&&(c.AGIM_NATIVE_STREAM_PARTIAL=n.streamPartial?null:"off"),n.maxIter!==r.maxIter&&(c.AGIM_NATIVE_AGENT_MAX_ITER=n.maxIter.trim()||null),Object.keys(c).length!==0)try{await l.mutateAsync({updates:c}),j.success(s("nativeAgent.savedToast"))}catch(M){j.error(M?.message??String(M))}}function S(){h(r)}return e.jsxs("div",{className:t?"flex flex-col gap-6":"mx-auto flex max-w-4xl flex-col gap-6",children:[!t&&e.jsxs(e.Fragment,{children:[e.jsxs("header",{className:"flex items-center gap-3",children:[e.jsx("h1",{className:"text-xl font-semibold",children:s("nativeAgent.title")}),e.jsxs(_,{variant:"ghost",size:"sm",className:"ml-auto",onClick:()=>void a.refetch(),disabled:a.isFetching,"aria-label":s("actions.refresh",{ns:"common"}),children:[a.isFetching?e.jsx(L,{className:"h-4 w-4 animate-spin"}):e.jsx(X,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:s("nativeAgent.refresh")})]})]}),e.jsx(ge,{})]}),a.isLoading?e.jsx("div",{className:"h-64 rounded-md bg-surface-2 animate-pulse"}):e.jsxs(e.Fragment,{children:[e.jsx(be,{draft:n,setField:u}),e.jsx(ve,{draft:n,setField:u}),e.jsx(fe,{draft:n,setField:u}),e.jsx(_e,{draft:n,setField:u}),e.jsx(Te,{draft:n,setField:u}),e.jsx(Ie,{draft:n,setField:u}),e.jsx(Ne,{draft:n,setField:u}),e.jsx(je,{draft:n,setField:u})]}),d&&e.jsxs("div",{className:t?"flex items-center gap-2 rounded-md border border-border bg-surface px-4 py-3 shadow":"sticky bottom-2 flex items-center gap-2 rounded-md border border-border bg-surface px-4 py-3 shadow",children:[e.jsx(T,{variant:"info",children:s("nativeAgent.unsaved")}),e.jsxs(_,{variant:"ghost",size:"sm",className:"ml-auto",onClick:S,disabled:l.isPending,children:[e.jsx(F,{className:"h-4 w-4"})," ",s("nativeAgent.discard")]}),e.jsxs(_,{size:"sm",onClick:()=>void I(),disabled:l.isPending,children:[l.isPending?e.jsx(L,{className:"h-4 w-4 animate-spin"}):e.jsx(se,{className:"h-4 w-4"}),s("nativeAgent.save")]})]})]})}function be({draft:t,setField:s}){const{t:a}=p(["settings","common"]);return e.jsxs("section",{className:"rounded-md border border-border bg-surface",children:[e.jsxs("header",{className:"flex items-center gap-2 border-b border-border px-4 py-3",children:[e.jsx(me,{className:"h-4 w-4 text-text-dim"}),e.jsx("h2",{className:"text-sm font-semibold",children:a("nativeAgent.agentCard")})]}),e.jsxs("div",{className:"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2",children:[e.jsx(o,{label:a("nativeAgent.roleOverride"),hint:a("nativeAgent.roleHint"),children:e.jsx(m,{value:t.role,onChange:l=>s("role",l.target.value),placeholder:"native-chat",className:"font-mono text-xs"})}),e.jsx(o,{label:a("nativeAgent.approvalMode"),hint:a("nativeAgent.approvalHint"),children:e.jsxs(O,{value:t.mode,onValueChange:l=>s("mode",l),children:[e.jsx(w,{children:e.jsx(V,{})}),e.jsxs(D,{children:[e.jsx(f,{value:"read-only",children:a("nativeAgent.modeReadOnly")}),e.jsx(f,{value:"allow-list",children:a("nativeAgent.modeAllowList")}),e.jsx(f,{value:"allow-all",children:a("nativeAgent.modeAllowAll")}),e.jsx(f,{value:"deny-all",children:a("nativeAgent.modeDenyAll")})]})]})}),e.jsx(o,{label:a("nativeAgent.autoAllow"),hint:a("nativeAgent.autoAllowHint"),children:e.jsx(m,{value:t.autoAllow,onChange:l=>s("autoAllow",l.target.value),placeholder:"native_,mcp_filesystem_",className:"font-mono text-xs"})}),e.jsx(o,{label:a("nativeAgent.denyList"),hint:a("nativeAgent.denyListHint"),children:e.jsx(m,{value:t.denyList,onChange:l=>s("denyList",l.target.value),placeholder:"mcp_shell_,mcp_dangerous_",className:"font-mono text-xs"})})]})]})}function Ne({draft:t,setField:s}){const{t:a}=p(["settings","common"]);return e.jsxs("section",{className:"rounded-md border border-border bg-surface",children:[e.jsxs("header",{className:"flex items-center gap-2 border-b border-border px-4 py-3",children:[e.jsx(re,{className:"h-4 w-4 text-text-dim"}),e.jsx("h2",{className:"text-sm font-semibold",children:a("nativeAgent.evaluatorCard")}),t.evalEnabled?e.jsx(T,{variant:"success",children:a("nativeAgent.on")}):e.jsx(T,{variant:"outline",children:a("nativeAgent.off")})]}),e.jsx("p",{className:"px-4 pt-2 text-xs text-text-dim",children:a("nativeAgent.evalDesc")}),e.jsxs("div",{className:"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2",children:[e.jsx(o,{label:a("nativeAgent.enableGate"),children:e.jsxs("label",{className:"flex items-center gap-2 text-sm",children:[e.jsx("input",{type:"checkbox",checked:t.evalEnabled,onChange:l=>s("evalEnabled",l.target.checked),className:"h-4 w-4 accent-accent cursor-pointer"}),e.jsx("span",{children:a("nativeAgent.filterViaLlm")})]})}),e.jsx(o,{label:a("nativeAgent.evalSources"),hint:a("nativeAgent.evalSourcesHint"),children:e.jsx(m,{value:t.evalSources,onChange:l=>s("evalSources",l.target.value),placeholder:"push,heartbeat",className:"font-mono text-xs",disabled:!t.evalEnabled})})]})]})}function je({draft:t,setField:s}){const{t:a}=p(["settings","common"]);return e.jsxs("section",{className:"rounded-md border border-border bg-surface",children:[e.jsxs("header",{className:"flex items-center gap-2 border-b border-border px-4 py-3",children:[e.jsx(ce,{className:"h-4 w-4 text-text-dim"}),e.jsx("h2",{className:"text-sm font-semibold",children:a("nativeAgent.heartbeatCard")}),t.hbEnabled?e.jsx(T,{variant:"success",children:a("nativeAgent.on")}):e.jsx(T,{variant:"outline",children:a("nativeAgent.off")})]}),e.jsx("p",{className:"px-4 pt-2 text-xs text-text-dim",children:a("nativeAgent.hbDesc")}),e.jsxs("div",{className:"grid grid-cols-1 gap-3 p-4 sm:grid-cols-3",children:[e.jsx(o,{label:a("nativeAgent.enableScheduler"),children:e.jsxs("label",{className:"flex items-center gap-2 text-sm",children:[e.jsx("input",{type:"checkbox",checked:t.hbEnabled,onChange:l=>s("hbEnabled",l.target.checked),className:"h-4 w-4 accent-accent cursor-pointer"}),e.jsx("span",{children:a("nativeAgent.startScanLoop")})]})}),e.jsx(o,{label:a("nativeAgent.tickInterval"),hint:a("nativeAgent.tickHint"),children:e.jsx(m,{type:"number",value:t.hbTickMs,onChange:l=>s("hbTickMs",l.target.value),placeholder:"60000",className:"font-mono text-xs",disabled:!t.hbEnabled})}),e.jsx(o,{label:a("nativeAgent.defaultInterval"),hint:a("nativeAgent.defaultIntervalHint"),children:e.jsx(m,{type:"number",value:t.hbDefaultMin,onChange:l=>s("hbDefaultMin",l.target.value),placeholder:"15",className:"font-mono text-xs",disabled:!t.hbEnabled})})]})]})}function ve({draft:t,setField:s}){const{t:a}=p(["settings","common"]);return e.jsxs("section",{className:"rounded-md border border-border bg-surface",children:[e.jsxs("header",{className:"flex items-center gap-2 border-b border-border px-4 py-3",children:[e.jsx(xe,{className:"h-4 w-4 text-text-dim"}),e.jsx("h2",{className:"text-sm font-semibold",children:a("nativeAgent.runtimeCard")})]}),e.jsx("p",{className:"px-4 pt-2 text-xs text-text-dim",children:a("nativeAgent.runtimeDesc")}),e.jsxs("div",{className:"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2",children:[e.jsx(o,{label:a("nativeAgent.toolResultCap"),hint:a("nativeAgent.toolResultCapHint"),children:e.jsx(m,{type:"number",value:t.toolResultCap,onChange:l=>s("toolResultCap",l.target.value),placeholder:"64000",className:"font-mono text-xs"})}),e.jsx(o,{label:a("nativeAgent.toolTimeoutMs"),hint:a("nativeAgent.toolTimeoutHint"),children:e.jsx(m,{type:"number",value:t.toolTimeoutMs,onChange:l=>s("toolTimeoutMs",l.target.value),placeholder:"60000",className:"font-mono text-xs"})}),e.jsx(o,{label:a("nativeAgent.blankRetryMax"),hint:a("nativeAgent.blankRetryHint"),children:e.jsx(m,{type:"number",value:t.blankRetryMax,onChange:l=>s("blankRetryMax",l.target.value),placeholder:"1",className:"font-mono text-xs"})}),e.jsx(o,{label:a("nativeAgent.lengthRecoveryMax"),hint:a("nativeAgent.lengthRecoveryHint"),children:e.jsx(m,{type:"number",value:t.lengthRecoveryMax,onChange:l=>s("lengthRecoveryMax",l.target.value),placeholder:"1",className:"font-mono text-xs"})})]})]})}function fe({draft:t,setField:s}){const{t:a}=p(["settings","common"]);return e.jsxs("section",{className:"rounded-md border border-border bg-surface",children:[e.jsxs("header",{className:"flex items-center gap-2 border-b border-border px-4 py-3",children:[e.jsx(ne,{className:"h-4 w-4 text-text-dim"}),e.jsx("h2",{className:"text-sm font-semibold",children:a("nativeAgent.a2aCard")})]}),e.jsx("p",{className:"px-4 pt-2 text-xs text-text-dim",children:a("nativeAgent.a2aDesc")}),e.jsxs("div",{className:"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2",children:[e.jsx(o,{label:a("nativeAgent.a2aMaxDepth"),hint:a("nativeAgent.a2aMaxDepthHint"),children:e.jsx(m,{type:"number",value:t.a2aMaxDepth,onChange:l=>s("a2aMaxDepth",l.target.value),placeholder:"1",className:"font-mono text-xs"})}),e.jsx(o,{label:a("nativeAgent.a2aTimeoutMs"),hint:a("nativeAgent.a2aTimeoutMsHint"),children:e.jsx(m,{type:"number",value:t.a2aTimeoutMs,onChange:l=>s("a2aTimeoutMs",l.target.value),placeholder:"1800000",className:"font-mono text-xs"})}),e.jsx(o,{label:a("nativeAgent.callAgentInProcess"),hint:a("nativeAgent.callAgentInProcessHint"),children:e.jsxs("label",{className:"flex items-center gap-2 text-sm",children:[e.jsx("input",{type:"checkbox",checked:t.callAgentInProcess,onChange:l=>s("callAgentInProcess",l.target.checked),className:"h-4 w-4 accent-accent cursor-pointer"}),e.jsx("span",{children:t.callAgentInProcess?a("nativeAgent.on"):a("nativeAgent.off")})]})}),e.jsx(o,{label:a("nativeAgent.callAgentMaxPerTurn"),hint:a("nativeAgent.callAgentMaxPerTurnHint"),children:e.jsx(m,{type:"number",value:t.callAgentMaxPerTurn,onChange:l=>s("callAgentMaxPerTurn",l.target.value),placeholder:"2",className:"font-mono text-xs"})})]})]})}function _e({draft:t,setField:s}){const{t:a}=p(["settings","common"]);return e.jsxs("section",{className:"rounded-md border border-border bg-surface",children:[e.jsxs("header",{className:"flex items-center gap-2 border-b border-border px-4 py-3",children:[e.jsx(le,{className:"h-4 w-4 text-text-dim"}),e.jsx("h2",{className:"text-sm font-semibold",children:a("nativeAgent.criticCard")})]}),e.jsx("p",{className:"px-4 pt-2 text-xs text-text-dim",children:a("nativeAgent.criticDesc")}),e.jsxs("div",{className:"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2",children:[e.jsx(o,{label:a("nativeAgent.semanticStuckLoop"),hint:a("nativeAgent.semanticStuckLoopHint"),children:e.jsxs("label",{className:"flex items-center gap-2 text-sm",children:[e.jsx("input",{type:"checkbox",checked:t.semanticStuckLoop,onChange:l=>s("semanticStuckLoop",l.target.checked),className:"h-4 w-4 accent-accent cursor-pointer"}),e.jsx("span",{children:t.semanticStuckLoop?a("nativeAgent.on"):a("nativeAgent.off")})]})}),e.jsx(o,{label:a("nativeAgent.criticEnabled"),hint:a("nativeAgent.criticEnabledHint"),children:e.jsxs("label",{className:"flex items-center gap-2 text-sm",children:[e.jsx("input",{type:"checkbox",checked:t.criticEnabled,onChange:l=>s("criticEnabled",l.target.checked),className:"h-4 w-4 accent-accent cursor-pointer"}),e.jsx("span",{children:t.criticEnabled?a("nativeAgent.on"):a("nativeAgent.off")})]})}),e.jsx(o,{label:a("nativeAgent.criticRole"),hint:a("nativeAgent.criticRoleHint"),children:e.jsx(m,{value:t.criticRole,onChange:l=>s("criticRole",l.target.value),placeholder:"(use main backend)",className:"font-mono text-xs",disabled:!t.criticEnabled})}),e.jsx(o,{label:a("nativeAgent.planModeDefault"),hint:a("nativeAgent.planModeDefaultHint"),children:e.jsxs("label",{className:"flex items-center gap-2 text-sm",children:[e.jsx("input",{type:"checkbox",checked:t.planModeDefault,onChange:l=>s("planModeDefault",l.target.checked),className:"h-4 w-4 accent-accent cursor-pointer"}),e.jsx("span",{children:t.planModeDefault?a("nativeAgent.on"):a("nativeAgent.off")})]})}),e.jsx(o,{label:a("nativeAgent.planIntentAuto"),hint:a("nativeAgent.planIntentAutoHint"),children:e.jsxs("label",{className:"flex items-center gap-2 text-sm",children:[e.jsx("input",{type:"checkbox",checked:t.planIntentAuto,onChange:l=>s("planIntentAuto",l.target.checked),className:"h-4 w-4 accent-accent cursor-pointer"}),e.jsx("span",{children:t.planIntentAuto?a("nativeAgent.on"):a("nativeAgent.off")})]})}),e.jsx(o,{label:a("nativeAgent.planIntentPhrases"),hint:a("nativeAgent.planIntentPhrasesHint"),children:e.jsx(m,{value:t.planIntentPhrases,onChange:l=>s("planIntentPhrases",l.target.value),placeholder:"先想想,plan only,don't act yet",className:"font-mono text-xs",disabled:!t.planIntentAuto})})]})]})}function Te({draft:t,setField:s}){const{t:a}=p(["settings","common"]);return e.jsxs("section",{className:"rounded-md border border-border bg-surface",children:[e.jsxs("header",{className:"flex items-center gap-2 border-b border-border px-4 py-3",children:[e.jsx(de,{className:"h-4 w-4 text-text-dim"}),e.jsx("h2",{className:"text-sm font-semibold",children:a("nativeAgent.compactCard")})]}),e.jsx("p",{className:"px-4 pt-2 text-xs text-text-dim",children:a("nativeAgent.compactDesc")}),e.jsxs("div",{className:"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2",children:[e.jsx(o,{label:a("nativeAgent.compactTriggerChars"),hint:a("nativeAgent.compactTriggerCharsHint"),children:e.jsx(m,{type:"number",value:t.compactTriggerChars,onChange:l=>s("compactTriggerChars",l.target.value),placeholder:"60000",className:"font-mono text-xs"})}),e.jsx(o,{label:a("nativeAgent.compactKeepTurns"),hint:a("nativeAgent.compactKeepTurnsHint"),children:e.jsx(m,{type:"number",value:t.compactKeepTurns,onChange:l=>s("compactKeepTurns",l.target.value),placeholder:"6",className:"font-mono text-xs"})}),e.jsx(o,{label:a("nativeAgent.compactKeepFirst"),hint:a("nativeAgent.compactKeepFirstHint"),children:e.jsx(m,{type:"number",value:t.compactKeepFirst,onChange:l=>s("compactKeepFirst",l.target.value),placeholder:"1",className:"font-mono text-xs"})}),e.jsx(o,{label:a("nativeAgent.compactSummaryChars"),hint:a("nativeAgent.compactSummaryCharsHint"),children:e.jsx(m,{type:"number",value:t.compactSummaryChars,onChange:l=>s("compactSummaryChars",l.target.value),placeholder:"1500",className:"font-mono text-xs"})})]})]})}function Ie({draft:t,setField:s}){const{t:a}=p(["settings","common"]);return e.jsxs("section",{className:"rounded-md border border-border bg-surface",children:[e.jsxs("header",{className:"flex items-center gap-2 border-b border-border px-4 py-3",children:[e.jsx(he,{className:"h-4 w-4 text-text-dim"}),e.jsx("h2",{className:"text-sm font-semibold",children:a("nativeAgent.streamCard")})]}),e.jsx("p",{className:"px-4 pt-2 text-xs text-text-dim",children:a("nativeAgent.streamDesc")}),e.jsxs("div",{className:"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2",children:[e.jsx(o,{label:a("nativeAgent.streamPartial"),hint:a("nativeAgent.streamPartialHint"),children:e.jsxs("label",{className:"flex items-center gap-2 text-sm",children:[e.jsx("input",{type:"checkbox",checked:t.streamPartial,onChange:l=>s("streamPartial",l.target.checked),className:"h-4 w-4 accent-accent cursor-pointer"}),e.jsx("span",{children:t.streamPartial?a("nativeAgent.on"):a("nativeAgent.off")})]})}),e.jsx(o,{label:a("nativeAgent.maxIter"),hint:a("nativeAgent.maxIterHint"),children:e.jsx(m,{type:"number",value:t.maxIter,onChange:l=>s("maxIter",l.target.value),placeholder:"50",className:"font-mono text-xs"})})]})]})}function o({label:t,hint:s,children:a}){return e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx(v,{className:"text-xs font-medium",children:t}),a,s&&e.jsx("p",{className:"text-[11px] text-text-dim",children:s})]})}const Me=["cheap","evaluator","native-chat"],H="__unbind__",B=["deepseek","moonshot","zhipu","openai","anthropic","custom"],R=[{provider:"openai-compat",baseUrl:"https://api.deepseek.com/v1",modelHint:"deepseek-chat"},{provider:"openai-compat",baseUrl:"https://api.moonshot.cn/v1",modelHint:"moonshot-v1-8k"},{provider:"openai-compat",baseUrl:"https://open.bigmodel.cn/api/paas/v4",modelHint:"glm-4-air"},{provider:"openai-compat",baseUrl:"https://api.openai.com/v1",modelHint:"gpt-4o-mini"},{provider:"anthropic",baseUrl:"https://api.anthropic.com",modelHint:"claude-3-5-sonnet-20241022"},{provider:"openai-compat",baseUrl:"",modelHint:""}];function Be(){const{t}=p(["settings","common"]),s=Y();return e.jsxs("div",{className:"mx-auto flex max-w-5xl flex-col gap-6",children:[e.jsxs("header",{className:"flex items-center gap-3",children:[e.jsx("h1",{className:"text-xl font-semibold",children:t("llm.title")}),e.jsxs(_,{variant:"ghost",size:"sm",className:"ml-auto",onClick:()=>void s.refetch(),disabled:s.isFetching,"aria-label":t("actions.refresh",{ns:"common"}),children:[s.isFetching?e.jsx(L,{className:"h-4 w-4 animate-spin"}):e.jsx(X,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:t("llm.refresh")})]})]}),e.jsx("p",{className:"text-sm text-text-dim",children:t("llm.subtitle")}),s.isLoading?e.jsx("div",{className:"h-64 rounded-md bg-surface-2 animate-pulse"}):e.jsxs(e.Fragment,{children:[e.jsx(Ee,{data:s.data}),e.jsx(ye,{}),e.jsx(Ce,{data:s.data}),e.jsxs("section",{id:"agim-agent",className:"rounded-md border border-border bg-surface px-4 py-3",children:[e.jsx("h2",{className:"text-sm font-semibold",children:t("llm.agimAgentRuntimeTitle")}),e.jsx("p",{className:"mt-1 text-xs text-text-dim",children:t("llm.agimAgentRuntimeHint")})]}),e.jsx(Ae,{embedded:!0})]})]})}function Ee({data:t}){const{t:s}=p(["settings","common"]),a=q(),l=W(),[g,r]=b.useState({});async function n(i){if(confirm(s("llm.removeConfirm",{name:i})))try{const d=await a.mutateAsync(i);j.success(s("llm.removedToast",{count:d.removedRoles}))}catch(d){j.error(d?.message??String(d))}}async function h(i){r(d=>({...d,[i]:s("llm.pinging")}));try{const d=await l.mutateAsync(i),u=d.ok?`✓ ${d.durationMs}ms · tokens ${d.tokensIn}→${d.tokensOut}`:`✗ ${d.error}`;r(I=>({...I,[i]:u}))}catch(d){r(u=>({...u,[i]:`✗ ${d?.message??String(d)}`}))}}const A=t?.backends??[];return A.length===0?e.jsx("section",{className:"rounded-md border border-border bg-surface p-6 text-center text-sm text-text-dim",children:s("llm.backendsEmpty")}):e.jsxs("section",{className:"rounded-md border border-border bg-surface",children:[e.jsx("header",{className:"border-b border-border px-4 py-3",children:e.jsx("h2",{className:"text-sm font-semibold",children:s("llm.backendsTitle",{count:A.length})})}),e.jsxs(Z,{children:[e.jsx(Q,{children:e.jsxs(K,{children:[e.jsx(E,{children:s("llm.col.name")}),e.jsx(E,{children:s("llm.col.provider")}),e.jsx(E,{children:s("llm.col.model")}),e.jsx(E,{children:s("llm.col.baseUrl")}),e.jsx(E,{children:s("llm.col.apiKey")}),e.jsx(E,{children:s("llm.col.actions")})]})}),e.jsx(ee,{children:A.map(i=>{const d=i.secret.source==="none"?e.jsx(T,{variant:"outline",children:s("llm.secretMissing")}):e.jsx(T,{variant:"success",children:i.secret.source});return e.jsxs(K,{children:[e.jsx(C,{className:"font-mono text-xs",children:i.name}),e.jsx(C,{children:i.provider}),e.jsx(C,{className:"font-mono text-xs",children:i.model}),e.jsx(C,{className:"break-all font-mono text-[11px] text-text-dim",children:i.baseUrl??"—"}),e.jsx(C,{children:d}),e.jsxs(C,{className:"flex flex-col gap-1 sm:flex-row sm:items-center",children:[e.jsxs(_,{variant:"ghost",size:"sm",onClick:()=>void h(i.name),disabled:l.isPending||i.secret.source==="none",title:i.secret.source==="none"?s("llm.setKeyFirst"):s("llm.pingHint"),children:[e.jsx(ue,{className:"h-4 w-4"}),e.jsx("span",{children:s("llm.ping")})]}),e.jsxs(_,{variant:"ghost",size:"sm",onClick:()=>void n(i.name),disabled:a.isPending,className:"text-danger hover:text-danger",children:[e.jsx(ie,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:s("llm.remove")})]}),g[i.name]&&e.jsx("span",{className:"ml-2 text-[11px] text-text-dim",children:g[i.name]})]})]},i.name)})})]})]})}function Ce({data:t}){const{t:s}=p(["settings","common"]),a=J(),l=(t?.backends??[]).map(n=>n.name),g=t?.roles??{};async function r(n,h){const A={[n]:h===H?null:h};try{await a.mutateAsync(A),j.success(s("llm.roleUpdated",{role:n}))}catch(i){j.error(i?.message??String(i))}}return e.jsxs("section",{className:"rounded-md border border-border bg-surface",children:[e.jsxs("header",{className:"border-b border-border px-4 py-3",children:[e.jsx("h2",{className:"text-sm font-semibold",children:s("llm.rolesTitle")}),e.jsx("p",{className:"mt-1 text-xs text-text-dim",children:s("llm.rolesOptionalHint")})]}),e.jsx("div",{className:"grid grid-cols-1 gap-3 p-4 sm:grid-cols-3",children:Me.map(n=>e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx(v,{className:"text-xs font-medium",children:n}),e.jsxs(O,{value:g[n]??H,onValueChange:h=>void r(n,h),disabled:l.length===0||a.isPending,children:[e.jsx(w,{className:"font-mono text-xs",children:e.jsx(V,{placeholder:s("llm.unset")})}),e.jsxs(D,{children:[e.jsx(f,{value:H,children:s("llm.unbound")}),l.map(h=>e.jsx(f,{value:h,children:h},h))]})]}),e.jsx("p",{className:"text-[11px] text-text-dim",children:s(`llm.roleHint.${n}`)})]},n))})]})}function ye(){const{t}=p(["settings","common"]),s=$(),[a,l]=b.useState(0),[g,r]=b.useState(""),[n,h]=b.useState(R[0]?.baseUrl??""),[A,i]=b.useState(R[0]?.modelHint??""),[d,u]=b.useState(""),[I,S]=b.useState(null);function c(x){S(x),j.error(x)}function M(x){l(x);const N=R[x];N&&(h(N.baseUrl),i(N.modelHint))}async function P(x){x.preventDefault();const N=R[a];if(!N){c(t("llm.invalidPreset"));return}if(!g.trim()){c(t("llm.nameRequired"));return}if(!n.trim()){c(t("llm.baseUrlRequired"));return}if(!A.trim()){c(t("llm.modelRequired"));return}if(!d.trim()){c(t("llm.apiKeyRequired"));return}try{await s.mutateAsync({name:g.trim(),provider:N.provider,baseUrl:n.trim(),model:A.trim(),apiKey:d.trim()}),S(null),j.success(t("llm.addedWithKey",{name:g.trim()})),r(""),u("")}catch(U){const z=U?.message??String(U);c(z)}}return e.jsxs("section",{className:"rounded-md border border-border bg-surface",children:[e.jsx("header",{className:"border-b border-border px-4 py-3",children:e.jsx("h2",{className:"text-sm font-semibold",children:t("llm.addTitle")})}),e.jsxs("form",{onSubmit:x=>void P(x),className:"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2",children:[e.jsxs("div",{children:[e.jsx(v,{className:"text-xs font-medium",children:t("llm.preset")}),e.jsxs(O,{value:String(a),onValueChange:x=>M(Number(x)),children:[e.jsx(w,{children:e.jsx(V,{})}),e.jsx(D,{children:R.map((x,N)=>e.jsx(f,{value:String(N),children:t(`llm.presets.${B[N]}`)},B[N]))})]})]}),e.jsxs("div",{children:[e.jsx(v,{className:"text-xs font-medium",children:t("llm.name")}),e.jsx(m,{value:g,onChange:x=>r(x.target.value),placeholder:t("llm.namePlaceholder"),className:"font-mono text-xs"})]}),e.jsxs("div",{className:"sm:col-span-2",children:[e.jsx(v,{className:"text-xs font-medium",children:t("llm.baseUrl")}),e.jsx(m,{value:n,onChange:x=>h(x.target.value),placeholder:t("llm.baseUrlPlaceholder"),className:"font-mono text-xs"})]}),e.jsxs("div",{children:[e.jsx(v,{className:"text-xs font-medium",children:t("llm.model")}),e.jsx(m,{value:A,onChange:x=>i(x.target.value),placeholder:t("llm.modelPlaceholder"),className:"font-mono text-xs"})]}),e.jsxs("div",{children:[e.jsx(v,{className:"text-xs font-medium",children:t("llm.apiKey")}),e.jsx(m,{type:"password",value:d,onChange:x=>u(x.target.value),placeholder:t("llm.apiKeyPlaceholder"),className:"font-mono text-xs",autoComplete:"off"})]}),e.jsx("div",{className:"sm:col-span-2 flex",children:e.jsxs("div",{className:"flex w-full flex-col gap-2 sm:items-end",children:[I&&e.jsx("p",{className:"text-xs text-danger",children:I}),e.jsxs(_,{type:"submit",disabled:s.isPending,className:"ml-auto",children:[s.isPending?e.jsx(L,{className:"h-4 w-4 animate-spin"}):e.jsx(oe,{className:"h-4 w-4"}),t("llm.addBackend")]})]})})]})]})}export{Be as default};
27
+ //# sourceMappingURL=llm-BZ9qqp-D.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-BZ9qqp-D.js","sources":["../../node_modules/lucide-react/dist/esm/icons/cpu.js","../../node_modules/lucide-react/dist/esm/icons/file-stack.js","../../node_modules/lucide-react/dist/esm/icons/gauge.js","../../node_modules/lucide-react/dist/esm/icons/waves.js","../../node_modules/lucide-react/dist/esm/icons/zap.js","../../src/routes/settings/native-agent.tsx","../../src/routes/settings/llm.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 Cpu = createLucideIcon(\"Cpu\", [\n [\"rect\", { width: \"16\", height: \"16\", x: \"4\", y: \"4\", rx: \"2\", key: \"14l7u7\" }],\n [\"rect\", { width: \"6\", height: \"6\", x: \"9\", y: \"9\", rx: \"1\", key: \"5aljv4\" }],\n [\"path\", { d: \"M15 2v2\", key: \"13l42r\" }],\n [\"path\", { d: \"M15 20v2\", key: \"15mkzm\" }],\n [\"path\", { d: \"M2 15h2\", key: \"1gxd5l\" }],\n [\"path\", { d: \"M2 9h2\", key: \"1bbxkp\" }],\n [\"path\", { d: \"M20 15h2\", key: \"19e6y8\" }],\n [\"path\", { d: \"M20 9h2\", key: \"19tzq7\" }],\n [\"path\", { d: \"M9 2v2\", key: \"165o2o\" }],\n [\"path\", { d: \"M9 20v2\", key: \"i2bqo8\" }]\n]);\n\nexport { Cpu as default };\n//# sourceMappingURL=cpu.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 FileStack = createLucideIcon(\"FileStack\", [\n [\"path\", { d: \"M21 7h-3a2 2 0 0 1-2-2V2\", key: \"9rb54x\" }],\n [\n \"path\",\n {\n d: \"M21 6v6.5c0 .8-.7 1.5-1.5 1.5h-7c-.8 0-1.5-.7-1.5-1.5v-9c0-.8.7-1.5 1.5-1.5H17Z\",\n key: \"1059l0\"\n }\n ],\n [\"path\", { d: \"M7 8v8.8c0 .3.2.6.4.8.2.2.5.4.8.4H15\", key: \"16874u\" }],\n [\"path\", { d: \"M3 12v8.8c0 .3.2.6.4.8.2.2.5.4.8.4H11\", key: \"k2ox98\" }]\n]);\n\nexport { FileStack as default };\n//# sourceMappingURL=file-stack.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 Gauge = createLucideIcon(\"Gauge\", [\n [\"path\", { d: \"m12 14 4-4\", key: \"9kzdfg\" }],\n [\"path\", { d: \"M3.34 19a10 10 0 1 1 17.32 0\", key: \"19p75a\" }]\n]);\n\nexport { Gauge as default };\n//# sourceMappingURL=gauge.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 Waves = createLucideIcon(\"Waves\", [\n [\n \"path\",\n {\n d: \"M2 6c.6.5 1.2 1 2.5 1C7 7 7 5 9.5 5c2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1\",\n key: \"knzxuh\"\n }\n ],\n [\n \"path\",\n {\n d: \"M2 12c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1\",\n key: \"2jd2cc\"\n }\n ],\n [\n \"path\",\n {\n d: \"M2 18c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1\",\n key: \"rd2r6e\"\n }\n ]\n]);\n\nexport { Waves as default };\n//# sourceMappingURL=waves.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 Zap = createLucideIcon(\"Zap\", [\n [\n \"path\",\n {\n d: \"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z\",\n key: \"1xq2db\"\n }\n ]\n]);\n\nexport { Zap as default };\n//# sourceMappingURL=zap.js.map\n","/**\n * /settings/native-agent — focused env editor for Agim Agent +\n * notification evaluator + heartbeat (Stage 6).\n *\n * All three subsystems are env-driven; their env keys are already in\n * ENV_EDITABLE_KEYS so the generic /api/env GET+PUT pair works. This\n * page just gives them a curated form so operators don't have to dig\n * through the 200+-key generic env editor.\n *\n * The actual model API selection (which LLM, which role) lives on\n * /settings/llm; this module covers behavioral knobs.\n */\n\nimport { useEffect, useMemo, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { toast } from 'sonner'\nimport {\n Bell, Cpu, FileStack, Gauge, HeartPulse, Loader2, Network,\n RefreshCcw, Save, ShieldAlert, Waves, X,\n} from 'lucide-react'\n\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\nimport {\n Select, SelectContent, SelectItem, SelectTrigger, SelectValue,\n} from '@/components/ui/select'\nimport { useEnv, useUpdateEnv } from '@/hooks/use-settings'\n\ntype ApprovalMode = 'allow-all' | 'read-only' | 'allow-list' | 'deny-all'\n\ninterface Draft {\n // Agim Agent\n role: string\n mode: ApprovalMode\n autoAllow: string\n denyList: string\n // Notification evaluator\n evalEnabled: boolean\n evalSources: string\n // Heartbeat\n hbEnabled: boolean\n hbTickMs: string\n hbDefaultMin: string\n // v1.2.126 — runtime caps (each one optional / empty = use default)\n toolResultCap: string\n toolTimeoutMs: string\n blankRetryMax: string\n lengthRecoveryMax: string\n // v1.2.127 — A2A 子 Agent 派生\n a2aMaxDepth: string\n a2aTimeoutMs: string\n callAgentInProcess: boolean\n callAgentMaxPerTurn: string\n // v1.2.127 — 早停 + 复盘\n semanticStuckLoop: boolean\n criticEnabled: boolean\n criticRole: string\n planModeDefault: boolean\n // v1.2.135 — heuristic auto-enter on plan-intent keywords\n planIntentAuto: boolean\n planIntentPhrases: string\n // v1.2.127 — Auto-compact 4 旋钮(OpenHands Condenser)\n compactTriggerChars: string\n compactKeepTurns: string\n compactKeepFirst: string\n compactSummaryChars: string\n // v1.2.127 — 流式 + 迭代\n streamPartial: boolean\n maxIter: string\n}\n\nfunction draftFromEnv(env: Record<string, string>): Draft {\n return {\n role: env.AGIM_NATIVE_AGENT_ROLE ?? '',\n mode: (env.AGIM_NATIVE_AGENT_MODE as ApprovalMode | undefined) || 'read-only',\n autoAllow: env.AGIM_NATIVE_AGENT_AUTOALLOW ?? '',\n denyList: env.AGIM_NATIVE_AGENT_DENYLIST ?? '',\n evalEnabled: isTruthy(env.AGIM_NOTIFICATION_EVALUATOR),\n evalSources: env.AGIM_NOTIFICATION_EVALUATOR_SOURCES ?? '',\n hbEnabled: isTruthy(env.AGIM_HEARTBEAT_ENABLED),\n hbTickMs: env.AGIM_HEARTBEAT_TICK_INTERVAL_MS ?? '',\n hbDefaultMin: env.AGIM_HEARTBEAT_DEFAULT_INTERVAL_MIN ?? '',\n toolResultCap: env.AGIM_NATIVE_TOOL_RESULT_MAX_CHARS ?? '',\n toolTimeoutMs: env.AGIM_NATIVE_TOOL_TIMEOUT_MS ?? '',\n blankRetryMax: env.AGIM_NATIVE_BLANK_RETRY_MAX ?? '',\n lengthRecoveryMax: env.AGIM_NATIVE_LENGTH_RECOVERY_MAX ?? '',\n a2aMaxDepth: env.AGIM_A2A_MAX_DEPTH ?? '',\n a2aTimeoutMs: env.AGIM_A2A_TIMEOUT_DEFAULT_MS ?? '',\n // Default ON: only 'off' / '0' / 'no' / 'false' disable.\n callAgentInProcess: !isFalsy(env.AGIM_NATIVE_CALL_AGENT_IN_PROCESS),\n callAgentMaxPerTurn: env.AGIM_NATIVE_CALL_AGENT_MAX_PER_TURN ?? '',\n semanticStuckLoop: !isFalsy(env.AGIM_NATIVE_SEMANTIC_STUCK_LOOP),\n criticEnabled: isTruthy(env.AGIM_NATIVE_CRITIC),\n criticRole: env.AGIM_NATIVE_CRITIC_ROLE ?? '',\n planModeDefault: isTruthy(env.AGIM_NATIVE_PLAN_MODE),\n planIntentAuto: isTruthy(env.AGIM_PLAN_INTENT_AUTO),\n planIntentPhrases: env.AGIM_PLAN_INTENT_PHRASES ?? '',\n compactTriggerChars: env.AGIM_NATIVE_COMPACT_TRIGGER_CHARS ?? '',\n compactKeepTurns: env.AGIM_NATIVE_COMPACT_KEEP_TURNS ?? '',\n compactKeepFirst: env.AGIM_NATIVE_COMPACT_KEEP_FIRST ?? '',\n compactSummaryChars: env.AGIM_NATIVE_COMPACT_SUMMARY_CHARS ?? '',\n streamPartial: !isFalsy(env.AGIM_NATIVE_STREAM_PARTIAL),\n maxIter: env.AGIM_NATIVE_AGENT_MAX_ITER ?? '',\n }\n}\n\n/** Mirror of the native-side parser: 'off' / '0' / 'no' / 'false'\n * (case-insensitive) disables a feature whose default is ON. Empty\n * string means \"not set\" — caller decides whether that's ON or OFF\n * depending on the variable's default. */\nfunction isFalsy(v: string | undefined): boolean {\n if (!v) return false\n const s = v.toLowerCase().trim()\n return s === 'off' || s === 'false' || s === '0' || s === 'no'\n}\n\nfunction isTruthy(v: string | undefined): boolean {\n if (!v) return false\n const s = v.toLowerCase()\n return s === '1' || s === 'true' || s === 'yes' || s === 'on'\n}\n\nfunction SubtitleWithLlmLink(): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const subtitle = t('nativeAgent.subtitle')\n const link = t('nativeAgent.llmLink')\n const idx = subtitle.indexOf(link)\n if (idx === -1) {\n return <p className=\"text-sm text-text-dim\">{subtitle}</p>\n }\n return (\n <p className=\"text-sm text-text-dim\">\n {subtitle.slice(0, idx)}\n <a className=\"underline\" href={link}>{link}</a>\n {subtitle.slice(idx + link.length)}\n </p>\n )\n}\n\nexport default function SettingsNativeAgentRoute(): JSX.Element {\n return <NativeAgentSettingsPanel />\n}\n\nexport interface NativeAgentSettingsPanelProps {\n embedded?: boolean\n}\n\nexport function NativeAgentSettingsPanel({ embedded = false }: NativeAgentSettingsPanelProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const envQuery = useEnv({ reveal: false })\n const updateEnv = useUpdateEnv()\n\n const envData = envQuery.data?.env ?? {}\n const current = useMemo(() => draftFromEnv(envData), [envData])\n const [draft, setDraft] = useState<Draft>(current)\n const [syncedHash, setSyncedHash] = useState('')\n\n useEffect(() => {\n const hash = JSON.stringify(current)\n if (hash !== syncedHash) {\n setDraft(current)\n setSyncedHash(hash)\n }\n }, [current, syncedHash])\n\n const isDirty = JSON.stringify(draft) !== JSON.stringify(current)\n\n function setField<K extends keyof Draft>(k: K, v: Draft[K]): void {\n setDraft((d) => ({ ...d, [k]: v }))\n }\n\n async function onSave(): Promise<void> {\n const updates: Record<string, string | null> = {}\n if (draft.role !== current.role) {\n updates.AGIM_NATIVE_AGENT_ROLE = draft.role.trim() || null\n }\n if (draft.mode !== current.mode) {\n updates.AGIM_NATIVE_AGENT_MODE = draft.mode\n }\n if (draft.autoAllow !== current.autoAllow) {\n updates.AGIM_NATIVE_AGENT_AUTOALLOW = draft.autoAllow.trim() || null\n }\n if (draft.denyList !== current.denyList) {\n updates.AGIM_NATIVE_AGENT_DENYLIST = draft.denyList.trim() || null\n }\n if (draft.evalEnabled !== current.evalEnabled) {\n updates.AGIM_NOTIFICATION_EVALUATOR = draft.evalEnabled ? 'on' : null\n }\n if (draft.evalSources !== current.evalSources) {\n updates.AGIM_NOTIFICATION_EVALUATOR_SOURCES = draft.evalSources.trim() || null\n }\n if (draft.hbEnabled !== current.hbEnabled) {\n updates.AGIM_HEARTBEAT_ENABLED = draft.hbEnabled ? 'on' : null\n }\n if (draft.hbTickMs !== current.hbTickMs) {\n updates.AGIM_HEARTBEAT_TICK_INTERVAL_MS = draft.hbTickMs.trim() || null\n }\n if (draft.hbDefaultMin !== current.hbDefaultMin) {\n updates.AGIM_HEARTBEAT_DEFAULT_INTERVAL_MIN = draft.hbDefaultMin.trim() || null\n }\n if (draft.toolResultCap !== current.toolResultCap) {\n updates.AGIM_NATIVE_TOOL_RESULT_MAX_CHARS = draft.toolResultCap.trim() || null\n }\n if (draft.toolTimeoutMs !== current.toolTimeoutMs) {\n updates.AGIM_NATIVE_TOOL_TIMEOUT_MS = draft.toolTimeoutMs.trim() || null\n }\n if (draft.blankRetryMax !== current.blankRetryMax) {\n updates.AGIM_NATIVE_BLANK_RETRY_MAX = draft.blankRetryMax.trim() || null\n }\n if (draft.lengthRecoveryMax !== current.lengthRecoveryMax) {\n updates.AGIM_NATIVE_LENGTH_RECOVERY_MAX = draft.lengthRecoveryMax.trim() || null\n }\n // v1.2.127 — A2A\n if (draft.a2aMaxDepth !== current.a2aMaxDepth) {\n updates.AGIM_A2A_MAX_DEPTH = draft.a2aMaxDepth.trim() || null\n }\n if (draft.a2aTimeoutMs !== current.a2aTimeoutMs) {\n updates.AGIM_A2A_TIMEOUT_DEFAULT_MS = draft.a2aTimeoutMs.trim() || null\n }\n if (draft.callAgentInProcess !== current.callAgentInProcess) {\n // Default ON: write only when operator turned OFF; ON = delete the env.\n updates.AGIM_NATIVE_CALL_AGENT_IN_PROCESS = draft.callAgentInProcess ? null : 'off'\n }\n if (draft.callAgentMaxPerTurn !== current.callAgentMaxPerTurn) {\n updates.AGIM_NATIVE_CALL_AGENT_MAX_PER_TURN = draft.callAgentMaxPerTurn.trim() || null\n }\n // v1.2.127 — 早停 + 复盘\n if (draft.semanticStuckLoop !== current.semanticStuckLoop) {\n updates.AGIM_NATIVE_SEMANTIC_STUCK_LOOP = draft.semanticStuckLoop ? null : 'off'\n }\n if (draft.criticEnabled !== current.criticEnabled) {\n updates.AGIM_NATIVE_CRITIC = draft.criticEnabled ? 'on' : null\n }\n if (draft.criticRole !== current.criticRole) {\n updates.AGIM_NATIVE_CRITIC_ROLE = draft.criticRole.trim() || null\n }\n if (draft.planModeDefault !== current.planModeDefault) {\n updates.AGIM_NATIVE_PLAN_MODE = draft.planModeDefault ? '1' : null\n }\n if (draft.planIntentAuto !== current.planIntentAuto) {\n updates.AGIM_PLAN_INTENT_AUTO = draft.planIntentAuto ? 'on' : null\n }\n if (draft.planIntentPhrases !== current.planIntentPhrases) {\n updates.AGIM_PLAN_INTENT_PHRASES = draft.planIntentPhrases.trim() || null\n }\n // v1.2.127 — Auto-compact\n if (draft.compactTriggerChars !== current.compactTriggerChars) {\n updates.AGIM_NATIVE_COMPACT_TRIGGER_CHARS = draft.compactTriggerChars.trim() || null\n }\n if (draft.compactKeepTurns !== current.compactKeepTurns) {\n updates.AGIM_NATIVE_COMPACT_KEEP_TURNS = draft.compactKeepTurns.trim() || null\n }\n if (draft.compactKeepFirst !== current.compactKeepFirst) {\n updates.AGIM_NATIVE_COMPACT_KEEP_FIRST = draft.compactKeepFirst.trim() || null\n }\n if (draft.compactSummaryChars !== current.compactSummaryChars) {\n updates.AGIM_NATIVE_COMPACT_SUMMARY_CHARS = draft.compactSummaryChars.trim() || null\n }\n // v1.2.127 — 流式 + 迭代\n if (draft.streamPartial !== current.streamPartial) {\n updates.AGIM_NATIVE_STREAM_PARTIAL = draft.streamPartial ? null : 'off'\n }\n if (draft.maxIter !== current.maxIter) {\n updates.AGIM_NATIVE_AGENT_MAX_ITER = draft.maxIter.trim() || null\n }\n if (Object.keys(updates).length === 0) return\n try {\n await updateEnv.mutateAsync({ updates })\n toast.success(t('nativeAgent.savedToast'))\n } catch (err) {\n toast.error(((err as Error)?.message ?? String(err)))\n }\n }\n\n function onDiscard(): void {\n setDraft(current)\n }\n\n return (\n <div className={embedded ? 'flex flex-col gap-6' : 'mx-auto flex max-w-4xl flex-col gap-6'}>\n {!embedded && (\n <>\n <header className=\"flex items-center gap-3\">\n <h1 className=\"text-xl font-semibold\">{t('nativeAgent.title')}</h1>\n <Button\n variant=\"ghost\" size=\"sm\" className=\"ml-auto\"\n onClick={() => void envQuery.refetch()}\n disabled={envQuery.isFetching}\n aria-label={t('actions.refresh', { ns: 'common' })}\n >\n {envQuery.isFetching\n ? <Loader2 className=\"h-4 w-4 animate-spin\" />\n : <RefreshCcw className=\"h-4 w-4\" />}\n <span className=\"hidden sm:inline\">{t('nativeAgent.refresh')}</span>\n </Button>\n </header>\n <SubtitleWithLlmLink />\n </>\n )}\n\n {envQuery.isLoading ? (\n <div className=\"h-64 rounded-md bg-surface-2 animate-pulse\" />\n ) : (\n <>\n <NativeAgentCard draft={draft} setField={setField} />\n <RuntimeCapsCard draft={draft} setField={setField} />\n <A2ACard draft={draft} setField={setField} />\n <CriticCard draft={draft} setField={setField} />\n <CompactCard draft={draft} setField={setField} />\n <StreamCard draft={draft} setField={setField} />\n <EvaluatorCard draft={draft} setField={setField} />\n <HeartbeatCard draft={draft} setField={setField} />\n </>\n )}\n\n {isDirty && (\n <div className={embedded\n ? 'flex items-center gap-2 rounded-md border border-border bg-surface px-4 py-3 shadow'\n : 'sticky bottom-2 flex items-center gap-2 rounded-md border border-border bg-surface px-4 py-3 shadow'}\n >\n <Badge variant=\"info\">{t('nativeAgent.unsaved')}</Badge>\n <Button\n variant=\"ghost\" size=\"sm\" className=\"ml-auto\"\n onClick={onDiscard}\n disabled={updateEnv.isPending}\n >\n <X className=\"h-4 w-4\" /> {t('nativeAgent.discard')}\n </Button>\n <Button\n size=\"sm\"\n onClick={() => void onSave()}\n disabled={updateEnv.isPending}\n >\n {updateEnv.isPending\n ? <Loader2 className=\"h-4 w-4 animate-spin\" />\n : <Save className=\"h-4 w-4\" />}\n {t('nativeAgent.save')}\n </Button>\n </div>\n )}\n </div>\n )\n}\n\ninterface CardProps {\n draft: Draft\n setField: <K extends keyof Draft>(k: K, v: Draft[K]) => void\n}\n\nfunction NativeAgentCard({ draft, setField }: CardProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"flex items-center gap-2 border-b border-border px-4 py-3\">\n <Cpu className=\"h-4 w-4 text-text-dim\" />\n <h2 className=\"text-sm font-semibold\">{t('nativeAgent.agentCard')}</h2>\n </header>\n <div className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2\">\n <Field\n label={t('nativeAgent.roleOverride')}\n hint={t('nativeAgent.roleHint')}\n >\n <Input\n value={draft.role}\n onChange={(e) => setField('role', e.target.value)}\n placeholder=\"native-chat\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.approvalMode')}\n hint={t('nativeAgent.approvalHint')}\n >\n <Select\n value={draft.mode}\n onValueChange={(v) => setField('mode', v as ApprovalMode)}\n >\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n <SelectItem value=\"read-only\">{t('nativeAgent.modeReadOnly')}</SelectItem>\n <SelectItem value=\"allow-list\">{t('nativeAgent.modeAllowList')}</SelectItem>\n <SelectItem value=\"allow-all\">{t('nativeAgent.modeAllowAll')}</SelectItem>\n <SelectItem value=\"deny-all\">{t('nativeAgent.modeDenyAll')}</SelectItem>\n </SelectContent>\n </Select>\n </Field>\n <Field\n label={t('nativeAgent.autoAllow')}\n hint={t('nativeAgent.autoAllowHint')}\n >\n <Input\n value={draft.autoAllow}\n onChange={(e) => setField('autoAllow', e.target.value)}\n placeholder=\"native_,mcp_filesystem_\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.denyList')}\n hint={t('nativeAgent.denyListHint')}\n >\n <Input\n value={draft.denyList}\n onChange={(e) => setField('denyList', e.target.value)}\n placeholder=\"mcp_shell_,mcp_dangerous_\"\n className=\"font-mono text-xs\"\n />\n </Field>\n </div>\n </section>\n )\n}\n\nfunction EvaluatorCard({ draft, setField }: CardProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"flex items-center gap-2 border-b border-border px-4 py-3\">\n <Bell className=\"h-4 w-4 text-text-dim\" />\n <h2 className=\"text-sm font-semibold\">{t('nativeAgent.evaluatorCard')}</h2>\n {draft.evalEnabled\n ? <Badge variant=\"success\">{t('nativeAgent.on')}</Badge>\n : <Badge variant=\"outline\">{t('nativeAgent.off')}</Badge>}\n </header>\n <p className=\"px-4 pt-2 text-xs text-text-dim\">{t('nativeAgent.evalDesc')}</p>\n <div className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2\">\n <Field label={t('nativeAgent.enableGate')}>\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={draft.evalEnabled}\n onChange={(e) => setField('evalEnabled', e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n <span>{t('nativeAgent.filterViaLlm')}</span>\n </label>\n </Field>\n <Field\n label={t('nativeAgent.evalSources')}\n hint={t('nativeAgent.evalSourcesHint')}\n >\n <Input\n value={draft.evalSources}\n onChange={(e) => setField('evalSources', e.target.value)}\n placeholder=\"push,heartbeat\"\n className=\"font-mono text-xs\"\n disabled={!draft.evalEnabled}\n />\n </Field>\n </div>\n </section>\n )\n}\n\nfunction HeartbeatCard({ draft, setField }: CardProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"flex items-center gap-2 border-b border-border px-4 py-3\">\n <HeartPulse className=\"h-4 w-4 text-text-dim\" />\n <h2 className=\"text-sm font-semibold\">{t('nativeAgent.heartbeatCard')}</h2>\n {draft.hbEnabled\n ? <Badge variant=\"success\">{t('nativeAgent.on')}</Badge>\n : <Badge variant=\"outline\">{t('nativeAgent.off')}</Badge>}\n </header>\n <p className=\"px-4 pt-2 text-xs text-text-dim\">{t('nativeAgent.hbDesc')}</p>\n <div className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-3\">\n <Field label={t('nativeAgent.enableScheduler')}>\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={draft.hbEnabled}\n onChange={(e) => setField('hbEnabled', e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n <span>{t('nativeAgent.startScanLoop')}</span>\n </label>\n </Field>\n <Field\n label={t('nativeAgent.tickInterval')}\n hint={t('nativeAgent.tickHint')}\n >\n <Input\n type=\"number\"\n value={draft.hbTickMs}\n onChange={(e) => setField('hbTickMs', e.target.value)}\n placeholder=\"60000\"\n className=\"font-mono text-xs\"\n disabled={!draft.hbEnabled}\n />\n </Field>\n <Field\n label={t('nativeAgent.defaultInterval')}\n hint={t('nativeAgent.defaultIntervalHint')}\n >\n <Input\n type=\"number\"\n value={draft.hbDefaultMin}\n onChange={(e) => setField('hbDefaultMin', e.target.value)}\n placeholder=\"15\"\n className=\"font-mono text-xs\"\n disabled={!draft.hbEnabled}\n />\n </Field>\n </div>\n </section>\n )\n}\n\nfunction RuntimeCapsCard({ draft, setField }: CardProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"flex items-center gap-2 border-b border-border px-4 py-3\">\n <Gauge className=\"h-4 w-4 text-text-dim\" />\n <h2 className=\"text-sm font-semibold\">{t('nativeAgent.runtimeCard')}</h2>\n </header>\n <p className=\"px-4 pt-2 text-xs text-text-dim\">{t('nativeAgent.runtimeDesc')}</p>\n <div className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2\">\n <Field\n label={t('nativeAgent.toolResultCap')}\n hint={t('nativeAgent.toolResultCapHint')}\n >\n <Input\n type=\"number\"\n value={draft.toolResultCap}\n onChange={(e) => setField('toolResultCap', e.target.value)}\n placeholder=\"64000\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.toolTimeoutMs')}\n hint={t('nativeAgent.toolTimeoutHint')}\n >\n <Input\n type=\"number\"\n value={draft.toolTimeoutMs}\n onChange={(e) => setField('toolTimeoutMs', e.target.value)}\n placeholder=\"60000\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.blankRetryMax')}\n hint={t('nativeAgent.blankRetryHint')}\n >\n <Input\n type=\"number\"\n value={draft.blankRetryMax}\n onChange={(e) => setField('blankRetryMax', e.target.value)}\n placeholder=\"1\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.lengthRecoveryMax')}\n hint={t('nativeAgent.lengthRecoveryHint')}\n >\n <Input\n type=\"number\"\n value={draft.lengthRecoveryMax}\n onChange={(e) => setField('lengthRecoveryMax', e.target.value)}\n placeholder=\"1\"\n className=\"font-mono text-xs\"\n />\n </Field>\n </div>\n </section>\n )\n}\n\nfunction A2ACard({ draft, setField }: CardProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"flex items-center gap-2 border-b border-border px-4 py-3\">\n <Network className=\"h-4 w-4 text-text-dim\" />\n <h2 className=\"text-sm font-semibold\">{t('nativeAgent.a2aCard')}</h2>\n </header>\n <p className=\"px-4 pt-2 text-xs text-text-dim\">{t('nativeAgent.a2aDesc')}</p>\n <div className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2\">\n <Field\n label={t('nativeAgent.a2aMaxDepth')}\n hint={t('nativeAgent.a2aMaxDepthHint')}\n >\n <Input\n type=\"number\"\n value={draft.a2aMaxDepth}\n onChange={(e) => setField('a2aMaxDepth', e.target.value)}\n placeholder=\"1\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.a2aTimeoutMs')}\n hint={t('nativeAgent.a2aTimeoutMsHint')}\n >\n <Input\n type=\"number\"\n value={draft.a2aTimeoutMs}\n onChange={(e) => setField('a2aTimeoutMs', e.target.value)}\n placeholder=\"1800000\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.callAgentInProcess')}\n hint={t('nativeAgent.callAgentInProcessHint')}\n >\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={draft.callAgentInProcess}\n onChange={(e) => setField('callAgentInProcess', e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n <span>{draft.callAgentInProcess ? t('nativeAgent.on') : t('nativeAgent.off')}</span>\n </label>\n </Field>\n <Field\n label={t('nativeAgent.callAgentMaxPerTurn')}\n hint={t('nativeAgent.callAgentMaxPerTurnHint')}\n >\n <Input\n type=\"number\"\n value={draft.callAgentMaxPerTurn}\n onChange={(e) => setField('callAgentMaxPerTurn', e.target.value)}\n placeholder=\"2\"\n className=\"font-mono text-xs\"\n />\n </Field>\n </div>\n </section>\n )\n}\n\nfunction CriticCard({ draft, setField }: CardProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"flex items-center gap-2 border-b border-border px-4 py-3\">\n <ShieldAlert className=\"h-4 w-4 text-text-dim\" />\n <h2 className=\"text-sm font-semibold\">{t('nativeAgent.criticCard')}</h2>\n </header>\n <p className=\"px-4 pt-2 text-xs text-text-dim\">{t('nativeAgent.criticDesc')}</p>\n <div className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2\">\n <Field\n label={t('nativeAgent.semanticStuckLoop')}\n hint={t('nativeAgent.semanticStuckLoopHint')}\n >\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={draft.semanticStuckLoop}\n onChange={(e) => setField('semanticStuckLoop', e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n <span>{draft.semanticStuckLoop ? t('nativeAgent.on') : t('nativeAgent.off')}</span>\n </label>\n </Field>\n <Field\n label={t('nativeAgent.criticEnabled')}\n hint={t('nativeAgent.criticEnabledHint')}\n >\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={draft.criticEnabled}\n onChange={(e) => setField('criticEnabled', e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n <span>{draft.criticEnabled ? t('nativeAgent.on') : t('nativeAgent.off')}</span>\n </label>\n </Field>\n <Field\n label={t('nativeAgent.criticRole')}\n hint={t('nativeAgent.criticRoleHint')}\n >\n <Input\n value={draft.criticRole}\n onChange={(e) => setField('criticRole', e.target.value)}\n placeholder=\"(use main backend)\"\n className=\"font-mono text-xs\"\n disabled={!draft.criticEnabled}\n />\n </Field>\n <Field\n label={t('nativeAgent.planModeDefault')}\n hint={t('nativeAgent.planModeDefaultHint')}\n >\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={draft.planModeDefault}\n onChange={(e) => setField('planModeDefault', e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n <span>{draft.planModeDefault ? t('nativeAgent.on') : t('nativeAgent.off')}</span>\n </label>\n </Field>\n <Field\n label={t('nativeAgent.planIntentAuto')}\n hint={t('nativeAgent.planIntentAutoHint')}\n >\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={draft.planIntentAuto}\n onChange={(e) => setField('planIntentAuto', e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n <span>{draft.planIntentAuto ? t('nativeAgent.on') : t('nativeAgent.off')}</span>\n </label>\n </Field>\n <Field\n label={t('nativeAgent.planIntentPhrases')}\n hint={t('nativeAgent.planIntentPhrasesHint')}\n >\n <Input\n value={draft.planIntentPhrases}\n onChange={(e) => setField('planIntentPhrases', e.target.value)}\n placeholder=\"先想想,plan only,don't act yet\"\n className=\"font-mono text-xs\"\n disabled={!draft.planIntentAuto}\n />\n </Field>\n </div>\n </section>\n )\n}\n\nfunction CompactCard({ draft, setField }: CardProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"flex items-center gap-2 border-b border-border px-4 py-3\">\n <FileStack className=\"h-4 w-4 text-text-dim\" />\n <h2 className=\"text-sm font-semibold\">{t('nativeAgent.compactCard')}</h2>\n </header>\n <p className=\"px-4 pt-2 text-xs text-text-dim\">{t('nativeAgent.compactDesc')}</p>\n <div className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2\">\n <Field\n label={t('nativeAgent.compactTriggerChars')}\n hint={t('nativeAgent.compactTriggerCharsHint')}\n >\n <Input\n type=\"number\"\n value={draft.compactTriggerChars}\n onChange={(e) => setField('compactTriggerChars', e.target.value)}\n placeholder=\"60000\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.compactKeepTurns')}\n hint={t('nativeAgent.compactKeepTurnsHint')}\n >\n <Input\n type=\"number\"\n value={draft.compactKeepTurns}\n onChange={(e) => setField('compactKeepTurns', e.target.value)}\n placeholder=\"6\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.compactKeepFirst')}\n hint={t('nativeAgent.compactKeepFirstHint')}\n >\n <Input\n type=\"number\"\n value={draft.compactKeepFirst}\n onChange={(e) => setField('compactKeepFirst', e.target.value)}\n placeholder=\"1\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field\n label={t('nativeAgent.compactSummaryChars')}\n hint={t('nativeAgent.compactSummaryCharsHint')}\n >\n <Input\n type=\"number\"\n value={draft.compactSummaryChars}\n onChange={(e) => setField('compactSummaryChars', e.target.value)}\n placeholder=\"1500\"\n className=\"font-mono text-xs\"\n />\n </Field>\n </div>\n </section>\n )\n}\n\nfunction StreamCard({ draft, setField }: CardProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"flex items-center gap-2 border-b border-border px-4 py-3\">\n <Waves className=\"h-4 w-4 text-text-dim\" />\n <h2 className=\"text-sm font-semibold\">{t('nativeAgent.streamCard')}</h2>\n </header>\n <p className=\"px-4 pt-2 text-xs text-text-dim\">{t('nativeAgent.streamDesc')}</p>\n <div className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2\">\n <Field\n label={t('nativeAgent.streamPartial')}\n hint={t('nativeAgent.streamPartialHint')}\n >\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={draft.streamPartial}\n onChange={(e) => setField('streamPartial', e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n <span>{draft.streamPartial ? t('nativeAgent.on') : t('nativeAgent.off')}</span>\n </label>\n </Field>\n <Field\n label={t('nativeAgent.maxIter')}\n hint={t('nativeAgent.maxIterHint')}\n >\n <Input\n type=\"number\"\n value={draft.maxIter}\n onChange={(e) => setField('maxIter', e.target.value)}\n placeholder=\"50\"\n className=\"font-mono text-xs\"\n />\n </Field>\n </div>\n </section>\n )\n}\n\ninterface FieldProps {\n label: string\n hint?: string\n children: React.ReactNode\n}\nfunction Field({ label, hint, children }: FieldProps): JSX.Element {\n return (\n <div className=\"flex flex-col gap-1\">\n <Label className=\"text-xs font-medium\">{label}</Label>\n {children}\n {hint && <p className=\"text-[11px] text-text-dim\">{hint}</p>}\n </div>\n )\n}\n","/**\n * /settings/llm — Agim Agent model APIs + runtime settings.\n *\n * Front-end for the `/api/llm/*` REST surface that landed in Stage 4.\n * Operators add an OpenAI-compatible or Anthropic API, paste an API\n * key, optionally bind roles (cheap / evaluator / native-chat), and\n * tune built-in Agim Agent runtime behavior without hand-editing\n * ~/.agim/config.json.\n *\n * Intentionally minimal styling — focused on doing the job; matches\n * the existing settings pages' shadcn look without bespoke chrome.\n */\n\nimport { useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { toast } from 'sonner'\nimport { CheckCircle2, Loader2, Plus, RefreshCcw, Trash2, Zap } from 'lucide-react'\n\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\nimport {\n Select, SelectContent, SelectItem, SelectTrigger, SelectValue,\n} from '@/components/ui/select'\nimport {\n Table, TableBody, TableCell, TableHead, TableHeader, TableRow,\n} from '@/components/ui/table'\nimport {\n useLlmList, useLlmAddBackend, useLlmRemoveBackend, useLlmPutRoles, useLlmPing,\n} from '@/hooks/use-llm-admin'\nimport { NativeAgentSettingsPanel } from '@/routes/settings/native-agent'\n\nconst KNOWN_ROLES = ['cheap', 'evaluator', 'native-chat'] as const\nconst UNBIND_SENTINEL = '__unbind__'\n\ninterface ProviderPreset {\n provider: 'openai-compat' | 'anthropic'\n baseUrl: string\n modelHint: string\n}\n\nconst PRESET_KEYS = ['deepseek', 'moonshot', 'zhipu', 'openai', 'anthropic', 'custom'] as const\n\nconst PRESETS: ProviderPreset[] = [\n { provider: 'openai-compat',\n baseUrl: 'https://api.deepseek.com/v1', modelHint: 'deepseek-chat' },\n { provider: 'openai-compat',\n baseUrl: 'https://api.moonshot.cn/v1', modelHint: 'moonshot-v1-8k' },\n { provider: 'openai-compat',\n baseUrl: 'https://open.bigmodel.cn/api/paas/v4', modelHint: 'glm-4-air' },\n { provider: 'openai-compat',\n baseUrl: 'https://api.openai.com/v1', modelHint: 'gpt-4o-mini' },\n { provider: 'anthropic',\n // No trailing /v1: the Anthropic provider appends `/v1/messages` itself.\n baseUrl: 'https://api.anthropic.com', modelHint: 'claude-3-5-sonnet-20241022' },\n { provider: 'openai-compat',\n baseUrl: '', modelHint: '' },\n]\n\nexport default function SettingsLlmRoute(): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const listQuery = useLlmList()\n return (\n <div className=\"mx-auto flex max-w-5xl flex-col gap-6\">\n <header className=\"flex items-center gap-3\">\n <h1 className=\"text-xl font-semibold\">{t('llm.title')}</h1>\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('llm.refresh')}</span>\n </Button>\n </header>\n <p className=\"text-sm text-text-dim\">{t('llm.subtitle')}</p>\n\n {listQuery.isLoading ? (\n <div className=\"h-64 rounded-md bg-surface-2 animate-pulse\" />\n ) : (\n <>\n <BackendsCard data={listQuery.data} />\n <AddBackendCard />\n <RolesCard data={listQuery.data} />\n <section id=\"agim-agent\" className=\"rounded-md border border-border bg-surface px-4 py-3\">\n <h2 className=\"text-sm font-semibold\">{t('llm.agimAgentRuntimeTitle')}</h2>\n <p className=\"mt-1 text-xs text-text-dim\">{t('llm.agimAgentRuntimeHint')}</p>\n </section>\n <NativeAgentSettingsPanel embedded />\n </>\n )}\n </div>\n )\n}\n\n/* ─────────────── Backends list ─────────────── */\n\nfunction BackendsCard({ data }: { data: ReturnType<typeof useLlmList>['data'] }): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const removeBackend = useLlmRemoveBackend()\n const ping = useLlmPing()\n const [pingResults, setPingResults] = useState<Record<string, string>>({})\n\n async function onRemove(name: string): Promise<void> {\n if (!confirm(t('llm.removeConfirm', { name }))) return\n try {\n const r = await removeBackend.mutateAsync(name)\n toast.success(t('llm.removedToast', { count: r.removedRoles }))\n } catch (err) {\n toast.error(((err as Error)?.message ?? String(err)))\n }\n }\n\n async function onPing(name: string): Promise<void> {\n setPingResults((m) => ({ ...m, [name]: t('llm.pinging') }))\n try {\n const r = await ping.mutateAsync(name)\n const msg = r.ok\n ? `✓ ${r.durationMs}ms · tokens ${r.tokensIn}→${r.tokensOut}`\n : `✗ ${r.error}`\n setPingResults((m) => ({ ...m, [name]: msg }))\n } catch (err) {\n setPingResults((m) => ({ ...m, [name]: `✗ ${((err as Error)?.message ?? String(err))}` }))\n }\n }\n\n const rows = data?.backends ?? []\n if (rows.length === 0) {\n return (\n <section className=\"rounded-md border border-border bg-surface p-6 text-center text-sm text-text-dim\">\n {t('llm.backendsEmpty')}\n </section>\n )\n }\n\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"border-b border-border px-4 py-3\">\n <h2 className=\"text-sm font-semibold\">{t('llm.backendsTitle', { count: rows.length })}</h2>\n </header>\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>{t('llm.col.name')}</TableHead>\n <TableHead>{t('llm.col.provider')}</TableHead>\n <TableHead>{t('llm.col.model')}</TableHead>\n <TableHead>{t('llm.col.baseUrl')}</TableHead>\n <TableHead>{t('llm.col.apiKey')}</TableHead>\n <TableHead>{t('llm.col.actions')}</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {rows.map((b) => {\n const keyBadge = b.secret.source === 'none'\n ? <Badge variant=\"outline\">{t('llm.secretMissing')}</Badge>\n : <Badge variant=\"success\">{b.secret.source}</Badge>\n return (\n <TableRow key={b.name}>\n <TableCell className=\"font-mono text-xs\">{b.name}</TableCell>\n <TableCell>{b.provider}</TableCell>\n <TableCell className=\"font-mono text-xs\">{b.model}</TableCell>\n <TableCell className=\"break-all font-mono text-[11px] text-text-dim\">{b.baseUrl ?? '—'}</TableCell>\n <TableCell>{keyBadge}</TableCell>\n <TableCell className=\"flex flex-col gap-1 sm:flex-row sm:items-center\">\n <Button\n variant=\"ghost\" size=\"sm\"\n onClick={() => void onPing(b.name)}\n disabled={ping.isPending || b.secret.source === 'none'}\n title={b.secret.source === 'none' ? t('llm.setKeyFirst') : t('llm.pingHint')}\n >\n <Zap className=\"h-4 w-4\" />\n <span>{t('llm.ping')}</span>\n </Button>\n <Button\n variant=\"ghost\" size=\"sm\"\n onClick={() => void onRemove(b.name)}\n disabled={removeBackend.isPending}\n className=\"text-danger hover:text-danger\"\n >\n <Trash2 className=\"h-4 w-4\" />\n <span className=\"hidden sm:inline\">{t('llm.remove')}</span>\n </Button>\n {pingResults[b.name] && (\n <span className=\"ml-2 text-[11px] text-text-dim\">{pingResults[b.name]}</span>\n )}\n </TableCell>\n </TableRow>\n )\n })}\n </TableBody>\n </Table>\n </section>\n )\n}\n\n/* ─────────────── Role bindings ─────────────── */\n\nfunction RolesCard({ data }: { data: ReturnType<typeof useLlmList>['data'] }): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const putRoles = useLlmPutRoles()\n const backendNames = (data?.backends ?? []).map((b) => b.name)\n const current = data?.roles ?? {}\n\n async function onChangeRole(role: string, value: string): Promise<void> {\n const next: Record<string, string | null> = {\n [role]: value === UNBIND_SENTINEL ? null : value,\n }\n try {\n await putRoles.mutateAsync(next)\n toast.success(t('llm.roleUpdated', { role }))\n } catch (err) {\n toast.error(((err as Error)?.message ?? String(err)))\n }\n }\n\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"border-b border-border px-4 py-3\">\n <h2 className=\"text-sm font-semibold\">{t('llm.rolesTitle')}</h2>\n <p className=\"mt-1 text-xs text-text-dim\">{t('llm.rolesOptionalHint')}</p>\n </header>\n <div className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-3\">\n {KNOWN_ROLES.map((role) => (\n <div key={role} className=\"flex flex-col gap-1\">\n <Label className=\"text-xs font-medium\">{role}</Label>\n <Select\n value={current[role] ?? UNBIND_SENTINEL}\n onValueChange={(v) => void onChangeRole(role, v)}\n disabled={backendNames.length === 0 || putRoles.isPending}\n >\n <SelectTrigger className=\"font-mono text-xs\">\n <SelectValue placeholder={t('llm.unset')} />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value={UNBIND_SENTINEL}>{t('llm.unbound')}</SelectItem>\n {backendNames.map((n) => (\n <SelectItem key={n} value={n}>{n}</SelectItem>\n ))}\n </SelectContent>\n </Select>\n <p className=\"text-[11px] text-text-dim\">\n {t(`llm.roleHint.${role}`)}\n </p>\n </div>\n ))}\n </div>\n </section>\n )\n}\n\n/* ─────────────── Add backend form ─────────────── */\n\nfunction AddBackendCard(): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const addBackend = useLlmAddBackend()\n const [presetIdx, setPresetIdx] = useState(0)\n const [name, setName] = useState('')\n const [baseUrl, setBaseUrl] = useState(PRESETS[0]?.baseUrl ?? '')\n const [model, setModel] = useState(PRESETS[0]?.modelHint ?? '')\n const [apiKey, setApiKey] = useState('')\n const [formError, setFormError] = useState<string | null>(null)\n\n function fail(message: string): void {\n setFormError(message)\n toast.error(message)\n }\n\n function onPickPreset(idx: number): void {\n setPresetIdx(idx)\n const p = PRESETS[idx]\n if (!p) return\n setBaseUrl(p.baseUrl)\n setModel(p.modelHint)\n }\n\n async function onSubmit(e: React.FormEvent): Promise<void> {\n e.preventDefault()\n const p = PRESETS[presetIdx]\n if (!p) { fail(t('llm.invalidPreset')); return }\n if (!name.trim()) { fail(t('llm.nameRequired')); return }\n if (!baseUrl.trim()) { fail(t('llm.baseUrlRequired')); return }\n if (!model.trim()) { fail(t('llm.modelRequired')); return }\n if (!apiKey.trim()) { fail(t('llm.apiKeyRequired')); return }\n try {\n await addBackend.mutateAsync({\n name: name.trim(),\n provider: p.provider,\n baseUrl: baseUrl.trim(),\n model: model.trim(),\n apiKey: apiKey.trim(),\n })\n setFormError(null)\n toast.success(t('llm.addedWithKey', { name: name.trim() }))\n setName(''); setApiKey('')\n } catch (err) {\n const message = ((err as Error)?.message ?? String(err))\n fail(message)\n }\n }\n\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"border-b border-border px-4 py-3\">\n <h2 className=\"text-sm font-semibold\">{t('llm.addTitle')}</h2>\n </header>\n <form onSubmit={(e) => void onSubmit(e)} className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2\">\n <div>\n <Label className=\"text-xs font-medium\">{t('llm.preset')}</Label>\n <Select value={String(presetIdx)} onValueChange={(v) => onPickPreset(Number(v))}>\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n {PRESETS.map((_p, i) => (\n <SelectItem key={PRESET_KEYS[i]} value={String(i)}>\n {t(`llm.presets.${PRESET_KEYS[i]}`)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div>\n <Label className=\"text-xs font-medium\">{t('llm.name')}</Label>\n <Input\n value={name} onChange={(e) => setName(e.target.value)}\n placeholder={t('llm.namePlaceholder')}\n className=\"font-mono text-xs\"\n />\n </div>\n <div className=\"sm:col-span-2\">\n <Label className=\"text-xs font-medium\">{t('llm.baseUrl')}</Label>\n <Input\n value={baseUrl} onChange={(e) => setBaseUrl(e.target.value)}\n placeholder={t('llm.baseUrlPlaceholder')}\n className=\"font-mono text-xs\"\n />\n </div>\n <div>\n <Label className=\"text-xs font-medium\">{t('llm.model')}</Label>\n <Input\n value={model} onChange={(e) => setModel(e.target.value)}\n placeholder={t('llm.modelPlaceholder')}\n className=\"font-mono text-xs\"\n />\n </div>\n <div>\n <Label className=\"text-xs font-medium\">{t('llm.apiKey')}</Label>\n <Input\n type=\"password\"\n value={apiKey} onChange={(e) => setApiKey(e.target.value)}\n placeholder={t('llm.apiKeyPlaceholder')}\n className=\"font-mono text-xs\"\n autoComplete=\"off\"\n />\n </div>\n <div className=\"sm:col-span-2 flex\">\n <div className=\"flex w-full flex-col gap-2 sm:items-end\">\n {formError && (\n <p className=\"text-xs text-danger\">{formError}</p>\n )}\n <Button\n type=\"submit\"\n disabled={addBackend.isPending}\n className=\"ml-auto\"\n >\n {addBackend.isPending ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <Plus className=\"h-4 w-4\" />}\n {t('llm.addBackend')}\n </Button>\n </div>\n </div>\n </form>\n </section>\n )\n}\n\n/* helper — toast tag passthrough */\nfunction _unused(): typeof CheckCircle2 { return CheckCircle2 }\nvoid _unused\n"],"names":["Cpu","createLucideIcon","FileStack","Gauge","Waves","Zap","draftFromEnv","env","isTruthy","isFalsy","v","SubtitleWithLlmLink","useTranslation","subtitle","link","idx","jsx","jsxs","NativeAgentSettingsPanel","embedded","t","envQuery","useEnv","updateEnv","useUpdateEnv","envData","current","useMemo","draft","setDraft","useState","syncedHash","setSyncedHash","useEffect","hash","isDirty","setField","k","d","onSave","updates","toast","err","onDiscard","Fragment","Button","Loader2","RefreshCcw","NativeAgentCard","RuntimeCapsCard","A2ACard","CriticCard","CompactCard","StreamCard","EvaluatorCard","HeartbeatCard","Badge","X","Save","Field","Input","e","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","Bell","HeartPulse","Network","ShieldAlert","label","hint","children","Label","KNOWN_ROLES","UNBIND_SENTINEL","PRESET_KEYS","PRESETS","SettingsLlmRoute","listQuery","useLlmList","BackendsCard","AddBackendCard","RolesCard","data","removeBackend","useLlmRemoveBackend","ping","useLlmPing","pingResults","setPingResults","onRemove","name","r","onPing","m","msg","rows","Table","TableHeader","TableRow","TableHead","TableBody","b","keyBadge","TableCell","Trash2","putRoles","useLlmPutRoles","backendNames","onChangeRole","role","value","next","n","addBackend","useLlmAddBackend","presetIdx","setPresetIdx","setName","baseUrl","setBaseUrl","model","setModel","apiKey","setApiKey","formError","setFormError","fail","message","onPickPreset","p","onSubmit","_p","i","Plus"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4]}
@@ -1,7 +1,7 @@
1
- import{o as e}from"./index-CzlhMSb2.js";/**
1
+ import{o as e}from"./index-DHh1LYlA.js";/**
2
2
  * @license lucide-react v0.469.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
5
5
  * See the LICENSE file in the root directory of this source tree.
6
6
  */const o=e("LoaderCircle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);export{o as L};
7
- //# sourceMappingURL=loader-circle-AgQ2XO06.js.map
7
+ //# sourceMappingURL=loader-circle-DgdBWYl0.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loader-circle-AgQ2XO06.js","sources":["../../node_modules/lucide-react/dist/esm/icons/loader-circle.js"],"sourcesContent":["/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst LoaderCircle = createLucideIcon(\"LoaderCircle\", [\n [\"path\", { d: \"M21 12a9 9 0 1 1-6.219-8.56\", key: \"13zald\" }]\n]);\n\nexport { LoaderCircle as default };\n//# sourceMappingURL=loader-circle.js.map\n"],"names":["LoaderCircle","createLucideIcon"],"mappings":"wCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAAeC,EAAiB,eAAgB,CACpD,CAAC,OAAQ,CAAE,EAAG,8BAA+B,IAAK,QAAQ,CAAE,CAC9D,CAAC","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"loader-circle-DgdBWYl0.js","sources":["../../node_modules/lucide-react/dist/esm/icons/loader-circle.js"],"sourcesContent":["/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst LoaderCircle = createLucideIcon(\"LoaderCircle\", [\n [\"path\", { d: \"M21 12a9 9 0 1 1-6.219-8.56\", key: \"13zald\" }]\n]);\n\nexport { LoaderCircle as default };\n//# sourceMappingURL=loader-circle.js.map\n"],"names":["LoaderCircle","createLucideIcon"],"mappings":"wCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAAeC,EAAiB,eAAgB,CACpD,CAAC,OAAQ,CAAE,EAAG,8BAA+B,IAAK,QAAQ,CAAE,CAC9D,CAAC","x_google_ignoreList":[0]}
@@ -1,7 +1,7 @@
1
- import{o as c}from"./index-CzlhMSb2.js";/**
1
+ import{o as c}from"./index-DHh1LYlA.js";/**
2
2
  * @license lucide-react v0.469.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
5
5
  * See the LICENSE file in the root directory of this source tree.
6
6
  */const r=c("MapPin",[["path",{d:"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0",key:"1r0f0z"}],["circle",{cx:"12",cy:"10",r:"3",key:"ilqhr7"}]]);export{r as M};
7
- //# sourceMappingURL=map-pin-C6sGB9SZ.js.map
7
+ //# sourceMappingURL=map-pin-3QS1A0-I.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"map-pin-C6sGB9SZ.js","sources":["../../node_modules/lucide-react/dist/esm/icons/map-pin.js"],"sourcesContent":["/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst MapPin = createLucideIcon(\"MapPin\", [\n [\n \"path\",\n {\n d: \"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0\",\n key: \"1r0f0z\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"10\", r: \"3\", key: \"ilqhr7\" }]\n]);\n\nexport { MapPin as default };\n//# sourceMappingURL=map-pin.js.map\n"],"names":["MapPin","createLucideIcon"],"mappings":"wCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAASC,EAAiB,SAAU,CACxC,CACE,OACA,CACE,EAAG,uGACH,IAAK,QACX,CACA,EACE,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,IAAK,IAAK,QAAQ,CAAE,CAC1D,CAAC","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"map-pin-3QS1A0-I.js","sources":["../../node_modules/lucide-react/dist/esm/icons/map-pin.js"],"sourcesContent":["/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst MapPin = createLucideIcon(\"MapPin\", [\n [\n \"path\",\n {\n d: \"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0\",\n key: \"1r0f0z\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"10\", r: \"3\", key: \"ilqhr7\" }]\n]);\n\nexport { MapPin as default };\n//# sourceMappingURL=map-pin.js.map\n"],"names":["MapPin","createLucideIcon"],"mappings":"wCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAASC,EAAiB,SAAU,CACxC,CACE,OACA,CACE,EAAG,uGACH,IAAK,QACX,CACA,EACE,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,IAAK,IAAK,QAAQ,CAAE,CAC1D,CAAC","x_google_ignoreList":[0]}
@@ -1,7 +1,7 @@
1
- import{o as A,u as L,af as M,j as e,B as k,ag as q,ah as z,l as C,ai as B,L as x,I as v,S as F,g as I,h as O,i as $,k as R,m as o}from"./index-CzlhMSb2.js";import{r as l}from"./react-DlP5eolq.js";import{T as E,a as D,b as H,c as b,d as J,e as N}from"./table-D4S5FCk_.js";import{L as P}from"./loader-circle-AgQ2XO06.js";import{R as V}from"./refresh-ccw-CM-Cjwud.js";import{A as U}from"./activity-CKQwfSVC.js";import{T as Q}from"./trash-2-CB7X8tay.js";import{P as W}from"./plus-Zai0UXKL.js";/**
1
+ import{o as A,u as L,af as M,j as e,B as k,ag as q,ah as z,l as C,ai as B,L as x,I as v,S as F,g as I,h as O,i as $,k as R,m as o}from"./index-DHh1LYlA.js";import{r as l}from"./react-DlP5eolq.js";import{T as E,a as D,b as H,c as b,d as J,e as N}from"./table-Dx65w6V0.js";import{L as P}from"./loader-circle-DgdBWYl0.js";import{R as V}from"./refresh-ccw-nBMm5Xal.js";import{A as U}from"./activity-BAgb2WZC.js";import{T as Q}from"./trash-2-7xrfqd-v.js";import{P as W}from"./plus-CfzKV_0u.js";/**
2
2
  * @license lucide-react v0.469.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
5
5
  * See the LICENSE file in the root directory of this source tree.
6
6
  */const G=A("ServerCog",[["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}],["path",{d:"M4.5 10H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-.5",key:"tn8das"}],["path",{d:"M4.5 14H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2h-.5",key:"1g2pve"}],["path",{d:"M6 6h.01",key:"1utrut"}],["path",{d:"M6 18h.01",key:"uhywen"}],["path",{d:"m15.7 13.4-.9-.3",key:"1jwmzr"}],["path",{d:"m9.2 10.9-.9-.3",key:"qapnim"}],["path",{d:"m10.6 15.7.3-.9",key:"quwk0k"}],["path",{d:"m13.6 15.7-.4-1",key:"cb9xp7"}],["path",{d:"m10.8 9.3-.4-1",key:"1uaiz5"}],["path",{d:"m8.3 13.6 1-.4",key:"s6srou"}],["path",{d:"m14.7 10.8 1-.4",key:"4d31cq"}],["path",{d:"m13.4 8.3-.3.9",key:"1bm987"}]]);function ce(){const{t}=L(["settings","common"]),s=M();return e.jsxs("div",{className:"mx-auto flex max-w-5xl flex-col gap-6",children:[e.jsxs("header",{className:"flex items-center gap-3",children:[e.jsx(G,{className:"h-5 w-5 text-text-dim"}),e.jsx("h1",{className:"text-xl font-semibold",children:t("mcp.title")}),e.jsxs(k,{variant:"ghost",size:"sm",className:"ml-auto",onClick:()=>void s.refetch(),disabled:s.isFetching,"aria-label":t("actions.refresh",{ns:"common"}),children:[s.isFetching?e.jsx(P,{className:"h-4 w-4 animate-spin"}):e.jsx(V,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:t("mcp.refresh")})]})]}),e.jsx("p",{className:"text-sm text-text-dim",children:t("mcp.subtitle")}),s.isLoading?e.jsx("div",{className:"h-48 rounded-md bg-surface-2 animate-pulse"}):e.jsxs(e.Fragment,{children:[e.jsx(K,{data:s.data}),e.jsx(Y,{})]})]})}function K({data:t}){const{t:s}=L(["settings","common"]),m=q(),p=z(),[i,u]=l.useState({});async function j(a){if(confirm(s("mcp.removeConfirm",{name:a})))try{await m.mutateAsync(a),o.success(s("mcp.removedToast",{name:a}))}catch(r){o.error(r?.message??String(r))}}async function y(a){u(r=>({...r,[a]:s("mcp.probing")}));try{const r=await p.mutateAsync(a),c=r.connected?`✓ ${r.toolCount===1?s("mcp.runtimeConnectedOne",{count:r.toolCount}):s("mcp.runtimeConnected",{count:r.toolCount})}`:`✗ ${r.lastError??s("mcp.runtimeDisconnected")}`;u(h=>({...h,[a]:c}))}catch(r){u(c=>({...c,[a]:`✗ ${r?.message??String(r)}`}))}}const d=t?.servers??[],S=t?.runtime?.servers??[];return d.length===0?e.jsx("section",{className:"rounded-md border border-border bg-surface p-6 text-center text-sm text-text-dim",children:s("mcp.serversEmpty")}):e.jsxs("section",{className:"rounded-md border border-border bg-surface",children:[e.jsxs("header",{className:"flex items-center gap-2 border-b border-border px-4 py-3",children:[e.jsx("h2",{className:"text-sm font-semibold",children:s("mcp.serversTitle",{count:d.length})}),t?.runtime&&e.jsx(C,{variant:"info",children:s("mcp.totalTools",{count:t.runtime.totalTools})})]}),e.jsxs(E,{children:[e.jsx(D,{children:e.jsxs(H,{children:[e.jsx(b,{children:s("mcp.col.name")}),e.jsx(b,{children:s("mcp.col.transport")}),e.jsx(b,{children:s("mcp.col.target")}),e.jsx(b,{children:s("mcp.col.runtime")}),e.jsx(b,{children:s("mcp.col.actions")})]})}),e.jsx(J,{children:d.map(a=>{const r=S.find(n=>n.name===a.name),c=X(a,s),h=a.command?`${a.command} ${(a.args??[]).join(" ")}`.trim():a.url??"—",w=r?r.connected?e.jsx(C,{variant:"success",children:r.toolCount===1?s("mcp.runtimeConnectedOne",{count:r.toolCount}):s("mcp.runtimeConnected",{count:r.toolCount})}):e.jsx(C,{variant:"danger",children:s("mcp.runtimeDisconnected")}):e.jsx(C,{variant:"outline",children:s("mcp.runtimeUnknown")});return e.jsxs(H,{children:[e.jsx(N,{className:"font-mono text-xs",children:a.name}),e.jsx(N,{children:c}),e.jsx(N,{className:"break-all font-mono text-[11px] text-text-dim",children:h}),e.jsx(N,{children:w}),e.jsxs(N,{className:"flex flex-col gap-1 sm:flex-row sm:items-center",children:[e.jsxs(k,{variant:"ghost",size:"sm",onClick:()=>void y(a.name),disabled:p.isPending,children:[e.jsx(U,{className:"h-4 w-4"}),e.jsx("span",{children:s("mcp.health")})]}),e.jsxs(k,{variant:"ghost",size:"sm",onClick:()=>void j(a.name),disabled:m.isPending,className:"text-danger hover:text-danger",children:[e.jsx(Q,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:s("mcp.remove")})]}),i[a.name]&&e.jsx("span",{className:"ml-2 text-[11px] text-text-dim",children:i[a.name]})]})]},a.name)})})]})]})}function X(t,s){return t.command?s("mcp.transportStdio"):t.url?t.url.endsWith("/sse")?s("mcp.transportSse"):s("mcp.transportHttp"):"—"}function Y(){const{t}=L(["settings","common"]),s=B(),[m,p]=l.useState(""),[i,u]=l.useState("stdio"),[j,y]=l.useState(""),[d,S]=l.useState(""),[a,r]=l.useState(""),[c,h]=l.useState("");async function w(n){if(n.preventDefault(),!m.trim()){o.error(t("mcp.nameRequired"));return}let T;if(c.trim())try{T=JSON.parse(c)}catch{o.error(t("mcp.headersInvalid"));return}const g={name:m.trim()};if(i==="stdio"){if(!j.trim()){o.error(t("mcp.commandRequired"));return}g.command=j.trim();const f=d.split(/\s+/).filter(Boolean);f.length>0&&(g.args=f)}else{if(!a.trim()){o.error(t("mcp.urlRequired"));return}g.url=a.trim(),T&&(g.headers=T)}try{await s.mutateAsync(g),o.success(t("mcp.addedToast",{name:m.trim()})),p(""),y(""),S(""),r(""),h("")}catch(f){o.error(f?.message??String(f))}}return e.jsxs("section",{className:"rounded-md border border-border bg-surface",children:[e.jsx("header",{className:"border-b border-border px-4 py-3",children:e.jsx("h2",{className:"text-sm font-semibold",children:t("mcp.addTitle")})}),e.jsxs("form",{onSubmit:n=>void w(n),className:"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2",children:[e.jsxs("div",{children:[e.jsx(x,{className:"text-xs font-medium",children:t("mcp.nameLabel")}),e.jsx(v,{value:m,onChange:n=>p(n.target.value),placeholder:t("mcp.namePlaceholder"),className:"font-mono text-xs"})]}),e.jsxs("div",{children:[e.jsx(x,{className:"text-xs font-medium",children:t("mcp.transportLabel")}),e.jsxs(F,{value:i,onValueChange:n=>u(n),children:[e.jsx(I,{children:e.jsx(O,{})}),e.jsxs($,{children:[e.jsx(R,{value:"stdio",children:t("mcp.transportStdioOption")}),e.jsx(R,{value:"http",children:t("mcp.transportHttpOption")})]})]})]}),i==="stdio"?e.jsxs(e.Fragment,{children:[e.jsxs("div",{children:[e.jsx(x,{className:"text-xs font-medium",children:t("mcp.commandLabel")}),e.jsx(v,{value:j,onChange:n=>y(n.target.value),placeholder:t("mcp.commandPlaceholder"),className:"font-mono text-xs"})]}),e.jsxs("div",{children:[e.jsx(x,{className:"text-xs font-medium",children:t("mcp.argsLabel")}),e.jsx(v,{value:d,onChange:n=>S(n.target.value),placeholder:"-y @modelcontextprotocol/server-filesystem /data",className:"font-mono text-xs"})]})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"sm:col-span-2",children:[e.jsx(x,{className:"text-xs font-medium",children:t("mcp.urlLabel")}),e.jsx(v,{value:a,onChange:n=>r(n.target.value),placeholder:t("mcp.urlPlaceholder"),className:"font-mono text-xs"})]}),e.jsxs("div",{className:"sm:col-span-2",children:[e.jsx(x,{className:"text-xs font-medium",children:t("mcp.headersLabel")}),e.jsx(v,{value:c,onChange:n=>h(n.target.value),placeholder:t("mcp.headersPlaceholder"),className:"font-mono text-xs"})]})]}),e.jsx("div",{className:"sm:col-span-2 flex",children:e.jsxs(k,{type:"submit",disabled:s.isPending,className:"ml-auto",children:[s.isPending?e.jsx(P,{className:"h-4 w-4 animate-spin"}):e.jsx(W,{className:"h-4 w-4"}),t("mcp.addServer")]})})]})]})}export{ce as default};
7
- //# sourceMappingURL=mcp-jqsjSumH.js.map
7
+ //# sourceMappingURL=mcp-DwKZULET.js.map