@hybridaione/hybridclaw 0.16.0 → 0.17.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 (457) hide show
  1. package/CHANGELOG.md +72 -0
  2. package/README.md +67 -54
  3. package/SECURITY.md +52 -0
  4. package/config.example.json +34 -1
  5. package/console/dist/assets/chat-LVRun8dV.css +1 -0
  6. package/console/dist/assets/{chat-9B6dFbBr.js → chat-ZXlZMDQn.js} +29 -28
  7. package/console/dist/assets/cx-D-Eeq-HT.js +1 -0
  8. package/console/dist/assets/index-BcOge1oI.js +16 -0
  9. package/console/dist/assets/index-C4X6KQL_.css +1 -0
  10. package/console/dist/assets/{terminal-BqDi2uWz.js → terminal-BhiO_Bf5.js} +1 -1
  11. package/console/dist/index.html +3 -3
  12. package/container/Dockerfile +12 -1
  13. package/container/dist/anomaly-trace-judge.js +174 -0
  14. package/container/dist/anomaly-trace-judge.js.map +1 -0
  15. package/container/dist/approval-policy.js +235 -2
  16. package/container/dist/approval-policy.js.map +1 -1
  17. package/container/dist/behavior-anomaly.js +532 -0
  18. package/container/dist/behavior-anomaly.js.map +1 -0
  19. package/container/dist/browser-tools.js.map +1 -1
  20. package/container/dist/image-generation.js +1135 -0
  21. package/container/dist/image-generation.js.map +1 -0
  22. package/container/dist/index.js +58 -10
  23. package/container/dist/index.js.map +1 -1
  24. package/container/dist/providers/auxiliary.js +11 -1
  25. package/container/dist/providers/auxiliary.js.map +1 -1
  26. package/container/dist/providers/router.js +2 -1
  27. package/container/dist/providers/router.js.map +1 -1
  28. package/container/dist/search-utils.js +56 -0
  29. package/container/dist/search-utils.js.map +1 -0
  30. package/container/dist/searxng-client.js +106 -0
  31. package/container/dist/searxng-client.js.map +1 -0
  32. package/container/dist/tools.js +188 -21
  33. package/container/dist/tools.js.map +1 -1
  34. package/container/dist/types.js +1 -0
  35. package/container/dist/types.js.map +1 -1
  36. package/container/dist/video-generation.js +464 -0
  37. package/container/dist/video-generation.js.map +1 -0
  38. package/container/dist/web-search.js +31 -101
  39. package/container/dist/web-search.js.map +1 -1
  40. package/container/package-lock.json +6 -2
  41. package/container/package.json +6 -1
  42. package/container/shared/message-tool-channels.d.ts +1 -0
  43. package/container/shared/message-tool-channels.js +2 -0
  44. package/container/shared/network-policy.js +2 -2
  45. package/container/src/anomaly-trace-judge.ts +236 -0
  46. package/container/src/approval-policy.ts +290 -1
  47. package/container/src/behavior-anomaly.ts +660 -0
  48. package/container/src/browser-tools.ts +3 -23
  49. package/container/src/image-generation.ts +1396 -0
  50. package/container/src/index.ts +65 -21
  51. package/container/src/providers/auxiliary.ts +13 -1
  52. package/container/src/providers/router.ts +4 -2
  53. package/container/src/search-utils.ts +62 -0
  54. package/container/src/searxng-client.ts +157 -0
  55. package/container/src/tools.ts +222 -42
  56. package/container/src/types.ts +32 -0
  57. package/container/src/video-generation.ts +598 -0
  58. package/container/src/web-search.ts +55 -121
  59. package/dist/a2a/a2a-inbound.d.ts +34 -0
  60. package/dist/a2a/a2a-inbound.d.ts.map +1 -0
  61. package/dist/a2a/a2a-inbound.js +415 -0
  62. package/dist/a2a/a2a-inbound.js.map +1 -0
  63. package/dist/a2a/a2a-json-rpc.d.ts +1 -0
  64. package/dist/a2a/a2a-json-rpc.d.ts.map +1 -1
  65. package/dist/a2a/a2a-json-rpc.js +2 -0
  66. package/dist/a2a/a2a-json-rpc.js.map +1 -1
  67. package/dist/a2a/a2a-outbound.d.ts +2 -1
  68. package/dist/a2a/a2a-outbound.d.ts.map +1 -1
  69. package/dist/a2a/a2a-outbound.js +2 -1
  70. package/dist/a2a/a2a-outbound.js.map +1 -1
  71. package/dist/a2a/a2a-outbox-delivery.d.ts +3 -0
  72. package/dist/a2a/a2a-outbox-delivery.d.ts.map +1 -1
  73. package/dist/a2a/a2a-outbox-delivery.js +94 -65
  74. package/dist/a2a/a2a-outbox-delivery.js.map +1 -1
  75. package/dist/a2a/delegation-token.d.ts +86 -0
  76. package/dist/a2a/delegation-token.d.ts.map +1 -0
  77. package/dist/a2a/delegation-token.js +437 -0
  78. package/dist/a2a/delegation-token.js.map +1 -0
  79. package/dist/a2a/envelope.d.ts +7 -1
  80. package/dist/a2a/envelope.d.ts.map +1 -1
  81. package/dist/a2a/envelope.js +106 -17
  82. package/dist/a2a/envelope.js.map +1 -1
  83. package/dist/a2a/inbound-pipeline.d.ts +5 -2
  84. package/dist/a2a/inbound-pipeline.d.ts.map +1 -1
  85. package/dist/a2a/inbound-pipeline.js +20 -0
  86. package/dist/a2a/inbound-pipeline.js.map +1 -1
  87. package/dist/a2a/peer-descriptor.d.ts +1 -0
  88. package/dist/a2a/peer-descriptor.d.ts.map +1 -1
  89. package/dist/a2a/peer-descriptor.js +19 -3
  90. package/dist/a2a/peer-descriptor.js.map +1 -1
  91. package/dist/a2a/store.d.ts +13 -0
  92. package/dist/a2a/store.d.ts.map +1 -1
  93. package/dist/a2a/store.js +43 -4
  94. package/dist/a2a/store.js.map +1 -1
  95. package/dist/a2a/trust-ledger.d.ts +98 -0
  96. package/dist/a2a/trust-ledger.d.ts.map +1 -1
  97. package/dist/a2a/trust-ledger.js +745 -11
  98. package/dist/a2a/trust-ledger.js.map +1 -1
  99. package/dist/a2a/utils.d.ts +1 -1
  100. package/dist/a2a/utils.d.ts.map +1 -1
  101. package/dist/a2a/utils.js +3 -3
  102. package/dist/a2a/utils.js.map +1 -1
  103. package/dist/a2a/webhook-inbound.d.ts.map +1 -1
  104. package/dist/a2a/webhook-inbound.js +61 -4
  105. package/dist/a2a/webhook-inbound.js.map +1 -1
  106. package/dist/agent/prompt-hooks.d.ts.map +1 -1
  107. package/dist/agent/prompt-hooks.js +6 -2
  108. package/dist/agent/prompt-hooks.js.map +1 -1
  109. package/dist/agent/tool-summary.d.ts.map +1 -1
  110. package/dist/agent/tool-summary.js +12 -2
  111. package/dist/agent/tool-summary.js.map +1 -1
  112. package/dist/agents/agent-registry.d.ts.map +1 -1
  113. package/dist/agents/agent-registry.js +9 -1
  114. package/dist/agents/agent-registry.js.map +1 -1
  115. package/dist/agents/agent-types.d.ts +8 -0
  116. package/dist/agents/agent-types.d.ts.map +1 -1
  117. package/dist/agents/agent-types.js +44 -0
  118. package/dist/agents/agent-types.js.map +1 -1
  119. package/dist/audit/audit-events.d.ts.map +1 -1
  120. package/dist/audit/audit-events.js +29 -0
  121. package/dist/audit/audit-events.js.map +1 -1
  122. package/dist/board/card-store.d.ts +80 -0
  123. package/dist/board/card-store.d.ts.map +1 -0
  124. package/dist/board/card-store.js +446 -0
  125. package/dist/board/card-store.js.map +1 -0
  126. package/dist/browser/browser-use-cloud-provider.d.ts +6 -3
  127. package/dist/browser/browser-use-cloud-provider.d.ts.map +1 -1
  128. package/dist/browser/browser-use-cloud-provider.js +33 -23
  129. package/dist/browser/browser-use-cloud-provider.js.map +1 -1
  130. package/dist/browser/camofox-provider.d.ts +30 -0
  131. package/dist/browser/camofox-provider.d.ts.map +1 -0
  132. package/dist/browser/camofox-provider.js +85 -0
  133. package/dist/browser/camofox-provider.js.map +1 -0
  134. package/dist/browser/local-provider.d.ts +5 -34
  135. package/dist/browser/local-provider.d.ts.map +1 -1
  136. package/dist/browser/local-provider.js +6 -120
  137. package/dist/browser/local-provider.js.map +1 -1
  138. package/dist/browser/playwright-utils.d.ts +57 -3
  139. package/dist/browser/playwright-utils.d.ts.map +1 -1
  140. package/dist/browser/playwright-utils.js +203 -13
  141. package/dist/browser/playwright-utils.js.map +1 -1
  142. package/dist/browser/profile-dir.d.ts +7 -0
  143. package/dist/browser/profile-dir.d.ts.map +1 -0
  144. package/dist/browser/profile-dir.js +63 -0
  145. package/dist/browser/profile-dir.js.map +1 -0
  146. package/dist/browser/provider-factory.d.ts +12 -0
  147. package/dist/browser/provider-factory.d.ts.map +1 -0
  148. package/dist/browser/provider-factory.js +31 -0
  149. package/dist/browser/provider-factory.js.map +1 -0
  150. package/dist/browser/provider.d.ts +1 -0
  151. package/dist/browser/provider.d.ts.map +1 -1
  152. package/dist/channels/channel-registry.d.ts.map +1 -1
  153. package/dist/channels/channel-registry.js +5 -1
  154. package/dist/channels/channel-registry.js.map +1 -1
  155. package/dist/channels/channel.d.ts +3 -2
  156. package/dist/channels/channel.d.ts.map +1 -1
  157. package/dist/channels/channel.js +10 -0
  158. package/dist/channels/channel.js.map +1 -1
  159. package/dist/channels/message/tool-actions.d.ts.map +1 -1
  160. package/dist/channels/message/tool-actions.js +41 -1
  161. package/dist/channels/message/tool-actions.js.map +1 -1
  162. package/dist/channels/message-tool-advertising.d.ts.map +1 -1
  163. package/dist/channels/message-tool-advertising.js +1 -0
  164. package/dist/channels/message-tool-advertising.js.map +1 -1
  165. package/dist/channels/prompt-adapters.d.ts.map +1 -1
  166. package/dist/channels/prompt-adapters.js +3 -0
  167. package/dist/channels/prompt-adapters.js.map +1 -1
  168. package/dist/channels/threema/api.d.ts +17 -0
  169. package/dist/channels/threema/api.d.ts.map +1 -0
  170. package/dist/channels/threema/api.js +91 -0
  171. package/dist/channels/threema/api.js.map +1 -0
  172. package/dist/channels/threema/delivery.d.ts +7 -0
  173. package/dist/channels/threema/delivery.d.ts.map +1 -0
  174. package/dist/channels/threema/delivery.js +117 -0
  175. package/dist/channels/threema/delivery.js.map +1 -0
  176. package/dist/channels/threema/prompt-adapter.d.ts +3 -0
  177. package/dist/channels/threema/prompt-adapter.d.ts.map +1 -0
  178. package/dist/channels/threema/prompt-adapter.js +17 -0
  179. package/dist/channels/threema/prompt-adapter.js.map +1 -0
  180. package/dist/channels/threema/runtime.d.ts +5 -0
  181. package/dist/channels/threema/runtime.d.ts.map +1 -0
  182. package/dist/channels/threema/runtime.js +47 -0
  183. package/dist/channels/threema/runtime.js.map +1 -0
  184. package/dist/channels/threema/target.d.ts +15 -0
  185. package/dist/channels/threema/target.d.ts.map +1 -0
  186. package/dist/channels/threema/target.js +75 -0
  187. package/dist/channels/threema/target.js.map +1 -0
  188. package/dist/cli/channels-command.d.ts.map +1 -1
  189. package/dist/cli/channels-command.js +224 -28
  190. package/dist/cli/channels-command.js.map +1 -1
  191. package/dist/cli/help.d.ts.map +1 -1
  192. package/dist/cli/help.js +9 -2
  193. package/dist/cli/help.js.map +1 -1
  194. package/dist/cli/secret-command.d.ts.map +1 -1
  195. package/dist/cli/secret-command.js +3 -26
  196. package/dist/cli/secret-command.js.map +1 -1
  197. package/dist/cli.d.ts.map +1 -1
  198. package/dist/cli.js +5 -0
  199. package/dist/cli.js.map +1 -1
  200. package/dist/command-registry.d.ts.map +1 -1
  201. package/dist/command-registry.js +1 -1
  202. package/dist/command-registry.js.map +1 -1
  203. package/dist/commands/policy-command.d.ts.map +1 -1
  204. package/dist/commands/policy-command.js +67 -3
  205. package/dist/commands/policy-command.js.map +1 -1
  206. package/dist/config/config.d.ts +3 -0
  207. package/dist/config/config.d.ts.map +1 -1
  208. package/dist/config/config.js +6 -0
  209. package/dist/config/config.js.map +1 -1
  210. package/dist/config/runtime-config-revisions.d.ts +1 -1
  211. package/dist/config/runtime-config-revisions.d.ts.map +1 -1
  212. package/dist/config/runtime-config-revisions.js +2 -0
  213. package/dist/config/runtime-config-revisions.js.map +1 -1
  214. package/dist/config/runtime-config.d.ts +56 -3
  215. package/dist/config/runtime-config.d.ts.map +1 -1
  216. package/dist/config/runtime-config.js +515 -2
  217. package/dist/config/runtime-config.js.map +1 -1
  218. package/dist/doctor/checks/channels.d.ts.map +1 -1
  219. package/dist/doctor/checks/channels.js +13 -2
  220. package/dist/doctor/checks/channels.js.map +1 -1
  221. package/dist/evals/eval-command.d.ts +1 -0
  222. package/dist/evals/eval-command.d.ts.map +1 -1
  223. package/dist/evals/eval-command.js +179 -4
  224. package/dist/evals/eval-command.js.map +1 -1
  225. package/dist/evals/hybridai-skills-command.d.ts.map +1 -1
  226. package/dist/evals/hybridai-skills-command.js +1 -0
  227. package/dist/evals/hybridai-skills-command.js.map +1 -1
  228. package/dist/evals/judge-subscriber.d.ts +42 -0
  229. package/dist/evals/judge-subscriber.d.ts.map +1 -0
  230. package/dist/evals/judge-subscriber.js +206 -0
  231. package/dist/evals/judge-subscriber.js.map +1 -0
  232. package/dist/evals/terminal-bench-native.d.ts.map +1 -1
  233. package/dist/evals/terminal-bench-native.js +0 -1
  234. package/dist/evals/terminal-bench-native.js.map +1 -1
  235. package/dist/evals/trace-judge-eval-dataset.d.ts +12 -0
  236. package/dist/evals/trace-judge-eval-dataset.d.ts.map +1 -0
  237. package/dist/evals/trace-judge-eval-dataset.js +265 -0
  238. package/dist/evals/trace-judge-eval-dataset.js.map +1 -0
  239. package/dist/evals/trace-judge-native.d.ts +55 -0
  240. package/dist/evals/trace-judge-native.d.ts.map +1 -0
  241. package/dist/evals/trace-judge-native.js +447 -0
  242. package/dist/evals/trace-judge-native.js.map +1 -0
  243. package/dist/gateway/gateway-chat-service.d.ts.map +1 -1
  244. package/dist/gateway/gateway-chat-service.js +29 -7
  245. package/dist/gateway/gateway-chat-service.js.map +1 -1
  246. package/dist/gateway/gateway-http-proxy.d.ts.map +1 -1
  247. package/dist/gateway/gateway-http-proxy.js +9 -1
  248. package/dist/gateway/gateway-http-proxy.js.map +1 -1
  249. package/dist/gateway/gateway-http-server.d.ts.map +1 -1
  250. package/dist/gateway/gateway-http-server.js +204 -1
  251. package/dist/gateway/gateway-http-server.js.map +1 -1
  252. package/dist/gateway/gateway-secret-injection.d.ts.map +1 -1
  253. package/dist/gateway/gateway-secret-injection.js +5 -0
  254. package/dist/gateway/gateway-secret-injection.js.map +1 -1
  255. package/dist/gateway/gateway-service.d.ts +16 -1
  256. package/dist/gateway/gateway-service.d.ts.map +1 -1
  257. package/dist/gateway/gateway-service.js +242 -70
  258. package/dist/gateway/gateway-service.js.map +1 -1
  259. package/dist/gateway/gateway-session-status.d.ts.map +1 -1
  260. package/dist/gateway/gateway-session-status.js +16 -2
  261. package/dist/gateway/gateway-session-status.js.map +1 -1
  262. package/dist/gateway/gateway-types.d.ts +61 -0
  263. package/dist/gateway/gateway-types.d.ts.map +1 -1
  264. package/dist/gateway/gateway-types.js.map +1 -1
  265. package/dist/gateway/gateway-utils.d.ts.map +1 -1
  266. package/dist/gateway/gateway-utils.js +2 -6
  267. package/dist/gateway/gateway-utils.js.map +1 -1
  268. package/dist/gateway/gateway.js +95 -0
  269. package/dist/gateway/gateway.js.map +1 -1
  270. package/dist/gateway/openai-compatible.d.ts.map +1 -1
  271. package/dist/gateway/openai-compatible.js +0 -1
  272. package/dist/gateway/openai-compatible.js.map +1 -1
  273. package/dist/gateway/proactive-delivery.d.ts.map +1 -1
  274. package/dist/gateway/proactive-delivery.js +3 -0
  275. package/dist/gateway/proactive-delivery.js.map +1 -1
  276. package/dist/gateway/skill-commands.d.ts.map +1 -1
  277. package/dist/gateway/skill-commands.js +77 -56
  278. package/dist/gateway/skill-commands.js.map +1 -1
  279. package/dist/identity/agent-id.d.ts +1 -0
  280. package/dist/identity/agent-id.d.ts.map +1 -1
  281. package/dist/identity/agent-id.js +4 -2
  282. package/dist/identity/agent-id.js.map +1 -1
  283. package/dist/infra/behavior-anomaly-runtime.d.ts +4 -0
  284. package/dist/infra/behavior-anomaly-runtime.d.ts.map +1 -0
  285. package/dist/infra/behavior-anomaly-runtime.js +22 -0
  286. package/dist/infra/behavior-anomaly-runtime.js.map +1 -0
  287. package/dist/infra/container-runner.d.ts.map +1 -1
  288. package/dist/infra/container-runner.js +12 -0
  289. package/dist/infra/container-runner.js.map +1 -1
  290. package/dist/infra/host-runner.d.ts.map +1 -1
  291. package/dist/infra/host-runner.js +11 -0
  292. package/dist/infra/host-runner.js.map +1 -1
  293. package/dist/infra/ipc.d.ts.map +1 -1
  294. package/dist/infra/ipc.js +1 -0
  295. package/dist/infra/ipc.js.map +1 -1
  296. package/dist/memory/db.d.ts +10 -1
  297. package/dist/memory/db.d.ts.map +1 -1
  298. package/dist/memory/db.js +146 -14
  299. package/dist/memory/db.js.map +1 -1
  300. package/dist/policy/remote-policy-authority.d.ts +76 -0
  301. package/dist/policy/remote-policy-authority.d.ts.map +1 -0
  302. package/dist/policy/remote-policy-authority.js +789 -0
  303. package/dist/policy/remote-policy-authority.js.map +1 -0
  304. package/dist/providers/auxiliary.d.ts.map +1 -1
  305. package/dist/providers/auxiliary.js +7 -4
  306. package/dist/providers/auxiliary.js.map +1 -1
  307. package/dist/providers/provider-credentials.d.ts +3 -0
  308. package/dist/providers/provider-credentials.d.ts.map +1 -0
  309. package/dist/providers/provider-credentials.js +49 -0
  310. package/dist/providers/provider-credentials.js.map +1 -0
  311. package/dist/providers/request-max-tokens.d.ts.map +1 -1
  312. package/dist/providers/request-max-tokens.js +2 -4
  313. package/dist/providers/request-max-tokens.js.map +1 -1
  314. package/dist/providers/task-routing.d.ts.map +1 -1
  315. package/dist/providers/task-routing.js +2 -4
  316. package/dist/providers/task-routing.js.map +1 -1
  317. package/dist/scheduler/heartbeat.d.ts.map +1 -1
  318. package/dist/scheduler/heartbeat.js +2 -1
  319. package/dist/scheduler/heartbeat.js.map +1 -1
  320. package/dist/scheduler/scheduled-task-runner.d.ts.map +1 -1
  321. package/dist/scheduler/scheduled-task-runner.js +15 -0
  322. package/dist/scheduler/scheduled-task-runner.js.map +1 -1
  323. package/dist/security/media-paths.d.ts.map +1 -1
  324. package/dist/security/media-paths.js +22 -0
  325. package/dist/security/media-paths.js.map +1 -1
  326. package/dist/security/runtime-secrets.d.ts +1 -1
  327. package/dist/security/runtime-secrets.d.ts.map +1 -1
  328. package/dist/security/runtime-secrets.js +3 -0
  329. package/dist/security/runtime-secrets.js.map +1 -1
  330. package/dist/security/secret-refs.d.ts +6 -1
  331. package/dist/security/secret-refs.d.ts.map +1 -1
  332. package/dist/security/secret-refs.js +33 -5
  333. package/dist/security/secret-refs.js.map +1 -1
  334. package/dist/session/session-context.d.ts.map +1 -1
  335. package/dist/session/session-context.js +1 -0
  336. package/dist/session/session-context.js.map +1 -1
  337. package/dist/session/session-reset.d.ts.map +1 -1
  338. package/dist/session/session-reset.js +3 -0
  339. package/dist/session/session-reset.js.map +1 -1
  340. package/dist/skills/adaptive-skills-types.d.ts +3 -0
  341. package/dist/skills/adaptive-skills-types.d.ts.map +1 -1
  342. package/dist/skills/agent-cv.d.ts.map +1 -1
  343. package/dist/skills/agent-cv.js +5 -0
  344. package/dist/skills/agent-cv.js.map +1 -1
  345. package/dist/skills/agent-scoreboard.d.ts.map +1 -1
  346. package/dist/skills/agent-scoreboard.js +16 -4
  347. package/dist/skills/agent-scoreboard.js.map +1 -1
  348. package/dist/skills/skill-manifest.d.ts +15 -0
  349. package/dist/skills/skill-manifest.d.ts.map +1 -1
  350. package/dist/skills/skill-manifest.js +101 -8
  351. package/dist/skills/skill-manifest.js.map +1 -1
  352. package/dist/skills/skill-run-events.d.ts +8 -1
  353. package/dist/skills/skill-run-events.d.ts.map +1 -1
  354. package/dist/skills/skill-run-events.js +18 -10
  355. package/dist/skills/skill-run-events.js.map +1 -1
  356. package/dist/skills/skills-guard.d.ts.map +1 -1
  357. package/dist/skills/skills-guard.js +39 -21
  358. package/dist/skills/skills-guard.js.map +1 -1
  359. package/dist/skills/skills-lifecycle.d.ts.map +1 -1
  360. package/dist/skills/skills-lifecycle.js +10 -1
  361. package/dist/skills/skills-lifecycle.js.map +1 -1
  362. package/dist/skills/skills-management.d.ts +5 -1
  363. package/dist/skills/skills-management.d.ts.map +1 -1
  364. package/dist/skills/skills-management.js +11 -1
  365. package/dist/skills/skills-management.js.map +1 -1
  366. package/dist/skills/skills.d.ts +42 -3
  367. package/dist/skills/skills.d.ts.map +1 -1
  368. package/dist/skills/skills.js +144 -28
  369. package/dist/skills/skills.js.map +1 -1
  370. package/dist/tui-skill-config.d.ts +1 -1
  371. package/dist/tui-skill-config.d.ts.map +1 -1
  372. package/dist/tui.d.ts +1 -0
  373. package/dist/tui.d.ts.map +1 -1
  374. package/dist/tui.js +3 -3
  375. package/dist/tui.js.map +1 -1
  376. package/dist/types/container.d.ts +13 -0
  377. package/dist/types/container.d.ts.map +1 -1
  378. package/dist/types/execution.d.ts +15 -0
  379. package/dist/types/execution.d.ts.map +1 -1
  380. package/dist/types/execution.js.map +1 -1
  381. package/dist/usage/media-generation-usage.d.ts +11 -0
  382. package/dist/usage/media-generation-usage.d.ts.map +1 -0
  383. package/dist/usage/media-generation-usage.js +152 -0
  384. package/dist/usage/media-generation-usage.js.map +1 -0
  385. package/dist/usage/model-cost.d.ts +23 -0
  386. package/dist/usage/model-cost.d.ts.map +1 -0
  387. package/dist/usage/model-cost.js +64 -0
  388. package/dist/usage/model-cost.js.map +1 -0
  389. package/dist/utils/atomic-file.d.ts +6 -0
  390. package/dist/utils/atomic-file.d.ts.map +1 -0
  391. package/dist/utils/atomic-file.js +24 -0
  392. package/dist/utils/atomic-file.js.map +1 -0
  393. package/dist/utils/number-normalization.d.ts +7 -0
  394. package/dist/utils/number-normalization.d.ts.map +1 -0
  395. package/dist/utils/number-normalization.js +23 -0
  396. package/dist/utils/number-normalization.js.map +1 -0
  397. package/dist/workspace.js +2 -2
  398. package/docs/404.html +11 -10
  399. package/docs/about/index.html +3 -3
  400. package/docs/agents.html +12 -12
  401. package/docs/content/README.md +14 -6
  402. package/docs/content/channels/README.md +1 -0
  403. package/docs/content/channels/overview.md +1 -0
  404. package/docs/content/channels/threema.md +55 -0
  405. package/docs/content/developer-guide/approvals.md +3 -2
  406. package/docs/content/developer-guide/architecture.md +2 -1
  407. package/docs/content/getting-started/authentication.md +4 -0
  408. package/docs/content/getting-started/first-channel.md +2 -0
  409. package/docs/content/guides/bundled-skills.md +7 -4
  410. package/docs/content/guides/skills/README.md +3 -3
  411. package/docs/content/guides/skills/integrations.md +232 -1
  412. package/docs/content/guides/skills/publishing.md +57 -0
  413. package/docs/content/internal/approval-rule-pipeline.md +40 -16
  414. package/docs/content/internal/roadmap.md +173 -27
  415. package/docs/content/reference/commands.md +13 -7
  416. package/docs/content/reference/configuration.md +13 -1
  417. package/docs/content/reference/tools/web-search.md +1 -0
  418. package/docs/development/index.html +4 -4
  419. package/docs/docs/index.html +10 -9
  420. package/docs/index.html +19 -19
  421. package/docs/static/docs.js +29 -11
  422. package/package.json +17 -9
  423. package/skills/airtable/SKILL.md +325 -0
  424. package/skills/airtable/airtable.cjs +864 -0
  425. package/skills/airtable/evals/scenarios.json +91 -0
  426. package/skills/airtable/fixtures/schema.json +73 -0
  427. package/skills/airtable/index.cjs +1 -0
  428. package/skills/fastbill/SKILL.md +243 -0
  429. package/skills/fastbill/evals/scenarios.json +218 -0
  430. package/skills/fastbill/fastbill.cjs +1069 -0
  431. package/skills/fastbill/fixtures/einvoice-readiness.json +34 -0
  432. package/skills/fastbill/index.cjs +1 -0
  433. package/skills/fastbill/references/operator-setup.md +130 -0
  434. package/skills/firecrawl/SKILL.md +168 -0
  435. package/skills/firecrawl/firecrawl.cjs +503 -0
  436. package/skills/firecrawl/index.cjs +1 -0
  437. package/skills/google-ads/SKILL.md +400 -0
  438. package/skills/google-ads/evals/scenarios.json +462 -0
  439. package/skills/google-ads/references/setup-and-operations.md +191 -0
  440. package/skills/google-ads/scripts/google_ads.py +2189 -0
  441. package/skills/heygen/SKILL.md +239 -0
  442. package/skills/heygen/client.cjs +256 -0
  443. package/skills/heygen/eval.cjs +45 -0
  444. package/skills/heygen/heygen.cjs +595 -0
  445. package/skills/heygen/index.cjs +1 -0
  446. package/skills/heygen/lib/common.cjs +29 -0
  447. package/skills/image-generation/SKILL.md +35 -0
  448. package/skills/search.images/SKILL.md +34 -0
  449. package/skills/search.news/SKILL.md +35 -0
  450. package/skills/search.web/SKILL.md +34 -0
  451. package/skills/skill-creator/scripts/quick_validate.py +1 -0
  452. package/skills/video-generation/SKILL.md +34 -0
  453. package/console/dist/assets/chat-BLTK7IwH.css +0 -1
  454. package/console/dist/assets/cx-WK-JkhB9.js +0 -1
  455. package/console/dist/assets/index-BmK2dcpa.css +0 -1
  456. package/console/dist/assets/index-Cla9A2NT.js +0 -16
  457. package/docs/CNAME +0 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,78 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## [0.17.0](https://github.com/HybridAIOne/hybridclaw/tree/v0.17.0) - 2026-05-12
