@hybridaione/hybridclaw 0.18.0 → 0.19.1

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 (395) hide show
  1. package/CHANGELOG.md +91 -0
  2. package/README.md +31 -10
  3. package/config.example.json +14 -0
  4. package/console/dist/assets/chat-CHK2pGdk.css +1 -0
  5. package/console/dist/assets/chat-DrmOZ2y2.js +158 -0
  6. package/console/dist/assets/cx-UKeCbc1v.js +1 -0
  7. package/console/dist/assets/index-DZAontVo.js +16 -0
  8. package/console/dist/assets/{terminal-CfDfvr7E.js → terminal-CIu44Bps.js} +1 -1
  9. package/console/dist/index.html +2 -2
  10. package/container/dist/approval-policy.js +49 -1
  11. package/container/dist/approval-policy.js.map +1 -1
  12. package/container/dist/artifacts.js +7 -0
  13. package/container/dist/artifacts.js.map +1 -1
  14. package/container/dist/audio-transcribe.js +1189 -0
  15. package/container/dist/audio-transcribe.js.map +1 -0
  16. package/container/dist/diagram-create.js +896 -0
  17. package/container/dist/diagram-create.js.map +1 -0
  18. package/container/dist/index.js +3 -1
  19. package/container/dist/index.js.map +1 -1
  20. package/container/dist/providers/anthropic.js +7 -1
  21. package/container/dist/providers/anthropic.js.map +1 -1
  22. package/container/dist/providers/shared.js +6 -0
  23. package/container/dist/providers/shared.js.map +1 -1
  24. package/container/dist/tools.js +303 -1
  25. package/container/dist/tools.js.map +1 -1
  26. package/container/dist/types.js.map +1 -1
  27. package/container/package-lock.json +2 -2
  28. package/container/package.json +1 -1
  29. package/container/shared/audio-transcription-pricing.d.ts +11 -0
  30. package/container/shared/audio-transcription-pricing.js +21 -0
  31. package/container/shared/message-tool-channels.d.ts +2 -0
  32. package/container/shared/message-tool-channels.js +4 -0
  33. package/container/shared/middleware-contract.d.ts +23 -6
  34. package/container/shared/middleware-runner.d.ts +1 -0
  35. package/container/shared/middleware-runner.js +54 -6
  36. package/container/shared/provider-fallback.d.ts +4 -0
  37. package/container/shared/provider-fallback.js +16 -0
  38. package/container/src/approval-policy.ts +52 -1
  39. package/container/src/artifacts.ts +7 -0
  40. package/container/src/audio-transcribe.ts +1532 -0
  41. package/container/src/diagram-create.ts +1243 -0
  42. package/container/src/index.ts +5 -0
  43. package/container/src/providers/anthropic.ts +7 -1
  44. package/container/src/providers/shared.ts +6 -0
  45. package/container/src/tools.ts +357 -1
  46. package/container/src/types.ts +7 -0
  47. package/dist/a2a/envelope.d.ts +3 -0
  48. package/dist/a2a/envelope.d.ts.map +1 -1
  49. package/dist/a2a/envelope.js +20 -0
  50. package/dist/a2a/envelope.js.map +1 -1
  51. package/dist/a2a/identity.d.ts.map +1 -1
  52. package/dist/a2a/identity.js +6 -3
  53. package/dist/a2a/identity.js.map +1 -1
  54. package/dist/a2a/store.d.ts +6 -1
  55. package/dist/a2a/store.d.ts.map +1 -1
  56. package/dist/a2a/store.js +39 -8
  57. package/dist/a2a/store.js.map +1 -1
  58. package/dist/agent/conversation.d.ts +7 -0
  59. package/dist/agent/conversation.d.ts.map +1 -1
  60. package/dist/agent/conversation.js +54 -3
  61. package/dist/agent/conversation.js.map +1 -1
  62. package/dist/agent/executor-types.d.ts +1 -0
  63. package/dist/agent/executor-types.d.ts.map +1 -1
  64. package/dist/agent/middleware.d.ts +10 -0
  65. package/dist/agent/middleware.d.ts.map +1 -1
  66. package/dist/agent/middleware.js +9 -1
  67. package/dist/agent/middleware.js.map +1 -1
  68. package/dist/agent/post-turn-events.d.ts +16 -0
  69. package/dist/agent/post-turn-events.d.ts.map +1 -0
  70. package/dist/agent/post-turn-events.js +28 -0
  71. package/dist/agent/post-turn-events.js.map +1 -0
  72. package/dist/agent/prompt-hooks.d.ts.map +1 -1
  73. package/dist/agent/prompt-hooks.js +2 -5
  74. package/dist/agent/prompt-hooks.js.map +1 -1
  75. package/dist/agent/side-effects.d.ts +1 -0
  76. package/dist/agent/side-effects.d.ts.map +1 -1
  77. package/dist/agent/side-effects.js +1 -1
  78. package/dist/agent/side-effects.js.map +1 -1
  79. package/dist/agent/tool-summary.d.ts.map +1 -1
  80. package/dist/agent/tool-summary.js +4 -0
  81. package/dist/agent/tool-summary.js.map +1 -1
  82. package/dist/channels/channel-registry.d.ts.map +1 -1
  83. package/dist/channels/channel-registry.js +13 -1
  84. package/dist/channels/channel-registry.js.map +1 -1
  85. package/dist/channels/channel.d.ts +4 -2
  86. package/dist/channels/channel.d.ts.map +1 -1
  87. package/dist/channels/channel.js +20 -0
  88. package/dist/channels/channel.js.map +1 -1
  89. package/dist/channels/discord/runtime.d.ts.map +1 -1
  90. package/dist/channels/discord/runtime.js +16 -19
  91. package/dist/channels/discord/runtime.js.map +1 -1
  92. package/dist/channels/discord-webhook/config.d.ts +8 -0
  93. package/dist/channels/discord-webhook/config.d.ts.map +1 -0
  94. package/dist/channels/discord-webhook/config.js +14 -0
  95. package/dist/channels/discord-webhook/config.js.map +1 -0
  96. package/dist/channels/discord-webhook/delivery.d.ts +41 -0
  97. package/dist/channels/discord-webhook/delivery.d.ts.map +1 -0
  98. package/dist/channels/discord-webhook/delivery.js +239 -0
  99. package/dist/channels/discord-webhook/delivery.js.map +1 -0
  100. package/dist/channels/discord-webhook/policy.d.ts +11 -0
  101. package/dist/channels/discord-webhook/policy.d.ts.map +1 -0
  102. package/dist/channels/discord-webhook/policy.js +57 -0
  103. package/dist/channels/discord-webhook/policy.js.map +1 -0
  104. package/dist/channels/discord-webhook/prompt-adapter.d.ts +3 -0
  105. package/dist/channels/discord-webhook/prompt-adapter.d.ts.map +1 -0
  106. package/dist/channels/discord-webhook/prompt-adapter.js +17 -0
  107. package/dist/channels/discord-webhook/prompt-adapter.js.map +1 -0
  108. package/dist/channels/discord-webhook/runtime.d.ts +12 -0
  109. package/dist/channels/discord-webhook/runtime.d.ts.map +1 -0
  110. package/dist/channels/discord-webhook/runtime.js +56 -0
  111. package/dist/channels/discord-webhook/runtime.js.map +1 -0
  112. package/dist/channels/discord-webhook/target.d.ts +10 -0
  113. package/dist/channels/discord-webhook/target.d.ts.map +1 -0
  114. package/dist/channels/discord-webhook/target.js +74 -0
  115. package/dist/channels/discord-webhook/target.js.map +1 -0
  116. package/dist/channels/message/tool-actions.d.ts.map +1 -1
  117. package/dist/channels/message/tool-actions.js +120 -8
  118. package/dist/channels/message/tool-actions.js.map +1 -1
  119. package/dist/channels/message-tool-advertising.d.ts.map +1 -1
  120. package/dist/channels/message-tool-advertising.js +2 -0
  121. package/dist/channels/message-tool-advertising.js.map +1 -1
  122. package/dist/channels/prompt-adapters.d.ts.map +1 -1
  123. package/dist/channels/prompt-adapters.js +7 -0
  124. package/dist/channels/prompt-adapters.js.map +1 -1
  125. package/dist/channels/slack/delivery.d.ts +4 -0
  126. package/dist/channels/slack/delivery.d.ts.map +1 -1
  127. package/dist/channels/slack/delivery.js +5 -2
  128. package/dist/channels/slack/delivery.js.map +1 -1
  129. package/dist/channels/slack-webhook/config.d.ts +8 -0
  130. package/dist/channels/slack-webhook/config.d.ts.map +1 -0
  131. package/dist/channels/slack-webhook/config.js +14 -0
  132. package/dist/channels/slack-webhook/config.js.map +1 -0
  133. package/dist/channels/slack-webhook/delivery.d.ts +45 -0
  134. package/dist/channels/slack-webhook/delivery.d.ts.map +1 -0
  135. package/dist/channels/slack-webhook/delivery.js +204 -0
  136. package/dist/channels/slack-webhook/delivery.js.map +1 -0
  137. package/dist/channels/slack-webhook/policy.d.ts +11 -0
  138. package/dist/channels/slack-webhook/policy.d.ts.map +1 -0
  139. package/dist/channels/slack-webhook/policy.js +57 -0
  140. package/dist/channels/slack-webhook/policy.js.map +1 -0
  141. package/dist/channels/slack-webhook/prompt-adapter.d.ts +3 -0
  142. package/dist/channels/slack-webhook/prompt-adapter.d.ts.map +1 -0
  143. package/dist/channels/slack-webhook/prompt-adapter.js +17 -0
  144. package/dist/channels/slack-webhook/prompt-adapter.js.map +1 -0
  145. package/dist/channels/slack-webhook/runtime.d.ts +12 -0
  146. package/dist/channels/slack-webhook/runtime.d.ts.map +1 -0
  147. package/dist/channels/slack-webhook/runtime.js +56 -0
  148. package/dist/channels/slack-webhook/runtime.js.map +1 -0
  149. package/dist/channels/slack-webhook/target.d.ts +10 -0
  150. package/dist/channels/slack-webhook/target.d.ts.map +1 -0
  151. package/dist/channels/slack-webhook/target.js +71 -0
  152. package/dist/channels/slack-webhook/target.js.map +1 -0
  153. package/dist/cli/channels-command.d.ts.map +1 -1
  154. package/dist/cli/channels-command.js +319 -3
  155. package/dist/cli/channels-command.js.map +1 -1
  156. package/dist/cli/help.d.ts.map +1 -1
  157. package/dist/cli/help.js +11 -3
  158. package/dist/cli/help.js.map +1 -1
  159. package/dist/cli/plugin-command.d.ts.map +1 -1
  160. package/dist/cli/plugin-command.js +18 -6
  161. package/dist/cli/plugin-command.js.map +1 -1
  162. package/dist/cli.d.ts.map +1 -1
  163. package/dist/cli.js +7 -0
  164. package/dist/cli.js.map +1 -1
  165. package/dist/command-registry.d.ts.map +1 -1
  166. package/dist/command-registry.js +89 -7
  167. package/dist/command-registry.js.map +1 -1
  168. package/dist/config/runtime-config.d.ts +31 -0
  169. package/dist/config/runtime-config.d.ts.map +1 -1
  170. package/dist/config/runtime-config.js +326 -0
  171. package/dist/config/runtime-config.js.map +1 -1
  172. package/dist/doctor/checks/channels.d.ts.map +1 -1
  173. package/dist/doctor/checks/channels.js +53 -1
  174. package/dist/doctor/checks/channels.js.map +1 -1
  175. package/dist/evals/judge-subscriber.d.ts +40 -7
  176. package/dist/evals/judge-subscriber.d.ts.map +1 -1
  177. package/dist/evals/judge-subscriber.js +79 -24
  178. package/dist/evals/judge-subscriber.js.map +1 -1
  179. package/dist/gateway/diagram-runtime-events.d.ts +14 -0
  180. package/dist/gateway/diagram-runtime-events.d.ts.map +1 -0
  181. package/dist/gateway/diagram-runtime-events.js +52 -0
  182. package/dist/gateway/diagram-runtime-events.js.map +1 -0
  183. package/dist/gateway/docs.d.ts.map +1 -1
  184. package/dist/gateway/docs.js +8 -0
  185. package/dist/gateway/docs.js.map +1 -1
  186. package/dist/gateway/fullauto-runtime.d.ts +1 -0
  187. package/dist/gateway/fullauto-runtime.d.ts.map +1 -1
  188. package/dist/gateway/fullauto-runtime.js +1 -1
  189. package/dist/gateway/fullauto-runtime.js.map +1 -1
  190. package/dist/gateway/fullauto.d.ts.map +1 -1
  191. package/dist/gateway/fullauto.js +1 -4
  192. package/dist/gateway/fullauto.js.map +1 -1
  193. package/dist/gateway/gateway-chat-service.d.ts.map +1 -1
  194. package/dist/gateway/gateway-chat-service.js +250 -81
  195. package/dist/gateway/gateway-chat-service.js.map +1 -1
  196. package/dist/gateway/gateway-http-server.d.ts.map +1 -1
  197. package/dist/gateway/gateway-http-server.js +72 -23
  198. package/dist/gateway/gateway-http-server.js.map +1 -1
  199. package/dist/gateway/gateway-plugin-service.d.ts.map +1 -1
  200. package/dist/gateway/gateway-plugin-service.js +80 -5
  201. package/dist/gateway/gateway-plugin-service.js.map +1 -1
  202. package/dist/gateway/gateway-service.d.ts +4 -1
  203. package/dist/gateway/gateway-service.d.ts.map +1 -1
  204. package/dist/gateway/gateway-service.js +215 -29
  205. package/dist/gateway/gateway-service.js.map +1 -1
  206. package/dist/gateway/gateway-types.d.ts +38 -0
  207. package/dist/gateway/gateway-types.d.ts.map +1 -1
  208. package/dist/gateway/gateway-types.js.map +1 -1
  209. package/dist/gateway/gateway.js +170 -2
  210. package/dist/gateway/gateway.js.map +1 -1
  211. package/dist/gateway/goal-continuation-runner.d.ts +2 -0
  212. package/dist/gateway/goal-continuation-runner.d.ts.map +1 -0
  213. package/dist/gateway/goal-continuation-runner.js +80 -0
  214. package/dist/gateway/goal-continuation-runner.js.map +1 -0
  215. package/dist/gateway/openai-compatible.d.ts.map +1 -1
  216. package/dist/gateway/openai-compatible.js +2 -5
  217. package/dist/gateway/openai-compatible.js.map +1 -1
  218. package/dist/gateway/proactive-delivery.d.ts.map +1 -1
  219. package/dist/gateway/proactive-delivery.js +6 -0
  220. package/dist/gateway/proactive-delivery.js.map +1 -1
  221. package/dist/gateway/provider-fallback.d.ts +3 -2
  222. package/dist/gateway/provider-fallback.d.ts.map +1 -1
  223. package/dist/gateway/provider-fallback.js +2 -14
  224. package/dist/gateway/provider-fallback.js.map +1 -1
  225. package/dist/goals/goal-audit.d.ts +12 -0
  226. package/dist/goals/goal-audit.d.ts.map +1 -0
  227. package/dist/goals/goal-audit.js +17 -0
  228. package/dist/goals/goal-audit.js.map +1 -0
  229. package/dist/goals/goal-command.d.ts +8 -0
  230. package/dist/goals/goal-command.d.ts.map +1 -0
  231. package/dist/goals/goal-command.js +211 -0
  232. package/dist/goals/goal-command.js.map +1 -0
  233. package/dist/goals/goal-judge.d.ts +41 -0
  234. package/dist/goals/goal-judge.d.ts.map +1 -0
  235. package/dist/goals/goal-judge.js +271 -0
  236. package/dist/goals/goal-judge.js.map +1 -0
  237. package/dist/goals/goal-manager.d.ts +64 -0
  238. package/dist/goals/goal-manager.d.ts.map +1 -0
  239. package/dist/goals/goal-manager.js +266 -0
  240. package/dist/goals/goal-manager.js.map +1 -0
  241. package/dist/goals/goal-runtime.d.ts +46 -0
  242. package/dist/goals/goal-runtime.d.ts.map +1 -0
  243. package/dist/goals/goal-runtime.js +324 -0
  244. package/dist/goals/goal-runtime.js.map +1 -0
  245. package/dist/infra/container-runner.d.ts.map +1 -1
  246. package/dist/infra/container-runner.js +3 -1
  247. package/dist/infra/container-runner.js.map +1 -1
  248. package/dist/infra/host-runner.d.ts.map +1 -1
  249. package/dist/infra/host-runner.js +3 -1
  250. package/dist/infra/host-runner.js.map +1 -1
  251. package/dist/infra/worker-signature.d.ts +2 -0
  252. package/dist/infra/worker-signature.d.ts.map +1 -1
  253. package/dist/infra/worker-signature.js +33 -0
  254. package/dist/infra/worker-signature.js.map +1 -1
  255. package/dist/logger-format.d.ts.map +1 -1
  256. package/dist/logger-format.js +14 -1
  257. package/dist/logger-format.js.map +1 -1
  258. package/dist/memory/db.d.ts +1 -1
  259. package/dist/memory/db.d.ts.map +1 -1
  260. package/dist/memory/db.js +31 -1
  261. package/dist/memory/db.js.map +1 -1
  262. package/dist/memory/memory-service.d.ts +1 -0
  263. package/dist/memory/memory-service.d.ts.map +1 -1
  264. package/dist/memory/memory-service.js +9 -8
  265. package/dist/memory/memory-service.js.map +1 -1
  266. package/dist/onboarding.d.ts.map +1 -1
  267. package/dist/onboarding.js +56 -0
  268. package/dist/onboarding.js.map +1 -1
  269. package/dist/plugins/plugin-api.d.ts.map +1 -1
  270. package/dist/plugins/plugin-api.js +7 -0
  271. package/dist/plugins/plugin-api.js.map +1 -1
  272. package/dist/plugins/plugin-formatting.d.ts +7 -1
  273. package/dist/plugins/plugin-formatting.d.ts.map +1 -1
  274. package/dist/plugins/plugin-formatting.js +35 -0
  275. package/dist/plugins/plugin-formatting.js.map +1 -1
  276. package/dist/plugins/plugin-install.d.ts +4 -0
  277. package/dist/plugins/plugin-install.d.ts.map +1 -1
  278. package/dist/plugins/plugin-install.js +70 -10
  279. package/dist/plugins/plugin-install.js.map +1 -1
  280. package/dist/plugins/plugin-manager.d.ts +1 -0
  281. package/dist/plugins/plugin-manager.d.ts.map +1 -1
  282. package/dist/plugins/plugin-manager.js +16 -7
  283. package/dist/plugins/plugin-manager.js.map +1 -1
  284. package/dist/plugins/plugin-sdk.d.ts +1 -1
  285. package/dist/plugins/plugin-sdk.d.ts.map +1 -1
  286. package/dist/plugins/plugin-sdk.js.map +1 -1
  287. package/dist/plugins/plugin-types.d.ts +17 -0
  288. package/dist/plugins/plugin-types.d.ts.map +1 -1
  289. package/dist/providers/auxiliary.d.ts.map +1 -1
  290. package/dist/providers/auxiliary.js +249 -63
  291. package/dist/providers/auxiliary.js.map +1 -1
  292. package/dist/providers/model-metadata.d.ts +14 -0
  293. package/dist/providers/model-metadata.d.ts.map +1 -1
  294. package/dist/providers/model-metadata.js +47 -3
  295. package/dist/providers/model-metadata.js.map +1 -1
  296. package/dist/providers/provider-credentials.d.ts.map +1 -1
  297. package/dist/providers/provider-credentials.js +15 -0
  298. package/dist/providers/provider-credentials.js.map +1 -1
  299. package/dist/scheduler/heartbeat.d.ts.map +1 -1
  300. package/dist/scheduler/heartbeat.js +1 -0
  301. package/dist/scheduler/heartbeat.js.map +1 -1
  302. package/dist/session/session-context.d.ts.map +1 -1
  303. package/dist/session/session-context.js +2 -0
  304. package/dist/session/session-context.js.map +1 -1
  305. package/dist/session/session-reset.d.ts.map +1 -1
  306. package/dist/session/session-reset.js +6 -0
  307. package/dist/session/session-reset.js.map +1 -1
  308. package/dist/session/session-title.d.ts.map +1 -1
  309. package/dist/session/session-title.js +23 -1
  310. package/dist/session/session-title.js.map +1 -1
  311. package/dist/session/session-trace-export.d.ts.map +1 -1
  312. package/dist/session/session-trace-export.js +51 -2
  313. package/dist/session/session-trace-export.js.map +1 -1
  314. package/dist/skills/skill-manifest.d.ts.map +1 -1
  315. package/dist/skills/skill-manifest.js +2 -0
  316. package/dist/skills/skill-manifest.js.map +1 -1
  317. package/dist/tui-banner.d.ts.map +1 -1
  318. package/dist/tui-banner.js +1 -0
  319. package/dist/tui-banner.js.map +1 -1
  320. package/dist/tui-proactive.d.ts +3 -0
  321. package/dist/tui-proactive.d.ts.map +1 -1
  322. package/dist/tui-proactive.js +38 -5
  323. package/dist/tui-proactive.js.map +1 -1
  324. package/dist/tui-skill-config.d.ts +1 -1
  325. package/dist/tui-skill-config.d.ts.map +1 -1
  326. package/dist/tui.d.ts +2 -0
  327. package/dist/tui.d.ts.map +1 -1
  328. package/dist/tui.js +267 -14
  329. package/dist/tui.js.map +1 -1
  330. package/dist/types/container.d.ts +7 -0
  331. package/dist/types/container.d.ts.map +1 -1
  332. package/dist/types/models.d.ts +1 -1
  333. package/dist/types/models.d.ts.map +1 -1
  334. package/dist/types/models.js +1 -0
  335. package/dist/types/models.js.map +1 -1
  336. package/dist/usage/media-generation-usage.d.ts.map +1 -1
  337. package/dist/usage/media-generation-usage.js +39 -0
  338. package/dist/usage/media-generation-usage.js.map +1 -1
  339. package/dist/workspace.d.ts +11 -1
  340. package/dist/workspace.d.ts.map +1 -1
  341. package/dist/workspace.js +16 -12
  342. package/dist/workspace.js.map +1 -1
  343. package/docs/agents.html +6 -6
  344. package/docs/content/channels/README.md +2 -0
  345. package/docs/content/channels/discord-webhook.md +49 -0
  346. package/docs/content/channels/overview.md +9 -5
  347. package/docs/content/channels/slack-webhook.md +83 -0
  348. package/docs/content/developer-guide/identity.md +27 -0
  349. package/docs/content/developer-guide/memory.md +21 -16
  350. package/docs/content/developer-guide/runtime.md +19 -0
  351. package/docs/content/extensibility/plugins.md +20 -4
  352. package/docs/content/getting-started/first-channel.md +3 -0
  353. package/docs/content/getting-started/quickstart.md +2 -0
  354. package/docs/content/guides/bundled-skills.md +6 -14
  355. package/docs/content/guides/skills/README.md +1 -1
  356. package/docs/content/guides/skills/publishing.md +34 -1
  357. package/docs/content/internal/roadmap.md +92 -26
  358. package/docs/content/reference/commands.md +58 -4
  359. package/docs/content/reference/configuration.md +18 -2
  360. package/docs/content/reference/faq.md +6 -5
  361. package/docs/content/reference/model-selection.md +1 -0
  362. package/docs/index.html +22 -22
  363. package/docs/static/docs.js +13 -0
  364. package/package.json +5 -3
  365. package/plugins/concierge-router/hybridclaw.plugin.yaml +26 -0
  366. package/plugins/concierge-router/src/command.js +137 -0
  367. package/plugins/concierge-router/src/index.js +293 -0
  368. package/plugins/concierge-router/src/routing.js +428 -0
  369. package/plugins/concierge-router/state/.gitignore +2 -0
  370. package/scripts/postinstall-container.mjs +6 -0
  371. package/skills/diagram/SKILL.md +132 -0
  372. package/skills/diagram/agents/openai.yaml +2 -0
  373. package/skills/diagram/references/mermaid-types.md +107 -0
  374. package/skills/speech.detect-language/SKILL.md +58 -0
  375. package/skills/speech.transcribe/SKILL.md +111 -0
  376. package/console/dist/assets/chat-C4lYYG3X.css +0 -1
  377. package/console/dist/assets/chat-CBzFOOa7.js +0 -158
  378. package/console/dist/assets/cx-Dx36j-u-.js +0 -1
  379. package/console/dist/assets/index-mP3V4MBi.js +0 -16
  380. package/dist/gateway/concierge-choice.d.ts +0 -17
  381. package/dist/gateway/concierge-choice.d.ts.map +0 -1
  382. package/dist/gateway/concierge-choice.js +0 -59
  383. package/dist/gateway/concierge-choice.js.map +0 -1
  384. package/dist/gateway/concierge-commands.d.ts +0 -17
  385. package/dist/gateway/concierge-commands.d.ts.map +0 -1
  386. package/dist/gateway/concierge-commands.js +0 -88
  387. package/dist/gateway/concierge-commands.js.map +0 -1
  388. package/dist/gateway/concierge-routing.d.ts +0 -34
  389. package/dist/gateway/concierge-routing.d.ts.map +0 -1
  390. package/dist/gateway/concierge-routing.js +0 -183
  391. package/dist/gateway/concierge-routing.js.map +0 -1
  392. package/dist/gateway/concierge-session.d.ts +0 -32
  393. package/dist/gateway/concierge-session.d.ts.map +0 -1
  394. package/dist/gateway/concierge-session.js +0 -132
  395. package/dist/gateway/concierge-session.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,97 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## [0.19.1](https://github.com/HybridAIOne/hybridclaw/tree/v0.19.1) - 2026-05-14
