@hybridaione/hybridclaw 0.12.6 → 0.12.7
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/AGENTS.md +20 -0
- package/CHANGELOG.md +116 -0
- package/README.md +20 -0
- package/config.example.json +45 -0
- package/console/dist/assets/{chat-BFZkUicV.js → chat-9p59eGtz.js} +1 -1
- package/console/dist/assets/index-DH54vb4K.css +1 -0
- package/console/dist/assets/{index-BLDth_j-.js → index-UavkasGt.js} +3 -3
- package/console/dist/assets/{terminal-BQbAhdr-.js → terminal-DeXdduvj.js} +1 -1
- package/console/dist/index.html +2 -2
- package/container/dist/index.js +2 -2
- package/container/dist/index.js.map +1 -1
- package/container/dist/model-retry.js +3 -3
- package/container/dist/model-retry.js.map +1 -1
- package/container/dist/providers/hybridai.js +3 -3
- package/container/dist/providers/hybridai.js.map +1 -1
- package/container/dist/providers/local-ollama.js +3 -3
- package/container/dist/providers/local-ollama.js.map +1 -1
- package/container/dist/providers/local-openai-compat.js +3 -3
- package/container/dist/providers/local-openai-compat.js.map +1 -1
- package/container/dist/providers/openai-codex.js +2 -2
- package/container/dist/providers/openai-codex.js.map +1 -1
- package/container/dist/providers/provider-ids.js +18 -0
- package/container/dist/providers/provider-ids.js.map +1 -1
- package/container/dist/providers/shared.js +4 -4
- package/container/package-lock.json +2 -2
- package/container/package.json +1 -1
- package/container/shared/model-names.js +9 -0
- package/container/src/index.ts +2 -2
- package/container/src/model-retry.ts +3 -3
- package/container/src/providers/hybridai.ts +3 -3
- package/container/src/providers/local-ollama.ts +3 -3
- package/container/src/providers/local-openai-compat.ts +3 -3
- package/container/src/providers/openai-codex.ts +2 -2
- package/container/src/providers/provider-ids.ts +21 -4
- package/container/src/providers/shared.ts +4 -4
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.js +8 -0
- package/dist/agent/agent.js.map +1 -1
- package/dist/cli/auth-command.d.ts.map +1 -1
- package/dist/cli/auth-command.js +205 -4
- package/dist/cli/auth-command.js.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +1 -0
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/plugin-command.d.ts.map +1 -1
- package/dist/cli/plugin-command.js +12 -17
- package/dist/cli/plugin-command.js.map +1 -1
- package/dist/command-registry.d.ts.map +1 -1
- package/dist/command-registry.js +73 -6
- package/dist/command-registry.js.map +1 -1
- package/dist/config/config.d.ts +27 -0
- package/dist/config/config.d.ts.map +1 -1
- package/dist/config/config.js +77 -1
- package/dist/config/config.js.map +1 -1
- package/dist/config/runtime-config.d.ts +46 -0
- package/dist/config/runtime-config.d.ts.map +1 -1
- package/dist/config/runtime-config.js +161 -1
- package/dist/config/runtime-config.js.map +1 -1
- package/dist/doctor/provider-probes.d.ts.map +1 -1
- package/dist/doctor/provider-probes.js +15 -7
- package/dist/doctor/provider-probes.js.map +1 -1
- package/dist/doctor/utils.d.ts +1 -1
- package/dist/doctor/utils.d.ts.map +1 -1
- package/dist/doctor/utils.js +3 -3
- package/dist/doctor/utils.js.map +1 -1
- package/dist/gateway/docs.d.ts.map +1 -1
- package/dist/gateway/docs.js +112 -0
- package/dist/gateway/docs.js.map +1 -1
- package/dist/gateway/gateway-chat-service.d.ts.map +1 -1
- package/dist/gateway/gateway-chat-service.js +12 -2
- package/dist/gateway/gateway-chat-service.js.map +1 -1
- package/dist/gateway/gateway-http-proxy.d.ts.map +1 -1
- package/dist/gateway/gateway-http-proxy.js +1 -1
- package/dist/gateway/gateway-http-proxy.js.map +1 -1
- package/dist/gateway/gateway-plugin-service.d.ts.map +1 -1
- package/dist/gateway/gateway-plugin-service.js +13 -1
- package/dist/gateway/gateway-plugin-service.js.map +1 -1
- package/dist/gateway/gateway-provider-service.d.ts +10 -0
- package/dist/gateway/gateway-provider-service.d.ts.map +1 -0
- package/dist/gateway/gateway-provider-service.js +139 -0
- package/dist/gateway/gateway-provider-service.js.map +1 -0
- package/dist/gateway/gateway-service.d.ts.map +1 -1
- package/dist/gateway/gateway-service.js +78 -191
- package/dist/gateway/gateway-service.js.map +1 -1
- package/dist/gateway/gateway-types.d.ts +2 -1
- package/dist/gateway/gateway-types.d.ts.map +1 -1
- package/dist/gateway/gateway-types.js.map +1 -1
- package/dist/gateway/gateway.js +5 -0
- package/dist/gateway/gateway.js.map +1 -1
- package/dist/gateway/skill-commands.d.ts.map +1 -1
- package/dist/gateway/skill-commands.js +75 -1
- package/dist/gateway/skill-commands.js.map +1 -1
- package/dist/infra/container-runner.d.ts.map +1 -1
- package/dist/infra/container-runner.js +8 -0
- 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 +8 -0
- package/dist/infra/host-runner.js.map +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +7 -0
- package/dist/logger.js.map +1 -1
- package/dist/migration/agent-home-migration.d.ts.map +1 -1
- package/dist/migration/agent-home-migration.js +5 -3
- package/dist/migration/agent-home-migration.js.map +1 -1
- package/dist/observability/otel.d.ts +36 -0
- package/dist/observability/otel.d.ts.map +1 -0
- package/dist/observability/otel.js +145 -0
- package/dist/observability/otel.js.map +1 -0
- package/dist/plugins/plugin-dependencies.d.ts +4 -1
- package/dist/plugins/plugin-dependencies.d.ts.map +1 -1
- package/dist/plugins/plugin-dependencies.js +18 -8
- package/dist/plugins/plugin-dependencies.js.map +1 -1
- package/dist/plugins/plugin-install.d.ts +6 -0
- package/dist/plugins/plugin-install.d.ts.map +1 -1
- package/dist/plugins/plugin-install.js +31 -7
- package/dist/plugins/plugin-install.js.map +1 -1
- package/dist/providers/codex-constants.d.ts +1 -0
- package/dist/providers/codex-constants.d.ts.map +1 -1
- package/dist/providers/codex-constants.js +6 -0
- package/dist/providers/codex-constants.js.map +1 -1
- package/dist/providers/codex-discovery.d.ts.map +1 -1
- package/dist/providers/codex-discovery.js +17 -5
- package/dist/providers/codex-discovery.js.map +1 -1
- package/dist/providers/factory.d.ts.map +1 -1
- package/dist/providers/factory.js +11 -1
- package/dist/providers/factory.js.map +1 -1
- package/dist/providers/huggingface-discovery.d.ts.map +1 -1
- package/dist/providers/huggingface-discovery.js +5 -2
- package/dist/providers/huggingface-discovery.js.map +1 -1
- package/dist/providers/huggingface-utils.d.ts +0 -3
- package/dist/providers/huggingface-utils.d.ts.map +1 -1
- package/dist/providers/huggingface-utils.js +0 -9
- package/dist/providers/huggingface-utils.js.map +1 -1
- package/dist/providers/huggingface.d.ts.map +1 -1
- package/dist/providers/huggingface.js +5 -2
- package/dist/providers/huggingface.js.map +1 -1
- package/dist/providers/mistral-discovery.d.ts.map +1 -1
- package/dist/providers/mistral-discovery.js +5 -2
- package/dist/providers/mistral-discovery.js.map +1 -1
- package/dist/providers/mistral-utils.d.ts +0 -3
- package/dist/providers/mistral-utils.d.ts.map +1 -1
- package/dist/providers/mistral-utils.js +0 -5
- package/dist/providers/mistral-utils.js.map +1 -1
- package/dist/providers/mistral.d.ts.map +1 -1
- package/dist/providers/mistral.js +3 -2
- package/dist/providers/mistral.js.map +1 -1
- package/dist/providers/model-catalog.d.ts +1 -5
- package/dist/providers/model-catalog.d.ts.map +1 -1
- package/dist/providers/model-catalog.js +80 -20
- package/dist/providers/model-catalog.js.map +1 -1
- package/dist/providers/model-names.d.ts +1 -0
- package/dist/providers/model-names.d.ts.map +1 -1
- package/dist/providers/model-names.js +5 -0
- package/dist/providers/model-names.js.map +1 -1
- package/dist/providers/openai-compat-discovery.d.ts +20 -0
- package/dist/providers/openai-compat-discovery.d.ts.map +1 -0
- package/dist/providers/openai-compat-discovery.js +183 -0
- package/dist/providers/openai-compat-discovery.js.map +1 -0
- package/dist/providers/openai-compat-remote.d.ts +27 -0
- package/dist/providers/openai-compat-remote.d.ts.map +1 -0
- package/dist/providers/openai-compat-remote.js +171 -0
- package/dist/providers/openai-compat-remote.js.map +1 -0
- package/dist/providers/openrouter-discovery.d.ts.map +1 -1
- package/dist/providers/openrouter-discovery.js +5 -2
- package/dist/providers/openrouter-discovery.js.map +1 -1
- package/dist/providers/openrouter-utils.d.ts +0 -3
- package/dist/providers/openrouter-utils.d.ts.map +1 -1
- package/dist/providers/openrouter-utils.js +0 -5
- package/dist/providers/openrouter-utils.js.map +1 -1
- package/dist/providers/openrouter.js +3 -2
- package/dist/providers/openrouter.js.map +1 -1
- package/dist/providers/provider-aliases.d.ts +4 -0
- package/dist/providers/provider-aliases.d.ts.map +1 -0
- package/dist/providers/provider-aliases.js +25 -0
- package/dist/providers/provider-aliases.js.map +1 -0
- package/dist/providers/provider-ids.d.ts +3 -3
- package/dist/providers/provider-ids.d.ts.map +1 -1
- package/dist/providers/provider-ids.js +18 -0
- package/dist/providers/provider-ids.js.map +1 -1
- package/dist/providers/task-routing.d.ts.map +1 -1
- package/dist/providers/task-routing.js +13 -16
- package/dist/providers/task-routing.js.map +1 -1
- package/dist/security/runtime-secrets.d.ts +1 -1
- package/dist/security/runtime-secrets.d.ts.map +1 -1
- package/dist/security/runtime-secrets.js +8 -0
- package/dist/security/runtime-secrets.js.map +1 -1
- package/dist/skills/skills.d.ts.map +1 -1
- package/dist/skills/skills.js +4 -0
- package/dist/skills/skills.js.map +1 -1
- package/dist/tui-slash-command.d.ts.map +1 -1
- package/dist/tui-slash-command.js +2 -0
- package/dist/tui-slash-command.js.map +1 -1
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +19 -13
- package/dist/tui.js.map +1 -1
- package/dist/utils/text-format.d.ts +1 -0
- package/dist/utils/text-format.d.ts.map +1 -1
- package/dist/utils/text-format.js +3 -0
- package/dist/utils/text-format.js.map +1 -1
- package/dist/workspace.d.ts +17 -0
- package/dist/workspace.d.ts.map +1 -1
- package/dist/workspace.js +55 -0
- package/dist/workspace.js.map +1 -1
- package/docs/content/README.md +14 -12
- package/docs/content/agents.md +4 -0
- package/docs/content/developer-guide/runtime.md +19 -0
- package/docs/content/extensibility/README.md +4 -2
- package/docs/content/extensibility/byterover-memory-plugin.md +390 -0
- package/docs/content/extensibility/gbrain-plugin.md +89 -3
- package/docs/content/extensibility/honcho-memory-plugin.md +88 -2
- package/docs/content/extensibility/mem0-memory-plugin.md +180 -0
- package/docs/content/extensibility/memory-plugins.md +142 -0
- package/docs/content/extensibility/mempalace-memory-plugin.md +113 -2
- package/docs/content/extensibility/plugins.md +7 -0
- package/docs/content/extensibility/qmd-memory-plugin.md +98 -4
- package/docs/content/getting-started/authentication.md +38 -6
- package/docs/content/guides/bundled-skills.md +4 -2
- package/docs/content/guides/office-dependencies.md +1 -1
- package/docs/content/guides/remote-access.md +1 -1
- package/docs/content/guides/skills/README.md +45 -0
- package/docs/content/guides/skills/apple.md +112 -0
- package/docs/content/guides/skills/communication.md +82 -0
- package/docs/content/guides/skills/development.md +175 -0
- package/docs/content/guides/skills/integrations.md +249 -0
- package/docs/content/guides/skills/memory-knowledge.md +189 -0
- package/docs/content/guides/skills/office.md +248 -0
- package/docs/content/guides/skills/productivity.md +116 -0
- package/docs/content/guides/skills/publishing.md +136 -0
- package/docs/content/guides/twilio-voice.md +1 -1
- package/docs/content/guides/voice-tts.md +1 -1
- package/docs/content/reference/commands.md +20 -1
- package/docs/content/reference/configuration.md +7 -1
- package/docs/content/reference/faq.md +5 -3
- package/docs/content/reference/model-selection.md +50 -2
- package/docs/development/agents.md +2 -0
- package/docs/development/extensibility/README.md +2 -2
- package/docs/development/extensibility/byterover-memory-plugin.md +390 -0
- package/docs/development/extensibility/gbrain-plugin.md +89 -3
- package/docs/development/extensibility/honcho-memory-plugin.md +88 -2
- package/docs/development/extensibility/mem0-memory-plugin.md +180 -0
- package/docs/development/extensibility/memory-plugins.md +128 -0
- package/docs/development/extensibility/mempalace-memory-plugin.md +133 -2
- package/docs/development/extensibility/plugins.md +7 -0
- package/docs/development/extensibility/qmd-memory-plugin.md +117 -4
- package/docs/development/getting-started/authentication.md +38 -6
- package/docs/development/guides/bundled-skills.md +4 -2
- package/docs/development/guides/office-dependencies.md +1 -1
- package/docs/development/guides/remote-access.md +1 -1
- package/docs/development/guides/skills/README.md +45 -0
- package/docs/development/guides/skills/apple.md +112 -0
- package/docs/development/guides/skills/communication.md +82 -0
- package/docs/development/guides/skills/development.md +175 -0
- package/docs/development/guides/skills/integrations.md +249 -0
- package/docs/development/guides/skills/memory-knowledge.md +189 -0
- package/docs/development/guides/skills/office.md +248 -0
- package/docs/development/guides/skills/productivity.md +116 -0
- package/docs/development/guides/skills/publishing.md +136 -0
- package/docs/development/guides/twilio-voice.md +1 -1
- package/docs/development/guides/voice-tts.md +1 -1
- package/docs/development/reference/commands.md +11 -1
- package/docs/development/reference/configuration.md +3 -1
- package/docs/development/reference/faq.md +5 -3
- package/docs/development/reference/model-selection.md +41 -2
- package/docs/static/docs.css +84 -0
- package/docs/static/docs.js +135 -15
- package/package.json +7 -1
- package/skills/pdf/SKILL.md +4 -55
- package/console/dist/assets/index-BFbE8-iL.css +0 -1
- package/skills/salesforce/scripts/__pycache__/salesforce_query.cpython-314.pyc +0 -0
package/AGENTS.md
CHANGED
|
@@ -91,6 +91,26 @@ User message → Gateway (HTTP/Discord) → ContainerInput (JSON)
|
|
|
91
91
|
| Approval rule | `.hybridclaw/policy.yaml` | §7.4 |
|
|
92
92
|
| Template | `templates/<name>.md` + `src/workspace.ts` | §7.5 |
|
|
93
93
|
|
|
94
|
+
### OpenTelemetry (Distributed Tracing)
|
|
95
|
+
|
|
96
|
+
The gateway supports optional OpenTelemetry instrumentation for distributed
|
|
97
|
+
tracing in cloud deployments. OTel is OFF by default (zero overhead).
|
|
98
|
+
|
|
99
|
+
| Env Var | Purpose |
|
|
100
|
+
|----------------------------------|--------------------------------------------------------------|
|
|
101
|
+
| `OTEL_ENABLED=true` | Enable OTel SDK initialization |
|
|
102
|
+
| `OTEL_EXPORTER_OTLP_ENDPOINT` | OTLP collector endpoint (also enables OTel if set) |
|
|
103
|
+
| `OTEL_EXPORTER_OTLP_PROTOCOL` | `grpc` (default) or `http/protobuf` |
|
|
104
|
+
| `OTEL_SERVICE_NAME` | Service name reported in spans (default: `hybridclaw-gateway`)|
|
|
105
|
+
|
|
106
|
+
When enabled, spans are emitted for: gateway message handling, agent runs,
|
|
107
|
+
host/container execution, and skill loading. Trace context (traceId, spanId)
|
|
108
|
+
is injected into structured log lines for correlation.
|
|
109
|
+
|
|
110
|
+
Implementation: `src/observability/otel.ts`. The SDK packages
|
|
111
|
+
(`@opentelemetry/sdk-node`, exporters) are dynamically imported only when
|
|
112
|
+
OTel is active.
|
|
113
|
+
|
|
94
114
|
---
|
|
95
115
|
|
|
96
116
|
## 3) Engineering Principles
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,117 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## Unreleased
|
|
4
|
+
|
|
5
|
+
## [0.12.7](https://github.com/HybridAIOne/hybridclaw/tree/v0.12.7)
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- **Nine new external API providers**: Google Gemini (`gemini/`), DeepSeek
|
|
10
|
+
(`deepseek/`), xAI / Grok (`xai/`), Z.AI / GLM (`zai/`), Kimi / Moonshot
|
|
11
|
+
(`kimi/`), MiniMax (`minimax/`), DashScope / Qwen (`dashscope/`), Xiaomi
|
|
12
|
+
MiMo (`xiaomi/`), and Kilo Code (`kilo/`). Each provider supports
|
|
13
|
+
`auth login`, `auth status`, and `auth logout` with `--api-key`,
|
|
14
|
+
`--base-url`, `--model`, and `--no-default` flags, plus full runtime config
|
|
15
|
+
enablement and model-prefix routing.
|
|
16
|
+
- **Runtime model discovery for OpenAI-compat remote providers**: The nine
|
|
17
|
+
providers above now auto-discover their current model lineups at runtime
|
|
18
|
+
via `GET <baseUrl>/models` and surface them through `/model list <provider>`
|
|
19
|
+
alongside any user-pinned entries in `<provider>.models`. Discovered models
|
|
20
|
+
are cached for one hour, deduplicated with pinned entries, and silently
|
|
21
|
+
fall back to the configured list if the provider's `/v1/models` endpoint is
|
|
22
|
+
unreachable, absent (404), or otherwise errors.
|
|
23
|
+
- **ByteRover memory plugin**: New bundled `byterover-memory` external memory
|
|
24
|
+
provider that injects prompt-time recall through `brv query`, exposes
|
|
25
|
+
`brv_query` / `brv_curate` / `brv_status` model tools, and curates
|
|
26
|
+
completed turns, native memory writes, and pre-compaction summaries into
|
|
27
|
+
ByteRover's Context Tree. Works offline by default with optional cloud sync.
|
|
28
|
+
- **Mem0 memory plugin**: New bundled `mem0-memory` external memory provider
|
|
29
|
+
that layers Mem0 profile and search recall on top of built-in memory,
|
|
30
|
+
exposes `mem0_profile` / `mem0_search` / `mem0_conclude` tools and a local
|
|
31
|
+
`/mem0 ...` command surface, mirrors completed turns and explicit native
|
|
32
|
+
memory writes into Mem0, prefetches profile context on `session_start`, and
|
|
33
|
+
curates compaction snapshots before older turns are archived.
|
|
34
|
+
- **Skill availability controls**: Added `hybridclaw skill enable <name>
|
|
35
|
+
[--channel <kind>]`, `hybridclaw skill disable <name> [--channel <kind>]`,
|
|
36
|
+
interactive TUI `/skill config` toggles, and matching gateway slash-command
|
|
37
|
+
support for enabling or disabling skills globally or per channel.
|
|
38
|
+
- **OpenTelemetry distributed tracing**: The gateway can now emit spans for
|
|
39
|
+
message handling, agent runs, host/container execution, and skill loading to
|
|
40
|
+
OTLP collectors when `OTEL_ENABLED=true` or
|
|
41
|
+
`OTEL_EXPORTER_OTLP_ENDPOINT` is set, with `traceId` / `spanId` correlation
|
|
42
|
+
injected into structured logs.
|
|
43
|
+
- **Memory plugin and skills docs expansion**: Added a memory-plugin
|
|
44
|
+
comparison guide, per-category bundled-skills guides, and richer browser
|
|
45
|
+
docs prompt blocks with copy buttons and styled callouts.
|
|
46
|
+
|
|
47
|
+
### Changed
|
|
48
|
+
|
|
49
|
+
- **Model and provider surfaces now share one registry**: `/model list`,
|
|
50
|
+
`/model info`, provider status output, and `/admin/models` now use the same
|
|
51
|
+
data-driven provider catalog, show model counts consistently, and sort
|
|
52
|
+
enabled or reachable providers first in the admin console.
|
|
53
|
+
- **Fresh installs default HybridAI to `gpt-5.4-mini`**: New runtime homes now
|
|
54
|
+
seed `hybridai.defaultModel` from the shared `DEFAULT_HYBRIDAI_MODEL`
|
|
55
|
+
constant so onboarding, migration, and fresh-install defaults stay aligned.
|
|
56
|
+
- **Kilo Code base URL migrated to `https://api.kilo.ai/api/gateway`**: The
|
|
57
|
+
retired `api.kilocode.ai` host now serves a marketing site, so the default
|
|
58
|
+
Kilo Code base URL has been updated across `config.ts`, the runtime config
|
|
59
|
+
defaults, the `auth login kilo` normalizer (suffix `/api/gateway`), and
|
|
60
|
+
`config.example.json`. Persisted runtime configs still pointing at
|
|
61
|
+
`https://api.kilocode.ai/v1` are silently migrated to the new URL on load
|
|
62
|
+
so existing installations self-heal.
|
|
63
|
+
- **Codex model catalog handling is more resilient**: HybridClaw now pins the
|
|
64
|
+
`client_version` needed for the full upstream Codex catalog and ships static
|
|
65
|
+
supplemental entries for UI-known Codex variants when the upstream list is
|
|
66
|
+
temporarily incomplete.
|
|
67
|
+
- **Renamed `HybridAIRequestError` → `ProviderRequestError`**: The error class
|
|
68
|
+
wraps failures from every OpenAI-compat provider (HybridAI, OpenRouter,
|
|
69
|
+
Mistral, Kilo Code, local Ollama, etc.), so the HybridAI-specific name was
|
|
70
|
+
misleading. The error-message prefix now reads `Provider API error <status>`
|
|
71
|
+
instead of `HybridAI API error <status>`. `HybridAIRequestError` is kept as
|
|
72
|
+
a deprecated alias for backward compatibility; new code should import
|
|
73
|
+
`ProviderRequestError` directly.
|
|
74
|
+
- **Simpler `formatModelForDisplay` rule**: Models that already carry a
|
|
75
|
+
provider prefix (`kilo/...`, `gemini/...`, etc.) no longer incorrectly pick
|
|
76
|
+
up a leading `hybridai/`. The function now treats any slash-containing
|
|
77
|
+
non-`hybridai/` model as already-namespaced, removing the fragile
|
|
78
|
+
`NON_HYBRID_PROVIDER_PREFIXES` whitelist dependency for this path.
|
|
79
|
+
- **TUI reply metadata is clearer**: The usage footer now shows the active
|
|
80
|
+
skill name alongside tools and plugins when a response was driven by a
|
|
81
|
+
skill.
|
|
82
|
+
- **Plugin dependency checks are quieter**: `plugin install` and
|
|
83
|
+
`plugin check` now treat global binaries as satisfying declared
|
|
84
|
+
dependencies, skipping unnecessary npm or pip installs and approval prompts
|
|
85
|
+
when the required executable is already on `PATH`.
|
|
86
|
+
- **Memory plugin docs standardized**: All six memory-plugin doc pages now follow
|
|
87
|
+
the same structure: Prerequisites, HybridClaw Setup, Config, Commands,
|
|
88
|
+
Example Prompts & Use Cases, Tips & Tricks, and Troubleshooting. Added
|
|
89
|
+
external links, local vs cloud options, and researched tips for each.
|
|
90
|
+
- **Browser docs prompt UX expanded**: The docs shell now groups tips and
|
|
91
|
+
multi-step prompts into styled callouts, adds copy buttons for try-it
|
|
92
|
+
blocks, and publishes bundled-skill pages grouped by category.
|
|
93
|
+
|
|
94
|
+
### Fixed
|
|
95
|
+
|
|
96
|
+
- **Bundled ESM skill scripts resolve repo-managed dependencies in the
|
|
97
|
+
sandbox**: Source-checkout container runs now symlink the workspace
|
|
98
|
+
`node_modules` directory into the agent workspace so bundled skill scripts
|
|
99
|
+
can import repo dependencies consistently inside Docker.
|
|
100
|
+
- **`/auth status` suggestions list every supported provider**: Slash-command
|
|
101
|
+
provider completion and status suggestions now include the full provider set
|
|
102
|
+
instead of omitting newer backends.
|
|
103
|
+
- **Mem0 sync no longer sends unsupported `app_id` fields**: Stored-turn
|
|
104
|
+
mirroring and later recall now work against Mem0's accepted write shape.
|
|
105
|
+
- **Dream consolidation works for cloud sessions**: `/dream` memory
|
|
106
|
+
consolidation now runs correctly when the session is backed by cloud state.
|
|
107
|
+
- **Fresh-install model migration tracks the shared default constant**:
|
|
108
|
+
Migration logic now respects `DEFAULT_HYBRIDAI_MODEL` instead of relying on
|
|
109
|
+
a stale sentinel when deciding whether a runtime home is still on the
|
|
110
|
+
original default model.
|
|
111
|
+
- **Browser docs renderer edge cases**: Separate callout blocks no longer
|
|
112
|
+
merge together, copy actions strip leading numbering more reliably, and the
|
|
113
|
+
docs copy icon renders and positions consistently across browsers.
|
|
114
|
+
|
|
3
115
|
## [0.12.6](https://github.com/HybridAIOne/hybridclaw/tree/v0.12.6)
|
|
4
116
|
|
|
5
117
|
### Added
|
|
@@ -129,6 +241,10 @@
|
|
|
129
241
|
- **Immediate one-shot scheduler jobs**: Added config-backed `one_shot` jobs
|
|
130
242
|
that run immediately, retry up to `maxRetries`, preserve review state, and
|
|
131
243
|
surface richer delivery output across the gateway and admin scheduler UI.
|
|
244
|
+
- **Mem0 memory plugin**: Added a bundled `mem0-memory` plugin so local
|
|
245
|
+
HybridClaw installs can mirror turns into Mem0 cloud memory, inject
|
|
246
|
+
prompt-time Mem0 recall, expose `mem0_*` tools, and mirror explicit native
|
|
247
|
+
memory writes back into Mem0.
|
|
132
248
|
|
|
133
249
|
### Changed
|
|
134
250
|
|
package/README.md
CHANGED
|
@@ -121,6 +121,23 @@ Once the gateway is running, open HybridClaw locally:
|
|
|
121
121
|
honor server `Retry-After` backoff, and WhatsApp startup avoids intermittent
|
|
122
122
|
init-query bad-request failures.
|
|
123
123
|
|
|
124
|
+
## Models, Skills, and Memory
|
|
125
|
+
|
|
126
|
+
- `hybridclaw auth login` and `/model list` cover HybridAI, Codex, OpenRouter,
|
|
127
|
+
Mistral, Hugging Face, Gemini, DeepSeek, xAI, Z.AI, Kimi, MiniMax,
|
|
128
|
+
DashScope, Xiaomi, Kilo Code, and local backends such as Ollama, LM Studio,
|
|
129
|
+
llama.cpp, and vLLM. Remote OpenAI-compatible providers can merge
|
|
130
|
+
runtime-discovered model catalogs with operator-pinned lists.
|
|
131
|
+
- Skills can be enabled or disabled globally or per channel from
|
|
132
|
+
`hybridclaw skill enable|disable`, TUI `/skill config`, or the admin
|
|
133
|
+
`Skills` page.
|
|
134
|
+
- Built-in memory can stay standalone or layer with ByteRover, Mem0, Honcho,
|
|
135
|
+
MemPalace, QMD, and GBrain plugins depending on whether you want
|
|
136
|
+
local-first recall, hosted memory, or domain-specific retrieval.
|
|
137
|
+
- Optional OpenTelemetry tracing exports gateway and agent spans to OTLP
|
|
138
|
+
backends and annotates structured logs with trace ids for cross-system
|
|
139
|
+
correlation.
|
|
140
|
+
|
|
124
141
|
## How HybridClaw compares
|
|
125
142
|
|
|
126
143
|
| Capability | HybridClaw | OpenClaw | Hermes Agent |
|
|
@@ -211,7 +228,10 @@ Browse the full manual at
|
|
|
211
228
|
[Extensibility](https://www.hybridclaw.io/docs/extensibility),
|
|
212
229
|
[Bundled Skills](https://www.hybridclaw.io/docs/guides/bundled-skills),
|
|
213
230
|
[Plugin System](https://www.hybridclaw.io/docs/extensibility/plugins),
|
|
231
|
+
[Memory Plugins](https://www.hybridclaw.io/docs/extensibility/memory-plugins),
|
|
232
|
+
[ByteRover Memory Plugin](https://www.hybridclaw.io/docs/extensibility/byterover-memory-plugin),
|
|
214
233
|
[GBrain Plugin](https://www.hybridclaw.io/docs/extensibility/gbrain-plugin),
|
|
234
|
+
[Mem0 Memory Plugin](https://www.hybridclaw.io/docs/extensibility/mem0-memory-plugin),
|
|
215
235
|
[Honcho Memory Plugin](https://www.hybridclaw.io/docs/extensibility/honcho-memory-plugin), and
|
|
216
236
|
[MemPalace Memory Plugin](https://www.hybridclaw.io/docs/extensibility/mempalace-memory-plugin)
|
|
217
237
|
- Configuration:
|
package/config.example.json
CHANGED
|
@@ -246,6 +246,51 @@
|
|
|
246
246
|
"baseUrl": "https://router.huggingface.co/v1",
|
|
247
247
|
"models": ["huggingface/meta-llama/Llama-3.1-8B-Instruct"]
|
|
248
248
|
},
|
|
249
|
+
"gemini": {
|
|
250
|
+
"enabled": false,
|
|
251
|
+
"baseUrl": "https://generativelanguage.googleapis.com/v1beta/openai",
|
|
252
|
+
"models": ["gemini/gemini-2.5-pro"]
|
|
253
|
+
},
|
|
254
|
+
"deepseek": {
|
|
255
|
+
"enabled": false,
|
|
256
|
+
"baseUrl": "https://api.deepseek.com/v1",
|
|
257
|
+
"models": ["deepseek/deepseek-chat"]
|
|
258
|
+
},
|
|
259
|
+
"xai": {
|
|
260
|
+
"enabled": false,
|
|
261
|
+
"baseUrl": "https://api.x.ai/v1",
|
|
262
|
+
"models": ["xai/grok-3"]
|
|
263
|
+
},
|
|
264
|
+
"zai": {
|
|
265
|
+
"enabled": false,
|
|
266
|
+
"baseUrl": "https://api.z.ai/api/paas/v4",
|
|
267
|
+
"models": ["zai/glm-5.1"]
|
|
268
|
+
},
|
|
269
|
+
"kimi": {
|
|
270
|
+
"enabled": false,
|
|
271
|
+
"baseUrl": "https://api.moonshot.ai/v1",
|
|
272
|
+
"models": ["kimi/kimi-k2.5"]
|
|
273
|
+
},
|
|
274
|
+
"minimax": {
|
|
275
|
+
"enabled": false,
|
|
276
|
+
"baseUrl": "https://api.minimax.io/v1",
|
|
277
|
+
"models": ["minimax/MiniMax-M2"]
|
|
278
|
+
},
|
|
279
|
+
"dashscope": {
|
|
280
|
+
"enabled": false,
|
|
281
|
+
"baseUrl": "https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
|
|
282
|
+
"models": ["dashscope/qwen3-coder-plus"]
|
|
283
|
+
},
|
|
284
|
+
"xiaomi": {
|
|
285
|
+
"enabled": false,
|
|
286
|
+
"baseUrl": "https://api.xiaomimimo.com/v1",
|
|
287
|
+
"models": ["xiaomi/MiMo-7B-RL"]
|
|
288
|
+
},
|
|
289
|
+
"kilo": {
|
|
290
|
+
"enabled": false,
|
|
291
|
+
"baseUrl": "https://api.kilo.ai/api/gateway",
|
|
292
|
+
"models": ["kilo/anthropic/claude-sonnet-4.6"]
|
|
293
|
+
},
|
|
249
294
|
"local": {
|
|
250
295
|
"backends": {
|
|
251
296
|
"ollama": {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e,t}from"./rolldown-runtime-DF2fYuay.js";import{T as n,a as r,i,n as a}from"./query-DYNohPrB.js";import{B as o,V as s,at as c,m as l,r as u,rt as d,s as f,t as p}from"./cx-Dzb14TPi.js";import{t as m}from"./index-
|
|
1
|
+
import{n as e,t}from"./rolldown-runtime-DF2fYuay.js";import{T as n,a as r,i,n as a}from"./query-DYNohPrB.js";import{B as o,V as s,at as c,m as l,r as u,rt as d,s as f,t as p}from"./cx-Dzb14TPi.js";import{t as m}from"./index-UavkasGt.js";var h=e(n(),1);function g(e,t,n=`web`,r=10){return s(`/api/chat/recent?${new URLSearchParams({userId:t,channelId:n,limit:String(r)}).toString()}`,{token:e})}function _(e,t,n=80){return s(`/api/history?${new URLSearchParams({sessionId:t,limit:String(n)}).toString()}`,{token:e})}function v(e,t){return s(t?`/api/chat/commands?q=${encodeURIComponent(t)}`:`/api/chat/commands`,{token:e})}function y(e,t,n){return s(`/api/chat/branch`,{token:e,method:`POST`,body:{sessionId:t,beforeMessageId:n}})}function b(e,t,n,r){return s(`/api/command`,{token:e,method:`POST`,body:f({sessionId:t,args:r,userId:n,username:`web`})})}function x(e,t){return s(`/api/media/upload`,{token:e,method:`POST`,rawBody:t,extraHeaders:{"Content-Type":t.type||`application/octet-stream`,"X-Hybridclaw-Filename":encodeURIComponent(t.name||`upload`)}})}function S(e){return`/api/artifact?${new URLSearchParams({path:e}).toString()}`}async function C(e,t){let n=await fetch(S(t),{headers:o(e),cache:`no-store`});if(!n.ok){let e=(n.headers.get(`content-type`)||``).toLowerCase().trim(),t=`${n.status} ${n.statusText}`;if(e.includes(`application/json`)){let e=await n.json().catch(()=>null);t=e?.error||e?.text||t}else{let e=(await n.text().catch(()=>``)).trim();e&&(t=e)}throw n.status===401&&l(t),Error(t)}return n.blob()}var w=`main`;function T(e){let t=new Uint8Array(e);return crypto.getRandomValues(t),Array.from(t,e=>e.toString(16).padStart(2,`0`)).join(``)}function E(e=w){let t=e.trim().toLowerCase();return`agent:${encodeURIComponent(t)}:channel:web:chat:dm:peer:${T(8)}`}function D(){let e=`hybridclaw_user_id`,t=localStorage.getItem(e);if(t)return t;let n=`web-user-${T(4)}`;return localStorage.setItem(e,n),n}function O(){return localStorage.getItem(`hybridclaw_session`)??``}function k(e){localStorage.setItem(`hybridclaw_session`,e)}var A=0;function j(){return A+=1,`local-${A}-${Date.now()}`}function M(e){navigator.clipboard?.writeText(e).catch(()=>{let t=document.createElement(`textarea`);t.value=e,t.style.position=`fixed`,t.style.opacity=`0`,document.body.appendChild(t),t.select(),document.execCommand(`copy`),document.body.removeChild(t)})}function N(e){if(!e)return``;if(e.summary)return e.summary;let t=[];return e.intent&&t.push(`Approval needed for: ${e.intent}`),e.reason&&t.push(`Why: ${e.reason}`),t.push(`Approval ID: ${e.approvalId}`),t.join(`
|
|
2
2
|
`)}var P={once:`/approve once`,always:`/approve always`,session:`/approve session`,agent:`/approve agent`,all:`/approve all`,deny:`/approve no`};function F(e,t){let n=P[e];if(!n)return null;let r=t.trim();return r?`${n} ${r}`:n}function I(e){return(e.name??``).trim()||`clipboard${{"application/pdf":`.pdf`,"image/gif":`.gif`,"image/jpeg":`.jpg`,"image/png":`.png`,"image/webp":`.webp`,"text/plain":`.txt`}[(e.type??``).trim().toLowerCase()]??``}`}function L(e){let t=I(e);return e.name===t?e:new File([e],t,{type:e.type||`application/octet-stream`,lastModified:Number.isFinite(e.lastModified)?e.lastModified:Date.now()})}function R(e){if(!e)return[];let t=[];for(let n of Array.from(e.files))t.push(L(n));if(t.length>0)return t;let n=new Set;for(let r of Array.from(e.items)){if(r.kind!==`file`)continue;let e=r.getAsFile();if(!e)continue;let i=L(e),a=`${i.name}:${i.size}:${i.type}:${i.lastModified}`;n.has(a)||(n.add(a),t.push(i))}return t}function ee(e,t=64){return e?e.scrollHeight-e.scrollTop-e.clientHeight<=t:!0}var z={chatPage:`_chatPage_1ovpu_3`,sidebar:`_sidebar_1ovpu_13`,sidebarHeader:`_sidebarHeader_1ovpu_24`,sidebarLogo:`_sidebarLogo_1ovpu_31`,sidebarBrand:`_sidebarBrand_1ovpu_37`,newChatButton:`_newChatButton_1ovpu_44`,sidebarLabel:`_sidebarLabel_1ovpu_65`,sessionList:`_sessionList_1ovpu_75`,sessionItem:`_sessionItem_1ovpu_84`,sessionItemActive:`_sessionItemActive_1ovpu_106`,sessionTitle:`_sessionTitle_1ovpu_111`,sessionTime:`_sessionTime_1ovpu_120`,chatMain:`_chatMain_1ovpu_127`,messageArea:`_messageArea_1ovpu_135`,messageList:`_messageList_1ovpu_143`,emptyState:`_emptyState_1ovpu_154`,greeting:`_greeting_1ovpu_164`,messageBlock:`_messageBlock_1ovpu_175`,messageBlockUser:`_messageBlockUser_1ovpu_181`,messageBlockAssistant:`_messageBlockAssistant_1ovpu_185`,messageBlockSystem:`_messageBlockSystem_1ovpu_186`,agentLabel:`_agentLabel_1ovpu_190`,agentAvatar:`_agentAvatar_1ovpu_200`,agentInitial:`_agentInitial_1ovpu_207`,bubble:`_bubble_1ovpu_220`,bubbleUser:`_bubbleUser_1ovpu_230`,bubbleAssistant:`_bubbleAssistant_1ovpu_236`,bubbleSystem:`_bubbleSystem_1ovpu_244`,markdownContent:`_markdownContent_1ovpu_255`,messageActions:`_messageActions_1ovpu_368`,actionButton:`_actionButton_1ovpu_380`,actionButtonSuccess:`_actionButtonSuccess_1ovpu_402`,branchSwitcher:`_branchSwitcher_1ovpu_408`,branchButton:`_branchButton_1ovpu_417`,approvalActions:`_approvalActions_1ovpu_443`,approvalAllow:`_approvalAllow_1ovpu_450`,approvalDeny:`_approvalDeny_1ovpu_465`,artifactCard:`_artifactCard_1ovpu_488`,artifactFilename:`_artifactFilename_1ovpu_499`,artifactBadge:`_artifactBadge_1ovpu_508`,artifactDownload:`_artifactDownload_1ovpu_518`,artifactPreview:`_artifactPreview_1ovpu_540`,thinking:`_thinking_1ovpu_553`,thinkingDot:`_thinkingDot_1ovpu_560`,thinkingBounce:`_thinkingBounce_1ovpu_1`,composerWrapper:`_composerWrapper_1ovpu_591`,composer:`_composer_1ovpu_591`,pendingMediaRow:`_pendingMediaRow_1ovpu_609`,mediaChip:`_mediaChip_1ovpu_616`,mediaChipName:`_mediaChipName_1ovpu_628`,mediaChipRemove:`_mediaChipRemove_1ovpu_634`,composerRow:`_composerRow_1ovpu_653`,composerInput:`_composerInput_1ovpu_660`,attachButton:`_attachButton_1ovpu_678`,sendButton:`_sendButton_1ovpu_679`,stopping:`_stopping_1ovpu_716`,slashSuggestions:`_slashSuggestions_1ovpu_723`,suggestionItem:`_suggestionItem_1ovpu_738`,suggestionItemActive:`_suggestionItemActive_1ovpu_748`,suggestionLabel:`_suggestionLabel_1ovpu_752`,suggestionDesc:`_suggestionDesc_1ovpu_758`,errorBanner:`_errorBanner_1ovpu_765`,editArea:`_editArea_1ovpu_781`,editButtons:`_editButtons_1ovpu_796`,sidebarOpen:`_sidebarOpen_1ovpu_813`,slideIn:`_slideIn_1ovpu_1`,sidebarBackdrop:`_sidebarBackdrop_1ovpu_823`,mobileHeader:`_mobileHeader_1ovpu_833`},B=r();function te(e){return(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`div`,{className:z.sidebarHeader,children:[(0,B.jsx)(`img`,{className:z.sidebarLogo,src:`/static/hybridclaw-logo.svg`,alt:`HybridClaw`}),(0,B.jsx)(`span`,{className:z.sidebarBrand,children:`HybridClaw`})]}),(0,B.jsx)(`button`,{type:`button`,className:z.newChatButton,onClick:e.onNewChat,children:`+ New Conversation`}),e.sessions.length>0?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`div`,{className:z.sidebarLabel,children:`Recent`}),(0,B.jsx)(`ul`,{className:z.sessionList,"aria-live":`polite`,children:e.sessions.map(t=>(0,B.jsx)(`li`,{children:(0,B.jsxs)(`button`,{type:`button`,className:p(z.sessionItem,t.sessionId===e.activeSessionId&&z.sessionItemActive),"aria-current":t.sessionId===e.activeSessionId?`page`:void 0,onClick:()=>e.onOpenSession(t.sessionId),children:[(0,B.jsx)(`span`,{className:z.sessionTitle,children:t.title||`Untitled`}),(0,B.jsx)(`span`,{className:z.sessionTime,children:m(t.lastActive)})]})},t.sessionId))})]}):null]})}function ne(e){return e.items.length===0?null:(0,B.jsx)(`div`,{className:z.slashSuggestions,role:`listbox`,children:e.items.map((t,n)=>(0,B.jsxs)(`div`,{className:p(z.suggestionItem,n===e.activeIndex&&z.suggestionItemActive),role:`option`,tabIndex:-1,"aria-selected":n===e.activeIndex,onMouseDown:n=>{n.preventDefault(),e.onSelect(t)},children:[(0,B.jsx)(`span`,{className:z.suggestionLabel,children:t.label}),t.description?(0,B.jsx)(`span`,{className:z.suggestionDesc,children:t.description}):null]},t.id))})}function re(e){let t=(0,h.useRef)(null),n=(0,h.useRef)(null),[r,i]=(0,h.useState)([]),[a,o]=(0,h.useState)(0),[s,c]=(0,h.useState)([]),[l,u]=(0,h.useState)(0),[d,f]=(0,h.useState)(!1),m=(0,h.useRef)(null),g=(0,h.useRef)(0);(0,h.useEffect)(()=>()=>{m.current&&clearTimeout(m.current)},[]);let _=()=>{let e=t.current;e&&(e.style.height=`24px`,e.style.height=`${Math.min(e.scrollHeight,180)}px`)},y=(0,h.useCallback)(async t=>{g.current+=1;let n=g.current;try{let r=await v(e.token,t||void 0);if(n!==g.current)return;c(r.commands??[]),u(0),f((r.commands??[]).length>0)}catch{if(n!==g.current)return;c([]),f(!1)}},[e.token]),b=()=>{_();let e=t.current?.value??``;if(e.startsWith(`/`)){let t=e.slice(1).trim();m.current&&clearTimeout(m.current),m.current=setTimeout(()=>{y(t)},150)}else f(!1)},x=e=>{t.current&&(t.current.value=`${e.insertText} `,f(!1),_(),t.current.focus())},S=()=>{if(e.isStreaming){e.onStop();return}let n=(t.current?.value??``).trim();!n&&r.length===0||a>0||(e.onSend(n,r),t.current&&(t.current.value=``),i([]),_())},C=e=>{if(d&&s.length>0){if(e.key===`ArrowDown`){e.preventDefault(),u(e=>(e+1)%s.length);return}if(e.key===`ArrowUp`){e.preventDefault(),u(e=>(e-1+s.length)%s.length);return}if(e.key===`Tab`||e.key===`Enter`){e.preventDefault(),x(s[l]);return}if(e.key===`Escape`){e.preventDefault(),f(!1);return}}e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),S())},w=e=>{let t=R(e.clipboardData);t.length>0&&(e.preventDefault(),T(t))},T=async t=>{o(e=>e+t.length);try{let n=await e.onUploadFiles(t);n.length>0&&i(e=>[...e,...n])}finally{o(e=>Math.max(0,e-t.length))}},E=e=>{let t=Array.from(e.target.files??[]);t.length>0&&T(t),e.target.value=``},D=e=>{i(t=>t.filter((t,n)=>n!==e))};return(0,B.jsx)(`div`,{className:z.composerWrapper,children:(0,B.jsxs)(`div`,{className:z.composer,style:{position:`relative`},children:[d?(0,B.jsx)(ne,{items:s,activeIndex:l,onSelect:x}):null,r.length>0||a>0?(0,B.jsxs)(`div`,{className:z.pendingMediaRow,children:[r.map((e,t)=>(0,B.jsxs)(`span`,{className:z.mediaChip,children:[(0,B.jsx)(`span`,{className:z.mediaChipName,children:e.filename}),(0,B.jsx)(`button`,{type:`button`,className:z.mediaChipRemove,onClick:()=>D(t),children:`×`})]},e.path)),a>0?(0,B.jsx)(`span`,{className:z.mediaChip,children:`Uploading…`}):null]}):null,(0,B.jsxs)(`div`,{className:z.composerRow,children:[(0,B.jsx)(`button`,{type:`button`,className:z.attachButton,onClick:()=>n.current?.click(),"aria-label":`Attach files`,children:`+`}),(0,B.jsx)(`textarea`,{ref:t,className:z.composerInput,rows:1,placeholder:`Message HybridClaw`,disabled:e.isStreaming,onInput:b,onKeyDown:C,onPaste:w,"aria-label":`Message input`}),(0,B.jsx)(`button`,{type:`button`,className:p(z.sendButton,e.isStreaming&&z.stopping),onClick:S,"aria-label":e.isStreaming?`Stop`:`Send message`,children:e.isStreaming?(0,B.jsx)(`svg`,{viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`currentColor`,"aria-hidden":`true`,children:(0,B.jsx)(`rect`,{x:`6`,y:`6`,width:`12`,height:`12`,rx:`2`})}):(0,B.jsxs)(`svg`,{viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`none`,stroke:`currentColor`,strokeWidth:`2.4`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:[(0,B.jsx)(`path`,{d:`M12 19V5`}),(0,B.jsx)(`path`,{d:`m5 12 7-7 7 7`})]})}),(0,B.jsx)(`input`,{ref:n,type:`file`,hidden:!0,multiple:!0,onChange:E})]})]})})}function V(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var H=V();function ie(e){H=e}var U={exec:()=>null};function W(e,t=``){let n=typeof e==`string`?e:e.source,r={replace:(e,t)=>{let i=typeof t==`string`?t:t.source;return i=i.replace(G.caret,`$1`),n=n.replace(e,i),r},getRegex:()=>new RegExp(n,t)};return r}var ae=(()=>{try{return!0}catch{return!1}})(),G={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:e=>RegExp(`^( {0,3}${e})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:e=>RegExp(`^ {0,${Math.min(3,e-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:e=>RegExp(`^ {0,${Math.min(3,e-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:e=>RegExp(`^ {0,${Math.min(3,e-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:e=>RegExp(`^ {0,${Math.min(3,e-1)}}#`),htmlBeginRegex:e=>RegExp(`^ {0,${Math.min(3,e-1)}}<(?:[a-z].*>|!--)`,`i`),blockquoteBeginRegex:e=>RegExp(`^ {0,${Math.min(3,e-1)}}>`)},K=/^(?:[ \t]*(?:\n|$))+/,oe=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,se=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,ce=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,le=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,ue=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,de=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,fe=W(de).replace(/bull/g,ue).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,``).getRegex(),pe=W(de).replace(/bull/g,ue).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),me=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,he=/^[^\n]+/,ge=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,_e=W(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace(`label`,ge).replace(`title`,/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),ve=W(/^(bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,ue).getRegex(),ye=`address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul`,be=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,xe=W(`^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))`,`i`).replace(`comment`,be).replace(`tag`,ye).replace(`attribute`,/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),Se=W(me).replace(`hr`,ce).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`|lheading`,``).replace(`|table`,``).replace(`blockquote`,` {0,3}>`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace(`list`,` {0,3}(?:[*+-]|1[.)])[ \\t]`).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,ye).getRegex(),Ce={blockquote:W(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace(`paragraph`,Se).getRegex(),code:oe,def:_e,fences:se,heading:le,hr:ce,html:xe,lheading:fe,list:ve,newline:K,paragraph:Se,table:U,text:he},we=W(`^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)`).replace(`hr`,ce).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`blockquote`,` {0,3}>`).replace(`code`,`(?: {4}| {0,3} )[^\\n]`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace(`list`,` {0,3}(?:[*+-]|1[.)])[ \\t]`).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,ye).getRegex(),Te={...Ce,lheading:pe,table:we,paragraph:W(me).replace(`hr`,ce).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`|lheading`,``).replace(`table`,we).replace(`blockquote`,` {0,3}>`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace(`list`,` {0,3}(?:[*+-]|1[.)])[ \\t]`).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,ye).getRegex()},Ee={...Ce,html:W(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace(`comment`,be).replace(/tag/g,`(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b`).getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:U,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:W(me).replace(`hr`,ce).replace(`heading`,` *#{1,6} *[^
|
|
3
3
|
]`).replace(`lheading`,fe).replace(`|table`,``).replace(`blockquote`,` {0,3}>`).replace(`|fences`,``).replace(`|list`,``).replace(`|html`,``).replace(`|tag`,``).getRegex()},De=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,Oe=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,ke=/^( {2,}|\\)\n(?!\s*$)/,Ae=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,je=/[\p{P}\p{S}]/u,Me=/[\s\p{P}\p{S}]/u,Ne=/[^\s\p{P}\p{S}]/u,Pe=W(/^((?![*_])punctSpace)/,`u`).replace(/punctSpace/g,Me).getRegex(),Fe=/(?!~)[\p{P}\p{S}]/u,Ie=/(?!~)[\s\p{P}\p{S}]/u,Le=/(?:[^\s\p{P}\p{S}]|~)/u,Re=/(?![*_])[\p{P}\p{S}]/u,ze=/(?![*_])[\s\p{P}\p{S}]/u,Be=/(?:[^\s\p{P}\p{S}]|[*_])/u,Ve=W(/link|precode-code|html/,`g`).replace(`link`,/\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace(`precode-`,ae?"(?<!`)()":"(^^|[^`])").replace(`code`,/(?<b>`+)[^`]+\k<b>(?!`)/).replace(`html`,/<(?! )[^<>]*?>/).getRegex(),He=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,Ue=W(He,`u`).replace(/punct/g,je).getRegex(),We=W(He,`u`).replace(/punct/g,Fe).getRegex(),Ge=`^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)`,Ke=W(Ge,`gu`).replace(/notPunctSpace/g,Ne).replace(/punctSpace/g,Me).replace(/punct/g,je).getRegex(),qe=W(Ge,`gu`).replace(/notPunctSpace/g,Le).replace(/punctSpace/g,Ie).replace(/punct/g,Fe).getRegex(),Je=W(`^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)`,`gu`).replace(/notPunctSpace/g,Ne).replace(/punctSpace/g,Me).replace(/punct/g,je).getRegex(),Ye=W(/^~~?(?:((?!~)punct)|[^\s~])/,`u`).replace(/punct/g,Re).getRegex(),Xe=W(`^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)`,`gu`).replace(/notPunctSpace/g,Be).replace(/punctSpace/g,ze).replace(/punct/g,Re).getRegex(),Ze=W(/\\(punct)/,`gu`).replace(/punct/g,je).getRegex(),Qe=W(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace(`scheme`,/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(`email`,/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),$e=W(be).replace(`(?:-->|$)`,`-->`).getRegex(),et=W(`^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>`).replace(`comment`,$e).replace(`attribute`,/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),tt=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+[^`]*?`+(?!`)|[^\[\]\\`])*?/,nt=W(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace(`label`,tt).replace(`href`,/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace(`title`,/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),rt=W(/^!?\[(label)\]\[(ref)\]/).replace(`label`,tt).replace(`ref`,ge).getRegex(),it=W(/^!?\[(ref)\](?:\[\])?/).replace(`ref`,ge).getRegex(),at=W(`reflink|nolink(?!\\()`,`g`).replace(`reflink`,rt).replace(`nolink`,it).getRegex(),ot=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,st={_backpedal:U,anyPunctuation:Ze,autolink:Qe,blockSkip:Ve,br:ke,code:Oe,del:U,delLDelim:U,delRDelim:U,emStrongLDelim:Ue,emStrongRDelimAst:Ke,emStrongRDelimUnd:Je,escape:De,link:nt,nolink:it,punctuation:Pe,reflink:rt,reflinkSearch:at,tag:et,text:Ae,url:U},ct={...st,link:W(/^!?\[(label)\]\((.*?)\)/).replace(`label`,tt).getRegex(),reflink:W(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace(`label`,tt).getRegex()},lt={...st,emStrongRDelimAst:qe,emStrongLDelim:We,delLDelim:Ye,delRDelim:Xe,url:W(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace(`protocol`,ot).replace(`email`,/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:W(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace(`protocol`,ot).getRegex()},ut={...lt,br:W(ke).replace(`{2,}`,`*`).getRegex(),text:W(lt.text).replace(`\\b_`,`\\b_| {2,}\\n`).replace(/\{2,\}/g,`*`).getRegex()},dt={normal:Ce,gfm:Te,pedantic:Ee},ft={normal:st,gfm:lt,breaks:ut,pedantic:ct},pt={"&":`&`,"<":`<`,">":`>`,'"':`"`,"'":`'`},mt=e=>pt[e];function q(e,t){if(t){if(G.escapeTest.test(e))return e.replace(G.escapeReplace,mt)}else if(G.escapeTestNoEncode.test(e))return e.replace(G.escapeReplaceNoEncode,mt);return e}function ht(e){try{e=encodeURI(e).replace(G.percentDecode,`%`)}catch{return null}return e}function gt(e,t){let n=e.replace(G.findPipe,(e,t,n)=>{let r=!1,i=t;for(;--i>=0&&n[i]===`\\`;)r=!r;return r?`|`:` |`}).split(G.splitPipe),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),t)if(n.length>t)n.splice(t);else for(;n.length<t;)n.push(``);for(;r<n.length;r++)n[r]=n[r].trim().replace(G.slashPipe,`|`);return n}function _t(e,t,n){let r=e.length;if(r===0)return``;let i=0;for(;i<r;){let a=e.charAt(r-i-1);if(a===t&&!n)i++;else if(a!==t&&n)i++;else break}return e.slice(0,r-i)}function vt(e,t){if(e.indexOf(t[1])===-1)return-1;let n=0;for(let r=0;r<e.length;r++)if(e[r]===`\\`)r++;else if(e[r]===t[0])n++;else if(e[r]===t[1]&&(n--,n<0))return r;return n>0?-2:-1}function yt(e,t=0){let n=t,r=``;for(let t of e)if(t===` `){let e=4-n%4;r+=` `.repeat(e),n+=e}else r+=t,n++;return r}function bt(e,t,n,r,i){let a=t.href,o=t.title||null,s=e[1].replace(i.other.outputLinkReplace,`$1`);r.state.inLink=!0;let c={type:e[0].charAt(0)===`!`?`image`:`link`,raw:n,href:a,title:o,text:s,tokens:r.inlineTokens(s)};return r.state.inLink=!1,c}function xt(e,t,n){let r=e.match(n.other.indentCodeCompensation);if(r===null)return t;let i=r[1];return t.split(`
|
|
4
4
|
`).map(e=>{let t=e.match(n.other.beginningSpace);if(t===null)return e;let[r]=t;return r.length>=i.length?e.slice(i.length):e}).join(`
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
._backdrop_1aapm_1{z-index:50;background:#0a0f1980;animation:.15s _dialogFadeIn_1aapm_1;position:fixed;inset:0}._viewport_1aapm_9{z-index:51;pointer-events:none;place-items:center;padding:24px;display:grid;position:fixed;inset:0}._content_1aapm_19{pointer-events:auto;background:var(--panel-bg);width:100%;max-width:440px;max-height:calc(100vh - 48px);color:var(--text);border:1px solid var(--line);border-radius:var(--radius-lg);box-shadow:var(--shadow-popover);gap:20px;padding:24px;animation:.15s _dialogSlideIn_1aapm_1;display:grid;overflow-y:auto}._sm_1aapm_36{max-width:360px}._lg_1aapm_40{max-width:560px}._header_1aapm_44{gap:8px;display:grid}._title_1aapm_49{letter-spacing:-.01em;margin:0;font-size:1.1rem;font-weight:600;line-height:1.3}._description_1aapm_57{color:var(--muted-foreground);margin:0;line-height:1.5}._footer_1aapm_63{justify-content:flex-end;gap:10px;display:flex}@keyframes _dialogFadeIn_1aapm_1{0%{opacity:0}}@keyframes _dialogSlideIn_1aapm_1{0%{opacity:0;transform:scale(.96)translateY(4px)}}._backdrop_1aapm_1._exiting_1aapm_82{animation:.15s forwards _dialogFadeOut_1aapm_1}._content_1aapm_19._exiting_1aapm_82{animation:.15s forwards _dialogSlideOut_1aapm_1}@keyframes _dialogFadeOut_1aapm_1{to{opacity:0}}@keyframes _dialogSlideOut_1aapm_1{to{opacity:0;transform:scale(.96)translateY(4px)}}@media (prefers-reduced-motion:reduce){._backdrop_1aapm_1,._content_1aapm_19,._backdrop_1aapm_1._exiting_1aapm_82,._content_1aapm_19._exiting_1aapm_82{animation:none}}._trigger_sn70v_1{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel-bg);color:var(--text);cursor:pointer;align-items:center;gap:4px;padding:6px 8px;display:inline-flex}._trigger_sn70v_1:hover{border-color:var(--line-strong)}._content_sn70v_17{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel-bg);width:max-content;min-width:160px;box-shadow:var(--shadow-dropdown);z-index:50;padding:4px;position:fixed}._item_sn70v_29{width:100%;color:var(--text);cursor:pointer;text-align:left;background:0 0;border:none;border-radius:6px;align-items:center;gap:8px;padding:8px 10px;font-size:.875rem;display:flex}._item_sn70v_29:hover{background:var(--panel-muted)}._item_sn70v_29[data-active=true]{background:var(--accent-soft);color:var(--accent-foreground)}._overlay_185qr_1{z-index:40;opacity:0;pointer-events:none;cursor:default;background:#0a0f1980;border:0;padding:0;transition:opacity .18s;position:fixed;inset:0}._overlayVisible_185qr_14{opacity:1;pointer-events:auto}._content_185qr_19{z-index:50;background:var(--sidebar-bg,var(--page-bg));color:var(--sidebar-fg);border:1px solid var(--sidebar-border,var(--line));box-shadow:var(--shadow-dropdown);grid-template-rows:auto minmax(0,1fr) auto;transition:transform .18s;display:grid;position:fixed;overflow:hidden}._left_185qr_34{width:var(--sheet-width,18rem);border-top:0;border-bottom:0;border-left:0;top:0;bottom:0;left:0;transform:translate(calc(-100% - 24px))}._right_185qr_45{width:var(--sheet-width,18rem);border-top:0;border-bottom:0;border-right:0;top:0;bottom:0;right:0;transform:translate(calc(100% + 24px))}._top_185qr_56{height:var(--sheet-height,50vh);border-top:0;border-left:0;border-right:0;top:0;left:0;right:0;transform:translateY(calc(-100% - 24px))}._bottom_185qr_67{height:var(--sheet-height,50vh);border-bottom:0;border-left:0;border-right:0;bottom:0;left:0;right:0;transform:translateY(calc(100% + 24px))}._contentOpen_185qr_78{transform:translate(0)}._srOnly_185qr_84{clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}._layout_crl1d_1{--sidebar-width:15.5rem;--sidebar-width-icon:4rem;--sidebar-width-mobile:18rem;background:var(--page-bg);min-height:100vh;display:flex}._root_crl1d_10{z-index:30;width:var(--sidebar-width);border-right:1px solid var(--sidebar-border);background:var(--sidebar-bg);height:100vh;color:var(--sidebar-fg);grid-template-rows:auto minmax(0,1fr) auto;transition:width .18s,transform .18s;display:grid;position:sticky;top:0;overflow:visible}._header_crl1d_27,._footer_crl1d_28{z-index:1;background:inherit;padding:12px;position:relative}._header_crl1d_27{padding-top:14px;padding-bottom:8px}._content_crl1d_40{align-content:start;gap:14px;min-height:0;padding:6px 12px 12px;display:grid;overflow-y:auto}._footer_crl1d_28{border-top:1px solid var(--sidebar-border);padding-top:10px;padding-bottom:14px;display:block}._inset_crl1d_56{flex-direction:column;flex:auto;min-width:0;min-height:100dvh;display:flex}._trigger_crl1d_64{border:1px solid var(--line);background:var(--background);color:var(--muted-foreground);cursor:pointer;border-radius:var(--radius-md);justify-content:center;align-items:center;width:36px;height:36px;transition:color .12s,border-color .12s,background .12s;display:inline-flex}._trigger_crl1d_64:hover{color:var(--text);background:var(--accent-soft);border-color:var(--line-strong)}._trigger_crl1d_64 svg{width:18px;height:18px}._group_crl1d_97,._groupContent_crl1d_98{gap:8px;display:grid}._eyebrow_crl1d_107{text-transform:uppercase;letter-spacing:.08em;color:var(--muted-foreground);margin:0;font-size:.64rem;font-weight:600}._groupLabel_crl1d_116{color:var(--muted-foreground);align-items:center;gap:8px;margin:0;padding:0 8px;font-size:.64rem;font-weight:500;display:flex}._groupLabel_crl1d_116:after{content:"";background:var(--sidebar-border);flex:1;height:1px}._menu_crl1d_134{gap:2px;display:grid}._menuItem_crl1d_139{display:grid}._menuButton_crl1d_143{border-radius:var(--radius-sm);min-height:34px;color:var(--sidebar-fg);white-space:nowrap;background:0 0;border:1px solid #0000;align-items:center;gap:8px;padding:7px 10px;font-size:.875rem;font-weight:500;text-decoration:none;transition:background .12s,border-color .12s,color .12s;display:flex;overflow:hidden}._menuButton_crl1d_143:hover{background:var(--accent-soft);color:var(--text)}._menuButtonActive_crl1d_169{background:var(--accent-soft);border-color:var(--line);color:var(--accent-foreground)}._brand_crl1d_175{padding:2px 6px;display:grid}._brandTitle_crl1d_180{align-items:flex-start;gap:10px;min-height:34px;display:flex}._brandText_crl1d_187{gap:1px;min-width:0;padding-top:1px;display:grid}._brandTitle_crl1d_180 h1{letter-spacing:-.01em;margin:0;font-size:.9rem;font-weight:600;line-height:1.1}._brandMark_crl1d_202,._menuIcon_crl1d_203,._icon_crl1d_204{flex:none;justify-content:center;align-items:center;width:16px;height:16px;display:inline-flex}._brandMark_crl1d_202{border-radius:var(--radius-sm);width:32px;height:32px;color:var(--accent-foreground)}._menuIcon_crl1d_203{color:var(--muted-foreground)}._menuButtonActive_crl1d_169 ._menuIcon_crl1d_203{color:var(--accent-foreground)}._brandMark_crl1d_202 svg{width:32px;height:32px}._menuIcon_crl1d_203 svg,._icon_crl1d_204 svg{width:16px;height:16px}._footerMeta_crl1d_239{align-items:center;display:flex}._footerValue_crl1d_244{color:var(--sidebar-fg);padding:0 8px;font-size:.75rem;font-weight:500;line-height:1}._footerBlock_crl1d_252{justify-content:space-between;align-items:center;gap:6px;display:flex}._footerDivider_crl1d_259{background:var(--sidebar-border);height:1px;margin:6px 0}._footerActions_crl1d_265,._footerMenu_crl1d_266,._footerAction_crl1d_265{align-items:stretch;display:flex}._footerActions_crl1d_265{flex:none}._footerMenu_crl1d_266{flex-direction:row;gap:6px}._footerButton_crl1d_281{border-radius:var(--radius-sm);min-height:34px;color:var(--sidebar-fg);cursor:pointer;background:0 0;border:1px solid #0000;align-items:center;gap:8px;padding:7px 10px;font-size:.875rem;font-weight:500;transition:background .12s,border-color .12s,color .12s;display:inline-flex}._footerButton_crl1d_281:hover{background:var(--accent-soft);color:var(--text)}._root_crl1d_10[data-state=collapsed]{width:var(--sidebar-width-icon);overflow:hidden}._root_crl1d_10[data-state=collapsed] ._groupLabel_crl1d_116,._root_crl1d_10[data-state=collapsed] ._brandText_crl1d_187,._root_crl1d_10[data-state=collapsed] ._footerMeta_crl1d_239,._root_crl1d_10[data-state=collapsed] ._footerDivider_crl1d_259,._root_crl1d_10[data-state=collapsed] ._footerButton_crl1d_281 span:not(._icon_crl1d_204),._root_crl1d_10[data-state=collapsed] ._themeToggleLabel_crl1d_317{display:none}._root_crl1d_10[data-state=collapsed] ._menuButton_crl1d_143{justify-content:center;padding:7px}._root_crl1d_10[data-state=collapsed] ._menuButton_crl1d_143>span:not(._menuIcon_crl1d_203){display:none}@media (width<=780px){._header_crl1d_27,._content_crl1d_40,._footer_crl1d_28{padding-left:16px;padding-right:16px}}._viewport_1175c_1{z-index:100;pointer-events:none;outline:none;gap:8px;width:380px;max-width:calc(100vw - 48px);display:grid;position:fixed;bottom:24px;right:24px}._viewport_1175c_1:empty{display:none}._toast_1175c_18{pointer-events:auto;border-radius:var(--radius-md);border:1px solid color-mix(in srgb, var(--line) 72%, transparent);background:color-mix(in srgb, var(--panel-bg) 76%, transparent);color:var(--text);box-shadow:var(--shadow-raised);-webkit-backdrop-filter:blur(12px)saturate(120%);align-items:flex-start;gap:12px;padding:14px 16px;animation:.2s _toastSlideIn_1175c_1;display:flex}._toast_1175c_18._exiting_1175c_34{animation:.2s forwards _toastSlideOut_1175c_1}._body_1175c_40{flex:auto;gap:4px;min-width:0;display:grid}._title_1175c_47{margin:0;font-size:.875rem;font-weight:600;line-height:1.35}._description_1175c_54{color:var(--muted-foreground);margin:0;font-size:.8125rem;line-height:1.45}._success_1175c_63{background:color-mix(in srgb, var(--success-soft) 68%, transparent);border-color:color-mix(in srgb, var(--success-border) 72%, transparent)}._success_1175c_63 ._title_1175c_47{color:var(--success)}._error_1175c_72{background:color-mix(in srgb, var(--danger-soft) 68%, transparent);border-color:color-mix(in srgb, var(--danger-border) 72%, transparent)}._error_1175c_72 ._title_1175c_47{color:var(--danger)}._info_1175c_81{background:color-mix(in srgb, var(--accent) 68%, transparent);border-color:color-mix(in srgb, var(--primary) 24%, transparent)}._info_1175c_81 ._title_1175c_47{color:var(--primary)}._actions_1175c_92{flex:none;align-items:center;gap:6px;display:flex}._actionButton_1175c_99{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel-bg);color:var(--text);cursor:pointer;padding:4px 10px;font-size:.8125rem;font-weight:500}._actionButton_1175c_99:hover{border-color:var(--line-strong)}._closeButton_1175c_114{width:24px;height:24px;color:var(--muted-foreground);cursor:pointer;background:0 0;border:none;border-radius:6px;place-items:center;padding:0;font-size:1.1rem;line-height:1;display:grid}._closeButton_1175c_114:hover{background:var(--panel-muted);color:var(--text)}@keyframes _toastSlideIn_1175c_1{0%{opacity:0;transform:translate(16px)}}@keyframes _toastSlideOut_1175c_1{to{opacity:0;transform:translate(16px)}}@media (prefers-reduced-motion:reduce){._toast_1175c_18,._toast_1175c_18._exiting_1175c_34{animation:none}}@keyframes _pulse_rzdod_1{0%,to{opacity:1}50%{opacity:.45}}._panel_rzdod_15{background:#fff;border:1px solid #00000014;border-radius:10px;overflow:hidden}._panelHeader_rzdod_22{border-bottom:1px solid #0000000f;justify-content:space-between;align-items:center;padding:12px 16px 11px;display:flex}._panelTitle_rzdod_30{color:#111827;letter-spacing:-.01em;font-size:12.5px;font-weight:600}._row_rzdod_39{border-bottom:1px solid #0000000d;border-left:2.5px solid #0000;flex-direction:column;padding:9px 16px;transition:background .1s;display:flex}._row_rzdod_39:last-of-type{border-bottom:none}._row_rzdod_39:hover{background:#00000003}._rowWarning_rzdod_56{background:#f59e0b08;border-left-color:#f59e0b}._rowWarning_rzdod_56:hover{background:#f59e0b0e}._rowDown_rzdod_65{background:#ef444405;border-left-color:#ef4444}._rowDown_rzdod_65:hover{background:#ef44440a}._rowTop_rzdod_76{justify-content:space-between;align-items:center;gap:12px;display:flex}._nameGroup_rzdod_83{align-items:center;gap:6px;min-width:0;display:flex}._dot_rzdod_92{border-radius:50%;flex-shrink:0;width:6px;height:6px}._dotHealthy_rzdod_99{background:#22c55e;box-shadow:0 0 0 2px #22c55e26}._dotWarning_rzdod_103{background:#f59e0b;animation:2s ease-in-out infinite _pulse_rzdod_1;box-shadow:0 0 0 2px #f59e0b26}._dotDown_rzdod_108{background:#ef4444;animation:1.6s ease-in-out infinite _pulse_rzdod_1;box-shadow:0 0 0 2px #ef444426}._dotInactive_rzdod_113{background:#d1d5db}._name_rzdod_83{color:#111827;letter-spacing:-.015em;white-space:nowrap;text-overflow:ellipsis;font-size:12.5px;font-weight:600;line-height:1.2;overflow:hidden}._badge_rzdod_130{text-transform:uppercase;letter-spacing:.07em;white-space:nowrap;border-radius:4px;flex-shrink:0;padding:1.5px 5px;font-size:9px;font-weight:600;line-height:1.5}._badgeRemote_rzdod_142{color:#3b82f6;background:#eff6ff;border:1px solid #3b82f62e}._badgeLocal_rzdod_148{color:#16a34a;background:#f0fdf4;border:1px solid #16a34a2e}._meta_rzdod_156{flex-shrink:0;align-items:center;gap:8px;display:flex}._detail_rzdod_163{color:#6b7280;white-space:nowrap;font-family:SFMono-Regular,JetBrains Mono,Fira Code,monospace;font-size:11px}._modelCount_rzdod_170{color:#9ca3af;white-space:nowrap;font-variant-numeric:tabular-nums;font-size:11px}._loginBtn_rzdod_179{color:#92400e;cursor:pointer;white-space:nowrap;background:#fffbebe6;border:1px solid #d9770673;border-radius:5px;flex-shrink:0;padding:3px 9px;font-size:11.5px;font-weight:500;line-height:1.5;transition:background .1s,border-color .1s}._loginBtn_rzdod_179:hover{background:#fef3c7;border-color:#d97706}._loginBtn_rzdod_179:active{background:#fde68a}._inactiveFooter_rzdod_207{color:#b0b7c3;border-top:1px solid #0000000a;align-items:center;gap:6px;padding:8px 16px;font-size:11px;display:flex}._inactiveDot_rzdod_217{background:#e5e7eb;border-radius:50%;flex-shrink:0;width:5px;height:5px}._inactiveNames_rzdod_225{color:#c4c9d4;font-family:SFMono-Regular,JetBrains Mono,Fira Code,monospace;font-size:10.5px}._panelEmpty_rzdod_233{color:#9ca3af;text-align:center;padding:20px 16px;font-size:13px}html[data-theme=dark] ._panel_rzdod_15{background:#111827;border-color:#ffffff12}html[data-theme=dark] ._panelHeader_rzdod_22{border-bottom-color:#ffffff0d}html[data-theme=dark] ._panelTitle_rzdod_30{color:#e5edf7}html[data-theme=dark] ._row_rzdod_39{border-bottom-color:#ffffff0a}html[data-theme=dark] ._row_rzdod_39:hover{background:#ffffff05}html[data-theme=dark] ._rowWarning_rzdod_56{background:#f59e0b0d;border-left-color:#d97706}html[data-theme=dark] ._rowWarning_rzdod_56:hover{background:#f59e0b17}html[data-theme=dark] ._rowDown_rzdod_65{background:#ef44440a;border-left-color:#dc2626}html[data-theme=dark] ._rowDown_rzdod_65:hover{background:#ef444412}html[data-theme=dark] ._name_rzdod_83{color:#e5edf7}html[data-theme=dark] ._badgeRemote_rzdod_142{color:#93c5fd;background:#3b82f61f;border-color:#3b82f638}html[data-theme=dark] ._badgeLocal_rzdod_148{color:#86efac;background:#16a34a1f;border-color:#16a34a38}html[data-theme=dark] ._detail_rzdod_163{color:#6b7280}html[data-theme=dark] ._modelCount_rzdod_170{color:#4b5563}html[data-theme=dark] ._loginBtn_rzdod_179{color:#fbbf24;background:#f59e0b17;border-color:#f59e0b4d}html[data-theme=dark] ._loginBtn_rzdod_179:hover{background:#f59e0b26;border-color:#f59e0b80}html[data-theme=dark] ._inactiveFooter_rzdod_207{color:#374151;border-top-color:#ffffff0a}html[data-theme=dark] ._inactiveDot_rzdod_217{background:#374151}html[data-theme=dark] ._inactiveNames_rzdod_225{color:#374151}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--background:#fff;--foreground:#1f2937;--card:#fff;--card-foreground:#1f2937;--popover:#fff;--popover-foreground:#1f2937;--muted:#f8fafc;--muted-foreground:#64748b;--border:#e5e7eb;--border-strong:#d1d5db;--input:#e5e7eb;--ring:#4a6cf7;--primary:#4a6cf7;--primary-foreground:#fff;--secondary:#f1f5f9;--secondary-foreground:#1f2937;--accent:#eef2ff;--accent-foreground:#4a6cf7;--destructive:#b42318;--destructive-foreground:#fff;--success:#0f766e;--success-foreground:#fff;--success-soft:#ecfdf5;--danger:#b42318;--danger-soft:#fef3f2;--sidebar:#f1f5f9;--sidebar-foreground:#1f2937;--sidebar-border:#e5e7eb;--terminal:#0f172a;--terminal-foreground:#cbd5e1;--terminal-overlay-start:#0f172ac2;--terminal-overlay-end:#0f172aeb;--editor:#0f172a;--editor-border:#334155;--editor-foreground:#e2e8f0;--status-success-border:#bbf7d0;--success-border:#a7f3d0;--danger-border:#fecaca;--status-idle:#94a3b8;--jobs-board:#fcfcfd;--jobs-empty:#f8fafca6;--jobs-card-border:#ebeef3;--jobs-pill-success-bg:#eafaf3;--jobs-pill-success-fg:#109669;--jobs-column-backlog-rgb:203, 213, 225;--jobs-column-progress-rgb:147, 197, 253;--jobs-column-review-rgb:252, 211, 77;--jobs-column-success-rgb:134, 239, 172;--jobs-column-danger-rgb:252, 165, 165;--tone-progress:#bfdbfe;--tone-review:#fcd34d;--tone-success:#bbf7d0;--tone-danger:#fecaca;--shadow-popover:0 12px 32px #0f172a1f;--shadow-raised:0 1px 2px #0f172a14;--shadow-board:0 10px 32px #0f172a0d;--shadow-card:0 1px 2px #0f172a0a;--shadow-focus:0 0 0 1px #4a6cf72e;--shadow-dropdown:0 4px 12px #00000026;--shell-background:none;--shell-accent:none;--sidebar-surface:none;--panel-surface:none;--panel-border-subtle:transparent;--nav-hover:var(--panel-bg);--nav-active:var(--panel-bg);--nav-active-border:var(--line);--chip-surface:var(--panel-bg);--chrome-surface:var(--panel-muted);--page-bg:var(--background);--sidebar-bg:var(--sidebar);--panel-bg:var(--card);--panel-muted:var(--muted);--line:var(--border);--line-strong:var(--border-strong);--text:var(--foreground);--accent-soft:var(--accent)}:root,html[data-theme=light]{--sidebar-fg:var(--sidebar-foreground)}html[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--background:#0b1220;--foreground:#e5edf7;--card:#111827;--card-foreground:#e5edf7;--popover:#111827;--popover-foreground:#e5edf7;--muted:#0f172a;--muted-foreground:#93a4b8;--border:#1f2937;--border-strong:#263347;--input:#1f2937;--ring:#7da2ff;--primary:#7da2ff;--primary-foreground:#0b1220;--secondary:#0f172a;--secondary-foreground:#e5edf7;--accent:#162240;--accent-foreground:#a3c1ff;--destructive:#ff7b72;--destructive-foreground:#18181b;--success:#7ee3a5;--success-foreground:#03150f;--success-soft:#7ee3a529;--danger:#ff7b72;--danger-soft:#301614;--sidebar:#0b1220;--sidebar-foreground:#c7d2e3;--sidebar-border:#1f2937;--terminal:#0f172a;--terminal-foreground:#e2e8f0;--terminal-overlay-start:#0b1220c2;--terminal-overlay-end:#0b1220eb;--editor:#0f172a;--editor-border:#263347;--editor-foreground:#e2e8f0;--status-success-border:#18594b;--success-border:#18594b;--danger-border:#6a2220;--status-idle:#5f7287;--jobs-board:#0f172a;--jobs-empty:#0f172acc;--jobs-card-border:#263347;--jobs-pill-success-bg:#7ee3a529;--jobs-pill-success-fg:#7ee3a5;--jobs-column-backlog-rgb:77, 101, 124;--jobs-column-progress-rgb:100, 140, 200;--jobs-column-review-rgb:214, 155, 64;--jobs-column-success-rgb:126, 227, 165;--jobs-column-danger-rgb:220, 108, 98;--tone-progress:#7da2ff;--tone-review:#d69b40;--tone-success:#7ee3a5;--tone-danger:#dc6c62;--shadow-popover:0 18px 48px #0000006b;--shadow-raised:0 8px 24px #00000038;--shadow-board:0 16px 40px #00000047;--shadow-card:0 12px 28px #0000002e;--shadow-focus:0 0 0 1px color-mix(in srgb, var(--primary) 36%, transparent), 0 0 0 5px color-mix(in srgb, var(--primary) 14%, transparent);--shadow-dropdown:0 16px 40px #0000006b;--shell-background:none;--shell-accent:none;--sidebar-surface:none;--panel-surface:none;--panel-border-subtle:transparent;--nav-hover:var(--panel-bg);--nav-active:var(--panel-bg);--nav-active-border:color-mix(in srgb, var(--primary) 32%, var(--border));--chip-surface:var(--panel-bg);--chrome-surface:var(--panel-muted);--page-bg:var(--background);--sidebar-bg:var(--sidebar);--panel-bg:var(--card);--panel-muted:var(--muted);--line:var(--border);--line-strong:var(--border-strong);--text:var(--foreground);--accent-soft:var(--accent);--sidebar-fg:var(--sidebar-foreground)}:root{--radius-lg:14px;--radius-md:10px;--radius-sm:8px;--control-height:44px;--control-line-height:22px;--control-padding-y:10px;--sans:system-ui, ui-sans-serif, -apple-system, BlinkMacSystemFont, Inter, NotoSansHans, sans-serif}*{box-sizing:border-box}html,body,#root{min-height:100%}body{background:var(--page-bg);color:var(--text);font-family:var(--sans);margin:0}button,input,select,textarea{font:inherit}code{font-family:SFMono-Regular,JetBrains Mono,Fira Code,monospace}.main-panel{flex-direction:column;min-width:0;padding:24px;display:flex}.page-content,.page-stack,.detail-stack,.stack-form,.list-stack,.field,.config-section{gap:12px;display:grid}.page-content{flex:auto;min-height:0}.topbar h2,.panel h4,.login-card h1{letter-spacing:-.02em;margin:0;font-weight:600}.topbar h2{font-size:clamp(1.9rem,2.4vw,2.35rem)}.panel h4{font-size:1rem}.eyebrow{text-transform:uppercase;letter-spacing:.08em;color:var(--muted-foreground);margin:0;font-size:.74rem;font-weight:700}.supporting-text,.metric-card small,.list-row small,.summary-block span,.key-value-grid span{color:var(--muted-foreground);margin:0}.inline-popover{margin-top:4px;display:inline-block;position:relative}.inline-popover summary{list-style:none}.inline-popover summary::-webkit-details-marker{display:none}.inline-popover-trigger{color:var(--muted-foreground);cursor:pointer;text-decoration:underline;-webkit-text-decoration-color:var(--line-strong);text-decoration-color:var(--line-strong);text-underline-offset:2px;background:0 0;border:0;align-items:center;gap:6px;padding:0;font-size:.875rem;line-height:1.35;display:inline-flex}.inline-popover-trigger:hover{color:var(--text)}.inline-popover-panel{z-index:20;border:1px solid var(--line);border-radius:var(--radius-md);background:var(--panel-bg);width:min(360px,70vw);box-shadow:var(--shadow-popover);padding:12px;position:absolute;top:calc(100% + 8px);left:0}.inline-popover-header{color:var(--muted-foreground);text-transform:uppercase;letter-spacing:.08em;margin-bottom:8px;font-size:.8rem;font-weight:700}.inline-popover-list{gap:10px;display:grid}.inline-popover-entry{gap:4px;display:grid}.inline-popover-entry strong{font-size:.88rem;line-height:1.3}.inline-popover-entry small,.inline-popover-entry p{color:var(--muted-foreground);margin:0}.inline-popover-entry p{color:var(--text);overflow-wrap:anywhere;word-break:break-word}.nav-link-icon{flex:none;justify-content:center;align-items:center;width:16px;height:16px;display:inline-flex}.nav-link-icon svg{width:16px;height:16px}.button-row,.header-actions{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.topbar{justify-content:space-between;align-items:center;gap:16px;margin-bottom:14px;padding-bottom:12px;display:flex}.topbar-title{flex:auto;min-width:0;overflow:hidden}.topbar-heading{align-items:center;gap:12px;min-width:0;display:flex}.topbar-title h2{text-overflow:ellipsis;white-space:nowrap;line-height:1.05;overflow:hidden}.topbar-sidebar-trigger{flex:none;display:none}@media (width<=1080px){.topbar-sidebar-trigger{display:inline-flex}}.view-switch{border:1px solid var(--line);background:var(--chrome-surface);border-radius:999px;flex-wrap:wrap;align-items:center;gap:8px;padding:6px;display:inline-flex}.view-switch-link{color:var(--muted-foreground);border-radius:999px;align-items:center;gap:8px;padding:9px 14px;font-weight:600;text-decoration:none;display:inline-flex}.view-switch-link:hover{color:var(--text)}.view-switch-link.active{background:var(--nav-active);color:var(--accent-foreground);box-shadow:var(--shadow-raised)}.meta-chip,.status-pill{border:1px solid var(--line);background:var(--chip-surface);color:var(--muted-foreground);border-radius:999px;align-items:center;gap:8px;padding:7px 10px;font-size:.84rem;font-weight:500;display:inline-flex}.status-pill-success{border-color:var(--status-success-border);background:var(--success-soft);color:var(--success)}.status-dot{background:var(--status-idle);border-radius:999px;width:8px;height:8px}.status-dot.live,.status-dot-success{background:var(--success)}.status-dot-danger{background:var(--danger)}.page-stack,.detail-stack,.stack-form,.list-stack,.page-content{gap:20px}.page-header{justify-content:space-between;align-items:center;gap:18px;display:flex}.page-header-description{max-width:62ch}.panel{border-radius:var(--radius-lg);border:1px solid var(--line);background:var(--panel-bg);padding:8px}.terminal-page{flex-direction:column;flex:auto;gap:10px;height:100%;min-height:0;display:flex}.terminal-panel-body{flex-direction:column;flex:auto;gap:16px;min-width:0;min-height:0;display:flex}.terminal-page .page-header .button-row{justify-content:flex-end}.terminal-page .page-header .status-pill{margin-right:6px}.terminal-page .page-header .header-actions{justify-content:flex-end;width:100%}.terminal-page .page-header{justify-content:flex-end}.terminal-page .page-header>span:first-child{display:none}.terminal-page .page-header .button-row{margin-bottom:4px}.terminal-shell{background:var(--terminal);border-radius:12px;flex:auto;width:100%;min-height:320px;display:flex;position:relative;overflow:hidden}.terminal-host{flex:auto;min-width:0;height:calc(100% - 12px);min-height:0;margin-bottom:12px;padding:4px 6px;overflow:hidden}.terminal-host .xterm{width:100%;min-width:0;max-width:100%;height:100%;overflow:hidden}.terminal-host .xterm-viewport{overflow-x:hidden}.terminal-host .xterm-screen{width:100%;max-width:100%}.terminal-empty-state{text-align:center;color:var(--terminal-foreground);background:linear-gradient(180deg, var(--terminal-overlay-start), var(--terminal-overlay-end));place-items:center;padding:24px;display:grid;position:absolute;inset:0}.terminal-empty-copy{white-space:nowrap}.terminal-error-banner{margin-top:16px}@media (width<=960px){.terminal-panel-body{gap:12px}}.panel.warm,.metric-card,.config-section,.empty-state,.summary-block,.key-value-grid div,.usage-stack{background:var(--panel-muted)}.panel-header{margin-bottom:16px}.metric-grid,.two-column-grid,.field-grid,.usage-grid,.config-grid,.key-value-grid{gap:16px;display:grid}.metric-grid{grid-template-columns:repeat(4,minmax(0,1fr))}.two-column-grid{grid-template-columns:minmax(0,1.1fr) minmax(340px,.9fr)}.usage-grid,.field-grid,.config-grid,.key-value-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.metric-card{border-radius:var(--radius-md);border:1px solid var(--line);gap:6px;padding:14px 16px;display:grid}.metric-card-link{color:inherit;text-decoration:none}.metric-card-link:hover{border-color:var(--line-strong)}.metric-card strong{font-size:1.8rem;font-weight:700}.list-row,.selectable-row{border-radius:var(--radius-md);border:1px solid var(--line);background:var(--panel-bg);justify-content:space-between;align-items:flex-start;gap:12px;padding:12px 14px;display:flex}.list-row>div{flex:auto;gap:4px;min-width:0;display:grid}.list-row strong{overflow-wrap:anywhere;word-break:break-word;line-height:1.25;display:block}.list-row small{line-height:1.35;display:block}.list-row>span:last-child{white-space:nowrap;flex:none;padding-left:12px}.list-status{align-items:center;gap:8px;font-weight:500;display:inline-flex}.list-status-success{color:var(--success)}.list-status-danger{color:var(--danger)}.row-status-stack{text-align:right;flex:none;justify-items:end;gap:6px;padding-left:12px;display:grid}.row-status-stack small{color:var(--muted-foreground)}.row-status-stack .row-status-note-danger{color:var(--danger)}.selectable-row{text-align:left;cursor:pointer;width:100%;min-width:0}.selectable-row>div{flex:auto;gap:4px;min-width:0;display:grid}.selectable-row strong,.selectable-row small{display:block}.selectable-row strong{overflow-wrap:anywhere;word-break:break-word;line-height:1.25}.selectable-row small{line-height:1.35}.selectable-row.active{border-color:var(--accent);background:var(--accent-soft)}.channel-selectable-row{align-items:center}.channel-row-main{align-items:center;gap:12px;min-width:0;display:flex}.channel-row-copy{gap:4px;min-width:0;display:grid}.channel-logo{background:color-mix(in srgb, var(--panel-bg) 82%, white);border:1px solid color-mix(in srgb, var(--line) 78%, white);border-radius:14px;flex:none;place-items:center;width:42px;height:42px;display:grid;box-shadow:inset 0 1px #ffffff2e}.channel-logo svg{width:32px;height:32px}.channel-status-badge{border:1px solid var(--line);letter-spacing:.04em;text-transform:uppercase;border-radius:999px;justify-content:center;align-items:center;width:fit-content;margin-left:auto;padding:5px 10px;font-size:.76rem;font-weight:600;display:inline-flex}.channel-status-active{border-color:color-mix(in srgb, var(--success) 30%, var(--line));background:color-mix(in srgb, var(--success) 14%, transparent);color:var(--success)}.channel-status-configured{border-color:color-mix(in srgb, var(--accent) 30%, var(--line));background:color-mix(in srgb, var(--accent) 14%, transparent);color:var(--accent-strong)}.channel-status-available{color:var(--muted-foreground)}.table-shell{overflow-x:auto}table{border-collapse:collapse;width:100%}th,td{border-bottom:1px solid var(--line);text-align:left;vertical-align:top;padding:12px 10px}th{text-transform:uppercase;letter-spacing:.08em;color:var(--muted-foreground);font-size:.75rem}.table-sort-button{width:100%;color:inherit;font:inherit;text-transform:inherit;letter-spacing:inherit;text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;gap:8px;padding:0;display:inline-flex}.table-sort-button:hover{color:var(--text)}.table-sort-button:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 55%, transparent);outline-offset:3px}.table-sort-indicator{flex:none;width:10px;height:12px;position:relative}.table-sort-indicator:before,.table-sort-indicator:after{content:"";opacity:.2;border-left:4px solid #0000;border-right:4px solid #0000;position:absolute;left:50%;transform:translate(-50%)}.table-sort-indicator:before{border-bottom:5px solid;top:0}.table-sort-indicator:after{border-top:5px solid;bottom:0}.table-sort-indicator.is-active:before,.table-sort-indicator.is-active:after{opacity:.12}.table-sort-indicator.is-active.is-asc:before,.table-sort-indicator.is-active.is-desc:after{opacity:.9}.field,.toggle-row,.config-section{gap:8px}.field input,.field select,.field textarea,.compact-search{width:100%;padding:var(--control-padding-y) 12px;border-radius:var(--radius-sm);border:1px solid var(--line-strong);background:var(--panel-bg);color:var(--text)}.field input,.field select,.compact-search{min-height:var(--control-height);height:var(--control-height);line-height:var(--control-line-height)}.managed-secret-field{align-content:start}.managed-secret-editor{border:1px solid var(--line);border-radius:var(--radius-md);background:var(--panel-muted);gap:10px;padding:12px;display:grid}.whatsapp-pairing-field{align-content:start}.whatsapp-pairing-qr{border:1px solid var(--line);border-radius:var(--radius-md);color:#111827;white-space:pre;background:#fff;margin:0;padding:16px;font-family:ui-monospace,SFMono-Regular,SFMono,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:.68rem;line-height:1;overflow-x:auto}.field textarea,.code-editor{resize:vertical}.toggle-row{grid-template-columns:auto 1fr;align-items:center;display:grid}.boolean-field{align-items:start}.boolean-pill{border:1px solid var(--line);text-transform:lowercase;border-radius:999px;align-items:center;gap:8px;width:fit-content;padding:6px 10px;font-size:.82rem;font-weight:600;display:inline-flex}.boolean-pill.is-on{background:var(--success-soft);border-color:var(--status-success-border);color:var(--success)}.boolean-pill.is-off{background:var(--panel-muted);border-color:var(--line-strong);color:var(--muted-foreground)}.boolean-pill.is-off.tone-danger{background:var(--danger-soft);border-color:var(--danger-border);color:var(--danger)}.boolean-pill-dot{background:currentColor;border-radius:999px;width:8px;height:8px}.binary-toggle{width:fit-content;border:1px solid var(--line-strong);background:var(--panel-bg);border-radius:999px;grid-auto-columns:1fr;grid-auto-flow:column;align-items:stretch;min-inline-size:0;margin:0;padding:0;display:inline-grid;overflow:hidden}.binary-toggle-button{min-width:max-content;color:var(--muted-foreground);cursor:pointer;text-align:center;text-transform:lowercase;white-space:nowrap;background:0 0;border:0;justify-content:center;align-items:center;padding:8px 12px;font-size:.9rem;display:inline-flex}.binary-toggle-button+.binary-toggle-button{border-left:1px solid var(--line-strong)}.binary-toggle-button.active{font-weight:600}.binary-toggle.boolean-toggle:has(.binary-toggle-button.active.is-on){border-color:var(--status-success-border);box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--success) 18%, transparent)}.binary-toggle-button.active.is-on{background:var(--success-soft);color:var(--success)}.binary-toggle-button.active.is-off{background:var(--panel-muted);color:var(--text)}.binary-toggle-button:disabled{cursor:default;opacity:.65}.binary-toggle-button[data-state=on].is-on{background:var(--success-soft);color:var(--success)}.binary-toggle-button[data-state=on].is-off{background:var(--panel-muted);color:var(--text)}.toggle-group--sm .binary-toggle-button{padding:4px 8px;font-size:.8rem}.config-section{border-radius:var(--radius-md);border:1px solid var(--line);padding:16px}.primary-button,.ghost-button,.danger-button{border-radius:var(--radius-sm);cursor:pointer;border:1px solid #0000;padding:9px 12px}.primary-button{background:var(--primary);border-color:var(--primary);color:var(--primary-foreground)}.ghost-button{background:var(--panel-bg);border-color:var(--line-strong);color:var(--text)}.danger-button{background:var(--danger-soft);color:var(--danger);border-color:var(--danger-border)}.primary-button:disabled,.ghost-button:disabled,.danger-button:disabled{cursor:default;opacity:.72}.button-with-spinner{align-items:center;gap:8px;display:inline-flex}.button-spinner{border:2px solid;border-right-color:#0000;border-radius:999px;width:14px;height:14px;animation:.75s linear infinite button-spinner-rotate}@keyframes button-spinner-rotate{to{transform:rotate(360deg)}}.table-link-button{color:var(--text);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;padding:0;font-weight:700}.table-link-button:hover{color:var(--accent)}.table-link-button-danger{color:var(--danger)}.policy-editor-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.policy-comment-field{grid-column:1/-1}.policy-table-actions{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.policy-rules-table td{vertical-align:middle}.policy-action-row{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex}.policy-template-actions{flex-wrap:nowrap;align-items:center;gap:10px;margin-left:auto;display:flex}.policy-template-inline{align-items:center;gap:10px;display:flex}.policy-template-inline span{white-space:nowrap;color:var(--muted-foreground);font-weight:600}.policy-template-inline select{width:auto;min-width:180px;height:var(--control-height);min-height:var(--control-height);border-radius:var(--radius-sm);border:1px solid var(--line-strong);background:var(--panel-bg);color:var(--text);appearance:none;background-image:linear-gradient(45deg, transparent 50%, var(--muted-foreground) 50%), linear-gradient(135deg, var(--muted-foreground) 50%, transparent 50%);background-position:calc(100% - 18px) calc(50% - 2px),calc(100% - 12px) calc(50% - 2px);background-repeat:no-repeat;background-size:6px 6px,6px 6px;padding:0 38px 0 12px}.policy-action-row .primary-button,.policy-action-row .ghost-button{height:var(--control-height);min-height:var(--control-height);justify-content:center;align-items:center;display:inline-flex}.skill-review-actions{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:8px;display:flex}.empty-state,.success-banner,.error-banner,.summary-block{border-radius:var(--radius-md);border:1px solid var(--line);padding:14px 16px}.empty-state{color:var(--muted-foreground)}.empty-state.error,.error-banner{background:var(--danger-soft);border-color:var(--danger-border);color:var(--danger)}.success-banner{background:var(--success-soft);border-color:var(--success-border);color:var(--success)}.summary-block p{margin:0;line-height:1.55}.agent-file-meta{min-width:0}.agent-file-meta .supporting-text{color:var(--muted-foreground);white-space:nowrap;text-overflow:ellipsis;margin:0;font-size:.82rem;line-height:1.45;overflow:hidden}.agent-file-editor-title{color:var(--foreground);font-weight:700}.summary-block-header,.jobs-output-actions{justify-content:space-between;align-items:center;gap:10px;display:flex}.jobs-output-list{gap:12px;display:grid}.jobs-output-card{border:1px solid var(--line);border-radius:var(--radius-md);background:var(--panel-bg);gap:10px;padding:12px;display:grid}.jobs-output-actions small{color:var(--muted-foreground)}.jobs-output-pre{white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;font:inherit;margin:0;line-height:1.55}.payload-block{white-space:pre-wrap;word-break:break-word;max-height:480px;margin:0;font-family:SFMono-Regular,JetBrains Mono,Fira Code,monospace;font-size:.88rem;line-height:1.45;overflow:auto}.sessions-layout,.selectable-list,.sessions-layout .panel,.sessions-layout .detail-stack,.session-row-main,.key-value-grid div{min-width:0}.mailbox-shell{background:var(--panel-bg);border-radius:18px;grid-template-columns:220px minmax(0,1fr);min-height:720px;display:grid;overflow:hidden}.mailbox-sidebar,.mailbox-main,.mailbox-detail{min-width:0}.mailbox-sidebar{background:var(--panel-muted);border-right:1px solid var(--line);align-content:start;gap:18px;padding:18px 12px 18px 0;display:grid}.mailbox-sidebar-section,.mailbox-folder-list,.mailbox-tag-list,.mailbox-message-metadata,.mailbox-thread-copy,.mailbox-detail-copy,.mailbox-message-list{gap:10px;display:grid}.mailbox-folder-button,.mailbox-thread-button{text-align:left;cursor:pointer;width:100%;min-width:0}.mailbox-folder-button{color:var(--text);background:0 0;border:0;border-radius:0 999px 999px 0;padding:0;display:block}.mailbox-folder-row{border-radius:0 999px 999px 0;justify-content:space-between;align-items:center;gap:12px;padding:10px 14px 10px 18px;display:flex}.mailbox-folder-title{align-items:center;gap:12px;min-width:0;display:inline-flex}.mailbox-folder-symbol{width:1.25rem;height:1.25rem;color:var(--muted-foreground);flex:0 0 1.25rem;justify-content:center;align-items:center;line-height:1;display:inline-flex}.mailbox-folder-symbol svg{width:100%;height:100%}.mailbox-folder-label{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-weight:500;overflow:hidden}.mailbox-folder-button strong{color:var(--muted-foreground);flex:none;font-size:.95rem;font-weight:600}.mailbox-folder-button:hover .mailbox-folder-row{background:color-mix(in srgb, var(--accent-soft) 48%, transparent)}.mailbox-folder-button.is-emphasized .mailbox-folder-label,.mailbox-folder-button.is-emphasized strong{font-weight:700}.mailbox-folder-button.active .mailbox-folder-row{background:color-mix(in srgb, var(--accent-soft) 82%, white)}.mailbox-folder-button.active .mailbox-folder-symbol,.mailbox-folder-button.active .mailbox-folder-label,.mailbox-folder-button.active strong{color:var(--accent-strong)}.mailbox-tag-list{align-content:start}.mailbox-main{background:color-mix(in srgb, var(--panel-bg) 92%, var(--panel-muted));grid-template-rows:auto minmax(0,1fr);display:grid}.mailbox-column-header,.mailbox-detail-toolbar,.mailbox-detail-header,.mailbox-thread-top,.mailbox-thread-meta,.mailbox-message-header{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.mailbox-column-header{border-bottom:1px solid var(--line);background:var(--panel-bg);padding:16px 18px}.mailbox-column-actions,.mailbox-pagination{align-items:center;gap:10px;display:inline-flex}.mailbox-column-actions{flex-wrap:wrap;justify-content:flex-end}.mailbox-pagination small{color:var(--muted-foreground);white-space:nowrap}.mailbox-page-button{min-width:5.75rem}.mailbox-column-header strong,.mailbox-column-header small,.mailbox-thread-copy span,.mailbox-thread-copy small,.mailbox-message-header strong,.mailbox-message-header small{display:block}.mailbox-column-header small,.mailbox-thread-copy small,.mailbox-message-header small{color:var(--muted-foreground)}.mailbox-thread-list,.mailbox-message-list{min-height:0;overflow-y:auto}.mailbox-thread-list{background:linear-gradient(180deg, color-mix(in srgb, var(--panel-bg) 94%, transparent), color-mix(in srgb, var(--panel-muted) 20%, transparent));align-content:start;padding:0}.mailbox-thread-row{border-bottom:1px solid var(--line);grid-template-columns:minmax(0,1fr) auto;align-items:center;display:grid}.mailbox-thread-row:hover{background:color-mix(in srgb, var(--accent-soft) 42%, transparent)}.mailbox-thread-button{background:0 0;border:0;border-radius:0;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:14px;padding:14px 18px;display:grid}.mailbox-icon-button{width:2.15rem;height:2.15rem;color:var(--muted-foreground);cursor:pointer;background:0 0;border:0;border-radius:999px;justify-content:center;align-items:center;padding:0;display:inline-flex}.mailbox-icon-button:hover{background:color-mix(in srgb, var(--accent-soft) 52%, transparent);color:var(--text)}.mailbox-icon-button:disabled{cursor:default;opacity:.55}.mailbox-icon-button svg{width:1.1rem;height:1.1rem}.mailbox-thread-delete{margin-right:10px}.mailbox-thread-summary,.mailbox-thread-sender,.mailbox-thread-subject,.mailbox-thread-preview,.mailbox-thread-time{overflow-wrap:anywhere;word-break:break-word}.mailbox-thread-summary{white-space:nowrap;align-items:center;gap:8px;min-width:0;display:flex;overflow:hidden}.mailbox-thread-sender,.mailbox-thread-subject{line-height:1.25}.mailbox-thread-sender{text-overflow:ellipsis;flex:0 18ch;min-width:0;font-weight:600;overflow:hidden}.mailbox-thread-separator,.mailbox-thread-time{color:var(--muted-foreground)}.mailbox-thread-subject{text-overflow:ellipsis;flex:0 auto;font-weight:600;overflow:hidden}.mailbox-thread-preview{text-overflow:ellipsis;flex:auto;overflow:hidden}.mailbox-thread-time{white-space:nowrap;flex:none;font-size:.92rem}.mailbox-thread-button,.mailbox-thread-summary{min-width:0}.mailbox-thread-sender,.mailbox-thread-subject{color:var(--text)}.mailbox-thread-preview{color:var(--muted-foreground)}.mailbox-thread-sender,.mailbox-thread-subject{font-weight:600}.mailbox-thread-preview{font-weight:400}.mailbox-thread-summary>*{min-width:0}.mailbox-thread-separator{flex:none}.mailbox-thread-row.is-unread .mailbox-thread-sender,.mailbox-thread-row.is-unread .mailbox-thread-subject,.mailbox-thread-row.is-unread .mailbox-thread-time{color:var(--text);font-weight:700}.mailbox-detail{background:var(--panel-bg);grid-template-rows:auto minmax(0,1fr);min-height:0;display:grid}.mailbox-detail-toolbar{border-bottom:1px solid var(--line);background:var(--panel-bg);padding:14px 18px}.mailbox-detail-toolbar-main{align-items:center;gap:10px;min-width:0;display:inline-flex}.mailbox-detail-toolbar-copy{gap:2px;display:grid}.mailbox-detail-toolbar small{color:var(--muted-foreground)}.mailbox-back-button{width:2.25rem;height:2.25rem;color:var(--text);cursor:pointer;background:0 0;border:0;border-radius:999px;justify-content:center;align-items:center;padding:0;display:inline-flex}.mailbox-back-button:hover{background:color-mix(in srgb, var(--accent-soft) 52%, transparent)}.mailbox-back-button svg{width:1.2rem;height:1.2rem}.mailbox-detail-delete{align-items:center;gap:8px;display:inline-flex}.mailbox-detail-delete-icon{width:1rem;height:1rem;display:inline-flex}.mailbox-detail-delete-icon svg{width:100%;height:100%}.mailbox-inline-error{border:1px solid var(--danger-border);border-radius:var(--radius-sm);background:var(--danger-soft);color:var(--danger);margin:14px 18px 0;padding:10px 12px}.mailbox-detail-empty{margin:18px}.mailbox-detail-header{border-bottom:1px solid var(--line);background:linear-gradient(180deg, color-mix(in srgb, var(--accent-soft) 72%, transparent), transparent);padding:22px 24px 18px}.mailbox-detail-heading{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.mailbox-detail-heading h3{letter-spacing:-.02em;margin:0;font-size:clamp(1.3rem,2vw,1.8rem);line-height:1.1}.mailbox-role-pill{border:1px solid var(--line);letter-spacing:.03em;text-transform:uppercase;border-radius:999px;justify-content:center;align-items:center;padding:6px 10px;font-size:.78rem;font-weight:700;display:inline-flex}.mailbox-role-pill.needs-reply{border-color:color-mix(in srgb, var(--accent) 28%, var(--line));background:color-mix(in srgb, var(--accent) 12%, transparent);color:var(--accent-strong)}.mailbox-role-pill.replied{border-color:color-mix(in srgb, var(--success) 28%, var(--line));background:color-mix(in srgb, var(--success) 12%, transparent);color:var(--success)}.mailbox-message-list{background:linear-gradient(180deg, color-mix(in srgb, var(--panel-muted) 12%, transparent), transparent 220px);align-content:start;padding:18px}.mailbox-message-card{border:1px solid var(--line);background:var(--panel-bg);box-shadow:var(--shadow-card);border-radius:18px;gap:12px;padding:16px 18px;display:grid}.mailbox-message-card.assistant{border-color:color-mix(in srgb, var(--accent) 18%, var(--line));background:color-mix(in srgb, var(--accent-soft) 52%, var(--panel-bg))}.mailbox-message-card.user{background:color-mix(in srgb, var(--panel-bg) 86%, var(--panel-muted))}.mailbox-message-metadata{flex-wrap:wrap;gap:8px;display:flex}.mailbox-message-metadata small{border:1px solid color-mix(in srgb, var(--line) 92%, transparent);background:color-mix(in srgb, var(--accent-soft) 28%, transparent);color:var(--muted-foreground);border-radius:999px;align-items:center;padding:6px 10px;font-size:.78rem;line-height:1.2;display:inline-flex}.mailbox-message-header span{white-space:nowrap;color:var(--muted-foreground);flex:none}.mailbox-message-body{white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word;line-height:1.65}.session-row-main{flex:auto}.session-row-main strong,.session-row-meta,.key-value-grid strong{overflow-wrap:anywhere;word-break:break-word;display:block}.session-row-main strong{line-height:1.25}.session-row-meta{margin-top:4px;font-size:.95rem;line-height:1.35}.session-row-time{white-space:nowrap;color:var(--muted-foreground);flex:none;font-size:.95rem}.key-value-grid div,.usage-stack{border-radius:var(--radius-md);border:1px solid var(--line);gap:4px;padding:14px;display:grid}.usage-stack strong{font-size:1.3rem}.table-shell td strong,.table-shell td small{display:block}.table-shell td strong{overflow-wrap:anywhere;word-break:break-word;line-height:1.25}.table-shell td small{margin-top:4px;line-height:1.35}.login-shell{background:var(--panel-muted);place-items:center;min-height:100vh;padding:24px;display:grid}.login-card{border-radius:var(--radius-lg);border:1px solid var(--line);background:var(--panel-bg);width:min(480px,100%);padding:24px}.login-card h1{font-size:1.75rem}.compact-search{min-width:240px}.jobs-column-header{align-items:center;display:flex}.jobs-column{min-width:0}.jobs-columns,.jobs-column-body{gap:12px;display:grid}.jobs-card-pill{border-radius:999px;justify-content:center;align-items:center;font-size:.78rem;font-weight:700;display:inline-flex}.jobs-header-search{flex:0 260px;min-width:180px}.page-header .header-actions{flex-wrap:nowrap;justify-content:flex-end;width:auto}.page-header .header-actions .primary-button{flex:none}.jobs-board-layout{border:1px solid var(--line);background:var(--panel-bg);min-width:0;min-height:720px;box-shadow:var(--shadow-board);border-radius:18px;grid-template-columns:minmax(0,1fr);display:grid;overflow:hidden}.jobs-board-layout.has-detail{grid-template-columns:minmax(0,1fr) 320px}.jobs-card strong,.jobs-card p{overflow-wrap:anywhere;word-break:break-word}.jobs-card strong,.jobs-card p,.jobs-card small{margin:0}.jobs-card p,.jobs-card small{color:var(--muted-foreground)}.jobs-columns{background:var(--jobs-board);border-right:1px solid var(--line);grid-auto-columns:minmax(220px,1fr);grid-auto-flow:column;align-items:stretch;gap:4px;padding:12px 14px;display:grid;overflow-x:auto}.jobs-column{--jobs-column-rgb:var(--jobs-column-backlog-rgb);background:rgba(var(--jobs-column-rgb), .04);border:0;border-radius:16px;grid-template-rows:auto minmax(0,1fr);gap:10px;min-width:0;margin:0;padding:10px 8px;display:grid}.jobs-column.drop-target{background:color-mix(in srgb, var(--primary) 8%, transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--primary) 20%, transparent)}.jobs-column-backlog{--jobs-column-rgb:var(--jobs-column-backlog-rgb)}.jobs-column-in_progress{--jobs-column-rgb:var(--jobs-column-progress-rgb)}.jobs-column-review{--jobs-column-rgb:var(--jobs-column-review-rgb)}.jobs-column-done{--jobs-column-rgb:var(--jobs-column-success-rgb)}.jobs-column-cancelled{--jobs-column-rgb:var(--jobs-column-danger-rgb)}.jobs-column-header{border:1px solid var(--line);background:rgba(var(--jobs-column-rgb), .08);border-radius:14px;justify-content:space-between;gap:10px;padding:10px 12px;font-size:.95rem}.jobs-column-header span{background:var(--panel-muted);color:var(--muted-foreground);border-radius:999px;padding:2px 7px;font-size:.8rem;font-weight:700}.jobs-column-body{align-content:start;min-width:0;max-height:640px;padding-right:4px;overflow-y:auto}.jobs-column-empty{border:1px dashed var(--line-strong);color:var(--muted-foreground);background:var(--jobs-empty);border-radius:12px;padding:12px}.jobs-card{border:1px solid var(--jobs-card-border);background:var(--panel-bg);box-shadow:var(--shadow-card);border-radius:16px;gap:8px;padding:12px;display:grid}.jobs-card-top{justify-content:space-between;align-items:flex-start;gap:8px;display:flex}.jobs-card.tone-progress{border-color:var(--tone-progress)}.jobs-card.tone-review{border-color:var(--tone-review)}.jobs-card.tone-success{border-color:var(--tone-success)}.jobs-card.tone-danger{border-color:var(--tone-danger)}.jobs-card strong{font-size:.95rem;line-height:1.25}.jobs-card p{min-height:2.5em;font-size:.92rem;line-height:1.35}.jobs-card small{text-transform:uppercase;letter-spacing:.04em;font-size:.78rem}.jobs-card-pill{background:var(--jobs-pill-success-bg);width:fit-content;color:var(--jobs-pill-success-fg);padding:5px 8px}.jobs-card-frame{width:100%;display:block}.jobs-card-frame.drop-target .jobs-card{box-shadow:var(--shadow-focus)}.jobs-card-shell{position:relative}.jobs-card-button{text-align:left;cursor:pointer;background:0 0;border:0;width:100%;padding:0;display:block}.jobs-card-button:focus-visible .jobs-card{border-color:var(--accent);box-shadow:var(--shadow-focus)}.jobs-card-shell.draggable{cursor:grab}.jobs-inline-trigger{width:100%;min-width:0;color:var(--text);font:inherit;text-align:left;overflow-wrap:anywhere;word-break:break-word;cursor:pointer;background:0 0;border:0;padding:0;font-weight:700}.jobs-inline-trigger:disabled{cursor:default}.jobs-inline-select{box-sizing:border-box;width:100%;min-width:0;max-width:100%}.jobs-card-frame.dragging{opacity:.58}.jobs-card-frame.dragging .jobs-card{border-style:dashed}.jobs-card-shell.active .jobs-card{border-color:var(--accent);box-shadow:var(--shadow-focus)}.jobs-detail{background:var(--panel-bg);min-width:0;padding:18px}.jobs-detail-header{justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:16px;display:flex}.jobs-detail-header h4{margin:4px 0 0;font-size:1.15rem}.jobs-detail-stack,.jobs-runtime-list{gap:14px;display:grid}.jobs-runtime-row{border:1px solid var(--line);border-radius:var(--radius-md);background:var(--panel-muted);gap:4px;padding:10px 12px;display:grid}.jobs-runtime-row strong,.jobs-runtime-row small{overflow-wrap:anywhere;word-break:break-word;margin:0}.jobs-runtime-row small{color:var(--muted-foreground)}.code-editor{background:var(--editor);border-color:var(--editor-border);min-height:540px;color:var(--editor-foreground)}@media (width<=1080px){.metric-grid,.two-column-grid,.usage-grid,.field-grid,.config-grid,.key-value-grid,.jobs-board-layout{grid-template-columns:1fr}.jobs-columns{border-right:none;border-bottom:1px solid var(--line)}.mailbox-shell{grid-template-columns:1fr}.mailbox-sidebar{border-right:none;border-bottom:1px solid var(--line)}}@media (width<=780px){.main-panel{padding:0}.panel,.login-card{padding:18px}.page-content{padding:16px 18px 24px}.topbar{z-index:10;background:var(--page-bg);border-bottom:1px solid var(--line);gap:10px;margin-bottom:0;padding:12px 18px 10px;position:sticky;top:0}.topbar h2{font-size:1.1rem}.page-header{flex-direction:column}.topbar-actions{justify-items:stretch;width:100%}.view-switch{flex:none;gap:2px;padding:4px}.view-switch-link{gap:0;padding:8px}.view-switch-link span:not(.nav-link-icon){clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.jobs-header-search{min-width:0}.mailbox-thread-button{grid-template-columns:minmax(0,1fr);gap:6px}.mailbox-thread-summary{white-space:normal;gap:4px;display:grid}.mailbox-thread-separator{display:none}.mailbox-thread-sender,.mailbox-thread-subject,.mailbox-thread-preview{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.mailbox-thread-time{justify-self:start}.terminal-shell,.terminal-host{min-height:60vh}.mailbox-detail-header,.mailbox-column-header,.mailbox-message-header{flex-direction:column}}
|