@hybridaione/hybridclaw 0.18.0 → 0.19.2
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.
- package/CHANGELOG.md +100 -0
- package/README.md +31 -10
- package/config.example.json +14 -0
- package/console/dist/assets/chat-CHK2pGdk.css +1 -0
- package/console/dist/assets/chat-DrmOZ2y2.js +158 -0
- package/console/dist/assets/cx-UKeCbc1v.js +1 -0
- package/console/dist/assets/index-DZAontVo.js +16 -0
- package/console/dist/assets/{terminal-CfDfvr7E.js → terminal-CIu44Bps.js} +1 -1
- package/console/dist/index.html +2 -2
- package/container/dist/approval-policy.js +49 -1
- package/container/dist/approval-policy.js.map +1 -1
- package/container/dist/artifacts.js +7 -0
- package/container/dist/artifacts.js.map +1 -1
- package/container/dist/audio-transcribe.js +1189 -0
- package/container/dist/audio-transcribe.js.map +1 -0
- package/container/dist/diagram-create.js +896 -0
- package/container/dist/diagram-create.js.map +1 -0
- package/container/dist/index.js +3 -1
- package/container/dist/index.js.map +1 -1
- package/container/dist/providers/anthropic.js +7 -1
- package/container/dist/providers/anthropic.js.map +1 -1
- package/container/dist/providers/shared.js +6 -0
- package/container/dist/providers/shared.js.map +1 -1
- package/container/dist/tools.js +282 -1
- package/container/dist/tools.js.map +1 -1
- package/container/dist/types.js.map +1 -1
- package/container/package-lock.json +2 -2
- package/container/package.json +1 -1
- package/container/shared/audio-transcription-pricing.d.ts +11 -0
- package/container/shared/audio-transcription-pricing.js +21 -0
- package/container/shared/message-tool-channels.d.ts +2 -0
- package/container/shared/message-tool-channels.js +4 -0
- package/container/shared/middleware-contract.d.ts +23 -6
- package/container/shared/middleware-runner.d.ts +1 -0
- package/container/shared/middleware-runner.js +54 -6
- package/container/shared/provider-fallback.d.ts +4 -0
- package/container/shared/provider-fallback.js +16 -0
- package/container/src/approval-policy.ts +52 -1
- package/container/src/artifacts.ts +7 -0
- package/container/src/audio-transcribe.ts +1532 -0
- package/container/src/diagram-create.ts +1243 -0
- package/container/src/index.ts +5 -0
- package/container/src/providers/anthropic.ts +7 -1
- package/container/src/providers/shared.ts +6 -0
- package/container/src/tools.ts +333 -1
- package/container/src/types.ts +7 -0
- package/dist/a2a/envelope.d.ts +3 -0
- package/dist/a2a/envelope.d.ts.map +1 -1
- package/dist/a2a/envelope.js +20 -0
- package/dist/a2a/envelope.js.map +1 -1
- package/dist/a2a/identity.d.ts.map +1 -1
- package/dist/a2a/identity.js +6 -3
- package/dist/a2a/identity.js.map +1 -1
- package/dist/a2a/store.d.ts +6 -1
- package/dist/a2a/store.d.ts.map +1 -1
- package/dist/a2a/store.js +39 -8
- package/dist/a2a/store.js.map +1 -1
- package/dist/agent/conversation.d.ts +7 -0
- package/dist/agent/conversation.d.ts.map +1 -1
- package/dist/agent/conversation.js +54 -3
- package/dist/agent/conversation.js.map +1 -1
- package/dist/agent/executor-types.d.ts +1 -0
- package/dist/agent/executor-types.d.ts.map +1 -1
- package/dist/agent/middleware.d.ts +10 -0
- package/dist/agent/middleware.d.ts.map +1 -1
- package/dist/agent/middleware.js +9 -1
- package/dist/agent/middleware.js.map +1 -1
- package/dist/agent/post-turn-events.d.ts +16 -0
- package/dist/agent/post-turn-events.d.ts.map +1 -0
- package/dist/agent/post-turn-events.js +28 -0
- package/dist/agent/post-turn-events.js.map +1 -0
- package/dist/agent/prompt-hooks.d.ts.map +1 -1
- package/dist/agent/prompt-hooks.js +2 -5
- package/dist/agent/prompt-hooks.js.map +1 -1
- package/dist/agent/side-effects.d.ts +1 -0
- package/dist/agent/side-effects.d.ts.map +1 -1
- package/dist/agent/side-effects.js +1 -1
- package/dist/agent/side-effects.js.map +1 -1
- package/dist/agent/tool-summary.d.ts.map +1 -1
- package/dist/agent/tool-summary.js +4 -0
- package/dist/agent/tool-summary.js.map +1 -1
- package/dist/channels/channel-registry.d.ts.map +1 -1
- package/dist/channels/channel-registry.js +13 -1
- package/dist/channels/channel-registry.js.map +1 -1
- package/dist/channels/channel.d.ts +4 -2
- package/dist/channels/channel.d.ts.map +1 -1
- package/dist/channels/channel.js +20 -0
- package/dist/channels/channel.js.map +1 -1
- package/dist/channels/discord/runtime.d.ts.map +1 -1
- package/dist/channels/discord/runtime.js +16 -19
- package/dist/channels/discord/runtime.js.map +1 -1
- package/dist/channels/discord-webhook/config.d.ts +8 -0
- package/dist/channels/discord-webhook/config.d.ts.map +1 -0
- package/dist/channels/discord-webhook/config.js +14 -0
- package/dist/channels/discord-webhook/config.js.map +1 -0
- package/dist/channels/discord-webhook/delivery.d.ts +41 -0
- package/dist/channels/discord-webhook/delivery.d.ts.map +1 -0
- package/dist/channels/discord-webhook/delivery.js +239 -0
- package/dist/channels/discord-webhook/delivery.js.map +1 -0
- package/dist/channels/discord-webhook/policy.d.ts +11 -0
- package/dist/channels/discord-webhook/policy.d.ts.map +1 -0
- package/dist/channels/discord-webhook/policy.js +57 -0
- package/dist/channels/discord-webhook/policy.js.map +1 -0
- package/dist/channels/discord-webhook/prompt-adapter.d.ts +3 -0
- package/dist/channels/discord-webhook/prompt-adapter.d.ts.map +1 -0
- package/dist/channels/discord-webhook/prompt-adapter.js +17 -0
- package/dist/channels/discord-webhook/prompt-adapter.js.map +1 -0
- package/dist/channels/discord-webhook/runtime.d.ts +12 -0
- package/dist/channels/discord-webhook/runtime.d.ts.map +1 -0
- package/dist/channels/discord-webhook/runtime.js +56 -0
- package/dist/channels/discord-webhook/runtime.js.map +1 -0
- package/dist/channels/discord-webhook/target.d.ts +10 -0
- package/dist/channels/discord-webhook/target.d.ts.map +1 -0
- package/dist/channels/discord-webhook/target.js +74 -0
- package/dist/channels/discord-webhook/target.js.map +1 -0
- package/dist/channels/message/tool-actions.d.ts.map +1 -1
- package/dist/channels/message/tool-actions.js +120 -8
- package/dist/channels/message/tool-actions.js.map +1 -1
- package/dist/channels/message-tool-advertising.d.ts.map +1 -1
- package/dist/channels/message-tool-advertising.js +2 -0
- package/dist/channels/message-tool-advertising.js.map +1 -1
- package/dist/channels/prompt-adapters.d.ts.map +1 -1
- package/dist/channels/prompt-adapters.js +7 -0
- package/dist/channels/prompt-adapters.js.map +1 -1
- package/dist/channels/slack/delivery.d.ts +4 -0
- package/dist/channels/slack/delivery.d.ts.map +1 -1
- package/dist/channels/slack/delivery.js +5 -2
- package/dist/channels/slack/delivery.js.map +1 -1
- package/dist/channels/slack-webhook/config.d.ts +8 -0
- package/dist/channels/slack-webhook/config.d.ts.map +1 -0
- package/dist/channels/slack-webhook/config.js +14 -0
- package/dist/channels/slack-webhook/config.js.map +1 -0
- package/dist/channels/slack-webhook/delivery.d.ts +45 -0
- package/dist/channels/slack-webhook/delivery.d.ts.map +1 -0
- package/dist/channels/slack-webhook/delivery.js +204 -0
- package/dist/channels/slack-webhook/delivery.js.map +1 -0
- package/dist/channels/slack-webhook/policy.d.ts +11 -0
- package/dist/channels/slack-webhook/policy.d.ts.map +1 -0
- package/dist/channels/slack-webhook/policy.js +57 -0
- package/dist/channels/slack-webhook/policy.js.map +1 -0
- package/dist/channels/slack-webhook/prompt-adapter.d.ts +3 -0
- package/dist/channels/slack-webhook/prompt-adapter.d.ts.map +1 -0
- package/dist/channels/slack-webhook/prompt-adapter.js +17 -0
- package/dist/channels/slack-webhook/prompt-adapter.js.map +1 -0
- package/dist/channels/slack-webhook/runtime.d.ts +12 -0
- package/dist/channels/slack-webhook/runtime.d.ts.map +1 -0
- package/dist/channels/slack-webhook/runtime.js +56 -0
- package/dist/channels/slack-webhook/runtime.js.map +1 -0
- package/dist/channels/slack-webhook/target.d.ts +10 -0
- package/dist/channels/slack-webhook/target.d.ts.map +1 -0
- package/dist/channels/slack-webhook/target.js +71 -0
- package/dist/channels/slack-webhook/target.js.map +1 -0
- package/dist/cli/channels-command.d.ts.map +1 -1
- package/dist/cli/channels-command.js +319 -3
- package/dist/cli/channels-command.js.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +11 -3
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/plugin-command.d.ts.map +1 -1
- package/dist/cli/plugin-command.js +18 -6
- package/dist/cli/plugin-command.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +7 -0
- package/dist/cli.js.map +1 -1
- package/dist/command-registry.d.ts.map +1 -1
- package/dist/command-registry.js +89 -7
- package/dist/command-registry.js.map +1 -1
- package/dist/config/runtime-config.d.ts +31 -0
- package/dist/config/runtime-config.d.ts.map +1 -1
- package/dist/config/runtime-config.js +326 -0
- package/dist/config/runtime-config.js.map +1 -1
- package/dist/doctor/checks/channels.d.ts.map +1 -1
- package/dist/doctor/checks/channels.js +53 -1
- package/dist/doctor/checks/channels.js.map +1 -1
- package/dist/evals/judge-subscriber.d.ts +40 -7
- package/dist/evals/judge-subscriber.d.ts.map +1 -1
- package/dist/evals/judge-subscriber.js +79 -24
- package/dist/evals/judge-subscriber.js.map +1 -1
- package/dist/gateway/diagram-runtime-events.d.ts +14 -0
- package/dist/gateway/diagram-runtime-events.d.ts.map +1 -0
- package/dist/gateway/diagram-runtime-events.js +49 -0
- package/dist/gateway/diagram-runtime-events.js.map +1 -0
- package/dist/gateway/docs.d.ts.map +1 -1
- package/dist/gateway/docs.js +8 -0
- package/dist/gateway/docs.js.map +1 -1
- package/dist/gateway/fullauto-runtime.d.ts +1 -0
- package/dist/gateway/fullauto-runtime.d.ts.map +1 -1
- package/dist/gateway/fullauto-runtime.js +1 -1
- package/dist/gateway/fullauto-runtime.js.map +1 -1
- package/dist/gateway/fullauto.d.ts.map +1 -1
- package/dist/gateway/fullauto.js +1 -4
- package/dist/gateway/fullauto.js.map +1 -1
- package/dist/gateway/gateway-chat-service.d.ts.map +1 -1
- package/dist/gateway/gateway-chat-service.js +250 -81
- package/dist/gateway/gateway-chat-service.js.map +1 -1
- package/dist/gateway/gateway-http-server.d.ts.map +1 -1
- package/dist/gateway/gateway-http-server.js +72 -23
- package/dist/gateway/gateway-http-server.js.map +1 -1
- package/dist/gateway/gateway-plugin-service.d.ts.map +1 -1
- package/dist/gateway/gateway-plugin-service.js +80 -5
- package/dist/gateway/gateway-plugin-service.js.map +1 -1
- package/dist/gateway/gateway-service.d.ts +4 -1
- package/dist/gateway/gateway-service.d.ts.map +1 -1
- package/dist/gateway/gateway-service.js +215 -29
- package/dist/gateway/gateway-service.js.map +1 -1
- package/dist/gateway/gateway-types.d.ts +38 -0
- package/dist/gateway/gateway-types.d.ts.map +1 -1
- package/dist/gateway/gateway-types.js.map +1 -1
- package/dist/gateway/gateway.js +170 -2
- package/dist/gateway/gateway.js.map +1 -1
- package/dist/gateway/goal-continuation-runner.d.ts +2 -0
- package/dist/gateway/goal-continuation-runner.d.ts.map +1 -0
- package/dist/gateway/goal-continuation-runner.js +80 -0
- package/dist/gateway/goal-continuation-runner.js.map +1 -0
- package/dist/gateway/openai-compatible.d.ts.map +1 -1
- package/dist/gateway/openai-compatible.js +2 -5
- package/dist/gateway/openai-compatible.js.map +1 -1
- package/dist/gateway/proactive-delivery.d.ts.map +1 -1
- package/dist/gateway/proactive-delivery.js +6 -0
- package/dist/gateway/proactive-delivery.js.map +1 -1
- package/dist/gateway/provider-fallback.d.ts +3 -2
- package/dist/gateway/provider-fallback.d.ts.map +1 -1
- package/dist/gateway/provider-fallback.js +2 -14
- package/dist/gateway/provider-fallback.js.map +1 -1
- package/dist/goals/goal-audit.d.ts +12 -0
- package/dist/goals/goal-audit.d.ts.map +1 -0
- package/dist/goals/goal-audit.js +17 -0
- package/dist/goals/goal-audit.js.map +1 -0
- package/dist/goals/goal-command.d.ts +8 -0
- package/dist/goals/goal-command.d.ts.map +1 -0
- package/dist/goals/goal-command.js +211 -0
- package/dist/goals/goal-command.js.map +1 -0
- package/dist/goals/goal-judge.d.ts +41 -0
- package/dist/goals/goal-judge.d.ts.map +1 -0
- package/dist/goals/goal-judge.js +271 -0
- package/dist/goals/goal-judge.js.map +1 -0
- package/dist/goals/goal-manager.d.ts +64 -0
- package/dist/goals/goal-manager.d.ts.map +1 -0
- package/dist/goals/goal-manager.js +266 -0
- package/dist/goals/goal-manager.js.map +1 -0
- package/dist/goals/goal-runtime.d.ts +46 -0
- package/dist/goals/goal-runtime.d.ts.map +1 -0
- package/dist/goals/goal-runtime.js +324 -0
- package/dist/goals/goal-runtime.js.map +1 -0
- package/dist/infra/container-runner.d.ts.map +1 -1
- package/dist/infra/container-runner.js +3 -1
- package/dist/infra/container-runner.js.map +1 -1
- package/dist/infra/host-runner.d.ts.map +1 -1
- package/dist/infra/host-runner.js +3 -1
- package/dist/infra/host-runner.js.map +1 -1
- package/dist/infra/worker-signature.d.ts +2 -0
- package/dist/infra/worker-signature.d.ts.map +1 -1
- package/dist/infra/worker-signature.js +33 -0
- package/dist/infra/worker-signature.js.map +1 -1
- package/dist/logger-format.d.ts.map +1 -1
- package/dist/logger-format.js +14 -1
- package/dist/logger-format.js.map +1 -1
- package/dist/memory/db.d.ts +1 -1
- package/dist/memory/db.d.ts.map +1 -1
- package/dist/memory/db.js +31 -1
- package/dist/memory/db.js.map +1 -1
- package/dist/memory/memory-service.d.ts +1 -0
- package/dist/memory/memory-service.d.ts.map +1 -1
- package/dist/memory/memory-service.js +9 -8
- package/dist/memory/memory-service.js.map +1 -1
- package/dist/onboarding.d.ts.map +1 -1
- package/dist/onboarding.js +56 -0
- package/dist/onboarding.js.map +1 -1
- package/dist/plugins/plugin-api.d.ts.map +1 -1
- package/dist/plugins/plugin-api.js +7 -0
- package/dist/plugins/plugin-api.js.map +1 -1
- package/dist/plugins/plugin-formatting.d.ts +7 -1
- package/dist/plugins/plugin-formatting.d.ts.map +1 -1
- package/dist/plugins/plugin-formatting.js +35 -0
- package/dist/plugins/plugin-formatting.js.map +1 -1
- package/dist/plugins/plugin-install.d.ts +4 -0
- package/dist/plugins/plugin-install.d.ts.map +1 -1
- package/dist/plugins/plugin-install.js +70 -10
- package/dist/plugins/plugin-install.js.map +1 -1
- package/dist/plugins/plugin-manager.d.ts +1 -0
- package/dist/plugins/plugin-manager.d.ts.map +1 -1
- package/dist/plugins/plugin-manager.js +16 -7
- package/dist/plugins/plugin-manager.js.map +1 -1
- package/dist/plugins/plugin-sdk.d.ts +1 -1
- package/dist/plugins/plugin-sdk.d.ts.map +1 -1
- package/dist/plugins/plugin-sdk.js.map +1 -1
- package/dist/plugins/plugin-types.d.ts +17 -0
- package/dist/plugins/plugin-types.d.ts.map +1 -1
- package/dist/providers/auxiliary.d.ts.map +1 -1
- package/dist/providers/auxiliary.js +249 -63
- package/dist/providers/auxiliary.js.map +1 -1
- package/dist/providers/model-metadata.d.ts +14 -0
- package/dist/providers/model-metadata.d.ts.map +1 -1
- package/dist/providers/model-metadata.js +47 -3
- package/dist/providers/model-metadata.js.map +1 -1
- package/dist/providers/provider-credentials.d.ts.map +1 -1
- package/dist/providers/provider-credentials.js +15 -0
- package/dist/providers/provider-credentials.js.map +1 -1
- package/dist/scheduler/heartbeat.d.ts.map +1 -1
- package/dist/scheduler/heartbeat.js +1 -0
- package/dist/scheduler/heartbeat.js.map +1 -1
- package/dist/session/session-context.d.ts.map +1 -1
- package/dist/session/session-context.js +2 -0
- package/dist/session/session-context.js.map +1 -1
- package/dist/session/session-reset.d.ts.map +1 -1
- package/dist/session/session-reset.js +6 -0
- package/dist/session/session-reset.js.map +1 -1
- package/dist/session/session-title.d.ts.map +1 -1
- package/dist/session/session-title.js +23 -1
- package/dist/session/session-title.js.map +1 -1
- package/dist/session/session-trace-export.d.ts.map +1 -1
- package/dist/session/session-trace-export.js +51 -2
- package/dist/session/session-trace-export.js.map +1 -1
- package/dist/skills/skill-manifest.d.ts.map +1 -1
- package/dist/skills/skill-manifest.js +2 -0
- package/dist/skills/skill-manifest.js.map +1 -1
- package/dist/tui-banner.d.ts.map +1 -1
- package/dist/tui-banner.js +1 -0
- package/dist/tui-banner.js.map +1 -1
- package/dist/tui-proactive.d.ts +3 -0
- package/dist/tui-proactive.d.ts.map +1 -1
- package/dist/tui-proactive.js +38 -5
- package/dist/tui-proactive.js.map +1 -1
- package/dist/tui-skill-config.d.ts +1 -1
- package/dist/tui-skill-config.d.ts.map +1 -1
- package/dist/tui.d.ts +2 -0
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +267 -14
- package/dist/tui.js.map +1 -1
- package/dist/types/container.d.ts +7 -0
- package/dist/types/container.d.ts.map +1 -1
- package/dist/types/models.d.ts +1 -1
- package/dist/types/models.d.ts.map +1 -1
- package/dist/types/models.js +1 -0
- package/dist/types/models.js.map +1 -1
- package/dist/usage/media-generation-usage.d.ts.map +1 -1
- package/dist/usage/media-generation-usage.js +39 -0
- package/dist/usage/media-generation-usage.js.map +1 -1
- package/dist/workspace.d.ts +11 -1
- package/dist/workspace.d.ts.map +1 -1
- package/dist/workspace.js +16 -12
- package/dist/workspace.js.map +1 -1
- package/docs/agents.html +6 -6
- package/docs/content/channels/README.md +2 -0
- package/docs/content/channels/discord-webhook.md +49 -0
- package/docs/content/channels/overview.md +9 -5
- package/docs/content/channels/slack-webhook.md +83 -0
- package/docs/content/developer-guide/identity.md +27 -0
- package/docs/content/developer-guide/memory.md +21 -16
- package/docs/content/developer-guide/runtime.md +19 -0
- package/docs/content/extensibility/plugins.md +20 -4
- package/docs/content/getting-started/first-channel.md +3 -0
- package/docs/content/getting-started/quickstart.md +2 -0
- package/docs/content/guides/bundled-skills.md +6 -14
- package/docs/content/guides/skills/README.md +1 -1
- package/docs/content/guides/skills/publishing.md +34 -1
- package/docs/content/internal/roadmap.md +92 -26
- package/docs/content/reference/commands.md +58 -4
- package/docs/content/reference/configuration.md +18 -2
- package/docs/content/reference/faq.md +6 -5
- package/docs/content/reference/model-selection.md +1 -0
- package/docs/index.html +22 -22
- package/docs/static/docs.js +13 -0
- package/package.json +5 -3
- package/plugins/concierge-router/hybridclaw.plugin.yaml +26 -0
- package/plugins/concierge-router/src/command.js +137 -0
- package/plugins/concierge-router/src/index.js +293 -0
- package/plugins/concierge-router/src/routing.js +428 -0
- package/plugins/concierge-router/state/.gitignore +2 -0
- package/scripts/postinstall-container.mjs +6 -0
- package/skills/diagram/SKILL.md +132 -0
- package/skills/diagram/agents/openai.yaml +2 -0
- package/skills/diagram/references/mermaid-types.md +107 -0
- package/skills/speech.detect-language/SKILL.md +58 -0
- package/skills/speech.transcribe/SKILL.md +111 -0
- package/console/dist/assets/chat-C4lYYG3X.css +0 -1
- package/console/dist/assets/chat-CBzFOOa7.js +0 -158
- package/console/dist/assets/cx-Dx36j-u-.js +0 -1
- package/console/dist/assets/index-mP3V4MBi.js +0 -16
- package/dist/gateway/concierge-choice.d.ts +0 -17
- package/dist/gateway/concierge-choice.d.ts.map +0 -1
- package/dist/gateway/concierge-choice.js +0 -59
- package/dist/gateway/concierge-choice.js.map +0 -1
- package/dist/gateway/concierge-commands.d.ts +0 -17
- package/dist/gateway/concierge-commands.d.ts.map +0 -1
- package/dist/gateway/concierge-commands.js +0 -88
- package/dist/gateway/concierge-commands.js.map +0 -1
- package/dist/gateway/concierge-routing.d.ts +0 -34
- package/dist/gateway/concierge-routing.d.ts.map +0 -1
- package/dist/gateway/concierge-routing.js +0 -183
- package/dist/gateway/concierge-routing.js.map +0 -1
- package/dist/gateway/concierge-session.d.ts +0 -32
- package/dist/gateway/concierge-session.d.ts.map +0 -1
- package/dist/gateway/concierge-session.js +0 -132
- package/dist/gateway/concierge-session.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,106 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## [0.19.2](https://github.com/HybridAIOne/hybridclaw/tree/v0.19.2) - 2026-05-14
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- **Diagram tool names**: Renamed the advertised diagram runtime tools to
|
|
10
|
+
`diagram_create`, `diagram_update`, and `diagram_validate` everywhere so
|
|
11
|
+
OpenAI-compatible providers accept the tool schema instead of rejecting
|
|
12
|
+
dotted function names.
|
|
13
|
+
|
|
14
|
+
## [0.19.1](https://github.com/HybridAIOne/hybridclaw/tree/v0.19.1) - 2026-05-14
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- **Release npm signature verification**: The npm publish workflow now uses
|
|
19
|
+
the repo's signature-audit wrapper so the temporary Baileys release-age
|
|
20
|
+
bypass is applied consistently before publishing.
|
|
21
|
+
|
|
22
|
+
## [0.19.0](https://github.com/HybridAIOne/hybridclaw/tree/v0.19.0) - 2026-05-14
|
|
23
|
+
|
|
24
|
+
### Added
|
|
25
|
+
|
|
26
|
+
- **Persistent standing goals**: Added `/goal` as a per-thread completion
|
|
27
|
+
condition that persists across turns, queues supervised continuations until a
|
|
28
|
+
judge marks the condition complete, reports goal status/counters, and pauses
|
|
29
|
+
cleanly for approvals, user interruptions, malformed judge output, or
|
|
30
|
+
explicit `pause`/`clear` commands. Goal continuations include the current
|
|
31
|
+
goal step and use scoped TUI/proactive labels so they remain distinct from
|
|
32
|
+
reminders and ordinary user turns.
|
|
33
|
+
- **Native speech-to-text transcription**: Added the `audio_transcribe` runtime
|
|
34
|
+
tool plus bundled `speech.transcribe` and `speech.detect-language` skills for
|
|
35
|
+
provider-agnostic transcription, language detection, diarization, timestamps,
|
|
36
|
+
transcript artifact persistence, and usage-cost accounting across configured
|
|
37
|
+
OpenAI, Deepgram, AssemblyAI, and local backends.
|
|
38
|
+
- **Discord Incoming Webhook channel**: Added outbound-only `discord_webhook`
|
|
39
|
+
delivery for Discord webhook URLs, including default and named targets,
|
|
40
|
+
encrypted SecretRef storage, CLI/Admin setup, message chunking, doctor/status
|
|
41
|
+
visibility, and managed POST-only network policy grants.
|
|
42
|
+
- **Diagram-as-code runtime and bundled skill**: Added the `diagram` skill plus
|
|
43
|
+
native `diagram_create`, `diagram_update`, and `diagram_validate` tools for
|
|
44
|
+
validated Mermaid-first diagrams, with PlantUML, Graphviz DOT, and Excalidraw
|
|
45
|
+
JSON adapters, source/rendered artifact persistence, SVG fallbacks, and
|
|
46
|
+
diagram runtime events.
|
|
47
|
+
- **Slack Incoming Webhook channel**: Added outbound-only `slack_webhook`
|
|
48
|
+
delivery for Slack Incoming Webhook URLs, including default and named targets,
|
|
49
|
+
encrypted SecretRef storage, `hybridclaw channel add slack_webhook` setup,
|
|
50
|
+
admin-console editing, Block Kit text chunking, reachability status, and
|
|
51
|
+
managed POST-only network policy grants.
|
|
52
|
+
- **Concierge router plugin**: Moved concierge urgency routing into the
|
|
53
|
+
repo-shipped `concierge-router` middleware plugin, preserving `/concierge`
|
|
54
|
+
commands while giving routing middleware a plugin-owned pending-state store
|
|
55
|
+
and authorized inbound webhook path for urgency-button callbacks.
|
|
56
|
+
- **A2A sender instance metadata**: A2A envelopes now carry
|
|
57
|
+
`sender_instance_id`, derive it from canonical sender IDs for legacy payloads,
|
|
58
|
+
expose it in audit summaries, and use `(envelope.id, sender_instance_id)` as
|
|
59
|
+
the idempotency tuple for federated threads.
|
|
60
|
+
- **Model overlay metadata substrate**: Static model metadata can now carry a
|
|
61
|
+
complete `model_overlay` contract shape and lookup helpers for GPT-5-family
|
|
62
|
+
matching, preparing the runtime for model-specific behavior overlays without
|
|
63
|
+
wiring an overlay applier yet.
|
|
64
|
+
- **Prompt-prefix trace metadata**: ATIF/OpenTraces session exports now include
|
|
65
|
+
dynamic-context hashes and `prompt_prefix` entries alongside system prompt
|
|
66
|
+
hashes, making prompt-cache behavior auditable per turn.
|
|
67
|
+
|
|
68
|
+
### Changed
|
|
69
|
+
|
|
70
|
+
- **System prompt prefix is byte-stable**: Per-turn dynamic context such as the
|
|
71
|
+
current date, host, today's memory note, session summary, and retrieval
|
|
72
|
+
snippets moved out of the system prompt into a post-prefix user context block
|
|
73
|
+
so provider prefix caches can reuse the static system prompt.
|
|
74
|
+
- **Plugin discovery lists installable plugins**: `hybridclaw plugin list` and
|
|
75
|
+
`/plugin list` now show installed plugins plus bundled/project-local
|
|
76
|
+
installable plugins, with `installed` and `available` filters. Bare plugin
|
|
77
|
+
IDs resolve through bundled and project `plugins/` catalogs, with project
|
|
78
|
+
plugins taking priority.
|
|
79
|
+
- **Web chat sessions are easier to manage**: The chat sidebar can delete
|
|
80
|
+
stored browser sessions, and local web clients automatically refresh their
|
|
81
|
+
token when the gateway rotates the local web token.
|
|
82
|
+
- **TUI rendering handles Markdown tables**: The TUI now renders Markdown table
|
|
83
|
+
blocks as terminal tables while preserving ordinary assistant text flow.
|
|
84
|
+
|
|
85
|
+
### Fixed
|
|
86
|
+
|
|
87
|
+
- **Agents page navigation links**: Corrected broken links on the generated
|
|
88
|
+
agents page so navigation targets resolve properly.
|
|
89
|
+
- **Auxiliary provider fallback**: Auxiliary calls retry through the configured
|
|
90
|
+
fallback provider path, including active local-provider preference and clearer
|
|
91
|
+
fallback logging.
|
|
92
|
+
- **Global package install bootstrap**: Container dependency postinstall now
|
|
93
|
+
falls back to `npm` when the outer install was invoked by `pnpm`, avoiding
|
|
94
|
+
broken global package installs caused by forwarding the wrong package-manager
|
|
95
|
+
executable and lifecycle env.
|
|
96
|
+
- **pnpm install compatibility**: Dependency verification avoids the Baileys
|
|
97
|
+
libsignal Git dependency path that blocked `pnpm`-initiated installs.
|
|
98
|
+
- **Microsoft Teams optional dependency loading**: Teams Bot Framework support
|
|
99
|
+
is lazy-loaded so installs that do not use Microsoft Teams are not blocked by
|
|
100
|
+
that integration path.
|
|
101
|
+
- **Federated A2A duplicate handling**: Threads can now contain the same
|
|
102
|
+
envelope ID from different sender instances while ambiguous envelope lookups
|
|
103
|
+
fail fast unless the caller supplies `sender_instance_id`.
|
|
104
|
+
|
|
5
105
|
## [0.18.0](https://github.com/HybridAIOne/hybridclaw/tree/v0.18.0) - 2026-05-13
|
|
6
106
|
|
|
7
107
|
### 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,
|
|
23
|
-
|
|
24
|
-
|
|
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
|
|
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
|
|
187
|
-
`hybridclaw tui --resume <sessionId>` command on
|
|
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,
|
|
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),
|
package/config.example.json
CHANGED
|
@@ -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}
|