6
+
7
+ ### Fixed
8
+
9
+ - **Release npm signature verification**: The npm publish workflow now uses
10
+ the repo's signature-audit wrapper so the temporary Baileys release-age
11
+ bypass is applied consistently before publishing.
12
+
13
+ ## [0.19.0](https://github.com/HybridAIOne/hybridclaw/tree/v0.19.0) - 2026-05-14
14
+
15
+ ### Added
16
+
17
+ - **Persistent standing goals**: Added `/goal` as a per-thread completion
18
+ condition that persists across turns, queues supervised continuations until a
19
+ judge marks the condition complete, reports goal status/counters, and pauses
20
+ cleanly for approvals, user interruptions, malformed judge output, or
21
+ explicit `pause`/`clear` commands. Goal continuations include the current
22
+ goal step and use scoped TUI/proactive labels so they remain distinct from
23
+ reminders and ordinary user turns.
24
+ - **Native speech-to-text transcription**: Added the `audio_transcribe` runtime
25
+ tool plus bundled `speech.transcribe` and `speech.detect-language` skills for
26
+ provider-agnostic transcription, language detection, diarization, timestamps,
27
+ transcript artifact persistence, and usage-cost accounting across configured
28
+ OpenAI, Deepgram, AssemblyAI, and local backends.
29
+ - **Discord Incoming Webhook channel**: Added outbound-only `discord_webhook`
30
+ delivery for Discord webhook URLs, including default and named targets,
31
+ encrypted SecretRef storage, CLI/Admin setup, message chunking, doctor/status
32
+ visibility, and managed POST-only network policy grants.
33
+ - **Diagram-as-code runtime and bundled skill**: Added the `diagram` skill plus
34
+ native `diagram.create`, `diagram.update`, and `diagram.validate` tools for
35
+ validated Mermaid-first diagrams, with PlantUML, Graphviz DOT, and Excalidraw
36
+ JSON adapters, source/rendered artifact persistence, SVG fallbacks, and
37
+ diagram runtime events.
38
+ - **Slack Incoming Webhook channel**: Added outbound-only `slack_webhook`
39
+ delivery for Slack Incoming Webhook URLs, including default and named targets,
40
+ encrypted SecretRef storage, `hybridclaw channel add slack_webhook` setup,
41
+ admin-console editing, Block Kit text chunking, reachability status, and
42
+ managed POST-only network policy grants.
43
+ - **Concierge router plugin**: Moved concierge urgency routing into the
44
+ repo-shipped `concierge-router` middleware plugin, preserving `/concierge`
45
+ commands while giving routing middleware a plugin-owned pending-state store
46
+ and authorized inbound webhook path for urgency-button callbacks.
47
+ - **A2A sender instance metadata**: A2A envelopes now carry
48
+ `sender_instance_id`, derive it from canonical sender IDs for legacy payloads,
49
+ expose it in audit summaries, and use `(envelope.id, sender_instance_id)` as
50
+ the idempotency tuple for federated threads.
51
+ - **Model overlay metadata substrate**: Static model metadata can now carry a
52
+ complete `model_overlay` contract shape and lookup helpers for GPT-5-family
53
+ matching, preparing the runtime for model-specific behavior overlays without
54
+ wiring an overlay applier yet.
55
+ - **Prompt-prefix trace metadata**: ATIF/OpenTraces session exports now include
56
+ dynamic-context hashes and `prompt_prefix` entries alongside system prompt
57
+ hashes, making prompt-cache behavior auditable per turn.
58
+
59
+ ### Changed
60
+
61
+ - **System prompt prefix is byte-stable**: Per-turn dynamic context such as the
62
+ current date, host, today's memory note, session summary, and retrieval
63
+ snippets moved out of the system prompt into a post-prefix user context block
64
+ so provider prefix caches can reuse the static system prompt.
65
+ - **Plugin discovery lists installable plugins**: `hybridclaw plugin list` and
66
+ `/plugin list` now show installed plugins plus bundled/project-local
67
+ installable plugins, with `installed` and `available` filters. Bare plugin
68
+ IDs resolve through bundled and project `plugins/` catalogs, with project
69
+ plugins taking priority.
70
+ - **Web chat sessions are easier to manage**: The chat sidebar can delete
71
+ stored browser sessions, and local web clients automatically refresh their
72
+ token when the gateway rotates the local web token.
73
+ - **TUI rendering handles Markdown tables**: The TUI now renders Markdown table
74
+ blocks as terminal tables while preserving ordinary assistant text flow.
75
+
76
+ ### Fixed
77
+
78
+ - **Agents page navigation links**: Corrected broken links on the generated
79
+ agents page so navigation targets resolve properly.
80
+ - **Auxiliary provider fallback**: Auxiliary calls retry through the configured
81
+ fallback provider path, including active local-provider preference and clearer
82
+ fallback logging.
83
+ - **Global package install bootstrap**: Container dependency postinstall now
84
+ falls back to `npm` when the outer install was invoked by `pnpm`, avoiding
85
+ broken global package installs caused by forwarding the wrong package-manager
86
+ executable and lifecycle env.
87
+ - **pnpm install compatibility**: Dependency verification avoids the Baileys
88
+ libsignal Git dependency path that blocked `pnpm`-initiated installs.
89
+ - **Microsoft Teams optional dependency loading**: Teams Bot Framework support
90
+ is lazy-loaded so installs that do not use Microsoft Teams are not blocked by
91
+ that integration path.
92
+ - **Federated A2A duplicate handling**: Threads can now contain the same
93
+ envelope ID from different sender instances while ambiguous envelope lookups
94
+ fail fast unless the caller supplies `sender_instance_id`.
95
+
5
96
  ## [0.18.0](https://github.com/HybridAIOne/hybridclaw/tree/v0.18.0) - 2026-05-13