6
+
7
+ ### Added
8
+
9
+ - **Native media generation tools**: The container runtime now exposes
10
+ `image_generate` and `video_generate` with provider adapters, managed output
11
+ persistence, reference-media validation, usage metering, and bundled
12
+ `image-generation` / `video-generation` skills. Image generation supports GPT
13
+ Image, Gemini/Nano Banana, Grok, and FLUX families where configured; video
14
+ generation supports OpenAI Sora and Google Veo families where configured.
15
+ - **New business and research skills**: Bundled skills now cover Airtable base
16
+ and record work, FastBill invoicing, Firecrawl scrape/crawl/map/extract
17
+ workflows, HeyGen avatar video generation and translation, Google Ads
18
+ campaign operations, and SearXNG-backed `search.web`, `search.news`, and
19
+ `search.images` workflows.
20
+ - **Threema Gateway channel**: HybridClaw can send outbound Threema Basic-mode
21
+ text messages with setup docs, CLI configuration, doctor/status visibility,
22
+ prompt hints, target validation, and delivery tests.
23
+ - **Camofox browser provider**: Browser automation can use a Camofox-backed
24
+ provider with persistent profile support and the same provider factory path
25
+ as local Playwright and Browser Use Cloud.
26
+ - **A2A inbound and trust surfaces**: JSON-RPC Agent Card inbound delivery,
27
+ additional delegation envelope fields, a public-key trust ledger, and an
28
+ admin A2A trust route extend the federation substrate.
29
+ - **Remote policy authority**: Signed remote policy updates can flow over the
30
+ federation path with validation, audit records, and targeted tests.
31
+ - **Board card store**: The gateway now has a persisted card-store substrate
32
+ for future admin work-board and agent-team coordination surfaces.
33
+ - **Trace-judge and anomaly evaluation path**: Skill trace judging gained a
34
+ subscriber pattern, an offline eval gate, and a behavioral anomaly reranker
35
+ for tool-call sequences.
36
+
37
+ ### Changed
38
+
39
+ - **Admin console polish and performance**: Admin pages moved toward a shared
40
+ `Card` primitive, the Usage rollup gained skeleton and metric loading states,
41
+ live channel transport status is shown through toasts, the `/` command panel
42
+ was rebuilt for better keyboard/a11y behavior, and expensive all-session
43
+ scans/config fetches were removed from hot paths.
44
+ - **Vitest configuration is project-based**: Unit, integration, e2e, and live
45
+ test configuration now share one project-aware Vitest setup instead of
46
+ separate config files.
47
+ - **Browser credential handling is narrower**: Browser form fills now route
48
+ through SecretRef injection gates rather than exposing credential material to
49
+ the model or broad browser action context.
50
+ - **A2A delegation bearer auth**: Outbound A2A uses signed delegation JWTs as
51
+ the HTTP bearer credential. `bearerTokenRef` remains a required explicit
52
+ opt-in gate for non-loopback peer URLs, but its secret value is not sent on
53
+ the wire.
54
+ - **NPM supply-chain controls are stricter**: Workspace install and release
55
+ flows now enforce newer npm behavior, harden CI setup, and keep package-lock
56
+ metadata aligned with the release pipeline.
57
+
58
+ ### Fixed
59
+
60
+ - **A2A delegation revocation cleanup**: Expired delegation-token revocation
61
+ records are pruned when new revocations are written, preventing stale
62
+ short-lived token revocations from accumulating indefinitely.
63
+ - **Skill blocking is visible**: Blocked skills are surfaced instead of being
64
+ hidden behind silent resolution failures.
65
+ - **Media path display-prefix handling**: Host paths that merely share a
66
+ display prefix are no longer remapped as if they were inside the sandboxed
67
+ media root.
68
+ - **Context ring source accuracy**: The web chat context ring reads usage from
69
+ the correct source after session and UI routing changes.
70
+ - **Auxiliary model token limits**: Auxiliary provider calls honor configured
71
+ max-token limits.
72
+ - **Console IME composition safety**: Chat composer key handling ignores IME
73
+ composition events so slash/submit shortcuts do not interrupt text entry.
74
+ - **Release publish compatibility**: Release workflows invoke npm 11 on Node
75
+ 22 so npm package promotion uses the expected toolchain.
76
+
5
77
  ## [0.16.0](https://github.com/HybridAIOne/hybridclaw/tree/v0.16.0) - 2026-05-07
