@hybridaione/hybridclaw 0.17.0 → 0.19.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +153 -0
- package/README.md +47 -16
- package/config.example.json +15 -1
- 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-C4X6KQL_.css → index-CbSfc5B7.css} +1 -1
- package/console/dist/assets/index-DZAontVo.js +16 -0
- package/console/dist/assets/{terminal-BhiO_Bf5.js → terminal-CIu44Bps.js} +1 -1
- package/console/dist/index.html +3 -3
- package/container/dist/approval-policy.js +179 -14
- 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/image-generation.js +5 -5
- package/container/dist/image-generation.js.map +1 -1
- 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 +426 -2
- package/container/dist/tools.js.map +1 -1
- package/container/dist/types.js.map +1 -1
- package/container/dist/video-generation.js +3 -3
- package/container/dist/video-generation.js.map +1 -1
- package/container/dist/web-search.js +101 -14
- package/container/dist/web-search.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/browser-navigation.d.ts +1 -0
- package/container/shared/browser-navigation.js +5 -1
- package/container/shared/browser-stealth-policy.d.ts +27 -0
- package/container/shared/browser-stealth-policy.js +108 -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/shared/web-search-config.d.ts +5 -0
- package/container/src/approval-policy.ts +217 -15
- 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/image-generation.ts +5 -5
- 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 +496 -1
- package/container/src/types.ts +7 -0
- package/container/src/video-generation.ts +3 -3
- package/container/src/web-search.ts +146 -22
- 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 +3 -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/agents/agent-config-command.d.ts.map +1 -1
- package/dist/agents/agent-config-command.js +13 -1
- package/dist/agents/agent-config-command.js.map +1 -1
- package/dist/agents/agent-registry.d.ts.map +1 -1
- package/dist/agents/agent-registry.js +17 -1
- package/dist/agents/agent-registry.js.map +1 -1
- package/dist/agents/agent-types.d.ts +8 -0
- package/dist/agents/agent-types.d.ts.map +1 -1
- package/dist/agents/agent-types.js +40 -0
- package/dist/agents/agent-types.js.map +1 -1
- package/dist/browser/browser-use-cloud-provider.js +1 -1
- package/dist/browser/browser-use-cloud-provider.js.map +1 -1
- package/dist/browser/camofox-provider.d.ts +7 -1
- package/dist/browser/camofox-provider.d.ts.map +1 -1
- package/dist/browser/camofox-provider.js +36 -2
- package/dist/browser/camofox-provider.js.map +1 -1
- package/dist/browser/playwright-utils.d.ts +1 -1
- package/dist/browser/playwright-utils.d.ts.map +1 -1
- package/dist/browser/playwright-utils.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 +14 -4
- 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/skill-command.d.ts.map +1 -1
- package/dist/cli/skill-command.js +13 -0
- package/dist/cli/skill-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 +108 -8
- package/dist/command-registry.js.map +1 -1
- package/dist/config/config.d.ts +2 -0
- package/dist/config/config.d.ts.map +1 -1
- package/dist/config/config.js +4 -0
- package/dist/config/config.js.map +1 -1
- package/dist/config/runtime-config.d.ts +32 -0
- package/dist/config/runtime-config.d.ts.map +1 -1
- package/dist/config/runtime-config.js +358 -8
- 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/doctor/provider-probes.d.ts.map +1 -1
- package/dist/doctor/provider-probes.js +11 -2
- package/dist/doctor/provider-probes.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 +52 -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-proxy.d.ts +1 -1
- package/dist/gateway/gateway-http-proxy.d.ts.map +1 -1
- package/dist/gateway/gateway-http-proxy.js +221 -42
- package/dist/gateway/gateway-http-proxy.js.map +1 -1
- package/dist/gateway/gateway-http-server.d.ts.map +1 -1
- package/dist/gateway/gateway-http-server.js +87 -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-provider-service.d.ts +2 -2
- package/dist/gateway/gateway-provider-service.d.ts.map +1 -1
- package/dist/gateway/gateway-provider-service.js +39 -7
- package/dist/gateway/gateway-provider-service.js.map +1 -1
- package/dist/gateway/gateway-secret-injection.d.ts +3 -3
- package/dist/gateway/gateway-secret-injection.d.ts.map +1 -1
- package/dist/gateway/gateway-secret-injection.js +4 -5
- package/dist/gateway/gateway-secret-injection.js.map +1 -1
- package/dist/gateway/gateway-service.d.ts +7 -1
- package/dist/gateway/gateway-service.d.ts.map +1 -1
- package/dist/gateway/gateway-service.js +237 -35
- package/dist/gateway/gateway-service.js.map +1 -1
- package/dist/gateway/gateway-types.d.ts +41 -4
- 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/model-provider-keys.d.ts +3 -0
- package/dist/gateway/model-provider-keys.d.ts.map +1 -0
- package/dist/gateway/model-provider-keys.js +2 -0
- package/dist/gateway/model-provider-keys.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/gateway/skill-commands.d.ts.map +1 -1
- package/dist/gateway/skill-commands.js +26 -1
- package/dist/gateway/skill-commands.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 +12 -14
- 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 +11 -14
- package/dist/infra/host-runner.js.map +1 -1
- package/dist/infra/web-search-runtime-config.d.ts +3 -0
- package/dist/infra/web-search-runtime-config.d.ts.map +1 -0
- package/dist/infra/web-search-runtime-config.js +21 -0
- package/dist/infra/web-search-runtime-config.js.map +1 -0
- package/dist/infra/worker-signature.d.ts +3 -0
- package/dist/infra/worker-signature.d.ts.map +1 -1
- package/dist/infra/worker-signature.js +34 -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/policy/secret-route-policy.d.ts +1 -1
- package/dist/policy/secret-route-policy.d.ts.map +1 -1
- package/dist/policy/secret-route-policy.js +0 -8
- package/dist/policy/secret-route-policy.js.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/hybridai-bots.js +1 -1
- package/dist/providers/hybridai-bots.js.map +1 -1
- package/dist/providers/hybridai-discovery.d.ts +2 -0
- package/dist/providers/hybridai-discovery.d.ts.map +1 -1
- package/dist/providers/hybridai-discovery.js +62 -4
- package/dist/providers/hybridai-discovery.js.map +1 -1
- package/dist/providers/hybridai-health.d.ts.map +1 -1
- package/dist/providers/hybridai-health.js +8 -3
- package/dist/providers/hybridai-health.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 +46 -17
- package/dist/providers/provider-credentials.js.map +1 -1
- package/dist/providers/utils.d.ts +1 -0
- package/dist/providers/utils.d.ts.map +1 -1
- package/dist/providers/utils.js +5 -0
- package/dist/providers/utils.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/security/browser-stealth-policy.d.ts +10 -0
- package/dist/security/browser-stealth-policy.d.ts.map +1 -0
- package/dist/security/browser-stealth-policy.js +70 -0
- package/dist/security/browser-stealth-policy.js.map +1 -0
- package/dist/security/secret-policy.d.ts +1 -1
- package/dist/security/secret-policy.d.ts.map +1 -1
- package/dist/security/secret-policy.js +4 -1
- package/dist/security/secret-policy.js.map +1 -1
- package/dist/security/secret-refs.d.ts +3 -6
- package/dist/security/secret-refs.d.ts.map +1 -1
- package/dist/security/secret-refs.js +9 -39
- package/dist/security/secret-refs.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 +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/skills/skills-import.d.ts.map +1 -1
- package/dist/skills/skills-import.js +20 -1
- package/dist/skills/skills-import.js.map +1 -1
- package/dist/skills/skills.d.ts +12 -0
- package/dist/skills/skills.d.ts.map +1 -1
- package/dist/skills/skills.js +47 -0
- package/dist/skills/skills.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 +17 -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/approvals.md +27 -4
- 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 +25 -3
- package/docs/content/extensibility/plugins.md +20 -4
- package/docs/content/getting-started/authentication.md +7 -3
- 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 +13 -13
- package/docs/content/guides/remote-access.md +3 -3
- package/docs/content/guides/skills/README.md +2 -2
- package/docs/content/guides/skills/integrations.md +79 -5
- package/docs/content/guides/skills/publishing.md +96 -1
- package/docs/content/internal/roadmap.md +94 -28
- package/docs/content/reference/commands.md +58 -4
- package/docs/content/reference/configuration.md +38 -11
- package/docs/content/reference/diagnostics.md +5 -0
- package/docs/content/reference/faq.md +6 -5
- package/docs/content/reference/model-selection.md +1 -0
- package/docs/content/reference/tools/web-search.md +50 -3
- package/docs/content/tutorials/README.md +3 -0
- package/docs/content/tutorials/campaign-pulse-digest.md +22 -0
- package/docs/content/tutorials/feature-explainer-videos.md +24 -3
- package/docs/index.html +22 -22
- package/docs/static/docs.js +13 -0
- package/docs/tools/web-search.md +50 -2
- package/package.json +8 -4
- 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/download-platform-invoices/helpers/config.cjs +72 -39
- package/skills/firecrawl/SKILL.md +65 -14
- package/skills/firecrawl/firecrawl.cjs +91 -8
- package/skills/ga4/SKILL.md +200 -0
- package/skills/ga4/evals/scenarios.json +225 -0
- package/skills/ga4/scripts/ga4.py +832 -0
- package/skills/hermes3000-writing/SKILL.md +254 -0
- package/skills/hermes3000-writing/agents/openai.yaml +4 -0
- package/skills/hermes3000-writing/references/api-workflow.md +302 -0
- package/skills/hermes3000-writing/scripts/hermes3000.cjs +580 -0
- package/skills/heygen/client.cjs +2 -0
- package/skills/heygen/heygen.cjs +10 -63
- package/skills/heygen/lib/common.cjs +67 -0
- package/skills/skill-creator/SKILL.md +2 -1
- package/skills/skill-creator/references/output-patterns.md +1 -1
- package/skills/skill-creator/scripts/quick_validate.py +11 -4
- package/skills/speech.detect-language/SKILL.md +58 -0
- package/skills/speech.transcribe/SKILL.md +111 -0
- package/skills/video.from-script/SKILL.md +156 -0
- package/skills/video.from-script/video-from-script.cjs +638 -0
- package/console/dist/assets/chat-LVRun8dV.css +0 -1
- package/console/dist/assets/chat-ZXlZMDQn.js +0 -158
- package/console/dist/assets/cx-D-Eeq-HT.js +0 -1
- package/console/dist/assets/index-BcOge1oI.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,159 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## [0.19.1](https://github.com/HybridAIOne/hybridclaw/tree/v0.19.1) - 2026-05-14
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- **Release npm signature verification**: The npm publish workflow now uses
|
|
10
|
+
the repo's signature-audit wrapper so the temporary Baileys release-age
|
|
11
|
+
bypass is applied consistently before publishing.
|
|
12
|
+
|
|
13
|
+
## [0.19.0](https://github.com/HybridAIOne/hybridclaw/tree/v0.19.0) - 2026-05-14
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
- **Persistent standing goals**: Added `/goal` as a per-thread completion
|
|
18
|
+
condition that persists across turns, queues supervised continuations until a
|
|
19
|
+
judge marks the condition complete, reports goal status/counters, and pauses
|
|
20
|
+
cleanly for approvals, user interruptions, malformed judge output, or
|
|
21
|
+
explicit `pause`/`clear` commands. Goal continuations include the current
|
|
22
|
+
goal step and use scoped TUI/proactive labels so they remain distinct from
|
|
23
|
+
reminders and ordinary user turns.
|
|
24
|
+
- **Native speech-to-text transcription**: Added the `audio_transcribe` runtime
|
|
25
|
+
tool plus bundled `speech.transcribe` and `speech.detect-language` skills for
|
|
26
|
+
provider-agnostic transcription, language detection, diarization, timestamps,
|
|
27
|
+
transcript artifact persistence, and usage-cost accounting across configured
|
|
28
|
+
OpenAI, Deepgram, AssemblyAI, and local backends.
|
|
29
|
+
- **Discord Incoming Webhook channel**: Added outbound-only `discord_webhook`
|
|
30
|
+
delivery for Discord webhook URLs, including default and named targets,
|
|
31
|
+
encrypted SecretRef storage, CLI/Admin setup, message chunking, doctor/status
|
|
32
|
+
visibility, and managed POST-only network policy grants.
|
|
33
|
+
- **Diagram-as-code runtime and bundled skill**: Added the `diagram` skill plus
|
|
34
|
+
native `diagram.create`, `diagram.update`, and `diagram.validate` tools for
|
|
35
|
+
validated Mermaid-first diagrams, with PlantUML, Graphviz DOT, and Excalidraw
|
|
36
|
+
JSON adapters, source/rendered artifact persistence, SVG fallbacks, and
|
|
37
|
+
diagram runtime events.
|
|
38
|
+
- **Slack Incoming Webhook channel**: Added outbound-only `slack_webhook`
|
|
39
|
+
delivery for Slack Incoming Webhook URLs, including default and named targets,
|
|
40
|
+
encrypted SecretRef storage, `hybridclaw channel add slack_webhook` setup,
|
|
41
|
+
admin-console editing, Block Kit text chunking, reachability status, and
|
|
42
|
+
managed POST-only network policy grants.
|
|
43
|
+
- **Concierge router plugin**: Moved concierge urgency routing into the
|
|
44
|
+
repo-shipped `concierge-router` middleware plugin, preserving `/concierge`
|
|
45
|
+
commands while giving routing middleware a plugin-owned pending-state store
|
|
46
|
+
and authorized inbound webhook path for urgency-button callbacks.
|
|
47
|
+
- **A2A sender instance metadata**: A2A envelopes now carry
|
|
48
|
+
`sender_instance_id`, derive it from canonical sender IDs for legacy payloads,
|
|
49
|
+
expose it in audit summaries, and use `(envelope.id, sender_instance_id)` as
|
|
50
|
+
the idempotency tuple for federated threads.
|
|
51
|
+
- **Model overlay metadata substrate**: Static model metadata can now carry a
|
|
52
|
+
complete `model_overlay` contract shape and lookup helpers for GPT-5-family
|
|
53
|
+
matching, preparing the runtime for model-specific behavior overlays without
|
|
54
|
+
wiring an overlay applier yet.
|
|
55
|
+
- **Prompt-prefix trace metadata**: ATIF/OpenTraces session exports now include
|
|
56
|
+
dynamic-context hashes and `prompt_prefix` entries alongside system prompt
|
|
57
|
+
hashes, making prompt-cache behavior auditable per turn.
|
|
58
|
+
|
|
59
|
+
### Changed
|
|
60
|
+
|
|
61
|
+
- **System prompt prefix is byte-stable**: Per-turn dynamic context such as the
|
|
62
|
+
current date, host, today's memory note, session summary, and retrieval
|
|
63
|
+
snippets moved out of the system prompt into a post-prefix user context block
|
|
64
|
+
so provider prefix caches can reuse the static system prompt.
|
|
65
|
+
- **Plugin discovery lists installable plugins**: `hybridclaw plugin list` and
|
|
66
|
+
`/plugin list` now show installed plugins plus bundled/project-local
|
|
67
|
+
installable plugins, with `installed` and `available` filters. Bare plugin
|
|
68
|
+
IDs resolve through bundled and project `plugins/` catalogs, with project
|
|
69
|
+
plugins taking priority.
|
|
70
|
+
- **Web chat sessions are easier to manage**: The chat sidebar can delete
|
|
71
|
+
stored browser sessions, and local web clients automatically refresh their
|
|
72
|
+
token when the gateway rotates the local web token.
|
|
73
|
+
- **TUI rendering handles Markdown tables**: The TUI now renders Markdown table
|
|
74
|
+
blocks as terminal tables while preserving ordinary assistant text flow.
|
|
75
|
+
|
|
76
|
+
### Fixed
|
|
77
|
+
|
|
78
|
+
- **Agents page navigation links**: Corrected broken links on the generated
|
|
79
|
+
agents page so navigation targets resolve properly.
|
|
80
|
+
- **Auxiliary provider fallback**: Auxiliary calls retry through the configured
|
|
81
|
+
fallback provider path, including active local-provider preference and clearer
|
|
82
|
+
fallback logging.
|
|
83
|
+
- **Global package install bootstrap**: Container dependency postinstall now
|
|
84
|
+
falls back to `npm` when the outer install was invoked by `pnpm`, avoiding
|
|
85
|
+
broken global package installs caused by forwarding the wrong package-manager
|
|
86
|
+
executable and lifecycle env.
|
|
87
|
+
- **pnpm install compatibility**: Dependency verification avoids the Baileys
|
|
88
|
+
libsignal Git dependency path that blocked `pnpm`-initiated installs.
|
|
89
|
+
- **Microsoft Teams optional dependency loading**: Teams Bot Framework support
|
|
90
|
+
is lazy-loaded so installs that do not use Microsoft Teams are not blocked by
|
|
91
|
+
that integration path.
|
|
92
|
+
- **Federated A2A duplicate handling**: Threads can now contain the same
|
|
93
|
+
envelope ID from different sender instances while ambiguous envelope lookups
|
|
94
|
+
fail fast unless the caller supplies `sender_instance_id`.
|
|
95
|
+
|
|
96
|
+
## [0.18.0](https://github.com/HybridAIOne/hybridclaw/tree/v0.18.0) - 2026-05-13
|
|
97
|
+
|
|
98
|
+
### Added
|
|
99
|
+
|
|
100
|
+
- **GA4 reporting skill**: Bundled `ga4` adds production Google Analytics 4
|
|
101
|
+
Data API reporting, request planning/review, gateway-injected bearer auth,
|
|
102
|
+
service-account support, traffic-source, landing-page, time-series, revenue,
|
|
103
|
+
session, and key-event reports, plus eval scenarios.
|
|
104
|
+
- **Hermes3000 long-form writing skill**: Bundled `hermes3000-writing` can
|
|
105
|
+
authenticate through the gateway secret rail, manage portal-backed book
|
|
106
|
+
projects, draft and revise chapters, update consistency memory, and export
|
|
107
|
+
DOCX/PDF/EPUB/HTML deliverables without exposing JWTs to the agent context.
|
|
108
|
+
- **Video-from-script skill**: Bundled `video.from-script` turns approved
|
|
109
|
+
avatar, voice, and script briefs into HeyGen MP4 jobs with planning, guarded
|
|
110
|
+
async render start, status polling, optional download, and credit-spend
|
|
111
|
+
approval gates.
|
|
112
|
+
- **Firecrawl self-host adapter**: The Firecrawl skill now supports
|
|
113
|
+
self-hosted Firecrawl origins alongside managed API mode, including optional
|
|
114
|
+
self-host auth for scrape, crawl, map, and extraction workflows.
|
|
115
|
+
- **Per-agent authenticated SearXNG search**: Agents can bind their own
|
|
116
|
+
SearXNG base URL and bearer-token SecretRef, with bearer injection routed
|
|
117
|
+
through the gateway HTTP proxy so tokens stay out of model context.
|
|
118
|
+
- **Reviewed skill unblock controls**: Blocked skills now appear in CLI, web,
|
|
119
|
+
and gateway skill listings, and local operators can run `skill unblock` or
|
|
120
|
+
use the Admin Skills page to record a reviewed scanner-bypass marker for an
|
|
121
|
+
installed copy.
|
|
122
|
+
- **Browser stealth host policy**: Camofox stealth browsing is deny-by-default
|
|
123
|
+
unless workspace policy explicitly allowlists the target host with
|
|
124
|
+
`browser.stealth.rules`.
|
|
125
|
+
- **Node version guardrails**: Source checkouts now include `.node-version`,
|
|
126
|
+
`.nvmrc`, and a `check:node` preflight so local builds and tests fail fast
|
|
127
|
+
when they are not running on Node.js 22.
|
|
128
|
+
|
|
129
|
+
### Changed
|
|
130
|
+
|
|
131
|
+
- **SecretRef handling is store-first**: Runtime SecretRefs now accept the
|
|
132
|
+
encrypted `store` source for new configuration. Legacy Browser Use Cloud
|
|
133
|
+
env-backed refs are canonicalized to stored SecretRefs, and malformed legacy
|
|
134
|
+
refs produce explicit configuration errors.
|
|
135
|
+
- **HybridAI auth diagnostics are clearer**: Provider discovery, health, bot
|
|
136
|
+
lookup, and doctor output distinguish auth, configuration, and remote service
|
|
137
|
+
failures more cleanly.
|
|
138
|
+
- **Web chat scrolling respects user position**: The chat UI now sticks to the
|
|
139
|
+
bottom only when appropriate, preserves pinned scroll position while users
|
|
140
|
+
read older content, and exposes a jump-to-latest affordance.
|
|
141
|
+
- **Console model-provider typing is narrower**: The chat model switcher no
|
|
142
|
+
longer shares broader gateway provider types that were not part of the
|
|
143
|
+
console UI contract.
|
|
144
|
+
- **Trace-judge live CI is less brittle**: Main-branch CI no longer blocks on
|
|
145
|
+
missing trace-judge live secrets.
|
|
146
|
+
|
|
147
|
+
### Fixed
|
|
148
|
+
|
|
149
|
+
- **SearXNG bearer leakage risk**: SearXNG bearer values are no longer exposed
|
|
150
|
+
through runtime env forwarding; configured SecretRefs are resolved only by
|
|
151
|
+
the gateway proxy at request time.
|
|
152
|
+
- **Camofox navigation scope**: Stealth browser sessions now enforce both safe
|
|
153
|
+
navigation schemes and host allowlisting before visiting a URL.
|
|
154
|
+
- **Browser credential fills**: SecretRef-backed browser fills require a
|
|
155
|
+
resolvable page URL and calling skill name so host, selector, skill, and
|
|
156
|
+
agent policy can be evaluated.
|
|
157
|
+
|
|
5
158
|
## [0.17.0](https://github.com/HybridAIOne/hybridclaw/tree/v0.17.0) - 2026-05-12
|
|
6
159
|
|
|
7
160
|
### 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,17 +107,20 @@ 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
|
|
114
|
+
- Web Chat keeps scrolling pinned when you read older messages and shows a
|
|
115
|
+
jump-to-latest affordance when new output arrives below the current viewport
|
|
113
116
|
- Web Chat accepts `/btw <question>` side questions while a primary run is
|
|
114
117
|
active, so you can ask an ephemeral follow-up without interrupting the
|
|
115
118
|
current run
|
|
116
119
|
- Admin Console: `http://127.0.0.1:9090/admin` for channels, versioned agent files,
|
|
117
120
|
scheduler, audit, statistics, config, and channel-specific instructions
|
|
118
121
|
- Agent Dashboard: `http://127.0.0.1:9090/agents`
|
|
119
|
-
- or connect
|
|
122
|
+
- or connect Discord, Discord Incoming Webhooks, Slack, Slack Incoming
|
|
123
|
+
Webhooks, Signal, WhatsApp, Telegram, Microsoft Teams, Email
|
|
120
124
|
|
|
121
125
|
## Operator workflows
|
|
122
126
|
|
|
@@ -147,6 +151,12 @@ Once the gateway is running, open HybridClaw locally:
|
|
|
147
151
|
- `/admin/channels` edits transport config, encrypted channel credentials,
|
|
148
152
|
Signal QR linking, Twilio voice settings, and per-channel instructions that
|
|
149
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.
|
|
150
160
|
- `/admin/approvals` manages approval policies from the browser.
|
|
151
161
|
- Approval policy evaluation runs through a hook-fed rule pipeline, so
|
|
152
162
|
workspace policy ordering and plugin tool-use hooks share one approval path.
|
|
@@ -158,6 +168,9 @@ Once the gateway is running, open HybridClaw locally:
|
|
|
158
168
|
local/manual full restarts.
|
|
159
169
|
- `/context` and the web chat context ring show current context-window usage,
|
|
160
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.
|
|
161
174
|
- `proactive.delegation.model` can pin delegated work to a different model
|
|
162
175
|
from the parent turn; `/status` shows delegate token totals and local-token
|
|
163
176
|
share when that split is configured.
|
|
@@ -181,9 +194,9 @@ Once the gateway is running, open HybridClaw locally:
|
|
|
181
194
|
- Generated artifacts remain downloadable and attachable even when the sandbox
|
|
182
195
|
exposes a custom workspace display root such as `/app`.
|
|
183
196
|
- `hybridclaw tui` includes live delegate progress, pulsing tool rows,
|
|
184
|
-
completion checkmarks, a keyboard-driven approval
|
|
185
|
-
`hybridclaw tui --resume <sessionId>` command on
|
|
186
|
-
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.
|
|
187
200
|
- `hybridclaw doctor` checks runtime health including resource hygiene
|
|
188
201
|
maintenance for stale gateway artifacts. `hybridclaw doctor browser-use`
|
|
189
202
|
checks the local Playwright browser automation substrate and can install
|
|
@@ -196,6 +209,9 @@ Once the gateway is running, open HybridClaw locally:
|
|
|
196
209
|
- `hybridclaw skill install <source>`, `skill upgrade`, `skill revisions`, and
|
|
197
210
|
`skill rollback` manage packaged business skills with manifests, audit
|
|
198
211
|
events, and snapshots.
|
|
212
|
+
- `hybridclaw skill list blocked` and `hybridclaw skill unblock <name>` let
|
|
213
|
+
local operators review scanner-blocked skills and record a bypass marker for
|
|
214
|
+
the installed copy when the finding has been accepted.
|
|
199
215
|
- The bundled tutorials cover owner, GTM, marketing, sales, DevRel, content,
|
|
200
216
|
invoicing, webinar, and release-launch workflows that can run from the TUI,
|
|
201
217
|
web chat, or connected channels.
|
|
@@ -225,8 +241,11 @@ Once the gateway is running, open HybridClaw locally:
|
|
|
225
241
|
encrypted runtime secret store and are passed into host or container agent
|
|
226
242
|
runtimes from the active config.
|
|
227
243
|
- Web search can also target a self-hosted SearXNG instance through
|
|
228
|
-
`web.search.searxngBaseUrl` or `SEARXNG_BASE_URL`;
|
|
229
|
-
|
|
244
|
+
`web.search.searxngBaseUrl` or `SEARXNG_BASE_URL`; authenticated instances
|
|
245
|
+
use store-backed SearXNG bearer SecretRefs, and agents can override the
|
|
246
|
+
global SearXNG base URL and bearer SecretRef for tenant-specific search.
|
|
247
|
+
Bundled `search.web`, `search.news`, and `search.images` skills prefer that
|
|
248
|
+
sovereign search path.
|
|
230
249
|
- Google OAuth credentials for Workspace skills live in the encrypted runtime
|
|
231
250
|
secret store; agent runtimes receive short-lived access tokens for `gog` and
|
|
232
251
|
`gws` instead of long-lived refresh tokens.
|
|
@@ -245,16 +264,26 @@ Once the gateway is running, open HybridClaw locally:
|
|
|
245
264
|
- Bundled skills include API-backed Google Workspace workflows (`gog`, `gws`),
|
|
246
265
|
Salesforce inspection, GitHub issue queue processing (`gh-issues`),
|
|
247
266
|
monthly SaaS invoice harvesting (`download-platform-invoices`), Airtable,
|
|
248
|
-
FastBill, Firecrawl, Google Ads,
|
|
249
|
-
|
|
267
|
+
FastBill, managed or self-hosted Firecrawl, Google Ads, GA4 reporting,
|
|
268
|
+
HeyGen, Hermes3000 long-form writing, natural-language warehouse SQL
|
|
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
|
|
250
272
|
creation.
|
|
251
273
|
- Native media tools generate images and videos through configured providers,
|
|
252
274
|
persist the resulting artifacts, and expose the same capability through the
|
|
253
|
-
bundled `image-generation` and `video-
|
|
275
|
+
bundled `image-generation`, `video-generation`, and `video.from-script`
|
|
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.
|
|
254
283
|
- Browser automation can use local persistent Playwright profiles, Camofox
|
|
255
284
|
profiles, or Browser Use Cloud sessions with encrypted `BROWSER_USE_API_KEY`
|
|
256
|
-
storage, usage metering, shared navigation guards,
|
|
257
|
-
|
|
285
|
+
storage, usage metering, shared navigation guards, SecretRef-gated credential
|
|
286
|
+
fills, and deny-by-default host allowlisting for Camofox stealth mode.
|
|
258
287
|
- The repo-shipped `brand-voice` plugin can flag, rewrite, or block final
|
|
259
288
|
responses that violate configured voice rules before they reach users.
|
|
260
289
|
- Built-in office skills handle longer PDF creation flows cleanly: the bundled
|
|
@@ -317,7 +346,7 @@ Once the gateway is running, open HybridClaw locally:
|
|
|
317
346
|
|
|
318
347
|
## Architecture
|
|
319
348
|
|
|
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
|
|
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
|
|
321
350
|
- **TUI client** — thin client over HTTP (`/api/chat`, `/api/command`) with
|
|
322
351
|
a structured startup banner that surfaces model, sandbox, gateway, and
|
|
323
352
|
chatbot context before the first prompt, live delegate status/progress,
|
|
@@ -350,7 +379,9 @@ Browse the full manual at
|
|
|
350
379
|
[Overview](https://hybridaione.github.io/hybridclaw/docs/channels/overview),
|
|
351
380
|
[Twilio Voice](https://hybridaione.github.io/hybridclaw/docs/guides/twilio-voice),
|
|
352
381
|
[Discord](https://hybridaione.github.io/hybridclaw/docs/channels/discord),
|
|
382
|
+
[Discord Incoming Webhook](https://hybridaione.github.io/hybridclaw/docs/channels/discord-webhook),
|
|
353
383
|
[Slack](https://hybridaione.github.io/hybridclaw/docs/channels/slack),
|
|
384
|
+
[Slack Incoming Webhook](https://hybridaione.github.io/hybridclaw/docs/channels/slack-webhook),
|
|
354
385
|
[Telegram](https://hybridaione.github.io/hybridclaw/docs/channels/telegram),
|
|
355
386
|
[Signal](https://hybridaione.github.io/hybridclaw/docs/channels/signal),
|
|
356
387
|
[Threema](https://hybridaione.github.io/hybridclaw/docs/channels/threema),
|
package/config.example.json
CHANGED
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
},
|
|
29
29
|
"browserUseCloud": {
|
|
30
30
|
"apiKeyRef": {
|
|
31
|
-
"source": "
|
|
31
|
+
"source": "store",
|
|
32
32
|
"id": "BROWSER_USE_API_KEY"
|
|
33
33
|
},
|
|
34
34
|
"baseUrl": "",
|
|
@@ -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}
|