6
97
 
7
98
  ### Added
package/README.md CHANGED
@@ -19,9 +19,10 @@ security, and operational visibility. It combines sandboxed execution, secure
19
19
  credentials, approvals, persistent memory, and admin surfaces behind a single
20
20
  gateway.
21
21
 
22
- Connect it to Discord, Slack, Signal, WhatsApp, Telegram, Microsoft Teams,
23
- email, Twilio voice, or the web. Run it locally, deploy it for business
24
- workflows, and keep your agents, secrets, and data under your control.
22
+ Connect it to Discord, Discord Incoming Webhooks, Slack, Slack Incoming
23
+ Webhooks, Signal, WhatsApp, Telegram, Microsoft Teams, email, Twilio voice, or
24
+ the web. Run it locally, deploy it for business workflows, and keep your
25
+ agents, secrets, and data under your control.
25
26
 
26
27
  [Quick Start](https://hybridaione.github.io/hybridclaw/docs/getting-started/quickstart) ·
27
28
  [Installation](https://hybridaione.github.io/hybridclaw/docs/getting-started/installation) ·
@@ -106,7 +107,7 @@ Once the gateway is running, open HybridClaw locally:
106
107
 
107
108
  - Web Chat: `http://127.0.0.1:9090/chat`
108
109
  - Web Chat keeps a recent-session sidebar and can search conversation titles
109
- with contextual snippets before you reopen an older browser session
110
+ with contextual snippets before you reopen or delete an older browser session
110
111
  - Web Chat shows live context-window usage, accepts `/context`, and lets you
111
112
  switch the active agent and model from the composer; active agent switching is
112
113
  preserved across session reloads and UI route changes
@@ -118,7 +119,8 @@ Once the gateway is running, open HybridClaw locally:
118
119
  - Admin Console: `http://127.0.0.1:9090/admin` for channels, versioned agent files,
119
120
  scheduler, audit, statistics, config, and channel-specific instructions
120
121
  - Agent Dashboard: `http://127.0.0.1:9090/agents`
121
- - or connect Slack, Signal, WhatsApp, Telegram, Discord, Microsoft Teams, Email
122
+ - or connect Discord, Discord Incoming Webhooks, Slack, Slack Incoming
123
+ Webhooks, Signal, WhatsApp, Telegram, Microsoft Teams, Email
122
124
 
123
125
  ## Operator workflows
124
126
 
@@ -149,6 +151,12 @@ Once the gateway is running, open HybridClaw locally:
149
151
  - `/admin/channels` edits transport config, encrypted channel credentials,
150
152
  Signal QR linking, Twilio voice settings, and per-channel instructions that
151
153
  are injected into prompts at runtime.
154
+ - `slack_webhook` targets provide outbound-only Slack Incoming Webhook delivery
155
+ with encrypted webhook URLs, named destinations, Block Kit text chunking,
156
+ reachability status, and POST-only network policy grants.
157
+ - `discord_webhook` targets provide outbound-only Discord Incoming Webhook
158
+ delivery with encrypted webhook URLs, named destinations, message chunking,
159
+ reachability status, and POST-only network policy grants.
152
160
  - `/admin/approvals` manages approval policies from the browser.
153
161
  - Approval policy evaluation runs through a hook-fed rule pipeline, so
154
162
  workspace policy ordering and plugin tool-use hooks share one approval path.
@@ -160,6 +168,9 @@ Once the gateway is running, open HybridClaw locally:
160
168
  local/manual full restarts.
161
169
  - `/context` and the web chat context ring show current context-window usage,
162
170
  remaining headroom, and compaction counts for the active session.
171
+ - `/goal` stores a standing completion condition for the current thread and
172
+ queues supervised continuations until the goal is judged complete, paused,
173
+ cleared, interrupted, or blocked by approval policy.
163
174
  - `proactive.delegation.model` can pin delegated work to a different model
164
175
  from the parent turn; `/status` shows delegate token totals and local-token
165
176
  share when that split is configured.
@@ -183,9 +194,9 @@ Once the gateway is running, open HybridClaw locally:
183
194
  - Generated artifacts remain downloadable and attachable even when the sandbox
184
195
  exposes a custom workspace display root such as `/app`.
185
196
  - `hybridclaw tui` includes live delegate progress, pulsing tool rows,
186
- completion checkmarks, a keyboard-driven approval picker, and a ready-to-run
187
- `hybridclaw tui --resume <sessionId>` command on exit. Pressing `Esc` stops
188
- the active run and returns control to the prompt.
197
+ completion checkmarks, rendered Markdown tables, a keyboard-driven approval
198
+ picker, and a ready-to-run `hybridclaw tui --resume <sessionId>` command on
199
+ exit. Pressing `Esc` stops the active run and returns control to the prompt.
189
200
  - `hybridclaw doctor` checks runtime health including resource hygiene
190
201
  maintenance for stale gateway artifacts. `hybridclaw doctor browser-use`
191
202
  checks the local Playwright browser automation substrate and can install
@@ -255,12 +266,20 @@ Once the gateway is running, open HybridClaw locally:
255
266
  monthly SaaS invoice harvesting (`download-platform-invoices`), Airtable,
256
267
  FastBill, managed or self-hosted Firecrawl, Google Ads, GA4 reporting,
257
268
  HeyGen, Hermes3000 long-form writing, natural-language warehouse SQL
258
- (`warehouse-sql`), brand-voice drafting, and editable Excalidraw diagram
269
+ (`warehouse-sql`), brand-voice drafting, speech transcription and language
270
+ detection (`speech.transcribe`, `speech.detect-language`), validated
271
+ diagram-as-code creation through `diagram`, and editable Excalidraw diagram
259
272
  creation.
260
273
  - Native media tools generate images and videos through configured providers,
261
274
  persist the resulting artifacts, and expose the same capability through the
262
275
  bundled `image-generation`, `video-generation`, and `video.from-script`
263
276
  skills.
277
+ - Native audio transcription can route through configured local or provider
278
+ backends, produce private transcript artifacts, and attach language,
279
+ timestamp, speaker, duration, and cost metadata when available.
280
+ - Dynamic per-turn context such as current date, host, today's daily memory,
281
+ session summary, and retrieved context is appended after the static system
282
+ prompt so provider prefix caches can reuse the stable prompt prefix.
264
283
  - Browser automation can use local persistent Playwright profiles, Camofox
265
284
  profiles, or Browser Use Cloud sessions with encrypted `BROWSER_USE_API_KEY`
266
285
  storage, usage metering, shared navigation guards, SecretRef-gated credential
@@ -327,7 +346,7 @@ Once the gateway is running, open HybridClaw locally:
327
346
 
328
347
  ## Architecture
329
348
 
330
- - **Gateway service** (Node.js) — shared message/command handlers, SQLite persistence (KV + semantic + knowledge graph + canonical sessions + usage events), scheduler, heartbeat, web/API, loopback OpenAI-compatible API, A2A peer trust, board-card storage, and channel integrations for Discord, Slack, Signal, Threema, Microsoft Teams, Telegram, iMessage, WhatsApp, Twilio voice, and email
349
+ - **Gateway service** (Node.js) — shared message/command handlers, SQLite persistence (KV + semantic + knowledge graph + canonical sessions + usage events), scheduler, heartbeat, web/API, loopback OpenAI-compatible API, A2A peer trust, board-card storage, and channel integrations for Discord, Discord Incoming Webhooks, Slack, Slack Incoming Webhooks, Signal, Threema, Microsoft Teams, Telegram, iMessage, WhatsApp, Twilio voice, and email
331
350
  - **TUI client** — thin client over HTTP (`/api/chat`, `/api/command`) with
332
351
  a structured startup banner that surfaces model, sandbox, gateway, and
333
352
  chatbot context before the first prompt, live delegate status/progress,
@@ -360,7 +379,9 @@ Browse the full manual at
360
379
  [Overview](https://hybridaione.github.io/hybridclaw/docs/channels/overview),
361
380
  [Twilio Voice](https://hybridaione.github.io/hybridclaw/docs/guides/twilio-voice),
362
381
  [Discord](https://hybridaione.github.io/hybridclaw/docs/channels/discord),
382
+ [Discord Incoming Webhook](https://hybridaione.github.io/hybridclaw/docs/channels/discord-webhook),
363
383
  [Slack](https://hybridaione.github.io/hybridclaw/docs/channels/slack),
384
+ [Slack Incoming Webhook](https://hybridaione.github.io/hybridclaw/docs/channels/slack-webhook),
364
385
  [Telegram](https://hybridaione.github.io/hybridclaw/docs/channels/telegram),
365
386
  [Signal](https://hybridaione.github.io/hybridclaw/docs/channels/signal),
366
387
  [Threema](https://hybridaione.github.io/hybridclaw/docs/channels/threema),
@@ -44,12 +44,16 @@
44
44
  "msteams": [],
45
45
  "signal": [],
46
46
  "slack": [],
47
+ "slack_webhook": [],
47
48
  "telegram": [],
48
49
  "threema": [],
49
50
  "voice": [],
50
51
  "whatsapp": [],
51
52
  "email": []
52
53
  },
54
+ "speechToText": {
55
+ "defaultProvider": "auto"
56
+ },
53
57
  "installed": []
54
58
  },
55
59
  "tools": {
@@ -57,9 +61,11 @@
57
61
  },
58
62
  "channelInstructions": {
59
63
  "discord": "",
64
+ "discord_webhook": "",
60
65
  "msteams": "",
61
66
  "signal": "",
62
67
  "slack": "",
68
+ "slack_webhook": "",
63
69
  "telegram": "",
64
70
  "threema": "",
65
71
  "voice": "This is a live phone call. Produce plain spoken text only.\nKeep each reply short and conversational, usually one or two short sentences.\nAbsolutely no markdown, bullets, numbered lists, headings, code fences, tables, JSON, or decorative formatting.\nDo not narrate internal reasoning, planning, tool usage, or stage directions. Say only what the caller should hear.\nDo not spell punctuation, formatting marks, or raw URLs unless the caller explicitly asks for exact characters.",
@@ -184,6 +190,14 @@
184
190
  "replyStyle": "thread",
185
191
  "mediaMaxMb": 20
186
192
  },
193
+ "slackWebhook": {
194
+ "enabled": false,
195
+ "webhooks": {}
196
+ },
197
+ "discordWebhook": {
198
+ "enabled": false,
199
+ "webhooks": {}
200
+ },
187
201
  "telegram": {
188
202
  "enabled": false,
189
203
  "botToken": "",
@@ -0,0 +1 @@
1
+ ._srOnly_jfnet_1{clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}._chatPage_j2obt_1{--chat-hover-bg:color-mix(in srgb, var(--muted) 94%, var(--foreground) 6%);width:100%;max-width:100vw;height:var(--chat-visual-viewport-height,100dvh);min-height:0;display:flex;overflow:hidden}._chatPage_j2obt_1>div{height:100%;min-height:0}.layout:has(._chatPage_j2obt_1){width:100%;max-width:100vw;min-height:0;height:var(--chat-visual-viewport-height,100dvh);overflow:hidden}html:has(.chatPage){width:100%;max-width:100vw;overflow-x:hidden}body:has(.chatPage){width:100%;max-width:100vw;overflow-x:hidden}#root:has(.chatPage){width:100%;max-width:100vw;overflow-x:hidden}._chatSidebarHeader_j2obt_36{justify-content:space-between;align-items:center;gap:8px;padding:0 4px;display:flex}._chatSidebarContent_j2obt_44{flex-direction:column;gap:8px;padding:0 4px;display:flex;overflow:hidden}._newChatButton_j2obt_52{appearance:none;width:100%;color:inherit;font:inherit;border-radius:var(--radius-sm);cursor:pointer;text-align:left;background:0 0;border:none;align-items:center;gap:12px;padding:18px 8px;font-weight:500;transition:background .12s;display:flex}._newChatButton_j2obt_52:hover{background:var(--chat-hover-bg)}._newChatButton_j2obt_52>span:first-child{justify-content:center;width:20px;font-size:1.25rem;line-height:1;display:inline-flex}._sidebarLabel_j2obt_82{text-transform:uppercase;letter-spacing:.08em;color:var(--muted-foreground);margin:12px 0 4px;padding:0 6px;font-size:.7rem;font-weight:700}._sidebarListHeader_j2obt_92{justify-content:space-between;align-items:center;gap:8px;display:flex}._sidebarScopeToggle_j2obt_99{border:1px solid var(--line-strong);border-radius:var(--radius-sm);background:var(--muted);align-items:center;padding:2px;display:inline-flex}._sidebarScopeButton_j2obt_108{appearance:none;border-radius:calc(var(--radius-sm) - 2px);color:var(--muted-foreground);font:inherit;cursor:pointer;background:0 0;border:0;padding:5px 8px;font-size:.72rem;font-weight:600;line-height:1;transition:background .12s,color .12s,box-shadow .12s}._sidebarScopeButton_j2obt_108:hover{color:var(--text)}._sidebarScopeButtonActive_j2obt_130{background:var(--primary);color:var(--primary-foreground);box-shadow:0 1px 2px #0f172a2e, 0 0 0 1px color-mix(in srgb, var(--primary) 70%, var(--background));font-weight:700}._sidebarScopeButtonActive_j2obt_130:hover{color:var(--primary-foreground)}._sessionList_j2obt_143{flex-direction:column;gap:2px;margin:0;padding:0;list-style:none;display:flex}._sessionItemRow_j2obt_152{border-radius:var(--radius-sm);grid-template-columns:minmax(0,1fr) 30px;align-items:center;transition:background .12s;display:grid}._sessionItemRow_j2obt_152:hover,._sessionItemRow_j2obt_152:focus-within{background:var(--chat-hover-bg)}._sessionItem_j2obt_152{appearance:none;border-radius:var(--radius-sm);cursor:pointer;text-align:left;width:100%;font:inherit;color:inherit;background:0 0;border:0;flex-direction:column;gap:2px;min-width:0;padding:8px 10px;display:flex;overflow:hidden}._sessionItemPending_j2obt_183{animation:1s ease-in-out infinite _sessionPulse_j2obt_1}@keyframes _sessionPulse_j2obt_1{0%,to{opacity:1}50%{opacity:.5}}._sessionTitle_j2obt_197{color:var(--text);white-space:nowrap;text-overflow:ellipsis;font-size:.875rem;font-weight:500;overflow:hidden}._sessionTime_j2obt_206{color:var(--muted-foreground);font-size:.72rem}._sessionSnippet_j2obt_211{color:var(--muted-foreground);white-space:nowrap;text-overflow:ellipsis;font-size:.76rem;overflow:hidden}._sessionItemActive_j2obt_219 ._sessionTitle_j2obt_197,._sessionItemActive_j2obt_219 ._sessionSnippet_j2obt_211{color:var(--primary)}._sessionDeleteButton_j2obt_224{appearance:none;border-radius:var(--radius-sm);width:28px;height:28px;color:var(--muted-foreground);cursor:pointer;opacity:0;background:0 0;border:0;justify-content:center;align-items:center;transition:background .12s,color .12s,opacity .12s;display:inline-flex}._sessionItemRow_j2obt_152:hover ._sessionDeleteButton_j2obt_224,._sessionItemRow_j2obt_152:focus-within ._sessionDeleteButton_j2obt_224{opacity:1}._sessionDeleteButton_j2obt_224:hover,._sessionDeleteButton_j2obt_224:focus-visible{background:var(--danger-soft);color:var(--danger);opacity:1}._sessionDeleteButton_j2obt_224:disabled{cursor:wait;opacity:.5}._sessionDeleteIcon_j2obt_260{fill:none;stroke:currentColor;width:15px;height:15px}@media (hover:none){._sessionDeleteButton_j2obt_224{opacity:1}}._sidebarSearchWrap_j2obt_273{padding:10px 0 4px}._sidebarSearch_j2obt_273{border:1px solid var(--line-strong);border-radius:var(--radius-sm);background:var(--panel-bg);width:100%;color:var(--text);font:inherit;padding:9px 11px}._sidebarSearch_j2obt_273::placeholder{color:var(--muted-foreground)}._sidebarSearch_j2obt_273:focus{outline:2px solid var(--accent-soft);outline-offset:1px;border-color:var(--ring)}._sidebarStatus_j2obt_297{color:var(--muted-foreground);padding:6px 10px;font-size:.82rem}aside[data-state=collapsed] ._newChatButton_j2obt_52{justify-content:center;gap:0;padding:10px 8px}aside[data-state=collapsed] ._newChatButton_j2obt_52>span:not(:first-child),aside[data-state=collapsed] ._sidebarSearchWrap_j2obt_273,aside[data-state=collapsed] ._chatSidebarContent_j2obt_44{display:none}._chatMobileTrigger_j2obt_316{margin-right:auto;display:inline-flex}._chatTopbar_j2obt_321{z-index:50;flex-shrink:0;justify-content:flex-end;align-items:center;gap:10px;min-width:0;max-width:100%;padding:24px 24px 0;display:flex;position:relative;overflow:visible}._mobileQrButton_j2obt_335{appearance:none;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel-bg);width:36px;height:36px;color:var(--muted-foreground);cursor:pointer;justify-content:center;align-items:center;display:inline-flex}._mobileQrButton_j2obt_335:hover{color:var(--primary);border-color:color-mix(in srgb, var(--primary) 42%, var(--line))}._mobileQrButton_j2obt_335:disabled{opacity:.55;cursor:wait}._mobileQrIcon_j2obt_359{grid-template-rows:repeat(2,7px);grid-template-columns:repeat(2,7px);gap:3px;display:grid}._mobileQrIcon_j2obt_359 span{border:2px solid;border-radius:2px}._mobileQrOverlay_j2obt_371{z-index:80;background:#02061773;justify-content:center;align-items:center;padding:18px;display:flex;position:fixed;inset:0}._mobileQrDialog_j2obt_382{border:1px solid var(--line);border-radius:var(--radius-md);background:var(--panel-bg);width:min(360px,100%);padding:18px;box-shadow:0 18px 55px #0f172a38}._mobileQrHeader_j2obt_391{justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;display:flex}._mobileQrHeader_j2obt_391 h2{margin:0;font-size:1rem;font-weight:650}._mobileQrClose_j2obt_405{appearance:none;border:1px solid var(--line);border-radius:var(--radius-sm);width:32px;height:32px;color:var(--muted-foreground);cursor:pointer;font:inherit;background:0 0;line-height:1}._mobileQrImage_j2obt_418{border:1px solid var(--line);border-radius:var(--radius-sm);background:#fff;justify-content:center;padding:12px;display:flex}._mobileQrImage_j2obt_418 img{width:min(260px,100%);height:auto}._mobileQrLink_j2obt_432{color:var(--primary);text-align:center;word-break:break-word;margin-top:12px;font-size:.86rem;display:block}._chatMain_j2obt_441{background:var(--page-bg);flex-direction:column;flex:auto;min-width:0;height:100%;min-height:0;display:flex;position:relative;overflow:hidden}._messageArea_j2obt_453{overscroll-behavior:contain;overflow-anchor:none;flex:auto;min-width:0;min-height:0;padding:16px 24px 12px;overflow:hidden auto}._messageList_j2obt_466{flex-direction:column;gap:12px;width:100%;min-width:0;max-width:100%;display:flex}._sidebarCollapseButton_j2obt_475{align-self:center}._emptyState_j2obt_479{flex-direction:column;flex:auto;justify-content:center;align-items:center;min-height:0;padding:48px 24px;display:flex}._greeting_j2obt_489{color:var(--muted-foreground);text-align:center;letter-spacing:-.02em;font-size:clamp(1.6rem,3vw,2.2rem);font-weight:700;line-height:1.3}._messageBlock_j2obt_498{flex-direction:column;gap:6px;width:100%;min-width:0;max-width:100%;display:flex}._jumpToLatest_j2obt_510{left:50%;bottom:calc(var(--chat-composer-height,132px) + 12px);border:1px solid var(--line-strong);background:var(--panel-bg);color:var(--text);font:inherit;cursor:pointer;box-shadow:var(--shadow-raised);z-index:40;border-radius:999px;align-items:center;gap:6px;padding:6px 14px;font-size:.82rem;font-weight:500;transition:background .12s;display:inline-flex;position:absolute;transform:translate(-50%)}._jumpToLatest_j2obt_510:hover{background:var(--chat-hover-bg)}._jumpToLatest_j2obt_510:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 55%, transparent);outline-offset:2px}._jumpToLatest_j2obt_510 span:first-child{font-weight:700;line-height:1}._messageBlockUser_j2obt_546{align-items:flex-end}._messageBlockAssistant_j2obt_550,._messageBlockSystem_j2obt_551{align-items:flex-start}._agentLabel_j2obt_555{color:var(--muted-foreground);align-items:center;gap:8px;padding:0 4px;font-size:.82rem;font-weight:600;display:flex}._agentAvatar_j2obt_565{object-fit:cover;border-radius:999px;width:32px;height:32px}._agentInitial_j2obt_572{background:var(--primary);width:32px;height:32px;color:var(--primary-foreground);border-radius:999px;justify-content:center;align-items:center;font-size:.86rem;font-weight:700;display:flex}._bubble_j2obt_585{word-wrap:break-word;overflow-wrap:break-word;border-radius:14px;min-width:0;max-width:85%;padding:10px 14px;font-size:.92rem;line-height:1.55}._bubbleUser_j2obt_596{background:linear-gradient(135deg, var(--primary), var(--ring));color:var(--primary-foreground);border-bottom-right-radius:4px}._bubbleAssistant_j2obt_602{background:var(--card);color:var(--card-foreground);border:1px solid var(--line);box-shadow:var(--shadow-card);border-bottom-left-radius:4px}._bubbleSystem_j2obt_610{background:var(--accent-soft);color:var(--accent-foreground);text-align:center;align-self:center;max-width:90%;font-size:.84rem}._markdownContent_j2obt_619{overflow-wrap:anywhere;min-width:0;max-width:100%;line-height:1.6}._markdownContent_j2obt_619 h1,._markdownContent_j2obt_619 h2,._markdownContent_j2obt_619 h3{color:var(--foreground);letter-spacing:-.02em;margin:.6em 0 .3em;font-weight:600}._markdownContent_j2obt_619 h1{font-size:1.25rem}._markdownContent_j2obt_619 h2{font-size:1.12rem}._markdownContent_j2obt_619 h3{font-size:1rem}._markdownContent_j2obt_619 p{margin:.4em 0}._markdownContent_j2obt_619 ul,._markdownContent_j2obt_619 ol{margin:.4em 0;padding-left:20px}._markdownContent_j2obt_619 li{margin:2px 0}._markdownContent_j2obt_619 blockquote{border-left:3px solid var(--line-strong);color:var(--muted-foreground);margin:.5em 0;padding:4px 12px}._markdownContent_j2obt_619 code{background:var(--muted);color:var(--foreground);border-radius:4px;padding:2px 5px;font-size:.86em}._markdownContent_j2obt_619 pre{background:var(--terminal);color:var(--terminal-foreground);border-radius:var(--radius-sm);margin:.5em 0;padding:12px 14px;font-size:.84rem;line-height:1.5;overflow-x:auto}._markdownContent_j2obt_619 pre code{color:inherit;font-size:inherit;background:0 0;border-radius:0;padding:0}._markdownContent_j2obt_619 hr{border:none;border-top:1px solid var(--line);margin:.8em 0}._markdownContent_j2obt_619 a{color:var(--primary);text-decoration:none}._markdownContent_j2obt_619 a:hover{text-decoration:underline}._markdownContent_j2obt_619 table{border-collapse:collapse;width:100%;margin:.5em 0;font-size:.86rem}._markdownContent_j2obt_619 th,._markdownContent_j2obt_619 td{border:1px solid var(--line);text-align:left;padding:6px 10px}._markdownContent_j2obt_619 th{background:var(--muted);font-weight:600}._markdownContent_j2obt_619 tbody tr:nth-child(2n){background:var(--muted)}._messageActions_j2obt_733{gap:4px;padding:0 4px;display:flex}._messageActions_j2obt_733 ._actionButton_j2obt_739{width:24px;height:24px;min-height:unset;color:var(--muted-foreground);background:0 0;border-color:#0000;border-radius:999px;font-size:.82rem}._messageActions_j2obt_733 ._actionButton_j2obt_739:hover:not(:disabled):not([data-disabled]){background:var(--chat-hover-bg);color:var(--foreground)}._actionButtonSuccess_j2obt_755{color:var(--success)}._branchSwitcher_j2obt_759{color:var(--muted-foreground);align-items:center;gap:4px;padding:0 4px;font-size:.75rem;display:inline-flex}._branchButton_j2obt_768{width:22px;height:22px;min-height:unset;border-radius:999px;font-size:.8rem}._branchButton_j2obt_768:hover:not(:disabled):not([data-disabled]){background:var(--chat-hover-bg);color:var(--text)}._branchButton_j2obt_768:disabled{opacity:.4;cursor:default}._approvalActions_j2obt_786{flex-wrap:wrap;gap:6px;margin-top:8px;display:flex}._approvalAllow_j2obt_793{border-color:var(--success-border);background:var(--success-soft);color:var(--success)}._artifactCard_j2obt_799{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--muted);flex-direction:column;align-items:center;gap:10px;width:fit-content;max-width:100%;margin-top:8px;padding:10px 14px;display:flex}._artifactCardWithPreview_j2obt_813{align-items:stretch;width:min(720px,100%)}._artifactHeader_j2obt_818{align-items:center;gap:10px;min-width:0;display:flex}._artifactFilename_j2obt_825{color:var(--text);white-space:nowrap;text-overflow:ellipsis;min-width:0;font-size:.84rem;font-weight:500;overflow:hidden}._artifactBadge_j2obt_835{background:var(--accent-soft);color:var(--accent-foreground);border-radius:4px;flex-shrink:0;padding:2px 6px;font-size:.7rem;font-weight:500}._artifactDownload_j2obt_845{color:var(--primary);cursor:pointer;background:0 0;border:none;flex-shrink:0;margin-left:auto;padding:0;font-size:.82rem;text-decoration:none}._artifactDownload_j2obt_845:hover{text-decoration:underline}._artifactDownload_j2obt_845:disabled{opacity:.6;cursor:default;text-decoration:none}._artifactPreview_j2obt_867{border-radius:var(--radius-sm);max-width:100%;overflow:hidden}._artifactPreview_j2obt_867 img{border-radius:var(--radius-sm);max-width:100%;display:block}._artifactPdfPreview_j2obt_879{border:1px solid var(--line);background:#fff;width:100%;height:min(60vh,560px);min-height:360px}._artifactPdfPreview_j2obt_879 iframe{background:#fff;border:0;width:100%;height:100%;display:block}._thinking_j2obt_895{align-items:center;gap:4px;padding:10px 14px;display:flex}._thinkingDot_j2obt_902{background:var(--muted-foreground);border-radius:999px;width:7px;height:7px;animation:1.2s ease-in-out infinite _thinkingBounce_j2obt_1}._thinkingDot_j2obt_902:nth-child(2){animation-delay:.15s}._thinkingDot_j2obt_902:nth-child(3){animation-delay:.3s}@keyframes _thinkingBounce_j2obt_1{0%,80%,to{opacity:.4;transform:scale(.6)}40%{opacity:1;transform:scale(1)}}._composerWrapper_j2obt_931{flex-shrink:0;min-width:0;max-width:100%;margin-top:auto;padding:0 24px 20px;overflow:hidden}._composer_j2obt_931{border:1px solid var(--line-strong);background:var(--panel-bg);width:100%;min-width:0;max-width:100%;box-shadow:var(--shadow-raised);border-radius:16px;flex-direction:column;gap:8px;padding:12px 16px;transition:border-color .15s;display:flex}._pendingMediaRow_j2obt_955{flex-wrap:wrap;gap:6px;padding:10px 14px 0;display:flex}._mediaChip_j2obt_962{background:var(--muted);color:var(--text);border-radius:6px;align-items:center;gap:4px;max-width:180px;padding:4px 8px;font-size:.78rem;display:inline-flex}._mediaChipName_j2obt_974{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}._mediaChipRemove_j2obt_980{width:16px;height:16px;color:var(--muted-foreground);cursor:pointer;background:0 0;border:none;border-radius:999px;flex-shrink:0;justify-content:center;align-items:center;font-size:.7rem;display:flex}._mediaChipRemove_j2obt_980:hover{color:var(--danger)}._composerRow_j2obt_999{align-items:flex-end;gap:8px;padding:10px 14px;display:flex}._composerActions_j2obt_1006{justify-content:space-between;align-items:center;gap:8px;display:flex}._composerLeftActions_j2obt_1013{align-items:center;gap:12px;min-width:0;display:flex}._composerInput_j2obt_1020{resize:none;min-height:36px;max-height:180px;color:var(--text);background:0 0;border:none;outline:none;flex:auto;padding:0;font-size:.92rem;line-height:36px}._composerInput_j2obt_1020:not(:placeholder-shown){padding:6px 0;line-height:1.5}._composerInput_j2obt_1020::placeholder{color:var(--muted-foreground)}._attachButton_j2obt_1043,._sendButton_j2obt_1044{cursor:pointer;border:none;border-radius:999px;flex-shrink:0;justify-content:center;align-items:center;width:36px;height:36px;transition:background .12s,color .12s;display:flex}._attachButton_j2obt_1043:focus-visible,._sendButton_j2obt_1044:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 55%, transparent);outline-offset:2px}._attachButton_j2obt_1043{color:var(--muted-foreground);background:0 0;font-size:1.2rem}._attachButton_j2obt_1043:hover{background:var(--chat-hover-bg);color:var(--text)}._composerPill_j2obt_1079{max-width:220px;height:36px;color:var(--muted-foreground);font:inherit;cursor:pointer;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:none;border-radius:999px;outline:none;align-items:center;gap:8px;padding:0 16px;font-size:.78rem;font-weight:500;line-height:36px;transition:background .12s,color .12s;display:inline-flex;position:relative;overflow:hidden}._composerPill_j2obt_1079:hover:not(:disabled):not([data-disabled]),._composerPill_j2obt_1079:focus,._composerPill_j2obt_1079:focus-within,._composerPill_j2obt_1079[data-state=open]{background:var(--chat-hover-bg);color:var(--text)}._composerPill_j2obt_1079:disabled,._composerPill_j2obt_1079[data-disabled]{opacity:.55;cursor:default}._agentSelect_j2obt_1121{appearance:none;max-width:180px;height:36px;color:inherit;font:inherit;font-size:inherit;font-weight:inherit;cursor:pointer;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:none;outline:none;padding:0;line-height:36px;overflow:hidden}._agentSelect_j2obt_1121:disabled{cursor:default}._composerPillChevron_j2obt_1144{opacity:.7;flex-shrink:0;align-items:center;transition:transform .16s;display:inline-flex}._composerPill_j2obt_1079[data-state=open] ._composerPillChevron_j2obt_1144{opacity:1;transform:rotate(180deg)}._sendButton_j2obt_1044{color:var(--muted-foreground);border:1px solid var(--line-strong);background:0 0;font-size:.9rem}._sendButton_j2obt_1044:hover:not(:disabled){background:var(--chat-hover-bg);color:var(--text)}._sendButton_j2obt_1044:disabled{opacity:.5;cursor:default}._sendButton_j2obt_1044._stopping_j2obt_1174{background:var(--danger-soft);color:var(--danger)}._slashSuggestions_j2obt_1179{background:var(--popover);border:1px solid var(--line);border-radius:var(--radius-md);box-shadow:var(--shadow-popover);overflow:hidden}._slashSuggestionsScroll_j2obt_1187{max-height:220px}._slashSuggestionsList_j2obt_1191{outline:none}._suggestionItem_j2obt_1195{cursor:pointer;border-left:2px solid #0000;flex-direction:column;justify-content:center;gap:2px;min-width:0;min-height:44px;padding:10px 14px;transition:background .1s;display:flex}._suggestionItemActive_j2obt_1210{background:color-mix(in srgb, var(--primary) 14%, transparent);border-left-color:var(--primary)}._suggestionItemSub_j2obt_1215{padding-left:28px}._suggestionLabel_j2obt_1219{color:var(--text);white-space:nowrap;text-overflow:ellipsis;font-size:.86rem;font-weight:500;overflow:hidden}._suggestionLabelMono_j2obt_1228{font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, monospace);color:var(--muted-foreground);font-size:.82rem}._suggestionMatch_j2obt_1234{color:inherit;text-underline-offset:3px;background:0 0;font-weight:700;text-decoration:underline;text-decoration-thickness:1px}._suggestionDesc_j2obt_1243{color:var(--muted-foreground);white-space:nowrap;text-overflow:ellipsis;font-size:.76rem;overflow:hidden}._suggestionEmpty_j2obt_1251{color:var(--muted-foreground);padding:14px;font-size:.82rem}@media (width<=768px){._suggestionItem_j2obt_1195{min-height:48px;padding:12px 14px}}._errorBanner_j2obt_1268{border-radius:var(--radius-sm);background:var(--danger-soft);border:1px solid var(--danger-border);color:var(--danger);width:calc(100% - 48px);max-width:860px;margin:0 auto;padding:8px 14px;font-size:.84rem}._editArea_j2obt_1282{resize:vertical;border:1px solid var(--line-strong);border-radius:var(--radius-sm);background:var(--panel-bg);width:100%;min-height:48px;max-height:200px;color:var(--text);padding:8px 10px;font-family:inherit;font-size:.92rem;line-height:1.5}._editButtons_j2obt_1297{gap:6px;margin-top:6px;display:flex}@media (width<=900px){._chatPage_j2obt_1{width:100vw;max-width:100vw;position:fixed;inset:0}._chatPage_j2obt_1,._chatPage_j2obt_1 *{max-width:100vw}._chatPage_j2obt_1{height:var(--chat-visual-viewport-height,100svh)}._chatMain_j2obt_441{flex:0 0 100vw;width:100vw;max-width:100vw}._chatTopbar_j2obt_321{width:100vw;padding:8px 16px 0}._messageArea_j2obt_453{width:100vw;max-width:100vw;padding:16px 16px calc(var(--chat-composer-height,150px) + 12px)}._messageList_j2obt_466,._messageBlock_j2obt_498{width:100%;max-width:100%;overflow-x:clip}._bubble_j2obt_585,._bubbleUser_j2obt_596,._bubbleAssistant_j2obt_602{max-width:min(95%,100vw - 32px)}._composerWrapper_j2obt_931{z-index:45;background:var(--page-bg);padding:0 16px;position:fixed;bottom:0;left:0;right:0}._slashSuggestionsScroll_j2obt_1187{max-height:40vh}}@media (width<=480px){._bubbleUser_j2obt_596,._bubbleAssistant_j2obt_602{max-width:95%}._messageArea_j2obt_453{padding:12px 8px calc(var(--chat-composer-height,150px) + 12px)}._composerWrapper_j2obt_931{padding:0 12px}._emptyState_j2obt_479 h1{font-size:1.2rem}}@media (prefers-reduced-motion:reduce){._thinkingDot_j2obt_902,._sessionItemPending_j2obt_183{animation:none}}._root_16nbt_1{flex-direction:column;min-width:0;min-height:0;display:flex;position:relative;overflow:hidden}._viewport_16nbt_10{scrollbar-width:none;-ms-overflow-style:none;outline:none;flex:auto;width:100%;min-width:0;height:100%;min-height:0;overflow:hidden scroll}._viewport_16nbt_10::-webkit-scrollbar{width:0;height:0;display:none}._scrollbar_16nbt_29{opacity:0;touch-action:none;-webkit-user-select:none;user-select:none;background:0 0;flex-direction:column;width:8px;padding:0;transition:opacity .16s;display:flex;position:absolute;top:4px;bottom:4px;right:2px}._scrollbar_16nbt_29[data-state=visible]{opacity:.6}._root_16nbt_1:hover ._scrollbar_16nbt_29[data-state=visible],._scrollbar_16nbt_29[data-state=visible]:hover,._scrollbar_16nbt_29[data-state=visible]:focus-within{opacity:1}._thumb_16nbt_55{background:color-mix(in srgb, var(--text) 26%, transparent);cursor:grab;will-change:transform;border-radius:999px;width:100%;min-height:20px;transition:background .12s}._thumb_16nbt_55:hover{background:color-mix(in srgb, var(--text) 38%, transparent)}._thumb_16nbt_55:active{background:color-mix(in srgb, var(--text) 48%, transparent);cursor:grabbing}._trigger_1fi1d_1{border:1px solid var(--line,var(--panel-bg));background-color:var(--panel-bg);max-width:220px;height:32px;color:var(--text);font:inherit;cursor:pointer;border-radius:999px;outline:none;align-items:center;gap:6px;padding:0 10px 0 12px;font-size:.78rem;font-weight:500;line-height:1;transition:background-color .12s,color .12s,border-color .12s;display:inline-flex}._trigger_1fi1d_1:hover:not([data-disabled]),._trigger_1fi1d_1[data-state=open]{background-color:color-mix(in srgb, var(--panel-bg) 80%, var(--text) 20%);border-color:color-mix(in srgb, var(--text) 22%, var(--panel-bg))}._trigger_1fi1d_1:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 55%, transparent);outline-offset:2px}._trigger_1fi1d_1[data-disabled]{opacity:.55;cursor:default}._value_1fi1d_40{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}._value_1fi1d_40[data-placeholder]{color:var(--muted-foreground)}._icon_1fi1d_52{color:currentColor;opacity:.7;flex-shrink:0;align-items:center;transition:transform .16s;display:inline-flex}._trigger_1fi1d_1[data-state=open] ._icon_1fi1d_52{opacity:1;transform:rotate(180deg)}._popup_1fi1d_66{z-index:1000;box-sizing:border-box;contain:layout style;border:1px solid color-mix(in srgb, var(--text) 28%, var(--panel-bg));background-color:var(--popover,var(--card,var(--panel-bg)));width:min(420px,100vw - 16px);height:min(440px,100vh - 32px);box-shadow:var(--shadow-popover);color:var(--text);border-radius:14px;outline:none;flex-direction:column;font-size:.82rem;transition:width .16s;animation:.12s ease-out _select-in_1fi1d_1;display:flex;position:fixed;overflow:hidden}._popup_1fi1d_66:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 55%, transparent);outline-offset:2px}:root[data-theme=dark] ._popup_1fi1d_66{background-color:#1c2536}:root[data-theme=light] ._popup_1fi1d_66{background-color:#fff}@keyframes _select-in_1fi1d_1{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}._popupHeader_1fi1d_111{border-bottom:1px solid color-mix(in srgb, var(--text) 12%, transparent);flex-shrink:0;padding:8px 8px 6px}._popupBodyPlain_1fi1d_117,._popupBody_1fi1d_117{flex:auto;min-width:0;min-height:0;display:flex}._popupRail_1fi1d_131{box-sizing:border-box;border-right:1px solid color-mix(in srgb, var(--text) 12%, transparent);scrollbar-width:none;flex-direction:column;flex-grow:0;flex-shrink:0;align-items:center;gap:2px;width:48px;padding:6px 4px;display:flex;overflow:hidden auto}._popupRail_1fi1d_131::-webkit-scrollbar{display:none}._listScroll_1fi1d_151{flex:auto;min-width:0;min-height:0}._list_1fi1d_151{outline:none;padding:6px}._list_1fi1d_151:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 55%, transparent);outline-offset:-2px;border-radius:12px}._group_1fi1d_168{display:block}._group_1fi1d_168+._group_1fi1d_168{margin-top:4px}._groupLabel_1fi1d_176{color:var(--muted-foreground);letter-spacing:.01em;padding:8px 10px 4px;font-size:.72rem;font-weight:500}._separator_1fi1d_184{background:color-mix(in srgb, var(--text) 12%, transparent);height:1px;margin:4px 6px}._empty_1fi1d_190{color:var(--muted-foreground);text-align:center;padding:18px 12px;font-size:.82rem}._item_1fi1d_197{min-height:34px;color:var(--text);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:8px;outline:none;align-items:center;gap:10px;padding:6px 10px;font-size:.84rem;line-height:1.3;display:flex;position:relative}._item_1fi1d_197:has(>._itemIndicator_1fi1d_214){padding-left:30px}._item_1fi1d_197[data-highlighted]:not([data-disabled]){background:color-mix(in srgb, var(--panel-bg) 60%, var(--text) 14%)}._item_1fi1d_197[data-state=checked]{font-weight:600}._item_1fi1d_197[data-state=checked]:not([data-highlighted]){background:color-mix(in srgb, var(--panel-bg) 75%, var(--text) 6%)}._item_1fi1d_197[data-disabled]{opacity:.5;cursor:not-allowed}._itemIndicator_1fi1d_214{color:currentColor;justify-content:center;align-items:center;display:none;position:absolute;left:8px}._item_1fi1d_197[data-state=checked]>._itemIndicator_1fi1d_214{display:inline-flex}._itemText_1fi1d_248{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}._itemBody_1fi1d_256{flex-direction:column;flex:auto;align-items:flex-start;gap:1px;min-width:0;display:flex}._itemBody_1fi1d_256>*{text-overflow:ellipsis;white-space:nowrap;max-width:100%;overflow:hidden}._itemSubtitle_1fi1d_272{color:var(--muted-foreground);letter-spacing:.01em;font-size:.7rem;font-weight:400}._itemMeta_1fi1d_279{color:var(--muted-foreground);font-variant-numeric:tabular-nums;flex-shrink:0;align-items:center;gap:6px;font-size:.7rem;display:inline-flex}._search_12ewc_1{background:color-mix(in srgb, var(--panel-bg) 65%, transparent);height:30px;color:var(--muted-foreground);border-radius:8px;align-items:center;gap:8px;padding:0 10px;display:flex}._search_12ewc_1:focus-within{background:color-mix(in srgb, var(--panel-bg) 50%, var(--text) 6%);color:var(--text)}._searchInput_12ewc_17{min-width:0;height:100%;color:var(--text);font:inherit;background:0 0;border:none;outline:none;flex:auto;font-size:.82rem}._searchInput_12ewc_17::placeholder{color:var(--muted-foreground)}._rail_12ewc_33{display:contents}._railItem_12ewc_37{width:36px;height:36px;color:var(--muted-foreground);cursor:pointer;background:0 0;border:none;border-radius:9px;flex-shrink:0;justify-content:center;align-items:center;padding:0;transition:background .12s,color .12s;display:flex}._railItem_12ewc_37:hover:not([data-active]){background:color-mix(in srgb, var(--panel-bg) 60%, var(--text) 14%);color:var(--text)}._railItem_12ewc_37[data-active]{background:color-mix(in srgb, var(--panel-bg) 50%, var(--text) 18%);box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--text) 26%, transparent)}._railItem_12ewc_37:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 55%, transparent);outline-offset:1px}._railGlyph_12ewc_70{width:22px;height:22px;color:var(--muted-foreground);filter:grayscale()saturate(0);justify-content:center;align-items:center;line-height:1;display:inline-flex}._railItem_12ewc_37:hover ._railGlyph_12ewc_70,._railItem_12ewc_37[data-active] ._railGlyph_12ewc_70{color:var(--text)}._triggerPill_12ewc_90{color:var(--muted-foreground);background-color:#0000;border-color:#0000;height:36px;padding:0 16px}._triggerPill_12ewc_90:hover:not([data-disabled]),._triggerPill_12ewc_90[data-state=open]{background-color:var(--chat-hover-bg);color:var(--text);border-color:#0000}._triggerLogo_12ewc_105{color:var(--muted-foreground);filter:grayscale()saturate(0);flex-shrink:0;align-items:center;line-height:1;display:inline-flex}._itemLogo_12ewc_114{width:20px;height:20px;color:var(--muted-foreground);filter:grayscale()saturate(0);flex-shrink:0;justify-content:center;align-items:center;line-height:1;display:inline-flex}._wrap_jrif0_1{flex-shrink:0;justify-content:center;align-items:center;width:34px;height:34px;display:inline-flex;position:relative}._trigger_jrif0_11{appearance:none;width:34px;height:34px;color:inherit;cursor:pointer;background:0 0;border:none;border-radius:999px;justify-content:center;align-items:center;padding:0;transition:background .12s;display:flex}._trigger_jrif0_11:hover,._trigger_jrif0_11:focus-visible{background:var(--muted);outline:none}._ring_jrif0_33{transform:rotate(-90deg)}._ringTrack_jrif0_37{fill:none;stroke:var(--line);stroke-width:3.5px}._ringFill_jrif0_43{fill:none;stroke-width:3.5px;stroke-linecap:round;transition:stroke-dashoffset .4s,stroke .2s}._ringFillNominal_jrif0_52{stroke:var(--primary)}._ringFillWarn_jrif0_56{stroke:var(--accent,#d97706)}._ringFillDanger_jrif0_60{stroke:var(--danger,#dc2626)}._ringLabel_jrif0_64{color:var(--muted-foreground);pointer-events:none;letter-spacing:0;justify-content:center;align-items:center;font-size:.62rem;font-weight:700;display:flex;position:absolute;inset:0}._ringLabelUnknown_jrif0_77{font-size:.7rem}._popover_jrif0_81{background:var(--popover);border:1px solid var(--line);border-radius:var(--radius-md);min-width:240px;box-shadow:var(--shadow-popover);color:var(--text);z-index:30;opacity:0;pointer-events:none;flex-direction:column;gap:6px;padding:10px 12px;font-size:.8rem;transition:opacity .15s,transform .15s;display:flex;position:absolute;top:calc(100% + 6px);right:0;transform:translateY(-4px)}._wrap_jrif0_1:hover ._popover_jrif0_81,._wrap_jrif0_1:focus-within ._popover_jrif0_81{opacity:1;pointer-events:auto;transform:translateY(0)}._popoverTitle_jrif0_112{color:var(--text);justify-content:space-between;gap:8px;font-size:.82rem;font-weight:600;display:flex}._popoverTitleValue_jrif0_121{color:var(--muted-foreground);font-weight:500}._popoverRow_jrif0_126{color:var(--muted-foreground);justify-content:space-between;gap:12px;display:flex}._popoverRowValue_jrif0_133{color:var(--text);font-variant-numeric:tabular-nums}._popoverProgress_jrif0_138{background:var(--muted);border-radius:999px;width:100%;height:6px;margin-top:2px;position:relative;overflow:hidden}._popoverProgressFill_jrif0_148{background:var(--primary);transition:width .4s,background .2s;position:absolute;inset:0 auto 0 0}._popoverProgressFillWarn_jrif0_157{background:var(--accent,#d97706)}._popoverProgressFillDanger_jrif0_161{background:var(--danger,#dc2626)}._popoverFoot_jrif0_165{color:var(--muted-foreground);margin-top:2px;font-size:.72rem}._button_kxq2k_1{white-space:nowrap;cursor:pointer;border-radius:var(--radius-sm);box-sizing:border-box;border:1px solid #0000;outline:none;flex-shrink:0;justify-content:center;align-items:center;gap:6px;font-size:.875rem;font-weight:500;line-height:1;text-decoration:none;transition:background .15s,border-color .15s,opacity .15s;display:inline-flex}._button_kxq2k_1:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 55%, transparent);outline-offset:2px}._button_kxq2k_1:disabled,._button_kxq2k_1[data-disabled]{cursor:default;opacity:.72}._button_kxq2k_1:disabled{pointer-events:none}._button_kxq2k_1[data-loading]{cursor:progress}._button_kxq2k_1 svg{pointer-events:none;flex-shrink:0}._default_kxq2k_50{background:var(--primary);border-color:var(--primary);color:var(--primary-foreground)}._default_kxq2k_50:hover:not(:disabled):not([data-disabled]){opacity:.9}._ghost_kxq2k_60{background:var(--panel-bg);border-color:var(--line-strong);color:var(--text)}._ghost_kxq2k_60:hover:not(:disabled):not([data-disabled]){background:var(--muted)}._outline_kxq2k_70{border-color:var(--line-strong);color:var(--text);background:0 0}._outline_kxq2k_70:hover:not(:disabled):not([data-disabled]){background:var(--muted)}._danger_kxq2k_80{background:var(--danger-soft);border-color:var(--danger-border);color:var(--danger)}._danger_kxq2k_80:hover:not(:disabled):not([data-disabled]){opacity:.85}._sizeDefault_kxq2k_92{min-height:36px;padding:9px 12px}._sizeSm_kxq2k_97{min-height:30px;padding:6px 10px;font-size:.8125rem}._sizeIcon_kxq2k_103{width:36px;height:36px;min-height:unset;padding:0}