6
78
 
7
79
  ### Added
package/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
  [![npm](https://img.shields.io/npm/v/@hybridaione/hybridclaw)](https://www.npmjs.com/package/@hybridaione/hybridclaw)
6
6
  [![Node](https://img.shields.io/badge/node-22.x-5FA04E?logo=node.js&logoColor=white)](https://nodejs.org/en/download)
7
7
  [![License](https://img.shields.io/github/license/HybridAIOne/hybridclaw)](https://github.com/HybridAIOne/hybridclaw/blob/main/LICENSE)
8
- [![Docs](https://img.shields.io/badge/docs-hybridclaw.io-blue)](https://www.hybridclaw.io/docs/)
8
+ [![Docs](https://img.shields.io/badge/docs-GitHub%20Pages-blue)](https://hybridaione.github.io/hybridclaw/docs/)
9
9
  [![Powered by HybridAI](https://img.shields.io/badge/powered%20by-HybridAI-blueviolet)](https://hybridai.one)
10
10
  [![Discord](https://img.shields.io/badge/Discord-join%20chat-5865F2?logo=discord&logoColor=white)](https://discord.gg/jsVW4vJw27)
11
11
 
@@ -23,22 +23,22 @@ Connect it to Discord, Slack, Signal, WhatsApp, Telegram, Microsoft Teams,
23
23
  email, Twilio voice, or the web. Run it locally, deploy it for business
24
24
  workflows, and keep your agents, secrets, and data under your control.
25
25
 
26
- [Quick Start](https://www.hybridclaw.io/docs/getting-started/quickstart) ·
27
- [Installation](https://www.hybridclaw.io/docs/getting-started/installation) ·
28
- [Configuration](https://www.hybridclaw.io/docs/reference/configuration) ·
29
- [Migration](https://www.hybridclaw.io/docs/reference/commands#migration) ·
26
+ [Quick Start](https://hybridaione.github.io/hybridclaw/docs/getting-started/quickstart) ·
27
+ [Installation](https://hybridaione.github.io/hybridclaw/docs/getting-started/installation) ·
28
+ [Configuration](https://hybridaione.github.io/hybridclaw/docs/reference/configuration) ·
29
+ [Migration](https://hybridaione.github.io/hybridclaw/docs/reference/commands#migration) ·
30
30
  [Contributing](./CONTRIBUTING.md) ·
31
31
  [Support](./SUPPORT.md)
32
32
 
33
33
  ## Pick your path
34
34
 
35
35
  - Want the shortest path to a running assistant? Start with
36
- [Quick Start](https://www.hybridclaw.io/docs/getting-started/quickstart).
36
+ [Quick Start](https://hybridaione.github.io/hybridclaw/docs/getting-started/quickstart).
37
37
  - Want the full setup flow with providers, channels, and admin surfaces? Start
38
- with [Installation](https://www.hybridclaw.io/docs/getting-started/installation)
39
- and [Authentication](https://www.hybridclaw.io/docs/getting-started/authentication).
38
+ with [Installation](https://hybridaione.github.io/hybridclaw/docs/getting-started/installation)
39
+ and [Authentication](https://hybridaione.github.io/hybridclaw/docs/getting-started/authentication).
40
40
  - Want to migrate from OpenClaw or Hermes? Start with the
41
- [migration commands](https://www.hybridclaw.io/docs/reference/commands#migration).
41
+ [migration commands](https://hybridaione.github.io/hybridclaw/docs/reference/commands#migration).
42
42
  - Want to contribute from source? Start with [CONTRIBUTING.md](./CONTRIBUTING.md)
43
43
  and the maintainer docs under [docs/content/README.md](./docs/content/README.md).
44
44
 
@@ -98,7 +98,7 @@ listening on `http://127.0.0.1:9090`.
98
98
 
99
99
  Release notes live in [CHANGELOG.md](./CHANGELOG.md), and the browsable
100
100
  operator and maintainer manual lives at
101
- [hybridclaw.io/docs](https://www.hybridclaw.io/docs/).
101
+ [hybridaione.github.io/hybridclaw/docs](https://hybridaione.github.io/hybridclaw/docs/).
102
102
 
103
103
  ## See it in Action
104
104
 
@@ -137,6 +137,8 @@ Once the gateway is running, open HybridClaw locally:
137
137
  browser.
138
138
  - `/admin/statistics` reports message, session, token, cost, and channel trends
139
139
  across a selected date range.
140
+ - The Usage rollup surfaces loading skeletons, cost metrics, and per-model
141
+ spend summaries without scanning every stored session on page load.
140
142
  - `/admin/agent-scoreboard` ranks agents by observed skill scores, reliability,
141
143
  timing, best skills, and CV links.
142
144
  - `hybridclaw agent config` accepts generated JSON payloads to upsert agent
@@ -148,6 +150,8 @@ Once the gateway is running, open HybridClaw locally:
148
150
  - `/admin/approvals` manages approval policies from the browser.
149
151
  - Approval policy evaluation runs through a hook-fed rule pipeline, so
150
152
  workspace policy ordering and plugin tool-use hooks share one approval path.
153
+ - `/admin/a2a-trust` shows the local A2A public-key trust ledger for paired
154
+ peer instances.
151
155
  - `/admin/gateway` reloads runtime config and refreshes secrets from the
152
156
  browser, and shows public URL plus tunnel status, without tearing down the
153
157
  enclosing workspace container; keep `hybridclaw gateway restart` for
@@ -182,8 +186,8 @@ Once the gateway is running, open HybridClaw locally:
182
186
  the active run and returns control to the prompt.
183
187
  - `hybridclaw doctor` checks runtime health including resource hygiene
184
188
  maintenance for stale gateway artifacts. `hybridclaw doctor browser-use`
185
- checks the local browser automation substrate and can install missing
186
- Playwright Chromium support with `--fix`.
189
+ checks the local Playwright browser automation substrate and can install
190
+ missing Chromium support with `--fix`.
187
191
  - `hybridclaw onboarding` and related local setup flows can restore the last
188
192
  known-good saved config snapshot or roll back to a tracked revision when
189
193
  `config.json` becomes invalid.
@@ -220,6 +224,9 @@ Once the gateway is running, open HybridClaw locally:
220
224
  - Brave, Perplexity, and Tavily web-search credentials can live in the
221
225
  encrypted runtime secret store and are passed into host or container agent
222
226
  runtimes from the active config.
227
+ - Web search can also target a self-hosted SearXNG instance through
228
+ `web.search.searxngBaseUrl` or `SEARXNG_BASE_URL`; bundled `search.web`,
229
+ `search.news`, and `search.images` skills prefer that sovereign search path.
223
230
  - Google OAuth credentials for Workspace skills live in the encrypted runtime
224
231
  secret store; agent runtimes receive short-lived access tokens for `gog` and
225
232
  `gws` instead of long-lived refresh tokens.
@@ -237,12 +244,17 @@ Once the gateway is running, open HybridClaw locally:
237
244
  credentials, supported channels, and per-agent autonomy policy.
238
245
  - Bundled skills include API-backed Google Workspace workflows (`gog`, `gws`),
239
246
  Salesforce inspection, GitHub issue queue processing (`gh-issues`),
240
- monthly SaaS invoice harvesting (`download-platform-invoices`),
241
- natural-language warehouse SQL (`warehouse-sql`), brand-voice drafting, and
242
- editable Excalidraw diagram creation.
243
- - Browser automation can use local persistent Playwright profiles or Browser
244
- Use Cloud sessions with encrypted `BROWSER_USE_API_KEY` storage, usage
245
- metering, and shared navigation guards.
247
+ monthly SaaS invoice harvesting (`download-platform-invoices`), Airtable,
248
+ FastBill, Firecrawl, Google Ads, HeyGen, natural-language warehouse SQL
249
+ (`warehouse-sql`), brand-voice drafting, and editable Excalidraw diagram
250
+ creation.
251
+ - Native media tools generate images and videos through configured providers,
252
+ persist the resulting artifacts, and expose the same capability through the
253
+ bundled `image-generation` and `video-generation` skills.
254
+ - Browser automation can use local persistent Playwright profiles, Camofox
255
+ profiles, or Browser Use Cloud sessions with encrypted `BROWSER_USE_API_KEY`
256
+ storage, usage metering, shared navigation guards, and SecretRef-gated
257
+ credential fills.
246
258
  - The repo-shipped `brand-voice` plugin can flag, rewrite, or block final
247
259
  responses that violate configured voice rules before they reach users.
248
260
  - Built-in office skills handle longer PDF creation flows cleanly: the bundled
@@ -305,66 +317,67 @@ Once the gateway is running, open HybridClaw locally:
305
317
 
306
318
  ## Architecture
307
319
 
308
- - **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, and channel integrations for Discord, Slack, Signal, Microsoft Teams, Telegram, iMessage, WhatsApp, Twilio voice, and email
320
+ - **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
309
321
  - **TUI client** — thin client over HTTP (`/api/chat`, `/api/command`) with
310
322
  a structured startup banner that surfaces model, sandbox, gateway, and
311
323
  chatbot context before the first prompt, live delegate status/progress,
312
324
  an interactive approval picker for pending approvals, and an exit summary
313
325
  with a ready-to-run resume command
314
- - **Container** (Docker, ephemeral) — HybridAI API client, sandboxed tool executor, and preinstalled browser automation runtime with cursor-aware snapshots for JS-heavy custom UI
326
+ - **Container** (Docker, ephemeral) — HybridAI API client, sandboxed tool executor, native media-generation tools, web/search adapters, and preinstalled browser automation runtime with cursor-aware snapshots for JS-heavy custom UI
315
327
  - Communication via file-based IPC (input.json / output.json)
316
328
 
317
329
  ## Documentation
318
330
 
319
331
  Browse the full manual at
320
- [hybridclaw.io/docs](https://www.hybridclaw.io/docs/).
332
+ [hybridaione.github.io/hybridclaw/docs](https://hybridaione.github.io/hybridclaw/docs/).
321
333
 
322
334
  - Getting started:
323
- [Installation](https://www.hybridclaw.io/docs/getting-started/installation),
324
- [Authentication](https://www.hybridclaw.io/docs/getting-started/authentication), and
325
- [Quick Start](https://www.hybridclaw.io/docs/getting-started/quickstart)
335
+ [Installation](https://hybridaione.github.io/hybridclaw/docs/getting-started/installation),
336
+ [Authentication](https://hybridaione.github.io/hybridclaw/docs/getting-started/authentication), and
337
+ [Quick Start](https://hybridaione.github.io/hybridclaw/docs/getting-started/quickstart)
326
338
  - Enterprise deployment:
327
- [Runtime Internals](https://www.hybridclaw.io/docs/developer-guide/runtime) and
328
- [Architecture](https://www.hybridclaw.io/docs/developer-guide/architecture)
339
+ [Runtime Internals](https://hybridaione.github.io/hybridclaw/docs/developer-guide/runtime) and
340
+ [Architecture](https://hybridaione.github.io/hybridclaw/docs/developer-guide/architecture)
329
341
  - Operations:
330
- [Remote Access](https://www.hybridclaw.io/docs/guides/remote-access)
342
+ [Remote Access](https://hybridaione.github.io/hybridclaw/docs/guides/remote-access)
331
343
  - Security:
332
344
  [SECURITY.md](./SECURITY.md) and [TRUST_MODEL.md](./TRUST_MODEL.md)
333
345
  - Migration:
334
- [Commands: Migration](https://www.hybridclaw.io/docs/reference/commands#migration) and
335
- [FAQ](https://www.hybridclaw.io/docs/reference/faq#can-i-migrate-an-existing-openclaw-or-hermes-agent-home)
346
+ [Commands: Migration](https://hybridaione.github.io/hybridclaw/docs/reference/commands#migration) and
347
+ [FAQ](https://hybridaione.github.io/hybridclaw/docs/reference/faq#can-i-migrate-an-existing-openclaw-or-hermes-agent-home)
336
348
  - Channels:
337
- [Connect Your First Channel](https://www.hybridclaw.io/docs/getting-started/first-channel),
338
- [Overview](https://www.hybridclaw.io/docs/channels/overview),
339
- [Twilio Voice](https://www.hybridclaw.io/docs/guides/twilio-voice),
340
- [Discord](https://www.hybridclaw.io/docs/channels/discord),
341
- [Slack](https://www.hybridclaw.io/docs/channels/slack),
342
- [Telegram](https://www.hybridclaw.io/docs/channels/telegram),
343
- [Signal](https://www.hybridclaw.io/docs/channels/signal),
344
- [Email](https://www.hybridclaw.io/docs/channels/email),
345
- [WhatsApp](https://www.hybridclaw.io/docs/channels/whatsapp),
346
- [iMessage](https://www.hybridclaw.io/docs/channels/imessage), and
347
- [Microsoft Teams](https://www.hybridclaw.io/docs/channels/msteams)
349
+ [Connect Your First Channel](https://hybridaione.github.io/hybridclaw/docs/getting-started/first-channel),
350
+ [Overview](https://hybridaione.github.io/hybridclaw/docs/channels/overview),
351
+ [Twilio Voice](https://hybridaione.github.io/hybridclaw/docs/guides/twilio-voice),
352
+ [Discord](https://hybridaione.github.io/hybridclaw/docs/channels/discord),
353
+ [Slack](https://hybridaione.github.io/hybridclaw/docs/channels/slack),
354
+ [Telegram](https://hybridaione.github.io/hybridclaw/docs/channels/telegram),
355
+ [Signal](https://hybridaione.github.io/hybridclaw/docs/channels/signal),
356
+ [Threema](https://hybridaione.github.io/hybridclaw/docs/channels/threema),
357
+ [Email](https://hybridaione.github.io/hybridclaw/docs/channels/email),
358
+ [WhatsApp](https://hybridaione.github.io/hybridclaw/docs/channels/whatsapp),
359
+ [iMessage](https://hybridaione.github.io/hybridclaw/docs/channels/imessage), and
360
+ [Microsoft Teams](https://hybridaione.github.io/hybridclaw/docs/channels/msteams)
348
361
  - Tutorials:
349
- [Practical Workflows](https://www.hybridclaw.io/docs/tutorials) for owner,
362
+ [Practical Workflows](https://hybridaione.github.io/hybridclaw/docs/tutorials) for owner,
350
363
  GTM, marketing, sales, DevRel, content, invoicing, webinar, and release
351
364
  launch workflows
352
365
  - Skills and plugins:
353
- [Extensibility](https://www.hybridclaw.io/docs/extensibility),
354
- [Bundled Skills](https://www.hybridclaw.io/docs/guides/bundled-skills),
355
- [Plugin System](https://www.hybridclaw.io/docs/extensibility/plugins),
356
- [Memory Plugins](https://www.hybridclaw.io/docs/extensibility/memory-plugins),
357
- [ByteRover Memory Plugin](https://www.hybridclaw.io/docs/extensibility/byterover-memory-plugin),
358
- [GBrain Plugin](https://www.hybridclaw.io/docs/extensibility/gbrain-plugin),
359
- [Mem0 Memory Plugin](https://www.hybridclaw.io/docs/extensibility/mem0-memory-plugin),
360
- [Honcho Memory Plugin](https://www.hybridclaw.io/docs/extensibility/honcho-memory-plugin), and
361
- [MemPalace Memory Plugin](https://www.hybridclaw.io/docs/extensibility/mempalace-memory-plugin)
366
+ [Extensibility](https://hybridaione.github.io/hybridclaw/docs/extensibility),
367
+ [Bundled Skills](https://hybridaione.github.io/hybridclaw/docs/guides/bundled-skills),
368
+ [Plugin System](https://hybridaione.github.io/hybridclaw/docs/extensibility/plugins),
369
+ [Memory Plugins](https://hybridaione.github.io/hybridclaw/docs/extensibility/memory-plugins),
370
+ [ByteRover Memory Plugin](https://hybridaione.github.io/hybridclaw/docs/extensibility/byterover-memory-plugin),
371
+ [GBrain Plugin](https://hybridaione.github.io/hybridclaw/docs/extensibility/gbrain-plugin),
372
+ [Mem0 Memory Plugin](https://hybridaione.github.io/hybridclaw/docs/extensibility/mem0-memory-plugin),
373
+ [Honcho Memory Plugin](https://hybridaione.github.io/hybridclaw/docs/extensibility/honcho-memory-plugin), and
374
+ [MemPalace Memory Plugin](https://hybridaione.github.io/hybridclaw/docs/extensibility/mempalace-memory-plugin)
362
375
  - Configuration:
363
- [Configuration Reference](https://www.hybridclaw.io/docs/reference/configuration)
376
+ [Configuration Reference](https://hybridaione.github.io/hybridclaw/docs/reference/configuration)
364
377
  - CLI reference:
365
- [Commands](https://www.hybridclaw.io/docs/reference/commands),
366
- [Diagnostics](https://www.hybridclaw.io/docs/reference/diagnostics), and
367
- [FAQ](https://www.hybridclaw.io/docs/reference/faq)
378
+ [Commands](https://hybridaione.github.io/hybridclaw/docs/reference/commands),
379
+ [Diagnostics](https://hybridaione.github.io/hybridclaw/docs/reference/diagnostics), and
380
+ [FAQ](https://hybridaione.github.io/hybridclaw/docs/reference/faq)
368
381
 
369
382
  ## Contributing
370
383
 
package/SECURITY.md CHANGED
@@ -148,6 +148,56 @@ Verification command:
148
148
  hybridclaw audit verify <sessionId>
149
149
  ```
150
150
 
151
+ ### 6) npm Supply-Chain Controls
152
+
153
+ HybridClaw treats npm lockfiles and package-manager configuration as security
154
+ controls:
155
+
156
+ - `.npmrc` enforces exact saves, strict engines, and a seven-day minimum release
157
+ age.
158
+ - `package.json` requires npm 11.10+ because older npm versions do not enforce
159
+ the release-age policy.
160
+ - CI upgrades to the pinned npm version before running `npm ci`, so pull
161
+ requests and release publishes use the same install policy as local
162
+ development.
163
+ - Docker builds install the pinned npm version before npm install steps. The
164
+ gateway image copies the repository `.npmrc` before `npm ci`; the agent image
165
+ materializes the same safe npm config inside its isolated Docker context.
166
+ - CI runs `npm audit signatures` after installs to verify npm registry
167
+ signatures and available provenance attestations for installed packages.
168
+ - Release publishing uses npm provenance through the trusted-publishing-capable
169
+ npm CLI. The npm package should be configured on npmjs.com to use trusted
170
+ publishing and to disallow token-based publishes after the OIDC workflow is
171
+ verified.
172
+
173
+ Dependency updates should use `npm ci` for verification and keep
174
+ `package-lock.json` changes reviewable. Avoid unconstrained interactive or
175
+ ad-hoc `npm update` runs; use the lockfile-only update script below so npm's
176
+ configured release-age gate applies and the resulting diff can be reviewed. Do
177
+ not add git, tarball, or non-registry dependencies without a specific security
178
+ review. The current WhatsApp channel dependency chain includes a pinned GitHub
179
+ dependency from `@whiskeysockets/baileys` to `libsignal`; replacing that
180
+ dependency with a registry-only package should be prioritized before enabling
181
+ npm's `allow-git` restriction.
182
+
183
+ Recommended dependency update workflow:
184
+
185
+ ```bash
186
+ npm install --global npm@11.10.0 --no-audit --fund=false
187
+ npm run deps:update-lockfile
188
+ git diff -- package.json package-lock.json container/package.json container/package-lock.json
189
+ npm run deps:verify
190
+ npm run typecheck
191
+ npm run test:unit
192
+ ```
193
+
194
+ `deps:update-lockfile` regenerates the root/workspace lockfile and the standalone
195
+ container lockfile through npm's configured seven-day release-age filter.
196
+ `deps:verify` then performs clean installs from those lockfiles and verifies npm
197
+ registry signatures. Review lockfile diffs before merging; unexpected new
198
+ maintainers, new install scripts, git/tarball URLs, or large transitive churn
199
+ should be treated as security review triggers.
200
+
151
201
  ## Incident Response
152
202
 
153
203
  If compromise is suspected:
@@ -157,6 +207,8 @@ If compromise is suspected:
157
207
  3. Review mount allowlist, workspace files, and `sessionRouting.identityLinks`.
158
208
  4. Inspect denied/authorization events with `hybridclaw audit approvals --denied`.
159
209
  5. Validate audit integrity with `hybridclaw audit verify`.
210
+ 6. If compromise may involve npm install-time malware, rotate npm, GitHub, SSH,
211
+ cloud, and registry credentials reachable from the affected host or runner.
160
212
 
161
213
  ## Reporting A Vulnerability
162
214
 
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": 26,
2
+ "version": 28,
3
3
  "security": {
4
4
  "trustModelAccepted": false,
5
5
  "trustModelAcceptedAt": "",
@@ -15,6 +15,27 @@
15
15
  "health_check_interval_ms": 30000
16
16
  }
17
17
  },
18
+ "browser": {
19
+ "provider": "local",
20
+ "local": {
21
+ "profileRoot": "",
22
+ "headed": false
23
+ },
24
+ "camofox": {
25
+ "profileRoot": "",
26
+ "headed": false,
27
+ "launchOptions": {}
28
+ },
29
+ "browserUseCloud": {
30
+ "apiKeyRef": {
31
+ "source": "env",
32
+ "id": "BROWSER_USE_API_KEY"
33
+ },
34
+ "baseUrl": "",
35
+ "browser": {},
36
+ "pricing": {}
37
+ }
38
+ },
18
39
  "skills": {
19
40
  "extraDirs": [],
20
41
  "disabled": [],
@@ -24,6 +45,7 @@
24
45
  "signal": [],
25
46
  "slack": [],
26
47
  "telegram": [],
48
+ "threema": [],
27
49
  "voice": [],
28
50
  "whatsapp": [],
29
51
  "email": []
@@ -39,6 +61,7 @@
39
61
  "signal": "",
40
62
  "slack": "",
41
63
  "telegram": "",
64
+ "threema": "",
42
65
  "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.",
43
66
  "whatsapp": "",
44
67
  "email": "",
@@ -185,6 +208,16 @@
185
208
  "reconnectIntervalMs": 5000,
186
209
  "outboundDelayMs": 350
187
210
  },
211
+ "threema": {
212
+ "enabled": false,
213
+ "apiBaseUrl": "https://msgapi.threema.ch",
214
+ "identity": "",
215
+ "secret": "",
216
+ "dmPolicy": "allowlist",
217
+ "allowFrom": [],
218
+ "textChunkLimit": 3500,
219
+ "outboundDelayMs": 350
220
+ },
188
221
  "whatsapp": {
189
222
  "dmPolicy": "pairing",
190
223
  "groupPolicy": "disabled",
@@ -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_bioch_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_bioch_1>div{height:100%;min-height:0}.layout:has(._chatPage_bioch_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_bioch_36{justify-content:space-between;align-items:center;gap:8px;padding:0 4px;display:flex}._chatSidebarContent_bioch_44{flex-direction:column;gap:8px;padding:0 4px;display:flex;overflow:hidden}._newChatButton_bioch_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_bioch_52:hover{background:var(--chat-hover-bg)}._newChatButton_bioch_52>span:first-child{justify-content:center;width:20px;font-size:1.25rem;line-height:1;display:inline-flex}._sidebarLabel_bioch_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_bioch_92{justify-content:space-between;align-items:center;gap:8px;display:flex}._sidebarScopeToggle_bioch_99{border:1px solid var(--line-strong);border-radius:var(--radius-sm);background:var(--muted);align-items:center;padding:2px;display:inline-flex}._sidebarScopeButton_bioch_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_bioch_108:hover{color:var(--text)}._sidebarScopeButtonActive_bioch_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_bioch_130:hover{color:var(--primary-foreground)}._sessionList_bioch_143{flex-direction:column;gap:2px;margin:0;padding:0;list-style:none;display:flex}._sessionItem_bioch_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;padding:8px 10px;transition:background .12s;display:flex;overflow:hidden}._sessionItem_bioch_152:hover{background:var(--chat-hover-bg)}._sessionItemPending_bioch_174{animation:1s ease-in-out infinite _sessionPulse_bioch_1}@keyframes _sessionPulse_bioch_1{0%,to{opacity:1}50%{opacity:.5}}._sessionTitle_bioch_188{color:var(--text);white-space:nowrap;text-overflow:ellipsis;font-size:.875rem;font-weight:500;overflow:hidden}._sessionTime_bioch_197{color:var(--muted-foreground);font-size:.72rem}._sessionSnippet_bioch_202{color:var(--muted-foreground);white-space:nowrap;text-overflow:ellipsis;font-size:.76rem;overflow:hidden}._sessionItemActive_bioch_210 ._sessionTitle_bioch_188,._sessionItemActive_bioch_210 ._sessionSnippet_bioch_202{color:var(--primary)}._sidebarSearchWrap_bioch_215{padding:10px 0 4px}._sidebarSearch_bioch_215{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_bioch_215::placeholder{color:var(--muted-foreground)}._sidebarSearch_bioch_215:focus{outline:2px solid var(--accent-soft);outline-offset:1px;border-color:var(--ring)}._sidebarStatus_bioch_239{color:var(--muted-foreground);padding:6px 10px;font-size:.82rem}aside[data-state=collapsed] ._newChatButton_bioch_52{justify-content:center;gap:0;padding:10px 8px}aside[data-state=collapsed] ._newChatButton_bioch_52>span:not(:first-child),aside[data-state=collapsed] ._sidebarSearchWrap_bioch_215,aside[data-state=collapsed] ._chatSidebarContent_bioch_44{display:none}._chatMobileTrigger_bioch_258{margin-right:auto;display:inline-flex}._chatTopbar_bioch_263{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_bioch_277{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_bioch_277:hover{color:var(--primary);border-color:color-mix(in srgb, var(--primary) 42%, var(--line))}._mobileQrButton_bioch_277:disabled{opacity:.55;cursor:wait}._mobileQrIcon_bioch_301{grid-template-rows:repeat(2,7px);grid-template-columns:repeat(2,7px);gap:3px;display:grid}._mobileQrIcon_bioch_301 span{border:2px solid;border-radius:2px}._mobileQrOverlay_bioch_313{z-index:80;background:#02061773;justify-content:center;align-items:center;padding:18px;display:flex;position:fixed;inset:0}._mobileQrDialog_bioch_324{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_bioch_333{justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;display:flex}._mobileQrHeader_bioch_333 h2{margin:0;font-size:1rem;font-weight:650}._mobileQrClose_bioch_347{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_bioch_360{border:1px solid var(--line);border-radius:var(--radius-sm);background:#fff;justify-content:center;padding:12px;display:flex}._mobileQrImage_bioch_360 img{width:min(260px,100%);height:auto}._mobileQrLink_bioch_374{color:var(--primary);text-align:center;word-break:break-word;margin-top:12px;font-size:.86rem;display:block}._chatMain_bioch_383{background:var(--page-bg);flex-direction:column;flex:auto;min-width:0;height:100%;min-height:0;display:flex;position:relative;overflow:hidden}._messageArea_bioch_395{scroll-behavior:smooth;flex:auto;min-width:0;min-height:0;padding:16px 24px 12px;overflow:hidden auto}._messageList_bioch_405{flex-direction:column;gap:12px;width:100%;min-width:0;max-width:100%;display:flex}._sidebarCollapseButton_bioch_414{align-self:center}._emptyState_bioch_418{flex-direction:column;flex:auto;justify-content:center;align-items:center;min-height:0;padding:48px 24px;display:flex}._greeting_bioch_428{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_bioch_437{flex-direction:column;gap:6px;width:100%;min-width:0;max-width:100%;display:flex}._messageBlockUser_bioch_446{align-items:flex-end}._messageBlockAssistant_bioch_450,._messageBlockSystem_bioch_451{align-items:flex-start}._agentLabel_bioch_455{color:var(--muted-foreground);align-items:center;gap:8px;padding:0 4px;font-size:.82rem;font-weight:600;display:flex}._agentAvatar_bioch_465{object-fit:cover;border-radius:999px;width:32px;height:32px}._agentInitial_bioch_472{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_bioch_485{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_bioch_496{background:linear-gradient(135deg, var(--primary), var(--ring));color:var(--primary-foreground);border-bottom-right-radius:4px}._bubbleAssistant_bioch_502{background:var(--card);color:var(--card-foreground);border:1px solid var(--line);box-shadow:var(--shadow-card);border-bottom-left-radius:4px}._bubbleSystem_bioch_510{background:var(--accent-soft);color:var(--accent-foreground);text-align:center;align-self:center;max-width:90%;font-size:.84rem}._markdownContent_bioch_519{overflow-wrap:anywhere;min-width:0;max-width:100%;line-height:1.6}._markdownContent_bioch_519 h1,._markdownContent_bioch_519 h2,._markdownContent_bioch_519 h3{color:var(--foreground);letter-spacing:-.02em;margin:.6em 0 .3em;font-weight:600}._markdownContent_bioch_519 h1{font-size:1.25rem}._markdownContent_bioch_519 h2{font-size:1.12rem}._markdownContent_bioch_519 h3{font-size:1rem}._markdownContent_bioch_519 p{margin:.4em 0}._markdownContent_bioch_519 ul,._markdownContent_bioch_519 ol{margin:.4em 0;padding-left:20px}._markdownContent_bioch_519 li{margin:2px 0}._markdownContent_bioch_519 blockquote{border-left:3px solid var(--line-strong);color:var(--muted-foreground);margin:.5em 0;padding:4px 12px}._markdownContent_bioch_519 code{background:var(--muted);color:var(--foreground);border-radius:4px;padding:2px 5px;font-size:.86em}._markdownContent_bioch_519 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_bioch_519 pre code{color:inherit;font-size:inherit;background:0 0;border-radius:0;padding:0}._markdownContent_bioch_519 hr{border:none;border-top:1px solid var(--line);margin:.8em 0}._markdownContent_bioch_519 a{color:var(--primary);text-decoration:none}._markdownContent_bioch_519 a:hover{text-decoration:underline}._markdownContent_bioch_519 table{border-collapse:collapse;width:100%;margin:.5em 0;font-size:.86rem}._markdownContent_bioch_519 th,._markdownContent_bioch_519 td{border:1px solid var(--line);text-align:left;padding:6px 10px}._markdownContent_bioch_519 th{background:var(--muted);font-weight:600}._markdownContent_bioch_519 tbody tr:nth-child(2n){background:var(--muted)}._messageActions_bioch_633{gap:4px;padding:0 4px;display:flex}._messageActions_bioch_633 ._actionButton_bioch_639{width:24px;height:24px;min-height:unset;color:var(--muted-foreground);background:0 0;border-color:#0000;border-radius:999px;font-size:.82rem}._messageActions_bioch_633 ._actionButton_bioch_639:hover:not(:disabled):not([data-disabled]){background:var(--chat-hover-bg);color:var(--foreground)}._actionButtonSuccess_bioch_655{color:var(--success)}._branchSwitcher_bioch_659{color:var(--muted-foreground);align-items:center;gap:4px;padding:0 4px;font-size:.75rem;display:inline-flex}._branchButton_bioch_668{width:22px;height:22px;min-height:unset;border-radius:999px;font-size:.8rem}._branchButton_bioch_668:hover:not(:disabled):not([data-disabled]){background:var(--chat-hover-bg);color:var(--text)}._branchButton_bioch_668:disabled{opacity:.4;cursor:default}._approvalActions_bioch_686{flex-wrap:wrap;gap:6px;margin-top:8px;display:flex}._approvalAllow_bioch_693{border-color:var(--success-border);background:var(--success-soft);color:var(--success)}._artifactCard_bioch_699{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_bioch_713{align-items:stretch;width:min(720px,100%)}._artifactHeader_bioch_718{align-items:center;gap:10px;min-width:0;display:flex}._artifactFilename_bioch_725{color:var(--text);white-space:nowrap;text-overflow:ellipsis;min-width:0;font-size:.84rem;font-weight:500;overflow:hidden}._artifactBadge_bioch_735{background:var(--accent-soft);color:var(--accent-foreground);border-radius:4px;flex-shrink:0;padding:2px 6px;font-size:.7rem;font-weight:500}._artifactDownload_bioch_745{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_bioch_745:hover{text-decoration:underline}._artifactDownload_bioch_745:disabled{opacity:.6;cursor:default;text-decoration:none}._artifactPreview_bioch_767{border-radius:var(--radius-sm);max-width:100%;overflow:hidden}._artifactPreview_bioch_767 img{border-radius:var(--radius-sm);max-width:100%;display:block}._artifactPdfPreview_bioch_779{border:1px solid var(--line);background:#fff;width:100%;height:min(60vh,560px);min-height:360px}._artifactPdfPreview_bioch_779 iframe{background:#fff;border:0;width:100%;height:100%;display:block}._thinking_bioch_795{align-items:center;gap:4px;padding:10px 14px;display:flex}._thinkingDot_bioch_802{background:var(--muted-foreground);border-radius:999px;width:7px;height:7px;animation:1.2s ease-in-out infinite _thinkingBounce_bioch_1}._thinkingDot_bioch_802:nth-child(2){animation-delay:.15s}._thinkingDot_bioch_802:nth-child(3){animation-delay:.3s}@keyframes _thinkingBounce_bioch_1{0%,80%,to{opacity:.4;transform:scale(.6)}40%{opacity:1;transform:scale(1)}}._composerWrapper_bioch_831{flex-shrink:0;min-width:0;max-width:100%;margin-top:auto;padding:0 24px 20px;overflow:hidden}._composer_bioch_831{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_bioch_855{flex-wrap:wrap;gap:6px;padding:10px 14px 0;display:flex}._mediaChip_bioch_862{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_bioch_874{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}._mediaChipRemove_bioch_880{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_bioch_880:hover{color:var(--danger)}._composerRow_bioch_899{align-items:flex-end;gap:8px;padding:10px 14px;display:flex}._composerActions_bioch_906{justify-content:space-between;align-items:center;gap:8px;display:flex}._composerLeftActions_bioch_913{align-items:center;gap:12px;min-width:0;display:flex}._composerInput_bioch_920{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_bioch_920:not(:placeholder-shown){padding:6px 0;line-height:1.5}._composerInput_bioch_920::placeholder{color:var(--muted-foreground)}._attachButton_bioch_943,._sendButton_bioch_944{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_bioch_943:focus-visible,._sendButton_bioch_944:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 55%, transparent);outline-offset:2px}._attachButton_bioch_943{color:var(--muted-foreground);background:0 0;font-size:1.2rem}._attachButton_bioch_943:hover{background:var(--chat-hover-bg);color:var(--text)}._composerPill_bioch_979{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_bioch_979:hover:not(:disabled):not([data-disabled]),._composerPill_bioch_979:focus,._composerPill_bioch_979:focus-within,._composerPill_bioch_979[data-state=open]{background:var(--chat-hover-bg);color:var(--text)}._composerPill_bioch_979:disabled,._composerPill_bioch_979[data-disabled]{opacity:.55;cursor:default}._agentSelect_bioch_1021{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_bioch_1021:disabled{cursor:default}._composerPillChevron_bioch_1044{opacity:.7;flex-shrink:0;align-items:center;transition:transform .16s;display:inline-flex}._composerPill_bioch_979[data-state=open] ._composerPillChevron_bioch_1044{opacity:1;transform:rotate(180deg)}._sendButton_bioch_944{color:var(--muted-foreground);border:1px solid var(--line-strong);background:0 0;font-size:.9rem}._sendButton_bioch_944:hover:not(:disabled){background:var(--chat-hover-bg);color:var(--text)}._sendButton_bioch_944:disabled{opacity:.5;cursor:default}._sendButton_bioch_944._stopping_bioch_1074{background:var(--danger-soft);color:var(--danger)}._slashSuggestions_bioch_1079{background:var(--popover);border:1px solid var(--line);border-radius:var(--radius-md);box-shadow:var(--shadow-popover);overflow:hidden}._slashSuggestionsScroll_bioch_1087{max-height:220px}._slashSuggestionsList_bioch_1091{outline:none}._suggestionItem_bioch_1095{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_bioch_1110{background:color-mix(in srgb, var(--primary) 14%, transparent);border-left-color:var(--primary)}._suggestionItemSub_bioch_1115{padding-left:28px}._suggestionLabel_bioch_1119{color:var(--text);white-space:nowrap;text-overflow:ellipsis;font-size:.86rem;font-weight:500;overflow:hidden}._suggestionLabelMono_bioch_1128{font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, monospace);color:var(--muted-foreground);font-size:.82rem}._suggestionMatch_bioch_1134{color:inherit;text-underline-offset:3px;background:0 0;font-weight:700;text-decoration:underline;text-decoration-thickness:1px}._suggestionDesc_bioch_1143{color:var(--muted-foreground);white-space:nowrap;text-overflow:ellipsis;font-size:.76rem;overflow:hidden}._suggestionEmpty_bioch_1151{color:var(--muted-foreground);padding:14px;font-size:.82rem}@media (width<=768px){._suggestionItem_bioch_1095{min-height:48px;padding:12px 14px}}._errorBanner_bioch_1168{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_bioch_1182{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_bioch_1197{gap:6px;margin-top:6px;display:flex}@media (width<=900px){._chatPage_bioch_1{width:100vw;max-width:100vw;position:fixed;inset:0}._chatPage_bioch_1,._chatPage_bioch_1 *{max-width:100vw}._chatPage_bioch_1{height:var(--chat-visual-viewport-height,100svh)}._chatMain_bioch_383{flex:0 0 100vw;width:100vw;max-width:100vw}._chatTopbar_bioch_263{width:100vw;padding:8px 16px 0}._messageArea_bioch_395{width:100vw;max-width:100vw;padding:16px 16px calc(var(--chat-composer-height,150px) + 12px)}._messageList_bioch_405,._messageBlock_bioch_437{width:100%;max-width:100%;overflow-x:clip}._bubble_bioch_485,._bubbleUser_bioch_496,._bubbleAssistant_bioch_502{max-width:min(95%,100vw - 32px)}._composerWrapper_bioch_831{z-index:45;background:var(--page-bg);padding:0 16px;position:fixed;bottom:0;left:0;right:0}._slashSuggestionsScroll_bioch_1087{max-height:40vh}}@media (width<=480px){._bubbleUser_bioch_496,._bubbleAssistant_bioch_502{max-width:95%}._messageArea_bioch_395{padding:12px 8px calc(var(--chat-composer-height,150px) + 12px)}._composerWrapper_bioch_831{padding:0 12px}._emptyState_bioch_418 h1{font-size:1.2rem}}@media (prefers-reduced-motion:reduce){._thinkingDot_bioch_802,._sessionItemPending_bioch_174{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}