diff --git a/.github/workflows/redhat-certify.yml b/.github/workflows/redhat-certify.yml index 34f92ad955..74b242c28e 100644 --- a/.github/workflows/redhat-certify.yml +++ b/.github/workflows/redhat-certify.yml @@ -4,9 +4,9 @@ on: workflow_dispatch: inputs: version: - description: "EDDI version (e.g. 6.2.0)" + description: "EDDI version (e.g. 6.3.0)" required: true - default: "6.2.0" + default: "6.3.0" release: description: "Release number (e.g. 1, 2, 3)" required: true diff --git a/README.md b/README.md index a1b7557012..cfadaf6f60 100644 --- a/README.md +++ b/README.md @@ -290,7 +290,7 @@ EDDI implements open standards — not proprietary APIs: | **[A2A](https://google.github.io/A2A/)** (Agent-to-Agent Protocol) | Full implementation | Cross-platform agent communication, Agent Cards, and skill discovery | | **[OpenAPI](https://www.openapis.org/)** 3.1 | Native generation + consumption | Auto-generated spec. Paste any OpenAPI spec → get a fully deployed API-calling agent | | **OAuth 2.0 / OIDC** | Keycloak integration | Authentication, authorization, and multi-tenant isolation | -| **SSE** (Server-Sent Events) | Streaming transport | Real-time chat responses, group discussion feeds, and live log streaming | +| **SSE** (Server-Sent Events) | Streaming transport | Token-by-token chat responses, including most tool-enabled turns, which stream over the provider's streaming transport instead of going silent until the tool loop finishes (a single-chunk fallback still applies to cascade agents, providers without a streaming builder, and a few other configurations) — plus a live `tool_call` event for "Using {tool}…" status, group discussion feeds, and live log streaming | ### 💭 Memory & Context Management diff --git a/docs/README.md b/docs/README.md index 69624c96ff..9d7051d2a1 100644 --- a/docs/README.md +++ b/docs/README.md @@ -40,12 +40,14 @@ Built with **Java 25** and **Quarkus**. Ships as a **Red Hat-certified Docker im - **[Group Conversations](group-conversations.md)** — Multi-agent debates, voting, shared artifacts, and standing teams across 7 discussion styles (Round Table, Peer Review, Devil's Advocate, Delphi, Debate, Task Force, Negotiation) - **[Managed Agents](managed-agents.md)** — Intent-based auto-routing with one conversation per user per intent - **[Model Cascading](model-cascade.md)** — Cost-optimized multi-model routing with confidence-based escalation +- **Platform Operator** — Meta-agent that reads and operates the deployment, including creating other agents, with every write behind a human approval gate. Activate it at `/manage/operator`, or use the form-based wizard at `/manage/agents/wizard` — see **[Getting Started](getting-started.md)** ### 🔗 Protocols & Interoperability - **[MCP Server](mcp-server.md)** (80+ tools) — Full EDDI control from Claude Desktop, IDE plugins, or any MCP client - **[A2A Protocol](a2a-protocol.md)** — Agent-to-Agent peer communication with skill discovery - **[OpenAI-Compatible API](open-webui-integration.md)** — Deployed agents presented as OpenAI models for Open WebUI and OpenAI SDK clients +- **SSE Streaming** — Token-by-token responses, including most tool-enabled turns (a single-chunk fallback applies to cascade agents, providers without a streaming builder, and a few other configurations), plus a live `tool_call` event so clients can show "Using {tool}…" while the turn is still running ### 🧠 Intelligence & Memory diff --git a/docs/build-reproducibility.md b/docs/build-reproducibility.md index 2b726a7b17..1f53381efb 100644 --- a/docs/build-reproducibility.md +++ b/docs/build-reproducibility.md @@ -11,7 +11,7 @@ This document describes what is and is not guaranteed about EDDI builds. | **Verifiable provenance** — you can prove a published image came from a specific commit of this repository | ✅ Guaranteed | | **Bit-for-bit reproducible artifacts** — two builds of the same commit produce byte-identical JARs | ❌ Not yet — see [Bit-for-bit reproducibility](#bit-for-bit-reproducibility) | -The distinction matters. Deterministic dependency resolution means nobody can slip a different library into your build; it does **not** mean you can rebuild `eddi-6.2.0.jar` and compare its SHA-256 against ours. Verify published artifacts via the [signature and attestation](#verify-a-published-image), not by rebuilding. +The distinction matters. Deterministic dependency resolution means nobody can slip a different library into your build; it does **not** mean you can rebuild `eddi-6.3.0.jar` and compare its SHA-256 against ours. Verify published artifacts via the [signature and attestation](#verify-a-published-image), not by rebuilding. ## Build System @@ -78,7 +78,7 @@ Published Docker images are signed with [Sigstore Cosign](https://docs.sigstore. cosign verify \ --certificate-oidc-issuer https://token.actions.githubusercontent.com \ --certificate-identity-regexp '^https://github\.com/labsai/EDDI/\.github/workflows/ci\.yml@refs/(heads/main|tags/.+)$' \ - labsai/eddi:6.2.0 + labsai/eddi:6.3.0 ``` The identity regexp is the load-bearing part: it pins the signature to the `ci.yml` workflow on `main` or a tag, so a signature produced by any other workflow, branch, or repository fails verification. @@ -86,13 +86,13 @@ The identity regexp is the load-bearing part: it pins the signature to the `ci.y Once verified, resolve and pin the digest in your deployment manifests (`k8s/base/eddi-deployment.yaml`, or `eddi.image.digest` in the Helm chart) so the kubelet can never pull different bits under the same tag: ```bash -crane digest labsai/eddi:6.2.0 +crane digest labsai/eddi:6.3.0 ``` ### Verify the build provenance ```bash -gh attestation verify oci://docker.io/labsai/eddi:6.2.0 --repo labsai/EDDI +gh attestation verify oci://docker.io/labsai/eddi:6.3.0 --repo labsai/EDDI ``` ### SBOM diff --git a/docs/changelog.md b/docs/changelog.md index be8b8f45af..89f35a6a86 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -7,6 +7,87 @@ +## 🔎 fix(docs): four unresolved review findings on #671, all confirmed (2026-08-19) + +**Repo:** EDDI (`chore/eddi-version-6-3-0`) + +Checked every open review thread on the PR against current source rather than assuming they were +stale from an earlier push. All four were real. + +**Two overclaimed the streaming feature.** `README.md` and `docs/README.md` both stated, unqualified, +that tool-enabled turns stream token-by-token. `LlmTask`'s own Javadoc lists the single-chunk fallback +conditions it still uses: the kill-switch off, no event sink, output-suppressed tasks, providers with +no streaming builder, and the whole cascade-agent path (`LlmTask.java` around lines 1360 and 1433). +Both lines now say "most tool-enabled turns" and name the fallback cases, rather than promising a +guarantee the code does not keep. + +**Two were inaccuracies in this changelog's own prose**, not in the shipped docs: + +- The version-bump entry's "Bundled agent" bullet described renaming `Agent+Father-6.2.0.zip` to + `Agent+Father-6.3.0.zip`. Accurate when written, but a later merge of `main` into this branch brought + in the Agent Father's removal, and neither file exists in the final tree. Corrected in place with a + note explaining why the original text is not simply wrong, since it describes what that commit + actually did at that point in the branch's history, just not what the branch ends at. +- The tag-fix entry claimed the only remaining `v6.x` strings in the two release docs were the new + prefix warnings. `release-signing.md` still says "Starting with v6.0.0" and "Images published before + v6.0.0" in two places, historical feature-enablement facts that were deliberately left alone for the + same reason `security.md`'s `**Version: >=6.0.0**` was, but that makes them a second kind of + remaining `v6.x` string the earlier sentence did not account for. + +--- + + +## 🏷️ fix(docs): two REST tags leaked an internal work-item number into Swagger UI (2026-08-19) + +**Repo:** EDDI (`chore/eddi-version-6-3-0`) + +`IRestGroupTemplates` and `IRestGroupWorkspace` both carried `@Tag(name = "13. Agent Groups", ...)` — the +`13` is the internal I13 (standing teams) work-item number from planning, never cleaned up to the project's +actual "Category / Subcategory" tag convention (`Agents / Groups`, `Conversations / Groups`, etc., see +`OpenApiConfig`). It surfaced as a literal `13. AGENT GROUPS` heading in the Swagger UI, reported from the +rendered docs. + +Renamed both to `Agents / Groups`, matching the sibling `IRestAgentGroupStore` (same `/groupstore/` path +prefix, same tag already), so all three now merge into the one existing section instead of splitting off +a stray fourth one. Descriptions were left as-is — each interface's description is accurate to what it +does; only the tag name was wrong. Swept the rest of `src/main/java` for any other numeric-prefixed +`@Tag` and found none. + +--- + + +## ⬆️ chore(deps): Quarkus 3.38.3, and every safe patch/minor ahead of the 6.3.0 release (2026-08-19) + +**Repo:** EDDI (`chore/eddi-version-6-3-0`) + +Quarkus platform `3.38.2` → **`3.38.3`**, plus the patch and minor updates that `versions:display-dependency-updates` +reported for the artefacts **we pin ourselves**. The report is dominated by transitives the Quarkus BOM manages +(dozens of `wildfly-elytron` entries offering `3.0.0.Alpha1`); those are the platform's to move, not ours, and were +filtered out rather than followed. + +Taken: `jackson-core`/`jackson-databind` 2.22.1 → 2.22.2, `classgraph` 4.8.184 → 4.8.192, `jinjava` 2.8.3 → 2.8.4, +`jnats` 2.26.0 → 2.26.2, `swagger-annotations` 2.2.52 → 2.2.54, `swagger-parser` 2.1.45 → 2.1.47, `bcprov-lts8on` +2.73.12 → 2.73.12.1. + +**`langchain4j-community` 1.18.0-beta28 → 1.19.0-beta29** is the one judgement call. It is a minor bump on a +beta-tagged artefact, which the "patch only" rule would exclude, but it removes a real version skew: core, +`langchain4j-libs` and `langchain4j-beta` all sit at 1.19.0 while community alone lagged a minor behind. Aligning the +stack is lower risk than shipping it split. + +**Deliberately not taken**, because this release is meant to be a stable state: `jsonschema-generator` 5.0.0, +`json-path` 3.0.0, `json-schema-validator` 3.0.6, `bson4jackson` 3.2.0, `testcontainers` 2.0.5, `wiremock` 4.0.0-beta, +`quarkus-mcp-server` 2.0.0.CR2, and Quarkus 3.39.0.CR1. Every one is a major jump or a pre-release. + +**Verified, and the verification mattered.** `mvnw clean compile` is green. A targeted run over the areas these bumps +touch is **6,943 tests, 0 failures, 10 errors** — every error `Unable to establish loopback connection` or `failed to +create a child event loop` in `LanguageModelBuildersTest`'s streaming cases. Because `langchain4j-community` feeds the +model builders, "environmental" could not simply be assumed: the same class was re-run with the pre-bump `pom.xml` +stashed in, and produced the **identical 10 errors on the same test methods**. The cause is the local JVM's inability +to bind a loopback socket, which is a known limitation of this environment; CI is the gate for those. + +--- + + ## 🔒 fix(secrets): redaction preserves the JSON it redacts, and stops cutting secrets short (2026-08-19) **Repo:** EDDI (`fix/redaction-json-safe`) @@ -2356,6 +2437,169 @@ rename arguably raises the stakes, since the config is now explicitly the canoni +## 📘 docs(readme): sync both READMEs with what landed on main for 6.3.0 (2026-08-11) + +**Repo:** EDDI (`chore/eddi-version-6-3-0`) + +Audited `README.md` and `docs/README.md` against `origin/main` after merging 589 files of it into the +release branch. Main had already swapped Agent Father for the **Platform Operator** in the root +README (quick start, feature bullet, and the now-dead deep-dive doc row). Verified there is no +surviving `Agent Father` / `agent-father` reference in either README, `SUMMARY.md` or `AGENTS.md`, +that the `docs/agent-father-*.md` pages are gone, that `install.sh` no longer claims to deploy a +starter agent, and that every relative doc link in both files still resolves. + +Two real gaps remained, both features main shipped that neither README mentioned: + +1. **`docs/README.md` never got the Platform Operator at all.** The root README names it twice; the + docs index still described orchestration as if the meta-agent did not exist. Added to *Multi-Agent + Orchestration* with the two real entry points (`/manage/operator`, `/manage/agents/wizard`) taken + from `getting-started.md` rather than invented. There is no dedicated operator page to link — a + gap worth closing separately. +2. **Streaming was undersold in both.** Main shipped `ToolLoopStreamingChatModel` (tool-enabled turns + now stream token-by-token instead of going silent until the tool loop finishes) and a live + `tool_call` SSE event for "Using {tool}…" status. The root README's SSE row said only "real-time + chat responses"; the docs index listed no streaming at all under *Protocols & Interoperability*. + Both now say what actually happens. Verified in code first — `ToolLoopStreamingChatModel.java`, + `RestAgentEngineStreaming` emitting `event: tool_call`, and the `onToolCall` hook on + `ConversationEventSink` / `IConversationService.StreamingResponseHandler` — not from the changelog + alone. + +**Counts re-checked, none needed changing:** 84 entries in `McpToolFilter.MCP_TOOLS` against the +"80+" floor; 14,645 test annotations against "14,000+"; 7 named `DiscussionStyle` values (`CUSTOM` is +the eighth and correctly not counted as a preset style). These are deliberately floors, which is +exactly why they survived a 589-file merge without edits. + +Deliberately unchanged: the "12 LLM Providers" figure (main added no provider; `docs/langchain.md` +remains its source of truth) and `README.md:559`'s language-less code fence (pre-existing, nowhere +near this edit). + +--- + + +## 🏷️ docs(release): the release guide told you to push a tag that triggers nothing (2026-08-11) + +**Repo:** EDDI (`chore/eddi-version-6-3-0`) + +`ci.yml` triggers on `tags: ["[0-9]*"]` — a release tag must start with a digit. `docs/release- +versioning.md` instructed `git tag v6.0.0` in eight places, and `docs/release-signing.md` in three +more. A `v`-prefixed tag matches that filter nowhere, and **GitHub reports no error for a tag that +matches no workflow**: the push succeeds, and nothing runs. No build, no image, no `latest`, no +cosign signature, no SLSA attestation, no GitHub release. Following the release guide verbatim +produced a silent non-release — the worst failure shape available, since there is nothing red to +notice. + +AGENTS.md §1 already documented the digit-prefixed rule, so the two release docs were the artefacts +disagreeing with both the workflow and the rest of the documentation. Fixed in favour of the +workflow, which is the executable truth. + +Three further claims were checked against `ci.yml` while in there, rather than assumed: + +1. **The tag→image table was wrong twice over.** It mapped "Git tag `v6.0.0`" → `labsai/eddi:6.0.0`, + but CI uses the tag name *verbatim* (`PRIMARY_TAG="${GITHUB_REF#refs/tags/}"`), so the `v` would + not be stripped even if the tag did fire. Both halves corrected. +2. **The `6.3` and `6` moving aliases were undocumented.** CI publishes them for stable releases + only, gated on `^([0-9]+)\.([0-9]+)\.([0-9]+)$` so an RC never claims them. They are user-facing + — `helm/eddi/values.yaml` warns against deploying from the mutable major tag — yet the tag + strategy table listed neither. Added, with the "pin the patch version" guidance the k8s and Helm + manifests already follow. +3. **The job table said docker runs on tag `v*`.** Same defect in a second spelling; now `[0-9]*`, + and it records that `[skip docker]` is ignored on tags. + +Also: the canonical-version line quoted `6.0.0` and had sat three releases stale, +so it now names the `` element and the `grep` CI actually uses instead of a number that +rots. The running example moved to 6.3.0 throughout, the lifecycle diagram was realigned (its +columns were already off by four before this change), and a pointer was added that `pom.xml` is not +the only artefact carrying the release number. + +Verified no `v`-prefixed tag **command** survives anywhere in tracked files. Overclaimed the rest, +though: `release-signing.md:7` and `:15` still say "Starting with v6.0.0" and "Images published before +v6.0.0" — historical feature-enablement facts, not tag instructions, so deliberately left alone (same +reasoning as `security.md`'s `**Version: >=6.0.0**`) — but that makes them a second kind of remaining +`v6.x` string, not covered by "the warnings about the prefix itself." + +**Review follow-up (CodeRabbit on #671).** Three findings, all on this change; the one flagged Major +("the release guide still contains a `v`-prefixed tag") was raised against the first push and the +bot itself closed it as addressed once the fix landed. The two real ones were markdownlint +regressions introduced by the new warning blocks: **MD028** in both files, where the added blockquote +sat directly beside an existing one separated by a blank line (fixed with a `>` continuation, so each +pair is one quote with two paragraphs rather than two quotes sharing a gap), and **MD040** on a fence +inside the edited region. For MD040 the flagged fence was fixed along with the other five plain-text +fences in `release-versioning.md` — tagging one and leaving five would trade a lint warning for an +inconsistency in the same file. `release-signing.md`'s two bare fences (lines 30, 93) are deliberately +left: pre-existing, outside this change, and not worth churning a file touched by two lines. + +--- + + + +## 🔖 chore(release): bump EDDI version 6.2.0 → 6.3.0 (2026-08-11) + +**Repo:** EDDI (`chore/eddi-version-6-3-0`) + +Straight version bump across every artefact that carries the release number. The file set was taken +from the two previous bumps (`c0835c98d` 6.1.0 → 6.2.0, `036faa32a` 6.0.2 → 6.1.0) rather than from +a grep, so nothing that those touched is silently skipped: + +- **Build/runtime:** `pom.xml` ``, `application.properties` + (`systemRuntime.projectVersion` — the value `BaseRuntime` and the `HttpClientWrapper` User-Agent + read at runtime — plus `smallrye-openapi.info-version` and `container-image.additional-tags`), + `OpenApiConfig` `@Info(version)`, and the `EDDI_VERSION` build arg backing the Red Hat + certification `version` label in the Dockerfile. +- **Deployment:** `helm/eddi/Chart.yaml` `appVersion` (and the chart's own `version`, see below) + and `helm/eddi/values.yaml` `eddi.image.tag`, + `k8s/base/eddi-deployment.yaml` and `k8s/quickstart.yaml` (both the `app.kubernetes.io/version` + labels and the pinned `labsai/eddi:` tag, including the cosign/crane comment examples), and the + `redhat-certify.yml` workflow input default. +- **Bundled agent (superseded, see below):** at the time this entry was written, the plan was + `Agent+Father-6.2.0.zip` → `Agent+Father-6.3.0.zip` with the matching line in `available_agents.txt`, + which `RestImportService` read to seed initial agents. That rename did land and was verified — but a + later merge of `main` into this branch (documented further down) brought in `chore: remove the Agent + Father`, which deletes the zip, `available_agents.txt`, and the `importInitialAgents` machinery + entirely. **In the final PR neither file exists**, and `RestImportService` only handles explicit + imports. `docs/getting-started.md` now says EDDI starts with no agents deployed. Left the original + wording above rather than editing it away, since it accurately describes what this specific commit + did — the bundled agent it renamed was still real at that point in the branch's history. +- **Docs:** only the two pages using the current tag in copy-pasteable commands + (`build-reproducibility.md`, `redhat-openshift.md`). The per-page `**Version:**` headers did not + need touching — the previous docs refresh replaced all twelve with a dynamic shields.io release + badge precisely so a bump would stop having to sweep them. + +**Deliberately left at 6.2.0:** `@since 6.2.0` Javadoc, the "pre-6.2.0"/"before 6.2.0" +compatibility comments in `AgentOrchestrator`/`VertexGeminiLanguageModelBuilder`/ +`ConversationMemorySnapshot`, `*Since 6.2.0.*` in `httpcalls.md`, and the changelog. Those are +historical minimum-version facts, not statements about the current release; rewriting them would +assert that features shipped in 6.3.0 when they did not. Same reasoning the docs refresh used to +keep `**Version: ≥6.0.0**` in `security.md` out of the dynamic-badge conversion. + +`docs/hitl.md` already referred to "the pre-6.3.0 behavior" for the +`eddi.hitl.tool.task-approvals.mode` default flip, so 6.3.0 was already the assumed next release — +that page is now consistent with the version the build actually reports. + +**The Helm chart's own `version` moved for the first time: 1.0.0 → 1.0.1.** It is not the app +version — `appVersion` is — but Helm requires it to change whenever anything under `helm/` changes, +and chart repositories key on it: two different chart contents published under `1.0.0` are +indistinguishable to any cache or mirror. It had sat at 1.0.0 since the chart was created, through +the 6.1.0 and 6.2.0 bumps, because nothing enforces it and nothing packages the chart today — which +is the only reason the drift was harmless rather than a stale-chart bug waiting for the first +`helm package`. A comment on the field now states the rule so it stops depending on someone +remembering. + +**Verified rather than assumed**, since a bump that misses one artefact fails at release time: +CI's own extractor (`grep -m1 '' pom.xml`) returns 6.3.0; all five edited YAML files parse; +and `target/classes` confirms `available_agents.txt` still names a zip that exists, which is the one +way the rename could have broken startup without breaking the build. `./mvnw compile` green, no +formatter drift. + +**Not introduced here, but found while checking and left alone:** `docs/release-versioning.md` +instructs `git tag v6.0.0` in eight places, while `ci.yml` triggers on `tags: ["[0-9]*"]` — a +`v`-prefixed tag matches nothing, so following that guide produces no build, no image, no signature +and no release, silently. AGENTS.md already documents the digit-prefixed rule; the release guide is +the artefact that is wrong. Tracked separately rather than folded into a version bump. + +--- + + + ## 🔢 docs(mcp): the MCP tool catalogue was eight tools short, and a count sweep of both READMEs (2026-08-11) **Repo:** EDDI (`docs/group-collaboration-refresh`) diff --git a/docs/redhat-openshift.md b/docs/redhat-openshift.md index 8a782fbe88..2cfe159a41 100644 --- a/docs/redhat-openshift.md +++ b/docs/redhat-openshift.md @@ -61,7 +61,7 @@ The certification release process is fully automated: To trigger a certification release, go to **Actions → Red Hat Certification Release → Run workflow** and provide: -- `version` — EDDI version (e.g., `6.2.0`) +- `version` — EDDI version (e.g., `6.3.0`) - `release` — Incremental release number (e.g., `1`, `2`, `3`) - `submit` — Whether to submit results to Red Hat (`true`/`false`) - `registry` — Target registry (`docker.io` or `quay.io`) @@ -171,5 +171,5 @@ For production deployments with MongoDB: docker run -d \ -p 7070:7070 \ -e QUARKUS_MONGODB_CONNECTION_STRING=mongodb://mongo:27017 \ - labsai/eddi:6.2.0 + labsai/eddi:6.3.0 ``` diff --git a/docs/release-signing.md b/docs/release-signing.md index 5043c2a1c3..60fe58890a 100644 --- a/docs/release-signing.md +++ b/docs/release-signing.md @@ -132,17 +132,22 @@ This outputs the full certificate chain and Rekor log entry as JSON. ## Git Tag Signing -For version tags in the Git repository (e.g., `v6.0.0`, `v6.0.0-RC2`), maintainers sign tags using GPG or SSH keys: +For version tags in the Git repository (e.g., `6.3.0`, `6.3.0-RC2`), maintainers sign tags using GPG or SSH keys: ```bash # Create a signed tag -git tag -s v6.0.0 -m "Release 6.0.0" -git push origin v6.0.0 +git tag -s 6.3.0 -m "Release 6.3.0" +git push origin 6.3.0 # Verify a signed tag -git tag -v v6.0.0 +git tag -v 6.3.0 ``` +> **Release tags carry no `v` prefix.** `ci.yml` triggers on `tags: ["[0-9]*"]`, so `v6.3.0` matches +> nothing and silently runs no workflow — no build, no image, and none of the signing or attestation +> described on this page. Signing the tag does not change that; a signed `v6.3.0` is just as inert. +> See [Release & Versioning Strategy](release-versioning.md#version-format). +> > **Note:** The primary release integrity guarantee is provided by the Docker image signing described above. Git tag signing provides an additional layer of assurance that the tag was created by an authorized maintainer. --- diff --git a/docs/release-versioning.md b/docs/release-versioning.md index 5f4aa60921..d1d9f6a887 100644 --- a/docs/release-versioning.md +++ b/docs/release-versioning.md @@ -6,7 +6,7 @@ EDDI follows [Semantic Versioning](https://semver.org/): -``` +```text MAJOR.MINOR.PATCH[-PRERELEASE] ``` @@ -17,18 +17,30 @@ MAJOR.MINOR.PATCH[-PRERELEASE] | `PATCH` | Bug fixes only | `6.0.0` → `6.0.1` | | `PRERELEASE` | Release candidate or beta | `6.0.0-RC1`, `6.0.0-RC2` | -The canonical version lives in `pom.xml` (`6.0.0`) and is used for Maven artifacts and CI build tags. +The canonical version lives in `pom.xml` — the top-level `` element, which CI reads with +`grep -m1 '' pom.xml` — and is used for Maven artifacts and CI build tags. (Deliberately +not quoted with a concrete number here: this page is not a place that should need editing on every +release.) + +> ### ⚠️ Release tags are **not** `v`-prefixed +> +> `ci.yml` triggers on `tags: ["[0-9]*"]`, so a release tag must **start with a digit**: `6.3.0`, +> never `v6.3.0`. This is not a style preference — a `v`-prefixed tag matches nothing, so pushing +> one runs **no workflow at all**: no build, no image, no `latest`, no cosign signature, no SLSA +> attestation and no GitHub release. Nothing fails, because nothing starts. The tag name is also +> used *verbatim* as the Docker tag (`PRIMARY_TAG="${GITHUB_REF#refs/tags/}"`), so the `v` would +> not be stripped even if it did fire. --- ## Branching Model -``` +```text main ─────────────────────────────────────── production ↑ │ merge when ready │ -feature/version-6.0.0 ───────────────────── active development +feature/version-6.3.0 ───────────────────── active development ``` | Branch | Purpose | Docker push? | @@ -45,18 +57,24 @@ All images are pushed to [Docker Hub: `labsai/eddi`](https://hub.docker.com/r/la | Trigger | Docker Tags | Purpose | |---|---|---| -| Push to `main` | `labsai/eddi:6.0.0-b` | Continuous integration build. `` is the GitHub Actions run number. | -| Git tag `v6.0.0-RC1` | `labsai/eddi:6.0.0-RC1` + `labsai/eddi:latest` | Release candidate | -| Git tag `v6.0.0` | `labsai/eddi:6.0.0` + `labsai/eddi:latest` | General availability release | +| Push to `main` | `labsai/eddi:6.3.0-b` | Continuous integration build. `` is the GitHub Actions run number. | +| Git tag `6.3.0-RC1` | `labsai/eddi:6.3.0-RC1` + `labsai/eddi:latest` | Release candidate | +| Git tag `6.3.0` | `labsai/eddi:6.3.0` + `labsai/eddi:6.3` + `labsai/eddi:6` + `labsai/eddi:latest` | General availability release | > **Key rule:** `latest` is **only** pushed on tag-based releases (RC or GA), never on regular main builds. This ensures `docker pull labsai/eddi` always gives users a deliberately released version. +> +> **The `6.3` and `6` aliases are moving tags**, and only a *stable* release publishes them — CI +> gates them on `^([0-9]+)\.([0-9]+)\.([0-9]+)$`, so an RC never claims them. They are a +> convenience for "track the latest 6.x", not something to deploy from: pin the immutable +> `6.3.0` (better, `6.3.0@sha256:`) in manifests, which is why `helm/eddi/values.yaml` +> and the k8s manifests use the full patch version. ### Build Tags Every push to `main` produces a unique, immutable build tag: -``` -labsai/eddi:6.0.0-b42 +```text +labsai/eddi:6.3.0-b42 │ │ │ └── GitHub Actions run number (auto-incrementing) └───── Version from pom.xml @@ -78,17 +96,19 @@ These are useful for: git checkout main git pull origin main -# 2. Tag the release candidate -git tag v6.0.0-RC1 +# 2. Tag the release candidate — no "v" prefix, or nothing triggers +git tag 6.3.0-RC1 # 3. Push the tag — CI pipeline triggers automatically -git push origin v6.0.0-RC1 +git push origin 6.3.0-RC1 ``` This produces: -- `labsai/eddi:6.0.0-RC1` — the version-pinned tag +- `labsai/eddi:6.3.0-RC1` — the version-pinned tag - `labsai/eddi:latest` — updated to point to this RC +An RC does **not** move the `6.3` or `6` aliases; only a stable release does. + ### Subsequent Release Candidates If RC1 needs fixes: @@ -98,22 +118,30 @@ If RC1 needs fixes: # 2. Tag the new main HEAD git checkout main git pull origin main -git tag v6.0.0-RC2 -git push origin v6.0.0-RC2 +git tag 6.3.0-RC2 +git push origin 6.3.0-RC2 ``` ### General Availability Release ```bash -git tag v6.0.0 -git push origin v6.0.0 +git tag 6.3.0 +git push origin 6.3.0 ``` +This is the only trigger that publishes the moving `6.3` and `6` aliases alongside `6.3.0` and +`latest`. + +> **If nothing happens after pushing a tag, check the prefix first.** A `v`-prefixed tag does not +> match the `[0-9]*` trigger, and GitHub reports no error for a tag that matches no workflow — the +> push simply succeeds and nothing runs. Delete it (`git push origin :refs/tags/v6.3.0`) and re-tag +> without the `v`. + ### Red Hat Certification Release For Red Hat-certified images, use the separate workflow: -``` +```text GitHub → Actions → "Red Hat Certification Release" → Run workflow ``` @@ -135,7 +163,7 @@ This skips the Docker build and smoke test jobs, but **tests still run**. |---|---|---|---| | `feat: add new API endpoint` | ✅ | ✅ | ✅ | | `docs: update changelog [skip docker]` | ✅ | ❌ | ❌ | -| Any tag push (`v6.0.0-RC1`) | ✅ | ✅ (always) | ✅ | +| Any tag push (`6.3.0-RC1`) | ✅ | ✅ (always) | ✅ | > `[skip docker]` is ignored on tag pushes — releases always build Docker images. @@ -145,7 +173,7 @@ This skips the Docker build and smoke test jobs, but **tests still run**. The entire pipeline lives in a single file: [`.github/workflows/ci.yml`](../.github/workflows/ci.yml). -``` +```text ┌──────────────────┐ │ build-and-test │ ← Always runs (push, PR, tag) │ mvnw verify │ Tests + JaCoCo coverage @@ -171,7 +199,7 @@ The entire pipeline lives in a single file: [`.github/workflows/ci.yml`](../.git | Job | Runs on | Condition | Duration | |---|---|---|---| | **build-and-test** | Every push/PR/tag | Always | ~3-5 min | -| **docker** | Push to `main` or tag `v*` | `[skip docker]` to skip | ~3-4 min | +| **docker** | Push to `main` or a tag matching `[0-9]*` | `[skip docker]` to skip (ignored on tags) | ~3-4 min | | **smoke-test** | After `docker` succeeds | Same as docker | ~1-2 min | | **preflight-check** | Pull requests only | Always on PRs | ~5-7 min | @@ -209,30 +237,36 @@ Requires Docker Desktop for Windows. The `preflight` tool runs inside a Docker c ## Version Lifecycle -``` -Development Release Candidates General Availability -───────────────── ────────────────── ──────────────────── -feature/version-6.0.0 v6.0.0-RC1 v6.0.0 +```text +Development Release Candidates General Availability +───────────────── ────────────────── ──────────────────── +feature/version-6.3.0 tag 6.3.0-RC1 tag 6.3.0 │ │ │ ├── merge to main ├── tag → Docker push ├── tag → Docker push - │ → 6.0.0-b1 │ → 6.0.0-RC1 + latest │ → 6.0.0 + latest - ├── merge to main │ │ - │ → 6.0.0-b2 v6.0.0-RC2 │ - ├── merge to main │ └── start v6.1.0 cycle - │ → 6.0.0-b3 └── 6.0.0-RC2 + latest + │ → 6.3.0-b1 │ → 6.3.0-RC1 + latest │ → 6.3.0 + latest + ├── merge to main │ │ + 6.3 + 6 + │ → 6.3.0-b2 tag 6.3.0-RC2 │ + ├── merge to main │ └── start 6.4.0 cycle + │ → 6.3.0-b3 └── 6.3.0-RC2 + latest └── ... ``` +Every tag in this diagram is written exactly as it must be pushed — bare, with no `v`. + ### After a GA Release -After tagging `v6.0.0`, update `pom.xml` on the feature branch to the next version: +After tagging `6.3.0`, update `pom.xml` on the feature branch to the next version: ```bash -# On feature/version-6.1.0 (or rename the branch) -# Update pom.xml: 6.1.0 -# CI builds will now produce 6.1.0-b1, 6.1.0-b2, etc. +# On feature/version-6.4.0 (or rename the branch) +# Update pom.xml: 6.4.0 +# CI builds will now produce 6.4.0-b1, 6.4.0-b2, etc. ``` +`pom.xml` is not the only artefact carrying the release number — the Helm chart, the k8s manifests, +the Dockerfile label, `application.properties` and the bundled agent filename all do too. See the +version-bump entries in [`changelog.md`](changelog.md) for the full file set. + --- ## Release Signing @@ -246,8 +280,10 @@ For full details on how signing works and how to verify images, see [Release Sig When creating release tags, use signed tags: ```bash -# Instead of: git tag v6.0.0 +# Instead of: git tag 6.3.0 # Use: -git tag -s v6.0.0 -m "Release 6.0.0" -git push origin v6.0.0 +git tag -s 6.3.0 -m "Release 6.3.0" +git push origin 6.3.0 ``` + +Signing changes how the tag is created, not what it is called — it is still bare, with no `v`. diff --git a/helm/eddi/Chart.yaml b/helm/eddi/Chart.yaml index fc6123ba81..6f431fe9e1 100644 --- a/helm/eddi/Chart.yaml +++ b/helm/eddi/Chart.yaml @@ -5,8 +5,14 @@ description: >- Orchestrate multiple AI agents, manage stateful conversations, and integrate with LLM providers via a unified REST API. type: application -version: 1.0.0 -appVersion: "6.2.0" +# The CHART's own version, independent of the app it deploys. Bump it on every +# change to anything under helm/ — including the appVersion below. Chart repos +# key on this field, so shipping two different chart contents under one version +# leaves caches and mirrors unable to tell them apart. It sat at 1.0.0 across +# three releases because nothing enforces this; nothing packages the chart yet, +# which is the only reason that was harmless. +version: 1.0.1 +appVersion: "6.3.0" home: https://eddi.labs.ai sources: - https://github.com/labsai/EDDI diff --git a/helm/eddi/values.yaml b/helm/eddi/values.yaml index b15581461f..f866e9530e 100644 --- a/helm/eddi/values.yaml +++ b/helm/eddi/values.yaml @@ -16,7 +16,7 @@ eddi: repository: labsai/eddi # Immutable patch version — never the mutable major tag "6", which lets the # running bits drift away from the digest CI signed and attested. - tag: "6.2.0" + tag: "6.3.0" # Strongest form: also pin the digest, so the kubelet verifies exactly what # cosign signed. Resolve it once per release with `crane digest`: # digest: "sha256:<64 hex chars>" diff --git a/k8s/base/eddi-deployment.yaml b/k8s/base/eddi-deployment.yaml index 0ba763d65a..69fee5041d 100644 --- a/k8s/base/eddi-deployment.yaml +++ b/k8s/base/eddi-deployment.yaml @@ -5,7 +5,7 @@ metadata: name: eddi labels: app.kubernetes.io/name: eddi - app.kubernetes.io/version: "6.2.0" + app.kubernetes.io/version: "6.3.0" app.kubernetes.io/component: server app.kubernetes.io/part-of: eddi spec: @@ -38,7 +38,7 @@ spec: metadata: labels: app.kubernetes.io/name: eddi - app.kubernetes.io/version: "6.2.0" + app.kubernetes.io/version: "6.3.0" app.kubernetes.io/component: server app.kubernetes.io/part-of: eddi annotations: @@ -89,10 +89,10 @@ spec: # cosign verify \ # --certificate-oidc-issuer https://token.actions.githubusercontent.com \ # --certificate-identity-regexp '^https://github\.com/labsai/EDDI/\.github/workflows/ci\.yml@refs/(heads/main|tags/.+)$' \ - # labsai/eddi:6.2.0 - # crane digest labsai/eddi:6.2.0 # → sha256:... - # then append it here: image: labsai/eddi:6.2.0@sha256: - image: labsai/eddi:6.2.0 + # labsai/eddi:6.3.0 + # crane digest labsai/eddi:6.3.0 # → sha256:... + # then append it here: image: labsai/eddi:6.3.0@sha256: + image: labsai/eddi:6.3.0 imagePullPolicy: IfNotPresent # Container-level hardening — without this the pod is rejected outright # by a namespace running the "restricted" Pod Security Standard. diff --git a/k8s/quickstart.yaml b/k8s/quickstart.yaml index 5ca204a5a4..509aaeca0e 100644 --- a/k8s/quickstart.yaml +++ b/k8s/quickstart.yaml @@ -178,7 +178,7 @@ metadata: namespace: eddi labels: app.kubernetes.io/name: eddi - app.kubernetes.io/version: "6.2.0" + app.kubernetes.io/version: "6.3.0" app.kubernetes.io/component: server app.kubernetes.io/part-of: eddi spec: @@ -198,7 +198,7 @@ spec: metadata: labels: app.kubernetes.io/name: eddi - app.kubernetes.io/version: "6.2.0" + app.kubernetes.io/version: "6.3.0" app.kubernetes.io/component: server app.kubernetes.io/part-of: eddi annotations: @@ -235,7 +235,7 @@ spec: - name: eddi # Immutable patch tag, not the mutable ":6". Append @sha256: # after `cosign verify`ing the release to pin exactly what CI signed. - image: labsai/eddi:6.2.0 + image: labsai/eddi:6.3.0 imagePullPolicy: IfNotPresent securityContext: allowPrivilegeEscalation: false diff --git a/pom.xml b/pom.xml index e3a9472e37..94f4dab412 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 ai.labs eddi - 6.2.0 + 6.3.0 3.15.0 25 @@ -16,7 +16,7 @@ 3.0.0.Final quarkus-bom io.quarkus.platform - 3.38.2 + 3.38.3 1.19.0-beta29 1.19.0 1.19.0 @@ -27,7 +27,7 @@ false 3.4.0 1.13.1 - 1.18.0-beta28 + 1.19.0-beta29 true @@ -42,13 +42,13 @@ io.github.classgraph classgraph - 4.8.184 + 4.8.192 com.hubspot.jinjava jinjava - 2.8.3 + 2.8.4 @@ -91,7 +91,7 @@ org.bouncycastle bcprov-lts8on - 2.73.12 + 2.73.12.1 @@ -323,7 +323,7 @@ io.swagger.core.v3 swagger-annotations - 2.2.52 + 2.2.54 de.undercouch @@ -470,7 +470,7 @@ io.nats jnats - 2.26.0 + 2.26.2 @@ -491,7 +491,7 @@ io.swagger.parser.v3 swagger-parser - 2.1.45 + 2.1.47 diff --git a/src/main/docker/Dockerfile b/src/main/docker/Dockerfile index 0aea4009b8..26b30ac39e 100644 --- a/src/main/docker/Dockerfile +++ b/src/main/docker/Dockerfile @@ -81,7 +81,7 @@ FROM registry.access.redhat.com/ubi9/openjdk-25-runtime:1.24@sha256:6b320cbb20bd8b74ed4b44d0ea086cc9651bfc64396fbe6c0d906a8da12bdd20 ### Red Hat Container Certification — required labels -ARG EDDI_VERSION=6.2.0 +ARG EDDI_VERSION=6.3.0 ARG EDDI_RELEASE=1 LABEL name="labsai/eddi" \ diff --git a/src/main/java/ai/labs/eddi/configs/OpenApiConfig.java b/src/main/java/ai/labs/eddi/configs/OpenApiConfig.java index 3319e2afee..78396d030e 100644 --- a/src/main/java/ai/labs/eddi/configs/OpenApiConfig.java +++ b/src/main/java/ai/labs/eddi/configs/OpenApiConfig.java @@ -19,7 +19,7 @@ * * @since 6.0.0 */ -@OpenAPIDefinition(info = @Info(title = "EDDI API", version = "6.2.0"), tags = { +@OpenAPIDefinition(info = @Info(title = "EDDI API", version = "6.3.0"), tags = { // ── Agents ─────────────────────────────────────────────────────── @Tag(name = "Agents", description = "Agent configuration CRUD"), @Tag(name = "Agents / Administration", description = "Deploy, undeploy, trigger, and monitor agents"), diff --git a/src/main/java/ai/labs/eddi/configs/groups/IRestGroupTemplates.java b/src/main/java/ai/labs/eddi/configs/groups/IRestGroupTemplates.java index 08cc28ff86..b85062ae56 100644 --- a/src/main/java/ai/labs/eddi/configs/groups/IRestGroupTemplates.java +++ b/src/main/java/ai/labs/eddi/configs/groups/IRestGroupTemplates.java @@ -26,7 +26,7 @@ * @author ginccc */ @Path("/groupstore/templates") -@Tag(name = "13. Agent Groups", description = "Org/team preset templates") +@Tag(name = "Agents / Groups", description = "Org/team preset templates") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) @RolesAllowed({"eddi-admin", "eddi-editor"}) diff --git a/src/main/java/ai/labs/eddi/configs/groups/IRestGroupWorkspace.java b/src/main/java/ai/labs/eddi/configs/groups/IRestGroupWorkspace.java index 46ef4c7a3f..020af52ea0 100644 --- a/src/main/java/ai/labs/eddi/configs/groups/IRestGroupWorkspace.java +++ b/src/main/java/ai/labs/eddi/configs/groups/IRestGroupWorkspace.java @@ -24,7 +24,7 @@ * @author ginccc */ @Path("/groupstore/groups/{groupId}/workspace") -@Tag(name = "13. Agent Groups", description = "Standing team workspace — backlog, cadences, metrics") +@Tag(name = "Agents / Groups", description = "Standing team workspace — backlog, cadences, metrics") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) @RolesAllowed({"eddi-admin", "eddi-editor"}) diff --git a/src/main/resources/META-INF/resources/assets/.manager-assets b/src/main/resources/META-INF/resources/assets/.manager-assets index be5868854c..659b18458e 100644 --- a/src/main/resources/META-INF/resources/assets/.manager-assets +++ b/src/main/resources/META-INF/resources/assets/.manager-assets @@ -1,135 +1,136 @@ abap-DLDM7-KI.js -accessible-dialog-BO2vat1a.js -action-badge-DHroL-w-.js -advisor-avatar-CRlm-udV.js -agent-detail-DNwNGn8U.js -agent-details-panel-DrjUeebe.js -agent-editor-sheet-B0bu6_DR.js -agent-picker-BKXXvXR0.js -agent-studio-BSaldxbu.js -agent-wizard-BpeKgxxX.js -agents-Ds5MHAjX.js +accessible-dialog-C2wu1H5q.js +action-badge-BjJgsogp.js +advisor-avatar-DRMAoqFt.js +agent-detail-BOY92X78.js +agent-details-panel-ByX72bgM.js +agent-editor-sheet-Ddq_LTe-.js +agent-picker-BMeo54U5.js +agent-studio-on9tBFvm.js +agent-wizard-B1tTR6z6.js +agents-DV22_WZ6.js apex-DNDY2TF8.js -approvals-C-kJIZKJ.js -ar-5iaUFqk2.js -arrow-right-left-Or_4oRf0.js -arrow-up-down-Cz_fDxBo.js -audit-DfusmaeU.js +approvals-BKAl4l81.js +ar-DARxajkw.js +arrow-right-left-J0fZSu2z.js +arrow-up-down-CQw9INyB.js +audit-BAdwDXFj.js azcli-Y6nb8tq_.js -back-link-D2LpIJ51.js -badge-B8rrdXaB.js -ban-DpuGOmt1.js +back-link-tBVRORpr.js +badge-C2HqoOk5.js +ban-C8dQHjQY.js bat-BwHxbl9M.js bicep-CFznDFnq.js -blocked-calls-BfQrNh_6.js -book-open-check-ZT-no4L2.js -bookmark-C8tPewzR.js -braces-C2kMgYG8.js +blocked-calls-BqNBLu7Y.js +book-open-check-DCaE5RYV.js +bookmark-CI1fX0M9.js +braces-y7ww9cFU.js cameligo-Bf6VGUru.js -capabilities-DjMHUxhe.js -card-Blk9R4_z.js -cascade-save-CAECbCBm.js -channel-detail-CqtQSo7D.js -channels-DUqDS1VG.js -chat-panel-IQLg7XQu.js -chat-ULtm2VHR.js -circle-check-big-D1mokjbm.js -clipboard-list-C1xV5BuY.js +capabilities-uaGlMF7H.js +card-CWHKt0V7.js +cascade-save-BHTTkwOb.js +channel-detail-DsbdOxGv.js +channels-BTgb4FTZ.js +chat-DqcQeFeL.js +chat-panel-B1e6hfTn.js +circle-check-big-CBxGct8k.js +clipboard-list-BKNHK2TK.js clojure-Dnu-v4kV.js -code--AVnUtw-.js +code-DBVyO5Cx.js codicon-Brq4_Ui5.ttf coffee-Bd8akH9Z.js -conversation-detail-zgfk5N2Y.js -conversation-monitoring-B3tcMvna.js -conversations-BlT6Iz-c.js -coordinator-BSH22HcJ.js -coordinator-GDpiIhTi.js +conversation-detail-Bjcs1MBi.js +conversation-monitoring-XAKrn4A9.js +conversations-DgDQaSOa.js +coordinator-B4sE0rHY.js +coordinator-BpNLr4Dq.js cpp-BbWJElDN.js -cpu-BsIZspVa.js -create-or-wizard-dialog-DrB8VzrL.js +cpu-zEsE2ia0.js +create-or-wizard-dialog-qFzrzZXk.js csharp-Co3qMtFm.js csp-D-4FJmMZ.js css-DdJfP1eB.js css.worker-3SqvFb2j.js -cssMode-DFvnCjHl.js +cssMode-BQhiich3.js cypher-cTPe9QuQ.js dart-BOtBlQCF.js -dashboard-DpMaPw2X.js -de-YvphfqKX.js -decision-record-card-AIhLlctQ.js +dashboard-km8ODRhV.js +de-Dhne0T6z.js +decision-record-card-BagyXv1G.js dockerfile-BG73LgW2.js -dollar-sign-Dt9VyGPU.js -download-DZjrnAjT.js -dropdown-menu-0RIXy_ad.js +dollar-sign-HonLwnZc.js +download-CVl_y-4e.js +dropdown-menu-DgcKfbXK.js ecl-BEgZUVRK.js editor-registry-CB2SckMT.css -editor-registry-CIV_g9hj.js +editor-registry-jvsNWt75.js editor.worker-mIDmheKH.js elixir-BkW5O-1t.js -ellipsis-vertical-CtSedckm.js -empty-state-DB7ZSzVv.js -error-state-BXe3bnJT.js -es-y-rSdH2T.js -export-agent-dialog-DIJ6YUoj.js -eye-Dbrf-yrM.js -eye-off-DQKzJHI5.js -file-output-BA4KZHPi.js -fingerprint-pattern-Dbd3CWkE.js +ellipsis-vertical-fP6IFBST.js +empty-state-DxZE48rx.js +error-state-D4qtZYFq.js +es-C_lV7PC5.js +export-agent-dialog-Bf3D5WJZ.js +eye-off-PKiH0Asw.js +eye-xZR8Jj8Y.js +file-output-DlS0SPnt.js +fingerprint-pattern-Clkha78G.js flow9-BeJ5waoc.js -fr-DuE7HbtW.js -freemarker2-DiN8Ju52.js +fr-DUqhFc0i.js +freemarker2-CoZsy1EV.js fsharp-PahG7c26.js -funnel-NUFt5LnV.js -gauge-D0qrGV1d.js -gdpr-CuwrWsrF.js -git-compare-arrows-pI8Ehpf-.js +funnel-CaMgE7LA.js +gauge-ML2DGGDJ.js +gdpr-BJ3KV_BD.js +git-compare-arrows-HXbtfCTs.js go-acbASCJo.js graphql-BxJiqAUM.js -group-config-panel-CHXO2yAZ.js -group-config-yXQVQMNQ.js -group-detail-DVclPuHF.js +group-config-DZrgz0vz.js +group-config-panel-VmoYbcrS.js +group-detail-AeGPoYjw.js group-templates-B4YwvSlk.js -group-templates-Umnu69fN.js -group-wizard-CBiV2wHJ.js -group-workspace-Ce93uv6R.js -groups-0vUW2KjW.js -handlebars-DOR9Cq-e.js -handshake-d__LQWU9.js -hash-D4WlnmN6.js +group-templates-CXjG7CAc.js +group-wizard-CR_3Z9ix.js +group-workspace-B23PSf-s.js +groups-BtkBf2hc.js +handlebars-CWdXIirr.js +handshake-foe5KMFV.js +hash-MmAVnsbH.js hcl-DtV1sZF8.js -hi-Bwj5K1RE.js -history-BHMI8MMQ.js -html-BFxY6n68.js +hi-3IwaZROy.js +history-d_YShP6D.js +html-C4Yj3tdw.js html.worker-YKAoroWb.js -htmlMode-AnX_EBKG.js -index-BY6d8wze.js -index-C5CsSAfP.css -infinite-scroll-sentinel-DHJIRY3j.js -info-vszmN4vn.js +htmlMode-NRT3PXyd.js +index-BnLj1hck.js +index-wjMXeUlx.css +infinite-scroll-sentinel-B_MaeDU1.js +info-cNcTVsFc.js ini-Kd9XrMLS.js -ja-BcZZEy3Q.js +input-BV8V9kav.js +ja-RBY4Fsg9.js java-CXBNlu9o.js -javascript-BQ1ascVE.js +javascript-BP_fkOSZ.js json.worker-BZ-IO3m_.js -jsonMode-CM_upRfN.js +jsonMode-B6UDf7e7.js julia-cl7-CwDS.js -ko-CmQF-by-.js +ko-DZYsxs6t.js kotlin-s7OhZKlX.js -layout-grid-BjGzFSfP.js -layout-template-CJfl10R8.js +layout-grid-DZHuDrOW.js +layout-template-CbFD6ZSF.js less-9HpZscsL.js lexon-OrD6JF1K.js -link-2-VQoGUb0U.js -liquid-AywQ9haj.js -list-CX0KxgtB.js -lock-CPVVTGkJ.js -lock-open-1V8q1imA.js -logs-DqrgANSt.js -lspLanguageFeatures-Ajeavr0P.js +link-2-DVp_MD50.js +liquid-BywxO2Ag.js +list-Dqf28LSX.js +lock-CL2SzOGd.js +lock-open-BkYVbmCd.js +logs-C2EfFbkp.js +lspLanguageFeatures-CAae2_b-.js lua-Cyyb5UIc.js m3-B8OfTtLu.js markdown-BFxVWTOG.js -mdx-Cy09YxYR.js +mdx-CuytO5ml.js mips-CiqrrVzr.js msdax-DmeGPVcC.js mysql-C_tMU-Nz.js @@ -607,11 +608,11 @@ noto-sans-thai-latin-wght-normal-Bi3VDbYN.woff2 noto-sans-thai-thai-wght-normal-CtQSZ1tK.woff2 noto-sans-vietnamese-wght-normal-DLTJy58D.woff2 objective-c-BDtDVThU.js -operator-Y_8RJV6n.js -orphans-C-j92JiB.js -panel-right-close-BCp5JpCq.js -panel-right-open-96xUAT4B.js -parser-editor-DJVsdXlv.js +operator-DryvSUju.js +orphans-DuPxq0XX.js +panel-right-close-D7tJkwdn.js +panel-right-open-CmRK7GbO.js +parser-editor-CPhjadeF.js pascal-vHIfCaH5.js pascaligo-DtZ0uQbO.js perl-Ub6l9XKa.js @@ -622,101 +623,102 @@ postiats-CocnycG-.js powerquery-tScXyioY.js powershell-COWaemsV.js protobuf-Brw8urJB.js -pt-BrhwEgO4.js +pt-DxOW1pbS.js pug-8SOpv6rk.js -python-DuVsjFuv.js +python-DJFCDP40.js qsharp-Bw9ernYp.js -quotas-DLAQGcUb.js +quotas-CK6BZtZk.js r-j7ic8hl3.js -radio-DbzYzkde.js -razor-A-iK6PzJ.js +radio-CDuZqls4.js +razor-i6L5r8Nn.js redis-Bu5POkcn.js redshift-Bs9aos_-.js -refetch-error-notice-Dhb_O4GR.js -resource-detail-Bf3dzQv6.js -resource-diff-viewer-D2tV_yay.js -resource-list-CB5GzmFU.js -resource-type-badge-DrHzJ4gd.js -resources-BhAbxNCR.js -resources-R5ikMSzo.js +refetch-error-notice-G50zNkPl.js +resource-detail-KAXQYqcJ.js +resource-diff-viewer-DeowJcjr.js +resource-list-1abOq2A7.js +resource-type-badge-CKybsxy2.js +resources-B_aUsMXU.js +resources-D97MNqv3.js restructuredtext-CqXO7rUv.js -rotate-cw-3PH_gHp-.js +rotate-cw-tG6Eo4U0.js ruby-zBfavPgS.js rust-BzKRNQWT.js -save-lzTRlOlB.js +save-s-dFqxLL.js sb-BBc9UKZt.js scala-D9hQfWCl.js -scale-DJXpJ1ID.js -schedules-CBiwbCna.js +scale-BnMnNt4Y.js +schedules-ByvaIC1j.js scheme-BPhDTwHR.js scss-CBJaRo0y.js -secret-key-picker-TXey-VQE.js -secrets-DnPN092i.js -server-CeKDVLCh.js +secret-key-picker-BCXXdOJ-.js +secrets-DzbtdI39.js +server-BMZQ8ps7.js shell-DiJ1NA_G.js -shield-Ce05kery.js +shield-Dy-B1VeF.js solidity-Db0IVjzk.js sophia-CnS9iZB_.js sparql-CJmd_6j2.js sql-ClhHkBeG.js st-CHwy0fLd.js -star-cKGUeK0l.js -stream-badge-D74j2j2x.js +star-BSD3Ddvs.js +stream-badge-CFlwXVqu.js swift-Bqt4WxQ4.js -sync-page-CTOClhlr.js +sync-page-Jc1UePOx.js systemverilog-Bs9z6M-B.js -tag-DrXWC0RK.js +tag-Cd1R14bi.js tcl-Dm6ycUr_.js -th-D1oFPTdd.js -timer-BX3xgSur.js -toggle-left-CnK8ee-0.js -toggle-right-BF4AE61V.js -tool-approvals-editor-BKW-ZLXY.js -trending-up-C7AIX6kc.js -triggers-p2pfsOgs.js +th-Da9Y2N2R.js +timer-CShnmlWE.js +toggle-left-BKmExca8.js +toggle-right-Kj35wVQ9.js +tool-approvals-editor-S2UA66Hb.js +trending-up-BAvzviUh.js +triggers-_cZZHfzZ.js ts.worker-CZFa66va.js -tsMode-D0HRyvms.js +tsMode-CBVdH5Cy.js twig-Csy3S7wG.js -type-SbeC_oGu.js -types-BY9zm5d-.js -typescript-Bq0Ao-PB.js +type-ChzGm4vJ.js +types-tS6i07ms.js +typescript-z7mhvbE0.js typespec-Btyra-wh.js -undo-2-CF9h_dkU.js -updates-2sIm75dj.js -upload-DxPMOlxt.js -use-agent-setup-DNGNn-HI.js -use-capabilities-qy1S0YmI.js -use-channels-WF2GiCQ0.js -use-conversations-CLcLkU6m.js -use-debounce-BXAMTtyO.js -use-latest-versions-DD4cLMav.js -use-persisted-boolean-CPz6hFYk.js -use-resources-BocDaki1.js -use-save-and-deploy-BNNIKaE0.js -use-secrets-C_oj4VYh.js -use-templates-BfDgZq27.js -use-workflows-DMCr721S.js -user-check-DqvaRbNC.js -user-data-BriA2srf.js -user-plus-CWm5kmVr.js -users-round-I6RBruZ_.js -variables-Bhd0vx7j.js +undo-2-Dh2nRAeV.js +updates-B4K-4KIF.js +upload-D1UCHnd4.js +use-agent-setup-DHji1YL0.js +use-capabilities-CXvHDfSO.js +use-channels-Bw9MmTUU.js +use-conversations-DDsEFA-B.js +use-debounce-DMHuVYwD.js +use-latest-versions-IjYK_BaC.js +use-persisted-boolean-DtyjnYjZ.js +use-resources-xPGGDyiq.js +use-save-and-deploy-CYxj-Seo.js +use-secrets--RofX_r2.js +use-templates-CAiufzx0.js +use-workflows-CmyfhMsp.js +useQueries-DZrQsbjS.js +user-check-BzuCEBUg.js +user-data-cD0Lmgvc.js +user-plus-BhdQPvXt.js +users-round-BYVKZK-i.js +variables-DiV-txaa.js vb-Db0cS2oM.js -view-mode-TQOH38Sf.js -wand-sparkles-DCdkrkbT.js +view-mode-DguClt6l.js +wand-sparkles-BtCP1jzO.js wgsl-BTesnYfV.js -workers-a5re0z0Q.js -workflow-detail-1Pj_rnY5.js -workflows-CAxBNXSH.js -workflows-xE8gvlBd.js -workforce-analytics-CfOpcDIJ.js -workforce-board-Btf89lU0.js -workforce-chat-DE9CYMvc.js -workforce-dashboard-Bw7Ytptj.js -workforce-history-C8J--uyI.js -workforce-settings-5GKwM6f1.js -workforce-thread-Cw8pwBqq.js -workforce-wizard-By2fXXuJ.js -xml-DmRm0v1g.js -yaml-Cl9BY_30.js -zh-CyUsbQJO.js +workers-ckLFiTM8.js +workflow-detail-DVrN0i4N.js +workflows-Bmvpgn_W.js +workflows-DTtF3KEG.js +workforce-analytics-DRl_v3Mg.js +workforce-board-Bl8hoxhS.js +workforce-chat-BEU-i8O8.js +workforce-dashboard-CkzFMDuB.js +workforce-history-DvOnDDjV.js +workforce-settings-BZjJq_e4.js +workforce-thread-Cx8IaYfL.js +workforce-wizard-ChuOFM_W.js +xml-ptITVOc2.js +yaml-BGoDTs3D.js +zh-CiRWAr12.js diff --git a/src/main/resources/META-INF/resources/assets/accessible-dialog-BO2vat1a.js b/src/main/resources/META-INF/resources/assets/accessible-dialog-BO2vat1a.js deleted file mode 100644 index bfbf069fc8..0000000000 --- a/src/main/resources/META-INF/resources/assets/accessible-dialog-BO2vat1a.js +++ /dev/null @@ -1 +0,0 @@ -import{c as y,r as s,j as r,a9 as p}from"./index-BY6d8wze.js";function j({open:a,onClose:o,title:f,children:m,testId:x,maxWidth:b="max-w-md",showClose:h=!0}){const{t:g}=y(),i=s.useRef(null),l=s.useRef(null),c=s.useId();s.useEffect(()=>{var e;a?(l.current=document.activeElement,requestAnimationFrame(()=>{var n;const t=(n=i.current)==null?void 0:n.querySelector('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');t==null||t.focus()})):(e=l.current)==null||e.focus()},[a]),s.useEffect(()=>{if(!a)return;const e=t=>{t.key==="Escape"&&(t.stopPropagation(),o())};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[a,o]);const v=s.useCallback(e=>{if(e.key!=="Tab")return;const t=i.current;if(!t)return;const n=t.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');if(n.length===0)return;const d=n[0],u=n[n.length-1];e.shiftKey&&document.activeElement===d?(e.preventDefault(),u.focus()):!e.shiftKey&&document.activeElement===u&&(e.preventDefault(),d.focus())},[]);return a?r.jsxs(r.Fragment,{children:[r.jsx("div",{className:"fixed inset-0 z-50 bg-black/50 backdrop-blur-sm",onClick:o,"aria-hidden":"true"}),r.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4",children:r.jsxs("div",{ref:i,role:"dialog","aria-modal":"true","aria-labelledby":c,className:`w-full ${b} rounded-xl border bg-card shadow-2xl`,onClick:e=>e.stopPropagation(),onKeyDown:v,"data-testid":x,children:[r.jsxs("div",{className:"flex items-center justify-between border-b border-border p-5",children:[r.jsx("h2",{id:c,className:"text-lg font-semibold text-foreground",children:f}),h&&r.jsx("button",{onClick:o,"aria-label":g("common.close","Close"),className:"rounded-md p-1 text-muted-foreground hover:bg-secondary hover:text-foreground",children:r.jsx(p,{className:"h-5 w-5"})})]}),m]})})]}):null}export{j as A}; diff --git a/src/main/resources/META-INF/resources/assets/accessible-dialog-C2wu1H5q.js b/src/main/resources/META-INF/resources/assets/accessible-dialog-C2wu1H5q.js new file mode 100644 index 0000000000..d54fb18a6d --- /dev/null +++ b/src/main/resources/META-INF/resources/assets/accessible-dialog-C2wu1H5q.js @@ -0,0 +1 @@ +import{c as y,r as s,j as t,a9 as w}from"./index-BnLj1hck.js";function j({open:a,onClose:o,title:f,children:m,testId:x,maxWidth:b="max-w-md",showClose:h=!0}){const{t:v}=y(),i=s.useRef(null),l=s.useRef(null),c=s.useId();s.useEffect(()=>{var e;a?(l.current=document.activeElement,requestAnimationFrame(()=>{var n;const r=(n=i.current)==null?void 0:n.querySelector('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');r==null||r.focus()})):(e=l.current)==null||e.focus()},[a]),s.useEffect(()=>{if(!a)return;const e=r=>{r.key==="Escape"&&(r.stopPropagation(),o())};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[a,o]);const g=s.useCallback(e=>{if(e.key!=="Tab")return;const r=i.current;if(!r)return;const n=r.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');if(n.length===0)return;const d=n[0],u=n[n.length-1];e.shiftKey&&document.activeElement===d?(e.preventDefault(),u.focus()):!e.shiftKey&&document.activeElement===u&&(e.preventDefault(),d.focus())},[]);return a?t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"fixed inset-0 z-50 bg-black/50 backdrop-blur-sm",onClick:o,"aria-hidden":"true"}),t.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4",children:t.jsxs("div",{ref:i,role:"dialog","aria-modal":"true","aria-labelledby":c,className:`flex max-h-[calc(100dvh-2rem)] w-full ${b} flex-col rounded-xl border bg-card shadow-2xl`,onClick:e=>e.stopPropagation(),onKeyDown:g,"data-testid":x,children:[t.jsxs("div",{className:"flex shrink-0 items-center justify-between border-b border-border p-5",children:[t.jsx("h2",{id:c,className:"text-lg font-semibold text-foreground",children:f}),h&&t.jsx("button",{onClick:o,"aria-label":v("common.close","Close"),className:"rounded-md p-1 text-muted-foreground hover:bg-secondary hover:text-foreground",children:t.jsx(w,{className:"h-5 w-5"})})]}),t.jsx("div",{className:"min-h-0 overflow-y-auto",children:m})]})})]}):null}export{j as A}; diff --git a/src/main/resources/META-INF/resources/assets/action-badge-DHroL-w-.js b/src/main/resources/META-INF/resources/assets/action-badge-BjJgsogp.js similarity index 93% rename from src/main/resources/META-INF/resources/assets/action-badge-DHroL-w-.js rename to src/main/resources/META-INF/resources/assets/action-badge-BjJgsogp.js index 41d3024759..ec82a3fb67 100644 --- a/src/main/resources/META-INF/resources/assets/action-badge-DHroL-w-.js +++ b/src/main/resources/META-INF/resources/assets/action-badge-BjJgsogp.js @@ -1 +1 @@ -import{c as u,r as c,j as e,k as y,D as C,a2 as b,av as w,T as S,a4 as v,a1 as P,P as A}from"./index-BY6d8wze.js";import{k as E}from"./resource-type-badge-DrHzJ4gd.js";import{E as k}from"./eye-off-DQKzJHI5.js";import{E as T}from"./eye-Dbrf-yrM.js";import{C as U}from"./circle-check-big-D1mokjbm.js";function F({url:s,auth:n,onUrlChange:m,onAuthChange:x,onConnected:p}){const{t:a}=u(),[o,g]=c.useState(!1),[i,r]=c.useState("idle"),[f,h]=c.useState(0),[j,d]=c.useState(null),l=E();function N(){s.trim()&&(r("connecting"),d(null),l.mutate({sourceUrl:s.trim(),sourceAuth:n.trim()},{onSuccess:t=>{r("connected"),h(t.length),p(t)},onError:t=>{r("error"),d(t.message)}}))}return e.jsxs("form",{className:"space-y-3","data-testid":"sync-config-panel",onSubmit:t=>{t.preventDefault(),N()},children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"text-sm font-medium text-foreground",children:a("syncPage.sourceUrl","Source EDDI Instance URL")}),e.jsx("input",{type:"url",value:s,onChange:t=>{m(t.target.value),i!=="idle"&&r("idle")},placeholder:"https://staging.eddi.example.com",className:"w-full rounded-lg border border-input bg-background px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring","data-testid":"sync-url-input"})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"text-sm font-medium text-foreground",children:a("syncPage.authToken","Authorization Token")}),e.jsxs("div",{className:"relative",children:[e.jsx("input",{type:o?"text":"password",value:n,onChange:t=>x(t.target.value),placeholder:"Bearer eyJhb...",className:"w-full rounded-lg border border-input bg-background px-3 py-2 pe-10 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring","data-testid":"sync-auth-input"}),e.jsx("button",{type:"button",onClick:()=>g(!o),className:"absolute end-2 top-1/2 -translate-y-1/2 rounded p-1 text-muted-foreground hover:text-foreground",children:o?e.jsx(k,{className:"h-4 w-4"}):e.jsx(T,{className:"h-4 w-4"})})]}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:a("syncPage.authHint","Optional. Sent as X-Source-Authorization header.")})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs(y,{type:"submit",disabled:!s.trim()||l.isPending,"data-testid":"sync-connect-btn",children:[l.isPending?e.jsx(C,{className:"h-4 w-4 animate-spin"}):e.jsx(b,{className:"h-4 w-4"}),a("syncPage.connect","Connect")]}),i==="connected"&&e.jsxs("span",{className:"inline-flex items-center gap-1.5 text-xs font-medium text-emerald-600 dark:text-emerald-400",children:[e.jsx(U,{className:"h-4 w-4"}),a("syncPage.connected","Connected")," — ",f," ",a("syncPage.agentsFound","agents")]}),i==="error"&&e.jsxs("span",{className:"inline-flex items-center gap-1.5 text-xs font-medium text-destructive",children:[e.jsx(w,{className:"h-4 w-4"}),j||a("syncPage.connectionFailed","Connection failed")]})]})]})}function O({action:s}){const{t:n}=u();switch(s){case"CREATE":return e.jsxs("span",{className:"inline-flex items-center gap-1 text-xs font-medium text-emerald-500",children:[e.jsx(A,{className:"h-3 w-3"})," ",n("sync.actionCreate","New")]});case"UPDATE":return e.jsxs("span",{className:"inline-flex items-center gap-1 text-xs font-medium text-blue-500",children:[e.jsx(P,{className:"h-3 w-3"})," ",n("sync.actionUpdate","Update")]});case"SKIP":return e.jsxs("span",{className:"inline-flex items-center gap-1 text-xs font-medium text-muted-foreground",children:[e.jsx(v,{className:"h-3 w-3"})," ",n("sync.actionSkip","Up to date")]});case"CONFLICT":return e.jsxs("span",{className:"inline-flex items-center gap-1 text-xs font-medium text-destructive",children:[e.jsx(S,{className:"h-3 w-3"})," ",n("sync.actionConflict","Conflict")]});default:return e.jsx("span",{className:"text-xs text-muted-foreground",children:s})}}export{O as A,F as S}; +import{c as u,r as c,j as e,k as y,D as C,a2 as b,av as w,T as S,a4 as v,a1 as P,P as A}from"./index-BnLj1hck.js";import{k as E}from"./resource-type-badge-CKybsxy2.js";import{E as k}from"./eye-off-PKiH0Asw.js";import{E as T}from"./eye-xZR8Jj8Y.js";import{C as U}from"./circle-check-big-CBxGct8k.js";function F({url:s,auth:n,onUrlChange:m,onAuthChange:x,onConnected:p}){const{t:a}=u(),[o,g]=c.useState(!1),[i,r]=c.useState("idle"),[f,h]=c.useState(0),[j,d]=c.useState(null),l=E();function N(){s.trim()&&(r("connecting"),d(null),l.mutate({sourceUrl:s.trim(),sourceAuth:n.trim()},{onSuccess:t=>{r("connected"),h(t.length),p(t)},onError:t=>{r("error"),d(t.message)}}))}return e.jsxs("form",{className:"space-y-3","data-testid":"sync-config-panel",onSubmit:t=>{t.preventDefault(),N()},children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"text-sm font-medium text-foreground",children:a("syncPage.sourceUrl","Source EDDI Instance URL")}),e.jsx("input",{type:"url",value:s,onChange:t=>{m(t.target.value),i!=="idle"&&r("idle")},placeholder:"https://staging.eddi.example.com",className:"w-full rounded-lg border border-input bg-background px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring","data-testid":"sync-url-input"})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"text-sm font-medium text-foreground",children:a("syncPage.authToken","Authorization Token")}),e.jsxs("div",{className:"relative",children:[e.jsx("input",{type:o?"text":"password",value:n,onChange:t=>x(t.target.value),placeholder:"Bearer eyJhb...",className:"w-full rounded-lg border border-input bg-background px-3 py-2 pe-10 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring","data-testid":"sync-auth-input"}),e.jsx("button",{type:"button",onClick:()=>g(!o),className:"absolute end-2 top-1/2 -translate-y-1/2 rounded p-1 text-muted-foreground hover:text-foreground",children:o?e.jsx(k,{className:"h-4 w-4"}):e.jsx(T,{className:"h-4 w-4"})})]}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:a("syncPage.authHint","Optional. Sent as X-Source-Authorization header.")})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs(y,{type:"submit",disabled:!s.trim()||l.isPending,"data-testid":"sync-connect-btn",children:[l.isPending?e.jsx(C,{className:"h-4 w-4 animate-spin"}):e.jsx(b,{className:"h-4 w-4"}),a("syncPage.connect","Connect")]}),i==="connected"&&e.jsxs("span",{className:"inline-flex items-center gap-1.5 text-xs font-medium text-emerald-600 dark:text-emerald-400",children:[e.jsx(U,{className:"h-4 w-4"}),a("syncPage.connected","Connected")," — ",f," ",a("syncPage.agentsFound","agents")]}),i==="error"&&e.jsxs("span",{className:"inline-flex items-center gap-1.5 text-xs font-medium text-destructive",children:[e.jsx(w,{className:"h-4 w-4"}),j||a("syncPage.connectionFailed","Connection failed")]})]})]})}function O({action:s}){const{t:n}=u();switch(s){case"CREATE":return e.jsxs("span",{className:"inline-flex items-center gap-1 text-xs font-medium text-emerald-500",children:[e.jsx(A,{className:"h-3 w-3"})," ",n("sync.actionCreate","New")]});case"UPDATE":return e.jsxs("span",{className:"inline-flex items-center gap-1 text-xs font-medium text-blue-500",children:[e.jsx(P,{className:"h-3 w-3"})," ",n("sync.actionUpdate","Update")]});case"SKIP":return e.jsxs("span",{className:"inline-flex items-center gap-1 text-xs font-medium text-muted-foreground",children:[e.jsx(v,{className:"h-3 w-3"})," ",n("sync.actionSkip","Up to date")]});case"CONFLICT":return e.jsxs("span",{className:"inline-flex items-center gap-1 text-xs font-medium text-destructive",children:[e.jsx(S,{className:"h-3 w-3"})," ",n("sync.actionConflict","Conflict")]});default:return e.jsx("span",{className:"text-xs text-muted-foreground",children:s})}}export{O as A,F as S}; diff --git a/src/main/resources/META-INF/resources/assets/advisor-avatar-CRlm-udV.js b/src/main/resources/META-INF/resources/assets/advisor-avatar-DRMAoqFt.js similarity index 83% rename from src/main/resources/META-INF/resources/assets/advisor-avatar-CRlm-udV.js rename to src/main/resources/META-INF/resources/assets/advisor-avatar-DRMAoqFt.js index 9754c0af2c..6b94d44934 100644 --- a/src/main/resources/META-INF/resources/assets/advisor-avatar-CRlm-udV.js +++ b/src/main/resources/META-INF/resources/assets/advisor-avatar-DRMAoqFt.js @@ -1 +1 @@ -import{c as d,dy as m,dz as h,j as e,i as s}from"./index-BY6d8wze.js";import{B as f}from"./badge-B8rrdXaB.js";const g={xs:"h-6 w-6 text-[10px]",sm:"h-8 w-8 text-xs",md:"h-10 w-10 text-sm",lg:"h-12 w-12 text-base",xl:"h-16 w-16 text-lg"};function p({name:t,agentId:i,size:r="md",role:a,showRole:l=!1,className:n}){const{t:o}=d(),x=m(t),c=h(i);return e.jsxs("div",{className:s("flex flex-col items-center gap-1",n),children:[e.jsx("div",{role:"img",className:s("flex items-center justify-center rounded-full font-medium text-white",c,g[r]),title:t,"aria-label":o("Workforce.advisor.avatarLabel","{{name}} avatar",{name:t}),children:x||"?"}),l&&a&&e.jsx(f,{variant:"secondary",className:"max-w-20 truncate text-[10px] leading-tight",children:a})]})}export{p as A}; +import{c as d,dz as m,dA as h,j as e,i as s}from"./index-BnLj1hck.js";import{B as f}from"./badge-C2HqoOk5.js";const g={xs:"h-6 w-6 text-[10px]",sm:"h-8 w-8 text-xs",md:"h-10 w-10 text-sm",lg:"h-12 w-12 text-base",xl:"h-16 w-16 text-lg"};function p({name:t,agentId:i,size:r="md",role:a,showRole:l=!1,className:n}){const{t:o}=d(),x=m(t),c=h(i);return e.jsxs("div",{className:s("flex flex-col items-center gap-1",n),children:[e.jsx("div",{role:"img",className:s("flex items-center justify-center rounded-full font-medium text-white",c,g[r]),title:t,"aria-label":o("Workforce.advisor.avatarLabel","{{name}} avatar",{name:t}),children:x||"?"}),l&&a&&e.jsx(f,{variant:"secondary",className:"max-w-20 truncate text-[10px] leading-tight",children:a})]})}export{p as A}; diff --git a/src/main/resources/META-INF/resources/assets/agent-detail-DNwNGn8U.js b/src/main/resources/META-INF/resources/assets/agent-detail-BOY92X78.js similarity index 98% rename from src/main/resources/META-INF/resources/assets/agent-detail-DNwNGn8U.js rename to src/main/resources/META-INF/resources/assets/agent-detail-BOY92X78.js index 162a181234..e452201c52 100644 --- a/src/main/resources/META-INF/resources/assets/agent-detail-DNwNGn8U.js +++ b/src/main/resources/META-INF/resources/assets/agent-detail-BOY92X78.js @@ -1,4 +1,4 @@ -import{x as _e,r as u,c as P,af as W,j as e,n as Ee,T as le,ae as X,w as de,ag as at,a9 as ge,P as F,ah as Te,ai as rt,aj as Pe,ak as oe,al as ot,am as it,an as ce,ao as lt,ad as dt,_ as S,a4 as ct,Y as fe,Z as ue,ap as ut,$ as mt,aq as xt,ar as pt,as as gt,at as ft,G as ht,y as bt,au as yt,H as vt,I as jt,ab as Nt,ac as kt,J as wt,U as Dt,V as Ct,X as Fe,a1 as Ve,av as St,B as At,i as L,O as Ie,Q as Re,aw as Et,ax as Tt,R as $,M as Pt,N as Me,h as Q,W as ie,p as me,ay as It,a3 as Rt,t as Mt,a7 as xe,a8 as pe,az as Lt}from"./index-BY6d8wze.js";import{E as Ot}from"./export-agent-dialog-DIJ6YUoj.js";import{u as $t,a as Ut}from"./use-workflows-DMCr721S.js";import{u as Wt}from"./use-latest-versions-DD4cLMav.js";import{u as _t}from"./use-capabilities-qy1S0YmI.js";import{E as _,T as Ft}from"./tool-approvals-editor-BKW-ZLXY.js";import{S as Le}from"./secret-key-picker-TXey-VQE.js";import{F as Ke}from"./fingerprint-pattern-Dbd3CWkE.js";import{H as Vt}from"./hash-D4WlnmN6.js";import{D as Kt}from"./download-DZjrnAjT.js";import{I as Ht}from"./info-vszmN4vn.js";import{S as Bt}from"./server-CeKDVLCh.js";import{H as Oe}from"./handshake-d__LQWU9.js";import{L as $e}from"./link-2-VQoGUb0U.js";import"./resource-type-badge-DrHzJ4gd.js";import"./lock-CPVVTGkJ.js";import"./workflows-CAxBNXSH.js";import"./use-secrets-C_oj4VYh.js";import"./eye-off-DQKzJHI5.js";import"./eye-Dbrf-yrM.js";/** +import{x as _e,r as u,c as P,af as W,j as e,n as Ee,T as le,ae as X,w as de,ag as at,a9 as ge,P as F,ah as Te,ai as rt,aj as Pe,ak as oe,al as ot,am as it,an as ce,ao as lt,ad as dt,_ as S,a4 as ct,Y as fe,Z as ue,ap as ut,$ as mt,aq as xt,ar as pt,as as gt,at as ft,G as ht,y as bt,au as yt,H as vt,I as jt,ab as Nt,ac as kt,J as wt,U as Dt,V as Ct,X as Fe,a1 as Ve,av as St,B as At,i as L,O as Ie,Q as Re,aw as Et,ax as Tt,R as $,M as Pt,N as Me,h as Q,W as ie,p as me,ay as It,a3 as Rt,t as Mt,a7 as xe,a8 as pe,az as Lt}from"./index-BnLj1hck.js";import{E as Ot}from"./export-agent-dialog-Bf3D5WJZ.js";import{u as $t,a as Ut}from"./use-workflows-CmyfhMsp.js";import{u as Wt}from"./use-latest-versions-IjYK_BaC.js";import{u as _t}from"./use-capabilities-CXvHDfSO.js";import{E as _,T as Ft}from"./tool-approvals-editor-S2UA66Hb.js";import{S as Le}from"./secret-key-picker-BCXXdOJ-.js";import{F as Ke}from"./fingerprint-pattern-Clkha78G.js";import{H as Vt}from"./hash-MmAVnsbH.js";import{D as Kt}from"./download-CVl_y-4e.js";import{I as Ht}from"./info-cNcTVsFc.js";import{S as Bt}from"./server-BMZQ8ps7.js";import{H as Oe}from"./handshake-foe5KMFV.js";import{L as $e}from"./link-2-DVp_MD50.js";import"./resource-type-badge-CKybsxy2.js";import"./lock-CL2SzOGd.js";import"./workflows-DTtF3KEG.js";import"./useQueries-DZrQsbjS.js";import"./use-secrets--RofX_r2.js";import"./eye-off-PKiH0Asw.js";import"./eye-xZR8Jj8Y.js";/** * @license lucide-react v0.577.0 - ISC * * This source code is licensed under the ISC license. @@ -8,4 +8,4 @@ import{x as _e,r as u,c as P,af as W,j as e,n as Ee,T as le,ae as X,w as de,ag a * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const zt=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m4.243 5.21 14.39 12.472",key:"1c9a7c"}]],Ue=_e("shield-ban",zt);function G({value:s,onCommit:n,delay:c=600,...l}){const[t,o]=u.useState(s),r=u.useRef(null);u.useEffect(()=>o(s),[s]);const i=u.useCallback(d=>{r.current&&clearTimeout(r.current),r.current=setTimeout(()=>n(d),c)},[n,c]);return u.useEffect(()=>()=>{r.current&&clearTimeout(r.current)},[]),e.jsx("input",{...l,value:t,onChange:d=>{o(d.target.value),i(d.target.value)}})}function U({value:s,onCommit:n,delay:c=600,fallback:l=0,...t}){const[o,r]=u.useState(String(s)),i=u.useRef(null);u.useEffect(()=>r(String(s)),[s]);const d=u.useCallback(m=>{i.current&&clearTimeout(i.current),i.current=setTimeout(()=>{n(parseFloat(m)||l)},c)},[n,c,l]);return u.useEffect(()=>()=>{i.current&&clearTimeout(i.current)},[]),e.jsx("input",{...t,type:"number",value:o,onChange:m=>{r(m.target.value),d(m.target.value)}})}const Yt=["signInterAgentMessages","signMcpInvocations","requirePeerVerification"],Jt=u.memo(function({agent:n,agentId:c,version:l}){var a,h,v,D,C,I,N,y;const{t}=P(),o=W(),[r,i]=u.useState(null),[d,m]=u.useState(null);u.useEffect(()=>{if(d){const x=setTimeout(()=>m(null),8e3);return()=>clearTimeout(x)}},[d]);const p=Yt.some(x=>{var A;return(A=n.security)==null?void 0:A[x]});function j(x){var R;if(!(((R=n.security)==null?void 0:R[x])??!1)){i(x);return}g(x,!0)}function g(x,A){m(null),o.mutate({id:c,version:l,agent:{...n,security:{...n.security,[x]:!A}}},{onError:R=>{lt(R)&&R.status===400?m(R.message):m(R instanceof Error?R.message:String(R))}})}function b(){r&&(g(r,!1),i(null))}return e.jsxs(_,{label:t("agentDetail.securityIdentity","Security & Identity"),icon:Ee,accent:"text-rose-500",variant:"card",defaultOpen:!!((a=n.security)!=null&&a.signInterAgentMessages||(h=n.security)!=null&&h.signMcpInvocations||(v=n.identity)!=null&&v.agentDid),children:[e.jsxs("div",{className:"space-y-3","data-testid":"identity-section",children:[e.jsxs("h3",{className:"flex items-center gap-1.5 text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:[e.jsx(Ke,{className:"h-3.5 w-3.5"}),t("agentDetail.identity","Cryptographic Identity")]}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-xs text-muted-foreground",children:t("agentDetail.agentDid","Agent DID")}),e.jsx(G,{type:"text",value:((D=n.identity)==null?void 0:D.agentDid)??"",onCommit:x=>o.mutate({id:c,version:l,agent:{...n,identity:{...n.identity,agentDid:x||void 0}}}),placeholder:"did:eddi:agent:...",className:"h-8 w-full rounded-md border border-input bg-background px-2 text-xs text-foreground font-mono focus:outline-none focus:ring-1 focus:ring-ring"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-xs text-muted-foreground",children:t("agentDetail.publicKey","Public Key")}),e.jsx("input",{type:"text",value:((C=n.identity)==null?void 0:C.publicKey)??"",readOnly:!0,placeholder:t("agentDetail.publicKeyHint","Auto-generated on first signing"),className:"h-8 w-full rounded-md border border-input bg-muted/50 px-2 text-xs text-muted-foreground font-mono"})]})]}),(((N=(I=n.identity)==null?void 0:I.keys)==null?void 0:N.length)??0)>0?e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"mb-1 block text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:t("agentDetail.publicKeys","Public Keys")}),e.jsx("div",{className:"space-y-1",children:n.identity.keys.map((x,A)=>e.jsxs("div",{className:"flex items-center gap-2 rounded-md border border-border bg-muted/30 px-2.5 py-1.5",children:[e.jsx("span",{className:"inline-flex items-center rounded bg-primary/10 px-1.5 py-0.5 text-[10px] font-semibold text-primary",children:t("agentDetail.keyVersion","Key v{{version}}",{version:x.version??A})}),e.jsx("span",{className:"flex-1 truncate font-mono text-[10px] text-muted-foreground",dir:"ltr",children:x.publicKeyB64?`${x.publicKeyB64.slice(0,24)}…`:"—"}),x.validUntilMs!=null&&x.validUntilMs>0&&x.validUntilMs{var k;return e.jsxs("label",{className:"flex items-start gap-2.5 py-1",children:[e.jsx("input",{type:"checkbox",checked:((k=n.security)==null?void 0:k[x])??!1,onChange:()=>j(x),disabled:o.isPending,className:"mt-0.5 h-3.5 w-3.5 rounded border-input accent-primary","data-testid":`security-flag-${x}`}),e.jsxs("div",{children:[e.jsx("span",{className:"text-xs font-medium text-foreground",children:A}),e.jsx("p",{className:"text-[10px] text-muted-foreground",children:R})]})]},x)})]}),e.jsx(X,{open:!!r,onOpenChange:x=>{x||i(null)},title:t("agentDetail.securityFlagConfirmTitle","Enable security flag?"),description:t("agentDetail.securityFlagConfirmDesc","Cryptographic signing is not yet available in this version. Enabling this flag will cause the backend to reject saves with HTTP 400. Are you sure you want to proceed?"),confirmLabel:t("agentDetail.securityFlagConfirmBtn","Enable anyway"),cancelLabel:t("common.cancel","Cancel"),onConfirm:b})]})}),Qt=at;function Xt({value:s,onChange:n,onSelect:c,placeholder:l}){const{data:t}=_t(),[o,r]=u.useState(!1),[i,d]=u.useState(-1),m=u.useRef(null),p=u.useMemo(()=>{if(!t||!s.trim())return[];const g=s.trim().toLowerCase();return t.filter(b=>b.toLowerCase().includes(g))},[t,s]);u.useEffect(()=>{function g(b){m.current&&!m.current.contains(b.target)&&r(!1)}return document.addEventListener("mousedown",g),()=>document.removeEventListener("mousedown",g)},[]);function j(g){g.key==="ArrowDown"?(g.preventDefault(),d(b=>Math.min(b+1,p.length-1)),r(!0)):g.key==="ArrowUp"?(g.preventDefault(),d(b=>Math.max(b-1,0))):g.key==="Enter"?(g.preventDefault(),i>=0&&i{n(g.target.value),r(!0),d(-1)},onFocus:()=>{s.trim()&&r(!0)},onKeyDown:j,placeholder:l,className:"h-8 w-full rounded-md border border-input bg-background ps-7 pe-2 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring","data-testid":"skill-autocomplete-input",autoComplete:"off"}),o&&p.length>0&&e.jsx("div",{className:"absolute z-50 mt-1 max-h-40 w-full overflow-auto rounded-lg border border-border bg-card shadow-lg","data-testid":"skill-autocomplete-dropdown",children:p.map((g,b)=>e.jsx("button",{type:"button",onMouseDown:a=>{a.preventDefault(),c(g),r(!1)},onMouseEnter:()=>d(b),className:`w-full px-3 py-1.5 text-start text-xs transition-colors ${b===i?"bg-primary/10 text-primary":"text-foreground hover:bg-secondary"}`,children:g},g))})]})}function Zt({attributes:s,onChange:n,disabled:c}){const{t:l}=P(),t=Object.entries(s),[o,r]=u.useState(""),[i,d]=u.useState(""),m=u.useRef(s);u.useEffect(()=>{m.current=s},[s]);const p=u.useRef(null);u.useEffect(()=>()=>{p.current&&clearTimeout(p.current)},[]);function j(){o.trim()&&(n({...m.current,[o.trim()]:i.trim()}),r(""),d(""))}function g(a){p.current&&(clearTimeout(p.current),p.current=null);const h={...m.current};delete h[a],n(h)}function b(a,h){p.current&&clearTimeout(p.current),p.current=setTimeout(()=>{n({...m.current,[a]:h})},600)}return e.jsxs("div",{className:"space-y-1.5 ps-3 border-s-2 border-violet-500/20",children:[t.map(([a,h])=>e.jsx(en,{attrKey:a,attrValue:h,onCommit:v=>b(a,v),onRemove:()=>g(a),disabled:c},a)),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("input",{type:"text",value:o,onChange:a=>r(a.target.value),onKeyDown:a=>{a.key==="Enter"&&(a.preventDefault(),j())},placeholder:l("agentDetail.attributeKey","key"),disabled:c,className:"h-6 w-20 rounded border border-input bg-background px-1.5 text-[10px] text-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:opacity-50","data-testid":"attribute-key-input"}),e.jsx("input",{type:"text",value:i,onChange:a=>d(a.target.value),onKeyDown:a=>{a.key==="Enter"&&(a.preventDefault(),j())},placeholder:l("agentDetail.attributeValue","value"),disabled:c,className:"h-6 flex-1 rounded border border-input bg-background px-1.5 text-[10px] text-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:opacity-50","data-testid":"attribute-value-input"}),e.jsx("button",{type:"button",onClick:j,disabled:!o.trim()||c,className:"rounded p-0.5 text-muted-foreground hover:text-primary transition-colors disabled:opacity-50",title:l("agentDetail.addAttribute","Add attribute"),children:e.jsx(F,{className:"h-3 w-3"})})]})]})}function en({attrKey:s,attrValue:n,onCommit:c,onRemove:l,disabled:t}){const[o,r]=u.useState(n),i=u.useRef(null);u.useEffect(()=>r(n),[n]),u.useEffect(()=>()=>{i.current&&clearTimeout(i.current)},[]);function d(m){r(m),i.current&&clearTimeout(i.current),i.current=setTimeout(()=>c(m),600)}return e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("span",{className:"shrink-0 rounded bg-violet-500/10 px-1.5 py-0.5 text-[10px] font-medium text-violet-600 dark:text-violet-400",children:s}),e.jsx("input",{type:"text",value:o,onChange:m=>d(m.target.value),disabled:t,className:"h-6 flex-1 rounded border border-input bg-background px-1.5 text-[10px] text-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:opacity-50"}),e.jsx("button",{type:"button",onClick:l,disabled:t,className:"rounded p-0.5 text-muted-foreground hover:text-destructive transition-colors disabled:opacity-50",children:e.jsx(ge,{className:"h-3 w-3"})})]})}const tn=u.memo(function({agent:n,agentId:c,version:l}){const{t}=P(),o=W(),[r,i]=u.useState(""),[d,m]=u.useState(null),p=n.capabilities??[];function j(h){if(!h.trim())return;if(p.some(D=>D.skill===h.trim())){S.error(t("agentDetail.skillAlreadyExists","This skill is already declared"));return}const v=[...p,{skill:h.trim(),confidence:"medium",attributes:{}}];o.mutate({id:c,version:l,agent:{...n,capabilities:v}}),i("")}function g(h){const v=p.filter((D,C)=>C!==h);o.mutate({id:c,version:l,agent:{...n,capabilities:v}}),d===h&&m(null)}function b(h,v){const D=p.map((C,I)=>I===h?{...C,confidence:v}:C);o.mutate({id:c,version:l,agent:{...n,capabilities:D}})}function a(h,v){const D=p.map((C,I)=>I===h?{...C,attributes:v}:C);o.mutate({id:c,version:l,agent:{...n,capabilities:D}})}return e.jsx(_,{label:t("agentDetail.capabilities","Capabilities"),icon:de,accent:"text-violet-500",variant:"card",defaultOpen:p.length>0,children:e.jsxs("div",{className:"space-y-3","data-testid":"capabilities-section",children:[e.jsx("p",{className:"text-[10px] text-muted-foreground",children:t("agentDetail.capabilitiesDesc","Declared skills for A2A agent card and capability registry. Other agents discover these when choosing delegation targets.")}),p.length>0&&e.jsx("div",{className:"space-y-2",children:p.map((h,v)=>e.jsxs("div",{className:"rounded-lg border border-border bg-background overflow-hidden","data-testid":`capability-entry-${v}`,children:[e.jsxs("div",{className:"flex items-center gap-2 p-2.5",children:[e.jsx("button",{type:"button",onClick:()=>m(d===v?null:v),className:"text-muted-foreground hover:text-foreground transition-colors",title:t("agentDetail.toggleAttributes","Toggle attributes"),children:e.jsx(de,{className:"h-3.5 w-3.5 text-violet-500"})}),e.jsx("span",{className:"flex-1 text-xs font-medium text-foreground",children:h.skill}),e.jsxs("select",{value:h.confidence??"medium",onChange:D=>b(v,D.target.value),className:`h-7 rounded-full border px-2 text-[10px] font-semibold focus:outline-none focus:ring-1 focus:ring-ring ${Qt[h.confidence??"medium"]??""}`,"data-testid":`confidence-select-${v}`,children:[e.jsx("option",{value:"low",children:t("agentDetail.confidenceLow","Low")}),e.jsx("option",{value:"medium",children:t("agentDetail.confidenceMedium","Medium")}),e.jsx("option",{value:"high",children:t("agentDetail.confidenceHigh","High")})]}),h.attributes&&Object.keys(h.attributes).length>0&&e.jsxs("button",{type:"button",onClick:()=>m(d===v?null:v),className:"rounded-full bg-violet-500/10 px-1.5 py-0.5 text-[9px] font-medium text-violet-600 dark:text-violet-400 hover:bg-violet-500/20 transition-colors",children:[Object.keys(h.attributes).length," ",t("agentDetail.attrs","attrs")]}),e.jsx("button",{type:"button",onClick:()=>g(v),disabled:o.isPending,className:"rounded p-1 text-muted-foreground hover:text-destructive transition-colors",children:e.jsx(ge,{className:"h-3.5 w-3.5"})})]}),d===v&&e.jsxs("div",{className:"border-t border-border bg-violet-500/[0.02] px-3 py-2.5",children:[e.jsx("p",{className:"mb-1.5 text-[10px] font-medium text-muted-foreground",children:t("agentDetail.attributesLabel","Attributes")}),e.jsx(Zt,{attributes:h.attributes??{},onChange:D=>a(v,D),disabled:o.isPending})]})]},`${h.skill}-${v}`))}),e.jsxs("div",{className:"flex gap-1.5",children:[e.jsx(Xt,{value:r,onChange:i,onSelect:j,placeholder:t("agentDetail.capabilityPlaceholder","Search or type a skill name...")}),e.jsx("button",{type:"button",onClick:()=>j(r),disabled:!r.trim()||o.isPending,className:"inline-flex h-8 items-center gap-1 rounded-md border border-input px-2 text-xs font-medium text-foreground transition-colors hover:bg-secondary disabled:opacity-50","data-testid":"add-capability-btn",children:e.jsx(F,{className:"h-3 w-3"})})]})]})})}),nn=u.memo(function({agent:n,agentId:c,version:l}){const{t}=P(),o=W(),r=n.enableMemoryTools??!1,i=n.userMemoryConfig??{},d=i.dream??{},m=i.guardrails??{};function p(a){o.mutate({id:c,version:l,agent:{...n,...a}})}function j(a){p({userMemoryConfig:{...i,...a}})}function g(a){j({dream:{...d,...a}})}function b(a){j({guardrails:{...m,...a}})}return e.jsx(_,{label:t("agentDetail.userMemory","User Memory"),icon:Te,accent:"text-teal-500",variant:"card",defaultOpen:r,children:e.jsxs("div",{className:"space-y-4","data-testid":"user-memory-section",children:[e.jsx("p",{className:"text-[10px] text-muted-foreground leading-relaxed",children:t("agentDetail.userMemoryDesc","Persistent per-user memory with LLM tools (remember/recall/forget). Basic longTerm property persistence always works regardless of this toggle.")}),e.jsxs("label",{className:"inline-flex items-center gap-2 text-xs font-medium text-foreground",children:[e.jsx("input",{type:"checkbox",checked:r,onChange:()=>p({enableMemoryTools:!r}),disabled:o.isPending,className:"h-3.5 w-3.5 rounded border-input accent-primary"}),e.jsx(Te,{className:"h-3.5 w-3.5 text-teal-500"}),t("agentDetail.enableMemoryTools","Enable Memory Tools")]}),r&&e.jsxs("div",{className:"space-y-4 rounded-lg border border-teal-500/20 bg-teal-500/5 p-4",children:[e.jsxs("div",{className:"grid grid-cols-3 gap-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:"mb-0.5 block text-[10px] text-muted-foreground",children:t("agentDetail.defaultVisibility","Default Visibility")}),e.jsxs("select",{value:i.defaultVisibility??"self",onChange:a=>j({defaultVisibility:a.target.value}),className:"h-7 w-full rounded border border-input bg-background px-1.5 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring",children:[e.jsx("option",{value:"self",children:t("agentDetail.visibilitySelf","self")}),e.jsx("option",{value:"global",children:t("agentDetail.visibilityGlobal","global")})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-0.5 block text-[10px] text-muted-foreground",children:t("agentDetail.maxRecallEntries","Max Recall")}),e.jsx(U,{value:i.maxRecallEntries??50,onCommit:a=>j({maxRecallEntries:a}),fallback:50,className:"h-7 w-full rounded border border-input bg-background px-2 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-0.5 block text-[10px] text-muted-foreground",children:t("agentDetail.maxEntriesPerUser","Max per User")}),e.jsx(U,{value:i.maxEntriesPerUser??500,onCommit:a=>j({maxEntriesPerUser:a}),fallback:500,className:"h-7 w-full rounded border border-input bg-background px-2 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring"})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:"mb-0.5 block text-[10px] text-muted-foreground",children:t("agentDetail.onCapReached","On Cap Reached")}),e.jsxs("select",{value:i.onCapReached??"evict_oldest",onChange:a=>j({onCapReached:a.target.value}),className:"h-7 w-full rounded border border-input bg-background px-1.5 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring",children:[e.jsx("option",{value:"evict_oldest",children:t("agentDetail.onCapEvict","Evict Oldest")}),e.jsx("option",{value:"reject",children:t("agentDetail.onCapReject","Reject")})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-0.5 block text-[10px] text-muted-foreground",children:t("agentDetail.recallOrder","Recall Order")}),e.jsxs("select",{value:i.recallOrder??"most_recent",onChange:a=>j({recallOrder:a.target.value}),className:"h-7 w-full rounded border border-input bg-background px-1.5 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring",children:[e.jsx("option",{value:"most_recent",children:t("agentDetail.recallMostRecent","Most Recent")}),e.jsx("option",{value:"most_relevant",children:t("agentDetail.recallMostRelevant","Most Relevant")})]})]})]}),e.jsxs("div",{className:"space-y-2 border-t border-teal-500/20 pt-3",children:[e.jsx("h4",{className:"text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:t("agentDetail.guardrails","Write Guardrails")}),e.jsxs("div",{className:"grid grid-cols-3 gap-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:"mb-0.5 block text-[10px] text-muted-foreground",children:t("agentDetail.maxKeyLength","Max Key Length")}),e.jsx(U,{value:m.maxKeyLength??100,onCommit:a=>b({maxKeyLength:a}),fallback:100,className:"h-7 w-full rounded border border-input bg-background px-2 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-0.5 block text-[10px] text-muted-foreground",children:t("agentDetail.maxValueLength","Max Value Length")}),e.jsx(U,{value:m.maxValueLength??1e3,onCommit:a=>b({maxValueLength:a}),fallback:1e3,className:"h-7 w-full rounded border border-input bg-background px-2 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-0.5 block text-[10px] text-muted-foreground",children:t("agentDetail.maxWritesPerTurn","Max Writes/Turn")}),e.jsx(U,{value:m.maxWritesPerTurn??10,onCommit:a=>b({maxWritesPerTurn:a}),fallback:10,className:"h-7 w-full rounded border border-input bg-background px-2 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring"})]})]})]}),e.jsxs("div",{className:"space-y-2 border-t border-teal-500/20 pt-3",children:[e.jsxs("label",{className:"inline-flex items-center gap-2 text-xs font-medium text-foreground",children:[e.jsx("input",{type:"checkbox",checked:d.enabled??!1,onChange:()=>g({enabled:!(d.enabled??!1)}),disabled:o.isPending,className:"h-3.5 w-3.5 rounded border-input accent-primary"}),e.jsx(rt,{className:"h-3.5 w-3.5 text-indigo-400"}),t("agentDetail.dreamConsolidation","Dream Consolidation")]}),e.jsx("p",{className:"text-[10px] text-muted-foreground ps-5",children:t("agentDetail.dreamDesc","Background LLM job that resolves contradictions, prunes stale entries, and optionally summarizes interactions.")}),d.enabled&&e.jsxs("div",{className:"space-y-3 ps-5",children:[e.jsxs("div",{className:"grid grid-cols-3 gap-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:"mb-0.5 block text-[10px] text-muted-foreground",children:t("agentDetail.dreamSchedule","Schedule (cron)")}),e.jsx(G,{type:"text",value:d.schedule??"0 3 * * *",onCommit:a=>g({schedule:a}),placeholder:"0 3 * * *",className:"h-7 w-full rounded border border-input bg-background px-2 text-xs text-foreground font-mono focus:outline-none focus:ring-1 focus:ring-ring"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-0.5 block text-[10px] text-muted-foreground",children:t("agentDetail.dreamLlmProvider","LLM Provider")}),e.jsx(G,{type:"text",value:d.llmProvider??"anthropic",onCommit:a=>g({llmProvider:a}),className:"h-7 w-full rounded border border-input bg-background px-2 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-0.5 block text-[10px] text-muted-foreground",children:t("agentDetail.dreamLlmModel","LLM Model")}),e.jsx(G,{type:"text",value:d.llmModel??"claude-sonnet-5",onCommit:a=>g({llmModel:a}),placeholder:"claude-sonnet-5",className:"h-7 w-full rounded border border-input bg-background px-2 text-xs text-foreground font-mono focus:outline-none focus:ring-1 focus:ring-ring"})]})]}),e.jsxs("div",{className:"grid grid-cols-3 gap-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:"mb-0.5 block text-[10px] text-muted-foreground",children:t("agentDetail.dreamMaxCost","Max Cost/Run ($)")}),e.jsx(U,{value:d.maxCostPerRun??5,onCommit:a=>g({maxCostPerRun:a}),fallback:5,step:.01,className:"h-7 w-full rounded border border-input bg-background px-2 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-0.5 block text-[10px] text-muted-foreground",children:t("agentDetail.dreamPruneDays","Prune After (days)")}),e.jsx(U,{value:d.pruneStaleAfterDays??90,onCommit:a=>g({pruneStaleAfterDays:a}),fallback:90,className:"h-7 w-full rounded border border-input bg-background px-2 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-0.5 block text-[10px] text-muted-foreground",children:t("agentDetail.dreamBatchSize","Batch Size")}),e.jsx(U,{value:d.batchSize??50,onCommit:a=>g({batchSize:a}),fallback:50,className:"h-7 w-full rounded border border-input bg-background px-2 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring"})]})]}),e.jsxs("div",{className:"flex gap-4",children:[e.jsxs("label",{className:"inline-flex items-center gap-1.5 text-xs text-foreground",children:[e.jsx("input",{type:"checkbox",checked:d.detectContradictions??!0,onChange:a=>g({detectContradictions:a.target.checked}),className:"h-3.5 w-3.5 rounded border-input accent-primary"}),t("agentDetail.detectContradictions","Detect contradictions")]}),e.jsxs("label",{className:"inline-flex items-center gap-1.5 text-xs text-foreground",children:[e.jsx("input",{type:"checkbox",checked:d.summarizeInteractions??!1,onChange:a=>g({summarizeInteractions:a.target.checked}),className:"h-3.5 w-3.5 rounded border-input accent-primary"}),t("agentDetail.summarizeInteractions","Summarize interactions")]})]})]})]})]})]})})}),sn=u.memo(function({agent:n,agentId:c,version:l}){const{t}=P(),o=W(),r=n.memoryPolicy??{},i=r.strictWriteDiscipline??{},d=i.enabled??!1;function m(p){o.mutate({id:c,version:l,agent:{...n,memoryPolicy:{...r,strictWriteDiscipline:{...i,...p}}}})}return e.jsx(_,{label:t("agentDetail.memoryPolicy","Memory Policy"),icon:Ue,accent:"text-rose-500",variant:"card",defaultOpen:d,children:e.jsxs("div",{className:"space-y-3","data-testid":"memory-policy-section",children:[e.jsx("p",{className:"text-[10px] text-muted-foreground leading-relaxed",children:t("agentDetail.memoryPolicyDesc","Strict Write Discipline governs what happens when property updates fail during a conversation step. Choose how the engine handles partially committed data.")}),e.jsxs("label",{className:"inline-flex items-center gap-2 text-xs font-medium text-foreground",children:[e.jsx("input",{type:"checkbox",checked:d,onChange:()=>m({enabled:!d}),disabled:o.isPending,className:"h-3.5 w-3.5 rounded border-input accent-primary","data-testid":"swd-enable"}),e.jsx(Ue,{className:"h-3.5 w-3.5 text-rose-500"}),t("agentDetail.enableSwd","Enable Strict Write Discipline")]}),d&&e.jsx("div",{className:"space-y-3 rounded-lg border border-rose-500/20 bg-rose-500/5 p-3",children:e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:t("agentDetail.onFailure","On Failure Strategy")}),e.jsxs("select",{value:i.onFailure??"digest",onChange:p=>m({onFailure:p.target.value}),disabled:o.isPending,className:"h-8 w-full rounded-md border border-input bg-background px-2 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:opacity-60","data-testid":"swd-on-failure",children:[e.jsx("option",{value:"digest",children:t("agentDetail.onFailureDigest","Digest — rollback changes, report summary to LLM")}),e.jsx("option",{value:"exclude_all",children:t("agentDetail.onFailureExclude","Exclude All — silently drop all property updates")}),e.jsx("option",{value:"keep_all",children:t("agentDetail.onFailureKeep","Keep All — keep changes and log warning")})]})]})})]})})}),an=["before_tool","before_action"],rn=u.memo(function({agent:n,agentId:c,version:l}){const{t}=P(),o=W(),r=n.hitlConfig??{},i=!!n.hitlConfig;function d(a){o.mutate({id:c,version:l,agent:{...n,hitlConfig:{...r,...a}}})}function m(a){if(a)o.mutate({id:c,version:l,agent:{...n,hitlConfig:{timeoutPolicy:"WAIT_INDEFINITELY",approvalTimeout:null,...r}}});else{const h={...n};delete h.hitlConfig,o.mutate({id:c,version:l,agent:h})}}const p=Pe(r.timeoutPolicy),[j,g]=u.useState(r.approvalTimeout??"");u.useEffect(()=>g(r.approvalTimeout??""),[r.approvalTimeout,p]);const b=p&&(!j.trim()||!oe(j.trim()));return e.jsx(_,{label:t("agentDetail.hitlConfig","Human-in-the-Loop"),icon:ot,accent:"text-amber-500",variant:"card",defaultOpen:i,children:e.jsxs("div",{className:"space-y-4","data-testid":"hitl-config-section",children:[e.jsx("p",{className:"text-[10px] text-muted-foreground leading-relaxed",children:t("agentDetail.hitlConfigDesc","When this agent pauses a conversation for human approval, these settings control how long to wait and what happens if no decision is made in time.")}),e.jsxs("label",{className:"inline-flex items-center gap-2 text-xs font-medium text-foreground",children:[e.jsx("input",{type:"checkbox",checked:i,onChange:()=>m(!i),disabled:o.isPending,className:"h-3.5 w-3.5 rounded border-input accent-primary","data-testid":"hitl-config-enabled"}),t("agentDetail.hitlEnable","Configure human-approval timeouts")]}),i&&e.jsxs("div",{className:"space-y-3 ps-5",children:[e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-[10px] text-muted-foreground",children:t("agentDetail.hitlPauseReason","Approval reason (shown to approvers)")}),e.jsx(G,{type:"text",value:r.pauseReason??"",onCommit:a=>d({pauseReason:a.trim()||null}),maxLength:it,placeholder:t("agentDetail.hitlPauseReasonPlaceholder","e.g. Deletion requires manager sign-off"),className:"h-8 w-full rounded-md border border-input bg-background px-2 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring","data-testid":"hitl-pause-reason"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-[10px] text-muted-foreground",children:t("agentDetail.hitlTimeoutPolicy","If no decision in time")}),e.jsxs("select",{value:r.timeoutPolicy??"WAIT_INDEFINITELY",onChange:a=>{const h=a.target.value,v={timeoutPolicy:h};Pe(h)&&!(r.approvalTimeout&&oe(r.approvalTimeout))&&(v.approvalTimeout="PT15M"),d(v)},disabled:o.isPending,className:"w-full appearance-none rounded-lg border border-input bg-background px-3 py-1.5 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring","data-testid":"hitl-timeout-policy",children:[e.jsx("option",{value:"WAIT_INDEFINITELY",children:t("hitl.timeoutWaitIndefinitely","Wait Indefinitely")}),e.jsx("option",{value:"AUTO_APPROVE",children:t("hitl.timeoutAutoApprove","Auto-Approve")}),e.jsx("option",{value:"AUTO_REJECT",children:t("hitl.timeoutAutoReject","Auto-Reject")}),e.jsx("option",{value:"ABORT",children:t("hitl.timeoutAbort","Abort")})]})]}),p&&e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-[10px] text-muted-foreground",children:t("agentDetail.hitlApprovalTimeout","Approval timeout (ISO-8601)")}),e.jsx("input",{type:"text",value:j,onChange:a=>g(a.target.value),onBlur:()=>{const a=j.trim()||null;p&&!(a&&oe(a))||a!==(r.approvalTimeout??null)&&d({approvalTimeout:a})},placeholder:"PT15M",className:`h-8 w-full rounded-md border bg-background px-2 text-xs font-mono text-foreground focus:outline-none focus:ring-1 focus:ring-ring ${b?"border-destructive":"border-input"}`,"data-testid":"hitl-approval-timeout"}),e.jsx("p",{className:`mt-1 text-[10px] ${b?"text-destructive":"text-muted-foreground"}`,children:b?t("agentDetail.hitlTimeoutInvalid","A finite policy needs a positive ISO-8601 duration, e.g. PT15M."):t("agentDetail.hitlTimeoutHint","e.g. PT30S, PT15M, PT2H.")})]}),e.jsxs("div",{className:"border-t border-border pt-3",children:[e.jsxs("label",{className:"inline-flex items-center gap-2 text-xs font-medium text-foreground",children:[e.jsx("input",{type:"checkbox",checked:!!r.toolApprovals,onChange:a=>d({toolApprovals:a.target.checked?{}:null}),disabled:o.isPending,className:"h-3.5 w-3.5 rounded border-input accent-primary","data-testid":"hitl-tool-enabled"}),t("agentDetail.toolApprovalsEnable","Gate specific tool calls for approval")]}),r.toolApprovals&&e.jsx("div",{className:"mt-3",children:e.jsx(Ft,{value:r.toolApprovals,disabled:o.isPending,agentTimeoutPolicy:r.timeoutPolicy,onChange:a=>d({toolApprovals:{...r.toolApprovals,...a}})})})]})]})]})})}),on=u.memo(function({agent:n,agentId:c,version:l}){const{t}=P(),o=W(),r=n.sessionManagement??{},i=r.autoSnapshot??{};function d(p){o.mutate({id:c,version:l,agent:{...n,sessionManagement:{...r,...p}}})}function m(p){d({autoSnapshot:{...i,...p}})}return e.jsx(_,{label:t("agentDetail.sessionManagement","Session Management"),icon:Ke,accent:"text-teal-500",variant:"card",defaultOpen:i.enabled??!1,children:e.jsxs("div",{className:"space-y-4","data-testid":"session-management-section",children:[e.jsx("p",{className:"text-[10px] text-muted-foreground leading-relaxed",children:t("agentDetail.sessionManagementDesc","Memory checkpoints capture conversation state before risky operations, enabling clean rollback on failure.")}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("label",{className:"inline-flex items-center gap-2 text-xs font-medium text-foreground",children:[e.jsx("input",{type:"checkbox",checked:i.enabled??!1,onChange:()=>m({enabled:!(i.enabled??!1)}),disabled:o.isPending,className:"h-3.5 w-3.5 rounded border-input accent-primary","data-testid":"auto-snapshot-enabled"}),t("agentDetail.autoSnapshotEnable","Enable automatic checkpoints")]}),i.enabled&&e.jsxs("div",{className:"space-y-3 ps-5",children:[e.jsxs("div",{children:[e.jsx("label",{className:"mb-1.5 block text-[10px] text-muted-foreground",children:t("agentDetail.triggerOn","Trigger On")}),e.jsx("div",{className:"flex flex-wrap gap-2",children:an.map(p=>{const j=(i.triggerOn??[]).includes(p);return e.jsx("button",{type:"button",onClick:()=>{const g=i.triggerOn??[],b=j?g.filter(a=>a!==p):[...g,p];m({triggerOn:b.length>0?b:void 0})},disabled:o.isPending,className:`inline-flex items-center gap-1 rounded-md border px-2.5 py-1 text-[10px] font-medium transition-colors ${j?"border-primary bg-primary/10 text-primary":"border-border text-muted-foreground hover:text-foreground hover:border-foreground/30"}`,children:p==="before_tool"?t("agentDetail.triggerBeforeTool","Before tool execution"):t("agentDetail.triggerBeforeAction","Before action")},p)})})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("label",{className:"text-xs text-foreground whitespace-nowrap",children:t("agentDetail.maxCheckpoints","Max Checkpoints")}),e.jsx(U,{value:r.maxCheckpointsPerConversation??10,onCommit:p=>d({maxCheckpointsPerConversation:p}),min:1,max:100,className:"h-7 w-20 rounded border border-input bg-background px-2 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring"}),e.jsx("span",{className:"text-[10px] text-muted-foreground",children:t("agentDetail.maxCheckpointsHint","per conversation")})]})]})]}),e.jsxs("div",{className:"border-t border-border pt-3 space-y-2",children:[e.jsxs("label",{className:"inline-flex items-center gap-2 text-xs font-medium text-muted-foreground cursor-not-allowed",title:t("agentDetail.forkingDisabledTooltip","Available in a future release"),children:[e.jsx("input",{type:"checkbox",checked:r.forkingEnabled??!1,disabled:!0,className:"h-3.5 w-3.5 rounded border-input accent-primary opacity-50","data-testid":"forking-enabled"}),t("agentDetail.forkingEnabled","Session Forking"),e.jsxs("span",{className:"text-[9px] font-normal text-muted-foreground/70",children:["(",t("agentDetail.comingSoon","coming soon"),")"]})]}),e.jsx("p",{className:"text-[10px] text-muted-foreground ps-5",children:t("agentDetail.forkingNote","Session forking endpoint (POST /v6/conversations/{id}/fork) is not yet available.")}),e.jsxs("div",{className:"flex items-center gap-2 ps-5 opacity-50 cursor-not-allowed",children:[e.jsx("label",{className:"text-xs text-foreground whitespace-nowrap",children:t("agentDetail.maxForks","Max Forks")}),e.jsx("input",{type:"number",value:r.maxForksPerConversation??5,disabled:!0,className:"h-7 w-20 rounded border border-input bg-muted/50 px-2 text-xs text-muted-foreground",title:t("agentDetail.forkingDisabledTooltip","Available in a future release")}),e.jsx("span",{className:"text-[10px] text-muted-foreground",children:t("agentDetail.maxForksHint","per conversation")})]})]})]})})});function ln(){return typeof window<"u"?`${window.location.origin}/integrations/slack/events`:""}function dn(){const{t:s}=P(),[n,c]=u.useState(!1),l=ln(),[t,o]=u.useState(!1);function r(){navigator.clipboard.writeText(l).then(()=>{o(!0),S.success(s("agentDetail.slackWebhookCopied","Webhook URL copied")),setTimeout(()=>o(!1),2e3)}).catch(()=>{S.error(s("common.copyFailed","Failed to copy to clipboard"))})}return e.jsxs("div",{className:"rounded-lg border border-indigo-500/20 bg-indigo-500/5",children:[e.jsxs("button",{type:"button",onClick:()=>c(!n),className:"flex w-full items-center gap-2 px-4 py-2.5 text-start",children:[e.jsx(qt,{className:"h-4 w-4 text-indigo-500 shrink-0"}),e.jsx("span",{className:"flex-1 text-xs font-semibold text-indigo-600 dark:text-indigo-400",children:s("agentDetail.slackSetupGuide","Slack Setup Guide")}),e.jsx(ce,{className:`h-3.5 w-3.5 text-indigo-500/50 transition-transform ${n?"rotate-180":""}`})]}),n&&e.jsxs("div",{className:"space-y-4 border-t border-indigo-500/20 px-4 py-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:s("agentDetail.slackWebhookUrl","Webhook URL")}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("code",{className:"flex-1 rounded-md border border-input bg-background px-2.5 py-1.5 font-mono text-xs text-foreground break-all",children:l}),e.jsx("button",{type:"button",onClick:r,className:"shrink-0 rounded-md border border-input p-1.5 text-muted-foreground hover:bg-secondary hover:text-foreground transition-colors",title:s("common.copy","Copy"),children:t?e.jsx(ct,{className:"h-3.5 w-3.5 text-emerald-500"}):e.jsx(fe,{className:"h-3.5 w-3.5"})})]})]}),e.jsxs("ol",{className:"space-y-1.5 text-xs text-muted-foreground",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded-full bg-indigo-500/10 text-[10px] font-bold text-indigo-500",children:"1"}),s("agentDetail.slackStep1","Create a Slack App at api.slack.com/apps and install it to your workspace.")]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded-full bg-indigo-500/10 text-[10px] font-bold text-indigo-500",children:"2"}),s("agentDetail.slackStep2","Copy the Bot Token (xoxb-…) and Signing Secret into the EDDI vault and configure channels below.")]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded-full bg-indigo-500/10 text-[10px] font-bold text-indigo-500",children:"3"}),e.jsxs("span",{children:[s("agentDetail.slackStep3","Then enable Event Subscriptions in your Slack App, paste the Webhook URL above, and subscribe to:"),e.jsx("code",{className:"ms-1 rounded bg-muted px-1 py-0.5 font-mono text-[10px]",children:"app_mention"}),","," ",e.jsx("code",{className:"rounded bg-muted px-1 py-0.5 font-mono text-[10px]",children:"message.im"})]})]})]}),e.jsx("p",{className:"text-[10px] text-muted-foreground/70 leading-relaxed",children:s("agentDetail.slackSetupNote","Important: Configure the channel below before enabling Event Subscriptions — Slack sends a URL verification challenge that requires the signing secret to be configured in EDDI.")}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:s("agentDetail.slackRequiredScopes","Required Bot Token Scopes")}),e.jsx("div",{className:"flex flex-wrap gap-1",children:["app_mentions:read","chat:write","channels:history","groups:history","im:history","mpim:history"].map(i=>e.jsx("code",{className:"rounded bg-muted px-1.5 py-0.5 font-mono text-[10px] text-muted-foreground",children:i},i))})]})]})]})}function cn({channel:s,index:n,onUpdate:c,onRemove:l,disabled:t}){const{t:o}=P(),r=u.useMemo(()=>s.config??{},[s.config]),i=u.useRef(r);u.useEffect(()=>{i.current=r},[r]);const[d,m]=u.useState(r.channelId??""),[p,j]=u.useState(r.groupId??""),[g,b]=u.useState(!1),a=u.useRef(null),h=u.useRef(null);u.useEffect(()=>m(r.channelId??""),[r.channelId]),u.useEffect(()=>j(r.groupId??""),[r.groupId]),u.useEffect(()=>()=>{a.current&&clearTimeout(a.current),h.current&&clearTimeout(h.current)},[]);function v(N){a.current&&clearTimeout(a.current),a.current=setTimeout(()=>{c(n,{...i.current,channelId:N})},600)}function D(N){h.current&&clearTimeout(h.current),h.current=setTimeout(()=>{if(N.trim())c(n,{...i.current,groupId:N});else{const{groupId:y,...x}=i.current;c(n,x)}},600)}function C(N,y){c(n,{...i.current,[N]:y})}const I=!d||/^C[A-Z0-9]+$/.test(d);return e.jsxs("div",{className:"rounded-lg border border-border bg-background","data-testid":`slack-channel-${n}`,children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-border px-4 py-2.5",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Vt,{className:"h-4 w-4 text-indigo-500"}),e.jsx("span",{className:"text-xs font-semibold text-foreground",children:o("agentDetail.slackChannel","Slack Channel")}),d&&e.jsx("code",{className:"rounded bg-muted px-1.5 py-0.5 font-mono text-[10px] text-muted-foreground",children:d})]}),e.jsx("button",{type:"button",onClick:()=>b(!0),disabled:t,className:"rounded p-1 text-muted-foreground hover:bg-destructive/10 hover:text-destructive transition-colors disabled:opacity-50",title:o("agentDetail.removeChannel","Remove channel"),"data-testid":`remove-channel-${n}`,children:e.jsx(ue,{className:"h-3.5 w-3.5"})})]}),e.jsxs("div",{className:"space-y-3 p-4",children:[e.jsxs("div",{children:[e.jsxs("label",{className:"mb-1 block text-[10px] font-medium text-muted-foreground",children:[o("agentDetail.channelId","Channel ID")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx("input",{type:"text",value:d,onChange:N=>{const y=N.target.value;m(y),v(y)},disabled:t,placeholder:"C0123ABCDEF",className:`h-8 w-full rounded-md border bg-background px-2.5 font-mono text-xs text-foreground placeholder:text-muted-foreground/50 focus:outline-none focus:ring-1 focus:ring-ring disabled:opacity-60 ${I?"border-input":"border-amber-500"}`,"data-testid":`channel-id-${n}`}),!I&&e.jsx("p",{className:"mt-0.5 text-[10px] text-amber-600 dark:text-amber-400",children:o("agentDetail.channelIdHint","Channel IDs start with C followed by uppercase alphanumeric characters")})]}),e.jsxs("div",{children:[e.jsxs("label",{className:"mb-1 block text-[10px] font-medium text-muted-foreground",children:[o("agentDetail.botToken","Bot Token")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(Le,{value:r.botToken??"",onChange:N=>C("botToken",N),readOnly:t,placeholder:o("agentDetail.botTokenPlaceholder","xoxb-… or ${vault:slack-bot-token}"),testId:`bot-token-${n}`}),e.jsx("p",{className:"mt-0.5 text-[10px] text-muted-foreground/70",children:o("agentDetail.botTokenHint","Slack Bot User OAuth Token. Use a vault reference for security.")})]}),e.jsxs("div",{children:[e.jsxs("label",{className:"mb-1 block text-[10px] font-medium text-muted-foreground",children:[o("agentDetail.signingSecret","Signing Secret")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(Le,{value:r.signingSecret??"",onChange:N=>C("signingSecret",N),readOnly:t,placeholder:o("agentDetail.signingSecretPlaceholder","Hex string or ${vault:slack-signing-secret}"),testId:`signing-secret-${n}`}),e.jsx("p",{className:"mt-0.5 text-[10px] text-muted-foreground/70",children:o("agentDetail.signingSecretHint","From your Slack App's Basic Information page. Use a vault reference for security.")})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-[10px] font-medium text-muted-foreground",children:o("agentDetail.groupIdOptional","Group ID (optional)")}),e.jsx("input",{type:"text",value:p,onChange:N=>{const y=N.target.value;j(y),D(y)},disabled:t,placeholder:o("agentDetail.groupIdPlaceholder","Multi-agent group config ID"),className:"h-8 w-full rounded-md border border-input bg-background px-2.5 font-mono text-xs text-foreground placeholder:text-muted-foreground/50 focus:outline-none focus:ring-1 focus:ring-ring disabled:opacity-60","data-testid":`group-id-${n}`}),e.jsx("p",{className:"mt-0.5 text-[10px] text-muted-foreground/70",children:o("agentDetail.groupIdHint",'Set this to enable "group: question" multi-agent discussions from this Slack channel.')})]})]}),e.jsx(X,{open:g,onOpenChange:b,title:o("agentDetail.removeChannelConfirm","Remove this Slack channel connector?"),description:o("agentDetail.removeChannelDesc","This action will permanently disconnect this channel."),confirmLabel:o("common.delete","Delete"),cancelLabel:o("common.cancel","Cancel"),onConfirm:()=>{l(n),b(!1)},isPending:t})]})}const un=u.memo(function({agent:n,agentId:c,version:l}){const{t}=P(),o=W(),r=n.channels??[],i=r.filter(g=>g.type==="slack"),d=i.length>0;function m(){const g={type:"slack",config:{channelId:"",botToken:"",signingSecret:""}};o.mutate({id:c,version:l,agent:{...n,channels:[...r,g]}})}function p(g,b){let a=0;const h=r.map(v=>{if(v.type==="slack"){if(a===g)return a++,{...v,config:b};a++}return v});o.mutate({id:c,version:l,agent:{...n,channels:h}})}function j(g){let b=0;const a=r.filter(h=>{if(h.type==="slack"){if(b===g)return b++,!1;b++}return!0});o.mutate({id:c,version:l,agent:{...n,channels:a}})}return e.jsx(_,{label:t("agentDetail.channels","Channel Connectors"),icon:ce,accent:"text-indigo-500",variant:"card",defaultOpen:d,children:e.jsxs("div",{className:"space-y-4","data-testid":"channels-section",children:[e.jsx(dn,{}),e.jsx("p",{className:"text-[10px] text-muted-foreground leading-relaxed",children:t("agentDetail.channelsDesc","Connect this agent to Slack channels. Each channel connector is independently configured with its own credentials, supporting multi-workspace setups.")}),!d&&e.jsxs("div",{className:"flex flex-col items-center justify-center rounded-lg border border-dashed border-border py-8 text-center",children:[e.jsx(ce,{className:"h-8 w-8 text-muted-foreground/30"}),e.jsx("p",{className:"mt-2 text-sm font-medium text-muted-foreground",children:t("agentDetail.noChannels","No channels configured")}),e.jsx("p",{className:"mt-0.5 max-w-xs text-xs text-muted-foreground/70",children:t("agentDetail.noChannelsDesc","Add a Slack channel to let users interact with this agent from Slack.")})]}),i.map((g,b)=>e.jsx(cn,{channel:g,index:b,onUpdate:p,onRemove:j,disabled:o.isPending},`slack-chan-${b}`)),e.jsxs("button",{type:"button",onClick:m,disabled:o.isPending,className:"inline-flex w-full items-center justify-center gap-1.5 rounded-lg border border-dashed border-indigo-500/30 bg-indigo-500/5 px-4 py-2.5 text-xs font-medium text-indigo-600 transition-colors hover:bg-indigo-500/10 hover:border-indigo-500/50 disabled:opacity-50 dark:text-indigo-400","data-testid":"add-slack-channel-btn",children:[e.jsx(F,{className:"h-3.5 w-3.5"}),t("agentDetail.addSlackChannel","Add Slack Channel")]})]})})}),He={READY:{icon:Fe,color:"text-emerald-500",bg:"bg-emerald-500/10"},IN_PROGRESS:{icon:Ct,color:"text-amber-500",bg:"bg-amber-500/10"},ERROR:{icon:le,color:"text-destructive",bg:"bg-destructive/10"},NOT_FOUND:{icon:Dt,color:"text-muted-foreground",bg:"bg-muted"}},Be={production:"agentDetail.envProduction",test:"agentDetail.envTest"};function Wn(){var Ne,ke,we,De,Ce,Se;const{id:s}=ut(),{t:n}=P(),c=mt(),l=xt(),[t,o]=u.useState(void 0),[r,i]=u.useState(!1),[d,m]=u.useState(null),[p,j]=u.useState(!1),[g,b]=u.useState(!1),[a,h]=u.useState(null),[v,D]=u.useState(!1),[C,I]=u.useState(!1);u.useEffect(()=>{o(void 0)},[s]);const{data:N}=pt(s),y=t??((Ne=N==null?void 0:N[0])==null?void 0:Ne.version)??1,{data:x,isLoading:A,isError:R,refetch:k}=gt(s,y),{data:T}=ft(s,y),{data:O}=ht(s,y),q=bt(O),he=yt(q),z=q.length>0,Z=vt(),ee=jt(),be=Nt(),te=kt(),V=$t(),Y=wt(),K=(T==null?void 0:T.status)??"NOT_FOUND",ne=He[K],Ge=ne.icon,qe={READY:n("status.deployed","Deployed"),IN_PROGRESS:n("status.deploying","Deploying..."),ERROR:n("status.error","Error"),NOT_FOUND:n("status.notDeployed","Not deployed")}[K]??K,se=K==="READY",H=Z.isPending||ee.isPending||K==="IN_PROGRESS",J=((ke=N==null?void 0:N[0])==null?void 0:ke.name)||s,ze=u.useMemo(()=>((x==null?void 0:x.workflows)??[]).filter(f=>f.includes("://")),[x==null?void 0:x.workflows]),{data:ae}=Wt(ze);u.useEffect(()=>{if(d){const f=setTimeout(()=>m(null),3e3);return()=>clearTimeout(f)}},[d]);function Ye(){Z.mutate({agentId:s,version:y},{onSuccess:()=>S.success(n("agents.deploySuccess","Deployment started")),onError:f=>S.error($(f))})}function ye(f){h({environment:f})}function ve(){h(null),D(!1),I(!1)}function Je(){a&&ee.mutate({environment:a.environment,agentId:s,version:y,endAllActiveConversations:v,undeployAllPreviousVersions:C},{onSuccess:()=>{S.success(n("agents.undeploySuccess","Agent undeployed")),ve()},onError:f=>S.error($(f))})}function Qe(){be.mutate({id:s,version:y},{onSuccess:()=>{S.success(n("common.delete")+" ✓"),j(!1),c("/manage/agents")},onError:f=>S.error($(f))})}async function Xe(){try{const f=await te.mutateAsync({id:s,version:y,deepCopy:!0});S.success(n("agentDetail.duplicateSuccess"));const{id:w}=me(f.location);c(`/manage/agentview/${w}`)}catch(f){S.error($(f))}}function Ze(f){if(!(x!=null&&x.workflows))return;const w=x.workflows.filter(E=>E!==f);V.mutate({agentId:s,version:y,workflows:w},{onSuccess:()=>S.success(n("agentDetail.workflowRemoved","Workflow removed")),onError:E=>S.error($(E))})}function et(f){const w=(x==null?void 0:x.workflows)??[];w.includes(f)||(V.mutate({agentId:s,version:y,workflows:[...w,f]},{onSuccess:()=>S.success(n("agentDetail.workflowAdded","Workflow added")),onError:E=>S.error($(E))}),i(!1))}function tt(f,w){if(!(x!=null&&x.workflows))return;const E=x.workflows.map(M=>M===f?M.replace(/([?&]version=)\d+/,`$1${w}`):M);V.mutate({agentId:s,version:y,workflows:E},{onSuccess:()=>S.success(n("agentDetail.workflowUpdated","Workflow updated to latest version")),onError:M=>S.error($(M))})}const je=u.useCallback(f=>{o(f)},[]);if(A&&!x)return e.jsx("div",{className:"flex items-center justify-center py-20","data-testid":"agent-detail-loading",children:e.jsx(Ve,{className:"h-8 w-8 animate-spin text-primary"})});if(R||!x)return e.jsxs("div",{className:"space-y-4",children:[e.jsx(We,{}),e.jsxs("div",{className:"flex flex-col items-center justify-center rounded-xl border border-destructive/30 bg-destructive/5 py-16",children:[e.jsx(St,{className:"h-12 w-12 text-destructive"}),e.jsx("p",{className:"mt-4 text-lg font-medium text-destructive",children:n("common.error")}),e.jsx("button",{onClick:()=>k(),className:"mt-4 rounded-lg bg-destructive/10 px-4 py-2 text-sm font-medium text-destructive hover:bg-destructive/20",children:n("common.retry")})]})]});const re=((we=N==null?void 0:N[0])==null?void 0:we.version)??y,nt=yf.version===y))==null?void 0:De.name)||n("agentDetail.title","Agent Detail")}),e.jsxs("p",{className:"font-mono text-sm text-muted-foreground",children:[s,e.jsxs("span",{className:"ms-2 inline-flex items-center rounded-md bg-primary/10 px-1.5 py-0.5 text-xs font-semibold text-primary",children:["v",y]})]})]})]}),N&&N.length>0&&e.jsx(mn,{versions:N,current:y,onChange:je})]}),e.jsxs("div",{className:"flex flex-col gap-2 items-end",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs("div",{className:L("inline-flex items-center gap-1.5 rounded-full px-3 py-1.5 text-sm font-medium",ne.bg,ne.color),"data-testid":"deployment-status",children:[e.jsx(Ge,{className:"h-4 w-4"}),qe]}),e.jsx("button",{onClick:se?()=>ye("production"):Ye,disabled:H,className:L("rounded-lg px-4 py-2 text-sm font-medium transition-colors",se?"bg-destructive/10 text-destructive hover:bg-destructive/20":"bg-primary text-primary-foreground hover:bg-primary/90",H&&"cursor-not-allowed opacity-50"),"data-testid":"deploy-btn",children:n(H?"common.loading":se?"agents.undeploy":"agents.deploy")}),!z&&!H&&e.jsxs("button",{onClick:async()=>{const f=Ie.getState(),w=Re.getState();f.open(s,J),f.setStep("deploying");try{await Et("production",s,y);for(let E=0;E<15;E++){await new Promise(B=>setTimeout(B,2e3));const M=await Tt("production",s,y);if(M.status==="READY")break;if(M.status==="ERROR")throw new Error("Deploy failed")}l.invalidateQueries({queryKey:["agents"]}),l.invalidateQueries({queryKey:["chat","deployedAgents"]}),f.setStep("starting"),w.clearMessages(),w.setSelectedAgent(s,J),await Y.mutateAsync({agentId:s,environment:"production"}),f.setStep("ready")}catch(E){f.setStep("error",$(E))}},disabled:Y.isPending,className:"inline-flex items-center gap-1.5 rounded-lg bg-emerald-500/10 px-4 py-2 text-sm font-medium text-emerald-600 hover:bg-emerald-500/20 transition-colors dark:text-emerald-400 disabled:opacity-50 disabled:cursor-not-allowed","data-testid":"deploy-chat-btn",children:[e.jsx(Fe,{className:"h-4 w-4","aria-hidden":"true"}),n("agents.deployAndChat","Deploy & Chat")]}),e.jsxs("div",{className:"inline-flex",children:[e.jsxs("button",{onClick:async()=>{const f=Ie.getState(),w=Re.getState();if(f.open(s,J),z){f.setStep("starting"),w.clearMessages(),w.setSelectedAgent(s,J);try{await Y.mutateAsync({agentId:s,environment:he}),f.setStep("ready")}catch(E){f.setStep("error",$(E))}}},disabled:Y.isPending,className:L("inline-flex items-center gap-1.5 bg-emerald-500/10 px-4 py-2 text-sm font-medium text-emerald-600 hover:bg-emerald-500/20 transition-colors dark:text-emerald-400 disabled:opacity-50 disabled:cursor-not-allowed",z?"rounded-s-lg":"rounded-lg"),"data-testid":"chat-btn","aria-label":n("agents.chat","Chat"),children:[e.jsx(Pt,{className:"h-4 w-4","aria-hidden":"true"}),n("agents.chat","Chat")]}),z&&e.jsx("a",{href:`/chat/${he}/${s}`,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center rounded-e-lg border-s border-emerald-500/20 bg-emerald-500/10 px-2.5 py-2 text-emerald-600 hover:bg-emerald-500/20 transition-colors dark:text-emerald-400",title:n("agents.openExternalChat","Open in new tab"),"aria-label":n("agents.openExternalChat","Open in new tab"),"data-testid":"external-chat-btn",children:e.jsx(Me,{className:"h-3.5 w-3.5","aria-hidden":"true"})})]})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-1.5",children:[e.jsxs(Q,{to:`/manage/studio/${s}`,className:"inline-flex items-center gap-1.5 rounded-lg bg-primary/10 px-3 py-1.5 text-xs font-medium text-primary hover:bg-primary/20 transition-colors","data-testid":"open-studio-btn",children:[e.jsx(de,{className:"h-3.5 w-3.5"}),n("agentDetail.openStudio","Open in Studio")]}),e.jsxs("button",{onClick:Xe,disabled:te.isPending,className:"inline-flex items-center gap-1.5 rounded-lg border border-input px-3 py-1.5 text-xs font-medium text-foreground hover:bg-secondary transition-colors disabled:opacity-50","data-testid":"duplicate-agent-btn",children:[e.jsx(fe,{className:"h-3.5 w-3.5"}),te.isPending?n("agentDetail.duplicating"):n("agentDetail.duplicate")]}),e.jsxs("button",{onClick:()=>b(!0),className:"inline-flex items-center gap-1.5 rounded-lg border border-input px-3 py-1.5 text-xs font-medium text-foreground hover:bg-secondary transition-colors","data-testid":"export-agent-btn",children:[e.jsx(Kt,{className:"h-3.5 w-3.5"}),n("agents.export","Export")]}),e.jsx("button",{onClick:()=>j(!0),className:"inline-flex items-center gap-1.5 rounded-lg bg-destructive/10 px-3 py-1.5 text-xs font-medium text-destructive hover:bg-destructive/20 transition-colors","data-testid":"delete-agent-btn","aria-label":n("agents.deleteAgent","Delete agent"),children:e.jsx(ue,{className:"h-3.5 w-3.5","aria-hidden":"true"})})]})]})]}),nt&&e.jsxs("div",{className:"flex items-center gap-3 rounded-lg border border-amber-400/30 bg-amber-50 px-4 py-3 dark:bg-amber-900/15 dark:border-amber-700/30","data-testid":"non-latest-warning",children:[e.jsx(Ht,{className:"h-5 w-5 text-amber-600 dark:text-amber-400 shrink-0"}),e.jsx("p",{className:"flex-1 text-sm text-amber-800 dark:text-amber-300",children:n("agentDetail.viewingOldVersion","You are viewing version {{current}}. Latest is version {{latest}}.",{current:y,latest:re})}),e.jsx("button",{onClick:()=>je(re),className:"rounded-md bg-amber-600 px-3 py-1.5 text-xs font-semibold text-white hover:bg-amber-700 transition-colors shrink-0",children:n("agentDetail.switchToLatest","Switch to latest")})]}),d&&e.jsx("div",{className:L("rounded-lg px-4 py-2 text-sm font-medium transition-all",d.type==="success"?"bg-emerald-500/10 text-emerald-600 dark:text-emerald-400":"bg-destructive/10 text-destructive"),"data-testid":"save-feedback",role:"status","aria-live":"polite",children:d.text}),O&&O.length>0&&e.jsx(xn,{statuses:O,onDeploy:f=>Z.mutate({environment:f,agentId:s,version:y},{onError:w=>S.error($(w))}),onUndeploy:f=>ye(f),isBusy:H}),e.jsxs("section",{className:"rounded-xl border bg-card shadow-sm",children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-border p-5",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(ie,{className:"h-5 w-5 text-primary"}),e.jsx("h2",{className:"text-lg font-semibold text-foreground",children:n("agentDetail.packages","Workflows")}),e.jsx("span",{className:"rounded-full bg-primary/10 px-2 py-0.5 text-xs font-medium text-primary",children:((Ce=x.workflows)==null?void 0:Ce.length)??0})]}),e.jsxs("button",{onClick:()=>i(!r),className:"inline-flex items-center gap-1.5 rounded-lg bg-primary/10 px-3 py-1.5 text-sm font-medium text-primary hover:bg-primary/20 transition-colors","data-testid":"add-workflow-btn",children:[e.jsx(F,{className:"h-4 w-4"}),n("agentDetail.addWorkflow","Add Workflow")]})]}),e.jsxs("div",{className:"divide-y divide-border",children:[(!x.workflows||x.workflows.length===0)&&e.jsxs("div",{className:"flex flex-col items-center justify-center py-12 text-muted-foreground",children:[e.jsx(ie,{className:"h-10 w-10 opacity-50"}),e.jsx("p",{className:"mt-3 text-sm",children:n("agentDetail.noWorkflows","No workflows added yet")})]}),(Se=x.workflows)==null?void 0:Se.map(f=>{const{id:w,version:E}=me(f),M=ae==null?void 0:ae[w],B=M!==void 0&&M>E,Ae=`/manage/workflowview/${w}?agentId=${s}&agentVer=${y}`;return e.jsxs("div",{className:L("group flex items-center gap-3 px-5 py-4 transition-colors",B?"bg-amber-50/50 dark:bg-amber-900/10 hover:bg-amber-50 dark:hover:bg-amber-900/20":"hover:bg-secondary/50"),children:[e.jsx("div",{className:"flex h-9 w-9 items-center justify-center rounded-lg bg-primary/10 shrink-0",children:e.jsx(ie,{className:"h-4 w-4 text-primary"})}),e.jsxs(Q,{to:Ae,className:"flex-1 min-w-0",children:[e.jsx("p",{className:"text-sm font-semibold text-foreground group-hover:text-primary transition-colors truncate",children:w}),e.jsxs("div",{className:"flex items-center gap-2 mt-0.5",children:[e.jsxs("span",{className:"inline-flex items-center rounded-md bg-muted px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground",children:["v",E]}),B&&e.jsx("span",{className:"text-[10px] text-amber-600 dark:text-amber-400 font-medium",children:n("agentDetail.outdated","outdated")})]})]}),e.jsxs("div",{className:"flex items-center gap-1.5 shrink-0",children:[B&&e.jsxs("button",{onClick:st=>{st.preventDefault(),tt(f,M)},disabled:V.isPending,className:"inline-flex items-center gap-1 rounded-md bg-amber-100 px-2 py-1 text-[10px] font-semibold text-amber-800 hover:bg-amber-200 dark:bg-amber-900/30 dark:text-amber-400 dark:hover:bg-amber-900/50 transition-colors disabled:opacity-50",title:n("agentDetail.updateToLatest","Update to latest version"),"data-testid":`update-workflow-${w}`,children:[e.jsx(It,{className:"h-3 w-3"}),"v",M]}),e.jsxs(Q,{to:Ae,className:"inline-flex items-center gap-1 rounded-md bg-primary/10 px-2.5 py-1 text-xs font-medium text-primary hover:bg-primary/20 transition-colors",children:[n("agentDetail.openWorkflow","Open"),e.jsx(Me,{className:"h-3 w-3"})]}),e.jsx("button",{onClick:()=>Ze(f),disabled:V.isPending,className:"rounded-md p-1.5 text-muted-foreground hover:bg-destructive/10 hover:text-destructive transition-colors disabled:opacity-50",title:n("common.delete"),children:e.jsx(ue,{className:"h-4 w-4"})})]})]},f)})]})]}),r&&e.jsx(pn,{currentWorkflows:x.workflows??[],onAdd:et,onClose:()=>i(!1)}),e.jsx(hn,{agent:x,agentId:s,version:y}),e.jsx(Jt,{agent:x,agentId:s,version:y}),e.jsx(tn,{agent:x,agentId:s,version:y}),e.jsx(nn,{agent:x,agentId:s,version:y}),e.jsx(sn,{agent:x,agentId:s,version:y}),e.jsx(on,{agent:x,agentId:s,version:y}),e.jsx(rn,{agent:x,agentId:s,version:y}),e.jsx(un,{agent:x,agentId:s,version:y}),e.jsx(fn,{agent:x}),e.jsx(X,{open:a!==null,onOpenChange:f=>{f||ve()},title:n("agents.confirmUndeploy","Undeploy agent?"),description:n("agents.confirmUndeployDescription","Version {{version}} will be undeployed from {{environment}}.",{version:y,environment:a?n(Be[a.environment]??a.environment,a.environment):""}),confirmLabel:n("agents.undeploy"),cancelLabel:n("common.cancel"),onConfirm:Je,variant:"destructive",isPending:ee.isPending,children:e.jsxs("div",{className:"space-y-3",children:[e.jsxs("label",{className:"flex cursor-pointer items-start gap-2 rounded-lg border border-border/60 bg-muted/30 p-3 text-sm",children:[e.jsx("input",{type:"checkbox",className:"mt-0.5 h-4 w-4 accent-destructive",checked:v,onChange:f=>D(f.target.checked),"data-testid":"undeploy-end-conversations-checkbox"}),e.jsxs("span",{className:"text-muted-foreground",children:[e.jsx("span",{className:"block font-medium text-foreground",children:n("agents.undeployEndConversationsLabel","End all active conversations")}),e.jsx("span",{className:"mt-0.5 block text-xs text-destructive",children:n("agents.undeployEndConversationsHint","Immediately terminates every in-progress conversation on this deployment. This cannot be undone.")})]})]}),e.jsxs("label",{className:"flex cursor-pointer items-start gap-2 rounded-lg border border-border/60 bg-muted/30 p-3 text-sm",children:[e.jsx("input",{type:"checkbox",className:"mt-0.5 h-4 w-4 accent-destructive",checked:C,onChange:f=>I(f.target.checked),"data-testid":"undeploy-previous-versions-checkbox"}),e.jsxs("span",{className:"text-muted-foreground",children:[e.jsx("span",{className:"block font-medium text-foreground",children:n("agents.undeployPreviousVersionsLabel","Undeploy this and all previous versions")}),e.jsx("span",{className:"mt-0.5 block text-xs",children:n("agents.undeployPreviousVersionsHint","Also removes every earlier version of this agent from the environment.")})]})]})]})}),e.jsx(X,{open:p,onOpenChange:j,title:n("agents.confirmDelete"),description:n("agents.confirmDeleteDescription","This action cannot be undone. The agent and all its data will be permanently removed."),confirmLabel:n("common.delete"),cancelLabel:n("common.cancel"),onConfirm:Qe,isPending:be.isPending}),e.jsx(Ot,{open:g,onClose:()=>b(!1),agentId:s,agentVersion:y})]})}function We(){const{t:s}=P();return e.jsxs(Q,{to:"/manage/agents",className:"inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground transition-colors",children:[e.jsx(Rt,{className:"h-4 w-4"}),s("agentDetail.backToAgents","Back to Agents")]})}function mn({versions:s,current:n,onChange:c}){return s.length<=1?e.jsxs("span",{className:"inline-flex items-center gap-1.5 rounded-md bg-muted px-2.5 py-1 text-xs font-medium text-muted-foreground","data-testid":"version-badge",children:["v",n]}):e.jsx("select",{value:n,onChange:l=>c(Number(l.target.value)),className:"rounded-md border border-input bg-background px-2.5 py-1 text-xs font-medium text-foreground shadow-sm transition-colors hover:bg-secondary focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-1","data-testid":"version-picker",children:s.map(l=>e.jsxs("option",{value:l.version,children:["v",l.version,l.lastModifiedOn?` — ${Mt(l.lastModifiedOn)}`:""]},l.version))})}function xn({statuses:s,onDeploy:n,onUndeploy:c,isBusy:l}){const{t}=P(),o={READY:t("status.deployed","Deployed"),IN_PROGRESS:t("status.deploying","Deploying..."),ERROR:t("status.error","Error"),NOT_FOUND:t("status.notDeployed","Not deployed")};return e.jsxs("section",{className:"overflow-hidden rounded-xl border bg-card shadow-sm","data-testid":"env-badges",children:[e.jsxs("div",{className:"flex items-center gap-2 border-b border-border px-5 py-3",children:[e.jsx(Bt,{className:"h-5 w-5 text-primary"}),e.jsx("h2",{className:"text-sm font-semibold text-foreground",children:t("agentDetail.environments","Environments")})]}),e.jsx("div",{className:"grid grid-cols-1 gap-0 divide-y divide-border sm:grid-cols-2 sm:divide-x sm:divide-y-0",children:s.map(({environment:r,status:i})=>{const d=He[i],m=d.icon,p=i==="READY";return e.jsxs("div",{className:"flex items-center justify-between gap-3 px-5 py-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:L("rounded-full p-1.5",d.bg),children:e.jsx(m,{className:L("h-3.5 w-3.5",d.color)})}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium text-foreground",children:t(Be[r]??r)}),e.jsx("p",{className:L("text-xs",d.color),children:o[i]??i})]})]}),e.jsx("button",{onClick:()=>p?c(r):n(r),disabled:l,className:L("rounded-md px-2.5 py-1 text-xs font-medium transition-colors",p?"bg-destructive/10 text-destructive hover:bg-destructive/20":"bg-primary/10 text-primary hover:bg-primary/20",l&&"cursor-not-allowed opacity-50"),children:t(p?"agents.undeploy":"agents.deploy")})]},r)})})]})}function pn({currentWorkflows:s,onAdd:n,onClose:c}){const{t:l}=P(),[t,o]=u.useState(""),{data:r,isLoading:i}=Ut(100,0,t),d=(r??[]).filter(m=>!s.includes(m.resource));return e.jsxs("section",{className:"rounded-xl border bg-card shadow-sm",children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-border p-5",children:[e.jsx("h3",{className:"text-lg font-semibold text-foreground",children:l("agentDetail.selectWorkflow","Select Workflow to Add")}),e.jsx("button",{onClick:c,className:"text-sm text-muted-foreground hover:text-foreground",children:l("common.cancel")})]}),e.jsx("div",{className:"p-5",children:e.jsx("input",{type:"text",value:t,onChange:m=>o(m.target.value),placeholder:l("common.search"),className:"w-full rounded-lg border border-input bg-background px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring"})}),e.jsxs("div",{className:"max-h-64 divide-y divide-border overflow-y-auto",children:[i&&e.jsx("div",{className:"flex items-center justify-center py-8",children:e.jsx(Ve,{className:"h-5 w-5 animate-spin text-primary"})}),!i&&d.length===0&&e.jsx("p",{className:"py-8 text-center text-sm text-muted-foreground",children:l("common.noResults")}),d.map(m=>e.jsxs("button",{onClick:()=>n(m.resource),className:"flex w-full items-center justify-between px-5 py-3 text-start hover:bg-secondary/50 transition-colors",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium text-foreground",children:m.name||me(m.resource).id}),e.jsx("p",{className:"text-xs text-muted-foreground line-clamp-1",children:m.description||l("agents.noDescription","No description")})]}),e.jsx(F,{className:"h-4 w-4 text-primary"})]},m.resource))]})]})}function gn(s){const n=/("(?:[^"\\]|\\.)*")\s*:|"(?:[^"\\]|\\.)*"|-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?|\btrue\b|\bfalse\b|\bnull\b/g,c=[];let l=0,t,o=0;for(;(t=n.exec(s))!==null;){t.index>l&&c.push(s.slice(l,t.index));const r=t[0];if(o++,r.endsWith(":")){const i=r.slice(0,-1);c.push(e.jsx("span",{className:"text-primary",children:i},`k${o}`),":")}else r.startsWith('"')?c.push(e.jsx("span",{className:"text-emerald-600 dark:text-emerald-400",children:r},`s${o}`)):r==="true"||r==="false"?c.push(e.jsx("span",{className:"text-purple-600 dark:text-purple-400",children:r},`b${o}`)):r==="null"?c.push(e.jsx("span",{className:"text-muted-foreground italic",children:r},`n${o}`)):c.push(e.jsx("span",{className:"text-sky-600 dark:text-sky-400",children:r},`d${o}`));l=t.index+r.length}return ll(!c),className:"flex w-full items-center justify-between p-5 text-start","aria-expanded":c,"aria-controls":"raw-config-content",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Lt,{className:"h-5 w-5 text-muted-foreground","aria-hidden":"true"}),e.jsx("h2",{className:"text-lg font-semibold text-foreground",children:n("agentDetail.rawConfig","Raw Configuration")})]}),c?e.jsx(xe,{className:"h-4 w-4 text-muted-foreground"}):e.jsx(pe,{className:"h-4 w-4 text-muted-foreground"})]}),c&&e.jsx("div",{className:"border-t border-border p-5",id:"raw-config-content",children:e.jsx("pre",{className:"overflow-x-auto rounded-lg bg-secondary p-4 text-sm font-mono leading-relaxed",children:gn(JSON.stringify(s,null,2))})})]})}function hn({agent:s,agentId:n,version:c}){const{t:l}=P(),t=W(),[o,r]=u.useState(""),[i,d]=u.useState(s.description??""),[m,p]=u.useState(!1),[j,g]=u.useState(null);u.useEffect(()=>d(s.description??""),[s.description]);const b=s.a2aEnabled??!1;function a(){t.mutate({id:n,version:c,agent:{...s,a2aEnabled:!b}})}function h(){i!==(s.description??"")&&t.mutate({id:n,version:c,agent:{...s,description:i}})}function v(){const k=o.trim();if(!k)return;const T=s.a2aSkills??[];T.includes(k)||(t.mutate({id:n,version:c,agent:{...s,a2aSkills:[...T,k]}}),r(""))}function D(k){const T=(s.a2aSkills??[]).filter((O,q)=>q!==k);t.mutate({id:n,version:c,agent:{...s,a2aSkills:T}})}function C(k,T){navigator.clipboard.writeText(k).then(()=>{g(T),setTimeout(()=>g(null),2e3)})}const I=window.location.origin,N=`${I}/a2a/agents/${n}/agent.json`,y=`${I}/a2a/agents/${n}`,x={name:`EDDI Agent ${n}`,description:s.description||"EDDI conversational AI agent",url:y,provider:"EDDI",version:"6.0.0",capabilities:{streaming:!1,pushNotifications:!1,stateTransitionHistory:!0},skills:s.a2aSkills&&s.a2aSkills.length>0?s.a2aSkills.map(k=>({id:k.toLowerCase().replace(/ /g,"-"),name:k,description:`Skill: ${k}`})):[{id:"chat",name:"Conversational AI",description:"General conversational AI agent powered by EDDI"}]},[A,R]=u.useState(!1);return e.jsxs("section",{className:"rounded-xl border bg-card shadow-sm","data-testid":"a2a-section",children:[e.jsxs("button",{type:"button",onClick:()=>R(!A),className:L("flex w-full items-center gap-2 p-5 text-start",A&&"border-b border-border"),children:[A?e.jsx(xe,{className:"h-4 w-4 text-muted-foreground"}):e.jsx(pe,{className:"h-4 w-4 text-muted-foreground"}),e.jsx(Oe,{className:"h-5 w-5 text-primary"}),e.jsx("h2",{className:"text-lg font-semibold text-foreground",children:l("agentDetail.a2aSection","Agent-to-Agent (A2A)")}),b&&e.jsxs("span",{className:"inline-flex items-center gap-1 rounded-full bg-emerald-500/10 px-2 py-0.5 text-xs font-medium text-emerald-600 dark:text-emerald-400",children:[e.jsx($e,{className:"h-3 w-3"}),l("agentDetail.a2aEnabled","Enabled")]})]}),A&&e.jsx("div",{className:"p-5",children:b?e.jsxs("div",{className:"space-y-5",children:[e.jsxs("div",{children:[e.jsx("label",{className:"mb-1.5 block text-sm font-medium text-foreground",children:l("agentDetail.a2aDescription","Agent Description")}),e.jsx("input",{type:"text",value:i,onChange:k=>d(k.target.value),onBlur:h,onKeyDown:k=>{k.key==="Enter"&&(k.preventDefault(),h())},placeholder:l("agentDetail.a2aDescPlaceholder","What does this agent do?"),className:"w-full rounded-lg border border-input bg-background px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring transition-shadow","data-testid":"a2a-description"}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:l("agentDetail.a2aDescHint","Shown in the Agent Card — helps other agents understand what this agent does")})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-1.5 block text-sm font-medium text-foreground",children:l("agentDetail.a2aSkills","A2A Skills")}),e.jsxs("div",{className:"flex flex-wrap gap-1.5 mb-2",children:[(s.a2aSkills??[]).map((k,T)=>e.jsxs("span",{className:"inline-flex items-center gap-1 rounded-md bg-primary/10 px-2 py-0.5 text-xs font-medium text-primary",children:[k,e.jsx("button",{type:"button",onClick:()=>D(T),className:"rounded p-0.5 hover:bg-primary/20 transition-colors","aria-label":`Remove ${k}`,children:e.jsx(ge,{className:"h-3 w-3"})})]},T)),(s.a2aSkills??[]).length===0&&e.jsx("span",{className:"text-xs text-muted-foreground italic",children:l("agentDetail.a2aNoSkills","No skills — a default 'chat' skill will be used")})]}),e.jsxs("div",{className:"flex gap-1.5",children:[e.jsx("input",{type:"text",value:o,onChange:k=>r(k.target.value),onKeyDown:k=>{k.key==="Enter"&&(k.preventDefault(),v())},placeholder:l("agentDetail.a2aSkillPlaceholder","e.g. translation, code-review"),className:"h-8 flex-1 rounded-md border border-input bg-background px-2 text-xs text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring","data-testid":"a2a-skill-input"}),e.jsx("button",{type:"button",onClick:v,className:"inline-flex h-8 items-center gap-1 rounded-md border border-input px-2 text-xs font-medium text-foreground transition-colors hover:bg-secondary",children:e.jsx(F,{className:"h-3 w-3"})})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-1.5 block text-sm font-medium text-foreground",children:l("agentDetail.a2aEndpoints","Endpoints")}),e.jsx("div",{className:"space-y-1.5",children:[{method:"GET",url:N,label:"card"},{method:"POST",url:y,label:"rpc"}].map(({method:k,url:T,label:O})=>e.jsxs("div",{className:"flex items-center gap-2 rounded-lg bg-secondary/50 px-3 py-2",children:[e.jsx("span",{className:L("rounded px-1.5 py-0.5 text-[10px] font-bold uppercase tracking-wider",k==="GET"?"bg-sky-500/10 text-sky-600 dark:text-sky-400":"bg-emerald-500/10 text-emerald-600 dark:text-emerald-400"),children:k}),e.jsx("code",{className:"flex-1 truncate font-mono text-xs text-foreground",dir:"ltr",children:T}),e.jsx("button",{type:"button",onClick:()=>C(T,O),className:"rounded p-1 text-muted-foreground hover:text-foreground transition-colors","aria-label":"Copy URL","data-testid":`copy-url-${O}`,children:j===O?e.jsx("span",{className:"text-[10px] font-medium text-emerald-500",children:"✓"}):e.jsx(fe,{className:"h-3.5 w-3.5"})})]},O))})]}),e.jsxs("div",{children:[e.jsxs("button",{type:"button",onClick:()=>p(!m),className:"flex items-center gap-1 text-xs font-medium text-muted-foreground hover:text-foreground transition-colors","data-testid":"a2a-card-toggle",children:[m?e.jsx(xe,{className:"h-3 w-3"}):e.jsx(pe,{className:"h-3 w-3"}),l("agentDetail.agentCardPreview","Agent Card Preview")]}),m&&e.jsx("pre",{className:"mt-2 max-h-48 overflow-auto rounded-lg bg-secondary p-3 text-xs text-foreground font-mono",children:JSON.stringify(x,null,2)})]})]}):e.jsxs("div",{className:"flex flex-col items-center justify-center py-8 text-center",children:[e.jsx(Oe,{className:"h-10 w-10 text-muted-foreground/50"}),e.jsx("p",{className:"mt-3 text-sm text-muted-foreground max-w-md",children:l("agentDetail.a2aEnabledDesc","Make this agent discoverable by other agents via the A2A protocol. Other EDDI instances can find and call this agent as a tool.")}),e.jsxs("button",{onClick:a,disabled:t.isPending,className:"mt-4 inline-flex items-center gap-2 rounded-lg bg-primary px-4 py-2 text-sm font-medium text-primary-foreground shadow-sm transition-all hover:bg-primary/90 hover:shadow-md disabled:opacity-50","data-testid":"enable-a2a-btn",children:[e.jsx($e,{className:"h-4 w-4"}),l("agentDetail.a2aEnable","Enable A2A")]})]})})]})}export{Wn as AgentDetailPage}; + */const zt=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m4.243 5.21 14.39 12.472",key:"1c9a7c"}]],Ue=_e("shield-ban",zt);function G({value:s,onCommit:n,delay:c=600,...l}){const[t,o]=u.useState(s),r=u.useRef(null);u.useEffect(()=>o(s),[s]);const i=u.useCallback(d=>{r.current&&clearTimeout(r.current),r.current=setTimeout(()=>n(d),c)},[n,c]);return u.useEffect(()=>()=>{r.current&&clearTimeout(r.current)},[]),e.jsx("input",{...l,value:t,onChange:d=>{o(d.target.value),i(d.target.value)}})}function U({value:s,onCommit:n,delay:c=600,fallback:l=0,...t}){const[o,r]=u.useState(String(s)),i=u.useRef(null);u.useEffect(()=>r(String(s)),[s]);const d=u.useCallback(m=>{i.current&&clearTimeout(i.current),i.current=setTimeout(()=>{n(parseFloat(m)||l)},c)},[n,c,l]);return u.useEffect(()=>()=>{i.current&&clearTimeout(i.current)},[]),e.jsx("input",{...t,type:"number",value:o,onChange:m=>{r(m.target.value),d(m.target.value)}})}const Yt=["signInterAgentMessages","signMcpInvocations","requirePeerVerification"],Jt=u.memo(function({agent:n,agentId:c,version:l}){var a,h,v,D,C,I,N,y;const{t}=P(),o=W(),[r,i]=u.useState(null),[d,m]=u.useState(null);u.useEffect(()=>{if(d){const x=setTimeout(()=>m(null),8e3);return()=>clearTimeout(x)}},[d]);const p=Yt.some(x=>{var A;return(A=n.security)==null?void 0:A[x]});function j(x){var R;if(!(((R=n.security)==null?void 0:R[x])??!1)){i(x);return}g(x,!0)}function g(x,A){m(null),o.mutate({id:c,version:l,agent:{...n,security:{...n.security,[x]:!A}}},{onError:R=>{lt(R)&&R.status===400?m(R.message):m(R instanceof Error?R.message:String(R))}})}function b(){r&&(g(r,!1),i(null))}return e.jsxs(_,{label:t("agentDetail.securityIdentity","Security & Identity"),icon:Ee,accent:"text-rose-500",variant:"card",defaultOpen:!!((a=n.security)!=null&&a.signInterAgentMessages||(h=n.security)!=null&&h.signMcpInvocations||(v=n.identity)!=null&&v.agentDid),children:[e.jsxs("div",{className:"space-y-3","data-testid":"identity-section",children:[e.jsxs("h3",{className:"flex items-center gap-1.5 text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:[e.jsx(Ke,{className:"h-3.5 w-3.5"}),t("agentDetail.identity","Cryptographic Identity")]}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-xs text-muted-foreground",children:t("agentDetail.agentDid","Agent DID")}),e.jsx(G,{type:"text",value:((D=n.identity)==null?void 0:D.agentDid)??"",onCommit:x=>o.mutate({id:c,version:l,agent:{...n,identity:{...n.identity,agentDid:x||void 0}}}),placeholder:"did:eddi:agent:...",className:"h-8 w-full rounded-md border border-input bg-background px-2 text-xs text-foreground font-mono focus:outline-none focus:ring-1 focus:ring-ring"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-xs text-muted-foreground",children:t("agentDetail.publicKey","Public Key")}),e.jsx("input",{type:"text",value:((C=n.identity)==null?void 0:C.publicKey)??"",readOnly:!0,placeholder:t("agentDetail.publicKeyHint","Auto-generated on first signing"),className:"h-8 w-full rounded-md border border-input bg-muted/50 px-2 text-xs text-muted-foreground font-mono"})]})]}),(((N=(I=n.identity)==null?void 0:I.keys)==null?void 0:N.length)??0)>0?e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"mb-1 block text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:t("agentDetail.publicKeys","Public Keys")}),e.jsx("div",{className:"space-y-1",children:n.identity.keys.map((x,A)=>e.jsxs("div",{className:"flex items-center gap-2 rounded-md border border-border bg-muted/30 px-2.5 py-1.5",children:[e.jsx("span",{className:"inline-flex items-center rounded bg-primary/10 px-1.5 py-0.5 text-[10px] font-semibold text-primary",children:t("agentDetail.keyVersion","Key v{{version}}",{version:x.version??A})}),e.jsx("span",{className:"flex-1 truncate font-mono text-[10px] text-muted-foreground",dir:"ltr",children:x.publicKeyB64?`${x.publicKeyB64.slice(0,24)}…`:"—"}),x.validUntilMs!=null&&x.validUntilMs>0&&x.validUntilMs{var k;return e.jsxs("label",{className:"flex items-start gap-2.5 py-1",children:[e.jsx("input",{type:"checkbox",checked:((k=n.security)==null?void 0:k[x])??!1,onChange:()=>j(x),disabled:o.isPending,className:"mt-0.5 h-3.5 w-3.5 rounded border-input accent-primary","data-testid":`security-flag-${x}`}),e.jsxs("div",{children:[e.jsx("span",{className:"text-xs font-medium text-foreground",children:A}),e.jsx("p",{className:"text-[10px] text-muted-foreground",children:R})]})]},x)})]}),e.jsx(X,{open:!!r,onOpenChange:x=>{x||i(null)},title:t("agentDetail.securityFlagConfirmTitle","Enable security flag?"),description:t("agentDetail.securityFlagConfirmDesc","Cryptographic signing is not yet available in this version. Enabling this flag will cause the backend to reject saves with HTTP 400. Are you sure you want to proceed?"),confirmLabel:t("agentDetail.securityFlagConfirmBtn","Enable anyway"),cancelLabel:t("common.cancel","Cancel"),onConfirm:b})]})}),Qt=at;function Xt({value:s,onChange:n,onSelect:c,placeholder:l}){const{data:t}=_t(),[o,r]=u.useState(!1),[i,d]=u.useState(-1),m=u.useRef(null),p=u.useMemo(()=>{if(!t||!s.trim())return[];const g=s.trim().toLowerCase();return t.filter(b=>b.toLowerCase().includes(g))},[t,s]);u.useEffect(()=>{function g(b){m.current&&!m.current.contains(b.target)&&r(!1)}return document.addEventListener("mousedown",g),()=>document.removeEventListener("mousedown",g)},[]);function j(g){g.key==="ArrowDown"?(g.preventDefault(),d(b=>Math.min(b+1,p.length-1)),r(!0)):g.key==="ArrowUp"?(g.preventDefault(),d(b=>Math.max(b-1,0))):g.key==="Enter"?(g.preventDefault(),i>=0&&i{n(g.target.value),r(!0),d(-1)},onFocus:()=>{s.trim()&&r(!0)},onKeyDown:j,placeholder:l,className:"h-8 w-full rounded-md border border-input bg-background ps-7 pe-2 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring","data-testid":"skill-autocomplete-input",autoComplete:"off"}),o&&p.length>0&&e.jsx("div",{className:"absolute z-50 mt-1 max-h-40 w-full overflow-auto rounded-lg border border-border bg-card shadow-lg","data-testid":"skill-autocomplete-dropdown",children:p.map((g,b)=>e.jsx("button",{type:"button",onMouseDown:a=>{a.preventDefault(),c(g),r(!1)},onMouseEnter:()=>d(b),className:`w-full px-3 py-1.5 text-start text-xs transition-colors ${b===i?"bg-primary/10 text-primary":"text-foreground hover:bg-secondary"}`,children:g},g))})]})}function Zt({attributes:s,onChange:n,disabled:c}){const{t:l}=P(),t=Object.entries(s),[o,r]=u.useState(""),[i,d]=u.useState(""),m=u.useRef(s);u.useEffect(()=>{m.current=s},[s]);const p=u.useRef(null);u.useEffect(()=>()=>{p.current&&clearTimeout(p.current)},[]);function j(){o.trim()&&(n({...m.current,[o.trim()]:i.trim()}),r(""),d(""))}function g(a){p.current&&(clearTimeout(p.current),p.current=null);const h={...m.current};delete h[a],n(h)}function b(a,h){p.current&&clearTimeout(p.current),p.current=setTimeout(()=>{n({...m.current,[a]:h})},600)}return e.jsxs("div",{className:"space-y-1.5 ps-3 border-s-2 border-violet-500/20",children:[t.map(([a,h])=>e.jsx(en,{attrKey:a,attrValue:h,onCommit:v=>b(a,v),onRemove:()=>g(a),disabled:c},a)),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("input",{type:"text",value:o,onChange:a=>r(a.target.value),onKeyDown:a=>{a.key==="Enter"&&(a.preventDefault(),j())},placeholder:l("agentDetail.attributeKey","key"),disabled:c,className:"h-6 w-20 rounded border border-input bg-background px-1.5 text-[10px] text-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:opacity-50","data-testid":"attribute-key-input"}),e.jsx("input",{type:"text",value:i,onChange:a=>d(a.target.value),onKeyDown:a=>{a.key==="Enter"&&(a.preventDefault(),j())},placeholder:l("agentDetail.attributeValue","value"),disabled:c,className:"h-6 flex-1 rounded border border-input bg-background px-1.5 text-[10px] text-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:opacity-50","data-testid":"attribute-value-input"}),e.jsx("button",{type:"button",onClick:j,disabled:!o.trim()||c,className:"rounded p-0.5 text-muted-foreground hover:text-primary transition-colors disabled:opacity-50",title:l("agentDetail.addAttribute","Add attribute"),children:e.jsx(F,{className:"h-3 w-3"})})]})]})}function en({attrKey:s,attrValue:n,onCommit:c,onRemove:l,disabled:t}){const[o,r]=u.useState(n),i=u.useRef(null);u.useEffect(()=>r(n),[n]),u.useEffect(()=>()=>{i.current&&clearTimeout(i.current)},[]);function d(m){r(m),i.current&&clearTimeout(i.current),i.current=setTimeout(()=>c(m),600)}return e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("span",{className:"shrink-0 rounded bg-violet-500/10 px-1.5 py-0.5 text-[10px] font-medium text-violet-600 dark:text-violet-400",children:s}),e.jsx("input",{type:"text",value:o,onChange:m=>d(m.target.value),disabled:t,className:"h-6 flex-1 rounded border border-input bg-background px-1.5 text-[10px] text-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:opacity-50"}),e.jsx("button",{type:"button",onClick:l,disabled:t,className:"rounded p-0.5 text-muted-foreground hover:text-destructive transition-colors disabled:opacity-50",children:e.jsx(ge,{className:"h-3 w-3"})})]})}const tn=u.memo(function({agent:n,agentId:c,version:l}){const{t}=P(),o=W(),[r,i]=u.useState(""),[d,m]=u.useState(null),p=n.capabilities??[];function j(h){if(!h.trim())return;if(p.some(D=>D.skill===h.trim())){S.error(t("agentDetail.skillAlreadyExists","This skill is already declared"));return}const v=[...p,{skill:h.trim(),confidence:"medium",attributes:{}}];o.mutate({id:c,version:l,agent:{...n,capabilities:v}}),i("")}function g(h){const v=p.filter((D,C)=>C!==h);o.mutate({id:c,version:l,agent:{...n,capabilities:v}}),d===h&&m(null)}function b(h,v){const D=p.map((C,I)=>I===h?{...C,confidence:v}:C);o.mutate({id:c,version:l,agent:{...n,capabilities:D}})}function a(h,v){const D=p.map((C,I)=>I===h?{...C,attributes:v}:C);o.mutate({id:c,version:l,agent:{...n,capabilities:D}})}return e.jsx(_,{label:t("agentDetail.capabilities","Capabilities"),icon:de,accent:"text-violet-500",variant:"card",defaultOpen:p.length>0,children:e.jsxs("div",{className:"space-y-3","data-testid":"capabilities-section",children:[e.jsx("p",{className:"text-[10px] text-muted-foreground",children:t("agentDetail.capabilitiesDesc","Declared skills for A2A agent card and capability registry. Other agents discover these when choosing delegation targets.")}),p.length>0&&e.jsx("div",{className:"space-y-2",children:p.map((h,v)=>e.jsxs("div",{className:"rounded-lg border border-border bg-background overflow-hidden","data-testid":`capability-entry-${v}`,children:[e.jsxs("div",{className:"flex items-center gap-2 p-2.5",children:[e.jsx("button",{type:"button",onClick:()=>m(d===v?null:v),className:"text-muted-foreground hover:text-foreground transition-colors",title:t("agentDetail.toggleAttributes","Toggle attributes"),children:e.jsx(de,{className:"h-3.5 w-3.5 text-violet-500"})}),e.jsx("span",{className:"flex-1 text-xs font-medium text-foreground",children:h.skill}),e.jsxs("select",{value:h.confidence??"medium",onChange:D=>b(v,D.target.value),className:`h-7 rounded-full border px-2 text-[10px] font-semibold focus:outline-none focus:ring-1 focus:ring-ring ${Qt[h.confidence??"medium"]??""}`,"data-testid":`confidence-select-${v}`,children:[e.jsx("option",{value:"low",children:t("agentDetail.confidenceLow","Low")}),e.jsx("option",{value:"medium",children:t("agentDetail.confidenceMedium","Medium")}),e.jsx("option",{value:"high",children:t("agentDetail.confidenceHigh","High")})]}),h.attributes&&Object.keys(h.attributes).length>0&&e.jsxs("button",{type:"button",onClick:()=>m(d===v?null:v),className:"rounded-full bg-violet-500/10 px-1.5 py-0.5 text-[9px] font-medium text-violet-600 dark:text-violet-400 hover:bg-violet-500/20 transition-colors",children:[Object.keys(h.attributes).length," ",t("agentDetail.attrs","attrs")]}),e.jsx("button",{type:"button",onClick:()=>g(v),disabled:o.isPending,className:"rounded p-1 text-muted-foreground hover:text-destructive transition-colors",children:e.jsx(ge,{className:"h-3.5 w-3.5"})})]}),d===v&&e.jsxs("div",{className:"border-t border-border bg-violet-500/[0.02] px-3 py-2.5",children:[e.jsx("p",{className:"mb-1.5 text-[10px] font-medium text-muted-foreground",children:t("agentDetail.attributesLabel","Attributes")}),e.jsx(Zt,{attributes:h.attributes??{},onChange:D=>a(v,D),disabled:o.isPending})]})]},`${h.skill}-${v}`))}),e.jsxs("div",{className:"flex gap-1.5",children:[e.jsx(Xt,{value:r,onChange:i,onSelect:j,placeholder:t("agentDetail.capabilityPlaceholder","Search or type a skill name...")}),e.jsx("button",{type:"button",onClick:()=>j(r),disabled:!r.trim()||o.isPending,className:"inline-flex h-8 items-center gap-1 rounded-md border border-input px-2 text-xs font-medium text-foreground transition-colors hover:bg-secondary disabled:opacity-50","data-testid":"add-capability-btn",children:e.jsx(F,{className:"h-3 w-3"})})]})]})})}),nn=u.memo(function({agent:n,agentId:c,version:l}){const{t}=P(),o=W(),r=n.enableMemoryTools??!1,i=n.userMemoryConfig??{},d=i.dream??{},m=i.guardrails??{};function p(a){o.mutate({id:c,version:l,agent:{...n,...a}})}function j(a){p({userMemoryConfig:{...i,...a}})}function g(a){j({dream:{...d,...a}})}function b(a){j({guardrails:{...m,...a}})}return e.jsx(_,{label:t("agentDetail.userMemory","User Memory"),icon:Te,accent:"text-teal-500",variant:"card",defaultOpen:r,children:e.jsxs("div",{className:"space-y-4","data-testid":"user-memory-section",children:[e.jsx("p",{className:"text-[10px] text-muted-foreground leading-relaxed",children:t("agentDetail.userMemoryDesc","Persistent per-user memory with LLM tools (remember/recall/forget). Basic longTerm property persistence always works regardless of this toggle.")}),e.jsxs("label",{className:"inline-flex items-center gap-2 text-xs font-medium text-foreground",children:[e.jsx("input",{type:"checkbox",checked:r,onChange:()=>p({enableMemoryTools:!r}),disabled:o.isPending,className:"h-3.5 w-3.5 rounded border-input accent-primary"}),e.jsx(Te,{className:"h-3.5 w-3.5 text-teal-500"}),t("agentDetail.enableMemoryTools","Enable Memory Tools")]}),r&&e.jsxs("div",{className:"space-y-4 rounded-lg border border-teal-500/20 bg-teal-500/5 p-4",children:[e.jsxs("div",{className:"grid grid-cols-3 gap-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:"mb-0.5 block text-[10px] text-muted-foreground",children:t("agentDetail.defaultVisibility","Default Visibility")}),e.jsxs("select",{value:i.defaultVisibility??"self",onChange:a=>j({defaultVisibility:a.target.value}),className:"h-7 w-full rounded border border-input bg-background px-1.5 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring",children:[e.jsx("option",{value:"self",children:t("agentDetail.visibilitySelf","self")}),e.jsx("option",{value:"global",children:t("agentDetail.visibilityGlobal","global")})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-0.5 block text-[10px] text-muted-foreground",children:t("agentDetail.maxRecallEntries","Max Recall")}),e.jsx(U,{value:i.maxRecallEntries??50,onCommit:a=>j({maxRecallEntries:a}),fallback:50,className:"h-7 w-full rounded border border-input bg-background px-2 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-0.5 block text-[10px] text-muted-foreground",children:t("agentDetail.maxEntriesPerUser","Max per User")}),e.jsx(U,{value:i.maxEntriesPerUser??500,onCommit:a=>j({maxEntriesPerUser:a}),fallback:500,className:"h-7 w-full rounded border border-input bg-background px-2 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring"})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:"mb-0.5 block text-[10px] text-muted-foreground",children:t("agentDetail.onCapReached","On Cap Reached")}),e.jsxs("select",{value:i.onCapReached??"evict_oldest",onChange:a=>j({onCapReached:a.target.value}),className:"h-7 w-full rounded border border-input bg-background px-1.5 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring",children:[e.jsx("option",{value:"evict_oldest",children:t("agentDetail.onCapEvict","Evict Oldest")}),e.jsx("option",{value:"reject",children:t("agentDetail.onCapReject","Reject")})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-0.5 block text-[10px] text-muted-foreground",children:t("agentDetail.recallOrder","Recall Order")}),e.jsxs("select",{value:i.recallOrder??"most_recent",onChange:a=>j({recallOrder:a.target.value}),className:"h-7 w-full rounded border border-input bg-background px-1.5 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring",children:[e.jsx("option",{value:"most_recent",children:t("agentDetail.recallMostRecent","Most Recent")}),e.jsx("option",{value:"most_relevant",children:t("agentDetail.recallMostRelevant","Most Relevant")})]})]})]}),e.jsxs("div",{className:"space-y-2 border-t border-teal-500/20 pt-3",children:[e.jsx("h4",{className:"text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:t("agentDetail.guardrails","Write Guardrails")}),e.jsxs("div",{className:"grid grid-cols-3 gap-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:"mb-0.5 block text-[10px] text-muted-foreground",children:t("agentDetail.maxKeyLength","Max Key Length")}),e.jsx(U,{value:m.maxKeyLength??100,onCommit:a=>b({maxKeyLength:a}),fallback:100,className:"h-7 w-full rounded border border-input bg-background px-2 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-0.5 block text-[10px] text-muted-foreground",children:t("agentDetail.maxValueLength","Max Value Length")}),e.jsx(U,{value:m.maxValueLength??1e3,onCommit:a=>b({maxValueLength:a}),fallback:1e3,className:"h-7 w-full rounded border border-input bg-background px-2 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-0.5 block text-[10px] text-muted-foreground",children:t("agentDetail.maxWritesPerTurn","Max Writes/Turn")}),e.jsx(U,{value:m.maxWritesPerTurn??10,onCommit:a=>b({maxWritesPerTurn:a}),fallback:10,className:"h-7 w-full rounded border border-input bg-background px-2 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring"})]})]})]}),e.jsxs("div",{className:"space-y-2 border-t border-teal-500/20 pt-3",children:[e.jsxs("label",{className:"inline-flex items-center gap-2 text-xs font-medium text-foreground",children:[e.jsx("input",{type:"checkbox",checked:d.enabled??!1,onChange:()=>g({enabled:!(d.enabled??!1)}),disabled:o.isPending,className:"h-3.5 w-3.5 rounded border-input accent-primary"}),e.jsx(rt,{className:"h-3.5 w-3.5 text-indigo-400"}),t("agentDetail.dreamConsolidation","Dream Consolidation")]}),e.jsx("p",{className:"text-[10px] text-muted-foreground ps-5",children:t("agentDetail.dreamDesc","Background LLM job that resolves contradictions, prunes stale entries, and optionally summarizes interactions.")}),d.enabled&&e.jsxs("div",{className:"space-y-3 ps-5",children:[e.jsxs("div",{className:"grid grid-cols-3 gap-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:"mb-0.5 block text-[10px] text-muted-foreground",children:t("agentDetail.dreamSchedule","Schedule (cron)")}),e.jsx(G,{type:"text",value:d.schedule??"0 3 * * *",onCommit:a=>g({schedule:a}),placeholder:"0 3 * * *",className:"h-7 w-full rounded border border-input bg-background px-2 text-xs text-foreground font-mono focus:outline-none focus:ring-1 focus:ring-ring"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-0.5 block text-[10px] text-muted-foreground",children:t("agentDetail.dreamLlmProvider","LLM Provider")}),e.jsx(G,{type:"text",value:d.llmProvider??"anthropic",onCommit:a=>g({llmProvider:a}),className:"h-7 w-full rounded border border-input bg-background px-2 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-0.5 block text-[10px] text-muted-foreground",children:t("agentDetail.dreamLlmModel","LLM Model")}),e.jsx(G,{type:"text",value:d.llmModel??"claude-sonnet-5",onCommit:a=>g({llmModel:a}),placeholder:"claude-sonnet-5",className:"h-7 w-full rounded border border-input bg-background px-2 text-xs text-foreground font-mono focus:outline-none focus:ring-1 focus:ring-ring"})]})]}),e.jsxs("div",{className:"grid grid-cols-3 gap-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:"mb-0.5 block text-[10px] text-muted-foreground",children:t("agentDetail.dreamMaxCost","Max Cost/Run ($)")}),e.jsx(U,{value:d.maxCostPerRun??5,onCommit:a=>g({maxCostPerRun:a}),fallback:5,step:.01,className:"h-7 w-full rounded border border-input bg-background px-2 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-0.5 block text-[10px] text-muted-foreground",children:t("agentDetail.dreamPruneDays","Prune After (days)")}),e.jsx(U,{value:d.pruneStaleAfterDays??90,onCommit:a=>g({pruneStaleAfterDays:a}),fallback:90,className:"h-7 w-full rounded border border-input bg-background px-2 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-0.5 block text-[10px] text-muted-foreground",children:t("agentDetail.dreamBatchSize","Batch Size")}),e.jsx(U,{value:d.batchSize??50,onCommit:a=>g({batchSize:a}),fallback:50,className:"h-7 w-full rounded border border-input bg-background px-2 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring"})]})]}),e.jsxs("div",{className:"flex gap-4",children:[e.jsxs("label",{className:"inline-flex items-center gap-1.5 text-xs text-foreground",children:[e.jsx("input",{type:"checkbox",checked:d.detectContradictions??!0,onChange:a=>g({detectContradictions:a.target.checked}),className:"h-3.5 w-3.5 rounded border-input accent-primary"}),t("agentDetail.detectContradictions","Detect contradictions")]}),e.jsxs("label",{className:"inline-flex items-center gap-1.5 text-xs text-foreground",children:[e.jsx("input",{type:"checkbox",checked:d.summarizeInteractions??!1,onChange:a=>g({summarizeInteractions:a.target.checked}),className:"h-3.5 w-3.5 rounded border-input accent-primary"}),t("agentDetail.summarizeInteractions","Summarize interactions")]})]})]})]})]})]})})}),sn=u.memo(function({agent:n,agentId:c,version:l}){const{t}=P(),o=W(),r=n.memoryPolicy??{},i=r.strictWriteDiscipline??{},d=i.enabled??!1;function m(p){o.mutate({id:c,version:l,agent:{...n,memoryPolicy:{...r,strictWriteDiscipline:{...i,...p}}}})}return e.jsx(_,{label:t("agentDetail.memoryPolicy","Memory Policy"),icon:Ue,accent:"text-rose-500",variant:"card",defaultOpen:d,children:e.jsxs("div",{className:"space-y-3","data-testid":"memory-policy-section",children:[e.jsx("p",{className:"text-[10px] text-muted-foreground leading-relaxed",children:t("agentDetail.memoryPolicyDesc","Strict Write Discipline governs what happens when property updates fail during a conversation step. Choose how the engine handles partially committed data.")}),e.jsxs("label",{className:"inline-flex items-center gap-2 text-xs font-medium text-foreground",children:[e.jsx("input",{type:"checkbox",checked:d,onChange:()=>m({enabled:!d}),disabled:o.isPending,className:"h-3.5 w-3.5 rounded border-input accent-primary","data-testid":"swd-enable"}),e.jsx(Ue,{className:"h-3.5 w-3.5 text-rose-500"}),t("agentDetail.enableSwd","Enable Strict Write Discipline")]}),d&&e.jsx("div",{className:"space-y-3 rounded-lg border border-rose-500/20 bg-rose-500/5 p-3",children:e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:t("agentDetail.onFailure","On Failure Strategy")}),e.jsxs("select",{value:i.onFailure??"digest",onChange:p=>m({onFailure:p.target.value}),disabled:o.isPending,className:"h-8 w-full rounded-md border border-input bg-background px-2 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:opacity-60","data-testid":"swd-on-failure",children:[e.jsx("option",{value:"digest",children:t("agentDetail.onFailureDigest","Digest — rollback changes, report summary to LLM")}),e.jsx("option",{value:"exclude_all",children:t("agentDetail.onFailureExclude","Exclude All — silently drop all property updates")}),e.jsx("option",{value:"keep_all",children:t("agentDetail.onFailureKeep","Keep All — keep changes and log warning")})]})]})})]})})}),an=["before_tool","before_action"],rn=u.memo(function({agent:n,agentId:c,version:l}){const{t}=P(),o=W(),r=n.hitlConfig??{},i=!!n.hitlConfig;function d(a){o.mutate({id:c,version:l,agent:{...n,hitlConfig:{...r,...a}}})}function m(a){if(a)o.mutate({id:c,version:l,agent:{...n,hitlConfig:{timeoutPolicy:"WAIT_INDEFINITELY",approvalTimeout:null,...r}}});else{const h={...n};delete h.hitlConfig,o.mutate({id:c,version:l,agent:h})}}const p=Pe(r.timeoutPolicy),[j,g]=u.useState(r.approvalTimeout??"");u.useEffect(()=>g(r.approvalTimeout??""),[r.approvalTimeout,p]);const b=p&&(!j.trim()||!oe(j.trim()));return e.jsx(_,{label:t("agentDetail.hitlConfig","Human-in-the-Loop"),icon:ot,accent:"text-amber-500",variant:"card",defaultOpen:i,children:e.jsxs("div",{className:"space-y-4","data-testid":"hitl-config-section",children:[e.jsx("p",{className:"text-[10px] text-muted-foreground leading-relaxed",children:t("agentDetail.hitlConfigDesc","When this agent pauses a conversation for human approval, these settings control how long to wait and what happens if no decision is made in time.")}),e.jsxs("label",{className:"inline-flex items-center gap-2 text-xs font-medium text-foreground",children:[e.jsx("input",{type:"checkbox",checked:i,onChange:()=>m(!i),disabled:o.isPending,className:"h-3.5 w-3.5 rounded border-input accent-primary","data-testid":"hitl-config-enabled"}),t("agentDetail.hitlEnable","Configure human-approval timeouts")]}),i&&e.jsxs("div",{className:"space-y-3 ps-5",children:[e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-[10px] text-muted-foreground",children:t("agentDetail.hitlPauseReason","Approval reason (shown to approvers)")}),e.jsx(G,{type:"text",value:r.pauseReason??"",onCommit:a=>d({pauseReason:a.trim()||null}),maxLength:it,placeholder:t("agentDetail.hitlPauseReasonPlaceholder","e.g. Deletion requires manager sign-off"),className:"h-8 w-full rounded-md border border-input bg-background px-2 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring","data-testid":"hitl-pause-reason"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-[10px] text-muted-foreground",children:t("agentDetail.hitlTimeoutPolicy","If no decision in time")}),e.jsxs("select",{value:r.timeoutPolicy??"WAIT_INDEFINITELY",onChange:a=>{const h=a.target.value,v={timeoutPolicy:h};Pe(h)&&!(r.approvalTimeout&&oe(r.approvalTimeout))&&(v.approvalTimeout="PT15M"),d(v)},disabled:o.isPending,className:"w-full appearance-none rounded-lg border border-input bg-background px-3 py-1.5 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring","data-testid":"hitl-timeout-policy",children:[e.jsx("option",{value:"WAIT_INDEFINITELY",children:t("hitl.timeoutWaitIndefinitely","Wait Indefinitely")}),e.jsx("option",{value:"AUTO_APPROVE",children:t("hitl.timeoutAutoApprove","Auto-Approve")}),e.jsx("option",{value:"AUTO_REJECT",children:t("hitl.timeoutAutoReject","Auto-Reject")}),e.jsx("option",{value:"ABORT",children:t("hitl.timeoutAbort","Abort")})]})]}),p&&e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-[10px] text-muted-foreground",children:t("agentDetail.hitlApprovalTimeout","Approval timeout (ISO-8601)")}),e.jsx("input",{type:"text",value:j,onChange:a=>g(a.target.value),onBlur:()=>{const a=j.trim()||null;p&&!(a&&oe(a))||a!==(r.approvalTimeout??null)&&d({approvalTimeout:a})},placeholder:"PT15M",className:`h-8 w-full rounded-md border bg-background px-2 text-xs font-mono text-foreground focus:outline-none focus:ring-1 focus:ring-ring ${b?"border-destructive":"border-input"}`,"data-testid":"hitl-approval-timeout"}),e.jsx("p",{className:`mt-1 text-[10px] ${b?"text-destructive":"text-muted-foreground"}`,children:b?t("agentDetail.hitlTimeoutInvalid","A finite policy needs a positive ISO-8601 duration, e.g. PT15M."):t("agentDetail.hitlTimeoutHint","e.g. PT30S, PT15M, PT2H.")})]}),e.jsxs("div",{className:"border-t border-border pt-3",children:[e.jsxs("label",{className:"inline-flex items-center gap-2 text-xs font-medium text-foreground",children:[e.jsx("input",{type:"checkbox",checked:!!r.toolApprovals,onChange:a=>d({toolApprovals:a.target.checked?{}:null}),disabled:o.isPending,className:"h-3.5 w-3.5 rounded border-input accent-primary","data-testid":"hitl-tool-enabled"}),t("agentDetail.toolApprovalsEnable","Gate specific tool calls for approval")]}),r.toolApprovals&&e.jsx("div",{className:"mt-3",children:e.jsx(Ft,{value:r.toolApprovals,disabled:o.isPending,agentTimeoutPolicy:r.timeoutPolicy,onChange:a=>d({toolApprovals:{...r.toolApprovals,...a}})})})]})]})]})})}),on=u.memo(function({agent:n,agentId:c,version:l}){const{t}=P(),o=W(),r=n.sessionManagement??{},i=r.autoSnapshot??{};function d(p){o.mutate({id:c,version:l,agent:{...n,sessionManagement:{...r,...p}}})}function m(p){d({autoSnapshot:{...i,...p}})}return e.jsx(_,{label:t("agentDetail.sessionManagement","Session Management"),icon:Ke,accent:"text-teal-500",variant:"card",defaultOpen:i.enabled??!1,children:e.jsxs("div",{className:"space-y-4","data-testid":"session-management-section",children:[e.jsx("p",{className:"text-[10px] text-muted-foreground leading-relaxed",children:t("agentDetail.sessionManagementDesc","Memory checkpoints capture conversation state before risky operations, enabling clean rollback on failure.")}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("label",{className:"inline-flex items-center gap-2 text-xs font-medium text-foreground",children:[e.jsx("input",{type:"checkbox",checked:i.enabled??!1,onChange:()=>m({enabled:!(i.enabled??!1)}),disabled:o.isPending,className:"h-3.5 w-3.5 rounded border-input accent-primary","data-testid":"auto-snapshot-enabled"}),t("agentDetail.autoSnapshotEnable","Enable automatic checkpoints")]}),i.enabled&&e.jsxs("div",{className:"space-y-3 ps-5",children:[e.jsxs("div",{children:[e.jsx("label",{className:"mb-1.5 block text-[10px] text-muted-foreground",children:t("agentDetail.triggerOn","Trigger On")}),e.jsx("div",{className:"flex flex-wrap gap-2",children:an.map(p=>{const j=(i.triggerOn??[]).includes(p);return e.jsx("button",{type:"button",onClick:()=>{const g=i.triggerOn??[],b=j?g.filter(a=>a!==p):[...g,p];m({triggerOn:b.length>0?b:void 0})},disabled:o.isPending,className:`inline-flex items-center gap-1 rounded-md border px-2.5 py-1 text-[10px] font-medium transition-colors ${j?"border-primary bg-primary/10 text-primary":"border-border text-muted-foreground hover:text-foreground hover:border-foreground/30"}`,children:p==="before_tool"?t("agentDetail.triggerBeforeTool","Before tool execution"):t("agentDetail.triggerBeforeAction","Before action")},p)})})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("label",{className:"text-xs text-foreground whitespace-nowrap",children:t("agentDetail.maxCheckpoints","Max Checkpoints")}),e.jsx(U,{value:r.maxCheckpointsPerConversation??10,onCommit:p=>d({maxCheckpointsPerConversation:p}),min:1,max:100,className:"h-7 w-20 rounded border border-input bg-background px-2 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring"}),e.jsx("span",{className:"text-[10px] text-muted-foreground",children:t("agentDetail.maxCheckpointsHint","per conversation")})]})]})]}),e.jsxs("div",{className:"border-t border-border pt-3 space-y-2",children:[e.jsxs("label",{className:"inline-flex items-center gap-2 text-xs font-medium text-muted-foreground cursor-not-allowed",title:t("agentDetail.forkingDisabledTooltip","Available in a future release"),children:[e.jsx("input",{type:"checkbox",checked:r.forkingEnabled??!1,disabled:!0,className:"h-3.5 w-3.5 rounded border-input accent-primary opacity-50","data-testid":"forking-enabled"}),t("agentDetail.forkingEnabled","Session Forking"),e.jsxs("span",{className:"text-[9px] font-normal text-muted-foreground/70",children:["(",t("agentDetail.comingSoon","coming soon"),")"]})]}),e.jsx("p",{className:"text-[10px] text-muted-foreground ps-5",children:t("agentDetail.forkingNote","Session forking endpoint (POST /v6/conversations/{id}/fork) is not yet available.")}),e.jsxs("div",{className:"flex items-center gap-2 ps-5 opacity-50 cursor-not-allowed",children:[e.jsx("label",{className:"text-xs text-foreground whitespace-nowrap",children:t("agentDetail.maxForks","Max Forks")}),e.jsx("input",{type:"number",value:r.maxForksPerConversation??5,disabled:!0,className:"h-7 w-20 rounded border border-input bg-muted/50 px-2 text-xs text-muted-foreground",title:t("agentDetail.forkingDisabledTooltip","Available in a future release")}),e.jsx("span",{className:"text-[10px] text-muted-foreground",children:t("agentDetail.maxForksHint","per conversation")})]})]})]})})});function ln(){return typeof window<"u"?`${window.location.origin}/integrations/slack/events`:""}function dn(){const{t:s}=P(),[n,c]=u.useState(!1),l=ln(),[t,o]=u.useState(!1);function r(){navigator.clipboard.writeText(l).then(()=>{o(!0),S.success(s("agentDetail.slackWebhookCopied","Webhook URL copied")),setTimeout(()=>o(!1),2e3)}).catch(()=>{S.error(s("common.copyFailed","Failed to copy to clipboard"))})}return e.jsxs("div",{className:"rounded-lg border border-indigo-500/20 bg-indigo-500/5",children:[e.jsxs("button",{type:"button",onClick:()=>c(!n),className:"flex w-full items-center gap-2 px-4 py-2.5 text-start",children:[e.jsx(qt,{className:"h-4 w-4 text-indigo-500 shrink-0"}),e.jsx("span",{className:"flex-1 text-xs font-semibold text-indigo-600 dark:text-indigo-400",children:s("agentDetail.slackSetupGuide","Slack Setup Guide")}),e.jsx(ce,{className:`h-3.5 w-3.5 text-indigo-500/50 transition-transform ${n?"rotate-180":""}`})]}),n&&e.jsxs("div",{className:"space-y-4 border-t border-indigo-500/20 px-4 py-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:s("agentDetail.slackWebhookUrl","Webhook URL")}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("code",{className:"flex-1 rounded-md border border-input bg-background px-2.5 py-1.5 font-mono text-xs text-foreground break-all",children:l}),e.jsx("button",{type:"button",onClick:r,className:"shrink-0 rounded-md border border-input p-1.5 text-muted-foreground hover:bg-secondary hover:text-foreground transition-colors",title:s("common.copy","Copy"),children:t?e.jsx(ct,{className:"h-3.5 w-3.5 text-emerald-500"}):e.jsx(fe,{className:"h-3.5 w-3.5"})})]})]}),e.jsxs("ol",{className:"space-y-1.5 text-xs text-muted-foreground",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded-full bg-indigo-500/10 text-[10px] font-bold text-indigo-500",children:"1"}),s("agentDetail.slackStep1","Create a Slack App at api.slack.com/apps and install it to your workspace.")]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded-full bg-indigo-500/10 text-[10px] font-bold text-indigo-500",children:"2"}),s("agentDetail.slackStep2","Copy the Bot Token (xoxb-…) and Signing Secret into the EDDI vault and configure channels below.")]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded-full bg-indigo-500/10 text-[10px] font-bold text-indigo-500",children:"3"}),e.jsxs("span",{children:[s("agentDetail.slackStep3","Then enable Event Subscriptions in your Slack App, paste the Webhook URL above, and subscribe to:"),e.jsx("code",{className:"ms-1 rounded bg-muted px-1 py-0.5 font-mono text-[10px]",children:"app_mention"}),","," ",e.jsx("code",{className:"rounded bg-muted px-1 py-0.5 font-mono text-[10px]",children:"message.im"})]})]})]}),e.jsx("p",{className:"text-[10px] text-muted-foreground/70 leading-relaxed",children:s("agentDetail.slackSetupNote","Important: Configure the channel below before enabling Event Subscriptions — Slack sends a URL verification challenge that requires the signing secret to be configured in EDDI.")}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:s("agentDetail.slackRequiredScopes","Required Bot Token Scopes")}),e.jsx("div",{className:"flex flex-wrap gap-1",children:["app_mentions:read","chat:write","channels:history","groups:history","im:history","mpim:history"].map(i=>e.jsx("code",{className:"rounded bg-muted px-1.5 py-0.5 font-mono text-[10px] text-muted-foreground",children:i},i))})]})]})]})}function cn({channel:s,index:n,onUpdate:c,onRemove:l,disabled:t}){const{t:o}=P(),r=u.useMemo(()=>s.config??{},[s.config]),i=u.useRef(r);u.useEffect(()=>{i.current=r},[r]);const[d,m]=u.useState(r.channelId??""),[p,j]=u.useState(r.groupId??""),[g,b]=u.useState(!1),a=u.useRef(null),h=u.useRef(null);u.useEffect(()=>m(r.channelId??""),[r.channelId]),u.useEffect(()=>j(r.groupId??""),[r.groupId]),u.useEffect(()=>()=>{a.current&&clearTimeout(a.current),h.current&&clearTimeout(h.current)},[]);function v(N){a.current&&clearTimeout(a.current),a.current=setTimeout(()=>{c(n,{...i.current,channelId:N})},600)}function D(N){h.current&&clearTimeout(h.current),h.current=setTimeout(()=>{if(N.trim())c(n,{...i.current,groupId:N});else{const{groupId:y,...x}=i.current;c(n,x)}},600)}function C(N,y){c(n,{...i.current,[N]:y})}const I=!d||/^C[A-Z0-9]+$/.test(d);return e.jsxs("div",{className:"rounded-lg border border-border bg-background","data-testid":`slack-channel-${n}`,children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-border px-4 py-2.5",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Vt,{className:"h-4 w-4 text-indigo-500"}),e.jsx("span",{className:"text-xs font-semibold text-foreground",children:o("agentDetail.slackChannel","Slack Channel")}),d&&e.jsx("code",{className:"rounded bg-muted px-1.5 py-0.5 font-mono text-[10px] text-muted-foreground",children:d})]}),e.jsx("button",{type:"button",onClick:()=>b(!0),disabled:t,className:"rounded p-1 text-muted-foreground hover:bg-destructive/10 hover:text-destructive transition-colors disabled:opacity-50",title:o("agentDetail.removeChannel","Remove channel"),"data-testid":`remove-channel-${n}`,children:e.jsx(ue,{className:"h-3.5 w-3.5"})})]}),e.jsxs("div",{className:"space-y-3 p-4",children:[e.jsxs("div",{children:[e.jsxs("label",{className:"mb-1 block text-[10px] font-medium text-muted-foreground",children:[o("agentDetail.channelId","Channel ID")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx("input",{type:"text",value:d,onChange:N=>{const y=N.target.value;m(y),v(y)},disabled:t,placeholder:"C0123ABCDEF",className:`h-8 w-full rounded-md border bg-background px-2.5 font-mono text-xs text-foreground placeholder:text-muted-foreground/50 focus:outline-none focus:ring-1 focus:ring-ring disabled:opacity-60 ${I?"border-input":"border-amber-500"}`,"data-testid":`channel-id-${n}`}),!I&&e.jsx("p",{className:"mt-0.5 text-[10px] text-amber-600 dark:text-amber-400",children:o("agentDetail.channelIdHint","Channel IDs start with C followed by uppercase alphanumeric characters")})]}),e.jsxs("div",{children:[e.jsxs("label",{className:"mb-1 block text-[10px] font-medium text-muted-foreground",children:[o("agentDetail.botToken","Bot Token")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(Le,{value:r.botToken??"",onChange:N=>C("botToken",N),readOnly:t,placeholder:o("agentDetail.botTokenPlaceholder","xoxb-… or ${vault:slack-bot-token}"),testId:`bot-token-${n}`}),e.jsx("p",{className:"mt-0.5 text-[10px] text-muted-foreground/70",children:o("agentDetail.botTokenHint","Slack Bot User OAuth Token. Use a vault reference for security.")})]}),e.jsxs("div",{children:[e.jsxs("label",{className:"mb-1 block text-[10px] font-medium text-muted-foreground",children:[o("agentDetail.signingSecret","Signing Secret")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(Le,{value:r.signingSecret??"",onChange:N=>C("signingSecret",N),readOnly:t,placeholder:o("agentDetail.signingSecretPlaceholder","Hex string or ${vault:slack-signing-secret}"),testId:`signing-secret-${n}`}),e.jsx("p",{className:"mt-0.5 text-[10px] text-muted-foreground/70",children:o("agentDetail.signingSecretHint","From your Slack App's Basic Information page. Use a vault reference for security.")})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-[10px] font-medium text-muted-foreground",children:o("agentDetail.groupIdOptional","Group ID (optional)")}),e.jsx("input",{type:"text",value:p,onChange:N=>{const y=N.target.value;j(y),D(y)},disabled:t,placeholder:o("agentDetail.groupIdPlaceholder","Multi-agent group config ID"),className:"h-8 w-full rounded-md border border-input bg-background px-2.5 font-mono text-xs text-foreground placeholder:text-muted-foreground/50 focus:outline-none focus:ring-1 focus:ring-ring disabled:opacity-60","data-testid":`group-id-${n}`}),e.jsx("p",{className:"mt-0.5 text-[10px] text-muted-foreground/70",children:o("agentDetail.groupIdHint",'Set this to enable "group: question" multi-agent discussions from this Slack channel.')})]})]}),e.jsx(X,{open:g,onOpenChange:b,title:o("agentDetail.removeChannelConfirm","Remove this Slack channel connector?"),description:o("agentDetail.removeChannelDesc","This action will permanently disconnect this channel."),confirmLabel:o("common.delete","Delete"),cancelLabel:o("common.cancel","Cancel"),onConfirm:()=>{l(n),b(!1)},isPending:t})]})}const un=u.memo(function({agent:n,agentId:c,version:l}){const{t}=P(),o=W(),r=n.channels??[],i=r.filter(g=>g.type==="slack"),d=i.length>0;function m(){const g={type:"slack",config:{channelId:"",botToken:"",signingSecret:""}};o.mutate({id:c,version:l,agent:{...n,channels:[...r,g]}})}function p(g,b){let a=0;const h=r.map(v=>{if(v.type==="slack"){if(a===g)return a++,{...v,config:b};a++}return v});o.mutate({id:c,version:l,agent:{...n,channels:h}})}function j(g){let b=0;const a=r.filter(h=>{if(h.type==="slack"){if(b===g)return b++,!1;b++}return!0});o.mutate({id:c,version:l,agent:{...n,channels:a}})}return e.jsx(_,{label:t("agentDetail.channels","Channel Connectors"),icon:ce,accent:"text-indigo-500",variant:"card",defaultOpen:d,children:e.jsxs("div",{className:"space-y-4","data-testid":"channels-section",children:[e.jsx(dn,{}),e.jsx("p",{className:"text-[10px] text-muted-foreground leading-relaxed",children:t("agentDetail.channelsDesc","Connect this agent to Slack channels. Each channel connector is independently configured with its own credentials, supporting multi-workspace setups.")}),!d&&e.jsxs("div",{className:"flex flex-col items-center justify-center rounded-lg border border-dashed border-border py-8 text-center",children:[e.jsx(ce,{className:"h-8 w-8 text-muted-foreground/30"}),e.jsx("p",{className:"mt-2 text-sm font-medium text-muted-foreground",children:t("agentDetail.noChannels","No channels configured")}),e.jsx("p",{className:"mt-0.5 max-w-xs text-xs text-muted-foreground/70",children:t("agentDetail.noChannelsDesc","Add a Slack channel to let users interact with this agent from Slack.")})]}),i.map((g,b)=>e.jsx(cn,{channel:g,index:b,onUpdate:p,onRemove:j,disabled:o.isPending},`slack-chan-${b}`)),e.jsxs("button",{type:"button",onClick:m,disabled:o.isPending,className:"inline-flex w-full items-center justify-center gap-1.5 rounded-lg border border-dashed border-indigo-500/30 bg-indigo-500/5 px-4 py-2.5 text-xs font-medium text-indigo-600 transition-colors hover:bg-indigo-500/10 hover:border-indigo-500/50 disabled:opacity-50 dark:text-indigo-400","data-testid":"add-slack-channel-btn",children:[e.jsx(F,{className:"h-3.5 w-3.5"}),t("agentDetail.addSlackChannel","Add Slack Channel")]})]})})}),He={READY:{icon:Fe,color:"text-emerald-500",bg:"bg-emerald-500/10"},IN_PROGRESS:{icon:Ct,color:"text-amber-500",bg:"bg-amber-500/10"},ERROR:{icon:le,color:"text-destructive",bg:"bg-destructive/10"},NOT_FOUND:{icon:Dt,color:"text-muted-foreground",bg:"bg-muted"}},Be={production:"agentDetail.envProduction",test:"agentDetail.envTest"};function _n(){var Ne,ke,we,De,Ce,Se;const{id:s}=ut(),{t:n}=P(),c=mt(),l=xt(),[t,o]=u.useState(void 0),[r,i]=u.useState(!1),[d,m]=u.useState(null),[p,j]=u.useState(!1),[g,b]=u.useState(!1),[a,h]=u.useState(null),[v,D]=u.useState(!1),[C,I]=u.useState(!1);u.useEffect(()=>{o(void 0)},[s]);const{data:N}=pt(s),y=t??((Ne=N==null?void 0:N[0])==null?void 0:Ne.version)??1,{data:x,isLoading:A,isError:R,refetch:k}=gt(s,y),{data:T}=ft(s,y),{data:O}=ht(s,y),q=bt(O),he=yt(q),z=q.length>0,Z=vt(),ee=jt(),be=Nt(),te=kt(),V=$t(),Y=wt(),K=(T==null?void 0:T.status)??"NOT_FOUND",ne=He[K],Ge=ne.icon,qe={READY:n("status.deployed","Deployed"),IN_PROGRESS:n("status.deploying","Deploying..."),ERROR:n("status.error","Error"),NOT_FOUND:n("status.notDeployed","Not deployed")}[K]??K,se=K==="READY",H=Z.isPending||ee.isPending||K==="IN_PROGRESS",J=((ke=N==null?void 0:N[0])==null?void 0:ke.name)||s,ze=u.useMemo(()=>((x==null?void 0:x.workflows)??[]).filter(f=>f.includes("://")),[x==null?void 0:x.workflows]),{data:ae}=Wt(ze);u.useEffect(()=>{if(d){const f=setTimeout(()=>m(null),3e3);return()=>clearTimeout(f)}},[d]);function Ye(){Z.mutate({agentId:s,version:y},{onSuccess:()=>S.success(n("agents.deploySuccess","Deployment started")),onError:f=>S.error($(f))})}function ye(f){h({environment:f})}function ve(){h(null),D(!1),I(!1)}function Je(){a&&ee.mutate({environment:a.environment,agentId:s,version:y,endAllActiveConversations:v,undeployAllPreviousVersions:C},{onSuccess:()=>{S.success(n("agents.undeploySuccess","Agent undeployed")),ve()},onError:f=>S.error($(f))})}function Qe(){be.mutate({id:s,version:y},{onSuccess:()=>{S.success(n("common.delete")+" ✓"),j(!1),c("/manage/agents")},onError:f=>S.error($(f))})}async function Xe(){try{const f=await te.mutateAsync({id:s,version:y,deepCopy:!0});S.success(n("agentDetail.duplicateSuccess"));const{id:w}=me(f.location);c(`/manage/agentview/${w}`)}catch(f){S.error($(f))}}function Ze(f){if(!(x!=null&&x.workflows))return;const w=x.workflows.filter(E=>E!==f);V.mutate({agentId:s,version:y,workflows:w},{onSuccess:()=>S.success(n("agentDetail.workflowRemoved","Workflow removed")),onError:E=>S.error($(E))})}function et(f){const w=(x==null?void 0:x.workflows)??[];w.includes(f)||(V.mutate({agentId:s,version:y,workflows:[...w,f]},{onSuccess:()=>S.success(n("agentDetail.workflowAdded","Workflow added")),onError:E=>S.error($(E))}),i(!1))}function tt(f,w){if(!(x!=null&&x.workflows))return;const E=x.workflows.map(M=>M===f?M.replace(/([?&]version=)\d+/,`$1${w}`):M);V.mutate({agentId:s,version:y,workflows:E},{onSuccess:()=>S.success(n("agentDetail.workflowUpdated","Workflow updated to latest version")),onError:M=>S.error($(M))})}const je=u.useCallback(f=>{o(f)},[]);if(A&&!x)return e.jsx("div",{className:"flex items-center justify-center py-20","data-testid":"agent-detail-loading",children:e.jsx(Ve,{className:"h-8 w-8 animate-spin text-primary"})});if(R||!x)return e.jsxs("div",{className:"space-y-4",children:[e.jsx(We,{}),e.jsxs("div",{className:"flex flex-col items-center justify-center rounded-xl border border-destructive/30 bg-destructive/5 py-16",children:[e.jsx(St,{className:"h-12 w-12 text-destructive"}),e.jsx("p",{className:"mt-4 text-lg font-medium text-destructive",children:n("common.error")}),e.jsx("button",{onClick:()=>k(),className:"mt-4 rounded-lg bg-destructive/10 px-4 py-2 text-sm font-medium text-destructive hover:bg-destructive/20",children:n("common.retry")})]})]});const re=((we=N==null?void 0:N[0])==null?void 0:we.version)??y,nt=yf.version===y))==null?void 0:De.name)||n("agentDetail.title","Agent Detail")}),e.jsxs("p",{className:"font-mono text-sm text-muted-foreground",children:[s,e.jsxs("span",{className:"ms-2 inline-flex items-center rounded-md bg-primary/10 px-1.5 py-0.5 text-xs font-semibold text-primary",children:["v",y]})]})]})]}),N&&N.length>0&&e.jsx(mn,{versions:N,current:y,onChange:je})]}),e.jsxs("div",{className:"flex flex-col gap-2 items-end",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs("div",{className:L("inline-flex items-center gap-1.5 rounded-full px-3 py-1.5 text-sm font-medium",ne.bg,ne.color),"data-testid":"deployment-status",children:[e.jsx(Ge,{className:"h-4 w-4"}),qe]}),e.jsx("button",{onClick:se?()=>ye("production"):Ye,disabled:H,className:L("rounded-lg px-4 py-2 text-sm font-medium transition-colors",se?"bg-destructive/10 text-destructive hover:bg-destructive/20":"bg-primary text-primary-foreground hover:bg-primary/90",H&&"cursor-not-allowed opacity-50"),"data-testid":"deploy-btn",children:n(H?"common.loading":se?"agents.undeploy":"agents.deploy")}),!z&&!H&&e.jsxs("button",{onClick:async()=>{const f=Ie.getState(),w=Re.getState();f.open(s,J),f.setStep("deploying");try{await Et("production",s,y);for(let E=0;E<15;E++){await new Promise(B=>setTimeout(B,2e3));const M=await Tt("production",s,y);if(M.status==="READY")break;if(M.status==="ERROR")throw new Error("Deploy failed")}l.invalidateQueries({queryKey:["agents"]}),l.invalidateQueries({queryKey:["chat","deployedAgents"]}),f.setStep("starting"),w.clearMessages(),w.setSelectedAgent(s,J),await Y.mutateAsync({agentId:s,environment:"production"}),f.setStep("ready")}catch(E){f.setStep("error",$(E))}},disabled:Y.isPending,className:"inline-flex items-center gap-1.5 rounded-lg bg-emerald-500/10 px-4 py-2 text-sm font-medium text-emerald-600 hover:bg-emerald-500/20 transition-colors dark:text-emerald-400 disabled:opacity-50 disabled:cursor-not-allowed","data-testid":"deploy-chat-btn",children:[e.jsx(Fe,{className:"h-4 w-4","aria-hidden":"true"}),n("agents.deployAndChat","Deploy & Chat")]}),e.jsxs("div",{className:"inline-flex",children:[e.jsxs("button",{onClick:async()=>{const f=Ie.getState(),w=Re.getState();if(f.open(s,J),z){f.setStep("starting"),w.clearMessages(),w.setSelectedAgent(s,J);try{await Y.mutateAsync({agentId:s,environment:he}),f.setStep("ready")}catch(E){f.setStep("error",$(E))}}},disabled:Y.isPending,className:L("inline-flex items-center gap-1.5 bg-emerald-500/10 px-4 py-2 text-sm font-medium text-emerald-600 hover:bg-emerald-500/20 transition-colors dark:text-emerald-400 disabled:opacity-50 disabled:cursor-not-allowed",z?"rounded-s-lg":"rounded-lg"),"data-testid":"chat-btn","aria-label":n("agents.chat","Chat"),children:[e.jsx(Pt,{className:"h-4 w-4","aria-hidden":"true"}),n("agents.chat","Chat")]}),z&&e.jsx("a",{href:`/chat/${he}/${s}`,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center rounded-e-lg border-s border-emerald-500/20 bg-emerald-500/10 px-2.5 py-2 text-emerald-600 hover:bg-emerald-500/20 transition-colors dark:text-emerald-400",title:n("agents.openExternalChat","Open in new tab"),"aria-label":n("agents.openExternalChat","Open in new tab"),"data-testid":"external-chat-btn",children:e.jsx(Me,{className:"h-3.5 w-3.5","aria-hidden":"true"})})]})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-1.5",children:[e.jsxs(Q,{to:`/manage/studio/${s}`,className:"inline-flex items-center gap-1.5 rounded-lg bg-primary/10 px-3 py-1.5 text-xs font-medium text-primary hover:bg-primary/20 transition-colors","data-testid":"open-studio-btn",children:[e.jsx(de,{className:"h-3.5 w-3.5"}),n("agentDetail.openStudio","Open in Studio")]}),e.jsxs("button",{onClick:Xe,disabled:te.isPending,className:"inline-flex items-center gap-1.5 rounded-lg border border-input px-3 py-1.5 text-xs font-medium text-foreground hover:bg-secondary transition-colors disabled:opacity-50","data-testid":"duplicate-agent-btn",children:[e.jsx(fe,{className:"h-3.5 w-3.5"}),te.isPending?n("agentDetail.duplicating"):n("agentDetail.duplicate")]}),e.jsxs("button",{onClick:()=>b(!0),className:"inline-flex items-center gap-1.5 rounded-lg border border-input px-3 py-1.5 text-xs font-medium text-foreground hover:bg-secondary transition-colors","data-testid":"export-agent-btn",children:[e.jsx(Kt,{className:"h-3.5 w-3.5"}),n("agents.export","Export")]}),e.jsx("button",{onClick:()=>j(!0),className:"inline-flex items-center gap-1.5 rounded-lg bg-destructive/10 px-3 py-1.5 text-xs font-medium text-destructive hover:bg-destructive/20 transition-colors","data-testid":"delete-agent-btn","aria-label":n("agents.deleteAgent","Delete agent"),children:e.jsx(ue,{className:"h-3.5 w-3.5","aria-hidden":"true"})})]})]})]}),nt&&e.jsxs("div",{className:"flex items-center gap-3 rounded-lg border border-amber-400/30 bg-amber-50 px-4 py-3 dark:bg-amber-900/15 dark:border-amber-700/30","data-testid":"non-latest-warning",children:[e.jsx(Ht,{className:"h-5 w-5 text-amber-600 dark:text-amber-400 shrink-0"}),e.jsx("p",{className:"flex-1 text-sm text-amber-800 dark:text-amber-300",children:n("agentDetail.viewingOldVersion","You are viewing version {{current}}. Latest is version {{latest}}.",{current:y,latest:re})}),e.jsx("button",{onClick:()=>je(re),className:"rounded-md bg-amber-600 px-3 py-1.5 text-xs font-semibold text-white hover:bg-amber-700 transition-colors shrink-0",children:n("agentDetail.switchToLatest","Switch to latest")})]}),d&&e.jsx("div",{className:L("rounded-lg px-4 py-2 text-sm font-medium transition-all",d.type==="success"?"bg-emerald-500/10 text-emerald-600 dark:text-emerald-400":"bg-destructive/10 text-destructive"),"data-testid":"save-feedback",role:"status","aria-live":"polite",children:d.text}),O&&O.length>0&&e.jsx(xn,{statuses:O,onDeploy:f=>Z.mutate({environment:f,agentId:s,version:y},{onError:w=>S.error($(w))}),onUndeploy:f=>ye(f),isBusy:H}),e.jsxs("section",{className:"rounded-xl border bg-card shadow-sm",children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-border p-5",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(ie,{className:"h-5 w-5 text-primary"}),e.jsx("h2",{className:"text-lg font-semibold text-foreground",children:n("agentDetail.packages","Workflows")}),e.jsx("span",{className:"rounded-full bg-primary/10 px-2 py-0.5 text-xs font-medium text-primary",children:((Ce=x.workflows)==null?void 0:Ce.length)??0})]}),e.jsxs("button",{onClick:()=>i(!r),className:"inline-flex items-center gap-1.5 rounded-lg bg-primary/10 px-3 py-1.5 text-sm font-medium text-primary hover:bg-primary/20 transition-colors","data-testid":"add-workflow-btn",children:[e.jsx(F,{className:"h-4 w-4"}),n("agentDetail.addWorkflow","Add Workflow")]})]}),e.jsxs("div",{className:"divide-y divide-border",children:[(!x.workflows||x.workflows.length===0)&&e.jsxs("div",{className:"flex flex-col items-center justify-center py-12 text-muted-foreground",children:[e.jsx(ie,{className:"h-10 w-10 opacity-50"}),e.jsx("p",{className:"mt-3 text-sm",children:n("agentDetail.noWorkflows","No workflows added yet")})]}),(Se=x.workflows)==null?void 0:Se.map(f=>{const{id:w,version:E}=me(f),M=ae==null?void 0:ae[w],B=M!==void 0&&M>E,Ae=`/manage/workflowview/${w}?agentId=${s}&agentVer=${y}`;return e.jsxs("div",{className:L("group flex items-center gap-3 px-5 py-4 transition-colors",B?"bg-amber-50/50 dark:bg-amber-900/10 hover:bg-amber-50 dark:hover:bg-amber-900/20":"hover:bg-secondary/50"),children:[e.jsx("div",{className:"flex h-9 w-9 items-center justify-center rounded-lg bg-primary/10 shrink-0",children:e.jsx(ie,{className:"h-4 w-4 text-primary"})}),e.jsxs(Q,{to:Ae,className:"flex-1 min-w-0",children:[e.jsx("p",{className:"text-sm font-semibold text-foreground group-hover:text-primary transition-colors truncate",children:w}),e.jsxs("div",{className:"flex items-center gap-2 mt-0.5",children:[e.jsxs("span",{className:"inline-flex items-center rounded-md bg-muted px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground",children:["v",E]}),B&&e.jsx("span",{className:"text-[10px] text-amber-600 dark:text-amber-400 font-medium",children:n("agentDetail.outdated","outdated")})]})]}),e.jsxs("div",{className:"flex items-center gap-1.5 shrink-0",children:[B&&e.jsxs("button",{onClick:st=>{st.preventDefault(),tt(f,M)},disabled:V.isPending,className:"inline-flex items-center gap-1 rounded-md bg-amber-100 px-2 py-1 text-[10px] font-semibold text-amber-800 hover:bg-amber-200 dark:bg-amber-900/30 dark:text-amber-400 dark:hover:bg-amber-900/50 transition-colors disabled:opacity-50",title:n("agentDetail.updateToLatest","Update to latest version"),"data-testid":`update-workflow-${w}`,children:[e.jsx(It,{className:"h-3 w-3"}),"v",M]}),e.jsxs(Q,{to:Ae,className:"inline-flex items-center gap-1 rounded-md bg-primary/10 px-2.5 py-1 text-xs font-medium text-primary hover:bg-primary/20 transition-colors",children:[n("agentDetail.openWorkflow","Open"),e.jsx(Me,{className:"h-3 w-3"})]}),e.jsx("button",{onClick:()=>Ze(f),disabled:V.isPending,className:"rounded-md p-1.5 text-muted-foreground hover:bg-destructive/10 hover:text-destructive transition-colors disabled:opacity-50",title:n("common.delete"),children:e.jsx(ue,{className:"h-4 w-4"})})]})]},f)})]})]}),r&&e.jsx(pn,{currentWorkflows:x.workflows??[],onAdd:et,onClose:()=>i(!1)}),e.jsx(hn,{agent:x,agentId:s,version:y}),e.jsx(Jt,{agent:x,agentId:s,version:y}),e.jsx(tn,{agent:x,agentId:s,version:y}),e.jsx(nn,{agent:x,agentId:s,version:y}),e.jsx(sn,{agent:x,agentId:s,version:y}),e.jsx(on,{agent:x,agentId:s,version:y}),e.jsx(rn,{agent:x,agentId:s,version:y}),e.jsx(un,{agent:x,agentId:s,version:y}),e.jsx(fn,{agent:x}),e.jsx(X,{open:a!==null,onOpenChange:f=>{f||ve()},title:n("agents.confirmUndeploy","Undeploy agent?"),description:n("agents.confirmUndeployDescription","Version {{version}} will be undeployed from {{environment}}.",{version:y,environment:a?n(Be[a.environment]??a.environment,a.environment):""}),confirmLabel:n("agents.undeploy"),cancelLabel:n("common.cancel"),onConfirm:Je,variant:"destructive",isPending:ee.isPending,children:e.jsxs("div",{className:"space-y-3",children:[e.jsxs("label",{className:"flex cursor-pointer items-start gap-2 rounded-lg border border-border/60 bg-muted/30 p-3 text-sm",children:[e.jsx("input",{type:"checkbox",className:"mt-0.5 h-4 w-4 accent-destructive",checked:v,onChange:f=>D(f.target.checked),"data-testid":"undeploy-end-conversations-checkbox"}),e.jsxs("span",{className:"text-muted-foreground",children:[e.jsx("span",{className:"block font-medium text-foreground",children:n("agents.undeployEndConversationsLabel","End all active conversations")}),e.jsx("span",{className:"mt-0.5 block text-xs text-destructive",children:n("agents.undeployEndConversationsHint","Immediately terminates every in-progress conversation on this deployment. This cannot be undone.")})]})]}),e.jsxs("label",{className:"flex cursor-pointer items-start gap-2 rounded-lg border border-border/60 bg-muted/30 p-3 text-sm",children:[e.jsx("input",{type:"checkbox",className:"mt-0.5 h-4 w-4 accent-destructive",checked:C,onChange:f=>I(f.target.checked),"data-testid":"undeploy-previous-versions-checkbox"}),e.jsxs("span",{className:"text-muted-foreground",children:[e.jsx("span",{className:"block font-medium text-foreground",children:n("agents.undeployPreviousVersionsLabel","Undeploy this and all previous versions")}),e.jsx("span",{className:"mt-0.5 block text-xs",children:n("agents.undeployPreviousVersionsHint","Also removes every earlier version of this agent from the environment.")})]})]})]})}),e.jsx(X,{open:p,onOpenChange:j,title:n("agents.confirmDelete"),description:n("agents.confirmDeleteDescription","This action cannot be undone. The agent and all its data will be permanently removed."),confirmLabel:n("common.delete"),cancelLabel:n("common.cancel"),onConfirm:Qe,isPending:be.isPending}),e.jsx(Ot,{open:g,onClose:()=>b(!1),agentId:s,agentVersion:y})]})}function We(){const{t:s}=P();return e.jsxs(Q,{to:"/manage/agents",className:"inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground transition-colors",children:[e.jsx(Rt,{className:"h-4 w-4"}),s("agentDetail.backToAgents","Back to Agents")]})}function mn({versions:s,current:n,onChange:c}){return s.length<=1?e.jsxs("span",{className:"inline-flex items-center gap-1.5 rounded-md bg-muted px-2.5 py-1 text-xs font-medium text-muted-foreground","data-testid":"version-badge",children:["v",n]}):e.jsx("select",{value:n,onChange:l=>c(Number(l.target.value)),className:"rounded-md border border-input bg-background px-2.5 py-1 text-xs font-medium text-foreground shadow-sm transition-colors hover:bg-secondary focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-1","data-testid":"version-picker",children:s.map(l=>e.jsxs("option",{value:l.version,children:["v",l.version,l.lastModifiedOn?` — ${Mt(l.lastModifiedOn)}`:""]},l.version))})}function xn({statuses:s,onDeploy:n,onUndeploy:c,isBusy:l}){const{t}=P(),o={READY:t("status.deployed","Deployed"),IN_PROGRESS:t("status.deploying","Deploying..."),ERROR:t("status.error","Error"),NOT_FOUND:t("status.notDeployed","Not deployed")};return e.jsxs("section",{className:"overflow-hidden rounded-xl border bg-card shadow-sm","data-testid":"env-badges",children:[e.jsxs("div",{className:"flex items-center gap-2 border-b border-border px-5 py-3",children:[e.jsx(Bt,{className:"h-5 w-5 text-primary"}),e.jsx("h2",{className:"text-sm font-semibold text-foreground",children:t("agentDetail.environments","Environments")})]}),e.jsx("div",{className:"grid grid-cols-1 gap-0 divide-y divide-border sm:grid-cols-2 sm:divide-x sm:divide-y-0",children:s.map(({environment:r,status:i})=>{const d=He[i],m=d.icon,p=i==="READY";return e.jsxs("div",{className:"flex items-center justify-between gap-3 px-5 py-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:L("rounded-full p-1.5",d.bg),children:e.jsx(m,{className:L("h-3.5 w-3.5",d.color)})}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium text-foreground",children:t(Be[r]??r)}),e.jsx("p",{className:L("text-xs",d.color),children:o[i]??i})]})]}),e.jsx("button",{onClick:()=>p?c(r):n(r),disabled:l,className:L("rounded-md px-2.5 py-1 text-xs font-medium transition-colors",p?"bg-destructive/10 text-destructive hover:bg-destructive/20":"bg-primary/10 text-primary hover:bg-primary/20",l&&"cursor-not-allowed opacity-50"),children:t(p?"agents.undeploy":"agents.deploy")})]},r)})})]})}function pn({currentWorkflows:s,onAdd:n,onClose:c}){const{t:l}=P(),[t,o]=u.useState(""),{data:r,isLoading:i}=Ut(100,0,t),d=(r??[]).filter(m=>!s.includes(m.resource));return e.jsxs("section",{className:"rounded-xl border bg-card shadow-sm",children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-border p-5",children:[e.jsx("h3",{className:"text-lg font-semibold text-foreground",children:l("agentDetail.selectWorkflow","Select Workflow to Add")}),e.jsx("button",{onClick:c,className:"text-sm text-muted-foreground hover:text-foreground",children:l("common.cancel")})]}),e.jsx("div",{className:"p-5",children:e.jsx("input",{type:"text",value:t,onChange:m=>o(m.target.value),placeholder:l("common.search"),className:"w-full rounded-lg border border-input bg-background px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring"})}),e.jsxs("div",{className:"max-h-64 divide-y divide-border overflow-y-auto",children:[i&&e.jsx("div",{className:"flex items-center justify-center py-8",children:e.jsx(Ve,{className:"h-5 w-5 animate-spin text-primary"})}),!i&&d.length===0&&e.jsx("p",{className:"py-8 text-center text-sm text-muted-foreground",children:l("common.noResults")}),d.map(m=>e.jsxs("button",{onClick:()=>n(m.resource),className:"flex w-full items-center justify-between px-5 py-3 text-start hover:bg-secondary/50 transition-colors",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium text-foreground",children:m.name||me(m.resource).id}),e.jsx("p",{className:"text-xs text-muted-foreground line-clamp-1",children:m.description||l("agents.noDescription","No description")})]}),e.jsx(F,{className:"h-4 w-4 text-primary"})]},m.resource))]})]})}function gn(s){const n=/("(?:[^"\\]|\\.)*")\s*:|"(?:[^"\\]|\\.)*"|-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?|\btrue\b|\bfalse\b|\bnull\b/g,c=[];let l=0,t,o=0;for(;(t=n.exec(s))!==null;){t.index>l&&c.push(s.slice(l,t.index));const r=t[0];if(o++,r.endsWith(":")){const i=r.slice(0,-1);c.push(e.jsx("span",{className:"text-primary",children:i},`k${o}`),":")}else r.startsWith('"')?c.push(e.jsx("span",{className:"text-emerald-600 dark:text-emerald-400",children:r},`s${o}`)):r==="true"||r==="false"?c.push(e.jsx("span",{className:"text-purple-600 dark:text-purple-400",children:r},`b${o}`)):r==="null"?c.push(e.jsx("span",{className:"text-muted-foreground italic",children:r},`n${o}`)):c.push(e.jsx("span",{className:"text-sky-600 dark:text-sky-400",children:r},`d${o}`));l=t.index+r.length}return ll(!c),className:"flex w-full items-center justify-between p-5 text-start","aria-expanded":c,"aria-controls":"raw-config-content",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Lt,{className:"h-5 w-5 text-muted-foreground","aria-hidden":"true"}),e.jsx("h2",{className:"text-lg font-semibold text-foreground",children:n("agentDetail.rawConfig","Raw Configuration")})]}),c?e.jsx(xe,{className:"h-4 w-4 text-muted-foreground"}):e.jsx(pe,{className:"h-4 w-4 text-muted-foreground"})]}),c&&e.jsx("div",{className:"border-t border-border p-5",id:"raw-config-content",children:e.jsx("pre",{className:"overflow-x-auto rounded-lg bg-secondary p-4 text-sm font-mono leading-relaxed",children:gn(JSON.stringify(s,null,2))})})]})}function hn({agent:s,agentId:n,version:c}){const{t:l}=P(),t=W(),[o,r]=u.useState(""),[i,d]=u.useState(s.description??""),[m,p]=u.useState(!1),[j,g]=u.useState(null);u.useEffect(()=>d(s.description??""),[s.description]);const b=s.a2aEnabled??!1;function a(){t.mutate({id:n,version:c,agent:{...s,a2aEnabled:!b}})}function h(){i!==(s.description??"")&&t.mutate({id:n,version:c,agent:{...s,description:i}})}function v(){const k=o.trim();if(!k)return;const T=s.a2aSkills??[];T.includes(k)||(t.mutate({id:n,version:c,agent:{...s,a2aSkills:[...T,k]}}),r(""))}function D(k){const T=(s.a2aSkills??[]).filter((O,q)=>q!==k);t.mutate({id:n,version:c,agent:{...s,a2aSkills:T}})}function C(k,T){navigator.clipboard.writeText(k).then(()=>{g(T),setTimeout(()=>g(null),2e3)})}const I=window.location.origin,N=`${I}/a2a/agents/${n}/agent.json`,y=`${I}/a2a/agents/${n}`,x={name:`EDDI Agent ${n}`,description:s.description||"EDDI conversational AI agent",url:y,provider:"EDDI",version:"6.0.0",capabilities:{streaming:!1,pushNotifications:!1,stateTransitionHistory:!0},skills:s.a2aSkills&&s.a2aSkills.length>0?s.a2aSkills.map(k=>({id:k.toLowerCase().replace(/ /g,"-"),name:k,description:`Skill: ${k}`})):[{id:"chat",name:"Conversational AI",description:"General conversational AI agent powered by EDDI"}]},[A,R]=u.useState(!1);return e.jsxs("section",{className:"rounded-xl border bg-card shadow-sm","data-testid":"a2a-section",children:[e.jsxs("button",{type:"button",onClick:()=>R(!A),className:L("flex w-full items-center gap-2 p-5 text-start",A&&"border-b border-border"),children:[A?e.jsx(xe,{className:"h-4 w-4 text-muted-foreground"}):e.jsx(pe,{className:"h-4 w-4 text-muted-foreground"}),e.jsx(Oe,{className:"h-5 w-5 text-primary"}),e.jsx("h2",{className:"text-lg font-semibold text-foreground",children:l("agentDetail.a2aSection","Agent-to-Agent (A2A)")}),b&&e.jsxs("span",{className:"inline-flex items-center gap-1 rounded-full bg-emerald-500/10 px-2 py-0.5 text-xs font-medium text-emerald-600 dark:text-emerald-400",children:[e.jsx($e,{className:"h-3 w-3"}),l("agentDetail.a2aEnabled","Enabled")]})]}),A&&e.jsx("div",{className:"p-5",children:b?e.jsxs("div",{className:"space-y-5",children:[e.jsxs("div",{children:[e.jsx("label",{className:"mb-1.5 block text-sm font-medium text-foreground",children:l("agentDetail.a2aDescription","Agent Description")}),e.jsx("input",{type:"text",value:i,onChange:k=>d(k.target.value),onBlur:h,onKeyDown:k=>{k.key==="Enter"&&(k.preventDefault(),h())},placeholder:l("agentDetail.a2aDescPlaceholder","What does this agent do?"),className:"w-full rounded-lg border border-input bg-background px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring transition-shadow","data-testid":"a2a-description"}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:l("agentDetail.a2aDescHint","Shown in the Agent Card — helps other agents understand what this agent does")})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-1.5 block text-sm font-medium text-foreground",children:l("agentDetail.a2aSkills","A2A Skills")}),e.jsxs("div",{className:"flex flex-wrap gap-1.5 mb-2",children:[(s.a2aSkills??[]).map((k,T)=>e.jsxs("span",{className:"inline-flex items-center gap-1 rounded-md bg-primary/10 px-2 py-0.5 text-xs font-medium text-primary",children:[k,e.jsx("button",{type:"button",onClick:()=>D(T),className:"rounded p-0.5 hover:bg-primary/20 transition-colors","aria-label":`Remove ${k}`,children:e.jsx(ge,{className:"h-3 w-3"})})]},T)),(s.a2aSkills??[]).length===0&&e.jsx("span",{className:"text-xs text-muted-foreground italic",children:l("agentDetail.a2aNoSkills","No skills — a default 'chat' skill will be used")})]}),e.jsxs("div",{className:"flex gap-1.5",children:[e.jsx("input",{type:"text",value:o,onChange:k=>r(k.target.value),onKeyDown:k=>{k.key==="Enter"&&(k.preventDefault(),v())},placeholder:l("agentDetail.a2aSkillPlaceholder","e.g. translation, code-review"),className:"h-8 flex-1 rounded-md border border-input bg-background px-2 text-xs text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring","data-testid":"a2a-skill-input"}),e.jsx("button",{type:"button",onClick:v,className:"inline-flex h-8 items-center gap-1 rounded-md border border-input px-2 text-xs font-medium text-foreground transition-colors hover:bg-secondary",children:e.jsx(F,{className:"h-3 w-3"})})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-1.5 block text-sm font-medium text-foreground",children:l("agentDetail.a2aEndpoints","Endpoints")}),e.jsx("div",{className:"space-y-1.5",children:[{method:"GET",url:N,label:"card"},{method:"POST",url:y,label:"rpc"}].map(({method:k,url:T,label:O})=>e.jsxs("div",{className:"flex items-center gap-2 rounded-lg bg-secondary/50 px-3 py-2",children:[e.jsx("span",{className:L("rounded px-1.5 py-0.5 text-[10px] font-bold uppercase tracking-wider",k==="GET"?"bg-sky-500/10 text-sky-600 dark:text-sky-400":"bg-emerald-500/10 text-emerald-600 dark:text-emerald-400"),children:k}),e.jsx("code",{className:"flex-1 truncate font-mono text-xs text-foreground",dir:"ltr",children:T}),e.jsx("button",{type:"button",onClick:()=>C(T,O),className:"rounded p-1 text-muted-foreground hover:text-foreground transition-colors","aria-label":"Copy URL","data-testid":`copy-url-${O}`,children:j===O?e.jsx("span",{className:"text-[10px] font-medium text-emerald-500",children:"✓"}):e.jsx(fe,{className:"h-3.5 w-3.5"})})]},O))})]}),e.jsxs("div",{children:[e.jsxs("button",{type:"button",onClick:()=>p(!m),className:"flex items-center gap-1 text-xs font-medium text-muted-foreground hover:text-foreground transition-colors","data-testid":"a2a-card-toggle",children:[m?e.jsx(xe,{className:"h-3 w-3"}):e.jsx(pe,{className:"h-3 w-3"}),l("agentDetail.agentCardPreview","Agent Card Preview")]}),m&&e.jsx("pre",{className:"mt-2 max-h-48 overflow-auto rounded-lg bg-secondary p-3 text-xs text-foreground font-mono",children:JSON.stringify(x,null,2)})]})]}):e.jsxs("div",{className:"flex flex-col items-center justify-center py-8 text-center",children:[e.jsx(Oe,{className:"h-10 w-10 text-muted-foreground/50"}),e.jsx("p",{className:"mt-3 text-sm text-muted-foreground max-w-md",children:l("agentDetail.a2aEnabledDesc","Make this agent discoverable by other agents via the A2A protocol. Other EDDI instances can find and call this agent as a tool.")}),e.jsxs("button",{onClick:a,disabled:t.isPending,className:"mt-4 inline-flex items-center gap-2 rounded-lg bg-primary px-4 py-2 text-sm font-medium text-primary-foreground shadow-sm transition-all hover:bg-primary/90 hover:shadow-md disabled:opacity-50","data-testid":"enable-a2a-btn",children:[e.jsx($e,{className:"h-4 w-4"}),l("agentDetail.a2aEnable","Enable A2A")]})]})})]})}export{_n as AgentDetailPage}; diff --git a/src/main/resources/META-INF/resources/assets/agent-details-panel-DrjUeebe.js b/src/main/resources/META-INF/resources/assets/agent-details-panel-ByX72bgM.js similarity index 93% rename from src/main/resources/META-INF/resources/assets/agent-details-panel-DrjUeebe.js rename to src/main/resources/META-INF/resources/assets/agent-details-panel-ByX72bgM.js index 49fa4f09fc..aa76db6a4e 100644 --- a/src/main/resources/META-INF/resources/assets/agent-details-panel-DrjUeebe.js +++ b/src/main/resources/META-INF/resources/assets/agent-details-panel-ByX72bgM.js @@ -1,4 +1,4 @@ -import{x as xe,c as Ee,r as f,bR as Ae,p as N,u as w,_ as ne,Q as P,j as e,B as S,i as L,S as x,a4 as ce,Y as ie,h as R,k as q,aT as We,m as Me,aB as Pe,bj as Se,a7 as Le,w as Re,aM as qe,eC as Te,A as Fe,bp as de,n as $e,g as Oe,b$ as Be,aO as _e}from"./index-BY6d8wze.js";import{R as ze,b as Ke}from"./resources-R5ikMSzo.js";import{a as Ie}from"./workflows-CAxBNXSH.js";import{A as He}from"./advisor-avatar-CRlm-udV.js";import{B as d}from"./badge-B8rrdXaB.js";import{P as me}from"./panel-right-close-BCp5JpCq.js";import{C as Qe}from"./cpu-BsIZspVa.js";import{R as Ve}from"./radio-DbzYzkde.js";import{L as Ye}from"./lock-CPVVTGkJ.js";/** +import{x as xe,c as Ee,r as f,bS as Ae,p as N,u as w,_ as ne,Q as P,j as e,B as S,i as L,S as x,a4 as ce,Y as ie,h as R,k as q,aT as We,m as Me,aB as Pe,bj as Se,a7 as Le,w as Re,aM as qe,eD as Te,A as Fe,bp as de,n as Oe,g as $e,c0 as Be,aO as _e}from"./index-BnLj1hck.js";import{R as ze,b as Ke}from"./resources-D97MNqv3.js";import{a as Ie}from"./workflows-DTtF3KEG.js";import{A as He}from"./advisor-avatar-DRMAoqFt.js";import{B as d}from"./badge-C2HqoOk5.js";import{P as me}from"./panel-right-close-D7tJkwdn.js";import{C as Qe}from"./cpu-zEsE2ia0.js";import{R as Ve}from"./radio-CDuZqls4.js";import{L as Ye}from"./lock-CL2SzOGd.js";/** * @license lucide-react v0.577.0 - ISC * * This source code is licensed under the ISC license. @@ -8,4 +8,4 @@ import{x as xe,c as Ee,r as f,bR as Ae,p as N,u as w,_ as ne,Q as P,j as e,B as * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Je=[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]],Xe=xe("terminal",Je);function cs({agentId:a,agentName:ue,onClose:b,className:T}){var Q,V,Y,U,G,J,X,Z,D,ee,se,te,re,oe,ae,le;const{t:r}=Ee(),[pe,F]=f.useState(!1),[he,$]=f.useState(!1),[O,fe]=f.useState(!1),{data:v}=Ae(),k=v==null?void 0:v.find(o=>N(o.resource).id===a||o.name===a||o.resource===a),{data:C}=w({queryKey:Be.descriptor(a),queryFn:()=>Oe(1,0,a),enabled:!!a&&!k,staleTime:6e4}),be=C==null?void 0:C[0],l=k||be,u=l?N(l.resource):null,n=(u==null?void 0:u.id)||a,B=u==null?void 0:u.version,{data:s,isLoading:ge}=w({queryKey:["agent",n,B],queryFn:()=>_e(n,B),enabled:!!n,staleTime:1e4,retry:1}),E=(Q=s==null?void 0:s.workflows)==null?void 0:Q[0],c=E?N(E):null,{data:g,isLoading:je}=w({queryKey:["workflow",c==null?void 0:c.id,c==null?void 0:c.version],queryFn:()=>Ie(c.id,c.version),enabled:!!(c!=null&&c.id),staleTime:3e4,retry:!1}),j=(V=g==null?void 0:g.workflowSteps)==null?void 0:V.find(o=>o.type.includes("ai.labs.llm")||o.type.includes("langchain")),_=(Y=j==null?void 0:j.config)==null?void 0:Y.uri,i=_?N(_):null,z=ze.find(o=>o.slug==="llm"),{data:p,isLoading:ye}=w({queryKey:["resource","llm",i==null?void 0:i.id,i==null?void 0:i.version],queryFn:()=>Ke(z,i.id,i.version),enabled:!!z&&!!(i!=null&&i.id),staleTime:3e4,retry:!1}),Ne=!!E&&(je||!j&&!g||ye),t=(U=p==null?void 0:p.tasks)==null?void 0:U[0],K=((G=t==null?void 0:t.parameters)==null?void 0:G.model)||((J=t==null?void 0:t.parameters)==null?void 0:J.modelName)||((X=t==null?void 0:t.parameters)==null?void 0:X["model.name"])||((Z=t==null?void 0:t.parameters)==null?void 0:Z["llm.model"])||(t!=null&&t.type?t.type.split(".").pop():void 0)||(p?"Custom LLM":null),I=((D=t==null?void 0:t.parameters)==null?void 0:D.temperature)??null,y=t==null?void 0:t.maxContextTokens,H=y!=null&&y>0?`${(y/1024).toFixed(0)}k tokens`:null,m=[];if((ee=t==null?void 0:t.tools)!=null&&ee.length&&m.push(...t.tools),(se=t==null?void 0:t.builtInToolsWhitelist)!=null&&se.length&&m.push(...t.builtInToolsWhitelist),t!=null&&t.enableHttpCallTools&&m.push("HTTP Calls"),t!=null&&t.enableMcpCallTools&&m.push("MCP Tools"),s!=null&&s.enableMemoryTools&&m.push("Memory"),(te=s==null?void 0:s.capabilities)!=null&&te.length)for(const o of s.capabilities)m.includes(o.skill)||m.push(o.skill);const we=f.useCallback(async()=>{if(n)try{await navigator.clipboard.writeText(n),F(!0),ne.success(r("common.copied","Copied to clipboard")),setTimeout(()=>F(!1),1500)}catch{}},[n,r]),ve=f.useCallback(async o=>{try{await navigator.clipboard.writeText(o),$(!0),ne.success(r("common.copied","Copied to clipboard")),setTimeout(()=>$(!1),1500)}catch{}},[r]),A=l==null?void 0:l.name,ke=P(o=>o.selectedAgentId),Ce=P(o=>o.selectedAgentName);if(A&&ke===a&&Ce!==A&&queueMicrotask(()=>{P.setState({selectedAgentName:A})}),!a)return e.jsxs("div",{className:L("w-80 shrink-0 border-s border-border bg-card overflow-y-auto flex flex-col max-lg:hidden",T),children:[e.jsxs("div",{className:"p-3 border-b border-border flex items-center justify-between shrink-0 bg-muted/20",children:[e.jsxs("h3",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground flex items-center gap-1.5",children:[e.jsx(S,{className:"h-3.5 w-3.5 text-primary"}),r("Workforce.chat.agentDetails","Agent Details")]}),b&&e.jsx("button",{type:"button",onClick:b,className:"p-1 rounded-md hover:bg-muted text-muted-foreground hover:text-foreground transition-colors",children:e.jsx(me,{className:"h-4 w-4"})})]}),e.jsx("div",{className:"flex flex-1 items-center justify-center p-4",children:e.jsxs("div",{className:"text-center text-muted-foreground",children:[e.jsx(S,{className:"h-8 w-8 mx-auto mb-2 opacity-40"}),e.jsx("p",{className:"text-xs",children:r("Workforce.chat.selectToView","Select an agent to view details")})]})})]});const W=ue||(l==null?void 0:l.name)||a,h=(s==null?void 0:s.description)||(l==null?void 0:l.description);return e.jsxs("div",{className:L("w-80 shrink-0 border-s border-border bg-card overflow-y-auto flex flex-col max-lg:hidden",T),children:[e.jsxs("div",{className:"p-3 border-b border-border flex items-center justify-between shrink-0 bg-muted/20",children:[e.jsxs("h3",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground flex items-center gap-1.5",children:[e.jsx(S,{className:"h-3.5 w-3.5 text-primary"}),r("Workforce.chat.agentDetails","Agent Details")]}),b&&e.jsx("button",{type:"button",onClick:b,className:"p-1 rounded-md hover:bg-muted text-muted-foreground hover:text-foreground transition-colors",title:r("Workforce.chat.hideDetails","Hide details panel"),children:e.jsx(me,{className:"h-4 w-4"})})]}),ge&&!k?e.jsxs("div",{className:"p-4 space-y-4",children:[e.jsxs("div",{className:"flex flex-col items-center gap-2",children:[e.jsx(x,{className:"h-16 w-16 rounded-full"}),e.jsx(x,{className:"h-4 w-28"}),e.jsx(x,{className:"h-3 w-40"})]}),e.jsx(x,{className:"h-20 w-full rounded-lg"}),e.jsx(x,{className:"h-12 w-full rounded-lg"}),e.jsx(x,{className:"h-10 w-full rounded-lg"})]}):e.jsxs("div",{className:"p-4 space-y-5",children:[e.jsxs("div",{className:"flex flex-col items-center text-center gap-2",children:[e.jsxs("div",{className:"relative",children:[e.jsx(He,{name:W,agentId:n||a,size:"lg"}),e.jsx("span",{className:"absolute bottom-0 end-0 h-3.5 w-3.5 rounded-full bg-emerald-500 border-2 border-background shadow-xs",title:"Agent Deployed & Ready"})]}),e.jsxs("div",{className:"w-full min-w-0",children:[e.jsx("h4",{className:"text-base font-semibold text-foreground truncate",title:W,children:W}),e.jsxs("button",{type:"button",onClick:we,className:"mt-1 inline-flex items-center gap-1 max-w-full rounded-full border border-border/60 bg-muted/40 px-2.5 py-0.5 text-[10px] font-mono text-muted-foreground hover:bg-muted hover:text-foreground transition-colors truncate",title:r("common.copyId","Copy Agent ID"),children:[e.jsx("span",{className:"truncate",children:n||a}),pe?e.jsx(ce,{className:"h-3 w-3 text-emerald-500 shrink-0"}):e.jsx(ie,{className:"h-3 w-3 shrink-0"})]}),h&&e.jsx("p",{className:"text-xs text-muted-foreground/90 mt-2 text-start bg-muted/20 rounded-lg p-2.5 border border-border/40 leading-relaxed",children:h})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsx(R,{to:`/manage/agentview/${n||a}`,children:e.jsxs(q,{variant:"outline",size:"sm",className:"w-full text-xs h-8 justify-start",children:[e.jsx(We,{className:"h-3.5 w-3.5 me-1 text-primary"}),r("Workforce.chat.editAgent","Edit Agent")]})}),e.jsx(R,{to:`/manage/audit?agentId=${n||a}`,children:e.jsxs(q,{variant:"outline",size:"sm",className:"w-full text-xs h-8 justify-start",children:[e.jsx(Me,{className:"h-3.5 w-3.5 me-1 text-muted-foreground"}),r("Workforce.chat.auditLogs","Audit Logs")]})})]}),e.jsxs("div",{className:"rounded-lg border border-border/60 bg-card p-3 space-y-2.5",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("h5",{className:"text-xs font-semibold text-foreground flex items-center gap-1.5",children:[e.jsx(Qe,{className:"h-3.5 w-3.5 text-purple-400"}),r("Workforce.agentEditor.llmConfig","Model & LLM Engine")]}),K&&e.jsx(d,{variant:"outline",className:"text-[10px] border-purple-500/30 text-purple-400 bg-purple-500/5 font-mono",children:K})]}),e.jsxs("div",{className:"space-y-2 text-xs",children:[Ne?e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(x,{className:"h-3 w-full"}),e.jsx(x,{className:"h-3 w-3/4"})]}):p?e.jsxs(e.Fragment,{children:[I!=null&&e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:r("Workforce.agentEditor.temperature","Temperature")}),e.jsx("span",{className:"font-mono text-[11px] font-medium text-foreground",children:I})]}),H!=null&&e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:r("Workforce.agentEditor.contextWindow","Context Limit")}),e.jsx("span",{className:"font-mono text-[11px] font-medium text-foreground",children:H})]}),(t==null?void 0:t.type)&&e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:r("Workforce.agentEditor.provider","Provider")}),e.jsx("span",{className:"font-mono text-[11px] font-medium text-foreground capitalize",children:t.type.replace("ai.labs.","")})]})]}):e.jsx("span",{className:"text-[11px] text-muted-foreground italic",children:r("Workforce.agentEditor.noLlm","No LLM configured")}),e.jsxs("div",{className:"space-y-1 pt-1 border-t border-border/40",children:[e.jsxs("span",{className:"text-muted-foreground flex items-center gap-1 text-[11px]",children:[e.jsx(Pe,{className:"h-3 w-3 text-sky-400"}),r("Workforce.agentEditor.activeTools","Active Tools")]}),e.jsx("div",{className:"flex flex-wrap gap-1 pt-0.5",children:m.length>0?m.map((o,M)=>e.jsx(d,{variant:"secondary",className:"text-[10px] bg-sky-500/10 text-sky-400 border-sky-500/20",children:o},`${o}-${M}`)):e.jsx("span",{className:"text-[11px] text-muted-foreground italic",children:r("Workforce.agentEditor.noTools","None configured")})})]})]})]}),h&&e.jsxs("div",{className:"rounded-lg border border-border/60 bg-card p-3 space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("h5",{className:"text-xs font-semibold text-foreground flex items-center gap-1.5",children:[e.jsx(Xe,{className:"h-3.5 w-3.5 text-emerald-400"}),r("Workforce.agentEditor.personaPrompt","Persona Prompt")]}),e.jsx("button",{type:"button",onClick:()=>ve(h),className:"p-1 rounded hover:bg-muted text-muted-foreground hover:text-foreground transition-colors",title:r("common.copy","Copy Persona"),children:he?e.jsx(ce,{className:"h-3 w-3 text-emerald-500"}):e.jsx(ie,{className:"h-3 w-3"})})]}),e.jsx("div",{className:L("text-[11px] font-mono text-muted-foreground bg-muted/30 rounded-md p-2 border border-border/30 transition-all overflow-hidden",!O&&"line-clamp-3"),children:h}),e.jsx("button",{type:"button",onClick:()=>fe(o=>!o),className:"flex items-center gap-1 text-[10px] text-primary hover:underline font-medium pt-0.5",children:O?e.jsxs(e.Fragment,{children:[e.jsx(Se,{className:"h-3 w-3"})," ",r("common.showLess","Show Less")]}):e.jsxs(e.Fragment,{children:[e.jsx(Le,{className:"h-3 w-3"})," ",r("common.showMore","Expand Persona")]})})]}),(s==null?void 0:s.capabilities)&&s.capabilities.length>0&&e.jsxs("div",{className:"rounded-lg border border-border/60 bg-card p-3 space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("h5",{className:"text-xs font-semibold text-foreground flex items-center gap-1.5",children:[e.jsx(Re,{className:"h-3.5 w-3.5 text-amber-500"}),r("Workforce.agentEditor.capabilities","Capabilities")]}),e.jsx("span",{className:"text-[10px] font-medium text-muted-foreground rounded-full bg-muted px-1.5 py-0.5",children:s.capabilities.length})]}),e.jsx("div",{className:"flex flex-wrap gap-1.5",children:s.capabilities.map((o,M)=>e.jsx(d,{variant:"secondary",className:"text-[10px] bg-primary/5 text-primary border-primary/20 hover:bg-primary/10 transition-colors",children:o.skill},`${o.skill}-${M}`))})]}),e.jsxs("div",{className:"rounded-lg border border-border/60 bg-card p-3 space-y-2",children:[e.jsxs("h5",{className:"text-xs font-semibold text-foreground flex items-center gap-1.5",children:[e.jsx(Ve,{className:"h-3.5 w-3.5 text-emerald-400"}),r("Workforce.agentEditor.channels","Channel Connectors")]}),e.jsxs("div",{className:"flex flex-wrap gap-1.5",children:[e.jsx(d,{variant:"secondary",className:"text-[10px] border border-border/50",children:"Web Widget"}),e.jsx(d,{variant:"secondary",className:"text-[10px] border border-border/50",children:"REST API"}),(s==null?void 0:s.a2aEnabled)&&e.jsx(d,{variant:"secondary",className:"text-[10px] border border-purple-500/30 text-purple-400 bg-purple-500/5",children:"A2A Protocol"})]})]}),(s==null?void 0:s.workflows)&&s.workflows.length>0&&e.jsxs("div",{className:"rounded-lg border border-border/60 bg-card p-3 space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("h5",{className:"text-xs font-semibold text-foreground flex items-center gap-1.5",children:[e.jsx(qe,{className:"h-3.5 w-3.5 text-blue-500"}),r("Workforce.agentEditor.workflows","Workflows")]}),e.jsx("span",{className:"text-[10px] font-medium text-muted-foreground rounded-full bg-muted px-1.5 py-0.5",children:s.workflows.length})]}),e.jsx(R,{to:`/manage/agentview/${n||a}`,children:e.jsxs(q,{variant:"outline",size:"sm",className:"w-full text-xs h-8 justify-start",children:[e.jsx(Te,{className:"h-3.5 w-3.5 me-1 text-blue-500"}),r("Workforce.chat.openStudio","Open in Manager")]})})]}),e.jsxs("div",{className:"rounded-lg border border-border/60 bg-card p-3 space-y-2.5",children:[e.jsxs("h5",{className:"text-xs font-semibold text-foreground flex items-center gap-1.5",children:[e.jsx(Fe,{className:"h-3.5 w-3.5 text-emerald-500"}),r("Workforce.agentEditor.features","Features & Security")]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between text-xs",children:[e.jsxs("span",{className:"text-muted-foreground flex items-center gap-1.5",children:[e.jsx(Ge,{className:"h-3 w-3 text-purple-400"}),r("Workforce.agentEditor.a2aEnabled","Agent-to-Agent")]}),e.jsx(d,{variant:s!=null&&s.a2aEnabled?"success":"secondary",className:"text-[10px]",children:s!=null&&s.a2aEnabled?r("common.on","On"):r("common.off","Off")})]}),e.jsxs("div",{className:"flex items-center justify-between text-xs",children:[e.jsxs("span",{className:"text-muted-foreground flex items-center gap-1.5",children:[e.jsx(de,{className:"h-3 w-3 text-indigo-400"}),r("Workforce.agentEditor.memoryTools","Memory Tools")]}),e.jsx(d,{variant:s!=null&&s.enableMemoryTools?"success":"secondary",className:"text-[10px]",children:s!=null&&s.enableMemoryTools?r("common.on","On"):r("common.off","Off")})]}),((re=s==null?void 0:s.security)==null?void 0:re.signInterAgentMessages)!==void 0&&e.jsxs("div",{className:"flex items-center justify-between text-xs",children:[e.jsxs("span",{className:"text-muted-foreground flex items-center gap-1.5",children:[e.jsx($e,{className:"h-3 w-3 text-emerald-400"}),r("Workforce.agentEditor.signedMessages","Signed Messages")]}),e.jsx(d,{variant:s.security.signInterAgentMessages?"success":"secondary",className:"text-[10px]",children:s.security.signInterAgentMessages?r("common.on","On"):r("common.off","Off")})]}),((ae=(oe=s==null?void 0:s.memoryPolicy)==null?void 0:oe.strictWriteDiscipline)==null?void 0:ae.enabled)&&e.jsxs("div",{className:"flex items-center justify-between text-xs",children:[e.jsxs("span",{className:"text-muted-foreground flex items-center gap-1.5",children:[e.jsx(de,{className:"h-3 w-3 text-amber-400"}),r("Workforce.agentEditor.strictMemory","Strict Memory")]}),e.jsx(d,{variant:"outline",className:"text-[10px] border-amber-500/30 text-amber-500",children:"Active"})]}),((le=s==null?void 0:s.hitlConfig)==null?void 0:le.timeoutPolicy)&&e.jsxs("div",{className:"flex items-center justify-between text-xs",children:[e.jsxs("span",{className:"text-muted-foreground flex items-center gap-1.5",children:[e.jsx(Ye,{className:"h-3 w-3 text-amber-400"}),r("Workforce.agentEditor.hitlMode","Approval Policy")]}),e.jsx(d,{variant:"warning",className:"text-[10px]",children:s.hitlConfig.timeoutPolicy})]})]})]})]})]})}export{cs as A}; + */const Je=[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]],Xe=xe("terminal",Je);function cs({agentId:a,agentName:ue,onClose:b,className:T}){var Q,V,Y,U,G,J,X,Z,D,ee,se,te,re,oe,ae,le;const{t:r}=Ee(),[pe,F]=f.useState(!1),[he,O]=f.useState(!1),[$,fe]=f.useState(!1),{data:v}=Ae(),k=v==null?void 0:v.find(o=>N(o.resource).id===a||o.name===a||o.resource===a),{data:C}=w({queryKey:Be.descriptor(a),queryFn:()=>$e(1,0,a),enabled:!!a&&!k,staleTime:6e4}),be=C==null?void 0:C[0],l=k||be,u=l?N(l.resource):null,n=(u==null?void 0:u.id)||a,B=u==null?void 0:u.version,{data:s,isLoading:ge}=w({queryKey:["agent",n,B],queryFn:()=>_e(n,B),enabled:!!n,staleTime:1e4,retry:1}),E=(Q=s==null?void 0:s.workflows)==null?void 0:Q[0],c=E?N(E):null,{data:g,isLoading:je}=w({queryKey:["workflow",c==null?void 0:c.id,c==null?void 0:c.version],queryFn:()=>Ie(c.id,c.version),enabled:!!(c!=null&&c.id),staleTime:3e4,retry:!1}),j=(V=g==null?void 0:g.workflowSteps)==null?void 0:V.find(o=>o.type.includes("ai.labs.llm")||o.type.includes("langchain")),_=(Y=j==null?void 0:j.config)==null?void 0:Y.uri,i=_?N(_):null,z=ze.find(o=>o.slug==="llm"),{data:p,isLoading:ye}=w({queryKey:["resource","llm",i==null?void 0:i.id,i==null?void 0:i.version],queryFn:()=>Ke(z,i.id,i.version),enabled:!!z&&!!(i!=null&&i.id),staleTime:3e4,retry:!1}),Ne=!!E&&(je||!j&&!g||ye),t=(U=p==null?void 0:p.tasks)==null?void 0:U[0],K=((G=t==null?void 0:t.parameters)==null?void 0:G.model)||((J=t==null?void 0:t.parameters)==null?void 0:J.modelName)||((X=t==null?void 0:t.parameters)==null?void 0:X["model.name"])||((Z=t==null?void 0:t.parameters)==null?void 0:Z["llm.model"])||(t!=null&&t.type?t.type.split(".").pop():void 0)||(p?"Custom LLM":null),I=((D=t==null?void 0:t.parameters)==null?void 0:D.temperature)??null,y=t==null?void 0:t.maxContextTokens,H=y!=null&&y>0?`${(y/1024).toFixed(0)}k tokens`:null,m=[];if((ee=t==null?void 0:t.tools)!=null&&ee.length&&m.push(...t.tools),(se=t==null?void 0:t.builtInToolsWhitelist)!=null&&se.length&&m.push(...t.builtInToolsWhitelist),t!=null&&t.enableHttpCallTools&&m.push("HTTP Calls"),t!=null&&t.enableMcpCallTools&&m.push("MCP Tools"),s!=null&&s.enableMemoryTools&&m.push("Memory"),(te=s==null?void 0:s.capabilities)!=null&&te.length)for(const o of s.capabilities)m.includes(o.skill)||m.push(o.skill);const we=f.useCallback(async()=>{if(n)try{await navigator.clipboard.writeText(n),F(!0),ne.success(r("common.copied","Copied to clipboard")),setTimeout(()=>F(!1),1500)}catch{}},[n,r]),ve=f.useCallback(async o=>{try{await navigator.clipboard.writeText(o),O(!0),ne.success(r("common.copied","Copied to clipboard")),setTimeout(()=>O(!1),1500)}catch{}},[r]),A=l==null?void 0:l.name,ke=P(o=>o.selectedAgentId),Ce=P(o=>o.selectedAgentName);if(A&&ke===a&&Ce!==A&&queueMicrotask(()=>{P.setState({selectedAgentName:A})}),!a)return e.jsxs("div",{className:L("w-80 shrink-0 border-s border-border bg-card overflow-y-auto flex flex-col max-lg:hidden",T),children:[e.jsxs("div",{className:"p-3 border-b border-border flex items-center justify-between shrink-0 bg-muted/20",children:[e.jsxs("h3",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground flex items-center gap-1.5",children:[e.jsx(S,{className:"h-3.5 w-3.5 text-primary"}),r("Workforce.chat.agentDetails","Agent Details")]}),b&&e.jsx("button",{type:"button",onClick:b,className:"p-1 rounded-md hover:bg-muted text-muted-foreground hover:text-foreground transition-colors",children:e.jsx(me,{className:"h-4 w-4"})})]}),e.jsx("div",{className:"flex flex-1 items-center justify-center p-4",children:e.jsxs("div",{className:"text-center text-muted-foreground",children:[e.jsx(S,{className:"h-8 w-8 mx-auto mb-2 opacity-40"}),e.jsx("p",{className:"text-xs",children:r("Workforce.chat.selectToView","Select an agent to view details")})]})})]});const W=ue||(l==null?void 0:l.name)||a,h=(s==null?void 0:s.description)||(l==null?void 0:l.description);return e.jsxs("div",{className:L("w-80 shrink-0 border-s border-border bg-card overflow-y-auto flex flex-col max-lg:hidden",T),children:[e.jsxs("div",{className:"p-3 border-b border-border flex items-center justify-between shrink-0 bg-muted/20",children:[e.jsxs("h3",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground flex items-center gap-1.5",children:[e.jsx(S,{className:"h-3.5 w-3.5 text-primary"}),r("Workforce.chat.agentDetails","Agent Details")]}),b&&e.jsx("button",{type:"button",onClick:b,className:"p-1 rounded-md hover:bg-muted text-muted-foreground hover:text-foreground transition-colors",title:r("Workforce.chat.hideDetails","Hide details panel"),children:e.jsx(me,{className:"h-4 w-4"})})]}),ge&&!k?e.jsxs("div",{className:"p-4 space-y-4",children:[e.jsxs("div",{className:"flex flex-col items-center gap-2",children:[e.jsx(x,{className:"h-16 w-16 rounded-full"}),e.jsx(x,{className:"h-4 w-28"}),e.jsx(x,{className:"h-3 w-40"})]}),e.jsx(x,{className:"h-20 w-full rounded-lg"}),e.jsx(x,{className:"h-12 w-full rounded-lg"}),e.jsx(x,{className:"h-10 w-full rounded-lg"})]}):e.jsxs("div",{className:"p-4 space-y-5",children:[e.jsxs("div",{className:"flex flex-col items-center text-center gap-2",children:[e.jsxs("div",{className:"relative",children:[e.jsx(He,{name:W,agentId:n||a,size:"lg"}),e.jsx("span",{className:"absolute bottom-0 end-0 h-3.5 w-3.5 rounded-full bg-emerald-500 border-2 border-background shadow-xs",title:"Agent Deployed & Ready"})]}),e.jsxs("div",{className:"w-full min-w-0",children:[e.jsx("h4",{className:"text-base font-semibold text-foreground truncate",title:W,children:W}),e.jsxs("button",{type:"button",onClick:we,className:"mt-1 inline-flex items-center gap-1 max-w-full rounded-full border border-border/60 bg-muted/40 px-2.5 py-0.5 text-[10px] font-mono text-muted-foreground hover:bg-muted hover:text-foreground transition-colors truncate",title:r("common.copyId","Copy Agent ID"),children:[e.jsx("span",{className:"truncate",children:n||a}),pe?e.jsx(ce,{className:"h-3 w-3 text-emerald-500 shrink-0"}):e.jsx(ie,{className:"h-3 w-3 shrink-0"})]}),h&&e.jsx("p",{className:"text-xs text-muted-foreground/90 mt-2 text-start bg-muted/20 rounded-lg p-2.5 border border-border/40 leading-relaxed",children:h})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsx(R,{to:`/manage/agentview/${n||a}`,children:e.jsxs(q,{variant:"outline",size:"sm",className:"w-full text-xs h-8 justify-start",children:[e.jsx(We,{className:"h-3.5 w-3.5 me-1 text-primary"}),r("Workforce.chat.editAgent","Edit Agent")]})}),e.jsx(R,{to:`/manage/audit?agentId=${n||a}`,children:e.jsxs(q,{variant:"outline",size:"sm",className:"w-full text-xs h-8 justify-start",children:[e.jsx(Me,{className:"h-3.5 w-3.5 me-1 text-muted-foreground"}),r("Workforce.chat.auditLogs","Audit Logs")]})})]}),e.jsxs("div",{className:"rounded-lg border border-border/60 bg-card p-3 space-y-2.5",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("h5",{className:"text-xs font-semibold text-foreground flex items-center gap-1.5",children:[e.jsx(Qe,{className:"h-3.5 w-3.5 text-purple-400"}),r("Workforce.agentEditor.llmConfig","Model & LLM Engine")]}),K&&e.jsx(d,{variant:"outline",className:"text-[10px] border-purple-500/30 text-purple-400 bg-purple-500/5 font-mono",children:K})]}),e.jsxs("div",{className:"space-y-2 text-xs",children:[Ne?e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(x,{className:"h-3 w-full"}),e.jsx(x,{className:"h-3 w-3/4"})]}):p?e.jsxs(e.Fragment,{children:[I!=null&&e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:r("Workforce.agentEditor.temperature","Temperature")}),e.jsx("span",{className:"font-mono text-[11px] font-medium text-foreground",children:I})]}),H!=null&&e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:r("Workforce.agentEditor.contextWindow","Context Limit")}),e.jsx("span",{className:"font-mono text-[11px] font-medium text-foreground",children:H})]}),(t==null?void 0:t.type)&&e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:r("Workforce.agentEditor.provider","Provider")}),e.jsx("span",{className:"font-mono text-[11px] font-medium text-foreground capitalize",children:t.type.replace("ai.labs.","")})]})]}):e.jsx("span",{className:"text-[11px] text-muted-foreground italic",children:r("Workforce.agentEditor.noLlm","No LLM configured")}),e.jsxs("div",{className:"space-y-1 pt-1 border-t border-border/40",children:[e.jsxs("span",{className:"text-muted-foreground flex items-center gap-1 text-[11px]",children:[e.jsx(Pe,{className:"h-3 w-3 text-sky-400"}),r("Workforce.agentEditor.activeTools","Active Tools")]}),e.jsx("div",{className:"flex flex-wrap gap-1 pt-0.5",children:m.length>0?m.map((o,M)=>e.jsx(d,{variant:"secondary",className:"text-[10px] bg-sky-500/10 text-sky-400 border-sky-500/20",children:o},`${o}-${M}`)):e.jsx("span",{className:"text-[11px] text-muted-foreground italic",children:r("Workforce.agentEditor.noTools","None configured")})})]})]})]}),h&&e.jsxs("div",{className:"rounded-lg border border-border/60 bg-card p-3 space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("h5",{className:"text-xs font-semibold text-foreground flex items-center gap-1.5",children:[e.jsx(Xe,{className:"h-3.5 w-3.5 text-emerald-400"}),r("Workforce.agentEditor.personaPrompt","Persona Prompt")]}),e.jsx("button",{type:"button",onClick:()=>ve(h),className:"p-1 rounded hover:bg-muted text-muted-foreground hover:text-foreground transition-colors",title:r("common.copy","Copy Persona"),children:he?e.jsx(ce,{className:"h-3 w-3 text-emerald-500"}):e.jsx(ie,{className:"h-3 w-3"})})]}),e.jsx("div",{className:L("text-[11px] font-mono text-muted-foreground bg-muted/30 rounded-md p-2 border border-border/30 transition-all overflow-hidden",!$&&"line-clamp-3"),children:h}),e.jsx("button",{type:"button",onClick:()=>fe(o=>!o),className:"flex items-center gap-1 text-[10px] text-primary hover:underline font-medium pt-0.5",children:$?e.jsxs(e.Fragment,{children:[e.jsx(Se,{className:"h-3 w-3"})," ",r("common.showLess","Show Less")]}):e.jsxs(e.Fragment,{children:[e.jsx(Le,{className:"h-3 w-3"})," ",r("common.showMore","Expand Persona")]})})]}),(s==null?void 0:s.capabilities)&&s.capabilities.length>0&&e.jsxs("div",{className:"rounded-lg border border-border/60 bg-card p-3 space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("h5",{className:"text-xs font-semibold text-foreground flex items-center gap-1.5",children:[e.jsx(Re,{className:"h-3.5 w-3.5 text-amber-500"}),r("Workforce.agentEditor.capabilities","Capabilities")]}),e.jsx("span",{className:"text-[10px] font-medium text-muted-foreground rounded-full bg-muted px-1.5 py-0.5",children:s.capabilities.length})]}),e.jsx("div",{className:"flex flex-wrap gap-1.5",children:s.capabilities.map((o,M)=>e.jsx(d,{variant:"secondary",className:"text-[10px] bg-primary/5 text-primary border-primary/20 hover:bg-primary/10 transition-colors",children:o.skill},`${o.skill}-${M}`))})]}),e.jsxs("div",{className:"rounded-lg border border-border/60 bg-card p-3 space-y-2",children:[e.jsxs("h5",{className:"text-xs font-semibold text-foreground flex items-center gap-1.5",children:[e.jsx(Ve,{className:"h-3.5 w-3.5 text-emerald-400"}),r("Workforce.agentEditor.channels","Channel Connectors")]}),e.jsxs("div",{className:"flex flex-wrap gap-1.5",children:[e.jsx(d,{variant:"secondary",className:"text-[10px] border border-border/50",children:"Web Widget"}),e.jsx(d,{variant:"secondary",className:"text-[10px] border border-border/50",children:"REST API"}),(s==null?void 0:s.a2aEnabled)&&e.jsx(d,{variant:"secondary",className:"text-[10px] border border-purple-500/30 text-purple-400 bg-purple-500/5",children:"A2A Protocol"})]})]}),(s==null?void 0:s.workflows)&&s.workflows.length>0&&e.jsxs("div",{className:"rounded-lg border border-border/60 bg-card p-3 space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("h5",{className:"text-xs font-semibold text-foreground flex items-center gap-1.5",children:[e.jsx(qe,{className:"h-3.5 w-3.5 text-blue-500"}),r("Workforce.agentEditor.workflows","Workflows")]}),e.jsx("span",{className:"text-[10px] font-medium text-muted-foreground rounded-full bg-muted px-1.5 py-0.5",children:s.workflows.length})]}),e.jsx(R,{to:`/manage/agentview/${n||a}`,children:e.jsxs(q,{variant:"outline",size:"sm",className:"w-full text-xs h-8 justify-start",children:[e.jsx(Te,{className:"h-3.5 w-3.5 me-1 text-blue-500"}),r("Workforce.chat.openStudio","Open in Manager")]})})]}),e.jsxs("div",{className:"rounded-lg border border-border/60 bg-card p-3 space-y-2.5",children:[e.jsxs("h5",{className:"text-xs font-semibold text-foreground flex items-center gap-1.5",children:[e.jsx(Fe,{className:"h-3.5 w-3.5 text-emerald-500"}),r("Workforce.agentEditor.features","Features & Security")]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between text-xs",children:[e.jsxs("span",{className:"text-muted-foreground flex items-center gap-1.5",children:[e.jsx(Ge,{className:"h-3 w-3 text-purple-400"}),r("Workforce.agentEditor.a2aEnabled","Agent-to-Agent")]}),e.jsx(d,{variant:s!=null&&s.a2aEnabled?"success":"secondary",className:"text-[10px]",children:s!=null&&s.a2aEnabled?r("common.on","On"):r("common.off","Off")})]}),e.jsxs("div",{className:"flex items-center justify-between text-xs",children:[e.jsxs("span",{className:"text-muted-foreground flex items-center gap-1.5",children:[e.jsx(de,{className:"h-3 w-3 text-indigo-400"}),r("Workforce.agentEditor.memoryTools","Memory Tools")]}),e.jsx(d,{variant:s!=null&&s.enableMemoryTools?"success":"secondary",className:"text-[10px]",children:s!=null&&s.enableMemoryTools?r("common.on","On"):r("common.off","Off")})]}),((re=s==null?void 0:s.security)==null?void 0:re.signInterAgentMessages)!==void 0&&e.jsxs("div",{className:"flex items-center justify-between text-xs",children:[e.jsxs("span",{className:"text-muted-foreground flex items-center gap-1.5",children:[e.jsx(Oe,{className:"h-3 w-3 text-emerald-400"}),r("Workforce.agentEditor.signedMessages","Signed Messages")]}),e.jsx(d,{variant:s.security.signInterAgentMessages?"success":"secondary",className:"text-[10px]",children:s.security.signInterAgentMessages?r("common.on","On"):r("common.off","Off")})]}),((ae=(oe=s==null?void 0:s.memoryPolicy)==null?void 0:oe.strictWriteDiscipline)==null?void 0:ae.enabled)&&e.jsxs("div",{className:"flex items-center justify-between text-xs",children:[e.jsxs("span",{className:"text-muted-foreground flex items-center gap-1.5",children:[e.jsx(de,{className:"h-3 w-3 text-amber-400"}),r("Workforce.agentEditor.strictMemory","Strict Memory")]}),e.jsx(d,{variant:"outline",className:"text-[10px] border-amber-500/30 text-amber-500",children:"Active"})]}),((le=s==null?void 0:s.hitlConfig)==null?void 0:le.timeoutPolicy)&&e.jsxs("div",{className:"flex items-center justify-between text-xs",children:[e.jsxs("span",{className:"text-muted-foreground flex items-center gap-1.5",children:[e.jsx(Ye,{className:"h-3 w-3 text-amber-400"}),r("Workforce.agentEditor.hitlMode","Approval Policy")]}),e.jsx(d,{variant:"warning",className:"text-[10px]",children:s.hitlConfig.timeoutPolicy})]})]})]})]})]})}export{cs as A}; diff --git a/src/main/resources/META-INF/resources/assets/agent-editor-sheet-B0bu6_DR.js b/src/main/resources/META-INF/resources/assets/agent-editor-sheet-Ddq_LTe-.js similarity index 88% rename from src/main/resources/META-INF/resources/assets/agent-editor-sheet-B0bu6_DR.js rename to src/main/resources/META-INF/resources/assets/agent-editor-sheet-Ddq_LTe-.js index 89b0c3d951..5d18449185 100644 --- a/src/main/resources/META-INF/resources/assets/agent-editor-sheet-B0bu6_DR.js +++ b/src/main/resources/META-INF/resources/assets/agent-editor-sheet-Ddq_LTe-.js @@ -1 +1 @@ -import{u as D,aq as te,a_ as ce,eD as oe,aO as _,p as B,c as de,r as a,aY as ue,_ as se,j as e,S as l,k as v,a9 as re,a1 as fe,i,ah as me,P as ge,D as xe,g as he,b$ as pe}from"./index-BY6d8wze.js";import{a as be}from"./workflows-CAxBNXSH.js";import{g as ye,b as we}from"./resources-R5ikMSzo.js";import{a as ve}from"./cascade-save-CAECbCBm.js";import{A as ke}from"./advisor-avatar-CRlm-udV.js";import{B as je}from"./badge-B8rrdXaB.js";const ae=ye("llm"),Ne="ai.labs.llm";async function Ee(t,n){var m,k,g,b,f;const c=(m=(await _(t,n)).workflows)==null?void 0:m[0];if(!c)return null;const{id:o,version:u}=B(c),x=(await be(o,u)).workflowSteps.find(L=>L.type===Ne);if(!x)return null;const h=(k=x.config)==null?void 0:k.uri;if(typeof h!="string")return null;const{id:W,version:A}=B(h),M=await we(ae,W,A);return{systemMessage:((f=(b=(g=M.tasks)==null?void 0:g[0])==null?void 0:b.parameters)==null?void 0:f.systemMessage)??"",llmConfig:M,llmId:W,llmVersion:A,workflowId:o,workflowVersion:u,agentVersion:n}}function Ce(t,n){return D({queryKey:["agent-prompt",t,n],queryFn:()=>Ee(t,n),enabled:!!t&&n>0,staleTime:3e4})}function Se(){const t=te();return ce({mutationFn:async({agentId:n,promptData:s,newSystemMessage:c})=>{const o=[...s.llmConfig.tasks??[]],u=o[0];u&&(o[0]={...u,parameters:{...u.parameters,systemMessage:c}});const S={...s.llmConfig,tasks:o},x={workflowId:s.workflowId,workflowVersion:s.workflowVersion,agentId:n,agentVersion:s.agentVersion};return ve(ae,s.llmId,s.llmVersion,S,x)},onSuccess:(n,s)=>{t.invalidateQueries({queryKey:["agent-prompt",s.agentId]});for(const c of oe(s.agentId))t.invalidateQueries({queryKey:c})}})}function We(t){switch(t){case"high":return"success";case"low":return"warning";default:return"secondary"}}function Fe({agentId:t,onClose:n}){const{t:s}=de(),c=te(),{data:o,isLoading:u,isError:S,refetch:x}=D({queryKey:["agent",t],queryFn:()=>_(t),enabled:!!t}),{data:h,isLoading:W,isError:A,refetch:M}=D({queryKey:pe.descriptor(t),queryFn:()=>he(1,0,t),enabled:!!t}),p=h==null?void 0:h[0],m=p?B(p.resource).version:1,k=(p==null?void 0:p.name)??t??"",g=u||W,b=S||A,[f,L]=a.useState(""),[j,q]=a.useState([]),[y,Q]=a.useState(!1),[w,O]=a.useState(!1),[U,$]=a.useState(!1),[N,H]=a.useState(""),[F,R]=a.useState(!1),[Y,z]=a.useState(!1),[E,J]=a.useState(""),[K,X]=a.useState("medium");a.useEffect(()=>{o&&(L(o.description??""),q(o.capabilities??[]),Q(o.a2aEnabled??!1),O(o.enableMemoryTools??!1))},[o]);const{data:d,isLoading:ne}=Ce(t,m),G=Se();a.useEffect(()=>{d&&!F&&(H(d.systemMessage),R(!0))},[d,F]),a.useEffect(()=>{R(!1)},[t]);const P=o?!!(f!==(o.description??"")||y!==(o.a2aEnabled??!1)||w!==(o.enableMemoryTools??!1)||JSON.stringify(j)!==JSON.stringify(o.capabilities??[])||F&&d&&N!==d.systemMessage):!1,Z=a.useRef(null);a.useEffect(()=>{const r=Z.current;r&&(r.style.height="auto",r.style.height=`${r.scrollHeight}px`)},[f]);const V=a.useCallback(r=>{if(r.key==="Escape"){if(P&&!window.confirm(s("Workforce.agentEditor.discardChanges","You have unsaved changes. Discard?")))return;n()}},[n,P,s]);a.useEffect(()=>{if(t)return document.addEventListener("keydown",V),()=>document.removeEventListener("keydown",V)},[t,V]);const I=a.useCallback(()=>{E.trim()&&(q(r=>[...r,{skill:E.trim(),confidence:K}]),J(""),X("medium"),z(!1))},[E,K]),ie=a.useCallback(r=>{q(C=>C.filter((ee,T)=>T!==r))},[]),le=a.useCallback(async()=>{if(!(!t||!o)){$(!0);try{let r=m;if(d&&N!==d.systemMessage){const T=await G.mutateAsync({agentId:t,promptData:d,newSystemMessage:N});T.newAgentVersion&&(r=T.newAgentVersion)}const ee={...r!==m?await _(t,r):o,description:f,capabilities:j,a2aEnabled:y,enableMemoryTools:w};await ue(t,r,ee),se.success(s("Workforce.agentEditor.saveSuccess","Agent updated successfully"))}catch{se.error(s("Workforce.agentEditor.saveError","Failed to save changes"))}finally{$(!1);for(const r of oe(t))await c.invalidateQueries({queryKey:r});R(!1)}}},[t,o,f,j,y,w,m,c,s,N,d,G]);return t?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"fixed inset-0 bg-black/50 z-40 transition-opacity duration-300",onClick:()=>{P&&!window.confirm(s("Workforce.agentEditor.discardChanges","You have unsaved changes. Discard?"))||n()},"aria-hidden":"true"}),e.jsxs("div",{className:i("fixed top-0 end-0 bottom-0 w-[480px] max-w-full","bg-background border-s border-border z-50","flex flex-col","transition-transform duration-300","shadow-2xl"),role:"dialog","aria-modal":!0,"aria-label":s("Workforce.agentEditor.title","Edit Agent"),children:[e.jsxs("div",{className:"flex items-center gap-3 ps-6 pe-4 py-4 border-b border-border shrink-0",children:[g?e.jsxs("div",{className:"flex items-center gap-3 flex-1",children:[e.jsx(l,{className:"h-12 w-12 rounded-full"}),e.jsx(l,{className:"h-5 w-32"})]}):e.jsxs("div",{className:"flex items-center gap-3 flex-1 min-w-0",children:[e.jsx(ke,{name:k,agentId:t,size:"lg"}),e.jsx("h2",{className:"text-lg font-semibold text-foreground truncate",children:k})]}),e.jsx(v,{variant:"ghost",size:"icon",onClick:n,className:"shrink-0","aria-label":s("Workforce.agentEditor.close","Close"),children:e.jsx(re,{})})]}),e.jsxs("div",{className:"flex-1 overflow-y-auto",children:[g&&e.jsxs("div",{className:"p-6 space-y-6",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(l,{className:"h-4 w-24"}),e.jsx(l,{className:"h-20 w-full"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(l,{className:"h-4 w-28"}),e.jsx(l,{className:"h-8 w-full"}),e.jsx(l,{className:"h-8 w-3/4"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(l,{className:"h-4 w-20"}),e.jsx(l,{className:"h-8 w-full"})]})]}),b&&e.jsxs("div",{className:"p-8 text-center space-y-4",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:s("Workforce.agentEditor.loadError","Failed to load agent data.")}),e.jsxs(v,{variant:"outline",size:"sm",onClick:()=>{x(),M()},children:[e.jsx(fe,{className:"h-4 w-4"}),s("Workforce.agentEditor.retry","Retry")]})]}),!g&&!b&&o&&e.jsxs("div",{className:"p-6 space-y-6",children:[e.jsxs("section",{children:[e.jsx("label",{htmlFor:"agent-description",className:"block text-sm font-medium text-foreground mb-1.5",children:s("Workforce.agentEditor.description","Description")}),e.jsx("textarea",{ref:Z,id:"agent-description",className:i("w-full rounded-lg border border-border bg-card px-3 py-2","text-sm text-foreground placeholder:text-muted-foreground","resize-none overflow-hidden","focus:outline-none focus:ring-2 focus:ring-ring","transition-colors"),rows:3,placeholder:s("Workforce.agentEditor.descriptionPlaceholder","Describe this agent's expertise..."),value:f,onChange:r=>L(r.target.value)})]}),e.jsxs("section",{children:[e.jsxs("label",{htmlFor:"agent-system-prompt",className:"flex items-center gap-1.5 text-sm font-medium text-foreground mb-1.5",children:[e.jsx(me,{className:"h-3.5 w-3.5 text-primary","aria-hidden":"true"}),s("Workforce.agentEditor.systemPrompt","System Prompt")]}),ne?e.jsxs("div",{className:"space-y-2",children:[e.jsx(l,{className:"h-4 w-3/4"}),e.jsx(l,{className:"h-24 w-full"})]}):e.jsx("textarea",{id:"agent-system-prompt",className:i("w-full rounded-lg border border-border bg-card px-3 py-2","text-sm text-foreground placeholder:text-muted-foreground","resize-y min-h-[120px]","focus:outline-none focus:ring-2 focus:ring-ring","transition-colors text-sm leading-relaxed"),rows:6,placeholder:s("Workforce.agentEditor.systemPromptPlaceholder","Instructions that define this agent's behavior, personality, and expertise..."),value:N,onChange:r=>H(r.target.value)})]}),e.jsxs("section",{children:[e.jsx("h3",{className:"text-sm font-medium text-foreground mb-2",children:s("Workforce.agentEditor.capabilities","Capabilities")}),j.length===0&&!Y&&e.jsx("p",{className:"text-sm text-muted-foreground mb-2",children:s("Workforce.agentEditor.noCapabilities","No capabilities defined.")}),e.jsx("div",{className:"flex flex-wrap gap-2 mb-3",children:j.map((r,C)=>e.jsxs("div",{className:i("flex items-center gap-1.5 rounded-full border border-border","bg-card ps-3 pe-1.5 py-1 text-sm"),children:[e.jsx("span",{className:"text-foreground",children:r.skill}),r.confidence&&e.jsx(je,{variant:We(r.confidence),className:"text-[10px] px-1.5 py-0",children:r.confidence}),e.jsx("button",{type:"button",className:i("h-5 w-5 rounded-full flex items-center justify-center","text-muted-foreground hover:text-foreground hover:bg-muted","transition-colors","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 bg-card"),onClick:()=>ie(C),"aria-label":s("Workforce.agentEditor.removeCapability","Remove capability"),children:e.jsx(re,{className:"h-3 w-3"})})]},`${r.skill}-${C}`))}),Y?e.jsxs("div",{className:"flex items-end gap-2 p-3 rounded-lg border border-border bg-card",children:[e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("label",{htmlFor:"new-skill",className:"block text-xs font-medium text-muted-foreground mb-1",children:s("Workforce.agentEditor.skill","Skill")}),e.jsx("input",{id:"new-skill",type:"text",className:i("w-full rounded-md border border-border bg-background px-2.5 py-1.5","text-sm text-foreground placeholder:text-muted-foreground","focus:outline-none focus:ring-2 focus:ring-ring"),placeholder:s("Workforce.agentEditor.skillPlaceholder","e.g. summarization"),value:E,onChange:r=>J(r.target.value),onKeyDown:r=>{r.key==="Enter"&&I(),r.key==="Escape"&&z(!1)},autoFocus:!0})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"new-confidence",className:"block text-xs font-medium text-muted-foreground mb-1",children:s("Workforce.agentEditor.confidence","Confidence")}),e.jsxs("select",{id:"new-confidence",className:i("rounded-md border border-border bg-background px-2.5 py-1.5","text-sm text-foreground","focus:outline-none focus:ring-2 focus:ring-ring"),value:K,onChange:r=>X(r.target.value),children:[e.jsx("option",{value:"low",children:s("Workforce.agentEditor.confidenceLow","Low")}),e.jsx("option",{value:"medium",children:s("Workforce.agentEditor.confidenceMedium","Medium")}),e.jsx("option",{value:"high",children:s("Workforce.agentEditor.confidenceHigh","High")})]})]}),e.jsx(v,{variant:"primary",size:"sm",onClick:I,disabled:!E.trim(),children:s("Workforce.agentEditor.add","Add")})]}):e.jsxs(v,{variant:"outline",size:"sm",onClick:()=>z(!0),children:[e.jsx(ge,{className:"h-4 w-4"}),s("Workforce.agentEditor.addCapability","Add Capability")]})]}),e.jsxs("section",{children:[e.jsx("h3",{className:"text-sm font-medium text-foreground mb-3",children:s("Workforce.agentEditor.settings","Settings")}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("button",{type:"button",className:i("w-full flex items-center justify-between","rounded-lg border border-border bg-card px-4 py-3","hover:bg-muted/50 transition-colors text-start","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1"),onClick:()=>Q(r=>!r),role:"switch","aria-checked":y,"aria-label":s("Workforce.agentEditor.a2aEnabled","Agent-to-Agent Communication"),children:[e.jsx("span",{className:"text-sm text-foreground",children:s("Workforce.agentEditor.a2aEnabled","Agent-to-Agent Communication")}),e.jsx("div",{className:i("relative h-5 w-9 rounded-full transition-colors",y?"bg-primary":"bg-muted"),children:e.jsx("div",{className:i("absolute top-0.5 h-4 w-4 rounded-full bg-background shadow","transition-all duration-200",y?"start-[18px]":"start-0.5")})})]}),e.jsxs("button",{type:"button",className:i("w-full flex items-center justify-between","rounded-lg border border-border bg-card px-4 py-3","hover:bg-muted/50 transition-colors text-start","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1"),onClick:()=>O(r=>!r),role:"switch","aria-checked":w,"aria-label":s("Workforce.agentEditor.memoryTools","Memory Tools"),children:[e.jsx("span",{className:"text-sm text-foreground",children:s("Workforce.agentEditor.memoryTools","Memory Tools")}),e.jsx("div",{className:i("relative h-5 w-9 rounded-full transition-colors",w?"bg-primary":"bg-muted"),children:e.jsx("div",{className:i("absolute top-0.5 h-4 w-4 rounded-full bg-background shadow","transition-all duration-200",w?"start-[18px]":"start-0.5")})})]})]})]})]})]}),!g&&!b&&o&&e.jsxs("div",{className:"shrink-0 border-t border-border ps-6 pe-6 py-4 flex items-center justify-end gap-3",children:[e.jsx(v,{variant:"ghost",onClick:n,children:s("Workforce.agentEditor.cancel","Cancel")}),e.jsxs(v,{variant:"primary",onClick:()=>void le(),disabled:!P||U,children:[U&&e.jsx(xe,{className:"h-4 w-4 animate-spin"}),s("Workforce.agentEditor.save","Save Changes")]})]})]})]}):null}export{Fe as A}; +import{u as _,aq as te,a_ as ce,eE as oe,aO as B,p as D,c as de,r as a,aY as ue,_ as se,j as e,S as l,k as v,a9 as re,a1 as fe,i,ah as me,P as ge,D as xe,g as he,c0 as pe}from"./index-BnLj1hck.js";import{a as be}from"./workflows-DTtF3KEG.js";import{g as ye,b as we}from"./resources-D97MNqv3.js";import{a as ve}from"./cascade-save-BHTTkwOb.js";import{A as ke}from"./advisor-avatar-DRMAoqFt.js";import{B as je}from"./badge-C2HqoOk5.js";const ae=ye("llm"),Ne="ai.labs.llm";async function Ee(t,n){var m,k,g,b,f;const c=(m=(await B(t,n)).workflows)==null?void 0:m[0];if(!c)return null;const{id:o,version:u}=D(c),x=(await be(o,u)).workflowSteps.find(L=>L.type===Ne);if(!x)return null;const h=(k=x.config)==null?void 0:k.uri;if(typeof h!="string")return null;const{id:W,version:A}=D(h),M=await we(ae,W,A);return{systemMessage:((f=(b=(g=M.tasks)==null?void 0:g[0])==null?void 0:b.parameters)==null?void 0:f.systemMessage)??"",llmConfig:M,llmId:W,llmVersion:A,workflowId:o,workflowVersion:u,agentVersion:n}}function Ce(t,n){return _({queryKey:["agent-prompt",t,n],queryFn:()=>Ee(t,n),enabled:!!t&&n>0,staleTime:3e4})}function Se(){const t=te();return ce({mutationFn:async({agentId:n,promptData:s,newSystemMessage:c})=>{const o=[...s.llmConfig.tasks??[]],u=o[0];u&&(o[0]={...u,parameters:{...u.parameters,systemMessage:c}});const S={...s.llmConfig,tasks:o},x={workflowId:s.workflowId,workflowVersion:s.workflowVersion,agentId:n,agentVersion:s.agentVersion};return ve(ae,s.llmId,s.llmVersion,S,x)},onSuccess:(n,s)=>{t.invalidateQueries({queryKey:["agent-prompt",s.agentId]});for(const c of oe(s.agentId))t.invalidateQueries({queryKey:c})}})}function We(t){switch(t){case"high":return"success";case"low":return"warning";default:return"secondary"}}function Fe({agentId:t,onClose:n}){const{t:s}=de(),c=te(),{data:o,isLoading:u,isError:S,refetch:x}=_({queryKey:["agent",t],queryFn:()=>B(t),enabled:!!t}),{data:h,isLoading:W,isError:A,refetch:M}=_({queryKey:pe.descriptor(t),queryFn:()=>he(1,0,t),enabled:!!t}),p=h==null?void 0:h[0],m=p?D(p.resource).version:1,k=(p==null?void 0:p.name)??t??"",g=u||W,b=S||A,[f,L]=a.useState(""),[j,q]=a.useState([]),[y,Q]=a.useState(!1),[w,O]=a.useState(!1),[U,H]=a.useState(!1),[N,Y]=a.useState(""),[F,R]=a.useState(!1),[$,z]=a.useState(!1),[E,J]=a.useState(""),[K,X]=a.useState("medium");a.useEffect(()=>{o&&(L(o.description??""),q(o.capabilities??[]),Q(o.a2aEnabled??!1),O(o.enableMemoryTools??!1))},[o]);const{data:d,isLoading:ne}=Ce(t,m),G=Se();a.useEffect(()=>{d&&!F&&(Y(d.systemMessage),R(!0))},[d,F]),a.useEffect(()=>{R(!1)},[t]);const P=o?!!(f!==(o.description??"")||y!==(o.a2aEnabled??!1)||w!==(o.enableMemoryTools??!1)||JSON.stringify(j)!==JSON.stringify(o.capabilities??[])||F&&d&&N!==d.systemMessage):!1,Z=a.useRef(null);a.useEffect(()=>{const r=Z.current;r&&(r.style.height="auto",r.style.height=`${r.scrollHeight}px`)},[f]);const V=a.useCallback(r=>{if(r.key==="Escape"){if(P&&!window.confirm(s("Workforce.agentEditor.discardChanges","You have unsaved changes. Discard?")))return;n()}},[n,P,s]);a.useEffect(()=>{if(t)return document.addEventListener("keydown",V),()=>document.removeEventListener("keydown",V)},[t,V]);const I=a.useCallback(()=>{E.trim()&&(q(r=>[...r,{skill:E.trim(),confidence:K}]),J(""),X("medium"),z(!1))},[E,K]),ie=a.useCallback(r=>{q(C=>C.filter((ee,T)=>T!==r))},[]),le=a.useCallback(async()=>{if(!(!t||!o)){H(!0);try{let r=m;if(d&&N!==d.systemMessage){const T=await G.mutateAsync({agentId:t,promptData:d,newSystemMessage:N});T.newAgentVersion&&(r=T.newAgentVersion)}const ee={...r!==m?await B(t,r):o,description:f,capabilities:j,a2aEnabled:y,enableMemoryTools:w};await ue(t,r,ee),se.success(s("Workforce.agentEditor.saveSuccess","Agent updated successfully"))}catch{se.error(s("Workforce.agentEditor.saveError","Failed to save changes"))}finally{H(!1);for(const r of oe(t))await c.invalidateQueries({queryKey:r});R(!1)}}},[t,o,f,j,y,w,m,c,s,N,d,G]);return t?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"fixed inset-0 bg-black/50 z-40 transition-opacity duration-300",onClick:()=>{P&&!window.confirm(s("Workforce.agentEditor.discardChanges","You have unsaved changes. Discard?"))||n()},"aria-hidden":"true"}),e.jsxs("div",{className:i("fixed top-0 end-0 bottom-0 w-[480px] max-w-full","bg-background border-s border-border z-50","flex flex-col","transition-transform duration-300","shadow-2xl"),role:"dialog","aria-modal":!0,"aria-label":s("Workforce.agentEditor.title","Edit Agent"),children:[e.jsxs("div",{className:"flex items-center gap-3 ps-6 pe-4 py-4 border-b border-border shrink-0",children:[g?e.jsxs("div",{className:"flex items-center gap-3 flex-1",children:[e.jsx(l,{className:"h-12 w-12 rounded-full"}),e.jsx(l,{className:"h-5 w-32"})]}):e.jsxs("div",{className:"flex items-center gap-3 flex-1 min-w-0",children:[e.jsx(ke,{name:k,agentId:t,size:"lg"}),e.jsx("h2",{className:"text-lg font-semibold text-foreground truncate",children:k})]}),e.jsx(v,{variant:"ghost",size:"icon",onClick:n,className:"shrink-0","aria-label":s("Workforce.agentEditor.close","Close"),children:e.jsx(re,{})})]}),e.jsxs("div",{className:"flex-1 overflow-y-auto",children:[g&&e.jsxs("div",{className:"p-6 space-y-6",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(l,{className:"h-4 w-24"}),e.jsx(l,{className:"h-20 w-full"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(l,{className:"h-4 w-28"}),e.jsx(l,{className:"h-8 w-full"}),e.jsx(l,{className:"h-8 w-3/4"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(l,{className:"h-4 w-20"}),e.jsx(l,{className:"h-8 w-full"})]})]}),b&&e.jsxs("div",{className:"p-8 text-center space-y-4",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:s("Workforce.agentEditor.loadError","Failed to load agent data.")}),e.jsxs(v,{variant:"outline",size:"sm",onClick:()=>{x(),M()},children:[e.jsx(fe,{className:"h-4 w-4"}),s("Workforce.agentEditor.retry","Retry")]})]}),!g&&!b&&o&&e.jsxs("div",{className:"p-6 space-y-6",children:[e.jsxs("section",{children:[e.jsx("label",{htmlFor:"agent-description",className:"block text-sm font-medium text-foreground mb-1.5",children:s("Workforce.agentEditor.description","Description")}),e.jsx("textarea",{ref:Z,id:"agent-description",className:i("w-full rounded-lg border border-border bg-card px-3 py-2","text-sm text-foreground placeholder:text-muted-foreground","resize-none overflow-hidden","focus:outline-none focus:ring-2 focus:ring-ring","transition-colors"),rows:3,placeholder:s("Workforce.agentEditor.descriptionPlaceholder","Describe this agent's expertise..."),value:f,onChange:r=>L(r.target.value)})]}),e.jsxs("section",{children:[e.jsxs("label",{htmlFor:"agent-system-prompt",className:"flex items-center gap-1.5 text-sm font-medium text-foreground mb-1.5",children:[e.jsx(me,{className:"h-3.5 w-3.5 text-primary","aria-hidden":"true"}),s("Workforce.agentEditor.systemPrompt","System Prompt")]}),ne?e.jsxs("div",{className:"space-y-2",children:[e.jsx(l,{className:"h-4 w-3/4"}),e.jsx(l,{className:"h-24 w-full"})]}):e.jsx("textarea",{id:"agent-system-prompt",className:i("w-full rounded-lg border border-border bg-card px-3 py-2","text-sm text-foreground placeholder:text-muted-foreground","resize-y min-h-[120px]","focus:outline-none focus:ring-2 focus:ring-ring","transition-colors text-sm leading-relaxed"),rows:6,placeholder:s("Workforce.agentEditor.systemPromptPlaceholder","Instructions that define this agent's behavior, personality, and expertise..."),value:N,onChange:r=>Y(r.target.value)})]}),e.jsxs("section",{children:[e.jsx("h3",{className:"text-sm font-medium text-foreground mb-2",children:s("Workforce.agentEditor.capabilities","Capabilities")}),j.length===0&&!$&&e.jsx("p",{className:"text-sm text-muted-foreground mb-2",children:s("Workforce.agentEditor.noCapabilities","No capabilities defined.")}),e.jsx("div",{className:"flex flex-wrap gap-2 mb-3",children:j.map((r,C)=>e.jsxs("div",{className:i("flex items-center gap-1.5 rounded-full border border-border","bg-card ps-3 pe-1.5 py-1 text-sm"),children:[e.jsx("span",{className:"text-foreground",children:r.skill}),r.confidence&&e.jsx(je,{variant:We(r.confidence),className:"text-[10px] px-1.5 py-0",children:r.confidence}),e.jsx("button",{type:"button",className:i("h-5 w-5 rounded-full flex items-center justify-center","text-muted-foreground hover:text-foreground hover:bg-muted","transition-colors","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 bg-card"),onClick:()=>ie(C),"aria-label":s("Workforce.agentEditor.removeCapability","Remove capability"),children:e.jsx(re,{className:"h-3 w-3"})})]},`${r.skill}-${C}`))}),$?e.jsxs("div",{className:"flex items-end gap-2 p-3 rounded-lg border border-border bg-card",children:[e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("label",{htmlFor:"new-skill",className:"block text-xs font-medium text-muted-foreground mb-1",children:s("Workforce.agentEditor.skill","Skill")}),e.jsx("input",{id:"new-skill",type:"text",className:i("w-full rounded-md border border-border bg-background px-2.5 py-1.5","text-sm text-foreground placeholder:text-muted-foreground","focus:outline-none focus:ring-2 focus:ring-ring"),placeholder:s("Workforce.agentEditor.skillPlaceholder","e.g. summarization"),value:E,onChange:r=>J(r.target.value),onKeyDown:r=>{r.key==="Enter"&&I(),r.key==="Escape"&&z(!1)},autoFocus:!0})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"new-confidence",className:"block text-xs font-medium text-muted-foreground mb-1",children:s("Workforce.agentEditor.confidence","Confidence")}),e.jsxs("select",{id:"new-confidence",className:i("rounded-md border border-border bg-background px-2.5 py-1.5","text-sm text-foreground","focus:outline-none focus:ring-2 focus:ring-ring"),value:K,onChange:r=>X(r.target.value),children:[e.jsx("option",{value:"low",children:s("Workforce.agentEditor.confidenceLow","Low")}),e.jsx("option",{value:"medium",children:s("Workforce.agentEditor.confidenceMedium","Medium")}),e.jsx("option",{value:"high",children:s("Workforce.agentEditor.confidenceHigh","High")})]})]}),e.jsx(v,{variant:"primary",size:"sm",onClick:I,disabled:!E.trim(),children:s("Workforce.agentEditor.add","Add")})]}):e.jsxs(v,{variant:"outline",size:"sm",onClick:()=>z(!0),children:[e.jsx(ge,{className:"h-4 w-4"}),s("Workforce.agentEditor.addCapability","Add Capability")]})]}),e.jsxs("section",{children:[e.jsx("h3",{className:"text-sm font-medium text-foreground mb-3",children:s("Workforce.agentEditor.settings","Settings")}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("button",{type:"button",className:i("w-full flex items-center justify-between","rounded-lg border border-border bg-card px-4 py-3","hover:bg-muted/50 transition-colors text-start","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1"),onClick:()=>Q(r=>!r),role:"switch","aria-checked":y,"aria-label":s("Workforce.agentEditor.a2aEnabled","Agent-to-Agent Communication"),children:[e.jsx("span",{className:"text-sm text-foreground",children:s("Workforce.agentEditor.a2aEnabled","Agent-to-Agent Communication")}),e.jsx("div",{className:i("relative h-5 w-9 rounded-full transition-colors",y?"bg-primary":"bg-muted"),children:e.jsx("div",{className:i("absolute top-0.5 h-4 w-4 rounded-full bg-background shadow","transition-all duration-200",y?"start-[18px]":"start-0.5")})})]}),e.jsxs("button",{type:"button",className:i("w-full flex items-center justify-between","rounded-lg border border-border bg-card px-4 py-3","hover:bg-muted/50 transition-colors text-start","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1"),onClick:()=>O(r=>!r),role:"switch","aria-checked":w,"aria-label":s("Workforce.agentEditor.memoryTools","Memory Tools"),children:[e.jsx("span",{className:"text-sm text-foreground",children:s("Workforce.agentEditor.memoryTools","Memory Tools")}),e.jsx("div",{className:i("relative h-5 w-9 rounded-full transition-colors",w?"bg-primary":"bg-muted"),children:e.jsx("div",{className:i("absolute top-0.5 h-4 w-4 rounded-full bg-background shadow","transition-all duration-200",w?"start-[18px]":"start-0.5")})})]})]})]})]})]}),!g&&!b&&o&&e.jsxs("div",{className:"shrink-0 border-t border-border ps-6 pe-6 py-4 flex items-center justify-end gap-3",children:[e.jsx(v,{variant:"ghost",onClick:n,children:s("Workforce.agentEditor.cancel","Cancel")}),e.jsxs(v,{variant:"primary",onClick:()=>void le(),disabled:!P||U,children:[U&&e.jsx(xe,{className:"h-4 w-4 animate-spin"}),s("Workforce.agentEditor.save","Save Changes")]})]})]})]}):null}export{Fe as A}; diff --git a/src/main/resources/META-INF/resources/assets/agent-picker-BKXXvXR0.js b/src/main/resources/META-INF/resources/assets/agent-picker-BKXXvXR0.js deleted file mode 100644 index 800feb277a..0000000000 --- a/src/main/resources/META-INF/resources/assets/agent-picker-BKXXvXR0.js +++ /dev/null @@ -1 +0,0 @@ -import{c as I,r as s,ar as P,b as F,e as B,j as e,D,B as v,a9 as K,a7 as z}from"./index-BY6d8wze.js";import{u as M}from"./use-debounce-BXAMTtyO.js";function H({value:u,onChange:c,placeholder:A,readOnly:d}){var k;const{t:m}=I(),[n,h]=s.useState(!1),[l,b]=s.useState(""),C=M(l,300),[o,x]=s.useState(-1),p=s.useRef(null),E=s.useRef(null),j=s.useRef(null),{data:y,isLoading:R}=P(u),f=(k=y==null?void 0:y[0])==null?void 0:k.name,{data:N,isLoading:L}=F(50,0,C),i=s.useMemo(()=>N?B(N):[],[N]),g=s.useCallback(()=>{d||(b(""),x(-1),h(!0))},[d]),a=s.useCallback(()=>{h(!1),b(""),x(-1)},[]),w=s.useCallback(t=>{c(t),a()},[c,a]),S=s.useCallback(()=>{d||c("")},[d,c]),$=s.useCallback(t=>{if(!n){t.key==="ArrowDown"&&(t.preventDefault(),g());return}t.key==="Escape"?(t.preventDefault(),a()):t.key==="ArrowDown"?(t.preventDefault(),x(r=>rr>0?r-1:i.length-1)):t.key==="Enter"&&(t.preventDefault(),o>=0&&o{if(!n)return;const t=r=>{p.current&&!p.current.contains(r.target)&&a()};return document.addEventListener("mousedown",t),()=>document.removeEventListener("mousedown",t)},[n,a]),s.useEffect(()=>{var r;if(o<0||!j.current)return;(r=j.current.querySelectorAll("[data-agent-item]")[o])==null||r.scrollIntoView({block:"nearest"})},[o]),u?e.jsx("div",{ref:p,className:"relative flex-1",children:e.jsxs("div",{className:`flex h-9 items-center gap-2 rounded-md border px-3 ${d?"border-primary/20 bg-primary/5":"border-primary/40 bg-primary/10"}`,title:f?`${u} — ${f}`:u,children:[R?e.jsx(D,{className:"h-4 w-4 shrink-0 animate-spin text-primary"}):e.jsx(v,{className:"h-4 w-4 shrink-0 text-primary"}),e.jsxs("div",{className:"flex flex-1 flex-col justify-center min-w-0",children:[f&&e.jsx("span",{className:"truncate text-xs font-semibold text-foreground leading-tight pt-0.5",children:f}),e.jsx("span",{className:`truncate font-mono font-medium ${f?"text-[10px] text-muted-foreground leading-tight":"text-xs text-foreground"} pb-0.5`,children:u})]}),!d&&e.jsx("button",{type:"button",onClick:S,className:"rounded p-0.5 text-muted-foreground opacity-70 transition-colors hover:bg-background/50 hover:text-foreground hover:opacity-100","aria-label":m("common.clear","Clear selection"),children:e.jsx(K,{className:"h-3.5 w-3.5"})})]})}):e.jsxs("div",{ref:p,className:"relative flex-1",children:[e.jsxs("div",{className:"flex w-full items-stretch h-9",children:[e.jsx("input",{ref:E,type:"text",value:l,onChange:t=>{b(t.target.value),x(-1),n||h(!0)},onFocus:g,onKeyDown:$,placeholder:A||m("agents.selectAgent","Select Agent"),className:"h-full flex-1 rounded-s-md border border-e-0 border-input bg-background ps-3 pe-2 text-xs text-foreground font-mono placeholder:font-sans focus:outline-none focus:ring-1 focus:ring-ring",autoComplete:"off"}),e.jsxs("button",{type:"button",onClick:()=>n?a():g(),className:`flex h-full items-center justify-center border border-s-0 border-input px-2 text-xs transition-colors ${n?"rounded-e-md bg-primary/10 text-primary":"rounded-e-md bg-muted text-muted-foreground hover:bg-muted/80 hover:text-foreground"}`,tabIndex:-1,children:[e.jsx(v,{className:"h-3.5 w-3.5 me-1"}),e.jsx(z,{className:`h-3 w-3 transition-transform ${n?"rotate-180":""}`})]})]}),n&&e.jsx("div",{className:"absolute inset-x-0 top-full z-50 mt-1 overflow-hidden rounded-lg border border-border bg-popover shadow-xl animate-in fade-in-0 zoom-in-95 slide-in-from-top-2 duration-150",children:e.jsx("div",{ref:j,className:"max-h-56 overflow-y-auto py-1",children:L?e.jsxs("div",{className:"flex items-center justify-center gap-2 py-4 text-xs text-muted-foreground",children:[e.jsx(D,{className:"h-3.5 w-3.5 animate-spin"}),m("common.loading","Loading...")]}):i.length===0?e.jsx("div",{className:"px-3 py-3 text-center text-xs text-muted-foreground",children:l.trim()?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"block",children:m("common.noResults","No results found.")}),e.jsxs("span",{className:"mt-1 block text-[10px]",children:['Press Enter to use "',l,'" as ID.']})]}):m("agents.empty","No agents found")}):i.map((t,r)=>e.jsxs("button",{type:"button","data-agent-item":!0,onClick:()=>w(t.id),className:`flex w-full items-start gap-2 px-3 py-2 text-start text-xs transition-colors ${r===o?"bg-primary/10 text-foreground":"text-foreground hover:bg-secondary/50"}`,children:[e.jsx(v,{className:"mt-0.5 h-3.5 w-3.5 shrink-0 text-primary"}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block truncate font-medium",children:t.name}),e.jsx("span",{className:"block truncate font-mono text-[10px] text-muted-foreground mt-0.5",children:t.id})]})]},t.id))})})]})}export{H as A}; diff --git a/src/main/resources/META-INF/resources/assets/agent-picker-BMeo54U5.js b/src/main/resources/META-INF/resources/assets/agent-picker-BMeo54U5.js new file mode 100644 index 0000000000..52c0ffcefa --- /dev/null +++ b/src/main/resources/META-INF/resources/assets/agent-picker-BMeo54U5.js @@ -0,0 +1 @@ +import{c as K,r as s,ar as z,b as B,e as M,j as e,D as E,B as w,a9 as V,a7 as q}from"./index-BnLj1hck.js";import{u as H}from"./use-debounce-DMHuVYwD.js";function X({value:u,onChange:c,placeholder:R,readOnly:d,id:k,"aria-invalid":D,"aria-describedby":A}){var C;const{t:m}=K(),[n,h]=s.useState(!1),[i,b]=s.useState(""),L=H(i,300),[o,x]=s.useState(-1),p=s.useRef(null),S=s.useRef(null),j=s.useRef(null),{data:y,isLoading:$}=z(u),f=(C=y==null?void 0:y[0])==null?void 0:C.name,{data:N,isLoading:I}=B(50,0,L),l=s.useMemo(()=>N?M(N):[],[N]),g=s.useCallback(()=>{d||(b(""),x(-1),h(!0))},[d]),a=s.useCallback(()=>{h(!1),b(""),x(-1)},[]),v=s.useCallback(t=>{c(t),a()},[c,a]),P=s.useCallback(()=>{d||c("")},[d,c]),F=s.useCallback(t=>{if(!n){t.key==="ArrowDown"&&(t.preventDefault(),g());return}t.key==="Escape"?(t.preventDefault(),a()):t.key==="ArrowDown"?(t.preventDefault(),x(r=>rr>0?r-1:l.length-1)):t.key==="Enter"&&(t.preventDefault(),o>=0&&o{if(!n)return;const t=r=>{p.current&&!p.current.contains(r.target)&&a()};return document.addEventListener("mousedown",t),()=>document.removeEventListener("mousedown",t)},[n,a]),s.useEffect(()=>{var r;if(o<0||!j.current)return;(r=j.current.querySelectorAll("[data-agent-item]")[o])==null||r.scrollIntoView({block:"nearest"})},[o]),u?e.jsx("div",{ref:p,className:"relative flex-1",children:e.jsxs("div",{id:k,role:"group","aria-invalid":D,"aria-describedby":A,className:`flex h-9 items-center gap-2 rounded-md border px-3 ${d?"border-primary/20 bg-primary/5":"border-primary/40 bg-primary/10"}`,title:f?`${u} — ${f}`:u,children:[$?e.jsx(E,{className:"h-4 w-4 shrink-0 animate-spin text-primary"}):e.jsx(w,{className:"h-4 w-4 shrink-0 text-primary"}),e.jsxs("div",{className:"flex flex-1 flex-col justify-center min-w-0",children:[f&&e.jsx("span",{className:"truncate text-xs font-semibold text-foreground leading-tight pt-0.5",children:f}),e.jsx("span",{className:`truncate font-mono font-medium ${f?"text-[10px] text-muted-foreground leading-tight":"text-xs text-foreground"} pb-0.5`,children:u})]}),!d&&e.jsx("button",{type:"button",onClick:P,className:"rounded p-0.5 text-muted-foreground opacity-70 transition-colors hover:bg-background/50 hover:text-foreground hover:opacity-100","aria-label":m("common.clear","Clear selection"),children:e.jsx(V,{className:"h-3.5 w-3.5"})})]})}):e.jsxs("div",{ref:p,className:"relative flex-1",children:[e.jsxs("div",{className:"flex w-full items-stretch h-9",children:[e.jsx("input",{ref:S,id:k,"aria-invalid":D,"aria-describedby":A,type:"text",value:i,onChange:t=>{b(t.target.value),x(-1),n||h(!0)},onFocus:g,onKeyDown:F,placeholder:R||m("agents.selectAgent","Select Agent"),className:"h-full flex-1 rounded-s-md border border-e-0 border-input bg-background ps-3 pe-2 text-xs text-foreground font-mono placeholder:font-sans focus:outline-none focus:ring-1 focus:ring-ring",autoComplete:"off"}),e.jsxs("button",{type:"button",onClick:()=>n?a():g(),className:`flex h-full items-center justify-center border border-s-0 border-input px-2 text-xs transition-colors ${n?"rounded-e-md bg-primary/10 text-primary":"rounded-e-md bg-muted text-muted-foreground hover:bg-muted/80 hover:text-foreground"}`,tabIndex:-1,children:[e.jsx(w,{className:"h-3.5 w-3.5 me-1"}),e.jsx(q,{className:`h-3 w-3 transition-transform ${n?"rotate-180":""}`})]})]}),n&&e.jsx("div",{className:"absolute inset-x-0 top-full z-50 mt-1 overflow-hidden rounded-lg border border-border bg-popover shadow-xl animate-in fade-in-0 zoom-in-95 slide-in-from-top-2 duration-150",children:e.jsx("div",{ref:j,className:"max-h-56 overflow-y-auto py-1",children:I?e.jsxs("div",{className:"flex items-center justify-center gap-2 py-4 text-xs text-muted-foreground",children:[e.jsx(E,{className:"h-3.5 w-3.5 animate-spin"}),m("common.loading","Loading...")]}):l.length===0?e.jsx("div",{className:"px-3 py-3 text-center text-xs text-muted-foreground",children:i.trim()?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"block",children:m("common.noResults","No results found.")}),e.jsxs("span",{className:"mt-1 block text-[10px]",children:['Press Enter to use "',i,'" as ID.']})]}):m("agents.empty","No agents found")}):l.map((t,r)=>e.jsxs("button",{type:"button","data-agent-item":!0,onClick:()=>v(t.id),className:`flex w-full items-start gap-2 px-3 py-2 text-start text-xs transition-colors ${r===o?"bg-primary/10 text-foreground":"text-foreground hover:bg-secondary/50"}`,children:[e.jsx(w,{className:"mt-0.5 h-3.5 w-3.5 shrink-0 text-primary"}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block truncate font-medium",children:t.name}),e.jsx("span",{className:"block truncate font-mono text-[10px] text-muted-foreground mt-0.5",children:t.id})]})]},t.id))})})]})}export{X as A}; diff --git a/src/main/resources/META-INF/resources/assets/agent-studio-BSaldxbu.js b/src/main/resources/META-INF/resources/assets/agent-studio-BSaldxbu.js deleted file mode 100644 index 7a02c79722..0000000000 --- a/src/main/resources/META-INF/resources/assets/agent-studio-BSaldxbu.js +++ /dev/null @@ -1,6 +0,0 @@ -import{x as Q,c as O,aI as X,r as i,j as e,aJ as z,aK as Y,i as E,aL as q,a8 as Z,W as ee,p as P,_ as $,R as te,T as se,S as W,aM as G,ap as re,u as F,D as oe,h as ne,a3 as ie,B as ae,aN as le,l as ce,g as de,aO as ue}from"./index-BY6d8wze.js";import{a as me}from"./workflows-CAxBNXSH.js";import{g as xe}from"./resources-R5ikMSzo.js";import{u as fe,a as pe,b as he}from"./use-resources-BocDaki1.js";import{E as ge,u as je,C as ve,a as we}from"./editor-registry-CIV_g9hj.js";import{E as H}from"./error-state-BXe3bnJT.js";import{C as J}from"./chat-panel-IQLg7XQu.js";import{P as Ne}from"./panel-right-close-BCp5JpCq.js";import"./cascade-save-CAECbCBm.js";import"./parser-editor-DJVsdXlv.js";import"./type-SbeC_oGu.js";import"./git-compare-arrows-pI8Ehpf-.js";import"./undo-2-CF9h_dkU.js";import"./save-lzTRlOlB.js";import"./eye-Dbrf-yrM.js";import"./secret-key-picker-TXey-VQE.js";import"./use-secrets-C_oj4VYh.js";import"./eye-off-DQKzJHI5.js";import"./tool-approvals-editor-BKW-ZLXY.js";import"./timer-BX3xgSur.js";import"./arrow-right-left-Or_4oRf0.js";import"./file-output-BA4KZHPi.js";import"./shield-Ce05kery.js";import"./info-vszmN4vn.js";import"./types-BY9zm5d-.js";import"./scale-DJXpJ1ID.js";import"./gauge-D0qrGV1d.js";import"./dollar-sign-Dt9VyGPU.js";import"./handshake-d__LQWU9.js";import"./cpu-BsIZspVa.js";import"./server-CeKDVLCh.js";import"./upload-DxPMOlxt.js";import"./lock-CPVVTGkJ.js";import"./tag-DrXWC0RK.js";import"./history-BHMI8MMQ.js";import"./hash-D4WlnmN6.js";import"./lock-open-1V8q1imA.js";/** - * @license lucide-react v0.577.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const ye=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M15 3v18",key:"14nvp0"}]],be=Q("panel-right",ye);function K({workflowSteps:t,selectedIndex:n,onSelectStage:u}){const{t:y}=O(),p=X(s=>s.currentTurnEvents),c=i.useMemo(()=>{const s=new Map,a=new Map;for(const r of p)r.type==="task_start"?(s.set(r.index,"running"),a.set(r.taskId,r.index)):r.type==="task_complete"?s.set(r.index,"complete"):r.type==="task_failed"&&s.set(a.get(r.taskId)??r.index,"error");return s},[p]);return e.jsxs("div",{className:"flex flex-col gap-0 py-4 px-3","data-testid":"pipeline-railroad",children:[t.map((s,a)=>{var j,m;const r=z(s.type),h=s.type.replace("eddi://ai.labs.",""),b=y(`studio.type.${h}`,h.charAt(0).toUpperCase()+h.slice(1)),l=Y(s.type),d=c.get(a)??"idle",g=n===a,C=a===t.length-1,k=((m=(((j=s.config)==null?void 0:j.uri)??"").split("/").pop())==null?void 0:m.split("?")[0])??"";return e.jsxs("div",{children:[e.jsxs("button",{onClick:()=>u(a),"aria-current":g?"true":void 0,className:E("group flex w-full items-center gap-2.5 rounded-lg px-3 py-2.5 text-start transition-all",g?"bg-primary/10 border border-primary/30":"hover:bg-muted/50 border border-transparent"),"data-testid":`stage-${a}`,children:[e.jsxs("div",{className:"relative shrink-0",children:[e.jsx("div",{className:E("flex h-9 w-9 items-center justify-center rounded-lg transition-colors",d==="running"&&"bg-amber-500/10 animate-pulse",d==="complete"&&"bg-emerald-500/10",d==="idle"&&"bg-muted/50",g&&"bg-primary/15"),children:e.jsx(r,{className:E("h-4 w-4",l)})}),d==="running"&&e.jsx(q,{className:"absolute -inset-e-0.5 -top-0.5 h-2.5 w-2.5 fill-amber-500 text-amber-500 animate-pulse"}),d==="complete"&&e.jsx(q,{className:"absolute -inset-e-0.5 -top-0.5 h-2.5 w-2.5 fill-emerald-500 text-emerald-500"})]}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"text-sm font-medium text-foreground truncate",children:b}),k&&e.jsx("p",{className:"text-[10px] text-muted-foreground truncate font-mono",children:k})]}),e.jsx(Z,{className:E("h-4 w-4 shrink-0 transition-colors",g?"text-primary":"text-muted-foreground/30 group-hover:text-muted-foreground")})]}),!C&&e.jsx("div",{className:"flex justify-center py-0.5",children:e.jsx("div",{className:E("w-0.5 h-4 rounded-full transition-colors",c.has(a)?"bg-emerald-500/40":"bg-border")})})]},a)}),t.length===0&&e.jsxs("div",{className:"text-center py-8",children:[e.jsx(ee,{className:"mx-auto h-8 w-8 text-muted-foreground/30"}),e.jsx("p",{className:"mt-2 text-sm text-muted-foreground",children:y("studio.noPipeline","No pipeline stages")})]})]})}function D({workflowStep:t,agentId:n,agentVersion:u,workflowId:y,workflowVersion:p}){var R;const{t:c}=O(),s=ge[t.type]??"",a=xe(s),r=((R=t.config)==null?void 0:R.uri)??"",{resourceId:h,resourceVersion:b}=i.useMemo(()=>{if(!r)return{resourceId:"",resourceVersion:1};try{const x=P(r);return{resourceId:x.id,resourceVersion:x.version}}catch{return{resourceId:"",resourceVersion:1}}},[r]),[l,d]=i.useState(b);i.useEffect(()=>{d(b)},[b]);const{data:g,isLoading:C,isError:L,refetch:k}=fe(s,h,l),{data:j}=pe(s,h),{data:m}=je(s||void 0),v=he(s),[w,A]=i.useState(!1);i.useEffect(()=>{if(w){const x=setTimeout(()=>A(!1),3e3);return()=>clearTimeout(x)}},[w]);const B=j?j.map(x=>{var f;const o=(f=x.resource)==null?void 0:f.match(/\?version=(\d+)/);return{version:o?parseInt(o[1]??"1",10):1,lastModifiedOn:x.lastModifiedOn}}):[{version:l}],[S,I]=i.useState(p),[T,V]=i.useState(u);i.useEffect(()=>{I(p),V(u)},[p,u]);const _=i.useMemo(()=>({workflowId:y,workflowVersion:S,agentId:n,agentVersion:T}),[y,S,n,T]),N=i.useCallback(x=>{try{const o=JSON.parse(x);v.mutate({id:h,version:l,body:o,context:_},{onSuccess:f=>{$.success(c("editor.saved","Saved successfully")),A(!0),d(f.newResourceVersion),f.newWorkflowVersion&&I(f.newWorkflowVersion),f.newAgentVersion&&V(f.newAgentVersion)},onError:f=>{$.error(te(f))}})}catch{$.error(c("editor.invalidJson","Invalid JSON"))}},[h,l,v,_,c]);if(!r||!a)return e.jsxs("div",{className:"flex flex-1 flex-col items-center justify-center p-6 text-center",children:[e.jsx(se,{className:"h-10 w-10 text-muted-foreground/30 mb-3"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:r?c("studio.unsupportedType","Editor not available for this extension type"):c("studio.noConfig","This pipeline stage has no configuration URI")}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground/60 font-mono",children:t.type})]});if(C)return e.jsxs("div",{className:"flex-1 p-6 space-y-4",children:[e.jsxs("div",{className:"flex gap-3",children:[e.jsx(W,{className:"h-8 w-24"}),e.jsx(W,{className:"h-8 w-24"})]}),e.jsx(W,{className:"h-[400px] w-full rounded-xl"})]});if(L)return e.jsx("div",{className:"flex-1 p-6",children:e.jsx(H,{message:c("common.error","An error occurred"),onRetry:()=>k(),retryLabel:c("common.retry","Retry")})});const M=c(`${a.labelKey}.name`,s);return e.jsx("div",{className:"flex-1 overflow-y-auto p-4","data-testid":"studio-editor-panel",children:e.jsx(ve,{typeName:M,resourceId:h,data:JSON.stringify(g,null,2),versions:B,currentVersion:l,onVersionChange:d,onSave:N,isSaving:v.isPending,saveSuccess:w,saveError:v.isError?c("editor.saveError","Failed to save"):void 0,renderFormEditor:we[s],jsonSchema:m})})}function U(){const{t}=O();return e.jsxs("div",{className:"flex flex-1 flex-col items-center justify-center p-6 text-center",children:[e.jsx(G,{className:"h-16 w-16 text-muted-foreground/15 mb-4"}),e.jsx("p",{className:"text-sm font-medium text-foreground",children:t("studio.selectStage","Click a pipeline stage to open its editor")}),e.jsx("p",{className:"mt-1.5 text-xs text-muted-foreground max-w-xs",children:t("studio.selectStageHint","Select any extension in the pipeline to view and edit its configuration inline")})]})}function at(){var M,R,x;const{t}=O(),{agentId:n}=re(),[u,y]=i.useState(null),[p,c]=i.useState(!0),[s,a]=i.useState("pipeline"),{data:r,isError:h,refetch:b}=F({queryKey:["studio","descriptors",n],queryFn:()=>de(10,0,n??""),enabled:!!n,staleTime:6e4}),l=i.useMemo(()=>!r||!n?null:r.find(o=>{const{id:f}=P(o.resource);return f===n})??null,[r,n]),d=i.useMemo(()=>l?P(l.resource).version:1,[l]),{data:g,isLoading:C,isError:L,refetch:k}=F({queryKey:["studio","agent",n,d],queryFn:()=>ue(n,d),enabled:!!n&&!!l,staleTime:3e4}),j=(M=g==null?void 0:g.workflows)==null?void 0:M[0],{workflowId:m,workflowVersion:v}=i.useMemo(()=>{if(!j)return{workflowId:null,workflowVersion:1};const o=P(j);return{workflowId:o.id,workflowVersion:o.version}},[j]),{data:w,isError:A,refetch:B}=F({queryKey:["studio","workflow",m],queryFn:()=>me(m,v),enabled:!!m,staleTime:3e4}),S=(w==null?void 0:w.workflowSteps)??[],I=i.useCallback(o=>{y(o),a("editor")},[]);if(!n)return e.jsx("div",{className:"flex h-full items-center justify-center",children:e.jsx("p",{className:"text-muted-foreground",children:t("studio.notFound","Agent not found")})});const T=h&&!r,V=L&&!g;if(T||V||A&&!w){const o=T?b:V?k:B;return e.jsx("div",{className:"flex h-full items-center justify-center p-6",children:e.jsx(H,{message:t("common.error","Something went wrong"),onRetry:()=>o(),retryLabel:t("common.retry","Retry")})})}if(C)return e.jsxs("div",{className:"flex h-full items-center justify-center",children:[e.jsx(oe,{className:"h-6 w-6 animate-spin text-muted-foreground"}),e.jsx("p",{className:"ms-2 text-sm text-muted-foreground",children:t("studio.loading","Loading agent...")})]});const N=u!==null?S[u]:null;return e.jsxs("div",{className:"flex h-screen flex-col bg-background","data-testid":"agent-studio",children:[e.jsxs("div",{className:"flex items-center gap-3 border-b border-border px-4 py-2.5 shrink-0",children:[e.jsx(ne,{to:`/manage/agentview/${n}`,className:"flex h-8 w-8 items-center justify-center rounded-lg text-muted-foreground hover:bg-muted hover:text-foreground","data-testid":"studio-back","aria-label":t("studio.backToAgent","Back to agent detail"),children:e.jsx(ie,{className:"h-4 w-4"})}),e.jsxs("div",{className:"flex items-center gap-2 flex-1 min-w-0",children:[e.jsx("div",{className:"flex h-8 w-8 items-center justify-center rounded-lg bg-primary/10 shrink-0",children:e.jsx(ae,{className:"h-4 w-4 text-primary"})}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("h1",{className:"text-sm font-semibold text-foreground truncate",children:(l==null?void 0:l.name)??n}),e.jsx("p",{className:"text-[10px] text-muted-foreground",children:t("studio.title","Agent Studio")})]})]}),e.jsx("button",{onClick:()=>c(!p),className:"flex h-8 w-8 items-center justify-center rounded-lg text-muted-foreground hover:bg-muted hover:text-foreground",title:p?t("studio.hideChat","Hide chat"):t("studio.showChat","Show chat"),"data-testid":"toggle-right-panel",children:p?e.jsx(Ne,{className:"h-4 w-4"}):e.jsx(be,{className:"h-4 w-4"})})]}),e.jsxs("div",{className:"flex flex-1 overflow-hidden",children:[e.jsxs("div",{className:"w-64 shrink-0 border-e border-border overflow-y-auto bg-card/30 hidden lg:block",children:[e.jsx("div",{className:"px-3 pt-3 pb-1",children:e.jsx("h2",{className:"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/60",children:t("studio.pipeline","Pipeline")})}),e.jsx(K,{workflowSteps:S,selectedIndex:u,onSelectStage:I})]}),e.jsxs("div",{className:"flex-1 flex flex-col overflow-hidden",children:[e.jsx("div",{className:"hidden lg:flex lg:flex-1 lg:flex-col lg:overflow-hidden",children:N&&m?e.jsx(D,{workflowStep:N,agentId:n,agentVersion:d,workflowId:m,workflowVersion:v},`${u}-${(R=N.config)==null?void 0:R.uri}`):e.jsx(U,{})}),e.jsxs("div",{className:"flex flex-1 flex-col overflow-hidden lg:hidden",children:[s==="pipeline"&&e.jsxs("div",{className:"flex-1 overflow-y-auto",children:[e.jsx("div",{className:"px-3 pt-3 pb-1",children:e.jsx("h2",{className:"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/60",children:t("studio.pipeline","Pipeline")})}),e.jsx(K,{workflowSteps:S,selectedIndex:u,onSelectStage:I})]}),s==="editor"&&e.jsx("div",{className:"flex-1 overflow-hidden flex flex-col",children:N&&m?e.jsx(D,{workflowStep:N,agentId:n,agentVersion:d,workflowId:m,workflowVersion:v},`mobile-${u}-${(x=N.config)==null?void 0:x.uri}`):e.jsx(U,{})}),s==="chat"&&e.jsx("div",{className:"flex-1 overflow-hidden flex flex-col",children:e.jsx(J,{embedded:!0})})]})]}),p&&e.jsx("div",{className:"w-96 shrink-0 border-s border-border overflow-hidden hidden md:flex md:flex-col min-h-0 min-w-0",children:e.jsx(J,{embedded:!0})})]}),e.jsx("div",{className:"flex border-t border-border lg:hidden",children:[{id:"pipeline",icon:e.jsx(le,{className:"h-4 w-4"}),label:t("studio.pipeline","Pipeline")},{id:"editor",icon:e.jsx(G,{className:"h-4 w-4"}),label:t("studio.editor","Editor")},{id:"chat",icon:e.jsx(ce,{className:"h-4 w-4"}),label:t("studio.chat","Chat")}].map(o=>e.jsxs("button",{onClick:()=>a(o.id),className:E("flex flex-1 flex-col items-center gap-0.5 py-2 text-[10px] font-medium transition-colors",s===o.id?"text-primary border-t-2 border-primary -mt-[2px]":"text-muted-foreground hover:text-foreground"),"data-testid":`mobile-tab-${o.id}`,children:[o.icon,o.label]},o.id))})]})}export{at as AgentStudioPage}; diff --git a/src/main/resources/META-INF/resources/assets/agent-studio-on9tBFvm.js b/src/main/resources/META-INF/resources/assets/agent-studio-on9tBFvm.js new file mode 100644 index 0000000000..eb29ca84d0 --- /dev/null +++ b/src/main/resources/META-INF/resources/assets/agent-studio-on9tBFvm.js @@ -0,0 +1,6 @@ +import{x as Q,c as O,aI as X,r as n,j as e,aJ as z,aK as Y,i as E,aL as q,a8 as Z,W as ee,p as P,_ as $,R as te,T as se,S as W,aM as G,ap as re,u as F,D as oe,h as ie,a3 as ne,B as ae,aN as le,l as ce,g as de,aO as me}from"./index-BnLj1hck.js";import{a as ue}from"./workflows-DTtF3KEG.js";import{g as xe}from"./resources-D97MNqv3.js";import{u as pe,a as fe,b as he}from"./use-resources-xPGGDyiq.js";import{E as ge,u as je,C as ve,a as we}from"./editor-registry-jvsNWt75.js";import{E as H}from"./error-state-D4qtZYFq.js";import{C as J}from"./chat-panel-B1e6hfTn.js";import{P as Ne}from"./panel-right-close-D7tJkwdn.js";import"./cascade-save-BHTTkwOb.js";import"./parser-editor-CPhjadeF.js";import"./useQueries-DZrQsbjS.js";import"./accessible-dialog-C2wu1H5q.js";import"./input-BV8V9kav.js";import"./empty-state-DxZE48rx.js";import"./use-debounce-DMHuVYwD.js";import"./type-ChzGm4vJ.js";import"./git-compare-arrows-HXbtfCTs.js";import"./undo-2-Dh2nRAeV.js";import"./save-s-dFqxLL.js";import"./eye-xZR8Jj8Y.js";import"./secret-key-picker-BCXXdOJ-.js";import"./use-secrets--RofX_r2.js";import"./eye-off-PKiH0Asw.js";import"./tool-approvals-editor-S2UA66Hb.js";import"./timer-CShnmlWE.js";import"./arrow-right-left-J0fZSu2z.js";import"./file-output-DlS0SPnt.js";import"./shield-Dy-B1VeF.js";import"./info-cNcTVsFc.js";import"./types-tS6i07ms.js";import"./scale-BnMnNt4Y.js";import"./gauge-ML2DGGDJ.js";import"./dollar-sign-HonLwnZc.js";import"./handshake-foe5KMFV.js";import"./cpu-zEsE2ia0.js";import"./server-BMZQ8ps7.js";import"./upload-D1UCHnd4.js";import"./lock-CL2SzOGd.js";import"./tag-Cd1R14bi.js";import"./history-d_YShP6D.js";import"./hash-MmAVnsbH.js";import"./lock-open-BkYVbmCd.js";/** + * @license lucide-react v0.577.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ye=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M15 3v18",key:"14nvp0"}]],be=Q("panel-right",ye);function K({workflowSteps:t,selectedIndex:i,onSelectStage:m}){const{t:y}=O(),f=X(s=>s.currentTurnEvents),c=n.useMemo(()=>{const s=new Map,a=new Map;for(const r of f)r.type==="task_start"?(s.set(r.index,"running"),a.set(r.taskId,r.index)):r.type==="task_complete"?s.set(r.index,"complete"):r.type==="task_failed"&&s.set(a.get(r.taskId)??r.index,"error");return s},[f]);return e.jsxs("div",{className:"flex flex-col gap-0 py-4 px-3","data-testid":"pipeline-railroad",children:[t.map((s,a)=>{var j,u;const r=z(s.type),h=s.type.replace("eddi://ai.labs.",""),b=y(`studio.type.${h}`,h.charAt(0).toUpperCase()+h.slice(1)),l=Y(s.type),d=c.get(a)??"idle",g=i===a,C=a===t.length-1,k=((u=(((j=s.config)==null?void 0:j.uri)??"").split("/").pop())==null?void 0:u.split("?")[0])??"";return e.jsxs("div",{children:[e.jsxs("button",{onClick:()=>m(a),"aria-current":g?"true":void 0,className:E("group flex w-full items-center gap-2.5 rounded-lg px-3 py-2.5 text-start transition-all",g?"bg-primary/10 border border-primary/30":"hover:bg-muted/50 border border-transparent"),"data-testid":`stage-${a}`,children:[e.jsxs("div",{className:"relative shrink-0",children:[e.jsx("div",{className:E("flex h-9 w-9 items-center justify-center rounded-lg transition-colors",d==="running"&&"bg-amber-500/10 animate-pulse",d==="complete"&&"bg-emerald-500/10",d==="idle"&&"bg-muted/50",g&&"bg-primary/15"),children:e.jsx(r,{className:E("h-4 w-4",l)})}),d==="running"&&e.jsx(q,{className:"absolute -inset-e-0.5 -top-0.5 h-2.5 w-2.5 fill-amber-500 text-amber-500 animate-pulse"}),d==="complete"&&e.jsx(q,{className:"absolute -inset-e-0.5 -top-0.5 h-2.5 w-2.5 fill-emerald-500 text-emerald-500"})]}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"text-sm font-medium text-foreground truncate",children:b}),k&&e.jsx("p",{className:"text-[10px] text-muted-foreground truncate font-mono",children:k})]}),e.jsx(Z,{className:E("h-4 w-4 shrink-0 transition-colors",g?"text-primary":"text-muted-foreground/30 group-hover:text-muted-foreground")})]}),!C&&e.jsx("div",{className:"flex justify-center py-0.5",children:e.jsx("div",{className:E("w-0.5 h-4 rounded-full transition-colors",c.has(a)?"bg-emerald-500/40":"bg-border")})})]},a)}),t.length===0&&e.jsxs("div",{className:"text-center py-8",children:[e.jsx(ee,{className:"mx-auto h-8 w-8 text-muted-foreground/30"}),e.jsx("p",{className:"mt-2 text-sm text-muted-foreground",children:y("studio.noPipeline","No pipeline stages")})]})]})}function D({workflowStep:t,agentId:i,agentVersion:m,workflowId:y,workflowVersion:f}){var R;const{t:c}=O(),s=ge[t.type]??"",a=xe(s),r=((R=t.config)==null?void 0:R.uri)??"",{resourceId:h,resourceVersion:b}=n.useMemo(()=>{if(!r)return{resourceId:"",resourceVersion:1};try{const x=P(r);return{resourceId:x.id,resourceVersion:x.version}}catch{return{resourceId:"",resourceVersion:1}}},[r]),[l,d]=n.useState(b);n.useEffect(()=>{d(b)},[b]);const{data:g,isLoading:C,isError:L,refetch:k}=pe(s,h,l),{data:j}=fe(s,h),{data:u}=je(s||void 0),v=he(s),[w,A]=n.useState(!1);n.useEffect(()=>{if(w){const x=setTimeout(()=>A(!1),3e3);return()=>clearTimeout(x)}},[w]);const B=j?j.map(x=>{var p;const o=(p=x.resource)==null?void 0:p.match(/\?version=(\d+)/);return{version:o?parseInt(o[1]??"1",10):1,lastModifiedOn:x.lastModifiedOn}}):[{version:l}],[S,I]=n.useState(f),[T,V]=n.useState(m);n.useEffect(()=>{I(f),V(m)},[f,m]);const _=n.useMemo(()=>({workflowId:y,workflowVersion:S,agentId:i,agentVersion:T}),[y,S,i,T]),N=n.useCallback(x=>{try{const o=JSON.parse(x);v.mutate({id:h,version:l,body:o,context:_},{onSuccess:p=>{$.success(c("editor.saved","Saved successfully")),A(!0),d(p.newResourceVersion),p.newWorkflowVersion&&I(p.newWorkflowVersion),p.newAgentVersion&&V(p.newAgentVersion)},onError:p=>{$.error(te(p))}})}catch{$.error(c("editor.invalidJson","Invalid JSON"))}},[h,l,v,_,c]);if(!r||!a)return e.jsxs("div",{className:"flex flex-1 flex-col items-center justify-center p-6 text-center",children:[e.jsx(se,{className:"h-10 w-10 text-muted-foreground/30 mb-3"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:r?c("studio.unsupportedType","Editor not available for this extension type"):c("studio.noConfig","This pipeline stage has no configuration URI")}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground/60 font-mono",children:t.type})]});if(C)return e.jsxs("div",{className:"flex-1 p-6 space-y-4",children:[e.jsxs("div",{className:"flex gap-3",children:[e.jsx(W,{className:"h-8 w-24"}),e.jsx(W,{className:"h-8 w-24"})]}),e.jsx(W,{className:"h-[400px] w-full rounded-xl"})]});if(L)return e.jsx("div",{className:"flex-1 p-6",children:e.jsx(H,{message:c("common.error","An error occurred"),onRetry:()=>k(),retryLabel:c("common.retry","Retry")})});const M=c(`${a.labelKey}.name`,s);return e.jsx("div",{className:"flex-1 overflow-y-auto p-4","data-testid":"studio-editor-panel",children:e.jsx(ve,{typeName:M,resourceId:h,data:JSON.stringify(g,null,2),versions:B,currentVersion:l,onVersionChange:d,onSave:N,isSaving:v.isPending,saveSuccess:w,saveError:v.isError?c("editor.saveError","Failed to save"):void 0,renderFormEditor:we[s],jsonSchema:u})})}function U(){const{t}=O();return e.jsxs("div",{className:"flex flex-1 flex-col items-center justify-center p-6 text-center",children:[e.jsx(G,{className:"h-16 w-16 text-muted-foreground/15 mb-4"}),e.jsx("p",{className:"text-sm font-medium text-foreground",children:t("studio.selectStage","Click a pipeline stage to open its editor")}),e.jsx("p",{className:"mt-1.5 text-xs text-muted-foreground max-w-xs",children:t("studio.selectStageHint","Select any extension in the pipeline to view and edit its configuration inline")})]})}function ut(){var M,R,x;const{t}=O(),{agentId:i}=re(),[m,y]=n.useState(null),[f,c]=n.useState(!0),[s,a]=n.useState("pipeline"),{data:r,isError:h,refetch:b}=F({queryKey:["studio","descriptors",i],queryFn:()=>de(10,0,i??""),enabled:!!i,staleTime:6e4}),l=n.useMemo(()=>!r||!i?null:r.find(o=>{const{id:p}=P(o.resource);return p===i})??null,[r,i]),d=n.useMemo(()=>l?P(l.resource).version:1,[l]),{data:g,isLoading:C,isError:L,refetch:k}=F({queryKey:["studio","agent",i,d],queryFn:()=>me(i,d),enabled:!!i&&!!l,staleTime:3e4}),j=(M=g==null?void 0:g.workflows)==null?void 0:M[0],{workflowId:u,workflowVersion:v}=n.useMemo(()=>{if(!j)return{workflowId:null,workflowVersion:1};const o=P(j);return{workflowId:o.id,workflowVersion:o.version}},[j]),{data:w,isError:A,refetch:B}=F({queryKey:["studio","workflow",u],queryFn:()=>ue(u,v),enabled:!!u,staleTime:3e4}),S=(w==null?void 0:w.workflowSteps)??[],I=n.useCallback(o=>{y(o),a("editor")},[]);if(!i)return e.jsx("div",{className:"flex h-full items-center justify-center",children:e.jsx("p",{className:"text-muted-foreground",children:t("studio.notFound","Agent not found")})});const T=h&&!r,V=L&&!g;if(T||V||A&&!w){const o=T?b:V?k:B;return e.jsx("div",{className:"flex h-full items-center justify-center p-6",children:e.jsx(H,{message:t("common.error","Something went wrong"),onRetry:()=>o(),retryLabel:t("common.retry","Retry")})})}if(C)return e.jsxs("div",{className:"flex h-full items-center justify-center",children:[e.jsx(oe,{className:"h-6 w-6 animate-spin text-muted-foreground"}),e.jsx("p",{className:"ms-2 text-sm text-muted-foreground",children:t("studio.loading","Loading agent...")})]});const N=m!==null?S[m]:null;return e.jsxs("div",{className:"relative flex h-screen flex-col bg-background","data-testid":"agent-studio",children:[e.jsxs("div",{className:"flex items-center gap-3 border-b border-border px-4 py-2.5 shrink-0",children:[e.jsx(ie,{to:`/manage/agentview/${i}`,className:"flex h-8 w-8 items-center justify-center rounded-lg text-muted-foreground hover:bg-muted hover:text-foreground","data-testid":"studio-back","aria-label":t("studio.backToAgent","Back to agent detail"),children:e.jsx(ne,{className:"h-4 w-4"})}),e.jsxs("div",{className:"flex items-center gap-2 flex-1 min-w-0",children:[e.jsx("div",{className:"flex h-8 w-8 items-center justify-center rounded-lg bg-primary/10 shrink-0",children:e.jsx(ae,{className:"h-4 w-4 text-primary"})}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("h1",{className:"text-sm font-semibold text-foreground truncate",children:(l==null?void 0:l.name)??i}),e.jsx("p",{className:"text-[10px] text-muted-foreground",children:t("studio.title","Agent Studio")})]})]}),e.jsx("button",{onClick:()=>c(!f),className:"flex h-8 w-8 items-center justify-center rounded-lg text-muted-foreground hover:bg-muted hover:text-foreground",title:f?t("studio.hideChat","Hide chat"):t("studio.showChat","Show chat"),"data-testid":"toggle-right-panel",children:f?e.jsx(Ne,{className:"h-4 w-4"}):e.jsx(be,{className:"h-4 w-4"})})]}),e.jsxs("div",{className:"flex flex-1 overflow-hidden",children:[e.jsxs("div",{className:"w-64 shrink-0 border-e border-border overflow-y-auto bg-card/30 hidden lg:block",children:[e.jsx("div",{className:"px-3 pt-3 pb-1",children:e.jsx("h2",{className:"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/60",children:t("studio.pipeline","Pipeline")})}),e.jsx(K,{workflowSteps:S,selectedIndex:m,onSelectStage:I})]}),e.jsxs("div",{className:"flex-1 flex flex-col overflow-hidden",children:[e.jsx("div",{className:"hidden lg:flex lg:flex-1 lg:flex-col lg:overflow-hidden",children:N&&u?e.jsx(D,{workflowStep:N,agentId:i,agentVersion:d,workflowId:u,workflowVersion:v},`${m}-${(R=N.config)==null?void 0:R.uri}`):e.jsx(U,{})}),e.jsxs("div",{className:"flex flex-1 flex-col overflow-hidden lg:hidden",children:[s==="pipeline"&&e.jsxs("div",{className:"flex-1 overflow-y-auto",children:[e.jsx("div",{className:"px-3 pt-3 pb-1",children:e.jsx("h2",{className:"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/60",children:t("studio.pipeline","Pipeline")})}),e.jsx(K,{workflowSteps:S,selectedIndex:m,onSelectStage:I})]}),s==="editor"&&e.jsx("div",{className:"flex-1 overflow-hidden flex flex-col",children:N&&u?e.jsx(D,{workflowStep:N,agentId:i,agentVersion:d,workflowId:u,workflowVersion:v},`mobile-${m}-${(x=N.config)==null?void 0:x.uri}`):e.jsx(U,{})}),s==="chat"&&e.jsx("div",{className:"flex-1 overflow-hidden flex flex-col",children:e.jsx(J,{embedded:!0})})]})]}),f&&e.jsx("div",{className:"w-96 shrink-0 border-s border-border overflow-hidden hidden md:flex md:flex-col min-h-0 min-w-0",children:e.jsx(J,{embedded:!0})})]}),e.jsx("div",{className:"flex border-t border-border lg:hidden",children:[{id:"pipeline",icon:e.jsx(le,{className:"h-4 w-4"}),label:t("studio.pipeline","Pipeline")},{id:"editor",icon:e.jsx(G,{className:"h-4 w-4"}),label:t("studio.editor","Editor")},{id:"chat",icon:e.jsx(ce,{className:"h-4 w-4"}),label:t("studio.chat","Chat")}].map(o=>e.jsxs("button",{onClick:()=>a(o.id),className:E("flex flex-1 flex-col items-center gap-0.5 py-2 text-[10px] font-medium transition-colors",s===o.id?"text-primary border-t-2 border-primary -mt-[2px]":"text-muted-foreground hover:text-foreground"),"data-testid":`mobile-tab-${o.id}`,children:[o.icon,o.label]},o.id))})]})}export{ut as AgentStudioPage}; diff --git a/src/main/resources/META-INF/resources/assets/agent-wizard-B1tTR6z6.js b/src/main/resources/META-INF/resources/assets/agent-wizard-B1tTR6z6.js new file mode 100644 index 0000000000..0dfea7b047 --- /dev/null +++ b/src/main/resources/META-INF/resources/assets/agent-wizard-B1tTR6z6.js @@ -0,0 +1,11 @@ +import{x as H,c as W,r as z,j as e,C as B,av as F,K as Z,k as ee,_ as w,h as q,N as te,a3 as Q,w as O,ah as V,a2 as E,aA as G,aB as _,X as R,a4 as A,i as j,q as se,a1 as K,B as re,aC as P,aD as ae,aE as ne,a7 as J,aF as ie,aG as oe,aH as de}from"./index-BnLj1hck.js";import{u as le,a as ce}from"./use-agent-setup-DHji1YL0.js";import{S as Y}from"./secret-key-picker-BCXXdOJ-.js";import{L as ue,B as T}from"./types-tS6i07ms.js";import{W as me}from"./wand-sparkles-BtCP1jzO.js";import{U as D}from"./upload-D1UCHnd4.js";import{I as $}from"./info-cNcTVsFc.js";import"./use-secrets--RofX_r2.js";import"./eye-off-PKiH0Asw.js";import"./eye-xZR8Jj8Y.js";/** + * @license lucide-react v0.577.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const pe=[["path",{d:"M4 12.15V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2h-3.35",key:"1wthlu"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"m5 16-3 3 3 3",key:"331omg"}],["path",{d:"m9 22 3-3-3-3",key:"lsp7cz"}]],X=H("file-code-corner",pe);/** + * @license lucide-react v0.577.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const xe=[["path",{d:"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71",key:"1cjeqo"}],["path",{d:"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71",key:"19qd67"}]],he=H("link",xe);async function ge(s,i){var p,h;const r=Number(s.headers.get("Content-Length"));if(Number.isFinite(r)&&r>i)return await((p=s.body)==null?void 0:p.cancel().catch(()=>{})),null;const t=(h=s.body)==null?void 0:h.getReader();if(!t){const g=await s.text();return new TextEncoder().encode(g).byteLength>i?null:g}const o=[];let n=0;for(;;){const{done:g,value:y}=await t.read();if(g)break;if(n+=y.byteLength,n>i)return await t.cancel(),null;o.push(y)}const m=new Uint8Array(n);let b=0;for(const g of o)m.set(g,b),b+=g.byteLength;return new TextDecoder().decode(m)}const I={mode:"",name:"",systemPrompt:"",provider:"anthropic",model:"",apiKey:"",baseUrl:"",introMessage:"",enableBuiltInTools:!1,builtInToolsWhitelist:"",enableQuickReplies:!1,enableSentimentAnalysis:!1,openApiSpec:"",apiBaseUrl:"",apiAuth:"",endpoints:"",specInputMode:"url",specUrl:"",deploy:!0,environment:"production"},fe=[{id:"type",icon:O,label:"Type"},{id:"info",icon:V,label:"Identity"},{id:"llm",icon:G,label:"Model"},{id:"features",icon:_,label:"Features"},{id:"review",icon:R,label:"Review"}],be=[{id:"type",icon:O,label:"Type"},{id:"info",icon:V,label:"Identity"},{id:"apispec",icon:E,label:"API Spec"},{id:"llm",icon:G,label:"Model"},{id:"features",icon:_,label:"Features"},{id:"review",icon:R,label:"Review"}];function De(){var u;const{t:s}=W(),[i,r]=z.useState(0),[t,o]=z.useState(I),[n,m]=z.useState(null),[b,p]=z.useState(""),h=le(),g=ce(),y=h.isPending||g.isPending,l=t.mode==="api"?be:fe,d=l[i],x=z.useCallback(a=>o(c=>({...c,...a})),[]);function S(a){const c=P(a);x({provider:a,model:"",apiKey:(c==null?void 0:c.needsKey)===!1?"":t.apiKey})}function L(){if(!d)return!1;switch(d.id){case"type":return t.mode!=="";case"info":return t.name.trim().length>0&&t.systemPrompt.trim().length>0;case"llm":{const a=P(t.provider);return a!=null&&a.needsKey&&!t.apiKey.trim()?!1:t.model.trim().length>0}case"apispec":return t.openApiSpec.trim().length>0;case"features":case"review":return!0;default:return!1}}function M(){i0&&r(i-1)}async function C(a){p("");try{let c;if(t.mode==="api"){const f={agentName:t.name,systemPrompt:t.systemPrompt,openApiSpec:t.openApiSpec,provider:t.provider,model:t.model,apiKey:t.apiKey||void 0,apiBaseUrl:t.apiBaseUrl||void 0,apiAuth:t.apiAuth||void 0,endpoints:t.endpoints||void 0,enableQuickReplies:t.enableQuickReplies||void 0,enableSentimentAnalysis:t.enableSentimentAnalysis||void 0,deploy:a??t.deploy,environment:t.environment};c=await g.mutateAsync(f)}else{const f={name:t.name,systemPrompt:t.systemPrompt,provider:t.provider,model:t.model,apiKey:t.apiKey||void 0,baseUrl:t.baseUrl||void 0,introMessage:t.introMessage||void 0,enableBuiltInTools:t.enableBuiltInTools||void 0,builtInToolsWhitelist:t.builtInToolsWhitelist||void 0,enableQuickReplies:t.enableQuickReplies||void 0,enableSentimentAnalysis:t.enableSentimentAnalysis||void 0,deploy:a??t.deploy,environment:t.environment};c=await h.mutateAsync(f)}m(c),w.success(s("setupWizard.success","Agent created successfully!"))}catch(c){const f=c&&typeof c=="object"&&"message"in c?c.message:s("common.error");p(f),w.error(f)}}return n?e.jsx("div",{className:"mx-auto max-w-2xl space-y-8",children:e.jsxs("div",{className:"rounded-2xl border border-emerald-500/30 bg-card p-8 text-center shadow-lg",children:[e.jsx("div",{className:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-emerald-500/10",children:e.jsx(B,{className:"h-8 w-8 text-emerald-500"})}),e.jsx("h2",{className:"text-2xl font-bold text-foreground",children:s("setupWizard.agentCreated","Agent Created!")}),e.jsxs("p",{className:"mt-2 text-muted-foreground",children:[n.agentName," — ",n.provider,"/",n.model]}),n.deployed&&e.jsxs("div",{className:"mt-3 inline-flex items-center gap-1.5 rounded-full bg-emerald-500/10 px-3 py-1 text-sm font-medium text-emerald-600 dark:text-emerald-400",children:[e.jsx(B,{className:"h-3.5 w-3.5"}),s("setupWizard.deployed","Deployed")," — ",n.deploymentStatus]}),n.deployed===!1&&n.deploymentStatus&&e.jsxs("div",{className:"mt-3 inline-flex items-center gap-1.5 rounded-full bg-amber-500/10 px-3 py-1 text-sm font-medium text-amber-600 dark:text-amber-400",children:[e.jsx(F,{className:"h-3.5 w-3.5"}),n.deploymentStatus]}),typeof((u=n.resources)==null?void 0:u.vaultWarning)=="string"&&e.jsxs("p",{className:"mx-auto mt-3 max-w-md text-start text-xs text-amber-700 dark:text-amber-300","data-testid":"wizard-vault-warning",children:[e.jsx(F,{className:"me-1 inline h-3.5 w-3.5 align-text-bottom"}),n.resources.vaultWarning]}),n.apiKeyVaultReference&&e.jsxs("div",{className:"mt-4 rounded-lg border border-border bg-secondary/40 px-3 py-2 text-start",children:[e.jsx("p",{className:"text-xs text-muted-foreground",children:s("setupWizard.vaultKeyUsed","This agent uses the vault key below. Pick the same one for your next agent instead of pasting the API key again.")}),e.jsxs("div",{className:"mt-1.5 flex items-center gap-2",children:[e.jsx(Z,{className:"h-3.5 w-3.5 shrink-0 text-amber-500"}),e.jsx("code",{className:"min-w-0 flex-1 truncate font-mono text-xs text-amber-700 dark:text-amber-300",title:n.apiKeyVaultReference,"data-testid":"wizard-vault-reference",children:n.apiKeyVaultReference}),e.jsx(ee,{variant:"outline",size:"sm",className:"h-7 shrink-0 text-xs",onClick:async()=>{try{await navigator.clipboard.writeText(n.apiKeyVaultReference),w.success(s("setupWizard.vaultKeyCopied","Vault reference copied"))}catch{w.error(s("common.copyFailed","Failed to copy to clipboard"))}},"data-testid":"wizard-vault-reference-copy",children:s("common.copy","Copy")})]})]}),n.endpointCount!=null&&e.jsxs("p",{className:"mt-3 text-sm text-muted-foreground",children:[s("setupWizard.endpointsParsed","{{count}} API endpoints parsed",{count:n.endpointCount}),n.groups&&n.groups.length>0&&e.jsxs(e.Fragment,{children:[" — ",n.groups.join(", ")]})]}),e.jsxs("div",{className:"mt-6 flex items-center justify-center gap-3",children:[e.jsxs(q,{to:`/manage/agentview/${n.agentId}`,className:"inline-flex items-center gap-2 rounded-lg bg-primary px-5 py-2.5 text-sm font-medium text-primary-foreground shadow-sm transition-all hover:bg-primary/90 hover:shadow-md active:scale-[0.98]",children:[s("setupWizard.viewAgent","View Agent"),e.jsx(te,{className:"h-4 w-4"})]}),e.jsx("button",{onClick:()=>{o({...I,provider:n.apiKeyVaultReference?t.provider:I.provider,model:n.apiKeyVaultReference?t.model:I.model,apiKey:n.apiKeyVaultReference??""}),r(0),m(null),p("")},className:"inline-flex items-center gap-2 rounded-lg border border-border px-4 py-2.5 text-sm font-medium text-muted-foreground transition-colors hover:bg-secondary hover:text-foreground",children:s("setupWizard.createAnother","Create Another")})]})]})}):e.jsxs("div",{className:"mx-auto max-w-3xl space-y-8",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(q,{to:"/manage/agents",className:"inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground transition-colors",children:[e.jsx(Q,{className:"h-4 w-4"}),s("setupWizard.backToAgents","Back to Agents")]}),e.jsxs("h1",{className:"flex items-center gap-3 text-3xl font-bold text-foreground",children:[e.jsx("div",{className:"flex h-10 w-10 items-center justify-center rounded-xl bg-linear-to-br from-primary to-primary/60 text-primary-foreground shadow-lg",children:e.jsx(me,{className:"h-5 w-5"})}),s("setupWizard.title","Agent Setup Wizard")]}),e.jsx("p",{className:"text-muted-foreground",children:s("setupWizard.subtitle","Create a fully configured agent in minutes")})]}),e.jsx("div",{className:"flex items-center gap-2","data-testid":"wizard-steps",children:l.map((a,c)=>{const f=a.icon,N=c===i,v=cci,className:j("flex h-10 w-10 shrink-0 items-center justify-center rounded-full border-2 transition-all duration-300",N&&"border-primary bg-primary text-primary-foreground shadow-md shadow-primary/25 scale-110",v&&"border-emerald-500 bg-emerald-500 text-white",!N&&!v&&"border-border bg-card text-muted-foreground"),children:v?e.jsx(A,{className:"h-4 w-4"}):e.jsx(f,{className:"h-4 w-4"})}),e.jsx("span",{className:j("text-[10px] font-medium transition-colors duration-300 whitespace-nowrap",N&&"text-primary",v&&"text-emerald-500",!N&&!v&&"text-muted-foreground"),children:a.label})]}),cx({mode:a})}),(d==null?void 0:d.id)==="info"&&e.jsx(we,{name:t.name,systemPrompt:t.systemPrompt,onNameChange:a=>x({name:a}),onPromptChange:a=>x({systemPrompt:a})}),(d==null?void 0:d.id)==="llm"&&e.jsx(ve,{provider:t.provider,model:t.model,apiKey:t.apiKey,baseUrl:t.baseUrl,onProviderChange:S,onModelChange:a=>x({model:a}),onApiKeyChange:a=>x({apiKey:a}),onBaseUrlChange:a=>x({baseUrl:a})}),(d==null?void 0:d.id)==="apispec"&&e.jsx(ze,{spec:t.openApiSpec,specUrl:t.specUrl,specInputMode:t.specInputMode,apiBaseUrl:t.apiBaseUrl,apiAuth:t.apiAuth,endpoints:t.endpoints,onSpecChange:a=>x({openApiSpec:a}),onSpecUrlChange:a=>x({specUrl:a}),onModeChange:a=>x({specInputMode:a}),onApiBaseUrlChange:a=>x({apiBaseUrl:a}),onApiAuthChange:a=>x({apiAuth:a}),onEndpointsChange:a=>x({endpoints:a})}),(d==null?void 0:d.id)==="features"&&e.jsx(We,{state:t,onChange:x}),(d==null?void 0:d.id)==="review"&&e.jsx(ke,{state:t,error:b})]}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("button",{onClick:U,disabled:i===0,className:j("inline-flex items-center gap-2 rounded-lg px-4 py-2.5 text-sm font-medium transition-colors",i===0?"invisible":"text-muted-foreground hover:bg-secondary hover:text-foreground"),"data-testid":"wizard-back",children:[e.jsx(Q,{className:"h-4 w-4"}),s("setupWizard.back","Back")]}),(d==null?void 0:d.id)!=="review"?e.jsxs("button",{onClick:M,disabled:!L(),className:"inline-flex items-center gap-2 rounded-lg bg-primary px-5 py-2.5 text-sm font-medium text-primary-foreground shadow-sm transition-all hover:bg-primary/90 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 active:scale-[0.98]","data-testid":"wizard-next",children:[s("setupWizard.next","Next"),e.jsx(se,{className:"h-4 w-4"})]}):e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("button",{onClick:()=>C(!1),disabled:y,className:"inline-flex items-center gap-2 rounded-lg border border-primary/30 px-4 py-2.5 text-sm font-medium text-primary transition-colors hover:bg-primary/10 disabled:cursor-not-allowed disabled:opacity-50","data-testid":"wizard-create-only",children:[y?e.jsx(K,{className:"h-4 w-4 animate-spin"}):e.jsx(A,{className:"h-4 w-4"}),s("setupWizard.createOnly","Create Only")]}),e.jsxs("button",{onClick:()=>C(!0),disabled:y,className:"inline-flex items-center gap-2 rounded-lg bg-primary px-5 py-2.5 text-sm font-medium text-primary-foreground shadow-sm transition-all hover:bg-primary/90 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 active:scale-[0.98]","data-testid":"wizard-create-deploy",children:[y?e.jsx(K,{className:"h-4 w-4 animate-spin"}):e.jsx(R,{className:"h-4 w-4"}),s("setupWizard.createAndDeploy","Create & Deploy")]})]})]})]})}function ye({mode:s,onSelect:i}){const{t:r}=W(),t=[{id:"standard",icon:re,gradient:"from-violet-500 to-indigo-600"},{id:"api",icon:E,gradient:"from-emerald-500 to-teal-600"}];return e.jsxs("div",{children:[e.jsx("h2",{className:"text-xl font-semibold text-foreground",children:r("setupWizard.typeTitle","What kind of agent?")}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:r("setupWizard.typeDesc","Choose the type of agent you want to create")}),e.jsx("div",{className:"mt-6 grid grid-cols-1 gap-4 sm:grid-cols-2","data-testid":"type-grid",children:t.map(o=>{const n=o.icon,m=s===o.id;return e.jsxs("button",{onClick:()=>i(o.id),className:j("group relative flex flex-col items-center gap-4 rounded-xl border-2 p-8 text-center transition-all duration-200",m?"border-primary bg-primary/5 shadow-lg shadow-primary/10":"border-border hover:border-primary/40 hover:shadow-md"),"data-testid":`type-${o.id}`,children:[e.jsx("div",{className:j("flex h-16 w-16 items-center justify-center rounded-2xl bg-linear-to-br text-white shadow-lg transition-transform group-hover:scale-110",o.gradient),children:e.jsx(n,{className:"h-8 w-8"})}),e.jsxs("div",{children:[e.jsx("p",{className:"text-lg font-semibold text-foreground",children:o.id==="standard"?r("setupWizard.standardAgent","Standard Agent"):r("setupWizard.apiAgent","API Agent")}),e.jsx("p",{className:"mt-1.5 text-sm text-muted-foreground leading-relaxed",children:o.id==="standard"?r("setupWizard.standardDesc","Conversational AI powered by an LLM with optional tools, quick replies, and sentiment analysis"):r("setupWizard.apiDesc","Import an OpenAPI/Swagger specification to auto-generate an AI agent that can call your APIs")})]}),m&&e.jsx("div",{className:"absolute inset-e-3 top-3 flex h-7 w-7 items-center justify-center rounded-full bg-primary text-primary-foreground shadow",children:e.jsx(A,{className:"h-4 w-4"})})]},o.id)})})]})}function we({name:s,systemPrompt:i,onNameChange:r,onPromptChange:t}){const{t:o}=W();return e.jsxs("div",{children:[e.jsx("h2",{className:"text-xl font-semibold text-foreground",children:o("setupWizard.infoTitle","Agent Identity")}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:o("setupWizard.infoDesc","Give your agent a name and personality")}),e.jsxs("div",{className:"mt-6 space-y-5",children:[e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"wizard-name",className:"mb-1.5 block text-sm font-medium text-foreground",children:[o("setupWizard.agentName","Agent Name")," *"]}),e.jsx("input",{id:"wizard-name",type:"text",value:s,onChange:n=>r(n.target.value),placeholder:o("setupWizard.namePlaceholder","e.g. Customer Support Bot"),className:"w-full rounded-lg border border-input bg-background px-3 py-2.5 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring transition-shadow","data-testid":"wizard-agent-name",autoFocus:!0})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"wizard-prompt",className:"mb-1.5 block text-sm font-medium text-foreground",children:[o("setupWizard.systemPrompt","System Prompt")," *"]}),e.jsx("textarea",{id:"wizard-prompt",value:i,onChange:n=>t(n.target.value),placeholder:o("setupWizard.promptPlaceholder","You are a helpful AI assistant that..."),rows:5,className:"w-full rounded-lg border border-input bg-background px-3 py-2.5 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring resize-y transition-shadow font-mono","data-testid":"wizard-system-prompt"}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:o("setupWizard.promptHint","This is the instruction that shapes how your agent behaves and responds.")})]})]})]})}function ve({provider:s,model:i,apiKey:r,baseUrl:t,onProviderChange:o,onModelChange:n,onApiKeyChange:m,onBaseUrlChange:b}){const{t:p}=W(),h=P(s),g=z.useMemo(()=>ae[s]??[],[s]),y=`model-suggestions-${s}`,l=de(s);return e.jsxs("div",{children:[e.jsx("h2",{className:"text-xl font-semibold text-foreground",children:p("setupWizard.llmTitle","LLM Configuration")}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:p("setupWizard.llmDesc","Choose the AI model that powers your agent")}),e.jsxs("div",{className:"mt-6 space-y-5",children:[e.jsxs("div",{children:[e.jsx("label",{className:"mb-1.5 block text-sm font-medium text-foreground",children:p("setupWizard.provider","Provider")}),e.jsxs("div",{className:"relative",children:[e.jsx("select",{value:s,onChange:d=>o(d.target.value),className:"w-full appearance-none rounded-lg border border-input bg-background px-3 py-2.5 pe-10 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring transition-shadow","data-testid":"wizard-provider",children:ne.map(d=>e.jsx("option",{value:d.id,children:d.name},d.id))}),e.jsx(J,{className:"pointer-events-none absolute inset-e-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"})]})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"wizard-model",className:"mb-1.5 block text-sm font-medium text-foreground",children:[p("setupWizard.model","Model")," *"]}),e.jsx("input",{id:"wizard-model",type:"text",list:y,value:i,onChange:d=>n(d.target.value),placeholder:p("setupWizard.modelPlaceholder","e.g. {{model}} (or any model your provider supports)",{model:(h==null?void 0:h.defaultModel)??""}),className:"w-full rounded-lg border border-input bg-background px-3 py-2.5 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring transition-shadow","data-testid":"wizard-model",autoComplete:"off"}),e.jsx("datalist",{id:y,children:g.map(d=>e.jsx("option",{value:d},d))}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:p("setupWizard.modelHint","Type any model name supported by your provider, or pick one from the suggestions")})]}),(h==null?void 0:h.needsKey)!==!1&&e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"wizard-apikey",className:"mb-1.5 block text-sm font-medium text-foreground",children:[p("setupWizard.apiKey","API Key")," *"]}),e.jsx(Y,{value:r,onChange:m,placeholder:"sk-...",testId:"wizard-apikey"})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"wizard-baseurl",className:"mb-1.5 block text-sm font-medium text-foreground",children:[p("setupWizard.baseUrl","Base URL")," ",!l&&e.jsxs("span",{className:"text-muted-foreground font-normal",children:["(",p("setupWizard.optional","optional"),")"]}),l&&e.jsx("span",{className:"text-primary font-normal",children:"*"})]}),e.jsx("input",{id:"wizard-baseurl",type:"url",value:t,onChange:d=>b(d.target.value),placeholder:s==="ollama"?"http://localhost:11434":s==="jlama"?"http://localhost:8080":p("setupWizard.baseUrlPlaceholder","Custom endpoint URL"),className:"w-full rounded-lg border border-input bg-background px-3 py-2.5 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring transition-shadow","data-testid":"wizard-baseurl"}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:l?p("setupWizard.baseUrlHintLocal","Required — the URL where your local model server is running"):p("setupWizard.baseUrlHintCloud","Only needed if using a proxy, private deployment, or Azure OpenAI endpoint")})]})]})]})}const je=15e3,Ne=5*1024*1024;function ze({spec:s,specUrl:i,specInputMode:r,apiBaseUrl:t,apiAuth:o,endpoints:n,onSpecChange:m,onSpecUrlChange:b,onModeChange:p,onApiBaseUrlChange:h,onApiAuthChange:g,onEndpointsChange:y}){const{t:l}=W(),d=z.useRef(null),[x,S]=z.useState(!1),L=[{id:"url",icon:he,label:l("setupWizard.specByUrl","URL")},{id:"file",icon:D,label:l("setupWizard.specByFile","File")},{id:"paste",icon:X,label:l("setupWizard.specByPaste","Paste")}];async function M(){const u=i.trim();if(!u)return;let a;try{a=new URL(u)}catch{w.error(l("setupWizard.specUrlInvalid","That is not a valid URL"));return}if(a.protocol!=="http:"&&a.protocol!=="https:"){w.error(l("setupWizard.specUrlScheme","Only http:// and https:// URLs are supported"));return}S(!0);const c=new AbortController,f=setTimeout(()=>c.abort(),je);try{const N=await fetch(a.toString(),{signal:c.signal,credentials:"omit",referrerPolicy:"no-referrer",headers:{Accept:"application/json, application/yaml, text/plain;q=0.9"}});if(!N.ok)throw new Error(`HTTP ${N.status}`);const v=await ge(N,Ne);if(v===null){w.error(l("setupWizard.specTooLarge","That specification is too large to load here"));return}m(v),w.success(l("setupWizard.specFetched","Specification loaded!"))}catch{w.error(l("setupWizard.specFetchError","Failed to fetch specification"))}finally{clearTimeout(f),S(!1)}}function U(u){var f;const a=(f=u.target.files)==null?void 0:f[0];if(!a)return;const c=new FileReader;c.onload=()=>{m(c.result),w.success(l("setupWizard.specLoaded","File loaded: {{name}}",{name:a.name}))},c.readAsText(a)}function C(u){u.preventDefault();const a=u.dataTransfer.files[0];if(!a)return;const c=new FileReader;c.onload=()=>{m(c.result),p("file"),w.success(l("setupWizard.specLoaded","File loaded: {{name}}",{name:a.name}))},c.readAsText(a)}return e.jsxs("div",{children:[e.jsx("h2",{className:"text-xl font-semibold text-foreground",children:l("setupWizard.apiSpecTitle","OpenAPI Specification")}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:l("setupWizard.apiSpecDesc","Provide your API's OpenAPI/Swagger spec")}),e.jsx("div",{className:"mt-4 flex rounded-lg border border-border bg-secondary/30 p-1","data-testid":"spec-mode-tabs",children:L.map(u=>{const a=u.icon;return e.jsxs("button",{onClick:()=>p(u.id),className:j("flex flex-1 items-center justify-center gap-1.5 rounded-md px-3 py-2 text-sm font-medium transition-all",r===u.id?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"),children:[e.jsx(a,{className:"h-4 w-4"}),u.label]},u.id)})}),e.jsxs("div",{className:"mt-4 space-y-4",children:[r==="url"&&e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{type:"url",value:i,onChange:u=>b(u.target.value),placeholder:"https://api.example.com/openapi.json",className:"flex-1 rounded-lg border border-input bg-background px-3 py-2.5 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring transition-shadow","data-testid":"wizard-spec-url"}),e.jsxs("button",{onClick:M,disabled:x||!i.trim(),className:"inline-flex items-center gap-2 rounded-lg bg-primary px-4 py-2.5 text-sm font-medium text-primary-foreground shadow-sm transition-all hover:bg-primary/90 disabled:opacity-50 disabled:cursor-not-allowed","data-testid":"wizard-fetch-spec",children:[x?e.jsx(K,{className:"h-4 w-4 animate-spin"}):e.jsx(E,{className:"h-4 w-4"}),l("setupWizard.fetch","Fetch")]})]}),r==="file"&&e.jsxs("div",{onDrop:C,onDragOver:u=>u.preventDefault(),className:"flex flex-col items-center justify-center rounded-xl border-2 border-dashed border-border bg-secondary/20 p-8 text-center transition-colors hover:border-primary/40","data-testid":"wizard-spec-dropzone",children:[e.jsx(D,{className:"mb-3 h-8 w-8 text-muted-foreground"}),e.jsx("p",{className:"text-sm font-medium text-foreground",children:l("setupWizard.dropFile","Drop your OpenAPI file here")}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:l("setupWizard.dropHint","JSON or YAML format")}),e.jsxs("button",{onClick:()=>{var u;return(u=d.current)==null?void 0:u.click()},className:"mt-3 inline-flex items-center gap-1.5 rounded-lg border border-border px-3 py-1.5 text-sm font-medium text-muted-foreground transition-colors hover:bg-secondary hover:text-foreground",children:[e.jsx(D,{className:"h-3.5 w-3.5"}),l("setupWizard.browse","Browse Files")]}),e.jsx("input",{ref:d,type:"file",accept:".json,.yaml,.yml",onChange:U,className:"hidden","data-testid":"wizard-spec-file"})]}),r==="paste"&&e.jsx("textarea",{value:s,onChange:u=>m(u.target.value),placeholder:l("setupWizard.pasteSpec","Paste your OpenAPI/Swagger JSON or YAML here..."),rows:10,className:"w-full rounded-lg border border-input bg-background px-3 py-2.5 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring resize-y transition-shadow font-mono","data-testid":"wizard-spec-paste"}),s&&e.jsxs("div",{className:"flex items-center gap-2 rounded-lg bg-emerald-500/10 px-3 py-2 text-sm text-emerald-600 dark:text-emerald-400",children:[e.jsx(B,{className:"h-4 w-4 shrink-0"}),l("setupWizard.specReady","Specification loaded ({{chars}} chars)",{chars:s.length.toLocaleString()})]}),e.jsxs("div",{className:"grid grid-cols-1 gap-4 sm:grid-cols-2",children:[e.jsxs("div",{children:[e.jsxs("label",{className:"mb-1.5 block text-sm font-medium text-foreground",children:[l("setupWizard.apiBaseUrlLabel","API Base URL")," ",e.jsxs("span",{className:"text-muted-foreground font-normal",children:["(",l("setupWizard.optional","optional"),")"]})]}),e.jsx("input",{type:"url",value:t,onChange:u=>h(u.target.value),placeholder:"https://api.example.com",className:"w-full rounded-lg border border-input bg-background px-3 py-2.5 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring transition-shadow","data-testid":"wizard-api-baseurl"})]}),e.jsxs("div",{children:[e.jsxs("label",{className:"mb-1.5 block text-sm font-medium text-foreground",children:[l("setupWizard.apiAuthLabel","API Auth Header")," ",e.jsxs("span",{className:"text-muted-foreground font-normal",children:["(",l("setupWizard.optional","optional"),")"]})]}),e.jsx(Y,{value:o,onChange:g,placeholder:"Bearer sk-...",testId:"wizard-api-auth"})]})]}),e.jsxs("div",{children:[e.jsxs("label",{className:"mb-1.5 block text-sm font-medium text-foreground",children:[l("setupWizard.endpointFilter","Endpoint Filter")," ",e.jsxs("span",{className:"text-muted-foreground font-normal",children:["(",l("setupWizard.optional","optional"),")"]})]}),e.jsx("input",{type:"text",value:n,onChange:u=>y(u.target.value),placeholder:l("setupWizard.endpointFilterPlaceholder","Comma-separated: GET /users, POST /orders"),className:"w-full rounded-lg border border-input bg-background px-3 py-2.5 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring transition-shadow","data-testid":"wizard-endpoints"})]})]})]})}function We({state:s,onChange:i}){const{t:r}=W();return e.jsxs("div",{children:[e.jsx("h2",{className:"text-xl font-semibold text-foreground",children:r("setupWizard.featuresTitle","Features & Options")}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:r("setupWizard.featuresDesc","Customize your agent's capabilities")}),e.jsxs("div",{className:"mt-6 space-y-4",children:[s.mode==="standard"&&e.jsxs("div",{className:"rounded-lg border border-border p-4 space-y-3",children:[e.jsx(k,{icon:ie,label:r("setupWizard.introMessage","Intro Message"),description:r("setupWizard.introMessageDesc","Greeting shown when a conversation starts"),checked:s.introMessage.length>0,onChange:t=>i({introMessage:t?s.introMessage||"Hello! How can I help you today?":""}),"data-testid":"wizard-toggle-intro"}),s.introMessage.length>0&&e.jsx("textarea",{value:s.introMessage,onChange:t=>i({introMessage:t.target.value}),rows:2,className:"w-full rounded-lg border border-input bg-background px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring resize-none transition-shadow","data-testid":"wizard-intro-text"})]}),e.jsxs("div",{className:"rounded-lg border border-border p-4 space-y-3",children:[e.jsx(k,{icon:X,label:r("setupWizard.structuredOutput","Structured Output"),description:r("setupWizard.structuredOutputDesc","LLM responds with a JSON object instead of plain text"),checked:s.enableQuickReplies||s.enableSentimentAnalysis,onChange:t=>{i(t?{enableQuickReplies:!0}:{enableQuickReplies:!1,enableSentimentAnalysis:!1})},"data-testid":"wizard-toggle-structured"}),(s.enableQuickReplies||s.enableSentimentAnalysis)&&e.jsxs("div",{className:"space-y-3 ps-9",children:[e.jsxs("div",{className:"flex items-start gap-2 rounded-md bg-amber-500/10 px-3 py-2 text-[11px] text-amber-700 dark:text-amber-400","data-testid":"structured-output-info",children:[e.jsx($,{className:"mt-0.5 h-3.5 w-3.5 shrink-0"}),e.jsx("span",{children:r("setupWizard.structuredOutputInfo","Enabling this changes how the LLM responds: instead of plain text, it returns a JSON object with structured fields. A JSON schema is appended to your system prompt, and the model is set to JSON response mode.")})]}),e.jsx(k,{icon:O,label:r("setupWizard.quickReplies","Quick Replies"),description:r("setupWizard.quickRepliesDesc","LLM generates clickable reply suggestions"),checked:s.enableQuickReplies,onChange:t=>i({enableQuickReplies:t}),"data-testid":"wizard-toggle-qr"}),e.jsx(k,{icon:oe,label:r("setupWizard.sentiment","Sentiment Analysis"),description:r("setupWizard.sentimentDesc","Track user mood, intent and urgency in real-time"),checked:s.enableSentimentAnalysis,onChange:t=>i({enableSentimentAnalysis:t}),"data-testid":"wizard-toggle-sentiment"})]})]}),s.mode==="standard"&&e.jsxs("div",{className:"rounded-lg border border-border p-4 space-y-3",children:[e.jsx(k,{icon:_,label:r("setupWizard.builtInTools","Built-in Tools"),description:r("setupWizard.builtInToolsDesc","Enable EDDI's built-in tool library (calculator, datetime, etc.)"),checked:s.enableBuiltInTools,onChange:t=>i({enableBuiltInTools:t}),"data-testid":"wizard-toggle-tools"}),s.enableBuiltInTools&&e.jsxs("div",{className:"space-y-3 ps-9",children:[e.jsxs("div",{className:"flex items-center gap-1 rounded-lg border border-border bg-background p-0.5",role:"radiogroup","aria-label":r("setupWizard.builtInTools","Built-in Tools"),"data-testid":"wizard-tool-selection-mode",children:[e.jsxs("button",{type:"button",role:"radio","aria-checked":!s.builtInToolsWhitelist,onClick:()=>i({builtInToolsWhitelist:""}),className:`flex items-center gap-1.5 rounded-md px-3 py-1.5 text-xs font-medium transition-all ${s.builtInToolsWhitelist?"text-muted-foreground hover:text-foreground":"bg-primary text-primary-foreground shadow-sm"}`,"data-testid":"wizard-tool-mode-all",children:[e.jsx(A,{className:"h-3 w-3"}),r("setupWizard.allTools","All Tools")]}),e.jsxs("button",{type:"button",role:"radio","aria-checked":!!s.builtInToolsWhitelist,onClick:()=>{s.builtInToolsWhitelist||i({builtInToolsWhitelist:T.join(",")})},className:`flex items-center gap-1.5 rounded-md px-3 py-1.5 text-xs font-medium transition-all ${s.builtInToolsWhitelist?"bg-primary text-primary-foreground shadow-sm":"text-muted-foreground hover:text-foreground"}`,"data-testid":"wizard-tool-mode-specific",children:[e.jsx(ue,{className:"h-3 w-3"}),r("setupWizard.selectSpecific","Select Specific")]})]}),!s.builtInToolsWhitelist&&e.jsxs("div",{className:"flex items-start gap-2 rounded-md bg-sky-500/10 px-3 py-2 text-xs text-sky-700 dark:text-sky-400","data-testid":"wizard-all-tools-info",children:[e.jsx($,{className:"mt-0.5 h-3.5 w-3.5 shrink-0"}),e.jsx("span",{children:r("setupWizard.allToolsInfo",'All {{count}} built-in tools will be available to your agent. Switch to "Select Specific" to restrict which tools are enabled.',{count:T.length})})]}),s.builtInToolsWhitelist&&(()=>{const t=s.builtInToolsWhitelist.split(",").filter(Boolean);return e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:r("setupWizard.availableTools","Available Tools")}),e.jsx("span",{className:"text-[10px] text-muted-foreground",children:r("setupWizard.toolCount","{{selected}} of {{total}} selected",{selected:t.length,total:T.length})})]}),e.jsx("div",{className:"flex flex-wrap gap-1.5","data-testid":"wizard-tools-whitelist",children:T.map(o=>{const n=t.includes(o);return e.jsxs("button",{type:"button","aria-pressed":n,onClick:()=>{const m=n?t.filter(b=>b!==o):[...t,o];i({builtInToolsWhitelist:m.length>0?m.join(","):""})},className:`inline-flex items-center gap-1.5 rounded-full px-2.5 py-1.5 text-xs font-medium transition-all ${n?"bg-primary/15 text-primary border border-primary/30 shadow-sm":"bg-secondary/50 text-muted-foreground border border-transparent hover:border-border hover:text-foreground"}`,"data-testid":`wizard-tool-chip-${o}`,children:[n&&e.jsx(A,{className:"h-3 w-3"}),o]},o)})})]})})()]})]}),e.jsxs("div",{className:"mt-2 rounded-lg border border-primary/20 bg-primary/5 p-4",children:[e.jsx(k,{icon:R,label:r("setupWizard.autoDeploy","Auto-Deploy"),description:r("setupWizard.autoDeployDesc","Deploy the agent immediately after creation"),checked:s.deploy,onChange:t=>i({deploy:t}),"data-testid":"wizard-toggle-deploy"}),s.deploy&&e.jsxs("div",{className:"mt-3 flex items-center gap-3 ps-9",children:[e.jsxs("label",{className:"text-sm font-medium text-foreground",children:[r("setupWizard.environment","Environment"),":"]}),e.jsxs("div",{className:"relative",children:[e.jsxs("select",{value:s.environment,onChange:t=>i({environment:t.target.value}),className:"appearance-none rounded-lg border border-input bg-background px-3 py-1.5 pe-8 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring transition-shadow","data-testid":"wizard-environment",children:[e.jsx("option",{value:"production",children:r("setupWizard.envProduction","Production")}),e.jsx("option",{value:"test",children:r("setupWizard.envTest","Test")})]}),e.jsx(J,{className:"pointer-events-none absolute inset-e-2 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground"})]})]})]})]})]})}function ke({state:s,error:i}){const{t:r}=W(),t=P(s.provider),o=[[r("setupWizard.reviewType","Type"),s.mode==="api"?r("setupWizard.apiAgent","API Agent"):r("setupWizard.standardAgent","Standard Agent")],[r("setupWizard.reviewName","Name"),s.name],[r("setupWizard.reviewPrompt","System Prompt"),s.systemPrompt.length>80?s.systemPrompt.slice(0,80)+"…":s.systemPrompt],[r("setupWizard.reviewProvider","Provider"),(t==null?void 0:t.name)??s.provider],[r("setupWizard.reviewModel","Model"),s.model]];return s.mode==="api"&&s.openApiSpec&&o.push([r("setupWizard.reviewSpec","OpenAPI Spec"),`${s.openApiSpec.length.toLocaleString()} chars`]),s.introMessage&&o.push([r("setupWizard.reviewIntro","Intro Message"),s.introMessage.length>60?s.introMessage.slice(0,60)+"…":s.introMessage]),s.enableQuickReplies&&o.push([r("setupWizard.quickReplies","Quick Replies"),"✓"]),s.enableSentimentAnalysis&&o.push([r("setupWizard.sentiment","Sentiment Analysis"),"✓"]),s.enableBuiltInTools&&o.push([r("setupWizard.builtInTools","Built-in Tools"),"✓"]),o.push([r("setupWizard.reviewDeploy","Deploy"),s.deploy?`✓ (${s.environment})`:"—"]),e.jsxs("div",{"data-testid":"wizard-review",children:[e.jsx("h2",{className:"text-xl font-semibold text-foreground",children:r("setupWizard.reviewTitle","Review & Create")}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:r("setupWizard.reviewDesc","Review your configuration before creating the agent")}),e.jsx("div",{className:"mt-6 rounded-lg border border-border divide-y divide-border overflow-hidden",children:o.map(([n,m],b)=>e.jsxs("div",{className:j("flex items-start justify-between gap-4 px-4 py-3",b%2===0&&"bg-secondary/30"),children:[e.jsx("span",{className:"text-sm font-medium text-muted-foreground whitespace-nowrap",children:n}),e.jsx("span",{className:"text-sm font-medium text-foreground text-end break-all max-w-xs",children:m})]},n))}),i&&e.jsxs("div",{className:"mt-4 flex items-start gap-2 rounded-lg bg-destructive/10 px-4 py-3 text-sm text-destructive",children:[e.jsx(F,{className:"mt-0.5 h-4 w-4 shrink-0"}),i]})]})}function k({icon:s,label:i,description:r,checked:t,onChange:o,"data-testid":n}){return e.jsxs("label",{className:"flex cursor-pointer items-start gap-3 rounded-lg p-0.5 transition-colors",children:[e.jsxs("div",{className:"relative mt-0.5 flex h-5 w-9 shrink-0 items-center rounded-full transition-colors duration-200",style:{backgroundColor:t?"var(--color-primary)":"var(--color-border)"},children:[e.jsx("span",{className:j("absolute h-4 w-4 rounded-full bg-white shadow-sm transition-transform duration-200",t?"translate-x-4":"translate-x-0.5")}),e.jsx("input",{type:"checkbox",checked:t,onChange:m=>o(m.target.checked),className:"sr-only","data-testid":n})]}),e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx(s,{className:"mt-0.5 h-4 w-4 shrink-0 text-muted-foreground"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium text-foreground",children:i}),e.jsx("p",{className:"text-xs text-muted-foreground",children:r})]})]})]})}export{De as AgentWizardPage}; diff --git a/src/main/resources/META-INF/resources/assets/agent-wizard-BpeKgxxX.js b/src/main/resources/META-INF/resources/assets/agent-wizard-BpeKgxxX.js deleted file mode 100644 index e038566cf0..0000000000 --- a/src/main/resources/META-INF/resources/assets/agent-wizard-BpeKgxxX.js +++ /dev/null @@ -1,11 +0,0 @@ -import{x as $,c as z,r as N,j as e,C as D,av as H,h as K,N as Z,a3 as _,w as B,ah as G,a2 as F,aA as J,aB as O,X as I,a4 as k,i as v,q as ee,a1 as U,B as te,aC as C,aD as se,aE as re,a7 as Y,aF as ae,aG as ne,_ as w,aH as oe}from"./index-BY6d8wze.js";import{u as ie,a as de}from"./use-agent-setup-DNGNn-HI.js";import{S as V}from"./secret-key-picker-TXey-VQE.js";import{L as le,B as T}from"./types-BY9zm5d-.js";import{W as ce}from"./wand-sparkles-DCdkrkbT.js";import{U as M}from"./upload-DxPMOlxt.js";import{I as q}from"./info-vszmN4vn.js";import"./use-secrets-C_oj4VYh.js";import"./eye-off-DQKzJHI5.js";import"./eye-Dbrf-yrM.js";/** - * @license lucide-react v0.577.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const ue=[["path",{d:"M4 12.15V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2h-3.35",key:"1wthlu"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"m5 16-3 3 3 3",key:"331omg"}],["path",{d:"m9 22 3-3-3-3",key:"lsp7cz"}]],X=$("file-code-corner",ue);/** - * @license lucide-react v0.577.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const pe=[["path",{d:"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71",key:"1cjeqo"}],["path",{d:"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71",key:"19qd67"}]],me=$("link",pe);async function xe(s,n){var p,h;const r=Number(s.headers.get("Content-Length"));if(Number.isFinite(r)&&r>n)return await((p=s.body)==null?void 0:p.cancel().catch(()=>{})),null;const t=(h=s.body)==null?void 0:h.getReader();if(!t){const g=await s.text();return new TextEncoder().encode(g).byteLength>n?null:g}const o=[];let i=0;for(;;){const{done:g,value:b}=await t.read();if(g)break;if(i+=b.byteLength,i>n)return await t.cancel(),null;o.push(b)}const u=new Uint8Array(i);let f=0;for(const g of o)u.set(g,f),f+=g.byteLength;return new TextDecoder().decode(u)}const Q={mode:"",name:"",systemPrompt:"",provider:"anthropic",model:"",apiKey:"",baseUrl:"",introMessage:"",enableBuiltInTools:!1,builtInToolsWhitelist:"",enableQuickReplies:!1,enableSentimentAnalysis:!1,openApiSpec:"",apiBaseUrl:"",apiAuth:"",endpoints:"",specInputMode:"url",specUrl:"",deploy:!0,environment:"production"},he=[{id:"type",icon:B,label:"Type"},{id:"info",icon:G,label:"Identity"},{id:"llm",icon:J,label:"Model"},{id:"features",icon:O,label:"Features"},{id:"review",icon:I,label:"Review"}],ge=[{id:"type",icon:B,label:"Type"},{id:"info",icon:G,label:"Identity"},{id:"apispec",icon:F,label:"API Spec"},{id:"llm",icon:J,label:"Model"},{id:"features",icon:O,label:"Features"},{id:"review",icon:I,label:"Review"}];function Me(){const{t:s}=z(),[n,r]=N.useState(0),[t,o]=N.useState(Q),[i,u]=N.useState(null),[f,p]=N.useState(""),h=ie(),g=de(),b=h.isPending||g.isPending,c=t.mode==="api"?ge:he,d=c[n],x=N.useCallback(a=>o(l=>({...l,...a})),[]);function A(a){const l=C(a);x({provider:a,model:"",apiKey:(l==null?void 0:l.needsKey)===!1?"":t.apiKey})}function P(){if(!d)return!1;switch(d.id){case"type":return t.mode!=="";case"info":return t.name.trim().length>0&&t.systemPrompt.trim().length>0;case"llm":{const a=C(t.provider);return a!=null&&a.needsKey&&!t.apiKey.trim()?!1:t.model.trim().length>0}case"apispec":return t.openApiSpec.trim().length>0;case"features":case"review":return!0;default:return!1}}function R(){n0&&r(n-1)}async function S(a){p("");try{let l;if(t.mode==="api"){const m={agentName:t.name,systemPrompt:t.systemPrompt,openApiSpec:t.openApiSpec,provider:t.provider,model:t.model,apiKey:t.apiKey||void 0,apiBaseUrl:t.apiBaseUrl||void 0,apiAuth:t.apiAuth||void 0,endpoints:t.endpoints||void 0,enableQuickReplies:t.enableQuickReplies||void 0,enableSentimentAnalysis:t.enableSentimentAnalysis||void 0,deploy:a??t.deploy,environment:t.environment};l=await g.mutateAsync(m)}else{const m={name:t.name,systemPrompt:t.systemPrompt,provider:t.provider,model:t.model,apiKey:t.apiKey||void 0,baseUrl:t.baseUrl||void 0,introMessage:t.introMessage||void 0,enableBuiltInTools:t.enableBuiltInTools||void 0,builtInToolsWhitelist:t.builtInToolsWhitelist||void 0,enableQuickReplies:t.enableQuickReplies||void 0,enableSentimentAnalysis:t.enableSentimentAnalysis||void 0,deploy:a??t.deploy,environment:t.environment};l=await h.mutateAsync(m)}u(l),w.success(s("setupWizard.success","Agent created successfully!"))}catch(l){const m=l&&typeof l=="object"&&"message"in l?l.message:s("common.error");p(m),w.error(m)}}return i?e.jsx("div",{className:"mx-auto max-w-2xl space-y-8",children:e.jsxs("div",{className:"rounded-2xl border border-emerald-500/30 bg-card p-8 text-center shadow-lg",children:[e.jsx("div",{className:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-emerald-500/10",children:e.jsx(D,{className:"h-8 w-8 text-emerald-500"})}),e.jsx("h2",{className:"text-2xl font-bold text-foreground",children:s("setupWizard.agentCreated","Agent Created!")}),e.jsxs("p",{className:"mt-2 text-muted-foreground",children:[i.agentName," — ",i.provider,"/",i.model]}),i.deployed&&e.jsxs("div",{className:"mt-3 inline-flex items-center gap-1.5 rounded-full bg-emerald-500/10 px-3 py-1 text-sm font-medium text-emerald-600 dark:text-emerald-400",children:[e.jsx(D,{className:"h-3.5 w-3.5"}),s("setupWizard.deployed","Deployed")," — ",i.deploymentStatus]}),i.deployed===!1&&i.deploymentStatus&&e.jsxs("div",{className:"mt-3 inline-flex items-center gap-1.5 rounded-full bg-amber-500/10 px-3 py-1 text-sm font-medium text-amber-600 dark:text-amber-400",children:[e.jsx(H,{className:"h-3.5 w-3.5"}),i.deploymentStatus]}),i.endpointCount!=null&&e.jsxs("p",{className:"mt-3 text-sm text-muted-foreground",children:[s("setupWizard.endpointsParsed","{{count}} API endpoints parsed",{count:i.endpointCount}),i.groups&&i.groups.length>0&&e.jsxs(e.Fragment,{children:[" — ",i.groups.join(", ")]})]}),e.jsxs("div",{className:"mt-6 flex items-center justify-center gap-3",children:[e.jsxs(K,{to:`/manage/agentview/${i.agentId}`,className:"inline-flex items-center gap-2 rounded-lg bg-primary px-5 py-2.5 text-sm font-medium text-primary-foreground shadow-sm transition-all hover:bg-primary/90 hover:shadow-md active:scale-[0.98]",children:[s("setupWizard.viewAgent","View Agent"),e.jsx(Z,{className:"h-4 w-4"})]}),e.jsx("button",{onClick:()=>{o(Q),r(0),u(null),p("")},className:"inline-flex items-center gap-2 rounded-lg border border-border px-4 py-2.5 text-sm font-medium text-muted-foreground transition-colors hover:bg-secondary hover:text-foreground",children:s("setupWizard.createAnother","Create Another")})]})]})}):e.jsxs("div",{className:"mx-auto max-w-3xl space-y-8",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(K,{to:"/manage/agents",className:"inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground transition-colors",children:[e.jsx(_,{className:"h-4 w-4"}),s("setupWizard.backToAgents","Back to Agents")]}),e.jsxs("h1",{className:"flex items-center gap-3 text-3xl font-bold text-foreground",children:[e.jsx("div",{className:"flex h-10 w-10 items-center justify-center rounded-xl bg-linear-to-br from-primary to-primary/60 text-primary-foreground shadow-lg",children:e.jsx(ce,{className:"h-5 w-5"})}),s("setupWizard.title","Agent Setup Wizard")]}),e.jsx("p",{className:"text-muted-foreground",children:s("setupWizard.subtitle","Create a fully configured agent in minutes")})]}),e.jsx("div",{className:"flex items-center gap-2","data-testid":"wizard-steps",children:c.map((a,l)=>{const m=a.icon,j=l===n,y=lln,className:v("flex h-10 w-10 shrink-0 items-center justify-center rounded-full border-2 transition-all duration-300",j&&"border-primary bg-primary text-primary-foreground shadow-md shadow-primary/25 scale-110",y&&"border-emerald-500 bg-emerald-500 text-white",!j&&!y&&"border-border bg-card text-muted-foreground"),children:y?e.jsx(k,{className:"h-4 w-4"}):e.jsx(m,{className:"h-4 w-4"})}),e.jsx("span",{className:v("text-[10px] font-medium transition-colors duration-300 whitespace-nowrap",j&&"text-primary",y&&"text-emerald-500",!j&&!y&&"text-muted-foreground"),children:a.label})]}),lx({mode:a})}),(d==null?void 0:d.id)==="info"&&e.jsx(be,{name:t.name,systemPrompt:t.systemPrompt,onNameChange:a=>x({name:a}),onPromptChange:a=>x({systemPrompt:a})}),(d==null?void 0:d.id)==="llm"&&e.jsx(ye,{provider:t.provider,model:t.model,apiKey:t.apiKey,baseUrl:t.baseUrl,onProviderChange:A,onModelChange:a=>x({model:a}),onApiKeyChange:a=>x({apiKey:a}),onBaseUrlChange:a=>x({baseUrl:a})}),(d==null?void 0:d.id)==="apispec"&&e.jsx(ve,{spec:t.openApiSpec,specUrl:t.specUrl,specInputMode:t.specInputMode,apiBaseUrl:t.apiBaseUrl,apiAuth:t.apiAuth,endpoints:t.endpoints,onSpecChange:a=>x({openApiSpec:a}),onSpecUrlChange:a=>x({specUrl:a}),onModeChange:a=>x({specInputMode:a}),onApiBaseUrlChange:a=>x({apiBaseUrl:a}),onApiAuthChange:a=>x({apiAuth:a}),onEndpointsChange:a=>x({endpoints:a})}),(d==null?void 0:d.id)==="features"&&e.jsx(Ne,{state:t,onChange:x}),(d==null?void 0:d.id)==="review"&&e.jsx(ze,{state:t,error:f})]}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("button",{onClick:L,disabled:n===0,className:v("inline-flex items-center gap-2 rounded-lg px-4 py-2.5 text-sm font-medium transition-colors",n===0?"invisible":"text-muted-foreground hover:bg-secondary hover:text-foreground"),"data-testid":"wizard-back",children:[e.jsx(_,{className:"h-4 w-4"}),s("setupWizard.back","Back")]}),(d==null?void 0:d.id)!=="review"?e.jsxs("button",{onClick:R,disabled:!P(),className:"inline-flex items-center gap-2 rounded-lg bg-primary px-5 py-2.5 text-sm font-medium text-primary-foreground shadow-sm transition-all hover:bg-primary/90 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 active:scale-[0.98]","data-testid":"wizard-next",children:[s("setupWizard.next","Next"),e.jsx(ee,{className:"h-4 w-4"})]}):e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("button",{onClick:()=>S(!1),disabled:b,className:"inline-flex items-center gap-2 rounded-lg border border-primary/30 px-4 py-2.5 text-sm font-medium text-primary transition-colors hover:bg-primary/10 disabled:cursor-not-allowed disabled:opacity-50","data-testid":"wizard-create-only",children:[b?e.jsx(U,{className:"h-4 w-4 animate-spin"}):e.jsx(k,{className:"h-4 w-4"}),s("setupWizard.createOnly","Create Only")]}),e.jsxs("button",{onClick:()=>S(!0),disabled:b,className:"inline-flex items-center gap-2 rounded-lg bg-primary px-5 py-2.5 text-sm font-medium text-primary-foreground shadow-sm transition-all hover:bg-primary/90 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 active:scale-[0.98]","data-testid":"wizard-create-deploy",children:[b?e.jsx(U,{className:"h-4 w-4 animate-spin"}):e.jsx(I,{className:"h-4 w-4"}),s("setupWizard.createAndDeploy","Create & Deploy")]})]})]})]})}function fe({mode:s,onSelect:n}){const{t:r}=z(),t=[{id:"standard",icon:te,gradient:"from-violet-500 to-indigo-600"},{id:"api",icon:F,gradient:"from-emerald-500 to-teal-600"}];return e.jsxs("div",{children:[e.jsx("h2",{className:"text-xl font-semibold text-foreground",children:r("setupWizard.typeTitle","What kind of agent?")}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:r("setupWizard.typeDesc","Choose the type of agent you want to create")}),e.jsx("div",{className:"mt-6 grid grid-cols-1 gap-4 sm:grid-cols-2","data-testid":"type-grid",children:t.map(o=>{const i=o.icon,u=s===o.id;return e.jsxs("button",{onClick:()=>n(o.id),className:v("group relative flex flex-col items-center gap-4 rounded-xl border-2 p-8 text-center transition-all duration-200",u?"border-primary bg-primary/5 shadow-lg shadow-primary/10":"border-border hover:border-primary/40 hover:shadow-md"),"data-testid":`type-${o.id}`,children:[e.jsx("div",{className:v("flex h-16 w-16 items-center justify-center rounded-2xl bg-linear-to-br text-white shadow-lg transition-transform group-hover:scale-110",o.gradient),children:e.jsx(i,{className:"h-8 w-8"})}),e.jsxs("div",{children:[e.jsx("p",{className:"text-lg font-semibold text-foreground",children:o.id==="standard"?r("setupWizard.standardAgent","Standard Agent"):r("setupWizard.apiAgent","API Agent")}),e.jsx("p",{className:"mt-1.5 text-sm text-muted-foreground leading-relaxed",children:o.id==="standard"?r("setupWizard.standardDesc","Conversational AI powered by an LLM with optional tools, quick replies, and sentiment analysis"):r("setupWizard.apiDesc","Import an OpenAPI/Swagger specification to auto-generate an AI agent that can call your APIs")})]}),u&&e.jsx("div",{className:"absolute inset-e-3 top-3 flex h-7 w-7 items-center justify-center rounded-full bg-primary text-primary-foreground shadow",children:e.jsx(k,{className:"h-4 w-4"})})]},o.id)})})]})}function be({name:s,systemPrompt:n,onNameChange:r,onPromptChange:t}){const{t:o}=z();return e.jsxs("div",{children:[e.jsx("h2",{className:"text-xl font-semibold text-foreground",children:o("setupWizard.infoTitle","Agent Identity")}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:o("setupWizard.infoDesc","Give your agent a name and personality")}),e.jsxs("div",{className:"mt-6 space-y-5",children:[e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"wizard-name",className:"mb-1.5 block text-sm font-medium text-foreground",children:[o("setupWizard.agentName","Agent Name")," *"]}),e.jsx("input",{id:"wizard-name",type:"text",value:s,onChange:i=>r(i.target.value),placeholder:o("setupWizard.namePlaceholder","e.g. Customer Support Bot"),className:"w-full rounded-lg border border-input bg-background px-3 py-2.5 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring transition-shadow","data-testid":"wizard-agent-name",autoFocus:!0})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"wizard-prompt",className:"mb-1.5 block text-sm font-medium text-foreground",children:[o("setupWizard.systemPrompt","System Prompt")," *"]}),e.jsx("textarea",{id:"wizard-prompt",value:n,onChange:i=>t(i.target.value),placeholder:o("setupWizard.promptPlaceholder","You are a helpful AI assistant that..."),rows:5,className:"w-full rounded-lg border border-input bg-background px-3 py-2.5 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring resize-y transition-shadow font-mono","data-testid":"wizard-system-prompt"}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:o("setupWizard.promptHint","This is the instruction that shapes how your agent behaves and responds.")})]})]})]})}function ye({provider:s,model:n,apiKey:r,baseUrl:t,onProviderChange:o,onModelChange:i,onApiKeyChange:u,onBaseUrlChange:f}){const{t:p}=z(),h=C(s),g=N.useMemo(()=>se[s]??[],[s]),b=`model-suggestions-${s}`,c=oe(s);return e.jsxs("div",{children:[e.jsx("h2",{className:"text-xl font-semibold text-foreground",children:p("setupWizard.llmTitle","LLM Configuration")}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:p("setupWizard.llmDesc","Choose the AI model that powers your agent")}),e.jsxs("div",{className:"mt-6 space-y-5",children:[e.jsxs("div",{children:[e.jsx("label",{className:"mb-1.5 block text-sm font-medium text-foreground",children:p("setupWizard.provider","Provider")}),e.jsxs("div",{className:"relative",children:[e.jsx("select",{value:s,onChange:d=>o(d.target.value),className:"w-full appearance-none rounded-lg border border-input bg-background px-3 py-2.5 pe-10 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring transition-shadow","data-testid":"wizard-provider",children:re.map(d=>e.jsx("option",{value:d.id,children:d.name},d.id))}),e.jsx(Y,{className:"pointer-events-none absolute inset-e-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"})]})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"wizard-model",className:"mb-1.5 block text-sm font-medium text-foreground",children:[p("setupWizard.model","Model")," *"]}),e.jsx("input",{id:"wizard-model",type:"text",list:b,value:n,onChange:d=>i(d.target.value),placeholder:p("setupWizard.modelPlaceholder","e.g. {{model}} (or any model your provider supports)",{model:(h==null?void 0:h.defaultModel)??""}),className:"w-full rounded-lg border border-input bg-background px-3 py-2.5 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring transition-shadow","data-testid":"wizard-model",autoComplete:"off"}),e.jsx("datalist",{id:b,children:g.map(d=>e.jsx("option",{value:d},d))}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:p("setupWizard.modelHint","Type any model name supported by your provider, or pick one from the suggestions")})]}),(h==null?void 0:h.needsKey)!==!1&&e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"wizard-apikey",className:"mb-1.5 block text-sm font-medium text-foreground",children:[p("setupWizard.apiKey","API Key")," *"]}),e.jsx(V,{value:r,onChange:u,placeholder:"sk-...",testId:"wizard-apikey"})]}),e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"wizard-baseurl",className:"mb-1.5 block text-sm font-medium text-foreground",children:[p("setupWizard.baseUrl","Base URL")," ",!c&&e.jsxs("span",{className:"text-muted-foreground font-normal",children:["(",p("setupWizard.optional","optional"),")"]}),c&&e.jsx("span",{className:"text-primary font-normal",children:"*"})]}),e.jsx("input",{id:"wizard-baseurl",type:"url",value:t,onChange:d=>f(d.target.value),placeholder:s==="ollama"?"http://localhost:11434":s==="jlama"?"http://localhost:8080":p("setupWizard.baseUrlPlaceholder","Custom endpoint URL"),className:"w-full rounded-lg border border-input bg-background px-3 py-2.5 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring transition-shadow","data-testid":"wizard-baseurl"}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:c?p("setupWizard.baseUrlHintLocal","Required — the URL where your local model server is running"):p("setupWizard.baseUrlHintCloud","Only needed if using a proxy, private deployment, or Azure OpenAI endpoint")})]})]})]})}const je=15e3,we=5*1024*1024;function ve({spec:s,specUrl:n,specInputMode:r,apiBaseUrl:t,apiAuth:o,endpoints:i,onSpecChange:u,onSpecUrlChange:f,onModeChange:p,onApiBaseUrlChange:h,onApiAuthChange:g,onEndpointsChange:b}){const{t:c}=z(),d=N.useRef(null),[x,A]=N.useState(!1),P=[{id:"url",icon:me,label:c("setupWizard.specByUrl","URL")},{id:"file",icon:M,label:c("setupWizard.specByFile","File")},{id:"paste",icon:X,label:c("setupWizard.specByPaste","Paste")}];async function R(){const a=n.trim();if(!a)return;let l;try{l=new URL(a)}catch{w.error(c("setupWizard.specUrlInvalid","That is not a valid URL"));return}if(l.protocol!=="http:"&&l.protocol!=="https:"){w.error(c("setupWizard.specUrlScheme","Only http:// and https:// URLs are supported"));return}A(!0);const m=new AbortController,j=setTimeout(()=>m.abort(),je);try{const y=await fetch(l.toString(),{signal:m.signal,credentials:"omit",referrerPolicy:"no-referrer",headers:{Accept:"application/json, application/yaml, text/plain;q=0.9"}});if(!y.ok)throw new Error(`HTTP ${y.status}`);const E=await xe(y,we);if(E===null){w.error(c("setupWizard.specTooLarge","That specification is too large to load here"));return}u(E),w.success(c("setupWizard.specFetched","Specification loaded!"))}catch{w.error(c("setupWizard.specFetchError","Failed to fetch specification"))}finally{clearTimeout(j),A(!1)}}function L(a){var j;const l=(j=a.target.files)==null?void 0:j[0];if(!l)return;const m=new FileReader;m.onload=()=>{u(m.result),w.success(c("setupWizard.specLoaded","File loaded: {{name}}",{name:l.name}))},m.readAsText(l)}function S(a){a.preventDefault();const l=a.dataTransfer.files[0];if(!l)return;const m=new FileReader;m.onload=()=>{u(m.result),p("file"),w.success(c("setupWizard.specLoaded","File loaded: {{name}}",{name:l.name}))},m.readAsText(l)}return e.jsxs("div",{children:[e.jsx("h2",{className:"text-xl font-semibold text-foreground",children:c("setupWizard.apiSpecTitle","OpenAPI Specification")}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:c("setupWizard.apiSpecDesc","Provide your API's OpenAPI/Swagger spec")}),e.jsx("div",{className:"mt-4 flex rounded-lg border border-border bg-secondary/30 p-1","data-testid":"spec-mode-tabs",children:P.map(a=>{const l=a.icon;return e.jsxs("button",{onClick:()=>p(a.id),className:v("flex flex-1 items-center justify-center gap-1.5 rounded-md px-3 py-2 text-sm font-medium transition-all",r===a.id?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"),children:[e.jsx(l,{className:"h-4 w-4"}),a.label]},a.id)})}),e.jsxs("div",{className:"mt-4 space-y-4",children:[r==="url"&&e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{type:"url",value:n,onChange:a=>f(a.target.value),placeholder:"https://api.example.com/openapi.json",className:"flex-1 rounded-lg border border-input bg-background px-3 py-2.5 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring transition-shadow","data-testid":"wizard-spec-url"}),e.jsxs("button",{onClick:R,disabled:x||!n.trim(),className:"inline-flex items-center gap-2 rounded-lg bg-primary px-4 py-2.5 text-sm font-medium text-primary-foreground shadow-sm transition-all hover:bg-primary/90 disabled:opacity-50 disabled:cursor-not-allowed","data-testid":"wizard-fetch-spec",children:[x?e.jsx(U,{className:"h-4 w-4 animate-spin"}):e.jsx(F,{className:"h-4 w-4"}),c("setupWizard.fetch","Fetch")]})]}),r==="file"&&e.jsxs("div",{onDrop:S,onDragOver:a=>a.preventDefault(),className:"flex flex-col items-center justify-center rounded-xl border-2 border-dashed border-border bg-secondary/20 p-8 text-center transition-colors hover:border-primary/40","data-testid":"wizard-spec-dropzone",children:[e.jsx(M,{className:"mb-3 h-8 w-8 text-muted-foreground"}),e.jsx("p",{className:"text-sm font-medium text-foreground",children:c("setupWizard.dropFile","Drop your OpenAPI file here")}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:c("setupWizard.dropHint","JSON or YAML format")}),e.jsxs("button",{onClick:()=>{var a;return(a=d.current)==null?void 0:a.click()},className:"mt-3 inline-flex items-center gap-1.5 rounded-lg border border-border px-3 py-1.5 text-sm font-medium text-muted-foreground transition-colors hover:bg-secondary hover:text-foreground",children:[e.jsx(M,{className:"h-3.5 w-3.5"}),c("setupWizard.browse","Browse Files")]}),e.jsx("input",{ref:d,type:"file",accept:".json,.yaml,.yml",onChange:L,className:"hidden","data-testid":"wizard-spec-file"})]}),r==="paste"&&e.jsx("textarea",{value:s,onChange:a=>u(a.target.value),placeholder:c("setupWizard.pasteSpec","Paste your OpenAPI/Swagger JSON or YAML here..."),rows:10,className:"w-full rounded-lg border border-input bg-background px-3 py-2.5 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring resize-y transition-shadow font-mono","data-testid":"wizard-spec-paste"}),s&&e.jsxs("div",{className:"flex items-center gap-2 rounded-lg bg-emerald-500/10 px-3 py-2 text-sm text-emerald-600 dark:text-emerald-400",children:[e.jsx(D,{className:"h-4 w-4 shrink-0"}),c("setupWizard.specReady","Specification loaded ({{chars}} chars)",{chars:s.length.toLocaleString()})]}),e.jsxs("div",{className:"grid grid-cols-1 gap-4 sm:grid-cols-2",children:[e.jsxs("div",{children:[e.jsxs("label",{className:"mb-1.5 block text-sm font-medium text-foreground",children:[c("setupWizard.apiBaseUrlLabel","API Base URL")," ",e.jsxs("span",{className:"text-muted-foreground font-normal",children:["(",c("setupWizard.optional","optional"),")"]})]}),e.jsx("input",{type:"url",value:t,onChange:a=>h(a.target.value),placeholder:"https://api.example.com",className:"w-full rounded-lg border border-input bg-background px-3 py-2.5 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring transition-shadow","data-testid":"wizard-api-baseurl"})]}),e.jsxs("div",{children:[e.jsxs("label",{className:"mb-1.5 block text-sm font-medium text-foreground",children:[c("setupWizard.apiAuthLabel","API Auth Header")," ",e.jsxs("span",{className:"text-muted-foreground font-normal",children:["(",c("setupWizard.optional","optional"),")"]})]}),e.jsx(V,{value:o,onChange:g,placeholder:"Bearer sk-...",testId:"wizard-api-auth"})]})]}),e.jsxs("div",{children:[e.jsxs("label",{className:"mb-1.5 block text-sm font-medium text-foreground",children:[c("setupWizard.endpointFilter","Endpoint Filter")," ",e.jsxs("span",{className:"text-muted-foreground font-normal",children:["(",c("setupWizard.optional","optional"),")"]})]}),e.jsx("input",{type:"text",value:i,onChange:a=>b(a.target.value),placeholder:c("setupWizard.endpointFilterPlaceholder","Comma-separated: GET /users, POST /orders"),className:"w-full rounded-lg border border-input bg-background px-3 py-2.5 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring transition-shadow","data-testid":"wizard-endpoints"})]})]})]})}function Ne({state:s,onChange:n}){const{t:r}=z();return e.jsxs("div",{children:[e.jsx("h2",{className:"text-xl font-semibold text-foreground",children:r("setupWizard.featuresTitle","Features & Options")}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:r("setupWizard.featuresDesc","Customize your agent's capabilities")}),e.jsxs("div",{className:"mt-6 space-y-4",children:[s.mode==="standard"&&e.jsxs("div",{className:"rounded-lg border border-border p-4 space-y-3",children:[e.jsx(W,{icon:ae,label:r("setupWizard.introMessage","Intro Message"),description:r("setupWizard.introMessageDesc","Greeting shown when a conversation starts"),checked:s.introMessage.length>0,onChange:t=>n({introMessage:t?s.introMessage||"Hello! How can I help you today?":""}),"data-testid":"wizard-toggle-intro"}),s.introMessage.length>0&&e.jsx("textarea",{value:s.introMessage,onChange:t=>n({introMessage:t.target.value}),rows:2,className:"w-full rounded-lg border border-input bg-background px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring resize-none transition-shadow","data-testid":"wizard-intro-text"})]}),e.jsxs("div",{className:"rounded-lg border border-border p-4 space-y-3",children:[e.jsx(W,{icon:X,label:r("setupWizard.structuredOutput","Structured Output"),description:r("setupWizard.structuredOutputDesc","LLM responds with a JSON object instead of plain text"),checked:s.enableQuickReplies||s.enableSentimentAnalysis,onChange:t=>{n(t?{enableQuickReplies:!0}:{enableQuickReplies:!1,enableSentimentAnalysis:!1})},"data-testid":"wizard-toggle-structured"}),(s.enableQuickReplies||s.enableSentimentAnalysis)&&e.jsxs("div",{className:"space-y-3 ps-9",children:[e.jsxs("div",{className:"flex items-start gap-2 rounded-md bg-amber-500/10 px-3 py-2 text-[11px] text-amber-700 dark:text-amber-400","data-testid":"structured-output-info",children:[e.jsx(q,{className:"mt-0.5 h-3.5 w-3.5 shrink-0"}),e.jsx("span",{children:r("setupWizard.structuredOutputInfo","Enabling this changes how the LLM responds: instead of plain text, it returns a JSON object with structured fields. A JSON schema is appended to your system prompt, and the model is set to JSON response mode.")})]}),e.jsx(W,{icon:B,label:r("setupWizard.quickReplies","Quick Replies"),description:r("setupWizard.quickRepliesDesc","LLM generates clickable reply suggestions"),checked:s.enableQuickReplies,onChange:t=>n({enableQuickReplies:t}),"data-testid":"wizard-toggle-qr"}),e.jsx(W,{icon:ne,label:r("setupWizard.sentiment","Sentiment Analysis"),description:r("setupWizard.sentimentDesc","Track user mood, intent and urgency in real-time"),checked:s.enableSentimentAnalysis,onChange:t=>n({enableSentimentAnalysis:t}),"data-testid":"wizard-toggle-sentiment"})]})]}),s.mode==="standard"&&e.jsxs("div",{className:"rounded-lg border border-border p-4 space-y-3",children:[e.jsx(W,{icon:O,label:r("setupWizard.builtInTools","Built-in Tools"),description:r("setupWizard.builtInToolsDesc","Enable EDDI's built-in tool library (calculator, datetime, etc.)"),checked:s.enableBuiltInTools,onChange:t=>n({enableBuiltInTools:t}),"data-testid":"wizard-toggle-tools"}),s.enableBuiltInTools&&e.jsxs("div",{className:"space-y-3 ps-9",children:[e.jsxs("div",{className:"flex items-center gap-1 rounded-lg border border-border bg-background p-0.5",role:"radiogroup","aria-label":r("setupWizard.builtInTools","Built-in Tools"),"data-testid":"wizard-tool-selection-mode",children:[e.jsxs("button",{type:"button",role:"radio","aria-checked":!s.builtInToolsWhitelist,onClick:()=>n({builtInToolsWhitelist:""}),className:`flex items-center gap-1.5 rounded-md px-3 py-1.5 text-xs font-medium transition-all ${s.builtInToolsWhitelist?"text-muted-foreground hover:text-foreground":"bg-primary text-primary-foreground shadow-sm"}`,"data-testid":"wizard-tool-mode-all",children:[e.jsx(k,{className:"h-3 w-3"}),r("setupWizard.allTools","All Tools")]}),e.jsxs("button",{type:"button",role:"radio","aria-checked":!!s.builtInToolsWhitelist,onClick:()=>{s.builtInToolsWhitelist||n({builtInToolsWhitelist:T.join(",")})},className:`flex items-center gap-1.5 rounded-md px-3 py-1.5 text-xs font-medium transition-all ${s.builtInToolsWhitelist?"bg-primary text-primary-foreground shadow-sm":"text-muted-foreground hover:text-foreground"}`,"data-testid":"wizard-tool-mode-specific",children:[e.jsx(le,{className:"h-3 w-3"}),r("setupWizard.selectSpecific","Select Specific")]})]}),!s.builtInToolsWhitelist&&e.jsxs("div",{className:"flex items-start gap-2 rounded-md bg-sky-500/10 px-3 py-2 text-xs text-sky-700 dark:text-sky-400","data-testid":"wizard-all-tools-info",children:[e.jsx(q,{className:"mt-0.5 h-3.5 w-3.5 shrink-0"}),e.jsx("span",{children:r("setupWizard.allToolsInfo",'All {{count}} built-in tools will be available to your agent. Switch to "Select Specific" to restrict which tools are enabled.',{count:T.length})})]}),s.builtInToolsWhitelist&&(()=>{const t=s.builtInToolsWhitelist.split(",").filter(Boolean);return e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:r("setupWizard.availableTools","Available Tools")}),e.jsx("span",{className:"text-[10px] text-muted-foreground",children:r("setupWizard.toolCount","{{selected}} of {{total}} selected",{selected:t.length,total:T.length})})]}),e.jsx("div",{className:"flex flex-wrap gap-1.5","data-testid":"wizard-tools-whitelist",children:T.map(o=>{const i=t.includes(o);return e.jsxs("button",{type:"button","aria-pressed":i,onClick:()=>{const u=i?t.filter(f=>f!==o):[...t,o];n({builtInToolsWhitelist:u.length>0?u.join(","):""})},className:`inline-flex items-center gap-1.5 rounded-full px-2.5 py-1.5 text-xs font-medium transition-all ${i?"bg-primary/15 text-primary border border-primary/30 shadow-sm":"bg-secondary/50 text-muted-foreground border border-transparent hover:border-border hover:text-foreground"}`,"data-testid":`wizard-tool-chip-${o}`,children:[i&&e.jsx(k,{className:"h-3 w-3"}),o]},o)})})]})})()]})]}),e.jsxs("div",{className:"mt-2 rounded-lg border border-primary/20 bg-primary/5 p-4",children:[e.jsx(W,{icon:I,label:r("setupWizard.autoDeploy","Auto-Deploy"),description:r("setupWizard.autoDeployDesc","Deploy the agent immediately after creation"),checked:s.deploy,onChange:t=>n({deploy:t}),"data-testid":"wizard-toggle-deploy"}),s.deploy&&e.jsxs("div",{className:"mt-3 flex items-center gap-3 ps-9",children:[e.jsxs("label",{className:"text-sm font-medium text-foreground",children:[r("setupWizard.environment","Environment"),":"]}),e.jsxs("div",{className:"relative",children:[e.jsxs("select",{value:s.environment,onChange:t=>n({environment:t.target.value}),className:"appearance-none rounded-lg border border-input bg-background px-3 py-1.5 pe-8 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring transition-shadow","data-testid":"wizard-environment",children:[e.jsx("option",{value:"production",children:r("setupWizard.envProduction","Production")}),e.jsx("option",{value:"test",children:r("setupWizard.envTest","Test")})]}),e.jsx(Y,{className:"pointer-events-none absolute inset-e-2 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground"})]})]})]})]})]})}function ze({state:s,error:n}){const{t:r}=z(),t=C(s.provider),o=[[r("setupWizard.reviewType","Type"),s.mode==="api"?r("setupWizard.apiAgent","API Agent"):r("setupWizard.standardAgent","Standard Agent")],[r("setupWizard.reviewName","Name"),s.name],[r("setupWizard.reviewPrompt","System Prompt"),s.systemPrompt.length>80?s.systemPrompt.slice(0,80)+"…":s.systemPrompt],[r("setupWizard.reviewProvider","Provider"),(t==null?void 0:t.name)??s.provider],[r("setupWizard.reviewModel","Model"),s.model]];return s.mode==="api"&&s.openApiSpec&&o.push([r("setupWizard.reviewSpec","OpenAPI Spec"),`${s.openApiSpec.length.toLocaleString()} chars`]),s.introMessage&&o.push([r("setupWizard.reviewIntro","Intro Message"),s.introMessage.length>60?s.introMessage.slice(0,60)+"…":s.introMessage]),s.enableQuickReplies&&o.push([r("setupWizard.quickReplies","Quick Replies"),"✓"]),s.enableSentimentAnalysis&&o.push([r("setupWizard.sentiment","Sentiment Analysis"),"✓"]),s.enableBuiltInTools&&o.push([r("setupWizard.builtInTools","Built-in Tools"),"✓"]),o.push([r("setupWizard.reviewDeploy","Deploy"),s.deploy?`✓ (${s.environment})`:"—"]),e.jsxs("div",{"data-testid":"wizard-review",children:[e.jsx("h2",{className:"text-xl font-semibold text-foreground",children:r("setupWizard.reviewTitle","Review & Create")}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:r("setupWizard.reviewDesc","Review your configuration before creating the agent")}),e.jsx("div",{className:"mt-6 rounded-lg border border-border divide-y divide-border overflow-hidden",children:o.map(([i,u],f)=>e.jsxs("div",{className:v("flex items-start justify-between gap-4 px-4 py-3",f%2===0&&"bg-secondary/30"),children:[e.jsx("span",{className:"text-sm font-medium text-muted-foreground whitespace-nowrap",children:i}),e.jsx("span",{className:"text-sm font-medium text-foreground text-end break-all max-w-xs",children:u})]},i))}),n&&e.jsxs("div",{className:"mt-4 flex items-start gap-2 rounded-lg bg-destructive/10 px-4 py-3 text-sm text-destructive",children:[e.jsx(H,{className:"mt-0.5 h-4 w-4 shrink-0"}),n]})]})}function W({icon:s,label:n,description:r,checked:t,onChange:o,"data-testid":i}){return e.jsxs("label",{className:"flex cursor-pointer items-start gap-3 rounded-lg p-0.5 transition-colors",children:[e.jsxs("div",{className:"relative mt-0.5 flex h-5 w-9 shrink-0 items-center rounded-full transition-colors duration-200",style:{backgroundColor:t?"var(--color-primary)":"var(--color-border)"},children:[e.jsx("span",{className:v("absolute h-4 w-4 rounded-full bg-white shadow-sm transition-transform duration-200",t?"translate-x-4":"translate-x-0.5")}),e.jsx("input",{type:"checkbox",checked:t,onChange:u=>o(u.target.checked),className:"sr-only","data-testid":i})]}),e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx(s,{className:"mt-0.5 h-4 w-4 shrink-0 text-muted-foreground"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium text-foreground",children:n}),e.jsx("p",{className:"text-xs text-muted-foreground",children:r})]})]})]})}export{Me as AgentWizardPage}; diff --git a/src/main/resources/META-INF/resources/assets/agents-Ds5MHAjX.js b/src/main/resources/META-INF/resources/assets/agents-DV22_WZ6.js similarity index 97% rename from src/main/resources/META-INF/resources/assets/agents-Ds5MHAjX.js rename to src/main/resources/META-INF/resources/assets/agents-DV22_WZ6.js index e70b9d508f..0e6ddbda51 100644 --- a/src/main/resources/META-INF/resources/assets/agents-Ds5MHAjX.js +++ b/src/main/resources/META-INF/resources/assets/agents-DV22_WZ6.js @@ -1,4 +1,4 @@ -import{x as ye,c as C,y as je,z as be,j as e,D as ie,i as M,E as he,C as Le,v as ze,r as x,G as Fe,H as $e,I as Ve,J as _e,t as qe,w as He,h as Ne,N as de,M as We,O as Ke,Q as Ye,R as ae,U as Ge,T as Qe,V as Xe,X as Ze,Y as ve,Z as we,_ as R,$ as Je,a0 as et,P as ke,a1 as tt,a2 as st,k as V,a3 as me,q as Se,a4 as nt,a5 as ne,a6 as re,a7 as rt,a8 as at,a9 as ot,aa as ue,e as ge,f as it,ab as ct,ac as lt,B as fe,ad as dt,S as te,ae as mt}from"./index-BY6d8wze.js";import{E as ut}from"./ellipsis-vertical-CtSedckm.js";import{D as De}from"./download-DZjrnAjT.js";import{A as gt}from"./accessible-dialog-BO2vat1a.js";import{R as xt,u as pt,a as ht,b as ft,c as yt,d as jt,e as bt,f as Nt,p as ce}from"./resource-type-badge-DrHzJ4gd.js";import{A as vt,S as wt}from"./action-badge-DHroL-w-.js";import{U as Ce}from"./upload-DxPMOlxt.js";import{R as kt}from"./resource-diff-viewer-D2tV_yay.js";import{E as St}from"./export-agent-dialog-DIJ6YUoj.js";import{C as Dt}from"./create-or-wizard-dialog-DrB8VzrL.js";import{E as Ct}from"./empty-state-DB7ZSzVv.js";import{E as At}from"./error-state-BXe3bnJT.js";import{I as It}from"./infinite-scroll-sentinel-DHJIRY3j.js";import{g as Et,V as Tt,s as Pt}from"./view-mode-TQOH38Sf.js";import{A as le}from"./arrow-up-down-Cz_fDxBo.js";import"./eye-off-DQKzJHI5.js";import"./eye-Dbrf-yrM.js";import"./circle-check-big-D1mokjbm.js";import"./lock-CPVVTGkJ.js";import"./wand-sparkles-DCdkrkbT.js";import"./layout-grid-BjGzFSfP.js";import"./list-CX0KxgtB.js";/** +import{x as ye,c as C,y as je,z as be,j as e,D as ie,i as M,E as he,C as Le,v as ze,r as x,G as Fe,H as $e,I as Ve,J as _e,t as qe,w as He,h as Ne,N as de,M as We,O as Ke,Q as Ye,R as ae,U as Ge,T as Qe,V as Xe,X as Ze,Y as ve,Z as we,_ as R,$ as Je,a0 as et,P as ke,a1 as tt,a2 as st,k as V,a3 as me,q as Se,a4 as nt,a5 as ne,a6 as re,a7 as rt,a8 as at,a9 as ot,aa as ue,e as ge,f as it,ab as ct,ac as lt,B as fe,ad as dt,S as te,ae as mt}from"./index-BnLj1hck.js";import{E as ut}from"./ellipsis-vertical-fP6IFBST.js";import{D as De}from"./download-CVl_y-4e.js";import{A as gt}from"./accessible-dialog-C2wu1H5q.js";import{R as xt,u as pt,a as ht,b as ft,c as yt,d as jt,e as bt,f as Nt,p as ce}from"./resource-type-badge-CKybsxy2.js";import{A as vt,S as wt}from"./action-badge-BjJgsogp.js";import{U as Ce}from"./upload-D1UCHnd4.js";import{R as kt}from"./resource-diff-viewer-DeowJcjr.js";import{E as St}from"./export-agent-dialog-Bf3D5WJZ.js";import{C as Dt}from"./create-or-wizard-dialog-qFzrzZXk.js";import{E as Ct}from"./empty-state-DxZE48rx.js";import{E as At}from"./error-state-D4qtZYFq.js";import{I as It}from"./infinite-scroll-sentinel-B_MaeDU1.js";import{g as Et,V as Tt,s as Pt}from"./view-mode-DguClt6l.js";import{A as le}from"./arrow-up-down-CQw9INyB.js";import"./eye-off-PKiH0Asw.js";import"./eye-xZR8Jj8Y.js";import"./circle-check-big-CBxGct8k.js";import"./lock-CL2SzOGd.js";import"./wand-sparkles-BtCP1jzO.js";import"./layout-grid-DZHuDrOW.js";import"./list-Dqf28LSX.js";/** * @license lucide-react v0.577.0 - ISC * * This source code is licensed under the ISC license. diff --git a/src/main/resources/META-INF/resources/assets/approvals-BKAl4l81.js b/src/main/resources/META-INF/resources/assets/approvals-BKAl4l81.js new file mode 100644 index 0000000000..6c45e6666c --- /dev/null +++ b/src/main/resources/META-INF/resources/assets/approvals-BKAl4l81.js @@ -0,0 +1 @@ +import{c as V,r as N,c1 as $,aq as U,c2 as M,c3 as J,ba as K,bb as W,j as s,al as E,a1 as F,T as D,ad as z,V as X,C as Q,i as S,ae as Y,bc as Z,o as ee,M as se,h as _,N as te,aB as ae,c4 as re,a7 as ne,bd as oe,_ as v,R as k}from"./index-BnLj1hck.js";import{f as ie,R as de}from"./blocked-calls-BqNBLu7Y.js";import{U as le}from"./user-check-BzuCEBUg.js";import"./resource-diff-viewer-DeowJcjr.js";import"./resources-D97MNqv3.js";function ce(e){return e.requestPreview?s.jsx(de,{preview:e.requestPreview,pinned:e.requestPinned,callId:e.callId}):null}function pe({item:e,onRequestConfirm:d,onToolDecide:R,onToolCancel:u,resumeMutation:o,cancelMutation:l}){var C,I,A,c;const{t:r}=V(),[x,y]=N.useState(!1),f=!e.groupId&&e.pauseType==="TOOL_CALL",b=e.pauseType==="HUMAN_TURN",i=Z(e.conversationId,x),T=o.isPending&&((C=o.variables)==null?void 0:C.conversationId)===e.conversationId||l.isPending&&l.variables===e.conversationId,w=N.useMemo(()=>{var h;const n=(h=i.data)==null?void 0:h.pauseDetails,j=(n==null?void 0:n.type)==="TOOL_CALL"?n.calls:void 0;return ie(j,e.agentId,e.conversationId,r)},[i.data,e.agentId,e.conversationId,r]);return s.jsxs(s.Fragment,{children:[s.jsxs("tr",{className:"hover:bg-muted/20 transition-colors",children:[s.jsx("td",{className:"px-4 py-3",children:s.jsx("span",{className:S("inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium",e.groupId?"bg-blue-500/10 text-blue-600":"bg-purple-500/10 text-purple-600"),children:e.groupId?s.jsxs(s.Fragment,{children:[s.jsx(ee,{className:"h-3 w-3"})," ",r("hitl.group","Group")]}):s.jsxs(s.Fragment,{children:[s.jsx(se,{className:"h-3 w-3"})," ",r("hitl.regular","Conversation")]})})}),s.jsx("td",{className:"px-4 py-3",children:s.jsxs(_,{to:e.groupId?`/manage/groups/${e.groupId}`:`/manage/conversationview/${e.conversationId}`,className:"font-mono text-xs text-primary hover:underline",children:[e.conversationId.slice(0,12),"…",s.jsx(te,{className:"ms-1 inline h-3 w-3"})]})}),s.jsxs("td",{className:"px-4 py-3 text-muted-foreground max-w-xs truncate",children:[e.pauseType==="TOOL_CALL"&&s.jsxs("span",{className:"me-1.5 inline-flex items-center gap-1 rounded-full bg-amber-500/10 px-2 py-0.5 text-[10px] font-medium text-amber-600","data-testid":`tool-badge-${e.conversationId}`,children:[s.jsx(ae,{className:"h-3 w-3"})," ",r("hitl.tool","Tool")]}),b&&s.jsxs("span",{className:"me-1.5 inline-flex items-center gap-1 rounded-full bg-primary/10 px-2 py-0.5 text-[10px] font-medium text-primary","data-testid":`human-turn-badge-${e.conversationId}`,children:[s.jsx(le,{className:"h-3 w-3"})," ",r("hitl.humanTurn","Member's turn")]}),e.pauseType==="TOOL_CALL"&&e.toolNames&&e.toolNames.length>0?e.toolNames.join(", "):b?r("hitl.humanTurnReason","Waiting on {{member}} to speak",{member:e.pendingMemberId||r("hitl.humanTurnMemberFallback","a member")}):e.pauseReason||"—"]}),s.jsx("td",{className:"px-4 py-3 text-muted-foreground text-xs",children:e.pausedAt?new Intl.DateTimeFormat(void 0,{dateStyle:"short",timeStyle:"medium"}).format(new Date(e.pausedAt)):"—"}),s.jsx("td",{className:"px-4 py-3",children:s.jsx("span",{className:"text-xs text-muted-foreground",children:re(r,e.timeoutPolicy)||"—"})}),s.jsx("td",{className:"px-4 py-3",children:s.jsxs("div",{className:"flex items-center justify-end gap-1",children:[f&&s.jsxs(s.Fragment,{children:[s.jsxs("button",{onClick:()=>y(n=>!n),"aria-expanded":x,className:"inline-flex items-center gap-1 rounded-md bg-amber-500/10 px-2.5 py-1 text-xs font-medium text-amber-600 hover:bg-amber-500/20 transition-colors","data-testid":`review-${e.conversationId}`,children:[x?r("common.close","Close"):r("hitl.review","Review"),s.jsx(ne,{className:S("h-3 w-3 transition-transform",x&&"rotate-180"),"aria-hidden":"true"})]}),s.jsx("button",{onClick:()=>d(e,"CANCEL"),disabled:l.isPending&&l.variables===e.conversationId,className:"rounded-md border border-border px-2.5 py-1 text-xs text-muted-foreground hover:bg-muted transition-colors disabled:opacity-50","data-testid":`cancel-${e.conversationId}`,children:r("hitl.cancel","Cancel")})]}),!e.groupId&&e.pauseType!=="TOOL_CALL"&&!b&&s.jsxs(s.Fragment,{children:[s.jsx("button",{onClick:()=>d(e,"APPROVED"),disabled:o.isPending&&((I=o.variables)==null?void 0:I.conversationId)===e.conversationId,className:"rounded-md bg-emerald-600 px-2.5 py-1 text-xs font-medium text-white hover:bg-emerald-500 transition-colors disabled:opacity-50","data-testid":`approve-${e.conversationId}`,children:r("hitl.approve","Approve")}),s.jsx("button",{onClick:()=>d(e,"REJECTED"),disabled:o.isPending&&((A=o.variables)==null?void 0:A.conversationId)===e.conversationId,className:"rounded-md bg-destructive px-2.5 py-1 text-xs font-medium text-destructive-foreground hover:bg-destructive/90 transition-colors disabled:opacity-50","data-testid":`reject-${e.conversationId}`,children:r("hitl.reject","Reject")}),s.jsx("button",{onClick:()=>d(e,"CANCEL"),disabled:l.isPending&&l.variables===e.conversationId,className:"rounded-md border border-border px-2.5 py-1 text-xs text-muted-foreground hover:bg-muted transition-colors disabled:opacity-50","data-testid":`cancel-${e.conversationId}`,children:r("hitl.cancel","Cancel")})]}),e.groupId&&s.jsx(_,{to:`/manage/groups/${e.groupId}`,className:"rounded-md border border-border px-2.5 py-1 text-xs text-primary hover:bg-muted transition-colors",children:r("common.view","View")})]})})]}),f&&x&&s.jsx("tr",{"data-testid":`tool-decision-row-${e.conversationId}`,children:s.jsx("td",{colSpan:6,className:"bg-muted/10 p-0",children:s.jsx("div",{className:"w-0 min-w-full px-4 py-4",children:s.jsx(oe,{surface:"regular",pauseReason:e.pauseReason??void 0,pausedAt:e.pausedAt,timeoutPolicy:e.timeoutPolicy??void 0,approvalTimeout:e.approvalTimeout??void 0,pauseDetails:((c=i.data)==null?void 0:c.pauseDetails)??null,pauseDetailsPending:i.isLoading,pauseDetailsError:i.isError,onRetryPauseDetails:()=>void i.refetch(),isSubmitting:T,requireExplicitPerCall:!0,blockedCalls:w,renderCallExtra:ce,onDecide:(n,j,h,m)=>R(e,n,j,m),onCancel:()=>u(e)})})})})]})}function ve(){const{t:e}=V(),[d,R]=N.useState(""),[u,o]=N.useState(null),l=$("eddi-admin"),r=$("eddi-approver"),x=l||r,y=U(),{data:f,isLoading:b,isError:i,refetch:T}=M(),{data:w,isLoading:C,isError:I,truncated:A}=J(),c=K(),n=W(),j=N.useMemo(()=>{const t=new Set;return[...f??[],...w??[]].filter(a=>t.has(a.conversationId)?!1:(t.add(a.conversationId),!0))},[f,w]),h=()=>{T(),y.invalidateQueries({queryKey:["all-group-pending-approvals"]})},m=j.filter(t=>{var p,P,L,q;if(!d)return!0;const a=d.toLowerCase();return((p=t.conversationId)==null?void 0:p.toLowerCase().includes(a))||((P=t.agentId)==null?void 0:P.toLowerCase().includes(a))||((L=t.pauseReason)==null?void 0:L.toLowerCase().includes(a))||((q=t.userId)==null?void 0:q.toLowerCase().includes(a))}),B=(t,a)=>{t.groupId||c.mutate({conversationId:t.conversationId,decision:{verdict:a}},{onSuccess:()=>v.success(a==="APPROVED"?e("hitl.approved","Approved"):e("hitl.rejected","Rejected")),onError:p=>v.error(k(p))})},G=(t,a,p,P)=>{c.mutate({conversationId:t.conversationId,decision:{verdict:a,note:p,toolDecisions:P}},{onSuccess:()=>{v.success(a==="APPROVED"?e("hitl.approved","Approved"):e("hitl.rejected","Rejected")),y.removeQueries({queryKey:["approval-status",t.conversationId]})},onError:L=>v.error(k(L))})},O=t=>{t.groupId||n.mutate(t.conversationId,{onSuccess:()=>v.success(e("hitl.cancelled","Cancelled")),onError:a=>v.error(k(a))})},H=()=>{if(!u)return;const{item:t,action:a}=u;o(null),a==="CANCEL"?O(t):B(t,a)},g=(()=>{if(!u)return null;switch(u.action){case"APPROVED":return{title:e("hitl.confirmApproveTitle","Approve request?"),description:e("hitl.confirmApproveDescription","Approve and resume this conversation?"),confirmLabel:e("hitl.approve","Approve"),variant:"warning",isPending:c.isPending};case"REJECTED":return{title:e("hitl.confirmRejectTitle","Reject request?"),description:e("hitl.confirmRejectDescription","Reject this request? The conversation will not proceed."),confirmLabel:e("hitl.reject","Reject"),variant:"destructive",isPending:c.isPending};case"CANCEL":return{title:e("hitl.confirmCancelTitle","Cancel conversation?"),description:e("hitl.confirmCancelDescription","Cancel this conversation? Any in-progress work is aborted."),confirmLabel:e("hitl.confirmCancelButton","Cancel conversation"),variant:"destructive",isPending:n.isPending}}})();return b||C?s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsxs("h1",{className:"flex items-center gap-2 text-3xl font-bold text-foreground",children:[s.jsx(E,{className:"h-8 w-8 text-primary"}),e("pages.approvals","Pending Approvals")]}),s.jsx("p",{className:"text-muted-foreground",children:e("pages.approvalsSubtitle","Review and decide on conversations awaiting human input")})]}),s.jsxs("div",{className:"rounded-xl border bg-card p-12 text-center",children:[s.jsx(F,{className:"mx-auto h-8 w-8 animate-spin text-muted-foreground"}),s.jsx("p",{className:"mt-3 text-muted-foreground",children:e("common.loading","Loading…")})]})]}):i?s.jsxs("div",{className:"space-y-6",children:[s.jsxs("h1",{className:"flex items-center gap-2 text-3xl font-bold text-foreground",children:[s.jsx(E,{className:"h-8 w-8 text-primary"}),e("pages.approvals","Pending Approvals")]}),s.jsxs("div",{className:"rounded-xl border border-destructive/30 bg-destructive/5 p-8 text-center",children:[s.jsx(D,{className:"mx-auto h-8 w-8 text-destructive"}),s.jsx("p",{className:"mt-2 text-destructive",children:e("common.loadError","Failed to load data")}),s.jsx("button",{onClick:h,className:"mt-3 text-sm text-primary hover:underline",children:e("common.retry","Retry")})]})]}):s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsxs("h1",{className:"flex items-center gap-2 text-3xl font-bold text-foreground",children:[s.jsx(E,{className:"h-8 w-8 text-primary"}),e("pages.approvals","Pending Approvals")]}),s.jsx("p",{className:"text-muted-foreground",children:e("pages.approvalsSubtitle","Review and decide on conversations awaiting human input")})]}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsxs("div",{className:"relative",children:[s.jsx(z,{className:"absolute start-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),s.jsx("input",{type:"text",value:d,onChange:t=>R(t.target.value),placeholder:e("common.search","Search…"),className:"h-10 w-64 rounded-lg border border-input bg-background ps-9 pe-4 text-sm placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring","data-testid":"approval-search"})]}),s.jsx("button",{onClick:h,"aria-label":e("common.refresh","Refresh"),title:e("common.refresh","Refresh"),className:"inline-flex items-center gap-1.5 rounded-lg border border-input bg-background px-3 py-2 text-sm font-medium text-foreground hover:bg-muted transition-colors","data-testid":"refresh-approvals",children:s.jsx(F,{className:"h-4 w-4","aria-hidden":"true"})})]})]}),s.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[s.jsx("span",{className:S("inline-flex items-center gap-1.5 rounded-full px-3 py-1.5 text-sm font-medium",m.length>0?"bg-amber-500/10 text-amber-600":"bg-emerald-500/10 text-emerald-600"),children:m.length>0?s.jsxs(s.Fragment,{children:[s.jsx(X,{className:"h-4 w-4"})," ",m.length," ",e("hitl.pending","pending")]}):s.jsxs(s.Fragment,{children:[s.jsx(Q,{className:"h-4 w-4"})," ",e("hitl.emptyQueue","No pending approvals")]})}),s.jsx("span",{className:"text-xs text-muted-foreground","data-testid":"approvals-scope",children:x?e("hitl.scopeAll","Showing all pending approvals across the system."):e("hitl.scopeOwn","Showing pending approvals for your conversations.")}),A&&s.jsxs("span",{className:"inline-flex items-center gap-1 text-xs text-muted-foreground","data-testid":"approvals-truncated",children:[s.jsx(D,{className:"h-3.5 w-3.5 text-amber-500"}),e("hitl.groupsTruncated","More group approvals exist than are shown here.")]}),I&&!i&&s.jsxs("span",{className:"inline-flex items-center gap-1 text-xs text-destructive","data-testid":"approvals-groups-error",children:[s.jsx(D,{className:"h-3.5 w-3.5"}),e("hitl.groupsLoadError","Group approvals could not be loaded.")]})]}),m.length===0?s.jsxs("div",{className:"rounded-xl border bg-card p-12 text-center",children:[s.jsx(Q,{className:"mx-auto h-12 w-12 text-emerald-500/50"}),s.jsx("h3",{className:"mt-4 text-lg font-semibold text-foreground",children:e("hitl.emptyQueue","No pending approvals")}),s.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:e("hitl.emptyQueueDescription","All conversations are flowing — no human input needed right now.")})]}):s.jsx("div",{className:"rounded-xl border bg-card shadow-sm overflow-x-auto",children:s.jsxs("table",{className:"w-full text-sm","data-testid":"approval-queue-table",children:[s.jsx("thead",{children:s.jsxs("tr",{className:"border-b bg-muted/30",children:[s.jsx("th",{className:"px-4 py-3 text-start font-medium text-muted-foreground",children:e("hitl.surface","Surface")}),s.jsx("th",{className:"px-4 py-3 text-start font-medium text-muted-foreground",children:"ID"}),s.jsx("th",{className:"px-4 py-3 text-start font-medium text-muted-foreground",children:e("hitl.pauseReason","Reason")}),s.jsx("th",{className:"px-4 py-3 text-start font-medium text-muted-foreground",children:e("hitl.pausedAt","Paused")}),s.jsx("th",{className:"px-4 py-3 text-start font-medium text-muted-foreground",children:e("hitl.timeoutPolicy","Timeout")}),s.jsx("th",{className:"px-4 py-3 text-end font-medium text-muted-foreground",children:e("common.actions","Actions")})]})}),s.jsx("tbody",{className:"divide-y",children:m.map(t=>s.jsx(pe,{item:t,onRequestConfirm:(a,p)=>o({item:a,action:p}),onToolDecide:G,onToolCancel:O,resumeMutation:c,cancelMutation:n},t.conversationId))})]})}),g&&s.jsx(Y,{open:u!==null,onOpenChange:t=>{t||o(null)},title:g.title,description:g.description,confirmLabel:g.confirmLabel,cancelLabel:e("hitl.confirmDismiss","Go back"),variant:g.variant,isPending:g.isPending,onConfirm:H})]})}export{ve as ApprovalsPage}; diff --git a/src/main/resources/META-INF/resources/assets/approvals-C-kJIZKJ.js b/src/main/resources/META-INF/resources/assets/approvals-C-kJIZKJ.js deleted file mode 100644 index b4e3a0a9a8..0000000000 --- a/src/main/resources/META-INF/resources/assets/approvals-C-kJIZKJ.js +++ /dev/null @@ -1 +0,0 @@ -import{c as V,r as N,c0 as $,aq as U,c1 as M,c2 as J,ba as K,bb as W,j as s,al as E,a1 as F,T as D,ad as z,V as X,C as Q,i as S,ae as Y,bc as Z,o as ee,M as se,h as _,N as te,aB as re,c3 as ae,a7 as ne,bd as oe,_ as v,R as k}from"./index-BY6d8wze.js";import{f as ie,R as de}from"./blocked-calls-BfQrNh_6.js";import{U as le}from"./user-check-DqvaRbNC.js";import"./resources-R5ikMSzo.js";import"./resource-diff-viewer-D2tV_yay.js";function ce(e){return e.requestPreview?s.jsx(de,{preview:e.requestPreview,pinned:e.requestPinned,callId:e.callId}):null}function pe({item:e,onRequestConfirm:d,onToolDecide:R,onToolCancel:u,resumeMutation:o,cancelMutation:l}){var C,I,A,c;const{t:a}=V(),[x,y]=N.useState(!1),f=!e.groupId&&e.pauseType==="TOOL_CALL",b=e.pauseType==="HUMAN_TURN",i=Z(e.conversationId,x),T=o.isPending&&((C=o.variables)==null?void 0:C.conversationId)===e.conversationId||l.isPending&&l.variables===e.conversationId,w=N.useMemo(()=>{var h;const n=(h=i.data)==null?void 0:h.pauseDetails,j=(n==null?void 0:n.type)==="TOOL_CALL"?n.calls:void 0;return ie(j,e.agentId,e.conversationId,a)},[i.data,e.agentId,e.conversationId,a]);return s.jsxs(s.Fragment,{children:[s.jsxs("tr",{className:"hover:bg-muted/20 transition-colors",children:[s.jsx("td",{className:"px-4 py-3",children:s.jsx("span",{className:S("inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium",e.groupId?"bg-blue-500/10 text-blue-600":"bg-purple-500/10 text-purple-600"),children:e.groupId?s.jsxs(s.Fragment,{children:[s.jsx(ee,{className:"h-3 w-3"})," ",a("hitl.group","Group")]}):s.jsxs(s.Fragment,{children:[s.jsx(se,{className:"h-3 w-3"})," ",a("hitl.regular","Conversation")]})})}),s.jsx("td",{className:"px-4 py-3",children:s.jsxs(_,{to:e.groupId?`/manage/groups/${e.groupId}`:`/manage/conversationview/${e.conversationId}`,className:"font-mono text-xs text-primary hover:underline",children:[e.conversationId.slice(0,12),"…",s.jsx(te,{className:"ms-1 inline h-3 w-3"})]})}),s.jsxs("td",{className:"px-4 py-3 text-muted-foreground max-w-xs truncate",children:[e.pauseType==="TOOL_CALL"&&s.jsxs("span",{className:"me-1.5 inline-flex items-center gap-1 rounded-full bg-amber-500/10 px-2 py-0.5 text-[10px] font-medium text-amber-600","data-testid":`tool-badge-${e.conversationId}`,children:[s.jsx(re,{className:"h-3 w-3"})," ",a("hitl.tool","Tool")]}),b&&s.jsxs("span",{className:"me-1.5 inline-flex items-center gap-1 rounded-full bg-primary/10 px-2 py-0.5 text-[10px] font-medium text-primary","data-testid":`human-turn-badge-${e.conversationId}`,children:[s.jsx(le,{className:"h-3 w-3"})," ",a("hitl.humanTurn","Member's turn")]}),e.pauseType==="TOOL_CALL"&&e.toolNames&&e.toolNames.length>0?e.toolNames.join(", "):b?a("hitl.humanTurnReason","Waiting on {{member}} to speak",{member:e.pendingMemberId||a("hitl.humanTurnMemberFallback","a member")}):e.pauseReason||"—"]}),s.jsx("td",{className:"px-4 py-3 text-muted-foreground text-xs",children:e.pausedAt?new Intl.DateTimeFormat(void 0,{dateStyle:"short",timeStyle:"medium"}).format(new Date(e.pausedAt)):"—"}),s.jsx("td",{className:"px-4 py-3",children:s.jsx("span",{className:"text-xs text-muted-foreground",children:ae(a,e.timeoutPolicy)||"—"})}),s.jsx("td",{className:"px-4 py-3",children:s.jsxs("div",{className:"flex items-center justify-end gap-1",children:[f&&s.jsxs(s.Fragment,{children:[s.jsxs("button",{onClick:()=>y(n=>!n),"aria-expanded":x,className:"inline-flex items-center gap-1 rounded-md bg-amber-500/10 px-2.5 py-1 text-xs font-medium text-amber-600 hover:bg-amber-500/20 transition-colors","data-testid":`review-${e.conversationId}`,children:[x?a("common.close","Close"):a("hitl.review","Review"),s.jsx(ne,{className:S("h-3 w-3 transition-transform",x&&"rotate-180"),"aria-hidden":"true"})]}),s.jsx("button",{onClick:()=>d(e,"CANCEL"),disabled:l.isPending&&l.variables===e.conversationId,className:"rounded-md border border-border px-2.5 py-1 text-xs text-muted-foreground hover:bg-muted transition-colors disabled:opacity-50","data-testid":`cancel-${e.conversationId}`,children:a("hitl.cancel","Cancel")})]}),!e.groupId&&e.pauseType!=="TOOL_CALL"&&!b&&s.jsxs(s.Fragment,{children:[s.jsx("button",{onClick:()=>d(e,"APPROVED"),disabled:o.isPending&&((I=o.variables)==null?void 0:I.conversationId)===e.conversationId,className:"rounded-md bg-emerald-600 px-2.5 py-1 text-xs font-medium text-white hover:bg-emerald-500 transition-colors disabled:opacity-50","data-testid":`approve-${e.conversationId}`,children:a("hitl.approve","Approve")}),s.jsx("button",{onClick:()=>d(e,"REJECTED"),disabled:o.isPending&&((A=o.variables)==null?void 0:A.conversationId)===e.conversationId,className:"rounded-md bg-destructive px-2.5 py-1 text-xs font-medium text-destructive-foreground hover:bg-destructive/90 transition-colors disabled:opacity-50","data-testid":`reject-${e.conversationId}`,children:a("hitl.reject","Reject")}),s.jsx("button",{onClick:()=>d(e,"CANCEL"),disabled:l.isPending&&l.variables===e.conversationId,className:"rounded-md border border-border px-2.5 py-1 text-xs text-muted-foreground hover:bg-muted transition-colors disabled:opacity-50","data-testid":`cancel-${e.conversationId}`,children:a("hitl.cancel","Cancel")})]}),e.groupId&&s.jsx(_,{to:`/manage/groups/${e.groupId}`,className:"rounded-md border border-border px-2.5 py-1 text-xs text-primary hover:bg-muted transition-colors",children:a("common.view","View")})]})})]}),f&&x&&s.jsx("tr",{"data-testid":`tool-decision-row-${e.conversationId}`,children:s.jsx("td",{colSpan:6,className:"bg-muted/10 px-4 py-4",children:s.jsx(oe,{surface:"regular",pauseReason:e.pauseReason??void 0,pausedAt:e.pausedAt,timeoutPolicy:e.timeoutPolicy??void 0,approvalTimeout:e.approvalTimeout??void 0,pauseDetails:((c=i.data)==null?void 0:c.pauseDetails)??null,pauseDetailsPending:i.isLoading,pauseDetailsError:i.isError,onRetryPauseDetails:()=>void i.refetch(),isSubmitting:T,requireExplicitPerCall:!0,blockedCalls:w,renderCallExtra:ce,onDecide:(n,j,h,m)=>R(e,n,j,m),onCancel:()=>u(e)})})})]})}function ve(){const{t:e}=V(),[d,R]=N.useState(""),[u,o]=N.useState(null),l=$("eddi-admin"),a=$("eddi-approver"),x=l||a,y=U(),{data:f,isLoading:b,isError:i,refetch:T}=M(),{data:w,isLoading:C,isError:I,truncated:A}=J(),c=K(),n=W(),j=N.useMemo(()=>{const t=new Set;return[...f??[],...w??[]].filter(r=>t.has(r.conversationId)?!1:(t.add(r.conversationId),!0))},[f,w]),h=()=>{T(),y.invalidateQueries({queryKey:["all-group-pending-approvals"]})},m=j.filter(t=>{var p,P,L,q;if(!d)return!0;const r=d.toLowerCase();return((p=t.conversationId)==null?void 0:p.toLowerCase().includes(r))||((P=t.agentId)==null?void 0:P.toLowerCase().includes(r))||((L=t.pauseReason)==null?void 0:L.toLowerCase().includes(r))||((q=t.userId)==null?void 0:q.toLowerCase().includes(r))}),B=(t,r)=>{t.groupId||c.mutate({conversationId:t.conversationId,decision:{verdict:r}},{onSuccess:()=>v.success(r==="APPROVED"?e("hitl.approved","Approved"):e("hitl.rejected","Rejected")),onError:p=>v.error(k(p))})},G=(t,r,p,P)=>{c.mutate({conversationId:t.conversationId,decision:{verdict:r,note:p,toolDecisions:P}},{onSuccess:()=>{v.success(r==="APPROVED"?e("hitl.approved","Approved"):e("hitl.rejected","Rejected")),y.removeQueries({queryKey:["approval-status",t.conversationId]})},onError:L=>v.error(k(L))})},O=t=>{t.groupId||n.mutate(t.conversationId,{onSuccess:()=>v.success(e("hitl.cancelled","Cancelled")),onError:r=>v.error(k(r))})},H=()=>{if(!u)return;const{item:t,action:r}=u;o(null),r==="CANCEL"?O(t):B(t,r)},g=(()=>{if(!u)return null;switch(u.action){case"APPROVED":return{title:e("hitl.confirmApproveTitle","Approve request?"),description:e("hitl.confirmApproveDescription","Approve and resume this conversation?"),confirmLabel:e("hitl.approve","Approve"),variant:"warning",isPending:c.isPending};case"REJECTED":return{title:e("hitl.confirmRejectTitle","Reject request?"),description:e("hitl.confirmRejectDescription","Reject this request? The conversation will not proceed."),confirmLabel:e("hitl.reject","Reject"),variant:"destructive",isPending:c.isPending};case"CANCEL":return{title:e("hitl.confirmCancelTitle","Cancel conversation?"),description:e("hitl.confirmCancelDescription","Cancel this conversation? Any in-progress work is aborted."),confirmLabel:e("hitl.confirmCancelButton","Cancel conversation"),variant:"destructive",isPending:n.isPending}}})();return b||C?s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsxs("h1",{className:"flex items-center gap-2 text-3xl font-bold text-foreground",children:[s.jsx(E,{className:"h-8 w-8 text-primary"}),e("pages.approvals","Pending Approvals")]}),s.jsx("p",{className:"text-muted-foreground",children:e("pages.approvalsSubtitle","Review and decide on conversations awaiting human input")})]}),s.jsxs("div",{className:"rounded-xl border bg-card p-12 text-center",children:[s.jsx(F,{className:"mx-auto h-8 w-8 animate-spin text-muted-foreground"}),s.jsx("p",{className:"mt-3 text-muted-foreground",children:e("common.loading","Loading…")})]})]}):i?s.jsxs("div",{className:"space-y-6",children:[s.jsxs("h1",{className:"flex items-center gap-2 text-3xl font-bold text-foreground",children:[s.jsx(E,{className:"h-8 w-8 text-primary"}),e("pages.approvals","Pending Approvals")]}),s.jsxs("div",{className:"rounded-xl border border-destructive/30 bg-destructive/5 p-8 text-center",children:[s.jsx(D,{className:"mx-auto h-8 w-8 text-destructive"}),s.jsx("p",{className:"mt-2 text-destructive",children:e("common.loadError","Failed to load data")}),s.jsx("button",{onClick:h,className:"mt-3 text-sm text-primary hover:underline",children:e("common.retry","Retry")})]})]}):s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsxs("h1",{className:"flex items-center gap-2 text-3xl font-bold text-foreground",children:[s.jsx(E,{className:"h-8 w-8 text-primary"}),e("pages.approvals","Pending Approvals")]}),s.jsx("p",{className:"text-muted-foreground",children:e("pages.approvalsSubtitle","Review and decide on conversations awaiting human input")})]}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsxs("div",{className:"relative",children:[s.jsx(z,{className:"absolute start-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),s.jsx("input",{type:"text",value:d,onChange:t=>R(t.target.value),placeholder:e("common.search","Search…"),className:"h-10 w-64 rounded-lg border border-input bg-background ps-9 pe-4 text-sm placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring","data-testid":"approval-search"})]}),s.jsx("button",{onClick:h,"aria-label":e("common.refresh","Refresh"),title:e("common.refresh","Refresh"),className:"inline-flex items-center gap-1.5 rounded-lg border border-input bg-background px-3 py-2 text-sm font-medium text-foreground hover:bg-muted transition-colors","data-testid":"refresh-approvals",children:s.jsx(F,{className:"h-4 w-4","aria-hidden":"true"})})]})]}),s.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[s.jsx("span",{className:S("inline-flex items-center gap-1.5 rounded-full px-3 py-1.5 text-sm font-medium",m.length>0?"bg-amber-500/10 text-amber-600":"bg-emerald-500/10 text-emerald-600"),children:m.length>0?s.jsxs(s.Fragment,{children:[s.jsx(X,{className:"h-4 w-4"})," ",m.length," ",e("hitl.pending","pending")]}):s.jsxs(s.Fragment,{children:[s.jsx(Q,{className:"h-4 w-4"})," ",e("hitl.emptyQueue","No pending approvals")]})}),s.jsx("span",{className:"text-xs text-muted-foreground","data-testid":"approvals-scope",children:x?e("hitl.scopeAll","Showing all pending approvals across the system."):e("hitl.scopeOwn","Showing pending approvals for your conversations.")}),A&&s.jsxs("span",{className:"inline-flex items-center gap-1 text-xs text-muted-foreground","data-testid":"approvals-truncated",children:[s.jsx(D,{className:"h-3.5 w-3.5 text-amber-500"}),e("hitl.groupsTruncated","More group approvals exist than are shown here.")]}),I&&!i&&s.jsxs("span",{className:"inline-flex items-center gap-1 text-xs text-destructive","data-testid":"approvals-groups-error",children:[s.jsx(D,{className:"h-3.5 w-3.5"}),e("hitl.groupsLoadError","Group approvals could not be loaded.")]})]}),m.length===0?s.jsxs("div",{className:"rounded-xl border bg-card p-12 text-center",children:[s.jsx(Q,{className:"mx-auto h-12 w-12 text-emerald-500/50"}),s.jsx("h3",{className:"mt-4 text-lg font-semibold text-foreground",children:e("hitl.emptyQueue","No pending approvals")}),s.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:e("hitl.emptyQueueDescription","All conversations are flowing — no human input needed right now.")})]}):s.jsx("div",{className:"rounded-xl border bg-card shadow-sm overflow-hidden",children:s.jsxs("table",{className:"w-full text-sm","data-testid":"approval-queue-table",children:[s.jsx("thead",{children:s.jsxs("tr",{className:"border-b bg-muted/30",children:[s.jsx("th",{className:"px-4 py-3 text-start font-medium text-muted-foreground",children:e("hitl.surface","Surface")}),s.jsx("th",{className:"px-4 py-3 text-start font-medium text-muted-foreground",children:"ID"}),s.jsx("th",{className:"px-4 py-3 text-start font-medium text-muted-foreground",children:e("hitl.pauseReason","Reason")}),s.jsx("th",{className:"px-4 py-3 text-start font-medium text-muted-foreground",children:e("hitl.pausedAt","Paused")}),s.jsx("th",{className:"px-4 py-3 text-start font-medium text-muted-foreground",children:e("hitl.timeoutPolicy","Timeout")}),s.jsx("th",{className:"px-4 py-3 text-end font-medium text-muted-foreground",children:e("common.actions","Actions")})]})}),s.jsx("tbody",{className:"divide-y",children:m.map(t=>s.jsx(pe,{item:t,onRequestConfirm:(r,p)=>o({item:r,action:p}),onToolDecide:G,onToolCancel:O,resumeMutation:c,cancelMutation:n},t.conversationId))})]})}),g&&s.jsx(Y,{open:u!==null,onOpenChange:t=>{t||o(null)},title:g.title,description:g.description,confirmLabel:g.confirmLabel,cancelLabel:e("hitl.confirmDismiss","Go back"),variant:g.variant,isPending:g.isPending,onConfirm:H})]})}export{ve as ApprovalsPage}; diff --git a/src/main/resources/META-INF/resources/assets/ar-5iaUFqk2.js b/src/main/resources/META-INF/resources/assets/ar-5iaUFqk2.js deleted file mode 100644 index 8e6919d8b4..0000000000 --- a/src/main/resources/META-INF/resources/assets/ar-5iaUFqk2.js +++ /dev/null @@ -1 +0,0 @@ -const e={title:"المرفقات",empty:"لا تحتوي هذه المحادثة على مرفقات.",loadError:"تعذّر تحميل المرفقات.",deleteAll:"حذف الكل",delete:"حذف المرفق",download:"تنزيل",deleted:"تم حذف المرفق",deletedAll:"تم حذف {{count}} مرفقات",confirmDeleteTitle:"حذف المرفق؟",confirmDeleteDesc:"يحذف هذا الملف نهائيًا. لا يمكن التراجع.",confirmDeleteAllTitle:"حذف جميع المرفقات؟",confirmDeleteAllDesc:"يحذف نهائيًا كل ملفات هذه المحادثة. لا يمكن التراجع."},t={title:"مدير EDDI",description:"لوحة تحكم منصة EDDI للذكاء الاصطناعي"},o={login:"تسجيل الدخول",logout:"تسجيل الخروج",loading:"جارٍ المصادقة…",sessionExpired:"انتهت الجلسة. يرجى تسجيل الدخول مجدداً.",profile:"الملف الشخصي",guest:"زائر",userMenu:"قائمة المستخدم"},n={dashboard:"لوحة التحكم",agents:"الوكلاء",packages:"مسارات العمل",conversations:"محادثات",coordinator:"المنسق",schedules:"الجداول",logs:"السجلات",orphans:"يتيمة",secrets:"الأسرار",audit:"سجل التدقيق",quotas:"الحصص",groups:"مجموعات",chat:"دردشة",resources:"الموارد",sectionManagement:"الإدارة",sectionDevelopment:"التطوير",sectionOperations:"العمليات",mainNavigation:"التنقل الرئيسي",openMenu:"فتح قائمة التنقل",sectionCore:"الأساسي",sectionBuild:"البناء والاختبار",sectionMonitor:"المراقبة",sectionAdmin:"الإدارة",studio:"الاستوديو",gdpr:"الخصوصية",memories:"ذاكرة المستخدم",properties:"الخصائص",triggers:"المشغلات",capabilities:"القدرات",sync:"المزامنة",updates:"التحديثات",channels:"القنوات",approvals:"الموافقات",userConversations:"محادثات المستخدم",userData:"بيانات المستخدم",variables:"المتغيرات",sectionExternal:"خارجي",activeConversations:"المحادثات النشطة",openapi:"OpenAPI",docs:"التوثيق",modeManager:"المدير",modeWorkforce:"فريق العمل",switchMode:"تبديل مساحة العمل",operator:"مُشغّل المنصة",workforce:"فريق العمل",monitoring:"مراقبة المحادثات",analytics:"التحليلات"},a={light:"فاتح",dark:"داكن",system:"نظام"},r={label:"اللغة",en:"English",de:"Deutsch",fr:"Français",es:"Español",ar:"العربية",zh:"中文",th:"ไทย",ja:"日本語",ko:"한국어",pt:"Português",hi:"हिन्दी",switchFailed:"تعذّر تحميل هذه اللغة. يرجى المحاولة مرة أخرى."},s={dashboard:{title:"لوحة التحكم",subtitle:"نظرة عامة على Agents EDDI والمحادثات",activeAgents:"Agents نشطة",totalWorkflows:"مسارات العمل",totalResources:"الموارد",totalConversations:"محادثات",quickActions:"إجراءات سريعة",recentAgents:"أحدث Agents",noRecentAgents:"لا توجد Agents بعد. أنشئ أول Agent!"},agents:{undeployPreviousVersionsHint:"يزيل أيضًا كل إصدار سابق لهذا الوكيل من البيئة.",undeployPreviousVersionsLabel:"إلغاء نشر هذا الإصدار وجميع الإصدارات السابقة",undeployEndConversationsHint:"ينهي فورًا كل محادثة جارية على هذا النشر. لا يمكن التراجع.",undeployEndConversationsLabel:"إنهاء جميع المحادثات النشطة",confirmUndeployDescription:"سيتم إلغاء نشر الإصدار {{version}} من {{environment}}.",confirmUndeploy:"إلغاء نشر الوكيل؟",title:"الوكلاء",subtitle:"إدارة Agents الذكاء الاصطناعي"},packages:{title:"مسارات العمل",subtitle:"تكوين Workflows وإضافات Agents"},conversations:{permanentDeleteSuccess:"تم الحذف نهائيًا",softDeleteSuccess:"تم حذف المحادثة",deletePermanentAction:"حذف نهائي",deletePermanentLabel:"حذف نهائي — يمحو أيضًا المرفقات ولقطة الذاكرة وسجل الموافقات. لا يمكن التراجع.",confirmDeleteSoft:"افتراضيًا هذا حذف مبدئي — تُخفى المحادثة من القوائم لكن تبقى بياناتها على الخادم.",title:"محادثات",subtitle:"عرض وإدارة محادثات Agents"},resources:{title:"الموارد",subtitle:"إدارة قواعد السلوك والقواميس والمخرجات والمزيد"},chat:{title:"دردشة",subtitle:"تحدث مع Agents المنشورة"},channels:{title:"القنوات",subtitle:"قم بربط الوكلاء والمجموعات بمنصات المراسلة مثل Slack"},groups:{title:"مجموعات",subtitle:"مجموعات نقاش متعددة الوكلاء للنقاش المنظم والتعاون"},approvals:"الموافقات المعلقة",approvalsSubtitle:"مراجعة المحادثات التي تنتظر مدخلات بشرية واتخاذ قرار بشأنها"},i={add:"إضافة",agent:"الوكيل",back:"رجوع",cardView:"عرض البطاقات",clear:"مسح التحديد",confirm:"تأكيد",description:"الوصف",group:"المجموعة",id:"المعرّف",listView:"عرض القائمة",modified:"تاريخ التعديل",name:"الاسم",new:"جديد",version:"الإصدار",viewMode:"وضع العرض",loading:"جارٍ التحميل...",error:"حدث خطأ ما",retry:"إعادة المحاولة",save:"حفظ",cancel:"إلغاء",delete:"حذف",remove:"إزالة",create:"إنشاء",edit:"تعديل",search:"بحث...",noResults:"لم يتم العثور على نتائج",duplicate:"تكرار",close:"إغلاق",skipToMain:"انتقل إلى المحتوى الرئيسي",opensNewTab:"يفتح في علامة تبويب جديدة",moreActions:"المزيد من الإجراءات",sortByName:"ترتيب حسب الاسم",sortByVersion:"ترتيب حسب الإصدار",sortByModified:"ترتيب حسب تاريخ التعديل",apply:"تطبيق",copied:"تم النسخ",copy:"نسخ",saving:"جارٍ الحفظ…",showMore:"Show More",showLess:"Show Less",copyFailed:"فشل النسخ إلى الحافظة",loadError:"فشل تحميل البيانات",actions:"إجراءات",view:"عرض",refresh:"تحديث",previous:"السابق",next:"التالي",dismiss:"تجاهل",refreshFailed:"تعذّر التحديث — يتم عرض أحدث البيانات المحمّلة.",settings:"الإعدادات",history:"السجل",copyId:"نسخ معرّف الوكيل",off:"معطّل",on:"مفعّل"},c={confirmDeleteDescription:"لا يمكن التراجع عن هذا الإجراء. ستتم إزالة الوكيل وجميع بياناته نهائياً.",confirmUndeploy:"إلغاء نشر الوكيل؟",confirmUndeployDescription:"سيتم إلغاء نشر الإصدار {{version}} من {{environment}}.",createSuccess:"تم إنشاء الوكيل بنجاح",deleteAgent:"حذف الوكيل",deployError:"فشل النشر",deploySuccess:"تم نشر الوكيل بنجاح",noDescription:"بدون وصف",selectAgent:"اختر وكيلاً",undeployEndConversationsHint:"ينهي فورًا كل محادثة جارية على هذا النشر. لا يمكن التراجع.",undeployEndConversationsLabel:"إنهاء جميع المحادثات النشطة",undeployError:"فشل إلغاء النشر",undeployPreviousVersionsHint:"يزيل أيضًا كل إصدار سابق لهذا الوكيل من البيئة.",undeployPreviousVersionsLabel:"إلغاء نشر هذا الإصدار وجميع الإصدارات السابقة",undeploySuccess:"تم إلغاء نشر الوكيل",unnamed:"وكيل بدون اسم",deploy:"نشر",undeploy:"إلغاء النشر",createAgent:"إنشاء Agent",createTitle:"إنشاء Agent جديد",name:"الاسم",namePlaceholder:"Agent الخاص بي",description:"الوصف",descriptionPlaceholder:"صف ما يفعله هذا Agent...",empty:"لا توجد Agents بعد. أنشئ أول Agent!",confirmDelete:"هل أنت متأكد من حذف هذا Agent؟",count_one:"وكيل واحد",count_other:"{{count}} وكلاء",export:"تصدير",exporting:"جارٍ التصدير...",exportSuccess:"تم تصدير Agent بنجاح",import:"استيراد Agent",importing:"جارٍ الاستيراد...",importSuccess:"تم استيراد Agent بنجاح",importError:"فشل استيراد Agent",emptyDescription:"استخدم المعالج لإنشاء وكيل مكوّن بالكامل في دقائق.",chat:"محادثة",deployAndChat:"نشر ومحادثة",openExternalChat:"فتح في تبويب جديد",count_zero:"{{count}} وكيل",count_two:"وكيلان",count_few:"{{count}} وكلاء",count_many:"{{count}} وكيل",liveIn:"نشط في {{environment}}",chatIn:"الدردشة في {{environment}}",openExternalChatIn:"فتح دردشة {{environment}} في علامة تبويب جديدة",deployToProduction:"النشر في الإنتاج",undeployFromProduction:"الإزالة من الإنتاج",deployFailedIn:"فشل النشر في {{environment}}"},l={a2aDescHint:"يظهر في بطاقة الوكيل — يساعد الوكلاء الآخرين على فهم ما يفعله هذا الوكيل",a2aDescPlaceholder:"ماذا يفعل هذا الوكيل؟",a2aDescription:"وصف الوكيل",a2aEnable:"تفعيل A2A",a2aEnabled:"مُفعّل",a2aEnabledDesc:"اجعل هذا الوكيل قابلاً للاكتشاف من قِبل الوكلاء الآخرين عبر بروتوكول A2A. يمكن لمثيلات EDDI الأخرى العثور على هذا الوكيل واستدعاؤه كأداة.",a2aEndpoints:"نقاط النهاية",a2aNoSkills:"لا توجد مهارات — ستُستخدم مهارة 'chat' الافتراضية",a2aSection:"من وكيل إلى وكيل (A2A)",a2aSkillPlaceholder:"مثل: translation، code-review",a2aSkills:"مهارات A2A",addAttribute:"إضافة سمة",agentCardPreview:"معاينة بطاقة الوكيل",agentDid:"DID الوكيل",attributeKey:"مفتاح",attributeValue:"قيمة",attributesLabel:"السمات",attrs:"سمات",autoSnapshotEnable:"تفعيل نقاط التحقق التلقائية",capabilities:"القدرات",capabilitiesDesc:"المهارات المُعلَنة لبطاقة وكيل A2A وسجل القدرات. يكتشفها الوكلاء الآخرون عند اختيار أهداف التفويض.",capabilityPlaceholder:"ابحث أو اكتب اسم مهارة...",comingSoon:"قريباً",defaultVisibility:"الظهور الافتراضي",dreamConsolidation:"توطيد الأحلام",dreamDesc:"مهمة LLM في الخلفية تحلّ التناقضات وتنظّف الإدخالات القديمة وتلخّص التفاعلات اختيارياً.",enableMemoryTools:"تفعيل أدوات الذاكرة",enableSwd:"تفعيل انضباط الكتابة الصارم",forkingDisabledTooltip:"متاح في إصدار مستقبلي",forkingEnabled:"تفريع الجلسة",forkingNote:"نقطة نهاية تفريع الجلسة (POST /v6/conversations/{{id}}/fork) غير متاحة بعد.",guardrails:"ضوابط الكتابة",identity:"الهوية التشفيرية",keyExpired:"منتهي الصلاحية",keyVersion:"المفتاح v{{version}}",legacyKey:"مفتاح قديم (v0)",maxCheckpoints:"الحد الأقصى لنقاط التحقق",maxCheckpointsHint:"لكل محادثة",maxEntriesPerUser:"الحد الأقصى لكل مستخدم",maxForks:"الحد الأقصى للتفريعات",maxForksHint:"لكل محادثة",maxRecallEntries:"الحد الأقصى للاسترجاع",memoryPolicy:"سياسة الذاكرة",memoryPolicyDesc:"يحكم انضباط الكتابة الصارم ما يحدث عند فشل تحديثات الخصائص أثناء خطوة محادثة. اختر كيف يتعامل المحرك مع البيانات المُلتزَم بها جزئياً.",onCapReached:"عند بلوغ الحد",onFailure:"استراتيجية عند الفشل",onFailureDigest:"ملخّص — التراجع عن التغييرات وإبلاغ ملخّص إلى LLM",onFailureExclude:"استبعاد الكل — إسقاط جميع تحديثات الخصائص بصمت",onFailureKeep:"الإبقاء على الكل — الاحتفاظ بالتغييرات وتسجيل تحذير",openWorkflow:"فتح",outdated:"قديم",publicKey:"المفتاح العام",publicKeyHint:"يُنشأ تلقائياً عند أول توقيع",publicKeys:"المفاتيح العامة",recallOrder:"ترتيب الاسترجاع",requirePeer:"طلب التحقق من النظير",requirePeerDesc:"رفض مهام A2A الواردة من الوكلاء الذين لا يمكنهم إثبات هويتهم",securityFlagConfirmBtn:"التفعيل على أي حال",securityFlagConfirmDesc:"التوقيع التشفيري غير متاح بعد في هذا الإصدار. سيؤدي تفعيل هذه الراية إلى رفض الخلفية لعمليات الحفظ برمز HTTP 400. هل أنت متأكد من المتابعة؟",securityFlagConfirmTitle:"تفعيل راية الأمان؟",securityFlagWarning:"التوقيع التشفيري غير متاح بعد في هذا الإصدار. سترفض الخلفية عمليات الحفظ عند تفعيل هذه الرايات (HTTP 400).",securityFlags:"التوقيع والتحقق",securityIdentity:"الأمان والهوية",sessionManagement:"إدارة الجلسات",sessionManagementDesc:"تلتقط نقاط تحقق الذاكرة حالة المحادثة قبل العمليات الخطرة، مما يتيح تراجعاً نظيفاً عند الفشل.",signA2A:"توقيع رسائل ما بين الوكلاء (A2A)",signA2ADesc:"توقيع رسائل A2A الصادرة تشفيرياً للحماية من العبث",signMcp:"توقيع استدعاءات MCP",signMcpDesc:"إرفاق التواقيع باستدعاءات أدوات MCP للتحقق الآمن من الخادم",skillAlreadyExists:"هذه المهارة معلنة بالفعل",switchToLatest:"التبديل إلى الأحدث",toggleAttributes:"تبديل السمات",triggerBeforeAction:"قبل الإجراء",triggerBeforeTool:"قبل تنفيذ الأداة",triggerOn:"التشغيل عند",updateToLatest:"التحديث إلى أحدث إصدار",userMemory:"ذاكرة المستخدم",userMemoryDesc:"ذاكرة دائمة لكل مستخدم مع أدوات LLM (تذكّر/استرجاع/نسيان). يعمل استمرار خصائص longTerm الأساسي دائماً بغض النظر عن هذا الخيار.",viewingOldVersion:"أنت تعرض الإصدار {{current}}. الأحدث هو الإصدار {{latest}}.",workflowAdded:"تمت إضافة مسار العمل",workflowRemoved:"تمت إزالة مسار العمل",workflowUpdated:"تم تحديث مسار العمل إلى أحدث إصدار",title:"تفاصيل Agent",backToAgents:"العودة إلى Agents",packages:"مسارات العمل",noWorkflows:"لم يتم إضافة Workflows بعد",addWorkflow:"إضافة Workflow",selectWorkflow:"اختر Workflow للإضافة",rawConfig:"التكوين الخام",editName:"تعديل الاسم",editDescription:"تعديل الوصف",clickToEdit:"انقر للتعديل",noDescription:"بدون وصف",duplicate:"تكرار",duplicating:"جارٍ التكرار...",duplicateSuccess:"تم تكرار Agent بنجاح",environments:"البيئات",envProduction:"إنتاج",envTest:"اختبار",savingAgent:"جارٍ حفظ Agent...",savedAgent:"تم حفظ Agent بنجاح",saveError:"فشل حفظ Agent",deployToEnv:"نشر في {{env}}",undeployFromEnv:"إزالة من {{env}}",openStudio:"فتح في الاستوديو",maxKeyLength:"أقصى طول للمفتاح",maxValueLength:"أقصى طول للقيمة",maxWritesPerTurn:"أقصى عمليات كتابة/دورة",dreamSchedule:"الجدولة (cron)",dreamLlmProvider:"مزود LLM",dreamLlmModel:"نموذج LLM",dreamMaxCost:"أقصى تكلفة/تشغيل ($)",dreamPruneDays:"التنظيف بعد (أيام)",dreamBatchSize:"حجم الدفعة",detectContradictions:"اكتشاف التناقضات",summarizeInteractions:"تلخيص التفاعلات",confidenceLow:"منخفض",confidenceMedium:"متوسط",confidenceHigh:"مرتفع",visibilitySelf:"ذاتي",visibilityGlobal:"عام",onCapEvict:"إزالة الأقدم",onCapReject:"رفض",recallMostRecent:"الأحدث",recallMostRelevant:"الأكثر صلة",channels:"موصلات القنوات",channelsDesc:"اربط هذا الوكيل بقنوات Slack. كل موصل قناة يُعد بشكل مستقل ببيانات اعتماد خاصة، مما يدعم إعدادات مساحات العمل المتعددة.",noChannels:"لا توجد قنوات مُعدة",noChannelsDesc:"أضف قناة Slack للسماح للمستخدمين بالتفاعل مع هذا الوكيل من Slack.",addSlackChannel:"إضافة قناة Slack",slackChannel:"قناة Slack",removeChannel:"إزالة القناة",removeChannelConfirm:"إزالة موصل قناة Slack هذا؟",removeChannelDesc:"This action will permanently disconnect this channel.",channelId:"معرف القناة",channelIdHint:"تبدأ معرفات القنوات بحرف C متبوعاً بأحرف أبجدية رقمية كبيرة",botToken:"رمز البوت",botTokenPlaceholder:"xoxb-… أو ${vault:slack-bot-token}",botTokenHint:"رمز OAuth لمستخدم بوت Slack. استخدم مرجع الخزنة للأمان.",signingSecret:"سر التوقيع",signingSecretPlaceholder:"سلسلة سداسية عشرية أو ${vault:slack-signing-secret}",signingSecretHint:"من صفحة المعلومات الأساسية لتطبيق Slack الخاص بك. استخدم مرجع الخزنة للأمان.",groupIdOptional:"معرف المجموعة (اختياري)",groupIdPlaceholder:"معرف تكوين المجموعة متعددة الوكلاء",groupIdHint:'فعّل مناقشات "group: سؤال" متعددة الوكلاء من قناة Slack هذه.',slackSetupGuide:"دليل إعداد Slack",slackWebhookUrl:"عنوان Webhook",slackWebhookCopied:"تم نسخ عنوان Webhook",slackStep1:"أنشئ تطبيق Slack على api.slack.com/apps وثبّته في مساحة عملك.",slackStep2:"انسخ رمز البوت (xoxb-…) وسر التوقيع إلى خزنة EDDI وأعد تكوين القنوات أدناه.",slackStep3:"ثم فعّل Event Subscriptions في تطبيق Slack الخاص بك، والصق عنوان Webhook أعلاه واشترك في:",slackSetupNote:"مهم: أعد تكوين القناة أدناه قبل تفعيل Event Subscriptions — يرسل Slack تحدي تحقق URL يتطلب تكوين سر التوقيع في EDDI.",slackRequiredScopes:"أذونات رمز البوت المطلوبة",hitlConfig:"التدخل البشري",hitlConfigDesc:"عندما يوقف هذا العميل محادثة للموافقة البشرية، تتحكم هذه الإعدادات في مدة الانتظار وما يحدث إذا لم يُتخذ قرار في الوقت المحدد.",hitlEnable:"تكوين مهل الموافقة البشرية",hitlTimeoutPolicy:"إذا لم يُتخذ قرار في الوقت المحدد",hitlApprovalTimeout:"مهلة الموافقة (ISO-8601)",hitlTimeoutInvalid:"تتطلب السياسة المحدودة مدة ISO-8601 موجبة، مثل PT15M.",hitlTimeoutHint:"مثل PT30S وPT15M وPT2H.",hitlPauseReason:"سبب الموافقة (يظهر للموافقين)",hitlPauseReasonPlaceholder:"مثال: يتطلب الحذف موافقة المدير",toolApprovalsEnable:"حجب استدعاءات أدوات محددة للموافقة عليها",toolApprovalsDesc:'الإيقاف المؤقت عند استدعاء النموذج لأداة مطابقة، قبل تشغيلها. قائمة "تتطلب الموافقة" الفارغة تعطّل حجب الأدوات.',toolRequireApproval:"تتطلب الموافقة (أنماط glob، نمط واحد في كل سطر)",toolPatternHint:"'*' هو حرف البدل الوحيد. بادئة المصدر اختيارية:",toolExempt:"معفاة (مسموح بها دائمًا، واحدة في كل سطر)",toolMaxPauses:"الحد الأقصى للإيقافات / الدور (1–10)",toolMaxAuto:"الحد الأقصى للموافقات التلقائية / الدور (0–10)",toolOnNoProgress:"عند إعادة الإيقاف بدون تقدّم",toolTimeoutPolicy:"سياسة مهلة إيقاف الأداة",toolTimeoutInherit:"الوراثة من الوكيل",toolAutoApproveDemotion:"لا ينطبق AUTO_APPROVE على مستوى الوكيل على موافقات الأدوات — ستنتظر إيقافات الأدوات إلى أجل غير مسمى ما لم تضبط سياسة مهلة لإيقاف الأداة أعلاه.",toolPauseReason:"سبب الموافِق (يُسمح بـ {toolNames})",toolPauseReasonPlaceholder:"مثال الموافقة مطلوبة لـ {toolNames}",toolPendingMessage:"رسالة المستخدم النهائي أثناء الإيقاف (يُسمح بـ {toolNames})",toolPendingMessagePlaceholder:"مثال بانتظار موافقة بشرية على {toolNames}…",toolInGroupTurns:"داخل دور المجموعة، يُرفض تلقائيًا استدعاء الأداة المحجوب لأحد الأعضاء (REJECT)."},d={title:"معالج Agent"},u={baseUrlHintCloud:"مطلوب فقط عند استخدام وكيل بروكسي أو نشر خاص أو نقطة نهاية Azure OpenAI",baseUrlHintLocal:"مطلوب — الرابط الذي يعمل عليه خادم نموذجك المحلي",modelHint:"اكتب أي اسم نموذج يدعمه مزوّدك، أو اختر واحداً من الاقتراحات",modelPlaceholder:"مثل: {{model}} (أو أي نموذج يدعمه مزوّدك)",title:"معالج إنشاء Agent",subtitle:"أنشئ Agent مكتمل التكوين في دقائق",backToAgents:"العودة إلى Agents",next:"التالي",back:"رجوع",createOnly:"إنشاء فقط",createAndDeploy:"إنشاء ونشر",typeTitle:"ما نوع Agent؟",typeDesc:"اختر نوع Agent الذي تريد إنشاءه",standardAgent:"وكيل قياسي",apiAgent:"وكيل API",standardDesc:"ذكاء اصطناعي محادثاتي مدعوم بـ LLM مع أدوات اختيارية وردود سريعة وتحليل المشاعر",apiDesc:"استورد مواصفة OpenAPI/Swagger لإنشاء Agent API تلقائياً",infoTitle:"هوية Agent",infoDesc:"امنح Agent اسماً وشخصية",agentName:"اسم Agent",namePlaceholder:"مثال: بوت دعم العملاء",systemPrompt:"موجه النظام",promptPlaceholder:"أنت مساعد ذكاء اصطناعي مفيد يقوم بـ...",promptHint:"هذه التعليمات تحدد كيف يتصرف ويستجيب Agent.",llmTitle:"تكوين LLM",llmDesc:"اختر نموذج الذكاء الاصطناعي الذي يشغل Agent",provider:"المزود",model:"النموذج",apiKey:"مفتاح API",baseUrl:"الرابط الأساسي",baseUrlPlaceholder:"رابط endpoint مخصص",optional:"اختياري",apiSpecTitle:"مواصفة OpenAPI",apiSpecDesc:"قدم مواصفة OpenAPI/Swagger الخاصة بـ API",specByUrl:"رابط (URL)",specByFile:"ملف",specByPaste:"لصق",fetch:"جلب",specFetched:"تم تحميل المواصفة!",specFetchError:"فشل جلب المواصفة",dropFile:"اسحب ملف OpenAPI هنا",dropHint:"تنسيق JSON أو YAML",browse:"تصفح الملفات",pasteSpec:"الصق JSON أو YAML من OpenAPI/Swagger هنا...",specLoaded:"تم تحميل الملف: {{name}}",specReady:"تم تحميل المواصفة ({{chars}} حرف)",apiBaseUrlLabel:"الرابط الأساسي لـ API",apiAuthLabel:"رأس مصادقة API",endpointFilter:"فلتر Endpoints",endpointFilterPlaceholder:"مفصولة بفواصل: GET /users, POST /orders",featuresTitle:"الميزات والخيارات",featuresDesc:"خصص قدرات Agent",introMessage:"رسالة ترحيب",introMessageDesc:"رسالة تُعرض عند بدء المحادثة",quickReplies:"ردود سريعة",quickRepliesDesc:"يولد LLM اقتراحات ردود قابلة للنقر",sentiment:"تحليل المشاعر",sentimentDesc:"تتبع مزاج وقصد وإلحاح المستخدم في الوقت الفعلي",structuredOutput:"إخراج منظم",structuredOutputDesc:"يستجيب النموذج بكائن JSON بدلاً من نص عادي",structuredOutputInfo:"عند التفعيل، يستجيب النموذج بكائن JSON مع حقول منظمة. يتم إلحاق مخطط JSON بتعليمات النظام، ويتم ضبط النموذج على وضع استجابة JSON.",builtInTools:"أدوات مدمجة",builtInToolsDesc:"تفعيل مكتبة أدوات EDDI المدمجة (آلة حاسبة، تاريخ/وقت، إلخ)",toolsWhitelist:"قائمة بيضاء (فارغ = الكل)",mcpServers:"خوادم MCP",mcpServersDesc:"خوادم Model Context Protocol لأدوات خارجية",autoDeploy:"نشر تلقائي",autoDeployDesc:"نشر Agent فوراً بعد الإنشاء",environment:"البيئة",envProduction:"إنتاج",envTest:"اختبار",reviewTitle:"مراجعة وإنشاء",reviewDesc:"راجع التكوين قبل الإنشاء",reviewType:"النوع",reviewName:"الاسم",reviewPrompt:"موجه النظام",reviewProvider:"المزود",reviewModel:"النموذج",reviewSpec:"مواصفات OpenAPI",reviewIntro:"رسالة ترحيب",reviewDeploy:"نشر",success:"تم إنشاء Agent بنجاح!",agentCreated:"تم إنشاء Agent!",deployed:"تم النشر",endpointsParsed:"تم تحليل {{count}} endpoints API",viewAgent:"عرض Agent",createAnother:"إنشاء آخر",allTools:"جميع الأدوات",selectSpecific:"اختيار محدد",allToolsInfo:"جميع الأدوات المدمجة ({{count}}) ستكون متاحة لوكيلك. اختر «اختيار محدد» لتحديد الأدوات المفعلة.",availableTools:"الأدوات المتاحة",toolCount:"{{selected}} من {{total}} محددة",specTooLarge:"هذه المواصفة كبيرة جداً بحيث لا يمكن تحميلها هنا",specUrlInvalid:"هذا ليس عنوان URL صالحاً",specUrlScheme:"يتم دعم عناوين http:// و https:// فقط"},p={confirmDeleteDescription:"لا يمكن التراجع عن هذا الإجراء. ستتم إزالة مسار العمل وجميع بياناته نهائياً.",createSuccess:"تم إنشاء مسار العمل بنجاح",unnamed:"مسار عمل بدون اسم",createWorkflow:"إنشاء Workflow",createTitle:"إنشاء Workflow جديد",name:"الاسم",namePlaceholder:"Workflow الخاص بي",description:"الوصف",descriptionPlaceholder:"صف ما يفعله هذا Workflow...",noDescription:"لا يوجد وصف",empty:"لا توجد Workflows بعد. أنشئ أول Workflow!",confirmDelete:"هل أنت متأكد من حذف هذا Workflow؟",count_one:"سير عمل واحد",count_other:"{{count}} سير عمل",emptyDescription:"تحدد مسارات العمل خط أنابيب المعالجة لوكلائك.",count_zero:"{{count}} سير عمل",count_two:"سيرا عمل",count_few:"{{count}} سير عمل",count_many:"{{count}} سير عمل"},m={backToAgent:"العودة إلى الوكيل",title:"تفاصيل Workflow",backToWorkflows:"العودة إلى Workflows",extensions:"الإضافات",noExtensions:"لا توجد إضافات في هذا Workflow",rawConfig:"التكوين الخام"},g={chooseConfig:"اختر تكويناً",chooseConfigHint:"أنشئ تكويناً جديداً أو اربط تكويناً موجوداً",configCreated:"تم إنشاء التكوين — أُضيف إلى المسار",createNewConfig:"إنشاء تكوين جديد",createNewConfigHint:"ينشئ تكويناً فارغاً يمكنك تعديله لاحقاً",noExistingConfigs:"لم يتم العثور على تكوينات موجودة — أنشئ واحداً جديداً أعلاه",orExisting:"أو استخدم موجوداً",updateToLatest:"التحديث إلى أحدث إصدار",title:"محرر Workflow",pipeline:"Pipeline الإضافات",addHint:"أضف إضافات لبناء pipeline المعالجة",addHintDialog:"اختر نوع الإضافة للإضافة إلى pipeline",reorder:"إعادة ترتيب الإضافة",saved:"تم حفظ Workflow بنجاح",saveError:"فشل حفظ Workflow",noTasks:"[EN] No tasks in this workflow",addTask:"[EN] Add Task"},h={confirmDeleteSoft:"افتراضيًا هذا حذف مبدئي — تُخفى المحادثة من القوائم لكن تبقى بياناتها على الخادم.",deletePermanentLabel:"حذف نهائي — يمحو أيضًا المرفقات ولقطة الذاكرة وسجل الموافقات. لا يمكن التراجع.",monitorSubtitle:"راقب المحادثات الجارية وأدرها بالجملة لكل وكيل.",noActiveDesc:"لا توجد محادثات جارية لهذا الإصدار من الوكيل الآن.",purgeDesc:"احذف نهائياً المحادثات المنتهية (ENDED) التي يكون آخر نشاط لها أقدم من عدد الأيام المحدد.",selectAgentPromptDesc:"تُدرَج المحادثات النشطة حسب الوكيل والإصدار.",searchPlaceholder:"البحث بمعرّف المحادثة...",id:"المحادثة",agent:"الوكيل",state:"الحالة",lastActivity:"آخر نشاط",actions:"إجراءات",empty:"لا توجد محادثات بعد. انشر Agent وابدأ الدردشة!",confirmDelete:"هل أنت متأكد من حذف هذه المحادثة؟",count_one:"محادثة واحدة",count_other:"{{count}} محادثات",emptyDescription:"انشر وكيلاً وابدأ محادثة من صفحة الدردشة.",filterAll:"الكل",stateActive:"نشط",stateInProgress:"قيد التنفيذ",stateEnded:"منتهية",stateInterrupted:"متوقفة",permanentDeleteSuccess:"تم الحذف نهائياً",softDeleteSuccess:"تم حذف المحادثة",monitorActive:"مراقبة النشطة",filterByAgent:"تصفية حسب الوكيل",filterByVersion:"تصفية حسب إصدار الوكيل",allVersions:"جميع الإصدارات",version:"v{{version}}",showingRange:"عرض {{from}}–{{to}}",deleteConversation:"حذف المحادثة",steps:"الخطوات",perPage:"لكل صفحة",pageNumber:"صفحة {{page}}",deletePermanentAction:"حذف نهائي",step:"خطوة",monitorTitle:"المحادثات النشطة",backToList:"العودة إلى المحادثات",selectAgentToMonitor:"اختر وكيلاً",selectedCount:"{{count}} محدد",endSelected:"إنهاء المحدد",selectAgentPrompt:"اختر وكيلاً للمراقبة",noActive:"لا توجد محادثات نشطة",selectAll:"تحديد الكل",selectOne:"تحديد {{id}}",purgeTitle:"تطهير المحادثات المنتهية",olderThanDays:"أقدم من (أيام)",purgeAction:"تطهير",confirmEndTitle:"إنهاء المحادثات المحددة؟",confirmPurgeTitle:"تطهير المحادثات المنتهية؟",count_zero:"{{count}} محادثة",count_two:"محادثتان",count_few:"{{count}} محادثات",count_many:"{{count}} محادثة",confirmEndDesc_few:"سيتم تعيين {{count}} محادثة إلى ENDED. تُنهى المحادثات المتوقفة (بانتظار الإنسان) بأمان عبر المسار المدرك للموافقات.",confirmEndDesc_many:"سيتم تعيين {{count}} محادثة إلى ENDED. تُنهى المحادثات المتوقفة (بانتظار الإنسان) بأمان عبر المسار المدرك للموافقات.",confirmEndDesc_one:"سيتم تعيين {{count}} محادثة إلى ENDED. تُنهى المحادثات المتوقفة (بانتظار الإنسان) بأمان عبر المسار المدرك للموافقات.",confirmEndDesc_two:"سيتم تعيين {{count}} محادثة إلى ENDED. تُنهى المحادثات المتوقفة (بانتظار الإنسان) بأمان عبر المسار المدرك للموافقات.",confirmEndDesc_zero:"سيتم تعيين {{count}} محادثة إلى ENDED. تُنهى المحادثات المتوقفة (بانتظار الإنسان) بأمان عبر المسار المدرك للموافقات.",confirmEndDesc_other:"سيتم تعيين {{count}} محادثة إلى ENDED. تُنهى المحادثات المتوقفة (بانتظار الإنسان) بأمان عبر المسار المدرك للموافقات.",confirmPurgeDesc_few:"يحذف هذا نهائياً المحادثات المنتهية (ENDED) الأقدم من {{days}} يوم، بما في ذلك ذاكرتها المخزنة ومرفقاتها. لا يمكن التراجع.",confirmPurgeDesc_many:"يحذف هذا نهائياً المحادثات المنتهية (ENDED) الأقدم من {{days}} يوم، بما في ذلك ذاكرتها المخزنة ومرفقاتها. لا يمكن التراجع.",confirmPurgeDesc_one:"يحذف هذا نهائياً المحادثات المنتهية (ENDED) الأقدم من {{days}} يوم، بما في ذلك ذاكرتها المخزنة ومرفقاتها. لا يمكن التراجع.",confirmPurgeDesc_two:"يحذف هذا نهائياً المحادثات المنتهية (ENDED) الأقدم من {{days}} يوم، بما في ذلك ذاكرتها المخزنة ومرفقاتها. لا يمكن التراجع.",confirmPurgeDesc_zero:"يحذف هذا نهائياً المحادثات المنتهية (ENDED) الأقدم من {{days}} يوم، بما في ذلك ذاكرتها المخزنة ومرفقاتها. لا يمكن التراجع.",confirmPurgeDesc_other:"يحذف هذا نهائياً المحادثات المنتهية (ENDED) الأقدم من {{days}} يوم، بما في ذلك ذاكرتها المخزنة ومرفقاتها. لا يمكن التراجع.",pausedNote_few:"{{count}} من المحادثات المحددة بانتظار الإنسان وسيتم إلغاء موافقتها المعلّقة.",pausedNote_many:"{{count}} من المحادثات المحددة بانتظار الإنسان وسيتم إلغاء موافقتها المعلّقة.",pausedNote_one:"{{count}} من المحادثات المحددة بانتظار الإنسان وسيتم إلغاء موافقتها المعلّقة.",pausedNote_two:"{{count}} من المحادثات المحددة بانتظار الإنسان وسيتم إلغاء موافقتها المعلّقة.",pausedNote_zero:"{{count}} من المحادثات المحددة بانتظار الإنسان وسيتم إلغاء موافقتها المعلّقة.",pausedNote_other:"{{count}} من المحادثات المحددة بانتظار الإنسان وسيتم إلغاء موافقتها المعلّقة.",endSuccess_few:"تم إنهاء {{count}} محادثة",endSuccess_many:"تم إنهاء {{count}} محادثة",endSuccess_one:"تم إنهاء {{count}} محادثة",endSuccess_two:"تم إنهاء {{count}} محادثة",endSuccess_zero:"تم إنهاء {{count}} محادثة",endSuccess_other:"تم إنهاء {{count}} محادثة",purgeSuccess_few:"تم تطهير {{count}} محادثة منتهية",purgeSuccess_many:"تم تطهير {{count}} محادثة منتهية",purgeSuccess_one:"تم تطهير {{count}} محادثة منتهية",purgeSuccess_two:"تم تطهير {{count}} محادثة منتهية",purgeSuccess_zero:"تم تطهير {{count}} محادثة منتهية",purgeSuccess_other:"تم تطهير {{count}} محادثة منتهية"},y={backToConversations:"العودة إلى المحادثات",chatLog:"سجل الدردشة",noSteps:"لم تُسجَّل أي خطوات محادثة",properties:"خصائص المحادثة",rawData:"عرض البيانات الخام",step:"خطوة",steps:"خطوات",title:"محادثة",continueChat:"متابعة في الدردشة",searchTranscript:"البحث في المحادثة…",exportMd:"تصدير كـ Markdown",toolSummary:"ملخص استخدام الأدوات",totalCost:"التكلفة الإجمالية",cacheHitRate:"معدل إصابة التخزين المؤقت"},T={hide:"إخفاء",secretModeOff:"تبديل الوضع السري",secretModeOn:"الوضع السري مُفعّل",secretPlaceholder:"أدخل القيمة السرية...",show:"إظهار",selectAgent:"اختر Agent...",noAgents:"لا توجد Agents منشورة متاحة. انشر Agent أولاً.",placeholder:"اكتب رسالة...",send:"إرسال",newConversation:"محادثة جديدة",endConversation:"إنهاء المحادثة",streaming:"بث",thinking:"يفكر...",usingTools:"استخدام الأدوات",connectionError:"خطأ في الاتصال. يرجى المحاولة مرة أخرى.",empty:"اختر Agent وابدأ الدردشة!",history:"السجل",undo:"تراجع عن آخر رسالة",redo:"إعادة الرسالة",continueConversation:"متابعة",noHistory:"لا يوجد سجل محادثات بعد.",attach:"إرفاق ملف",attachUploading:"...جارٍ الرفع",attachSuccess:"تم إرفاق الملف",attachError:"فشل في رفع الملف",attachLimit:"يمكنك إرفاق ما يصل إلى {{max}} ملفات لكل رسالة.",attachTooLargeToForward:"تم تخزين {{name}} لكنه أكبر من أن يُرسل إلى النموذج مباشرةً.",attachNotForwarded:"لم يُرسل إلى النموذج",dropToAttach:"أفلت الملفات لإرفاقها",stepFailedFallback:"فشلت هذه الخطوة. يحتوي سجل الخادم على الخطأ الكامل.",retry:"إعادة محاولة الخطوة الأخيرة",retrySuccess:"تم إعادة تنفيذ الخطوة",retryError:"فشلت إعادة المحاولة",showActivity:"إظهار النشاط",hideActivity:"إخفاء النشاط",scrollToBottom:"التمرير للأسفل",copyMessage:"نسخ الرسالة",copied:"تم النسخ!",activity:{processing:"جارٍ المعالجة…",steps:"خطوات",toolCalls:"استدعاءات أدوات",toolCall:"استدعاء أداة",toolResult:"النتيجة",error:"حدث خطأ",toolCallsCount_one:"استدعاء أداة واحد",stepsCount:"{{count}} خطوة",stepsCount_zero:"لا خطوات",stepsCount_one:"خطوة واحدة",stepsCount_two:"خطوتان",stepsCount_few:"{{count}} خطوات",stepsCount_many:"{{count}} خطوة",stepsCount_other:"{{count}} خطوة",toolCallsCount_zero:"لا استدعاءات أدوات",toolCallsCount_two:"استدعاءا أداة",toolCallsCount_few:"{{count}} استدعاءات أدوات",toolCallsCount_many:"{{count}} استدعاءً للأدوات",toolCallsCount_other:"عدد استدعاءات الأدوات: {{count}}",toolCallsCount:"عدد استدعاءات الأدوات: {{count}}",usingTool:"جارٍ استخدام {{tool}}…"},context:{conversationId:"معرف المحادثة",agentVersion:"إصدار الوكيل",startTime:"بدأ في",stepCount:"الخطوات",show:"إظهار معلومات المحادثة",hide:"إخفاء معلومات المحادثة"},agentTyping:"الوكيل يكتب",copy:"نسخ",emptyConversation:"لا تحتوي هذه المحادثة على رسائل بعد.",loadConversationFailed:"تعذّر تحميل هذه المحادثة: {{error}}",multilineHint:"Enter للإرسال · Shift+Enter لسطر جديد",multilineHintCtrlEnter:"Ctrl+Enter للإرسال · Enter لسطر جديد",toolRefused:"مرفوض"},v={backToWorkflow:"العودة إلى مسار العمل",confirmDeleteDescription:"لا يمكن التراجع عن هذا الإجراء. سيُحذف {{type}} نهائياً.",createSuccess:"تم إنشاء {{type}} بنجاح",snippetNameInvalid:"يُسمح فقط بالأحرف الصغيرة (a-z) والأرقام (0-9) والشرطات السفلية (_).",snippetNameRequired:"اسم القصاصة مطلوب.",unnamed:"مورد بدون اسم",noDescription:"لا يوجد وصف",backToResources:"العودة إلى الموارد",backToList:"العودة إلى {{type}}",unknownType:"نوع مورد غير معروف",rawConfig:"التكوين الخام",rawConfigHint:"تكوين JSON لهذا المورد",create:"إنشاء {{type}}",createTitle:"إنشاء {{type}}",createDescription:"إنشاء تكوين {{type}} فارغ. يمكنك تعديله بعد الإنشاء.",confirmDelete:"هل أنت متأكد من حذف {{type}} هذا؟",empty:"لا توجد موارد {{type}} بعد.",itemCount_one:"عنصر واحد",itemCount_other:"{{count}} عناصر",count_one:"{{count}} مورد",count_other:"{{count}} موارد",types:{rules:{name:"قواعد السلوك",description:"تحديد قواعد تدفق المحادثة ومنطق القرار"},apicalls:{name:"استدعاءات HTTP",description:"تكوين عمليات تكامل API الخارجية والويب هوك"},output:{name:"مجموعات المخرجات",description:"إدارة قوالب الاستجابة ومتغيرات المخرجات"},dictionary:{name:"القواميس",description:"تحديد أنماط التعرف على الكلمات والعبارات"},llm:{name:"LLM",description:"تكوين نماذج الذكاء الاصطناعي والتعليمات وربط الأدوات"},propertysetter:{name:"مُعيّن الخصائص",description:"تعيين خصائص المحادثة وإدارة ملء الفتحات"},mcpcalls:{name:"استدعاءات MCP",description:"تكوين اتصالات خادم MCP واستدعاءات الأدوات الحتمية"},rag:{name:"قواعد المعرفة",description:"تكوين قواعد المعرفة RAG لاسترجاع المستندات"},snippets:{name:"قصاصات التوجيه",description:"وحدات بناء قابلة لإعادة الاستخدام لتوجيهات النظام"},parser:{name:"المحللات",description:"تحليل المدخلات بمعالجة اللغة الطبيعية وتهيئة القواميس"}},emptyDescription:"أنشئ أول {{type}} لاستخدامه في مسارات العمل.",itemCount_zero:"{{count}} عنصر",itemCount_two:"عنصران",itemCount_few:"{{count}} عناصر",itemCount_many:"{{count}} عنصر",count_zero:"{{count}} مورد",count_two:"موردان",count_few:"{{count}} موارد",count_many:"{{count}} مورد",descriptionPlaceholder:"صف إعداد {{type}} هذا…"},D={compare:"مقارنة",compareVersions:"مقارنة الإصدارات",deployFailed:"فشل النشر",deploying:"جارٍ النشر…",diffHint:"تظهر الإضافات بالأخضر والحذوفات بالأحمر. اليسار = الأقدم، اليمين = الأحدث.",discardAndLeave:"تجاهل ومغادرة",discardMessage:"هل أنت متأكد من تجاهل جميع التغييرات غير المحفوظة؟ لا يمكن التراجع عن هذا الإجراء.",discardTitle:"تجاهل التغييرات؟",newerVersion:"الأحدث",olderVersion:"الأقدم",saveAndTest:"حفظ واختبار",swapVersions:"تبديل الإصدارات",unsavedMessage:"لديك تغييرات غير محفوظة ستُفقد. هل أنت متأكد من المتابعة؟",unsavedTitle:"تغييرات غير محفوظة",formTab:"نموذج",jsonTab:"JSON",save:"حفظ",discard:"تجاهل",saving:"جارٍ الحفظ...",saved:"تم الحفظ بنجاح",saveError:"فشل في الحفظ",dirty:"تغييرات غير محفوظة",version:"الإصدار",versionPicker:"اختر الإصدار",readOnly:"للقراءة فقط",formPlaceholder:"المحرر المرئي قريبًا. استخدم علامة تبويب JSON للتحرير.",jsonSchema:"التحقق من المخطط نشط",cascadeMode:"ستنتشر التغييرات إلى Workflow وAgent الأصل",updateUsageHint:"تحديث Workflows وAgents المحددة إلى الإصدار الجديد؟",updateUsage:"تحديث المحدد",skipUpdate:"تخطي",cascading:"جاري التحديث...",cascadeSuccess:"اكتمل التحديث المتتالي",invalidJson:"JSON غير صالح — انتقل إلى علامة تبويب JSON للإصلاح.",cascadePartialFailure_few:"فشل {{count}} من التحديثات المتتالية",cascadePartialFailure_many:"فشل {{count}} من التحديثات المتتالية",cascadePartialFailure_one:"فشل {{count}} من التحديثات المتتالية",cascadePartialFailure_two:"فشل {{count}} من التحديثات المتتالية",cascadePartialFailure_zero:"فشل {{count}} من التحديثات المتتالية",cascadePartialFailure_other:"فشل {{count}} من التحديثات المتتالية",usedInAgents_few:"مستخدم في {{count}} Agents",usedInAgents_many:"مستخدم في {{count}} Agents",usedInAgents_one:"مستخدم في {{count}} Agent",usedInAgents_two:"مستخدم في {{count}} Agents",usedInAgents_zero:"مستخدم في {{count}} Agents",usedInAgents_other:"مستخدم في {{count}} Agents"},A={condCapabilityMatch:"capabilityMatch",condDeploymentContext:"deploymentContext",strategy_executeAll:"تنفيذ الكل",strategy_executeUntilFirstSuccess:"حتى أول نجاح",invalidValue:"(غير صالح)",appendActions:"إلحاق إجراءات",expressionsAsActions:"تعبيرات كإجراءات",groups:"مجموعات السلوك",addGroup:"إضافة مجموعة",groupName:"اسم المجموعة",executionStrategy:"استراتيجية التنفيذ",rules:"القواعد",addRule:"إضافة قاعدة",ruleName:"اسم القاعدة",actions:"إجراءات",noActions:"لا توجد إجراءات",addAction:"إضافة",actionPlaceholder:"مثال: greet, get_weather",conditions:"شروط",addCondition:"إضافة شرط",conditionType:"نوع الشرط",nestedConditions:"شروط متداخلة",configKey:"مفتاح",configValue:"قيمة",addConfig:"إضافة تكوين",removeRule:"إزالة القاعدة",removeGroup:"إزالة المجموعة",removeCondition:"إزالة الشرط",noGroups:"لم يتم تحديد مجموعات سلوك",noRules:"لا توجد قواعد في هذه المجموعة",noConditions:"لا توجد شروط"},f={noEndpointsFound:"لم يتم العثور على نقاط نهاية في المواصفة",specUrlPlaceholder:"https://api.example.com/openapi.json",targetServerUrl:"URL الخادم الهدف",targetServerUrlPlaceholder:"https://api.example.com",calls:"استدعاءات HTTP",addCall:"إضافة استدعاء HTTP",callName:"اسم الاستدعاء",callDescription:"الوصف",descriptionPlaceholder:"وصف بلغة طبيعية لـ LLM Agents",request:"الطلب",method:"الطريقة",path:"المسار",pathPlaceholder:"/api/endpoint",headers:"الرؤوس",addHeader:"إضافة Header",queryParams:"معاملات الاستعلام",addQueryParam:"إضافة معامل",contentType:"نوع المحتوى",body:"جسم الطلب",bodyPlaceholder:"قالب نص JSON...",parameters:"معاملات (لـ LLM Agents)",paramName:"اسم المعامل",paramDescription:"الوصف",addParam:"إضافة معامل",options:"خيارات",saveResponse:"حفظ الاستجابة",responseObjectName:"اسم كائن الاستجابة",responseHeaderObjectName:"اسم كائن header الاستجابة",fireAndForget:"أرسل وانسَ",batchCalls:"استدعاءات دفعية",iterationObjectName:"اسم كائن التكرار",prePostInstructions:"تعليمات قبل/بعد",preRequest:"قبل الطلب",postResponse:"بعد الاستجابة",removeCall:"إزالة الاستدعاء",noCalls:"لم يتم تكوين استدعاءات HTTP",actions:"إجراءات مشغّلة",noActions:"لا توجد إجراءات",actionPlaceholder:"مثال: get_weather",addHttpCodeValidator:"إضافة مرشح رمز HTTP",httpCodeFilter:"مرشح رمز HTTP",runOnCodes:"التشغيل عند الرموز",skipOnCodes:"التخطي عند الرموز",propName:"اسم الخاصية",propValue:"قيمة أو قالب",overrideTitle:"استبدال القيمة الحالية",override:"استبدال",advancedMapping:"تعيين مسار الكائن",fromPath:"من مسار الكائن",toPath:"إلى مسار الكائن",convertToObject:"التحويل إلى كائن",runOnValidationError:"التشغيل عند خطأ التحقق",noPropertyInstructions:"لا توجد تعليمات خصائص",addPropertyInstruction:"إضافة تعليمة خاصية",pathToTargetArray:"المسار إلى المصفوفة الهدف",iterationObjName:"كائن التكرار",templateFilter:"تعبير التصفية",filterPlaceholder:"مرشح اختياري...",outputType:"نوع الإخراج",outputValue:"قيمة الإخراج",noOutputInstructions:"لا توجد تعليمات بناء الإخراج",addOutputInstruction:"إضافة تعليمة إخراج",qrValue:"قيمة الرد السريع",qrExpressions:"تعبيرات الرد السريع",noQrInstructions:"لا توجد تعليمات بناء الرد السريع",addQrInstruction:"إضافة تعليمة رد سريع",noRetryPolicy:"لا توجد سياسة إعادة محاولة",addRetryPolicy:"إضافة سياسة إعادة محاولة",maxRetries:"الحد الأقصى لإعادة المحاولة",backoffDelayMs:"تأخير التراجع (ms)",retryOnHttpCodes:"إعادة المحاولة عند رموز HTTP",valuePathMatchers:"مطابقات مسار القيمة",noValuePathMatchers:"لا توجد مطابقات مسار القيمة",valuePath:"مسار القيمة",contains:"يحتوي",equals:"يساوي",trueIfNoMatch:"إعادة المحاولة عند عدم التطابق",addValuePathMatcher:"إضافة مطابقة مسار القيمة",removeRetryPolicy:"إزالة سياسة إعادة المحاولة",delayMs:"التأخير (ms)",propertyInstructions:"تعليمات الخصائص",outputBuildInstructions:"تعليمات بناء الإخراج",qrBuildInstructions:"تعليمات بناء الرد السريع",retryBackoff:"إعادة المحاولة والتراجع",discoveredEndpoints:"نقاط النهاية المكتشفة",discoveryError:"تعذّر تحليل مواصفات OpenAPI",openApiSpecUrl:"استيراد من مواصفات OpenAPI",invalidUrl:"أدخل عنوان URL صالحاً بصيغة http:// أو https://",discovering:"جارٍ التحليل…",discoverEndpoints:"اكتشاف نقاط النهاية",retry:"إعادة المحاولة",selectedCount:"محدد",importAppend:"إلحاق بالاستدعاءات",importReplace:"استبدال جميع الاستدعاءات",confirmReplace:"نعم، استبدال الكل",replaceConfirmMessage:"سيؤدي هذا إلى استبدال {{count}} من الاستدعاءات الحالية. هل أنت متأكد؟"},P={continueOnErrorHint:"عند الفشل يستمر المسار؛ ويُكشف الخطأ عند ",descriptionPlaceholder:"وصف بلغة طبيعية لوكلاء LLM",governanceHint:"تحكّم في الأدوات المكشوفة. القائمة البيضاء = هذه فقط؛ القائمة السوداء = استبعاد هذه.",pipelineHint:"استدعاءات أدوات حتمية مُشغّلة بالإجراءات (وضع المسار).",responseObjectName:"اسم كائن الاستجابة",discoveredTools:"الأدوات المتاحة",whitelisted:"في القائمة البيضاء",addToWhitelist:"إضافة إلى القائمة البيضاء",addWhitelist:"قائمة بيضاء",blacklisted:"في القائمة السوداء",addToBlacklist:"إضافة إلى القائمة السوداء",addBlacklist:"قائمة سوداء",noRetryPolicy:"لا توجد سياسة إعادة محاولة",addRetryPolicy:"إضافة سياسة إعادة محاولة",maxAttempts:"الحد الأقصى للمحاولات",backoffDelayMs:"تأخير التراجع (ms)",backoffMultiplier:"مضاعف التراجع",maxBackoffDelayMs:"الحد الأقصى للتراجع (ms)",removeRetryPolicy:"إزالة سياسة إعادة المحاولة",callName:"اسم الاستدعاء",removeCall:"إزالة الاستدعاء",description:"الوصف",toolName:"اسم الأداة",parameterSchema:"مخطط المعاملات",triggerActions:"إجراءات مشغّلة",toolArguments:"وسيطات الأداة",addArgument:"إضافة وسيطة",saveResponse:"حفظ الاستجابة",continueOnError:"المتابعة عند الخطأ",retryBackoff:"إعادة المحاولة والتراجع",preRequest:"قبل الطلب",propertyInstructions:"تعليمات الخصائص",postResponse:"بعد الاستجابة",outputBuildInstructions:"تعليمات بناء الإخراج",qrBuildInstructions:"تعليمات بناء الرد السريع",discoveryError:"تعذّر الاتصال بخادم MCP",serverConnection:"اتصال الخادم",displayName:"الاسم المعروض",serverUrl:"عنوان URL لخادم MCP",discovering:"جارٍ الاتصال…",discoverTools:"اكتشاف الأدوات",transport:"النقل",timeoutMs:"المهلة (ms)",apiKey:"مفتاح API / مرجع Vault",toolGovernance:"حوكمة الأدوات",retry:"إعادة المحاولة",noToolsFound:"لم يتم العثور على أدوات على هذا الخادم",whitelist:"قائمة بيضاء (السماح فقط)",blacklist:"قائمة سوداء (استبعاد)",pipelineCalls:"استدعاءات Pipeline",addCall:"إضافة استدعاء MCP"},S=JSON.parse('{"addCustomInstruction":"إضافة تعليمة","addKnowledgeBase":"إضافة مرجع قاعدة معرفة","addMaskingRule":"إضافة قاعدة","addToolLimit":"إضافة حد أداة","anchorFirstSteps":"تثبيت الخطوات الأولى","anchorFirstStepsHint":"تُحتفظ الأدوار الافتتاحية دائماً (0 = لا شيء)","conversationMemory":"ذاكرة المحادثة","conversationMemoryDesc":"تُضغط الأدوار الأقدم تدريجياً في ملخّص متجدد. يرى LLM: [موجه النظام + الملخّص] + [آخر N أدوار حرفياً]. تتيح أداة conversationRecall المدمجة للوكيل التعمق في الأدوار الملخَّصة عند الطلب.","counterweight":"الموازنات السلوكية","counterweightCustom":"تعليمات مخصصة","counterweightCustomHint":"اتركه فارغاً لاستخدام الإعداد المسبق المدمج للمستوى المحدد.","counterweightCustomOverride":"تتجاوز التعليمات المخصصة نص المستوى المُعدّ مسبقاً بالكامل.","counterweightDesc":"أدرج تعليمات أمان في موجه النظام. تحمي من الثقة المفرطة والهلوسة والتصرف دون إشراف.","counterweightLevel":"مستوى الأمان","counterweightLevelCautious":"حذر","counterweightLevelNormal":"عادي (بدون إدراج)","counterweightLevelStrict":"صارم","counterweightPlacement":"الموضع","counterweightPlacementPrefix":"قبل موجه النظام","counterweightPlacementSuffix":"بعد موجه النظام","counterweightStrictNote":"يُخفَّض الوضع الصارم تلقائياً إلى حذر أثناء التنفيذ المجدول/الدفعي لمنع سلوك \\"خطوة واحدة في كل مرة\\" المدمّر.","defaultMaxChars":"الحد الأقصى الافتراضي للأحرف","defaultMaxCharsHint":"(~12k رمز عند 50000)","enableSummary":"تفعيل الملخّص المتجدد","enableWorkflowRag":"الاكتشاف التلقائي لـ RAG مسار العمل","excludeProps":"استبعاد الخصائص من الملخّص","excludePropsDesc":"تخطَّ الحقائق الملتقطة بالفعل كخصائص دائمة — ركّز على الاستدلال والسياق الضمني","httpCallRag":"RAG عبر httpCall (بلا بنية تحتية)","httpCallRagHint":"نفّذ httpCall مُسمّى قبل استدعاء LLM. تُدرَج الاستجابة كسياق — دون الحاجة إلى مخزن متجهات.","httpCallRagPlaceholder":"مثل: search_docs، query_wiki","identityMasking":"إخفاء الهوية","identityMaskingDesc":"امنع LLM من الكشف عن اسم نموذجه أو مزوّده عند الاستفسار.","identityMaskingEmptyWarning":"الإخفاء مُفعّل لكنه بلا قواعد. أضف قاعدة واحدة على الأقل ليصبح الإخفاء ساري المفعول.","identityMaskingRulePlaceholder":"مثل: لا تكشف أبداً أنك نموذج لغوي للذكاء الاصطناعي","identityMaskingRules":"قواعد الإخفاء","identityMaskingRulesHint":"يلزم التفعيل ووجود قاعدة واحدة على الأقل معاً ليصبح الإخفاء ساري المفعول.","injectionStrategy":"الإدراج","kbNamePlaceholder":"مثل: product-docs","knowledgeBases":"قواعد المعرفة","knowledgeBasesHint":"أشِر صراحةً إلى قواعد المعرفة بالاسم. يجب أن يطابق كل اسم RagConfiguration في مسار العمل.","legacyRag":"RAG القديم (مهمَل)","legacyRagHint":"يستخدم هذا التكوين تنسيق retrievalAugmentor المهمَل. انتقل إلى الأوضاع أعلاه.","maxContextTokens":"الحد الأقصى لرموز السياق","maxContextTokensHint":"-1 = استخدام عدد الخطوات بدلاً من ذلك","maxRecallHint":"لكل استدعاء استرجاع","maxRecallTurns":"الحد الأقصى لأدوار الاسترجاع","maxSummaryTokens":"الحد الأقصى لرموز الملخّص","noKnowledgeBases":"لم تتم الإشارة إلى أي قواعد معرفة","perToolLimits":"تجاوزات لكل أداة","prePostDesc":"قم بتكوين تعليمات الخصائص التي تعمل قبل كل طلب LLM، وتعليمات المخرجات/الخصائص التي تعمل بعد كل استجابة.","promptSafety":"أمان الموجه","ragDefaults":"معاملات الاسترجاع الافتراضية","recentWindow":"النافذة الحديثة (خطوات)","recentWindowHint":"الأدوار المحتفظ بها حرفياً","removeLegacyRag":"إزالة التكوين القديم","strategyPaginate":"ترقيم الصفحات (يجلب LLM المزيد)","strategySummarize":"تلخيص (عبر نموذج رخيص)","strategyTruncate":"اقتطاع (قطع صارم)","summarizationPrompt":"موجه تلخيص مخصص (اختياري)","summarizationPromptPlaceholder":"اتركه فارغاً لاستخدام الموجه المنظم الافتراضي الذي يحافظ على الأهداف والقرارات والاستدلال والنبرة.","summarizeInfoBanner":"يستخدم المُلخِّص نفس المزوّد ومفتاح API لهذه المهمة. يُستبدل اسم النموذج فقط بنسخة أرخص (مثل gpt-4o-mini).","summarizerModel":"نموذج المُلخِّص","summarizerModelHint":"(يعود إلى الاقتطاع إذا كان فارغاً)","summarizerModelPlaceholder":"مثل: gpt-4o-mini","summaryModel":"نموذج الملخّص","summaryProvider":"مزوّد الملخّص","summaryProviderHint":"استخدم نموذجاً رخيصاً/سريعاً للتلخيص","tokenWindow":"نافذة سياق مدركة للرموز","tokenWindowDesc":"استبدل السجل المستند إلى عدد الخطوات بتعبئة مدركة للرموز. عند ضبط maxContextTokens (> 0)، يُدرج المحرك أكبر عدد ممكن من الأدوار الحديثة ضمن الميزانية، مع تثبيت الأدوار الافتتاحية اختيارياً.","toolResponseLimits":"حدود استجابة الأدوات","toolResponseLimitsDesc":"اقتطع مخرجات الأدوات المطوّلة قبل إعادة إدراجها في نافذة سياق LLM. يمنع تضخّم السياق.","truncationStrategy":"الاستراتيجية","workflowRagHint":"يكتشف تلقائياً جميع خطوات RAG من مسار العمل. يُستخدم فقط عند عدم إدراج قواعد معرفة صريحة أعلاه.","tasks":"مهام LLM","addTask":"إضافة مهمة","noTasks":"لم يتم تكوين مهام LangChain","removeTask":"إزالة المهمة","taskId":"معرف المهمة","description":"الوصف","descriptionPlaceholder":"ما تفعله هذه المهمة","triggerActions":"إجراءات مشغّلة","noActions":"لا توجد إجراءات","actionPlaceholder":"مثال: help, chat","systemPrompt":"موجه النظام","systemPromptPlaceholder":"أنت مساعد مفيد...","modelParams":"معاملات النموذج","addParam":"إضافة معامل","agentMode":"وضع الوكيل","enableBuiltInTools":"تفعيل الأدوات المدمجة","toolWhitelist":"قائمة بيضاء (فارغ = الكل)","enableHttpCallTools":"اكتشاف تلقائي لأدوات HTTP Call","enableHttpCallToolsDesc":"عرض جميع إضافات httpcall من Workflow تلقائياً كأدوات LLM","httpCallTools":"روابط أدوات اتصال HTTP","httpCallToolsHint":"URIs httpcall صريحة (بالإضافة إلى المكتشفة تلقائياً)","addTool":"إضافة URI أداة","mcpServers":"خوادم MCP","mcpServersDesc":"خوادم MCP خارجية تصبح أدواتها متاحة لـ LLM","addMcpServer":"إضافة خادم MCP","mcpUrlPlaceholder":"http://localhost:7070/mcp","mcpName":"الاسم","mcpApiKey":"API Key / مرجع vault","historyLimit":"حد السجل","historyLimitHint":"(-1 = غير محدود)","budgetPerf":"الميزانية والأداء","maxBudget":"الميزانية القصوى ($)","costTracking":"تتبع التكاليف","toolCaching":"خبأ الأدوات","rateLimiting":"حدود المعدل","defaultRate":"المعدل الافتراضي (طلب/دقيقة)","prePostInstructions":"تعليمات قبل/بعد","preRequest":"قبل الطلب","postResponse":"بعد الاستجابة","enableMcpCallTools":"اكتشاف أدوات MCP تلقائياً","enableMcpCallToolsDesc":"كشف جميع إضافات mcpcalls من مسار العمل تلقائياً كأدوات LLM","a2aAgents":"وكلاء A2A","a2aAgentsDesc":"وكلاء عن بُعد متوافقون مع A2A تصبح مهاراتهم أدوات LLM","addA2aAgent":"إضافة وكيل A2A","a2aUrlPlaceholder":"https://remote.example.com/a2a/agents/...","a2aName":"الاسم المعروض","a2aApiKey":"${vault:my-a2a-key}","a2aTimeout":"المهلة (مللي ثانية)","a2aSkillsFilter":"فلتر المهارات (فارغ = الكل)","cascade":"تسلسل النماذج","cascadeDesc":"Try a cheap/fast model first. If confidence is too low, automatically escalate to a more powerful (and expensive) model.","cascadeEnable":"تفعيل تسلسل النماذج","cascadeStrategy":"الاستراتيجية","strategyCascade":"تصعيد تسلسلي","strategyParallel":"متوازي (مستقبلي)","cascadeStrategyHint":"يبدأ بالنموذج الأرخص ويُصعّد عند انخفاض الثقة","cascadeEvalStrategy":"تقييم الثقة","cascadeEvalHint":"كيفية تحديد ما إذا كانت الاستجابة كافية","evalStructured":"مخرجات منظمة (JSON)","evalHeuristic":"استدلالي (كشف التردد)","evalJudge":"نموذج حكم (LLM ثانوي)","evalNone":"بدون (قبول دائم)","cascadeInAgent":"استخدام التسلسل أيضاً في وضع الوكيل (مع الأدوات)","cascadeSteps":"Cascade Steps","cascadeStepsDesc":"Order matters: first step tried first. Last step is always accepted.","cascadeModelName":"مثال: claude-sonnet-5","cascadeConfidence":"Min. Confidence (0-1)","cascadeConfidencePlaceholder":"فارغ = قبول دائم","cascadeTimeout":"المهلة (مللي ثانية)","addCascadeStep":"إضافة مرحلة تسلسل","cascadeReturnBest":"إرجاع الاستجابة الأعلى تقييماً عبر المراحل","cascadeEvalNoneHint":"تقييد الثقة معطّل — يُقبل رد المرحلة الأولى دائماً.","cascadeCeilings":"الحدود القصوى والتسعير","cascadeMaxDuration":"أقصى مدة إجمالية (مللي ثانية)","cascadeMaxCost":"أقصى تكلفة لكل تشغيل ($)","cascadeUnlimited":"بلا حدود","cascadeInputPrice":"$ الإدخال / 1M رمز","cascadeOutputPrice":"$ الإخراج / 1M رمز","cascadePricingHint":"يغذّي تسعير الرموز الافتراضي تتبّع التكلفة والحد الأقصى للتكلفة. يمكن للمراحل الفردية تجاوزه.","cascadeJudgeModel":"نموذج الحكم","cascadeJudgeModelDesc":"نموذج منفصل (رخيص عادةً) يقيّم ثقة كل استجابة.","cascadeJudgeApiKey":"مفتاح API لنموذج الحكم","cascadeHeuristic":"ضبط الاستدلال","cascadeHeuristicDesc":"تجاوزات اختيارية لكشف التردد والرفض. تستخدم الحقول الفارغة الإعدادات الإنجليزية الافتراضية المدمجة. ترجم قوائم العبارات للنشر بغير الإنجليزية.","cascadeHeuristicDefaults":"الإعدادات الافتراضية المدمجة","cascadeHeuristicPhrasePlaceholder":"أضف عبارة…","cascadeHeuristicPhrasesLow":"عبارات التردد (ثقة منخفضة)","cascadeHeuristicPhrasesRefusal":"عبارات الرفض","cascadeHeuristicShortLen":"طول الاستجابة القصيرة","cascadeHeuristicShortScore":"درجة القصيرة","cascadeHeuristicRefusalScore":"درجة الرفض","cascadeHeuristicHedgingScore":"درجة التردد","cascadeHeuristicDefaultScore":"الدرجة الافتراضية","cascadeStepApiKey":"مفتاح API","cascadeStepApiKeyPlaceholder":"يرث مفتاح المهمة إذا كان فارغاً","cascadeCrossProvider":"مزوّد مختلف","cascadeStepAdvanced":"متقدم (التسعير والمعاملات)","cascadeStepInputPrice":"$ الإدخال / 1M","cascadeStepOutputPrice":"$ الإخراج / 1M","cascadeStepPriceInherit":"افتراضي التسلسل","cascadeStepParams":"معاملات إضافية","cascadeStepAddParam":"إضافة معامل","cascadeIssues":{"NO_STEPS":"التسلسل مُفعّل لكن بلا مراحل — سيفشل عند تشغيله.","UNKNOWN_STRATEGY":"استراتيجية غير معروفة \\"{{strategy}}\\" — سيعمل التسلسل بالتتابع.","PARALLEL_NOT_IMPLEMENTED":"الاستراتيجية المتوازية غير مُنفّذة بعد — تعمل المراحل بالتتابع.","UNKNOWN_EVAL_STRATEGY":"تقييم ثقة غير معروف \\"{{strategy}}\\" — سيُعتمد المخرجات المنظمة افتراضياً.","JUDGE_MODEL_MISSING":"تقييم نموذج الحكم بلا نموذج حكم مُهيّأ — تعود الثقة إلى الاستدلال.","JUDGE_CROSS_PROVIDER_NO_APIKEY":"يستخدم نموذج الحكم مزوّداً مختلفاً لكن بلا مفتاح API خاص به — سيرث مفتاح المهمة.","MAX_DURATION_NONPOSITIVE":"يجب أن تكون أقصى مدة إجمالية أكبر من 0.","MAX_COST_NEGATIVE":"لا يمكن أن تكون أقصى تكلفة لكل تشغيل سالبة.","CASCADE_INPUT_PRICE_NEGATIVE":"لا يمكن أن يكون سعر إدخال التسلسل سالباً.","CASCADE_OUTPUT_PRICE_NEGATIVE":"لا يمكن أن يكون سعر إخراج التسلسل سالباً.","CONVERT_TO_OBJECT_STRUCTURED":"convertToObject غير متوافق مع ثقة المخرجات المنظمة — سيستخدم التسلسل الاستدلال بدلاً منها.","STEP_INPUT_PRICE_NEGATIVE":"لا يمكن أن يكون سعر إدخال المرحلة {{step}} سالباً.","STEP_OUTPUT_PRICE_NEGATIVE":"لا يمكن أن يكون سعر إخراج المرحلة {{step}} سالباً.","STEP_CONFIDENCE_OUT_OF_RANGE":"يجب أن تكون ثقة المرحلة {{step}} بين 0 و1.","STEP_DEAD_NULL_THRESHOLD":"المرحلة {{step}} بلا حد أدنى للثقة — تصبح المراحل اللاحقة غير قابلة للوصول.","STEP_TIMEOUT_NONPOSITIVE":"يجب أن تكون مهلة المرحلة {{step}} أكبر من 0.","STEP_CROSS_PROVIDER_NO_APIKEY":"تستخدم المرحلة {{step}} مزوّداً مختلفاً لكن بلا مفتاح API خاص بها — سترث مفتاح المهمة."},"parallelExecution":"تنفيذ متوازي للأدوات","parallelExecutionDesc":"Run independent tool calls concurrently","parallelTimeout":"المهلة (مللي ثانية)","maxToolIterations":"أقصى تكرارات الأدوات","maxToolIterationsHint":"(افتراضي 10)","toolRateLimits":"حدود المعدل لكل أداة","toolRateLimitsDesc":"Override default rate for specific tools","toolName":"اسم الأداة","addToolRate":"إضافة حد معدل","retryConfig":"تكوين إعادة المحاولة","retryDesc":"Configure automatic retries with exponential backoff.","retryMaxAttempts":"أقصى عدد محاولات","retryDelay":"التأخير الأولي (مللي ثانية)","retryMultiplier":"مضاعف التراجع","retryMaxDelay":"أقصى تأخير (مللي ثانية)","ragConfig":"RAG (استرجاع المعرفة)","ragDesc":"Augment LLM responses with retrieved documents.","ragHttpCall":"عنوان استدعاء HTTP","ragEmbeddingModel":"نموذج التضمين","ragEmbeddingModelPlaceholder":"مثال: text-embedding-3-small","ragEmbeddingStore":"مخزن التضمين","ragEmbeddingStorePlaceholder":"مثال: pgvector, qdrant","ragMaxResults":"أقصى عدد نتائج","ragMinScore":"Min Similarity Score (0-1)","moveDown":"تحريك لأسفل","moveUp":"تحريك لأعلى","removeStep":"إزالة الخطوة","execution":"التنفيذ","budgetCosts":"الميزانية والتكاليف","preRequestDesc":"تعيين أو تحويل الخصائص قبل تنفيذ LLM.","postResponseDesc":"معالجة مخرجات LLM: تعيين الخصائص، وبناء رسائل المخرجات، وإنشاء ردود سريعة.","postPropertyInstructions":"تعليمات الخصائص","postOutputInstructions":"تعليمات المخرجات","postQrInstructions":"تعليمات الردود السريعة","allSkills":"جميع المهارات","skillPlaceholder":"مثال: order-tracking","modeAgent":"وكيل","modeChat":"دردشة","perMinute":"/دقيقة","allTools":"جميع الأدوات","selectSpecific":"اختيار محدد","allToolsInfo":"جميع الأدوات المدمجة ({{count}}) متاحة لـ LLM. اختر «اختيار محدد» لتحديد الأدوات المكشوفة.","availableTools":"الأدوات المتاحة","toolCount":"{{selected}} من {{total}} محددة","toolSources":"مصادر أدوات مسار العمل","toolSourcesInfo":"كلا المصدرين مفعلان افتراضياً — جميع استدعاءات HTTP وMCP في مسار العمل تُكشف تلقائياً كأدوات LLM. عطّل مصدراً لاستبعاده.","included":"مُضمّن","toolApprovals":"حجب موافقة الأدوات (لكل مهمة)","toolApprovalsEnable":"تجاوز موافقات الأدوات لهذه المهمة","toolApprovalsDesc":"يتجاوز موافقات الأدوات على مستوى الوكيل لهذه المهمة فقط — استبدال كامل، وليس دمجًا.","responseValidation":"التحقق من الاستجابة واستردادها","responseValidationDesc":"تحكّم في كيفية تفاعل المحرك مع دور فارغ أو مقتطع أو مُصفّى بالمحتوى أو مرفوض أو منتهي المهلة. يستبدل \\"الاحتياطي\\" برسالة جاهزة؛ ويُفشل \\"الخطأ\\" الدور؛ ويسجّل \\"التحذير\\" ويتابع؛ ولا يفعل \\"التجاهل\\" شيئًا.","rvEnable":"تمكين التحقق من الاستجابة","rvDisabledInfo":"يتم حفظ السياسات أدناه لكنها تسري فقط أثناء تمكين التحقق.","rvActionIgnore":"تجاهل","rvActionWarn":"تحذير (تسجيل والمتابعة)","rvActionFallback":"احتياطي (رسالة جاهزة)","rvActionError":"خطأ (إفشال الدور)","rvOnEmpty":"استجابة فارغة","rvOnEmptyHint":"لم يُرجع LLM أي شيء (فارغ أو null)","rvOnTruncation":"استجابة مقتطعة","rvOnTruncationHint":"تم قطع الاستجابة (finishReason=LENGTH)","rvOnContentFilter":"مُصفّى بالمحتوى","rvOnContentFilterHint":"تم حظر الاستجابة بواسطة مرشّح محتوى المزود","rvOnRefusal":"رفض","rvOnRefusalHint":"رفض LLM الإجابة (كشف إرشادي)","rvOnStreamingTimeout":"انتهاء مهلة البث","rvOnStreamingTimeoutHint":"انتهت مهلة استجابة بث قبل اكتمالها","streamingTimeoutSeconds":"مهلة البث (بالثواني)","streamingTimeoutSecondsHint":"يتجاوز الإعداد الافتراضي للمحرك (120 ثانية). ينطبق فقط أثناء البث؛ فارغ = استخدام الافتراضي.","taskPricing":"تسعير الاستدعاءات العادية","taskPricingDesc":"يحدد سعر استدعاءات النموذج العادية (غير المتسلسلة) لهذه المهمة لأغراض تتبع التكلفة وسقوف تكلفة المجموعة. بدون سعر (فارغ) يُحتسب كـ 0$."}'),C={labelPlaceholder:"تسمية الرابط...",pathPlaceholder:"مسار الرابط...",altPlaceholder:"نص بديل...",uriPlaceholder:"رابط الصورة...",language:"اللغة",langPlaceholder:"مثال: en, ar",outputSets:"مجموعات المخرجات",addOutputSet:"إضافة مجموعة مخرجات",noOutputSets:"لم يتم تكوين مجموعات مخرجات",actionName:"اسم الإجراء",timesOccurred:"×",removeOutput:"إزالة",outputs:"المخرجات",alternativeGroup:"مجموعة بديلة",addAlternative:"إضافة بديل",addOutputGroup:"إضافة مجموعة مخرجات",textPlaceholder:"نص المخرج...",urlPlaceholder:"الرابط…",delayMs:"تأخير (مللي ثانية)",quickReplies:"ردود سريعة",noQuickReplies:"لا توجد Quick Replies",addQuickReply:"إضافة Quick Reply",qrValue:"نص الزر",qrExpressions:"التعبيرات",default:"افتراضي",invalidJson:"JSON غير صالح",buttonTypePlaceholder:"نوع الزر (مثل postback)",buttonLabelPlaceholder:"التسمية...",onPressPlaceholder:'{"action":"..."}',subTypePlaceholder:"النوع الفرعي (مثل text، email)",inputPlaceholderPlaceholder:"نص العنصر النائب...",inputLabelPlaceholder:"التسمية...",defaultValuePlaceholder:"القيمة الافتراضية...",minLength:"الحد الأدنى للطول",minLengthShort:"الأدنى",maxLength:"الحد الأقصى للطول",maxLengthShort:"الأقصى",validationMsgPlaceholder:"رسالة خطأ التحقق...",jsonPlaceholder:'{"key":"value"}'},k={setters:"معيني الخصائص",addSetter:"إضافة Setter",noSetters:"لم يتم تكوين Property Setters",removeSetter:"إزالة",triggerActions:"إجراءات مشغّلة",noActions:"لا توجد إجراءات",actionPlaceholder:"مثال: greet, fallback",properties:"الخصائص",noProperties:"لا توجد خصائص",addProperty:"إضافة خاصية",propName:"اسم الخاصية",propValue:"القيمة / التعبير",fromPath:"مسار المصدر",fromObjectPath:"fromObjectPath",override:"استبدال",propsCount:"خصائص",untitled:"(بدون إجراءات)",openEditor:"تحرير في المحرر",visibilityTitle:"الوكلاء الذين يمكنهم رؤية خاصية longTerm هذه",editValue:"تعديل القيمة",toggleGroup:"تبديل مجموعة الخصائص"},b={language:"اللغة",langPlaceholder:"مثال: en, ar",words:"الكلمات",addWord:"إضافة كلمة",wordPlaceholder:"مثال: مرحبا",phrases:"العبارات",addPhrase:"إضافة عبارة",phrasePlaceholder:"مثال: صباح الخير",regExs:"التعبيرات النظامية",addRegEx:"إضافة RegEx",regexPlaceholder:"تعبير نظامي",expressionPlaceholder:"مثال: greeting(hello)",frequency:"التكرار",none:"لم يتم تحديد أي"},w={title:"تهيئة المحلل",configure:"تهيئة",config:"الإعدادات",appendExpressions:"إلحاق التعبيرات",includeUnused:"تضمين التعبيرات غير المستخدمة",includeUnknown:"تضمين التعبيرات غير المعروفة",dictionaries:"القواميس",builtInDicts:"القواميس المدمجة",regularDicts:"القواميس العادية",addDict:"إضافة",removeDict:"إزالة القاموس",noRegularDicts:"لم يتم تهيئة أي قواميس عادية",regularDictLabel:"قاموس عادي",dictUri:"عنوان URI لمورد القاموس",dictUriPlaceholder:"eddi://ai.labs.dictionary/dictionarystore/dictionaries/?version=",corrections:"التصحيحات",distance:"المسافة",normalizers:"المُعيِّرات",removePunctuation:"إزالة علامات الترقيم",regexPattern:"النمط",dict:{integer:"قاموس الأعداد الصحيحة",decimal:"قاموس الأعداد العشرية",punctuation:"قاموس علامات الترقيم",email:"قاموس البريد الإلكتروني",time:"قاموس التعبيرات الزمنية",ordinalNumber:"قاموس الأعداد الترتيبية"},corr:{levenshtein:"تصحيح ليفنشتاين",phonetic:"تصحيح صوتي",mergedTerms:"تصحيح المصطلحات المدمجة"},norm:{punctuation:"مُعيِّر علامات الترقيم",specialCharacter:"مُعيِّر الأحرف الخاصة",contractedWords:"مُعيِّر الكلمات المختصرة",allowedCharacter:"مُعيِّر الأحرف المسموحة"}},E={activeConversations:"المحادثات النشطة",eventHistory:"سجل الأحداث",noActiveQueues:"لا توجد محادثات نشطة قيد المعالجة",payload:"الحمولة",successRate:"معدل النجاح",tasksPerSec:"مهمة/ث",totalPending:"في الانتظار",confirmDiscardDescription:"يزيل نهائيًا المهمة المُرسَلة إلى الرسائل الميتة. لا يمكن إعادة تشغيلها بعد ذلك. لا يمكن التراجع.",confirmDiscardTitle:"تجاهل إدخال الرسائل الميتة؟",title:"لوحة تحكم المنسق",subtitle:"مراقبة معالجة المحادثات وإدارة إدخالات Dead-Letter",type:"نوع Coordinator",connection:"الاتصال",processed:"المهام المعالجة",deadLettered:"رسائل ميتة",activeQueues:"قوائم الانتظار النشطة",queued:"في الانتظار",deadLetterTitle:"الرسائل الميتة",noDeadLetters:"لا توجد إدخالات Dead-Letter",colId:"ID",colConversation:"محادثة",colError:"خطأ",colTime:"الوقت",colActions:"إجراءات",replay:"إعادة التشغيل",discard:"تجاهل",purgeAll:"حذف الكل",confirmPurge:"حذف الكل؟",yes:"نعم",cancel:"إلغاء",replaySuccess:"تم إعادة تشغيل Dead-Letter",replayError:"فشل إعادة التشغيل",discardSuccess:"تم تجاهل Dead-Letter",discardError:"فشل التجاهل",purgeSuccess:"تم حذف جميع إدخالات Dead-Letter",purgeError:"فشل الحذف",empty:"لا تتوفر بيانات المنسق",emptyHint:"قد تكون خدمة المنسق لا تزال في طور البدء. ستظهر البيانات تلقائيًا.",lastNSnapshots:"آخر {{count}} لقطة"},M={expand:"توسيع",expandHint:"ملء الشاشة (Ctrl+Shift+F)",close:"تم",lines:"سطور",chars:"أحرف",fullscreenTitle:"محرر المحتوى",fullscreenDescription:"محرر ملء الشاشة. اضغط Escape للإغلاق."},R={newLogs:"سجلات جديدة",title:"السجلات",description:"مراقبة تدفق السجلات في الوقت الفعلي أو البحث في السجلات التاريخية.",tabLive:"مباشر",tabHistory:"السجل",connected:"متصل",disconnected:"غير متصل",filterAgent:"معرف الوكيل…",filterConversation:"معرّف المحادثة...",filterInstance:"معرّف المثيل...",allLevels:"جميع المستويات",pause:"إيقاف مؤقت",resume:"استئناف",clear:"مسح",search:"بحث",waitingForLogs:"بانتظار السجلات...",loadingRecentLogs:"جاري تحميل السجلات الحديثة...",noRecentLogs:"لا يوجد نشاط سجل حديث.",noRecentLogsHint:"ستظهر السجلات الجديدة هنا أثناء تدفقها من الواجهة الخلفية.",connectingStream:"جارٍ الاتصال بالبث...",noHistoryLogs:"لم يتم العثور على سجلات تاريخية.",entryCount:"{{count}} إدخال",showStacktrace:"عرض Stacktrace ({{count}} إطار)",hideStacktrace:"إخفاء Stacktrace",allAgents:"جميع الوكلاء",allConversations:"جميع المحادثات",waitingHint:"ستظهر السجلات هنا أثناء تدفقها من الخلفية.",noHistoryHint:"حاول تعديل الفلاتر أو البحث عن وكيل أو محادثة مختلفة.",searchConversations:"بحث بالمعرف أو الوكيل أو المستخدم…",stepsCount:"{{count}} خطوات",noConversationsFound:"لم يتم العثور على محادثات",useConversationId:"استخدام المعرف: {{id}}",searchLogs:"بحث في السجلات…",errors:"أخطاء",warnings:"تحذيرات",infos:"معلومات",debugs:"تصحيح",filteredCount:"{{shown}} من {{total}} إدخالات",copyEntry:"نسخ إدخال السجل",export:"تصدير",stateReady:"جاهز",stateActive:"نشط",stateError:"خطأ",stateEnded:"منتهي"},L=JSON.parse('{"loadError":"تعذّر تحميل الأسرار","allAgents":"جميع الوكلاء","allowedAgents":"الوكلاء المسموح لهم","allowedAgentsHint":"اتركه فارغاً لجميع الوكلاء. تساعد إضافة معرفات الوكلاء على تتبّع أي الوكلاء يستخدم هذا السر.","allowedAgentsLabel":"الوكلاء المسموح لهم (اختياري)","allowedAgentsPlaceholder":"اكتب معرف الوكيل واضغط Enter (فارغ = جميع الوكلاء)","deleteKey":"حذف {{key}}","hideValue":"إخفاء القيمة","newValuePlaceholder":"قيمة سر جديدة…","rotate":"تدوير","rotateDesc":"أدخل القيمة الجديدة. ستستمر المراجع الحالية في التحوّل إلى القيمة المُحدَّثة.","rotateKey":"تدوير {{key}}","rotateSuccess":"تم تدوير السر \\"{{key}}\\"","rotateTitle":"تدوير \\"{{key}}\\"","showValue":"إظهار القيمة","title":"خزنة الأسرار","description":"إدارة Secrets المشفرة في الخزنة. لا تُكشف القيم أبداً.","tenantId":"معرف المستأجر","refresh":"تحميل Secrets","create":"إضافة Secret","createTitle":"إضافة Secret","keyName":"اسم المفتاح","keyNameLabel":"اسم المفتاح","keyNamePlaceholder":"مثال: apiKey, dbPassword","valueLabel":"قيمة Secret","valuePlaceholder":"أدخل قيمة Secret…","storeWarning":"سيتم تشفير القيمة. لا يمكن استرجاعها بعد التخزين.","store":"تخزين Secret","storeSuccess":"تم تخزين Secret \\"{{key}}\\"","deleteSuccess":"تم حذف Secret \\"{{key}}\\"","created":"تاريخ الإنشاء","lastAccessed":"آخر وصول","checksum":"مجموع اختباري","actions":"إجراءات","confirmDeleteTitle":"حذف Secret","confirmDeleteMessage":"هل أنت متأكد من الحذف الدائم لـ \\"{{key}}\\"؟ لا يمكن التراجع عن هذا.","empty":"لم يتم العثور على Secrets","emptyHint":"لا توجد Secrets مخزّنة للمستأجر \\"{{tenant}}\\" بعد. انقر على \\"إضافة Secret\\" لإنشاء واحد.","vaultUp":"Vault متصل","vaultDown":"Vault غير متصل","descriptionLabel":"الوصف (اختياري)","descriptionPlaceholder":"مثل: مفتاح API لـ OpenAI للإنتاج","descriptionCol":"الوصف","reference":"المرجع","willUseRef":"المرجع:","copyRef":"نسخ مرجع الخزنة","refCopied":"تم النسخ: {{ref}}","lastRotated":"آخر تدوير","scopeExplanation":"الأسرار محددة لكل مستأجر ومشتركة عبر جميع الوكلاء. استخدم ${vault:keyName} للرجوع إليها. الإدارة عن طريق كتابة الإعدادات.","creatingFor":"يحفظ في المستأجر \\"{{tenant}}\\" — متاح لجميع الوكلاء","vaultNotConfigured":"خزنة الأسرار غير مهيأة","viewDocs":"عرض المستندات","selectAgentFirst":"اختر وكيلاً أولاً","dangerZoneTitle":"دورة حياة مفتاح التشفير","dangerZoneDesc":"إجراءات استرداد تشغيلية للمفاتيح التشفيرية الخاصة بالـ Vault. استخدمها لتدوير المفاتيح أو استعادة الوصول بعد تغيير المفتاح الرئيسي. يختلف هذا عن تدوير قيمة سر فردي أعلاه.","rotateDekTitle":"تدوير مفتاح التشفير (DEK)","rotateDekBlurb":"آمن — دون إعادة تشغيل. يُنشئ مفتاح تشفير بيانات جديدًا لكل مستأجر ويعيد تشفير جميع أسرار هذا المستأجر.","rotateDekAction":"تدوير DEK","rotateDekConfirmTitle":"تدوير مفتاح التشفير (DEK)؟","rotateDekConfirm":"تدوير DEK الآن","rotateKekTitle":"تدوير المفتاح الرئيسي (KEK)","rotateKekBlurb":"يعيد تشفير جميع مفاتيح DEK للمستأجرين بمفتاح رئيسي جديد. يتطلب تحديث EDDI_VAULT_MASTER_KEY وإعادة التشغيل بعد ذلك.","rotateKekAction":"تدوير المفتاح الرئيسي","rotateKekConfirmTitle":"تدوير المفتاح الرئيسي (KEK)؟","rotateKekConfirmDesc":"يعيد تشفير مفتاح تشفير البيانات لكل مستأجر بمفتاح رئيسي جديد. تبقى قيم الأسرار نفسها دون تغيير.","rotateKekConfirm":"تدوير المفتاح الرئيسي الآن","kekTlsWarning":"يتم إرسال كلا المفتاحين في نص الطلب. قم بذلك فقط عبر اتصال TLS (HTTPS) حتى لا تنكشف المفاتيح أثناء النقل.","kekOldKeyLabel":"المفتاح الرئيسي الحالي","kekOldKeyPlaceholder":"EDDI_VAULT_MASTER_KEY الحالي","kekNewKeyLabel":"المفتاح الرئيسي الجديد","kekNewKeyPlaceholder":"مفتاح جديد — 8 أحرف على الأقل","kekNewKeyTooShort":"يجب أن يتكون المفتاح الرئيسي الجديد من 8 أحرف على الأقل.","kekRestartHint":"بعد التدوير، يجب تحديث EDDI_VAULT_MASTER_KEY إلى المفتاح الجديد وإعادة تشغيل EDDI.","kekResultInstruction":"إجراء مطلوب: عيّن متغير البيئة EDDI_VAULT_MASTER_KEY على المفتاح الرئيسي الجديد وأعد تشغيل EDDI. حتى تفعل ذلك، لا تزال النسخة قيد التشغيل تستخدم المفتاح القديم في الذاكرة.","resetTenantTitle":"إعادة تعيين الـ Vault لهذا المستأجر","resetTenantBlurb":"الملاذ الأخير المدمّر. يحذف نهائيًا جميع الأسرار ومفتاح DEK حتى يتمكن الـ Vault من البدء من جديد — استخدمه بعد فقدان المفتاح الرئيسي أو تغييره.","resetTenantAction":"إعادة تعيين الـ Vault","resetTenantConfirmTitle":"إعادة تعيين الـ Vault لهذا المستأجر؟","resetTenantConfirm":"إعادة تعيين الـ Vault نهائيًا","resetConfirmLabel":"اكتب اسم المستأجر \\"{{tenant}}\\" للتأكيد","tableTitle_few":"{{count}} سر في المستأجر \\"{{tenant}}\\"","tableTitle_many":"{{count}} سر في المستأجر \\"{{tenant}}\\"","tableTitle_one":"{{count}} سر في المستأجر \\"{{tenant}}\\"","tableTitle_two":"{{count}} سر في المستأجر \\"{{tenant}}\\"","tableTitle_zero":"{{count}} سر في المستأجر \\"{{tenant}}\\"","tableTitle_other":"{{count}} سر في المستأجر \\"{{tenant}}\\"","rotateDekConfirmDesc_few":"يؤدي هذا إلى إنشاء مفتاح تشفير بيانات جديد للمستأجر \\"{{tenant}}\\" وإعادة تشفير {{count}} من أسراره. هذا آمن ويسري مفعوله فورًا — لا حاجة لإعادة التشغيل.","rotateDekConfirmDesc_many":"يؤدي هذا إلى إنشاء مفتاح تشفير بيانات جديد للمستأجر \\"{{tenant}}\\" وإعادة تشفير {{count}} من أسراره. هذا آمن ويسري مفعوله فورًا — لا حاجة لإعادة التشغيل.","rotateDekConfirmDesc_one":"يؤدي هذا إلى إنشاء مفتاح تشفير بيانات جديد للمستأجر \\"{{tenant}}\\" وإعادة تشفير {{count}} من أسراره. هذا آمن ويسري مفعوله فورًا — لا حاجة لإعادة التشغيل.","rotateDekConfirmDesc_two":"يؤدي هذا إلى إنشاء مفتاح تشفير بيانات جديد للمستأجر \\"{{tenant}}\\" وإعادة تشفير {{count}} من أسراره. هذا آمن ويسري مفعوله فورًا — لا حاجة لإعادة التشغيل.","rotateDekConfirmDesc_zero":"يؤدي هذا إلى إنشاء مفتاح تشفير بيانات جديد للمستأجر \\"{{tenant}}\\" وإعادة تشفير {{count}} من أسراره. هذا آمن ويسري مفعوله فورًا — لا حاجة لإعادة التشغيل.","rotateDekConfirmDesc_other":"يؤدي هذا إلى إنشاء مفتاح تشفير بيانات جديد للمستأجر \\"{{tenant}}\\" وإعادة تشفير {{count}} من أسراره. هذا آمن ويسري مفعوله فورًا — لا حاجة لإعادة التشغيل.","rotateDekSuccess_few":"تم تدوير مفتاح التشفير — تمت إعادة تشفير {{count}} من الأسرار","rotateDekSuccess_many":"تم تدوير مفتاح التشفير — تمت إعادة تشفير {{count}} من الأسرار","rotateDekSuccess_one":"تم تدوير مفتاح التشفير — تمت إعادة تشفير {{count}} من الأسرار","rotateDekSuccess_two":"تم تدوير مفتاح التشفير — تمت إعادة تشفير {{count}} من الأسرار","rotateDekSuccess_zero":"تم تدوير مفتاح التشفير — تمت إعادة تشفير {{count}} من الأسرار","rotateDekSuccess_other":"تم تدوير مفتاح التشفير — تمت إعادة تشفير {{count}} من الأسرار","kekResultTitle_few":"تم تدوير المفتاح الرئيسي — تمت إعادة تشفير {{count}} من مفاتيح DEK","kekResultTitle_many":"تم تدوير المفتاح الرئيسي — تمت إعادة تشفير {{count}} من مفاتيح DEK","kekResultTitle_one":"تم تدوير المفتاح الرئيسي — تمت إعادة تشفير {{count}} من مفاتيح DEK","kekResultTitle_two":"تم تدوير المفتاح الرئيسي — تمت إعادة تشفير {{count}} من مفاتيح DEK","kekResultTitle_zero":"تم تدوير المفتاح الرئيسي — تمت إعادة تشفير {{count}} من مفاتيح DEK","kekResultTitle_other":"تم تدوير المفتاح الرئيسي — تمت إعادة تشفير {{count}} من مفاتيح DEK","rotateKekSuccess_few":"تم تدوير المفتاح الرئيسي — تمت إعادة تشفير {{count}} من مفاتيح DEK. حدّث EDDI_VAULT_MASTER_KEY وأعد التشغيل.","rotateKekSuccess_many":"تم تدوير المفتاح الرئيسي — تمت إعادة تشفير {{count}} من مفاتيح DEK. حدّث EDDI_VAULT_MASTER_KEY وأعد التشغيل.","rotateKekSuccess_one":"تم تدوير المفتاح الرئيسي — تمت إعادة تشفير {{count}} من مفاتيح DEK. حدّث EDDI_VAULT_MASTER_KEY وأعد التشغيل.","rotateKekSuccess_two":"تم تدوير المفتاح الرئيسي — تمت إعادة تشفير {{count}} من مفاتيح DEK. حدّث EDDI_VAULT_MASTER_KEY وأعد التشغيل.","rotateKekSuccess_zero":"تم تدوير المفتاح الرئيسي — تمت إعادة تشفير {{count}} من مفاتيح DEK. حدّث EDDI_VAULT_MASTER_KEY وأعد التشغيل.","rotateKekSuccess_other":"تم تدوير المفتاح الرئيسي — تمت إعادة تشفير {{count}} من مفاتيح DEK. حدّث EDDI_VAULT_MASTER_KEY وأعد التشغيل.","resetTenantConfirmDesc_few":"يؤدي هذا إلى الحذف الدائم لجميع الأسرار البالغ عددها {{count}} ومفتاح تشفير البيانات للمستأجر \\"{{tenant}}\\". استخدم هذا كخطوة استرداد عندما يُفقد المفتاح الرئيسي أو يُغيَّر ولا يتوفر المفتاح القديم. لا يمكن التراجع عن هذا.","resetTenantConfirmDesc_many":"يؤدي هذا إلى الحذف الدائم لجميع الأسرار البالغ عددها {{count}} ومفتاح تشفير البيانات للمستأجر \\"{{tenant}}\\". استخدم هذا كخطوة استرداد عندما يُفقد المفتاح الرئيسي أو يُغيَّر ولا يتوفر المفتاح القديم. لا يمكن التراجع عن هذا.","resetTenantConfirmDesc_one":"يؤدي هذا إلى الحذف الدائم لجميع الأسرار البالغ عددها {{count}} ومفتاح تشفير البيانات للمستأجر \\"{{tenant}}\\". استخدم هذا كخطوة استرداد عندما يُفقد المفتاح الرئيسي أو يُغيَّر ولا يتوفر المفتاح القديم. لا يمكن التراجع عن هذا.","resetTenantConfirmDesc_two":"يؤدي هذا إلى الحذف الدائم لجميع الأسرار البالغ عددها {{count}} ومفتاح تشفير البيانات للمستأجر \\"{{tenant}}\\". استخدم هذا كخطوة استرداد عندما يُفقد المفتاح الرئيسي أو يُغيَّر ولا يتوفر المفتاح القديم. لا يمكن التراجع عن هذا.","resetTenantConfirmDesc_zero":"يؤدي هذا إلى الحذف الدائم لجميع الأسرار البالغ عددها {{count}} ومفتاح تشفير البيانات للمستأجر \\"{{tenant}}\\". استخدم هذا كخطوة استرداد عندما يُفقد المفتاح الرئيسي أو يُغيَّر ولا يتوفر المفتاح القديم. لا يمكن التراجع عن هذا.","resetTenantConfirmDesc_other":"يؤدي هذا إلى الحذف الدائم لجميع الأسرار البالغ عددها {{count}} ومفتاح تشفير البيانات للمستأجر \\"{{tenant}}\\". استخدم هذا كخطوة استرداد عندما يُفقد المفتاح الرئيسي أو يُغيَّر ولا يتوفر المفتاح القديم. لا يمكن التراجع عن هذا.","resetSecretCount_few":"سيتم فقدان {{count}} من الأسرار نهائيًا","resetSecretCount_many":"سيتم فقدان {{count}} من الأسرار نهائيًا","resetSecretCount_one":"سيتم فقدان {{count}} من الأسرار نهائيًا","resetSecretCount_two":"سيتم فقدان {{count}} من الأسرار نهائيًا","resetSecretCount_zero":"سيتم فقدان {{count}} من الأسرار نهائيًا","resetSecretCount_other":"سيتم فقدان {{count}} من الأسرار نهائيًا","resetTenantSuccess_few":"تمت إعادة تعيين الـ Vault لـ \\"{{tenant}}\\" — تم حذف {{count}} من الأسرار نهائيًا","resetTenantSuccess_many":"تمت إعادة تعيين الـ Vault لـ \\"{{tenant}}\\" — تم حذف {{count}} من الأسرار نهائيًا","resetTenantSuccess_one":"تمت إعادة تعيين الـ Vault لـ \\"{{tenant}}\\" — تم حذف {{count}} من الأسرار نهائيًا","resetTenantSuccess_two":"تمت إعادة تعيين الـ Vault لـ \\"{{tenant}}\\" — تم حذف {{count}} من الأسرار نهائيًا","resetTenantSuccess_zero":"تمت إعادة تعيين الـ Vault لـ \\"{{tenant}}\\" — تم حذف {{count}} من الأسرار نهائيًا","resetTenantSuccess_other":"تمت إعادة تعيين الـ Vault لـ \\"{{tenant}}\\" — تم حذف {{count}} من الأسرار نهائيًا"}'),I={title:"سجل التدقيق",description:"تصفح سجل التدقيق غير القابل للتغيير للامتثال والتصحيح.",byConversation:"حسب المحادثة",byAgent:"حسب Agent",conversationIdPlaceholder:"أدخل معرّف المحادثة...",agentIdPlaceholder:"أدخل Agent ID...",versionPlaceholder:"الإصدار (اختياري)",search:"بحث",entries:"إدخالات",totalDuration:"الإجمالي",totalCost:"التكلفة الإجمالية",step:"الخطوة",tasks:"مهام",input:"المدخلات",output:"المخرجات",llmDetail:"تفاصيل LLM",toolCalls:"مكالمات الأدوات",hmacIntegrity:"تم التحقق من سلامة HMAC",empty:"البحث في إدخالات التدقيق",emptyHint:"أدخل معرّف محادثة أو Agent أعلاه لتصفح Audit Trail.",noResults:"لم يتم العثور على إدخالات تدقيق",noResultsHint:"جرّب معرّفاً مختلفاً أو تحقق من معالجة المحادثة.",loadMore:"تحميل المزيد",selectAgent:"Select an agent…",conversations:"conversations",emptyAgent:"Select an agent to view its audit trail",emptyAgentHint:"Choose a deployed agent from the dropdown above to see all its audit records.",export:"Export",autoRefreshToggle:"Toggle auto-refresh (every 10s)",autoRefreshOn:"Auto",autoRefreshOff:"Auto",integrityVerified:"All entries cryptographically signed",integrityVerifiedDesc:"{{count}} of {{total}} entries have HMAC-SHA256 signatures",integrityPass:"SIGNED",integrityPartial:"Partially signed audit trail",integrityPartialDesc:"{{count}} of {{total}} entries have HMAC signatures",integrityNone:"Unsigned audit entries",integrityNoneDesc:"Configure a vault master key to enable automatic HMAC-SHA256 signing on all future audit entries.",signed:"Signed",allSigned:"All signed",decidedBy:"بواسطة",automated:"آلي"},_={cronHelp:"تنسيق من 5 حقول: الدقيقة الساعة يوم-الشهر الشهر يوم-الأسبوع",cronEveryMinute:"كل دقيقة",cronEveryNMinutes:"كل {{n}} دقيقة",cronHourlyAt:"كل ساعة عند الدقيقة {{minute}}",cronEveryNHours:"كل {{n}} ساعة عند الدقيقة {{minute}}",cronAtTime:"عند الساعة {{time}}",cronAtMinutePastEveryHour:"عند الدقيقة {{minutes}} من كل ساعة",cronAtMinutePastHours:"عند الدقيقة {{minutes}} من الساعة {{hours}}",cronOnDays:"أيام {{days}}",cronOnDayOfMonth:"في اليوم {{days}} من الشهر",cronInMonths:"في {{months}}",cronInvalid:"تعبير cron غير صالح (المتوقع 5 حقول)",cronTooFrequent:"يُنفَّذ أكثر من الحد الأدنى البالغ 60 ثانية",failedEmptyHint:"ستظهر عمليات التنفيذ المُرسَلة إلى الرسائل الميتة هنا لإعادة المحاولة أو التجاهل.",failedSubtitle:"عمليات تنفيذ فشلت نهائياً. أعد المحاولة لإعادة إدراجها في الطابور، أو تجاهلها لمسحها دون إعادة تشغيل.",intervalTooShort:"يجب أن يكون الفاصل 60 ثانية على الأقل",lastManualFire:"آخر تنفيذ يدوي",oneTimeHelp:"يُنفَّذ مرة واحدة في هذه اللحظة ثم يكتمل. يُفسَّر بتوقيتك المحلي.",outcomePending:"تم التشغيل — بانتظار النتيجة",persistentConversationId:"معرّف المحادثة الدائمة",persistentConversationIdPlaceholder:"يُنشأ تلقائياً إذا تُرك فارغاً",strategyPersistent:"دائمة (إعادة استخدام نفس المحادثة)",fireDeadLettered:"رسالة ميتة",fireFailed:"فشل",fireCompleted:"مكتمل",title:"الجداول",subtitle:"إدارة مشغلات Agent المجدولة — Cron وHeartbeats",create:"إنشاء جدول",createTitle:"إنشاء جدول",createSuccess:"تم إنشاء الجدول بنجاح",createError:"فشل إنشاء الجدول",creating:"جارٍ الإنشاء...",name:"الاسم",namePlaceholder:"مثال: فحص صحي يومي",triggerType:"نوع المشغل",cronExpression:"تعبير Cron",interval:"الفاصل (ثواني)",agentId:"Agent ID",agentIdPlaceholder:"أدخل Agent ID...",environment:"البيئة",message:"رسالة",messagePlaceholder:"رسالة لإرسالها إلى Agent",conversationStrategy:"استراتيجية المحادثة",total:"إجمالي الجداول",active:"نشط",failedCount:"فاشل / Dead-Lettered",nextFireLabel:"التنفيذ التالي",tableTitle:"جميع الجداول",empty:"لا توجد جداول بعد",emptyHint:"أنشئ جدولاً لأتمتة مشغّلات Agent.",colName:"الاسم",colType:"النوع",colSchedule:"الجدول",colAgent:"الوكيل",colStatus:"الحالة",colNextFire:"التنفيذ التالي",colLastFired:"آخر تنفيذ",colActions:"إجراءات",enable:"تفعيل",disable:"تعطيل",enabled:"تم تفعيل الجدول",disabled:"تم تعطيل الجدول",toggleError:"فشل تبديل الجدول",fireNow:"تنفيذ الآن",fired:"تم تنفيذ الجدول بنجاح",fireError:"فشل التنفيذ",retry:"إعادة المحاولة",retrySuccess:"تم إعادة إدراج الجدول",retryError:"فشل إعادة المحاولة",deleteSuccess:"تم حذف الجدول",deleteError:"فشل حذف الجدول",fireHistory:"سجل التنفيذ",hitlTimeout:"مهلة HITL",hitlTimeoutHint:"مهلة موافقة HITL يديرها النظام — عالجها عبر موافقة المحادثة، وليس من هنا.",statusDisabled:"معطّل",statusActive:"نشط",statusRunning:"قيد التشغيل",statusExecuting:"قيد التنفيذ",statusFailed:"فشل",statusDeadLettered:"Dead-Letter",typeHeartbeat:"Heartbeat",typeOneTime:"لمرة واحدة",typeCron:"Cron",noFireHistory:"لا يوجد سجل تنفيذ بعد",logFired:"تم التنفيذ",logDuration:"المدة",logResult:"النتيجة",logAttempt:"المحاولة",logCost:"التكلفة",logConversation:"المحادثة",dismissSuccess:"تم تجاهل Dead-Letter",dismissError:"فشل تجاهل Dead-Letter",failedTitle:"عمليات التنفيذ الفاشلة و Dead-Letter",failedEmpty:"لا توجد عمليات تنفيذ فاشلة",colSchedule2:"الجدول",dismiss:"تجاهل",updateSuccess:"تم تحديث الجدول",updateError:"فشل تحديث الجدول",editTitle:"تعديل الجدول",cronNext:"التالي",oneTimeAt:"التاريخ والوقت",timeZone:"المنطقة الزمنية",agentVersion:"الإصدار",agentVersionHint:"0 = أحدث نسخة منشورة",envProduction:"الإنتاج",envTest:"اختبار",userId:"معرّف المستخدم",userIdPlaceholder:"system:scheduler",maxCostPerFire:"الحد الأقصى للتكلفة لكل تنفيذ",unlimited:"غير محدود",strategyNew:"جديد (محادثة جديدة عند كل تنفيذ)",saving:"جارٍ الحفظ...",fireOutcomeFailed:"فشل التنفيذ",unknownError:"خطأ غير معروف",tabSchedules:"الجداول",tabFailed:"فاشل / Dead-Letter",cronPreset:{every15Minutes:"كل 15 دقيقة",hourly:"كل ساعة (عند رأس الساعة)",dailyMorning:"يومياً في 09:00",weekdays:"أيام الأسبوع في 09:00",weeklyMonday:"أسبوعياً (الإثنين 00:00)",monthly:"شهرياً (اليوم 1، 00:00)"}},N={title:"تسلسل النماذج",escalated:"الثقة {{c}} < {{th}}",escalatedShort:"مُصعّد",accepted:"مقبول",reason:{lowConfidence:"ثقة منخفضة",timeout:"انتهاء المهلة",error:"خطأ",retryableError:"خطأ قابل لإعادة المحاولة"}},H={pipelineError:"فشل تحميل تتبّع المسار",title:"تصحيح",tabPipeline:"المسار",tabCosts:"التكاليف",tabMemory:"الذاكرة",tabLogs:"سجلات",tabPrompt:"الموجه",turn:"الدور",latest:"الأحدث",noPipeline:"أرسل رسالة لرؤية تتبع المسار",processing:"جارٍ المعالجة...",actions:"إجراءات",confidence:"الثقة",duration:"المدة",cost:"التكلفة",in:"إدخال",input:"الإدخال",model:"النموذج",out:"إخراج",output:"الإخراج",tokens:"الرموز",toolCalls:"الأدوات"},O={error:"تعذّر تحميل بيانات التكلفة من الخادم",thisTurn:"هذا الدور",conversationTotal:"إجمالي المحادثة",tokens:"Tokens",cost:"التكلفة",duration:"المدة",model:"النموذج",toolCalls:"استدعاءات الأدوات",toolUsage:"استخدام الأدوات",cacheStats:"الذاكرة المخبئية",hitRate:"معدل الإصابة",empty:"أرسل رسالة لرؤية مقاييس التكلفة",in:"الداخلة",out:"الخارجة",total:"الإجمالي",calls:"الاستدعاءات",avgLatency:"متوسط زمن الاستجابة",input:"الإدخال",output:"الإخراج",tokenDistribution:"توزيع الرموز",totalCost:"إجمالي التكلفة",totalTokens:"إجمالي الرموز",turns:"الأدوار"},x={error:"فشل تحميل بيانات الذاكرة",title:"ذاكرة المحادثة",noConversation:"ابدأ محادثة لفحص الذاكرة",empty:"لا توجد بيانات ذاكرة متاحة",properties:"الخصائص",step:"الخطوة",keys:"المفاتيح",input:"الإدخال",collapseAll:"طيّ الكل",copyKey:"نسخ المفتاح",copyValue:"نسخ القيمة",customProperties:"خصائص مخصّصة",expandAll:"توسيع الكل",noMatches:"لم يتم العثور على بيانات مطابقة",search:"ابحث في المفاتيح أو القيم…",stepData:"بيانات الخطوة",systemProperties:"خصائص النظام"},F={noAgent:"حدد وكيلاً لعرض السجلات",search:"بحث...",pause:"إيقاف مؤقت",resume:"استئناف",clear:"مسح",waiting:"بانتظار السجلات...",connected:"متصل",disconnected:"غير متصل",logOutput:"مخرجات السجل",noMatch:"لا توجد سجلات تطابق عامل التصفية"},U={error:"فشل تحميل بيانات الموجه",noConversation:"ابدأ محادثة لفحص المطالبات",noLlm:"لم يتم العثور على تفاعلات LLM بعد",turn:"الدور",latest:"الأحدث",tokens:"Tokens",model:"النموذج",cost:"التكلفة",copy:"نسخ المطالبة",copied:"تم النسخ!",replay:"إعادة تشغيل هذا الدور",toolCalls:"استدعاءات الأدوات",step:"الخطوة",roleSystem:"موجه النظام",roleUser:"مستخدم",roleAssistant:"المساعد",roleTool:"نتيجة الأداة",collapse:"طيّ",showMore:"عرض المزيد",temperature:"الحرارة"},W={preview:"معاينة",edit:"تحرير",switchToPreview:"معاينة الموجه المُحلّ",switchToEdit:"التبديل إلى التحرير",refresh:"تحديث",sampleData:"بيانات تجريبية (بدون محادثة)",disclaimerReal:"تستخدم المعاينة محرك Qute مع بيانات المحادثة الفعلية.",disclaimerSample:"تستخدم المعاينة محرك Qute مع بيانات تجريبية. اختر محادثة للقيم الحقيقية.",resolvedPrompt:"الموجه المُحلّ",copy:"نسخ",copied:"تم النسخ!",error:"خطأ في حل القالب",loading:"جارٍ حل القالب…",availableVariables:"المتغيرات المتاحة",copyVariable:"انقر لنسخ مرجع المتغير",varProperties:"الخصائص",varMemory:"الذاكرة",varContext:"السياق",varSnippets:"قصاصات",varUserInfo:"معلومات المستخدم",varConversationInfo:"معلومات المحادثة",varInput:"المدخلات",varConversationLog:"سجل المحادثة"},V={title:"استوديو الوكيل",subtitle:"قم ببناء واختبار واستكشاف أخطاء وكلائك في مساحة عمل واحدة",pipeline:"المسار",editor:"محرر",debug:"تصحيح ودردشة",selectStage:"انقر على مرحلة من المسار لفتح محررها",openInStudio:"افتح في الاستوديو",loading:"جاري تحميل الوكيل...",notFound:"لم يتم العثور على الوكيل",hideChat:"إخفاء الدردشة",showChat:"إظهار الدردشة",openEditor:"فتح في المحرر",editorComingSoon:"دمج المحرر الموضعي قريباً",noPipeline:"لا توجد مراحل في المسار",type:{parser:"المحلل اللغوي",rules:"قواعد",property:"معين الخصائص",apicalls:"استدعاءات API",llm:"LLM",output:"المخرجات","output.template":"قالب المخرجات",mcpcalls:"استدعاءات MCP",rag:"قواعد المعرفة",dictionary:"القاموس"},landingDescription:"اختر وكيلاً لفتح المحرر المرئي والمُصحح والدردشة المباشرة",noAgents:"لم يُعثر على وكلاء — أنشئ واحداً من صفحة الوكلاء",chat:"دردشة",backToAgent:"العودة إلى الوكيل",selectStageHint:"اختر أي إضافة في مسار العمل لعرض وتعديل إعداداتها مباشرة",noConfig:"هذه المرحلة ليس لها عنوان تكوين",unsupportedType:"المحرر غير متاح لهذا النوع من الإضافات"},B={general:"عام",kbName:"اسم قاعدة المعرفة",kbNamePlaceholder:"مثال: product-docs, faq, internal-wiki",kbNameHint:"يستخدم للإشارة إلى قاعدة المعرفة هذه من مهام LLM",embeddingModel:"نموذج التضمين (Embedding)",provider:"المزود",embeddingParams:"معلمات المزود",embeddingParamsHint:"اسم النموذج، مفتاح API (استخدم ${vault:...} للأسرار)، رابط الأساس، إلخ.",vectorStore:"مخزن المتجهات",storeType:"نوع القاعدة",storeParams:"معلمات الاتصال",chunking:"تجزئة المستندات",chunkStrategy:"استراتيجية التجزئة",chunkSize:"حجم الجزء",chunkOverlap:"تداخل الأجزاء",overlapHint:"يساعد التداخل في الحفاظ على السياق بين الأجزاء",chunkPreview:"معاينة (كيف يتم تقسيم المستند)",chunkBlocks:"{{count}} أجزاء من ~{{size}} حرف مع تداخل {{overlap}} حرف",retrievalDefaults:"الإعدادات الافتراضية للاسترجاع",retrievalHint:"يمكن تجاوز هذه الإعدادات الافتراضية لكل مهمة في تكوين LLM.",maxResults:"الحد الأقصى للنتائج (top-K)",minScore:"الحد الأدنى للتشابه",ingestion:"استيعاب المستندات",dropFiles:"أسقط المستندات هنا لاستيعابها",dropHint:"نص، ماركداون، أو أي ملف يعتمد على النصوص",browse:"تصفح",pasteText:"أو الصق محتوى نصي",pastePlaceholder:"الصق نص المستند هنا...",ingestText:"استيعاب النص",ingestionHistory:"حالة الاستيعاب",saveFirstIngestion:"احفظ قاعدة المعرفة هذه أولاً لتمكين استيعاب المستندات.",addParam:"إضافة معلمة"},K={welcome:{title:"مرحباً بك في EDDI",subtitle:"مركز قيادة وكلاء الذكاء الاصطناعي",introText:"EDDI Manager هو مركز القيادة الخاص بك لبناء واختبار وتشغيل وكلاء المحادثة الذكية.",capabilitiesTitle:"ما الذي يمكنك فعله",capabilitiesSubtitle:"كل ما تحتاجه لبناء وكلاء ذكاء اصطناعي جاهزين للإنتاج",buildAgents:"بناء الوكلاء",buildAgentsDesc:"أنشئ وقم بتكوين وكلاء الذكاء الاصطناعي باستخدام المعالج أو من الصفر",designWorkflows:"تصميم مسارات العمل",designWorkflowsDesc:"منشئ مسارات سحب وإفلات مع قواعد السلوك وسلاسل LLM والأدوات",testRealtime:"اختبار في الوقت الفعلي",testRealtimeDesc:"تحدث مع وكلائك بردود متدفقة وأدوات تصحيح مدمجة",monitorOperate:"المراقبة والتشغيل",monitorOperateDesc:"المحادثات، سجلات التدقيق، الأسرار، والحصص — كلها في مكان واحد",readyTitle:"هل أنت مستعد للبدء؟",readySubtitle:"يمكنك إعادة تشغيل الجولة في أي وقت من قائمة المساعدة في الشريط الجانبي",startTour:"بدء الجولة",exploreOwn:"سأستكشف بنفسي"},tour:{back:"الخلف",next:"التالي",skip:"تخطي الجولة",finish:"إنهاء",stepOf:"الخطوة {{current}} من {{total}}",dashboard:{title:"جولة لوحة القيادة",step1Title:"مركز القيادة الخاص بك",step1Desc:"ينظم الشريط الجانبي كل شيء في ثلاث مناطق: الإدارة، التطوير، والعمليات. ستعرف دائماً أين تجد ما تبحث عنه.",step2Title:"نظرة عامة على المنصة",step2Desc:"أعداد حية لوكلائك، مسارات عملك، ومحادثاتك. انقر على أي بطاقة للانتقال مباشرة إلى هذا القسم.",step3Title:"إجراءات سريعة",step3Desc:"انتقل مباشرة إلى المهام الشائعة. معالج الوكلاء هو أسرع طريقة لإنشاء وكيلك الأول — يستغرق الأمر أقل من دقيقتين.",step4Title:"خصصها لتناسبك",step4Desc:"بدّل بين المظهر الفاتح والداكن ومظهر النظام. يدعم EDDI Manager 11 لغة — اختر لغتك من محدد اللغات."},agents:{title:"جولة الوكلاء",step1Title:"مساعد الوكيل",step1Desc:"يأخذك المعالج خطوة بخطوة لإنشاء وكيل مكون بالكامل — اختر نموذجاً، واضبط الشخصية، وفعّل الأدوات، ثم انشر.",step2Title:"إنشاء يدوي",step2Desc:"للمستخدمين المتقدمين: أنشئ وكيلاً فارغاً وقم بتكوينه بتحكم كامل في JSON. مثالي للإعدادات المتقدمة.",step3Title:"بحث وتصفية",step3Desc:"ابحث عن الوكلاء فوراً بالاسم. قم بالتبديل بين طريقة العرض بشكل بطاقات أو قائمة باستخدام الزر على اليمين.",step4Title:"أسطول وكلائك",step4Desc:"تُظهر كل بطاقة اسم الوكيل، وإصداره، وآخر وقت للتعديل. انقر على أي وكيل لعرض صفحة تفاصيله مع خيارات النشر والدردشة والمسارات."},workflows:{title:"جولة المسارات",step1Title:"إنشاء مسار عمل",step1Desc:"تُعرّف مسارات العمل أنابيب المعالجة — وهي سلسلة من المهام مثل استدعاءات LLM وقواعد السلوك وتكامل HTTP.",step2Title:"مسارات عملك",step2Desc:"يمكن إرفاق كل مسار عمل بوكيل واحد أو أكثر. انقر لفتح محرر البناء المعتمد على السحب والإفلات.",step3Title:"نظم العرض",step3Desc:"ابحث بالاسم وقم بالتبديل بين شبكة البطاقات وعرض الجدول القابل للفرز."},chat:{title:"جولة الدردشة",step1Title:"أختر وكيلاً",step1Desc:"حدد وكيلاً منشوراً لبدء المحادثة. يظهر هنا الوكلاء المنشورون فقط.",step2Title:"وضع البث",step2Desc:"بدّل لتدفق الرموز في الوقت الفعلي. عند تفعيله، تظهر الاستجابة كلمة بكلمة — وهو ممتاز لتصحيح زمن الاستجابة.",step3Title:"سجل المحادثات",step3Desc:"افتح الشريط الجانبي لتصفح واستئناف المحادثات السابقة.",step4Title:"ابدأ الدردشة",step4Desc:"اكتب رسالة واضغط Enter. سيستجيب الوكيل باستخدام مسارات العمل والأدوات الداعمة ونموذج LLM الذي قمت بتكوينه."},resources:{title:"جولة الموارد",step1Title:"مكتبة الإضافات",step1Desc:"الموارد هي كتل البناء لمسارات العمل. يتحكم كل نوع في جزء مختلف من سلوك الوكيل.",step2Title:"تكوينات LLM",step2Desc:"حدد أي نموذج ذكاء اصطناعي يشغل وكيلك ومطالبة النظام وأدواته وخوادم MCP وتكوينات التسلسل. هذا هو الدماغ.",step3Title:"القواعد واستدعاءات API",step3Desc:"تتحكم قواعد السلوك في تدفق المحادثة. تربط استدعاءات HTTP بـ APIs الخارجية. كلاهما يمكن استخدامه كأدوات LLM."},conversations:{title:"جولة المحادثات",step1Title:"البحث",step1Desc:"ابحث عن المحادثات بسرعة عبر المعرف الخاص بها أو الوكيل أو عن طريق الرسائل الحديثة من المستخدم.",step2Title:"فلاتر الحالة",step2Desc:"قم بتصفية المحادثات حسب الحالة: نشطة، قيد التقدم، منتهية، أو بها خطأ.",step3Title:"قائمة المحادثات",step3Desc:"تصفح كافة الجلسات. انقر على بطاقة محادثة لفتح الخط الزمني للمحادثة لتصور الأخطاء."},groups:{title:"جولة مجموعات النقاش",step1Title:"إنشاء مجموعة",step1Desc:"قم بإنشاء مجموعة إدارة من أجل السماح بتعاون العديد من الوكلاء بالنقاش والمداولة.",step2Title:"البحث داخل المجموعات",step2Desc:"ابحث داخل مجمعاتك الحالية لتعدد الوكلاء.",step3Title:"شبكة المجموعات",step3Desc:"إدارة البيئات التعاونية وتعديل سياساتها أو مسح مجموعات النظام البالية."},logs:{newLogs:"سجلات جديدة",title:"جولة سجلات النظام",step1Title:"مباشرة في مواجهة السجلات",step1Desc:"التبديل بين تيار حي من سجلات النظام الخاص بك أو سجلات البحث التاريخية.",step2Title:"إعداد التصفية الحية",step2Desc:"فلتر تدفق حي حسب منشئ وكيل، او بالمستويات للخطورة المهمة.",step3Title:"تصدير",step3Desc:"تنزيل السجلات المنقحة حاليا كملف نص للتحليل الخارجي."},secrets:{title:"جولة خزانة الأسرار",step1Title:"قم بعمل أسرار",step1Desc:"احفظ بأمان مفاتيح API الخاصة بك وعلامات الإعتماد او كلمة السر لوكيليك من أجل إشارات موثوقة.",step2Title:"التقسيم عن المستأجر",step2Desc:"أظهر عرض الخزانة في مراجعة مخصصة لنطاق المستأجر لمفاتيحك.",step3Title:"صيغ الإشارة",step3Desc:"اكتشف كيف يمكنك إدراج السر للتحقق الديناميكي أثناء العمل بدلا من الشفرة الثابتة لمكون LLM (${vault:...})."},audit:{title:"جولة سجل التدقيق",step1Title:"طريقة البحث",step1Desc:"راجع تاريخ تدقيق السجلات عن طريق محادثة محددة أو بإصدار معين.",step2Title:"تشغيل البحث",step2Desc:"اضف الهوية (ID) وانقر لتنزيل وتأكد من التنفيذ للسجل.",step3Title:"تصدير السجل الدفتري",step3Desc:"نزل مراجعات النظام التي عثر عليها بصيغة (JSON) للقيام بالمتوافق والتقارير."},schedules:{title:"جولة المجدولين",step1Title:"صنع الجداول",step1Desc:"شغل أداة جدولة العمل Cron وأنجز النبضات بانتظام لتحميل الأعمال التلقائية للوكلاء.",step2Title:"نسب صحية",step2Desc:"راجع وراقب مجموع الفشل من الجدول للمشغلات لكامل المنصة.",step3Title:"التحكم بجدول التطبيقات",step3Desc:"راقب مشغليك ذاتيا واوقف تشغيلها وأكمل او حتى احذف منها للتحذير الخاص بك كاختبار فعلي لها."},quotas:{saveSuccess:"تم حفظ الحصة",resetSuccess:"تمت إعادة تعيين عدّادات الاستخدام",resetConfirmDesc:'يصفّر فورًا جميع عدّادات الاستخدام (المحادثات، طلبات API، التكلفة الشهرية) للمستأجر "default". لا يمكن التراجع.',resetConfirmTitle:"إعادة تعيين عدّادات الاستخدام؟",title:"جولة الحصص",step1Title:"معوقات البناء",step1Desc:"حدد قيوداً صريحة على استهلاك وكلاءك يومياً أو في المحادثات للحصص المضافة أو الرموز من هذا الحساب.",step2Title:"استطلاع الأداء",step2Desc:"راجع بانتظام مقدار مستأجرينك ما أتوا من هذه الكوته في الزمن الحقيقي.",step3Title:"تنفيذ القيود",step3Desc:"احفظ الحدود بعد التعديلات للمنصة، لحظر جميع الحمولات المرورية المعارضة لذلك التقييد."},coordinator:{title:"جولة فريق التنسيق",step1Title:"الروابط المباشرة",step1Desc:"عاين اتصالات المصادر المتدفقة من واجهات نبض النظام في عمليات خلفية فريق المنسقين.",step2Title:"تصرف قائمة المهام",step2Desc:"تدابير عمليات المهام أو نشاط التشغيل للبيئات الحقيقية بمجموعتك.",step3Title:"الرسائل الميتة",step3Desc:"تحقق من الأعمال البائسة وقرر الحذف تماما، أو العودة لإعادتها بغرض توازن واستكمال للنظام الخاص بنا."},orphans:{confirmPurgeAll:"حذف جميع الموارد اليتيمة البالغ عددها {{count}} نهائيًا؟ يحذف الخادم كل العناصر — لا يُطبَّق تحديدك. لا يمكن التراجع عن هذا.",title:"جولة محطة اليتيمات",step1Title:"بحث مشعب",step1Desc:"تحضير و إعطـاء صلاحيات شاملة للمنصة و أكتشاف بيانات التكوينات التي ليست في أي وكالة.",step2Title:"عملية تتضمن الإزالة الناعمة",step2Desc:"تبديل الميزة لتحديد الملف المحذوفات مسبقاً تاريخيا في السجلات لحذف جذري.",step3Title:"مراجعة التنقيب الفعلي",step3Desc:"استطلاع تقييمي للبيان الخاص والمجرد من أجزاء مهملة لتأخذ إزالة شاملة وتنظيفا تاما وتحفظ مساحة كبيرة للبيانات لدينا."}},help:{title:"المساعدة والجولة",platformTour:"جولة المنصة",resetAll:"إعادة تعيين جميع الجولات",resetConfirm:"هل تريد إعادة تعيين تقدم الجولات؟"},offer:{message:"هل أنت جديد هنا؟ خذ {{page}}",accept:"أرني ذلك",dontAsk:"لا تسألني مرة أخرى"}},G={status:"حالة المنصة",online:"متصل",offline:"غير متصل",checking:"جارٍ التحقق…",connected:"متصل",disconnected:"غير متصل",instance:"مثيل",latency:"زمن الاستجابة",lastChecked:"آخر فحص",justNow:"الآن",secondsAgo:"منذ {{count}}ث"},z={live:"مباشر",reconnecting:"إعادة الاتصال…"},q={title:"جديد {{type}}",newAgent:"وكيل جديد",newGroup:"مجموعة جديدة",quickCreate:"إنشاء سريع",quickCreateTitle:"إنشاء سريع {{type}}",quickCreateDesc:"عيّن اسماً ووصفاً، ونفّذ التكوين الدقيق لاحقاً.",guidedSetup:"إعداد موجه",guidedSetupDesc:"معالج خطوة بخطوة من خيارات LLM والمطالبات والنشر."},j=JSON.parse('{"actionConflict":"لا تزال عملية أخرى قيد التنفيذ، أو لم يعد هذا النقاش يقبل ذلك الإجراء. يرجى إعادة المحاولة.","actionTimeout":"لم يستجب أحد الوكلاء الأعضاء في الوقت المحدد. يرجى المحاولة مجدداً.","actionUnreachable":"تعذّر الوصول إلى أحد الوكلاء الأعضاء. يرجى المحاولة مجدداً.","addMember":"إضافة عضو","allowHtmlTooltip":"عند التفعيل، يعرض محتوى HTML (بعد التعقيم). استخدمه فقط مع الوكلاء الموثوقين.","askQuestion":"اطرح سؤالاً لتناقشه المجموعة…","assignAgents":"عيّن وكلاء لكل دور عضو.","blankDesc":"قم بتكوين كل شيء يدوياً.","characters":"أحرف","chooseTemplate":"اختر قالباً أو ابدأ من الصفر.","closeConfirmDescription":"يؤدي الإغلاق إلى إنهاء جميع محادثات الأعضاء نهائياً وتنظيف أي وكلاء مؤقتين. لا يمكن إجراء أي متابعات أو استكمالات إضافية. لا يمكن التراجع.","composeQuestion":"تأليف سؤال","continueButton":"متابعة","continueHint":"يعيد تشغيل جميع المراحل كجولة جديدة؛ يحتفظ كل وكيل بذاكرة الجولات السابقة. لا يمكن إضافة مرفقات إلى الاستكمال.","continuePlaceholder":"متابعة هذه المناقشة بسؤال إضافي…","continueStreamStarted":"بدأت المتابعة — بث مباشر","count":"{{count}} مجموعات","createSuccess":"تم إنشاء المجموعة بنجاح","discussing":"الوكلاء يتناقشون…","enterToSend":"Enter للإرسال","expandInput":"توسيع الإدخال","followupHint":"اطرح متابعة مباشرة على أحد الأعضاء. يحتفظ الوكيل بالسياق الكامل من النقاش؛ ويُضاف التبادل إلى النص.","followupPlaceholder":"اطرح على هذا العضو سؤال متابعة…","inputDisabledApproval":"في انتظار الموافقة…","inputDisabledClosed":"هذه المناقشة مغلقة","inputDisabledCompleted":"النقاش مكتمل","inputDisabledEnded":"انتهت هذه المناقشة","inputDisabledInProgress":"المناقشة قيد التقدم…","membersCount":"{{count}} أعضاء","moderator":"المشرف (للتجميع)","namePlaceholder":"مثل: مجلس استشاري","newDiscussion":"مناقشة جديدة","newShort":"جديد","noModerator":"بدون مشرف","noResponse":"لا يوجد رد","contentTruncated":"[تم اقتطاع المحتوى]","protocolMaxRetries":"الحد الأقصى لإعادة المحاولة","protocolMaxRounds":"الحد الأقصى للجولات","protocolOnFailure":"عند الفشل","protocolSettings":"البروتوكول","protocolTimeout":"المهلة","protocolUnavailable":"غير متاح","question":"السؤال","readyToDiscuss":"جاهز للنقاش","responding":"يستجيب…","reviewMemberRoster":"قائمة الأعضاء","reviewMembers":"الأعضاء","reviewModerator":"المشرف","reviewNoModerator":"لا يوجد (التجميع التلقائي معطّل)","reviewRounds":"الحد الأقصى للجولات","reviewTimeout":"مهلة الوكيل","reviewUnassigned":"غير مُعيَّن","reviewUnassignedHint":"ارجع لتعيين الوكلاء قبل الإنشاء.","selectAgent":"اختر وكيلاً…","selectOrStart":"اختر نقاشاً سابقاً من السجل، أو اكتب سؤالاً أدناه لبدء نقاش جديد.","shiftEnter":"سطر جديد","skipped":"تم التخطي","sortByMembers":"ترتيب حسب الأعضاء","sortByStyle":"ترتيب حسب النمط","speakingCount":"{{count}} يتحدثون","startBlank":"البدء من الصفر","startDiscussion":"ناقش","stateCompleted":"مكتمل","stateCreated":"تم الإنشاء","stateFailed":"فشل","stateSynthesizing":"جارٍ التجميع…","stepBasics":"الأساسيات","stepMembers":"الأعضاء","stepReview":"مراجعة","stepTemplate":"القالب","submitShortcut":"Ctrl+Enter للإرسال","synthesis":"التجميع","synthesizing":"المشرف يجمّع…","hitlSelectPhase":"حدد مرحلة واحدة على الأقل تتطلب الموافقة.","empty":"لا توجد مجموعات بعد","emptyDescription":"تتيح المجموعات لعدة وكلاء التعاون في مناقشات منظمة.","createGroup":"إنشاء مجموعة","unnamed":"مجموعة بدون اسم","count_one":"مجموعة {{count}}","count_other":"{{count}} مجموعات","confirmDelete":"حذف هذه المجموعة؟","confirmDeleteDesc":"سيتم حذف تكوين المجموعة نهائيًا.","duplicateSuccess":"تم تكرار المجموعة","noDescription":"بدون وصف","members":"أعضاء","discussionStyle":"أسلوب النقاش","maxRounds":"الجولات القصوى","styleTaskForce":"فريق العمل","stateAwaitingApproval":"بانتظار الموافقة","stateCancelled":"ملغى","phasePlan":"التخطيط","phaseExecute":"التنفيذ","phaseVerify":"التحقق","preConfiguredTasks":"مهام مُعدّة مسبقاً","dynamicAgents":"وكلاء ديناميكيون","dynamicCreation":"الإنشاء","dynamicRecruitment":"التوظيف","dynamicDelegation":"التفويض","lifecyclePolicy":"دورة الحياة","allowedProviders":"المزودون","liveIndicator":"● LIVE","htmlToggle":"HTML","memberTypeGroup":"مجموعة","moderatorBadge":"⭐ مشرف","styleColumn":"النمط","membersColumn":"الأعضاء","memberOverflow":"+{{count}} آخرون","defaultLabel":"مجموعة","liveDiscussion":"مباشر","state":{"CREATED":"تم الإنشاء","IN_PROGRESS":"قيد التنفيذ","SYNTHESIZING":"جارٍ التجميع","COMPLETED":"مكتمل","FAILED":"فشل","ERROR":"خطأ","AWAITING_APPROVAL":"بانتظار الموافقة","CANCELLED":"ملغى","AWAITING_HUMAN_INPUT":"في انتظار أحد الأعضاء","CLOSED":"مغلقة"},"preConfiguredTasksCount":"مهام مُعدّة مسبقاً ({{count}})","entryType":{"QUESTION":"سؤال","OPINION":"رأي","CRITIQUE":"نقد","REVISION":"مراجعة","CHALLENGE":"اعتراض","DEFENSE":"دفاع","ARGUMENT":"حجة","REBUTTAL":"دحض","SYNTHESIS":"تركيب","ERROR":"خطأ","SKIPPED":"تم التخطي","PLAN":"خطة","TASK_RESULT":"نتيجة المهمة","VERIFICATION":"تحقق","FOLLOW_UP":"متابعة","ABSTAINED":"امتنع","DISSENT":"اعتراض","CONVERGENCE":"تقارب","FACILITATION":"تيسير","VOTE":"صوت","PROPOSAL":"اقتراح","BARGAIN":"عرض مضاد","HUMAN_INPUT":"مدخل بشري","RETRO":"مراجعة استرجاعية","BID":"عطاء"},"flow":{"Opinion":"رأي","Discussion":"نقاش","Synthesis":"تركيب","Critique":"نقد","Revision":"مراجعة","Challenge":"اعتراض","Defense":"دفاع","Independent":"مستقل","AnonymousSharing":"مشاركة مجهولة","Revised":"مُراجَع","ProOpening":"افتتاح مؤيد","ConOpening":"افتتاح معارض","Rebuttals":"ردود","Judgment":"حكم","Plan":"التخطيط","Execute":"التنفيذ","Verify":"التحقق","Synthesize":"التلخيص"},"lifecycle":{"EPHEMERAL":"مؤقت","KEEP_DEPLOYED":"إبقاء منشور","UNDEPLOY_ONLY":"إلغاء النشر فقط","AGENT_DECIDES":"الوكيل يقرر"},"dynamicMax":"✓ (max {{count}})","dynamicMaxPerTask":"✓ (الحد {{count}}/مهمة)","protocolMaxTurns":"الحد الأقصى للأدوار","speakingOrderTooltip":"ترتيب الحديث: #{{order}}","allowedModels":"النماذج","inheritParentModel":"وراثة النموذج","enabled":"مفعّل","disabled":"معطّل","turnOrderSequential":"تسلسلي","turnOrderParallel":"متوازٍ","requiresApproval":"يتطلب الموافقة","item":"عنصر","items":"عناصر","contextScope":{"NONE":"مستقل","FULL":"سياق كامل","LAST_PHASE":"المرحلة الأخيرة","ANONYMOUS":"مجهول","OWN_FEEDBACK":"ملاحظات ذاتية","TASK_ONLY":"المهمة فقط","TASK_WITH_DEPS":"المهمة + التبعيات"},"configuration":"الإعدادات","deleteGroupOnly":"حذف المجموعة فقط","deleteGroupOnlySuccess":"تم حذف المجموعة (تم الاحتفاظ بالوكلاء)","deleteGroupOnlyWarning":"سيؤدي هذا إلى حذف المجموعة. سيتم الاحتفاظ بجميع الوكلاء الأعضاء.","deleteGroupAndAgents":"حذف المجموعة + جميع الوكلاء","deleteWithMembersSuccess":"تم حذف المجموعة وجميع الوكلاء الأعضاء (حذف مؤقت)","deleteWithMembersWarning":"سيؤدي هذا إلى الحذف المؤقت للمجموعة وجميع الوكلاء الأعضاء البالغ عددهم {{count}}. يمكن استعادتهم.","hideDiscussions":"إخفاء لوحة المناقشات","showDiscussions":"إظهار لوحة المناقشات","hideConfig":"إخفاء لوحة الإعدادات","showConfig":"إظهار لوحة الإعدادات","hitlSection":"الموافقة البشرية","hitlApprovalPoints":"الموافقة عند","hitlOnTaskRejection":"عند الرفض","hitlEdit":"تعديل","hitlSaved":"تم حفظ إعدادات الموافقة","hitlEnable":"تتطلب موافقة بشرية","hitlApprovalPhases":"المراحل التي تتطلب الموافقة","hitlNotConfigured":"لم تُهيّأ أي بوابات موافقة — انقر تعديل لطلب موافقة بشرية.","driftTitle":"تغيّر إعداد المجموعة أثناء الإيقاف المؤقت","driftRecovery":"تم إلغاء الاستئناف لأن مراحل المجموعة تغيّرت. لا تزال المناقشة بانتظار الموافقة — أصلح الإعداد (تعديل، في لوحة الإعداد) ووافق مجددًا، أو ألغِها.","discussionStarted":"بدأت المناقشة — بث مباشر","continueStarted":"بدأت جولة جديدة","followupSent":"تم إرسال المتابعة","discussionClosed":"تم إغلاق المناقشة","backToGroups":"العودة إلى المجموعات","noDiscussions":"لا توجد مناقشات بعد","askBelow":"اطرح سؤالاً أدناه للبدء","exitFullscreen":"الخروج من ملء الشاشة","enterFullscreen":"ملء الشاشة","discussions":"المناقشات","discussionComplete":"اكتملت المناقشة","continueDiscussion":"متابعة (جولة جديدة)","followupMember":"المتابعة مع أحد الأعضاء","closeDiscussion":"إغلاق المناقشة","currentRound":"الجولة الحالية","startNextRound":"بدء الجولة التالية","selectMember":"اختر عضواً","sendFollowup":"إرسال المتابعة","closeConfirmTitle":"إغلاق هذه المناقشة؟","closeConfirmButton":"إغلاق المناقشة","closeConfirmDismiss":"رجوع","count_zero":"{{count}} مجموعة","count_two":"مجموعتان","count_few":"{{count}} مجموعات","count_many":"{{count}} مجموعة","protocolMaxCost":"سقف التكلفة","protocolOnCostExceeded":"عند بلوغه","costAbort":"إحباط","costSynthesize":"التلخيص الآن","deliberationSection":"التداول","recordDissents":"تقرير الأقلية","agentFiledTasks":"مهام أنشأها الوكلاء","agentFiledCaps":"الحدود","agentFiledCapsValue":"{{perDiscussion}} / نقاش · {{perTurn}} / دور","moderatorlessWarning":"مقصورة على منسّق لا تملكه هذه المجموعة: {{phases}}. سينوب عنه العضو الأول حسب ترتيب الكلام.","roleCoverageWarning":"لا يحمل أي عضو الدور «{{role}}» — وسيتحدث جميع الأعضاء في {{phases}} بدلًا من ذلك.","delegationDepth":"أقصى عمق","delegationTimeout":"مهلة التفويض","secondsShort":"{{seconds}} ث","delegationTargets":"قائمة السماح","phaseBehaviour":"سلوك المراحل","phaseBehaviourNone":"لم يُضبط الامتناع ولا التقارب — اضغط تحرير للسماح بالتمرير أو لإنهاء مرحلة متكررة عند الاتفاق.","abstentionShort":"امتناع","convergenceShort":"تقارب ≥{{threshold}}","phasesSaved":"تم حفظ إعدادات المراحل","phasesNoneToEdit":"لا تحدّد هذه المجموعة أي مراحل. اختر نمط نقاش أو أضف مراحل إلى الإعداد قبل ضبط سلوك كل مرحلة.","phaseRepeats":"×{{repeats}}","allowAbstention":"السماح بالامتناع","allowAbstentionHelp":"يمكن للعضو أن يمتنع عن إضافة جديد في هذه الجولة بدلاً من تكرار نفسه.","convergenceEnable":"الإيقاف مبكرًا عند التقارب","convergenceHelp":"يقارن حَكَمٌ كل تكرار بسابقه وينهي المرحلة حين تتوقف مواقف الأعضاء عن التغيّر. يكلّف نداءً واحدًا لكل تكرار.","convergenceNeedsRepeats":"متاح فقط في مرحلة متكررة — المرور الواحد لا شيء يقارن به.","convergenceMinRepeats":"أدنى تكرارات","convergenceThreshold":"العتبة","convergenceJudge":"الحَكَم","judgeModerator":"المنسّق","judgeService":"خدمة","judgeServiceNote":"مقبول لكنه غير موصول بعد — يعود المحرك إلى المنسّق ويسجّل تحذيرًا.","convergenceReached":"تقارب","convergenceChecked":"فحص التقارب","convergenceScore":"توافق {{score}}","decisionWinner":"الفائز: {{winner}}","decisionTie":"تعادل","decisionDecidedAt":"تقرّر في {{phase}}","decisionUnparsed":"تعذّرت قراءة إجابة الحَكَم كحكم منظّم، لذا حُفظت حرفيًا أدناه وبقيت الخلاصة نصًا عاديًا.","minorityReport":"تقرير الأقلية ({{total}})","attachFiles":"إرفاق ملفات","attachmentLimit":"بحد أقصى {{max}} مرفقًا لكل نقاش","attachmentTooLarge":"{{name}} أكبر من أن يُرفق","attachmentReadFailed":"تعذّرت قراءة {{name}}","removeAttachment":"إزالة {{name}}","decisionType":{"VERDICT":"الحكم","VOTE":"تصويت","AGREEMENT":"اتفاق","AWARD":"إسناد","NONE":"لا قرار منظّم"},"abstainedBody":"لم يضف جديدًا في هذه الجولة.","convergenceSkipped_zero":"· تم تخطي {{count}} جولة إضافية","convergenceSkipped_one":"· تم تخطي {{count}} جولة إضافية","convergenceSkipped_two":"· تم تخطي {{count}} جولة إضافية","convergenceSkipped_few":"· تم تخطي {{count}} جولة إضافية","convergenceSkipped_many":"· تم تخطي {{count}} جولة إضافية","convergenceSkipped_other":"· تم تخطي {{count}} جولة إضافية","attachmentTotalTooLarge":"تتجاوز المرفقات الحد الأقصى للحجم الإجمالي","convergenceInert":"مضبوط، لكن هذه المرحلة تُنفَّذ مرة واحدة — لن يعمل الحَكَم أبدًا. أزل الإعداد أو امنح المرحلة أكثر من تكرار.","questionTooLong":"يمكن أن يبلغ طول السؤال {{max}} حرفًا كحد أقصى","charactersOverLimit":"{{current}} / {{max}} حرفًا","advancedSection":"التعاون المتقدم","artifactConfigLabel":"الأصول المشتركة","artifactConfigValue":"الحد الأقصى {{count}}/نقاش","artifactCreatedBadge":"تم إنشاء {{name}} (الإصدار {{version}})","artifactDraft":"مسودة","artifactFinal":"نهائي","artifactLastEdited":"آخر تعديل بواسطة {{agent}}","artifactUpdatedBadge":"تم تحديث {{name}} (الإصدار {{version}})","artifactsTitle":"الأصول المشتركة ({{count}})","concessionLedgerTitle":"سجل التنازلات","contextWindowLabel":"نافذة النص المنقول","contextWindowValue":"آخر {{count}} إدخالات{{summarized}}","facilitatorLabel":"الميسّر","facilitatorMoves":"الإجراءات المسموح بها","humanMemberConfigLabel":"مهلة دور العضو البشري","humanTurnRequestedAt":"تم الطلب","humanTurnResponsePlaceholder":"ردّك","humanTurnSubmit":"إرسال","humanTurnSubmitted":"تم تسجيل ردّك","humanTurnSubmitting":"جارٍ الإرسال…","humanTurnTimeout":"المهلة","humanTurnTitle":"حان دورك، {{name}}","inputDisabledHumanTurn":"في انتظار دور أحد الأعضاء…","memberTypeHuman":"بشري","negotiationAcceptedBy":"تم القبول من قِبل: {{names}}","negotiationGaveUp":"تنازل عن","negotiationInReturnFor":"مقابل","negotiationOpen":"مفتوح","negotiationRound":"الجولة {{round}}","negotiationSuperseded":"تم استبداله","negotiationTableTitle":"طاولة التفاوض","notSet":"غير محدد","retroConfigLabel":"دروس المراجعة الرجعية","retroConfigValue":"{{perRun}}/تشغيل، بحد أقصى {{stored}} مخزّنة","stateAwaitingHumanInput":"في انتظار أحد الأعضاء","summarized":"ملخّص","transcriptWindowed":"تم دمج أول {{count}} إدخالات في النص المنقول ضمن ملخص متجدد للحفاظ على سياق محدود للأدوار اللاحقة. مرّر المؤشر لعرض الملخص.","voteMethod":"الطريقة","voteMethodApproval":"الموافقة","voteMethodMajority":"الأغلبية","voteOptionsExplicit":"قائمة صريحة","voteOptionsLastSynthesis":"استخراج من آخر توليف","voteOptionsList":"الخيارات (خيار واحد في كل سطر)","voteOptionsSource":"خيارات الاقتراع","voteQuorum":"النصاب القانوني","voteTieHuman":"يقرر إنسان (غير متاح بعد)","voteTieModerator":"يقرر المشرف","voteTieNoDecision":"لا قرار","voteTiePolicy":"عند التعادل","voteWeightByConfidence":"الترجيح حسب مستوى الثقة","waitIndefinitely":"الانتظار إلى أجل غير مسمى","advancedSaved":"تم حفظ إعدادات التعاون","advancedNotConfigured":"لم يتم إعداد نافذة النص أو ذاكرة المراجعة أو المخرجات المشتركة أو الميسّر — انقر على تحرير لتفعيلها.","contextWindowHint":"يحدّ من سياق كل دور في النقاشات الطويلة بطيّ المدخلات الأقدم في ملخّص متجدّد.","contextWindowEntries":"المدخلات الحديثة المحفوظة كاملةً","contextWindowSummarize":"تلخيص ما يخرج من النافذة","contextWindowTruncateNote":"تُستبدل المدخلات الأقدم بعلامة بسيطة: «حُذفت N من المدخلات السابقة».","retroConfigHint":"يتيح لمرحلة المراجعة كتابة الدروس في ذاكرة الفريق لتُستخدم في نقاشات لاحقة.","retroPerRun":"لكل تشغيل","retroStored":"الحد الأقصى المخزَّن","artifactConfigHint":"يتيح للأعضاء تأليف مستندات مشتركة تبقى بعد انتهاء الدور الذي كُتبت فيه.","artifactsPerDiscussion":"الحد الأقصى لكل نقاش","facilitatorHint":"وكيل يتدخّل عند كل نقطة تفتيش ويختار حركة واحدة من القائمة المسموح بها — وليس منسّقًا حرًّا أبدًا.","facilitatorAgent":"وكيل الميسّر","facilitatorPickAgent":"اختر وكيلًا…","facilitatorAgentRequired":"اختر الوكيل الذي سيتولّى التيسير.","facilitatorCheckAfter":"نقطة التفتيش","facilitatorCheckpoint":{"EACH_PHASE":"بعد كل مرحلة","EACH_REPEAT":"بعد كل جولة داخل المرحلة"},"facilitatorMove":{"CONTINUE":"المتابعة","END_PHASE":"إنهاء المرحلة مبكرًا","EXTEND_PHASE":"تمديد المرحلة","CALL_VOTE":"الدعوة إلى تصويت","RECRUIT":"ضمّ عضو جديد","ESCALATE_HUMAN":"التصعيد إلى إنسان"},"facilitatorNoMove":"اسمح بحركة واحدة على الأقل، أو عطّل الميسّر.","facilitatorMidPhaseNeedsRepeat":"إنهاء المرحلة أو تمديدها يحدث في منتصفها، لذا يتطلّب نقطة التفتيش لكل جولة.","facilitatorEscalateTo":"التصعيد إلى (معرّف المستخدم)","facilitatorEscalateRequired":"التصعيد يوقف النقاش في انتظار شخص ما — حدّد من هو.","facilitatorMaxMoves":"الحد الأقصى للحركات لكل نقاش","assignmentModeLabel":"إسناد المهام","assignmentModeRole":"حسب الدور (يُسنِد المخطِّط)","assignmentModeBid":"حسب العطاء (يقدّم الأعضاء عطاءات، ويفوز صاحب أعلى ثقة)","assignmentModeBidShort":"حسب العطاء","assignmentModeRoleHint":"يُسنِد المخطِّط أو الإعداد كل مهمة، أو بالتناوب.","assignmentModeBidHint":"يعود إلى الإسناد حسب الدور عندما لا يغطّي المزاد تكلفته — أقل من مقدّمَي عطاء أو مهمتين مفتوحتين، أو ميزانية أدوار غير كافية.","contextWindowSummarizer":"المُلخِّص","contextWindowNoSummarizer":"بلا","contextWindowModel":"نموذج التلخيص","contextWindowModelPlaceholder":"النموذج","contextWindowSummarizerMissing":"بدون نموذج تلخيص، يعود الفائض بصمت إلى علامة الاقتطاع البسيطة.","facilitatorMaxMovesCeiling":"بحد أقصى {{max}} — الميسّر تدخّل محدود وليس منسّقًا.","reviewUnassignedWarning_few":"{{count}} عضو غير مُعيَّن","reviewUnassignedWarning_many":"{{count}} عضو غير مُعيَّن","reviewUnassignedWarning_one":"{{count}} عضو غير مُعيَّن","reviewUnassignedWarning_two":"{{count}} عضو غير مُعيَّن","reviewUnassignedWarning_zero":"{{count}} عضو غير مُعيَّن","reviewUnassignedWarning_other":"{{count}} عضو غير مُعيَّن","retroRecordedBadge_few":"{{phase}}: تم حفظ {{count}} دروس في ذاكرة الفريق","retroRecordedBadge_many":"{{phase}}: تم حفظ {{count}} دروس في ذاكرة الفريق","retroRecordedBadge_one":"{{phase}}: تم حفظ {{count}} درس في ذاكرة الفريق","retroRecordedBadge_two":"{{phase}}: تم حفظ {{count}} دروس في ذاكرة الفريق","retroRecordedBadge_zero":"{{phase}}: تم حفظ {{count}} دروس في ذاكرة الفريق","retroRecordedBadge_other":"{{phase}}: تم حفظ {{count}} دروس في ذاكرة الفريق","artifactRevisions_few":"{{count}} مراجعات سابقة","artifactRevisions_many":"{{count}} مراجعات سابقة","artifactRevisions_one":"{{count}} مراجعة سابقة","artifactRevisions_two":"{{count}} مراجعات سابقة","artifactRevisions_zero":"{{count}} مراجعات سابقة","artifactRevisions_other":"{{count}} مراجعات سابقة","styles":{"ROUND_TABLE":{"label":"طاولة مستديرة","flow":"يعرض كل عضو رأيه، ثم يبني الجميع على آراء بعضهم عبر عدة جولات"},"PEER_REVIEW":{"label":"مراجعة الأقران","flow":"يجيب كل عضو بمفرده، ثم ينقد الأعضاء بعضهم ويُنقّحون إجاباتهم"},"DEVIL_ADVOCATE":{"label":"محامي الشيطان","flow":"عضو واحد يهاجم موقف المجموعة والبقية يدافعون عنه"},"DELPHI":{"label":"جولات مجهولة","flow":"يجيب الأعضاء دون ذكر أسمائهم ويُنقّحون في كل جولة، فلا ينساق أحد خلف أول متحدث"},"DEBATE":{"label":"مناظرة مع وضد","flow":"طرف يؤيد وطرف يعارض، ثم تأتي الردود ثم الحكم"},"TASK_FORCE":{"label":"فريق مهام","flow":"يضع المنسّق الخطة، وينفّذ الأعضاء المهام بالتوازي، ثم يجري التحقق من النتائج"},"NEGOTIATION":{"label":"تفاوض","flow":"تتبادل الأطراف المقترحات حتى تتفق، ولا يتدخل المحكّم إلا إذا تعذّر الاتفاق"},"CUSTOM":{"label":"مسار مخصّص","flow":"مراحل تحددها بنفسك"}},"unsupportedStyle":"لا يدعم هذا الخادم {{style}}. اختر إطارًا آخر للمتابعة."}'),J={title:"لوحة المهام",pending:"قيد الانتظار",inProgress:"قيد التنفيذ",completed:"مكتمل",verified:"تم التحقق",failed:"فشل",assignedTo:"مُعيَّن إلى {{name}}",dependsOn:"يعتمد على: {{tasks}}",emptyTitle:"في انتظار خطة المهام",emptyDescription:"سيقوم المشرف بإنشاء خطة مهام بمجرد بدء النقاش.",emptyState:"ستظهر خطة المهام هنا عندما يقوم المشرف بإنشائها",unassigned:"غير مُعيَّن",progress:"{{done}} من {{total}} مهام مكتملة",verificationPassed:"ناجح",verificationFailed:"فاشل",showMore:"عرض المزيد",showLess:"عرض أقل",awaitingApproval:"في انتظار الموافقة",filedBy:"أنشأها {{agent}}",wonByBid:"تم الفوز بالمزايدة — الثقة {{confidence}}٪، {{complexity}}"},Y={title:"ذاكرة المستخدم",subtitle:"تصفح وإدارة ذكريات المستخدم المخزنة بواسطة الوكلاء",userIdPlaceholder:"أدخل معرف المستخدم…",searchPlaceholder:"البحث في الذكريات…",enterUserId:"أدخل معرف مستخدم لتصفح ذكرياته",totalEntries:"إجمالي الإدخالات",preferences:"التفضيلات",facts:"الحقائق",conflicts:"المتعارضة",cat_all:"الكل",cat_preference:"التفضيلات",cat_fact:"الحقائق",cat_context:"السياق",deleteAll:"حذف الكل",deleteAllTitle:"حذف جميع الذكريات",deleteAllDesc:"سيتم حذف جميع ذكريات هذا المستخدم نهائياً. لا يمكن التراجع عن هذا الإجراء.",deleteAllConfirm:"حذف الكل",entryDeleted:"تم حذف إدخال الذاكرة",allDeleted:"تم حذف جميع ذكريات المستخدم",noResults:"لم يتم العثور على إدخالات ذاكرة",value:"القيمة",sourceAgent:"الوكيل المصدر",accessCount:"عدد الوصول",created:"تاريخ الإنشاء",updated:"تاريخ التحديث",sourceConversation:"المحادثة المصدر",conflicted:"متعارض"},$={title:"خصائص المستخدم",subtitle:"تصفح وإدارة خصائص longTerm المخزنة لكل مستخدم",userIdPlaceholder:"أدخل معرف المستخدم…",searchPlaceholder:"تصفية الخصائص…",enterUserId:"أدخل معرف مستخدم لعرض خصائصه",key:"المفتاح",type:"النوع",value:"القيمة",deleteAll:"حذف الكل",deleteAllTitle:"حذف جميع الخصائص",deleteAllDesc:"سيتم حذف جميع خصائص هذا المستخدم نهائياً.",deleted:"تم حذف الخصائص",noResults:"لم يتم العثور على خصائص",showingCount:"{{count}} خاصية"},Q={agentId:"معرف الوكيل",environment:"البيئة",title:"مشغلات الوكلاء",subtitle:"ربط النوايا بنشر الوكلاء للتوجيه التلقائي",create:"مشغل جديد",createTitle:"إنشاء مشغل",editTitle:"تعديل المشغل",intent:"النية",deployments:"عمليات نشر الوكلاء",addDeployment:"إضافة وكيل",agents:"وكلاء",empty:"لم يتم تكوين مشغلات بعد",created:"تم إنشاء المشغل",updated:"تم تحديث المشغل",deleted:"تم حذف المشغل",deleteTitle:"حذف المشغل",deleteDesc:"هل تريد حذف المشغل للنية «{{intent}}» نهائياً؟",searchPlaceholder:"تصفية حسب النية أو معرف الوكيل…"},Z={agentCount:"الوكلاء",confidence:"الثقة",partialError:"فشلت بعض استعلامات المهارات",registryOverview:"نظرة عامة على السجل",skillName:"المهارة",skills:"مهارات",title:"اكتشاف القدرات",subtitle:"اكتشاف الوكلاء حسب مهاراتهم وقدراتهم المعلنة",searchPlaceholder:"البحث في المهارات…",strategyHighest:"أعلى ثقة",strategyAll:"جميع النتائج",registeredSkills:"المهارات المسجلة",noSkills:"لم يتم العثور على مهارات",matchingAgents:"الوكلاء المطابقون",noMatches:"لم يُعثر على وكلاء لهذه المهارة"},X={title:"تصدير الوكيل",loading:"يُحمل شجرة الموارد...",selectResources:"اختر الموارد للتصدير",required:"مطلوب",snippets:"القصاصات",allSelected:"تم تحديد جميع الموارد",countSelected:"{{count}} من {{total}} مورد محدد",exportSelected:"تصدير المحدد"},ee={title:"استيراد وكيل",dropZone:"أسقط ملف .zip هنا أو انقر للتصفح",dropZoneHint:"أرشيف الوكيل المصدر (.zip)",strategyLabel:"استراتيجية الاستيراد",createNew:"إنشاء كوكيل جديد",createNewDesc:"إنشاء نسخة جديدة بـ IDs جديدة. الأفضل للاستيراد لأول مرة.",mergeSync:"دمج/مزامنة مع الموجود",mergeSyncDesc:"يحدث الموارد الموجودة إذا تم استيرادها مسبقاً. ينشئ جديدة إذا لم توجد.",upgradeExisting:"ترقية الوكيل الموجود",upgradeDesc:"مطابقة هيكلية للموارد ضد الوكيل الهدف. الأفضل للترقية بين البيئات.",syncRemote:"مزامنة من مثيل بعيد",syncDesc:"اتصل بمثيل EDDI آخر وقم بمزامنة وكيل محدد مباشرة.",importNow:"استيراد الآن",previewChanges:"معاينة التغييرات",selectTargetAgent:"اختر الوكيل الهدف",upgradeTargetHint:"سيتم مطابقة الموارد المستوردة هيكلياً مع هذا الوكيل.",chooseAgent:"— اختر وكيلًا —",sourceAgent:"الوكيل المصدر (عن بُعد)",targetAgent:"الوكيل الهدف (محلي)",createNewTarget:"إنشاء وكيل جديد",resource:"المورد",type:"النوع",match:"مطابقة",action:"إجراء",new:"جديد",updated:"مُحدث",unchanged:"بدون تغيير",selected:"محدد",mergeNow:"استيراد المحدد",syncNow:"مزامنة الآن",upgradeNow:"ترقية الآن",importing:"يتم استيراد الوكيل...",contentIdentical:"المحتوى متطابق",targetContent:"الهدف",sourceContent:"المصدر"},te={title:"مزامنة الوكلاء",subtitle:"قم بمزامنة الوكلاء بين مثيلات EDDI",connection:"المثيل المصدر",sourceUrl:"رابط EDDI المصدر",authToken:"رمز التفويض",authHint:"اختياري. يُرسل كترويسة X-Source-Authorization.",connect:"اتصال",connected:"متصل",agentsFound:"وكلاء",connectionFailed:"فشل الاتصال",agentMapping:"تخطيط الوكلاء",previewAll:"معاينة الكل",syncSelected:"مزامنة المحدد",remote:"عن بُعد",createNew:"إنشاء جديد",changes:"تغيير",agentsSelected:"وكلاء محددون",totalResources:"موارد",syncSuccess:"اكتملت المزامنة",syncError:"فشلت المزامنة",empty:"اتصل بالمثيل المصدر للبدء في مزامنة الوكلاء.",autoMatched:"مطابقة تلقائية",previewFirst:"معاينة التغييرات قبل المزامنة"},oe={actionCreate:"جديد",actionUpdate:"تحديث",actionSkip:"محدّث",actionConflict:"تعارض"},ne={title:"محادثات المستخدم",subtitle:"إدارة ربط النية → المستخدم → المحادثة",lookup:"بحث",intent:"النية",userId:"معرف المستخدم",agentId:"معرف الوكيل",environment:"البيئة",conversationId:"معرف المحادثة",binding:"الربط النشط",enterBoth:"أدخل النية ومعرف المستخدم",notFound:"لم يتم العثور على ربط",create:"إنشاء ربط",createTitle:"إنشاء ربط",created:"تم إنشاء الربط",deleteTitle:"حذف الربط",deleteDesc:'إزالة الربط للنية "{{intent}}" والمستخدم "{{userId}}"?',deleted:"تم حذف الربط"},ae={placeholder:"البحث في الصفحات والوكلاء والإجراءات…",noResults:"لم يتم العثور على نتائج.",recent:"الأخيرة",navigate:"التنقل",agents:"الوكلاء",actions:"إجراءات سريعة",createAgent:"إنشاء وكيل جديد",openChat:"فتح الدردشة",kbdNavigate:"تنقل",kbdSelect:"تحديد",kbdClose:"إغلاق"},re={groupMemberHint:"ستشارك هذه المجموعة كمجموعة فرعية متداخلة في النقاش.",noGroupsHint:"أنشئ مجموعة أولاً، ثم أضِفها كعضو مجموعة فرعية متداخلة.",noGroupsYet:"لا توجد مجموعات متاحة",selectGroup:"اختر مجموعة موجودة…",title:"Group Setup Wizard",subtitle:"Assemble a team of AI advisors to discuss your questions",backToGroups:"Back to Groups",templateTitle:"Start from a template",templateDesc:"Choose a preset group configuration or start from scratch.",startBlank:"Start from Scratch",blankDesc:"Configure everything manually",configTitle:"Group Configuration",configDesc:"Name your group and choose how the agents will discuss",namePlaceholder:"e.g. Advisory Board",descPlaceholder:"What is this group for?",membersTitle:"Assemble Your Team",membersDesc:"For each seat, choose an existing agent or create a new one on the fly.",addMember:"Add Member",refreshAgents:"Refresh agent list",existingAgents:"existing agents",displayName:"Agent Name",displayNamePlaceholder:"Give this agent a name…",rolePlaceholder:"Role (e.g. Marketing, Engineering)",useExisting:"Use Existing",createNew:"Create New",selectAgent:"Select agent…",systemPrompt:"System Prompt",provider:"LLM Provider",model:"Model",apiKey:"API Key",apiKeyPlaceholder:"sk-…",createThisAgent:"Create Agent",creatingAgent:"Creating agent…",agentReady:"Agent created & deployed",agentCreated:'Agent "{{name}}" created',agentCreateFailed:"Failed to create agent: {{error}}",moderator:"Moderator",moderatorHint:"Synthesizes the discussion",addModerator:"Add Moderator",removeModerator:"Remove moderator",createModerator:"Create Moderator Agent",moderatorReady:"Moderator agent ready",moderatorCreated:"Moderator agent created",creatingModerator:"Creating moderator…",creatingSlot:"Creating {{name}}…",creatingGroup:"Creating group…",needMembers:"Add at least 2 members to proceed",reviewTitle:"Review & Create",reviewDesc:"Review your group configuration before creating.",reviewMembers:"Members",autoCreateNotice:"{{count}} agents will be auto-created when you click Create Group",autoCreateHint:"Each agent will be created and deployed automatically before the group is assembled.",unassignedWarning:"{{count}} members set to 'Use Existing' but no agent selected",unassignedHint:"These members will be skipped during discussions. Go back to assign agents.",flowPreview:"Discussion Flow",createGroup:"Create Group",created:"Group Created!",viewGroup:"Open Group",createAnother:"Create Another",success:"Group created successfully!",advancedSettings:"إعدادات البروتوكول المتقدمة",agentTimeout:"مهلة الوكيل (ثوانٍ)",maxRetries:"الحد الأقصى لإعادة المحاولة",onAgentFailure:"عند فشل الوكيل",onMemberUnavailable:"عند عدم توفر العضو",maxTurns:"الحد الأقصى للأدوار (0 = غير محدود)",maxTurnsHelp:"حد أمان لإجمالي أدوار الوكيل. الحد الافتراضي للخادم هو 50.",policySkip:"تخطي",policyRetry:"إعادة المحاولة",policyAbort:"إلغاء",policyFail:"فشل",hintDebate:"قم بتعيين أدوار PRO و CON للأعضاء. يبدأ Pro بالحجج أولاً، ثم Con، يليها الردود والحكم.",hintDevilAdvocate:"قم بتعيين دور DEVIL_ADVOCATE لعضو واحد على الأقل. سيتحدى إجماع المجموعة.",hintPeerReview:"يقوم كل عضو بنقد عمل كل عضو آخر بشكل فردي، ثم يراجع بناءً على الملاحظات المتلقاة.",hintDelphi:"يستجيب جميع الأعضاء بشكل مستقل ومجهول. بعد كل جولة، يرون النتائج المجهولة ويمكنهم التعديل. الحد الأقصى للأدوار يتحكم في عدد التكرارات المجهولة.",hintNegotiation:"يعرض الأعضاء مصالحهم، ثم يقدّمون المقترحات ويتفاوضون — ويحدّد «الحد الأقصى للجولات» عدد جولات المساومة. ولا يتدخل المنسّق للتحكيم إلا إذا لم يتم التوصل إلى اتفاق.",roleCoverageWarning:"لا يحمل أي عضو الدور «{{role}}»",roleCoverageHint:"يلجأ الخادم إلى السماح لجميع الأعضاء بالتحدث في {{phases}}، فيدافع الأشخاص أنفسهم عن الجانبين. ارجع إلى «الأعضاء» واملأ حقل الدور.",hintTaskForce:"ينشئ المشرف خطة مهام، ويوزع العمل على الوكلاء بشكل متوازٍ، ثم يتحقق من النتائج ويجمعها.",hintCustom:"حدد مراحلك الخاصة يدوياً. يمكن تكوين المراحل المخصصة عبر واجهة API بعد الإنشاء.",hintRoundTable:"يشارك جميع الأعضاء آراءهم، ثم يناقشون وجهات نظر بعضهم عبر جولات متعددة قبل أن يقوم المشرف بالتجميع.",protocolSummary:"البروتوكول",hitlTitle:"طلب موافقة بشرية",hitlDesc:"إيقاف المناقشة مؤقتًا عند المراحل المختارة وانتظار قرار بشري قبل المتابعة.",hitlApprovalPoints:"الإيقاف للموافقة عند",hitlNoPhases:"هذا النمط لا يحتوي على مراحل معدة مسبقًا للتحكم بها.",hitlNoApprovalPoints:"اختر مرحلة واحدة على الأقل، وإلا فلن تتوقف المناقشة أبدًا.",hitlTimeoutPolicy:"إذا لم يُتخذ قرار في الوقت المحدد",hitlApprovalTimeout:"مهلة الموافقة",hitlTimeoutInvalid:"أدخل مدة ISO-8601 موجبة، مثل PT15M أو PT1H30M.",hitlTimeoutHint:"مدة ISO-8601، مثل PT30S وPT15M وPT2H.",hitlGranularity:"دقة الموافقة",hitlGranularityHint:"تنطبق الموافقة على مستوى المهمة على تنفيذ TASK_FORCE — وافق على كل مهمة أو ارفضها على حدة.",hitlOnTaskRejection:"عند رفض مهمة",hitlPinNote:"تفعيل نقاط الموافقة يثبّت مراحل مناقشة هذه المجموعة (دقة {{granularity}}).",hitlReviewBadge:"موافقة بشرية",humanOnTimeoutAbort:"إلغاء النقاش",humanOnTimeoutLabel:"عند انتهاء المهلة",humanOnTimeoutSkip:"تخطي دورهم والمتابعة",humanPrincipalId:"معرّف الهوية الأساسي",humanPrincipalIdHint:"الهوية المخوّلة بإرسال مساهمات هذا العضو — يتوقف النقاش مؤقتًا وينتظر عندما يحين دوره للحديث.",humanPrincipalIdPlaceholder:"معرّف تسجيل الدخول/الهوية الأساسية للمستخدم",humanTurnSettingsHint:"يتوقف النقاش مؤقتًا وينتظر عندما يحين دور عضو بشري للحديث. حدد ما يحدث إذا لم يستجب في الوقت المحدد.",humanTurnSettingsTitle:"إعدادات دور الأعضاء البشريين",humanTurnTimeoutInvalid:"ليست مدة صالحة بصيغة ISO-8601، مثل PT24H أو P1D.",humanTurnTimeoutLabel:"مهلة الدور (مدة بصيغة ISO-8601)",humanTurnTimeoutPlaceholder:"مثل PT24H — اتركه فارغًا للانتظار إلى أجل غير مسمى",memberTypeHuman:"بشري"},se={advisoryBoard:"مجلس استشاري",advisoryBoardDesc:"خمس وجهات نظر — التسويق والهندسة والمالية والقانون والاستراتيجية — تُبدي رأيها في السؤال نفسه، ثم يلخّص المنسّق.",peerReview:"لجنة مراجعة الأقران",peerReviewDesc:"يقيّم المراجعون ما تقدّمه — مسودة أو خطة أو مقترحًا — وينقدون تقييمات بعضهم ثم يُنقّحونها، ويجمع المنسّق النتيجة.",riskAssessment:"تقييم المخاطر",riskAssessmentDesc:"يعرض كل عضو قراءته، ويتبنّى أحدهم الموقف المعاكس لكشف النقاط العمياء، فيردّ الباقون، ثم يلخّص المنسّق ما صمد.",forecasting:"تقديرات مستقلة",forecastingDesc:"يجيب الأعضاء دون ذكر أسمائهم عبر عدة جولات ولا يرون بينها سوى نتائج مجهولة المصدر، فلا ينساق أحد خلف أول متحدث.",proCon:"مناظرة مع وضد",proConDesc:"عضوان يؤيدان المقترح وعضوان يعارضانه، تليها ردود ثم حكم المنسّق.",negotiation:"تفاوض",negotiationDesc:"يعرض طرفان مصالحهما ويقدّمان المقترحات ويتبادلان التنازلات جولة بعد جولة؛ ولا يتدخل المنسّق للتحكيم إلا إذا لم يتم التوصل إلى اتفاق.",taskForce:"فريق مهام",taskForceDesc:"يقسّم المنسّق الهدف إلى مهام، ينفّذها الأعضاء بالتوازي، ثم يتحقق منها ويجمع النتائج.",roles:{marketingExpert:"خبير التسويق",techLead:"قائد تقني",financeDirector:"المدير المالي",legalCounsel:"المستشار القانوني",strategyConsultant:"استشاري الاستراتيجية",substanceReviewer:"مراجع المضمون",structureReviewer:"مراجع البنية",riskReviewer:"مراجع المخاطر",riskAnalyst:"Risk Analyst",domainExpert:"Domain Expert",devilsAdvocate:"Devil's Advocate",analystA:"Analyst A",analystB:"Analyst B",analystC:"Analyst C",analystD:"Analyst D",proAdvocate1:"Pro Advocate 1",proAdvocate2:"Pro Advocate 2",conAdvocate1:"Con Advocate 1",conAdvocate2:"Con Advocate 2",partyA:"الطرف أ",partyB:"الطرف ب",projectLead:"قائد المشروع",researcher:"باحث",implementer:"منفذ",qualityAssurance:"ضمان الجودة"},assignRoles:"تعيين الأدوار",backToGallery:"العودة إلى القوالب",browseButton:"من قالب",createButton:"إنشاء مجموعة",created:"تم إنشاء المجموعة من القالب",nameLabel:"اسم المجموعة",selectAgent:"اختر وكيلاً…",subtitle:"ابدأ من نقاش جاهز ومُعدّ مسبقًا — ما عليك سوى تعيين الوكلاء إلى أدواره المسمّاة.",title:"قوالب المجموعات",roleCount_few:"{{count}} أدوار للتعيين",roleCount_many:"{{count}} أدوار للتعيين",roleCount_one:"{{count}} دور للتعيين",roleCount_two:"{{count}} أدوار للتعيين",roleCount_zero:"{{count}} أدوار للتعيين",roleCount_other:"{{count}} أدوار للتعيين",empty:"لا توجد قوالب متاحة",emptyDescription:"لا يوفّر هذا الخادم أي قوالب مجموعات. لا يزال بإمكانك إنشاء مجموعة من الصفر عبر المعالج."},ie={agentIdPlaceholder:"معرف الوكيل لمعالجة الرسائل",botToken:"رمز البوت",botTokenHint:"رمز OAuth للبوت. استخدم مرجع الخزنة لمزيد من الأمان.",botTokenPlaceholder:"xoxb-… أو ${vault:slack-bot-token}",channel:"قناة",channelId:"معرف قناة Slack",channelIdCol:"معرف القناة",channelIdHint:"انقر بزر اليمين على قناة Slack → عرض تفاصيل القناة → نسخ معرف القناة",channelsPlural:"قنوات",channelType:"نوع القناة",confirmDelete:"حذف القناة؟",confirmDeleteDesc:"ستتم إزالة تكامل القناة هذا نهائيًا.",create:"إنشاء قناة",createTitle:"إنشاء تكامل قناة",defaultAgentId:"معرف الوكيل الافتراضي",defaultTargetHint:"يعالج الهدف الافتراضي جميع الرسائل التي لا تتطابق مع كلمة مفتاحية. يمكنك إضافة أهداف أخرى بعد الإنشاء.",empty:"لا توجد قنوات بعد",emptyDesc:"أنشئ تكامل قناة لربط الوكلاء بـ Slack.",name:"الاسم",namePlaceholder:"مثلاً Engineering AI Hub",openSlackApps:"فتح لوحة تحكم تطبيق Slack",searchPlaceholder:"بحث في القنوات…",signingSecret:"سر التوقيع",signingSecretHint:"من صفحة المعلومات الأساسية لتطبيق Slack.",signingSecretPlaceholder:"سلسلة ست عشرية أو ${vault:slack-signing-secret}",slackSetupGuide:"دليل إعداد Slack",slackSetupSummary:"أنشئ تطبيق Slack، وكوّن نطاقات رمز البوت (app_mentions:read، chat:write، im:history، channels:history، groups:history)، ثم الصق بيانات الاعتماد هنا.",target:"هدف",targets:"أهداف",targetsCol:"الأهداف",type:"النوع",unnamed:"قناة بدون اسم",version:"الإصدار"},ce={saveSuccess:"تم حفظ القناة",addTarget:"إضافة هدف",addTrigger:"إضافة مشغل…",agentId:"معرف الوكيل",botToken:"رمز البوت",channelId:"معرف قناة Slack",cooldown:"فترة التهدئة (ث)",general:"عام",groupId:"معرف المجموعة",isDefault:"افتراضي",maxCost:"الحد الأقصى $/يوم",maxDaily:"الحد الأقصى/يوم",name:"الاسم",observe:"مراقبة",observeDesc:"مراقبة سلبية واستجابة انتقائية",observeKeywords:"كلمات مفتاحية للتشغيل",observeMimeTypes:"أنواع MIME للتشغيل",observeMode:"وضع المراقبة",observeSettings:"إعدادات وضع المراقبة",platformConfig:"تكوين المنصة",rawConfig:"التكوين الخام",removeTarget:"إزالة",requiredEvents:"اشتراكات الأحداث المطلوبة:",requiredScopes:"نطاقات رمز البوت المطلوبة:",setDefault:"تعيين كافتراضي",signingSecret:"سر التوقيع",targetName:"الاسم",targets:"أهداف توجيه الرسائل",targetType:"النوع",triggerHint:'يكتب المستخدمون "كلمة مفتاحية: رسالة" للتوجيه إلى هذا الهدف',triggerKeywords:"كلمات مفتاحية للتشغيل",triggers:"مشغلات",type:"نوع القناة",webhookHint:"الصق هذا الرابط في حقل Request URL ضمن Event Subscriptions في تطبيق Slack.",webhookUrl:"رابط الويب هوك",hitlSection:"موافقات الإنسان في الحلقة (اختياري)",hitlApprovalChannel:"معرّف قناة الموافقة",hitlApprovalChannelHint:"قناة Slack التي تتلقى بطاقة موافقة عند إيقاف المحادثة مؤقتًا.",hitlApproverUserIds:"معرّفات مستخدمي الموافِقين",hitlApproverUserIdsHint:"معرّفات مستخدمي Slack مفصولة بفواصل ويُسمح لهم بالموافقة عبر الأزرار. بدون هذه القائمة لا تُعرض الأزرار (فشل مغلق)."},le={loadingApprovalDetails:"جارٍ تحميل تفاصيل الموافقة…",pendingCount:"{{count}} بانتظار الموافقة",approvalDetailsError:"تعذّر تحميل ما سيفعله هذا الطلب، لذا لا يمكن الموافقة عليه من هنا. الرفض ما زال آمنًا.",awaitingHuman:"في انتظار الإنسان",awaitingApproval:"في انتظار الموافقة",approve:"موافقة",reject:"رفض",cancel:"إلغاء",approved:"تمت الموافقة",rejected:"مرفوض",cancelled:"ملغى",pending:"معلق",emptyQueue:"لا توجد موافقات معلقة",emptyQueueDescription:"جميع المحادثات تسير — لا حاجة لمدخلات بشرية الآن.",surface:"السطح",regular:"محادثة",group:"مجموعة",pauseReason:"السبب",pausedAt:"متوقف",timeoutPolicy:"المهلة",timeRemaining:"المتبقي",overdue:"متأخر",phase:"المرحلة",granularity:"الدقة",taskApprovals:"موافقات المهام",approveAll:"الموافقة على الكل",note:"إضافة ملاحظة (اختياري)",notePlaceholder:"أضف ملاحظة للقرار...",discussionCancelled:"تم إلغاء المناقشة",cancelDiscussion:"إلغاء المناقشة",rejectAll:"رفض الكل",timeoutWaitIndefinitely:"انتظار غير محدود",timeoutAutoApprove:"موافقة تلقائية",timeoutAutoReject:"رفض تلقائي",timeoutAbort:"إحباط",granularityPhase:"مرحلة",granularityTask:"مهمة",rejectionFail:"إفشال المهمة",rejectionRetry:"إعادة محاولة المهمة",groupsTruncated:"توجد موافقات مجموعات أكثر مما هو معروض هنا.",groupsLoadError:"تعذر تحميل موافقات المجموعات.",toolApprovalRequired:"مطلوب الموافقة على الأداة",toolCallsAwaiting:"استدعاءات الأدوات بانتظار الموافقة",executedUngated:"تم التنفيذ بالفعل (بدون بوابة)",outcomeUnknown:"تمت مقاطعة موافقة سابقة أثناء التنفيذ — أثرها غير معروف؛ تحقق خارجيًا قبل إعادة المحاولة.",outcomeUnknownShort:"النتيجة غير معروفة",toolApprovalHint:"الموافقة تُطبّق اختياراتك لكل استدعاء (الاستدعاءات التي لم تغيّرها تتم الموافقة عليها). الرفض يرفض الدفعة بأكملها.",toolApprovalHintExplicit:"يحتاج كل استدعاء إلى موافقة أو رفض خاص به قبل أن تتمكن من الموافقة على الدفعة. الرفض يرفض الدفعة بأكملها.",explicitReviewMissing:"راجع كل استدعاء أعلاه قبل الموافقة.",redactionCaveat:'الوسائط المعروضة أدناه محجوبة — تظهر القيمة السرية كـ ""، ولا يتم حذفها.',gateReason:"النمط المطابق",argsTruncated:"الوسائط مقتطعة",amendArguments:"تعديل الوسائط (اختياري)",amendPlaceholder:'كائن JSON بديل كامل، مثال {"to":"ops@acme.com"}. اتركه فارغًا للإبقاء على الأصل.',amendTruncated:"لا يمكن تعديل استدعاء تم اقتطاع وسائطه — وافق عليه أو ارفضه كما هو.",amendInvalidJson:"يجب أن تكون الوسائط المعدّلة كائن JSON صالحًا.",amendTooLarge:"الوسائط المعدّلة كبيرة جدًا.",review:"مراجعة",tool:"الأداة",scopeAll:"عرض جميع الموافقات المعلّقة عبر النظام.",scopeOwn:"عرض الموافقات المعلّقة لمحادثاتك.",chatPaused:"هذه المحادثة بانتظار موافقة بشرية.",noProgressWaitForHuman:"انتظار موافقة بشرية",noProgressAutoReject:"الرفض التلقائي",noProgressAbort:"إلغاء",confirmApproveTitle:"الموافقة على الطلب؟",confirmApproveDescription:"الموافقة على هذه المحادثة واستئنافها؟",confirmApproveToolTitle:"الموافقة على تنفيذ الأداة؟",confirmApproveToolDescription:"ستؤدي الموافقة إلى تشغيل: {{toolNames}}. يؤدي هذا إلى تنفيذ إجراءات فعلية ولا يمكن التراجع عنه.",confirmRejectTitle:"رفض الطلب؟",confirmRejectDescription:"رفض هذا الطلب؟ لن تستمر المحادثة.",confirmCancelTitle:"إلغاء المحادثة؟",confirmCancelDescription:"إلغاء هذه المحادثة؟ سيتم إيقاف أي عمل قيد التنفيذ.",confirmCancelButton:"إلغاء المحادثة",confirmCancelGroupTitle:"إلغاء المناقشة؟",confirmCancelGroupDescription:"إلغاء هذه المناقشة؟ سيتم إيقاف أي عمل قيد التنفيذ.",confirmCancelGroupButton:"إلغاء المناقشة",confirmDismiss:"رجوع",approvalBlockedHeading:"لا يمكن الموافقة على هذا من هنا",confirmRejectToolTitle:"رفض تنفيذ الأداة؟",confirmRejectToolDescription:"لن يُنفَّذ أي شيء. تستمر المحادثة ويجيب الوكيل دون {{toolNames}}.",humanTurn:"دور العضو",humanTurnReason:"في انتظار أن يتحدث {{member}}",humanTurnMemberFallback:"أحد الأعضاء",decidedProgress:"تم البت في {{decided}} من {{total}}"},de={deploying:"جارٍ نشر الوكيل…",error:"حدث خطأ ما",newConversation:"محادثة جديدة",ready:"جاهز — اكتب رسالة للاختبار",retry:"حاول مجدداً",saving:"جارٍ حفظ التغييرات…",starting:"جارٍ بدء المحادثة…",timeout:"انتهت مهلة النشر",title:"دردشة اختبارية",preparing:"جارٍ التحضير…"},ue={auditTrail:"سجل التدقيق",checking:"جارٍ التحقق…",coordConnected:"المنسق متصل",coordDisconnected:"المنسق غير متصل",coordUnknown:"المنسق —",createGroup:"إنشاء مجموعة",noConversations:"لا توجد محادثات بعد",offline:"غير متصل",online:"متصل",platform:"المنصة",platformHealth:"صحة المنصة",recentConversations:"المحادثات الأخيرة",secretVault:"خزنة الأسرار",vaultDown:"الخزنة غير متاحة",vaultUp:"الخزنة جاهزة",viewLogs:"عرض السجلات"},pe={retry:"حاول مجدداً",title:"حدث خطأ ما"},me={auditPseudonymized:"تم إخفاء هوية التدقيق",checkingStatus:"جارٍ التحقق...",confirmDelete:"نعم، احذف جميع البيانات",confirmDesc:'سيؤدي هذا إلى حذف جميع بيانات المستخدم "{{userId}}" نهائياً. لا يمكن التراجع عن هذا الإجراء.',confirmTitle:"تأكيد حذف البيانات",conversationsDeleted:"المحادثات المحذوفة",delete:"حذف جميع البيانات",deleteSuccess:"تم حذف بيانات المستخدم بنجاح",deleting:"جارٍ الحذف...",enterUserIdFirst:"أدخل معرف مستخدم أعلاه للتحقق من الحالة",export:"تصدير البيانات",exportSuccess:"تم تصدير بيانات المستخدم بنجاح",exporting:"جارٍ التصدير...",legalDesc:"يوفّر تصدير البيانات (Art. 15/20) ملف JSON يحتوي على جميع البيانات المخزنة للمستخدم. يزيل الحذف (Art. 17) جميع الذكريات وبيانات المحادثات نهائياً، ويُخفي هوية إدخالات التدقيق، ولا يمكن التراجع عنه.",legalNotice:"إشعار حماية البيانات",liftRestriction:"رفع التقييد",liftingRestriction:"جارٍ الرفع...",logsPseudonymized:"تم إخفاء هوية السجلات",memoriesDeleted:"الذكريات المحذوفة",restrictProcessing:"تقييد المعالجة",restricting:"جارٍ التقييد...",restrictionApplied:"تم تقييد المعالجة للمستخدم",restrictionDesc:"قيّد المعالجة عندما يعترض المستخدم على دقة البيانات أو على المعالجة. أثناء التقييد، تُحفظ بيانات المستخدم لكن لا يمكن معالجة محادثات جديدة. هذا الإجراء قابل للعكس.",restrictionLifted:"تمت إزالة تقييد المعالجة",restrictionTitle:"تقييد المعالجة (Art. 18)",resultsTitle:"اكتمل المحو",statusActive:"المعالجة نشطة",statusUnknown:"الحالة غير متاحة",statusRestricted:"المعالجة مقيّدة",subtitle:"إدارة بيانات المستخدم المتوافقة مع GDPR — المحو (Art. 17)، وقابلية النقل (Art. 15/20)، وتقييد المعالجة (Art. 18)",title:"الخصوصية والامتثال",userId:"معرف المستخدم",userIdPlaceholder:"أدخل معرف المستخدم...",userLookup:"البحث عن مستخدم"},ge={message:"الوضع التجريبي — عرض بيانات نموذجية. اتصل بخلفية EDDI للحصول على بيانات حقيقية."},he={confirmPurgeAll:"حذف جميع الموارد اليتيمة البالغ عددها {{count}} نهائيًا؟ يحذف الخادم كل العناصر — لا يُطبَّق تحديدك. لا يمكن التراجع عن هذا.",deleteSelected:"حذف {{count}} محدد",description:"ابحث عن الموارد غير المُشار إليها من أي وكيل أو حزمة ونظّفها.",deselectAll:"إلغاء تحديد الكل",includeDeleted:"تضمين المحذوفة مبدئياً",lastScanned:"آخر فحص",noOrphans:"لم يتم العثور على عناصر يتيمة",purge:"تطهير الكل",purgeSuccess:"تم حذف {{count}} عنصر يتيم",runScan:"تشغيل الفحص",scan:"فحص",scanPromptDesc:"ابحث عن تكوينات الإضافات (القواعد، استدعاءات API، نماذج LLM، المخرجات) غير المُشار إليها من أي مسار عمل أو وكيل. نظّف الموارد غير المستخدمة للحفاظ على منصتك مرتّبة.",scanPromptTitle:"افحص منصتك",scanning:"جارٍ فحص الموارد…",selectAll:"تحديد الكل",softDeleted:"محذوف",title:"اكتشاف العناصر اليتيمة",found_few:"تم العثور على {{count}} يتيم",found_many:"تم العثور على {{count}} يتيم",found_one:"تم العثور على {{count}} يتيم",found_two:"تم العثور على {{count}} يتيم",found_zero:"تم العثور على {{count}} يتيم",found_other:"تم العثور على {{count}} يتيم"},ye={apiCallsMinute:"استدعاءات API / دقيقة",configuration:"الإعدادات",conversationsToday:"المحادثات اليوم",description:"قم بتكوين حدود المعدل وسقوف الاستخدام وميزانيات التكلفة لكل مستأجر.",disable:"تعطيل",disabled:"معطّل",enable:"تفعيل",enabled:"مُفعّل",enforcementOff:"الفرض متوقف.",enforcementOffHint:"لا يتم فرض الحصص. فعّل الفرض واحفظ لبدء تطبيق الحدود.",limitHint:"-1 = غير محدود",liveUsage:"الاستخدام المباشر",maxAgentsPerTenant:"الحد الأقصى للوكلاء / مستأجر",maxApiCallsPerMinute:"الحد الأقصى لاستدعاءات API / دقيقة",maxConversationsPerDay:"الحد الأقصى للمحادثات / يوم",maxMonthlyCostUsd:"الحد الأقصى للتكلفة الشهرية (USD)",monthlyCost:"التكلفة الشهرية",resetConfirmDesc:'يصفّر فورًا جميع عدّادات الاستخدام (المحادثات، طلبات API، التكلفة الشهرية) للمستأجر "default". لا يمكن التراجع.',resetConfirmTitle:"إعادة تعيين عدّادات الاستخدام؟",resetCounters:"إعادة تعيين العدّادات",resetSuccess:"تمت إعادة تعيين عدّادات الاستخدام",saveSuccess:"تم حفظ الحصة",tenantId:"معرف المستأجر",title:"حصص المستأجرين"},Te={clearVault:"مسح مرجع الخزنة",createNew:"إنشاء سر جديد",emptyVault:"لا توجد أسرار مخزنة بعد",filterPlaceholder:"ابحث في مفاتيح الخزنة…",keyNotFound:"لم يتم العثور على هذا المفتاح في الخزنة",loading:"جارٍ تحميل المفاتيح…",noMatch:'لا توجد مفاتيح تطابق "{{filter}}"',pickFromVault:"اختر من الخزنة",placeholder:"مفتاح API أو ${vault:key-name}",vaultDown:"الخزنة غير مُهيّأة — أعدّ مزوّد أسرار في خلفية EDDI"},ve={category:"الفئة",content:"محتوى الموجه",contentLabel:"محتوى القصاصة",contentPlaceholder:"يجب أن تكون حذراً ودقيقاً في ردودك...",description:"الوصف",descriptionPlaceholder:"ما تفعله هذه القصاصة",identity:"الهوية",name:"اسم القصاصة",namePlaceholder:"مثل: cautious_mode",noTags:"لا توجد وسوم",tagPlaceholder:"مثل: safety، production",tags:"الوسوم",templateEnabled:"تفعيل حل القوالب",templateEnabledHint:"عند التعطيل، تُعامَل علامات {{}} في المحتوى كنص حرفي (مفيد لأمثلة الشيفرة).",usageHint:"الاستخدام:"},De={deployed:"منشور",deploying:"جارٍ النشر...",error:"خطأ",notDeployed:"غير منشور",checking:"جارٍ التحقق…"},Ae={subtitle:"إدارة ذكريات المستخدم وخصائصه وروابط محادثاته",tabs:"أقسام بيانات المستخدم",title:"بيانات المستخدم"},fe={deleteKey:"حذف {{key}}",editKey:"تعديل {{key}}",tableTitle_few:"{{count}} متغيّر",tableTitle_many:"{{count}} متغيّر",tableTitle_one:"{{count}} متغيّر",tableTitle_two:"{{count}} متغيّر",tableTitle_zero:"{{count}} متغيّر",tableTitle_other:"{{count}} متغيّر",title:"المتغيّرات العامة",description:"قيم إعداد على مستوى النشر بالكامل، متاحة في جميع الوكلاء.",create:"إضافة متغيّر",createTitle:"إضافة متغيّر عام",editTitle:"تعديل المتغيّر",keyLabel:"المفتاح",keyPlaceholder:"مثال: default-model",keyError:"الأحرف والأرقام والنقاط والشرطات السفلية والشرطات فقط.",valueLabel:"القيمة",valuePlaceholder:"مثال: gpt-4.1",valueWarning:"القيم مرئية في الواجهة والسجلات. استخدم خزنة الأسرار للبيانات الحساسة.",descriptionLabel:"الوصف (اختياري)",descriptionPlaceholder:"وصف اختياري…",exportableLabel:"تضمين في عمليات تصدير الوكلاء",save:"حفظ المتغيّر",saveSuccess:"تم حفظ المتغيّر «{{key}}»",deleteSuccess:"تم حذف المتغيّر «{{key}}»",confirmDeleteTitle:"حذف المتغيّر",confirmDeleteMessage:"هل تريد بالتأكيد حذف «{{key}}»؟ سترى الوكلاء التي تستخدم ${vars:{{key}}} مراجع غير محلولة.",empty:"لا توجد متغيّرات عامة معرّفة",emptyHint:"انقر على «إضافة متغيّر» لإنشاء أول قيمة إعداد على مستوى النشر.",searchPlaceholder:"تصفية المتغيّرات…",colKey:"المفتاح",colValue:"القيمة",colDescription:"الوصف",colExportable:"التصدير",colReference:"المرجع",colActions:"الإجراءات",exportYes:"مضمَّن في عمليات التصدير",exportNo:"مستبعَد من عمليات التصدير",copyVars:"نسخ مرجع ${vars:…}",refCopied:"تم النسخ: {{ref}}",infoLine1:"استخدم {{vars.}} في مطالبات النظام أو ${vars:} في أي مكان ضمن إعدادات الوكلاء.",infoLine2:"تسري التغييرات خلال دقيقتين (مدة صلاحية ذاكرة التخزين المؤقت). للقيم الحساسة استخدم خزنة الأسرار بدلاً من ذلك."},Pe={endpoints:"نقاط نهاية",endpointsTotal:"إجمالي نقاط النهاية",groupsSelected:"مجموعات محددة",importOpenApi:"استيراد من OpenAPI",importSelected:"استيراد المجموعات المحددة",importing:"جارٍ الاستيراد…",selectGroups:"اختر مجموعات API لاستيرادها كإضافات استدعاء API منفصلة"},Se=JSON.parse('{"board":{"continuePlaceholder":"متابعة هذه المناقشة…","inputDisabledClosed":"هذه المناقشة مغلقة","newDiscussion":"مناقشة جديدة","noResponseGenerated":"لم يتم إنشاء استجابة","awaitingApprovalHint":"هذه المناقشة متوقفة في انتظار موافقة بشرية.","reviewInManager":"مراجعتها","askMore":"اسأل {{name}} المزيد ←","askYourBoard":"اسأل فريق المهام…","attachFile":"إرفاق ملف","backToLive":"العودة إلى النقاش المباشر","chatOneOnOne":"محادثة فردية","close":"إغلاق","copied":"تم النسخ!","copyResponse":"نسخ الرد","details":"التفاصيل","emptyDescription":"اطرح سؤالاً وسيناقشه فريق المهام.","emptyTitle":"جاهز للنقاش","error":"حدث خطأ ما","fileTooLarge":"يجب أن يكون حجم الملف أقل من 10 ميغابايت","fileTypeNotAllowed":"نوع الملف هذا غير مدعوم","hideConfig":"إخفاء لوحة التفاصيل","live":"مباشر","liveNow":"مباشر","loadingResponse":"جارٍ تحميل الرد","members":"الفريق","membersPanel":"لوحة الفريق","moderator":"المنسّق","noMembers":"لا يوجد أعضاء في الفريق","noSessions":"لا توجد جلسات بعد","phase":"المرحلة","pin":"تثبيت الرد","removeAttachment":"إزالة المرفق","running":"قيد التنفيذ","runningHint":"لا يزال هذا النقاش جارياً — تظهر الردود الجديدة تلقائياً.","send":"إرسال","sessions":"الجلسات","sessionsPanel":"لوحة الجلسات","skipped":"{{name}} — تم التخطي","startingDescription":"فريق المهام يعمل على ذلك — ستظهر الردود هنا فور ورودها.","startingTitle":"النقاش قيد التنفيذ","stillDiscussing":"لا يزال فريق المهام يناقش…","stop":"إيقاف","synthesis":"التركيب","synthesisResult":"نتيجة التركيب","title":"فريق المهام","toggleConfig":"تبديل لوحة التفاصيل","unpin":"إلغاء تثبيت الرد","untitled":"بدون عنوان","viewSessions":"عرض الجلسات السابقة"},"thread":{"fileTooLarge":"يجب أن يكون الملف أقل من 20 ميغابايت","fileTypeNotAllowed":"نوع الملف هذا غير مدعوم","attachmentLimit":"الحد الأقصى {{max}} مرفقات لكل رسالة","notForwarded":"تم تخزين الملف لكنه كبير جداً للنموذج","uploadFailed":"فشل الرفع: {{error}}","noResponse":"لا توجد استجابة","attachFile":"إرفاق ملف","emptySubtitle":"أرسل رسالة لبدء المحادثة مع {{name}}.","emptyTitle":"محادثة مع {{name}}","followUp":"متابعة لردّك…","fromSession":"من جلسة {{boardName}}","placeholder":"اكتب رسالة…","questionLabel":"السؤال","removeAttachment":"إزالة المرفق","responseLabel":"الرد","send":"إرسال","sendError":"عذراً، حدث خطأ. يرجى المحاولة مرة أخرى.","startingConversation":"جارٍ بدء المحادثة…","toggleContext":"تبديل السياق","placeholderNamed":"رسالة إلى {{name}}…"},"chat":{"agentDetails":"تفاصيل الوكيل","selectToView":"حدد وكيلاً لعرض التفاصيل","hideDetails":"إخفاء التفاصيل","editAgent":"تعديل الوكيل","auditLogs":"سجلات المراجعة","openStudio":"فتح في المدير","triggers":"عرض المشغلات","starterSelected":"تمت إفادة الإدخال بالموجه","title":"محادثة","hideAgentDetails":"إخفاء تفاصيل الوكيل","showAgentDetails":"عرض تفاصيل الوكيل"},"agentEditor":{"capabilities":"القدرات","workflows":"سير العمل","features":"الميزات والأمان","a2aEnabled":"وكيل إلى وكيل","memoryTools":"أدوات الذاكرة","signedMessages":"الرسائل الموقعة","strictMemory":"ذاكرة صارمة","hitlMode":"وضع الموافقة","llmConfig":"النموذج ومحرك LLM","provider":"خط الأنابيب","mode":"وضع التنفيذ","personaPrompt":"موجه الشخصية","starters":"مقبلات المحادثة","channels":"موصلات القنوات","temperature":"درجة الحرارة","contextWindow":"حد السياق","activeTools":"الأدوات النشطة","noLlm":"لم يتم تكوين LLM","noTools":"لم يتم التكوين","add":"إضافة","addCapability":"إضافة قدرة","cancel":"إلغاء","close":"إغلاق","confidence":"الثقة","confidenceHigh":"عالية","confidenceLow":"منخفضة","confidenceMedium":"متوسطة","description":"الوصف","descriptionPlaceholder":"صف خبرة هذا الوكيل…","discardChanges":"لديك تغييرات غير محفوظة. هل تريد تجاهلها؟","loadError":"فشل تحميل بيانات الوكيل.","noCapabilities":"لا توجد قدرات معرّفة.","removeCapability":"إزالة القدرة","retry":"إعادة المحاولة","save":"حفظ التغييرات","saveError":"فشل حفظ التغييرات","saveSuccess":"تم تحديث الوكيل بنجاح","settings":"الإعدادات","skill":"المهارة","skillPlaceholder":"مثال: التلخيص","systemPrompt":"مطالبة النظام","systemPromptPlaceholder":"تعليمات تحدّد سلوك هذا الوكيل وشخصيته وخبرته…","title":"تعديل الوكيل"},"settings":{"hitlApprovalPointsNote":"تتحكم هذه الإعدادات في كيفية عمل الموافقة. أما نقاط المناقشة التي تتطلب موافقة فيتم تكوينها لكل مرحلة في الـ Manager.","hitlOpenManager":"تحديد نقاط الموافقة","deliberation":"جودة التداول","deliberationDesc":"تسجيل آراء الأقلية والسماح للأعضاء بإنشاء العمل الذي يكتشفونه أثناء النقاش","recordDissents":"تسجيل تقرير الأقلية","recordDissentsDesc":"بعد كل تلخيص، يحصل كل عضو لم يكتبه على دور قصير ليبيّن مواضع اعتراضه المتبقية. يكلّف نداءً إضافيًا لكل عضو.","agentFiledTasks":"السماح للأعضاء بإنشاء مهامهم","agentFiledTasksDesc":"العمل الذي يكتشفه الوكيل أثناء النقاش يصبح مهمة فعلية تلتقطها موجة التنفيذ التالية. عند الإيقاف لا توجد الأدوات لهذه المجموعة أصلًا.","maxTasksPerDiscussion":"أقصى مهام مُنشأة / نقاش","maxTasksPerDiscussionHelp":"يحتسب المهام التي ينشئها الوكلاء فقط، حتى لا يستنفده تراكم مخطَّط كبير.","maxTasksPerTurn":"أقصى مهام مُنشأة / دور","maxTasksPerTurnHelp":"يحدّ من دور منفلت؛ أما سقف النقاش فيحدّ من الانحراف البطيء.","maxCost":"سقف التكلفة (دولار)","maxCostUnlimited":"بلا حد","maxCostHelp":"اتركه فارغًا لعدم وجود حد. قد يتجاوز دورٌ جارٍ بالفعل السقف بقليل.","onCostExceeded":"عند بلوغ السقف","costSynthesize":"التلخيص الآن — القفز مباشرة إلى الخلاصة","costAbort":"إحباط — إفشال النقاش فورًا","costCeilingInvalid":"يجب أن يكون سقف التكلفة أكبر من 0. أفرغ الحقل لعدم وجود حد.","maxDelegationDepth":"أقصى عمق للتفويض","maxDelegationDepthHelp":"تفويض أ إلى ب ثم ب إلى ج هو عمق 2. تُرفض القفزة التي تتجاوز ذلك — وهذا ما يوقف دورة التفويض.","delegationTimeout":"مهلة التفويض (ثوانٍ)","delegationTimeoutHelp":"مدة انتظار الوكيل المفوِّض لمفوَّضه. ارفعها عندما ينفّذ المفوَّض أدوات أو نقاشًا متداخلًا.","allowedDelegationTargets":"قائمة السماح بالتفويض","allowedDelegationTargetsHint":"أي وكيل منشور","allowedDelegationTargetsHelp":"معرّفات وكلاء مفصولة بفواصل. اتركه فارغًا للسماح لأي وكيل منشور.","moderatorlessWarning":"مقصورة على منسّق لا تملكه فرقة العمل هذه: {{phases}}. سينوب عنه العضو الأول حسب ترتيب الكلام.","memberLimit":"يمكن أن تضم فرقة العمل {{max}} عضوًا كحد أقصى","explicitPhasesNote":"تحدّد فرقة العمل هذه مراحلها صراحةً ({{phases}})، فتُنفَّذ كما هي — ولم يعد النمط ولا عدد الجولات أعلاه يغيّر المسار.","explicitPhasesEdit":"تحرير المراحل","addMemberTitle":"إضافة عضو إلى الفريق","selectAgent":"الوكيل","pickAgent":"ابحث عن وكيل أو اختره…","displayName":"الاسم المعروض","displayNameHint":"مثال: محلل","role":"الدور","roleHint":"مثال: مُراجِع","addMember":"إضافة عضو","nameRequired":"اسم فريق العمل مطلوب","saveSuccess":"تم حفظ إعدادات فريق العمل","saveError":"تعذّر حفظ الإعدادات","deleteAllSuccess":"تم حذف فريق العمل وجميع الوكلاء","deleteError":"تعذّر حذف فريق العمل","deleteSuccess":"تم حذف فريق العمل","duplicateMember":"هذا الوكيل عضو بالفعل","loadError":"تعذّر تحميل الإعدادات","backToBoard":"العودة إلى فريق العمل","untitled":"فريق عمل بلا عنوان","subtitle":"اضبط إعدادات فريق العمل والقوى العاملة فيه","general":"الإعدادات العامة","generalDesc":"التهيئة الأساسية لفريق العمل","boardName":"اسم فريق العمل","boardNameHint":"أدخل اسم فريق العمل…","description":"الوصف","descriptionHint":"ما موضوع فريق العمل هذا؟","discussionStyle":"إطار التعاون","maxRounds":"الحد الأقصى للجولات","moderator":"المشرف","noModerator":"بدون","team":"القوى العاملة","teamDesc":"أدر الوكلاء المشاركين في فريق العمل","roleOptional":"اختياري","typeAgent":"وكيل","typeModerator":"مشرف","removeMember":"إزالة العضو","minMembers":"مطلوب عضوان على الأقل","protocol":"البروتوكول والمرونة","protocolDesc":"المهل وإعادة المحاولات ومعالجة الأعطال في التواصل بين الوكلاء","agentTimeout":"مهلة الوكيل (بالثواني)","maxRetries":"الحد الأقصى لإعادة المحاولة","onAgentFailure":"عند فشل الوكيل","failureSkip":"تخطٍّ — المتابعة بدون هذا الوكيل","failureRetry":"إعادة المحاولة — محاولة الوكيل مرة أخرى","failureAbort":"إحباط — إيقاف المناقشة بالكامل","onUnavailable":"عند عدم توفر العضو","unavailableSkip":"تخطٍّ — المتابعة بدونه","unavailableFail":"فشل — إيقاف المناقشة","maxTurns":"الحد الأقصى للأدوار (0 = بلا حد)","hitl":"الإشراف البشري","hitlDesc":"حدّد متى وكيف يراجع البشر قرارات الذكاء الاصطناعي","hitlGranularity":"دقة الموافقة","granularityPhase":"لكل مرحلة — المراجعة بعد كل مرحلة من المناقشة","granularityTask":"لكل مهمة — مراجعة كل مهمة على حدة","hitlTimeout":"مهلة الموافقة","hitlTimeoutHint":"مثال: PT15M (15 دقيقة)، PT1H (ساعة واحدة)","hitlTimeoutHelp":"مدة بصيغة ISO-8601. اتركها فارغة لإلغاء المهلة.","hitlTimeoutPolicy":"عند انتهاء المهلة","timeoutWait":"انتظار غير محدود","timeoutAutoApprove":"موافقة تلقائية","timeoutAutoReject":"رفض تلقائي","timeoutAbort":"إحباط المناقشة","hitlRejection":"عند الرفض","rejectionFail":"فشل — إيقاف المهمة","rejectionRetry":"إعادة المحاولة — الطلب من الوكيل المراجعة","dynamic":"وكلاء ديناميكيون","dynamicDesc":"السماح للوكلاء بتوظيف وكلاء آخرين أو إنشائهم أو التفويض إليهم أثناء المناقشات","dynamicEnable":"تفعيل الوكلاء الديناميكيين","dynamicEnableDesc":"السماح للوكلاء بتوظيف وكلاء آخرين أو إنشائهم أو التفويض إليهم","allowCreation":"السماح بالإنشاء","allowCreationDesc":"يمكن للوكلاء إنشاء وكلاء جدد عند الحاجة","allowRecruitment":"السماح بالتوظيف","allowRecruitmentDesc":"يمكن للوكلاء توظيف وكلاء منشورين بالفعل","allowDelegation":"السماح بالتفويض","allowDelegationDesc":"يمكن للوكلاء تفويض المهام الفرعية إلى وكلاء آخرين","maxCreated":"الحد الأقصى للإنشاء","maxRecruited":"الحد الأقصى للتوظيف","maxDelegations":"الحد الأقصى للتفويضات / مهمة","inheritModel":"وراثة نموذج الوكيل الأصل","inheritModelDesc":"يستخدم الوكلاء المُنشأون نموذج اللغة الخاص بالوكيل الأصل","lifecycle":"سياسة دورة الحياة","lifecycleEphemeral":"مؤقت — يُحذف بعد المناقشة","lifecycleKeep":"إبقاء منشور — يبقى بعد المناقشة","lifecycleUndeploy":"إلغاء النشر فقط — يتوقف دون حذف","lifecycleAgentDecides":"الوكيل يقرر — الوكيل يحدد مصيره بنفسه","tasks":"مهام مُعدّة مسبقاً","tasksDesc":"حدّد المهام مسبقاً ليتم تخطي مرحلة PLAN وينفّذ الوكلاء فوراً","taskSubject":"الموضوع","taskSubjectHint":"ما الذي يجب إنجازه؟","taskDescription":"الوصف","taskDescHint":"تعليمات مفصّلة لهذه المهمة…","taskAssignRole":"الإسناد إلى دور","taskPriority":"الأولوية","removeTask":"إزالة المهمة","addTask":"إضافة مهمة","dangerZone":"منطقة الخطر","dangerDesc":"إجراءات لا يمكن التراجع عنها — تابع بحذر","deleteBoard":"حل فريق العمل","deleteBoardDesc":"إزالة إعدادات فريق العمل هذا. سيبقى الوكلاء كما هم.","deleteBoardAll":"حل فريق العمل + جميع الوكلاء","deleteBoardAllDesc":"إزالة فريق العمل هذا وجميع الوكلاء الأعضاء نهائياً.","unsavedChanges":"لديك تغييرات غير محفوظة","templateSaved":"تم الحفظ كقالب","saveAsTemplate":"الحفظ كقالب","saving":"جارٍ الحفظ…","saveChanges":"حفظ التغييرات","deleteAllTitle":"حل فريق العمل وجميع الوكلاء؟","deleteTitle":"حل فريق العمل؟","deleteAllConfirm":"سيؤدي ذلك إلى حل فريق العمل هذا نهائياً وإزالة جميع الوكلاء الأعضاء فيه. لا يمكن التراجع عن هذا الإجراء.","deleteConfirm":"سيؤدي ذلك إلى حل إعدادات فريق العمل هذا نهائياً. لن يتأثر الوكلاء الأعضاء.","title":"الإعدادات"},"nav":{"dashboard":"لوحة التحكم","templates":"القوالب"},"advisor":{"avatarLabel":"صورة {{name}} الرمزية"},"analytics":{"agentPerformance":"أداء الوكيل","avgLength":"متوسط الطول","avgLengthChars":"{{count}} حرفاً","chatWithAgent":"محادثة مع الوكيل","compareAgent":"مقارنة مع…","contributionBreakdown":"تفصيل المساهمات","contributions":"المساهمات","editAgent":"تعديل الوكيل","errorRate":"معدل الأخطاء","errors":"الأخطاء","sessions":"الجلسات"},"back":"رجوع","boardList":"قائمة فرق المهام","boardsLabel":"فرق المهام","bottomNav":"التنقل السفلي","card":{"advisorCount":"{{count}} خبيراً","delete":"حذف","duplicate":"تكرار","duplicated":"تم تكرار فريق المهام","history":"السجل","live":"مباشر","moreActions":"إجراءات إضافية","noMembers":"لا يوجد خبراء","openSettings":"فتح الإعدادات","pin":"تثبيت","settings":"الإعدادات","unpin":"إلغاء التثبيت","untitled":"فريق مهام بدون عنوان"},"closeSidebar":"إغلاق الشريط الجانبي","comparison":{"avgResponse":"متوسط الرد","close":"إغلاق","contributions":"المساهمات","errorRate":"معدل الأخطاء","evenlyMatched":"الوكيلان متكافئان","leadsIn":"يتقدّم في {{count}} من أصل 5 مقاييس","sessions":"الجلسات","title":"مقارنة الوكلاء","totalContent":"إجمالي المحتوى"},"dashboard":{"assembleTaskForce":"تشكيل فريق مهام","cancel":"إلغاء","deleteConfirm":"هل تريد بالتأكيد حلّ فريق المهام هذا؟ لا يمكن التراجع عن هذا الإجراء.","deletedCount":"تم حذف {{count}} من فرق المهام","deleteError":"فشل حذف فريق المهام","deletePartialFail":"{{success}} تم حذفها، {{fail}} فشلت","deleteSelected":"حذف","deleteSuccess":"تم حذف فريق المهام","deleteWorkforce":"حلّ فريق المهام","deselect":"إلغاء التحديد","duplicateError":"فشل تكرار فريق المهام","gridView":"عرض شبكي","listView":"عرض قائمة","loadError":"تعذّر تحميل مساحة العمل. يرجى المحاولة مرة أخرى.","pinned":"مثبّت","retry":"إعادة المحاولة","select":"تحديد","selected":"{{count}} محدَّد","selectItem":"تحديد","subtitle":"مجموعات وكلاء تعاونية تحلّ التحديات المعقّدة.","taskForcesLabel":"فرق المهام النشطة","title":"فرق المهام النشطة","viewToggle":"وضع العرض"},"export":{"clipboard":"نسخ إلى الحافظة","copied":"تم النسخ إلى الحافظة","copyFailed":"فشل النسخ إلى الحافظة","downloadedJson":"تم التنزيل بصيغة JSON","downloadedMd":"تم التنزيل بصيغة Markdown","json":"تصدير بصيغة JSON","markdown":"تصدير بصيغة Markdown","title":"تصدير النقاش"},"history":{"backToBoard":"العودة إلى فريق المهام","backToList":"العودة إلى القائمة","cancel":"إلغاء","close":"إغلاق","confirmDelete":"حذف","conversationList":"قائمة المحادثات","delete":"حذف المحادثة","deleteDescription":"هل تريد بالتأكيد حذف هذه المحادثة؟ لا يمكن التراجع عن هذا الإجراء.","deleteTitle":"حذف المحادثة","emptyTranscript":"لا توجد إدخالات في النص بعد","entryCount":"{{count}} إدخالاً","error":"خطأ","export":"تصدير","finalAnswer":"الإجابة النهائية المركّبة","loadError":"فشل تحميل المحادثة","loadMore":"تحميل المزيد","noContent":"لا يوجد محتوى","noConversations":"لا توجد محادثات بعد","noResults":"لا توجد محادثات تطابق بحثك","notFound":"لم يتم العثور على المحادثة","phase":"المرحلة","searchPlaceholder":"البحث في المحادثات…","selectConversation":"اختر محادثة لعرضها","selectHint":"اختر محادثة من القائمة","skipped":"{{name}} — تم التخطي","synthesis":"التركيب","title":"سجل المحادثات","transcript":"نص المحادثة","tryDifferent":"جرّب مصطلح بحث آخر","untitled":"محادثة بدون عنوان","loadListError":"فشل تحميل المحادثات"},"insights":"الرؤى","memberCount":"{{count}} عضواً","newBoard":"تشكيل فريق مهام","onboarding":{"advisorSlots":"{{count}} من مقاعد المستشارين","agentsReady":"{{count}} جاهز","assembleNow":"شكّل أول فريق مهام لك","customDesc":"حدّد فريقك وقواعدك الخاصة","customFromScratch":"البناء من الصفر","deployAgent":"نشر وكيل","deployFirst":"انشر أول وكيل ذكاء اصطناعي للبدء","deployFirst2":"انشر الأول ←","deployFirstDesc":"الوكلاء هم الخبراء الذين يشغّلون فرق المهام. أنشئ واحداً للبدء.","getStarted":"ابدأ الآن","howItWorks":"كيف يعمل","pickTemplate":"اختر قالباً للبدء","pickTemplateDesc":"كل قالب يضبط أسلوب النقاش والأدوار والقواعد — كل ما عليك هو تعيين الوكلاء.","step1Desc":"أنشئ خبراء ذكاء اصطناعي بمهارات ومعارف وشخصيات فريدة.","step1Title":"نشر الوكلاء","step2Desc":"اختر قالباً، وعيّن الوكلاء للأدوار، واختر أسلوب النقاش.","step2Title":"تشكيل فريق مهام","step3Desc":"اطرح سؤالاً وشاهد وكلاءك يناقشون وينتقدون ويركّبون إجابة.","step3Title":"اسأل وشاهد","subtitle":"اجمع وكلاء ذكاء اصطناعي متخصّصين في فرق تعاونية تناقش وتحلّل وتحلّ التحديات المعقّدة معاً.","welcome":"مرحباً بك في فريق العمل"},"openMenu":"فتح القائمة","shortcuts":{"closePanel":"إغلاق اللوحة / مربع الحوار","fromDashboard":"من لوحة التحكم","newBoard":"تشكيل فريق مهام","showHelp":"عرض اختصارات لوحة المفاتيح","title":"اختصارات لوحة المفاتيح"},"sidebar":{"boards":"التنقل بين اللوحات"},"sidebarDrawer":"التنقل في الشريط الجانبي","skipToContent":"تخطّي إلى المحتوى","tabHome":"الرئيسية","tabInsights":"الرؤى","tabThreads":"المحادثات","templates":{"deleteConfirm":"حذف هذا القالب؟","deleted":"تم حذف القالب"},"templatesEmpty":"احفظ فريق مهام كقالب لإعادة إنشائه بسرعة لاحقاً.","themeDark":"داكن","themeLight":"فاتح","themeSystem":"النظام","toggleSidebar":"تبديل الشريط الجانبي","toggleTheme":"تبديل السمة","untitled":"بدون عنوان","useTemplate":"استخدام","wizard":{"addAdvisor":"إضافة مستشار","advisorCount":"{{count}} مستشاراً","advisorName":"اسم المستشار","agentError":"فشل إنشاء {{name}}: {{error}}","apiKey":"مفتاح API","back":"رجوع","boardDescPlaceholder":"صف بإيجاز الغرض من هذا المجلس الاستشاري…","boardDescription":"الوصف (اختياري)","boardName":"اسم فريق العمل","boardNamePlaceholder":"مثال: مجلس استراتيجية المنتج","cancel":"إلغاء","collapse":"طيّ","createNew":"إنشاء مستشار جديد","createWorkforce":"إنشاء فريق العمل","creatingAgent":"جارٍ الإنشاء…","creationFailed":"فشل الإنشاء","creationFailedDesc":"حدث خطأ ما. يمكنك إعادة المحاولة وسيُستأنف من حيث توقّف.","customTemplate":"مخصّص","customTemplateDesc":"ابدأ من الصفر بإعدادك الخاص","error":"فشل","existing":"موجود","expand":"توسيع","groupError":"فشل تشكيل فريق المهام: {{error}}","model":"النموذج","modelPlaceholder":"مثال: claude-sonnet-5","new":"جديد","next":"التالي","pending":"في الانتظار…","personality":"الشخصية والخبرة","personalityPlaceholder":"صف خبرة هذا المستشار ووجهة نظره وأسلوب تواصله…","provider":"مزوّد نماذج اللغة","ready":"جاهز","removeAdvisor":"إزالة المستشار","role":"الدور","selectAgent":"اختيار وكيل","selectProvider":"اختر مزوّداً…","settingUp":"جارٍ إعداد فريق العمل…","settingUpBoard":"جارٍ تشكيل فريق المهام…","settingUpDesc":"جارٍ إنشاء المستشارين وضبط اللوحة. قد يستغرق هذا لحظة.","stepIndicatorLabel":"تقدّم المعالج","stepReview":"المراجعة","stepTeam":"الفريق","stepTemplate":"القالب","success":"تم تشكيل فريق المهام بنجاح!","team":"الفريق","templates":"قوالب النقاش","tryAgain":"إعادة المحاولة","unnamed":"بدون اسم","untitled":"لوحة بدون عنوان","useExisting":"استخدام وكيل موجود","yourAdvisors":"مستشاروك"},"workforce":"فريق العمل"}'),Ce=JSON.parse('{"title":"مُشغّل المنصة","subtitle":"اسأل عن نشر EDDI هذا — سيبحث عن الإجابات نيابةً عنك.","readOnlyChip":"للقراءة فقط","readWriteChip":"قراءة وكتابة","configError":"تعذّر تحميل إعدادات المُشغّل","empty":{"title":"مُشغّل المنصة معطّل","description":"فعّله للدردشة مع وكيل يمكنه فحص وكلائك وسير العمل والمحادثات وعمليات النشر والسجلات — وتشغيلها نيابة عنك بموافقتك على كل تغيير.","action":"تفعيل مُشغّل المنصة"},"discovery":{"title":"تعرّف على مُشغّل المنصة","description":"مساعد يفحص هذا النشر ويشغّله. متوقف افتراضيًا؛ كل تغيير يتوقف بانتظار موافقتك.","action":"تفعيل"},"activation":{"title":"تفعيل مُشغّل المنصة","subtitle":"اختر النموذج الذي سيشغّل المُشغّل، وراجع تعليماته، ثم انشره.","modelStep":"النموذج","reviewStep":"التعليمات والمراجعة","provider":"المزوّد","model":"النموذج","baseUrl":"عنوان URL الأساسي","apiKey":"مفتاح API الخاص بالنموذج","apiKeyHint":"مفتاح مزوّد النموذج اللغوي لديك. هذا ليس بيانات اعتماد خاصة بـ EDDI.","apiKeyPlaceholder":"الصق مفتاح API أو اختر مفتاحًا من الخزنة","vaultDown":"خزنة الأسرار غير متاحة، لذا لا يمكن تخزين المفاتيح فيها الآن. المفتاح المُدخل هنا يُمرَّر إلى الخادم الخلفي الذي يخزّنه في الخزنة إن أمكنه ذلك.","environment":"البيئة","authMode":"كيفية مصادقة المُشغّل","authModeHint":"يستدعي المُشغّل واجهة إدارة EDDI لديك. هذا يحدّد بيانات الاعتماد التي تحملها تلك الاستدعاءات.","authNoneBlocked":"المصادقة مُفعّلة في هذا النشر، لذا سيتم رفض استدعاءات الأدوات غير المُصادَق عليها. سيُنشر المُشغّل بنجاح ثم يفشل في كل عملية بحث. اختر بدلاً من ذلك «هويتك».","scope":{"label":"الصلاحية","default":"افتراضي","hint":"ما يُسمح للمُشغّل بفعله. كل عملية كتابة تظل بانتظار موافقتك — انظر قواعد الأمان أدناه.","readOnly":{"label":"للقراءة فقط","description":"يمكنه فحص هذا النشر وشرحه. لا يمكنه تغيير أي شيء."},"readWrite":{"label":"قراءة وكتابة","description":"يتيح له أيضًا إنشاء وتعديل الوكلاء ومجموعات الوكلاء والنشر وإلغاء النشر وتعطيل جدول زمني خارج عن السيطرة وتعديل وصف أحد الوكلاء — كل ذلك بانتظار موافقتك أولًا."},"writeWarning":"يتحقق التفعيل من بوابة الموافقة مقابل السياسة المخزنة قبل اكتماله. ثم تُنفَّذ عملية كتابة اختبارية حقيقية وغير ضارة في الخلفية — إذا نُفِّذت يومًا دون التوقف للموافقة، يُزال المشغّل فورًا."},"safetyPreamble":"قواعد الأمان (غير قابلة للتعديل)","safetyPreambleHint":"تُضاف دائمًا في البداية، وتوجّه المُشغّل إلى التعامل مع كل ما تُرجعه أدواته كبيانات غير موثوقة.","promptBody":"تعليمات المُشغّل","promptBodyHint":"عدّل طريقة تعريف المُشغّل بنفسه وأسلوب عمله.","tools":"الأدوات التي ستُمنح له ({{toolCount}})","activate":"تفعيل ونشر","callerIdentityNote":"يُدرج EDDI رمزك عند إجراء الاستدعاء فقط. لا يُخزَّن مطلقًا في المحادثة، ولا يُرسَل إلا إلى هذا النشر.","rebuildWarning":"يؤدي الحفظ إلى إنشاء وكيل مُشغّل جديد وإزالة الحالي. لن تُنقل محادثة المُشغّل الحالية.","environmentHint":"المكان الذي يعمل فيه وكيل المُشغّل نفسه. ولا يزال بإمكانه قراءة أي بيئة."},"authMode":{"none":{"label":"بدون بيانات اعتماد","description":"لا تحمل استدعاءات الأدوات ترويسة Authorization. يعمل فقط عندما تكون المصادقة معطّلة في نشر EDDI هذا."},"caller-identity":{"label":"هويتك","description":"تُنفَّذ استدعاءات الأدوات باسم المستخدم المسجّل دخوله، بصلاحياته وسجل تدقيقه. مطلوب عند تفعيل المصادقة."}},"stage":{"idle":"","validating":"يجري التحقق من أن هذا النشر يوفّر نقاط النهاية التي يحتاجها المُشغّل…","provisioning":"يجري إنشاء وكيل المُشغّل…","resolving-version":"يجري تحديد إصدار الوكيل…","saving":"يجري حفظ الإعدادات…","verifying-gate":"جارٍ التحقق من بوابة الموافقة…","done":"تم","longWait1":"يجري إنشاء وكيل المشغّل ونشره — هذه أطول خطوة…","longWait2":"يجري إعداد الأدوات وبوابة الموافقة على الوكيل الجديد…","longWait3":"العمل مستمر — قد يستغرق النشر بعض الوقت على منصة مشغولة…"},"status":{"title":"المُشغّل","provider":"المزوّد","environment":"البيئة","authMode":"يُصادَق باسم","version":"الإصدار","checking":"يجري التحقق…","ready":"منشور","inProgress":"يجري النشر…","error":"خطأ في النشر","notFound":"غير منشور","errorHelp":"فشل نشر وكيل المُشغّل. أعد ضبطه للمحاولة مجددًا، أو راجع سجلات المنصة لمعرفة الخطأ الأساسي.","reconfigure":"إعادة الضبط","deactivate":"إلغاء التفعيل","reset":"حذف المُشغّل","deactivateConfirmTitle":"إلغاء تفعيل مُشغّل المنصة؟","deactivateConfirmBody":"سيُزال المُشغّل من النشر ويتوقف عن الاستجابة. تُحفظ إعداداته حتى تتمكن من تفعيله لاحقًا.","resetConfirmTitle":"حذف مُشغّل المنصة؟","resetConfirmBody":"سيُحذف وكيل المُشغّل وجميع الموارد التي أُنشئت له نهائيًا، إضافةً إلى إعداداته المحفوظة. لا يمكن التراجع عن هذا الإجراء.","connectionCheck":"فحص الاتصال","gateChecking":"جارٍ التحقق من البوابة…","gateUnknown":"لم يتم فحص البوابة","gateVerified":"تم التحقق من البوابة","gateNotVerified":"لم يتم التحقق من البوابة","gateUnverifiedHelp":"تعذّر التحقق من بوابة الموافقة في مستند هذا الوكيل."},"chat":{"empty":"اسأل عن نشرك. يبحث المُشغّل عن الإجابات ويعرض لك كل استدعاء يقوم به.","restoring":"جارٍ فتح تلك المحادثة…","placeholder":"اسأل عن الوكلاء والمحادثات وعمليات النشر والسجلات…","pausedPlaceholder":"بانتظار قرار أعلاه قبل أن يتمكن المشغّل من المتابعة…","readOnlyPlaceholder":"انتهت هذه المحادثة — ابدأ محادثة جديدة للمتابعة.","send":"إرسال","stop":"إيقاف","newConversation":"بدء محادثة جديدة","transcript":"محادثة المُشغّل","pauseCompactFallback":"يحتاج المشغّل إلى موافقتك قبل المتابعة.","pauseCompactReview":"مراجعة للموافقة →","resolving":"جارٍ تنفيذ الخطوة المعتمدة — قد يستغرق ذلك لحظة…"},"drawer":{"title":"مُشغّل المنصة","notActivated":"فعّله للدردشة مع نشرك من أي مكان.","titleAwaiting":"مُشغّل المنصة — قرار بانتظارك","activate":"إعداد مُشغّل المنصة"},"approval":{"reconstructedEndpoint":"{{method}} {{path}} (معاد إنشاؤه)","verified":"موثّق","verifiedTitle":"تم استخلاصه من إعدادات استدعاء واجهة برمجة التطبيقات الفعلية؛ يُعاد التحقق منه مباشرة قبل التنفيذ — إذا تغيّر الطلب قبل ذلك، يُرفض التنفيذ.","previewOnly":"معاينة","previewOnlyTitle":"ينفّذ هذا الاستدعاء خطوات إعداد إضافية قبل التنفيذ، لذا فهذه معاينة اجتهادية — قد يختلف الطلب الفعلي ولا يُعاد التحقق منه قبل التنفيذ.","query":"معطيات الاستعلام","headers":"الترويسات","bodyTruncated":"يُعرض المحتوى مقتطعًا للعرض فقط — لا تزال الموافقة تشمل الطلب كاملًا.","diffHeading":"التغييرات مقارنةً بالإصدار المخزَّن {{version}}","diffLoading":"جارٍ تحميل الإصدار المخزَّن للمقارنة…","diffFailed":"تعذّر تحميل الإصدار المخزَّن للمقارنة — المستند المقترح كاملًا موجود أدناه.","diffForbidden":"تتطلب المقارنة مع الإصدار المخزَّن صلاحية محرّر — المستند المقترح كاملًا موجود أدناه.","diffRedactionNote":"قيم بيانات الاعتماد مخفيّة في الإصدار المقترح، لذا تظهر هنا كتغييرات حتى لو لم تتغير.","showFullRequest":"عرض المستند المقترح كاملًا","hideFullRequest":"إخفاء المستند المقترح كاملًا","expandBody":"توسيع","escalation":{"heading":"يمنح هذا الطلب صلاحيات إضافية","dynamicAgentCreation":"قد تنشئ هذه المجموعة وكلاء جددًا أثناء تشغيلها، وهؤلاء الوكلاء أنفسهم لا يخضعون لبوابة موافقة.","dynamicAgentRecruitment":"قد تضم هذه المجموعة وكلاء آخرين موجودين إلى نقاشاتها.","autoApproveOnTimeout":"تُمنح الموافقات على هذا المورد تلقائيًا عند انتهاء المهلة، دون إشراف أحد.","agentCreatedWithoutGate":"يتم إنشاء هذا الوكيل بدون بوابة موافقة. ستُنفَّذ كل عملية كتابة يقوم بها لاحقًا دون إشراف.","agentCreatedWithBroadEndpoints":"يتم إنشاء هذا الوكيل بصلاحية كتابة على واجهة برمجة التطبيقات الخاصة به — وليس مقتصرًا على القراءة.","agentCreatedWithExternalTools":"يتم إنشاء هذا الوكيل بجميع الأدوات التي يوفّرها خادم MCP خارجي. وهذا الخادم هو من يحدّد ماهية هذه الأدوات، ويمكنه تغييرها لاحقًا.","unchecked":"كان المحتوى أطول من أن يُفحص بحثًا عن منح صلاحيات إضافية — اقرأه كاملًا قبل الموافقة.","inlineCredential":"يتضمّن هذا الطلب ما يشبه بيانات اعتماد مكتوبة حرفيًا بدلًا من مرجع ${vault:…}. السر المكتوب مباشرة يُخزَّن كنص صريح ولا يمكن تدويره من الخزنة — ارفض واطلب مرجع الخزنة."},"blockedSelfTarget":"لا يجوز للوكيل تعديل تعريفه الخاص، وهذا الطلب يستهدف وكيل المشغّل نفسه ({{agentId}}). ولا يمكن الموافقة على الدفعة بأكملها ما دام موجودًا — ارفضه وأجرِ هذا التغيير من صفحة ذلك الوكيل.","blockedSelfConversation":"لا يجوز للوكيل إرسال رسالة إلى المحادثة التي يعمل داخلها، وهذا الطلب يستهدف هذه المحادثة ({{agentId}}). سيؤدي ذلك إلى كتابة نصه الخاص كما لو أن إنسانًا قاله. ولا يمكن اعتماد الدفعة بأكملها ما دام موجودًا — يُرجى رفضه.","blockedGateCarrying":"يكتب هذا الطلب إعداد LLM يحدّد بوابة الموافقة الخاصة به (toolApprovals)، وهو ما سيحل محل البوابة التي تراجعه. تتعذّر الموافقة على الدفعة بأكملها ما دام موجودًا — ارفضه وغيّر البوابة من صفحة الوكيل نفسه.","blockedGateUnverifiable":"يكتب هذا الطلب إعداد LLM يتعذّر قراءة محتواه بالكامل — إما لأنه أكبر من أن يُعرض أو لأنه ليس JSON صالحًا — لذا لا يمكن التأكد من خلوّه من تجاوز بوابة الموافقة. تتعذّر الموافقة على الدفعة بأكملها ما دام موجودًا — ارفضه وأجرِ هذا التغيير من صفحة الوكيل نفسه.","blockedGateUnpinned":"يكتب هذا الطلب إعداد LLM لكنه غير مثبَّت، لذا قد يختلف ما يُنفَّذ فعليًا عمّا هو معروض هنا ولا يمكن التأكد من خلوّه من تجاوز بوابة الموافقة. تتعذّر الموافقة على الدفعة بأكملها ما دام موجودًا — ارفضه وأجرِ هذا التغيير من صفحة الوكيل نفسه.","blockedSelfStart":"لا يمكن للمشغّل اختبار نفسه — بدء محادثة مع وكيله الخاص ({{agentId}}) سيعيد مخرجاته كمدخلات. الموافقة غير متاحة للدفعة بأكملها أثناء وجود هذا الطلب — ارفض واختبر وكيلاً آخر."},"starters":{"whatsDeployed":"ما المنشور حاليًا؟","recentConversations":"اعرض لي أحدث المحادثات","healthCheck":"هل هناك خلل في هذه المنصة؟","diagnoseAgent":"لماذا يفشل نشر أحد وكلائي؟"},"toast":{"activated":"تم تفعيل مُشغّل المنصة","deactivated":"تم إلغاء تفعيل مُشغّل المنصة","reset":"تم حذف مُشغّل المنصة","activatedButUnreachable":"تم نشر المُشغّل، لكنه لم يتمكن من قراءة منصتك","activatedGateVerified":"تم تفعيل مشغّل المنصة — تم التحقق من بوابة الموافقة. تعمل فحوصات الاتصال في الخلفية.","activatedChecking":"تم تفعيل مشغّل المنصة. تعمل فحوصات الاتصال في الخلفية.","writeProbeVerified":"تم التحقق من صلاحية الكتابة — توقفت عملية كتابة حقيقية محمية للموافقة.","writeProbeFailed":"لم تصمد بوابة الموافقة — تمت إزالة المشغّل.","writeProbeInconclusive":"كان اختبار الكتابة المباشر غير حاسم."},"canary":{"genericFailure":"لم ينجح فحص الاتصال.","passed":"المُشغّل يصل إلى منصتك.","recheck":"إعادة الفحص","title":"تم نشر المُشغّل، لكنه لم يتمكن من قراءة منصتك."},"paused":{"title":"مُشغّل المنصة متوقف مؤقتًا","description":"لا يزال مُعدًّا — عند إعادة تشغيله يُنشر الوكيل نفسه من جديد. لم يُحذف أي شيء.","action":"إعادة التشغيل"},"managedAgentBadge":"المُشغّل","managedAgentHint":"يُنشأ ويُدار من شاشة مُشغّل المنصة. تعديله أو حذفه من هنا سيُعطّل تلك الشاشة.","decisionLog":{"approved":"لقد وافقت على هذا الطلب","rejected":"لقد رفضت هذا الطلب","rePaused":"تم الإيقاف مؤقتًا مرة أخرى — يلزم قرار آخر","noReply":"انتهت الجولة دون رد","executed":"تم تنفيذ {{calls}}","partial_one":"تمت الموافقة — تم رفض استدعاء واحد","partial_other":"تمت الموافقة — تم رفض {{count}} استدعاءات","partial_zero":"تمت الموافقة — تم رفض {{count}} استدعاءات","partial_two":"تمت الموافقة — تم رفض {{count}} استدعاءات","partial_few":"تمت الموافقة — تم رفض {{count}} استدعاءات","partial_many":"تمت الموافقة — تم رفض {{count}} استدعاءات"},"tabs":{"label":"عروض المشغّل","chat":"محادثة","history":"السجل"},"history":{"emptyTitle":"لا توجد محادثات سابقة","emptyDescription":"تظهر محادثاتك مع المشغّل هنا لتتمكن من متابعتها لاحقًا.","noOpeningMessage":"(لا توجد رسالة بعد)","stepCount_one":"خطوة واحدة","stepCount_other":"{{count}} خطوة","stepCount_zero":"{{count}} خطوة","stepCount_two":"خطوتان","stepCount_few":"{{count}} خطوات","stepCount_many":"{{count}} خطوة"}}'),ke={addCadence:"إضافة وتيرة",addTask:"إضافة مهمة",backToGroup:"العودة إلى المجموعة",backlogEmpty:"لا توجد مهام معلّقة بعد.",backlogTitle:"المهام المعلّقة ({{count}})",cadenceAdded:"تمت إضافة الوتيرة",cadenceDeleted:"تم حذف الوتيرة",cadenceRunning:"هناك نقاش ناتج عن الوتيرة قيد التنفيذ حاليًا.",cadencesEmpty:"لم يتم تكوين أي وتيرة متكررة بعد.",cadencesTitle:"الوتيرات ({{count}})",confirmDeleteCadenceDesc:"هذا يوقف عمليات التشغيل المجدولة الخاصة بها. لا يؤثر ذلك على النقاشات التي تمت بالفعل.",confirmDeleteCadenceTitle:"هل تريد حذف هذه الوتيرة؟",createdBy:"بواسطة {{who}}",cronLabel:"تعبير Cron",cronPlaceholder:"مثل 0 9 * * MON",discussions:"النقاشات",failed:"فشل",inputTemplatePlaceholder:"قالب المطالبة لكل تشغيل (اختياري — وإلا فسيتم استخدام قائمة بسيطة للمهام المعلّقة)",lastRun:"آخر تشغيل",maxCostLabel:"أقصى تكلفة / تشغيل ($، اختياري)",maxCostPlaceholder:"الإعداد الافتراضي للمجموعة",maxPerRunLabel:"أقصى عدد مهام / تشغيل",member:"العضو",navLabel:"مساحة العمل",never:"أبدًا",perMemberStats:"الموثوقية لكل عضو",priority:"الأولوية",subtitle:"قائمة مهام دائمة ووتيرات متكررة تشغّلها هذه المجموعة دون إشراف، وفق جدول زمني.",taskAdded:"تمت إضافة المهمة إلى قائمة المهام المعلّقة",taskDescriptionPlaceholder:"الوصف (اختياري)",taskSubjectPlaceholder:"موضوع المهمة",tasksVerified:"المهام التي تم التحقق منها",timeZoneLabel:"المنطقة الزمنية",title:"مساحة عمل الفريق الدائم",totalCost:"التكلفة الإجمالية",verified:"تم التحقق",maxCostInvalid:"يجب أن تكون التكلفة القصوى لكل تشغيل رقمًا يساوي 0 أو أكبر.",cadenceSummary_few:"حتى {{max}} مهام/تشغيل",cadenceSummary_many:"حتى {{max}} مهام/تشغيل",cadenceSummary_one:"حتى {{max}} مهمة/تشغيل",cadenceSummary_two:"حتى {{max}} مهام/تشغيل",cadenceSummary_zero:"حتى {{max}} مهام/تشغيل",cadenceSummary_other:"حتى {{max}} مهام/تشغيل",inputTemplateTooLong:"قالب المطالبة محدود بـ {{max}} حرفاً."},be={title:"فريق جديد"},we={title:"تحديثات EDDI",description:"تحقّق مما إذا كان هناك إصدار أحدث من EDDI. لا يُرسَل أي شيء حتى تطلب ذلك.",installed:"المثبَّت",githubRelease:"إصدار GitHub",dockerImage:"صورة Docker",unknownVersion:"غير معروف",checkNow:"تحقّق الآن",checking:"جارٍ التحقّق…",autoCheck:"التحقّق تلقائيًا عند كل تحميل للصفحة",autoCheckHint:"يُجري عملية تحقّق واحدة عند كل إعادة تحميل للمتصفح، ويعرض شريطًا عند توفّر إصدار أحدث.",privacyNote:"يتصل التحقّق بـ api.github.com فقط مباشرةً من متصفحك. لا تُرسَل أي بيانات عن النشر.",neverChecked:"لم يتم إجراء أي تحقّق بعد.",upToDate:"أنت تستخدم أحدث إصدار ({{version}}).",updateAvailable:"الإصدار EDDI {{version}} متاح",updateAvailableDetail:"أنت تستخدم {{installed}}.",ahead:"أنت تستخدم {{installed}}، وهو أحدث من آخر إصدار منشور ({{version}}).",unknownInstalled:"أحدث إصدار هو {{version}}. تعذّر تحديد الإصدار المثبَّت، لذا لا يوجد ما تتم مقارنته.",errorRateLimited:"تم بلوغ حدّ الطلبات غير المُوثَّقة في GitHub. حاول لاحقًا أو افتح صفحة الإصدارات.",errorBlockedByCsp:"تمنع سياسة أمان المحتوى (CSP) الخاصة بهذا التثبيت المتصفح من الوصول إلى api.github.com، لذا لا يمكن إجراء الفحص. أضف api.github.com إلى توجيه connect-src للسماح بذلك، أو استخدم رابط الإصدارات أدناه.",errorUnreachable:"تعذّر الوصول إلى api.github.com. تحقّق من الشبكة أو من الوكيل الصادر.",errorFailed:"فشل التحقّق من التحديثات. افتح صفحة الإصدارات للتحقّق يدويًا.",publishedOn:"نُشر في {{date}}",whatsNew:"الجديد في {{version}}",fullNotes:"ملاحظات الإصدار الكاملة على GitHub",noNotes:"لا توجد ملاحظات لهذا الإصدار.",releaseNotes:"ملاحظات الإصدار",allReleases:"كل الإصدارات",howToUpdate:"كيفية التحديث",howToUpdateCli:"باستخدام أداة eddi (التي ينشئها المثبِّت):",howToUpdateManual:"بدون الأداة، من دليل التثبيت (~/.eddi افتراضيًا):",howToUpdateNote:"عدِّل خيارات -f بما يناسب إعدادك — أضف -f docker-compose.auth.yml إذا كنت تستخدم Keycloak."},Ee={acrossGroups:"عبر {{count}} من فرق المهام",actions:"الإجراءات",activeExperts:"الخبراء النشطون",activity:"النشاط",agentLeaderboard:"لوحة صدارة الوكلاء",agentName:"الوكيل",allOutcomes:"جميع النتائج",allStyles:"جميع الأساليب",avgDuration:"متوسط المدة",cancelCompare:"إلغاء",clearAll:"مسح الكل",clearFilters:"مسح عوامل التصفية",completionRate:"معدل الإنجاز",contributions:"المساهمات",covered:"مغطّى",createFirst:"تشكيل فريق مهام",daysAgo:"قبل {{count}} يوم",emptyDescription:"ابدأ نقاش فريق مهام لعرض التحليلات هنا.",emptyHaveGroups:"لديك {{count}} من فرق المهام لكن لا توجد نقاشات بعد. ابدأ نقاشاً لعرض الرؤى.",emptyTitle:"لا توجد رؤى بعد",errorDescription:"تعذّر جلب بعض البيانات. يرجى المحاولة مرة أخرى.",errors:"الأخطاء",errorTitle:"تعذّر تحميل الرؤى",filteredOf:"{{filtered}} من أصل {{total}}",highConfidence:"ثقة عالية",hoursAgo:"قبل {{count}} ساعة",justNow:"الآن",last30Days:"آخر 30 يوماً",minutesAgo:"قبل {{count}} دقيقة",noAgents:"لا يوجد نشاط للوكلاء بعد.",noDiscussions:"لا توجد نقاشات بعد.",noMatchingDiscussions:"لا توجد نقاشات تطابق عوامل التصفية النشطة.",noPhases:"لا تتوفر بيانات مراحل.",noResults:"لا توجد نقاشات مطابقة",noResultsHint:"عدّل عوامل التصفية أو امسحها لعرض جميع البيانات.",noSkills:"لا توجد قدرات مسجّلة. حدّد مهارات لوكلائك لتتبّع التغطية.",noStyles:"لا تتوفر بيانات أساليب.",outcomeChart:"توزيع النتائج: {{total}} إجمالاً",outcomes:"النتائج",participatedRecently:"شاركوا في نقاشات",perDiscussion:"لكل نقاش",phaseChart:"توزيع المراحل",phaseDistribution:"توزيع المراحل",pickSecondAgent:"انقر على وكيل لمقارنته بـ {{name}}",recentDiscussions:"النقاشات الأخيرة",removeFilter:"إزالة عامل التصفية: {{label}}",retry:"إعادة المحاولة",sessions:"الجلسات",sessionsCompleted:"جلسة اكتملت بنجاح",showingResults:"{{count}} من أصل {{total}}",skillCoverage:"تغطية المهارات",styleBreakdown:"أساليب النقاش",subtitle:"آخر 30 يوماً",title:"الرؤى",total:"الإجمالي",totalDiscussions:"النقاشات",totalSkills:"المهارات",uncoveredSkills:"{{count}} مهارة غير مغطّاة"},Me={activeRate:"معدل النشاط",activeRateDesc:"الوكلاء النشطون خلال آخر 30 يوماً",dormantAgents:"خاملون",dormantAgentsDesc:"وكلاء لم يُستخدموا منذ أكثر من 30 يوماً",msgAtRisk:"معظم فريق عملك خامل — فكّر في إشراكهم",msgHealthy:"{{rate}}٪ من فريق عملك الرقمي كان نشطاً خلال آخر 30 يوماً",msgModerate:"لم تتم استشارة بعض الخبراء الرقميين مؤخراً",statusAtRisk:"في خطر",statusHealthy:"سليم",statusModerate:"متوسط",taskForces:"فرق المهام",taskForcesDesc:"مجموعات وكلاء تعاونية",title:"صحة المعرفة",workforceSize:"حجم فريق العمل",workforceSizeDesc:"إجمالي الخبراء الرقميين المنشورين"},Re={hint:"سنتذكّر اختيارك وننقلك إليه تلقائياً في المرة القادمة.",manager:{description:"أنشئ وكلاء الذكاء الاصطناعي وهيّئهم وانشرهم. أدر سير العمل والموارد والتكاملات.",feature1:"إنشاء الوكلاء ونشرهم",feature2:"تهيئة سير العمل والمسارات",feature3:"إدارة الموارد والإضافات",title:"Manager"},subtitle:"اختر مساحة العمل للبدء.",title:"مرحباً بك في EDDI",workforce:{description:"اجمع فرق ذكاء اصطناعي تناقش وتحلّل وتحلّ التحديات المعقّدة معاً.",feature1:"تشكيل فرق مهام من الوكلاء",feature2:"إجراء نقاشات تعاونية",feature3:"الحصول على إجابات مركّبة",title:"فريق العمل"}},Le={assembleTaskForce:"تشكيل فريق مهام",assembleTaskForceDesc:"اجمع الخبراء لحلّ التحديات المعقّدة",chatWithAgent:"محادثة مع وكيل",chatWithAgentDesc:"أجرِ محادثة فردية مع أي خبير رقمي",manageWorkforce:"إدارة فريق العمل",manageWorkforceDesc:"تهيئة الخبراء الرقميين ونشرهم",title:"إجراءات سريعة",viewInsights:"عرض الرؤى",viewInsightsDesc:"تتبّع تغطية المعرفة لدى فريق عملك"},Ie={addAgent:"نشر وكيل",count:"{{count}} خبيراً",ready:"جاهز",title:"فريق عملك الرقمي",unnamed:"وكيل بدون اسم"},_e={production:"الإنتاج",test:"الاختبار"},Ne={attachments:e,app:t,auth:o,nav:n,theme:a,language:r,pages:s,common:i,agents:c,agentDetail:l,wizard:d,setupWizard:u,packages:p,packageDetail:m,packageEditor:g,conversations:h,conversationDetail:y,chat:T,resources:v,editor:D,rulesEditor:A,apiCallsEditor:f,mcpcallsEditor:P,llmEditor:S,outputEditor:C,propertySetterEditor:k,dictionaryEditor:b,parserEditor:w,coordinator:E,contentEditor:M,logs:R,secrets:L,audit:I,schedules:_,cascadeTrace:N,debugDrawer:H,costDashboard:O,memoryInspector:x,logViewer:F,promptViewer:U,promptPreview:W,studio:V,ragEditor:B,onboarding:K,platform:G,stream:z,createOrWizard:q,groups:j,taskBoard:J,memories:Y,properties:$,triggers:Q,capabilities:Z,exportDialog:X,importDialog:ee,syncPage:te,sync:oe,userConversations:ne,commandPalette:ae,groupWizard:re,groupTemplates:se,channels:ie,channelDetail:ce,hitl:le,chatDrawer:de,dashboard:ue,errorBoundary:pe,gdpr:me,mockBanner:ge,orphans:he,quotas:ye,secretPicker:Te,snippetEditor:ve,status:De,userData:Ae,variables:fe,workflowEditor:Pe,Workforce:Se,operator:Ce,groupWorkspace:ke,workforceWizard:be,updates:we,analyticsPage:Ee,knowledgeHealth:Me,landing:Re,quickActions:Le,workforce:Ie,environments:_e};export{Se as Workforce,l as agentDetail,c as agents,Ee as analyticsPage,f as apiCallsEditor,t as app,e as attachments,I as audit,o as auth,Z as capabilities,N as cascadeTrace,ce as channelDetail,ie as channels,T as chat,de as chatDrawer,ae as commandPalette,i as common,M as contentEditor,y as conversationDetail,h as conversations,E as coordinator,O as costDashboard,q as createOrWizard,ue as dashboard,H as debugDrawer,Ne as default,b as dictionaryEditor,D as editor,_e as environments,pe as errorBoundary,X as exportDialog,me as gdpr,se as groupTemplates,re as groupWizard,ke as groupWorkspace,j as groups,le as hitl,ee as importDialog,Me as knowledgeHealth,Re as landing,r as language,S as llmEditor,F as logViewer,R as logs,P as mcpcallsEditor,Y as memories,x as memoryInspector,ge as mockBanner,n as nav,K as onboarding,Ce as operator,he as orphans,C as outputEditor,m as packageDetail,g as packageEditor,p as packages,s as pages,w as parserEditor,G as platform,W as promptPreview,U as promptViewer,$ as properties,k as propertySetterEditor,Le as quickActions,ye as quotas,B as ragEditor,v as resources,A as rulesEditor,_ as schedules,Te as secretPicker,L as secrets,u as setupWizard,ve as snippetEditor,De as status,z as stream,V as studio,oe as sync,te as syncPage,J as taskBoard,a as theme,Q as triggers,we as updates,ne as userConversations,Ae as userData,fe as variables,d as wizard,Pe as workflowEditor,Ie as workforce,be as workforceWizard}; diff --git a/src/main/resources/META-INF/resources/assets/ar-DARxajkw.js b/src/main/resources/META-INF/resources/assets/ar-DARxajkw.js new file mode 100644 index 0000000000..04f7be677e --- /dev/null +++ b/src/main/resources/META-INF/resources/assets/ar-DARxajkw.js @@ -0,0 +1 @@ +const e={title:"المرفقات",empty:"لا تحتوي هذه المحادثة على مرفقات.",loadError:"تعذّر تحميل المرفقات.",deleteAll:"حذف الكل",delete:"حذف المرفق",download:"تنزيل",deleted:"تم حذف المرفق",deletedAll:"تم حذف {{count}} مرفقات",confirmDeleteTitle:"حذف المرفق؟",confirmDeleteDesc:"يحذف هذا الملف نهائيًا. لا يمكن التراجع.",confirmDeleteAllTitle:"حذف جميع المرفقات؟",confirmDeleteAllDesc:"يحذف نهائيًا كل ملفات هذه المحادثة. لا يمكن التراجع."},t={title:"مدير EDDI",description:"لوحة تحكم منصة EDDI للذكاء الاصطناعي"},o={login:"تسجيل الدخول",logout:"تسجيل الخروج",loading:"جارٍ المصادقة…",sessionExpired:"انتهت الجلسة. يرجى تسجيل الدخول مجدداً.",profile:"الملف الشخصي",guest:"زائر",userMenu:"قائمة المستخدم"},n={dashboard:"لوحة التحكم",agents:"الوكلاء",packages:"مسارات العمل",conversations:"محادثات",coordinator:"المنسق",schedules:"الجداول",logs:"السجلات",orphans:"يتيمة",secrets:"الأسرار",audit:"سجل التدقيق",quotas:"الحصص",groups:"مجموعات",chat:"دردشة",resources:"الموارد",sectionManagement:"الإدارة",sectionDevelopment:"التطوير",sectionOperations:"العمليات",mainNavigation:"التنقل الرئيسي",openMenu:"فتح قائمة التنقل",sectionCore:"الأساسي",sectionBuild:"البناء والاختبار",sectionMonitor:"المراقبة",sectionAdmin:"الإدارة",studio:"الاستوديو",gdpr:"الخصوصية",memories:"ذاكرة المستخدم",properties:"الخصائص",triggers:"المشغلات",capabilities:"القدرات",sync:"المزامنة",updates:"التحديثات",channels:"القنوات",approvals:"الموافقات",userConversations:"محادثات المستخدم",userData:"بيانات المستخدم",variables:"المتغيرات",sectionExternal:"خارجي",activeConversations:"المحادثات النشطة",openapi:"OpenAPI",docs:"التوثيق",modeManager:"المدير",modeWorkforce:"فريق العمل",switchMode:"تبديل مساحة العمل",operator:"مُشغّل المنصة",workforce:"فريق العمل",monitoring:"مراقبة المحادثات",analytics:"التحليلات"},a={light:"فاتح",dark:"داكن",system:"نظام"},r={label:"اللغة",en:"English",de:"Deutsch",fr:"Français",es:"Español",ar:"العربية",zh:"中文",th:"ไทย",ja:"日本語",ko:"한국어",pt:"Português",hi:"हिन्दी",switchFailed:"تعذّر تحميل هذه اللغة. يرجى المحاولة مرة أخرى."},s={dashboard:{title:"لوحة التحكم",subtitle:"نظرة عامة على Agents EDDI والمحادثات",activeAgents:"Agents نشطة",totalWorkflows:"مسارات العمل",totalResources:"الموارد",totalConversations:"محادثات",quickActions:"إجراءات سريعة",recentAgents:"أحدث Agents",noRecentAgents:"لا توجد Agents بعد. أنشئ أول Agent!"},agents:{undeployPreviousVersionsHint:"يزيل أيضًا كل إصدار سابق لهذا الوكيل من البيئة.",undeployPreviousVersionsLabel:"إلغاء نشر هذا الإصدار وجميع الإصدارات السابقة",undeployEndConversationsHint:"ينهي فورًا كل محادثة جارية على هذا النشر. لا يمكن التراجع.",undeployEndConversationsLabel:"إنهاء جميع المحادثات النشطة",confirmUndeployDescription:"سيتم إلغاء نشر الإصدار {{version}} من {{environment}}.",confirmUndeploy:"إلغاء نشر الوكيل؟",title:"الوكلاء",subtitle:"إدارة Agents الذكاء الاصطناعي"},packages:{title:"مسارات العمل",subtitle:"تكوين Workflows وإضافات Agents"},conversations:{permanentDeleteSuccess:"تم الحذف نهائيًا",softDeleteSuccess:"تم حذف المحادثة",deletePermanentAction:"حذف نهائي",deletePermanentLabel:"حذف نهائي — يمحو أيضًا المرفقات ولقطة الذاكرة وسجل الموافقات. لا يمكن التراجع.",confirmDeleteSoft:"افتراضيًا هذا حذف مبدئي — تُخفى المحادثة من القوائم لكن تبقى بياناتها على الخادم.",title:"محادثات",subtitle:"عرض وإدارة محادثات Agents"},resources:{title:"الموارد",subtitle:"إدارة قواعد السلوك والقواميس والمخرجات والمزيد"},chat:{title:"دردشة",subtitle:"تحدث مع Agents المنشورة"},channels:{title:"القنوات",subtitle:"قم بربط الوكلاء والمجموعات بمنصات المراسلة مثل Slack"},groups:{title:"مجموعات",subtitle:"مجموعات نقاش متعددة الوكلاء للنقاش المنظم والتعاون"},approvals:"الموافقات المعلقة",approvalsSubtitle:"مراجعة المحادثات التي تنتظر مدخلات بشرية واتخاذ قرار بشأنها"},i={add:"إضافة",agent:"الوكيل",back:"رجوع",cardView:"عرض البطاقات",clear:"مسح التحديد",confirm:"تأكيد",description:"الوصف",group:"المجموعة",id:"المعرّف",listView:"عرض القائمة",modified:"تاريخ التعديل",name:"الاسم",new:"جديد",version:"الإصدار",viewMode:"وضع العرض",loading:"جارٍ التحميل...",error:"حدث خطأ ما",retry:"إعادة المحاولة",save:"حفظ",cancel:"إلغاء",delete:"حذف",remove:"إزالة",create:"إنشاء",edit:"تعديل",search:"بحث...",noResults:"لم يتم العثور على نتائج",duplicate:"تكرار",close:"إغلاق",skipToMain:"انتقل إلى المحتوى الرئيسي",opensNewTab:"يفتح في علامة تبويب جديدة",moreActions:"المزيد من الإجراءات",sortByName:"ترتيب حسب الاسم",sortByVersion:"ترتيب حسب الإصدار",sortByModified:"ترتيب حسب تاريخ التعديل",apply:"تطبيق",copied:"تم النسخ",copy:"نسخ",saving:"جارٍ الحفظ…",showMore:"Show More",showLess:"Show Less",copyFailed:"فشل النسخ إلى الحافظة",loadError:"فشل تحميل البيانات",actions:"إجراءات",view:"عرض",refresh:"تحديث",previous:"السابق",next:"التالي",dismiss:"تجاهل",refreshFailed:"تعذّر التحديث — يتم عرض أحدث البيانات المحمّلة.",settings:"الإعدادات",history:"السجل",copyId:"نسخ معرّف الوكيل",off:"معطّل",on:"مفعّل"},l={confirmDeleteDescription:"لا يمكن التراجع عن هذا الإجراء. ستتم إزالة الوكيل وجميع بياناته نهائياً.",confirmUndeploy:"إلغاء نشر الوكيل؟",confirmUndeployDescription:"سيتم إلغاء نشر الإصدار {{version}} من {{environment}}.",createSuccess:"تم إنشاء الوكيل بنجاح",deleteAgent:"حذف الوكيل",deployError:"فشل النشر",deploySuccess:"تم نشر الوكيل بنجاح",noDescription:"بدون وصف",selectAgent:"اختر وكيلاً",undeployEndConversationsHint:"ينهي فورًا كل محادثة جارية على هذا النشر. لا يمكن التراجع.",undeployEndConversationsLabel:"إنهاء جميع المحادثات النشطة",undeployError:"فشل إلغاء النشر",undeployPreviousVersionsHint:"يزيل أيضًا كل إصدار سابق لهذا الوكيل من البيئة.",undeployPreviousVersionsLabel:"إلغاء نشر هذا الإصدار وجميع الإصدارات السابقة",undeploySuccess:"تم إلغاء نشر الوكيل",unnamed:"وكيل بدون اسم",deploy:"نشر",undeploy:"إلغاء النشر",createAgent:"إنشاء Agent",createTitle:"إنشاء Agent جديد",name:"الاسم",namePlaceholder:"Agent الخاص بي",description:"الوصف",descriptionPlaceholder:"صف ما يفعله هذا Agent...",empty:"لا توجد Agents بعد. أنشئ أول Agent!",confirmDelete:"هل أنت متأكد من حذف هذا Agent؟",count_one:"وكيل واحد",count_other:"{{count}} وكلاء",export:"تصدير",exporting:"جارٍ التصدير...",exportSuccess:"تم تصدير Agent بنجاح",import:"استيراد Agent",importing:"جارٍ الاستيراد...",importSuccess:"تم استيراد Agent بنجاح",importError:"فشل استيراد Agent",emptyDescription:"استخدم المعالج لإنشاء وكيل مكوّن بالكامل في دقائق.",chat:"محادثة",deployAndChat:"نشر ومحادثة",openExternalChat:"فتح في تبويب جديد",count_zero:"{{count}} وكيل",count_two:"وكيلان",count_few:"{{count}} وكلاء",count_many:"{{count}} وكيل",liveIn:"نشط في {{environment}}",chatIn:"الدردشة في {{environment}}",openExternalChatIn:"فتح دردشة {{environment}} في علامة تبويب جديدة",deployToProduction:"النشر في الإنتاج",undeployFromProduction:"الإزالة من الإنتاج",deployFailedIn:"فشل النشر في {{environment}}"},c={a2aDescHint:"يظهر في بطاقة الوكيل — يساعد الوكلاء الآخرين على فهم ما يفعله هذا الوكيل",a2aDescPlaceholder:"ماذا يفعل هذا الوكيل؟",a2aDescription:"وصف الوكيل",a2aEnable:"تفعيل A2A",a2aEnabled:"مُفعّل",a2aEnabledDesc:"اجعل هذا الوكيل قابلاً للاكتشاف من قِبل الوكلاء الآخرين عبر بروتوكول A2A. يمكن لمثيلات EDDI الأخرى العثور على هذا الوكيل واستدعاؤه كأداة.",a2aEndpoints:"نقاط النهاية",a2aNoSkills:"لا توجد مهارات — ستُستخدم مهارة 'chat' الافتراضية",a2aSection:"من وكيل إلى وكيل (A2A)",a2aSkillPlaceholder:"مثل: translation، code-review",a2aSkills:"مهارات A2A",addAttribute:"إضافة سمة",agentCardPreview:"معاينة بطاقة الوكيل",agentDid:"DID الوكيل",attributeKey:"مفتاح",attributeValue:"قيمة",attributesLabel:"السمات",attrs:"سمات",autoSnapshotEnable:"تفعيل نقاط التحقق التلقائية",capabilities:"القدرات",capabilitiesDesc:"المهارات المُعلَنة لبطاقة وكيل A2A وسجل القدرات. يكتشفها الوكلاء الآخرون عند اختيار أهداف التفويض.",capabilityPlaceholder:"ابحث أو اكتب اسم مهارة...",comingSoon:"قريباً",defaultVisibility:"الظهور الافتراضي",dreamConsolidation:"توطيد الأحلام",dreamDesc:"مهمة LLM في الخلفية تحلّ التناقضات وتنظّف الإدخالات القديمة وتلخّص التفاعلات اختيارياً.",enableMemoryTools:"تفعيل أدوات الذاكرة",enableSwd:"تفعيل انضباط الكتابة الصارم",forkingDisabledTooltip:"متاح في إصدار مستقبلي",forkingEnabled:"تفريع الجلسة",forkingNote:"نقطة نهاية تفريع الجلسة (POST /v6/conversations/{{id}}/fork) غير متاحة بعد.",guardrails:"ضوابط الكتابة",identity:"الهوية التشفيرية",keyExpired:"منتهي الصلاحية",keyVersion:"المفتاح v{{version}}",legacyKey:"مفتاح قديم (v0)",maxCheckpoints:"الحد الأقصى لنقاط التحقق",maxCheckpointsHint:"لكل محادثة",maxEntriesPerUser:"الحد الأقصى لكل مستخدم",maxForks:"الحد الأقصى للتفريعات",maxForksHint:"لكل محادثة",maxRecallEntries:"الحد الأقصى للاسترجاع",memoryPolicy:"سياسة الذاكرة",memoryPolicyDesc:"يحكم انضباط الكتابة الصارم ما يحدث عند فشل تحديثات الخصائص أثناء خطوة محادثة. اختر كيف يتعامل المحرك مع البيانات المُلتزَم بها جزئياً.",onCapReached:"عند بلوغ الحد",onFailure:"استراتيجية عند الفشل",onFailureDigest:"ملخّص — التراجع عن التغييرات وإبلاغ ملخّص إلى LLM",onFailureExclude:"استبعاد الكل — إسقاط جميع تحديثات الخصائص بصمت",onFailureKeep:"الإبقاء على الكل — الاحتفاظ بالتغييرات وتسجيل تحذير",openWorkflow:"فتح",outdated:"قديم",publicKey:"المفتاح العام",publicKeyHint:"يُنشأ تلقائياً عند أول توقيع",publicKeys:"المفاتيح العامة",recallOrder:"ترتيب الاسترجاع",requirePeer:"طلب التحقق من النظير",requirePeerDesc:"رفض مهام A2A الواردة من الوكلاء الذين لا يمكنهم إثبات هويتهم",securityFlagConfirmBtn:"التفعيل على أي حال",securityFlagConfirmDesc:"التوقيع التشفيري غير متاح بعد في هذا الإصدار. سيؤدي تفعيل هذه الراية إلى رفض الخلفية لعمليات الحفظ برمز HTTP 400. هل أنت متأكد من المتابعة؟",securityFlagConfirmTitle:"تفعيل راية الأمان؟",securityFlagWarning:"التوقيع التشفيري غير متاح بعد في هذا الإصدار. سترفض الخلفية عمليات الحفظ عند تفعيل هذه الرايات (HTTP 400).",securityFlags:"التوقيع والتحقق",securityIdentity:"الأمان والهوية",sessionManagement:"إدارة الجلسات",sessionManagementDesc:"تلتقط نقاط تحقق الذاكرة حالة المحادثة قبل العمليات الخطرة، مما يتيح تراجعاً نظيفاً عند الفشل.",signA2A:"توقيع رسائل ما بين الوكلاء (A2A)",signA2ADesc:"توقيع رسائل A2A الصادرة تشفيرياً للحماية من العبث",signMcp:"توقيع استدعاءات MCP",signMcpDesc:"إرفاق التواقيع باستدعاءات أدوات MCP للتحقق الآمن من الخادم",skillAlreadyExists:"هذه المهارة معلنة بالفعل",switchToLatest:"التبديل إلى الأحدث",toggleAttributes:"تبديل السمات",triggerBeforeAction:"قبل الإجراء",triggerBeforeTool:"قبل تنفيذ الأداة",triggerOn:"التشغيل عند",updateToLatest:"التحديث إلى أحدث إصدار",userMemory:"ذاكرة المستخدم",userMemoryDesc:"ذاكرة دائمة لكل مستخدم مع أدوات LLM (تذكّر/استرجاع/نسيان). يعمل استمرار خصائص longTerm الأساسي دائماً بغض النظر عن هذا الخيار.",viewingOldVersion:"أنت تعرض الإصدار {{current}}. الأحدث هو الإصدار {{latest}}.",workflowAdded:"تمت إضافة مسار العمل",workflowRemoved:"تمت إزالة مسار العمل",workflowUpdated:"تم تحديث مسار العمل إلى أحدث إصدار",title:"تفاصيل Agent",backToAgents:"العودة إلى Agents",packages:"مسارات العمل",noWorkflows:"لم يتم إضافة Workflows بعد",addWorkflow:"إضافة Workflow",selectWorkflow:"اختر Workflow للإضافة",rawConfig:"التكوين الخام",editName:"تعديل الاسم",editDescription:"تعديل الوصف",clickToEdit:"انقر للتعديل",noDescription:"بدون وصف",duplicate:"تكرار",duplicating:"جارٍ التكرار...",duplicateSuccess:"تم تكرار Agent بنجاح",environments:"البيئات",envProduction:"إنتاج",envTest:"اختبار",savingAgent:"جارٍ حفظ Agent...",savedAgent:"تم حفظ Agent بنجاح",saveError:"فشل حفظ Agent",deployToEnv:"نشر في {{env}}",undeployFromEnv:"إزالة من {{env}}",openStudio:"فتح في الاستوديو",maxKeyLength:"أقصى طول للمفتاح",maxValueLength:"أقصى طول للقيمة",maxWritesPerTurn:"أقصى عمليات كتابة/دورة",dreamSchedule:"الجدولة (cron)",dreamLlmProvider:"مزود LLM",dreamLlmModel:"نموذج LLM",dreamMaxCost:"أقصى تكلفة/تشغيل ($)",dreamPruneDays:"التنظيف بعد (أيام)",dreamBatchSize:"حجم الدفعة",detectContradictions:"اكتشاف التناقضات",summarizeInteractions:"تلخيص التفاعلات",confidenceLow:"منخفض",confidenceMedium:"متوسط",confidenceHigh:"مرتفع",visibilitySelf:"ذاتي",visibilityGlobal:"عام",onCapEvict:"إزالة الأقدم",onCapReject:"رفض",recallMostRecent:"الأحدث",recallMostRelevant:"الأكثر صلة",channels:"موصلات القنوات",channelsDesc:"اربط هذا الوكيل بقنوات Slack. كل موصل قناة يُعد بشكل مستقل ببيانات اعتماد خاصة، مما يدعم إعدادات مساحات العمل المتعددة.",noChannels:"لا توجد قنوات مُعدة",noChannelsDesc:"أضف قناة Slack للسماح للمستخدمين بالتفاعل مع هذا الوكيل من Slack.",addSlackChannel:"إضافة قناة Slack",slackChannel:"قناة Slack",removeChannel:"إزالة القناة",removeChannelConfirm:"إزالة موصل قناة Slack هذا؟",removeChannelDesc:"This action will permanently disconnect this channel.",channelId:"معرف القناة",channelIdHint:"تبدأ معرفات القنوات بحرف C متبوعاً بأحرف أبجدية رقمية كبيرة",botToken:"رمز البوت",botTokenPlaceholder:"xoxb-… أو ${vault:slack-bot-token}",botTokenHint:"رمز OAuth لمستخدم بوت Slack. استخدم مرجع الخزنة للأمان.",signingSecret:"سر التوقيع",signingSecretPlaceholder:"سلسلة سداسية عشرية أو ${vault:slack-signing-secret}",signingSecretHint:"من صفحة المعلومات الأساسية لتطبيق Slack الخاص بك. استخدم مرجع الخزنة للأمان.",groupIdOptional:"معرف المجموعة (اختياري)",groupIdPlaceholder:"معرف تكوين المجموعة متعددة الوكلاء",groupIdHint:'فعّل مناقشات "group: سؤال" متعددة الوكلاء من قناة Slack هذه.',slackSetupGuide:"دليل إعداد Slack",slackWebhookUrl:"عنوان Webhook",slackWebhookCopied:"تم نسخ عنوان Webhook",slackStep1:"أنشئ تطبيق Slack على api.slack.com/apps وثبّته في مساحة عملك.",slackStep2:"انسخ رمز البوت (xoxb-…) وسر التوقيع إلى خزنة EDDI وأعد تكوين القنوات أدناه.",slackStep3:"ثم فعّل Event Subscriptions في تطبيق Slack الخاص بك، والصق عنوان Webhook أعلاه واشترك في:",slackSetupNote:"مهم: أعد تكوين القناة أدناه قبل تفعيل Event Subscriptions — يرسل Slack تحدي تحقق URL يتطلب تكوين سر التوقيع في EDDI.",slackRequiredScopes:"أذونات رمز البوت المطلوبة",hitlConfig:"التدخل البشري",hitlConfigDesc:"عندما يوقف هذا العميل محادثة للموافقة البشرية، تتحكم هذه الإعدادات في مدة الانتظار وما يحدث إذا لم يُتخذ قرار في الوقت المحدد.",hitlEnable:"تكوين مهل الموافقة البشرية",hitlTimeoutPolicy:"إذا لم يُتخذ قرار في الوقت المحدد",hitlApprovalTimeout:"مهلة الموافقة (ISO-8601)",hitlTimeoutInvalid:"تتطلب السياسة المحدودة مدة ISO-8601 موجبة، مثل PT15M.",hitlTimeoutHint:"مثل PT30S وPT15M وPT2H.",hitlPauseReason:"سبب الموافقة (يظهر للموافقين)",hitlPauseReasonPlaceholder:"مثال: يتطلب الحذف موافقة المدير",toolApprovalsEnable:"حجب استدعاءات أدوات محددة للموافقة عليها",toolApprovalsDesc:'الإيقاف المؤقت عند استدعاء النموذج لأداة مطابقة، قبل تشغيلها. قائمة "تتطلب الموافقة" الفارغة تعطّل حجب الأدوات.',toolRequireApproval:"تتطلب الموافقة (أنماط glob، نمط واحد في كل سطر)",toolPatternHint:"'*' هو حرف البدل الوحيد. بادئة المصدر اختيارية:",toolExempt:"معفاة (مسموح بها دائمًا، واحدة في كل سطر)",toolMaxPauses:"الحد الأقصى للإيقافات / الدور (1–10)",toolMaxAuto:"الحد الأقصى للموافقات التلقائية / الدور (0–10)",toolOnNoProgress:"عند إعادة الإيقاف بدون تقدّم",toolTimeoutPolicy:"سياسة مهلة إيقاف الأداة",toolTimeoutInherit:"الوراثة من الوكيل",toolAutoApproveDemotion:"لا ينطبق AUTO_APPROVE على مستوى الوكيل على موافقات الأدوات — ستنتظر إيقافات الأدوات إلى أجل غير مسمى ما لم تضبط سياسة مهلة لإيقاف الأداة أعلاه.",toolPauseReason:"سبب الموافِق (يُسمح بـ {toolNames})",toolPauseReasonPlaceholder:"مثال الموافقة مطلوبة لـ {toolNames}",toolPendingMessage:"رسالة المستخدم النهائي أثناء الإيقاف (يُسمح بـ {toolNames})",toolPendingMessagePlaceholder:"مثال بانتظار موافقة بشرية على {toolNames}…",toolInGroupTurns:"داخل دور المجموعة، يُرفض تلقائيًا استدعاء الأداة المحجوب لأحد الأعضاء (REJECT)."},d={title:"معالج Agent"},u={baseUrlHintCloud:"مطلوب فقط عند استخدام وكيل بروكسي أو نشر خاص أو نقطة نهاية Azure OpenAI",baseUrlHintLocal:"مطلوب — الرابط الذي يعمل عليه خادم نموذجك المحلي",modelHint:"اكتب أي اسم نموذج يدعمه مزوّدك، أو اختر واحداً من الاقتراحات",modelPlaceholder:"مثل: {{model}} (أو أي نموذج يدعمه مزوّدك)",title:"معالج إنشاء Agent",subtitle:"أنشئ Agent مكتمل التكوين في دقائق",backToAgents:"العودة إلى Agents",next:"التالي",back:"رجوع",createOnly:"إنشاء فقط",createAndDeploy:"إنشاء ونشر",typeTitle:"ما نوع Agent؟",typeDesc:"اختر نوع Agent الذي تريد إنشاءه",standardAgent:"وكيل قياسي",apiAgent:"وكيل API",standardDesc:"ذكاء اصطناعي محادثاتي مدعوم بـ LLM مع أدوات اختيارية وردود سريعة وتحليل المشاعر",apiDesc:"استورد مواصفة OpenAPI/Swagger لإنشاء Agent API تلقائياً",infoTitle:"هوية Agent",infoDesc:"امنح Agent اسماً وشخصية",agentName:"اسم Agent",namePlaceholder:"مثال: بوت دعم العملاء",systemPrompt:"موجه النظام",promptPlaceholder:"أنت مساعد ذكاء اصطناعي مفيد يقوم بـ...",promptHint:"هذه التعليمات تحدد كيف يتصرف ويستجيب Agent.",llmTitle:"تكوين LLM",llmDesc:"اختر نموذج الذكاء الاصطناعي الذي يشغل Agent",provider:"المزود",model:"النموذج",apiKey:"مفتاح API",baseUrl:"الرابط الأساسي",baseUrlPlaceholder:"رابط endpoint مخصص",optional:"اختياري",apiSpecTitle:"مواصفة OpenAPI",apiSpecDesc:"قدم مواصفة OpenAPI/Swagger الخاصة بـ API",specByUrl:"رابط (URL)",specByFile:"ملف",specByPaste:"لصق",fetch:"جلب",specFetched:"تم تحميل المواصفة!",specFetchError:"فشل جلب المواصفة",dropFile:"اسحب ملف OpenAPI هنا",dropHint:"تنسيق JSON أو YAML",browse:"تصفح الملفات",pasteSpec:"الصق JSON أو YAML من OpenAPI/Swagger هنا...",specLoaded:"تم تحميل الملف: {{name}}",specReady:"تم تحميل المواصفة ({{chars}} حرف)",apiBaseUrlLabel:"الرابط الأساسي لـ API",apiAuthLabel:"رأس مصادقة API",endpointFilter:"فلتر Endpoints",endpointFilterPlaceholder:"مفصولة بفواصل: GET /users, POST /orders",featuresTitle:"الميزات والخيارات",featuresDesc:"خصص قدرات Agent",introMessage:"رسالة ترحيب",introMessageDesc:"رسالة تُعرض عند بدء المحادثة",quickReplies:"ردود سريعة",quickRepliesDesc:"يولد LLM اقتراحات ردود قابلة للنقر",sentiment:"تحليل المشاعر",sentimentDesc:"تتبع مزاج وقصد وإلحاح المستخدم في الوقت الفعلي",structuredOutput:"إخراج منظم",structuredOutputDesc:"يستجيب النموذج بكائن JSON بدلاً من نص عادي",structuredOutputInfo:"عند التفعيل، يستجيب النموذج بكائن JSON مع حقول منظمة. يتم إلحاق مخطط JSON بتعليمات النظام، ويتم ضبط النموذج على وضع استجابة JSON.",builtInTools:"أدوات مدمجة",builtInToolsDesc:"تفعيل مكتبة أدوات EDDI المدمجة (آلة حاسبة، تاريخ/وقت، إلخ)",toolsWhitelist:"قائمة بيضاء (فارغ = الكل)",mcpServers:"خوادم MCP",mcpServersDesc:"خوادم Model Context Protocol لأدوات خارجية",autoDeploy:"نشر تلقائي",autoDeployDesc:"نشر Agent فوراً بعد الإنشاء",environment:"البيئة",envProduction:"إنتاج",envTest:"اختبار",reviewTitle:"مراجعة وإنشاء",reviewDesc:"راجع التكوين قبل الإنشاء",reviewType:"النوع",reviewName:"الاسم",reviewPrompt:"موجه النظام",reviewProvider:"المزود",reviewModel:"النموذج",reviewSpec:"مواصفات OpenAPI",reviewIntro:"رسالة ترحيب",reviewDeploy:"نشر",success:"تم إنشاء Agent بنجاح!",agentCreated:"تم إنشاء Agent!",deployed:"تم النشر",endpointsParsed:"تم تحليل {{count}} endpoints API",viewAgent:"عرض Agent",createAnother:"إنشاء آخر",vaultKeyUsed:"يستخدم هذا الوكيل مفتاح الخزنة أدناه. اختر المفتاح نفسه للوكيل التالي بدلاً من لصق مفتاح واجهة البرمجة مرة أخرى.",vaultKeyCopied:"تم نسخ مرجع الخزنة",allTools:"جميع الأدوات",selectSpecific:"اختيار محدد",allToolsInfo:"جميع الأدوات المدمجة ({{count}}) ستكون متاحة لوكيلك. اختر «اختيار محدد» لتحديد الأدوات المفعلة.",availableTools:"الأدوات المتاحة",toolCount:"{{selected}} من {{total}} محددة",specTooLarge:"هذه المواصفة كبيرة جداً بحيث لا يمكن تحميلها هنا",specUrlInvalid:"هذا ليس عنوان URL صالحاً",specUrlScheme:"يتم دعم عناوين http:// و https:// فقط"},p={confirmDeleteDescription:"لا يمكن التراجع عن هذا الإجراء. ستتم إزالة مسار العمل وجميع بياناته نهائياً.",createSuccess:"تم إنشاء مسار العمل بنجاح",unnamed:"مسار عمل بدون اسم",createWorkflow:"إنشاء Workflow",createTitle:"إنشاء Workflow جديد",name:"الاسم",namePlaceholder:"Workflow الخاص بي",description:"الوصف",descriptionPlaceholder:"صف ما يفعله هذا Workflow...",noDescription:"لا يوجد وصف",empty:"لا توجد Workflows بعد. أنشئ أول Workflow!",confirmDelete:"هل أنت متأكد من حذف هذا Workflow؟",count_one:"سير عمل واحد",count_other:"{{count}} سير عمل",emptyDescription:"تحدد مسارات العمل خط أنابيب المعالجة لوكلائك.",count_zero:"{{count}} سير عمل",count_two:"سيرا عمل",count_few:"{{count}} سير عمل",count_many:"{{count}} سير عمل"},m={backToAgent:"العودة إلى الوكيل",title:"تفاصيل Workflow",backToWorkflows:"العودة إلى Workflows",extensions:"الإضافات",noExtensions:"لا توجد إضافات في هذا Workflow",rawConfig:"التكوين الخام"},g={chooseConfig:"اختر تكويناً",chooseConfigHint:"أنشئ تكويناً جديداً أو اربط تكويناً موجوداً",configCreated:"تم إنشاء التكوين — أُضيف إلى المسار",createNewConfig:"إنشاء تكوين جديد",createNewConfigHint:"ينشئ تكويناً فارغاً يمكنك تعديله لاحقاً",noExistingConfigs:"لم يتم العثور على تكوينات موجودة — أنشئ واحداً جديداً أعلاه",orExisting:"أو استخدم موجوداً",updateToLatest:"التحديث إلى أحدث إصدار",title:"محرر Workflow",pipeline:"Pipeline الإضافات",addHint:"أضف إضافات لبناء pipeline المعالجة",addHintDialog:"اختر نوع الإضافة للإضافة إلى pipeline",reorder:"إعادة ترتيب الإضافة",saved:"تم حفظ Workflow بنجاح",saveError:"فشل حفظ Workflow",noTasks:"[EN] No tasks in this workflow",addTask:"[EN] Add Task"},h={confirmDeleteSoft:"افتراضيًا هذا حذف مبدئي — تُخفى المحادثة من القوائم لكن تبقى بياناتها على الخادم.",deletePermanentLabel:"حذف نهائي — يمحو أيضًا المرفقات ولقطة الذاكرة وسجل الموافقات. لا يمكن التراجع.",monitorSubtitle:"راقب المحادثات الجارية وأدرها بالجملة لكل وكيل.",noActiveDesc:"لا توجد محادثات جارية لهذا الإصدار من الوكيل الآن.",purgeDesc:"احذف نهائياً المحادثات المنتهية (ENDED) التي يكون آخر نشاط لها أقدم من عدد الأيام المحدد.",selectAgentPromptDesc:"تُدرَج المحادثات النشطة حسب الوكيل والإصدار.",searchPlaceholder:"البحث بمعرّف المحادثة...",id:"المحادثة",agent:"الوكيل",state:"الحالة",lastActivity:"آخر نشاط",actions:"إجراءات",empty:"لا توجد محادثات بعد. انشر Agent وابدأ الدردشة!",confirmDelete:"هل أنت متأكد من حذف هذه المحادثة؟",count_one:"محادثة واحدة",count_other:"{{count}} محادثات",emptyDescription:"انشر وكيلاً وابدأ محادثة من صفحة الدردشة.",filterAll:"الكل",stateActive:"نشط",stateInProgress:"قيد التنفيذ",stateEnded:"منتهية",stateInterrupted:"متوقفة",permanentDeleteSuccess:"تم الحذف نهائياً",softDeleteSuccess:"تم حذف المحادثة",monitorActive:"مراقبة النشطة",filterByAgent:"تصفية حسب الوكيل",filterByVersion:"تصفية حسب إصدار الوكيل",allVersions:"جميع الإصدارات",version:"v{{version}}",showingRange:"عرض {{from}}–{{to}}",deleteConversation:"حذف المحادثة",steps:"الخطوات",perPage:"لكل صفحة",pageNumber:"صفحة {{page}}",deletePermanentAction:"حذف نهائي",step:"خطوة",monitorTitle:"المحادثات النشطة",backToList:"العودة إلى المحادثات",selectAgentToMonitor:"اختر وكيلاً",selectedCount:"{{count}} محدد",endSelected:"إنهاء المحدد",selectAgentPrompt:"اختر وكيلاً للمراقبة",noActive:"لا توجد محادثات نشطة",selectAll:"تحديد الكل",selectOne:"تحديد {{id}}",purgeTitle:"تطهير المحادثات المنتهية",olderThanDays:"أقدم من (أيام)",purgeAction:"تطهير",confirmEndTitle:"إنهاء المحادثات المحددة؟",confirmPurgeTitle:"تطهير المحادثات المنتهية؟",count_zero:"{{count}} محادثة",count_two:"محادثتان",count_few:"{{count}} محادثات",count_many:"{{count}} محادثة",confirmEndDesc_few:"سيتم تعيين {{count}} محادثة إلى ENDED. تُنهى المحادثات المتوقفة (بانتظار الإنسان) بأمان عبر المسار المدرك للموافقات.",confirmEndDesc_many:"سيتم تعيين {{count}} محادثة إلى ENDED. تُنهى المحادثات المتوقفة (بانتظار الإنسان) بأمان عبر المسار المدرك للموافقات.",confirmEndDesc_one:"سيتم تعيين {{count}} محادثة إلى ENDED. تُنهى المحادثات المتوقفة (بانتظار الإنسان) بأمان عبر المسار المدرك للموافقات.",confirmEndDesc_two:"سيتم تعيين {{count}} محادثة إلى ENDED. تُنهى المحادثات المتوقفة (بانتظار الإنسان) بأمان عبر المسار المدرك للموافقات.",confirmEndDesc_zero:"سيتم تعيين {{count}} محادثة إلى ENDED. تُنهى المحادثات المتوقفة (بانتظار الإنسان) بأمان عبر المسار المدرك للموافقات.",confirmEndDesc_other:"سيتم تعيين {{count}} محادثة إلى ENDED. تُنهى المحادثات المتوقفة (بانتظار الإنسان) بأمان عبر المسار المدرك للموافقات.",confirmPurgeDesc_few:"يحذف هذا نهائياً المحادثات المنتهية (ENDED) الأقدم من {{days}} يوم، بما في ذلك ذاكرتها المخزنة ومرفقاتها. لا يمكن التراجع.",confirmPurgeDesc_many:"يحذف هذا نهائياً المحادثات المنتهية (ENDED) الأقدم من {{days}} يوم، بما في ذلك ذاكرتها المخزنة ومرفقاتها. لا يمكن التراجع.",confirmPurgeDesc_one:"يحذف هذا نهائياً المحادثات المنتهية (ENDED) الأقدم من {{days}} يوم، بما في ذلك ذاكرتها المخزنة ومرفقاتها. لا يمكن التراجع.",confirmPurgeDesc_two:"يحذف هذا نهائياً المحادثات المنتهية (ENDED) الأقدم من {{days}} يوم، بما في ذلك ذاكرتها المخزنة ومرفقاتها. لا يمكن التراجع.",confirmPurgeDesc_zero:"يحذف هذا نهائياً المحادثات المنتهية (ENDED) الأقدم من {{days}} يوم، بما في ذلك ذاكرتها المخزنة ومرفقاتها. لا يمكن التراجع.",confirmPurgeDesc_other:"يحذف هذا نهائياً المحادثات المنتهية (ENDED) الأقدم من {{days}} يوم، بما في ذلك ذاكرتها المخزنة ومرفقاتها. لا يمكن التراجع.",pausedNote_few:"{{count}} من المحادثات المحددة بانتظار الإنسان وسيتم إلغاء موافقتها المعلّقة.",pausedNote_many:"{{count}} من المحادثات المحددة بانتظار الإنسان وسيتم إلغاء موافقتها المعلّقة.",pausedNote_one:"{{count}} من المحادثات المحددة بانتظار الإنسان وسيتم إلغاء موافقتها المعلّقة.",pausedNote_two:"{{count}} من المحادثات المحددة بانتظار الإنسان وسيتم إلغاء موافقتها المعلّقة.",pausedNote_zero:"{{count}} من المحادثات المحددة بانتظار الإنسان وسيتم إلغاء موافقتها المعلّقة.",pausedNote_other:"{{count}} من المحادثات المحددة بانتظار الإنسان وسيتم إلغاء موافقتها المعلّقة.",endSuccess_few:"تم إنهاء {{count}} محادثة",endSuccess_many:"تم إنهاء {{count}} محادثة",endSuccess_one:"تم إنهاء {{count}} محادثة",endSuccess_two:"تم إنهاء {{count}} محادثة",endSuccess_zero:"تم إنهاء {{count}} محادثة",endSuccess_other:"تم إنهاء {{count}} محادثة",purgeSuccess_few:"تم تطهير {{count}} محادثة منتهية",purgeSuccess_many:"تم تطهير {{count}} محادثة منتهية",purgeSuccess_one:"تم تطهير {{count}} محادثة منتهية",purgeSuccess_two:"تم تطهير {{count}} محادثة منتهية",purgeSuccess_zero:"تم تطهير {{count}} محادثة منتهية",purgeSuccess_other:"تم تطهير {{count}} محادثة منتهية"},y={backToConversations:"العودة إلى المحادثات",chatLog:"سجل الدردشة",noSteps:"لم تُسجَّل أي خطوات محادثة",properties:"خصائص المحادثة",rawData:"عرض البيانات الخام",step:"خطوة",steps:"خطوات",title:"محادثة",continueChat:"متابعة في الدردشة",searchTranscript:"البحث في المحادثة…",exportMd:"تصدير كـ Markdown",toolSummary:"ملخص استخدام الأدوات",totalCost:"التكلفة الإجمالية",cacheHitRate:"معدل إصابة التخزين المؤقت"},v={hide:"إخفاء",secretModeOff:"تبديل الوضع السري",secretModeOn:"الوضع السري مُفعّل",secretPlaceholder:"أدخل القيمة السرية...",show:"إظهار",selectAgent:"اختر Agent...",noAgents:"لا توجد Agents منشورة متاحة. انشر Agent أولاً.",placeholder:"اكتب رسالة...",send:"إرسال",newConversation:"محادثة جديدة",endConversation:"إنهاء المحادثة",streaming:"بث",thinking:"يفكر...",usingTools:"استخدام الأدوات",connectionError:"خطأ في الاتصال. يرجى المحاولة مرة أخرى.",empty:"اختر Agent وابدأ الدردشة!",history:"السجل",undo:"تراجع عن آخر رسالة",redo:"إعادة الرسالة",continueConversation:"متابعة",noHistory:"لا يوجد سجل محادثات بعد.",attach:"إرفاق ملف",attachUploading:"...جارٍ الرفع",attachSuccess:"تم إرفاق الملف",attachError:"فشل في رفع الملف",attachLimit:"يمكنك إرفاق ما يصل إلى {{max}} ملفات لكل رسالة.",attachTooLargeToForward:"تم تخزين {{name}} لكنه أكبر من أن يُرسل إلى النموذج مباشرةً.",attachNotForwarded:"لم يُرسل إلى النموذج",dropToAttach:"أفلت الملفات لإرفاقها",stepFailedFallback:"فشلت هذه الخطوة. يحتوي سجل الخادم على الخطأ الكامل.",retry:"إعادة محاولة الخطوة الأخيرة",retrySuccess:"تم إعادة تنفيذ الخطوة",retryError:"فشلت إعادة المحاولة",showActivity:"إظهار النشاط",hideActivity:"إخفاء النشاط",scrollToBottom:"التمرير للأسفل",copyMessage:"نسخ الرسالة",copied:"تم النسخ!",activity:{processing:"جارٍ المعالجة…",steps:"خطوات",toolCalls:"استدعاءات أدوات",toolCall:"استدعاء أداة",toolResult:"النتيجة",error:"حدث خطأ",toolCallsCount_one:"استدعاء أداة واحد",stepsCount:"{{count}} خطوة",stepsCount_zero:"لا خطوات",stepsCount_one:"خطوة واحدة",stepsCount_two:"خطوتان",stepsCount_few:"{{count}} خطوات",stepsCount_many:"{{count}} خطوة",stepsCount_other:"{{count}} خطوة",toolCallsCount_zero:"لا استدعاءات أدوات",toolCallsCount_two:"استدعاءا أداة",toolCallsCount_few:"{{count}} استدعاءات أدوات",toolCallsCount_many:"{{count}} استدعاءً للأدوات",toolCallsCount_other:"عدد استدعاءات الأدوات: {{count}}",toolCallsCount:"عدد استدعاءات الأدوات: {{count}}",usingTool:"جارٍ استخدام {{tool}}…"},context:{conversationId:"معرف المحادثة",agentVersion:"إصدار الوكيل",startTime:"بدأ في",stepCount:"الخطوات",show:"إظهار معلومات المحادثة",hide:"إخفاء معلومات المحادثة"},agentTyping:"الوكيل يكتب",copy:"نسخ",emptyConversation:"لا تحتوي هذه المحادثة على رسائل بعد.",loadConversationFailed:"تعذّر تحميل هذه المحادثة: {{error}}",multilineHint:"Enter للإرسال · Shift+Enter لسطر جديد",multilineHintCtrlEnter:"Ctrl+Enter للإرسال · Enter لسطر جديد",toolRefused:"مرفوض"},T={backToWorkflow:"العودة إلى مسار العمل",confirmDeleteDescription:"لا يمكن التراجع عن هذا الإجراء. سيُحذف {{type}} نهائياً.",createSuccess:"تم إنشاء {{type}} بنجاح",snippetNameInvalid:"يُسمح فقط بالأحرف الصغيرة (a-z) والأرقام (0-9) والشرطات السفلية (_).",snippetNameRequired:"اسم القصاصة مطلوب.",unnamed:"مورد بدون اسم",noDescription:"لا يوجد وصف",backToResources:"العودة إلى الموارد",backToList:"العودة إلى {{type}}",unknownType:"نوع مورد غير معروف",rawConfig:"التكوين الخام",rawConfigHint:"تكوين JSON لهذا المورد",create:"إنشاء {{type}}",createTitle:"إنشاء {{type}}",createDescription:"إنشاء تكوين {{type}} فارغ. يمكنك تعديله بعد الإنشاء.",confirmDelete:"هل أنت متأكد من حذف {{type}} هذا؟",empty:"لا توجد موارد {{type}} بعد.",itemCount_one:"عنصر واحد",itemCount_other:"{{count}} عناصر",count_one:"{{count}} مورد",count_other:"{{count}} موارد",types:{rules:{name:"قواعد السلوك",description:"تحديد قواعد تدفق المحادثة ومنطق القرار"},apicalls:{name:"استدعاءات HTTP",description:"تكوين عمليات تكامل API الخارجية والويب هوك"},output:{name:"مجموعات المخرجات",description:"إدارة قوالب الاستجابة ومتغيرات المخرجات"},dictionary:{name:"القواميس",description:"تحديد أنماط التعرف على الكلمات والعبارات"},llm:{name:"LLM",description:"تكوين نماذج الذكاء الاصطناعي والتعليمات وربط الأدوات"},propertysetter:{name:"مُعيّن الخصائص",description:"تعيين خصائص المحادثة وإدارة ملء الفتحات"},mcpcalls:{name:"استدعاءات MCP",description:"تكوين اتصالات خادم MCP واستدعاءات الأدوات الحتمية"},rag:{name:"قواعد المعرفة",description:"تكوين قواعد المعرفة RAG لاسترجاع المستندات"},snippets:{name:"قصاصات التوجيه",description:"وحدات بناء قابلة لإعادة الاستخدام لتوجيهات النظام"},parser:{name:"المحللات",description:"تحليل المدخلات بمعالجة اللغة الطبيعية وتهيئة القواميس"}},emptyDescription:"أنشئ أول {{type}} لاستخدامه في مسارات العمل.",itemCount_zero:"{{count}} عنصر",itemCount_two:"عنصران",itemCount_few:"{{count}} عناصر",itemCount_many:"{{count}} عنصر",count_zero:"{{count}} مورد",count_two:"موردان",count_few:"{{count}} موارد",count_many:"{{count}} مورد",descriptionPlaceholder:"صف إعداد {{type}} هذا…"},D={compare:"مقارنة",compareVersions:"مقارنة الإصدارات",deployFailed:"فشل النشر",deploying:"جارٍ النشر…",diffHint:"تظهر الإضافات بالأخضر والحذوفات بالأحمر. اليسار = الأقدم، اليمين = الأحدث.",discardAndLeave:"تجاهل ومغادرة",discardMessage:"هل أنت متأكد من تجاهل جميع التغييرات غير المحفوظة؟ لا يمكن التراجع عن هذا الإجراء.",discardTitle:"تجاهل التغييرات؟",newerVersion:"الأحدث",olderVersion:"الأقدم",saveAndTest:"حفظ واختبار",swapVersions:"تبديل الإصدارات",unsavedMessage:"لديك تغييرات غير محفوظة ستُفقد. هل أنت متأكد من المتابعة؟",unsavedTitle:"تغييرات غير محفوظة",formTab:"نموذج",jsonTab:"JSON",save:"حفظ",discard:"تجاهل",saving:"جارٍ الحفظ...",saved:"تم الحفظ بنجاح",saveError:"فشل في الحفظ",dirty:"تغييرات غير محفوظة",version:"الإصدار",versionPicker:"اختر الإصدار",readOnly:"للقراءة فقط",formPlaceholder:"المحرر المرئي قريبًا. استخدم علامة تبويب JSON للتحرير.",jsonSchema:"التحقق من المخطط نشط",cascadeMode:"ستنتشر التغييرات إلى Workflow وAgent الأصل",updateUsageHint:"تحديث Workflows وAgents المحددة إلى الإصدار الجديد؟",updateUsage:"تحديث المحدد",skipUpdate:"تخطي",cascading:"جاري التحديث...",cascadeSuccess:"اكتمل التحديث المتتالي",invalidJson:"JSON غير صالح — انتقل إلى علامة تبويب JSON للإصلاح.",cascadePartialFailure_few:"فشل {{count}} من التحديثات المتتالية",cascadePartialFailure_many:"فشل {{count}} من التحديثات المتتالية",cascadePartialFailure_one:"فشل {{count}} من التحديثات المتتالية",cascadePartialFailure_two:"فشل {{count}} من التحديثات المتتالية",cascadePartialFailure_zero:"فشل {{count}} من التحديثات المتتالية",cascadePartialFailure_other:"فشل {{count}} من التحديثات المتتالية",usedInAgents_few:"مستخدم في {{count}} Agents",usedInAgents_many:"مستخدم في {{count}} Agents",usedInAgents_one:"مستخدم في {{count}} Agent",usedInAgents_two:"مستخدم في {{count}} Agents",usedInAgents_zero:"مستخدم في {{count}} Agents",usedInAgents_other:"مستخدم في {{count}} Agents"},A={condCapabilityMatch:"capabilityMatch",condDeploymentContext:"deploymentContext",strategy_executeAll:"تنفيذ الكل",strategy_executeUntilFirstSuccess:"حتى أول نجاح",invalidValue:"(غير صالح)",appendActions:"إلحاق إجراءات",expressionsAsActions:"تعبيرات كإجراءات",groups:"مجموعات السلوك",addGroup:"إضافة مجموعة",groupName:"اسم المجموعة",executionStrategy:"استراتيجية التنفيذ",rules:"القواعد",addRule:"إضافة قاعدة",ruleName:"اسم القاعدة",actions:"إجراءات",noActions:"لا توجد إجراءات",addAction:"إضافة",actionPlaceholder:"مثال: greet, get_weather",conditions:"شروط",addCondition:"إضافة شرط",conditionType:"نوع الشرط",nestedConditions:"شروط متداخلة",configKey:"مفتاح",configValue:"قيمة",addConfig:"إضافة تكوين",removeRule:"إزالة القاعدة",removeGroup:"إزالة المجموعة",removeCondition:"إزالة الشرط",noGroups:"لم يتم تحديد مجموعات سلوك",noRules:"لا توجد قواعد في هذه المجموعة",noConditions:"لا توجد شروط"},f={noEndpointsFound:"لم يتم العثور على نقاط نهاية في المواصفة",specUrlPlaceholder:"https://api.example.com/openapi.json",targetServerUrl:"URL الخادم الهدف",targetServerUrlPlaceholder:"https://api.example.com",calls:"استدعاءات HTTP",addCall:"إضافة استدعاء HTTP",callName:"اسم الاستدعاء",callDescription:"الوصف",descriptionPlaceholder:"وصف بلغة طبيعية لـ LLM Agents",request:"الطلب",method:"الطريقة",path:"المسار",pathPlaceholder:"/api/endpoint",headers:"الرؤوس",addHeader:"إضافة Header",queryParams:"معاملات الاستعلام",addQueryParam:"إضافة معامل",contentType:"نوع المحتوى",body:"جسم الطلب",bodyPlaceholder:"قالب نص JSON...",parameters:"معاملات (لـ LLM Agents)",paramName:"اسم المعامل",paramDescription:"الوصف",addParam:"إضافة معامل",options:"خيارات",saveResponse:"حفظ الاستجابة",responseObjectName:"اسم كائن الاستجابة",responseHeaderObjectName:"اسم كائن header الاستجابة",fireAndForget:"أرسل وانسَ",batchCalls:"استدعاءات دفعية",iterationObjectName:"اسم كائن التكرار",prePostInstructions:"تعليمات قبل/بعد",preRequest:"قبل الطلب",postResponse:"بعد الاستجابة",removeCall:"إزالة الاستدعاء",noCalls:"لم يتم تكوين استدعاءات HTTP",actions:"إجراءات مشغّلة",noActions:"لا توجد إجراءات",actionPlaceholder:"مثال: get_weather",addHttpCodeValidator:"إضافة مرشح رمز HTTP",httpCodeFilter:"مرشح رمز HTTP",runOnCodes:"التشغيل عند الرموز",skipOnCodes:"التخطي عند الرموز",propName:"اسم الخاصية",propValue:"قيمة أو قالب",overrideTitle:"استبدال القيمة الحالية",override:"استبدال",advancedMapping:"تعيين مسار الكائن",fromPath:"من مسار الكائن",toPath:"إلى مسار الكائن",convertToObject:"التحويل إلى كائن",runOnValidationError:"التشغيل عند خطأ التحقق",noPropertyInstructions:"لا توجد تعليمات خصائص",addPropertyInstruction:"إضافة تعليمة خاصية",pathToTargetArray:"المسار إلى المصفوفة الهدف",iterationObjName:"كائن التكرار",templateFilter:"تعبير التصفية",filterPlaceholder:"مرشح اختياري...",outputType:"نوع الإخراج",outputValue:"قيمة الإخراج",noOutputInstructions:"لا توجد تعليمات بناء الإخراج",addOutputInstruction:"إضافة تعليمة إخراج",qrValue:"قيمة الرد السريع",qrExpressions:"تعبيرات الرد السريع",noQrInstructions:"لا توجد تعليمات بناء الرد السريع",addQrInstruction:"إضافة تعليمة رد سريع",noRetryPolicy:"لا توجد سياسة إعادة محاولة",addRetryPolicy:"إضافة سياسة إعادة محاولة",maxRetries:"الحد الأقصى لإعادة المحاولة",backoffDelayMs:"تأخير التراجع (ms)",retryOnHttpCodes:"إعادة المحاولة عند رموز HTTP",valuePathMatchers:"مطابقات مسار القيمة",noValuePathMatchers:"لا توجد مطابقات مسار القيمة",valuePath:"مسار القيمة",contains:"يحتوي",equals:"يساوي",trueIfNoMatch:"إعادة المحاولة عند عدم التطابق",addValuePathMatcher:"إضافة مطابقة مسار القيمة",removeRetryPolicy:"إزالة سياسة إعادة المحاولة",delayMs:"التأخير (ms)",propertyInstructions:"تعليمات الخصائص",outputBuildInstructions:"تعليمات بناء الإخراج",qrBuildInstructions:"تعليمات بناء الرد السريع",retryBackoff:"إعادة المحاولة والتراجع",discoveredEndpoints:"نقاط النهاية المكتشفة",discoveryError:"تعذّر تحليل مواصفات OpenAPI",openApiSpecUrl:"استيراد من مواصفات OpenAPI",invalidUrl:"أدخل عنوان URL صالحاً بصيغة http:// أو https://",discovering:"جارٍ التحليل…",discoverEndpoints:"اكتشاف نقاط النهاية",retry:"إعادة المحاولة",selectedCount:"محدد",importAppend:"إلحاق بالاستدعاءات",importReplace:"استبدال جميع الاستدعاءات",confirmReplace:"نعم، استبدال الكل",replaceConfirmMessage:"سيؤدي هذا إلى استبدال {{count}} من الاستدعاءات الحالية. هل أنت متأكد؟"},P={continueOnErrorHint:"عند الفشل يستمر المسار؛ ويُكشف الخطأ عند ",descriptionPlaceholder:"وصف بلغة طبيعية لوكلاء LLM",governanceHint:"تحكّم في الأدوات المكشوفة. القائمة البيضاء = هذه فقط؛ القائمة السوداء = استبعاد هذه.",pipelineHint:"استدعاءات أدوات حتمية مُشغّلة بالإجراءات (وضع المسار).",responseObjectName:"اسم كائن الاستجابة",discoveredTools:"الأدوات المتاحة",whitelisted:"في القائمة البيضاء",addToWhitelist:"إضافة إلى القائمة البيضاء",addWhitelist:"قائمة بيضاء",blacklisted:"في القائمة السوداء",addToBlacklist:"إضافة إلى القائمة السوداء",addBlacklist:"قائمة سوداء",noRetryPolicy:"لا توجد سياسة إعادة محاولة",addRetryPolicy:"إضافة سياسة إعادة محاولة",maxAttempts:"الحد الأقصى للمحاولات",backoffDelayMs:"تأخير التراجع (ms)",backoffMultiplier:"مضاعف التراجع",maxBackoffDelayMs:"الحد الأقصى للتراجع (ms)",removeRetryPolicy:"إزالة سياسة إعادة المحاولة",callName:"اسم الاستدعاء",removeCall:"إزالة الاستدعاء",description:"الوصف",toolName:"اسم الأداة",parameterSchema:"مخطط المعاملات",triggerActions:"إجراءات مشغّلة",toolArguments:"وسيطات الأداة",addArgument:"إضافة وسيطة",saveResponse:"حفظ الاستجابة",continueOnError:"المتابعة عند الخطأ",retryBackoff:"إعادة المحاولة والتراجع",preRequest:"قبل الطلب",propertyInstructions:"تعليمات الخصائص",postResponse:"بعد الاستجابة",outputBuildInstructions:"تعليمات بناء الإخراج",qrBuildInstructions:"تعليمات بناء الرد السريع",discoveryError:"تعذّر الاتصال بخادم MCP",serverConnection:"اتصال الخادم",displayName:"الاسم المعروض",serverUrl:"عنوان URL لخادم MCP",discovering:"جارٍ الاتصال…",discoverTools:"اكتشاف الأدوات",transport:"النقل",timeoutMs:"المهلة (ms)",apiKey:"مفتاح API / مرجع Vault",toolGovernance:"حوكمة الأدوات",retry:"إعادة المحاولة",noToolsFound:"لم يتم العثور على أدوات على هذا الخادم",whitelist:"قائمة بيضاء (السماح فقط)",blacklist:"قائمة سوداء (استبعاد)",pipelineCalls:"استدعاءات Pipeline",addCall:"إضافة استدعاء MCP"},S=JSON.parse('{"addCustomInstruction":"إضافة تعليمة","addKnowledgeBase":"إضافة مرجع قاعدة معرفة","addMaskingRule":"إضافة قاعدة","addToolLimit":"إضافة حد أداة","anchorFirstSteps":"تثبيت الخطوات الأولى","anchorFirstStepsHint":"تُحتفظ الأدوار الافتتاحية دائماً (0 = لا شيء)","conversationMemory":"ذاكرة المحادثة","conversationMemoryDesc":"تُضغط الأدوار الأقدم تدريجياً في ملخّص متجدد. يرى LLM: [موجه النظام + الملخّص] + [آخر N أدوار حرفياً]. تتيح أداة conversationRecall المدمجة للوكيل التعمق في الأدوار الملخَّصة عند الطلب.","counterweight":"الموازنات السلوكية","counterweightCustom":"تعليمات مخصصة","counterweightCustomHint":"اتركه فارغاً لاستخدام الإعداد المسبق المدمج للمستوى المحدد.","counterweightCustomOverride":"تتجاوز التعليمات المخصصة نص المستوى المُعدّ مسبقاً بالكامل.","counterweightDesc":"أدرج تعليمات أمان في موجه النظام. تحمي من الثقة المفرطة والهلوسة والتصرف دون إشراف.","counterweightLevel":"مستوى الأمان","counterweightLevelCautious":"حذر","counterweightLevelNormal":"عادي (بدون إدراج)","counterweightLevelStrict":"صارم","counterweightPlacement":"الموضع","counterweightPlacementPrefix":"قبل موجه النظام","counterweightPlacementSuffix":"بعد موجه النظام","counterweightStrictNote":"يُخفَّض الوضع الصارم تلقائياً إلى حذر أثناء التنفيذ المجدول/الدفعي لمنع سلوك \\"خطوة واحدة في كل مرة\\" المدمّر.","defaultMaxChars":"الحد الأقصى الافتراضي للأحرف","defaultMaxCharsHint":"(~12k رمز عند 50000)","enableSummary":"تفعيل الملخّص المتجدد","enableWorkflowRag":"الاكتشاف التلقائي لـ RAG مسار العمل","excludeProps":"استبعاد الخصائص من الملخّص","excludePropsDesc":"تخطَّ الحقائق الملتقطة بالفعل كخصائص دائمة — ركّز على الاستدلال والسياق الضمني","httpCallRag":"RAG عبر httpCall (بلا بنية تحتية)","httpCallRagHint":"نفّذ httpCall مُسمّى قبل استدعاء LLM. تُدرَج الاستجابة كسياق — دون الحاجة إلى مخزن متجهات.","httpCallRagPlaceholder":"مثل: search_docs، query_wiki","identityMasking":"إخفاء الهوية","identityMaskingDesc":"امنع LLM من الكشف عن اسم نموذجه أو مزوّده عند الاستفسار.","identityMaskingEmptyWarning":"الإخفاء مُفعّل لكنه بلا قواعد. أضف قاعدة واحدة على الأقل ليصبح الإخفاء ساري المفعول.","identityMaskingRulePlaceholder":"مثل: لا تكشف أبداً أنك نموذج لغوي للذكاء الاصطناعي","identityMaskingRules":"قواعد الإخفاء","identityMaskingRulesHint":"يلزم التفعيل ووجود قاعدة واحدة على الأقل معاً ليصبح الإخفاء ساري المفعول.","injectionStrategy":"الإدراج","kbNamePlaceholder":"مثل: product-docs","knowledgeBases":"قواعد المعرفة","knowledgeBasesHint":"أشِر صراحةً إلى قواعد المعرفة بالاسم. يجب أن يطابق كل اسم RagConfiguration في مسار العمل.","legacyRag":"RAG القديم (مهمَل)","legacyRagHint":"يستخدم هذا التكوين تنسيق retrievalAugmentor المهمَل. انتقل إلى الأوضاع أعلاه.","maxContextTokens":"الحد الأقصى لرموز السياق","maxContextTokensHint":"-1 = استخدام عدد الخطوات بدلاً من ذلك","maxRecallHint":"لكل استدعاء استرجاع","maxRecallTurns":"الحد الأقصى لأدوار الاسترجاع","maxSummaryTokens":"الحد الأقصى لرموز الملخّص","noKnowledgeBases":"لم تتم الإشارة إلى أي قواعد معرفة","perToolLimits":"تجاوزات لكل أداة","prePostDesc":"قم بتكوين تعليمات الخصائص التي تعمل قبل كل طلب LLM، وتعليمات المخرجات/الخصائص التي تعمل بعد كل استجابة.","promptSafety":"أمان الموجه","ragDefaults":"معاملات الاسترجاع الافتراضية","recentWindow":"النافذة الحديثة (خطوات)","recentWindowHint":"الأدوار المحتفظ بها حرفياً","removeLegacyRag":"إزالة التكوين القديم","strategyPaginate":"ترقيم الصفحات (يجلب LLM المزيد)","strategySummarize":"تلخيص (عبر نموذج رخيص)","strategyTruncate":"اقتطاع (قطع صارم)","summarizationPrompt":"موجه تلخيص مخصص (اختياري)","summarizationPromptPlaceholder":"اتركه فارغاً لاستخدام الموجه المنظم الافتراضي الذي يحافظ على الأهداف والقرارات والاستدلال والنبرة.","summarizeInfoBanner":"يستخدم المُلخِّص نفس المزوّد ومفتاح API لهذه المهمة. يُستبدل اسم النموذج فقط بنسخة أرخص (مثل gpt-4o-mini).","summarizerModel":"نموذج المُلخِّص","summarizerModelHint":"(يعود إلى الاقتطاع إذا كان فارغاً)","summarizerModelPlaceholder":"مثل: gpt-4o-mini","summaryModel":"نموذج الملخّص","summaryProvider":"مزوّد الملخّص","summaryProviderHint":"استخدم نموذجاً رخيصاً/سريعاً للتلخيص","tokenWindow":"نافذة سياق مدركة للرموز","tokenWindowDesc":"استبدل السجل المستند إلى عدد الخطوات بتعبئة مدركة للرموز. عند ضبط maxContextTokens (> 0)، يُدرج المحرك أكبر عدد ممكن من الأدوار الحديثة ضمن الميزانية، مع تثبيت الأدوار الافتتاحية اختيارياً.","toolResponseLimits":"حدود استجابة الأدوات","toolResponseLimitsDesc":"اقتطع مخرجات الأدوات المطوّلة قبل إعادة إدراجها في نافذة سياق LLM. يمنع تضخّم السياق.","truncationStrategy":"الاستراتيجية","workflowRagHint":"يكتشف تلقائياً جميع خطوات RAG من مسار العمل. يُستخدم فقط عند عدم إدراج قواعد معرفة صريحة أعلاه.","tasks":"مهام LLM","addTask":"إضافة مهمة","noTasks":"لم يتم تكوين مهام LangChain","removeTask":"إزالة المهمة","taskId":"معرف المهمة","description":"الوصف","descriptionPlaceholder":"ما تفعله هذه المهمة","triggerActions":"إجراءات مشغّلة","noActions":"لا توجد إجراءات","actionPlaceholder":"مثال: help, chat","systemPrompt":"موجه النظام","systemPromptPlaceholder":"أنت مساعد مفيد...","modelParams":"معاملات النموذج","addParam":"إضافة معامل","agentMode":"وضع الوكيل","enableBuiltInTools":"تفعيل الأدوات المدمجة","toolWhitelist":"قائمة بيضاء (فارغ = الكل)","enableHttpCallTools":"اكتشاف تلقائي لأدوات HTTP Call","enableHttpCallToolsDesc":"عرض جميع إضافات httpcall من Workflow تلقائياً كأدوات LLM","httpCallTools":"روابط أدوات اتصال HTTP","httpCallToolsHint":"URIs httpcall صريحة (بالإضافة إلى المكتشفة تلقائياً)","addTool":"إضافة URI أداة","mcpServers":"خوادم MCP","mcpServersDesc":"خوادم MCP خارجية تصبح أدواتها متاحة لـ LLM","addMcpServer":"إضافة خادم MCP","mcpUrlPlaceholder":"http://localhost:7070/mcp","mcpName":"الاسم","mcpApiKey":"API Key / مرجع vault","historyLimit":"حد السجل","historyLimitHint":"(-1 = غير محدود)","budgetPerf":"الميزانية والأداء","maxBudget":"الميزانية القصوى ($)","costTracking":"تتبع التكاليف","toolCaching":"خبأ الأدوات","rateLimiting":"حدود المعدل","defaultRate":"المعدل الافتراضي (طلب/دقيقة)","prePostInstructions":"تعليمات قبل/بعد","preRequest":"قبل الطلب","postResponse":"بعد الاستجابة","enableMcpCallTools":"اكتشاف أدوات MCP تلقائياً","enableMcpCallToolsDesc":"كشف جميع إضافات mcpcalls من مسار العمل تلقائياً كأدوات LLM","a2aAgents":"وكلاء A2A","a2aAgentsDesc":"وكلاء عن بُعد متوافقون مع A2A تصبح مهاراتهم أدوات LLM","addA2aAgent":"إضافة وكيل A2A","a2aUrlPlaceholder":"https://remote.example.com/a2a/agents/...","a2aName":"الاسم المعروض","a2aApiKey":"${vault:my-a2a-key}","a2aTimeout":"المهلة (مللي ثانية)","a2aSkillsFilter":"فلتر المهارات (فارغ = الكل)","cascade":"تسلسل النماذج","cascadeDesc":"Try a cheap/fast model first. If confidence is too low, automatically escalate to a more powerful (and expensive) model.","cascadeEnable":"تفعيل تسلسل النماذج","cascadeStrategy":"الاستراتيجية","strategyCascade":"تصعيد تسلسلي","strategyParallel":"متوازي (مستقبلي)","cascadeStrategyHint":"يبدأ بالنموذج الأرخص ويُصعّد عند انخفاض الثقة","cascadeEvalStrategy":"تقييم الثقة","cascadeEvalHint":"كيفية تحديد ما إذا كانت الاستجابة كافية","evalStructured":"مخرجات منظمة (JSON)","evalHeuristic":"استدلالي (كشف التردد)","evalJudge":"نموذج حكم (LLM ثانوي)","evalNone":"بدون (قبول دائم)","cascadeInAgent":"استخدام التسلسل أيضاً في وضع الوكيل (مع الأدوات)","cascadeSteps":"Cascade Steps","cascadeStepsDesc":"Order matters: first step tried first. Last step is always accepted.","cascadeModelName":"مثال: claude-sonnet-5","cascadeConfidence":"Min. Confidence (0-1)","cascadeConfidencePlaceholder":"فارغ = قبول دائم","cascadeTimeout":"المهلة (مللي ثانية)","addCascadeStep":"إضافة مرحلة تسلسل","cascadeReturnBest":"إرجاع الاستجابة الأعلى تقييماً عبر المراحل","cascadeEvalNoneHint":"تقييد الثقة معطّل — يُقبل رد المرحلة الأولى دائماً.","cascadeCeilings":"الحدود القصوى والتسعير","cascadeMaxDuration":"أقصى مدة إجمالية (مللي ثانية)","cascadeMaxCost":"أقصى تكلفة لكل تشغيل ($)","cascadeUnlimited":"بلا حدود","cascadeInputPrice":"$ الإدخال / 1M رمز","cascadeOutputPrice":"$ الإخراج / 1M رمز","cascadePricingHint":"يغذّي تسعير الرموز الافتراضي تتبّع التكلفة والحد الأقصى للتكلفة. يمكن للمراحل الفردية تجاوزه.","cascadeJudgeModel":"نموذج الحكم","cascadeJudgeModelDesc":"نموذج منفصل (رخيص عادةً) يقيّم ثقة كل استجابة.","cascadeJudgeApiKey":"مفتاح API لنموذج الحكم","cascadeHeuristic":"ضبط الاستدلال","cascadeHeuristicDesc":"تجاوزات اختيارية لكشف التردد والرفض. تستخدم الحقول الفارغة الإعدادات الإنجليزية الافتراضية المدمجة. ترجم قوائم العبارات للنشر بغير الإنجليزية.","cascadeHeuristicDefaults":"الإعدادات الافتراضية المدمجة","cascadeHeuristicPhrasePlaceholder":"أضف عبارة…","cascadeHeuristicPhrasesLow":"عبارات التردد (ثقة منخفضة)","cascadeHeuristicPhrasesRefusal":"عبارات الرفض","cascadeHeuristicShortLen":"طول الاستجابة القصيرة","cascadeHeuristicShortScore":"درجة القصيرة","cascadeHeuristicRefusalScore":"درجة الرفض","cascadeHeuristicHedgingScore":"درجة التردد","cascadeHeuristicDefaultScore":"الدرجة الافتراضية","cascadeStepApiKey":"مفتاح API","cascadeStepApiKeyPlaceholder":"يرث مفتاح المهمة إذا كان فارغاً","cascadeCrossProvider":"مزوّد مختلف","cascadeStepAdvanced":"متقدم (التسعير والمعاملات)","cascadeStepInputPrice":"$ الإدخال / 1M","cascadeStepOutputPrice":"$ الإخراج / 1M","cascadeStepPriceInherit":"افتراضي التسلسل","cascadeStepParams":"معاملات إضافية","cascadeStepAddParam":"إضافة معامل","cascadeIssues":{"NO_STEPS":"التسلسل مُفعّل لكن بلا مراحل — سيفشل عند تشغيله.","UNKNOWN_STRATEGY":"استراتيجية غير معروفة \\"{{strategy}}\\" — سيعمل التسلسل بالتتابع.","PARALLEL_NOT_IMPLEMENTED":"الاستراتيجية المتوازية غير مُنفّذة بعد — تعمل المراحل بالتتابع.","UNKNOWN_EVAL_STRATEGY":"تقييم ثقة غير معروف \\"{{strategy}}\\" — سيُعتمد المخرجات المنظمة افتراضياً.","JUDGE_MODEL_MISSING":"تقييم نموذج الحكم بلا نموذج حكم مُهيّأ — تعود الثقة إلى الاستدلال.","JUDGE_CROSS_PROVIDER_NO_APIKEY":"يستخدم نموذج الحكم مزوّداً مختلفاً لكن بلا مفتاح API خاص به — سيرث مفتاح المهمة.","MAX_DURATION_NONPOSITIVE":"يجب أن تكون أقصى مدة إجمالية أكبر من 0.","MAX_COST_NEGATIVE":"لا يمكن أن تكون أقصى تكلفة لكل تشغيل سالبة.","CASCADE_INPUT_PRICE_NEGATIVE":"لا يمكن أن يكون سعر إدخال التسلسل سالباً.","CASCADE_OUTPUT_PRICE_NEGATIVE":"لا يمكن أن يكون سعر إخراج التسلسل سالباً.","CONVERT_TO_OBJECT_STRUCTURED":"convertToObject غير متوافق مع ثقة المخرجات المنظمة — سيستخدم التسلسل الاستدلال بدلاً منها.","STEP_INPUT_PRICE_NEGATIVE":"لا يمكن أن يكون سعر إدخال المرحلة {{step}} سالباً.","STEP_OUTPUT_PRICE_NEGATIVE":"لا يمكن أن يكون سعر إخراج المرحلة {{step}} سالباً.","STEP_CONFIDENCE_OUT_OF_RANGE":"يجب أن تكون ثقة المرحلة {{step}} بين 0 و1.","STEP_DEAD_NULL_THRESHOLD":"المرحلة {{step}} بلا حد أدنى للثقة — تصبح المراحل اللاحقة غير قابلة للوصول.","STEP_TIMEOUT_NONPOSITIVE":"يجب أن تكون مهلة المرحلة {{step}} أكبر من 0.","STEP_CROSS_PROVIDER_NO_APIKEY":"تستخدم المرحلة {{step}} مزوّداً مختلفاً لكن بلا مفتاح API خاص بها — سترث مفتاح المهمة."},"parallelExecution":"تنفيذ متوازي للأدوات","parallelExecutionDesc":"Run independent tool calls concurrently","parallelTimeout":"المهلة (مللي ثانية)","maxToolIterations":"أقصى تكرارات الأدوات","maxToolIterationsHint":"(افتراضي 10)","toolRateLimits":"حدود المعدل لكل أداة","toolRateLimitsDesc":"Override default rate for specific tools","toolName":"اسم الأداة","addToolRate":"إضافة حد معدل","retryConfig":"تكوين إعادة المحاولة","retryDesc":"Configure automatic retries with exponential backoff.","retryMaxAttempts":"أقصى عدد محاولات","retryDelay":"التأخير الأولي (مللي ثانية)","retryMultiplier":"مضاعف التراجع","retryMaxDelay":"أقصى تأخير (مللي ثانية)","ragConfig":"RAG (استرجاع المعرفة)","ragDesc":"Augment LLM responses with retrieved documents.","ragHttpCall":"عنوان استدعاء HTTP","ragEmbeddingModel":"نموذج التضمين","ragEmbeddingModelPlaceholder":"مثال: text-embedding-3-small","ragEmbeddingStore":"مخزن التضمين","ragEmbeddingStorePlaceholder":"مثال: pgvector, qdrant","ragMaxResults":"أقصى عدد نتائج","ragMinScore":"Min Similarity Score (0-1)","moveDown":"تحريك لأسفل","moveUp":"تحريك لأعلى","removeStep":"إزالة الخطوة","execution":"التنفيذ","budgetCosts":"الميزانية والتكاليف","preRequestDesc":"تعيين أو تحويل الخصائص قبل تنفيذ LLM.","postResponseDesc":"معالجة مخرجات LLM: تعيين الخصائص، وبناء رسائل المخرجات، وإنشاء ردود سريعة.","postPropertyInstructions":"تعليمات الخصائص","postOutputInstructions":"تعليمات المخرجات","postQrInstructions":"تعليمات الردود السريعة","allSkills":"جميع المهارات","skillPlaceholder":"مثال: order-tracking","modeAgent":"وكيل","modeChat":"دردشة","perMinute":"/دقيقة","allTools":"جميع الأدوات","selectSpecific":"اختيار محدد","allToolsInfo":"جميع الأدوات المدمجة ({{count}}) متاحة لـ LLM. اختر «اختيار محدد» لتحديد الأدوات المكشوفة.","availableTools":"الأدوات المتاحة","toolCount":"{{selected}} من {{total}} محددة","toolSources":"مصادر أدوات مسار العمل","toolSourcesInfo":"كلا المصدرين مفعلان افتراضياً — جميع استدعاءات HTTP وMCP في مسار العمل تُكشف تلقائياً كأدوات LLM. عطّل مصدراً لاستبعاده.","included":"مُضمّن","toolApprovals":"حجب موافقة الأدوات (لكل مهمة)","toolApprovalsEnable":"تجاوز موافقات الأدوات لهذه المهمة","toolApprovalsDesc":"يتجاوز موافقات الأدوات على مستوى الوكيل لهذه المهمة فقط — استبدال كامل، وليس دمجًا.","responseValidation":"التحقق من الاستجابة واستردادها","responseValidationDesc":"تحكّم في كيفية تفاعل المحرك مع دور فارغ أو مقتطع أو مُصفّى بالمحتوى أو مرفوض أو منتهي المهلة. يستبدل \\"الاحتياطي\\" برسالة جاهزة؛ ويُفشل \\"الخطأ\\" الدور؛ ويسجّل \\"التحذير\\" ويتابع؛ ولا يفعل \\"التجاهل\\" شيئًا.","rvEnable":"تمكين التحقق من الاستجابة","rvDisabledInfo":"يتم حفظ السياسات أدناه لكنها تسري فقط أثناء تمكين التحقق.","rvActionIgnore":"تجاهل","rvActionWarn":"تحذير (تسجيل والمتابعة)","rvActionFallback":"احتياطي (رسالة جاهزة)","rvActionError":"خطأ (إفشال الدور)","rvOnEmpty":"استجابة فارغة","rvOnEmptyHint":"لم يُرجع LLM أي شيء (فارغ أو null)","rvOnTruncation":"استجابة مقتطعة","rvOnTruncationHint":"تم قطع الاستجابة (finishReason=LENGTH)","rvOnContentFilter":"مُصفّى بالمحتوى","rvOnContentFilterHint":"تم حظر الاستجابة بواسطة مرشّح محتوى المزود","rvOnRefusal":"رفض","rvOnRefusalHint":"رفض LLM الإجابة (كشف إرشادي)","rvOnStreamingTimeout":"انتهاء مهلة البث","rvOnStreamingTimeoutHint":"انتهت مهلة استجابة بث قبل اكتمالها","streamingTimeoutSeconds":"مهلة البث (بالثواني)","streamingTimeoutSecondsHint":"يتجاوز الإعداد الافتراضي للمحرك (120 ثانية). ينطبق فقط أثناء البث؛ فارغ = استخدام الافتراضي.","taskPricing":"تسعير الاستدعاءات العادية","taskPricingDesc":"يحدد سعر استدعاءات النموذج العادية (غير المتسلسلة) لهذه المهمة لأغراض تتبع التكلفة وسقوف تكلفة المجموعة. بدون سعر (فارغ) يُحتسب كـ 0$."}'),C={labelPlaceholder:"تسمية الرابط...",pathPlaceholder:"مسار الرابط...",altPlaceholder:"نص بديل...",uriPlaceholder:"رابط الصورة...",language:"اللغة",langPlaceholder:"مثال: en, ar",outputSets:"مجموعات المخرجات",addOutputSet:"إضافة مجموعة مخرجات",noOutputSets:"لم يتم تكوين مجموعات مخرجات",actionName:"اسم الإجراء",timesOccurred:"×",removeOutput:"إزالة",outputs:"المخرجات",alternativeGroup:"مجموعة بديلة",addAlternative:"إضافة بديل",addOutputGroup:"إضافة مجموعة مخرجات",textPlaceholder:"نص المخرج...",urlPlaceholder:"الرابط…",delayMs:"تأخير (مللي ثانية)",quickReplies:"ردود سريعة",noQuickReplies:"لا توجد Quick Replies",addQuickReply:"إضافة Quick Reply",qrValue:"نص الزر",qrExpressions:"التعبيرات",default:"افتراضي",invalidJson:"JSON غير صالح",buttonTypePlaceholder:"نوع الزر (مثل postback)",buttonLabelPlaceholder:"التسمية...",onPressPlaceholder:'{"action":"..."}',subTypePlaceholder:"النوع الفرعي (مثل text، email)",inputPlaceholderPlaceholder:"نص العنصر النائب...",inputLabelPlaceholder:"التسمية...",defaultValuePlaceholder:"القيمة الافتراضية...",minLength:"الحد الأدنى للطول",minLengthShort:"الأدنى",maxLength:"الحد الأقصى للطول",maxLengthShort:"الأقصى",validationMsgPlaceholder:"رسالة خطأ التحقق...",jsonPlaceholder:'{"key":"value"}'},k={setters:"معيني الخصائص",addSetter:"إضافة Setter",noSetters:"لم يتم تكوين Property Setters",removeSetter:"إزالة",triggerActions:"إجراءات مشغّلة",noActions:"لا توجد إجراءات",actionPlaceholder:"مثال: greet, fallback",properties:"الخصائص",noProperties:"لا توجد خصائص",addProperty:"إضافة خاصية",propName:"اسم الخاصية",propValue:"القيمة / التعبير",fromPath:"مسار المصدر",fromObjectPath:"fromObjectPath",override:"استبدال",propsCount:"خصائص",untitled:"(بدون إجراءات)",openEditor:"تحرير في المحرر",visibilityTitle:"الوكلاء الذين يمكنهم رؤية خاصية longTerm هذه",editValue:"تعديل القيمة",toggleGroup:"تبديل مجموعة الخصائص"},b={language:"اللغة",langPlaceholder:"مثال: en, ar",words:"الكلمات",addWord:"إضافة كلمة",wordPlaceholder:"مثال: مرحبا",phrases:"العبارات",addPhrase:"إضافة عبارة",phrasePlaceholder:"مثال: صباح الخير",regExs:"التعبيرات النظامية",addRegEx:"إضافة RegEx",regexPlaceholder:"تعبير نظامي",expressionPlaceholder:"مثال: greeting(hello)",frequency:"التكرار",none:"لم يتم تحديد أي"},w={title:"تهيئة المحلل",configure:"تهيئة",config:"الإعدادات",appendExpressions:"إلحاق التعبيرات",includeUnused:"تضمين التعبيرات غير المستخدمة",includeUnknown:"تضمين التعبيرات غير المعروفة",dictionaries:"القواميس",builtInDicts:"القواميس المدمجة",regularDicts:"القواميس العادية",addDict:"إضافة",removeDict:"إزالة القاموس",noRegularDicts:"لم يتم تهيئة أي قواميس عادية",dictUri:"عنوان URI لمورد القاموس",dictUriPlaceholder:"eddi://ai.labs.dictionary/dictionarystore/dictionaries/?version=",corrections:"التصحيحات",distance:"المسافة",normalizers:"المُعيِّرات",removePunctuation:"إزالة علامات الترقيم",regexPattern:"النمط",dict:{integer:"قاموس الأعداد الصحيحة",decimal:"قاموس الأعداد العشرية",punctuation:"قاموس علامات الترقيم",email:"قاموس البريد الإلكتروني",time:"قاموس التعبيرات الزمنية",ordinalNumber:"قاموس الأعداد الترتيبية"},corr:{levenshtein:"تصحيح ليفنشتاين",phonetic:"تصحيح صوتي",mergedTerms:"تصحيح المصطلحات المدمجة"},norm:{punctuation:"مُعيِّر علامات الترقيم",specialCharacter:"مُعيِّر الأحرف الخاصة",contractedWords:"مُعيِّر الكلمات المختصرة",allowedCharacter:"مُعيِّر الأحرف المسموحة"},regularDictsHint:"كلماتك وعباراتك وأنماطك الخاصة، مخزَّنة كموارد قواميس.",openDict:"فتح القاموس في علامة تبويب جديدة"},E={title:"إضافة قاموس عادي",searchPlaceholder:"البحث في القواميس…",added:"مُضاف",empty:"لا توجد قواميس بعد",emptyDescription:"يُعلِّم القاموس المحلِّل كلماتك وعباراتك وأنماطك الخاصة.",create:"إنشاء قاموس",createTitle:"قاموس جديد",createHint:"يُنشأ فارغًا ويُربط بهذا المحلِّل فورًا — أضف الكلمات والعبارات والأنماط في محرِّر القواميس.",createFailed:"تم إنشاء القاموس ولكن تعذَّر ربطه.",created:"تم إنشاء القاموس وربطه",defaultName:"قاموس جديد",descriptionPlaceholder:"ما الذي يُعلِّمه هذا القاموس للمحلِّل…",manual:"الربط عبر معرّف URI بدلاً من ذلك",createdUnnamed:"تم إنشاء القاموس وربطه، لكن تعذَّر حفظ اسمه — أعد تسميته في محرِّر القواميس."},M={activeConversations:"المحادثات النشطة",eventHistory:"سجل الأحداث",noActiveQueues:"لا توجد محادثات نشطة قيد المعالجة",payload:"الحمولة",successRate:"معدل النجاح",tasksPerSec:"مهمة/ث",totalPending:"في الانتظار",confirmDiscardDescription:"يزيل نهائيًا المهمة المُرسَلة إلى الرسائل الميتة. لا يمكن إعادة تشغيلها بعد ذلك. لا يمكن التراجع.",confirmDiscardTitle:"تجاهل إدخال الرسائل الميتة؟",title:"لوحة تحكم المنسق",subtitle:"مراقبة معالجة المحادثات وإدارة إدخالات Dead-Letter",type:"نوع Coordinator",connection:"الاتصال",processed:"المهام المعالجة",deadLettered:"رسائل ميتة",activeQueues:"قوائم الانتظار النشطة",queued:"في الانتظار",deadLetterTitle:"الرسائل الميتة",noDeadLetters:"لا توجد إدخالات Dead-Letter",colId:"ID",colConversation:"محادثة",colError:"خطأ",colTime:"الوقت",colActions:"إجراءات",replay:"إعادة التشغيل",discard:"تجاهل",purgeAll:"حذف الكل",confirmPurge:"حذف الكل؟",yes:"نعم",cancel:"إلغاء",replaySuccess:"تم إعادة تشغيل Dead-Letter",replayError:"فشل إعادة التشغيل",discardSuccess:"تم تجاهل Dead-Letter",discardError:"فشل التجاهل",purgeSuccess:"تم حذف جميع إدخالات Dead-Letter",purgeError:"فشل الحذف",empty:"لا تتوفر بيانات المنسق",emptyHint:"قد تكون خدمة المنسق لا تزال في طور البدء. ستظهر البيانات تلقائيًا.",lastNSnapshots:"آخر {{count}} لقطة"},R={expand:"توسيع",expandHint:"ملء الشاشة (Ctrl+Shift+F)",close:"تم",lines:"سطور",chars:"أحرف",fullscreenTitle:"محرر المحتوى",fullscreenDescription:"محرر ملء الشاشة. اضغط Escape للإغلاق."},L={newLogs:"سجلات جديدة",title:"السجلات",description:"مراقبة تدفق السجلات في الوقت الفعلي أو البحث في السجلات التاريخية.",tabLive:"مباشر",tabHistory:"السجل",connected:"متصل",disconnected:"غير متصل",filterAgent:"معرف الوكيل…",filterConversation:"معرّف المحادثة...",filterInstance:"معرّف المثيل...",allLevels:"جميع المستويات",pause:"إيقاف مؤقت",resume:"استئناف",clear:"مسح",search:"بحث",waitingForLogs:"بانتظار السجلات...",loadingRecentLogs:"جاري تحميل السجلات الحديثة...",noRecentLogs:"لا يوجد نشاط سجل حديث.",noRecentLogsHint:"ستظهر السجلات الجديدة هنا أثناء تدفقها من الواجهة الخلفية.",connectingStream:"جارٍ الاتصال بالبث...",noHistoryLogs:"لم يتم العثور على سجلات تاريخية.",entryCount:"{{count}} إدخال",showStacktrace:"عرض Stacktrace ({{count}} إطار)",hideStacktrace:"إخفاء Stacktrace",allAgents:"جميع الوكلاء",allConversations:"جميع المحادثات",waitingHint:"ستظهر السجلات هنا أثناء تدفقها من الخلفية.",noHistoryHint:"حاول تعديل الفلاتر أو البحث عن وكيل أو محادثة مختلفة.",searchConversations:"بحث بالمعرف أو الوكيل أو المستخدم…",stepsCount:"{{count}} خطوات",noConversationsFound:"لم يتم العثور على محادثات",useConversationId:"استخدام المعرف: {{id}}",searchLogs:"بحث في السجلات…",errors:"أخطاء",warnings:"تحذيرات",infos:"معلومات",debugs:"تصحيح",filteredCount:"{{shown}} من {{total}} إدخالات",copyEntry:"نسخ إدخال السجل",export:"تصدير",stateReady:"جاهز",stateActive:"نشط",stateError:"خطأ",stateEnded:"منتهي"},I=JSON.parse('{"loadError":"تعذّر تحميل الأسرار","allAgents":"جميع الوكلاء","allowedAgents":"الوكلاء المسموح لهم","allowedAgentsHint":"اتركه فارغاً لجميع الوكلاء. تساعد إضافة معرفات الوكلاء على تتبّع أي الوكلاء يستخدم هذا السر.","allowedAgentsLabel":"الوكلاء المسموح لهم (اختياري)","allowedAgentsPlaceholder":"اكتب معرف الوكيل واضغط Enter (فارغ = جميع الوكلاء)","deleteKey":"حذف {{key}}","hideValue":"إخفاء القيمة","newValuePlaceholder":"قيمة سر جديدة…","rotate":"تدوير","rotateDesc":"أدخل القيمة الجديدة. ستستمر المراجع الحالية في التحوّل إلى القيمة المُحدَّثة.","rotateKey":"تدوير {{key}}","rotateSuccess":"تم تدوير السر \\"{{key}}\\"","rotateTitle":"تدوير \\"{{key}}\\"","showValue":"إظهار القيمة","title":"خزنة الأسرار","description":"إدارة Secrets المشفرة في الخزنة. لا تُكشف القيم أبداً.","tenantId":"معرف المستأجر","refresh":"تحميل Secrets","create":"إضافة Secret","createTitle":"إضافة Secret","keyName":"اسم المفتاح","keyNameLabel":"اسم المفتاح","keyNamePlaceholder":"مثال: apiKey, dbPassword","valueLabel":"قيمة Secret","valuePlaceholder":"أدخل قيمة Secret…","storeWarning":"سيتم تشفير القيمة. لا يمكن استرجاعها بعد التخزين.","store":"تخزين Secret","storeSuccess":"تم تخزين Secret \\"{{key}}\\"","deleteSuccess":"تم حذف Secret \\"{{key}}\\"","created":"تاريخ الإنشاء","lastAccessed":"آخر وصول","checksum":"مجموع اختباري","actions":"إجراءات","confirmDeleteTitle":"حذف Secret","confirmDeleteMessage":"هل أنت متأكد من الحذف الدائم لـ \\"{{key}}\\"؟ لا يمكن التراجع عن هذا.","empty":"لم يتم العثور على Secrets","emptyHint":"لا توجد Secrets مخزّنة للمستأجر \\"{{tenant}}\\" بعد. انقر على \\"إضافة Secret\\" لإنشاء واحد.","vaultUp":"Vault متصل","vaultDown":"Vault غير متصل","descriptionLabel":"الوصف (اختياري)","descriptionPlaceholder":"مثل: مفتاح API لـ OpenAI للإنتاج","descriptionCol":"الوصف","reference":"المرجع","willUseRef":"المرجع:","copyRef":"نسخ مرجع الخزنة","refCopied":"تم النسخ: {{ref}}","lastRotated":"آخر تدوير","scopeExplanation":"الأسرار محددة لكل مستأجر ومشتركة عبر جميع الوكلاء. استخدم ${vault:keyName} للرجوع إليها. الإدارة عن طريق كتابة الإعدادات.","creatingFor":"يحفظ في المستأجر \\"{{tenant}}\\" — متاح لجميع الوكلاء","vaultNotConfigured":"خزنة الأسرار غير مهيأة","viewDocs":"عرض المستندات","selectAgentFirst":"اختر وكيلاً أولاً","dangerZoneTitle":"دورة حياة مفتاح التشفير","dangerZoneDesc":"إجراءات استرداد تشغيلية للمفاتيح التشفيرية الخاصة بالـ Vault. استخدمها لتدوير المفاتيح أو استعادة الوصول بعد تغيير المفتاح الرئيسي. يختلف هذا عن تدوير قيمة سر فردي أعلاه.","rotateDekTitle":"تدوير مفتاح التشفير (DEK)","rotateDekBlurb":"آمن — دون إعادة تشغيل. يُنشئ مفتاح تشفير بيانات جديدًا لكل مستأجر ويعيد تشفير جميع أسرار هذا المستأجر.","rotateDekAction":"تدوير DEK","rotateDekConfirmTitle":"تدوير مفتاح التشفير (DEK)؟","rotateDekConfirm":"تدوير DEK الآن","rotateKekTitle":"تدوير المفتاح الرئيسي (KEK)","rotateKekBlurb":"يعيد تشفير جميع مفاتيح DEK للمستأجرين بمفتاح رئيسي جديد. يتطلب تحديث EDDI_VAULT_MASTER_KEY وإعادة التشغيل بعد ذلك.","rotateKekAction":"تدوير المفتاح الرئيسي","rotateKekConfirmTitle":"تدوير المفتاح الرئيسي (KEK)؟","rotateKekConfirmDesc":"يعيد تشفير مفتاح تشفير البيانات لكل مستأجر بمفتاح رئيسي جديد. تبقى قيم الأسرار نفسها دون تغيير.","rotateKekConfirm":"تدوير المفتاح الرئيسي الآن","kekTlsWarning":"يتم إرسال كلا المفتاحين في نص الطلب. قم بذلك فقط عبر اتصال TLS (HTTPS) حتى لا تنكشف المفاتيح أثناء النقل.","kekOldKeyLabel":"المفتاح الرئيسي الحالي","kekOldKeyPlaceholder":"EDDI_VAULT_MASTER_KEY الحالي","kekNewKeyLabel":"المفتاح الرئيسي الجديد","kekNewKeyPlaceholder":"مفتاح جديد — 8 أحرف على الأقل","kekNewKeyTooShort":"يجب أن يتكون المفتاح الرئيسي الجديد من 8 أحرف على الأقل.","kekRestartHint":"بعد التدوير، يجب تحديث EDDI_VAULT_MASTER_KEY إلى المفتاح الجديد وإعادة تشغيل EDDI.","kekResultInstruction":"إجراء مطلوب: عيّن متغير البيئة EDDI_VAULT_MASTER_KEY على المفتاح الرئيسي الجديد وأعد تشغيل EDDI. حتى تفعل ذلك، لا تزال النسخة قيد التشغيل تستخدم المفتاح القديم في الذاكرة.","resetTenantTitle":"إعادة تعيين الـ Vault لهذا المستأجر","resetTenantBlurb":"الملاذ الأخير المدمّر. يحذف نهائيًا جميع الأسرار ومفتاح DEK حتى يتمكن الـ Vault من البدء من جديد — استخدمه بعد فقدان المفتاح الرئيسي أو تغييره.","resetTenantAction":"إعادة تعيين الـ Vault","resetTenantConfirmTitle":"إعادة تعيين الـ Vault لهذا المستأجر؟","resetTenantConfirm":"إعادة تعيين الـ Vault نهائيًا","resetConfirmLabel":"اكتب اسم المستأجر \\"{{tenant}}\\" للتأكيد","tableTitle_few":"{{count}} سر في المستأجر \\"{{tenant}}\\"","tableTitle_many":"{{count}} سر في المستأجر \\"{{tenant}}\\"","tableTitle_one":"{{count}} سر في المستأجر \\"{{tenant}}\\"","tableTitle_two":"{{count}} سر في المستأجر \\"{{tenant}}\\"","tableTitle_zero":"{{count}} سر في المستأجر \\"{{tenant}}\\"","tableTitle_other":"{{count}} سر في المستأجر \\"{{tenant}}\\"","rotateDekConfirmDesc_few":"يؤدي هذا إلى إنشاء مفتاح تشفير بيانات جديد للمستأجر \\"{{tenant}}\\" وإعادة تشفير {{count}} من أسراره. هذا آمن ويسري مفعوله فورًا — لا حاجة لإعادة التشغيل.","rotateDekConfirmDesc_many":"يؤدي هذا إلى إنشاء مفتاح تشفير بيانات جديد للمستأجر \\"{{tenant}}\\" وإعادة تشفير {{count}} من أسراره. هذا آمن ويسري مفعوله فورًا — لا حاجة لإعادة التشغيل.","rotateDekConfirmDesc_one":"يؤدي هذا إلى إنشاء مفتاح تشفير بيانات جديد للمستأجر \\"{{tenant}}\\" وإعادة تشفير {{count}} من أسراره. هذا آمن ويسري مفعوله فورًا — لا حاجة لإعادة التشغيل.","rotateDekConfirmDesc_two":"يؤدي هذا إلى إنشاء مفتاح تشفير بيانات جديد للمستأجر \\"{{tenant}}\\" وإعادة تشفير {{count}} من أسراره. هذا آمن ويسري مفعوله فورًا — لا حاجة لإعادة التشغيل.","rotateDekConfirmDesc_zero":"يؤدي هذا إلى إنشاء مفتاح تشفير بيانات جديد للمستأجر \\"{{tenant}}\\" وإعادة تشفير {{count}} من أسراره. هذا آمن ويسري مفعوله فورًا — لا حاجة لإعادة التشغيل.","rotateDekConfirmDesc_other":"يؤدي هذا إلى إنشاء مفتاح تشفير بيانات جديد للمستأجر \\"{{tenant}}\\" وإعادة تشفير {{count}} من أسراره. هذا آمن ويسري مفعوله فورًا — لا حاجة لإعادة التشغيل.","rotateDekSuccess_few":"تم تدوير مفتاح التشفير — تمت إعادة تشفير {{count}} من الأسرار","rotateDekSuccess_many":"تم تدوير مفتاح التشفير — تمت إعادة تشفير {{count}} من الأسرار","rotateDekSuccess_one":"تم تدوير مفتاح التشفير — تمت إعادة تشفير {{count}} من الأسرار","rotateDekSuccess_two":"تم تدوير مفتاح التشفير — تمت إعادة تشفير {{count}} من الأسرار","rotateDekSuccess_zero":"تم تدوير مفتاح التشفير — تمت إعادة تشفير {{count}} من الأسرار","rotateDekSuccess_other":"تم تدوير مفتاح التشفير — تمت إعادة تشفير {{count}} من الأسرار","kekResultTitle_few":"تم تدوير المفتاح الرئيسي — تمت إعادة تشفير {{count}} من مفاتيح DEK","kekResultTitle_many":"تم تدوير المفتاح الرئيسي — تمت إعادة تشفير {{count}} من مفاتيح DEK","kekResultTitle_one":"تم تدوير المفتاح الرئيسي — تمت إعادة تشفير {{count}} من مفاتيح DEK","kekResultTitle_two":"تم تدوير المفتاح الرئيسي — تمت إعادة تشفير {{count}} من مفاتيح DEK","kekResultTitle_zero":"تم تدوير المفتاح الرئيسي — تمت إعادة تشفير {{count}} من مفاتيح DEK","kekResultTitle_other":"تم تدوير المفتاح الرئيسي — تمت إعادة تشفير {{count}} من مفاتيح DEK","rotateKekSuccess_few":"تم تدوير المفتاح الرئيسي — تمت إعادة تشفير {{count}} من مفاتيح DEK. حدّث EDDI_VAULT_MASTER_KEY وأعد التشغيل.","rotateKekSuccess_many":"تم تدوير المفتاح الرئيسي — تمت إعادة تشفير {{count}} من مفاتيح DEK. حدّث EDDI_VAULT_MASTER_KEY وأعد التشغيل.","rotateKekSuccess_one":"تم تدوير المفتاح الرئيسي — تمت إعادة تشفير {{count}} من مفاتيح DEK. حدّث EDDI_VAULT_MASTER_KEY وأعد التشغيل.","rotateKekSuccess_two":"تم تدوير المفتاح الرئيسي — تمت إعادة تشفير {{count}} من مفاتيح DEK. حدّث EDDI_VAULT_MASTER_KEY وأعد التشغيل.","rotateKekSuccess_zero":"تم تدوير المفتاح الرئيسي — تمت إعادة تشفير {{count}} من مفاتيح DEK. حدّث EDDI_VAULT_MASTER_KEY وأعد التشغيل.","rotateKekSuccess_other":"تم تدوير المفتاح الرئيسي — تمت إعادة تشفير {{count}} من مفاتيح DEK. حدّث EDDI_VAULT_MASTER_KEY وأعد التشغيل.","resetTenantConfirmDesc_few":"يؤدي هذا إلى الحذف الدائم لجميع الأسرار البالغ عددها {{count}} ومفتاح تشفير البيانات للمستأجر \\"{{tenant}}\\". استخدم هذا كخطوة استرداد عندما يُفقد المفتاح الرئيسي أو يُغيَّر ولا يتوفر المفتاح القديم. لا يمكن التراجع عن هذا.","resetTenantConfirmDesc_many":"يؤدي هذا إلى الحذف الدائم لجميع الأسرار البالغ عددها {{count}} ومفتاح تشفير البيانات للمستأجر \\"{{tenant}}\\". استخدم هذا كخطوة استرداد عندما يُفقد المفتاح الرئيسي أو يُغيَّر ولا يتوفر المفتاح القديم. لا يمكن التراجع عن هذا.","resetTenantConfirmDesc_one":"يؤدي هذا إلى الحذف الدائم لجميع الأسرار البالغ عددها {{count}} ومفتاح تشفير البيانات للمستأجر \\"{{tenant}}\\". استخدم هذا كخطوة استرداد عندما يُفقد المفتاح الرئيسي أو يُغيَّر ولا يتوفر المفتاح القديم. لا يمكن التراجع عن هذا.","resetTenantConfirmDesc_two":"يؤدي هذا إلى الحذف الدائم لجميع الأسرار البالغ عددها {{count}} ومفتاح تشفير البيانات للمستأجر \\"{{tenant}}\\". استخدم هذا كخطوة استرداد عندما يُفقد المفتاح الرئيسي أو يُغيَّر ولا يتوفر المفتاح القديم. لا يمكن التراجع عن هذا.","resetTenantConfirmDesc_zero":"يؤدي هذا إلى الحذف الدائم لجميع الأسرار البالغ عددها {{count}} ومفتاح تشفير البيانات للمستأجر \\"{{tenant}}\\". استخدم هذا كخطوة استرداد عندما يُفقد المفتاح الرئيسي أو يُغيَّر ولا يتوفر المفتاح القديم. لا يمكن التراجع عن هذا.","resetTenantConfirmDesc_other":"يؤدي هذا إلى الحذف الدائم لجميع الأسرار البالغ عددها {{count}} ومفتاح تشفير البيانات للمستأجر \\"{{tenant}}\\". استخدم هذا كخطوة استرداد عندما يُفقد المفتاح الرئيسي أو يُغيَّر ولا يتوفر المفتاح القديم. لا يمكن التراجع عن هذا.","resetSecretCount_few":"سيتم فقدان {{count}} من الأسرار نهائيًا","resetSecretCount_many":"سيتم فقدان {{count}} من الأسرار نهائيًا","resetSecretCount_one":"سيتم فقدان {{count}} من الأسرار نهائيًا","resetSecretCount_two":"سيتم فقدان {{count}} من الأسرار نهائيًا","resetSecretCount_zero":"سيتم فقدان {{count}} من الأسرار نهائيًا","resetSecretCount_other":"سيتم فقدان {{count}} من الأسرار نهائيًا","resetTenantSuccess_few":"تمت إعادة تعيين الـ Vault لـ \\"{{tenant}}\\" — تم حذف {{count}} من الأسرار نهائيًا","resetTenantSuccess_many":"تمت إعادة تعيين الـ Vault لـ \\"{{tenant}}\\" — تم حذف {{count}} من الأسرار نهائيًا","resetTenantSuccess_one":"تمت إعادة تعيين الـ Vault لـ \\"{{tenant}}\\" — تم حذف {{count}} من الأسرار نهائيًا","resetTenantSuccess_two":"تمت إعادة تعيين الـ Vault لـ \\"{{tenant}}\\" — تم حذف {{count}} من الأسرار نهائيًا","resetTenantSuccess_zero":"تمت إعادة تعيين الـ Vault لـ \\"{{tenant}}\\" — تم حذف {{count}} من الأسرار نهائيًا","resetTenantSuccess_other":"تمت إعادة تعيين الـ Vault لـ \\"{{tenant}}\\" — تم حذف {{count}} من الأسرار نهائيًا"}'),_={title:"سجل التدقيق",description:"تصفح سجل التدقيق غير القابل للتغيير للامتثال والتصحيح.",byConversation:"حسب المحادثة",byAgent:"حسب Agent",conversationIdPlaceholder:"أدخل معرّف المحادثة...",agentIdPlaceholder:"أدخل Agent ID...",versionPlaceholder:"الإصدار (اختياري)",search:"بحث",entries:"إدخالات",totalDuration:"الإجمالي",totalCost:"التكلفة الإجمالية",step:"الخطوة",tasks:"مهام",input:"المدخلات",output:"المخرجات",llmDetail:"تفاصيل LLM",toolCalls:"مكالمات الأدوات",hmacIntegrity:"تم التحقق من سلامة HMAC",empty:"البحث في إدخالات التدقيق",emptyHint:"أدخل معرّف محادثة أو Agent أعلاه لتصفح Audit Trail.",noResults:"لم يتم العثور على إدخالات تدقيق",noResultsHint:"جرّب معرّفاً مختلفاً أو تحقق من معالجة المحادثة.",loadMore:"تحميل المزيد",selectAgent:"Select an agent…",conversations:"conversations",emptyAgent:"Select an agent to view its audit trail",emptyAgentHint:"Choose a deployed agent from the dropdown above to see all its audit records.",export:"Export",autoRefreshToggle:"Toggle auto-refresh (every 10s)",autoRefreshOn:"Auto",autoRefreshOff:"Auto",integrityVerified:"All entries cryptographically signed",integrityVerifiedDesc:"{{count}} of {{total}} entries have HMAC-SHA256 signatures",integrityPass:"SIGNED",integrityPartial:"Partially signed audit trail",integrityPartialDesc:"{{count}} of {{total}} entries have HMAC signatures",integrityNone:"Unsigned audit entries",integrityNoneDesc:"Configure a vault master key to enable automatic HMAC-SHA256 signing on all future audit entries.",signed:"Signed",allSigned:"All signed",decidedBy:"بواسطة",automated:"آلي"},N={cronHelp:"تنسيق من 5 حقول: الدقيقة الساعة يوم-الشهر الشهر يوم-الأسبوع",cronEveryMinute:"كل دقيقة",cronEveryNMinutes:"كل {{n}} دقيقة",cronHourlyAt:"كل ساعة عند الدقيقة {{minute}}",cronEveryNHours:"كل {{n}} ساعة عند الدقيقة {{minute}}",cronAtTime:"عند الساعة {{time}}",cronAtMinutePastEveryHour:"عند الدقيقة {{minutes}} من كل ساعة",cronAtMinutePastHours:"عند الدقيقة {{minutes}} من الساعة {{hours}}",cronOnDays:"أيام {{days}}",cronOnDayOfMonth:"في اليوم {{days}} من الشهر",cronInMonths:"في {{months}}",cronInvalid:"تعبير cron غير صالح (المتوقع 5 حقول)",cronTooFrequent:"يُنفَّذ أكثر من الحد الأدنى البالغ 60 ثانية",failedEmptyHint:"ستظهر عمليات التنفيذ المُرسَلة إلى الرسائل الميتة هنا لإعادة المحاولة أو التجاهل.",failedSubtitle:"عمليات تنفيذ فشلت نهائياً. أعد المحاولة لإعادة إدراجها في الطابور، أو تجاهلها لمسحها دون إعادة تشغيل.",intervalTooShort:"يجب أن يكون الفاصل 60 ثانية على الأقل",lastManualFire:"آخر تنفيذ يدوي",oneTimeHelp:"يُنفَّذ مرة واحدة في هذه اللحظة ثم يكتمل. يُفسَّر بتوقيتك المحلي.",outcomePending:"تم التشغيل — بانتظار النتيجة",persistentConversationId:"معرّف المحادثة الدائمة",persistentConversationIdPlaceholder:"يُنشأ تلقائياً إذا تُرك فارغاً",strategyPersistent:"دائمة (إعادة استخدام نفس المحادثة)",fireDeadLettered:"رسالة ميتة",fireFailed:"فشل",fireCompleted:"مكتمل",title:"الجداول",subtitle:"إدارة مشغلات Agent المجدولة — Cron وHeartbeats",create:"إنشاء جدول",createTitle:"إنشاء جدول",createSuccess:"تم إنشاء الجدول بنجاح",createError:"فشل إنشاء الجدول",creating:"جارٍ الإنشاء...",name:"الاسم",namePlaceholder:"مثال: فحص صحي يومي",triggerType:"نوع المشغل",cronExpression:"تعبير Cron",interval:"الفاصل (ثواني)",agentId:"Agent ID",agentIdPlaceholder:"أدخل Agent ID...",environment:"البيئة",message:"رسالة",messagePlaceholder:"رسالة لإرسالها إلى Agent",conversationStrategy:"استراتيجية المحادثة",total:"إجمالي الجداول",active:"نشط",failedCount:"فاشل / Dead-Lettered",nextFireLabel:"التنفيذ التالي",tableTitle:"جميع الجداول",empty:"لا توجد جداول بعد",emptyHint:"أنشئ جدولاً لأتمتة مشغّلات Agent.",colName:"الاسم",colType:"النوع",colSchedule:"الجدول",colAgent:"الوكيل",colStatus:"الحالة",colNextFire:"التنفيذ التالي",colLastFired:"آخر تنفيذ",colActions:"إجراءات",enable:"تفعيل",disable:"تعطيل",enabled:"تم تفعيل الجدول",disabled:"تم تعطيل الجدول",toggleError:"فشل تبديل الجدول",fireNow:"تنفيذ الآن",fired:"تم تنفيذ الجدول بنجاح",fireError:"فشل التنفيذ",retry:"إعادة المحاولة",retrySuccess:"تم إعادة إدراج الجدول",retryError:"فشل إعادة المحاولة",deleteSuccess:"تم حذف الجدول",deleteError:"فشل حذف الجدول",fireHistory:"سجل التنفيذ",hitlTimeout:"مهلة HITL",hitlTimeoutHint:"مهلة موافقة HITL يديرها النظام — عالجها عبر موافقة المحادثة، وليس من هنا.",statusDisabled:"معطّل",statusActive:"نشط",statusRunning:"قيد التشغيل",statusExecuting:"قيد التنفيذ",statusFailed:"فشل",statusDeadLettered:"Dead-Letter",typeHeartbeat:"Heartbeat",typeOneTime:"لمرة واحدة",typeCron:"Cron",noFireHistory:"لا يوجد سجل تنفيذ بعد",logFired:"تم التنفيذ",logDuration:"المدة",logResult:"النتيجة",logAttempt:"المحاولة",logCost:"التكلفة",logConversation:"المحادثة",dismissSuccess:"تم تجاهل Dead-Letter",dismissError:"فشل تجاهل Dead-Letter",failedTitle:"عمليات التنفيذ الفاشلة و Dead-Letter",failedEmpty:"لا توجد عمليات تنفيذ فاشلة",colSchedule2:"الجدول",dismiss:"تجاهل",updateSuccess:"تم تحديث الجدول",updateError:"فشل تحديث الجدول",editTitle:"تعديل الجدول",cronNext:"التالي",oneTimeAt:"التاريخ والوقت",timeZone:"المنطقة الزمنية",agentVersion:"الإصدار",agentVersionHint:"0 = أحدث نسخة منشورة",envProduction:"الإنتاج",envTest:"اختبار",userId:"معرّف المستخدم",userIdPlaceholder:"system:scheduler",maxCostPerFire:"الحد الأقصى للتكلفة لكل تنفيذ",unlimited:"غير محدود",strategyNew:"جديد (محادثة جديدة عند كل تنفيذ)",saving:"جارٍ الحفظ...",fireOutcomeFailed:"فشل التنفيذ",unknownError:"خطأ غير معروف",tabSchedules:"الجداول",tabFailed:"فاشل / Dead-Letter",cronPreset:{every15Minutes:"كل 15 دقيقة",hourly:"كل ساعة (عند رأس الساعة)",dailyMorning:"يومياً في 09:00",weekdays:"أيام الأسبوع في 09:00",weeklyMonday:"أسبوعياً (الإثنين 00:00)",monthly:"شهرياً (اليوم 1، 00:00)"}},H={title:"تسلسل النماذج",escalated:"الثقة {{c}} < {{th}}",escalatedShort:"مُصعّد",accepted:"مقبول",reason:{lowConfidence:"ثقة منخفضة",timeout:"انتهاء المهلة",error:"خطأ",retryableError:"خطأ قابل لإعادة المحاولة"}},O={pipelineError:"فشل تحميل تتبّع المسار",title:"تصحيح",tabPipeline:"المسار",tabCosts:"التكاليف",tabMemory:"الذاكرة",tabLogs:"سجلات",tabPrompt:"الموجه",turn:"الدور",latest:"الأحدث",noPipeline:"أرسل رسالة لرؤية تتبع المسار",processing:"جارٍ المعالجة...",actions:"إجراءات",confidence:"الثقة",duration:"المدة",cost:"التكلفة",in:"إدخال",input:"الإدخال",model:"النموذج",out:"إخراج",output:"الإخراج",tokens:"الرموز",toolCalls:"الأدوات"},x={error:"تعذّر تحميل بيانات التكلفة من الخادم",thisTurn:"هذا الدور",conversationTotal:"إجمالي المحادثة",tokens:"Tokens",cost:"التكلفة",duration:"المدة",model:"النموذج",toolCalls:"استدعاءات الأدوات",toolUsage:"استخدام الأدوات",cacheStats:"الذاكرة المخبئية",hitRate:"معدل الإصابة",empty:"أرسل رسالة لرؤية مقاييس التكلفة",in:"الداخلة",out:"الخارجة",total:"الإجمالي",calls:"الاستدعاءات",avgLatency:"متوسط زمن الاستجابة",input:"الإدخال",output:"الإخراج",tokenDistribution:"توزيع الرموز",totalCost:"إجمالي التكلفة",totalTokens:"إجمالي الرموز",turns:"الأدوار"},U={error:"فشل تحميل بيانات الذاكرة",title:"ذاكرة المحادثة",noConversation:"ابدأ محادثة لفحص الذاكرة",empty:"لا توجد بيانات ذاكرة متاحة",properties:"الخصائص",step:"الخطوة",keys:"المفاتيح",input:"الإدخال",collapseAll:"طيّ الكل",copyKey:"نسخ المفتاح",copyValue:"نسخ القيمة",customProperties:"خصائص مخصّصة",expandAll:"توسيع الكل",noMatches:"لم يتم العثور على بيانات مطابقة",search:"ابحث في المفاتيح أو القيم…",stepData:"بيانات الخطوة",systemProperties:"خصائص النظام"},F={noAgent:"حدد وكيلاً لعرض السجلات",search:"بحث...",pause:"إيقاف مؤقت",resume:"استئناف",clear:"مسح",waiting:"بانتظار السجلات...",connected:"متصل",disconnected:"غير متصل",logOutput:"مخرجات السجل",noMatch:"لا توجد سجلات تطابق عامل التصفية"},W={error:"فشل تحميل بيانات الموجه",noConversation:"ابدأ محادثة لفحص المطالبات",noLlm:"لم يتم العثور على تفاعلات LLM بعد",turn:"الدور",latest:"الأحدث",tokens:"Tokens",model:"النموذج",cost:"التكلفة",copy:"نسخ المطالبة",copied:"تم النسخ!",replay:"إعادة تشغيل هذا الدور",toolCalls:"استدعاءات الأدوات",step:"الخطوة",roleSystem:"موجه النظام",roleUser:"مستخدم",roleAssistant:"المساعد",roleTool:"نتيجة الأداة",collapse:"طيّ",showMore:"عرض المزيد",temperature:"الحرارة"},V={preview:"معاينة",edit:"تحرير",switchToPreview:"معاينة الموجه المُحلّ",switchToEdit:"التبديل إلى التحرير",refresh:"تحديث",sampleData:"بيانات تجريبية (بدون محادثة)",disclaimerReal:"تستخدم المعاينة محرك Qute مع بيانات المحادثة الفعلية.",disclaimerSample:"تستخدم المعاينة محرك Qute مع بيانات تجريبية. اختر محادثة للقيم الحقيقية.",resolvedPrompt:"الموجه المُحلّ",copy:"نسخ",copied:"تم النسخ!",error:"خطأ في حل القالب",loading:"جارٍ حل القالب…",availableVariables:"المتغيرات المتاحة",copyVariable:"انقر لنسخ مرجع المتغير",varProperties:"الخصائص",varMemory:"الذاكرة",varContext:"السياق",varSnippets:"قصاصات",varUserInfo:"معلومات المستخدم",varConversationInfo:"معلومات المحادثة",varInput:"المدخلات",varConversationLog:"سجل المحادثة"},B={title:"استوديو الوكيل",subtitle:"قم ببناء واختبار واستكشاف أخطاء وكلائك في مساحة عمل واحدة",pipeline:"المسار",editor:"محرر",debug:"تصحيح ودردشة",selectStage:"انقر على مرحلة من المسار لفتح محررها",openInStudio:"افتح في الاستوديو",loading:"جاري تحميل الوكيل...",notFound:"لم يتم العثور على الوكيل",hideChat:"إخفاء الدردشة",showChat:"إظهار الدردشة",openEditor:"فتح في المحرر",editorComingSoon:"دمج المحرر الموضعي قريباً",noPipeline:"لا توجد مراحل في المسار",type:{parser:"المحلل اللغوي",rules:"قواعد",property:"معين الخصائص",apicalls:"استدعاءات API",llm:"LLM",output:"المخرجات","output.template":"قالب المخرجات",mcpcalls:"استدعاءات MCP",rag:"قواعد المعرفة",dictionary:"القاموس"},landingDescription:"اختر وكيلاً لفتح المحرر المرئي والمُصحح والدردشة المباشرة",noAgents:"لم يُعثر على وكلاء — أنشئ واحداً من صفحة الوكلاء",chat:"دردشة",backToAgent:"العودة إلى الوكيل",selectStageHint:"اختر أي إضافة في مسار العمل لعرض وتعديل إعداداتها مباشرة",noConfig:"هذه المرحلة ليس لها عنوان تكوين",unsupportedType:"المحرر غير متاح لهذا النوع من الإضافات"},K={general:"عام",kbName:"اسم قاعدة المعرفة",kbNamePlaceholder:"مثال: product-docs, faq, internal-wiki",kbNameHint:"يستخدم للإشارة إلى قاعدة المعرفة هذه من مهام LLM",embeddingModel:"نموذج التضمين (Embedding)",provider:"المزود",embeddingParams:"معلمات المزود",embeddingParamsHint:"اسم النموذج، مفتاح API (استخدم ${vault:...} للأسرار)، رابط الأساس، إلخ.",vectorStore:"مخزن المتجهات",storeType:"نوع القاعدة",storeParams:"معلمات الاتصال",chunking:"تجزئة المستندات",chunkStrategy:"استراتيجية التجزئة",chunkSize:"حجم الجزء",chunkOverlap:"تداخل الأجزاء",overlapHint:"يساعد التداخل في الحفاظ على السياق بين الأجزاء",chunkPreview:"معاينة (كيف يتم تقسيم المستند)",chunkBlocks:"{{count}} أجزاء من ~{{size}} حرف مع تداخل {{overlap}} حرف",retrievalDefaults:"الإعدادات الافتراضية للاسترجاع",retrievalHint:"يمكن تجاوز هذه الإعدادات الافتراضية لكل مهمة في تكوين LLM.",maxResults:"الحد الأقصى للنتائج (top-K)",minScore:"الحد الأدنى للتشابه",ingestion:"استيعاب المستندات",dropFiles:"أسقط المستندات هنا لاستيعابها",dropHint:"نص، ماركداون، أو أي ملف يعتمد على النصوص",browse:"تصفح",pasteText:"أو الصق محتوى نصي",pastePlaceholder:"الصق نص المستند هنا...",ingestText:"استيعاب النص",ingestionHistory:"حالة الاستيعاب",saveFirstIngestion:"احفظ قاعدة المعرفة هذه أولاً لتمكين استيعاب المستندات.",addParam:"إضافة معلمة"},G={welcome:{title:"مرحباً بك في EDDI",subtitle:"مركز قيادة وكلاء الذكاء الاصطناعي",introText:"EDDI Manager هو مركز القيادة الخاص بك لبناء واختبار وتشغيل وكلاء المحادثة الذكية.",capabilitiesTitle:"ما الذي يمكنك فعله",capabilitiesSubtitle:"كل ما تحتاجه لبناء وكلاء ذكاء اصطناعي جاهزين للإنتاج",buildAgents:"بناء الوكلاء",buildAgentsDesc:"أنشئ وقم بتكوين وكلاء الذكاء الاصطناعي باستخدام المعالج أو من الصفر",designWorkflows:"تصميم مسارات العمل",designWorkflowsDesc:"منشئ مسارات سحب وإفلات مع قواعد السلوك وسلاسل LLM والأدوات",testRealtime:"اختبار في الوقت الفعلي",testRealtimeDesc:"تحدث مع وكلائك بردود متدفقة وأدوات تصحيح مدمجة",monitorOperate:"المراقبة والتشغيل",monitorOperateDesc:"المحادثات، سجلات التدقيق، الأسرار، والحصص — كلها في مكان واحد",readyTitle:"هل أنت مستعد للبدء؟",readySubtitle:"يمكنك إعادة تشغيل الجولة في أي وقت من قائمة المساعدة في الشريط الجانبي",startTour:"بدء الجولة",exploreOwn:"سأستكشف بنفسي"},tour:{back:"الخلف",next:"التالي",skip:"تخطي الجولة",finish:"إنهاء",stepOf:"الخطوة {{current}} من {{total}}",dashboard:{title:"جولة لوحة القيادة",step1Title:"مركز القيادة الخاص بك",step1Desc:"ينظم الشريط الجانبي كل شيء في ثلاث مناطق: الإدارة، التطوير، والعمليات. ستعرف دائماً أين تجد ما تبحث عنه.",step2Title:"نظرة عامة على المنصة",step2Desc:"أعداد حية لوكلائك، مسارات عملك، ومحادثاتك. انقر على أي بطاقة للانتقال مباشرة إلى هذا القسم.",step3Title:"إجراءات سريعة",step3Desc:"انتقل مباشرة إلى المهام الشائعة. معالج الوكلاء هو أسرع طريقة لإنشاء وكيلك الأول — يستغرق الأمر أقل من دقيقتين.",step4Title:"خصصها لتناسبك",step4Desc:"بدّل بين المظهر الفاتح والداكن ومظهر النظام. يدعم EDDI Manager 11 لغة — اختر لغتك من محدد اللغات."},agents:{title:"جولة الوكلاء",step1Title:"مساعد الوكيل",step1Desc:"يأخذك المعالج خطوة بخطوة لإنشاء وكيل مكون بالكامل — اختر نموذجاً، واضبط الشخصية، وفعّل الأدوات، ثم انشر.",step2Title:"إنشاء يدوي",step2Desc:"للمستخدمين المتقدمين: أنشئ وكيلاً فارغاً وقم بتكوينه بتحكم كامل في JSON. مثالي للإعدادات المتقدمة.",step3Title:"بحث وتصفية",step3Desc:"ابحث عن الوكلاء فوراً بالاسم. قم بالتبديل بين طريقة العرض بشكل بطاقات أو قائمة باستخدام الزر على اليمين.",step4Title:"أسطول وكلائك",step4Desc:"تُظهر كل بطاقة اسم الوكيل، وإصداره، وآخر وقت للتعديل. انقر على أي وكيل لعرض صفحة تفاصيله مع خيارات النشر والدردشة والمسارات."},workflows:{title:"جولة المسارات",step1Title:"إنشاء مسار عمل",step1Desc:"تُعرّف مسارات العمل أنابيب المعالجة — وهي سلسلة من المهام مثل استدعاءات LLM وقواعد السلوك وتكامل HTTP.",step2Title:"مسارات عملك",step2Desc:"يمكن إرفاق كل مسار عمل بوكيل واحد أو أكثر. انقر لفتح محرر البناء المعتمد على السحب والإفلات.",step3Title:"نظم العرض",step3Desc:"ابحث بالاسم وقم بالتبديل بين شبكة البطاقات وعرض الجدول القابل للفرز."},chat:{title:"جولة الدردشة",step1Title:"أختر وكيلاً",step1Desc:"حدد وكيلاً منشوراً لبدء المحادثة. يظهر هنا الوكلاء المنشورون فقط.",step2Title:"وضع البث",step2Desc:"بدّل لتدفق الرموز في الوقت الفعلي. عند تفعيله، تظهر الاستجابة كلمة بكلمة — وهو ممتاز لتصحيح زمن الاستجابة.",step3Title:"سجل المحادثات",step3Desc:"افتح الشريط الجانبي لتصفح واستئناف المحادثات السابقة.",step4Title:"ابدأ الدردشة",step4Desc:"اكتب رسالة واضغط Enter. سيستجيب الوكيل باستخدام مسارات العمل والأدوات الداعمة ونموذج LLM الذي قمت بتكوينه."},resources:{title:"جولة الموارد",step1Title:"مكتبة الإضافات",step1Desc:"الموارد هي كتل البناء لمسارات العمل. يتحكم كل نوع في جزء مختلف من سلوك الوكيل.",step2Title:"تكوينات LLM",step2Desc:"حدد أي نموذج ذكاء اصطناعي يشغل وكيلك ومطالبة النظام وأدواته وخوادم MCP وتكوينات التسلسل. هذا هو الدماغ.",step3Title:"القواعد واستدعاءات API",step3Desc:"تتحكم قواعد السلوك في تدفق المحادثة. تربط استدعاءات HTTP بـ APIs الخارجية. كلاهما يمكن استخدامه كأدوات LLM."},conversations:{title:"جولة المحادثات",step1Title:"البحث",step1Desc:"ابحث عن المحادثات بسرعة عبر المعرف الخاص بها أو الوكيل أو عن طريق الرسائل الحديثة من المستخدم.",step2Title:"فلاتر الحالة",step2Desc:"قم بتصفية المحادثات حسب الحالة: نشطة، قيد التقدم، منتهية، أو بها خطأ.",step3Title:"قائمة المحادثات",step3Desc:"تصفح كافة الجلسات. انقر على بطاقة محادثة لفتح الخط الزمني للمحادثة لتصور الأخطاء."},groups:{title:"جولة مجموعات النقاش",step1Title:"إنشاء مجموعة",step1Desc:"قم بإنشاء مجموعة إدارة من أجل السماح بتعاون العديد من الوكلاء بالنقاش والمداولة.",step2Title:"البحث داخل المجموعات",step2Desc:"ابحث داخل مجمعاتك الحالية لتعدد الوكلاء.",step3Title:"شبكة المجموعات",step3Desc:"إدارة البيئات التعاونية وتعديل سياساتها أو مسح مجموعات النظام البالية."},logs:{newLogs:"سجلات جديدة",title:"جولة سجلات النظام",step1Title:"مباشرة في مواجهة السجلات",step1Desc:"التبديل بين تيار حي من سجلات النظام الخاص بك أو سجلات البحث التاريخية.",step2Title:"إعداد التصفية الحية",step2Desc:"فلتر تدفق حي حسب منشئ وكيل، او بالمستويات للخطورة المهمة.",step3Title:"تصدير",step3Desc:"تنزيل السجلات المنقحة حاليا كملف نص للتحليل الخارجي."},secrets:{title:"جولة خزانة الأسرار",step1Title:"قم بعمل أسرار",step1Desc:"احفظ بأمان مفاتيح API الخاصة بك وعلامات الإعتماد او كلمة السر لوكيليك من أجل إشارات موثوقة.",step2Title:"التقسيم عن المستأجر",step2Desc:"أظهر عرض الخزانة في مراجعة مخصصة لنطاق المستأجر لمفاتيحك.",step3Title:"صيغ الإشارة",step3Desc:"اكتشف كيف يمكنك إدراج السر للتحقق الديناميكي أثناء العمل بدلا من الشفرة الثابتة لمكون LLM (${vault:...})."},audit:{title:"جولة سجل التدقيق",step1Title:"طريقة البحث",step1Desc:"راجع تاريخ تدقيق السجلات عن طريق محادثة محددة أو بإصدار معين.",step2Title:"تشغيل البحث",step2Desc:"اضف الهوية (ID) وانقر لتنزيل وتأكد من التنفيذ للسجل.",step3Title:"تصدير السجل الدفتري",step3Desc:"نزل مراجعات النظام التي عثر عليها بصيغة (JSON) للقيام بالمتوافق والتقارير."},schedules:{title:"جولة المجدولين",step1Title:"صنع الجداول",step1Desc:"شغل أداة جدولة العمل Cron وأنجز النبضات بانتظام لتحميل الأعمال التلقائية للوكلاء.",step2Title:"نسب صحية",step2Desc:"راجع وراقب مجموع الفشل من الجدول للمشغلات لكامل المنصة.",step3Title:"التحكم بجدول التطبيقات",step3Desc:"راقب مشغليك ذاتيا واوقف تشغيلها وأكمل او حتى احذف منها للتحذير الخاص بك كاختبار فعلي لها."},quotas:{saveSuccess:"تم حفظ الحصة",resetSuccess:"تمت إعادة تعيين عدّادات الاستخدام",resetConfirmDesc:'يصفّر فورًا جميع عدّادات الاستخدام (المحادثات، طلبات API، التكلفة الشهرية) للمستأجر "default". لا يمكن التراجع.',resetConfirmTitle:"إعادة تعيين عدّادات الاستخدام؟",title:"جولة الحصص",step1Title:"معوقات البناء",step1Desc:"حدد قيوداً صريحة على استهلاك وكلاءك يومياً أو في المحادثات للحصص المضافة أو الرموز من هذا الحساب.",step2Title:"استطلاع الأداء",step2Desc:"راجع بانتظام مقدار مستأجرينك ما أتوا من هذه الكوته في الزمن الحقيقي.",step3Title:"تنفيذ القيود",step3Desc:"احفظ الحدود بعد التعديلات للمنصة، لحظر جميع الحمولات المرورية المعارضة لذلك التقييد."},coordinator:{title:"جولة فريق التنسيق",step1Title:"الروابط المباشرة",step1Desc:"عاين اتصالات المصادر المتدفقة من واجهات نبض النظام في عمليات خلفية فريق المنسقين.",step2Title:"تصرف قائمة المهام",step2Desc:"تدابير عمليات المهام أو نشاط التشغيل للبيئات الحقيقية بمجموعتك.",step3Title:"الرسائل الميتة",step3Desc:"تحقق من الأعمال البائسة وقرر الحذف تماما، أو العودة لإعادتها بغرض توازن واستكمال للنظام الخاص بنا."},orphans:{confirmPurgeAll:"حذف جميع الموارد اليتيمة البالغ عددها {{count}} نهائيًا؟ يحذف الخادم كل العناصر — لا يُطبَّق تحديدك. لا يمكن التراجع عن هذا.",title:"جولة محطة اليتيمات",step1Title:"بحث مشعب",step1Desc:"تحضير و إعطـاء صلاحيات شاملة للمنصة و أكتشاف بيانات التكوينات التي ليست في أي وكالة.",step2Title:"عملية تتضمن الإزالة الناعمة",step2Desc:"تبديل الميزة لتحديد الملف المحذوفات مسبقاً تاريخيا في السجلات لحذف جذري.",step3Title:"مراجعة التنقيب الفعلي",step3Desc:"استطلاع تقييمي للبيان الخاص والمجرد من أجزاء مهملة لتأخذ إزالة شاملة وتنظيفا تاما وتحفظ مساحة كبيرة للبيانات لدينا."}},help:{title:"المساعدة والجولة",platformTour:"جولة المنصة",resetAll:"إعادة تعيين جميع الجولات",resetConfirm:"هل تريد إعادة تعيين تقدم الجولات؟"},offer:{message:"هل أنت جديد هنا؟ خذ {{page}}",accept:"أرني ذلك",dontAsk:"لا تسألني مرة أخرى"}},z={status:"حالة المنصة",online:"متصل",offline:"غير متصل",checking:"جارٍ التحقق…",connected:"متصل",disconnected:"غير متصل",instance:"مثيل",latency:"زمن الاستجابة",lastChecked:"آخر فحص",justNow:"الآن",secondsAgo:"منذ {{count}}ث"},q={live:"مباشر",reconnecting:"إعادة الاتصال…"},j={title:"جديد {{type}}",newAgent:"وكيل جديد",newGroup:"مجموعة جديدة",quickCreate:"إنشاء سريع",quickCreateTitle:"إنشاء سريع {{type}}",quickCreateDesc:"عيّن اسماً ووصفاً، ونفّذ التكوين الدقيق لاحقاً.",guidedSetup:"إعداد موجه",guidedSetupDesc:"معالج خطوة بخطوة من خيارات LLM والمطالبات والنشر."},J=JSON.parse('{"actionConflict":"لا تزال عملية أخرى قيد التنفيذ، أو لم يعد هذا النقاش يقبل ذلك الإجراء. يرجى إعادة المحاولة.","actionTimeout":"لم يستجب أحد الوكلاء الأعضاء في الوقت المحدد. يرجى المحاولة مجدداً.","actionUnreachable":"تعذّر الوصول إلى أحد الوكلاء الأعضاء. يرجى المحاولة مجدداً.","addMember":"إضافة عضو","allowHtmlTooltip":"عند التفعيل، يعرض محتوى HTML (بعد التعقيم). استخدمه فقط مع الوكلاء الموثوقين.","askQuestion":"اطرح سؤالاً لتناقشه المجموعة…","assignAgents":"عيّن وكلاء لكل دور عضو.","blankDesc":"قم بتكوين كل شيء يدوياً.","characters":"أحرف","chooseTemplate":"اختر قالباً أو ابدأ من الصفر.","closeConfirmDescription":"يؤدي الإغلاق إلى إنهاء جميع محادثات الأعضاء نهائياً وتنظيف أي وكلاء مؤقتين. لا يمكن إجراء أي متابعات أو استكمالات إضافية. لا يمكن التراجع.","composeQuestion":"تأليف سؤال","continueButton":"متابعة","continueHint":"يعيد تشغيل جميع المراحل كجولة جديدة؛ يحتفظ كل وكيل بذاكرة الجولات السابقة. لا يمكن إضافة مرفقات إلى الاستكمال.","continuePlaceholder":"متابعة هذه المناقشة بسؤال إضافي…","continueStreamStarted":"بدأت المتابعة — بث مباشر","count":"{{count}} مجموعات","createSuccess":"تم إنشاء المجموعة بنجاح","discussing":"الوكلاء يتناقشون…","enterToSend":"Enter للإرسال","expandInput":"توسيع الإدخال","followupHint":"اطرح متابعة مباشرة على أحد الأعضاء. يحتفظ الوكيل بالسياق الكامل من النقاش؛ ويُضاف التبادل إلى النص.","followupPlaceholder":"اطرح على هذا العضو سؤال متابعة…","inputDisabledApproval":"في انتظار الموافقة…","inputDisabledClosed":"هذه المناقشة مغلقة","inputDisabledCompleted":"النقاش مكتمل","inputDisabledEnded":"انتهت هذه المناقشة","inputDisabledInProgress":"المناقشة قيد التقدم…","membersCount":"{{count}} أعضاء","moderator":"المشرف (للتجميع)","namePlaceholder":"مثل: مجلس استشاري","newDiscussion":"مناقشة جديدة","newShort":"جديد","noModerator":"بدون مشرف","noResponse":"لا يوجد رد","contentTruncated":"[تم اقتطاع المحتوى]","protocolMaxRetries":"الحد الأقصى لإعادة المحاولة","protocolMaxRounds":"الحد الأقصى للجولات","protocolOnFailure":"عند الفشل","protocolSettings":"البروتوكول","protocolTimeout":"المهلة","protocolUnavailable":"غير متاح","question":"السؤال","readyToDiscuss":"جاهز للنقاش","responding":"يستجيب…","reviewMemberRoster":"قائمة الأعضاء","reviewMembers":"الأعضاء","reviewModerator":"المشرف","reviewNoModerator":"لا يوجد (التجميع التلقائي معطّل)","reviewRounds":"الحد الأقصى للجولات","reviewTimeout":"مهلة الوكيل","reviewUnassigned":"غير مُعيَّن","reviewUnassignedHint":"ارجع لتعيين الوكلاء قبل الإنشاء.","selectAgent":"اختر وكيلاً…","selectOrStart":"اختر نقاشاً سابقاً من السجل، أو اكتب سؤالاً أدناه لبدء نقاش جديد.","shiftEnter":"سطر جديد","skipped":"تم التخطي","sortByMembers":"ترتيب حسب الأعضاء","sortByStyle":"ترتيب حسب النمط","speakingCount":"{{count}} يتحدثون","startBlank":"البدء من الصفر","startDiscussion":"ناقش","stateCompleted":"مكتمل","stateCreated":"تم الإنشاء","stateFailed":"فشل","stateSynthesizing":"جارٍ التجميع…","stepBasics":"الأساسيات","stepMembers":"الأعضاء","stepReview":"مراجعة","stepTemplate":"القالب","submitShortcut":"Ctrl+Enter للإرسال","synthesis":"التجميع","synthesizing":"المشرف يجمّع…","hitlSelectPhase":"حدد مرحلة واحدة على الأقل تتطلب الموافقة.","empty":"لا توجد مجموعات بعد","emptyDescription":"تتيح المجموعات لعدة وكلاء التعاون في مناقشات منظمة.","createGroup":"إنشاء مجموعة","unnamed":"مجموعة بدون اسم","count_one":"مجموعة {{count}}","count_other":"{{count}} مجموعات","confirmDelete":"حذف هذه المجموعة؟","confirmDeleteDesc":"سيتم حذف تكوين المجموعة نهائيًا.","duplicateSuccess":"تم تكرار المجموعة","noDescription":"بدون وصف","members":"أعضاء","discussionStyle":"أسلوب النقاش","maxRounds":"الجولات القصوى","styleTaskForce":"فريق العمل","stateAwaitingApproval":"بانتظار الموافقة","stateCancelled":"ملغى","phasePlan":"التخطيط","phaseExecute":"التنفيذ","phaseVerify":"التحقق","preConfiguredTasks":"مهام مُعدّة مسبقاً","dynamicAgents":"وكلاء ديناميكيون","dynamicCreation":"الإنشاء","dynamicRecruitment":"التوظيف","dynamicDelegation":"التفويض","lifecyclePolicy":"دورة الحياة","allowedProviders":"المزودون","liveIndicator":"● LIVE","htmlToggle":"HTML","memberTypeGroup":"مجموعة","moderatorBadge":"⭐ مشرف","styleColumn":"النمط","membersColumn":"الأعضاء","memberOverflow":"+{{count}} آخرون","defaultLabel":"مجموعة","liveDiscussion":"مباشر","state":{"CREATED":"تم الإنشاء","IN_PROGRESS":"قيد التنفيذ","SYNTHESIZING":"جارٍ التجميع","COMPLETED":"مكتمل","FAILED":"فشل","ERROR":"خطأ","AWAITING_APPROVAL":"بانتظار الموافقة","CANCELLED":"ملغى","AWAITING_HUMAN_INPUT":"في انتظار أحد الأعضاء","CLOSED":"مغلقة"},"preConfiguredTasksCount":"مهام مُعدّة مسبقاً ({{count}})","entryType":{"QUESTION":"سؤال","OPINION":"رأي","CRITIQUE":"نقد","REVISION":"مراجعة","CHALLENGE":"اعتراض","DEFENSE":"دفاع","ARGUMENT":"حجة","REBUTTAL":"دحض","SYNTHESIS":"تركيب","ERROR":"خطأ","SKIPPED":"تم التخطي","PLAN":"خطة","TASK_RESULT":"نتيجة المهمة","VERIFICATION":"تحقق","FOLLOW_UP":"متابعة","ABSTAINED":"امتنع","DISSENT":"اعتراض","CONVERGENCE":"تقارب","FACILITATION":"تيسير","VOTE":"صوت","PROPOSAL":"اقتراح","BARGAIN":"عرض مضاد","HUMAN_INPUT":"مدخل بشري","RETRO":"مراجعة استرجاعية","BID":"عطاء"},"flow":{"Opinion":"رأي","Discussion":"نقاش","Synthesis":"تركيب","Critique":"نقد","Revision":"مراجعة","Challenge":"اعتراض","Defense":"دفاع","Independent":"مستقل","AnonymousSharing":"مشاركة مجهولة","Revised":"مُراجَع","ProOpening":"افتتاح مؤيد","ConOpening":"افتتاح معارض","Rebuttals":"ردود","Judgment":"حكم","Plan":"التخطيط","Execute":"التنفيذ","Verify":"التحقق","Synthesize":"التلخيص"},"lifecycle":{"EPHEMERAL":"مؤقت","KEEP_DEPLOYED":"إبقاء منشور","UNDEPLOY_ONLY":"إلغاء النشر فقط","AGENT_DECIDES":"الوكيل يقرر"},"dynamicMax":"✓ (max {{count}})","dynamicMaxPerTask":"✓ (الحد {{count}}/مهمة)","protocolMaxTurns":"الحد الأقصى للأدوار","speakingOrderTooltip":"ترتيب الحديث: #{{order}}","allowedModels":"النماذج","inheritParentModel":"وراثة النموذج","enabled":"مفعّل","disabled":"معطّل","turnOrderSequential":"تسلسلي","turnOrderParallel":"متوازٍ","requiresApproval":"يتطلب الموافقة","item":"عنصر","items":"عناصر","contextScope":{"NONE":"مستقل","FULL":"سياق كامل","LAST_PHASE":"المرحلة الأخيرة","ANONYMOUS":"مجهول","OWN_FEEDBACK":"ملاحظات ذاتية","TASK_ONLY":"المهمة فقط","TASK_WITH_DEPS":"المهمة + التبعيات"},"configuration":"الإعدادات","deleteGroupOnly":"حذف المجموعة فقط","deleteGroupOnlySuccess":"تم حذف المجموعة (تم الاحتفاظ بالوكلاء)","deleteGroupOnlyWarning":"سيؤدي هذا إلى حذف المجموعة. سيتم الاحتفاظ بجميع الوكلاء الأعضاء.","deleteGroupAndAgents":"حذف المجموعة + جميع الوكلاء","deleteWithMembersSuccess":"تم حذف المجموعة وجميع الوكلاء الأعضاء (حذف مؤقت)","deleteWithMembersWarning":"سيؤدي هذا إلى الحذف المؤقت للمجموعة وجميع الوكلاء الأعضاء البالغ عددهم {{count}}. يمكن استعادتهم.","hideDiscussions":"إخفاء لوحة المناقشات","showDiscussions":"إظهار لوحة المناقشات","hideConfig":"إخفاء لوحة الإعدادات","showConfig":"إظهار لوحة الإعدادات","hitlSection":"الموافقة البشرية","hitlApprovalPoints":"الموافقة عند","hitlOnTaskRejection":"عند الرفض","hitlEdit":"تعديل","hitlSaved":"تم حفظ إعدادات الموافقة","hitlEnable":"تتطلب موافقة بشرية","hitlApprovalPhases":"المراحل التي تتطلب الموافقة","hitlNotConfigured":"لم تُهيّأ أي بوابات موافقة — انقر تعديل لطلب موافقة بشرية.","driftTitle":"تغيّر إعداد المجموعة أثناء الإيقاف المؤقت","driftRecovery":"تم إلغاء الاستئناف لأن مراحل المجموعة تغيّرت. لا تزال المناقشة بانتظار الموافقة — أصلح الإعداد (تعديل، في لوحة الإعداد) ووافق مجددًا، أو ألغِها.","discussionStarted":"بدأت المناقشة — بث مباشر","continueStarted":"بدأت جولة جديدة","followupSent":"تم إرسال المتابعة","discussionClosed":"تم إغلاق المناقشة","backToGroups":"العودة إلى المجموعات","noDiscussions":"لا توجد مناقشات بعد","askBelow":"اطرح سؤالاً أدناه للبدء","exitFullscreen":"الخروج من ملء الشاشة","enterFullscreen":"ملء الشاشة","discussions":"المناقشات","discussionComplete":"اكتملت المناقشة","continueDiscussion":"متابعة (جولة جديدة)","followupMember":"المتابعة مع أحد الأعضاء","closeDiscussion":"إغلاق المناقشة","currentRound":"الجولة الحالية","startNextRound":"بدء الجولة التالية","selectMember":"اختر عضواً","sendFollowup":"إرسال المتابعة","closeConfirmTitle":"إغلاق هذه المناقشة؟","closeConfirmButton":"إغلاق المناقشة","closeConfirmDismiss":"رجوع","count_zero":"{{count}} مجموعة","count_two":"مجموعتان","count_few":"{{count}} مجموعات","count_many":"{{count}} مجموعة","protocolMaxCost":"سقف التكلفة","protocolOnCostExceeded":"عند بلوغه","costAbort":"إحباط","costSynthesize":"التلخيص الآن","deliberationSection":"التداول","recordDissents":"تقرير الأقلية","agentFiledTasks":"مهام أنشأها الوكلاء","agentFiledCaps":"الحدود","agentFiledCapsValue":"{{perDiscussion}} / نقاش · {{perTurn}} / دور","moderatorlessWarning":"مقصورة على منسّق لا تملكه هذه المجموعة: {{phases}}. سينوب عنه العضو الأول حسب ترتيب الكلام.","roleCoverageWarning":"لا يحمل أي عضو الدور «{{role}}» — وسيتحدث جميع الأعضاء في {{phases}} بدلًا من ذلك.","delegationDepth":"أقصى عمق","delegationTimeout":"مهلة التفويض","secondsShort":"{{seconds}} ث","delegationTargets":"قائمة السماح","phaseBehaviour":"سلوك المراحل","phaseBehaviourNone":"لم يُضبط الامتناع ولا التقارب — اضغط تحرير للسماح بالتمرير أو لإنهاء مرحلة متكررة عند الاتفاق.","abstentionShort":"امتناع","convergenceShort":"تقارب ≥{{threshold}}","phasesSaved":"تم حفظ إعدادات المراحل","phasesNoneToEdit":"لا تحدّد هذه المجموعة أي مراحل. اختر نمط نقاش أو أضف مراحل إلى الإعداد قبل ضبط سلوك كل مرحلة.","phaseRepeats":"×{{repeats}}","allowAbstention":"السماح بالامتناع","allowAbstentionHelp":"يمكن للعضو أن يمتنع عن إضافة جديد في هذه الجولة بدلاً من تكرار نفسه.","convergenceEnable":"الإيقاف مبكرًا عند التقارب","convergenceHelp":"يقارن حَكَمٌ كل تكرار بسابقه وينهي المرحلة حين تتوقف مواقف الأعضاء عن التغيّر. يكلّف نداءً واحدًا لكل تكرار.","convergenceNeedsRepeats":"متاح فقط في مرحلة متكررة — المرور الواحد لا شيء يقارن به.","convergenceMinRepeats":"أدنى تكرارات","convergenceThreshold":"العتبة","convergenceJudge":"الحَكَم","judgeModerator":"المنسّق","judgeService":"خدمة","judgeServiceNote":"مقبول لكنه غير موصول بعد — يعود المحرك إلى المنسّق ويسجّل تحذيرًا.","convergenceReached":"تقارب","convergenceChecked":"فحص التقارب","convergenceScore":"توافق {{score}}","decisionWinner":"الفائز: {{winner}}","decisionTie":"تعادل","decisionDecidedAt":"تقرّر في {{phase}}","decisionUnparsed":"تعذّرت قراءة إجابة الحَكَم كحكم منظّم، لذا حُفظت حرفيًا أدناه وبقيت الخلاصة نصًا عاديًا.","minorityReport":"تقرير الأقلية ({{total}})","attachFiles":"إرفاق ملفات","attachmentLimit":"بحد أقصى {{max}} مرفقًا لكل نقاش","attachmentTooLarge":"{{name}} أكبر من أن يُرفق","attachmentReadFailed":"تعذّرت قراءة {{name}}","removeAttachment":"إزالة {{name}}","decisionType":{"VERDICT":"الحكم","VOTE":"تصويت","AGREEMENT":"اتفاق","AWARD":"إسناد","NONE":"لا قرار منظّم"},"abstainedBody":"لم يضف جديدًا في هذه الجولة.","convergenceSkipped_zero":"· تم تخطي {{count}} جولة إضافية","convergenceSkipped_one":"· تم تخطي {{count}} جولة إضافية","convergenceSkipped_two":"· تم تخطي {{count}} جولة إضافية","convergenceSkipped_few":"· تم تخطي {{count}} جولة إضافية","convergenceSkipped_many":"· تم تخطي {{count}} جولة إضافية","convergenceSkipped_other":"· تم تخطي {{count}} جولة إضافية","attachmentTotalTooLarge":"تتجاوز المرفقات الحد الأقصى للحجم الإجمالي","convergenceInert":"مضبوط، لكن هذه المرحلة تُنفَّذ مرة واحدة — لن يعمل الحَكَم أبدًا. أزل الإعداد أو امنح المرحلة أكثر من تكرار.","questionTooLong":"يمكن أن يبلغ طول السؤال {{max}} حرفًا كحد أقصى","charactersOverLimit":"{{current}} / {{max}} حرفًا","advancedSection":"التعاون المتقدم","artifactConfigLabel":"الأصول المشتركة","artifactConfigValue":"الحد الأقصى {{count}}/نقاش","artifactCreatedBadge":"تم إنشاء {{name}} (الإصدار {{version}})","artifactDraft":"مسودة","artifactFinal":"نهائي","artifactLastEdited":"آخر تعديل بواسطة {{agent}}","artifactUpdatedBadge":"تم تحديث {{name}} (الإصدار {{version}})","artifactsTitle":"الأصول المشتركة ({{count}})","concessionLedgerTitle":"سجل التنازلات","contextWindowLabel":"نافذة النص المنقول","contextWindowValue":"آخر {{count}} إدخالات{{summarized}}","facilitatorLabel":"الميسّر","facilitatorMoves":"الإجراءات المسموح بها","humanMemberConfigLabel":"مهلة دور العضو البشري","humanTurnRequestedAt":"تم الطلب","humanTurnResponsePlaceholder":"ردّك","humanTurnSubmit":"إرسال","humanTurnSubmitted":"تم تسجيل ردّك","humanTurnSubmitting":"جارٍ الإرسال…","humanTurnTimeout":"المهلة","humanTurnTitle":"حان دورك، {{name}}","inputDisabledHumanTurn":"في انتظار دور أحد الأعضاء…","memberTypeHuman":"بشري","negotiationAcceptedBy":"تم القبول من قِبل: {{names}}","negotiationGaveUp":"تنازل عن","negotiationInReturnFor":"مقابل","negotiationOpen":"مفتوح","negotiationRound":"الجولة {{round}}","negotiationSuperseded":"تم استبداله","negotiationTableTitle":"طاولة التفاوض","notSet":"غير محدد","retroConfigLabel":"دروس المراجعة الرجعية","retroConfigValue":"{{perRun}}/تشغيل، بحد أقصى {{stored}} مخزّنة","stateAwaitingHumanInput":"في انتظار أحد الأعضاء","summarized":"ملخّص","transcriptWindowed":"تم دمج أول {{count}} إدخالات في النص المنقول ضمن ملخص متجدد للحفاظ على سياق محدود للأدوار اللاحقة. مرّر المؤشر لعرض الملخص.","voteMethod":"الطريقة","voteMethodApproval":"الموافقة","voteMethodMajority":"الأغلبية","voteOptionsExplicit":"قائمة صريحة","voteOptionsLastSynthesis":"استخراج من آخر توليف","voteOptionsList":"الخيارات (خيار واحد في كل سطر)","voteOptionsSource":"خيارات الاقتراع","voteQuorum":"النصاب القانوني","voteTieHuman":"يقرر إنسان (غير متاح بعد)","voteTieModerator":"يقرر المشرف","voteTieNoDecision":"لا قرار","voteTiePolicy":"عند التعادل","voteWeightByConfidence":"الترجيح حسب مستوى الثقة","waitIndefinitely":"الانتظار إلى أجل غير مسمى","advancedSaved":"تم حفظ إعدادات التعاون","advancedNotConfigured":"لم يتم إعداد نافذة النص أو ذاكرة المراجعة أو المخرجات المشتركة أو الميسّر — انقر على تحرير لتفعيلها.","contextWindowHint":"يحدّ من سياق كل دور في النقاشات الطويلة بطيّ المدخلات الأقدم في ملخّص متجدّد.","contextWindowEntries":"المدخلات الحديثة المحفوظة كاملةً","contextWindowSummarize":"تلخيص ما يخرج من النافذة","contextWindowTruncateNote":"تُستبدل المدخلات الأقدم بعلامة بسيطة: «حُذفت N من المدخلات السابقة».","retroConfigHint":"يتيح لمرحلة المراجعة كتابة الدروس في ذاكرة الفريق لتُستخدم في نقاشات لاحقة.","retroPerRun":"لكل تشغيل","retroStored":"الحد الأقصى المخزَّن","artifactConfigHint":"يتيح للأعضاء تأليف مستندات مشتركة تبقى بعد انتهاء الدور الذي كُتبت فيه.","artifactsPerDiscussion":"الحد الأقصى لكل نقاش","facilitatorHint":"وكيل يتدخّل عند كل نقطة تفتيش ويختار حركة واحدة من القائمة المسموح بها — وليس منسّقًا حرًّا أبدًا.","facilitatorAgent":"وكيل الميسّر","facilitatorPickAgent":"اختر وكيلًا…","facilitatorAgentRequired":"اختر الوكيل الذي سيتولّى التيسير.","facilitatorCheckAfter":"نقطة التفتيش","facilitatorCheckpoint":{"EACH_PHASE":"بعد كل مرحلة","EACH_REPEAT":"بعد كل جولة داخل المرحلة"},"facilitatorMove":{"CONTINUE":"المتابعة","END_PHASE":"إنهاء المرحلة مبكرًا","EXTEND_PHASE":"تمديد المرحلة","CALL_VOTE":"الدعوة إلى تصويت","RECRUIT":"ضمّ عضو جديد","ESCALATE_HUMAN":"التصعيد إلى إنسان"},"facilitatorNoMove":"اسمح بحركة واحدة على الأقل، أو عطّل الميسّر.","facilitatorMidPhaseNeedsRepeat":"إنهاء المرحلة أو تمديدها يحدث في منتصفها، لذا يتطلّب نقطة التفتيش لكل جولة.","facilitatorEscalateTo":"التصعيد إلى (معرّف المستخدم)","facilitatorEscalateRequired":"التصعيد يوقف النقاش في انتظار شخص ما — حدّد من هو.","facilitatorMaxMoves":"الحد الأقصى للحركات لكل نقاش","assignmentModeLabel":"إسناد المهام","assignmentModeRole":"حسب الدور (يُسنِد المخطِّط)","assignmentModeBid":"حسب العطاء (يقدّم الأعضاء عطاءات، ويفوز صاحب أعلى ثقة)","assignmentModeBidShort":"حسب العطاء","assignmentModeRoleHint":"يُسنِد المخطِّط أو الإعداد كل مهمة، أو بالتناوب.","assignmentModeBidHint":"يعود إلى الإسناد حسب الدور عندما لا يغطّي المزاد تكلفته — أقل من مقدّمَي عطاء أو مهمتين مفتوحتين، أو ميزانية أدوار غير كافية.","contextWindowSummarizer":"المُلخِّص","contextWindowNoSummarizer":"بلا","contextWindowModel":"نموذج التلخيص","contextWindowModelPlaceholder":"النموذج","contextWindowSummarizerMissing":"بدون نموذج تلخيص، يعود الفائض بصمت إلى علامة الاقتطاع البسيطة.","facilitatorMaxMovesCeiling":"بحد أقصى {{max}} — الميسّر تدخّل محدود وليس منسّقًا.","reviewUnassignedWarning_few":"{{count}} عضو غير مُعيَّن","reviewUnassignedWarning_many":"{{count}} عضو غير مُعيَّن","reviewUnassignedWarning_one":"{{count}} عضو غير مُعيَّن","reviewUnassignedWarning_two":"{{count}} عضو غير مُعيَّن","reviewUnassignedWarning_zero":"{{count}} عضو غير مُعيَّن","reviewUnassignedWarning_other":"{{count}} عضو غير مُعيَّن","retroRecordedBadge_few":"{{phase}}: تم حفظ {{count}} دروس في ذاكرة الفريق","retroRecordedBadge_many":"{{phase}}: تم حفظ {{count}} دروس في ذاكرة الفريق","retroRecordedBadge_one":"{{phase}}: تم حفظ {{count}} درس في ذاكرة الفريق","retroRecordedBadge_two":"{{phase}}: تم حفظ {{count}} دروس في ذاكرة الفريق","retroRecordedBadge_zero":"{{phase}}: تم حفظ {{count}} دروس في ذاكرة الفريق","retroRecordedBadge_other":"{{phase}}: تم حفظ {{count}} دروس في ذاكرة الفريق","artifactRevisions_few":"{{count}} مراجعات سابقة","artifactRevisions_many":"{{count}} مراجعات سابقة","artifactRevisions_one":"{{count}} مراجعة سابقة","artifactRevisions_two":"{{count}} مراجعات سابقة","artifactRevisions_zero":"{{count}} مراجعات سابقة","artifactRevisions_other":"{{count}} مراجعات سابقة","styles":{"ROUND_TABLE":{"label":"طاولة مستديرة","flow":"يعرض كل عضو رأيه، ثم يبني الجميع على آراء بعضهم عبر عدة جولات"},"PEER_REVIEW":{"label":"مراجعة الأقران","flow":"يجيب كل عضو بمفرده، ثم ينقد الأعضاء بعضهم ويُنقّحون إجاباتهم"},"DEVIL_ADVOCATE":{"label":"محامي الشيطان","flow":"عضو واحد يهاجم موقف المجموعة والبقية يدافعون عنه"},"DELPHI":{"label":"جولات مجهولة","flow":"يجيب الأعضاء دون ذكر أسمائهم ويُنقّحون في كل جولة، فلا ينساق أحد خلف أول متحدث"},"DEBATE":{"label":"مناظرة مع وضد","flow":"طرف يؤيد وطرف يعارض، ثم تأتي الردود ثم الحكم"},"TASK_FORCE":{"label":"فريق مهام","flow":"يضع المنسّق الخطة، وينفّذ الأعضاء المهام بالتوازي، ثم يجري التحقق من النتائج"},"NEGOTIATION":{"label":"تفاوض","flow":"تتبادل الأطراف المقترحات حتى تتفق، ولا يتدخل المحكّم إلا إذا تعذّر الاتفاق"},"CUSTOM":{"label":"مسار مخصّص","flow":"مراحل تحددها بنفسك"}},"unsupportedStyle":"لا يدعم هذا الخادم {{style}}. اختر إطارًا آخر للمتابعة."}'),Y={title:"لوحة المهام",pending:"قيد الانتظار",inProgress:"قيد التنفيذ",completed:"مكتمل",verified:"تم التحقق",failed:"فشل",assignedTo:"مُعيَّن إلى {{name}}",dependsOn:"يعتمد على: {{tasks}}",emptyTitle:"في انتظار خطة المهام",emptyDescription:"سيقوم المشرف بإنشاء خطة مهام بمجرد بدء النقاش.",emptyState:"ستظهر خطة المهام هنا عندما يقوم المشرف بإنشائها",unassigned:"غير مُعيَّن",progress:"{{done}} من {{total}} مهام مكتملة",verificationPassed:"ناجح",verificationFailed:"فاشل",showMore:"عرض المزيد",showLess:"عرض أقل",awaitingApproval:"في انتظار الموافقة",filedBy:"أنشأها {{agent}}",wonByBid:"تم الفوز بالمزايدة — الثقة {{confidence}}٪، {{complexity}}"},$={title:"ذاكرة المستخدم",subtitle:"تصفح وإدارة ذكريات المستخدم المخزنة بواسطة الوكلاء",userIdPlaceholder:"أدخل معرف المستخدم…",searchPlaceholder:"البحث في الذكريات…",enterUserId:"أدخل معرف مستخدم لتصفح ذكرياته",totalEntries:"إجمالي الإدخالات",preferences:"التفضيلات",facts:"الحقائق",conflicts:"المتعارضة",cat_all:"الكل",cat_preference:"التفضيلات",cat_fact:"الحقائق",cat_context:"السياق",deleteAll:"حذف الكل",deleteAllTitle:"حذف جميع الذكريات",deleteAllDesc:"سيتم حذف جميع ذكريات هذا المستخدم نهائياً. لا يمكن التراجع عن هذا الإجراء.",deleteAllConfirm:"حذف الكل",entryDeleted:"تم حذف إدخال الذاكرة",allDeleted:"تم حذف جميع ذكريات المستخدم",noResults:"لم يتم العثور على إدخالات ذاكرة",value:"القيمة",sourceAgent:"الوكيل المصدر",accessCount:"عدد الوصول",created:"تاريخ الإنشاء",updated:"تاريخ التحديث",sourceConversation:"المحادثة المصدر",conflicted:"متعارض"},Q={title:"خصائص المستخدم",subtitle:"تصفح وإدارة خصائص longTerm المخزنة لكل مستخدم",userIdPlaceholder:"أدخل معرف المستخدم…",searchPlaceholder:"تصفية الخصائص…",enterUserId:"أدخل معرف مستخدم لعرض خصائصه",key:"المفتاح",type:"النوع",value:"القيمة",deleteAll:"حذف الكل",deleteAllTitle:"حذف جميع الخصائص",deleteAllDesc:"سيتم حذف جميع خصائص هذا المستخدم نهائياً.",deleted:"تم حذف الخصائص",noResults:"لم يتم العثور على خصائص",showingCount:"{{count}} خاصية"},Z={agentId:"معرف الوكيل",environment:"البيئة",title:"مشغلات الوكلاء",subtitle:"ربط النوايا بنشر الوكلاء للتوجيه التلقائي",create:"مشغل جديد",createTitle:"إنشاء مشغل",editTitle:"تعديل المشغل",intent:"النية",deployments:"عمليات نشر الوكلاء",addDeployment:"إضافة وكيل",agents:"وكلاء",empty:"لم يتم تكوين مشغلات بعد",created:"تم إنشاء المشغل",updated:"تم تحديث المشغل",deleted:"تم حذف المشغل",deleteTitle:"حذف المشغل",deleteDesc:"هل تريد حذف المشغل للنية «{{intent}}» نهائياً؟",searchPlaceholder:"تصفية حسب النية أو معرف الوكيل…"},X={agentCount:"الوكلاء",confidence:"الثقة",partialError:"فشلت بعض استعلامات المهارات",registryOverview:"نظرة عامة على السجل",skillName:"المهارة",skills:"مهارات",title:"اكتشاف القدرات",subtitle:"اكتشاف الوكلاء حسب مهاراتهم وقدراتهم المعلنة",searchPlaceholder:"البحث في المهارات…",strategyHighest:"أعلى ثقة",strategyAll:"جميع النتائج",registeredSkills:"المهارات المسجلة",noSkills:"لم يتم العثور على مهارات",matchingAgents:"الوكلاء المطابقون",noMatches:"لم يُعثر على وكلاء لهذه المهارة"},ee={title:"تصدير الوكيل",loading:"يُحمل شجرة الموارد...",selectResources:"اختر الموارد للتصدير",required:"مطلوب",snippets:"القصاصات",allSelected:"تم تحديد جميع الموارد",countSelected:"{{count}} من {{total}} مورد محدد",exportSelected:"تصدير المحدد"},te={title:"استيراد وكيل",dropZone:"أسقط ملف .zip هنا أو انقر للتصفح",dropZoneHint:"أرشيف الوكيل المصدر (.zip)",strategyLabel:"استراتيجية الاستيراد",createNew:"إنشاء كوكيل جديد",createNewDesc:"إنشاء نسخة جديدة بـ IDs جديدة. الأفضل للاستيراد لأول مرة.",mergeSync:"دمج/مزامنة مع الموجود",mergeSyncDesc:"يحدث الموارد الموجودة إذا تم استيرادها مسبقاً. ينشئ جديدة إذا لم توجد.",upgradeExisting:"ترقية الوكيل الموجود",upgradeDesc:"مطابقة هيكلية للموارد ضد الوكيل الهدف. الأفضل للترقية بين البيئات.",syncRemote:"مزامنة من مثيل بعيد",syncDesc:"اتصل بمثيل EDDI آخر وقم بمزامنة وكيل محدد مباشرة.",importNow:"استيراد الآن",previewChanges:"معاينة التغييرات",selectTargetAgent:"اختر الوكيل الهدف",upgradeTargetHint:"سيتم مطابقة الموارد المستوردة هيكلياً مع هذا الوكيل.",chooseAgent:"— اختر وكيلًا —",sourceAgent:"الوكيل المصدر (عن بُعد)",targetAgent:"الوكيل الهدف (محلي)",createNewTarget:"إنشاء وكيل جديد",resource:"المورد",type:"النوع",match:"مطابقة",action:"إجراء",new:"جديد",updated:"مُحدث",unchanged:"بدون تغيير",selected:"محدد",mergeNow:"استيراد المحدد",syncNow:"مزامنة الآن",upgradeNow:"ترقية الآن",importing:"يتم استيراد الوكيل...",contentIdentical:"المحتوى متطابق",targetContent:"الهدف",sourceContent:"المصدر",diffHiddenLines:"إظهار {{lines}} أسطر دون تغيير",diffRawComparison:"ليس JSON صالحًا — تجري المقارنة كنص عادي، لذا يظهر اختلاف التنسيق وحده أيضًا كتغيير."},oe={title:"مزامنة الوكلاء",subtitle:"قم بمزامنة الوكلاء بين مثيلات EDDI",connection:"المثيل المصدر",sourceUrl:"رابط EDDI المصدر",authToken:"رمز التفويض",authHint:"اختياري. يُرسل كترويسة X-Source-Authorization.",connect:"اتصال",connected:"متصل",agentsFound:"وكلاء",connectionFailed:"فشل الاتصال",agentMapping:"تخطيط الوكلاء",previewAll:"معاينة الكل",syncSelected:"مزامنة المحدد",remote:"عن بُعد",createNew:"إنشاء جديد",changes:"تغيير",agentsSelected:"وكلاء محددون",totalResources:"موارد",syncSuccess:"اكتملت المزامنة",syncError:"فشلت المزامنة",empty:"اتصل بالمثيل المصدر للبدء في مزامنة الوكلاء.",autoMatched:"مطابقة تلقائية",previewFirst:"معاينة التغييرات قبل المزامنة"},ne={actionCreate:"جديد",actionUpdate:"تحديث",actionSkip:"محدّث",actionConflict:"تعارض"},ae={title:"محادثات المستخدم",subtitle:"إدارة ربط النية → المستخدم → المحادثة",lookup:"بحث",intent:"النية",userId:"معرف المستخدم",agentId:"معرف الوكيل",environment:"البيئة",conversationId:"معرف المحادثة",binding:"الربط النشط",enterBoth:"أدخل النية ومعرف المستخدم",notFound:"لم يتم العثور على ربط",create:"إنشاء ربط",createTitle:"إنشاء ربط",created:"تم إنشاء الربط",deleteTitle:"حذف الربط",deleteDesc:'إزالة الربط للنية "{{intent}}" والمستخدم "{{userId}}"?',deleted:"تم حذف الربط"},re={placeholder:"البحث في الصفحات والوكلاء والإجراءات…",noResults:"لم يتم العثور على نتائج.",recent:"الأخيرة",navigate:"التنقل",agents:"الوكلاء",actions:"إجراءات سريعة",createAgent:"إنشاء وكيل جديد",openChat:"فتح الدردشة",kbdNavigate:"تنقل",kbdSelect:"تحديد",kbdClose:"إغلاق"},se={groupMemberHint:"ستشارك هذه المجموعة كمجموعة فرعية متداخلة في النقاش.",noGroupsHint:"أنشئ مجموعة أولاً، ثم أضِفها كعضو مجموعة فرعية متداخلة.",noGroupsYet:"لا توجد مجموعات متاحة",selectGroup:"اختر مجموعة موجودة…",title:"Group Setup Wizard",subtitle:"Assemble a team of AI advisors to discuss your questions",backToGroups:"Back to Groups",templateTitle:"Start from a template",templateDesc:"Choose a preset group configuration or start from scratch.",startBlank:"Start from Scratch",blankDesc:"Configure everything manually",configTitle:"Group Configuration",configDesc:"Name your group and choose how the agents will discuss",namePlaceholder:"e.g. Advisory Board",descPlaceholder:"What is this group for?",membersTitle:"Assemble Your Team",membersDesc:"For each seat, choose an existing agent or create a new one on the fly.",addMember:"Add Member",refreshAgents:"Refresh agent list",existingAgents:"existing agents",displayName:"Agent Name",displayNamePlaceholder:"Give this agent a name…",rolePlaceholder:"Role (e.g. Marketing, Engineering)",useExisting:"Use Existing",createNew:"Create New",selectAgent:"Select agent…",systemPrompt:"System Prompt",provider:"LLM Provider",model:"Model",apiKey:"API Key",apiKeyPlaceholder:"sk-…",createThisAgent:"Create Agent",creatingAgent:"Creating agent…",agentReady:"Agent created & deployed",agentCreated:'Agent "{{name}}" created',agentCreateFailed:"Failed to create agent: {{error}}",moderator:"Moderator",moderatorHint:"Synthesizes the discussion",addModerator:"Add Moderator",removeModerator:"Remove moderator",createModerator:"Create Moderator Agent",moderatorReady:"Moderator agent ready",moderatorCreated:"Moderator agent created",creatingModerator:"Creating moderator…",creatingSlot:"Creating {{name}}…",creatingGroup:"Creating group…",needMembers:"Add at least 2 members to proceed",reviewTitle:"Review & Create",reviewDesc:"Review your group configuration before creating.",reviewMembers:"Members",autoCreateNotice:"{{count}} agents will be auto-created when you click Create Group",autoCreateHint:"Each agent will be created and deployed automatically before the group is assembled.",unassignedWarning:"{{count}} members set to 'Use Existing' but no agent selected",unassignedHint:"These members will be skipped during discussions. Go back to assign agents.",flowPreview:"Discussion Flow",createGroup:"Create Group",created:"Group Created!",viewGroup:"Open Group",createAnother:"Create Another",success:"Group created successfully!",advancedSettings:"إعدادات البروتوكول المتقدمة",agentTimeout:"مهلة الوكيل (ثوانٍ)",maxRetries:"الحد الأقصى لإعادة المحاولة",onAgentFailure:"عند فشل الوكيل",onMemberUnavailable:"عند عدم توفر العضو",maxTurns:"الحد الأقصى للأدوار (0 = غير محدود)",maxTurnsHelp:"حد أمان لإجمالي أدوار الوكيل. الحد الافتراضي للخادم هو 50.",policySkip:"تخطي",policyRetry:"إعادة المحاولة",policyAbort:"إلغاء",policyFail:"فشل",hintDebate:"قم بتعيين أدوار PRO و CON للأعضاء. يبدأ Pro بالحجج أولاً، ثم Con، يليها الردود والحكم.",hintDevilAdvocate:"قم بتعيين دور DEVIL_ADVOCATE لعضو واحد على الأقل. سيتحدى إجماع المجموعة.",hintPeerReview:"يقوم كل عضو بنقد عمل كل عضو آخر بشكل فردي، ثم يراجع بناءً على الملاحظات المتلقاة.",hintDelphi:"يستجيب جميع الأعضاء بشكل مستقل ومجهول. بعد كل جولة، يرون النتائج المجهولة ويمكنهم التعديل. الحد الأقصى للأدوار يتحكم في عدد التكرارات المجهولة.",hintNegotiation:"يعرض الأعضاء مصالحهم، ثم يقدّمون المقترحات ويتفاوضون — ويحدّد «الحد الأقصى للجولات» عدد جولات المساومة. ولا يتدخل المنسّق للتحكيم إلا إذا لم يتم التوصل إلى اتفاق.",roleCoverageWarning:"لا يحمل أي عضو الدور «{{role}}»",roleCoverageHint:"يلجأ الخادم إلى السماح لجميع الأعضاء بالتحدث في {{phases}}، فيدافع الأشخاص أنفسهم عن الجانبين. ارجع إلى «الأعضاء» واملأ حقل الدور.",hintTaskForce:"ينشئ المشرف خطة مهام، ويوزع العمل على الوكلاء بشكل متوازٍ، ثم يتحقق من النتائج ويجمعها.",hintCustom:"حدد مراحلك الخاصة يدوياً. يمكن تكوين المراحل المخصصة عبر واجهة API بعد الإنشاء.",hintRoundTable:"يشارك جميع الأعضاء آراءهم، ثم يناقشون وجهات نظر بعضهم عبر جولات متعددة قبل أن يقوم المشرف بالتجميع.",protocolSummary:"البروتوكول",hitlTitle:"طلب موافقة بشرية",hitlDesc:"إيقاف المناقشة مؤقتًا عند المراحل المختارة وانتظار قرار بشري قبل المتابعة.",hitlApprovalPoints:"الإيقاف للموافقة عند",hitlNoPhases:"هذا النمط لا يحتوي على مراحل معدة مسبقًا للتحكم بها.",hitlNoApprovalPoints:"اختر مرحلة واحدة على الأقل، وإلا فلن تتوقف المناقشة أبدًا.",hitlTimeoutPolicy:"إذا لم يُتخذ قرار في الوقت المحدد",hitlApprovalTimeout:"مهلة الموافقة",hitlTimeoutInvalid:"أدخل مدة ISO-8601 موجبة، مثل PT15M أو PT1H30M.",hitlTimeoutHint:"مدة ISO-8601، مثل PT30S وPT15M وPT2H.",hitlGranularity:"دقة الموافقة",hitlGranularityHint:"تنطبق الموافقة على مستوى المهمة على تنفيذ TASK_FORCE — وافق على كل مهمة أو ارفضها على حدة.",hitlOnTaskRejection:"عند رفض مهمة",hitlPinNote:"تفعيل نقاط الموافقة يثبّت مراحل مناقشة هذه المجموعة (دقة {{granularity}}).",hitlReviewBadge:"موافقة بشرية",humanOnTimeoutAbort:"إلغاء النقاش",humanOnTimeoutLabel:"عند انتهاء المهلة",humanOnTimeoutSkip:"تخطي دورهم والمتابعة",humanPrincipalId:"معرّف الهوية الأساسي",humanPrincipalIdHint:"الهوية المخوّلة بإرسال مساهمات هذا العضو — يتوقف النقاش مؤقتًا وينتظر عندما يحين دوره للحديث.",humanPrincipalIdPlaceholder:"معرّف تسجيل الدخول/الهوية الأساسية للمستخدم",humanTurnSettingsHint:"يتوقف النقاش مؤقتًا وينتظر عندما يحين دور عضو بشري للحديث. حدد ما يحدث إذا لم يستجب في الوقت المحدد.",humanTurnSettingsTitle:"إعدادات دور الأعضاء البشريين",humanTurnTimeoutInvalid:"ليست مدة صالحة بصيغة ISO-8601، مثل PT24H أو P1D.",humanTurnTimeoutLabel:"مهلة الدور (مدة بصيغة ISO-8601)",humanTurnTimeoutPlaceholder:"مثل PT24H — اتركه فارغًا للانتظار إلى أجل غير مسمى",memberTypeHuman:"بشري"},ie={advisoryBoard:"مجلس استشاري",advisoryBoardDesc:"خمس وجهات نظر — التسويق والهندسة والمالية والقانون والاستراتيجية — تُبدي رأيها في السؤال نفسه، ثم يلخّص المنسّق.",peerReview:"لجنة مراجعة الأقران",peerReviewDesc:"يقيّم المراجعون ما تقدّمه — مسودة أو خطة أو مقترحًا — وينقدون تقييمات بعضهم ثم يُنقّحونها، ويجمع المنسّق النتيجة.",riskAssessment:"تقييم المخاطر",riskAssessmentDesc:"يعرض كل عضو قراءته، ويتبنّى أحدهم الموقف المعاكس لكشف النقاط العمياء، فيردّ الباقون، ثم يلخّص المنسّق ما صمد.",forecasting:"تقديرات مستقلة",forecastingDesc:"يجيب الأعضاء دون ذكر أسمائهم عبر عدة جولات ولا يرون بينها سوى نتائج مجهولة المصدر، فلا ينساق أحد خلف أول متحدث.",proCon:"مناظرة مع وضد",proConDesc:"عضوان يؤيدان المقترح وعضوان يعارضانه، تليها ردود ثم حكم المنسّق.",negotiation:"تفاوض",negotiationDesc:"يعرض طرفان مصالحهما ويقدّمان المقترحات ويتبادلان التنازلات جولة بعد جولة؛ ولا يتدخل المنسّق للتحكيم إلا إذا لم يتم التوصل إلى اتفاق.",taskForce:"فريق مهام",taskForceDesc:"يقسّم المنسّق الهدف إلى مهام، ينفّذها الأعضاء بالتوازي، ثم يتحقق منها ويجمع النتائج.",roles:{marketingExpert:"خبير التسويق",techLead:"قائد تقني",financeDirector:"المدير المالي",legalCounsel:"المستشار القانوني",strategyConsultant:"استشاري الاستراتيجية",substanceReviewer:"مراجع المضمون",structureReviewer:"مراجع البنية",riskReviewer:"مراجع المخاطر",riskAnalyst:"Risk Analyst",domainExpert:"Domain Expert",devilsAdvocate:"Devil's Advocate",analystA:"Analyst A",analystB:"Analyst B",analystC:"Analyst C",analystD:"Analyst D",proAdvocate1:"Pro Advocate 1",proAdvocate2:"Pro Advocate 2",conAdvocate1:"Con Advocate 1",conAdvocate2:"Con Advocate 2",partyA:"الطرف أ",partyB:"الطرف ب",projectLead:"قائد المشروع",researcher:"باحث",implementer:"منفذ",qualityAssurance:"ضمان الجودة"},assignRoles:"تعيين الأدوار",backToGallery:"العودة إلى القوالب",browseButton:"من قالب",createButton:"إنشاء مجموعة",created:"تم إنشاء المجموعة من القالب",nameLabel:"اسم المجموعة",selectAgent:"اختر وكيلاً…",subtitle:"ابدأ من نقاش جاهز ومُعدّ مسبقًا — ما عليك سوى تعيين الوكلاء إلى أدواره المسمّاة.",title:"قوالب المجموعات",roleCount_few:"{{count}} أدوار للتعيين",roleCount_many:"{{count}} أدوار للتعيين",roleCount_one:"{{count}} دور للتعيين",roleCount_two:"{{count}} أدوار للتعيين",roleCount_zero:"{{count}} أدوار للتعيين",roleCount_other:"{{count}} أدوار للتعيين",empty:"لا توجد قوالب متاحة",emptyDescription:"لا يوفّر هذا الخادم أي قوالب مجموعات. لا يزال بإمكانك إنشاء مجموعة من الصفر عبر المعالج."},le={agentIdPlaceholder:"معرف الوكيل لمعالجة الرسائل",botToken:"رمز البوت",botTokenHint:"رمز OAuth للبوت. استخدم مرجع الخزنة لمزيد من الأمان.",botTokenPlaceholder:"xoxb-… أو ${vault:slack-bot-token}",channel:"قناة",channelId:"معرف قناة Slack",channelIdCol:"معرف القناة",channelIdHint:"انقر بزر اليمين على قناة Slack → عرض تفاصيل القناة → نسخ معرف القناة",channelsPlural:"قنوات",channelType:"نوع القناة",confirmDelete:"حذف القناة؟",confirmDeleteDesc:"ستتم إزالة تكامل القناة هذا نهائيًا.",create:"إنشاء قناة",createTitle:"إنشاء تكامل قناة",defaultAgentId:"معرف الوكيل الافتراضي",defaultTargetHint:"يعالج الهدف الافتراضي جميع الرسائل التي لا تتطابق مع كلمة مفتاحية. يمكنك إضافة أهداف أخرى بعد الإنشاء.",empty:"لا توجد قنوات بعد",emptyDesc:"أنشئ تكامل قناة لربط الوكلاء بـ Slack.",name:"الاسم",namePlaceholder:"مثلاً Engineering AI Hub",openSlackApps:"فتح لوحة تحكم تطبيق Slack",searchPlaceholder:"بحث في القنوات…",signingSecret:"سر التوقيع",signingSecretHint:"من صفحة المعلومات الأساسية لتطبيق Slack.",signingSecretPlaceholder:"سلسلة ست عشرية أو ${vault:slack-signing-secret}",slackSetupGuide:"دليل إعداد Slack",slackSetupSummary:"أنشئ تطبيق Slack، وكوّن نطاقات رمز البوت (app_mentions:read، chat:write، im:history، channels:history، groups:history)، ثم الصق بيانات الاعتماد هنا.",target:"هدف",targets:"أهداف",targetsCol:"الأهداف",type:"النوع",unnamed:"قناة بدون اسم",version:"الإصدار"},ce={saveSuccess:"تم حفظ القناة",addTarget:"إضافة هدف",addTrigger:"إضافة مشغل…",agentId:"معرف الوكيل",botToken:"رمز البوت",channelId:"معرف قناة Slack",cooldown:"فترة التهدئة (ث)",general:"عام",groupId:"معرف المجموعة",isDefault:"افتراضي",maxCost:"الحد الأقصى $/يوم",maxDaily:"الحد الأقصى/يوم",name:"الاسم",observe:"مراقبة",observeDesc:"مراقبة سلبية واستجابة انتقائية",observeKeywords:"كلمات مفتاحية للتشغيل",observeMimeTypes:"أنواع MIME للتشغيل",observeMode:"وضع المراقبة",observeSettings:"إعدادات وضع المراقبة",platformConfig:"تكوين المنصة",rawConfig:"التكوين الخام",removeTarget:"إزالة",requiredEvents:"اشتراكات الأحداث المطلوبة:",requiredScopes:"نطاقات رمز البوت المطلوبة:",setDefault:"تعيين كافتراضي",signingSecret:"سر التوقيع",targetName:"الاسم",targets:"أهداف توجيه الرسائل",targetType:"النوع",triggerHint:'يكتب المستخدمون "كلمة مفتاحية: رسالة" للتوجيه إلى هذا الهدف',triggerKeywords:"كلمات مفتاحية للتشغيل",triggers:"مشغلات",type:"نوع القناة",webhookHint:"الصق هذا الرابط في حقل Request URL ضمن Event Subscriptions في تطبيق Slack.",webhookUrl:"رابط الويب هوك",hitlSection:"موافقات الإنسان في الحلقة (اختياري)",hitlApprovalChannel:"معرّف قناة الموافقة",hitlApprovalChannelHint:"قناة Slack التي تتلقى بطاقة موافقة عند إيقاف المحادثة مؤقتًا.",hitlApproverUserIds:"معرّفات مستخدمي الموافِقين",hitlApproverUserIdsHint:"معرّفات مستخدمي Slack مفصولة بفواصل ويُسمح لهم بالموافقة عبر الأزرار. بدون هذه القائمة لا تُعرض الأزرار (فشل مغلق)."},de={loadingApprovalDetails:"جارٍ تحميل تفاصيل الموافقة…",pendingCount:"{{count}} بانتظار الموافقة",approvalDetailsError:"تعذّر تحميل ما سيفعله هذا الطلب، لذا لا يمكن الموافقة عليه من هنا. الرفض ما زال آمنًا.",awaitingHuman:"في انتظار الإنسان",awaitingApproval:"في انتظار الموافقة",approve:"موافقة",reject:"رفض",cancel:"إلغاء",approved:"تمت الموافقة",rejected:"مرفوض",cancelled:"ملغى",pending:"معلق",emptyQueue:"لا توجد موافقات معلقة",emptyQueueDescription:"جميع المحادثات تسير — لا حاجة لمدخلات بشرية الآن.",surface:"السطح",regular:"محادثة",group:"مجموعة",pauseReason:"السبب",pausedAt:"متوقف",timeoutPolicy:"المهلة",timeRemaining:"المتبقي",overdue:"متأخر",phase:"المرحلة",granularity:"الدقة",taskApprovals:"موافقات المهام",approveAll:"الموافقة على الكل",note:"إضافة ملاحظة (اختياري)",notePlaceholder:"أضف ملاحظة للقرار...",discussionCancelled:"تم إلغاء المناقشة",cancelDiscussion:"إلغاء المناقشة",rejectAll:"رفض الكل",timeoutWaitIndefinitely:"انتظار غير محدود",timeoutAutoApprove:"موافقة تلقائية",timeoutAutoReject:"رفض تلقائي",timeoutAbort:"إحباط",granularityPhase:"مرحلة",granularityTask:"مهمة",rejectionFail:"إفشال المهمة",rejectionRetry:"إعادة محاولة المهمة",groupsTruncated:"توجد موافقات مجموعات أكثر مما هو معروض هنا.",groupsLoadError:"تعذر تحميل موافقات المجموعات.",toolApprovalRequired:"مطلوب الموافقة على الأداة",toolCallsAwaiting:"استدعاءات الأدوات بانتظار الموافقة",executedUngated:"تم التنفيذ بالفعل (بدون بوابة)",outcomeUnknown:"تمت مقاطعة موافقة سابقة أثناء التنفيذ — أثرها غير معروف؛ تحقق خارجيًا قبل إعادة المحاولة.",outcomeUnknownShort:"النتيجة غير معروفة",toolApprovalHint:"الموافقة تُطبّق اختياراتك لكل استدعاء (الاستدعاءات التي لم تغيّرها تتم الموافقة عليها). الرفض يرفض الدفعة بأكملها.",toolApprovalHintExplicit:"يحتاج كل استدعاء إلى موافقة أو رفض خاص به قبل أن تتمكن من الموافقة على الدفعة. الرفض يرفض الدفعة بأكملها.",explicitReviewMissing:"راجع كل استدعاء أعلاه قبل الموافقة.",redactionCaveat:'الوسائط المعروضة أدناه محجوبة — تظهر القيمة السرية كـ ""، ولا يتم حذفها.',gateReason:"النمط المطابق",argsTruncated:"الوسائط مقتطعة",amendArguments:"تعديل الوسائط (اختياري)",amendPlaceholder:'كائن JSON بديل كامل، مثال {"to":"ops@acme.com"}. اتركه فارغًا للإبقاء على الأصل.',amendTruncated:"لا يمكن تعديل استدعاء تم اقتطاع وسائطه — وافق عليه أو ارفضه كما هو.",amendInvalidJson:"يجب أن تكون الوسائط المعدّلة كائن JSON صالحًا.",amendTooLarge:"الوسائط المعدّلة كبيرة جدًا.",review:"مراجعة",tool:"الأداة",scopeAll:"عرض جميع الموافقات المعلّقة عبر النظام.",scopeOwn:"عرض الموافقات المعلّقة لمحادثاتك.",chatPaused:"هذه المحادثة بانتظار موافقة بشرية.",noProgressWaitForHuman:"انتظار موافقة بشرية",noProgressAutoReject:"الرفض التلقائي",noProgressAbort:"إلغاء",confirmApproveTitle:"الموافقة على الطلب؟",confirmApproveDescription:"الموافقة على هذه المحادثة واستئنافها؟",confirmApproveToolTitle:"الموافقة على تنفيذ الأداة؟",confirmApproveToolDescription:"ستؤدي الموافقة إلى تشغيل: {{toolNames}}. يؤدي هذا إلى تنفيذ إجراءات فعلية ولا يمكن التراجع عنه.",confirmRejectTitle:"رفض الطلب؟",confirmRejectDescription:"رفض هذا الطلب؟ لن تستمر المحادثة.",confirmCancelTitle:"إلغاء المحادثة؟",confirmCancelDescription:"إلغاء هذه المحادثة؟ سيتم إيقاف أي عمل قيد التنفيذ.",confirmCancelButton:"إلغاء المحادثة",confirmCancelGroupTitle:"إلغاء المناقشة؟",confirmCancelGroupDescription:"إلغاء هذه المناقشة؟ سيتم إيقاف أي عمل قيد التنفيذ.",confirmCancelGroupButton:"إلغاء المناقشة",confirmDismiss:"رجوع",approvalBlockedHeading:"لا يمكن الموافقة على هذا من هنا",confirmRejectToolTitle:"رفض تنفيذ الأداة؟",confirmRejectToolDescription:"لن يُنفَّذ أي شيء. تستمر المحادثة ويجيب الوكيل دون {{toolNames}}.",humanTurn:"دور العضو",humanTurnReason:"في انتظار أن يتحدث {{member}}",humanTurnMemberFallback:"أحد الأعضاء",decidedProgress:"تم البت في {{decided}} من {{total}}"},ue={deploying:"جارٍ نشر الوكيل…",error:"حدث خطأ ما",newConversation:"محادثة جديدة",ready:"جاهز — اكتب رسالة للاختبار",retry:"حاول مجدداً",saving:"جارٍ حفظ التغييرات…",starting:"جارٍ بدء المحادثة…",timeout:"انتهت مهلة النشر",title:"دردشة اختبارية",preparing:"جارٍ التحضير…"},pe={auditTrail:"سجل التدقيق",checking:"جارٍ التحقق…",coordConnected:"المنسق متصل",coordDisconnected:"المنسق غير متصل",coordUnknown:"المنسق —",createGroup:"إنشاء مجموعة",noConversations:"لا توجد محادثات بعد",offline:"غير متصل",online:"متصل",platform:"المنصة",platformHealth:"صحة المنصة",recentConversations:"المحادثات الأخيرة",secretVault:"خزنة الأسرار",vaultDown:"الخزنة غير متاحة",vaultUp:"الخزنة جاهزة",viewLogs:"عرض السجلات"},me={retry:"حاول مجدداً",title:"حدث خطأ ما"},ge={auditPseudonymized:"تم إخفاء هوية التدقيق",checkingStatus:"جارٍ التحقق...",confirmDelete:"نعم، احذف جميع البيانات",confirmDesc:'سيؤدي هذا إلى حذف جميع بيانات المستخدم "{{userId}}" نهائياً. لا يمكن التراجع عن هذا الإجراء.',confirmTitle:"تأكيد حذف البيانات",conversationsDeleted:"المحادثات المحذوفة",delete:"حذف جميع البيانات",deleteSuccess:"تم حذف بيانات المستخدم بنجاح",deleting:"جارٍ الحذف...",enterUserIdFirst:"أدخل معرف مستخدم أعلاه للتحقق من الحالة",export:"تصدير البيانات",exportSuccess:"تم تصدير بيانات المستخدم بنجاح",exporting:"جارٍ التصدير...",legalDesc:"يوفّر تصدير البيانات (Art. 15/20) ملف JSON يحتوي على جميع البيانات المخزنة للمستخدم. يزيل الحذف (Art. 17) جميع الذكريات وبيانات المحادثات نهائياً، ويُخفي هوية إدخالات التدقيق، ولا يمكن التراجع عنه.",legalNotice:"إشعار حماية البيانات",liftRestriction:"رفع التقييد",liftingRestriction:"جارٍ الرفع...",logsPseudonymized:"تم إخفاء هوية السجلات",memoriesDeleted:"الذكريات المحذوفة",restrictProcessing:"تقييد المعالجة",restricting:"جارٍ التقييد...",restrictionApplied:"تم تقييد المعالجة للمستخدم",restrictionDesc:"قيّد المعالجة عندما يعترض المستخدم على دقة البيانات أو على المعالجة. أثناء التقييد، تُحفظ بيانات المستخدم لكن لا يمكن معالجة محادثات جديدة. هذا الإجراء قابل للعكس.",restrictionLifted:"تمت إزالة تقييد المعالجة",restrictionTitle:"تقييد المعالجة (Art. 18)",resultsTitle:"اكتمل المحو",statusActive:"المعالجة نشطة",statusUnknown:"الحالة غير متاحة",statusRestricted:"المعالجة مقيّدة",subtitle:"إدارة بيانات المستخدم المتوافقة مع GDPR — المحو (Art. 17)، وقابلية النقل (Art. 15/20)، وتقييد المعالجة (Art. 18)",title:"الخصوصية والامتثال",userId:"معرف المستخدم",userIdPlaceholder:"أدخل معرف المستخدم...",userLookup:"البحث عن مستخدم"},he={message:"الوضع التجريبي — عرض بيانات نموذجية. اتصل بخلفية EDDI للحصول على بيانات حقيقية."},ye={confirmPurgeAll:"حذف جميع الموارد اليتيمة البالغ عددها {{count}} نهائيًا؟ يحذف الخادم كل العناصر — لا يُطبَّق تحديدك. لا يمكن التراجع عن هذا.",deleteSelected:"حذف {{count}} محدد",description:"ابحث عن الموارد غير المُشار إليها من أي وكيل أو حزمة ونظّفها.",deselectAll:"إلغاء تحديد الكل",includeDeleted:"تضمين المحذوفة مبدئياً",lastScanned:"آخر فحص",noOrphans:"لم يتم العثور على عناصر يتيمة",purge:"تطهير الكل",purgeSuccess:"تم حذف {{count}} عنصر يتيم",runScan:"تشغيل الفحص",scan:"فحص",scanPromptDesc:"ابحث عن تكوينات الإضافات (القواعد، استدعاءات API، نماذج LLM، المخرجات) غير المُشار إليها من أي مسار عمل أو وكيل. نظّف الموارد غير المستخدمة للحفاظ على منصتك مرتّبة.",scanPromptTitle:"افحص منصتك",scanning:"جارٍ فحص الموارد…",selectAll:"تحديد الكل",softDeleted:"محذوف",title:"اكتشاف العناصر اليتيمة",found_few:"تم العثور على {{count}} يتيم",found_many:"تم العثور على {{count}} يتيم",found_one:"تم العثور على {{count}} يتيم",found_two:"تم العثور على {{count}} يتيم",found_zero:"تم العثور على {{count}} يتيم",found_other:"تم العثور على {{count}} يتيم"},ve={apiCallsMinute:"استدعاءات API / دقيقة",configuration:"الإعدادات",conversationsToday:"المحادثات اليوم",description:"قم بتكوين حدود المعدل وسقوف الاستخدام وميزانيات التكلفة لكل مستأجر.",disable:"تعطيل",disabled:"معطّل",enable:"تفعيل",enabled:"مُفعّل",enforcementOff:"الفرض متوقف.",enforcementOffHint:"لا يتم فرض الحصص. فعّل الفرض واحفظ لبدء تطبيق الحدود.",limitHint:"-1 = غير محدود",liveUsage:"الاستخدام المباشر",maxAgentsPerTenant:"الحد الأقصى للوكلاء / مستأجر",maxApiCallsPerMinute:"الحد الأقصى لاستدعاءات API / دقيقة",maxConversationsPerDay:"الحد الأقصى للمحادثات / يوم",maxMonthlyCostUsd:"الحد الأقصى للتكلفة الشهرية (USD)",monthlyCost:"التكلفة الشهرية",resetConfirmDesc:'يصفّر فورًا جميع عدّادات الاستخدام (المحادثات، طلبات API، التكلفة الشهرية) للمستأجر "default". لا يمكن التراجع.',resetConfirmTitle:"إعادة تعيين عدّادات الاستخدام؟",resetCounters:"إعادة تعيين العدّادات",resetSuccess:"تمت إعادة تعيين عدّادات الاستخدام",saveSuccess:"تم حفظ الحصة",tenantId:"معرف المستأجر",title:"حصص المستأجرين"},Te={clearVault:"مسح مرجع الخزنة",createNew:"إنشاء سر جديد",emptyVault:"لا توجد أسرار مخزنة بعد",filterPlaceholder:"ابحث في مفاتيح الخزنة…",keyNotFound:"لم يتم العثور على هذا المفتاح في الخزنة",loading:"جارٍ تحميل المفاتيح…",noMatch:'لا توجد مفاتيح تطابق "{{filter}}"',pickFromVault:"اختر من الخزنة",placeholder:"مفتاح API أو ${vault:key-name}",vaultDown:"الخزنة غير مُهيّأة — أعدّ مزوّد أسرار في خلفية EDDI"},De={category:"الفئة",content:"محتوى الموجه",contentLabel:"محتوى القصاصة",contentPlaceholder:"يجب أن تكون حذراً ودقيقاً في ردودك...",description:"الوصف",descriptionPlaceholder:"ما تفعله هذه القصاصة",identity:"الهوية",name:"اسم القصاصة",namePlaceholder:"مثل: cautious_mode",noTags:"لا توجد وسوم",tagPlaceholder:"مثل: safety، production",tags:"الوسوم",templateEnabled:"تفعيل حل القوالب",templateEnabledHint:"عند التعطيل، تُعامَل علامات {{}} في المحتوى كنص حرفي (مفيد لأمثلة الشيفرة).",usageHint:"الاستخدام:"},Ae={deployed:"منشور",deploying:"جارٍ النشر...",error:"خطأ",notDeployed:"غير منشور",checking:"جارٍ التحقق…"},fe={subtitle:"إدارة ذكريات المستخدم وخصائصه وروابط محادثاته",tabs:"أقسام بيانات المستخدم",title:"بيانات المستخدم"},Pe={deleteKey:"حذف {{key}}",editKey:"تعديل {{key}}",tableTitle_few:"{{count}} متغيّر",tableTitle_many:"{{count}} متغيّر",tableTitle_one:"{{count}} متغيّر",tableTitle_two:"{{count}} متغيّر",tableTitle_zero:"{{count}} متغيّر",tableTitle_other:"{{count}} متغيّر",title:"المتغيّرات العامة",description:"قيم إعداد على مستوى النشر بالكامل، متاحة في جميع الوكلاء.",create:"إضافة متغيّر",createTitle:"إضافة متغيّر عام",editTitle:"تعديل المتغيّر",keyLabel:"المفتاح",keyPlaceholder:"مثال: default-model",keyError:"الأحرف والأرقام والنقاط والشرطات السفلية والشرطات فقط.",valueLabel:"القيمة",valuePlaceholder:"مثال: gpt-4.1",valueWarning:"القيم مرئية في الواجهة والسجلات. استخدم خزنة الأسرار للبيانات الحساسة.",descriptionLabel:"الوصف (اختياري)",descriptionPlaceholder:"وصف اختياري…",exportableLabel:"تضمين في عمليات تصدير الوكلاء",save:"حفظ المتغيّر",saveSuccess:"تم حفظ المتغيّر «{{key}}»",deleteSuccess:"تم حذف المتغيّر «{{key}}»",confirmDeleteTitle:"حذف المتغيّر",confirmDeleteMessage:"هل تريد بالتأكيد حذف «{{key}}»؟ سترى الوكلاء التي تستخدم ${vars:{{key}}} مراجع غير محلولة.",empty:"لا توجد متغيّرات عامة معرّفة",emptyHint:"انقر على «إضافة متغيّر» لإنشاء أول قيمة إعداد على مستوى النشر.",searchPlaceholder:"تصفية المتغيّرات…",colKey:"المفتاح",colValue:"القيمة",colDescription:"الوصف",colExportable:"التصدير",colReference:"المرجع",colActions:"الإجراءات",exportYes:"مضمَّن في عمليات التصدير",exportNo:"مستبعَد من عمليات التصدير",copyVars:"نسخ مرجع ${vars:…}",refCopied:"تم النسخ: {{ref}}",infoLine1:"استخدم {{vars.}} في مطالبات النظام أو ${vars:} في أي مكان ضمن إعدادات الوكلاء.",infoLine2:"تسري التغييرات خلال دقيقتين (مدة صلاحية ذاكرة التخزين المؤقت). للقيم الحساسة استخدم خزنة الأسرار بدلاً من ذلك."},Se={endpoints:"نقاط نهاية",endpointsTotal:"إجمالي نقاط النهاية",groupsSelected:"مجموعات محددة",importOpenApi:"استيراد من OpenAPI",importSelected:"استيراد المجموعات المحددة",importing:"جارٍ الاستيراد…",selectGroups:"اختر مجموعات API لاستيرادها كإضافات استدعاء API منفصلة"},Ce=JSON.parse('{"board":{"continuePlaceholder":"متابعة هذه المناقشة…","inputDisabledClosed":"هذه المناقشة مغلقة","newDiscussion":"مناقشة جديدة","noResponseGenerated":"لم يتم إنشاء استجابة","awaitingApprovalHint":"هذه المناقشة متوقفة في انتظار موافقة بشرية.","reviewInManager":"مراجعتها","askMore":"اسأل {{name}} المزيد ←","askYourBoard":"اسأل فريق المهام…","attachFile":"إرفاق ملف","backToLive":"العودة إلى النقاش المباشر","chatOneOnOne":"محادثة فردية","close":"إغلاق","copied":"تم النسخ!","copyResponse":"نسخ الرد","details":"التفاصيل","emptyDescription":"اطرح سؤالاً وسيناقشه فريق المهام.","emptyTitle":"جاهز للنقاش","error":"حدث خطأ ما","fileTooLarge":"يجب أن يكون حجم الملف أقل من 10 ميغابايت","fileTypeNotAllowed":"نوع الملف هذا غير مدعوم","hideConfig":"إخفاء لوحة التفاصيل","live":"مباشر","liveNow":"مباشر","loadingResponse":"جارٍ تحميل الرد","members":"الفريق","membersPanel":"لوحة الفريق","moderator":"المنسّق","noMembers":"لا يوجد أعضاء في الفريق","noSessions":"لا توجد جلسات بعد","phase":"المرحلة","pin":"تثبيت الرد","removeAttachment":"إزالة المرفق","running":"قيد التنفيذ","runningHint":"لا يزال هذا النقاش جارياً — تظهر الردود الجديدة تلقائياً.","send":"إرسال","sessions":"الجلسات","sessionsPanel":"لوحة الجلسات","skipped":"{{name}} — تم التخطي","startingDescription":"فريق المهام يعمل على ذلك — ستظهر الردود هنا فور ورودها.","startingTitle":"النقاش قيد التنفيذ","stillDiscussing":"لا يزال فريق المهام يناقش…","stop":"إيقاف","synthesis":"التركيب","synthesisResult":"نتيجة التركيب","title":"فريق المهام","toggleConfig":"تبديل لوحة التفاصيل","unpin":"إلغاء تثبيت الرد","untitled":"بدون عنوان","viewSessions":"عرض الجلسات السابقة"},"thread":{"fileTooLarge":"يجب أن يكون الملف أقل من 20 ميغابايت","fileTypeNotAllowed":"نوع الملف هذا غير مدعوم","attachmentLimit":"الحد الأقصى {{max}} مرفقات لكل رسالة","notForwarded":"تم تخزين الملف لكنه كبير جداً للنموذج","uploadFailed":"فشل الرفع: {{error}}","noResponse":"لا توجد استجابة","attachFile":"إرفاق ملف","emptySubtitle":"أرسل رسالة لبدء المحادثة مع {{name}}.","emptyTitle":"محادثة مع {{name}}","followUp":"متابعة لردّك…","fromSession":"من جلسة {{boardName}}","placeholder":"اكتب رسالة…","questionLabel":"السؤال","removeAttachment":"إزالة المرفق","responseLabel":"الرد","send":"إرسال","sendError":"عذراً، حدث خطأ. يرجى المحاولة مرة أخرى.","startingConversation":"جارٍ بدء المحادثة…","toggleContext":"تبديل السياق","placeholderNamed":"رسالة إلى {{name}}…"},"chat":{"agentDetails":"تفاصيل الوكيل","selectToView":"حدد وكيلاً لعرض التفاصيل","hideDetails":"إخفاء التفاصيل","editAgent":"تعديل الوكيل","auditLogs":"سجلات المراجعة","openStudio":"فتح في المدير","triggers":"عرض المشغلات","starterSelected":"تمت إفادة الإدخال بالموجه","title":"محادثة","hideAgentDetails":"إخفاء تفاصيل الوكيل","showAgentDetails":"عرض تفاصيل الوكيل"},"agentEditor":{"capabilities":"القدرات","workflows":"سير العمل","features":"الميزات والأمان","a2aEnabled":"وكيل إلى وكيل","memoryTools":"أدوات الذاكرة","signedMessages":"الرسائل الموقعة","strictMemory":"ذاكرة صارمة","hitlMode":"وضع الموافقة","llmConfig":"النموذج ومحرك LLM","provider":"خط الأنابيب","mode":"وضع التنفيذ","personaPrompt":"موجه الشخصية","starters":"مقبلات المحادثة","channels":"موصلات القنوات","temperature":"درجة الحرارة","contextWindow":"حد السياق","activeTools":"الأدوات النشطة","noLlm":"لم يتم تكوين LLM","noTools":"لم يتم التكوين","add":"إضافة","addCapability":"إضافة قدرة","cancel":"إلغاء","close":"إغلاق","confidence":"الثقة","confidenceHigh":"عالية","confidenceLow":"منخفضة","confidenceMedium":"متوسطة","description":"الوصف","descriptionPlaceholder":"صف خبرة هذا الوكيل…","discardChanges":"لديك تغييرات غير محفوظة. هل تريد تجاهلها؟","loadError":"فشل تحميل بيانات الوكيل.","noCapabilities":"لا توجد قدرات معرّفة.","removeCapability":"إزالة القدرة","retry":"إعادة المحاولة","save":"حفظ التغييرات","saveError":"فشل حفظ التغييرات","saveSuccess":"تم تحديث الوكيل بنجاح","settings":"الإعدادات","skill":"المهارة","skillPlaceholder":"مثال: التلخيص","systemPrompt":"مطالبة النظام","systemPromptPlaceholder":"تعليمات تحدّد سلوك هذا الوكيل وشخصيته وخبرته…","title":"تعديل الوكيل"},"settings":{"hitlApprovalPointsNote":"تتحكم هذه الإعدادات في كيفية عمل الموافقة. أما نقاط المناقشة التي تتطلب موافقة فيتم تكوينها لكل مرحلة في الـ Manager.","hitlOpenManager":"تحديد نقاط الموافقة","deliberation":"جودة التداول","deliberationDesc":"تسجيل آراء الأقلية والسماح للأعضاء بإنشاء العمل الذي يكتشفونه أثناء النقاش","recordDissents":"تسجيل تقرير الأقلية","recordDissentsDesc":"بعد كل تلخيص، يحصل كل عضو لم يكتبه على دور قصير ليبيّن مواضع اعتراضه المتبقية. يكلّف نداءً إضافيًا لكل عضو.","agentFiledTasks":"السماح للأعضاء بإنشاء مهامهم","agentFiledTasksDesc":"العمل الذي يكتشفه الوكيل أثناء النقاش يصبح مهمة فعلية تلتقطها موجة التنفيذ التالية. عند الإيقاف لا توجد الأدوات لهذه المجموعة أصلًا.","maxTasksPerDiscussion":"أقصى مهام مُنشأة / نقاش","maxTasksPerDiscussionHelp":"يحتسب المهام التي ينشئها الوكلاء فقط، حتى لا يستنفده تراكم مخطَّط كبير.","maxTasksPerTurn":"أقصى مهام مُنشأة / دور","maxTasksPerTurnHelp":"يحدّ من دور منفلت؛ أما سقف النقاش فيحدّ من الانحراف البطيء.","maxCost":"سقف التكلفة (دولار)","maxCostUnlimited":"بلا حد","maxCostHelp":"اتركه فارغًا لعدم وجود حد. قد يتجاوز دورٌ جارٍ بالفعل السقف بقليل.","onCostExceeded":"عند بلوغ السقف","costSynthesize":"التلخيص الآن — القفز مباشرة إلى الخلاصة","costAbort":"إحباط — إفشال النقاش فورًا","costCeilingInvalid":"يجب أن يكون سقف التكلفة أكبر من 0. أفرغ الحقل لعدم وجود حد.","maxDelegationDepth":"أقصى عمق للتفويض","maxDelegationDepthHelp":"تفويض أ إلى ب ثم ب إلى ج هو عمق 2. تُرفض القفزة التي تتجاوز ذلك — وهذا ما يوقف دورة التفويض.","delegationTimeout":"مهلة التفويض (ثوانٍ)","delegationTimeoutHelp":"مدة انتظار الوكيل المفوِّض لمفوَّضه. ارفعها عندما ينفّذ المفوَّض أدوات أو نقاشًا متداخلًا.","allowedDelegationTargets":"قائمة السماح بالتفويض","allowedDelegationTargetsHint":"أي وكيل منشور","allowedDelegationTargetsHelp":"معرّفات وكلاء مفصولة بفواصل. اتركه فارغًا للسماح لأي وكيل منشور.","moderatorlessWarning":"مقصورة على منسّق لا تملكه فرقة العمل هذه: {{phases}}. سينوب عنه العضو الأول حسب ترتيب الكلام.","memberLimit":"يمكن أن تضم فرقة العمل {{max}} عضوًا كحد أقصى","explicitPhasesNote":"تحدّد فرقة العمل هذه مراحلها صراحةً ({{phases}})، فتُنفَّذ كما هي — ولم يعد النمط ولا عدد الجولات أعلاه يغيّر المسار.","explicitPhasesEdit":"تحرير المراحل","addMemberTitle":"إضافة عضو إلى الفريق","selectAgent":"الوكيل","pickAgent":"ابحث عن وكيل أو اختره…","displayName":"الاسم المعروض","displayNameHint":"مثال: محلل","role":"الدور","roleHint":"مثال: مُراجِع","addMember":"إضافة عضو","nameRequired":"اسم فريق العمل مطلوب","saveSuccess":"تم حفظ إعدادات فريق العمل","saveError":"تعذّر حفظ الإعدادات","deleteAllSuccess":"تم حذف فريق العمل وجميع الوكلاء","deleteError":"تعذّر حذف فريق العمل","deleteSuccess":"تم حذف فريق العمل","duplicateMember":"هذا الوكيل عضو بالفعل","loadError":"تعذّر تحميل الإعدادات","backToBoard":"العودة إلى فريق العمل","untitled":"فريق عمل بلا عنوان","subtitle":"اضبط إعدادات فريق العمل والقوى العاملة فيه","general":"الإعدادات العامة","generalDesc":"التهيئة الأساسية لفريق العمل","boardName":"اسم فريق العمل","boardNameHint":"أدخل اسم فريق العمل…","description":"الوصف","descriptionHint":"ما موضوع فريق العمل هذا؟","discussionStyle":"إطار التعاون","maxRounds":"الحد الأقصى للجولات","moderator":"المشرف","noModerator":"بدون","team":"القوى العاملة","teamDesc":"أدر الوكلاء المشاركين في فريق العمل","roleOptional":"اختياري","typeAgent":"وكيل","typeModerator":"مشرف","removeMember":"إزالة العضو","minMembers":"مطلوب عضوان على الأقل","protocol":"البروتوكول والمرونة","protocolDesc":"المهل وإعادة المحاولات ومعالجة الأعطال في التواصل بين الوكلاء","agentTimeout":"مهلة الوكيل (بالثواني)","maxRetries":"الحد الأقصى لإعادة المحاولة","onAgentFailure":"عند فشل الوكيل","failureSkip":"تخطٍّ — المتابعة بدون هذا الوكيل","failureRetry":"إعادة المحاولة — محاولة الوكيل مرة أخرى","failureAbort":"إحباط — إيقاف المناقشة بالكامل","onUnavailable":"عند عدم توفر العضو","unavailableSkip":"تخطٍّ — المتابعة بدونه","unavailableFail":"فشل — إيقاف المناقشة","maxTurns":"الحد الأقصى للأدوار (0 = بلا حد)","hitl":"الإشراف البشري","hitlDesc":"حدّد متى وكيف يراجع البشر قرارات الذكاء الاصطناعي","hitlGranularity":"دقة الموافقة","granularityPhase":"لكل مرحلة — المراجعة بعد كل مرحلة من المناقشة","granularityTask":"لكل مهمة — مراجعة كل مهمة على حدة","hitlTimeout":"مهلة الموافقة","hitlTimeoutHint":"مثال: PT15M (15 دقيقة)، PT1H (ساعة واحدة)","hitlTimeoutHelp":"مدة بصيغة ISO-8601. اتركها فارغة لإلغاء المهلة.","hitlTimeoutPolicy":"عند انتهاء المهلة","timeoutWait":"انتظار غير محدود","timeoutAutoApprove":"موافقة تلقائية","timeoutAutoReject":"رفض تلقائي","timeoutAbort":"إحباط المناقشة","hitlRejection":"عند الرفض","rejectionFail":"فشل — إيقاف المهمة","rejectionRetry":"إعادة المحاولة — الطلب من الوكيل المراجعة","dynamic":"وكلاء ديناميكيون","dynamicDesc":"السماح للوكلاء بتوظيف وكلاء آخرين أو إنشائهم أو التفويض إليهم أثناء المناقشات","dynamicEnable":"تفعيل الوكلاء الديناميكيين","dynamicEnableDesc":"السماح للوكلاء بتوظيف وكلاء آخرين أو إنشائهم أو التفويض إليهم","allowCreation":"السماح بالإنشاء","allowCreationDesc":"يمكن للوكلاء إنشاء وكلاء جدد عند الحاجة","allowRecruitment":"السماح بالتوظيف","allowRecruitmentDesc":"يمكن للوكلاء توظيف وكلاء منشورين بالفعل","allowDelegation":"السماح بالتفويض","allowDelegationDesc":"يمكن للوكلاء تفويض المهام الفرعية إلى وكلاء آخرين","maxCreated":"الحد الأقصى للإنشاء","maxRecruited":"الحد الأقصى للتوظيف","maxDelegations":"الحد الأقصى للتفويضات / مهمة","inheritModel":"وراثة نموذج الوكيل الأصل","inheritModelDesc":"يستخدم الوكلاء المُنشأون نموذج اللغة الخاص بالوكيل الأصل","lifecycle":"سياسة دورة الحياة","lifecycleEphemeral":"مؤقت — يُحذف بعد المناقشة","lifecycleKeep":"إبقاء منشور — يبقى بعد المناقشة","lifecycleUndeploy":"إلغاء النشر فقط — يتوقف دون حذف","lifecycleAgentDecides":"الوكيل يقرر — الوكيل يحدد مصيره بنفسه","tasks":"مهام مُعدّة مسبقاً","tasksDesc":"حدّد المهام مسبقاً ليتم تخطي مرحلة PLAN وينفّذ الوكلاء فوراً","taskSubject":"الموضوع","taskSubjectHint":"ما الذي يجب إنجازه؟","taskDescription":"الوصف","taskDescHint":"تعليمات مفصّلة لهذه المهمة…","taskAssignRole":"الإسناد إلى دور","taskPriority":"الأولوية","removeTask":"إزالة المهمة","addTask":"إضافة مهمة","dangerZone":"منطقة الخطر","dangerDesc":"إجراءات لا يمكن التراجع عنها — تابع بحذر","deleteBoard":"حل فريق العمل","deleteBoardDesc":"إزالة إعدادات فريق العمل هذا. سيبقى الوكلاء كما هم.","deleteBoardAll":"حل فريق العمل + جميع الوكلاء","deleteBoardAllDesc":"إزالة فريق العمل هذا وجميع الوكلاء الأعضاء نهائياً.","unsavedChanges":"لديك تغييرات غير محفوظة","templateSaved":"تم الحفظ كقالب","saveAsTemplate":"الحفظ كقالب","saving":"جارٍ الحفظ…","saveChanges":"حفظ التغييرات","deleteAllTitle":"حل فريق العمل وجميع الوكلاء؟","deleteTitle":"حل فريق العمل؟","deleteAllConfirm":"سيؤدي ذلك إلى حل فريق العمل هذا نهائياً وإزالة جميع الوكلاء الأعضاء فيه. لا يمكن التراجع عن هذا الإجراء.","deleteConfirm":"سيؤدي ذلك إلى حل إعدادات فريق العمل هذا نهائياً. لن يتأثر الوكلاء الأعضاء.","title":"الإعدادات"},"nav":{"dashboard":"لوحة التحكم","templates":"القوالب"},"advisor":{"avatarLabel":"صورة {{name}} الرمزية"},"analytics":{"agentPerformance":"أداء الوكيل","avgLength":"متوسط الطول","avgLengthChars":"{{count}} حرفاً","chatWithAgent":"محادثة مع الوكيل","compareAgent":"مقارنة مع…","contributionBreakdown":"تفصيل المساهمات","contributions":"المساهمات","editAgent":"تعديل الوكيل","errorRate":"معدل الأخطاء","errors":"الأخطاء","sessions":"الجلسات"},"back":"رجوع","boardList":"قائمة فرق المهام","boardsLabel":"فرق المهام","bottomNav":"التنقل السفلي","card":{"advisorCount":"{{count}} خبيراً","delete":"حذف","duplicate":"تكرار","duplicated":"تم تكرار فريق المهام","history":"السجل","live":"مباشر","moreActions":"إجراءات إضافية","noMembers":"لا يوجد خبراء","openSettings":"فتح الإعدادات","pin":"تثبيت","settings":"الإعدادات","unpin":"إلغاء التثبيت","untitled":"فريق مهام بدون عنوان"},"closeSidebar":"إغلاق الشريط الجانبي","comparison":{"avgResponse":"متوسط الرد","close":"إغلاق","contributions":"المساهمات","errorRate":"معدل الأخطاء","evenlyMatched":"الوكيلان متكافئان","leadsIn":"يتقدّم في {{count}} من أصل 5 مقاييس","sessions":"الجلسات","title":"مقارنة الوكلاء","totalContent":"إجمالي المحتوى"},"dashboard":{"assembleTaskForce":"تشكيل فريق مهام","cancel":"إلغاء","deleteConfirm":"هل تريد بالتأكيد حلّ فريق المهام هذا؟ لا يمكن التراجع عن هذا الإجراء.","deletedCount":"تم حذف {{count}} من فرق المهام","deleteError":"فشل حذف فريق المهام","deletePartialFail":"{{success}} تم حذفها، {{fail}} فشلت","deleteSelected":"حذف","deleteSuccess":"تم حذف فريق المهام","deleteWorkforce":"حلّ فريق المهام","deselect":"إلغاء التحديد","duplicateError":"فشل تكرار فريق المهام","gridView":"عرض شبكي","listView":"عرض قائمة","loadError":"تعذّر تحميل مساحة العمل. يرجى المحاولة مرة أخرى.","pinned":"مثبّت","retry":"إعادة المحاولة","select":"تحديد","selected":"{{count}} محدَّد","selectItem":"تحديد","subtitle":"مجموعات وكلاء تعاونية تحلّ التحديات المعقّدة.","taskForcesLabel":"فرق المهام النشطة","title":"فرق المهام النشطة","viewToggle":"وضع العرض"},"export":{"clipboard":"نسخ إلى الحافظة","copied":"تم النسخ إلى الحافظة","copyFailed":"فشل النسخ إلى الحافظة","downloadedJson":"تم التنزيل بصيغة JSON","downloadedMd":"تم التنزيل بصيغة Markdown","json":"تصدير بصيغة JSON","markdown":"تصدير بصيغة Markdown","title":"تصدير النقاش"},"history":{"backToBoard":"العودة إلى فريق المهام","backToList":"العودة إلى القائمة","cancel":"إلغاء","close":"إغلاق","confirmDelete":"حذف","conversationList":"قائمة المحادثات","delete":"حذف المحادثة","deleteDescription":"هل تريد بالتأكيد حذف هذه المحادثة؟ لا يمكن التراجع عن هذا الإجراء.","deleteTitle":"حذف المحادثة","emptyTranscript":"لا توجد إدخالات في النص بعد","entryCount":"{{count}} إدخالاً","error":"خطأ","export":"تصدير","finalAnswer":"الإجابة النهائية المركّبة","loadError":"فشل تحميل المحادثة","loadMore":"تحميل المزيد","noContent":"لا يوجد محتوى","noConversations":"لا توجد محادثات بعد","noResults":"لا توجد محادثات تطابق بحثك","notFound":"لم يتم العثور على المحادثة","phase":"المرحلة","searchPlaceholder":"البحث في المحادثات…","selectConversation":"اختر محادثة لعرضها","selectHint":"اختر محادثة من القائمة","skipped":"{{name}} — تم التخطي","synthesis":"التركيب","title":"سجل المحادثات","transcript":"نص المحادثة","tryDifferent":"جرّب مصطلح بحث آخر","untitled":"محادثة بدون عنوان","loadListError":"فشل تحميل المحادثات"},"insights":"الرؤى","memberCount":"{{count}} عضواً","newBoard":"تشكيل فريق مهام","onboarding":{"advisorSlots":"{{count}} من مقاعد المستشارين","agentsReady":"{{count}} جاهز","assembleNow":"شكّل أول فريق مهام لك","customDesc":"حدّد فريقك وقواعدك الخاصة","customFromScratch":"البناء من الصفر","deployAgent":"نشر وكيل","deployFirst":"انشر أول وكيل ذكاء اصطناعي للبدء","deployFirst2":"انشر الأول ←","deployFirstDesc":"الوكلاء هم الخبراء الذين يشغّلون فرق المهام. أنشئ واحداً للبدء.","getStarted":"ابدأ الآن","howItWorks":"كيف يعمل","pickTemplate":"اختر قالباً للبدء","pickTemplateDesc":"كل قالب يضبط أسلوب النقاش والأدوار والقواعد — كل ما عليك هو تعيين الوكلاء.","step1Desc":"أنشئ خبراء ذكاء اصطناعي بمهارات ومعارف وشخصيات فريدة.","step1Title":"نشر الوكلاء","step2Desc":"اختر قالباً، وعيّن الوكلاء للأدوار، واختر أسلوب النقاش.","step2Title":"تشكيل فريق مهام","step3Desc":"اطرح سؤالاً وشاهد وكلاءك يناقشون وينتقدون ويركّبون إجابة.","step3Title":"اسأل وشاهد","subtitle":"اجمع وكلاء ذكاء اصطناعي متخصّصين في فرق تعاونية تناقش وتحلّل وتحلّ التحديات المعقّدة معاً.","welcome":"مرحباً بك في فريق العمل"},"openMenu":"فتح القائمة","shortcuts":{"closePanel":"إغلاق اللوحة / مربع الحوار","fromDashboard":"من لوحة التحكم","newBoard":"تشكيل فريق مهام","showHelp":"عرض اختصارات لوحة المفاتيح","title":"اختصارات لوحة المفاتيح"},"sidebar":{"boards":"التنقل بين اللوحات"},"sidebarDrawer":"التنقل في الشريط الجانبي","skipToContent":"تخطّي إلى المحتوى","tabHome":"الرئيسية","tabInsights":"الرؤى","tabThreads":"المحادثات","templates":{"deleteConfirm":"حذف هذا القالب؟","deleted":"تم حذف القالب"},"templatesEmpty":"احفظ فريق مهام كقالب لإعادة إنشائه بسرعة لاحقاً.","themeDark":"داكن","themeLight":"فاتح","themeSystem":"النظام","toggleSidebar":"تبديل الشريط الجانبي","toggleTheme":"تبديل السمة","untitled":"بدون عنوان","useTemplate":"استخدام","wizard":{"addAdvisor":"إضافة مستشار","advisorCount":"{{count}} مستشاراً","advisorName":"اسم المستشار","agentError":"فشل إنشاء {{name}}: {{error}}","agentRequired":"اختر الوكيل الموجود الذي سيستخدمه هذا المستشار.","alreadyCreated":"تم الإنشاء","alreadyCreatedNote":"تم إنشاؤه بالفعل في محاولة سابقة — سيُعاد استخدامه كما هو، لذا لم يعد بالإمكان تغيير موجّهه أو إعدادات LLM الخاصة به هنا.","apiKey":"مفتاح API","apiKeyRequired":"يحتاج {{provider}} إلى مفتاح API. أضف واحدًا هنا أو في إعدادات LLM الافتراضية أعلاه.","back":"رجوع","boardDescPlaceholder":"صف بإيجاز الغرض من هذا المجلس الاستشاري…","boardDescription":"الوصف (اختياري)","boardName":"اسم فريق العمل","boardNamePlaceholder":"مثال: مجلس استراتيجية المنتج","boardNameRequired":"امنح فريق العمل هذا اسمًا.","cancel":"إلغاء","collapse":"طيّ","createNew":"إنشاء مستشار جديد","createWorkforce":"إنشاء فريق العمل","creatingAgent":"جارٍ الإنشاء…","creationFailed":"فشل الإنشاء","creationFailedDesc":"حدث خطأ ما. يمكنك إعادة المحاولة وسيُستأنف من حيث توقّف.","customTemplate":"مخصّص","customTemplateDesc":"ابدأ من الصفر بإعدادك الخاص","error":"فشل","existing":"موجود","expand":"توسيع","groupError":"فشل تشكيل فريق المهام: {{error}}","llmDefaults":"نموذج LLM للمستشارين الجدد","llmDefaultsDesc":"يُستخدم لكل مستشار يُنشأ هنا ما لم يحدّد المستشار إعداداته الخاصة أدناه.","llmDefaultsKeyRequired":"أضف مفتاحًا هنا ليشمل كل مستشار لا يحدّد مفتاحه الخاص.","model":"النموذج","modelPlaceholder":"مثال: claude-sonnet-5","nameRequired":"امنح هذا المستشار اسمًا.","new":"جديد","next":"التالي","pending":"في الانتظار…","personality":"الشخصية والخبرة","personalityHint":"حقل مطلوب — يُرسل إلى الوكيل كموجّه النظام.","personalityPlaceholder":"صف خبرة هذا المستشار ووجهة نظره وأسلوب تواصله…","promptRequired":"مطلوب موجّه نظام. صف خبرة هذا المستشار وكيف ينبغي أن يجيب.","provider":"مزوّد نماذج اللغة","ready":"جاهز","removeAdvisor":"إزالة المستشار","role":"الدور","selectAgent":"اختيار وكيل","selectProvider":"اختر مزوّداً…","settingUp":"جارٍ إعداد فريق العمل…","settingUpBoard":"جارٍ تشكيل فريق المهام…","settingUpDesc":"جارٍ إنشاء المستشارين وضبط اللوحة. قد يستغرق هذا لحظة.","starterPrompt":"أنت {{name}}، صوت {{role}} في هذا الفريق. تحدّث من هذا المنظور: قدّم مساهمات واضحة ومنطقية وقابلة للتنفيذ، وسمِّ المخاطر والمفاضلات التي تراها، وركّز على ما تعرفه أفضل.","starterPromptBare":"أنت عضو في هذا الفريق. قدّم مساهمات واضحة ومنطقية وقابلة للتنفيذ، وسمِّ المخاطر والمفاضلات التي تراها، وابقَ مركّزًا.","starterPromptNoRole":"أنت {{name}}، عضو في هذا الفريق. قدّم مساهمات واضحة ومنطقية وقابلة للتنفيذ، وسمِّ المخاطر والمفاضلات التي تراها، وابقَ مركّزًا.","starterPromptRoleOnly":"أنت صوت {{role}} في هذا الفريق. تحدّث من هذا المنظور: قدّم مساهمات واضحة ومنطقية وقابلة للتنفيذ، وسمِّ المخاطر والمفاضلات التي تراها، وركّز على ما تعرفه أفضل.","stepIndicatorLabel":"تقدّم المعالج","stepReview":"المراجعة","stepTeam":"الفريق","stepTemplate":"القالب","success":"تم تشكيل فريق المهام بنجاح!","team":"الفريق","templates":"قوالب النقاش","tryAgain":"إعادة المحاولة","unnamed":"بدون اسم","untitled":"لوحة بدون عنوان","useDefault":"الإعداد الافتراضي لفريق العمل ({{value}})","useDefaultKey":"المفتاح الافتراضي لفريق العمل","useExisting":"استخدام وكيل موجود","useStarterPrompt":"إدراج موجّه أولي","yourAdvisors":"مستشاروك"},"workforce":"فريق العمل"}'),ke=JSON.parse('{"title":"مُشغّل المنصة","subtitle":"اسأل عن نشر EDDI هذا — سيبحث عن الإجابات نيابةً عنك.","readOnlyChip":"للقراءة فقط","readWriteChip":"قراءة وكتابة","configError":"تعذّر تحميل إعدادات المُشغّل","empty":{"title":"مُشغّل المنصة معطّل","description":"فعّله للدردشة مع وكيل يمكنه فحص وكلائك وسير العمل والمحادثات وعمليات النشر والسجلات — وتشغيلها نيابة عنك بموافقتك على كل تغيير.","action":"تفعيل مُشغّل المنصة"},"discovery":{"title":"تعرّف على مُشغّل المنصة","description":"مساعد يفحص هذا النشر ويشغّله. متوقف افتراضيًا؛ كل تغيير يتوقف بانتظار موافقتك.","action":"تفعيل"},"activation":{"title":"تفعيل مُشغّل المنصة","subtitle":"اختر النموذج الذي سيشغّل المُشغّل، وراجع تعليماته، ثم انشره.","modelStep":"النموذج","reviewStep":"التعليمات والمراجعة","provider":"المزوّد","model":"النموذج","baseUrl":"عنوان URL الأساسي","apiKey":"مفتاح API الخاص بالنموذج","apiKeyHint":"مفتاح مزوّد النموذج اللغوي لديك. هذا ليس بيانات اعتماد خاصة بـ EDDI.","apiKeyPlaceholder":"الصق مفتاح API أو اختر مفتاحًا من الخزنة","vaultDown":"خزنة الأسرار غير متاحة، لذا لا يمكن تخزين المفاتيح فيها الآن. المفتاح المُدخل هنا يُمرَّر إلى الخادم الخلفي الذي يخزّنه في الخزنة إن أمكنه ذلك.","environment":"البيئة","authMode":"كيفية مصادقة المُشغّل","authModeHint":"يستدعي المُشغّل واجهة إدارة EDDI لديك. هذا يحدّد بيانات الاعتماد التي تحملها تلك الاستدعاءات.","authNoneBlocked":"المصادقة مُفعّلة في هذا النشر، لذا سيتم رفض استدعاءات الأدوات غير المُصادَق عليها. سيُنشر المُشغّل بنجاح ثم يفشل في كل عملية بحث. اختر بدلاً من ذلك «هويتك».","scope":{"label":"الصلاحية","default":"افتراضي","hint":"ما يُسمح للمُشغّل بفعله. كل عملية كتابة تظل بانتظار موافقتك — انظر قواعد الأمان أدناه.","readOnly":{"label":"للقراءة فقط","description":"يمكنه فحص هذا النشر وشرحه. لا يمكنه تغيير أي شيء."},"readWrite":{"label":"قراءة وكتابة","description":"يتيح له أيضًا إنشاء وتعديل الوكلاء ومجموعات الوكلاء والنشر وإلغاء النشر وتعطيل جدول زمني خارج عن السيطرة وتعديل وصف أحد الوكلاء — كل ذلك بانتظار موافقتك أولًا."},"writeWarning":"يتحقق التفعيل من بوابة الموافقة مقابل السياسة المخزنة قبل اكتماله. ثم تُنفَّذ عملية كتابة اختبارية حقيقية وغير ضارة في الخلفية — إذا نُفِّذت يومًا دون التوقف للموافقة، يُزال المشغّل فورًا."},"safetyPreamble":"قواعد الأمان (غير قابلة للتعديل)","safetyPreambleHint":"تُضاف دائمًا في البداية، وتوجّه المُشغّل إلى التعامل مع كل ما تُرجعه أدواته كبيانات غير موثوقة.","promptBody":"تعليمات المُشغّل","promptBodyHint":"عدّل طريقة تعريف المُشغّل بنفسه وأسلوب عمله.","tools":"الأدوات التي ستُمنح له ({{toolCount}})","activate":"تفعيل ونشر","callerIdentityNote":"يُدرج EDDI رمزك عند إجراء الاستدعاء فقط. لا يُخزَّن مطلقًا في المحادثة، ولا يُرسَل إلا إلى هذا النشر.","rebuildWarning":"يؤدي الحفظ إلى إنشاء وكيل مُشغّل جديد وإزالة الحالي. لن تُنقل محادثة المُشغّل الحالية.","environmentHint":"المكان الذي يعمل فيه وكيل المُشغّل نفسه. ولا يزال بإمكانه قراءة أي بيئة."},"authMode":{"none":{"label":"بدون بيانات اعتماد","description":"لا تحمل استدعاءات الأدوات ترويسة Authorization. يعمل فقط عندما تكون المصادقة معطّلة في نشر EDDI هذا."},"caller-identity":{"label":"هويتك","description":"تُنفَّذ استدعاءات الأدوات باسم المستخدم المسجّل دخوله، بصلاحياته وسجل تدقيقه. مطلوب عند تفعيل المصادقة."}},"stage":{"idle":"","validating":"يجري التحقق من أن هذا النشر يوفّر نقاط النهاية التي يحتاجها المُشغّل…","provisioning":"يجري إنشاء وكيل المُشغّل…","resolving-version":"يجري تحديد إصدار الوكيل…","saving":"يجري حفظ الإعدادات…","verifying-gate":"جارٍ التحقق من بوابة الموافقة…","done":"تم","longWait1":"يجري إنشاء وكيل المشغّل ونشره — هذه أطول خطوة…","longWait2":"يجري إعداد الأدوات وبوابة الموافقة على الوكيل الجديد…","longWait3":"العمل مستمر — قد يستغرق النشر بعض الوقت على منصة مشغولة…"},"status":{"title":"المُشغّل","provider":"المزوّد","environment":"البيئة","authMode":"يُصادَق باسم","version":"الإصدار","checking":"يجري التحقق…","ready":"منشور","inProgress":"يجري النشر…","error":"خطأ في النشر","notFound":"غير منشور","errorHelp":"فشل نشر وكيل المُشغّل. أعد ضبطه للمحاولة مجددًا، أو راجع سجلات المنصة لمعرفة الخطأ الأساسي.","reconfigure":"إعادة الضبط","deactivate":"إلغاء التفعيل","reset":"حذف المُشغّل","deactivateConfirmTitle":"إلغاء تفعيل مُشغّل المنصة؟","deactivateConfirmBody":"سيُزال المُشغّل من النشر ويتوقف عن الاستجابة. تُحفظ إعداداته حتى تتمكن من تفعيله لاحقًا.","resetConfirmTitle":"حذف مُشغّل المنصة؟","resetConfirmBody":"سيُحذف وكيل المُشغّل وجميع الموارد التي أُنشئت له نهائيًا، إضافةً إلى إعداداته المحفوظة. لا يمكن التراجع عن هذا الإجراء.","connectionCheck":"فحص الاتصال","gateChecking":"جارٍ التحقق من البوابة…","gateUnknown":"لم يتم فحص البوابة","gateVerified":"تم التحقق من البوابة","gateNotVerified":"لم يتم التحقق من البوابة","gateUnverifiedHelp":"تعذّر التحقق من بوابة الموافقة في مستند هذا الوكيل."},"chat":{"empty":"اسأل عن نشرك. يبحث المُشغّل عن الإجابات ويعرض لك كل استدعاء يقوم به.","restoring":"جارٍ فتح تلك المحادثة…","placeholder":"اسأل عن الوكلاء والمحادثات وعمليات النشر والسجلات…","pausedPlaceholder":"بانتظار قرار أعلاه قبل أن يتمكن المشغّل من المتابعة…","readOnlyPlaceholder":"انتهت هذه المحادثة — ابدأ محادثة جديدة للمتابعة.","send":"إرسال","stop":"إيقاف","newConversation":"بدء محادثة جديدة","transcript":"محادثة المُشغّل","pauseCompactFallback":"يحتاج المشغّل إلى موافقتك قبل المتابعة.","pauseCompactReview":"مراجعة للموافقة →","resolving":"جارٍ تنفيذ الخطوة المعتمدة — قد يستغرق ذلك لحظة…"},"drawer":{"title":"مُشغّل المنصة","notActivated":"فعّله للدردشة مع نشرك من أي مكان.","titleAwaiting":"مُشغّل المنصة — قرار بانتظارك","activate":"إعداد مُشغّل المنصة"},"approval":{"reconstructedEndpoint":"{{method}} {{path}} (معاد إنشاؤه)","verified":"موثّق","verifiedTitle":"تم استخلاصه من إعدادات استدعاء واجهة برمجة التطبيقات الفعلية؛ يُعاد التحقق منه مباشرة قبل التنفيذ — إذا تغيّر الطلب قبل ذلك، يُرفض التنفيذ.","previewOnly":"معاينة","previewOnlyTitle":"ينفّذ هذا الاستدعاء خطوات إعداد إضافية قبل التنفيذ، لذا فهذه معاينة اجتهادية — قد يختلف الطلب الفعلي ولا يُعاد التحقق منه قبل التنفيذ.","query":"معطيات الاستعلام","headers":"الترويسات","bodyTruncated":"يُعرض المحتوى مقتطعًا للعرض فقط — لا تزال الموافقة تشمل الطلب كاملًا.","diffHeading":"التغييرات مقارنةً بالإصدار المخزَّن {{version}}","diffLoading":"جارٍ تحميل الإصدار المخزَّن للمقارنة…","diffFailed":"تعذّر تحميل الإصدار المخزَّن للمقارنة — المستند المقترح كاملًا موجود أدناه.","diffForbidden":"تتطلب المقارنة مع الإصدار المخزَّن صلاحية محرّر — المستند المقترح كاملًا موجود أدناه.","diffRedactionNote":"قيم بيانات الاعتماد مخفيّة في الإصدار المقترح، لذا تظهر هنا كتغييرات حتى لو لم تتغير.","diffStored":"المخزَّن الإصدار {{version}}","diffProposed":"المقترح","showFullRequest":"عرض المستند المقترح كاملًا","hideFullRequest":"إخفاء المستند المقترح كاملًا","expandBody":"توسيع","escalation":{"heading":"يمنح هذا الطلب صلاحيات إضافية","dynamicAgentCreation":"قد تنشئ هذه المجموعة وكلاء جددًا أثناء تشغيلها، وهؤلاء الوكلاء أنفسهم لا يخضعون لبوابة موافقة.","dynamicAgentRecruitment":"قد تضم هذه المجموعة وكلاء آخرين موجودين إلى نقاشاتها.","autoApproveOnTimeout":"تُمنح الموافقات على هذا المورد تلقائيًا عند انتهاء المهلة، دون إشراف أحد.","agentCreatedWithoutGate":"يتم إنشاء هذا الوكيل بدون بوابة موافقة. ستُنفَّذ كل عملية كتابة يقوم بها لاحقًا دون إشراف.","agentCreatedWithBroadEndpoints":"يتم إنشاء هذا الوكيل بصلاحية كتابة على واجهة برمجة التطبيقات الخاصة به — وليس مقتصرًا على القراءة.","agentCreatedWithExternalTools":"يتم إنشاء هذا الوكيل بجميع الأدوات التي يوفّرها خادم MCP خارجي. وهذا الخادم هو من يحدّد ماهية هذه الأدوات، ويمكنه تغييرها لاحقًا.","unchecked":"كان المحتوى أطول من أن يُفحص بحثًا عن منح صلاحيات إضافية — اقرأه كاملًا قبل الموافقة.","inlineCredential":"يتضمّن هذا الطلب ما يشبه بيانات اعتماد مكتوبة حرفيًا بدلًا من مرجع ${vault:…}. السر المكتوب مباشرة يُخزَّن كنص صريح ولا يمكن تدويره من الخزنة — ارفض واطلب مرجع الخزنة."},"blockedSelfTarget":"لا يجوز للوكيل تعديل تعريفه الخاص، وهذا الطلب يستهدف وكيل المشغّل نفسه ({{agentId}}). ولا يمكن الموافقة على الدفعة بأكملها ما دام موجودًا — ارفضه وأجرِ هذا التغيير من صفحة ذلك الوكيل.","blockedSelfConversation":"لا يجوز للوكيل إرسال رسالة إلى المحادثة التي يعمل داخلها، وهذا الطلب يستهدف هذه المحادثة ({{agentId}}). سيؤدي ذلك إلى كتابة نصه الخاص كما لو أن إنسانًا قاله. ولا يمكن اعتماد الدفعة بأكملها ما دام موجودًا — يُرجى رفضه.","blockedGateCarrying":"يكتب هذا الطلب إعداد LLM يحدّد بوابة الموافقة الخاصة به (toolApprovals)، وهو ما سيحل محل البوابة التي تراجعه. تتعذّر الموافقة على الدفعة بأكملها ما دام موجودًا — ارفضه وغيّر البوابة من صفحة الوكيل نفسه.","blockedGateUnverifiable":"يكتب هذا الطلب إعداد LLM يتعذّر قراءة محتواه بالكامل — إما لأنه أكبر من أن يُعرض أو لأنه ليس JSON صالحًا — لذا لا يمكن التأكد من خلوّه من تجاوز بوابة الموافقة. تتعذّر الموافقة على الدفعة بأكملها ما دام موجودًا — ارفضه وأجرِ هذا التغيير من صفحة الوكيل نفسه.","blockedGateUnpinned":"يكتب هذا الطلب إعداد LLM لكنه غير مثبَّت، لذا قد يختلف ما يُنفَّذ فعليًا عمّا هو معروض هنا ولا يمكن التأكد من خلوّه من تجاوز بوابة الموافقة. تتعذّر الموافقة على الدفعة بأكملها ما دام موجودًا — ارفضه وأجرِ هذا التغيير من صفحة الوكيل نفسه.","blockedSelfStart":"لا يمكن للمشغّل اختبار نفسه — بدء محادثة مع وكيله الخاص ({{agentId}}) سيعيد مخرجاته كمدخلات. الموافقة غير متاحة للدفعة بأكملها أثناء وجود هذا الطلب — ارفض واختبر وكيلاً آخر."},"starters":{"whatsDeployed":"ما المنشور حاليًا؟","recentConversations":"اعرض لي أحدث المحادثات","healthCheck":"هل هناك خلل في هذه المنصة؟","diagnoseAgent":"لماذا يفشل نشر أحد وكلائي؟"},"toast":{"activated":"تم تفعيل مُشغّل المنصة","deactivated":"تم إلغاء تفعيل مُشغّل المنصة","reset":"تم حذف مُشغّل المنصة","activatedButUnreachable":"تم نشر المُشغّل، لكنه لم يتمكن من قراءة منصتك","activatedGateVerified":"تم تفعيل مشغّل المنصة — تم التحقق من بوابة الموافقة. تعمل فحوصات الاتصال في الخلفية.","activatedChecking":"تم تفعيل مشغّل المنصة. تعمل فحوصات الاتصال في الخلفية.","writeProbeVerified":"تم التحقق من صلاحية الكتابة — توقفت عملية كتابة حقيقية محمية للموافقة.","writeProbeFailed":"لم تصمد بوابة الموافقة — تمت إزالة المشغّل.","writeProbeInconclusive":"كان اختبار الكتابة المباشر غير حاسم."},"canary":{"genericFailure":"لم ينجح فحص الاتصال.","passed":"المُشغّل يصل إلى منصتك.","recheck":"إعادة الفحص","title":"تم نشر المُشغّل، لكنه لم يتمكن من قراءة منصتك."},"paused":{"title":"مُشغّل المنصة متوقف مؤقتًا","description":"لا يزال مُعدًّا — عند إعادة تشغيله يُنشر الوكيل نفسه من جديد. لم يُحذف أي شيء.","action":"إعادة التشغيل"},"managedAgentBadge":"المُشغّل","managedAgentHint":"يُنشأ ويُدار من شاشة مُشغّل المنصة. تعديله أو حذفه من هنا سيُعطّل تلك الشاشة.","decisionLog":{"approved":"لقد وافقت على هذا الطلب","rejected":"لقد رفضت هذا الطلب","rePaused":"تم الإيقاف مؤقتًا مرة أخرى — يلزم قرار آخر","noReply":"انتهت الجولة دون رد","executed":"تم تنفيذ {{calls}}","partial_one":"تمت الموافقة — تم رفض استدعاء واحد","partial_other":"تمت الموافقة — تم رفض {{count}} استدعاءات","partial_zero":"تمت الموافقة — تم رفض {{count}} استدعاءات","partial_two":"تمت الموافقة — تم رفض {{count}} استدعاءات","partial_few":"تمت الموافقة — تم رفض {{count}} استدعاءات","partial_many":"تمت الموافقة — تم رفض {{count}} استدعاءات"},"tabs":{"label":"عروض المشغّل","chat":"محادثة","history":"السجل"},"history":{"emptyTitle":"لا توجد محادثات سابقة","emptyDescription":"تظهر محادثاتك مع المشغّل هنا لتتمكن من متابعتها لاحقًا.","noOpeningMessage":"(لا توجد رسالة بعد)","stepCount_one":"خطوة واحدة","stepCount_other":"{{count}} خطوة","stepCount_zero":"{{count}} خطوة","stepCount_two":"خطوتان","stepCount_few":"{{count}} خطوات","stepCount_many":"{{count}} خطوة"}}'),be={addCadence:"إضافة وتيرة",addTask:"إضافة مهمة",backToGroup:"العودة إلى المجموعة",backlogEmpty:"لا توجد مهام معلّقة بعد.",backlogTitle:"المهام المعلّقة ({{count}})",cadenceAdded:"تمت إضافة الوتيرة",cadenceDeleted:"تم حذف الوتيرة",cadenceRunning:"هناك نقاش ناتج عن الوتيرة قيد التنفيذ حاليًا.",cadencesEmpty:"لم يتم تكوين أي وتيرة متكررة بعد.",cadencesTitle:"الوتيرات ({{count}})",confirmDeleteCadenceDesc:"هذا يوقف عمليات التشغيل المجدولة الخاصة بها. لا يؤثر ذلك على النقاشات التي تمت بالفعل.",confirmDeleteCadenceTitle:"هل تريد حذف هذه الوتيرة؟",createdBy:"بواسطة {{who}}",cronLabel:"تعبير Cron",cronPlaceholder:"مثل 0 9 * * MON",discussions:"النقاشات",failed:"فشل",inputTemplatePlaceholder:"قالب المطالبة لكل تشغيل (اختياري — وإلا فسيتم استخدام قائمة بسيطة للمهام المعلّقة)",lastRun:"آخر تشغيل",maxCostLabel:"أقصى تكلفة / تشغيل ($، اختياري)",maxCostPlaceholder:"الإعداد الافتراضي للمجموعة",maxPerRunLabel:"أقصى عدد مهام / تشغيل",member:"العضو",navLabel:"مساحة العمل",never:"أبدًا",perMemberStats:"الموثوقية لكل عضو",priority:"الأولوية",subtitle:"قائمة مهام دائمة ووتيرات متكررة تشغّلها هذه المجموعة دون إشراف، وفق جدول زمني.",taskAdded:"تمت إضافة المهمة إلى قائمة المهام المعلّقة",taskDescriptionPlaceholder:"الوصف (اختياري)",taskSubjectPlaceholder:"موضوع المهمة",tasksVerified:"المهام التي تم التحقق منها",timeZoneLabel:"المنطقة الزمنية",title:"مساحة عمل الفريق الدائم",totalCost:"التكلفة الإجمالية",verified:"تم التحقق",maxCostInvalid:"يجب أن تكون التكلفة القصوى لكل تشغيل رقمًا يساوي 0 أو أكبر.",cadenceSummary_few:"حتى {{max}} مهام/تشغيل",cadenceSummary_many:"حتى {{max}} مهام/تشغيل",cadenceSummary_one:"حتى {{max}} مهمة/تشغيل",cadenceSummary_two:"حتى {{max}} مهام/تشغيل",cadenceSummary_zero:"حتى {{max}} مهام/تشغيل",cadenceSummary_other:"حتى {{max}} مهام/تشغيل",inputTemplateTooLong:"قالب المطالبة محدود بـ {{max}} حرفاً."},we={title:"فريق جديد"},Ee={title:"تحديثات EDDI",description:"تحقّق مما إذا كان هناك إصدار أحدث من EDDI. لا يُرسَل أي شيء حتى تطلب ذلك.",installed:"المثبَّت",githubRelease:"إصدار GitHub",dockerImage:"صورة Docker",unknownVersion:"غير معروف",checkNow:"تحقّق الآن",checking:"جارٍ التحقّق…",autoCheck:"التحقّق تلقائيًا عند كل تحميل للصفحة",autoCheckHint:"يُجري عملية تحقّق واحدة عند كل إعادة تحميل للمتصفح، ويعرض شريطًا عند توفّر إصدار أحدث.",privacyNote:"يتصل التحقّق بـ api.github.com فقط مباشرةً من متصفحك. لا تُرسَل أي بيانات عن النشر.",neverChecked:"لم يتم إجراء أي تحقّق بعد.",upToDate:"أنت تستخدم أحدث إصدار ({{version}}).",updateAvailable:"الإصدار EDDI {{version}} متاح",updateAvailableDetail:"أنت تستخدم {{installed}}.",ahead:"أنت تستخدم {{installed}}، وهو أحدث من آخر إصدار منشور ({{version}}).",unknownInstalled:"أحدث إصدار هو {{version}}. تعذّر تحديد الإصدار المثبَّت، لذا لا يوجد ما تتم مقارنته.",errorRateLimited:"تم بلوغ حدّ الطلبات غير المُوثَّقة في GitHub. حاول لاحقًا أو افتح صفحة الإصدارات.",errorBlockedByCsp:"تمنع سياسة أمان المحتوى (CSP) الخاصة بهذا التثبيت المتصفح من الوصول إلى api.github.com، لذا لا يمكن إجراء الفحص. أضف api.github.com إلى توجيه connect-src للسماح بذلك، أو استخدم رابط الإصدارات أدناه.",errorUnreachable:"تعذّر الوصول إلى api.github.com. تحقّق من الشبكة أو من الوكيل الصادر.",errorFailed:"فشل التحقّق من التحديثات. افتح صفحة الإصدارات للتحقّق يدويًا.",publishedOn:"نُشر في {{date}}",whatsNew:"الجديد في {{version}}",fullNotes:"ملاحظات الإصدار الكاملة على GitHub",noNotes:"لا توجد ملاحظات لهذا الإصدار.",releaseNotes:"ملاحظات الإصدار",allReleases:"كل الإصدارات",howToUpdate:"كيفية التحديث",howToUpdateCli:"باستخدام أداة eddi (التي ينشئها المثبِّت):",howToUpdateManual:"بدون الأداة، من دليل التثبيت (~/.eddi افتراضيًا):",howToUpdateNote:"عدِّل خيارات -f بما يناسب إعدادك — أضف -f docker-compose.auth.yml إذا كنت تستخدم Keycloak."},Me={acrossGroups:"عبر {{count}} من فرق المهام",actions:"الإجراءات",activeExperts:"الخبراء النشطون",activity:"النشاط",agentLeaderboard:"لوحة صدارة الوكلاء",agentName:"الوكيل",allOutcomes:"جميع النتائج",allStyles:"جميع الأساليب",avgDuration:"متوسط المدة",cancelCompare:"إلغاء",clearAll:"مسح الكل",clearFilters:"مسح عوامل التصفية",completionRate:"معدل الإنجاز",contributions:"المساهمات",covered:"مغطّى",createFirst:"تشكيل فريق مهام",daysAgo:"قبل {{count}} يوم",emptyDescription:"ابدأ نقاش فريق مهام لعرض التحليلات هنا.",emptyHaveGroups:"لديك {{count}} من فرق المهام لكن لا توجد نقاشات بعد. ابدأ نقاشاً لعرض الرؤى.",emptyTitle:"لا توجد رؤى بعد",errorDescription:"تعذّر جلب بعض البيانات. يرجى المحاولة مرة أخرى.",errors:"الأخطاء",errorTitle:"تعذّر تحميل الرؤى",filteredOf:"{{filtered}} من أصل {{total}}",highConfidence:"ثقة عالية",hoursAgo:"قبل {{count}} ساعة",justNow:"الآن",last30Days:"آخر 30 يوماً",minutesAgo:"قبل {{count}} دقيقة",noAgents:"لا يوجد نشاط للوكلاء بعد.",noDiscussions:"لا توجد نقاشات بعد.",noMatchingDiscussions:"لا توجد نقاشات تطابق عوامل التصفية النشطة.",noPhases:"لا تتوفر بيانات مراحل.",noResults:"لا توجد نقاشات مطابقة",noResultsHint:"عدّل عوامل التصفية أو امسحها لعرض جميع البيانات.",noSkills:"لا توجد قدرات مسجّلة. حدّد مهارات لوكلائك لتتبّع التغطية.",noStyles:"لا تتوفر بيانات أساليب.",outcomeChart:"توزيع النتائج: {{total}} إجمالاً",outcomes:"النتائج",participatedRecently:"شاركوا في نقاشات",perDiscussion:"لكل نقاش",phaseChart:"توزيع المراحل",phaseDistribution:"توزيع المراحل",pickSecondAgent:"انقر على وكيل لمقارنته بـ {{name}}",recentDiscussions:"النقاشات الأخيرة",removeFilter:"إزالة عامل التصفية: {{label}}",retry:"إعادة المحاولة",sessions:"الجلسات",sessionsCompleted:"جلسة اكتملت بنجاح",showingResults:"{{count}} من أصل {{total}}",skillCoverage:"تغطية المهارات",styleBreakdown:"أساليب النقاش",subtitle:"آخر 30 يوماً",title:"الرؤى",total:"الإجمالي",totalDiscussions:"النقاشات",totalSkills:"المهارات",uncoveredSkills:"{{count}} مهارة غير مغطّاة"},Re={activeRate:"معدل النشاط",activeRateDesc:"الوكلاء النشطون خلال آخر 30 يوماً",dormantAgents:"خاملون",dormantAgentsDesc:"وكلاء لم يُستخدموا منذ أكثر من 30 يوماً",msgAtRisk:"معظم فريق عملك خامل — فكّر في إشراكهم",msgHealthy:"{{rate}}٪ من فريق عملك الرقمي كان نشطاً خلال آخر 30 يوماً",msgModerate:"لم تتم استشارة بعض الخبراء الرقميين مؤخراً",statusAtRisk:"في خطر",statusHealthy:"سليم",statusModerate:"متوسط",taskForces:"فرق المهام",taskForcesDesc:"مجموعات وكلاء تعاونية",title:"صحة المعرفة",workforceSize:"حجم فريق العمل",workforceSizeDesc:"إجمالي الخبراء الرقميين المنشورين"},Le={hint:"سنتذكّر اختيارك وننقلك إليه تلقائياً في المرة القادمة.",manager:{description:"أنشئ وكلاء الذكاء الاصطناعي وهيّئهم وانشرهم. أدر سير العمل والموارد والتكاملات.",feature1:"إنشاء الوكلاء ونشرهم",feature2:"تهيئة سير العمل والمسارات",feature3:"إدارة الموارد والإضافات",title:"Manager"},subtitle:"اختر مساحة العمل للبدء.",title:"مرحباً بك في EDDI",workforce:{description:"اجمع فرق ذكاء اصطناعي تناقش وتحلّل وتحلّ التحديات المعقّدة معاً.",feature1:"تشكيل فرق مهام من الوكلاء",feature2:"إجراء نقاشات تعاونية",feature3:"الحصول على إجابات مركّبة",title:"فريق العمل"}},Ie={assembleTaskForce:"تشكيل فريق مهام",assembleTaskForceDesc:"اجمع الخبراء لحلّ التحديات المعقّدة",chatWithAgent:"محادثة مع وكيل",chatWithAgentDesc:"أجرِ محادثة فردية مع أي خبير رقمي",manageWorkforce:"إدارة فريق العمل",manageWorkforceDesc:"تهيئة الخبراء الرقميين ونشرهم",title:"إجراءات سريعة",viewInsights:"عرض الرؤى",viewInsightsDesc:"تتبّع تغطية المعرفة لدى فريق عملك"},_e={addAgent:"نشر وكيل",count:"{{count}} خبيراً",ready:"جاهز",title:"فريق عملك الرقمي",unnamed:"وكيل بدون اسم"},Ne={production:"الإنتاج",test:"الاختبار"},He={attachments:e,app:t,auth:o,nav:n,theme:a,language:r,pages:s,common:i,agents:l,agentDetail:c,wizard:d,setupWizard:u,packages:p,packageDetail:m,packageEditor:g,conversations:h,conversationDetail:y,chat:v,resources:T,editor:D,rulesEditor:A,apiCallsEditor:f,mcpcallsEditor:P,llmEditor:S,outputEditor:C,propertySetterEditor:k,dictionaryEditor:b,parserEditor:w,dictionaryPicker:E,coordinator:M,contentEditor:R,logs:L,secrets:I,audit:_,schedules:N,cascadeTrace:H,debugDrawer:O,costDashboard:x,memoryInspector:U,logViewer:F,promptViewer:W,promptPreview:V,studio:B,ragEditor:K,onboarding:G,platform:z,stream:q,createOrWizard:j,groups:J,taskBoard:Y,memories:$,properties:Q,triggers:Z,capabilities:X,exportDialog:ee,importDialog:te,syncPage:oe,sync:ne,userConversations:ae,commandPalette:re,groupWizard:se,groupTemplates:ie,channels:le,channelDetail:ce,hitl:de,chatDrawer:ue,dashboard:pe,errorBoundary:me,gdpr:ge,mockBanner:he,orphans:ye,quotas:ve,secretPicker:Te,snippetEditor:De,status:Ae,userData:fe,variables:Pe,workflowEditor:Se,Workforce:Ce,operator:ke,groupWorkspace:be,workforceWizard:we,updates:Ee,analyticsPage:Me,knowledgeHealth:Re,landing:Le,quickActions:Ie,workforce:_e,environments:Ne};export{Ce as Workforce,c as agentDetail,l as agents,Me as analyticsPage,f as apiCallsEditor,t as app,e as attachments,_ as audit,o as auth,X as capabilities,H as cascadeTrace,ce as channelDetail,le as channels,v as chat,ue as chatDrawer,re as commandPalette,i as common,R as contentEditor,y as conversationDetail,h as conversations,M as coordinator,x as costDashboard,j as createOrWizard,pe as dashboard,O as debugDrawer,He as default,b as dictionaryEditor,E as dictionaryPicker,D as editor,Ne as environments,me as errorBoundary,ee as exportDialog,ge as gdpr,ie as groupTemplates,se as groupWizard,be as groupWorkspace,J as groups,de as hitl,te as importDialog,Re as knowledgeHealth,Le as landing,r as language,S as llmEditor,F as logViewer,L as logs,P as mcpcallsEditor,$ as memories,U as memoryInspector,he as mockBanner,n as nav,G as onboarding,ke as operator,ye as orphans,C as outputEditor,m as packageDetail,g as packageEditor,p as packages,s as pages,w as parserEditor,z as platform,V as promptPreview,W as promptViewer,Q as properties,k as propertySetterEditor,Ie as quickActions,ve as quotas,K as ragEditor,T as resources,A as rulesEditor,N as schedules,Te as secretPicker,I as secrets,u as setupWizard,De as snippetEditor,Ae as status,q as stream,B as studio,ne as sync,oe as syncPage,Y as taskBoard,a as theme,Z as triggers,Ee as updates,ae as userConversations,fe as userData,Pe as variables,d as wizard,Se as workflowEditor,_e as workforce,we as workforceWizard}; diff --git a/src/main/resources/META-INF/resources/assets/arrow-right-left-Or_4oRf0.js b/src/main/resources/META-INF/resources/assets/arrow-right-left-J0fZSu2z.js similarity index 89% rename from src/main/resources/META-INF/resources/assets/arrow-right-left-Or_4oRf0.js rename to src/main/resources/META-INF/resources/assets/arrow-right-left-J0fZSu2z.js index 48ef00341b..8e50d2b059 100644 --- a/src/main/resources/META-INF/resources/assets/arrow-right-left-Or_4oRf0.js +++ b/src/main/resources/META-INF/resources/assets/arrow-right-left-J0fZSu2z.js @@ -1,4 +1,4 @@ -import{x as t}from"./index-BY6d8wze.js";/** +import{x as t}from"./index-BnLj1hck.js";/** * @license lucide-react v0.577.0 - ISC * * This source code is licensed under the ISC license. diff --git a/src/main/resources/META-INF/resources/assets/arrow-up-down-Cz_fDxBo.js b/src/main/resources/META-INF/resources/assets/arrow-up-down-CQw9INyB.js similarity index 89% rename from src/main/resources/META-INF/resources/assets/arrow-up-down-Cz_fDxBo.js rename to src/main/resources/META-INF/resources/assets/arrow-up-down-CQw9INyB.js index 6ac58c61ed..c689fd6779 100644 --- a/src/main/resources/META-INF/resources/assets/arrow-up-down-Cz_fDxBo.js +++ b/src/main/resources/META-INF/resources/assets/arrow-up-down-CQw9INyB.js @@ -1,4 +1,4 @@ -import{x as o}from"./index-BY6d8wze.js";/** +import{x as o}from"./index-BnLj1hck.js";/** * @license lucide-react v0.577.0 - ISC * * This source code is licensed under the ISC license. diff --git a/src/main/resources/META-INF/resources/assets/audit-DfusmaeU.js b/src/main/resources/META-INF/resources/assets/audit-BAdwDXFj.js similarity index 88% rename from src/main/resources/META-INF/resources/assets/audit-DfusmaeU.js rename to src/main/resources/META-INF/resources/assets/audit-BAdwDXFj.js index a94770b204..3ac9d81c6b 100644 --- a/src/main/resources/META-INF/resources/assets/audit-DfusmaeU.js +++ b/src/main/resources/META-INF/resources/assets/audit-BAdwDXFj.js @@ -1,7 +1,7 @@ -import{x as ue,u as X,bX as me,bY as xe,c as ge,f as pe,r as n,bR as fe,j as e,n as R,B as Z,M as K,a7 as _,ad as he,a1 as be,aG as je,V as O,D as Ne,bA as ve,bK as ye,al as we,az as ke,bi as Se,ah as Ce,a8 as Ae}from"./index-BY6d8wze.js";import{E as De}from"./error-state-BXe3bnJT.js";import{R as Me}from"./refetch-error-notice-Dhb_O4GR.js";import{D as Te}from"./download-DZjrnAjT.js";import{D as I}from"./dollar-sign-Dt9VyGPU.js";import{F as L}from"./fingerprint-pattern-Dbd3CWkE.js";import{S as Ee}from"./shield-Ce05kery.js";import{C as $e}from"./cpu-BsIZspVa.js";import{E as Re}from"./eye-Dbrf-yrM.js";import{F as Fe}from"./file-output-BA4KZHPi.js";import{H as Be}from"./hash-D4WlnmN6.js";/** +import{x as ue,u as W,bY as me,bZ as xe,c as ge,f as pe,r as n,bS as fe,j as e,n as F,B as Z,M as _,a7 as K,ad as he,a1 as be,aG as je,V as O,D as Ne,bA as ve,bL as ye,al as we,az as ke,bi as Se,ah as Ce,a8 as Ae}from"./index-BnLj1hck.js";import{E as De}from"./error-state-D4qtZYFq.js";import{R as Me}from"./refetch-error-notice-G50zNkPl.js";import{D as Te}from"./download-CVl_y-4e.js";import{D as I}from"./dollar-sign-HonLwnZc.js";import{F as B}from"./fingerprint-pattern-Clkha78G.js";import{S as Ee}from"./shield-Dy-B1VeF.js";import{C as $e}from"./cpu-zEsE2ia0.js";import{E as Fe}from"./eye-xZR8Jj8Y.js";import{F as Re}from"./file-output-DlS0SPnt.js";import{H as Le}from"./hash-MmAVnsbH.js";/** * @license lucide-react v0.577.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Le=[["path",{d:"m7 15 5 5 5-5",key:"1hf1tw"}],["path",{d:"m7 9 5-5 5 5",key:"sgt6xg"}]],Oe=ue("chevrons-up-down",Le),W={trail:(t,r,a)=>["audit","trail",t,r,a],trailByAgent:(t,r,a,o)=>["audit","trail-by-agent",t,r,a,o],count:t=>["audit","count",t]};function Ie(t,r=0,a=100){return X({queryKey:W.trail(t,r,a),queryFn:()=>me(t,r,a),enabled:!!t})}function He(t,r,a=0,o=100){return X({queryKey:W.trailByAgent(t,r,a,o),queryFn:()=>xe(t,r,a,o),enabled:!!t})}const Pe={langchain:{bg:"bg-purple-500/15",text:"text-purple-400",icon:Ce},behavior:{bg:"bg-blue-500/15",text:"text-blue-400",icon:Se},output:{bg:"bg-emerald-500/15",text:"text-emerald-400",icon:Fe},expressions:{bg:"bg-amber-500/15",text:"text-amber-400",icon:Re},httpcalls:{bg:"bg-orange-500/15",text:"text-orange-400",icon:$e},propertysetter:{bg:"bg-teal-500/15",text:"text-teal-400",icon:ke},hitl:{bg:"bg-amber-500/15",text:"text-amber-500",icon:we}},Ve={bg:"bg-gray-500/15",text:"text-gray-400",icon:Be},F=100;function Ge(t){return Pe[t]??Ve}function H(t){return t<1e3?`${t}ms`:`${(t/1e3).toFixed(1)}s`}function P(t){return t===0?"":ye(t)}function ee(t){const r=new Map;for(const a of t){const o=a.stepIndex;r.has(o)||r.set(o,[]),r.get(o).push(a)}return r}function Ue(t){const r=new Map;for(const a of t){const o=a.conversationId;r.has(o)||r.set(o,[]),r.get(o).push(a)}return r}function Ke(t){try{return new Intl.DateTimeFormat(void 0,{hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(new Date(t))}catch{return t}}function _e(t){try{return new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}).format(new Date(t))}catch{return t}}function B({data:t,label:r}){const[a,o]=n.useState(!1);return!t||(Array.isArray(t)?t.length===0:Object.keys(t).length===0)?null:e.jsxs("div",{className:"mt-2",children:[e.jsxs("button",{type:"button",onClick:()=>o(!a),className:"flex items-center gap-1.5 text-xs font-medium text-foreground/60 hover:text-foreground/80 transition-colors","data-testid":`expand-${r}`,children:[a?e.jsx(_,{className:"h-3.5 w-3.5"}):e.jsx(Ae,{className:"h-3.5 w-3.5"}),r]}),a&&e.jsx("pre",{className:"mt-1.5 max-h-64 overflow-auto rounded-lg bg-card/50 p-3 text-xs text-foreground/80 border border-border/50",children:JSON.stringify(t,null,2)})]})}function qe({output:t,t:r}){if(!t)return null;const a=typeof t.verdict=="string"?t.verdict:void 0,o=typeof t.decidedBy=="string"?t.decidedBy:void 0,u=t.automated===!0,x=typeof t.note=="string"?t.note:void 0;if(!a&&!o&&!x)return null;const p=a==="APPROVED",b=a==="REJECTED";return e.jsxs("div",{className:"mt-2 flex flex-wrap items-center gap-1.5","data-testid":"hitl-decision-summary",children:[a&&e.jsx("span",{className:`inline-flex items-center rounded-full px-2 py-0.5 text-[11px] font-semibold ${p?"bg-emerald-500/15 text-emerald-500":b?"bg-destructive/15 text-destructive":"bg-foreground/10 text-foreground/70"}`,"data-testid":"hitl-verdict",children:a}),o&&e.jsxs("span",{className:"inline-flex items-center rounded-full bg-foreground/5 px-2 py-0.5 text-[11px] text-foreground/70","data-testid":"hitl-decided-by",children:[r("audit.decidedBy","by")," ",o]}),u&&e.jsx("span",{className:"inline-flex items-center rounded-full bg-sky-500/10 px-2 py-0.5 text-[11px] font-medium text-sky-500","data-testid":"hitl-automated",children:r("audit.automated","automated")}),x&&e.jsxs("span",{className:"text-[11px] italic text-foreground/60",children:["“",x,"”"]})]})}function Ye({entry:t,t:r}){const a=Ge(t.taskType),o=a.icon,u=P(t.cost);return e.jsxs("div",{className:"rounded-xl border border-border/50 bg-card p-4 transition-all hover:border-border hover:shadow-sm","data-testid":`audit-entry-${t.id}`,children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs("span",{className:`inline-flex items-center gap-1.5 rounded-full px-2.5 py-1 text-xs font-semibold ${a.bg} ${a.text}`,"data-testid":"task-type-badge",children:[e.jsx(o,{className:"h-3.5 w-3.5"}),t.taskType]}),e.jsx("span",{className:"text-xs text-foreground/40 font-mono",children:t.taskId}),e.jsx("div",{className:"flex-1"}),e.jsxs("span",{className:"inline-flex items-center gap-1 rounded-full bg-foreground/5 px-2 py-0.5 text-xs text-foreground/60","data-testid":"duration-pill",children:[e.jsx(O,{className:"h-3 w-3"}),H(t.durationMs)]}),u&&e.jsxs("span",{className:"inline-flex items-center gap-1 rounded-full bg-amber-500/10 px-2 py-0.5 text-xs font-medium text-amber-500","data-testid":"cost-pill",children:[e.jsx(I,{className:"h-3 w-3"}),u]}),t.hmac&&e.jsxs("span",{className:"inline-flex items-center gap-1 rounded-full bg-emerald-500/10 px-2 py-0.5 text-[11px] font-medium text-emerald-600 dark:text-emerald-400 cursor-help",title:`HMAC: ${t.hmac.slice(0,16)}…${t.hmac.slice(-8)}${t.agentSignature?` -Agent Signature: ${t.agentSignature.slice(0,16)}…`:""}`,"data-testid":"hmac-badge",children:[e.jsx(L,{className:"h-3 w-3"}),r("audit.signed","Signed")]})]}),t.taskType==="hitl"&&e.jsx(qe,{output:t.output,t:r}),t.actions&&t.actions.length>0&&e.jsx("div",{className:"mt-2 flex flex-wrap gap-1.5",children:t.actions.map(x=>e.jsx("span",{className:"rounded-md bg-foreground/5 px-2 py-0.5 text-[11px] font-medium text-foreground/60","data-testid":"action-badge",children:x},x))}),e.jsxs("div",{className:"mt-2 flex items-center gap-3 text-[11px] text-foreground/40",children:[t.environment&&e.jsx("span",{className:"rounded bg-foreground/5 px-1.5 py-0.5","data-testid":"env-badge",children:t.environment}),e.jsx("span",{children:Ke(t.timestamp)})]}),e.jsx(B,{data:t.input,label:r("audit.input","Input")}),e.jsx(B,{data:t.output,label:r("audit.output","Output")}),e.jsx(B,{data:t.llmDetail,label:r("audit.llmDetail","LLM Detail")}),e.jsx(B,{data:t.toolCalls,label:r("audit.toolCalls","Tool Calls")})]})}function te({stepIdx:t,stepEntries:r,t:a,defaultOpen:o=!0}){var g,v;const[u,x]=n.useState(o),p=r.reduce((l,m)=>l+m.durationMs,0),b=r.reduce((l,m)=>l+m.cost,0);return e.jsxs("div",{className:"relative",children:[e.jsxs("button",{type:"button",onClick:()=>x(!u),className:"mb-3 flex w-full items-center gap-3 text-start group","data-testid":`step-header-${t}`,children:[e.jsx("div",{className:"flex h-8 w-8 items-center justify-center rounded-full bg-primary/10 text-sm font-bold text-primary shrink-0",children:t}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("span",{className:"text-sm font-semibold text-foreground",children:[a("audit.step","Step")," ",t]}),((v=(g=r[0])==null?void 0:g.input)==null?void 0:v["input:initial"])!=null&&e.jsxs("p",{className:"text-xs text-muted-foreground mt-0.5 truncate",children:["“",String(r[0].input["input:initial"]),"”"]})]}),e.jsxs("div",{className:"flex items-center gap-3 shrink-0",children:[e.jsxs("span",{className:"text-xs text-muted-foreground hidden sm:inline-flex items-center gap-1",children:[e.jsx(O,{className:"h-3 w-3"}),H(p)]}),b>0&&e.jsxs("span",{className:"text-xs text-amber-500 hidden sm:inline-flex items-center gap-1",children:[e.jsx(I,{className:"h-3 w-3"}),P(b)]}),e.jsxs("span",{className:"text-xs text-muted-foreground",children:[r.length," ",a("audit.tasks","tasks")]}),e.jsx(Oe,{className:"h-3.5 w-3.5 text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity"})]})]}),u&&e.jsx("div",{className:"relative ms-4 border-s-2 border-border/50 ps-6 space-y-3 animate-in fade-in slide-in-from-top-1 duration-200",children:r.sort((l,m)=>l.taskIndex-m.taskIndex).map(l=>e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -inset-s-[31px] top-4 h-2.5 w-2.5 rounded-full border-2 border-border bg-card"}),e.jsx(Ye,{entry:l,t:a})]},l.id))})]})}function ze({conversationId:t,entries:r,t:a}){const[o,u]=n.useState(!0),x=n.useMemo(()=>ee(r),[r]),{totalDuration:p,totalCost:b,signedCount:g,firstTs:v}=n.useMemo(()=>{let l=0,m=0,f=0,j="";for(const N of r)l+=N.durationMs,m+=N.cost,N.hmac&&f++,(!j||N.timestampu(!o),className:"flex w-full items-center gap-3 p-4 text-start hover:bg-muted/30 transition-colors group",children:[e.jsx(K,{className:"h-4 w-4 text-primary shrink-0"}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("span",{className:"text-sm font-semibold text-foreground font-mono",children:t.length>24?`${t.slice(0,12)}…${t.slice(-8)}`:t}),v&&e.jsx("span",{className:"ms-2 text-xs text-muted-foreground",children:_e(v)})]}),e.jsxs("div",{className:"flex items-center gap-3 shrink-0",children:[e.jsxs("span",{className:"text-xs text-muted-foreground",children:[r.length," ",a("audit.entries","entries")]}),e.jsxs("span",{className:"text-xs text-muted-foreground hidden sm:inline-flex items-center gap-1",children:[e.jsx(O,{className:"h-3 w-3"}),H(p)]}),b>0&&e.jsxs("span",{className:"text-xs text-amber-500 hidden sm:inline-flex items-center gap-1",children:[e.jsx(I,{className:"h-3 w-3"}),P(b)]}),g>0&&e.jsxs("span",{className:`hidden sm:inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[11px] font-medium ${g===r.length?"bg-emerald-500/10 text-emerald-600 dark:text-emerald-400":"bg-amber-500/10 text-amber-600 dark:text-amber-400"}`,children:[e.jsx(L,{className:"h-3 w-3"}),g===r.length?a("audit.allSigned","All signed"):`${g}/${r.length}`]}),e.jsx(_,{className:`h-4 w-4 text-muted-foreground transition-transform ${o?"":"-rotate-90"}`})]})]}),o&&e.jsx("div",{className:"border-t border-border/50 p-4 space-y-6",children:[...x.entries()].sort(([l],[m])=>l-m).map(([l,m])=>e.jsx(te,{stepIdx:l,stepEntries:m,t:a},l))})]})}function Je(){return e.jsx("div",{className:"space-y-4 animate-pulse","data-testid":"loading-skeleton",children:Array.from({length:3}).map((t,r)=>e.jsxs("div",{className:"rounded-xl border border-border bg-card p-4 space-y-3",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"h-8 w-8 rounded-full bg-foreground/5"}),e.jsx("div",{className:"h-4 w-32 rounded bg-foreground/5"}),e.jsx("div",{className:"flex-1"}),e.jsx("div",{className:"h-4 w-16 rounded bg-foreground/5"})]}),e.jsxs("div",{className:"ms-11 space-y-2",children:[e.jsx("div",{className:"h-16 rounded-lg bg-foreground/5"}),e.jsx("div",{className:"h-16 rounded-lg bg-foreground/5"})]})]},r))})}function it(){const{t}=ge(),r=pe(s=>s.maybeAutoStart);n.useEffect(()=>{const s=setTimeout(()=>r("audit"),500);return()=>clearTimeout(s)},[r]);const[a,o]=n.useState("agent"),[u,x]=n.useState(""),[p,b]=n.useState(""),[g,v]=n.useState(""),[l,m]=n.useState(""),[f,j]=n.useState(""),[N,V]=n.useState(),[M,w]=n.useState(0),k=Ie(a==="conversation"?p:"",M,F),S=He(a==="agent"?f:"",N,M,F),T=a==="conversation"?k.data:S.data,E=a==="conversation"?k.isLoading:S.isLoading,G=a==="conversation"?k.isError:S.isError,q=()=>a==="conversation"?k.refetch():S.refetch(),se=a==="conversation"?k.isFetching:S.isFetching,h=a==="conversation"?!!p:!!f,[C,Y]=n.useState({});n.useEffect(()=>{Y({})},[a,p,f,N]),n.useEffect(()=>{T&&Y(s=>s[M]===T?s:{...s,[M]:T})},[T,M]);const i=n.useMemo(()=>Object.keys(C).map(Number).sort((s,d)=>s-d).flatMap(s=>C[s]),[C]),ae=n.useMemo(()=>{var D;const s=Object.keys(C).map(Number);if(s.length===0)return!1;const d=Math.max(...s);return(((D=C[d])==null?void 0:D.length)??0)>=F},[C]),re=E&&i.length===0,ne=n.useMemo(()=>i?ee(i):new Map,[i]),$=n.useMemo(()=>!i||a!=="agent"?new Map:Ue(i),[i,a]),c=n.useMemo(()=>!i||i.length===0?{count:0,cost:0,duration:0,signed:0}:{count:i.length,cost:i.reduce((s,d)=>s+d.cost,0),duration:i.reduce((s,d)=>s+d.durationMs,0),signed:i.filter(s=>!!s.hmac).length},[i]),oe=n.useCallback(s=>{if(v(s),w(0),s){j(s);const d=parseInt(l,10);V(isNaN(d)?void 0:d)}else j(""),V(void 0)},[l]),ie=n.useCallback(s=>{if(m(s),g){w(0),j(g);const d=parseInt(s,10);V(isNaN(d)?void 0:d)}},[g]),U=n.useCallback(()=>{const s=u.trim();s&&(w(0),b(s))},[u]),de=n.useCallback(s=>{s.key==="Enter"&&U()},[U]),[y,le]=n.useState(!1),z=a==="conversation"?k.refetch:S.refetch,J=n.useRef(y);J.current=y,n.useEffect(()=>{if(!y||!h)return;const s=setInterval(()=>{J.current&&z()},1e4);return()=>clearInterval(s)},[y,h,z]);const ce=n.useCallback(()=>{if(!i||i.length===0)return;const s=new Blob([JSON.stringify(i,null,2)],{type:"application/json"}),d=URL.createObjectURL(s),D=document.createElement("a");D.href=d,D.download=`audit-${p||f||"export"}-${new Date().toISOString().slice(0,10)}.json`,D.click(),URL.revokeObjectURL(d)},[i,p,f]),{data:A}=fe(),Q=n.useMemo(()=>{var s;return!f||!A?null:((s=A.find(d=>d.id===f))==null?void 0:s.name)??null},[f,A]);return e.jsxs("div",{className:"space-y-6","data-testid":"audit-page",children:[e.jsx("div",{children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"flex h-10 w-10 items-center justify-center rounded-xl bg-primary/10",children:e.jsx(R,{className:"h-5 w-5 text-primary"})}),e.jsxs("div",{className:"flex-1",children:[e.jsx("h1",{className:"text-2xl font-bold text-foreground",children:t("audit.title","Audit Trail")}),e.jsx("p",{className:"text-sm text-muted-foreground",children:t("audit.description","Browse the immutable audit ledger for compliance and debugging.")})]}),e.jsx("div",{className:"flex items-center gap-2",children:e.jsxs("button",{type:"button",onClick:ce,disabled:i.length===0,className:"inline-flex items-center gap-1.5 rounded-lg border border-input bg-background px-3 py-2 text-sm font-medium text-foreground transition-colors hover:bg-muted disabled:opacity-50","data-testid":"export-btn",children:[e.jsx(Te,{className:"h-4 w-4"}),t("audit.export","Export")]})})]})}),e.jsxs("div",{className:"rounded-xl border border-border bg-card p-4",children:[e.jsxs("div",{className:"mb-3 flex items-center gap-2","data-tour":"audit-mode-toggle",children:[e.jsxs("button",{type:"button",onClick:()=>{o("agent"),w(0)},className:`inline-flex items-center gap-1.5 rounded-lg px-3 py-1.5 text-xs font-medium transition-all ${a==="agent"?"bg-primary text-primary-foreground shadow-sm":"bg-foreground/5 text-foreground/60 hover:text-foreground/80"}`,"data-testid":"mode-agent",children:[e.jsx(Z,{className:"h-3.5 w-3.5"}),t("audit.byAgent","By Agent")]}),e.jsxs("button",{type:"button",onClick:()=>{o("conversation"),w(0)},className:`inline-flex items-center gap-1.5 rounded-lg px-3 py-1.5 text-xs font-medium transition-all ${a==="conversation"?"bg-primary text-primary-foreground shadow-sm":"bg-foreground/5 text-foreground/60 hover:text-foreground/80"}`,"data-testid":"mode-conversation",children:[e.jsx(K,{className:"h-3.5 w-3.5"}),t("audit.byConversation","By Conversation")]})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[a==="agent"?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"relative flex-1",children:[e.jsxs("select",{value:g,onChange:s=>oe(s.target.value),className:"w-full appearance-none rounded-lg border border-border bg-background pe-8 ps-3 py-2 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-primary/50","data-testid":"agent-input",children:[e.jsx("option",{value:"",children:t("audit.selectAgent","Select an agent…")}),A==null?void 0:A.map(s=>e.jsx("option",{value:s.id,children:s.name||s.id},s.id))]}),e.jsx(_,{className:"pointer-events-none absolute inset-e-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"})]}),e.jsx("input",{type:"text",value:l,onChange:s=>ie(s.target.value),placeholder:t("audit.versionPlaceholder","Version (optional)"),className:"w-36 rounded-lg border border-border bg-background px-3 py-2 text-sm placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-primary/50","data-testid":"version-input"})]}):e.jsxs(e.Fragment,{children:[e.jsx("input",{type:"text",value:u,onChange:s=>x(s.target.value),onKeyDown:de,placeholder:t("audit.conversationIdPlaceholder","Enter conversation ID..."),className:"flex-1 rounded-lg border border-border bg-background px-3 py-2 text-sm placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-primary/50","data-testid":"conversation-input"}),e.jsxs("button",{type:"button",onClick:U,disabled:!u.trim(),className:"inline-flex items-center gap-2 rounded-lg bg-primary px-4 py-2 text-sm font-medium text-primary-foreground shadow-sm transition-all hover:bg-primary/90 active:scale-[0.98] disabled:opacity-50 disabled:cursor-not-allowed","data-testid":"search-button",children:[e.jsx(he,{className:"h-4 w-4"}),t("audit.search","Search")]})]}),h&&e.jsxs("button",{type:"button",onClick:()=>le(s=>!s),className:`inline-flex items-center gap-1.5 rounded-lg px-3 py-2 text-sm font-medium transition-colors ${y?"bg-emerald-500/10 text-emerald-600 dark:text-emerald-400":"bg-foreground/5 text-muted-foreground hover:text-foreground"}`,title:t("audit.autoRefreshToggle","Toggle auto-refresh (every 10s)"),"data-testid":"auto-refresh-toggle",children:[e.jsx(be,{className:`h-4 w-4 ${y?"animate-spin":""}`}),t(y?"audit.autoRefreshOn":"audit.autoRefreshOff","Auto")]})]})]}),h&&i.length>0&&e.jsxs("div",{className:"flex items-center gap-4 rounded-xl border border-border bg-card px-4 py-3","data-testid":"summary-strip",children:[Q&&a==="agent"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm",children:[e.jsx(Z,{className:"h-4 w-4 text-primary"}),e.jsx("span",{className:"font-semibold text-foreground",children:Q})]}),e.jsx("div",{className:"h-4 w-px bg-border"})]}),e.jsxs("div",{className:"flex items-center gap-2 text-sm",children:[e.jsx(je,{className:"h-4 w-4 text-primary"}),e.jsx("span",{className:"font-semibold text-foreground",children:c.count}),e.jsx("span",{className:"text-muted-foreground",children:t("audit.entries","entries")})]}),e.jsx("div",{className:"h-4 w-px bg-border"}),e.jsxs("div",{className:"flex items-center gap-2 text-sm",children:[e.jsx(O,{className:"h-4 w-4 text-muted-foreground"}),e.jsx("span",{className:"font-semibold text-foreground",children:H(c.duration)}),e.jsx("span",{className:"text-muted-foreground",children:t("audit.totalDuration","total")})]}),c.cost>0&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"h-4 w-px bg-border"}),e.jsxs("div",{className:"flex items-center gap-2 text-sm",children:[e.jsx(I,{className:"h-4 w-4 text-amber-500"}),e.jsx("span",{className:"font-semibold text-amber-500",children:P(c.cost)}),e.jsx("span",{className:"text-muted-foreground",children:t("audit.totalCost","total cost")})]})]}),a==="agent"&&$.size>0&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"h-4 w-px bg-border"}),e.jsxs("div",{className:"flex items-center gap-2 text-sm",children:[e.jsx(K,{className:"h-4 w-4 text-muted-foreground"}),e.jsx("span",{className:"font-semibold text-foreground",children:$.size}),e.jsx("span",{className:"text-muted-foreground",children:t("audit.conversations","conversations")})]})]}),se&&e.jsx(Ne,{className:"ms-auto h-4 w-4 animate-spin text-muted-foreground"})]}),h&&i.length>0&&e.jsx("div",{className:`flex items-center gap-3 rounded-xl border px-4 py-3 ${c.signed===c.count?"border-emerald-500/30 bg-emerald-500/5":c.signed>0?"border-amber-500/30 bg-amber-500/5":"border-border bg-card"}`,"data-testid":"integrity-banner",children:c.signed===c.count?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"flex h-8 w-8 items-center justify-center rounded-full bg-emerald-500/15 shrink-0",children:e.jsx(L,{className:"h-4 w-4 text-emerald-500"})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"text-sm font-medium text-emerald-700 dark:text-emerald-400",children:t("audit.integrityVerified","All entries cryptographically signed")}),e.jsx("p",{className:"text-xs text-emerald-600/70 dark:text-emerald-400/60",children:t("audit.integrityVerifiedDesc","{{count}} of {{total}} entries have HMAC-SHA256 signatures",{count:c.signed,total:c.count})})]}),e.jsxs("div",{className:"shrink-0 flex items-center gap-1.5 rounded-full bg-emerald-500/10 px-2.5 py-1",children:[e.jsx(R,{className:"h-3.5 w-3.5 text-emerald-500"}),e.jsx("span",{className:"text-xs font-semibold text-emerald-600 dark:text-emerald-400",children:t("audit.integrityPass","SIGNED")})]})]}):c.signed>0?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"flex h-8 w-8 items-center justify-center rounded-full bg-amber-500/15 shrink-0",children:e.jsx(ve,{className:"h-4 w-4 text-amber-500"})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"text-sm font-medium text-amber-700 dark:text-amber-400",children:t("audit.integrityPartial","Partially signed audit trail")}),e.jsx("p",{className:"text-xs text-amber-600/70 dark:text-amber-400/60",children:t("audit.integrityPartialDesc","{{count}} of {{total}} entries have HMAC signatures",{count:c.signed,total:c.count})})]}),e.jsxs("div",{className:"shrink-0 flex items-center gap-1.5 rounded-full bg-amber-500/10 px-2.5 py-1",children:[e.jsx(L,{className:"h-3.5 w-3.5 text-amber-500"}),e.jsxs("span",{className:"text-xs font-semibold text-amber-600 dark:text-amber-400",children:[c.signed,"/",c.count]})]})]}):e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"flex h-8 w-8 items-center justify-center rounded-full bg-foreground/5 shrink-0",children:e.jsx(Ee,{className:"h-4 w-4 text-muted-foreground"})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"text-sm font-medium text-foreground/70",children:t("audit.integrityNone","Unsigned audit entries")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:t("audit.integrityNoneDesc","Configure a vault master key to enable automatic HMAC-SHA256 signing on all future audit entries.")})]})]})}),re&&h&&e.jsx(Je,{}),!h&&e.jsxs("div",{className:"flex flex-col items-center justify-center rounded-xl border border-dashed border-border bg-card/50 py-16","data-testid":"empty-state",children:[e.jsx(R,{className:"h-12 w-12 text-muted-foreground/30"}),e.jsx("p",{className:"mt-4 text-sm font-medium text-foreground/60",children:a==="agent"?t("audit.emptyAgent","Select an agent to view its audit trail"):t("audit.empty","Search for audit entries")}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:a==="agent"?t("audit.emptyAgentHint","Choose a deployed agent from the dropdown above to see all its audit records."):t("audit.emptyHint","Enter a conversation ID above to browse the audit trail.")})]}),h&&!E&&G&&i.length===0&&e.jsx(De,{message:t("common.error"),onRetry:()=>q(),retryLabel:t("common.retry")}),h&&!E&&G&&i.length>0&&e.jsx(Me,{onRetry:()=>q()}),h&&!E&&!G&&i.length===0&&e.jsxs("div",{className:"flex flex-col items-center justify-center rounded-xl border border-dashed border-border bg-card/50 py-16",children:[e.jsx(R,{className:"h-12 w-12 text-muted-foreground/30"}),e.jsx("p",{className:"mt-4 text-sm font-medium text-foreground/60",children:t("audit.noResults","No audit entries found")}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:t("audit.noResultsHint","Try a different ID or check that the conversation has been processed.")})]}),h&&i.length>0&&e.jsxs("div",{className:"space-y-4","data-testid":"audit-timeline",children:[a==="agent"&&$.size>0?[...$.entries()].map(([s,d])=>e.jsx(ze,{conversationId:s,entries:d,t},s)):[...ne.entries()].sort(([s],[d])=>s-d).map(([s,d])=>e.jsx(te,{stepIdx:s,stepEntries:d,t},s)),ae&&e.jsx("div",{className:"flex justify-center",children:e.jsx("button",{type:"button",onClick:()=>w(s=>s+F),className:"rounded-lg bg-foreground/5 px-6 py-2 text-sm font-medium text-foreground/60 transition-all hover:bg-foreground/10 hover:text-foreground/80","data-testid":"load-more",children:t("audit.loadMore","Load more")})})]})]})}export{it as AuditPage}; + */const Be=[["path",{d:"m7 15 5 5 5-5",key:"1hf1tw"}],["path",{d:"m7 9 5-5 5 5",key:"sgt6xg"}]],Oe=ue("chevrons-up-down",Be),X={trail:(t,r,a)=>["audit","trail",t,r,a],trailByAgent:(t,r,a,o)=>["audit","trail-by-agent",t,r,a,o],count:t=>["audit","count",t]};function Ie(t,r=0,a=100){return W({queryKey:X.trail(t,r,a),queryFn:()=>me(t,r,a),enabled:!!t})}function He(t,r,a=0,o=100){return W({queryKey:X.trailByAgent(t,r,a,o),queryFn:()=>xe(t,r,a,o),enabled:!!t})}const Pe={langchain:{bg:"bg-purple-500/15",text:"text-purple-400",icon:Ce},behavior:{bg:"bg-blue-500/15",text:"text-blue-400",icon:Se},output:{bg:"bg-emerald-500/15",text:"text-emerald-400",icon:Re},expressions:{bg:"bg-amber-500/15",text:"text-amber-400",icon:Fe},httpcalls:{bg:"bg-orange-500/15",text:"text-orange-400",icon:$e},propertysetter:{bg:"bg-teal-500/15",text:"text-teal-400",icon:ke},hitl:{bg:"bg-amber-500/15",text:"text-amber-500",icon:we}},Ve={bg:"bg-gray-500/15",text:"text-gray-400",icon:Le},R=100;function Ge(t){return Pe[t]??Ve}function H(t){return t<1e3?`${t}ms`:`${(t/1e3).toFixed(1)}s`}function P(t){return t===0?"":ye(t)}function ee(t){const r=new Map;for(const a of t){const o=a.stepIndex;r.has(o)||r.set(o,[]),r.get(o).push(a)}return r}function Ue(t){const r=new Map;for(const a of t){const o=a.conversationId;r.has(o)||r.set(o,[]),r.get(o).push(a)}return r}function _e(t){try{return new Intl.DateTimeFormat(void 0,{hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(new Date(t))}catch{return t}}function Ke(t){try{return new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}).format(new Date(t))}catch{return t}}function L({data:t,label:r}){const[a,o]=n.useState(!1);return!t||(Array.isArray(t)?t.length===0:Object.keys(t).length===0)?null:e.jsxs("div",{className:"mt-2",children:[e.jsxs("button",{type:"button",onClick:()=>o(!a),className:"flex items-center gap-1.5 text-xs font-medium text-foreground/60 hover:text-foreground/80 transition-colors","data-testid":`expand-${r}`,children:[a?e.jsx(K,{className:"h-3.5 w-3.5"}):e.jsx(Ae,{className:"h-3.5 w-3.5"}),r]}),a&&e.jsx("pre",{className:"mt-1.5 max-h-64 overflow-auto rounded-lg bg-card/50 p-3 text-xs text-foreground/80 border border-border/50",children:JSON.stringify(t,null,2)})]})}function qe({output:t,t:r}){if(!t)return null;const a=typeof t.verdict=="string"?t.verdict:void 0,o=typeof t.decidedBy=="string"?t.decidedBy:void 0,u=t.automated===!0,x=typeof t.note=="string"?t.note:void 0;if(!a&&!o&&!x)return null;const p=a==="APPROVED",b=a==="REJECTED";return e.jsxs("div",{className:"mt-2 flex flex-wrap items-center gap-1.5","data-testid":"hitl-decision-summary",children:[a&&e.jsx("span",{className:`inline-flex items-center rounded-full px-2 py-0.5 text-[11px] font-semibold ${p?"bg-emerald-500/15 text-emerald-500":b?"bg-destructive/15 text-destructive":"bg-foreground/10 text-foreground/70"}`,"data-testid":"hitl-verdict",children:a}),o&&e.jsxs("span",{className:"inline-flex items-center rounded-full bg-foreground/5 px-2 py-0.5 text-[11px] text-foreground/70","data-testid":"hitl-decided-by",children:[r("audit.decidedBy","by")," ",o]}),u&&e.jsx("span",{className:"inline-flex items-center rounded-full bg-sky-500/10 px-2 py-0.5 text-[11px] font-medium text-sky-500","data-testid":"hitl-automated",children:r("audit.automated","automated")}),x&&e.jsxs("span",{className:"text-[11px] italic text-foreground/60",children:["“",x,"”"]})]})}function Ye({entry:t,t:r}){const a=Ge(t.taskType),o=a.icon,u=P(t.cost);return e.jsxs("div",{className:"rounded-xl border border-border/50 bg-card p-4 transition-all hover:border-border hover:shadow-sm","data-testid":`audit-entry-${t.id}`,children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs("span",{className:`inline-flex items-center gap-1.5 rounded-full px-2.5 py-1 text-xs font-semibold ${a.bg} ${a.text}`,"data-testid":"task-type-badge",children:[e.jsx(o,{className:"h-3.5 w-3.5"}),t.taskType]}),e.jsx("span",{className:"text-xs text-foreground/40 font-mono",children:t.taskId}),e.jsx("div",{className:"flex-1"}),e.jsxs("span",{className:"inline-flex items-center gap-1 rounded-full bg-foreground/5 px-2 py-0.5 text-xs text-foreground/60","data-testid":"duration-pill",children:[e.jsx(O,{className:"h-3 w-3"}),H(t.durationMs)]}),u&&e.jsxs("span",{className:"inline-flex items-center gap-1 rounded-full bg-amber-500/10 px-2 py-0.5 text-xs font-medium text-amber-500","data-testid":"cost-pill",children:[e.jsx(I,{className:"h-3 w-3"}),u]}),t.hmac&&e.jsxs("span",{className:"inline-flex items-center gap-1 rounded-full bg-emerald-500/10 px-2 py-0.5 text-[11px] font-medium text-emerald-600 dark:text-emerald-400 cursor-help",title:`HMAC: ${t.hmac.slice(0,16)}…${t.hmac.slice(-8)}${t.agentSignature?` +Agent Signature: ${t.agentSignature.slice(0,16)}…`:""}`,"data-testid":"hmac-badge",children:[e.jsx(B,{className:"h-3 w-3"}),r("audit.signed","Signed")]})]}),t.taskType==="hitl"&&e.jsx(qe,{output:t.output,t:r}),t.actions&&t.actions.length>0&&e.jsx("div",{className:"mt-2 flex flex-wrap gap-1.5",children:t.actions.map(x=>e.jsx("span",{className:"rounded-md bg-foreground/5 px-2 py-0.5 text-[11px] font-medium text-foreground/60","data-testid":"action-badge",children:x},x))}),e.jsxs("div",{className:"mt-2 flex items-center gap-3 text-[11px] text-foreground/40",children:[t.environment&&e.jsx("span",{className:"rounded bg-foreground/5 px-1.5 py-0.5","data-testid":"env-badge",children:t.environment}),e.jsx("span",{children:_e(t.timestamp)})]}),e.jsx(L,{data:t.input,label:r("audit.input","Input")}),e.jsx(L,{data:t.output,label:r("audit.output","Output")}),e.jsx(L,{data:t.llmDetail,label:r("audit.llmDetail","LLM Detail")}),e.jsx(L,{data:t.toolCalls,label:r("audit.toolCalls","Tool Calls")})]})}function te({stepIdx:t,stepEntries:r,t:a,defaultOpen:o=!0}){var g,v;const[u,x]=n.useState(o),p=r.reduce((l,m)=>l+m.durationMs,0),b=r.reduce((l,m)=>l+m.cost,0);return e.jsxs("div",{className:"relative",children:[e.jsxs("button",{type:"button",onClick:()=>x(!u),className:"mb-3 flex w-full items-center gap-3 text-start group","data-testid":`step-header-${t}`,children:[e.jsx("div",{className:"flex h-8 w-8 items-center justify-center rounded-full bg-primary/10 text-sm font-bold text-primary shrink-0",children:t}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("span",{className:"text-sm font-semibold text-foreground",children:[a("audit.step","Step")," ",t]}),((v=(g=r[0])==null?void 0:g.input)==null?void 0:v["input:initial"])!=null&&e.jsxs("p",{className:"text-xs text-muted-foreground mt-0.5 truncate",children:["“",String(r[0].input["input:initial"]),"”"]})]}),e.jsxs("div",{className:"flex items-center gap-3 shrink-0",children:[e.jsxs("span",{className:"text-xs text-muted-foreground hidden sm:inline-flex items-center gap-1",children:[e.jsx(O,{className:"h-3 w-3"}),H(p)]}),b>0&&e.jsxs("span",{className:"text-xs text-amber-500 hidden sm:inline-flex items-center gap-1",children:[e.jsx(I,{className:"h-3 w-3"}),P(b)]}),e.jsxs("span",{className:"text-xs text-muted-foreground",children:[r.length," ",a("audit.tasks","tasks")]}),e.jsx(Oe,{className:"h-3.5 w-3.5 text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity"})]})]}),u&&e.jsx("div",{className:"relative ms-4 border-s-2 border-border/50 ps-6 space-y-3 animate-in fade-in slide-in-from-top-1 duration-200",children:r.sort((l,m)=>l.taskIndex-m.taskIndex).map(l=>e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute -inset-s-[31px] top-4 h-2.5 w-2.5 rounded-full border-2 border-border bg-card"}),e.jsx(Ye,{entry:l,t:a})]},l.id))})]})}function ze({conversationId:t,entries:r,t:a}){const[o,u]=n.useState(!0),x=n.useMemo(()=>ee(r),[r]),{totalDuration:p,totalCost:b,signedCount:g,firstTs:v}=n.useMemo(()=>{let l=0,m=0,f=0,j="";for(const N of r)l+=N.durationMs,m+=N.cost,N.hmac&&f++,(!j||N.timestampu(!o),className:"flex w-full items-center gap-3 p-4 text-start hover:bg-muted/30 transition-colors group",children:[e.jsx(_,{className:"h-4 w-4 text-primary shrink-0"}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("span",{className:"text-sm font-semibold text-foreground font-mono",children:t.length>24?`${t.slice(0,12)}…${t.slice(-8)}`:t}),v&&e.jsx("span",{className:"ms-2 text-xs text-muted-foreground",children:Ke(v)})]}),e.jsxs("div",{className:"flex items-center gap-3 shrink-0",children:[e.jsxs("span",{className:"text-xs text-muted-foreground",children:[r.length," ",a("audit.entries","entries")]}),e.jsxs("span",{className:"text-xs text-muted-foreground hidden sm:inline-flex items-center gap-1",children:[e.jsx(O,{className:"h-3 w-3"}),H(p)]}),b>0&&e.jsxs("span",{className:"text-xs text-amber-500 hidden sm:inline-flex items-center gap-1",children:[e.jsx(I,{className:"h-3 w-3"}),P(b)]}),g>0&&e.jsxs("span",{className:`hidden sm:inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[11px] font-medium ${g===r.length?"bg-emerald-500/10 text-emerald-600 dark:text-emerald-400":"bg-amber-500/10 text-amber-600 dark:text-amber-400"}`,children:[e.jsx(B,{className:"h-3 w-3"}),g===r.length?a("audit.allSigned","All signed"):`${g}/${r.length}`]}),e.jsx(K,{className:`h-4 w-4 text-muted-foreground transition-transform ${o?"":"-rotate-90"}`})]})]}),o&&e.jsx("div",{className:"border-t border-border/50 p-4 space-y-6",children:[...x.entries()].sort(([l],[m])=>l-m).map(([l,m])=>e.jsx(te,{stepIdx:l,stepEntries:m,t:a},l))})]})}function Je(){return e.jsx("div",{className:"space-y-4 animate-pulse","data-testid":"loading-skeleton",children:Array.from({length:3}).map((t,r)=>e.jsxs("div",{className:"rounded-xl border border-border bg-card p-4 space-y-3",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"h-8 w-8 rounded-full bg-foreground/5"}),e.jsx("div",{className:"h-4 w-32 rounded bg-foreground/5"}),e.jsx("div",{className:"flex-1"}),e.jsx("div",{className:"h-4 w-16 rounded bg-foreground/5"})]}),e.jsxs("div",{className:"ms-11 space-y-2",children:[e.jsx("div",{className:"h-16 rounded-lg bg-foreground/5"}),e.jsx("div",{className:"h-16 rounded-lg bg-foreground/5"})]})]},r))})}function it(){const{t}=ge(),r=pe(s=>s.maybeAutoStart);n.useEffect(()=>{const s=setTimeout(()=>r("audit"),500);return()=>clearTimeout(s)},[r]);const[a,o]=n.useState("agent"),[u,x]=n.useState(""),[p,b]=n.useState(""),[g,v]=n.useState(""),[l,m]=n.useState(""),[f,j]=n.useState(""),[N,V]=n.useState(),[M,w]=n.useState(0),k=Ie(a==="conversation"?p:"",M,R),S=He(a==="agent"?f:"",N,M,R),T=a==="conversation"?k.data:S.data,E=a==="conversation"?k.isLoading:S.isLoading,G=a==="conversation"?k.isError:S.isError,q=()=>a==="conversation"?k.refetch():S.refetch(),se=a==="conversation"?k.isFetching:S.isFetching,h=a==="conversation"?!!p:!!f,[C,Y]=n.useState({});n.useEffect(()=>{Y({})},[a,p,f,N]),n.useEffect(()=>{T&&Y(s=>s[M]===T?s:{...s,[M]:T})},[T,M]);const i=n.useMemo(()=>Object.keys(C).map(Number).sort((s,d)=>s-d).flatMap(s=>C[s]),[C]),ae=n.useMemo(()=>{var D;const s=Object.keys(C).map(Number);if(s.length===0)return!1;const d=Math.max(...s);return(((D=C[d])==null?void 0:D.length)??0)>=R},[C]),re=E&&i.length===0,ne=n.useMemo(()=>i?ee(i):new Map,[i]),$=n.useMemo(()=>!i||a!=="agent"?new Map:Ue(i),[i,a]),c=n.useMemo(()=>!i||i.length===0?{count:0,cost:0,duration:0,signed:0}:{count:i.length,cost:i.reduce((s,d)=>s+d.cost,0),duration:i.reduce((s,d)=>s+d.durationMs,0),signed:i.filter(s=>!!s.hmac).length},[i]),oe=n.useCallback(s=>{if(v(s),w(0),s){j(s);const d=parseInt(l,10);V(isNaN(d)?void 0:d)}else j(""),V(void 0)},[l]),ie=n.useCallback(s=>{if(m(s),g){w(0),j(g);const d=parseInt(s,10);V(isNaN(d)?void 0:d)}},[g]),U=n.useCallback(()=>{const s=u.trim();s&&(w(0),b(s))},[u]),de=n.useCallback(s=>{s.key==="Enter"&&U()},[U]),[y,le]=n.useState(!1),z=a==="conversation"?k.refetch:S.refetch,J=n.useRef(y);J.current=y,n.useEffect(()=>{if(!y||!h)return;const s=setInterval(()=>{J.current&&z()},1e4);return()=>clearInterval(s)},[y,h,z]);const ce=n.useCallback(()=>{if(!i||i.length===0)return;const s=new Blob([JSON.stringify(i,null,2)],{type:"application/json"}),d=URL.createObjectURL(s),D=document.createElement("a");D.href=d,D.download=`audit-${p||f||"export"}-${new Date().toISOString().slice(0,10)}.json`,D.click(),URL.revokeObjectURL(d)},[i,p,f]),{data:A}=fe(),Q=n.useMemo(()=>{var s;return!f||!A?null:((s=A.find(d=>d.id===f))==null?void 0:s.name)??null},[f,A]);return e.jsxs("div",{className:"space-y-6","data-testid":"audit-page",children:[e.jsx("div",{children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"flex h-10 w-10 items-center justify-center rounded-xl bg-primary/10",children:e.jsx(F,{className:"h-5 w-5 text-primary"})}),e.jsxs("div",{className:"flex-1",children:[e.jsx("h1",{className:"text-2xl font-bold text-foreground",children:t("audit.title","Audit Trail")}),e.jsx("p",{className:"text-sm text-muted-foreground",children:t("audit.description","Browse the immutable audit ledger for compliance and debugging.")})]}),e.jsx("div",{className:"flex items-center gap-2",children:e.jsxs("button",{type:"button",onClick:ce,disabled:i.length===0,className:"inline-flex items-center gap-1.5 rounded-lg border border-input bg-background px-3 py-2 text-sm font-medium text-foreground transition-colors hover:bg-muted disabled:opacity-50","data-testid":"export-btn",children:[e.jsx(Te,{className:"h-4 w-4"}),t("audit.export","Export")]})})]})}),e.jsxs("div",{className:"rounded-xl border border-border bg-card p-4",children:[e.jsxs("div",{className:"mb-3 flex items-center gap-2","data-tour":"audit-mode-toggle",children:[e.jsxs("button",{type:"button",onClick:()=>{o("agent"),w(0)},className:`inline-flex items-center gap-1.5 rounded-lg px-3 py-1.5 text-xs font-medium transition-all ${a==="agent"?"bg-primary text-primary-foreground shadow-sm":"bg-foreground/5 text-foreground/60 hover:text-foreground/80"}`,"data-testid":"mode-agent",children:[e.jsx(Z,{className:"h-3.5 w-3.5"}),t("audit.byAgent","By Agent")]}),e.jsxs("button",{type:"button",onClick:()=>{o("conversation"),w(0)},className:`inline-flex items-center gap-1.5 rounded-lg px-3 py-1.5 text-xs font-medium transition-all ${a==="conversation"?"bg-primary text-primary-foreground shadow-sm":"bg-foreground/5 text-foreground/60 hover:text-foreground/80"}`,"data-testid":"mode-conversation",children:[e.jsx(_,{className:"h-3.5 w-3.5"}),t("audit.byConversation","By Conversation")]})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[a==="agent"?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"relative flex-1",children:[e.jsxs("select",{value:g,onChange:s=>oe(s.target.value),className:"w-full appearance-none rounded-lg border border-border bg-background pe-8 ps-3 py-2 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-primary/50","data-testid":"agent-input",children:[e.jsx("option",{value:"",children:t("audit.selectAgent","Select an agent…")}),A==null?void 0:A.map(s=>e.jsx("option",{value:s.id,children:s.name||s.id},s.id))]}),e.jsx(K,{className:"pointer-events-none absolute inset-e-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"})]}),e.jsx("input",{type:"text",value:l,onChange:s=>ie(s.target.value),placeholder:t("audit.versionPlaceholder","Version (optional)"),className:"w-36 rounded-lg border border-border bg-background px-3 py-2 text-sm placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-primary/50","data-testid":"version-input"})]}):e.jsxs(e.Fragment,{children:[e.jsx("input",{type:"text",value:u,onChange:s=>x(s.target.value),onKeyDown:de,placeholder:t("audit.conversationIdPlaceholder","Enter conversation ID..."),className:"flex-1 rounded-lg border border-border bg-background px-3 py-2 text-sm placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-primary/50","data-testid":"conversation-input"}),e.jsxs("button",{type:"button",onClick:U,disabled:!u.trim(),className:"inline-flex items-center gap-2 rounded-lg bg-primary px-4 py-2 text-sm font-medium text-primary-foreground shadow-sm transition-all hover:bg-primary/90 active:scale-[0.98] disabled:opacity-50 disabled:cursor-not-allowed","data-testid":"search-button",children:[e.jsx(he,{className:"h-4 w-4"}),t("audit.search","Search")]})]}),h&&e.jsxs("button",{type:"button",onClick:()=>le(s=>!s),className:`inline-flex items-center gap-1.5 rounded-lg px-3 py-2 text-sm font-medium transition-colors ${y?"bg-emerald-500/10 text-emerald-600 dark:text-emerald-400":"bg-foreground/5 text-muted-foreground hover:text-foreground"}`,title:t("audit.autoRefreshToggle","Toggle auto-refresh (every 10s)"),"data-testid":"auto-refresh-toggle",children:[e.jsx(be,{className:`h-4 w-4 ${y?"animate-spin":""}`}),t(y?"audit.autoRefreshOn":"audit.autoRefreshOff","Auto")]})]})]}),h&&i.length>0&&e.jsxs("div",{className:"flex items-center gap-4 rounded-xl border border-border bg-card px-4 py-3","data-testid":"summary-strip",children:[Q&&a==="agent"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm",children:[e.jsx(Z,{className:"h-4 w-4 text-primary"}),e.jsx("span",{className:"font-semibold text-foreground",children:Q})]}),e.jsx("div",{className:"h-4 w-px bg-border"})]}),e.jsxs("div",{className:"flex items-center gap-2 text-sm",children:[e.jsx(je,{className:"h-4 w-4 text-primary"}),e.jsx("span",{className:"font-semibold text-foreground",children:c.count}),e.jsx("span",{className:"text-muted-foreground",children:t("audit.entries","entries")})]}),e.jsx("div",{className:"h-4 w-px bg-border"}),e.jsxs("div",{className:"flex items-center gap-2 text-sm",children:[e.jsx(O,{className:"h-4 w-4 text-muted-foreground"}),e.jsx("span",{className:"font-semibold text-foreground",children:H(c.duration)}),e.jsx("span",{className:"text-muted-foreground",children:t("audit.totalDuration","total")})]}),c.cost>0&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"h-4 w-px bg-border"}),e.jsxs("div",{className:"flex items-center gap-2 text-sm",children:[e.jsx(I,{className:"h-4 w-4 text-amber-500"}),e.jsx("span",{className:"font-semibold text-amber-500",children:P(c.cost)}),e.jsx("span",{className:"text-muted-foreground",children:t("audit.totalCost","total cost")})]})]}),a==="agent"&&$.size>0&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"h-4 w-px bg-border"}),e.jsxs("div",{className:"flex items-center gap-2 text-sm",children:[e.jsx(_,{className:"h-4 w-4 text-muted-foreground"}),e.jsx("span",{className:"font-semibold text-foreground",children:$.size}),e.jsx("span",{className:"text-muted-foreground",children:t("audit.conversations","conversations")})]})]}),se&&e.jsx(Ne,{className:"ms-auto h-4 w-4 animate-spin text-muted-foreground"})]}),h&&i.length>0&&e.jsx("div",{className:`flex items-center gap-3 rounded-xl border px-4 py-3 ${c.signed===c.count?"border-emerald-500/30 bg-emerald-500/5":c.signed>0?"border-amber-500/30 bg-amber-500/5":"border-border bg-card"}`,"data-testid":"integrity-banner",children:c.signed===c.count?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"flex h-8 w-8 items-center justify-center rounded-full bg-emerald-500/15 shrink-0",children:e.jsx(B,{className:"h-4 w-4 text-emerald-500"})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"text-sm font-medium text-emerald-700 dark:text-emerald-400",children:t("audit.integrityVerified","All entries cryptographically signed")}),e.jsx("p",{className:"text-xs text-emerald-600/70 dark:text-emerald-400/60",children:t("audit.integrityVerifiedDesc","{{count}} of {{total}} entries have HMAC-SHA256 signatures",{count:c.signed,total:c.count})})]}),e.jsxs("div",{className:"shrink-0 flex items-center gap-1.5 rounded-full bg-emerald-500/10 px-2.5 py-1",children:[e.jsx(F,{className:"h-3.5 w-3.5 text-emerald-500"}),e.jsx("span",{className:"text-xs font-semibold text-emerald-600 dark:text-emerald-400",children:t("audit.integrityPass","SIGNED")})]})]}):c.signed>0?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"flex h-8 w-8 items-center justify-center rounded-full bg-amber-500/15 shrink-0",children:e.jsx(ve,{className:"h-4 w-4 text-amber-500"})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"text-sm font-medium text-amber-700 dark:text-amber-400",children:t("audit.integrityPartial","Partially signed audit trail")}),e.jsx("p",{className:"text-xs text-amber-600/70 dark:text-amber-400/60",children:t("audit.integrityPartialDesc","{{count}} of {{total}} entries have HMAC signatures",{count:c.signed,total:c.count})})]}),e.jsxs("div",{className:"shrink-0 flex items-center gap-1.5 rounded-full bg-amber-500/10 px-2.5 py-1",children:[e.jsx(B,{className:"h-3.5 w-3.5 text-amber-500"}),e.jsxs("span",{className:"text-xs font-semibold text-amber-600 dark:text-amber-400",children:[c.signed,"/",c.count]})]})]}):e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"flex h-8 w-8 items-center justify-center rounded-full bg-foreground/5 shrink-0",children:e.jsx(Ee,{className:"h-4 w-4 text-muted-foreground"})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"text-sm font-medium text-foreground/70",children:t("audit.integrityNone","Unsigned audit entries")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:t("audit.integrityNoneDesc","Configure a vault master key to enable automatic HMAC-SHA256 signing on all future audit entries.")})]})]})}),re&&h&&e.jsx(Je,{}),!h&&e.jsxs("div",{className:"flex flex-col items-center justify-center rounded-xl border border-dashed border-border bg-card/50 py-16","data-testid":"empty-state",children:[e.jsx(F,{className:"h-12 w-12 text-muted-foreground/30"}),e.jsx("p",{className:"mt-4 text-sm font-medium text-foreground/60",children:a==="agent"?t("audit.emptyAgent","Select an agent to view its audit trail"):t("audit.empty","Search for audit entries")}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:a==="agent"?t("audit.emptyAgentHint","Choose a deployed agent from the dropdown above to see all its audit records."):t("audit.emptyHint","Enter a conversation ID above to browse the audit trail.")})]}),h&&!E&&G&&i.length===0&&e.jsx(De,{message:t("common.error"),onRetry:()=>q(),retryLabel:t("common.retry")}),h&&!E&&G&&i.length>0&&e.jsx(Me,{onRetry:()=>q()}),h&&!E&&!G&&i.length===0&&e.jsxs("div",{className:"flex flex-col items-center justify-center rounded-xl border border-dashed border-border bg-card/50 py-16",children:[e.jsx(F,{className:"h-12 w-12 text-muted-foreground/30"}),e.jsx("p",{className:"mt-4 text-sm font-medium text-foreground/60",children:t("audit.noResults","No audit entries found")}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:t("audit.noResultsHint","Try a different ID or check that the conversation has been processed.")})]}),h&&i.length>0&&e.jsxs("div",{className:"space-y-4","data-testid":"audit-timeline",children:[a==="agent"&&$.size>0?[...$.entries()].map(([s,d])=>e.jsx(ze,{conversationId:s,entries:d,t},s)):[...ne.entries()].sort(([s],[d])=>s-d).map(([s,d])=>e.jsx(te,{stepIdx:s,stepEntries:d,t},s)),ae&&e.jsx("div",{className:"flex justify-center",children:e.jsx("button",{type:"button",onClick:()=>w(s=>s+R),className:"rounded-lg bg-foreground/5 px-6 py-2 text-sm font-medium text-foreground/60 transition-all hover:bg-foreground/10 hover:text-foreground/80","data-testid":"load-more",children:t("audit.loadMore","Load more")})})]})]})}export{it as AuditPage}; diff --git a/src/main/resources/META-INF/resources/assets/back-link-D2LpIJ51.js b/src/main/resources/META-INF/resources/assets/back-link-tBVRORpr.js similarity index 80% rename from src/main/resources/META-INF/resources/assets/back-link-D2LpIJ51.js rename to src/main/resources/META-INF/resources/assets/back-link-tBVRORpr.js index 4ed4905171..f27a793fc9 100644 --- a/src/main/resources/META-INF/resources/assets/back-link-D2LpIJ51.js +++ b/src/main/resources/META-INF/resources/assets/back-link-tBVRORpr.js @@ -1 +1 @@ -import{j as t,h as r,a3 as o}from"./index-BY6d8wze.js";function n({to:e,label:s}){return t.jsxs(r,{to:e,className:"inline-flex items-center gap-1.5 text-sm font-medium text-muted-foreground hover:text-foreground transition-colors","data-testid":"back-to-list",children:[t.jsx(o,{className:"h-4 w-4"}),s]})}export{n as B}; +import{j as t,h as r,a3 as o}from"./index-BnLj1hck.js";function n({to:e,label:s}){return t.jsxs(r,{to:e,className:"inline-flex items-center gap-1.5 text-sm font-medium text-muted-foreground hover:text-foreground transition-colors","data-testid":"back-to-list",children:[t.jsx(o,{className:"h-4 w-4"}),s]})}export{n as B}; diff --git a/src/main/resources/META-INF/resources/assets/badge-B8rrdXaB.js b/src/main/resources/META-INF/resources/assets/badge-C2HqoOk5.js similarity index 92% rename from src/main/resources/META-INF/resources/assets/badge-B8rrdXaB.js rename to src/main/resources/META-INF/resources/assets/badge-C2HqoOk5.js index 8ed66fd76e..f724e19f58 100644 --- a/src/main/resources/META-INF/resources/assets/badge-B8rrdXaB.js +++ b/src/main/resources/META-INF/resources/assets/badge-C2HqoOk5.js @@ -1 +1 @@ -import{j as a,i as n,d7 as s}from"./index-BY6d8wze.js";const o=s("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground",secondary:"border-transparent bg-secondary text-secondary-foreground",success:"border-transparent bg-emerald-500/15 text-emerald-700 dark:text-emerald-400",warning:"border-transparent bg-amber-500/15 text-amber-700 dark:text-amber-400",destructive:"border-transparent bg-destructive/15 text-destructive",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function i({className:r,variant:e,...t}){return a.jsx("div",{className:n(o({variant:e}),r),...t})}export{i as B}; +import{j as a,i as n,d8 as s}from"./index-BnLj1hck.js";const o=s("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground",secondary:"border-transparent bg-secondary text-secondary-foreground",success:"border-transparent bg-emerald-500/15 text-emerald-700 dark:text-emerald-400",warning:"border-transparent bg-amber-500/15 text-amber-700 dark:text-amber-400",destructive:"border-transparent bg-destructive/15 text-destructive",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function i({className:r,variant:e,...t}){return a.jsx("div",{className:n(o({variant:e}),r),...t})}export{i as B}; diff --git a/src/main/resources/META-INF/resources/assets/ban-DpuGOmt1.js b/src/main/resources/META-INF/resources/assets/ban-C8dQHjQY.js similarity index 87% rename from src/main/resources/META-INF/resources/assets/ban-DpuGOmt1.js rename to src/main/resources/META-INF/resources/assets/ban-C8dQHjQY.js index 29dc88a148..a99687d87f 100644 --- a/src/main/resources/META-INF/resources/assets/ban-DpuGOmt1.js +++ b/src/main/resources/META-INF/resources/assets/ban-C8dQHjQY.js @@ -1,4 +1,4 @@ -import{x as c}from"./index-BY6d8wze.js";/** +import{x as c}from"./index-BnLj1hck.js";/** * @license lucide-react v0.577.0 - ISC * * This source code is licensed under the ISC license. diff --git a/src/main/resources/META-INF/resources/assets/blocked-calls-BfQrNh_6.js b/src/main/resources/META-INF/resources/assets/blocked-calls-BfQrNh_6.js deleted file mode 100644 index fa39ec97cb..0000000000 --- a/src/main/resources/META-INF/resources/assets/blocked-calls-BfQrNh_6.js +++ /dev/null @@ -1 +0,0 @@ -import{cw as q,c as N,c4 as E,u as k,r as R,j as n,bA as w,D as P}from"./index-BY6d8wze.js";import{R as S,b as I}from"./resources-R5ikMSzo.js";import{R as L}from"./resource-diff-viewer-D2tV_yay.js";function f(e,t){let a=e;for(const r of t.split(".")){if(typeof a!="object"||a===null)return;a=a[r]}return a}const $=[{id:"dynamicAgentCreation",path:"dynamicAgents.allowCreation",matches:(e,t)=>e===!0&&f(t,"dynamicAgents.enabled")===!0},{id:"dynamicAgentRecruitment",path:"dynamicAgents.allowRecruitment",matches:(e,t)=>e===!0&&f(t,"dynamicAgents.enabled")===!0},{id:"autoApproveOnTimeout",path:"hitlConfig.timeoutPolicy",matches:e=>e==="AUTO_APPROVE"},{id:"agentCreatedWithoutGate",path:"hitlConfig",matches:(e,t)=>C(t)?!q({hitlConfig:O(f(t,"hitlConfig"))}).ok:!1},{id:"agentCreatedWithExternalTools",path:"mcpServerUrls",matches:(e,t)=>C(t)?typeof e=="string"&&e.trim()!=="":!1},{id:"agentCreatedWithBroadEndpoints",path:"endpoints",matches:(e,t)=>typeof f(t,"openApiSpec")!="string"?!1:typeof e!="string"||e.trim()===""?!0:e.split(",").some(a=>!a.trim().startsWith("GET "))}];function A(e){if(Array.isArray(e))return e.filter(t=>typeof t=="string")}function O(e){if(typeof e!="object"||e===null||Array.isArray(e))return;const t=e,a=t.toolApprovals;if(typeof a!="object"||a===null||Array.isArray(a))return{timeoutPolicy:t.timeoutPolicy};const r=a,s=Array.isArray(r.rules)?r.rules.filter(i=>typeof i=="object"&&i!==null&&!Array.isArray(i)).filter(i=>typeof i.match=="string"):void 0;return{timeoutPolicy:t.timeoutPolicy,toolApprovals:{requireApproval:A(r.requireApproval)??[],exempt:A(r.exempt)??[],timeoutPolicy:r.timeoutPolicy,rules:s}}}function C(e){return(typeof f(e,"agentName")=="string"||typeof f(e,"name")=="string")&&typeof f(e,"systemPrompt")=="string"}function U(e){return new RegExp("(?").test(e)?"":/sk-[A-Za-z0-9_-]{20,}/.test(e)?"sk-…":/Bearer\s+[A-Za-z0-9\-_.+/=]{20,}/.test(e)?"Bearer …":null}function B(e){if(!e)return[];const t=[],a=U(e);a&&t.push({id:"inlineCredential",path:a});let r;try{r=JSON.parse(e)}catch{return t}return typeof r!="object"||r===null||Array.isArray(r)?t:[...t,...$.filter(s=>s.matches(f(r,s.path),r)).map(s=>({id:s.id,path:s.path}))]}function D(e){var h,m;if(!(e!=null&&e.uri)||((h=e.method)==null?void 0:h.toUpperCase())!=="PUT")return null;let t,a;try{const u=new URL(e.uri,"http://placeholder.invalid");t=u.pathname,a=u.searchParams}catch{return null}const r=t.split("/").filter(Boolean);if(r.length!==3)return null;const[s,i,d]=r;if(!d)return null;const l=S.find(u=>u.store===s&&u.plural===i);if(!l)return null;const o=F((m=e.queryParams)==null?void 0:m.version)??a.get("version");if(o==null)return null;const p=Number(o);return!Number.isInteger(p)||p<1?null:{resourceType:l,id:d,version:p}}function F(e){return typeof e=="string"?e:Array.isArray(e)&&typeof e[0]=="string"?e[0]:null}function G(e){return typeof e=="string"&&e.includes("")}const H={dynamicAgentCreation:"This group may create new agents while it runs. Those agents are not themselves approval-gated.",dynamicAgentRecruitment:"This group may pull other existing agents into its discussions.",autoApproveOnTimeout:"Approvals for this resource are granted automatically when they time out, with nobody watching.",agentCreatedWithoutGate:"This agent is being created with no approval gate. Every write it later makes will execute unsupervised.",agentCreatedWithBroadEndpoints:"This agent is being created with write access to its API — not limited to reads.",agentCreatedWithExternalTools:"This agent is being created with every tool an external MCP server offers. That server decides what those are, and can change them later.",inlineCredential:"This request embeds what looks like a credential literal instead of a ${vault:…} reference. A written-in secret is stored in plain text and cannot be rotated from the vault — reject and ask for the vault reference."};function z({preview:e,pinned:t,callId:a}){const{t:r}=N(),s=Object.entries(e.queryParams??{}),i=Object.entries(e.headers??{}),d=B(e.body),l=e.bodyTruncated,o=e.bodyTruncated?null:D(e),{method:p,roles:h}=E(),m=p==="none"||h.includes("eddi-admin")||h.includes("eddi-editor"),u=k({queryKey:["operator-config-diff",o==null?void 0:o.resourceType.slug,o==null?void 0:o.id,o==null?void 0:o.version],queryFn:()=>I(o.resourceType,o.id,o.version),enabled:!!o&&m,staleTime:1/0,retry:!1}),j=!!o&&(!m||u.isError),y=!!o&&u.isSuccess,[g,b]=R.useState(!1);return n.jsxs("div",{className:"mb-1.5 space-y-1","data-testid":`request-preview-${a}`,children:[n.jsxs("p",{className:"flex flex-wrap items-center gap-1.5 font-mono text-[11px] text-foreground",children:[n.jsx("span",{className:t?"rounded bg-emerald-500/10 px-1 py-0.5 font-sans text-[10px] font-medium text-emerald-600":"rounded bg-amber-500/10 px-1 py-0.5 font-sans text-[10px] font-medium text-amber-600",title:t?r("operator.approval.verifiedTitle","Resolved from the actual API call config; re-checked immediately before execution — if the request changes before then, execution is refused."):r("operator.approval.previewOnlyTitle","This call runs additional setup steps before executing, so this is a best-effort preview — the actual request may differ and is not re-checked before execution."),"data-testid":`request-preview-badge-${a}`,children:t?r("operator.approval.verified","verified"):r("operator.approval.previewOnly","preview")}),e.method," ",e.uri]}),s.length>0&&n.jsxs("p",{className:"font-mono text-[11px] text-muted-foreground",children:[r("operator.approval.query","Query"),": ",s.map(([c,v])=>`${c}=${v}`).join(", ")]}),i.length>0&&n.jsxs("p",{className:"font-mono text-[11px] text-muted-foreground",children:[r("operator.approval.headers","Headers"),": ",i.map(([c,v])=>`${c}: ${v}`).join(", ")]}),d.length>0&&n.jsxs("div",{className:"rounded border border-destructive/40 bg-destructive/10 p-2","data-testid":`request-preview-escalations-${a}`,role:"alert",children:[n.jsxs("p",{className:"flex items-center gap-1 text-[11px] font-medium text-destructive",children:[n.jsx(w,{className:"h-3.5 w-3.5 shrink-0","aria-hidden":"true"}),r("operator.approval.escalation.heading","This request grants further capability")]}),n.jsx("ul",{className:"mt-1 space-y-0.5",children:d.map(c=>n.jsxs("li",{className:"text-[11px] text-destructive",children:[n.jsx("span",{className:"font-mono",children:c.path})," — ",r(`operator.approval.escalation.${c.id}`,H[c.id]??c.path)]},c.id))})]}),l&&n.jsxs("p",{className:"flex items-center gap-1 rounded border border-amber-500/40 bg-amber-500/10 p-2 text-[11px] text-amber-700 dark:text-amber-400","data-testid":`request-preview-escalation-unchecked-${a}`,role:"alert",children:[n.jsx(w,{className:"h-3.5 w-3.5 shrink-0","aria-hidden":"true"}),r("operator.approval.escalation.unchecked","The body was too long to scan for capability grants — read it in full before approving.")]}),y&&n.jsxs("div",{"data-testid":`request-preview-diff-${a}`,children:[n.jsx("p",{className:"mb-1 text-[10px] font-medium text-muted-foreground",children:r("operator.approval.diffHeading","Changes against the stored version {{version}}",{version:o.version})}),n.jsx(L,{sourceContent:e.body??"",targetContent:JSON.stringify(u.data)}),G(e.body)&&n.jsx("p",{className:"mt-1 text-[10px] text-amber-700 dark:text-amber-400","data-testid":`request-preview-diff-redaction-note-${a}`,children:r("operator.approval.diffRedactionNote","Credential values are redacted in the proposed version, so they appear as changes here even when unchanged.")})]}),u.isLoading&&o&&n.jsxs("p",{className:"flex items-center gap-1 text-[10px] text-muted-foreground",children:[n.jsx(P,{className:"h-3 w-3 animate-spin","aria-hidden":"true"}),r("operator.approval.diffLoading","Loading the stored version to compare against…")]}),j&&n.jsx("p",{className:"text-[10px] text-muted-foreground","data-testid":`request-preview-diff-unavailable-${a}`,children:m?r("operator.approval.diffFailed","Couldn't load the stored version to compare against — the full proposed document is below."):r("operator.approval.diffForbidden","Comparing against the stored version needs editor access — the full proposed document is below.")}),e.body!=null&&e.body!==""&&n.jsxs(n.Fragment,{children:[y&&n.jsx("button",{type:"button",onClick:()=>b(c=>!c),className:"text-[10px] font-medium text-primary underline hover:no-underline","aria-expanded":g,"data-testid":`request-preview-body-toggle-${a}`,children:g?r("operator.approval.hideFullRequest","Hide the full proposed document"):r("operator.approval.showFullRequest","Show the full proposed document")}),(!y||g)&&n.jsxs(n.Fragment,{children:[n.jsx("pre",{className:`${g?"max-h-[32rem]":"max-h-32"} overflow-auto rounded bg-muted/60 p-2 text-[11px] leading-relaxed text-foreground`,"data-testid":`request-preview-body-${a}`,children:e.body}),!y&&!g&&n.jsx("button",{type:"button",onClick:()=>b(!0),className:"text-[10px] font-medium text-primary underline hover:no-underline","data-testid":`request-preview-body-expand-${a}`,children:r("operator.approval.expandBody","Expand")})]})]}),e.bodyTruncated&&n.jsx("p",{className:"text-[10px] text-muted-foreground",children:r("operator.approval.bodyTruncated","Body shown truncated for display — approval still covers the full request.")})]})}function T(e,t){if(!e||!t||t.trim()==="")return!1;let a=e;try{a=decodeURIComponent(e)}catch{}return a.toLowerCase().includes(t.trim().toLowerCase())}function W(e,t,a){var s;if(!e)return[];const r=[];for(const i of e){const d=i.requestPreview;if(!d)continue;const l=(d.method??"").toUpperCase();if(!(l==="GET"||l==="HEAD"||l==="")){if(t&&T(d.uri,t)){let o=d.uri??"";try{o=decodeURIComponent(o)}catch{}const p=/\/agents\/([^/?#]+)\/start(?:[?#]|$)/i.exec(o),h=((s=p==null?void 0:p[1])==null?void 0:s.toLowerCase())===t.trim().toLowerCase();r.push({callId:i.callId,agentId:t,target:h?"self-start":"agent"});continue}a&&T(d.uri,a)&&r.push({callId:i.callId,agentId:a,target:"conversation"})}}return r}function _(e){if(!e)return!1;let t=e;try{t=decodeURIComponent(e)}catch{}return t.toLowerCase().includes("/llmstore/llms")}function x(e){if(Array.isArray(e))return e.some(x);if(typeof e!="object"||e===null)return!1;for(const[t,a]of Object.entries(e))if(t==="toolApprovals"||x(a))return!0;return!1}function J(e){if(!e)return[];const t=[];for(const a of e){const r=a.requestPreview;if(!r)continue;const s=(r.method??"").toUpperCase();if(s==="GET"||s==="HEAD"||s===""||!_(r.uri))continue;if(!a.requestPinned){t.push({callId:a.callId,reason:"unpinned-request"});continue}const i=r.body;if(i==null||i.trim()==="")continue;if(r.bodyTruncated){t.push({callId:a.callId,reason:"unverifiable-body"});continue}let d;try{d=JSON.parse(i)}catch{t.push({callId:a.callId,reason:"unverifiable-body"});continue}x(d)&&t.push({callId:a.callId,reason:"carries-gate"})}return t}function Q(e,t,a,r){const s=W(e,t,a).map(l=>({callId:l.callId,reason:l.target==="self-start"?r("operator.approval.blockedSelfStart","The operator may not test-drive itself — starting a conversation with its own agent ({{agentId}}) would loop its output back in as input. Approving is unavailable for the whole batch while it is present — reject, and test-drive a different agent.",{agentId:l.agentId}):l.target==="conversation"?r("operator.approval.blockedSelfConversation","An agent may not send a message into the conversation it is running in, and this request targets this one ({{agentId}}). That would write its own text in as though a human had said it. Approving is unavailable for the whole batch while it is present — reject.",{agentId:l.agentId}):r("operator.approval.blockedSelfTarget","An agent may not modify its own definition, and this request targets the operator's own agent ({{agentId}}). Approving is unavailable for the whole batch while it is present — reject, and make this change from that agent's own page.",{agentId:l.agentId})})),i={"carries-gate":r("operator.approval.blockedGateCarrying","This request writes an LLM configuration that sets its own approval gate (toolApprovals), which would replace the gate reviewing it. Approving is unavailable for the whole batch while it is present — reject, and change the gate from the agent's own page."),"unverifiable-body":r("operator.approval.blockedGateUnverifiable","This request writes an LLM configuration whose body cannot be read in full — it is either too large to display or not valid JSON — so it cannot be confirmed free of an approval-gate override. Approving is unavailable for the whole batch while it is present — reject, and make this change from the agent's own page."),"unpinned-request":r("operator.approval.blockedGateUnpinned","This request writes an LLM configuration but is not pinned, so what actually runs can differ from what is shown here and cannot be confirmed free of an approval-gate override. Approving is unavailable for the whole batch while it is present — reject, and make this change from the agent's own page.")},d=J(e).map(l=>({callId:l.callId,reason:i[l.reason]}));return[...s,...d]}export{z as R,Q as f}; diff --git a/src/main/resources/META-INF/resources/assets/blocked-calls-BqNBLu7Y.js b/src/main/resources/META-INF/resources/assets/blocked-calls-BqNBLu7Y.js new file mode 100644 index 0000000000..43cbc8820b --- /dev/null +++ b/src/main/resources/META-INF/resources/assets/blocked-calls-BqNBLu7Y.js @@ -0,0 +1 @@ +import{cx as q,c as k,c5 as E,u as N,r as R,j as o,bA as w,D as P}from"./index-BnLj1hck.js";import{p as S,R as I}from"./resource-diff-viewer-DeowJcjr.js";import{R as L,b as $}from"./resources-D97MNqv3.js";function f(e,t){let a=e;for(const r of t.split(".")){if(typeof a!="object"||a===null)return;a=a[r]}return a}const O=[{id:"dynamicAgentCreation",path:"dynamicAgents.allowCreation",matches:(e,t)=>e===!0&&f(t,"dynamicAgents.enabled")===!0},{id:"dynamicAgentRecruitment",path:"dynamicAgents.allowRecruitment",matches:(e,t)=>e===!0&&f(t,"dynamicAgents.enabled")===!0},{id:"autoApproveOnTimeout",path:"hitlConfig.timeoutPolicy",matches:e=>e==="AUTO_APPROVE"},{id:"agentCreatedWithoutGate",path:"hitlConfig",matches:(e,t)=>C(t)?!q({hitlConfig:U(f(t,"hitlConfig"))}).ok:!1},{id:"agentCreatedWithExternalTools",path:"mcpServerUrls",matches:(e,t)=>C(t)?typeof e=="string"&&e.trim()!=="":!1},{id:"agentCreatedWithBroadEndpoints",path:"endpoints",matches:(e,t)=>typeof f(t,"openApiSpec")!="string"?!1:typeof e!="string"||e.trim()===""?!0:e.split(",").some(a=>!a.trim().startsWith("GET "))}];function A(e){if(Array.isArray(e))return e.filter(t=>typeof t=="string")}function U(e){if(typeof e!="object"||e===null||Array.isArray(e))return;const t=e,a=t.toolApprovals;if(typeof a!="object"||a===null||Array.isArray(a))return{timeoutPolicy:t.timeoutPolicy};const r=a,i=Array.isArray(r.rules)?r.rules.filter(n=>typeof n=="object"&&n!==null&&!Array.isArray(n)).filter(n=>typeof n.match=="string"):void 0;return{timeoutPolicy:t.timeoutPolicy,toolApprovals:{requireApproval:A(r.requireApproval)??[],exempt:A(r.exempt)??[],timeoutPolicy:r.timeoutPolicy,rules:i}}}function C(e){return(typeof f(e,"agentName")=="string"||typeof f(e,"name")=="string")&&typeof f(e,"systemPrompt")=="string"}function B(e){return new RegExp("(?").test(e)?"":/sk-[A-Za-z0-9_-]{20,}/.test(e)?"sk-…":/Bearer\s+[A-Za-z0-9\-_.+/=]{20,}/.test(e)?"Bearer …":null}function D(e){if(!e)return[];const t=[],a=B(e);a&&t.push({id:"inlineCredential",path:a});const r=S(e);if(!r.ok)return t;const i=r.value;return typeof i!="object"||i===null||Array.isArray(i)?t:[...t,...O.filter(n=>n.matches(f(i,n.path),i)).map(n=>({id:n.id,path:n.path}))]}function F(e){var h,m;if(!(e!=null&&e.uri)||((h=e.method)==null?void 0:h.toUpperCase())!=="PUT")return null;let t,a;try{const u=new URL(e.uri,"http://placeholder.invalid");t=u.pathname,a=u.searchParams}catch{return null}const r=t.split("/").filter(Boolean);if(r.length!==3)return null;const[i,n,d]=r;if(!d)return null;const l=L.find(u=>u.store===i&&u.plural===n);if(!l)return null;const s=G((m=e.queryParams)==null?void 0:m.version)??a.get("version");if(s==null)return null;const p=Number(s);return!Number.isInteger(p)||p<1?null:{resourceType:l,id:d,version:p}}function G(e){return typeof e=="string"?e:Array.isArray(e)&&typeof e[0]=="string"?e[0]:null}function H(e){return typeof e=="string"&&e.includes("")}const W={dynamicAgentCreation:"This group may create new agents while it runs. Those agents are not themselves approval-gated.",dynamicAgentRecruitment:"This group may pull other existing agents into its discussions.",autoApproveOnTimeout:"Approvals for this resource are granted automatically when they time out, with nobody watching.",agentCreatedWithoutGate:"This agent is being created with no approval gate. Every write it later makes will execute unsupervised.",agentCreatedWithBroadEndpoints:"This agent is being created with write access to its API — not limited to reads.",agentCreatedWithExternalTools:"This agent is being created with every tool an external MCP server offers. That server decides what those are, and can change them later.",inlineCredential:"This request embeds what looks like a credential literal instead of a ${vault:…} reference. A written-in secret is stored in plain text and cannot be rotated from the vault — reject and ask for the vault reference."};function Q({preview:e,pinned:t,callId:a}){const{t:r}=k(),i=Object.entries(e.queryParams??{}),n=Object.entries(e.headers??{}),d=D(e.body),l=e.bodyTruncated,s=e.bodyTruncated?null:F(e),{method:p,roles:h}=E(),m=p==="none"||h.includes("eddi-admin")||h.includes("eddi-editor"),u=N({queryKey:["operator-config-diff",s==null?void 0:s.resourceType.slug,s==null?void 0:s.id,s==null?void 0:s.version],queryFn:()=>$(s.resourceType,s.id,s.version),enabled:!!s&&m,staleTime:1/0,retry:!1}),j=!!s&&(!m||u.isError),y=!!s&&u.isSuccess,[g,b]=R.useState(!1);return o.jsxs("div",{className:"mb-1.5 space-y-1","data-testid":`request-preview-${a}`,children:[o.jsxs("p",{className:"flex flex-wrap items-center gap-1.5 font-mono text-[11px] text-foreground",children:[o.jsx("span",{className:t?"rounded bg-emerald-500/10 px-1 py-0.5 font-sans text-[10px] font-medium text-emerald-600":"rounded bg-amber-500/10 px-1 py-0.5 font-sans text-[10px] font-medium text-amber-600",title:t?r("operator.approval.verifiedTitle","Resolved from the actual API call config; re-checked immediately before execution — if the request changes before then, execution is refused."):r("operator.approval.previewOnlyTitle","This call runs additional setup steps before executing, so this is a best-effort preview — the actual request may differ and is not re-checked before execution."),"data-testid":`request-preview-badge-${a}`,children:t?r("operator.approval.verified","verified"):r("operator.approval.previewOnly","preview")}),e.method," ",e.uri]}),i.length>0&&o.jsxs("p",{className:"font-mono text-[11px] text-muted-foreground",children:[r("operator.approval.query","Query"),": ",i.map(([c,v])=>`${c}=${v}`).join(", ")]}),n.length>0&&o.jsxs("p",{className:"font-mono text-[11px] text-muted-foreground",children:[r("operator.approval.headers","Headers"),": ",n.map(([c,v])=>`${c}: ${v}`).join(", ")]}),d.length>0&&o.jsxs("div",{className:"rounded border border-destructive/40 bg-destructive/10 p-2","data-testid":`request-preview-escalations-${a}`,role:"alert",children:[o.jsxs("p",{className:"flex items-center gap-1 text-[11px] font-medium text-destructive",children:[o.jsx(w,{className:"h-3.5 w-3.5 shrink-0","aria-hidden":"true"}),r("operator.approval.escalation.heading","This request grants further capability")]}),o.jsx("ul",{className:"mt-1 space-y-0.5",children:d.map(c=>o.jsxs("li",{className:"text-[11px] text-destructive",children:[o.jsx("span",{className:"font-mono",children:c.path})," — ",r(`operator.approval.escalation.${c.id}`,W[c.id]??c.path)]},c.id))})]}),l&&o.jsxs("p",{className:"flex items-center gap-1 rounded border border-amber-500/40 bg-amber-500/10 p-2 text-[11px] text-amber-700 dark:text-amber-400","data-testid":`request-preview-escalation-unchecked-${a}`,role:"alert",children:[o.jsx(w,{className:"h-3.5 w-3.5 shrink-0","aria-hidden":"true"}),r("operator.approval.escalation.unchecked","The body was too long to scan for capability grants — read it in full before approving.")]}),y&&o.jsxs("div",{"data-testid":`request-preview-diff-${a}`,children:[o.jsx("p",{className:"mb-1 text-[10px] font-medium text-muted-foreground",children:r("operator.approval.diffHeading","Changes against the stored version {{version}}",{version:s.version})}),o.jsx(I,{sourceContent:e.body??"",targetContent:JSON.stringify(u.data),labels:{target:r("operator.approval.diffStored","Stored v{{version}}",{version:s.version}),source:r("operator.approval.diffProposed","Proposed")}}),H(e.body)&&o.jsx("p",{className:"mt-1 text-[10px] text-amber-700 dark:text-amber-400","data-testid":`request-preview-diff-redaction-note-${a}`,children:r("operator.approval.diffRedactionNote","Credential values are redacted in the proposed version, so they appear as changes here even when unchanged.")})]}),u.isLoading&&s&&o.jsxs("p",{className:"flex items-center gap-1 text-[10px] text-muted-foreground",children:[o.jsx(P,{className:"h-3 w-3 animate-spin","aria-hidden":"true"}),r("operator.approval.diffLoading","Loading the stored version to compare against…")]}),j&&o.jsx("p",{className:"text-[10px] text-muted-foreground","data-testid":`request-preview-diff-unavailable-${a}`,children:m?r("operator.approval.diffFailed","Couldn't load the stored version to compare against — the full proposed document is below."):r("operator.approval.diffForbidden","Comparing against the stored version needs editor access — the full proposed document is below.")}),e.body!=null&&e.body!==""&&o.jsxs(o.Fragment,{children:[y&&o.jsx("button",{type:"button",onClick:()=>b(c=>!c),className:"text-[10px] font-medium text-primary underline hover:no-underline","aria-expanded":g,"data-testid":`request-preview-body-toggle-${a}`,children:g?r("operator.approval.hideFullRequest","Hide the full proposed document"):r("operator.approval.showFullRequest","Show the full proposed document")}),(!y||g)&&o.jsxs(o.Fragment,{children:[o.jsx("pre",{className:`${g?"max-h-[32rem]":"max-h-32"} overflow-auto rounded bg-muted/60 p-2 text-[11px] leading-relaxed text-foreground`,"data-testid":`request-preview-body-${a}`,children:e.body}),!y&&!g&&o.jsx("button",{type:"button",onClick:()=>b(!0),className:"text-[10px] font-medium text-primary underline hover:no-underline","data-testid":`request-preview-body-expand-${a}`,children:r("operator.approval.expandBody","Expand")})]})]}),e.bodyTruncated&&o.jsx("p",{className:"text-[10px] text-muted-foreground",children:r("operator.approval.bodyTruncated","Body shown truncated for display — approval still covers the full request.")})]})}function T(e,t){if(!e||!t||t.trim()==="")return!1;let a=e;try{a=decodeURIComponent(e)}catch{}return a.toLowerCase().includes(t.trim().toLowerCase())}function _(e,t,a){var i;if(!e)return[];const r=[];for(const n of e){const d=n.requestPreview;if(!d)continue;const l=(d.method??"").toUpperCase();if(!(l==="GET"||l==="HEAD"||l==="")){if(t&&T(d.uri,t)){let s=d.uri??"";try{s=decodeURIComponent(s)}catch{}const p=/\/agents\/([^/?#]+)\/start(?:[?#]|$)/i.exec(s),h=((i=p==null?void 0:p[1])==null?void 0:i.toLowerCase())===t.trim().toLowerCase();r.push({callId:n.callId,agentId:t,target:h?"self-start":"agent"});continue}a&&T(d.uri,a)&&r.push({callId:n.callId,agentId:a,target:"conversation"})}}return r}function J(e){if(!e)return!1;let t=e;try{t=decodeURIComponent(e)}catch{}return t.toLowerCase().includes("/llmstore/llms")}function x(e){if(Array.isArray(e))return e.some(x);if(typeof e!="object"||e===null)return!1;for(const[t,a]of Object.entries(e))if(t==="toolApprovals"||x(a))return!0;return!1}function M(e){if(!e)return[];const t=[];for(const a of e){const r=a.requestPreview;if(!r)continue;const i=(r.method??"").toUpperCase();if(i==="GET"||i==="HEAD"||i===""||!J(r.uri))continue;if(!a.requestPinned){t.push({callId:a.callId,reason:"unpinned-request"});continue}const n=r.body;if(n==null||n.trim()==="")continue;if(r.bodyTruncated){t.push({callId:a.callId,reason:"unverifiable-body"});continue}let d;try{d=JSON.parse(n)}catch{t.push({callId:a.callId,reason:"unverifiable-body"});continue}x(d)&&t.push({callId:a.callId,reason:"carries-gate"})}return t}function Z(e,t,a,r){const i=_(e,t,a).map(l=>({callId:l.callId,reason:l.target==="self-start"?r("operator.approval.blockedSelfStart","The operator may not test-drive itself — starting a conversation with its own agent ({{agentId}}) would loop its output back in as input. Approving is unavailable for the whole batch while it is present — reject, and test-drive a different agent.",{agentId:l.agentId}):l.target==="conversation"?r("operator.approval.blockedSelfConversation","An agent may not send a message into the conversation it is running in, and this request targets this one ({{agentId}}). That would write its own text in as though a human had said it. Approving is unavailable for the whole batch while it is present — reject.",{agentId:l.agentId}):r("operator.approval.blockedSelfTarget","An agent may not modify its own definition, and this request targets the operator's own agent ({{agentId}}). Approving is unavailable for the whole batch while it is present — reject, and make this change from that agent's own page.",{agentId:l.agentId})})),n={"carries-gate":r("operator.approval.blockedGateCarrying","This request writes an LLM configuration that sets its own approval gate (toolApprovals), which would replace the gate reviewing it. Approving is unavailable for the whole batch while it is present — reject, and change the gate from the agent's own page."),"unverifiable-body":r("operator.approval.blockedGateUnverifiable","This request writes an LLM configuration whose body cannot be read in full — it is either too large to display or not valid JSON — so it cannot be confirmed free of an approval-gate override. Approving is unavailable for the whole batch while it is present — reject, and make this change from the agent's own page."),"unpinned-request":r("operator.approval.blockedGateUnpinned","This request writes an LLM configuration but is not pinned, so what actually runs can differ from what is shown here and cannot be confirmed free of an approval-gate override. Approving is unavailable for the whole batch while it is present — reject, and make this change from the agent's own page.")},d=M(e).map(l=>({callId:l.callId,reason:n[l.reason]}));return[...i,...d]}export{Q as R,Z as f}; diff --git a/src/main/resources/META-INF/resources/assets/book-open-check-ZT-no4L2.js b/src/main/resources/META-INF/resources/assets/book-open-check-DCaE5RYV.js similarity index 91% rename from src/main/resources/META-INF/resources/assets/book-open-check-ZT-no4L2.js rename to src/main/resources/META-INF/resources/assets/book-open-check-DCaE5RYV.js index 2607e07726..8a8d806860 100644 --- a/src/main/resources/META-INF/resources/assets/book-open-check-ZT-no4L2.js +++ b/src/main/resources/META-INF/resources/assets/book-open-check-DCaE5RYV.js @@ -1,4 +1,4 @@ -import{x as a}from"./index-BY6d8wze.js";/** +import{x as a}from"./index-BnLj1hck.js";/** * @license lucide-react v0.577.0 - ISC * * This source code is licensed under the ISC license. diff --git a/src/main/resources/META-INF/resources/assets/bookmark-C8tPewzR.js b/src/main/resources/META-INF/resources/assets/bookmark-CI1fX0M9.js similarity index 89% rename from src/main/resources/META-INF/resources/assets/bookmark-C8tPewzR.js rename to src/main/resources/META-INF/resources/assets/bookmark-CI1fX0M9.js index 19e8e3d474..d41c307c24 100644 --- a/src/main/resources/META-INF/resources/assets/bookmark-C8tPewzR.js +++ b/src/main/resources/META-INF/resources/assets/bookmark-CI1fX0M9.js @@ -1,4 +1,4 @@ -import{x as o}from"./index-BY6d8wze.js";/** +import{x as o}from"./index-BnLj1hck.js";/** * @license lucide-react v0.577.0 - ISC * * This source code is licensed under the ISC license. diff --git a/src/main/resources/META-INF/resources/assets/braces-C2kMgYG8.js b/src/main/resources/META-INF/resources/assets/braces-y7ww9cFU.js similarity index 90% rename from src/main/resources/META-INF/resources/assets/braces-C2kMgYG8.js rename to src/main/resources/META-INF/resources/assets/braces-y7ww9cFU.js index 00617fbca3..bb43d41adb 100644 --- a/src/main/resources/META-INF/resources/assets/braces-C2kMgYG8.js +++ b/src/main/resources/META-INF/resources/assets/braces-y7ww9cFU.js @@ -1,4 +1,4 @@ -import{x as a}from"./index-BY6d8wze.js";/** +import{x as a}from"./index-BnLj1hck.js";/** * @license lucide-react v0.577.0 - ISC * * This source code is licensed under the ISC license. diff --git a/src/main/resources/META-INF/resources/assets/capabilities-DjMHUxhe.js b/src/main/resources/META-INF/resources/assets/capabilities-DjMHUxhe.js deleted file mode 100644 index 667dbea85a..0000000000 --- a/src/main/resources/META-INF/resources/assets/capabilities-DjMHUxhe.js +++ /dev/null @@ -1 +0,0 @@ -import{c as z,r as n,j as e,aM as b,ad as J,a1 as O,av as j,a7 as K,a8 as Q,i as d,ag as U,B as N,h as R,N as I}from"./index-BY6d8wze.js";import{u as V}from"./use-debounce-BXAMTtyO.js";import{u as W,a as X,b as Y}from"./use-capabilities-qy1S0YmI.js";import{T as Z}from"./tag-DrXWC0RK.js";import{G as ee}from"./gauge-D0qrGV1d.js";const m=U;function le(){const{t}=z(),[a,y]=n.useState(""),[v,k]=n.useState(""),[w,_]=n.useState("highest_confidence"),[A,D]=n.useState(null),T=V(a.trim(),400),S=v||T,{data:i,isLoading:p,isError:o,refetch:q}=W(),{data:c,isLoading:C,isError:L,refetch:H}=X(S,w),{registry:g,isLoading:h,isError:B,refetchMatches:G}=Y(),E=n.useMemo(()=>{if(!i)return[];if(!a.trim())return i;const s=a.trim().toLowerCase();return i.filter(l=>l.toLowerCase().includes(s))},[i,a]),f=n.useMemo(()=>{if(!a.trim())return g;const s=a.trim().toLowerCase();return g.filter(l=>l.skill.toLowerCase().includes(s))},[g,a]);return e.jsxs("div",{className:"space-y-6","data-testid":"capabilities-page",children:[e.jsxs("div",{children:[e.jsxs("h1",{className:"flex items-center gap-3 text-2xl font-bold text-foreground",children:[e.jsx("div",{className:"flex h-9 w-9 items-center justify-center rounded-lg bg-violet-500/10",children:e.jsx(b,{className:"h-5 w-5 text-violet-500"})}),t("capabilities.title","Capability Registry")]}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:t("capabilities.subtitle","Discover agents by their declared skills and capabilities")})]}),e.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row",children:[e.jsxs("div",{className:"relative flex-1",children:[e.jsx(J,{className:"absolute start-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),e.jsx("input",{type:"text",value:a,onChange:s=>{y(s.target.value),k("")},placeholder:t("capabilities.searchPlaceholder","Search skills..."),className:"h-10 w-full rounded-lg border border-input bg-background ps-9 pe-3 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring","data-testid":"capability-search"})]}),e.jsxs("select",{value:w,onChange:s=>_(s.target.value),className:"h-10 rounded-lg border border-input bg-background px-3 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring","data-testid":"capability-strategy",children:[e.jsx("option",{value:"highest_confidence",children:t("capabilities.strategyHighest","Highest Confidence")}),e.jsx("option",{value:"all",children:t("capabilities.strategyAll","All Matches")})]})]}),e.jsxs("section",{children:[e.jsxs("h2",{className:"mb-3 flex items-center gap-2 text-sm font-semibold text-foreground",children:[e.jsx(b,{className:"h-4 w-4 text-violet-500"}),t("capabilities.registryOverview","Registry Overview"),i&&e.jsxs("span",{className:"rounded-full bg-primary/10 px-2 py-0.5 text-[10px] text-primary",children:[i.length," ",t("capabilities.skills","skills")]})]}),(p||h)&&e.jsx("div",{className:"flex items-center justify-center py-12",children:e.jsx(O,{className:"h-6 w-6 animate-spin text-primary"})}),o&&e.jsxs("div",{className:"flex flex-col items-center justify-center rounded-xl border border-destructive/30 bg-destructive/5 py-8",children:[e.jsx(j,{className:"h-8 w-8 text-destructive"}),e.jsx("p",{className:"mt-2 text-sm text-destructive",children:t("common.error")}),e.jsx("button",{onClick:()=>q(),className:"mt-2 text-xs text-primary hover:underline",children:t("common.retry")})]}),!o&&B&&e.jsxs("div",{className:"flex flex-col items-center justify-center rounded-xl border border-amber-500/30 bg-amber-500/5 py-4",children:[e.jsx(j,{className:"h-6 w-6 text-amber-500"}),e.jsx("p",{className:"mt-1.5 text-xs text-amber-700 dark:text-amber-300",children:t("capabilities.partialError","Some skill queries failed")}),e.jsx("button",{onClick:()=>G(),className:"mt-1.5 text-xs text-primary hover:underline",children:t("common.retry")})]}),!p&&!h&&!o&&f.length>0&&e.jsxs("div",{className:"overflow-hidden rounded-xl border border-border","data-testid":"registry-table",children:[e.jsxs("div",{className:"grid grid-cols-[1fr_100px_120px] gap-2 border-b border-border bg-muted/50 px-4 py-2.5",children:[e.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",children:t("capabilities.skillName","Skill")}),e.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground text-center",children:t("capabilities.agentCount","Agents")}),e.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground text-center",children:t("capabilities.confidence","Confidence")})]}),f.map(s=>{const l=A===s.skill,x=s.matches.filter(r=>r.confidence==="high").length,u=s.matches.filter(r=>r.confidence==="medium").length,$=s.matches.filter(r=>r.confidence==="low").length;return e.jsxs("div",{children:[e.jsxs("button",{type:"button",onClick:()=>D(l?null:s.skill),className:"grid w-full grid-cols-[1fr_100px_120px] gap-2 px-4 py-3 text-start transition-colors hover:bg-secondary/50","data-testid":`registry-row-${s.skill}`,children:[e.jsxs("div",{className:"flex items-center gap-2",children:[l?e.jsx(K,{className:"h-3.5 w-3.5 text-muted-foreground shrink-0"}):e.jsx(Q,{className:"h-3.5 w-3.5 text-muted-foreground shrink-0"}),e.jsx("span",{className:"text-xs font-medium text-foreground",children:s.skill})]}),e.jsx("div",{className:"flex items-center justify-center",children:e.jsx("span",{className:"rounded-full bg-primary/10 px-2 py-0.5 text-[11px] font-semibold text-primary",children:s.matches.length})}),e.jsxs("div",{className:"flex items-center justify-center gap-1",children:[x>0&&e.jsxs("span",{className:d("rounded-full border px-1.5 py-0.5 text-[9px] font-semibold",m.high),children:[x,"H"]}),u>0&&e.jsxs("span",{className:d("rounded-full border px-1.5 py-0.5 text-[9px] font-semibold",m.medium),children:[u,"M"]}),$>0&&e.jsxs("span",{className:d("rounded-full border px-1.5 py-0.5 text-[9px] font-semibold",m.low),children:[$,"L"]})]})]}),l&&e.jsx("div",{className:"border-t border-border bg-muted/30 px-4 py-3 space-y-2","data-testid":`registry-expanded-${s.skill}`,children:s.matches.length===0?e.jsx("p",{className:"text-xs text-muted-foreground",children:t("capabilities.noMatches","No agents found for this skill")}):s.matches.map((r,P)=>e.jsxs("div",{className:"flex items-center gap-3 rounded-lg border border-border bg-card p-2.5",children:[e.jsx(N,{className:"h-4 w-4 text-primary shrink-0"}),e.jsxs(R,{to:`/manage/agentview/${r.agentId}`,className:"text-xs font-medium text-foreground hover:text-primary transition-colors flex items-center gap-1",children:[r.agentId,e.jsx(I,{className:"h-3 w-3 opacity-40"})]}),e.jsx("span",{className:d("rounded-full border px-2 py-0.5 text-[10px] font-semibold ms-auto",m[r.confidence]??"bg-muted text-muted-foreground"),children:r.confidence}),r.attributes&&Object.keys(r.attributes).length>0&&e.jsx("div",{className:"flex flex-wrap gap-1",children:Object.entries(r.attributes).map(([M,F])=>e.jsxs("span",{className:"rounded bg-muted px-1.5 py-0.5 text-[10px] text-muted-foreground",children:[M,"=",F]},M))})]},`${r.agentId}-${P}`))})]},s.skill)})]}),!p&&!h&&!o&&f.length===0&&a.trim()&&e.jsx("p",{className:"text-sm text-muted-foreground py-4",children:t("capabilities.noSkills","No skills found")})]}),e.jsxs("div",{children:[e.jsxs("h2",{className:"mb-3 flex items-center gap-2 text-sm font-semibold text-foreground",children:[e.jsx(Z,{className:"h-4 w-4 text-primary"}),t("capabilities.registeredSkills","Registered Skills"),i&&e.jsx("span",{className:"rounded-full bg-primary/10 px-2 py-0.5 text-[10px] text-primary",children:i.length})]}),!p&&!o&&i&&e.jsx("div",{className:"flex flex-wrap gap-2","data-testid":"skills-grid",children:E.length===0?e.jsx("p",{className:"text-sm text-muted-foreground",children:t("capabilities.noSkills","No skills found")}):E.map(s=>e.jsx("button",{onClick:()=>{k(s),y(s)},className:d("rounded-full border px-3 py-1.5 text-xs font-medium transition-all",v===s?"border-primary bg-primary text-primary-foreground":"border-border bg-card text-foreground hover:border-primary/30 hover:bg-primary/5"),"data-testid":`skill-${s}`,children:s},s))})]}),S&&e.jsxs("div",{children:[e.jsxs("h2",{className:"mb-3 flex items-center gap-2 text-sm font-semibold text-foreground",children:[e.jsx(N,{className:"h-4 w-4 text-primary"}),t("capabilities.matchingAgents","Matching Agents"),c&&e.jsx("span",{className:"rounded-full bg-primary/10 px-2 py-0.5 text-[10px] text-primary",children:c.length})]}),C&&e.jsx("div",{className:"flex items-center justify-center py-8",children:e.jsx(O,{className:"h-6 w-6 animate-spin text-primary"})}),L&&e.jsxs("div",{className:"flex flex-col items-center justify-center rounded-xl border border-destructive/30 bg-destructive/5 py-8",children:[e.jsx(j,{className:"h-8 w-8 text-destructive"}),e.jsx("p",{className:"mt-2 text-sm text-destructive",children:t("common.error")}),e.jsx("button",{onClick:()=>H(),className:"mt-2 text-xs text-primary hover:underline",children:t("common.retry")})]}),!C&&!L&&c&&e.jsx("div",{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3","data-testid":"capability-results",children:c.length===0?e.jsx("p",{className:"col-span-full text-center py-8 text-sm text-muted-foreground",children:t("capabilities.noMatches","No agents found for this skill")}):c.map((s,l)=>e.jsxs("div",{className:"rounded-xl border border-border bg-card p-4 space-y-3 transition-colors hover:border-primary/20","data-testid":`match-${s.agentId}`,children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(N,{className:"h-4 w-4 text-primary"}),e.jsxs(R,{to:`/manage/agentview/${s.agentId}`,className:"text-sm font-medium text-foreground hover:text-primary transition-colors truncate flex items-center gap-1",children:[s.agentId,e.jsx(I,{className:"h-3 w-3 opacity-40"})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(b,{className:"h-3.5 w-3.5 text-violet-500"}),e.jsx("span",{className:"text-xs text-foreground",children:s.skill})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(ee,{className:"h-3.5 w-3.5 text-muted-foreground"}),e.jsx("span",{className:d("rounded-full border px-2 py-0.5 text-[10px] font-semibold",m[s.confidence]??"bg-muted text-muted-foreground"),children:s.confidence})]}),s.attributes&&Object.keys(s.attributes).length>0&&e.jsx("div",{className:"flex flex-wrap gap-1",children:Object.entries(s.attributes).map(([x,u])=>e.jsxs("span",{className:"rounded bg-muted px-1.5 py-0.5 text-[10px] text-muted-foreground",children:[x,"=",u]},x))})]},`${s.agentId}-${l}`))})]})]})}export{le as CapabilitiesPage}; diff --git a/src/main/resources/META-INF/resources/assets/capabilities-uaGlMF7H.js b/src/main/resources/META-INF/resources/assets/capabilities-uaGlMF7H.js new file mode 100644 index 0000000000..3e61de9b9e --- /dev/null +++ b/src/main/resources/META-INF/resources/assets/capabilities-uaGlMF7H.js @@ -0,0 +1 @@ +import{c as z,r as n,j as e,aM as b,ad as J,a1 as O,av as j,a7 as K,a8 as Q,i as d,ag as U,B as N,h as R,N as I}from"./index-BnLj1hck.js";import{u as V}from"./use-debounce-DMHuVYwD.js";import{u as W,a as X,b as Y}from"./use-capabilities-CXvHDfSO.js";import{T as Z}from"./tag-Cd1R14bi.js";import{G as ee}from"./gauge-ML2DGGDJ.js";import"./useQueries-DZrQsbjS.js";const m=U;function ne(){const{t}=z(),[a,y]=n.useState(""),[v,k]=n.useState(""),[w,_]=n.useState("highest_confidence"),[A,D]=n.useState(null),T=V(a.trim(),400),S=v||T,{data:i,isLoading:p,isError:o,refetch:q}=W(),{data:c,isLoading:C,isError:L,refetch:H}=X(S,w),{registry:g,isLoading:h,isError:B,refetchMatches:G}=Y(),E=n.useMemo(()=>{if(!i)return[];if(!a.trim())return i;const s=a.trim().toLowerCase();return i.filter(l=>l.toLowerCase().includes(s))},[i,a]),f=n.useMemo(()=>{if(!a.trim())return g;const s=a.trim().toLowerCase();return g.filter(l=>l.skill.toLowerCase().includes(s))},[g,a]);return e.jsxs("div",{className:"space-y-6","data-testid":"capabilities-page",children:[e.jsxs("div",{children:[e.jsxs("h1",{className:"flex items-center gap-3 text-2xl font-bold text-foreground",children:[e.jsx("div",{className:"flex h-9 w-9 items-center justify-center rounded-lg bg-violet-500/10",children:e.jsx(b,{className:"h-5 w-5 text-violet-500"})}),t("capabilities.title","Capability Registry")]}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:t("capabilities.subtitle","Discover agents by their declared skills and capabilities")})]}),e.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row",children:[e.jsxs("div",{className:"relative flex-1",children:[e.jsx(J,{className:"absolute start-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),e.jsx("input",{type:"text",value:a,onChange:s=>{y(s.target.value),k("")},placeholder:t("capabilities.searchPlaceholder","Search skills..."),className:"h-10 w-full rounded-lg border border-input bg-background ps-9 pe-3 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring","data-testid":"capability-search"})]}),e.jsxs("select",{value:w,onChange:s=>_(s.target.value),className:"h-10 rounded-lg border border-input bg-background px-3 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring","data-testid":"capability-strategy",children:[e.jsx("option",{value:"highest_confidence",children:t("capabilities.strategyHighest","Highest Confidence")}),e.jsx("option",{value:"all",children:t("capabilities.strategyAll","All Matches")})]})]}),e.jsxs("section",{children:[e.jsxs("h2",{className:"mb-3 flex items-center gap-2 text-sm font-semibold text-foreground",children:[e.jsx(b,{className:"h-4 w-4 text-violet-500"}),t("capabilities.registryOverview","Registry Overview"),i&&e.jsxs("span",{className:"rounded-full bg-primary/10 px-2 py-0.5 text-[10px] text-primary",children:[i.length," ",t("capabilities.skills","skills")]})]}),(p||h)&&e.jsx("div",{className:"flex items-center justify-center py-12",children:e.jsx(O,{className:"h-6 w-6 animate-spin text-primary"})}),o&&e.jsxs("div",{className:"flex flex-col items-center justify-center rounded-xl border border-destructive/30 bg-destructive/5 py-8",children:[e.jsx(j,{className:"h-8 w-8 text-destructive"}),e.jsx("p",{className:"mt-2 text-sm text-destructive",children:t("common.error")}),e.jsx("button",{onClick:()=>q(),className:"mt-2 text-xs text-primary hover:underline",children:t("common.retry")})]}),!o&&B&&e.jsxs("div",{className:"flex flex-col items-center justify-center rounded-xl border border-amber-500/30 bg-amber-500/5 py-4",children:[e.jsx(j,{className:"h-6 w-6 text-amber-500"}),e.jsx("p",{className:"mt-1.5 text-xs text-amber-700 dark:text-amber-300",children:t("capabilities.partialError","Some skill queries failed")}),e.jsx("button",{onClick:()=>G(),className:"mt-1.5 text-xs text-primary hover:underline",children:t("common.retry")})]}),!p&&!h&&!o&&f.length>0&&e.jsxs("div",{className:"overflow-hidden rounded-xl border border-border","data-testid":"registry-table",children:[e.jsxs("div",{className:"grid grid-cols-[1fr_100px_120px] gap-2 border-b border-border bg-muted/50 px-4 py-2.5",children:[e.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",children:t("capabilities.skillName","Skill")}),e.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground text-center",children:t("capabilities.agentCount","Agents")}),e.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground text-center",children:t("capabilities.confidence","Confidence")})]}),f.map(s=>{const l=A===s.skill,x=s.matches.filter(r=>r.confidence==="high").length,u=s.matches.filter(r=>r.confidence==="medium").length,$=s.matches.filter(r=>r.confidence==="low").length;return e.jsxs("div",{children:[e.jsxs("button",{type:"button",onClick:()=>D(l?null:s.skill),className:"grid w-full grid-cols-[1fr_100px_120px] gap-2 px-4 py-3 text-start transition-colors hover:bg-secondary/50","data-testid":`registry-row-${s.skill}`,children:[e.jsxs("div",{className:"flex items-center gap-2",children:[l?e.jsx(K,{className:"h-3.5 w-3.5 text-muted-foreground shrink-0"}):e.jsx(Q,{className:"h-3.5 w-3.5 text-muted-foreground shrink-0"}),e.jsx("span",{className:"text-xs font-medium text-foreground",children:s.skill})]}),e.jsx("div",{className:"flex items-center justify-center",children:e.jsx("span",{className:"rounded-full bg-primary/10 px-2 py-0.5 text-[11px] font-semibold text-primary",children:s.matches.length})}),e.jsxs("div",{className:"flex items-center justify-center gap-1",children:[x>0&&e.jsxs("span",{className:d("rounded-full border px-1.5 py-0.5 text-[9px] font-semibold",m.high),children:[x,"H"]}),u>0&&e.jsxs("span",{className:d("rounded-full border px-1.5 py-0.5 text-[9px] font-semibold",m.medium),children:[u,"M"]}),$>0&&e.jsxs("span",{className:d("rounded-full border px-1.5 py-0.5 text-[9px] font-semibold",m.low),children:[$,"L"]})]})]}),l&&e.jsx("div",{className:"border-t border-border bg-muted/30 px-4 py-3 space-y-2","data-testid":`registry-expanded-${s.skill}`,children:s.matches.length===0?e.jsx("p",{className:"text-xs text-muted-foreground",children:t("capabilities.noMatches","No agents found for this skill")}):s.matches.map((r,P)=>e.jsxs("div",{className:"flex items-center gap-3 rounded-lg border border-border bg-card p-2.5",children:[e.jsx(N,{className:"h-4 w-4 text-primary shrink-0"}),e.jsxs(R,{to:`/manage/agentview/${r.agentId}`,className:"text-xs font-medium text-foreground hover:text-primary transition-colors flex items-center gap-1",children:[r.agentId,e.jsx(I,{className:"h-3 w-3 opacity-40"})]}),e.jsx("span",{className:d("rounded-full border px-2 py-0.5 text-[10px] font-semibold ms-auto",m[r.confidence]??"bg-muted text-muted-foreground"),children:r.confidence}),r.attributes&&Object.keys(r.attributes).length>0&&e.jsx("div",{className:"flex flex-wrap gap-1",children:Object.entries(r.attributes).map(([M,F])=>e.jsxs("span",{className:"rounded bg-muted px-1.5 py-0.5 text-[10px] text-muted-foreground",children:[M,"=",F]},M))})]},`${r.agentId}-${P}`))})]},s.skill)})]}),!p&&!h&&!o&&f.length===0&&a.trim()&&e.jsx("p",{className:"text-sm text-muted-foreground py-4",children:t("capabilities.noSkills","No skills found")})]}),e.jsxs("div",{children:[e.jsxs("h2",{className:"mb-3 flex items-center gap-2 text-sm font-semibold text-foreground",children:[e.jsx(Z,{className:"h-4 w-4 text-primary"}),t("capabilities.registeredSkills","Registered Skills"),i&&e.jsx("span",{className:"rounded-full bg-primary/10 px-2 py-0.5 text-[10px] text-primary",children:i.length})]}),!p&&!o&&i&&e.jsx("div",{className:"flex flex-wrap gap-2","data-testid":"skills-grid",children:E.length===0?e.jsx("p",{className:"text-sm text-muted-foreground",children:t("capabilities.noSkills","No skills found")}):E.map(s=>e.jsx("button",{onClick:()=>{k(s),y(s)},className:d("rounded-full border px-3 py-1.5 text-xs font-medium transition-all",v===s?"border-primary bg-primary text-primary-foreground":"border-border bg-card text-foreground hover:border-primary/30 hover:bg-primary/5"),"data-testid":`skill-${s}`,children:s},s))})]}),S&&e.jsxs("div",{children:[e.jsxs("h2",{className:"mb-3 flex items-center gap-2 text-sm font-semibold text-foreground",children:[e.jsx(N,{className:"h-4 w-4 text-primary"}),t("capabilities.matchingAgents","Matching Agents"),c&&e.jsx("span",{className:"rounded-full bg-primary/10 px-2 py-0.5 text-[10px] text-primary",children:c.length})]}),C&&e.jsx("div",{className:"flex items-center justify-center py-8",children:e.jsx(O,{className:"h-6 w-6 animate-spin text-primary"})}),L&&e.jsxs("div",{className:"flex flex-col items-center justify-center rounded-xl border border-destructive/30 bg-destructive/5 py-8",children:[e.jsx(j,{className:"h-8 w-8 text-destructive"}),e.jsx("p",{className:"mt-2 text-sm text-destructive",children:t("common.error")}),e.jsx("button",{onClick:()=>H(),className:"mt-2 text-xs text-primary hover:underline",children:t("common.retry")})]}),!C&&!L&&c&&e.jsx("div",{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3","data-testid":"capability-results",children:c.length===0?e.jsx("p",{className:"col-span-full text-center py-8 text-sm text-muted-foreground",children:t("capabilities.noMatches","No agents found for this skill")}):c.map((s,l)=>e.jsxs("div",{className:"rounded-xl border border-border bg-card p-4 space-y-3 transition-colors hover:border-primary/20","data-testid":`match-${s.agentId}`,children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(N,{className:"h-4 w-4 text-primary"}),e.jsxs(R,{to:`/manage/agentview/${s.agentId}`,className:"text-sm font-medium text-foreground hover:text-primary transition-colors truncate flex items-center gap-1",children:[s.agentId,e.jsx(I,{className:"h-3 w-3 opacity-40"})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(b,{className:"h-3.5 w-3.5 text-violet-500"}),e.jsx("span",{className:"text-xs text-foreground",children:s.skill})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(ee,{className:"h-3.5 w-3.5 text-muted-foreground"}),e.jsx("span",{className:d("rounded-full border px-2 py-0.5 text-[10px] font-semibold",m[s.confidence]??"bg-muted text-muted-foreground"),children:s.confidence})]}),s.attributes&&Object.keys(s.attributes).length>0&&e.jsx("div",{className:"flex flex-wrap gap-1",children:Object.entries(s.attributes).map(([x,u])=>e.jsxs("span",{className:"rounded bg-muted px-1.5 py-0.5 text-[10px] text-muted-foreground",children:[x,"=",u]},x))})]},`${s.agentId}-${l}`))})]})]})}export{ne as CapabilitiesPage}; diff --git a/src/main/resources/META-INF/resources/assets/card-Blk9R4_z.js b/src/main/resources/META-INF/resources/assets/card-CWHKt0V7.js similarity index 93% rename from src/main/resources/META-INF/resources/assets/card-Blk9R4_z.js rename to src/main/resources/META-INF/resources/assets/card-CWHKt0V7.js index 751313c170..fdbfd5363d 100644 --- a/src/main/resources/META-INF/resources/assets/card-Blk9R4_z.js +++ b/src/main/resources/META-INF/resources/assets/card-CWHKt0V7.js @@ -1 +1 @@ -import{r as s,j as d,i as o}from"./index-BY6d8wze.js";const t=s.forwardRef(({className:a,...e},r)=>d.jsx("div",{ref:r,className:o("rounded-xl border border-border bg-card text-card-foreground shadow-sm",a),...e}));t.displayName="Card";const i=s.forwardRef(({className:a,...e},r)=>d.jsx("div",{ref:r,className:o("flex flex-col space-y-1.5 p-5 pb-0",a),...e}));i.displayName="CardHeader";const c=s.forwardRef(({className:a,...e},r)=>d.jsx("h3",{ref:r,className:o("text-lg font-semibold leading-none tracking-tight",a),...e}));c.displayName="CardTitle";const n=s.forwardRef(({className:a,...e},r)=>d.jsx("p",{ref:r,className:o("text-sm text-muted-foreground",a),...e}));n.displayName="CardDescription";const l=s.forwardRef(({className:a,...e},r)=>d.jsx("div",{ref:r,className:o("p-5",a),...e}));l.displayName="CardContent";const m=s.forwardRef(({className:a,...e},r)=>d.jsx("div",{ref:r,className:o("flex items-center p-5 pt-0",a),...e}));m.displayName="CardFooter";export{t as C,l as a,i as b,c}; +import{r as s,j as d,i as o}from"./index-BnLj1hck.js";const t=s.forwardRef(({className:a,...e},r)=>d.jsx("div",{ref:r,className:o("rounded-xl border border-border bg-card text-card-foreground shadow-sm",a),...e}));t.displayName="Card";const i=s.forwardRef(({className:a,...e},r)=>d.jsx("div",{ref:r,className:o("flex flex-col space-y-1.5 p-5 pb-0",a),...e}));i.displayName="CardHeader";const c=s.forwardRef(({className:a,...e},r)=>d.jsx("h3",{ref:r,className:o("text-lg font-semibold leading-none tracking-tight",a),...e}));c.displayName="CardTitle";const n=s.forwardRef(({className:a,...e},r)=>d.jsx("p",{ref:r,className:o("text-sm text-muted-foreground",a),...e}));n.displayName="CardDescription";const l=s.forwardRef(({className:a,...e},r)=>d.jsx("div",{ref:r,className:o("p-5",a),...e}));l.displayName="CardContent";const m=s.forwardRef(({className:a,...e},r)=>d.jsx("div",{ref:r,className:o("flex items-center p-5 pt-0",a),...e}));m.displayName="CardFooter";export{t as C,l as a,i as b,c}; diff --git a/src/main/resources/META-INF/resources/assets/cascade-save-CAECbCBm.js b/src/main/resources/META-INF/resources/assets/cascade-save-BHTTkwOb.js similarity index 89% rename from src/main/resources/META-INF/resources/assets/cascade-save-CAECbCBm.js rename to src/main/resources/META-INF/resources/assets/cascade-save-BHTTkwOb.js index 22e0b46756..648a36ce5b 100644 --- a/src/main/resources/META-INF/resources/assets/cascade-save-CAECbCBm.js +++ b/src/main/resources/META-INF/resources/assets/cascade-save-BHTTkwOb.js @@ -1 +1 @@ -import{aO as R,aY as m,p as b}from"./index-BY6d8wze.js";import{u as y}from"./resources-R5ikMSzo.js";import{a as v,u as I}from"./workflows-CAxBNXSH.js";async function F(r,s,n,i,o,e){let w;if(e!=null&&e.skipResourceSave)w=n;else{const c=await y(r,s,n,i);w=l(c.location)}if(!o)return{newResourceVersion:w};const a=U(r,s,w),g=await v(o.workflowId,o.workflowVersion),f=W(g,r,s,a),p=await I(o.workflowId,o.workflowVersion,f),t=l(p.location),d=`eddi://ai.labs.workflow/workflowstore/workflows/${o.workflowId}?version=${o.workflowVersion}`,V=`eddi://ai.labs.workflow/workflowstore/workflows/${o.workflowId}?version=${t}`,u=await R(o.agentId,o.agentVersion),$={...u,workflows:(u.workflows??[]).map(c=>c===d?V:c)},k=await m(o.agentId,o.agentVersion,$),A=l(k.location);return{newResourceVersion:w,newWorkflowVersion:t,newAgentVersion:A}}async function L(r,s,n,i,o){const e=U(r,s,i),w=await v(o.workflowId,o.workflowVersion),a=W(w,r,s,e),g=await I(o.workflowId,o.workflowVersion,a),f=l(g.location),p=`eddi://ai.labs.workflow/workflowstore/workflows/${o.workflowId}?version=${o.workflowVersion}`,t=`eddi://ai.labs.workflow/workflowstore/workflows/${o.workflowId}?version=${f}`,d=await R(o.agentId,o.agentVersion),V={...d,workflows:(d.workflows??[]).map(k=>k===p?t:k)},u=await m(o.agentId,o.agentVersion,V),$=l(u.location);return{newWorkflowVersion:f,newAgentVersion:$}}function l(r){const{version:s}=b(r);return s}function U(r,s,n){return`eddi://${r.extension}/${r.store}/${r.plural}/${s}?version=${n}`}function W(r,s,n,i){const o=`/${s.store}/${s.plural}/${n}`;return{...r,workflowSteps:r.workflowSteps.map(e=>{var a;const w=(a=e.config)==null?void 0:a.uri;return typeof w=="string"&&w.includes(o)?{...e,config:{...e.config,uri:i}}:e})}}export{F as a,L as c}; +import{aO as R,aY as m,p as b}from"./index-BnLj1hck.js";import{u as y}from"./resources-D97MNqv3.js";import{a as v,u as I}from"./workflows-DTtF3KEG.js";async function F(r,s,n,i,o,e){let w;if(e!=null&&e.skipResourceSave)w=n;else{const c=await y(r,s,n,i);w=l(c.location)}if(!o)return{newResourceVersion:w};const a=U(r,s,w),g=await v(o.workflowId,o.workflowVersion),f=W(g,r,s,a),p=await I(o.workflowId,o.workflowVersion,f),t=l(p.location),d=`eddi://ai.labs.workflow/workflowstore/workflows/${o.workflowId}?version=${o.workflowVersion}`,V=`eddi://ai.labs.workflow/workflowstore/workflows/${o.workflowId}?version=${t}`,u=await R(o.agentId,o.agentVersion),$={...u,workflows:(u.workflows??[]).map(c=>c===d?V:c)},k=await m(o.agentId,o.agentVersion,$),A=l(k.location);return{newResourceVersion:w,newWorkflowVersion:t,newAgentVersion:A}}async function L(r,s,n,i,o){const e=U(r,s,i),w=await v(o.workflowId,o.workflowVersion),a=W(w,r,s,e),g=await I(o.workflowId,o.workflowVersion,a),f=l(g.location),p=`eddi://ai.labs.workflow/workflowstore/workflows/${o.workflowId}?version=${o.workflowVersion}`,t=`eddi://ai.labs.workflow/workflowstore/workflows/${o.workflowId}?version=${f}`,d=await R(o.agentId,o.agentVersion),V={...d,workflows:(d.workflows??[]).map(k=>k===p?t:k)},u=await m(o.agentId,o.agentVersion,V),$=l(u.location);return{newWorkflowVersion:f,newAgentVersion:$}}function l(r){const{version:s}=b(r);return s}function U(r,s,n){return`eddi://${r.extension}/${r.store}/${r.plural}/${s}?version=${n}`}function W(r,s,n,i){const o=`/${s.store}/${s.plural}/${n}`;return{...r,workflowSteps:r.workflowSteps.map(e=>{var a;const w=(a=e.config)==null?void 0:a.uri;return typeof w=="string"&&w.includes(o)?{...e,config:{...e.config,uri:i}}:e})}}export{F as a,L as c}; diff --git a/src/main/resources/META-INF/resources/assets/channel-detail-CqtQSo7D.js b/src/main/resources/META-INF/resources/assets/channel-detail-CqtQSo7D.js deleted file mode 100644 index 6ee0f1dff5..0000000000 --- a/src/main/resources/META-INF/resources/assets/channel-detail-CqtQSo7D.js +++ /dev/null @@ -1 +0,0 @@ -import{c as P,ap as X,aX as Y,$ as J,r as c,j as e,k as m,a3 as Z,Z as L,an as Q,N as ee,a4 as ae,Y as se,B,P as te,bj as O,a7 as $,ae as ne,_ as T,R as E,b_ as le,a9 as re}from"./index-BY6d8wze.js";import{e as ie,f as oe,b as ce,I as p,C as de,p as me}from"./use-channels-WF2GiCQ0.js";import{E as he}from"./error-state-BXe3bnJT.js";import{R as xe}from"./refetch-error-notice-Dhb_O4GR.js";import{B as N}from"./badge-B8rrdXaB.js";import{S as U}from"./secret-key-picker-TXey-VQE.js";import{S as pe}from"./save-lzTRlOlB.js";import{H as ge}from"./hash-D4WlnmN6.js";import{S as ue}from"./star-cKGUeK0l.js";import"./use-secrets-C_oj4VYh.js";import"./eye-off-DQKzJHI5.js";import"./eye-Dbrf-yrM.js";function fe({target:a,index:d,isDefault:b,onUpdate:h,onRemove:y,onSetDefault:C}){const{t:r}=P(),[g,w]=c.useState(""),[u,D]=c.useState(!0),f=()=>{const l=g.trim().toLowerCase();l&&!a.triggers.includes(l)&&l!=="help"&&(h({...a,triggers:[...a.triggers,l]}),w(""))};return e.jsxs("div",{"data-testid":`target-card-${d}`,className:"rounded-xl border border-border/50 bg-card overflow-hidden",children:[e.jsxs("div",{className:"flex items-center gap-3 px-4 py-3 bg-muted/30 cursor-pointer",onClick:()=>D(!u),children:[e.jsx("div",{className:`flex h-8 w-8 shrink-0 items-center justify-center rounded-lg ${a.type==="GROUP"?"bg-violet-100 text-violet-600 dark:bg-violet-900/30 dark:text-violet-400":"bg-primary/10 text-primary"}`,children:a.type==="GROUP"?e.jsx(le,{className:"h-4 w-4"}):e.jsx(B,{className:"h-4 w-4"})}),e.jsx("div",{className:"flex-1 min-w-0",children:e.jsx("span",{className:"font-medium text-sm truncate",children:a.name||`Target ${d+1}`})}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[b&&e.jsx(N,{className:"text-xs bg-primary/10 text-primary border-primary/20",children:r("channelDetail.isDefault","default")}),a.triggers.length>0&&e.jsxs(N,{variant:"secondary",className:"text-xs",children:[a.triggers.length," ",r("channelDetail.triggers","triggers")]}),u?e.jsx(O,{className:"h-4 w-4 text-muted-foreground"}):e.jsx($,{className:"h-4 w-4 text-muted-foreground"})]})]}),u&&e.jsxs("div",{className:"p-4 space-y-4 border-t border-border/30",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs font-medium",children:r("channelDetail.targetName","Name")}),e.jsx(p,{"data-testid":`target-name-${d}`,className:"h-8 text-sm",value:a.name,onChange:l=>h({...a,name:l.target.value}),placeholder:"e.g. support"})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs font-medium",children:r("channelDetail.targetType","Type")}),e.jsxs("select",{className:"flex h-8 w-full rounded-lg border border-border bg-background px-2 text-sm",value:a.type,onChange:l=>h({...a,type:l.target.value}),children:[e.jsx("option",{value:"AGENT",children:"Agent"}),e.jsx("option",{value:"GROUP",children:"Group"})]})]})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs font-medium",children:a.type==="GROUP"?r("channelDetail.groupId","Group ID"):r("channelDetail.agentId","Agent ID")}),e.jsx(p,{"data-testid":`target-id-${d}`,className:"h-8 text-sm",value:a.targetId,onChange:l=>h({...a,targetId:l.target.value})})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs font-medium",children:r("channelDetail.triggerKeywords","Trigger Keywords")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:r("channelDetail.triggerHint",'Users type "keyword: message" to route to this target')}),e.jsx("div",{className:"flex gap-1.5 flex-wrap",children:a.triggers.map(l=>e.jsxs(N,{variant:"secondary",className:"text-xs gap-1 font-mono",children:[l,":",e.jsx("button",{"aria-label":`Remove ${l}`,onClick:()=>h({...a,triggers:a.triggers.filter(t=>t!==l)}),className:"hover:text-destructive",children:e.jsx(re,{className:"h-3 w-3"})})]},l))}),e.jsxs("div",{className:"flex gap-1",children:[e.jsx(p,{className:"h-7 text-xs",value:g,onChange:l=>w(l.target.value),placeholder:r("channelDetail.addTrigger","Add trigger..."),onKeyDown:l=>l.key==="Enter"&&(l.preventDefault(),f())}),e.jsx(m,{size:"sm",variant:"outline",className:"h-7 text-xs",onClick:f,children:r("common.add","Add")})]})]}),e.jsxs("div",{className:"flex items-center gap-2 pt-2 border-t border-border/30",children:[!b&&e.jsxs(m,{variant:"outline",size:"sm",className:"text-xs gap-1",onClick:C,children:[e.jsx(ue,{className:"h-3 w-3"}),r("channelDetail.setDefault","Set as Default")]}),e.jsxs(m,{variant:"ghost",size:"sm",className:"text-xs text-destructive hover:text-destructive ms-auto gap-1",onClick:y,children:[e.jsx(L,{className:"h-3 w-3"}),r("channelDetail.removeTarget","Remove")]})]})]})]})}function Ie(){const{t:a}=P(),{id:d}=X(),[b,h]=Y(),y=J(),C=Number(b.get("version")??"1"),r=Number.isFinite(C)?C:1,{data:g,isLoading:w,isError:u,refetch:D}=ie(d,r),f=oe(),l=ce(),[t,i]=c.useState(null),[G,S]=c.useState(!1),[k,z]=c.useState(!1),[A,R]=c.useState(!1);c.useEffect(()=>{g&&i({...g})},[g]);const I=`${window.location.origin}/integrations/slack/events`,H=async()=>{if(!(!t||!d))try{const s=await f.mutateAsync({id:d,version:r,config:t}),n=s==null?void 0:s.location;if(n){const{version:o}=me(n);h({version:String(o)},{replace:!0})}T.success(a("channelDetail.saveSuccess","Channel saved"))}catch(s){T.error(E(s))}},_=async()=>{if(d)try{await l.mutateAsync({id:d,version:r}),y("/manage/channels")}catch(s){T.error(E(s))}},q=c.useCallback((s,n)=>{i(o=>{if(!o)return o;const j=[...o.targets],x=j[s];j[s]=n;let{defaultTargetName:v}=o;return x&&x.name===v&&n.name!==x.name&&(v=n.name),{...o,targets:j,defaultTargetName:v}})},[]),M=c.useCallback(s=>{i(n=>{var v;if(!n)return n;const o=n.targets[s],j=n.targets.filter((je,V)=>V!==s);let{defaultTargetName:x}=n;return o&&o.name===x&&(x=((v=j[0])==null?void 0:v.name)??""),{...n,targets:j,defaultTargetName:x}})},[]),F=c.useCallback(s=>{i(n=>n&&{...n,defaultTargetName:s})},[]),K=c.useCallback(()=>{i(s=>{if(!s)return s;const n={name:"",type:"AGENT",targetId:"",triggers:[],observeMode:!1,observeConfig:null};return{...s,targets:[...s.targets,n]}})},[]),W=async()=>{await navigator.clipboard.writeText(I),R(!0),setTimeout(()=>R(!1),2e3)};return u&&!t?e.jsx("div",{"data-testid":"channel-detail-error",children:e.jsx(he,{message:a("common.error"),onRetry:()=>D(),retryLabel:a("common.retry")})}):w||!t?e.jsxs("div",{className:"space-y-6","data-testid":"channel-detail-loading",children:[e.jsx("div",{className:"h-8 w-48 bg-muted rounded animate-pulse"}),e.jsx("div",{className:"h-64 bg-muted rounded-xl animate-pulse"})]}):e.jsxs("div",{className:"flex flex-col gap-6 max-w-4xl",children:[u&&t&&e.jsx("div",{"data-testid":"channel-detail-refetch-error",children:e.jsx(xe,{onRetry:()=>D()})}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(m,{variant:"ghost",size:"icon",onClick:()=>y("/manage/channels"),children:e.jsx(Z,{className:"h-4 w-4"})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("h1",{className:"text-xl font-bold tracking-tight truncate",children:t.name||"Untitled Channel"}),e.jsxs("p",{className:"text-xs text-muted-foreground",children:["v",r," · ",t.channelType]})]}),e.jsxs(m,{variant:"outline",size:"sm",className:"text-destructive",onClick:()=>S(!0),"data-testid":"delete-channel-btn",children:[e.jsx(L,{className:"h-4 w-4 me-1"})," ",a("common.delete")]}),e.jsxs(m,{size:"sm",onClick:H,disabled:f.isPending,"data-testid":"save-channel-btn",children:[e.jsx(pe,{className:"h-4 w-4 me-1"})," ",f.isPending?a("common.saving"):a("common.save")]})]}),e.jsxs("section",{className:"rounded-xl border border-border/50 p-5 space-y-4",children:[e.jsxs("h2",{className:"text-sm font-semibold flex items-center gap-2",children:[e.jsx(Q,{className:"h-4 w-4 text-primary"}),a("channelDetail.general","General")]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs font-medium",children:a("channelDetail.name","Name")}),e.jsx(p,{"data-testid":"channel-name-input",value:t.name,onChange:s=>i({...t,name:s.target.value})})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs font-medium",children:a("channelDetail.type","Channel Type")}),e.jsx("select",{"data-testid":"channel-type-select",className:"flex h-9 w-full rounded-lg border border-border bg-background px-3 text-sm",value:t.channelType,onChange:s=>i({...t,channelType:s.target.value}),children:de.map(s=>e.jsx("option",{value:s,children:s.charAt(0).toUpperCase()+s.slice(1)},s))})]})]})]}),e.jsxs("section",{className:"rounded-xl border border-border/50 p-5 space-y-4",children:[e.jsxs("h2",{className:"text-sm font-semibold flex items-center gap-2",children:[e.jsx(ge,{className:"h-4 w-4 text-primary"}),a("channelDetail.platformConfig","Platform Configuration")]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs font-medium",children:a("channelDetail.channelId","Slack Channel ID")}),e.jsx(p,{"data-testid":"channel-id-input",value:t.platformConfig.channelId??"",onChange:s=>i({...t,platformConfig:{...t.platformConfig,channelId:s.target.value}}),placeholder:"C0123ABCDEF"})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs font-medium",children:a("channelDetail.botToken","Bot Token")}),e.jsx(U,{value:t.platformConfig.botToken??"",onChange:s=>i({...t,platformConfig:{...t.platformConfig,botToken:s}}),placeholder:"xoxb-… or ${vault:slack-bot-token}"})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs font-medium",children:a("channelDetail.signingSecret","Signing Secret")}),e.jsx(U,{value:t.platformConfig.signingSecret??"",onChange:s=>i({...t,platformConfig:{...t.platformConfig,signingSecret:s}}),placeholder:"${vault:slack-signing-secret}"})]}),e.jsxs("div",{className:"space-y-3 border-t border-border/50 pt-3",children:[e.jsx("p",{className:"text-xs font-semibold text-muted-foreground",children:a("channelDetail.hitlSection","Human-in-the-Loop Approvals (optional)")}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs font-medium",children:a("channelDetail.hitlApprovalChannel","Approval Channel ID")}),e.jsx(p,{"data-testid":"hitl-approval-channel-input",value:t.platformConfig.hitlApprovalChannel??"",onChange:s=>i({...t,platformConfig:{...t.platformConfig,hitlApprovalChannel:s.target.value}}),placeholder:"C0123ABCDEF"}),e.jsx("p",{className:"text-[10px] text-muted-foreground",children:a("channelDetail.hitlApprovalChannelHint","Slack channel that receives an approval card when a conversation pauses.")})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs font-medium",children:a("channelDetail.hitlApproverUserIds","Approver User IDs")}),e.jsx(p,{"data-testid":"hitl-approver-ids-input",value:t.platformConfig.hitlApproverUserIds??"",onChange:s=>i({...t,platformConfig:{...t.platformConfig,hitlApproverUserIds:s.target.value}}),placeholder:"U012ABC,U345DEF"}),e.jsx("p",{className:"text-[10px] text-muted-foreground",children:a("channelDetail.hitlApproverUserIdsHint","Comma-separated Slack user IDs allowed to approve via buttons. Without this list, buttons are not rendered (fail-closed).")})]})]})]})]}),e.jsxs("section",{className:"rounded-xl border border-primary/20 bg-primary/5 p-5 space-y-3",children:[e.jsxs("h2",{className:"text-sm font-semibold flex items-center gap-2",children:[e.jsx(ee,{className:"h-4 w-4 text-primary"}),a("channelDetail.webhookUrl","Webhook URL")]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("channelDetail.webhookHint","Paste this URL into your Slack App's Event Subscriptions → Request URL field.")}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("code",{className:"flex-1 rounded-lg bg-background border border-border px-3 py-2 text-xs font-mono truncate",children:I}),e.jsxs(m,{size:"sm",variant:"outline",className:"gap-1 shrink-0",onClick:W,children:[A?e.jsx(ae,{className:"h-3.5 w-3.5 text-green-500"}):e.jsx(se,{className:"h-3.5 w-3.5"}),a(A?"common.copied":"common.copy")]})]}),e.jsxs("div",{className:"text-xs text-muted-foreground space-y-1",children:[e.jsx("p",{className:"font-medium",children:a("channelDetail.requiredScopes","Required Bot Token Scopes:")}),e.jsx("div",{className:"flex flex-wrap gap-1",children:["app_mentions:read","chat:write","im:history","channels:history","groups:history"].map(s=>e.jsx(N,{variant:"outline",className:"text-xs font-mono",children:s},s))}),e.jsx("p",{className:"font-medium mt-2",children:a("channelDetail.requiredEvents","Required Event Subscriptions:")}),e.jsx("div",{className:"flex flex-wrap gap-1",children:["app_mention","message.channels","message.groups","message.im"].map(s=>e.jsx(N,{variant:"outline",className:"text-xs font-mono",children:s},s))})]})]}),e.jsxs("section",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("h2",{className:"text-sm font-semibold flex items-center gap-2",children:[e.jsx(B,{className:"h-4 w-4 text-primary"}),a("channelDetail.targets","Message Routing Targets")]}),e.jsxs(m,{size:"sm",variant:"outline",className:"gap-1",onClick:K,"data-testid":"add-target-btn",children:[e.jsx(te,{className:"h-3.5 w-3.5"})," ",a("channelDetail.addTarget","Add Target")]})]}),e.jsx("div",{className:"space-y-3",children:t.targets.map((s,n)=>e.jsx(fe,{target:s,index:n,isDefault:t.defaultTargetName===s.name,onUpdate:o=>q(n,o),onRemove:()=>M(n),onSetDefault:()=>{s.name&&F(s.name)}},n))})]}),e.jsxs("section",{className:"rounded-xl border border-border/50 overflow-hidden",children:[e.jsxs("button",{className:"w-full flex items-center justify-between px-5 py-3 text-sm font-medium hover:bg-muted/30 transition-colors",onClick:()=>z(!k),children:[a("channelDetail.rawConfig","Raw Configuration"),k?e.jsx(O,{className:"h-4 w-4"}):e.jsx($,{className:"h-4 w-4"})]}),k&&e.jsx("div",{className:"border-t border-border/30 p-4",children:e.jsx("pre",{className:"text-xs font-mono bg-muted/30 p-4 rounded-lg overflow-auto max-h-96",children:JSON.stringify(t,null,2)})})]}),e.jsx(ne,{open:G,onOpenChange:S,title:a("channels.confirmDelete","Delete channel?"),description:a("channels.confirmDeleteDesc","This will permanently remove this channel integration."),onConfirm:_,confirmLabel:a("common.delete"),cancelLabel:a("common.cancel"),isPending:l.isPending})]})}export{Ie as ChannelDetailPage}; diff --git a/src/main/resources/META-INF/resources/assets/channel-detail-DsbdOxGv.js b/src/main/resources/META-INF/resources/assets/channel-detail-DsbdOxGv.js new file mode 100644 index 0000000000..70ac742f09 --- /dev/null +++ b/src/main/resources/META-INF/resources/assets/channel-detail-DsbdOxGv.js @@ -0,0 +1 @@ +import{c as P,ap as X,aX as Y,$ as J,r as c,j as e,k as m,a3 as Z,Z as L,an as Q,N as ee,a4 as ae,Y as se,B as $,P as te,bj as B,a7 as O,ae as ne,_ as T,R as E,b$ as re,a9 as le}from"./index-BnLj1hck.js";import{e as ie,f as oe,b as ce,C as de,p as me}from"./use-channels-Bw9MmTUU.js";import{E as he}from"./error-state-D4qtZYFq.js";import{R as xe}from"./refetch-error-notice-G50zNkPl.js";import{I as p}from"./input-BV8V9kav.js";import{B as N}from"./badge-C2HqoOk5.js";import{S as U}from"./secret-key-picker-BCXXdOJ-.js";import{S as pe}from"./save-s-dFqxLL.js";import{H as ge}from"./hash-MmAVnsbH.js";import{S as ue}from"./star-BSD3Ddvs.js";import"./use-secrets--RofX_r2.js";import"./eye-off-PKiH0Asw.js";import"./eye-xZR8Jj8Y.js";function fe({target:a,index:d,isDefault:b,onUpdate:h,onRemove:y,onSetDefault:C}){const{t:l}=P(),[g,w]=c.useState(""),[u,D]=c.useState(!0),f=()=>{const r=g.trim().toLowerCase();r&&!a.triggers.includes(r)&&r!=="help"&&(h({...a,triggers:[...a.triggers,r]}),w(""))};return e.jsxs("div",{"data-testid":`target-card-${d}`,className:"rounded-xl border border-border/50 bg-card overflow-hidden",children:[e.jsxs("div",{className:"flex items-center gap-3 px-4 py-3 bg-muted/30 cursor-pointer",onClick:()=>D(!u),children:[e.jsx("div",{className:`flex h-8 w-8 shrink-0 items-center justify-center rounded-lg ${a.type==="GROUP"?"bg-violet-100 text-violet-600 dark:bg-violet-900/30 dark:text-violet-400":"bg-primary/10 text-primary"}`,children:a.type==="GROUP"?e.jsx(re,{className:"h-4 w-4"}):e.jsx($,{className:"h-4 w-4"})}),e.jsx("div",{className:"flex-1 min-w-0",children:e.jsx("span",{className:"font-medium text-sm truncate",children:a.name||`Target ${d+1}`})}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[b&&e.jsx(N,{className:"text-xs bg-primary/10 text-primary border-primary/20",children:l("channelDetail.isDefault","default")}),a.triggers.length>0&&e.jsxs(N,{variant:"secondary",className:"text-xs",children:[a.triggers.length," ",l("channelDetail.triggers","triggers")]}),u?e.jsx(B,{className:"h-4 w-4 text-muted-foreground"}):e.jsx(O,{className:"h-4 w-4 text-muted-foreground"})]})]}),u&&e.jsxs("div",{className:"p-4 space-y-4 border-t border-border/30",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs font-medium",children:l("channelDetail.targetName","Name")}),e.jsx(p,{"data-testid":`target-name-${d}`,className:"h-8 text-sm",value:a.name,onChange:r=>h({...a,name:r.target.value}),placeholder:"e.g. support"})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs font-medium",children:l("channelDetail.targetType","Type")}),e.jsxs("select",{className:"flex h-8 w-full rounded-lg border border-border bg-background px-2 text-sm",value:a.type,onChange:r=>h({...a,type:r.target.value}),children:[e.jsx("option",{value:"AGENT",children:"Agent"}),e.jsx("option",{value:"GROUP",children:"Group"})]})]})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs font-medium",children:a.type==="GROUP"?l("channelDetail.groupId","Group ID"):l("channelDetail.agentId","Agent ID")}),e.jsx(p,{"data-testid":`target-id-${d}`,className:"h-8 text-sm",value:a.targetId,onChange:r=>h({...a,targetId:r.target.value})})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs font-medium",children:l("channelDetail.triggerKeywords","Trigger Keywords")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:l("channelDetail.triggerHint",'Users type "keyword: message" to route to this target')}),e.jsx("div",{className:"flex gap-1.5 flex-wrap",children:a.triggers.map(r=>e.jsxs(N,{variant:"secondary",className:"text-xs gap-1 font-mono",children:[r,":",e.jsx("button",{"aria-label":`Remove ${r}`,onClick:()=>h({...a,triggers:a.triggers.filter(t=>t!==r)}),className:"hover:text-destructive",children:e.jsx(le,{className:"h-3 w-3"})})]},r))}),e.jsxs("div",{className:"flex gap-1",children:[e.jsx(p,{className:"h-7 text-xs",value:g,onChange:r=>w(r.target.value),placeholder:l("channelDetail.addTrigger","Add trigger..."),onKeyDown:r=>r.key==="Enter"&&(r.preventDefault(),f())}),e.jsx(m,{size:"sm",variant:"outline",className:"h-7 text-xs",onClick:f,children:l("common.add","Add")})]})]}),e.jsxs("div",{className:"flex items-center gap-2 pt-2 border-t border-border/30",children:[!b&&e.jsxs(m,{variant:"outline",size:"sm",className:"text-xs gap-1",onClick:C,children:[e.jsx(ue,{className:"h-3 w-3"}),l("channelDetail.setDefault","Set as Default")]}),e.jsxs(m,{variant:"ghost",size:"sm",className:"text-xs text-destructive hover:text-destructive ms-auto gap-1",onClick:y,children:[e.jsx(L,{className:"h-3 w-3"}),l("channelDetail.removeTarget","Remove")]})]})]})]})}function Ee(){const{t:a}=P(),{id:d}=X(),[b,h]=Y(),y=J(),C=Number(b.get("version")??"1"),l=Number.isFinite(C)?C:1,{data:g,isLoading:w,isError:u,refetch:D}=ie(d,l),f=oe(),r=ce(),[t,i]=c.useState(null),[G,S]=c.useState(!1),[k,z]=c.useState(!1),[A,R]=c.useState(!1);c.useEffect(()=>{g&&i({...g})},[g]);const I=`${window.location.origin}/integrations/slack/events`,H=async()=>{if(!(!t||!d))try{const s=await f.mutateAsync({id:d,version:l,config:t}),n=s==null?void 0:s.location;if(n){const{version:o}=me(n);h({version:String(o)},{replace:!0})}T.success(a("channelDetail.saveSuccess","Channel saved"))}catch(s){T.error(E(s))}},q=async()=>{if(d)try{await r.mutateAsync({id:d,version:l}),y("/manage/channels")}catch(s){T.error(E(s))}},M=c.useCallback((s,n)=>{i(o=>{if(!o)return o;const j=[...o.targets],x=j[s];j[s]=n;let{defaultTargetName:v}=o;return x&&x.name===v&&n.name!==x.name&&(v=n.name),{...o,targets:j,defaultTargetName:v}})},[]),_=c.useCallback(s=>{i(n=>{var v;if(!n)return n;const o=n.targets[s],j=n.targets.filter((je,V)=>V!==s);let{defaultTargetName:x}=n;return o&&o.name===x&&(x=((v=j[0])==null?void 0:v.name)??""),{...n,targets:j,defaultTargetName:x}})},[]),F=c.useCallback(s=>{i(n=>n&&{...n,defaultTargetName:s})},[]),K=c.useCallback(()=>{i(s=>{if(!s)return s;const n={name:"",type:"AGENT",targetId:"",triggers:[],observeMode:!1,observeConfig:null};return{...s,targets:[...s.targets,n]}})},[]),W=async()=>{await navigator.clipboard.writeText(I),R(!0),setTimeout(()=>R(!1),2e3)};return u&&!t?e.jsx("div",{"data-testid":"channel-detail-error",children:e.jsx(he,{message:a("common.error"),onRetry:()=>D(),retryLabel:a("common.retry")})}):w||!t?e.jsxs("div",{className:"space-y-6","data-testid":"channel-detail-loading",children:[e.jsx("div",{className:"h-8 w-48 bg-muted rounded animate-pulse"}),e.jsx("div",{className:"h-64 bg-muted rounded-xl animate-pulse"})]}):e.jsxs("div",{className:"flex flex-col gap-6 max-w-4xl",children:[u&&t&&e.jsx("div",{"data-testid":"channel-detail-refetch-error",children:e.jsx(xe,{onRetry:()=>D()})}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(m,{variant:"ghost",size:"icon",onClick:()=>y("/manage/channels"),children:e.jsx(Z,{className:"h-4 w-4"})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("h1",{className:"text-xl font-bold tracking-tight truncate",children:t.name||"Untitled Channel"}),e.jsxs("p",{className:"text-xs text-muted-foreground",children:["v",l," · ",t.channelType]})]}),e.jsxs(m,{variant:"outline",size:"sm",className:"text-destructive",onClick:()=>S(!0),"data-testid":"delete-channel-btn",children:[e.jsx(L,{className:"h-4 w-4 me-1"})," ",a("common.delete")]}),e.jsxs(m,{size:"sm",onClick:H,disabled:f.isPending,"data-testid":"save-channel-btn",children:[e.jsx(pe,{className:"h-4 w-4 me-1"})," ",f.isPending?a("common.saving"):a("common.save")]})]}),e.jsxs("section",{className:"rounded-xl border border-border/50 p-5 space-y-4",children:[e.jsxs("h2",{className:"text-sm font-semibold flex items-center gap-2",children:[e.jsx(Q,{className:"h-4 w-4 text-primary"}),a("channelDetail.general","General")]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs font-medium",children:a("channelDetail.name","Name")}),e.jsx(p,{"data-testid":"channel-name-input",value:t.name,onChange:s=>i({...t,name:s.target.value})})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs font-medium",children:a("channelDetail.type","Channel Type")}),e.jsx("select",{"data-testid":"channel-type-select",className:"flex h-9 w-full rounded-lg border border-border bg-background px-3 text-sm",value:t.channelType,onChange:s=>i({...t,channelType:s.target.value}),children:de.map(s=>e.jsx("option",{value:s,children:s.charAt(0).toUpperCase()+s.slice(1)},s))})]})]})]}),e.jsxs("section",{className:"rounded-xl border border-border/50 p-5 space-y-4",children:[e.jsxs("h2",{className:"text-sm font-semibold flex items-center gap-2",children:[e.jsx(ge,{className:"h-4 w-4 text-primary"}),a("channelDetail.platformConfig","Platform Configuration")]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs font-medium",children:a("channelDetail.channelId","Slack Channel ID")}),e.jsx(p,{"data-testid":"channel-id-input",value:t.platformConfig.channelId??"",onChange:s=>i({...t,platformConfig:{...t.platformConfig,channelId:s.target.value}}),placeholder:"C0123ABCDEF"})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs font-medium",children:a("channelDetail.botToken","Bot Token")}),e.jsx(U,{value:t.platformConfig.botToken??"",onChange:s=>i({...t,platformConfig:{...t.platformConfig,botToken:s}}),placeholder:"xoxb-… or ${vault:slack-bot-token}"})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs font-medium",children:a("channelDetail.signingSecret","Signing Secret")}),e.jsx(U,{value:t.platformConfig.signingSecret??"",onChange:s=>i({...t,platformConfig:{...t.platformConfig,signingSecret:s}}),placeholder:"${vault:slack-signing-secret}"})]}),e.jsxs("div",{className:"space-y-3 border-t border-border/50 pt-3",children:[e.jsx("p",{className:"text-xs font-semibold text-muted-foreground",children:a("channelDetail.hitlSection","Human-in-the-Loop Approvals (optional)")}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs font-medium",children:a("channelDetail.hitlApprovalChannel","Approval Channel ID")}),e.jsx(p,{"data-testid":"hitl-approval-channel-input",value:t.platformConfig.hitlApprovalChannel??"",onChange:s=>i({...t,platformConfig:{...t.platformConfig,hitlApprovalChannel:s.target.value}}),placeholder:"C0123ABCDEF"}),e.jsx("p",{className:"text-[10px] text-muted-foreground",children:a("channelDetail.hitlApprovalChannelHint","Slack channel that receives an approval card when a conversation pauses.")})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-xs font-medium",children:a("channelDetail.hitlApproverUserIds","Approver User IDs")}),e.jsx(p,{"data-testid":"hitl-approver-ids-input",value:t.platformConfig.hitlApproverUserIds??"",onChange:s=>i({...t,platformConfig:{...t.platformConfig,hitlApproverUserIds:s.target.value}}),placeholder:"U012ABC,U345DEF"}),e.jsx("p",{className:"text-[10px] text-muted-foreground",children:a("channelDetail.hitlApproverUserIdsHint","Comma-separated Slack user IDs allowed to approve via buttons. Without this list, buttons are not rendered (fail-closed).")})]})]})]})]}),e.jsxs("section",{className:"rounded-xl border border-primary/20 bg-primary/5 p-5 space-y-3",children:[e.jsxs("h2",{className:"text-sm font-semibold flex items-center gap-2",children:[e.jsx(ee,{className:"h-4 w-4 text-primary"}),a("channelDetail.webhookUrl","Webhook URL")]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("channelDetail.webhookHint","Paste this URL into your Slack App's Event Subscriptions → Request URL field.")}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("code",{className:"flex-1 rounded-lg bg-background border border-border px-3 py-2 text-xs font-mono truncate",children:I}),e.jsxs(m,{size:"sm",variant:"outline",className:"gap-1 shrink-0",onClick:W,children:[A?e.jsx(ae,{className:"h-3.5 w-3.5 text-green-500"}):e.jsx(se,{className:"h-3.5 w-3.5"}),a(A?"common.copied":"common.copy")]})]}),e.jsxs("div",{className:"text-xs text-muted-foreground space-y-1",children:[e.jsx("p",{className:"font-medium",children:a("channelDetail.requiredScopes","Required Bot Token Scopes:")}),e.jsx("div",{className:"flex flex-wrap gap-1",children:["app_mentions:read","chat:write","im:history","channels:history","groups:history"].map(s=>e.jsx(N,{variant:"outline",className:"text-xs font-mono",children:s},s))}),e.jsx("p",{className:"font-medium mt-2",children:a("channelDetail.requiredEvents","Required Event Subscriptions:")}),e.jsx("div",{className:"flex flex-wrap gap-1",children:["app_mention","message.channels","message.groups","message.im"].map(s=>e.jsx(N,{variant:"outline",className:"text-xs font-mono",children:s},s))})]})]}),e.jsxs("section",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("h2",{className:"text-sm font-semibold flex items-center gap-2",children:[e.jsx($,{className:"h-4 w-4 text-primary"}),a("channelDetail.targets","Message Routing Targets")]}),e.jsxs(m,{size:"sm",variant:"outline",className:"gap-1",onClick:K,"data-testid":"add-target-btn",children:[e.jsx(te,{className:"h-3.5 w-3.5"})," ",a("channelDetail.addTarget","Add Target")]})]}),e.jsx("div",{className:"space-y-3",children:t.targets.map((s,n)=>e.jsx(fe,{target:s,index:n,isDefault:t.defaultTargetName===s.name,onUpdate:o=>M(n,o),onRemove:()=>_(n),onSetDefault:()=>{s.name&&F(s.name)}},n))})]}),e.jsxs("section",{className:"rounded-xl border border-border/50 overflow-hidden",children:[e.jsxs("button",{className:"w-full flex items-center justify-between px-5 py-3 text-sm font-medium hover:bg-muted/30 transition-colors",onClick:()=>z(!k),children:[a("channelDetail.rawConfig","Raw Configuration"),k?e.jsx(B,{className:"h-4 w-4"}):e.jsx(O,{className:"h-4 w-4"})]}),k&&e.jsx("div",{className:"border-t border-border/30 p-4",children:e.jsx("pre",{className:"text-xs font-mono bg-muted/30 p-4 rounded-lg overflow-auto max-h-96",children:JSON.stringify(t,null,2)})})]}),e.jsx(ne,{open:G,onOpenChange:S,title:a("channels.confirmDelete","Delete channel?"),description:a("channels.confirmDeleteDesc","This will permanently remove this channel integration."),onConfirm:q,confirmLabel:a("common.delete"),cancelLabel:a("common.cancel"),isPending:r.isPending})]})}export{Ee as ChannelDetailPage}; diff --git a/src/main/resources/META-INF/resources/assets/channels-BTgb4FTZ.js b/src/main/resources/META-INF/resources/assets/channels-BTgb4FTZ.js new file mode 100644 index 0000000000..67c44ecf61 --- /dev/null +++ b/src/main/resources/META-INF/resources/assets/channels-BTgb4FTZ.js @@ -0,0 +1 @@ +import{c as $,$ as F,j as e,an as z,k as v,Y as U,Z as _,B as Y,b$ as K,r as i,av as G,b2 as q,a8 as Z,_ as J,R as Q,P as W,N as X,ad as ee,ae}from"./index-BnLj1hck.js";import{I as P}from"./input-BV8V9kav.js";import{B}from"./badge-C2HqoOk5.js";import{g as se,V as te,s as ne}from"./view-mode-DguClt6l.js";import{E as re}from"./empty-state-DxZE48rx.js";import{E as le}from"./error-state-D4qtZYFq.js";import{H as ce}from"./hash-MmAVnsbH.js";import{S as H}from"./secret-key-picker-BCXXdOJ-.js";import{u as ie,C as oe,c as de,a as me,b as he,d as xe}from"./use-channels-Bw9MmTUU.js";import"./layout-grid-DZHuDrOW.js";import"./list-Dqf28LSX.js";import"./use-secrets--RofX_r2.js";import"./eye-off-PKiH0Asw.js";import"./eye-xZR8Jj8Y.js";function ge({className:a}){return e.jsx("svg",{className:a,viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",children:e.jsx("path",{d:"M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zM18.956 8.834a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zm-1.27 0a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.163 0a2.528 2.528 0 0 1 2.523 2.522v6.312zM15.163 18.956a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.163 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zm0-1.27a2.527 2.527 0 0 1-2.52-2.523 2.527 2.527 0 0 1 2.52-2.52h6.315A2.528 2.528 0 0 1 24 15.163a2.528 2.528 0 0 1-2.522 2.523h-6.315z"})})}const M={slack:e.jsx(ge,{className:"h-4 w-4"})},pe={slack:"bg-[#4A154B]/10 text-[#4A154B] dark:bg-[#E01E5A]/10 dark:text-[#E01E5A]"};function ue({channel:a,onDelete:h,onDuplicate:l}){const{t:o}=$(),t=F(),p=a.channelType?a.channelType.charAt(0).toUpperCase()+a.channelType.slice(1):"Unknown";return e.jsxs("div",{"data-testid":`channel-card-${a.id}`,className:"group relative flex flex-col gap-3 rounded-xl border border-border/50 bg-card p-5 transition-all hover:border-primary/30 hover:shadow-lg hover:shadow-primary/5 cursor-pointer",onClick:()=>t(`/manage/channels/${a.id}?version=${a.version}`),role:"button",tabIndex:0,onKeyDown:r=>{(r.key==="Enter"||r.key===" ")&&(r.preventDefault(),t(`/manage/channels/${a.id}?version=${a.version}`))},children:[e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsxs("div",{className:"flex items-center gap-3 min-w-0",children:[e.jsx("div",{className:"flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-primary/10 text-primary",children:M[a.channelType]??e.jsx(z,{className:"h-5 w-5"})}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("h3",{className:"font-semibold text-foreground truncate leading-tight",children:a.name||o("channels.unnamed","Unnamed Channel")}),a.channelId&&e.jsxs("div",{className:"flex items-center gap-1 text-xs text-muted-foreground mt-0.5",children:[e.jsx(ce,{className:"h-3 w-3"}),e.jsx("span",{className:"font-mono truncate",children:a.channelId})]})]})]}),e.jsxs("div",{className:"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity",children:[e.jsx(v,{variant:"ghost",size:"icon",className:"h-7 w-7",onClick:r=>{r.stopPropagation(),l(a.id,a.version)},title:o("common.duplicate"),children:e.jsx(U,{className:"h-3.5 w-3.5"})}),e.jsx(v,{variant:"ghost",size:"icon",className:"h-7 w-7 text-destructive hover:text-destructive",onClick:r=>{r.stopPropagation(),h(a.id,a.version)},title:o("common.delete"),children:e.jsx(_,{className:"h-3.5 w-3.5"})})]})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-1.5",children:[e.jsxs(B,{variant:"outline",className:`text-xs ${pe[a.channelType]??""}`,children:[M[a.channelType]&&e.jsx("span",{className:"me-1 inline-flex",children:M[a.channelType]}),p]}),e.jsxs(B,{variant:"secondary",className:"text-xs gap-1",children:[e.jsx(Y,{className:"h-3 w-3"}),a.targetCount," ",a.targetCount===1?o("channels.target","target"):o("channels.targets","targets")]})]}),e.jsxs("div",{className:"flex items-center justify-between text-xs text-muted-foreground pt-1 border-t border-border/30",children:[e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(K,{className:"h-3 w-3"}),"v",a.version]}),e.jsx("span",{children:new Date(a.lastModifiedOn).toLocaleDateString()})]})]})}const j=["type","credentials","target"];function fe({open:a,onOpenChange:h,onCreated:l,defaultAgentId:o}){const{t}=$(),p=ie(),[r,u]=i.useState("type"),[x,f]=i.useState(""),[d,S]=i.useState("slack"),[N,A]=i.useState(""),[b,T]=i.useState(""),[g,D]=i.useState(""),[y,I]=i.useState(o??""),C=i.useCallback(()=>{u("type"),f(""),S("slack"),A(""),T(""),D(""),I(o??"")},[o]),s=j.indexOf(r),c=s===0,w=s===j.length-1,k=()=>{switch(r){case"type":return x.trim().length>0;case"credentials":return N.trim().length>0;case"target":return y.trim().length>0}},E=()=>{w||u(j[s+1])},V=()=>{c||u(j[s-1])},O=async()=>{const n={name:x.trim(),channelType:d,platformConfig:{channelId:N.trim(),botToken:b.trim(),signingSecret:g.trim()},targets:[de(y.trim())],defaultTargetName:"default"};try{const m=await p.mutateAsync(n),L=((m==null?void 0:m.location)??"").match(/channels\/([^?]+)/),R=(L==null?void 0:L[1])??"";l==null||l(R),h(!1),C()}catch(m){J.error(Q(m))}};return a?e.jsxs("div",{className:"fixed inset-0 z-50 flex items-center justify-center",onKeyDown:n=>{n.key==="Escape"&&(C(),h(!1))},children:[e.jsx("div",{className:"fixed inset-0 bg-black/50",onClick:()=>{C(),h(!1)}}),e.jsxs("div",{className:"relative z-50 w-full max-w-lg rounded-2xl border border-border bg-card p-6 shadow-2xl mx-4",role:"dialog","aria-modal":"true",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-4",children:[e.jsx(z,{className:"h-5 w-5 text-primary"}),e.jsx("h2",{className:"text-lg font-semibold",children:t("channels.createTitle","Create Channel Integration")})]}),e.jsx("div",{className:"flex items-center justify-center gap-2 py-2 mb-4",children:j.map((n,m)=>e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:`h-2 w-2 rounded-full transition-colors ${m<=s?"bg-primary":"bg-muted"}`}),mf(n.target.value),placeholder:t("channels.namePlaceholder","e.g. Engineering AI Hub"),autoFocus:!0})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"text-sm font-medium text-foreground",children:t("channels.channelType","Channel Type")}),e.jsx("select",{"data-testid":"create-channel-type",className:"flex h-9 w-full rounded-lg border border-border bg-background px-3 py-1 text-sm text-foreground transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary",value:d,onChange:n=>S(n.target.value),children:oe.map(n=>e.jsx("option",{value:n,children:n.charAt(0).toUpperCase()+n.slice(1)},n))})]})]}),r==="credentials"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"text-sm font-medium text-foreground",htmlFor:"create-channel-id",children:t("channels.channelId","Slack Channel ID")}),e.jsx(P,{id:"create-channel-id","data-testid":"create-channel-id",value:N,onChange:n=>A(n.target.value),placeholder:"C0123ABCDEF",autoFocus:!0}),e.jsx("p",{className:"text-xs text-muted-foreground",children:t("channels.channelIdHint","Right-click a Slack channel → View channel details → copy the Channel ID")})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"text-sm font-medium text-foreground",children:t("channels.botToken","Bot Token")}),e.jsx(H,{value:b,onChange:T,placeholder:t("channels.botTokenPlaceholder","xoxb-… or ${vault:slack-bot-token}")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:t("channels.botTokenHint","Bot User OAuth Token. Use a vault reference for security.")})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"text-sm font-medium text-foreground",children:t("channels.signingSecret","Signing Secret")}),e.jsx(H,{value:g,onChange:D,placeholder:t("channels.signingSecretPlaceholder","Hex string or ${vault:slack-signing-secret}")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:t("channels.signingSecretHint","From your Slack App's Basic Information page.")})]})]}),r==="target"&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"rounded-lg border border-amber-200 bg-amber-50 p-3 dark:border-amber-800 dark:bg-amber-950/30",children:e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx(G,{className:"h-4 w-4 text-amber-600 dark:text-amber-400 mt-0.5 shrink-0"}),e.jsx("p",{className:"text-xs text-amber-700 dark:text-amber-300",children:t("channels.defaultTargetHint","The default target handles all messages that don't match a trigger keyword. You can add more targets after creation.")})]})}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"text-sm font-medium text-foreground",htmlFor:"create-target-agent",children:t("channels.defaultAgentId","Default Agent ID")}),e.jsx(P,{id:"create-target-agent","data-testid":"create-target-agent",value:y,onChange:n=>I(n.target.value),placeholder:t("channels.agentIdPlaceholder","Agent ID to handle messages"),autoFocus:!0})]})]})]}),e.jsxs("div",{className:"flex justify-between mt-6",children:[e.jsxs(v,{variant:"outline",onClick:V,disabled:c,className:c?"invisible":"",children:[e.jsx(q,{className:"h-4 w-4 me-1"})," ",t("common.back","Back")]}),w?e.jsx(v,{onClick:O,disabled:!k()||p.isPending,"data-testid":"create-channel-submit",children:p.isPending?t("common.saving","Creating..."):t("channels.create","Create Channel")}):e.jsxs(v,{onClick:E,disabled:!k(),"data-testid":"create-channel-next",children:[t("common.next","Next")," ",e.jsx(Z,{className:"h-4 w-4 ms-1"})]})]})]})]}):null}function ze(){const{t:a}=$(),h=F(),[l,o]=i.useState(""),[t,p]=i.useState(()=>se("channels")),[r,u]=i.useState(!1),[x,f]=i.useState(null),{data:d,isLoading:S,isError:N,refetch:A}=me(),b=he(),T=xe(),g=i.useMemo(()=>{if(!d)return[];if(!l.trim())return d;const s=l.toLowerCase();return d.filter(c=>{var w,k,E;return((w=c.name)==null?void 0:w.toLowerCase().includes(s))||((k=c.channelId)==null?void 0:k.toLowerCase().includes(s))||((E=c.channelType)==null?void 0:E.toLowerCase().includes(s))})},[d,l]),D=(s,c)=>{f({id:s,version:c})},y=async()=>{x&&(await b.mutateAsync({id:x.id,version:x.version}),f(null))},I=(s,c)=>{T.mutate({id:s,version:c})},C=s=>{p(s),ne("channels",s)};return e.jsxs("div",{className:"flex flex-col gap-6",children:[e.jsxs("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",children:[e.jsxs("div",{children:[e.jsxs("h1",{className:"text-2xl font-bold tracking-tight flex items-center gap-2",children:[e.jsx(z,{className:"h-6 w-6 text-primary"}),a("pages.channels.title","Channels")]}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:a("pages.channels.subtitle","Connect agents and groups to messaging platforms like Slack")})]}),e.jsxs(v,{onClick:()=>u(!0),"data-testid":"create-channel-btn",className:"gap-2",children:[e.jsx(W,{className:"h-4 w-4"}),a("channels.create","Create Channel")]})]}),e.jsx("div",{className:"rounded-xl border border-primary/20 bg-primary/5 p-4",children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("div",{className:"flex h-9 w-9 shrink-0 items-center justify-center rounded-lg bg-[#4A154B] text-white",children:e.jsx("svg",{viewBox:"0 0 24 24",fill:"currentColor",className:"h-5 w-5",children:e.jsx("path",{d:"M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zM18.956 8.834a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zm-1.27 0a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.163 0a2.528 2.528 0 0 1 2.523 2.522v6.312zM15.163 18.956a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.163 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zm0-1.27a2.527 2.527 0 0 1-2.52-2.523 2.527 2.527 0 0 1 2.52-2.52h6.315A2.528 2.528 0 0 1 24 15.163a2.528 2.528 0 0 1-2.522 2.523h-6.315z"})})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("h3",{className:"font-semibold text-sm",children:a("channels.slackSetupGuide","Slack Setup Guide")}),e.jsx("p",{className:"text-xs text-muted-foreground mt-0.5",children:a("channels.slackSetupSummary","Create a Slack App, configure Bot Token Scopes (app_mentions:read, chat:write, im:history, channels:history, groups:history), then paste credentials here.")}),e.jsxs("a",{href:"https://api.slack.com/apps",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-1 text-xs text-primary hover:underline mt-1",children:[a("channels.openSlackApps","Open Slack App Dashboard"),e.jsx(X,{className:"h-3 w-3"})]})]})]})}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("div",{className:"relative flex-1 max-w-sm",children:[e.jsx(ee,{className:"absolute start-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),e.jsx(P,{"data-testid":"channel-search",className:"ps-9",placeholder:a("channels.searchPlaceholder","Search channels..."),value:l,onChange:s=>o(s.target.value)})]}),d&&e.jsxs(B,{variant:"secondary",className:"text-xs",children:[g.length," ",g.length===1?a("channels.channel","channel"):a("channels.channelsPlural","channels")]}),e.jsx("div",{className:"ms-auto",children:e.jsx(te,{view:t,onChange:C})})]}),S?e.jsx("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:Array.from({length:3}).map((s,c)=>e.jsx("div",{className:"h-40 rounded-xl border border-border/50 bg-card animate-pulse"},c))}):N&&!d?e.jsx(le,{message:a("common.error","Something went wrong"),onRetry:()=>A(),retryLabel:a("common.retry","Retry")}):g.length===0?e.jsx(re,{icon:z,title:l?a("common.noResults"):a("channels.empty","No channels yet"),description:l?void 0:a("channels.emptyDesc","Create a channel integration to connect agents to Slack."),actionLabel:l?void 0:a("channels.create","Create Channel"),onAction:l?void 0:()=>u(!0)}):t==="card"?e.jsx("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:g.map(s=>e.jsx(ue,{channel:s,onDelete:D,onDuplicate:I},s.id))}):e.jsx("div",{className:"rounded-xl border border-border/50 overflow-hidden",children:e.jsxs("table",{className:"w-full text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b bg-muted/50",children:[e.jsx("th",{className:"text-start px-4 py-3 font-medium",children:a("channels.name","Name")}),e.jsx("th",{className:"text-start px-4 py-3 font-medium",children:a("channels.type","Type")}),e.jsx("th",{className:"text-start px-4 py-3 font-medium",children:a("channels.channelIdCol","Channel ID")}),e.jsx("th",{className:"text-start px-4 py-3 font-medium",children:a("channels.targetsCol","Targets")}),e.jsx("th",{className:"text-end px-4 py-3 font-medium",children:a("channels.version","Version")})]})}),e.jsx("tbody",{children:g.map(s=>e.jsxs("tr",{className:"border-b border-border/30 hover:bg-muted/30 cursor-pointer transition-colors",onClick:()=>h(`/manage/channels/${s.id}?version=${s.version}`),"data-testid":`channel-row-${s.id}`,children:[e.jsx("td",{className:"px-4 py-3 font-medium",children:s.name}),e.jsx("td",{className:"px-4 py-3",children:e.jsx(B,{variant:"outline",className:"text-xs",children:s.channelType})}),e.jsx("td",{className:"px-4 py-3 font-mono text-xs text-muted-foreground",children:s.channelId??"—"}),e.jsx("td",{className:"px-4 py-3",children:s.targetCount}),e.jsxs("td",{className:"px-4 py-3 text-end",children:["v",s.version]})]},s.id))})]})}),e.jsx(fe,{open:r,onOpenChange:u,onCreated:s=>h(`/manage/channels/${s}?version=1`)}),e.jsx(ae,{open:!!x,onOpenChange:()=>f(null),title:a("channels.confirmDelete","Delete channel?"),description:a("channels.confirmDeleteDesc","This will permanently remove this channel integration."),onConfirm:y,confirmLabel:a("common.delete"),cancelLabel:a("common.cancel"),isPending:b.isPending})]})}export{ze as ChannelsPage}; diff --git a/src/main/resources/META-INF/resources/assets/channels-DUqDS1VG.js b/src/main/resources/META-INF/resources/assets/channels-DUqDS1VG.js deleted file mode 100644 index c6e08e8329..0000000000 --- a/src/main/resources/META-INF/resources/assets/channels-DUqDS1VG.js +++ /dev/null @@ -1 +0,0 @@ -import{c as $,$ as F,j as e,an as z,k as v,Y as _,Z as U,B as Y,b_ as K,r as i,av as G,b2 as q,a8 as Z,_ as J,R as Q,P as W,N as X,ad as ee,ae}from"./index-BY6d8wze.js";import{u as se,I as P,C as te,c as ne,a as re,b as le,d as ce}from"./use-channels-WF2GiCQ0.js";import{B}from"./badge-B8rrdXaB.js";import{g as ie,V as oe,s as de}from"./view-mode-TQOH38Sf.js";import{E as me}from"./empty-state-DB7ZSzVv.js";import{E as he}from"./error-state-BXe3bnJT.js";import{H as xe}from"./hash-D4WlnmN6.js";import{S as H}from"./secret-key-picker-TXey-VQE.js";import"./layout-grid-BjGzFSfP.js";import"./list-CX0KxgtB.js";import"./use-secrets-C_oj4VYh.js";import"./eye-off-DQKzJHI5.js";import"./eye-Dbrf-yrM.js";function ge({className:a}){return e.jsx("svg",{className:a,viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",children:e.jsx("path",{d:"M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zM18.956 8.834a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zm-1.27 0a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.163 0a2.528 2.528 0 0 1 2.523 2.522v6.312zM15.163 18.956a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.163 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zm0-1.27a2.527 2.527 0 0 1-2.52-2.523 2.527 2.527 0 0 1 2.52-2.52h6.315A2.528 2.528 0 0 1 24 15.163a2.528 2.528 0 0 1-2.522 2.523h-6.315z"})})}const M={slack:e.jsx(ge,{className:"h-4 w-4"})},pe={slack:"bg-[#4A154B]/10 text-[#4A154B] dark:bg-[#E01E5A]/10 dark:text-[#E01E5A]"};function ue({channel:a,onDelete:h,onDuplicate:l}){const{t:o}=$(),t=F(),p=a.channelType?a.channelType.charAt(0).toUpperCase()+a.channelType.slice(1):"Unknown";return e.jsxs("div",{"data-testid":`channel-card-${a.id}`,className:"group relative flex flex-col gap-3 rounded-xl border border-border/50 bg-card p-5 transition-all hover:border-primary/30 hover:shadow-lg hover:shadow-primary/5 cursor-pointer",onClick:()=>t(`/manage/channels/${a.id}?version=${a.version}`),role:"button",tabIndex:0,onKeyDown:r=>{(r.key==="Enter"||r.key===" ")&&(r.preventDefault(),t(`/manage/channels/${a.id}?version=${a.version}`))},children:[e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsxs("div",{className:"flex items-center gap-3 min-w-0",children:[e.jsx("div",{className:"flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-primary/10 text-primary",children:M[a.channelType]??e.jsx(z,{className:"h-5 w-5"})}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("h3",{className:"font-semibold text-foreground truncate leading-tight",children:a.name||o("channels.unnamed","Unnamed Channel")}),a.channelId&&e.jsxs("div",{className:"flex items-center gap-1 text-xs text-muted-foreground mt-0.5",children:[e.jsx(xe,{className:"h-3 w-3"}),e.jsx("span",{className:"font-mono truncate",children:a.channelId})]})]})]}),e.jsxs("div",{className:"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity",children:[e.jsx(v,{variant:"ghost",size:"icon",className:"h-7 w-7",onClick:r=>{r.stopPropagation(),l(a.id,a.version)},title:o("common.duplicate"),children:e.jsx(_,{className:"h-3.5 w-3.5"})}),e.jsx(v,{variant:"ghost",size:"icon",className:"h-7 w-7 text-destructive hover:text-destructive",onClick:r=>{r.stopPropagation(),h(a.id,a.version)},title:o("common.delete"),children:e.jsx(U,{className:"h-3.5 w-3.5"})})]})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-1.5",children:[e.jsxs(B,{variant:"outline",className:`text-xs ${pe[a.channelType]??""}`,children:[M[a.channelType]&&e.jsx("span",{className:"me-1 inline-flex",children:M[a.channelType]}),p]}),e.jsxs(B,{variant:"secondary",className:"text-xs gap-1",children:[e.jsx(Y,{className:"h-3 w-3"}),a.targetCount," ",a.targetCount===1?o("channels.target","target"):o("channels.targets","targets")]})]}),e.jsxs("div",{className:"flex items-center justify-between text-xs text-muted-foreground pt-1 border-t border-border/30",children:[e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(K,{className:"h-3 w-3"}),"v",a.version]}),e.jsx("span",{children:new Date(a.lastModifiedOn).toLocaleDateString()})]})]})}const j=["type","credentials","target"];function fe({open:a,onOpenChange:h,onCreated:l,defaultAgentId:o}){const{t}=$(),p=se(),[r,u]=i.useState("type"),[x,f]=i.useState(""),[d,S]=i.useState("slack"),[N,A]=i.useState(""),[b,T]=i.useState(""),[g,D]=i.useState(""),[y,I]=i.useState(o??""),C=i.useCallback(()=>{u("type"),f(""),S("slack"),A(""),T(""),D(""),I(o??"")},[o]),s=j.indexOf(r),c=s===0,w=s===j.length-1,k=()=>{switch(r){case"type":return x.trim().length>0;case"credentials":return N.trim().length>0;case"target":return y.trim().length>0}},E=()=>{w||u(j[s+1])},V=()=>{c||u(j[s-1])},O=async()=>{const n={name:x.trim(),channelType:d,platformConfig:{channelId:N.trim(),botToken:b.trim(),signingSecret:g.trim()},targets:[ne(y.trim())],defaultTargetName:"default"};try{const m=await p.mutateAsync(n),L=((m==null?void 0:m.location)??"").match(/channels\/([^?]+)/),R=(L==null?void 0:L[1])??"";l==null||l(R),h(!1),C()}catch(m){J.error(Q(m))}};return a?e.jsxs("div",{className:"fixed inset-0 z-50 flex items-center justify-center",onKeyDown:n=>{n.key==="Escape"&&(C(),h(!1))},children:[e.jsx("div",{className:"fixed inset-0 bg-black/50",onClick:()=>{C(),h(!1)}}),e.jsxs("div",{className:"relative z-50 w-full max-w-lg rounded-2xl border border-border bg-card p-6 shadow-2xl mx-4",role:"dialog","aria-modal":"true",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-4",children:[e.jsx(z,{className:"h-5 w-5 text-primary"}),e.jsx("h2",{className:"text-lg font-semibold",children:t("channels.createTitle","Create Channel Integration")})]}),e.jsx("div",{className:"flex items-center justify-center gap-2 py-2 mb-4",children:j.map((n,m)=>e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:`h-2 w-2 rounded-full transition-colors ${m<=s?"bg-primary":"bg-muted"}`}),mf(n.target.value),placeholder:t("channels.namePlaceholder","e.g. Engineering AI Hub"),autoFocus:!0})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"text-sm font-medium text-foreground",children:t("channels.channelType","Channel Type")}),e.jsx("select",{"data-testid":"create-channel-type",className:"flex h-9 w-full rounded-lg border border-border bg-background px-3 py-1 text-sm text-foreground transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary",value:d,onChange:n=>S(n.target.value),children:te.map(n=>e.jsx("option",{value:n,children:n.charAt(0).toUpperCase()+n.slice(1)},n))})]})]}),r==="credentials"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"text-sm font-medium text-foreground",htmlFor:"create-channel-id",children:t("channels.channelId","Slack Channel ID")}),e.jsx(P,{id:"create-channel-id","data-testid":"create-channel-id",value:N,onChange:n=>A(n.target.value),placeholder:"C0123ABCDEF",autoFocus:!0}),e.jsx("p",{className:"text-xs text-muted-foreground",children:t("channels.channelIdHint","Right-click a Slack channel → View channel details → copy the Channel ID")})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"text-sm font-medium text-foreground",children:t("channels.botToken","Bot Token")}),e.jsx(H,{value:b,onChange:T,placeholder:t("channels.botTokenPlaceholder","xoxb-… or ${vault:slack-bot-token}")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:t("channels.botTokenHint","Bot User OAuth Token. Use a vault reference for security.")})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"text-sm font-medium text-foreground",children:t("channels.signingSecret","Signing Secret")}),e.jsx(H,{value:g,onChange:D,placeholder:t("channels.signingSecretPlaceholder","Hex string or ${vault:slack-signing-secret}")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:t("channels.signingSecretHint","From your Slack App's Basic Information page.")})]})]}),r==="target"&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"rounded-lg border border-amber-200 bg-amber-50 p-3 dark:border-amber-800 dark:bg-amber-950/30",children:e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx(G,{className:"h-4 w-4 text-amber-600 dark:text-amber-400 mt-0.5 shrink-0"}),e.jsx("p",{className:"text-xs text-amber-700 dark:text-amber-300",children:t("channels.defaultTargetHint","The default target handles all messages that don't match a trigger keyword. You can add more targets after creation.")})]})}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"text-sm font-medium text-foreground",htmlFor:"create-target-agent",children:t("channels.defaultAgentId","Default Agent ID")}),e.jsx(P,{id:"create-target-agent","data-testid":"create-target-agent",value:y,onChange:n=>I(n.target.value),placeholder:t("channels.agentIdPlaceholder","Agent ID to handle messages"),autoFocus:!0})]})]})]}),e.jsxs("div",{className:"flex justify-between mt-6",children:[e.jsxs(v,{variant:"outline",onClick:V,disabled:c,className:c?"invisible":"",children:[e.jsx(q,{className:"h-4 w-4 me-1"})," ",t("common.back","Back")]}),w?e.jsx(v,{onClick:O,disabled:!k()||p.isPending,"data-testid":"create-channel-submit",children:p.isPending?t("common.saving","Creating..."):t("channels.create","Create Channel")}):e.jsxs(v,{onClick:E,disabled:!k(),"data-testid":"create-channel-next",children:[t("common.next","Next")," ",e.jsx(Z,{className:"h-4 w-4 ms-1"})]})]})]})]}):null}function Pe(){const{t:a}=$(),h=F(),[l,o]=i.useState(""),[t,p]=i.useState(()=>ie("channels")),[r,u]=i.useState(!1),[x,f]=i.useState(null),{data:d,isLoading:S,isError:N,refetch:A}=re(),b=le(),T=ce(),g=i.useMemo(()=>{if(!d)return[];if(!l.trim())return d;const s=l.toLowerCase();return d.filter(c=>{var w,k,E;return((w=c.name)==null?void 0:w.toLowerCase().includes(s))||((k=c.channelId)==null?void 0:k.toLowerCase().includes(s))||((E=c.channelType)==null?void 0:E.toLowerCase().includes(s))})},[d,l]),D=(s,c)=>{f({id:s,version:c})},y=async()=>{x&&(await b.mutateAsync({id:x.id,version:x.version}),f(null))},I=(s,c)=>{T.mutate({id:s,version:c})},C=s=>{p(s),de("channels",s)};return e.jsxs("div",{className:"flex flex-col gap-6",children:[e.jsxs("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",children:[e.jsxs("div",{children:[e.jsxs("h1",{className:"text-2xl font-bold tracking-tight flex items-center gap-2",children:[e.jsx(z,{className:"h-6 w-6 text-primary"}),a("pages.channels.title","Channels")]}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:a("pages.channels.subtitle","Connect agents and groups to messaging platforms like Slack")})]}),e.jsxs(v,{onClick:()=>u(!0),"data-testid":"create-channel-btn",className:"gap-2",children:[e.jsx(W,{className:"h-4 w-4"}),a("channels.create","Create Channel")]})]}),e.jsx("div",{className:"rounded-xl border border-primary/20 bg-primary/5 p-4",children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("div",{className:"flex h-9 w-9 shrink-0 items-center justify-center rounded-lg bg-[#4A154B] text-white",children:e.jsx("svg",{viewBox:"0 0 24 24",fill:"currentColor",className:"h-5 w-5",children:e.jsx("path",{d:"M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zM18.956 8.834a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zm-1.27 0a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.163 0a2.528 2.528 0 0 1 2.523 2.522v6.312zM15.163 18.956a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.163 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zm0-1.27a2.527 2.527 0 0 1-2.52-2.523 2.527 2.527 0 0 1 2.52-2.52h6.315A2.528 2.528 0 0 1 24 15.163a2.528 2.528 0 0 1-2.522 2.523h-6.315z"})})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("h3",{className:"font-semibold text-sm",children:a("channels.slackSetupGuide","Slack Setup Guide")}),e.jsx("p",{className:"text-xs text-muted-foreground mt-0.5",children:a("channels.slackSetupSummary","Create a Slack App, configure Bot Token Scopes (app_mentions:read, chat:write, im:history, channels:history, groups:history), then paste credentials here.")}),e.jsxs("a",{href:"https://api.slack.com/apps",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-1 text-xs text-primary hover:underline mt-1",children:[a("channels.openSlackApps","Open Slack App Dashboard"),e.jsx(X,{className:"h-3 w-3"})]})]})]})}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("div",{className:"relative flex-1 max-w-sm",children:[e.jsx(ee,{className:"absolute start-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),e.jsx(P,{"data-testid":"channel-search",className:"ps-9",placeholder:a("channels.searchPlaceholder","Search channels..."),value:l,onChange:s=>o(s.target.value)})]}),d&&e.jsxs(B,{variant:"secondary",className:"text-xs",children:[g.length," ",g.length===1?a("channels.channel","channel"):a("channels.channelsPlural","channels")]}),e.jsx("div",{className:"ms-auto",children:e.jsx(oe,{view:t,onChange:C})})]}),S?e.jsx("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:Array.from({length:3}).map((s,c)=>e.jsx("div",{className:"h-40 rounded-xl border border-border/50 bg-card animate-pulse"},c))}):N&&!d?e.jsx(he,{message:a("common.error","Something went wrong"),onRetry:()=>A(),retryLabel:a("common.retry","Retry")}):g.length===0?e.jsx(me,{icon:z,title:l?a("common.noResults"):a("channels.empty","No channels yet"),description:l?void 0:a("channels.emptyDesc","Create a channel integration to connect agents to Slack."),actionLabel:l?void 0:a("channels.create","Create Channel"),onAction:l?void 0:()=>u(!0)}):t==="card"?e.jsx("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:g.map(s=>e.jsx(ue,{channel:s,onDelete:D,onDuplicate:I},s.id))}):e.jsx("div",{className:"rounded-xl border border-border/50 overflow-hidden",children:e.jsxs("table",{className:"w-full text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b bg-muted/50",children:[e.jsx("th",{className:"text-start px-4 py-3 font-medium",children:a("channels.name","Name")}),e.jsx("th",{className:"text-start px-4 py-3 font-medium",children:a("channels.type","Type")}),e.jsx("th",{className:"text-start px-4 py-3 font-medium",children:a("channels.channelIdCol","Channel ID")}),e.jsx("th",{className:"text-start px-4 py-3 font-medium",children:a("channels.targetsCol","Targets")}),e.jsx("th",{className:"text-end px-4 py-3 font-medium",children:a("channels.version","Version")})]})}),e.jsx("tbody",{children:g.map(s=>e.jsxs("tr",{className:"border-b border-border/30 hover:bg-muted/30 cursor-pointer transition-colors",onClick:()=>h(`/manage/channels/${s.id}?version=${s.version}`),"data-testid":`channel-row-${s.id}`,children:[e.jsx("td",{className:"px-4 py-3 font-medium",children:s.name}),e.jsx("td",{className:"px-4 py-3",children:e.jsx(B,{variant:"outline",className:"text-xs",children:s.channelType})}),e.jsx("td",{className:"px-4 py-3 font-mono text-xs text-muted-foreground",children:s.channelId??"—"}),e.jsx("td",{className:"px-4 py-3",children:s.targetCount}),e.jsxs("td",{className:"px-4 py-3 text-end",children:["v",s.version]})]},s.id))})]})}),e.jsx(fe,{open:r,onOpenChange:u,onCreated:s=>h(`/manage/channels/${s}?version=1`)}),e.jsx(ae,{open:!!x,onOpenChange:()=>f(null),title:a("channels.confirmDelete","Delete channel?"),description:a("channels.confirmDeleteDesc","This will permanently remove this channel integration."),onConfirm:y,confirmLabel:a("common.delete"),cancelLabel:a("common.cancel"),isPending:b.isPending})]})}export{Pe as ChannelsPage}; diff --git a/src/main/resources/META-INF/resources/assets/chat-ULtm2VHR.js b/src/main/resources/META-INF/resources/assets/chat-DqcQeFeL.js similarity index 60% rename from src/main/resources/META-INF/resources/assets/chat-ULtm2VHR.js rename to src/main/resources/META-INF/resources/assets/chat-DqcQeFeL.js index 9a18da42c1..b0c9c5f14a 100644 --- a/src/main/resources/META-INF/resources/assets/chat-ULtm2VHR.js +++ b/src/main/resources/META-INF/resources/assets/chat-DqcQeFeL.js @@ -1 +1 @@ -import{c as o,r as a,O as i,f as m,j as t,l}from"./index-BY6d8wze.js";import{C as c}from"./chat-panel-IQLg7XQu.js";import"./history-BHMI8MMQ.js";import"./hash-D4WlnmN6.js";import"./info-vszmN4vn.js";import"./lock-CPVVTGkJ.js";import"./eye-Dbrf-yrM.js";import"./eye-off-DQKzJHI5.js";import"./lock-open-1V8q1imA.js";import"./undo-2-CF9h_dkU.js";function C(){const{t:s}=o();a.useEffect(()=>{i.getState().close()},[]);const r=m(e=>e.maybeAutoStart);return a.useEffect(()=>{const e=setTimeout(()=>r("chat"),500);return()=>clearTimeout(e)},[r]),t.jsxs("div",{className:"flex h-full min-h-0 flex-col gap-4",children:[t.jsxs("div",{children:[t.jsxs("h1",{className:"flex items-center gap-2 text-3xl font-bold text-foreground",children:[t.jsx(l,{className:"h-8 w-8 text-primary"}),s("pages.chat.title")]}),t.jsx("p",{className:"mt-1 text-muted-foreground",children:s("pages.chat.subtitle")})]}),t.jsx("div",{className:"min-h-0 flex-1",children:t.jsx(c,{})})]})}export{C as ChatPage}; +import{c as o,r as a,O as i,f as m,j as t,l}from"./index-BnLj1hck.js";import{C as c}from"./chat-panel-B1e6hfTn.js";import"./history-d_YShP6D.js";import"./hash-MmAVnsbH.js";import"./info-cNcTVsFc.js";import"./lock-CL2SzOGd.js";import"./eye-xZR8Jj8Y.js";import"./eye-off-PKiH0Asw.js";import"./lock-open-BkYVbmCd.js";import"./undo-2-Dh2nRAeV.js";function C(){const{t:s}=o();a.useEffect(()=>{i.getState().close()},[]);const r=m(e=>e.maybeAutoStart);return a.useEffect(()=>{const e=setTimeout(()=>r("chat"),500);return()=>clearTimeout(e)},[r]),t.jsxs("div",{className:"flex h-full min-h-0 flex-col gap-4",children:[t.jsxs("div",{children:[t.jsxs("h1",{className:"flex items-center gap-2 text-3xl font-bold text-foreground",children:[t.jsx(l,{className:"h-8 w-8 text-primary"}),s("pages.chat.title")]}),t.jsx("p",{className:"mt-1 text-muted-foreground",children:s("pages.chat.subtitle")})]}),t.jsx("div",{className:"min-h-0 flex-1",children:t.jsx(c,{})})]})}export{C as ChatPage}; diff --git a/src/main/resources/META-INF/resources/assets/chat-panel-IQLg7XQu.js b/src/main/resources/META-INF/resources/assets/chat-panel-B1e6hfTn.js similarity index 96% rename from src/main/resources/META-INF/resources/assets/chat-panel-IQLg7XQu.js rename to src/main/resources/META-INF/resources/assets/chat-panel-B1e6hfTn.js index 53315e4a25..127be0aa6d 100644 --- a/src/main/resources/META-INF/resources/assets/chat-panel-IQLg7XQu.js +++ b/src/main/resources/META-INF/resources/assets/chat-panel-B1e6hfTn.js @@ -1,4 +1,4 @@ -import{x as le,c as P,Q as m,cN as Be,cO as Ve,r as i,j as e,P as _e,D as V,s as oe,i as x,_ as T,R as W,aX as Me,cP as ze,aI as B,bR as Ke,J as Ue,cQ as $e,cR as qe,cS as We,cT as Ye,cU as Qe,au as Xe,cV as Ge,cW as Je,cX as Ze,cY as et,cZ as tt,B as Y,a7 as st,c_ as rt,A as at,aF as nt,aM as ot,V as it,bj as lt,c$ as ct,d0 as dt,a1 as ut,a6 as mt,d1 as xt,al as ht,h as ft,d2 as ie,aB as pt,d3 as ce,d4 as gt,b6 as bt,d5 as vt,d6 as yt}from"./index-BY6d8wze.js";import{H as de}from"./history-BHMI8MMQ.js";import{H as jt}from"./hash-D4WlnmN6.js";import{I as Nt}from"./info-vszmN4vn.js";import{L as ue}from"./lock-CPVVTGkJ.js";import{E as me}from"./eye-Dbrf-yrM.js";import{E as xe}from"./eye-off-DQKzJHI5.js";import{L as wt}from"./lock-open-1V8q1imA.js";import{U as Ct}from"./undo-2-CF9h_dkU.js";/** +import{x as le,c as P,Q as m,cO as Be,cP as Ve,r as i,j as e,P as _e,D as V,s as oe,i as x,_ as T,R as W,aX as Me,cQ as ze,aI as B,bS as Ke,J as Ue,cR as $e,cS as qe,cT as We,cU as Ye,cV as Qe,au as Xe,cW as Ge,cX as Je,cY as Ze,cZ as et,c_ as tt,B as Y,a7 as st,c$ as rt,A as at,aF as nt,aM as ot,V as it,bj as lt,d0 as ct,d1 as dt,a1 as ut,a6 as mt,d2 as xt,al as ht,h as ft,d3 as ie,aB as pt,d4 as ce,d5 as gt,b6 as bt,d6 as vt,d7 as yt}from"./index-BnLj1hck.js";import{H as de}from"./history-d_YShP6D.js";import{H as jt}from"./hash-MmAVnsbH.js";import{I as Nt}from"./info-cNcTVsFc.js";import{L as ue}from"./lock-CL2SzOGd.js";import{E as me}from"./eye-xZR8Jj8Y.js";import{E as xe}from"./eye-off-PKiH0Asw.js";import{L as wt}from"./lock-open-BkYVbmCd.js";import{U as Ct}from"./undo-2-Dh2nRAeV.js";/** * @license lucide-react v0.577.0 - ISC * * This source code is licensed under the ISC license. diff --git a/src/main/resources/META-INF/resources/assets/circle-check-big-D1mokjbm.js b/src/main/resources/META-INF/resources/assets/circle-check-big-CBxGct8k.js similarity index 88% rename from src/main/resources/META-INF/resources/assets/circle-check-big-D1mokjbm.js rename to src/main/resources/META-INF/resources/assets/circle-check-big-CBxGct8k.js index 9db2fd693f..7befd4e738 100644 --- a/src/main/resources/META-INF/resources/assets/circle-check-big-D1mokjbm.js +++ b/src/main/resources/META-INF/resources/assets/circle-check-big-CBxGct8k.js @@ -1,4 +1,4 @@ -import{x as c}from"./index-BY6d8wze.js";/** +import{x as c}from"./index-BnLj1hck.js";/** * @license lucide-react v0.577.0 - ISC * * This source code is licensed under the ISC license. diff --git a/src/main/resources/META-INF/resources/assets/clipboard-list-C1xV5BuY.js b/src/main/resources/META-INF/resources/assets/clipboard-list-BKNHK2TK.js similarity index 92% rename from src/main/resources/META-INF/resources/assets/clipboard-list-C1xV5BuY.js rename to src/main/resources/META-INF/resources/assets/clipboard-list-BKNHK2TK.js index 5cc61a0b57..637a2deed9 100644 --- a/src/main/resources/META-INF/resources/assets/clipboard-list-C1xV5BuY.js +++ b/src/main/resources/META-INF/resources/assets/clipboard-list-BKNHK2TK.js @@ -1,4 +1,4 @@ -import{x as t}from"./index-BY6d8wze.js";/** +import{x as t}from"./index-BnLj1hck.js";/** * @license lucide-react v0.577.0 - ISC * * This source code is licensed under the ISC license. diff --git a/src/main/resources/META-INF/resources/assets/code--AVnUtw-.js b/src/main/resources/META-INF/resources/assets/code-DBVyO5Cx.js similarity index 86% rename from src/main/resources/META-INF/resources/assets/code--AVnUtw-.js rename to src/main/resources/META-INF/resources/assets/code-DBVyO5Cx.js index 3a839f9447..c19e5c4e5e 100644 --- a/src/main/resources/META-INF/resources/assets/code--AVnUtw-.js +++ b/src/main/resources/META-INF/resources/assets/code-DBVyO5Cx.js @@ -1,4 +1,4 @@ -import{x as o}from"./index-BY6d8wze.js";/** +import{x as o}from"./index-BnLj1hck.js";/** * @license lucide-react v0.577.0 - ISC * * This source code is licensed under the ISC license. diff --git a/src/main/resources/META-INF/resources/assets/conversation-detail-zgfk5N2Y.js b/src/main/resources/META-INF/resources/assets/conversation-detail-Bjcs1MBi.js similarity index 98% rename from src/main/resources/META-INF/resources/assets/conversation-detail-zgfk5N2Y.js rename to src/main/resources/META-INF/resources/assets/conversation-detail-Bjcs1MBi.js index c5d65832cc..6d93743e0b 100644 --- a/src/main/resources/META-INF/resources/assets/conversation-detail-zgfk5N2Y.js +++ b/src/main/resources/META-INF/resources/assets/conversation-detail-Bjcs1MBi.js @@ -1,4 +1,4 @@ -import{x as ce,u as ie,aq as z,a_ as K,b3 as le,b4 as de,b5 as me,c as k,r as y,j as e,b6 as ue,Z as M,b7 as xe,m as pe,b8 as he,ae as W,b9 as fe,_ as p,R as C,ap as ge,$ as be,ba as ve,bb as je,bc as ye,a1 as Ne,av as we,al as De,T as G,C as Ce,V as Y,aL as Ae,M as O,i as J,l as Ee,bd as Re,ad as ke,be as $,bf as U,h as Pe,a3 as Se,az as Le,bg as Te,bh as Ie,bi as Oe,B as Me,bj as $e,a7 as Ue}from"./index-BY6d8wze.js";import{D as X}from"./download-DZjrnAjT.js";import{a as _e,f as qe}from"./use-conversations-CLcLkU6m.js";import{f as Be,R as He}from"./blocked-calls-BfQrNh_6.js";import{C as Fe}from"./code--AVnUtw-.js";import"./resources-R5ikMSzo.js";import"./resource-diff-viewer-D2tV_yay.js";/** +import{x as ce,u as ie,aq as z,a_ as K,b3 as le,b4 as de,b5 as me,c as k,r as y,j as e,b6 as ue,Z as M,b7 as xe,m as pe,b8 as he,ae as W,b9 as fe,_ as p,R as C,ap as ge,$ as be,ba as ve,bb as je,bc as ye,a1 as Ne,av as we,al as De,T as G,C as Ce,V as Y,aL as Ae,M as O,i as J,l as Ee,bd as Re,ad as ke,be as $,bf as U,h as Pe,a3 as Se,az as Le,bg as Te,bh as Ie,bi as Oe,B as Me,bj as $e,a7 as Ue}from"./index-BnLj1hck.js";import{D as X}from"./download-CVl_y-4e.js";import{a as _e,f as qe}from"./use-conversations-DDsEFA-B.js";import{f as Be,R as He}from"./blocked-calls-BqNBLu7Y.js";import{C as Fe}from"./code-DBVyO5Cx.js";import"./resource-diff-viewer-DeowJcjr.js";import"./resources-D97MNqv3.js";/** * @license lucide-react v0.577.0 - ISC * * This source code is licensed under the ISC license. diff --git a/src/main/resources/META-INF/resources/assets/conversation-monitoring-B3tcMvna.js b/src/main/resources/META-INF/resources/assets/conversation-monitoring-XAKrn4A9.js similarity index 97% rename from src/main/resources/META-INF/resources/assets/conversation-monitoring-B3tcMvna.js rename to src/main/resources/META-INF/resources/assets/conversation-monitoring-XAKrn4A9.js index f3e4bc96c5..8d93b1c771 100644 --- a/src/main/resources/META-INF/resources/assets/conversation-monitoring-B3tcMvna.js +++ b/src/main/resources/META-INF/resources/assets/conversation-monitoring-XAKrn4A9.js @@ -1,4 +1,4 @@ -import{x as J,c as K,r as a,ar as Q,j as e,A as T,h as R,a3 as ee,B as te,k as S,a1 as se,i as I,S as x,C as H,al as ne,T as M,V as ae,aL as oe,Z as _,ae as V,_ as p,R as L}from"./index-BY6d8wze.js";import{c as re,d as ie,e as ce}from"./use-conversations-CLcLkU6m.js";import{A as de}from"./agent-picker-BKXXvXR0.js";import{E as O}from"./empty-state-DB7ZSzVv.js";import{E as le}from"./error-state-BXe3bnJT.js";import"./use-debounce-BXAMTtyO.js";/** +import{x as J,c as K,r as a,ar as Q,j as e,A as T,h as R,a3 as ee,B as te,k as S,a1 as se,i as I,S as x,C as H,al as ne,T as M,V as ae,aL as oe,Z as _,ae as V,_ as p,R as L}from"./index-BnLj1hck.js";import{c as re,d as ie,e as ce}from"./use-conversations-DDsEFA-B.js";import{A as de}from"./agent-picker-BMeo54U5.js";import{E as O}from"./empty-state-DxZE48rx.js";import{E as le}from"./error-state-D4qtZYFq.js";import"./use-debounce-DMHuVYwD.js";/** * @license lucide-react v0.577.0 - ISC * * This source code is licensed under the ISC license. diff --git a/src/main/resources/META-INF/resources/assets/conversations-BlT6Iz-c.js b/src/main/resources/META-INF/resources/assets/conversations-DgDQaSOa.js similarity index 96% rename from src/main/resources/META-INF/resources/assets/conversations-BlT6Iz-c.js rename to src/main/resources/META-INF/resources/assets/conversations-DgDQaSOa.js index a9b3cecbfc..205341c11b 100644 --- a/src/main/resources/META-INF/resources/assets/conversations-BlT6Iz-c.js +++ b/src/main/resources/META-INF/resources/assets/conversations-DgDQaSOa.js @@ -1 +1 @@ -import{c as K,$ as de,r as n,f as me,ar as xe,b as ue,j as e,M as z,h as O,A as ge,ad as pe,k as S,B as G,S as g,s as H,al as he,T as Y,C as fe,V as ve,aL as Ne,e as X,i as V,Z as W,N as be,b1 as je,b2 as ye,a8 as we,ae as Ee,_ as q,R as Ae}from"./index-BY6d8wze.js";import{u as Se,a as Ie,b as Ce}from"./use-conversations-CLcLkU6m.js";import{A as Pe}from"./agent-picker-BKXXvXR0.js";import{E as Re}from"./empty-state-DB7ZSzVv.js";import{E as De}from"./error-state-BXe3bnJT.js";import{g as ke,V as Le,s as Te}from"./view-mode-TQOH38Sf.js";import{F as Me}from"./funnel-NUFt5LnV.js";import"./use-debounce-BXAMTtyO.js";import"./layout-grid-BjGzFSfP.js";import"./list-CX0KxgtB.js";const Z={READY:{icon:Ne,color:"text-emerald-500",bg:"bg-emerald-500/10"},IN_PROGRESS:{icon:ve,color:"text-amber-500",bg:"bg-amber-500/10"},ERROR:{icon:Y,color:"text-destructive",bg:"bg-destructive/10"},ENDED:{icon:fe,color:"text-muted-foreground",bg:"bg-muted"},EXECUTION_INTERRUPTED:{icon:Y,color:"text-amber-500",bg:"bg-amber-500/10"},AWAITING_HUMAN:{icon:he,color:"text-orange-500",bg:"bg-orange-500/10"}},Oe=["ALL","READY","IN_PROGRESS","ENDED","EXECUTION_INTERRUPTED","ERROR","AWAITING_HUMAN"],Ve=[25,50,je];function We(){const{t:s}=K(),p=de(),[r,I]=n.useState(""),_=me(t=>t.maybeAutoStart);n.useEffect(()=>{const t=setTimeout(()=>_("conversations"),500);return()=>clearTimeout(t)},[_]);const[m,Q]=n.useState("ALL"),C={ALL:s("conversations.filterAll","All"),READY:s("conversations.stateActive","Active"),IN_PROGRESS:s("conversations.stateInProgress","In Progress"),ERROR:s("status.error","Error"),ENDED:s("conversations.stateEnded","Ended"),EXECUTION_INTERRUPTED:s("conversations.stateInterrupted","Interrupted"),AWAITING_HUMAN:s("hitl.awaitingHuman","Awaiting Human")},[P,h]=n.useState(null),[f,R]=n.useState(!1),[F,ee]=n.useState(()=>ke("conversations")),[i,te]=n.useState(""),[v,U]=n.useState(void 0),[l,se]=n.useState(50),[d,D]=n.useState(0);n.useEffect(()=>{D(0)},[r,m,i,v,l]),n.useEffect(()=>{U(void 0)},[i]);const{data:k}=xe(i),$=n.useMemo(()=>k?[...new Map(k.map(t=>[t.version,t])).values()]:[],[k]),{data:o,isLoading:N,isFetching:B,isError:b,refetch:ae}=Se(l,d,r,i,m==="ALL"?void 0:m,v),{data:j=[]}=ue(50),L=Ie(),y=!!r||m!=="ALL"||!!i||v!=null,w=(o==null?void 0:o.length)??0,ne=w>0?d*l+1:0,re=d*l+w,oe=w===l,ie=d>0;function ce(){P&&L.mutate({id:P,permanent:f},{onSuccess:()=>{q.success(f?s("conversations.permanentDeleteSuccess","Permanently deleted"):s("conversations.softDeleteSuccess","Conversation deleted")),h(null),R(!1)},onError:t=>q.error(Ae(t))})}function le(t){ee(t),Te("conversations",t)}return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{children:[e.jsxs("h1",{className:"flex items-center gap-2 text-3xl font-bold text-foreground",children:[e.jsx(z,{className:"h-8 w-8 text-primary"}),s("pages.conversations.title")]}),e.jsx("p",{className:"mt-1 text-muted-foreground",children:s("pages.conversations.subtitle")})]}),e.jsxs(O,{to:"/manage/conversations/monitoring",className:"inline-flex items-center gap-2 rounded-lg border border-input bg-background px-3 py-2 text-sm font-medium text-foreground transition-colors hover:bg-secondary/50","data-testid":"monitor-active-link",children:[e.jsx(ge,{className:"h-4 w-4 text-primary"}),s("conversations.monitorActive","Monitor active")]})]}),e.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center",children:[e.jsxs("div",{className:"relative flex-1",children:[e.jsx(pe,{className:"absolute inset-s-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),e.jsx("input",{type:"text",value:r,onChange:t=>I(t.target.value),placeholder:s("conversations.searchPlaceholder"),"aria-label":s("conversations.searchPlaceholder"),className:"w-full rounded-lg border border-input bg-background py-2.5 ps-10 pe-4 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring transition-shadow","data-testid":"conversation-search"})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-3","data-tour":"conversations-filters",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-1.5",children:[e.jsx(Me,{className:"h-4 w-4 text-muted-foreground"}),Oe.map(t=>e.jsx(S,{variant:m===t?"primary":"secondary",size:"sm",className:"rounded-full",onClick:()=>Q(t),children:C[t]},t))]}),e.jsx(Le,{view:F,onChange:le})]})]}),e.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center","data-testid":"agent-filter",children:[e.jsxs("div",{className:"flex items-center gap-1.5 sm:w-80",children:[e.jsx(G,{className:"h-4 w-4 shrink-0 text-muted-foreground"}),e.jsx(Pe,{value:i,onChange:te,placeholder:s("conversations.filterByAgent","Filter by agent")})]}),i&&$.length>0&&e.jsxs("select",{value:v??"",onChange:t=>U(t.target.value?Number(t.target.value):void 0),"aria-label":s("conversations.filterByVersion","Filter by agent version"),"data-testid":"version-filter",className:"h-9 rounded-md border border-input bg-background px-2 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring",children:[e.jsx("option",{value:"",children:s("conversations.allVersions","All versions")}),$.map(t=>e.jsx("option",{value:t.version,children:s("conversations.version","v{{version}}",{version:t.version})},t.version))]})]}),e.jsxs("div",{"data-tour":"conversations-content",children:[N&&e.jsx("div",{className:"overflow-hidden rounded-xl border bg-card shadow-sm",children:e.jsx("div",{className:"space-y-0",children:Array.from({length:5}).map((t,a)=>e.jsxs("div",{className:"flex items-center gap-4 border-b border-border px-5 py-4",children:[e.jsx(g,{className:"h-4 w-28"}),e.jsx(g,{className:"h-4 w-20"}),e.jsx(g,{className:"h-5 w-16 rounded-full"}),e.jsx(g,{className:"h-4 w-32"}),e.jsx(g,{className:"ms-auto h-6 w-6"})]},a))})}),b&&e.jsx(De,{message:s("common.error"),onRetry:()=>ae(),retryLabel:s("common.retry")}),!N&&!b&&(!o||o.length===0)&&e.jsx(Re,{icon:z,title:s(y?"common.noResults":"conversations.empty"),description:y?void 0:s("conversations.emptyDescription","Deploy an agent and start a conversation from the Chat page."),actionLabel:y?void 0:s("nav.chat"),onAction:y?void 0:()=>p("/manage/chat")}),!N&&!b&&o&&o.length>0&&e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground","data-testid":"pagination-range",children:s("conversations.showingRange","Showing {{from}}–{{to}}",{from:ne,to:re})}),F==="card"?e.jsx("div",{className:"cq-card-grid","data-testid":"conversation-grid",children:o.map(t=>{var E;const a=H(t.resource),x=t.conversationState||"READY",c=Z[x],T=C[x],M=c.icon,u=j?(E=X(j).find(A=>A.id===t.agentId))==null?void 0:E.name:null;return e.jsxs(O,{to:`/manage/conversationview/${a}`,className:V("group flex flex-col rounded-xl border bg-card p-5 shadow-sm transition-all duration-200","hover:shadow-md hover:border-primary/30"),"data-testid":`conversation-card-${a}`,children:[e.jsxs("div",{className:"flex items-start justify-between",children:[e.jsxs("span",{className:V("inline-flex items-center gap-1.5 rounded-full px-2.5 py-1 text-xs font-medium",c.bg,c.color),children:[e.jsx(M,{className:"h-3.5 w-3.5"}),T]}),e.jsx("button",{onClick:A=>{A.preventDefault(),A.stopPropagation(),h(a)},className:"rounded-md p-1 text-muted-foreground opacity-0 transition-opacity hover:text-destructive hover:bg-destructive/10 group-hover:opacity-100 focus:opacity-100","aria-label":s("conversations.deleteConversation","Delete conversation"),children:e.jsx(W,{className:"h-4 w-4","aria-hidden":"true"})})]}),e.jsx("div",{className:"mt-3",children:e.jsx("p",{className:"font-mono text-sm font-medium text-foreground truncate",title:a,children:a})}),t.agentId&&e.jsxs("div",{className:"mt-2 flex items-center gap-1.5",children:[e.jsx(G,{className:"h-3.5 w-3.5 text-muted-foreground"}),e.jsxs("span",{className:"text-xs text-muted-foreground truncate",title:u||t.agentId,children:[u||t.agentId,t.agentVersion?` v${t.agentVersion}`:""]})]}),e.jsx("div",{className:"mt-2",children:e.jsx(J,{conversationId:a})}),e.jsx("div",{className:"mt-auto pt-3 border-t border-border",children:e.jsx("span",{className:"text-xs text-muted-foreground",children:t.lastModifiedOn?new Date(t.lastModifiedOn).toLocaleString():"—"})})]},t.resource)})}):e.jsx("div",{className:"overflow-hidden rounded-xl border bg-card shadow-sm","data-testid":"conversation-list",children:e.jsxs("table",{className:"w-full",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-border bg-secondary/50",children:[e.jsx("th",{className:"px-5 py-3 text-start text-xs font-medium uppercase tracking-wider text-muted-foreground",children:s("conversations.id")}),e.jsx("th",{className:"px-5 py-3 text-start text-xs font-medium uppercase tracking-wider text-muted-foreground",children:s("conversations.agent")}),e.jsx("th",{className:"px-5 py-3 text-start text-xs font-medium uppercase tracking-wider text-muted-foreground",children:s("conversations.state")}),e.jsx("th",{className:"px-5 py-3 text-start text-xs font-medium uppercase tracking-wider text-muted-foreground",children:s("conversations.steps","Steps")}),e.jsx("th",{className:"px-5 py-3 text-start text-xs font-medium uppercase tracking-wider text-muted-foreground",children:s("conversations.lastActivity")}),e.jsx("th",{className:"px-5 py-3 text-end text-xs font-medium uppercase tracking-wider text-muted-foreground",children:s("conversations.actions")})]})}),e.jsx("tbody",{className:"divide-y divide-border",children:o.map(t=>{var u;const a=H(t.resource),x=t.conversationState||"READY",c=Z[x],T=c.icon,M=j&&((u=X(j).find(E=>E.id===t.agentId))==null?void 0:u.name)||t.agentId;return e.jsxs("tr",{className:"hover:bg-secondary/30 transition-colors",children:[e.jsx("td",{className:"px-5 py-3",children:e.jsxs(O,{to:`/manage/conversationview/${a}`,className:"inline-flex items-center gap-1 text-sm font-medium text-foreground hover:text-primary transition-colors",children:[e.jsx("span",{className:"font-mono",title:a,children:a.length>20?`${a.slice(0,20)}…`:a}),e.jsx(be,{className:"h-3 w-3 opacity-40"})]})}),e.jsx("td",{className:"px-5 py-3",children:e.jsx("span",{className:"text-sm text-muted-foreground",children:t.agentId?`${M}${t.agentVersion?` v${t.agentVersion}`:""}`:"—"})}),e.jsx("td",{className:"px-5 py-3",children:e.jsxs("span",{className:V("inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 text-xs font-medium",c.bg,c.color),children:[e.jsx(T,{className:"h-3 w-3"}),C[x]]})}),e.jsx("td",{className:"px-5 py-3",children:e.jsx(J,{conversationId:a})}),e.jsx("td",{className:"px-5 py-3",children:e.jsx("span",{className:"text-sm text-muted-foreground",children:t.lastModifiedOn?new Date(t.lastModifiedOn).toLocaleString():"—"})}),e.jsx("td",{className:"px-5 py-3 text-end",children:e.jsx(S,{variant:"ghost",size:"icon",className:"text-muted-foreground hover:text-destructive hover:bg-destructive/10",onClick:()=>h(a),disabled:L.isPending,"aria-label":s("conversations.deleteConversation","Delete conversation"),children:e.jsx(W,{className:"h-4 w-4","aria-hidden":"true"})})})]},t.resource)})})]})})]}),!N&&!b&&(w>0||d>0)&&e.jsxs("div",{className:"mt-4 flex flex-wrap items-center justify-between gap-3","data-testid":"conversation-pagination",children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[e.jsx("label",{htmlFor:"page-size-select",children:s("conversations.perPage","Per page")}),e.jsx("select",{id:"page-size-select",value:l,onChange:t=>se(Number(t.target.value)),"data-testid":"page-size-select",className:"h-8 rounded-md border border-input bg-background px-2 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring",children:Ve.map(t=>e.jsx("option",{value:t,children:t},t))})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{className:"text-sm text-muted-foreground","data-testid":"page-indicator",children:s("conversations.pageNumber","Page {{page}}",{page:d+1})}),e.jsxs(S,{variant:"outline",size:"sm",onClick:()=>D(t=>Math.max(0,t-1)),disabled:!ie||B,"data-testid":"pagination-prev","aria-label":s("common.previous","Previous"),children:[e.jsx(ye,{className:"h-4 w-4"}),s("common.previous","Previous")]}),e.jsxs(S,{variant:"outline",size:"sm",onClick:()=>D(t=>t+1),disabled:!oe||B,"data-testid":"pagination-next","aria-label":s("common.next","Next"),children:[s("common.next","Next"),e.jsx(we,{className:"h-4 w-4"})]})]})]})]}),e.jsx(Ee,{open:P!==null,onOpenChange:t=>{t||(h(null),R(!1))},title:s("conversations.confirmDelete"),description:s("conversations.confirmDeleteSoft","By default this is a soft delete — the conversation is hidden from listings but its stored data is kept on the server."),confirmLabel:f?s("conversations.deletePermanentAction","Delete permanently"):s("common.delete"),cancelLabel:s("common.cancel"),onConfirm:ce,isPending:L.isPending,children:e.jsxs("label",{className:"flex cursor-pointer items-start gap-2 rounded-lg border border-border/60 bg-muted/30 p-3 text-sm",children:[e.jsx("input",{type:"checkbox",className:"mt-0.5 h-4 w-4 accent-destructive",checked:f,onChange:t=>R(t.target.checked),"data-testid":"delete-permanent-checkbox"}),e.jsx("span",{className:"text-muted-foreground",children:s("conversations.deletePermanentLabel","Permanently delete — also erases attachments, the memory snapshot and approval history. This cannot be undone.")})]})})]})}function J({conversationId:s}){const{t:p}=K(),{data:r,isLoading:I}=Ce(s);return I?e.jsx("span",{className:"inline-block h-4 w-8 animate-pulse rounded bg-secondary"}):r==null?e.jsx("span",{className:"text-xs text-muted-foreground",children:"—"}):e.jsxs("span",{className:"inline-flex items-center gap-1 rounded-full bg-primary/10 px-2 py-0.5 text-xs font-medium text-primary",children:[r," ",r===1?p("conversations.step","step"):p("conversations.steps","steps")]})}export{We as ConversationsPage}; +import{c as K,$ as de,r as n,f as me,ar as xe,b as ue,j as e,M as z,h as O,A as ge,ad as pe,k as S,B as G,S as g,s as H,al as he,T as Y,C as fe,V as ve,aL as Ne,e as X,i as V,Z as W,N as be,b1 as je,b2 as ye,a8 as we,ae as Ee,_ as q,R as Ae}from"./index-BnLj1hck.js";import{u as Se,a as Ie,b as Ce}from"./use-conversations-DDsEFA-B.js";import{A as Pe}from"./agent-picker-BMeo54U5.js";import{E as Re}from"./empty-state-DxZE48rx.js";import{E as De}from"./error-state-D4qtZYFq.js";import{g as ke,V as Le,s as Te}from"./view-mode-DguClt6l.js";import{F as Me}from"./funnel-CaMgE7LA.js";import"./use-debounce-DMHuVYwD.js";import"./layout-grid-DZHuDrOW.js";import"./list-Dqf28LSX.js";const Z={READY:{icon:Ne,color:"text-emerald-500",bg:"bg-emerald-500/10"},IN_PROGRESS:{icon:ve,color:"text-amber-500",bg:"bg-amber-500/10"},ERROR:{icon:Y,color:"text-destructive",bg:"bg-destructive/10"},ENDED:{icon:fe,color:"text-muted-foreground",bg:"bg-muted"},EXECUTION_INTERRUPTED:{icon:Y,color:"text-amber-500",bg:"bg-amber-500/10"},AWAITING_HUMAN:{icon:he,color:"text-orange-500",bg:"bg-orange-500/10"}},Oe=["ALL","READY","IN_PROGRESS","ENDED","EXECUTION_INTERRUPTED","ERROR","AWAITING_HUMAN"],Ve=[25,50,je];function We(){const{t:s}=K(),p=de(),[r,I]=n.useState(""),_=me(t=>t.maybeAutoStart);n.useEffect(()=>{const t=setTimeout(()=>_("conversations"),500);return()=>clearTimeout(t)},[_]);const[m,Q]=n.useState("ALL"),C={ALL:s("conversations.filterAll","All"),READY:s("conversations.stateActive","Active"),IN_PROGRESS:s("conversations.stateInProgress","In Progress"),ERROR:s("status.error","Error"),ENDED:s("conversations.stateEnded","Ended"),EXECUTION_INTERRUPTED:s("conversations.stateInterrupted","Interrupted"),AWAITING_HUMAN:s("hitl.awaitingHuman","Awaiting Human")},[P,h]=n.useState(null),[f,R]=n.useState(!1),[F,ee]=n.useState(()=>ke("conversations")),[i,te]=n.useState(""),[v,U]=n.useState(void 0),[l,se]=n.useState(50),[d,D]=n.useState(0);n.useEffect(()=>{D(0)},[r,m,i,v,l]),n.useEffect(()=>{U(void 0)},[i]);const{data:k}=xe(i),$=n.useMemo(()=>k?[...new Map(k.map(t=>[t.version,t])).values()]:[],[k]),{data:o,isLoading:N,isFetching:B,isError:b,refetch:ae}=Se(l,d,r,i,m==="ALL"?void 0:m,v),{data:j=[]}=ue(50),L=Ie(),y=!!r||m!=="ALL"||!!i||v!=null,w=(o==null?void 0:o.length)??0,ne=w>0?d*l+1:0,re=d*l+w,oe=w===l,ie=d>0;function ce(){P&&L.mutate({id:P,permanent:f},{onSuccess:()=>{q.success(f?s("conversations.permanentDeleteSuccess","Permanently deleted"):s("conversations.softDeleteSuccess","Conversation deleted")),h(null),R(!1)},onError:t=>q.error(Ae(t))})}function le(t){ee(t),Te("conversations",t)}return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{children:[e.jsxs("h1",{className:"flex items-center gap-2 text-3xl font-bold text-foreground",children:[e.jsx(z,{className:"h-8 w-8 text-primary"}),s("pages.conversations.title")]}),e.jsx("p",{className:"mt-1 text-muted-foreground",children:s("pages.conversations.subtitle")})]}),e.jsxs(O,{to:"/manage/conversations/monitoring",className:"inline-flex items-center gap-2 rounded-lg border border-input bg-background px-3 py-2 text-sm font-medium text-foreground transition-colors hover:bg-secondary/50","data-testid":"monitor-active-link",children:[e.jsx(ge,{className:"h-4 w-4 text-primary"}),s("conversations.monitorActive","Monitor active")]})]}),e.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center",children:[e.jsxs("div",{className:"relative flex-1",children:[e.jsx(pe,{className:"absolute inset-s-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),e.jsx("input",{type:"text",value:r,onChange:t=>I(t.target.value),placeholder:s("conversations.searchPlaceholder"),"aria-label":s("conversations.searchPlaceholder"),className:"w-full rounded-lg border border-input bg-background py-2.5 ps-10 pe-4 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring transition-shadow","data-testid":"conversation-search"})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-3","data-tour":"conversations-filters",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-1.5",children:[e.jsx(Me,{className:"h-4 w-4 text-muted-foreground"}),Oe.map(t=>e.jsx(S,{variant:m===t?"primary":"secondary",size:"sm",className:"rounded-full",onClick:()=>Q(t),children:C[t]},t))]}),e.jsx(Le,{view:F,onChange:le})]})]}),e.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center","data-testid":"agent-filter",children:[e.jsxs("div",{className:"flex items-center gap-1.5 sm:w-80",children:[e.jsx(G,{className:"h-4 w-4 shrink-0 text-muted-foreground"}),e.jsx(Pe,{value:i,onChange:te,placeholder:s("conversations.filterByAgent","Filter by agent")})]}),i&&$.length>0&&e.jsxs("select",{value:v??"",onChange:t=>U(t.target.value?Number(t.target.value):void 0),"aria-label":s("conversations.filterByVersion","Filter by agent version"),"data-testid":"version-filter",className:"h-9 rounded-md border border-input bg-background px-2 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring",children:[e.jsx("option",{value:"",children:s("conversations.allVersions","All versions")}),$.map(t=>e.jsx("option",{value:t.version,children:s("conversations.version","v{{version}}",{version:t.version})},t.version))]})]}),e.jsxs("div",{"data-tour":"conversations-content",children:[N&&e.jsx("div",{className:"overflow-hidden rounded-xl border bg-card shadow-sm",children:e.jsx("div",{className:"space-y-0",children:Array.from({length:5}).map((t,a)=>e.jsxs("div",{className:"flex items-center gap-4 border-b border-border px-5 py-4",children:[e.jsx(g,{className:"h-4 w-28"}),e.jsx(g,{className:"h-4 w-20"}),e.jsx(g,{className:"h-5 w-16 rounded-full"}),e.jsx(g,{className:"h-4 w-32"}),e.jsx(g,{className:"ms-auto h-6 w-6"})]},a))})}),b&&e.jsx(De,{message:s("common.error"),onRetry:()=>ae(),retryLabel:s("common.retry")}),!N&&!b&&(!o||o.length===0)&&e.jsx(Re,{icon:z,title:s(y?"common.noResults":"conversations.empty"),description:y?void 0:s("conversations.emptyDescription","Deploy an agent and start a conversation from the Chat page."),actionLabel:y?void 0:s("nav.chat"),onAction:y?void 0:()=>p("/manage/chat")}),!N&&!b&&o&&o.length>0&&e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground","data-testid":"pagination-range",children:s("conversations.showingRange","Showing {{from}}–{{to}}",{from:ne,to:re})}),F==="card"?e.jsx("div",{className:"cq-card-grid","data-testid":"conversation-grid",children:o.map(t=>{var E;const a=H(t.resource),x=t.conversationState||"READY",c=Z[x],T=C[x],M=c.icon,u=j?(E=X(j).find(A=>A.id===t.agentId))==null?void 0:E.name:null;return e.jsxs(O,{to:`/manage/conversationview/${a}`,className:V("group flex flex-col rounded-xl border bg-card p-5 shadow-sm transition-all duration-200","hover:shadow-md hover:border-primary/30"),"data-testid":`conversation-card-${a}`,children:[e.jsxs("div",{className:"flex items-start justify-between",children:[e.jsxs("span",{className:V("inline-flex items-center gap-1.5 rounded-full px-2.5 py-1 text-xs font-medium",c.bg,c.color),children:[e.jsx(M,{className:"h-3.5 w-3.5"}),T]}),e.jsx("button",{onClick:A=>{A.preventDefault(),A.stopPropagation(),h(a)},className:"rounded-md p-1 text-muted-foreground opacity-0 transition-opacity hover:text-destructive hover:bg-destructive/10 group-hover:opacity-100 focus:opacity-100","aria-label":s("conversations.deleteConversation","Delete conversation"),children:e.jsx(W,{className:"h-4 w-4","aria-hidden":"true"})})]}),e.jsx("div",{className:"mt-3",children:e.jsx("p",{className:"font-mono text-sm font-medium text-foreground truncate",title:a,children:a})}),t.agentId&&e.jsxs("div",{className:"mt-2 flex items-center gap-1.5",children:[e.jsx(G,{className:"h-3.5 w-3.5 text-muted-foreground"}),e.jsxs("span",{className:"text-xs text-muted-foreground truncate",title:u||t.agentId,children:[u||t.agentId,t.agentVersion?` v${t.agentVersion}`:""]})]}),e.jsx("div",{className:"mt-2",children:e.jsx(J,{conversationId:a})}),e.jsx("div",{className:"mt-auto pt-3 border-t border-border",children:e.jsx("span",{className:"text-xs text-muted-foreground",children:t.lastModifiedOn?new Date(t.lastModifiedOn).toLocaleString():"—"})})]},t.resource)})}):e.jsx("div",{className:"overflow-hidden rounded-xl border bg-card shadow-sm","data-testid":"conversation-list",children:e.jsxs("table",{className:"w-full",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-border bg-secondary/50",children:[e.jsx("th",{className:"px-5 py-3 text-start text-xs font-medium uppercase tracking-wider text-muted-foreground",children:s("conversations.id")}),e.jsx("th",{className:"px-5 py-3 text-start text-xs font-medium uppercase tracking-wider text-muted-foreground",children:s("conversations.agent")}),e.jsx("th",{className:"px-5 py-3 text-start text-xs font-medium uppercase tracking-wider text-muted-foreground",children:s("conversations.state")}),e.jsx("th",{className:"px-5 py-3 text-start text-xs font-medium uppercase tracking-wider text-muted-foreground",children:s("conversations.steps","Steps")}),e.jsx("th",{className:"px-5 py-3 text-start text-xs font-medium uppercase tracking-wider text-muted-foreground",children:s("conversations.lastActivity")}),e.jsx("th",{className:"px-5 py-3 text-end text-xs font-medium uppercase tracking-wider text-muted-foreground",children:s("conversations.actions")})]})}),e.jsx("tbody",{className:"divide-y divide-border",children:o.map(t=>{var u;const a=H(t.resource),x=t.conversationState||"READY",c=Z[x],T=c.icon,M=j&&((u=X(j).find(E=>E.id===t.agentId))==null?void 0:u.name)||t.agentId;return e.jsxs("tr",{className:"hover:bg-secondary/30 transition-colors",children:[e.jsx("td",{className:"px-5 py-3",children:e.jsxs(O,{to:`/manage/conversationview/${a}`,className:"inline-flex items-center gap-1 text-sm font-medium text-foreground hover:text-primary transition-colors",children:[e.jsx("span",{className:"font-mono",title:a,children:a.length>20?`${a.slice(0,20)}…`:a}),e.jsx(be,{className:"h-3 w-3 opacity-40"})]})}),e.jsx("td",{className:"px-5 py-3",children:e.jsx("span",{className:"text-sm text-muted-foreground",children:t.agentId?`${M}${t.agentVersion?` v${t.agentVersion}`:""}`:"—"})}),e.jsx("td",{className:"px-5 py-3",children:e.jsxs("span",{className:V("inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 text-xs font-medium",c.bg,c.color),children:[e.jsx(T,{className:"h-3 w-3"}),C[x]]})}),e.jsx("td",{className:"px-5 py-3",children:e.jsx(J,{conversationId:a})}),e.jsx("td",{className:"px-5 py-3",children:e.jsx("span",{className:"text-sm text-muted-foreground",children:t.lastModifiedOn?new Date(t.lastModifiedOn).toLocaleString():"—"})}),e.jsx("td",{className:"px-5 py-3 text-end",children:e.jsx(S,{variant:"ghost",size:"icon",className:"text-muted-foreground hover:text-destructive hover:bg-destructive/10",onClick:()=>h(a),disabled:L.isPending,"aria-label":s("conversations.deleteConversation","Delete conversation"),children:e.jsx(W,{className:"h-4 w-4","aria-hidden":"true"})})})]},t.resource)})})]})})]}),!N&&!b&&(w>0||d>0)&&e.jsxs("div",{className:"mt-4 flex flex-wrap items-center justify-between gap-3","data-testid":"conversation-pagination",children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[e.jsx("label",{htmlFor:"page-size-select",children:s("conversations.perPage","Per page")}),e.jsx("select",{id:"page-size-select",value:l,onChange:t=>se(Number(t.target.value)),"data-testid":"page-size-select",className:"h-8 rounded-md border border-input bg-background px-2 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring",children:Ve.map(t=>e.jsx("option",{value:t,children:t},t))})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{className:"text-sm text-muted-foreground","data-testid":"page-indicator",children:s("conversations.pageNumber","Page {{page}}",{page:d+1})}),e.jsxs(S,{variant:"outline",size:"sm",onClick:()=>D(t=>Math.max(0,t-1)),disabled:!ie||B,"data-testid":"pagination-prev","aria-label":s("common.previous","Previous"),children:[e.jsx(ye,{className:"h-4 w-4"}),s("common.previous","Previous")]}),e.jsxs(S,{variant:"outline",size:"sm",onClick:()=>D(t=>t+1),disabled:!oe||B,"data-testid":"pagination-next","aria-label":s("common.next","Next"),children:[s("common.next","Next"),e.jsx(we,{className:"h-4 w-4"})]})]})]})]}),e.jsx(Ee,{open:P!==null,onOpenChange:t=>{t||(h(null),R(!1))},title:s("conversations.confirmDelete"),description:s("conversations.confirmDeleteSoft","By default this is a soft delete — the conversation is hidden from listings but its stored data is kept on the server."),confirmLabel:f?s("conversations.deletePermanentAction","Delete permanently"):s("common.delete"),cancelLabel:s("common.cancel"),onConfirm:ce,isPending:L.isPending,children:e.jsxs("label",{className:"flex cursor-pointer items-start gap-2 rounded-lg border border-border/60 bg-muted/30 p-3 text-sm",children:[e.jsx("input",{type:"checkbox",className:"mt-0.5 h-4 w-4 accent-destructive",checked:f,onChange:t=>R(t.target.checked),"data-testid":"delete-permanent-checkbox"}),e.jsx("span",{className:"text-muted-foreground",children:s("conversations.deletePermanentLabel","Permanently delete — also erases attachments, the memory snapshot and approval history. This cannot be undone.")})]})})]})}function J({conversationId:s}){const{t:p}=K(),{data:r,isLoading:I}=Ce(s);return I?e.jsx("span",{className:"inline-block h-4 w-8 animate-pulse rounded bg-secondary"}):r==null?e.jsx("span",{className:"text-xs text-muted-foreground",children:"—"}):e.jsxs("span",{className:"inline-flex items-center gap-1 rounded-full bg-primary/10 px-2 py-0.5 text-xs font-medium text-primary",children:[r," ",r===1?p("conversations.step","step"):p("conversations.steps","steps")]})}export{We as ConversationsPage}; diff --git a/src/main/resources/META-INF/resources/assets/coordinator-GDpiIhTi.js b/src/main/resources/META-INF/resources/assets/coordinator-B4sE0rHY.js similarity index 92% rename from src/main/resources/META-INF/resources/assets/coordinator-GDpiIhTi.js rename to src/main/resources/META-INF/resources/assets/coordinator-B4sE0rHY.js index 7c0e1d4e70..7e40b90d43 100644 --- a/src/main/resources/META-INF/resources/assets/coordinator-GDpiIhTi.js +++ b/src/main/resources/META-INF/resources/assets/coordinator-B4sE0rHY.js @@ -1,4 +1,4 @@ -import{x as r,bG as n,aZ as e}from"./index-BY6d8wze.js";/** +import{x as r,bH as n,aZ as e}from"./index-BnLj1hck.js";/** * @license lucide-react v0.577.0 - ISC * * This source code is licensed under the ISC license. diff --git a/src/main/resources/META-INF/resources/assets/coordinator-BSH22HcJ.js b/src/main/resources/META-INF/resources/assets/coordinator-BpNLr4Dq.js similarity index 97% rename from src/main/resources/META-INF/resources/assets/coordinator-BSH22HcJ.js rename to src/main/resources/META-INF/resources/assets/coordinator-BpNLr4Dq.js index 6de6de12d3..14264548cb 100644 --- a/src/main/resources/META-INF/resources/assets/coordinator-BSH22HcJ.js +++ b/src/main/resources/META-INF/resources/assets/coordinator-BpNLr4Dq.js @@ -1 +1 @@ -import{u as K,r as o,aq as R,a_ as A,c as W,f as X,j as e,A as O,a1 as ee,C as k,T as te,h as re,N as se,V as ae,Z as Q,a7 as oe,a8 as de,bB as ne,ae as ce,_ as x}from"./index-BY6d8wze.js";import{S as ie}from"./stream-badge-D74j2j2x.js";import{E as le}from"./error-state-BXe3bnJT.js";import{c as ue,r as me,d as xe,p as he,g as pe,a as ge,C as fe}from"./coordinator-GDpiIhTi.js";import{G as be}from"./gauge-D0qrGV1d.js";import{S as je}from"./server-CeKDVLCh.js";import{T as ve}from"./trending-up-C7AIX6kc.js";import{E as Ne}from"./eye-Dbrf-yrM.js";const i={status:["coordinator","status"],deadLetters:["coordinator","dead-letters"]};function ye(){return K({queryKey:i.status,queryFn:pe,refetchInterval:5e3})}function we(){return K({queryKey:i.deadLetters,queryFn:ge,refetchInterval:1e4})}function Se(){const r=R();return A({mutationFn:me,onSuccess:()=>{r.invalidateQueries({queryKey:i.deadLetters}),r.invalidateQueries({queryKey:i.status})}})}function De(){const r=R();return A({mutationFn:xe,onSuccess:()=>{r.invalidateQueries({queryKey:i.deadLetters}),r.invalidateQueries({queryKey:i.status})}})}function Le(){const r=R();return A({mutationFn:he,onSuccess:()=>{r.invalidateQueries({queryKey:i.deadLetters}),r.invalidateQueries({queryKey:i.status})}})}const F=20;function Ce(){const[r,b]=o.useState(null),[S,m]=o.useState(!1),[D,h]=o.useState([]),d=o.useRef(null),j=o.useCallback(()=>{try{const c=ue();d.current=c,c.addEventListener("status",L=>{try{const v=JSON.parse(L.data);b(v),m(!0);const p={...v,receivedAt:new Date().toISOString()};h(N=>{const l=[...N,p];return l.length>F?l.slice(-F):l})}catch{}}),c.onerror=()=>{m(!1)},c.onopen=()=>{m(!0)}}catch{m(!1)}},[]);return o.useEffect(()=>(j(),()=>{var c;(c=d.current)==null||c.close()}),[j]),{liveStatus:r,sseConnected:S,eventHistory:D}}function Ee(r){try{return new Intl.DateTimeFormat(void 0,{hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(new Date(r))}catch{return r}}function Me(){const{t:r}=W(),b=X(t=>t.maybeAutoStart);o.useEffect(()=>{const t=setTimeout(()=>b("coordinator"),500);return()=>clearTimeout(t)},[b]);const{data:S,isLoading:m,isError:D,refetch:h}=ye(),{data:d,isLoading:j,refetch:c}=we(),{liveStatus:L,sseConnected:v,eventHistory:p}=Ce(),N=Se(),l=De(),$=Le(),[H,C]=o.useState(!1),[E,P]=o.useState(null),[y,_]=o.useState(10),[I,J]=o.useState(new Set),s=L??S,T=(s==null?void 0:s.coordinatorType)==="nats",g=(s==null?void 0:s.connected)??!1,f=o.useRef(null);o.useEffect(()=>(f.current&&clearInterval(f.current),f.current=window.setInterval(()=>{h(),c()},y*1e3),()=>{f.current&&clearInterval(f.current)}),[y,h,c]);const w=o.useRef(null),[q,B]=o.useState(null);o.useEffect(()=>{if(!s)return;const t=Date.now();if(w.current){const a=(t-w.current.time)/1e3;if(a>0){const n=(s.totalProcessed-w.current.count)/a;B(Math.max(0,n))}}w.current={count:s.totalProcessed,time:t}},[s]);const u=o.useMemo(()=>{if(!s)return null;const t=s.totalProcessed+s.totalDeadLettered;return t===0?100:Math.round(s.totalProcessed/t*100)},[s]),Y=o.useMemo(()=>s?Object.keys(s.queueDepths).length:0,[s]),G=o.useMemo(()=>s?Object.values(s.queueDepths).reduce((t,a)=>t+a,0):0,[s]),U=o.useCallback(t=>{J(a=>{const n=new Set(a);return n.has(t)?n.delete(t):n.add(t),n})},[]),M=o.useMemo(()=>{if(!d||d.length===0)return[];const t=new Map;for(const a of d){const n=a.error.includes("timeout")?"Timeout":a.error.includes("503")||a.error.includes("502")?"Backend Unavailable":a.error.includes("401")||a.error.includes("403")?"Auth Error":a.error.includes("rate")?"Rate Limited":"Other";t.set(n,(t.get(n)??0)+1)}return[...t.entries()].sort((a,n)=>n[1]-a[1])},[d]),V=t=>{N.mutate(t,{onSuccess:()=>x.success(r("coordinator.replaySuccess","Dead-letter replayed")),onError:()=>x.error(r("coordinator.replayError","Failed to replay"))})},Z=()=>{E&&l.mutate(E,{onSuccess:()=>{x.success(r("coordinator.discardSuccess","Dead-letter discarded")),P(null)},onError:()=>x.error(r("coordinator.discardError","Failed to discard"))})},z=()=>{$.mutate(void 0,{onSuccess:t=>{x.success(r("coordinator.purgeSuccess",`Purged ${t} entries`)),C(!1)},onError:()=>x.error(r("coordinator.purgeError","Failed to purge"))})};return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(O,{className:"h-7 w-7 text-accent"}),e.jsxs("div",{className:"flex-1",children:[e.jsx("h1",{className:"text-2xl font-bold text-foreground",children:r("coordinator.title","Coordinator Dashboard")}),e.jsx("p",{className:"text-sm text-muted-foreground",children:r("coordinator.subtitle","Monitor conversation processing and manage dead-letter entries")})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(ee,{className:"h-4 w-4 text-muted-foreground animate-spin",style:{animationDuration:`${y}s`}}),e.jsxs("select",{value:y,onChange:t=>_(Number(t.target.value)),className:"h-8 appearance-none rounded-lg border border-input bg-background pe-6 ps-2 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-primary","data-testid":"refresh-interval",children:[e.jsx("option",{value:5,children:"5s"}),e.jsx("option",{value:10,children:"10s"}),e.jsx("option",{value:30,children:"30s"}),e.jsx("option",{value:60,children:"60s"})]}),q!==null&&e.jsxs("span",{className:"inline-flex items-center gap-1 rounded-full bg-accent/10 px-2.5 py-1 text-xs font-semibold text-accent","data-testid":"throughput-badge",children:[e.jsx(be,{className:"h-3.5 w-3.5"}),q<.1?"<0.1":q.toFixed(1)," ",r("coordinator.tasksPerSec","tasks/s")]})]})]}),m&&!s?e.jsx("div",{className:"cq-stat-grid",children:[...Array(4)].map((t,a)=>e.jsxs("div",{className:"animate-pulse rounded-xl border border-border bg-card p-5",children:[e.jsx("div",{className:"h-4 w-24 rounded bg-muted"}),e.jsx("div",{className:"mt-3 h-8 w-16 rounded bg-muted"})]},a))}):D&&!s?e.jsx(le,{message:r("common.error","Something went wrong"),onRetry:()=>h(),retryLabel:r("common.retry","Retry")}):s?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"rounded-xl border border-border bg-card p-5","data-testid":"coordinator-connection-card",children:e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx("div",{className:`flex h-12 w-12 items-center justify-center rounded-xl ${g?"bg-emerald-500/10":"bg-red-500/10"}`,children:T?e.jsx(fe,{className:`h-6 w-6 ${g?"text-emerald-500":"text-red-500"}`}):e.jsx(je,{className:`h-6 w-6 ${g?"text-emerald-500":"text-red-500"}`})}),e.jsxs("div",{className:"flex-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:`inline-flex h-2.5 w-2.5 rounded-full ${g?"bg-emerald-500 animate-pulse":"bg-red-500"}`}),e.jsx("span",{className:`text-lg font-semibold ${g?"text-emerald-500":"text-red-500"}`,children:s.connectionStatus}),e.jsx("span",{className:`ms-2 rounded-full px-2.5 py-0.5 text-xs font-medium ${T?"bg-blue-500/10 text-blue-500":"bg-purple-500/10 text-purple-500"}`,"data-testid":"coordinator-type-card",children:T?"NATS JetStream":"In-Memory"})]}),e.jsxs("p",{className:"text-xs text-muted-foreground mt-0.5",children:[r("coordinator.activeConversations","Active conversations"),": ",s.activeConversations]})]}),e.jsx(ie,{connected:v})]})}),e.jsxs("div",{className:"grid gap-4 sm:grid-cols-3",children:[e.jsxs("div",{className:"rounded-xl border border-border bg-card p-5","data-testid":"coordinator-processed-card",children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm font-medium text-muted-foreground",children:[e.jsx(k,{className:"h-4 w-4 text-emerald-500"}),r("coordinator.processed","Tasks Processed")]}),e.jsx("p",{className:"mt-2 text-2xl font-bold text-foreground tabular-nums",children:s.totalProcessed.toLocaleString()})]}),e.jsxs("div",{className:"rounded-xl border border-border bg-card p-5","data-testid":"coordinator-dead-letter-card",children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm font-medium text-muted-foreground",children:[e.jsx(te,{className:"h-4 w-4 text-amber-500"}),r("coordinator.deadLettered","Dead-Lettered")]}),e.jsx("p",{className:`mt-2 text-2xl font-bold tabular-nums ${s.totalDeadLettered>0?"text-amber-500":"text-foreground"}`,children:s.totalDeadLettered.toLocaleString()})]}),e.jsxs("div",{className:"rounded-xl border border-border bg-card p-5","data-testid":"coordinator-success-rate-card",children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm font-medium text-muted-foreground",children:[e.jsx(ve,{className:"h-4 w-4 text-blue-500"}),r("coordinator.successRate","Success Rate")]}),e.jsx("p",{className:`mt-2 text-2xl font-bold tabular-nums ${u!==null&&u<90?"text-amber-500":"text-emerald-500"}`,children:u!==null?`${u}%`:"—"}),u!==null&&s.totalProcessed+s.totalDeadLettered>0&&e.jsxs("div",{className:"mt-2 flex h-2 overflow-hidden rounded-full bg-muted","data-testid":"success-rate-bar",children:[e.jsx("div",{className:"bg-emerald-500 transition-all",style:{width:`${u}%`}}),e.jsx("div",{className:"bg-red-400 transition-all",style:{width:`${100-u}%`}})]})]})]})]}):e.jsxs("div",{className:"flex flex-col items-center justify-center rounded-xl border-2 border-dashed border-border py-16",children:[e.jsx(O,{className:"h-12 w-12 text-muted-foreground/40"}),e.jsx("p",{className:"mt-4 text-lg font-medium text-muted-foreground",children:r("coordinator.empty","No coordinator data available")}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground/70",children:r("coordinator.emptyHint","The coordinator service may still be starting up. Data will appear automatically.")})]}),M.length>0&&e.jsx("div",{className:"flex flex-wrap gap-2",children:M.map(([t,a])=>e.jsxs("span",{className:"inline-flex items-center gap-1.5 rounded-full border border-border bg-card px-3 py-1 text-xs font-medium text-muted-foreground",children:[e.jsx("span",{className:"h-2 w-2 rounded-full bg-red-400"}),t,": ",a]},t))}),e.jsxs("div",{className:"rounded-xl border border-border bg-card p-5","data-testid":"coordinator-queues",children:[e.jsxs("div",{className:"mb-3 flex items-center justify-between",children:[e.jsx("h2",{className:"text-lg font-semibold text-foreground",children:r("coordinator.activeQueues","Active Queues")}),Y>0&&e.jsxs("span",{className:"rounded-full bg-accent/10 px-2.5 py-0.5 text-xs font-semibold text-accent tabular-nums",children:[G," ",r("coordinator.totalPending","pending")]})]}),s&&Object.keys(s.queueDepths).length>0?e.jsx("div",{className:"space-y-2",children:Object.entries(s.queueDepths).map(([t,a])=>e.jsxs("div",{className:"flex items-center gap-3 rounded-lg bg-muted/50 px-3 py-2",children:[e.jsxs(re,{to:"/manage/conversations",className:"flex-1 truncate font-mono text-sm text-foreground hover:text-primary transition-colors",title:t,children:[t,e.jsx(se,{className:"ms-1.5 inline h-3 w-3 text-muted-foreground"})]}),e.jsxs("span",{className:"rounded-full bg-accent/10 px-2.5 py-0.5 text-sm font-semibold text-accent tabular-nums",children:[a," ",r("coordinator.queued","queued")]})]},t))}):e.jsxs("div",{className:"flex items-center gap-2 py-4 text-sm text-muted-foreground",children:[e.jsx(k,{className:"h-5 w-5 text-emerald-500/50"}),r("coordinator.noActiveQueues","No active conversations being processed")]})]}),p.length>0&&e.jsxs("div",{className:"rounded-xl border border-border bg-card p-5","data-testid":"coordinator-event-history",children:[e.jsxs("h2",{className:"mb-3 flex items-center gap-2 text-lg font-semibold text-foreground",children:[e.jsx(ae,{className:"h-4 w-4 text-muted-foreground"}),r("coordinator.eventHistory","Event History"),e.jsxs("span",{className:"text-xs font-normal text-muted-foreground",children:["(",r("coordinator.lastNSnapshots","Last {{count}} snapshots",{count:p.length}),")"]})]}),e.jsx("div",{className:"max-h-48 overflow-y-auto space-y-0.5 rounded-lg bg-muted/30 p-2 font-mono text-[11px]",children:[...p].reverse().map((t,a)=>e.jsxs("div",{className:"flex items-center gap-2 rounded px-2 py-1 text-muted-foreground hover:bg-muted/50 transition-colors",children:[e.jsxs("span",{className:"text-foreground/40 tabular-nums",children:["[",Ee(t.receivedAt),"]"]}),e.jsxs("span",{className:"text-emerald-500 tabular-nums",children:["✓",t.totalProcessed.toLocaleString()]}),e.jsxs("span",{className:`tabular-nums ${t.totalDeadLettered>0?"text-red-400":"text-muted-foreground/40"}`,children:["✗",t.totalDeadLettered.toLocaleString()]}),e.jsxs("span",{className:"text-blue-400 tabular-nums",children:["⧗",Object.keys(t.queueDepths).length,"q"]})]},a))})]}),e.jsxs("div",{className:"rounded-xl border border-border bg-card","data-testid":"coordinator-dead-letters",children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-border px-5 py-4",children:[e.jsx("h2",{className:"text-lg font-semibold text-foreground",children:r("coordinator.deadLetterTitle","Dead-Letter Queue")}),e.jsx("div",{className:"flex items-center gap-2",children:d&&d.length>0&&(H?e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-sm text-muted-foreground",children:r("coordinator.confirmPurge","Purge all?")}),e.jsx("button",{onClick:z,disabled:$.isPending,className:"rounded-lg bg-red-500 px-3 py-1.5 text-sm font-medium text-white transition-colors hover:bg-red-600 disabled:opacity-50",children:r("coordinator.yes","Yes")}),e.jsx("button",{onClick:()=>C(!1),className:"rounded-lg border border-border px-3 py-1.5 text-sm font-medium text-foreground transition-colors hover:bg-muted",children:r("coordinator.cancel","Cancel")})]}):e.jsxs("button",{onClick:()=>C(!0),className:"flex items-center gap-1.5 rounded-lg border border-border px-3 py-1.5 text-sm font-medium text-muted-foreground transition-colors hover:border-red-500/50 hover:text-red-500","data-testid":"purge-dead-letters-btn",children:[e.jsx(Q,{className:"h-3.5 w-3.5"}),r("coordinator.purgeAll","Purge All")]}))})]}),j?e.jsx("div",{className:"p-8 text-center",children:e.jsx("div",{className:"mx-auto h-6 w-6 animate-spin rounded-full border-2 border-accent border-t-transparent"})}):!d||d.length===0?e.jsxs("div",{className:"p-8 text-center text-muted-foreground","data-testid":"dead-letters-empty",children:[e.jsx(k,{className:"mx-auto mb-2 h-8 w-8 text-emerald-500/50"}),e.jsx("p",{children:r("coordinator.noDeadLetters","No dead-letter entries")})]}):e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full","data-testid":"dead-letters-table",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-border text-start text-sm text-muted-foreground",children:[e.jsx("th",{className:"px-5 py-3 text-start font-medium",children:r("coordinator.colId","ID")}),e.jsx("th",{className:"px-5 py-3 text-start font-medium",children:r("coordinator.colConversation","Conversation")}),e.jsx("th",{className:"px-5 py-3 text-start font-medium",children:r("coordinator.colError","Error")}),e.jsx("th",{className:"px-5 py-3 text-start font-medium",children:r("coordinator.colTime","Time")}),e.jsx("th",{className:"px-5 py-3 text-end font-medium",children:r("coordinator.colActions","Actions")})]})}),e.jsx("tbody",{children:d.map(t=>e.jsxs("tr",{className:"border-b border-border/50 transition-colors hover:bg-muted/30",children:[e.jsx("td",{className:"px-5 py-3",children:e.jsx("code",{className:"text-xs text-muted-foreground",children:t.id})}),e.jsx("td",{className:"px-5 py-3",children:e.jsx("code",{className:"text-sm text-foreground",children:t.conversationId})}),e.jsxs("td",{className:"max-w-[300px] px-5 py-3 text-sm text-red-400",children:[e.jsx("div",{className:"truncate",title:t.error,children:t.error}),t.payload&&e.jsxs("button",{onClick:()=>U(t.id),className:"mt-1 inline-flex items-center gap-1 text-[11px] text-muted-foreground hover:text-foreground transition-colors","data-testid":`toggle-payload-${t.id}`,children:[I.has(t.id)?e.jsx(oe,{className:"h-3 w-3"}):e.jsx(de,{className:"h-3 w-3"}),e.jsx(Ne,{className:"h-3 w-3"}),r("coordinator.payload","Payload")]}),I.has(t.id)&&t.payload&&e.jsx("pre",{className:"mt-1 max-h-40 overflow-auto rounded-lg bg-card/50 p-2 text-xs text-foreground/80 border border-border/50","data-testid":`payload-content-${t.id}`,children:(()=>{try{return JSON.stringify(JSON.parse(t.payload),null,2)}catch{return t.payload}})()})]}),e.jsx("td",{className:"px-5 py-3 text-sm text-muted-foreground tabular-nums",children:new Date(t.timestamp).toLocaleString()}),e.jsx("td",{className:"px-5 py-3",children:e.jsxs("div",{className:"flex items-center justify-end gap-1",children:[e.jsx("button",{onClick:()=>V(t.id),disabled:N.isPending,title:r("coordinator.replay","Replay"),className:"rounded-md p-1.5 text-muted-foreground transition-colors hover:bg-accent/10 hover:text-accent disabled:opacity-50","data-testid":`replay-${t.id}`,children:e.jsx(ne,{className:"h-4 w-4"})}),e.jsx("button",{onClick:()=>P(t.id),disabled:l.isPending,title:r("coordinator.discard","Discard"),className:"rounded-md p-1.5 text-muted-foreground transition-colors hover:bg-red-500/10 hover:text-red-500 disabled:opacity-50","data-testid":`discard-${t.id}`,children:e.jsx(Q,{className:"h-4 w-4"})})]})})]},t.id))})]})})]}),e.jsx(ce,{open:E!==null,onOpenChange:t=>{t||P(null)},title:r("coordinator.confirmDiscardTitle","Discard dead-letter entry?"),description:r("coordinator.confirmDiscardDescription","This permanently removes the dead-lettered task. It cannot be replayed afterwards. This cannot be undone."),confirmLabel:r("coordinator.discard","Discard"),cancelLabel:r("coordinator.cancel","Cancel"),onConfirm:Z,variant:"destructive",isPending:l.isPending})]})}export{Me as CoordinatorPage}; +import{u as K,r as o,aq as R,a_ as A,c as W,f as X,j as e,A as O,a1 as ee,C as k,T as te,h as re,N as se,V as ae,Z as Q,a7 as oe,a8 as de,bB as ne,ae as ce,_ as x}from"./index-BnLj1hck.js";import{S as ie}from"./stream-badge-CFlwXVqu.js";import{E as le}from"./error-state-D4qtZYFq.js";import{c as ue,r as me,d as xe,p as he,g as pe,a as ge,C as fe}from"./coordinator-B4sE0rHY.js";import{G as be}from"./gauge-ML2DGGDJ.js";import{S as je}from"./server-BMZQ8ps7.js";import{T as ve}from"./trending-up-BAvzviUh.js";import{E as Ne}from"./eye-xZR8Jj8Y.js";const i={status:["coordinator","status"],deadLetters:["coordinator","dead-letters"]};function ye(){return K({queryKey:i.status,queryFn:pe,refetchInterval:5e3})}function we(){return K({queryKey:i.deadLetters,queryFn:ge,refetchInterval:1e4})}function Se(){const r=R();return A({mutationFn:me,onSuccess:()=>{r.invalidateQueries({queryKey:i.deadLetters}),r.invalidateQueries({queryKey:i.status})}})}function De(){const r=R();return A({mutationFn:xe,onSuccess:()=>{r.invalidateQueries({queryKey:i.deadLetters}),r.invalidateQueries({queryKey:i.status})}})}function Le(){const r=R();return A({mutationFn:he,onSuccess:()=>{r.invalidateQueries({queryKey:i.deadLetters}),r.invalidateQueries({queryKey:i.status})}})}const F=20;function Ce(){const[r,b]=o.useState(null),[S,m]=o.useState(!1),[D,h]=o.useState([]),d=o.useRef(null),j=o.useCallback(()=>{try{const c=ue();d.current=c,c.addEventListener("status",L=>{try{const v=JSON.parse(L.data);b(v),m(!0);const p={...v,receivedAt:new Date().toISOString()};h(N=>{const l=[...N,p];return l.length>F?l.slice(-F):l})}catch{}}),c.onerror=()=>{m(!1)},c.onopen=()=>{m(!0)}}catch{m(!1)}},[]);return o.useEffect(()=>(j(),()=>{var c;(c=d.current)==null||c.close()}),[j]),{liveStatus:r,sseConnected:S,eventHistory:D}}function Ee(r){try{return new Intl.DateTimeFormat(void 0,{hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(new Date(r))}catch{return r}}function Me(){const{t:r}=W(),b=X(t=>t.maybeAutoStart);o.useEffect(()=>{const t=setTimeout(()=>b("coordinator"),500);return()=>clearTimeout(t)},[b]);const{data:S,isLoading:m,isError:D,refetch:h}=ye(),{data:d,isLoading:j,refetch:c}=we(),{liveStatus:L,sseConnected:v,eventHistory:p}=Ce(),N=Se(),l=De(),$=Le(),[H,C]=o.useState(!1),[E,P]=o.useState(null),[y,_]=o.useState(10),[I,J]=o.useState(new Set),s=L??S,T=(s==null?void 0:s.coordinatorType)==="nats",g=(s==null?void 0:s.connected)??!1,f=o.useRef(null);o.useEffect(()=>(f.current&&clearInterval(f.current),f.current=window.setInterval(()=>{h(),c()},y*1e3),()=>{f.current&&clearInterval(f.current)}),[y,h,c]);const w=o.useRef(null),[q,B]=o.useState(null);o.useEffect(()=>{if(!s)return;const t=Date.now();if(w.current){const a=(t-w.current.time)/1e3;if(a>0){const n=(s.totalProcessed-w.current.count)/a;B(Math.max(0,n))}}w.current={count:s.totalProcessed,time:t}},[s]);const u=o.useMemo(()=>{if(!s)return null;const t=s.totalProcessed+s.totalDeadLettered;return t===0?100:Math.round(s.totalProcessed/t*100)},[s]),Y=o.useMemo(()=>s?Object.keys(s.queueDepths).length:0,[s]),G=o.useMemo(()=>s?Object.values(s.queueDepths).reduce((t,a)=>t+a,0):0,[s]),U=o.useCallback(t=>{J(a=>{const n=new Set(a);return n.has(t)?n.delete(t):n.add(t),n})},[]),M=o.useMemo(()=>{if(!d||d.length===0)return[];const t=new Map;for(const a of d){const n=a.error.includes("timeout")?"Timeout":a.error.includes("503")||a.error.includes("502")?"Backend Unavailable":a.error.includes("401")||a.error.includes("403")?"Auth Error":a.error.includes("rate")?"Rate Limited":"Other";t.set(n,(t.get(n)??0)+1)}return[...t.entries()].sort((a,n)=>n[1]-a[1])},[d]),V=t=>{N.mutate(t,{onSuccess:()=>x.success(r("coordinator.replaySuccess","Dead-letter replayed")),onError:()=>x.error(r("coordinator.replayError","Failed to replay"))})},Z=()=>{E&&l.mutate(E,{onSuccess:()=>{x.success(r("coordinator.discardSuccess","Dead-letter discarded")),P(null)},onError:()=>x.error(r("coordinator.discardError","Failed to discard"))})},z=()=>{$.mutate(void 0,{onSuccess:t=>{x.success(r("coordinator.purgeSuccess",`Purged ${t} entries`)),C(!1)},onError:()=>x.error(r("coordinator.purgeError","Failed to purge"))})};return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(O,{className:"h-7 w-7 text-accent"}),e.jsxs("div",{className:"flex-1",children:[e.jsx("h1",{className:"text-2xl font-bold text-foreground",children:r("coordinator.title","Coordinator Dashboard")}),e.jsx("p",{className:"text-sm text-muted-foreground",children:r("coordinator.subtitle","Monitor conversation processing and manage dead-letter entries")})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(ee,{className:"h-4 w-4 text-muted-foreground animate-spin",style:{animationDuration:`${y}s`}}),e.jsxs("select",{value:y,onChange:t=>_(Number(t.target.value)),className:"h-8 appearance-none rounded-lg border border-input bg-background pe-6 ps-2 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-primary","data-testid":"refresh-interval",children:[e.jsx("option",{value:5,children:"5s"}),e.jsx("option",{value:10,children:"10s"}),e.jsx("option",{value:30,children:"30s"}),e.jsx("option",{value:60,children:"60s"})]}),q!==null&&e.jsxs("span",{className:"inline-flex items-center gap-1 rounded-full bg-accent/10 px-2.5 py-1 text-xs font-semibold text-accent","data-testid":"throughput-badge",children:[e.jsx(be,{className:"h-3.5 w-3.5"}),q<.1?"<0.1":q.toFixed(1)," ",r("coordinator.tasksPerSec","tasks/s")]})]})]}),m&&!s?e.jsx("div",{className:"cq-stat-grid",children:[...Array(4)].map((t,a)=>e.jsxs("div",{className:"animate-pulse rounded-xl border border-border bg-card p-5",children:[e.jsx("div",{className:"h-4 w-24 rounded bg-muted"}),e.jsx("div",{className:"mt-3 h-8 w-16 rounded bg-muted"})]},a))}):D&&!s?e.jsx(le,{message:r("common.error","Something went wrong"),onRetry:()=>h(),retryLabel:r("common.retry","Retry")}):s?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"rounded-xl border border-border bg-card p-5","data-testid":"coordinator-connection-card",children:e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx("div",{className:`flex h-12 w-12 items-center justify-center rounded-xl ${g?"bg-emerald-500/10":"bg-red-500/10"}`,children:T?e.jsx(fe,{className:`h-6 w-6 ${g?"text-emerald-500":"text-red-500"}`}):e.jsx(je,{className:`h-6 w-6 ${g?"text-emerald-500":"text-red-500"}`})}),e.jsxs("div",{className:"flex-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:`inline-flex h-2.5 w-2.5 rounded-full ${g?"bg-emerald-500 animate-pulse":"bg-red-500"}`}),e.jsx("span",{className:`text-lg font-semibold ${g?"text-emerald-500":"text-red-500"}`,children:s.connectionStatus}),e.jsx("span",{className:`ms-2 rounded-full px-2.5 py-0.5 text-xs font-medium ${T?"bg-blue-500/10 text-blue-500":"bg-purple-500/10 text-purple-500"}`,"data-testid":"coordinator-type-card",children:T?"NATS JetStream":"In-Memory"})]}),e.jsxs("p",{className:"text-xs text-muted-foreground mt-0.5",children:[r("coordinator.activeConversations","Active conversations"),": ",s.activeConversations]})]}),e.jsx(ie,{connected:v})]})}),e.jsxs("div",{className:"grid gap-4 sm:grid-cols-3",children:[e.jsxs("div",{className:"rounded-xl border border-border bg-card p-5","data-testid":"coordinator-processed-card",children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm font-medium text-muted-foreground",children:[e.jsx(k,{className:"h-4 w-4 text-emerald-500"}),r("coordinator.processed","Tasks Processed")]}),e.jsx("p",{className:"mt-2 text-2xl font-bold text-foreground tabular-nums",children:s.totalProcessed.toLocaleString()})]}),e.jsxs("div",{className:"rounded-xl border border-border bg-card p-5","data-testid":"coordinator-dead-letter-card",children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm font-medium text-muted-foreground",children:[e.jsx(te,{className:"h-4 w-4 text-amber-500"}),r("coordinator.deadLettered","Dead-Lettered")]}),e.jsx("p",{className:`mt-2 text-2xl font-bold tabular-nums ${s.totalDeadLettered>0?"text-amber-500":"text-foreground"}`,children:s.totalDeadLettered.toLocaleString()})]}),e.jsxs("div",{className:"rounded-xl border border-border bg-card p-5","data-testid":"coordinator-success-rate-card",children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm font-medium text-muted-foreground",children:[e.jsx(ve,{className:"h-4 w-4 text-blue-500"}),r("coordinator.successRate","Success Rate")]}),e.jsx("p",{className:`mt-2 text-2xl font-bold tabular-nums ${u!==null&&u<90?"text-amber-500":"text-emerald-500"}`,children:u!==null?`${u}%`:"—"}),u!==null&&s.totalProcessed+s.totalDeadLettered>0&&e.jsxs("div",{className:"mt-2 flex h-2 overflow-hidden rounded-full bg-muted","data-testid":"success-rate-bar",children:[e.jsx("div",{className:"bg-emerald-500 transition-all",style:{width:`${u}%`}}),e.jsx("div",{className:"bg-red-400 transition-all",style:{width:`${100-u}%`}})]})]})]})]}):e.jsxs("div",{className:"flex flex-col items-center justify-center rounded-xl border-2 border-dashed border-border py-16",children:[e.jsx(O,{className:"h-12 w-12 text-muted-foreground/40"}),e.jsx("p",{className:"mt-4 text-lg font-medium text-muted-foreground",children:r("coordinator.empty","No coordinator data available")}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground/70",children:r("coordinator.emptyHint","The coordinator service may still be starting up. Data will appear automatically.")})]}),M.length>0&&e.jsx("div",{className:"flex flex-wrap gap-2",children:M.map(([t,a])=>e.jsxs("span",{className:"inline-flex items-center gap-1.5 rounded-full border border-border bg-card px-3 py-1 text-xs font-medium text-muted-foreground",children:[e.jsx("span",{className:"h-2 w-2 rounded-full bg-red-400"}),t,": ",a]},t))}),e.jsxs("div",{className:"rounded-xl border border-border bg-card p-5","data-testid":"coordinator-queues",children:[e.jsxs("div",{className:"mb-3 flex items-center justify-between",children:[e.jsx("h2",{className:"text-lg font-semibold text-foreground",children:r("coordinator.activeQueues","Active Queues")}),Y>0&&e.jsxs("span",{className:"rounded-full bg-accent/10 px-2.5 py-0.5 text-xs font-semibold text-accent tabular-nums",children:[G," ",r("coordinator.totalPending","pending")]})]}),s&&Object.keys(s.queueDepths).length>0?e.jsx("div",{className:"space-y-2",children:Object.entries(s.queueDepths).map(([t,a])=>e.jsxs("div",{className:"flex items-center gap-3 rounded-lg bg-muted/50 px-3 py-2",children:[e.jsxs(re,{to:"/manage/conversations",className:"flex-1 truncate font-mono text-sm text-foreground hover:text-primary transition-colors",title:t,children:[t,e.jsx(se,{className:"ms-1.5 inline h-3 w-3 text-muted-foreground"})]}),e.jsxs("span",{className:"rounded-full bg-accent/10 px-2.5 py-0.5 text-sm font-semibold text-accent tabular-nums",children:[a," ",r("coordinator.queued","queued")]})]},t))}):e.jsxs("div",{className:"flex items-center gap-2 py-4 text-sm text-muted-foreground",children:[e.jsx(k,{className:"h-5 w-5 text-emerald-500/50"}),r("coordinator.noActiveQueues","No active conversations being processed")]})]}),p.length>0&&e.jsxs("div",{className:"rounded-xl border border-border bg-card p-5","data-testid":"coordinator-event-history",children:[e.jsxs("h2",{className:"mb-3 flex items-center gap-2 text-lg font-semibold text-foreground",children:[e.jsx(ae,{className:"h-4 w-4 text-muted-foreground"}),r("coordinator.eventHistory","Event History"),e.jsxs("span",{className:"text-xs font-normal text-muted-foreground",children:["(",r("coordinator.lastNSnapshots","Last {{count}} snapshots",{count:p.length}),")"]})]}),e.jsx("div",{className:"max-h-48 overflow-y-auto space-y-0.5 rounded-lg bg-muted/30 p-2 font-mono text-[11px]",children:[...p].reverse().map((t,a)=>e.jsxs("div",{className:"flex items-center gap-2 rounded px-2 py-1 text-muted-foreground hover:bg-muted/50 transition-colors",children:[e.jsxs("span",{className:"text-foreground/40 tabular-nums",children:["[",Ee(t.receivedAt),"]"]}),e.jsxs("span",{className:"text-emerald-500 tabular-nums",children:["✓",t.totalProcessed.toLocaleString()]}),e.jsxs("span",{className:`tabular-nums ${t.totalDeadLettered>0?"text-red-400":"text-muted-foreground/40"}`,children:["✗",t.totalDeadLettered.toLocaleString()]}),e.jsxs("span",{className:"text-blue-400 tabular-nums",children:["⧗",Object.keys(t.queueDepths).length,"q"]})]},a))})]}),e.jsxs("div",{className:"rounded-xl border border-border bg-card","data-testid":"coordinator-dead-letters",children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-border px-5 py-4",children:[e.jsx("h2",{className:"text-lg font-semibold text-foreground",children:r("coordinator.deadLetterTitle","Dead-Letter Queue")}),e.jsx("div",{className:"flex items-center gap-2",children:d&&d.length>0&&(H?e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-sm text-muted-foreground",children:r("coordinator.confirmPurge","Purge all?")}),e.jsx("button",{onClick:z,disabled:$.isPending,className:"rounded-lg bg-red-500 px-3 py-1.5 text-sm font-medium text-white transition-colors hover:bg-red-600 disabled:opacity-50",children:r("coordinator.yes","Yes")}),e.jsx("button",{onClick:()=>C(!1),className:"rounded-lg border border-border px-3 py-1.5 text-sm font-medium text-foreground transition-colors hover:bg-muted",children:r("coordinator.cancel","Cancel")})]}):e.jsxs("button",{onClick:()=>C(!0),className:"flex items-center gap-1.5 rounded-lg border border-border px-3 py-1.5 text-sm font-medium text-muted-foreground transition-colors hover:border-red-500/50 hover:text-red-500","data-testid":"purge-dead-letters-btn",children:[e.jsx(Q,{className:"h-3.5 w-3.5"}),r("coordinator.purgeAll","Purge All")]}))})]}),j?e.jsx("div",{className:"p-8 text-center",children:e.jsx("div",{className:"mx-auto h-6 w-6 animate-spin rounded-full border-2 border-accent border-t-transparent"})}):!d||d.length===0?e.jsxs("div",{className:"p-8 text-center text-muted-foreground","data-testid":"dead-letters-empty",children:[e.jsx(k,{className:"mx-auto mb-2 h-8 w-8 text-emerald-500/50"}),e.jsx("p",{children:r("coordinator.noDeadLetters","No dead-letter entries")})]}):e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full","data-testid":"dead-letters-table",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-border text-start text-sm text-muted-foreground",children:[e.jsx("th",{className:"px-5 py-3 text-start font-medium",children:r("coordinator.colId","ID")}),e.jsx("th",{className:"px-5 py-3 text-start font-medium",children:r("coordinator.colConversation","Conversation")}),e.jsx("th",{className:"px-5 py-3 text-start font-medium",children:r("coordinator.colError","Error")}),e.jsx("th",{className:"px-5 py-3 text-start font-medium",children:r("coordinator.colTime","Time")}),e.jsx("th",{className:"px-5 py-3 text-end font-medium",children:r("coordinator.colActions","Actions")})]})}),e.jsx("tbody",{children:d.map(t=>e.jsxs("tr",{className:"border-b border-border/50 transition-colors hover:bg-muted/30",children:[e.jsx("td",{className:"px-5 py-3",children:e.jsx("code",{className:"text-xs text-muted-foreground",children:t.id})}),e.jsx("td",{className:"px-5 py-3",children:e.jsx("code",{className:"text-sm text-foreground",children:t.conversationId})}),e.jsxs("td",{className:"max-w-[300px] px-5 py-3 text-sm text-red-400",children:[e.jsx("div",{className:"truncate",title:t.error,children:t.error}),t.payload&&e.jsxs("button",{onClick:()=>U(t.id),className:"mt-1 inline-flex items-center gap-1 text-[11px] text-muted-foreground hover:text-foreground transition-colors","data-testid":`toggle-payload-${t.id}`,children:[I.has(t.id)?e.jsx(oe,{className:"h-3 w-3"}):e.jsx(de,{className:"h-3 w-3"}),e.jsx(Ne,{className:"h-3 w-3"}),r("coordinator.payload","Payload")]}),I.has(t.id)&&t.payload&&e.jsx("pre",{className:"mt-1 max-h-40 overflow-auto rounded-lg bg-card/50 p-2 text-xs text-foreground/80 border border-border/50","data-testid":`payload-content-${t.id}`,children:(()=>{try{return JSON.stringify(JSON.parse(t.payload),null,2)}catch{return t.payload}})()})]}),e.jsx("td",{className:"px-5 py-3 text-sm text-muted-foreground tabular-nums",children:new Date(t.timestamp).toLocaleString()}),e.jsx("td",{className:"px-5 py-3",children:e.jsxs("div",{className:"flex items-center justify-end gap-1",children:[e.jsx("button",{onClick:()=>V(t.id),disabled:N.isPending,title:r("coordinator.replay","Replay"),className:"rounded-md p-1.5 text-muted-foreground transition-colors hover:bg-accent/10 hover:text-accent disabled:opacity-50","data-testid":`replay-${t.id}`,children:e.jsx(ne,{className:"h-4 w-4"})}),e.jsx("button",{onClick:()=>P(t.id),disabled:l.isPending,title:r("coordinator.discard","Discard"),className:"rounded-md p-1.5 text-muted-foreground transition-colors hover:bg-red-500/10 hover:text-red-500 disabled:opacity-50","data-testid":`discard-${t.id}`,children:e.jsx(Q,{className:"h-4 w-4"})})]})})]},t.id))})]})})]}),e.jsx(ce,{open:E!==null,onOpenChange:t=>{t||P(null)},title:r("coordinator.confirmDiscardTitle","Discard dead-letter entry?"),description:r("coordinator.confirmDiscardDescription","This permanently removes the dead-lettered task. It cannot be replayed afterwards. This cannot be undone."),confirmLabel:r("coordinator.discard","Discard"),cancelLabel:r("coordinator.cancel","Cancel"),onConfirm:Z,variant:"destructive",isPending:l.isPending})]})}export{Me as CoordinatorPage}; diff --git a/src/main/resources/META-INF/resources/assets/cpu-BsIZspVa.js b/src/main/resources/META-INF/resources/assets/cpu-zEsE2ia0.js similarity index 94% rename from src/main/resources/META-INF/resources/assets/cpu-BsIZspVa.js rename to src/main/resources/META-INF/resources/assets/cpu-zEsE2ia0.js index c1f106b592..227f57efda 100644 --- a/src/main/resources/META-INF/resources/assets/cpu-BsIZspVa.js +++ b/src/main/resources/META-INF/resources/assets/cpu-zEsE2ia0.js @@ -1,4 +1,4 @@ -import{x as h}from"./index-BY6d8wze.js";/** +import{x as h}from"./index-BnLj1hck.js";/** * @license lucide-react v0.577.0 - ISC * * This source code is licensed under the ISC license. diff --git a/src/main/resources/META-INF/resources/assets/create-or-wizard-dialog-DrB8VzrL.js b/src/main/resources/META-INF/resources/assets/create-or-wizard-dialog-qFzrzZXk.js similarity index 91% rename from src/main/resources/META-INF/resources/assets/create-or-wizard-dialog-DrB8VzrL.js rename to src/main/resources/META-INF/resources/assets/create-or-wizard-dialog-qFzrzZXk.js index f61dde925d..3fc27da3cd 100644 --- a/src/main/resources/META-INF/resources/assets/create-or-wizard-dialog-DrB8VzrL.js +++ b/src/main/resources/META-INF/resources/assets/create-or-wizard-dialog-qFzrzZXk.js @@ -1 +1 @@ -import{c as n,$ as m,j as e,P as x}from"./index-BY6d8wze.js";import{A as u}from"./accessible-dialog-BO2vat1a.js";import{W as p}from"./wand-sparkles-DCdkrkbT.js";function f({open:s,onClose:t,type:i,wizardPath:d,onQuickCreate:o}){const{t:r}=n(),l=m(),c=()=>{t(),l(d)},a=i==="agent"?r("common.agent","Agent"):r("common.group","Group");return e.jsx(u,{open:s,onClose:t,title:r("createOrWizard.title",{type:a,defaultValue:`New ${a}`}),testId:"create-or-wizard-dialog",maxWidth:"max-w-2xl",children:e.jsx("div",{className:"p-6 sm:p-8",children:e.jsxs("div",{className:"grid grid-cols-1 gap-4 sm:grid-cols-2 sm:gap-6",children:[e.jsxs("button",{onClick:o,className:"group flex flex-col items-start gap-4 rounded-xl border-2 border-border bg-card p-6 text-start transition-all hover:-translate-y-1 hover:border-primary/60 hover:shadow-xl","data-testid":"choice-quick-create",children:[e.jsx("div",{className:"flex h-12 w-12 items-center justify-center rounded-lg bg-primary/10 text-primary transition-colors group-hover:bg-primary/20",children:e.jsx(x,{className:"h-6 w-6"})}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-base font-semibold text-foreground",children:r("createOrWizard.quickCreate","Quick Create")}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground leading-relaxed",children:r("createOrWizard.quickCreateDesc","Set a name and description, configure details later.")})]})]}),e.jsxs("button",{onClick:c,className:"group flex flex-col items-start gap-4 rounded-xl border-2 border-border bg-card p-6 text-start transition-all hover:-translate-y-1 hover:border-amber-500/60 hover:shadow-xl","data-testid":"choice-wizard",children:[e.jsx("div",{className:"flex h-12 w-12 items-center justify-center rounded-lg bg-amber-500/10 text-amber-500 transition-colors group-hover:bg-amber-500/20",children:e.jsx(p,{className:"h-6 w-6"})}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-base font-semibold text-foreground",children:r("createOrWizard.guidedSetup","Guided Setup")}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground leading-relaxed",children:r("createOrWizard.guidedSetupDesc","Step-by-step wizard with LLM provider, prompts, and deployment.")})]})]})]})})})}export{f as C}; +import{c as n,$ as m,j as e,P as x}from"./index-BnLj1hck.js";import{A as u}from"./accessible-dialog-C2wu1H5q.js";import{W as p}from"./wand-sparkles-BtCP1jzO.js";function f({open:s,onClose:t,type:i,wizardPath:d,onQuickCreate:o}){const{t:r}=n(),l=m(),c=()=>{t(),l(d)},a=i==="agent"?r("common.agent","Agent"):r("common.group","Group");return e.jsx(u,{open:s,onClose:t,title:r("createOrWizard.title",{type:a,defaultValue:`New ${a}`}),testId:"create-or-wizard-dialog",maxWidth:"max-w-2xl",children:e.jsx("div",{className:"p-6 sm:p-8",children:e.jsxs("div",{className:"grid grid-cols-1 gap-4 sm:grid-cols-2 sm:gap-6",children:[e.jsxs("button",{onClick:o,className:"group flex flex-col items-start gap-4 rounded-xl border-2 border-border bg-card p-6 text-start transition-all hover:-translate-y-1 hover:border-primary/60 hover:shadow-xl","data-testid":"choice-quick-create",children:[e.jsx("div",{className:"flex h-12 w-12 items-center justify-center rounded-lg bg-primary/10 text-primary transition-colors group-hover:bg-primary/20",children:e.jsx(x,{className:"h-6 w-6"})}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-base font-semibold text-foreground",children:r("createOrWizard.quickCreate","Quick Create")}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground leading-relaxed",children:r("createOrWizard.quickCreateDesc","Set a name and description, configure details later.")})]})]}),e.jsxs("button",{onClick:c,className:"group flex flex-col items-start gap-4 rounded-xl border-2 border-border bg-card p-6 text-start transition-all hover:-translate-y-1 hover:border-amber-500/60 hover:shadow-xl","data-testid":"choice-wizard",children:[e.jsx("div",{className:"flex h-12 w-12 items-center justify-center rounded-lg bg-amber-500/10 text-amber-500 transition-colors group-hover:bg-amber-500/20",children:e.jsx(p,{className:"h-6 w-6"})}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-base font-semibold text-foreground",children:r("createOrWizard.guidedSetup","Guided Setup")}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground leading-relaxed",children:r("createOrWizard.guidedSetupDesc","Step-by-step wizard with LLM provider, prompts, and deployment.")})]})]})]})})})}export{f as C}; diff --git a/src/main/resources/META-INF/resources/assets/cssMode-BQhiich3.js b/src/main/resources/META-INF/resources/assets/cssMode-BQhiich3.js new file mode 100644 index 0000000000..e17ca9db67 --- /dev/null +++ b/src/main/resources/META-INF/resources/assets/cssMode-BQhiich3.js @@ -0,0 +1 @@ +import{c as g}from"./workers-ckLFiTM8.js";import{C as l,H as h,D as c,a as u,R as f,b as _,c as w,d as k,F as v,e as D,S as P,f as R,g as I}from"./lspLanguageFeatures-CAae2_b-.js";import{h as ue,i as fe,j as _e,t as we,k as ke}from"./lspLanguageFeatures-CAae2_b-.js";import{l as o}from"./editor-registry-jvsNWt75.js";import"./index-BnLj1hck.js";import"./resources-D97MNqv3.js";import"./parser-editor-CPhjadeF.js";import"./useQueries-DZrQsbjS.js";import"./accessible-dialog-C2wu1H5q.js";import"./input-BV8V9kav.js";import"./empty-state-DxZE48rx.js";import"./error-state-D4qtZYFq.js";import"./use-debounce-DMHuVYwD.js";import"./use-resources-xPGGDyiq.js";import"./cascade-save-BHTTkwOb.js";import"./workflows-DTtF3KEG.js";import"./type-ChzGm4vJ.js";import"./git-compare-arrows-HXbtfCTs.js";import"./undo-2-Dh2nRAeV.js";import"./save-s-dFqxLL.js";import"./eye-xZR8Jj8Y.js";import"./secret-key-picker-BCXXdOJ-.js";import"./use-secrets--RofX_r2.js";import"./eye-off-PKiH0Asw.js";import"./tool-approvals-editor-S2UA66Hb.js";import"./timer-CShnmlWE.js";import"./arrow-right-left-J0fZSu2z.js";import"./file-output-DlS0SPnt.js";import"./shield-Dy-B1VeF.js";import"./info-cNcTVsFc.js";import"./types-tS6i07ms.js";import"./scale-BnMnNt4Y.js";import"./gauge-ML2DGGDJ.js";import"./dollar-sign-HonLwnZc.js";import"./handshake-foe5KMFV.js";import"./cpu-zEsE2ia0.js";import"./server-BMZQ8ps7.js";import"./upload-D1UCHnd4.js";import"./lock-CL2SzOGd.js";import"./tag-Cd1R14bi.js";const C=120*1e3;class A{constructor(n){this._defaults=n,this._worker=null,this._client=null,this._idleCheckInterval=window.setInterval(()=>this._checkIfIdle(),30*1e3),this._lastUsedTime=0,this._configChangeListener=this._defaults.onDidChange(()=>this._stopWorker())}_stopWorker(){this._worker&&(this._worker.dispose(),this._worker=null),this._client=null}dispose(){clearInterval(this._idleCheckInterval),this._configChangeListener.dispose(),this._stopWorker()}_checkIfIdle(){if(!this._worker)return;Date.now()-this._lastUsedTime>C&&this._stopWorker()}_getClient(){return this._lastUsedTime=Date.now(),this._client||(this._worker=g({moduleId:"vs/language/css/cssWorker",createWorker:()=>new Worker(new URL("/assets/css.worker-3SqvFb2j.js",import.meta.url),{type:"module"}),label:this._defaults.languageId,createData:{options:this._defaults.options,languageId:this._defaults.languageId}}),this._client=this._worker.getProxy()),this._client}getLanguageServiceWorker(...n){let e;return this._getClient().then(a=>{e=a}).then(a=>{if(this._worker)return this._worker.withSyncedResources(n)}).then(a=>e)}}function le(s){const n=[],e=[],a=new A(s);n.push(a);const r=(...t)=>a.getLanguageServiceWorker(...t);function d(){const{languageId:t,modeConfiguration:i}=s;m(e),i.completionItems&&e.push(o.registerCompletionItemProvider(t,new l(r,["/","-",":"]))),i.hovers&&e.push(o.registerHoverProvider(t,new h(r))),i.documentHighlights&&e.push(o.registerDocumentHighlightProvider(t,new c(r))),i.definitions&&e.push(o.registerDefinitionProvider(t,new u(r))),i.references&&e.push(o.registerReferenceProvider(t,new f(r))),i.documentSymbols&&e.push(o.registerDocumentSymbolProvider(t,new _(r))),i.rename&&e.push(o.registerRenameProvider(t,new w(r))),i.colors&&e.push(o.registerColorProvider(t,new k(r))),i.foldingRanges&&e.push(o.registerFoldingRangeProvider(t,new v(r))),i.diagnostics&&e.push(new D(t,r,s.onDidChange)),i.selectionRanges&&e.push(o.registerSelectionRangeProvider(t,new P(r))),i.documentFormattingEdits&&e.push(o.registerDocumentFormattingEditProvider(t,new R(r))),i.documentRangeFormattingEdits&&e.push(o.registerDocumentRangeFormattingEditProvider(t,new I(r)))}return d(),n.push(p(e)),p(n)}function p(s){return{dispose:()=>m(s)}}function m(s){for(;s.length;)s.pop().dispose()}export{l as CompletionAdapter,u as DefinitionAdapter,D as DiagnosticsAdapter,k as DocumentColorAdapter,R as DocumentFormattingEditProvider,c as DocumentHighlightAdapter,ue as DocumentLinkAdapter,I as DocumentRangeFormattingEditProvider,_ as DocumentSymbolAdapter,v as FoldingRangeAdapter,h as HoverAdapter,f as ReferenceAdapter,w as RenameAdapter,P as SelectionRangeAdapter,A as WorkerManager,fe as fromPosition,_e as fromRange,le as setupMode,we as toRange,ke as toTextEdit}; diff --git a/src/main/resources/META-INF/resources/assets/cssMode-DFvnCjHl.js b/src/main/resources/META-INF/resources/assets/cssMode-DFvnCjHl.js deleted file mode 100644 index 6984bae2f7..0000000000 --- a/src/main/resources/META-INF/resources/assets/cssMode-DFvnCjHl.js +++ /dev/null @@ -1 +0,0 @@ -import{c as g}from"./workers-a5re0z0Q.js";import{C as l,H as h,D as c,a as u,R as f,b as _,c as w,d as k,F as v,e as D,S as P,f as R,g as I}from"./lspLanguageFeatures-Ajeavr0P.js";import{h as ne,i as ae,j as pe,t as de,k as me}from"./lspLanguageFeatures-Ajeavr0P.js";import{l as o}from"./editor-registry-CIV_g9hj.js";import"./index-BY6d8wze.js";import"./resources-R5ikMSzo.js";import"./parser-editor-DJVsdXlv.js";import"./type-SbeC_oGu.js";import"./git-compare-arrows-pI8Ehpf-.js";import"./undo-2-CF9h_dkU.js";import"./save-lzTRlOlB.js";import"./eye-Dbrf-yrM.js";import"./secret-key-picker-TXey-VQE.js";import"./use-secrets-C_oj4VYh.js";import"./eye-off-DQKzJHI5.js";import"./tool-approvals-editor-BKW-ZLXY.js";import"./timer-BX3xgSur.js";import"./arrow-right-left-Or_4oRf0.js";import"./file-output-BA4KZHPi.js";import"./shield-Ce05kery.js";import"./info-vszmN4vn.js";import"./types-BY9zm5d-.js";import"./scale-DJXpJ1ID.js";import"./gauge-D0qrGV1d.js";import"./dollar-sign-Dt9VyGPU.js";import"./handshake-d__LQWU9.js";import"./cpu-BsIZspVa.js";import"./server-CeKDVLCh.js";import"./upload-DxPMOlxt.js";import"./lock-CPVVTGkJ.js";import"./tag-DrXWC0RK.js";const C=120*1e3;class A{constructor(n){this._defaults=n,this._worker=null,this._client=null,this._idleCheckInterval=window.setInterval(()=>this._checkIfIdle(),30*1e3),this._lastUsedTime=0,this._configChangeListener=this._defaults.onDidChange(()=>this._stopWorker())}_stopWorker(){this._worker&&(this._worker.dispose(),this._worker=null),this._client=null}dispose(){clearInterval(this._idleCheckInterval),this._configChangeListener.dispose(),this._stopWorker()}_checkIfIdle(){if(!this._worker)return;Date.now()-this._lastUsedTime>C&&this._stopWorker()}_getClient(){return this._lastUsedTime=Date.now(),this._client||(this._worker=g({moduleId:"vs/language/css/cssWorker",createWorker:()=>new Worker(new URL("/assets/css.worker-3SqvFb2j.js",import.meta.url),{type:"module"}),label:this._defaults.languageId,createData:{options:this._defaults.options,languageId:this._defaults.languageId}}),this._client=this._worker.getProxy()),this._client}getLanguageServiceWorker(...n){let e;return this._getClient().then(a=>{e=a}).then(a=>{if(this._worker)return this._worker.withSyncedResources(n)}).then(a=>e)}}function ie(s){const n=[],e=[],a=new A(s);n.push(a);const r=(...t)=>a.getLanguageServiceWorker(...t);function m(){const{languageId:t,modeConfiguration:i}=s;d(e),i.completionItems&&e.push(o.registerCompletionItemProvider(t,new l(r,["/","-",":"]))),i.hovers&&e.push(o.registerHoverProvider(t,new h(r))),i.documentHighlights&&e.push(o.registerDocumentHighlightProvider(t,new c(r))),i.definitions&&e.push(o.registerDefinitionProvider(t,new u(r))),i.references&&e.push(o.registerReferenceProvider(t,new f(r))),i.documentSymbols&&e.push(o.registerDocumentSymbolProvider(t,new _(r))),i.rename&&e.push(o.registerRenameProvider(t,new w(r))),i.colors&&e.push(o.registerColorProvider(t,new k(r))),i.foldingRanges&&e.push(o.registerFoldingRangeProvider(t,new v(r))),i.diagnostics&&e.push(new D(t,r,s.onDidChange)),i.selectionRanges&&e.push(o.registerSelectionRangeProvider(t,new P(r))),i.documentFormattingEdits&&e.push(o.registerDocumentFormattingEditProvider(t,new R(r))),i.documentRangeFormattingEdits&&e.push(o.registerDocumentRangeFormattingEditProvider(t,new I(r)))}return m(),n.push(p(e)),p(n)}function p(s){return{dispose:()=>d(s)}}function d(s){for(;s.length;)s.pop().dispose()}export{l as CompletionAdapter,u as DefinitionAdapter,D as DiagnosticsAdapter,k as DocumentColorAdapter,R as DocumentFormattingEditProvider,c as DocumentHighlightAdapter,ne as DocumentLinkAdapter,I as DocumentRangeFormattingEditProvider,_ as DocumentSymbolAdapter,v as FoldingRangeAdapter,h as HoverAdapter,f as ReferenceAdapter,w as RenameAdapter,P as SelectionRangeAdapter,A as WorkerManager,ae as fromPosition,pe as fromRange,ie as setupMode,de as toRange,me as toTextEdit}; diff --git a/src/main/resources/META-INF/resources/assets/dashboard-DpMaPw2X.js b/src/main/resources/META-INF/resources/assets/dashboard-km8ODRhV.js similarity index 97% rename from src/main/resources/META-INF/resources/assets/dashboard-DpMaPw2X.js rename to src/main/resources/META-INF/resources/assets/dashboard-km8ODRhV.js index 4fb6a04ed5..6dd7b5937f 100644 --- a/src/main/resources/META-INF/resources/assets/dashboard-DpMaPw2X.js +++ b/src/main/resources/META-INF/resources/assets/dashboard-km8ODRhV.js @@ -1 +1 @@ -import{g as W,a as L,p as C,u as N,b as O,c as q,d as F,r as j,e as k,f as I,B as b,W as U,M as A,F as B,j as e,L as K,A as _,C as $,T as G,S as o,h as n,i as v,P as S,k as d,l as Q,m as Y,n as H,K as J,o as X,q as R,s as Z,t as D,v as ee,w as ae}from"./index-BY6d8wze.js";import{g as se}from"./workflows-CAxBNXSH.js";import{g as te,C as re}from"./coordinator-GDpiIhTi.js";import{u as ne}from"./use-secrets-C_oj4VYh.js";import{C as i,a as l,b as oe,c as ie}from"./card-Blk9R4_z.js";import{S as le}from"./server-CeKDVLCh.js";import{W as de}from"./wand-sparkles-DCdkrkbT.js";async function ce(){const[a,t,u]=await Promise.all([W(1e3,0).catch(()=>[]),se(1e3,0).catch(()=>[]),L(1e3,0).catch(()=>[])]),c=new Set(a.map(m=>C(m.resource).id)),p=new Set(t.map(m=>C(m.resource).id));return{agentCount:c.size,workflowCount:p.size,conversationCount:u.length,resourceCount:0}}function me(){return N({queryKey:["dashboard","stats"],queryFn:ce,staleTime:3e4})}function xe(){return O(4,0)}function ue(a=5){return N({queryKey:["dashboard","recent-conversations",a],queryFn:()=>L(a),staleTime:3e4})}function he(){return N({queryKey:["dashboard","coordinator-status"],queryFn:te,staleTime:6e4,retry:1})}const T={READY:"bg-emerald-500/10 text-emerald-600 dark:text-emerald-400",IN_PROGRESS:"bg-blue-500/10 text-blue-600 dark:text-blue-400",ERROR:"bg-red-500/10 text-red-600 dark:text-red-400",ENDED:"bg-gray-500/10 text-gray-500"};function Ce(){const{t:a}=q(),{data:t,isLoading:u}=me(),{data:c,isLoading:p}=xe(),{data:m,isLoading:E}=ue(5),{data:h}=he(),g=F(),{data:x}=ne(),{data:f=[]}=O(50),w=j.useMemo(()=>c?k(c).slice(0,4):[],[c]),M=j.useMemo(()=>{const s=new Map;if(f.length>0)for(const r of k(f))r.name&&s.set(r.id,r.name);return s},[f]),y=I(s=>s.maybeAutoStart);j.useEffect(()=>{const s=setTimeout(()=>y("dashboard"),500);return()=>clearTimeout(s)},[y]);const P=[{label:a("pages.dashboard.activeAgents"),value:(t==null?void 0:t.agentCount)??0,icon:b,gradient:"from-amber-500/10 to-primary/5",iconColor:"text-primary bg-primary/10",to:"/manage/agents"},{label:a("pages.dashboard.totalWorkflows"),value:(t==null?void 0:t.workflowCount)??0,icon:U,gradient:"from-emerald-500/10 to-emerald-500/5",iconColor:"text-emerald-600 dark:text-emerald-400 bg-emerald-500/10",to:"/manage/workflows"},{label:a("pages.dashboard.totalConversations"),value:(t==null?void 0:t.conversationCount)??0,icon:A,gradient:"from-blue-500/10 to-blue-500/5",iconColor:"text-blue-600 dark:text-blue-400 bg-blue-500/10",to:"/manage/conversations"},{label:a("pages.dashboard.totalResources"),value:(t==null?void 0:t.resourceCount)??0,icon:B,gradient:"from-violet-500/10 to-violet-500/5",iconColor:"text-violet-600 dark:text-violet-400 bg-violet-500/10",to:"/manage/resources"}].filter(s=>s.to!=="/manage/resources"||s.value>0);return e.jsxs("div",{className:"space-y-8 pb-8",children:[e.jsxs("div",{children:[e.jsxs("h1",{className:"flex items-center gap-2 text-3xl font-bold text-foreground",children:[e.jsx(K,{className:"h-8 w-8 text-primary"}),a("pages.dashboard.title")]}),e.jsx("p",{className:"mt-1 text-muted-foreground",children:a("pages.dashboard.subtitle")})]}),e.jsxs("div",{className:"flex w-fit flex-wrap items-center gap-3 rounded-xl border border-border bg-card/50 px-4 py-2.5",role:"status","aria-label":a("dashboard.platformHealth","Platform health"),"data-testid":"platform-health-strip",children:[e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[e.jsx("span",{className:`inline-flex h-2 w-2 rounded-full ${g.status==="online"?"bg-emerald-500 animate-pulse":g.status==="offline"?"bg-red-500":"bg-muted-foreground animate-pulse"}`}),e.jsx("span",{className:"font-medium text-foreground",children:a("dashboard.platform","Platform")}),e.jsx("span",{className:"text-muted-foreground",children:g.status==="online"?a("dashboard.online","Online"):g.status==="offline"?a("dashboard.offline","Offline"):a("dashboard.checking","Checking…")})]}),e.jsx("div",{className:"h-4 w-px bg-border"}),e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[h?h.coordinatorType==="nats"?e.jsx(re,{className:"h-3.5 w-3.5 text-blue-500"}):e.jsx(le,{className:"h-3.5 w-3.5 text-purple-500"}):e.jsx(_,{className:"h-3.5 w-3.5 text-muted-foreground"}),e.jsx("span",{className:"text-muted-foreground",children:h?h.connected?a("dashboard.coordConnected","Coordinator connected"):a("dashboard.coordDisconnected","Coordinator disconnected"):a("dashboard.coordUnknown","Coordinator —")})]}),e.jsx("div",{className:"h-4 w-px bg-border"}),e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[x!=null&&x.available?e.jsx($,{className:"h-3.5 w-3.5 text-emerald-500"}):e.jsx(G,{className:"h-3.5 w-3.5 text-amber-500"}),e.jsx("span",{className:"text-muted-foreground",children:x!=null&&x.available?a("dashboard.vaultUp","Vault ready"):a("dashboard.vaultDown","Vault unavailable")})]})]}),e.jsx(ge,{}),e.jsx("div",{className:"cq-stat-grid","data-tour":"dashboard-stats",children:u?Array.from({length:4}).map((s,r)=>e.jsx(i,{children:e.jsxs(l,{className:"flex items-center gap-4",children:[e.jsx(o,{className:"h-12 w-12 rounded-lg"}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{className:"h-3 w-20"}),e.jsx(o,{className:"h-7 w-12"})]})]})},r)):P.map(s=>e.jsx(n,{to:s.to,"aria-label":`${s.label}: ${s.value}`,children:e.jsxs(i,{className:"group relative overflow-hidden transition-all hover:shadow-lg hover:-translate-y-0.5 active:translate-y-0",children:[e.jsx("div",{className:v("absolute inset-0 bg-linear-to-br opacity-0 transition-opacity group-hover:opacity-100",s.gradient)}),e.jsxs(l,{className:"relative flex items-center gap-4",children:[e.jsx("div",{className:v("rounded-lg p-3",s.iconColor),children:e.jsx(s.icon,{className:"h-6 w-6"})}),e.jsxs("div",{children:[e.jsx("p",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:s.label}),e.jsx("p",{className:"text-2xl font-bold text-foreground tabular-nums",children:s.value>0?s.value.toLocaleString():e.jsxs("span",{className:"flex items-center gap-1 text-muted-foreground/50",children:["0 ",e.jsx(S,{className:"h-3 w-3"})]})})]})]})]})},s.label))}),e.jsxs("div",{children:[e.jsx("h2",{className:"mb-3 text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:a("pages.dashboard.quickActions")}),e.jsxs("div",{className:"flex flex-wrap gap-2","data-tour":"dashboard-actions",children:[e.jsx(d,{variant:"outline",asChild:!0,children:e.jsxs(n,{to:"/manage/agents/wizard",children:[e.jsx(de,{className:"h-4 w-4"}),a("wizard.title")]})}),e.jsx(d,{variant:"outline",asChild:!0,children:e.jsxs(n,{to:"/manage/chat",children:[e.jsx(Q,{className:"h-4 w-4"}),a("nav.chat")]})}),e.jsx(d,{variant:"outline",asChild:!0,children:e.jsxs(n,{to:"/manage/logs",children:[e.jsx(Y,{className:"h-4 w-4"}),a("dashboard.viewLogs","View Logs")]})}),e.jsx(d,{variant:"outline",asChild:!0,children:e.jsxs(n,{to:"/manage/audit",children:[e.jsx(H,{className:"h-4 w-4"}),a("dashboard.auditTrail","Audit Trail")]})}),e.jsx(d,{variant:"outline",asChild:!0,children:e.jsxs(n,{to:"/manage/secrets",children:[e.jsx(J,{className:"h-4 w-4"}),a("dashboard.secretVault","Secret Vault")]})}),e.jsx(d,{variant:"outline",asChild:!0,children:e.jsxs(n,{to:"/manage/groups/wizard",children:[e.jsx(X,{className:"h-4 w-4"}),a("dashboard.createGroup","Create Group")]})})]})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"mb-3 flex items-center justify-between",children:[e.jsx("h2",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:a("dashboard.recentConversations","Recent Conversations")}),e.jsxs(n,{to:"/manage/conversations",className:"inline-flex items-center gap-1 text-xs font-medium text-primary hover:underline",children:[a("nav.conversations"),e.jsx(R,{className:"h-3 w-3"})]})]}),E?e.jsx("div",{className:"space-y-2",children:Array.from({length:3}).map((s,r)=>e.jsx(i,{children:e.jsxs(l,{className:"flex items-center gap-3 py-3",children:[e.jsx(o,{className:"h-8 w-8 rounded-lg"}),e.jsxs("div",{className:"flex-1 space-y-1.5",children:[e.jsx(o,{className:"h-3 w-40"}),e.jsx(o,{className:"h-3 w-24"})]})]})},r))}):!m||m.length===0?e.jsx(i,{children:e.jsxs(l,{className:"flex items-center gap-3 py-6 text-muted-foreground",children:[e.jsx(A,{className:"h-8 w-8 text-muted-foreground/30"}),e.jsx("p",{className:"text-sm",children:a("dashboard.noConversations","No conversations yet")})]})}):e.jsx("div",{className:"flex flex-col gap-4","data-testid":"recent-conversations",children:m.map(s=>{const r=Z(s.resource),z=M.get(s.agentId),V=s.name||z||a("agents.unnamed","Unnamed Agent");return e.jsx(n,{to:`/manage/conversationview/${r}`,children:e.jsx(i,{className:"transition-all hover:shadow-sm hover:border-primary/20",children:e.jsxs(l,{className:"flex items-center gap-3 py-3",children:[e.jsx("div",{className:"flex h-9 w-9 shrink-0 items-center justify-center rounded-lg bg-primary/10",children:e.jsx(b,{className:"h-4 w-4 text-primary"})}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("p",{className:"truncate text-sm font-medium text-foreground",children:V}),e.jsxs("p",{className:"truncate text-xs text-muted-foreground",children:[r.slice(0,12),"… · v",s.agentVersion]})]}),e.jsx("span",{className:v("shrink-0 rounded-full px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wide",T[s.conversationState]??T.ENDED),children:s.conversationState}),e.jsx("span",{className:"shrink-0 text-xs text-muted-foreground tabular-nums",children:s.lastModifiedOn?D(s.lastModifiedOn):"—"})]})})},r)})})]}),e.jsxs("div",{"data-testid":"recent-agents",children:[e.jsxs("div",{className:"mb-3 flex items-center justify-between",children:[e.jsx("h2",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:a("pages.dashboard.recentAgents")}),e.jsxs(n,{to:"/manage/agents",className:"inline-flex items-center gap-1 text-xs font-medium text-primary hover:underline",children:[a("nav.agents"),e.jsx(R,{className:"h-3 w-3"})]})]}),p?e.jsx("div",{className:"cq-stat-grid",children:Array.from({length:4}).map((s,r)=>e.jsx(i,{children:e.jsxs(l,{className:"space-y-3",children:[e.jsx(o,{className:"h-5 w-3/4"}),e.jsx(o,{className:"h-4 w-1/2"}),e.jsx(o,{className:"h-4 w-full"})]})},r))}):w.length===0?e.jsx(i,{children:e.jsxs(l,{className:"flex flex-col items-center py-8",children:[e.jsx(b,{className:"h-10 w-10 text-muted-foreground/50"}),e.jsx("p",{className:"mt-3 text-sm text-muted-foreground",children:a("pages.dashboard.noRecentAgents")}),e.jsx(d,{variant:"outline",size:"sm",className:"mt-3",asChild:!0,children:e.jsxs(n,{to:"/manage/agents/wizard",children:[e.jsx(S,{className:"h-4 w-4"}),a("agents.createAgent")]})})]})}):e.jsx("div",{className:"cq-card-grid",children:w.map(s=>e.jsx(n,{to:`/manage/agentview/${s.id}`,children:e.jsxs(i,{className:"group relative overflow-hidden transition-all hover:shadow-md hover:border-primary/30 hover:-translate-y-0.5 active:translate-y-0",children:[e.jsx("div",{className:"absolute inset-0 bg-linear-to-br from-primary/5 to-transparent opacity-0 transition-opacity group-hover:opacity-100"}),e.jsx(oe,{className:"relative",children:e.jsx(ie,{className:"truncate text-base",children:s.name||a("agents.unnamed","Unnamed Agent")})}),e.jsxs(l,{className:"relative pt-0",children:[e.jsx("p",{className:"text-xs text-muted-foreground truncate",children:s.description||"—"}),e.jsx("p",{className:"mt-2 text-xs text-muted-foreground/70",children:s.lastModifiedOn?D(s.lastModifiedOn):"—"})]})]})},s.id))})]})]})}function ge(){const{t:a}=q(),{data:t,isLoading:u,isError:c}=ee();return u||c||t!=null&&t.agentId?null:e.jsx(i,{className:"border-primary/30 bg-primary/5","data-testid":"operator-discovery-card",children:e.jsxs(l,{className:"flex flex-wrap items-center justify-between gap-4 py-5",children:[e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx(ae,{className:"mt-0.5 h-6 w-6 shrink-0 text-primary"}),e.jsxs("div",{children:[e.jsx("p",{className:"font-medium",children:a("operator.discovery.title","Meet your Platform Operator")}),e.jsx("p",{className:"text-sm text-muted-foreground",children:a("operator.discovery.description","An assistant that inspects and operates this deployment. Off by default; every change it makes pauses for your approval.")})]})]}),e.jsx(d,{asChild:!0,children:e.jsx(n,{to:"/manage/operator",children:a("operator.discovery.action","Activate")})})]})})}export{Ce as DashboardPage}; +import{g as W,a as L,p as C,u as N,b as O,c as q,d as F,r as j,e as k,f as I,B as b,W as U,M as A,F as B,j as e,L as K,A as _,C as $,T as G,S as o,h as n,i as v,P as S,k as d,l as Q,m as Y,n as H,K as J,o as X,q as R,s as Z,t as D,v as ee,w as ae}from"./index-BnLj1hck.js";import{g as se}from"./workflows-DTtF3KEG.js";import{g as te,C as re}from"./coordinator-B4sE0rHY.js";import{u as ne}from"./use-secrets--RofX_r2.js";import{C as i,a as l,b as oe,c as ie}from"./card-CWHKt0V7.js";import{S as le}from"./server-BMZQ8ps7.js";import{W as de}from"./wand-sparkles-BtCP1jzO.js";async function ce(){const[a,t,u]=await Promise.all([W(1e3,0).catch(()=>[]),se(1e3,0).catch(()=>[]),L(1e3,0).catch(()=>[])]),c=new Set(a.map(m=>C(m.resource).id)),p=new Set(t.map(m=>C(m.resource).id));return{agentCount:c.size,workflowCount:p.size,conversationCount:u.length,resourceCount:0}}function me(){return N({queryKey:["dashboard","stats"],queryFn:ce,staleTime:3e4})}function xe(){return O(4,0)}function ue(a=5){return N({queryKey:["dashboard","recent-conversations",a],queryFn:()=>L(a),staleTime:3e4})}function he(){return N({queryKey:["dashboard","coordinator-status"],queryFn:te,staleTime:6e4,retry:1})}const T={READY:"bg-emerald-500/10 text-emerald-600 dark:text-emerald-400",IN_PROGRESS:"bg-blue-500/10 text-blue-600 dark:text-blue-400",ERROR:"bg-red-500/10 text-red-600 dark:text-red-400",ENDED:"bg-gray-500/10 text-gray-500"};function Ce(){const{t:a}=q(),{data:t,isLoading:u}=me(),{data:c,isLoading:p}=xe(),{data:m,isLoading:E}=ue(5),{data:h}=he(),g=F(),{data:x}=ne(),{data:f=[]}=O(50),w=j.useMemo(()=>c?k(c).slice(0,4):[],[c]),M=j.useMemo(()=>{const s=new Map;if(f.length>0)for(const r of k(f))r.name&&s.set(r.id,r.name);return s},[f]),y=I(s=>s.maybeAutoStart);j.useEffect(()=>{const s=setTimeout(()=>y("dashboard"),500);return()=>clearTimeout(s)},[y]);const P=[{label:a("pages.dashboard.activeAgents"),value:(t==null?void 0:t.agentCount)??0,icon:b,gradient:"from-amber-500/10 to-primary/5",iconColor:"text-primary bg-primary/10",to:"/manage/agents"},{label:a("pages.dashboard.totalWorkflows"),value:(t==null?void 0:t.workflowCount)??0,icon:U,gradient:"from-emerald-500/10 to-emerald-500/5",iconColor:"text-emerald-600 dark:text-emerald-400 bg-emerald-500/10",to:"/manage/workflows"},{label:a("pages.dashboard.totalConversations"),value:(t==null?void 0:t.conversationCount)??0,icon:A,gradient:"from-blue-500/10 to-blue-500/5",iconColor:"text-blue-600 dark:text-blue-400 bg-blue-500/10",to:"/manage/conversations"},{label:a("pages.dashboard.totalResources"),value:(t==null?void 0:t.resourceCount)??0,icon:B,gradient:"from-violet-500/10 to-violet-500/5",iconColor:"text-violet-600 dark:text-violet-400 bg-violet-500/10",to:"/manage/resources"}].filter(s=>s.to!=="/manage/resources"||s.value>0);return e.jsxs("div",{className:"space-y-8 pb-8",children:[e.jsxs("div",{children:[e.jsxs("h1",{className:"flex items-center gap-2 text-3xl font-bold text-foreground",children:[e.jsx(K,{className:"h-8 w-8 text-primary"}),a("pages.dashboard.title")]}),e.jsx("p",{className:"mt-1 text-muted-foreground",children:a("pages.dashboard.subtitle")})]}),e.jsxs("div",{className:"flex w-fit flex-wrap items-center gap-3 rounded-xl border border-border bg-card/50 px-4 py-2.5",role:"status","aria-label":a("dashboard.platformHealth","Platform health"),"data-testid":"platform-health-strip",children:[e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[e.jsx("span",{className:`inline-flex h-2 w-2 rounded-full ${g.status==="online"?"bg-emerald-500 animate-pulse":g.status==="offline"?"bg-red-500":"bg-muted-foreground animate-pulse"}`}),e.jsx("span",{className:"font-medium text-foreground",children:a("dashboard.platform","Platform")}),e.jsx("span",{className:"text-muted-foreground",children:g.status==="online"?a("dashboard.online","Online"):g.status==="offline"?a("dashboard.offline","Offline"):a("dashboard.checking","Checking…")})]}),e.jsx("div",{className:"h-4 w-px bg-border"}),e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[h?h.coordinatorType==="nats"?e.jsx(re,{className:"h-3.5 w-3.5 text-blue-500"}):e.jsx(le,{className:"h-3.5 w-3.5 text-purple-500"}):e.jsx(_,{className:"h-3.5 w-3.5 text-muted-foreground"}),e.jsx("span",{className:"text-muted-foreground",children:h?h.connected?a("dashboard.coordConnected","Coordinator connected"):a("dashboard.coordDisconnected","Coordinator disconnected"):a("dashboard.coordUnknown","Coordinator —")})]}),e.jsx("div",{className:"h-4 w-px bg-border"}),e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[x!=null&&x.available?e.jsx($,{className:"h-3.5 w-3.5 text-emerald-500"}):e.jsx(G,{className:"h-3.5 w-3.5 text-amber-500"}),e.jsx("span",{className:"text-muted-foreground",children:x!=null&&x.available?a("dashboard.vaultUp","Vault ready"):a("dashboard.vaultDown","Vault unavailable")})]})]}),e.jsx(ge,{}),e.jsx("div",{className:"cq-stat-grid","data-tour":"dashboard-stats",children:u?Array.from({length:4}).map((s,r)=>e.jsx(i,{children:e.jsxs(l,{className:"flex items-center gap-4",children:[e.jsx(o,{className:"h-12 w-12 rounded-lg"}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(o,{className:"h-3 w-20"}),e.jsx(o,{className:"h-7 w-12"})]})]})},r)):P.map(s=>e.jsx(n,{to:s.to,"aria-label":`${s.label}: ${s.value}`,children:e.jsxs(i,{className:"group relative overflow-hidden transition-all hover:shadow-lg hover:-translate-y-0.5 active:translate-y-0",children:[e.jsx("div",{className:v("absolute inset-0 bg-linear-to-br opacity-0 transition-opacity group-hover:opacity-100",s.gradient)}),e.jsxs(l,{className:"relative flex items-center gap-4",children:[e.jsx("div",{className:v("rounded-lg p-3",s.iconColor),children:e.jsx(s.icon,{className:"h-6 w-6"})}),e.jsxs("div",{children:[e.jsx("p",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:s.label}),e.jsx("p",{className:"text-2xl font-bold text-foreground tabular-nums",children:s.value>0?s.value.toLocaleString():e.jsxs("span",{className:"flex items-center gap-1 text-muted-foreground/50",children:["0 ",e.jsx(S,{className:"h-3 w-3"})]})})]})]})]})},s.label))}),e.jsxs("div",{children:[e.jsx("h2",{className:"mb-3 text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:a("pages.dashboard.quickActions")}),e.jsxs("div",{className:"flex flex-wrap gap-2","data-tour":"dashboard-actions",children:[e.jsx(d,{variant:"outline",asChild:!0,children:e.jsxs(n,{to:"/manage/agents/wizard",children:[e.jsx(de,{className:"h-4 w-4"}),a("wizard.title")]})}),e.jsx(d,{variant:"outline",asChild:!0,children:e.jsxs(n,{to:"/manage/chat",children:[e.jsx(Q,{className:"h-4 w-4"}),a("nav.chat")]})}),e.jsx(d,{variant:"outline",asChild:!0,children:e.jsxs(n,{to:"/manage/logs",children:[e.jsx(Y,{className:"h-4 w-4"}),a("dashboard.viewLogs","View Logs")]})}),e.jsx(d,{variant:"outline",asChild:!0,children:e.jsxs(n,{to:"/manage/audit",children:[e.jsx(H,{className:"h-4 w-4"}),a("dashboard.auditTrail","Audit Trail")]})}),e.jsx(d,{variant:"outline",asChild:!0,children:e.jsxs(n,{to:"/manage/secrets",children:[e.jsx(J,{className:"h-4 w-4"}),a("dashboard.secretVault","Secret Vault")]})}),e.jsx(d,{variant:"outline",asChild:!0,children:e.jsxs(n,{to:"/manage/groups/wizard",children:[e.jsx(X,{className:"h-4 w-4"}),a("dashboard.createGroup","Create Group")]})})]})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"mb-3 flex items-center justify-between",children:[e.jsx("h2",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:a("dashboard.recentConversations","Recent Conversations")}),e.jsxs(n,{to:"/manage/conversations",className:"inline-flex items-center gap-1 text-xs font-medium text-primary hover:underline",children:[a("nav.conversations"),e.jsx(R,{className:"h-3 w-3"})]})]}),E?e.jsx("div",{className:"space-y-2",children:Array.from({length:3}).map((s,r)=>e.jsx(i,{children:e.jsxs(l,{className:"flex items-center gap-3 py-3",children:[e.jsx(o,{className:"h-8 w-8 rounded-lg"}),e.jsxs("div",{className:"flex-1 space-y-1.5",children:[e.jsx(o,{className:"h-3 w-40"}),e.jsx(o,{className:"h-3 w-24"})]})]})},r))}):!m||m.length===0?e.jsx(i,{children:e.jsxs(l,{className:"flex items-center gap-3 py-6 text-muted-foreground",children:[e.jsx(A,{className:"h-8 w-8 text-muted-foreground/30"}),e.jsx("p",{className:"text-sm",children:a("dashboard.noConversations","No conversations yet")})]})}):e.jsx("div",{className:"flex flex-col gap-4","data-testid":"recent-conversations",children:m.map(s=>{const r=Z(s.resource),z=M.get(s.agentId),V=s.name||z||a("agents.unnamed","Unnamed Agent");return e.jsx(n,{to:`/manage/conversationview/${r}`,children:e.jsx(i,{className:"transition-all hover:shadow-sm hover:border-primary/20",children:e.jsxs(l,{className:"flex items-center gap-3 py-3",children:[e.jsx("div",{className:"flex h-9 w-9 shrink-0 items-center justify-center rounded-lg bg-primary/10",children:e.jsx(b,{className:"h-4 w-4 text-primary"})}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("p",{className:"truncate text-sm font-medium text-foreground",children:V}),e.jsxs("p",{className:"truncate text-xs text-muted-foreground",children:[r.slice(0,12),"… · v",s.agentVersion]})]}),e.jsx("span",{className:v("shrink-0 rounded-full px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wide",T[s.conversationState]??T.ENDED),children:s.conversationState}),e.jsx("span",{className:"shrink-0 text-xs text-muted-foreground tabular-nums",children:s.lastModifiedOn?D(s.lastModifiedOn):"—"})]})})},r)})})]}),e.jsxs("div",{"data-testid":"recent-agents",children:[e.jsxs("div",{className:"mb-3 flex items-center justify-between",children:[e.jsx("h2",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:a("pages.dashboard.recentAgents")}),e.jsxs(n,{to:"/manage/agents",className:"inline-flex items-center gap-1 text-xs font-medium text-primary hover:underline",children:[a("nav.agents"),e.jsx(R,{className:"h-3 w-3"})]})]}),p?e.jsx("div",{className:"cq-stat-grid",children:Array.from({length:4}).map((s,r)=>e.jsx(i,{children:e.jsxs(l,{className:"space-y-3",children:[e.jsx(o,{className:"h-5 w-3/4"}),e.jsx(o,{className:"h-4 w-1/2"}),e.jsx(o,{className:"h-4 w-full"})]})},r))}):w.length===0?e.jsx(i,{children:e.jsxs(l,{className:"flex flex-col items-center py-8",children:[e.jsx(b,{className:"h-10 w-10 text-muted-foreground/50"}),e.jsx("p",{className:"mt-3 text-sm text-muted-foreground",children:a("pages.dashboard.noRecentAgents")}),e.jsx(d,{variant:"outline",size:"sm",className:"mt-3",asChild:!0,children:e.jsxs(n,{to:"/manage/agents/wizard",children:[e.jsx(S,{className:"h-4 w-4"}),a("agents.createAgent")]})})]})}):e.jsx("div",{className:"cq-card-grid",children:w.map(s=>e.jsx(n,{to:`/manage/agentview/${s.id}`,children:e.jsxs(i,{className:"group relative overflow-hidden transition-all hover:shadow-md hover:border-primary/30 hover:-translate-y-0.5 active:translate-y-0",children:[e.jsx("div",{className:"absolute inset-0 bg-linear-to-br from-primary/5 to-transparent opacity-0 transition-opacity group-hover:opacity-100"}),e.jsx(oe,{className:"relative",children:e.jsx(ie,{className:"truncate text-base",children:s.name||a("agents.unnamed","Unnamed Agent")})}),e.jsxs(l,{className:"relative pt-0",children:[e.jsx("p",{className:"text-xs text-muted-foreground truncate",children:s.description||"—"}),e.jsx("p",{className:"mt-2 text-xs text-muted-foreground/70",children:s.lastModifiedOn?D(s.lastModifiedOn):"—"})]})]})},s.id))})]})]})}function ge(){const{t:a}=q(),{data:t,isLoading:u,isError:c}=ee();return u||c||t!=null&&t.agentId?null:e.jsx(i,{className:"border-primary/30 bg-primary/5","data-testid":"operator-discovery-card",children:e.jsxs(l,{className:"flex flex-wrap items-center justify-between gap-4 py-5",children:[e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx(ae,{className:"mt-0.5 h-6 w-6 shrink-0 text-primary"}),e.jsxs("div",{children:[e.jsx("p",{className:"font-medium",children:a("operator.discovery.title","Meet your Platform Operator")}),e.jsx("p",{className:"text-sm text-muted-foreground",children:a("operator.discovery.description","An assistant that inspects and operates this deployment. Off by default; every change it makes pauses for your approval.")})]})]}),e.jsx(d,{asChild:!0,children:e.jsx(n,{to:"/manage/operator",children:a("operator.discovery.action","Activate")})})]})})}export{Ce as DashboardPage}; diff --git a/src/main/resources/META-INF/resources/assets/de-Dhne0T6z.js b/src/main/resources/META-INF/resources/assets/de-Dhne0T6z.js new file mode 100644 index 0000000000..acbcdeee65 --- /dev/null +++ b/src/main/resources/META-INF/resources/assets/de-Dhne0T6z.js @@ -0,0 +1 @@ +const e={title:"Anhänge",empty:"Diese Unterhaltung hat keine Anhänge.",loadError:"Anhänge konnten nicht geladen werden.",deleteAll:"Alle löschen",delete:"Anhang löschen",download:"Herunterladen",deleted:"Anhang gelöscht",deletedAll:"{{count}} Anhänge gelöscht",confirmDeleteTitle:"Anhang löschen?",confirmDeleteDesc:"Löscht diese Datei dauerhaft. Dies kann nicht rückgängig gemacht werden.",confirmDeleteAllTitle:"Alle Anhänge löschen?",confirmDeleteAllDesc:"Löscht dauerhaft alle Dateien dieser Unterhaltung. Dies kann nicht rückgängig gemacht werden."},n={title:"EDDI Manager",description:"Admin-Dashboard für die EDDI KI-Plattform"},t={login:"Anmelden",logout:"Abmelden",loading:"Authentifizierung…",sessionExpired:"Sitzung abgelaufen. Bitte erneut anmelden.",profile:"Profil",guest:"Gast",userMenu:"Benutzermenü"},r={dashboard:"Dashboard",agents:"Agenten",packages:"Workflows",conversations:"Gespräche",coordinator:"Koordinator",schedules:"Zeitpläne",logs:"Protokolle",orphans:"Verwaist",secrets:"Geheimnisse",audit:"Prüfprotokoll",quotas:"Kontingente",groups:"Gruppen",chat:"Chat",resources:"Ressourcen",sectionManagement:"Verwaltung",sectionDevelopment:"Entwicklung",sectionOperations:"Betrieb",mainNavigation:"Hauptnavigation",openMenu:"Navigationsmenü öffnen",sectionCore:"Kern",sectionBuild:"Erstellen & Testen",sectionMonitor:"Überwachung",sectionAdmin:"Verwaltung",studio:"Studio",gdpr:"Datenschutz",memories:"Nutzererinnerungen",properties:"Eigenschaften",triggers:"Auslöser",capabilities:"Fähigkeiten",sync:"Synchronisierung",updates:"Updates",channels:"Kanäle",approvals:"Genehmigungen",userConversations:"Nutzer-Konversationen",userData:"Nutzerdaten",variables:"Variablen",sectionExternal:"Extern",activeConversations:"Aktive Gespräche",openapi:"OpenAPI",docs:"Dokumentation",modeManager:"Manager",modeWorkforce:"Workforce",switchMode:"Arbeitsbereich wechseln",operator:"Plattform-Operator",workforce:"Belegschaft",monitoring:"Gesprächsüberwachung",analytics:"Auswertungen"},i={light:"Hell",dark:"Dunkel",system:"System"},s={label:"Sprache",en:"English",de:"Deutsch",fr:"Français",es:"Español",ar:"العربية",zh:"中文",th:"ไทย",ja:"日本語",ko:"한국어",pt:"Português",hi:"हिन्दी",switchFailed:"Diese Sprache konnte nicht geladen werden. Bitte versuchen Sie es erneut."},a={dashboard:{title:"Dashboard",subtitle:"Übersicht Ihrer EDDI-Agents und Gespräche",activeAgents:"Aktive Agents",totalWorkflows:"Workflows",totalResources:"Ressourcen",totalConversations:"Gespräche",quickActions:"Schnellzugriff",recentAgents:"Neueste Agents",noRecentAgents:"Noch keine Agents. Erstellen Sie Ihren ersten Agent!"},agents:{undeployPreviousVersionsHint:"Entfernt außerdem jede frühere Version dieses Agenten aus der Umgebung.",undeployPreviousVersionsLabel:"Diese und alle vorherigen Versionen zurückziehen",undeployEndConversationsHint:"Beendet sofort jede laufende Unterhaltung dieses Deployments. Dies kann nicht rückgängig gemacht werden.",undeployEndConversationsLabel:"Alle aktiven Unterhaltungen beenden",confirmUndeployDescription:"Version {{version}} wird aus {{environment}} zurückgezogen.",confirmUndeploy:"Agent zurückziehen?",title:"Agenten",subtitle:"Verwalten Sie Ihre KI-Agents"},packages:{title:"Workflows",subtitle:"Workflows und Erweiterungen konfigurieren"},conversations:{permanentDeleteSuccess:"Endgültig gelöscht",softDeleteSuccess:"Unterhaltung gelöscht",deletePermanentAction:"Endgültig löschen",deletePermanentLabel:"Endgültig löschen – entfernt auch Anhänge, den Speicher-Snapshot und den Genehmigungsverlauf. Dies kann nicht rückgängig gemacht werden.",confirmDeleteSoft:"Standardmäßig ist dies ein weiches Löschen – die Unterhaltung wird aus den Listen ausgeblendet, ihre gespeicherten Daten bleiben aber auf dem Server.",title:"Gespräche",subtitle:"Agent-Gespräche anzeigen und verwalten"},resources:{title:"Ressourcen",subtitle:"Verhaltensregeln, Wörterbücher, Ausgaben und mehr verwalten"},chat:{title:"Chat",subtitle:"Mit Ihren bereitgestellten Agents sprechen"},channels:{title:"Kanäle",subtitle:"Verbinden Sie Agenten und Gruppen mit Messaging-Plattformen wie Slack"},groups:{title:"Gruppen",subtitle:"Multi-Agenten-Diskussionsgruppen für strukturierte Debatten und Zusammenarbeit"},approvals:"Ausstehende Genehmigungen",approvalsSubtitle:"Prüfen und entscheiden Sie über Konversationen, die menschliche Eingabe erwarten"},o={add:"Hinzufügen",agent:"Agent",back:"Zurück",cardView:"Kartenansicht",clear:"Auswahl aufheben",confirm:"Bestätigen",description:"Beschreibung",group:"Gruppe",id:"ID",listView:"Listenansicht",modified:"Geändert",name:"Name",new:"Neu",version:"Version",viewMode:"Ansichtsmodus",loading:"Laden...",error:"Etwas ist schiefgelaufen",retry:"Erneut versuchen",save:"Speichern",cancel:"Abbrechen",delete:"Löschen",remove:"Entfernen",create:"Erstellen",edit:"Bearbeiten",search:"Suchen...",noResults:"Keine Ergebnisse gefunden",duplicate:"Duplizieren",close:"Schließen",skipToMain:"Zum Hauptinhalt springen",opensNewTab:"öffnet in neuem Tab",moreActions:"Weitere Aktionen",sortByName:"Nach Name sortieren",sortByVersion:"Nach Version sortieren",sortByModified:"Nach Änderungsdatum sortieren",apply:"Anwenden",copied:"Kopiert",copy:"Kopieren",saving:"Wird gespeichert…",showMore:"Show More",showLess:"Show Less",copyFailed:"Kopieren in die Zwischenablage fehlgeschlagen",loadError:"Daten konnten nicht geladen werden",actions:"Aktionen",view:"Ansehen",refresh:"Aktualisieren",previous:"Zurück",next:"Weiter",dismiss:"Verwerfen",refreshFailed:"Aktualisierung fehlgeschlagen — es werden die zuletzt geladenen Daten angezeigt.",settings:"Einstellungen",history:"Verlauf",copyId:"Agent-ID kopieren",off:"Aus",on:"Ein"},l={confirmDeleteDescription:"Diese Aktion kann nicht rückgängig gemacht werden. Der Agent und alle seine Daten werden dauerhaft entfernt.",confirmUndeploy:"Agent zurückziehen?",confirmUndeployDescription:"Version {{version}} wird aus {{environment}} zurückgezogen.",createSuccess:"Agent erfolgreich erstellt",deleteAgent:"Agent löschen",deployError:"Bereitstellung fehlgeschlagen",deploySuccess:"Agent erfolgreich bereitgestellt",noDescription:"Keine Beschreibung",selectAgent:"Agent auswählen",undeployEndConversationsHint:"Beendet sofort jede laufende Unterhaltung dieses Deployments. Dies kann nicht rückgängig gemacht werden.",undeployEndConversationsLabel:"Alle aktiven Unterhaltungen beenden",undeployError:"Zurückziehen fehlgeschlagen",undeployPreviousVersionsHint:"Entfernt außerdem jede frühere Version dieses Agenten aus der Umgebung.",undeployPreviousVersionsLabel:"Diese und alle vorherigen Versionen zurückziehen",undeploySuccess:"Agent zurückgezogen",unnamed:"Unbenannter Agent",deploy:"Bereitstellen",undeploy:"Deaktivieren",createAgent:"Agent erstellen",createTitle:"Neuen Agent erstellen",name:"Name",namePlaceholder:"Mein Agent",description:"Beschreibung",descriptionPlaceholder:"Beschreiben Sie, was dieser Agent tut...",empty:"Noch keine Agents. Erstellen Sie Ihren ersten Agent!",confirmDelete:"Möchten Sie diesen Agent wirklich löschen?",count_one:"{{count}} Agent",count_other:"{{count}} Agenten",export:"Exportieren",exporting:"Wird exportiert...",exportSuccess:"Agent erfolgreich exportiert",import:"Agent importieren",importing:"Wird importiert...",importSuccess:"Agent erfolgreich importiert",importError:"Agent konnte nicht importiert werden",chat:"Chat",deployAndChat:"Bereitstellen & Chatten",openExternalChat:"In neuem Tab öffnen",emptyDescription:"Erstellen Sie mit dem Wizard in wenigen Minuten einen fertig konfigurierten Agent.",liveIn:"Aktiv in {{environment}}",chatIn:"In {{environment}} chatten",openExternalChatIn:"{{environment}}-Chat in neuem Tab öffnen",deployToProduction:"In Produktion bereitstellen",undeployFromProduction:"Aus Produktion entfernen",deployFailedIn:"Bereitstellung in {{environment}} fehlgeschlagen"},u=JSON.parse(`{"a2aDescHint":"Wird in der Agent Card angezeigt — hilft anderen Agenten zu verstehen, was dieser Agent tut","a2aDescPlaceholder":"Was tut dieser Agent?","a2aDescription":"Agent-Beschreibung","a2aEnable":"A2A aktivieren","a2aEnabled":"Aktiviert","a2aEnabledDesc":"Diesen Agenten über das A2A-Protokoll für andere Agenten auffindbar machen. Andere EDDI-Instanzen können diesen Agenten als Tool finden und aufrufen.","a2aEndpoints":"Endpunkte","a2aNoSkills":"Keine Fähigkeiten — es wird eine Standard-Fähigkeit „chat“ verwendet","a2aSection":"Agent-to-Agent (A2A)","a2aSkillPlaceholder":"z. B. translation, code-review","a2aSkills":"A2A-Fähigkeiten","addAttribute":"Attribut hinzufügen","agentCardPreview":"Agent-Card-Vorschau","agentDid":"Agent-DID","attributeKey":"Schlüssel","attributeValue":"Wert","attributesLabel":"Attribute","attrs":"Attr.","autoSnapshotEnable":"Automatische Checkpoints aktivieren","capabilities":"Fähigkeiten","capabilitiesDesc":"Deklarierte Fähigkeiten für die A2A Agent Card und die Fähigkeiten-Registry. Andere Agenten entdecken diese bei der Auswahl von Delegationszielen.","capabilityPlaceholder":"Fähigkeitsnamen suchen oder eingeben…","comingSoon":"demnächst","defaultVisibility":"Standard-Sichtbarkeit","dreamConsolidation":"Traum-Konsolidierung","dreamDesc":"Hintergrund-LLM-Job, der Widersprüche auflöst, veraltete Einträge bereinigt und optional Interaktionen zusammenfasst.","enableMemoryTools":"Speicher-Tools aktivieren","enableSwd":"Strikte Schreibdisziplin aktivieren","forkingDisabledTooltip":"In einer zukünftigen Version verfügbar","forkingEnabled":"Sitzungs-Forking","forkingNote":"Der Endpunkt für Sitzungs-Forking (POST /v6/conversations/{{id}}/fork) ist noch nicht verfügbar.","guardrails":"Schreib-Leitplanken","identity":"Kryptografische Identität","keyExpired":"Abgelaufen","keyVersion":"Schlüssel v{{version}}","legacyKey":"Legacy-Schlüssel (v0)","maxCheckpoints":"Max. Checkpoints","maxCheckpointsHint":"pro Gespräch","maxEntriesPerUser":"Max. pro Nutzer","maxForks":"Max. Forks","maxForksHint":"pro Gespräch","maxRecallEntries":"Max. Abruf","memoryPolicy":"Speicher-Richtlinie","memoryPolicyDesc":"Die strikte Schreibdisziplin regelt, was geschieht, wenn Eigenschafts-Updates während eines Gesprächsschritts fehlschlagen. Wählen Sie, wie die Engine mit teilweise übernommenen Daten umgeht.","onCapReached":"Bei erreichter Obergrenze","onFailure":"Fehlerstrategie","onFailureDigest":"Digest — Änderungen zurückrollen, Zusammenfassung an das LLM melden","onFailureExclude":"Alle ausschließen — alle Eigenschafts-Updates stillschweigend verwerfen","onFailureKeep":"Alle behalten — Änderungen behalten und Warnung protokollieren","openWorkflow":"Öffnen","outdated":"veraltet","publicKey":"Öffentlicher Schlüssel","publicKeyHint":"Automatisch bei der ersten Signierung generiert","publicKeys":"Öffentliche Schlüssel","recallOrder":"Abrufreihenfolge","requirePeer":"Peer-Verifizierung erforderlich","requirePeerDesc":"Eingehende A2A-Aufgaben von Agenten ablehnen, die ihre Identität nicht nachweisen können","securityFlagConfirmBtn":"Trotzdem aktivieren","securityFlagConfirmDesc":"Kryptografische Signierung ist in dieser Version noch nicht verfügbar. Das Aktivieren dieses Flags führt dazu, dass das Backend Speichervorgänge mit HTTP 400 ablehnt. Möchten Sie wirklich fortfahren?","securityFlagConfirmTitle":"Sicherheits-Flag aktivieren?","securityFlagWarning":"Kryptografische Signierung ist in dieser Version noch nicht verfügbar. Das Backend lehnt Speichervorgänge mit diesen aktivierten Flags ab (HTTP 400).","securityFlags":"Signierung & Verifizierung","securityIdentity":"Sicherheit & Identität","sessionManagement":"Sitzungsverwaltung","sessionManagementDesc":"Speicher-Checkpoints erfassen den Gesprächszustand vor riskanten Operationen und ermöglichen ein sauberes Zurückrollen bei Fehlern.","signA2A":"Inter-Agenten-Nachrichten (A2A) signieren","signA2ADesc":"Ausgehende A2A-Nachrichten kryptografisch signieren, um Manipulationen zu verhindern","signMcp":"MCP-Aufrufe signieren","signMcpDesc":"Signaturen an MCP-Tool-Aufrufe anhängen für eine sichere Server-Verifizierung","skillAlreadyExists":"Diese Fähigkeit ist bereits deklariert","switchToLatest":"Auf neueste umstellen","toggleAttributes":"Attribute umschalten","triggerBeforeAction":"Vor Aktion","triggerBeforeTool":"Vor Tool-Ausführung","triggerOn":"Auslösen bei","updateToLatest":"Auf neueste Version aktualisieren","userMemory":"Nutzerspeicher","userMemoryDesc":"Persistenter Speicher pro Nutzer mit LLM-Tools (merken/abrufen/vergessen). Die grundlegende longTerm-Eigenschaftspersistenz funktioniert unabhängig von diesem Schalter immer.","viewingOldVersion":"Sie sehen Version {{current}}. Neueste ist Version {{latest}}.","workflowAdded":"Workflow hinzugefügt","workflowRemoved":"Workflow entfernt","workflowUpdated":"Workflow auf neueste Version aktualisiert","title":"Agent-Details","backToAgents":"Zurück zu Agents","packages":"Workflows","noWorkflows":"Noch keine Workflows hinzugefügt","addWorkflow":"Workflow hinzufügen","selectWorkflow":"Workflow zum Hinzufügen auswählen","rawConfig":"Rohkonfiguration","editName":"Name bearbeiten","editDescription":"Beschreibung bearbeiten","clickToEdit":"Klicken zum Bearbeiten","noDescription":"Keine Beschreibung","duplicate":"Duplizieren","duplicating":"Wird dupliziert...","duplicateSuccess":"Agent erfolgreich dupliziert","environments":"Umgebungen","envProduction":"Produktion","envTest":"Test","savingAgent":"Agent wird gespeichert...","savedAgent":"Agent erfolgreich gespeichert","saveError":"Agent konnte nicht gespeichert werden","deployToEnv":"In {{env}} bereitstellen","undeployFromEnv":"Aus {{env}} entfernen","openStudio":"Im Studio öffnen","maxKeyLength":"Max. Schlüssellänge","maxValueLength":"Max. Wertlänge","maxWritesPerTurn":"Max. Schreibvorgänge/Runde","dreamSchedule":"Zeitplan (cron)","dreamLlmProvider":"LLM-Anbieter","dreamLlmModel":"LLM-Modell","dreamMaxCost":"Max. Kosten/Lauf ($)","dreamPruneDays":"Bereinigung nach (Tage)","dreamBatchSize":"Stapelgröße","detectContradictions":"Widersprüche erkennen","summarizeInteractions":"Interaktionen zusammenfassen","confidenceLow":"Niedrig","confidenceMedium":"Mittel","confidenceHigh":"Hoch","visibilitySelf":"Eigene","visibilityGlobal":"Global","onCapEvict":"Älteste entfernen","onCapReject":"Ablehnen","recallMostRecent":"Neueste zuerst","recallMostRelevant":"Relevanteste zuerst","channels":"Kanalverbindungen","channelsDesc":"Verbinden Sie diesen Agenten mit Slack-Kanälen. Jede Kanalverbindung wird unabhängig mit eigenen Zugangsdaten konfiguriert und unterstützt Multi-Workspace-Setups.","noChannels":"Keine Kanäle konfiguriert","noChannelsDesc":"Fügen Sie einen Slack-Kanal hinzu, damit Benutzer mit diesem Agenten über Slack interagieren können.","addSlackChannel":"Slack-Kanal hinzufügen","slackChannel":"Slack-Kanal","removeChannel":"Kanal entfernen","removeChannelConfirm":"Diesen Slack-Kanalverbinder entfernen?","removeChannelDesc":"This action will permanently disconnect this channel.","channelId":"Kanal-ID","channelIdHint":"Kanal-IDs beginnen mit C gefolgt von alphanumerischen Großbuchstaben","botToken":"Bot-Token","botTokenPlaceholder":"xoxb-… oder \${vault:slack-bot-token}","botTokenHint":"Slack Bot User OAuth Token. Verwenden Sie eine Vault-Referenz für Sicherheit.","signingSecret":"Signaturgeheimnis","signingSecretPlaceholder":"Hex-String oder \${vault:slack-signing-secret}","signingSecretHint":"Von der Seite 'Basic Information' Ihrer Slack-App. Verwenden Sie eine Vault-Referenz für Sicherheit.","groupIdOptional":"Gruppen-ID (optional)","groupIdPlaceholder":"Multi-Agent Gruppen-Konfigurations-ID","groupIdHint":"Aktiviert \\"group: Frage\\" Multi-Agent-Diskussionen aus diesem Slack-Kanal.","slackSetupGuide":"Slack-Einrichtungsleitfaden","slackWebhookUrl":"Webhook-URL","slackWebhookCopied":"Webhook-URL kopiert","slackStep1":"Erstellen Sie eine Slack-App unter api.slack.com/apps und installieren Sie sie in Ihrem Workspace.","slackStep2":"Kopieren Sie das Bot-Token (xoxb-…) und das Signaturgeheimnis in den EDDI-Vault und konfigurieren Sie die Kanäle unten.","slackStep3":"Aktivieren Sie dann Event Subscriptions in Ihrer Slack-App, fügen Sie die Webhook-URL oben ein und abonnieren Sie:","slackSetupNote":"Wichtig: Konfigurieren Sie den Kanal unten, bevor Sie Event Subscriptions aktivieren — Slack sendet eine URL-Verifizierungsanfrage, die das Signaturgeheimnis in EDDI benötigt.","slackRequiredScopes":"Erforderliche Bot-Token-Berechtigungen","hitlConfig":"Human-in-the-Loop","hitlConfigDesc":"Wenn dieser Agent eine Konversation zur menschlichen Freigabe anhält, steuern diese Einstellungen die Wartezeit und was ohne rechtzeitige Entscheidung passiert.","hitlEnable":"Zeitlimits für menschliche Freigabe konfigurieren","hitlTimeoutPolicy":"Wenn keine rechtzeitige Entscheidung","hitlApprovalTimeout":"Freigabe-Zeitlimit (ISO-8601)","hitlTimeoutInvalid":"Eine endliche Richtlinie benötigt eine positive ISO-8601-Dauer, z. B. PT15M.","hitlTimeoutHint":"z. B. PT30S, PT15M, PT2H.","hitlPauseReason":"Freigabegrund (für Genehmiger sichtbar)","hitlPauseReasonPlaceholder":"z. B. Löschung erfordert Freigabe durch den Manager","toolApprovalsEnable":"Bestimmte Tool-Aufrufe zur Freigabe sperren","toolApprovalsDesc":"Pausiert, wenn das Modell ein passendes Tool aufruft, bevor es ausgeführt wird. Eine leere Liste \\"Freigabe erforderlich\\" deaktiviert die Tool-Sperrung.","toolRequireApproval":"Freigabe erforderlich (Glob-Muster, eines pro Zeile)","toolPatternHint":"'*' ist das einzige Platzhalterzeichen. Optionales Quellpräfix:","toolExempt":"Ausgenommen (immer erlaubt, eines pro Zeile)","toolMaxPauses":"Max. Pausen / Zug (1–10)","toolMaxAuto":"Max. automatische Freigaben / Zug (0–10)","toolOnNoProgress":"Bei erneuter Pause ohne Fortschritt","toolTimeoutPolicy":"Zeitlimit-Richtlinie für Tool-Pause","toolTimeoutInherit":"Vom Agenten erben","toolAutoApproveDemotion":"AUTO_APPROVE auf Agentenebene gilt nicht für Tool-Freigaben — Tool-Pausen warten unbegrenzt, sofern du oben keine Zeitlimit-Richtlinie für Tool-Pausen festlegst.","toolPauseReason":"Grund des Freigebers ({toolNames} erlaubt)","toolPauseReasonPlaceholder":"z. B. Freigabe erforderlich für {toolNames}","toolPendingMessage":"Endbenutzer-Nachricht während der Pause ({toolNames} erlaubt)","toolPendingMessagePlaceholder":"z. B. Warte auf menschliche Freigabe für {toolNames}…","toolInGroupTurns":"Innerhalb eines Gruppenzugs wird der gesperrte Tool-Aufruf eines Mitglieds automatisch abgelehnt (REJECT)."}`),c={title:"Agent-Assistent"},d={baseUrlHintCloud:"Nur erforderlich bei Verwendung eines Proxys, einer privaten Bereitstellung oder eines Azure-OpenAI-Endpunkts",baseUrlHintLocal:"Erforderlich — die URL, unter der Ihr lokaler Modellserver läuft",modelHint:"Geben Sie einen beliebigen von Ihrem Anbieter unterstützten Modellnamen ein oder wählen Sie einen aus den Vorschlägen",modelPlaceholder:"z. B. {{model}} (oder jedes von Ihrem Anbieter unterstützte Modell)",title:"Agent-Assistent",subtitle:"Erstellen Sie einen vollständig konfigurierten Agent in wenigen Minuten",backToAgents:"Zurück zu Agents",next:"Weiter",back:"Zurück",createOnly:"Nur erstellen",createAndDeploy:"Erstellen & Bereitstellen",typeTitle:"Welche Art von Agent?",typeDesc:"Wählen Sie den gewünschten Agent-Typ",standardAgent:"Standard-Agent",apiAgent:"API-Agent",standardDesc:"KI-gestützte Konversation mit optionalen Tools, Quick Replies und Sentimentanalyse",apiDesc:"Importieren Sie eine OpenAPI/Swagger-Spezifikation zur automatischen Generierung eines API-Agents",infoTitle:"Agent-Identität",infoDesc:"Geben Sie Ihrem Agent einen Namen und eine Persönlichkeit",agentName:"Agent-Name",namePlaceholder:"z.B. Kundensupport-Bot",systemPrompt:"Systemprompt",promptPlaceholder:"Du bist ein hilfreicher KI-Assistent, der...",promptHint:"Diese Anweisung bestimmt, wie sich Ihr Agent verhält und antwortet.",llmTitle:"LLM-Konfiguration",llmDesc:"Wählen Sie das KI-Modell, das Ihren Agent antreibt",provider:"Anbieter",model:"Modell",apiKey:"API-Schlüssel",baseUrl:"Basis-URL",baseUrlPlaceholder:"Benutzerdefinierte Endpoint-URL",optional:"optional",apiSpecTitle:"OpenAPI-Spezifikation",apiSpecDesc:"Geben Sie die OpenAPI/Swagger-Spezifikation Ihrer API an",specByUrl:"URL",specByFile:"Datei",specByPaste:"Einfügen",fetch:"Abrufen",specFetched:"Spezifikation geladen!",specFetchError:"Spezifikation konnte nicht abgerufen werden",dropFile:"OpenAPI-Datei hier ablegen",dropHint:"JSON- oder YAML-Format",browse:"Dateien durchsuchen",pasteSpec:"OpenAPI/Swagger JSON oder YAML hier einfügen...",specLoaded:"Datei geladen: {{name}}",specReady:"Spezifikation geladen ({{chars}} Zeichen)",apiBaseUrlLabel:"API-Basis-URL",apiAuthLabel:"API-Auth-Header",endpointFilter:"Endpoint-Filter",endpointFilterPlaceholder:"Kommagetrennt: GET /users, POST /orders",featuresTitle:"Funktionen & Optionen",featuresDesc:"Passen Sie die Fähigkeiten Ihres Agents an",introMessage:"Begrüßungsnachricht",introMessageDesc:"Nachricht, die zu Beginn einer Konversation angezeigt wird",quickReplies:"Schnellantworten",quickRepliesDesc:"LLM generiert anklickbare Antwortvorschläge",sentiment:"Sentimentanalyse",sentimentDesc:"Stimmung, Absicht und Dringlichkeit des Nutzers in Echtzeit erkennen",structuredOutput:"Strukturierte Ausgabe",structuredOutputDesc:"LLM antwortet mit einem JSON-Objekt statt mit reinem Text",structuredOutputInfo:"Wenn aktiviert, antwortet das LLM mit einem JSON-Objekt mit strukturierten Feldern. Ein JSON-Schema wird dem Systemprompt angehängt und das Modell wird in den JSON-Antwortmodus versetzt.",builtInTools:"Integrierte Tools",builtInToolsDesc:"Integrierte Tool-Bibliothek von EDDI aktivieren (Rechner, Datum/Zeit usw.)",toolsWhitelist:"Whitelist (leer = alle Tools)",mcpServers:"MCP-Server",mcpServersDesc:"Model Context Protocol Server für externe Tools verbinden",autoDeploy:"Automatisch bereitstellen",autoDeployDesc:"Agent sofort nach Erstellung bereitstellen",environment:"Umgebung",envProduction:"Produktion",envTest:"Test",reviewTitle:"Überprüfen & Erstellen",reviewDesc:"Überprüfen Sie Ihre Konfiguration vor dem Erstellen",reviewType:"Typ",reviewName:"Name",reviewPrompt:"Systemprompt",reviewProvider:"Anbieter",reviewModel:"Modell",reviewSpec:"OpenAPI-Spezifikation",reviewIntro:"Begrüßungsnachricht",reviewDeploy:"Bereitstellen",success:"Agent erfolgreich erstellt!",agentCreated:"Agent erstellt!",deployed:"Bereitgestellt",endpointsParsed:"{{count}} API-Endpoints analysiert",viewAgent:"Agent anzeigen",createAnother:"Weiteren erstellen",vaultKeyUsed:"Dieser Agent verwendet den unten stehenden Vault-Schlüssel. Wählen Sie für Ihren nächsten Agenten denselben aus, statt den API-Schlüssel erneut einzufügen.",vaultKeyCopied:"Vault-Referenz kopiert",allTools:"Alle Werkzeuge",selectSpecific:"Manuell auswählen",allToolsInfo:"Alle {{count}} integrierten Werkzeuge stehen Ihrem Agenten zur Verfügung. Wählen Sie „Manuell auswählen“, um die Auswahl einzuschränken.",availableTools:"Verfügbare Werkzeuge",toolCount:"{{selected}} von {{total}} ausgewählt",specTooLarge:"Diese Spezifikation ist zu groß, um hier geladen zu werden",specUrlInvalid:"Das ist keine gültige URL",specUrlScheme:"Nur http://- und https://-URLs werden unterstützt"},g={confirmDeleteDescription:"Diese Aktion kann nicht rückgängig gemacht werden. Der Workflow und alle seine Daten werden dauerhaft entfernt.",createSuccess:"Workflow erfolgreich erstellt",unnamed:"Unbenannter Workflow",createWorkflow:"Workflow erstellen",createTitle:"Neuen Workflow erstellen",name:"Name",namePlaceholder:"Mein Workflow",description:"Beschreibung",descriptionPlaceholder:"Beschreiben Sie, was dieser Workflow tut...",noDescription:"Keine Beschreibung",empty:"Noch keine Workflows. Erstellen Sie Ihren ersten Workflow!",confirmDelete:"Möchten Sie diesen Workflow wirklich löschen?",count_one:"{{count}} Workflow",count_other:"{{count}} Workflows",emptyDescription:"Workflows definieren die Verarbeitungspipeline für Ihre Agents."},h={backToAgent:"Zurück zum Agenten",title:"Workflow-Details",backToWorkflows:"Zurück zu Workflows",extensions:"Erweiterungen",noExtensions:"Keine Erweiterungen in diesem Workflow",rawConfig:"Rohkonfiguration"},p={chooseConfig:"Konfiguration wählen",chooseConfigHint:"Erstellen Sie eine neue Konfiguration oder verknüpfen Sie eine bestehende",configCreated:"Konfiguration erstellt — zur Pipeline hinzugefügt",createNewConfig:"Neue Konfiguration erstellen",createNewConfigHint:"Erstellt eine leere Konfiguration, die Sie später bearbeiten können",noExistingConfigs:"Keine bestehenden Konfigurationen gefunden — erstellen Sie oben eine neue",orExisting:"oder bestehende verwenden",updateToLatest:"Auf neueste Version aktualisieren",title:"Workflow-Editor",pipeline:"Extension Pipeline",addHint:"Erweiterungen hinzufügen, um Ihre Pipeline aufzubauen",addHintDialog:"Erweiterungstyp zum Hinzufügen auswählen",reorder:"Erweiterung verschieben",saved:"Workflow erfolgreich gespeichert",saveError:"Speichern fehlgeschlagen",noTasks:"Keine Aufgaben in diesem Workflow",addTask:"Aufgabe hinzufügen"},f={confirmDeleteSoft:"Standardmäßig ist dies ein weiches Löschen – die Unterhaltung wird aus den Listen ausgeblendet, ihre gespeicherten Daten bleiben aber auf dem Server.",deletePermanentLabel:"Endgültig löschen – entfernt auch Anhänge, den Speicher-Snapshot und den Genehmigungsverlauf. Dies kann nicht rückgängig gemacht werden.",monitorSubtitle:"Laufende Gespräche pro Agent überwachen und in Massen verwalten.",noActiveDesc:"Diese Agentenversion hat derzeit keine laufenden Gespräche.",purgeDesc:"BEENDETE Gespräche dauerhaft löschen, deren letzte Aktivität älter als die angegebene Anzahl von Tagen ist.",selectAgentPromptDesc:"Aktive Gespräche werden pro Agent und Version aufgelistet.",searchPlaceholder:"Nach Gesprächs-ID suchen...",id:"Gespräch",agent:"Agent",state:"Status",lastActivity:"Letzte Aktivität",actions:"Aktionen",empty:"Noch keine Gespräche. Stellen Sie einen Agent bereit und beginnen Sie zu chatten!",confirmDelete:"Möchten Sie dieses Gespräch wirklich löschen?",count_one:"{{count}} Gespräch",count_other:"{{count}} Gespräche",emptyDescription:"Deployen Sie einen Agent und starten Sie eine Konversation über die Chat-Seite.",filterAll:"Alle",stateActive:"Aktiv",stateInProgress:"In Bearbeitung",stateEnded:"Beendet",stateInterrupted:"Unterbrochen",permanentDeleteSuccess:"Dauerhaft gelöscht",softDeleteSuccess:"Gespräch gelöscht",monitorActive:"Aktive überwachen",filterByAgent:"Nach Agent filtern",filterByVersion:"Nach Agent-Version filtern",allVersions:"Alle Versionen",version:"v{{version}}",showingRange:"{{from}}–{{to}} werden angezeigt",deleteConversation:"Gespräch löschen",steps:"Schritte",perPage:"Pro Seite",pageNumber:"Seite {{page}}",deletePermanentAction:"Dauerhaft löschen",step:"Schritt",monitorTitle:"Aktive Gespräche",backToList:"Zurück zu Gesprächen",selectAgentToMonitor:"Agent auswählen",selectedCount:"{{count}} ausgewählt",endSelected:"Ausgewählte beenden",selectAgentPrompt:"Agent zum Überwachen auswählen",noActive:"Keine aktiven Gespräche",selectAll:"Alle auswählen",selectOne:"{{id}} auswählen",purgeTitle:"Beendete Gespräche bereinigen",olderThanDays:"Älter als (Tage)",purgeAction:"Bereinigen",confirmEndTitle:"Ausgewählte Gespräche beenden?",confirmPurgeTitle:"Beendete Gespräche bereinigen?",confirmEndDesc_one:"{{count}} Gespräch werden auf BEENDET gesetzt. Pausierte Gespräche (Warten auf Mensch) werden sicher über den freigabebewussten Pfad beendet.",confirmEndDesc_other:"{{count}} Gespräche werden auf BEENDET gesetzt. Pausierte Gespräche (Warten auf Mensch) werden sicher über den freigabebewussten Pfad beendet.",confirmPurgeDesc_one:"Dies löscht dauerhaft BEENDETE Gespräche, die älter als {{days}} Tag sind, einschließlich ihres gespeicherten Speichers und ihrer Anhänge. Dies kann nicht rückgängig gemacht werden.",confirmPurgeDesc_other:"Dies löscht dauerhaft BEENDETE Gespräche, die älter als {{days}} Tage sind, einschließlich ihres gespeicherten Speichers und ihrer Anhänge. Dies kann nicht rückgängig gemacht werden.",pausedNote_one:"{{count}} der ausgewählten Gespräche wartet auf einen Menschen; die ausstehende Freigabe wird abgebrochen.",pausedNote_other:"{{count}} der ausgewählten Gespräche warten auf einen Menschen; ihre ausstehende Freigabe wird abgebrochen.",endSuccess_one:"{{count}} Gespräch beendet",endSuccess_other:"{{count}} Gespräche beendet",purgeSuccess_one:"{{count}} beendete Gespräch bereinigt",purgeSuccess_other:"{{count}} beendete Gespräche bereinigt"},m={backToConversations:"Zurück zu Gesprächen",chatLog:"Chat-Protokoll",noSteps:"Keine Gesprächsschritte aufgezeichnet",properties:"Gesprächseigenschaften",rawData:"Rohdaten anzeigen",step:"Schritt",steps:"Schritte",title:"Gespräch",continueChat:"Im Chat fortsetzen",searchTranscript:"Gesprächsverlauf durchsuchen…",exportMd:"Als Markdown exportieren",toolSummary:"Werkzeugnutzung",totalCost:"Gesamtkosten",cacheHitRate:"Cache-Trefferquote"},b={hide:"Ausblenden",secretModeOff:"Geheimmodus umschalten",secretModeOn:"Geheimmodus EIN",secretPlaceholder:"Geheimen Wert eingeben…",show:"Anzeigen",selectAgent:"Agent auswählen...",noAgents:"Keine bereitgestellten Agents verfügbar. Stellen Sie zuerst einen Agent bereit.",placeholder:"Nachricht eingeben...",send:"Senden",newConversation:"Neues Gespräch",endConversation:"Gespräch beenden",streaming:"Streaming",thinking:"Denkt nach...",usingTools:"Werkzeuge werden verwendet",connectionError:"Verbindungsfehler. Bitte erneut versuchen.",empty:"Wählen Sie einen Agent und beginnen Sie zu chatten!",history:"Verlauf",undo:"Letzte Nachricht rückgängig",redo:"Nachricht wiederherstellen",continueConversation:"Fortsetzen",noHistory:"Noch kein Gesprächsverlauf.",attach:"Datei anhängen",attachUploading:"Wird hochgeladen...",attachSuccess:"Datei angehängt",attachError:"Datei konnte nicht hochgeladen werden",attachLimit:"Sie können bis zu {{max}} Dateien pro Nachricht anhängen.",attachTooLargeToForward:"{{name}} wurde gespeichert, ist aber zu groß, um direkt an das Modell gesendet zu werden.",attachNotForwarded:"Nicht an das Modell gesendet",dropToAttach:"Dateien hier ablegen, um sie anzuhängen",stepFailedFallback:"Dieser Schritt ist fehlgeschlagen. Das Server-Log enthält den vollständigen Fehler.",retry:"Letzten Schritt wiederholen",retrySuccess:"Schritt erneut ausgeführt",retryError:"Wiederholung fehlgeschlagen",showActivity:"Aktivität anzeigen",hideActivity:"Aktivität ausblenden",scrollToBottom:"Nach unten scrollen",copyMessage:"Nachricht kopieren",copied:"Kopiert!",activity:{processing:"Wird verarbeitet…",steps:"Schritte",toolCalls:"Werkzeugaufrufe",toolCall:"Werkzeugaufruf",toolResult:"Ergebnis",error:"Fehler aufgetreten",toolCallsCount_one:"{{count}} Tool-Aufruf",stepsCount:"{{count}} Schritte",stepsCount_one:"{{count}} Schritt",stepsCount_other:"{{count}} Schritte",toolCallsCount_other:"{{count}} Tool-Aufrufe",toolCallsCount:"{{count}} Tool-Aufrufe",usingTool:"Verwendet {{tool}} …"},context:{conversationId:"Gesprächs-ID",agentVersion:"Agentenversion",startTime:"Gestartet",stepCount:"Schritte",show:"Gesprächsinfo anzeigen",hide:"Gesprächsinfo ausblenden"},agentTyping:"Agent tippt",copy:"Kopieren",emptyConversation:"Diese Konversation enthält noch keine Nachrichten.",loadConversationFailed:"Konversation konnte nicht geladen werden: {{error}}",multilineHint:"Enter zum Senden · Shift+Enter für eine neue Zeile",multilineHintCtrlEnter:"Strg+Enter zum Senden · Enter für eine neue Zeile",toolRefused:"Abgelehnt"},k={backToWorkflow:"Zurück zum Workflow",confirmDeleteDescription:"Diese Aktion kann nicht rückgängig gemacht werden. {{type}} wird dauerhaft gelöscht.",createSuccess:"{{type}} erfolgreich erstellt",snippetNameInvalid:"Nur Kleinbuchstaben (a-z), Ziffern (0-9) und Unterstriche (_) sind erlaubt.",snippetNameRequired:"Snippet-Name ist erforderlich.",unnamed:"Unbenannte Ressource",noDescription:"Keine Beschreibung",backToResources:"Zurück zu Ressourcen",backToList:"Zurück zu {{type}}",unknownType:"Unbekannter Ressourcentyp",rawConfig:"Rohkonfiguration",rawConfigHint:"JSON-Konfiguration für diese Ressource",create:"{{type}} erstellen",createTitle:"{{type}} erstellen",createDescription:"Erstellen Sie eine leere {{type}}-Konfiguration. Sie können sie nach dem Erstellen bearbeiten.",confirmDelete:"Möchten Sie diese(n) {{type}} wirklich löschen?",empty:"Noch keine {{type}}-Ressourcen.",itemCount_one:"{{count}} Element",itemCount_other:"{{count}} Elemente",count_one:"{{count}} Ressource",count_other:"{{count}} Ressourcen",types:{rules:{name:"Verhaltensregeln",description:"Gesprächsflussregeln und Entscheidungslogik definieren"},apicalls:{name:"HTTP-Aufrufe",description:"Externe API-Integrationen und Webhooks konfigurieren"},output:{name:"Ausgabesets",description:"Agent-Antwortvorlagen und Ausgabevarianten verwalten"},dictionary:{name:"Wörterbücher",description:"Wort- und Phrasenerkennungsmuster definieren"},llm:{name:"LLM",description:"KI-Modelle, Prompts und Tool-Bindungen konfigurieren"},propertysetter:{name:"Eigenschafts-Setter",description:"Gesprächseigenschaften setzen und Slot-Filling verwalten"},mcpcalls:{name:"MCP-Aufrufe",description:"MCP-Server-Verbindungen und deterministische Tool-Aufrufe konfigurieren"},rag:{name:"Wissensbasen",description:"RAG-Wissensbasen für die Dokumentensuche konfigurieren"},snippets:{name:"Prompt-Snippets",description:"Wiederverwendbare Systemprompt-Bausteine fuer die Vorlagenkomposition"},parser:{name:"Parser",description:"NLP-Eingabeverarbeitung und Wörterbuch-Konfiguration"}},emptyDescription:"Erstellen Sie Ihre erste {{type}}, um sie in Workflows zu verwenden.",descriptionPlaceholder:"Beschreiben Sie diese {{type}}-Konfiguration …"},A={compare:"Vergleichen",compareVersions:"Versionen vergleichen",deployFailed:"Bereitstellung fehlgeschlagen",deploying:"Wird bereitgestellt…",diffHint:"Hinzufügungen in Grün, Löschungen in Rot. Links = älter, rechts = neuer.",discardAndLeave:"Verwerfen & Verlassen",discardMessage:"Möchten Sie wirklich alle ungespeicherten Änderungen verwerfen? Diese Aktion kann nicht rückgängig gemacht werden.",discardTitle:"Änderungen verwerfen?",newerVersion:"Neuer",olderVersion:"Älter",saveAndTest:"Speichern & Testen",swapVersions:"Versionen tauschen",unsavedMessage:"Sie haben ungespeicherte Änderungen, die verloren gehen. Möchten Sie wirklich fortfahren?",unsavedTitle:"Ungespeicherte Änderungen",formTab:"Formular",jsonTab:"JSON",save:"Speichern",discard:"Verwerfen",saving:"Speichern...",saved:"Erfolgreich gespeichert",saveError:"Speichern fehlgeschlagen",dirty:"Ungespeicherte Änderungen",version:"Version",versionPicker:"Version auswählen",readOnly:"Schreibgeschützt",formPlaceholder:"Visueller Editor kommt bald. Verwenden Sie den JSON-Tab zum Bearbeiten.",jsonSchema:"Schema-Validierung aktiv",cascadeMode:"Änderungen werden an übergeordneten Workflow und Agent weitergegeben",updateUsageHint:"Ausgewählte Workflows und Agents auf die neue Version aktualisieren?",updateUsage:"Auswahl aktualisieren",skipUpdate:"Überspringen",cascading:"Aktualisiere...",cascadeSuccess:"Kaskaden-Update abgeschlossen",invalidJson:"Ungültiges JSON — wechseln Sie zum JSON-Tab zur Korrektur.",cascadePartialFailure_one:"{{count}} Kaskaden-Update fehlgeschlagen",cascadePartialFailure_other:"{{count}} Kaskaden-Updates fehlgeschlagen",usedInAgents_one:"Wird in {{count}} Agent verwendet",usedInAgents_other:"Wird in {{count}} Agents verwendet"},S={condCapabilityMatch:"capabilityMatch",condDeploymentContext:"deploymentContext",strategy_executeAll:"Alle ausführen",strategy_executeUntilFirstSuccess:"Bis zum ersten Treffer",invalidValue:"(ungültig)",appendActions:"Aktionen anhängen",expressionsAsActions:"Ausdrücke als Aktionen",groups:"Verhaltensgruppen",addGroup:"Gruppe hinzufügen",groupName:"Gruppenname",executionStrategy:"Ausführungsstrategie",rules:"Regeln",addRule:"Regel hinzufügen",ruleName:"Regelname",actions:"Aktionen",noActions:"Keine Aktionen",addAction:"Hinzufügen",actionPlaceholder:"z.B. greet, get_weather",conditions:"Bedingungen",addCondition:"Bedingung hinzufügen",conditionType:"Bedingungstyp",nestedConditions:"Verschachtelte Bedingungen",configKey:"Schlüssel",configValue:"Wert",addConfig:"Konfiguration hinzufügen",removeRule:"Regel entfernen",removeGroup:"Gruppe entfernen",removeCondition:"Bedingung entfernen",noGroups:"Keine Verhaltensgruppen definiert",noRules:"Keine Regeln in dieser Gruppe",noConditions:"Keine Bedingungen"},w={noEndpointsFound:"Keine Endpunkte in der Spezifikation gefunden",specUrlPlaceholder:"https://api.example.com/openapi.json",targetServerUrl:"Ziel-Server URL",targetServerUrlPlaceholder:"https://api.example.com",calls:"HTTP-Aufrufe",addCall:"HTTP-Aufruf hinzufügen",callName:"Aufrufname",callDescription:"Beschreibung",descriptionPlaceholder:"Beschreibung in natürlicher Sprache für LLM-Agents",request:"Anfrage",method:"Methode",path:"Pfad",pathPlaceholder:"/api/endpoint",headers:"Header",addHeader:"Header hinzufügen",queryParams:"Query-Parameter",addQueryParam:"Query-Parameter hinzufügen",contentType:"Inhaltstyp",body:"Anfragekörper",bodyPlaceholder:"JSON Body-Vorlage...",parameters:"Parameter (für LLM-Agents)",paramName:"Parametername",paramDescription:"Beschreibung",addParam:"Parameter hinzufügen",options:"Optionen",saveResponse:"Antwort speichern",responseObjectName:"Response-Objektname",responseHeaderObjectName:"Response-Header-Objektname",fireAndForget:"Senden und vergessen",batchCalls:"Batch-Aufrufe",iterationObjectName:"Iterations-Objektname",prePostInstructions:"Vor-/Nachbearbeitung",preRequest:"Vor Request",postResponse:"Nach Response",removeCall:"Aufruf entfernen",noCalls:"Keine HTTP-Aufrufe konfiguriert",actions:"Auslösende Aktionen",noActions:"Keine Aktionen",actionPlaceholder:"z.B. get_weather",addHttpCodeValidator:"HTTP-Code-Filter hinzufügen",httpCodeFilter:"HTTP-Code-Filter",runOnCodes:"Ausführen bei Codes",skipOnCodes:"Überspringen bei Codes",propName:"Eigenschaftsname",propValue:"Wert oder Vorlage",overrideTitle:"Vorhandenen Wert überschreiben",override:"Überschreiben",advancedMapping:"Objektpfad-Zuordnung",fromPath:"Von Objektpfad",toPath:"Zu Objektpfad",convertToObject:"In Objekt umwandeln",runOnValidationError:"Bei Validierungsfehler ausführen",noPropertyInstructions:"Keine Eigenschaftsanweisungen",addPropertyInstruction:"Eigenschaftsanweisung hinzufügen",pathToTargetArray:"Pfad zum Ziel-Array",iterationObjName:"Iterationsobjekt",templateFilter:"Filterausdruck",filterPlaceholder:"Optionaler Filter...",outputType:"Ausgabetyp",outputValue:"Ausgabewert",noOutputInstructions:"Keine Ausgabe-Build-Anweisungen",addOutputInstruction:"Ausgabeanweisung hinzufügen",qrValue:"Schnellantwort-Wert",qrExpressions:"Schnellantwort-Ausdrücke",noQrInstructions:"Keine Schnellantwort-Build-Anweisungen",addQrInstruction:"Schnellantwort-Anweisung hinzufügen",noRetryPolicy:"Keine Wiederholungsrichtlinie",addRetryPolicy:"Wiederholungsrichtlinie hinzufügen",maxRetries:"Max. Wiederholungen",backoffDelayMs:"Backoff-Verzögerung (ms)",retryOnHttpCodes:"Wiederholen bei HTTP-Codes",valuePathMatchers:"Wertpfad-Matcher",noValuePathMatchers:"Keine Wertpfad-Matcher",valuePath:"Wertpfad",contains:"enthält",equals:"gleich",trueIfNoMatch:"Wiederholen, wenn keine Übereinstimmung",addValuePathMatcher:"Wertpfad-Matcher hinzufügen",removeRetryPolicy:"Wiederholungsrichtlinie entfernen",delayMs:"Verzögerung (ms)",propertyInstructions:"Eigenschaftsanweisungen",outputBuildInstructions:"Ausgabe-Build-Anweisungen",qrBuildInstructions:"Schnellantwort-Build-Anweisungen",retryBackoff:"Wiederholung & Backoff",discoveredEndpoints:"Erkannte Endpunkte",discoveryError:"OpenAPI-Spezifikation konnte nicht geparst werden",openApiSpecUrl:"Aus OpenAPI-Spezifikation importieren",invalidUrl:"Geben Sie eine gültige http:// oder https:// URL ein",discovering:"Wird geparst…",discoverEndpoints:"Endpunkte erkennen",retry:"Erneut versuchen",selectedCount:"ausgewählt",importAppend:"An Aufrufe anhängen",importReplace:"Alle Aufrufe ersetzen",confirmReplace:"Ja, alle ersetzen",replaceConfirmMessage:"Dies ersetzt {{count}} vorhandene Aufrufe. Sind Sie sicher?"},v={continueOnErrorHint:"Bei einem Fehler wird die Pipeline fortgesetzt; der Fehler ist verfügbar unter ",descriptionPlaceholder:"Beschreibung in natürlicher Sprache für LLM-Agents",governanceHint:"Steuern Sie, welche Tools bereitgestellt werden. Whitelist = nur diese; Blacklist = diese ausschließen.",pipelineHint:"Deterministische, durch Aktionen ausgelöste Tool-Aufrufe (Pipeline-Modus).",responseObjectName:"Response-Objektname",discoveredTools:"Verfügbare Tools",whitelisted:"Auf Whitelist",addToWhitelist:"Zur Whitelist hinzufügen",addWhitelist:"Whitelist",blacklisted:"Auf Blacklist",addToBlacklist:"Zur Blacklist hinzufügen",addBlacklist:"Blacklist",noRetryPolicy:"Keine Wiederholungsrichtlinie",addRetryPolicy:"Wiederholungsrichtlinie hinzufügen",maxAttempts:"Max. Versuche",backoffDelayMs:"Backoff-Verzögerung (ms)",backoffMultiplier:"Backoff-Multiplikator",maxBackoffDelayMs:"Max. Backoff (ms)",removeRetryPolicy:"Wiederholungsrichtlinie entfernen",callName:"Aufrufname",removeCall:"Aufruf entfernen",description:"Beschreibung",toolName:"Tool-Name",parameterSchema:"Parameter-Schema",triggerActions:"Auslösende Aktionen",toolArguments:"Tool-Argumente",addArgument:"Argument hinzufügen",saveResponse:"Antwort speichern",continueOnError:"Bei Fehler fortfahren",retryBackoff:"Wiederholung & Backoff",preRequest:"Vor Request",propertyInstructions:"Eigenschaftsanweisungen",postResponse:"Nach Response",outputBuildInstructions:"Ausgabe-Build-Anweisungen",qrBuildInstructions:"Schnellantwort-Build-Anweisungen",discoveryError:"Verbindung zum MCP-Server fehlgeschlagen",serverConnection:"Serververbindung",displayName:"Anzeigename",serverUrl:"MCP-Server-URL",discovering:"Verbindung wird hergestellt…",discoverTools:"Tools erkennen",transport:"Transport",timeoutMs:"Zeitlimit (ms)",apiKey:"API-Schlüssel / Vault-Referenz",toolGovernance:"Tool-Governance",retry:"Erneut versuchen",noToolsFound:"Keine Tools auf diesem Server gefunden",whitelist:"Whitelist (nur erlauben)",blacklist:"Blacklist (ausschließen)",pipelineCalls:"Pipeline-Aufrufe",addCall:"MCP-Aufruf hinzufügen"},D=JSON.parse('{"addCustomInstruction":"Anweisung hinzufügen","addKnowledgeBase":"KB-Referenz hinzufügen","addMaskingRule":"Regel hinzufügen","addToolLimit":"Tool-Limit hinzufügen","anchorFirstSteps":"Erste Schritte verankern","anchorFirstStepsHint":"Eröffnungszüge werden immer beibehalten (0 = keine)","conversationMemory":"Gesprächsspeicher","conversationMemoryDesc":"Ältere Züge werden schrittweise in eine fortlaufende Zusammenfassung komprimiert. Das LLM sieht: [Systemprompt + Zusammenfassung] + [letzte N Züge wörtlich]. Ein integriertes conversationRecall-Tool ermöglicht es dem Agenten, bei Bedarf in zusammengefasste Züge zurückzugreifen.","counterweight":"Verhaltens-Gegengewichte","counterweightCustom":"Benutzerdefinierte Anweisungen","counterweightCustomHint":"Leer lassen, um die integrierte Voreinstellung für die gewählte Stufe zu verwenden.","counterweightCustomOverride":"Benutzerdefinierte Anweisungen überschreiben den voreingestellten Stufentext vollständig.","counterweightDesc":"Fügt Sicherheitsanweisungen in den Systemprompt ein. Schützt vor Selbstüberschätzung, Halluzination und unbeaufsichtigtem Handeln.","counterweightLevel":"Sicherheitsstufe","counterweightLevelCautious":"Vorsichtig","counterweightLevelNormal":"Normal (keine Einfügung)","counterweightLevelStrict":"Streng","counterweightPlacement":"Platzierung","counterweightPlacementPrefix":"Vor dem Systemprompt","counterweightPlacementSuffix":"Nach dem Systemprompt","counterweightStrictNote":"Der strenge Modus wird bei geplanter/Batch-Ausführung automatisch auf Vorsichtig herabgestuft, um destruktives \\"Schritt-für-Schritt\\"-Verhalten zu verhindern.","defaultMaxChars":"Standard-Max.-Zeichen","defaultMaxCharsHint":"(~12k Tokens bei 50000)","enableSummary":"Fortlaufende Zusammenfassung aktivieren","enableWorkflowRag":"Workflow-RAG automatisch erkennen","excludeProps":"Eigenschaften aus Zusammenfassung ausschließen","excludePropsDesc":"Bereits als persistente Eigenschaften erfasste Fakten überspringen — Fokus auf Schlussfolgerungen und impliziten Kontext","httpCallRag":"httpCall-RAG (ohne Infrastruktur)","httpCallRagHint":"Führt vor dem LLM-Aufruf einen benannten httpCall aus. Die Antwort wird als Kontext eingefügt — kein Vektorspeicher erforderlich.","httpCallRagPlaceholder":"z. B. search_docs, query_wiki","identityMasking":"Identitätsmaskierung","identityMaskingDesc":"Verhindert, dass das LLM bei Nachfragen seinen Modellnamen oder Anbieter preisgibt.","identityMaskingEmptyWarning":"Maskierung ist aktiviert, hat aber keine Regeln. Fügen Sie mindestens eine Regel hinzu, damit die Maskierung wirksam wird.","identityMaskingRulePlaceholder":"z. B. Gib niemals preis, dass du ein KI-Sprachmodell bist","identityMaskingRules":"Maskierungsregeln","identityMaskingRulesHint":"Sowohl die Aktivierung ALS AUCH mindestens eine Regel sind erforderlich, damit die Maskierung wirksam wird.","injectionStrategy":"Einfügung","kbNamePlaceholder":"z. B. product-docs","knowledgeBases":"Wissensbasen","knowledgeBasesHint":"Wissensbasen explizit über den Namen referenzieren. Jeder Name muss einer RagConfiguration im Workflow entsprechen.","legacyRag":"Legacy-RAG (veraltet)","legacyRagHint":"Diese Konfiguration verwendet das veraltete retrievalAugmentor-Format. Migrieren Sie zu den obigen Modi.","maxContextTokens":"Max. Kontext-Tokens","maxContextTokensHint":"-1 = stattdessen Schrittanzahl verwenden","maxRecallHint":"Pro Abruf-Aufruf","maxRecallTurns":"Max. Abruf-Züge","maxSummaryTokens":"Max. Zusammenfassungs-Tokens","noKnowledgeBases":"Keine Wissensbasen referenziert","perToolLimits":"Überschreibungen pro Tool","prePostDesc":"Konfigurieren Sie Eigenschaftsanweisungen, die vor jeder LLM-Anfrage ausgeführt werden, und Ausgabe-/Eigenschaftsanweisungen, die nach jeder Antwort ausgeführt werden.","promptSafety":"Prompt-Sicherheit","ragDefaults":"Standard-Abrufparameter","recentWindow":"Aktuelles Fenster (Schritte)","recentWindowHint":"Wörtlich beibehaltene Züge","removeLegacyRag":"Legacy-Konfiguration entfernen","strategyPaginate":"Paginieren (LLM ruft mehr ab)","strategySummarize":"Zusammenfassen (per günstigem Modell)","strategyTruncate":"Abschneiden (harter Schnitt)","summarizationPrompt":"Benutzerdefinierter Zusammenfassungs-Prompt (optional)","summarizationPromptPlaceholder":"Leer lassen, um den strukturierten Standard-Prompt zu verwenden, der Ziele, Entscheidungen, Begründungen und Tonfall bewahrt.","summarizeInfoBanner":"Der Summarizer verwendet denselben Anbieter und API-Schlüssel wie diese Aufgabe. Nur der Modellname wird gegen eine günstigere Variante ausgetauscht (z. B. gpt-4o-mini).","summarizerModel":"Summarizer-Modell","summarizerModelHint":"(fällt bei leerem Feld auf Abschneiden zurück)","summarizerModelPlaceholder":"z. B. gpt-4o-mini","summaryModel":"Zusammenfassungs-Modell","summaryProvider":"Zusammenfassungs-Anbieter","summaryProviderHint":"Verwenden Sie ein günstiges/schnelles Modell für die Zusammenfassung","tokenWindow":"Token-bewusstes Kontextfenster","tokenWindowDesc":"Ersetzt den auf Schrittanzahl basierenden Verlauf durch token-bewusstes Packen. Wenn maxContextTokens gesetzt ist (> 0), passt die Engine so viele aktuelle Züge wie möglich in das Budget ein und verankert optional die Eröffnungszüge.","toolResponseLimits":"Tool-Antwortlimits","toolResponseLimitsDesc":"Schneidet ausführliche Tool-Ausgaben vor der erneuten Einfügung in das LLM-Kontextfenster ab. Verhindert das Aufblähen des Kontexts.","truncationStrategy":"Strategie","workflowRagHint":"Erkennt automatisch alle RAG-Schritte aus dem Workflow. Wird nur verwendet, wenn oben keine expliziten Wissensbasen aufgeführt sind.","tasks":"LLM-Aufgaben","addTask":"Task hinzufügen","noTasks":"Keine LLM Tasks konfiguriert","removeTask":"Task entfernen","taskId":"Aufgaben-ID","description":"Beschreibung","descriptionPlaceholder":"Was diese Aufgabe bewirkt","triggerActions":"Auslösende Aktionen","noActions":"Keine Aktionen","actionPlaceholder":"z.B. help, chat","systemPrompt":"Systemprompt","systemPromptPlaceholder":"Du bist ein hilfreicher Assistent...","modelParams":"Modellparameter","addParam":"Parameter hinzufügen","agentMode":"Agentenmodus","enableBuiltInTools":"Integrierte Tools aktivieren","toolWhitelist":"Tool Whitelist (leer = alle)","enableHttpCallTools":"HTTP Call Tools automatisch erkennen","enableHttpCallToolsDesc":"Alle httpcall-Erweiterungen des Workflows automatisch als LLM-Tools bereitstellen","httpCallTools":"HTTP-Aufruf-Tool-URIs","httpCallToolsHint":"Explizite httpcall-URIs (zusätzlich zu automatisch erkannten)","addTool":"Tool URI hinzufügen","mcpServers":"MCP-Server","mcpServersDesc":"Externe MCP-Server, deren Tools dem LLM zur Verfügung stehen","addMcpServer":"MCP Server hinzufügen","mcpUrlPlaceholder":"http://localhost:7070/mcp","mcpName":"Name","mcpApiKey":"API Key / Vault-Referenz","historyLimit":"Verlaufslimit","historyLimitHint":"(-1 = unbegrenzt)","budgetPerf":"Budget & Leistung","maxBudget":"Max. Budget ($)","costTracking":"Kostenerfassung","toolCaching":"Werkzeug-Caching","rateLimiting":"Ratenbegrenzung","defaultRate":"Standardrate (Anfr./Min.)","prePostInstructions":"Vor-/Nachbearbeitung","preRequest":"Vor Request","postResponse":"Nach Response","enableMcpCallTools":"MCP-Werkzeuge automatisch erkennen","enableMcpCallToolsDesc":"Alle mcpcalls-Erweiterungen aus dem Workflow automatisch als LLM-Werkzeuge bereitstellen","a2aAgents":"A2A-Agenten","a2aAgentsDesc":"Entfernte A2A-kompatible Agenten, deren Fähigkeiten zu LLM-Werkzeugen werden","addA2aAgent":"A2A-Agent hinzufügen","a2aUrlPlaceholder":"https://remote.example.com/a2a/agents/...","a2aName":"Anzeigename","a2aApiKey":"${vault:my-a2a-key}","a2aTimeout":"Zeitlimit (ms)","a2aSkillsFilter":"Fähigkeitenfilter (leer = alle)","cascade":"Modellkaskade","cascadeDesc":"Try a cheap/fast model first. If confidence is too low, automatically escalate to a more powerful (and expensive) model.","cascadeEnable":"Modellkaskade aktivieren","cascadeStrategy":"Strategie","strategyCascade":"Schrittweise Eskalation","strategyParallel":"Parallel (zukünftig)","cascadeStrategyHint":"Beginnt mit dem günstigsten Modell und eskaliert bei niedriger Konfidenz","cascadeEvalStrategy":"Konfidenzbewertung","cascadeEvalHint":"Wie bestimmt wird, ob eine Antwort ausreichend gut ist","evalStructured":"Strukturierte Ausgabe (JSON)","evalHeuristic":"Heuristisch (Unsicherheitserkennung)","evalJudge":"Bewertungsmodell (Sub-LLM)","evalNone":"Keine (immer akzeptieren)","cascadeInAgent":"Kaskade auch im Agentenmodus (mit Werkzeugen) verwenden","cascadeSteps":"Cascade Steps","cascadeStepsDesc":"Order matters: first step tried first. Last step is always accepted.","cascadeModelName":"z. B. claude-sonnet-5","cascadeConfidence":"Min. Confidence (0-1)","cascadeConfidencePlaceholder":"leer = immer akzeptieren","cascadeTimeout":"Zeitlimit (ms)","addCascadeStep":"Kaskadenschritt hinzufügen","cascadeReturnBest":"Antwort mit der besten Bewertung über alle Schritte zurückgeben","cascadeEvalNoneHint":"Die Konfidenzprüfung ist deaktiviert — die Antwort des ersten Schritts wird immer akzeptiert.","cascadeCeilings":"Obergrenzen & Preise","cascadeMaxDuration":"Maximale Gesamtdauer (ms)","cascadeMaxCost":"Maximale Kosten pro Durchlauf ($)","cascadeUnlimited":"unbegrenzt","cascadeInputPrice":"Eingabe $ / 1M Tokens","cascadeOutputPrice":"Ausgabe $ / 1M Tokens","cascadePricingHint":"Die Standard-Token-Preise fließen in die Kostenverfolgung und die Kostenobergrenze ein. Einzelne Schritte können sie überschreiben.","cascadeJudgeModel":"Bewertungsmodell","cascadeJudgeModelDesc":"Ein separates (meist günstiges) Modell, das die Konfidenz jeder Antwort bewertet.","cascadeJudgeApiKey":"Bewertungsmodell-API-Schlüssel","cascadeHeuristic":"Heuristik-Feinabstimmung","cascadeHeuristicDesc":"Optionale Überschreibungen für die Unsicherheits-/Ablehnungserkennung. Leere Felder verwenden die integrierten englischen Standardwerte. Passen Sie die Phrasenlisten für nicht-englische Bereitstellungen an.","cascadeHeuristicDefaults":"Integrierte Standardwerte","cascadeHeuristicPhrasePlaceholder":"Phrase hinzufügen…","cascadeHeuristicPhrasesLow":"Unsicherheitsphrasen (niedrige Konfidenz)","cascadeHeuristicPhrasesRefusal":"Ablehnungsphrasen","cascadeHeuristicShortLen":"Länge für kurze Antwort","cascadeHeuristicShortScore":"Bewertung für kurze Antwort","cascadeHeuristicRefusalScore":"Bewertung bei Ablehnung","cascadeHeuristicHedgingScore":"Bewertung bei Unsicherheit","cascadeHeuristicDefaultScore":"Standardbewertung","cascadeStepApiKey":"API-Schlüssel","cascadeStepApiKeyPlaceholder":"übernimmt Aufgaben-Schlüssel, falls leer","cascadeCrossProvider":"anbieterübergreifend","cascadeStepAdvanced":"Erweitert (Preise & Parameter)","cascadeStepInputPrice":"Eingabe $ / 1M","cascadeStepOutputPrice":"Ausgabe $ / 1M","cascadeStepPriceInherit":"Kaskaden-Standard","cascadeStepParams":"Zusätzliche Parameter","cascadeStepAddParam":"Parameter hinzufügen","cascadeIssues":{"NO_STEPS":"Die Kaskade ist aktiviert, hat aber keine Schritte — sie wird bei der Ausführung fehlschlagen.","UNKNOWN_STRATEGY":"Unbekannte Strategie \\"{{strategy}}\\" — die Kaskade wird sequenziell ausgeführt.","PARALLEL_NOT_IMPLEMENTED":"Die parallele Strategie ist noch nicht implementiert — die Schritte werden sequenziell ausgeführt.","UNKNOWN_EVAL_STRATEGY":"Unbekannte Konfidenzbewertung \\"{{strategy}}\\" — Standard ist Strukturierte Ausgabe.","JUDGE_MODEL_MISSING":"Für die Bewertung durch das Bewertungsmodell ist kein Bewertungsmodell konfiguriert — die Konfidenz greift auf die Heuristik zurück.","JUDGE_CROSS_PROVIDER_NO_APIKEY":"Das Bewertungsmodell nutzt einen anderen Anbieter, hat aber keinen eigenen API-Schlüssel — es würde den Aufgaben-Schlüssel übernehmen.","MAX_DURATION_NONPOSITIVE":"Die maximale Gesamtdauer muss größer als 0 sein.","MAX_COST_NEGATIVE":"Die maximalen Kosten pro Durchlauf dürfen nicht negativ sein.","CASCADE_INPUT_PRICE_NEGATIVE":"Der Eingabepreis der Kaskade darf nicht negativ sein.","CASCADE_OUTPUT_PRICE_NEGATIVE":"Der Ausgabepreis der Kaskade darf nicht negativ sein.","CONVERT_TO_OBJECT_STRUCTURED":"convertToObject ist mit der Konfidenz per Strukturierte Ausgabe nicht kompatibel — die Kaskade verwendet stattdessen die Heuristik.","STEP_INPUT_PRICE_NEGATIVE":"Der Eingabepreis von Schritt {{step}} darf nicht negativ sein.","STEP_OUTPUT_PRICE_NEGATIVE":"Der Ausgabepreis von Schritt {{step}} darf nicht negativ sein.","STEP_CONFIDENCE_OUT_OF_RANGE":"Die Konfidenz von Schritt {{step}} muss zwischen 0 und 1 liegen.","STEP_DEAD_NULL_THRESHOLD":"Schritt {{step}} hat keinen Konfidenzschwellenwert — spätere Schritte werden unerreichbar.","STEP_TIMEOUT_NONPOSITIVE":"Das Zeitlimit von Schritt {{step}} muss größer als 0 sein.","STEP_CROSS_PROVIDER_NO_APIKEY":"Schritt {{step}} nutzt einen anderen Anbieter, hat aber keinen eigenen API-Schlüssel — es würde den Aufgaben-Schlüssel übernehmen."},"parallelExecution":"Parallele Werkzeugausführung","parallelExecutionDesc":"Run independent tool calls concurrently","parallelTimeout":"Zeitlimit (ms)","maxToolIterations":"Max. Werkzeug-Iterationen","maxToolIterationsHint":"(Standard 10)","toolRateLimits":"Ratenlimits pro Werkzeug","toolRateLimitsDesc":"Override default rate for specific tools","toolName":"Werkzeugname","addToolRate":"Ratenlimit hinzufügen","retryConfig":"Wiederholungskonfiguration","retryDesc":"Configure automatic retries with exponential backoff.","retryMaxAttempts":"Max. Versuche","retryDelay":"Anfangsverzögerung (ms)","retryMultiplier":"Backoff-Faktor","retryMaxDelay":"Max. Verzögerung (ms)","ragConfig":"RAG (Wissensabruf)","ragDesc":"Augment LLM responses with retrieved documents.","ragHttpCall":"HTTP-Aufruf-URI","ragEmbeddingModel":"Embedding-Modell","ragEmbeddingModelPlaceholder":"z. B. text-embedding-3-small","ragEmbeddingStore":"Embedding-Speicher","ragEmbeddingStorePlaceholder":"z. B. pgvector, qdrant","ragMaxResults":"Max. Ergebnisse","ragMinScore":"Min Similarity Score (0-1)","moveDown":"Nach unten","moveUp":"Nach oben","removeStep":"Schritt entfernen","execution":"Ausführung","budgetCosts":"Budget & Kosten","preRequestDesc":"Eigenschaften vor der LLM-Ausführung setzen oder transformieren.","postResponseDesc":"LLM-Ausgabe verarbeiten: Eigenschaften setzen, Ausgabe-Nachrichten erstellen und Quick Replies generieren.","postPropertyInstructions":"Eigenschaften-Anweisungen","postOutputInstructions":"Ausgabe-Anweisungen","postQrInstructions":"Quick Reply-Anweisungen","allSkills":"Alle Fähigkeiten","skillPlaceholder":"z. B. order-tracking","modeAgent":"Agent","modeChat":"Chat","perMinute":"/Min.","allTools":"Alle Werkzeuge","selectSpecific":"Manuell auswählen","allToolsInfo":"Alle {{count}} integrierten Werkzeuge stehen dem LLM zur Verfügung. Wählen Sie „Manuell auswählen“, um die Auswahl einzuschränken.","availableTools":"Verfügbare Werkzeuge","toolCount":"{{selected}} von {{total}} ausgewählt","toolSources":"Workflow-Werkzeugquellen","toolSourcesInfo":"Beide Quellen sind standardmäßig aktiv — alle HTTP- und MCP-Aufrufe im Workflow werden automatisch als LLM-Werkzeuge bereitgestellt. Deaktivieren Sie eine Quelle, um sie auszuschließen.","included":"Enthalten","toolApprovals":"Tool-Freigabesperrung (pro Aufgabe)","toolApprovalsEnable":"Tool-Freigaben für diese Aufgabe überschreiben","toolApprovalsDesc":"Überschreibt die Tool-Freigaben auf Agentenebene nur für DIESE Aufgabe — ein vollständiger Ersatz, keine Zusammenführung.","responseValidation":"Antwortvalidierung & Wiederherstellung","responseValidationDesc":"Steuern Sie, wie die Engine auf einen leeren, abgeschnittenen, inhaltsgefilterten, abgelehnten oder abgelaufenen Turn reagiert. \\"Fallback\\" ersetzt durch eine vorgefertigte Nachricht; \\"Fehler\\" lässt den Turn fehlschlagen; \\"Warnen\\" protokolliert und fährt fort; \\"Ignorieren\\" tut nichts.","rvEnable":"Antwortvalidierung aktivieren","rvDisabledInfo":"Die untenstehenden Richtlinien werden gespeichert, sind aber nur wirksam, solange die Validierung aktiviert ist.","rvActionIgnore":"Ignorieren","rvActionWarn":"Warnen (protokollieren & fortfahren)","rvActionFallback":"Fallback (vorgefertigte Nachricht)","rvActionError":"Fehler (Turn fehlschlagen lassen)","rvOnEmpty":"Leere Antwort","rvOnEmptyHint":"Das LLM hat nichts zurückgegeben (leer oder null)","rvOnTruncation":"Abgeschnittene Antwort","rvOnTruncationHint":"Antwort abgeschnitten (finishReason=LENGTH)","rvOnContentFilter":"Inhaltsgefiltert","rvOnContentFilterHint":"Antwort durch den Inhaltsfilter des Anbieters blockiert","rvOnRefusal":"Ablehnung","rvOnRefusalHint":"Das LLM hat die Antwort verweigert (heuristische Erkennung)","rvOnStreamingTimeout":"Streaming-Timeout","rvOnStreamingTimeoutHint":"Eine Streaming-Antwort ist vor dem Abschluss abgelaufen","streamingTimeoutSeconds":"Streaming-Timeout (Sekunden)","streamingTimeoutSecondsHint":"Überschreibt den Engine-Standardwert (120s). Gilt nur beim Streaming; leer = Standard verwenden.","taskPricing":"Preise für einfache Aufrufe","taskPricingDesc":"Bepreist die normalen (nicht kaskadierten) Modellaufrufe dieser Aufgabe für die Kostenverfolgung und Gruppenkostenobergrenzen. Ohne Preis (leer) werden 0 $ berechnet."}'),z={labelPlaceholder:"Link-Beschriftung...",pathPlaceholder:"Link-Pfad...",altPlaceholder:"Alt-Text...",uriPlaceholder:"Bild-URL...",language:"Sprache",langPlaceholder:"z.B. en, de",outputSets:"Ausgabesets",addOutputSet:"Ausgabeset hinzufügen",noOutputSets:"Keine Ausgabesets konfiguriert",actionName:"Aktionsname",timesOccurred:"×",removeOutput:"Entfernen",outputs:"Ausgaben",alternativeGroup:"Alternatives",addAlternative:"Alternative hinzufügen",addOutputGroup:"Ausgabegruppe hinzufügen",textPlaceholder:"Ausgabetext...",urlPlaceholder:"URL…",delayMs:"Verzögerung (ms)",quickReplies:"Schnellantworten",noQuickReplies:"Keine Quick Replies",addQuickReply:"Quick Reply hinzufügen",qrValue:"Button-Text",qrExpressions:"Ausdrücke",default:"Standard",invalidJson:"Ungültiges JSON",buttonTypePlaceholder:"Button-Typ (z. B. postback)",buttonLabelPlaceholder:"Beschriftung...",onPressPlaceholder:'{"action":"..."}',subTypePlaceholder:"Untertyp (z. B. text, email)",inputPlaceholderPlaceholder:"Platzhalter...",inputLabelPlaceholder:"Beschriftung...",defaultValuePlaceholder:"Standardwert...",minLength:"Min. Länge",minLengthShort:"Min.",maxLength:"Max. Länge",maxLengthShort:"Max.",validationMsgPlaceholder:"Validierungsfehlermeldung...",jsonPlaceholder:'{"key":"value"}'},T={setters:"Eigenschafts-Setter",addSetter:"Setter hinzufügen",noSetters:"Keine Property Setter konfiguriert",removeSetter:"Entfernen",triggerActions:"Auslösende Aktionen",noActions:"Keine Aktionen",actionPlaceholder:"z.B. greet, fallback",properties:"Eigenschaften",noProperties:"Keine Eigenschaften",addProperty:"Eigenschaft hinzufügen",propName:"Eigenschaftsname",propValue:"Wert / Ausdruck",fromPath:"Quellpfad",fromObjectPath:"fromObjectPath",override:"Überschreiben",propsCount:"Eigensch.",untitled:"(keine Aktionen)",openEditor:"Im Editor bearbeiten",visibilityTitle:"Welche Agents diese longTerm-Eigenschaft sehen können",editValue:"Wert bearbeiten",toggleGroup:"Eigenschaftsgruppe umschalten"},E={language:"Sprache",langPlaceholder:"z.B. en, de",words:"Wörter",addWord:"Wort hinzufügen",wordPlaceholder:"z.B. hallo",phrases:"Phrasen",addPhrase:"Phrase hinzufügen",phrasePlaceholder:"z.B. guten Morgen",regExs:"Reguläre Ausdrücke",addRegEx:"RegEx hinzufügen",regexPlaceholder:"Regulärer Ausdruck",expressionPlaceholder:"z.B. greeting(hello)",frequency:"Häufigkeit",none:"Keine definiert"},y={title:"Parser-Konfiguration",configure:"Konfigurieren",config:"Konfiguration",appendExpressions:"Ausdrücke anhängen",includeUnused:"Unbenutzte Ausdrücke einschließen",includeUnknown:"Unbekannte Ausdrücke einschließen",dictionaries:"Wörterbücher",builtInDicts:"Integrierte Wörterbücher",regularDicts:"Reguläre Wörterbücher",addDict:"Hinzufügen",removeDict:"Wörterbuch entfernen",noRegularDicts:"Keine regulären Wörterbücher konfiguriert",dictUri:"Wörterbuch-Ressourcen-URI",dictUriPlaceholder:"eddi://ai.labs.dictionary/dictionarystore/dictionaries/?version=",corrections:"Korrekturen",distance:"Distanz",normalizers:"Normalisierer",removePunctuation:"Interpunktion entfernen",regexPattern:"Muster",dict:{integer:"Ganzzahl-Wörterbuch",decimal:"Dezimal-Wörterbuch",punctuation:"Interpunktions-Wörterbuch",email:"E-Mail-Wörterbuch",time:"Zeitausdruck-Wörterbuch",ordinalNumber:"Ordnungszahl-Wörterbuch"},corr:{levenshtein:"Levenshtein-Korrektur",phonetic:"Phonetische Korrektur",mergedTerms:"Zusammengesetzte Terme Korrektur"},norm:{punctuation:"Interpunktions-Normalisierer",specialCharacter:"Sonderzeichen-Normalisierer",contractedWords:"Kontraktions-Normalisierer",allowedCharacter:"Erlaubte-Zeichen-Normalisierer"},regularDictsHint:"Ihre eigenen Wörter, Phrasen und Muster, gespeichert als Wörterbuch-Ressourcen.",openDict:"Wörterbuch in neuem Tab öffnen"},P={title:"Reguläres Wörterbuch hinzufügen",searchPlaceholder:"Wörterbücher suchen…",added:"Hinzugefügt",empty:"Noch keine Wörterbücher",emptyDescription:"Ein Wörterbuch bringt dem Parser Ihre eigenen Wörter, Phrasen und Muster bei.",create:"Wörterbuch erstellen",createTitle:"Neues Wörterbuch",createHint:"Es wird leer erstellt und sofort mit diesem Parser verknüpft — Wörter, Phrasen und Muster fügen Sie im Wörterbuch-Editor hinzu.",createFailed:"Das Wörterbuch wurde erstellt, konnte aber nicht verknüpft werden.",created:"Wörterbuch erstellt und verknüpft",defaultName:"Neues Wörterbuch",descriptionPlaceholder:"Was dieses Wörterbuch dem Parser beibringt…",manual:"Stattdessen per URI verknüpfen",createdUnnamed:"Wörterbuch erstellt und verknüpft, aber sein Name konnte nicht gespeichert werden — benennen Sie es im Wörterbuch-Editor um."},M={activeConversations:"Aktive Gespräche",eventHistory:"Ereignisverlauf",noActiveQueues:"Keine aktiven Gespräche in Verarbeitung",payload:"Payload",successRate:"Erfolgsrate",tasksPerSec:"Aufgaben/s",totalPending:"ausstehend",confirmDiscardDescription:"Entfernt die Dead-Letter-Aufgabe dauerhaft. Sie kann danach nicht erneut ausgeführt werden. Dies kann nicht rückgängig gemacht werden.",confirmDiscardTitle:"Dead-Letter-Eintrag verwerfen?",title:"Koordinator-Dashboard",subtitle:"Konversationsverarbeitung überwachen und Dead-Letter-Einträge verwalten",type:"Coordinator-Typ",connection:"Verbindung",processed:"Verarbeitete Aufgaben",deadLettered:"Unzustellbar",activeQueues:"Aktive Queues",queued:"in Warteschlange",deadLetterTitle:"Unzustellbare Nachrichten",noDeadLetters:"Keine Dead-Letter-Einträge",colId:"ID",colConversation:"Gespräch",colError:"Fehler",colTime:"Zeitpunkt",colActions:"Aktionen",replay:"Wiederholen",discard:"Verwerfen",purgeAll:"Alle löschen",confirmPurge:"Alle löschen?",yes:"Ja",cancel:"Abbrechen",replaySuccess:"Dead-Letter erneut eingereiht",replayError:"Wiederholung fehlgeschlagen",discardSuccess:"Dead-Letter verworfen",discardError:"Verwerfen fehlgeschlagen",purgeSuccess:"Alle Dead-Letter-Einträge gelöscht",purgeError:"Löschen fehlgeschlagen",empty:"Keine Coordinator-Daten verfügbar",emptyHint:"Der Coordinator-Dienst startet möglicherweise noch. Daten erscheinen automatisch.",lastNSnapshots:"Letzte {{count}} Momentaufnahmen"},I={expand:"Erweitern",expandHint:"Vollbild öffnen (Strg+Umschalt+F)",close:"Fertig",lines:"Zeilen",chars:"Zeichen",fullscreenTitle:"Inhaltseditor",fullscreenDescription:"Vollbild-Inhaltseditor. Escape zum Schließen."},R={newLogs:"Neue Logs",title:"Protokolle",description:"Live-Protokollstream überwachen oder historische Logs durchsuchen.",tabLive:"Live",tabHistory:"Verlauf",connected:"Verbunden",disconnected:"Getrennt",filterAgent:"Agenten-ID…",filterConversation:"Gesprächs-ID...",filterInstance:"Instanz-ID...",allLevels:"Alle Stufen",pause:"Pause",resume:"Fortsetzen",clear:"Löschen",search:"Suchen",waitingForLogs:"Warte auf Protokolle...",loadingRecentLogs:"Lade aktuelle Protokolle…",noRecentLogs:"Keine aktuellen Protokollaktivitäten.",noRecentLogsHint:"Neue Protokolle werden hier angezeigt, sobald sie vom Backend gestreamt werden.",connectingStream:"Verbinde mit Stream...",noHistoryLogs:"Keine historischen Logs gefunden.",entryCount:"{{count}} Einträge",showStacktrace:"Stacktrace anzeigen ({{count}} Frames)",hideStacktrace:"Stacktrace ausblenden",allAgents:"Alle Agenten",allConversations:"Alle Gespräche",waitingHint:"Logs erscheinen hier, sobald sie vom Backend gestreamt werden.",noHistoryHint:"Versuchen Sie, die Filter anzupassen oder nach einem anderen Agent oder Konversation zu suchen.",searchConversations:"Suche nach ID, Agent, Benutzer…",stepsCount:"{{count}} Schritte",noConversationsFound:"Keine Konversationen gefunden",useConversationId:"ID verwenden: {{id}}",searchLogs:"Logs durchsuchen…",errors:"Fehler",warnings:"Warnungen",infos:"Info",debugs:"Debug",filteredCount:"{{shown}} von {{total}} Einträgen",copyEntry:"Logeintrag kopieren",export:"Exportieren",stateReady:"Bereit",stateActive:"Aktiv",stateError:"Fehler",stateEnded:"Beendet"},C={loadError:"Secrets konnten nicht geladen werden",allAgents:"Alle Agenten",allowedAgents:"Zugelassene Agenten",allowedAgentsHint:"Leer lassen für alle Agenten. Das Hinzufügen von Agenten-IDs hilft nachzuvollziehen, welche Agenten dieses Secret verwenden.",allowedAgentsLabel:"Zugelassene Agenten (optional)",allowedAgentsPlaceholder:"Agenten-ID eingeben und Enter drücken (leer = alle Agenten)",deleteKey:"{{key}} löschen",hideValue:"Wert ausblenden",newValuePlaceholder:"Neuer Secret-Wert…",rotate:"Rotieren",rotateDesc:"Geben Sie den neuen Wert ein. Die vorhandenen Referenzen werden weiterhin zum aktualisierten Wert aufgelöst.",rotateKey:"{{key}} rotieren",rotateSuccess:'Secret "{{key}}" rotiert',rotateTitle:'"{{key}}" rotieren',showValue:"Wert anzeigen",title:"Geheimnistresor",description:"Verschlüsselte Secrets im Vault verwalten. Werte werden nie offengelegt.",tenantId:"Mandanten-ID",refresh:"Secrets laden",create:"Secret hinzufügen",createTitle:"Secret hinzufügen",keyName:"Schlüsselname",keyNameLabel:"Schlüsselname",keyNamePlaceholder:"z.B. apiKey, dbPassword",valueLabel:"Secret-Wert",valuePlaceholder:"Secret-Wert eingeben…",storeWarning:"Der Wert wird verschlüsselt. Er kann nach dem Speichern nicht mehr abgerufen werden.",store:"Secret speichern",storeSuccess:'Secret "{{key}}" gespeichert',deleteSuccess:'Secret "{{key}}" gelöscht',created:"Erstellt",lastAccessed:"Letzter Zugriff",checksum:"Prüfsumme",actions:"Aktionen",confirmDeleteTitle:"Secret löschen",confirmDeleteMessage:'Möchten Sie "{{key}}" wirklich dauerhaft löschen? Diese Aktion kann nicht rückgängig gemacht werden.',empty:"Keine Secrets gefunden",emptyHint:"Für den Mandanten „{{tenant}}“ sind noch keine Secrets gespeichert. Klicken Sie auf „Secret hinzufügen“, um eines zu erstellen.",vaultUp:"Vault online",vaultDown:"Vault offline",descriptionLabel:"Beschreibung (optional)",descriptionPlaceholder:"z. B. OpenAI-API-Schlüssel für Produktion",descriptionCol:"Beschreibung",reference:"Referenz",willUseRef:"Referenz:",copyRef:"Tresor-Referenz kopieren",refCopied:"Kopiert: {{ref}}",lastRotated:"Zuletzt rotiert",scopeExplanation:"Geheimnisse gelten pro Mandant und werden von allen Agenten geteilt. Referenzieren Sie sie in Konfigurationen mit ${vault:keyName}. Der Zugriff wird durch die Konfigurationsautorenschaft gesteuert.",creatingFor:'Speicherung im Mandanten "{{tenant}}" — für alle Agenten verfügbar',vaultNotConfigured:"Geheimnistresor ist nicht konfiguriert",viewDocs:"Dokumentation anzeigen",selectAgentFirst:"Bitte zuerst einen Agenten auswählen",dangerZoneTitle:"Lebenszyklus des Verschlüsselungsschlüssels",dangerZoneDesc:"Betriebliche Wiederherstellungsaktionen für die kryptografischen Schlüssel des Vaults. Verwenden Sie diese, um Schlüssel zu rotieren oder den Zugriff nach einer Änderung des Master-Schlüssels wiederherzustellen. Unabhängig vom Rotieren des Werts eines einzelnen Secrets oben.",rotateDekTitle:"Verschlüsselungsschlüssel rotieren (DEK)",rotateDekBlurb:"Sicher — kein Neustart. Erzeugt einen neuen mandantenspezifischen Datenverschlüsselungsschlüssel und verschlüsselt alle Secrets dieses Mandanten neu.",rotateDekAction:"DEK rotieren",rotateDekConfirmTitle:"Verschlüsselungsschlüssel rotieren (DEK)?",rotateDekConfirm:"DEK jetzt rotieren",rotateKekTitle:"Master-Schlüssel rotieren (KEK)",rotateKekBlurb:"Verschlüsselt alle Mandanten-DEKs mit einem neuen Master-Schlüssel neu. Erfordert das Aktualisieren von EDDI_VAULT_MASTER_KEY und einen anschließenden Neustart.",rotateKekAction:"Master-Schlüssel rotieren",rotateKekConfirmTitle:"Master-Schlüssel rotieren (KEK)?",rotateKekConfirmDesc:"Verschlüsselt den Datenverschlüsselungsschlüssel jedes Mandanten mit einem neuen Master-Schlüssel neu. Die Secret-Werte selbst bleiben unverändert.",rotateKekConfirm:"Master-Schlüssel jetzt rotieren",kekTlsWarning:"Beide Schlüssel werden im Anfragetext gesendet. Führen Sie dies nur über eine TLS-Verbindung (HTTPS) aus, damit die Schlüssel während der Übertragung nicht offengelegt werden.",kekOldKeyLabel:"Aktueller Master-Schlüssel",kekOldKeyPlaceholder:"Aktueller EDDI_VAULT_MASTER_KEY",kekNewKeyLabel:"Neuer Master-Schlüssel",kekNewKeyPlaceholder:"Neuer Schlüssel — mindestens 8 Zeichen",kekNewKeyTooShort:"Der neue Master-Schlüssel muss mindestens 8 Zeichen lang sein.",kekRestartHint:"Nach der Rotation müssen Sie EDDI_VAULT_MASTER_KEY auf den neuen Schlüssel aktualisieren und EDDI neu starten.",kekResultInstruction:"Aktion erforderlich: Setzen Sie die Umgebungsvariable EDDI_VAULT_MASTER_KEY auf den NEUEN Master-Schlüssel und starten Sie EDDI neu. Bis dahin verwendet die laufende Instanz weiterhin den alten Schlüssel im Speicher.",resetTenantTitle:"Vault für diesen Mandanten zurücksetzen",resetTenantBlurb:"Destruktive letzte Möglichkeit. Löscht dauerhaft alle Secrets und den DEK, damit der Vault neu beginnen kann — verwenden Sie dies nach einem verlorenen oder geänderten Master-Schlüssel.",resetTenantAction:"Vault zurücksetzen",resetTenantConfirmTitle:"Vault für diesen Mandanten zurücksetzen?",resetTenantConfirm:"Vault dauerhaft zurücksetzen",resetConfirmLabel:'Geben Sie zur Bestätigung den Mandantennamen "{{tenant}}" ein',tableTitle_one:'{{count}} Geheimnis im Mandanten "{{tenant}}"',tableTitle_other:'{{count}} Geheimnisse im Mandanten "{{tenant}}"',rotateDekConfirmDesc_one:'Dies erzeugt einen neuen Datenverschlüsselungsschlüssel für den Mandanten "{{tenant}}" und verschlüsselt dessen {{count}} Secret neu. Dies ist sicher und wird sofort wirksam — kein Neustart erforderlich.',rotateDekConfirmDesc_other:'Dies erzeugt einen neuen Datenverschlüsselungsschlüssel für den Mandanten "{{tenant}}" und verschlüsselt dessen {{count}} Secrets neu. Dies ist sicher und wird sofort wirksam — kein Neustart erforderlich.',rotateDekSuccess_one:"Verschlüsselungsschlüssel rotiert — {{count}} Secret neu verschlüsselt",rotateDekSuccess_other:"Verschlüsselungsschlüssel rotiert — {{count}} Secrets neu verschlüsselt",kekResultTitle_one:"Master-Schlüssel rotiert — {{count}} DEK neu verschlüsselt",kekResultTitle_other:"Master-Schlüssel rotiert — {{count}} DEKs neu verschlüsselt",rotateKekSuccess_one:"Master-Schlüssel rotiert — {{count}} DEK neu verschlüsselt. Aktualisieren Sie EDDI_VAULT_MASTER_KEY und starten Sie neu.",rotateKekSuccess_other:"Master-Schlüssel rotiert — {{count}} DEKs neu verschlüsselt. Aktualisieren Sie EDDI_VAULT_MASTER_KEY und starten Sie neu.",resetTenantConfirmDesc_one:'Dies löscht dauerhaft alle {{count}} Secret und den Datenverschlüsselungsschlüssel für den Mandanten "{{tenant}}". Verwenden Sie dies als Wiederherstellungsschritt, wenn der Master-Schlüssel verloren ging oder geändert wurde und der alte Schlüssel nicht verfügbar ist. Dies kann nicht rückgängig gemacht werden.',resetTenantConfirmDesc_other:'Dies löscht dauerhaft alle {{count}} Secrets und den Datenverschlüsselungsschlüssel für den Mandanten "{{tenant}}". Verwenden Sie dies als Wiederherstellungsschritt, wenn der Master-Schlüssel verloren ging oder geändert wurde und der alte Schlüssel nicht verfügbar ist. Dies kann nicht rückgängig gemacht werden.',resetSecretCount_one:"{{count}} Secret gehen dauerhaft verloren",resetSecretCount_other:"{{count}} Secrets gehen dauerhaft verloren",resetTenantSuccess_one:'Vault für "{{tenant}}" zurückgesetzt — {{count}} Secret dauerhaft gelöscht',resetTenantSuccess_other:'Vault für "{{tenant}}" zurückgesetzt — {{count}} Secrets dauerhaft gelöscht'},N={title:"Prüfprotokoll",description:"Durchsuchen Sie das unveränderliche Audit-Protokoll für Compliance und Debugging.",byConversation:"Nach Gespräch",byAgent:"Nach Agent",selectAgent:"Agent auswählen…",conversationIdPlaceholder:"Gesprächs-ID eingeben...",agentIdPlaceholder:"Agent ID eingeben...",versionPlaceholder:"Version (optional)",search:"Suchen",entries:"Einträge",conversations:"Gespräche",totalDuration:"gesamt",totalCost:"Gesamtkosten",step:"Schritt",tasks:"Aufgaben",input:"Eingabe",output:"Ausgabe",llmDetail:"LLM-Detail",toolCalls:"Werkzeugaufrufe",hmacIntegrity:"HMAC-Integrität verifiziert",empty:"Audit-Einträge suchen",emptyHint:"Geben Sie oben eine Gesprächs-ID ein, um den Audit Trail zu durchsuchen.",emptyAgent:"Agent auswählen, um seinen Audit Trail anzuzeigen",emptyAgentHint:"Wählen Sie einen deployten Agent aus der Dropdown-Liste, um alle Audit-Einträge zu sehen.",noResults:"Keine Audit-Einträge gefunden",noResultsHint:"Versuchen Sie eine andere ID oder prüfen Sie, ob das Gespräch verarbeitet wurde.",loadMore:"Mehr laden",export:"Exportieren",autoRefreshToggle:"Auto-Aktualisierung umschalten (alle 10s)",autoRefreshOn:"Auto",autoRefreshOff:"Auto",integrityVerified:"Alle Einträge kryptographisch signiert",integrityVerifiedDesc:"{{count}} of {{total}} entries have HMAC-SHA256 signatures",integrityPass:"SIGNED",integrityPartial:"Teilweise signiertes Prüfprotokoll",integrityPartialDesc:"{{count}} von {{total}} Einträgen haben HMAC-Signaturen",integrityNone:"Unsignierte Audit-Einträge",integrityNoneDesc:"Konfigurieren Sie einen Vault-Master-Key, um automatische HMAC-SHA256-Signierung fuer alle zukuenftigen Audit-Eintraege zu aktivieren.",signed:"Signiert",allSigned:"Alle signiert",decidedBy:"von",automated:"automatisiert"},B={cronHelp:"5-Felder-Format: Minute Stunde Tag-des-Monats Monat Wochentag",cronEveryMinute:"Jede Minute",cronEveryNMinutes:"Alle {{n}} Minuten",cronHourlyAt:"Stündlich um :{{minute}}",cronEveryNHours:"Alle {{n}} Stunden um :{{minute}}",cronAtTime:"Um {{time}}",cronAtMinutePastEveryHour:"In Minute {{minutes}} jeder Stunde",cronAtMinutePastHours:"In Minute {{minutes}} der Stunde {{hours}}",cronOnDays:"am {{days}}",cronOnDayOfMonth:"am Monatstag {{days}}",cronInMonths:"im {{months}}",cronInvalid:"Ungültiger Cron-Ausdruck (5 Felder erwartet)",cronTooFrequent:"Wird häufiger als das 60-Sekunden-Minimum ausgeführt",failedEmptyHint:"Endgültig fehlgeschlagene Ausführungen erscheinen hier zum Wiederholen oder Verwerfen.",failedSubtitle:"Ausführungen, die dauerhaft fehlgeschlagen sind. Wiederholen zum erneuten Einreihen oder Verwerfen zum Entfernen ohne erneute Ausführung.",intervalTooShort:"Das Intervall muss mindestens 60 Sekunden betragen",lastManualFire:"Letzte manuelle Ausführung",oneTimeHelp:"Wird einmal zu diesem Zeitpunkt ausgeführt und schließt dann ab. Wird in Ihrer lokalen Zeit interpretiert.",outcomePending:"ausgelöst — Ergebnis ausstehend",persistentConversationId:"Persistente Gesprächs-ID",persistentConversationIdPlaceholder:"Wird automatisch generiert, wenn leer",strategyPersistent:"Persistent (dasselbe Gespräch wiederverwenden)",fireDeadLettered:"Endgültig fehlgeschlagen",fireFailed:"Fehlgeschlagen",fireCompleted:"Abgeschlossen",title:"Zeitpläne",subtitle:"Geplante Agent-Trigger verwalten — Cron-Jobs und Heartbeats",create:"Zeitplan erstellen",createTitle:"Zeitplan erstellen",createSuccess:"Zeitplan erfolgreich erstellt",createError:"Zeitplan konnte nicht erstellt werden",creating:"Erstelle...",name:"Name",namePlaceholder:"z.B. Täglicher Health Check",triggerType:"Trigger-Typ",cronExpression:"Cron-Ausdruck",interval:"Intervall (Sekunden)",agentId:"Agent ID",agentIdPlaceholder:"Agent ID eingeben...",environment:"Umgebung",message:"Nachricht",messagePlaceholder:"Nachricht an den Agent",conversationStrategy:"Konversationsstrategie",total:"Zeitpläne gesamt",active:"Aktiv",failedCount:"Fehlgeschlagen / Dead-Lettered",nextFireLabel:"Nächste Ausführung",tableTitle:"Alle Zeitpläne",empty:"Noch keine Zeitpläne",emptyHint:"Erstellen Sie einen Zeitplan, um Agent-Trigger zu automatisieren.",colName:"Name",colType:"Typ",colSchedule:"Zeitplan",colAgent:"Agent",colStatus:"Status",colNextFire:"Nächste Ausführung",colLastFired:"Letzte Ausführung",colActions:"Aktionen",enable:"Aktivieren",disable:"Deaktivieren",enabled:"Zeitplan aktiviert",disabled:"Zeitplan deaktiviert",toggleError:"Zeitplan konnte nicht umgeschaltet werden",fireNow:"Jetzt ausführen",fired:"Zeitplan erfolgreich ausgeführt",fireError:"Ausführung fehlgeschlagen",retry:"Wiederholen",retrySuccess:"Zeitplan erneut eingereiht",retryError:"Wiederholung fehlgeschlagen",deleteSuccess:"Zeitplan gelöscht",deleteError:"Zeitplan konnte nicht gelöscht werden",fireHistory:"Ausführungsverlauf",hitlTimeout:"HITL-Zeitlimit",hitlTimeoutHint:"Systemverwaltetes HITL-Freigabe-Zeitlimit — über die Freigabe der Konversation lösen, nicht hier.",statusDisabled:"Deaktiviert",statusActive:"Aktiv",statusRunning:"Läuft",statusExecuting:"Wird ausgeführt",statusFailed:"Fehlgeschlagen",statusDeadLettered:"Dead-Letter",typeHeartbeat:"Heartbeat",typeOneTime:"Einmalig",typeCron:"Cron",noFireHistory:"Noch kein Ausführungsverlauf",logFired:"Ausgeführt",logDuration:"Dauer",logResult:"Ergebnis",logAttempt:"Versuch",logCost:"Kosten",logConversation:"Gespräch",dismissSuccess:"Dead-Letter verworfen",dismissError:"Dead-Letter konnte nicht verworfen werden",failedTitle:"Fehlgeschlagene & Dead-Letter-Ausführungen",failedEmpty:"Keine fehlgeschlagenen Ausführungen",colSchedule2:"Zeitplan",dismiss:"Verwerfen",updateSuccess:"Zeitplan aktualisiert",updateError:"Zeitplan konnte nicht aktualisiert werden",editTitle:"Zeitplan bearbeiten",cronNext:"Nächste",oneTimeAt:"Datum & Uhrzeit",timeZone:"Zeitzone",agentVersion:"Version",agentVersionHint:"0 = neueste bereitgestellte",envProduction:"Produktion",envTest:"Test",userId:"Benutzer-ID",userIdPlaceholder:"system:scheduler",maxCostPerFire:"Max. Kosten pro Ausführung",unlimited:"Unbegrenzt",strategyNew:"Neu (frisches Gespräch bei jeder Ausführung)",saving:"Wird gespeichert...",fireOutcomeFailed:"Ausführung fehlgeschlagen",unknownError:"unbekannter Fehler",tabSchedules:"Zeitpläne",tabFailed:"Fehlgeschlagen / Dead-Letter",cronPreset:{every15Minutes:"Alle 15 Minuten",hourly:"Stündlich (zur vollen Stunde)",dailyMorning:"Täglich um 09:00",weekdays:"Wochentags um 09:00",weeklyMonday:"Wöchentlich (Mo 00:00)",monthly:"Monatlich (1., 00:00)"}},K={title:"Modellkaskade",escalated:"Konfidenz {{c}} < {{th}}",escalatedShort:"eskaliert",accepted:"akzeptiert",reason:{lowConfidence:"niedrige Konfidenz",timeout:"Zeitüberschreitung",error:"Fehler",retryableError:"wiederholbarer Fehler"}},L={pipelineError:"Pipeline-Trace konnte nicht geladen werden",title:"Debug",tabPipeline:"Pipeline",tabCosts:"Kosten",tabMemory:"Speicher",tabLogs:"Protokolle",tabPrompt:"Prompt",turn:"Zug",latest:"Neueste",noPipeline:"Senden Sie eine Nachricht, um den Pipeline-Verlauf zu sehen",processing:"Verarbeite...",actions:"Aktionen",confidence:"Konfidenz",duration:"Dauer",cost:"Kosten",in:"ein",input:"Eingabe",model:"Modell",out:"aus",output:"Ausgabe",tokens:"Tokens",toolCalls:"Tools"},F={error:"Kostendaten konnten nicht vom Server geladen werden",thisTurn:"Dieser Zug",conversationTotal:"Gespräch gesamt",tokens:"Tokens",cost:"Kosten",duration:"Dauer",model:"Modell",toolCalls:"Tool-Aufrufe",toolUsage:"Tool-Nutzung",cacheStats:"Cache",hitRate:"Trefferquote",empty:"Senden Sie eine Nachricht, um Kostenmetriken zu sehen",in:"ein",out:"aus",total:"gesamt",calls:"Aufrufe",avgLatency:"Ø Latenz",input:"Eingabe",output:"Ausgabe",tokenDistribution:"Token-Verteilung",totalCost:"Gesamtkosten",totalTokens:"Tokens gesamt",turns:"Runden"},W={error:"Speicherdaten konnten nicht geladen werden",title:"Konversationsspeicher",noConversation:"Starten Sie eine Konversation, um den Speicher zu prüfen",empty:"Keine Speicherdaten verfügbar",properties:"Eigenschaften",step:"Schritt",keys:"Schlüssel",input:"Eingabe",collapseAll:"Alle einklappen",copyKey:"Schlüssel kopieren",copyValue:"Wert kopieren",customProperties:"Benutzerdefinierte Eigenschaften",expandAll:"Alle ausklappen",noMatches:"Keine passenden Daten gefunden",search:"Schlüssel oder Werte suchen …",stepData:"Schrittdaten",systemProperties:"Systemeigenschaften"},V={noAgent:"Wählen Sie einen Agent, um Logs zu sehen",search:"Suchen...",pause:"Pause",resume:"Fortsetzen",clear:"Leeren",waiting:"Warte auf Logs...",connected:"Verbunden",disconnected:"Getrennt",logOutput:"Log-Ausgabe",noMatch:"Keine Logs entsprechen Ihrem Filter"},G={error:"Prompt-Daten konnten nicht geladen werden",noConversation:"Starten Sie ein Gespräch, um Prompts zu prüfen",noLlm:"Noch keine LLM-Interaktionen gefunden",turn:"Zug",latest:"Letzter",tokens:"Tokens",model:"Modell",cost:"Kosten",copy:"Prompt kopieren",copied:"Kopiert!",replay:"Diesen Zug wiederholen",toolCalls:"Tool-Aufrufe",step:"Schritt",roleSystem:"Systemprompt",roleUser:"Benutzer",roleAssistant:"Assistent",roleTool:"Tool-Ergebnis",collapse:"Einklappen",showMore:"Mehr anzeigen",temperature:"Temp"},x={preview:"Vorschau",edit:"Bearbeiten",switchToPreview:"Aufgelösten Prompt anzeigen",switchToEdit:"Zur Bearbeitung wechseln",refresh:"Aktualisieren",sampleData:"Beispieldaten (ohne Gespräch)",disclaimerReal:"Die Vorschau verwendet die Qute-Engine mit echten Gesprächsdaten.",disclaimerSample:"Die Vorschau verwendet die Qute-Engine mit Beispieldaten. Wählen Sie ein Gespräch für echte Werte.",resolvedPrompt:"Aufgelöster Prompt",copy:"Kopieren",copied:"Kopiert!",error:"Fehler beim Auflösen der Vorlage",loading:"Vorlage wird aufgelöst…",availableVariables:"Verfügbare Variablen",copyVariable:"Klicken, um Variablenreferenz zu kopieren",varProperties:"Eigenschaften",varMemory:"Erinnerung",varContext:"Kontext",varSnippets:"Snippets",varUserInfo:"Benutzerinfo",varConversationInfo:"Gesprächsinfo",varInput:"Eingabe",varConversationLog:"Gesprächsprotokoll"},O={title:"Agent Studio",subtitle:"Erstellen, testen und debuggen Sie Agents in einem Workspace",pipeline:"Pipeline",editor:"Editor",debug:"Debug & Chat",selectStage:"Klicken Sie auf eine Phase, um ihren Editor zu öffnen",openInStudio:"Im Studio öffnen",loading:"Lade Agent...",notFound:"Agent nicht gefunden",hideChat:"Chat ausblenden",showChat:"Chat anzeigen",openEditor:"Im Editor öffnen",editorComingSoon:"Integrierter Editor kommt bald",noPipeline:"Keine Pipeline-Phasen",type:{parser:"Parser",rules:"Regeln",property:"Eigenschafts-Setter",apicalls:"API-Aufrufe",llm:"LLM",output:"Ausgabe","output.template":"Ausgabevorlage",mcpcalls:"MCP-Aufrufe",rag:"Wissensbasen",dictionary:"Wörterbuch"},landingDescription:"Wählen Sie einen Agenten, um den visuellen Pipeline-Editor, Debugger und Live-Chat zu öffnen",noAgents:"Keine Agenten gefunden — erstellen Sie einen auf der Agenten-Seite",chat:"Chat",backToAgent:"Zurück zum Agenten",selectStageHint:"Wählen Sie eine Erweiterung in der Pipeline, um deren Konfiguration direkt zu bearbeiten",noConfig:"Diese Pipeline-Stufe hat keine Konfigurations-URI",unsupportedType:"Für diesen Erweiterungstyp ist kein Editor verfügbar"},H={general:"Allgemein",kbName:"Name der Knowledge Base",kbNamePlaceholder:"z.B. produkt-dokus, faq, internes-wiki",kbNameHint:"Wird verwendet, um auf diese KB aus LLM-Tasks zuzugreifen",embeddingModel:"Embedding-Modell",provider:"Anbieter",embeddingParams:"Provider-Parameter",embeddingParamsHint:"Modellname, API-Key (nutzen Sie ${vault:...} für Secrets), etc.",vectorStore:"Vektorspeicher",storeType:"Store-Typ",storeParams:"Verbindungsparameter",chunking:"Dokumenten-Chunking",chunkStrategy:"Strategie",chunkSize:"Chunk-Größe",chunkOverlap:"Überlappung",overlapHint:"Überlappung hilft, den Kontext zwischen Chunks zu erhalten",chunkPreview:"Vorschau (wie ein Dokument aufgeteilt wird)",chunkBlocks:"{{count}} Chunks à ~{{size}} Zeichen mit {{overlap}} Zeichen Überlappung",retrievalDefaults:"Abruf-Standards",retrievalHint:"Diese Standards können pro Task in der LLM-Konfiguration überschrieben werden.",maxResults:"Max. Ergebnisse (top-K)",minScore:"Min. Ähnlichkeits-Score",ingestion:"Dokumenten-Aufnahme",dropFiles:"Dokumente hierhin ziehen zum Aufnehmen",dropHint:"Text, Markdown oder beliebige Textdateien",browse:"Durchsuchen",pasteText:"Oder Textinhalt einfügen",pastePlaceholder:"Dokumententext hier einfügen...",ingestText:"Text aufnehmen",ingestionHistory:"Aufnahme-Status",saveFirstIngestion:"Speichern Sie diese Knowledge Base zuerst, um die Dokumenten-Aufnahme zu aktivieren.",addParam:"Parameter hinzufügen"},Z={welcome:{title:"Willkommen bei EDDI",subtitle:"Ihr KI-Agent-Kommandozentrum",introText:"Der EDDI Manager ist Ihr Werkzeug zum Erstellen, Testen und Betreiben von KI-Agenten.",capabilitiesTitle:"Was Sie tun können",capabilitiesSubtitle:"Alles, was Sie für produktionsreife KI-Agents benötigen",buildAgents:"Agents erstellen",buildAgentsDesc:"KI-Agents mit dem Wizard oder von Grund auf konfigurieren",designWorkflows:"Workflows entwerfen",designWorkflowsDesc:"Drag-and-Drop Pipeline-Builder mit Verhaltensregeln und Tools",testRealtime:"In Echtzeit testen",testRealtimeDesc:"Chatten Sie mit Agents inklusive Streaming-Antworten und Debugging",monitorOperate:"Überwachen & Betreiben",monitorOperateDesc:"Gespräche, Audit-Trails, Secrets und Quotas – an einem Ort",readyTitle:"Bereit loszulegen?",readySubtitle:"Sie können jede Tour später über das Hilfe-Menü neu starten",startTour:"Tour starten",exploreOwn:"Ich schaue mich selbst um"},tour:{back:"Zurück",next:"Weiter",skip:"Überspringen",finish:"Beenden",stepOf:"Schritt {{current}} von {{total}}",dashboard:{title:"Dashboard-Tour",step1Title:"Ihr Kommandozentrum",step1Desc:"Die Seitenleiste gliedert alles in Management, Entwicklung und Betrieb.",step2Title:"Plattform im Überblick",step2Desc:"Live-Zahlen zu Agents, Workflows und Gesprächen. Klicken Sie auf Kacheln für den Direktzugriff.",step3Title:"Schnellaktionen",step3Desc:"Mit dem Agent Wizard erstellen Sie den ersten Agent in unter 2 Minuten.",step4Title:"Nach Ihren Wünschen",step4Desc:"Wechseln Sie das Theme oder die Sprache über die jeweiligen Optionen."},agents:{title:"Agents-Tour",step1Title:"Agenten-Assistent",step1Desc:"Der Wizard führt Sie durch die Agenten-Erstellung: Modellauswahl, Prompting und Deployment.",step2Title:"Manuelle Erstellung",step2Desc:"Erstellen Sie blanke Agents und konfigurieren Sie sie mit voller JSON-Kontrolle.",step3Title:"Suchen & Filtern",step3Desc:"Finden Sie Agents sofort und wechseln Sie zwischen Karten- und Listenansicht.",step4Title:"Ihre Agent-Flotte",step4Desc:"Klicken Sie auf Agenten, um zur Detailseite für Deployment, Chat und Workflows zu gelangen."},workflows:{title:"Workflows-Tour",step1Title:"Workflows erstellen",step1Desc:"Workflows definieren die Prozessier-Pipeline – eine Sequenz von Tasks wie LLM-Aufrufe oder Regeln.",step2Title:"Ihre Workflows",step2Desc:"Klicken Sie zur Bearbeitung auf den Drag-and-Drop Editor.",step3Title:"Aufgeräumte Ansicht",step3Desc:"Suchen Sie nach Namen und wechseln Sie zwischen Grid und sortierbaren Tabellen."},chat:{title:"Chat-Tour",step1Title:"Agent wählen",step1Desc:"Wählen Sie einen deployten Agent für ein Gespräch aus.",step2Title:"Streaming-Modus",step2Desc:"Token-Streaming in Echtzeit zeigt Worte einzeln – gut für Latenzprüfungen.",step3Title:"Gesprächshistorie",step3Desc:"Öffnen Sie die Seitenleiste, um vorherige Unterhaltungen fortzuführen.",step4Title:"Chat starten",step4Desc:"Mit Eingabe antwortet der Agent sofort unter Nutzung Ihrer Tools."},resources:{title:"Ressourcen-Tour",step1Title:"Erweiterungs-Bibliothek",step1Desc:"Diese Ressourcen sind die Bausteine von Workflows.",step2Title:"LLM-Konfigurationen",step2Desc:"Prägen Sie das Gehirn des Agenten: Parameter, Prompts und Backup-Modelle.",step3Title:"Regeln & API",step3Desc:"Definieren Sie API-Calls oder statische Flow-Bedingungen, die auch als Tools dienen können."},conversations:{title:"Konversations-Tour",step1Title:"Suchfunktion",step1Desc:"Gespräche schnell per ID, Agent oder Nachricht finden.",step2Title:"Status-Filter",step2Desc:"Filterung nach Aktiv, Fehler, In Arbeit etc.",step3Title:"Gesprächsliste",step3Desc:"Jede Unterhaltung lässt sich zur detaillierten Debug-Anlayse öffnen."},groups:{title:"Diskussionsgruppen-Tour",step1Title:"Gruppe anlegen",step1Desc:"Sammeln Sie Agents in Gruppen für strukturiertes Feedback.",step2Title:"Gruppen-Suche",step2Desc:"Gruppen gezielt durchsuchen.",step3Title:"Umgebungen steuern",step3Desc:"Polices bearbeiten oder verwaiste Gruppen entfernen."},logs:{newLogs:"Neue Logs",title:"Service-Logs-Tour",step1Title:"Live vs Historie",step1Desc:"Wählen Sie zwischen Live-Streams und Archivsuche.",step2Title:"Stream-Filter",step2Desc:"Nach Agents oder bestimmten Logleveln sortieren.",step3Title:"Exportieren",step3Desc:"Filter logisch anwenden und als Text für Analysen herunterladen."},secrets:{title:"Vault-Tour",step1Title:"Secret anlegen",step1Desc:"Legen Sie z.B. API-Keys verschlüsselt an.",step2Title:"Mandanten-Trennung",step2Desc:"Vault-Anzeige und Schlüssel immer pro Tenant isolieren.",step3Title:"Referenz-Syntax",step3Desc:"Fügen Sie Secrets dynamisch zur Config hinzu, ohne Passwörter direkt in JSON zu notieren."},audit:{title:"Audit-Tour",step1Title:"Suchmodus",step1Desc:"Nachprüfbare Ausführungen (Audits) nach ID und Agent suchen.",step2Title:"Suche ausführen",step2Desc:"Audits garantieren Nachvollziehbarkeit verifizierbarer Histories.",step3Title:"Ledger Export",step3Desc:"Exportieren von Audits ins JSON-Format zur Einhaltung rechtlicher Standards."},schedules:{title:"Schedules-Tour",step1Title:"Trigger planen",step1Desc:"Legen Sie Cron-Jobs oder Heartbeats an, die Agents in gewählten Intervallen antriggern.",step2Title:"System-Rhythmus",step2Desc:"Prüfen Sie Gesamtsumme oder fehlschlagende Scheduled Tasks.",step3Title:"Schedule-Managment",step3Desc:"Jobs pausieren, reaktivieren oder testen."},quotas:{saveSuccess:"Kontingent gespeichert",resetSuccess:"Nutzungszähler zurückgesetzt",resetConfirmDesc:"Setzt sofort alle Nutzungszähler (Unterhaltungen, API-Aufrufe, monatliche Kosten) für den Mandanten „default“ auf null. Dies kann nicht rückgängig gemacht werden.",resetConfirmTitle:"Nutzungszähler zurücksetzen?",title:"Quota-Tour",step1Title:"Sicherheitslimits",step1Desc:"Setzen Sie harte Obergrenzen für Kosten, Logs oder Chat-Durchsatz.",step2Title:"Echtzeitmetriken",step2Desc:"Beobachten Sie, was Tenants aktuell belasten.",step3Title:"Änderungen übernehmen",step3Desc:"Neue Configs fangen Lastspitzen ohne Latenz ab."},coordinator:{title:"Coordinator-Tour",step1Title:"Ereignisquelle",step1Desc:"Event-Source-Metriken im Backend einsehen.",step2Title:"Verarbeitung",step2Desc:"Abarbeitung von Queue-Aufträgen über Cluster hinweg.",step3Title:"Unzustellbare Nachrichten",step3Desc:"Abgestützte Tasks überprüfen, wieder einreihen (replay) oder löschen."},orphans:{confirmPurgeAll:"ALLE {{count}} verwaisten Ressourcen dauerhaft löschen? Der Server löscht alle — Ihre Auswahl wird nicht angewendet. Dies kann nicht rückgängig gemacht werden.",title:"Orphans-Tour",step1Title:"Scan-Tool",step1Desc:"Entfernen Sie unverlinkte Fragmente der Konfiguration.",step2Title:"Weiche Löschung",step2Desc:"Inkludieren Sie Soft-Deletes in Final-Säuberungen.",step3Title:"Saubere DB",step3Desc:"Report anzeigen und Ressourcen aufräumen."}},help:{title:"Hilfe & Tour",platformTour:"Plattform-Tour",resetAll:"Alle Touren zurücksetzen",resetConfirm:"Fortschritt aller Touren zurücksetzen?"},offer:{message:"Neu hier? Starten Sie die {{page}}",accept:"Anzeigen",dontAsk:"Nicht nochmal fragen"}},U={status:"Plattformstatus",online:"Online",offline:"Offline",checking:"Verbindung wird geprüft…",connected:"Verbunden",disconnected:"Getrennt",instance:"Instanz",latency:"Latenz",lastChecked:"Zuletzt geprüft",justNow:"gerade eben",secondsAgo:"vor {{count}}s"},_={live:"Live",reconnecting:"Verbindung wird wiederhergestellt…"},j={title:"Neue {{type}}",newAgent:"Neuer Agent",newGroup:"Neue Gruppe",quickCreate:"Schnellerstellung",quickCreateTitle:"Schnelle {{type}}-Erstellung",quickCreateDesc:"Legen Sie Name und Beschreibung fest. Details konfigurieren Sie später.",guidedSetup:"Geführtes Setup",guidedSetupDesc:"Schrittweises Setup mit LLM-Provider, Prompts und Deployment."},q=JSON.parse('{"actionConflict":"Ein anderer Vorgang läuft noch, oder diese Diskussion akzeptiert diese Aktion nicht mehr. Bitte erneut versuchen.","actionTimeout":"Ein Mitglieds-Agent hat nicht rechtzeitig geantwortet. Bitte erneut versuchen.","actionUnreachable":"Ein Mitglieds-Agent konnte nicht erreicht werden. Bitte erneut versuchen.","addMember":"Mitglied hinzufügen","allowHtmlTooltip":"Wenn aktiviert, wird HTML-Inhalt (bereinigt) gerendert. Nur mit vertrauenswürdigen Agenten verwenden.","askQuestion":"Stellen Sie eine Frage zur Diskussion in der Gruppe…","assignAgents":"Weisen Sie jeder Mitgliedsrolle Agenten zu.","blankDesc":"Alles manuell konfigurieren.","characters":"Zeichen","chooseTemplate":"Wählen Sie eine Vorlage oder beginnen Sie von Grund auf.","closeConfirmDescription":"Das Schließen beendet dauerhaft alle Mitglieder-Gespräche und bereinigt alle kurzlebigen Agenten. Weitere Folgefragen oder Fortsetzungen sind nicht möglich. Dies kann nicht rückgängig gemacht werden.","composeQuestion":"Frage verfassen","continueButton":"Fortsetzen","continueHint":"Führt alle Phasen als neue Runde erneut aus; jeder Agent behält die Erinnerung an frühere Runden. Zu einer Fortsetzung können keine Anhänge hinzugefügt werden.","continuePlaceholder":"Führen Sie diese Diskussion mit einer Nachfrage fort…","continueStreamStarted":"Fortsetzung gestartet — Live-Streaming","count":"{{count}} Gruppen","createSuccess":"Gruppe erfolgreich erstellt","discussing":"Agenten diskutieren…","enterToSend":"Enter zum Senden","expandInput":"Eingabe erweitern","followupHint":"Stellen Sie einem Mitglied eine direkte Folgefrage. Der Agent behält den vollständigen Kontext der Diskussion; der Austausch wird zum Transkript hinzugefügt.","followupPlaceholder":"Diesem Mitglied eine Folgefrage stellen…","inputDisabledApproval":"Wartet auf Genehmigung…","inputDisabledClosed":"Diese Diskussion ist geschlossen","inputDisabledCompleted":"Diskussion abgeschlossen","inputDisabledEnded":"Diese Diskussion wurde beendet","inputDisabledInProgress":"Diskussion läuft…","membersCount":"{{count}} Mitglieder","moderator":"Moderator (für die Zusammenfassung)","namePlaceholder":"z. B. Beratungsgremium","newDiscussion":"Neue Diskussion","newShort":"Neu","noModerator":"Kein Moderator","noResponse":"Keine Antwort","contentTruncated":"[Inhalt gekürzt]","protocolMaxRetries":"Max. Wiederholungen","protocolMaxRounds":"Max. Runden","protocolOnFailure":"Bei Fehler","protocolSettings":"Protokoll","protocolTimeout":"Zeitlimit","protocolUnavailable":"Nicht verfügbar","question":"Frage","readyToDiscuss":"Bereit zur Diskussion","responding":"antwortet…","reviewMemberRoster":"Mitgliederliste","reviewMembers":"Mitglieder","reviewModerator":"Moderator","reviewNoModerator":"Keiner (automatische Zusammenfassung deaktiviert)","reviewRounds":"Max. Runden","reviewTimeout":"Agent-Timeout","reviewUnassigned":"Nicht zugewiesen","reviewUnassignedHint":"Gehen Sie zurück, um vor dem Erstellen Agenten zuzuweisen.","selectAgent":"Agent auswählen…","selectOrStart":"Wählen Sie eine frühere Diskussion aus dem Verlauf oder geben Sie unten eine Frage ein, um eine neue zu starten.","shiftEnter":"neue Zeile","skipped":"Übersprungen","sortByMembers":"Nach Mitgliedern sortieren","sortByStyle":"Nach Stil sortieren","speakingCount":"{{count}} sprechen","startBlank":"Von Grund auf beginnen","startDiscussion":"Diskutieren","stateCompleted":"Abgeschlossen","stateCreated":"Erstellt","stateFailed":"Fehlgeschlagen","stateSynthesizing":"Wird zusammengefasst…","stepBasics":"Grundlagen","stepMembers":"Mitglieder","stepReview":"Überprüfung","stepTemplate":"Vorlage","submitShortcut":"Strg+Enter zum Absenden","synthesis":"Synthese","synthesizing":"Moderator fasst zusammen…","hitlSelectPhase":"Wählen Sie mindestens eine Phase aus, die eine Freigabe erfordert.","empty":"Noch keine Gruppen","emptyDescription":"Gruppen ermöglichen es mehreren Agents, bei strukturierten Diskussionen zusammenzuarbeiten.","createGroup":"Gruppe erstellen","unnamed":"Unbenannte Gruppe","noDescription":"Keine Beschreibung","count_one":"{{count}} Gruppe","count_other":"{{count}} Gruppen","confirmDelete":"Diese Gruppe löschen?","confirmDeleteDesc":"Die Gruppenkonfiguration wird dauerhaft gelöscht.","duplicateSuccess":"Gruppe dupliziert","members":"Mitglieder","discussionStyle":"Diskussionsstil","maxRounds":"Max. Runden","styleTaskForce":"Task Force","stateAwaitingApproval":"Genehmigung ausstehend","stateCancelled":"Abgebrochen","phasePlan":"Planung","phaseExecute":"Ausführung","phaseVerify":"Überprüfung","preConfiguredTasks":"Vorkonfigurierte Aufgaben","dynamicAgents":"Dynamische Agenten","dynamicCreation":"Erstellung","dynamicRecruitment":"Rekrutierung","dynamicDelegation":"Delegierung","lifecyclePolicy":"Lebenszyklus","allowedProviders":"Anbieter","liveIndicator":"● LIVE","htmlToggle":"HTML","memberTypeGroup":"Gruppe","moderatorBadge":"⭐ Mod","styleColumn":"Stil","membersColumn":"Mitglieder","memberOverflow":"+{{count}} weitere","defaultLabel":"Gruppe","liveDiscussion":"Live","state":{"CREATED":"Erstellt","IN_PROGRESS":"In Bearbeitung","SYNTHESIZING":"Wird zusammengefasst","COMPLETED":"Abgeschlossen","FAILED":"Fehlgeschlagen","ERROR":"Fehler","AWAITING_APPROVAL":"Wartet auf Genehmigung","CANCELLED":"Abgebrochen","AWAITING_HUMAN_INPUT":"Warten auf Mitglied","CLOSED":"Geschlossen"},"preConfiguredTasksCount":"Vorkonfigurierte Aufgaben ({{count}})","entryType":{"QUESTION":"Frage","OPINION":"Meinung","CRITIQUE":"Kritik","REVISION":"Überarbeitung","CHALLENGE":"Einwand","DEFENSE":"Verteidigung","ARGUMENT":"Argument","REBUTTAL":"Erwiderung","SYNTHESIS":"Synthese","ERROR":"Fehler","SKIPPED":"Übersprungen","PLAN":"Plan","TASK_RESULT":"Aufgabenergebnis","VERIFICATION":"Überprüfung","FOLLOW_UP":"Nachfrage","ABSTAINED":"Enthalten","DISSENT":"Widerspruch","CONVERGENCE":"Konvergenz","FACILITATION":"Moderation","VOTE":"Stimme","PROPOSAL":"Vorschlag","BARGAIN":"Gegenangebot","HUMAN_INPUT":"Menschliche Eingabe","RETRO":"Retrospektive","BID":"Gebot"},"flow":{"Opinion":"Meinung","Discussion":"Diskussion","Synthesis":"Synthese","Critique":"Kritik","Revision":"Überarbeitung","Challenge":"Einwand","Defense":"Verteidigung","Independent":"Unabhängig","AnonymousSharing":"Anonymes Teilen","Revised":"Überarbeitet","ProOpening":"Pro-Eröffnung","ConOpening":"Kontra-Eröffnung","Rebuttals":"Erwiderungen","Judgment":"Urteil","Plan":"Planung","Execute":"Ausführung","Verify":"Überprüfung","Synthesize":"Zusammenfassung"},"lifecycle":{"EPHEMERAL":"kurzlebig","KEEP_DEPLOYED":"bereitgestellt lassen","UNDEPLOY_ONLY":"nur zurückziehen","AGENT_DECIDES":"Agent entscheidet"},"dynamicMax":"✓ (max {{count}})","dynamicMaxPerTask":"✓ (max {{count}}/Aufgabe)","protocolMaxTurns":"Max. Züge","speakingOrderTooltip":"Reihenfolge: #{{order}}","allowedModels":"Modelle","inheritParentModel":"Modell erben","enabled":"Aktiviert","disabled":"Deaktiviert","turnOrderSequential":"sequenziell","turnOrderParallel":"parallel","requiresApproval":"Genehmigung erforderlich","item":"Element","items":"Elemente","contextScope":{"NONE":"unabhängig","FULL":"vollständiger Kontext","LAST_PHASE":"letzte Phase","ANONYMOUS":"anonym","OWN_FEEDBACK":"eigenes Feedback","TASK_ONLY":"nur Aufgabe","TASK_WITH_DEPS":"Aufgabe + Abhängigkeiten"},"configuration":"Konfiguration","deleteGroupOnly":"Nur Gruppe löschen","deleteGroupOnlySuccess":"Gruppe gelöscht (Agenten behalten)","deleteGroupOnlyWarning":"Dies löscht die Gruppe. Alle Mitglieds-Agenten werden behalten.","deleteGroupAndAgents":"Gruppe + alle Agenten löschen","deleteWithMembersSuccess":"Gruppe und alle Mitglieds-Agenten gelöscht (Soft-Delete)","deleteWithMembersWarning":"Dies wird die Gruppe und alle {{count}} Mitglieds-Agenten per Soft-Delete löschen. Sie können wiederhergestellt werden.","hideDiscussions":"Diskussionsbereich ausblenden","showDiscussions":"Diskussionsbereich einblenden","hideConfig":"Konfigurationsbereich ausblenden","showConfig":"Konfigurationsbereich einblenden","hitlSection":"Menschliche Freigabe","hitlApprovalPoints":"Freigabe bei","hitlOnTaskRejection":"Bei Ablehnung","hitlEdit":"Bearbeiten","hitlSaved":"Freigabe-Einstellungen gespeichert","hitlEnable":"Menschliche Freigabe erforderlich","hitlApprovalPhases":"Freigabepflichtige Phasen","hitlNotConfigured":"Keine Freigabesperren konfiguriert — auf Bearbeiten klicken, um eine menschliche Freigabe zu verlangen.","driftTitle":"Gruppenkonfiguration während der Pause geändert","driftRecovery":"Die Fortsetzung wurde abgebrochen, weil sich die Phasen der Gruppe geändert haben. Die Diskussion wartet weiterhin auf eine Freigabe — die Konfiguration korrigieren (Bearbeiten, im Konfigurationsbereich) und erneut freigeben oder abbrechen.","discussionStarted":"Diskussion gestartet — Live-Streaming","continueStarted":"Neue Runde gestartet","followupSent":"Folgefrage gesendet","discussionClosed":"Diskussion geschlossen","backToGroups":"Zurück zu Gruppen","noDiscussions":"Noch keine Diskussionen","askBelow":"Stellen Sie unten eine Frage, um zu beginnen","exitFullscreen":"Vollbild beenden","enterFullscreen":"Vollbild","discussions":"Diskussionen","discussionComplete":"Diskussion abgeschlossen","continueDiscussion":"Fortsetzen (neue Runde)","followupMember":"Bei einem Mitglied nachfassen","closeDiscussion":"Diskussion schließen","currentRound":"Aktuell in Runde","startNextRound":"Nächste Runde starten","selectMember":"Mitglied auswählen","sendFollowup":"Folgefrage senden","closeConfirmTitle":"Diese Diskussion schließen?","closeConfirmButton":"Diskussion schließen","closeConfirmDismiss":"Zurück","protocolMaxCost":"Kostenobergrenze","protocolOnCostExceeded":"Bei Erreichen","costAbort":"Abbrechen","costSynthesize":"Jetzt zusammenfassen","deliberationSection":"Beratung","recordDissents":"Minderheitenvotum","agentFiledTasks":"Von Agenten angelegte Aufgaben","agentFiledCaps":"Grenzen","agentFiledCapsValue":"{{perDiscussion}} / Diskussion · {{perTurn}} / Zug","moderatorlessWarning":"Auf einen Moderator beschränkt, den diese Gruppe nicht hat: {{phases}}. Das erste Mitglied nach Sprechreihenfolge springt ein.","roleCoverageWarning":"Kein Mitglied trägt die Rolle „{{role}}“ – stattdessen sprechen in {{phases}} alle Mitglieder.","delegationDepth":"Max. Tiefe","delegationTimeout":"Delegations-Timeout","secondsShort":"{{seconds}}s","delegationTargets":"Positivliste","phaseBehaviour":"Phasenverhalten","phaseBehaviourNone":"Weder Enthaltung noch Konvergenz konfiguriert — mit „Bearbeiten“ dürfen Mitglieder passen, oder eine wiederholte Phase endet bei Einigkeit.","abstentionShort":"enthalten","convergenceShort":"Konvergenz ≥{{threshold}}","phasesSaved":"Phaseneinstellungen gespeichert","phasesNoneToEdit":"Diese Gruppe definiert keine Phasen. Wähle einen Diskussionsstil oder ergänze Phasen in der Konfiguration, bevor du phasenweises Verhalten einstellst.","phaseRepeats":"×{{repeats}}","allowAbstention":"Enthaltung erlauben","allowAbstentionHelp":"Ein Mitglied darf in dieser Runde nichts Neues beitragen, statt sich zu wiederholen.","convergenceEnable":"Bei Konvergenz früh beenden","convergenceHelp":"Ein Richter vergleicht jede Wiederholung mit der vorigen und beendet die Phase, sobald sich die Mitglieder nicht mehr bewegen. Kostet einen Aufruf je Wiederholung.","convergenceNeedsRepeats":"Nur bei einer wiederholten Phase verfügbar — ein einzelner Durchlauf hat keinen Vergleich.","convergenceMinRepeats":"Min. Wiederholungen","convergenceThreshold":"Schwellenwert","convergenceJudge":"Richter","judgeModerator":"Moderator","judgeService":"Dienst","judgeServiceNote":"Wird akzeptiert, ist aber noch nicht angebunden — die Engine weicht auf den Moderator aus und protokolliert eine Warnung.","convergenceReached":"Konvergiert","convergenceChecked":"Konvergenzprüfung","convergenceScore":"Übereinstimmung {{score}}","decisionWinner":"Sieger: {{winner}}","decisionTie":"Unentschieden","decisionDecidedAt":"Entschieden in {{phase}}","decisionUnparsed":"Die Antwort des Richters ließ sich nicht als strukturiertes Urteil lesen; sie steht unten wörtlich, und das Fazit bleibt Fließtext.","minorityReport":"Minderheitenvotum ({{total}})","attachFiles":"Dateien anhängen","attachmentLimit":"Höchstens {{max}} Anhänge pro Diskussion","attachmentTooLarge":"{{name}} ist zu groß zum Anhängen","attachmentReadFailed":"{{name}} konnte nicht gelesen werden","removeAttachment":"{{name}} entfernen","decisionType":{"VERDICT":"Urteil","VOTE":"Abstimmung","AGREEMENT":"Einigung","AWARD":"Zuschlag","NONE":"Keine strukturierte Entscheidung"},"abstainedBody":"Hat in dieser Runde nichts Neues beigetragen.","convergenceSkipped_one":"· {{count}} weitere Runde übersprungen","convergenceSkipped_other":"· {{count}} weitere Runden übersprungen","attachmentTotalTooLarge":"Anhänge überschreiten die Gesamtgrößenbeschränkung","convergenceInert":"Konfiguriert, aber diese Phase läuft nur einmal — der Richter kann nie starten. Entferne die Einstellung oder gib der Phase mehr als eine Wiederholung.","questionTooLong":"Eine Frage darf höchstens {{max}} Zeichen lang sein","charactersOverLimit":"{{current}} / {{max}} Zeichen","advancedSection":"Erweiterte Zusammenarbeit","artifactConfigLabel":"Gemeinsame Artefakte","artifactConfigValue":"max. {{count}}/Diskussion","artifactCreatedBadge":"{{name}} erstellt (v{{version}})","artifactDraft":"Entwurf","artifactFinal":"Endgültig","artifactLastEdited":"Zuletzt bearbeitet von {{agent}}","artifactUpdatedBadge":"{{name}} aktualisiert (v{{version}})","artifactsTitle":"Gemeinsame Artefakte ({{count}})","concessionLedgerTitle":"Zugeständnisprotokoll","contextWindowLabel":"Transkriptfenster","contextWindowValue":"letzte {{count}} Einträge{{summarized}}","facilitatorLabel":"Moderator (Facilitator)","facilitatorMoves":"Erlaubte Aktionen","humanMemberConfigLabel":"Timeout für menschliche Züge","humanTurnRequestedAt":"Angefordert","humanTurnResponsePlaceholder":"Ihre Antwort","humanTurnSubmit":"Absenden","humanTurnSubmitted":"Ihre Antwort wurde erfasst","humanTurnSubmitting":"Wird gesendet…","humanTurnTimeout":"Timeout","humanTurnTitle":"Sie sind an der Reihe, {{name}}","inputDisabledHumanTurn":"Warten auf den Zug eines Mitglieds…","memberTypeHuman":"Mensch","negotiationAcceptedBy":"Akzeptiert von: {{names}}","negotiationGaveUp":"hat aufgegeben","negotiationInReturnFor":"im Austausch für","negotiationOpen":"Offen","negotiationRound":"Runde {{round}}","negotiationSuperseded":"Ersetzt","negotiationTableTitle":"Verhandlungstisch","notSet":"nicht festgelegt","retroConfigLabel":"Retro-Erkenntnisse","retroConfigValue":"{{perRun}}/Lauf, max. {{stored}} gespeichert","stateAwaitingHumanInput":"Warten auf Mitglied","summarized":"zusammengefasst","transcriptWindowed":"Die ersten {{count}} Transkripteinträge wurden zu einer fortlaufenden Zusammenfassung zusammengefasst, um den Kontext späterer Züge zu begrenzen. Bewegen Sie den Mauszeiger für die Zusammenfassung.","voteMethod":"Methode","voteMethodApproval":"Zustimmungswahl","voteMethodMajority":"Mehrheit","voteOptionsExplicit":"Explizite Liste","voteOptionsLastSynthesis":"Aus der letzten Synthese extrahieren","voteOptionsList":"Optionen (eine pro Zeile)","voteOptionsSource":"Abstimmungsoptionen","voteQuorum":"Quorum","voteTieHuman":"Mensch entscheidet (noch nicht verfügbar)","voteTieModerator":"Moderator entscheidet","voteTieNoDecision":"Keine Entscheidung","voteTiePolicy":"Bei Gleichstand","voteWeightByConfidence":"Nach Konfidenz gewichten","waitIndefinitely":"Unbegrenzt warten","advancedSaved":"Kollaborationseinstellungen gespeichert","advancedNotConfigured":"Kein Transkriptfenster, kein Retro-Gedächtnis, keine gemeinsamen Artefakte und kein Moderator konfiguriert — zum Aktivieren auf Bearbeiten klicken.","contextWindowHint":"Begrenzt den Kontext jedes Zuges in langen Diskussionen, indem ältere Einträge in eine laufende Zusammenfassung überführt werden.","contextWindowEntries":"Vollständig behaltene aktuelle Einträge","contextWindowSummarize":"Zusammenfassen, was aus dem Fenster fällt","contextWindowTruncateNote":"Ältere Einträge werden stattdessen durch den Hinweis „N frühere Einträge ausgelassen“ ersetzt.","retroConfigHint":"Erlaubt einer Retro-Phase, Erkenntnisse ins Teamgedächtnis zu schreiben, die in spätere Diskussionen einfließen.","retroPerRun":"Pro Lauf","retroStored":"Max. gespeichert","artifactConfigHint":"Ermöglicht Mitgliedern, gemeinsam Dokumente zu verfassen, die über den Zug hinaus bestehen bleiben.","artifactsPerDiscussion":"Max. pro Diskussion","facilitatorHint":"Ein Agent, der an jedem Prüfpunkt einsteigt und genau einen Zug aus der von Ihnen erlaubten Liste wählt — nie ein freier Orchestrator.","facilitatorAgent":"Moderator-Agent","facilitatorPickAgent":"Agenten auswählen…","facilitatorAgentRequired":"Wählen Sie den Agenten, der moderiert.","facilitatorCheckAfter":"Prüfzeitpunkt","facilitatorCheckpoint":{"EACH_PHASE":"Nach jeder Phase","EACH_REPEAT":"Nach jeder Runde innerhalb einer Phase"},"facilitatorMove":{"CONTINUE":"Fortfahren","END_PHASE":"Phase vorzeitig beenden","EXTEND_PHASE":"Phase verlängern","CALL_VOTE":"Abstimmung einberufen","RECRUIT":"Mitglied hinzuziehen","ESCALATE_HUMAN":"An einen Menschen eskalieren"},"facilitatorNoMove":"Erlauben Sie mindestens einen Zug, oder schalten Sie den Moderator ab.","facilitatorMidPhaseNeedsRepeat":"Eine Phase zu beenden oder zu verlängern wirkt mitten in der Phase und braucht daher den Prüfpunkt je Runde.","facilitatorEscalateTo":"Eskalieren an (Principal-ID)","facilitatorEscalateRequired":"Eine Eskalation pausiert die Diskussion für jemanden — geben Sie an, für wen.","facilitatorMaxMoves":"Max. Züge pro Diskussion","assignmentModeLabel":"Aufgabenzuweisung","assignmentModeRole":"Nach Rolle (Planer weist zu)","assignmentModeBid":"Per Gebot (Mitglieder bieten, höchste Zuversicht gewinnt)","assignmentModeBidShort":"Per Gebot","assignmentModeRoleHint":"Der Planer oder die Konfiguration weist jede Aufgabe zu, oder im Rundlauf.","assignmentModeBidHint":"Fällt auf Rollenzuweisung zurück, wenn sich eine Auktion nicht lohnt — weniger als zwei Bietende oder zwei offene Aufgaben, oder zu wenig Zugbudget.","contextWindowSummarizer":"Zusammenfasser","contextWindowNoSummarizer":"Keiner","contextWindowModel":"Zusammenfassungsmodell","contextWindowModelPlaceholder":"Modell","contextWindowSummarizerMissing":"Ohne Zusammenfassungsmodell fällt der Überlauf stillschweigend auf den einfachen Kürzungshinweis zurück.","facilitatorMaxMovesCeiling":"Höchstens {{max}} — der Moderator ist ein begrenzter Eingriff, kein Orchestrator.","reviewUnassignedWarning_one":"{{count}} Mitglied nicht zugewiesen","reviewUnassignedWarning_other":"{{count}} Mitglieder nicht zugewiesen","retroRecordedBadge_one":"{{phase}}: {{count}} Erkenntnis im Team-Gedächtnis gespeichert","retroRecordedBadge_other":"{{phase}}: {{count}} Erkenntnisse im Team-Gedächtnis gespeichert","artifactRevisions_one":"{{count}} frühere Revision","artifactRevisions_other":"{{count}} frühere Revisionen","styles":{"ROUND_TABLE":{"label":"Gesprächsrunde","flow":"Alle äußern ihre Sicht und bauen über mehrere Runden aufeinander auf"},"PEER_REVIEW":{"label":"Gegenseitige Prüfung","flow":"Alle antworten zunächst allein, kritisieren sich gegenseitig und überarbeiten dann"},"DEVIL_ADVOCATE":{"label":"Advocatus Diaboli","flow":"Ein Mitglied greift die Position der Gruppe an, die anderen verteidigen sie"},"DELPHI":{"label":"Anonyme Runden","flow":"Alle antworten anonym und überarbeiten in jeder Runde – niemand richtet sich nach dem ersten Beitrag"},"DEBATE":{"label":"Pro/Contra-Debatte","flow":"Eine Seite argumentiert dafür, eine dagegen, danach folgen Erwiderungen und ein Urteil"},"TASK_FORCE":{"label":"Einsatzgruppe","flow":"Die Moderation plant die Arbeit, die Mitglieder erledigen Aufgaben parallel, die Ergebnisse werden geprüft"},"NEGOTIATION":{"label":"Verhandlung","flow":"Die Parteien tauschen Vorschläge aus, bis sie sich einigen; nur andernfalls entscheidet eine Schlichtung"},"CUSTOM":{"label":"Eigener Ablauf","flow":"Phasen, die Sie selbst festlegen"}},"unsupportedStyle":"Dieser Server unterstützt {{style}} nicht. Wählen Sie ein anderes Format, um fortzufahren."}'),J={title:"Aufgabenübersicht",pending:"Ausstehend",inProgress:"In Bearbeitung",completed:"Abgeschlossen",verified:"Verifiziert",failed:"Fehlgeschlagen",assignedTo:"Zugewiesen an {{name}}",dependsOn:"Abhängig von: {{tasks}}",emptyTitle:"Warte auf Aufgabenplan",emptyDescription:"Der Moderator erstellt einen Aufgabenplan, sobald die Diskussion beginnt.",emptyState:"Der Aufgabenplan erscheint hier, wenn der Moderator ihn erstellt",unassigned:"Nicht zugewiesen",progress:"{{done}} von {{total}} Aufgaben erledigt",verificationPassed:"Bestanden",verificationFailed:"Fehlgeschlagen",showMore:"mehr anzeigen",showLess:"weniger anzeigen",awaitingApproval:"Warten auf Genehmigung",filedBy:"Angelegt von {{agent}}",wonByBid:"Durch Gebot gewonnen — {{confidence}} % Konfidenz, {{complexity}}"},Q={groupMemberHint:"Diese Gruppe nimmt als verschachtelte Untergruppe an der Diskussion teil.",noGroupsHint:"Erstellen Sie zuerst eine Gruppe und fügen Sie sie dann als verschachteltes Untergruppen-Mitglied hinzu.",noGroupsYet:"Keine Gruppen verfügbar",selectGroup:"Vorhandene Gruppe auswählen…",title:"Gruppen-Assistent",subtitle:"Stellen Sie ein Team von KI-Beratern für Ihre Fragen zusammen",backToGroups:"Zurück zu Gruppen",templateTitle:"Mit einer Vorlage beginnen",templateDesc:"Wählen Sie eine vorkonfigurierte Gruppe oder starten Sie von Grund auf.",startBlank:"Von Grund auf",blankDesc:"Alles manuell konfigurieren",configTitle:"Gruppenkonfiguration",configDesc:"Benennen Sie Ihre Gruppe und wählen Sie den Diskussionsstil",namePlaceholder:"z.B. Beratungsgremium",descPlaceholder:"Wofür ist diese Gruppe?",membersTitle:"Team zusammenstellen",membersDesc:"Wählen Sie für jeden Platz einen bestehenden Agent oder erstellen Sie einen neuen.",addMember:"Mitglied hinzufügen",refreshAgents:"Agentenliste aktualisieren",existingAgents:"vorhandene Agents",displayName:"Agentenname",displayNamePlaceholder:"Geben Sie dem Agent einen Namen…",rolePlaceholder:"Rolle (z.B. Marketing, Technik)",useExisting:"Vorhandenen verwenden",createNew:"Neu erstellen",selectAgent:"Agent auswählen…",systemPrompt:"System-Prompt",provider:"LLM-Anbieter",model:"Modell",apiKey:"API-Schlüssel",apiKeyPlaceholder:"sk-…",createThisAgent:"Agent erstellen",creatingAgent:"Agent wird erstellt…",agentReady:"Agent erstellt & bereitgestellt",agentCreated:'Agent "{{name}}" erstellt',agentCreateFailed:"Agent konnte nicht erstellt werden: {{error}}",moderator:"Moderator",moderatorHint:"Fasst die Diskussion zusammen",addModerator:"Moderator hinzufügen",removeModerator:"Moderator entfernen",createModerator:"Moderator-Agent erstellen",moderatorReady:"Moderator-Agent bereit",moderatorCreated:"Moderator-Agent erstellt",creatingModerator:"Moderator wird erstellt…",creatingSlot:"{{name}} wird erstellt…",creatingGroup:"Gruppe wird erstellt…",needMembers:"Mindestens 2 Mitglieder erforderlich",reviewTitle:"Überprüfen & Erstellen",reviewDesc:"Prüfen Sie die Gruppenkonfiguration vor der Erstellung.",reviewMembers:"Mitglieder",autoCreateNotice:"{{count}} Agents werden automatisch erstellt, wenn Sie auf Gruppe erstellen klicken",autoCreateHint:"Jeder Agent wird automatisch erstellt und bereitgestellt, bevor die Gruppe zusammengestellt wird.",unassignedWarning:"{{count}} Mitglieder auf 'Vorhandenen verwenden' gesetzt, aber kein Agent ausgewählt",unassignedHint:"Diese Mitglieder werden bei Diskussionen übersprungen. Gehen Sie zurück, um Agents zuzuweisen.",flowPreview:"Diskussionsablauf",createGroup:"Gruppe erstellen",created:"Gruppe erstellt!",viewGroup:"Gruppe öffnen",createAnother:"Weitere erstellen",success:"Gruppe erfolgreich erstellt!",advancedSettings:"Erweiterte Protokolleinstellungen",agentTimeout:"Agent-Timeout (Sekunden)",maxRetries:"Max. Wiederholungen",onAgentFailure:"Bei Agent-Fehler",onMemberUnavailable:"Bei nicht verfügbarem Mitglied",maxTurns:"Max. Züge (0 = unbegrenzt)",maxTurnsHelp:"Sicherheitslimit für Agent-Züge insgesamt. Standard-Backend-Limit ist 50.",policySkip:"Überspringen",policyRetry:"Wiederholen",policyAbort:"Abbrechen",policyFail:"Fehlschlagen",hintDebate:"Weisen Sie Mitgliedern die Rollen PRO und CON zu. Pro argumentiert zuerst, dann Con, gefolgt von Erwiderungen und Urteil.",hintDevilAdvocate:"Weisen Sie mindestens einem Mitglied die Rolle DEVIL_ADVOCATE zu. Es wird den Konsens der Gruppe hinterfragen.",hintPeerReview:"Jedes Mitglied kritisiert individuell die Arbeit aller anderen und überarbeitet dann basierend auf dem erhaltenen Feedback.",hintDelphi:"Alle Mitglieder antworten unabhängig und anonym. Nach jeder Runde sehen sie die anonymen Ergebnisse und können anpassen. Max. Runden steuert die Anzahl der anonymen Iterationen.",hintNegotiation:"Die Mitglieder nennen ihre Interessen, legen Vorschläge vor und feilschen dann – „Max. Runden“ legt fest, wie viele Verhandlungsrunden laufen. Die Moderation schlichtet nur, wenn keine Einigung zustande kommt.",roleCoverageWarning:"Kein Mitglied hat die Rolle „{{role}}“",roleCoverageHint:"Der Server lässt ersatzweise alle Mitglieder in {{phases}} sprechen, sodass dieselben Personen beide Seiten vertreten. Gehen Sie zurück zu „Mitglieder“ und setzen Sie das Rollenfeld.",hintTaskForce:"Der Moderator erstellt einen Aufgabenplan, weist Arbeit parallel an Agenten zu, überprüft dann die Ergebnisse und fasst sie zusammen.",hintCustom:"Definieren Sie Ihre eigenen Phasen manuell. Benutzerdefinierte Phasen können nach der Erstellung über die API konfiguriert werden.",hintRoundTable:"Alle Mitglieder teilen ihre Meinungen, diskutieren dann die Ansichten der anderen über mehrere Runden, bevor der Moderator zusammenfasst.",protocolSummary:"Protokoll",hitlTitle:"Menschliche Freigabe erforderlich",hitlDesc:"Die Diskussion an ausgewählten Phasen anhalten und auf eine menschliche Entscheidung warten, bevor fortgefahren wird.",hitlApprovalPoints:"Zur Freigabe anhalten bei",hitlNoPhases:"Dieser Stil hat keine voreingestellten Phasen zum Steuern.",hitlNoApprovalPoints:"Mindestens eine Phase auswählen, sonst pausiert die Diskussion nie.",hitlTimeoutPolicy:"Wenn keine rechtzeitige Entscheidung",hitlApprovalTimeout:"Freigabe-Zeitlimit",hitlTimeoutInvalid:"Positive ISO-8601-Dauer eingeben, z. B. PT15M oder PT1H30M.",hitlTimeoutHint:"ISO-8601-Dauer, z. B. PT30S, PT15M, PT2H.",hitlGranularity:"Freigabe-Granularität",hitlGranularityHint:"Freigabe auf Aufgabenebene gilt für die TASK_FORCE-Ausführung — jede Aufgabe einzeln genehmigen oder ablehnen.",hitlOnTaskRejection:"Wenn eine Aufgabe abgelehnt wird",hitlPinNote:"Das Aktivieren von Freigabepunkten legt die Diskussionsphasen dieser Gruppe fest ({{granularity}}-Granularität).",hitlReviewBadge:"Menschliche Freigabe",humanOnTimeoutAbort:"Diskussion abbrechen",humanOnTimeoutLabel:"Bei Zeitüberschreitung",humanOnTimeoutSkip:"Zug überspringen und fortfahren",humanPrincipalId:"Principal-ID",humanPrincipalIdHint:"Die Identität, die die Beiträge dieses Mitglieds einreichen darf — die Diskussion pausiert und wartet, wenn es an der Reihe ist.",humanPrincipalIdPlaceholder:"Login-/Principal-ID des Benutzers",humanTurnSettingsHint:"Die Diskussion pausiert und wartet, wenn ein menschliches Mitglied an der Reihe ist. Legen Sie fest, was passiert, wenn keine rechtzeitige Antwort erfolgt.",humanTurnSettingsTitle:"Einstellungen für Züge menschlicher Mitglieder",humanTurnTimeoutInvalid:"Keine gültige ISO-8601-Dauer, z. B. PT24H oder P1D.",humanTurnTimeoutLabel:"Zug-Timeout (ISO-8601-Dauer)",humanTurnTimeoutPlaceholder:"z. B. PT24H — leer lassen für unbegrenztes Warten",memberTypeHuman:"Mensch"},Y={advisoryBoard:"Beratungsgremium",advisoryBoardDesc:"Fünf Geschäftsperspektiven – Marketing, Technik, Finanzen, Recht, Strategie – beurteilen dieselbe Frage, danach fasst die Moderation zusammen.",peerReview:"Peer-Review-Runde",peerReviewDesc:"Die Prüfenden beurteilen, was Sie einbringen – Entwurf, Plan oder Vorschlag –, kritisieren die Beurteilungen der anderen, überarbeiten sie, und die Moderation führt alles zusammen.",riskAssessment:"Risikobewertung",riskAssessmentDesc:"Alle geben ihre Einschätzung ab, ein Mitglied vertritt bewusst die Gegenposition, die anderen halten dagegen, danach fasst die Moderation zusammen, was standgehalten hat.",forecasting:"Unabhängige Schätzungen",forecastingDesc:"Die Mitglieder antworten über mehrere Runden anonym und sehen dazwischen nur anonymisierte Ergebnisse – niemand richtet sich nach dem ersten Beitrag.",proCon:"Pro/Contra-Debatte",proConDesc:"Zwei Mitglieder argumentieren für den Vorschlag, zwei dagegen, danach folgen Erwiderungen und ein Urteil der Moderation.",negotiation:"Verhandlung",negotiationDesc:"Zwei Parteien nennen ihre Interessen, legen Vorschläge vor und tauschen Runde für Runde Zugeständnisse aus; die Moderation schlichtet nur, wenn keine Einigung zustande kommt.",taskForce:"Einsatzgruppe",taskForceDesc:"Die Moderation zerlegt das Ziel in Aufgaben, die Mitglieder bearbeiten sie parallel, danach prüft und verbindet die Moderation die Ergebnisse.",roles:{marketingExpert:"Marketing-Experte",techLead:"Tech-Lead",financeDirector:"Finanzdirektor",legalCounsel:"Rechtsberater",strategyConsultant:"Strategieberater",substanceReviewer:"Inhaltsprüfer",structureReviewer:"Strukturprüfer",riskReviewer:"Risikoprüfer",riskAnalyst:"Risikoanalyst",domainExpert:"Fachexperte",devilsAdvocate:"Advocatus Diaboli",analystA:"Analyst A",analystB:"Analyst B",analystC:"Analyst C",analystD:"Analyst D",proAdvocate1:"Pro-Vertreter 1",proAdvocate2:"Pro-Vertreter 2",conAdvocate1:"Contra-Vertreter 1",conAdvocate2:"Contra-Vertreter 2",partyA:"Partei A",partyB:"Partei B",projectLead:"Projektleiter",researcher:"Forscher",implementer:"Umsetzer",qualityAssurance:"Qualitätssicherung"},assignRoles:"Rollen zuweisen",backToGallery:"Zurück zu den Vorlagen",browseButton:"Aus Vorlage",createButton:"Gruppe erstellen",created:"Gruppe aus Vorlage erstellt",nameLabel:"Gruppenname",selectAgent:"Agent auswählen…",subtitle:"Starten Sie mit einer vorgefertigten, abgestimmten Diskussion — weisen Sie einfach Agenten den benannten Rollen zu.",title:"Gruppenvorlagen",roleCount_one:"{{count}} Rolle zuzuweisen",roleCount_other:"{{count}} Rollen zuzuweisen",empty:"Keine Vorlagen verfügbar",emptyDescription:"Dieser Server liefert keine Gruppenvorlagen mit. Sie können eine Gruppe weiterhin im Assistenten von Grund auf erstellen."},$={title:"Nutzererinnerungen",subtitle:"Persistente Nutzererinnerungen durchsuchen und verwalten",userIdPlaceholder:"Nutzer-ID eingeben…",searchPlaceholder:"Erinnerungen durchsuchen…",enterUserId:"Geben Sie eine Nutzer-ID ein, um deren Erinnerungen zu durchsuchen",totalEntries:"Einträge gesamt",preferences:"Präferenzen",facts:"Fakten",conflicts:"Konflikte",cat_all:"Alle",cat_preference:"Präferenzen",cat_fact:"Fakten",cat_context:"Kontext",deleteAll:"Alle löschen",deleteAllTitle:"Alle Erinnerungen löschen",deleteAllDesc:"Alle Erinnerungen dieses Nutzers werden unwiderruflich gelöscht.",deleteAllConfirm:"Alle löschen",entryDeleted:"Erinnerungseintrag gelöscht",allDeleted:"Alle Erinnerungen des Nutzers gelöscht",noResults:"Keine Erinnerungseinträge gefunden",value:"Wert",sourceAgent:"Quell-Agent",accessCount:"Zugriffe",created:"Erstellt",updated:"Aktualisiert",sourceConversation:"Quell-Gespräch",conflicted:"Widerspruch"},X={title:"Nutzereigenschaften",subtitle:"Gespeicherte longTerm-Slot-Eigenschaften je Nutzer durchsuchen und verwalten",userIdPlaceholder:"Nutzer-ID eingeben…",searchPlaceholder:"Eigenschaften filtern…",enterUserId:"Geben Sie eine Nutzer-ID ein, um deren Eigenschaften anzuzeigen",key:"Schlüssel",type:"Typ",value:"Wert",deleteAll:"Alle löschen",deleteAllTitle:"Alle Eigenschaften löschen",deleteAllDesc:"Alle Eigenschaften dieses Nutzers werden unwiderruflich gelöscht.",deleted:"Eigenschaften gelöscht",noResults:"Keine Eigenschaften gefunden",showingCount:"{{count}} Eigenschaften"},ee={agentId:"Agenten-ID",environment:"Umgebung",title:"Agenten-Auslöser",subtitle:"Absichten mit Agentenbereitstellungen für automatisches Routing verknüpfen",create:"Neuer Auslöser",createTitle:"Auslöser erstellen",editTitle:"Auslöser bearbeiten",intent:"Absicht",deployments:"Agentenbereitstellungen",addDeployment:"Agent hinzufügen",agents:"Agenten",empty:"Noch keine Auslöser konfiguriert",created:"Auslöser erstellt",updated:"Auslöser aktualisiert",deleted:"Auslöser gelöscht",deleteTitle:"Auslöser löschen",deleteDesc:"Auslöser für Absicht „{{intent}}“ endgültig löschen?",searchPlaceholder:"Nach Absicht oder Agenten-ID filtern…"},ne={agentCount:"Agenten",confidence:"Konfidenz",partialError:"Einige Fähigkeitsabfragen sind fehlgeschlagen",registryOverview:"Registry-Übersicht",skillName:"Fähigkeit",skills:"Fähigkeiten",title:"Fähigkeiten-Erkennung",subtitle:"Agenten anhand ihrer deklarierten Fähigkeiten und Kompetenzen finden",searchPlaceholder:"Fähigkeiten suchen…",strategyHighest:"Höchste Konfidenz",strategyAll:"Alle Ergebnisse",registeredSkills:"Registrierte Fähigkeiten",noSkills:"Keine Fähigkeiten gefunden",matchingAgents:"Passende Agenten",noMatches:"Keine Agenten für diese Fähigkeit gefunden"},te={title:"Agent exportieren",loading:"Ressourcenbaum wird geladen…",selectResources:"Zu exportierende Ressourcen auswählen",required:"Erforderlich",snippets:"Snippets",allSelected:"Alle Ressourcen ausgewählt",countSelected:"{{count}} von {{total}} Ressourcen ausgewählt",exportSelected:"Ausgewählte exportieren"},re={title:"Agent importieren",dropZone:"ZIP-Datei hierher ziehen oder zum Durchsuchen klicken",dropZoneHint:"Exportiertes Agentenarchiv (.zip)",strategyLabel:"Import-Strategie",createNew:"Als neuen Agenten erstellen",createNewDesc:"Erstellt eine neue Kopie mit neuen IDs. Am besten für den Erstimport.",mergeSync:"Mit bestehendem zusammenführen",mergeSyncDesc:"Aktualisiert vorhandene Ressourcen. Erstellt neue, falls nicht vorhanden.",upgradeExisting:"Bestehenden Agenten aktualisieren",upgradeDesc:"Ressourcen strukturell mit einem Ziel-Agenten abgleichen. Am besten für Stufenübernahmen.",syncRemote:"Von Remote-Instanz synchronisieren",syncDesc:"Mit einer anderen EDDI-Instanz verbinden und einen Agenten live synchronisieren.",importNow:"Jetzt importieren",previewChanges:"Änderungen ansehen",selectTargetAgent:"Ziel-Agent auswählen",upgradeTargetHint:"Die importierten Ressourcen werden strukturell mit diesem Agenten abgeglichen.",chooseAgent:"— Agent wählen —",sourceAgent:"Quell-Agent (Remote)",targetAgent:"Ziel-Agent (Lokal)",createNewTarget:"Neuen Agenten erstellen",resource:"Ressource",type:"Typ",match:"Zuordnung",action:"Aktion",new:"neu",updated:"aktualisiert",unchanged:"unverändert",selected:"ausgewählt",mergeNow:"Ausgewählte importieren",syncNow:"Jetzt synchronisieren",upgradeNow:"Jetzt aktualisieren",importing:"Agent wird importiert…",contentIdentical:"Inhalt identisch",targetContent:"Ziel",sourceContent:"Quelle",diffHiddenLines:"{{lines}} unveränderte Zeilen anzeigen",diffRawComparison:"Kein gültiges JSON – Vergleich als reiner Text, daher erscheint auch ein reiner Formatierungsunterschied als Änderung."},ie={title:"Agenten-Synchronisierung",subtitle:"Agenten zwischen EDDI-Instanzen synchronisieren",connection:"Quell-Instanz",sourceUrl:"URL der Quell-EDDI-Instanz",authToken:"Autorisierungstoken",authHint:"Optional. Wird als X-Source-Authorization-Header gesendet.",connect:"Verbinden",connected:"Verbunden",agentsFound:"Agenten",connectionFailed:"Verbindung fehlgeschlagen",agentMapping:"Agenten-Zuordnung",previewAll:"Alle vorschauen",syncSelected:"Ausgewählte synchronisieren",remote:"Remote",createNew:"Neu erstellen",changes:"Änderungen",agentsSelected:"Agenten ausgewählt",totalResources:"Ressourcen",syncSuccess:"Synchronisierung abgeschlossen",syncError:"Synchronisierung fehlgeschlagen",empty:"Verbinden Sie sich mit einer Quell-Instanz, um die Agenten-Synchronisierung zu starten.",autoMatched:"Automatisch zugeordnet",previewFirst:"Änderungen vor dem Synchronisieren ansehen"},se={actionCreate:"Neu",actionUpdate:"Aktualisieren",actionSkip:"Aktuell",actionConflict:"Konflikt"},ae={title:"Nutzer-Konversationen",subtitle:"Intent-Benutzer-Konversationszuordnungen verwalten",lookup:"Suche",intent:"Absicht",userId:"Benutzer-ID",agentId:"Agenten-ID",environment:"Umgebung",conversationId:"Konversations-ID",binding:"Aktive Zuordnung",enterBoth:"Geben Sie Intent und Benutzer-ID ein",notFound:"Keine Zuordnung gefunden",create:"Zuordnung erstellen",createTitle:"Zuordnung erstellen",created:"Zuordnung erstellt",deleteTitle:"Zuordnung löschen",deleteDesc:'Zuordnung für Intent "{{intent}}" und Benutzer "{{userId}}" entfernen?',deleted:"Zuordnung gelöscht"},oe={placeholder:"Seiten, Agenten, Aktionen suchen…",noResults:"Keine Ergebnisse gefunden.",recent:"Kürzlich",navigate:"Navigation",agents:"Agenten",actions:"Schnellaktionen",createAgent:"Neuen Agenten erstellen",openChat:"Chat öffnen",kbdNavigate:"navigieren",kbdSelect:"auswählen",kbdClose:"schließen"},le={agentIdPlaceholder:"Agenten-ID zur Nachrichtenverarbeitung",botToken:"Bot-Token",botTokenHint:"Bot-Benutzer-OAuth-Token. Verwenden Sie eine Tresor-Referenz für mehr Sicherheit.",botTokenPlaceholder:"xoxb-… oder ${vault:slack-bot-token}",channel:"Kanal",channelId:"Slack-Kanal-ID",channelIdCol:"Kanal-ID",channelIdHint:"Rechtsklick auf einen Slack-Kanal → Kanaldetails anzeigen → Kanal-ID kopieren",channelsPlural:"Kanäle",channelType:"Kanaltyp",confirmDelete:"Kanal löschen?",confirmDeleteDesc:"Diese Kanalintegration wird dauerhaft entfernt.",create:"Kanal erstellen",createTitle:"Kanalintegration erstellen",defaultAgentId:"Standard-Agenten-ID",defaultTargetHint:"Das Standardziel verarbeitet alle Nachrichten, die keinem Trigger-Schlüsselwort entsprechen. Nach der Erstellung können weitere Ziele hinzugefügt werden.",empty:"Noch keine Kanäle",emptyDesc:"Erstellen Sie eine Kanalintegration, um Agenten mit Slack zu verbinden.",name:"Name",namePlaceholder:"z. B. Engineering AI Hub",openSlackApps:"Slack-App-Dashboard öffnen",searchPlaceholder:"Kanäle suchen…",signingSecret:"Signierungsgeheimnis",signingSecretHint:"Von der Seite „Grundlegende Informationen“ Ihrer Slack-App.",signingSecretPlaceholder:"Hex-String oder ${vault:slack-signing-secret}",slackSetupGuide:"Slack-Einrichtungsanleitung",slackSetupSummary:"Erstellen Sie eine Slack-App, konfigurieren Sie Bot-Token-Bereiche (app_mentions:read, chat:write, im:history, channels:history, groups:history) und fügen Sie die Anmeldedaten hier ein.",target:"Ziel",targets:"Ziele",targetsCol:"Ziele",type:"Typ",unnamed:"Unbenannter Kanal",version:"Version"},ue={saveSuccess:"Kanal gespeichert",addTarget:"Ziel hinzufügen",addTrigger:"Trigger hinzufügen…",agentId:"Agenten-ID",botToken:"Bot-Token",channelId:"Slack-Kanal-ID",cooldown:"Abklingzeit (s)",general:"Allgemein",groupId:"Gruppen-ID",isDefault:"Standard",maxCost:"Max €/Tag",maxDaily:"Max/Tag",name:"Name",observe:"Beobachten",observeDesc:"Passiv überwachen und selektiv antworten",observeKeywords:"Trigger-Schlüsselwörter",observeMimeTypes:"Trigger-MIME-Typen",observeMode:"Beobachtungsmodus",observeSettings:"Einstellungen Beobachtungsmodus",platformConfig:"Plattformkonfiguration",rawConfig:"Rohkonfiguration",removeTarget:"Entfernen",requiredEvents:"Erforderliche Event-Abonnements:",requiredScopes:"Erforderliche Bot-Token-Bereiche:",setDefault:"Als Standard festlegen",signingSecret:"Signierungsgeheimnis",targetName:"Name",targets:"Nachrichtenrouting-Ziele",targetType:"Typ",triggerHint:"Benutzer geben „Schlüsselwort: Nachricht“ ein, um an dieses Ziel weiterzuleiten",triggerKeywords:"Trigger-Schlüsselwörter",triggers:"Trigger",type:"Kanaltyp",webhookHint:"Fügen Sie diese URL in das Feld „Request URL“ unter Event Subscriptions Ihrer Slack-App ein.",webhookUrl:"Webhook-URL",hitlSection:"Human-in-the-Loop-Freigaben (optional)",hitlApprovalChannel:"Freigabe-Channel-ID",hitlApprovalChannelHint:"Slack-Channel, der eine Freigabekarte erhält, wenn eine Konversation pausiert.",hitlApproverUserIds:"Benutzer-IDs der Freigeber",hitlApproverUserIdsHint:"Kommagetrennte Slack-Benutzer-IDs, die über Buttons freigeben dürfen. Ohne diese Liste werden keine Buttons angezeigt (fail-closed)."},ce={loadingApprovalDetails:"Freigabedetails werden geladen …",pendingCount:"{{count}} warten auf Genehmigung",approvalDetailsError:"Es konnte nicht geladen werden, was diese Anfrage bewirken würde, daher kann sie hier nicht genehmigt werden. Ablehnen ist weiterhin sicher.",awaitingHuman:"Warten auf Mensch",awaitingApproval:"Warten auf Genehmigung",approve:"Genehmigen",reject:"Ablehnen",cancel:"Abbrechen",approved:"Genehmigt",rejected:"Abgelehnt",cancelled:"Abgebrochen",pending:"ausstehend",emptyQueue:"Keine ausstehenden Genehmigungen",emptyQueueDescription:"Alle Konversationen laufen — keine menschliche Eingabe erforderlich.",surface:"Oberfläche",regular:"Konversation",group:"Gruppe",pauseReason:"Grund",pausedAt:"Pausiert",timeoutPolicy:"Zeitlimit",timeRemaining:"Verbleibend",overdue:"Überfällig",phase:"Phase",granularity:"Granularität",taskApprovals:"Aufgabengenehmigungen",approveAll:"Alle genehmigen",note:"Notiz hinzufügen (optional)",notePlaceholder:"Eine Notiz zur Entscheidung hinzufügen...",discussionCancelled:"Diskussion abgebrochen",cancelDiscussion:"Diskussion abbrechen",rejectAll:"Alle ablehnen",timeoutWaitIndefinitely:"Unbegrenzt warten",timeoutAutoApprove:"Auto-Genehmigen",timeoutAutoReject:"Auto-Ablehnen",timeoutAbort:"Abbrechen",granularityPhase:"Phase",granularityTask:"Aufgabe",rejectionFail:"Aufgabe fehlschlagen lassen",rejectionRetry:"Aufgabe wiederholen",groupsTruncated:"Es gibt mehr Gruppenfreigaben, als hier angezeigt werden.",groupsLoadError:"Gruppenfreigaben konnten nicht geladen werden.",toolApprovalRequired:"Tool-Freigabe erforderlich",toolCallsAwaiting:"Tool-Aufrufe warten auf Freigabe",executedUngated:"Bereits ausgeführt (ohne Freigabe)",outcomeUnknown:"Eine vorherige Freigabe wurde mitten in der Ausführung unterbrochen — ihre Wirkung ist unbekannt; vor einem erneuten Versuch extern prüfen.",outcomeUnknownShort:"Ergebnis unbekannt",toolApprovalHint:"Freigeben wendet deine Auswahl je Aufruf an (nicht geänderte Aufrufe werden freigegeben). Ablehnen lehnt den gesamten Stapel ab.",toolApprovalHintExplicit:"Jeder Aufruf braucht eine eigene Freigabe oder Ablehnung, bevor du den Stapel freigeben kannst. Ablehnen lehnt den gesamten Stapel ab.",explicitReviewMissing:"Prüfe jeden Aufruf oben, bevor du freigibst.",redactionCaveat:"Die unten angezeigten Argumente sind geschwärzt — ein geheimer Wert erscheint als „“, nicht weggelassen.",gateReason:"Übereinstimmendes Muster",argsTruncated:"Argumente gekürzt",amendArguments:"Argumente ändern (optional)",amendPlaceholder:'Vollständiges Ersatz-JSON-Objekt, z. B. {"to":"ops@acme.com"}. Leer lassen, um das Original zu behalten.',amendTruncated:"Ein Aufruf mit gekürzten Argumenten kann nicht geändert werden — unverändert freigeben oder ablehnen.",amendInvalidJson:"Geänderte Argumente müssen ein gültiges JSON-Objekt sein.",amendTooLarge:"Geänderte Argumente sind zu groß.",review:"Prüfen",tool:"Tool",scopeAll:"Alle ausstehenden Freigaben im gesamten System werden angezeigt.",scopeOwn:"Ausstehende Freigaben für deine Konversationen werden angezeigt.",chatPaused:"Diese Konversation wartet auf eine menschliche Freigabe.",noProgressWaitForHuman:"Auf einen Menschen warten",noProgressAutoReject:"Automatisch ablehnen",noProgressAbort:"Abbrechen",confirmApproveTitle:"Anfrage genehmigen?",confirmApproveDescription:"Diese Konversation genehmigen und fortsetzen?",confirmApproveToolTitle:"Tool-Ausführung genehmigen?",confirmApproveToolDescription:"Beim Genehmigen wird ausgeführt: {{toolNames}}. Dies führt reale Aktionen aus und kann nicht rückgängig gemacht werden.",confirmRejectTitle:"Anfrage ablehnen?",confirmRejectDescription:"Diese Anfrage ablehnen? Die Konversation wird nicht fortgesetzt.",confirmCancelTitle:"Konversation abbrechen?",confirmCancelDescription:"Diese Konversation abbrechen? Alle laufenden Arbeiten werden abgebrochen.",confirmCancelButton:"Konversation abbrechen",confirmCancelGroupTitle:"Diskussion abbrechen?",confirmCancelGroupDescription:"Diese Diskussion abbrechen? Alle laufenden Arbeiten werden abgebrochen.",confirmCancelGroupButton:"Diskussion abbrechen",confirmDismiss:"Zurück",approvalBlockedHeading:"Dies kann hier nicht genehmigt werden",confirmRejectToolTitle:"Tool-Ausführung ablehnen?",confirmRejectToolDescription:"Es wird nichts ausgeführt. Die Konversation wird fortgesetzt und der Agent antwortet ohne {{toolNames}}.",humanTurn:"Zug des Mitglieds",humanTurnReason:"Wartet darauf, dass {{member}} spricht",humanTurnMemberFallback:"ein Mitglied",decidedProgress:"{{decided}} von {{total}} entschieden"},de={deploying:"Agent wird bereitgestellt…",error:"Etwas ist schiefgelaufen",newConversation:"Neues Gespräch",ready:"Bereit — Nachricht zum Testen eingeben",retry:"Erneut versuchen",saving:"Änderungen werden gespeichert…",starting:"Gespräch wird gestartet…",timeout:"Zeitüberschreitung bei der Bereitstellung",title:"Test-Chat",preparing:"Wird vorbereitet …"},ge={auditTrail:"Prüfprotokoll",checking:"Wird geprüft…",coordConnected:"Koordinator verbunden",coordDisconnected:"Koordinator getrennt",coordUnknown:"Koordinator —",createGroup:"Gruppe erstellen",noConversations:"Noch keine Gespräche",offline:"Offline",online:"Online",platform:"Plattform",platformHealth:"Plattformzustand",recentConversations:"Neueste Gespräche",secretVault:"Geheimnistresor",vaultDown:"Vault nicht verfügbar",vaultUp:"Vault bereit",viewLogs:"Protokolle anzeigen"},he={retry:"Erneut versuchen",title:"Etwas ist schiefgelaufen"},pe={auditPseudonymized:"Audit pseudonymisiert",checkingStatus:"Wird geprüft…",confirmDelete:"Ja, alle Daten löschen",confirmDesc:'Dies löscht dauerhaft ALLE Daten des Nutzers "{{userId}}". Diese Aktion kann nicht rückgängig gemacht werden.',confirmTitle:"Datenlöschung bestätigen",conversationsDeleted:"Gelöschte Gespräche",delete:"Alle Daten löschen",deleteSuccess:"Nutzerdaten erfolgreich gelöscht",deleting:"Wird gelöscht…",enterUserIdFirst:"Geben Sie oben eine Nutzer-ID ein, um den Status zu prüfen",export:"Daten exportieren",exportSuccess:"Nutzerdaten erfolgreich exportiert",exporting:"Wird exportiert…",legalDesc:"Der Datenexport (Art. 15/20) liefert eine JSON-Datei mit allen gespeicherten Daten eines Nutzers. Die Löschung (Art. 17) entfernt dauerhaft alle Erinnerungen und Gesprächsdaten, pseudonymisiert Audit-Einträge und kann nicht rückgängig gemacht werden.",legalNotice:"Datenschutzhinweis",liftRestriction:"Einschränkung aufheben",liftingRestriction:"Wird aufgehoben…",logsPseudonymized:"Protokolle pseudonymisiert",memoriesDeleted:"Gelöschte Erinnerungen",restrictProcessing:"Verarbeitung einschränken",restricting:"Wird eingeschränkt…",restrictionApplied:"Verarbeitung für Nutzer eingeschränkt",restrictionDesc:"Schränken Sie die Verarbeitung ein, wenn ein Nutzer die Richtigkeit der Daten bestreitet oder der Verarbeitung widerspricht. Während der Einschränkung bleiben die Daten des Nutzers erhalten, es können jedoch keine neuen Gespräche verarbeitet werden. Dies ist umkehrbar.",restrictionLifted:"Verarbeitungseinschränkung aufgehoben",restrictionTitle:"Verarbeitungseinschränkung (Art. 18)",resultsTitle:"Löschung abgeschlossen",statusActive:"Verarbeitung aktiv",statusUnknown:"Status nicht verfügbar",statusRestricted:"Verarbeitung eingeschränkt",subtitle:"DSGVO-konforme Verwaltung von Nutzerdaten — Löschung (Art. 17), Portabilität (Art. 15/20) und Verarbeitungseinschränkung (Art. 18)",title:"Datenschutz & Compliance",userId:"Nutzer-ID",userIdPlaceholder:"Nutzer-ID eingeben…",userLookup:"Nutzer-Suche"},fe={message:"Demo-Modus — Es werden Beispieldaten angezeigt. Verbinden Sie ein EDDI-Backend für echte Daten."},me={confirmPurgeAll:"ALLE {{count}} verwaisten Ressourcen dauerhaft löschen? Der Server löscht alle — Ihre Auswahl wird nicht angewendet. Dies kann nicht rückgängig gemacht werden.",deleteSelected:"{{count}} ausgewählte löschen",description:"Finden und bereinigen Sie Ressourcen, die von keinem Agenten oder Workflow referenziert werden.",deselectAll:"Alle abwählen",includeDeleted:"Soft-gelöschte einschließen",lastScanned:"Zuletzt gescannt",noOrphans:"Keine verwaisten Ressourcen gefunden",purge:"Alle bereinigen",purgeSuccess:"{{count}} verwaiste Ressourcen gelöscht",runScan:"Scan ausführen",scan:"Scannen",scanPromptDesc:"Finden Sie Erweiterungskonfigurationen (Regeln, API-Aufrufe, LLMs, Ausgaben), die von keinem Workflow oder Agenten referenziert werden. Bereinigen Sie ungenutzte Ressourcen, um Ihre Plattform aufgeräumt zu halten.",scanPromptTitle:"Plattform scannen",scanning:"Ressourcen werden gescannt…",selectAll:"Alle auswählen",softDeleted:"Gelöscht",title:"Verwaiste Ressourcen",found_one:"{{count}} verwaiste Ressource gefunden",found_other:"{{count}} verwaiste Ressourcen gefunden"},be={apiCallsMinute:"API-Aufrufe / Minute",configuration:"Konfiguration",conversationsToday:"Gespräche heute",description:"Konfigurieren Sie Ratenlimits, Nutzungsobergrenzen und Kostenbudgets pro Mandant.",disable:"Deaktivieren",disabled:"Deaktiviert",enable:"Aktivieren",enabled:"Aktiviert",enforcementOff:"Durchsetzung ist deaktiviert.",enforcementOffHint:"Kontingente werden nicht durchgesetzt. Aktivieren Sie die Durchsetzung und speichern Sie, um die Limits anzuwenden.",limitHint:"-1 = unbegrenzt",liveUsage:"Live-Nutzung",maxAgentsPerTenant:"Max. Agenten / Mandant",maxApiCallsPerMinute:"Max. API-Aufrufe / Minute",maxConversationsPerDay:"Max. Gespräche / Tag",maxMonthlyCostUsd:"Max. monatliche Kosten (USD)",monthlyCost:"Monatliche Kosten",resetConfirmDesc:"Setzt sofort alle Nutzungszähler (Unterhaltungen, API-Aufrufe, monatliche Kosten) für den Mandanten „default“ auf null. Dies kann nicht rückgängig gemacht werden.",resetConfirmTitle:"Nutzungszähler zurücksetzen?",resetCounters:"Zähler zurücksetzen",resetSuccess:"Nutzungszähler zurückgesetzt",saveSuccess:"Kontingent gespeichert",tenantId:"Mandanten-ID",title:"Mandanten-Kontingente"},ke={clearVault:"Vault-Referenz löschen",createNew:"Neues Secret erstellen",emptyVault:"Noch keine Secrets gespeichert",filterPlaceholder:"Vault-Schlüssel suchen…",keyNotFound:"Dieser Schlüssel wurde im Vault nicht gefunden",loading:"Schlüssel werden geladen…",noMatch:'Keine Schlüssel für "{{filter}}"',pickFromVault:"Aus Vault auswählen",placeholder:"API-Schlüssel oder ${vault:key-name}",vaultDown:"Vault ist nicht konfiguriert — richten Sie einen Secret-Provider im EDDI-Backend ein"},Ae={category:"Kategorie",content:"Prompt-Inhalt",contentLabel:"Snippet-Inhalt",contentPlaceholder:"Du solltest in deinen Antworten umsichtig und sorgfältig sein…",description:"Beschreibung",descriptionPlaceholder:"Was dieses Snippet bewirkt",identity:"Identität",name:"Snippet-Name",namePlaceholder:"z. B. cautious_mode",noTags:"Keine Tags",tagPlaceholder:"z. B. safety, production",tags:"Tags",templateEnabled:"Vorlagenauflösung aktivieren",templateEnabledHint:"Wenn deaktiviert, werden {{}}-Markierungen im Inhalt als wörtlicher Text behandelt (nützlich für Codebeispiele).",usageHint:"Verwendung:"},Se={deployed:"Bereitgestellt",deploying:"Wird bereitgestellt…",error:"Fehler",notDeployed:"Nicht bereitgestellt",checking:"Wird geprüft…"},we={subtitle:"Verwalten Sie Erinnerungen, Eigenschaften und Gesprächszuordnungen pro Nutzer",tabs:"Nutzerdaten-Bereiche",title:"Nutzerdaten"},ve={deleteKey:"{{key}} löschen",editKey:"{{key}} bearbeiten",tableTitle_one:"{{count}} Variable",tableTitle_other:"{{count}} Variablen",title:"Globale Variablen",description:"Deployment-weite Konfigurationswerte, die in allen Agenten verfügbar sind.",create:"Variable hinzufügen",createTitle:"Globale Variable hinzufügen",editTitle:"Variable bearbeiten",keyLabel:"Schlüssel",keyPlaceholder:"z. B. default-model",keyError:"Nur Buchstaben, Ziffern, Punkte, Unterstriche und Bindestriche.",valueLabel:"Wert",valuePlaceholder:"z. B. gpt-4.1",valueWarning:"Werte sind in der Oberfläche und in Logs sichtbar. Verwenden Sie für sensible Daten den Secrets-Vault.",descriptionLabel:"Beschreibung (optional)",descriptionPlaceholder:"Optionale Beschreibung …",exportableLabel:"In Agent-Exporte einbeziehen",save:"Variable speichern",saveSuccess:"Variable „{{key}}“ gespeichert",deleteSuccess:"Variable „{{key}}“ gelöscht",confirmDeleteTitle:"Variable löschen",confirmDeleteMessage:"Möchten Sie „{{key}}“ wirklich löschen? Agenten, die ${vars:{{key}}} verwenden, sehen dann nicht aufgelöste Referenzen.",empty:"Keine globalen Variablen definiert",emptyHint:"Klicken Sie auf „Variable hinzufügen“, um Ihren ersten deployment-weiten Konfigurationswert anzulegen.",searchPlaceholder:"Variablen filtern …",colKey:"Schlüssel",colValue:"Wert",colDescription:"Beschreibung",colExportable:"Export",colReference:"Referenz",colActions:"Aktionen",exportYes:"In Exporten enthalten",exportNo:"Von Exporten ausgeschlossen",copyVars:"${vars:…}-Referenz kopieren",refCopied:"Kopiert: {{ref}}",infoLine1:"Verwenden Sie {{vars.}} in System-Prompts oder ${vars:} an beliebiger Stelle in Agent-Konfigurationen.",infoLine2:"Änderungen werden innerhalb von 2 Minuten wirksam (Cache-TTL). Verwenden Sie für sensible Werte stattdessen den Secrets-Vault."},De={endpoints:"Endpunkte",endpointsTotal:"Endpunkte gesamt",groupsSelected:"Gruppen ausgewählt",importOpenApi:"Aus OpenAPI importieren",importSelected:"Ausgewählte Gruppen importieren",importing:"Wird importiert…",selectGroups:"API-Gruppen zum Importieren als separate API-Aufruf-Erweiterungen auswählen"},ze=JSON.parse('{"board":{"continuePlaceholder":"Diese Diskussion fortsetzen…","inputDisabledClosed":"Diese Diskussion ist geschlossen","newDiscussion":"Neue Diskussion","noResponseGenerated":"Keine Antwort generiert","awaitingApprovalHint":"Diese Diskussion ist für eine menschliche Genehmigung angehalten.","reviewInManager":"Prüfen","askMore":"{{name}} weiter fragen →","askYourBoard":"Fragen Sie Ihre Task Force …","attachFile":"Datei anhängen","backToLive":"Zurück zur laufenden Diskussion","chatOneOnOne":"1:1-Chat","close":"Schließen","copied":"Kopiert!","copyResponse":"Antwort kopieren","details":"Details","emptyDescription":"Stellen Sie eine Frage, und Ihre Task Force diskutiert sie.","emptyTitle":"Bereit zur Diskussion","error":"Etwas ist schiefgelaufen","fileTooLarge":"Die Datei darf höchstens 10 MB groß sein","fileTypeNotAllowed":"Dieser Dateityp wird nicht unterstützt","hideConfig":"Detailbereich ausblenden","live":"Live","liveNow":"Live","loadingResponse":"Antwort wird geladen","members":"Team","membersPanel":"Teambereich","moderator":"Moderator","noMembers":"Keine Teammitglieder","noSessions":"Noch keine Sitzungen","phase":"Phase","pin":"Antwort anheften","removeAttachment":"Anhang entfernen","running":"Läuft","runningHint":"Diese Diskussion läuft noch — neue Antworten erscheinen automatisch.","send":"Senden","sessions":"Sitzungen","sessionsPanel":"Sitzungsbereich","skipped":"{{name}} — übersprungen","startingDescription":"Ihre Task Force arbeitet daran — Antworten erscheinen hier, sobald sie eintreffen.","startingTitle":"Diskussion läuft","stillDiscussing":"Die Task Force diskutiert noch …","stop":"Stoppen","synthesis":"Synthese","synthesisResult":"Syntheseergebnis","title":"Task Force","toggleConfig":"Detailbereich umschalten","unpin":"Antwort lösen","untitled":"Ohne Titel","viewSessions":"Frühere Sitzungen ansehen"},"thread":{"fileTooLarge":"Datei muss kleiner als 20MB sein","fileTypeNotAllowed":"Dieser Dateityp wird nicht unterstützt","attachmentLimit":"Maximal {{max}} Anhänge pro Nachricht","notForwarded":"Datei gespeichert, aber zu groß für das Modell","uploadFailed":"Upload fehlgeschlagen: {{error}}","noResponse":"Keine Antwort","attachFile":"Datei anhängen","emptySubtitle":"Senden Sie eine Nachricht, um mit {{name}} zu chatten.","emptyTitle":"Chat mit {{name}}","followUp":"Nachfrage zu Ihrer Antwort …","fromSession":"Aus der Sitzung {{boardName}}","placeholder":"Nachricht eingeben …","questionLabel":"Frage","removeAttachment":"Anhang entfernen","responseLabel":"Antwort","send":"Senden","sendError":"Entschuldigung, es ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut.","startingConversation":"Konversation wird gestartet …","toggleContext":"Kontext umschalten","placeholderNamed":"Nachricht an {{name}} …"},"chat":{"agentDetails":"Agenten-Details","selectToView":"Wähle einen Agenten, um Details anzuzeigen","hideDetails":"Details ausblenden","editAgent":"Agent bearbeiten","auditLogs":"Audit-Protokolle","openStudio":"Im Manager öffnen","triggers":"Trigger anzeigen","starterSelected":"Prompt zum Chateingabefeld hinzugefügt","title":"Chat","hideAgentDetails":"Agentendetails ausblenden","showAgentDetails":"Agentendetails anzeigen"},"agentEditor":{"capabilities":"Fähigkeiten","workflows":"Workflows","features":"Funktionen & Sicherheit","a2aEnabled":"Agent-zu-Agent","memoryTools":"Speicher-Werkzeuge","signedMessages":"Signierte Nachrichten","strictMemory":"Strikter Speicher","hitlMode":"Freigabemodus","llmConfig":"Modell & LLM Engine","provider":"Anbieter","mode":"Ausführungsmodus","personaPrompt":"Persona-Systemprompt","starters":"Gesprächseinstiege","channels":"Kanal-Konnektoren","temperature":"Temperatur","contextWindow":"Kontextlimit","activeTools":"Aktive Tools","noLlm":"Kein LLM konfiguriert","noTools":"Keine konfiguriert","add":"Hinzufügen","addCapability":"Fähigkeit hinzufügen","cancel":"Abbrechen","close":"Schließen","confidence":"Konfidenz","confidenceHigh":"Hoch","confidenceLow":"Niedrig","confidenceMedium":"Mittel","description":"Beschreibung","descriptionPlaceholder":"Beschreiben Sie die Expertise dieses Agenten …","discardChanges":"Sie haben ungespeicherte Änderungen. Verwerfen?","loadError":"Agentendaten konnten nicht geladen werden.","noCapabilities":"Keine Fähigkeiten definiert.","removeCapability":"Fähigkeit entfernen","retry":"Erneut versuchen","save":"Änderungen speichern","saveError":"Änderungen konnten nicht gespeichert werden","saveSuccess":"Agent erfolgreich aktualisiert","settings":"Einstellungen","skill":"Fähigkeit","skillPlaceholder":"z. B. Zusammenfassung","systemPrompt":"System-Prompt","systemPromptPlaceholder":"Anweisungen, die Verhalten, Persönlichkeit und Expertise dieses Agenten festlegen …","title":"Agent bearbeiten"},"settings":{"hitlApprovalPointsNote":"Diese Einstellungen bestimmen, wie eine Genehmigung abläuft. Welche Punkte einer Diskussion eine Genehmigung erfordern, wird pro Phase im Manager konfiguriert.","hitlOpenManager":"Genehmigungspunkte festlegen","deliberation":"Qualität der Beratung","deliberationDesc":"Minderheitsmeinungen festhalten und Mitgliedern erlauben, mitten in der Diskussion entdeckte Arbeit anzulegen","recordDissents":"Minderheitenvotum erfassen","recordDissentsDesc":"Nach jeder Zusammenfassung erhält jedes Mitglied, das sie nicht verfasst hat, einen kurzen Zug, um verbleibende Einwände zu nennen. Kostet einen zusätzlichen Aufruf je Mitglied.","agentFiledTasks":"Mitglieder eigene Aufgaben anlegen lassen","agentFiledTasksDesc":"Arbeit, die ein Agent mitten in der Diskussion entdeckt, wird zu einer echten Aufgabe, die die nächste Ausführungswelle aufgreift. Aus bedeutet, dass die Werkzeuge für diese Gruppe gar nicht existieren.","maxTasksPerDiscussion":"Max. angelegte Aufgaben / Diskussion","maxTasksPerDiscussionHelp":"Zählt nur von Agenten angelegte Aufgaben, damit ein großer geplanter Rückstand sie nicht aufbraucht.","maxTasksPerTurn":"Max. angelegte Aufgaben / Zug","maxTasksPerTurnHelp":"Begrenzt einen ausufernden Einzelzug; die Diskussionsgrenze begrenzt langsames Abdriften.","maxCost":"Kostenobergrenze (USD)","maxCostUnlimited":"Kein Limit","maxCostHelp":"Leer lassen für kein Limit. Ein bereits laufender Zug kann die Summe noch leicht über die Grenze treiben.","onCostExceeded":"Beim Erreichen der Grenze","costSynthesize":"Jetzt zusammenfassen — direkt zum Fazit springen","costAbort":"Abbrechen — die Diskussion sofort scheitern lassen","costCeilingInvalid":"Eine Kostenobergrenze muss größer als 0 sein. Für kein Limit das Feld leeren.","maxDelegationDepth":"Max. Delegationstiefe","maxDelegationDepthHelp":"A delegiert an B, B an C — das ist Tiefe 2. Der Sprung, der dies überschreiten würde, wird abgelehnt; das stoppt einen Delegationszyklus.","delegationTimeout":"Delegations-Timeout (Sekunden)","delegationTimeoutHelp":"Wie lange ein delegierender Agent auf seinen Delegierten wartet. Erhöhe den Wert, wenn der Delegierte Werkzeuge oder eine verschachtelte Diskussion ausführt.","allowedDelegationTargets":"Delegations-Positivliste","allowedDelegationTargetsHint":"Beliebiger bereitgestellter Agent","allowedDelegationTargetsHelp":"Kommagetrennte Agent-IDs. Leer lassen, um jeden bereitgestellten Agenten zuzulassen.","moderatorlessWarning":"Auf einen Moderator beschränkt, den diese Task Force nicht hat: {{phases}}. Das erste Mitglied nach Sprechreihenfolge springt ein.","memberLimit":"Eine Task Force kann höchstens {{max}} Mitglieder haben","explicitPhasesNote":"Diese Task Force definiert ihre Phasen explizit ({{phases}}); sie laufen genau so. Framework und Rundenzahl oben ändern den Ablauf nicht mehr.","explicitPhasesEdit":"Phasen bearbeiten","addMemberTitle":"Teammitglied hinzufügen","selectAgent":"Agent","pickAgent":"Agent suchen oder auswählen…","displayName":"Anzeigename","displayNameHint":"z. B. Analyst","role":"Rolle","roleHint":"z. B. Prüfer","addMember":"Mitglied hinzufügen","nameRequired":"Ein Name für die Task Force ist erforderlich","saveSuccess":"Task-Force-Einstellungen gespeichert","saveError":"Einstellungen konnten nicht gespeichert werden","deleteAllSuccess":"Task Force und alle Agenten gelöscht","deleteError":"Task Force konnte nicht gelöscht werden","deleteSuccess":"Task Force gelöscht","duplicateMember":"Dieser Agent ist bereits Mitglied","loadError":"Einstellungen konnten nicht geladen werden","backToBoard":"Zurück zur Task Force","untitled":"Unbenannte Task Force","subtitle":"Einstellungen und Workforce Ihrer Task Force konfigurieren","general":"Allgemeine Einstellungen","generalDesc":"Grundkonfiguration Ihrer Task Force","boardName":"Name der Task Force","boardNameHint":"Namen der Task Force eingeben…","description":"Beschreibung","descriptionHint":"Worum geht es in dieser Task Force?","discussionStyle":"Kollaborationsmodell","maxRounds":"Max. Runden","moderator":"Moderator","noModerator":"Keiner","team":"Workforce","teamDesc":"Verwalten Sie die Agenten, die an Ihrer Task Force teilnehmen","roleOptional":"Optional","typeAgent":"Agent","typeModerator":"Moderator","removeMember":"Mitglied entfernen","minMembers":"Mindestens 2 Mitglieder erforderlich","protocol":"Protokoll & Ausfallsicherheit","protocolDesc":"Zeitlimits, Wiederholungen und Fehlerbehandlung für die Agentenkommunikation","agentTimeout":"Agenten-Zeitlimit (Sekunden)","maxRetries":"Max. Wiederholungen","onAgentFailure":"Bei Agentenfehler","failureSkip":"Überspringen — ohne diesen Agenten fortfahren","failureRetry":"Wiederholen — den Agenten erneut versuchen","failureAbort":"Abbrechen — die gesamte Diskussion stoppen","onUnavailable":"Bei nicht verfügbarem Mitglied","unavailableSkip":"Überspringen — ohne dieses Mitglied fortfahren","unavailableFail":"Fehlschlagen — Diskussion anhalten","maxTurns":"Max. Züge (0 = unbegrenzt)","hitl":"Menschliche Aufsicht","hitlDesc":"Festlegen, wann und wie Menschen KI-Entscheidungen prüfen","hitlGranularity":"Granularität der Genehmigung","granularityPhase":"Pro Phase — Prüfung nach jeder Diskussionsphase","granularityTask":"Pro Aufgabe — jede einzelne Aufgabe prüfen","hitlTimeout":"Genehmigungs-Zeitlimit","hitlTimeoutHint":"z. B. PT15M (15 Min.), PT1H (1 Std.)","hitlTimeoutHelp":"ISO-8601-Dauer. Leer lassen für kein Zeitlimit.","hitlTimeoutPolicy":"Bei Zeitüberschreitung","timeoutWait":"Unbegrenzt warten","timeoutAutoApprove":"Auto-Genehmigen","timeoutAutoReject":"Auto-Ablehnen","timeoutAbort":"Diskussion abbrechen","hitlRejection":"Bei Ablehnung","rejectionFail":"Fehlschlagen — die Aufgabe stoppen","rejectionRetry":"Wiederholen — den Agenten um Überarbeitung bitten","dynamic":"Dynamische Agenten","dynamicDesc":"Agenten dürfen während Diskussionen andere Agenten rekrutieren, erstellen oder an sie delegieren","dynamicEnable":"Dynamische Agenten aktivieren","dynamicEnableDesc":"Agenten dürfen andere Agenten rekrutieren, erstellen oder an sie delegieren","allowCreation":"Erstellung erlauben","allowCreationDesc":"Agenten können bei Bedarf neue Agenten starten","allowRecruitment":"Rekrutierung erlauben","allowRecruitmentDesc":"Agenten können bereits bereitgestellte Agenten rekrutieren","allowDelegation":"Delegierung erlauben","allowDelegationDesc":"Agenten können Teilaufgaben an andere Agenten delegieren","maxCreated":"Max. erstellt","maxRecruited":"Max. rekrutiert","maxDelegations":"Max. Delegierungen / Aufgabe","inheritModel":"Modell des übergeordneten Agenten erben","inheritModelDesc":"Erstellte Agenten verwenden das LLM-Modell des übergeordneten Agenten","lifecycle":"Lebenszyklus-Richtlinie","lifecycleEphemeral":"Kurzlebig — nach der Diskussion gelöscht","lifecycleKeep":"Bereitgestellt lassen — bleibt nach der Diskussion bestehen","lifecycleUndeploy":"Nur zurückziehen — gestoppt, aber nicht gelöscht","lifecycleAgentDecides":"Agent entscheidet — der Agent bestimmt sein eigenes Schicksal","tasks":"Vorkonfigurierte Aufgaben","tasksDesc":"Aufgaben vorab definieren, damit die PLAN-Phase übersprungen wird und Agenten sofort ausführen","taskSubject":"Betreff","taskSubjectHint":"Was ist zu tun?","taskDescription":"Beschreibung","taskDescHint":"Detaillierte Anweisungen für diese Aufgabe…","taskAssignRole":"Rolle zuweisen","taskPriority":"Priorität","removeTask":"Aufgabe entfernen","addTask":"Aufgabe hinzufügen","dangerZone":"Gefahrenbereich","dangerDesc":"Unwiderrufliche Aktionen — mit Vorsicht fortfahren","deleteBoard":"Task Force auflösen","deleteBoardDesc":"Entfernt diese Task-Force-Konfiguration. Die Agenten bleiben erhalten.","deleteBoardAll":"Task Force + alle Agenten auflösen","deleteBoardAllDesc":"Entfernt diese Task Force und alle Mitglieds-Agenten dauerhaft.","unsavedChanges":"Sie haben ungespeicherte Änderungen","templateSaved":"Als Vorlage gespeichert","saveAsTemplate":"Als Vorlage speichern","saving":"Wird gespeichert…","saveChanges":"Änderungen speichern","deleteAllTitle":"Task Force und alle Agenten auflösen?","deleteTitle":"Task Force auflösen?","deleteAllConfirm":"Dadurch werden diese Task Force und alle ihre Mitglieds-Agenten dauerhaft aufgelöst. Diese Aktion kann nicht rückgängig gemacht werden.","deleteConfirm":"Dadurch wird diese Task-Force-Konfiguration dauerhaft aufgelöst. Die Mitglieds-Agenten sind nicht betroffen.","title":"Einstellungen"},"nav":{"dashboard":"Übersicht","templates":"Vorlagen"},"advisor":{"avatarLabel":"Avatar von {{name}}"},"analytics":{"agentPerformance":"Agentenleistung","avgLength":"Ø Länge","avgLengthChars":"{{count}} Zeichen","chatWithAgent":"Mit Agent chatten","compareAgent":"Vergleichen mit …","contributionBreakdown":"Aufschlüsselung der Beiträge","contributions":"Beiträge","editAgent":"Agent bearbeiten","errorRate":"Fehlerrate","errors":"Fehler","sessions":"Sitzungen"},"back":"Zurück","boardList":"Task-Force-Liste","boardsLabel":"Task Forces","bottomNav":"Untere Navigation","card":{"advisorCount":"{{count}} Experten","delete":"Löschen","duplicate":"Duplizieren","duplicated":"Task Force dupliziert","history":"Verlauf","live":"Live","moreActions":"Weitere Aktionen","noMembers":"Keine Experten","openSettings":"Einstellungen öffnen","pin":"Anheften","settings":"Einstellungen","unpin":"Lösen","untitled":"Task Force ohne Titel"},"closeSidebar":"Seitenleiste schließen","comparison":{"avgResponse":"Ø Antwort","close":"Schließen","contributions":"Beiträge","errorRate":"Fehlerrate","evenlyMatched":"Beide Agenten sind gleichauf","leadsIn":"führt bei {{count}} von 5 Kennzahlen","sessions":"Sitzungen","title":"Agentenvergleich","totalContent":"Inhalt gesamt"},"dashboard":{"assembleTaskForce":"Task Force zusammenstellen","cancel":"Abbrechen","deleteConfirm":"Möchten Sie diese Task Force wirklich auflösen? Diese Aktion kann nicht rückgängig gemacht werden.","deletedCount":"{{count}} Task Forces gelöscht","deleteError":"Task Force konnte nicht gelöscht werden","deletePartialFail":"{{success}} gelöscht, {{fail}} fehlgeschlagen","deleteSelected":"Löschen","deleteSuccess":"Task Force gelöscht","deleteWorkforce":"Task Force auflösen","deselect":"Auswahl aufheben","duplicateError":"Task Force konnte nicht dupliziert werden","gridView":"Rasteransicht","listView":"Listenansicht","loadError":"Ihr Arbeitsbereich konnte nicht geladen werden. Bitte versuchen Sie es erneut.","pinned":"Angeheftet","retry":"Erneut versuchen","select":"Auswählen","selected":"{{count}} ausgewählt","selectItem":"Auswählen","subtitle":"Kollaborative Agentengruppen, die komplexe Herausforderungen lösen.","taskForcesLabel":"Aktive Task Forces","title":"Aktive Task Forces","viewToggle":"Ansichtsmodus"},"export":{"clipboard":"In die Zwischenablage kopieren","copied":"In die Zwischenablage kopiert","copyFailed":"Kopieren in die Zwischenablage fehlgeschlagen","downloadedJson":"Als JSON heruntergeladen","downloadedMd":"Als Markdown heruntergeladen","json":"Als JSON exportieren","markdown":"Als Markdown exportieren","title":"Diskussion exportieren"},"history":{"backToBoard":"Zurück zur Task Force","backToList":"Zurück zur Liste","cancel":"Abbrechen","close":"Schließen","confirmDelete":"Löschen","conversationList":"Konversationsliste","delete":"Konversation löschen","deleteDescription":"Möchten Sie diese Konversation wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.","deleteTitle":"Konversation löschen","emptyTranscript":"Noch keine Transkripteinträge","entryCount":"{{count}} Einträge","error":"Fehler","export":"Exportieren","finalAnswer":"Finale synthetisierte Antwort","loadError":"Konversation konnte nicht geladen werden","loadMore":"Mehr laden","noContent":"Kein Inhalt","noConversations":"Noch keine Konversationen","noResults":"Keine Konversationen entsprechen Ihrer Suche","notFound":"Konversation nicht gefunden","phase":"Phase","searchPlaceholder":"Konversationen suchen …","selectConversation":"Wählen Sie eine Konversation zur Ansicht","selectHint":"Wählen Sie eine Konversation aus der Liste","skipped":"{{name}} — übersprungen","synthesis":"Synthese","title":"Konversationsverlauf","transcript":"Konversationstranskript","tryDifferent":"Versuchen Sie einen anderen Suchbegriff","untitled":"Konversation ohne Titel","loadListError":"Konversationen konnten nicht geladen werden"},"insights":"Insights","memberCount":"{{count}} Mitglieder","newBoard":"Task Force zusammenstellen","onboarding":{"advisorSlots":"{{count}} Berater-Plätze","agentsReady":"{{count}} bereit","assembleNow":"Stellen Sie Ihre erste Task Force zusammen","customDesc":"Definieren Sie Ihr eigenes Team und eigene Regeln","customFromScratch":"Von Grund auf erstellen","deployAgent":"Agent bereitstellen","deployFirst":"Stellen Sie Ihren ersten KI-Agenten bereit, um loszulegen","deployFirst2":"Ersten bereitstellen →","deployFirstDesc":"Agenten sind die Experten, die Ihre Task Forces antreiben. Erstellen Sie einen, um zu beginnen.","getStarted":"Loslegen","howItWorks":"So funktioniert es","pickTemplate":"Wählen Sie eine Vorlage, um loszulegen","pickTemplateDesc":"Jede Vorlage legt Diskussionsstil, Rollen und Regeln fest — Sie weisen nur die Agenten zu.","step1Desc":"Erstellen Sie KI-Experten mit eigenen Fähigkeiten, Wissen und Persönlichkeit.","step1Title":"Agenten bereitstellen","step2Desc":"Wählen Sie eine Vorlage, weisen Sie Agenten Rollen zu und legen Sie einen Diskussionsstil fest.","step2Title":"Task Force zusammenstellen","step3Desc":"Stellen Sie eine Frage und beobachten Sie, wie Ihre Agenten debattieren, kritisieren und eine Antwort synthetisieren.","step3Title":"Fragen & beobachten","subtitle":"Stellen Sie spezialisierte KI-Agenten zu kollaborativen Teams zusammen, die gemeinsam debattieren, analysieren und komplexe Herausforderungen lösen.","welcome":"Willkommen bei der Belegschaft"},"openMenu":"Menü öffnen","shortcuts":{"closePanel":"Bereich / Dialog schließen","fromDashboard":"Vom Dashboard","newBoard":"Task Force zusammenstellen","showHelp":"Tastenkürzel anzeigen","title":"Tastenkürzel"},"sidebar":{"boards":"Board-Navigation"},"sidebarDrawer":"Seitenleisten-Navigation","skipToContent":"Zum Inhalt springen","tabHome":"Start","tabInsights":"Insights","tabThreads":"Threads","templates":{"deleteConfirm":"Diese Vorlage löschen?","deleted":"Vorlage gelöscht"},"templatesEmpty":"Speichern Sie eine Task Force als Vorlage, um sie später schnell wiederherzustellen.","themeDark":"Dunkel","themeLight":"Hell","themeSystem":"System","toggleSidebar":"Seitenleiste umschalten","toggleTheme":"Design umschalten","untitled":"Ohne Titel","useTemplate":"Verwenden","wizard":{"addAdvisor":"Berater hinzufügen","advisorCount":"{{count}} Berater","advisorName":"Beratername","agentError":"{{name}} konnte nicht erstellt werden: {{error}}","agentRequired":"Wählen Sie den vorhandenen Agenten aus, den dieser Berater verwenden soll.","alreadyCreated":"Erstellt","alreadyCreatedNote":"Bereits in einem früheren Versuch erstellt – wird unverändert weiterverwendet, daher lassen sich Prompt und LLM-Einstellungen hier nicht mehr ändern.","apiKey":"API-Schlüssel","apiKeyRequired":"{{provider}} benötigt einen API-Schlüssel. Fügen Sie ihn hier oder oben in den LLM-Voreinstellungen hinzu.","back":"Zurück","boardDescPlaceholder":"Beschreiben Sie kurz den Zweck dieses Beirats …","boardDescription":"Beschreibung (optional)","boardName":"Name der Belegschaft","boardNamePlaceholder":"z. B. Produktstrategie-Board","boardNameRequired":"Geben Sie dieser Belegschaft einen Namen.","cancel":"Abbrechen","collapse":"Einklappen","createNew":"Neuen Berater erstellen","createWorkforce":"Belegschaft erstellen","creatingAgent":"Wird erstellt …","creationFailed":"Erstellung fehlgeschlagen","creationFailedDesc":"Etwas ist schiefgelaufen. Sie können es erneut versuchen; es wird dort fortgesetzt, wo es unterbrochen wurde.","customTemplate":"Benutzerdefiniert","customTemplateDesc":"Beginnen Sie mit Ihrer eigenen Konfiguration von Grund auf","error":"Fehlgeschlagen","existing":"Vorhanden","expand":"Ausklappen","groupError":"Task Force konnte nicht zusammengestellt werden: {{error}}","llmDefaults":"LLM für neue Berater","llmDefaultsDesc":"Gilt für jeden hier erstellten Berater, sofern dieser unten keine eigenen Einstellungen setzt.","llmDefaultsKeyRequired":"Fügen Sie hier einen Schlüssel hinzu, der für alle Berater ohne eigenen Schlüssel gilt.","model":"Modell","modelPlaceholder":"z. B. claude-sonnet-5","nameRequired":"Geben Sie diesem Berater einen Namen.","new":"Neu","next":"Weiter","pending":"Wartet …","personality":"Persönlichkeit & Expertise","personalityHint":"Pflichtfeld – wird dem Agenten als System-Prompt übergeben.","personalityPlaceholder":"Beschreiben Sie Expertise, Perspektive und Kommunikationsstil dieses Beraters …","promptRequired":"Ein System-Prompt ist erforderlich. Beschreiben Sie die Expertise dieses Beraters und wie er antworten soll.","provider":"LLM-Anbieter","ready":"Bereit","removeAdvisor":"Berater entfernen","role":"Rolle","selectAgent":"Agent auswählen","selectProvider":"Anbieter auswählen …","settingUp":"Ihre Belegschaft wird eingerichtet …","settingUpBoard":"Task Force wird zusammengestellt …","settingUpDesc":"Berater werden erstellt und das Board konfiguriert. Das kann einen Moment dauern.","starterPrompt":"Sie sind {{name}}, die Stimme für {{role}} in diesem Team. Sprechen Sie aus dieser Perspektive: Geben Sie klare, gut begründete und umsetzbare Beiträge, benennen Sie Risiken und Zielkonflikte, die Sie sehen, und konzentrieren Sie sich auf das, was Sie am besten wissen.","starterPromptBare":"Sie sind ein Mitglied dieses Teams. Geben Sie klare, gut begründete und umsetzbare Beiträge, benennen Sie Risiken und Zielkonflikte, die Sie sehen, und bleiben Sie fokussiert.","starterPromptNoRole":"Sie sind {{name}}, ein Mitglied dieses Teams. Geben Sie klare, gut begründete und umsetzbare Beiträge, benennen Sie Risiken und Zielkonflikte, die Sie sehen, und bleiben Sie fokussiert.","starterPromptRoleOnly":"Sie sind die Stimme für {{role}} in diesem Team. Sprechen Sie aus dieser Perspektive: Geben Sie klare, gut begründete und umsetzbare Beiträge, benennen Sie Risiken und Zielkonflikte, die Sie sehen, und konzentrieren Sie sich auf das, was Sie am besten wissen.","stepIndicatorLabel":"Assistenten-Fortschritt","stepReview":"Überprüfen","stepTeam":"Team","stepTemplate":"Vorlage","success":"Task Force erfolgreich zusammengestellt!","team":"Team","templates":"Diskussionsvorlagen","tryAgain":"Erneut versuchen","unnamed":"Unbenannt","untitled":"Board ohne Titel","useDefault":"Voreinstellung der Belegschaft ({{value}})","useDefaultKey":"Voreingestellter Schlüssel der Belegschaft","useExisting":"Vorhandenen Agenten verwenden","useStarterPrompt":"Start-Prompt einfügen","yourAdvisors":"Ihre Berater"},"workforce":"Belegschaft"}'),Te=JSON.parse('{"title":"Plattform-Operator","subtitle":"Stellen Sie Fragen zu dieser EDDI-Installation — der Operator schlägt sie für Sie nach.","readOnlyChip":"Nur Lesezugriff","readWriteChip":"Lese- und Schreibzugriff","configError":"Die Operator-Konfiguration konnte nicht geladen werden","empty":{"title":"Der Plattform-Operator ist deaktiviert","description":"Aktivieren Sie ihn, um mit einem Agenten zu chatten, der Ihre Agenten, Workflows, Konversationen, Deployments und Logs inspiziert — und sie, mit Ihrer Freigabe jeder Änderung, für Sie bedient.","action":"Plattform-Operator aktivieren"},"discovery":{"title":"Ihr Plattform-Operator","description":"Ein Assistent, der dieses Deployment inspiziert und bedient. Standardmäßig aus; jede Änderung wartet auf Ihre Freigabe.","action":"Aktivieren"},"activation":{"title":"Plattform-Operator aktivieren","subtitle":"Wählen Sie das Modell für den Operator, prüfen Sie seine Anweisungen und starten Sie das Deployment.","modelStep":"Modell","reviewStep":"Prompt & Überprüfung","provider":"Anbieter","model":"Modell","baseUrl":"Basis-URL","apiKey":"API-Schlüssel des Modells","apiKeyHint":"Der Schlüssel Ihres LLM-Anbieters. Dies ist kein EDDI-Zugangsdatum.","apiKeyPlaceholder":"API-Schlüssel einfügen oder einen Vault-Schlüssel wählen","vaultDown":"Der Secrets-Vault ist nicht verfügbar, daher können Schlüssel derzeit nicht darin abgelegt werden. Ein hier eingegebener Schlüssel wird an das Backend weitergereicht, das ihn nach Möglichkeit im Vault speichert.","environment":"Umgebung","authMode":"Authentifizierung des Operators","authModeHint":"Der Operator ruft Ihre EDDI-Admin-API auf. Diese Einstellung legt fest, welche Zugangsdaten diese Aufrufe mitführen.","authNoneBlocked":"Für diese Installation ist die Authentifizierung aktiviert, daher würden nicht authentifizierte Tool-Aufrufe abgelehnt. Der Operator würde erfolgreich deployt und danach bei jeder Abfrage scheitern. Wählen Sie stattdessen „Ihre Identität“.","scope":{"label":"Berechtigung","default":"Standard","hint":"Was der Operator tun darf. Jede Änderung wartet weiterhin auf Ihre Genehmigung — siehe die Sicherheitsregeln unten.","readOnly":{"label":"Nur Lesezugriff","description":"Kann dieses Deployment einsehen und erklären. Kann nichts ändern."},"readWrite":{"label":"Lese- und Schreibzugriff","description":"Kann außerdem Agenten und Agentengruppen erstellen und ändern, bereitstellen, die Bereitstellung aufheben, einen außer Kontrolle geratenen Zeitplan deaktivieren und die Beschreibung eines Agenten bearbeiten — jeweils erst nach Ihrer Genehmigung."},"writeWarning":"Die Aktivierung prüft das Freigabe-Gate vor dem Abschluss gegen die gespeicherte Richtlinie. Ein echter, harmloser Testschreibvorgang läuft anschließend im Hintergrund — wird er jemals ohne Freigabepause ausgeführt, wird der Operator sofort entfernt."},"safetyPreamble":"Sicherheitsregeln (nicht bearbeitbar)","safetyPreambleHint":"Wird immer vorangestellt. Sie weist den Operator an, alles von seinen Tools Zurückgelieferte als nicht vertrauenswürdige Daten zu behandeln.","promptBody":"Anweisungen für den Operator","promptBodyHint":"Passen Sie an, wie sich der Operator vorstellt und wie er arbeitet.","tools":"Tools, die er erhält ({{toolCount}})","activate":"Aktivieren & deployen","callerIdentityNote":"EDDI setzt Ihr Token erst beim Aufruf ein. Es wird nie in der Konversation gespeichert und ausschließlich an diese Installation zurückgesendet.","rebuildWarning":"Beim Speichern wird ein neuer Operator-Agent erstellt und der aktuelle entfernt. Ihre bestehende Operator-Konversation wird nicht übernommen.","environmentHint":"Wo der Operator-Agent selbst läuft. Er kann weiterhin jede Umgebung auslesen."},"authMode":{"none":{"label":"Keine Zugangsdaten","description":"Tool-Aufrufe enthalten keinen Authorization-Header. Funktioniert nur, wenn für diese EDDI-Installation die Authentifizierung deaktiviert ist."},"caller-identity":{"label":"Ihre Identität","description":"Tool-Aufrufe laufen unter dem angemeldeten Benutzer, mit dessen Berechtigungen und Audit-Spur. Erforderlich, wenn die Authentifizierung aktiviert ist."}},"stage":{"idle":"","validating":"Es wird geprüft, ob diese Installation die benötigten Endpunkte bereitstellt …","provisioning":"Operator-Agent wird erstellt …","resolving-version":"Agent-Version wird ermittelt …","saving":"Konfiguration wird gespeichert …","verifying-gate":"Die Freigabesperre wird überprüft…","done":"Fertig","longWait1":"Der Operator-Agent wird erstellt und bereitgestellt — dies ist der längste Schritt…","longWait2":"Werkzeuge und Freigabe-Gate werden am neuen Agenten eingerichtet…","longWait3":"Läuft noch — die Bereitstellung kann auf einer ausgelasteten Plattform etwas dauern…"},"status":{"title":"Operator","provider":"Anbieter","environment":"Umgebung","authMode":"Authentifiziert als","version":"Version","checking":"Wird geprüft …","ready":"Deployt","inProgress":"Wird deployt …","error":"Deployment-Fehler","notFound":"Nicht deployt","errorHelp":"Der Operator-Agent konnte nicht deployt werden. Konfigurieren Sie ihn neu, um es erneut zu versuchen, oder prüfen Sie die Plattform-Logs auf die zugrunde liegende Ursache.","reconfigure":"Neu konfigurieren","deactivate":"Deaktivieren","reset":"Operator löschen","deactivateConfirmTitle":"Plattform-Operator deaktivieren?","deactivateConfirmBody":"Der Operator wird undeployt und antwortet nicht mehr. Seine Konfiguration bleibt erhalten, sodass Sie ihn später wieder aktivieren können.","resetConfirmTitle":"Plattform-Operator löschen?","resetConfirmBody":"Der Operator-Agent und alle für ihn erstellten Ressourcen werden dauerhaft gelöscht, ebenso seine gespeicherte Konfiguration. Dies kann nicht rückgängig gemacht werden.","connectionCheck":"Verbindung prüfen","gateChecking":"Sperre wird überprüft…","gateUnknown":"Sperre nicht geprüft","gateVerified":"Sperre verifiziert","gateNotVerified":"Sperre nicht verifiziert","gateUnverifiedHelp":"Die Freigabesperre konnte im Dokument dieses Agenten nicht verifiziert werden."},"chat":{"empty":"Fragen Sie nach Ihrer Installation. Der Operator schlägt nach und zeigt Ihnen jeden Aufruf, den er macht.","restoring":"Unterhaltung wird geöffnet …","placeholder":"Fragen Sie nach Agenten, Konversationen, Deployments, Logs …","pausedPlaceholder":"Wartet auf eine Entscheidung oben, bevor der Operator fortfahren kann…","readOnlyPlaceholder":"Diese Unterhaltung ist beendet — starten Sie eine neue, um fortzufahren.","send":"Senden","stop":"Stoppen","newConversation":"Neue Konversation beginnen","transcript":"Operator-Konversation","pauseCompactFallback":"Der Operator benötigt Ihre Zustimmung, bevor er fortfahren kann.","pauseCompactReview":"Zur Genehmigung prüfen →","resolving":"Der genehmigte Schritt läuft — das kann einen Moment dauern…"},"drawer":{"title":"Plattform-Operator","notActivated":"Aktivieren Sie ihn, um von überall mit Ihrem Deployment zu chatten.","titleAwaiting":"Plattform-Operator — eine Entscheidung wartet auf Sie","activate":"Plattform-Operator einrichten"},"approval":{"reconstructedEndpoint":"{{method}} {{path}} (rekonstruiert)","verified":"verifiziert","verifiedTitle":"Aus der tatsächlichen API-Aufruf-Konfiguration aufgelöst; wird unmittelbar vor der Ausführung erneut geprüft — ändert sich die Anfrage bis dahin, wird die Ausführung verweigert.","previewOnly":"Vorschau","previewOnlyTitle":"Dieser Aufruf führt vor der Ausführung zusätzliche Vorbereitungsschritte aus, daher ist dies eine bestmögliche Vorschau — die tatsächliche Anfrage kann abweichen und wird vor der Ausführung nicht erneut geprüft.","query":"Query","headers":"Headers","bodyTruncated":"Der Body wird zur Anzeige gekürzt dargestellt — die Freigabe deckt weiterhin die vollständige Anfrage ab.","diffHeading":"Änderungen gegenüber der gespeicherten Version {{version}}","diffLoading":"Gespeicherte Version zum Vergleich wird geladen …","diffFailed":"Die gespeicherte Version konnte nicht zum Vergleich geladen werden — das vollständige vorgeschlagene Dokument steht unten.","diffForbidden":"Der Vergleich mit der gespeicherten Version erfordert Bearbeitungsrechte — das vollständige vorgeschlagene Dokument steht unten.","diffRedactionNote":"Zugangsdaten sind in der vorgeschlagenen Version geschwärzt und erscheinen hier daher als Änderungen, auch wenn sie unverändert sind.","diffStored":"Gespeichert v{{version}}","diffProposed":"Vorgeschlagen","showFullRequest":"Vollständiges vorgeschlagenes Dokument anzeigen","hideFullRequest":"Vollständiges vorgeschlagenes Dokument ausblenden","expandBody":"Ausklappen","escalation":{"heading":"Diese Anfrage gewährt zusätzliche Berechtigungen","dynamicAgentCreation":"Diese Gruppe darf zur Laufzeit neue Agenten erstellen. Diese Agenten unterliegen selbst keiner Freigabepflicht.","dynamicAgentRecruitment":"Diese Gruppe darf weitere vorhandene Agenten in ihre Diskussionen einbeziehen.","autoApproveOnTimeout":"Freigaben für diese Ressource werden bei Zeitüberschreitung automatisch erteilt — ohne dass jemand mitschaut.","agentCreatedWithoutGate":"Dieser Agent wird ohne Genehmigungs-Gate erstellt. Jeder spätere Schreibvorgang wird unbeaufsichtigt ausgeführt.","agentCreatedWithBroadEndpoints":"Dieser Agent wird mit Schreibzugriff auf seine eigene API erstellt — nicht auf Lesevorgänge beschränkt.","agentCreatedWithExternalTools":"Dieser Agent wird mit sämtlichen Tools erstellt, die ein externer MCP-Server anbietet. Welche das sind, entscheidet dieser Server, und er kann sie später ändern.","unchecked":"Der Body war zu lang, um ihn auf Berechtigungserweiterungen zu prüfen — lesen Sie ihn vor der Freigabe vollständig.","inlineCredential":"Diese Anfrage enthält offenbar fest eingetragene Zugangsdaten statt einer ${vault:…}-Referenz. Ein eingebettetes Secret liegt im Klartext vor und kann nicht über den Vault rotiert werden — ablehnen und die Vault-Referenz verlangen."},"blockedSelfTarget":"Ein Agent darf seine eigene Definition nicht ändern, und diese Anfrage betrifft den eigenen Agenten des Operators ({{agentId}}). Solange sie enthalten ist, kann der gesamte Stapel nicht genehmigt werden — lehnen Sie ab und nehmen Sie diese Änderung auf der Seite dieses Agenten vor.","blockedSelfConversation":"Ein Agent darf keine Nachricht in die Unterhaltung senden, in der er selbst läuft, und diese Anfrage zielt genau darauf ({{agentId}}). Damit würde er seinen eigenen Text einfügen, als hätte ein Mensch ihn gesagt. Solange sie enthalten ist, kann der gesamte Stapel nicht genehmigt werden — bitte ablehnen.","blockedGateCarrying":"Diese Anfrage schreibt eine LLM-Konfiguration, die ihr eigenes Freigabe-Gate (toolApprovals) setzt und damit das prüfende Gate ersetzen würde. Solange sie enthalten ist, kann der gesamte Stapel nicht freigegeben werden — lehnen Sie ab und ändern Sie das Gate auf der Seite des Agenten.","blockedGateUnverifiable":"Diese Anfrage schreibt eine LLM-Konfiguration, deren Inhalt nicht vollständig lesbar ist — zu groß für die Anzeige oder kein gültiges JSON —, daher lässt sich nicht bestätigen, dass sie kein Freigabe-Gate überschreibt. Solange sie enthalten ist, kann der gesamte Stapel nicht freigegeben werden — lehnen Sie ab und nehmen Sie die Änderung auf der Seite des Agenten vor.","blockedGateUnpinned":"Diese Anfrage schreibt eine LLM-Konfiguration, ist aber nicht fixiert; was tatsächlich ausgeführt wird, kann daher vom hier Gezeigten abweichen und es lässt sich nicht bestätigen, dass kein Freigabe-Gate überschrieben wird. Solange sie enthalten ist, kann der gesamte Stapel nicht freigegeben werden — lehnen Sie ab und nehmen Sie die Änderung auf der Seite des Agenten vor.","blockedSelfStart":"Der Operator darf sich nicht selbst testen — eine Konversation mit dem eigenen Agenten ({{agentId}}) würde seine Ausgabe als Eingabe zurückführen. Genehmigen ist für den gesamten Stapel gesperrt, solange dieser Aufruf enthalten ist — ablehnen und einen anderen Agenten testen."},"starters":{"whatsDeployed":"Was ist derzeit deployt?","recentConversations":"Zeige mir die neuesten Konversationen","healthCheck":"Gibt es auf dieser Plattform Probleme?","diagnoseAgent":"Warum lässt sich einer meiner Agenten nicht deployen?"},"toast":{"activated":"Plattform-Operator aktiviert","deactivated":"Plattform-Operator deaktiviert","reset":"Plattform-Operator gelöscht","activatedButUnreachable":"Operator deployt, konnte Ihre Plattform aber nicht lesen","activatedGateVerified":"Platform Operator aktiviert — Freigabe-Gate verifiziert. Verbindungsprüfungen laufen im Hintergrund.","activatedChecking":"Platform Operator aktiviert. Verbindungsprüfungen laufen im Hintergrund.","writeProbeVerified":"Schreibzugriff verifiziert — ein echter, geschützter Schreibvorgang wurde zur Freigabe angehalten.","writeProbeFailed":"Das Freigabe-Gate hat nicht gehalten — der Operator wurde entfernt.","writeProbeInconclusive":"Der Live-Schreibtest war ergebnislos."},"canary":{"genericFailure":"Die Verbindungsprüfung war nicht erfolgreich.","passed":"Der Operator erreicht Ihre Plattform.","recheck":"Erneut prüfen","title":"Der Operator wurde deployt, konnte Ihre Plattform aber nicht lesen."},"paused":{"title":"Der Plattform-Operator ist pausiert","description":"Er ist weiterhin konfiguriert — beim Wiedereinschalten wird derselbe Agent erneut deployt. Es wurde nichts gelöscht.","action":"Wieder einschalten"},"managedAgentBadge":"Operator","managedAgentHint":"Wird vom Plattform-Operator-Bildschirm bereitgestellt und verwaltet. Bearbeiten oder Löschen an dieser Stelle macht diesen Bildschirm unbrauchbar.","decisionLog":{"approved":"Sie haben diese Anfrage genehmigt","rejected":"Sie haben diese Anfrage abgelehnt","rePaused":"Erneut pausiert — eine weitere Entscheidung ist nötig","noReply":"Der Durchlauf endete ohne Antwort","executed":"Ausgeführt: {{calls}}","partial_one":"Genehmigt — {{count}} Aufruf abgelehnt","partial_other":"Genehmigt — {{count}} Aufrufe abgelehnt"},"tabs":{"label":"Operator-Ansichten","chat":"Chat","history":"Verlauf"},"history":{"emptyTitle":"Keine früheren Unterhaltungen","emptyDescription":"Unterhaltungen mit dem Operator erscheinen hier, damit Sie sie später fortsetzen können.","noOpeningMessage":"(noch keine Nachricht)","stepCount_one":"{{count}} Schritt","stepCount_other":"{{count}} Schritte"}}'),Ee={addCadence:"Rhythmus hinzufügen",addTask:"Aufgabe hinzufügen",backToGroup:"Zurück zur Gruppe",backlogEmpty:"Noch keine Backlog-Aufgaben.",backlogTitle:"Backlog ({{count}} Aufgaben)",cadenceAdded:"Rhythmus hinzugefügt",cadenceDeleted:"Rhythmus gelöscht",cadenceRunning:"Eine durch den Rhythmus gestartete Diskussion läuft gerade.",cadencesEmpty:"Noch keine wiederkehrenden Rhythmen konfiguriert.",cadencesTitle:"Rhythmen ({{count}})",confirmDeleteCadenceDesc:"Dadurch werden die geplanten Läufe gestoppt. Bereits durchgeführte Diskussionen sind davon nicht betroffen.",confirmDeleteCadenceTitle:"Diesen Rhythmus löschen?",createdBy:"von {{who}}",cronLabel:"Cron-Ausdruck",cronPlaceholder:"z. B. 0 9 * * MON",discussions:"Diskussionen",failed:"Fehlgeschlagen",inputTemplatePlaceholder:"Prompt-Vorlage für jeden Lauf (optional — andernfalls wird eine einfache Backlog-Liste verwendet)",lastRun:"Letzter Lauf",maxCostLabel:"Max. Kosten/Lauf ($, optional)",maxCostPlaceholder:"Gruppenstandard",maxPerRunLabel:"Max. Aufgaben/Lauf",member:"Mitglied",navLabel:"Arbeitsbereich",never:"Nie",perMemberStats:"Zuverlässigkeit pro Mitglied",priority:"Priorität",subtitle:"Ein dauerhafter Backlog und wiederkehrende Rhythmen, die diese Gruppe unbeaufsichtigt nach Zeitplan ausführt.",taskAdded:"Aufgabe zum Backlog hinzugefügt",taskDescriptionPlaceholder:"Beschreibung (optional)",taskSubjectPlaceholder:"Aufgabentitel",tasksVerified:"Verifizierte Aufgaben",timeZoneLabel:"Zeitzone",title:"Arbeitsbereich für Standing Teams",totalCost:"Gesamtkosten",verified:"Verifiziert",maxCostInvalid:"Die maximalen Kosten pro Lauf müssen eine Zahl ab 0 sein.",cadenceSummary_one:"bis zu {{max}} Aufgabe/Lauf",cadenceSummary_other:"bis zu {{max}} Aufgaben/Lauf",inputTemplateTooLong:"Die Prompt-Vorlage ist auf {{max}} Zeichen begrenzt."},ye={title:"Neues Team"},Pe={title:"EDDI-Updates",description:"Prüfen, ob eine neuere EDDI-Version verfügbar ist. Es wird nichts gesendet, bevor Sie es anfordern.",installed:"Installiert",githubRelease:"GitHub-Release",dockerImage:"Docker-Image",unknownVersion:"Unbekannt",checkNow:"Jetzt prüfen",checking:"Wird geprüft…",autoCheck:"Bei jedem Seitenaufruf automatisch prüfen",autoCheckHint:"Führt pro Browser-Neuladen eine Prüfung durch und zeigt einen Hinweis, wenn eine neuere Version vorliegt.",privacyNote:"Die Prüfung kontaktiert ausschließlich api.github.com direkt aus Ihrem Browser. Es werden keine Daten der Installation übertragen.",neverChecked:"Noch keine Prüfung durchgeführt.",upToDate:"Sie verwenden die neueste Version ({{version}}).",updateAvailable:"EDDI {{version}} ist verfügbar",updateAvailableDetail:"Sie verwenden {{installed}}.",ahead:"Sie verwenden {{installed}} — neuer als die neueste Veröffentlichung ({{version}}).",unknownInstalled:"Die neueste Version ist {{version}}. Die installierte Version konnte nicht ermittelt werden, ein Vergleich ist daher nicht möglich.",errorRateLimited:"Das Anfragelimit von GitHub für nicht authentifizierte Zugriffe ist erreicht. Versuchen Sie es später erneut oder öffnen Sie die Releases-Seite.",errorBlockedByCsp:"Die Content-Security-Policy dieser Installation verhindert, dass der Browser api.github.com erreicht — die Prüfung kann daher nicht laufen. Nehmen Sie api.github.com in die connect-src-Direktive auf oder nutzen Sie den Releases-Link unten.",errorUnreachable:"api.github.com ist nicht erreichbar. Prüfen Sie Ihr Netzwerk oder einen ausgehenden Proxy.",errorFailed:"Die Update-Prüfung ist fehlgeschlagen. Öffnen Sie die Releases-Seite, um manuell nachzusehen.",publishedOn:"Veröffentlicht am {{date}}",whatsNew:"Neu in {{version}}",fullNotes:"Vollständige Release Notes auf GitHub",noNotes:"Zu dieser Version gibt es keine Notizen.",releaseNotes:"Release Notes",allReleases:"Alle Versionen",howToUpdate:"So aktualisieren Sie",howToUpdateCli:"Mit dem eddi-CLI (vom Installer angelegt):",howToUpdateManual:"Ohne CLI, im Installationsverzeichnis (standardmäßig ~/.eddi):",howToUpdateNote:"Passen Sie die -f-Flags an Ihr Setup an — mit Keycloak zusätzlich -f docker-compose.auth.yml."},Me={acrossGroups:"über {{count}} Task Forces",actions:"Aktionen",activeExperts:"Aktive Experten",activity:"Aktivität",agentLeaderboard:"Agenten-Rangliste",agentName:"Agent",allOutcomes:"Alle Ergebnisse",allStyles:"Alle Stile",avgDuration:"Ø Dauer",cancelCompare:"Abbrechen",clearAll:"Alle zurücksetzen",clearFilters:"Filter zurücksetzen",completionRate:"Abschlussquote",contributions:"Beiträge",covered:"Abgedeckt",createFirst:"Task Force zusammenstellen",daysAgo:"vor {{count}} T",emptyDescription:"Starten Sie eine Task-Force-Diskussion, um hier Analysen zu sehen.",emptyHaveGroups:"Sie haben {{count}} Task Forces, aber noch keine Diskussionen. Starten Sie eine Diskussion, um Insights zu sehen.",emptyTitle:"Noch keine Insights",errorDescription:"Einige Daten konnten nicht abgerufen werden. Bitte versuchen Sie es erneut.",errors:"Fehler",errorTitle:"Insights konnten nicht geladen werden",filteredOf:"{{filtered}} von insgesamt {{total}}",highConfidence:"Hohe Konfidenz",hoursAgo:"vor {{count}} Std.",justNow:"gerade eben",last30Days:"Letzte 30 Tage",minutesAgo:"vor {{count}} Min.",noAgents:"Noch keine Agentenaktivität.",noDiscussions:"Noch keine Diskussionen.",noMatchingDiscussions:"Keine Diskussionen entsprechen den aktiven Filtern.",noPhases:"Keine Phasendaten verfügbar.",noResults:"Keine passenden Diskussionen",noResultsHint:"Passen Sie Ihre Filter an oder setzen Sie sie zurück, um alle Daten zu sehen.",noSkills:"Keine Fähigkeiten registriert. Definieren Sie Fähigkeiten für Ihre Agenten, um die Abdeckung zu verfolgen.",noStyles:"Keine Stildaten verfügbar.",outcomeChart:"Ergebnisverteilung: {{total}} gesamt",outcomes:"Ergebnisse",participatedRecently:"an Diskussionen teilgenommen",perDiscussion:"pro Diskussion",phaseChart:"Phasenverteilung",phaseDistribution:"Phasenverteilung",pickSecondAgent:"Klicken Sie auf einen Agenten, um ihn mit {{name}} zu vergleichen",recentDiscussions:"Aktuelle Diskussionen",removeFilter:"Filter entfernen: {{label}}",retry:"Erneut versuchen",sessions:"Sitzungen",sessionsCompleted:"Sitzungen erfolgreich abgeschlossen",showingResults:"{{count}} von {{total}}",skillCoverage:"Fähigkeitsabdeckung",styleBreakdown:"Diskussionsstile",subtitle:"Letzte 30 Tage",title:"Insights",total:"Gesamt",totalDiscussions:"Diskussionen",totalSkills:"Fähigkeiten",uncoveredSkills:"{{count}} nicht abgedeckte Fähigkeiten"},Ie={activeRate:"Aktivitätsrate",activeRateDesc:"In den letzten 30 Tagen aktive Agenten",dormantAgents:"Inaktiv",dormantAgentsDesc:"Agenten, die seit über 30 Tagen nicht genutzt wurden",msgAtRisk:"Der Großteil Ihrer Belegschaft ist inaktiv — binden Sie sie wieder ein",msgHealthy:"{{rate}} % Ihrer digitalen Belegschaft waren in den letzten 30 Tagen aktiv",msgModerate:"Einige digitale Experten wurden längere Zeit nicht konsultiert",statusAtRisk:"Gefährdet",statusHealthy:"Gesund",statusModerate:"Mittel",taskForces:"Task Forces",taskForcesDesc:"Kollaborative Agentengruppen",title:"Wissensgesundheit",workforceSize:"Größe der Belegschaft",workforceSizeDesc:"Gesamtzahl bereitgestellter digitaler Experten"},Re={hint:"Wir merken uns Ihre Wahl und bringen Sie beim nächsten Mal automatisch dorthin.",manager:{description:"Erstellen, konfigurieren und deployen Sie Ihre KI-Agenten. Verwalten Sie Workflows, Ressourcen und Integrationen.",feature1:"Agenten erstellen & bereitstellen",feature2:"Workflows & Pipelines konfigurieren",feature3:"Ressourcen & Erweiterungen verwalten",title:"Manager"},subtitle:"Wählen Sie Ihren Arbeitsbereich, um loszulegen.",title:"Willkommen bei EDDI",workforce:{description:"Stellen Sie KI-Teams zusammen, die gemeinsam debattieren, analysieren und komplexe Herausforderungen lösen.",feature1:"Agenten-Task-Forces zusammenstellen",feature2:"Kollaborative Diskussionen führen",feature3:"Synthetisierte Antworten erhalten",title:"Belegschaft"}},Ce={assembleTaskForce:"Task Force zusammenstellen",assembleTaskForceDesc:"Bringen Sie Experten zusammen, um komplexe Herausforderungen zu lösen",chatWithAgent:"Mit Agent chatten",chatWithAgentDesc:"Führen Sie ein 1:1-Gespräch mit einem digitalen Experten",manageWorkforce:"Belegschaft verwalten",manageWorkforceDesc:"Digitale Experten konfigurieren und bereitstellen",title:"Schnellaktionen",viewInsights:"Insights ansehen",viewInsightsDesc:"Verfolgen Sie die Wissensabdeckung Ihrer Belegschaft"},Ne={addAgent:"Agent bereitstellen",count:"{{count}} Experten",ready:"Bereit",title:"Ihre digitale Belegschaft",unnamed:"Unbenannter Agent"},Be={production:"Produktion",test:"Test"},Ke={attachments:e,app:n,auth:t,nav:r,theme:i,language:s,pages:a,common:o,agents:l,agentDetail:u,wizard:c,setupWizard:d,packages:g,packageDetail:h,packageEditor:p,conversations:f,conversationDetail:m,chat:b,resources:k,editor:A,rulesEditor:S,apiCallsEditor:w,mcpcallsEditor:v,llmEditor:D,outputEditor:z,propertySetterEditor:T,dictionaryEditor:E,parserEditor:y,dictionaryPicker:P,coordinator:M,contentEditor:I,logs:R,secrets:C,audit:N,schedules:B,cascadeTrace:K,debugDrawer:L,costDashboard:F,memoryInspector:W,logViewer:V,promptViewer:G,promptPreview:x,studio:O,ragEditor:H,onboarding:Z,platform:U,stream:_,createOrWizard:j,groups:q,taskBoard:J,groupWizard:Q,groupTemplates:Y,memories:$,properties:X,triggers:ee,capabilities:ne,exportDialog:te,importDialog:re,syncPage:ie,sync:se,userConversations:ae,commandPalette:oe,channels:le,channelDetail:ue,hitl:ce,chatDrawer:de,dashboard:ge,errorBoundary:he,gdpr:pe,mockBanner:fe,orphans:me,quotas:be,secretPicker:ke,snippetEditor:Ae,status:Se,userData:we,variables:ve,workflowEditor:De,Workforce:ze,operator:Te,groupWorkspace:Ee,workforceWizard:ye,updates:Pe,analyticsPage:Me,knowledgeHealth:Ie,landing:Re,quickActions:Ce,workforce:Ne,environments:Be};export{ze as Workforce,u as agentDetail,l as agents,Me as analyticsPage,w as apiCallsEditor,n as app,e as attachments,N as audit,t as auth,ne as capabilities,K as cascadeTrace,ue as channelDetail,le as channels,b as chat,de as chatDrawer,oe as commandPalette,o as common,I as contentEditor,m as conversationDetail,f as conversations,M as coordinator,F as costDashboard,j as createOrWizard,ge as dashboard,L as debugDrawer,Ke as default,E as dictionaryEditor,P as dictionaryPicker,A as editor,Be as environments,he as errorBoundary,te as exportDialog,pe as gdpr,Y as groupTemplates,Q as groupWizard,Ee as groupWorkspace,q as groups,ce as hitl,re as importDialog,Ie as knowledgeHealth,Re as landing,s as language,D as llmEditor,V as logViewer,R as logs,v as mcpcallsEditor,$ as memories,W as memoryInspector,fe as mockBanner,r as nav,Z as onboarding,Te as operator,me as orphans,z as outputEditor,h as packageDetail,p as packageEditor,g as packages,a as pages,y as parserEditor,U as platform,x as promptPreview,G as promptViewer,X as properties,T as propertySetterEditor,Ce as quickActions,be as quotas,H as ragEditor,k as resources,S as rulesEditor,B as schedules,ke as secretPicker,C as secrets,d as setupWizard,Ae as snippetEditor,Se as status,_ as stream,O as studio,se as sync,ie as syncPage,J as taskBoard,i as theme,ee as triggers,Pe as updates,ae as userConversations,we as userData,ve as variables,c as wizard,De as workflowEditor,Ne as workforce,ye as workforceWizard}; diff --git a/src/main/resources/META-INF/resources/assets/de-YvphfqKX.js b/src/main/resources/META-INF/resources/assets/de-YvphfqKX.js deleted file mode 100644 index 1ec96a5ebb..0000000000 --- a/src/main/resources/META-INF/resources/assets/de-YvphfqKX.js +++ /dev/null @@ -1 +0,0 @@ -const e={title:"Anhänge",empty:"Diese Unterhaltung hat keine Anhänge.",loadError:"Anhänge konnten nicht geladen werden.",deleteAll:"Alle löschen",delete:"Anhang löschen",download:"Herunterladen",deleted:"Anhang gelöscht",deletedAll:"{{count}} Anhänge gelöscht",confirmDeleteTitle:"Anhang löschen?",confirmDeleteDesc:"Löscht diese Datei dauerhaft. Dies kann nicht rückgängig gemacht werden.",confirmDeleteAllTitle:"Alle Anhänge löschen?",confirmDeleteAllDesc:"Löscht dauerhaft alle Dateien dieser Unterhaltung. Dies kann nicht rückgängig gemacht werden."},n={title:"EDDI Manager",description:"Admin-Dashboard für die EDDI KI-Plattform"},t={login:"Anmelden",logout:"Abmelden",loading:"Authentifizierung…",sessionExpired:"Sitzung abgelaufen. Bitte erneut anmelden.",profile:"Profil",guest:"Gast",userMenu:"Benutzermenü"},r={dashboard:"Dashboard",agents:"Agenten",packages:"Workflows",conversations:"Gespräche",coordinator:"Koordinator",schedules:"Zeitpläne",logs:"Protokolle",orphans:"Verwaist",secrets:"Geheimnisse",audit:"Prüfprotokoll",quotas:"Kontingente",groups:"Gruppen",chat:"Chat",resources:"Ressourcen",sectionManagement:"Verwaltung",sectionDevelopment:"Entwicklung",sectionOperations:"Betrieb",mainNavigation:"Hauptnavigation",openMenu:"Navigationsmenü öffnen",sectionCore:"Kern",sectionBuild:"Erstellen & Testen",sectionMonitor:"Überwachung",sectionAdmin:"Verwaltung",studio:"Studio",gdpr:"Datenschutz",memories:"Nutzererinnerungen",properties:"Eigenschaften",triggers:"Auslöser",capabilities:"Fähigkeiten",sync:"Synchronisierung",updates:"Updates",channels:"Kanäle",approvals:"Genehmigungen",userConversations:"Nutzer-Konversationen",userData:"Nutzerdaten",variables:"Variablen",sectionExternal:"Extern",activeConversations:"Aktive Gespräche",openapi:"OpenAPI",docs:"Dokumentation",modeManager:"Manager",modeWorkforce:"Workforce",switchMode:"Arbeitsbereich wechseln",operator:"Plattform-Operator",workforce:"Belegschaft",monitoring:"Gesprächsüberwachung",analytics:"Auswertungen"},i={light:"Hell",dark:"Dunkel",system:"System"},s={label:"Sprache",en:"English",de:"Deutsch",fr:"Français",es:"Español",ar:"العربية",zh:"中文",th:"ไทย",ja:"日本語",ko:"한국어",pt:"Português",hi:"हिन्दी",switchFailed:"Diese Sprache konnte nicht geladen werden. Bitte versuchen Sie es erneut."},a={dashboard:{title:"Dashboard",subtitle:"Übersicht Ihrer EDDI-Agents und Gespräche",activeAgents:"Aktive Agents",totalWorkflows:"Workflows",totalResources:"Ressourcen",totalConversations:"Gespräche",quickActions:"Schnellzugriff",recentAgents:"Neueste Agents",noRecentAgents:"Noch keine Agents. Erstellen Sie Ihren ersten Agent!"},agents:{undeployPreviousVersionsHint:"Entfernt außerdem jede frühere Version dieses Agenten aus der Umgebung.",undeployPreviousVersionsLabel:"Diese und alle vorherigen Versionen zurückziehen",undeployEndConversationsHint:"Beendet sofort jede laufende Unterhaltung dieses Deployments. Dies kann nicht rückgängig gemacht werden.",undeployEndConversationsLabel:"Alle aktiven Unterhaltungen beenden",confirmUndeployDescription:"Version {{version}} wird aus {{environment}} zurückgezogen.",confirmUndeploy:"Agent zurückziehen?",title:"Agenten",subtitle:"Verwalten Sie Ihre KI-Agents"},packages:{title:"Workflows",subtitle:"Workflows und Erweiterungen konfigurieren"},conversations:{permanentDeleteSuccess:"Endgültig gelöscht",softDeleteSuccess:"Unterhaltung gelöscht",deletePermanentAction:"Endgültig löschen",deletePermanentLabel:"Endgültig löschen – entfernt auch Anhänge, den Speicher-Snapshot und den Genehmigungsverlauf. Dies kann nicht rückgängig gemacht werden.",confirmDeleteSoft:"Standardmäßig ist dies ein weiches Löschen – die Unterhaltung wird aus den Listen ausgeblendet, ihre gespeicherten Daten bleiben aber auf dem Server.",title:"Gespräche",subtitle:"Agent-Gespräche anzeigen und verwalten"},resources:{title:"Ressourcen",subtitle:"Verhaltensregeln, Wörterbücher, Ausgaben und mehr verwalten"},chat:{title:"Chat",subtitle:"Mit Ihren bereitgestellten Agents sprechen"},channels:{title:"Kanäle",subtitle:"Verbinden Sie Agenten und Gruppen mit Messaging-Plattformen wie Slack"},groups:{title:"Gruppen",subtitle:"Multi-Agenten-Diskussionsgruppen für strukturierte Debatten und Zusammenarbeit"},approvals:"Ausstehende Genehmigungen",approvalsSubtitle:"Prüfen und entscheiden Sie über Konversationen, die menschliche Eingabe erwarten"},o={add:"Hinzufügen",agent:"Agent",back:"Zurück",cardView:"Kartenansicht",clear:"Auswahl aufheben",confirm:"Bestätigen",description:"Beschreibung",group:"Gruppe",id:"ID",listView:"Listenansicht",modified:"Geändert",name:"Name",new:"Neu",version:"Version",viewMode:"Ansichtsmodus",loading:"Laden...",error:"Etwas ist schiefgelaufen",retry:"Erneut versuchen",save:"Speichern",cancel:"Abbrechen",delete:"Löschen",remove:"Entfernen",create:"Erstellen",edit:"Bearbeiten",search:"Suchen...",noResults:"Keine Ergebnisse gefunden",duplicate:"Duplizieren",close:"Schließen",skipToMain:"Zum Hauptinhalt springen",opensNewTab:"öffnet in neuem Tab",moreActions:"Weitere Aktionen",sortByName:"Nach Name sortieren",sortByVersion:"Nach Version sortieren",sortByModified:"Nach Änderungsdatum sortieren",apply:"Anwenden",copied:"Kopiert",copy:"Kopieren",saving:"Wird gespeichert…",showMore:"Show More",showLess:"Show Less",copyFailed:"Kopieren in die Zwischenablage fehlgeschlagen",loadError:"Daten konnten nicht geladen werden",actions:"Aktionen",view:"Ansehen",refresh:"Aktualisieren",previous:"Zurück",next:"Weiter",dismiss:"Verwerfen",refreshFailed:"Aktualisierung fehlgeschlagen — es werden die zuletzt geladenen Daten angezeigt.",settings:"Einstellungen",history:"Verlauf",copyId:"Agent-ID kopieren",off:"Aus",on:"Ein"},l={confirmDeleteDescription:"Diese Aktion kann nicht rückgängig gemacht werden. Der Agent und alle seine Daten werden dauerhaft entfernt.",confirmUndeploy:"Agent zurückziehen?",confirmUndeployDescription:"Version {{version}} wird aus {{environment}} zurückgezogen.",createSuccess:"Agent erfolgreich erstellt",deleteAgent:"Agent löschen",deployError:"Bereitstellung fehlgeschlagen",deploySuccess:"Agent erfolgreich bereitgestellt",noDescription:"Keine Beschreibung",selectAgent:"Agent auswählen",undeployEndConversationsHint:"Beendet sofort jede laufende Unterhaltung dieses Deployments. Dies kann nicht rückgängig gemacht werden.",undeployEndConversationsLabel:"Alle aktiven Unterhaltungen beenden",undeployError:"Zurückziehen fehlgeschlagen",undeployPreviousVersionsHint:"Entfernt außerdem jede frühere Version dieses Agenten aus der Umgebung.",undeployPreviousVersionsLabel:"Diese und alle vorherigen Versionen zurückziehen",undeploySuccess:"Agent zurückgezogen",unnamed:"Unbenannter Agent",deploy:"Bereitstellen",undeploy:"Deaktivieren",createAgent:"Agent erstellen",createTitle:"Neuen Agent erstellen",name:"Name",namePlaceholder:"Mein Agent",description:"Beschreibung",descriptionPlaceholder:"Beschreiben Sie, was dieser Agent tut...",empty:"Noch keine Agents. Erstellen Sie Ihren ersten Agent!",confirmDelete:"Möchten Sie diesen Agent wirklich löschen?",count_one:"{{count}} Agent",count_other:"{{count}} Agenten",export:"Exportieren",exporting:"Wird exportiert...",exportSuccess:"Agent erfolgreich exportiert",import:"Agent importieren",importing:"Wird importiert...",importSuccess:"Agent erfolgreich importiert",importError:"Agent konnte nicht importiert werden",chat:"Chat",deployAndChat:"Bereitstellen & Chatten",openExternalChat:"In neuem Tab öffnen",emptyDescription:"Erstellen Sie mit dem Wizard in wenigen Minuten einen fertig konfigurierten Agent.",liveIn:"Aktiv in {{environment}}",chatIn:"In {{environment}} chatten",openExternalChatIn:"{{environment}}-Chat in neuem Tab öffnen",deployToProduction:"In Produktion bereitstellen",undeployFromProduction:"Aus Produktion entfernen",deployFailedIn:"Bereitstellung in {{environment}} fehlgeschlagen"},u=JSON.parse(`{"a2aDescHint":"Wird in der Agent Card angezeigt — hilft anderen Agenten zu verstehen, was dieser Agent tut","a2aDescPlaceholder":"Was tut dieser Agent?","a2aDescription":"Agent-Beschreibung","a2aEnable":"A2A aktivieren","a2aEnabled":"Aktiviert","a2aEnabledDesc":"Diesen Agenten über das A2A-Protokoll für andere Agenten auffindbar machen. Andere EDDI-Instanzen können diesen Agenten als Tool finden und aufrufen.","a2aEndpoints":"Endpunkte","a2aNoSkills":"Keine Fähigkeiten — es wird eine Standard-Fähigkeit „chat“ verwendet","a2aSection":"Agent-to-Agent (A2A)","a2aSkillPlaceholder":"z. B. translation, code-review","a2aSkills":"A2A-Fähigkeiten","addAttribute":"Attribut hinzufügen","agentCardPreview":"Agent-Card-Vorschau","agentDid":"Agent-DID","attributeKey":"Schlüssel","attributeValue":"Wert","attributesLabel":"Attribute","attrs":"Attr.","autoSnapshotEnable":"Automatische Checkpoints aktivieren","capabilities":"Fähigkeiten","capabilitiesDesc":"Deklarierte Fähigkeiten für die A2A Agent Card und die Fähigkeiten-Registry. Andere Agenten entdecken diese bei der Auswahl von Delegationszielen.","capabilityPlaceholder":"Fähigkeitsnamen suchen oder eingeben…","comingSoon":"demnächst","defaultVisibility":"Standard-Sichtbarkeit","dreamConsolidation":"Traum-Konsolidierung","dreamDesc":"Hintergrund-LLM-Job, der Widersprüche auflöst, veraltete Einträge bereinigt und optional Interaktionen zusammenfasst.","enableMemoryTools":"Speicher-Tools aktivieren","enableSwd":"Strikte Schreibdisziplin aktivieren","forkingDisabledTooltip":"In einer zukünftigen Version verfügbar","forkingEnabled":"Sitzungs-Forking","forkingNote":"Der Endpunkt für Sitzungs-Forking (POST /v6/conversations/{{id}}/fork) ist noch nicht verfügbar.","guardrails":"Schreib-Leitplanken","identity":"Kryptografische Identität","keyExpired":"Abgelaufen","keyVersion":"Schlüssel v{{version}}","legacyKey":"Legacy-Schlüssel (v0)","maxCheckpoints":"Max. Checkpoints","maxCheckpointsHint":"pro Gespräch","maxEntriesPerUser":"Max. pro Nutzer","maxForks":"Max. Forks","maxForksHint":"pro Gespräch","maxRecallEntries":"Max. Abruf","memoryPolicy":"Speicher-Richtlinie","memoryPolicyDesc":"Die strikte Schreibdisziplin regelt, was geschieht, wenn Eigenschafts-Updates während eines Gesprächsschritts fehlschlagen. Wählen Sie, wie die Engine mit teilweise übernommenen Daten umgeht.","onCapReached":"Bei erreichter Obergrenze","onFailure":"Fehlerstrategie","onFailureDigest":"Digest — Änderungen zurückrollen, Zusammenfassung an das LLM melden","onFailureExclude":"Alle ausschließen — alle Eigenschafts-Updates stillschweigend verwerfen","onFailureKeep":"Alle behalten — Änderungen behalten und Warnung protokollieren","openWorkflow":"Öffnen","outdated":"veraltet","publicKey":"Öffentlicher Schlüssel","publicKeyHint":"Automatisch bei der ersten Signierung generiert","publicKeys":"Öffentliche Schlüssel","recallOrder":"Abrufreihenfolge","requirePeer":"Peer-Verifizierung erforderlich","requirePeerDesc":"Eingehende A2A-Aufgaben von Agenten ablehnen, die ihre Identität nicht nachweisen können","securityFlagConfirmBtn":"Trotzdem aktivieren","securityFlagConfirmDesc":"Kryptografische Signierung ist in dieser Version noch nicht verfügbar. Das Aktivieren dieses Flags führt dazu, dass das Backend Speichervorgänge mit HTTP 400 ablehnt. Möchten Sie wirklich fortfahren?","securityFlagConfirmTitle":"Sicherheits-Flag aktivieren?","securityFlagWarning":"Kryptografische Signierung ist in dieser Version noch nicht verfügbar. Das Backend lehnt Speichervorgänge mit diesen aktivierten Flags ab (HTTP 400).","securityFlags":"Signierung & Verifizierung","securityIdentity":"Sicherheit & Identität","sessionManagement":"Sitzungsverwaltung","sessionManagementDesc":"Speicher-Checkpoints erfassen den Gesprächszustand vor riskanten Operationen und ermöglichen ein sauberes Zurückrollen bei Fehlern.","signA2A":"Inter-Agenten-Nachrichten (A2A) signieren","signA2ADesc":"Ausgehende A2A-Nachrichten kryptografisch signieren, um Manipulationen zu verhindern","signMcp":"MCP-Aufrufe signieren","signMcpDesc":"Signaturen an MCP-Tool-Aufrufe anhängen für eine sichere Server-Verifizierung","skillAlreadyExists":"Diese Fähigkeit ist bereits deklariert","switchToLatest":"Auf neueste umstellen","toggleAttributes":"Attribute umschalten","triggerBeforeAction":"Vor Aktion","triggerBeforeTool":"Vor Tool-Ausführung","triggerOn":"Auslösen bei","updateToLatest":"Auf neueste Version aktualisieren","userMemory":"Nutzerspeicher","userMemoryDesc":"Persistenter Speicher pro Nutzer mit LLM-Tools (merken/abrufen/vergessen). Die grundlegende longTerm-Eigenschaftspersistenz funktioniert unabhängig von diesem Schalter immer.","viewingOldVersion":"Sie sehen Version {{current}}. Neueste ist Version {{latest}}.","workflowAdded":"Workflow hinzugefügt","workflowRemoved":"Workflow entfernt","workflowUpdated":"Workflow auf neueste Version aktualisiert","title":"Agent-Details","backToAgents":"Zurück zu Agents","packages":"Workflows","noWorkflows":"Noch keine Workflows hinzugefügt","addWorkflow":"Workflow hinzufügen","selectWorkflow":"Workflow zum Hinzufügen auswählen","rawConfig":"Rohkonfiguration","editName":"Name bearbeiten","editDescription":"Beschreibung bearbeiten","clickToEdit":"Klicken zum Bearbeiten","noDescription":"Keine Beschreibung","duplicate":"Duplizieren","duplicating":"Wird dupliziert...","duplicateSuccess":"Agent erfolgreich dupliziert","environments":"Umgebungen","envProduction":"Produktion","envTest":"Test","savingAgent":"Agent wird gespeichert...","savedAgent":"Agent erfolgreich gespeichert","saveError":"Agent konnte nicht gespeichert werden","deployToEnv":"In {{env}} bereitstellen","undeployFromEnv":"Aus {{env}} entfernen","openStudio":"Im Studio öffnen","maxKeyLength":"Max. Schlüssellänge","maxValueLength":"Max. Wertlänge","maxWritesPerTurn":"Max. Schreibvorgänge/Runde","dreamSchedule":"Zeitplan (cron)","dreamLlmProvider":"LLM-Anbieter","dreamLlmModel":"LLM-Modell","dreamMaxCost":"Max. Kosten/Lauf ($)","dreamPruneDays":"Bereinigung nach (Tage)","dreamBatchSize":"Stapelgröße","detectContradictions":"Widersprüche erkennen","summarizeInteractions":"Interaktionen zusammenfassen","confidenceLow":"Niedrig","confidenceMedium":"Mittel","confidenceHigh":"Hoch","visibilitySelf":"Eigene","visibilityGlobal":"Global","onCapEvict":"Älteste entfernen","onCapReject":"Ablehnen","recallMostRecent":"Neueste zuerst","recallMostRelevant":"Relevanteste zuerst","channels":"Kanalverbindungen","channelsDesc":"Verbinden Sie diesen Agenten mit Slack-Kanälen. Jede Kanalverbindung wird unabhängig mit eigenen Zugangsdaten konfiguriert und unterstützt Multi-Workspace-Setups.","noChannels":"Keine Kanäle konfiguriert","noChannelsDesc":"Fügen Sie einen Slack-Kanal hinzu, damit Benutzer mit diesem Agenten über Slack interagieren können.","addSlackChannel":"Slack-Kanal hinzufügen","slackChannel":"Slack-Kanal","removeChannel":"Kanal entfernen","removeChannelConfirm":"Diesen Slack-Kanalverbinder entfernen?","removeChannelDesc":"This action will permanently disconnect this channel.","channelId":"Kanal-ID","channelIdHint":"Kanal-IDs beginnen mit C gefolgt von alphanumerischen Großbuchstaben","botToken":"Bot-Token","botTokenPlaceholder":"xoxb-… oder \${vault:slack-bot-token}","botTokenHint":"Slack Bot User OAuth Token. Verwenden Sie eine Vault-Referenz für Sicherheit.","signingSecret":"Signaturgeheimnis","signingSecretPlaceholder":"Hex-String oder \${vault:slack-signing-secret}","signingSecretHint":"Von der Seite 'Basic Information' Ihrer Slack-App. Verwenden Sie eine Vault-Referenz für Sicherheit.","groupIdOptional":"Gruppen-ID (optional)","groupIdPlaceholder":"Multi-Agent Gruppen-Konfigurations-ID","groupIdHint":"Aktiviert \\"group: Frage\\" Multi-Agent-Diskussionen aus diesem Slack-Kanal.","slackSetupGuide":"Slack-Einrichtungsleitfaden","slackWebhookUrl":"Webhook-URL","slackWebhookCopied":"Webhook-URL kopiert","slackStep1":"Erstellen Sie eine Slack-App unter api.slack.com/apps und installieren Sie sie in Ihrem Workspace.","slackStep2":"Kopieren Sie das Bot-Token (xoxb-…) und das Signaturgeheimnis in den EDDI-Vault und konfigurieren Sie die Kanäle unten.","slackStep3":"Aktivieren Sie dann Event Subscriptions in Ihrer Slack-App, fügen Sie die Webhook-URL oben ein und abonnieren Sie:","slackSetupNote":"Wichtig: Konfigurieren Sie den Kanal unten, bevor Sie Event Subscriptions aktivieren — Slack sendet eine URL-Verifizierungsanfrage, die das Signaturgeheimnis in EDDI benötigt.","slackRequiredScopes":"Erforderliche Bot-Token-Berechtigungen","hitlConfig":"Human-in-the-Loop","hitlConfigDesc":"Wenn dieser Agent eine Konversation zur menschlichen Freigabe anhält, steuern diese Einstellungen die Wartezeit und was ohne rechtzeitige Entscheidung passiert.","hitlEnable":"Zeitlimits für menschliche Freigabe konfigurieren","hitlTimeoutPolicy":"Wenn keine rechtzeitige Entscheidung","hitlApprovalTimeout":"Freigabe-Zeitlimit (ISO-8601)","hitlTimeoutInvalid":"Eine endliche Richtlinie benötigt eine positive ISO-8601-Dauer, z. B. PT15M.","hitlTimeoutHint":"z. B. PT30S, PT15M, PT2H.","hitlPauseReason":"Freigabegrund (für Genehmiger sichtbar)","hitlPauseReasonPlaceholder":"z. B. Löschung erfordert Freigabe durch den Manager","toolApprovalsEnable":"Bestimmte Tool-Aufrufe zur Freigabe sperren","toolApprovalsDesc":"Pausiert, wenn das Modell ein passendes Tool aufruft, bevor es ausgeführt wird. Eine leere Liste \\"Freigabe erforderlich\\" deaktiviert die Tool-Sperrung.","toolRequireApproval":"Freigabe erforderlich (Glob-Muster, eines pro Zeile)","toolPatternHint":"'*' ist das einzige Platzhalterzeichen. Optionales Quellpräfix:","toolExempt":"Ausgenommen (immer erlaubt, eines pro Zeile)","toolMaxPauses":"Max. Pausen / Zug (1–10)","toolMaxAuto":"Max. automatische Freigaben / Zug (0–10)","toolOnNoProgress":"Bei erneuter Pause ohne Fortschritt","toolTimeoutPolicy":"Zeitlimit-Richtlinie für Tool-Pause","toolTimeoutInherit":"Vom Agenten erben","toolAutoApproveDemotion":"AUTO_APPROVE auf Agentenebene gilt nicht für Tool-Freigaben — Tool-Pausen warten unbegrenzt, sofern du oben keine Zeitlimit-Richtlinie für Tool-Pausen festlegst.","toolPauseReason":"Grund des Freigebers ({toolNames} erlaubt)","toolPauseReasonPlaceholder":"z. B. Freigabe erforderlich für {toolNames}","toolPendingMessage":"Endbenutzer-Nachricht während der Pause ({toolNames} erlaubt)","toolPendingMessagePlaceholder":"z. B. Warte auf menschliche Freigabe für {toolNames}…","toolInGroupTurns":"Innerhalb eines Gruppenzugs wird der gesperrte Tool-Aufruf eines Mitglieds automatisch abgelehnt (REJECT)."}`),c={title:"Agent-Assistent"},d={baseUrlHintCloud:"Nur erforderlich bei Verwendung eines Proxys, einer privaten Bereitstellung oder eines Azure-OpenAI-Endpunkts",baseUrlHintLocal:"Erforderlich — die URL, unter der Ihr lokaler Modellserver läuft",modelHint:"Geben Sie einen beliebigen von Ihrem Anbieter unterstützten Modellnamen ein oder wählen Sie einen aus den Vorschlägen",modelPlaceholder:"z. B. {{model}} (oder jedes von Ihrem Anbieter unterstützte Modell)",title:"Agent-Assistent",subtitle:"Erstellen Sie einen vollständig konfigurierten Agent in wenigen Minuten",backToAgents:"Zurück zu Agents",next:"Weiter",back:"Zurück",createOnly:"Nur erstellen",createAndDeploy:"Erstellen & Bereitstellen",typeTitle:"Welche Art von Agent?",typeDesc:"Wählen Sie den gewünschten Agent-Typ",standardAgent:"Standard-Agent",apiAgent:"API-Agent",standardDesc:"KI-gestützte Konversation mit optionalen Tools, Quick Replies und Sentimentanalyse",apiDesc:"Importieren Sie eine OpenAPI/Swagger-Spezifikation zur automatischen Generierung eines API-Agents",infoTitle:"Agent-Identität",infoDesc:"Geben Sie Ihrem Agent einen Namen und eine Persönlichkeit",agentName:"Agent-Name",namePlaceholder:"z.B. Kundensupport-Bot",systemPrompt:"Systemprompt",promptPlaceholder:"Du bist ein hilfreicher KI-Assistent, der...",promptHint:"Diese Anweisung bestimmt, wie sich Ihr Agent verhält und antwortet.",llmTitle:"LLM-Konfiguration",llmDesc:"Wählen Sie das KI-Modell, das Ihren Agent antreibt",provider:"Anbieter",model:"Modell",apiKey:"API-Schlüssel",baseUrl:"Basis-URL",baseUrlPlaceholder:"Benutzerdefinierte Endpoint-URL",optional:"optional",apiSpecTitle:"OpenAPI-Spezifikation",apiSpecDesc:"Geben Sie die OpenAPI/Swagger-Spezifikation Ihrer API an",specByUrl:"URL",specByFile:"Datei",specByPaste:"Einfügen",fetch:"Abrufen",specFetched:"Spezifikation geladen!",specFetchError:"Spezifikation konnte nicht abgerufen werden",dropFile:"OpenAPI-Datei hier ablegen",dropHint:"JSON- oder YAML-Format",browse:"Dateien durchsuchen",pasteSpec:"OpenAPI/Swagger JSON oder YAML hier einfügen...",specLoaded:"Datei geladen: {{name}}",specReady:"Spezifikation geladen ({{chars}} Zeichen)",apiBaseUrlLabel:"API-Basis-URL",apiAuthLabel:"API-Auth-Header",endpointFilter:"Endpoint-Filter",endpointFilterPlaceholder:"Kommagetrennt: GET /users, POST /orders",featuresTitle:"Funktionen & Optionen",featuresDesc:"Passen Sie die Fähigkeiten Ihres Agents an",introMessage:"Begrüßungsnachricht",introMessageDesc:"Nachricht, die zu Beginn einer Konversation angezeigt wird",quickReplies:"Schnellantworten",quickRepliesDesc:"LLM generiert anklickbare Antwortvorschläge",sentiment:"Sentimentanalyse",sentimentDesc:"Stimmung, Absicht und Dringlichkeit des Nutzers in Echtzeit erkennen",structuredOutput:"Strukturierte Ausgabe",structuredOutputDesc:"LLM antwortet mit einem JSON-Objekt statt mit reinem Text",structuredOutputInfo:"Wenn aktiviert, antwortet das LLM mit einem JSON-Objekt mit strukturierten Feldern. Ein JSON-Schema wird dem Systemprompt angehängt und das Modell wird in den JSON-Antwortmodus versetzt.",builtInTools:"Integrierte Tools",builtInToolsDesc:"Integrierte Tool-Bibliothek von EDDI aktivieren (Rechner, Datum/Zeit usw.)",toolsWhitelist:"Whitelist (leer = alle Tools)",mcpServers:"MCP-Server",mcpServersDesc:"Model Context Protocol Server für externe Tools verbinden",autoDeploy:"Automatisch bereitstellen",autoDeployDesc:"Agent sofort nach Erstellung bereitstellen",environment:"Umgebung",envProduction:"Produktion",envTest:"Test",reviewTitle:"Überprüfen & Erstellen",reviewDesc:"Überprüfen Sie Ihre Konfiguration vor dem Erstellen",reviewType:"Typ",reviewName:"Name",reviewPrompt:"Systemprompt",reviewProvider:"Anbieter",reviewModel:"Modell",reviewSpec:"OpenAPI-Spezifikation",reviewIntro:"Begrüßungsnachricht",reviewDeploy:"Bereitstellen",success:"Agent erfolgreich erstellt!",agentCreated:"Agent erstellt!",deployed:"Bereitgestellt",endpointsParsed:"{{count}} API-Endpoints analysiert",viewAgent:"Agent anzeigen",createAnother:"Weiteren erstellen",allTools:"Alle Werkzeuge",selectSpecific:"Manuell auswählen",allToolsInfo:"Alle {{count}} integrierten Werkzeuge stehen Ihrem Agenten zur Verfügung. Wählen Sie „Manuell auswählen“, um die Auswahl einzuschränken.",availableTools:"Verfügbare Werkzeuge",toolCount:"{{selected}} von {{total}} ausgewählt",specTooLarge:"Diese Spezifikation ist zu groß, um hier geladen zu werden",specUrlInvalid:"Das ist keine gültige URL",specUrlScheme:"Nur http://- und https://-URLs werden unterstützt"},g={confirmDeleteDescription:"Diese Aktion kann nicht rückgängig gemacht werden. Der Workflow und alle seine Daten werden dauerhaft entfernt.",createSuccess:"Workflow erfolgreich erstellt",unnamed:"Unbenannter Workflow",createWorkflow:"Workflow erstellen",createTitle:"Neuen Workflow erstellen",name:"Name",namePlaceholder:"Mein Workflow",description:"Beschreibung",descriptionPlaceholder:"Beschreiben Sie, was dieser Workflow tut...",noDescription:"Keine Beschreibung",empty:"Noch keine Workflows. Erstellen Sie Ihren ersten Workflow!",confirmDelete:"Möchten Sie diesen Workflow wirklich löschen?",count_one:"{{count}} Workflow",count_other:"{{count}} Workflows",emptyDescription:"Workflows definieren die Verarbeitungspipeline für Ihre Agents."},h={backToAgent:"Zurück zum Agenten",title:"Workflow-Details",backToWorkflows:"Zurück zu Workflows",extensions:"Erweiterungen",noExtensions:"Keine Erweiterungen in diesem Workflow",rawConfig:"Rohkonfiguration"},p={chooseConfig:"Konfiguration wählen",chooseConfigHint:"Erstellen Sie eine neue Konfiguration oder verknüpfen Sie eine bestehende",configCreated:"Konfiguration erstellt — zur Pipeline hinzugefügt",createNewConfig:"Neue Konfiguration erstellen",createNewConfigHint:"Erstellt eine leere Konfiguration, die Sie später bearbeiten können",noExistingConfigs:"Keine bestehenden Konfigurationen gefunden — erstellen Sie oben eine neue",orExisting:"oder bestehende verwenden",updateToLatest:"Auf neueste Version aktualisieren",title:"Workflow-Editor",pipeline:"Extension Pipeline",addHint:"Erweiterungen hinzufügen, um Ihre Pipeline aufzubauen",addHintDialog:"Erweiterungstyp zum Hinzufügen auswählen",reorder:"Erweiterung verschieben",saved:"Workflow erfolgreich gespeichert",saveError:"Speichern fehlgeschlagen",noTasks:"Keine Aufgaben in diesem Workflow",addTask:"Aufgabe hinzufügen"},f={confirmDeleteSoft:"Standardmäßig ist dies ein weiches Löschen – die Unterhaltung wird aus den Listen ausgeblendet, ihre gespeicherten Daten bleiben aber auf dem Server.",deletePermanentLabel:"Endgültig löschen – entfernt auch Anhänge, den Speicher-Snapshot und den Genehmigungsverlauf. Dies kann nicht rückgängig gemacht werden.",monitorSubtitle:"Laufende Gespräche pro Agent überwachen und in Massen verwalten.",noActiveDesc:"Diese Agentenversion hat derzeit keine laufenden Gespräche.",purgeDesc:"BEENDETE Gespräche dauerhaft löschen, deren letzte Aktivität älter als die angegebene Anzahl von Tagen ist.",selectAgentPromptDesc:"Aktive Gespräche werden pro Agent und Version aufgelistet.",searchPlaceholder:"Nach Gesprächs-ID suchen...",id:"Gespräch",agent:"Agent",state:"Status",lastActivity:"Letzte Aktivität",actions:"Aktionen",empty:"Noch keine Gespräche. Stellen Sie einen Agent bereit und beginnen Sie zu chatten!",confirmDelete:"Möchten Sie dieses Gespräch wirklich löschen?",count_one:"{{count}} Gespräch",count_other:"{{count}} Gespräche",emptyDescription:"Deployen Sie einen Agent und starten Sie eine Konversation über die Chat-Seite.",filterAll:"Alle",stateActive:"Aktiv",stateInProgress:"In Bearbeitung",stateEnded:"Beendet",stateInterrupted:"Unterbrochen",permanentDeleteSuccess:"Dauerhaft gelöscht",softDeleteSuccess:"Gespräch gelöscht",monitorActive:"Aktive überwachen",filterByAgent:"Nach Agent filtern",filterByVersion:"Nach Agent-Version filtern",allVersions:"Alle Versionen",version:"v{{version}}",showingRange:"{{from}}–{{to}} werden angezeigt",deleteConversation:"Gespräch löschen",steps:"Schritte",perPage:"Pro Seite",pageNumber:"Seite {{page}}",deletePermanentAction:"Dauerhaft löschen",step:"Schritt",monitorTitle:"Aktive Gespräche",backToList:"Zurück zu Gesprächen",selectAgentToMonitor:"Agent auswählen",selectedCount:"{{count}} ausgewählt",endSelected:"Ausgewählte beenden",selectAgentPrompt:"Agent zum Überwachen auswählen",noActive:"Keine aktiven Gespräche",selectAll:"Alle auswählen",selectOne:"{{id}} auswählen",purgeTitle:"Beendete Gespräche bereinigen",olderThanDays:"Älter als (Tage)",purgeAction:"Bereinigen",confirmEndTitle:"Ausgewählte Gespräche beenden?",confirmPurgeTitle:"Beendete Gespräche bereinigen?",confirmEndDesc_one:"{{count}} Gespräch werden auf BEENDET gesetzt. Pausierte Gespräche (Warten auf Mensch) werden sicher über den freigabebewussten Pfad beendet.",confirmEndDesc_other:"{{count}} Gespräche werden auf BEENDET gesetzt. Pausierte Gespräche (Warten auf Mensch) werden sicher über den freigabebewussten Pfad beendet.",confirmPurgeDesc_one:"Dies löscht dauerhaft BEENDETE Gespräche, die älter als {{days}} Tag sind, einschließlich ihres gespeicherten Speichers und ihrer Anhänge. Dies kann nicht rückgängig gemacht werden.",confirmPurgeDesc_other:"Dies löscht dauerhaft BEENDETE Gespräche, die älter als {{days}} Tage sind, einschließlich ihres gespeicherten Speichers und ihrer Anhänge. Dies kann nicht rückgängig gemacht werden.",pausedNote_one:"{{count}} der ausgewählten Gespräche wartet auf einen Menschen; die ausstehende Freigabe wird abgebrochen.",pausedNote_other:"{{count}} der ausgewählten Gespräche warten auf einen Menschen; ihre ausstehende Freigabe wird abgebrochen.",endSuccess_one:"{{count}} Gespräch beendet",endSuccess_other:"{{count}} Gespräche beendet",purgeSuccess_one:"{{count}} beendete Gespräch bereinigt",purgeSuccess_other:"{{count}} beendete Gespräche bereinigt"},m={backToConversations:"Zurück zu Gesprächen",chatLog:"Chat-Protokoll",noSteps:"Keine Gesprächsschritte aufgezeichnet",properties:"Gesprächseigenschaften",rawData:"Rohdaten anzeigen",step:"Schritt",steps:"Schritte",title:"Gespräch",continueChat:"Im Chat fortsetzen",searchTranscript:"Gesprächsverlauf durchsuchen…",exportMd:"Als Markdown exportieren",toolSummary:"Werkzeugnutzung",totalCost:"Gesamtkosten",cacheHitRate:"Cache-Trefferquote"},b={hide:"Ausblenden",secretModeOff:"Geheimmodus umschalten",secretModeOn:"Geheimmodus EIN",secretPlaceholder:"Geheimen Wert eingeben…",show:"Anzeigen",selectAgent:"Agent auswählen...",noAgents:"Keine bereitgestellten Agents verfügbar. Stellen Sie zuerst einen Agent bereit.",placeholder:"Nachricht eingeben...",send:"Senden",newConversation:"Neues Gespräch",endConversation:"Gespräch beenden",streaming:"Streaming",thinking:"Denkt nach...",usingTools:"Werkzeuge werden verwendet",connectionError:"Verbindungsfehler. Bitte erneut versuchen.",empty:"Wählen Sie einen Agent und beginnen Sie zu chatten!",history:"Verlauf",undo:"Letzte Nachricht rückgängig",redo:"Nachricht wiederherstellen",continueConversation:"Fortsetzen",noHistory:"Noch kein Gesprächsverlauf.",attach:"Datei anhängen",attachUploading:"Wird hochgeladen...",attachSuccess:"Datei angehängt",attachError:"Datei konnte nicht hochgeladen werden",attachLimit:"Sie können bis zu {{max}} Dateien pro Nachricht anhängen.",attachTooLargeToForward:"{{name}} wurde gespeichert, ist aber zu groß, um direkt an das Modell gesendet zu werden.",attachNotForwarded:"Nicht an das Modell gesendet",dropToAttach:"Dateien hier ablegen, um sie anzuhängen",stepFailedFallback:"Dieser Schritt ist fehlgeschlagen. Das Server-Log enthält den vollständigen Fehler.",retry:"Letzten Schritt wiederholen",retrySuccess:"Schritt erneut ausgeführt",retryError:"Wiederholung fehlgeschlagen",showActivity:"Aktivität anzeigen",hideActivity:"Aktivität ausblenden",scrollToBottom:"Nach unten scrollen",copyMessage:"Nachricht kopieren",copied:"Kopiert!",activity:{processing:"Wird verarbeitet…",steps:"Schritte",toolCalls:"Werkzeugaufrufe",toolCall:"Werkzeugaufruf",toolResult:"Ergebnis",error:"Fehler aufgetreten",toolCallsCount_one:"{{count}} Tool-Aufruf",stepsCount:"{{count}} Schritte",stepsCount_one:"{{count}} Schritt",stepsCount_other:"{{count}} Schritte",toolCallsCount_other:"{{count}} Tool-Aufrufe",toolCallsCount:"{{count}} Tool-Aufrufe",usingTool:"Verwendet {{tool}} …"},context:{conversationId:"Gesprächs-ID",agentVersion:"Agentenversion",startTime:"Gestartet",stepCount:"Schritte",show:"Gesprächsinfo anzeigen",hide:"Gesprächsinfo ausblenden"},agentTyping:"Agent tippt",copy:"Kopieren",emptyConversation:"Diese Konversation enthält noch keine Nachrichten.",loadConversationFailed:"Konversation konnte nicht geladen werden: {{error}}",multilineHint:"Enter zum Senden · Shift+Enter für eine neue Zeile",multilineHintCtrlEnter:"Strg+Enter zum Senden · Enter für eine neue Zeile",toolRefused:"Abgelehnt"},k={backToWorkflow:"Zurück zum Workflow",confirmDeleteDescription:"Diese Aktion kann nicht rückgängig gemacht werden. {{type}} wird dauerhaft gelöscht.",createSuccess:"{{type}} erfolgreich erstellt",snippetNameInvalid:"Nur Kleinbuchstaben (a-z), Ziffern (0-9) und Unterstriche (_) sind erlaubt.",snippetNameRequired:"Snippet-Name ist erforderlich.",unnamed:"Unbenannte Ressource",noDescription:"Keine Beschreibung",backToResources:"Zurück zu Ressourcen",backToList:"Zurück zu {{type}}",unknownType:"Unbekannter Ressourcentyp",rawConfig:"Rohkonfiguration",rawConfigHint:"JSON-Konfiguration für diese Ressource",create:"{{type}} erstellen",createTitle:"{{type}} erstellen",createDescription:"Erstellen Sie eine leere {{type}}-Konfiguration. Sie können sie nach dem Erstellen bearbeiten.",confirmDelete:"Möchten Sie diese(n) {{type}} wirklich löschen?",empty:"Noch keine {{type}}-Ressourcen.",itemCount_one:"{{count}} Element",itemCount_other:"{{count}} Elemente",count_one:"{{count}} Ressource",count_other:"{{count}} Ressourcen",types:{rules:{name:"Verhaltensregeln",description:"Gesprächsflussregeln und Entscheidungslogik definieren"},apicalls:{name:"HTTP-Aufrufe",description:"Externe API-Integrationen und Webhooks konfigurieren"},output:{name:"Ausgabesets",description:"Agent-Antwortvorlagen und Ausgabevarianten verwalten"},dictionary:{name:"Wörterbücher",description:"Wort- und Phrasenerkennungsmuster definieren"},llm:{name:"LLM",description:"KI-Modelle, Prompts und Tool-Bindungen konfigurieren"},propertysetter:{name:"Eigenschafts-Setter",description:"Gesprächseigenschaften setzen und Slot-Filling verwalten"},mcpcalls:{name:"MCP-Aufrufe",description:"MCP-Server-Verbindungen und deterministische Tool-Aufrufe konfigurieren"},rag:{name:"Wissensbasen",description:"RAG-Wissensbasen für die Dokumentensuche konfigurieren"},snippets:{name:"Prompt-Snippets",description:"Wiederverwendbare Systemprompt-Bausteine fuer die Vorlagenkomposition"},parser:{name:"Parser",description:"NLP-Eingabeverarbeitung und Wörterbuch-Konfiguration"}},emptyDescription:"Erstellen Sie Ihre erste {{type}}, um sie in Workflows zu verwenden.",descriptionPlaceholder:"Beschreiben Sie diese {{type}}-Konfiguration …"},A={compare:"Vergleichen",compareVersions:"Versionen vergleichen",deployFailed:"Bereitstellung fehlgeschlagen",deploying:"Wird bereitgestellt…",diffHint:"Hinzufügungen in Grün, Löschungen in Rot. Links = älter, rechts = neuer.",discardAndLeave:"Verwerfen & Verlassen",discardMessage:"Möchten Sie wirklich alle ungespeicherten Änderungen verwerfen? Diese Aktion kann nicht rückgängig gemacht werden.",discardTitle:"Änderungen verwerfen?",newerVersion:"Neuer",olderVersion:"Älter",saveAndTest:"Speichern & Testen",swapVersions:"Versionen tauschen",unsavedMessage:"Sie haben ungespeicherte Änderungen, die verloren gehen. Möchten Sie wirklich fortfahren?",unsavedTitle:"Ungespeicherte Änderungen",formTab:"Formular",jsonTab:"JSON",save:"Speichern",discard:"Verwerfen",saving:"Speichern...",saved:"Erfolgreich gespeichert",saveError:"Speichern fehlgeschlagen",dirty:"Ungespeicherte Änderungen",version:"Version",versionPicker:"Version auswählen",readOnly:"Schreibgeschützt",formPlaceholder:"Visueller Editor kommt bald. Verwenden Sie den JSON-Tab zum Bearbeiten.",jsonSchema:"Schema-Validierung aktiv",cascadeMode:"Änderungen werden an übergeordneten Workflow und Agent weitergegeben",updateUsageHint:"Ausgewählte Workflows und Agents auf die neue Version aktualisieren?",updateUsage:"Auswahl aktualisieren",skipUpdate:"Überspringen",cascading:"Aktualisiere...",cascadeSuccess:"Kaskaden-Update abgeschlossen",invalidJson:"Ungültiges JSON — wechseln Sie zum JSON-Tab zur Korrektur.",cascadePartialFailure_one:"{{count}} Kaskaden-Update fehlgeschlagen",cascadePartialFailure_other:"{{count}} Kaskaden-Updates fehlgeschlagen",usedInAgents_one:"Wird in {{count}} Agent verwendet",usedInAgents_other:"Wird in {{count}} Agents verwendet"},S={condCapabilityMatch:"capabilityMatch",condDeploymentContext:"deploymentContext",strategy_executeAll:"Alle ausführen",strategy_executeUntilFirstSuccess:"Bis zum ersten Treffer",invalidValue:"(ungültig)",appendActions:"Aktionen anhängen",expressionsAsActions:"Ausdrücke als Aktionen",groups:"Verhaltensgruppen",addGroup:"Gruppe hinzufügen",groupName:"Gruppenname",executionStrategy:"Ausführungsstrategie",rules:"Regeln",addRule:"Regel hinzufügen",ruleName:"Regelname",actions:"Aktionen",noActions:"Keine Aktionen",addAction:"Hinzufügen",actionPlaceholder:"z.B. greet, get_weather",conditions:"Bedingungen",addCondition:"Bedingung hinzufügen",conditionType:"Bedingungstyp",nestedConditions:"Verschachtelte Bedingungen",configKey:"Schlüssel",configValue:"Wert",addConfig:"Konfiguration hinzufügen",removeRule:"Regel entfernen",removeGroup:"Gruppe entfernen",removeCondition:"Bedingung entfernen",noGroups:"Keine Verhaltensgruppen definiert",noRules:"Keine Regeln in dieser Gruppe",noConditions:"Keine Bedingungen"},w={noEndpointsFound:"Keine Endpunkte in der Spezifikation gefunden",specUrlPlaceholder:"https://api.example.com/openapi.json",targetServerUrl:"Ziel-Server URL",targetServerUrlPlaceholder:"https://api.example.com",calls:"HTTP-Aufrufe",addCall:"HTTP-Aufruf hinzufügen",callName:"Aufrufname",callDescription:"Beschreibung",descriptionPlaceholder:"Beschreibung in natürlicher Sprache für LLM-Agents",request:"Anfrage",method:"Methode",path:"Pfad",pathPlaceholder:"/api/endpoint",headers:"Header",addHeader:"Header hinzufügen",queryParams:"Query-Parameter",addQueryParam:"Query-Parameter hinzufügen",contentType:"Inhaltstyp",body:"Anfragekörper",bodyPlaceholder:"JSON Body-Vorlage...",parameters:"Parameter (für LLM-Agents)",paramName:"Parametername",paramDescription:"Beschreibung",addParam:"Parameter hinzufügen",options:"Optionen",saveResponse:"Antwort speichern",responseObjectName:"Response-Objektname",responseHeaderObjectName:"Response-Header-Objektname",fireAndForget:"Senden und vergessen",batchCalls:"Batch-Aufrufe",iterationObjectName:"Iterations-Objektname",prePostInstructions:"Vor-/Nachbearbeitung",preRequest:"Vor Request",postResponse:"Nach Response",removeCall:"Aufruf entfernen",noCalls:"Keine HTTP-Aufrufe konfiguriert",actions:"Auslösende Aktionen",noActions:"Keine Aktionen",actionPlaceholder:"z.B. get_weather",addHttpCodeValidator:"HTTP-Code-Filter hinzufügen",httpCodeFilter:"HTTP-Code-Filter",runOnCodes:"Ausführen bei Codes",skipOnCodes:"Überspringen bei Codes",propName:"Eigenschaftsname",propValue:"Wert oder Vorlage",overrideTitle:"Vorhandenen Wert überschreiben",override:"Überschreiben",advancedMapping:"Objektpfad-Zuordnung",fromPath:"Von Objektpfad",toPath:"Zu Objektpfad",convertToObject:"In Objekt umwandeln",runOnValidationError:"Bei Validierungsfehler ausführen",noPropertyInstructions:"Keine Eigenschaftsanweisungen",addPropertyInstruction:"Eigenschaftsanweisung hinzufügen",pathToTargetArray:"Pfad zum Ziel-Array",iterationObjName:"Iterationsobjekt",templateFilter:"Filterausdruck",filterPlaceholder:"Optionaler Filter...",outputType:"Ausgabetyp",outputValue:"Ausgabewert",noOutputInstructions:"Keine Ausgabe-Build-Anweisungen",addOutputInstruction:"Ausgabeanweisung hinzufügen",qrValue:"Schnellantwort-Wert",qrExpressions:"Schnellantwort-Ausdrücke",noQrInstructions:"Keine Schnellantwort-Build-Anweisungen",addQrInstruction:"Schnellantwort-Anweisung hinzufügen",noRetryPolicy:"Keine Wiederholungsrichtlinie",addRetryPolicy:"Wiederholungsrichtlinie hinzufügen",maxRetries:"Max. Wiederholungen",backoffDelayMs:"Backoff-Verzögerung (ms)",retryOnHttpCodes:"Wiederholen bei HTTP-Codes",valuePathMatchers:"Wertpfad-Matcher",noValuePathMatchers:"Keine Wertpfad-Matcher",valuePath:"Wertpfad",contains:"enthält",equals:"gleich",trueIfNoMatch:"Wiederholen, wenn keine Übereinstimmung",addValuePathMatcher:"Wertpfad-Matcher hinzufügen",removeRetryPolicy:"Wiederholungsrichtlinie entfernen",delayMs:"Verzögerung (ms)",propertyInstructions:"Eigenschaftsanweisungen",outputBuildInstructions:"Ausgabe-Build-Anweisungen",qrBuildInstructions:"Schnellantwort-Build-Anweisungen",retryBackoff:"Wiederholung & Backoff",discoveredEndpoints:"Erkannte Endpunkte",discoveryError:"OpenAPI-Spezifikation konnte nicht geparst werden",openApiSpecUrl:"Aus OpenAPI-Spezifikation importieren",invalidUrl:"Geben Sie eine gültige http:// oder https:// URL ein",discovering:"Wird geparst…",discoverEndpoints:"Endpunkte erkennen",retry:"Erneut versuchen",selectedCount:"ausgewählt",importAppend:"An Aufrufe anhängen",importReplace:"Alle Aufrufe ersetzen",confirmReplace:"Ja, alle ersetzen",replaceConfirmMessage:"Dies ersetzt {{count}} vorhandene Aufrufe. Sind Sie sicher?"},v={continueOnErrorHint:"Bei einem Fehler wird die Pipeline fortgesetzt; der Fehler ist verfügbar unter ",descriptionPlaceholder:"Beschreibung in natürlicher Sprache für LLM-Agents",governanceHint:"Steuern Sie, welche Tools bereitgestellt werden. Whitelist = nur diese; Blacklist = diese ausschließen.",pipelineHint:"Deterministische, durch Aktionen ausgelöste Tool-Aufrufe (Pipeline-Modus).",responseObjectName:"Response-Objektname",discoveredTools:"Verfügbare Tools",whitelisted:"Auf Whitelist",addToWhitelist:"Zur Whitelist hinzufügen",addWhitelist:"Whitelist",blacklisted:"Auf Blacklist",addToBlacklist:"Zur Blacklist hinzufügen",addBlacklist:"Blacklist",noRetryPolicy:"Keine Wiederholungsrichtlinie",addRetryPolicy:"Wiederholungsrichtlinie hinzufügen",maxAttempts:"Max. Versuche",backoffDelayMs:"Backoff-Verzögerung (ms)",backoffMultiplier:"Backoff-Multiplikator",maxBackoffDelayMs:"Max. Backoff (ms)",removeRetryPolicy:"Wiederholungsrichtlinie entfernen",callName:"Aufrufname",removeCall:"Aufruf entfernen",description:"Beschreibung",toolName:"Tool-Name",parameterSchema:"Parameter-Schema",triggerActions:"Auslösende Aktionen",toolArguments:"Tool-Argumente",addArgument:"Argument hinzufügen",saveResponse:"Antwort speichern",continueOnError:"Bei Fehler fortfahren",retryBackoff:"Wiederholung & Backoff",preRequest:"Vor Request",propertyInstructions:"Eigenschaftsanweisungen",postResponse:"Nach Response",outputBuildInstructions:"Ausgabe-Build-Anweisungen",qrBuildInstructions:"Schnellantwort-Build-Anweisungen",discoveryError:"Verbindung zum MCP-Server fehlgeschlagen",serverConnection:"Serververbindung",displayName:"Anzeigename",serverUrl:"MCP-Server-URL",discovering:"Verbindung wird hergestellt…",discoverTools:"Tools erkennen",transport:"Transport",timeoutMs:"Zeitlimit (ms)",apiKey:"API-Schlüssel / Vault-Referenz",toolGovernance:"Tool-Governance",retry:"Erneut versuchen",noToolsFound:"Keine Tools auf diesem Server gefunden",whitelist:"Whitelist (nur erlauben)",blacklist:"Blacklist (ausschließen)",pipelineCalls:"Pipeline-Aufrufe",addCall:"MCP-Aufruf hinzufügen"},D=JSON.parse('{"addCustomInstruction":"Anweisung hinzufügen","addKnowledgeBase":"KB-Referenz hinzufügen","addMaskingRule":"Regel hinzufügen","addToolLimit":"Tool-Limit hinzufügen","anchorFirstSteps":"Erste Schritte verankern","anchorFirstStepsHint":"Eröffnungszüge werden immer beibehalten (0 = keine)","conversationMemory":"Gesprächsspeicher","conversationMemoryDesc":"Ältere Züge werden schrittweise in eine fortlaufende Zusammenfassung komprimiert. Das LLM sieht: [Systemprompt + Zusammenfassung] + [letzte N Züge wörtlich]. Ein integriertes conversationRecall-Tool ermöglicht es dem Agenten, bei Bedarf in zusammengefasste Züge zurückzugreifen.","counterweight":"Verhaltens-Gegengewichte","counterweightCustom":"Benutzerdefinierte Anweisungen","counterweightCustomHint":"Leer lassen, um die integrierte Voreinstellung für die gewählte Stufe zu verwenden.","counterweightCustomOverride":"Benutzerdefinierte Anweisungen überschreiben den voreingestellten Stufentext vollständig.","counterweightDesc":"Fügt Sicherheitsanweisungen in den Systemprompt ein. Schützt vor Selbstüberschätzung, Halluzination und unbeaufsichtigtem Handeln.","counterweightLevel":"Sicherheitsstufe","counterweightLevelCautious":"Vorsichtig","counterweightLevelNormal":"Normal (keine Einfügung)","counterweightLevelStrict":"Streng","counterweightPlacement":"Platzierung","counterweightPlacementPrefix":"Vor dem Systemprompt","counterweightPlacementSuffix":"Nach dem Systemprompt","counterweightStrictNote":"Der strenge Modus wird bei geplanter/Batch-Ausführung automatisch auf Vorsichtig herabgestuft, um destruktives \\"Schritt-für-Schritt\\"-Verhalten zu verhindern.","defaultMaxChars":"Standard-Max.-Zeichen","defaultMaxCharsHint":"(~12k Tokens bei 50000)","enableSummary":"Fortlaufende Zusammenfassung aktivieren","enableWorkflowRag":"Workflow-RAG automatisch erkennen","excludeProps":"Eigenschaften aus Zusammenfassung ausschließen","excludePropsDesc":"Bereits als persistente Eigenschaften erfasste Fakten überspringen — Fokus auf Schlussfolgerungen und impliziten Kontext","httpCallRag":"httpCall-RAG (ohne Infrastruktur)","httpCallRagHint":"Führt vor dem LLM-Aufruf einen benannten httpCall aus. Die Antwort wird als Kontext eingefügt — kein Vektorspeicher erforderlich.","httpCallRagPlaceholder":"z. B. search_docs, query_wiki","identityMasking":"Identitätsmaskierung","identityMaskingDesc":"Verhindert, dass das LLM bei Nachfragen seinen Modellnamen oder Anbieter preisgibt.","identityMaskingEmptyWarning":"Maskierung ist aktiviert, hat aber keine Regeln. Fügen Sie mindestens eine Regel hinzu, damit die Maskierung wirksam wird.","identityMaskingRulePlaceholder":"z. B. Gib niemals preis, dass du ein KI-Sprachmodell bist","identityMaskingRules":"Maskierungsregeln","identityMaskingRulesHint":"Sowohl die Aktivierung ALS AUCH mindestens eine Regel sind erforderlich, damit die Maskierung wirksam wird.","injectionStrategy":"Einfügung","kbNamePlaceholder":"z. B. product-docs","knowledgeBases":"Wissensbasen","knowledgeBasesHint":"Wissensbasen explizit über den Namen referenzieren. Jeder Name muss einer RagConfiguration im Workflow entsprechen.","legacyRag":"Legacy-RAG (veraltet)","legacyRagHint":"Diese Konfiguration verwendet das veraltete retrievalAugmentor-Format. Migrieren Sie zu den obigen Modi.","maxContextTokens":"Max. Kontext-Tokens","maxContextTokensHint":"-1 = stattdessen Schrittanzahl verwenden","maxRecallHint":"Pro Abruf-Aufruf","maxRecallTurns":"Max. Abruf-Züge","maxSummaryTokens":"Max. Zusammenfassungs-Tokens","noKnowledgeBases":"Keine Wissensbasen referenziert","perToolLimits":"Überschreibungen pro Tool","prePostDesc":"Konfigurieren Sie Eigenschaftsanweisungen, die vor jeder LLM-Anfrage ausgeführt werden, und Ausgabe-/Eigenschaftsanweisungen, die nach jeder Antwort ausgeführt werden.","promptSafety":"Prompt-Sicherheit","ragDefaults":"Standard-Abrufparameter","recentWindow":"Aktuelles Fenster (Schritte)","recentWindowHint":"Wörtlich beibehaltene Züge","removeLegacyRag":"Legacy-Konfiguration entfernen","strategyPaginate":"Paginieren (LLM ruft mehr ab)","strategySummarize":"Zusammenfassen (per günstigem Modell)","strategyTruncate":"Abschneiden (harter Schnitt)","summarizationPrompt":"Benutzerdefinierter Zusammenfassungs-Prompt (optional)","summarizationPromptPlaceholder":"Leer lassen, um den strukturierten Standard-Prompt zu verwenden, der Ziele, Entscheidungen, Begründungen und Tonfall bewahrt.","summarizeInfoBanner":"Der Summarizer verwendet denselben Anbieter und API-Schlüssel wie diese Aufgabe. Nur der Modellname wird gegen eine günstigere Variante ausgetauscht (z. B. gpt-4o-mini).","summarizerModel":"Summarizer-Modell","summarizerModelHint":"(fällt bei leerem Feld auf Abschneiden zurück)","summarizerModelPlaceholder":"z. B. gpt-4o-mini","summaryModel":"Zusammenfassungs-Modell","summaryProvider":"Zusammenfassungs-Anbieter","summaryProviderHint":"Verwenden Sie ein günstiges/schnelles Modell für die Zusammenfassung","tokenWindow":"Token-bewusstes Kontextfenster","tokenWindowDesc":"Ersetzt den auf Schrittanzahl basierenden Verlauf durch token-bewusstes Packen. Wenn maxContextTokens gesetzt ist (> 0), passt die Engine so viele aktuelle Züge wie möglich in das Budget ein und verankert optional die Eröffnungszüge.","toolResponseLimits":"Tool-Antwortlimits","toolResponseLimitsDesc":"Schneidet ausführliche Tool-Ausgaben vor der erneuten Einfügung in das LLM-Kontextfenster ab. Verhindert das Aufblähen des Kontexts.","truncationStrategy":"Strategie","workflowRagHint":"Erkennt automatisch alle RAG-Schritte aus dem Workflow. Wird nur verwendet, wenn oben keine expliziten Wissensbasen aufgeführt sind.","tasks":"LLM-Aufgaben","addTask":"Task hinzufügen","noTasks":"Keine LLM Tasks konfiguriert","removeTask":"Task entfernen","taskId":"Aufgaben-ID","description":"Beschreibung","descriptionPlaceholder":"Was diese Aufgabe bewirkt","triggerActions":"Auslösende Aktionen","noActions":"Keine Aktionen","actionPlaceholder":"z.B. help, chat","systemPrompt":"Systemprompt","systemPromptPlaceholder":"Du bist ein hilfreicher Assistent...","modelParams":"Modellparameter","addParam":"Parameter hinzufügen","agentMode":"Agentenmodus","enableBuiltInTools":"Integrierte Tools aktivieren","toolWhitelist":"Tool Whitelist (leer = alle)","enableHttpCallTools":"HTTP Call Tools automatisch erkennen","enableHttpCallToolsDesc":"Alle httpcall-Erweiterungen des Workflows automatisch als LLM-Tools bereitstellen","httpCallTools":"HTTP-Aufruf-Tool-URIs","httpCallToolsHint":"Explizite httpcall-URIs (zusätzlich zu automatisch erkannten)","addTool":"Tool URI hinzufügen","mcpServers":"MCP-Server","mcpServersDesc":"Externe MCP-Server, deren Tools dem LLM zur Verfügung stehen","addMcpServer":"MCP Server hinzufügen","mcpUrlPlaceholder":"http://localhost:7070/mcp","mcpName":"Name","mcpApiKey":"API Key / Vault-Referenz","historyLimit":"Verlaufslimit","historyLimitHint":"(-1 = unbegrenzt)","budgetPerf":"Budget & Leistung","maxBudget":"Max. Budget ($)","costTracking":"Kostenerfassung","toolCaching":"Werkzeug-Caching","rateLimiting":"Ratenbegrenzung","defaultRate":"Standardrate (Anfr./Min.)","prePostInstructions":"Vor-/Nachbearbeitung","preRequest":"Vor Request","postResponse":"Nach Response","enableMcpCallTools":"MCP-Werkzeuge automatisch erkennen","enableMcpCallToolsDesc":"Alle mcpcalls-Erweiterungen aus dem Workflow automatisch als LLM-Werkzeuge bereitstellen","a2aAgents":"A2A-Agenten","a2aAgentsDesc":"Entfernte A2A-kompatible Agenten, deren Fähigkeiten zu LLM-Werkzeugen werden","addA2aAgent":"A2A-Agent hinzufügen","a2aUrlPlaceholder":"https://remote.example.com/a2a/agents/...","a2aName":"Anzeigename","a2aApiKey":"${vault:my-a2a-key}","a2aTimeout":"Zeitlimit (ms)","a2aSkillsFilter":"Fähigkeitenfilter (leer = alle)","cascade":"Modellkaskade","cascadeDesc":"Try a cheap/fast model first. If confidence is too low, automatically escalate to a more powerful (and expensive) model.","cascadeEnable":"Modellkaskade aktivieren","cascadeStrategy":"Strategie","strategyCascade":"Schrittweise Eskalation","strategyParallel":"Parallel (zukünftig)","cascadeStrategyHint":"Beginnt mit dem günstigsten Modell und eskaliert bei niedriger Konfidenz","cascadeEvalStrategy":"Konfidenzbewertung","cascadeEvalHint":"Wie bestimmt wird, ob eine Antwort ausreichend gut ist","evalStructured":"Strukturierte Ausgabe (JSON)","evalHeuristic":"Heuristisch (Unsicherheitserkennung)","evalJudge":"Bewertungsmodell (Sub-LLM)","evalNone":"Keine (immer akzeptieren)","cascadeInAgent":"Kaskade auch im Agentenmodus (mit Werkzeugen) verwenden","cascadeSteps":"Cascade Steps","cascadeStepsDesc":"Order matters: first step tried first. Last step is always accepted.","cascadeModelName":"z. B. claude-sonnet-5","cascadeConfidence":"Min. Confidence (0-1)","cascadeConfidencePlaceholder":"leer = immer akzeptieren","cascadeTimeout":"Zeitlimit (ms)","addCascadeStep":"Kaskadenschritt hinzufügen","cascadeReturnBest":"Antwort mit der besten Bewertung über alle Schritte zurückgeben","cascadeEvalNoneHint":"Die Konfidenzprüfung ist deaktiviert — die Antwort des ersten Schritts wird immer akzeptiert.","cascadeCeilings":"Obergrenzen & Preise","cascadeMaxDuration":"Maximale Gesamtdauer (ms)","cascadeMaxCost":"Maximale Kosten pro Durchlauf ($)","cascadeUnlimited":"unbegrenzt","cascadeInputPrice":"Eingabe $ / 1M Tokens","cascadeOutputPrice":"Ausgabe $ / 1M Tokens","cascadePricingHint":"Die Standard-Token-Preise fließen in die Kostenverfolgung und die Kostenobergrenze ein. Einzelne Schritte können sie überschreiben.","cascadeJudgeModel":"Bewertungsmodell","cascadeJudgeModelDesc":"Ein separates (meist günstiges) Modell, das die Konfidenz jeder Antwort bewertet.","cascadeJudgeApiKey":"Bewertungsmodell-API-Schlüssel","cascadeHeuristic":"Heuristik-Feinabstimmung","cascadeHeuristicDesc":"Optionale Überschreibungen für die Unsicherheits-/Ablehnungserkennung. Leere Felder verwenden die integrierten englischen Standardwerte. Passen Sie die Phrasenlisten für nicht-englische Bereitstellungen an.","cascadeHeuristicDefaults":"Integrierte Standardwerte","cascadeHeuristicPhrasePlaceholder":"Phrase hinzufügen…","cascadeHeuristicPhrasesLow":"Unsicherheitsphrasen (niedrige Konfidenz)","cascadeHeuristicPhrasesRefusal":"Ablehnungsphrasen","cascadeHeuristicShortLen":"Länge für kurze Antwort","cascadeHeuristicShortScore":"Bewertung für kurze Antwort","cascadeHeuristicRefusalScore":"Bewertung bei Ablehnung","cascadeHeuristicHedgingScore":"Bewertung bei Unsicherheit","cascadeHeuristicDefaultScore":"Standardbewertung","cascadeStepApiKey":"API-Schlüssel","cascadeStepApiKeyPlaceholder":"übernimmt Aufgaben-Schlüssel, falls leer","cascadeCrossProvider":"anbieterübergreifend","cascadeStepAdvanced":"Erweitert (Preise & Parameter)","cascadeStepInputPrice":"Eingabe $ / 1M","cascadeStepOutputPrice":"Ausgabe $ / 1M","cascadeStepPriceInherit":"Kaskaden-Standard","cascadeStepParams":"Zusätzliche Parameter","cascadeStepAddParam":"Parameter hinzufügen","cascadeIssues":{"NO_STEPS":"Die Kaskade ist aktiviert, hat aber keine Schritte — sie wird bei der Ausführung fehlschlagen.","UNKNOWN_STRATEGY":"Unbekannte Strategie \\"{{strategy}}\\" — die Kaskade wird sequenziell ausgeführt.","PARALLEL_NOT_IMPLEMENTED":"Die parallele Strategie ist noch nicht implementiert — die Schritte werden sequenziell ausgeführt.","UNKNOWN_EVAL_STRATEGY":"Unbekannte Konfidenzbewertung \\"{{strategy}}\\" — Standard ist Strukturierte Ausgabe.","JUDGE_MODEL_MISSING":"Für die Bewertung durch das Bewertungsmodell ist kein Bewertungsmodell konfiguriert — die Konfidenz greift auf die Heuristik zurück.","JUDGE_CROSS_PROVIDER_NO_APIKEY":"Das Bewertungsmodell nutzt einen anderen Anbieter, hat aber keinen eigenen API-Schlüssel — es würde den Aufgaben-Schlüssel übernehmen.","MAX_DURATION_NONPOSITIVE":"Die maximale Gesamtdauer muss größer als 0 sein.","MAX_COST_NEGATIVE":"Die maximalen Kosten pro Durchlauf dürfen nicht negativ sein.","CASCADE_INPUT_PRICE_NEGATIVE":"Der Eingabepreis der Kaskade darf nicht negativ sein.","CASCADE_OUTPUT_PRICE_NEGATIVE":"Der Ausgabepreis der Kaskade darf nicht negativ sein.","CONVERT_TO_OBJECT_STRUCTURED":"convertToObject ist mit der Konfidenz per Strukturierte Ausgabe nicht kompatibel — die Kaskade verwendet stattdessen die Heuristik.","STEP_INPUT_PRICE_NEGATIVE":"Der Eingabepreis von Schritt {{step}} darf nicht negativ sein.","STEP_OUTPUT_PRICE_NEGATIVE":"Der Ausgabepreis von Schritt {{step}} darf nicht negativ sein.","STEP_CONFIDENCE_OUT_OF_RANGE":"Die Konfidenz von Schritt {{step}} muss zwischen 0 und 1 liegen.","STEP_DEAD_NULL_THRESHOLD":"Schritt {{step}} hat keinen Konfidenzschwellenwert — spätere Schritte werden unerreichbar.","STEP_TIMEOUT_NONPOSITIVE":"Das Zeitlimit von Schritt {{step}} muss größer als 0 sein.","STEP_CROSS_PROVIDER_NO_APIKEY":"Schritt {{step}} nutzt einen anderen Anbieter, hat aber keinen eigenen API-Schlüssel — es würde den Aufgaben-Schlüssel übernehmen."},"parallelExecution":"Parallele Werkzeugausführung","parallelExecutionDesc":"Run independent tool calls concurrently","parallelTimeout":"Zeitlimit (ms)","maxToolIterations":"Max. Werkzeug-Iterationen","maxToolIterationsHint":"(Standard 10)","toolRateLimits":"Ratenlimits pro Werkzeug","toolRateLimitsDesc":"Override default rate for specific tools","toolName":"Werkzeugname","addToolRate":"Ratenlimit hinzufügen","retryConfig":"Wiederholungskonfiguration","retryDesc":"Configure automatic retries with exponential backoff.","retryMaxAttempts":"Max. Versuche","retryDelay":"Anfangsverzögerung (ms)","retryMultiplier":"Backoff-Faktor","retryMaxDelay":"Max. Verzögerung (ms)","ragConfig":"RAG (Wissensabruf)","ragDesc":"Augment LLM responses with retrieved documents.","ragHttpCall":"HTTP-Aufruf-URI","ragEmbeddingModel":"Embedding-Modell","ragEmbeddingModelPlaceholder":"z. B. text-embedding-3-small","ragEmbeddingStore":"Embedding-Speicher","ragEmbeddingStorePlaceholder":"z. B. pgvector, qdrant","ragMaxResults":"Max. Ergebnisse","ragMinScore":"Min Similarity Score (0-1)","moveDown":"Nach unten","moveUp":"Nach oben","removeStep":"Schritt entfernen","execution":"Ausführung","budgetCosts":"Budget & Kosten","preRequestDesc":"Eigenschaften vor der LLM-Ausführung setzen oder transformieren.","postResponseDesc":"LLM-Ausgabe verarbeiten: Eigenschaften setzen, Ausgabe-Nachrichten erstellen und Quick Replies generieren.","postPropertyInstructions":"Eigenschaften-Anweisungen","postOutputInstructions":"Ausgabe-Anweisungen","postQrInstructions":"Quick Reply-Anweisungen","allSkills":"Alle Fähigkeiten","skillPlaceholder":"z. B. order-tracking","modeAgent":"Agent","modeChat":"Chat","perMinute":"/Min.","allTools":"Alle Werkzeuge","selectSpecific":"Manuell auswählen","allToolsInfo":"Alle {{count}} integrierten Werkzeuge stehen dem LLM zur Verfügung. Wählen Sie „Manuell auswählen“, um die Auswahl einzuschränken.","availableTools":"Verfügbare Werkzeuge","toolCount":"{{selected}} von {{total}} ausgewählt","toolSources":"Workflow-Werkzeugquellen","toolSourcesInfo":"Beide Quellen sind standardmäßig aktiv — alle HTTP- und MCP-Aufrufe im Workflow werden automatisch als LLM-Werkzeuge bereitgestellt. Deaktivieren Sie eine Quelle, um sie auszuschließen.","included":"Enthalten","toolApprovals":"Tool-Freigabesperrung (pro Aufgabe)","toolApprovalsEnable":"Tool-Freigaben für diese Aufgabe überschreiben","toolApprovalsDesc":"Überschreibt die Tool-Freigaben auf Agentenebene nur für DIESE Aufgabe — ein vollständiger Ersatz, keine Zusammenführung.","responseValidation":"Antwortvalidierung & Wiederherstellung","responseValidationDesc":"Steuern Sie, wie die Engine auf einen leeren, abgeschnittenen, inhaltsgefilterten, abgelehnten oder abgelaufenen Turn reagiert. \\"Fallback\\" ersetzt durch eine vorgefertigte Nachricht; \\"Fehler\\" lässt den Turn fehlschlagen; \\"Warnen\\" protokolliert und fährt fort; \\"Ignorieren\\" tut nichts.","rvEnable":"Antwortvalidierung aktivieren","rvDisabledInfo":"Die untenstehenden Richtlinien werden gespeichert, sind aber nur wirksam, solange die Validierung aktiviert ist.","rvActionIgnore":"Ignorieren","rvActionWarn":"Warnen (protokollieren & fortfahren)","rvActionFallback":"Fallback (vorgefertigte Nachricht)","rvActionError":"Fehler (Turn fehlschlagen lassen)","rvOnEmpty":"Leere Antwort","rvOnEmptyHint":"Das LLM hat nichts zurückgegeben (leer oder null)","rvOnTruncation":"Abgeschnittene Antwort","rvOnTruncationHint":"Antwort abgeschnitten (finishReason=LENGTH)","rvOnContentFilter":"Inhaltsgefiltert","rvOnContentFilterHint":"Antwort durch den Inhaltsfilter des Anbieters blockiert","rvOnRefusal":"Ablehnung","rvOnRefusalHint":"Das LLM hat die Antwort verweigert (heuristische Erkennung)","rvOnStreamingTimeout":"Streaming-Timeout","rvOnStreamingTimeoutHint":"Eine Streaming-Antwort ist vor dem Abschluss abgelaufen","streamingTimeoutSeconds":"Streaming-Timeout (Sekunden)","streamingTimeoutSecondsHint":"Überschreibt den Engine-Standardwert (120s). Gilt nur beim Streaming; leer = Standard verwenden.","taskPricing":"Preise für einfache Aufrufe","taskPricingDesc":"Bepreist die normalen (nicht kaskadierten) Modellaufrufe dieser Aufgabe für die Kostenverfolgung und Gruppenkostenobergrenzen. Ohne Preis (leer) werden 0 $ berechnet."}'),z={labelPlaceholder:"Link-Beschriftung...",pathPlaceholder:"Link-Pfad...",altPlaceholder:"Alt-Text...",uriPlaceholder:"Bild-URL...",language:"Sprache",langPlaceholder:"z.B. en, de",outputSets:"Ausgabesets",addOutputSet:"Ausgabeset hinzufügen",noOutputSets:"Keine Ausgabesets konfiguriert",actionName:"Aktionsname",timesOccurred:"×",removeOutput:"Entfernen",outputs:"Ausgaben",alternativeGroup:"Alternatives",addAlternative:"Alternative hinzufügen",addOutputGroup:"Ausgabegruppe hinzufügen",textPlaceholder:"Ausgabetext...",urlPlaceholder:"URL…",delayMs:"Verzögerung (ms)",quickReplies:"Schnellantworten",noQuickReplies:"Keine Quick Replies",addQuickReply:"Quick Reply hinzufügen",qrValue:"Button-Text",qrExpressions:"Ausdrücke",default:"Standard",invalidJson:"Ungültiges JSON",buttonTypePlaceholder:"Button-Typ (z. B. postback)",buttonLabelPlaceholder:"Beschriftung...",onPressPlaceholder:'{"action":"..."}',subTypePlaceholder:"Untertyp (z. B. text, email)",inputPlaceholderPlaceholder:"Platzhalter...",inputLabelPlaceholder:"Beschriftung...",defaultValuePlaceholder:"Standardwert...",minLength:"Min. Länge",minLengthShort:"Min.",maxLength:"Max. Länge",maxLengthShort:"Max.",validationMsgPlaceholder:"Validierungsfehlermeldung...",jsonPlaceholder:'{"key":"value"}'},T={setters:"Eigenschafts-Setter",addSetter:"Setter hinzufügen",noSetters:"Keine Property Setter konfiguriert",removeSetter:"Entfernen",triggerActions:"Auslösende Aktionen",noActions:"Keine Aktionen",actionPlaceholder:"z.B. greet, fallback",properties:"Eigenschaften",noProperties:"Keine Eigenschaften",addProperty:"Eigenschaft hinzufügen",propName:"Eigenschaftsname",propValue:"Wert / Ausdruck",fromPath:"Quellpfad",fromObjectPath:"fromObjectPath",override:"Überschreiben",propsCount:"Eigensch.",untitled:"(keine Aktionen)",openEditor:"Im Editor bearbeiten",visibilityTitle:"Welche Agents diese longTerm-Eigenschaft sehen können",editValue:"Wert bearbeiten",toggleGroup:"Eigenschaftsgruppe umschalten"},E={language:"Sprache",langPlaceholder:"z.B. en, de",words:"Wörter",addWord:"Wort hinzufügen",wordPlaceholder:"z.B. hallo",phrases:"Phrasen",addPhrase:"Phrase hinzufügen",phrasePlaceholder:"z.B. guten Morgen",regExs:"Reguläre Ausdrücke",addRegEx:"RegEx hinzufügen",regexPlaceholder:"Regulärer Ausdruck",expressionPlaceholder:"z.B. greeting(hello)",frequency:"Häufigkeit",none:"Keine definiert"},y={title:"Parser-Konfiguration",configure:"Konfigurieren",config:"Konfiguration",appendExpressions:"Ausdrücke anhängen",includeUnused:"Unbenutzte Ausdrücke einschließen",includeUnknown:"Unbekannte Ausdrücke einschließen",dictionaries:"Wörterbücher",builtInDicts:"Integrierte Wörterbücher",regularDicts:"Reguläre Wörterbücher",addDict:"Hinzufügen",removeDict:"Wörterbuch entfernen",noRegularDicts:"Keine regulären Wörterbücher konfiguriert",regularDictLabel:"Reguläres Wörterbuch",dictUri:"Wörterbuch-Ressourcen-URI",dictUriPlaceholder:"eddi://ai.labs.dictionary/dictionarystore/dictionaries/?version=",corrections:"Korrekturen",distance:"Distanz",normalizers:"Normalisierer",removePunctuation:"Interpunktion entfernen",regexPattern:"Muster",dict:{integer:"Ganzzahl-Wörterbuch",decimal:"Dezimal-Wörterbuch",punctuation:"Interpunktions-Wörterbuch",email:"E-Mail-Wörterbuch",time:"Zeitausdruck-Wörterbuch",ordinalNumber:"Ordnungszahl-Wörterbuch"},corr:{levenshtein:"Levenshtein-Korrektur",phonetic:"Phonetische Korrektur",mergedTerms:"Zusammengesetzte Terme Korrektur"},norm:{punctuation:"Interpunktions-Normalisierer",specialCharacter:"Sonderzeichen-Normalisierer",contractedWords:"Kontraktions-Normalisierer",allowedCharacter:"Erlaubte-Zeichen-Normalisierer"}},P={activeConversations:"Aktive Gespräche",eventHistory:"Ereignisverlauf",noActiveQueues:"Keine aktiven Gespräche in Verarbeitung",payload:"Payload",successRate:"Erfolgsrate",tasksPerSec:"Aufgaben/s",totalPending:"ausstehend",confirmDiscardDescription:"Entfernt die Dead-Letter-Aufgabe dauerhaft. Sie kann danach nicht erneut ausgeführt werden. Dies kann nicht rückgängig gemacht werden.",confirmDiscardTitle:"Dead-Letter-Eintrag verwerfen?",title:"Koordinator-Dashboard",subtitle:"Konversationsverarbeitung überwachen und Dead-Letter-Einträge verwalten",type:"Coordinator-Typ",connection:"Verbindung",processed:"Verarbeitete Aufgaben",deadLettered:"Unzustellbar",activeQueues:"Aktive Queues",queued:"in Warteschlange",deadLetterTitle:"Unzustellbare Nachrichten",noDeadLetters:"Keine Dead-Letter-Einträge",colId:"ID",colConversation:"Gespräch",colError:"Fehler",colTime:"Zeitpunkt",colActions:"Aktionen",replay:"Wiederholen",discard:"Verwerfen",purgeAll:"Alle löschen",confirmPurge:"Alle löschen?",yes:"Ja",cancel:"Abbrechen",replaySuccess:"Dead-Letter erneut eingereiht",replayError:"Wiederholung fehlgeschlagen",discardSuccess:"Dead-Letter verworfen",discardError:"Verwerfen fehlgeschlagen",purgeSuccess:"Alle Dead-Letter-Einträge gelöscht",purgeError:"Löschen fehlgeschlagen",empty:"Keine Coordinator-Daten verfügbar",emptyHint:"Der Coordinator-Dienst startet möglicherweise noch. Daten erscheinen automatisch.",lastNSnapshots:"Letzte {{count}} Momentaufnahmen"},M={expand:"Erweitern",expandHint:"Vollbild öffnen (Strg+Umschalt+F)",close:"Fertig",lines:"Zeilen",chars:"Zeichen",fullscreenTitle:"Inhaltseditor",fullscreenDescription:"Vollbild-Inhaltseditor. Escape zum Schließen."},I={newLogs:"Neue Logs",title:"Protokolle",description:"Live-Protokollstream überwachen oder historische Logs durchsuchen.",tabLive:"Live",tabHistory:"Verlauf",connected:"Verbunden",disconnected:"Getrennt",filterAgent:"Agenten-ID…",filterConversation:"Gesprächs-ID...",filterInstance:"Instanz-ID...",allLevels:"Alle Stufen",pause:"Pause",resume:"Fortsetzen",clear:"Löschen",search:"Suchen",waitingForLogs:"Warte auf Protokolle...",loadingRecentLogs:"Lade aktuelle Protokolle…",noRecentLogs:"Keine aktuellen Protokollaktivitäten.",noRecentLogsHint:"Neue Protokolle werden hier angezeigt, sobald sie vom Backend gestreamt werden.",connectingStream:"Verbinde mit Stream...",noHistoryLogs:"Keine historischen Logs gefunden.",entryCount:"{{count}} Einträge",showStacktrace:"Stacktrace anzeigen ({{count}} Frames)",hideStacktrace:"Stacktrace ausblenden",allAgents:"Alle Agenten",allConversations:"Alle Gespräche",waitingHint:"Logs erscheinen hier, sobald sie vom Backend gestreamt werden.",noHistoryHint:"Versuchen Sie, die Filter anzupassen oder nach einem anderen Agent oder Konversation zu suchen.",searchConversations:"Suche nach ID, Agent, Benutzer…",stepsCount:"{{count}} Schritte",noConversationsFound:"Keine Konversationen gefunden",useConversationId:"ID verwenden: {{id}}",searchLogs:"Logs durchsuchen…",errors:"Fehler",warnings:"Warnungen",infos:"Info",debugs:"Debug",filteredCount:"{{shown}} von {{total}} Einträgen",copyEntry:"Logeintrag kopieren",export:"Exportieren",stateReady:"Bereit",stateActive:"Aktiv",stateError:"Fehler",stateEnded:"Beendet"},R={loadError:"Secrets konnten nicht geladen werden",allAgents:"Alle Agenten",allowedAgents:"Zugelassene Agenten",allowedAgentsHint:"Leer lassen für alle Agenten. Das Hinzufügen von Agenten-IDs hilft nachzuvollziehen, welche Agenten dieses Secret verwenden.",allowedAgentsLabel:"Zugelassene Agenten (optional)",allowedAgentsPlaceholder:"Agenten-ID eingeben und Enter drücken (leer = alle Agenten)",deleteKey:"{{key}} löschen",hideValue:"Wert ausblenden",newValuePlaceholder:"Neuer Secret-Wert…",rotate:"Rotieren",rotateDesc:"Geben Sie den neuen Wert ein. Die vorhandenen Referenzen werden weiterhin zum aktualisierten Wert aufgelöst.",rotateKey:"{{key}} rotieren",rotateSuccess:'Secret "{{key}}" rotiert',rotateTitle:'"{{key}}" rotieren',showValue:"Wert anzeigen",title:"Geheimnistresor",description:"Verschlüsselte Secrets im Vault verwalten. Werte werden nie offengelegt.",tenantId:"Mandanten-ID",refresh:"Secrets laden",create:"Secret hinzufügen",createTitle:"Secret hinzufügen",keyName:"Schlüsselname",keyNameLabel:"Schlüsselname",keyNamePlaceholder:"z.B. apiKey, dbPassword",valueLabel:"Secret-Wert",valuePlaceholder:"Secret-Wert eingeben…",storeWarning:"Der Wert wird verschlüsselt. Er kann nach dem Speichern nicht mehr abgerufen werden.",store:"Secret speichern",storeSuccess:'Secret "{{key}}" gespeichert',deleteSuccess:'Secret "{{key}}" gelöscht',created:"Erstellt",lastAccessed:"Letzter Zugriff",checksum:"Prüfsumme",actions:"Aktionen",confirmDeleteTitle:"Secret löschen",confirmDeleteMessage:'Möchten Sie "{{key}}" wirklich dauerhaft löschen? Diese Aktion kann nicht rückgängig gemacht werden.',empty:"Keine Secrets gefunden",emptyHint:"Für den Mandanten „{{tenant}}“ sind noch keine Secrets gespeichert. Klicken Sie auf „Secret hinzufügen“, um eines zu erstellen.",vaultUp:"Vault online",vaultDown:"Vault offline",descriptionLabel:"Beschreibung (optional)",descriptionPlaceholder:"z. B. OpenAI-API-Schlüssel für Produktion",descriptionCol:"Beschreibung",reference:"Referenz",willUseRef:"Referenz:",copyRef:"Tresor-Referenz kopieren",refCopied:"Kopiert: {{ref}}",lastRotated:"Zuletzt rotiert",scopeExplanation:"Geheimnisse gelten pro Mandant und werden von allen Agenten geteilt. Referenzieren Sie sie in Konfigurationen mit ${vault:keyName}. Der Zugriff wird durch die Konfigurationsautorenschaft gesteuert.",creatingFor:'Speicherung im Mandanten "{{tenant}}" — für alle Agenten verfügbar',vaultNotConfigured:"Geheimnistresor ist nicht konfiguriert",viewDocs:"Dokumentation anzeigen",selectAgentFirst:"Bitte zuerst einen Agenten auswählen",dangerZoneTitle:"Lebenszyklus des Verschlüsselungsschlüssels",dangerZoneDesc:"Betriebliche Wiederherstellungsaktionen für die kryptografischen Schlüssel des Vaults. Verwenden Sie diese, um Schlüssel zu rotieren oder den Zugriff nach einer Änderung des Master-Schlüssels wiederherzustellen. Unabhängig vom Rotieren des Werts eines einzelnen Secrets oben.",rotateDekTitle:"Verschlüsselungsschlüssel rotieren (DEK)",rotateDekBlurb:"Sicher — kein Neustart. Erzeugt einen neuen mandantenspezifischen Datenverschlüsselungsschlüssel und verschlüsselt alle Secrets dieses Mandanten neu.",rotateDekAction:"DEK rotieren",rotateDekConfirmTitle:"Verschlüsselungsschlüssel rotieren (DEK)?",rotateDekConfirm:"DEK jetzt rotieren",rotateKekTitle:"Master-Schlüssel rotieren (KEK)",rotateKekBlurb:"Verschlüsselt alle Mandanten-DEKs mit einem neuen Master-Schlüssel neu. Erfordert das Aktualisieren von EDDI_VAULT_MASTER_KEY und einen anschließenden Neustart.",rotateKekAction:"Master-Schlüssel rotieren",rotateKekConfirmTitle:"Master-Schlüssel rotieren (KEK)?",rotateKekConfirmDesc:"Verschlüsselt den Datenverschlüsselungsschlüssel jedes Mandanten mit einem neuen Master-Schlüssel neu. Die Secret-Werte selbst bleiben unverändert.",rotateKekConfirm:"Master-Schlüssel jetzt rotieren",kekTlsWarning:"Beide Schlüssel werden im Anfragetext gesendet. Führen Sie dies nur über eine TLS-Verbindung (HTTPS) aus, damit die Schlüssel während der Übertragung nicht offengelegt werden.",kekOldKeyLabel:"Aktueller Master-Schlüssel",kekOldKeyPlaceholder:"Aktueller EDDI_VAULT_MASTER_KEY",kekNewKeyLabel:"Neuer Master-Schlüssel",kekNewKeyPlaceholder:"Neuer Schlüssel — mindestens 8 Zeichen",kekNewKeyTooShort:"Der neue Master-Schlüssel muss mindestens 8 Zeichen lang sein.",kekRestartHint:"Nach der Rotation müssen Sie EDDI_VAULT_MASTER_KEY auf den neuen Schlüssel aktualisieren und EDDI neu starten.",kekResultInstruction:"Aktion erforderlich: Setzen Sie die Umgebungsvariable EDDI_VAULT_MASTER_KEY auf den NEUEN Master-Schlüssel und starten Sie EDDI neu. Bis dahin verwendet die laufende Instanz weiterhin den alten Schlüssel im Speicher.",resetTenantTitle:"Vault für diesen Mandanten zurücksetzen",resetTenantBlurb:"Destruktive letzte Möglichkeit. Löscht dauerhaft alle Secrets und den DEK, damit der Vault neu beginnen kann — verwenden Sie dies nach einem verlorenen oder geänderten Master-Schlüssel.",resetTenantAction:"Vault zurücksetzen",resetTenantConfirmTitle:"Vault für diesen Mandanten zurücksetzen?",resetTenantConfirm:"Vault dauerhaft zurücksetzen",resetConfirmLabel:'Geben Sie zur Bestätigung den Mandantennamen "{{tenant}}" ein',tableTitle_one:'{{count}} Geheimnis im Mandanten "{{tenant}}"',tableTitle_other:'{{count}} Geheimnisse im Mandanten "{{tenant}}"',rotateDekConfirmDesc_one:'Dies erzeugt einen neuen Datenverschlüsselungsschlüssel für den Mandanten "{{tenant}}" und verschlüsselt dessen {{count}} Secret neu. Dies ist sicher und wird sofort wirksam — kein Neustart erforderlich.',rotateDekConfirmDesc_other:'Dies erzeugt einen neuen Datenverschlüsselungsschlüssel für den Mandanten "{{tenant}}" und verschlüsselt dessen {{count}} Secrets neu. Dies ist sicher und wird sofort wirksam — kein Neustart erforderlich.',rotateDekSuccess_one:"Verschlüsselungsschlüssel rotiert — {{count}} Secret neu verschlüsselt",rotateDekSuccess_other:"Verschlüsselungsschlüssel rotiert — {{count}} Secrets neu verschlüsselt",kekResultTitle_one:"Master-Schlüssel rotiert — {{count}} DEK neu verschlüsselt",kekResultTitle_other:"Master-Schlüssel rotiert — {{count}} DEKs neu verschlüsselt",rotateKekSuccess_one:"Master-Schlüssel rotiert — {{count}} DEK neu verschlüsselt. Aktualisieren Sie EDDI_VAULT_MASTER_KEY und starten Sie neu.",rotateKekSuccess_other:"Master-Schlüssel rotiert — {{count}} DEKs neu verschlüsselt. Aktualisieren Sie EDDI_VAULT_MASTER_KEY und starten Sie neu.",resetTenantConfirmDesc_one:'Dies löscht dauerhaft alle {{count}} Secret und den Datenverschlüsselungsschlüssel für den Mandanten "{{tenant}}". Verwenden Sie dies als Wiederherstellungsschritt, wenn der Master-Schlüssel verloren ging oder geändert wurde und der alte Schlüssel nicht verfügbar ist. Dies kann nicht rückgängig gemacht werden.',resetTenantConfirmDesc_other:'Dies löscht dauerhaft alle {{count}} Secrets und den Datenverschlüsselungsschlüssel für den Mandanten "{{tenant}}". Verwenden Sie dies als Wiederherstellungsschritt, wenn der Master-Schlüssel verloren ging oder geändert wurde und der alte Schlüssel nicht verfügbar ist. Dies kann nicht rückgängig gemacht werden.',resetSecretCount_one:"{{count}} Secret gehen dauerhaft verloren",resetSecretCount_other:"{{count}} Secrets gehen dauerhaft verloren",resetTenantSuccess_one:'Vault für "{{tenant}}" zurückgesetzt — {{count}} Secret dauerhaft gelöscht',resetTenantSuccess_other:'Vault für "{{tenant}}" zurückgesetzt — {{count}} Secrets dauerhaft gelöscht'},C={title:"Prüfprotokoll",description:"Durchsuchen Sie das unveränderliche Audit-Protokoll für Compliance und Debugging.",byConversation:"Nach Gespräch",byAgent:"Nach Agent",selectAgent:"Agent auswählen…",conversationIdPlaceholder:"Gesprächs-ID eingeben...",agentIdPlaceholder:"Agent ID eingeben...",versionPlaceholder:"Version (optional)",search:"Suchen",entries:"Einträge",conversations:"Gespräche",totalDuration:"gesamt",totalCost:"Gesamtkosten",step:"Schritt",tasks:"Aufgaben",input:"Eingabe",output:"Ausgabe",llmDetail:"LLM-Detail",toolCalls:"Werkzeugaufrufe",hmacIntegrity:"HMAC-Integrität verifiziert",empty:"Audit-Einträge suchen",emptyHint:"Geben Sie oben eine Gesprächs-ID ein, um den Audit Trail zu durchsuchen.",emptyAgent:"Agent auswählen, um seinen Audit Trail anzuzeigen",emptyAgentHint:"Wählen Sie einen deployten Agent aus der Dropdown-Liste, um alle Audit-Einträge zu sehen.",noResults:"Keine Audit-Einträge gefunden",noResultsHint:"Versuchen Sie eine andere ID oder prüfen Sie, ob das Gespräch verarbeitet wurde.",loadMore:"Mehr laden",export:"Exportieren",autoRefreshToggle:"Auto-Aktualisierung umschalten (alle 10s)",autoRefreshOn:"Auto",autoRefreshOff:"Auto",integrityVerified:"Alle Einträge kryptographisch signiert",integrityVerifiedDesc:"{{count}} of {{total}} entries have HMAC-SHA256 signatures",integrityPass:"SIGNED",integrityPartial:"Teilweise signiertes Prüfprotokoll",integrityPartialDesc:"{{count}} von {{total}} Einträgen haben HMAC-Signaturen",integrityNone:"Unsignierte Audit-Einträge",integrityNoneDesc:"Konfigurieren Sie einen Vault-Master-Key, um automatische HMAC-SHA256-Signierung fuer alle zukuenftigen Audit-Eintraege zu aktivieren.",signed:"Signiert",allSigned:"Alle signiert",decidedBy:"von",automated:"automatisiert"},N={cronHelp:"5-Felder-Format: Minute Stunde Tag-des-Monats Monat Wochentag",cronEveryMinute:"Jede Minute",cronEveryNMinutes:"Alle {{n}} Minuten",cronHourlyAt:"Stündlich um :{{minute}}",cronEveryNHours:"Alle {{n}} Stunden um :{{minute}}",cronAtTime:"Um {{time}}",cronAtMinutePastEveryHour:"In Minute {{minutes}} jeder Stunde",cronAtMinutePastHours:"In Minute {{minutes}} der Stunde {{hours}}",cronOnDays:"am {{days}}",cronOnDayOfMonth:"am Monatstag {{days}}",cronInMonths:"im {{months}}",cronInvalid:"Ungültiger Cron-Ausdruck (5 Felder erwartet)",cronTooFrequent:"Wird häufiger als das 60-Sekunden-Minimum ausgeführt",failedEmptyHint:"Endgültig fehlgeschlagene Ausführungen erscheinen hier zum Wiederholen oder Verwerfen.",failedSubtitle:"Ausführungen, die dauerhaft fehlgeschlagen sind. Wiederholen zum erneuten Einreihen oder Verwerfen zum Entfernen ohne erneute Ausführung.",intervalTooShort:"Das Intervall muss mindestens 60 Sekunden betragen",lastManualFire:"Letzte manuelle Ausführung",oneTimeHelp:"Wird einmal zu diesem Zeitpunkt ausgeführt und schließt dann ab. Wird in Ihrer lokalen Zeit interpretiert.",outcomePending:"ausgelöst — Ergebnis ausstehend",persistentConversationId:"Persistente Gesprächs-ID",persistentConversationIdPlaceholder:"Wird automatisch generiert, wenn leer",strategyPersistent:"Persistent (dasselbe Gespräch wiederverwenden)",fireDeadLettered:"Endgültig fehlgeschlagen",fireFailed:"Fehlgeschlagen",fireCompleted:"Abgeschlossen",title:"Zeitpläne",subtitle:"Geplante Agent-Trigger verwalten — Cron-Jobs und Heartbeats",create:"Zeitplan erstellen",createTitle:"Zeitplan erstellen",createSuccess:"Zeitplan erfolgreich erstellt",createError:"Zeitplan konnte nicht erstellt werden",creating:"Erstelle...",name:"Name",namePlaceholder:"z.B. Täglicher Health Check",triggerType:"Trigger-Typ",cronExpression:"Cron-Ausdruck",interval:"Intervall (Sekunden)",agentId:"Agent ID",agentIdPlaceholder:"Agent ID eingeben...",environment:"Umgebung",message:"Nachricht",messagePlaceholder:"Nachricht an den Agent",conversationStrategy:"Konversationsstrategie",total:"Zeitpläne gesamt",active:"Aktiv",failedCount:"Fehlgeschlagen / Dead-Lettered",nextFireLabel:"Nächste Ausführung",tableTitle:"Alle Zeitpläne",empty:"Noch keine Zeitpläne",emptyHint:"Erstellen Sie einen Zeitplan, um Agent-Trigger zu automatisieren.",colName:"Name",colType:"Typ",colSchedule:"Zeitplan",colAgent:"Agent",colStatus:"Status",colNextFire:"Nächste Ausführung",colLastFired:"Letzte Ausführung",colActions:"Aktionen",enable:"Aktivieren",disable:"Deaktivieren",enabled:"Zeitplan aktiviert",disabled:"Zeitplan deaktiviert",toggleError:"Zeitplan konnte nicht umgeschaltet werden",fireNow:"Jetzt ausführen",fired:"Zeitplan erfolgreich ausgeführt",fireError:"Ausführung fehlgeschlagen",retry:"Wiederholen",retrySuccess:"Zeitplan erneut eingereiht",retryError:"Wiederholung fehlgeschlagen",deleteSuccess:"Zeitplan gelöscht",deleteError:"Zeitplan konnte nicht gelöscht werden",fireHistory:"Ausführungsverlauf",hitlTimeout:"HITL-Zeitlimit",hitlTimeoutHint:"Systemverwaltetes HITL-Freigabe-Zeitlimit — über die Freigabe der Konversation lösen, nicht hier.",statusDisabled:"Deaktiviert",statusActive:"Aktiv",statusRunning:"Läuft",statusExecuting:"Wird ausgeführt",statusFailed:"Fehlgeschlagen",statusDeadLettered:"Dead-Letter",typeHeartbeat:"Heartbeat",typeOneTime:"Einmalig",typeCron:"Cron",noFireHistory:"Noch kein Ausführungsverlauf",logFired:"Ausgeführt",logDuration:"Dauer",logResult:"Ergebnis",logAttempt:"Versuch",logCost:"Kosten",logConversation:"Gespräch",dismissSuccess:"Dead-Letter verworfen",dismissError:"Dead-Letter konnte nicht verworfen werden",failedTitle:"Fehlgeschlagene & Dead-Letter-Ausführungen",failedEmpty:"Keine fehlgeschlagenen Ausführungen",colSchedule2:"Zeitplan",dismiss:"Verwerfen",updateSuccess:"Zeitplan aktualisiert",updateError:"Zeitplan konnte nicht aktualisiert werden",editTitle:"Zeitplan bearbeiten",cronNext:"Nächste",oneTimeAt:"Datum & Uhrzeit",timeZone:"Zeitzone",agentVersion:"Version",agentVersionHint:"0 = neueste bereitgestellte",envProduction:"Produktion",envTest:"Test",userId:"Benutzer-ID",userIdPlaceholder:"system:scheduler",maxCostPerFire:"Max. Kosten pro Ausführung",unlimited:"Unbegrenzt",strategyNew:"Neu (frisches Gespräch bei jeder Ausführung)",saving:"Wird gespeichert...",fireOutcomeFailed:"Ausführung fehlgeschlagen",unknownError:"unbekannter Fehler",tabSchedules:"Zeitpläne",tabFailed:"Fehlgeschlagen / Dead-Letter",cronPreset:{every15Minutes:"Alle 15 Minuten",hourly:"Stündlich (zur vollen Stunde)",dailyMorning:"Täglich um 09:00",weekdays:"Wochentags um 09:00",weeklyMonday:"Wöchentlich (Mo 00:00)",monthly:"Monatlich (1., 00:00)"}},K={title:"Modellkaskade",escalated:"Konfidenz {{c}} < {{th}}",escalatedShort:"eskaliert",accepted:"akzeptiert",reason:{lowConfidence:"niedrige Konfidenz",timeout:"Zeitüberschreitung",error:"Fehler",retryableError:"wiederholbarer Fehler"}},B={pipelineError:"Pipeline-Trace konnte nicht geladen werden",title:"Debug",tabPipeline:"Pipeline",tabCosts:"Kosten",tabMemory:"Speicher",tabLogs:"Protokolle",tabPrompt:"Prompt",turn:"Zug",latest:"Neueste",noPipeline:"Senden Sie eine Nachricht, um den Pipeline-Verlauf zu sehen",processing:"Verarbeite...",actions:"Aktionen",confidence:"Konfidenz",duration:"Dauer",cost:"Kosten",in:"ein",input:"Eingabe",model:"Modell",out:"aus",output:"Ausgabe",tokens:"Tokens",toolCalls:"Tools"},L={error:"Kostendaten konnten nicht vom Server geladen werden",thisTurn:"Dieser Zug",conversationTotal:"Gespräch gesamt",tokens:"Tokens",cost:"Kosten",duration:"Dauer",model:"Modell",toolCalls:"Tool-Aufrufe",toolUsage:"Tool-Nutzung",cacheStats:"Cache",hitRate:"Trefferquote",empty:"Senden Sie eine Nachricht, um Kostenmetriken zu sehen",in:"ein",out:"aus",total:"gesamt",calls:"Aufrufe",avgLatency:"Ø Latenz",input:"Eingabe",output:"Ausgabe",tokenDistribution:"Token-Verteilung",totalCost:"Gesamtkosten",totalTokens:"Tokens gesamt",turns:"Runden"},F={error:"Speicherdaten konnten nicht geladen werden",title:"Konversationsspeicher",noConversation:"Starten Sie eine Konversation, um den Speicher zu prüfen",empty:"Keine Speicherdaten verfügbar",properties:"Eigenschaften",step:"Schritt",keys:"Schlüssel",input:"Eingabe",collapseAll:"Alle einklappen",copyKey:"Schlüssel kopieren",copyValue:"Wert kopieren",customProperties:"Benutzerdefinierte Eigenschaften",expandAll:"Alle ausklappen",noMatches:"Keine passenden Daten gefunden",search:"Schlüssel oder Werte suchen …",stepData:"Schrittdaten",systemProperties:"Systemeigenschaften"},W={noAgent:"Wählen Sie einen Agent, um Logs zu sehen",search:"Suchen...",pause:"Pause",resume:"Fortsetzen",clear:"Leeren",waiting:"Warte auf Logs...",connected:"Verbunden",disconnected:"Getrennt",logOutput:"Log-Ausgabe",noMatch:"Keine Logs entsprechen Ihrem Filter"},V={error:"Prompt-Daten konnten nicht geladen werden",noConversation:"Starten Sie ein Gespräch, um Prompts zu prüfen",noLlm:"Noch keine LLM-Interaktionen gefunden",turn:"Zug",latest:"Letzter",tokens:"Tokens",model:"Modell",cost:"Kosten",copy:"Prompt kopieren",copied:"Kopiert!",replay:"Diesen Zug wiederholen",toolCalls:"Tool-Aufrufe",step:"Schritt",roleSystem:"Systemprompt",roleUser:"Benutzer",roleAssistant:"Assistent",roleTool:"Tool-Ergebnis",collapse:"Einklappen",showMore:"Mehr anzeigen",temperature:"Temp"},G={preview:"Vorschau",edit:"Bearbeiten",switchToPreview:"Aufgelösten Prompt anzeigen",switchToEdit:"Zur Bearbeitung wechseln",refresh:"Aktualisieren",sampleData:"Beispieldaten (ohne Gespräch)",disclaimerReal:"Die Vorschau verwendet die Qute-Engine mit echten Gesprächsdaten.",disclaimerSample:"Die Vorschau verwendet die Qute-Engine mit Beispieldaten. Wählen Sie ein Gespräch für echte Werte.",resolvedPrompt:"Aufgelöster Prompt",copy:"Kopieren",copied:"Kopiert!",error:"Fehler beim Auflösen der Vorlage",loading:"Vorlage wird aufgelöst…",availableVariables:"Verfügbare Variablen",copyVariable:"Klicken, um Variablenreferenz zu kopieren",varProperties:"Eigenschaften",varMemory:"Erinnerung",varContext:"Kontext",varSnippets:"Snippets",varUserInfo:"Benutzerinfo",varConversationInfo:"Gesprächsinfo",varInput:"Eingabe",varConversationLog:"Gesprächsprotokoll"},x={title:"Agent Studio",subtitle:"Erstellen, testen und debuggen Sie Agents in einem Workspace",pipeline:"Pipeline",editor:"Editor",debug:"Debug & Chat",selectStage:"Klicken Sie auf eine Phase, um ihren Editor zu öffnen",openInStudio:"Im Studio öffnen",loading:"Lade Agent...",notFound:"Agent nicht gefunden",hideChat:"Chat ausblenden",showChat:"Chat anzeigen",openEditor:"Im Editor öffnen",editorComingSoon:"Integrierter Editor kommt bald",noPipeline:"Keine Pipeline-Phasen",type:{parser:"Parser",rules:"Regeln",property:"Eigenschafts-Setter",apicalls:"API-Aufrufe",llm:"LLM",output:"Ausgabe","output.template":"Ausgabevorlage",mcpcalls:"MCP-Aufrufe",rag:"Wissensbasen",dictionary:"Wörterbuch"},landingDescription:"Wählen Sie einen Agenten, um den visuellen Pipeline-Editor, Debugger und Live-Chat zu öffnen",noAgents:"Keine Agenten gefunden — erstellen Sie einen auf der Agenten-Seite",chat:"Chat",backToAgent:"Zurück zum Agenten",selectStageHint:"Wählen Sie eine Erweiterung in der Pipeline, um deren Konfiguration direkt zu bearbeiten",noConfig:"Diese Pipeline-Stufe hat keine Konfigurations-URI",unsupportedType:"Für diesen Erweiterungstyp ist kein Editor verfügbar"},O={general:"Allgemein",kbName:"Name der Knowledge Base",kbNamePlaceholder:"z.B. produkt-dokus, faq, internes-wiki",kbNameHint:"Wird verwendet, um auf diese KB aus LLM-Tasks zuzugreifen",embeddingModel:"Embedding-Modell",provider:"Anbieter",embeddingParams:"Provider-Parameter",embeddingParamsHint:"Modellname, API-Key (nutzen Sie ${vault:...} für Secrets), etc.",vectorStore:"Vektorspeicher",storeType:"Store-Typ",storeParams:"Verbindungsparameter",chunking:"Dokumenten-Chunking",chunkStrategy:"Strategie",chunkSize:"Chunk-Größe",chunkOverlap:"Überlappung",overlapHint:"Überlappung hilft, den Kontext zwischen Chunks zu erhalten",chunkPreview:"Vorschau (wie ein Dokument aufgeteilt wird)",chunkBlocks:"{{count}} Chunks à ~{{size}} Zeichen mit {{overlap}} Zeichen Überlappung",retrievalDefaults:"Abruf-Standards",retrievalHint:"Diese Standards können pro Task in der LLM-Konfiguration überschrieben werden.",maxResults:"Max. Ergebnisse (top-K)",minScore:"Min. Ähnlichkeits-Score",ingestion:"Dokumenten-Aufnahme",dropFiles:"Dokumente hierhin ziehen zum Aufnehmen",dropHint:"Text, Markdown oder beliebige Textdateien",browse:"Durchsuchen",pasteText:"Oder Textinhalt einfügen",pastePlaceholder:"Dokumententext hier einfügen...",ingestText:"Text aufnehmen",ingestionHistory:"Aufnahme-Status",saveFirstIngestion:"Speichern Sie diese Knowledge Base zuerst, um die Dokumenten-Aufnahme zu aktivieren.",addParam:"Parameter hinzufügen"},H={welcome:{title:"Willkommen bei EDDI",subtitle:"Ihr KI-Agent-Kommandozentrum",introText:"Der EDDI Manager ist Ihr Werkzeug zum Erstellen, Testen und Betreiben von KI-Agenten.",capabilitiesTitle:"Was Sie tun können",capabilitiesSubtitle:"Alles, was Sie für produktionsreife KI-Agents benötigen",buildAgents:"Agents erstellen",buildAgentsDesc:"KI-Agents mit dem Wizard oder von Grund auf konfigurieren",designWorkflows:"Workflows entwerfen",designWorkflowsDesc:"Drag-and-Drop Pipeline-Builder mit Verhaltensregeln und Tools",testRealtime:"In Echtzeit testen",testRealtimeDesc:"Chatten Sie mit Agents inklusive Streaming-Antworten und Debugging",monitorOperate:"Überwachen & Betreiben",monitorOperateDesc:"Gespräche, Audit-Trails, Secrets und Quotas – an einem Ort",readyTitle:"Bereit loszulegen?",readySubtitle:"Sie können jede Tour später über das Hilfe-Menü neu starten",startTour:"Tour starten",exploreOwn:"Ich schaue mich selbst um"},tour:{back:"Zurück",next:"Weiter",skip:"Überspringen",finish:"Beenden",stepOf:"Schritt {{current}} von {{total}}",dashboard:{title:"Dashboard-Tour",step1Title:"Ihr Kommandozentrum",step1Desc:"Die Seitenleiste gliedert alles in Management, Entwicklung und Betrieb.",step2Title:"Plattform im Überblick",step2Desc:"Live-Zahlen zu Agents, Workflows und Gesprächen. Klicken Sie auf Kacheln für den Direktzugriff.",step3Title:"Schnellaktionen",step3Desc:"Mit dem Agent Wizard erstellen Sie den ersten Agent in unter 2 Minuten.",step4Title:"Nach Ihren Wünschen",step4Desc:"Wechseln Sie das Theme oder die Sprache über die jeweiligen Optionen."},agents:{title:"Agents-Tour",step1Title:"Agenten-Assistent",step1Desc:"Der Wizard führt Sie durch die Agenten-Erstellung: Modellauswahl, Prompting und Deployment.",step2Title:"Manuelle Erstellung",step2Desc:"Erstellen Sie blanke Agents und konfigurieren Sie sie mit voller JSON-Kontrolle.",step3Title:"Suchen & Filtern",step3Desc:"Finden Sie Agents sofort und wechseln Sie zwischen Karten- und Listenansicht.",step4Title:"Ihre Agent-Flotte",step4Desc:"Klicken Sie auf Agenten, um zur Detailseite für Deployment, Chat und Workflows zu gelangen."},workflows:{title:"Workflows-Tour",step1Title:"Workflows erstellen",step1Desc:"Workflows definieren die Prozessier-Pipeline – eine Sequenz von Tasks wie LLM-Aufrufe oder Regeln.",step2Title:"Ihre Workflows",step2Desc:"Klicken Sie zur Bearbeitung auf den Drag-and-Drop Editor.",step3Title:"Aufgeräumte Ansicht",step3Desc:"Suchen Sie nach Namen und wechseln Sie zwischen Grid und sortierbaren Tabellen."},chat:{title:"Chat-Tour",step1Title:"Agent wählen",step1Desc:"Wählen Sie einen deployten Agent für ein Gespräch aus.",step2Title:"Streaming-Modus",step2Desc:"Token-Streaming in Echtzeit zeigt Worte einzeln – gut für Latenzprüfungen.",step3Title:"Gesprächshistorie",step3Desc:"Öffnen Sie die Seitenleiste, um vorherige Unterhaltungen fortzuführen.",step4Title:"Chat starten",step4Desc:"Mit Eingabe antwortet der Agent sofort unter Nutzung Ihrer Tools."},resources:{title:"Ressourcen-Tour",step1Title:"Erweiterungs-Bibliothek",step1Desc:"Diese Ressourcen sind die Bausteine von Workflows.",step2Title:"LLM-Konfigurationen",step2Desc:"Prägen Sie das Gehirn des Agenten: Parameter, Prompts und Backup-Modelle.",step3Title:"Regeln & API",step3Desc:"Definieren Sie API-Calls oder statische Flow-Bedingungen, die auch als Tools dienen können."},conversations:{title:"Konversations-Tour",step1Title:"Suchfunktion",step1Desc:"Gespräche schnell per ID, Agent oder Nachricht finden.",step2Title:"Status-Filter",step2Desc:"Filterung nach Aktiv, Fehler, In Arbeit etc.",step3Title:"Gesprächsliste",step3Desc:"Jede Unterhaltung lässt sich zur detaillierten Debug-Anlayse öffnen."},groups:{title:"Diskussionsgruppen-Tour",step1Title:"Gruppe anlegen",step1Desc:"Sammeln Sie Agents in Gruppen für strukturiertes Feedback.",step2Title:"Gruppen-Suche",step2Desc:"Gruppen gezielt durchsuchen.",step3Title:"Umgebungen steuern",step3Desc:"Polices bearbeiten oder verwaiste Gruppen entfernen."},logs:{newLogs:"Neue Logs",title:"Service-Logs-Tour",step1Title:"Live vs Historie",step1Desc:"Wählen Sie zwischen Live-Streams und Archivsuche.",step2Title:"Stream-Filter",step2Desc:"Nach Agents oder bestimmten Logleveln sortieren.",step3Title:"Exportieren",step3Desc:"Filter logisch anwenden und als Text für Analysen herunterladen."},secrets:{title:"Vault-Tour",step1Title:"Secret anlegen",step1Desc:"Legen Sie z.B. API-Keys verschlüsselt an.",step2Title:"Mandanten-Trennung",step2Desc:"Vault-Anzeige und Schlüssel immer pro Tenant isolieren.",step3Title:"Referenz-Syntax",step3Desc:"Fügen Sie Secrets dynamisch zur Config hinzu, ohne Passwörter direkt in JSON zu notieren."},audit:{title:"Audit-Tour",step1Title:"Suchmodus",step1Desc:"Nachprüfbare Ausführungen (Audits) nach ID und Agent suchen.",step2Title:"Suche ausführen",step2Desc:"Audits garantieren Nachvollziehbarkeit verifizierbarer Histories.",step3Title:"Ledger Export",step3Desc:"Exportieren von Audits ins JSON-Format zur Einhaltung rechtlicher Standards."},schedules:{title:"Schedules-Tour",step1Title:"Trigger planen",step1Desc:"Legen Sie Cron-Jobs oder Heartbeats an, die Agents in gewählten Intervallen antriggern.",step2Title:"System-Rhythmus",step2Desc:"Prüfen Sie Gesamtsumme oder fehlschlagende Scheduled Tasks.",step3Title:"Schedule-Managment",step3Desc:"Jobs pausieren, reaktivieren oder testen."},quotas:{saveSuccess:"Kontingent gespeichert",resetSuccess:"Nutzungszähler zurückgesetzt",resetConfirmDesc:"Setzt sofort alle Nutzungszähler (Unterhaltungen, API-Aufrufe, monatliche Kosten) für den Mandanten „default“ auf null. Dies kann nicht rückgängig gemacht werden.",resetConfirmTitle:"Nutzungszähler zurücksetzen?",title:"Quota-Tour",step1Title:"Sicherheitslimits",step1Desc:"Setzen Sie harte Obergrenzen für Kosten, Logs oder Chat-Durchsatz.",step2Title:"Echtzeitmetriken",step2Desc:"Beobachten Sie, was Tenants aktuell belasten.",step3Title:"Änderungen übernehmen",step3Desc:"Neue Configs fangen Lastspitzen ohne Latenz ab."},coordinator:{title:"Coordinator-Tour",step1Title:"Ereignisquelle",step1Desc:"Event-Source-Metriken im Backend einsehen.",step2Title:"Verarbeitung",step2Desc:"Abarbeitung von Queue-Aufträgen über Cluster hinweg.",step3Title:"Unzustellbare Nachrichten",step3Desc:"Abgestützte Tasks überprüfen, wieder einreihen (replay) oder löschen."},orphans:{confirmPurgeAll:"ALLE {{count}} verwaisten Ressourcen dauerhaft löschen? Der Server löscht alle — Ihre Auswahl wird nicht angewendet. Dies kann nicht rückgängig gemacht werden.",title:"Orphans-Tour",step1Title:"Scan-Tool",step1Desc:"Entfernen Sie unverlinkte Fragmente der Konfiguration.",step2Title:"Weiche Löschung",step2Desc:"Inkludieren Sie Soft-Deletes in Final-Säuberungen.",step3Title:"Saubere DB",step3Desc:"Report anzeigen und Ressourcen aufräumen."}},help:{title:"Hilfe & Tour",platformTour:"Plattform-Tour",resetAll:"Alle Touren zurücksetzen",resetConfirm:"Fortschritt aller Touren zurücksetzen?"},offer:{message:"Neu hier? Starten Sie die {{page}}",accept:"Anzeigen",dontAsk:"Nicht nochmal fragen"}},Z={status:"Plattformstatus",online:"Online",offline:"Offline",checking:"Verbindung wird geprüft…",connected:"Verbunden",disconnected:"Getrennt",instance:"Instanz",latency:"Latenz",lastChecked:"Zuletzt geprüft",justNow:"gerade eben",secondsAgo:"vor {{count}}s"},U={live:"Live",reconnecting:"Verbindung wird wiederhergestellt…"},_={title:"Neue {{type}}",newAgent:"Neuer Agent",newGroup:"Neue Gruppe",quickCreate:"Schnellerstellung",quickCreateTitle:"Schnelle {{type}}-Erstellung",quickCreateDesc:"Legen Sie Name und Beschreibung fest. Details konfigurieren Sie später.",guidedSetup:"Geführtes Setup",guidedSetupDesc:"Schrittweises Setup mit LLM-Provider, Prompts und Deployment."},j=JSON.parse('{"actionConflict":"Ein anderer Vorgang läuft noch, oder diese Diskussion akzeptiert diese Aktion nicht mehr. Bitte erneut versuchen.","actionTimeout":"Ein Mitglieds-Agent hat nicht rechtzeitig geantwortet. Bitte erneut versuchen.","actionUnreachable":"Ein Mitglieds-Agent konnte nicht erreicht werden. Bitte erneut versuchen.","addMember":"Mitglied hinzufügen","allowHtmlTooltip":"Wenn aktiviert, wird HTML-Inhalt (bereinigt) gerendert. Nur mit vertrauenswürdigen Agenten verwenden.","askQuestion":"Stellen Sie eine Frage zur Diskussion in der Gruppe…","assignAgents":"Weisen Sie jeder Mitgliedsrolle Agenten zu.","blankDesc":"Alles manuell konfigurieren.","characters":"Zeichen","chooseTemplate":"Wählen Sie eine Vorlage oder beginnen Sie von Grund auf.","closeConfirmDescription":"Das Schließen beendet dauerhaft alle Mitglieder-Gespräche und bereinigt alle kurzlebigen Agenten. Weitere Folgefragen oder Fortsetzungen sind nicht möglich. Dies kann nicht rückgängig gemacht werden.","composeQuestion":"Frage verfassen","continueButton":"Fortsetzen","continueHint":"Führt alle Phasen als neue Runde erneut aus; jeder Agent behält die Erinnerung an frühere Runden. Zu einer Fortsetzung können keine Anhänge hinzugefügt werden.","continuePlaceholder":"Führen Sie diese Diskussion mit einer Nachfrage fort…","continueStreamStarted":"Fortsetzung gestartet — Live-Streaming","count":"{{count}} Gruppen","createSuccess":"Gruppe erfolgreich erstellt","discussing":"Agenten diskutieren…","enterToSend":"Enter zum Senden","expandInput":"Eingabe erweitern","followupHint":"Stellen Sie einem Mitglied eine direkte Folgefrage. Der Agent behält den vollständigen Kontext der Diskussion; der Austausch wird zum Transkript hinzugefügt.","followupPlaceholder":"Diesem Mitglied eine Folgefrage stellen…","inputDisabledApproval":"Wartet auf Genehmigung…","inputDisabledClosed":"Diese Diskussion ist geschlossen","inputDisabledCompleted":"Diskussion abgeschlossen","inputDisabledEnded":"Diese Diskussion wurde beendet","inputDisabledInProgress":"Diskussion läuft…","membersCount":"{{count}} Mitglieder","moderator":"Moderator (für die Zusammenfassung)","namePlaceholder":"z. B. Beratungsgremium","newDiscussion":"Neue Diskussion","newShort":"Neu","noModerator":"Kein Moderator","noResponse":"Keine Antwort","contentTruncated":"[Inhalt gekürzt]","protocolMaxRetries":"Max. Wiederholungen","protocolMaxRounds":"Max. Runden","protocolOnFailure":"Bei Fehler","protocolSettings":"Protokoll","protocolTimeout":"Zeitlimit","protocolUnavailable":"Nicht verfügbar","question":"Frage","readyToDiscuss":"Bereit zur Diskussion","responding":"antwortet…","reviewMemberRoster":"Mitgliederliste","reviewMembers":"Mitglieder","reviewModerator":"Moderator","reviewNoModerator":"Keiner (automatische Zusammenfassung deaktiviert)","reviewRounds":"Max. Runden","reviewTimeout":"Agent-Timeout","reviewUnassigned":"Nicht zugewiesen","reviewUnassignedHint":"Gehen Sie zurück, um vor dem Erstellen Agenten zuzuweisen.","selectAgent":"Agent auswählen…","selectOrStart":"Wählen Sie eine frühere Diskussion aus dem Verlauf oder geben Sie unten eine Frage ein, um eine neue zu starten.","shiftEnter":"neue Zeile","skipped":"Übersprungen","sortByMembers":"Nach Mitgliedern sortieren","sortByStyle":"Nach Stil sortieren","speakingCount":"{{count}} sprechen","startBlank":"Von Grund auf beginnen","startDiscussion":"Diskutieren","stateCompleted":"Abgeschlossen","stateCreated":"Erstellt","stateFailed":"Fehlgeschlagen","stateSynthesizing":"Wird zusammengefasst…","stepBasics":"Grundlagen","stepMembers":"Mitglieder","stepReview":"Überprüfung","stepTemplate":"Vorlage","submitShortcut":"Strg+Enter zum Absenden","synthesis":"Synthese","synthesizing":"Moderator fasst zusammen…","hitlSelectPhase":"Wählen Sie mindestens eine Phase aus, die eine Freigabe erfordert.","empty":"Noch keine Gruppen","emptyDescription":"Gruppen ermöglichen es mehreren Agents, bei strukturierten Diskussionen zusammenzuarbeiten.","createGroup":"Gruppe erstellen","unnamed":"Unbenannte Gruppe","noDescription":"Keine Beschreibung","count_one":"{{count}} Gruppe","count_other":"{{count}} Gruppen","confirmDelete":"Diese Gruppe löschen?","confirmDeleteDesc":"Die Gruppenkonfiguration wird dauerhaft gelöscht.","duplicateSuccess":"Gruppe dupliziert","members":"Mitglieder","discussionStyle":"Diskussionsstil","maxRounds":"Max. Runden","styleTaskForce":"Task Force","stateAwaitingApproval":"Genehmigung ausstehend","stateCancelled":"Abgebrochen","phasePlan":"Planung","phaseExecute":"Ausführung","phaseVerify":"Überprüfung","preConfiguredTasks":"Vorkonfigurierte Aufgaben","dynamicAgents":"Dynamische Agenten","dynamicCreation":"Erstellung","dynamicRecruitment":"Rekrutierung","dynamicDelegation":"Delegierung","lifecyclePolicy":"Lebenszyklus","allowedProviders":"Anbieter","liveIndicator":"● LIVE","htmlToggle":"HTML","memberTypeGroup":"Gruppe","moderatorBadge":"⭐ Mod","styleColumn":"Stil","membersColumn":"Mitglieder","memberOverflow":"+{{count}} weitere","defaultLabel":"Gruppe","liveDiscussion":"Live","state":{"CREATED":"Erstellt","IN_PROGRESS":"In Bearbeitung","SYNTHESIZING":"Wird zusammengefasst","COMPLETED":"Abgeschlossen","FAILED":"Fehlgeschlagen","ERROR":"Fehler","AWAITING_APPROVAL":"Wartet auf Genehmigung","CANCELLED":"Abgebrochen","AWAITING_HUMAN_INPUT":"Warten auf Mitglied","CLOSED":"Geschlossen"},"preConfiguredTasksCount":"Vorkonfigurierte Aufgaben ({{count}})","entryType":{"QUESTION":"Frage","OPINION":"Meinung","CRITIQUE":"Kritik","REVISION":"Überarbeitung","CHALLENGE":"Einwand","DEFENSE":"Verteidigung","ARGUMENT":"Argument","REBUTTAL":"Erwiderung","SYNTHESIS":"Synthese","ERROR":"Fehler","SKIPPED":"Übersprungen","PLAN":"Plan","TASK_RESULT":"Aufgabenergebnis","VERIFICATION":"Überprüfung","FOLLOW_UP":"Nachfrage","ABSTAINED":"Enthalten","DISSENT":"Widerspruch","CONVERGENCE":"Konvergenz","FACILITATION":"Moderation","VOTE":"Stimme","PROPOSAL":"Vorschlag","BARGAIN":"Gegenangebot","HUMAN_INPUT":"Menschliche Eingabe","RETRO":"Retrospektive","BID":"Gebot"},"flow":{"Opinion":"Meinung","Discussion":"Diskussion","Synthesis":"Synthese","Critique":"Kritik","Revision":"Überarbeitung","Challenge":"Einwand","Defense":"Verteidigung","Independent":"Unabhängig","AnonymousSharing":"Anonymes Teilen","Revised":"Überarbeitet","ProOpening":"Pro-Eröffnung","ConOpening":"Kontra-Eröffnung","Rebuttals":"Erwiderungen","Judgment":"Urteil","Plan":"Planung","Execute":"Ausführung","Verify":"Überprüfung","Synthesize":"Zusammenfassung"},"lifecycle":{"EPHEMERAL":"kurzlebig","KEEP_DEPLOYED":"bereitgestellt lassen","UNDEPLOY_ONLY":"nur zurückziehen","AGENT_DECIDES":"Agent entscheidet"},"dynamicMax":"✓ (max {{count}})","dynamicMaxPerTask":"✓ (max {{count}}/Aufgabe)","protocolMaxTurns":"Max. Züge","speakingOrderTooltip":"Reihenfolge: #{{order}}","allowedModels":"Modelle","inheritParentModel":"Modell erben","enabled":"Aktiviert","disabled":"Deaktiviert","turnOrderSequential":"sequenziell","turnOrderParallel":"parallel","requiresApproval":"Genehmigung erforderlich","item":"Element","items":"Elemente","contextScope":{"NONE":"unabhängig","FULL":"vollständiger Kontext","LAST_PHASE":"letzte Phase","ANONYMOUS":"anonym","OWN_FEEDBACK":"eigenes Feedback","TASK_ONLY":"nur Aufgabe","TASK_WITH_DEPS":"Aufgabe + Abhängigkeiten"},"configuration":"Konfiguration","deleteGroupOnly":"Nur Gruppe löschen","deleteGroupOnlySuccess":"Gruppe gelöscht (Agenten behalten)","deleteGroupOnlyWarning":"Dies löscht die Gruppe. Alle Mitglieds-Agenten werden behalten.","deleteGroupAndAgents":"Gruppe + alle Agenten löschen","deleteWithMembersSuccess":"Gruppe und alle Mitglieds-Agenten gelöscht (Soft-Delete)","deleteWithMembersWarning":"Dies wird die Gruppe und alle {{count}} Mitglieds-Agenten per Soft-Delete löschen. Sie können wiederhergestellt werden.","hideDiscussions":"Diskussionsbereich ausblenden","showDiscussions":"Diskussionsbereich einblenden","hideConfig":"Konfigurationsbereich ausblenden","showConfig":"Konfigurationsbereich einblenden","hitlSection":"Menschliche Freigabe","hitlApprovalPoints":"Freigabe bei","hitlOnTaskRejection":"Bei Ablehnung","hitlEdit":"Bearbeiten","hitlSaved":"Freigabe-Einstellungen gespeichert","hitlEnable":"Menschliche Freigabe erforderlich","hitlApprovalPhases":"Freigabepflichtige Phasen","hitlNotConfigured":"Keine Freigabesperren konfiguriert — auf Bearbeiten klicken, um eine menschliche Freigabe zu verlangen.","driftTitle":"Gruppenkonfiguration während der Pause geändert","driftRecovery":"Die Fortsetzung wurde abgebrochen, weil sich die Phasen der Gruppe geändert haben. Die Diskussion wartet weiterhin auf eine Freigabe — die Konfiguration korrigieren (Bearbeiten, im Konfigurationsbereich) und erneut freigeben oder abbrechen.","discussionStarted":"Diskussion gestartet — Live-Streaming","continueStarted":"Neue Runde gestartet","followupSent":"Folgefrage gesendet","discussionClosed":"Diskussion geschlossen","backToGroups":"Zurück zu Gruppen","noDiscussions":"Noch keine Diskussionen","askBelow":"Stellen Sie unten eine Frage, um zu beginnen","exitFullscreen":"Vollbild beenden","enterFullscreen":"Vollbild","discussions":"Diskussionen","discussionComplete":"Diskussion abgeschlossen","continueDiscussion":"Fortsetzen (neue Runde)","followupMember":"Bei einem Mitglied nachfassen","closeDiscussion":"Diskussion schließen","currentRound":"Aktuell in Runde","startNextRound":"Nächste Runde starten","selectMember":"Mitglied auswählen","sendFollowup":"Folgefrage senden","closeConfirmTitle":"Diese Diskussion schließen?","closeConfirmButton":"Diskussion schließen","closeConfirmDismiss":"Zurück","protocolMaxCost":"Kostenobergrenze","protocolOnCostExceeded":"Bei Erreichen","costAbort":"Abbrechen","costSynthesize":"Jetzt zusammenfassen","deliberationSection":"Beratung","recordDissents":"Minderheitenvotum","agentFiledTasks":"Von Agenten angelegte Aufgaben","agentFiledCaps":"Grenzen","agentFiledCapsValue":"{{perDiscussion}} / Diskussion · {{perTurn}} / Zug","moderatorlessWarning":"Auf einen Moderator beschränkt, den diese Gruppe nicht hat: {{phases}}. Das erste Mitglied nach Sprechreihenfolge springt ein.","roleCoverageWarning":"Kein Mitglied trägt die Rolle „{{role}}“ – stattdessen sprechen in {{phases}} alle Mitglieder.","delegationDepth":"Max. Tiefe","delegationTimeout":"Delegations-Timeout","secondsShort":"{{seconds}}s","delegationTargets":"Positivliste","phaseBehaviour":"Phasenverhalten","phaseBehaviourNone":"Weder Enthaltung noch Konvergenz konfiguriert — mit „Bearbeiten“ dürfen Mitglieder passen, oder eine wiederholte Phase endet bei Einigkeit.","abstentionShort":"enthalten","convergenceShort":"Konvergenz ≥{{threshold}}","phasesSaved":"Phaseneinstellungen gespeichert","phasesNoneToEdit":"Diese Gruppe definiert keine Phasen. Wähle einen Diskussionsstil oder ergänze Phasen in der Konfiguration, bevor du phasenweises Verhalten einstellst.","phaseRepeats":"×{{repeats}}","allowAbstention":"Enthaltung erlauben","allowAbstentionHelp":"Ein Mitglied darf in dieser Runde nichts Neues beitragen, statt sich zu wiederholen.","convergenceEnable":"Bei Konvergenz früh beenden","convergenceHelp":"Ein Richter vergleicht jede Wiederholung mit der vorigen und beendet die Phase, sobald sich die Mitglieder nicht mehr bewegen. Kostet einen Aufruf je Wiederholung.","convergenceNeedsRepeats":"Nur bei einer wiederholten Phase verfügbar — ein einzelner Durchlauf hat keinen Vergleich.","convergenceMinRepeats":"Min. Wiederholungen","convergenceThreshold":"Schwellenwert","convergenceJudge":"Richter","judgeModerator":"Moderator","judgeService":"Dienst","judgeServiceNote":"Wird akzeptiert, ist aber noch nicht angebunden — die Engine weicht auf den Moderator aus und protokolliert eine Warnung.","convergenceReached":"Konvergiert","convergenceChecked":"Konvergenzprüfung","convergenceScore":"Übereinstimmung {{score}}","decisionWinner":"Sieger: {{winner}}","decisionTie":"Unentschieden","decisionDecidedAt":"Entschieden in {{phase}}","decisionUnparsed":"Die Antwort des Richters ließ sich nicht als strukturiertes Urteil lesen; sie steht unten wörtlich, und das Fazit bleibt Fließtext.","minorityReport":"Minderheitenvotum ({{total}})","attachFiles":"Dateien anhängen","attachmentLimit":"Höchstens {{max}} Anhänge pro Diskussion","attachmentTooLarge":"{{name}} ist zu groß zum Anhängen","attachmentReadFailed":"{{name}} konnte nicht gelesen werden","removeAttachment":"{{name}} entfernen","decisionType":{"VERDICT":"Urteil","VOTE":"Abstimmung","AGREEMENT":"Einigung","AWARD":"Zuschlag","NONE":"Keine strukturierte Entscheidung"},"abstainedBody":"Hat in dieser Runde nichts Neues beigetragen.","convergenceSkipped_one":"· {{count}} weitere Runde übersprungen","convergenceSkipped_other":"· {{count}} weitere Runden übersprungen","attachmentTotalTooLarge":"Anhänge überschreiten die Gesamtgrößenbeschränkung","convergenceInert":"Konfiguriert, aber diese Phase läuft nur einmal — der Richter kann nie starten. Entferne die Einstellung oder gib der Phase mehr als eine Wiederholung.","questionTooLong":"Eine Frage darf höchstens {{max}} Zeichen lang sein","charactersOverLimit":"{{current}} / {{max}} Zeichen","advancedSection":"Erweiterte Zusammenarbeit","artifactConfigLabel":"Gemeinsame Artefakte","artifactConfigValue":"max. {{count}}/Diskussion","artifactCreatedBadge":"{{name}} erstellt (v{{version}})","artifactDraft":"Entwurf","artifactFinal":"Endgültig","artifactLastEdited":"Zuletzt bearbeitet von {{agent}}","artifactUpdatedBadge":"{{name}} aktualisiert (v{{version}})","artifactsTitle":"Gemeinsame Artefakte ({{count}})","concessionLedgerTitle":"Zugeständnisprotokoll","contextWindowLabel":"Transkriptfenster","contextWindowValue":"letzte {{count}} Einträge{{summarized}}","facilitatorLabel":"Moderator (Facilitator)","facilitatorMoves":"Erlaubte Aktionen","humanMemberConfigLabel":"Timeout für menschliche Züge","humanTurnRequestedAt":"Angefordert","humanTurnResponsePlaceholder":"Ihre Antwort","humanTurnSubmit":"Absenden","humanTurnSubmitted":"Ihre Antwort wurde erfasst","humanTurnSubmitting":"Wird gesendet…","humanTurnTimeout":"Timeout","humanTurnTitle":"Sie sind an der Reihe, {{name}}","inputDisabledHumanTurn":"Warten auf den Zug eines Mitglieds…","memberTypeHuman":"Mensch","negotiationAcceptedBy":"Akzeptiert von: {{names}}","negotiationGaveUp":"hat aufgegeben","negotiationInReturnFor":"im Austausch für","negotiationOpen":"Offen","negotiationRound":"Runde {{round}}","negotiationSuperseded":"Ersetzt","negotiationTableTitle":"Verhandlungstisch","notSet":"nicht festgelegt","retroConfigLabel":"Retro-Erkenntnisse","retroConfigValue":"{{perRun}}/Lauf, max. {{stored}} gespeichert","stateAwaitingHumanInput":"Warten auf Mitglied","summarized":"zusammengefasst","transcriptWindowed":"Die ersten {{count}} Transkripteinträge wurden zu einer fortlaufenden Zusammenfassung zusammengefasst, um den Kontext späterer Züge zu begrenzen. Bewegen Sie den Mauszeiger für die Zusammenfassung.","voteMethod":"Methode","voteMethodApproval":"Zustimmungswahl","voteMethodMajority":"Mehrheit","voteOptionsExplicit":"Explizite Liste","voteOptionsLastSynthesis":"Aus der letzten Synthese extrahieren","voteOptionsList":"Optionen (eine pro Zeile)","voteOptionsSource":"Abstimmungsoptionen","voteQuorum":"Quorum","voteTieHuman":"Mensch entscheidet (noch nicht verfügbar)","voteTieModerator":"Moderator entscheidet","voteTieNoDecision":"Keine Entscheidung","voteTiePolicy":"Bei Gleichstand","voteWeightByConfidence":"Nach Konfidenz gewichten","waitIndefinitely":"Unbegrenzt warten","advancedSaved":"Kollaborationseinstellungen gespeichert","advancedNotConfigured":"Kein Transkriptfenster, kein Retro-Gedächtnis, keine gemeinsamen Artefakte und kein Moderator konfiguriert — zum Aktivieren auf Bearbeiten klicken.","contextWindowHint":"Begrenzt den Kontext jedes Zuges in langen Diskussionen, indem ältere Einträge in eine laufende Zusammenfassung überführt werden.","contextWindowEntries":"Vollständig behaltene aktuelle Einträge","contextWindowSummarize":"Zusammenfassen, was aus dem Fenster fällt","contextWindowTruncateNote":"Ältere Einträge werden stattdessen durch den Hinweis „N frühere Einträge ausgelassen“ ersetzt.","retroConfigHint":"Erlaubt einer Retro-Phase, Erkenntnisse ins Teamgedächtnis zu schreiben, die in spätere Diskussionen einfließen.","retroPerRun":"Pro Lauf","retroStored":"Max. gespeichert","artifactConfigHint":"Ermöglicht Mitgliedern, gemeinsam Dokumente zu verfassen, die über den Zug hinaus bestehen bleiben.","artifactsPerDiscussion":"Max. pro Diskussion","facilitatorHint":"Ein Agent, der an jedem Prüfpunkt einsteigt und genau einen Zug aus der von Ihnen erlaubten Liste wählt — nie ein freier Orchestrator.","facilitatorAgent":"Moderator-Agent","facilitatorPickAgent":"Agenten auswählen…","facilitatorAgentRequired":"Wählen Sie den Agenten, der moderiert.","facilitatorCheckAfter":"Prüfzeitpunkt","facilitatorCheckpoint":{"EACH_PHASE":"Nach jeder Phase","EACH_REPEAT":"Nach jeder Runde innerhalb einer Phase"},"facilitatorMove":{"CONTINUE":"Fortfahren","END_PHASE":"Phase vorzeitig beenden","EXTEND_PHASE":"Phase verlängern","CALL_VOTE":"Abstimmung einberufen","RECRUIT":"Mitglied hinzuziehen","ESCALATE_HUMAN":"An einen Menschen eskalieren"},"facilitatorNoMove":"Erlauben Sie mindestens einen Zug, oder schalten Sie den Moderator ab.","facilitatorMidPhaseNeedsRepeat":"Eine Phase zu beenden oder zu verlängern wirkt mitten in der Phase und braucht daher den Prüfpunkt je Runde.","facilitatorEscalateTo":"Eskalieren an (Principal-ID)","facilitatorEscalateRequired":"Eine Eskalation pausiert die Diskussion für jemanden — geben Sie an, für wen.","facilitatorMaxMoves":"Max. Züge pro Diskussion","assignmentModeLabel":"Aufgabenzuweisung","assignmentModeRole":"Nach Rolle (Planer weist zu)","assignmentModeBid":"Per Gebot (Mitglieder bieten, höchste Zuversicht gewinnt)","assignmentModeBidShort":"Per Gebot","assignmentModeRoleHint":"Der Planer oder die Konfiguration weist jede Aufgabe zu, oder im Rundlauf.","assignmentModeBidHint":"Fällt auf Rollenzuweisung zurück, wenn sich eine Auktion nicht lohnt — weniger als zwei Bietende oder zwei offene Aufgaben, oder zu wenig Zugbudget.","contextWindowSummarizer":"Zusammenfasser","contextWindowNoSummarizer":"Keiner","contextWindowModel":"Zusammenfassungsmodell","contextWindowModelPlaceholder":"Modell","contextWindowSummarizerMissing":"Ohne Zusammenfassungsmodell fällt der Überlauf stillschweigend auf den einfachen Kürzungshinweis zurück.","facilitatorMaxMovesCeiling":"Höchstens {{max}} — der Moderator ist ein begrenzter Eingriff, kein Orchestrator.","reviewUnassignedWarning_one":"{{count}} Mitglied nicht zugewiesen","reviewUnassignedWarning_other":"{{count}} Mitglieder nicht zugewiesen","retroRecordedBadge_one":"{{phase}}: {{count}} Erkenntnis im Team-Gedächtnis gespeichert","retroRecordedBadge_other":"{{phase}}: {{count}} Erkenntnisse im Team-Gedächtnis gespeichert","artifactRevisions_one":"{{count}} frühere Revision","artifactRevisions_other":"{{count}} frühere Revisionen","styles":{"ROUND_TABLE":{"label":"Gesprächsrunde","flow":"Alle äußern ihre Sicht und bauen über mehrere Runden aufeinander auf"},"PEER_REVIEW":{"label":"Gegenseitige Prüfung","flow":"Alle antworten zunächst allein, kritisieren sich gegenseitig und überarbeiten dann"},"DEVIL_ADVOCATE":{"label":"Advocatus Diaboli","flow":"Ein Mitglied greift die Position der Gruppe an, die anderen verteidigen sie"},"DELPHI":{"label":"Anonyme Runden","flow":"Alle antworten anonym und überarbeiten in jeder Runde – niemand richtet sich nach dem ersten Beitrag"},"DEBATE":{"label":"Pro/Contra-Debatte","flow":"Eine Seite argumentiert dafür, eine dagegen, danach folgen Erwiderungen und ein Urteil"},"TASK_FORCE":{"label":"Einsatzgruppe","flow":"Die Moderation plant die Arbeit, die Mitglieder erledigen Aufgaben parallel, die Ergebnisse werden geprüft"},"NEGOTIATION":{"label":"Verhandlung","flow":"Die Parteien tauschen Vorschläge aus, bis sie sich einigen; nur andernfalls entscheidet eine Schlichtung"},"CUSTOM":{"label":"Eigener Ablauf","flow":"Phasen, die Sie selbst festlegen"}},"unsupportedStyle":"Dieser Server unterstützt {{style}} nicht. Wählen Sie ein anderes Format, um fortzufahren."}'),q={title:"Aufgabenübersicht",pending:"Ausstehend",inProgress:"In Bearbeitung",completed:"Abgeschlossen",verified:"Verifiziert",failed:"Fehlgeschlagen",assignedTo:"Zugewiesen an {{name}}",dependsOn:"Abhängig von: {{tasks}}",emptyTitle:"Warte auf Aufgabenplan",emptyDescription:"Der Moderator erstellt einen Aufgabenplan, sobald die Diskussion beginnt.",emptyState:"Der Aufgabenplan erscheint hier, wenn der Moderator ihn erstellt",unassigned:"Nicht zugewiesen",progress:"{{done}} von {{total}} Aufgaben erledigt",verificationPassed:"Bestanden",verificationFailed:"Fehlgeschlagen",showMore:"mehr anzeigen",showLess:"weniger anzeigen",awaitingApproval:"Warten auf Genehmigung",filedBy:"Angelegt von {{agent}}",wonByBid:"Durch Gebot gewonnen — {{confidence}} % Konfidenz, {{complexity}}"},J={groupMemberHint:"Diese Gruppe nimmt als verschachtelte Untergruppe an der Diskussion teil.",noGroupsHint:"Erstellen Sie zuerst eine Gruppe und fügen Sie sie dann als verschachteltes Untergruppen-Mitglied hinzu.",noGroupsYet:"Keine Gruppen verfügbar",selectGroup:"Vorhandene Gruppe auswählen…",title:"Gruppen-Assistent",subtitle:"Stellen Sie ein Team von KI-Beratern für Ihre Fragen zusammen",backToGroups:"Zurück zu Gruppen",templateTitle:"Mit einer Vorlage beginnen",templateDesc:"Wählen Sie eine vorkonfigurierte Gruppe oder starten Sie von Grund auf.",startBlank:"Von Grund auf",blankDesc:"Alles manuell konfigurieren",configTitle:"Gruppenkonfiguration",configDesc:"Benennen Sie Ihre Gruppe und wählen Sie den Diskussionsstil",namePlaceholder:"z.B. Beratungsgremium",descPlaceholder:"Wofür ist diese Gruppe?",membersTitle:"Team zusammenstellen",membersDesc:"Wählen Sie für jeden Platz einen bestehenden Agent oder erstellen Sie einen neuen.",addMember:"Mitglied hinzufügen",refreshAgents:"Agentenliste aktualisieren",existingAgents:"vorhandene Agents",displayName:"Agentenname",displayNamePlaceholder:"Geben Sie dem Agent einen Namen…",rolePlaceholder:"Rolle (z.B. Marketing, Technik)",useExisting:"Vorhandenen verwenden",createNew:"Neu erstellen",selectAgent:"Agent auswählen…",systemPrompt:"System-Prompt",provider:"LLM-Anbieter",model:"Modell",apiKey:"API-Schlüssel",apiKeyPlaceholder:"sk-…",createThisAgent:"Agent erstellen",creatingAgent:"Agent wird erstellt…",agentReady:"Agent erstellt & bereitgestellt",agentCreated:'Agent "{{name}}" erstellt',agentCreateFailed:"Agent konnte nicht erstellt werden: {{error}}",moderator:"Moderator",moderatorHint:"Fasst die Diskussion zusammen",addModerator:"Moderator hinzufügen",removeModerator:"Moderator entfernen",createModerator:"Moderator-Agent erstellen",moderatorReady:"Moderator-Agent bereit",moderatorCreated:"Moderator-Agent erstellt",creatingModerator:"Moderator wird erstellt…",creatingSlot:"{{name}} wird erstellt…",creatingGroup:"Gruppe wird erstellt…",needMembers:"Mindestens 2 Mitglieder erforderlich",reviewTitle:"Überprüfen & Erstellen",reviewDesc:"Prüfen Sie die Gruppenkonfiguration vor der Erstellung.",reviewMembers:"Mitglieder",autoCreateNotice:"{{count}} Agents werden automatisch erstellt, wenn Sie auf Gruppe erstellen klicken",autoCreateHint:"Jeder Agent wird automatisch erstellt und bereitgestellt, bevor die Gruppe zusammengestellt wird.",unassignedWarning:"{{count}} Mitglieder auf 'Vorhandenen verwenden' gesetzt, aber kein Agent ausgewählt",unassignedHint:"Diese Mitglieder werden bei Diskussionen übersprungen. Gehen Sie zurück, um Agents zuzuweisen.",flowPreview:"Diskussionsablauf",createGroup:"Gruppe erstellen",created:"Gruppe erstellt!",viewGroup:"Gruppe öffnen",createAnother:"Weitere erstellen",success:"Gruppe erfolgreich erstellt!",advancedSettings:"Erweiterte Protokolleinstellungen",agentTimeout:"Agent-Timeout (Sekunden)",maxRetries:"Max. Wiederholungen",onAgentFailure:"Bei Agent-Fehler",onMemberUnavailable:"Bei nicht verfügbarem Mitglied",maxTurns:"Max. Züge (0 = unbegrenzt)",maxTurnsHelp:"Sicherheitslimit für Agent-Züge insgesamt. Standard-Backend-Limit ist 50.",policySkip:"Überspringen",policyRetry:"Wiederholen",policyAbort:"Abbrechen",policyFail:"Fehlschlagen",hintDebate:"Weisen Sie Mitgliedern die Rollen PRO und CON zu. Pro argumentiert zuerst, dann Con, gefolgt von Erwiderungen und Urteil.",hintDevilAdvocate:"Weisen Sie mindestens einem Mitglied die Rolle DEVIL_ADVOCATE zu. Es wird den Konsens der Gruppe hinterfragen.",hintPeerReview:"Jedes Mitglied kritisiert individuell die Arbeit aller anderen und überarbeitet dann basierend auf dem erhaltenen Feedback.",hintDelphi:"Alle Mitglieder antworten unabhängig und anonym. Nach jeder Runde sehen sie die anonymen Ergebnisse und können anpassen. Max. Runden steuert die Anzahl der anonymen Iterationen.",hintNegotiation:"Die Mitglieder nennen ihre Interessen, legen Vorschläge vor und feilschen dann – „Max. Runden“ legt fest, wie viele Verhandlungsrunden laufen. Die Moderation schlichtet nur, wenn keine Einigung zustande kommt.",roleCoverageWarning:"Kein Mitglied hat die Rolle „{{role}}“",roleCoverageHint:"Der Server lässt ersatzweise alle Mitglieder in {{phases}} sprechen, sodass dieselben Personen beide Seiten vertreten. Gehen Sie zurück zu „Mitglieder“ und setzen Sie das Rollenfeld.",hintTaskForce:"Der Moderator erstellt einen Aufgabenplan, weist Arbeit parallel an Agenten zu, überprüft dann die Ergebnisse und fasst sie zusammen.",hintCustom:"Definieren Sie Ihre eigenen Phasen manuell. Benutzerdefinierte Phasen können nach der Erstellung über die API konfiguriert werden.",hintRoundTable:"Alle Mitglieder teilen ihre Meinungen, diskutieren dann die Ansichten der anderen über mehrere Runden, bevor der Moderator zusammenfasst.",protocolSummary:"Protokoll",hitlTitle:"Menschliche Freigabe erforderlich",hitlDesc:"Die Diskussion an ausgewählten Phasen anhalten und auf eine menschliche Entscheidung warten, bevor fortgefahren wird.",hitlApprovalPoints:"Zur Freigabe anhalten bei",hitlNoPhases:"Dieser Stil hat keine voreingestellten Phasen zum Steuern.",hitlNoApprovalPoints:"Mindestens eine Phase auswählen, sonst pausiert die Diskussion nie.",hitlTimeoutPolicy:"Wenn keine rechtzeitige Entscheidung",hitlApprovalTimeout:"Freigabe-Zeitlimit",hitlTimeoutInvalid:"Positive ISO-8601-Dauer eingeben, z. B. PT15M oder PT1H30M.",hitlTimeoutHint:"ISO-8601-Dauer, z. B. PT30S, PT15M, PT2H.",hitlGranularity:"Freigabe-Granularität",hitlGranularityHint:"Freigabe auf Aufgabenebene gilt für die TASK_FORCE-Ausführung — jede Aufgabe einzeln genehmigen oder ablehnen.",hitlOnTaskRejection:"Wenn eine Aufgabe abgelehnt wird",hitlPinNote:"Das Aktivieren von Freigabepunkten legt die Diskussionsphasen dieser Gruppe fest ({{granularity}}-Granularität).",hitlReviewBadge:"Menschliche Freigabe",humanOnTimeoutAbort:"Diskussion abbrechen",humanOnTimeoutLabel:"Bei Zeitüberschreitung",humanOnTimeoutSkip:"Zug überspringen und fortfahren",humanPrincipalId:"Principal-ID",humanPrincipalIdHint:"Die Identität, die die Beiträge dieses Mitglieds einreichen darf — die Diskussion pausiert und wartet, wenn es an der Reihe ist.",humanPrincipalIdPlaceholder:"Login-/Principal-ID des Benutzers",humanTurnSettingsHint:"Die Diskussion pausiert und wartet, wenn ein menschliches Mitglied an der Reihe ist. Legen Sie fest, was passiert, wenn keine rechtzeitige Antwort erfolgt.",humanTurnSettingsTitle:"Einstellungen für Züge menschlicher Mitglieder",humanTurnTimeoutInvalid:"Keine gültige ISO-8601-Dauer, z. B. PT24H oder P1D.",humanTurnTimeoutLabel:"Zug-Timeout (ISO-8601-Dauer)",humanTurnTimeoutPlaceholder:"z. B. PT24H — leer lassen für unbegrenztes Warten",memberTypeHuman:"Mensch"},Q={advisoryBoard:"Beratungsgremium",advisoryBoardDesc:"Fünf Geschäftsperspektiven – Marketing, Technik, Finanzen, Recht, Strategie – beurteilen dieselbe Frage, danach fasst die Moderation zusammen.",peerReview:"Peer-Review-Runde",peerReviewDesc:"Die Prüfenden beurteilen, was Sie einbringen – Entwurf, Plan oder Vorschlag –, kritisieren die Beurteilungen der anderen, überarbeiten sie, und die Moderation führt alles zusammen.",riskAssessment:"Risikobewertung",riskAssessmentDesc:"Alle geben ihre Einschätzung ab, ein Mitglied vertritt bewusst die Gegenposition, die anderen halten dagegen, danach fasst die Moderation zusammen, was standgehalten hat.",forecasting:"Unabhängige Schätzungen",forecastingDesc:"Die Mitglieder antworten über mehrere Runden anonym und sehen dazwischen nur anonymisierte Ergebnisse – niemand richtet sich nach dem ersten Beitrag.",proCon:"Pro/Contra-Debatte",proConDesc:"Zwei Mitglieder argumentieren für den Vorschlag, zwei dagegen, danach folgen Erwiderungen und ein Urteil der Moderation.",negotiation:"Verhandlung",negotiationDesc:"Zwei Parteien nennen ihre Interessen, legen Vorschläge vor und tauschen Runde für Runde Zugeständnisse aus; die Moderation schlichtet nur, wenn keine Einigung zustande kommt.",taskForce:"Einsatzgruppe",taskForceDesc:"Die Moderation zerlegt das Ziel in Aufgaben, die Mitglieder bearbeiten sie parallel, danach prüft und verbindet die Moderation die Ergebnisse.",roles:{marketingExpert:"Marketing-Experte",techLead:"Tech-Lead",financeDirector:"Finanzdirektor",legalCounsel:"Rechtsberater",strategyConsultant:"Strategieberater",substanceReviewer:"Inhaltsprüfer",structureReviewer:"Strukturprüfer",riskReviewer:"Risikoprüfer",riskAnalyst:"Risikoanalyst",domainExpert:"Fachexperte",devilsAdvocate:"Advocatus Diaboli",analystA:"Analyst A",analystB:"Analyst B",analystC:"Analyst C",analystD:"Analyst D",proAdvocate1:"Pro-Vertreter 1",proAdvocate2:"Pro-Vertreter 2",conAdvocate1:"Contra-Vertreter 1",conAdvocate2:"Contra-Vertreter 2",partyA:"Partei A",partyB:"Partei B",projectLead:"Projektleiter",researcher:"Forscher",implementer:"Umsetzer",qualityAssurance:"Qualitätssicherung"},assignRoles:"Rollen zuweisen",backToGallery:"Zurück zu den Vorlagen",browseButton:"Aus Vorlage",createButton:"Gruppe erstellen",created:"Gruppe aus Vorlage erstellt",nameLabel:"Gruppenname",selectAgent:"Agent auswählen…",subtitle:"Starten Sie mit einer vorgefertigten, abgestimmten Diskussion — weisen Sie einfach Agenten den benannten Rollen zu.",title:"Gruppenvorlagen",roleCount_one:"{{count}} Rolle zuzuweisen",roleCount_other:"{{count}} Rollen zuzuweisen",empty:"Keine Vorlagen verfügbar",emptyDescription:"Dieser Server liefert keine Gruppenvorlagen mit. Sie können eine Gruppe weiterhin im Assistenten von Grund auf erstellen."},Y={title:"Nutzererinnerungen",subtitle:"Persistente Nutzererinnerungen durchsuchen und verwalten",userIdPlaceholder:"Nutzer-ID eingeben…",searchPlaceholder:"Erinnerungen durchsuchen…",enterUserId:"Geben Sie eine Nutzer-ID ein, um deren Erinnerungen zu durchsuchen",totalEntries:"Einträge gesamt",preferences:"Präferenzen",facts:"Fakten",conflicts:"Konflikte",cat_all:"Alle",cat_preference:"Präferenzen",cat_fact:"Fakten",cat_context:"Kontext",deleteAll:"Alle löschen",deleteAllTitle:"Alle Erinnerungen löschen",deleteAllDesc:"Alle Erinnerungen dieses Nutzers werden unwiderruflich gelöscht.",deleteAllConfirm:"Alle löschen",entryDeleted:"Erinnerungseintrag gelöscht",allDeleted:"Alle Erinnerungen des Nutzers gelöscht",noResults:"Keine Erinnerungseinträge gefunden",value:"Wert",sourceAgent:"Quell-Agent",accessCount:"Zugriffe",created:"Erstellt",updated:"Aktualisiert",sourceConversation:"Quell-Gespräch",conflicted:"Widerspruch"},$={title:"Nutzereigenschaften",subtitle:"Gespeicherte longTerm-Slot-Eigenschaften je Nutzer durchsuchen und verwalten",userIdPlaceholder:"Nutzer-ID eingeben…",searchPlaceholder:"Eigenschaften filtern…",enterUserId:"Geben Sie eine Nutzer-ID ein, um deren Eigenschaften anzuzeigen",key:"Schlüssel",type:"Typ",value:"Wert",deleteAll:"Alle löschen",deleteAllTitle:"Alle Eigenschaften löschen",deleteAllDesc:"Alle Eigenschaften dieses Nutzers werden unwiderruflich gelöscht.",deleted:"Eigenschaften gelöscht",noResults:"Keine Eigenschaften gefunden",showingCount:"{{count}} Eigenschaften"},X={agentId:"Agenten-ID",environment:"Umgebung",title:"Agenten-Auslöser",subtitle:"Absichten mit Agentenbereitstellungen für automatisches Routing verknüpfen",create:"Neuer Auslöser",createTitle:"Auslöser erstellen",editTitle:"Auslöser bearbeiten",intent:"Absicht",deployments:"Agentenbereitstellungen",addDeployment:"Agent hinzufügen",agents:"Agenten",empty:"Noch keine Auslöser konfiguriert",created:"Auslöser erstellt",updated:"Auslöser aktualisiert",deleted:"Auslöser gelöscht",deleteTitle:"Auslöser löschen",deleteDesc:"Auslöser für Absicht „{{intent}}“ endgültig löschen?",searchPlaceholder:"Nach Absicht oder Agenten-ID filtern…"},ee={agentCount:"Agenten",confidence:"Konfidenz",partialError:"Einige Fähigkeitsabfragen sind fehlgeschlagen",registryOverview:"Registry-Übersicht",skillName:"Fähigkeit",skills:"Fähigkeiten",title:"Fähigkeiten-Erkennung",subtitle:"Agenten anhand ihrer deklarierten Fähigkeiten und Kompetenzen finden",searchPlaceholder:"Fähigkeiten suchen…",strategyHighest:"Höchste Konfidenz",strategyAll:"Alle Ergebnisse",registeredSkills:"Registrierte Fähigkeiten",noSkills:"Keine Fähigkeiten gefunden",matchingAgents:"Passende Agenten",noMatches:"Keine Agenten für diese Fähigkeit gefunden"},ne={title:"Agent exportieren",loading:"Ressourcenbaum wird geladen…",selectResources:"Zu exportierende Ressourcen auswählen",required:"Erforderlich",snippets:"Snippets",allSelected:"Alle Ressourcen ausgewählt",countSelected:"{{count}} von {{total}} Ressourcen ausgewählt",exportSelected:"Ausgewählte exportieren"},te={title:"Agent importieren",dropZone:"ZIP-Datei hierher ziehen oder zum Durchsuchen klicken",dropZoneHint:"Exportiertes Agentenarchiv (.zip)",strategyLabel:"Import-Strategie",createNew:"Als neuen Agenten erstellen",createNewDesc:"Erstellt eine neue Kopie mit neuen IDs. Am besten für den Erstimport.",mergeSync:"Mit bestehendem zusammenführen",mergeSyncDesc:"Aktualisiert vorhandene Ressourcen. Erstellt neue, falls nicht vorhanden.",upgradeExisting:"Bestehenden Agenten aktualisieren",upgradeDesc:"Ressourcen strukturell mit einem Ziel-Agenten abgleichen. Am besten für Stufenübernahmen.",syncRemote:"Von Remote-Instanz synchronisieren",syncDesc:"Mit einer anderen EDDI-Instanz verbinden und einen Agenten live synchronisieren.",importNow:"Jetzt importieren",previewChanges:"Änderungen ansehen",selectTargetAgent:"Ziel-Agent auswählen",upgradeTargetHint:"Die importierten Ressourcen werden strukturell mit diesem Agenten abgeglichen.",chooseAgent:"— Agent wählen —",sourceAgent:"Quell-Agent (Remote)",targetAgent:"Ziel-Agent (Lokal)",createNewTarget:"Neuen Agenten erstellen",resource:"Ressource",type:"Typ",match:"Zuordnung",action:"Aktion",new:"neu",updated:"aktualisiert",unchanged:"unverändert",selected:"ausgewählt",mergeNow:"Ausgewählte importieren",syncNow:"Jetzt synchronisieren",upgradeNow:"Jetzt aktualisieren",importing:"Agent wird importiert…",contentIdentical:"Inhalt identisch",targetContent:"Ziel",sourceContent:"Quelle"},re={title:"Agenten-Synchronisierung",subtitle:"Agenten zwischen EDDI-Instanzen synchronisieren",connection:"Quell-Instanz",sourceUrl:"URL der Quell-EDDI-Instanz",authToken:"Autorisierungstoken",authHint:"Optional. Wird als X-Source-Authorization-Header gesendet.",connect:"Verbinden",connected:"Verbunden",agentsFound:"Agenten",connectionFailed:"Verbindung fehlgeschlagen",agentMapping:"Agenten-Zuordnung",previewAll:"Alle vorschauen",syncSelected:"Ausgewählte synchronisieren",remote:"Remote",createNew:"Neu erstellen",changes:"Änderungen",agentsSelected:"Agenten ausgewählt",totalResources:"Ressourcen",syncSuccess:"Synchronisierung abgeschlossen",syncError:"Synchronisierung fehlgeschlagen",empty:"Verbinden Sie sich mit einer Quell-Instanz, um die Agenten-Synchronisierung zu starten.",autoMatched:"Automatisch zugeordnet",previewFirst:"Änderungen vor dem Synchronisieren ansehen"},ie={actionCreate:"Neu",actionUpdate:"Aktualisieren",actionSkip:"Aktuell",actionConflict:"Konflikt"},se={title:"Nutzer-Konversationen",subtitle:"Intent-Benutzer-Konversationszuordnungen verwalten",lookup:"Suche",intent:"Absicht",userId:"Benutzer-ID",agentId:"Agenten-ID",environment:"Umgebung",conversationId:"Konversations-ID",binding:"Aktive Zuordnung",enterBoth:"Geben Sie Intent und Benutzer-ID ein",notFound:"Keine Zuordnung gefunden",create:"Zuordnung erstellen",createTitle:"Zuordnung erstellen",created:"Zuordnung erstellt",deleteTitle:"Zuordnung löschen",deleteDesc:'Zuordnung für Intent "{{intent}}" und Benutzer "{{userId}}" entfernen?',deleted:"Zuordnung gelöscht"},ae={placeholder:"Seiten, Agenten, Aktionen suchen…",noResults:"Keine Ergebnisse gefunden.",recent:"Kürzlich",navigate:"Navigation",agents:"Agenten",actions:"Schnellaktionen",createAgent:"Neuen Agenten erstellen",openChat:"Chat öffnen",kbdNavigate:"navigieren",kbdSelect:"auswählen",kbdClose:"schließen"},oe={agentIdPlaceholder:"Agenten-ID zur Nachrichtenverarbeitung",botToken:"Bot-Token",botTokenHint:"Bot-Benutzer-OAuth-Token. Verwenden Sie eine Tresor-Referenz für mehr Sicherheit.",botTokenPlaceholder:"xoxb-… oder ${vault:slack-bot-token}",channel:"Kanal",channelId:"Slack-Kanal-ID",channelIdCol:"Kanal-ID",channelIdHint:"Rechtsklick auf einen Slack-Kanal → Kanaldetails anzeigen → Kanal-ID kopieren",channelsPlural:"Kanäle",channelType:"Kanaltyp",confirmDelete:"Kanal löschen?",confirmDeleteDesc:"Diese Kanalintegration wird dauerhaft entfernt.",create:"Kanal erstellen",createTitle:"Kanalintegration erstellen",defaultAgentId:"Standard-Agenten-ID",defaultTargetHint:"Das Standardziel verarbeitet alle Nachrichten, die keinem Trigger-Schlüsselwort entsprechen. Nach der Erstellung können weitere Ziele hinzugefügt werden.",empty:"Noch keine Kanäle",emptyDesc:"Erstellen Sie eine Kanalintegration, um Agenten mit Slack zu verbinden.",name:"Name",namePlaceholder:"z. B. Engineering AI Hub",openSlackApps:"Slack-App-Dashboard öffnen",searchPlaceholder:"Kanäle suchen…",signingSecret:"Signierungsgeheimnis",signingSecretHint:"Von der Seite „Grundlegende Informationen“ Ihrer Slack-App.",signingSecretPlaceholder:"Hex-String oder ${vault:slack-signing-secret}",slackSetupGuide:"Slack-Einrichtungsanleitung",slackSetupSummary:"Erstellen Sie eine Slack-App, konfigurieren Sie Bot-Token-Bereiche (app_mentions:read, chat:write, im:history, channels:history, groups:history) und fügen Sie die Anmeldedaten hier ein.",target:"Ziel",targets:"Ziele",targetsCol:"Ziele",type:"Typ",unnamed:"Unbenannter Kanal",version:"Version"},le={saveSuccess:"Kanal gespeichert",addTarget:"Ziel hinzufügen",addTrigger:"Trigger hinzufügen…",agentId:"Agenten-ID",botToken:"Bot-Token",channelId:"Slack-Kanal-ID",cooldown:"Abklingzeit (s)",general:"Allgemein",groupId:"Gruppen-ID",isDefault:"Standard",maxCost:"Max €/Tag",maxDaily:"Max/Tag",name:"Name",observe:"Beobachten",observeDesc:"Passiv überwachen und selektiv antworten",observeKeywords:"Trigger-Schlüsselwörter",observeMimeTypes:"Trigger-MIME-Typen",observeMode:"Beobachtungsmodus",observeSettings:"Einstellungen Beobachtungsmodus",platformConfig:"Plattformkonfiguration",rawConfig:"Rohkonfiguration",removeTarget:"Entfernen",requiredEvents:"Erforderliche Event-Abonnements:",requiredScopes:"Erforderliche Bot-Token-Bereiche:",setDefault:"Als Standard festlegen",signingSecret:"Signierungsgeheimnis",targetName:"Name",targets:"Nachrichtenrouting-Ziele",targetType:"Typ",triggerHint:"Benutzer geben „Schlüsselwort: Nachricht“ ein, um an dieses Ziel weiterzuleiten",triggerKeywords:"Trigger-Schlüsselwörter",triggers:"Trigger",type:"Kanaltyp",webhookHint:"Fügen Sie diese URL in das Feld „Request URL“ unter Event Subscriptions Ihrer Slack-App ein.",webhookUrl:"Webhook-URL",hitlSection:"Human-in-the-Loop-Freigaben (optional)",hitlApprovalChannel:"Freigabe-Channel-ID",hitlApprovalChannelHint:"Slack-Channel, der eine Freigabekarte erhält, wenn eine Konversation pausiert.",hitlApproverUserIds:"Benutzer-IDs der Freigeber",hitlApproverUserIdsHint:"Kommagetrennte Slack-Benutzer-IDs, die über Buttons freigeben dürfen. Ohne diese Liste werden keine Buttons angezeigt (fail-closed)."},ue={loadingApprovalDetails:"Freigabedetails werden geladen …",pendingCount:"{{count}} warten auf Genehmigung",approvalDetailsError:"Es konnte nicht geladen werden, was diese Anfrage bewirken würde, daher kann sie hier nicht genehmigt werden. Ablehnen ist weiterhin sicher.",awaitingHuman:"Warten auf Mensch",awaitingApproval:"Warten auf Genehmigung",approve:"Genehmigen",reject:"Ablehnen",cancel:"Abbrechen",approved:"Genehmigt",rejected:"Abgelehnt",cancelled:"Abgebrochen",pending:"ausstehend",emptyQueue:"Keine ausstehenden Genehmigungen",emptyQueueDescription:"Alle Konversationen laufen — keine menschliche Eingabe erforderlich.",surface:"Oberfläche",regular:"Konversation",group:"Gruppe",pauseReason:"Grund",pausedAt:"Pausiert",timeoutPolicy:"Zeitlimit",timeRemaining:"Verbleibend",overdue:"Überfällig",phase:"Phase",granularity:"Granularität",taskApprovals:"Aufgabengenehmigungen",approveAll:"Alle genehmigen",note:"Notiz hinzufügen (optional)",notePlaceholder:"Eine Notiz zur Entscheidung hinzufügen...",discussionCancelled:"Diskussion abgebrochen",cancelDiscussion:"Diskussion abbrechen",rejectAll:"Alle ablehnen",timeoutWaitIndefinitely:"Unbegrenzt warten",timeoutAutoApprove:"Auto-Genehmigen",timeoutAutoReject:"Auto-Ablehnen",timeoutAbort:"Abbrechen",granularityPhase:"Phase",granularityTask:"Aufgabe",rejectionFail:"Aufgabe fehlschlagen lassen",rejectionRetry:"Aufgabe wiederholen",groupsTruncated:"Es gibt mehr Gruppenfreigaben, als hier angezeigt werden.",groupsLoadError:"Gruppenfreigaben konnten nicht geladen werden.",toolApprovalRequired:"Tool-Freigabe erforderlich",toolCallsAwaiting:"Tool-Aufrufe warten auf Freigabe",executedUngated:"Bereits ausgeführt (ohne Freigabe)",outcomeUnknown:"Eine vorherige Freigabe wurde mitten in der Ausführung unterbrochen — ihre Wirkung ist unbekannt; vor einem erneuten Versuch extern prüfen.",outcomeUnknownShort:"Ergebnis unbekannt",toolApprovalHint:"Freigeben wendet deine Auswahl je Aufruf an (nicht geänderte Aufrufe werden freigegeben). Ablehnen lehnt den gesamten Stapel ab.",toolApprovalHintExplicit:"Jeder Aufruf braucht eine eigene Freigabe oder Ablehnung, bevor du den Stapel freigeben kannst. Ablehnen lehnt den gesamten Stapel ab.",explicitReviewMissing:"Prüfe jeden Aufruf oben, bevor du freigibst.",redactionCaveat:"Die unten angezeigten Argumente sind geschwärzt — ein geheimer Wert erscheint als „“, nicht weggelassen.",gateReason:"Übereinstimmendes Muster",argsTruncated:"Argumente gekürzt",amendArguments:"Argumente ändern (optional)",amendPlaceholder:'Vollständiges Ersatz-JSON-Objekt, z. B. {"to":"ops@acme.com"}. Leer lassen, um das Original zu behalten.',amendTruncated:"Ein Aufruf mit gekürzten Argumenten kann nicht geändert werden — unverändert freigeben oder ablehnen.",amendInvalidJson:"Geänderte Argumente müssen ein gültiges JSON-Objekt sein.",amendTooLarge:"Geänderte Argumente sind zu groß.",review:"Prüfen",tool:"Tool",scopeAll:"Alle ausstehenden Freigaben im gesamten System werden angezeigt.",scopeOwn:"Ausstehende Freigaben für deine Konversationen werden angezeigt.",chatPaused:"Diese Konversation wartet auf eine menschliche Freigabe.",noProgressWaitForHuman:"Auf einen Menschen warten",noProgressAutoReject:"Automatisch ablehnen",noProgressAbort:"Abbrechen",confirmApproveTitle:"Anfrage genehmigen?",confirmApproveDescription:"Diese Konversation genehmigen und fortsetzen?",confirmApproveToolTitle:"Tool-Ausführung genehmigen?",confirmApproveToolDescription:"Beim Genehmigen wird ausgeführt: {{toolNames}}. Dies führt reale Aktionen aus und kann nicht rückgängig gemacht werden.",confirmRejectTitle:"Anfrage ablehnen?",confirmRejectDescription:"Diese Anfrage ablehnen? Die Konversation wird nicht fortgesetzt.",confirmCancelTitle:"Konversation abbrechen?",confirmCancelDescription:"Diese Konversation abbrechen? Alle laufenden Arbeiten werden abgebrochen.",confirmCancelButton:"Konversation abbrechen",confirmCancelGroupTitle:"Diskussion abbrechen?",confirmCancelGroupDescription:"Diese Diskussion abbrechen? Alle laufenden Arbeiten werden abgebrochen.",confirmCancelGroupButton:"Diskussion abbrechen",confirmDismiss:"Zurück",approvalBlockedHeading:"Dies kann hier nicht genehmigt werden",confirmRejectToolTitle:"Tool-Ausführung ablehnen?",confirmRejectToolDescription:"Es wird nichts ausgeführt. Die Konversation wird fortgesetzt und der Agent antwortet ohne {{toolNames}}.",humanTurn:"Zug des Mitglieds",humanTurnReason:"Wartet darauf, dass {{member}} spricht",humanTurnMemberFallback:"ein Mitglied",decidedProgress:"{{decided}} von {{total}} entschieden"},ce={deploying:"Agent wird bereitgestellt…",error:"Etwas ist schiefgelaufen",newConversation:"Neues Gespräch",ready:"Bereit — Nachricht zum Testen eingeben",retry:"Erneut versuchen",saving:"Änderungen werden gespeichert…",starting:"Gespräch wird gestartet…",timeout:"Zeitüberschreitung bei der Bereitstellung",title:"Test-Chat",preparing:"Wird vorbereitet …"},de={auditTrail:"Prüfprotokoll",checking:"Wird geprüft…",coordConnected:"Koordinator verbunden",coordDisconnected:"Koordinator getrennt",coordUnknown:"Koordinator —",createGroup:"Gruppe erstellen",noConversations:"Noch keine Gespräche",offline:"Offline",online:"Online",platform:"Plattform",platformHealth:"Plattformzustand",recentConversations:"Neueste Gespräche",secretVault:"Geheimnistresor",vaultDown:"Vault nicht verfügbar",vaultUp:"Vault bereit",viewLogs:"Protokolle anzeigen"},ge={retry:"Erneut versuchen",title:"Etwas ist schiefgelaufen"},he={auditPseudonymized:"Audit pseudonymisiert",checkingStatus:"Wird geprüft…",confirmDelete:"Ja, alle Daten löschen",confirmDesc:'Dies löscht dauerhaft ALLE Daten des Nutzers "{{userId}}". Diese Aktion kann nicht rückgängig gemacht werden.',confirmTitle:"Datenlöschung bestätigen",conversationsDeleted:"Gelöschte Gespräche",delete:"Alle Daten löschen",deleteSuccess:"Nutzerdaten erfolgreich gelöscht",deleting:"Wird gelöscht…",enterUserIdFirst:"Geben Sie oben eine Nutzer-ID ein, um den Status zu prüfen",export:"Daten exportieren",exportSuccess:"Nutzerdaten erfolgreich exportiert",exporting:"Wird exportiert…",legalDesc:"Der Datenexport (Art. 15/20) liefert eine JSON-Datei mit allen gespeicherten Daten eines Nutzers. Die Löschung (Art. 17) entfernt dauerhaft alle Erinnerungen und Gesprächsdaten, pseudonymisiert Audit-Einträge und kann nicht rückgängig gemacht werden.",legalNotice:"Datenschutzhinweis",liftRestriction:"Einschränkung aufheben",liftingRestriction:"Wird aufgehoben…",logsPseudonymized:"Protokolle pseudonymisiert",memoriesDeleted:"Gelöschte Erinnerungen",restrictProcessing:"Verarbeitung einschränken",restricting:"Wird eingeschränkt…",restrictionApplied:"Verarbeitung für Nutzer eingeschränkt",restrictionDesc:"Schränken Sie die Verarbeitung ein, wenn ein Nutzer die Richtigkeit der Daten bestreitet oder der Verarbeitung widerspricht. Während der Einschränkung bleiben die Daten des Nutzers erhalten, es können jedoch keine neuen Gespräche verarbeitet werden. Dies ist umkehrbar.",restrictionLifted:"Verarbeitungseinschränkung aufgehoben",restrictionTitle:"Verarbeitungseinschränkung (Art. 18)",resultsTitle:"Löschung abgeschlossen",statusActive:"Verarbeitung aktiv",statusUnknown:"Status nicht verfügbar",statusRestricted:"Verarbeitung eingeschränkt",subtitle:"DSGVO-konforme Verwaltung von Nutzerdaten — Löschung (Art. 17), Portabilität (Art. 15/20) und Verarbeitungseinschränkung (Art. 18)",title:"Datenschutz & Compliance",userId:"Nutzer-ID",userIdPlaceholder:"Nutzer-ID eingeben…",userLookup:"Nutzer-Suche"},pe={message:"Demo-Modus — Es werden Beispieldaten angezeigt. Verbinden Sie ein EDDI-Backend für echte Daten."},fe={confirmPurgeAll:"ALLE {{count}} verwaisten Ressourcen dauerhaft löschen? Der Server löscht alle — Ihre Auswahl wird nicht angewendet. Dies kann nicht rückgängig gemacht werden.",deleteSelected:"{{count}} ausgewählte löschen",description:"Finden und bereinigen Sie Ressourcen, die von keinem Agenten oder Workflow referenziert werden.",deselectAll:"Alle abwählen",includeDeleted:"Soft-gelöschte einschließen",lastScanned:"Zuletzt gescannt",noOrphans:"Keine verwaisten Ressourcen gefunden",purge:"Alle bereinigen",purgeSuccess:"{{count}} verwaiste Ressourcen gelöscht",runScan:"Scan ausführen",scan:"Scannen",scanPromptDesc:"Finden Sie Erweiterungskonfigurationen (Regeln, API-Aufrufe, LLMs, Ausgaben), die von keinem Workflow oder Agenten referenziert werden. Bereinigen Sie ungenutzte Ressourcen, um Ihre Plattform aufgeräumt zu halten.",scanPromptTitle:"Plattform scannen",scanning:"Ressourcen werden gescannt…",selectAll:"Alle auswählen",softDeleted:"Gelöscht",title:"Verwaiste Ressourcen",found_one:"{{count}} verwaiste Ressource gefunden",found_other:"{{count}} verwaiste Ressourcen gefunden"},me={apiCallsMinute:"API-Aufrufe / Minute",configuration:"Konfiguration",conversationsToday:"Gespräche heute",description:"Konfigurieren Sie Ratenlimits, Nutzungsobergrenzen und Kostenbudgets pro Mandant.",disable:"Deaktivieren",disabled:"Deaktiviert",enable:"Aktivieren",enabled:"Aktiviert",enforcementOff:"Durchsetzung ist deaktiviert.",enforcementOffHint:"Kontingente werden nicht durchgesetzt. Aktivieren Sie die Durchsetzung und speichern Sie, um die Limits anzuwenden.",limitHint:"-1 = unbegrenzt",liveUsage:"Live-Nutzung",maxAgentsPerTenant:"Max. Agenten / Mandant",maxApiCallsPerMinute:"Max. API-Aufrufe / Minute",maxConversationsPerDay:"Max. Gespräche / Tag",maxMonthlyCostUsd:"Max. monatliche Kosten (USD)",monthlyCost:"Monatliche Kosten",resetConfirmDesc:"Setzt sofort alle Nutzungszähler (Unterhaltungen, API-Aufrufe, monatliche Kosten) für den Mandanten „default“ auf null. Dies kann nicht rückgängig gemacht werden.",resetConfirmTitle:"Nutzungszähler zurücksetzen?",resetCounters:"Zähler zurücksetzen",resetSuccess:"Nutzungszähler zurückgesetzt",saveSuccess:"Kontingent gespeichert",tenantId:"Mandanten-ID",title:"Mandanten-Kontingente"},be={clearVault:"Vault-Referenz löschen",createNew:"Neues Secret erstellen",emptyVault:"Noch keine Secrets gespeichert",filterPlaceholder:"Vault-Schlüssel suchen…",keyNotFound:"Dieser Schlüssel wurde im Vault nicht gefunden",loading:"Schlüssel werden geladen…",noMatch:'Keine Schlüssel für "{{filter}}"',pickFromVault:"Aus Vault auswählen",placeholder:"API-Schlüssel oder ${vault:key-name}",vaultDown:"Vault ist nicht konfiguriert — richten Sie einen Secret-Provider im EDDI-Backend ein"},ke={category:"Kategorie",content:"Prompt-Inhalt",contentLabel:"Snippet-Inhalt",contentPlaceholder:"Du solltest in deinen Antworten umsichtig und sorgfältig sein…",description:"Beschreibung",descriptionPlaceholder:"Was dieses Snippet bewirkt",identity:"Identität",name:"Snippet-Name",namePlaceholder:"z. B. cautious_mode",noTags:"Keine Tags",tagPlaceholder:"z. B. safety, production",tags:"Tags",templateEnabled:"Vorlagenauflösung aktivieren",templateEnabledHint:"Wenn deaktiviert, werden {{}}-Markierungen im Inhalt als wörtlicher Text behandelt (nützlich für Codebeispiele).",usageHint:"Verwendung:"},Ae={deployed:"Bereitgestellt",deploying:"Wird bereitgestellt…",error:"Fehler",notDeployed:"Nicht bereitgestellt",checking:"Wird geprüft…"},Se={subtitle:"Verwalten Sie Erinnerungen, Eigenschaften und Gesprächszuordnungen pro Nutzer",tabs:"Nutzerdaten-Bereiche",title:"Nutzerdaten"},we={deleteKey:"{{key}} löschen",editKey:"{{key}} bearbeiten",tableTitle_one:"{{count}} Variable",tableTitle_other:"{{count}} Variablen",title:"Globale Variablen",description:"Deployment-weite Konfigurationswerte, die in allen Agenten verfügbar sind.",create:"Variable hinzufügen",createTitle:"Globale Variable hinzufügen",editTitle:"Variable bearbeiten",keyLabel:"Schlüssel",keyPlaceholder:"z. B. default-model",keyError:"Nur Buchstaben, Ziffern, Punkte, Unterstriche und Bindestriche.",valueLabel:"Wert",valuePlaceholder:"z. B. gpt-4.1",valueWarning:"Werte sind in der Oberfläche und in Logs sichtbar. Verwenden Sie für sensible Daten den Secrets-Vault.",descriptionLabel:"Beschreibung (optional)",descriptionPlaceholder:"Optionale Beschreibung …",exportableLabel:"In Agent-Exporte einbeziehen",save:"Variable speichern",saveSuccess:"Variable „{{key}}“ gespeichert",deleteSuccess:"Variable „{{key}}“ gelöscht",confirmDeleteTitle:"Variable löschen",confirmDeleteMessage:"Möchten Sie „{{key}}“ wirklich löschen? Agenten, die ${vars:{{key}}} verwenden, sehen dann nicht aufgelöste Referenzen.",empty:"Keine globalen Variablen definiert",emptyHint:"Klicken Sie auf „Variable hinzufügen“, um Ihren ersten deployment-weiten Konfigurationswert anzulegen.",searchPlaceholder:"Variablen filtern …",colKey:"Schlüssel",colValue:"Wert",colDescription:"Beschreibung",colExportable:"Export",colReference:"Referenz",colActions:"Aktionen",exportYes:"In Exporten enthalten",exportNo:"Von Exporten ausgeschlossen",copyVars:"${vars:…}-Referenz kopieren",refCopied:"Kopiert: {{ref}}",infoLine1:"Verwenden Sie {{vars.}} in System-Prompts oder ${vars:} an beliebiger Stelle in Agent-Konfigurationen.",infoLine2:"Änderungen werden innerhalb von 2 Minuten wirksam (Cache-TTL). Verwenden Sie für sensible Werte stattdessen den Secrets-Vault."},ve={endpoints:"Endpunkte",endpointsTotal:"Endpunkte gesamt",groupsSelected:"Gruppen ausgewählt",importOpenApi:"Aus OpenAPI importieren",importSelected:"Ausgewählte Gruppen importieren",importing:"Wird importiert…",selectGroups:"API-Gruppen zum Importieren als separate API-Aufruf-Erweiterungen auswählen"},De=JSON.parse('{"board":{"continuePlaceholder":"Diese Diskussion fortsetzen…","inputDisabledClosed":"Diese Diskussion ist geschlossen","newDiscussion":"Neue Diskussion","noResponseGenerated":"Keine Antwort generiert","awaitingApprovalHint":"Diese Diskussion ist für eine menschliche Genehmigung angehalten.","reviewInManager":"Prüfen","askMore":"{{name}} weiter fragen →","askYourBoard":"Fragen Sie Ihre Task Force …","attachFile":"Datei anhängen","backToLive":"Zurück zur laufenden Diskussion","chatOneOnOne":"1:1-Chat","close":"Schließen","copied":"Kopiert!","copyResponse":"Antwort kopieren","details":"Details","emptyDescription":"Stellen Sie eine Frage, und Ihre Task Force diskutiert sie.","emptyTitle":"Bereit zur Diskussion","error":"Etwas ist schiefgelaufen","fileTooLarge":"Die Datei darf höchstens 10 MB groß sein","fileTypeNotAllowed":"Dieser Dateityp wird nicht unterstützt","hideConfig":"Detailbereich ausblenden","live":"Live","liveNow":"Live","loadingResponse":"Antwort wird geladen","members":"Team","membersPanel":"Teambereich","moderator":"Moderator","noMembers":"Keine Teammitglieder","noSessions":"Noch keine Sitzungen","phase":"Phase","pin":"Antwort anheften","removeAttachment":"Anhang entfernen","running":"Läuft","runningHint":"Diese Diskussion läuft noch — neue Antworten erscheinen automatisch.","send":"Senden","sessions":"Sitzungen","sessionsPanel":"Sitzungsbereich","skipped":"{{name}} — übersprungen","startingDescription":"Ihre Task Force arbeitet daran — Antworten erscheinen hier, sobald sie eintreffen.","startingTitle":"Diskussion läuft","stillDiscussing":"Die Task Force diskutiert noch …","stop":"Stoppen","synthesis":"Synthese","synthesisResult":"Syntheseergebnis","title":"Task Force","toggleConfig":"Detailbereich umschalten","unpin":"Antwort lösen","untitled":"Ohne Titel","viewSessions":"Frühere Sitzungen ansehen"},"thread":{"fileTooLarge":"Datei muss kleiner als 20MB sein","fileTypeNotAllowed":"Dieser Dateityp wird nicht unterstützt","attachmentLimit":"Maximal {{max}} Anhänge pro Nachricht","notForwarded":"Datei gespeichert, aber zu groß für das Modell","uploadFailed":"Upload fehlgeschlagen: {{error}}","noResponse":"Keine Antwort","attachFile":"Datei anhängen","emptySubtitle":"Senden Sie eine Nachricht, um mit {{name}} zu chatten.","emptyTitle":"Chat mit {{name}}","followUp":"Nachfrage zu Ihrer Antwort …","fromSession":"Aus der Sitzung {{boardName}}","placeholder":"Nachricht eingeben …","questionLabel":"Frage","removeAttachment":"Anhang entfernen","responseLabel":"Antwort","send":"Senden","sendError":"Entschuldigung, es ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut.","startingConversation":"Konversation wird gestartet …","toggleContext":"Kontext umschalten","placeholderNamed":"Nachricht an {{name}} …"},"chat":{"agentDetails":"Agenten-Details","selectToView":"Wähle einen Agenten, um Details anzuzeigen","hideDetails":"Details ausblenden","editAgent":"Agent bearbeiten","auditLogs":"Audit-Protokolle","openStudio":"Im Manager öffnen","triggers":"Trigger anzeigen","starterSelected":"Prompt zum Chateingabefeld hinzugefügt","title":"Chat","hideAgentDetails":"Agentendetails ausblenden","showAgentDetails":"Agentendetails anzeigen"},"agentEditor":{"capabilities":"Fähigkeiten","workflows":"Workflows","features":"Funktionen & Sicherheit","a2aEnabled":"Agent-zu-Agent","memoryTools":"Speicher-Werkzeuge","signedMessages":"Signierte Nachrichten","strictMemory":"Strikter Speicher","hitlMode":"Freigabemodus","llmConfig":"Modell & LLM Engine","provider":"Anbieter","mode":"Ausführungsmodus","personaPrompt":"Persona-Systemprompt","starters":"Gesprächseinstiege","channels":"Kanal-Konnektoren","temperature":"Temperatur","contextWindow":"Kontextlimit","activeTools":"Aktive Tools","noLlm":"Kein LLM konfiguriert","noTools":"Keine konfiguriert","add":"Hinzufügen","addCapability":"Fähigkeit hinzufügen","cancel":"Abbrechen","close":"Schließen","confidence":"Konfidenz","confidenceHigh":"Hoch","confidenceLow":"Niedrig","confidenceMedium":"Mittel","description":"Beschreibung","descriptionPlaceholder":"Beschreiben Sie die Expertise dieses Agenten …","discardChanges":"Sie haben ungespeicherte Änderungen. Verwerfen?","loadError":"Agentendaten konnten nicht geladen werden.","noCapabilities":"Keine Fähigkeiten definiert.","removeCapability":"Fähigkeit entfernen","retry":"Erneut versuchen","save":"Änderungen speichern","saveError":"Änderungen konnten nicht gespeichert werden","saveSuccess":"Agent erfolgreich aktualisiert","settings":"Einstellungen","skill":"Fähigkeit","skillPlaceholder":"z. B. Zusammenfassung","systemPrompt":"System-Prompt","systemPromptPlaceholder":"Anweisungen, die Verhalten, Persönlichkeit und Expertise dieses Agenten festlegen …","title":"Agent bearbeiten"},"settings":{"hitlApprovalPointsNote":"Diese Einstellungen bestimmen, wie eine Genehmigung abläuft. Welche Punkte einer Diskussion eine Genehmigung erfordern, wird pro Phase im Manager konfiguriert.","hitlOpenManager":"Genehmigungspunkte festlegen","deliberation":"Qualität der Beratung","deliberationDesc":"Minderheitsmeinungen festhalten und Mitgliedern erlauben, mitten in der Diskussion entdeckte Arbeit anzulegen","recordDissents":"Minderheitenvotum erfassen","recordDissentsDesc":"Nach jeder Zusammenfassung erhält jedes Mitglied, das sie nicht verfasst hat, einen kurzen Zug, um verbleibende Einwände zu nennen. Kostet einen zusätzlichen Aufruf je Mitglied.","agentFiledTasks":"Mitglieder eigene Aufgaben anlegen lassen","agentFiledTasksDesc":"Arbeit, die ein Agent mitten in der Diskussion entdeckt, wird zu einer echten Aufgabe, die die nächste Ausführungswelle aufgreift. Aus bedeutet, dass die Werkzeuge für diese Gruppe gar nicht existieren.","maxTasksPerDiscussion":"Max. angelegte Aufgaben / Diskussion","maxTasksPerDiscussionHelp":"Zählt nur von Agenten angelegte Aufgaben, damit ein großer geplanter Rückstand sie nicht aufbraucht.","maxTasksPerTurn":"Max. angelegte Aufgaben / Zug","maxTasksPerTurnHelp":"Begrenzt einen ausufernden Einzelzug; die Diskussionsgrenze begrenzt langsames Abdriften.","maxCost":"Kostenobergrenze (USD)","maxCostUnlimited":"Kein Limit","maxCostHelp":"Leer lassen für kein Limit. Ein bereits laufender Zug kann die Summe noch leicht über die Grenze treiben.","onCostExceeded":"Beim Erreichen der Grenze","costSynthesize":"Jetzt zusammenfassen — direkt zum Fazit springen","costAbort":"Abbrechen — die Diskussion sofort scheitern lassen","costCeilingInvalid":"Eine Kostenobergrenze muss größer als 0 sein. Für kein Limit das Feld leeren.","maxDelegationDepth":"Max. Delegationstiefe","maxDelegationDepthHelp":"A delegiert an B, B an C — das ist Tiefe 2. Der Sprung, der dies überschreiten würde, wird abgelehnt; das stoppt einen Delegationszyklus.","delegationTimeout":"Delegations-Timeout (Sekunden)","delegationTimeoutHelp":"Wie lange ein delegierender Agent auf seinen Delegierten wartet. Erhöhe den Wert, wenn der Delegierte Werkzeuge oder eine verschachtelte Diskussion ausführt.","allowedDelegationTargets":"Delegations-Positivliste","allowedDelegationTargetsHint":"Beliebiger bereitgestellter Agent","allowedDelegationTargetsHelp":"Kommagetrennte Agent-IDs. Leer lassen, um jeden bereitgestellten Agenten zuzulassen.","moderatorlessWarning":"Auf einen Moderator beschränkt, den diese Task Force nicht hat: {{phases}}. Das erste Mitglied nach Sprechreihenfolge springt ein.","memberLimit":"Eine Task Force kann höchstens {{max}} Mitglieder haben","explicitPhasesNote":"Diese Task Force definiert ihre Phasen explizit ({{phases}}); sie laufen genau so. Framework und Rundenzahl oben ändern den Ablauf nicht mehr.","explicitPhasesEdit":"Phasen bearbeiten","addMemberTitle":"Teammitglied hinzufügen","selectAgent":"Agent","pickAgent":"Agent suchen oder auswählen…","displayName":"Anzeigename","displayNameHint":"z. B. Analyst","role":"Rolle","roleHint":"z. B. Prüfer","addMember":"Mitglied hinzufügen","nameRequired":"Ein Name für die Task Force ist erforderlich","saveSuccess":"Task-Force-Einstellungen gespeichert","saveError":"Einstellungen konnten nicht gespeichert werden","deleteAllSuccess":"Task Force und alle Agenten gelöscht","deleteError":"Task Force konnte nicht gelöscht werden","deleteSuccess":"Task Force gelöscht","duplicateMember":"Dieser Agent ist bereits Mitglied","loadError":"Einstellungen konnten nicht geladen werden","backToBoard":"Zurück zur Task Force","untitled":"Unbenannte Task Force","subtitle":"Einstellungen und Workforce Ihrer Task Force konfigurieren","general":"Allgemeine Einstellungen","generalDesc":"Grundkonfiguration Ihrer Task Force","boardName":"Name der Task Force","boardNameHint":"Namen der Task Force eingeben…","description":"Beschreibung","descriptionHint":"Worum geht es in dieser Task Force?","discussionStyle":"Kollaborationsmodell","maxRounds":"Max. Runden","moderator":"Moderator","noModerator":"Keiner","team":"Workforce","teamDesc":"Verwalten Sie die Agenten, die an Ihrer Task Force teilnehmen","roleOptional":"Optional","typeAgent":"Agent","typeModerator":"Moderator","removeMember":"Mitglied entfernen","minMembers":"Mindestens 2 Mitglieder erforderlich","protocol":"Protokoll & Ausfallsicherheit","protocolDesc":"Zeitlimits, Wiederholungen und Fehlerbehandlung für die Agentenkommunikation","agentTimeout":"Agenten-Zeitlimit (Sekunden)","maxRetries":"Max. Wiederholungen","onAgentFailure":"Bei Agentenfehler","failureSkip":"Überspringen — ohne diesen Agenten fortfahren","failureRetry":"Wiederholen — den Agenten erneut versuchen","failureAbort":"Abbrechen — die gesamte Diskussion stoppen","onUnavailable":"Bei nicht verfügbarem Mitglied","unavailableSkip":"Überspringen — ohne dieses Mitglied fortfahren","unavailableFail":"Fehlschlagen — Diskussion anhalten","maxTurns":"Max. Züge (0 = unbegrenzt)","hitl":"Menschliche Aufsicht","hitlDesc":"Festlegen, wann und wie Menschen KI-Entscheidungen prüfen","hitlGranularity":"Granularität der Genehmigung","granularityPhase":"Pro Phase — Prüfung nach jeder Diskussionsphase","granularityTask":"Pro Aufgabe — jede einzelne Aufgabe prüfen","hitlTimeout":"Genehmigungs-Zeitlimit","hitlTimeoutHint":"z. B. PT15M (15 Min.), PT1H (1 Std.)","hitlTimeoutHelp":"ISO-8601-Dauer. Leer lassen für kein Zeitlimit.","hitlTimeoutPolicy":"Bei Zeitüberschreitung","timeoutWait":"Unbegrenzt warten","timeoutAutoApprove":"Auto-Genehmigen","timeoutAutoReject":"Auto-Ablehnen","timeoutAbort":"Diskussion abbrechen","hitlRejection":"Bei Ablehnung","rejectionFail":"Fehlschlagen — die Aufgabe stoppen","rejectionRetry":"Wiederholen — den Agenten um Überarbeitung bitten","dynamic":"Dynamische Agenten","dynamicDesc":"Agenten dürfen während Diskussionen andere Agenten rekrutieren, erstellen oder an sie delegieren","dynamicEnable":"Dynamische Agenten aktivieren","dynamicEnableDesc":"Agenten dürfen andere Agenten rekrutieren, erstellen oder an sie delegieren","allowCreation":"Erstellung erlauben","allowCreationDesc":"Agenten können bei Bedarf neue Agenten starten","allowRecruitment":"Rekrutierung erlauben","allowRecruitmentDesc":"Agenten können bereits bereitgestellte Agenten rekrutieren","allowDelegation":"Delegierung erlauben","allowDelegationDesc":"Agenten können Teilaufgaben an andere Agenten delegieren","maxCreated":"Max. erstellt","maxRecruited":"Max. rekrutiert","maxDelegations":"Max. Delegierungen / Aufgabe","inheritModel":"Modell des übergeordneten Agenten erben","inheritModelDesc":"Erstellte Agenten verwenden das LLM-Modell des übergeordneten Agenten","lifecycle":"Lebenszyklus-Richtlinie","lifecycleEphemeral":"Kurzlebig — nach der Diskussion gelöscht","lifecycleKeep":"Bereitgestellt lassen — bleibt nach der Diskussion bestehen","lifecycleUndeploy":"Nur zurückziehen — gestoppt, aber nicht gelöscht","lifecycleAgentDecides":"Agent entscheidet — der Agent bestimmt sein eigenes Schicksal","tasks":"Vorkonfigurierte Aufgaben","tasksDesc":"Aufgaben vorab definieren, damit die PLAN-Phase übersprungen wird und Agenten sofort ausführen","taskSubject":"Betreff","taskSubjectHint":"Was ist zu tun?","taskDescription":"Beschreibung","taskDescHint":"Detaillierte Anweisungen für diese Aufgabe…","taskAssignRole":"Rolle zuweisen","taskPriority":"Priorität","removeTask":"Aufgabe entfernen","addTask":"Aufgabe hinzufügen","dangerZone":"Gefahrenbereich","dangerDesc":"Unwiderrufliche Aktionen — mit Vorsicht fortfahren","deleteBoard":"Task Force auflösen","deleteBoardDesc":"Entfernt diese Task-Force-Konfiguration. Die Agenten bleiben erhalten.","deleteBoardAll":"Task Force + alle Agenten auflösen","deleteBoardAllDesc":"Entfernt diese Task Force und alle Mitglieds-Agenten dauerhaft.","unsavedChanges":"Sie haben ungespeicherte Änderungen","templateSaved":"Als Vorlage gespeichert","saveAsTemplate":"Als Vorlage speichern","saving":"Wird gespeichert…","saveChanges":"Änderungen speichern","deleteAllTitle":"Task Force und alle Agenten auflösen?","deleteTitle":"Task Force auflösen?","deleteAllConfirm":"Dadurch werden diese Task Force und alle ihre Mitglieds-Agenten dauerhaft aufgelöst. Diese Aktion kann nicht rückgängig gemacht werden.","deleteConfirm":"Dadurch wird diese Task-Force-Konfiguration dauerhaft aufgelöst. Die Mitglieds-Agenten sind nicht betroffen.","title":"Einstellungen"},"nav":{"dashboard":"Übersicht","templates":"Vorlagen"},"advisor":{"avatarLabel":"Avatar von {{name}}"},"analytics":{"agentPerformance":"Agentenleistung","avgLength":"Ø Länge","avgLengthChars":"{{count}} Zeichen","chatWithAgent":"Mit Agent chatten","compareAgent":"Vergleichen mit …","contributionBreakdown":"Aufschlüsselung der Beiträge","contributions":"Beiträge","editAgent":"Agent bearbeiten","errorRate":"Fehlerrate","errors":"Fehler","sessions":"Sitzungen"},"back":"Zurück","boardList":"Task-Force-Liste","boardsLabel":"Task Forces","bottomNav":"Untere Navigation","card":{"advisorCount":"{{count}} Experten","delete":"Löschen","duplicate":"Duplizieren","duplicated":"Task Force dupliziert","history":"Verlauf","live":"Live","moreActions":"Weitere Aktionen","noMembers":"Keine Experten","openSettings":"Einstellungen öffnen","pin":"Anheften","settings":"Einstellungen","unpin":"Lösen","untitled":"Task Force ohne Titel"},"closeSidebar":"Seitenleiste schließen","comparison":{"avgResponse":"Ø Antwort","close":"Schließen","contributions":"Beiträge","errorRate":"Fehlerrate","evenlyMatched":"Beide Agenten sind gleichauf","leadsIn":"führt bei {{count}} von 5 Kennzahlen","sessions":"Sitzungen","title":"Agentenvergleich","totalContent":"Inhalt gesamt"},"dashboard":{"assembleTaskForce":"Task Force zusammenstellen","cancel":"Abbrechen","deleteConfirm":"Möchten Sie diese Task Force wirklich auflösen? Diese Aktion kann nicht rückgängig gemacht werden.","deletedCount":"{{count}} Task Forces gelöscht","deleteError":"Task Force konnte nicht gelöscht werden","deletePartialFail":"{{success}} gelöscht, {{fail}} fehlgeschlagen","deleteSelected":"Löschen","deleteSuccess":"Task Force gelöscht","deleteWorkforce":"Task Force auflösen","deselect":"Auswahl aufheben","duplicateError":"Task Force konnte nicht dupliziert werden","gridView":"Rasteransicht","listView":"Listenansicht","loadError":"Ihr Arbeitsbereich konnte nicht geladen werden. Bitte versuchen Sie es erneut.","pinned":"Angeheftet","retry":"Erneut versuchen","select":"Auswählen","selected":"{{count}} ausgewählt","selectItem":"Auswählen","subtitle":"Kollaborative Agentengruppen, die komplexe Herausforderungen lösen.","taskForcesLabel":"Aktive Task Forces","title":"Aktive Task Forces","viewToggle":"Ansichtsmodus"},"export":{"clipboard":"In die Zwischenablage kopieren","copied":"In die Zwischenablage kopiert","copyFailed":"Kopieren in die Zwischenablage fehlgeschlagen","downloadedJson":"Als JSON heruntergeladen","downloadedMd":"Als Markdown heruntergeladen","json":"Als JSON exportieren","markdown":"Als Markdown exportieren","title":"Diskussion exportieren"},"history":{"backToBoard":"Zurück zur Task Force","backToList":"Zurück zur Liste","cancel":"Abbrechen","close":"Schließen","confirmDelete":"Löschen","conversationList":"Konversationsliste","delete":"Konversation löschen","deleteDescription":"Möchten Sie diese Konversation wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.","deleteTitle":"Konversation löschen","emptyTranscript":"Noch keine Transkripteinträge","entryCount":"{{count}} Einträge","error":"Fehler","export":"Exportieren","finalAnswer":"Finale synthetisierte Antwort","loadError":"Konversation konnte nicht geladen werden","loadMore":"Mehr laden","noContent":"Kein Inhalt","noConversations":"Noch keine Konversationen","noResults":"Keine Konversationen entsprechen Ihrer Suche","notFound":"Konversation nicht gefunden","phase":"Phase","searchPlaceholder":"Konversationen suchen …","selectConversation":"Wählen Sie eine Konversation zur Ansicht","selectHint":"Wählen Sie eine Konversation aus der Liste","skipped":"{{name}} — übersprungen","synthesis":"Synthese","title":"Konversationsverlauf","transcript":"Konversationstranskript","tryDifferent":"Versuchen Sie einen anderen Suchbegriff","untitled":"Konversation ohne Titel","loadListError":"Konversationen konnten nicht geladen werden"},"insights":"Insights","memberCount":"{{count}} Mitglieder","newBoard":"Task Force zusammenstellen","onboarding":{"advisorSlots":"{{count}} Berater-Plätze","agentsReady":"{{count}} bereit","assembleNow":"Stellen Sie Ihre erste Task Force zusammen","customDesc":"Definieren Sie Ihr eigenes Team und eigene Regeln","customFromScratch":"Von Grund auf erstellen","deployAgent":"Agent bereitstellen","deployFirst":"Stellen Sie Ihren ersten KI-Agenten bereit, um loszulegen","deployFirst2":"Ersten bereitstellen →","deployFirstDesc":"Agenten sind die Experten, die Ihre Task Forces antreiben. Erstellen Sie einen, um zu beginnen.","getStarted":"Loslegen","howItWorks":"So funktioniert es","pickTemplate":"Wählen Sie eine Vorlage, um loszulegen","pickTemplateDesc":"Jede Vorlage legt Diskussionsstil, Rollen und Regeln fest — Sie weisen nur die Agenten zu.","step1Desc":"Erstellen Sie KI-Experten mit eigenen Fähigkeiten, Wissen und Persönlichkeit.","step1Title":"Agenten bereitstellen","step2Desc":"Wählen Sie eine Vorlage, weisen Sie Agenten Rollen zu und legen Sie einen Diskussionsstil fest.","step2Title":"Task Force zusammenstellen","step3Desc":"Stellen Sie eine Frage und beobachten Sie, wie Ihre Agenten debattieren, kritisieren und eine Antwort synthetisieren.","step3Title":"Fragen & beobachten","subtitle":"Stellen Sie spezialisierte KI-Agenten zu kollaborativen Teams zusammen, die gemeinsam debattieren, analysieren und komplexe Herausforderungen lösen.","welcome":"Willkommen bei der Belegschaft"},"openMenu":"Menü öffnen","shortcuts":{"closePanel":"Bereich / Dialog schließen","fromDashboard":"Vom Dashboard","newBoard":"Task Force zusammenstellen","showHelp":"Tastenkürzel anzeigen","title":"Tastenkürzel"},"sidebar":{"boards":"Board-Navigation"},"sidebarDrawer":"Seitenleisten-Navigation","skipToContent":"Zum Inhalt springen","tabHome":"Start","tabInsights":"Insights","tabThreads":"Threads","templates":{"deleteConfirm":"Diese Vorlage löschen?","deleted":"Vorlage gelöscht"},"templatesEmpty":"Speichern Sie eine Task Force als Vorlage, um sie später schnell wiederherzustellen.","themeDark":"Dunkel","themeLight":"Hell","themeSystem":"System","toggleSidebar":"Seitenleiste umschalten","toggleTheme":"Design umschalten","untitled":"Ohne Titel","useTemplate":"Verwenden","wizard":{"addAdvisor":"Berater hinzufügen","advisorCount":"{{count}} Berater","advisorName":"Beratername","agentError":"{{name}} konnte nicht erstellt werden: {{error}}","apiKey":"API-Schlüssel","back":"Zurück","boardDescPlaceholder":"Beschreiben Sie kurz den Zweck dieses Beirats …","boardDescription":"Beschreibung (optional)","boardName":"Name der Belegschaft","boardNamePlaceholder":"z. B. Produktstrategie-Board","cancel":"Abbrechen","collapse":"Einklappen","createNew":"Neuen Berater erstellen","createWorkforce":"Belegschaft erstellen","creatingAgent":"Wird erstellt …","creationFailed":"Erstellung fehlgeschlagen","creationFailedDesc":"Etwas ist schiefgelaufen. Sie können es erneut versuchen; es wird dort fortgesetzt, wo es unterbrochen wurde.","customTemplate":"Benutzerdefiniert","customTemplateDesc":"Beginnen Sie mit Ihrer eigenen Konfiguration von Grund auf","error":"Fehlgeschlagen","existing":"Vorhanden","expand":"Ausklappen","groupError":"Task Force konnte nicht zusammengestellt werden: {{error}}","model":"Modell","modelPlaceholder":"z. B. claude-sonnet-5","new":"Neu","next":"Weiter","pending":"Wartet …","personality":"Persönlichkeit & Expertise","personalityPlaceholder":"Beschreiben Sie Expertise, Perspektive und Kommunikationsstil dieses Beraters …","provider":"LLM-Anbieter","ready":"Bereit","removeAdvisor":"Berater entfernen","role":"Rolle","selectAgent":"Agent auswählen","selectProvider":"Anbieter auswählen …","settingUp":"Ihre Belegschaft wird eingerichtet …","settingUpBoard":"Task Force wird zusammengestellt …","settingUpDesc":"Berater werden erstellt und das Board konfiguriert. Das kann einen Moment dauern.","stepIndicatorLabel":"Assistenten-Fortschritt","stepReview":"Überprüfen","stepTeam":"Team","stepTemplate":"Vorlage","success":"Task Force erfolgreich zusammengestellt!","team":"Team","templates":"Diskussionsvorlagen","tryAgain":"Erneut versuchen","unnamed":"Unbenannt","untitled":"Board ohne Titel","useExisting":"Vorhandenen Agenten verwenden","yourAdvisors":"Ihre Berater"},"workforce":"Belegschaft"}'),ze=JSON.parse('{"title":"Plattform-Operator","subtitle":"Stellen Sie Fragen zu dieser EDDI-Installation — der Operator schlägt sie für Sie nach.","readOnlyChip":"Nur Lesezugriff","readWriteChip":"Lese- und Schreibzugriff","configError":"Die Operator-Konfiguration konnte nicht geladen werden","empty":{"title":"Der Plattform-Operator ist deaktiviert","description":"Aktivieren Sie ihn, um mit einem Agenten zu chatten, der Ihre Agenten, Workflows, Konversationen, Deployments und Logs inspiziert — und sie, mit Ihrer Freigabe jeder Änderung, für Sie bedient.","action":"Plattform-Operator aktivieren"},"discovery":{"title":"Ihr Plattform-Operator","description":"Ein Assistent, der dieses Deployment inspiziert und bedient. Standardmäßig aus; jede Änderung wartet auf Ihre Freigabe.","action":"Aktivieren"},"activation":{"title":"Plattform-Operator aktivieren","subtitle":"Wählen Sie das Modell für den Operator, prüfen Sie seine Anweisungen und starten Sie das Deployment.","modelStep":"Modell","reviewStep":"Prompt & Überprüfung","provider":"Anbieter","model":"Modell","baseUrl":"Basis-URL","apiKey":"API-Schlüssel des Modells","apiKeyHint":"Der Schlüssel Ihres LLM-Anbieters. Dies ist kein EDDI-Zugangsdatum.","apiKeyPlaceholder":"API-Schlüssel einfügen oder einen Vault-Schlüssel wählen","vaultDown":"Der Secrets-Vault ist nicht verfügbar, daher können Schlüssel derzeit nicht darin abgelegt werden. Ein hier eingegebener Schlüssel wird an das Backend weitergereicht, das ihn nach Möglichkeit im Vault speichert.","environment":"Umgebung","authMode":"Authentifizierung des Operators","authModeHint":"Der Operator ruft Ihre EDDI-Admin-API auf. Diese Einstellung legt fest, welche Zugangsdaten diese Aufrufe mitführen.","authNoneBlocked":"Für diese Installation ist die Authentifizierung aktiviert, daher würden nicht authentifizierte Tool-Aufrufe abgelehnt. Der Operator würde erfolgreich deployt und danach bei jeder Abfrage scheitern. Wählen Sie stattdessen „Ihre Identität“.","scope":{"label":"Berechtigung","default":"Standard","hint":"Was der Operator tun darf. Jede Änderung wartet weiterhin auf Ihre Genehmigung — siehe die Sicherheitsregeln unten.","readOnly":{"label":"Nur Lesezugriff","description":"Kann dieses Deployment einsehen und erklären. Kann nichts ändern."},"readWrite":{"label":"Lese- und Schreibzugriff","description":"Kann außerdem Agenten und Agentengruppen erstellen und ändern, bereitstellen, die Bereitstellung aufheben, einen außer Kontrolle geratenen Zeitplan deaktivieren und die Beschreibung eines Agenten bearbeiten — jeweils erst nach Ihrer Genehmigung."},"writeWarning":"Die Aktivierung prüft das Freigabe-Gate vor dem Abschluss gegen die gespeicherte Richtlinie. Ein echter, harmloser Testschreibvorgang läuft anschließend im Hintergrund — wird er jemals ohne Freigabepause ausgeführt, wird der Operator sofort entfernt."},"safetyPreamble":"Sicherheitsregeln (nicht bearbeitbar)","safetyPreambleHint":"Wird immer vorangestellt. Sie weist den Operator an, alles von seinen Tools Zurückgelieferte als nicht vertrauenswürdige Daten zu behandeln.","promptBody":"Anweisungen für den Operator","promptBodyHint":"Passen Sie an, wie sich der Operator vorstellt und wie er arbeitet.","tools":"Tools, die er erhält ({{toolCount}})","activate":"Aktivieren & deployen","callerIdentityNote":"EDDI setzt Ihr Token erst beim Aufruf ein. Es wird nie in der Konversation gespeichert und ausschließlich an diese Installation zurückgesendet.","rebuildWarning":"Beim Speichern wird ein neuer Operator-Agent erstellt und der aktuelle entfernt. Ihre bestehende Operator-Konversation wird nicht übernommen.","environmentHint":"Wo der Operator-Agent selbst läuft. Er kann weiterhin jede Umgebung auslesen."},"authMode":{"none":{"label":"Keine Zugangsdaten","description":"Tool-Aufrufe enthalten keinen Authorization-Header. Funktioniert nur, wenn für diese EDDI-Installation die Authentifizierung deaktiviert ist."},"caller-identity":{"label":"Ihre Identität","description":"Tool-Aufrufe laufen unter dem angemeldeten Benutzer, mit dessen Berechtigungen und Audit-Spur. Erforderlich, wenn die Authentifizierung aktiviert ist."}},"stage":{"idle":"","validating":"Es wird geprüft, ob diese Installation die benötigten Endpunkte bereitstellt …","provisioning":"Operator-Agent wird erstellt …","resolving-version":"Agent-Version wird ermittelt …","saving":"Konfiguration wird gespeichert …","verifying-gate":"Die Freigabesperre wird überprüft…","done":"Fertig","longWait1":"Der Operator-Agent wird erstellt und bereitgestellt — dies ist der längste Schritt…","longWait2":"Werkzeuge und Freigabe-Gate werden am neuen Agenten eingerichtet…","longWait3":"Läuft noch — die Bereitstellung kann auf einer ausgelasteten Plattform etwas dauern…"},"status":{"title":"Operator","provider":"Anbieter","environment":"Umgebung","authMode":"Authentifiziert als","version":"Version","checking":"Wird geprüft …","ready":"Deployt","inProgress":"Wird deployt …","error":"Deployment-Fehler","notFound":"Nicht deployt","errorHelp":"Der Operator-Agent konnte nicht deployt werden. Konfigurieren Sie ihn neu, um es erneut zu versuchen, oder prüfen Sie die Plattform-Logs auf die zugrunde liegende Ursache.","reconfigure":"Neu konfigurieren","deactivate":"Deaktivieren","reset":"Operator löschen","deactivateConfirmTitle":"Plattform-Operator deaktivieren?","deactivateConfirmBody":"Der Operator wird undeployt und antwortet nicht mehr. Seine Konfiguration bleibt erhalten, sodass Sie ihn später wieder aktivieren können.","resetConfirmTitle":"Plattform-Operator löschen?","resetConfirmBody":"Der Operator-Agent und alle für ihn erstellten Ressourcen werden dauerhaft gelöscht, ebenso seine gespeicherte Konfiguration. Dies kann nicht rückgängig gemacht werden.","connectionCheck":"Verbindung prüfen","gateChecking":"Sperre wird überprüft…","gateUnknown":"Sperre nicht geprüft","gateVerified":"Sperre verifiziert","gateNotVerified":"Sperre nicht verifiziert","gateUnverifiedHelp":"Die Freigabesperre konnte im Dokument dieses Agenten nicht verifiziert werden."},"chat":{"empty":"Fragen Sie nach Ihrer Installation. Der Operator schlägt nach und zeigt Ihnen jeden Aufruf, den er macht.","restoring":"Unterhaltung wird geöffnet …","placeholder":"Fragen Sie nach Agenten, Konversationen, Deployments, Logs …","pausedPlaceholder":"Wartet auf eine Entscheidung oben, bevor der Operator fortfahren kann…","readOnlyPlaceholder":"Diese Unterhaltung ist beendet — starten Sie eine neue, um fortzufahren.","send":"Senden","stop":"Stoppen","newConversation":"Neue Konversation beginnen","transcript":"Operator-Konversation","pauseCompactFallback":"Der Operator benötigt Ihre Zustimmung, bevor er fortfahren kann.","pauseCompactReview":"Zur Genehmigung prüfen →","resolving":"Der genehmigte Schritt läuft — das kann einen Moment dauern…"},"drawer":{"title":"Plattform-Operator","notActivated":"Aktivieren Sie ihn, um von überall mit Ihrem Deployment zu chatten.","titleAwaiting":"Plattform-Operator — eine Entscheidung wartet auf Sie","activate":"Plattform-Operator einrichten"},"approval":{"reconstructedEndpoint":"{{method}} {{path}} (rekonstruiert)","verified":"verifiziert","verifiedTitle":"Aus der tatsächlichen API-Aufruf-Konfiguration aufgelöst; wird unmittelbar vor der Ausführung erneut geprüft — ändert sich die Anfrage bis dahin, wird die Ausführung verweigert.","previewOnly":"Vorschau","previewOnlyTitle":"Dieser Aufruf führt vor der Ausführung zusätzliche Vorbereitungsschritte aus, daher ist dies eine bestmögliche Vorschau — die tatsächliche Anfrage kann abweichen und wird vor der Ausführung nicht erneut geprüft.","query":"Query","headers":"Headers","bodyTruncated":"Der Body wird zur Anzeige gekürzt dargestellt — die Freigabe deckt weiterhin die vollständige Anfrage ab.","diffHeading":"Änderungen gegenüber der gespeicherten Version {{version}}","diffLoading":"Gespeicherte Version zum Vergleich wird geladen …","diffFailed":"Die gespeicherte Version konnte nicht zum Vergleich geladen werden — das vollständige vorgeschlagene Dokument steht unten.","diffForbidden":"Der Vergleich mit der gespeicherten Version erfordert Bearbeitungsrechte — das vollständige vorgeschlagene Dokument steht unten.","diffRedactionNote":"Zugangsdaten sind in der vorgeschlagenen Version geschwärzt und erscheinen hier daher als Änderungen, auch wenn sie unverändert sind.","showFullRequest":"Vollständiges vorgeschlagenes Dokument anzeigen","hideFullRequest":"Vollständiges vorgeschlagenes Dokument ausblenden","expandBody":"Ausklappen","escalation":{"heading":"Diese Anfrage gewährt zusätzliche Berechtigungen","dynamicAgentCreation":"Diese Gruppe darf zur Laufzeit neue Agenten erstellen. Diese Agenten unterliegen selbst keiner Freigabepflicht.","dynamicAgentRecruitment":"Diese Gruppe darf weitere vorhandene Agenten in ihre Diskussionen einbeziehen.","autoApproveOnTimeout":"Freigaben für diese Ressource werden bei Zeitüberschreitung automatisch erteilt — ohne dass jemand mitschaut.","agentCreatedWithoutGate":"Dieser Agent wird ohne Genehmigungs-Gate erstellt. Jeder spätere Schreibvorgang wird unbeaufsichtigt ausgeführt.","agentCreatedWithBroadEndpoints":"Dieser Agent wird mit Schreibzugriff auf seine eigene API erstellt — nicht auf Lesevorgänge beschränkt.","agentCreatedWithExternalTools":"Dieser Agent wird mit sämtlichen Tools erstellt, die ein externer MCP-Server anbietet. Welche das sind, entscheidet dieser Server, und er kann sie später ändern.","unchecked":"Der Body war zu lang, um ihn auf Berechtigungserweiterungen zu prüfen — lesen Sie ihn vor der Freigabe vollständig.","inlineCredential":"Diese Anfrage enthält offenbar fest eingetragene Zugangsdaten statt einer ${vault:…}-Referenz. Ein eingebettetes Secret liegt im Klartext vor und kann nicht über den Vault rotiert werden — ablehnen und die Vault-Referenz verlangen."},"blockedSelfTarget":"Ein Agent darf seine eigene Definition nicht ändern, und diese Anfrage betrifft den eigenen Agenten des Operators ({{agentId}}). Solange sie enthalten ist, kann der gesamte Stapel nicht genehmigt werden — lehnen Sie ab und nehmen Sie diese Änderung auf der Seite dieses Agenten vor.","blockedSelfConversation":"Ein Agent darf keine Nachricht in die Unterhaltung senden, in der er selbst läuft, und diese Anfrage zielt genau darauf ({{agentId}}). Damit würde er seinen eigenen Text einfügen, als hätte ein Mensch ihn gesagt. Solange sie enthalten ist, kann der gesamte Stapel nicht genehmigt werden — bitte ablehnen.","blockedGateCarrying":"Diese Anfrage schreibt eine LLM-Konfiguration, die ihr eigenes Freigabe-Gate (toolApprovals) setzt und damit das prüfende Gate ersetzen würde. Solange sie enthalten ist, kann der gesamte Stapel nicht freigegeben werden — lehnen Sie ab und ändern Sie das Gate auf der Seite des Agenten.","blockedGateUnverifiable":"Diese Anfrage schreibt eine LLM-Konfiguration, deren Inhalt nicht vollständig lesbar ist — zu groß für die Anzeige oder kein gültiges JSON —, daher lässt sich nicht bestätigen, dass sie kein Freigabe-Gate überschreibt. Solange sie enthalten ist, kann der gesamte Stapel nicht freigegeben werden — lehnen Sie ab und nehmen Sie die Änderung auf der Seite des Agenten vor.","blockedGateUnpinned":"Diese Anfrage schreibt eine LLM-Konfiguration, ist aber nicht fixiert; was tatsächlich ausgeführt wird, kann daher vom hier Gezeigten abweichen und es lässt sich nicht bestätigen, dass kein Freigabe-Gate überschrieben wird. Solange sie enthalten ist, kann der gesamte Stapel nicht freigegeben werden — lehnen Sie ab und nehmen Sie die Änderung auf der Seite des Agenten vor.","blockedSelfStart":"Der Operator darf sich nicht selbst testen — eine Konversation mit dem eigenen Agenten ({{agentId}}) würde seine Ausgabe als Eingabe zurückführen. Genehmigen ist für den gesamten Stapel gesperrt, solange dieser Aufruf enthalten ist — ablehnen und einen anderen Agenten testen."},"starters":{"whatsDeployed":"Was ist derzeit deployt?","recentConversations":"Zeige mir die neuesten Konversationen","healthCheck":"Gibt es auf dieser Plattform Probleme?","diagnoseAgent":"Warum lässt sich einer meiner Agenten nicht deployen?"},"toast":{"activated":"Plattform-Operator aktiviert","deactivated":"Plattform-Operator deaktiviert","reset":"Plattform-Operator gelöscht","activatedButUnreachable":"Operator deployt, konnte Ihre Plattform aber nicht lesen","activatedGateVerified":"Platform Operator aktiviert — Freigabe-Gate verifiziert. Verbindungsprüfungen laufen im Hintergrund.","activatedChecking":"Platform Operator aktiviert. Verbindungsprüfungen laufen im Hintergrund.","writeProbeVerified":"Schreibzugriff verifiziert — ein echter, geschützter Schreibvorgang wurde zur Freigabe angehalten.","writeProbeFailed":"Das Freigabe-Gate hat nicht gehalten — der Operator wurde entfernt.","writeProbeInconclusive":"Der Live-Schreibtest war ergebnislos."},"canary":{"genericFailure":"Die Verbindungsprüfung war nicht erfolgreich.","passed":"Der Operator erreicht Ihre Plattform.","recheck":"Erneut prüfen","title":"Der Operator wurde deployt, konnte Ihre Plattform aber nicht lesen."},"paused":{"title":"Der Plattform-Operator ist pausiert","description":"Er ist weiterhin konfiguriert — beim Wiedereinschalten wird derselbe Agent erneut deployt. Es wurde nichts gelöscht.","action":"Wieder einschalten"},"managedAgentBadge":"Operator","managedAgentHint":"Wird vom Plattform-Operator-Bildschirm bereitgestellt und verwaltet. Bearbeiten oder Löschen an dieser Stelle macht diesen Bildschirm unbrauchbar.","decisionLog":{"approved":"Sie haben diese Anfrage genehmigt","rejected":"Sie haben diese Anfrage abgelehnt","rePaused":"Erneut pausiert — eine weitere Entscheidung ist nötig","noReply":"Der Durchlauf endete ohne Antwort","executed":"Ausgeführt: {{calls}}","partial_one":"Genehmigt — {{count}} Aufruf abgelehnt","partial_other":"Genehmigt — {{count}} Aufrufe abgelehnt"},"tabs":{"label":"Operator-Ansichten","chat":"Chat","history":"Verlauf"},"history":{"emptyTitle":"Keine früheren Unterhaltungen","emptyDescription":"Unterhaltungen mit dem Operator erscheinen hier, damit Sie sie später fortsetzen können.","noOpeningMessage":"(noch keine Nachricht)","stepCount_one":"{{count}} Schritt","stepCount_other":"{{count}} Schritte"}}'),Te={addCadence:"Rhythmus hinzufügen",addTask:"Aufgabe hinzufügen",backToGroup:"Zurück zur Gruppe",backlogEmpty:"Noch keine Backlog-Aufgaben.",backlogTitle:"Backlog ({{count}} Aufgaben)",cadenceAdded:"Rhythmus hinzugefügt",cadenceDeleted:"Rhythmus gelöscht",cadenceRunning:"Eine durch den Rhythmus gestartete Diskussion läuft gerade.",cadencesEmpty:"Noch keine wiederkehrenden Rhythmen konfiguriert.",cadencesTitle:"Rhythmen ({{count}})",confirmDeleteCadenceDesc:"Dadurch werden die geplanten Läufe gestoppt. Bereits durchgeführte Diskussionen sind davon nicht betroffen.",confirmDeleteCadenceTitle:"Diesen Rhythmus löschen?",createdBy:"von {{who}}",cronLabel:"Cron-Ausdruck",cronPlaceholder:"z. B. 0 9 * * MON",discussions:"Diskussionen",failed:"Fehlgeschlagen",inputTemplatePlaceholder:"Prompt-Vorlage für jeden Lauf (optional — andernfalls wird eine einfache Backlog-Liste verwendet)",lastRun:"Letzter Lauf",maxCostLabel:"Max. Kosten/Lauf ($, optional)",maxCostPlaceholder:"Gruppenstandard",maxPerRunLabel:"Max. Aufgaben/Lauf",member:"Mitglied",navLabel:"Arbeitsbereich",never:"Nie",perMemberStats:"Zuverlässigkeit pro Mitglied",priority:"Priorität",subtitle:"Ein dauerhafter Backlog und wiederkehrende Rhythmen, die diese Gruppe unbeaufsichtigt nach Zeitplan ausführt.",taskAdded:"Aufgabe zum Backlog hinzugefügt",taskDescriptionPlaceholder:"Beschreibung (optional)",taskSubjectPlaceholder:"Aufgabentitel",tasksVerified:"Verifizierte Aufgaben",timeZoneLabel:"Zeitzone",title:"Arbeitsbereich für Standing Teams",totalCost:"Gesamtkosten",verified:"Verifiziert",maxCostInvalid:"Die maximalen Kosten pro Lauf müssen eine Zahl ab 0 sein.",cadenceSummary_one:"bis zu {{max}} Aufgabe/Lauf",cadenceSummary_other:"bis zu {{max}} Aufgaben/Lauf",inputTemplateTooLong:"Die Prompt-Vorlage ist auf {{max}} Zeichen begrenzt."},Ee={title:"Neues Team"},ye={title:"EDDI-Updates",description:"Prüfen, ob eine neuere EDDI-Version verfügbar ist. Es wird nichts gesendet, bevor Sie es anfordern.",installed:"Installiert",githubRelease:"GitHub-Release",dockerImage:"Docker-Image",unknownVersion:"Unbekannt",checkNow:"Jetzt prüfen",checking:"Wird geprüft…",autoCheck:"Bei jedem Seitenaufruf automatisch prüfen",autoCheckHint:"Führt pro Browser-Neuladen eine Prüfung durch und zeigt einen Hinweis, wenn eine neuere Version vorliegt.",privacyNote:"Die Prüfung kontaktiert ausschließlich api.github.com direkt aus Ihrem Browser. Es werden keine Daten der Installation übertragen.",neverChecked:"Noch keine Prüfung durchgeführt.",upToDate:"Sie verwenden die neueste Version ({{version}}).",updateAvailable:"EDDI {{version}} ist verfügbar",updateAvailableDetail:"Sie verwenden {{installed}}.",ahead:"Sie verwenden {{installed}} — neuer als die neueste Veröffentlichung ({{version}}).",unknownInstalled:"Die neueste Version ist {{version}}. Die installierte Version konnte nicht ermittelt werden, ein Vergleich ist daher nicht möglich.",errorRateLimited:"Das Anfragelimit von GitHub für nicht authentifizierte Zugriffe ist erreicht. Versuchen Sie es später erneut oder öffnen Sie die Releases-Seite.",errorBlockedByCsp:"Die Content-Security-Policy dieser Installation verhindert, dass der Browser api.github.com erreicht — die Prüfung kann daher nicht laufen. Nehmen Sie api.github.com in die connect-src-Direktive auf oder nutzen Sie den Releases-Link unten.",errorUnreachable:"api.github.com ist nicht erreichbar. Prüfen Sie Ihr Netzwerk oder einen ausgehenden Proxy.",errorFailed:"Die Update-Prüfung ist fehlgeschlagen. Öffnen Sie die Releases-Seite, um manuell nachzusehen.",publishedOn:"Veröffentlicht am {{date}}",whatsNew:"Neu in {{version}}",fullNotes:"Vollständige Release Notes auf GitHub",noNotes:"Zu dieser Version gibt es keine Notizen.",releaseNotes:"Release Notes",allReleases:"Alle Versionen",howToUpdate:"So aktualisieren Sie",howToUpdateCli:"Mit dem eddi-CLI (vom Installer angelegt):",howToUpdateManual:"Ohne CLI, im Installationsverzeichnis (standardmäßig ~/.eddi):",howToUpdateNote:"Passen Sie die -f-Flags an Ihr Setup an — mit Keycloak zusätzlich -f docker-compose.auth.yml."},Pe={acrossGroups:"über {{count}} Task Forces",actions:"Aktionen",activeExperts:"Aktive Experten",activity:"Aktivität",agentLeaderboard:"Agenten-Rangliste",agentName:"Agent",allOutcomes:"Alle Ergebnisse",allStyles:"Alle Stile",avgDuration:"Ø Dauer",cancelCompare:"Abbrechen",clearAll:"Alle zurücksetzen",clearFilters:"Filter zurücksetzen",completionRate:"Abschlussquote",contributions:"Beiträge",covered:"Abgedeckt",createFirst:"Task Force zusammenstellen",daysAgo:"vor {{count}} T",emptyDescription:"Starten Sie eine Task-Force-Diskussion, um hier Analysen zu sehen.",emptyHaveGroups:"Sie haben {{count}} Task Forces, aber noch keine Diskussionen. Starten Sie eine Diskussion, um Insights zu sehen.",emptyTitle:"Noch keine Insights",errorDescription:"Einige Daten konnten nicht abgerufen werden. Bitte versuchen Sie es erneut.",errors:"Fehler",errorTitle:"Insights konnten nicht geladen werden",filteredOf:"{{filtered}} von insgesamt {{total}}",highConfidence:"Hohe Konfidenz",hoursAgo:"vor {{count}} Std.",justNow:"gerade eben",last30Days:"Letzte 30 Tage",minutesAgo:"vor {{count}} Min.",noAgents:"Noch keine Agentenaktivität.",noDiscussions:"Noch keine Diskussionen.",noMatchingDiscussions:"Keine Diskussionen entsprechen den aktiven Filtern.",noPhases:"Keine Phasendaten verfügbar.",noResults:"Keine passenden Diskussionen",noResultsHint:"Passen Sie Ihre Filter an oder setzen Sie sie zurück, um alle Daten zu sehen.",noSkills:"Keine Fähigkeiten registriert. Definieren Sie Fähigkeiten für Ihre Agenten, um die Abdeckung zu verfolgen.",noStyles:"Keine Stildaten verfügbar.",outcomeChart:"Ergebnisverteilung: {{total}} gesamt",outcomes:"Ergebnisse",participatedRecently:"an Diskussionen teilgenommen",perDiscussion:"pro Diskussion",phaseChart:"Phasenverteilung",phaseDistribution:"Phasenverteilung",pickSecondAgent:"Klicken Sie auf einen Agenten, um ihn mit {{name}} zu vergleichen",recentDiscussions:"Aktuelle Diskussionen",removeFilter:"Filter entfernen: {{label}}",retry:"Erneut versuchen",sessions:"Sitzungen",sessionsCompleted:"Sitzungen erfolgreich abgeschlossen",showingResults:"{{count}} von {{total}}",skillCoverage:"Fähigkeitsabdeckung",styleBreakdown:"Diskussionsstile",subtitle:"Letzte 30 Tage",title:"Insights",total:"Gesamt",totalDiscussions:"Diskussionen",totalSkills:"Fähigkeiten",uncoveredSkills:"{{count}} nicht abgedeckte Fähigkeiten"},Me={activeRate:"Aktivitätsrate",activeRateDesc:"In den letzten 30 Tagen aktive Agenten",dormantAgents:"Inaktiv",dormantAgentsDesc:"Agenten, die seit über 30 Tagen nicht genutzt wurden",msgAtRisk:"Der Großteil Ihrer Belegschaft ist inaktiv — binden Sie sie wieder ein",msgHealthy:"{{rate}} % Ihrer digitalen Belegschaft waren in den letzten 30 Tagen aktiv",msgModerate:"Einige digitale Experten wurden längere Zeit nicht konsultiert",statusAtRisk:"Gefährdet",statusHealthy:"Gesund",statusModerate:"Mittel",taskForces:"Task Forces",taskForcesDesc:"Kollaborative Agentengruppen",title:"Wissensgesundheit",workforceSize:"Größe der Belegschaft",workforceSizeDesc:"Gesamtzahl bereitgestellter digitaler Experten"},Ie={hint:"Wir merken uns Ihre Wahl und bringen Sie beim nächsten Mal automatisch dorthin.",manager:{description:"Erstellen, konfigurieren und deployen Sie Ihre KI-Agenten. Verwalten Sie Workflows, Ressourcen und Integrationen.",feature1:"Agenten erstellen & bereitstellen",feature2:"Workflows & Pipelines konfigurieren",feature3:"Ressourcen & Erweiterungen verwalten",title:"Manager"},subtitle:"Wählen Sie Ihren Arbeitsbereich, um loszulegen.",title:"Willkommen bei EDDI",workforce:{description:"Stellen Sie KI-Teams zusammen, die gemeinsam debattieren, analysieren und komplexe Herausforderungen lösen.",feature1:"Agenten-Task-Forces zusammenstellen",feature2:"Kollaborative Diskussionen führen",feature3:"Synthetisierte Antworten erhalten",title:"Belegschaft"}},Re={assembleTaskForce:"Task Force zusammenstellen",assembleTaskForceDesc:"Bringen Sie Experten zusammen, um komplexe Herausforderungen zu lösen",chatWithAgent:"Mit Agent chatten",chatWithAgentDesc:"Führen Sie ein 1:1-Gespräch mit einem digitalen Experten",manageWorkforce:"Belegschaft verwalten",manageWorkforceDesc:"Digitale Experten konfigurieren und bereitstellen",title:"Schnellaktionen",viewInsights:"Insights ansehen",viewInsightsDesc:"Verfolgen Sie die Wissensabdeckung Ihrer Belegschaft"},Ce={addAgent:"Agent bereitstellen",count:"{{count}} Experten",ready:"Bereit",title:"Ihre digitale Belegschaft",unnamed:"Unbenannter Agent"},Ne={production:"Produktion",test:"Test"},Ke={attachments:e,app:n,auth:t,nav:r,theme:i,language:s,pages:a,common:o,agents:l,agentDetail:u,wizard:c,setupWizard:d,packages:g,packageDetail:h,packageEditor:p,conversations:f,conversationDetail:m,chat:b,resources:k,editor:A,rulesEditor:S,apiCallsEditor:w,mcpcallsEditor:v,llmEditor:D,outputEditor:z,propertySetterEditor:T,dictionaryEditor:E,parserEditor:y,coordinator:P,contentEditor:M,logs:I,secrets:R,audit:C,schedules:N,cascadeTrace:K,debugDrawer:B,costDashboard:L,memoryInspector:F,logViewer:W,promptViewer:V,promptPreview:G,studio:x,ragEditor:O,onboarding:H,platform:Z,stream:U,createOrWizard:_,groups:j,taskBoard:q,groupWizard:J,groupTemplates:Q,memories:Y,properties:$,triggers:X,capabilities:ee,exportDialog:ne,importDialog:te,syncPage:re,sync:ie,userConversations:se,commandPalette:ae,channels:oe,channelDetail:le,hitl:ue,chatDrawer:ce,dashboard:de,errorBoundary:ge,gdpr:he,mockBanner:pe,orphans:fe,quotas:me,secretPicker:be,snippetEditor:ke,status:Ae,userData:Se,variables:we,workflowEditor:ve,Workforce:De,operator:ze,groupWorkspace:Te,workforceWizard:Ee,updates:ye,analyticsPage:Pe,knowledgeHealth:Me,landing:Ie,quickActions:Re,workforce:Ce,environments:Ne};export{De as Workforce,u as agentDetail,l as agents,Pe as analyticsPage,w as apiCallsEditor,n as app,e as attachments,C as audit,t as auth,ee as capabilities,K as cascadeTrace,le as channelDetail,oe as channels,b as chat,ce as chatDrawer,ae as commandPalette,o as common,M as contentEditor,m as conversationDetail,f as conversations,P as coordinator,L as costDashboard,_ as createOrWizard,de as dashboard,B as debugDrawer,Ke as default,E as dictionaryEditor,A as editor,Ne as environments,ge as errorBoundary,ne as exportDialog,he as gdpr,Q as groupTemplates,J as groupWizard,Te as groupWorkspace,j as groups,ue as hitl,te as importDialog,Me as knowledgeHealth,Ie as landing,s as language,D as llmEditor,W as logViewer,I as logs,v as mcpcallsEditor,Y as memories,F as memoryInspector,pe as mockBanner,r as nav,H as onboarding,ze as operator,fe as orphans,z as outputEditor,h as packageDetail,p as packageEditor,g as packages,a as pages,y as parserEditor,Z as platform,G as promptPreview,V as promptViewer,$ as properties,T as propertySetterEditor,Re as quickActions,me as quotas,O as ragEditor,k as resources,S as rulesEditor,N as schedules,be as secretPicker,R as secrets,d as setupWizard,ke as snippetEditor,Ae as status,U as stream,x as studio,ie as sync,re as syncPage,q as taskBoard,i as theme,X as triggers,ye as updates,se as userConversations,Se as userData,we as variables,c as wizard,ve as workflowEditor,Ce as workforce,Ee as workforceWizard}; diff --git a/src/main/resources/META-INF/resources/assets/decision-record-card-AIhLlctQ.js b/src/main/resources/META-INF/resources/assets/decision-record-card-BagyXv1G.js similarity index 97% rename from src/main/resources/META-INF/resources/assets/decision-record-card-AIhLlctQ.js rename to src/main/resources/META-INF/resources/assets/decision-record-card-BagyXv1G.js index df611289e8..15d2a14e6a 100644 --- a/src/main/resources/META-INF/resources/assets/decision-record-card-AIhLlctQ.js +++ b/src/main/resources/META-INF/resources/assets/decision-record-card-BagyXv1G.js @@ -1,4 +1,4 @@ -import{x as y,c as h,r as g,j as e,bj as S,a7 as M,dd as R,de as P,i as u,dy as v,dz as T,V as _,bi as V,C as $,D,E as F}from"./index-BY6d8wze.js";import{B as f}from"./badge-B8rrdXaB.js";import{H}from"./history-BHMI8MMQ.js";import{H as U}from"./handshake-d__LQWU9.js";import{C as I}from"./clipboard-list-C1xV5BuY.js";import{S as W}from"./shield-Ce05kery.js";import{U as G}from"./user-plus-CWm5kmVr.js";import{S as A}from"./scale-DJXpJ1ID.js";/** +import{x as y,c as h,r as g,j as e,bj as S,a7 as M,de as R,df as P,i as u,dz as v,dA as T,V as _,bi as V,C as $,D,E as F}from"./index-BnLj1hck.js";import{B as f}from"./badge-C2HqoOk5.js";import{H}from"./history-d_YShP6D.js";import{H as U}from"./handshake-foe5KMFV.js";import{C as A}from"./clipboard-list-BKNHK2TK.js";import{S as W}from"./shield-Dy-B1VeF.js";import{U as G}from"./user-plus-BhdQPvXt.js";import{S as I}from"./scale-BnMnNt4Y.js";/** * @license lucide-react v0.577.0 - ISC * * This source code is licensed under the ISC license. @@ -23,4 +23,4 @@ import{x as y,c as h,r as g,j as e,bj as S,a7 as M,dd as R,de as P,i as u,dy as * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Z=[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}],["path",{d:"M12 15h.01",key:"q59x07"}],["path",{d:"M12 7v4",key:"xawao1"}]],O=y("message-square-warning",Z),Q={TEXT:"📄",MARKDOWN:"📝",JSON:"🧾"};function ee({artifacts:t,className:n}){const{t:r}=h(),[i,c]=g.useState(null);return t.length===0?null:e.jsxs("div",{className:u("rounded-xl border border-sky-500/30 bg-sky-500/5 p-4",n),"data-testid":"artifacts-panel",children:[e.jsxs("h3",{className:"mb-3 flex items-center gap-1.5 text-sm font-semibold text-foreground",children:[e.jsx(Y,{className:"h-4 w-4 text-sky-600 dark:text-sky-400","aria-hidden":"true"}),r("groups.artifactsTitle","Shared Artifacts ({{count}})",{count:t.length})]}),e.jsx("div",{className:"space-y-1.5",children:t.map(d=>{var s;const o=i===d.id,a=((s=d.history)==null?void 0:s.length)??0;return e.jsxs("div",{className:"overflow-hidden rounded-lg border border-border bg-background/60","data-testid":`artifact-${d.id}`,children:[e.jsxs("button",{type:"button",onClick:()=>c(o?null:d.id),className:"flex w-full items-center gap-2 p-2.5 text-start hover:bg-secondary/30 transition-colors","aria-expanded":o,"data-testid":`artifact-toggle-${d.id}`,children:[e.jsx("span",{"aria-hidden":"true",children:Q[d.type]??"📄"}),e.jsx("span",{className:"min-w-0 flex-1 truncate text-xs font-medium text-foreground",title:d.name,children:d.name}),e.jsx(f,{variant:d.status==="FINAL"?"success":"secondary",className:"shrink-0 text-[9px] px-1.5 py-0",children:d.status==="FINAL"?r("groups.artifactFinal","Final"):r("groups.artifactDraft","Draft")}),e.jsxs("span",{className:"shrink-0 font-mono text-[10px] text-muted-foreground",children:["v",d.version]}),a>0&&e.jsxs("span",{className:"flex shrink-0 items-center gap-0.5 text-[10px] text-muted-foreground",title:r("groups.artifactRevisions",{defaultValue:"{{count}} prior revision",defaultValue_other:"{{count}} prior revisions",count:a}),children:[e.jsx(H,{className:"h-2.5 w-2.5","aria-hidden":"true"}),a]}),o?e.jsx(S,{className:"h-3.5 w-3.5 shrink-0 text-muted-foreground","aria-hidden":"true"}):e.jsx(M,{className:"h-3.5 w-3.5 shrink-0 text-muted-foreground","aria-hidden":"true"})]}),o&&e.jsxs("div",{className:"border-t border-border p-2.5","data-testid":`artifact-content-${d.id}`,children:[d.lastEditorAgentId&&e.jsx("p",{className:"mb-1.5 text-[10px] text-muted-foreground",children:r("groups.artifactLastEdited","Last edited by {{agent}}",{agent:d.lastEditorAgentId})}),d.type==="JSON"?e.jsx("pre",{className:"max-h-72 overflow-auto rounded-md bg-background p-2.5 font-mono text-[11px] leading-relaxed text-foreground","data-testid":`artifact-json-${d.id}`,children:te(d.content)}):d.type==="MARKDOWN"?e.jsx("div",{className:"prose prose-sm dark:prose-invert max-w-none rounded-md bg-background p-2.5 text-xs",children:e.jsx(R,{remarkPlugins:[P],children:d.content})}):e.jsx("pre",{className:"max-h-72 overflow-auto whitespace-pre-wrap break-words rounded-md bg-background p-2.5 text-xs text-foreground",children:d.content})]})]},d.id)})})]})}function te(t){try{return JSON.stringify(JSON.parse(t),null,2)}catch{return t}}function se({negotiation:t,memberDisplayNames:n,className:r}){const{t:i}=h(),c=a=>(n==null?void 0:n[a])??a,d=t.proposals??[],o=t.concessions??[];return d.length===0&&o.length===0?null:e.jsxs("div",{className:u("rounded-xl border border-emerald-500/30 bg-emerald-500/5 p-4",r),"data-testid":"negotiation-ledger",children:[e.jsxs("h3",{className:"mb-3 flex items-center gap-1.5 text-sm font-semibold text-foreground",children:[e.jsx(U,{className:"h-4 w-4 text-emerald-600 dark:text-emerald-400","aria-hidden":"true"}),i("groups.negotiationTableTitle","Negotiation Table")]}),d.length>0&&e.jsx("div",{className:"space-y-1.5",children:d.map(a=>e.jsxs("div",{className:u("rounded-lg border bg-background/60 p-2.5",a.status==="OPEN"?"border-emerald-500/30":"border-border opacity-70"),"data-testid":`negotiation-proposal-${a.id}`,children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-1.5",children:[e.jsx("div",{className:u("flex h-5 w-5 shrink-0 items-center justify-center rounded-full text-[9px] font-bold text-white",T(a.byAgentId)),"aria-hidden":"true",children:v(c(a.byAgentId))}),e.jsx("span",{className:"text-xs font-medium text-foreground",children:c(a.byAgentId)}),e.jsx("span",{className:"font-mono text-[10px] text-muted-foreground",children:a.id}),e.jsx(f,{variant:a.status==="OPEN"?"success":"secondary",className:"text-[9px] px-1.5 py-0","data-testid":`negotiation-proposal-status-${a.id}`,children:a.status==="OPEN"?i("groups.negotiationOpen","Open"):i("groups.negotiationSuperseded","Superseded")}),e.jsx("span",{className:"ms-auto text-[10px] text-muted-foreground",children:i("groups.negotiationRound","Round {{round}}",{round:a.round})})]}),e.jsx("p",{className:"mt-1.5 text-xs text-foreground",children:a.terms}),a.acceptedBy.length>0&&e.jsx("p",{className:"mt-1.5 text-[10px] text-muted-foreground",children:i("groups.negotiationAcceptedBy","Accepted by: {{names}}",{names:a.acceptedBy.map(c).join(", ")})})]},a.id))}),o.length>0&&e.jsxs("div",{className:"mt-3 border-t border-emerald-500/20 pt-3",children:[e.jsxs("h4",{className:"mb-1.5 flex items-center gap-1 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:[e.jsx(L,{className:"h-3 w-3","aria-hidden":"true"}),i("groups.concessionLedgerTitle","Concession ledger")]}),e.jsx("ul",{className:"space-y-1.5",children:o.map((a,s)=>e.jsxs("li",{className:"rounded-lg border border-border bg-background/60 p-2 text-xs","data-testid":`negotiation-concession-${s}`,children:[e.jsx("span",{className:"font-medium text-foreground",children:c(a.byAgentId)})," ",i("groups.negotiationGaveUp","gave up")," ",e.jsx("span",{className:"text-foreground",children:a.gaveUp})," ",i("groups.negotiationInReturnFor","in return for")," ",e.jsx("span",{className:"text-foreground",children:a.inReturnFor}),a.refProposalId&&e.jsxs("span",{className:"ms-1 font-mono text-[10px] text-muted-foreground",children:["(",a.refProposalId,")"]})]},`${a.byAgentId}-${a.round}-${s}`))})]})]})}function Ne({conversation:t,retroRecorded:n,artifactUpdates:r,className:i}){var w,b;const{t:c}=h(),d=(t==null?void 0:t.artifacts)??[],o=(t==null?void 0:t.negotiation)??null,a=(t==null?void 0:t.summaryUpToIndex)??0,s=n??[],m=r??[],j=!!o&&((((w=o.proposals)==null?void 0:w.length)??0)>0||(((b=o.concessions)==null?void 0:b.length)??0)>0);return d.length===0&&!j&&a<=0&&s.length===0&&m.length===0?null:e.jsxs("div",{className:u("space-y-3",i),"data-testid":"discussion-insights",children:[d.length>0&&e.jsx(ee,{artifacts:d}),j&&e.jsx(se,{negotiation:o,memberDisplayNames:t==null?void 0:t.memberDisplayNames}),a>0&&e.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-border bg-secondary/20 p-2.5 text-xs text-muted-foreground","data-testid":"transcript-window-summary",title:(t==null?void 0:t.transcriptSummary)??void 0,children:[e.jsx("span",{"aria-hidden":"true",children:"📜"}),e.jsx("span",{children:c("groups.transcriptWindowed","The first {{count}} transcript entries were folded into a rolling summary to keep later turns' context bounded. Hover for the summary.",{count:a})})]}),s.length>0&&e.jsx("div",{className:"flex flex-wrap items-center gap-2","data-testid":"retro-recorded-summary",children:s.map((x,N)=>e.jsxs("span",{className:"inline-flex items-center gap-1.5 rounded-full border border-violet-500/30 bg-violet-500/5 px-2.5 py-1 text-xs text-violet-600 dark:text-violet-400",children:["🪞"," ",c("groups.retroRecordedBadge",{defaultValue:"{{phase}}: {{count}} lesson saved to team memory",defaultValue_other:"{{phase}}: {{count}} lessons saved to team memory",phase:x.phaseName,count:x.lessonsStored})]},`${x.phaseName}-${N}`))}),m.length>0&&e.jsx("div",{className:"flex flex-wrap items-center gap-2","data-testid":"artifact-updates-summary",children:m.map((x,N)=>e.jsxs("span",{className:"inline-flex items-center gap-1.5 rounded-full border border-sky-500/30 bg-sky-500/5 px-2.5 py-1 text-xs text-sky-600 dark:text-sky-400",children:["📎"," ",x.created?c("groups.artifactCreatedBadge","{{name}} created (v{{version}})",{name:x.name,version:x.version}):c("groups.artifactUpdatedBadge","{{name}} updated (v{{version}})",{name:x.name,version:x.version})]},`${x.artifactId}-${x.version}-${N}`))})]})}const C={0:{label:"P0",className:"bg-red-500/15 text-red-700 dark:text-red-400 border-red-500/30"},1:{label:"P1",className:"bg-orange-500/15 text-orange-700 dark:text-orange-400 border-orange-500/30"},2:{label:"P2",className:"bg-blue-500/15 text-blue-700 dark:text-blue-400 border-blue-500/30"},3:{label:"P3",className:"bg-muted text-muted-foreground border-border"}};function re(t,n,r,i,c){return i.has(t)?"verified":c!=null&&c.has(t)?"awaiting-approval":r.has(t)?"completed":n.has(t)?"in-progress":"pending"}function E({task:t,status:n,verification:r}){const{t:i}=h(),c=T(t.assignedTo),d=v(t.assignedTo),o=C[t.priority]??C[3],[a,s]=g.useState(!1);return e.jsxs("div",{"data-testid":`task-card-${t.id}`,className:u("rounded-lg border p-3 transition-all duration-500 ease-out","transform-gpu",n==="pending"&&"bg-secondary/30 border-border",n==="in-progress"&&"bg-amber-500/10 border-amber-500/40 animate-[pulse-border_2s_ease-in-out_infinite]",n==="awaiting-approval"&&"bg-orange-500/10 border-orange-500/40",n==="completed"&&"bg-sky-500/10 border-sky-500/40",n==="verified"&&(r==null?void 0:r.passed)&&"bg-emerald-500/10 border-emerald-500/40",n==="verified"&&r&&!r.passed&&"bg-destructive/10 border-destructive/40"),children:[e.jsx("p",{className:"text-sm font-bold text-foreground line-clamp-2",title:t.subject,children:t.subject}),t.description&&e.jsxs("div",{className:"mt-1",children:[e.jsx("p",{className:u("text-xs text-muted-foreground",!a&&"line-clamp-2"),children:t.description}),t.description.length>120&&e.jsx("button",{type:"button",onClick:()=>s(!a),className:"text-[10px] text-primary/70 hover:text-primary font-medium mt-0.5 transition-colors",children:a?i("common.showLess","Show less"):i("common.showMore","Show more")})]}),e.jsxs("div",{className:"mt-2 flex items-center justify-between gap-2",children:[e.jsxs("div",{className:"flex items-center gap-1.5 min-w-0",children:[e.jsx("div",{className:u("flex h-5 w-5 shrink-0 items-center justify-center rounded-full text-[9px] font-bold text-white",c),title:t.assignedTo,children:d}),e.jsx("span",{className:"text-xs text-muted-foreground truncate",title:t.displayName||t.assignedTo,children:t.displayName||t.assignedTo})]}),e.jsx("span",{className:u("inline-flex shrink-0 items-center rounded-full border px-1.5 py-0 text-[10px] font-semibold",o.className),children:o.label})]}),t.filedBy&&e.jsxs("p",{className:"mt-1.5 flex items-center gap-1 text-[10px] text-muted-foreground","data-testid":`task-filed-by-${t.id}`,children:[e.jsx(G,{className:"h-2.5 w-2.5 shrink-0","aria-hidden":"true"}),i("taskBoard.filedBy","Filed by {{agent}}",{agent:t.filedBy})]}),t.awardedBid&&e.jsxs("div",{className:"mt-1.5 flex items-start gap-1 rounded-md bg-emerald-500/10 px-1.5 py-1 text-[10px] text-emerald-700 dark:text-emerald-400","data-testid":`task-award-${t.id}`,title:t.awardedBid.rationale,children:[e.jsx(k,{className:"mt-0.5 h-2.5 w-2.5 shrink-0","aria-hidden":"true"}),e.jsx("span",{children:i("taskBoard.wonByBid","Won by bid — {{confidence}}% confidence, {{complexity}}",{confidence:Math.round(t.awardedBid.confidence*100),complexity:t.awardedBid.estimatedComplexity})})]}),n==="verified"&&r&&e.jsxs("div",{className:u("mt-2 flex items-start gap-1.5 rounded-md px-2 py-1.5 text-xs",r.passed?"bg-emerald-500/10 text-emerald-700 dark:text-emerald-400":"bg-destructive/10 text-destructive"),children:[r.passed?e.jsx($,{className:"h-3.5 w-3.5 shrink-0 mt-0.5"}):e.jsx(F,{className:"h-3.5 w-3.5 shrink-0 mt-0.5"}),e.jsx("span",{className:"line-clamp-2",title:r.feedback||void 0,children:r.feedback||i("taskBoard.verified","Verified")})]})]})}function ae({icon:t,label:n,count:r,colorClass:i}){return e.jsxs("div",{className:u("flex items-center justify-between rounded-t-xl px-3 py-2",i),children:[e.jsxs("div",{className:"flex items-center gap-2",children:[t,e.jsx("span",{className:"text-sm font-semibold",children:n})]}),e.jsx(f,{variant:"secondary",className:"text-[10px] px-1.5 py-0 bg-background/60",children:r})]})}function de({total:t,completed:n,verified:r,isStreaming:i}){const{t:c}=h(),d=n+r,o=t>0?Math.round(d/t*100):0;return e.jsxs("div",{className:"mb-4","data-testid":"task-board-progress",children:[e.jsxs("div",{className:"flex items-center justify-between mb-1.5",children:[e.jsx("span",{className:"text-xs font-medium text-muted-foreground",children:c("taskBoard.progress","{{done}} of {{total}} tasks done",{done:d,total:t})}),e.jsxs("div",{className:"flex items-center gap-2",children:[i&&e.jsx(D,{className:"h-3 w-3 animate-spin text-primary"}),e.jsxs("span",{className:"text-xs font-bold text-foreground tabular-nums",children:[d,"/",t," (",o,"%)"]})]})]}),e.jsx("div",{className:"h-2 w-full overflow-hidden rounded-full bg-secondary/50",role:"progressbar","aria-valuenow":o,"aria-valuemin":0,"aria-valuemax":100,"aria-label":c("taskBoard.progress","{{done}} of {{total}} tasks done",{done:d,total:t}),children:e.jsx("div",{className:"h-full rounded-full bg-linear-to-r from-primary via-primary/80 to-emerald-500 transition-all duration-700 ease-out",style:{width:`${o}%`}})})]})}function ne({taskPlan:t,tasksInProgress:n,tasksCompleted:r,taskVerifications:i,isStreaming:c,tasksAwaitingApproval:d}){const{t:o}=h(),[a,s]=g.useState(()=>{try{return localStorage.getItem("eddi-task-board-collapsed")==="true"}catch{return!1}}),{pending:m,inProgress:j,awaitingApproval:w,completed:b,verified:x}=g.useMemo(()=>{const l={pending:[],inProgress:[],awaitingApproval:[],completed:[],verified:[]};if(!t)return l;for(const p of t)switch(re(p.id,n,r,i,d)){case"pending":l.pending.push(p);break;case"in-progress":l.inProgress.push(p);break;case"awaiting-approval":l.awaitingApproval.push(p);break;case"completed":l.completed.push(p);break;case"verified":l.verified.push(p);break}return l},[t,n,r,i,d]),N=(t==null?void 0:t.length)??0;if(!t)return e.jsxs("div",{className:"flex flex-col items-center justify-center gap-3 py-16 text-muted-foreground","data-testid":"task-board-empty",children:[e.jsx(I,{className:"h-10 w-10 opacity-40"}),e.jsx("p",{className:"text-sm text-center max-w-xs",children:o("taskBoard.emptyState","Task plan will appear here when the moderator creates it")})]});const B=[{key:"pending",label:o("taskBoard.pending","Pending"),icon:e.jsx(_,{className:"h-4 w-4"}),colorClass:"bg-muted/60 text-muted-foreground",tasks:m},{key:"in-progress",label:o("taskBoard.inProgress","Active"),icon:e.jsx(V,{className:"h-4 w-4 text-amber-500"}),colorClass:"bg-amber-500/15 text-amber-700 dark:text-amber-300",tasks:j},{key:"awaiting-approval",label:o("taskBoard.awaitingApproval","Awaiting Approval"),icon:e.jsx(X,{className:"h-4 w-4 text-orange-500"}),colorClass:"bg-orange-500/15 text-orange-700 dark:text-orange-300",tasks:w},{key:"completed",label:o("taskBoard.completed","Done"),icon:e.jsx($,{className:"h-4 w-4 text-sky-500"}),colorClass:"bg-sky-500/15 text-sky-700 dark:text-sky-300",tasks:b},{key:"verified",label:o("taskBoard.verified","Verified"),icon:e.jsx(W,{className:"h-4 w-4 text-emerald-500"}),colorClass:"bg-emerald-500/15 text-emerald-700 dark:text-emerald-300",tasks:x}];return e.jsxs("div",{"data-testid":"task-board",role:"region","aria-label":o("taskBoard.title","Task Board"),children:[e.jsxs("button",{onClick:()=>{s(l=>{try{localStorage.setItem("eddi-task-board-collapsed",String(!l))}catch{}return!l})},className:"w-full flex items-center gap-2 text-sm font-semibold text-foreground mb-3 hover:text-primary transition-colors cursor-pointer","aria-expanded":!a,"aria-controls":"task-board-content",children:[e.jsx(I,{className:"h-4 w-4 text-muted-foreground"}),o("taskBoard.title","Task Board"),a?e.jsx(M,{className:"h-3.5 w-3.5 text-muted-foreground ms-auto"}):e.jsx(S,{className:"h-3.5 w-3.5 text-muted-foreground ms-auto"})]}),e.jsx(de,{total:N,completed:b.length,verified:x.length,isStreaming:c}),!a&&e.jsx("div",{className:"hidden md:grid md:grid-cols-5 gap-3",id:"task-board-content",children:B.map(l=>e.jsxs("div",{className:"rounded-xl border border-border bg-card/50 overflow-hidden flex flex-col","data-testid":`task-column-${l.key}`,role:"region","aria-label":l.label,children:[e.jsx(ae,{icon:l.icon,label:l.label,count:l.tasks.length,colorClass:l.colorClass}),e.jsxs("div",{className:"flex-1 space-y-2 p-2 min-h-[120px]",children:[l.tasks.length===0&&e.jsx("p",{className:"text-xs text-muted-foreground/50 text-center pt-8",children:"—"}),l.tasks.map(p=>e.jsx(E,{task:p,status:l.key==="in-progress"?"in-progress":l.key,verification:l.key==="verified"?i.get(p.id):void 0},p.id))]})]},l.key))}),!a&&e.jsx("div",{className:"md:hidden space-y-2",children:B.map(l=>l.tasks.length>0?e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1.5",children:[l.icon,e.jsx("span",{className:"text-xs font-semibold text-foreground",children:l.label}),e.jsx(f,{variant:"secondary",className:"text-[10px] px-1.5 py-0",children:l.tasks.length})]}),e.jsx("div",{className:"space-y-1.5 ps-1",children:l.tasks.map(p=>e.jsx(E,{task:p,status:l.key==="in-progress"?"in-progress":l.key,verification:l.key==="verified"?i.get(p.id):void 0},p.id))})]},l.key):null)})]})}function ye({taskList:t,memberDisplayNames:n}){const{t:r}=h(),i=g.useMemo(()=>t.tasks.map(s=>{var m;return{id:s.id,subject:s.subject,description:s.description,assignedTo:s.assignedDisplayName||s.assignedAgentId||r("taskBoard.unassigned","Unassigned"),priority:s.priority,filedBy:(n==null?void 0:n[s.createdByAgentId??""])??s.createdByAgentId??null,awardedBid:((m=t.awardedBids)==null?void 0:m[s.id])??null}}),[t,r,n]),c=g.useMemo(()=>new Set(t.tasks.filter(s=>s.status==="IN_PROGRESS").map(s=>s.id)),[t]),d=g.useMemo(()=>new Set(t.tasks.filter(s=>s.status==="COMPLETED").map(s=>s.id)),[t]),o=g.useMemo(()=>new Map(t.tasks.filter(s=>s.status==="VERIFIED"||s.verificationNote!=null).map(s=>[s.id,{passed:s.verified,feedback:s.verificationNote||""}])),[t]),a=g.useMemo(()=>{const s=new Set(t.tasks.filter(m=>m.status==="AWAITING_APPROVAL").map(m=>m.id));return s.size?s:void 0},[t]);return e.jsx(ne,{taskPlan:i,tasksInProgress:c,tasksCompleted:d,taskVerifications:o,tasksAwaitingApproval:a,isStreaming:!1})}const oe={VERDICT:k,VOTE:A,AGREEMENT:A,AWARD:k,NONE:O};function je({decision:t,className:n}){var a;const{t:r}=h(),i=oe[t.type]??O,c=le(t.tally),d=t.dissents??[],o=t.type==="NONE"&&!!((a=t.raw)!=null&&a.trim());return e.jsxs("div",{className:u("rounded-xl border p-4",o?"border-amber-500/30 bg-amber-500/5":"border-primary/30 bg-primary/5",n),"data-testid":"decision-record",children:[e.jsxs("div",{className:"mb-2 flex flex-wrap items-center gap-2",children:[e.jsx(i,{className:"h-4 w-4 shrink-0 text-primary","aria-hidden":"true"}),e.jsx("h3",{className:"text-sm font-semibold text-foreground",children:r(`groups.decisionType.${t.type}`,ie[t.type]??t.type)}),t.winner?e.jsx(f,{variant:"success","data-testid":"decision-winner",children:r("groups.decisionWinner","Winner: {{winner}}",{winner:t.winner})}):t.type==="VERDICT"&&e.jsx(f,{variant:"secondary","data-testid":"decision-tie",children:r("groups.decisionTie","Tie")}),t.method&&e.jsx("span",{className:"ms-auto font-mono text-[10px] text-muted-foreground",title:t.method,children:t.method})]}),t.outcome&&e.jsx("p",{className:"text-sm text-foreground","data-testid":"decision-outcome",children:t.outcome}),t.decidedAtPhase&&e.jsx("p",{className:"mt-1 text-[11px] text-muted-foreground",children:r("groups.decisionDecidedAt","Decided in {{phase}}",{phase:t.decidedAtPhase})}),c.length>0&&e.jsx("dl",{className:"mt-3 grid grid-cols-2 gap-2 sm:grid-cols-3","data-testid":"decision-tally",children:c.map(([s,m])=>e.jsxs("div",{className:"rounded-lg border border-border bg-background/60 px-2.5 py-1.5",children:[e.jsx("dt",{className:"truncate text-[10px] uppercase tracking-wider text-muted-foreground",title:s,children:s}),e.jsx("dd",{className:"text-sm font-semibold tabular-nums text-foreground",children:m})]},s))}),o&&e.jsx("p",{className:"mt-3 rounded-lg border border-amber-500/30 bg-background/60 p-2 text-[11px] text-muted-foreground",children:r("groups.decisionUnparsed","The judge's answer could not be read as a structured verdict, so it is kept verbatim below and the conclusion stands as prose.")}),o&&e.jsx("pre",{className:"mt-2 max-h-40 overflow-auto whitespace-pre-wrap break-words rounded-lg bg-background/60 p-2 text-[11px] text-muted-foreground",children:t.raw}),d.length>0&&e.jsxs("div",{className:"mt-3 border-t border-border pt-3",children:[e.jsx("h4",{className:"mb-2 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:r("groups.minorityReport","Minority report ({{total}})",{total:d.length})}),e.jsx("ul",{className:"space-y-2",children:d.map((s,m)=>e.jsxs("li",{className:"flex gap-2",children:[e.jsx("div",{className:u("mt-0.5 flex h-5 w-5 shrink-0 items-center justify-center rounded-full text-[9px] font-bold text-white",T(s.agentId||String(m))),"aria-hidden":"true",children:v(s.displayName||"?")}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("p",{className:"text-xs font-medium text-foreground",children:s.displayName||s.agentId}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s.position})]})]},`${s.agentId}-${m}`))})]})]})}const ie={VERDICT:"Verdict",VOTE:"Vote",AGREEMENT:"Agreement",AWARD:"Award",NONE:"No structured decision"};function le(t){return!t||typeof t!="object"?[]:Object.entries(t).map(([n,r])=>typeof r=="number"&&Number.isFinite(r)?[n,Number.isInteger(r)?String(r):r.toFixed(2)]:r==null?[n,"—"]:typeof r=="object"?[n,JSON.stringify(r)]:[n,String(r)])}export{Ne as D,k as G,ye as P,ne as T,je as a}; + */const Z=[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}],["path",{d:"M12 15h.01",key:"q59x07"}],["path",{d:"M12 7v4",key:"xawao1"}]],O=y("message-square-warning",Z),Q={TEXT:"📄",MARKDOWN:"📝",JSON:"🧾"};function ee({artifacts:t,className:n}){const{t:r}=h(),[i,c]=g.useState(null);return t.length===0?null:e.jsxs("div",{className:u("rounded-xl border border-sky-500/30 bg-sky-500/5 p-4",n),"data-testid":"artifacts-panel",children:[e.jsxs("h3",{className:"mb-3 flex items-center gap-1.5 text-sm font-semibold text-foreground",children:[e.jsx(Y,{className:"h-4 w-4 text-sky-600 dark:text-sky-400","aria-hidden":"true"}),r("groups.artifactsTitle","Shared Artifacts ({{count}})",{count:t.length})]}),e.jsx("div",{className:"space-y-1.5",children:t.map(d=>{var s;const o=i===d.id,a=((s=d.history)==null?void 0:s.length)??0;return e.jsxs("div",{className:"overflow-hidden rounded-lg border border-border bg-background/60","data-testid":`artifact-${d.id}`,children:[e.jsxs("button",{type:"button",onClick:()=>c(o?null:d.id),className:"flex w-full items-center gap-2 p-2.5 text-start hover:bg-secondary/30 transition-colors","aria-expanded":o,"data-testid":`artifact-toggle-${d.id}`,children:[e.jsx("span",{"aria-hidden":"true",children:Q[d.type]??"📄"}),e.jsx("span",{className:"min-w-0 flex-1 truncate text-xs font-medium text-foreground",title:d.name,children:d.name}),e.jsx(f,{variant:d.status==="FINAL"?"success":"secondary",className:"shrink-0 text-[9px] px-1.5 py-0",children:d.status==="FINAL"?r("groups.artifactFinal","Final"):r("groups.artifactDraft","Draft")}),e.jsxs("span",{className:"shrink-0 font-mono text-[10px] text-muted-foreground",children:["v",d.version]}),a>0&&e.jsxs("span",{className:"flex shrink-0 items-center gap-0.5 text-[10px] text-muted-foreground",title:r("groups.artifactRevisions",{defaultValue:"{{count}} prior revision",defaultValue_other:"{{count}} prior revisions",count:a}),children:[e.jsx(H,{className:"h-2.5 w-2.5","aria-hidden":"true"}),a]}),o?e.jsx(S,{className:"h-3.5 w-3.5 shrink-0 text-muted-foreground","aria-hidden":"true"}):e.jsx(M,{className:"h-3.5 w-3.5 shrink-0 text-muted-foreground","aria-hidden":"true"})]}),o&&e.jsxs("div",{className:"border-t border-border p-2.5","data-testid":`artifact-content-${d.id}`,children:[d.lastEditorAgentId&&e.jsx("p",{className:"mb-1.5 text-[10px] text-muted-foreground",children:r("groups.artifactLastEdited","Last edited by {{agent}}",{agent:d.lastEditorAgentId})}),d.type==="JSON"?e.jsx("pre",{className:"max-h-72 overflow-auto rounded-md bg-background p-2.5 font-mono text-[11px] leading-relaxed text-foreground","data-testid":`artifact-json-${d.id}`,children:te(d.content)}):d.type==="MARKDOWN"?e.jsx("div",{className:"prose prose-sm dark:prose-invert max-w-none rounded-md bg-background p-2.5 text-xs",children:e.jsx(R,{remarkPlugins:[P],children:d.content})}):e.jsx("pre",{className:"max-h-72 overflow-auto whitespace-pre-wrap break-words rounded-md bg-background p-2.5 text-xs text-foreground",children:d.content})]})]},d.id)})})]})}function te(t){try{return JSON.stringify(JSON.parse(t),null,2)}catch{return t}}function se({negotiation:t,memberDisplayNames:n,className:r}){const{t:i}=h(),c=a=>(n==null?void 0:n[a])??a,d=t.proposals??[],o=t.concessions??[];return d.length===0&&o.length===0?null:e.jsxs("div",{className:u("rounded-xl border border-emerald-500/30 bg-emerald-500/5 p-4",r),"data-testid":"negotiation-ledger",children:[e.jsxs("h3",{className:"mb-3 flex items-center gap-1.5 text-sm font-semibold text-foreground",children:[e.jsx(U,{className:"h-4 w-4 text-emerald-600 dark:text-emerald-400","aria-hidden":"true"}),i("groups.negotiationTableTitle","Negotiation Table")]}),d.length>0&&e.jsx("div",{className:"space-y-1.5",children:d.map(a=>e.jsxs("div",{className:u("rounded-lg border bg-background/60 p-2.5",a.status==="OPEN"?"border-emerald-500/30":"border-border opacity-70"),"data-testid":`negotiation-proposal-${a.id}`,children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-1.5",children:[e.jsx("div",{className:u("flex h-5 w-5 shrink-0 items-center justify-center rounded-full text-[9px] font-bold text-white",T(a.byAgentId)),"aria-hidden":"true",children:v(c(a.byAgentId))}),e.jsx("span",{className:"text-xs font-medium text-foreground",children:c(a.byAgentId)}),e.jsx("span",{className:"font-mono text-[10px] text-muted-foreground",children:a.id}),e.jsx(f,{variant:a.status==="OPEN"?"success":"secondary",className:"text-[9px] px-1.5 py-0","data-testid":`negotiation-proposal-status-${a.id}`,children:a.status==="OPEN"?i("groups.negotiationOpen","Open"):i("groups.negotiationSuperseded","Superseded")}),e.jsx("span",{className:"ms-auto text-[10px] text-muted-foreground",children:i("groups.negotiationRound","Round {{round}}",{round:a.round})})]}),e.jsx("p",{className:"mt-1.5 text-xs text-foreground",children:a.terms}),a.acceptedBy.length>0&&e.jsx("p",{className:"mt-1.5 text-[10px] text-muted-foreground",children:i("groups.negotiationAcceptedBy","Accepted by: {{names}}",{names:a.acceptedBy.map(c).join(", ")})})]},a.id))}),o.length>0&&e.jsxs("div",{className:"mt-3 border-t border-emerald-500/20 pt-3",children:[e.jsxs("h4",{className:"mb-1.5 flex items-center gap-1 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:[e.jsx(L,{className:"h-3 w-3","aria-hidden":"true"}),i("groups.concessionLedgerTitle","Concession ledger")]}),e.jsx("ul",{className:"space-y-1.5",children:o.map((a,s)=>e.jsxs("li",{className:"rounded-lg border border-border bg-background/60 p-2 text-xs","data-testid":`negotiation-concession-${s}`,children:[e.jsx("span",{className:"font-medium text-foreground",children:c(a.byAgentId)})," ",i("groups.negotiationGaveUp","gave up")," ",e.jsx("span",{className:"text-foreground",children:a.gaveUp})," ",i("groups.negotiationInReturnFor","in return for")," ",e.jsx("span",{className:"text-foreground",children:a.inReturnFor}),a.refProposalId&&e.jsxs("span",{className:"ms-1 font-mono text-[10px] text-muted-foreground",children:["(",a.refProposalId,")"]})]},`${a.byAgentId}-${a.round}-${s}`))})]})]})}function Ne({conversation:t,retroRecorded:n,artifactUpdates:r,className:i}){var w,b;const{t:c}=h(),d=(t==null?void 0:t.artifacts)??[],o=(t==null?void 0:t.negotiation)??null,a=(t==null?void 0:t.summaryUpToIndex)??0,s=n??[],m=r??[],j=!!o&&((((w=o.proposals)==null?void 0:w.length)??0)>0||(((b=o.concessions)==null?void 0:b.length)??0)>0);return d.length===0&&!j&&a<=0&&s.length===0&&m.length===0?null:e.jsxs("div",{className:u("space-y-3",i),"data-testid":"discussion-insights",children:[d.length>0&&e.jsx(ee,{artifacts:d}),j&&e.jsx(se,{negotiation:o,memberDisplayNames:t==null?void 0:t.memberDisplayNames}),a>0&&e.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-border bg-secondary/20 p-2.5 text-xs text-muted-foreground","data-testid":"transcript-window-summary",title:(t==null?void 0:t.transcriptSummary)??void 0,children:[e.jsx("span",{"aria-hidden":"true",children:"📜"}),e.jsx("span",{children:c("groups.transcriptWindowed","The first {{count}} transcript entries were folded into a rolling summary to keep later turns' context bounded. Hover for the summary.",{count:a})})]}),s.length>0&&e.jsx("div",{className:"flex flex-wrap items-center gap-2","data-testid":"retro-recorded-summary",children:s.map((x,N)=>e.jsxs("span",{className:"inline-flex items-center gap-1.5 rounded-full border border-violet-500/30 bg-violet-500/5 px-2.5 py-1 text-xs text-violet-600 dark:text-violet-400",children:["🪞"," ",c("groups.retroRecordedBadge",{defaultValue:"{{phase}}: {{count}} lesson saved to team memory",defaultValue_other:"{{phase}}: {{count}} lessons saved to team memory",phase:x.phaseName,count:x.lessonsStored})]},`${x.phaseName}-${N}`))}),m.length>0&&e.jsx("div",{className:"flex flex-wrap items-center gap-2","data-testid":"artifact-updates-summary",children:m.map((x,N)=>e.jsxs("span",{className:"inline-flex items-center gap-1.5 rounded-full border border-sky-500/30 bg-sky-500/5 px-2.5 py-1 text-xs text-sky-600 dark:text-sky-400",children:["📎"," ",x.created?c("groups.artifactCreatedBadge","{{name}} created (v{{version}})",{name:x.name,version:x.version}):c("groups.artifactUpdatedBadge","{{name}} updated (v{{version}})",{name:x.name,version:x.version})]},`${x.artifactId}-${x.version}-${N}`))})]})}const C={0:{label:"P0",className:"bg-red-500/15 text-red-700 dark:text-red-400 border-red-500/30"},1:{label:"P1",className:"bg-orange-500/15 text-orange-700 dark:text-orange-400 border-orange-500/30"},2:{label:"P2",className:"bg-blue-500/15 text-blue-700 dark:text-blue-400 border-blue-500/30"},3:{label:"P3",className:"bg-muted text-muted-foreground border-border"}};function re(t,n,r,i,c){return i.has(t)?"verified":c!=null&&c.has(t)?"awaiting-approval":r.has(t)?"completed":n.has(t)?"in-progress":"pending"}function E({task:t,status:n,verification:r}){const{t:i}=h(),c=T(t.assignedTo),d=v(t.assignedTo),o=C[t.priority]??C[3],[a,s]=g.useState(!1);return e.jsxs("div",{"data-testid":`task-card-${t.id}`,className:u("rounded-lg border p-3 transition-all duration-500 ease-out","transform-gpu",n==="pending"&&"bg-secondary/30 border-border",n==="in-progress"&&"bg-amber-500/10 border-amber-500/40 animate-[pulse-border_2s_ease-in-out_infinite]",n==="awaiting-approval"&&"bg-orange-500/10 border-orange-500/40",n==="completed"&&"bg-sky-500/10 border-sky-500/40",n==="verified"&&(r==null?void 0:r.passed)&&"bg-emerald-500/10 border-emerald-500/40",n==="verified"&&r&&!r.passed&&"bg-destructive/10 border-destructive/40"),children:[e.jsx("p",{className:"text-sm font-bold text-foreground line-clamp-2",title:t.subject,children:t.subject}),t.description&&e.jsxs("div",{className:"mt-1",children:[e.jsx("p",{className:u("text-xs text-muted-foreground",!a&&"line-clamp-2"),children:t.description}),t.description.length>120&&e.jsx("button",{type:"button",onClick:()=>s(!a),className:"text-[10px] text-primary/70 hover:text-primary font-medium mt-0.5 transition-colors",children:a?i("common.showLess","Show less"):i("common.showMore","Show more")})]}),e.jsxs("div",{className:"mt-2 flex items-center justify-between gap-2",children:[e.jsxs("div",{className:"flex items-center gap-1.5 min-w-0",children:[e.jsx("div",{className:u("flex h-5 w-5 shrink-0 items-center justify-center rounded-full text-[9px] font-bold text-white",c),title:t.assignedTo,children:d}),e.jsx("span",{className:"text-xs text-muted-foreground truncate",title:t.displayName||t.assignedTo,children:t.displayName||t.assignedTo})]}),e.jsx("span",{className:u("inline-flex shrink-0 items-center rounded-full border px-1.5 py-0 text-[10px] font-semibold",o.className),children:o.label})]}),t.filedBy&&e.jsxs("p",{className:"mt-1.5 flex items-center gap-1 text-[10px] text-muted-foreground","data-testid":`task-filed-by-${t.id}`,children:[e.jsx(G,{className:"h-2.5 w-2.5 shrink-0","aria-hidden":"true"}),i("taskBoard.filedBy","Filed by {{agent}}",{agent:t.filedBy})]}),t.awardedBid&&e.jsxs("div",{className:"mt-1.5 flex items-start gap-1 rounded-md bg-emerald-500/10 px-1.5 py-1 text-[10px] text-emerald-700 dark:text-emerald-400","data-testid":`task-award-${t.id}`,title:t.awardedBid.rationale,children:[e.jsx(k,{className:"mt-0.5 h-2.5 w-2.5 shrink-0","aria-hidden":"true"}),e.jsx("span",{children:i("taskBoard.wonByBid","Won by bid — {{confidence}}% confidence, {{complexity}}",{confidence:Math.round(t.awardedBid.confidence*100),complexity:t.awardedBid.estimatedComplexity})})]}),n==="verified"&&r&&e.jsxs("div",{className:u("mt-2 flex items-start gap-1.5 rounded-md px-2 py-1.5 text-xs",r.passed?"bg-emerald-500/10 text-emerald-700 dark:text-emerald-400":"bg-destructive/10 text-destructive"),children:[r.passed?e.jsx($,{className:"h-3.5 w-3.5 shrink-0 mt-0.5"}):e.jsx(F,{className:"h-3.5 w-3.5 shrink-0 mt-0.5"}),e.jsx("span",{className:"line-clamp-2",title:r.feedback||void 0,children:r.feedback||i("taskBoard.verified","Verified")})]})]})}function ae({icon:t,label:n,count:r,colorClass:i}){return e.jsxs("div",{className:u("flex items-center justify-between rounded-t-xl px-3 py-2",i),children:[e.jsxs("div",{className:"flex items-center gap-2",children:[t,e.jsx("span",{className:"text-sm font-semibold",children:n})]}),e.jsx(f,{variant:"secondary",className:"text-[10px] px-1.5 py-0 bg-background/60",children:r})]})}function de({total:t,completed:n,verified:r,isStreaming:i}){const{t:c}=h(),d=n+r,o=t>0?Math.round(d/t*100):0;return e.jsxs("div",{className:"mb-4","data-testid":"task-board-progress",children:[e.jsxs("div",{className:"flex items-center justify-between mb-1.5",children:[e.jsx("span",{className:"text-xs font-medium text-muted-foreground",children:c("taskBoard.progress","{{done}} of {{total}} tasks done",{done:d,total:t})}),e.jsxs("div",{className:"flex items-center gap-2",children:[i&&e.jsx(D,{className:"h-3 w-3 animate-spin text-primary"}),e.jsxs("span",{className:"text-xs font-bold text-foreground tabular-nums",children:[d,"/",t," (",o,"%)"]})]})]}),e.jsx("div",{className:"h-2 w-full overflow-hidden rounded-full bg-secondary/50",role:"progressbar","aria-valuenow":o,"aria-valuemin":0,"aria-valuemax":100,"aria-label":c("taskBoard.progress","{{done}} of {{total}} tasks done",{done:d,total:t}),children:e.jsx("div",{className:"h-full rounded-full bg-linear-to-r from-primary via-primary/80 to-emerald-500 transition-all duration-700 ease-out",style:{width:`${o}%`}})})]})}function ne({taskPlan:t,tasksInProgress:n,tasksCompleted:r,taskVerifications:i,isStreaming:c,tasksAwaitingApproval:d}){const{t:o}=h(),[a,s]=g.useState(()=>{try{return localStorage.getItem("eddi-task-board-collapsed")==="true"}catch{return!1}}),{pending:m,inProgress:j,awaitingApproval:w,completed:b,verified:x}=g.useMemo(()=>{const l={pending:[],inProgress:[],awaitingApproval:[],completed:[],verified:[]};if(!t)return l;for(const p of t)switch(re(p.id,n,r,i,d)){case"pending":l.pending.push(p);break;case"in-progress":l.inProgress.push(p);break;case"awaiting-approval":l.awaitingApproval.push(p);break;case"completed":l.completed.push(p);break;case"verified":l.verified.push(p);break}return l},[t,n,r,i,d]),N=(t==null?void 0:t.length)??0;if(!t)return e.jsxs("div",{className:"flex flex-col items-center justify-center gap-3 py-16 text-muted-foreground","data-testid":"task-board-empty",children:[e.jsx(A,{className:"h-10 w-10 opacity-40"}),e.jsx("p",{className:"text-sm text-center max-w-xs",children:o("taskBoard.emptyState","Task plan will appear here when the moderator creates it")})]});const B=[{key:"pending",label:o("taskBoard.pending","Pending"),icon:e.jsx(_,{className:"h-4 w-4"}),colorClass:"bg-muted/60 text-muted-foreground",tasks:m},{key:"in-progress",label:o("taskBoard.inProgress","Active"),icon:e.jsx(V,{className:"h-4 w-4 text-amber-500"}),colorClass:"bg-amber-500/15 text-amber-700 dark:text-amber-300",tasks:j},{key:"awaiting-approval",label:o("taskBoard.awaitingApproval","Awaiting Approval"),icon:e.jsx(X,{className:"h-4 w-4 text-orange-500"}),colorClass:"bg-orange-500/15 text-orange-700 dark:text-orange-300",tasks:w},{key:"completed",label:o("taskBoard.completed","Done"),icon:e.jsx($,{className:"h-4 w-4 text-sky-500"}),colorClass:"bg-sky-500/15 text-sky-700 dark:text-sky-300",tasks:b},{key:"verified",label:o("taskBoard.verified","Verified"),icon:e.jsx(W,{className:"h-4 w-4 text-emerald-500"}),colorClass:"bg-emerald-500/15 text-emerald-700 dark:text-emerald-300",tasks:x}];return e.jsxs("div",{"data-testid":"task-board",role:"region","aria-label":o("taskBoard.title","Task Board"),children:[e.jsxs("button",{onClick:()=>{s(l=>{try{localStorage.setItem("eddi-task-board-collapsed",String(!l))}catch{}return!l})},className:"w-full flex items-center gap-2 text-sm font-semibold text-foreground mb-3 hover:text-primary transition-colors cursor-pointer","aria-expanded":!a,"aria-controls":"task-board-content",children:[e.jsx(A,{className:"h-4 w-4 text-muted-foreground"}),o("taskBoard.title","Task Board"),a?e.jsx(M,{className:"h-3.5 w-3.5 text-muted-foreground ms-auto"}):e.jsx(S,{className:"h-3.5 w-3.5 text-muted-foreground ms-auto"})]}),e.jsx(de,{total:N,completed:b.length,verified:x.length,isStreaming:c}),!a&&e.jsx("div",{className:"hidden md:grid md:grid-cols-5 gap-3",id:"task-board-content",children:B.map(l=>e.jsxs("div",{className:"rounded-xl border border-border bg-card/50 overflow-hidden flex flex-col","data-testid":`task-column-${l.key}`,role:"region","aria-label":l.label,children:[e.jsx(ae,{icon:l.icon,label:l.label,count:l.tasks.length,colorClass:l.colorClass}),e.jsxs("div",{className:"flex-1 space-y-2 p-2 min-h-[120px]",children:[l.tasks.length===0&&e.jsx("p",{className:"text-xs text-muted-foreground/50 text-center pt-8",children:"—"}),l.tasks.map(p=>e.jsx(E,{task:p,status:l.key==="in-progress"?"in-progress":l.key,verification:l.key==="verified"?i.get(p.id):void 0},p.id))]})]},l.key))}),!a&&e.jsx("div",{className:"md:hidden space-y-2",children:B.map(l=>l.tasks.length>0?e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1.5",children:[l.icon,e.jsx("span",{className:"text-xs font-semibold text-foreground",children:l.label}),e.jsx(f,{variant:"secondary",className:"text-[10px] px-1.5 py-0",children:l.tasks.length})]}),e.jsx("div",{className:"space-y-1.5 ps-1",children:l.tasks.map(p=>e.jsx(E,{task:p,status:l.key==="in-progress"?"in-progress":l.key,verification:l.key==="verified"?i.get(p.id):void 0},p.id))})]},l.key):null)})]})}function ye({taskList:t,memberDisplayNames:n}){const{t:r}=h(),i=g.useMemo(()=>t.tasks.map(s=>{var m;return{id:s.id,subject:s.subject,description:s.description,assignedTo:s.assignedDisplayName||s.assignedAgentId||r("taskBoard.unassigned","Unassigned"),priority:s.priority,filedBy:(n==null?void 0:n[s.createdByAgentId??""])??s.createdByAgentId??null,awardedBid:((m=t.awardedBids)==null?void 0:m[s.id])??null}}),[t,r,n]),c=g.useMemo(()=>new Set(t.tasks.filter(s=>s.status==="IN_PROGRESS").map(s=>s.id)),[t]),d=g.useMemo(()=>new Set(t.tasks.filter(s=>s.status==="COMPLETED").map(s=>s.id)),[t]),o=g.useMemo(()=>new Map(t.tasks.filter(s=>s.status==="VERIFIED"||s.verificationNote!=null).map(s=>[s.id,{passed:s.verified,feedback:s.verificationNote||""}])),[t]),a=g.useMemo(()=>{const s=new Set(t.tasks.filter(m=>m.status==="AWAITING_APPROVAL").map(m=>m.id));return s.size?s:void 0},[t]);return e.jsx(ne,{taskPlan:i,tasksInProgress:c,tasksCompleted:d,taskVerifications:o,tasksAwaitingApproval:a,isStreaming:!1})}const oe={VERDICT:k,VOTE:I,AGREEMENT:I,AWARD:k,NONE:O};function je({decision:t,className:n}){var a;const{t:r}=h(),i=oe[t.type]??O,c=le(t.tally),d=t.dissents??[],o=t.type==="NONE"&&!!((a=t.raw)!=null&&a.trim());return e.jsxs("div",{className:u("rounded-xl border p-4",o?"border-amber-500/30 bg-amber-500/5":"border-primary/30 bg-primary/5",n),"data-testid":"decision-record",children:[e.jsxs("div",{className:"mb-2 flex flex-wrap items-center gap-2",children:[e.jsx(i,{className:"h-4 w-4 shrink-0 text-primary","aria-hidden":"true"}),e.jsx("h3",{className:"text-sm font-semibold text-foreground",children:r(`groups.decisionType.${t.type}`,ie[t.type]??t.type)}),t.winner?e.jsx(f,{variant:"success","data-testid":"decision-winner",children:r("groups.decisionWinner","Winner: {{winner}}",{winner:t.winner})}):t.type==="VERDICT"&&e.jsx(f,{variant:"secondary","data-testid":"decision-tie",children:r("groups.decisionTie","Tie")}),t.method&&e.jsx("span",{className:"ms-auto font-mono text-[10px] text-muted-foreground",title:t.method,children:t.method})]}),t.outcome&&e.jsx("p",{className:"text-sm text-foreground","data-testid":"decision-outcome",children:t.outcome}),t.decidedAtPhase&&e.jsx("p",{className:"mt-1 text-[11px] text-muted-foreground",children:r("groups.decisionDecidedAt","Decided in {{phase}}",{phase:t.decidedAtPhase})}),c.length>0&&e.jsx("dl",{className:"mt-3 grid grid-cols-2 gap-2 sm:grid-cols-3","data-testid":"decision-tally",children:c.map(([s,m])=>e.jsxs("div",{className:"rounded-lg border border-border bg-background/60 px-2.5 py-1.5",children:[e.jsx("dt",{className:"truncate text-[10px] uppercase tracking-wider text-muted-foreground",title:s,children:s}),e.jsx("dd",{className:"text-sm font-semibold tabular-nums text-foreground",children:m})]},s))}),o&&e.jsx("p",{className:"mt-3 rounded-lg border border-amber-500/30 bg-background/60 p-2 text-[11px] text-muted-foreground",children:r("groups.decisionUnparsed","The judge's answer could not be read as a structured verdict, so it is kept verbatim below and the conclusion stands as prose.")}),o&&e.jsx("pre",{className:"mt-2 max-h-40 overflow-auto whitespace-pre-wrap break-words rounded-lg bg-background/60 p-2 text-[11px] text-muted-foreground",children:t.raw}),d.length>0&&e.jsxs("div",{className:"mt-3 border-t border-border pt-3",children:[e.jsx("h4",{className:"mb-2 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:r("groups.minorityReport","Minority report ({{total}})",{total:d.length})}),e.jsx("ul",{className:"space-y-2",children:d.map((s,m)=>e.jsxs("li",{className:"flex gap-2",children:[e.jsx("div",{className:u("mt-0.5 flex h-5 w-5 shrink-0 items-center justify-center rounded-full text-[9px] font-bold text-white",T(s.agentId||String(m))),"aria-hidden":"true",children:v(s.displayName||"?")}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("p",{className:"text-xs font-medium text-foreground",children:s.displayName||s.agentId}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s.position})]})]},`${s.agentId}-${m}`))})]})]})}const ie={VERDICT:"Verdict",VOTE:"Vote",AGREEMENT:"Agreement",AWARD:"Award",NONE:"No structured decision"};function le(t){return!t||typeof t!="object"?[]:Object.entries(t).map(([n,r])=>typeof r=="number"&&Number.isFinite(r)?[n,Number.isInteger(r)?String(r):r.toFixed(2)]:r==null?[n,"—"]:typeof r=="object"?[n,JSON.stringify(r)]:[n,String(r)])}export{Ne as D,k as G,ye as P,ne as T,je as a}; diff --git a/src/main/resources/META-INF/resources/assets/dollar-sign-Dt9VyGPU.js b/src/main/resources/META-INF/resources/assets/dollar-sign-HonLwnZc.js similarity index 88% rename from src/main/resources/META-INF/resources/assets/dollar-sign-Dt9VyGPU.js rename to src/main/resources/META-INF/resources/assets/dollar-sign-HonLwnZc.js index c694d72b62..4a1edc5c4c 100644 --- a/src/main/resources/META-INF/resources/assets/dollar-sign-Dt9VyGPU.js +++ b/src/main/resources/META-INF/resources/assets/dollar-sign-HonLwnZc.js @@ -1,4 +1,4 @@ -import{x as o}from"./index-BY6d8wze.js";/** +import{x as o}from"./index-BnLj1hck.js";/** * @license lucide-react v0.577.0 - ISC * * This source code is licensed under the ISC license. diff --git a/src/main/resources/META-INF/resources/assets/download-DZjrnAjT.js b/src/main/resources/META-INF/resources/assets/download-CVl_y-4e.js similarity index 89% rename from src/main/resources/META-INF/resources/assets/download-DZjrnAjT.js rename to src/main/resources/META-INF/resources/assets/download-CVl_y-4e.js index 9f4ef81b83..90fcc8a991 100644 --- a/src/main/resources/META-INF/resources/assets/download-DZjrnAjT.js +++ b/src/main/resources/META-INF/resources/assets/download-CVl_y-4e.js @@ -1,4 +1,4 @@ -import{x as o}from"./index-BY6d8wze.js";/** +import{x as o}from"./index-BnLj1hck.js";/** * @license lucide-react v0.577.0 - ISC * * This source code is licensed under the ISC license. diff --git a/src/main/resources/META-INF/resources/assets/dropdown-menu-0RIXy_ad.js b/src/main/resources/META-INF/resources/assets/dropdown-menu-DgcKfbXK.js similarity index 99% rename from src/main/resources/META-INF/resources/assets/dropdown-menu-0RIXy_ad.js rename to src/main/resources/META-INF/resources/assets/dropdown-menu-DgcKfbXK.js index 8a2aff54c7..b2590d15f3 100644 --- a/src/main/resources/META-INF/resources/assets/dropdown-menu-0RIXy_ad.js +++ b/src/main/resources/META-INF/resources/assets/dropdown-menu-DgcKfbXK.js @@ -1 +1 @@ -import{eb as Se,r as m,ec as U,j as b,ed as Ze,aQ as An,ee as Ce,ef as rt,eg as ie,eh as En,ei as Qe,ej as j,ek as Dt,el as _t,em as On,en as In,eo as Dn,ep as _n,eq as Tn,er as Fn,es as Ln,i as Ne}from"./index-BY6d8wze.js";function Tt(e){const t=e+"CollectionProvider",[n,o]=Se(t),[r,s]=n(t,{collectionRef:{current:null},itemMap:new Map}),i=h=>{const{scope:v,children:x}=h,w=m.useRef(null),C=m.useRef(new Map).current;return b.jsx(r,{scope:v,itemMap:C,collectionRef:w,children:x})};i.displayName=t;const c=e+"CollectionSlot",l=Ze(c),a=m.forwardRef((h,v)=>{const{scope:x,children:w}=h,C=s(c,x),M=U(v,C.collectionRef);return b.jsx(l,{ref:M,children:w})});a.displayName=c;const p=e+"CollectionItemSlot",u="data-radix-collection-item",d=Ze(p),f=m.forwardRef((h,v)=>{const{scope:x,children:w,...C}=h,M=m.useRef(null),S=U(v,M),y=s(p,x);return m.useEffect(()=>(y.itemMap.set(M,{ref:M,...C}),()=>void y.itemMap.delete(M))),b.jsx(d,{[u]:"",ref:S,children:w})});f.displayName=p;function g(h){const v=s(e+"CollectionConsumer",h);return m.useCallback(()=>{const w=v.collectionRef.current;if(!w)return[];const C=Array.from(w.querySelectorAll(`[${u}]`));return Array.from(v.itemMap.values()).sort((y,P)=>C.indexOf(y.ref.current)-C.indexOf(P.ref.current))},[v.collectionRef,v.itemMap])}return[{Provider:i,Slot:a,ItemSlot:f},g,o]}var Nn=m.createContext(void 0);function Ft(e){const t=m.useContext(Nn);return e||t||"ltr"}const jn=["top","right","bottom","left"],oe=Math.min,q=Math.max,De=Math.round,Oe=Math.floor,Z=e=>({x:e,y:e}),kn={left:"right",right:"left",bottom:"top",top:"bottom"};function Lt(e,t,n){return q(e,oe(t,n))}function Q(e,t){return typeof e=="function"?e(t):e}function re(e){return e.split("-")[0]}function he(e){return e.split("-")[1]}function it(e){return e==="x"?"y":"x"}function st(e){return e==="y"?"height":"width"}function V(e){const t=e[0];return t==="t"||t==="b"?"y":"x"}function ct(e){return it(V(e))}function $n(e,t,n){n===void 0&&(n=!1);const o=he(e),r=ct(e),s=st(r);let i=r==="x"?o===(n?"end":"start")?"right":"left":o==="start"?"bottom":"top";return t.reference[s]>t.floating[s]&&(i=_e(i)),[i,_e(i)]}function Hn(e){const t=_e(e);return[Je(e),t,Je(t)]}function Je(e){return e.includes("start")?e.replace("start","end"):e.replace("end","start")}const yt=["left","right"],bt=["right","left"],Wn=["top","bottom"],Kn=["bottom","top"];function Bn(e,t,n){switch(e){case"top":case"bottom":return n?t?bt:yt:t?yt:bt;case"left":case"right":return t?Wn:Kn;default:return[]}}function Gn(e,t,n,o){const r=he(e);let s=Bn(re(e),n==="start",o);return r&&(s=s.map(i=>i+"-"+r),t&&(s=s.concat(s.map(Je)))),s}function _e(e){const t=re(e);return kn[t]+e.slice(t.length)}function zn(e){var t,n,o,r;return{top:(t=e.top)!=null?t:0,right:(n=e.right)!=null?n:0,bottom:(o=e.bottom)!=null?o:0,left:(r=e.left)!=null?r:0}}function Nt(e){return typeof e!="number"?zn(e):{top:e,right:e,bottom:e,left:e}}function Te(e){const{x:t,y:n,width:o,height:r}=e;return{width:o,height:r,top:n,left:t,right:t+o,bottom:n+r,x:t,y:n}}function Ct(e,t,n){let{reference:o,floating:r}=e;const s=V(t),i=ct(t),c=st(i),l=re(t),a=s==="y",p=o.x+o.width/2-r.width/2,u=o.y+o.height/2-r.height/2,d=o[c]/2-r[c]/2;let f;switch(l){case"top":f={x:p,y:o.y-r.height};break;case"bottom":f={x:p,y:o.y+o.height};break;case"right":f={x:o.x+o.width,y:u};break;case"left":f={x:o.x-r.width,y:u};break;default:f={x:o.x,y:o.y}}const g=he(t);return g&&(f[i]+=d*(g==="end"?1:-1)*(n&&a?-1:1)),f}async function Vn(e,t){var n;t===void 0&&(t={});const{x:o,y:r,platform:s,rects:i,elements:c,strategy:l}=e,{boundary:a="clippingAncestors",rootBoundary:p="viewport",elementContext:u="floating",altBoundary:d=!1,padding:f=0}=Q(t,e),g=Nt(f),v=c[d?u==="floating"?"reference":"floating":u],x=Te(await s.getClippingRect({element:(n=await(s.isElement==null?void 0:s.isElement(v)))==null||n?v:v.contextElement||await(s.getDocumentElement==null?void 0:s.getDocumentElement(c.floating)),boundary:a,rootBoundary:p,strategy:l})),w=u==="floating"?{x:o,y:r,width:i.floating.width,height:i.floating.height}:i.reference,C=await(s.getOffsetParent==null?void 0:s.getOffsetParent(c.floating)),M=await(s.isElement==null?void 0:s.isElement(C))&&await(s.getScale==null?void 0:s.getScale(C))||{x:1,y:1},S=Te(s.convertOffsetParentRelativeRectToViewportRelativeRect?await s.convertOffsetParentRelativeRectToViewportRelativeRect({elements:c,rect:w,offsetParent:C,strategy:l}):w);return{top:(x.top-S.top+g.top)/M.y,bottom:(S.bottom-x.bottom+g.bottom)/M.y,left:(x.left-S.left+g.left)/M.x,right:(S.right-x.right+g.right)/M.x}}const Un=50,Xn=async(e,t,n)=>{const{placement:o="bottom",strategy:r="absolute",middleware:s=[],platform:i}=n,c=i.detectOverflow?i:{...i,detectOverflow:Vn},l=await(i.isRTL==null?void 0:i.isRTL(t));let a=await i.getElementRects({reference:e,floating:t,strategy:r}),{x:p,y:u}=Ct(a,o,l),d=o,f=0;const g={};for(let h=0;h({name:"arrow",options:e,async fn(t){const{x:n,y:o,placement:r,rects:s,platform:i,elements:c,middlewareData:l}=t,{element:a,padding:p=0}=Q(e,t)||{};if(a==null)return{};const u=Nt(p),d={x:n,y:o},f=ct(r),g=st(f),h=await i.getDimensions(a),v=f==="y",x=v?"top":"left",w=v?"bottom":"right",C=v?"clientHeight":"clientWidth",M=s.reference[g]+s.reference[f]-d[f]-s.floating[g],S=d[f]-s.reference[f],y=await(i.getOffsetParent==null?void 0:i.getOffsetParent(a));let P=y?y[C]:0;(!P||!await(i.isElement==null?void 0:i.isElement(y)))&&(P=c.floating[C]||s.floating[g]);const O=M/2-S/2,E=P/2-h[g]/2-1,I=oe(u[x],E),k=oe(u[w],E),$=P-h[g]-k,F=P/2-h[g]/2+O,T=Lt(I,F,$),H=!l.arrow&&he(r)!=null&&F!==T&&s.reference[g]/2-(FT<=0)){var k,$;const T=(((k=s.flip)==null?void 0:k.index)||0)+1,H=P[T];if(H&&(!(u==="alignment"?w!==V(H):!1)||I.every(A=>V(A.placement)===w?A.overflows[0]>0:!0)))return{data:{index:T,overflows:I},reset:{placement:H}};let L=($=I.filter(N=>N.overflows[0]<=0).sort((N,A)=>N.overflows[1]-A.overflows[1])[0])==null?void 0:$.placement;if(!L)switch(f){case"bestFit":{var F;const N=(F=I.filter(A=>{if(y){const D=V(A.placement);return D===w||D==="y"}return!0}).map(A=>[A.placement,A.overflows.filter(D=>D>0).reduce((D,R)=>D+R,0)]).sort((A,D)=>A[1]-D[1])[0])==null?void 0:F[0];N&&(L=N);break}case"initialPlacement":L=c;break}if(r!==L)return{reset:{placement:L}}}return{}}}};function Rt(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function Mt(e){return jn.some(t=>e[t]>=0)}const Zn=function(e){return e===void 0&&(e={}),{name:"hide",options:e,async fn(t){const{rects:n,platform:o}=t,{strategy:r="referenceHidden",...s}=Q(e,t);switch(r){case"referenceHidden":{const i=await o.detectOverflow(t,{...s,elementContext:"reference"}),c=Rt(i,n.reference);return{data:{referenceHiddenOffsets:c,referenceHidden:Mt(c)}}}case"escaped":{const i=await o.detectOverflow(t,{...s,altBoundary:!0}),c=Rt(i,n.floating);return{data:{escapedOffsets:c,escaped:Mt(c)}}}default:return{}}}}},jt=new Set(["left","top"]);async function Qn(e,t){const{placement:n,platform:o,elements:r}=e,s=await(o.isRTL==null?void 0:o.isRTL(r.floating)),i=re(n),c=he(n),l=V(n)==="y",a=jt.has(i)?-1:1,p=s&&l?-1:1,u=Q(t,e);let{mainAxis:d,crossAxis:f,alignmentAxis:g}=typeof u=="number"?{mainAxis:u,crossAxis:0,alignmentAxis:null}:{mainAxis:u.mainAxis||0,crossAxis:u.crossAxis||0,alignmentAxis:u.alignmentAxis};return c&&typeof g=="number"&&(f=c==="end"?g*-1:g),l?{x:f*p,y:d*a}:{x:d*a,y:f*p}}const Jn=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){var n,o;const{x:r,y:s,placement:i,middlewareData:c}=t,l=await Qn(t,e);return i===((n=c.offset)==null?void 0:n.placement)&&(o=c.arrow)!=null&&o.alignmentOffset?{}:{x:r+l.x,y:s+l.y,data:{...l,placement:i}}}}},eo=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:n,y:o,placement:r,platform:s}=t,{mainAxis:i=!0,crossAxis:c=!1,limiter:l={fn:w=>{let{x:C,y:M}=w;return{x:C,y:M}}},...a}=Q(e,t),p={x:n,y:o},u=await s.detectOverflow(t,a),d=V(r),f=it(d);let g=p[f],h=p[d];const v=(w,C)=>Lt(C+u[w==="y"?"top":"left"],C,C-u[w==="y"?"bottom":"right"]);i&&(g=v(f,g)),c&&(h=v(d,h));const x=l.fn({...t,[f]:g,[d]:h});return{...x,data:{x:x.x-n,y:x.y-o,enabled:{[f]:i,[d]:c}}}}}},to=function(e){return e===void 0&&(e={}),{options:e,fn(t){var n,o;const{x:r,y:s,placement:i,rects:c,middlewareData:l}=t,{offset:a=0,mainAxis:p=!0,crossAxis:u=!0}=Q(e,t),d={x:r,y:s},f=V(i),g=it(f);let h=d[g],v=d[f];const x=Q(a,t),w=typeof x=="number"?{mainAxis:x,crossAxis:0}:{mainAxis:(n=x.mainAxis)!=null?n:0,crossAxis:(o=x.crossAxis)!=null?o:0};if(p){const S=g==="y"?"height":"width",y=c.reference[g]-c.floating[S]+w.mainAxis,P=c.reference[g]+c.reference[S]-w.mainAxis;hP&&(h=P)}if(u){var C,M;const S=g==="y"?"width":"height",y=jt.has(re(i)),P=c.reference[f]-c.floating[S]+(y&&((C=l.offset)==null?void 0:C[f])||0)+(y?0:w.crossAxis),O=c.reference[f]+c.reference[S]+(y?0:((M=l.offset)==null?void 0:M[f])||0)-(y?w.crossAxis:0);vO&&(v=O)}return{[g]:h,[f]:v}}}},no=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(t){const{placement:n,rects:o,platform:r,elements:s}=t,{apply:i=()=>{},...c}=Q(e,t),l=await r.detectOverflow(t,c),a=re(n),p=he(n),u=V(n)==="y",{width:d,height:f}=o.floating;let g,h;a==="top"||a==="bottom"?(g=a,h=p===(await(r.isRTL==null?void 0:r.isRTL(s.floating))?"start":"end")?"left":"right"):(h=a,g=p==="end"?"top":"bottom");const v=f-l.top-l.bottom,x=d-l.left-l.right,w=oe(f-l[g],v),C=oe(d-l[h],x),M=t.middlewareData.shift,S=!M;let y=w,P=C;M!=null&&M.enabled.x&&(P=x),M!=null&&M.enabled.y&&(y=v),S&&!p&&(u?P=d-2*q(l.left,l.right):y=f-2*q(l.top,l.bottom)),await i({...t,availableWidth:P,availableHeight:y});const O=await r.getDimensions(s.floating);return d!==O.width||f!==O.height?{reset:{rects:!0}}:{}}}};function je(){return typeof window<"u"}function we(e){return kt(e)?(e.nodeName||"").toLowerCase():"#document"}function K(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function J(e){var t;return(t=(kt(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function kt(e){return je()?e instanceof Node||e instanceof K(e).Node:!1}function X(e){return je()?e instanceof Element||e instanceof K(e).Element:!1}function se(e){return je()?e instanceof HTMLElement||e instanceof K(e).HTMLElement:!1}function St(e){return!je()||typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof K(e).ShadowRoot}function ke(e){const{overflow:t,overflowX:n,overflowY:o,display:r}=Y(e);return/auto|scroll|overlay|hidden|clip/.test(t+o+n)&&r!=="inline"&&r!=="contents"}function oo(e){return/^(table|td|th)$/.test(we(e))}function $e(e){try{if(e.matches(":popover-open"))return!0}catch{}try{return e.matches(":modal")}catch{return!1}}const ro=/transform|translate|scale|rotate|perspective|filter/,io=/paint|layout|strict|content/,ae=e=>!!e&&e!=="none";let Ve;function at(e){const t=X(e)?Y(e):e;return ae(t.transform)||ae(t.translate)||ae(t.scale)||ae(t.rotate)||ae(t.perspective)||!lt()&&(ae(t.backdropFilter)||ae(t.filter))||ro.test(t.willChange||"")||io.test(t.contain||"")}function so(e){let t=le(e);for(;se(t)&&!Re(t);){if(at(t))return t;if($e(t))return null;t=le(t)}return null}function lt(){return Ve==null&&(Ve=typeof CSS<"u"&&CSS.supports&&CSS.supports("-webkit-backdrop-filter","none")),Ve}function Re(e){return/^(html|body|#document)$/.test(we(e))}function Y(e){return K(e).getComputedStyle(e)}function He(e){return X(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function le(e){if(we(e)==="html")return e;const t=e.assignedSlot||e.parentNode||St(e)&&e.host||J(e);return St(t)?t.host:t}function $t(e){const t=le(e);return Re(t)?(e.ownerDocument||e).body:se(t)&&ke(t)?t:$t(t)}function Me(e,t,n){var o;t===void 0&&(t=[]),n===void 0&&(n=!0);const r=$t(e),s=r===((o=e.ownerDocument)==null?void 0:o.body),i=K(r);if(s){const c=et(i);return t.concat(i,i.visualViewport||[],ke(r)?r:[],c&&n?Me(c):[])}else return t.concat(r,Me(r,[],n))}function et(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function Ht(e){const t=Y(e);let n=parseFloat(t.width)||0,o=parseFloat(t.height)||0;const r=se(e),s=r?e.offsetWidth:n,i=r?e.offsetHeight:o,c=De(n)!==s||De(o)!==i;return c&&(n=s,o=i),{width:n,height:o,$:c}}function ut(e){return X(e)?e:e.contextElement}function ge(e){const t=ut(e);if(!se(t))return Z(1);const n=t.getBoundingClientRect(),{width:o,height:r,$:s}=Ht(t);let i=(s?De(n.width):n.width)/o,c=(s?De(n.height):n.height)/r;return(!i||!Number.isFinite(i))&&(i=1),(!c||!Number.isFinite(c))&&(c=1),{x:i,y:c}}const co=Z(0);function Wt(e){const t=K(e);return!lt()||!t.visualViewport?co:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function ao(e,t,n){return t===void 0&&(t=!1),!!n&&t&&n===K(e)}function ue(e,t,n,o){t===void 0&&(t=!1),n===void 0&&(n=!1);const r=e.getBoundingClientRect(),s=ut(e);let i=Z(1);t&&(o?X(o)&&(i=ge(o)):i=ge(e));const c=ao(s,n,o)?Wt(s):Z(0);let l=(r.left+c.x)/i.x,a=(r.top+c.y)/i.y,p=r.width/i.x,u=r.height/i.y;if(s&&o){const d=K(s),f=X(o)?K(o):o;let g=d,h=et(g);for(;h&&f!==g;){const v=ge(h),x=h.getBoundingClientRect(),w=Y(h),C=x.left+(h.clientLeft+parseFloat(w.paddingLeft))*v.x,M=x.top+(h.clientTop+parseFloat(w.paddingTop))*v.y;l*=v.x,a*=v.y,p*=v.x,u*=v.y,l+=C,a+=M,g=K(h),h=et(g)}}return Te({width:p,height:u,x:l,y:a})}function We(e,t){const n=He(e).scrollLeft;return t?t.left+n:ue(J(e)).left+n}function Kt(e,t){const n=e.getBoundingClientRect(),o=n.left+t.scrollLeft-We(e,n),r=n.top+t.scrollTop;return{x:o,y:r}}function lo(e){let{elements:t,rect:n,offsetParent:o,strategy:r}=e;const s=r==="fixed",i=J(o),c=t?$e(t.floating):!1;if(o===i||c&&s)return n;let l={scrollLeft:0,scrollTop:0},a=Z(1);const p=Z(0),u=se(o);if((u||!s)&&((we(o)!=="body"||ke(i))&&(l=He(o)),u)){const f=ue(o);a=ge(o),p.x=f.x+o.clientLeft,p.y=f.y+o.clientTop}const d=i&&!u&&!s?Kt(i,l):Z(0);return{width:n.width*a.x,height:n.height*a.y,x:n.x*a.x-l.scrollLeft*a.x+p.x+d.x,y:n.y*a.y-l.scrollTop*a.y+p.y+d.y}}function uo(e){return e.getClientRects?Array.from(e.getClientRects()):[]}function fo(e){const t=He(e),n=e.ownerDocument.body,o=q(e.scrollWidth,e.clientWidth,n.scrollWidth,n.clientWidth),r=q(e.scrollHeight,e.clientHeight,n.scrollHeight,n.clientHeight);let s=-t.scrollLeft+We(e);const i=-t.scrollTop;return Y(n).direction==="rtl"&&(s+=q(e.clientWidth,n.clientWidth)-o),{width:o,height:r,x:s,y:i}}const po=25;function mo(e,t,n){n===void 0&&(n="viewport");const o=n==="layoutViewport",r=K(e),s=J(e),i=r.visualViewport;let c=s.clientWidth,l=s.clientHeight,a=0,p=0;if(i){const d=!lt()||t==="fixed";o?d||(a=-i.offsetLeft,p=-i.offsetTop):(c=i.width,l=i.height,d&&(a=i.offsetLeft,p=i.offsetTop))}if(We(s)<=0){const d=s.ownerDocument,f=d.body,g=getComputedStyle(f),h=d.compatMode==="CSS1Compat"&&parseFloat(g.marginLeft)+parseFloat(g.marginRight)||0,v=Math.abs(s.clientWidth-f.clientWidth-h),x=getComputedStyle(s).scrollbarGutter==="stable both-edges"?v/2:v;x<=po&&(c-=x)}return{width:c,height:l,x:a,y:p}}function go(e,t){const n=ue(e,!0,t==="fixed"),o=n.top+e.clientTop,r=n.left+e.clientLeft,s=ge(e),i=e.clientWidth*s.x,c=e.clientHeight*s.y,l=r*s.x,a=o*s.y;return{width:i,height:c,x:l,y:a}}function Pt(e,t,n){let o;if(t==="viewport"||t==="layoutViewport")o=mo(e,n,t);else if(t==="document")o=fo(J(e));else if(X(t))o=go(t,n);else{const r=Wt(e);o={x:t.x-r.x,y:t.y-r.y,width:t.width,height:t.height}}return Te(o)}function ho(e,t){const n=t.get(e);if(n)return n;let o=Me(e,[],!1).filter(c=>X(c)&&we(c)!=="body"),r=null;const s=Y(e).position==="fixed";let i=s?le(e):e;for(;X(i)&&!Re(i);){const c=Y(i),l=at(i),a=r?r.position:s?"fixed":"";!l&&(a==="fixed"||a==="absolute"&&c.position==="static")?o=o.filter(u=>u!==i):r=c,i=le(i)}return t.set(e,o),o}function wo(e){let{element:t,boundary:n,rootBoundary:o,strategy:r}=e;const i=[...n==="clippingAncestors"?$e(t)?[]:ho(t,this._c):[].concat(n),o],c=Pt(t,i[0],r);let l=c.top,a=c.right,p=c.bottom,u=c.left;for(let d=1;d{c(!1,1e-7)},1e3)}P=!1}try{o=new IntersectionObserver(O,{...y,root:s.ownerDocument})}catch{o=new IntersectionObserver(O,y)}o.observe(e)}const l=K(e),a=()=>c(n);return l.addEventListener("resize",a),c(!0),()=>{l.removeEventListener("resize",a),i()}}function Mo(e,t,n,o){o===void 0&&(o={});const{ancestorScroll:r=!0,ancestorResize:s=!0,elementResize:i=typeof ResizeObserver=="function",layoutShift:c=typeof IntersectionObserver=="function",animationFrame:l=!1}=o,a=ut(e),p=r||s?[...a?Me(a):[],...t?Me(t):[]]:[];p.forEach(x=>{r&&x.addEventListener("scroll",n),s&&x.addEventListener("resize",n)});const u=a&&c?Ro(a,n,s):null;let d=-1,f=null;i&&(f=new ResizeObserver(x=>{let[w]=x;w&&w.target===a&&f&&t&&(f.unobserve(t),cancelAnimationFrame(d),d=requestAnimationFrame(()=>{var C;(C=f)==null||C.observe(t)})),n()}),a&&!l&&f.observe(a),t&&f.observe(t));let g,h=l?ue(e):null;l&&v();function v(){const x=ue(e);h&&!Gt(h,x)&&n(),h=x,g=requestAnimationFrame(v)}return n(),()=>{var x;p.forEach(w=>{r&&w.removeEventListener("scroll",n),s&&w.removeEventListener("resize",n)}),u==null||u(),(x=f)==null||x.disconnect(),f=null,l&&cancelAnimationFrame(g)}}const So=Jn,Po=eo,Ao=qn,Eo=no,Oo=Zn,Et=Yn,Io=to,Do=(e,t,n)=>{const o=new Map,r=n??{},s={...Co,...r.platform,_c:o};return Xn(e,t,{...r,platform:s})};var _o=typeof document<"u",To=function(){},Ie=_o?m.useLayoutEffect:To;function Fe(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(typeof e=="function"&&e.toString()===t.toString())return!0;let n,o,r;if(e&&t&&typeof e=="object"){if(Array.isArray(e)){if(n=e.length,n!==t.length)return!1;for(o=n;o--!==0;)if(!Fe(e[o],t[o]))return!1;return!0}if(r=Object.keys(e),n=r.length,n!==Object.keys(t).length)return!1;for(o=n;o--!==0;)if(!{}.hasOwnProperty.call(t,r[o]))return!1;for(o=n;o--!==0;){const s=r[o];if(!(s==="_owner"&&e.$$typeof)&&!Fe(e[s],t[s]))return!1}return!0}return e!==e&&t!==t}function zt(e){return typeof window>"u"?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function Ot(e,t){const n=zt(e);return Math.round(t*n)/n}function Xe(e){const t=m.useRef(e);return Ie(()=>{t.current=e}),t}function Fo(e){e===void 0&&(e={});const{placement:t="bottom",strategy:n="absolute",middleware:o=[],platform:r,elements:{reference:s,floating:i}={},transform:c=!0,whileElementsMounted:l,open:a}=e,[p,u]=m.useState({x:0,y:0,strategy:n,placement:t,middlewareData:{},isPositioned:!1}),[d,f]=m.useState(o);Fe(d,o)||f(o);const[g,h]=m.useState(null),[v,x]=m.useState(null),w=m.useCallback(A=>{A!==y.current&&(y.current=A,h(A))},[]),C=m.useCallback(A=>{A!==P.current&&(P.current=A,x(A))},[]),M=s||g,S=i||v,y=m.useRef(null),P=m.useRef(null),O=m.useRef(p),E=l!=null,I=Xe(l),k=Xe(r),$=Xe(a),F=m.useCallback(()=>{if(!y.current||!P.current)return;const A={placement:t,strategy:n,middleware:d};k.current&&(A.platform=k.current),Do(y.current,P.current,A).then(D=>{const R={...D,isPositioned:$.current!==!1};T.current&&!Fe(O.current,R)&&(O.current=R,An.flushSync(()=>{u(R)}))})},[d,t,n,k,$]);Ie(()=>{a===!1&&O.current.isPositioned&&(O.current.isPositioned=!1,u(A=>({...A,isPositioned:!1})))},[a]);const T=m.useRef(!1);Ie(()=>(T.current=!0,()=>{T.current=!1}),[]),Ie(()=>{if(M&&(y.current=M),S&&(P.current=S),M&&S){if(I.current)return I.current(M,S,F);F()}},[M,S,F,I,E]);const H=m.useMemo(()=>({reference:y,floating:P,setReference:w,setFloating:C}),[w,C]),L=m.useMemo(()=>({reference:M,floating:S}),[M,S]),N=m.useMemo(()=>{const A={position:n,left:0,top:0};if(!L.floating)return A;const D=Ot(L.floating,p.x),R=Ot(L.floating,p.y);return c?{...A,transform:"translate("+D+"px, "+R+"px)",...zt(L.floating)>=1.5&&{willChange:"transform"}}:{position:n,left:D,top:R}},[n,c,L.floating,p.x,p.y]);return m.useMemo(()=>({...p,update:F,refs:H,elements:L,floatingStyles:N}),[p,F,H,L,N])}const Lo=e=>{function t(n){return{}.hasOwnProperty.call(n,"current")}return{name:"arrow",options:e,fn(n){const{element:o,padding:r}=typeof e=="function"?e(n):e;return o&&t(o)?o.current!=null?Et({element:o.current,padding:r}).fn(n):{}:o?Et({element:o,padding:r}).fn(n):{}}}},No=(e,t)=>{const n=So(e);return{name:n.name,fn:n.fn,options:[e,t]}},jo=(e,t)=>{const n=Po(e);return{name:n.name,fn:n.fn,options:[e,t]}},ko=(e,t)=>({fn:Io(e).fn,options:[e,t]}),$o=(e,t)=>{const n=Ao(e);return{name:n.name,fn:n.fn,options:[e,t]}},Ho=(e,t)=>{const n=Eo(e);return{name:n.name,fn:n.fn,options:[e,t]}},Wo=(e,t)=>{const n=Oo(e);return{name:n.name,fn:n.fn,options:[e,t]}},Ko=(e,t)=>{const n=Lo(e);return{name:n.name,fn:n.fn,options:[e,t]}};function Bo(e){const[t,n]=m.useState(void 0);return Ce(()=>{if(e){n({width:e.offsetWidth,height:e.offsetHeight});const o=new ResizeObserver(r=>{if(!Array.isArray(r)||!r.length)return;const s=r[0];let i,c;if("borderBoxSize"in s){const l=s.borderBoxSize,a=Array.isArray(l)?l[0]:l;i=a.inlineSize,c=a.blockSize}else i=e.offsetWidth,c=e.offsetHeight;n({width:i,height:c})});return o.observe(e,{box:"border-box"}),()=>o.unobserve(e)}else n(void 0)},[e]),t}var Go=Object.defineProperty,te=(e,t)=>Go(e,"name",{value:t,configurable:!0}),Vt="Popper",[Ut,Xt]=Se(Vt),[zo,Yt]=Ut(Vt),Vo=te(e=>{const{__scopePopper:t,children:n}=e,[o,r]=m.useState(null),[s,i]=m.useState(void 0);return b.jsx(zo,{scope:t,anchor:o,onAnchorChange:r,placementState:s,setPlacementState:i,children:n})},"Popper"),Uo="PopperAnchor",Xo=m.forwardRef(te(function(t,n){const{__scopePopper:o,virtualRef:r,...s}=t,i=Yt(Uo,o),c=m.useRef(null),l=i.onAnchorChange,a=m.useCallback(h=>{c.current=h,h&&l(h)},[l]),p=U(n,a),u=m.useRef(null);m.useEffect(()=>{if(!r)return;const h=u.current;u.current=r.current,h!==u.current&&l(u.current)});const d=i.placementState&&Ke(i.placementState),f=d==null?void 0:d[0],g=d==null?void 0:d[1];return r?null:b.jsx(ie.div,{"data-radix-popper-side":f,"data-radix-popper-align":g,...s,ref:p})},"PopperAnchor")),qt="PopperContent",[Yo,wi]=Ut(qt),qo=m.forwardRef(te(function(t,n){var ye,z,be,gt,ht,wt,vt;const{__scopePopper:o,side:r="bottom",sideOffset:s=0,align:i="center",alignOffset:c=0,arrowPadding:l=0,avoidCollisions:a=!0,collisionBoundary:p=[],collisionPadding:u=0,sticky:d="partial",hideWhenDetached:f=!1,updatePositionStrategy:g="optimized",onPlaced:h,...v}=t,x=Yt(qt,o),[w,C]=m.useState(null),M=U(n,C),[S,y]=m.useState(null),P=Bo(S),O=(P==null?void 0:P.width)??0,E=(P==null?void 0:P.height)??0,I=r+(i!=="center"?"-"+i:""),k=typeof u=="number"?u:{top:0,right:0,bottom:0,left:0,...u},$=Array.isArray(p)?p:[p],F=$.length>0,T={padding:k,boundary:$.filter(Zt),altBoundary:F},{refs:H,floatingStyles:L,placement:N,isPositioned:A,middlewareData:D}=Fo({strategy:"fixed",placement:I,whileElementsMounted:te((...ze)=>Mo(...ze,{animationFrame:g==="always"}),"whileElementsMounted"),elements:{reference:x.anchor},middleware:[No({mainAxis:s+E,alignmentAxis:c}),a&&jo({mainAxis:!0,crossAxis:!1,limiter:d==="partial"?ko():void 0,...T}),a&&$o({...T}),Ho({...T,apply:te(({elements:ze,rects:xt,availableWidth:Rn,availableHeight:Mn})=>{const{width:Sn,height:Pn}=xt.reference,Ee=ze.floating.style;Ee.setProperty("--radix-popper-available-width",`${Rn}px`),Ee.setProperty("--radix-popper-available-height",`${Mn}px`),Ee.setProperty("--radix-popper-anchor-width",`${Sn}px`),Ee.setProperty("--radix-popper-anchor-height",`${Pn}px`)},"apply")}),S&&Ko({element:S,padding:l}),Zo({arrowWidth:O,arrowHeight:E}),f&&Wo({strategy:"referenceHidden",...T,boundary:F?T.boundary:void 0})]}),R=x.setPlacementState;Ce(()=>(R(N),()=>{R(void 0)}),[N,R]);const[W,B]=Ke(N),G=rt(h);Ce(()=>{A&&(G==null||G())},[A,G]);const ve=(ye=D.arrow)==null?void 0:ye.x,xe=(z=D.arrow)==null?void 0:z.y,Ae=((be=D.arrow)==null?void 0:be.centerOffset)!==0,[ce,ee]=m.useState();return Ce(()=>{w&&ee(window.getComputedStyle(w).zIndex)},[w]),b.jsx("div",{ref:H.setFloating,"data-radix-popper-content-wrapper":"",style:{...L,transform:A?L.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:ce,"--radix-popper-transform-origin":[(gt=D.transformOrigin)==null?void 0:gt.x,(ht=D.transformOrigin)==null?void 0:ht.y].join(" "),...((wt=D.hide)==null?void 0:wt.referenceHidden)&&{visibility:"hidden",pointerEvents:"none"}},dir:t.dir,children:b.jsx(Yo,{scope:o,placedSide:W,placedAlign:B,onArrowChange:y,arrowX:ve,arrowY:xe,shouldHideArrow:Ae,children:b.jsx(ie.div,{"data-side":W,"data-align":B,...v,ref:M,style:{...v.style,animation:A?(vt=v.style)==null?void 0:vt.animation:"none"}})})})},"PopperContent"));function Zt(e){return e!==null}te(Zt,"isNotNull");var Zo=te(e=>({name:"transformOrigin",options:e,fn(t){var v,x,w;const{placement:n,rects:o,middlewareData:r}=t,i=((v=r.arrow)==null?void 0:v.centerOffset)!==0,c=i?0:e.arrowWidth,l=i?0:e.arrowHeight,[a,p]=Ke(n),u={start:"0%",center:"50%",end:"100%"}[p],d=(((x=r.arrow)==null?void 0:x.x)??0)+c/2,f=(((w=r.arrow)==null?void 0:w.y)??0)+l/2;let g="",h="";return a==="bottom"?(g=i?u:`${d}px`,h=`${-l}px`):a==="top"?(g=i?u:`${d}px`,h=`${o.floating.height+l}px`):a==="right"?(g=`${-l}px`,h=i?u:`${f}px`):a==="left"&&(g=`${o.floating.width+l}px`,h=i?u:`${f}px`),{data:{x:g,y:h}}}}),"transformOrigin");function Ke(e){const[t,n="center"]=e.split("-");return[t,n]}te(Ke,"getSideAndAlignFromPlacement");var Qo=Vo,Jo=Xo,er=qo,Ye=!1;function tr(){const[e,t]=m.useState(Ye);return m.useEffect(()=>{Ye||(Ye=!0,t(!0))},[]),e}var Qt=En[" useSyncExternalStore ".trim().toString()];function nr(){return()=>{}}function or(){return Qt(nr,()=>!0,()=>!1)}var rr=typeof Qt=="function"?or:tr,ir=Object.defineProperty,fe=(e,t)=>ir(e,"name",{value:t,configurable:!0}),qe="rovingFocusGroup.onEntryFocus",sr={bubbles:!1,cancelable:!0},Be="RovingFocusGroup",[tt,Jt,cr]=Tt(Be),[ar,en]=Se(Be,[cr]),[lr,ur]=ar(Be),fr=m.forwardRef(fe(function(t,n){return b.jsx(tt.Provider,{scope:t.__scopeRovingFocusGroup,children:b.jsx(tt.Slot,{scope:t.__scopeRovingFocusGroup,children:b.jsx(dr,{...t,ref:n})})})},"RovingFocusGroup")),dr=m.forwardRef(fe(function(t,n){const{__scopeRovingFocusGroup:o,orientation:r,loop:s=!1,dir:i,currentTabStopId:c,defaultCurrentTabStopId:l,onCurrentTabStopIdChange:a,onEntryFocus:p,preventScrollOnEntryFocus:u=!1,...d}=t,f=m.useRef(null),g=U(n,f),h=Ft(i),[v,x]=Dt({prop:c,defaultProp:l??null,onChange:a,caller:Be}),[w,C]=m.useState(!1),M=rt(p),S=Jt(o),y=m.useRef(!1),[P,O]=m.useState(0);return m.useEffect(()=>{const E=f.current;if(E)return E.addEventListener(qe,M),()=>E.removeEventListener(qe,M)},[M]),b.jsx(lr,{scope:o,orientation:r,dir:h,loop:s,currentTabStopId:v,onItemFocus:m.useCallback(E=>x(E),[x]),onItemShiftTab:m.useCallback(()=>C(!0),[]),onFocusableItemAdd:m.useCallback(()=>O(E=>E+1),[]),onFocusableItemRemove:m.useCallback(()=>O(E=>E-1),[]),children:b.jsx(ie.div,{tabIndex:w||P===0?-1:0,"data-orientation":r,...d,ref:g,style:{outline:"none",...t.style},onMouseDown:j(t.onMouseDown,()=>{y.current=!0}),onFocus:j(t.onFocus,E=>{const I=!y.current;if(E.target===E.currentTarget&&I&&!w){const k=new CustomEvent(qe,sr);if(E.currentTarget.dispatchEvent(k),!k.defaultPrevented){const $=S().filter(N=>N.focusable),F=$.find(N=>N.active),T=$.find(N=>N.id===v),L=[F,T,...$].filter(Boolean).map(N=>N.ref.current);ft(L,u)}}y.current=!1}),onBlur:j(t.onBlur,()=>C(!1))})})},"RovingFocusGroupImpl")),pr="RovingFocusGroupItem",mr=m.forwardRef(fe(function(t,n){const{__scopeRovingFocusGroup:o,focusable:r=!0,active:s=!1,tabStopId:i,children:c,...l}=t,a=Qe(),p=i||a,u=ur(pr,o),d=u.currentTabStopId===p,f=Jt(o),{onFocusableItemAdd:g,onFocusableItemRemove:h,currentTabStopId:v}=u,x=rr();return Ce(()=>{if(!(!x||!r))return g(),()=>h()},[x,r,g,h]),m.useEffect(()=>{if(!(x||!r))return g(),()=>h()},[x,r,g,h]),b.jsx(tt.ItemSlot,{scope:o,id:p,focusable:r,active:s,children:b.jsx(ie.span,{tabIndex:d?0:-1,"data-orientation":u.orientation,...l,ref:n,onMouseDown:j(t.onMouseDown,w=>{r?u.onItemFocus(p):w.preventDefault()}),onFocus:j(t.onFocus,()=>u.onItemFocus(p)),onKeyDown:j(t.onKeyDown,w=>{if(w.key==="Tab"&&w.shiftKey){u.onItemShiftTab();return}if(w.target!==w.currentTarget)return;const C=nn(w,u.orientation,u.dir);if(C!==void 0){if(w.metaKey||w.ctrlKey||w.altKey||w.shiftKey)return;w.preventDefault();let S=f().filter(y=>y.focusable).map(y=>y.ref.current);if(C==="last")S.reverse();else if(C==="prev"||C==="next"){C==="prev"&&S.reverse();const y=S.indexOf(w.currentTarget);S=u.loop?on(S,y+1):S.slice(y+1)}setTimeout(()=>ft(S))}}),children:typeof c=="function"?c({isCurrentTabStop:d,hasTabStop:v!=null}):c})})},"RovingFocusGroupItem")),gr={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function tn(e,t){return t!=="rtl"?e:e==="ArrowLeft"?"ArrowRight":e==="ArrowRight"?"ArrowLeft":e}fe(tn,"getDirectionAwareKey");function nn(e,t,n){const o=tn(e.key,n);if(!(t==="vertical"&&["ArrowLeft","ArrowRight"].includes(o))&&!(t==="horizontal"&&["ArrowUp","ArrowDown"].includes(o)))return gr[o]}fe(nn,"getFocusIntent");function ft(e,t=!1){const n=document.activeElement;for(const o of e)if(o===n||(o.focus({preventScroll:t}),document.activeElement!==n))return}fe(ft,"focusFirst");function on(e,t){return e.map((n,o)=>e[(t+o)%e.length])}fe(on,"wrapArray");var hr=fr,wr=mr,vr=Object.defineProperty,_=(e,t)=>vr(e,"name",{value:t,configurable:!0}),xr=["Enter"," "],yr=["ArrowDown","PageUp","Home"],rn=["ArrowUp","PageDown","End"],br=[...yr,...rn],Ge="Menu",[nt,Cr,Rr]=Tt(Ge),[de,sn]=Se(Ge,[Rr,Xt,en]),dt=Xt(),cn=en(),[Mr,Pe]=de(Ge),[Sr,pt]=de(Ge),Pr=_(e=>{const{__scopeMenu:t,open:n=!1,children:o,dir:r,onOpenChange:s,modal:i=!0}=e,c=dt(t),[l,a]=m.useState(null),p=m.useRef(!1),u=rt(s),d=Ft(r);return m.useEffect(()=>{const f=_(()=>{p.current=!0,document.addEventListener("pointerdown",g,{capture:!0,once:!0}),document.addEventListener("pointermove",g,{capture:!0,once:!0})},"handleKeyDown"),g=_(()=>p.current=!1,"handlePointer");return document.addEventListener("keydown",f,{capture:!0}),()=>{document.removeEventListener("keydown",f,{capture:!0}),document.removeEventListener("pointerdown",g,{capture:!0}),document.removeEventListener("pointermove",g,{capture:!0})}},[]),m.useEffect(()=>{if(!n)return;const f=_(()=>u(!1),"handleBlur");return window.addEventListener("blur",f),()=>window.removeEventListener("blur",f)},[n,u]),b.jsx(Qo,{...c,children:b.jsx(Mr,{scope:t,open:n,onOpenChange:u,content:l,onContentChange:a,children:b.jsx(Sr,{scope:t,onClose:m.useCallback(()=>u(!1),[u]),isUsingKeyboardRef:p,dir:d,modal:i,children:o})})})},"Menu"),Ar=m.forwardRef(_(function(t,n){const{__scopeMenu:o,...r}=t,s=dt(o);return b.jsx(Jo,{...s,...r,ref:n})},"MenuAnchor")),an="MenuPortal",[Er,Or]=de(an,{forceMount:void 0}),Ir=_(e=>{const{__scopeMenu:t,forceMount:n,children:o,container:r}=e,s=Pe(an,t);return b.jsx(Er,{scope:t,forceMount:n,children:b.jsx(_t,{present:n||s.open,children:b.jsx(On,{asChild:!0,container:r,children:o})})})},"MenuPortal"),ne="MenuContent",[Dr,ln]=de(ne),_r=m.forwardRef(_(function(t,n){const o=Or(ne,t.__scopeMenu),{forceMount:r=o.forceMount,...s}=t,i=Pe(ne,t.__scopeMenu),c=pt(ne,t.__scopeMenu);return b.jsx(nt.Provider,{scope:t.__scopeMenu,children:b.jsx(_t,{present:r||i.open,children:b.jsx(nt.Slot,{scope:t.__scopeMenu,children:c.modal?b.jsx(Tr,{...s,ref:n}):b.jsx(Fr,{...s,ref:n})})})})},"MenuContent")),Tr=m.forwardRef(_(function(t,n){const o=Pe(ne,t.__scopeMenu),r=m.useRef(null),s=U(n,r);return m.useEffect(()=>{const i=r.current;if(i)return In(i)},[]),b.jsx(un,{...t,ref:s,trapFocus:o.open,disableOutsidePointerEvents:o.open,disableOutsideScroll:!0,onFocusOutside:j(t.onFocusOutside,i=>i.preventDefault(),{checkForDefaultPrevented:!1}),onDismiss:()=>o.onOpenChange(!1)})},"MenuRootContentModal")),Fr=m.forwardRef(_(function(t,n){const o=Pe(ne,t.__scopeMenu);return b.jsx(un,{...t,ref:n,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>o.onOpenChange(!1)})},"MenuRootContentNonModal")),Lr=Ze("MenuContent.ScrollLock"),un=m.forwardRef(_(function(t,n){const{__scopeMenu:o,loop:r=!1,trapFocus:s,onOpenAutoFocus:i,onCloseAutoFocus:c,disableOutsidePointerEvents:l,onEntryFocus:a,onEscapeKeyDown:p,onPointerDownOutside:u,onFocusOutside:d,onInteractOutside:f,onDismiss:g,disableOutsideScroll:h,...v}=t,x=Pe(ne,o),w=pt(ne,o),C=dt(o),M=cn(o),S=Cr(o),[y,P]=m.useState(null),O=m.useRef(null),E=U(n,O,x.onContentChange),I=m.useRef(0),k=m.useRef(""),$=m.useRef(0),F=m.useRef(null),T=m.useRef("right"),H=m.useRef(0),L=h?_n:m.Fragment,N=h?{as:Lr,allowPinchZoom:!0}:void 0,A=_(R=>{var ee,ye;const W=k.current+R,B=S().filter(z=>!z.disabled),G=document.activeElement,ve=(ee=B.find(z=>z.ref.current===G))==null?void 0:ee.textValue,xe=B.map(z=>z.textValue),Ae=gn(xe,W,ve),ce=(ye=B.find(z=>z.textValue===Ae))==null?void 0:ye.ref.current;_((function z(be){k.current=be,window.clearTimeout(I.current),be!==""&&(I.current=window.setTimeout(()=>z(""),1e3))}),"updateSearch")(W),ce&&setTimeout(()=>ce.focus())},"handleTypeaheadSearch");m.useEffect(()=>()=>window.clearTimeout(I.current),[]),Dn();const D=m.useCallback(R=>{var B,G;return T.current===((B=F.current)==null?void 0:B.side)&&wn(R,(G=F.current)==null?void 0:G.area)},[]);return b.jsx(Dr,{scope:o,searchRef:k,onItemEnter:m.useCallback(R=>{D(R)&&R.preventDefault()},[D]),onItemLeave:m.useCallback(R=>{var W;D(R)||((W=O.current)==null||W.focus(),P(null))},[D]),onTriggerLeave:m.useCallback(R=>{D(R)&&R.preventDefault()},[D]),pointerGraceTimerRef:$,onPointerGraceIntentChange:m.useCallback(R=>{F.current=R},[]),children:b.jsx(L,{...N,children:b.jsx(Tn,{asChild:!0,trapped:s,onMountAutoFocus:j(i,R=>{var W;R.preventDefault(),(W=O.current)==null||W.focus({preventScroll:!0})}),onUnmountAutoFocus:c,children:b.jsx(Fn,{asChild:!0,disableOutsidePointerEvents:l,onEscapeKeyDown:p,onPointerDownOutside:u,onFocusOutside:d,onInteractOutside:f,onDismiss:g,children:b.jsx(hr,{asChild:!0,...M,dir:w.dir,orientation:"vertical",loop:r,currentTabStopId:y,onCurrentTabStopIdChange:P,onEntryFocus:j(a,R=>{w.isUsingKeyboardRef.current||R.preventDefault()}),preventScrollOnEntryFocus:!0,children:b.jsx(er,{role:"menu","aria-orientation":"vertical","data-state":fn(x.open),"data-radix-menu-content":"",dir:w.dir,...C,...v,ref:E,style:{outline:"none",...v.style},onKeyDown:j(v.onKeyDown,R=>{const B=R.target.closest("[data-radix-menu-content]")===R.currentTarget,G=R.ctrlKey||R.altKey||R.metaKey,ve=R.key.length===1;B&&(R.key==="Tab"&&R.preventDefault(),!G&&ve&&A(R.key));const xe=O.current;if(R.target!==xe||!br.includes(R.key))return;R.preventDefault();const ce=S().filter(ee=>!ee.disabled).map(ee=>ee.ref.current);rn.includes(R.key)&&ce.reverse(),pn(ce)}),onBlur:j(t.onBlur,R=>{R.currentTarget.contains(R.target)||(window.clearTimeout(I.current),k.current="")}),onPointerMove:j(t.onPointerMove,Le(R=>{const W=R.target,B=H.current!==R.clientX;if(R.currentTarget.contains(W)&&B){const G=R.clientX>H.current?"right":"left";T.current=G,H.current=R.clientX}}))})})})})})})},"MenuContentImpl")),Nr=m.forwardRef(_(function(t,n){const{__scopeMenu:o,...r}=t;return b.jsx(ie.div,{...r,ref:n})},"MenuLabel")),ot="MenuItem",It="menu.itemSelect",jr=m.forwardRef(_(function(t,n){const{disabled:o=!1,onSelect:r,...s}=t,i=m.useRef(null),c=pt(ot,t.__scopeMenu),l=ln(ot,t.__scopeMenu),a=U(n,i),p=m.useRef(!1),u=_(()=>{const d=i.current;if(!o&&d){const f=new CustomEvent(It,{bubbles:!0,cancelable:!0});d.addEventListener(It,g=>r==null?void 0:r(g),{once:!0}),Ln(d,f),f.defaultPrevented?p.current=!1:c.onClose()}},"handleSelect");return b.jsx(kr,{...s,ref:a,disabled:o,onClick:j(t.onClick,u),onPointerDown:d=>{var f;(f=t.onPointerDown)==null||f.call(t,d),p.current=!0},onPointerUp:j(t.onPointerUp,d=>{var f;p.current||(f=d.currentTarget)==null||f.click()}),onKeyDown:j(t.onKeyDown,d=>{o||d.target!==d.currentTarget||l.searchRef.current!==""&&d.key===" "||xr.includes(d.key)&&(d.currentTarget.click(),d.preventDefault())})})},"MenuItem")),kr=m.forwardRef(_(function(t,n){const{__scopeMenu:o,disabled:r=!1,textValue:s,...i}=t,c=ln(ot,o),l=cn(o),a=m.useRef(null),p=U(n,a),[u,d]=m.useState(!1),[f,g]=m.useState("");return m.useEffect(()=>{const h=a.current;h&&g((h.textContent??"").trim())},[i.children]),b.jsx(nt.ItemSlot,{scope:o,disabled:r,textValue:s??f,children:b.jsx(wr,{asChild:!0,...l,focusable:!r,children:b.jsx(ie.div,{role:"menuitem","data-highlighted":u?"":void 0,"aria-disabled":r||void 0,"data-disabled":r?"":void 0,...i,ref:p,onPointerMove:j(t.onPointerMove,Le(h=>{r?c.onItemLeave(h):(c.onItemEnter(h),h.defaultPrevented||h.currentTarget.focus({preventScroll:!0}))})),onPointerLeave:j(t.onPointerLeave,Le(h=>c.onItemLeave(h))),onFocus:j(t.onFocus,()=>d(!0)),onBlur:j(t.onBlur,()=>d(!1))})})})},"MenuItemImpl")),$r="MenuRadioGroup",[vi,xi]=de($r,{value:void 0,onValueChange:_(()=>{},"onValueChange")}),Hr="MenuItemIndicator",[yi,bi]=de(Hr,{checked:!1}),Wr=m.forwardRef(_(function(t,n){const{__scopeMenu:o,...r}=t;return b.jsx(ie.div,{role:"separator","aria-orientation":"horizontal",...r,ref:n})},"MenuSeparator")),Kr="MenuSub",[Ci,Ri]=de(Kr);function fn(e){return e?"open":"closed"}_(fn,"getOpenState");function dn(e){return e==="indeterminate"}_(dn,"isIndeterminate");function Br(e){return dn(e)?"indeterminate":e?"checked":"unchecked"}_(Br,"getCheckedState");function pn(e){const t=document.activeElement;for(const n of e)if(n===t||(n.focus(),document.activeElement!==t))return}_(pn,"focusFirst");function mn(e,t){return e.map((n,o)=>e[(t+o)%e.length])}_(mn,"wrapArray");function gn(e,t,n){const r=t.length>1&&Array.from(t).every(a=>a===t[0])?t[0]:t,s=n?e.indexOf(n):-1;let i=mn(e,Math.max(s,0));r.length===1&&(i=i.filter(a=>a!==n));const l=i.find(a=>a.toLowerCase().startsWith(r.toLowerCase()));return l!==n?l:void 0}_(gn,"getNextMatch");function hn(e,t){const{x:n,y:o}=e;let r=!1;for(let s=0,i=t.length-1;so!=d>o&&n<(u-a)*(o-p)/(d-p)+a&&(r=!r)}return r}_(hn,"isPointInPolygon");function wn(e,t){if(!t)return!1;const n={x:e.clientX,y:e.clientY};return hn(n,t)}_(wn,"isPointerInGraceArea");function Le(e){return t=>t.pointerType==="mouse"?e(t):void 0}_(Le,"whenMouse");var Gr=Pr,zr=Ar,Vr=Ir,Ur=_r,Xr=Nr,Yr=jr,qr=Wr,Zr=Object.defineProperty,pe=(e,t)=>Zr(e,"name",{value:t,configurable:!0}),mt="DropdownMenu",[Qr]=Se(mt,[sn]),me=sn(),[Jr,vn]=Qr(mt),ei=pe(e=>{const{__scopeDropdownMenu:t,children:n,dir:o,open:r,defaultOpen:s,onOpenChange:i,modal:c=!0}=e,l=me(t),a=m.useRef(null),[p,u]=Dt({prop:r,defaultProp:s??!1,onChange:i,caller:mt});return b.jsx(Jr,{scope:t,triggerId:Qe(),triggerRef:a,contentId:Qe(),open:p,onOpenChange:u,onOpenToggle:m.useCallback(()=>u(d=>!d),[u]),modal:c,children:b.jsx(Gr,{...l,open:p,onOpenChange:u,dir:o,modal:c,children:n})})},"DropdownMenu"),ti="DropdownMenuTrigger",ni=m.forwardRef(pe(function(t,n){const{__scopeDropdownMenu:o,disabled:r=!1,...s}=t,i=vn(ti,o),c=me(o),l=U(n,i.triggerRef);return b.jsx(zr,{asChild:!0,...c,children:b.jsx(ie.button,{type:"button",id:i.triggerId,"aria-haspopup":"menu","aria-expanded":i.open,"aria-controls":i.open?i.contentId:void 0,"data-state":i.open?"open":"closed","data-disabled":r?"":void 0,disabled:r,...s,ref:l,onPointerDown:j(t.onPointerDown,a=>{!r&&a.button===0&&a.ctrlKey===!1&&(i.onOpenToggle(),i.open||a.preventDefault())}),onKeyDown:j(t.onKeyDown,a=>{r||(["Enter"," "].includes(a.key)&&i.onOpenToggle(),a.key==="ArrowDown"&&i.onOpenChange(!0),["Enter"," ","ArrowDown"].includes(a.key)&&a.preventDefault())})})})},"DropdownMenuTrigger")),oi=pe(e=>{const{__scopeDropdownMenu:t,...n}=e,o=me(t);return b.jsx(Vr,{...o,...n})},"DropdownMenuPortal"),ri="DropdownMenuContent",ii=m.forwardRef(pe(function(t,n){const{__scopeDropdownMenu:o,...r}=t,s=vn(ri,o),i=me(o),c=m.useRef(!1);return b.jsx(Ur,{id:s.contentId,"aria-labelledby":s.triggerId,...i,...r,ref:n,onCloseAutoFocus:j(t.onCloseAutoFocus,l=>{var a;c.current||(a=s.triggerRef.current)==null||a.focus(),c.current=!1,l.preventDefault()}),onInteractOutside:j(t.onInteractOutside,l=>{const a=l.detail.originalEvent,p=a.button===0&&a.ctrlKey===!0,u=a.button===2||p;(!s.modal||u)&&(c.current=!0)}),style:{...t.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})},"DropdownMenuContent")),si=m.forwardRef(pe(function(t,n){const{__scopeDropdownMenu:o,...r}=t,s=me(o);return b.jsx(Xr,{...s,...r,ref:n})},"DropdownMenuLabel")),ci=m.forwardRef(pe(function(t,n){const{__scopeDropdownMenu:o,...r}=t,s=me(o);return b.jsx(Yr,{...s,...r,ref:n})},"DropdownMenuItem")),ai=m.forwardRef(pe(function(t,n){const{__scopeDropdownMenu:o,...r}=t,s=me(o);return b.jsx(qr,{...s,...r,ref:n})},"DropdownMenuSeparator")),li=ei,ui=ni,fi=oi,xn=ii,yn=si,bn=ci,Cn=ai;const Mi=li,Si=ui,di=m.forwardRef(({className:e,sideOffset:t=4,...n},o)=>b.jsx(fi,{children:b.jsx(xn,{ref:o,sideOffset:t,className:Ne("z-50 min-w-[8rem] overflow-hidden rounded-lg border border-border bg-popover p-1 text-popover-foreground shadow-md","data-[state=open]:animate-in data-[state=closed]:animate-out","data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0","data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95","data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2","data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2",e),...n})}));di.displayName=xn.displayName;const pi=m.forwardRef(({className:e,inset:t,...n},o)=>b.jsx(bn,{ref:o,className:Ne("relative flex cursor-default select-none items-center gap-2 rounded-md ps-2 pe-2 py-1.5 text-sm outline-none transition-colors","focus:bg-accent focus:text-accent-foreground","data-[disabled]:pointer-events-none data-[disabled]:opacity-50",t&&"ps-8",e),...n}));pi.displayName=bn.displayName;const mi=m.forwardRef(({className:e,...t},n)=>b.jsx(Cn,{ref:n,className:Ne("-ms-1 -me-1 my-1 h-px bg-border",e),...t}));mi.displayName=Cn.displayName;const gi=m.forwardRef(({className:e,inset:t,...n},o)=>b.jsx(yn,{ref:o,className:Ne("ps-2 pe-2 py-1.5 text-sm font-semibold",t&&"ps-8",e),...n}));gi.displayName=yn.displayName;export{Mi as D,Si as a,di as b,pi as c,mi as d}; +import{ec as Se,r as m,ed as U,j as b,ee as Ze,aQ as An,ef as Ce,eg as rt,eh as ie,ei as En,ej as Qe,ek as j,el as Dt,em as _t,en as On,eo as In,ep as Dn,eq as _n,er as Tn,es as Fn,et as Ln,i as Ne}from"./index-BnLj1hck.js";function Tt(e){const t=e+"CollectionProvider",[n,o]=Se(t),[r,s]=n(t,{collectionRef:{current:null},itemMap:new Map}),i=h=>{const{scope:v,children:x}=h,w=m.useRef(null),C=m.useRef(new Map).current;return b.jsx(r,{scope:v,itemMap:C,collectionRef:w,children:x})};i.displayName=t;const c=e+"CollectionSlot",l=Ze(c),a=m.forwardRef((h,v)=>{const{scope:x,children:w}=h,C=s(c,x),M=U(v,C.collectionRef);return b.jsx(l,{ref:M,children:w})});a.displayName=c;const p=e+"CollectionItemSlot",u="data-radix-collection-item",d=Ze(p),f=m.forwardRef((h,v)=>{const{scope:x,children:w,...C}=h,M=m.useRef(null),S=U(v,M),y=s(p,x);return m.useEffect(()=>(y.itemMap.set(M,{ref:M,...C}),()=>void y.itemMap.delete(M))),b.jsx(d,{[u]:"",ref:S,children:w})});f.displayName=p;function g(h){const v=s(e+"CollectionConsumer",h);return m.useCallback(()=>{const w=v.collectionRef.current;if(!w)return[];const C=Array.from(w.querySelectorAll(`[${u}]`));return Array.from(v.itemMap.values()).sort((y,P)=>C.indexOf(y.ref.current)-C.indexOf(P.ref.current))},[v.collectionRef,v.itemMap])}return[{Provider:i,Slot:a,ItemSlot:f},g,o]}var Nn=m.createContext(void 0);function Ft(e){const t=m.useContext(Nn);return e||t||"ltr"}const jn=["top","right","bottom","left"],oe=Math.min,q=Math.max,De=Math.round,Oe=Math.floor,Z=e=>({x:e,y:e}),kn={left:"right",right:"left",bottom:"top",top:"bottom"};function Lt(e,t,n){return q(e,oe(t,n))}function Q(e,t){return typeof e=="function"?e(t):e}function re(e){return e.split("-")[0]}function he(e){return e.split("-")[1]}function it(e){return e==="x"?"y":"x"}function st(e){return e==="y"?"height":"width"}function V(e){const t=e[0];return t==="t"||t==="b"?"y":"x"}function ct(e){return it(V(e))}function $n(e,t,n){n===void 0&&(n=!1);const o=he(e),r=ct(e),s=st(r);let i=r==="x"?o===(n?"end":"start")?"right":"left":o==="start"?"bottom":"top";return t.reference[s]>t.floating[s]&&(i=_e(i)),[i,_e(i)]}function Hn(e){const t=_e(e);return[Je(e),t,Je(t)]}function Je(e){return e.includes("start")?e.replace("start","end"):e.replace("end","start")}const yt=["left","right"],bt=["right","left"],Wn=["top","bottom"],Kn=["bottom","top"];function Bn(e,t,n){switch(e){case"top":case"bottom":return n?t?bt:yt:t?yt:bt;case"left":case"right":return t?Wn:Kn;default:return[]}}function Gn(e,t,n,o){const r=he(e);let s=Bn(re(e),n==="start",o);return r&&(s=s.map(i=>i+"-"+r),t&&(s=s.concat(s.map(Je)))),s}function _e(e){const t=re(e);return kn[t]+e.slice(t.length)}function zn(e){var t,n,o,r;return{top:(t=e.top)!=null?t:0,right:(n=e.right)!=null?n:0,bottom:(o=e.bottom)!=null?o:0,left:(r=e.left)!=null?r:0}}function Nt(e){return typeof e!="number"?zn(e):{top:e,right:e,bottom:e,left:e}}function Te(e){const{x:t,y:n,width:o,height:r}=e;return{width:o,height:r,top:n,left:t,right:t+o,bottom:n+r,x:t,y:n}}function Ct(e,t,n){let{reference:o,floating:r}=e;const s=V(t),i=ct(t),c=st(i),l=re(t),a=s==="y",p=o.x+o.width/2-r.width/2,u=o.y+o.height/2-r.height/2,d=o[c]/2-r[c]/2;let f;switch(l){case"top":f={x:p,y:o.y-r.height};break;case"bottom":f={x:p,y:o.y+o.height};break;case"right":f={x:o.x+o.width,y:u};break;case"left":f={x:o.x-r.width,y:u};break;default:f={x:o.x,y:o.y}}const g=he(t);return g&&(f[i]+=d*(g==="end"?1:-1)*(n&&a?-1:1)),f}async function Vn(e,t){var n;t===void 0&&(t={});const{x:o,y:r,platform:s,rects:i,elements:c,strategy:l}=e,{boundary:a="clippingAncestors",rootBoundary:p="viewport",elementContext:u="floating",altBoundary:d=!1,padding:f=0}=Q(t,e),g=Nt(f),v=c[d?u==="floating"?"reference":"floating":u],x=Te(await s.getClippingRect({element:(n=await(s.isElement==null?void 0:s.isElement(v)))==null||n?v:v.contextElement||await(s.getDocumentElement==null?void 0:s.getDocumentElement(c.floating)),boundary:a,rootBoundary:p,strategy:l})),w=u==="floating"?{x:o,y:r,width:i.floating.width,height:i.floating.height}:i.reference,C=await(s.getOffsetParent==null?void 0:s.getOffsetParent(c.floating)),M=await(s.isElement==null?void 0:s.isElement(C))&&await(s.getScale==null?void 0:s.getScale(C))||{x:1,y:1},S=Te(s.convertOffsetParentRelativeRectToViewportRelativeRect?await s.convertOffsetParentRelativeRectToViewportRelativeRect({elements:c,rect:w,offsetParent:C,strategy:l}):w);return{top:(x.top-S.top+g.top)/M.y,bottom:(S.bottom-x.bottom+g.bottom)/M.y,left:(x.left-S.left+g.left)/M.x,right:(S.right-x.right+g.right)/M.x}}const Un=50,Xn=async(e,t,n)=>{const{placement:o="bottom",strategy:r="absolute",middleware:s=[],platform:i}=n,c=i.detectOverflow?i:{...i,detectOverflow:Vn},l=await(i.isRTL==null?void 0:i.isRTL(t));let a=await i.getElementRects({reference:e,floating:t,strategy:r}),{x:p,y:u}=Ct(a,o,l),d=o,f=0;const g={};for(let h=0;h({name:"arrow",options:e,async fn(t){const{x:n,y:o,placement:r,rects:s,platform:i,elements:c,middlewareData:l}=t,{element:a,padding:p=0}=Q(e,t)||{};if(a==null)return{};const u=Nt(p),d={x:n,y:o},f=ct(r),g=st(f),h=await i.getDimensions(a),v=f==="y",x=v?"top":"left",w=v?"bottom":"right",C=v?"clientHeight":"clientWidth",M=s.reference[g]+s.reference[f]-d[f]-s.floating[g],S=d[f]-s.reference[f],y=await(i.getOffsetParent==null?void 0:i.getOffsetParent(a));let P=y?y[C]:0;(!P||!await(i.isElement==null?void 0:i.isElement(y)))&&(P=c.floating[C]||s.floating[g]);const O=M/2-S/2,E=P/2-h[g]/2-1,I=oe(u[x],E),k=oe(u[w],E),$=P-h[g]-k,F=P/2-h[g]/2+O,T=Lt(I,F,$),H=!l.arrow&&he(r)!=null&&F!==T&&s.reference[g]/2-(FT<=0)){var k,$;const T=(((k=s.flip)==null?void 0:k.index)||0)+1,H=P[T];if(H&&(!(u==="alignment"?w!==V(H):!1)||I.every(A=>V(A.placement)===w?A.overflows[0]>0:!0)))return{data:{index:T,overflows:I},reset:{placement:H}};let L=($=I.filter(N=>N.overflows[0]<=0).sort((N,A)=>N.overflows[1]-A.overflows[1])[0])==null?void 0:$.placement;if(!L)switch(f){case"bestFit":{var F;const N=(F=I.filter(A=>{if(y){const D=V(A.placement);return D===w||D==="y"}return!0}).map(A=>[A.placement,A.overflows.filter(D=>D>0).reduce((D,R)=>D+R,0)]).sort((A,D)=>A[1]-D[1])[0])==null?void 0:F[0];N&&(L=N);break}case"initialPlacement":L=c;break}if(r!==L)return{reset:{placement:L}}}return{}}}};function Rt(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function Mt(e){return jn.some(t=>e[t]>=0)}const Zn=function(e){return e===void 0&&(e={}),{name:"hide",options:e,async fn(t){const{rects:n,platform:o}=t,{strategy:r="referenceHidden",...s}=Q(e,t);switch(r){case"referenceHidden":{const i=await o.detectOverflow(t,{...s,elementContext:"reference"}),c=Rt(i,n.reference);return{data:{referenceHiddenOffsets:c,referenceHidden:Mt(c)}}}case"escaped":{const i=await o.detectOverflow(t,{...s,altBoundary:!0}),c=Rt(i,n.floating);return{data:{escapedOffsets:c,escaped:Mt(c)}}}default:return{}}}}},jt=new Set(["left","top"]);async function Qn(e,t){const{placement:n,platform:o,elements:r}=e,s=await(o.isRTL==null?void 0:o.isRTL(r.floating)),i=re(n),c=he(n),l=V(n)==="y",a=jt.has(i)?-1:1,p=s&&l?-1:1,u=Q(t,e);let{mainAxis:d,crossAxis:f,alignmentAxis:g}=typeof u=="number"?{mainAxis:u,crossAxis:0,alignmentAxis:null}:{mainAxis:u.mainAxis||0,crossAxis:u.crossAxis||0,alignmentAxis:u.alignmentAxis};return c&&typeof g=="number"&&(f=c==="end"?g*-1:g),l?{x:f*p,y:d*a}:{x:d*a,y:f*p}}const Jn=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){var n,o;const{x:r,y:s,placement:i,middlewareData:c}=t,l=await Qn(t,e);return i===((n=c.offset)==null?void 0:n.placement)&&(o=c.arrow)!=null&&o.alignmentOffset?{}:{x:r+l.x,y:s+l.y,data:{...l,placement:i}}}}},eo=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:n,y:o,placement:r,platform:s}=t,{mainAxis:i=!0,crossAxis:c=!1,limiter:l={fn:w=>{let{x:C,y:M}=w;return{x:C,y:M}}},...a}=Q(e,t),p={x:n,y:o},u=await s.detectOverflow(t,a),d=V(r),f=it(d);let g=p[f],h=p[d];const v=(w,C)=>Lt(C+u[w==="y"?"top":"left"],C,C-u[w==="y"?"bottom":"right"]);i&&(g=v(f,g)),c&&(h=v(d,h));const x=l.fn({...t,[f]:g,[d]:h});return{...x,data:{x:x.x-n,y:x.y-o,enabled:{[f]:i,[d]:c}}}}}},to=function(e){return e===void 0&&(e={}),{options:e,fn(t){var n,o;const{x:r,y:s,placement:i,rects:c,middlewareData:l}=t,{offset:a=0,mainAxis:p=!0,crossAxis:u=!0}=Q(e,t),d={x:r,y:s},f=V(i),g=it(f);let h=d[g],v=d[f];const x=Q(a,t),w=typeof x=="number"?{mainAxis:x,crossAxis:0}:{mainAxis:(n=x.mainAxis)!=null?n:0,crossAxis:(o=x.crossAxis)!=null?o:0};if(p){const S=g==="y"?"height":"width",y=c.reference[g]-c.floating[S]+w.mainAxis,P=c.reference[g]+c.reference[S]-w.mainAxis;hP&&(h=P)}if(u){var C,M;const S=g==="y"?"width":"height",y=jt.has(re(i)),P=c.reference[f]-c.floating[S]+(y&&((C=l.offset)==null?void 0:C[f])||0)+(y?0:w.crossAxis),O=c.reference[f]+c.reference[S]+(y?0:((M=l.offset)==null?void 0:M[f])||0)-(y?w.crossAxis:0);vO&&(v=O)}return{[g]:h,[f]:v}}}},no=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(t){const{placement:n,rects:o,platform:r,elements:s}=t,{apply:i=()=>{},...c}=Q(e,t),l=await r.detectOverflow(t,c),a=re(n),p=he(n),u=V(n)==="y",{width:d,height:f}=o.floating;let g,h;a==="top"||a==="bottom"?(g=a,h=p===(await(r.isRTL==null?void 0:r.isRTL(s.floating))?"start":"end")?"left":"right"):(h=a,g=p==="end"?"top":"bottom");const v=f-l.top-l.bottom,x=d-l.left-l.right,w=oe(f-l[g],v),C=oe(d-l[h],x),M=t.middlewareData.shift,S=!M;let y=w,P=C;M!=null&&M.enabled.x&&(P=x),M!=null&&M.enabled.y&&(y=v),S&&!p&&(u?P=d-2*q(l.left,l.right):y=f-2*q(l.top,l.bottom)),await i({...t,availableWidth:P,availableHeight:y});const O=await r.getDimensions(s.floating);return d!==O.width||f!==O.height?{reset:{rects:!0}}:{}}}};function je(){return typeof window<"u"}function we(e){return kt(e)?(e.nodeName||"").toLowerCase():"#document"}function K(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function J(e){var t;return(t=(kt(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function kt(e){return je()?e instanceof Node||e instanceof K(e).Node:!1}function X(e){return je()?e instanceof Element||e instanceof K(e).Element:!1}function se(e){return je()?e instanceof HTMLElement||e instanceof K(e).HTMLElement:!1}function St(e){return!je()||typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof K(e).ShadowRoot}function ke(e){const{overflow:t,overflowX:n,overflowY:o,display:r}=Y(e);return/auto|scroll|overlay|hidden|clip/.test(t+o+n)&&r!=="inline"&&r!=="contents"}function oo(e){return/^(table|td|th)$/.test(we(e))}function $e(e){try{if(e.matches(":popover-open"))return!0}catch{}try{return e.matches(":modal")}catch{return!1}}const ro=/transform|translate|scale|rotate|perspective|filter/,io=/paint|layout|strict|content/,ae=e=>!!e&&e!=="none";let Ve;function at(e){const t=X(e)?Y(e):e;return ae(t.transform)||ae(t.translate)||ae(t.scale)||ae(t.rotate)||ae(t.perspective)||!lt()&&(ae(t.backdropFilter)||ae(t.filter))||ro.test(t.willChange||"")||io.test(t.contain||"")}function so(e){let t=le(e);for(;se(t)&&!Re(t);){if(at(t))return t;if($e(t))return null;t=le(t)}return null}function lt(){return Ve==null&&(Ve=typeof CSS<"u"&&CSS.supports&&CSS.supports("-webkit-backdrop-filter","none")),Ve}function Re(e){return/^(html|body|#document)$/.test(we(e))}function Y(e){return K(e).getComputedStyle(e)}function He(e){return X(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function le(e){if(we(e)==="html")return e;const t=e.assignedSlot||e.parentNode||St(e)&&e.host||J(e);return St(t)?t.host:t}function $t(e){const t=le(e);return Re(t)?(e.ownerDocument||e).body:se(t)&&ke(t)?t:$t(t)}function Me(e,t,n){var o;t===void 0&&(t=[]),n===void 0&&(n=!0);const r=$t(e),s=r===((o=e.ownerDocument)==null?void 0:o.body),i=K(r);if(s){const c=et(i);return t.concat(i,i.visualViewport||[],ke(r)?r:[],c&&n?Me(c):[])}else return t.concat(r,Me(r,[],n))}function et(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function Ht(e){const t=Y(e);let n=parseFloat(t.width)||0,o=parseFloat(t.height)||0;const r=se(e),s=r?e.offsetWidth:n,i=r?e.offsetHeight:o,c=De(n)!==s||De(o)!==i;return c&&(n=s,o=i),{width:n,height:o,$:c}}function ut(e){return X(e)?e:e.contextElement}function ge(e){const t=ut(e);if(!se(t))return Z(1);const n=t.getBoundingClientRect(),{width:o,height:r,$:s}=Ht(t);let i=(s?De(n.width):n.width)/o,c=(s?De(n.height):n.height)/r;return(!i||!Number.isFinite(i))&&(i=1),(!c||!Number.isFinite(c))&&(c=1),{x:i,y:c}}const co=Z(0);function Wt(e){const t=K(e);return!lt()||!t.visualViewport?co:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function ao(e,t,n){return t===void 0&&(t=!1),!!n&&t&&n===K(e)}function ue(e,t,n,o){t===void 0&&(t=!1),n===void 0&&(n=!1);const r=e.getBoundingClientRect(),s=ut(e);let i=Z(1);t&&(o?X(o)&&(i=ge(o)):i=ge(e));const c=ao(s,n,o)?Wt(s):Z(0);let l=(r.left+c.x)/i.x,a=(r.top+c.y)/i.y,p=r.width/i.x,u=r.height/i.y;if(s&&o){const d=K(s),f=X(o)?K(o):o;let g=d,h=et(g);for(;h&&f!==g;){const v=ge(h),x=h.getBoundingClientRect(),w=Y(h),C=x.left+(h.clientLeft+parseFloat(w.paddingLeft))*v.x,M=x.top+(h.clientTop+parseFloat(w.paddingTop))*v.y;l*=v.x,a*=v.y,p*=v.x,u*=v.y,l+=C,a+=M,g=K(h),h=et(g)}}return Te({width:p,height:u,x:l,y:a})}function We(e,t){const n=He(e).scrollLeft;return t?t.left+n:ue(J(e)).left+n}function Kt(e,t){const n=e.getBoundingClientRect(),o=n.left+t.scrollLeft-We(e,n),r=n.top+t.scrollTop;return{x:o,y:r}}function lo(e){let{elements:t,rect:n,offsetParent:o,strategy:r}=e;const s=r==="fixed",i=J(o),c=t?$e(t.floating):!1;if(o===i||c&&s)return n;let l={scrollLeft:0,scrollTop:0},a=Z(1);const p=Z(0),u=se(o);if((u||!s)&&((we(o)!=="body"||ke(i))&&(l=He(o)),u)){const f=ue(o);a=ge(o),p.x=f.x+o.clientLeft,p.y=f.y+o.clientTop}const d=i&&!u&&!s?Kt(i,l):Z(0);return{width:n.width*a.x,height:n.height*a.y,x:n.x*a.x-l.scrollLeft*a.x+p.x+d.x,y:n.y*a.y-l.scrollTop*a.y+p.y+d.y}}function uo(e){return e.getClientRects?Array.from(e.getClientRects()):[]}function fo(e){const t=He(e),n=e.ownerDocument.body,o=q(e.scrollWidth,e.clientWidth,n.scrollWidth,n.clientWidth),r=q(e.scrollHeight,e.clientHeight,n.scrollHeight,n.clientHeight);let s=-t.scrollLeft+We(e);const i=-t.scrollTop;return Y(n).direction==="rtl"&&(s+=q(e.clientWidth,n.clientWidth)-o),{width:o,height:r,x:s,y:i}}const po=25;function mo(e,t,n){n===void 0&&(n="viewport");const o=n==="layoutViewport",r=K(e),s=J(e),i=r.visualViewport;let c=s.clientWidth,l=s.clientHeight,a=0,p=0;if(i){const d=!lt()||t==="fixed";o?d||(a=-i.offsetLeft,p=-i.offsetTop):(c=i.width,l=i.height,d&&(a=i.offsetLeft,p=i.offsetTop))}if(We(s)<=0){const d=s.ownerDocument,f=d.body,g=getComputedStyle(f),h=d.compatMode==="CSS1Compat"&&parseFloat(g.marginLeft)+parseFloat(g.marginRight)||0,v=Math.abs(s.clientWidth-f.clientWidth-h),x=getComputedStyle(s).scrollbarGutter==="stable both-edges"?v/2:v;x<=po&&(c-=x)}return{width:c,height:l,x:a,y:p}}function go(e,t){const n=ue(e,!0,t==="fixed"),o=n.top+e.clientTop,r=n.left+e.clientLeft,s=ge(e),i=e.clientWidth*s.x,c=e.clientHeight*s.y,l=r*s.x,a=o*s.y;return{width:i,height:c,x:l,y:a}}function Pt(e,t,n){let o;if(t==="viewport"||t==="layoutViewport")o=mo(e,n,t);else if(t==="document")o=fo(J(e));else if(X(t))o=go(t,n);else{const r=Wt(e);o={x:t.x-r.x,y:t.y-r.y,width:t.width,height:t.height}}return Te(o)}function ho(e,t){const n=t.get(e);if(n)return n;let o=Me(e,[],!1).filter(c=>X(c)&&we(c)!=="body"),r=null;const s=Y(e).position==="fixed";let i=s?le(e):e;for(;X(i)&&!Re(i);){const c=Y(i),l=at(i),a=r?r.position:s?"fixed":"";!l&&(a==="fixed"||a==="absolute"&&c.position==="static")?o=o.filter(u=>u!==i):r=c,i=le(i)}return t.set(e,o),o}function wo(e){let{element:t,boundary:n,rootBoundary:o,strategy:r}=e;const i=[...n==="clippingAncestors"?$e(t)?[]:ho(t,this._c):[].concat(n),o],c=Pt(t,i[0],r);let l=c.top,a=c.right,p=c.bottom,u=c.left;for(let d=1;d{c(!1,1e-7)},1e3)}P=!1}try{o=new IntersectionObserver(O,{...y,root:s.ownerDocument})}catch{o=new IntersectionObserver(O,y)}o.observe(e)}const l=K(e),a=()=>c(n);return l.addEventListener("resize",a),c(!0),()=>{l.removeEventListener("resize",a),i()}}function Mo(e,t,n,o){o===void 0&&(o={});const{ancestorScroll:r=!0,ancestorResize:s=!0,elementResize:i=typeof ResizeObserver=="function",layoutShift:c=typeof IntersectionObserver=="function",animationFrame:l=!1}=o,a=ut(e),p=r||s?[...a?Me(a):[],...t?Me(t):[]]:[];p.forEach(x=>{r&&x.addEventListener("scroll",n),s&&x.addEventListener("resize",n)});const u=a&&c?Ro(a,n,s):null;let d=-1,f=null;i&&(f=new ResizeObserver(x=>{let[w]=x;w&&w.target===a&&f&&t&&(f.unobserve(t),cancelAnimationFrame(d),d=requestAnimationFrame(()=>{var C;(C=f)==null||C.observe(t)})),n()}),a&&!l&&f.observe(a),t&&f.observe(t));let g,h=l?ue(e):null;l&&v();function v(){const x=ue(e);h&&!Gt(h,x)&&n(),h=x,g=requestAnimationFrame(v)}return n(),()=>{var x;p.forEach(w=>{r&&w.removeEventListener("scroll",n),s&&w.removeEventListener("resize",n)}),u==null||u(),(x=f)==null||x.disconnect(),f=null,l&&cancelAnimationFrame(g)}}const So=Jn,Po=eo,Ao=qn,Eo=no,Oo=Zn,Et=Yn,Io=to,Do=(e,t,n)=>{const o=new Map,r=n??{},s={...Co,...r.platform,_c:o};return Xn(e,t,{...r,platform:s})};var _o=typeof document<"u",To=function(){},Ie=_o?m.useLayoutEffect:To;function Fe(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(typeof e=="function"&&e.toString()===t.toString())return!0;let n,o,r;if(e&&t&&typeof e=="object"){if(Array.isArray(e)){if(n=e.length,n!==t.length)return!1;for(o=n;o--!==0;)if(!Fe(e[o],t[o]))return!1;return!0}if(r=Object.keys(e),n=r.length,n!==Object.keys(t).length)return!1;for(o=n;o--!==0;)if(!{}.hasOwnProperty.call(t,r[o]))return!1;for(o=n;o--!==0;){const s=r[o];if(!(s==="_owner"&&e.$$typeof)&&!Fe(e[s],t[s]))return!1}return!0}return e!==e&&t!==t}function zt(e){return typeof window>"u"?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function Ot(e,t){const n=zt(e);return Math.round(t*n)/n}function Xe(e){const t=m.useRef(e);return Ie(()=>{t.current=e}),t}function Fo(e){e===void 0&&(e={});const{placement:t="bottom",strategy:n="absolute",middleware:o=[],platform:r,elements:{reference:s,floating:i}={},transform:c=!0,whileElementsMounted:l,open:a}=e,[p,u]=m.useState({x:0,y:0,strategy:n,placement:t,middlewareData:{},isPositioned:!1}),[d,f]=m.useState(o);Fe(d,o)||f(o);const[g,h]=m.useState(null),[v,x]=m.useState(null),w=m.useCallback(A=>{A!==y.current&&(y.current=A,h(A))},[]),C=m.useCallback(A=>{A!==P.current&&(P.current=A,x(A))},[]),M=s||g,S=i||v,y=m.useRef(null),P=m.useRef(null),O=m.useRef(p),E=l!=null,I=Xe(l),k=Xe(r),$=Xe(a),F=m.useCallback(()=>{if(!y.current||!P.current)return;const A={placement:t,strategy:n,middleware:d};k.current&&(A.platform=k.current),Do(y.current,P.current,A).then(D=>{const R={...D,isPositioned:$.current!==!1};T.current&&!Fe(O.current,R)&&(O.current=R,An.flushSync(()=>{u(R)}))})},[d,t,n,k,$]);Ie(()=>{a===!1&&O.current.isPositioned&&(O.current.isPositioned=!1,u(A=>({...A,isPositioned:!1})))},[a]);const T=m.useRef(!1);Ie(()=>(T.current=!0,()=>{T.current=!1}),[]),Ie(()=>{if(M&&(y.current=M),S&&(P.current=S),M&&S){if(I.current)return I.current(M,S,F);F()}},[M,S,F,I,E]);const H=m.useMemo(()=>({reference:y,floating:P,setReference:w,setFloating:C}),[w,C]),L=m.useMemo(()=>({reference:M,floating:S}),[M,S]),N=m.useMemo(()=>{const A={position:n,left:0,top:0};if(!L.floating)return A;const D=Ot(L.floating,p.x),R=Ot(L.floating,p.y);return c?{...A,transform:"translate("+D+"px, "+R+"px)",...zt(L.floating)>=1.5&&{willChange:"transform"}}:{position:n,left:D,top:R}},[n,c,L.floating,p.x,p.y]);return m.useMemo(()=>({...p,update:F,refs:H,elements:L,floatingStyles:N}),[p,F,H,L,N])}const Lo=e=>{function t(n){return{}.hasOwnProperty.call(n,"current")}return{name:"arrow",options:e,fn(n){const{element:o,padding:r}=typeof e=="function"?e(n):e;return o&&t(o)?o.current!=null?Et({element:o.current,padding:r}).fn(n):{}:o?Et({element:o,padding:r}).fn(n):{}}}},No=(e,t)=>{const n=So(e);return{name:n.name,fn:n.fn,options:[e,t]}},jo=(e,t)=>{const n=Po(e);return{name:n.name,fn:n.fn,options:[e,t]}},ko=(e,t)=>({fn:Io(e).fn,options:[e,t]}),$o=(e,t)=>{const n=Ao(e);return{name:n.name,fn:n.fn,options:[e,t]}},Ho=(e,t)=>{const n=Eo(e);return{name:n.name,fn:n.fn,options:[e,t]}},Wo=(e,t)=>{const n=Oo(e);return{name:n.name,fn:n.fn,options:[e,t]}},Ko=(e,t)=>{const n=Lo(e);return{name:n.name,fn:n.fn,options:[e,t]}};function Bo(e){const[t,n]=m.useState(void 0);return Ce(()=>{if(e){n({width:e.offsetWidth,height:e.offsetHeight});const o=new ResizeObserver(r=>{if(!Array.isArray(r)||!r.length)return;const s=r[0];let i,c;if("borderBoxSize"in s){const l=s.borderBoxSize,a=Array.isArray(l)?l[0]:l;i=a.inlineSize,c=a.blockSize}else i=e.offsetWidth,c=e.offsetHeight;n({width:i,height:c})});return o.observe(e,{box:"border-box"}),()=>o.unobserve(e)}else n(void 0)},[e]),t}var Go=Object.defineProperty,te=(e,t)=>Go(e,"name",{value:t,configurable:!0}),Vt="Popper",[Ut,Xt]=Se(Vt),[zo,Yt]=Ut(Vt),Vo=te(e=>{const{__scopePopper:t,children:n}=e,[o,r]=m.useState(null),[s,i]=m.useState(void 0);return b.jsx(zo,{scope:t,anchor:o,onAnchorChange:r,placementState:s,setPlacementState:i,children:n})},"Popper"),Uo="PopperAnchor",Xo=m.forwardRef(te(function(t,n){const{__scopePopper:o,virtualRef:r,...s}=t,i=Yt(Uo,o),c=m.useRef(null),l=i.onAnchorChange,a=m.useCallback(h=>{c.current=h,h&&l(h)},[l]),p=U(n,a),u=m.useRef(null);m.useEffect(()=>{if(!r)return;const h=u.current;u.current=r.current,h!==u.current&&l(u.current)});const d=i.placementState&&Ke(i.placementState),f=d==null?void 0:d[0],g=d==null?void 0:d[1];return r?null:b.jsx(ie.div,{"data-radix-popper-side":f,"data-radix-popper-align":g,...s,ref:p})},"PopperAnchor")),qt="PopperContent",[Yo,wi]=Ut(qt),qo=m.forwardRef(te(function(t,n){var ye,z,be,gt,ht,wt,vt;const{__scopePopper:o,side:r="bottom",sideOffset:s=0,align:i="center",alignOffset:c=0,arrowPadding:l=0,avoidCollisions:a=!0,collisionBoundary:p=[],collisionPadding:u=0,sticky:d="partial",hideWhenDetached:f=!1,updatePositionStrategy:g="optimized",onPlaced:h,...v}=t,x=Yt(qt,o),[w,C]=m.useState(null),M=U(n,C),[S,y]=m.useState(null),P=Bo(S),O=(P==null?void 0:P.width)??0,E=(P==null?void 0:P.height)??0,I=r+(i!=="center"?"-"+i:""),k=typeof u=="number"?u:{top:0,right:0,bottom:0,left:0,...u},$=Array.isArray(p)?p:[p],F=$.length>0,T={padding:k,boundary:$.filter(Zt),altBoundary:F},{refs:H,floatingStyles:L,placement:N,isPositioned:A,middlewareData:D}=Fo({strategy:"fixed",placement:I,whileElementsMounted:te((...ze)=>Mo(...ze,{animationFrame:g==="always"}),"whileElementsMounted"),elements:{reference:x.anchor},middleware:[No({mainAxis:s+E,alignmentAxis:c}),a&&jo({mainAxis:!0,crossAxis:!1,limiter:d==="partial"?ko():void 0,...T}),a&&$o({...T}),Ho({...T,apply:te(({elements:ze,rects:xt,availableWidth:Rn,availableHeight:Mn})=>{const{width:Sn,height:Pn}=xt.reference,Ee=ze.floating.style;Ee.setProperty("--radix-popper-available-width",`${Rn}px`),Ee.setProperty("--radix-popper-available-height",`${Mn}px`),Ee.setProperty("--radix-popper-anchor-width",`${Sn}px`),Ee.setProperty("--radix-popper-anchor-height",`${Pn}px`)},"apply")}),S&&Ko({element:S,padding:l}),Zo({arrowWidth:O,arrowHeight:E}),f&&Wo({strategy:"referenceHidden",...T,boundary:F?T.boundary:void 0})]}),R=x.setPlacementState;Ce(()=>(R(N),()=>{R(void 0)}),[N,R]);const[W,B]=Ke(N),G=rt(h);Ce(()=>{A&&(G==null||G())},[A,G]);const ve=(ye=D.arrow)==null?void 0:ye.x,xe=(z=D.arrow)==null?void 0:z.y,Ae=((be=D.arrow)==null?void 0:be.centerOffset)!==0,[ce,ee]=m.useState();return Ce(()=>{w&&ee(window.getComputedStyle(w).zIndex)},[w]),b.jsx("div",{ref:H.setFloating,"data-radix-popper-content-wrapper":"",style:{...L,transform:A?L.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:ce,"--radix-popper-transform-origin":[(gt=D.transformOrigin)==null?void 0:gt.x,(ht=D.transformOrigin)==null?void 0:ht.y].join(" "),...((wt=D.hide)==null?void 0:wt.referenceHidden)&&{visibility:"hidden",pointerEvents:"none"}},dir:t.dir,children:b.jsx(Yo,{scope:o,placedSide:W,placedAlign:B,onArrowChange:y,arrowX:ve,arrowY:xe,shouldHideArrow:Ae,children:b.jsx(ie.div,{"data-side":W,"data-align":B,...v,ref:M,style:{...v.style,animation:A?(vt=v.style)==null?void 0:vt.animation:"none"}})})})},"PopperContent"));function Zt(e){return e!==null}te(Zt,"isNotNull");var Zo=te(e=>({name:"transformOrigin",options:e,fn(t){var v,x,w;const{placement:n,rects:o,middlewareData:r}=t,i=((v=r.arrow)==null?void 0:v.centerOffset)!==0,c=i?0:e.arrowWidth,l=i?0:e.arrowHeight,[a,p]=Ke(n),u={start:"0%",center:"50%",end:"100%"}[p],d=(((x=r.arrow)==null?void 0:x.x)??0)+c/2,f=(((w=r.arrow)==null?void 0:w.y)??0)+l/2;let g="",h="";return a==="bottom"?(g=i?u:`${d}px`,h=`${-l}px`):a==="top"?(g=i?u:`${d}px`,h=`${o.floating.height+l}px`):a==="right"?(g=`${-l}px`,h=i?u:`${f}px`):a==="left"&&(g=`${o.floating.width+l}px`,h=i?u:`${f}px`),{data:{x:g,y:h}}}}),"transformOrigin");function Ke(e){const[t,n="center"]=e.split("-");return[t,n]}te(Ke,"getSideAndAlignFromPlacement");var Qo=Vo,Jo=Xo,er=qo,Ye=!1;function tr(){const[e,t]=m.useState(Ye);return m.useEffect(()=>{Ye||(Ye=!0,t(!0))},[]),e}var Qt=En[" useSyncExternalStore ".trim().toString()];function nr(){return()=>{}}function or(){return Qt(nr,()=>!0,()=>!1)}var rr=typeof Qt=="function"?or:tr,ir=Object.defineProperty,fe=(e,t)=>ir(e,"name",{value:t,configurable:!0}),qe="rovingFocusGroup.onEntryFocus",sr={bubbles:!1,cancelable:!0},Be="RovingFocusGroup",[tt,Jt,cr]=Tt(Be),[ar,en]=Se(Be,[cr]),[lr,ur]=ar(Be),fr=m.forwardRef(fe(function(t,n){return b.jsx(tt.Provider,{scope:t.__scopeRovingFocusGroup,children:b.jsx(tt.Slot,{scope:t.__scopeRovingFocusGroup,children:b.jsx(dr,{...t,ref:n})})})},"RovingFocusGroup")),dr=m.forwardRef(fe(function(t,n){const{__scopeRovingFocusGroup:o,orientation:r,loop:s=!1,dir:i,currentTabStopId:c,defaultCurrentTabStopId:l,onCurrentTabStopIdChange:a,onEntryFocus:p,preventScrollOnEntryFocus:u=!1,...d}=t,f=m.useRef(null),g=U(n,f),h=Ft(i),[v,x]=Dt({prop:c,defaultProp:l??null,onChange:a,caller:Be}),[w,C]=m.useState(!1),M=rt(p),S=Jt(o),y=m.useRef(!1),[P,O]=m.useState(0);return m.useEffect(()=>{const E=f.current;if(E)return E.addEventListener(qe,M),()=>E.removeEventListener(qe,M)},[M]),b.jsx(lr,{scope:o,orientation:r,dir:h,loop:s,currentTabStopId:v,onItemFocus:m.useCallback(E=>x(E),[x]),onItemShiftTab:m.useCallback(()=>C(!0),[]),onFocusableItemAdd:m.useCallback(()=>O(E=>E+1),[]),onFocusableItemRemove:m.useCallback(()=>O(E=>E-1),[]),children:b.jsx(ie.div,{tabIndex:w||P===0?-1:0,"data-orientation":r,...d,ref:g,style:{outline:"none",...t.style},onMouseDown:j(t.onMouseDown,()=>{y.current=!0}),onFocus:j(t.onFocus,E=>{const I=!y.current;if(E.target===E.currentTarget&&I&&!w){const k=new CustomEvent(qe,sr);if(E.currentTarget.dispatchEvent(k),!k.defaultPrevented){const $=S().filter(N=>N.focusable),F=$.find(N=>N.active),T=$.find(N=>N.id===v),L=[F,T,...$].filter(Boolean).map(N=>N.ref.current);ft(L,u)}}y.current=!1}),onBlur:j(t.onBlur,()=>C(!1))})})},"RovingFocusGroupImpl")),pr="RovingFocusGroupItem",mr=m.forwardRef(fe(function(t,n){const{__scopeRovingFocusGroup:o,focusable:r=!0,active:s=!1,tabStopId:i,children:c,...l}=t,a=Qe(),p=i||a,u=ur(pr,o),d=u.currentTabStopId===p,f=Jt(o),{onFocusableItemAdd:g,onFocusableItemRemove:h,currentTabStopId:v}=u,x=rr();return Ce(()=>{if(!(!x||!r))return g(),()=>h()},[x,r,g,h]),m.useEffect(()=>{if(!(x||!r))return g(),()=>h()},[x,r,g,h]),b.jsx(tt.ItemSlot,{scope:o,id:p,focusable:r,active:s,children:b.jsx(ie.span,{tabIndex:d?0:-1,"data-orientation":u.orientation,...l,ref:n,onMouseDown:j(t.onMouseDown,w=>{r?u.onItemFocus(p):w.preventDefault()}),onFocus:j(t.onFocus,()=>u.onItemFocus(p)),onKeyDown:j(t.onKeyDown,w=>{if(w.key==="Tab"&&w.shiftKey){u.onItemShiftTab();return}if(w.target!==w.currentTarget)return;const C=nn(w,u.orientation,u.dir);if(C!==void 0){if(w.metaKey||w.ctrlKey||w.altKey||w.shiftKey)return;w.preventDefault();let S=f().filter(y=>y.focusable).map(y=>y.ref.current);if(C==="last")S.reverse();else if(C==="prev"||C==="next"){C==="prev"&&S.reverse();const y=S.indexOf(w.currentTarget);S=u.loop?on(S,y+1):S.slice(y+1)}setTimeout(()=>ft(S))}}),children:typeof c=="function"?c({isCurrentTabStop:d,hasTabStop:v!=null}):c})})},"RovingFocusGroupItem")),gr={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function tn(e,t){return t!=="rtl"?e:e==="ArrowLeft"?"ArrowRight":e==="ArrowRight"?"ArrowLeft":e}fe(tn,"getDirectionAwareKey");function nn(e,t,n){const o=tn(e.key,n);if(!(t==="vertical"&&["ArrowLeft","ArrowRight"].includes(o))&&!(t==="horizontal"&&["ArrowUp","ArrowDown"].includes(o)))return gr[o]}fe(nn,"getFocusIntent");function ft(e,t=!1){const n=document.activeElement;for(const o of e)if(o===n||(o.focus({preventScroll:t}),document.activeElement!==n))return}fe(ft,"focusFirst");function on(e,t){return e.map((n,o)=>e[(t+o)%e.length])}fe(on,"wrapArray");var hr=fr,wr=mr,vr=Object.defineProperty,_=(e,t)=>vr(e,"name",{value:t,configurable:!0}),xr=["Enter"," "],yr=["ArrowDown","PageUp","Home"],rn=["ArrowUp","PageDown","End"],br=[...yr,...rn],Ge="Menu",[nt,Cr,Rr]=Tt(Ge),[de,sn]=Se(Ge,[Rr,Xt,en]),dt=Xt(),cn=en(),[Mr,Pe]=de(Ge),[Sr,pt]=de(Ge),Pr=_(e=>{const{__scopeMenu:t,open:n=!1,children:o,dir:r,onOpenChange:s,modal:i=!0}=e,c=dt(t),[l,a]=m.useState(null),p=m.useRef(!1),u=rt(s),d=Ft(r);return m.useEffect(()=>{const f=_(()=>{p.current=!0,document.addEventListener("pointerdown",g,{capture:!0,once:!0}),document.addEventListener("pointermove",g,{capture:!0,once:!0})},"handleKeyDown"),g=_(()=>p.current=!1,"handlePointer");return document.addEventListener("keydown",f,{capture:!0}),()=>{document.removeEventListener("keydown",f,{capture:!0}),document.removeEventListener("pointerdown",g,{capture:!0}),document.removeEventListener("pointermove",g,{capture:!0})}},[]),m.useEffect(()=>{if(!n)return;const f=_(()=>u(!1),"handleBlur");return window.addEventListener("blur",f),()=>window.removeEventListener("blur",f)},[n,u]),b.jsx(Qo,{...c,children:b.jsx(Mr,{scope:t,open:n,onOpenChange:u,content:l,onContentChange:a,children:b.jsx(Sr,{scope:t,onClose:m.useCallback(()=>u(!1),[u]),isUsingKeyboardRef:p,dir:d,modal:i,children:o})})})},"Menu"),Ar=m.forwardRef(_(function(t,n){const{__scopeMenu:o,...r}=t,s=dt(o);return b.jsx(Jo,{...s,...r,ref:n})},"MenuAnchor")),an="MenuPortal",[Er,Or]=de(an,{forceMount:void 0}),Ir=_(e=>{const{__scopeMenu:t,forceMount:n,children:o,container:r}=e,s=Pe(an,t);return b.jsx(Er,{scope:t,forceMount:n,children:b.jsx(_t,{present:n||s.open,children:b.jsx(On,{asChild:!0,container:r,children:o})})})},"MenuPortal"),ne="MenuContent",[Dr,ln]=de(ne),_r=m.forwardRef(_(function(t,n){const o=Or(ne,t.__scopeMenu),{forceMount:r=o.forceMount,...s}=t,i=Pe(ne,t.__scopeMenu),c=pt(ne,t.__scopeMenu);return b.jsx(nt.Provider,{scope:t.__scopeMenu,children:b.jsx(_t,{present:r||i.open,children:b.jsx(nt.Slot,{scope:t.__scopeMenu,children:c.modal?b.jsx(Tr,{...s,ref:n}):b.jsx(Fr,{...s,ref:n})})})})},"MenuContent")),Tr=m.forwardRef(_(function(t,n){const o=Pe(ne,t.__scopeMenu),r=m.useRef(null),s=U(n,r);return m.useEffect(()=>{const i=r.current;if(i)return In(i)},[]),b.jsx(un,{...t,ref:s,trapFocus:o.open,disableOutsidePointerEvents:o.open,disableOutsideScroll:!0,onFocusOutside:j(t.onFocusOutside,i=>i.preventDefault(),{checkForDefaultPrevented:!1}),onDismiss:()=>o.onOpenChange(!1)})},"MenuRootContentModal")),Fr=m.forwardRef(_(function(t,n){const o=Pe(ne,t.__scopeMenu);return b.jsx(un,{...t,ref:n,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>o.onOpenChange(!1)})},"MenuRootContentNonModal")),Lr=Ze("MenuContent.ScrollLock"),un=m.forwardRef(_(function(t,n){const{__scopeMenu:o,loop:r=!1,trapFocus:s,onOpenAutoFocus:i,onCloseAutoFocus:c,disableOutsidePointerEvents:l,onEntryFocus:a,onEscapeKeyDown:p,onPointerDownOutside:u,onFocusOutside:d,onInteractOutside:f,onDismiss:g,disableOutsideScroll:h,...v}=t,x=Pe(ne,o),w=pt(ne,o),C=dt(o),M=cn(o),S=Cr(o),[y,P]=m.useState(null),O=m.useRef(null),E=U(n,O,x.onContentChange),I=m.useRef(0),k=m.useRef(""),$=m.useRef(0),F=m.useRef(null),T=m.useRef("right"),H=m.useRef(0),L=h?_n:m.Fragment,N=h?{as:Lr,allowPinchZoom:!0}:void 0,A=_(R=>{var ee,ye;const W=k.current+R,B=S().filter(z=>!z.disabled),G=document.activeElement,ve=(ee=B.find(z=>z.ref.current===G))==null?void 0:ee.textValue,xe=B.map(z=>z.textValue),Ae=gn(xe,W,ve),ce=(ye=B.find(z=>z.textValue===Ae))==null?void 0:ye.ref.current;_((function z(be){k.current=be,window.clearTimeout(I.current),be!==""&&(I.current=window.setTimeout(()=>z(""),1e3))}),"updateSearch")(W),ce&&setTimeout(()=>ce.focus())},"handleTypeaheadSearch");m.useEffect(()=>()=>window.clearTimeout(I.current),[]),Dn();const D=m.useCallback(R=>{var B,G;return T.current===((B=F.current)==null?void 0:B.side)&&wn(R,(G=F.current)==null?void 0:G.area)},[]);return b.jsx(Dr,{scope:o,searchRef:k,onItemEnter:m.useCallback(R=>{D(R)&&R.preventDefault()},[D]),onItemLeave:m.useCallback(R=>{var W;D(R)||((W=O.current)==null||W.focus(),P(null))},[D]),onTriggerLeave:m.useCallback(R=>{D(R)&&R.preventDefault()},[D]),pointerGraceTimerRef:$,onPointerGraceIntentChange:m.useCallback(R=>{F.current=R},[]),children:b.jsx(L,{...N,children:b.jsx(Tn,{asChild:!0,trapped:s,onMountAutoFocus:j(i,R=>{var W;R.preventDefault(),(W=O.current)==null||W.focus({preventScroll:!0})}),onUnmountAutoFocus:c,children:b.jsx(Fn,{asChild:!0,disableOutsidePointerEvents:l,onEscapeKeyDown:p,onPointerDownOutside:u,onFocusOutside:d,onInteractOutside:f,onDismiss:g,children:b.jsx(hr,{asChild:!0,...M,dir:w.dir,orientation:"vertical",loop:r,currentTabStopId:y,onCurrentTabStopIdChange:P,onEntryFocus:j(a,R=>{w.isUsingKeyboardRef.current||R.preventDefault()}),preventScrollOnEntryFocus:!0,children:b.jsx(er,{role:"menu","aria-orientation":"vertical","data-state":fn(x.open),"data-radix-menu-content":"",dir:w.dir,...C,...v,ref:E,style:{outline:"none",...v.style},onKeyDown:j(v.onKeyDown,R=>{const B=R.target.closest("[data-radix-menu-content]")===R.currentTarget,G=R.ctrlKey||R.altKey||R.metaKey,ve=R.key.length===1;B&&(R.key==="Tab"&&R.preventDefault(),!G&&ve&&A(R.key));const xe=O.current;if(R.target!==xe||!br.includes(R.key))return;R.preventDefault();const ce=S().filter(ee=>!ee.disabled).map(ee=>ee.ref.current);rn.includes(R.key)&&ce.reverse(),pn(ce)}),onBlur:j(t.onBlur,R=>{R.currentTarget.contains(R.target)||(window.clearTimeout(I.current),k.current="")}),onPointerMove:j(t.onPointerMove,Le(R=>{const W=R.target,B=H.current!==R.clientX;if(R.currentTarget.contains(W)&&B){const G=R.clientX>H.current?"right":"left";T.current=G,H.current=R.clientX}}))})})})})})})},"MenuContentImpl")),Nr=m.forwardRef(_(function(t,n){const{__scopeMenu:o,...r}=t;return b.jsx(ie.div,{...r,ref:n})},"MenuLabel")),ot="MenuItem",It="menu.itemSelect",jr=m.forwardRef(_(function(t,n){const{disabled:o=!1,onSelect:r,...s}=t,i=m.useRef(null),c=pt(ot,t.__scopeMenu),l=ln(ot,t.__scopeMenu),a=U(n,i),p=m.useRef(!1),u=_(()=>{const d=i.current;if(!o&&d){const f=new CustomEvent(It,{bubbles:!0,cancelable:!0});d.addEventListener(It,g=>r==null?void 0:r(g),{once:!0}),Ln(d,f),f.defaultPrevented?p.current=!1:c.onClose()}},"handleSelect");return b.jsx(kr,{...s,ref:a,disabled:o,onClick:j(t.onClick,u),onPointerDown:d=>{var f;(f=t.onPointerDown)==null||f.call(t,d),p.current=!0},onPointerUp:j(t.onPointerUp,d=>{var f;p.current||(f=d.currentTarget)==null||f.click()}),onKeyDown:j(t.onKeyDown,d=>{o||d.target!==d.currentTarget||l.searchRef.current!==""&&d.key===" "||xr.includes(d.key)&&(d.currentTarget.click(),d.preventDefault())})})},"MenuItem")),kr=m.forwardRef(_(function(t,n){const{__scopeMenu:o,disabled:r=!1,textValue:s,...i}=t,c=ln(ot,o),l=cn(o),a=m.useRef(null),p=U(n,a),[u,d]=m.useState(!1),[f,g]=m.useState("");return m.useEffect(()=>{const h=a.current;h&&g((h.textContent??"").trim())},[i.children]),b.jsx(nt.ItemSlot,{scope:o,disabled:r,textValue:s??f,children:b.jsx(wr,{asChild:!0,...l,focusable:!r,children:b.jsx(ie.div,{role:"menuitem","data-highlighted":u?"":void 0,"aria-disabled":r||void 0,"data-disabled":r?"":void 0,...i,ref:p,onPointerMove:j(t.onPointerMove,Le(h=>{r?c.onItemLeave(h):(c.onItemEnter(h),h.defaultPrevented||h.currentTarget.focus({preventScroll:!0}))})),onPointerLeave:j(t.onPointerLeave,Le(h=>c.onItemLeave(h))),onFocus:j(t.onFocus,()=>d(!0)),onBlur:j(t.onBlur,()=>d(!1))})})})},"MenuItemImpl")),$r="MenuRadioGroup",[vi,xi]=de($r,{value:void 0,onValueChange:_(()=>{},"onValueChange")}),Hr="MenuItemIndicator",[yi,bi]=de(Hr,{checked:!1}),Wr=m.forwardRef(_(function(t,n){const{__scopeMenu:o,...r}=t;return b.jsx(ie.div,{role:"separator","aria-orientation":"horizontal",...r,ref:n})},"MenuSeparator")),Kr="MenuSub",[Ci,Ri]=de(Kr);function fn(e){return e?"open":"closed"}_(fn,"getOpenState");function dn(e){return e==="indeterminate"}_(dn,"isIndeterminate");function Br(e){return dn(e)?"indeterminate":e?"checked":"unchecked"}_(Br,"getCheckedState");function pn(e){const t=document.activeElement;for(const n of e)if(n===t||(n.focus(),document.activeElement!==t))return}_(pn,"focusFirst");function mn(e,t){return e.map((n,o)=>e[(t+o)%e.length])}_(mn,"wrapArray");function gn(e,t,n){const r=t.length>1&&Array.from(t).every(a=>a===t[0])?t[0]:t,s=n?e.indexOf(n):-1;let i=mn(e,Math.max(s,0));r.length===1&&(i=i.filter(a=>a!==n));const l=i.find(a=>a.toLowerCase().startsWith(r.toLowerCase()));return l!==n?l:void 0}_(gn,"getNextMatch");function hn(e,t){const{x:n,y:o}=e;let r=!1;for(let s=0,i=t.length-1;so!=d>o&&n<(u-a)*(o-p)/(d-p)+a&&(r=!r)}return r}_(hn,"isPointInPolygon");function wn(e,t){if(!t)return!1;const n={x:e.clientX,y:e.clientY};return hn(n,t)}_(wn,"isPointerInGraceArea");function Le(e){return t=>t.pointerType==="mouse"?e(t):void 0}_(Le,"whenMouse");var Gr=Pr,zr=Ar,Vr=Ir,Ur=_r,Xr=Nr,Yr=jr,qr=Wr,Zr=Object.defineProperty,pe=(e,t)=>Zr(e,"name",{value:t,configurable:!0}),mt="DropdownMenu",[Qr]=Se(mt,[sn]),me=sn(),[Jr,vn]=Qr(mt),ei=pe(e=>{const{__scopeDropdownMenu:t,children:n,dir:o,open:r,defaultOpen:s,onOpenChange:i,modal:c=!0}=e,l=me(t),a=m.useRef(null),[p,u]=Dt({prop:r,defaultProp:s??!1,onChange:i,caller:mt});return b.jsx(Jr,{scope:t,triggerId:Qe(),triggerRef:a,contentId:Qe(),open:p,onOpenChange:u,onOpenToggle:m.useCallback(()=>u(d=>!d),[u]),modal:c,children:b.jsx(Gr,{...l,open:p,onOpenChange:u,dir:o,modal:c,children:n})})},"DropdownMenu"),ti="DropdownMenuTrigger",ni=m.forwardRef(pe(function(t,n){const{__scopeDropdownMenu:o,disabled:r=!1,...s}=t,i=vn(ti,o),c=me(o),l=U(n,i.triggerRef);return b.jsx(zr,{asChild:!0,...c,children:b.jsx(ie.button,{type:"button",id:i.triggerId,"aria-haspopup":"menu","aria-expanded":i.open,"aria-controls":i.open?i.contentId:void 0,"data-state":i.open?"open":"closed","data-disabled":r?"":void 0,disabled:r,...s,ref:l,onPointerDown:j(t.onPointerDown,a=>{!r&&a.button===0&&a.ctrlKey===!1&&(i.onOpenToggle(),i.open||a.preventDefault())}),onKeyDown:j(t.onKeyDown,a=>{r||(["Enter"," "].includes(a.key)&&i.onOpenToggle(),a.key==="ArrowDown"&&i.onOpenChange(!0),["Enter"," ","ArrowDown"].includes(a.key)&&a.preventDefault())})})})},"DropdownMenuTrigger")),oi=pe(e=>{const{__scopeDropdownMenu:t,...n}=e,o=me(t);return b.jsx(Vr,{...o,...n})},"DropdownMenuPortal"),ri="DropdownMenuContent",ii=m.forwardRef(pe(function(t,n){const{__scopeDropdownMenu:o,...r}=t,s=vn(ri,o),i=me(o),c=m.useRef(!1);return b.jsx(Ur,{id:s.contentId,"aria-labelledby":s.triggerId,...i,...r,ref:n,onCloseAutoFocus:j(t.onCloseAutoFocus,l=>{var a;c.current||(a=s.triggerRef.current)==null||a.focus(),c.current=!1,l.preventDefault()}),onInteractOutside:j(t.onInteractOutside,l=>{const a=l.detail.originalEvent,p=a.button===0&&a.ctrlKey===!0,u=a.button===2||p;(!s.modal||u)&&(c.current=!0)}),style:{...t.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})},"DropdownMenuContent")),si=m.forwardRef(pe(function(t,n){const{__scopeDropdownMenu:o,...r}=t,s=me(o);return b.jsx(Xr,{...s,...r,ref:n})},"DropdownMenuLabel")),ci=m.forwardRef(pe(function(t,n){const{__scopeDropdownMenu:o,...r}=t,s=me(o);return b.jsx(Yr,{...s,...r,ref:n})},"DropdownMenuItem")),ai=m.forwardRef(pe(function(t,n){const{__scopeDropdownMenu:o,...r}=t,s=me(o);return b.jsx(qr,{...s,...r,ref:n})},"DropdownMenuSeparator")),li=ei,ui=ni,fi=oi,xn=ii,yn=si,bn=ci,Cn=ai;const Mi=li,Si=ui,di=m.forwardRef(({className:e,sideOffset:t=4,...n},o)=>b.jsx(fi,{children:b.jsx(xn,{ref:o,sideOffset:t,className:Ne("z-50 min-w-[8rem] overflow-hidden rounded-lg border border-border bg-popover p-1 text-popover-foreground shadow-md","data-[state=open]:animate-in data-[state=closed]:animate-out","data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0","data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95","data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2","data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2",e),...n})}));di.displayName=xn.displayName;const pi=m.forwardRef(({className:e,inset:t,...n},o)=>b.jsx(bn,{ref:o,className:Ne("relative flex cursor-default select-none items-center gap-2 rounded-md ps-2 pe-2 py-1.5 text-sm outline-none transition-colors","focus:bg-accent focus:text-accent-foreground","data-[disabled]:pointer-events-none data-[disabled]:opacity-50",t&&"ps-8",e),...n}));pi.displayName=bn.displayName;const mi=m.forwardRef(({className:e,...t},n)=>b.jsx(Cn,{ref:n,className:Ne("-ms-1 -me-1 my-1 h-px bg-border",e),...t}));mi.displayName=Cn.displayName;const gi=m.forwardRef(({className:e,inset:t,...n},o)=>b.jsx(yn,{ref:o,className:Ne("ps-2 pe-2 py-1.5 text-sm font-semibold",t&&"ps-8",e),...n}));gi.displayName=yn.displayName;export{Mi as D,Si as a,di as b,pi as c,mi as d}; diff --git a/src/main/resources/META-INF/resources/assets/editor-registry-CIV_g9hj.js b/src/main/resources/META-INF/resources/assets/editor-registry-jvsNWt75.js similarity index 99% rename from src/main/resources/META-INF/resources/assets/editor-registry-CIV_g9hj.js rename to src/main/resources/META-INF/resources/assets/editor-registry-jvsNWt75.js index abf22c3e50..33f9208d33 100644 --- a/src/main/resources/META-INF/resources/assets/editor-registry-CIV_g9hj.js +++ b/src/main/resources/META-INF/resources/assets/editor-registry-jvsNWt75.js @@ -1,5 +1,5 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/freemarker2-DiN8Ju52.js","assets/index-BY6d8wze.js","assets/index-C5CsSAfP.css","assets/resources-R5ikMSzo.js","assets/parser-editor-DJVsdXlv.js","assets/type-SbeC_oGu.js","assets/git-compare-arrows-pI8Ehpf-.js","assets/undo-2-CF9h_dkU.js","assets/save-lzTRlOlB.js","assets/eye-Dbrf-yrM.js","assets/secret-key-picker-TXey-VQE.js","assets/use-secrets-C_oj4VYh.js","assets/eye-off-DQKzJHI5.js","assets/tool-approvals-editor-BKW-ZLXY.js","assets/timer-BX3xgSur.js","assets/arrow-right-left-Or_4oRf0.js","assets/file-output-BA4KZHPi.js","assets/shield-Ce05kery.js","assets/info-vszmN4vn.js","assets/types-BY9zm5d-.js","assets/scale-DJXpJ1ID.js","assets/gauge-D0qrGV1d.js","assets/dollar-sign-Dt9VyGPU.js","assets/handshake-d__LQWU9.js","assets/cpu-BsIZspVa.js","assets/server-CeKDVLCh.js","assets/upload-DxPMOlxt.js","assets/lock-CPVVTGkJ.js","assets/tag-DrXWC0RK.js","assets/handlebars-DOR9Cq-e.js","assets/html-BFxY6n68.js","assets/javascript-BQ1ascVE.js","assets/typescript-Bq0Ao-PB.js","assets/liquid-AywQ9haj.js","assets/mdx-Cy09YxYR.js","assets/python-DuVsjFuv.js","assets/razor-A-iK6PzJ.js","assets/xml-DmRm0v1g.js","assets/yaml-Cl9BY_30.js","assets/cssMode-DFvnCjHl.js","assets/workers-a5re0z0Q.js","assets/lspLanguageFeatures-Ajeavr0P.js","assets/htmlMode-AnX_EBKG.js","assets/jsonMode-CM_upRfN.js","assets/tsMode-D0HRyvms.js"])))=>i.map(i=>d[i]); -var ice=Object.defineProperty;var nce=(o,e,t)=>e in o?ice(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var ln=(o,e,t)=>nce(o,typeof e!="symbol"?e+"":e,t);import{x as NC,aZ as Hp,u as LQ,c as nt,r as ce,j as b,T as OS,bo as Pe,aP as Fv,bn as JH,av as bM,X as sce,F as kQ,aN as oce,P as Zt,a7 as Sa,a8 as nl,Z as Zs,a9 as Qi,a_ as rce,bp as e8,s as ace,a1 as t8,i as mo,w as lce,a4 as t_,Y as cce,a as dce,bq as DQ,br as hce,bs as uce,bt as gce,bu as fce,bv as pce,bw as mce,bx as _ce,by as bce,bz as vce,a2 as Jz,D as Oy,ad as i8,bA as wce,l as n8,bB as Ww,a5 as Cce,a6 as EQ,bC as yce,aM as x5,bD as FP,n as S5,aB as IQ,bi as s8,B as xce,ah as Sce,bm as Lce,az as kce,bl as Dce,bk as Ece,m as o8,C as Ice,aR as Nce}from"./index-BY6d8wze.js";import{g as Tce}from"./resources-R5ikMSzo.js";import{u as Rce,P as Mce}from"./parser-editor-DJVsdXlv.js";import{G as Pce}from"./git-compare-arrows-pI8Ehpf-.js";import{U as Ace}from"./undo-2-CF9h_dkU.js";import{S as Oce}from"./save-lzTRlOlB.js";import{E as NQ}from"./eye-Dbrf-yrM.js";import{S as i_}from"./secret-key-picker-TXey-VQE.js";import{E as ci,T as Fce}from"./tool-approvals-editor-BKW-ZLXY.js";import{T as Wce}from"./timer-BX3xgSur.js";import{A as Wv}from"./arrow-right-left-Or_4oRf0.js";import{F as Fy}from"./file-output-BA4KZHPi.js";import{S as tE}from"./shield-Ce05kery.js";import{I as xu}from"./info-vszmN4vn.js";import{M as vM,R as Bce,H as Hce,L as Vce,B as OL}from"./types-BY9zm5d-.js";import{S as jce}from"./scale-DJXpJ1ID.js";import{G as TQ}from"./gauge-D0qrGV1d.js";import{D as RQ}from"./dollar-sign-Dt9VyGPU.js";import{H as zce}from"./handshake-d__LQWU9.js";import{E as Uce}from"./eye-off-DQKzJHI5.js";import{C as $ce}from"./cpu-BsIZspVa.js";import{S as WP}from"./server-CeKDVLCh.js";import{U as L5}from"./upload-DxPMOlxt.js";import{L as qce}from"./lock-CPVVTGkJ.js";import{T as Kce}from"./tag-DrXWC0RK.js";/** +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/freemarker2-CoZsy1EV.js","assets/index-BnLj1hck.js","assets/index-wjMXeUlx.css","assets/resources-D97MNqv3.js","assets/parser-editor-CPhjadeF.js","assets/useQueries-DZrQsbjS.js","assets/accessible-dialog-C2wu1H5q.js","assets/input-BV8V9kav.js","assets/empty-state-DxZE48rx.js","assets/error-state-D4qtZYFq.js","assets/use-debounce-DMHuVYwD.js","assets/use-resources-xPGGDyiq.js","assets/cascade-save-BHTTkwOb.js","assets/workflows-DTtF3KEG.js","assets/type-ChzGm4vJ.js","assets/git-compare-arrows-HXbtfCTs.js","assets/undo-2-Dh2nRAeV.js","assets/save-s-dFqxLL.js","assets/eye-xZR8Jj8Y.js","assets/secret-key-picker-BCXXdOJ-.js","assets/use-secrets--RofX_r2.js","assets/eye-off-PKiH0Asw.js","assets/tool-approvals-editor-S2UA66Hb.js","assets/timer-CShnmlWE.js","assets/arrow-right-left-J0fZSu2z.js","assets/file-output-DlS0SPnt.js","assets/shield-Dy-B1VeF.js","assets/info-cNcTVsFc.js","assets/types-tS6i07ms.js","assets/scale-BnMnNt4Y.js","assets/gauge-ML2DGGDJ.js","assets/dollar-sign-HonLwnZc.js","assets/handshake-foe5KMFV.js","assets/cpu-zEsE2ia0.js","assets/server-BMZQ8ps7.js","assets/upload-D1UCHnd4.js","assets/lock-CL2SzOGd.js","assets/tag-Cd1R14bi.js","assets/handlebars-CWdXIirr.js","assets/html-C4Yj3tdw.js","assets/javascript-BP_fkOSZ.js","assets/typescript-z7mhvbE0.js","assets/liquid-BywxO2Ag.js","assets/mdx-CuytO5ml.js","assets/python-DJFCDP40.js","assets/razor-i6L5r8Nn.js","assets/xml-ptITVOc2.js","assets/yaml-BGoDTs3D.js","assets/cssMode-BQhiich3.js","assets/workers-ckLFiTM8.js","assets/lspLanguageFeatures-CAae2_b-.js","assets/htmlMode-NRT3PXyd.js","assets/jsonMode-B6UDf7e7.js","assets/tsMode-CBVdH5Cy.js"])))=>i.map(i=>d[i]); +var ice=Object.defineProperty;var nce=(o,e,t)=>e in o?ice(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var ln=(o,e,t)=>nce(o,typeof e!="symbol"?e+"":e,t);import{x as NC,aZ as Hp,u as LQ,c as nt,r as ce,j as b,T as OS,bo as Pe,aP as Fv,bn as JH,av as bM,X as sce,F as kQ,aN as oce,P as Zt,a7 as Sa,a8 as nl,Z as Zs,a9 as Qi,a_ as rce,bp as e8,s as ace,a1 as t8,i as mo,w as lce,a4 as t_,Y as cce,a as dce,bq as DQ,br as hce,bs as uce,bt as gce,bu as fce,bv as pce,bw as mce,bx as _ce,by as bce,bz as vce,a2 as Jz,D as Oy,ad as i8,bA as wce,l as n8,bB as Ww,a5 as Cce,a6 as EQ,bC as yce,aM as x5,bD as FP,n as S5,aB as IQ,bi as s8,B as xce,ah as Sce,bm as Lce,az as kce,bl as Dce,bk as Ece,m as o8,C as Ice,aR as Nce}from"./index-BnLj1hck.js";import{g as Tce}from"./resources-D97MNqv3.js";import{u as Rce,P as Mce}from"./parser-editor-CPhjadeF.js";import{G as Pce}from"./git-compare-arrows-HXbtfCTs.js";import{U as Ace}from"./undo-2-Dh2nRAeV.js";import{S as Oce}from"./save-s-dFqxLL.js";import{E as NQ}from"./eye-xZR8Jj8Y.js";import{S as i_}from"./secret-key-picker-BCXXdOJ-.js";import{E as ci,T as Fce}from"./tool-approvals-editor-S2UA66Hb.js";import{T as Wce}from"./timer-CShnmlWE.js";import{A as Wv}from"./arrow-right-left-J0fZSu2z.js";import{F as Fy}from"./file-output-DlS0SPnt.js";import{S as tE}from"./shield-Dy-B1VeF.js";import{I as xu}from"./info-cNcTVsFc.js";import{M as vM,R as Bce,H as Hce,L as Vce,B as OL}from"./types-tS6i07ms.js";import{S as jce}from"./scale-BnMnNt4Y.js";import{G as TQ}from"./gauge-ML2DGGDJ.js";import{D as RQ}from"./dollar-sign-HonLwnZc.js";import{H as zce}from"./handshake-foe5KMFV.js";import{E as Uce}from"./eye-off-PKiH0Asw.js";import{C as $ce}from"./cpu-zEsE2ia0.js";import{S as WP}from"./server-BMZQ8ps7.js";import{U as L5}from"./upload-D1UCHnd4.js";import{L as qce}from"./lock-CL2SzOGd.js";import{T as Kce}from"./tag-Cd1R14bi.js";/** * @license lucide-react v0.577.0 - ISC * * This source code is licensed under the ISC license. @@ -957,7 +957,7 @@ Ensure your bundler properly bundles modules referenced by "new URL('...?esm', i ${JSON.stringify(s,null,2)}`);return r.value}}async notify(e,t,i){if(!this.checkChannel(this._requestSender))throw new Error;const n=e.paramsSerializer.serializeToJson(t);zX(n),this._requestSender.sendNotification({method:e.method,params:n},i)}};function zX(o){if(o!==null&&Array.isArray(o)&&typeof o!="object")throw new Error("Invalid value! Only null, array and object is allowed.")}var UX=class Jae extends Error{constructor(e,t,i=Za.genericApplicationError){super(e),Fe(this,"data"),Fe(this,"code"),this.data=t,this.code=i,Object.setPrototypeOf(this,Jae.prototype)}},tje=class KH{constructor(e,t,i,n,s=!1){Fe(this,"method"),Fe(this,"paramsSerializer"),Fe(this,"resultSerializer"),Fe(this,"errorSerializer"),Fe(this,"isOptional"),Fe(this,"kind","request"),this.method=e,this.paramsSerializer=t,this.resultSerializer=i,this.errorSerializer=n,this.isOptional=s}withMethod(e){return new KH(e,this.paramsSerializer,this.resultSerializer,this.errorSerializer)}optional(){return new KH(this.method,this.paramsSerializer,this.resultSerializer,this.errorSerializer,!0)}},ije=class ele{constructor(e,t){Fe(this,"method"),Fe(this,"paramsSerializer"),Fe(this,"kind","notification"),this.method=e,this.paramsSerializer=t}withMethod(e){return new ele(e,this.paramsSerializer)}};function tt(o){return new tje((o||{}).method,vw.sAny(),vw.sAny(),vw.sAny())}function Gi(o){return new ije((o||{}).method,vw.sAny())}const nje=Symbol();var $X=(VX=nje,lD=class{constructor(o){Fe(this,"error"),Fe(this,VX),this.error=o}},Fe(lD,"factory",o=>new lD(o)),lD);function sje(o){const e=qX(o.server),t=qX(o.client);return new oje(o.tags||[],e,t)}function qX(o){const e={};for(const[t,i]of Object.entries(o)){const n=i.method?i.method:t;e[t]=i.withMethod(n)}return e}var oje=class tle{constructor(e=[],t,i){Fe(this,"tags"),Fe(this,"server"),Fe(this,"client"),this.tags=e,this.server=t,this.client=i}_onlyDesignTime(){return new Error("This property is not meant to be accessed at runtime")}get TContractObject(){throw this._onlyDesignTime()}get TClientInterface(){throw this._onlyDesignTime()}get TServerInterface(){throw this._onlyDesignTime()}get TClientHandler(){throw this._onlyDesignTime()}get TServerHandler(){throw this._onlyDesignTime()}get TTags(){throw this._onlyDesignTime()}getInterface(e,t,i,n){const s=this.buildCounterpart(e,i),r=this.registerHandlers(e,t,n,s);return{counterpart:s,dispose:()=>r.dispose()}}buildCounterpart(e,t){const i={};for(const[n,s]of Object.entries(t)){let r;s.kind==="request"?s.isOptional?r=async(a,l)=>{a===void 0&&(a={});try{return await e.request(s,a,l)}catch(c){if(c&&c.code===Za.methodNotFound)return Yae;throw c}}:r=(a,l)=>(a===void 0&&(a={}),e.request(s,a,l)):r=(a,l)=>(a===void 0&&(a={}),e.notify(s,a,l)),i[n]=r}return i}registerHandlers(e,t,i,n){const s=[];for(const[r,a]of Object.entries(t))if(a.kind==="request"){let l=i[r];if(!l)continue;const c=this.createRequestHandler(n,l);s.push(e.registerRequestHandler(a,c))}else{const l=i[r];l&&s.push(e.registerNotificationHandler(a,(c,d)=>{l(c,{context:d,counterpart:n})}))}return{dispose:()=>s.forEach(r=>r.dispose())}}createRequestHandler(e,t){return async(i,n,s)=>{const r=await t(i,{context:s,counterpart:e,newErr:$X.factory,requestId:n});return r instanceof $X?r.error:{ok:r}}}static getServerFromStream(e,t,i,n){const s=qH.fromTransport(t,i),{server:r}=e.getServer(s,n);return s.startListen(),{channel:s,server:r}}static registerServerToStream(e,t,i,n){const s=qH.fromTransport(t,i),{client:r}=e.registerServer(s,n);return s.startListen(),{channel:s,client:r}}getServer(e,t){const{counterpart:i,dispose:n}=this.getInterface(e,this.client,this.server,t);return{server:i,dispose:n}}registerServer(e,t){const{counterpart:i,dispose:n}=this.getInterface(e,this.server,this.client,t);return{client:i,dispose:n}}withContext(){return new tle(this.tags,this.server,this.client)}};let ww=(function(o){return o.Comment="comment",o.Imports="imports",o.Region="region",o})({}),cn=(function(o){return o[o.File=1]="File",o[o.Module=2]="Module",o[o.Namespace=3]="Namespace",o[o.Package=4]="Package",o[o.Class=5]="Class",o[o.Method=6]="Method",o[o.Property=7]="Property",o[o.Field=8]="Field",o[o.Constructor=9]="Constructor",o[o.Enum=10]="Enum",o[o.Interface=11]="Interface",o[o.Function=12]="Function",o[o.Variable=13]="Variable",o[o.Constant=14]="Constant",o[o.String=15]="String",o[o.Number=16]="Number",o[o.Boolean=17]="Boolean",o[o.Array=18]="Array",o[o.Object=19]="Object",o[o.Key=20]="Key",o[o.Null=21]="Null",o[o.EnumMember=22]="EnumMember",o[o.Struct=23]="Struct",o[o.Event=24]="Event",o[o.Operator=25]="Operator",o[o.TypeParameter=26]="TypeParameter",o})({}),ile=(function(o){return o[o.Deprecated=1]="Deprecated",o})({}),KX=(function(o){return o[o.Type=1]="Type",o[o.Parameter=2]="Parameter",o})({}),rje=(function(o){return o[o.None=0]="None",o[o.Full=1]="Full",o[o.Incremental=2]="Incremental",o})({}),_n=(function(o){return o[o.Text=1]="Text",o[o.Method=2]="Method",o[o.Function=3]="Function",o[o.Constructor=4]="Constructor",o[o.Field=5]="Field",o[o.Variable=6]="Variable",o[o.Class=7]="Class",o[o.Interface=8]="Interface",o[o.Module=9]="Module",o[o.Property=10]="Property",o[o.Unit=11]="Unit",o[o.Value=12]="Value",o[o.Enum=13]="Enum",o[o.Keyword=14]="Keyword",o[o.Snippet=15]="Snippet",o[o.Color=16]="Color",o[o.File=17]="File",o[o.Reference=18]="Reference",o[o.Folder=19]="Folder",o[o.EnumMember=20]="EnumMember",o[o.Constant=21]="Constant",o[o.Struct=22]="Struct",o[o.Event=23]="Event",o[o.Operator=24]="Operator",o[o.TypeParameter=25]="TypeParameter",o})({}),aje=(function(o){return o[o.Deprecated=1]="Deprecated",o})({}),lje=(function(o){return o[o.PlainText=1]="PlainText",o[o.Snippet=2]="Snippet",o})({}),m5=(function(o){return o[o.Text=1]="Text",o[o.Read=2]="Read",o[o.Write=3]="Write",o})({}),Pd=(function(o){return o.Empty="",o.QuickFix="quickfix",o.Refactor="refactor",o.RefactorExtract="refactor.extract",o.RefactorInline="refactor.inline",o.RefactorRewrite="refactor.rewrite",o.Source="source",o.SourceOrganizeImports="source.organizeImports",o.SourceFixAll="source.fixAll",o})({}),DT=(function(o){return o.PlainText="plaintext",o.Markdown="markdown",o})({}),_h=(function(o){return o[o.Error=1]="Error",o[o.Warning=2]="Warning",o[o.Information=3]="Information",o[o.Hint=4]="Hint",o})({}),GX=(function(o){return o[o.Unnecessary=1]="Unnecessary",o[o.Deprecated=2]="Deprecated",o})({}),JD=(function(o){return o[o.Invoked=1]="Invoked",o[o.TriggerCharacter=2]="TriggerCharacter",o[o.TriggerForIncompleteCompletions=3]="TriggerForIncompleteCompletions",o})({}),eE=(function(o){return o[o.Invoked=1]="Invoked",o[o.TriggerCharacter=2]="TriggerCharacter",o[o.ContentChange=3]="ContentChange",o})({}),GH=(function(o){return o[o.Invoked=1]="Invoked",o[o.Automatic=2]="Automatic",o})({}),cje=(function(o){return o.Relative="relative",o})({});var Dt=class{constructor(o){this.method=o}};const ft={textDocumentImplementation:new Dt("textDocument/implementation"),textDocumentTypeDefinition:new Dt("textDocument/typeDefinition"),textDocumentDocumentColor:new Dt("textDocument/documentColor"),textDocumentColorPresentation:new Dt("textDocument/colorPresentation"),textDocumentFoldingRange:new Dt("textDocument/foldingRange"),textDocumentDeclaration:new Dt("textDocument/declaration"),textDocumentSelectionRange:new Dt("textDocument/selectionRange"),textDocumentPrepareCallHierarchy:new Dt("textDocument/prepareCallHierarchy"),textDocumentSemanticTokensFull:new Dt("textDocument/semanticTokens/full"),textDocumentSemanticTokensFullDelta:new Dt("textDocument/semanticTokens/full/delta"),textDocumentLinkedEditingRange:new Dt("textDocument/linkedEditingRange"),workspaceWillCreateFiles:new Dt("workspace/willCreateFiles"),workspaceWillRenameFiles:new Dt("workspace/willRenameFiles"),workspaceWillDeleteFiles:new Dt("workspace/willDeleteFiles"),textDocumentMoniker:new Dt("textDocument/moniker"),textDocumentPrepareTypeHierarchy:new Dt("textDocument/prepareTypeHierarchy"),textDocumentInlineValue:new Dt("textDocument/inlineValue"),textDocumentInlayHint:new Dt("textDocument/inlayHint"),textDocumentDiagnostic:new Dt("textDocument/diagnostic"),textDocumentInlineCompletion:new Dt("textDocument/inlineCompletion"),textDocumentWillSaveWaitUntil:new Dt("textDocument/willSaveWaitUntil"),textDocumentCompletion:new Dt("textDocument/completion"),textDocumentHover:new Dt("textDocument/hover"),textDocumentSignatureHelp:new Dt("textDocument/signatureHelp"),textDocumentDefinition:new Dt("textDocument/definition"),textDocumentReferences:new Dt("textDocument/references"),textDocumentDocumentHighlight:new Dt("textDocument/documentHighlight"),textDocumentDocumentSymbol:new Dt("textDocument/documentSymbol"),textDocumentCodeAction:new Dt("textDocument/codeAction"),workspaceSymbol:new Dt("workspace/symbol"),textDocumentCodeLens:new Dt("textDocument/codeLens"),textDocumentDocumentLink:new Dt("textDocument/documentLink"),textDocumentFormatting:new Dt("textDocument/formatting"),textDocumentRangeFormatting:new Dt("textDocument/rangeFormatting"),textDocumentRangesFormatting:new Dt("textDocument/rangesFormatting"),textDocumentOnTypeFormatting:new Dt("textDocument/onTypeFormatting"),textDocumentRename:new Dt("textDocument/rename"),workspaceExecuteCommand:new Dt("workspace/executeCommand"),workspaceDidCreateFiles:new Dt("workspace/didCreateFiles"),workspaceDidRenameFiles:new Dt("workspace/didRenameFiles"),workspaceDidDeleteFiles:new Dt("workspace/didDeleteFiles"),workspaceDidChangeConfiguration:new Dt("workspace/didChangeConfiguration"),textDocumentDidOpen:new Dt("textDocument/didOpen"),textDocumentDidChange:new Dt("textDocument/didChange"),textDocumentDidClose:new Dt("textDocument/didClose"),textDocumentDidSave:new Dt("textDocument/didSave"),textDocumentWillSave:new Dt("textDocument/willSave"),workspaceDidChangeWatchedFiles:new Dt("workspace/didChangeWatchedFiles")},PS=sje({server:{textDocumentImplementation:tt({method:"textDocument/implementation"}),textDocumentTypeDefinition:tt({method:"textDocument/typeDefinition"}),textDocumentDocumentColor:tt({method:"textDocument/documentColor"}),textDocumentColorPresentation:tt({method:"textDocument/colorPresentation"}),textDocumentFoldingRange:tt({method:"textDocument/foldingRange"}),textDocumentDeclaration:tt({method:"textDocument/declaration"}),textDocumentSelectionRange:tt({method:"textDocument/selectionRange"}),textDocumentPrepareCallHierarchy:tt({method:"textDocument/prepareCallHierarchy"}),callHierarchyIncomingCalls:tt({method:"callHierarchy/incomingCalls"}),callHierarchyOutgoingCalls:tt({method:"callHierarchy/outgoingCalls"}),textDocumentSemanticTokensFull:tt({method:"textDocument/semanticTokens/full"}),textDocumentSemanticTokensFullDelta:tt({method:"textDocument/semanticTokens/full/delta"}),textDocumentSemanticTokensRange:tt({method:"textDocument/semanticTokens/range"}),textDocumentLinkedEditingRange:tt({method:"textDocument/linkedEditingRange"}),workspaceWillCreateFiles:tt({method:"workspace/willCreateFiles"}),workspaceWillRenameFiles:tt({method:"workspace/willRenameFiles"}),workspaceWillDeleteFiles:tt({method:"workspace/willDeleteFiles"}),textDocumentMoniker:tt({method:"textDocument/moniker"}),textDocumentPrepareTypeHierarchy:tt({method:"textDocument/prepareTypeHierarchy"}),typeHierarchySupertypes:tt({method:"typeHierarchy/supertypes"}),typeHierarchySubtypes:tt({method:"typeHierarchy/subtypes"}),textDocumentInlineValue:tt({method:"textDocument/inlineValue"}),textDocumentInlayHint:tt({method:"textDocument/inlayHint"}),inlayHintResolve:tt({method:"inlayHint/resolve"}),textDocumentDiagnostic:tt({method:"textDocument/diagnostic"}),workspaceDiagnostic:tt({method:"workspace/diagnostic"}),textDocumentInlineCompletion:tt({method:"textDocument/inlineCompletion"}),initialize:tt({method:"initialize"}),shutdown:tt({method:"shutdown"}),textDocumentWillSaveWaitUntil:tt({method:"textDocument/willSaveWaitUntil"}),textDocumentCompletion:tt({method:"textDocument/completion"}),completionItemResolve:tt({method:"completionItem/resolve"}),textDocumentHover:tt({method:"textDocument/hover"}),textDocumentSignatureHelp:tt({method:"textDocument/signatureHelp"}),textDocumentDefinition:tt({method:"textDocument/definition"}),textDocumentReferences:tt({method:"textDocument/references"}),textDocumentDocumentHighlight:tt({method:"textDocument/documentHighlight"}),textDocumentDocumentSymbol:tt({method:"textDocument/documentSymbol"}),textDocumentCodeAction:tt({method:"textDocument/codeAction"}),codeActionResolve:tt({method:"codeAction/resolve"}),workspaceSymbol:tt({method:"workspace/symbol"}),workspaceSymbolResolve:tt({method:"workspaceSymbol/resolve"}),textDocumentCodeLens:tt({method:"textDocument/codeLens"}),codeLensResolve:tt({method:"codeLens/resolve"}),textDocumentDocumentLink:tt({method:"textDocument/documentLink"}),documentLinkResolve:tt({method:"documentLink/resolve"}),textDocumentFormatting:tt({method:"textDocument/formatting"}),textDocumentRangeFormatting:tt({method:"textDocument/rangeFormatting"}),textDocumentRangesFormatting:tt({method:"textDocument/rangesFormatting"}),textDocumentOnTypeFormatting:tt({method:"textDocument/onTypeFormatting"}),textDocumentRename:tt({method:"textDocument/rename"}),textDocumentPrepareRename:tt({method:"textDocument/prepareRename"}),workspaceExecuteCommand:tt({method:"workspace/executeCommand"}),workspaceDidChangeWorkspaceFolders:Gi({method:"workspace/didChangeWorkspaceFolders"}),windowWorkDoneProgressCancel:Gi({method:"window/workDoneProgress/cancel"}),workspaceDidCreateFiles:Gi({method:"workspace/didCreateFiles"}),workspaceDidRenameFiles:Gi({method:"workspace/didRenameFiles"}),workspaceDidDeleteFiles:Gi({method:"workspace/didDeleteFiles"}),notebookDocumentDidOpen:Gi({method:"notebookDocument/didOpen"}),notebookDocumentDidChange:Gi({method:"notebookDocument/didChange"}),notebookDocumentDidSave:Gi({method:"notebookDocument/didSave"}),notebookDocumentDidClose:Gi({method:"notebookDocument/didClose"}),initialized:Gi({method:"initialized"}),exit:Gi({method:"exit"}),workspaceDidChangeConfiguration:Gi({method:"workspace/didChangeConfiguration"}),textDocumentDidOpen:Gi({method:"textDocument/didOpen"}),textDocumentDidChange:Gi({method:"textDocument/didChange"}),textDocumentDidClose:Gi({method:"textDocument/didClose"}),textDocumentDidSave:Gi({method:"textDocument/didSave"}),textDocumentWillSave:Gi({method:"textDocument/willSave"}),workspaceDidChangeWatchedFiles:Gi({method:"workspace/didChangeWatchedFiles"}),setTrace:Gi({method:"$/setTrace"}),cancelRequest:Gi({method:"$/cancelRequest"}),progress:Gi({method:"$/progress"})},client:{workspaceWorkspaceFolders:tt({method:"workspace/workspaceFolders"}).optional(),workspaceConfiguration:tt({method:"workspace/configuration"}).optional(),workspaceFoldingRangeRefresh:tt({method:"workspace/foldingRange/refresh"}).optional(),windowWorkDoneProgressCreate:tt({method:"window/workDoneProgress/create"}).optional(),workspaceSemanticTokensRefresh:tt({method:"workspace/semanticTokens/refresh"}).optional(),windowShowDocument:tt({method:"window/showDocument"}).optional(),workspaceInlineValueRefresh:tt({method:"workspace/inlineValue/refresh"}).optional(),workspaceInlayHintRefresh:tt({method:"workspace/inlayHint/refresh"}).optional(),workspaceDiagnosticRefresh:tt({method:"workspace/diagnostic/refresh"}).optional(),clientRegisterCapability:tt({method:"client/registerCapability"}).optional(),clientUnregisterCapability:tt({method:"client/unregisterCapability"}).optional(),windowShowMessageRequest:tt({method:"window/showMessageRequest"}).optional(),workspaceCodeLensRefresh:tt({method:"workspace/codeLens/refresh"}).optional(),workspaceApplyEdit:tt({method:"workspace/applyEdit"}).optional(),windowShowMessage:Gi({method:"window/showMessage"}),windowLogMessage:Gi({method:"window/logMessage"}),telemetryEvent:Gi({method:"telemetry/event"}),textDocumentPublishDiagnostics:Gi({method:"textDocument/publishDiagnostics"}),logTrace:Gi({method:"$/logTrace"}),cancelRequest:Gi({method:"$/cancelRequest"}),progress:Gi({method:"$/progress"})}});function tm(o,e){if(o.textModel!==e)throw new Error(`Expected text model to be ${e}, but got ${o.textModel}`);return o}var mn=(f5=class{constructor(){Fe(this,"_store",new uz)}dispose(){this._store.dispose()}_register(o){if(o===this)throw new Error("Cannot register a disposable on itself!");return this._store.add(o)}},Fe(f5,"None",Object.freeze({dispose(){}})),f5),uz=(cD=class{constructor(){Fe(this,"_toDispose",new Set),Fe(this,"_isDisposed",!1)}dispose(){this._isDisposed||(this._isDisposed=!0,this.clear())}clear(){if(this._toDispose.size!==0)try{for(const o of this._toDispose)o.dispose()}finally{this._toDispose.clear()}}add(o){if(!o)return o;if(o===this)throw new Error("Cannot register a disposable on itself!");return this._isDisposed?cD.DISABLE_DISPOSED_WARNING||console.warn(new Error("Trying to add a disposable to a DisposableStore that has already been disposed of. The added object will be leaked!").stack):this._toDispose.add(o),o}},Fe(cD,"DISABLE_DISPOSED_WARNING",!1),cD);const nle=new Map([[Pd.Empty,""],[Pd.QuickFix,"quickfix"],[Pd.Refactor,"refactor"],[Pd.RefactorExtract,"refactor.extract"],[Pd.RefactorInline,"refactor.inline"],[Pd.RefactorRewrite,"refactor.rewrite"],[Pd.Source,"source"],[Pd.SourceOrganizeImports,"source.organizeImports"],[Pd.SourceFixAll,"source.fixAll"]]);function dje(o){if(o)return nle.get(o)??o}const hje=new Map([[ye.CodeActionTriggerType.Invoke,GH.Invoked],[ye.CodeActionTriggerType.Auto,GH.Automatic]]);function uje(o){return hje.get(o)??GH.Invoked}const sle=new Map([[_n.Text,ye.CompletionItemKind.Text],[_n.Method,ye.CompletionItemKind.Method],[_n.Function,ye.CompletionItemKind.Function],[_n.Constructor,ye.CompletionItemKind.Constructor],[_n.Field,ye.CompletionItemKind.Field],[_n.Variable,ye.CompletionItemKind.Variable],[_n.Class,ye.CompletionItemKind.Class],[_n.Interface,ye.CompletionItemKind.Interface],[_n.Module,ye.CompletionItemKind.Module],[_n.Property,ye.CompletionItemKind.Property],[_n.Unit,ye.CompletionItemKind.Unit],[_n.Value,ye.CompletionItemKind.Value],[_n.Enum,ye.CompletionItemKind.Enum],[_n.Keyword,ye.CompletionItemKind.Keyword],[_n.Snippet,ye.CompletionItemKind.Snippet],[_n.Color,ye.CompletionItemKind.Color],[_n.File,ye.CompletionItemKind.File],[_n.Reference,ye.CompletionItemKind.Reference],[_n.Folder,ye.CompletionItemKind.Folder],[_n.EnumMember,ye.CompletionItemKind.EnumMember],[_n.Constant,ye.CompletionItemKind.Constant],[_n.Struct,ye.CompletionItemKind.Struct],[_n.Event,ye.CompletionItemKind.Event],[_n.Operator,ye.CompletionItemKind.Operator],[_n.TypeParameter,ye.CompletionItemKind.TypeParameter]]);function gje(o){return o?sle.get(o)??ye.CompletionItemKind.Text:ye.CompletionItemKind.Text}const ole=new Map([[aje.Deprecated,ye.CompletionItemTag.Deprecated]]);function fje(o){return ole.get(o)}const pje=new Map([[ye.CompletionTriggerKind.Invoke,JD.Invoked],[ye.CompletionTriggerKind.TriggerCharacter,JD.TriggerCharacter],[ye.CompletionTriggerKind.TriggerForIncompleteCompletions,JD.TriggerForIncompleteCompletions]]);function mje(o){return pje.get(o)??JD.Invoked}const _je=new Map([[lje.Snippet,ye.CompletionItemInsertTextRule.InsertAsSnippet]]);function bje(o){if(o)return _je.get(o)}const rle=new Map([[cn.File,ye.SymbolKind.File],[cn.Module,ye.SymbolKind.Module],[cn.Namespace,ye.SymbolKind.Namespace],[cn.Package,ye.SymbolKind.Package],[cn.Class,ye.SymbolKind.Class],[cn.Method,ye.SymbolKind.Method],[cn.Property,ye.SymbolKind.Property],[cn.Field,ye.SymbolKind.Field],[cn.Constructor,ye.SymbolKind.Constructor],[cn.Enum,ye.SymbolKind.Enum],[cn.Interface,ye.SymbolKind.Interface],[cn.Function,ye.SymbolKind.Function],[cn.Variable,ye.SymbolKind.Variable],[cn.Constant,ye.SymbolKind.Constant],[cn.String,ye.SymbolKind.String],[cn.Number,ye.SymbolKind.Number],[cn.Boolean,ye.SymbolKind.Boolean],[cn.Array,ye.SymbolKind.Array],[cn.Object,ye.SymbolKind.Object],[cn.Key,ye.SymbolKind.Key],[cn.Null,ye.SymbolKind.Null],[cn.EnumMember,ye.SymbolKind.EnumMember],[cn.Struct,ye.SymbolKind.Struct],[cn.Event,ye.SymbolKind.Event],[cn.Operator,ye.SymbolKind.Operator],[cn.TypeParameter,ye.SymbolKind.TypeParameter]]);function ale(o){return rle.get(o)??ye.SymbolKind.File}const vje=new Map([[ile.Deprecated,ye.SymbolTag.Deprecated]]);function lle(o){return vje.get(o)}const wje=new Map([[m5.Text,ye.DocumentHighlightKind.Text],[m5.Read,ye.DocumentHighlightKind.Read],[m5.Write,ye.DocumentHighlightKind.Write]]);function Cje(o){return o?wje.get(o)??ye.DocumentHighlightKind.Text:ye.DocumentHighlightKind.Text}const yje=new Map([[ww.Comment,ye.FoldingRangeKind.Comment],[ww.Imports,ye.FoldingRangeKind.Imports],[ww.Region,ye.FoldingRangeKind.Region]]);function xje(o){if(o)return yje.get(o)}const Sje=new Map([[jl.Error,_h.Error],[jl.Warning,_h.Warning],[jl.Info,_h.Information],[jl.Hint,_h.Hint]]);function Lje(o){return Sje.get(o)??_h.Error}const kje=new Map([[_h.Error,jl.Error],[_h.Warning,jl.Warning],[_h.Information,jl.Info],[_h.Hint,jl.Hint]]);function Dje(o){return o?kje.get(o)??jl.Error:jl.Error}const cle=new Map([[GX.Unnecessary,$H.Unnecessary],[GX.Deprecated,$H.Deprecated]]);function Eje(o){return cle.get(o)}const Ije=new Map([[ye.SignatureHelpTriggerKind.Invoke,eE.Invoked],[ye.SignatureHelpTriggerKind.TriggerCharacter,eE.TriggerCharacter],[ye.SignatureHelpTriggerKind.ContentChange,eE.ContentChange]]);function Nje(o){return Ije.get(o)??eE.Invoked}function Cw(o){if(o)return{id:o.command,title:o.title,arguments:o.arguments}}const Tje=new Map([[KX.Type,ye.InlayHintKind.Type],[KX.Parameter,ye.InlayHintKind.Parameter]]);function Rje(o){return o?Tje.get(o)??ye.InlayHintKind.Type:ye.InlayHintKind.Type}function sf(o,e){if("targetUri"in o){const t=e.bridge.translateBackRange({uri:o.targetUri},o.targetRange);return{uri:t.textModel.uri,range:t.range,originSelectionRange:o.originSelectionRange?e.bridge.translateBackRange({uri:o.targetUri},o.originSelectionRange).range:void 0,targetSelectionRange:o.targetSelectionRange?e.bridge.translateBackRange({uri:o.targetUri},o.targetSelectionRange).range:void 0}}else{const t=e.bridge.translateBackRange({uri:o.uri},o.range);return{uri:t.textModel.uri,range:t.range}}}function ss(o){return!o||o.length===0?{language:"*"}:o.map(e=>"notebook"in e?typeof e.notebook=="string"?{notebookType:e.notebook,language:e.language}:{notebookType:e.notebook.notebookType,language:e.language,pattern:e.notebook.pattern,scheme:e.notebook.scheme}:{language:e.language,pattern:e.pattern,scheme:e.scheme})}function Mje(o,e){if(!e)return!0;const t=o.getLanguageId();if(o.uri.toString(!0),!e||e.length===0)return!0;for(const i of e)if(!(i.language&&i.language!=="*"&&i.language!==t))return!0;return!1}function ZH(o){var t;const e={severity:Dje(o.severity),startLineNumber:o.range.start.line+1,startColumn:o.range.start.character+1,endLineNumber:o.range.end.line+1,endColumn:o.range.end.character+1,message:o.message,source:o.source,code:typeof o.code=="string"?o.code:(t=o.code)==null?void 0:t.toString()};return o.tags&&(e.tags=o.tags.map(i=>Eje(i)).filter(i=>i!==void 0)),o.relatedInformation&&(e.relatedInformation=o.relatedInformation.map(i=>({resource:dz.parse(i.location.uri),startLineNumber:i.location.range.start.line+1,startColumn:i.location.range.start.character+1,endLineNumber:i.location.range.end.line+1,endColumn:i.location.range.end.character+1,message:i.message}))),e}var Pje=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{completion:{dynamicRegistration:!0,contextSupport:!0,completionItemKind:{valueSet:Array.from(sle.keys())},completionItem:{tagSupport:{valueSet:Array.from(ole.keys())},commitCharactersSupport:!0,deprecatedSupport:!0,preselectSupport:!0}}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentCompletion,!0,e=>ye.registerCompletionItemProvider(ss(e.documentSelector),new Aje(this._connection,e))))}},Aje=class{constructor(o,e){Fe(this,"resolveCompletionItem"),this._client=o,this._capabilities=e,e.resolveProvider&&(this.resolveCompletionItem=async(t,i)=>(dle(t,await this._client.server.completionItemResolve(t._lspItem),this._client.bridge,t._translated,t._model),t))}get triggerCharacters(){return this._capabilities.triggerCharacters}async provideCompletionItems(o,e,t,i){const n=this._client.bridge.translate(o,e),s=await this._client.server.textDocumentCompletion({textDocument:n.textDocument,position:n.position,context:t.triggerCharacter?{triggerKind:mje(t.triggerKind),triggerCharacter:t.triggerCharacter}:void 0});return s?{suggestions:(Array.isArray(s)?s:s.items).map(r=>({...Oje(r,this._client.bridge,n,o,e),_lspItem:r,_translated:n,_model:o}))}:{suggestions:[]}}};function Oje(o,e,t,i,n){let s=o.insertText||o.label,r;o.textEdit&&("range"in o.textEdit?(s=o.textEdit.newText,r=tm(e.translateBackRange(t.textDocument,o.textEdit.range),i).range):(s=o.textEdit.newText,r={insert:tm(e.translateBackRange(t.textDocument,o.textEdit.insert),i).range,replace:tm(e.translateBackRange(t.textDocument,o.textEdit.replace),i).range})),r||(r=DL.fromPositions(n,n));const a={label:o.label,kind:gje(o.kind),insertText:s,sortText:o.sortText,filterText:o.filterText,preselect:o.preselect,commitCharacters:o.commitCharacters,range:r};return dle(a,o,e,t,i),a}function dle(o,e,t,i,n){e.detail!==void 0&&(o.detail=e.detail),e.documentation!==void 0&&(o.documentation=Fje(e.documentation)),e.insertTextFormat!==void 0&&(o.insertTextRules=bje(e.insertTextFormat)),e.tags&&e.tags.length>0&&(o.tags=e.tags.map(fje).filter(s=>s!==void 0)),e.additionalTextEdits&&e.additionalTextEdits.length>0&&(o.additionalTextEdits=e.additionalTextEdits.map(s=>({range:tm(t.translateBackRange(i.textDocument,s.range),n).range,text:s.newText}))),e.command&&(o.command=Cw(e.command))}function Fje(o){if(o)return typeof o=="string"?o:{value:o.value}}var Wje=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{hover:{dynamicRegistration:!0,contentFormat:[DT.Markdown,DT.PlainText]}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentHover,!0,e=>ye.registerHoverProvider(ss(e.documentSelector),new Bje(this._connection,e))))}},Bje=class{constructor(o,e){this._client=o,this._capabilities=e}async provideHover(o,e,t){const i=this._client.bridge.translate(o,e),n=await this._client.server.textDocumentHover({textDocument:i.textDocument,position:i.position});return!n||!n.contents?null:{contents:Hje(n.contents),range:n.range?this._client.bridge.translateBackRange(i.textDocument,n.range).range:void 0}}};function Hje(o){return Array.isArray(o)?o.map(e=>ZX(e)):[ZX(o)]}function ZX(o){return typeof o=="string"?{value:o}:"kind"in o?{value:o.value}:{value:`\`\`\`${o.language} ${o.value} -\`\`\``}}var Vje=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{signatureHelp:{dynamicRegistration:!0,contextSupport:!0,signatureInformation:{documentationFormat:[DT.Markdown,DT.PlainText],parameterInformation:{labelOffsetSupport:!0},activeParameterSupport:!0}}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentSignatureHelp,!0,e=>ye.registerSignatureHelpProvider(ss(e.documentSelector),new jje(this._connection,e))))}},jje=class{constructor(o,e){Fe(this,"signatureHelpTriggerCharacters"),Fe(this,"signatureHelpRetriggerCharacters"),this._client=o,this._capabilities=e,this.signatureHelpTriggerCharacters=e.triggerCharacters,this.signatureHelpRetriggerCharacters=e.retriggerCharacters}async provideSignatureHelp(o,e,t,i){const n=this._client.bridge.translate(o,e),s=await this._client.server.textDocumentSignatureHelp({textDocument:n.textDocument,position:n.position,context:{triggerKind:Nje(i.triggerKind),triggerCharacter:i.triggerCharacter,isRetrigger:i.isRetrigger}});return s?{value:{signatures:s.signatures.map(r=>{var a;return{label:r.label,documentation:YX(r.documentation),parameters:((a=r.parameters)==null?void 0:a.map(l=>({label:l.label,documentation:YX(l.documentation)})))||[],activeParameter:r.activeParameter}}),activeSignature:s.activeSignature||0,activeParameter:s.activeParameter||0},dispose:()=>{}}:null}};function YX(o){if(o)return typeof o=="string"?o:{value:o.value}}var zje=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{definition:{dynamicRegistration:!0,linkSupport:!0}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentDefinition,!0,e=>ye.registerDefinitionProvider(ss(e.documentSelector),new Uje(this._connection,e))))}},Uje=class{constructor(o,e){this._client=o,this._capabilities=e}async provideDefinition(o,e,t){const i=this._client.bridge.translate(o,e),n=await this._client.server.textDocumentDefinition({textDocument:i.textDocument,position:i.position});return n?Array.isArray(n)?n.map(s=>sf(s,this._client)):sf(n,this._client):null}},$je=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{declaration:{dynamicRegistration:!0,linkSupport:!0}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentDeclaration,!0,e=>ye.registerDeclarationProvider(ss(e.documentSelector),new qje(this._connection,e))))}},qje=class{constructor(o,e){this._client=o,this._capabilities=e}async provideDeclaration(o,e,t){const i=this._client.bridge.translate(o,e),n=await this._client.server.textDocumentDeclaration({textDocument:i.textDocument,position:i.position});return n?Array.isArray(n)?n.map(s=>sf(s,this._client)):sf(n,this._client):null}},Kje=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{typeDefinition:{dynamicRegistration:!0,linkSupport:!0}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentTypeDefinition,!0,e=>ye.registerTypeDefinitionProvider(ss(e.documentSelector),new Gje(this._connection,e))))}},Gje=class{constructor(o,e){this._client=o,this._capabilities=e}async provideTypeDefinition(o,e,t){const i=this._client.bridge.translate(o,e),n=await this._client.server.textDocumentTypeDefinition({textDocument:i.textDocument,position:i.position});return n?Array.isArray(n)?n.map(s=>sf(s,this._client)):sf(n,this._client):null}},Zje=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{implementation:{dynamicRegistration:!0,linkSupport:!0}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentImplementation,!0,e=>ye.registerImplementationProvider(ss(e.documentSelector),new Yje(this._connection,e))))}},Yje=class{constructor(o,e){this._client=o,this._capabilities=e}async provideImplementation(o,e,t){const i=this._client.bridge.translate(o,e),n=await this._client.server.textDocumentImplementation({textDocument:i.textDocument,position:i.position});return n?Array.isArray(n)?n.map(s=>sf(s,this._client)):sf(n,this._client):null}},Xje=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{references:{dynamicRegistration:!0}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentReferences,!0,e=>ye.registerReferenceProvider(ss(e.documentSelector),new Qje(this._connection,e))))}},Qje=class{constructor(o,e){this._client=o,this._capabilities=e}async provideReferences(o,e,t,i){const n=this._client.bridge.translate(o,e),s=await this._client.server.textDocumentReferences({textDocument:n.textDocument,position:n.position,context:{includeDeclaration:t.includeDeclaration}});return s?s.map(r=>{const a=this._client.bridge.translateBackRange({uri:r.uri},r.range);return{uri:a.textModel.uri,range:a.range}}):null}},Jje=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{documentHighlight:{dynamicRegistration:!0}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentDocumentHighlight,!0,e=>ye.registerDocumentHighlightProvider(ss(e.documentSelector),new eze(this._connection,e))))}},eze=class{constructor(o,e){this._client=o,this._capabilities=e}async provideDocumentHighlights(o,e,t){const i=this._client.bridge.translate(o,e),n=await this._client.server.textDocumentDocumentHighlight({textDocument:i.textDocument,position:i.position});return n?n.map(s=>({range:this._client.bridge.translateBackRange(i.textDocument,s.range).range,kind:Cje(s.kind)})):null}},tze=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{documentSymbol:{dynamicRegistration:!0,hierarchicalDocumentSymbolSupport:!0,symbolKind:{valueSet:Array.from(rle.keys())},tagSupport:{valueSet:[ile.Deprecated]}}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentDocumentSymbol,!0,e=>ye.registerDocumentSymbolProvider(ss(e.documentSelector),new ize(this._connection,e))))}},ize=class{constructor(o,e){this._client=o,this._capabilities=e}async provideDocumentSymbols(o,e){const t=this._client.bridge.translate(o,new bf(1,1)),i=await this._client.server.textDocumentDocumentSymbol({textDocument:t.textDocument});return i?Array.isArray(i)&&i.length>0?"location"in i[0]?i.map(n=>nze(n,this._client)):i.map(n=>hle(n,this._client,t.textDocument)):[]:null}};function hle(o,e,t){var i,n;return{name:o.name,detail:o.detail||"",kind:ale(o.kind),tags:((i=o.tags)==null?void 0:i.map(s=>lle(s)).filter(s=>s!==void 0))||[],range:e.bridge.translateBackRange(t,o.range).range,selectionRange:e.bridge.translateBackRange(t,o.selectionRange).range,children:((n=o.children)==null?void 0:n.map(s=>hle(s,e,t)))||[]}}function nze(o,e){var t;return{name:o.name,detail:"",kind:ale(o.kind),tags:((t=o.tags)==null?void 0:t.map(i=>lle(i)).filter(i=>i!==void 0))||[],range:e.bridge.translateBackRange({uri:o.location.uri},o.location.range).range,selectionRange:e.bridge.translateBackRange({uri:o.location.uri},o.location.range).range,children:[]}}var sze=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{rename:{dynamicRegistration:!0,prepareSupport:!0}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentRename,!0,e=>ye.registerRenameProvider(ss(e.documentSelector),new oze(this._connection,e))))}},oze=class{constructor(o,e){this._client=o,this._capabilities=e}async provideRenameEdits(o,e,t,i){const n=this._client.bridge.translate(o,e),s=await this._client.server.textDocumentRename({textDocument:n.textDocument,position:n.position,newName:t});return s?rze(s,this._client):null}async resolveRenameLocation(o,e,t){if(!this._capabilities.prepareProvider)return null;const i=this._client.bridge.translate(o,e),n=await this._client.server.textDocumentPrepareRename({textDocument:i.textDocument,position:i.position});if(!n)return null;if("range"in n&&"placeholder"in n)return{range:this._client.bridge.translateBackRange(i.textDocument,n.range).range,text:n.placeholder};if("defaultBehavior"in n)return null;if("start"in n&&"end"in n){const s=this._client.bridge.translateBackRange(i.textDocument,n).range;return{range:s,text:o.getValueInRange(s)}}return null}};function rze(o,e){const t=[];if(o.changes)for(const i in o.changes){const n=o.changes[i];for(const s of n){const r=e.bridge.translateBackRange({uri:i},s.range);t.push({resource:r.textModel.uri,versionId:void 0,textEdit:{range:r.range,text:s.newText}})}}if(o.documentChanges){for(const i of o.documentChanges)if("textDocument"in i){const n=i.textDocument.uri;for(const s of i.edits){const r=e.bridge.translateBackRange({uri:n},s.range);t.push({resource:r.textModel.uri,versionId:i.textDocument.version,textEdit:{range:r.range,text:s.newText}})}}}return{edits:t}}var aze=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{codeAction:{dynamicRegistration:!0,codeActionLiteralSupport:{codeActionKind:{valueSet:Array.from(nle.keys())}},isPreferredSupport:!0,disabledSupport:!0,dataSupport:!0,resolveSupport:{properties:["edit"]}}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentCodeAction,!0,e=>ye.registerCodeActionProvider(ss(e.documentSelector),new lze(this._connection,e))))}},lze=class{constructor(o,e){Fe(this,"resolveCodeAction"),this._client=o,this._capabilities=e,e.resolveProvider&&(this.resolveCodeAction=async(t,i)=>{if(t._lspAction){const n=await this._client.server.codeActionResolve(t._lspAction);n.edit&&(t.edit=XX(n.edit,this._client)),n.command&&(t.command=Cw(n.command))}return t})}async provideCodeActions(o,e,t,i){const n=this._client.bridge.translate(o,e.getStartPosition()),s=await this._client.server.textDocumentCodeAction({textDocument:n.textDocument,range:this._client.bridge.translateRange(o,e),context:{diagnostics:t.markers.map(r=>({range:this._client.bridge.translateRange(o,DL.lift(r)),message:r.message,severity:Lje(r.severity)})),triggerKind:uje(t.trigger)}});return s?{actions:(Array.isArray(s)?s:[s]).map(r=>{var a;if("title"in r&&!("kind"in r)){const l=r;return{title:l.title,command:Cw(l)}}else{const l=r;return{title:l.title,kind:dje(l.kind),isPreferred:l.isPreferred,disabled:(a=l.disabled)==null?void 0:a.reason,edit:l.edit?XX(l.edit,this._client):void 0,command:Cw(l.command),_lspAction:l}}}),dispose:()=>{}}:null}};function XX(o,e){const t=[];if(o.changes)for(const i in o.changes){const n=o.changes[i];for(const s of n){const r=e.bridge.translateBackRange({uri:i},s.range);t.push({resource:r.textModel.uri,versionId:void 0,textEdit:{range:r.range,text:s.newText}})}}if(o.documentChanges){for(const i of o.documentChanges)if("textDocument"in i){const n=i.textDocument.uri;for(const s of i.edits){const r=e.bridge.translateBackRange({uri:n},s.range);t.push({resource:r.textModel.uri,versionId:i.textDocument.version??void 0,textEdit:{range:r.range,text:s.newText}})}}}return{edits:t}}var cze=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{codeLens:{dynamicRegistration:!0}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentCodeLens,!0,e=>ye.registerCodeLensProvider(ss(e.documentSelector),new dze(this._connection,e))))}},dze=class{constructor(o,e){this._client=o,this._capabilities=e}async provideCodeLenses(o,e){const t=this._client.bridge.translate(o,new bf(1,1)),i=await this._client.server.textDocumentCodeLens({textDocument:t.textDocument});return i?{lenses:i.map(n=>({range:tm(this._client.bridge.translateBackRange(t.textDocument,n.range),o).range,command:Cw(n.command),_lspCodeLens:n})),dispose:()=>{}}:null}async resolveCodeLens(o,e,t){if(!this._capabilities.resolveProvider||!e._lspCodeLens)return e;const i=await this._client.server.codeLensResolve(e._lspCodeLens);return i.command&&(e.command={id:i.command.command,title:i.command.title,arguments:i.command.arguments}),e}},hze=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{documentLink:{dynamicRegistration:!0,tooltipSupport:!0}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentDocumentLink,!0,e=>ye.registerLinkProvider(ss(e.documentSelector),new uze(this._connection,e))))}},uze=class{constructor(o,e){this._client=o,this._capabilities=e}async provideLinks(o,e){const t=this._client.bridge.translate(o,new bf(1,1)),i=await this._client.server.textDocumentDocumentLink({textDocument:t.textDocument});return i?{links:i.map(n=>({range:this._client.bridge.translateBackRange(t.textDocument,n.range).range,url:n.target,tooltip:n.tooltip}))}:null}async resolveLink(o,e){return this._capabilities.resolveProvider,o}},gze=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{formatting:{dynamicRegistration:!0}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentFormatting,!0,e=>ye.registerDocumentFormattingEditProvider(ss(e.documentSelector),new fze(this._connection,e))))}},fze=class{constructor(o,e){this._client=o,this._capabilities=e}async provideDocumentFormattingEdits(o,e,t){const i=this._client.bridge.translate(o,new bf(1,1)),n=await this._client.server.textDocumentFormatting({textDocument:i.textDocument,options:{tabSize:e.tabSize,insertSpaces:e.insertSpaces}});return n?n.map(s=>({range:this._client.bridge.translateBackRange(i.textDocument,s.range).range,text:s.newText})):null}},pze=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{rangeFormatting:{dynamicRegistration:!0}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentRangeFormatting,!0,e=>ye.registerDocumentRangeFormattingEditProvider(ss(e.documentSelector),new mze(this._connection,e))))}},mze=class{constructor(o,e){this._client=o,this._capabilities=e}async provideDocumentRangeFormattingEdits(o,e,t,i){const n=this._client.bridge.translate(o,e.getStartPosition()),s=await this._client.server.textDocumentRangeFormatting({textDocument:n.textDocument,range:this._client.bridge.translateRange(o,e),options:{tabSize:t.tabSize,insertSpaces:t.insertSpaces}});return s?s.map(r=>({range:this._client.bridge.translateBackRange(n.textDocument,r.range).range,text:r.newText})):null}},_ze=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{onTypeFormatting:{dynamicRegistration:!0}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentOnTypeFormatting,!0,e=>ye.registerOnTypeFormattingEditProvider(ss(e.documentSelector),new bze(this._connection,e))))}},bze=class{constructor(o,e){Fe(this,"autoFormatTriggerCharacters"),this._client=o,this._capabilities=e,this.autoFormatTriggerCharacters=[e.firstTriggerCharacter,...e.moreTriggerCharacter||[]]}async provideOnTypeFormattingEdits(o,e,t,i,n){const s=this._client.bridge.translate(o,e),r=await this._client.server.textDocumentOnTypeFormatting({textDocument:s.textDocument,position:s.position,ch:t,options:{tabSize:i.tabSize,insertSpaces:i.insertSpaces}});return r?r.map(a=>({range:this._client.bridge.translateBackRange(s.textDocument,a.range).range,text:a.newText})):null}},vze=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{foldingRange:{dynamicRegistration:!0,rangeLimit:5e3,lineFoldingOnly:!1,foldingRangeKind:{valueSet:[ww.Comment,ww.Imports,ww.Region]}}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentFoldingRange,!0,e=>ye.registerFoldingRangeProvider(ss(e.documentSelector),new wze(this._connection,e))))}},wze=class{constructor(o,e){this._client=o,this._capabilities=e}async provideFoldingRanges(o,e,t){const i=this._client.bridge.translate(o,new bf(1,1)),n=await this._client.server.textDocumentFoldingRange({textDocument:i.textDocument});return n?n.map(s=>({start:s.startLine+1,end:s.endLine+1,kind:xje(s.kind)})):null}},Cze=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{selectionRange:{dynamicRegistration:!0}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentSelectionRange,!0,e=>ye.registerSelectionRangeProvider(ss(e.documentSelector),new yze(this._connection,e))))}},yze=class{constructor(o,e){this._client=o,this._capabilities=e}async provideSelectionRanges(o,e,t){const i=this._client.bridge.translate(o,e[0]),n=await this._client.server.textDocumentSelectionRange({textDocument:i.textDocument,positions:e.map(s=>this._client.bridge.translate(o,s).position)});return n?n.map(s=>this.convertSelectionRange(s,i.textDocument)):null}convertSelectionRange(o,e){const t=[];let i=o;for(;i;)t.push({range:this._client.bridge.translateBackRange(e,i.range).range}),i=i.parent;return t}},xze=class extends mn{constructor(o){super(),Fe(this,"_providers",new Set),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{inlayHint:{dynamicRegistration:!0,resolveSupport:{properties:["tooltip","textEdits","label.tooltip","label.location","label.command"]}}},workspace:{inlayHint:{refreshSupport:!0}}})),this._register(this._connection.connection.registerRequestHandler(PS.client.workspaceInlayHintRefresh,async()=>{for(const e of this._providers)e.refresh();return{ok:null}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentInlayHint,!0,e=>{const t=new Sze(this._connection,e);this._providers.add(t);const i=ye.registerInlayHintsProvider(ss(e.documentSelector),t);return{dispose:()=>{this._providers.delete(t),i.dispose()}}}))}},Sze=class{constructor(o,e){Fe(this,"_onDidChangeInlayHints",new H_),Fe(this,"onDidChangeInlayHints",this._onDidChangeInlayHints.event),Fe(this,"resolveInlayHint"),this._client=o,this._capabilities=e,e.resolveProvider&&(this.resolveInlayHint=async(t,i)=>{const n=await this._client.server.inlayHintResolve(t._lspInlayHint);return n.tooltip&&(t.tooltip=YH(n.tooltip)),n.label!==t._lspInlayHint.label&&(t.label=QX(n.label)),n.textEdits&&(t.textEdits=n.textEdits.map(s=>({range:this._client.bridge.translateBackRange({uri:t._targetUri},s.range).range,text:s.newText}))),t})}refresh(){this._onDidChangeInlayHints.fire()}async provideInlayHints(o,e,t){const i=this._client.bridge.translate(o,e.getStartPosition()),n=await Lze(async()=>await this._client.server.textDocumentInlayHint({textDocument:i.textDocument,range:this._client.bridge.translateRange(o,e)}));return n?{hints:n.map(s=>{var r;return{label:QX(s.label),position:tm(this._client.bridge.translateBack(i.textDocument,s.position),o).position,kind:Rje(s.kind),tooltip:YH(s.tooltip),paddingLeft:s.paddingLeft,paddingRight:s.paddingRight,textEdits:(r=s.textEdits)==null?void 0:r.map(a=>({range:tm(this._client.bridge.translateBackRange(i.textDocument,a.range),o).range,text:a.newText})),_lspInlayHint:s,_targetUri:i.textDocument.uri}}),dispose:()=>{}}:null}};async function Lze(o){for(let e=3;;e--)try{return await o()}catch(t){if(t.message==="content modified"&&e>0)continue;throw t}}function QX(o){return typeof o=="string"?o:o.map(e=>{const t={label:e.value,tooltip:YH(e.tooltip),command:Cw(e.command)};return e.location&&(t.location={uri:dz.parse(e.location.uri),range:new DL(e.location.range.start.line+1,e.location.range.start.character+1,e.location.range.end.line+1,e.location.range.end.character+1)}),t})}function YH(o){if(o)return typeof o=="string"?o:{value:o.value}}var kze=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{semanticTokens:{dynamicRegistration:!0,requests:{range:!0,full:{delta:!0}},tokenTypes:["namespace","type","class","enum","interface","struct","typeParameter","parameter","variable","property","enumMember","event","function","method","macro","keyword","modifier","comment","string","number","regexp","operator","decorator"],tokenModifiers:["declaration","definition","readonly","static","deprecated","abstract","async","modification","documentation","defaultLibrary"],formats:[cje.Relative],overlappingTokenSupport:!1,multilineTokenSupport:!0}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentSemanticTokensFull,!0,e=>ye.registerDocumentSemanticTokensProvider(ss(e.documentSelector),new Dze(this._connection,e))))}},Dze=class{constructor(o,e){this._client=o,this._capabilities=e}getLegend(){return{tokenTypes:this._capabilities.legend.tokenTypes,tokenModifiers:this._capabilities.legend.tokenModifiers}}releaseDocumentSemanticTokens(o){}async provideDocumentSemanticTokens(o,e,t){const i=this._client.bridge.translate(o,o.getPositionAt(0)),n=this._capabilities.full;if(e&&n&&typeof n=="object"&&n.delta){const r=await this._client.server.textDocumentSemanticTokensFullDelta({textDocument:i.textDocument,previousResultId:e});return r?"edits"in r?{resultId:r.resultId,edits:r.edits.map(a=>({start:a.start,deleteCount:a.deleteCount,data:a.data?new Uint32Array(a.data):void 0}))}:{resultId:r.resultId,data:new Uint32Array(r.data)}:null}const s=await this._client.server.textDocumentSemanticTokensFull({textDocument:i.textDocument});return s?{resultId:s.resultId,data:new Uint32Array(s.data)}:null}async provideDocumentSemanticTokensEdits(o,e,t){return this.provideDocumentSemanticTokens(o,e,t)}},Eze=class extends mn{constructor(o){super(),Fe(this,"_diagnosticsMarkerOwner","lsp"),Fe(this,"_pullDiagnosticProviders",new Map),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{publishDiagnostics:{relatedInformation:!0,tagSupport:{valueSet:[...cle.keys()]},versionSupport:!0,codeDescriptionSupport:!0,dataSupport:!0},diagnostic:{dynamicRegistration:!0,relatedDocumentSupport:!0}}})),this._register(this._connection.connection.registerNotificationHandler(PS.client.textDocumentPublishDiagnostics,e=>this._handlePublishDiagnostics(e))),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentDiagnostic,!0,e=>{const t=new uz;for(const i of bg.getModels())this._addPullDiagnosticProvider(i,e,t);return t.add(bg.onDidCreateModel(i=>{this._addPullDiagnosticProvider(i,e,t)})),t}))}_addPullDiagnosticProvider(o,e,t){if(o.getLanguageId(),!Mje(o,e.documentSelector))return;const i=new Ize(o,this._connection,this._diagnosticsMarkerOwner,e);this._pullDiagnosticProviders.set(o,i),t.add(i),t.add(o.onWillDispose(()=>{this._pullDiagnosticProviders.delete(o)}))}_handlePublishDiagnostics(o){const e=o.uri;try{const t=this._connection.bridge.translateBack({uri:e},{line:0,character:0}).textModel;if(!t||t.isDisposed())return;const i=o.diagnostics.map(n=>ZH(n));bg.setModelMarkers(t,this._diagnosticsMarkerOwner,i)}catch(t){console.debug(`Could not set diagnostics for ${e}:`,t)}}},Ize=class extends mn{constructor(o,e,t,i){super(),Fe(this,"_updateHandle"),Fe(this,"_previousResultId"),this._model=o,this._connection=e,this._markerOwner=t,this._capability=i,this._register(this._model.onDidChangeContent(()=>{this._scheduleDiagnosticUpdate()})),this._scheduleDiagnosticUpdate()}_scheduleDiagnosticUpdate(){this._updateHandle!==void 0&&clearTimeout(this._updateHandle),this._updateHandle=window.setTimeout(()=>{this._updateHandle=void 0,this._requestDiagnostics()},500)}async _requestDiagnostics(){if(!this._model.isDisposed())try{const o=this._connection.bridge.translate(this._model,new bf(1,1)),e=await this._connection.server.textDocumentDiagnostic({textDocument:o.textDocument,identifier:this._capability.identifier,previousResultId:this._previousResultId});if(this._model.isDisposed())return;this._handleDiagnosticReport(e)}catch(o){console.error("Error requesting diagnostics:",o)}}_handleDiagnosticReport(o){if(o.kind==="full"){this._previousResultId=o.resultId;const e=o.items.map(t=>ZH(t));bg.setModelMarkers(this._model,this._markerOwner,e),"relatedDocuments"in o&&o.relatedDocuments&&this._handleRelatedDocuments(o.relatedDocuments)}else o.kind==="unchanged"&&(this._previousResultId=o.resultId)}_handleRelatedDocuments(o){for(const[e,t]of Object.entries(o))try{const i=this._connection.bridge.translateBack({uri:e},{line:0,character:0}).textModel;if(!i||i.isDisposed())continue;if(t.kind==="full"){const n=t.items.map(s=>ZH(s));bg.setModelMarkers(i,this._markerOwner,n)}}catch(i){console.debug(`Could not set related diagnostics for ${e}:`,i)}}dispose(){this._updateHandle!==void 0&&(clearTimeout(this._updateHandle),this._updateHandle=void 0),super.dispose()}},Nze=class{constructor(o,e,t,i){this.server=o,this.bridge=e,this.capabilities=t,this.connection=i}},Tze=class extends mn{constructor(o){super(),Fe(this,"_staticCapabilities",new Set),Fe(this,"_dynamicFromStatic",Pze.create()),Fe(this,"_registrations",new Map),Fe(this,"_serverCapabilities"),this._connection=o,this._register(this._connection.registerRequestHandler(PS.client.clientRegisterCapability,async e=>{for(const t of e.registrations){const i=eQ(t.method),n=new JX(t.id,i,t.registerOptions,!1);this._registerCapabilityOptions(n)}return{ok:null}})),this._register(this._connection.registerRequestHandler(PS.client.clientUnregisterCapability,async e=>{for(const t of e.unregisterations){const i=eQ(t.method),n=this._registrations.get(i),s=n==null?void 0:n.registrations.get(t.id);if(!s)throw new Error(`No registration for method ${t.method} with id ${t.id}`);s==null||s.handlerDisposables.forEach(r=>r.dispose()),n==null||n.registrations.delete(t.id)}return{ok:null}}))}_registerCapabilityOptions(o){let e=this._registrations.get(o.capability);if(e||(e=new tQ,this._registrations.set(o.capability,e)),e.registrations.has(o.id))throw new Error(`Handler for method ${o.capability.method} with id ${o.id} already registered`);e.registrations.set(o.id,o);for(const t of e.handlers)!t.handleStaticCapability&&o.isFromStatic||o.handlerDisposables.set(t,t.handler(o.options))}setServerCapabilities(o){if(this._serverCapabilities)throw new Error("Server capabilities already set");this._serverCapabilities=o;for(const e of Object.values(ft)){const t=this._dynamicFromStatic.getOptions(e,o);t&&this._registerCapabilityOptions(new JX(e.method,e,t,!0))}}getClientCapabilities(){const o={};for(const e of this._staticCapabilities)gle(o,e.cap);return o}addStaticClientCapabilities(o){const e={cap:o};return this._staticCapabilities.add(e),{dispose:()=>{this._staticCapabilities.delete(e)}}}registerCapabilityHandler(o,e,t){let i=this._registrations.get(o);i||(i=new tQ,this._registrations.set(o,i));const n=new Rze(o,e,t);i.handlers.add(n);for(const s of i.registrations.values())!n.handleStaticCapability&&s.isFromStatic||s.handlerDisposables.set(n,t(s.options));return{dispose:()=>{i.handlers.delete(n);for(const s of i.registrations.values()){const r=s.handlerDisposables.get(n);r&&(r.dispose(),s.handlerDisposables.delete(n))}}}}},Rze=class{constructor(o,e,t){this.capability=o,this.handleStaticCapability=e,this.handler=t}},JX=class{constructor(o,e,t,i){Fe(this,"handlerDisposables",new Map),this.id=o,this.capability=e,this.options=t,this.isFromStatic=i}};const Mze=new Map([...Object.values(ft)].map(o=>[o.method,o]));function eQ(o){const e=Mze.get(o);if(!e)throw new Error(`No capability found for method ${o}`);return e}var tQ=class{constructor(){Fe(this,"handlers",new Set),Fe(this,"registrations",new Map)}},Pze=class ule{constructor(){Fe(this,"_mappings",new Map)}static create(){const e=new ule;return e.set(ft.textDocumentDidChange,t=>{if(t.textDocumentSync!==void 0)return typeof t.textDocumentSync=="object"?{syncKind:t.textDocumentSync.change??rje.None,documentSelector:null}:{syncKind:t.textDocumentSync,documentSelector:null}}),e.set(ft.textDocumentCompletion,t=>t.completionProvider),e.set(ft.textDocumentHover,t=>t.hoverProvider),e.set(ft.textDocumentSignatureHelp,t=>t.signatureHelpProvider),e.set(ft.textDocumentDefinition,t=>t.definitionProvider),e.set(ft.textDocumentReferences,t=>t.referencesProvider),e.set(ft.textDocumentDocumentHighlight,t=>t.documentHighlightProvider),e.set(ft.textDocumentDocumentSymbol,t=>t.documentSymbolProvider),e.set(ft.textDocumentCodeAction,t=>t.codeActionProvider),e.set(ft.textDocumentCodeLens,t=>t.codeLensProvider),e.set(ft.textDocumentDocumentLink,t=>t.documentLinkProvider),e.set(ft.textDocumentFormatting,t=>t.documentFormattingProvider),e.set(ft.textDocumentRangeFormatting,t=>t.documentRangeFormattingProvider),e.set(ft.textDocumentOnTypeFormatting,t=>t.documentOnTypeFormattingProvider),e.set(ft.textDocumentRename,t=>t.renameProvider),e.set(ft.textDocumentFoldingRange,t=>t.foldingRangeProvider),e.set(ft.textDocumentDeclaration,t=>t.declarationProvider),e.set(ft.textDocumentTypeDefinition,t=>t.typeDefinitionProvider),e.set(ft.textDocumentImplementation,t=>t.implementationProvider),e.set(ft.textDocumentDocumentColor,t=>t.colorProvider),e.set(ft.textDocumentSelectionRange,t=>t.selectionRangeProvider),e.set(ft.textDocumentLinkedEditingRange,t=>t.linkedEditingRangeProvider),e.set(ft.textDocumentPrepareCallHierarchy,t=>t.callHierarchyProvider),e.set(ft.textDocumentSemanticTokensFull,t=>t.semanticTokensProvider),e.set(ft.textDocumentInlayHint,t=>t.inlayHintProvider),e.set(ft.textDocumentInlineValue,t=>t.inlineValueProvider),e.set(ft.textDocumentDiagnostic,t=>t.diagnosticProvider),e.set(ft.textDocumentMoniker,t=>t.monikerProvider),e.set(ft.textDocumentPrepareTypeHierarchy,t=>t.typeHierarchyProvider),e.set(ft.workspaceSymbol,t=>t.workspaceSymbolProvider),e.set(ft.workspaceExecuteCommand,t=>t.executeCommandProvider),e}set(e,t){if(this._mappings.has(e.method))throw new Error(`Capability for method ${e.method} already registered`);this._mappings.set(e.method,t)}getOptions(e,t){const i=this._mappings.get(e.method);if(i)return i(t)}};function gle(o,e){for(const t of Object.keys(e)){const i=e[t];if(i===void 0)continue;const n=o[t];if(n===void 0){o[t]=i;continue}if(typeof i!="object"||i===null){o[t]=i;continue}if(typeof n!="object"||n===null){o[t]=i;continue}gle(n,i)}}var Aze=class extends mn{constructor(o,e){super(),Fe(this,"_managedModels",new Map),Fe(this,"_managedModelsReverse",new Map),Fe(this,"_started",!1),this._server=o,this._capabilities=e,this._register(this._capabilities.addStaticClientCapabilities({textDocument:{synchronization:{dynamicRegistration:!0,willSave:!1,willSaveWaitUntil:!1,didSave:!1}}})),this._register(e.registerCapabilityHandler(ft.textDocumentDidChange,!0,t=>{if(this._started)return{dispose:()=>{}};this._started=!0,this._register(bg.onDidCreateModel(i=>{this._getOrCreateManagedModel(i)}));for(const i of bg.getModels())this._getOrCreateManagedModel(i);return{dispose:()=>{}}}))}_getOrCreateManagedModel(o){if(!this._started)throw new Error("Not started");const e=o.uri.toString(!0).toLowerCase();let t=this._managedModels.get(o);return t||(t=new Oze(o,this._server),this._managedModels.set(o,t),this._managedModelsReverse.set(e,o)),o.onWillDispose(()=>{t.dispose(),this._managedModels.delete(o),this._managedModelsReverse.delete(e)}),t}translateBack(o,e){const t=o.uri.toLowerCase(),i=this._managedModelsReverse.get(t);if(!i)throw new Error(`No text model for uri ${t}`);return{textModel:i,position:new bf(e.line+1,e.character+1)}}translateBackRange(o,e){const t=o.uri.toLowerCase(),i=this._managedModelsReverse.get(t);if(!i)throw new Error(`No text model for uri ${t}`);return{textModel:i,range:new DL(e.start.line+1,e.start.character+1,e.end.line+1,e.end.character+1)}}translate(o,e){return{textDocument:{uri:o.uri.toString(!0)},position:{line:e.lineNumber-1,character:e.column-1}}}translateRange(o,e){return{start:{line:e.startLineNumber-1,character:e.startColumn-1},end:{line:e.endLineNumber-1,character:e.endColumn-1}}}},Oze=class extends mn{constructor(o,e){super(),this._textModel=o,this._api=e;const t=o.uri.toString(!0).toLowerCase();this._api.textDocumentDidOpen({textDocument:{languageId:o.getLanguageId(),uri:t,version:o.getVersionId(),text:o.getValue()}}),this._register(o.onDidChangeContent(i=>{const n=i.changes.map(s=>Fze(s));this._api.textDocumentDidChange({textDocument:{uri:t,version:o.getVersionId()},contentChanges:n})})),this._register({dispose:()=>{this._api.textDocumentDidClose({textDocument:{uri:t}})}})}};function Fze(o){return{range:Wze(o.range),rangeLength:o.rangeLength,text:o.text}}function Wze(o){return{start:{line:o.startLineNumber-1,character:o.startColumn-1},end:{line:o.endLineNumber-1,character:o.endColumn-1}}}var Bze=class{constructor(o){Fe(this,"_connection"),Fe(this,"_capabilitiesRegistry"),Fe(this,"_bridge"),Fe(this,"_initPromise");const e=qH.fromTransport(o),t=PS.getServer(e,{});e.startListen(),this._capabilitiesRegistry=new Tze(e),this._bridge=new Aze(t.server,this._capabilitiesRegistry),this._connection=new Nze(t.server,this._bridge,this._capabilitiesRegistry,e),this.createFeatures(),this._initPromise=this._init()}async _init(){const o=await this._connection.server.initialize({processId:null,capabilities:this._capabilitiesRegistry.getClientCapabilities(),rootUri:null});this._connection.server.initialized({}),this._capabilitiesRegistry.setServerCapabilities(o.capabilities)}createFeatures(){const o=new uz;return o.add(new Pje(this._connection)),o.add(new Wje(this._connection)),o.add(new Vje(this._connection)),o.add(new zje(this._connection)),o.add(new $je(this._connection)),o.add(new Kje(this._connection)),o.add(new Zje(this._connection)),o.add(new Xje(this._connection)),o.add(new Jje(this._connection)),o.add(new tze(this._connection)),o.add(new sze(this._connection)),o.add(new aze(this._connection)),o.add(new cze(this._connection)),o.add(new hze(this._connection)),o.add(new gze(this._connection)),o.add(new pze(this._connection)),o.add(new _ze(this._connection)),o.add(new vze(this._connection)),o.add(new Cze(this._connection)),o.add(new xze(this._connection)),o.add(new kze(this._connection)),o.add(new Eze(this._connection)),o}},ev=null;typeof WebSocket<"u"?ev=WebSocket:typeof MozWebSocket<"u"?ev=MozWebSocket:typeof global<"u"?ev=global.WebSocket||global.MozWebSocket:typeof window<"u"?ev=window.WebSocket||window.MozWebSocket:typeof self<"u"&&(ev=self.WebSocket||self.MozWebSocket);var Hze=ev;function Vze(o){return"host"in o?{address:`${o.forceTls?"wss":"ws"}://${o.host}:${o.port}`}:o}var jze=class XH extends Kae{constructor(e){super(),Fe(this,"socket"),Fe(this,"errorEmitter",new hz),Fe(this,"onError",this.errorEmitter),this.socket=e,e.onmessage=t=>{try{const i=t.data;if(typeof i=="string"){const n=JSON.parse(i);this._dispatchReceivedMessage(n)}else throw new Error("Not supported")}catch(i){this.errorEmitter.fire({error:i})}},e.onclose=t=>{this._onConnectionClosed()}}static connectTo(e){const t=new Hze(Vze(e).address);return new Promise((i,n)=>{t.onerror=s=>{n(s)},t.onopen=()=>{i(new XH(t))}})}static fromWebSocket(e){return new XH(e)}close(){this.socket.close()}dispose(){this.close()}_sendImpl(e){const t=JSON.stringify(e);return new Promise((i,n)=>{this.socket.send(t,s=>{s?n(s):i()})})}toString(){return`${this.id}@${this.socket.url}`}},fle=class extends Kae{constructor(o,e=void 0,t=void 0){super(),Fe(this,"_windowLike"),Fe(this,"_source"),Fe(this,"_loadingState"),Fe(this,"_disposed",!1),Fe(this,"_messageHandler",({data:i,source:n})=>{this._source&&n!==this._source||typeof i=="object"&&i&&this._dispatchReceivedMessage(i)}),this._windowLike=o,this._source=e,this._loadingState=t,this._windowLike.addEventListener("message",this._messageHandler)}async _sendImpl(o){if(this._disposed)throw new Error("Transport is disposed");this._loadingState&&!this._loadingState.loaded&&await this._loadingState.onLoaded,this._windowLike.postMessage(o)}toString(){return`${this.id}@${this._windowLike}`}dispose(){this._disposed||(this._disposed=!0,this._windowLike.removeEventListener("message",this._messageHandler))}};function zze(o){if(typeof window>"u")throw new Error("call this function from the main browser thread");return new fle(o)}function Uze(o){if(typeof window>"u")throw new Error("call this function from the main browser thread");return new fle(o.contentWindow,o.contentWindow,{loaded:window.document.readyState==="complete",onLoaded:new Promise(e=>{window.addEventListener("load",()=>e())})})}const $ze=Object.freeze(Object.defineProperty({__proto__:null,MonacoLspClient:Bze,WebSocketTransport:jze,createTransportToIFrame:Uze,createTransportToWorker:zze},Symbol.toStringTag,{value:"Module"})),ple={},_5={};class gz{static getOrCreate(e){return _5[e]||(_5[e]=new gz(e)),_5[e]}constructor(e){this._languageId=e,this._loadingTriggered=!1,this._lazyLoadPromise=new Promise((t,i)=>{this._lazyLoadPromiseResolve=t,this._lazyLoadPromiseReject=i})}load(){return this._loadingTriggered||(this._loadingTriggered=!0,ple[this._languageId].loader().then(e=>this._lazyLoadPromiseResolve(e),e=>this._lazyLoadPromiseReject(e))),this._lazyLoadPromise}}function He(o){const e=o.id;ple[e]=o,ye.register(o);const t=gz.getOrCreate(e);ye.registerTokensProviderFactory(e,{create:async()=>(await t.load()).language}),ye.onLanguageEncountered(e,async()=>{const i=await t.load();ye.setLanguageConfiguration(e,i.conf)})}He({id:"abap",extensions:[".abap"],aliases:["abap","ABAP"],loader:()=>Pe(()=>import("./abap-DLDM7-KI.js"),[])});He({id:"apex",extensions:[".cls"],aliases:["Apex","apex"],mimetypes:["text/x-apex-source","text/x-apex"],loader:()=>Pe(()=>import("./apex-DNDY2TF8.js"),[])});He({id:"azcli",extensions:[".azcli"],aliases:["Azure CLI","azcli"],loader:()=>Pe(()=>import("./azcli-Y6nb8tq_.js"),[])});He({id:"bat",extensions:[".bat",".cmd"],aliases:["Batch","bat"],loader:()=>Pe(()=>import("./bat-BwHxbl9M.js"),[])});He({id:"bicep",extensions:[".bicep"],aliases:["Bicep"],loader:()=>Pe(()=>import("./bicep-CFznDFnq.js"),[])});He({id:"cameligo",extensions:[".mligo"],aliases:["Cameligo"],loader:()=>Pe(()=>import("./cameligo-Bf6VGUru.js"),[])});He({id:"clojure",extensions:[".clj",".cljs",".cljc",".edn"],aliases:["clojure","Clojure"],loader:()=>Pe(()=>import("./clojure-Dnu-v4kV.js"),[])});He({id:"coffeescript",extensions:[".coffee"],aliases:["CoffeeScript","coffeescript","coffee"],mimetypes:["text/x-coffeescript","text/coffeescript"],loader:()=>Pe(()=>import("./coffee-Bd8akH9Z.js"),[])});He({id:"c",extensions:[".c",".h"],aliases:["C","c"],loader:()=>Pe(()=>import("./cpp-BbWJElDN.js"),[])});He({id:"cpp",extensions:[".cpp",".cc",".cxx",".hpp",".hh",".hxx"],aliases:["C++","Cpp","cpp"],loader:()=>Pe(()=>import("./cpp-BbWJElDN.js"),[])});He({id:"csharp",extensions:[".cs",".csx",".cake"],aliases:["C#","csharp"],loader:()=>Pe(()=>import("./csharp-Co3qMtFm.js"),[])});He({id:"csp",extensions:[".csp"],aliases:["CSP","csp"],loader:()=>Pe(()=>import("./csp-D-4FJmMZ.js"),[])});He({id:"css",extensions:[".css"],aliases:["CSS","css"],mimetypes:["text/css"],loader:()=>Pe(()=>import("./css-DdJfP1eB.js"),[])});He({id:"cypher",extensions:[".cypher",".cyp"],aliases:["Cypher","OpenCypher"],loader:()=>Pe(()=>import("./cypher-cTPe9QuQ.js"),[])});He({id:"dart",extensions:[".dart"],aliases:["Dart","dart"],mimetypes:["text/x-dart-source","text/x-dart"],loader:()=>Pe(()=>import("./dart-BOtBlQCF.js"),[])});He({id:"dockerfile",extensions:[".dockerfile"],filenames:["Dockerfile"],aliases:["Dockerfile"],loader:()=>Pe(()=>import("./dockerfile-BG73LgW2.js"),[])});He({id:"ecl",extensions:[".ecl"],aliases:["ECL","Ecl","ecl"],loader:()=>Pe(()=>import("./ecl-BEgZUVRK.js"),[])});He({id:"elixir",extensions:[".ex",".exs"],aliases:["Elixir","elixir","ex"],loader:()=>Pe(()=>import("./elixir-BkW5O-1t.js"),[])});He({id:"flow9",extensions:[".flow"],aliases:["Flow9","Flow","flow9","flow"],loader:()=>Pe(()=>import("./flow9-BeJ5waoc.js"),[])});He({id:"fsharp",extensions:[".fs",".fsi",".ml",".mli",".fsx",".fsscript"],aliases:["F#","FSharp","fsharp"],loader:()=>Pe(()=>import("./fsharp-PahG7c26.js"),[])});He({id:"freemarker2",extensions:[".ftl",".ftlh",".ftlx"],aliases:["FreeMarker2","Apache FreeMarker2"],loader:()=>Pe(()=>import("./freemarker2-DiN8Ju52.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28])).then(o=>o.TagAutoInterpolationDollar)});He({id:"freemarker2.tag-angle.interpolation-dollar",aliases:["FreeMarker2 (Angle/Dollar)","Apache FreeMarker2 (Angle/Dollar)"],loader:()=>Pe(()=>import("./freemarker2-DiN8Ju52.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28])).then(o=>o.TagAngleInterpolationDollar)});He({id:"freemarker2.tag-bracket.interpolation-dollar",aliases:["FreeMarker2 (Bracket/Dollar)","Apache FreeMarker2 (Bracket/Dollar)"],loader:()=>Pe(()=>import("./freemarker2-DiN8Ju52.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28])).then(o=>o.TagBracketInterpolationDollar)});He({id:"freemarker2.tag-angle.interpolation-bracket",aliases:["FreeMarker2 (Angle/Bracket)","Apache FreeMarker2 (Angle/Bracket)"],loader:()=>Pe(()=>import("./freemarker2-DiN8Ju52.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28])).then(o=>o.TagAngleInterpolationBracket)});He({id:"freemarker2.tag-bracket.interpolation-bracket",aliases:["FreeMarker2 (Bracket/Bracket)","Apache FreeMarker2 (Bracket/Bracket)"],loader:()=>Pe(()=>import("./freemarker2-DiN8Ju52.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28])).then(o=>o.TagBracketInterpolationBracket)});He({id:"freemarker2.tag-auto.interpolation-dollar",aliases:["FreeMarker2 (Auto/Dollar)","Apache FreeMarker2 (Auto/Dollar)"],loader:()=>Pe(()=>import("./freemarker2-DiN8Ju52.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28])).then(o=>o.TagAutoInterpolationDollar)});He({id:"freemarker2.tag-auto.interpolation-bracket",aliases:["FreeMarker2 (Auto/Bracket)","Apache FreeMarker2 (Auto/Bracket)"],loader:()=>Pe(()=>import("./freemarker2-DiN8Ju52.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28])).then(o=>o.TagAutoInterpolationBracket)});He({id:"go",extensions:[".go"],aliases:["Go"],loader:()=>Pe(()=>import("./go-acbASCJo.js"),[])});He({id:"graphql",extensions:[".graphql",".gql"],aliases:["GraphQL","graphql","gql"],mimetypes:["application/graphql"],loader:()=>Pe(()=>import("./graphql-BxJiqAUM.js"),[])});He({id:"handlebars",extensions:[".handlebars",".hbs"],aliases:["Handlebars","handlebars","hbs"],mimetypes:["text/x-handlebars-template"],loader:()=>Pe(()=>import("./handlebars-DOR9Cq-e.js"),__vite__mapDeps([29,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28]))});He({id:"hcl",extensions:[".tf",".tfvars",".hcl"],aliases:["Terraform","tf","HCL","hcl"],loader:()=>Pe(()=>import("./hcl-DtV1sZF8.js"),[])});He({id:"html",extensions:[".html",".htm",".shtml",".xhtml",".mdoc",".jsp",".asp",".aspx",".jshtm"],aliases:["HTML","htm","html","xhtml"],mimetypes:["text/html","text/x-jshtm","text/template","text/ng-template"],loader:()=>Pe(()=>import("./html-BFxY6n68.js"),__vite__mapDeps([30,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28]))});He({id:"ini",extensions:[".ini",".properties",".gitconfig"],filenames:["config",".gitattributes",".gitconfig",".editorconfig"],aliases:["Ini","ini"],loader:()=>Pe(()=>import("./ini-Kd9XrMLS.js"),[])});He({id:"java",extensions:[".java",".jav"],aliases:["Java","java"],mimetypes:["text/x-java-source","text/x-java"],loader:()=>Pe(()=>import("./java-CXBNlu9o.js"),[])});He({id:"javascript",extensions:[".js",".es6",".jsx",".mjs",".cjs"],firstLine:"^#!.*\\bnode",filenames:["jakefile"],aliases:["JavaScript","javascript","js"],mimetypes:["text/javascript"],loader:()=>Pe(()=>import("./javascript-BQ1ascVE.js"),__vite__mapDeps([31,32,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28]))});He({id:"julia",extensions:[".jl"],aliases:["julia","Julia"],loader:()=>Pe(()=>import("./julia-cl7-CwDS.js"),[])});He({id:"kotlin",extensions:[".kt",".kts"],aliases:["Kotlin","kotlin"],mimetypes:["text/x-kotlin-source","text/x-kotlin"],loader:()=>Pe(()=>import("./kotlin-s7OhZKlX.js"),[])});He({id:"less",extensions:[".less"],aliases:["Less","less"],mimetypes:["text/x-less","text/less"],loader:()=>Pe(()=>import("./less-9HpZscsL.js"),[])});He({id:"lexon",extensions:[".lex"],aliases:["Lexon"],loader:()=>Pe(()=>import("./lexon-OrD6JF1K.js"),[])});He({id:"lua",extensions:[".lua"],aliases:["Lua","lua"],loader:()=>Pe(()=>import("./lua-Cyyb5UIc.js"),[])});He({id:"liquid",extensions:[".liquid",".html.liquid"],aliases:["Liquid","liquid"],mimetypes:["application/liquid"],loader:()=>Pe(()=>import("./liquid-AywQ9haj.js"),__vite__mapDeps([33,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28]))});He({id:"m3",extensions:[".m3",".i3",".mg",".ig"],aliases:["Modula-3","Modula3","modula3","m3"],loader:()=>Pe(()=>import("./m3-B8OfTtLu.js"),[])});He({id:"markdown",extensions:[".md",".markdown",".mdown",".mkdn",".mkd",".mdwn",".mdtxt",".mdtext"],aliases:["Markdown","markdown"],loader:()=>Pe(()=>import("./markdown-BFxVWTOG.js"),[])});He({id:"mdx",extensions:[".mdx"],aliases:["MDX","mdx"],loader:()=>Pe(()=>import("./mdx-Cy09YxYR.js"),__vite__mapDeps([34,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28]))});He({id:"mips",extensions:[".s"],aliases:["MIPS","MIPS-V"],mimetypes:["text/x-mips","text/mips","text/plaintext"],loader:()=>Pe(()=>import("./mips-CiqrrVzr.js"),[])});He({id:"msdax",extensions:[".dax",".msdax"],aliases:["DAX","MSDAX"],loader:()=>Pe(()=>import("./msdax-DmeGPVcC.js"),[])});He({id:"mysql",extensions:[],aliases:["MySQL","mysql"],loader:()=>Pe(()=>import("./mysql-C_tMU-Nz.js"),[])});He({id:"objective-c",extensions:[".m"],aliases:["Objective-C"],loader:()=>Pe(()=>import("./objective-c-BDtDVThU.js"),[])});He({id:"pascal",extensions:[".pas",".p",".pp"],aliases:["Pascal","pas"],mimetypes:["text/x-pascal-source","text/x-pascal"],loader:()=>Pe(()=>import("./pascal-vHIfCaH5.js"),[])});He({id:"pascaligo",extensions:[".ligo"],aliases:["Pascaligo","ligo"],loader:()=>Pe(()=>import("./pascaligo-DtZ0uQbO.js"),[])});He({id:"perl",extensions:[".pl",".pm"],aliases:["Perl","pl"],loader:()=>Pe(()=>import("./perl-Ub6l9XKa.js"),[])});He({id:"pgsql",extensions:[],aliases:["PostgreSQL","postgres","pg","postgre"],loader:()=>Pe(()=>import("./pgsql-BlNEE0v7.js"),[])});He({id:"php",extensions:[".php",".php4",".php5",".phtml",".ctp"],aliases:["PHP","php"],mimetypes:["application/x-php"],loader:()=>Pe(()=>import("./php-BBUBE1dy.js"),[])});He({id:"pla",extensions:[".pla"],loader:()=>Pe(()=>import("./pla-DSh2-awV.js"),[])});He({id:"postiats",extensions:[".dats",".sats",".hats"],aliases:["ATS","ATS/Postiats"],loader:()=>Pe(()=>import("./postiats-CocnycG-.js"),[])});He({id:"powerquery",extensions:[".pq",".pqm"],aliases:["PQ","M","Power Query","Power Query M"],loader:()=>Pe(()=>import("./powerquery-tScXyioY.js"),[])});He({id:"powershell",extensions:[".ps1",".psm1",".psd1"],aliases:["PowerShell","powershell","ps","ps1"],loader:()=>Pe(()=>import("./powershell-COWaemsV.js"),[])});He({id:"proto",extensions:[".proto"],aliases:["protobuf","Protocol Buffers"],loader:()=>Pe(()=>import("./protobuf-Brw8urJB.js"),[])});He({id:"pug",extensions:[".jade",".pug"],aliases:["Pug","Jade","jade"],loader:()=>Pe(()=>import("./pug-8SOpv6rk.js"),[])});He({id:"python",extensions:[".py",".rpy",".pyw",".cpy",".gyp",".gypi"],aliases:["Python","py"],firstLine:"^#!/.*\\bpython[0-9.-]*\\b",loader:()=>Pe(()=>import("./python-DuVsjFuv.js"),__vite__mapDeps([35,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28]))});He({id:"qsharp",extensions:[".qs"],aliases:["Q#","qsharp"],loader:()=>Pe(()=>import("./qsharp-Bw9ernYp.js"),[])});He({id:"r",extensions:[".r",".rhistory",".rmd",".rprofile",".rt"],aliases:["R","r"],loader:()=>Pe(()=>import("./r-j7ic8hl3.js"),[])});He({id:"razor",extensions:[".cshtml"],aliases:["Razor","razor"],mimetypes:["text/x-cshtml"],loader:()=>Pe(()=>import("./razor-A-iK6PzJ.js"),__vite__mapDeps([36,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28]))});He({id:"redis",extensions:[".redis"],aliases:["redis"],loader:()=>Pe(()=>import("./redis-Bu5POkcn.js"),[])});He({id:"redshift",extensions:[],aliases:["Redshift","redshift"],loader:()=>Pe(()=>import("./redshift-Bs9aos_-.js"),[])});He({id:"restructuredtext",extensions:[".rst"],aliases:["reStructuredText","restructuredtext"],loader:()=>Pe(()=>import("./restructuredtext-CqXO7rUv.js"),[])});He({id:"ruby",extensions:[".rb",".rbx",".rjs",".gemspec",".pp"],filenames:["rakefile","Gemfile"],aliases:["Ruby","rb"],loader:()=>Pe(()=>import("./ruby-zBfavPgS.js"),[])});He({id:"rust",extensions:[".rs",".rlib"],aliases:["Rust","rust"],loader:()=>Pe(()=>import("./rust-BzKRNQWT.js"),[])});He({id:"sb",extensions:[".sb"],aliases:["Small Basic","sb"],loader:()=>Pe(()=>import("./sb-BBc9UKZt.js"),[])});He({id:"scala",extensions:[".scala",".sc",".sbt"],aliases:["Scala","scala","SBT","Sbt","sbt","Dotty","dotty"],mimetypes:["text/x-scala-source","text/x-scala","text/x-sbt","text/x-dotty"],loader:()=>Pe(()=>import("./scala-D9hQfWCl.js"),[])});He({id:"scheme",extensions:[".scm",".ss",".sch",".rkt"],aliases:["scheme","Scheme"],loader:()=>Pe(()=>import("./scheme-BPhDTwHR.js"),[])});He({id:"scss",extensions:[".scss"],aliases:["Sass","sass","scss"],mimetypes:["text/x-scss","text/scss"],loader:()=>Pe(()=>import("./scss-CBJaRo0y.js"),[])});He({id:"shell",extensions:[".sh",".bash"],aliases:["Shell","sh"],loader:()=>Pe(()=>import("./shell-DiJ1NA_G.js"),[])});He({id:"sol",extensions:[".sol"],aliases:["sol","solidity","Solidity"],loader:()=>Pe(()=>import("./solidity-Db0IVjzk.js"),[])});He({id:"aes",extensions:[".aes"],aliases:["aes","sophia","Sophia"],loader:()=>Pe(()=>import("./sophia-CnS9iZB_.js"),[])});He({id:"sparql",extensions:[".rq"],aliases:["sparql","SPARQL"],loader:()=>Pe(()=>import("./sparql-CJmd_6j2.js"),[])});He({id:"sql",extensions:[".sql"],aliases:["SQL"],loader:()=>Pe(()=>import("./sql-ClhHkBeG.js"),[])});He({id:"st",extensions:[".st",".iecst",".iecplc",".lc3lib",".TcPOU",".TcDUT",".TcGVL",".TcIO"],aliases:["StructuredText","scl","stl"],loader:()=>Pe(()=>import("./st-CHwy0fLd.js"),[])});He({id:"swift",aliases:["Swift","swift"],extensions:[".swift"],mimetypes:["text/swift"],loader:()=>Pe(()=>import("./swift-Bqt4WxQ4.js"),[])});He({id:"systemverilog",extensions:[".sv",".svh"],aliases:["SV","sv","SystemVerilog","systemverilog"],loader:()=>Pe(()=>import("./systemverilog-Bs9z6M-B.js"),[])});He({id:"verilog",extensions:[".v",".vh"],aliases:["V","v","Verilog","verilog"],loader:()=>Pe(()=>import("./systemverilog-Bs9z6M-B.js"),[])});He({id:"tcl",extensions:[".tcl"],aliases:["tcl","Tcl","tcltk","TclTk","tcl/tk","Tcl/Tk"],loader:()=>Pe(()=>import("./tcl-Dm6ycUr_.js"),[])});He({id:"twig",extensions:[".twig"],aliases:["Twig","twig"],mimetypes:["text/x-twig"],loader:()=>Pe(()=>import("./twig-Csy3S7wG.js"),[])});He({id:"typescript",extensions:[".ts",".tsx",".cts",".mts"],aliases:["TypeScript","ts","typescript"],mimetypes:["text/typescript"],loader:()=>Pe(()=>import("./typescript-Bq0Ao-PB.js"),__vite__mapDeps([32,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28]))});He({id:"typespec",extensions:[".tsp"],aliases:["TypeSpec"],loader:()=>Pe(()=>import("./typespec-Btyra-wh.js"),[])});He({id:"vb",extensions:[".vb"],aliases:["Visual Basic","vb"],loader:()=>Pe(()=>import("./vb-Db0cS2oM.js"),[])});He({id:"wgsl",extensions:[".wgsl"],aliases:["WebGPU Shading Language","WGSL","wgsl"],loader:()=>Pe(()=>import("./wgsl-BTesnYfV.js"),[])});He({id:"xml",extensions:[".xml",".xsd",".dtd",".ascx",".csproj",".config",".props",".targets",".wxi",".wxl",".wxs",".xaml",".svg",".svgz",".opf",".xslt",".xsl"],firstLine:"(\\<\\?xml.*)|(\\Pe(()=>import("./xml-DmRm0v1g.js"),__vite__mapDeps([37,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28]))});He({id:"yaml",extensions:[".yaml",".yml"],aliases:["YAML","yaml","YML","yml"],mimetypes:["application/x-yaml","text/x-yaml"],loader:()=>Pe(()=>import("./yaml-Cl9BY_30.js"),__vite__mapDeps([38,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28]))});let fz=class{constructor(e,t,i){this._onDidChange=new H_,this._languageId=e,this.setOptions(t),this.setModeConfiguration(i)}get onDidChange(){return this._onDidChange.event}get languageId(){return this._languageId}get modeConfiguration(){return this._modeConfiguration}get diagnosticsOptions(){return this.options}get options(){return this._options}setOptions(e){this._options=e||Object.create(null),this._onDidChange.fire(this)}setDiagnosticsOptions(e){this.setOptions(e)}setModeConfiguration(e){this._modeConfiguration=e||Object.create(null),this._onDidChange.fire(this)}};const pz={validate:!0,lint:{compatibleVendorPrefixes:"ignore",vendorPrefix:"warning",duplicateProperties:"warning",emptyRules:"warning",importStatement:"ignore",boxModel:"ignore",universalSelector:"ignore",zeroUnits:"ignore",fontFaceProperties:"warning",hexColorLength:"error",argumentsInColorFunction:"error",unknownProperties:"warning",ieHack:"ignore",unknownVendorSpecificProperties:"ignore",propertyIgnoredDueToDisplay:"warning",important:"ignore",float:"ignore",idSelector:"ignore"},data:{useDefaultDataProvider:!0},format:{newlineBetweenSelectors:!0,newlineBetweenRules:!0,spaceAroundSelectorSeparator:!1,braceStyle:"collapse",maxPreserveNewLines:void 0,preserveNewLines:!0}},mz={completionItems:!0,hovers:!0,documentSymbols:!0,definitions:!0,references:!0,documentHighlights:!0,rename:!0,colors:!0,foldingRanges:!0,diagnostics:!0,selectionRanges:!0,documentFormattingEdits:!0,documentRangeFormattingEdits:!0},mle=new fz("css",pz,mz),_le=new fz("scss",pz,mz),ble=new fz("less",pz,mz);function _z(){return Pe(()=>import("./cssMode-DFvnCjHl.js"),__vite__mapDeps([39,40,41,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28]))}ye.onLanguage("less",()=>{_z().then(o=>o.setupMode(ble))});ye.onLanguage("scss",()=>{_z().then(o=>o.setupMode(_le))});ye.onLanguage("css",()=>{_z().then(o=>o.setupMode(mle))});const qze=Object.freeze(Object.defineProperty({__proto__:null,cssDefaults:mle,lessDefaults:ble,scssDefaults:_le},Symbol.toStringTag,{value:"Module"}));let Kze=class{constructor(e,t,i){this._onDidChange=new H_,this._languageId=e,this.setOptions(t),this.setModeConfiguration(i)}get onDidChange(){return this._onDidChange.event}get languageId(){return this._languageId}get options(){return this._options}get modeConfiguration(){return this._modeConfiguration}setOptions(e){this._options=e||Object.create(null),this._onDidChange.fire(this)}setModeConfiguration(e){this._modeConfiguration=e||Object.create(null),this._onDidChange.fire(this)}};const Gze={tabSize:4,insertSpaces:!1,wrapLineLength:120,unformatted:'default": "a, abbr, acronym, b, bdo, big, br, button, cite, code, dfn, em, i, img, input, kbd, label, map, object, q, samp, select, small, span, strong, sub, sup, textarea, tt, var',contentUnformatted:"pre",indentInnerHtml:!1,preserveNewLines:!0,maxPreserveNewLines:void 0,indentHandlebars:!1,endWithNewline:!1,extraLiners:"head, body, /html",wrapAttributes:"auto"},_P={format:Gze,suggest:{},data:{useDefaultDataProvider:!0}};function bP(o){return{completionItems:!0,hovers:!0,documentSymbols:!0,links:!0,documentHighlights:!0,rename:!0,colors:!0,foldingRanges:!0,selectionRanges:!0,diagnostics:o===fy,documentFormattingEdits:o===fy,documentRangeFormattingEdits:o===fy}}const fy="html",iQ="handlebars",nQ="razor",vle=vP(fy,_P,bP(fy)),Zze=vle.defaults,wle=vP(iQ,_P,bP(iQ)),Yze=wle.defaults,Cle=vP(nQ,_P,bP(nQ)),Xze=Cle.defaults;function Qze(){return Pe(()=>import("./htmlMode-AnX_EBKG.js"),__vite__mapDeps([42,40,41,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28]))}function vP(o,e=_P,t=bP(o)){const i=new Kze(o,e,t);let n;const s=ye.onLanguage(o,async()=>{n=(await Qze()).setupMode(i)});return{defaults:i,dispose(){s.dispose(),n==null||n.dispose(),n=void 0}}}const Jze=Object.freeze(Object.defineProperty({__proto__:null,handlebarDefaults:Yze,handlebarLanguageService:wle,htmlDefaults:Zze,htmlLanguageService:vle,razorDefaults:Xze,razorLanguageService:Cle,registerHTMLLanguageService:vP},Symbol.toStringTag,{value:"Module"}));let eUe=class{constructor(e,t,i){this._onDidChange=new H_,this._languageId=e,this.setDiagnosticsOptions(t),this.setModeConfiguration(i)}get onDidChange(){return this._onDidChange.event}get languageId(){return this._languageId}get modeConfiguration(){return this._modeConfiguration}get diagnosticsOptions(){return this._diagnosticsOptions}setDiagnosticsOptions(e){this._diagnosticsOptions=e||Object.create(null),this._onDidChange.fire(this)}setModeConfiguration(e){this._modeConfiguration=e||Object.create(null),this._onDidChange.fire(this)}};const tUe={validate:!0,allowComments:!0,schemas:[],enableSchemaRequest:!1,schemaRequest:"warning",schemaValidation:"warning",comments:"error",trailingCommas:"error"},iUe={documentFormattingEdits:!0,documentRangeFormattingEdits:!0,completionItems:!0,hovers:!0,documentSymbols:!0,tokens:!0,colors:!0,foldingRanges:!0,diagnostics:!0,selectionRanges:!0},yle=new eUe("json",tUe,iUe),nUe=()=>xle().then(o=>o.getWorker());function xle(){return Pe(()=>import("./jsonMode-CM_upRfN.js"),__vite__mapDeps([43,40,41,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28]))}ye.register({id:"json",extensions:[".json",".bowerrc",".jshintrc",".jscsrc",".eslintrc",".babelrc",".har"],aliases:["JSON","json"],mimetypes:["application/json"]});ye.onLanguage("json",()=>{xle().then(o=>o.setupMode(yle))});const sUe=Object.freeze(Object.defineProperty({__proto__:null,getWorker:nUe,jsonDefaults:yle},Symbol.toStringTag,{value:"Module"})),oUe="5.9.3";var Sle=(o=>(o[o.None=0]="None",o[o.CommonJS=1]="CommonJS",o[o.AMD=2]="AMD",o[o.UMD=3]="UMD",o[o.System=4]="System",o[o.ES2015=5]="ES2015",o[o.ESNext=99]="ESNext",o))(Sle||{}),Lle=(o=>(o[o.None=0]="None",o[o.Preserve=1]="Preserve",o[o.React=2]="React",o[o.ReactNative=3]="ReactNative",o[o.ReactJSX=4]="ReactJSX",o[o.ReactJSXDev=5]="ReactJSXDev",o))(Lle||{}),kle=(o=>(o[o.CarriageReturnLineFeed=0]="CarriageReturnLineFeed",o[o.LineFeed=1]="LineFeed",o))(kle||{}),Dle=(o=>(o[o.ES3=0]="ES3",o[o.ES5=1]="ES5",o[o.ES2015=2]="ES2015",o[o.ES2016=3]="ES2016",o[o.ES2017=4]="ES2017",o[o.ES2018=5]="ES2018",o[o.ES2019=6]="ES2019",o[o.ES2020=7]="ES2020",o[o.ESNext=99]="ESNext",o[o.JSON=100]="JSON",o[o.Latest=99]="Latest",o))(Dle||{}),Ele=(o=>(o[o.Classic=1]="Classic",o[o.NodeJs=2]="NodeJs",o))(Ele||{});class Ile{constructor(e,t,i,n,s){this._onDidChange=new H_,this._onDidExtraLibsChange=new H_,this._extraLibs=Object.create(null),this._removedExtraLibs=Object.create(null),this._eagerModelSync=!1,this.setCompilerOptions(e),this.setDiagnosticsOptions(t),this.setWorkerOptions(i),this.setInlayHintsOptions(n),this.setModeConfiguration(s),this._onDidExtraLibsChangeTimeout=-1}get onDidChange(){return this._onDidChange.event}get onDidExtraLibsChange(){return this._onDidExtraLibsChange.event}get modeConfiguration(){return this._modeConfiguration}get workerOptions(){return this._workerOptions}get inlayHintsOptions(){return this._inlayHintsOptions}getExtraLibs(){return this._extraLibs}addExtraLib(e,t){let i;if(typeof t>"u"?i=`ts:extralib-${Math.random().toString(36).substring(2,15)}`:i=t,this._extraLibs[i]&&this._extraLibs[i].content===e)return{dispose:()=>{}};let n=1;return this._removedExtraLibs[i]&&(n=this._removedExtraLibs[i]+1),this._extraLibs[i]&&(n=this._extraLibs[i].version+1),this._extraLibs[i]={content:e,version:n},this._fireOnDidExtraLibsChangeSoon(),{dispose:()=>{let s=this._extraLibs[i];s&&s.version===n&&(delete this._extraLibs[i],this._removedExtraLibs[i]=n,this._fireOnDidExtraLibsChangeSoon())}}}setExtraLibs(e){for(const t in this._extraLibs)this._removedExtraLibs[t]=this._extraLibs[t].version;if(this._extraLibs=Object.create(null),e&&e.length>0)for(const t of e){const i=t.filePath||`ts:extralib-${Math.random().toString(36).substring(2,15)}`,n=t.content;let s=1;this._removedExtraLibs[i]&&(s=this._removedExtraLibs[i]+1),this._extraLibs[i]={content:n,version:s}}this._fireOnDidExtraLibsChangeSoon()}_fireOnDidExtraLibsChangeSoon(){this._onDidExtraLibsChangeTimeout===-1&&(this._onDidExtraLibsChangeTimeout=window.setTimeout(()=>{this._onDidExtraLibsChangeTimeout=-1,this._onDidExtraLibsChange.fire(void 0)},0))}getCompilerOptions(){return this._compilerOptions}setCompilerOptions(e){this._compilerOptions=e||Object.create(null),this._onDidChange.fire(void 0)}getDiagnosticsOptions(){return this._diagnosticsOptions}setDiagnosticsOptions(e){this._diagnosticsOptions=e||Object.create(null),this._onDidChange.fire(void 0)}setWorkerOptions(e){this._workerOptions=e||Object.create(null),this._onDidChange.fire(void 0)}setInlayHintsOptions(e){this._inlayHintsOptions=e||Object.create(null),this._onDidChange.fire(void 0)}setMaximumWorkerIdleTime(e){}setEagerModelSync(e){this._eagerModelSync=e}getEagerModelSync(){return this._eagerModelSync}setModeConfiguration(e){this._modeConfiguration=e||Object.create(null),this._onDidChange.fire(void 0)}}const rUe=oUe,Nle={completionItems:!0,hovers:!0,documentSymbols:!0,definitions:!0,references:!0,documentHighlights:!0,rename:!0,diagnostics:!0,documentRangeFormattingEdits:!0,signatureHelp:!0,onTypeFormattingEdits:!0,codeActions:!0,inlayHints:!0},Tle=new Ile({allowNonTsExtensions:!0,target:99},{noSemanticValidation:!1,noSyntaxValidation:!1,onlyVisible:!1},{},{},Nle),Rle=new Ile({allowNonTsExtensions:!0,allowJs:!0,target:99},{noSemanticValidation:!0,noSyntaxValidation:!1,onlyVisible:!1},{},{},Nle),aUe=()=>wP().then(o=>o.getTypeScriptWorker()),lUe=()=>wP().then(o=>o.getJavaScriptWorker());function wP(){return Pe(()=>import("./tsMode-D0HRyvms.js"),__vite__mapDeps([44,40,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28]))}ye.onLanguage("typescript",()=>wP().then(o=>o.setupTypeScript(Tle)));ye.onLanguage("javascript",()=>wP().then(o=>o.setupJavaScript(Rle)));const cUe=Object.freeze(Object.defineProperty({__proto__:null,JsxEmit:Lle,ModuleKind:Sle,ModuleResolutionKind:Ele,NewLineKind:kle,ScriptTarget:Dle,getJavaScriptWorker:lUe,getTypeScriptWorker:aUe,javascriptDefaults:Rle,typescriptDefaults:Tle,typescriptVersion:rUe},Symbol.toStringTag,{value:"Module"})),sQ="__monacoFindWidgetTabIndexPatchApplied",U1="__monacoFindWidgetOriginalTabIndex";function oQ(o,e){const t=o==null?void 0:o._domNode;if(!t)return;const i=t.querySelectorAll('input, textarea, [tabindex], [role="button"], [role="checkbox"]');for(const n of i)if(n instanceof HTMLElement)if(e){if(!(U1 in n.dataset))continue;const s=n.dataset[U1];s===""?n.removeAttribute("tabindex"):n.tabIndex=Number(s),delete n.dataset[U1]}else U1 in n.dataset||(n.dataset[U1]=n.getAttribute("tabindex")??""),n.tabIndex=-1}if(!eh[sQ]){const o=eh.prototype._reveal,e=eh.prototype._hide;eh.prototype._reveal=function(...t){o.apply(this,t),oQ(this,!0)},eh.prototype._hide=function(...t){e.apply(this,t),oQ(this,!1)},eh[sQ]=!0}const dUe=Object.freeze(Object.defineProperty({__proto__:null,CancellationTokenSource:FVe,Emitter:H_,KeyCode:WVe,KeyMod:BVe,MarkerSeverity:jl,MarkerTag:$H,Position:bf,Range:DL,Selection:HVe,SelectionDirection:VVe,Token:jVe,Uri:dz,css:qze,editor:bg,html:Jze,json:sUe,languages:ye,lsp:$ze,typescript:cUe},Symbol.toStringTag,{value:"Module"}));function rQ(o,e){(e==null||e>o.length)&&(e=o.length);for(var t=0,i=Array(e);tye.registerSignatureHelpProvider(ss(e.documentSelector),new jje(this._connection,e))))}},jje=class{constructor(o,e){Fe(this,"signatureHelpTriggerCharacters"),Fe(this,"signatureHelpRetriggerCharacters"),this._client=o,this._capabilities=e,this.signatureHelpTriggerCharacters=e.triggerCharacters,this.signatureHelpRetriggerCharacters=e.retriggerCharacters}async provideSignatureHelp(o,e,t,i){const n=this._client.bridge.translate(o,e),s=await this._client.server.textDocumentSignatureHelp({textDocument:n.textDocument,position:n.position,context:{triggerKind:Nje(i.triggerKind),triggerCharacter:i.triggerCharacter,isRetrigger:i.isRetrigger}});return s?{value:{signatures:s.signatures.map(r=>{var a;return{label:r.label,documentation:YX(r.documentation),parameters:((a=r.parameters)==null?void 0:a.map(l=>({label:l.label,documentation:YX(l.documentation)})))||[],activeParameter:r.activeParameter}}),activeSignature:s.activeSignature||0,activeParameter:s.activeParameter||0},dispose:()=>{}}:null}};function YX(o){if(o)return typeof o=="string"?o:{value:o.value}}var zje=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{definition:{dynamicRegistration:!0,linkSupport:!0}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentDefinition,!0,e=>ye.registerDefinitionProvider(ss(e.documentSelector),new Uje(this._connection,e))))}},Uje=class{constructor(o,e){this._client=o,this._capabilities=e}async provideDefinition(o,e,t){const i=this._client.bridge.translate(o,e),n=await this._client.server.textDocumentDefinition({textDocument:i.textDocument,position:i.position});return n?Array.isArray(n)?n.map(s=>sf(s,this._client)):sf(n,this._client):null}},$je=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{declaration:{dynamicRegistration:!0,linkSupport:!0}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentDeclaration,!0,e=>ye.registerDeclarationProvider(ss(e.documentSelector),new qje(this._connection,e))))}},qje=class{constructor(o,e){this._client=o,this._capabilities=e}async provideDeclaration(o,e,t){const i=this._client.bridge.translate(o,e),n=await this._client.server.textDocumentDeclaration({textDocument:i.textDocument,position:i.position});return n?Array.isArray(n)?n.map(s=>sf(s,this._client)):sf(n,this._client):null}},Kje=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{typeDefinition:{dynamicRegistration:!0,linkSupport:!0}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentTypeDefinition,!0,e=>ye.registerTypeDefinitionProvider(ss(e.documentSelector),new Gje(this._connection,e))))}},Gje=class{constructor(o,e){this._client=o,this._capabilities=e}async provideTypeDefinition(o,e,t){const i=this._client.bridge.translate(o,e),n=await this._client.server.textDocumentTypeDefinition({textDocument:i.textDocument,position:i.position});return n?Array.isArray(n)?n.map(s=>sf(s,this._client)):sf(n,this._client):null}},Zje=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{implementation:{dynamicRegistration:!0,linkSupport:!0}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentImplementation,!0,e=>ye.registerImplementationProvider(ss(e.documentSelector),new Yje(this._connection,e))))}},Yje=class{constructor(o,e){this._client=o,this._capabilities=e}async provideImplementation(o,e,t){const i=this._client.bridge.translate(o,e),n=await this._client.server.textDocumentImplementation({textDocument:i.textDocument,position:i.position});return n?Array.isArray(n)?n.map(s=>sf(s,this._client)):sf(n,this._client):null}},Xje=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{references:{dynamicRegistration:!0}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentReferences,!0,e=>ye.registerReferenceProvider(ss(e.documentSelector),new Qje(this._connection,e))))}},Qje=class{constructor(o,e){this._client=o,this._capabilities=e}async provideReferences(o,e,t,i){const n=this._client.bridge.translate(o,e),s=await this._client.server.textDocumentReferences({textDocument:n.textDocument,position:n.position,context:{includeDeclaration:t.includeDeclaration}});return s?s.map(r=>{const a=this._client.bridge.translateBackRange({uri:r.uri},r.range);return{uri:a.textModel.uri,range:a.range}}):null}},Jje=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{documentHighlight:{dynamicRegistration:!0}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentDocumentHighlight,!0,e=>ye.registerDocumentHighlightProvider(ss(e.documentSelector),new eze(this._connection,e))))}},eze=class{constructor(o,e){this._client=o,this._capabilities=e}async provideDocumentHighlights(o,e,t){const i=this._client.bridge.translate(o,e),n=await this._client.server.textDocumentDocumentHighlight({textDocument:i.textDocument,position:i.position});return n?n.map(s=>({range:this._client.bridge.translateBackRange(i.textDocument,s.range).range,kind:Cje(s.kind)})):null}},tze=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{documentSymbol:{dynamicRegistration:!0,hierarchicalDocumentSymbolSupport:!0,symbolKind:{valueSet:Array.from(rle.keys())},tagSupport:{valueSet:[ile.Deprecated]}}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentDocumentSymbol,!0,e=>ye.registerDocumentSymbolProvider(ss(e.documentSelector),new ize(this._connection,e))))}},ize=class{constructor(o,e){this._client=o,this._capabilities=e}async provideDocumentSymbols(o,e){const t=this._client.bridge.translate(o,new bf(1,1)),i=await this._client.server.textDocumentDocumentSymbol({textDocument:t.textDocument});return i?Array.isArray(i)&&i.length>0?"location"in i[0]?i.map(n=>nze(n,this._client)):i.map(n=>hle(n,this._client,t.textDocument)):[]:null}};function hle(o,e,t){var i,n;return{name:o.name,detail:o.detail||"",kind:ale(o.kind),tags:((i=o.tags)==null?void 0:i.map(s=>lle(s)).filter(s=>s!==void 0))||[],range:e.bridge.translateBackRange(t,o.range).range,selectionRange:e.bridge.translateBackRange(t,o.selectionRange).range,children:((n=o.children)==null?void 0:n.map(s=>hle(s,e,t)))||[]}}function nze(o,e){var t;return{name:o.name,detail:"",kind:ale(o.kind),tags:((t=o.tags)==null?void 0:t.map(i=>lle(i)).filter(i=>i!==void 0))||[],range:e.bridge.translateBackRange({uri:o.location.uri},o.location.range).range,selectionRange:e.bridge.translateBackRange({uri:o.location.uri},o.location.range).range,children:[]}}var sze=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{rename:{dynamicRegistration:!0,prepareSupport:!0}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentRename,!0,e=>ye.registerRenameProvider(ss(e.documentSelector),new oze(this._connection,e))))}},oze=class{constructor(o,e){this._client=o,this._capabilities=e}async provideRenameEdits(o,e,t,i){const n=this._client.bridge.translate(o,e),s=await this._client.server.textDocumentRename({textDocument:n.textDocument,position:n.position,newName:t});return s?rze(s,this._client):null}async resolveRenameLocation(o,e,t){if(!this._capabilities.prepareProvider)return null;const i=this._client.bridge.translate(o,e),n=await this._client.server.textDocumentPrepareRename({textDocument:i.textDocument,position:i.position});if(!n)return null;if("range"in n&&"placeholder"in n)return{range:this._client.bridge.translateBackRange(i.textDocument,n.range).range,text:n.placeholder};if("defaultBehavior"in n)return null;if("start"in n&&"end"in n){const s=this._client.bridge.translateBackRange(i.textDocument,n).range;return{range:s,text:o.getValueInRange(s)}}return null}};function rze(o,e){const t=[];if(o.changes)for(const i in o.changes){const n=o.changes[i];for(const s of n){const r=e.bridge.translateBackRange({uri:i},s.range);t.push({resource:r.textModel.uri,versionId:void 0,textEdit:{range:r.range,text:s.newText}})}}if(o.documentChanges){for(const i of o.documentChanges)if("textDocument"in i){const n=i.textDocument.uri;for(const s of i.edits){const r=e.bridge.translateBackRange({uri:n},s.range);t.push({resource:r.textModel.uri,versionId:i.textDocument.version,textEdit:{range:r.range,text:s.newText}})}}}return{edits:t}}var aze=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{codeAction:{dynamicRegistration:!0,codeActionLiteralSupport:{codeActionKind:{valueSet:Array.from(nle.keys())}},isPreferredSupport:!0,disabledSupport:!0,dataSupport:!0,resolveSupport:{properties:["edit"]}}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentCodeAction,!0,e=>ye.registerCodeActionProvider(ss(e.documentSelector),new lze(this._connection,e))))}},lze=class{constructor(o,e){Fe(this,"resolveCodeAction"),this._client=o,this._capabilities=e,e.resolveProvider&&(this.resolveCodeAction=async(t,i)=>{if(t._lspAction){const n=await this._client.server.codeActionResolve(t._lspAction);n.edit&&(t.edit=XX(n.edit,this._client)),n.command&&(t.command=Cw(n.command))}return t})}async provideCodeActions(o,e,t,i){const n=this._client.bridge.translate(o,e.getStartPosition()),s=await this._client.server.textDocumentCodeAction({textDocument:n.textDocument,range:this._client.bridge.translateRange(o,e),context:{diagnostics:t.markers.map(r=>({range:this._client.bridge.translateRange(o,DL.lift(r)),message:r.message,severity:Lje(r.severity)})),triggerKind:uje(t.trigger)}});return s?{actions:(Array.isArray(s)?s:[s]).map(r=>{var a;if("title"in r&&!("kind"in r)){const l=r;return{title:l.title,command:Cw(l)}}else{const l=r;return{title:l.title,kind:dje(l.kind),isPreferred:l.isPreferred,disabled:(a=l.disabled)==null?void 0:a.reason,edit:l.edit?XX(l.edit,this._client):void 0,command:Cw(l.command),_lspAction:l}}}),dispose:()=>{}}:null}};function XX(o,e){const t=[];if(o.changes)for(const i in o.changes){const n=o.changes[i];for(const s of n){const r=e.bridge.translateBackRange({uri:i},s.range);t.push({resource:r.textModel.uri,versionId:void 0,textEdit:{range:r.range,text:s.newText}})}}if(o.documentChanges){for(const i of o.documentChanges)if("textDocument"in i){const n=i.textDocument.uri;for(const s of i.edits){const r=e.bridge.translateBackRange({uri:n},s.range);t.push({resource:r.textModel.uri,versionId:i.textDocument.version??void 0,textEdit:{range:r.range,text:s.newText}})}}}return{edits:t}}var cze=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{codeLens:{dynamicRegistration:!0}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentCodeLens,!0,e=>ye.registerCodeLensProvider(ss(e.documentSelector),new dze(this._connection,e))))}},dze=class{constructor(o,e){this._client=o,this._capabilities=e}async provideCodeLenses(o,e){const t=this._client.bridge.translate(o,new bf(1,1)),i=await this._client.server.textDocumentCodeLens({textDocument:t.textDocument});return i?{lenses:i.map(n=>({range:tm(this._client.bridge.translateBackRange(t.textDocument,n.range),o).range,command:Cw(n.command),_lspCodeLens:n})),dispose:()=>{}}:null}async resolveCodeLens(o,e,t){if(!this._capabilities.resolveProvider||!e._lspCodeLens)return e;const i=await this._client.server.codeLensResolve(e._lspCodeLens);return i.command&&(e.command={id:i.command.command,title:i.command.title,arguments:i.command.arguments}),e}},hze=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{documentLink:{dynamicRegistration:!0,tooltipSupport:!0}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentDocumentLink,!0,e=>ye.registerLinkProvider(ss(e.documentSelector),new uze(this._connection,e))))}},uze=class{constructor(o,e){this._client=o,this._capabilities=e}async provideLinks(o,e){const t=this._client.bridge.translate(o,new bf(1,1)),i=await this._client.server.textDocumentDocumentLink({textDocument:t.textDocument});return i?{links:i.map(n=>({range:this._client.bridge.translateBackRange(t.textDocument,n.range).range,url:n.target,tooltip:n.tooltip}))}:null}async resolveLink(o,e){return this._capabilities.resolveProvider,o}},gze=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{formatting:{dynamicRegistration:!0}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentFormatting,!0,e=>ye.registerDocumentFormattingEditProvider(ss(e.documentSelector),new fze(this._connection,e))))}},fze=class{constructor(o,e){this._client=o,this._capabilities=e}async provideDocumentFormattingEdits(o,e,t){const i=this._client.bridge.translate(o,new bf(1,1)),n=await this._client.server.textDocumentFormatting({textDocument:i.textDocument,options:{tabSize:e.tabSize,insertSpaces:e.insertSpaces}});return n?n.map(s=>({range:this._client.bridge.translateBackRange(i.textDocument,s.range).range,text:s.newText})):null}},pze=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{rangeFormatting:{dynamicRegistration:!0}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentRangeFormatting,!0,e=>ye.registerDocumentRangeFormattingEditProvider(ss(e.documentSelector),new mze(this._connection,e))))}},mze=class{constructor(o,e){this._client=o,this._capabilities=e}async provideDocumentRangeFormattingEdits(o,e,t,i){const n=this._client.bridge.translate(o,e.getStartPosition()),s=await this._client.server.textDocumentRangeFormatting({textDocument:n.textDocument,range:this._client.bridge.translateRange(o,e),options:{tabSize:t.tabSize,insertSpaces:t.insertSpaces}});return s?s.map(r=>({range:this._client.bridge.translateBackRange(n.textDocument,r.range).range,text:r.newText})):null}},_ze=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{onTypeFormatting:{dynamicRegistration:!0}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentOnTypeFormatting,!0,e=>ye.registerOnTypeFormattingEditProvider(ss(e.documentSelector),new bze(this._connection,e))))}},bze=class{constructor(o,e){Fe(this,"autoFormatTriggerCharacters"),this._client=o,this._capabilities=e,this.autoFormatTriggerCharacters=[e.firstTriggerCharacter,...e.moreTriggerCharacter||[]]}async provideOnTypeFormattingEdits(o,e,t,i,n){const s=this._client.bridge.translate(o,e),r=await this._client.server.textDocumentOnTypeFormatting({textDocument:s.textDocument,position:s.position,ch:t,options:{tabSize:i.tabSize,insertSpaces:i.insertSpaces}});return r?r.map(a=>({range:this._client.bridge.translateBackRange(s.textDocument,a.range).range,text:a.newText})):null}},vze=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{foldingRange:{dynamicRegistration:!0,rangeLimit:5e3,lineFoldingOnly:!1,foldingRangeKind:{valueSet:[ww.Comment,ww.Imports,ww.Region]}}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentFoldingRange,!0,e=>ye.registerFoldingRangeProvider(ss(e.documentSelector),new wze(this._connection,e))))}},wze=class{constructor(o,e){this._client=o,this._capabilities=e}async provideFoldingRanges(o,e,t){const i=this._client.bridge.translate(o,new bf(1,1)),n=await this._client.server.textDocumentFoldingRange({textDocument:i.textDocument});return n?n.map(s=>({start:s.startLine+1,end:s.endLine+1,kind:xje(s.kind)})):null}},Cze=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{selectionRange:{dynamicRegistration:!0}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentSelectionRange,!0,e=>ye.registerSelectionRangeProvider(ss(e.documentSelector),new yze(this._connection,e))))}},yze=class{constructor(o,e){this._client=o,this._capabilities=e}async provideSelectionRanges(o,e,t){const i=this._client.bridge.translate(o,e[0]),n=await this._client.server.textDocumentSelectionRange({textDocument:i.textDocument,positions:e.map(s=>this._client.bridge.translate(o,s).position)});return n?n.map(s=>this.convertSelectionRange(s,i.textDocument)):null}convertSelectionRange(o,e){const t=[];let i=o;for(;i;)t.push({range:this._client.bridge.translateBackRange(e,i.range).range}),i=i.parent;return t}},xze=class extends mn{constructor(o){super(),Fe(this,"_providers",new Set),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{inlayHint:{dynamicRegistration:!0,resolveSupport:{properties:["tooltip","textEdits","label.tooltip","label.location","label.command"]}}},workspace:{inlayHint:{refreshSupport:!0}}})),this._register(this._connection.connection.registerRequestHandler(PS.client.workspaceInlayHintRefresh,async()=>{for(const e of this._providers)e.refresh();return{ok:null}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentInlayHint,!0,e=>{const t=new Sze(this._connection,e);this._providers.add(t);const i=ye.registerInlayHintsProvider(ss(e.documentSelector),t);return{dispose:()=>{this._providers.delete(t),i.dispose()}}}))}},Sze=class{constructor(o,e){Fe(this,"_onDidChangeInlayHints",new H_),Fe(this,"onDidChangeInlayHints",this._onDidChangeInlayHints.event),Fe(this,"resolveInlayHint"),this._client=o,this._capabilities=e,e.resolveProvider&&(this.resolveInlayHint=async(t,i)=>{const n=await this._client.server.inlayHintResolve(t._lspInlayHint);return n.tooltip&&(t.tooltip=YH(n.tooltip)),n.label!==t._lspInlayHint.label&&(t.label=QX(n.label)),n.textEdits&&(t.textEdits=n.textEdits.map(s=>({range:this._client.bridge.translateBackRange({uri:t._targetUri},s.range).range,text:s.newText}))),t})}refresh(){this._onDidChangeInlayHints.fire()}async provideInlayHints(o,e,t){const i=this._client.bridge.translate(o,e.getStartPosition()),n=await Lze(async()=>await this._client.server.textDocumentInlayHint({textDocument:i.textDocument,range:this._client.bridge.translateRange(o,e)}));return n?{hints:n.map(s=>{var r;return{label:QX(s.label),position:tm(this._client.bridge.translateBack(i.textDocument,s.position),o).position,kind:Rje(s.kind),tooltip:YH(s.tooltip),paddingLeft:s.paddingLeft,paddingRight:s.paddingRight,textEdits:(r=s.textEdits)==null?void 0:r.map(a=>({range:tm(this._client.bridge.translateBackRange(i.textDocument,a.range),o).range,text:a.newText})),_lspInlayHint:s,_targetUri:i.textDocument.uri}}),dispose:()=>{}}:null}};async function Lze(o){for(let e=3;;e--)try{return await o()}catch(t){if(t.message==="content modified"&&e>0)continue;throw t}}function QX(o){return typeof o=="string"?o:o.map(e=>{const t={label:e.value,tooltip:YH(e.tooltip),command:Cw(e.command)};return e.location&&(t.location={uri:dz.parse(e.location.uri),range:new DL(e.location.range.start.line+1,e.location.range.start.character+1,e.location.range.end.line+1,e.location.range.end.character+1)}),t})}function YH(o){if(o)return typeof o=="string"?o:{value:o.value}}var kze=class extends mn{constructor(o){super(),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{semanticTokens:{dynamicRegistration:!0,requests:{range:!0,full:{delta:!0}},tokenTypes:["namespace","type","class","enum","interface","struct","typeParameter","parameter","variable","property","enumMember","event","function","method","macro","keyword","modifier","comment","string","number","regexp","operator","decorator"],tokenModifiers:["declaration","definition","readonly","static","deprecated","abstract","async","modification","documentation","defaultLibrary"],formats:[cje.Relative],overlappingTokenSupport:!1,multilineTokenSupport:!0}}})),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentSemanticTokensFull,!0,e=>ye.registerDocumentSemanticTokensProvider(ss(e.documentSelector),new Dze(this._connection,e))))}},Dze=class{constructor(o,e){this._client=o,this._capabilities=e}getLegend(){return{tokenTypes:this._capabilities.legend.tokenTypes,tokenModifiers:this._capabilities.legend.tokenModifiers}}releaseDocumentSemanticTokens(o){}async provideDocumentSemanticTokens(o,e,t){const i=this._client.bridge.translate(o,o.getPositionAt(0)),n=this._capabilities.full;if(e&&n&&typeof n=="object"&&n.delta){const r=await this._client.server.textDocumentSemanticTokensFullDelta({textDocument:i.textDocument,previousResultId:e});return r?"edits"in r?{resultId:r.resultId,edits:r.edits.map(a=>({start:a.start,deleteCount:a.deleteCount,data:a.data?new Uint32Array(a.data):void 0}))}:{resultId:r.resultId,data:new Uint32Array(r.data)}:null}const s=await this._client.server.textDocumentSemanticTokensFull({textDocument:i.textDocument});return s?{resultId:s.resultId,data:new Uint32Array(s.data)}:null}async provideDocumentSemanticTokensEdits(o,e,t){return this.provideDocumentSemanticTokens(o,e,t)}},Eze=class extends mn{constructor(o){super(),Fe(this,"_diagnosticsMarkerOwner","lsp"),Fe(this,"_pullDiagnosticProviders",new Map),this._connection=o,this._register(this._connection.capabilities.addStaticClientCapabilities({textDocument:{publishDiagnostics:{relatedInformation:!0,tagSupport:{valueSet:[...cle.keys()]},versionSupport:!0,codeDescriptionSupport:!0,dataSupport:!0},diagnostic:{dynamicRegistration:!0,relatedDocumentSupport:!0}}})),this._register(this._connection.connection.registerNotificationHandler(PS.client.textDocumentPublishDiagnostics,e=>this._handlePublishDiagnostics(e))),this._register(this._connection.capabilities.registerCapabilityHandler(ft.textDocumentDiagnostic,!0,e=>{const t=new uz;for(const i of bg.getModels())this._addPullDiagnosticProvider(i,e,t);return t.add(bg.onDidCreateModel(i=>{this._addPullDiagnosticProvider(i,e,t)})),t}))}_addPullDiagnosticProvider(o,e,t){if(o.getLanguageId(),!Mje(o,e.documentSelector))return;const i=new Ize(o,this._connection,this._diagnosticsMarkerOwner,e);this._pullDiagnosticProviders.set(o,i),t.add(i),t.add(o.onWillDispose(()=>{this._pullDiagnosticProviders.delete(o)}))}_handlePublishDiagnostics(o){const e=o.uri;try{const t=this._connection.bridge.translateBack({uri:e},{line:0,character:0}).textModel;if(!t||t.isDisposed())return;const i=o.diagnostics.map(n=>ZH(n));bg.setModelMarkers(t,this._diagnosticsMarkerOwner,i)}catch(t){console.debug(`Could not set diagnostics for ${e}:`,t)}}},Ize=class extends mn{constructor(o,e,t,i){super(),Fe(this,"_updateHandle"),Fe(this,"_previousResultId"),this._model=o,this._connection=e,this._markerOwner=t,this._capability=i,this._register(this._model.onDidChangeContent(()=>{this._scheduleDiagnosticUpdate()})),this._scheduleDiagnosticUpdate()}_scheduleDiagnosticUpdate(){this._updateHandle!==void 0&&clearTimeout(this._updateHandle),this._updateHandle=window.setTimeout(()=>{this._updateHandle=void 0,this._requestDiagnostics()},500)}async _requestDiagnostics(){if(!this._model.isDisposed())try{const o=this._connection.bridge.translate(this._model,new bf(1,1)),e=await this._connection.server.textDocumentDiagnostic({textDocument:o.textDocument,identifier:this._capability.identifier,previousResultId:this._previousResultId});if(this._model.isDisposed())return;this._handleDiagnosticReport(e)}catch(o){console.error("Error requesting diagnostics:",o)}}_handleDiagnosticReport(o){if(o.kind==="full"){this._previousResultId=o.resultId;const e=o.items.map(t=>ZH(t));bg.setModelMarkers(this._model,this._markerOwner,e),"relatedDocuments"in o&&o.relatedDocuments&&this._handleRelatedDocuments(o.relatedDocuments)}else o.kind==="unchanged"&&(this._previousResultId=o.resultId)}_handleRelatedDocuments(o){for(const[e,t]of Object.entries(o))try{const i=this._connection.bridge.translateBack({uri:e},{line:0,character:0}).textModel;if(!i||i.isDisposed())continue;if(t.kind==="full"){const n=t.items.map(s=>ZH(s));bg.setModelMarkers(i,this._markerOwner,n)}}catch(i){console.debug(`Could not set related diagnostics for ${e}:`,i)}}dispose(){this._updateHandle!==void 0&&(clearTimeout(this._updateHandle),this._updateHandle=void 0),super.dispose()}},Nze=class{constructor(o,e,t,i){this.server=o,this.bridge=e,this.capabilities=t,this.connection=i}},Tze=class extends mn{constructor(o){super(),Fe(this,"_staticCapabilities",new Set),Fe(this,"_dynamicFromStatic",Pze.create()),Fe(this,"_registrations",new Map),Fe(this,"_serverCapabilities"),this._connection=o,this._register(this._connection.registerRequestHandler(PS.client.clientRegisterCapability,async e=>{for(const t of e.registrations){const i=eQ(t.method),n=new JX(t.id,i,t.registerOptions,!1);this._registerCapabilityOptions(n)}return{ok:null}})),this._register(this._connection.registerRequestHandler(PS.client.clientUnregisterCapability,async e=>{for(const t of e.unregisterations){const i=eQ(t.method),n=this._registrations.get(i),s=n==null?void 0:n.registrations.get(t.id);if(!s)throw new Error(`No registration for method ${t.method} with id ${t.id}`);s==null||s.handlerDisposables.forEach(r=>r.dispose()),n==null||n.registrations.delete(t.id)}return{ok:null}}))}_registerCapabilityOptions(o){let e=this._registrations.get(o.capability);if(e||(e=new tQ,this._registrations.set(o.capability,e)),e.registrations.has(o.id))throw new Error(`Handler for method ${o.capability.method} with id ${o.id} already registered`);e.registrations.set(o.id,o);for(const t of e.handlers)!t.handleStaticCapability&&o.isFromStatic||o.handlerDisposables.set(t,t.handler(o.options))}setServerCapabilities(o){if(this._serverCapabilities)throw new Error("Server capabilities already set");this._serverCapabilities=o;for(const e of Object.values(ft)){const t=this._dynamicFromStatic.getOptions(e,o);t&&this._registerCapabilityOptions(new JX(e.method,e,t,!0))}}getClientCapabilities(){const o={};for(const e of this._staticCapabilities)gle(o,e.cap);return o}addStaticClientCapabilities(o){const e={cap:o};return this._staticCapabilities.add(e),{dispose:()=>{this._staticCapabilities.delete(e)}}}registerCapabilityHandler(o,e,t){let i=this._registrations.get(o);i||(i=new tQ,this._registrations.set(o,i));const n=new Rze(o,e,t);i.handlers.add(n);for(const s of i.registrations.values())!n.handleStaticCapability&&s.isFromStatic||s.handlerDisposables.set(n,t(s.options));return{dispose:()=>{i.handlers.delete(n);for(const s of i.registrations.values()){const r=s.handlerDisposables.get(n);r&&(r.dispose(),s.handlerDisposables.delete(n))}}}}},Rze=class{constructor(o,e,t){this.capability=o,this.handleStaticCapability=e,this.handler=t}},JX=class{constructor(o,e,t,i){Fe(this,"handlerDisposables",new Map),this.id=o,this.capability=e,this.options=t,this.isFromStatic=i}};const Mze=new Map([...Object.values(ft)].map(o=>[o.method,o]));function eQ(o){const e=Mze.get(o);if(!e)throw new Error(`No capability found for method ${o}`);return e}var tQ=class{constructor(){Fe(this,"handlers",new Set),Fe(this,"registrations",new Map)}},Pze=class ule{constructor(){Fe(this,"_mappings",new Map)}static create(){const e=new ule;return e.set(ft.textDocumentDidChange,t=>{if(t.textDocumentSync!==void 0)return typeof t.textDocumentSync=="object"?{syncKind:t.textDocumentSync.change??rje.None,documentSelector:null}:{syncKind:t.textDocumentSync,documentSelector:null}}),e.set(ft.textDocumentCompletion,t=>t.completionProvider),e.set(ft.textDocumentHover,t=>t.hoverProvider),e.set(ft.textDocumentSignatureHelp,t=>t.signatureHelpProvider),e.set(ft.textDocumentDefinition,t=>t.definitionProvider),e.set(ft.textDocumentReferences,t=>t.referencesProvider),e.set(ft.textDocumentDocumentHighlight,t=>t.documentHighlightProvider),e.set(ft.textDocumentDocumentSymbol,t=>t.documentSymbolProvider),e.set(ft.textDocumentCodeAction,t=>t.codeActionProvider),e.set(ft.textDocumentCodeLens,t=>t.codeLensProvider),e.set(ft.textDocumentDocumentLink,t=>t.documentLinkProvider),e.set(ft.textDocumentFormatting,t=>t.documentFormattingProvider),e.set(ft.textDocumentRangeFormatting,t=>t.documentRangeFormattingProvider),e.set(ft.textDocumentOnTypeFormatting,t=>t.documentOnTypeFormattingProvider),e.set(ft.textDocumentRename,t=>t.renameProvider),e.set(ft.textDocumentFoldingRange,t=>t.foldingRangeProvider),e.set(ft.textDocumentDeclaration,t=>t.declarationProvider),e.set(ft.textDocumentTypeDefinition,t=>t.typeDefinitionProvider),e.set(ft.textDocumentImplementation,t=>t.implementationProvider),e.set(ft.textDocumentDocumentColor,t=>t.colorProvider),e.set(ft.textDocumentSelectionRange,t=>t.selectionRangeProvider),e.set(ft.textDocumentLinkedEditingRange,t=>t.linkedEditingRangeProvider),e.set(ft.textDocumentPrepareCallHierarchy,t=>t.callHierarchyProvider),e.set(ft.textDocumentSemanticTokensFull,t=>t.semanticTokensProvider),e.set(ft.textDocumentInlayHint,t=>t.inlayHintProvider),e.set(ft.textDocumentInlineValue,t=>t.inlineValueProvider),e.set(ft.textDocumentDiagnostic,t=>t.diagnosticProvider),e.set(ft.textDocumentMoniker,t=>t.monikerProvider),e.set(ft.textDocumentPrepareTypeHierarchy,t=>t.typeHierarchyProvider),e.set(ft.workspaceSymbol,t=>t.workspaceSymbolProvider),e.set(ft.workspaceExecuteCommand,t=>t.executeCommandProvider),e}set(e,t){if(this._mappings.has(e.method))throw new Error(`Capability for method ${e.method} already registered`);this._mappings.set(e.method,t)}getOptions(e,t){const i=this._mappings.get(e.method);if(i)return i(t)}};function gle(o,e){for(const t of Object.keys(e)){const i=e[t];if(i===void 0)continue;const n=o[t];if(n===void 0){o[t]=i;continue}if(typeof i!="object"||i===null){o[t]=i;continue}if(typeof n!="object"||n===null){o[t]=i;continue}gle(n,i)}}var Aze=class extends mn{constructor(o,e){super(),Fe(this,"_managedModels",new Map),Fe(this,"_managedModelsReverse",new Map),Fe(this,"_started",!1),this._server=o,this._capabilities=e,this._register(this._capabilities.addStaticClientCapabilities({textDocument:{synchronization:{dynamicRegistration:!0,willSave:!1,willSaveWaitUntil:!1,didSave:!1}}})),this._register(e.registerCapabilityHandler(ft.textDocumentDidChange,!0,t=>{if(this._started)return{dispose:()=>{}};this._started=!0,this._register(bg.onDidCreateModel(i=>{this._getOrCreateManagedModel(i)}));for(const i of bg.getModels())this._getOrCreateManagedModel(i);return{dispose:()=>{}}}))}_getOrCreateManagedModel(o){if(!this._started)throw new Error("Not started");const e=o.uri.toString(!0).toLowerCase();let t=this._managedModels.get(o);return t||(t=new Oze(o,this._server),this._managedModels.set(o,t),this._managedModelsReverse.set(e,o)),o.onWillDispose(()=>{t.dispose(),this._managedModels.delete(o),this._managedModelsReverse.delete(e)}),t}translateBack(o,e){const t=o.uri.toLowerCase(),i=this._managedModelsReverse.get(t);if(!i)throw new Error(`No text model for uri ${t}`);return{textModel:i,position:new bf(e.line+1,e.character+1)}}translateBackRange(o,e){const t=o.uri.toLowerCase(),i=this._managedModelsReverse.get(t);if(!i)throw new Error(`No text model for uri ${t}`);return{textModel:i,range:new DL(e.start.line+1,e.start.character+1,e.end.line+1,e.end.character+1)}}translate(o,e){return{textDocument:{uri:o.uri.toString(!0)},position:{line:e.lineNumber-1,character:e.column-1}}}translateRange(o,e){return{start:{line:e.startLineNumber-1,character:e.startColumn-1},end:{line:e.endLineNumber-1,character:e.endColumn-1}}}},Oze=class extends mn{constructor(o,e){super(),this._textModel=o,this._api=e;const t=o.uri.toString(!0).toLowerCase();this._api.textDocumentDidOpen({textDocument:{languageId:o.getLanguageId(),uri:t,version:o.getVersionId(),text:o.getValue()}}),this._register(o.onDidChangeContent(i=>{const n=i.changes.map(s=>Fze(s));this._api.textDocumentDidChange({textDocument:{uri:t,version:o.getVersionId()},contentChanges:n})})),this._register({dispose:()=>{this._api.textDocumentDidClose({textDocument:{uri:t}})}})}};function Fze(o){return{range:Wze(o.range),rangeLength:o.rangeLength,text:o.text}}function Wze(o){return{start:{line:o.startLineNumber-1,character:o.startColumn-1},end:{line:o.endLineNumber-1,character:o.endColumn-1}}}var Bze=class{constructor(o){Fe(this,"_connection"),Fe(this,"_capabilitiesRegistry"),Fe(this,"_bridge"),Fe(this,"_initPromise");const e=qH.fromTransport(o),t=PS.getServer(e,{});e.startListen(),this._capabilitiesRegistry=new Tze(e),this._bridge=new Aze(t.server,this._capabilitiesRegistry),this._connection=new Nze(t.server,this._bridge,this._capabilitiesRegistry,e),this.createFeatures(),this._initPromise=this._init()}async _init(){const o=await this._connection.server.initialize({processId:null,capabilities:this._capabilitiesRegistry.getClientCapabilities(),rootUri:null});this._connection.server.initialized({}),this._capabilitiesRegistry.setServerCapabilities(o.capabilities)}createFeatures(){const o=new uz;return o.add(new Pje(this._connection)),o.add(new Wje(this._connection)),o.add(new Vje(this._connection)),o.add(new zje(this._connection)),o.add(new $je(this._connection)),o.add(new Kje(this._connection)),o.add(new Zje(this._connection)),o.add(new Xje(this._connection)),o.add(new Jje(this._connection)),o.add(new tze(this._connection)),o.add(new sze(this._connection)),o.add(new aze(this._connection)),o.add(new cze(this._connection)),o.add(new hze(this._connection)),o.add(new gze(this._connection)),o.add(new pze(this._connection)),o.add(new _ze(this._connection)),o.add(new vze(this._connection)),o.add(new Cze(this._connection)),o.add(new xze(this._connection)),o.add(new kze(this._connection)),o.add(new Eze(this._connection)),o}},ev=null;typeof WebSocket<"u"?ev=WebSocket:typeof MozWebSocket<"u"?ev=MozWebSocket:typeof global<"u"?ev=global.WebSocket||global.MozWebSocket:typeof window<"u"?ev=window.WebSocket||window.MozWebSocket:typeof self<"u"&&(ev=self.WebSocket||self.MozWebSocket);var Hze=ev;function Vze(o){return"host"in o?{address:`${o.forceTls?"wss":"ws"}://${o.host}:${o.port}`}:o}var jze=class XH extends Kae{constructor(e){super(),Fe(this,"socket"),Fe(this,"errorEmitter",new hz),Fe(this,"onError",this.errorEmitter),this.socket=e,e.onmessage=t=>{try{const i=t.data;if(typeof i=="string"){const n=JSON.parse(i);this._dispatchReceivedMessage(n)}else throw new Error("Not supported")}catch(i){this.errorEmitter.fire({error:i})}},e.onclose=t=>{this._onConnectionClosed()}}static connectTo(e){const t=new Hze(Vze(e).address);return new Promise((i,n)=>{t.onerror=s=>{n(s)},t.onopen=()=>{i(new XH(t))}})}static fromWebSocket(e){return new XH(e)}close(){this.socket.close()}dispose(){this.close()}_sendImpl(e){const t=JSON.stringify(e);return new Promise((i,n)=>{this.socket.send(t,s=>{s?n(s):i()})})}toString(){return`${this.id}@${this.socket.url}`}},fle=class extends Kae{constructor(o,e=void 0,t=void 0){super(),Fe(this,"_windowLike"),Fe(this,"_source"),Fe(this,"_loadingState"),Fe(this,"_disposed",!1),Fe(this,"_messageHandler",({data:i,source:n})=>{this._source&&n!==this._source||typeof i=="object"&&i&&this._dispatchReceivedMessage(i)}),this._windowLike=o,this._source=e,this._loadingState=t,this._windowLike.addEventListener("message",this._messageHandler)}async _sendImpl(o){if(this._disposed)throw new Error("Transport is disposed");this._loadingState&&!this._loadingState.loaded&&await this._loadingState.onLoaded,this._windowLike.postMessage(o)}toString(){return`${this.id}@${this._windowLike}`}dispose(){this._disposed||(this._disposed=!0,this._windowLike.removeEventListener("message",this._messageHandler))}};function zze(o){if(typeof window>"u")throw new Error("call this function from the main browser thread");return new fle(o)}function Uze(o){if(typeof window>"u")throw new Error("call this function from the main browser thread");return new fle(o.contentWindow,o.contentWindow,{loaded:window.document.readyState==="complete",onLoaded:new Promise(e=>{window.addEventListener("load",()=>e())})})}const $ze=Object.freeze(Object.defineProperty({__proto__:null,MonacoLspClient:Bze,WebSocketTransport:jze,createTransportToIFrame:Uze,createTransportToWorker:zze},Symbol.toStringTag,{value:"Module"})),ple={},_5={};class gz{static getOrCreate(e){return _5[e]||(_5[e]=new gz(e)),_5[e]}constructor(e){this._languageId=e,this._loadingTriggered=!1,this._lazyLoadPromise=new Promise((t,i)=>{this._lazyLoadPromiseResolve=t,this._lazyLoadPromiseReject=i})}load(){return this._loadingTriggered||(this._loadingTriggered=!0,ple[this._languageId].loader().then(e=>this._lazyLoadPromiseResolve(e),e=>this._lazyLoadPromiseReject(e))),this._lazyLoadPromise}}function He(o){const e=o.id;ple[e]=o,ye.register(o);const t=gz.getOrCreate(e);ye.registerTokensProviderFactory(e,{create:async()=>(await t.load()).language}),ye.onLanguageEncountered(e,async()=>{const i=await t.load();ye.setLanguageConfiguration(e,i.conf)})}He({id:"abap",extensions:[".abap"],aliases:["abap","ABAP"],loader:()=>Pe(()=>import("./abap-DLDM7-KI.js"),[])});He({id:"apex",extensions:[".cls"],aliases:["Apex","apex"],mimetypes:["text/x-apex-source","text/x-apex"],loader:()=>Pe(()=>import("./apex-DNDY2TF8.js"),[])});He({id:"azcli",extensions:[".azcli"],aliases:["Azure CLI","azcli"],loader:()=>Pe(()=>import("./azcli-Y6nb8tq_.js"),[])});He({id:"bat",extensions:[".bat",".cmd"],aliases:["Batch","bat"],loader:()=>Pe(()=>import("./bat-BwHxbl9M.js"),[])});He({id:"bicep",extensions:[".bicep"],aliases:["Bicep"],loader:()=>Pe(()=>import("./bicep-CFznDFnq.js"),[])});He({id:"cameligo",extensions:[".mligo"],aliases:["Cameligo"],loader:()=>Pe(()=>import("./cameligo-Bf6VGUru.js"),[])});He({id:"clojure",extensions:[".clj",".cljs",".cljc",".edn"],aliases:["clojure","Clojure"],loader:()=>Pe(()=>import("./clojure-Dnu-v4kV.js"),[])});He({id:"coffeescript",extensions:[".coffee"],aliases:["CoffeeScript","coffeescript","coffee"],mimetypes:["text/x-coffeescript","text/coffeescript"],loader:()=>Pe(()=>import("./coffee-Bd8akH9Z.js"),[])});He({id:"c",extensions:[".c",".h"],aliases:["C","c"],loader:()=>Pe(()=>import("./cpp-BbWJElDN.js"),[])});He({id:"cpp",extensions:[".cpp",".cc",".cxx",".hpp",".hh",".hxx"],aliases:["C++","Cpp","cpp"],loader:()=>Pe(()=>import("./cpp-BbWJElDN.js"),[])});He({id:"csharp",extensions:[".cs",".csx",".cake"],aliases:["C#","csharp"],loader:()=>Pe(()=>import("./csharp-Co3qMtFm.js"),[])});He({id:"csp",extensions:[".csp"],aliases:["CSP","csp"],loader:()=>Pe(()=>import("./csp-D-4FJmMZ.js"),[])});He({id:"css",extensions:[".css"],aliases:["CSS","css"],mimetypes:["text/css"],loader:()=>Pe(()=>import("./css-DdJfP1eB.js"),[])});He({id:"cypher",extensions:[".cypher",".cyp"],aliases:["Cypher","OpenCypher"],loader:()=>Pe(()=>import("./cypher-cTPe9QuQ.js"),[])});He({id:"dart",extensions:[".dart"],aliases:["Dart","dart"],mimetypes:["text/x-dart-source","text/x-dart"],loader:()=>Pe(()=>import("./dart-BOtBlQCF.js"),[])});He({id:"dockerfile",extensions:[".dockerfile"],filenames:["Dockerfile"],aliases:["Dockerfile"],loader:()=>Pe(()=>import("./dockerfile-BG73LgW2.js"),[])});He({id:"ecl",extensions:[".ecl"],aliases:["ECL","Ecl","ecl"],loader:()=>Pe(()=>import("./ecl-BEgZUVRK.js"),[])});He({id:"elixir",extensions:[".ex",".exs"],aliases:["Elixir","elixir","ex"],loader:()=>Pe(()=>import("./elixir-BkW5O-1t.js"),[])});He({id:"flow9",extensions:[".flow"],aliases:["Flow9","Flow","flow9","flow"],loader:()=>Pe(()=>import("./flow9-BeJ5waoc.js"),[])});He({id:"fsharp",extensions:[".fs",".fsi",".ml",".mli",".fsx",".fsscript"],aliases:["F#","FSharp","fsharp"],loader:()=>Pe(()=>import("./fsharp-PahG7c26.js"),[])});He({id:"freemarker2",extensions:[".ftl",".ftlh",".ftlx"],aliases:["FreeMarker2","Apache FreeMarker2"],loader:()=>Pe(()=>import("./freemarker2-CoZsy1EV.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37])).then(o=>o.TagAutoInterpolationDollar)});He({id:"freemarker2.tag-angle.interpolation-dollar",aliases:["FreeMarker2 (Angle/Dollar)","Apache FreeMarker2 (Angle/Dollar)"],loader:()=>Pe(()=>import("./freemarker2-CoZsy1EV.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37])).then(o=>o.TagAngleInterpolationDollar)});He({id:"freemarker2.tag-bracket.interpolation-dollar",aliases:["FreeMarker2 (Bracket/Dollar)","Apache FreeMarker2 (Bracket/Dollar)"],loader:()=>Pe(()=>import("./freemarker2-CoZsy1EV.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37])).then(o=>o.TagBracketInterpolationDollar)});He({id:"freemarker2.tag-angle.interpolation-bracket",aliases:["FreeMarker2 (Angle/Bracket)","Apache FreeMarker2 (Angle/Bracket)"],loader:()=>Pe(()=>import("./freemarker2-CoZsy1EV.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37])).then(o=>o.TagAngleInterpolationBracket)});He({id:"freemarker2.tag-bracket.interpolation-bracket",aliases:["FreeMarker2 (Bracket/Bracket)","Apache FreeMarker2 (Bracket/Bracket)"],loader:()=>Pe(()=>import("./freemarker2-CoZsy1EV.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37])).then(o=>o.TagBracketInterpolationBracket)});He({id:"freemarker2.tag-auto.interpolation-dollar",aliases:["FreeMarker2 (Auto/Dollar)","Apache FreeMarker2 (Auto/Dollar)"],loader:()=>Pe(()=>import("./freemarker2-CoZsy1EV.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37])).then(o=>o.TagAutoInterpolationDollar)});He({id:"freemarker2.tag-auto.interpolation-bracket",aliases:["FreeMarker2 (Auto/Bracket)","Apache FreeMarker2 (Auto/Bracket)"],loader:()=>Pe(()=>import("./freemarker2-CoZsy1EV.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37])).then(o=>o.TagAutoInterpolationBracket)});He({id:"go",extensions:[".go"],aliases:["Go"],loader:()=>Pe(()=>import("./go-acbASCJo.js"),[])});He({id:"graphql",extensions:[".graphql",".gql"],aliases:["GraphQL","graphql","gql"],mimetypes:["application/graphql"],loader:()=>Pe(()=>import("./graphql-BxJiqAUM.js"),[])});He({id:"handlebars",extensions:[".handlebars",".hbs"],aliases:["Handlebars","handlebars","hbs"],mimetypes:["text/x-handlebars-template"],loader:()=>Pe(()=>import("./handlebars-CWdXIirr.js"),__vite__mapDeps([38,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37]))});He({id:"hcl",extensions:[".tf",".tfvars",".hcl"],aliases:["Terraform","tf","HCL","hcl"],loader:()=>Pe(()=>import("./hcl-DtV1sZF8.js"),[])});He({id:"html",extensions:[".html",".htm",".shtml",".xhtml",".mdoc",".jsp",".asp",".aspx",".jshtm"],aliases:["HTML","htm","html","xhtml"],mimetypes:["text/html","text/x-jshtm","text/template","text/ng-template"],loader:()=>Pe(()=>import("./html-C4Yj3tdw.js"),__vite__mapDeps([39,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37]))});He({id:"ini",extensions:[".ini",".properties",".gitconfig"],filenames:["config",".gitattributes",".gitconfig",".editorconfig"],aliases:["Ini","ini"],loader:()=>Pe(()=>import("./ini-Kd9XrMLS.js"),[])});He({id:"java",extensions:[".java",".jav"],aliases:["Java","java"],mimetypes:["text/x-java-source","text/x-java"],loader:()=>Pe(()=>import("./java-CXBNlu9o.js"),[])});He({id:"javascript",extensions:[".js",".es6",".jsx",".mjs",".cjs"],firstLine:"^#!.*\\bnode",filenames:["jakefile"],aliases:["JavaScript","javascript","js"],mimetypes:["text/javascript"],loader:()=>Pe(()=>import("./javascript-BP_fkOSZ.js"),__vite__mapDeps([40,41,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37]))});He({id:"julia",extensions:[".jl"],aliases:["julia","Julia"],loader:()=>Pe(()=>import("./julia-cl7-CwDS.js"),[])});He({id:"kotlin",extensions:[".kt",".kts"],aliases:["Kotlin","kotlin"],mimetypes:["text/x-kotlin-source","text/x-kotlin"],loader:()=>Pe(()=>import("./kotlin-s7OhZKlX.js"),[])});He({id:"less",extensions:[".less"],aliases:["Less","less"],mimetypes:["text/x-less","text/less"],loader:()=>Pe(()=>import("./less-9HpZscsL.js"),[])});He({id:"lexon",extensions:[".lex"],aliases:["Lexon"],loader:()=>Pe(()=>import("./lexon-OrD6JF1K.js"),[])});He({id:"lua",extensions:[".lua"],aliases:["Lua","lua"],loader:()=>Pe(()=>import("./lua-Cyyb5UIc.js"),[])});He({id:"liquid",extensions:[".liquid",".html.liquid"],aliases:["Liquid","liquid"],mimetypes:["application/liquid"],loader:()=>Pe(()=>import("./liquid-BywxO2Ag.js"),__vite__mapDeps([42,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37]))});He({id:"m3",extensions:[".m3",".i3",".mg",".ig"],aliases:["Modula-3","Modula3","modula3","m3"],loader:()=>Pe(()=>import("./m3-B8OfTtLu.js"),[])});He({id:"markdown",extensions:[".md",".markdown",".mdown",".mkdn",".mkd",".mdwn",".mdtxt",".mdtext"],aliases:["Markdown","markdown"],loader:()=>Pe(()=>import("./markdown-BFxVWTOG.js"),[])});He({id:"mdx",extensions:[".mdx"],aliases:["MDX","mdx"],loader:()=>Pe(()=>import("./mdx-CuytO5ml.js"),__vite__mapDeps([43,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37]))});He({id:"mips",extensions:[".s"],aliases:["MIPS","MIPS-V"],mimetypes:["text/x-mips","text/mips","text/plaintext"],loader:()=>Pe(()=>import("./mips-CiqrrVzr.js"),[])});He({id:"msdax",extensions:[".dax",".msdax"],aliases:["DAX","MSDAX"],loader:()=>Pe(()=>import("./msdax-DmeGPVcC.js"),[])});He({id:"mysql",extensions:[],aliases:["MySQL","mysql"],loader:()=>Pe(()=>import("./mysql-C_tMU-Nz.js"),[])});He({id:"objective-c",extensions:[".m"],aliases:["Objective-C"],loader:()=>Pe(()=>import("./objective-c-BDtDVThU.js"),[])});He({id:"pascal",extensions:[".pas",".p",".pp"],aliases:["Pascal","pas"],mimetypes:["text/x-pascal-source","text/x-pascal"],loader:()=>Pe(()=>import("./pascal-vHIfCaH5.js"),[])});He({id:"pascaligo",extensions:[".ligo"],aliases:["Pascaligo","ligo"],loader:()=>Pe(()=>import("./pascaligo-DtZ0uQbO.js"),[])});He({id:"perl",extensions:[".pl",".pm"],aliases:["Perl","pl"],loader:()=>Pe(()=>import("./perl-Ub6l9XKa.js"),[])});He({id:"pgsql",extensions:[],aliases:["PostgreSQL","postgres","pg","postgre"],loader:()=>Pe(()=>import("./pgsql-BlNEE0v7.js"),[])});He({id:"php",extensions:[".php",".php4",".php5",".phtml",".ctp"],aliases:["PHP","php"],mimetypes:["application/x-php"],loader:()=>Pe(()=>import("./php-BBUBE1dy.js"),[])});He({id:"pla",extensions:[".pla"],loader:()=>Pe(()=>import("./pla-DSh2-awV.js"),[])});He({id:"postiats",extensions:[".dats",".sats",".hats"],aliases:["ATS","ATS/Postiats"],loader:()=>Pe(()=>import("./postiats-CocnycG-.js"),[])});He({id:"powerquery",extensions:[".pq",".pqm"],aliases:["PQ","M","Power Query","Power Query M"],loader:()=>Pe(()=>import("./powerquery-tScXyioY.js"),[])});He({id:"powershell",extensions:[".ps1",".psm1",".psd1"],aliases:["PowerShell","powershell","ps","ps1"],loader:()=>Pe(()=>import("./powershell-COWaemsV.js"),[])});He({id:"proto",extensions:[".proto"],aliases:["protobuf","Protocol Buffers"],loader:()=>Pe(()=>import("./protobuf-Brw8urJB.js"),[])});He({id:"pug",extensions:[".jade",".pug"],aliases:["Pug","Jade","jade"],loader:()=>Pe(()=>import("./pug-8SOpv6rk.js"),[])});He({id:"python",extensions:[".py",".rpy",".pyw",".cpy",".gyp",".gypi"],aliases:["Python","py"],firstLine:"^#!/.*\\bpython[0-9.-]*\\b",loader:()=>Pe(()=>import("./python-DJFCDP40.js"),__vite__mapDeps([44,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37]))});He({id:"qsharp",extensions:[".qs"],aliases:["Q#","qsharp"],loader:()=>Pe(()=>import("./qsharp-Bw9ernYp.js"),[])});He({id:"r",extensions:[".r",".rhistory",".rmd",".rprofile",".rt"],aliases:["R","r"],loader:()=>Pe(()=>import("./r-j7ic8hl3.js"),[])});He({id:"razor",extensions:[".cshtml"],aliases:["Razor","razor"],mimetypes:["text/x-cshtml"],loader:()=>Pe(()=>import("./razor-i6L5r8Nn.js"),__vite__mapDeps([45,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37]))});He({id:"redis",extensions:[".redis"],aliases:["redis"],loader:()=>Pe(()=>import("./redis-Bu5POkcn.js"),[])});He({id:"redshift",extensions:[],aliases:["Redshift","redshift"],loader:()=>Pe(()=>import("./redshift-Bs9aos_-.js"),[])});He({id:"restructuredtext",extensions:[".rst"],aliases:["reStructuredText","restructuredtext"],loader:()=>Pe(()=>import("./restructuredtext-CqXO7rUv.js"),[])});He({id:"ruby",extensions:[".rb",".rbx",".rjs",".gemspec",".pp"],filenames:["rakefile","Gemfile"],aliases:["Ruby","rb"],loader:()=>Pe(()=>import("./ruby-zBfavPgS.js"),[])});He({id:"rust",extensions:[".rs",".rlib"],aliases:["Rust","rust"],loader:()=>Pe(()=>import("./rust-BzKRNQWT.js"),[])});He({id:"sb",extensions:[".sb"],aliases:["Small Basic","sb"],loader:()=>Pe(()=>import("./sb-BBc9UKZt.js"),[])});He({id:"scala",extensions:[".scala",".sc",".sbt"],aliases:["Scala","scala","SBT","Sbt","sbt","Dotty","dotty"],mimetypes:["text/x-scala-source","text/x-scala","text/x-sbt","text/x-dotty"],loader:()=>Pe(()=>import("./scala-D9hQfWCl.js"),[])});He({id:"scheme",extensions:[".scm",".ss",".sch",".rkt"],aliases:["scheme","Scheme"],loader:()=>Pe(()=>import("./scheme-BPhDTwHR.js"),[])});He({id:"scss",extensions:[".scss"],aliases:["Sass","sass","scss"],mimetypes:["text/x-scss","text/scss"],loader:()=>Pe(()=>import("./scss-CBJaRo0y.js"),[])});He({id:"shell",extensions:[".sh",".bash"],aliases:["Shell","sh"],loader:()=>Pe(()=>import("./shell-DiJ1NA_G.js"),[])});He({id:"sol",extensions:[".sol"],aliases:["sol","solidity","Solidity"],loader:()=>Pe(()=>import("./solidity-Db0IVjzk.js"),[])});He({id:"aes",extensions:[".aes"],aliases:["aes","sophia","Sophia"],loader:()=>Pe(()=>import("./sophia-CnS9iZB_.js"),[])});He({id:"sparql",extensions:[".rq"],aliases:["sparql","SPARQL"],loader:()=>Pe(()=>import("./sparql-CJmd_6j2.js"),[])});He({id:"sql",extensions:[".sql"],aliases:["SQL"],loader:()=>Pe(()=>import("./sql-ClhHkBeG.js"),[])});He({id:"st",extensions:[".st",".iecst",".iecplc",".lc3lib",".TcPOU",".TcDUT",".TcGVL",".TcIO"],aliases:["StructuredText","scl","stl"],loader:()=>Pe(()=>import("./st-CHwy0fLd.js"),[])});He({id:"swift",aliases:["Swift","swift"],extensions:[".swift"],mimetypes:["text/swift"],loader:()=>Pe(()=>import("./swift-Bqt4WxQ4.js"),[])});He({id:"systemverilog",extensions:[".sv",".svh"],aliases:["SV","sv","SystemVerilog","systemverilog"],loader:()=>Pe(()=>import("./systemverilog-Bs9z6M-B.js"),[])});He({id:"verilog",extensions:[".v",".vh"],aliases:["V","v","Verilog","verilog"],loader:()=>Pe(()=>import("./systemverilog-Bs9z6M-B.js"),[])});He({id:"tcl",extensions:[".tcl"],aliases:["tcl","Tcl","tcltk","TclTk","tcl/tk","Tcl/Tk"],loader:()=>Pe(()=>import("./tcl-Dm6ycUr_.js"),[])});He({id:"twig",extensions:[".twig"],aliases:["Twig","twig"],mimetypes:["text/x-twig"],loader:()=>Pe(()=>import("./twig-Csy3S7wG.js"),[])});He({id:"typescript",extensions:[".ts",".tsx",".cts",".mts"],aliases:["TypeScript","ts","typescript"],mimetypes:["text/typescript"],loader:()=>Pe(()=>import("./typescript-z7mhvbE0.js"),__vite__mapDeps([41,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37]))});He({id:"typespec",extensions:[".tsp"],aliases:["TypeSpec"],loader:()=>Pe(()=>import("./typespec-Btyra-wh.js"),[])});He({id:"vb",extensions:[".vb"],aliases:["Visual Basic","vb"],loader:()=>Pe(()=>import("./vb-Db0cS2oM.js"),[])});He({id:"wgsl",extensions:[".wgsl"],aliases:["WebGPU Shading Language","WGSL","wgsl"],loader:()=>Pe(()=>import("./wgsl-BTesnYfV.js"),[])});He({id:"xml",extensions:[".xml",".xsd",".dtd",".ascx",".csproj",".config",".props",".targets",".wxi",".wxl",".wxs",".xaml",".svg",".svgz",".opf",".xslt",".xsl"],firstLine:"(\\<\\?xml.*)|(\\Pe(()=>import("./xml-ptITVOc2.js"),__vite__mapDeps([46,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37]))});He({id:"yaml",extensions:[".yaml",".yml"],aliases:["YAML","yaml","YML","yml"],mimetypes:["application/x-yaml","text/x-yaml"],loader:()=>Pe(()=>import("./yaml-BGoDTs3D.js"),__vite__mapDeps([47,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37]))});let fz=class{constructor(e,t,i){this._onDidChange=new H_,this._languageId=e,this.setOptions(t),this.setModeConfiguration(i)}get onDidChange(){return this._onDidChange.event}get languageId(){return this._languageId}get modeConfiguration(){return this._modeConfiguration}get diagnosticsOptions(){return this.options}get options(){return this._options}setOptions(e){this._options=e||Object.create(null),this._onDidChange.fire(this)}setDiagnosticsOptions(e){this.setOptions(e)}setModeConfiguration(e){this._modeConfiguration=e||Object.create(null),this._onDidChange.fire(this)}};const pz={validate:!0,lint:{compatibleVendorPrefixes:"ignore",vendorPrefix:"warning",duplicateProperties:"warning",emptyRules:"warning",importStatement:"ignore",boxModel:"ignore",universalSelector:"ignore",zeroUnits:"ignore",fontFaceProperties:"warning",hexColorLength:"error",argumentsInColorFunction:"error",unknownProperties:"warning",ieHack:"ignore",unknownVendorSpecificProperties:"ignore",propertyIgnoredDueToDisplay:"warning",important:"ignore",float:"ignore",idSelector:"ignore"},data:{useDefaultDataProvider:!0},format:{newlineBetweenSelectors:!0,newlineBetweenRules:!0,spaceAroundSelectorSeparator:!1,braceStyle:"collapse",maxPreserveNewLines:void 0,preserveNewLines:!0}},mz={completionItems:!0,hovers:!0,documentSymbols:!0,definitions:!0,references:!0,documentHighlights:!0,rename:!0,colors:!0,foldingRanges:!0,diagnostics:!0,selectionRanges:!0,documentFormattingEdits:!0,documentRangeFormattingEdits:!0},mle=new fz("css",pz,mz),_le=new fz("scss",pz,mz),ble=new fz("less",pz,mz);function _z(){return Pe(()=>import("./cssMode-BQhiich3.js"),__vite__mapDeps([48,49,50,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37]))}ye.onLanguage("less",()=>{_z().then(o=>o.setupMode(ble))});ye.onLanguage("scss",()=>{_z().then(o=>o.setupMode(_le))});ye.onLanguage("css",()=>{_z().then(o=>o.setupMode(mle))});const qze=Object.freeze(Object.defineProperty({__proto__:null,cssDefaults:mle,lessDefaults:ble,scssDefaults:_le},Symbol.toStringTag,{value:"Module"}));let Kze=class{constructor(e,t,i){this._onDidChange=new H_,this._languageId=e,this.setOptions(t),this.setModeConfiguration(i)}get onDidChange(){return this._onDidChange.event}get languageId(){return this._languageId}get options(){return this._options}get modeConfiguration(){return this._modeConfiguration}setOptions(e){this._options=e||Object.create(null),this._onDidChange.fire(this)}setModeConfiguration(e){this._modeConfiguration=e||Object.create(null),this._onDidChange.fire(this)}};const Gze={tabSize:4,insertSpaces:!1,wrapLineLength:120,unformatted:'default": "a, abbr, acronym, b, bdo, big, br, button, cite, code, dfn, em, i, img, input, kbd, label, map, object, q, samp, select, small, span, strong, sub, sup, textarea, tt, var',contentUnformatted:"pre",indentInnerHtml:!1,preserveNewLines:!0,maxPreserveNewLines:void 0,indentHandlebars:!1,endWithNewline:!1,extraLiners:"head, body, /html",wrapAttributes:"auto"},_P={format:Gze,suggest:{},data:{useDefaultDataProvider:!0}};function bP(o){return{completionItems:!0,hovers:!0,documentSymbols:!0,links:!0,documentHighlights:!0,rename:!0,colors:!0,foldingRanges:!0,selectionRanges:!0,diagnostics:o===fy,documentFormattingEdits:o===fy,documentRangeFormattingEdits:o===fy}}const fy="html",iQ="handlebars",nQ="razor",vle=vP(fy,_P,bP(fy)),Zze=vle.defaults,wle=vP(iQ,_P,bP(iQ)),Yze=wle.defaults,Cle=vP(nQ,_P,bP(nQ)),Xze=Cle.defaults;function Qze(){return Pe(()=>import("./htmlMode-NRT3PXyd.js"),__vite__mapDeps([51,49,50,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37]))}function vP(o,e=_P,t=bP(o)){const i=new Kze(o,e,t);let n;const s=ye.onLanguage(o,async()=>{n=(await Qze()).setupMode(i)});return{defaults:i,dispose(){s.dispose(),n==null||n.dispose(),n=void 0}}}const Jze=Object.freeze(Object.defineProperty({__proto__:null,handlebarDefaults:Yze,handlebarLanguageService:wle,htmlDefaults:Zze,htmlLanguageService:vle,razorDefaults:Xze,razorLanguageService:Cle,registerHTMLLanguageService:vP},Symbol.toStringTag,{value:"Module"}));let eUe=class{constructor(e,t,i){this._onDidChange=new H_,this._languageId=e,this.setDiagnosticsOptions(t),this.setModeConfiguration(i)}get onDidChange(){return this._onDidChange.event}get languageId(){return this._languageId}get modeConfiguration(){return this._modeConfiguration}get diagnosticsOptions(){return this._diagnosticsOptions}setDiagnosticsOptions(e){this._diagnosticsOptions=e||Object.create(null),this._onDidChange.fire(this)}setModeConfiguration(e){this._modeConfiguration=e||Object.create(null),this._onDidChange.fire(this)}};const tUe={validate:!0,allowComments:!0,schemas:[],enableSchemaRequest:!1,schemaRequest:"warning",schemaValidation:"warning",comments:"error",trailingCommas:"error"},iUe={documentFormattingEdits:!0,documentRangeFormattingEdits:!0,completionItems:!0,hovers:!0,documentSymbols:!0,tokens:!0,colors:!0,foldingRanges:!0,diagnostics:!0,selectionRanges:!0},yle=new eUe("json",tUe,iUe),nUe=()=>xle().then(o=>o.getWorker());function xle(){return Pe(()=>import("./jsonMode-B6UDf7e7.js"),__vite__mapDeps([52,49,50,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37]))}ye.register({id:"json",extensions:[".json",".bowerrc",".jshintrc",".jscsrc",".eslintrc",".babelrc",".har"],aliases:["JSON","json"],mimetypes:["application/json"]});ye.onLanguage("json",()=>{xle().then(o=>o.setupMode(yle))});const sUe=Object.freeze(Object.defineProperty({__proto__:null,getWorker:nUe,jsonDefaults:yle},Symbol.toStringTag,{value:"Module"})),oUe="5.9.3";var Sle=(o=>(o[o.None=0]="None",o[o.CommonJS=1]="CommonJS",o[o.AMD=2]="AMD",o[o.UMD=3]="UMD",o[o.System=4]="System",o[o.ES2015=5]="ES2015",o[o.ESNext=99]="ESNext",o))(Sle||{}),Lle=(o=>(o[o.None=0]="None",o[o.Preserve=1]="Preserve",o[o.React=2]="React",o[o.ReactNative=3]="ReactNative",o[o.ReactJSX=4]="ReactJSX",o[o.ReactJSXDev=5]="ReactJSXDev",o))(Lle||{}),kle=(o=>(o[o.CarriageReturnLineFeed=0]="CarriageReturnLineFeed",o[o.LineFeed=1]="LineFeed",o))(kle||{}),Dle=(o=>(o[o.ES3=0]="ES3",o[o.ES5=1]="ES5",o[o.ES2015=2]="ES2015",o[o.ES2016=3]="ES2016",o[o.ES2017=4]="ES2017",o[o.ES2018=5]="ES2018",o[o.ES2019=6]="ES2019",o[o.ES2020=7]="ES2020",o[o.ESNext=99]="ESNext",o[o.JSON=100]="JSON",o[o.Latest=99]="Latest",o))(Dle||{}),Ele=(o=>(o[o.Classic=1]="Classic",o[o.NodeJs=2]="NodeJs",o))(Ele||{});class Ile{constructor(e,t,i,n,s){this._onDidChange=new H_,this._onDidExtraLibsChange=new H_,this._extraLibs=Object.create(null),this._removedExtraLibs=Object.create(null),this._eagerModelSync=!1,this.setCompilerOptions(e),this.setDiagnosticsOptions(t),this.setWorkerOptions(i),this.setInlayHintsOptions(n),this.setModeConfiguration(s),this._onDidExtraLibsChangeTimeout=-1}get onDidChange(){return this._onDidChange.event}get onDidExtraLibsChange(){return this._onDidExtraLibsChange.event}get modeConfiguration(){return this._modeConfiguration}get workerOptions(){return this._workerOptions}get inlayHintsOptions(){return this._inlayHintsOptions}getExtraLibs(){return this._extraLibs}addExtraLib(e,t){let i;if(typeof t>"u"?i=`ts:extralib-${Math.random().toString(36).substring(2,15)}`:i=t,this._extraLibs[i]&&this._extraLibs[i].content===e)return{dispose:()=>{}};let n=1;return this._removedExtraLibs[i]&&(n=this._removedExtraLibs[i]+1),this._extraLibs[i]&&(n=this._extraLibs[i].version+1),this._extraLibs[i]={content:e,version:n},this._fireOnDidExtraLibsChangeSoon(),{dispose:()=>{let s=this._extraLibs[i];s&&s.version===n&&(delete this._extraLibs[i],this._removedExtraLibs[i]=n,this._fireOnDidExtraLibsChangeSoon())}}}setExtraLibs(e){for(const t in this._extraLibs)this._removedExtraLibs[t]=this._extraLibs[t].version;if(this._extraLibs=Object.create(null),e&&e.length>0)for(const t of e){const i=t.filePath||`ts:extralib-${Math.random().toString(36).substring(2,15)}`,n=t.content;let s=1;this._removedExtraLibs[i]&&(s=this._removedExtraLibs[i]+1),this._extraLibs[i]={content:n,version:s}}this._fireOnDidExtraLibsChangeSoon()}_fireOnDidExtraLibsChangeSoon(){this._onDidExtraLibsChangeTimeout===-1&&(this._onDidExtraLibsChangeTimeout=window.setTimeout(()=>{this._onDidExtraLibsChangeTimeout=-1,this._onDidExtraLibsChange.fire(void 0)},0))}getCompilerOptions(){return this._compilerOptions}setCompilerOptions(e){this._compilerOptions=e||Object.create(null),this._onDidChange.fire(void 0)}getDiagnosticsOptions(){return this._diagnosticsOptions}setDiagnosticsOptions(e){this._diagnosticsOptions=e||Object.create(null),this._onDidChange.fire(void 0)}setWorkerOptions(e){this._workerOptions=e||Object.create(null),this._onDidChange.fire(void 0)}setInlayHintsOptions(e){this._inlayHintsOptions=e||Object.create(null),this._onDidChange.fire(void 0)}setMaximumWorkerIdleTime(e){}setEagerModelSync(e){this._eagerModelSync=e}getEagerModelSync(){return this._eagerModelSync}setModeConfiguration(e){this._modeConfiguration=e||Object.create(null),this._onDidChange.fire(void 0)}}const rUe=oUe,Nle={completionItems:!0,hovers:!0,documentSymbols:!0,definitions:!0,references:!0,documentHighlights:!0,rename:!0,diagnostics:!0,documentRangeFormattingEdits:!0,signatureHelp:!0,onTypeFormattingEdits:!0,codeActions:!0,inlayHints:!0},Tle=new Ile({allowNonTsExtensions:!0,target:99},{noSemanticValidation:!1,noSyntaxValidation:!1,onlyVisible:!1},{},{},Nle),Rle=new Ile({allowNonTsExtensions:!0,allowJs:!0,target:99},{noSemanticValidation:!0,noSyntaxValidation:!1,onlyVisible:!1},{},{},Nle),aUe=()=>wP().then(o=>o.getTypeScriptWorker()),lUe=()=>wP().then(o=>o.getJavaScriptWorker());function wP(){return Pe(()=>import("./tsMode-CBVdH5Cy.js"),__vite__mapDeps([53,49,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37]))}ye.onLanguage("typescript",()=>wP().then(o=>o.setupTypeScript(Tle)));ye.onLanguage("javascript",()=>wP().then(o=>o.setupJavaScript(Rle)));const cUe=Object.freeze(Object.defineProperty({__proto__:null,JsxEmit:Lle,ModuleKind:Sle,ModuleResolutionKind:Ele,NewLineKind:kle,ScriptTarget:Dle,getJavaScriptWorker:lUe,getTypeScriptWorker:aUe,javascriptDefaults:Rle,typescriptDefaults:Tle,typescriptVersion:rUe},Symbol.toStringTag,{value:"Module"})),sQ="__monacoFindWidgetTabIndexPatchApplied",U1="__monacoFindWidgetOriginalTabIndex";function oQ(o,e){const t=o==null?void 0:o._domNode;if(!t)return;const i=t.querySelectorAll('input, textarea, [tabindex], [role="button"], [role="checkbox"]');for(const n of i)if(n instanceof HTMLElement)if(e){if(!(U1 in n.dataset))continue;const s=n.dataset[U1];s===""?n.removeAttribute("tabindex"):n.tabIndex=Number(s),delete n.dataset[U1]}else U1 in n.dataset||(n.dataset[U1]=n.getAttribute("tabindex")??""),n.tabIndex=-1}if(!eh[sQ]){const o=eh.prototype._reveal,e=eh.prototype._hide;eh.prototype._reveal=function(...t){o.apply(this,t),oQ(this,!0)},eh.prototype._hide=function(...t){e.apply(this,t),oQ(this,!1)},eh[sQ]=!0}const dUe=Object.freeze(Object.defineProperty({__proto__:null,CancellationTokenSource:FVe,Emitter:H_,KeyCode:WVe,KeyMod:BVe,MarkerSeverity:jl,MarkerTag:$H,Position:bf,Range:DL,Selection:HVe,SelectionDirection:VVe,Token:jVe,Uri:dz,css:qze,editor:bg,html:Jze,json:sUe,languages:ye,lsp:$ze,typescript:cUe},Symbol.toStringTag,{value:"Module"}));function rQ(o,e){(e==null||e>o.length)&&(e=o.length);for(var t=0,i=Array(e);t=o.length?o.apply(this,n):function(){for(var r=arguments.length,a=new Array(r),l=0;l1&&arguments[1]!==void 0?arguments[1]:{};dD.initial(o),dD.handler(e);var t={current:o},i=f0(PUe)(t,e),n=f0(MUe)(t),s=f0(dD.changes)(o),r=f0(RUe)(t);function a(){var c=arguments.length>0&&arguments[0]!==void 0?arguments[0]:function(d){return d};return dD.selector(c),c(t.current)}function l(c){yUe(i,n,s,r)(c)}return[a,l]}function RUe(o,e){return AS(e)?e(o.current):e}function MUe(o,e){return o.current=dQ(dQ({},o.current),e),e}function PUe(o,e,t){return AS(e)?e(o.current):Object.keys(t).forEach(function(i){var n;return(n=e[i])===null||n===void 0?void 0:n.call(e,o.current[i])}),t}var AUe={create:TUe},OUe={paths:{vs:"https://cdn.jsdelivr.net/npm/monaco-editor@0.55.1/min/vs"}};function FUe(o){return function e(){for(var t=this,i=arguments.length,n=new Array(i),s=0;s=o.length?o.apply(this,n):function(){for(var r=arguments.length,a=new Array(r),l=0;l 0), el motor ajusta tantos turnos recientes como sea posible dentro del presupuesto, anclando opcionalmente los turnos iniciales.","toolResponseLimits":"Límites de respuesta de herramientas","toolResponseLimitsDesc":"Trunca las salidas de herramientas verbosas antes de reinyectarlas en la ventana de contexto del LLM. Evita la sobrecarga del contexto.","truncationStrategy":"Estrategia","workflowRagHint":"Descubre automáticamente todos los pasos RAG del workflow. Solo se usa cuando no hay bases de conocimiento explícitas listadas arriba.","tasks":"Tareas LLM","addTask":"Añadir tarea","noTasks":"No hay tareas LangChain configuradas","removeTask":"Eliminar tarea","taskId":"ID de tarea","description":"Descripción","descriptionPlaceholder":"Qué hace esta tarea","triggerActions":"Acciones desencadenantes","noActions":"Sin acciones","actionPlaceholder":"ej. help, chat","systemPrompt":"Prompt del sistema","systemPromptPlaceholder":"Eres un asistente útil...","modelParams":"Parámetros del modelo","addParam":"Añadir parámetro","agentMode":"Modo agente","enableBuiltInTools":"Activar herramientas integradas","toolWhitelist":"Whitelist de herramientas (vacío = todas)","enableHttpCallTools":"Auto-descubrimiento de herramientas HTTP Call","enableHttpCallToolsDesc":"Exponer automáticamente todas las extensiones httpcall del workflow como herramientas LLM","httpCallTools":"URIs de herramientas HTTP","httpCallToolsHint":"URIs httpcall explícitas (además de las auto-descubiertas)","addTool":"Añadir URI de herramienta","mcpServers":"Servidores MCP","mcpServersDesc":"Servidores MCP externos cuyas herramientas estarán disponibles para el LLM","addMcpServer":"Añadir servidor MCP","mcpUrlPlaceholder":"http://localhost:7070/mcp","mcpName":"Nombre","mcpApiKey":"API Key / ref. vault","historyLimit":"Límite de historial","historyLimitHint":"(-1 = ilimitado)","budgetPerf":"Presupuesto y rendimiento","maxBudget":"Presupuesto máx. ($)","costTracking":"Seguimiento de costes","toolCaching":"Caché de herramientas","rateLimiting":"Límite de tasa","defaultRate":"Tasa predeterminada (pet./min.)","prePostInstructions":"Instrucciones pre/post","preRequest":"Pre-petición","postResponse":"Post-respuesta","enableMcpCallTools":"Descubrimiento automático de herramientas MCP","enableMcpCallToolsDesc":"Expone automáticamente todas las extensiones mcpcalls del flujo como herramientas LLM","a2aAgents":"Agentes A2A","a2aAgentsDesc":"Agentes remotos compatibles con A2A cuyas habilidades se convierten en herramientas LLM","addA2aAgent":"Añadir agente A2A","a2aUrlPlaceholder":"https://remote.example.com/a2a/agents/...","a2aName":"Nombre visible","a2aApiKey":"${vault:my-a2a-key}","a2aTimeout":"Tiempo límite (ms)","a2aSkillsFilter":"Filtro de habilidades (vacío = todas)","cascade":"Cascada de modelos","cascadeDesc":"Try a cheap/fast model first. If confidence is too low, automatically escalate to a more powerful (and expensive) model.","cascadeEnable":"Activar cascada de modelos","cascadeStrategy":"Estrategia","strategyCascade":"Escalado secuencial","strategyParallel":"Paralelo (futuro)","cascadeStrategyHint":"Empieza por el modelo más económico y escala si la confianza es baja","cascadeEvalStrategy":"Evaluación de confianza","cascadeEvalHint":"Cómo determinar si la respuesta es suficiente","evalStructured":"Salida estructurada (JSON)","evalHeuristic":"Heurística (detección de vacilación)","evalJudge":"Modelo juez (sub-LLM)","evalNone":"Ninguna (aceptar siempre)","cascadeInAgent":"Usar cascada también en modo agente (con herramientas)","cascadeSteps":"Cascade Steps","cascadeStepsDesc":"Order matters: first step tried first. Last step is always accepted.","cascadeModelName":"p. ej. claude-sonnet-5","cascadeConfidence":"Min. Confidence (0-1)","cascadeConfidencePlaceholder":"vacío = aceptar siempre","cascadeTimeout":"Tiempo límite (ms)","addCascadeStep":"Añadir paso de cascada","cascadeReturnBest":"Devolver la respuesta con mejor puntuación entre los pasos","cascadeEvalNoneHint":"La verificación de confianza está desactivada — siempre se acepta la respuesta del primer paso.","cascadeCeilings":"Límites y precios","cascadeMaxDuration":"Duración total máx. (ms)","cascadeMaxCost":"Coste máx. por ejecución ($)","cascadeUnlimited":"sin límite","cascadeInputPrice":"$ de entrada / 1M tokens","cascadeOutputPrice":"$ de salida / 1M tokens","cascadePricingHint":"El precio de tokens predeterminado alimenta el seguimiento de costes y el límite de coste. Cada paso puede sobrescribirlo.","cascadeJudgeModel":"Modelo juez","cascadeJudgeModelDesc":"Un modelo aparte (normalmente económico) que califica la confianza de cada respuesta.","cascadeJudgeApiKey":"Clave API del juez","cascadeHeuristic":"Ajuste heurístico","cascadeHeuristicDesc":"Sobrescrituras opcionales para la detección de vacilación/rechazo. Los campos vacíos usan los valores predeterminados integrados en inglés. Localice las listas de frases para despliegues en otros idiomas.","cascadeHeuristicDefaults":"Valores predeterminados integrados","cascadeHeuristicPhrasePlaceholder":"añadir una frase…","cascadeHeuristicPhrasesLow":"Frases de vacilación (confianza baja)","cascadeHeuristicPhrasesRefusal":"Frases de rechazo","cascadeHeuristicShortLen":"Longitud de respuesta corta","cascadeHeuristicShortScore":"Puntuación de respuesta corta","cascadeHeuristicRefusalScore":"Puntuación de rechazo","cascadeHeuristicHedgingScore":"Puntuación de vacilación","cascadeHeuristicDefaultScore":"Puntuación predeterminada","cascadeStepApiKey":"Clave API","cascadeStepApiKeyPlaceholder":"hereda la clave de la tarea si está vacío","cascadeCrossProvider":"entre proveedores","cascadeStepAdvanced":"Avanzado (precios y parámetros)","cascadeStepInputPrice":"$ de entrada / 1M","cascadeStepOutputPrice":"$ de salida / 1M","cascadeStepPriceInherit":"predeterminado de la cascada","cascadeStepParams":"Parámetros adicionales","cascadeStepAddParam":"Añadir parámetro","cascadeIssues":{"NO_STEPS":"La cascada está activada pero no tiene pasos — fallará al ejecutarse.","UNKNOWN_STRATEGY":"Estrategia desconocida \\"{{strategy}}\\" — la cascada se ejecutará secuencialmente.","PARALLEL_NOT_IMPLEMENTED":"La estrategia paralela aún no está implementada — los pasos se ejecutan secuencialmente.","UNKNOWN_EVAL_STRATEGY":"Evaluación de confianza desconocida \\"{{strategy}}\\" — se usará Salida estructurada por defecto.","JUDGE_MODEL_MISSING":"La evaluación con Modelo juez no tiene ningún juez configurado — la confianza recurre a la heurística.","JUDGE_CROSS_PROVIDER_NO_APIKEY":"El modelo juez usa un proveedor diferente pero no tiene clave API propia — heredaría la clave de la tarea.","MAX_DURATION_NONPOSITIVE":"La duración total máxima debe ser mayor que 0.","MAX_COST_NEGATIVE":"El coste máximo por ejecución no puede ser negativo.","CASCADE_INPUT_PRICE_NEGATIVE":"El precio de entrada de la cascada no puede ser negativo.","CASCADE_OUTPUT_PRICE_NEGATIVE":"El precio de salida de la cascada no puede ser negativo.","CONVERT_TO_OBJECT_STRUCTURED":"convertToObject es incompatible con la confianza de Salida estructurada — la cascada usará la heurística en su lugar.","STEP_INPUT_PRICE_NEGATIVE":"El precio de entrada del paso {{step}} no puede ser negativo.","STEP_OUTPUT_PRICE_NEGATIVE":"El precio de salida del paso {{step}} no puede ser negativo.","STEP_CONFIDENCE_OUT_OF_RANGE":"La confianza del paso {{step}} debe estar entre 0 y 1.","STEP_DEAD_NULL_THRESHOLD":"El paso {{step}} no tiene umbral de confianza — los pasos posteriores se vuelven inalcanzables.","STEP_TIMEOUT_NONPOSITIVE":"El tiempo límite del paso {{step}} debe ser mayor que 0.","STEP_CROSS_PROVIDER_NO_APIKEY":"El paso {{step}} usa un proveedor diferente pero no tiene clave API propia — heredaría la clave de la tarea."},"parallelExecution":"Ejecución paralela de herramientas","parallelExecutionDesc":"Run independent tool calls concurrently","parallelTimeout":"Tiempo límite (ms)","maxToolIterations":"Máx. iteraciones de herramientas","maxToolIterationsHint":"(predeterminado 10)","toolRateLimits":"Límites de tasa por herramienta","toolRateLimitsDesc":"Override default rate for specific tools","toolName":"Nombre de herramienta","addToolRate":"Añadir límite","retryConfig":"Configuración de reintentos","retryDesc":"Configure automatic retries with exponential backoff.","retryMaxAttempts":"Máx. intentos","retryDelay":"Retardo inicial (ms)","retryMultiplier":"Factor de backoff","retryMaxDelay":"Retardo máx. (ms)","ragConfig":"RAG (búsqueda de conocimiento)","ragDesc":"Augment LLM responses with retrieved documents.","ragHttpCall":"URI de llamada HTTP","ragEmbeddingModel":"Modelo de embedding","ragEmbeddingModelPlaceholder":"p. ej. text-embedding-3-small","ragEmbeddingStore":"Almacén de embeddings","ragEmbeddingStorePlaceholder":"p. ej. pgvector, qdrant","ragMaxResults":"Máx. resultados","ragMinScore":"Min Similarity Score (0-1)","moveDown":"Bajar","moveUp":"Subir","removeStep":"Quitar paso","execution":"Ejecución","budgetCosts":"Presupuesto y costes","preRequestDesc":"Establecer o transformar propiedades antes de que se ejecute el LLM.","postResponseDesc":"Procesar la salida del LLM: establecer propiedades, construir mensajes de salida y generar respuestas rápidas.","postPropertyInstructions":"Instrucciones de propiedades","postOutputInstructions":"Instrucciones de salida","postQrInstructions":"Instrucciones de respuestas rápidas","allSkills":"Todas las habilidades","skillPlaceholder":"p. ej. order-tracking","modeAgent":"Agente","modeChat":"Chat","perMinute":"/min","allTools":"Todas las herramientas","selectSpecific":"Selección manual","allToolsInfo":"Las {{count}} herramientas integradas están disponibles para el LLM. Elija «Selección manual» para limitar las herramientas expuestas.","availableTools":"Herramientas disponibles","toolCount":"{{selected}} de {{total}} seleccionadas","toolSources":"Fuentes de herramientas del flujo","toolSourcesInfo":"Ambas fuentes están activas por defecto — todas las llamadas HTTP y MCP del flujo se exponen automáticamente como herramientas LLM. Desactive una fuente para excluirla.","included":"Incluido","toolApprovals":"Control de aprobación de herramientas (por tarea)","toolApprovalsEnable":"Anular las aprobaciones de herramienta para esta tarea","toolApprovalsDesc":"Anula las aprobaciones de herramienta a nivel de agente solo para ESTA tarea — un reemplazo completo, no una combinación.","responseValidation":"Validación y recuperación de respuestas","responseValidationDesc":"Controle cómo reacciona el motor ante un turno vacío, truncado, filtrado por contenido, rechazado o caducado. \\"Fallback\\" sustituye por un mensaje predefinido; \\"Error\\" hace fallar el turno; \\"Advertir\\" registra y continúa; \\"Ignorar\\" no hace nada.","rvEnable":"Activar la validación de respuestas","rvDisabledInfo":"Las políticas siguientes se guardan, pero solo surten efecto mientras la validación está activada.","rvActionIgnore":"Ignorar","rvActionWarn":"Advertir (registrar y continuar)","rvActionFallback":"Fallback (mensaje predefinido)","rvActionError":"Error (hacer fallar el turno)","rvOnEmpty":"Respuesta vacía","rvOnEmptyHint":"El LLM no devolvió nada (vacío o null)","rvOnTruncation":"Respuesta truncada","rvOnTruncationHint":"Respuesta cortada (finishReason=LENGTH)","rvOnContentFilter":"Filtrado por contenido","rvOnContentFilterHint":"Respuesta bloqueada por el filtro de contenido del proveedor","rvOnRefusal":"Rechazo","rvOnRefusalHint":"El LLM se negó a responder (detección heurística)","rvOnStreamingTimeout":"Tiempo de espera de streaming","rvOnStreamingTimeoutHint":"Una respuesta en streaming caducó antes de completarse","streamingTimeoutSeconds":"Tiempo de espera de streaming (segundos)","streamingTimeoutSecondsHint":"Anula el valor predeterminado del motor (120s). Solo se aplica durante el streaming; vacío = usar el predeterminado.","taskPricing":"Precios de llamadas simples","taskPricingDesc":"Establece el precio de las llamadas de modelo ordinarias (sin cascada) de esta tarea para el seguimiento de costes y los límites de coste del grupo. Sin precio (en blanco) aporta $0."}'),T={labelPlaceholder:"Etiqueta del enlace...",pathPlaceholder:"Ruta del enlace...",altPlaceholder:"Texto alternativo...",uriPlaceholder:"URL de imagen...",language:"Idioma",langPlaceholder:"ej. en, es",outputSets:"Conjuntos de salida",addOutputSet:"Añadir conjunto de salida",noOutputSets:"No hay conjuntos de salida configurados",actionName:"Nombre de acción",timesOccurred:"×",removeOutput:"Eliminar",outputs:"Salidas",alternativeGroup:"Grupo alternativo",addAlternative:"Añadir alternativa",addOutputGroup:"Añadir grupo de salida",textPlaceholder:"Texto de salida...",urlPlaceholder:"URL…",delayMs:"Retardo (ms)",quickReplies:"Respuestas rápidas",noQuickReplies:"Sin Quick Replies",addQuickReply:"Añadir Quick Reply",qrValue:"Texto del botón",qrExpressions:"Expresiones",default:"Por defecto",invalidJson:"JSON no válido",buttonTypePlaceholder:"Tipo de botón (p. ej. postback)",buttonLabelPlaceholder:"Etiqueta...",onPressPlaceholder:'{"action":"..."}',subTypePlaceholder:"Subtipo (p. ej. text, email)",inputPlaceholderPlaceholder:"Marcador de posición...",inputLabelPlaceholder:"Etiqueta...",defaultValuePlaceholder:"Valor predeterminado...",minLength:"Longitud mín.",minLengthShort:"mín",maxLength:"Longitud máx.",maxLengthShort:"máx",validationMsgPlaceholder:"Mensaje de error de validación...",jsonPlaceholder:'{"key":"value"}'},P={setters:"Definidores de propiedades",addSetter:"Añadir setter",noSetters:"No hay Property Setters configurados",removeSetter:"Eliminar",triggerActions:"Acciones desencadenantes",noActions:"Sin acciones",actionPlaceholder:"ej. greet, fallback",properties:"Propiedades",noProperties:"Sin propiedades",addProperty:"Añadir propiedad",propName:"Nombre de propiedad",propValue:"Valor / expresión",fromPath:"Ruta de origen",fromObjectPath:"fromObjectPath",override:"Sobrescribir",propsCount:"prop.",untitled:"(sin acciones)",openEditor:"Editar en el editor",visibilityTitle:"Qué agents pueden ver esta propiedad longTerm",editValue:"Editar valor",toggleGroup:"Alternar grupo de propiedades"},S={language:"Idioma",langPlaceholder:"ej. en, es",words:"Palabras",addWord:"Añadir palabra",wordPlaceholder:"ej. hola",phrases:"Frases",addPhrase:"Añadir frase",phrasePlaceholder:"ej. buenos días",regExs:"Expresiones regulares",addRegEx:"Añadir RegEx",regexPlaceholder:"Expresión regular",expressionPlaceholder:"ej. greeting(hello)",frequency:"Frecuencia",none:"Ninguna definida"},k={title:"Configuración del analizador",configure:"Configurar",config:"Configuración",appendExpressions:"Añadir expresiones",includeUnused:"Incluir expresiones no utilizadas",includeUnknown:"Incluir expresiones desconocidas",dictionaries:"Diccionarios",builtInDicts:"Diccionarios integrados",regularDicts:"Diccionarios regulares",addDict:"Añadir",removeDict:"Eliminar diccionario",noRegularDicts:"No hay diccionarios regulares configurados",dictUri:"URI del recurso de diccionario",dictUriPlaceholder:"eddi://ai.labs.dictionary/dictionarystore/dictionaries/?version=",corrections:"Correcciones",distance:"Distancia",normalizers:"Normalizadores",removePunctuation:"Eliminar puntuación",regexPattern:"Patrón",dict:{integer:"Diccionario de enteros",decimal:"Diccionario de decimales",punctuation:"Diccionario de puntuación",email:"Diccionario de correo electrónico",time:"Diccionario de expresiones temporales",ordinalNumber:"Diccionario de números ordinales"},corr:{levenshtein:"Corrección de Levenshtein",phonetic:"Corrección fonética",mergedTerms:"Corrección de términos fusionados"},norm:{punctuation:"Normalizador de puntuación",specialCharacter:"Normalizador de caracteres especiales",contractedWords:"Normalizador de palabras contraídas",allowedCharacter:"Normalizador de caracteres permitidos"},regularDictsHint:"Tus propias palabras, frases y patrones, guardados como recursos de diccionario.",openDict:"Abrir el diccionario en una pestaña nueva"},R={title:"Añadir diccionario regular",searchPlaceholder:"Buscar diccionarios…",added:"Añadido",empty:"Todavía no hay diccionarios",emptyDescription:"Un diccionario le enseña al analizador tus propias palabras, frases y patrones.",create:"Crear diccionario",createTitle:"Nuevo diccionario",createHint:"Se crea vacío y se vincula a este analizador de inmediato: añade palabras, frases y patrones en el editor de diccionarios.",createFailed:"El diccionario se creó, pero no se pudo vincular.",created:"Diccionario creado y vinculado",defaultName:"Nuevo diccionario",descriptionPlaceholder:"Qué le enseña este diccionario al analizador…",manual:"Vincular por URI en su lugar",createdUnnamed:"Diccionario creado y vinculado, pero no se pudo guardar su nombre: renómbralo en el editor de diccionarios."},L={activeConversations:"Conversaciones activas",eventHistory:"Historial de eventos",noActiveQueues:"No hay conversaciones activas en procesamiento",payload:"Payload",successRate:"Tasa de éxito",tasksPerSec:"tareas/s",totalPending:"pendientes",confirmDiscardDescription:"Elimina permanentemente la tarea en cola de fallidos. No podrá reproducirse después. No se puede deshacer.",confirmDiscardTitle:"¿Descartar la entrada de la cola de fallidos?",title:"Panel del coordinador",subtitle:"Supervisar el procesamiento de conversaciones y gestionar entradas dead-letter",type:"Tipo de coordinador",connection:"Conexión",processed:"Tareas procesadas",deadLettered:"Mensajes muertos",activeQueues:"Colas activas",queued:"en cola",deadLetterTitle:"Cola de mensajes muertos",noDeadLetters:"Sin entradas dead-letter",colId:"ID",colConversation:"Conversación",colError:"Error",colTime:"Hora",colActions:"Acciones",replay:"Reintentar",discard:"Descartar",purgeAll:"Purgar todo",confirmPurge:"¿Purgar todo?",yes:"Sí",cancel:"Cancelar",replaySuccess:"Dead-letter reintentada",replayError:"Error al reintentar",discardSuccess:"Dead-letter descartada",discardError:"Error al descartar",purgeSuccess:"Todas las entradas dead-letter eliminadas",purgeError:"Error al purgar",empty:"No hay datos del coordinador disponibles",emptyHint:"El servicio del coordinador puede estar iniciándose. Los datos aparecerán automáticamente.",lastNSnapshots:"Últimas {{count}} instantáneas"},j={expand:"Expandir",expandHint:"Pantalla completa (Ctrl+Mayús+F)",close:"Hecho",lines:"líneas",chars:"caracteres",fullscreenTitle:"Editor de contenido",fullscreenDescription:"Editor en pantalla completa. Escape para cerrar."},I={newLogs:"Nuevos logs",title:"Registros",description:"Supervisar el flujo de logs en tiempo real o buscar en el historial.",tabLive:"En vivo",tabHistory:"Historial",connected:"Conectado",disconnected:"Desconectado",filterAgent:"ID del agente…",filterConversation:"ID de conversación...",filterInstance:"ID de instancia...",allLevels:"Todos los niveles",pause:"Pausa",resume:"Reanudar",clear:"Limpiar",search:"Buscar",waitingForLogs:"Esperando logs...",loadingRecentLogs:"Cargando logs recientes…",noRecentLogs:"No hay actividad reciente en los logs.",noRecentLogsHint:"Los nuevos logs aparecerán aquí a medida que se transmitan desde el backend.",connectingStream:"Conectando al stream...",noHistoryLogs:"No se encontraron logs históricos.",entryCount:"{{count}} entradas",showStacktrace:"Mostrar stacktrace ({{count}} frames)",hideStacktrace:"Ocultar stacktrace",allAgents:"Todos los agentes",allConversations:"Todas las conversaciones",waitingHint:"Los logs aparecerán aquí a medida que lleguen del backend.",noHistoryHint:"Intente ajustar los filtros o buscar un agente o conversación diferente.",searchConversations:"Buscar por ID, agente, usuario…",stepsCount:"{{count}} pasos",noConversationsFound:"No se encontraron conversaciones",useConversationId:"Usar ID: {{id}}",searchLogs:"Buscar logs…",errors:"errores",warnings:"advertencias",infos:"info",debugs:"depuración",filteredCount:"{{shown}} de {{total}} entradas",copyEntry:"Copiar entrada de log",export:"Exportar",stateReady:"Listo",stateActive:"Activo",stateError:"Error",stateEnded:"Finalizado"},x={loadError:"No se pudieron cargar los secretos",allAgents:"Todos los agentes",allowedAgents:"Agentes permitidos",allowedAgentsHint:"Deje vacío para todos los agentes. Añadir IDs de agente ayuda a rastrear qué agentes usan este secret.",allowedAgentsLabel:"Agentes permitidos (opcional)",allowedAgentsPlaceholder:"Escriba el ID de agente y pulse Enter (vacío = todos los agentes)",deleteKey:"Eliminar {{key}}",hideValue:"Ocultar valor",newValuePlaceholder:"Nuevo valor del secret…",rotate:"Rotar",rotateDesc:"Introduzca el nuevo valor. Las referencias existentes seguirán resolviéndose al valor actualizado.",rotateKey:"Rotar {{key}}",rotateSuccess:'Secret "{{key}}" rotado',rotateTitle:'Rotar "{{key}}"',showValue:"Mostrar valor",title:"Bóveda de secretos",description:"Gestionar secrets cifrados en el vault. Los valores nunca se exponen.",tenantId:"ID del inquilino",refresh:"Cargar secrets",create:"Añadir secret",createTitle:"Añadir secret",keyName:"Nombre de clave",keyNameLabel:"Nombre de clave",keyNamePlaceholder:"ej. apiKey, dbPassword",valueLabel:"Valor del secret",valuePlaceholder:"Introduzca el valor del secret…",storeWarning:"El valor será cifrado. No podrá recuperarse una vez almacenado.",store:"Almacenar secret",storeSuccess:'Secret "{{key}}" almacenado',deleteSuccess:'Secret "{{key}}" eliminado',created:"Creado",lastAccessed:"Último acceso",checksum:"Suma de verificación",actions:"Acciones",confirmDeleteTitle:"Eliminar secret",confirmDeleteMessage:'¿Está seguro de que desea eliminar permanentemente "{{key}}"? Esta acción no se puede deshacer.',empty:"No se encontraron secrets",emptyHint:"Aún no hay secrets almacenados para el inquilino «{{tenant}}». Haz clic en «Añadir secret» para crear uno.",vaultUp:"Vault en línea",vaultDown:"Vault fuera de línea",descriptionLabel:"Descripción (opcional)",descriptionPlaceholder:"p. ej. Clave API OpenAI para producción",descriptionCol:"Descripción",reference:"Referencia",willUseRef:"Referencia:",copyRef:"Copiar referencia del cofre",refCopied:"Copiado: {{ref}}",lastRotated:"Última rotación",scopeExplanation:"Los secretos están limitados por inquilino y se comparten entre todos los agentes. Refiérase a ellos con ${vault:keyName}. El acceso lo controla el autor de la configuración.",creatingFor:'Almacenando en el inquilino "{{tenant}}" — disponible para todos los agentes',vaultNotConfigured:"El cofre de secretos no está configurado",viewDocs:"Ver documentación",selectAgentFirst:"Seleccione primero un agente",dangerZoneTitle:"Ciclo de vida de la clave de cifrado",dangerZoneDesc:"Acciones de recuperación operativa para las claves criptográficas del Vault. Úselas para rotar claves o recuperar el acceso después de que cambie la clave maestra. Distinto de rotar el valor de un secreto individual más arriba.",rotateDekTitle:"Rotar la clave de cifrado (DEK)",rotateDekBlurb:"Seguro — sin reinicio. Genera una nueva clave de cifrado de datos por inquilino y vuelve a cifrar todos los secretos de este inquilino.",rotateDekAction:"Rotar DEK",rotateDekConfirmTitle:"¿Rotar la clave de cifrado (DEK)?",rotateDekConfirm:"Rotar DEK ahora",rotateKekTitle:"Rotar la clave maestra (KEK)",rotateKekBlurb:"Vuelve a cifrar todos los DEK de los inquilinos con una nueva clave maestra. Requiere actualizar EDDI_VAULT_MASTER_KEY y reiniciar después.",rotateKekAction:"Rotar clave maestra",rotateKekConfirmTitle:"¿Rotar la clave maestra (KEK)?",rotateKekConfirmDesc:"Vuelve a cifrar la clave de cifrado de datos de cada inquilino con una nueva clave maestra. Los valores de los secretos en sí no cambian.",rotateKekConfirm:"Rotar clave maestra ahora",kekTlsWarning:"Ambas claves se envían en el cuerpo de la solicitud. Realice esto solo a través de una conexión TLS (HTTPS) para que las claves no queden expuestas en tránsito.",kekOldKeyLabel:"Clave maestra actual",kekOldKeyPlaceholder:"EDDI_VAULT_MASTER_KEY actual",kekNewKeyLabel:"Nueva clave maestra",kekNewKeyPlaceholder:"Nueva clave — al menos 8 caracteres",kekNewKeyTooShort:"La nueva clave maestra debe tener al menos 8 caracteres.",kekRestartHint:"Después de la rotación, debe actualizar EDDI_VAULT_MASTER_KEY con la nueva clave y reiniciar EDDI.",kekResultInstruction:"Acción requerida: establezca la variable de entorno EDDI_VAULT_MASTER_KEY con la NUEVA clave maestra y reinicie EDDI. Hasta que lo haga, la instancia en ejecución seguirá usando la clave anterior en memoria.",resetTenantTitle:"Restablecer el Vault para este inquilino",resetTenantBlurb:"Último recurso destructivo. Elimina permanentemente todos los secretos y el DEK para que el Vault pueda empezar de cero — úselo después de perder o cambiar la clave maestra.",resetTenantAction:"Restablecer Vault",resetTenantConfirmTitle:"¿Restablecer el Vault para este inquilino?",resetTenantConfirm:"Restablecer el Vault permanentemente",resetConfirmLabel:'Escriba el nombre del inquilino "{{tenant}}" para confirmar',tableTitle_many:'{{count}} secretos en el inquilino "{{tenant}}"',tableTitle_one:'{{count}} secreto en el inquilino "{{tenant}}"',tableTitle_other:'{{count}} secretos en el inquilino "{{tenant}}"',rotateDekConfirmDesc_many:'Esto genera una nueva clave de cifrado de datos para el inquilino "{{tenant}}" y vuelve a cifrar sus {{count}} secretos. Es seguro y surte efecto de inmediato — no se requiere reinicio.',rotateDekConfirmDesc_one:'Esto genera una nueva clave de cifrado de datos para el inquilino "{{tenant}}" y vuelve a cifrar sus {{count}} secreto. Es seguro y surte efecto de inmediato — no se requiere reinicio.',rotateDekConfirmDesc_other:'Esto genera una nueva clave de cifrado de datos para el inquilino "{{tenant}}" y vuelve a cifrar sus {{count}} secretos. Es seguro y surte efecto de inmediato — no se requiere reinicio.',rotateDekSuccess_many:"Clave de cifrado rotada — {{count}} secretos vueltos a cifrar",rotateDekSuccess_one:"Clave de cifrado rotada — {{count}} secreto vuelto a cifrar",rotateDekSuccess_other:"Clave de cifrado rotada — {{count}} secretos vueltos a cifrar",kekResultTitle_many:"Clave maestra rotada — {{count}} DEK vueltos a cifrar",kekResultTitle_one:"Clave maestra rotada — {{count}} DEK vuelto a cifrar",kekResultTitle_other:"Clave maestra rotada — {{count}} DEK vueltos a cifrar",rotateKekSuccess_many:"Clave maestra rotada — {{count}} DEK vueltos a cifrar. Actualice EDDI_VAULT_MASTER_KEY y reinicie.",rotateKekSuccess_one:"Clave maestra rotada — {{count}} DEK vuelto a cifrar. Actualice EDDI_VAULT_MASTER_KEY y reinicie.",rotateKekSuccess_other:"Clave maestra rotada — {{count}} DEK vueltos a cifrar. Actualice EDDI_VAULT_MASTER_KEY y reinicie.",resetTenantConfirmDesc_many:'Esto elimina permanentemente todos los {{count}} secretos y la clave de cifrado de datos del inquilino "{{tenant}}". Use esto como paso de recuperación cuando la clave maestra se perdió o cambió y la clave anterior no está disponible. Esto no se puede deshacer.',resetTenantConfirmDesc_one:'Esto elimina permanentemente todos los {{count}} secreto y la clave de cifrado de datos del inquilino "{{tenant}}". Use esto como paso de recuperación cuando la clave maestra se perdió o cambió y la clave anterior no está disponible. Esto no se puede deshacer.',resetTenantConfirmDesc_other:'Esto elimina permanentemente todos los {{count}} secretos y la clave de cifrado de datos del inquilino "{{tenant}}". Use esto como paso de recuperación cuando la clave maestra se perdió o cambió y la clave anterior no está disponible. Esto no se puede deshacer.',resetSecretCount_many:"{{count}} secretos se perderán permanentemente",resetSecretCount_one:"{{count}} secreto se perderán permanentemente",resetSecretCount_other:"{{count}} secretos se perderán permanentemente",resetTenantSuccess_many:'Vault restablecido para "{{tenant}}" — {{count}} secretos eliminados permanentemente',resetTenantSuccess_one:'Vault restablecido para "{{tenant}}" — {{count}} secreto eliminados permanentemente',resetTenantSuccess_other:'Vault restablecido para "{{tenant}}" — {{count}} secretos eliminados permanentemente'},M={title:"Registro de auditoría",description:"Explore el registro de auditoría inmutable para cumplimiento y depuración.",byConversation:"Por conversación",byAgent:"Por agent",conversationIdPlaceholder:"Introduzca ID de conversación...",agentIdPlaceholder:"Introduzca Agent ID...",versionPlaceholder:"Versión (opcional)",search:"Buscar",entries:"entradas",totalDuration:"total",totalCost:"coste total",step:"Paso",tasks:"tareas",input:"Entrada",output:"Salida",llmDetail:"Detalle LLM",toolCalls:"Llamadas a herramientas",hmacIntegrity:"Integridad HMAC verificada",empty:"Buscar entradas de auditoría",emptyHint:"Introduzca un ID de conversación o agent arriba para explorar el audit trail.",noResults:"No se encontraron entradas de auditoría",noResultsHint:"Pruebe con otro ID o verifique que la conversación ha sido procesada.",loadMore:"Cargar más",selectAgent:"Select an agent…",conversations:"conversations",emptyAgent:"Select an agent to view its audit trail",emptyAgentHint:"Choose a deployed agent from the dropdown above to see all its audit records.",export:"Export",autoRefreshToggle:"Toggle auto-refresh (every 10s)",autoRefreshOn:"Auto",autoRefreshOff:"Auto",integrityVerified:"All entries cryptographically signed",integrityVerifiedDesc:"{{count}} of {{total}} entries have HMAC-SHA256 signatures",integrityPass:"SIGNED",integrityPartial:"Partially signed audit trail",integrityPartialDesc:"{{count}} of {{total}} entries have HMAC signatures",integrityNone:"Unsigned audit entries",integrityNoneDesc:"Configure a vault master key to enable automatic HMAC-SHA256 signing on all future audit entries.",signed:"Signed",allSigned:"All signed",decidedBy:"por",automated:"automatizado"},N={cronHelp:"Formato de 5 campos: minuto hora día-del-mes mes día-de-la-semana",cronEveryMinute:"Cada minuto",cronEveryNMinutes:"Cada {{n}} minutos",cronHourlyAt:"Cada hora en el minuto :{{minute}}",cronEveryNHours:"Cada {{n}} horas en el minuto :{{minute}}",cronAtTime:"A las {{time}}",cronAtMinutePastEveryHour:"En el minuto {{minutes}} de cada hora",cronAtMinutePastHours:"En el minuto {{minutes}} de la hora {{hours}}",cronOnDays:"los {{days}}",cronOnDayOfMonth:"el día del mes {{days}}",cronInMonths:"en {{months}}",cronInvalid:"Expresión cron no válida (se esperaban 5 campos)",cronTooFrequent:"Se ejecuta con más frecuencia que el mínimo de 60 segundos",failedEmptyHint:"Las ejecuciones en la cola de fallidos aparecerán aquí para reintentarlas o descartarlas.",failedSubtitle:"Ejecuciones que fallaron de forma permanente. Reintente para volver a encolarlas, o descártelas para borrarlas sin volver a ejecutarlas.",intervalTooShort:"El intervalo debe ser de al menos 60 segundos",lastManualFire:"Última ejecución manual",oneTimeHelp:"Se ejecuta una vez en este momento y luego finaliza. Se interpreta en su hora local.",outcomePending:"activada — a la espera del resultado",persistentConversationId:"ID de conversación persistente",persistentConversationIdPlaceholder:"Se genera automáticamente si se deja en blanco",strategyPersistent:"Persistente (reutilizar la misma conversación)",fireDeadLettered:"Cola de fallidos",fireFailed:"Fallido",fireCompleted:"Completado",title:"Programaciones",subtitle:"Gestionar disparadores programados de agents — Cron y Heartbeats",create:"Crear programación",createTitle:"Crear programación",createSuccess:"Programación creada con éxito",createError:"Error al crear la programación",creating:"Creando...",name:"Nombre",namePlaceholder:"ej. Verificación diaria",triggerType:"Tipo de disparador",cronExpression:"Expresión Cron",interval:"Intervalo (segundos)",agentId:"Agent ID",agentIdPlaceholder:"Introduzca Agent ID...",environment:"Entorno",message:"Mensaje",messagePlaceholder:"Mensaje a enviar al agent",conversationStrategy:"Estrategia de conversación",total:"Programaciones totales",active:"Activas",failedCount:"Fallidas / Dead-Lettered",nextFireLabel:"Próxima ejecución",tableTitle:"Todas las programaciones",empty:"Aún no hay programaciones",emptyHint:"Cree una programación para automatizar disparadores de agents.",colName:"Nombre",colType:"Tipo",colSchedule:"Programación",colAgent:"Agente",colStatus:"Estado",colNextFire:"Próxima ejec.",colLastFired:"Última ejec.",colActions:"Acciones",enable:"Activar",disable:"Desactivar",enabled:"Programación activada",disabled:"Programación desactivada",toggleError:"Error al cambiar estado",fireNow:"Ejecutar ahora",fired:"Programación ejecutada con éxito",fireError:"Error en la ejecución",retry:"Reintentar",retrySuccess:"Programación reencolada",retryError:"Error al reintentar",deleteSuccess:"Programación eliminada",deleteError:"Error al eliminar la programación",fireHistory:"Historial de ejecución",hitlTimeout:"Tiempo de espera HITL",hitlTimeoutHint:"Tiempo de espera de aprobación HITL gestionado por el sistema — resuélvelo mediante la aprobación de la conversación, no aquí.",statusDisabled:"Desactivada",statusActive:"Activa",statusRunning:"En ejecución",statusExecuting:"Ejecutando",statusFailed:"Fallida",statusDeadLettered:"Dead-Letter",typeHeartbeat:"Heartbeat",typeOneTime:"Única vez",typeCron:"Cron",noFireHistory:"Aún no hay historial de ejecución",logFired:"Ejecutado",logDuration:"Duración",logResult:"Resultado",logAttempt:"Intento",logCost:"Costo",logConversation:"Conversación",dismissSuccess:"Dead-letter descartado",dismissError:"No se pudo descartar el dead-letter",failedTitle:"Ejecuciones fallidas y dead-letter",failedEmpty:"Sin ejecuciones fallidas",colSchedule2:"Programación",dismiss:"Descartar",updateSuccess:"Programación actualizada",updateError:"No se pudo actualizar la programación",editTitle:"Editar programación",cronNext:"Siguiente",oneTimeAt:"Fecha y hora",timeZone:"Zona horaria",agentVersion:"Versión",agentVersionHint:"0 = última desplegada",envProduction:"Producción",envTest:"Prueba",userId:"ID de usuario",userIdPlaceholder:"system:scheduler",maxCostPerFire:"Costo máx. por ejecución",unlimited:"Ilimitado",strategyNew:"Nueva (conversación nueva en cada ejecución)",saving:"Guardando...",fireOutcomeFailed:"Ejecución fallida",unknownError:"error desconocido",tabSchedules:"Programaciones",tabFailed:"Fallido / Dead-letter",cronPreset:{every15Minutes:"Cada 15 minutos",hourly:"Cada hora (en punto)",dailyMorning:"Diariamente a las 09:00",weekdays:"Días laborables a las 09:00",weeklyMonday:"Semanal (lun 00:00)",monthly:"Mensual (día 1, 00:00)"}},w={title:"Cascada de modelos",escalated:"confianza {{c}} < {{th}}",escalatedShort:"escalado",accepted:"aceptada",reason:{lowConfidence:"confianza baja",timeout:"tiempo agotado",error:"error",retryableError:"error reintentable"}},q={pipelineError:"Error al cargar el rastreo del pipeline",title:"Depuración",tabPipeline:"Pipeline",tabCosts:"Costes",tabMemory:"Memoria",tabLogs:"Registros",tabPrompt:"Prompt",turn:"Turno",latest:"Último",noPipeline:"Envíe un mensaje para ver el rastreo del pipeline",processing:"Procesando...",actions:"Acciones",confidence:"Confianza",duration:"Duración",cost:"Coste",in:"entrada",input:"Entrada",model:"Modelo",out:"salida",output:"Salida",tokens:"Tokens",toolCalls:"Herramientas"},z={error:"No se pudieron cargar los datos de coste del servidor",thisTurn:"Este turno",conversationTotal:"Total de la conversación",tokens:"Tokens",cost:"Coste",duration:"Duración",model:"Modelo",toolCalls:"Llamadas de herramientas",toolUsage:"Uso de herramientas",cacheStats:"Caché",hitRate:"Tasa de aciertos",empty:"Envíe un mensaje para ver las métricas de costes",in:"entrada",out:"salida",total:"total",calls:"llamadas",avgLatency:"Latencia media",input:"Entrada",output:"Salida",tokenDistribution:"Distribución de tokens",totalCost:"Coste total",totalTokens:"Tokens totales",turns:"Turnos"},H={error:"Error al cargar los datos de memoria",title:"Memoria de conversación",noConversation:"Inicie una conversación para inspeccionar la memoria",empty:"No hay datos de memoria disponibles",properties:"Propiedades",step:"Paso",keys:"claves",input:"Entrada",collapseAll:"Contraer todo",copyKey:"Copiar clave",copyValue:"Copiar valor",customProperties:"Propiedades personalizadas",expandAll:"Expandir todo",noMatches:"No se encontraron datos coincidentes",search:"Buscar claves o valores…",stepData:"Datos del paso",systemProperties:"Propiedades del sistema"},O={noAgent:"Seleccione un agent para ver los registros",search:"Buscar...",pause:"Pausa",resume:"Reanudar",clear:"Limpiar",waiting:"Esperando registros...",connected:"Conectado",disconnected:"Desconectado",logOutput:"Salida de registro",noMatch:"Ningún registro coincide con tu filtro"},F={error:"Error al cargar los datos del prompt",noConversation:"Inicie una conversación para inspeccionar los prompts",noLlm:"Aún no se encontraron interacciones con LLM",turn:"Turno",latest:"Último",tokens:"Tokens",model:"Modelo",cost:"Coste",copy:"Copiar prompt",copied:"¡Copiado!",replay:"Reintentar este turno",toolCalls:"Llamadas de herramientas",step:"Paso",roleSystem:"Prompt del sistema",roleUser:"Usuario",roleAssistant:"Asistente",roleTool:"Resultado de herramienta",collapse:"Contraer",showMore:"Mostrar más",temperature:"Temp"},V={preview:"Vista previa",edit:"Editar",switchToPreview:"Vista previa del prompt resuelto",switchToEdit:"Cambiar a edición",refresh:"Actualizar",sampleData:"Datos de ejemplo (sin conversación)",disclaimerReal:"La vista previa usa el motor Qute con datos reales de conversación.",disclaimerSample:"La vista previa usa el motor Qute con datos de ejemplo. Seleccione una conversación para valores reales.",resolvedPrompt:"Prompt resuelto",copy:"Copiar",copied:"¡Copiado!",error:"Error al resolver la plantilla",loading:"Resolviendo plantilla…",availableVariables:"Variables disponibles",copyVariable:"Clic para copiar referencia",varProperties:"Propiedades",varMemory:"Memoria",varContext:"Contexto",varSnippets:"Fragmentos",varUserInfo:"Info del usuario",varConversationInfo:"Info de conversación",varInput:"Entrada",varConversationLog:"Registro de conversación"},U={title:"Estudio de Agentes",subtitle:"Construya, pruebe y depure sus agents en un solo espacio de trabajo",pipeline:"Pipeline",editor:"Editor",debug:"Debug & Chat",selectStage:"Haga clic en una etapa del pipeline para abrir su editor",openInStudio:"Abrir en Studio",loading:"Cargando agent...",notFound:"Agent no encontrado",hideChat:"Ocultar chat",showChat:"Mostrar chat",openEditor:"Abrir en Editor",editorComingSoon:"Integración de editor en el lugar próximamente",noPipeline:"Sin etapas de pipeline",type:{parser:"Analizador",rules:"Reglas de comportamiento",property:"Definidor de propiedades",apicalls:"Llamadas API",llm:"LLM",output:"Salida","output.template":"Plantilla de salida",mcpcalls:"Llamadas MCP",rag:"Bases de conocimiento",dictionary:"Diccionario"},landingDescription:"Seleccione un agente para abrir el editor visual, el depurador y el chat en vivo",noAgents:"No se encontraron agentes — cree uno en la página de Agentes",chat:"Chat",backToAgent:"Volver al agente",selectStageHint:"Seleccione una extensión del pipeline para ver y editar su configuración directamente",noConfig:"Esta etapa del pipeline no tiene URI de configuración",unsupportedType:"Editor no disponible para este tipo de extensión"},_={general:"General",kbName:"Nombre de la base de conocimiento",kbNamePlaceholder:"ej. docs-producto, faq, wiki-interna",kbNameHint:"Usado para referenciar esta base desde tareas de LLM",embeddingModel:"Modelo de Embedding",provider:"Proveedor",embeddingParams:"Parámetros del Provider",embeddingParamsHint:"Nombre de modelo, API key (use ${vault:...} para secrets), base URL, etc.",vectorStore:"Almacén vectorial",storeType:"Tipo de almacén",storeParams:"Parámetros de conexión",chunking:"Fragmentación de documentos",chunkStrategy:"Estrategia",chunkSize:"Tamaño del fragmento",chunkOverlap:"Superposición",overlapHint:"La superposición ayuda a mantener el contexto entre fragmentos",chunkPreview:"Vista previa (cómo se dividirá el documento)",chunkBlocks:"{{count}} fragmentos de ~{{size}} caracteres con {{overlap}} superpuestos",retrievalDefaults:"Opciones predeterminadas de recuperación",retrievalHint:"Estas opciones se pueden sobrescribir por tarea en la configuración del LLM.",maxResults:"Resultados máximos (top-K)",minScore:"Puntuación mínima de similitud",ingestion:"Ingesta de documentos",dropFiles:"Arrastre documentos aquí para ingerir",dropHint:"Texto, Markdown o cualquier archivo de texto",browse:"Buscar",pasteText:"O pegue el contenido del texto",pastePlaceholder:"Pegue el texto del documento aquí...",ingestText:"Ingerir texto",ingestionHistory:"Estado de ingesta",saveFirstIngestion:"Guarde esta base de conocimiento primero para activar la ingesta de documentos.",addParam:"Añadir parámetro"},G={welcome:{title:"Bienvenido a EDDI",subtitle:"Su centro de comando de agentes de IA",introText:"EDDI Manager es su centro de comando para crear, probar y operar agentes de IA conversacional.",capabilitiesTitle:"Lo que puede hacer",capabilitiesSubtitle:"Todo lo que necesita para crear agentes de IA listos para producción",buildAgents:"Crear agentes",buildAgentsDesc:"Cree y configure agentes de IA con el asistente o desde cero",designWorkflows:"Diseñar workflows",designWorkflowsDesc:"Constructor de pipelines de arrastrar y soltar con reglas de comportamiento, cadenas de LLM y herramientas",testRealtime:"Probar en tiempo real",testRealtimeDesc:"Chatee con sus agentes con respuestas en streaming y depuración integrada",monitorOperate:"Supervisar y operar",monitorOperateDesc:"Conversaciones, audit trails, secrets y cuotas: todo en un solo lugar",readyTitle:"¿Listo para comenzar?",readySubtitle:"Puede reiniciar cualquier tour desde el menú Ayuda en la barra lateral",startTour:"Iniciar el tour",exploreOwn:"Exploraré por mi cuenta"},tour:{back:"Atrás",next:"Siguiente",skip:"Omitir Tour",finish:"Finalizar",stepOf:"Paso {{current}} de {{total}}",dashboard:{title:"Tour del Dashboard",step1Title:"Su centro de comando",step1Desc:"La barra lateral organiza todo en tres zonas: Gestión, Desarrollo y Operaciones. Siempre sabrá dónde encontrar todo.",step2Title:"Vistazo a la plataforma",step2Desc:"Recuentos en vivo de sus agentes, workflows y conversaciones. Haga clic en cualquier tarjeta para ir directamente a esa sección.",step3Title:"Acciones rápidas",step3Desc:"Acceda rápidamente a tareas comunes. El Asistente de Agentes es la forma más rápida de crear su primer agente: toma menos de 2 minutos.",step4Title:"Personalice el espacio",step4Desc:"Cambie entre temas claro, oscuro y de sistema. EDDI Manager habla 11 idiomas: elija el suyo en el selector de idiomas."},agents:{title:"Tour de Agents",step1Title:"Asistente de agentes",step1Desc:"El asistente le guiará en la creación de un agente completamente configurado: elija un modelo, asigne una personalidad, active herramientas y despliegue.",step2Title:"Creación manual",step2Desc:"Para usuarios avanzados: cree un agente en blanco y configúrelo con control total por JSON. Perfecto para configuraciones avanzadas.",step3Title:"Buscar y filtrar",step3Desc:"Encuentre agentes al instante por nombre. Cambie entre la vista de tarjetas y la lista con el interruptor de la derecha.",step4Title:"Su flota de agentes",step4Desc:"Cada tarjeta muestra el nombre del agente, su versión y la fecha de modificación. Haga clic en cualquier agente para ver su página de detalles y controlar su despliegue, chat y workflows."},workflows:{title:"Tour de Workflows",step1Title:"Crear un workflow",step1Desc:"Los workflows definen el pipeline de procesamiento: una secuencia de tareas como llamadas de LLM, reglas de comportamiento e integraciones HTTP.",step2Title:"Sus Workflows",step2Desc:"Cada workflow se puede adjuntar a uno o más agentes. Haga clic para abrir el editor visual de arrastrar y soltar.",step3Title:"Organice su vista",step3Desc:"Busque por nombre y cambie entre la cuadrícula de tarjetas y las tablas ordenables."},chat:{title:"Tour de Chat",step1Title:"Elija un agente",step1Desc:"Seleccione un agente desplegado para iniciar una conversación. Aquí solo aparecen los agentes que se han desplegado.",step2Title:"Modo Streaming",step2Desc:"Active el flujo de tokens en tiempo real. Cuando está habilitado, la respuesta aparece palabra por palabra: excelente para verificar la latencia.",step3Title:"Historial de conversación",step3Desc:"Abra la barra lateral para explorar y reanudar conversaciones anteriores.",step4Title:"Empiece a chatear",step4Desc:"Escriba un mensaje y presione Enter. El agente responderá utilizando el LLM, las herramientas y los workflows que ha configurado."},resources:{title:"Tour de Recursos",step1Title:"Biblioteca de extensiones",step1Desc:"Los recursos son los bloques de construcción de los workflows. Cada tipo controla una parte diferente del comportamiento del agente.",step2Title:"Configuraciones de LLM",step2Desc:"Defina qué modelo de IA potencia a su agente, su prompt de sistema, herramientas, servidores MCP y ajustes de cascading. Este es el cerebro del agente.",step3Title:"Reglas y Llamadas API",step3Desc:"Las Reglas de Comportamiento controlan el flujo de la conversación. Las Llamadas HTTP conectan a API externas. Ambas se pueden usar como herramientas de LLM."},conversations:{title:"Tour de Conversaciones",step1Title:"Búsqueda",step1Desc:"Encuentre conversaciones rápidamente por ID, agente o mensajes recientes de usuario.",step2Title:"Filtros de estado",step2Desc:"Filtre las sesiones por estado: Activa, En progreso, Finalizada o con Error.",step3Title:"Lista de conversaciones",step3Desc:"Explore todas las sesiones. Haga clic en la tarjeta de cualquier conversación para abrir el timeline y depurar el flujo."},groups:{title:"Tour de Grupos de Discusión",step1Title:"Crear grupo",step1Desc:"Cree un grupo de orquestación para permitir que varios agentes colaboren y debatan.",step2Title:"Buscar en grupos",step2Desc:"Busque fácilmente a través de sus clústeres multi-agente existentes.",step3Title:"Gestión de grupos",step3Desc:"Gestione sus entornos colaborativos, edite sus políticas o elimine los grupos antiguos."},logs:{newLogs:"Nuevos logs",title:"Tour de Registros de Sistema",step1Title:"Live vs Historial",step1Desc:"Cambie entre el flujo en tiempo real de los registros y la búsqueda en el historial.",step2Title:"Filtros de stream",step2Desc:"Filtre el flujo en vivo por agente o por un nivel de registro crítico.",step3Title:"Exportar",step3Desc:"Descargue los registros filtrados actuales como archivo de texto para analizarlos o guardarlos."},secrets:{title:"Tour del Secrets Vault",step1Title:"Crear Secret",step1Desc:"Almacene de forma segura una nueva API key, token o contraseña a la que sus agentes puedan acceder.",step2Title:"Aislamiento por Tenant",step2Desc:"Filtre la vista del Vault y asegúrese de que sus secrets estén vinculados a un Tenant ID específico.",step3Title:"Sintaxis de referencia",step3Desc:"Aprenda a inyectar secrets dinámicamente en sus configuraciones de LLM para evitar hardcodear información confidencial."},audit:{title:"Tour del Audit Trail",step1Title:"Modo de búsqueda",step1Desc:"Busque en el registro inmutable de auditoría por un ID de conversación específico o una versión de agente.",step2Title:"Ejecutar búsqueda",step2Desc:"Introduzca su ID y haga clic en buscar para extraer un historial de ejecución verificable.",step3Title:"Exportar ledger",step3Desc:"Exporte los registros auditables en formato JSON para informes y casos de cumplimiento de normativas."},schedules:{title:"Tour de Programaciones",step1Title:"Crear programación",step1Desc:"Configure una nueva tarea cron o heartbeat continuo para activar workflows de agentes de forma automatizada.",step2Title:"Estadísticas de salud",step2Desc:"Haga un seguimiento de las tareas totales, activas y fallidas por toda su plataforma.",step3Title:"Gestión",step3Desc:"Controle sus tareas automáticamente: pause, reanude, edite o fuerce su ejecución en cualquier momento."},quotas:{saveSuccess:"Cuota guardada",resetSuccess:"Contadores de uso restablecidos",resetConfirmDesc:"Pone a cero de inmediato todos los contadores de uso (conversaciones, llamadas API, coste mensual) del inquilino «default». No se puede deshacer.",resetConfirmTitle:"¿Restablecer los contadores de uso?",title:"Tour de Cuotas",step1Title:"Límites de uso",step1Desc:"Defina restricciones como máximo de agentes, conversaciones u otros límites de token para este Tenant.",step2Title:"Análisis de uso",step2Desc:"Inspeccione qué cantidad de la cuota asignada ha consumido cada tenant en tiempo real.",step3Title:"Aplicar cambios",step3Desc:"Guarde sus límites actualizados e inmediatamente la plataforma comenzará a bloquear tráfico que sobrepase estos umbrales."},coordinator:{title:"Tour del Coordinator",step1Title:"Conexión en vivo",step1Desc:"Vea las métricas de heartbeat y la conexión del evento sincronizada con su backend de coordinación.",step2Title:"Colas activas",step2Desc:"Monitoree las colas y las tareas procesándose actualmente a lo largo del clúster de agentes.",step3Title:"Mensajes muertos",step3Desc:"Inspeccione las tareas fallidas en la cola de dead-letter, descártelas o reinténtelas para mantener la plataforma estable."},orphans:{confirmPurgeAll:"¿Eliminar permanentemente TODOS los {{count}} recursos huérfanos? El servidor purga todos — tu selección no se aplica. Esto no se puede deshacer.",title:"Tour de Huérfanos",step1Title:"Escaneo de sistema",step1Desc:"Active el escaneo para buscar recursos o configuraciones que ya no estén conectadas ni utilizadas.",step2Title:"Historial y eliminados",step2Desc:"Si lo desea, active la inclusión de objetos previamente eliminados temporalmente para su purgación final.",step3Title:"Revisar y Purgar",step3Desc:"Compruebe todos los recursos reportados y use el botón de purgado total para reclamar memoria y espacio de la base de datos."}},help:{title:"Ayuda y Tour",platformTour:"Tour de la plataforma",resetAll:"Restablecer todos los tours",resetConfirm:"¿Restablecer el progreso de todos los tours?"},offer:{message:"¿Es su primera vez? Haga el {{page}}",accept:"Mostrar",dontAsk:"No volver a preguntar"}},B={status:"Estado de la plataforma",online:"En línea",offline:"Sin conexión",checking:"Verificando…",connected:"Conectado",disconnected:"Desconectado",instance:"Instancia",latency:"Latencia",lastChecked:"Última comprobación",justNow:"ahora mismo",secondsAgo:"hace {{count}}s"},W={live:"En vivo",reconnecting:"Reconectando…"},K={title:"Nuevo {{type}}",newAgent:"Nuevo Agent",newGroup:"Nuevo Grupo",quickCreate:"Creación rápida",quickCreateTitle:"Creación rápida de {{type}}",quickCreateDesc:"Establezca un nombre y descripción, configure los detalles más tarde.",guidedSetup:"Configuración guiada",guidedSetupDesc:"Asistente paso a paso con proveedor de LLM, prompts y despliegue."},J=JSON.parse('{"actionConflict":"Otra operación sigue en curso, o esta discusión ya no acepta esa acción. Vuelva a intentarlo.","actionTimeout":"Un agente miembro no respondió a tiempo. Inténtelo de nuevo.","actionUnreachable":"No se pudo contactar con un agente miembro. Inténtelo de nuevo.","addMember":"Añadir miembro","allowHtmlTooltip":"Cuando está activado, renderiza contenido HTML (saneado). Úselo solo con agentes de confianza.","askQuestion":"Haga una pregunta para que el grupo la debata…","assignAgents":"Asigne agentes a cada rol de miembro.","blankDesc":"Configurar todo manualmente.","characters":"caracteres","chooseTemplate":"Elija una plantilla o empiece desde cero.","closeConfirmDescription":"Cerrar finaliza permanentemente todas las conversaciones de los miembros y limpia los agentes efímeros. No es posible dar más seguimientos ni continuaciones. No se puede deshacer.","composeQuestion":"Redactar pregunta","continueButton":"Continuar","continueHint":"Vuelve a ejecutar todas las fases como una nueva ronda; cada agente conserva la memoria de las rondas anteriores. No se pueden añadir adjuntos a una continuación.","continuePlaceholder":"Continúe esta discusión con un seguimiento…","continueStreamStarted":"Continuación iniciada — transmisión en vivo","count":"{{count}} grupos","createSuccess":"Grupo creado con éxito","discussing":"Los agentes están debatiendo…","enterToSend":"Enter para enviar","expandInput":"Expandir entrada","followupHint":"Haga un seguimiento directo a un miembro. El agente conserva todo el contexto de la discusión; el intercambio se añade a la transcripción.","followupPlaceholder":"Haga una pregunta de seguimiento a este miembro…","inputDisabledApproval":"Esperando aprobación…","inputDisabledClosed":"Esta discusión está cerrada","inputDisabledCompleted":"Discusión completada","inputDisabledEnded":"Esta discusión ha finalizado","inputDisabledInProgress":"Discusión en curso…","membersCount":"{{count}} miembros","moderator":"Moderador (para la síntesis)","namePlaceholder":"p. ej. Comité asesor","newDiscussion":"Nueva discusión","newShort":"Nuevo","noModerator":"Sin moderador","noResponse":"Sin respuesta","contentTruncated":"[Contenido truncado]","protocolMaxRetries":"Reintentos máx.","protocolMaxRounds":"Rondas máx.","protocolOnFailure":"En caso de fallo","protocolSettings":"Protocolo","protocolTimeout":"Tiempo de espera","protocolUnavailable":"No disponible","question":"Pregunta","readyToDiscuss":"Listo para debatir","responding":"respondiendo…","reviewMemberRoster":"Lista de miembros","reviewMembers":"Miembros","reviewModerator":"Moderador","reviewNoModerator":"Ninguno (síntesis automática desactivada)","reviewRounds":"Rondas máx.","reviewTimeout":"Tiempo de espera del agente","reviewUnassigned":"Sin asignar","reviewUnassignedHint":"Vuelva atrás para asignar agentes antes de crear.","selectAgent":"Seleccionar agente…","selectOrStart":"Seleccione una discusión anterior del historial o escriba una pregunta abajo para iniciar una nueva.","shiftEnter":"nueva línea","skipped":"Omitido","sortByMembers":"Ordenar por miembros","sortByStyle":"Ordenar por estilo","speakingCount":"{{count}} interviniendo","startBlank":"Empezar desde cero","startDiscussion":"Debatir","stateCompleted":"Completado","stateCreated":"Creado","stateFailed":"Fallido","stateSynthesizing":"Sintetizando…","stepBasics":"Básicos","stepMembers":"Miembros","stepReview":"Revisar","stepTemplate":"Plantilla","submitShortcut":"Ctrl+Enter para enviar","synthesis":"Síntesis","synthesizing":"El moderador está sintetizando…","hitlSelectPhase":"Seleccione al menos una fase que requiera aprobación.","empty":"Sin grupos aún","emptyDescription":"Los grupos permiten que múltiples agentes colaboren en discusiones estructuradas.","createGroup":"Crear grupo","unnamed":"Grupo sin nombre","count_one":"{{count}} grupo","count_other":"{{count}} grupos","confirmDelete":"¿Eliminar este grupo?","confirmDeleteDesc":"La configuración del grupo se eliminará permanentemente.","duplicateSuccess":"Grupo duplicado","noDescription":"Sin descripción","members":"miembros","discussionStyle":"Estilo de discusión","maxRounds":"Rondas máx.","styleTaskForce":"Task Force","stateAwaitingApproval":"Pendiente de aprobación","stateCancelled":"Cancelado","phasePlan":"Planificación","phaseExecute":"Ejecución","phaseVerify":"Verificación","preConfiguredTasks":"Tareas preconfiguradas","dynamicAgents":"Agentes dinámicos","dynamicCreation":"Creación","dynamicRecruitment":"Reclutamiento","dynamicDelegation":"Delegación","lifecyclePolicy":"Ciclo de vida","allowedProviders":"Proveedores","liveIndicator":"● LIVE","htmlToggle":"HTML","memberTypeGroup":"Grupo","moderatorBadge":"⭐ Mod","styleColumn":"Estilo","membersColumn":"Miembros","memberOverflow":"+{{count}} más","defaultLabel":"Grupo","liveDiscussion":"En vivo","state":{"CREATED":"Creado","IN_PROGRESS":"En progreso","SYNTHESIZING":"Sintetizando","COMPLETED":"Completado","FAILED":"Fallido","ERROR":"Error","AWAITING_APPROVAL":"Pendiente de aprobación","CANCELLED":"Cancelado","AWAITING_HUMAN_INPUT":"Esperando a un miembro","CLOSED":"Cerrada"},"preConfiguredTasksCount":"Tareas preconfiguradas ({{count}})","entryType":{"QUESTION":"Pregunta","OPINION":"Opinión","CRITIQUE":"Crítica","REVISION":"Revisión","CHALLENGE":"Objeción","DEFENSE":"Defensa","ARGUMENT":"Argumento","REBUTTAL":"Refutación","SYNTHESIS":"Síntesis","ERROR":"Error","SKIPPED":"Omitido","PLAN":"Plan","TASK_RESULT":"Resultado de tarea","VERIFICATION":"Verificación","FOLLOW_UP":"Seguimiento","ABSTAINED":"Abstención","DISSENT":"Discrepancia","CONVERGENCE":"Convergencia","FACILITATION":"Facilitación","VOTE":"Voto","PROPOSAL":"Propuesta","BARGAIN":"Contraoferta","HUMAN_INPUT":"Aporte humano","RETRO":"Retrospectiva","BID":"Puja"},"flow":{"Opinion":"Opinión","Discussion":"Discusión","Synthesis":"Síntesis","Critique":"Crítica","Revision":"Revisión","Challenge":"Objeción","Defense":"Defensa","Independent":"Independiente","AnonymousSharing":"Compartir anónimo","Revised":"Revisado","ProOpening":"Apertura a favor","ConOpening":"Apertura en contra","Rebuttals":"Refutaciones","Judgment":"Juicio","Plan":"Planificación","Execute":"Ejecución","Verify":"Verificación","Synthesize":"Sintetizar"},"lifecycle":{"EPHEMERAL":"efímero","KEEP_DEPLOYED":"mantener desplegado","UNDEPLOY_ONLY":"solo retirar","AGENT_DECIDES":"el agente decide"},"dynamicMax":"✓ (max {{count}})","dynamicMaxPerTask":"✓ (máx. {{count}}/tarea)","protocolMaxTurns":"Turnos máx.","speakingOrderTooltip":"Orden de intervención: #{{order}}","allowedModels":"Modelos","inheritParentModel":"Heredar modelo","enabled":"Activado","disabled":"Desactivado","turnOrderSequential":"secuencial","turnOrderParallel":"paralelo","requiresApproval":"requiere aprobación","item":"elemento","items":"elementos","contextScope":{"NONE":"independiente","FULL":"contexto completo","LAST_PHASE":"última fase","ANONYMOUS":"anónimo","OWN_FEEDBACK":"feedback propio","TASK_ONLY":"solo tarea","TASK_WITH_DEPS":"tarea + dependencias"},"configuration":"Configuración","deleteGroupOnly":"Eliminar solo el grupo","deleteGroupOnlySuccess":"Grupo eliminado (agentes conservados)","deleteGroupOnlyWarning":"Esto eliminará el grupo. Todos los agentes miembros se mantendrán.","deleteGroupAndAgents":"Eliminar grupo + todos los agentes","deleteWithMembersSuccess":"Grupo y todos los agentes miembros eliminados (eliminación suave)","deleteWithMembersWarning":"Esto eliminará suavemente el grupo y todos los {{count}} agentes miembros. Se podrán recuperar.","hideDiscussions":"Ocultar panel de discusiones","showDiscussions":"Mostrar panel de discusiones","hideConfig":"Ocultar panel de configuración","showConfig":"Mostrar panel de configuración","hitlSection":"Aprobación humana","hitlApprovalPoints":"Aprobación en","hitlOnTaskRejection":"Al rechazar","hitlEdit":"Editar","hitlSaved":"Configuración de aprobación guardada","hitlEnable":"Requerir aprobación humana","hitlApprovalPhases":"Fases que requieren aprobación","hitlNotConfigured":"No hay controles de aprobación configurados — haz clic en Editar para requerir aprobación humana.","driftTitle":"La configuración del grupo cambió durante la pausa","driftRecovery":"La reanudación se abortó porque las fases del grupo cambiaron. La discusión sigue a la espera de aprobación — corrige la configuración (Editar, en el panel de Configuración) y aprueba de nuevo, o cancélala.","discussionStarted":"Discusión iniciada — transmisión en vivo","continueStarted":"Nueva ronda iniciada","followupSent":"Seguimiento enviado","discussionClosed":"Discusión cerrada","backToGroups":"Volver a Grupos","noDiscussions":"Aún no hay discusiones","askBelow":"Haga una pregunta abajo para comenzar","exitFullscreen":"Salir de pantalla completa","enterFullscreen":"Pantalla completa","discussions":"Discusiones","discussionComplete":"Discusión completada","continueDiscussion":"Continuar (nueva ronda)","followupMember":"Dar seguimiento con un miembro","closeDiscussion":"Cerrar discusión","currentRound":"Actualmente en la ronda","startNextRound":"Iniciar la siguiente ronda","selectMember":"Seleccionar un miembro","sendFollowup":"Enviar seguimiento","closeConfirmTitle":"¿Cerrar esta discusión?","closeConfirmButton":"Cerrar discusión","closeConfirmDismiss":"Volver","count_many":"{{count}} grupos","protocolMaxCost":"Límite de coste","protocolOnCostExceeded":"Al alcanzarlo","costAbort":"Abortar","costSynthesize":"Sintetizar ahora","deliberationSection":"Deliberación","recordDissents":"Voto particular","agentFiledTasks":"Tareas creadas por agentes","agentFiledCaps":"Límites","agentFiledCapsValue":"{{perDiscussion}} / debate · {{perTurn}} / turno","moderatorlessWarning":"Restringido a un moderador que este grupo no tiene: {{phases}}. El primer miembro por orden de intervención lo sustituirá.","roleCoverageWarning":"Ningún miembro tiene el rol «{{role}}»: en {{phases}} hablarán todos los miembros.","delegationDepth":"Profundidad máx.","delegationTimeout":"Tiempo del delegado","secondsShort":"{{seconds}}s","delegationTargets":"Lista permitida","phaseBehaviour":"Comportamiento de fases","phaseBehaviourNone":"Sin abstención ni convergencia configuradas: pulsa Editar para permitir pasar o detener una fase repetida al haber acuerdo.","abstentionShort":"abstención","convergenceShort":"convergencia ≥{{threshold}}","phasesSaved":"Ajustes de fase guardados","phasesNoneToEdit":"Este grupo no define fases. Elige un estilo de debate, o añade fases a la configuración, antes de ajustar su comportamiento.","phaseRepeats":"×{{repeats}}","allowAbstention":"Permitir abstención","allowAbstentionHelp":"Un miembro puede no aportar nada nuevo en esta ronda en lugar de repetirse.","convergenceEnable":"Detener antes al converger","convergenceHelp":"Un juez compara cada repetición con la anterior y termina la fase cuando los miembros dejan de moverse. Cuesta una llamada por repetición.","convergenceNeedsRepeats":"Solo disponible en una fase que se repite: una única pasada no tiene con qué compararse.","convergenceMinRepeats":"Repeticiones mín.","convergenceThreshold":"Umbral","convergenceJudge":"Juez","judgeModerator":"Moderador","judgeService":"Servicio","judgeServiceNote":"Aceptado pero aún sin conectar: el motor recurre al moderador y registra un aviso.","convergenceReached":"Convergido","convergenceChecked":"Comprobación de convergencia","convergenceScore":"acuerdo {{score}}","decisionWinner":"Ganador: {{winner}}","decisionTie":"Empate","decisionDecidedAt":"Decidido en {{phase}}","decisionUnparsed":"La respuesta del juez no pudo leerse como un veredicto estructurado: se conserva literal abajo y la conclusión queda en prosa.","minorityReport":"Voto particular ({{total}})","attachFiles":"Adjuntar archivos","attachmentLimit":"Como máximo {{max}} adjuntos por debate","attachmentTooLarge":"{{name}} es demasiado grande para adjuntar","attachmentReadFailed":"No se pudo leer {{name}}","removeAttachment":"Quitar {{name}}","decisionType":{"VERDICT":"Veredicto","VOTE":"Votación","AGREEMENT":"Acuerdo","AWARD":"Adjudicación","NONE":"Sin decisión estructurada"},"abstainedBody":"No aportó nada nuevo en esta ronda.","convergenceSkipped_one":"· {{count}} ronda adicional omitida","convergenceSkipped_many":"· {{count}} rondas adicionales omitidas","convergenceSkipped_other":"· {{count}} rondas adicionales omitidas","attachmentTotalTooLarge":"Los adjuntos superan el límite de tamaño total","convergenceInert":"Configurado, pero esta fase se ejecuta una sola vez: el juez nunca podrá actuar. Quítalo, o da a la fase más de una repetición.","questionTooLong":"Una pregunta puede tener como máximo {{max}} caracteres","charactersOverLimit":"{{current}} / {{max}} caracteres","advancedSection":"Colaboración avanzada","artifactConfigLabel":"Artefactos compartidos","artifactConfigValue":"máx. {{count}}/discusión","artifactCreatedBadge":"{{name}} creado (v{{version}})","artifactDraft":"Borrador","artifactFinal":"Final","artifactLastEdited":"Última edición de {{agent}}","artifactUpdatedBadge":"{{name}} actualizado (v{{version}})","artifactsTitle":"Artefactos compartidos ({{count}})","concessionLedgerTitle":"Registro de concesiones","contextWindowLabel":"Ventana de transcripción","contextWindowValue":"últimas {{count}} entradas{{summarized}}","facilitatorLabel":"Facilitador","facilitatorMoves":"Acciones permitidas","humanMemberConfigLabel":"Tiempo de espera del turno humano","humanTurnRequestedAt":"Solicitado","humanTurnResponsePlaceholder":"Su respuesta","humanTurnSubmit":"Enviar","humanTurnSubmitted":"Su respuesta ha sido registrada","humanTurnSubmitting":"Enviando…","humanTurnTimeout":"Tiempo de espera","humanTurnTitle":"Es su turno, {{name}}","inputDisabledHumanTurn":"Esperando el turno de un miembro…","memberTypeHuman":"Humano","negotiationAcceptedBy":"Aceptado por: {{names}}","negotiationGaveUp":"cedió","negotiationInReturnFor":"a cambio de","negotiationOpen":"Abierta","negotiationRound":"Ronda {{round}}","negotiationSuperseded":"Reemplazada","negotiationTableTitle":"Mesa de negociación","notSet":"no establecido","retroConfigLabel":"Lecciones de la retrospectiva","retroConfigValue":"{{perRun}}/ejecución, {{stored}} máx. almacenadas","stateAwaitingHumanInput":"Esperando a un miembro","summarized":"resumido","transcriptWindowed":"Las primeras {{count}} entradas de la transcripción se han condensado en un resumen continuo para limitar el contexto de los turnos posteriores. Pase el cursor para ver el resumen.","voteMethod":"Método","voteMethodApproval":"Aprobación","voteMethodMajority":"Mayoría","voteOptionsExplicit":"Lista explícita","voteOptionsLastSynthesis":"Extraer de la última síntesis","voteOptionsList":"Opciones (una por línea)","voteOptionsSource":"Opciones de la votación","voteQuorum":"Quórum","voteTieHuman":"Decide un humano (aún no disponible)","voteTieModerator":"Decide el moderador","voteTieNoDecision":"Sin decisión","voteTiePolicy":"En caso de empate","voteWeightByConfidence":"Ponderar por confianza","waitIndefinitely":"Esperar indefinidamente","advancedSaved":"Ajustes de colaboración guardados","advancedNotConfigured":"Sin ventana de transcripción, memoria retro, artefactos compartidos ni facilitador configurados: haga clic en Editar para activarlos.","contextWindowHint":"Acota el contexto de cada turno en discusiones largas plegando las entradas antiguas en un resumen continuo.","contextWindowEntries":"Entradas recientes conservadas completas","contextWindowSummarize":"Resumir lo que sale de la ventana","contextWindowTruncateNote":"Las entradas antiguas se sustituyen por una marca simple: «N entradas anteriores omitidas».","retroConfigHint":"Permite que una fase retro escriba lecciones en la memoria del equipo, que se arrastran a discusiones posteriores.","retroPerRun":"Por ejecución","retroStored":"Máximo almacenado","artifactConfigHint":"Permite que los miembros redacten juntos documentos que sobreviven al turno en que se escribieron.","artifactsPerDiscussion":"Máximo por discusión","facilitatorHint":"Un agente que interviene en cada punto de control y elige un solo movimiento de la lista permitida: nunca un orquestador libre.","facilitatorAgent":"Agente facilitador","facilitatorPickAgent":"Seleccione un agente…","facilitatorAgentRequired":"Elija el agente que facilitará.","facilitatorCheckAfter":"Punto de control","facilitatorCheckpoint":{"EACH_PHASE":"Tras cada fase","EACH_REPEAT":"Tras cada ronda dentro de una fase"},"facilitatorMove":{"CONTINUE":"Continuar","END_PHASE":"Terminar la fase antes de tiempo","EXTEND_PHASE":"Prolongar la fase","CALL_VOTE":"Convocar una votación","RECRUIT":"Incorporar a un miembro","ESCALATE_HUMAN":"Escalar a una persona"},"facilitatorNoMove":"Permita al menos un movimiento, o desactive el facilitador.","facilitatorMidPhaseNeedsRepeat":"Terminar o prolongar una fase actúa a mitad de fase, así que requiere el punto de control por ronda.","facilitatorEscalateTo":"Escalar a (id de principal)","facilitatorEscalateRequired":"La escalada pausa la discusión para alguien: indique para quién.","facilitatorMaxMoves":"Movimientos máx. por discusión","assignmentModeLabel":"Asignación de tareas","assignmentModeRole":"Por rol (asigna el planificador)","assignmentModeBid":"Por puja (los miembros pujan, gana la mayor confianza)","assignmentModeBidShort":"Por puja","assignmentModeRoleHint":"El planificador o la configuración asigna cada tarea, o por turnos rotativos.","assignmentModeBidHint":"Vuelve a la asignación por rol cuando una subasta no se amortiza: menos de dos pujadores o dos tareas abiertas, o presupuesto de turnos insuficiente.","contextWindowSummarizer":"Resumidor","contextWindowNoSummarizer":"Ninguno","contextWindowModel":"Modelo de resumen","contextWindowModelPlaceholder":"modelo","contextWindowSummarizerMissing":"Sin modelo de resumen, el desbordamiento recae silenciosamente en la marca simple de truncado.","facilitatorMaxMovesCeiling":"Como máximo {{max}}: el facilitador es una intervención acotada, no un orquestador.","reviewUnassignedWarning_many":"{{count}} miembros sin asignar","reviewUnassignedWarning_one":"{{count}} miembro sin asignar","reviewUnassignedWarning_other":"{{count}} miembros sin asignar","retroRecordedBadge_many":"{{phase}}: {{count}} lecciónes guardadas en la memoria del equipo","retroRecordedBadge_one":"{{phase}}: {{count}} lección guardadas en la memoria del equipo","retroRecordedBadge_other":"{{phase}}: {{count}} lecciónes guardadas en la memoria del equipo","artifactRevisions_many":"{{count}} revisiones anteriores","artifactRevisions_one":"{{count}} revisión anterior","artifactRevisions_other":"{{count}} revisiones anteriores","styles":{"ROUND_TABLE":{"label":"Mesa redonda","flow":"Cada miembro expone su punto de vista y se apoya en los demás durante varias rondas"},"PEER_REVIEW":{"label":"Revisión entre pares","flow":"Cada uno responde por su cuenta, se critican mutuamente y luego revisan"},"DEVIL_ADVOCATE":{"label":"Abogado del diablo","flow":"Un miembro ataca la posición del grupo y el resto la defiende"},"DELPHI":{"label":"Rondas anónimas","flow":"Todos responden de forma anónima y revisan en cada ronda, sin anclarse en quien habló primero"},"DEBATE":{"label":"Debate a favor/en contra","flow":"Un bando argumenta a favor y otro en contra; después vienen las réplicas y el veredicto"},"TASK_FORCE":{"label":"Grupo de trabajo","flow":"La moderación planifica, los miembros ejecutan tareas en paralelo y los resultados se verifican"},"NEGOTIATION":{"label":"Negociación","flow":"Las partes intercambian propuestas hasta llegar a un acuerdo; solo si no lo hay interviene un árbitro"},"CUSTOM":{"label":"Flujo personalizado","flow":"Fases que defines tú"}},"unsupportedStyle":"Este servidor no admite {{style}}. Elige otro marco para continuar."}'),Q={title:"Tablero de tareas",pending:"Pendiente",inProgress:"En progreso",completed:"Completado",verified:"Verificado",failed:"Fallido",assignedTo:"Asignado a {{name}}",dependsOn:"Depende de: {{tasks}}",emptyTitle:"Esperando plan de tareas",emptyDescription:"El moderador creará un plan de tareas una vez que comience la discusión.",emptyState:"El plan de tareas aparecerá aquí cuando el moderador lo cree",unassigned:"Sin asignar",progress:"{{done}} de {{total}} tareas completadas",verificationPassed:"Aprobado",verificationFailed:"Fallido",showMore:"mostrar más",showLess:"mostrar menos",awaitingApproval:"Esperando aprobación",filedBy:"Creada por {{agent}}",wonByBid:"Ganado por puja — {{confidence}}% de confianza, {{complexity}}"},Y={title:"Memoria del usuario",subtitle:"Explorar y gestionar los recuerdos persistentes almacenados por los agentes",userIdPlaceholder:"Introduzca el ID de usuario…",searchPlaceholder:"Buscar en los recuerdos…",enterUserId:"Introduzca un ID de usuario para explorar sus recuerdos",totalEntries:"Total de entradas",preferences:"Preferencias",facts:"Hechos",conflicts:"Conflictos",cat_all:"Todo",cat_preference:"Preferencias",cat_fact:"Hechos",cat_context:"Contexto",deleteAll:"Eliminar todo",deleteAllTitle:"Eliminar todos los recuerdos",deleteAllDesc:"Se eliminarán permanentemente todos los recuerdos de este usuario. Esta acción no se puede deshacer.",deleteAllConfirm:"Eliminar todo",entryDeleted:"Entrada eliminada",allDeleted:"Todos los recuerdos del usuario eliminados",noResults:"No se encontraron entradas",value:"Valor",sourceAgent:"Agente de origen",accessCount:"Accesos",created:"Creado",updated:"Actualizado",sourceConversation:"Conversación de origen",conflicted:"En conflicto"},$={title:"Propiedades del usuario",subtitle:"Explorar y gestionar las propiedades longTerm almacenadas por usuario",userIdPlaceholder:"Introduzca el ID de usuario…",searchPlaceholder:"Filtrar propiedades…",enterUserId:"Introduzca un ID de usuario para ver sus propiedades",key:"Clave",type:"Tipo",value:"Valor",deleteAll:"Eliminar todo",deleteAllTitle:"Eliminar todas las propiedades",deleteAllDesc:"Se eliminarán permanentemente todas las propiedades de este usuario.",deleted:"Propiedades eliminadas",noResults:"No se encontraron propiedades",showingCount:"{{count}} propiedades"},Z={agentId:"ID de agente",environment:"Entorno",title:"Disparadores de agentes",subtitle:"Asociar intenciones a despliegues de agentes para enrutamiento automático",create:"Nuevo disparador",createTitle:"Crear disparador",editTitle:"Editar disparador",intent:"Intención",deployments:"Despliegues de agentes",addDeployment:"Añadir agente",agents:"agentes",empty:"Aún no hay disparadores configurados",created:"Disparador creado",updated:"Disparador actualizado",deleted:"Disparador eliminado",deleteTitle:"Eliminar disparador",deleteDesc:"¿Eliminar permanentemente el disparador para la intención «{{intent}}»?",searchPlaceholder:"Filtrar por intención o ID de agente…"},X={agentCount:"Agentes",confidence:"Confianza",partialError:"Algunas consultas de habilidades fallaron",registryOverview:"Resumen del registro",skillName:"Habilidad",skills:"habilidades",title:"Descubrimiento de capacidades",subtitle:"Descubrir agentes por sus habilidades y capacidades declaradas",searchPlaceholder:"Buscar habilidades…",strategyHighest:"Mayor confianza",strategyAll:"Todos los resultados",registeredSkills:"Habilidades registradas",noSkills:"No se encontraron habilidades",matchingAgents:"Agentes coincidentes",noMatches:"No se encontraron agentes para esta habilidad"},ee={title:"Exportar agente",loading:"Cargando árbol de recursos…",selectResources:"Seleccionar recursos a exportar",required:"Requerido",snippets:"Fragmentos",allSelected:"Todos los recursos seleccionados",countSelected:"{{count}} de {{total}} recursos seleccionados",exportSelected:"Exportar seleccionados"},ae={title:"Importar agente",dropZone:"Arrastre un archivo .zip aquí o haga clic para explorar",dropZoneHint:"Archivo de agente exportado (.zip)",strategyLabel:"Estrategia de importación",createNew:"Crear como nuevo agente",createNewDesc:"Crea una copia con nuevos identificadores. Ideal para la primera importación.",mergeSync:"Fusionar con existente",mergeSyncDesc:"Actualiza recursos existentes. Crea nuevos si no se encuentran.",upgradeExisting:"Actualizar agente existente",upgradeDesc:"Hacer coincidir recursos estructuralmente con un agente destino. Ideal para promover entre entornos.",syncRemote:"Sincronizar desde instancia remota",syncDesc:"Conéctese a otra instancia de EDDI y sincronice un agente en directo.",importNow:"Importar ahora",previewChanges:"Vista previa de cambios",selectTargetAgent:"Seleccionar agente destino",upgradeTargetHint:"Los recursos importados se harán coincidir estructuralmente con este agente.",chooseAgent:"— Elegir agente —",sourceAgent:"Agente origen (remoto)",targetAgent:"Agente destino (local)",createNewTarget:"Crear nuevo agente",resource:"Recurso",type:"Tipo",match:"Correspondencia",action:"Acción",new:"nuevo",updated:"actualizado",unchanged:"sin cambios",selected:"seleccionados",mergeNow:"Importar seleccionados",syncNow:"Sincronizar ahora",upgradeNow:"Actualizar ahora",importing:"Importando agente…",contentIdentical:"Contenido idéntico",targetContent:"Destino",sourceContent:"Origen",diffHiddenLines:"Mostrar {{lines}} líneas sin cambios",diffRawComparison:"JSON no válido: se compara como texto plano, así que una diferencia solo de formato también aparece como un cambio."},oe={title:"Sincronización de agentes",subtitle:"Sincronizar agentes entre instancias de EDDI",connection:"Instancia origen",sourceUrl:"URL de la instancia EDDI de origen",authToken:"Token de autorización",authHint:"Opcional. Se envía como encabezado X-Source-Authorization.",connect:"Conectar",connected:"Conectado",agentsFound:"agentes",connectionFailed:"Error de conexión",agentMapping:"Mapeo de agentes",previewAll:"Vista previa de todo",syncSelected:"Sincronizar seleccionados",remote:"Remoto",createNew:"Crear nuevo",changes:"cambios",agentsSelected:"agentes seleccionados",totalResources:"recursos",syncSuccess:"Sincronización completada",syncError:"Error de sincronización",empty:"Conéctese a una instancia de origen para comenzar la sincronización de agentes.",autoMatched:"Correspondencia automática",previewFirst:"Vista previa de los cambios antes de sincronizar"},re={actionCreate:"Nuevo",actionUpdate:"Actualizar",actionSkip:"Actualizado",actionConflict:"Conflicto"},ne={title:"Conversaciones de usuario",subtitle:"Gestionar vínculos de intent → usuario → conversación",lookup:"Búsqueda",intent:"Intención",userId:"ID de usuario",agentId:"ID de agente",environment:"Entorno",conversationId:"ID de conversación",binding:"Vínculo activo",enterBoth:"Ingrese intent e ID de usuario",notFound:"No se encontró vínculo",create:"Crear vínculo",createTitle:"Crear vínculo",created:"Vínculo creado",deleteTitle:"Eliminar vínculo",deleteDesc:'¿Eliminar el vínculo para intent "{{intent}}" y usuario "{{userId}}"?',deleted:"Vínculo eliminado"},te={placeholder:"Buscar páginas, agentes, acciones…",noResults:"Sin resultados.",recent:"Recientes",navigate:"Navegar",agents:"Agentes",actions:"Acciones rápidas",createAgent:"Crear nuevo agente",openChat:"Abrir chat",kbdNavigate:"navegar",kbdSelect:"seleccionar",kbdClose:"cerrar"},se={groupMemberHint:"Este grupo participará como subgrupo anidado en la discusión.",noGroupsHint:"Cree primero un grupo y luego añádalo como miembro subgrupo anidado.",noGroupsYet:"No hay grupos disponibles",selectGroup:"Seleccionar grupo existente…",title:"Asistente de grupo",subtitle:"Forme un equipo de asesores IA para discutir sus preguntas",backToGroups:"Volver a grupos",templateTitle:"Empezar con plantilla",templateDesc:"Elija una configuración predefinida o empiece desde cero.",startBlank:"Desde cero",blankDesc:"Configurar todo manualmente",configTitle:"Configuración del grupo",configDesc:"Nombre su grupo y elija el estilo de discusión",namePlaceholder:"Ej. Comité asesor",descPlaceholder:"¿Para qué es este grupo?",membersTitle:"Forme su equipo",membersDesc:"Para cada puesto, elija un agente existente o cree uno nuevo.",addMember:"Añadir miembro",refreshAgents:"Actualizar lista",existingAgents:"agentes existentes",displayName:"Nombre del agente",displayNamePlaceholder:"Dé un nombre a este agente…",rolePlaceholder:"Rol (ej. Marketing, Ingeniería)",useExisting:"Usar existente",createNew:"Crear nuevo",selectAgent:"Seleccionar agente…",systemPrompt:"Prompt del sistema",provider:"Proveedor LLM",model:"Modelo",apiKey:"Clave API",apiKeyPlaceholder:"sk-…",createThisAgent:"Crear agente",creatingAgent:"Creando agente…",agentReady:"Agente creado y desplegado",agentCreated:'Agente "{{name}}" creado',agentCreateFailed:"Error al crear agente: {{error}}",moderator:"Moderador",moderatorHint:"Sintetiza la discusión",addModerator:"Añadir moderador",removeModerator:"Quitar moderador",createModerator:"Crear agente moderador",moderatorReady:"Agente moderador listo",moderatorCreated:"Agente moderador creado",creatingModerator:"Creando moderador…",creatingSlot:"Creando {{name}}…",creatingGroup:"Creando grupo…",needMembers:"Añada al menos 2 miembros",reviewTitle:"Revisar y crear",reviewDesc:"Revise la configuración antes de crear.",reviewMembers:"Miembros",autoCreateNotice:"{{count}} agentes se crearán automáticamente",autoCreateHint:"Cada agente será creado y desplegado automáticamente.",unassignedWarning:"{{count}} miembros sin agente asignado",unassignedHint:"Estos miembros serán omitidos. Vuelva para asignar agentes.",flowPreview:"Flujo de discusión",createGroup:"Crear grupo",created:"¡Grupo creado!",viewGroup:"Abrir grupo",createAnother:"Crear otro",success:"¡Grupo creado exitosamente!",advancedSettings:"Configuración avanzada del protocolo",agentTimeout:"Tiempo de espera del agente (segundos)",maxRetries:"Reintentos máx.",onAgentFailure:"En caso de fallo del agente",onMemberUnavailable:"Si miembro no disponible",maxTurns:"Turnos máx. (0 = ilimitado)",maxTurnsHelp:"Límite de seguridad para el total de turnos de agente. El límite predeterminado del backend es 50.",policySkip:"Omitir",policyRetry:"Reintentar",policyAbort:"Abortar",policyFail:"Fallar",hintDebate:"Asigne los roles PRO y CON a los miembros. Pro argumenta primero, luego Con, seguido de réplicas y juicio.",hintDevilAdvocate:"Asigne el rol DEVIL_ADVOCATE a al menos un miembro. Cuestionará el consenso del grupo.",hintPeerReview:"Cada miembro critica individualmente el trabajo de los demás, luego revisa basándose en los comentarios recibidos.",hintDelphi:"Todos los miembros responden de forma independiente y anónima. Después de cada ronda, ven los resultados anónimos y pueden ajustar. Turnos máx. controla el número de iteraciones anónimas.",hintNegotiation:"Los miembros exponen sus intereses, presentan propuestas y luego negocian: «Rondas máximas» fija cuántas rondas de regateo se ejecutan. La moderación arbitra solo si no se llega a un acuerdo.",roleCoverageWarning:"Ningún miembro tiene el rol «{{role}}»",roleCoverageHint:"El servidor recurre a que hablen todos los miembros en {{phases}}, así que las mismas personas defienden ambas posturas. Vuelve a «Miembros» y completa el campo de rol.",hintTaskForce:"El moderador crea un plan de tareas, asigna trabajo a los agentes en paralelo, luego verifica y sintetiza los resultados.",hintCustom:"Defina sus propias fases manualmente. Las fases personalizadas se pueden configurar a través de la API después de la creación.",hintRoundTable:"Todos los miembros comparten sus opiniones, luego discuten los puntos de vista de los demás en varias rondas antes de que el moderador sintetice.",protocolSummary:"Protocolo",hitlTitle:"Requerir aprobación humana",hitlDesc:"Pausar la discusión en las fases elegidas y esperar una decisión humana antes de continuar.",hitlApprovalPoints:"Pausar para aprobación en",hitlNoPhases:"Este estilo no tiene fases predefinidas para controlar.",hitlNoApprovalPoints:"Selecciona al menos una fase, o la discusión nunca se pausará.",hitlTimeoutPolicy:"Si no hay decisión a tiempo",hitlApprovalTimeout:"Tiempo de espera de aprobación",hitlTimeoutInvalid:"Introduce una duración ISO-8601 positiva, p. ej. PT15M o PT1H30M.",hitlTimeoutHint:"Duración ISO-8601, p. ej. PT30S, PT15M, PT2H.",hitlGranularity:"Granularidad de aprobación",hitlGranularityHint:"La aprobación por tarea se aplica a la ejecución de TASK_FORCE — aprueba o rechaza cada tarea individualmente.",hitlOnTaskRejection:"Cuando se rechaza una tarea",hitlPinNote:"Activar puntos de aprobación fija las fases de discusión de este grupo (granularidad {{granularity}}).",hitlReviewBadge:"Aprobación humana",humanOnTimeoutAbort:"Cancelar la discusión",humanOnTimeoutLabel:"Al agotarse el tiempo",humanOnTimeoutSkip:"Omitir su turno y continuar",humanPrincipalId:"ID de principal",humanPrincipalIdHint:"La identidad que puede enviar los turnos de este miembro — la discusión se pausa y espera cuando le toca hablar.",humanPrincipalIdPlaceholder:"ID de inicio de sesión/principal del usuario",humanTurnSettingsHint:"La discusión se pausa y espera cuando le toca hablar a un miembro humano. Elija qué ocurre si no responde a tiempo.",humanTurnSettingsTitle:"Configuración del turno de miembros humanos",humanTurnTimeoutInvalid:"No es una duración ISO-8601 válida, p. ej. PT24H o P1D.",humanTurnTimeoutLabel:"Tiempo de espera del turno (duración ISO-8601)",humanTurnTimeoutPlaceholder:"p. ej. PT24H — en blanco espera indefinidamente",memberTypeHuman:"Humano"},ie={advisoryBoard:"Consejo asesor",advisoryBoardDesc:"Cinco perspectivas de negocio —marketing, ingeniería, finanzas, legal y estrategia— opinan sobre la misma pregunta y la moderación resume.",peerReview:"Panel de revisión entre pares",peerReviewDesc:"Los revisores valoran lo que aportes —un borrador, un plan, una propuesta—, critican la valoración de los demás, revisan y la moderación integra el resultado.",riskAssessment:"Evaluación de riesgos",riskAssessmentDesc:"Cada uno da su lectura, un miembro defiende lo contrario para sacar a la luz puntos ciegos, los demás replican y la moderación resume lo que se sostuvo.",forecasting:"Estimaciones independientes",forecastingDesc:"Los miembros responden de forma anónima durante varias rondas y solo ven resultados anonimizados entre ellas, así nadie se ancla en quien habló primero.",proCon:"Debate a favor/en contra",proConDesc:"Dos miembros argumentan a favor de la propuesta y dos en contra; después vienen las réplicas y el veredicto de la moderación.",negotiation:"Negociación",negotiationDesc:"Dos partes exponen sus intereses, presentan propuestas e intercambian concesiones ronda a ronda; la moderación arbitra solo si no hay acuerdo.",taskForce:"Grupo de trabajo",taskForceDesc:"La moderación divide el objetivo en tareas, los miembros las ejecutan en paralelo y la moderación verifica y combina los resultados.",roles:{marketingExpert:"Experto en marketing",techLead:"Líder técnico",financeDirector:"Director financiero",legalCounsel:"Asesor legal",strategyConsultant:"Consultor de estrategia",substanceReviewer:"Revisor de contenido",structureReviewer:"Revisor de estructura",riskReviewer:"Revisor de riesgos",riskAnalyst:"Analista de riesgos",domainExpert:"Experto de dominio",devilsAdvocate:"Abogado del diablo",analystA:"Analista A",analystB:"Analista B",analystC:"Analista C",analystD:"Analista D",proAdvocate1:"Defensor a favor 1",proAdvocate2:"Defensor a favor 2",conAdvocate1:"Defensor en contra 1",conAdvocate2:"Defensor en contra 2",partyA:"Parte A",partyB:"Parte B",projectLead:"Líder de proyecto",researcher:"Investigador",implementer:"Implementador",qualityAssurance:"Control de calidad"},assignRoles:"Asignar roles",backToGallery:"Volver a las plantillas",browseButton:"Desde plantilla",createButton:"Crear grupo",created:"Grupo creado a partir de la plantilla",nameLabel:"Nombre del grupo",selectAgent:"Seleccionar un agente…",subtitle:"Comience con una discusión empaquetada y preajustada — solo asigne agentes a sus roles con nombre.",title:"Plantillas de grupo",roleCount_many:"{{count}} roles por asignar",roleCount_one:"{{count}} rol por asignar",roleCount_other:"{{count}} roles por asignar",empty:"No hay plantillas disponibles",emptyDescription:"Este servidor no incluye plantillas de grupo. Aún puede crear un grupo desde cero con el asistente."},ce={agentIdPlaceholder:"ID del agente para gestionar mensajes",botToken:"Token del bot",botTokenHint:"Token OAuth del bot. Use una referencia de bóveda para mayor seguridad.",botTokenPlaceholder:"xoxb-… o ${vault:slack-bot-token}",channel:"canal",channelId:"ID del canal de Slack",channelIdCol:"ID del canal",channelIdHint:"Clic derecho en un canal de Slack → Ver detalles del canal → copiar el ID del canal",channelsPlural:"canales",channelType:"Tipo de canal",confirmDelete:"¿Eliminar canal?",confirmDeleteDesc:"Esta integración de canal se eliminará permanentemente.",create:"Crear canal",createTitle:"Crear integración de canal",defaultAgentId:"ID del agente predeterminado",defaultTargetHint:"El destino predeterminado gestiona todos los mensajes que no coinciden con una palabra clave de activación. Puede agregar más destinos después de la creación.",empty:"Aún no hay canales",emptyDesc:"Cree una integración de canal para conectar agentes a Slack.",name:"Nombre",namePlaceholder:"p. ej. Engineering AI Hub",openSlackApps:"Abrir panel de Slack App",searchPlaceholder:"Buscar canales…",signingSecret:"Secreto de firma",signingSecretHint:"Desde la página de Información básica de su aplicación Slack.",signingSecretPlaceholder:"Cadena hex o ${vault:slack-signing-secret}",slackSetupGuide:"Guía de configuración de Slack",slackSetupSummary:"Cree una aplicación Slack, configure los permisos del token del bot (app_mentions:read, chat:write, im:history, channels:history, groups:history) y pegue las credenciales aquí.",target:"destino",targets:"destinos",targetsCol:"Destinos",type:"Tipo",unnamed:"Canal sin nombre",version:"Versión"},de={saveSuccess:"Canal guardado",addTarget:"Agregar destino",addTrigger:"Agregar activador…",agentId:"ID del agente",botToken:"Token del bot",channelId:"ID del canal de Slack",cooldown:"Enfriamiento (s)",general:"General",groupId:"ID del grupo",isDefault:"predeterminado",maxCost:"Máx. $/día",maxDaily:"Máx./día",name:"Nombre",observe:"Observar",observeDesc:"Supervisar pasivamente y responder selectivamente",observeKeywords:"Palabras clave de activación",observeMimeTypes:"Tipos MIME de activación",observeMode:"Modo observación",observeSettings:"Configuración del modo observación",platformConfig:"Configuración de la plataforma",rawConfig:"Configuración sin procesar",removeTarget:"Eliminar",requiredEvents:"Suscripciones de eventos requeridas:",requiredScopes:"Permisos de token del bot requeridos:",setDefault:"Establecer como predeterminado",signingSecret:"Secreto de firma",targetName:"Nombre",targets:"Destinos de enrutamiento de mensajes",targetType:"Tipo",triggerHint:'Los usuarios escriben "palabra clave: mensaje" para enrutar a este destino',triggerKeywords:"Palabras clave de activación",triggers:"activadores",type:"Tipo de canal",webhookHint:"Pegue esta URL en el campo Request URL de Event Subscriptions de su aplicación Slack.",webhookUrl:"URL del webhook",hitlSection:"Aprobaciones con intervención humana (opcional)",hitlApprovalChannel:"ID del canal de aprobación",hitlApprovalChannelHint:"Canal de Slack que recibe una tarjeta de aprobación cuando una conversación se pausa.",hitlApproverUserIds:"IDs de usuario aprobadores",hitlApproverUserIdsHint:"IDs de usuario de Slack separados por comas con permiso para aprobar mediante botones. Sin esta lista, los botones no se muestran (cierre seguro)."},le={loadingApprovalDetails:"Cargando detalles de aprobación…",pendingCount:"{{count}} pendientes de aprobación",approvalDetailsError:"No se pudo cargar lo que haría esta solicitud, así que no puede aprobarse desde aquí. Rechazarla sigue siendo seguro.",awaitingHuman:"Esperando humano",awaitingApproval:"Esperando aprobación",approve:"Aprobar",reject:"Rechazar",cancel:"Cancelar",approved:"Aprobado",rejected:"Rechazado",cancelled:"Cancelado",pending:"pendiente",emptyQueue:"Sin aprobaciones pendientes",emptyQueueDescription:"Todas las conversaciones fluyen — no se necesita intervención humana.",surface:"Superficie",regular:"Conversación",group:"Grupo",pauseReason:"Razón",pausedAt:"Pausado",timeoutPolicy:"Tiempo límite",timeRemaining:"Restante",overdue:"Vencido",phase:"Fase",granularity:"Granularidad",taskApprovals:"Aprobaciones de tareas",approveAll:"Aprobar todo",note:"Agregar nota (opcional)",notePlaceholder:"Agregar una nota para la decisión...",discussionCancelled:"Discusión cancelada",cancelDiscussion:"Cancelar discusión",rejectAll:"Rechazar todo",timeoutWaitIndefinitely:"Esperar indefinidamente",timeoutAutoApprove:"Auto-aprobar",timeoutAutoReject:"Auto-rechazar",timeoutAbort:"Anular",granularityPhase:"Fase",granularityTask:"Tarea",rejectionFail:"Marcar la tarea como fallida",rejectionRetry:"Reintentar la tarea",groupsTruncated:"Existen más aprobaciones de grupo de las que se muestran aquí.",groupsLoadError:"No se pudieron cargar las aprobaciones de grupo.",toolApprovalRequired:"Se requiere aprobación de herramienta",toolCallsAwaiting:"Llamadas de herramienta pendientes de aprobación",executedUngated:"Ya ejecutada (sin control)",outcomeUnknown:"Una aprobación anterior se interrumpió durante la ejecución — su efecto es desconocido; verifícalo externamente antes de reintentar.",outcomeUnknownShort:"resultado desconocido",toolApprovalHint:"Aprobar aplica tus elecciones por llamada (las que no modificaste quedan aprobadas). Rechazar rechaza todo el lote.",toolApprovalHintExplicit:"Cada llamada necesita su propia aprobación o rechazo antes de poder aprobar el lote. Rechazar rechaza todo el lote.",explicitReviewMissing:"Revisa cada llamada de arriba antes de aprobar.",redactionCaveat:"Los argumentos que se muestran abajo están redactados — un valor secreto aparece como «», no se omite.",gateReason:"Patrón coincidente",argsTruncated:"argumentos truncados",amendArguments:"Modificar argumentos (opcional)",amendPlaceholder:'Objeto JSON de reemplazo completo, p. ej. {"to":"ops@acme.com"}. Déjalo en blanco para conservar el original.',amendTruncated:"No se puede modificar una llamada cuyos argumentos fueron truncados — apruébala o recházala tal cual.",amendInvalidJson:"Los argumentos modificados deben ser un objeto JSON válido.",amendTooLarge:"Los argumentos modificados son demasiado grandes.",review:"Revisar",tool:"Herramienta",scopeAll:"Mostrando todas las aprobaciones pendientes del sistema.",scopeOwn:"Mostrando las aprobaciones pendientes de tus conversaciones.",chatPaused:"Esta conversación está a la espera de aprobación humana.",noProgressWaitForHuman:"Esperar a una persona",noProgressAutoReject:"Rechazo automático",noProgressAbort:"Abortar",confirmApproveTitle:"¿Aprobar la solicitud?",confirmApproveDescription:"¿Aprobar y reanudar esta conversación?",confirmApproveToolTitle:"¿Aprobar la ejecución de la herramienta?",confirmApproveToolDescription:"Al aprobar se ejecutará: {{toolNames}}. Esto realiza acciones reales y no se puede deshacer.",confirmRejectTitle:"¿Rechazar la solicitud?",confirmRejectDescription:"¿Rechazar esta solicitud? La conversación no continuará.",confirmCancelTitle:"¿Cancelar la conversación?",confirmCancelDescription:"¿Cancelar esta conversación? Cualquier trabajo en curso se abortará.",confirmCancelButton:"Cancelar conversación",confirmCancelGroupTitle:"¿Cancelar la discusión?",confirmCancelGroupDescription:"¿Cancelar esta discusión? Cualquier trabajo en curso se abortará.",confirmCancelGroupButton:"Cancelar discusión",confirmDismiss:"Volver",approvalBlockedHeading:"Esto no se puede aprobar aquí",confirmRejectToolTitle:"¿Rechazar la ejecución de la herramienta?",confirmRejectToolDescription:"No se ejecutará nada. La conversación continúa y el agente responde sin {{toolNames}}.",humanTurn:"Turno del miembro",humanTurnReason:"Esperando a que {{member}} hable",humanTurnMemberFallback:"un miembro",decidedProgress:"{{decided}} de {{total}} decididas"},ue={deploying:"Desplegando agente…",error:"Algo salió mal",newConversation:"Nueva conversación",ready:"Listo — escriba un mensaje para probar",retry:"Reintentar",saving:"Guardando cambios…",starting:"Iniciando conversación…",timeout:"El despliegue superó el tiempo de espera",title:"Chat de prueba",preparing:"Preparando…"},pe={auditTrail:"Registro de auditoría",checking:"Verificando…",coordConnected:"Coordinador conectado",coordDisconnected:"Coordinador desconectado",coordUnknown:"Coordinador —",createGroup:"Crear grupo",noConversations:"Aún no hay conversaciones",offline:"Sin conexión",online:"En línea",platform:"Plataforma",platformHealth:"Estado de la plataforma",recentConversations:"Conversaciones recientes",secretVault:"Bóveda de secretos",vaultDown:"Vault no disponible",vaultUp:"Vault listo",viewLogs:"Ver registros"},me={retry:"Reintentar",title:"Algo salió mal"},ge={auditPseudonymized:"Auditoría seudonimizada",checkingStatus:"Verificando...",confirmDelete:"Sí, eliminar todos los datos",confirmDesc:'Esto eliminará permanentemente TODOS los datos del usuario "{{userId}}". Esta acción no se puede deshacer.',confirmTitle:"Confirmar la eliminación de datos",conversationsDeleted:"Conversaciones eliminadas",delete:"Eliminar todos los datos",deleteSuccess:"Datos del usuario eliminados con éxito",deleting:"Eliminando...",enterUserIdFirst:"Introduzca un ID de usuario arriba para comprobar el estado",export:"Exportar datos",exportSuccess:"Datos del usuario exportados con éxito",exporting:"Exportando...",legalDesc:"La exportación de datos (Art. 15/20) proporciona un archivo JSON con todos los datos almacenados de un usuario. La eliminación (Art. 17) borra permanentemente todos los recuerdos y datos de conversación, seudonimiza las entradas de auditoría y no se puede deshacer.",legalNotice:"Aviso de protección de datos",liftRestriction:"Levantar la restricción",liftingRestriction:"Levantando...",logsPseudonymized:"Registros seudonimizados",memoriesDeleted:"Recuerdos eliminados",restrictProcessing:"Restringir el procesamiento",restricting:"Restringiendo...",restrictionApplied:"Procesamiento restringido para el usuario",restrictionDesc:"Restrinja el procesamiento cuando un usuario impugne la exactitud de los datos u objete su procesamiento. Mientras esté restringido, los datos del usuario se conservan pero no se pueden procesar nuevas conversaciones. Es reversible.",restrictionLifted:"Restricción de procesamiento eliminada",restrictionTitle:"Restricción del procesamiento (Art. 18)",resultsTitle:"Borrado completado",statusActive:"Procesamiento activo",statusUnknown:"Estado no disponible",statusRestricted:"Procesamiento restringido",subtitle:"Gestión de datos de usuario conforme al RGPD — borrado (Art. 17), portabilidad (Art. 15/20) y restricción del procesamiento (Art. 18)",title:"Privacidad y cumplimiento",userId:"ID de usuario",userIdPlaceholder:"Introduzca el ID de usuario...",userLookup:"Búsqueda de usuario"},ve={message:"Modo demo — Se muestran datos de ejemplo. Conecte un backend de EDDI para ver datos reales."},be={confirmPurgeAll:"¿Eliminar permanentemente TODOS los {{count}} recursos huérfanos? El servidor purga todos — tu selección no se aplica. Esto no se puede deshacer.",deleteSelected:"Eliminar {{count}} seleccionados",description:"Encuentre y limpie los recursos no referenciados por ningún agente o paquete.",deselectAll:"Deseleccionar todo",includeDeleted:"Incluir eliminados temporalmente",lastScanned:"Último escaneo",noOrphans:"No se encontraron huérfanos",purge:"Purgar todo",purgeSuccess:"{{count}} huérfanos eliminados",runScan:"Ejecutar escaneo",scan:"Escanear",scanPromptDesc:"Encuentre configuraciones de extensión (reglas, llamadas API, LLM, salidas) que no estén referenciadas por ningún workflow o agente. Limpie los recursos sin usar para mantener su plataforma ordenada.",scanPromptTitle:"Escanee su plataforma",scanning:"Escaneando recursos…",selectAll:"Seleccionar todo",softDeleted:"Eliminado",title:"Detección de huérfanos",found_many:"{{count}} huérfanos encontrados",found_one:"{{count}} huérfano encontrado",found_other:"{{count}} huérfanos encontrados"},he={apiCallsMinute:"Llamadas API / minuto",configuration:"Configuración",conversationsToday:"Conversaciones de hoy",description:"Configure límites de tasa, topes de uso y presupuestos de coste por inquilino.",disable:"Desactivar",disabled:"Desactivado",enable:"Activar",enabled:"Activado",enforcementOff:"La aplicación está desactivada.",enforcementOffHint:"Las cuotas no se están aplicando. Active la aplicación y guarde para empezar a aplicar los límites.",limitHint:"-1 = ilimitado",liveUsage:"Uso en vivo",maxAgentsPerTenant:"Máx. agentes / inquilino",maxApiCallsPerMinute:"Máx. llamadas API / minuto",maxConversationsPerDay:"Máx. conversaciones / día",maxMonthlyCostUsd:"Coste mensual máx. (USD)",monthlyCost:"Coste mensual",resetConfirmDesc:"Pone a cero de inmediato todos los contadores de uso (conversaciones, llamadas API, coste mensual) del inquilino «default». No se puede deshacer.",resetConfirmTitle:"¿Restablecer los contadores de uso?",resetCounters:"Restablecer contadores",resetSuccess:"Contadores de uso restablecidos",saveSuccess:"Cuota guardada",tenantId:"ID del inquilino",title:"Cuotas de inquilino"},fe={clearVault:"Borrar referencia de vault",createNew:"Crear nuevo secret",emptyVault:"Aún no hay secrets almacenados",filterPlaceholder:"Buscar claves del vault…",keyNotFound:"Esta clave no se encontró en el vault",loading:"Cargando claves…",noMatch:'No hay claves que coincidan con "{{filter}}"',pickFromVault:"Elegir del vault",placeholder:"Clave API o ${vault:key-name}",vaultDown:"El vault no está configurado — configure un proveedor de secrets en el backend de EDDI"},ye={category:"Categoría",content:"Contenido del prompt",contentLabel:"Contenido del fragmento",contentPlaceholder:"Debes ser cauteloso y prudente en tus respuestas...",description:"Descripción",descriptionPlaceholder:"Qué hace este fragmento",identity:"Identidad",name:"Nombre del fragmento",namePlaceholder:"p. ej. cautious_mode",noTags:"Sin etiquetas",tagPlaceholder:"p. ej. safety, production",tags:"Etiquetas",templateEnabled:"Activar la resolución de plantillas",templateEnabledHint:"Cuando está desactivada, los marcadores {{}} del contenido se tratan como texto literal (útil para ejemplos de código).",usageHint:"Uso:"},Ae={deployed:"Desplegado",deploying:"Desplegando...",error:"Error",notDeployed:"No desplegado",checking:"Comprobando…"},Ee={subtitle:"Gestione los recuerdos, las propiedades y los vínculos de conversación por usuario",tabs:"Secciones de datos de usuario",title:"Datos del usuario"},Ce={deleteKey:"Eliminar {{key}}",editKey:"Editar {{key}}",tableTitle_many:"{{count}} variables definidas",tableTitle_one:"{{count}} variable definida",tableTitle_other:"{{count}} variables definidas",title:"Variables globales",description:"Valores de configuración para todo el despliegue, disponibles en todos los agentes.",create:"Añadir variable",createTitle:"Añadir variable global",editTitle:"Editar variable",keyLabel:"Clave",keyPlaceholder:"p. ej., default-model",keyError:"Solo letras, dígitos, puntos, guiones bajos y guiones.",valueLabel:"Valor",valuePlaceholder:"p. ej., gpt-4.1",valueWarning:"Los valores son visibles en la interfaz y en los registros. Usa la bóveda de secretos para datos sensibles.",descriptionLabel:"Descripción (opcional)",descriptionPlaceholder:"Descripción opcional…",exportableLabel:"Incluir en las exportaciones de agentes",save:"Guardar variable",saveSuccess:"Variable «{{key}}» guardada",deleteSuccess:"Variable «{{key}}» eliminada",confirmDeleteTitle:"Eliminar variable",confirmDeleteMessage:"¿Seguro que quieres eliminar «{{key}}»? Los agentes que usen ${vars:{{key}}} verán referencias sin resolver.",empty:"No hay variables globales definidas",emptyHint:"Haz clic en «Añadir variable» para crear tu primer valor de configuración para todo el despliegue.",searchPlaceholder:"Filtrar variables…",colKey:"Clave",colValue:"Valor",colDescription:"Descripción",colExportable:"Exportar",colReference:"Referencia",colActions:"Acciones",exportYes:"Incluida en exportaciones",exportNo:"Excluida de exportaciones",copyVars:"Copiar referencia ${vars:…}",refCopied:"Copiado: {{ref}}",infoLine1:"Usa {{vars.}} en los prompts del sistema o ${vars:} en cualquier parte de las configuraciones de agentes.",infoLine2:"Los cambios se aplican en 2 minutos (TTL de caché). Para valores sensibles, usa la bóveda de secretos."},De={endpoints:"endpoints",endpointsTotal:"endpoints en total",groupsSelected:"grupos seleccionados",importOpenApi:"Importar desde OpenAPI",importSelected:"Importar grupos seleccionados",importing:"Importando…",selectGroups:"Seleccione grupos de API para importarlos como extensiones de Llamada API independientes"},Te=JSON.parse('{"board":{"continuePlaceholder":"Continuar esta discusión…","inputDisabledClosed":"Esta discusión está cerrada","newDiscussion":"Nueva discusión","noResponseGenerated":"No se generó respuesta","awaitingApprovalHint":"Esta discusión está en pausa esperando aprobación humana.","reviewInManager":"Revisarla","askMore":"Preguntar más a {{name}} →","askYourBoard":"Pregunta a tu grupo de trabajo…","attachFile":"Adjuntar archivo","backToLive":"Volver a la discusión en vivo","chatOneOnOne":"Chat 1 a 1","close":"Cerrar","copied":"¡Copiado!","copyResponse":"Copiar respuesta","details":"Detalles","emptyDescription":"Haz una pregunta y tu grupo de trabajo la debatirá.","emptyTitle":"Listo para debatir","error":"Algo salió mal","fileTooLarge":"El archivo debe pesar menos de 10 MB","fileTypeNotAllowed":"Este tipo de archivo no es compatible","hideConfig":"Ocultar panel de detalles","live":"En vivo","liveNow":"En vivo","loadingResponse":"Cargando respuesta","members":"Equipo","membersPanel":"Panel del equipo","moderator":"Moderador","noMembers":"Sin miembros del equipo","noSessions":"Aún no hay sesiones","phase":"Fase","pin":"Fijar respuesta","removeAttachment":"Quitar adjunto","running":"En curso","runningHint":"Esta discusión sigue en curso: las nuevas respuestas aparecen automáticamente.","send":"Enviar","sessions":"Sesiones","sessionsPanel":"Panel de sesiones","skipped":"{{name}} — omitido","startingDescription":"Tu grupo de trabajo está en ello: las respuestas aparecerán aquí a medida que lleguen.","startingTitle":"Discusión en curso","stillDiscussing":"El grupo de trabajo sigue debatiendo…","stop":"Detener","synthesis":"Síntesis","synthesisResult":"Resultado de la síntesis","title":"Grupo de trabajo","toggleConfig":"Alternar panel de detalles","unpin":"Dejar de fijar la respuesta","untitled":"Sin título","viewSessions":"Ver sesiones anteriores"},"thread":{"fileTooLarge":"El archivo debe ser menor de 20MB","fileTypeNotAllowed":"Este tipo de archivo no es compatible","attachmentLimit":"Máximo {{max}} archivos adjuntos por mensaje","notForwarded":"Archivo almacenado pero demasiado grande para el modelo","uploadFailed":"Error al subir: {{error}}","noResponse":"Sin respuesta","attachFile":"Adjuntar archivo","emptySubtitle":"Envía un mensaje para empezar a chatear con {{name}}.","emptyTitle":"Chat con {{name}}","followUp":"Siguiendo con tu respuesta…","fromSession":"De la sesión {{boardName}}","placeholder":"Escribe un mensaje…","questionLabel":"Pregunta","removeAttachment":"Quitar adjunto","responseLabel":"Respuesta","send":"Enviar","sendError":"Lo sentimos, se produjo un error. Inténtalo de nuevo.","startingConversation":"Iniciando conversación…","toggleContext":"Alternar contexto","placeholderNamed":"Mensaje para {{name}}…"},"chat":{"agentDetails":"Detalles del agente","selectToView":"Seleccione un agente para ver detalles","hideDetails":"Ocultar panel de detalles","editAgent":"Editar agente","auditLogs":"Registros de auditoría","openStudio":"Abrir en Manager","triggers":"Ver disparadores","starterSelected":"Prompt añadido al campo de entrada","title":"Chat","hideAgentDetails":"Ocultar detalles del agente","showAgentDetails":"Mostrar detalles del agente"},"agentEditor":{"capabilities":"Capacidades","workflows":"Flujos de trabajo","features":"Características y seguridad","a2aEnabled":"Agente a agente","memoryTools":"Herramientas de memoria","signedMessages":"Mensajes firmados","strictMemory":"Memoria estricta","hitlMode":"Modo de aprobación","llmConfig":"Modelo y Motor LLM","provider":"Línea de comandos","mode":"Modo de ejecución","personaPrompt":"Prompt de persona","starters":"Iniciadores de conversación","channels":"Conectores de canales","temperature":"Temperatura","contextWindow":"Límite de contexto","activeTools":"Herramientas activas","noLlm":"Sin LLM configurado","noTools":"Sin configurar","add":"Añadir","addCapability":"Añadir capacidad","cancel":"Cancelar","close":"Cerrar","confidence":"Confianza","confidenceHigh":"Alta","confidenceLow":"Baja","confidenceMedium":"Media","description":"Descripción","descriptionPlaceholder":"Describe la especialidad de este agente…","discardChanges":"Tienes cambios sin guardar. ¿Descartarlos?","loadError":"No se pudieron cargar los datos del agente.","noCapabilities":"No hay capacidades definidas.","removeCapability":"Quitar capacidad","retry":"Reintentar","save":"Guardar cambios","saveError":"No se pudieron guardar los cambios","saveSuccess":"Agente actualizado correctamente","settings":"Ajustes","skill":"Habilidad","skillPlaceholder":"p. ej., resumen","systemPrompt":"Prompt del sistema","systemPromptPlaceholder":"Instrucciones que definen el comportamiento, la personalidad y la especialidad de este agente…","title":"Editar agente"},"settings":{"hitlApprovalPointsNote":"Estos ajustes controlan cómo se comporta una aprobación. Qué puntos de una discusión la requieren se configura por fase en el Manager.","hitlOpenManager":"Definir puntos de aprobación","deliberation":"Calidad de la deliberación","deliberationDesc":"Registrar opiniones minoritarias y permitir que los miembros creen el trabajo que descubren durante el debate","recordDissents":"Registrar un voto particular","recordDissentsDesc":"Tras cada síntesis, cada miembro que no la escribió tiene un turno breve para indicar en qué sigue en desacuerdo. Cuesta una llamada extra por miembro.","agentFiledTasks":"Permitir que los miembros creen sus propias tareas","agentFiledTasksDesc":"El trabajo que un agente descubre durante el debate se convierte en una tarea real que recoge la siguiente oleada de ejecución. Desactivado, las herramientas ni siquiera existen para este grupo.","maxTasksPerDiscussion":"Máx. tareas creadas / debate","maxTasksPerDiscussionHelp":"Solo cuenta las tareas creadas por agentes, para que un backlog planificado grande no lo agote.","maxTasksPerTurn":"Máx. tareas creadas / turno","maxTasksPerTurnHelp":"Acota un turno desbocado; el tope por debate acota la deriva lenta.","maxCost":"Límite de coste (USD)","maxCostUnlimited":"Sin límite","maxCostHelp":"Déjalo vacío para no poner límite. Un turno ya en curso puede superar ligeramente el techo.","onCostExceeded":"Cuando se alcanza el límite","costSynthesize":"Sintetizar ahora: saltar directamente a la conclusión","costAbort":"Abortar: hacer fallar el debate de inmediato","costCeilingInvalid":"Un límite de coste debe ser mayor que 0. Vacía el campo para no poner límite.","maxDelegationDepth":"Profundidad máx. de delegación","maxDelegationDepthHelp":"A delega en B y B en C: profundidad 2. El salto que superaría este valor se rechaza; eso es lo que corta un ciclo de delegación.","delegationTimeout":"Tiempo de delegación (segundos)","delegationTimeoutHelp":"Cuánto espera un agente delegante a su delegado. Súbelo si el delegado ejecuta herramientas o un debate anidado.","allowedDelegationTargets":"Lista de delegación permitida","allowedDelegationTargetsHint":"Cualquier agente desplegado","allowedDelegationTargetsHelp":"IDs de agentes separados por comas. Déjalo vacío para permitir cualquier agente desplegado.","moderatorlessWarning":"Restringido a un moderador que este equipo no tiene: {{phases}}. El primer miembro por orden de intervención lo sustituirá.","memberLimit":"Un equipo puede tener como máximo {{max}} miembros","explicitPhasesNote":"Este equipo define sus fases explícitamente ({{phases}}), así que se ejecutan tal cual: el marco y el número de rondas de arriba ya no cambian el flujo.","explicitPhasesEdit":"Editar fases","addMemberTitle":"Añadir miembro del equipo","selectAgent":"Agente","pickAgent":"Buscar o seleccionar un agente…","displayName":"Nombre visible","displayNameHint":"p. ej. Analista","role":"Rol","roleHint":"p. ej. Revisor","addMember":"Añadir miembro","nameRequired":"El nombre del grupo de trabajo es obligatorio","saveSuccess":"Configuración del grupo de trabajo guardada","saveError":"No se pudo guardar la configuración","deleteAllSuccess":"Grupo de trabajo y todos los agentes eliminados","deleteError":"No se pudo eliminar el grupo de trabajo","deleteSuccess":"Grupo de trabajo eliminado","duplicateMember":"Este agente ya es miembro","loadError":"No se pudo cargar la configuración","backToBoard":"Volver al grupo de trabajo","untitled":"Grupo de trabajo sin título","subtitle":"Configura los ajustes y el equipo de tu grupo de trabajo","general":"Ajustes generales","generalDesc":"Configuración básica de tu grupo de trabajo","boardName":"Nombre del grupo de trabajo","boardNameHint":"Introduce el nombre del grupo de trabajo…","description":"Descripción","descriptionHint":"¿De qué trata este grupo de trabajo?","discussionStyle":"Marco de colaboración","maxRounds":"Rondas máx.","moderator":"Moderador","noModerator":"Ninguno","team":"Equipo","teamDesc":"Gestiona los agentes que participan en tu grupo de trabajo","roleOptional":"Opcional","typeAgent":"Agente","typeModerator":"Moderador","removeMember":"Quitar miembro","minMembers":"Se requieren al menos 2 miembros","protocol":"Protocolo y resiliencia","protocolDesc":"Tiempos de espera, reintentos y gestión de fallos en la comunicación entre agentes","agentTimeout":"Tiempo de espera del agente (segundos)","maxRetries":"Reintentos máx.","onAgentFailure":"Si falla el agente","failureSkip":"Omitir — continuar sin este agente","failureRetry":"Reintentar — volver a intentarlo con el agente","failureAbort":"Anular — detener toda la discusión","onUnavailable":"Si un miembro no está disponible","unavailableSkip":"Omitir — continuar sin él","unavailableFail":"Fallar — detener la discusión","maxTurns":"Turnos máx. (0 = ilimitado)","hitl":"Supervisión humana","hitlDesc":"Configura cuándo y cómo las personas revisan las decisiones de la IA","hitlGranularity":"Granularidad de la aprobación","granularityPhase":"Por fase — revisar después de cada fase de la discusión","granularityTask":"Por tarea — revisar cada tarea individual","hitlTimeout":"Tiempo de espera de aprobación","hitlTimeoutHint":"p. ej. PT15M (15 min), PT1H (1 hora)","hitlTimeoutHelp":"Duración ISO-8601. Déjalo vacío para no aplicar ningún límite.","hitlTimeoutPolicy":"Al agotarse el tiempo","timeoutWait":"Esperar indefinidamente","timeoutAutoApprove":"Auto-aprobar","timeoutAutoReject":"Auto-rechazar","timeoutAbort":"Anular la discusión","hitlRejection":"Al rechazar","rejectionFail":"Fallar — detener la tarea","rejectionRetry":"Reintentar — pedir al agente que revise","dynamic":"Agentes dinámicos","dynamicDesc":"Permitir que los agentes recluten, creen o deleguen en otros agentes durante las discusiones","dynamicEnable":"Activar agentes dinámicos","dynamicEnableDesc":"Permitir que los agentes recluten, creen o deleguen en otros agentes","allowCreation":"Permitir creación","allowCreationDesc":"Los agentes pueden crear nuevos agentes cuando lo necesiten","allowRecruitment":"Permitir reclutamiento","allowRecruitmentDesc":"Los agentes pueden reclutar agentes ya desplegados","allowDelegation":"Permitir delegación","allowDelegationDesc":"Los agentes pueden delegar subtareas en otros agentes","maxCreated":"Creados máx.","maxRecruited":"Reclutados máx.","maxDelegations":"Delegaciones máx. / tarea","inheritModel":"Heredar modelo del padre","inheritModelDesc":"Los agentes creados usan el modelo LLM del padre","lifecycle":"Política de ciclo de vida","lifecycleEphemeral":"Efímero — se elimina tras la discusión","lifecycleKeep":"Mantener desplegado — persiste tras la discusión","lifecycleUndeploy":"Solo retirar — detenido pero no eliminado","lifecycleAgentDecides":"El agente decide — el agente elige su propio destino","tasks":"Tareas preconfiguradas","tasksDesc":"Define las tareas de antemano para omitir la fase PLAN y que los agentes ejecuten de inmediato","taskSubject":"Asunto","taskSubjectHint":"¿Qué hay que hacer?","taskDescription":"Descripción","taskDescHint":"Instrucciones detalladas para esta tarea…","taskAssignRole":"Asignar a rol","taskPriority":"Prioridad","removeTask":"Quitar tarea","addTask":"Añadir tarea","dangerZone":"Zona de peligro","dangerDesc":"Acciones irreversibles — procede con precaución","deleteBoard":"Disolver grupo de trabajo","deleteBoardDesc":"Elimina esta configuración de grupo de trabajo. Los agentes se conservan.","deleteBoardAll":"Disolver grupo de trabajo + todos los agentes","deleteBoardAllDesc":"Elimina permanentemente este grupo de trabajo y todos sus agentes miembros.","unsavedChanges":"Tienes cambios sin guardar","templateSaved":"Guardado como plantilla","saveAsTemplate":"Guardar como plantilla","saving":"Guardando…","saveChanges":"Guardar cambios","deleteAllTitle":"¿Disolver el grupo de trabajo y todos los agentes?","deleteTitle":"¿Disolver el grupo de trabajo?","deleteAllConfirm":"Esto disolverá permanentemente este grupo de trabajo y eliminará todos sus agentes miembros. Esta acción no se puede deshacer.","deleteConfirm":"Esto disolverá permanentemente esta configuración de grupo de trabajo. Los agentes miembros no se verán afectados.","title":"Ajustes"},"nav":{"dashboard":"Panel","templates":"Plantillas"},"advisor":{"avatarLabel":"Avatar de {{name}}"},"analytics":{"agentPerformance":"Rendimiento del agente","avgLength":"Longitud media","avgLengthChars":"{{count}} caracteres","chatWithAgent":"Chatear con el agente","compareAgent":"Comparar con…","contributionBreakdown":"Desglose de contribuciones","contributions":"Contribuciones","editAgent":"Editar agente","errorRate":"Tasa de errores","errors":"Errores","sessions":"Sesiones"},"back":"Atrás","boardList":"Lista de grupos de trabajo","boardsLabel":"Grupos de trabajo","bottomNav":"Navegación inferior","card":{"advisorCount":"{{count}} expertos","delete":"Eliminar","duplicate":"Duplicar","duplicated":"Grupo de trabajo duplicado","history":"Historial","live":"En vivo","moreActions":"Más acciones","noMembers":"Sin expertos","openSettings":"Abrir ajustes","pin":"Fijar","settings":"Ajustes","unpin":"Dejar de fijar","untitled":"Grupo de trabajo sin título"},"closeSidebar":"Cerrar barra lateral","comparison":{"avgResponse":"Respuesta media","close":"Cerrar","contributions":"Contribuciones","errorRate":"Tasa de errores","evenlyMatched":"Ambos agentes están igualados","leadsIn":"lidera en {{count}} de 5 métricas","sessions":"Sesiones","title":"Comparación de agentes","totalContent":"Contenido total"},"dashboard":{"assembleTaskForce":"Formar grupo de trabajo","cancel":"Cancelar","deleteConfirm":"¿Seguro que quieres disolver este grupo de trabajo? Esta acción no se puede deshacer.","deletedCount":"{{count}} grupos de trabajo eliminados","deleteError":"No se pudo eliminar el grupo de trabajo","deletePartialFail":"{{success}} eliminados, {{fail}} fallidos","deleteSelected":"Eliminar","deleteSuccess":"Grupo de trabajo eliminado","deleteWorkforce":"Disolver grupo de trabajo","deselect":"Deseleccionar","duplicateError":"No se pudo duplicar el grupo de trabajo","gridView":"Vista de cuadrícula","listView":"Vista de lista","loadError":"No se pudo cargar tu espacio de trabajo. Inténtalo de nuevo.","pinned":"Fijado","retry":"Reintentar","select":"Seleccionar","selected":"{{count}} seleccionados","selectItem":"Seleccionar","subtitle":"Grupos de agentes colaborativos que resuelven desafíos complejos.","taskForcesLabel":"Grupos de trabajo activos","title":"Grupos de trabajo activos","viewToggle":"Modo de vista"},"export":{"clipboard":"Copiar al portapapeles","copied":"Copiado al portapapeles","copyFailed":"No se pudo copiar al portapapeles","downloadedJson":"Descargado como JSON","downloadedMd":"Descargado como Markdown","json":"Exportar como JSON","markdown":"Exportar como Markdown","title":"Exportar discusión"},"history":{"backToBoard":"Volver al grupo de trabajo","backToList":"Volver a la lista","cancel":"Cancelar","close":"Cerrar","confirmDelete":"Eliminar","conversationList":"Lista de conversaciones","delete":"Eliminar conversación","deleteDescription":"¿Seguro que quieres eliminar esta conversación? Esta acción no se puede deshacer.","deleteTitle":"Eliminar conversación","emptyTranscript":"Aún no hay entradas en la transcripción","entryCount":"{{count}} entradas","error":"Error","export":"Exportar","finalAnswer":"Respuesta final sintetizada","loadError":"No se pudo cargar la conversación","loadMore":"Cargar más","noContent":"Sin contenido","noConversations":"Aún no hay conversaciones","noResults":"Ninguna conversación coincide con tu búsqueda","notFound":"Conversación no encontrada","phase":"Fase","searchPlaceholder":"Buscar conversaciones…","selectConversation":"Selecciona una conversación para verla","selectHint":"Elige una conversación de la lista","skipped":"{{name}} — omitido","synthesis":"Síntesis","title":"Historial de conversaciones","transcript":"Transcripción de la conversación","tryDifferent":"Prueba con otro término de búsqueda","untitled":"Conversación sin título","loadListError":"No se pudieron cargar las conversaciones"},"insights":"Información","memberCount":"{{count}} miembros","newBoard":"Formar grupo de trabajo","onboarding":{"advisorSlots":"{{count}} plazas de asesor","agentsReady":"{{count}} listos","assembleNow":"Forma tu primer grupo de trabajo","customDesc":"Define tu propio equipo y tus propias reglas","customFromScratch":"Crear desde cero","deployAgent":"Desplegar agente","deployFirst":"Despliega tu primer agente de IA para empezar","deployFirst2":"Desplegar el primero →","deployFirstDesc":"Los agentes son los expertos que impulsan tus grupos de trabajo. Crea uno para empezar.","getStarted":"Empezar","howItWorks":"Cómo funciona","pickTemplate":"Elige una plantilla para empezar","pickTemplateDesc":"Cada plantilla configura un estilo de discusión, roles y reglas: tú solo asignas los agentes.","step1Desc":"Crea expertos de IA con habilidades, conocimientos y personalidad propios.","step1Title":"Desplegar agentes","step2Desc":"Elige una plantilla, asigna agentes a los roles y selecciona un estilo de discusión.","step2Title":"Formar un grupo de trabajo","step3Desc":"Plantea una pregunta y observa cómo tus agentes debaten, critican y sintetizan una respuesta.","step3Title":"Pregunta y observa","subtitle":"Reúne agentes de IA especializados en equipos colaborativos que debaten, analizan y resuelven juntos desafíos complejos.","welcome":"Bienvenido a tu grupo de trabajo"},"openMenu":"Abrir menú","shortcuts":{"closePanel":"Cerrar panel / diálogo","fromDashboard":"Desde el panel","newBoard":"Formar grupo de trabajo","showHelp":"Mostrar atajos de teclado","title":"Atajos de teclado"},"sidebar":{"boards":"Navegación de tableros"},"sidebarDrawer":"Navegación lateral","skipToContent":"Saltar al contenido","tabHome":"Inicio","tabInsights":"Información","tabThreads":"Hilos","templates":{"deleteConfirm":"¿Eliminar esta plantilla?","deleted":"Plantilla eliminada"},"templatesEmpty":"Guarda un grupo de trabajo como plantilla para recrearlo rápidamente más adelante.","themeDark":"Oscuro","themeLight":"Claro","themeSystem":"Sistema","toggleSidebar":"Alternar barra lateral","toggleTheme":"Cambiar tema","untitled":"Sin título","useTemplate":"Usar","wizard":{"addAdvisor":"Añadir asesor","advisorCount":"{{count}} asesores","advisorName":"Nombre del asesor","agentError":"No se pudo crear {{name}}: {{error}}","agentRequired":"Selecciona el agente existente que debe usar este asesor.","alreadyCreated":"Creado","alreadyCreatedNote":"Ya se creó en un intento anterior: se reutilizará tal cual, así que su prompt y su configuración de LLM ya no se pueden cambiar aquí.","apiKey":"Clave de API","apiKeyRequired":"{{provider}} necesita una clave de API. Añade una aquí o en los valores predeterminados de LLM de arriba.","back":"Atrás","boardDescPlaceholder":"Describe brevemente el propósito de este consejo asesor…","boardDescription":"Descripción (opcional)","boardName":"Nombre del grupo de trabajo","boardNamePlaceholder":"p. ej., Consejo de estrategia de producto","boardNameRequired":"Asigna un nombre a este grupo de trabajo.","cancel":"Cancelar","collapse":"Contraer","createNew":"Crear asesor nuevo","createWorkforce":"Crear grupo de trabajo","creatingAgent":"Creando…","creationFailed":"Error en la creación","creationFailedDesc":"Algo salió mal. Puedes reintentarlo y continuará donde se quedó.","customTemplate":"Personalizada","customTemplateDesc":"Empieza desde cero con tu propia configuración","error":"Error","existing":"Existente","expand":"Expandir","groupError":"No se pudo formar el grupo de trabajo: {{error}}","llmDefaults":"LLM para nuevos asesores","llmDefaultsDesc":"Se usa para cada asesor creado aquí, salvo que el asesor defina el suyo más abajo.","llmDefaultsKeyRequired":"Añade una clave aquí para cubrir a todos los asesores que no definan la suya.","model":"Modelo","modelPlaceholder":"p. ej., claude-sonnet-5","nameRequired":"Asigna un nombre a este asesor.","new":"Nuevo","next":"Siguiente","pending":"Esperando…","personality":"Personalidad y especialidad","personalityHint":"Obligatorio: se envía al agente como prompt de sistema.","personalityPlaceholder":"Describe la especialidad, la perspectiva y el estilo de comunicación de este asesor…","promptRequired":"Se requiere un prompt de sistema. Describe la especialidad de este asesor y cómo debe responder.","provider":"Proveedor de LLM","ready":"Listo","removeAdvisor":"Quitar asesor","role":"Rol","selectAgent":"Seleccionar agente","selectProvider":"Seleccionar proveedor…","settingUp":"Configurando tu grupo de trabajo…","settingUpBoard":"Formando el grupo de trabajo…","settingUpDesc":"Creando asesores y configurando el tablero. Esto puede tardar un momento.","starterPrompt":"Eres {{name}}, la voz de {{role}} en este equipo. Habla desde esa perspectiva: aporta ideas claras, bien razonadas y accionables, señala los riesgos y las contrapartidas que veas y céntrate en lo que mejor conoces.","starterPromptBare":"Eres miembro de este equipo. Aporta ideas claras, bien razonadas y accionables, señala los riesgos y las contrapartidas que veas y mantén el foco.","starterPromptNoRole":"Eres {{name}}, miembro de este equipo. Aporta ideas claras, bien razonadas y accionables, señala los riesgos y las contrapartidas que veas y mantén el foco.","starterPromptRoleOnly":"Eres la voz de {{role}} en este equipo. Habla desde esa perspectiva: aporta ideas claras, bien razonadas y accionables, señala los riesgos y las contrapartidas que veas y céntrate en lo que mejor conoces.","stepIndicatorLabel":"Progreso del asistente","stepReview":"Revisión","stepTeam":"Equipo","stepTemplate":"Plantilla","success":"¡Grupo de trabajo formado correctamente!","team":"Equipo","templates":"Plantillas de discusión","tryAgain":"Reintentar","unnamed":"Sin nombre","untitled":"Tablero sin título","useDefault":"Predeterminado del grupo de trabajo ({{value}})","useDefaultKey":"Clave predeterminada del grupo de trabajo","useExisting":"Usar un agente existente","useStarterPrompt":"Insertar un prompt inicial","yourAdvisors":"Tus asesores"},"workforce":"Grupo de trabajo"}'),Pe=JSON.parse('{"title":"Operador de plataforma","subtitle":"Pregunta sobre esta instalación de EDDI: el operador lo consulta por ti.","readOnlyChip":"Solo lectura","readWriteChip":"Lectura y escritura","configError":"No se pudo cargar la configuración del operador","empty":{"title":"El operador de plataforma está desactivado","description":"Actívelo para chatear con un agente que puede inspeccionar sus agentes, flujos de trabajo, conversaciones, despliegues y registros — y, con su aprobación de cada cambio, operarlos por usted.","action":"Activar el operador de plataforma"},"discovery":{"title":"Tu operador de plataforma","description":"Un asistente que inspecciona y opera este despliegue. Desactivado por defecto; cada cambio espera su aprobación.","action":"Activar"},"activation":{"title":"Activar el operador de plataforma","subtitle":"Elige el modelo que ejecutará el operador, revisa sus instrucciones y despliégalo.","modelStep":"Modelo","reviewStep":"Prompt y revisión","provider":"Proveedor","model":"Modelo","baseUrl":"URL base","apiKey":"Clave de API del modelo","apiKeyHint":"La clave de tu proveedor de LLM. No es una credencial de EDDI.","apiKeyPlaceholder":"Pega tu clave de API o elige una clave del almacén","vaultDown":"El almacén de secretos no está disponible, por lo que ahora mismo no se pueden guardar claves en él. Una clave introducida aquí se envía al backend, que la guardará en el almacén si puede.","environment":"Entorno","authMode":"Cómo se autentica el operador","authModeHint":"El operador llama a tu API de administración de EDDI. Esto determina qué credenciales llevan esas llamadas.","authNoneBlocked":"Esta instalación tiene la autenticación activada, por lo que las llamadas de herramientas sin autenticar serían rechazadas. El operador se desplegaría correctamente y luego fallaría en cada consulta. Elige «Tu identidad» en su lugar.","scope":{"label":"Capacidad","default":"Predeterminada","hint":"Lo que el operador puede hacer. Cada escritura sigue esperando tu aprobación — consulta las reglas de seguridad más abajo.","readOnly":{"label":"Solo lectura","description":"Puede inspeccionar y explicar este despliegue. No puede cambiar nada."},"readWrite":{"label":"Lectura y escritura","description":"También le permite crear y modificar agentes y grupos de agentes, desplegar, retirar el despliegue, deshabilitar una programación descontrolada y editar el descriptor de un agente — cada una a la espera de tu aprobación."},"writeWarning":"La activación verifica la puerta de aprobación contra la política almacenada antes de finalizar. Después, una escritura de prueba real e inocua se ejecuta en segundo plano — si alguna vez se ejecuta sin pausarse para aprobación, el operador se elimina de inmediato."},"safetyPreamble":"Reglas de seguridad (no editables)","safetyPreambleHint":"Se anteponen siempre. Indican al operador que trate todo lo que devuelvan sus herramientas como datos no fiables.","promptBody":"Instrucciones del operador","promptBodyHint":"Edita cómo se presenta el operador y cómo trabaja.","tools":"Herramientas que recibirá ({{toolCount}})","activate":"Activar y desplegar","callerIdentityNote":"EDDI inserta tu token en el momento de la llamada. Nunca se almacena en la conversación y solo se envía de vuelta a esta instalación.","rebuildWarning":"Al guardar se crea un nuevo agente operador y se elimina el actual. Tu conversación de operador existente no se conservará.","environmentHint":"Dónde se ejecuta el propio agente operador. Aun así puede leer cualquier entorno."},"authMode":{"none":{"label":"Sin credenciales","description":"Las llamadas de herramientas no llevan cabecera Authorization. Solo funciona si esta instalación de EDDI tiene la autenticación desactivada."},"caller-identity":{"label":"Tu identidad","description":"Las llamadas de herramientas se ejecutan como el usuario que ha iniciado sesión, con sus permisos y su rastro de auditoría. Necesario cuando la autenticación está activada."}},"stage":{"idle":"","validating":"Comprobando que esta instalación expone los endpoints que el operador necesita…","provisioning":"Creando el agente operador…","resolving-version":"Resolviendo la versión del agente…","saving":"Guardando la configuración…","verifying-gate":"Verificando la puerta de aprobación…","done":"Listo","longWait1":"El agente operador se está creando y desplegando — este es el paso más largo…","longWait2":"Configurando las herramientas y la puerta de aprobación en el nuevo agente…","longWait3":"Aún en curso — el despliegue puede tardar en una plataforma ocupada…"},"status":{"title":"Operador","provider":"Proveedor","environment":"Entorno","authMode":"Se autentica como","version":"Versión","checking":"Comprobando…","ready":"Desplegado","inProgress":"Desplegando…","error":"Error de despliegue","notFound":"No desplegado","errorHelp":"El agente operador no se pudo desplegar. Reconfigúralo para volver a intentarlo o consulta los registros de la plataforma para ver el error subyacente.","reconfigure":"Reconfigurar","deactivate":"Desactivar","reset":"Eliminar operador","deactivateConfirmTitle":"¿Desactivar el operador de plataforma?","deactivateConfirmBody":"El operador se retira del despliegue y deja de responder. Su configuración se conserva, así que puedes volver a activarlo más adelante.","resetConfirmTitle":"¿Eliminar el operador de plataforma?","resetConfirmBody":"El agente operador y todos los recursos creados para él se eliminan de forma permanente, junto con su configuración guardada. Esta acción no se puede deshacer.","connectionCheck":"Comprobar conexión","gateChecking":"Verificando puerta…","gateUnknown":"Puerta no comprobada","gateVerified":"Puerta verificada","gateNotVerified":"Puerta no verificada","gateUnverifiedHelp":"No se pudo verificar la puerta de aprobación en el documento de este agente."},"chat":{"empty":"Pregunta sobre tu instalación. El operador lo consulta y te muestra cada llamada que hace.","restoring":"Abriendo esa conversación…","placeholder":"Pregunta por agentes, conversaciones, despliegues, registros…","pausedPlaceholder":"Esperando una decisión arriba antes de que el operador pueda continuar…","readOnlyPlaceholder":"Esta conversación ha terminado: inicia una nueva para continuar.","send":"Enviar","stop":"Detener","newConversation":"Iniciar una conversación nueva","transcript":"Conversación con el operador","pauseCompactFallback":"El operador necesita tu aprobación para continuar.","pauseCompactReview":"Revisar para aprobar →","resolving":"Ejecutando el paso aprobado: puede tardar un momento…"},"drawer":{"title":"Operador de plataforma","notActivated":"Actívalo para chatear con tu despliegue desde cualquier lugar.","titleAwaiting":"Operador de plataforma: una decisión te espera","activate":"Configurar el operador de plataforma"},"approval":{"reconstructedEndpoint":"{{method}} {{path}} (reconstruido)","verified":"verificado","verifiedTitle":"Resuelto a partir de la configuración real de la llamada a la API; se vuelve a comprobar justo antes de la ejecución — si la solicitud cambia antes de eso, se rechaza la ejecución.","previewOnly":"vista previa","previewOnlyTitle":"Esta llamada ejecuta pasos de preparación adicionales antes de ejecutarse, por lo que esto es una vista previa aproximada — la solicitud real puede diferir y no se vuelve a comprobar antes de la ejecución.","query":"Consulta","headers":"Encabezados","bodyTruncated":"El cuerpo se muestra truncado para la visualización — la aprobación sigue cubriendo la solicitud completa.","diffHeading":"Cambios respecto a la versión almacenada {{version}}","diffLoading":"Cargando la versión almacenada para comparar…","diffFailed":"No se pudo cargar la versión almacenada para comparar: el documento propuesto completo está abajo.","diffForbidden":"Comparar con la versión almacenada requiere acceso de editor: el documento propuesto completo está abajo.","diffRedactionNote":"Las credenciales están ocultas en la versión propuesta, por lo que aparecen aquí como cambios aunque no hayan cambiado.","diffStored":"Almacenado v{{version}}","diffProposed":"Propuesto","showFullRequest":"Mostrar el documento propuesto completo","hideFullRequest":"Ocultar el documento propuesto completo","expandBody":"Expandir","escalation":{"heading":"Esta solicitud otorga capacidades adicionales","dynamicAgentCreation":"Este grupo puede crear nuevos agentes mientras se ejecuta. Esos agentes no requieren aprobación por sí mismos.","dynamicAgentRecruitment":"Este grupo puede incorporar otros agentes existentes a sus discusiones.","autoApproveOnTimeout":"Las aprobaciones de este recurso se conceden automáticamente al agotarse el tiempo, sin que nadie lo supervise.","agentCreatedWithoutGate":"Este agente se está creando sin puerta de aprobación. Cada escritura que realice más adelante se ejecutará sin supervisión.","agentCreatedWithBroadEndpoints":"Este agente se está creando con acceso de escritura a su API — no limitado a lecturas.","agentCreatedWithExternalTools":"Este agente se está creando con todas las herramientas que ofrece un servidor MCP externo. Ese servidor decide cuáles son y puede cambiarlas más adelante.","unchecked":"El cuerpo era demasiado largo para analizarlo en busca de concesiones de capacidad — léalo completo antes de aprobar.","inlineCredential":"Esta solicitud incrusta lo que parece una credencial literal en lugar de una referencia ${vault:…}. Un secreto escrito directamente se almacena en texto plano y no puede rotarse desde la bóveda — recházala y pide la referencia de la bóveda."},"blockedSelfTarget":"Un agente no puede modificar su propia definición, y esta solicitud apunta al propio agente del operador ({{agentId}}). Mientras esté presente, no se puede aprobar todo el lote: recházala y haz este cambio desde la página de ese agente.","blockedSelfConversation":"Un agente no puede enviar un mensaje a la conversación en la que se está ejecutando, y esta solicitud apunta a esta ({{agentId}}). Escribiría su propio texto como si lo hubiera dicho una persona. Mientras esté presente, no se puede aprobar todo el lote: recházala.","blockedGateCarrying":"Esta solicitud escribe una configuración de LLM que establece su propia puerta de aprobación (toolApprovals), lo que reemplazaría la puerta que la está revisando. La aprobación no está disponible para todo el lote mientras esté presente — rechace y cambie la puerta desde la página del agente.","blockedGateUnverifiable":"Esta solicitud escribe una configuración de LLM cuyo cuerpo no se puede leer por completo — es demasiado grande para mostrarse o no es JSON válido —, por lo que no se puede confirmar que no anule la puerta de aprobación. La aprobación no está disponible para todo el lote mientras esté presente — rechace y realice este cambio desde la página del agente.","blockedGateUnpinned":"Esta solicitud escribe una configuración de LLM pero no está fijada, por lo que lo que realmente se ejecuta puede diferir de lo que se muestra aquí y no se puede confirmar que no anule la puerta de aprobación. La aprobación no está disponible para todo el lote mientras esté presente — rechace y realice este cambio desde la página del agente.","blockedSelfStart":"El operador no puede probarse a sí mismo: iniciar una conversación con su propio agente ({{agentId}}) devolvería su salida como entrada. Aprobar no está disponible para todo el lote mientras esté presente; rechaza y prueba otro agente."},"starters":{"whatsDeployed":"¿Qué hay desplegado ahora mismo?","recentConversations":"Muéstrame las conversaciones más recientes","healthCheck":"¿Hay algo que no funcione bien en esta plataforma?","diagnoseAgent":"¿Por qué falla el despliegue de uno de mis agentes?"},"toast":{"activated":"Operador de plataforma activado","deactivated":"Operador de plataforma desactivado","reset":"Operador de plataforma eliminado","activatedButUnreachable":"Operador desplegado, pero no pudo leer tu plataforma","activatedGateVerified":"Operador de plataforma activado — puerta de aprobación verificada. Las comprobaciones de conexión se ejecutan en segundo plano.","activatedChecking":"Operador de plataforma activado. Las comprobaciones de conexión se ejecutan en segundo plano.","writeProbeVerified":"Acceso de escritura verificado — una escritura real protegida se pausó para aprobación.","writeProbeFailed":"La puerta de aprobación no resistió — el operador fue eliminado.","writeProbeInconclusive":"La prueba de escritura en vivo no fue concluyente."},"canary":{"genericFailure":"La comprobación de conexión no se completó correctamente.","passed":"El operador puede acceder a tu plataforma.","recheck":"Comprobar de nuevo","title":"El operador se desplegó, pero no pudo leer tu plataforma."},"paused":{"title":"El operador de plataforma está en pausa","description":"Sigue configurado: al volver a activarlo se despliega el mismo agente. No se ha eliminado nada.","action":"Volver a activar"},"managedAgentBadge":"Operador","managedAgentHint":"Aprovisionado y gestionado por la pantalla del operador de plataforma. Editarlo o eliminarlo aquí romperá esa pantalla.","decisionLog":{"approved":"Has aprobado esta solicitud","rejected":"Has rechazado esta solicitud","rePaused":"En pausa de nuevo: se necesita otra decisión","noReply":"El turno terminó sin respuesta","executed":"Se ejecutó {{calls}}","partial_one":"Aprobada — {{count}} llamada rechazada","partial_other":"Aprobada — {{count}} llamadas rechazadas","partial_many":"Aprobada — {{count}} llamadas rechazadas"},"tabs":{"label":"Vistas del operador","chat":"Chat","history":"Historial"},"history":{"emptyTitle":"No hay conversaciones anteriores","emptyDescription":"Las conversaciones con el operador aparecen aquí para que puedas retomarlas más tarde.","noOpeningMessage":"(aún sin mensaje)","stepCount_one":"{{count}} paso","stepCount_other":"{{count}} pasos","stepCount_many":"{{count}} pasos"}}'),Se={addCadence:"Añadir cadencia",addTask:"Añadir tarea",backToGroup:"Volver al grupo",backlogEmpty:"Aún no hay tareas en la lista de pendientes.",backlogTitle:"Pendientes ({{count}})",cadenceAdded:"Cadencia añadida",cadenceDeleted:"Cadencia eliminada",cadenceRunning:"Actualmente hay una discusión iniciada por la cadencia en curso.",cadencesEmpty:"Aún no hay cadencias recurrentes configuradas.",cadencesTitle:"Cadencias ({{count}})",confirmDeleteCadenceDesc:"Esto detiene sus ejecuciones programadas. Las discusiones ya realizadas no se ven afectadas.",confirmDeleteCadenceTitle:"¿Eliminar esta cadencia?",createdBy:"por {{who}}",cronLabel:"Expresión cron",cronPlaceholder:"p. ej. 0 9 * * MON",discussions:"Discusiones",failed:"Fallido",inputTemplatePlaceholder:"Plantilla de prompt para cada ejecución (opcional — de lo contrario se usa un simple listado de pendientes)",lastRun:"Última ejecución",maxCostLabel:"Coste máx. / ejecución ($, opcional)",maxCostPlaceholder:"valor predeterminado del grupo",maxPerRunLabel:"Tareas máx. / ejecución",member:"Miembro",navLabel:"Espacio de trabajo",never:"Nunca",perMemberStats:"Fiabilidad por miembro",priority:"Prioridad",subtitle:"Una lista de pendientes persistente y cadencias recurrentes que este grupo ejecuta sin supervisión, según una programación.",taskAdded:"Tarea añadida a la lista de pendientes",taskDescriptionPlaceholder:"Descripción (opcional)",taskSubjectPlaceholder:"Asunto de la tarea",tasksVerified:"Tareas verificadas",timeZoneLabel:"Zona horaria",title:"Espacio de trabajo del equipo permanente",totalCost:"Coste total",verified:"Verificado",maxCostInvalid:"El coste máximo por ejecución debe ser un número igual o mayor que 0.",cadenceSummary_many:"hasta {{max}} tareas/ejecución",cadenceSummary_one:"hasta {{max}} tarea/ejecución",cadenceSummary_other:"hasta {{max}} tareas/ejecución",inputTemplateTooLong:"La plantilla de prompt está limitada a {{max}} caracteres."},ke={title:"Equipo nuevo"},Re={title:"Actualizaciones de EDDI",description:"Comprueba si hay una versión más reciente de EDDI. No se envía nada hasta que lo solicites.",installed:"Instalada",githubRelease:"Versión de GitHub",dockerImage:"Imagen de Docker",unknownVersion:"Desconocida",checkNow:"Comprobar ahora",checking:"Comprobando…",autoCheck:"Comprobar automáticamente en cada carga de página",autoCheckHint:"Ejecuta una comprobación por recarga del navegador y muestra un aviso si existe una versión más reciente.",privacyNote:"La comprobación contacta únicamente con api.github.com desde tu navegador. No se envía ningún dato del despliegue.",neverChecked:"Aún no se ha realizado ninguna comprobación.",upToDate:"Estás usando la última versión ({{version}}).",updateAvailable:"EDDI {{version}} está disponible",updateAvailableDetail:"Estás usando {{installed}}.",ahead:"Estás usando {{installed}}, más reciente que la última versión publicada ({{version}}).",unknownInstalled:"La última versión es {{version}}. No se pudo determinar la versión instalada, así que no hay nada con lo que compararla.",errorRateLimited:"Se alcanzó el límite de peticiones sin autenticar de GitHub. Inténtalo más tarde o abre la página de versiones.",errorBlockedByCsp:"La Content-Security-Policy de esta instalación impide que el navegador acceda a api.github.com, por lo que la comprobación no puede ejecutarse. Añade api.github.com a la directiva connect-src o utiliza el enlace de versiones de abajo.",errorUnreachable:"No se pudo contactar con api.github.com. Comprueba tu red o el proxy de salida.",errorFailed:"La comprobación de actualizaciones falló. Abre la página de versiones para comprobarlo manualmente.",publishedOn:"Publicada el {{date}}",whatsNew:"Novedades de {{version}}",fullNotes:"Notas de la versión completas en GitHub",noNotes:"Esta versión no tiene notas.",releaseNotes:"Notas de la versión",allReleases:"Todas las versiones",howToUpdate:"Cómo actualizar",howToUpdateCli:"Con la CLI eddi (creada por el instalador):",howToUpdateManual:"Sin la CLI, desde tu directorio de instalación (~/.eddi por defecto):",howToUpdateNote:"Ajusta las opciones -f a tu configuración: añade -f docker-compose.auth.yml si usas Keycloak."},Le={acrossGroups:"en {{count}} grupos de trabajo",actions:"Acciones",activeExperts:"Expertos activos",activity:"Actividad",agentLeaderboard:"Clasificación de agentes",agentName:"Agente",allOutcomes:"Todos los resultados",allStyles:"Todos los estilos",avgDuration:"Duración media",cancelCompare:"Cancelar",clearAll:"Borrar todo",clearFilters:"Borrar filtros",completionRate:"Tasa de finalización",contributions:"Contribuciones",covered:"Cubierto",createFirst:"Formar grupo de trabajo",daysAgo:"hace {{count}} d",emptyDescription:"Inicia una discusión de grupo de trabajo para ver analíticas aquí.",emptyHaveGroups:"Tienes {{count}} grupos de trabajo pero aún no hay discusiones. Inicia una para ver la información.",emptyTitle:"Aún no hay información",errorDescription:"No se pudieron obtener algunos datos. Inténtalo de nuevo.",errors:"Errores",errorTitle:"No se pudo cargar la información",filteredOf:"{{filtered}} de {{total}} en total",highConfidence:"Confianza alta",hoursAgo:"hace {{count}} h",justNow:"ahora mismo",last30Days:"Últimos 30 días",minutesAgo:"hace {{count}} min",noAgents:"Aún no hay actividad de agentes.",noDiscussions:"Aún no hay discusiones.",noMatchingDiscussions:"Ninguna discusión coincide con los filtros activos.",noPhases:"No hay datos de fases disponibles.",noResults:"No hay discusiones coincidentes",noResultsHint:"Ajusta los filtros o bórralos para ver todos los datos.",noSkills:"No hay capacidades registradas. Define habilidades en tus agentes para seguir la cobertura.",noStyles:"No hay datos de estilos disponibles.",outcomeChart:"Distribución de resultados: {{total}} en total",outcomes:"Resultados",participatedRecently:"participaron en discusiones",perDiscussion:"por discusión",phaseChart:"Distribución de fases",phaseDistribution:"Distribución de fases",pickSecondAgent:"Haz clic en un agente para compararlo con {{name}}",recentDiscussions:"Discusiones recientes",removeFilter:"Quitar filtro: {{label}}",retry:"Reintentar",sessions:"Sesiones",sessionsCompleted:"sesiones completadas correctamente",showingResults:"{{count}} de {{total}}",skillCoverage:"Cobertura de habilidades",styleBreakdown:"Estilos de discusión",subtitle:"Últimos 30 días",title:"Información",total:"Total",totalDiscussions:"Discusiones",totalSkills:"Habilidades",uncoveredSkills:"{{count}} habilidades sin cubrir"},je={activeRate:"Tasa de actividad",activeRateDesc:"Agentes activos en los últimos 30 días",dormantAgents:"Inactivos",dormantAgentsDesc:"Agentes sin usar durante más de 30 días",msgAtRisk:"La mayor parte de tu plantilla está inactiva: plantéate involucrarlos",msgHealthy:"El {{rate}} % de tu plantilla digital estuvo activa en los últimos 30 días",msgModerate:"Algunos expertos digitales no se han consultado recientemente",statusAtRisk:"En riesgo",statusHealthy:"Saludable",statusModerate:"Moderado",taskForces:"Grupos de trabajo",taskForcesDesc:"Grupos de agentes colaborativos",title:"Salud del conocimiento",workforceSize:"Tamaño de la plantilla",workforceSizeDesc:"Total de expertos digitales desplegados"},Ie={hint:"Recordaremos tu elección y te llevaremos allí automáticamente la próxima vez.",manager:{description:"Crea, configura y despliega tus agentes de IA. Gestiona flujos de trabajo, recursos e integraciones.",feature1:"Crear y desplegar agentes",feature2:"Configurar flujos de trabajo y pipelines",feature3:"Gestionar recursos y extensiones",title:"Manager"},subtitle:"Elige tu espacio de trabajo para empezar.",title:"Bienvenido a EDDI",workforce:{description:"Reúne equipos de IA que debaten, analizan y resuelven juntos desafíos complejos.",feature1:"Formar grupos de trabajo de agentes",feature2:"Ejecutar discusiones colaborativas",feature3:"Obtener respuestas sintetizadas",title:"Plantilla"}},xe={assembleTaskForce:"Formar grupo de trabajo",assembleTaskForceDesc:"Reúne a expertos para resolver desafíos complejos",chatWithAgent:"Chatear con un agente",chatWithAgentDesc:"Mantén una conversación 1 a 1 con cualquier experto digital",manageWorkforce:"Gestionar la plantilla",manageWorkforceDesc:"Configurar y desplegar expertos digitales",title:"Acciones rápidas",viewInsights:"Ver información",viewInsightsDesc:"Sigue la cobertura de conocimiento de tu plantilla"},Me={addAgent:"Desplegar agente",count:"{{count}} expertos",ready:"Listo",title:"Tu plantilla digital",unnamed:"Agente sin nombre"},Ne={production:"Producción",test:"Prueba"},we={attachments:e,app:a,auth:o,nav:r,theme:n,language:t,pages:s,common:i,agents:c,agentDetail:d,wizard:l,setupWizard:u,packages:p,packageDetail:m,packageEditor:g,conversations:v,conversationDetail:b,chat:h,resources:f,editor:y,rulesEditor:A,apiCallsEditor:E,mcpcallsEditor:C,llmEditor:D,outputEditor:T,propertySetterEditor:P,dictionaryEditor:S,parserEditor:k,dictionaryPicker:R,coordinator:L,contentEditor:j,logs:I,secrets:x,audit:M,schedules:N,cascadeTrace:w,debugDrawer:q,costDashboard:z,memoryInspector:H,logViewer:O,promptViewer:F,promptPreview:V,studio:U,ragEditor:_,onboarding:G,platform:B,stream:W,createOrWizard:K,groups:J,taskBoard:Q,memories:Y,properties:$,triggers:Z,capabilities:X,exportDialog:ee,importDialog:ae,syncPage:oe,sync:re,userConversations:ne,commandPalette:te,groupWizard:se,groupTemplates:ie,channels:ce,channelDetail:de,hitl:le,chatDrawer:ue,dashboard:pe,errorBoundary:me,gdpr:ge,mockBanner:ve,orphans:be,quotas:he,secretPicker:fe,snippetEditor:ye,status:Ae,userData:Ee,variables:Ce,workflowEditor:De,Workforce:Te,operator:Pe,groupWorkspace:Se,workforceWizard:ke,updates:Re,analyticsPage:Le,knowledgeHealth:je,landing:Ie,quickActions:xe,workforce:Me,environments:Ne};export{Te as Workforce,d as agentDetail,c as agents,Le as analyticsPage,E as apiCallsEditor,a as app,e as attachments,M as audit,o as auth,X as capabilities,w as cascadeTrace,de as channelDetail,ce as channels,h as chat,ue as chatDrawer,te as commandPalette,i as common,j as contentEditor,b as conversationDetail,v as conversations,L as coordinator,z as costDashboard,K as createOrWizard,pe as dashboard,q as debugDrawer,we as default,S as dictionaryEditor,R as dictionaryPicker,y as editor,Ne as environments,me as errorBoundary,ee as exportDialog,ge as gdpr,ie as groupTemplates,se as groupWizard,Se as groupWorkspace,J as groups,le as hitl,ae as importDialog,je as knowledgeHealth,Ie as landing,t as language,D as llmEditor,O as logViewer,I as logs,C as mcpcallsEditor,Y as memories,H as memoryInspector,ve as mockBanner,r as nav,G as onboarding,Pe as operator,be as orphans,T as outputEditor,m as packageDetail,g as packageEditor,p as packages,s as pages,k as parserEditor,B as platform,V as promptPreview,F as promptViewer,$ as properties,P as propertySetterEditor,xe as quickActions,he as quotas,_ as ragEditor,f as resources,A as rulesEditor,N as schedules,fe as secretPicker,x as secrets,u as setupWizard,ye as snippetEditor,Ae as status,W as stream,U as studio,re as sync,oe as syncPage,Q as taskBoard,n as theme,Z as triggers,Re as updates,ne as userConversations,Ee as userData,Ce as variables,l as wizard,De as workflowEditor,Me as workforce,ke as workforceWizard}; diff --git a/src/main/resources/META-INF/resources/assets/es-y-rSdH2T.js b/src/main/resources/META-INF/resources/assets/es-y-rSdH2T.js deleted file mode 100644 index 093534bc79..0000000000 --- a/src/main/resources/META-INF/resources/assets/es-y-rSdH2T.js +++ /dev/null @@ -1 +0,0 @@ -const e={title:"Adjuntos",empty:"Esta conversación no tiene adjuntos.",loadError:"No se pudieron cargar los adjuntos.",deleteAll:"Eliminar todo",delete:"Eliminar adjunto",download:"Descargar",deleted:"Adjunto eliminado",deletedAll:"{{count}} adjuntos eliminados",confirmDeleteTitle:"¿Eliminar adjunto?",confirmDeleteDesc:"Elimina este archivo permanentemente. No se puede deshacer.",confirmDeleteAllTitle:"¿Eliminar todos los adjuntos?",confirmDeleteAllDesc:"Elimina permanentemente todos los archivos de esta conversación. No se puede deshacer."},a={title:"EDDI Manager",description:"Panel de administración de la plataforma de IA EDDI"},o={login:"Iniciar sesión",logout:"Cerrar sesión",loading:"Autenticando…",sessionExpired:"Sesión expirada. Inicie sesión de nuevo.",profile:"Perfil",guest:"Invitado",userMenu:"Menú de usuario"},r={dashboard:"Panel",agents:"Agentes",packages:"Flujos de trabajo",conversations:"Conversaciones",coordinator:"Coordinador",schedules:"Programaciones",logs:"Registros",orphans:"Huérfanos",secrets:"Secretos",audit:"Registro de auditoría",quotas:"Cuotas",groups:"Grupos",chat:"Chat",resources:"Recursos",sectionManagement:"Gestión",sectionDevelopment:"Desarrollo",sectionOperations:"Operaciones",mainNavigation:"Navegación principal",openMenu:"Abrir menú de navegación",sectionCore:"Principal",sectionBuild:"Crear y probar",sectionMonitor:"Supervisión",sectionAdmin:"Administración",studio:"Estudio",gdpr:"Privacidad",memories:"Memoria del usuario",properties:"Propiedades",triggers:"Disparadores",capabilities:"Capacidades",sync:"Sincronización",updates:"Actualizaciones",channels:"Canales",approvals:"Aprobaciones",userConversations:"Conversaciones de usuario",userData:"Datos del usuario",variables:"Variables",sectionExternal:"Externo",activeConversations:"Conversaciones activas",openapi:"OpenAPI",docs:"Documentación",modeManager:"Gestor",modeWorkforce:"Equipo",switchMode:"Cambiar espacio",operator:"Operador de plataforma",workforce:"Plantilla",monitoring:"Supervisión de conversaciones",analytics:"Analíticas"},n={light:"Claro",dark:"Oscuro",system:"Sistema"},t={label:"Idioma",en:"English",de:"Deutsch",fr:"Français",es:"Español",ar:"العربية",zh:"中文",th:"ไทย",ja:"日本語",ko:"한국어",pt:"Português",hi:"हिन्दी",switchFailed:"No se pudo cargar ese idioma. Inténtalo de nuevo."},s={dashboard:{title:"Panel",subtitle:"Resumen de sus agents y conversaciones EDDI",activeAgents:"Agents activos",totalWorkflows:"Flujos de trabajo",totalResources:"Recursos",totalConversations:"Conversaciones",quickActions:"Acciones rápidas",recentAgents:"Agents recientes",noRecentAgents:"Aún no hay agents. ¡Cree su primer agent!"},agents:{undeployPreviousVersionsHint:"También elimina del entorno todas las versiones anteriores de este agente.",undeployPreviousVersionsLabel:"Retirar esta y todas las versiones anteriores",undeployEndConversationsHint:"Termina de inmediato todas las conversaciones en curso de este despliegue. No se puede deshacer.",undeployEndConversationsLabel:"Finalizar todas las conversaciones activas",confirmUndeployDescription:"La versión {{version}} se retirará de {{environment}}.",confirmUndeploy:"¿Retirar el despliegue del agente?",title:"Agentes",subtitle:"Gestione sus agents de IA conversacional"},packages:{title:"Flujos de trabajo",subtitle:"Configure workflows y extensiones de agents"},conversations:{permanentDeleteSuccess:"Eliminado permanentemente",softDeleteSuccess:"Conversación eliminada",deletePermanentAction:"Eliminar permanentemente",deletePermanentLabel:"Eliminar permanentemente — también borra los adjuntos, la instantánea de memoria y el historial de aprobaciones. No se puede deshacer.",confirmDeleteSoft:"De forma predeterminada, es un borrado lógico: la conversación se oculta de las listas, pero sus datos se conservan en el servidor.",title:"Conversaciones",subtitle:"Vea y gestione las conversaciones de los agents"},resources:{title:"Recursos",subtitle:"Gestione reglas de comportamiento, diccionarios, salidas y más"},chat:{title:"Chat",subtitle:"Hable con sus agents desplegados"},channels:{title:"Canales",subtitle:"Conecte agentes y grupos a plataformas de mensajería como Slack"},groups:{title:"Grupos",subtitle:"Grupos de discusión multi-agente para debate estructurado y colaboración"},approvals:"Aprobaciones pendientes",approvalsSubtitle:"Revise y decida sobre conversaciones que esperan intervención humana"},i={add:"Añadir",agent:"Agente",back:"Atrás",cardView:"Vista de tarjetas",clear:"Borrar selección",confirm:"Confirmar",description:"Descripción",group:"Grupo",id:"ID",listView:"Vista de lista",modified:"Modificado",name:"Nombre",new:"Nuevo",version:"Versión",viewMode:"Modo de vista",loading:"Cargando...",error:"Algo salió mal",retry:"Reintentar",save:"Guardar",cancel:"Cancelar",delete:"Eliminar",remove:"Quitar",create:"Crear",edit:"Editar",search:"Buscar...",noResults:"No se encontraron resultados",duplicate:"Duplicar",close:"Cerrar",skipToMain:"Ir al contenido principal",opensNewTab:"abre en nueva pestaña",moreActions:"Más acciones",sortByName:"Ordenar por nombre",sortByVersion:"Ordenar por versión",sortByModified:"Ordenar por fecha de modificación",apply:"Aplicar",copied:"Copiado",copy:"Copiar",saving:"Guardando…",showMore:"Show More",showLess:"Show Less",copyFailed:"Error al copiar al portapapeles",loadError:"Error al cargar los datos",actions:"Acciones",view:"Ver",refresh:"Actualizar",previous:"Anterior",next:"Siguiente",dismiss:"Descartar",refreshFailed:"No se pudo actualizar: se muestran los últimos datos cargados.",settings:"Ajustes",history:"Historial",copyId:"Copiar ID del agente",off:"Desactivado",on:"Activado"},c={confirmDeleteDescription:"Esta acción no se puede deshacer. El agente y todos sus datos se eliminarán permanentemente.",confirmUndeploy:"¿Retirar el despliegue del agente?",confirmUndeployDescription:"La versión {{version}} se retirará de {{environment}}.",createSuccess:"Agent creado con éxito",deleteAgent:"Eliminar agente",deployError:"Error al desplegar",deploySuccess:"Agent desplegado con éxito",noDescription:"Sin descripción",selectAgent:"Seleccionar agente",undeployEndConversationsHint:"Termina de inmediato todas las conversaciones en curso de este despliegue. No se puede deshacer.",undeployEndConversationsLabel:"Finalizar todas las conversaciones activas",undeployError:"Error al retirar el despliegue",undeployPreviousVersionsHint:"También elimina del entorno todas las versiones anteriores de este agente.",undeployPreviousVersionsLabel:"Retirar esta y todas las versiones anteriores",undeploySuccess:"Agent retirado",unnamed:"Agente sin nombre",deploy:"Desplegar",undeploy:"Retirar",createAgent:"Crear agent",createTitle:"Crear nuevo agent",name:"Nombre",namePlaceholder:"Mi Agent",description:"Descripción",descriptionPlaceholder:"Describa qué hace este agent...",empty:"Aún no hay agents. ¡Cree su primer agent!",confirmDelete:"¿Está seguro de que desea eliminar este agent?",count_one:"{{count}} agente",count_other:"{{count}} agentes",export:"Exportar",exporting:"Exportando...",exportSuccess:"Agent exportado con éxito",import:"Importar agent",importing:"Importando...",importSuccess:"Agent importado con éxito",importError:"Error al importar el agent",emptyDescription:"Use el asistente para crear un agente completamente configurado en minutos.",chat:"Chat",deployAndChat:"Desplegar y chatear",openExternalChat:"Abrir en nueva pestaña",count_many:"{{count}} agentes",liveIn:"Activo en {{environment}}",chatIn:"Chatear en {{environment}}",openExternalChatIn:"Abrir el chat de {{environment}} en una pestaña nueva",deployToProduction:"Desplegar en producción",undeployFromProduction:"Retirar de producción",deployFailedIn:"El despliegue falló en {{environment}}"},l=JSON.parse(`{"a2aDescHint":"Se muestra en la Agent Card — ayuda a otros agentes a entender qué hace este agente","a2aDescPlaceholder":"¿Qué hace este agente?","a2aDescription":"Descripción del agente","a2aEnable":"Activar A2A","a2aEnabled":"Activado","a2aEnabledDesc":"Permite que otros agentes descubran este agente mediante el protocolo A2A. Otras instancias de EDDI pueden encontrarlo y llamarlo como una herramienta.","a2aEndpoints":"Endpoints","a2aNoSkills":"Sin habilidades — se usará una habilidad 'chat' predeterminada","a2aSection":"Agente a agente (A2A)","a2aSkillPlaceholder":"p. ej. translation, code-review","a2aSkills":"Habilidades A2A","addAttribute":"Añadir atributo","agentCardPreview":"Vista previa de la Agent Card","agentDid":"DID del agente","attributeKey":"clave","attributeValue":"valor","attributesLabel":"Atributos","attrs":"atrib.","autoSnapshotEnable":"Activar puntos de control automáticos","capabilities":"Capacidades","capabilitiesDesc":"Habilidades declaradas para la Agent Card A2A y el registro de capacidades. Otros agentes las descubren al elegir destinos de delegación.","capabilityPlaceholder":"Busque o escriba el nombre de una habilidad...","comingSoon":"próximamente","defaultVisibility":"Visibilidad predeterminada","dreamConsolidation":"Consolidación Dream","dreamDesc":"Tarea LLM en segundo plano que resuelve contradicciones, elimina entradas obsoletas y, opcionalmente, resume las interacciones.","enableMemoryTools":"Activar herramientas de memoria","enableSwd":"Activar disciplina de escritura estricta","forkingDisabledTooltip":"Disponible en una versión futura","forkingEnabled":"Bifurcación de sesión","forkingNote":"El endpoint de bifurcación de sesión (POST /v6/conversations/{{id}}/fork) aún no está disponible.","guardrails":"Salvaguardas de escritura","identity":"Identidad criptográfica","keyExpired":"Caducada","keyVersion":"Clave v{{version}}","legacyKey":"Clave heredada (v0)","maxCheckpoints":"Máx. puntos de control","maxCheckpointsHint":"por conversación","maxEntriesPerUser":"Máx. por usuario","maxForks":"Máx. bifurcaciones","maxForksHint":"por conversación","maxRecallEntries":"Máx. recuperación","memoryPolicy":"Política de memoria","memoryPolicyDesc":"La disciplina de escritura estricta rige qué ocurre cuando la actualización de propiedades falla durante un paso de la conversación. Elija cómo gestiona el motor los datos confirmados parcialmente.","onCapReached":"Al alcanzar el límite","onFailure":"Estrategia en caso de fallo","onFailureDigest":"Resumen — revertir cambios y reportar un resumen al LLM","onFailureExclude":"Excluir todo — descartar en silencio todas las actualizaciones de propiedades","onFailureKeep":"Conservar todo — mantener los cambios y registrar una advertencia","openWorkflow":"Abrir","outdated":"desactualizado","publicKey":"Clave pública","publicKeyHint":"Se genera automáticamente en la primera firma","publicKeys":"Claves públicas","recallOrder":"Orden de recuperación","requirePeer":"Requerir verificación de pares","requirePeerDesc":"Rechazar las tareas A2A entrantes de agentes que no puedan demostrar su identidad","securityFlagConfirmBtn":"Activar de todos modos","securityFlagConfirmDesc":"La firma criptográfica aún no está disponible en esta versión. Activar esta opción hará que el backend rechace los guardados con HTTP 400. ¿Seguro que desea continuar?","securityFlagConfirmTitle":"¿Activar la opción de seguridad?","securityFlagWarning":"La firma criptográfica aún no está disponible en esta versión. El backend rechazará los guardados con estas opciones activadas (HTTP 400).","securityFlags":"Firma y verificación","securityIdentity":"Seguridad e identidad","sessionManagement":"Gestión de sesiones","sessionManagementDesc":"Los puntos de control de memoria capturan el estado de la conversación antes de operaciones arriesgadas, permitiendo una reversión limpia en caso de fallo.","signA2A":"Firmar los mensajes entre agentes (A2A)","signA2ADesc":"Firmar criptográficamente los mensajes A2A salientes para evitar manipulaciones","signMcp":"Firmar las invocaciones MCP","signMcpDesc":"Adjuntar firmas a las llamadas de herramientas MCP para una verificación segura del servidor","skillAlreadyExists":"Esta habilidad ya está declarada","switchToLatest":"Cambiar a la última","toggleAttributes":"Alternar atributos","triggerBeforeAction":"Antes de la acción","triggerBeforeTool":"Antes de ejecutar la herramienta","triggerOn":"Activar en","updateToLatest":"Actualizar a la última versión","userMemory":"Memoria del usuario","userMemoryDesc":"Memoria persistente por usuario con herramientas de LLM (remember/recall/forget). La persistencia básica de propiedades longTerm siempre funciona, independientemente de esta opción.","viewingOldVersion":"Está viendo la versión {{current}}. La última es la versión {{latest}}.","workflowAdded":"Workflow añadido","workflowRemoved":"Workflow eliminado","workflowUpdated":"Workflow actualizado a la última versión","title":"Detalles del agent","backToAgents":"Volver a Agents","packages":"Flujos de trabajo","noWorkflows":"Aún no se han añadido workflows","addWorkflow":"Añadir workflow","selectWorkflow":"Seleccionar workflow para añadir","rawConfig":"Configuración sin procesar","editName":"Editar nombre","editDescription":"Editar descripción","clickToEdit":"Clic para editar","noDescription":"Sin descripción","duplicate":"Duplicar","duplicating":"Duplicando...","duplicateSuccess":"Agent duplicado con éxito","environments":"Entornos","envProduction":"Producción","envTest":"Prueba","savingAgent":"Guardando agent...","savedAgent":"Agent guardado con éxito","saveError":"Error al guardar el agent","deployToEnv":"Desplegar en {{env}}","undeployFromEnv":"Retirar de {{env}}","openStudio":"Abrir en el Estudio","maxKeyLength":"Longitud máx. de clave","maxValueLength":"Longitud máx. de valor","maxWritesPerTurn":"Escrituras máx./turno","dreamSchedule":"Programación (cron)","dreamLlmProvider":"Proveedor LLM","dreamLlmModel":"Modelo LLM","dreamMaxCost":"Coste máx./ejecución ($)","dreamPruneDays":"Limpieza tras (días)","dreamBatchSize":"Tamaño del lote","detectContradictions":"Detectar contradicciones","summarizeInteractions":"Resumir interacciones","confidenceLow":"Bajo","confidenceMedium":"Medio","confidenceHigh":"Alto","visibilitySelf":"Propio","visibilityGlobal":"Global","onCapEvict":"Eliminar el más antiguo","onCapReject":"Rechazar","recallMostRecent":"Más reciente","recallMostRelevant":"Más relevante","channels":"Conectores de canal","channelsDesc":"Conecta este agente a canales de Slack. Cada conector se configura de forma independiente con sus propias credenciales, soportando configuraciones multi-workspace.","noChannels":"No hay canales configurados","noChannelsDesc":"Añade un canal de Slack para que los usuarios interactúen con este agente desde Slack.","addSlackChannel":"Añadir canal de Slack","slackChannel":"Canal de Slack","removeChannel":"Eliminar canal","removeChannelConfirm":"¿Eliminar este conector de canal de Slack?","removeChannelDesc":"This action will permanently disconnect this channel.","channelId":"ID del canal","channelIdHint":"Los ID de canal comienzan con C seguido de caracteres alfanuméricos en mayúsculas","botToken":"Token del bot","botTokenPlaceholder":"xoxb-… o \${vault:slack-bot-token}","botTokenHint":"Token OAuth de usuario bot de Slack. Use una referencia de vault para mayor seguridad.","signingSecret":"Secreto de firma","signingSecretPlaceholder":"Cadena hexadecimal o \${vault:slack-signing-secret}","signingSecretHint":"De la página Basic Information de tu aplicación Slack. Usa una referencia de vault para seguridad.","groupIdOptional":"ID de grupo (opcional)","groupIdPlaceholder":"ID de configuración de grupo multi-agente","groupIdHint":"Activa discusiones multi-agente \\"group: pregunta\\" desde este canal de Slack.","slackSetupGuide":"Guía de configuración de Slack","slackWebhookUrl":"URL del webhook","slackWebhookCopied":"URL del webhook copiada","slackStep1":"Crea una aplicación Slack en api.slack.com/apps e instálala en tu workspace.","slackStep2":"Copia el token del bot (xoxb-…) y el secreto de firma en el vault de EDDI y configura los canales abajo.","slackStep3":"Luego activa Event Subscriptions en tu aplicación Slack, pega la URL del webhook arriba y suscríbete a:","slackSetupNote":"Importante: Configura el canal abajo antes de activar Event Subscriptions — Slack envía un desafío de verificación de URL que requiere que el secreto de firma esté configurado en EDDI.","slackRequiredScopes":"Permisos requeridos para el token del bot","hitlConfig":"Human-in-the-Loop","hitlConfigDesc":"Cuando este agente pausa una conversación para aprobación humana, estos ajustes controlan cuánto esperar y qué ocurre si no se decide a tiempo.","hitlEnable":"Configurar tiempos de espera de aprobación humana","hitlTimeoutPolicy":"Si no hay decisión a tiempo","hitlApprovalTimeout":"Tiempo de espera de aprobación (ISO-8601)","hitlTimeoutInvalid":"Una política finita necesita una duración ISO-8601 positiva, p. ej. PT15M.","hitlTimeoutHint":"p. ej. PT30S, PT15M, PT2H.","hitlPauseReason":"Motivo de aprobación (visible para los aprobadores)","hitlPauseReasonPlaceholder":"p. ej. La eliminación requiere aprobación del gerente","toolApprovalsEnable":"Controlar la aprobación de llamadas de herramienta específicas","toolApprovalsDesc":"Pausa cuando el modelo invoca una herramienta coincidente, antes de ejecutarla. Una lista de \\"requerir aprobación\\" vacía desactiva el control de herramientas.","toolRequireApproval":"Requerir aprobación (patrones glob, uno por línea)","toolPatternHint":"'*' es el único comodín. Prefijo de origen opcional:","toolExempt":"Exentas (siempre permitidas, una por línea)","toolMaxPauses":"Máx. pausas / turno (1–10)","toolMaxAuto":"Máx. aprobaciones automáticas / turno (0–10)","toolOnNoProgress":"Al repausar sin progreso","toolTimeoutPolicy":"Política de tiempo de espera de pausa de herramienta","toolTimeoutInherit":"Heredar del agente","toolAutoApproveDemotion":"El AUTO_APPROVE a nivel de agente no se aplica a las aprobaciones de herramienta — las pausas de herramienta esperarán indefinidamente a menos que establezcas arriba una política de tiempo de espera de pausa de herramienta.","toolPauseReason":"Motivo del aprobador ({toolNames} permitido)","toolPauseReasonPlaceholder":"p. ej. Se requiere aprobación para {toolNames}","toolPendingMessage":"Mensaje al usuario durante la pausa ({toolNames} permitido)","toolPendingMessagePlaceholder":"p. ej. Esperando a que una persona apruebe {toolNames}…","toolInGroupTurns":"Dentro de un turno de grupo, la llamada de herramienta controlada de un miembro se rechaza automáticamente (REJECT)."}`),d={title:"Asistente de Agent"},u={baseUrlHintCloud:"Solo es necesario si usa un proxy, un despliegue privado o un endpoint de Azure OpenAI",baseUrlHintLocal:"Obligatorio — la URL donde se ejecuta su servidor de modelos local",modelHint:"Escriba cualquier nombre de modelo compatible con su proveedor, o elija uno de las sugerencias",modelPlaceholder:"p. ej. {{model}} (o cualquier modelo que admita su proveedor)",title:"Asistente de creación de agent",subtitle:"Cree un agent completamente configurado en minutos",backToAgents:"Volver a Agents",next:"Siguiente",back:"Atrás",createOnly:"Solo crear",createAndDeploy:"Crear y desplegar",typeTitle:"¿Qué tipo de agent?",typeDesc:"Elija el tipo de agent que desea crear",standardAgent:"Agente estándar",apiAgent:"Agente API",standardDesc:"IA conversacional con LLM, herramientas opcionales, Quick Replies y análisis de sentimiento",apiDesc:"Importe una especificación OpenAPI/Swagger para generar automáticamente un agent API",infoTitle:"Identidad del agent",infoDesc:"Dé un nombre y personalidad a su agent",agentName:"Nombre del agent",namePlaceholder:"ej. Bot de atención al cliente",systemPrompt:"Prompt del sistema",promptPlaceholder:"Eres un asistente de IA útil que...",promptHint:"Esta instrucción define cómo se comporta y responde su agent.",llmTitle:"Configuración LLM",llmDesc:"Elija el modelo de IA que impulsa su agent",provider:"Proveedor",model:"Modelo",apiKey:"Clave API",baseUrl:"URL base",baseUrlPlaceholder:"URL de endpoint personalizado",optional:"opcional",apiSpecTitle:"Especificación OpenAPI",apiSpecDesc:"Proporcione la especificación OpenAPI/Swagger de su API",specByUrl:"URL",specByFile:"Archivo",specByPaste:"Pegar",fetch:"Obtener",specFetched:"¡Especificación cargada!",specFetchError:"Error al obtener la especificación",dropFile:"Arrastre su archivo OpenAPI aquí",dropHint:"Formato JSON o YAML",browse:"Buscar archivos",pasteSpec:"Pegue su JSON o YAML OpenAPI/Swagger aquí...",specLoaded:"Archivo cargado: {{name}}",specReady:"Especificación cargada ({{chars}} caracteres)",apiBaseUrlLabel:"URL base de la API",apiAuthLabel:"Cabecera de autenticación API",endpointFilter:"Filtro de endpoints",endpointFilterPlaceholder:"Separados por comas: GET /users, POST /orders",featuresTitle:"Funciones y opciones",featuresDesc:"Personalice las capacidades de su agent",introMessage:"Mensaje de bienvenida",introMessageDesc:"Mensaje mostrado al inicio de una conversación",quickReplies:"Respuestas rápidas",quickRepliesDesc:"El LLM genera sugerencias de respuestas clicables",sentiment:"Análisis de sentimiento",sentimentDesc:"Detectar el ánimo, intención y urgencia del usuario en tiempo real",structuredOutput:"Salida estructurada",structuredOutputDesc:"El LLM responde con un objeto JSON en lugar de texto plano",structuredOutputInfo:"Al activar esto, el LLM responde con un objeto JSON con campos estructurados. Se añade un esquema JSON al prompt del sistema y el modelo se configura en modo de respuesta JSON.",builtInTools:"Herramientas integradas",builtInToolsDesc:"Activar la biblioteca de herramientas integradas de EDDI (calculadora, fecha/hora, etc.)",toolsWhitelist:"Whitelist (vacío = todas)",mcpServers:"Servidores MCP",mcpServersDesc:"Servidores Model Context Protocol para herramientas externas",autoDeploy:"Despliegue automático",autoDeployDesc:"Desplegar el agent inmediatamente después de crearlo",environment:"Entorno",envProduction:"Producción",envTest:"Prueba",reviewTitle:"Revisar y crear",reviewDesc:"Revise su configuración antes de crear",reviewType:"Tipo",reviewName:"Nombre",reviewPrompt:"Prompt del sistema",reviewProvider:"Proveedor",reviewModel:"Modelo",reviewSpec:"Espec. OpenAPI",reviewIntro:"Mensaje de bienvenida",reviewDeploy:"Desplegar",success:"¡Agent creado con éxito!",agentCreated:"¡Agent creado!",deployed:"Desplegado",endpointsParsed:"{{count}} endpoints API analizados",viewAgent:"Ver agent",createAnother:"Crear otro",allTools:"Todas las herramientas",selectSpecific:"Selección manual",allToolsInfo:"Las {{count}} herramientas integradas estarán disponibles para su agente. Elija «Selección manual» para limitar las herramientas activas.",availableTools:"Herramientas disponibles",toolCount:"{{selected}} de {{total}} seleccionadas",specTooLarge:"Esta especificación es demasiado grande para cargarla aquí",specUrlInvalid:"Esa no es una URL válida",specUrlScheme:"Solo se admiten URL http:// y https://"},p={confirmDeleteDescription:"Esta acción no se puede deshacer. El workflow y todos sus datos se eliminarán permanentemente.",createSuccess:"Workflow creado con éxito",unnamed:"Workflow sin nombre",createWorkflow:"Crear workflow",createTitle:"Crear nuevo workflow",name:"Nombre",namePlaceholder:"Mi Workflow",description:"Descripción",descriptionPlaceholder:"Describa qué hace este workflow...",noDescription:"Sin descripción",empty:"Aún no hay workflows. ¡Cree su primer workflow!",confirmDelete:"¿Está seguro de que desea eliminar este workflow?",count_one:"{{count}} flujo de trabajo",count_other:"{{count}} flujos de trabajo",emptyDescription:"Los workflows definen el pipeline de procesamiento de sus agentes.",count_many:"{{count}} flujos de trabajo"},m={backToAgent:"Volver al agente",title:"Detalles del workflow",backToWorkflows:"Volver a Workflows",extensions:"Extensiones",noExtensions:"No hay extensiones en este workflow",rawConfig:"Configuración sin procesar"},g={chooseConfig:"Elegir configuración",chooseConfigHint:"Cree una nueva configuración o vincule una existente",configCreated:"Configuración creada — añadida al pipeline",createNewConfig:"Crear nueva configuración",createNewConfigHint:"Crea una configuración vacía que puede editar más tarde",noExistingConfigs:"No se encontraron configuraciones existentes — cree una nueva arriba",orExisting:"o usar una existente",updateToLatest:"Actualizar a la última versión",title:"Editor de workflow",pipeline:"Pipeline de extensiones",addHint:"Añada extensiones para construir su pipeline",addHintDialog:"Seleccione un tipo de extensión para añadir",reorder:"Reordenar extensión",saved:"Workflow guardado con éxito",saveError:"Error al guardar el workflow",noTasks:"No hay tareas en este workflow",addTask:"Añadir tarea"},v={confirmDeleteSoft:"De forma predeterminada, es un borrado lógico: la conversación se oculta de las listas, pero sus datos se conservan en el servidor.",deletePermanentLabel:"Eliminar permanentemente — también borra los adjuntos, la instantánea de memoria y el historial de aprobaciones. No se puede deshacer.",monitorSubtitle:"Supervise y gestione en masa las conversaciones en curso por agente.",noActiveDesc:"Esta versión del agente no tiene conversaciones en curso en este momento.",purgeDesc:"Eliminar permanentemente las conversaciones FINALIZADAS cuya última actividad sea anterior al número de días indicado.",selectAgentPromptDesc:"Las conversaciones activas se listan por agente y versión.",searchPlaceholder:"Buscar por ID de conversación...",id:"Conversación",agent:"Agente",state:"Estado",lastActivity:"Última actividad",actions:"Acciones",empty:"Aún no hay conversaciones. ¡Despliegue un agent y comience a chatear!",confirmDelete:"¿Está seguro de que desea eliminar esta conversación?",count_one:"{{count}} conversación",count_other:"{{count}} conversaciones",emptyDescription:"Despliegue un agente e inicie una conversación desde la página Chat.",filterAll:"Todas",stateActive:"Activa",stateInProgress:"En curso",stateEnded:"Finalizada",stateInterrupted:"Interrumpida",permanentDeleteSuccess:"Eliminado permanentemente",softDeleteSuccess:"Conversación eliminada",monitorActive:"Monitorear activas",filterByAgent:"Filtrar por agente",filterByVersion:"Filtrar por versión de agente",allVersions:"Todas las versiones",version:"v{{version}}",showingRange:"Mostrando {{from}}–{{to}}",deleteConversation:"Eliminar conversación",steps:"Pasos",perPage:"Por página",pageNumber:"Página {{page}}",deletePermanentAction:"Eliminar permanentemente",step:"paso",monitorTitle:"Conversaciones activas",backToList:"Volver a conversaciones",selectAgentToMonitor:"Seleccionar un agente",selectedCount:"{{count}} seleccionada(s)",endSelected:"Finalizar seleccionadas",selectAgentPrompt:"Seleccione un agente para monitorear",noActive:"Sin conversaciones activas",selectAll:"Seleccionar todo",selectOne:"Seleccionar {{id}}",purgeTitle:"Purgar conversaciones finalizadas",olderThanDays:"Más antiguas que (días)",purgeAction:"Purgar",confirmEndTitle:"¿Finalizar las conversaciones seleccionadas?",confirmPurgeTitle:"¿Purgar conversaciones finalizadas?",count_many:"{{count}} conversaciones",confirmEndDesc_many:"{{count}} conversaciónes se marcarán como FINALIZADAS. Las conversaciones en pausa (Esperando humano) se finalizan de forma segura a través de la ruta con reconocimiento de aprobaciones.",confirmEndDesc_one:"{{count}} conversación se marcarán como FINALIZADAS. Las conversaciones en pausa (Esperando humano) se finalizan de forma segura a través de la ruta con reconocimiento de aprobaciones.",confirmEndDesc_other:"{{count}} conversaciónes se marcarán como FINALIZADAS. Las conversaciones en pausa (Esperando humano) se finalizan de forma segura a través de la ruta con reconocimiento de aprobaciones.",confirmPurgeDesc_many:"Esto elimina permanentemente las conversaciones FINALIZADAS de más de {{days}} días, incluida su memoria almacenada y sus adjuntos. No se puede deshacer.",confirmPurgeDesc_one:"Esto elimina permanentemente las conversaciones FINALIZADAS de más de {{days}} día, incluida su memoria almacenada y sus adjuntos. No se puede deshacer.",confirmPurgeDesc_other:"Esto elimina permanentemente las conversaciones FINALIZADAS de más de {{days}} días, incluida su memoria almacenada y sus adjuntos. No se puede deshacer.",pausedNote_many:"{{count}} de las conversaciones seleccionadas están Esperando humano y se cancelará su aprobación pendiente.",pausedNote_one:"{{count}} de las conversaciones seleccionadas está Esperando humano y se cancelará su aprobación pendiente.",pausedNote_other:"{{count}} de las conversaciones seleccionadas están Esperando humano y se cancelará su aprobación pendiente.",endSuccess_many:"{{count}} conversaciónes finalizadas",endSuccess_one:"{{count}} conversación finalizada",endSuccess_other:"{{count}} conversaciónes finalizadas",purgeSuccess_many:"{{count}} conversaciónes finalizadas purgadas",purgeSuccess_one:"{{count}} conversación finalizada purgada",purgeSuccess_other:"{{count}} conversaciónes finalizadas purgadas"},b={backToConversations:"Volver a conversaciones",chatLog:"Registro del chat",noSteps:"No se registraron pasos de la conversación",properties:"Propiedades de la conversación",rawData:"Ver datos sin procesar",step:"Paso",steps:"pasos",title:"Conversación",continueChat:"Continuar en el chat",searchTranscript:"Buscar en la conversación…",exportMd:"Exportar como Markdown",toolSummary:"Uso de herramientas",totalCost:"Coste total",cacheHitRate:"Tasa de acierto de caché"},h={hide:"Ocultar",secretModeOff:"Alternar modo secreto",secretModeOn:"Modo secreto ACTIVADO",secretPlaceholder:"Introduzca el valor secreto...",show:"Mostrar",selectAgent:"Seleccione un agent...",noAgents:"No hay agents desplegados disponibles. Despliegue un agent primero.",placeholder:"Escriba un mensaje...",send:"Enviar",newConversation:"Nueva conversación",endConversation:"Finalizar conversación",streaming:"Streaming",thinking:"Pensando...",usingTools:"Usando herramientas",connectionError:"Error de conexión. Intente de nuevo.",empty:"¡Seleccione un agent y comience a chatear!",history:"Historial",undo:"Deshacer último mensaje",redo:"Rehacer mensaje",continueConversation:"Continuar",noHistory:"Sin historial de conversaciones.",attach:"Adjuntar archivo",attachUploading:"Subiendo...",attachSuccess:"Archivo adjuntado",attachError:"Error al subir archivo",attachLimit:"Puedes adjuntar hasta {{max}} archivos por mensaje.",attachTooLargeToForward:"{{name}} se ha guardado, pero es demasiado grande para enviarlo al modelo de forma directa.",attachNotForwarded:"No enviado al modelo",dropToAttach:"Suelta archivos para adjuntarlos",stepFailedFallback:"Este paso falló. El registro del servidor contiene el error completo.",retry:"Reintentar último paso",retrySuccess:"Paso re-ejecutado",retryError:"Reintento fallido",showActivity:"Mostrar actividad",hideActivity:"Ocultar actividad",scrollToBottom:"Ir al final",copyMessage:"Copiar mensaje",copied:"¡Copiado!",activity:{processing:"Procesando…",steps:"pasos",toolCalls:"llamadas a herramientas",toolCall:"Llamada a herramienta",toolResult:"Resultado",error:"Se produjo un error",toolCallsCount_one:"{{count}} llamada a herramienta",stepsCount:"{{count}} pasos",stepsCount_one:"{{count}} paso",stepsCount_many:"{{count}} pasos",stepsCount_other:"{{count}} pasos",toolCallsCount_many:"{{count}} llamadas a herramientas",toolCallsCount_other:"{{count}} llamadas a herramientas",toolCallsCount:"{{count}} llamadas a herramientas",usingTool:"Usando {{tool}}…"},context:{conversationId:"ID de conversación",agentVersion:"Versión del agente",startTime:"Inicio",stepCount:"Pasos",show:"Mostrar info de la conversación",hide:"Ocultar info de la conversación"},agentTyping:"El agente está escribiendo",copy:"Copiar",emptyConversation:"Esta conversación aún no tiene mensajes.",loadConversationFailed:"No se pudo cargar esta conversación: {{error}}",multilineHint:"Enter para enviar · Shift+Enter para nueva línea",multilineHintCtrlEnter:"Ctrl+Enter para enviar · Enter para nueva línea",toolRefused:"Rechazado"},f={backToWorkflow:"Volver al workflow",confirmDeleteDescription:"Esta acción no se puede deshacer. El/La {{type}} se eliminará permanentemente.",createSuccess:"{{type}} creado con éxito",snippetNameInvalid:"Solo se permiten letras minúsculas (a-z), dígitos (0-9) y guiones bajos (_).",snippetNameRequired:"El nombre del fragmento es obligatorio.",unnamed:"Recurso sin nombre",noDescription:"Sin descripción",backToResources:"Volver a Recursos",backToList:"Volver a {{type}}",unknownType:"Tipo de recurso desconocido",rawConfig:"Configuración sin procesar",rawConfigHint:"Configuración JSON de este recurso",create:"Crear {{type}}",createTitle:"Crear {{type}}",createDescription:"Crear una configuración {{type}} vacía. Puede editarla después.",confirmDelete:"¿Está seguro de que desea eliminar este/a {{type}}?",empty:"Aún no hay recursos {{type}}.",itemCount_one:"{{count}} elemento",itemCount_other:"{{count}} elementos",count_one:"{{count}} recurso",count_other:"{{count}} recursos",types:{rules:{name:"Reglas de comportamiento",description:"Definir reglas de flujo de conversación y lógica de decisión"},apicalls:{name:"Llamadas HTTP",description:"Configurar integraciones de API externas y webhooks"},output:{name:"Conjuntos de salida",description:"Gestionar plantillas de respuesta y variantes de salida"},dictionary:{name:"Diccionarios",description:"Definir patrones de reconocimiento de palabras y frases"},llm:{name:"LLM",description:"Configurar modelos de IA, prompts y enlaces de herramientas"},propertysetter:{name:"Definidor de propiedades",description:"Configurar propiedades de conversación y gestionar slots"},mcpcalls:{name:"Llamadas MCP",description:"Configurar conexiones MCP y llamadas de herramientas deterministas"},rag:{name:"Bases de conocimiento",description:"Configurar bases de conocimiento RAG para recuperación de documentos"},snippets:{name:"Fragmentos de prompt",description:"Bloques reutilizables para la composicion de prompts del sistema"},parser:{name:"Analizadores",description:"Análisis NLP de entradas y configuración de diccionarios"}},emptyDescription:"Cree su primer(a) {{type}} para usarlo en workflows.",itemCount_many:"{{count}} elementos",count_many:"{{count}} recursos",descriptionPlaceholder:"Describe esta configuración de {{type}}…"},y={compare:"Comparar",compareVersions:"Comparar versiones",deployFailed:"Error en el despliegue",deploying:"Desplegando…",diffHint:"Las adiciones se muestran en verde y las eliminaciones en rojo. Izquierda = más antiguo, Derecha = más reciente.",discardAndLeave:"Descartar y salir",discardMessage:"¿Seguro que desea descartar todos los cambios sin guardar? Esta acción no se puede deshacer.",discardTitle:"¿Descartar cambios?",newerVersion:"Más reciente",olderVersion:"Más antiguo",saveAndTest:"Guardar y probar",swapVersions:"Intercambiar versiones",unsavedMessage:"Tiene cambios sin guardar que se perderán. ¿Seguro que desea continuar?",unsavedTitle:"Cambios sin guardar",formTab:"Formulario",jsonTab:"JSON",save:"Guardar",discard:"Descartar",saving:"Guardando...",saved:"Guardado correctamente",saveError:"Error al guardar",dirty:"Cambios sin guardar",version:"Versión",versionPicker:"Seleccionar versión",readOnly:"Solo lectura",formPlaceholder:"Editor visual próximamente. Use la pestaña JSON para editar.",jsonSchema:"Validación de esquema activa",cascadeMode:"Los cambios se propagarán al workflow y agent padre",updateUsageHint:"¿Actualizar los workflows y agents seleccionados a la nueva versión?",updateUsage:"Actualizar seleccionados",skipUpdate:"Omitir",cascading:"Actualizando...",cascadeSuccess:"Actualización en cascada completada",invalidJson:"JSON no válido — cambie a la pestaña JSON para corregir.",cascadePartialFailure_many:"{{count}} actualizaciónes en cascada fallaron",cascadePartialFailure_one:"{{count}} actualización en cascada fallaron",cascadePartialFailure_other:"{{count}} actualizaciónes en cascada fallaron",usedInAgents_many:"Usado en {{count}} agents",usedInAgents_one:"Usado en {{count}} agent",usedInAgents_other:"Usado en {{count}} agents"},A={condCapabilityMatch:"capabilityMatch",condDeploymentContext:"deploymentContext",strategy_executeAll:"Ejecutar todas",strategy_executeUntilFirstSuccess:"Hasta el primer acierto",invalidValue:"(no válido)",appendActions:"Añadir acciones",expressionsAsActions:"Expresiones como acciones",groups:"Grupos de comportamiento",addGroup:"Añadir grupo",groupName:"Nombre del grupo",executionStrategy:"Estrategia de ejecución",rules:"Reglas",addRule:"Añadir regla",ruleName:"Nombre de regla",actions:"Acciones",noActions:"Sin acciones",addAction:"Añadir",actionPlaceholder:"ej. greet, get_weather",conditions:"Condiciones",addCondition:"Añadir condición",conditionType:"Tipo de condición",nestedConditions:"Condiciones anidadas",configKey:"Clave",configValue:"Valor",addConfig:"Añadir config",removeRule:"Eliminar regla",removeGroup:"Eliminar grupo",removeCondition:"Eliminar condición",noGroups:"No hay grupos de comportamiento definidos",noRules:"No hay reglas en este grupo",noConditions:"Sin condiciones"},E={noEndpointsFound:"No se encontraron endpoints en la especificación",specUrlPlaceholder:"https://api.example.com/openapi.json",targetServerUrl:"URL del servidor destino",targetServerUrlPlaceholder:"https://api.example.com",calls:"Llamadas HTTP",addCall:"Añadir llamada HTTP",callName:"Nombre de llamada",callDescription:"Descripción",descriptionPlaceholder:"Descripción en lenguaje natural para agents LLM",request:"Solicitud",method:"Método",path:"Ruta",pathPlaceholder:"/api/endpoint",headers:"Cabeceras",addHeader:"Añadir header",queryParams:"Parámetros de consulta",addQueryParam:"Añadir parámetro",contentType:"Tipo de contenido",body:"Cuerpo de la solicitud",bodyPlaceholder:"Plantilla de cuerpo JSON...",parameters:"Parámetros (para agents LLM)",paramName:"Nombre del parámetro",paramDescription:"Descripción",addParam:"Añadir parámetro",options:"Opciones",saveResponse:"Guardar respuesta",responseObjectName:"Nombre del objeto respuesta",responseHeaderObjectName:"Nombre del objeto header respuesta",fireAndForget:"Enviar y olvidar",batchCalls:"Llamadas en lote",iterationObjectName:"Nombre del objeto iteración",prePostInstructions:"Instrucciones pre/post",preRequest:"Pre-petición",postResponse:"Post-respuesta",removeCall:"Eliminar llamada",noCalls:"No hay llamadas HTTP configuradas",actions:"Acciones desencadenantes",noActions:"Sin acciones",actionPlaceholder:"ej. get_weather",addHttpCodeValidator:"Añadir filtro de código HTTP",httpCodeFilter:"Filtro de código HTTP",runOnCodes:"Ejecutar en códigos",skipOnCodes:"Omitir en códigos",propName:"Nombre de propiedad",propValue:"Valor o plantilla",overrideTitle:"Sobrescribir el valor existente",override:"Sobrescribir",advancedMapping:"Mapeo de ruta de objeto",fromPath:"Desde la ruta de objeto",toPath:"Hacia la ruta de objeto",convertToObject:"Convertir a objeto",runOnValidationError:"Ejecutar en error de validación",noPropertyInstructions:"Sin instrucciones de propiedad",addPropertyInstruction:"Añadir instrucción de propiedad",pathToTargetArray:"Ruta al array de destino",iterationObjName:"Objeto de iteración",templateFilter:"Expresión de filtro",filterPlaceholder:"Filtro opcional...",outputType:"Tipo de salida",outputValue:"Valor de salida",noOutputInstructions:"Sin instrucciones de construcción de salida",addOutputInstruction:"Añadir instrucción de salida",qrValue:"Valor de respuesta rápida",qrExpressions:"Expresiones de respuesta rápida",noQrInstructions:"Sin instrucciones de construcción de respuesta rápida",addQrInstruction:"Añadir instrucción de respuesta rápida",noRetryPolicy:"Sin política de reintentos",addRetryPolicy:"Añadir política de reintentos",maxRetries:"Reintentos máx.",backoffDelayMs:"Retardo de backoff (ms)",retryOnHttpCodes:"Reintentar en códigos HTTP",valuePathMatchers:"Coincidencias de ruta de valor",noValuePathMatchers:"Sin coincidencias de ruta de valor",valuePath:"Ruta de valor",contains:"contiene",equals:"igual a",trueIfNoMatch:"Reintentar si no hay coincidencia",addValuePathMatcher:"Añadir coincidencia de ruta de valor",removeRetryPolicy:"Eliminar política de reintentos",delayMs:"Retardo (ms)",propertyInstructions:"Instrucciones de propiedad",outputBuildInstructions:"Instrucciones de construcción de salida",qrBuildInstructions:"Instrucciones de construcción de respuesta rápida",retryBackoff:"Reintento y backoff",discoveredEndpoints:"Endpoints descubiertos",discoveryError:"No se pudo analizar la especificación OpenAPI",openApiSpecUrl:"Importar desde especificación OpenAPI",invalidUrl:"Ingrese una URL http:// o https:// válida",discovering:"Analizando…",discoverEndpoints:"Descubrir endpoints",retry:"Reintentar",selectedCount:"seleccionado(s)",importAppend:"Añadir a las llamadas",importReplace:"Reemplazar todas las llamadas",confirmReplace:"Sí, reemplazar todo",replaceConfirmMessage:"Esto reemplazará {{count}} llamada(s) existente(s). ¿Estás seguro?"},C={continueOnErrorHint:"En caso de fallo, el pipeline continúa; el error se expone en ",descriptionPlaceholder:"Descripción en lenguaje natural para agents LLM",governanceHint:"Controle qué herramientas se exponen. Lista blanca = solo estas; Lista negra = excluir estas.",pipelineHint:"Llamadas de herramienta deterministas activadas por acciones (modo pipeline).",responseObjectName:"Nombre del objeto respuesta",discoveredTools:"Herramientas disponibles",whitelisted:"En lista blanca",addToWhitelist:"Añadir a la lista blanca",addWhitelist:"Lista blanca",blacklisted:"En lista negra",addToBlacklist:"Añadir a la lista negra",addBlacklist:"Lista negra",noRetryPolicy:"Sin política de reintentos",addRetryPolicy:"Añadir política de reintentos",maxAttempts:"Intentos máx.",backoffDelayMs:"Retardo de backoff (ms)",backoffMultiplier:"Multiplicador de backoff",maxBackoffDelayMs:"Backoff máx. (ms)",removeRetryPolicy:"Eliminar política de reintentos",callName:"Nombre de la llamada",removeCall:"Eliminar llamada",description:"Descripción",toolName:"Nombre de la herramienta",parameterSchema:"Esquema de parámetros",triggerActions:"Acciones desencadenantes",toolArguments:"Argumentos de la herramienta",addArgument:"Añadir argumento",saveResponse:"Guardar respuesta",continueOnError:"Continuar en caso de error",retryBackoff:"Reintento y backoff",preRequest:"Pre-petición",propertyInstructions:"Instrucciones de propiedad",postResponse:"Post-respuesta",outputBuildInstructions:"Instrucciones de construcción de salida",qrBuildInstructions:"Instrucciones de construcción de respuesta rápida",discoveryError:"No se pudo conectar al servidor MCP",serverConnection:"Conexión al servidor",displayName:"Nombre visible",serverUrl:"URL del servidor MCP",discovering:"Conectando…",discoverTools:"Descubrir herramientas",transport:"Transporte",timeoutMs:"Tiempo de espera (ms)",apiKey:"Clave API / referencia Vault",toolGovernance:"Gobernanza de herramientas",retry:"Reintentar",noToolsFound:"No se encontraron herramientas en este servidor",whitelist:"Lista blanca (solo permitir)",blacklist:"Lista negra (excluir)",pipelineCalls:"Llamadas de pipeline",addCall:"Añadir llamada MCP"},D=JSON.parse('{"addCustomInstruction":"Añadir instrucción","addKnowledgeBase":"Añadir referencia de KB","addMaskingRule":"Añadir regla","addToolLimit":"Añadir límite de herramienta","anchorFirstSteps":"Anclar los primeros pasos","anchorFirstStepsHint":"Los turnos iniciales siempre se conservan (0 = ninguno)","conversationMemory":"Memoria de conversación","conversationMemoryDesc":"Los turnos más antiguos se comprimen incrementalmente en un resumen continuo. El LLM ve: [prompt del sistema + resumen] + [los últimos N turnos textuales]. Una herramienta integrada conversationRecall permite al agente profundizar en los turnos resumidos cuando lo necesite.","counterweight":"Contrapesos de comportamiento","counterweightCustom":"Instrucciones personalizadas","counterweightCustomHint":"Deje vacío para usar el ajuste predefinido integrado del nivel seleccionado.","counterweightCustomOverride":"Las instrucciones personalizadas sustituyen por completo el texto predefinido del nivel.","counterweightDesc":"Inyecta instrucciones de seguridad en el prompt del sistema. Protege frente al exceso de confianza, las alucinaciones y la acción sin supervisión.","counterweightLevel":"Nivel de seguridad","counterweightLevelCautious":"Cauteloso","counterweightLevelNormal":"Normal (sin inyección)","counterweightLevelStrict":"Estricto","counterweightPlacement":"Ubicación","counterweightPlacementPrefix":"Antes del prompt del sistema","counterweightPlacementSuffix":"Después del prompt del sistema","counterweightStrictNote":"El modo estricto se reduce automáticamente a Cauteloso durante la ejecución programada o por lotes para evitar el comportamiento destructivo de \\"un paso a la vez\\".","defaultMaxChars":"Máx. caracteres predeterminado","defaultMaxCharsHint":"(~12k tokens con 50000)","enableSummary":"Activar resumen continuo","enableWorkflowRag":"Descubrir automáticamente el RAG del workflow","excludeProps":"Excluir propiedades del resumen","excludePropsDesc":"Omitir los hechos ya capturados como propiedades persistentes — centrarse en el razonamiento y el contexto implícito","httpCallRag":"RAG con httpCall (sin infraestructura)","httpCallRagHint":"Ejecuta un httpCall con nombre antes de la llamada al LLM. La respuesta se inyecta como contexto — no se necesita almacén vectorial.","httpCallRagPlaceholder":"p. ej. search_docs, query_wiki","identityMasking":"Enmascaramiento de identidad","identityMaskingDesc":"Impide que el LLM revele el nombre de su modelo o su proveedor cuando se le interroga.","identityMaskingEmptyWarning":"El enmascaramiento está activado pero no tiene reglas. Añada al menos una regla para que surta efecto.","identityMaskingRulePlaceholder":"p. ej. Nunca reveles que eres un modelo de lenguaje de IA","identityMaskingRules":"Reglas de enmascaramiento","identityMaskingRulesHint":"Para que el enmascaramiento surta efecto se requiere que esté activado Y al menos una regla.","injectionStrategy":"Inyección","kbNamePlaceholder":"p. ej. product-docs","knowledgeBases":"Bases de conocimiento","knowledgeBasesHint":"Referencie bases de conocimiento explícitamente por su nombre. Cada nombre debe coincidir con una RagConfiguration del workflow.","legacyRag":"RAG heredado (obsoleto)","legacyRagHint":"Esta configuración usa el formato retrievalAugmentor obsoleto. Migre a los modos anteriores.","maxContextTokens":"Máx. tokens de contexto","maxContextTokensHint":"-1 = usar el recuento de pasos en su lugar","maxRecallHint":"Por invocación de recuperación","maxRecallTurns":"Máx. turnos de recuperación","maxSummaryTokens":"Máx. tokens de resumen","noKnowledgeBases":"No hay bases de conocimiento referenciadas","perToolLimits":"Anulaciones por herramienta","prePostDesc":"Configure las instrucciones de propiedades que se ejecutan antes de cada solicitud al LLM y las instrucciones de salida/propiedades que se ejecutan después de cada respuesta.","promptSafety":"Seguridad del prompt","ragDefaults":"Parámetros de recuperación predeterminados","recentWindow":"Ventana reciente (pasos)","recentWindowHint":"Turnos conservados textualmente","removeLegacyRag":"Eliminar configuración heredada","strategyPaginate":"Paginar (el LLM obtiene más)","strategySummarize":"Resumir (mediante modelo económico)","strategyTruncate":"Truncar (corte estricto)","summarizationPrompt":"Prompt de resumen personalizado (opcional)","summarizationPromptPlaceholder":"Deje vacío para usar el prompt estructurado predeterminado que conserva objetivos, decisiones, razonamiento y tono.","summarizeInfoBanner":"El resumidor usa el mismo proveedor y clave API que esta tarea. Solo se cambia el nombre del modelo por una variante más económica (p. ej., gpt-4o-mini).","summarizerModel":"Modelo de resumen","summarizerModelHint":"(recurre a truncar si está vacío)","summarizerModelPlaceholder":"p. ej. gpt-4o-mini","summaryModel":"Modelo del resumen","summaryProvider":"Proveedor del resumen","summaryProviderHint":"Use un modelo económico/rápido para el resumen","tokenWindow":"Ventana de contexto según tokens","tokenWindowDesc":"Sustituye el historial basado en el recuento de pasos por un empaquetado según tokens. Cuando maxContextTokens está definido (> 0), el motor ajusta tantos turnos recientes como sea posible dentro del presupuesto, anclando opcionalmente los turnos iniciales.","toolResponseLimits":"Límites de respuesta de herramientas","toolResponseLimitsDesc":"Trunca las salidas de herramientas verbosas antes de reinyectarlas en la ventana de contexto del LLM. Evita la sobrecarga del contexto.","truncationStrategy":"Estrategia","workflowRagHint":"Descubre automáticamente todos los pasos RAG del workflow. Solo se usa cuando no hay bases de conocimiento explícitas listadas arriba.","tasks":"Tareas LLM","addTask":"Añadir tarea","noTasks":"No hay tareas LangChain configuradas","removeTask":"Eliminar tarea","taskId":"ID de tarea","description":"Descripción","descriptionPlaceholder":"Qué hace esta tarea","triggerActions":"Acciones desencadenantes","noActions":"Sin acciones","actionPlaceholder":"ej. help, chat","systemPrompt":"Prompt del sistema","systemPromptPlaceholder":"Eres un asistente útil...","modelParams":"Parámetros del modelo","addParam":"Añadir parámetro","agentMode":"Modo agente","enableBuiltInTools":"Activar herramientas integradas","toolWhitelist":"Whitelist de herramientas (vacío = todas)","enableHttpCallTools":"Auto-descubrimiento de herramientas HTTP Call","enableHttpCallToolsDesc":"Exponer automáticamente todas las extensiones httpcall del workflow como herramientas LLM","httpCallTools":"URIs de herramientas HTTP","httpCallToolsHint":"URIs httpcall explícitas (además de las auto-descubiertas)","addTool":"Añadir URI de herramienta","mcpServers":"Servidores MCP","mcpServersDesc":"Servidores MCP externos cuyas herramientas estarán disponibles para el LLM","addMcpServer":"Añadir servidor MCP","mcpUrlPlaceholder":"http://localhost:7070/mcp","mcpName":"Nombre","mcpApiKey":"API Key / ref. vault","historyLimit":"Límite de historial","historyLimitHint":"(-1 = ilimitado)","budgetPerf":"Presupuesto y rendimiento","maxBudget":"Presupuesto máx. ($)","costTracking":"Seguimiento de costes","toolCaching":"Caché de herramientas","rateLimiting":"Límite de tasa","defaultRate":"Tasa predeterminada (pet./min.)","prePostInstructions":"Instrucciones pre/post","preRequest":"Pre-petición","postResponse":"Post-respuesta","enableMcpCallTools":"Descubrimiento automático de herramientas MCP","enableMcpCallToolsDesc":"Expone automáticamente todas las extensiones mcpcalls del flujo como herramientas LLM","a2aAgents":"Agentes A2A","a2aAgentsDesc":"Agentes remotos compatibles con A2A cuyas habilidades se convierten en herramientas LLM","addA2aAgent":"Añadir agente A2A","a2aUrlPlaceholder":"https://remote.example.com/a2a/agents/...","a2aName":"Nombre visible","a2aApiKey":"${vault:my-a2a-key}","a2aTimeout":"Tiempo límite (ms)","a2aSkillsFilter":"Filtro de habilidades (vacío = todas)","cascade":"Cascada de modelos","cascadeDesc":"Try a cheap/fast model first. If confidence is too low, automatically escalate to a more powerful (and expensive) model.","cascadeEnable":"Activar cascada de modelos","cascadeStrategy":"Estrategia","strategyCascade":"Escalado secuencial","strategyParallel":"Paralelo (futuro)","cascadeStrategyHint":"Empieza por el modelo más económico y escala si la confianza es baja","cascadeEvalStrategy":"Evaluación de confianza","cascadeEvalHint":"Cómo determinar si la respuesta es suficiente","evalStructured":"Salida estructurada (JSON)","evalHeuristic":"Heurística (detección de vacilación)","evalJudge":"Modelo juez (sub-LLM)","evalNone":"Ninguna (aceptar siempre)","cascadeInAgent":"Usar cascada también en modo agente (con herramientas)","cascadeSteps":"Cascade Steps","cascadeStepsDesc":"Order matters: first step tried first. Last step is always accepted.","cascadeModelName":"p. ej. claude-sonnet-5","cascadeConfidence":"Min. Confidence (0-1)","cascadeConfidencePlaceholder":"vacío = aceptar siempre","cascadeTimeout":"Tiempo límite (ms)","addCascadeStep":"Añadir paso de cascada","cascadeReturnBest":"Devolver la respuesta con mejor puntuación entre los pasos","cascadeEvalNoneHint":"La verificación de confianza está desactivada — siempre se acepta la respuesta del primer paso.","cascadeCeilings":"Límites y precios","cascadeMaxDuration":"Duración total máx. (ms)","cascadeMaxCost":"Coste máx. por ejecución ($)","cascadeUnlimited":"sin límite","cascadeInputPrice":"$ de entrada / 1M tokens","cascadeOutputPrice":"$ de salida / 1M tokens","cascadePricingHint":"El precio de tokens predeterminado alimenta el seguimiento de costes y el límite de coste. Cada paso puede sobrescribirlo.","cascadeJudgeModel":"Modelo juez","cascadeJudgeModelDesc":"Un modelo aparte (normalmente económico) que califica la confianza de cada respuesta.","cascadeJudgeApiKey":"Clave API del juez","cascadeHeuristic":"Ajuste heurístico","cascadeHeuristicDesc":"Sobrescrituras opcionales para la detección de vacilación/rechazo. Los campos vacíos usan los valores predeterminados integrados en inglés. Localice las listas de frases para despliegues en otros idiomas.","cascadeHeuristicDefaults":"Valores predeterminados integrados","cascadeHeuristicPhrasePlaceholder":"añadir una frase…","cascadeHeuristicPhrasesLow":"Frases de vacilación (confianza baja)","cascadeHeuristicPhrasesRefusal":"Frases de rechazo","cascadeHeuristicShortLen":"Longitud de respuesta corta","cascadeHeuristicShortScore":"Puntuación de respuesta corta","cascadeHeuristicRefusalScore":"Puntuación de rechazo","cascadeHeuristicHedgingScore":"Puntuación de vacilación","cascadeHeuristicDefaultScore":"Puntuación predeterminada","cascadeStepApiKey":"Clave API","cascadeStepApiKeyPlaceholder":"hereda la clave de la tarea si está vacío","cascadeCrossProvider":"entre proveedores","cascadeStepAdvanced":"Avanzado (precios y parámetros)","cascadeStepInputPrice":"$ de entrada / 1M","cascadeStepOutputPrice":"$ de salida / 1M","cascadeStepPriceInherit":"predeterminado de la cascada","cascadeStepParams":"Parámetros adicionales","cascadeStepAddParam":"Añadir parámetro","cascadeIssues":{"NO_STEPS":"La cascada está activada pero no tiene pasos — fallará al ejecutarse.","UNKNOWN_STRATEGY":"Estrategia desconocida \\"{{strategy}}\\" — la cascada se ejecutará secuencialmente.","PARALLEL_NOT_IMPLEMENTED":"La estrategia paralela aún no está implementada — los pasos se ejecutan secuencialmente.","UNKNOWN_EVAL_STRATEGY":"Evaluación de confianza desconocida \\"{{strategy}}\\" — se usará Salida estructurada por defecto.","JUDGE_MODEL_MISSING":"La evaluación con Modelo juez no tiene ningún juez configurado — la confianza recurre a la heurística.","JUDGE_CROSS_PROVIDER_NO_APIKEY":"El modelo juez usa un proveedor diferente pero no tiene clave API propia — heredaría la clave de la tarea.","MAX_DURATION_NONPOSITIVE":"La duración total máxima debe ser mayor que 0.","MAX_COST_NEGATIVE":"El coste máximo por ejecución no puede ser negativo.","CASCADE_INPUT_PRICE_NEGATIVE":"El precio de entrada de la cascada no puede ser negativo.","CASCADE_OUTPUT_PRICE_NEGATIVE":"El precio de salida de la cascada no puede ser negativo.","CONVERT_TO_OBJECT_STRUCTURED":"convertToObject es incompatible con la confianza de Salida estructurada — la cascada usará la heurística en su lugar.","STEP_INPUT_PRICE_NEGATIVE":"El precio de entrada del paso {{step}} no puede ser negativo.","STEP_OUTPUT_PRICE_NEGATIVE":"El precio de salida del paso {{step}} no puede ser negativo.","STEP_CONFIDENCE_OUT_OF_RANGE":"La confianza del paso {{step}} debe estar entre 0 y 1.","STEP_DEAD_NULL_THRESHOLD":"El paso {{step}} no tiene umbral de confianza — los pasos posteriores se vuelven inalcanzables.","STEP_TIMEOUT_NONPOSITIVE":"El tiempo límite del paso {{step}} debe ser mayor que 0.","STEP_CROSS_PROVIDER_NO_APIKEY":"El paso {{step}} usa un proveedor diferente pero no tiene clave API propia — heredaría la clave de la tarea."},"parallelExecution":"Ejecución paralela de herramientas","parallelExecutionDesc":"Run independent tool calls concurrently","parallelTimeout":"Tiempo límite (ms)","maxToolIterations":"Máx. iteraciones de herramientas","maxToolIterationsHint":"(predeterminado 10)","toolRateLimits":"Límites de tasa por herramienta","toolRateLimitsDesc":"Override default rate for specific tools","toolName":"Nombre de herramienta","addToolRate":"Añadir límite","retryConfig":"Configuración de reintentos","retryDesc":"Configure automatic retries with exponential backoff.","retryMaxAttempts":"Máx. intentos","retryDelay":"Retardo inicial (ms)","retryMultiplier":"Factor de backoff","retryMaxDelay":"Retardo máx. (ms)","ragConfig":"RAG (búsqueda de conocimiento)","ragDesc":"Augment LLM responses with retrieved documents.","ragHttpCall":"URI de llamada HTTP","ragEmbeddingModel":"Modelo de embedding","ragEmbeddingModelPlaceholder":"p. ej. text-embedding-3-small","ragEmbeddingStore":"Almacén de embeddings","ragEmbeddingStorePlaceholder":"p. ej. pgvector, qdrant","ragMaxResults":"Máx. resultados","ragMinScore":"Min Similarity Score (0-1)","moveDown":"Bajar","moveUp":"Subir","removeStep":"Quitar paso","execution":"Ejecución","budgetCosts":"Presupuesto y costes","preRequestDesc":"Establecer o transformar propiedades antes de que se ejecute el LLM.","postResponseDesc":"Procesar la salida del LLM: establecer propiedades, construir mensajes de salida y generar respuestas rápidas.","postPropertyInstructions":"Instrucciones de propiedades","postOutputInstructions":"Instrucciones de salida","postQrInstructions":"Instrucciones de respuestas rápidas","allSkills":"Todas las habilidades","skillPlaceholder":"p. ej. order-tracking","modeAgent":"Agente","modeChat":"Chat","perMinute":"/min","allTools":"Todas las herramientas","selectSpecific":"Selección manual","allToolsInfo":"Las {{count}} herramientas integradas están disponibles para el LLM. Elija «Selección manual» para limitar las herramientas expuestas.","availableTools":"Herramientas disponibles","toolCount":"{{selected}} de {{total}} seleccionadas","toolSources":"Fuentes de herramientas del flujo","toolSourcesInfo":"Ambas fuentes están activas por defecto — todas las llamadas HTTP y MCP del flujo se exponen automáticamente como herramientas LLM. Desactive una fuente para excluirla.","included":"Incluido","toolApprovals":"Control de aprobación de herramientas (por tarea)","toolApprovalsEnable":"Anular las aprobaciones de herramienta para esta tarea","toolApprovalsDesc":"Anula las aprobaciones de herramienta a nivel de agente solo para ESTA tarea — un reemplazo completo, no una combinación.","responseValidation":"Validación y recuperación de respuestas","responseValidationDesc":"Controle cómo reacciona el motor ante un turno vacío, truncado, filtrado por contenido, rechazado o caducado. \\"Fallback\\" sustituye por un mensaje predefinido; \\"Error\\" hace fallar el turno; \\"Advertir\\" registra y continúa; \\"Ignorar\\" no hace nada.","rvEnable":"Activar la validación de respuestas","rvDisabledInfo":"Las políticas siguientes se guardan, pero solo surten efecto mientras la validación está activada.","rvActionIgnore":"Ignorar","rvActionWarn":"Advertir (registrar y continuar)","rvActionFallback":"Fallback (mensaje predefinido)","rvActionError":"Error (hacer fallar el turno)","rvOnEmpty":"Respuesta vacía","rvOnEmptyHint":"El LLM no devolvió nada (vacío o null)","rvOnTruncation":"Respuesta truncada","rvOnTruncationHint":"Respuesta cortada (finishReason=LENGTH)","rvOnContentFilter":"Filtrado por contenido","rvOnContentFilterHint":"Respuesta bloqueada por el filtro de contenido del proveedor","rvOnRefusal":"Rechazo","rvOnRefusalHint":"El LLM se negó a responder (detección heurística)","rvOnStreamingTimeout":"Tiempo de espera de streaming","rvOnStreamingTimeoutHint":"Una respuesta en streaming caducó antes de completarse","streamingTimeoutSeconds":"Tiempo de espera de streaming (segundos)","streamingTimeoutSecondsHint":"Anula el valor predeterminado del motor (120s). Solo se aplica durante el streaming; vacío = usar el predeterminado.","taskPricing":"Precios de llamadas simples","taskPricingDesc":"Establece el precio de las llamadas de modelo ordinarias (sin cascada) de esta tarea para el seguimiento de costes y los límites de coste del grupo. Sin precio (en blanco) aporta $0."}'),T={labelPlaceholder:"Etiqueta del enlace...",pathPlaceholder:"Ruta del enlace...",altPlaceholder:"Texto alternativo...",uriPlaceholder:"URL de imagen...",language:"Idioma",langPlaceholder:"ej. en, es",outputSets:"Conjuntos de salida",addOutputSet:"Añadir conjunto de salida",noOutputSets:"No hay conjuntos de salida configurados",actionName:"Nombre de acción",timesOccurred:"×",removeOutput:"Eliminar",outputs:"Salidas",alternativeGroup:"Grupo alternativo",addAlternative:"Añadir alternativa",addOutputGroup:"Añadir grupo de salida",textPlaceholder:"Texto de salida...",urlPlaceholder:"URL…",delayMs:"Retardo (ms)",quickReplies:"Respuestas rápidas",noQuickReplies:"Sin Quick Replies",addQuickReply:"Añadir Quick Reply",qrValue:"Texto del botón",qrExpressions:"Expresiones",default:"Por defecto",invalidJson:"JSON no válido",buttonTypePlaceholder:"Tipo de botón (p. ej. postback)",buttonLabelPlaceholder:"Etiqueta...",onPressPlaceholder:'{"action":"..."}',subTypePlaceholder:"Subtipo (p. ej. text, email)",inputPlaceholderPlaceholder:"Marcador de posición...",inputLabelPlaceholder:"Etiqueta...",defaultValuePlaceholder:"Valor predeterminado...",minLength:"Longitud mín.",minLengthShort:"mín",maxLength:"Longitud máx.",maxLengthShort:"máx",validationMsgPlaceholder:"Mensaje de error de validación...",jsonPlaceholder:'{"key":"value"}'},P={setters:"Definidores de propiedades",addSetter:"Añadir setter",noSetters:"No hay Property Setters configurados",removeSetter:"Eliminar",triggerActions:"Acciones desencadenantes",noActions:"Sin acciones",actionPlaceholder:"ej. greet, fallback",properties:"Propiedades",noProperties:"Sin propiedades",addProperty:"Añadir propiedad",propName:"Nombre de propiedad",propValue:"Valor / expresión",fromPath:"Ruta de origen",fromObjectPath:"fromObjectPath",override:"Sobrescribir",propsCount:"prop.",untitled:"(sin acciones)",openEditor:"Editar en el editor",visibilityTitle:"Qué agents pueden ver esta propiedad longTerm",editValue:"Editar valor",toggleGroup:"Alternar grupo de propiedades"},S={language:"Idioma",langPlaceholder:"ej. en, es",words:"Palabras",addWord:"Añadir palabra",wordPlaceholder:"ej. hola",phrases:"Frases",addPhrase:"Añadir frase",phrasePlaceholder:"ej. buenos días",regExs:"Expresiones regulares",addRegEx:"Añadir RegEx",regexPlaceholder:"Expresión regular",expressionPlaceholder:"ej. greeting(hello)",frequency:"Frecuencia",none:"Ninguna definida"},k={title:"Configuración del analizador",configure:"Configurar",config:"Configuración",appendExpressions:"Añadir expresiones",includeUnused:"Incluir expresiones no utilizadas",includeUnknown:"Incluir expresiones desconocidas",dictionaries:"Diccionarios",builtInDicts:"Diccionarios integrados",regularDicts:"Diccionarios regulares",addDict:"Añadir",removeDict:"Eliminar diccionario",noRegularDicts:"No hay diccionarios regulares configurados",regularDictLabel:"Diccionario regular",dictUri:"URI del recurso de diccionario",dictUriPlaceholder:"eddi://ai.labs.dictionary/dictionarystore/dictionaries/?version=",corrections:"Correcciones",distance:"Distancia",normalizers:"Normalizadores",removePunctuation:"Eliminar puntuación",regexPattern:"Patrón",dict:{integer:"Diccionario de enteros",decimal:"Diccionario de decimales",punctuation:"Diccionario de puntuación",email:"Diccionario de correo electrónico",time:"Diccionario de expresiones temporales",ordinalNumber:"Diccionario de números ordinales"},corr:{levenshtein:"Corrección de Levenshtein",phonetic:"Corrección fonética",mergedTerms:"Corrección de términos fusionados"},norm:{punctuation:"Normalizador de puntuación",specialCharacter:"Normalizador de caracteres especiales",contractedWords:"Normalizador de palabras contraídas",allowedCharacter:"Normalizador de caracteres permitidos"}},L={activeConversations:"Conversaciones activas",eventHistory:"Historial de eventos",noActiveQueues:"No hay conversaciones activas en procesamiento",payload:"Payload",successRate:"Tasa de éxito",tasksPerSec:"tareas/s",totalPending:"pendientes",confirmDiscardDescription:"Elimina permanentemente la tarea en cola de fallidos. No podrá reproducirse después. No se puede deshacer.",confirmDiscardTitle:"¿Descartar la entrada de la cola de fallidos?",title:"Panel del coordinador",subtitle:"Supervisar el procesamiento de conversaciones y gestionar entradas dead-letter",type:"Tipo de coordinador",connection:"Conexión",processed:"Tareas procesadas",deadLettered:"Mensajes muertos",activeQueues:"Colas activas",queued:"en cola",deadLetterTitle:"Cola de mensajes muertos",noDeadLetters:"Sin entradas dead-letter",colId:"ID",colConversation:"Conversación",colError:"Error",colTime:"Hora",colActions:"Acciones",replay:"Reintentar",discard:"Descartar",purgeAll:"Purgar todo",confirmPurge:"¿Purgar todo?",yes:"Sí",cancel:"Cancelar",replaySuccess:"Dead-letter reintentada",replayError:"Error al reintentar",discardSuccess:"Dead-letter descartada",discardError:"Error al descartar",purgeSuccess:"Todas las entradas dead-letter eliminadas",purgeError:"Error al purgar",empty:"No hay datos del coordinador disponibles",emptyHint:"El servicio del coordinador puede estar iniciándose. Los datos aparecerán automáticamente.",lastNSnapshots:"Últimas {{count}} instantáneas"},R={expand:"Expandir",expandHint:"Pantalla completa (Ctrl+Mayús+F)",close:"Hecho",lines:"líneas",chars:"caracteres",fullscreenTitle:"Editor de contenido",fullscreenDescription:"Editor en pantalla completa. Escape para cerrar."},I={newLogs:"Nuevos logs",title:"Registros",description:"Supervisar el flujo de logs en tiempo real o buscar en el historial.",tabLive:"En vivo",tabHistory:"Historial",connected:"Conectado",disconnected:"Desconectado",filterAgent:"ID del agente…",filterConversation:"ID de conversación...",filterInstance:"ID de instancia...",allLevels:"Todos los niveles",pause:"Pausa",resume:"Reanudar",clear:"Limpiar",search:"Buscar",waitingForLogs:"Esperando logs...",loadingRecentLogs:"Cargando logs recientes…",noRecentLogs:"No hay actividad reciente en los logs.",noRecentLogsHint:"Los nuevos logs aparecerán aquí a medida que se transmitan desde el backend.",connectingStream:"Conectando al stream...",noHistoryLogs:"No se encontraron logs históricos.",entryCount:"{{count}} entradas",showStacktrace:"Mostrar stacktrace ({{count}} frames)",hideStacktrace:"Ocultar stacktrace",allAgents:"Todos los agentes",allConversations:"Todas las conversaciones",waitingHint:"Los logs aparecerán aquí a medida que lleguen del backend.",noHistoryHint:"Intente ajustar los filtros o buscar un agente o conversación diferente.",searchConversations:"Buscar por ID, agente, usuario…",stepsCount:"{{count}} pasos",noConversationsFound:"No se encontraron conversaciones",useConversationId:"Usar ID: {{id}}",searchLogs:"Buscar logs…",errors:"errores",warnings:"advertencias",infos:"info",debugs:"depuración",filteredCount:"{{shown}} de {{total}} entradas",copyEntry:"Copiar entrada de log",export:"Exportar",stateReady:"Listo",stateActive:"Activo",stateError:"Error",stateEnded:"Finalizado"},j={loadError:"No se pudieron cargar los secretos",allAgents:"Todos los agentes",allowedAgents:"Agentes permitidos",allowedAgentsHint:"Deje vacío para todos los agentes. Añadir IDs de agente ayuda a rastrear qué agentes usan este secret.",allowedAgentsLabel:"Agentes permitidos (opcional)",allowedAgentsPlaceholder:"Escriba el ID de agente y pulse Enter (vacío = todos los agentes)",deleteKey:"Eliminar {{key}}",hideValue:"Ocultar valor",newValuePlaceholder:"Nuevo valor del secret…",rotate:"Rotar",rotateDesc:"Introduzca el nuevo valor. Las referencias existentes seguirán resolviéndose al valor actualizado.",rotateKey:"Rotar {{key}}",rotateSuccess:'Secret "{{key}}" rotado',rotateTitle:'Rotar "{{key}}"',showValue:"Mostrar valor",title:"Bóveda de secretos",description:"Gestionar secrets cifrados en el vault. Los valores nunca se exponen.",tenantId:"ID del inquilino",refresh:"Cargar secrets",create:"Añadir secret",createTitle:"Añadir secret",keyName:"Nombre de clave",keyNameLabel:"Nombre de clave",keyNamePlaceholder:"ej. apiKey, dbPassword",valueLabel:"Valor del secret",valuePlaceholder:"Introduzca el valor del secret…",storeWarning:"El valor será cifrado. No podrá recuperarse una vez almacenado.",store:"Almacenar secret",storeSuccess:'Secret "{{key}}" almacenado',deleteSuccess:'Secret "{{key}}" eliminado',created:"Creado",lastAccessed:"Último acceso",checksum:"Suma de verificación",actions:"Acciones",confirmDeleteTitle:"Eliminar secret",confirmDeleteMessage:'¿Está seguro de que desea eliminar permanentemente "{{key}}"? Esta acción no se puede deshacer.',empty:"No se encontraron secrets",emptyHint:"Aún no hay secrets almacenados para el inquilino «{{tenant}}». Haz clic en «Añadir secret» para crear uno.",vaultUp:"Vault en línea",vaultDown:"Vault fuera de línea",descriptionLabel:"Descripción (opcional)",descriptionPlaceholder:"p. ej. Clave API OpenAI para producción",descriptionCol:"Descripción",reference:"Referencia",willUseRef:"Referencia:",copyRef:"Copiar referencia del cofre",refCopied:"Copiado: {{ref}}",lastRotated:"Última rotación",scopeExplanation:"Los secretos están limitados por inquilino y se comparten entre todos los agentes. Refiérase a ellos con ${vault:keyName}. El acceso lo controla el autor de la configuración.",creatingFor:'Almacenando en el inquilino "{{tenant}}" — disponible para todos los agentes',vaultNotConfigured:"El cofre de secretos no está configurado",viewDocs:"Ver documentación",selectAgentFirst:"Seleccione primero un agente",dangerZoneTitle:"Ciclo de vida de la clave de cifrado",dangerZoneDesc:"Acciones de recuperación operativa para las claves criptográficas del Vault. Úselas para rotar claves o recuperar el acceso después de que cambie la clave maestra. Distinto de rotar el valor de un secreto individual más arriba.",rotateDekTitle:"Rotar la clave de cifrado (DEK)",rotateDekBlurb:"Seguro — sin reinicio. Genera una nueva clave de cifrado de datos por inquilino y vuelve a cifrar todos los secretos de este inquilino.",rotateDekAction:"Rotar DEK",rotateDekConfirmTitle:"¿Rotar la clave de cifrado (DEK)?",rotateDekConfirm:"Rotar DEK ahora",rotateKekTitle:"Rotar la clave maestra (KEK)",rotateKekBlurb:"Vuelve a cifrar todos los DEK de los inquilinos con una nueva clave maestra. Requiere actualizar EDDI_VAULT_MASTER_KEY y reiniciar después.",rotateKekAction:"Rotar clave maestra",rotateKekConfirmTitle:"¿Rotar la clave maestra (KEK)?",rotateKekConfirmDesc:"Vuelve a cifrar la clave de cifrado de datos de cada inquilino con una nueva clave maestra. Los valores de los secretos en sí no cambian.",rotateKekConfirm:"Rotar clave maestra ahora",kekTlsWarning:"Ambas claves se envían en el cuerpo de la solicitud. Realice esto solo a través de una conexión TLS (HTTPS) para que las claves no queden expuestas en tránsito.",kekOldKeyLabel:"Clave maestra actual",kekOldKeyPlaceholder:"EDDI_VAULT_MASTER_KEY actual",kekNewKeyLabel:"Nueva clave maestra",kekNewKeyPlaceholder:"Nueva clave — al menos 8 caracteres",kekNewKeyTooShort:"La nueva clave maestra debe tener al menos 8 caracteres.",kekRestartHint:"Después de la rotación, debe actualizar EDDI_VAULT_MASTER_KEY con la nueva clave y reiniciar EDDI.",kekResultInstruction:"Acción requerida: establezca la variable de entorno EDDI_VAULT_MASTER_KEY con la NUEVA clave maestra y reinicie EDDI. Hasta que lo haga, la instancia en ejecución seguirá usando la clave anterior en memoria.",resetTenantTitle:"Restablecer el Vault para este inquilino",resetTenantBlurb:"Último recurso destructivo. Elimina permanentemente todos los secretos y el DEK para que el Vault pueda empezar de cero — úselo después de perder o cambiar la clave maestra.",resetTenantAction:"Restablecer Vault",resetTenantConfirmTitle:"¿Restablecer el Vault para este inquilino?",resetTenantConfirm:"Restablecer el Vault permanentemente",resetConfirmLabel:'Escriba el nombre del inquilino "{{tenant}}" para confirmar',tableTitle_many:'{{count}} secretos en el inquilino "{{tenant}}"',tableTitle_one:'{{count}} secreto en el inquilino "{{tenant}}"',tableTitle_other:'{{count}} secretos en el inquilino "{{tenant}}"',rotateDekConfirmDesc_many:'Esto genera una nueva clave de cifrado de datos para el inquilino "{{tenant}}" y vuelve a cifrar sus {{count}} secretos. Es seguro y surte efecto de inmediato — no se requiere reinicio.',rotateDekConfirmDesc_one:'Esto genera una nueva clave de cifrado de datos para el inquilino "{{tenant}}" y vuelve a cifrar sus {{count}} secreto. Es seguro y surte efecto de inmediato — no se requiere reinicio.',rotateDekConfirmDesc_other:'Esto genera una nueva clave de cifrado de datos para el inquilino "{{tenant}}" y vuelve a cifrar sus {{count}} secretos. Es seguro y surte efecto de inmediato — no se requiere reinicio.',rotateDekSuccess_many:"Clave de cifrado rotada — {{count}} secretos vueltos a cifrar",rotateDekSuccess_one:"Clave de cifrado rotada — {{count}} secreto vuelto a cifrar",rotateDekSuccess_other:"Clave de cifrado rotada — {{count}} secretos vueltos a cifrar",kekResultTitle_many:"Clave maestra rotada — {{count}} DEK vueltos a cifrar",kekResultTitle_one:"Clave maestra rotada — {{count}} DEK vuelto a cifrar",kekResultTitle_other:"Clave maestra rotada — {{count}} DEK vueltos a cifrar",rotateKekSuccess_many:"Clave maestra rotada — {{count}} DEK vueltos a cifrar. Actualice EDDI_VAULT_MASTER_KEY y reinicie.",rotateKekSuccess_one:"Clave maestra rotada — {{count}} DEK vuelto a cifrar. Actualice EDDI_VAULT_MASTER_KEY y reinicie.",rotateKekSuccess_other:"Clave maestra rotada — {{count}} DEK vueltos a cifrar. Actualice EDDI_VAULT_MASTER_KEY y reinicie.",resetTenantConfirmDesc_many:'Esto elimina permanentemente todos los {{count}} secretos y la clave de cifrado de datos del inquilino "{{tenant}}". Use esto como paso de recuperación cuando la clave maestra se perdió o cambió y la clave anterior no está disponible. Esto no se puede deshacer.',resetTenantConfirmDesc_one:'Esto elimina permanentemente todos los {{count}} secreto y la clave de cifrado de datos del inquilino "{{tenant}}". Use esto como paso de recuperación cuando la clave maestra se perdió o cambió y la clave anterior no está disponible. Esto no se puede deshacer.',resetTenantConfirmDesc_other:'Esto elimina permanentemente todos los {{count}} secretos y la clave de cifrado de datos del inquilino "{{tenant}}". Use esto como paso de recuperación cuando la clave maestra se perdió o cambió y la clave anterior no está disponible. Esto no se puede deshacer.',resetSecretCount_many:"{{count}} secretos se perderán permanentemente",resetSecretCount_one:"{{count}} secreto se perderán permanentemente",resetSecretCount_other:"{{count}} secretos se perderán permanentemente",resetTenantSuccess_many:'Vault restablecido para "{{tenant}}" — {{count}} secretos eliminados permanentemente',resetTenantSuccess_one:'Vault restablecido para "{{tenant}}" — {{count}} secreto eliminados permanentemente',resetTenantSuccess_other:'Vault restablecido para "{{tenant}}" — {{count}} secretos eliminados permanentemente'},x={title:"Registro de auditoría",description:"Explore el registro de auditoría inmutable para cumplimiento y depuración.",byConversation:"Por conversación",byAgent:"Por agent",conversationIdPlaceholder:"Introduzca ID de conversación...",agentIdPlaceholder:"Introduzca Agent ID...",versionPlaceholder:"Versión (opcional)",search:"Buscar",entries:"entradas",totalDuration:"total",totalCost:"coste total",step:"Paso",tasks:"tareas",input:"Entrada",output:"Salida",llmDetail:"Detalle LLM",toolCalls:"Llamadas a herramientas",hmacIntegrity:"Integridad HMAC verificada",empty:"Buscar entradas de auditoría",emptyHint:"Introduzca un ID de conversación o agent arriba para explorar el audit trail.",noResults:"No se encontraron entradas de auditoría",noResultsHint:"Pruebe con otro ID o verifique que la conversación ha sido procesada.",loadMore:"Cargar más",selectAgent:"Select an agent…",conversations:"conversations",emptyAgent:"Select an agent to view its audit trail",emptyAgentHint:"Choose a deployed agent from the dropdown above to see all its audit records.",export:"Export",autoRefreshToggle:"Toggle auto-refresh (every 10s)",autoRefreshOn:"Auto",autoRefreshOff:"Auto",integrityVerified:"All entries cryptographically signed",integrityVerifiedDesc:"{{count}} of {{total}} entries have HMAC-SHA256 signatures",integrityPass:"SIGNED",integrityPartial:"Partially signed audit trail",integrityPartialDesc:"{{count}} of {{total}} entries have HMAC signatures",integrityNone:"Unsigned audit entries",integrityNoneDesc:"Configure a vault master key to enable automatic HMAC-SHA256 signing on all future audit entries.",signed:"Signed",allSigned:"All signed",decidedBy:"por",automated:"automatizado"},M={cronHelp:"Formato de 5 campos: minuto hora día-del-mes mes día-de-la-semana",cronEveryMinute:"Cada minuto",cronEveryNMinutes:"Cada {{n}} minutos",cronHourlyAt:"Cada hora en el minuto :{{minute}}",cronEveryNHours:"Cada {{n}} horas en el minuto :{{minute}}",cronAtTime:"A las {{time}}",cronAtMinutePastEveryHour:"En el minuto {{minutes}} de cada hora",cronAtMinutePastHours:"En el minuto {{minutes}} de la hora {{hours}}",cronOnDays:"los {{days}}",cronOnDayOfMonth:"el día del mes {{days}}",cronInMonths:"en {{months}}",cronInvalid:"Expresión cron no válida (se esperaban 5 campos)",cronTooFrequent:"Se ejecuta con más frecuencia que el mínimo de 60 segundos",failedEmptyHint:"Las ejecuciones en la cola de fallidos aparecerán aquí para reintentarlas o descartarlas.",failedSubtitle:"Ejecuciones que fallaron de forma permanente. Reintente para volver a encolarlas, o descártelas para borrarlas sin volver a ejecutarlas.",intervalTooShort:"El intervalo debe ser de al menos 60 segundos",lastManualFire:"Última ejecución manual",oneTimeHelp:"Se ejecuta una vez en este momento y luego finaliza. Se interpreta en su hora local.",outcomePending:"activada — a la espera del resultado",persistentConversationId:"ID de conversación persistente",persistentConversationIdPlaceholder:"Se genera automáticamente si se deja en blanco",strategyPersistent:"Persistente (reutilizar la misma conversación)",fireDeadLettered:"Cola de fallidos",fireFailed:"Fallido",fireCompleted:"Completado",title:"Programaciones",subtitle:"Gestionar disparadores programados de agents — Cron y Heartbeats",create:"Crear programación",createTitle:"Crear programación",createSuccess:"Programación creada con éxito",createError:"Error al crear la programación",creating:"Creando...",name:"Nombre",namePlaceholder:"ej. Verificación diaria",triggerType:"Tipo de disparador",cronExpression:"Expresión Cron",interval:"Intervalo (segundos)",agentId:"Agent ID",agentIdPlaceholder:"Introduzca Agent ID...",environment:"Entorno",message:"Mensaje",messagePlaceholder:"Mensaje a enviar al agent",conversationStrategy:"Estrategia de conversación",total:"Programaciones totales",active:"Activas",failedCount:"Fallidas / Dead-Lettered",nextFireLabel:"Próxima ejecución",tableTitle:"Todas las programaciones",empty:"Aún no hay programaciones",emptyHint:"Cree una programación para automatizar disparadores de agents.",colName:"Nombre",colType:"Tipo",colSchedule:"Programación",colAgent:"Agente",colStatus:"Estado",colNextFire:"Próxima ejec.",colLastFired:"Última ejec.",colActions:"Acciones",enable:"Activar",disable:"Desactivar",enabled:"Programación activada",disabled:"Programación desactivada",toggleError:"Error al cambiar estado",fireNow:"Ejecutar ahora",fired:"Programación ejecutada con éxito",fireError:"Error en la ejecución",retry:"Reintentar",retrySuccess:"Programación reencolada",retryError:"Error al reintentar",deleteSuccess:"Programación eliminada",deleteError:"Error al eliminar la programación",fireHistory:"Historial de ejecución",hitlTimeout:"Tiempo de espera HITL",hitlTimeoutHint:"Tiempo de espera de aprobación HITL gestionado por el sistema — resuélvelo mediante la aprobación de la conversación, no aquí.",statusDisabled:"Desactivada",statusActive:"Activa",statusRunning:"En ejecución",statusExecuting:"Ejecutando",statusFailed:"Fallida",statusDeadLettered:"Dead-Letter",typeHeartbeat:"Heartbeat",typeOneTime:"Única vez",typeCron:"Cron",noFireHistory:"Aún no hay historial de ejecución",logFired:"Ejecutado",logDuration:"Duración",logResult:"Resultado",logAttempt:"Intento",logCost:"Costo",logConversation:"Conversación",dismissSuccess:"Dead-letter descartado",dismissError:"No se pudo descartar el dead-letter",failedTitle:"Ejecuciones fallidas y dead-letter",failedEmpty:"Sin ejecuciones fallidas",colSchedule2:"Programación",dismiss:"Descartar",updateSuccess:"Programación actualizada",updateError:"No se pudo actualizar la programación",editTitle:"Editar programación",cronNext:"Siguiente",oneTimeAt:"Fecha y hora",timeZone:"Zona horaria",agentVersion:"Versión",agentVersionHint:"0 = última desplegada",envProduction:"Producción",envTest:"Prueba",userId:"ID de usuario",userIdPlaceholder:"system:scheduler",maxCostPerFire:"Costo máx. por ejecución",unlimited:"Ilimitado",strategyNew:"Nueva (conversación nueva en cada ejecución)",saving:"Guardando...",fireOutcomeFailed:"Ejecución fallida",unknownError:"error desconocido",tabSchedules:"Programaciones",tabFailed:"Fallido / Dead-letter",cronPreset:{every15Minutes:"Cada 15 minutos",hourly:"Cada hora (en punto)",dailyMorning:"Diariamente a las 09:00",weekdays:"Días laborables a las 09:00",weeklyMonday:"Semanal (lun 00:00)",monthly:"Mensual (día 1, 00:00)"}},N={title:"Cascada de modelos",escalated:"confianza {{c}} < {{th}}",escalatedShort:"escalado",accepted:"aceptada",reason:{lowConfidence:"confianza baja",timeout:"tiempo agotado",error:"error",retryableError:"error reintentable"}},w={pipelineError:"Error al cargar el rastreo del pipeline",title:"Depuración",tabPipeline:"Pipeline",tabCosts:"Costes",tabMemory:"Memoria",tabLogs:"Registros",tabPrompt:"Prompt",turn:"Turno",latest:"Último",noPipeline:"Envíe un mensaje para ver el rastreo del pipeline",processing:"Procesando...",actions:"Acciones",confidence:"Confianza",duration:"Duración",cost:"Coste",in:"entrada",input:"Entrada",model:"Modelo",out:"salida",output:"Salida",tokens:"Tokens",toolCalls:"Herramientas"},q={error:"No se pudieron cargar los datos de coste del servidor",thisTurn:"Este turno",conversationTotal:"Total de la conversación",tokens:"Tokens",cost:"Coste",duration:"Duración",model:"Modelo",toolCalls:"Llamadas de herramientas",toolUsage:"Uso de herramientas",cacheStats:"Caché",hitRate:"Tasa de aciertos",empty:"Envíe un mensaje para ver las métricas de costes",in:"entrada",out:"salida",total:"total",calls:"llamadas",avgLatency:"Latencia media",input:"Entrada",output:"Salida",tokenDistribution:"Distribución de tokens",totalCost:"Coste total",totalTokens:"Tokens totales",turns:"Turnos"},z={error:"Error al cargar los datos de memoria",title:"Memoria de conversación",noConversation:"Inicie una conversación para inspeccionar la memoria",empty:"No hay datos de memoria disponibles",properties:"Propiedades",step:"Paso",keys:"claves",input:"Entrada",collapseAll:"Contraer todo",copyKey:"Copiar clave",copyValue:"Copiar valor",customProperties:"Propiedades personalizadas",expandAll:"Expandir todo",noMatches:"No se encontraron datos coincidentes",search:"Buscar claves o valores…",stepData:"Datos del paso",systemProperties:"Propiedades del sistema"},H={noAgent:"Seleccione un agent para ver los registros",search:"Buscar...",pause:"Pausa",resume:"Reanudar",clear:"Limpiar",waiting:"Esperando registros...",connected:"Conectado",disconnected:"Desconectado",logOutput:"Salida de registro",noMatch:"Ningún registro coincide con tu filtro"},O={error:"Error al cargar los datos del prompt",noConversation:"Inicie una conversación para inspeccionar los prompts",noLlm:"Aún no se encontraron interacciones con LLM",turn:"Turno",latest:"Último",tokens:"Tokens",model:"Modelo",cost:"Coste",copy:"Copiar prompt",copied:"¡Copiado!",replay:"Reintentar este turno",toolCalls:"Llamadas de herramientas",step:"Paso",roleSystem:"Prompt del sistema",roleUser:"Usuario",roleAssistant:"Asistente",roleTool:"Resultado de herramienta",collapse:"Contraer",showMore:"Mostrar más",temperature:"Temp"},F={preview:"Vista previa",edit:"Editar",switchToPreview:"Vista previa del prompt resuelto",switchToEdit:"Cambiar a edición",refresh:"Actualizar",sampleData:"Datos de ejemplo (sin conversación)",disclaimerReal:"La vista previa usa el motor Qute con datos reales de conversación.",disclaimerSample:"La vista previa usa el motor Qute con datos de ejemplo. Seleccione una conversación para valores reales.",resolvedPrompt:"Prompt resuelto",copy:"Copiar",copied:"¡Copiado!",error:"Error al resolver la plantilla",loading:"Resolviendo plantilla…",availableVariables:"Variables disponibles",copyVariable:"Clic para copiar referencia",varProperties:"Propiedades",varMemory:"Memoria",varContext:"Contexto",varSnippets:"Fragmentos",varUserInfo:"Info del usuario",varConversationInfo:"Info de conversación",varInput:"Entrada",varConversationLog:"Registro de conversación"},V={title:"Estudio de Agentes",subtitle:"Construya, pruebe y depure sus agents en un solo espacio de trabajo",pipeline:"Pipeline",editor:"Editor",debug:"Debug & Chat",selectStage:"Haga clic en una etapa del pipeline para abrir su editor",openInStudio:"Abrir en Studio",loading:"Cargando agent...",notFound:"Agent no encontrado",hideChat:"Ocultar chat",showChat:"Mostrar chat",openEditor:"Abrir en Editor",editorComingSoon:"Integración de editor en el lugar próximamente",noPipeline:"Sin etapas de pipeline",type:{parser:"Analizador",rules:"Reglas de comportamiento",property:"Definidor de propiedades",apicalls:"Llamadas API",llm:"LLM",output:"Salida","output.template":"Plantilla de salida",mcpcalls:"Llamadas MCP",rag:"Bases de conocimiento",dictionary:"Diccionario"},landingDescription:"Seleccione un agente para abrir el editor visual, el depurador y el chat en vivo",noAgents:"No se encontraron agentes — cree uno en la página de Agentes",chat:"Chat",backToAgent:"Volver al agente",selectStageHint:"Seleccione una extensión del pipeline para ver y editar su configuración directamente",noConfig:"Esta etapa del pipeline no tiene URI de configuración",unsupportedType:"Editor no disponible para este tipo de extensión"},U={general:"General",kbName:"Nombre de la base de conocimiento",kbNamePlaceholder:"ej. docs-producto, faq, wiki-interna",kbNameHint:"Usado para referenciar esta base desde tareas de LLM",embeddingModel:"Modelo de Embedding",provider:"Proveedor",embeddingParams:"Parámetros del Provider",embeddingParamsHint:"Nombre de modelo, API key (use ${vault:...} para secrets), base URL, etc.",vectorStore:"Almacén vectorial",storeType:"Tipo de almacén",storeParams:"Parámetros de conexión",chunking:"Fragmentación de documentos",chunkStrategy:"Estrategia",chunkSize:"Tamaño del fragmento",chunkOverlap:"Superposición",overlapHint:"La superposición ayuda a mantener el contexto entre fragmentos",chunkPreview:"Vista previa (cómo se dividirá el documento)",chunkBlocks:"{{count}} fragmentos de ~{{size}} caracteres con {{overlap}} superpuestos",retrievalDefaults:"Opciones predeterminadas de recuperación",retrievalHint:"Estas opciones se pueden sobrescribir por tarea en la configuración del LLM.",maxResults:"Resultados máximos (top-K)",minScore:"Puntuación mínima de similitud",ingestion:"Ingesta de documentos",dropFiles:"Arrastre documentos aquí para ingerir",dropHint:"Texto, Markdown o cualquier archivo de texto",browse:"Buscar",pasteText:"O pegue el contenido del texto",pastePlaceholder:"Pegue el texto del documento aquí...",ingestText:"Ingerir texto",ingestionHistory:"Estado de ingesta",saveFirstIngestion:"Guarde esta base de conocimiento primero para activar la ingesta de documentos.",addParam:"Añadir parámetro"},_={welcome:{title:"Bienvenido a EDDI",subtitle:"Su centro de comando de agentes de IA",introText:"EDDI Manager es su centro de comando para crear, probar y operar agentes de IA conversacional.",capabilitiesTitle:"Lo que puede hacer",capabilitiesSubtitle:"Todo lo que necesita para crear agentes de IA listos para producción",buildAgents:"Crear agentes",buildAgentsDesc:"Cree y configure agentes de IA con el asistente o desde cero",designWorkflows:"Diseñar workflows",designWorkflowsDesc:"Constructor de pipelines de arrastrar y soltar con reglas de comportamiento, cadenas de LLM y herramientas",testRealtime:"Probar en tiempo real",testRealtimeDesc:"Chatee con sus agentes con respuestas en streaming y depuración integrada",monitorOperate:"Supervisar y operar",monitorOperateDesc:"Conversaciones, audit trails, secrets y cuotas: todo en un solo lugar",readyTitle:"¿Listo para comenzar?",readySubtitle:"Puede reiniciar cualquier tour desde el menú Ayuda en la barra lateral",startTour:"Iniciar el tour",exploreOwn:"Exploraré por mi cuenta"},tour:{back:"Atrás",next:"Siguiente",skip:"Omitir Tour",finish:"Finalizar",stepOf:"Paso {{current}} de {{total}}",dashboard:{title:"Tour del Dashboard",step1Title:"Su centro de comando",step1Desc:"La barra lateral organiza todo en tres zonas: Gestión, Desarrollo y Operaciones. Siempre sabrá dónde encontrar todo.",step2Title:"Vistazo a la plataforma",step2Desc:"Recuentos en vivo de sus agentes, workflows y conversaciones. Haga clic en cualquier tarjeta para ir directamente a esa sección.",step3Title:"Acciones rápidas",step3Desc:"Acceda rápidamente a tareas comunes. El Asistente de Agentes es la forma más rápida de crear su primer agente: toma menos de 2 minutos.",step4Title:"Personalice el espacio",step4Desc:"Cambie entre temas claro, oscuro y de sistema. EDDI Manager habla 11 idiomas: elija el suyo en el selector de idiomas."},agents:{title:"Tour de Agents",step1Title:"Asistente de agentes",step1Desc:"El asistente le guiará en la creación de un agente completamente configurado: elija un modelo, asigne una personalidad, active herramientas y despliegue.",step2Title:"Creación manual",step2Desc:"Para usuarios avanzados: cree un agente en blanco y configúrelo con control total por JSON. Perfecto para configuraciones avanzadas.",step3Title:"Buscar y filtrar",step3Desc:"Encuentre agentes al instante por nombre. Cambie entre la vista de tarjetas y la lista con el interruptor de la derecha.",step4Title:"Su flota de agentes",step4Desc:"Cada tarjeta muestra el nombre del agente, su versión y la fecha de modificación. Haga clic en cualquier agente para ver su página de detalles y controlar su despliegue, chat y workflows."},workflows:{title:"Tour de Workflows",step1Title:"Crear un workflow",step1Desc:"Los workflows definen el pipeline de procesamiento: una secuencia de tareas como llamadas de LLM, reglas de comportamiento e integraciones HTTP.",step2Title:"Sus Workflows",step2Desc:"Cada workflow se puede adjuntar a uno o más agentes. Haga clic para abrir el editor visual de arrastrar y soltar.",step3Title:"Organice su vista",step3Desc:"Busque por nombre y cambie entre la cuadrícula de tarjetas y las tablas ordenables."},chat:{title:"Tour de Chat",step1Title:"Elija un agente",step1Desc:"Seleccione un agente desplegado para iniciar una conversación. Aquí solo aparecen los agentes que se han desplegado.",step2Title:"Modo Streaming",step2Desc:"Active el flujo de tokens en tiempo real. Cuando está habilitado, la respuesta aparece palabra por palabra: excelente para verificar la latencia.",step3Title:"Historial de conversación",step3Desc:"Abra la barra lateral para explorar y reanudar conversaciones anteriores.",step4Title:"Empiece a chatear",step4Desc:"Escriba un mensaje y presione Enter. El agente responderá utilizando el LLM, las herramientas y los workflows que ha configurado."},resources:{title:"Tour de Recursos",step1Title:"Biblioteca de extensiones",step1Desc:"Los recursos son los bloques de construcción de los workflows. Cada tipo controla una parte diferente del comportamiento del agente.",step2Title:"Configuraciones de LLM",step2Desc:"Defina qué modelo de IA potencia a su agente, su prompt de sistema, herramientas, servidores MCP y ajustes de cascading. Este es el cerebro del agente.",step3Title:"Reglas y Llamadas API",step3Desc:"Las Reglas de Comportamiento controlan el flujo de la conversación. Las Llamadas HTTP conectan a API externas. Ambas se pueden usar como herramientas de LLM."},conversations:{title:"Tour de Conversaciones",step1Title:"Búsqueda",step1Desc:"Encuentre conversaciones rápidamente por ID, agente o mensajes recientes de usuario.",step2Title:"Filtros de estado",step2Desc:"Filtre las sesiones por estado: Activa, En progreso, Finalizada o con Error.",step3Title:"Lista de conversaciones",step3Desc:"Explore todas las sesiones. Haga clic en la tarjeta de cualquier conversación para abrir el timeline y depurar el flujo."},groups:{title:"Tour de Grupos de Discusión",step1Title:"Crear grupo",step1Desc:"Cree un grupo de orquestación para permitir que varios agentes colaboren y debatan.",step2Title:"Buscar en grupos",step2Desc:"Busque fácilmente a través de sus clústeres multi-agente existentes.",step3Title:"Gestión de grupos",step3Desc:"Gestione sus entornos colaborativos, edite sus políticas o elimine los grupos antiguos."},logs:{newLogs:"Nuevos logs",title:"Tour de Registros de Sistema",step1Title:"Live vs Historial",step1Desc:"Cambie entre el flujo en tiempo real de los registros y la búsqueda en el historial.",step2Title:"Filtros de stream",step2Desc:"Filtre el flujo en vivo por agente o por un nivel de registro crítico.",step3Title:"Exportar",step3Desc:"Descargue los registros filtrados actuales como archivo de texto para analizarlos o guardarlos."},secrets:{title:"Tour del Secrets Vault",step1Title:"Crear Secret",step1Desc:"Almacene de forma segura una nueva API key, token o contraseña a la que sus agentes puedan acceder.",step2Title:"Aislamiento por Tenant",step2Desc:"Filtre la vista del Vault y asegúrese de que sus secrets estén vinculados a un Tenant ID específico.",step3Title:"Sintaxis de referencia",step3Desc:"Aprenda a inyectar secrets dinámicamente en sus configuraciones de LLM para evitar hardcodear información confidencial."},audit:{title:"Tour del Audit Trail",step1Title:"Modo de búsqueda",step1Desc:"Busque en el registro inmutable de auditoría por un ID de conversación específico o una versión de agente.",step2Title:"Ejecutar búsqueda",step2Desc:"Introduzca su ID y haga clic en buscar para extraer un historial de ejecución verificable.",step3Title:"Exportar ledger",step3Desc:"Exporte los registros auditables en formato JSON para informes y casos de cumplimiento de normativas."},schedules:{title:"Tour de Programaciones",step1Title:"Crear programación",step1Desc:"Configure una nueva tarea cron o heartbeat continuo para activar workflows de agentes de forma automatizada.",step2Title:"Estadísticas de salud",step2Desc:"Haga un seguimiento de las tareas totales, activas y fallidas por toda su plataforma.",step3Title:"Gestión",step3Desc:"Controle sus tareas automáticamente: pause, reanude, edite o fuerce su ejecución en cualquier momento."},quotas:{saveSuccess:"Cuota guardada",resetSuccess:"Contadores de uso restablecidos",resetConfirmDesc:"Pone a cero de inmediato todos los contadores de uso (conversaciones, llamadas API, coste mensual) del inquilino «default». No se puede deshacer.",resetConfirmTitle:"¿Restablecer los contadores de uso?",title:"Tour de Cuotas",step1Title:"Límites de uso",step1Desc:"Defina restricciones como máximo de agentes, conversaciones u otros límites de token para este Tenant.",step2Title:"Análisis de uso",step2Desc:"Inspeccione qué cantidad de la cuota asignada ha consumido cada tenant en tiempo real.",step3Title:"Aplicar cambios",step3Desc:"Guarde sus límites actualizados e inmediatamente la plataforma comenzará a bloquear tráfico que sobrepase estos umbrales."},coordinator:{title:"Tour del Coordinator",step1Title:"Conexión en vivo",step1Desc:"Vea las métricas de heartbeat y la conexión del evento sincronizada con su backend de coordinación.",step2Title:"Colas activas",step2Desc:"Monitoree las colas y las tareas procesándose actualmente a lo largo del clúster de agentes.",step3Title:"Mensajes muertos",step3Desc:"Inspeccione las tareas fallidas en la cola de dead-letter, descártelas o reinténtelas para mantener la plataforma estable."},orphans:{confirmPurgeAll:"¿Eliminar permanentemente TODOS los {{count}} recursos huérfanos? El servidor purga todos — tu selección no se aplica. Esto no se puede deshacer.",title:"Tour de Huérfanos",step1Title:"Escaneo de sistema",step1Desc:"Active el escaneo para buscar recursos o configuraciones que ya no estén conectadas ni utilizadas.",step2Title:"Historial y eliminados",step2Desc:"Si lo desea, active la inclusión de objetos previamente eliminados temporalmente para su purgación final.",step3Title:"Revisar y Purgar",step3Desc:"Compruebe todos los recursos reportados y use el botón de purgado total para reclamar memoria y espacio de la base de datos."}},help:{title:"Ayuda y Tour",platformTour:"Tour de la plataforma",resetAll:"Restablecer todos los tours",resetConfirm:"¿Restablecer el progreso de todos los tours?"},offer:{message:"¿Es su primera vez? Haga el {{page}}",accept:"Mostrar",dontAsk:"No volver a preguntar"}},G={status:"Estado de la plataforma",online:"En línea",offline:"Sin conexión",checking:"Verificando…",connected:"Conectado",disconnected:"Desconectado",instance:"Instancia",latency:"Latencia",lastChecked:"Última comprobación",justNow:"ahora mismo",secondsAgo:"hace {{count}}s"},B={live:"En vivo",reconnecting:"Reconectando…"},W={title:"Nuevo {{type}}",newAgent:"Nuevo Agent",newGroup:"Nuevo Grupo",quickCreate:"Creación rápida",quickCreateTitle:"Creación rápida de {{type}}",quickCreateDesc:"Establezca un nombre y descripción, configure los detalles más tarde.",guidedSetup:"Configuración guiada",guidedSetupDesc:"Asistente paso a paso con proveedor de LLM, prompts y despliegue."},K=JSON.parse('{"actionConflict":"Otra operación sigue en curso, o esta discusión ya no acepta esa acción. Vuelva a intentarlo.","actionTimeout":"Un agente miembro no respondió a tiempo. Inténtelo de nuevo.","actionUnreachable":"No se pudo contactar con un agente miembro. Inténtelo de nuevo.","addMember":"Añadir miembro","allowHtmlTooltip":"Cuando está activado, renderiza contenido HTML (saneado). Úselo solo con agentes de confianza.","askQuestion":"Haga una pregunta para que el grupo la debata…","assignAgents":"Asigne agentes a cada rol de miembro.","blankDesc":"Configurar todo manualmente.","characters":"caracteres","chooseTemplate":"Elija una plantilla o empiece desde cero.","closeConfirmDescription":"Cerrar finaliza permanentemente todas las conversaciones de los miembros y limpia los agentes efímeros. No es posible dar más seguimientos ni continuaciones. No se puede deshacer.","composeQuestion":"Redactar pregunta","continueButton":"Continuar","continueHint":"Vuelve a ejecutar todas las fases como una nueva ronda; cada agente conserva la memoria de las rondas anteriores. No se pueden añadir adjuntos a una continuación.","continuePlaceholder":"Continúe esta discusión con un seguimiento…","continueStreamStarted":"Continuación iniciada — transmisión en vivo","count":"{{count}} grupos","createSuccess":"Grupo creado con éxito","discussing":"Los agentes están debatiendo…","enterToSend":"Enter para enviar","expandInput":"Expandir entrada","followupHint":"Haga un seguimiento directo a un miembro. El agente conserva todo el contexto de la discusión; el intercambio se añade a la transcripción.","followupPlaceholder":"Haga una pregunta de seguimiento a este miembro…","inputDisabledApproval":"Esperando aprobación…","inputDisabledClosed":"Esta discusión está cerrada","inputDisabledCompleted":"Discusión completada","inputDisabledEnded":"Esta discusión ha finalizado","inputDisabledInProgress":"Discusión en curso…","membersCount":"{{count}} miembros","moderator":"Moderador (para la síntesis)","namePlaceholder":"p. ej. Comité asesor","newDiscussion":"Nueva discusión","newShort":"Nuevo","noModerator":"Sin moderador","noResponse":"Sin respuesta","contentTruncated":"[Contenido truncado]","protocolMaxRetries":"Reintentos máx.","protocolMaxRounds":"Rondas máx.","protocolOnFailure":"En caso de fallo","protocolSettings":"Protocolo","protocolTimeout":"Tiempo de espera","protocolUnavailable":"No disponible","question":"Pregunta","readyToDiscuss":"Listo para debatir","responding":"respondiendo…","reviewMemberRoster":"Lista de miembros","reviewMembers":"Miembros","reviewModerator":"Moderador","reviewNoModerator":"Ninguno (síntesis automática desactivada)","reviewRounds":"Rondas máx.","reviewTimeout":"Tiempo de espera del agente","reviewUnassigned":"Sin asignar","reviewUnassignedHint":"Vuelva atrás para asignar agentes antes de crear.","selectAgent":"Seleccionar agente…","selectOrStart":"Seleccione una discusión anterior del historial o escriba una pregunta abajo para iniciar una nueva.","shiftEnter":"nueva línea","skipped":"Omitido","sortByMembers":"Ordenar por miembros","sortByStyle":"Ordenar por estilo","speakingCount":"{{count}} interviniendo","startBlank":"Empezar desde cero","startDiscussion":"Debatir","stateCompleted":"Completado","stateCreated":"Creado","stateFailed":"Fallido","stateSynthesizing":"Sintetizando…","stepBasics":"Básicos","stepMembers":"Miembros","stepReview":"Revisar","stepTemplate":"Plantilla","submitShortcut":"Ctrl+Enter para enviar","synthesis":"Síntesis","synthesizing":"El moderador está sintetizando…","hitlSelectPhase":"Seleccione al menos una fase que requiera aprobación.","empty":"Sin grupos aún","emptyDescription":"Los grupos permiten que múltiples agentes colaboren en discusiones estructuradas.","createGroup":"Crear grupo","unnamed":"Grupo sin nombre","count_one":"{{count}} grupo","count_other":"{{count}} grupos","confirmDelete":"¿Eliminar este grupo?","confirmDeleteDesc":"La configuración del grupo se eliminará permanentemente.","duplicateSuccess":"Grupo duplicado","noDescription":"Sin descripción","members":"miembros","discussionStyle":"Estilo de discusión","maxRounds":"Rondas máx.","styleTaskForce":"Task Force","stateAwaitingApproval":"Pendiente de aprobación","stateCancelled":"Cancelado","phasePlan":"Planificación","phaseExecute":"Ejecución","phaseVerify":"Verificación","preConfiguredTasks":"Tareas preconfiguradas","dynamicAgents":"Agentes dinámicos","dynamicCreation":"Creación","dynamicRecruitment":"Reclutamiento","dynamicDelegation":"Delegación","lifecyclePolicy":"Ciclo de vida","allowedProviders":"Proveedores","liveIndicator":"● LIVE","htmlToggle":"HTML","memberTypeGroup":"Grupo","moderatorBadge":"⭐ Mod","styleColumn":"Estilo","membersColumn":"Miembros","memberOverflow":"+{{count}} más","defaultLabel":"Grupo","liveDiscussion":"En vivo","state":{"CREATED":"Creado","IN_PROGRESS":"En progreso","SYNTHESIZING":"Sintetizando","COMPLETED":"Completado","FAILED":"Fallido","ERROR":"Error","AWAITING_APPROVAL":"Pendiente de aprobación","CANCELLED":"Cancelado","AWAITING_HUMAN_INPUT":"Esperando a un miembro","CLOSED":"Cerrada"},"preConfiguredTasksCount":"Tareas preconfiguradas ({{count}})","entryType":{"QUESTION":"Pregunta","OPINION":"Opinión","CRITIQUE":"Crítica","REVISION":"Revisión","CHALLENGE":"Objeción","DEFENSE":"Defensa","ARGUMENT":"Argumento","REBUTTAL":"Refutación","SYNTHESIS":"Síntesis","ERROR":"Error","SKIPPED":"Omitido","PLAN":"Plan","TASK_RESULT":"Resultado de tarea","VERIFICATION":"Verificación","FOLLOW_UP":"Seguimiento","ABSTAINED":"Abstención","DISSENT":"Discrepancia","CONVERGENCE":"Convergencia","FACILITATION":"Facilitación","VOTE":"Voto","PROPOSAL":"Propuesta","BARGAIN":"Contraoferta","HUMAN_INPUT":"Aporte humano","RETRO":"Retrospectiva","BID":"Puja"},"flow":{"Opinion":"Opinión","Discussion":"Discusión","Synthesis":"Síntesis","Critique":"Crítica","Revision":"Revisión","Challenge":"Objeción","Defense":"Defensa","Independent":"Independiente","AnonymousSharing":"Compartir anónimo","Revised":"Revisado","ProOpening":"Apertura a favor","ConOpening":"Apertura en contra","Rebuttals":"Refutaciones","Judgment":"Juicio","Plan":"Planificación","Execute":"Ejecución","Verify":"Verificación","Synthesize":"Sintetizar"},"lifecycle":{"EPHEMERAL":"efímero","KEEP_DEPLOYED":"mantener desplegado","UNDEPLOY_ONLY":"solo retirar","AGENT_DECIDES":"el agente decide"},"dynamicMax":"✓ (max {{count}})","dynamicMaxPerTask":"✓ (máx. {{count}}/tarea)","protocolMaxTurns":"Turnos máx.","speakingOrderTooltip":"Orden de intervención: #{{order}}","allowedModels":"Modelos","inheritParentModel":"Heredar modelo","enabled":"Activado","disabled":"Desactivado","turnOrderSequential":"secuencial","turnOrderParallel":"paralelo","requiresApproval":"requiere aprobación","item":"elemento","items":"elementos","contextScope":{"NONE":"independiente","FULL":"contexto completo","LAST_PHASE":"última fase","ANONYMOUS":"anónimo","OWN_FEEDBACK":"feedback propio","TASK_ONLY":"solo tarea","TASK_WITH_DEPS":"tarea + dependencias"},"configuration":"Configuración","deleteGroupOnly":"Eliminar solo el grupo","deleteGroupOnlySuccess":"Grupo eliminado (agentes conservados)","deleteGroupOnlyWarning":"Esto eliminará el grupo. Todos los agentes miembros se mantendrán.","deleteGroupAndAgents":"Eliminar grupo + todos los agentes","deleteWithMembersSuccess":"Grupo y todos los agentes miembros eliminados (eliminación suave)","deleteWithMembersWarning":"Esto eliminará suavemente el grupo y todos los {{count}} agentes miembros. Se podrán recuperar.","hideDiscussions":"Ocultar panel de discusiones","showDiscussions":"Mostrar panel de discusiones","hideConfig":"Ocultar panel de configuración","showConfig":"Mostrar panel de configuración","hitlSection":"Aprobación humana","hitlApprovalPoints":"Aprobación en","hitlOnTaskRejection":"Al rechazar","hitlEdit":"Editar","hitlSaved":"Configuración de aprobación guardada","hitlEnable":"Requerir aprobación humana","hitlApprovalPhases":"Fases que requieren aprobación","hitlNotConfigured":"No hay controles de aprobación configurados — haz clic en Editar para requerir aprobación humana.","driftTitle":"La configuración del grupo cambió durante la pausa","driftRecovery":"La reanudación se abortó porque las fases del grupo cambiaron. La discusión sigue a la espera de aprobación — corrige la configuración (Editar, en el panel de Configuración) y aprueba de nuevo, o cancélala.","discussionStarted":"Discusión iniciada — transmisión en vivo","continueStarted":"Nueva ronda iniciada","followupSent":"Seguimiento enviado","discussionClosed":"Discusión cerrada","backToGroups":"Volver a Grupos","noDiscussions":"Aún no hay discusiones","askBelow":"Haga una pregunta abajo para comenzar","exitFullscreen":"Salir de pantalla completa","enterFullscreen":"Pantalla completa","discussions":"Discusiones","discussionComplete":"Discusión completada","continueDiscussion":"Continuar (nueva ronda)","followupMember":"Dar seguimiento con un miembro","closeDiscussion":"Cerrar discusión","currentRound":"Actualmente en la ronda","startNextRound":"Iniciar la siguiente ronda","selectMember":"Seleccionar un miembro","sendFollowup":"Enviar seguimiento","closeConfirmTitle":"¿Cerrar esta discusión?","closeConfirmButton":"Cerrar discusión","closeConfirmDismiss":"Volver","count_many":"{{count}} grupos","protocolMaxCost":"Límite de coste","protocolOnCostExceeded":"Al alcanzarlo","costAbort":"Abortar","costSynthesize":"Sintetizar ahora","deliberationSection":"Deliberación","recordDissents":"Voto particular","agentFiledTasks":"Tareas creadas por agentes","agentFiledCaps":"Límites","agentFiledCapsValue":"{{perDiscussion}} / debate · {{perTurn}} / turno","moderatorlessWarning":"Restringido a un moderador que este grupo no tiene: {{phases}}. El primer miembro por orden de intervención lo sustituirá.","roleCoverageWarning":"Ningún miembro tiene el rol «{{role}}»: en {{phases}} hablarán todos los miembros.","delegationDepth":"Profundidad máx.","delegationTimeout":"Tiempo del delegado","secondsShort":"{{seconds}}s","delegationTargets":"Lista permitida","phaseBehaviour":"Comportamiento de fases","phaseBehaviourNone":"Sin abstención ni convergencia configuradas: pulsa Editar para permitir pasar o detener una fase repetida al haber acuerdo.","abstentionShort":"abstención","convergenceShort":"convergencia ≥{{threshold}}","phasesSaved":"Ajustes de fase guardados","phasesNoneToEdit":"Este grupo no define fases. Elige un estilo de debate, o añade fases a la configuración, antes de ajustar su comportamiento.","phaseRepeats":"×{{repeats}}","allowAbstention":"Permitir abstención","allowAbstentionHelp":"Un miembro puede no aportar nada nuevo en esta ronda en lugar de repetirse.","convergenceEnable":"Detener antes al converger","convergenceHelp":"Un juez compara cada repetición con la anterior y termina la fase cuando los miembros dejan de moverse. Cuesta una llamada por repetición.","convergenceNeedsRepeats":"Solo disponible en una fase que se repite: una única pasada no tiene con qué compararse.","convergenceMinRepeats":"Repeticiones mín.","convergenceThreshold":"Umbral","convergenceJudge":"Juez","judgeModerator":"Moderador","judgeService":"Servicio","judgeServiceNote":"Aceptado pero aún sin conectar: el motor recurre al moderador y registra un aviso.","convergenceReached":"Convergido","convergenceChecked":"Comprobación de convergencia","convergenceScore":"acuerdo {{score}}","decisionWinner":"Ganador: {{winner}}","decisionTie":"Empate","decisionDecidedAt":"Decidido en {{phase}}","decisionUnparsed":"La respuesta del juez no pudo leerse como un veredicto estructurado: se conserva literal abajo y la conclusión queda en prosa.","minorityReport":"Voto particular ({{total}})","attachFiles":"Adjuntar archivos","attachmentLimit":"Como máximo {{max}} adjuntos por debate","attachmentTooLarge":"{{name}} es demasiado grande para adjuntar","attachmentReadFailed":"No se pudo leer {{name}}","removeAttachment":"Quitar {{name}}","decisionType":{"VERDICT":"Veredicto","VOTE":"Votación","AGREEMENT":"Acuerdo","AWARD":"Adjudicación","NONE":"Sin decisión estructurada"},"abstainedBody":"No aportó nada nuevo en esta ronda.","convergenceSkipped_one":"· {{count}} ronda adicional omitida","convergenceSkipped_many":"· {{count}} rondas adicionales omitidas","convergenceSkipped_other":"· {{count}} rondas adicionales omitidas","attachmentTotalTooLarge":"Los adjuntos superan el límite de tamaño total","convergenceInert":"Configurado, pero esta fase se ejecuta una sola vez: el juez nunca podrá actuar. Quítalo, o da a la fase más de una repetición.","questionTooLong":"Una pregunta puede tener como máximo {{max}} caracteres","charactersOverLimit":"{{current}} / {{max}} caracteres","advancedSection":"Colaboración avanzada","artifactConfigLabel":"Artefactos compartidos","artifactConfigValue":"máx. {{count}}/discusión","artifactCreatedBadge":"{{name}} creado (v{{version}})","artifactDraft":"Borrador","artifactFinal":"Final","artifactLastEdited":"Última edición de {{agent}}","artifactUpdatedBadge":"{{name}} actualizado (v{{version}})","artifactsTitle":"Artefactos compartidos ({{count}})","concessionLedgerTitle":"Registro de concesiones","contextWindowLabel":"Ventana de transcripción","contextWindowValue":"últimas {{count}} entradas{{summarized}}","facilitatorLabel":"Facilitador","facilitatorMoves":"Acciones permitidas","humanMemberConfigLabel":"Tiempo de espera del turno humano","humanTurnRequestedAt":"Solicitado","humanTurnResponsePlaceholder":"Su respuesta","humanTurnSubmit":"Enviar","humanTurnSubmitted":"Su respuesta ha sido registrada","humanTurnSubmitting":"Enviando…","humanTurnTimeout":"Tiempo de espera","humanTurnTitle":"Es su turno, {{name}}","inputDisabledHumanTurn":"Esperando el turno de un miembro…","memberTypeHuman":"Humano","negotiationAcceptedBy":"Aceptado por: {{names}}","negotiationGaveUp":"cedió","negotiationInReturnFor":"a cambio de","negotiationOpen":"Abierta","negotiationRound":"Ronda {{round}}","negotiationSuperseded":"Reemplazada","negotiationTableTitle":"Mesa de negociación","notSet":"no establecido","retroConfigLabel":"Lecciones de la retrospectiva","retroConfigValue":"{{perRun}}/ejecución, {{stored}} máx. almacenadas","stateAwaitingHumanInput":"Esperando a un miembro","summarized":"resumido","transcriptWindowed":"Las primeras {{count}} entradas de la transcripción se han condensado en un resumen continuo para limitar el contexto de los turnos posteriores. Pase el cursor para ver el resumen.","voteMethod":"Método","voteMethodApproval":"Aprobación","voteMethodMajority":"Mayoría","voteOptionsExplicit":"Lista explícita","voteOptionsLastSynthesis":"Extraer de la última síntesis","voteOptionsList":"Opciones (una por línea)","voteOptionsSource":"Opciones de la votación","voteQuorum":"Quórum","voteTieHuman":"Decide un humano (aún no disponible)","voteTieModerator":"Decide el moderador","voteTieNoDecision":"Sin decisión","voteTiePolicy":"En caso de empate","voteWeightByConfidence":"Ponderar por confianza","waitIndefinitely":"Esperar indefinidamente","advancedSaved":"Ajustes de colaboración guardados","advancedNotConfigured":"Sin ventana de transcripción, memoria retro, artefactos compartidos ni facilitador configurados: haga clic en Editar para activarlos.","contextWindowHint":"Acota el contexto de cada turno en discusiones largas plegando las entradas antiguas en un resumen continuo.","contextWindowEntries":"Entradas recientes conservadas completas","contextWindowSummarize":"Resumir lo que sale de la ventana","contextWindowTruncateNote":"Las entradas antiguas se sustituyen por una marca simple: «N entradas anteriores omitidas».","retroConfigHint":"Permite que una fase retro escriba lecciones en la memoria del equipo, que se arrastran a discusiones posteriores.","retroPerRun":"Por ejecución","retroStored":"Máximo almacenado","artifactConfigHint":"Permite que los miembros redacten juntos documentos que sobreviven al turno en que se escribieron.","artifactsPerDiscussion":"Máximo por discusión","facilitatorHint":"Un agente que interviene en cada punto de control y elige un solo movimiento de la lista permitida: nunca un orquestador libre.","facilitatorAgent":"Agente facilitador","facilitatorPickAgent":"Seleccione un agente…","facilitatorAgentRequired":"Elija el agente que facilitará.","facilitatorCheckAfter":"Punto de control","facilitatorCheckpoint":{"EACH_PHASE":"Tras cada fase","EACH_REPEAT":"Tras cada ronda dentro de una fase"},"facilitatorMove":{"CONTINUE":"Continuar","END_PHASE":"Terminar la fase antes de tiempo","EXTEND_PHASE":"Prolongar la fase","CALL_VOTE":"Convocar una votación","RECRUIT":"Incorporar a un miembro","ESCALATE_HUMAN":"Escalar a una persona"},"facilitatorNoMove":"Permita al menos un movimiento, o desactive el facilitador.","facilitatorMidPhaseNeedsRepeat":"Terminar o prolongar una fase actúa a mitad de fase, así que requiere el punto de control por ronda.","facilitatorEscalateTo":"Escalar a (id de principal)","facilitatorEscalateRequired":"La escalada pausa la discusión para alguien: indique para quién.","facilitatorMaxMoves":"Movimientos máx. por discusión","assignmentModeLabel":"Asignación de tareas","assignmentModeRole":"Por rol (asigna el planificador)","assignmentModeBid":"Por puja (los miembros pujan, gana la mayor confianza)","assignmentModeBidShort":"Por puja","assignmentModeRoleHint":"El planificador o la configuración asigna cada tarea, o por turnos rotativos.","assignmentModeBidHint":"Vuelve a la asignación por rol cuando una subasta no se amortiza: menos de dos pujadores o dos tareas abiertas, o presupuesto de turnos insuficiente.","contextWindowSummarizer":"Resumidor","contextWindowNoSummarizer":"Ninguno","contextWindowModel":"Modelo de resumen","contextWindowModelPlaceholder":"modelo","contextWindowSummarizerMissing":"Sin modelo de resumen, el desbordamiento recae silenciosamente en la marca simple de truncado.","facilitatorMaxMovesCeiling":"Como máximo {{max}}: el facilitador es una intervención acotada, no un orquestador.","reviewUnassignedWarning_many":"{{count}} miembros sin asignar","reviewUnassignedWarning_one":"{{count}} miembro sin asignar","reviewUnassignedWarning_other":"{{count}} miembros sin asignar","retroRecordedBadge_many":"{{phase}}: {{count}} lecciónes guardadas en la memoria del equipo","retroRecordedBadge_one":"{{phase}}: {{count}} lección guardadas en la memoria del equipo","retroRecordedBadge_other":"{{phase}}: {{count}} lecciónes guardadas en la memoria del equipo","artifactRevisions_many":"{{count}} revisiones anteriores","artifactRevisions_one":"{{count}} revisión anterior","artifactRevisions_other":"{{count}} revisiones anteriores","styles":{"ROUND_TABLE":{"label":"Mesa redonda","flow":"Cada miembro expone su punto de vista y se apoya en los demás durante varias rondas"},"PEER_REVIEW":{"label":"Revisión entre pares","flow":"Cada uno responde por su cuenta, se critican mutuamente y luego revisan"},"DEVIL_ADVOCATE":{"label":"Abogado del diablo","flow":"Un miembro ataca la posición del grupo y el resto la defiende"},"DELPHI":{"label":"Rondas anónimas","flow":"Todos responden de forma anónima y revisan en cada ronda, sin anclarse en quien habló primero"},"DEBATE":{"label":"Debate a favor/en contra","flow":"Un bando argumenta a favor y otro en contra; después vienen las réplicas y el veredicto"},"TASK_FORCE":{"label":"Grupo de trabajo","flow":"La moderación planifica, los miembros ejecutan tareas en paralelo y los resultados se verifican"},"NEGOTIATION":{"label":"Negociación","flow":"Las partes intercambian propuestas hasta llegar a un acuerdo; solo si no lo hay interviene un árbitro"},"CUSTOM":{"label":"Flujo personalizado","flow":"Fases que defines tú"}},"unsupportedStyle":"Este servidor no admite {{style}}. Elige otro marco para continuar."}'),J={title:"Tablero de tareas",pending:"Pendiente",inProgress:"En progreso",completed:"Completado",verified:"Verificado",failed:"Fallido",assignedTo:"Asignado a {{name}}",dependsOn:"Depende de: {{tasks}}",emptyTitle:"Esperando plan de tareas",emptyDescription:"El moderador creará un plan de tareas una vez que comience la discusión.",emptyState:"El plan de tareas aparecerá aquí cuando el moderador lo cree",unassigned:"Sin asignar",progress:"{{done}} de {{total}} tareas completadas",verificationPassed:"Aprobado",verificationFailed:"Fallido",showMore:"mostrar más",showLess:"mostrar menos",awaitingApproval:"Esperando aprobación",filedBy:"Creada por {{agent}}",wonByBid:"Ganado por puja — {{confidence}}% de confianza, {{complexity}}"},Q={title:"Memoria del usuario",subtitle:"Explorar y gestionar los recuerdos persistentes almacenados por los agentes",userIdPlaceholder:"Introduzca el ID de usuario…",searchPlaceholder:"Buscar en los recuerdos…",enterUserId:"Introduzca un ID de usuario para explorar sus recuerdos",totalEntries:"Total de entradas",preferences:"Preferencias",facts:"Hechos",conflicts:"Conflictos",cat_all:"Todo",cat_preference:"Preferencias",cat_fact:"Hechos",cat_context:"Contexto",deleteAll:"Eliminar todo",deleteAllTitle:"Eliminar todos los recuerdos",deleteAllDesc:"Se eliminarán permanentemente todos los recuerdos de este usuario. Esta acción no se puede deshacer.",deleteAllConfirm:"Eliminar todo",entryDeleted:"Entrada eliminada",allDeleted:"Todos los recuerdos del usuario eliminados",noResults:"No se encontraron entradas",value:"Valor",sourceAgent:"Agente de origen",accessCount:"Accesos",created:"Creado",updated:"Actualizado",sourceConversation:"Conversación de origen",conflicted:"En conflicto"},Y={title:"Propiedades del usuario",subtitle:"Explorar y gestionar las propiedades longTerm almacenadas por usuario",userIdPlaceholder:"Introduzca el ID de usuario…",searchPlaceholder:"Filtrar propiedades…",enterUserId:"Introduzca un ID de usuario para ver sus propiedades",key:"Clave",type:"Tipo",value:"Valor",deleteAll:"Eliminar todo",deleteAllTitle:"Eliminar todas las propiedades",deleteAllDesc:"Se eliminarán permanentemente todas las propiedades de este usuario.",deleted:"Propiedades eliminadas",noResults:"No se encontraron propiedades",showingCount:"{{count}} propiedades"},$={agentId:"ID de agente",environment:"Entorno",title:"Disparadores de agentes",subtitle:"Asociar intenciones a despliegues de agentes para enrutamiento automático",create:"Nuevo disparador",createTitle:"Crear disparador",editTitle:"Editar disparador",intent:"Intención",deployments:"Despliegues de agentes",addDeployment:"Añadir agente",agents:"agentes",empty:"Aún no hay disparadores configurados",created:"Disparador creado",updated:"Disparador actualizado",deleted:"Disparador eliminado",deleteTitle:"Eliminar disparador",deleteDesc:"¿Eliminar permanentemente el disparador para la intención «{{intent}}»?",searchPlaceholder:"Filtrar por intención o ID de agente…"},Z={agentCount:"Agentes",confidence:"Confianza",partialError:"Algunas consultas de habilidades fallaron",registryOverview:"Resumen del registro",skillName:"Habilidad",skills:"habilidades",title:"Descubrimiento de capacidades",subtitle:"Descubrir agentes por sus habilidades y capacidades declaradas",searchPlaceholder:"Buscar habilidades…",strategyHighest:"Mayor confianza",strategyAll:"Todos los resultados",registeredSkills:"Habilidades registradas",noSkills:"No se encontraron habilidades",matchingAgents:"Agentes coincidentes",noMatches:"No se encontraron agentes para esta habilidad"},X={title:"Exportar agente",loading:"Cargando árbol de recursos…",selectResources:"Seleccionar recursos a exportar",required:"Requerido",snippets:"Fragmentos",allSelected:"Todos los recursos seleccionados",countSelected:"{{count}} de {{total}} recursos seleccionados",exportSelected:"Exportar seleccionados"},ee={title:"Importar agente",dropZone:"Arrastre un archivo .zip aquí o haga clic para explorar",dropZoneHint:"Archivo de agente exportado (.zip)",strategyLabel:"Estrategia de importación",createNew:"Crear como nuevo agente",createNewDesc:"Crea una copia con nuevos identificadores. Ideal para la primera importación.",mergeSync:"Fusionar con existente",mergeSyncDesc:"Actualiza recursos existentes. Crea nuevos si no se encuentran.",upgradeExisting:"Actualizar agente existente",upgradeDesc:"Hacer coincidir recursos estructuralmente con un agente destino. Ideal para promover entre entornos.",syncRemote:"Sincronizar desde instancia remota",syncDesc:"Conéctese a otra instancia de EDDI y sincronice un agente en directo.",importNow:"Importar ahora",previewChanges:"Vista previa de cambios",selectTargetAgent:"Seleccionar agente destino",upgradeTargetHint:"Los recursos importados se harán coincidir estructuralmente con este agente.",chooseAgent:"— Elegir agente —",sourceAgent:"Agente origen (remoto)",targetAgent:"Agente destino (local)",createNewTarget:"Crear nuevo agente",resource:"Recurso",type:"Tipo",match:"Correspondencia",action:"Acción",new:"nuevo",updated:"actualizado",unchanged:"sin cambios",selected:"seleccionados",mergeNow:"Importar seleccionados",syncNow:"Sincronizar ahora",upgradeNow:"Actualizar ahora",importing:"Importando agente…",contentIdentical:"Contenido idéntico",targetContent:"Destino",sourceContent:"Origen"},ae={title:"Sincronización de agentes",subtitle:"Sincronizar agentes entre instancias de EDDI",connection:"Instancia origen",sourceUrl:"URL de la instancia EDDI de origen",authToken:"Token de autorización",authHint:"Opcional. Se envía como encabezado X-Source-Authorization.",connect:"Conectar",connected:"Conectado",agentsFound:"agentes",connectionFailed:"Error de conexión",agentMapping:"Mapeo de agentes",previewAll:"Vista previa de todo",syncSelected:"Sincronizar seleccionados",remote:"Remoto",createNew:"Crear nuevo",changes:"cambios",agentsSelected:"agentes seleccionados",totalResources:"recursos",syncSuccess:"Sincronización completada",syncError:"Error de sincronización",empty:"Conéctese a una instancia de origen para comenzar la sincronización de agentes.",autoMatched:"Correspondencia automática",previewFirst:"Vista previa de los cambios antes de sincronizar"},oe={actionCreate:"Nuevo",actionUpdate:"Actualizar",actionSkip:"Actualizado",actionConflict:"Conflicto"},re={title:"Conversaciones de usuario",subtitle:"Gestionar vínculos de intent → usuario → conversación",lookup:"Búsqueda",intent:"Intención",userId:"ID de usuario",agentId:"ID de agente",environment:"Entorno",conversationId:"ID de conversación",binding:"Vínculo activo",enterBoth:"Ingrese intent e ID de usuario",notFound:"No se encontró vínculo",create:"Crear vínculo",createTitle:"Crear vínculo",created:"Vínculo creado",deleteTitle:"Eliminar vínculo",deleteDesc:'¿Eliminar el vínculo para intent "{{intent}}" y usuario "{{userId}}"?',deleted:"Vínculo eliminado"},ne={placeholder:"Buscar páginas, agentes, acciones…",noResults:"Sin resultados.",recent:"Recientes",navigate:"Navegar",agents:"Agentes",actions:"Acciones rápidas",createAgent:"Crear nuevo agente",openChat:"Abrir chat",kbdNavigate:"navegar",kbdSelect:"seleccionar",kbdClose:"cerrar"},te={groupMemberHint:"Este grupo participará como subgrupo anidado en la discusión.",noGroupsHint:"Cree primero un grupo y luego añádalo como miembro subgrupo anidado.",noGroupsYet:"No hay grupos disponibles",selectGroup:"Seleccionar grupo existente…",title:"Asistente de grupo",subtitle:"Forme un equipo de asesores IA para discutir sus preguntas",backToGroups:"Volver a grupos",templateTitle:"Empezar con plantilla",templateDesc:"Elija una configuración predefinida o empiece desde cero.",startBlank:"Desde cero",blankDesc:"Configurar todo manualmente",configTitle:"Configuración del grupo",configDesc:"Nombre su grupo y elija el estilo de discusión",namePlaceholder:"Ej. Comité asesor",descPlaceholder:"¿Para qué es este grupo?",membersTitle:"Forme su equipo",membersDesc:"Para cada puesto, elija un agente existente o cree uno nuevo.",addMember:"Añadir miembro",refreshAgents:"Actualizar lista",existingAgents:"agentes existentes",displayName:"Nombre del agente",displayNamePlaceholder:"Dé un nombre a este agente…",rolePlaceholder:"Rol (ej. Marketing, Ingeniería)",useExisting:"Usar existente",createNew:"Crear nuevo",selectAgent:"Seleccionar agente…",systemPrompt:"Prompt del sistema",provider:"Proveedor LLM",model:"Modelo",apiKey:"Clave API",apiKeyPlaceholder:"sk-…",createThisAgent:"Crear agente",creatingAgent:"Creando agente…",agentReady:"Agente creado y desplegado",agentCreated:'Agente "{{name}}" creado',agentCreateFailed:"Error al crear agente: {{error}}",moderator:"Moderador",moderatorHint:"Sintetiza la discusión",addModerator:"Añadir moderador",removeModerator:"Quitar moderador",createModerator:"Crear agente moderador",moderatorReady:"Agente moderador listo",moderatorCreated:"Agente moderador creado",creatingModerator:"Creando moderador…",creatingSlot:"Creando {{name}}…",creatingGroup:"Creando grupo…",needMembers:"Añada al menos 2 miembros",reviewTitle:"Revisar y crear",reviewDesc:"Revise la configuración antes de crear.",reviewMembers:"Miembros",autoCreateNotice:"{{count}} agentes se crearán automáticamente",autoCreateHint:"Cada agente será creado y desplegado automáticamente.",unassignedWarning:"{{count}} miembros sin agente asignado",unassignedHint:"Estos miembros serán omitidos. Vuelva para asignar agentes.",flowPreview:"Flujo de discusión",createGroup:"Crear grupo",created:"¡Grupo creado!",viewGroup:"Abrir grupo",createAnother:"Crear otro",success:"¡Grupo creado exitosamente!",advancedSettings:"Configuración avanzada del protocolo",agentTimeout:"Tiempo de espera del agente (segundos)",maxRetries:"Reintentos máx.",onAgentFailure:"En caso de fallo del agente",onMemberUnavailable:"Si miembro no disponible",maxTurns:"Turnos máx. (0 = ilimitado)",maxTurnsHelp:"Límite de seguridad para el total de turnos de agente. El límite predeterminado del backend es 50.",policySkip:"Omitir",policyRetry:"Reintentar",policyAbort:"Abortar",policyFail:"Fallar",hintDebate:"Asigne los roles PRO y CON a los miembros. Pro argumenta primero, luego Con, seguido de réplicas y juicio.",hintDevilAdvocate:"Asigne el rol DEVIL_ADVOCATE a al menos un miembro. Cuestionará el consenso del grupo.",hintPeerReview:"Cada miembro critica individualmente el trabajo de los demás, luego revisa basándose en los comentarios recibidos.",hintDelphi:"Todos los miembros responden de forma independiente y anónima. Después de cada ronda, ven los resultados anónimos y pueden ajustar. Turnos máx. controla el número de iteraciones anónimas.",hintNegotiation:"Los miembros exponen sus intereses, presentan propuestas y luego negocian: «Rondas máximas» fija cuántas rondas de regateo se ejecutan. La moderación arbitra solo si no se llega a un acuerdo.",roleCoverageWarning:"Ningún miembro tiene el rol «{{role}}»",roleCoverageHint:"El servidor recurre a que hablen todos los miembros en {{phases}}, así que las mismas personas defienden ambas posturas. Vuelve a «Miembros» y completa el campo de rol.",hintTaskForce:"El moderador crea un plan de tareas, asigna trabajo a los agentes en paralelo, luego verifica y sintetiza los resultados.",hintCustom:"Defina sus propias fases manualmente. Las fases personalizadas se pueden configurar a través de la API después de la creación.",hintRoundTable:"Todos los miembros comparten sus opiniones, luego discuten los puntos de vista de los demás en varias rondas antes de que el moderador sintetice.",protocolSummary:"Protocolo",hitlTitle:"Requerir aprobación humana",hitlDesc:"Pausar la discusión en las fases elegidas y esperar una decisión humana antes de continuar.",hitlApprovalPoints:"Pausar para aprobación en",hitlNoPhases:"Este estilo no tiene fases predefinidas para controlar.",hitlNoApprovalPoints:"Selecciona al menos una fase, o la discusión nunca se pausará.",hitlTimeoutPolicy:"Si no hay decisión a tiempo",hitlApprovalTimeout:"Tiempo de espera de aprobación",hitlTimeoutInvalid:"Introduce una duración ISO-8601 positiva, p. ej. PT15M o PT1H30M.",hitlTimeoutHint:"Duración ISO-8601, p. ej. PT30S, PT15M, PT2H.",hitlGranularity:"Granularidad de aprobación",hitlGranularityHint:"La aprobación por tarea se aplica a la ejecución de TASK_FORCE — aprueba o rechaza cada tarea individualmente.",hitlOnTaskRejection:"Cuando se rechaza una tarea",hitlPinNote:"Activar puntos de aprobación fija las fases de discusión de este grupo (granularidad {{granularity}}).",hitlReviewBadge:"Aprobación humana",humanOnTimeoutAbort:"Cancelar la discusión",humanOnTimeoutLabel:"Al agotarse el tiempo",humanOnTimeoutSkip:"Omitir su turno y continuar",humanPrincipalId:"ID de principal",humanPrincipalIdHint:"La identidad que puede enviar los turnos de este miembro — la discusión se pausa y espera cuando le toca hablar.",humanPrincipalIdPlaceholder:"ID de inicio de sesión/principal del usuario",humanTurnSettingsHint:"La discusión se pausa y espera cuando le toca hablar a un miembro humano. Elija qué ocurre si no responde a tiempo.",humanTurnSettingsTitle:"Configuración del turno de miembros humanos",humanTurnTimeoutInvalid:"No es una duración ISO-8601 válida, p. ej. PT24H o P1D.",humanTurnTimeoutLabel:"Tiempo de espera del turno (duración ISO-8601)",humanTurnTimeoutPlaceholder:"p. ej. PT24H — en blanco espera indefinidamente",memberTypeHuman:"Humano"},se={advisoryBoard:"Consejo asesor",advisoryBoardDesc:"Cinco perspectivas de negocio —marketing, ingeniería, finanzas, legal y estrategia— opinan sobre la misma pregunta y la moderación resume.",peerReview:"Panel de revisión entre pares",peerReviewDesc:"Los revisores valoran lo que aportes —un borrador, un plan, una propuesta—, critican la valoración de los demás, revisan y la moderación integra el resultado.",riskAssessment:"Evaluación de riesgos",riskAssessmentDesc:"Cada uno da su lectura, un miembro defiende lo contrario para sacar a la luz puntos ciegos, los demás replican y la moderación resume lo que se sostuvo.",forecasting:"Estimaciones independientes",forecastingDesc:"Los miembros responden de forma anónima durante varias rondas y solo ven resultados anonimizados entre ellas, así nadie se ancla en quien habló primero.",proCon:"Debate a favor/en contra",proConDesc:"Dos miembros argumentan a favor de la propuesta y dos en contra; después vienen las réplicas y el veredicto de la moderación.",negotiation:"Negociación",negotiationDesc:"Dos partes exponen sus intereses, presentan propuestas e intercambian concesiones ronda a ronda; la moderación arbitra solo si no hay acuerdo.",taskForce:"Grupo de trabajo",taskForceDesc:"La moderación divide el objetivo en tareas, los miembros las ejecutan en paralelo y la moderación verifica y combina los resultados.",roles:{marketingExpert:"Experto en marketing",techLead:"Líder técnico",financeDirector:"Director financiero",legalCounsel:"Asesor legal",strategyConsultant:"Consultor de estrategia",substanceReviewer:"Revisor de contenido",structureReviewer:"Revisor de estructura",riskReviewer:"Revisor de riesgos",riskAnalyst:"Analista de riesgos",domainExpert:"Experto de dominio",devilsAdvocate:"Abogado del diablo",analystA:"Analista A",analystB:"Analista B",analystC:"Analista C",analystD:"Analista D",proAdvocate1:"Defensor a favor 1",proAdvocate2:"Defensor a favor 2",conAdvocate1:"Defensor en contra 1",conAdvocate2:"Defensor en contra 2",partyA:"Parte A",partyB:"Parte B",projectLead:"Líder de proyecto",researcher:"Investigador",implementer:"Implementador",qualityAssurance:"Control de calidad"},assignRoles:"Asignar roles",backToGallery:"Volver a las plantillas",browseButton:"Desde plantilla",createButton:"Crear grupo",created:"Grupo creado a partir de la plantilla",nameLabel:"Nombre del grupo",selectAgent:"Seleccionar un agente…",subtitle:"Comience con una discusión empaquetada y preajustada — solo asigne agentes a sus roles con nombre.",title:"Plantillas de grupo",roleCount_many:"{{count}} roles por asignar",roleCount_one:"{{count}} rol por asignar",roleCount_other:"{{count}} roles por asignar",empty:"No hay plantillas disponibles",emptyDescription:"Este servidor no incluye plantillas de grupo. Aún puede crear un grupo desde cero con el asistente."},ie={agentIdPlaceholder:"ID del agente para gestionar mensajes",botToken:"Token del bot",botTokenHint:"Token OAuth del bot. Use una referencia de bóveda para mayor seguridad.",botTokenPlaceholder:"xoxb-… o ${vault:slack-bot-token}",channel:"canal",channelId:"ID del canal de Slack",channelIdCol:"ID del canal",channelIdHint:"Clic derecho en un canal de Slack → Ver detalles del canal → copiar el ID del canal",channelsPlural:"canales",channelType:"Tipo de canal",confirmDelete:"¿Eliminar canal?",confirmDeleteDesc:"Esta integración de canal se eliminará permanentemente.",create:"Crear canal",createTitle:"Crear integración de canal",defaultAgentId:"ID del agente predeterminado",defaultTargetHint:"El destino predeterminado gestiona todos los mensajes que no coinciden con una palabra clave de activación. Puede agregar más destinos después de la creación.",empty:"Aún no hay canales",emptyDesc:"Cree una integración de canal para conectar agentes a Slack.",name:"Nombre",namePlaceholder:"p. ej. Engineering AI Hub",openSlackApps:"Abrir panel de Slack App",searchPlaceholder:"Buscar canales…",signingSecret:"Secreto de firma",signingSecretHint:"Desde la página de Información básica de su aplicación Slack.",signingSecretPlaceholder:"Cadena hex o ${vault:slack-signing-secret}",slackSetupGuide:"Guía de configuración de Slack",slackSetupSummary:"Cree una aplicación Slack, configure los permisos del token del bot (app_mentions:read, chat:write, im:history, channels:history, groups:history) y pegue las credenciales aquí.",target:"destino",targets:"destinos",targetsCol:"Destinos",type:"Tipo",unnamed:"Canal sin nombre",version:"Versión"},ce={saveSuccess:"Canal guardado",addTarget:"Agregar destino",addTrigger:"Agregar activador…",agentId:"ID del agente",botToken:"Token del bot",channelId:"ID del canal de Slack",cooldown:"Enfriamiento (s)",general:"General",groupId:"ID del grupo",isDefault:"predeterminado",maxCost:"Máx. $/día",maxDaily:"Máx./día",name:"Nombre",observe:"Observar",observeDesc:"Supervisar pasivamente y responder selectivamente",observeKeywords:"Palabras clave de activación",observeMimeTypes:"Tipos MIME de activación",observeMode:"Modo observación",observeSettings:"Configuración del modo observación",platformConfig:"Configuración de la plataforma",rawConfig:"Configuración sin procesar",removeTarget:"Eliminar",requiredEvents:"Suscripciones de eventos requeridas:",requiredScopes:"Permisos de token del bot requeridos:",setDefault:"Establecer como predeterminado",signingSecret:"Secreto de firma",targetName:"Nombre",targets:"Destinos de enrutamiento de mensajes",targetType:"Tipo",triggerHint:'Los usuarios escriben "palabra clave: mensaje" para enrutar a este destino',triggerKeywords:"Palabras clave de activación",triggers:"activadores",type:"Tipo de canal",webhookHint:"Pegue esta URL en el campo Request URL de Event Subscriptions de su aplicación Slack.",webhookUrl:"URL del webhook",hitlSection:"Aprobaciones con intervención humana (opcional)",hitlApprovalChannel:"ID del canal de aprobación",hitlApprovalChannelHint:"Canal de Slack que recibe una tarjeta de aprobación cuando una conversación se pausa.",hitlApproverUserIds:"IDs de usuario aprobadores",hitlApproverUserIdsHint:"IDs de usuario de Slack separados por comas con permiso para aprobar mediante botones. Sin esta lista, los botones no se muestran (cierre seguro)."},le={loadingApprovalDetails:"Cargando detalles de aprobación…",pendingCount:"{{count}} pendientes de aprobación",approvalDetailsError:"No se pudo cargar lo que haría esta solicitud, así que no puede aprobarse desde aquí. Rechazarla sigue siendo seguro.",awaitingHuman:"Esperando humano",awaitingApproval:"Esperando aprobación",approve:"Aprobar",reject:"Rechazar",cancel:"Cancelar",approved:"Aprobado",rejected:"Rechazado",cancelled:"Cancelado",pending:"pendiente",emptyQueue:"Sin aprobaciones pendientes",emptyQueueDescription:"Todas las conversaciones fluyen — no se necesita intervención humana.",surface:"Superficie",regular:"Conversación",group:"Grupo",pauseReason:"Razón",pausedAt:"Pausado",timeoutPolicy:"Tiempo límite",timeRemaining:"Restante",overdue:"Vencido",phase:"Fase",granularity:"Granularidad",taskApprovals:"Aprobaciones de tareas",approveAll:"Aprobar todo",note:"Agregar nota (opcional)",notePlaceholder:"Agregar una nota para la decisión...",discussionCancelled:"Discusión cancelada",cancelDiscussion:"Cancelar discusión",rejectAll:"Rechazar todo",timeoutWaitIndefinitely:"Esperar indefinidamente",timeoutAutoApprove:"Auto-aprobar",timeoutAutoReject:"Auto-rechazar",timeoutAbort:"Anular",granularityPhase:"Fase",granularityTask:"Tarea",rejectionFail:"Marcar la tarea como fallida",rejectionRetry:"Reintentar la tarea",groupsTruncated:"Existen más aprobaciones de grupo de las que se muestran aquí.",groupsLoadError:"No se pudieron cargar las aprobaciones de grupo.",toolApprovalRequired:"Se requiere aprobación de herramienta",toolCallsAwaiting:"Llamadas de herramienta pendientes de aprobación",executedUngated:"Ya ejecutada (sin control)",outcomeUnknown:"Una aprobación anterior se interrumpió durante la ejecución — su efecto es desconocido; verifícalo externamente antes de reintentar.",outcomeUnknownShort:"resultado desconocido",toolApprovalHint:"Aprobar aplica tus elecciones por llamada (las que no modificaste quedan aprobadas). Rechazar rechaza todo el lote.",toolApprovalHintExplicit:"Cada llamada necesita su propia aprobación o rechazo antes de poder aprobar el lote. Rechazar rechaza todo el lote.",explicitReviewMissing:"Revisa cada llamada de arriba antes de aprobar.",redactionCaveat:"Los argumentos que se muestran abajo están redactados — un valor secreto aparece como «», no se omite.",gateReason:"Patrón coincidente",argsTruncated:"argumentos truncados",amendArguments:"Modificar argumentos (opcional)",amendPlaceholder:'Objeto JSON de reemplazo completo, p. ej. {"to":"ops@acme.com"}. Déjalo en blanco para conservar el original.',amendTruncated:"No se puede modificar una llamada cuyos argumentos fueron truncados — apruébala o recházala tal cual.",amendInvalidJson:"Los argumentos modificados deben ser un objeto JSON válido.",amendTooLarge:"Los argumentos modificados son demasiado grandes.",review:"Revisar",tool:"Herramienta",scopeAll:"Mostrando todas las aprobaciones pendientes del sistema.",scopeOwn:"Mostrando las aprobaciones pendientes de tus conversaciones.",chatPaused:"Esta conversación está a la espera de aprobación humana.",noProgressWaitForHuman:"Esperar a una persona",noProgressAutoReject:"Rechazo automático",noProgressAbort:"Abortar",confirmApproveTitle:"¿Aprobar la solicitud?",confirmApproveDescription:"¿Aprobar y reanudar esta conversación?",confirmApproveToolTitle:"¿Aprobar la ejecución de la herramienta?",confirmApproveToolDescription:"Al aprobar se ejecutará: {{toolNames}}. Esto realiza acciones reales y no se puede deshacer.",confirmRejectTitle:"¿Rechazar la solicitud?",confirmRejectDescription:"¿Rechazar esta solicitud? La conversación no continuará.",confirmCancelTitle:"¿Cancelar la conversación?",confirmCancelDescription:"¿Cancelar esta conversación? Cualquier trabajo en curso se abortará.",confirmCancelButton:"Cancelar conversación",confirmCancelGroupTitle:"¿Cancelar la discusión?",confirmCancelGroupDescription:"¿Cancelar esta discusión? Cualquier trabajo en curso se abortará.",confirmCancelGroupButton:"Cancelar discusión",confirmDismiss:"Volver",approvalBlockedHeading:"Esto no se puede aprobar aquí",confirmRejectToolTitle:"¿Rechazar la ejecución de la herramienta?",confirmRejectToolDescription:"No se ejecutará nada. La conversación continúa y el agente responde sin {{toolNames}}.",humanTurn:"Turno del miembro",humanTurnReason:"Esperando a que {{member}} hable",humanTurnMemberFallback:"un miembro",decidedProgress:"{{decided}} de {{total}} decididas"},de={deploying:"Desplegando agente…",error:"Algo salió mal",newConversation:"Nueva conversación",ready:"Listo — escriba un mensaje para probar",retry:"Reintentar",saving:"Guardando cambios…",starting:"Iniciando conversación…",timeout:"El despliegue superó el tiempo de espera",title:"Chat de prueba",preparing:"Preparando…"},ue={auditTrail:"Registro de auditoría",checking:"Verificando…",coordConnected:"Coordinador conectado",coordDisconnected:"Coordinador desconectado",coordUnknown:"Coordinador —",createGroup:"Crear grupo",noConversations:"Aún no hay conversaciones",offline:"Sin conexión",online:"En línea",platform:"Plataforma",platformHealth:"Estado de la plataforma",recentConversations:"Conversaciones recientes",secretVault:"Bóveda de secretos",vaultDown:"Vault no disponible",vaultUp:"Vault listo",viewLogs:"Ver registros"},pe={retry:"Reintentar",title:"Algo salió mal"},me={auditPseudonymized:"Auditoría seudonimizada",checkingStatus:"Verificando...",confirmDelete:"Sí, eliminar todos los datos",confirmDesc:'Esto eliminará permanentemente TODOS los datos del usuario "{{userId}}". Esta acción no se puede deshacer.',confirmTitle:"Confirmar la eliminación de datos",conversationsDeleted:"Conversaciones eliminadas",delete:"Eliminar todos los datos",deleteSuccess:"Datos del usuario eliminados con éxito",deleting:"Eliminando...",enterUserIdFirst:"Introduzca un ID de usuario arriba para comprobar el estado",export:"Exportar datos",exportSuccess:"Datos del usuario exportados con éxito",exporting:"Exportando...",legalDesc:"La exportación de datos (Art. 15/20) proporciona un archivo JSON con todos los datos almacenados de un usuario. La eliminación (Art. 17) borra permanentemente todos los recuerdos y datos de conversación, seudonimiza las entradas de auditoría y no se puede deshacer.",legalNotice:"Aviso de protección de datos",liftRestriction:"Levantar la restricción",liftingRestriction:"Levantando...",logsPseudonymized:"Registros seudonimizados",memoriesDeleted:"Recuerdos eliminados",restrictProcessing:"Restringir el procesamiento",restricting:"Restringiendo...",restrictionApplied:"Procesamiento restringido para el usuario",restrictionDesc:"Restrinja el procesamiento cuando un usuario impugne la exactitud de los datos u objete su procesamiento. Mientras esté restringido, los datos del usuario se conservan pero no se pueden procesar nuevas conversaciones. Es reversible.",restrictionLifted:"Restricción de procesamiento eliminada",restrictionTitle:"Restricción del procesamiento (Art. 18)",resultsTitle:"Borrado completado",statusActive:"Procesamiento activo",statusUnknown:"Estado no disponible",statusRestricted:"Procesamiento restringido",subtitle:"Gestión de datos de usuario conforme al RGPD — borrado (Art. 17), portabilidad (Art. 15/20) y restricción del procesamiento (Art. 18)",title:"Privacidad y cumplimiento",userId:"ID de usuario",userIdPlaceholder:"Introduzca el ID de usuario...",userLookup:"Búsqueda de usuario"},ge={message:"Modo demo — Se muestran datos de ejemplo. Conecte un backend de EDDI para ver datos reales."},ve={confirmPurgeAll:"¿Eliminar permanentemente TODOS los {{count}} recursos huérfanos? El servidor purga todos — tu selección no se aplica. Esto no se puede deshacer.",deleteSelected:"Eliminar {{count}} seleccionados",description:"Encuentre y limpie los recursos no referenciados por ningún agente o paquete.",deselectAll:"Deseleccionar todo",includeDeleted:"Incluir eliminados temporalmente",lastScanned:"Último escaneo",noOrphans:"No se encontraron huérfanos",purge:"Purgar todo",purgeSuccess:"{{count}} huérfanos eliminados",runScan:"Ejecutar escaneo",scan:"Escanear",scanPromptDesc:"Encuentre configuraciones de extensión (reglas, llamadas API, LLM, salidas) que no estén referenciadas por ningún workflow o agente. Limpie los recursos sin usar para mantener su plataforma ordenada.",scanPromptTitle:"Escanee su plataforma",scanning:"Escaneando recursos…",selectAll:"Seleccionar todo",softDeleted:"Eliminado",title:"Detección de huérfanos",found_many:"{{count}} huérfanos encontrados",found_one:"{{count}} huérfano encontrado",found_other:"{{count}} huérfanos encontrados"},be={apiCallsMinute:"Llamadas API / minuto",configuration:"Configuración",conversationsToday:"Conversaciones de hoy",description:"Configure límites de tasa, topes de uso y presupuestos de coste por inquilino.",disable:"Desactivar",disabled:"Desactivado",enable:"Activar",enabled:"Activado",enforcementOff:"La aplicación está desactivada.",enforcementOffHint:"Las cuotas no se están aplicando. Active la aplicación y guarde para empezar a aplicar los límites.",limitHint:"-1 = ilimitado",liveUsage:"Uso en vivo",maxAgentsPerTenant:"Máx. agentes / inquilino",maxApiCallsPerMinute:"Máx. llamadas API / minuto",maxConversationsPerDay:"Máx. conversaciones / día",maxMonthlyCostUsd:"Coste mensual máx. (USD)",monthlyCost:"Coste mensual",resetConfirmDesc:"Pone a cero de inmediato todos los contadores de uso (conversaciones, llamadas API, coste mensual) del inquilino «default». No se puede deshacer.",resetConfirmTitle:"¿Restablecer los contadores de uso?",resetCounters:"Restablecer contadores",resetSuccess:"Contadores de uso restablecidos",saveSuccess:"Cuota guardada",tenantId:"ID del inquilino",title:"Cuotas de inquilino"},he={clearVault:"Borrar referencia de vault",createNew:"Crear nuevo secret",emptyVault:"Aún no hay secrets almacenados",filterPlaceholder:"Buscar claves del vault…",keyNotFound:"Esta clave no se encontró en el vault",loading:"Cargando claves…",noMatch:'No hay claves que coincidan con "{{filter}}"',pickFromVault:"Elegir del vault",placeholder:"Clave API o ${vault:key-name}",vaultDown:"El vault no está configurado — configure un proveedor de secrets en el backend de EDDI"},fe={category:"Categoría",content:"Contenido del prompt",contentLabel:"Contenido del fragmento",contentPlaceholder:"Debes ser cauteloso y prudente en tus respuestas...",description:"Descripción",descriptionPlaceholder:"Qué hace este fragmento",identity:"Identidad",name:"Nombre del fragmento",namePlaceholder:"p. ej. cautious_mode",noTags:"Sin etiquetas",tagPlaceholder:"p. ej. safety, production",tags:"Etiquetas",templateEnabled:"Activar la resolución de plantillas",templateEnabledHint:"Cuando está desactivada, los marcadores {{}} del contenido se tratan como texto literal (útil para ejemplos de código).",usageHint:"Uso:"},ye={deployed:"Desplegado",deploying:"Desplegando...",error:"Error",notDeployed:"No desplegado",checking:"Comprobando…"},Ae={subtitle:"Gestione los recuerdos, las propiedades y los vínculos de conversación por usuario",tabs:"Secciones de datos de usuario",title:"Datos del usuario"},Ee={deleteKey:"Eliminar {{key}}",editKey:"Editar {{key}}",tableTitle_many:"{{count}} variables definidas",tableTitle_one:"{{count}} variable definida",tableTitle_other:"{{count}} variables definidas",title:"Variables globales",description:"Valores de configuración para todo el despliegue, disponibles en todos los agentes.",create:"Añadir variable",createTitle:"Añadir variable global",editTitle:"Editar variable",keyLabel:"Clave",keyPlaceholder:"p. ej., default-model",keyError:"Solo letras, dígitos, puntos, guiones bajos y guiones.",valueLabel:"Valor",valuePlaceholder:"p. ej., gpt-4.1",valueWarning:"Los valores son visibles en la interfaz y en los registros. Usa la bóveda de secretos para datos sensibles.",descriptionLabel:"Descripción (opcional)",descriptionPlaceholder:"Descripción opcional…",exportableLabel:"Incluir en las exportaciones de agentes",save:"Guardar variable",saveSuccess:"Variable «{{key}}» guardada",deleteSuccess:"Variable «{{key}}» eliminada",confirmDeleteTitle:"Eliminar variable",confirmDeleteMessage:"¿Seguro que quieres eliminar «{{key}}»? Los agentes que usen ${vars:{{key}}} verán referencias sin resolver.",empty:"No hay variables globales definidas",emptyHint:"Haz clic en «Añadir variable» para crear tu primer valor de configuración para todo el despliegue.",searchPlaceholder:"Filtrar variables…",colKey:"Clave",colValue:"Valor",colDescription:"Descripción",colExportable:"Exportar",colReference:"Referencia",colActions:"Acciones",exportYes:"Incluida en exportaciones",exportNo:"Excluida de exportaciones",copyVars:"Copiar referencia ${vars:…}",refCopied:"Copiado: {{ref}}",infoLine1:"Usa {{vars.}} en los prompts del sistema o ${vars:} en cualquier parte de las configuraciones de agentes.",infoLine2:"Los cambios se aplican en 2 minutos (TTL de caché). Para valores sensibles, usa la bóveda de secretos."},Ce={endpoints:"endpoints",endpointsTotal:"endpoints en total",groupsSelected:"grupos seleccionados",importOpenApi:"Importar desde OpenAPI",importSelected:"Importar grupos seleccionados",importing:"Importando…",selectGroups:"Seleccione grupos de API para importarlos como extensiones de Llamada API independientes"},De=JSON.parse('{"board":{"continuePlaceholder":"Continuar esta discusión…","inputDisabledClosed":"Esta discusión está cerrada","newDiscussion":"Nueva discusión","noResponseGenerated":"No se generó respuesta","awaitingApprovalHint":"Esta discusión está en pausa esperando aprobación humana.","reviewInManager":"Revisarla","askMore":"Preguntar más a {{name}} →","askYourBoard":"Pregunta a tu grupo de trabajo…","attachFile":"Adjuntar archivo","backToLive":"Volver a la discusión en vivo","chatOneOnOne":"Chat 1 a 1","close":"Cerrar","copied":"¡Copiado!","copyResponse":"Copiar respuesta","details":"Detalles","emptyDescription":"Haz una pregunta y tu grupo de trabajo la debatirá.","emptyTitle":"Listo para debatir","error":"Algo salió mal","fileTooLarge":"El archivo debe pesar menos de 10 MB","fileTypeNotAllowed":"Este tipo de archivo no es compatible","hideConfig":"Ocultar panel de detalles","live":"En vivo","liveNow":"En vivo","loadingResponse":"Cargando respuesta","members":"Equipo","membersPanel":"Panel del equipo","moderator":"Moderador","noMembers":"Sin miembros del equipo","noSessions":"Aún no hay sesiones","phase":"Fase","pin":"Fijar respuesta","removeAttachment":"Quitar adjunto","running":"En curso","runningHint":"Esta discusión sigue en curso: las nuevas respuestas aparecen automáticamente.","send":"Enviar","sessions":"Sesiones","sessionsPanel":"Panel de sesiones","skipped":"{{name}} — omitido","startingDescription":"Tu grupo de trabajo está en ello: las respuestas aparecerán aquí a medida que lleguen.","startingTitle":"Discusión en curso","stillDiscussing":"El grupo de trabajo sigue debatiendo…","stop":"Detener","synthesis":"Síntesis","synthesisResult":"Resultado de la síntesis","title":"Grupo de trabajo","toggleConfig":"Alternar panel de detalles","unpin":"Dejar de fijar la respuesta","untitled":"Sin título","viewSessions":"Ver sesiones anteriores"},"thread":{"fileTooLarge":"El archivo debe ser menor de 20MB","fileTypeNotAllowed":"Este tipo de archivo no es compatible","attachmentLimit":"Máximo {{max}} archivos adjuntos por mensaje","notForwarded":"Archivo almacenado pero demasiado grande para el modelo","uploadFailed":"Error al subir: {{error}}","noResponse":"Sin respuesta","attachFile":"Adjuntar archivo","emptySubtitle":"Envía un mensaje para empezar a chatear con {{name}}.","emptyTitle":"Chat con {{name}}","followUp":"Siguiendo con tu respuesta…","fromSession":"De la sesión {{boardName}}","placeholder":"Escribe un mensaje…","questionLabel":"Pregunta","removeAttachment":"Quitar adjunto","responseLabel":"Respuesta","send":"Enviar","sendError":"Lo sentimos, se produjo un error. Inténtalo de nuevo.","startingConversation":"Iniciando conversación…","toggleContext":"Alternar contexto","placeholderNamed":"Mensaje para {{name}}…"},"chat":{"agentDetails":"Detalles del agente","selectToView":"Seleccione un agente para ver detalles","hideDetails":"Ocultar panel de detalles","editAgent":"Editar agente","auditLogs":"Registros de auditoría","openStudio":"Abrir en Manager","triggers":"Ver disparadores","starterSelected":"Prompt añadido al campo de entrada","title":"Chat","hideAgentDetails":"Ocultar detalles del agente","showAgentDetails":"Mostrar detalles del agente"},"agentEditor":{"capabilities":"Capacidades","workflows":"Flujos de trabajo","features":"Características y seguridad","a2aEnabled":"Agente a agente","memoryTools":"Herramientas de memoria","signedMessages":"Mensajes firmados","strictMemory":"Memoria estricta","hitlMode":"Modo de aprobación","llmConfig":"Modelo y Motor LLM","provider":"Línea de comandos","mode":"Modo de ejecución","personaPrompt":"Prompt de persona","starters":"Iniciadores de conversación","channels":"Conectores de canales","temperature":"Temperatura","contextWindow":"Límite de contexto","activeTools":"Herramientas activas","noLlm":"Sin LLM configurado","noTools":"Sin configurar","add":"Añadir","addCapability":"Añadir capacidad","cancel":"Cancelar","close":"Cerrar","confidence":"Confianza","confidenceHigh":"Alta","confidenceLow":"Baja","confidenceMedium":"Media","description":"Descripción","descriptionPlaceholder":"Describe la especialidad de este agente…","discardChanges":"Tienes cambios sin guardar. ¿Descartarlos?","loadError":"No se pudieron cargar los datos del agente.","noCapabilities":"No hay capacidades definidas.","removeCapability":"Quitar capacidad","retry":"Reintentar","save":"Guardar cambios","saveError":"No se pudieron guardar los cambios","saveSuccess":"Agente actualizado correctamente","settings":"Ajustes","skill":"Habilidad","skillPlaceholder":"p. ej., resumen","systemPrompt":"Prompt del sistema","systemPromptPlaceholder":"Instrucciones que definen el comportamiento, la personalidad y la especialidad de este agente…","title":"Editar agente"},"settings":{"hitlApprovalPointsNote":"Estos ajustes controlan cómo se comporta una aprobación. Qué puntos de una discusión la requieren se configura por fase en el Manager.","hitlOpenManager":"Definir puntos de aprobación","deliberation":"Calidad de la deliberación","deliberationDesc":"Registrar opiniones minoritarias y permitir que los miembros creen el trabajo que descubren durante el debate","recordDissents":"Registrar un voto particular","recordDissentsDesc":"Tras cada síntesis, cada miembro que no la escribió tiene un turno breve para indicar en qué sigue en desacuerdo. Cuesta una llamada extra por miembro.","agentFiledTasks":"Permitir que los miembros creen sus propias tareas","agentFiledTasksDesc":"El trabajo que un agente descubre durante el debate se convierte en una tarea real que recoge la siguiente oleada de ejecución. Desactivado, las herramientas ni siquiera existen para este grupo.","maxTasksPerDiscussion":"Máx. tareas creadas / debate","maxTasksPerDiscussionHelp":"Solo cuenta las tareas creadas por agentes, para que un backlog planificado grande no lo agote.","maxTasksPerTurn":"Máx. tareas creadas / turno","maxTasksPerTurnHelp":"Acota un turno desbocado; el tope por debate acota la deriva lenta.","maxCost":"Límite de coste (USD)","maxCostUnlimited":"Sin límite","maxCostHelp":"Déjalo vacío para no poner límite. Un turno ya en curso puede superar ligeramente el techo.","onCostExceeded":"Cuando se alcanza el límite","costSynthesize":"Sintetizar ahora: saltar directamente a la conclusión","costAbort":"Abortar: hacer fallar el debate de inmediato","costCeilingInvalid":"Un límite de coste debe ser mayor que 0. Vacía el campo para no poner límite.","maxDelegationDepth":"Profundidad máx. de delegación","maxDelegationDepthHelp":"A delega en B y B en C: profundidad 2. El salto que superaría este valor se rechaza; eso es lo que corta un ciclo de delegación.","delegationTimeout":"Tiempo de delegación (segundos)","delegationTimeoutHelp":"Cuánto espera un agente delegante a su delegado. Súbelo si el delegado ejecuta herramientas o un debate anidado.","allowedDelegationTargets":"Lista de delegación permitida","allowedDelegationTargetsHint":"Cualquier agente desplegado","allowedDelegationTargetsHelp":"IDs de agentes separados por comas. Déjalo vacío para permitir cualquier agente desplegado.","moderatorlessWarning":"Restringido a un moderador que este equipo no tiene: {{phases}}. El primer miembro por orden de intervención lo sustituirá.","memberLimit":"Un equipo puede tener como máximo {{max}} miembros","explicitPhasesNote":"Este equipo define sus fases explícitamente ({{phases}}), así que se ejecutan tal cual: el marco y el número de rondas de arriba ya no cambian el flujo.","explicitPhasesEdit":"Editar fases","addMemberTitle":"Añadir miembro del equipo","selectAgent":"Agente","pickAgent":"Buscar o seleccionar un agente…","displayName":"Nombre visible","displayNameHint":"p. ej. Analista","role":"Rol","roleHint":"p. ej. Revisor","addMember":"Añadir miembro","nameRequired":"El nombre del grupo de trabajo es obligatorio","saveSuccess":"Configuración del grupo de trabajo guardada","saveError":"No se pudo guardar la configuración","deleteAllSuccess":"Grupo de trabajo y todos los agentes eliminados","deleteError":"No se pudo eliminar el grupo de trabajo","deleteSuccess":"Grupo de trabajo eliminado","duplicateMember":"Este agente ya es miembro","loadError":"No se pudo cargar la configuración","backToBoard":"Volver al grupo de trabajo","untitled":"Grupo de trabajo sin título","subtitle":"Configura los ajustes y el equipo de tu grupo de trabajo","general":"Ajustes generales","generalDesc":"Configuración básica de tu grupo de trabajo","boardName":"Nombre del grupo de trabajo","boardNameHint":"Introduce el nombre del grupo de trabajo…","description":"Descripción","descriptionHint":"¿De qué trata este grupo de trabajo?","discussionStyle":"Marco de colaboración","maxRounds":"Rondas máx.","moderator":"Moderador","noModerator":"Ninguno","team":"Equipo","teamDesc":"Gestiona los agentes que participan en tu grupo de trabajo","roleOptional":"Opcional","typeAgent":"Agente","typeModerator":"Moderador","removeMember":"Quitar miembro","minMembers":"Se requieren al menos 2 miembros","protocol":"Protocolo y resiliencia","protocolDesc":"Tiempos de espera, reintentos y gestión de fallos en la comunicación entre agentes","agentTimeout":"Tiempo de espera del agente (segundos)","maxRetries":"Reintentos máx.","onAgentFailure":"Si falla el agente","failureSkip":"Omitir — continuar sin este agente","failureRetry":"Reintentar — volver a intentarlo con el agente","failureAbort":"Anular — detener toda la discusión","onUnavailable":"Si un miembro no está disponible","unavailableSkip":"Omitir — continuar sin él","unavailableFail":"Fallar — detener la discusión","maxTurns":"Turnos máx. (0 = ilimitado)","hitl":"Supervisión humana","hitlDesc":"Configura cuándo y cómo las personas revisan las decisiones de la IA","hitlGranularity":"Granularidad de la aprobación","granularityPhase":"Por fase — revisar después de cada fase de la discusión","granularityTask":"Por tarea — revisar cada tarea individual","hitlTimeout":"Tiempo de espera de aprobación","hitlTimeoutHint":"p. ej. PT15M (15 min), PT1H (1 hora)","hitlTimeoutHelp":"Duración ISO-8601. Déjalo vacío para no aplicar ningún límite.","hitlTimeoutPolicy":"Al agotarse el tiempo","timeoutWait":"Esperar indefinidamente","timeoutAutoApprove":"Auto-aprobar","timeoutAutoReject":"Auto-rechazar","timeoutAbort":"Anular la discusión","hitlRejection":"Al rechazar","rejectionFail":"Fallar — detener la tarea","rejectionRetry":"Reintentar — pedir al agente que revise","dynamic":"Agentes dinámicos","dynamicDesc":"Permitir que los agentes recluten, creen o deleguen en otros agentes durante las discusiones","dynamicEnable":"Activar agentes dinámicos","dynamicEnableDesc":"Permitir que los agentes recluten, creen o deleguen en otros agentes","allowCreation":"Permitir creación","allowCreationDesc":"Los agentes pueden crear nuevos agentes cuando lo necesiten","allowRecruitment":"Permitir reclutamiento","allowRecruitmentDesc":"Los agentes pueden reclutar agentes ya desplegados","allowDelegation":"Permitir delegación","allowDelegationDesc":"Los agentes pueden delegar subtareas en otros agentes","maxCreated":"Creados máx.","maxRecruited":"Reclutados máx.","maxDelegations":"Delegaciones máx. / tarea","inheritModel":"Heredar modelo del padre","inheritModelDesc":"Los agentes creados usan el modelo LLM del padre","lifecycle":"Política de ciclo de vida","lifecycleEphemeral":"Efímero — se elimina tras la discusión","lifecycleKeep":"Mantener desplegado — persiste tras la discusión","lifecycleUndeploy":"Solo retirar — detenido pero no eliminado","lifecycleAgentDecides":"El agente decide — el agente elige su propio destino","tasks":"Tareas preconfiguradas","tasksDesc":"Define las tareas de antemano para omitir la fase PLAN y que los agentes ejecuten de inmediato","taskSubject":"Asunto","taskSubjectHint":"¿Qué hay que hacer?","taskDescription":"Descripción","taskDescHint":"Instrucciones detalladas para esta tarea…","taskAssignRole":"Asignar a rol","taskPriority":"Prioridad","removeTask":"Quitar tarea","addTask":"Añadir tarea","dangerZone":"Zona de peligro","dangerDesc":"Acciones irreversibles — procede con precaución","deleteBoard":"Disolver grupo de trabajo","deleteBoardDesc":"Elimina esta configuración de grupo de trabajo. Los agentes se conservan.","deleteBoardAll":"Disolver grupo de trabajo + todos los agentes","deleteBoardAllDesc":"Elimina permanentemente este grupo de trabajo y todos sus agentes miembros.","unsavedChanges":"Tienes cambios sin guardar","templateSaved":"Guardado como plantilla","saveAsTemplate":"Guardar como plantilla","saving":"Guardando…","saveChanges":"Guardar cambios","deleteAllTitle":"¿Disolver el grupo de trabajo y todos los agentes?","deleteTitle":"¿Disolver el grupo de trabajo?","deleteAllConfirm":"Esto disolverá permanentemente este grupo de trabajo y eliminará todos sus agentes miembros. Esta acción no se puede deshacer.","deleteConfirm":"Esto disolverá permanentemente esta configuración de grupo de trabajo. Los agentes miembros no se verán afectados.","title":"Ajustes"},"nav":{"dashboard":"Panel","templates":"Plantillas"},"advisor":{"avatarLabel":"Avatar de {{name}}"},"analytics":{"agentPerformance":"Rendimiento del agente","avgLength":"Longitud media","avgLengthChars":"{{count}} caracteres","chatWithAgent":"Chatear con el agente","compareAgent":"Comparar con…","contributionBreakdown":"Desglose de contribuciones","contributions":"Contribuciones","editAgent":"Editar agente","errorRate":"Tasa de errores","errors":"Errores","sessions":"Sesiones"},"back":"Atrás","boardList":"Lista de grupos de trabajo","boardsLabel":"Grupos de trabajo","bottomNav":"Navegación inferior","card":{"advisorCount":"{{count}} expertos","delete":"Eliminar","duplicate":"Duplicar","duplicated":"Grupo de trabajo duplicado","history":"Historial","live":"En vivo","moreActions":"Más acciones","noMembers":"Sin expertos","openSettings":"Abrir ajustes","pin":"Fijar","settings":"Ajustes","unpin":"Dejar de fijar","untitled":"Grupo de trabajo sin título"},"closeSidebar":"Cerrar barra lateral","comparison":{"avgResponse":"Respuesta media","close":"Cerrar","contributions":"Contribuciones","errorRate":"Tasa de errores","evenlyMatched":"Ambos agentes están igualados","leadsIn":"lidera en {{count}} de 5 métricas","sessions":"Sesiones","title":"Comparación de agentes","totalContent":"Contenido total"},"dashboard":{"assembleTaskForce":"Formar grupo de trabajo","cancel":"Cancelar","deleteConfirm":"¿Seguro que quieres disolver este grupo de trabajo? Esta acción no se puede deshacer.","deletedCount":"{{count}} grupos de trabajo eliminados","deleteError":"No se pudo eliminar el grupo de trabajo","deletePartialFail":"{{success}} eliminados, {{fail}} fallidos","deleteSelected":"Eliminar","deleteSuccess":"Grupo de trabajo eliminado","deleteWorkforce":"Disolver grupo de trabajo","deselect":"Deseleccionar","duplicateError":"No se pudo duplicar el grupo de trabajo","gridView":"Vista de cuadrícula","listView":"Vista de lista","loadError":"No se pudo cargar tu espacio de trabajo. Inténtalo de nuevo.","pinned":"Fijado","retry":"Reintentar","select":"Seleccionar","selected":"{{count}} seleccionados","selectItem":"Seleccionar","subtitle":"Grupos de agentes colaborativos que resuelven desafíos complejos.","taskForcesLabel":"Grupos de trabajo activos","title":"Grupos de trabajo activos","viewToggle":"Modo de vista"},"export":{"clipboard":"Copiar al portapapeles","copied":"Copiado al portapapeles","copyFailed":"No se pudo copiar al portapapeles","downloadedJson":"Descargado como JSON","downloadedMd":"Descargado como Markdown","json":"Exportar como JSON","markdown":"Exportar como Markdown","title":"Exportar discusión"},"history":{"backToBoard":"Volver al grupo de trabajo","backToList":"Volver a la lista","cancel":"Cancelar","close":"Cerrar","confirmDelete":"Eliminar","conversationList":"Lista de conversaciones","delete":"Eliminar conversación","deleteDescription":"¿Seguro que quieres eliminar esta conversación? Esta acción no se puede deshacer.","deleteTitle":"Eliminar conversación","emptyTranscript":"Aún no hay entradas en la transcripción","entryCount":"{{count}} entradas","error":"Error","export":"Exportar","finalAnswer":"Respuesta final sintetizada","loadError":"No se pudo cargar la conversación","loadMore":"Cargar más","noContent":"Sin contenido","noConversations":"Aún no hay conversaciones","noResults":"Ninguna conversación coincide con tu búsqueda","notFound":"Conversación no encontrada","phase":"Fase","searchPlaceholder":"Buscar conversaciones…","selectConversation":"Selecciona una conversación para verla","selectHint":"Elige una conversación de la lista","skipped":"{{name}} — omitido","synthesis":"Síntesis","title":"Historial de conversaciones","transcript":"Transcripción de la conversación","tryDifferent":"Prueba con otro término de búsqueda","untitled":"Conversación sin título","loadListError":"No se pudieron cargar las conversaciones"},"insights":"Información","memberCount":"{{count}} miembros","newBoard":"Formar grupo de trabajo","onboarding":{"advisorSlots":"{{count}} plazas de asesor","agentsReady":"{{count}} listos","assembleNow":"Forma tu primer grupo de trabajo","customDesc":"Define tu propio equipo y tus propias reglas","customFromScratch":"Crear desde cero","deployAgent":"Desplegar agente","deployFirst":"Despliega tu primer agente de IA para empezar","deployFirst2":"Desplegar el primero →","deployFirstDesc":"Los agentes son los expertos que impulsan tus grupos de trabajo. Crea uno para empezar.","getStarted":"Empezar","howItWorks":"Cómo funciona","pickTemplate":"Elige una plantilla para empezar","pickTemplateDesc":"Cada plantilla configura un estilo de discusión, roles y reglas: tú solo asignas los agentes.","step1Desc":"Crea expertos de IA con habilidades, conocimientos y personalidad propios.","step1Title":"Desplegar agentes","step2Desc":"Elige una plantilla, asigna agentes a los roles y selecciona un estilo de discusión.","step2Title":"Formar un grupo de trabajo","step3Desc":"Plantea una pregunta y observa cómo tus agentes debaten, critican y sintetizan una respuesta.","step3Title":"Pregunta y observa","subtitle":"Reúne agentes de IA especializados en equipos colaborativos que debaten, analizan y resuelven juntos desafíos complejos.","welcome":"Bienvenido a la Plantilla"},"openMenu":"Abrir menú","shortcuts":{"closePanel":"Cerrar panel / diálogo","fromDashboard":"Desde el panel","newBoard":"Formar grupo de trabajo","showHelp":"Mostrar atajos de teclado","title":"Atajos de teclado"},"sidebar":{"boards":"Navegación de tableros"},"sidebarDrawer":"Navegación lateral","skipToContent":"Saltar al contenido","tabHome":"Inicio","tabInsights":"Información","tabThreads":"Hilos","templates":{"deleteConfirm":"¿Eliminar esta plantilla?","deleted":"Plantilla eliminada"},"templatesEmpty":"Guarda un grupo de trabajo como plantilla para recrearlo rápidamente más adelante.","themeDark":"Oscuro","themeLight":"Claro","themeSystem":"Sistema","toggleSidebar":"Alternar barra lateral","toggleTheme":"Cambiar tema","untitled":"Sin título","useTemplate":"Usar","wizard":{"addAdvisor":"Añadir asesor","advisorCount":"{{count}} asesores","advisorName":"Nombre del asesor","agentError":"No se pudo crear {{name}}: {{error}}","apiKey":"Clave de API","back":"Atrás","boardDescPlaceholder":"Describe brevemente el propósito de este consejo asesor…","boardDescription":"Descripción (opcional)","boardName":"Nombre de la plantilla","boardNamePlaceholder":"p. ej., Consejo de estrategia de producto","cancel":"Cancelar","collapse":"Contraer","createNew":"Crear asesor nuevo","createWorkforce":"Crear plantilla","creatingAgent":"Creando…","creationFailed":"Error en la creación","creationFailedDesc":"Algo salió mal. Puedes reintentarlo y continuará donde se quedó.","customTemplate":"Personalizada","customTemplateDesc":"Empieza desde cero con tu propia configuración","error":"Error","existing":"Existente","expand":"Expandir","groupError":"No se pudo formar el grupo de trabajo: {{error}}","model":"Modelo","modelPlaceholder":"p. ej., claude-sonnet-5","new":"Nuevo","next":"Siguiente","pending":"Esperando…","personality":"Personalidad y especialidad","personalityPlaceholder":"Describe la especialidad, la perspectiva y el estilo de comunicación de este asesor…","provider":"Proveedor de LLM","ready":"Listo","removeAdvisor":"Quitar asesor","role":"Rol","selectAgent":"Seleccionar agente","selectProvider":"Seleccionar proveedor…","settingUp":"Configurando tu plantilla…","settingUpBoard":"Formando el grupo de trabajo…","settingUpDesc":"Creando asesores y configurando el tablero. Esto puede tardar un momento.","stepIndicatorLabel":"Progreso del asistente","stepReview":"Revisión","stepTeam":"Equipo","stepTemplate":"Plantilla","success":"¡Grupo de trabajo formado correctamente!","team":"Equipo","templates":"Plantillas de discusión","tryAgain":"Reintentar","unnamed":"Sin nombre","untitled":"Tablero sin título","useExisting":"Usar un agente existente","yourAdvisors":"Tus asesores"},"workforce":"Plantilla"}'),Te=JSON.parse('{"title":"Operador de plataforma","subtitle":"Pregunta sobre esta instalación de EDDI: el operador lo consulta por ti.","readOnlyChip":"Solo lectura","readWriteChip":"Lectura y escritura","configError":"No se pudo cargar la configuración del operador","empty":{"title":"El operador de plataforma está desactivado","description":"Actívelo para chatear con un agente que puede inspeccionar sus agentes, flujos de trabajo, conversaciones, despliegues y registros — y, con su aprobación de cada cambio, operarlos por usted.","action":"Activar el operador de plataforma"},"discovery":{"title":"Tu operador de plataforma","description":"Un asistente que inspecciona y opera este despliegue. Desactivado por defecto; cada cambio espera su aprobación.","action":"Activar"},"activation":{"title":"Activar el operador de plataforma","subtitle":"Elige el modelo que ejecutará el operador, revisa sus instrucciones y despliégalo.","modelStep":"Modelo","reviewStep":"Prompt y revisión","provider":"Proveedor","model":"Modelo","baseUrl":"URL base","apiKey":"Clave de API del modelo","apiKeyHint":"La clave de tu proveedor de LLM. No es una credencial de EDDI.","apiKeyPlaceholder":"Pega tu clave de API o elige una clave del almacén","vaultDown":"El almacén de secretos no está disponible, por lo que ahora mismo no se pueden guardar claves en él. Una clave introducida aquí se envía al backend, que la guardará en el almacén si puede.","environment":"Entorno","authMode":"Cómo se autentica el operador","authModeHint":"El operador llama a tu API de administración de EDDI. Esto determina qué credenciales llevan esas llamadas.","authNoneBlocked":"Esta instalación tiene la autenticación activada, por lo que las llamadas de herramientas sin autenticar serían rechazadas. El operador se desplegaría correctamente y luego fallaría en cada consulta. Elige «Tu identidad» en su lugar.","scope":{"label":"Capacidad","default":"Predeterminada","hint":"Lo que el operador puede hacer. Cada escritura sigue esperando tu aprobación — consulta las reglas de seguridad más abajo.","readOnly":{"label":"Solo lectura","description":"Puede inspeccionar y explicar este despliegue. No puede cambiar nada."},"readWrite":{"label":"Lectura y escritura","description":"También le permite crear y modificar agentes y grupos de agentes, desplegar, retirar el despliegue, deshabilitar una programación descontrolada y editar el descriptor de un agente — cada una a la espera de tu aprobación."},"writeWarning":"La activación verifica la puerta de aprobación contra la política almacenada antes de finalizar. Después, una escritura de prueba real e inocua se ejecuta en segundo plano — si alguna vez se ejecuta sin pausarse para aprobación, el operador se elimina de inmediato."},"safetyPreamble":"Reglas de seguridad (no editables)","safetyPreambleHint":"Se anteponen siempre. Indican al operador que trate todo lo que devuelvan sus herramientas como datos no fiables.","promptBody":"Instrucciones del operador","promptBodyHint":"Edita cómo se presenta el operador y cómo trabaja.","tools":"Herramientas que recibirá ({{toolCount}})","activate":"Activar y desplegar","callerIdentityNote":"EDDI inserta tu token en el momento de la llamada. Nunca se almacena en la conversación y solo se envía de vuelta a esta instalación.","rebuildWarning":"Al guardar se crea un nuevo agente operador y se elimina el actual. Tu conversación de operador existente no se conservará.","environmentHint":"Dónde se ejecuta el propio agente operador. Aun así puede leer cualquier entorno."},"authMode":{"none":{"label":"Sin credenciales","description":"Las llamadas de herramientas no llevan cabecera Authorization. Solo funciona si esta instalación de EDDI tiene la autenticación desactivada."},"caller-identity":{"label":"Tu identidad","description":"Las llamadas de herramientas se ejecutan como el usuario que ha iniciado sesión, con sus permisos y su rastro de auditoría. Necesario cuando la autenticación está activada."}},"stage":{"idle":"","validating":"Comprobando que esta instalación expone los endpoints que el operador necesita…","provisioning":"Creando el agente operador…","resolving-version":"Resolviendo la versión del agente…","saving":"Guardando la configuración…","verifying-gate":"Verificando la puerta de aprobación…","done":"Listo","longWait1":"El agente operador se está creando y desplegando — este es el paso más largo…","longWait2":"Configurando las herramientas y la puerta de aprobación en el nuevo agente…","longWait3":"Aún en curso — el despliegue puede tardar en una plataforma ocupada…"},"status":{"title":"Operador","provider":"Proveedor","environment":"Entorno","authMode":"Se autentica como","version":"Versión","checking":"Comprobando…","ready":"Desplegado","inProgress":"Desplegando…","error":"Error de despliegue","notFound":"No desplegado","errorHelp":"El agente operador no se pudo desplegar. Reconfigúralo para volver a intentarlo o consulta los registros de la plataforma para ver el error subyacente.","reconfigure":"Reconfigurar","deactivate":"Desactivar","reset":"Eliminar operador","deactivateConfirmTitle":"¿Desactivar el operador de plataforma?","deactivateConfirmBody":"El operador se retira del despliegue y deja de responder. Su configuración se conserva, así que puedes volver a activarlo más adelante.","resetConfirmTitle":"¿Eliminar el operador de plataforma?","resetConfirmBody":"El agente operador y todos los recursos creados para él se eliminan de forma permanente, junto con su configuración guardada. Esta acción no se puede deshacer.","connectionCheck":"Comprobar conexión","gateChecking":"Verificando puerta…","gateUnknown":"Puerta no comprobada","gateVerified":"Puerta verificada","gateNotVerified":"Puerta no verificada","gateUnverifiedHelp":"No se pudo verificar la puerta de aprobación en el documento de este agente."},"chat":{"empty":"Pregunta sobre tu instalación. El operador lo consulta y te muestra cada llamada que hace.","restoring":"Abriendo esa conversación…","placeholder":"Pregunta por agentes, conversaciones, despliegues, registros…","pausedPlaceholder":"Esperando una decisión arriba antes de que el operador pueda continuar…","readOnlyPlaceholder":"Esta conversación ha terminado: inicia una nueva para continuar.","send":"Enviar","stop":"Detener","newConversation":"Iniciar una conversación nueva","transcript":"Conversación con el operador","pauseCompactFallback":"El operador necesita tu aprobación para continuar.","pauseCompactReview":"Revisar para aprobar →","resolving":"Ejecutando el paso aprobado: puede tardar un momento…"},"drawer":{"title":"Operador de plataforma","notActivated":"Actívalo para chatear con tu despliegue desde cualquier lugar.","titleAwaiting":"Operador de plataforma: una decisión te espera","activate":"Configurar el operador de plataforma"},"approval":{"reconstructedEndpoint":"{{method}} {{path}} (reconstruido)","verified":"verificado","verifiedTitle":"Resuelto a partir de la configuración real de la llamada a la API; se vuelve a comprobar justo antes de la ejecución — si la solicitud cambia antes de eso, se rechaza la ejecución.","previewOnly":"vista previa","previewOnlyTitle":"Esta llamada ejecuta pasos de preparación adicionales antes de ejecutarse, por lo que esto es una vista previa aproximada — la solicitud real puede diferir y no se vuelve a comprobar antes de la ejecución.","query":"Consulta","headers":"Encabezados","bodyTruncated":"El cuerpo se muestra truncado para la visualización — la aprobación sigue cubriendo la solicitud completa.","diffHeading":"Cambios respecto a la versión almacenada {{version}}","diffLoading":"Cargando la versión almacenada para comparar…","diffFailed":"No se pudo cargar la versión almacenada para comparar: el documento propuesto completo está abajo.","diffForbidden":"Comparar con la versión almacenada requiere acceso de editor: el documento propuesto completo está abajo.","diffRedactionNote":"Las credenciales están ocultas en la versión propuesta, por lo que aparecen aquí como cambios aunque no hayan cambiado.","showFullRequest":"Mostrar el documento propuesto completo","hideFullRequest":"Ocultar el documento propuesto completo","expandBody":"Expandir","escalation":{"heading":"Esta solicitud otorga capacidades adicionales","dynamicAgentCreation":"Este grupo puede crear nuevos agentes mientras se ejecuta. Esos agentes no requieren aprobación por sí mismos.","dynamicAgentRecruitment":"Este grupo puede incorporar otros agentes existentes a sus discusiones.","autoApproveOnTimeout":"Las aprobaciones de este recurso se conceden automáticamente al agotarse el tiempo, sin que nadie lo supervise.","agentCreatedWithoutGate":"Este agente se está creando sin puerta de aprobación. Cada escritura que realice más adelante se ejecutará sin supervisión.","agentCreatedWithBroadEndpoints":"Este agente se está creando con acceso de escritura a su API — no limitado a lecturas.","agentCreatedWithExternalTools":"Este agente se está creando con todas las herramientas que ofrece un servidor MCP externo. Ese servidor decide cuáles son y puede cambiarlas más adelante.","unchecked":"El cuerpo era demasiado largo para analizarlo en busca de concesiones de capacidad — léalo completo antes de aprobar.","inlineCredential":"Esta solicitud incrusta lo que parece una credencial literal en lugar de una referencia ${vault:…}. Un secreto escrito directamente se almacena en texto plano y no puede rotarse desde la bóveda — recházala y pide la referencia de la bóveda."},"blockedSelfTarget":"Un agente no puede modificar su propia definición, y esta solicitud apunta al propio agente del operador ({{agentId}}). Mientras esté presente, no se puede aprobar todo el lote: recházala y haz este cambio desde la página de ese agente.","blockedSelfConversation":"Un agente no puede enviar un mensaje a la conversación en la que se está ejecutando, y esta solicitud apunta a esta ({{agentId}}). Escribiría su propio texto como si lo hubiera dicho una persona. Mientras esté presente, no se puede aprobar todo el lote: recházala.","blockedGateCarrying":"Esta solicitud escribe una configuración de LLM que establece su propia puerta de aprobación (toolApprovals), lo que reemplazaría la puerta que la está revisando. La aprobación no está disponible para todo el lote mientras esté presente — rechace y cambie la puerta desde la página del agente.","blockedGateUnverifiable":"Esta solicitud escribe una configuración de LLM cuyo cuerpo no se puede leer por completo — es demasiado grande para mostrarse o no es JSON válido —, por lo que no se puede confirmar que no anule la puerta de aprobación. La aprobación no está disponible para todo el lote mientras esté presente — rechace y realice este cambio desde la página del agente.","blockedGateUnpinned":"Esta solicitud escribe una configuración de LLM pero no está fijada, por lo que lo que realmente se ejecuta puede diferir de lo que se muestra aquí y no se puede confirmar que no anule la puerta de aprobación. La aprobación no está disponible para todo el lote mientras esté presente — rechace y realice este cambio desde la página del agente.","blockedSelfStart":"El operador no puede probarse a sí mismo: iniciar una conversación con su propio agente ({{agentId}}) devolvería su salida como entrada. Aprobar no está disponible para todo el lote mientras esté presente; rechaza y prueba otro agente."},"starters":{"whatsDeployed":"¿Qué hay desplegado ahora mismo?","recentConversations":"Muéstrame las conversaciones más recientes","healthCheck":"¿Hay algo que no funcione bien en esta plataforma?","diagnoseAgent":"¿Por qué falla el despliegue de uno de mis agentes?"},"toast":{"activated":"Operador de plataforma activado","deactivated":"Operador de plataforma desactivado","reset":"Operador de plataforma eliminado","activatedButUnreachable":"Operador desplegado, pero no pudo leer tu plataforma","activatedGateVerified":"Operador de plataforma activado — puerta de aprobación verificada. Las comprobaciones de conexión se ejecutan en segundo plano.","activatedChecking":"Operador de plataforma activado. Las comprobaciones de conexión se ejecutan en segundo plano.","writeProbeVerified":"Acceso de escritura verificado — una escritura real protegida se pausó para aprobación.","writeProbeFailed":"La puerta de aprobación no resistió — el operador fue eliminado.","writeProbeInconclusive":"La prueba de escritura en vivo no fue concluyente."},"canary":{"genericFailure":"La comprobación de conexión no se completó correctamente.","passed":"El operador puede acceder a tu plataforma.","recheck":"Comprobar de nuevo","title":"El operador se desplegó, pero no pudo leer tu plataforma."},"paused":{"title":"El operador de plataforma está en pausa","description":"Sigue configurado: al volver a activarlo se despliega el mismo agente. No se ha eliminado nada.","action":"Volver a activar"},"managedAgentBadge":"Operador","managedAgentHint":"Aprovisionado y gestionado por la pantalla del operador de plataforma. Editarlo o eliminarlo aquí romperá esa pantalla.","decisionLog":{"approved":"Has aprobado esta solicitud","rejected":"Has rechazado esta solicitud","rePaused":"En pausa de nuevo: se necesita otra decisión","noReply":"El turno terminó sin respuesta","executed":"Se ejecutó {{calls}}","partial_one":"Aprobada — {{count}} llamada rechazada","partial_other":"Aprobada — {{count}} llamadas rechazadas","partial_many":"Aprobada — {{count}} llamadas rechazadas"},"tabs":{"label":"Vistas del operador","chat":"Chat","history":"Historial"},"history":{"emptyTitle":"No hay conversaciones anteriores","emptyDescription":"Las conversaciones con el operador aparecen aquí para que puedas retomarlas más tarde.","noOpeningMessage":"(aún sin mensaje)","stepCount_one":"{{count}} paso","stepCount_other":"{{count}} pasos","stepCount_many":"{{count}} pasos"}}'),Pe={addCadence:"Añadir cadencia",addTask:"Añadir tarea",backToGroup:"Volver al grupo",backlogEmpty:"Aún no hay tareas en la lista de pendientes.",backlogTitle:"Pendientes ({{count}})",cadenceAdded:"Cadencia añadida",cadenceDeleted:"Cadencia eliminada",cadenceRunning:"Actualmente hay una discusión iniciada por la cadencia en curso.",cadencesEmpty:"Aún no hay cadencias recurrentes configuradas.",cadencesTitle:"Cadencias ({{count}})",confirmDeleteCadenceDesc:"Esto detiene sus ejecuciones programadas. Las discusiones ya realizadas no se ven afectadas.",confirmDeleteCadenceTitle:"¿Eliminar esta cadencia?",createdBy:"por {{who}}",cronLabel:"Expresión cron",cronPlaceholder:"p. ej. 0 9 * * MON",discussions:"Discusiones",failed:"Fallido",inputTemplatePlaceholder:"Plantilla de prompt para cada ejecución (opcional — de lo contrario se usa un simple listado de pendientes)",lastRun:"Última ejecución",maxCostLabel:"Coste máx. / ejecución ($, opcional)",maxCostPlaceholder:"valor predeterminado del grupo",maxPerRunLabel:"Tareas máx. / ejecución",member:"Miembro",navLabel:"Espacio de trabajo",never:"Nunca",perMemberStats:"Fiabilidad por miembro",priority:"Prioridad",subtitle:"Una lista de pendientes persistente y cadencias recurrentes que este grupo ejecuta sin supervisión, según una programación.",taskAdded:"Tarea añadida a la lista de pendientes",taskDescriptionPlaceholder:"Descripción (opcional)",taskSubjectPlaceholder:"Asunto de la tarea",tasksVerified:"Tareas verificadas",timeZoneLabel:"Zona horaria",title:"Espacio de trabajo del equipo permanente",totalCost:"Coste total",verified:"Verificado",maxCostInvalid:"El coste máximo por ejecución debe ser un número igual o mayor que 0.",cadenceSummary_many:"hasta {{max}} tareas/ejecución",cadenceSummary_one:"hasta {{max}} tarea/ejecución",cadenceSummary_other:"hasta {{max}} tareas/ejecución",inputTemplateTooLong:"La plantilla de prompt está limitada a {{max}} caracteres."},Se={title:"Equipo nuevo"},ke={title:"Actualizaciones de EDDI",description:"Comprueba si hay una versión más reciente de EDDI. No se envía nada hasta que lo solicites.",installed:"Instalada",githubRelease:"Versión de GitHub",dockerImage:"Imagen de Docker",unknownVersion:"Desconocida",checkNow:"Comprobar ahora",checking:"Comprobando…",autoCheck:"Comprobar automáticamente en cada carga de página",autoCheckHint:"Ejecuta una comprobación por recarga del navegador y muestra un aviso si existe una versión más reciente.",privacyNote:"La comprobación contacta únicamente con api.github.com desde tu navegador. No se envía ningún dato del despliegue.",neverChecked:"Aún no se ha realizado ninguna comprobación.",upToDate:"Estás usando la última versión ({{version}}).",updateAvailable:"EDDI {{version}} está disponible",updateAvailableDetail:"Estás usando {{installed}}.",ahead:"Estás usando {{installed}}, más reciente que la última versión publicada ({{version}}).",unknownInstalled:"La última versión es {{version}}. No se pudo determinar la versión instalada, así que no hay nada con lo que compararla.",errorRateLimited:"Se alcanzó el límite de peticiones sin autenticar de GitHub. Inténtalo más tarde o abre la página de versiones.",errorBlockedByCsp:"La Content-Security-Policy de esta instalación impide que el navegador acceda a api.github.com, por lo que la comprobación no puede ejecutarse. Añade api.github.com a la directiva connect-src o utiliza el enlace de versiones de abajo.",errorUnreachable:"No se pudo contactar con api.github.com. Comprueba tu red o el proxy de salida.",errorFailed:"La comprobación de actualizaciones falló. Abre la página de versiones para comprobarlo manualmente.",publishedOn:"Publicada el {{date}}",whatsNew:"Novedades de {{version}}",fullNotes:"Notas de la versión completas en GitHub",noNotes:"Esta versión no tiene notas.",releaseNotes:"Notas de la versión",allReleases:"Todas las versiones",howToUpdate:"Cómo actualizar",howToUpdateCli:"Con la CLI eddi (creada por el instalador):",howToUpdateManual:"Sin la CLI, desde tu directorio de instalación (~/.eddi por defecto):",howToUpdateNote:"Ajusta las opciones -f a tu configuración: añade -f docker-compose.auth.yml si usas Keycloak."},Le={acrossGroups:"en {{count}} grupos de trabajo",actions:"Acciones",activeExperts:"Expertos activos",activity:"Actividad",agentLeaderboard:"Clasificación de agentes",agentName:"Agente",allOutcomes:"Todos los resultados",allStyles:"Todos los estilos",avgDuration:"Duración media",cancelCompare:"Cancelar",clearAll:"Borrar todo",clearFilters:"Borrar filtros",completionRate:"Tasa de finalización",contributions:"Contribuciones",covered:"Cubierto",createFirst:"Formar grupo de trabajo",daysAgo:"hace {{count}} d",emptyDescription:"Inicia una discusión de grupo de trabajo para ver analíticas aquí.",emptyHaveGroups:"Tienes {{count}} grupos de trabajo pero aún no hay discusiones. Inicia una para ver la información.",emptyTitle:"Aún no hay información",errorDescription:"No se pudieron obtener algunos datos. Inténtalo de nuevo.",errors:"Errores",errorTitle:"No se pudo cargar la información",filteredOf:"{{filtered}} de {{total}} en total",highConfidence:"Confianza alta",hoursAgo:"hace {{count}} h",justNow:"ahora mismo",last30Days:"Últimos 30 días",minutesAgo:"hace {{count}} min",noAgents:"Aún no hay actividad de agentes.",noDiscussions:"Aún no hay discusiones.",noMatchingDiscussions:"Ninguna discusión coincide con los filtros activos.",noPhases:"No hay datos de fases disponibles.",noResults:"No hay discusiones coincidentes",noResultsHint:"Ajusta los filtros o bórralos para ver todos los datos.",noSkills:"No hay capacidades registradas. Define habilidades en tus agentes para seguir la cobertura.",noStyles:"No hay datos de estilos disponibles.",outcomeChart:"Distribución de resultados: {{total}} en total",outcomes:"Resultados",participatedRecently:"participaron en discusiones",perDiscussion:"por discusión",phaseChart:"Distribución de fases",phaseDistribution:"Distribución de fases",pickSecondAgent:"Haz clic en un agente para compararlo con {{name}}",recentDiscussions:"Discusiones recientes",removeFilter:"Quitar filtro: {{label}}",retry:"Reintentar",sessions:"Sesiones",sessionsCompleted:"sesiones completadas correctamente",showingResults:"{{count}} de {{total}}",skillCoverage:"Cobertura de habilidades",styleBreakdown:"Estilos de discusión",subtitle:"Últimos 30 días",title:"Información",total:"Total",totalDiscussions:"Discusiones",totalSkills:"Habilidades",uncoveredSkills:"{{count}} habilidades sin cubrir"},Re={activeRate:"Tasa de actividad",activeRateDesc:"Agentes activos en los últimos 30 días",dormantAgents:"Inactivos",dormantAgentsDesc:"Agentes sin usar durante más de 30 días",msgAtRisk:"La mayor parte de tu plantilla está inactiva: plantéate involucrarlos",msgHealthy:"El {{rate}} % de tu plantilla digital estuvo activa en los últimos 30 días",msgModerate:"Algunos expertos digitales no se han consultado recientemente",statusAtRisk:"En riesgo",statusHealthy:"Saludable",statusModerate:"Moderado",taskForces:"Grupos de trabajo",taskForcesDesc:"Grupos de agentes colaborativos",title:"Salud del conocimiento",workforceSize:"Tamaño de la plantilla",workforceSizeDesc:"Total de expertos digitales desplegados"},Ie={hint:"Recordaremos tu elección y te llevaremos allí automáticamente la próxima vez.",manager:{description:"Crea, configura y despliega tus agentes de IA. Gestiona flujos de trabajo, recursos e integraciones.",feature1:"Crear y desplegar agentes",feature2:"Configurar flujos de trabajo y pipelines",feature3:"Gestionar recursos y extensiones",title:"Manager"},subtitle:"Elige tu espacio de trabajo para empezar.",title:"Bienvenido a EDDI",workforce:{description:"Reúne equipos de IA que debaten, analizan y resuelven juntos desafíos complejos.",feature1:"Formar grupos de trabajo de agentes",feature2:"Ejecutar discusiones colaborativas",feature3:"Obtener respuestas sintetizadas",title:"Plantilla"}},je={assembleTaskForce:"Formar grupo de trabajo",assembleTaskForceDesc:"Reúne a expertos para resolver desafíos complejos",chatWithAgent:"Chatear con un agente",chatWithAgentDesc:"Mantén una conversación 1 a 1 con cualquier experto digital",manageWorkforce:"Gestionar la plantilla",manageWorkforceDesc:"Configurar y desplegar expertos digitales",title:"Acciones rápidas",viewInsights:"Ver información",viewInsightsDesc:"Sigue la cobertura de conocimiento de tu plantilla"},xe={addAgent:"Desplegar agente",count:"{{count}} expertos",ready:"Listo",title:"Tu plantilla digital",unnamed:"Agente sin nombre"},Me={production:"Producción",test:"Prueba"},Ne={attachments:e,app:a,auth:o,nav:r,theme:n,language:t,pages:s,common:i,agents:c,agentDetail:l,wizard:d,setupWizard:u,packages:p,packageDetail:m,packageEditor:g,conversations:v,conversationDetail:b,chat:h,resources:f,editor:y,rulesEditor:A,apiCallsEditor:E,mcpcallsEditor:C,llmEditor:D,outputEditor:T,propertySetterEditor:P,dictionaryEditor:S,parserEditor:k,coordinator:L,contentEditor:R,logs:I,secrets:j,audit:x,schedules:M,cascadeTrace:N,debugDrawer:w,costDashboard:q,memoryInspector:z,logViewer:H,promptViewer:O,promptPreview:F,studio:V,ragEditor:U,onboarding:_,platform:G,stream:B,createOrWizard:W,groups:K,taskBoard:J,memories:Q,properties:Y,triggers:$,capabilities:Z,exportDialog:X,importDialog:ee,syncPage:ae,sync:oe,userConversations:re,commandPalette:ne,groupWizard:te,groupTemplates:se,channels:ie,channelDetail:ce,hitl:le,chatDrawer:de,dashboard:ue,errorBoundary:pe,gdpr:me,mockBanner:ge,orphans:ve,quotas:be,secretPicker:he,snippetEditor:fe,status:ye,userData:Ae,variables:Ee,workflowEditor:Ce,Workforce:De,operator:Te,groupWorkspace:Pe,workforceWizard:Se,updates:ke,analyticsPage:Le,knowledgeHealth:Re,landing:Ie,quickActions:je,workforce:xe,environments:Me};export{De as Workforce,l as agentDetail,c as agents,Le as analyticsPage,E as apiCallsEditor,a as app,e as attachments,x as audit,o as auth,Z as capabilities,N as cascadeTrace,ce as channelDetail,ie as channels,h as chat,de as chatDrawer,ne as commandPalette,i as common,R as contentEditor,b as conversationDetail,v as conversations,L as coordinator,q as costDashboard,W as createOrWizard,ue as dashboard,w as debugDrawer,Ne as default,S as dictionaryEditor,y as editor,Me as environments,pe as errorBoundary,X as exportDialog,me as gdpr,se as groupTemplates,te as groupWizard,Pe as groupWorkspace,K as groups,le as hitl,ee as importDialog,Re as knowledgeHealth,Ie as landing,t as language,D as llmEditor,H as logViewer,I as logs,C as mcpcallsEditor,Q as memories,z as memoryInspector,ge as mockBanner,r as nav,_ as onboarding,Te as operator,ve as orphans,T as outputEditor,m as packageDetail,g as packageEditor,p as packages,s as pages,k as parserEditor,G as platform,F as promptPreview,O as promptViewer,Y as properties,P as propertySetterEditor,je as quickActions,be as quotas,U as ragEditor,f as resources,A as rulesEditor,M as schedules,he as secretPicker,j as secrets,u as setupWizard,fe as snippetEditor,ye as status,B as stream,V as studio,oe as sync,ae as syncPage,J as taskBoard,n as theme,$ as triggers,ke as updates,re as userConversations,Ae as userData,Ee as variables,d as wizard,Ce as workflowEditor,xe as workforce,Se as workforceWizard}; diff --git a/src/main/resources/META-INF/resources/assets/export-agent-dialog-DIJ6YUoj.js b/src/main/resources/META-INF/resources/assets/export-agent-dialog-Bf3D5WJZ.js similarity index 96% rename from src/main/resources/META-INF/resources/assets/export-agent-dialog-DIJ6YUoj.js rename to src/main/resources/META-INF/resources/assets/export-agent-dialog-Bf3D5WJZ.js index 5351c29114..4a00d7b216 100644 --- a/src/main/resources/META-INF/resources/assets/export-agent-dialog-DIJ6YUoj.js +++ b/src/main/resources/META-INF/resources/assets/export-agent-dialog-Bf3D5WJZ.js @@ -1 +1 @@ -import{c as q,r as p,j as e,a9 as R,D as S,k as z}from"./index-BY6d8wze.js";import{g as A,h as L,R as M}from"./resource-type-badge-DrHzJ4gd.js";import{D as W}from"./download-DZjrnAjT.js";import{L as _}from"./lock-CPVVTGkJ.js";function X({open:l,onClose:m,agentId:i,agentVersion:u}){const{t:c}=q(),[n,x]=p.useState(new Set),{data:o,isLoading:k,isError:E,error:h}=A(i,u,l),y=L(),a=p.useMemo(()=>o?o.resources.map(s=>s.resourceId):[],[o]);p.useEffect(()=>{a.length>0&&x(new Set(a))},[a]);const b=p.useMemo(()=>o?new Set(o.resources.filter(s=>s.required).map(s=>s.resourceId)):new Set,[o]),I=p.useMemo(()=>{if(!o)return[];const s=new Map;for(const r of o.resources){if(r.resourceType==="agent")continue;const t=r.parentWorkflowId||"__snippets__";if(!s.has(t)){const d=r.parentWorkflowId?o.resources.find(v=>v.resourceId===r.parentWorkflowId&&v.resourceType==="workflow"):null;s.set(t,{workflowId:r.parentWorkflowId,workflowName:(d==null?void 0:d.name)||r.parentWorkflowId,workflowIndex:(d==null?void 0:d.workflowIndex)??-1,resources:[]})}r.resourceType!=="workflow"&&s.get(t).resources.push(r)}return Array.from(s.values()).sort((r,t)=>r.workflowIndex-t.workflowIndex)},[o]),j=o==null?void 0:o.resources.find(s=>s.resourceType==="agent"),D=(o==null?void 0:o.resources.filter(s=>s.resourceType==="workflow"))??[];function N(s){b.has(s)||x(r=>{const t=new Set(r);return t.has(s)?t.delete(s):t.add(s),t})}function T(){n.size===a.length?x(new Set(b)):x(new Set(a))}function C(){y.mutate({agentId:i,version:u,selectedResourceIds:Array.from(n)},{onSuccess:()=>w()})}function w(){x(new Set),m()}if(!l)return null;const f=y.isPending;return e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"fixed inset-0 z-50 bg-black/50 backdrop-blur-sm",onClick:f?void 0:w}),e.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4",children:e.jsxs("div",{className:"w-full max-w-lg rounded-xl border bg-card p-6 shadow-2xl max-h-[80vh] flex flex-col",onClick:s=>s.stopPropagation(),"data-testid":"export-agent-dialog",children:[e.jsxs("div",{className:"flex items-center justify-between mb-4",children:[e.jsx("h2",{className:"text-lg font-semibold text-foreground",children:c("exportDialog.title","Export Agent")}),e.jsx("button",{onClick:w,disabled:f,className:"rounded-md p-1 text-muted-foreground hover:bg-secondary hover:text-foreground disabled:opacity-50",children:e.jsx(R,{className:"h-5 w-5"})})]}),k&&e.jsxs("div",{className:"flex-1 flex flex-col items-center justify-center gap-3 py-12",children:[e.jsx(S,{className:"h-8 w-8 animate-spin text-primary"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:c("exportDialog.loading","Loading resource tree...")})]}),E&&e.jsx("div",{className:"flex-1 flex flex-col items-center justify-center gap-2 py-12",children:e.jsx("p",{className:"text-sm text-destructive",children:(h==null?void 0:h.message)||c("common.error")})}),o&&!k&&e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"text-sm text-muted-foreground mb-3",children:c("exportDialog.selectResources","Select resources to export")}),e.jsxs("div",{className:"flex-1 overflow-auto min-h-0 space-y-1 rounded-lg border p-3 bg-secondary/20",children:[j&&e.jsx(g,{resource:j,checked:n.has(j.resourceId),required:!0,indent:0}),D.map(s=>{const r=I.find(t=>t.workflowId===s.resourceId);return e.jsxs("div",{children:[e.jsx(g,{resource:s,checked:n.has(s.resourceId),required:s.required,indent:1}),r==null?void 0:r.resources.map(t=>e.jsx(g,{resource:t,checked:n.has(t.resourceId),required:t.required,indent:2,onToggle:()=>N(t.resourceId)},t.resourceId))]},s.resourceId)}),I.filter(s=>!s.workflowId).map(s=>s.resources.length>0?e.jsxs("div",{children:[e.jsx("p",{className:"text-xs font-semibold text-muted-foreground uppercase tracking-wider mt-2 mb-1 ps-2",children:c("exportDialog.snippets","Snippets")}),s.resources.map(r=>e.jsx(g,{resource:r,checked:n.has(r.resourceId),required:r.required,indent:1,onToggle:()=>N(r.resourceId)},r.resourceId))]},"snippets"):null)]}),e.jsxs("div",{className:"flex items-center justify-between pt-4 border-t mt-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("input",{type:"checkbox",checked:n.size===a.length,onChange:T,className:"accent-primary","data-testid":"select-all-checkbox"}),e.jsx("span",{className:"text-xs text-muted-foreground",children:n.size===a.length?c("exportDialog.allSelected","All resources selected"):c("exportDialog.countSelected","{{count}} of {{total}} resources selected",{count:n.size,total:a.length})})]}),e.jsxs(z,{onClick:C,disabled:f||n.size===0,"data-testid":"export-confirm-btn",children:[f?e.jsx(S,{className:"h-4 w-4 animate-spin"}):e.jsx(W,{className:"h-4 w-4"}),c("exportDialog.exportSelected","Export Selected")]})]})]})]})})]})}function g({resource:l,checked:m,required:i,indent:u,onToggle:c}){const n=u===0?"ps-2":u===1?"ps-6":"ps-10";return e.jsxs("label",{className:`flex items-center gap-2 rounded-md px-2 py-1.5 text-sm cursor-pointer hover:bg-secondary/50 transition-colors ${n} ${m?"text-foreground":"text-muted-foreground"}`,children:[e.jsx("input",{type:"checkbox",checked:m,disabled:i,onChange:c,className:"accent-primary disabled:opacity-60"}),e.jsx(M,{type:l.resourceType}),e.jsx("span",{className:"truncate flex-1",children:l.name||l.resourceId.slice(0,12)}),i&&e.jsx(_,{className:"h-3 w-3 text-muted-foreground/50 shrink-0"})]})}export{X as E}; +import{c as q,r as p,j as e,a9 as R,D as S,k as z}from"./index-BnLj1hck.js";import{g as A,h as L,R as M}from"./resource-type-badge-CKybsxy2.js";import{D as W}from"./download-CVl_y-4e.js";import{L as _}from"./lock-CL2SzOGd.js";function X({open:l,onClose:m,agentId:i,agentVersion:u}){const{t:c}=q(),[n,x]=p.useState(new Set),{data:o,isLoading:k,isError:E,error:h}=A(i,u,l),y=L(),a=p.useMemo(()=>o?o.resources.map(s=>s.resourceId):[],[o]);p.useEffect(()=>{a.length>0&&x(new Set(a))},[a]);const b=p.useMemo(()=>o?new Set(o.resources.filter(s=>s.required).map(s=>s.resourceId)):new Set,[o]),I=p.useMemo(()=>{if(!o)return[];const s=new Map;for(const r of o.resources){if(r.resourceType==="agent")continue;const t=r.parentWorkflowId||"__snippets__";if(!s.has(t)){const d=r.parentWorkflowId?o.resources.find(v=>v.resourceId===r.parentWorkflowId&&v.resourceType==="workflow"):null;s.set(t,{workflowId:r.parentWorkflowId,workflowName:(d==null?void 0:d.name)||r.parentWorkflowId,workflowIndex:(d==null?void 0:d.workflowIndex)??-1,resources:[]})}r.resourceType!=="workflow"&&s.get(t).resources.push(r)}return Array.from(s.values()).sort((r,t)=>r.workflowIndex-t.workflowIndex)},[o]),j=o==null?void 0:o.resources.find(s=>s.resourceType==="agent"),D=(o==null?void 0:o.resources.filter(s=>s.resourceType==="workflow"))??[];function N(s){b.has(s)||x(r=>{const t=new Set(r);return t.has(s)?t.delete(s):t.add(s),t})}function T(){n.size===a.length?x(new Set(b)):x(new Set(a))}function C(){y.mutate({agentId:i,version:u,selectedResourceIds:Array.from(n)},{onSuccess:()=>w()})}function w(){x(new Set),m()}if(!l)return null;const f=y.isPending;return e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"fixed inset-0 z-50 bg-black/50 backdrop-blur-sm",onClick:f?void 0:w}),e.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4",children:e.jsxs("div",{className:"w-full max-w-lg rounded-xl border bg-card p-6 shadow-2xl max-h-[80vh] flex flex-col",onClick:s=>s.stopPropagation(),"data-testid":"export-agent-dialog",children:[e.jsxs("div",{className:"flex items-center justify-between mb-4",children:[e.jsx("h2",{className:"text-lg font-semibold text-foreground",children:c("exportDialog.title","Export Agent")}),e.jsx("button",{onClick:w,disabled:f,className:"rounded-md p-1 text-muted-foreground hover:bg-secondary hover:text-foreground disabled:opacity-50",children:e.jsx(R,{className:"h-5 w-5"})})]}),k&&e.jsxs("div",{className:"flex-1 flex flex-col items-center justify-center gap-3 py-12",children:[e.jsx(S,{className:"h-8 w-8 animate-spin text-primary"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:c("exportDialog.loading","Loading resource tree...")})]}),E&&e.jsx("div",{className:"flex-1 flex flex-col items-center justify-center gap-2 py-12",children:e.jsx("p",{className:"text-sm text-destructive",children:(h==null?void 0:h.message)||c("common.error")})}),o&&!k&&e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"text-sm text-muted-foreground mb-3",children:c("exportDialog.selectResources","Select resources to export")}),e.jsxs("div",{className:"flex-1 overflow-auto min-h-0 space-y-1 rounded-lg border p-3 bg-secondary/20",children:[j&&e.jsx(g,{resource:j,checked:n.has(j.resourceId),required:!0,indent:0}),D.map(s=>{const r=I.find(t=>t.workflowId===s.resourceId);return e.jsxs("div",{children:[e.jsx(g,{resource:s,checked:n.has(s.resourceId),required:s.required,indent:1}),r==null?void 0:r.resources.map(t=>e.jsx(g,{resource:t,checked:n.has(t.resourceId),required:t.required,indent:2,onToggle:()=>N(t.resourceId)},t.resourceId))]},s.resourceId)}),I.filter(s=>!s.workflowId).map(s=>s.resources.length>0?e.jsxs("div",{children:[e.jsx("p",{className:"text-xs font-semibold text-muted-foreground uppercase tracking-wider mt-2 mb-1 ps-2",children:c("exportDialog.snippets","Snippets")}),s.resources.map(r=>e.jsx(g,{resource:r,checked:n.has(r.resourceId),required:r.required,indent:1,onToggle:()=>N(r.resourceId)},r.resourceId))]},"snippets"):null)]}),e.jsxs("div",{className:"flex items-center justify-between pt-4 border-t mt-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("input",{type:"checkbox",checked:n.size===a.length,onChange:T,className:"accent-primary","data-testid":"select-all-checkbox"}),e.jsx("span",{className:"text-xs text-muted-foreground",children:n.size===a.length?c("exportDialog.allSelected","All resources selected"):c("exportDialog.countSelected","{{count}} of {{total}} resources selected",{count:n.size,total:a.length})})]}),e.jsxs(z,{onClick:C,disabled:f||n.size===0,"data-testid":"export-confirm-btn",children:[f?e.jsx(S,{className:"h-4 w-4 animate-spin"}):e.jsx(W,{className:"h-4 w-4"}),c("exportDialog.exportSelected","Export Selected")]})]})]})]})})]})}function g({resource:l,checked:m,required:i,indent:u,onToggle:c}){const n=u===0?"ps-2":u===1?"ps-6":"ps-10";return e.jsxs("label",{className:`flex items-center gap-2 rounded-md px-2 py-1.5 text-sm cursor-pointer hover:bg-secondary/50 transition-colors ${n} ${m?"text-foreground":"text-muted-foreground"}`,children:[e.jsx("input",{type:"checkbox",checked:m,disabled:i,onChange:c,className:"accent-primary disabled:opacity-60"}),e.jsx(M,{type:l.resourceType}),e.jsx("span",{className:"truncate flex-1",children:l.name||l.resourceId.slice(0,12)}),i&&e.jsx(_,{className:"h-3 w-3 text-muted-foreground/50 shrink-0"})]})}export{X as E}; diff --git a/src/main/resources/META-INF/resources/assets/eye-off-DQKzJHI5.js b/src/main/resources/META-INF/resources/assets/eye-off-PKiH0Asw.js similarity index 92% rename from src/main/resources/META-INF/resources/assets/eye-off-DQKzJHI5.js rename to src/main/resources/META-INF/resources/assets/eye-off-PKiH0Asw.js index 422afa07bc..c114855527 100644 --- a/src/main/resources/META-INF/resources/assets/eye-off-DQKzJHI5.js +++ b/src/main/resources/META-INF/resources/assets/eye-off-PKiH0Asw.js @@ -1,4 +1,4 @@ -import{x as e}from"./index-BY6d8wze.js";/** +import{x as e}from"./index-BnLj1hck.js";/** * @license lucide-react v0.577.0 - ISC * * This source code is licensed under the ISC license. diff --git a/src/main/resources/META-INF/resources/assets/eye-Dbrf-yrM.js b/src/main/resources/META-INF/resources/assets/eye-xZR8Jj8Y.js similarity index 89% rename from src/main/resources/META-INF/resources/assets/eye-Dbrf-yrM.js rename to src/main/resources/META-INF/resources/assets/eye-xZR8Jj8Y.js index 2ed4eaabb6..983dabbfdd 100644 --- a/src/main/resources/META-INF/resources/assets/eye-Dbrf-yrM.js +++ b/src/main/resources/META-INF/resources/assets/eye-xZR8Jj8Y.js @@ -1,4 +1,4 @@ -import{x as c}from"./index-BY6d8wze.js";/** +import{x as c}from"./index-BnLj1hck.js";/** * @license lucide-react v0.577.0 - ISC * * This source code is licensed under the ISC license. diff --git a/src/main/resources/META-INF/resources/assets/file-output-BA4KZHPi.js b/src/main/resources/META-INF/resources/assets/file-output-DlS0SPnt.js similarity index 91% rename from src/main/resources/META-INF/resources/assets/file-output-BA4KZHPi.js rename to src/main/resources/META-INF/resources/assets/file-output-DlS0SPnt.js index 23b25f550a..ac60286071 100644 --- a/src/main/resources/META-INF/resources/assets/file-output-BA4KZHPi.js +++ b/src/main/resources/META-INF/resources/assets/file-output-DlS0SPnt.js @@ -1,4 +1,4 @@ -import{x as t}from"./index-BY6d8wze.js";/** +import{x as t}from"./index-BnLj1hck.js";/** * @license lucide-react v0.577.0 - ISC * * This source code is licensed under the ISC license. diff --git a/src/main/resources/META-INF/resources/assets/fingerprint-pattern-Dbd3CWkE.js b/src/main/resources/META-INF/resources/assets/fingerprint-pattern-Clkha78G.js similarity index 94% rename from src/main/resources/META-INF/resources/assets/fingerprint-pattern-Dbd3CWkE.js rename to src/main/resources/META-INF/resources/assets/fingerprint-pattern-Clkha78G.js index fb1a90d05d..5000a3a4b9 100644 --- a/src/main/resources/META-INF/resources/assets/fingerprint-pattern-Dbd3CWkE.js +++ b/src/main/resources/META-INF/resources/assets/fingerprint-pattern-Clkha78G.js @@ -1,4 +1,4 @@ -import{x as t}from"./index-BY6d8wze.js";/** +import{x as t}from"./index-BnLj1hck.js";/** * @license lucide-react v0.577.0 - ISC * * This source code is licensed under the ISC license. diff --git a/src/main/resources/META-INF/resources/assets/fr-DUqhFc0i.js b/src/main/resources/META-INF/resources/assets/fr-DUqhFc0i.js new file mode 100644 index 0000000000..6ce859ac0e --- /dev/null +++ b/src/main/resources/META-INF/resources/assets/fr-DUqhFc0i.js @@ -0,0 +1 @@ +const e={title:"Pièces jointes",empty:"Cette conversation n’a aucune pièce jointe.",loadError:"Impossible de charger les pièces jointes.",deleteAll:"Tout supprimer",delete:"Supprimer la pièce jointe",download:"Télécharger",deleted:"Pièce jointe supprimée",deletedAll:"{{count}} pièces jointes supprimées",confirmDeleteTitle:"Supprimer la pièce jointe ?",confirmDeleteDesc:"Supprime définitivement ce fichier. Irréversible.",confirmDeleteAllTitle:"Supprimer toutes les pièces jointes ?",confirmDeleteAllDesc:"Supprime définitivement tous les fichiers de cette conversation. Irréversible."},t={title:"EDDI Manager",description:"Tableau de bord d'administration de la plateforme IA EDDI"},r={login:"Connexion",logout:"Déconnexion",loading:"Authentification…",sessionExpired:"Session expirée. Veuillez vous reconnecter.",profile:"Profil",guest:"Invité",userMenu:"Menu utilisateur"},n={dashboard:"Tableau de bord",agents:"Agents",packages:"Workflows",conversations:"Conversations",coordinator:"Coordinateur",schedules:"Planifications",logs:"Journaux",orphans:"Orphelins",secrets:"Secrets",audit:"Journal d’audit",quotas:"Quotas",groups:"Groupes",chat:"Chat",resources:"Ressources",sectionManagement:"Gestion",sectionDevelopment:"Développement",sectionOperations:"Opérations",mainNavigation:"Navigation principale",openMenu:"Ouvrir le menu de navigation",sectionCore:"Principal",sectionBuild:"Création & tests",sectionMonitor:"Surveillance",sectionAdmin:"Administration",studio:"Studio",gdpr:"Confidentialité",memories:"Mémoire utilisateur",properties:"Propriétés",triggers:"Déclencheurs",capabilities:"Capacités",sync:"Synchronisation",updates:"Mises à jour",channels:"Canaux",approvals:"Approbations",userConversations:"Conversations utilisateur",userData:"Données utilisateur",variables:"Variables",sectionExternal:"Externe",activeConversations:"Conversations actives",openapi:"OpenAPI",docs:"Documentation",modeManager:"Gestionnaire",modeWorkforce:"Équipe",switchMode:"Changer d'espace",operator:"Opérateur de plateforme",workforce:"Effectif",monitoring:"Suivi des conversations",analytics:"Analyses"},s={light:"Clair",dark:"Sombre",system:"Système"},i={label:"Langue",en:"English",de:"Deutsch",fr:"Français",es:"Español",ar:"العربية",zh:"中文",th:"ไทย",ja:"日本語",ko:"한국어",pt:"Português",hi:"हिन्दी",switchFailed:"Impossible de charger cette langue. Veuillez réessayer."},o={dashboard:{title:"Tableau de bord",subtitle:"Vue d'ensemble de vos agents et conversations EDDI",activeAgents:"Agents actifs",totalWorkflows:"Workflows",totalResources:"Ressources",totalConversations:"Conversations",quickActions:"Actions rapides",recentAgents:"Agents récents",noRecentAgents:"Aucun agent pour l'instant. Créez votre premier agent !"},agents:{undeployPreviousVersionsHint:"Retire également toutes les versions antérieures de cet agent de l’environnement.",undeployPreviousVersionsLabel:"Retirer cette version et toutes les précédentes",undeployEndConversationsHint:"Termine immédiatement toute conversation en cours sur ce déploiement. Irréversible.",undeployEndConversationsLabel:"Terminer toutes les conversations actives",confirmUndeployDescription:"La version {{version}} sera retirée de {{environment}}.",confirmUndeploy:"Retirer l’agent du déploiement ?",title:"Agents",subtitle:"Gérez vos agents d'IA conversationnelle"},packages:{title:"Workflows",subtitle:"Configurez les workflows et extensions des agents"},conversations:{permanentDeleteSuccess:"Supprimé définitivement",softDeleteSuccess:"Conversation supprimée",deletePermanentAction:"Supprimer définitivement",deletePermanentLabel:"Supprimer définitivement — efface aussi les pièces jointes, l’instantané mémoire et l’historique d’approbation. Irréversible.",confirmDeleteSoft:"Par défaut, il s’agit d’une suppression logique — la conversation est masquée des listes mais ses données restent sur le serveur.",title:"Conversations",subtitle:"Consultez et gérez les conversations des agents"},resources:{title:"Ressources",subtitle:"Gérez les règles de comportement, dictionnaires, sorties et plus"},chat:{title:"Chat",subtitle:"Discutez avec vos agents déployés"},channels:{title:"Canaux",subtitle:"Connectez des agents et des groupes à des plateformes de messagerie comme Slack"},groups:{title:"Groupes",subtitle:"Groupes de discussion multi-agents pour le débat structuré et la collaboration"},approvals:"Approbations en attente",approvalsSubtitle:"Examinez et décidez des conversations en attente de saisie humaine"},a={add:"Ajouter",agent:"Agent",back:"Retour",cardView:"Vue en cartes",clear:"Effacer la sélection",confirm:"Confirmer",description:"Description",group:"Groupe",id:"ID",listView:"Vue en liste",modified:"Modifié",name:"Nom",new:"Nouveau",version:"Version",viewMode:"Mode d'affichage",loading:"Chargement...",error:"Une erreur est survenue",retry:"Réessayer",save:"Enregistrer",cancel:"Annuler",delete:"Supprimer",remove:"Retirer",create:"Créer",edit:"Modifier",search:"Rechercher...",noResults:"Aucun résultat trouvé",duplicate:"Dupliquer",close:"Fermer",skipToMain:"Aller au contenu principal",opensNewTab:"ouvre dans un nouvel onglet",moreActions:"Plus d'actions",sortByName:"Trier par nom",sortByVersion:"Trier par version",sortByModified:"Trier par date de modification",apply:"Appliquer",copied:"Copié",copy:"Copier",saving:"Enregistrement…",showMore:"Show More",showLess:"Show Less",copyFailed:"Échec de la copie dans le presse-papiers",loadError:"Échec du chargement des données",actions:"Actions",view:"Voir",refresh:"Actualiser",previous:"Précédent",next:"Suivant",dismiss:"Ignorer",refreshFailed:"Actualisation impossible — affichage des dernières données chargées.",settings:"Paramètres",history:"Historique",copyId:"Copier l'ID de l'agent",off:"Désactivé",on:"Activé"},u={confirmDeleteDescription:"Cette action est irréversible. L'agent et toutes ses données seront définitivement supprimés.",confirmUndeploy:"Retirer l'agent du déploiement ?",confirmUndeployDescription:"La version {{version}} sera retirée de {{environment}}.",createSuccess:"Agent créé avec succès",deleteAgent:"Supprimer l'agent",deployError:"Échec du déploiement",deploySuccess:"Agent déployé avec succès",noDescription:"Aucune description",selectAgent:"Sélectionner un agent",undeployEndConversationsHint:"Termine immédiatement toute conversation en cours sur ce déploiement. Irréversible.",undeployEndConversationsLabel:"Terminer toutes les conversations actives",undeployError:"Échec du retrait",undeployPreviousVersionsHint:"Retire également toutes les versions antérieures de cet agent de l'environnement.",undeployPreviousVersionsLabel:"Retirer cette version et toutes les précédentes",undeploySuccess:"Agent retiré",unnamed:"Agent sans nom",deploy:"Déployer",undeploy:"Retirer",createAgent:"Créer un agent",createTitle:"Créer un nouvel agent",name:"Nom",namePlaceholder:"Mon Agent",description:"Description",descriptionPlaceholder:"Décrivez ce que fait cet agent...",empty:"Aucun agent pour l'instant. Créez votre premier agent !",confirmDelete:"Êtes-vous sûr de vouloir supprimer cet agent ?",count_one:"{{count}} agent",count_other:"{{count}} agents",export:"Exporter",exporting:"Exportation en cours...",exportSuccess:"Agent exporté avec succès",import:"Importer un agent",importing:"Importation en cours...",importSuccess:"Agent importé avec succès",importError:"Échec de l'importation de l'agent",chat:"Chat",deployAndChat:"Déployer & Discuter",openExternalChat:"Ouvrir dans un nouvel onglet",emptyDescription:"Utilisez l'assistant pour créer un agent entièrement configuré en quelques minutes.",count_many:"{{count}} agents",liveIn:"Actif en {{environment}}",chatIn:"Discuter en {{environment}}",openExternalChatIn:"Ouvrir le chat {{environment}} dans un nouvel onglet",deployToProduction:"Déployer en production",undeployFromProduction:"Retirer de la production",deployFailedIn:"Le déploiement a échoué en {{environment}}"},l=JSON.parse(`{"a2aDescHint":"Affiché dans l'Agent Card — aide les autres agents à comprendre ce que fait cet agent","a2aDescPlaceholder":"Que fait cet agent ?","a2aDescription":"Description de l'agent","a2aEnable":"Activer l'A2A","a2aEnabled":"Activé","a2aEnabledDesc":"Rendre cet agent découvrable par d'autres agents via le protocole A2A. D'autres instances EDDI peuvent trouver et appeler cet agent comme un outil.","a2aEndpoints":"Endpoints","a2aNoSkills":"Aucune compétence — une compétence « chat » par défaut sera utilisée","a2aSection":"Agent-to-Agent (A2A)","a2aSkillPlaceholder":"ex. translation, code-review","a2aSkills":"Compétences A2A","addAttribute":"Ajouter un attribut","agentCardPreview":"Aperçu de l'Agent Card","agentDid":"DID de l'agent","attributeKey":"clé","attributeValue":"valeur","attributesLabel":"Attributs","attrs":"attr.","autoSnapshotEnable":"Activer les points de contrôle automatiques","capabilities":"Capacités","capabilitiesDesc":"Compétences déclarées pour l'Agent Card A2A et le registre de capacités. Les autres agents les découvrent lors du choix des cibles de délégation.","capabilityPlaceholder":"Rechercher ou saisir un nom de compétence...","comingSoon":"bientôt disponible","defaultVisibility":"Visibilité par défaut","dreamConsolidation":"Consolidation onirique","dreamDesc":"Tâche LLM en arrière-plan qui résout les contradictions, élague les entrées obsolètes et, en option, résume les interactions.","enableMemoryTools":"Activer les outils de mémoire","enableSwd":"Activer la discipline d'écriture stricte","forkingDisabledTooltip":"Disponible dans une prochaine version","forkingEnabled":"Bifurcation de session","forkingNote":"L'endpoint de bifurcation de session (POST /v6/conversations/{{id}}/fork) n'est pas encore disponible.","guardrails":"Garde-fous d'écriture","identity":"Identité cryptographique","keyExpired":"Expirée","keyVersion":"Clé v{{version}}","legacyKey":"Clé héritée (v0)","maxCheckpoints":"Points de contrôle max.","maxCheckpointsHint":"par conversation","maxEntriesPerUser":"Max. par utilisateur","maxForks":"Bifurcations max.","maxForksHint":"par conversation","maxRecallEntries":"Rappel max.","memoryPolicy":"Politique de mémoire","memoryPolicyDesc":"La discipline d'écriture stricte régit ce qui se passe lorsque les mises à jour de propriétés échouent pendant une étape de conversation. Choisissez comment le moteur gère les données partiellement validées.","onCapReached":"Lorsque le plafond est atteint","onFailure":"Stratégie en cas d'échec","onFailureDigest":"Digest — annuler les modifications, transmettre un résumé au LLM","onFailureExclude":"Tout exclure — abandonner silencieusement toutes les mises à jour de propriétés","onFailureKeep":"Tout conserver — conserver les modifications et journaliser un avertissement","openWorkflow":"Ouvrir","outdated":"obsolète","publicKey":"Clé publique","publicKeyHint":"Généré automatiquement à la première signature","publicKeys":"Clés publiques","recallOrder":"Ordre de rappel","requirePeer":"Exiger la vérification des pairs","requirePeerDesc":"Rejeter les tâches A2A entrantes des agents incapables de prouver leur identité","securityFlagConfirmBtn":"Activer quand même","securityFlagConfirmDesc":"La signature cryptographique n'est pas encore disponible dans cette version. Activer ce drapeau entraînera le rejet des enregistrements par le backend avec une erreur HTTP 400. Voulez-vous vraiment continuer ?","securityFlagConfirmTitle":"Activer le drapeau de sécurité ?","securityFlagWarning":"La signature cryptographique n'est pas encore disponible dans cette version. Le backend rejettera les enregistrements si ces drapeaux sont activés (HTTP 400).","securityFlags":"Signature et vérification","securityIdentity":"Sécurité et identité","sessionManagement":"Gestion de session","sessionManagementDesc":"Les points de contrôle de mémoire capturent l'état de la conversation avant les opérations risquées, permettant une annulation propre en cas d'échec.","signA2A":"Signer les messages inter-agents (A2A)","signA2ADesc":"Signer cryptographiquement les messages A2A sortants pour les protéger contre la falsification","signMcp":"Signer les invocations MCP","signMcpDesc":"Joindre des signatures aux appels d'outils MCP pour une vérification sécurisée du serveur","skillAlreadyExists":"Cette compétence est déjà déclarée","switchToLatest":"Passer à la dernière version","toggleAttributes":"Basculer les attributs","triggerBeforeAction":"Avant l'action","triggerBeforeTool":"Avant l'exécution de l'outil","triggerOn":"Déclenchement","updateToLatest":"Mettre à jour vers la dernière version","userMemory":"Mémoire utilisateur","userMemoryDesc":"Mémoire persistante par utilisateur avec outils LLM (remember/recall/forget). La persistance de base des propriétés longTerm fonctionne toujours, quel que soit ce réglage.","viewingOldVersion":"Vous consultez la version {{current}}. La dernière est la version {{latest}}.","workflowAdded":"Workflow ajouté","workflowRemoved":"Workflow retiré","workflowUpdated":"Workflow mis à jour vers la dernière version","title":"Détails de l'agent","backToAgents":"Retour aux Agents","packages":"Workflows","noWorkflows":"Aucun workflow ajouté","addWorkflow":"Ajouter un workflow","selectWorkflow":"Sélectionner un workflow à ajouter","rawConfig":"Configuration brute","editName":"Modifier le nom","editDescription":"Modifier la description","clickToEdit":"Cliquer pour modifier","noDescription":"Aucune description","duplicate":"Dupliquer","duplicating":"Duplication en cours...","duplicateSuccess":"Agent dupliqué avec succès","environments":"Environnements","envProduction":"Production","envTest":"Test","savingAgent":"Enregistrement de l'agent...","savedAgent":"Agent enregistré avec succès","saveError":"Échec de l'enregistrement de l'agent","deployToEnv":"Déployer en {{env}}","undeployFromEnv":"Retirer de {{env}}","openStudio":"Ouvrir dans le Studio","maxKeyLength":"Longueur max. de clé","maxValueLength":"Longueur max. de valeur","maxWritesPerTurn":"Écritures max./tour","dreamSchedule":"Planification (cron)","dreamLlmProvider":"Fournisseur LLM","dreamLlmModel":"Modèle LLM","dreamMaxCost":"Coût max./exécution ($)","dreamPruneDays":"Nettoyage après (jours)","dreamBatchSize":"Taille du lot","detectContradictions":"Détecter les contradictions","summarizeInteractions":"Résumer les interactions","confidenceLow":"Faible","confidenceMedium":"Moyen","confidenceHigh":"Élevé","visibilitySelf":"Propre","visibilityGlobal":"Global","onCapEvict":"Supprimer le plus ancien","onCapReject":"Rejeter","recallMostRecent":"Plus récent","recallMostRelevant":"Plus pertinent","channels":"Connecteurs de canal","channelsDesc":"Connectez cet agent à des canaux Slack. Chaque connecteur est configuré indépendamment avec ses propres identifiants, prenant en charge les configurations multi-workspace.","noChannels":"Aucun canal configuré","noChannelsDesc":"Ajoutez un canal Slack pour permettre aux utilisateurs d'interagir avec cet agent depuis Slack.","addSlackChannel":"Ajouter un canal Slack","slackChannel":"Canal Slack","removeChannel":"Supprimer le canal","removeChannelConfirm":"Supprimer ce connecteur de canal Slack ?","removeChannelDesc":"This action will permanently disconnect this channel.","channelId":"ID du canal","channelIdHint":"Les ID de canal commencent par C suivi de caractères alphanumériques majuscules","botToken":"Token du bot","botTokenPlaceholder":"xoxb-… ou \${vault:slack-bot-token}","botTokenHint":"Token OAuth Bot User Slack. Utilisez une référence vault pour la sécurité.","signingSecret":"Secret de signature","signingSecretPlaceholder":"Chaîne hexadécimale ou \${vault:slack-signing-secret}","signingSecretHint":"Depuis la page Basic Information de votre application Slack. Utilisez une référence vault pour la sécurité.","groupIdOptional":"ID de groupe (optionnel)","groupIdPlaceholder":"ID de configuration de groupe multi-agent","groupIdHint":"Activez les discussions multi-agents \\"group: question\\" depuis ce canal Slack.","slackSetupGuide":"Guide de configuration Slack","slackWebhookUrl":"URL du webhook","slackWebhookCopied":"URL du webhook copiée","slackStep1":"Créez une application Slack sur api.slack.com/apps et installez-la dans votre workspace.","slackStep2":"Copiez le token du bot (xoxb-…) et le secret de signature dans le vault EDDI et configurez les canaux ci-dessous.","slackStep3":"Ensuite, activez les Event Subscriptions dans votre application Slack, collez l'URL du webhook ci-dessus et abonnez-vous à :","slackSetupNote":"Important : Configurez le canal ci-dessous avant d'activer les Event Subscriptions — Slack envoie un défi de vérification d'URL qui nécessite que le secret de signature soit configuré dans EDDI.","slackRequiredScopes":"Permissions requises pour le token du bot","hitlConfig":"Human-in-the-Loop","hitlConfigDesc":"Lorsque cet agent met une conversation en pause pour approbation humaine, ces paramètres contrôlent le temps d'attente et ce qui se passe sans décision à temps.","hitlEnable":"Configurer les délais d'approbation humaine","hitlTimeoutPolicy":"Si aucune décision à temps","hitlApprovalTimeout":"Délai d'approbation (ISO-8601)","hitlTimeoutInvalid":"Une politique finie nécessite une durée ISO-8601 positive, p. ex. PT15M.","hitlTimeoutHint":"p. ex. PT30S, PT15M, PT2H.","hitlPauseReason":"Motif d'approbation (visible par les approbateurs)","hitlPauseReasonPlaceholder":"p. ex. La suppression nécessite l'accord du responsable","toolApprovalsEnable":"Soumettre certains appels d'outils à approbation","toolApprovalsDesc":"Mettre en pause lorsque le modèle invoque un outil correspondant, avant son exécution. Une liste « exiger une approbation » vide désactive le contrôle des outils.","toolRequireApproval":"Exiger une approbation (motifs glob, un par ligne)","toolPatternHint":"'*' est le seul caractère générique. Préfixe de source facultatif :","toolExempt":"Exemptés (toujours autorisés, un par ligne)","toolMaxPauses":"Pauses max / tour (1–10)","toolMaxAuto":"Approbations automatiques max / tour (0–10)","toolOnNoProgress":"En cas de nouvelle pause sans progression","toolTimeoutPolicy":"Politique de délai d'expiration des pauses d'outil","toolTimeoutInherit":"Hériter de l'agent","toolAutoApproveDemotion":"Le AUTO_APPROVE au niveau de l'agent ne s'applique pas aux approbations d'outils — les pauses d'outil attendront indéfiniment sauf si vous définissez ci-dessus une politique de délai d'expiration des pauses d'outil.","toolPauseReason":"Motif de l'approbateur ({toolNames} autorisé)","toolPauseReasonPlaceholder":"p. ex. Approbation requise pour {toolNames}","toolPendingMessage":"Message pour l'utilisateur final pendant la pause ({toolNames} autorisé)","toolPendingMessagePlaceholder":"p. ex. En attente de l'approbation humaine de {toolNames}…","toolInGroupTurns":"Au sein d'un tour de groupe, l'appel d'outil contrôlé d'un membre est automatiquement rejeté (REJECT)."}`),c={title:"Assistant Agent"},d={baseUrlHintCloud:"Nécessaire uniquement si vous utilisez un proxy, un déploiement privé ou un endpoint Azure OpenAI",baseUrlHintLocal:"Requis — l'URL où votre serveur de modèle local s'exécute",modelHint:"Saisissez n'importe quel nom de modèle pris en charge par votre fournisseur, ou choisissez-en un parmi les suggestions",modelPlaceholder:"ex. {{model}} (ou tout modèle pris en charge par votre fournisseur)",title:"Assistant de création d'agent",subtitle:"Créez un agent entièrement configuré en quelques minutes",backToAgents:"Retour aux Agents",next:"Suivant",back:"Retour",createOnly:"Créer uniquement",createAndDeploy:"Créer & Déployer",typeTitle:"Quel type d'agent ?",typeDesc:"Choisissez le type d'agent que vous souhaitez créer",standardAgent:"Agent standard",apiAgent:"Agent API",standardDesc:"IA conversationnelle alimentée par un LLM avec outils, Quick Replies et analyse de sentiment",apiDesc:"Importez une spécification OpenAPI/Swagger pour générer automatiquement un agent API",infoTitle:"Identité de l'agent",infoDesc:"Donnez un nom et une personnalité à votre agent",agentName:"Nom de l'agent",namePlaceholder:"ex. Bot d'assistance client",systemPrompt:"Prompt système",promptPlaceholder:"Tu es un assistant IA serviable qui...",promptHint:"Cette instruction définit le comportement et les réponses de votre agent.",llmTitle:"Configuration LLM",llmDesc:"Choisissez le modèle d'IA qui alimente votre agent",provider:"Fournisseur",model:"Modèle",apiKey:"Clé API",baseUrl:"URL de base",baseUrlPlaceholder:"URL d'endpoint personnalisé",optional:"facultatif",apiSpecTitle:"Spécification OpenAPI",apiSpecDesc:"Fournissez la spécification OpenAPI/Swagger de votre API",specByUrl:"URL",specByFile:"Fichier",specByPaste:"Coller",fetch:"Récupérer",specFetched:"Spécification chargée !",specFetchError:"Échec du chargement de la spécification",dropFile:"Déposez votre fichier OpenAPI ici",dropHint:"Format JSON ou YAML",browse:"Parcourir les fichiers",pasteSpec:"Collez votre JSON ou YAML OpenAPI/Swagger ici...",specLoaded:"Fichier chargé : {{name}}",specReady:"Spécification chargée ({{chars}} caractères)",apiBaseUrlLabel:"URL de base API",apiAuthLabel:"En-tête d’authentification API",endpointFilter:"Filtre d'endpoints",endpointFilterPlaceholder:"Séparés par virgules : GET /users, POST /orders",featuresTitle:"Fonctionnalités & Options",featuresDesc:"Personnalisez les capacités de votre agent",introMessage:"Message d'accueil",introMessageDesc:"Message affiché au début d'une conversation",quickReplies:"Réponses rapides",quickRepliesDesc:"Le LLM génère des suggestions de réponses cliquables",sentiment:"Analyse de sentiment",sentimentDesc:"Suivre l'humeur, l'intention et l'urgence en temps réel",structuredOutput:"Sortie structurée",structuredOutputDesc:"Le LLM répond avec un objet JSON au lieu de texte brut",structuredOutputInfo:"L'activation modifie le mode de réponse du LLM : au lieu de texte brut, il retourne un objet JSON avec des champs structurés. Un schéma JSON est ajouté au prompt système et le modèle passe en mode réponse JSON.",builtInTools:"Outils intégrés",builtInToolsDesc:"Activer la bibliothèque d'outils intégrés d'EDDI (calculatrice, date/heure, etc.)",toolsWhitelist:"Whitelist (vide = tous les outils)",mcpServers:"Serveurs MCP",mcpServersDesc:"Serveurs Model Context Protocol pour outils externes",autoDeploy:"Déploiement auto",autoDeployDesc:"Déployer l'agent immédiatement après sa création",environment:"Environnement",envProduction:"Production",envTest:"Test",reviewTitle:"Vérifier & Créer",reviewDesc:"Vérifiez votre configuration avant de créer l'agent",reviewType:"Type",reviewName:"Nom",reviewPrompt:"Prompt système",reviewProvider:"Fournisseur",reviewModel:"Modèle",reviewSpec:"Spec. OpenAPI",reviewIntro:"Message d'accueil",reviewDeploy:"Déployer",success:"Agent créé avec succès !",agentCreated:"Agent créé !",deployed:"Déployé",endpointsParsed:"{{count}} endpoints API analysés",viewAgent:"Voir l'agent",createAnother:"Créer un autre",vaultKeyUsed:"Cet agent utilise la clé de coffre ci-dessous. Choisissez la même pour votre prochain agent au lieu de recoller la clé d'API.",vaultKeyCopied:"Référence de coffre copiée",allTools:"Tous les outils",selectSpecific:"Sélection manuelle",allToolsInfo:"Les {{count}} outils intégrés seront accessibles à votre agent. Choisissez « Sélection manuelle » pour restreindre les outils actifs.",availableTools:"Outils disponibles",toolCount:"{{selected}} sur {{total}} sélectionnés",specTooLarge:"Cette spécification est trop volumineuse pour être chargée ici",specUrlInvalid:"Ceci n'est pas une URL valide",specUrlScheme:"Seules les URL http:// et https:// sont prises en charge"},p={confirmDeleteDescription:"Cette action est irréversible. Le workflow et toutes ses données seront définitivement supprimés.",createSuccess:"Workflow créé avec succès",unnamed:"Workflow sans nom",createWorkflow:"Créer un workflow",createTitle:"Créer un nouveau workflow",name:"Nom",namePlaceholder:"Mon Workflow",description:"Description",descriptionPlaceholder:"Décrivez ce que fait ce workflow...",noDescription:"Aucune description",empty:"Aucun workflow pour l'instant. Créez votre premier workflow !",confirmDelete:"Êtes-vous sûr de vouloir supprimer ce workflow ?",count_one:"{{count}} workflow",count_other:"{{count}} workflows",emptyDescription:"Les workflows définissent le pipeline de traitement de vos agents.",count_many:"{{count}} workflows"},m={backToAgent:"Retour à l'agent",title:"Détails du workflow",backToWorkflows:"Retour aux Workflows",extensions:"Extensions",noExtensions:"Aucune extension dans ce workflow",rawConfig:"Configuration brute"},g={chooseConfig:"Choisir une config",chooseConfigHint:"Créer une nouvelle config ou en lier une existante",configCreated:"Config créée — ajoutée au pipeline",createNewConfig:"Créer une nouvelle config",createNewConfigHint:"Crée une config vide que vous pourrez modifier plus tard",noExistingConfigs:"Aucune config existante trouvée — créez-en une nouvelle ci-dessus",orExisting:"ou utiliser une existante",updateToLatest:"Mettre à jour vers la dernière version",title:"Éditeur de workflow",pipeline:"Pipeline d'extensions",addHint:"Ajoutez des extensions pour construire votre pipeline",addHintDialog:"Sélectionnez un type d'extension à ajouter",reorder:"Réordonner l'extension",saved:"Workflow enregistré avec succès",saveError:"Échec de sauvegarde du workflow",noTasks:"Aucune tâche dans ce workflow",addTask:"Ajouter une tâche"},v={confirmDeleteSoft:"Par défaut, il s'agit d'une suppression logique — la conversation est masquée des listes mais ses données restent sur le serveur.",deletePermanentLabel:"Supprimer définitivement — efface aussi les pièces jointes, l'instantané mémoire et l'historique d'approbation. Irréversible.",monitorSubtitle:"Surveiller et gérer en masse les conversations en cours par agent.",noActiveDesc:"Cette version de l'agent n'a aucune conversation en cours pour le moment.",purgeDesc:"Supprimer définitivement les conversations TERMINÉES dont la dernière activité est antérieure au nombre de jours indiqué.",selectAgentPromptDesc:"Les conversations actives sont listées par agent et par version.",searchPlaceholder:"Rechercher par ID de conversation...",id:"Conversation",agent:"Agent",state:"État",lastActivity:"Dernière activité",actions:"Actions",empty:"Aucune conversation pour l'instant. Déployez un agent et commencez à discuter !",confirmDelete:"Êtes-vous sûr de vouloir supprimer cette conversation ?",count_one:"{{count}} conversation",count_other:"{{count}} conversations",emptyDescription:"Déployez un agent et démarrez une conversation depuis la page Chat.",filterAll:"Tous",stateActive:"Actif",stateInProgress:"En cours",stateEnded:"Terminée",stateInterrupted:"Interrompue",permanentDeleteSuccess:"Supprimé définitivement",softDeleteSuccess:"Conversation supprimée",monitorActive:"Surveiller les actives",filterByAgent:"Filtrer par agent",filterByVersion:"Filtrer par version d'agent",allVersions:"Toutes les versions",version:"v{{version}}",showingRange:"Affichage de {{from}} à {{to}}",deleteConversation:"Supprimer la conversation",steps:"Étapes",perPage:"Par page",pageNumber:"Page {{page}}",deletePermanentAction:"Supprimer définitivement",step:"étape",monitorTitle:"Conversations actives",backToList:"Retour aux conversations",selectAgentToMonitor:"Sélectionner un agent",selectedCount:"{{count}} sélectionné(s)",endSelected:"Terminer la sélection",selectAgentPrompt:"Sélectionnez un agent à surveiller",noActive:"Aucune conversation active",selectAll:"Tout sélectionner",selectOne:"Sélectionner {{id}}",purgeTitle:"Purger les conversations terminées",olderThanDays:"Plus ancien que (jours)",purgeAction:"Purger",confirmEndTitle:"Terminer les conversations sélectionnées ?",confirmPurgeTitle:"Purger les conversations terminées ?",count_many:"{{count}} conversations",confirmEndDesc_many:"{{count}} conversations seront définies sur TERMINÉE. Les conversations en pause (En attente humaine) sont terminées en toute sécurité via le chemin tenant compte des approbations.",confirmEndDesc_one:"{{count}} conversation seront définies sur TERMINÉE. Les conversations en pause (En attente humaine) sont terminées en toute sécurité via le chemin tenant compte des approbations.",confirmEndDesc_other:"{{count}} conversations seront définies sur TERMINÉE. Les conversations en pause (En attente humaine) sont terminées en toute sécurité via le chemin tenant compte des approbations.",confirmPurgeDesc_many:"Cela supprime définitivement les conversations TERMINÉES datant de plus de {{days}} jours, y compris leur mémoire stockée et leurs pièces jointes. Cette action est irréversible.",confirmPurgeDesc_one:"Cela supprime définitivement les conversations TERMINÉES datant de plus de {{days}} jour, y compris leur mémoire stockée et leurs pièces jointes. Cette action est irréversible.",confirmPurgeDesc_other:"Cela supprime définitivement les conversations TERMINÉES datant de plus de {{days}} jours, y compris leur mémoire stockée et leurs pièces jointes. Cette action est irréversible.",pausedNote_many:"{{count}} des conversations sélectionnées sont En attente humaine et verront leur approbation en attente annulée.",pausedNote_one:"{{count}} des conversations sélectionnées est En attente humaine et verra son approbation en attente annulée.",pausedNote_other:"{{count}} des conversations sélectionnées sont En attente humaine et verront leur approbation en attente annulée.",endSuccess_many:"{{count}} conversations terminées",endSuccess_one:"{{count}} conversation terminée",endSuccess_other:"{{count}} conversations terminées",purgeSuccess_many:"{{count}} conversations terminées purgées",purgeSuccess_one:"{{count}} conversation terminée purgée",purgeSuccess_other:"{{count}} conversations terminées purgées"},f={backToConversations:"Retour aux conversations",chatLog:"Journal de conversation",noSteps:"Aucune étape de conversation enregistrée",properties:"Propriétés de la conversation",rawData:"Voir les données brutes",step:"Étape",steps:"étapes",title:"Conversation",continueChat:"Continuer dans le chat",searchTranscript:"Rechercher dans la conversation…",exportMd:"Exporter en Markdown",toolSummary:"Utilisation des outils",totalCost:"Coût total",cacheHitRate:"Taux de cache"},h={hide:"Masquer",secretModeOff:"Basculer le mode secret",secretModeOn:"Mode secret activé",secretPlaceholder:"Saisir la valeur du secret...",show:"Afficher",selectAgent:"Sélectionnez un agent...",noAgents:"Aucun agent déployé disponible. Déployez d'abord un agent.",placeholder:"Tapez un message...",send:"Envoyer",newConversation:"Nouvelle conversation",endConversation:"Terminer la conversation",streaming:"Streaming",thinking:"Réflexion en cours...",usingTools:"Utilisation des outils",connectionError:"Erreur de connexion. Veuillez réessayer.",empty:"Sélectionnez un agent et commencez à discuter !",history:"Historique",undo:"Annuler le dernier message",redo:"Rétablir le message",continueConversation:"Continuer",noHistory:"Aucun historique de conversation.",attach:"Joindre un fichier",attachUploading:"Chargement...",attachSuccess:"Fichier joint",attachError:"Échec du chargement",attachLimit:"Vous pouvez joindre jusqu'à {{max}} fichiers par message.",attachTooLargeToForward:"{{name}} est enregistré mais trop volumineux pour être envoyé directement au modèle.",attachNotForwarded:"Non envoyé au modèle",dropToAttach:"Déposez des fichiers pour les joindre",stepFailedFallback:"Cette étape a échoué. Le journal du serveur contient l'erreur complète.",retry:"Réessayer la dernière étape",retrySuccess:"Étape ré-exécutée",retryError:"Échec de la tentative",showActivity:"Afficher l’activité",hideActivity:"Masquer l’activité",scrollToBottom:"Défiler vers le bas",copyMessage:"Copier le message",copied:"Copié !",activity:{processing:"Traitement…",steps:"étapes",toolCalls:"appels d’outils",toolCall:"Appel d’outil",toolResult:"Résultat",error:"Une erreur s'est produite",toolCallsCount_one:"{{count}} appel d'outil",stepsCount:"{{count}} étapes",stepsCount_one:"{{count}} étape",stepsCount_many:"{{count}} étapes",stepsCount_other:"{{count}} étapes",toolCallsCount_many:"{{count}} appels d'outils",toolCallsCount_other:"{{count}} appels d'outils",toolCallsCount:"{{count}} appels d'outils",usingTool:"Utilisation de {{tool}}…"},context:{conversationId:"ID conversation",agentVersion:"Version de l’agent",startTime:"Début",stepCount:"Étapes",show:"Afficher les infos",hide:"Masquer les infos"},agentTyping:"L’agent rédige",copy:"Copier",emptyConversation:"Cette conversation ne contient encore aucun message.",loadConversationFailed:"Impossible de charger cette conversation : {{error}}",multilineHint:"Entrée pour envoyer · Maj+Entrée pour une nouvelle ligne",multilineHintCtrlEnter:"Ctrl+Entrée pour envoyer · Entrée pour une nouvelle ligne",toolRefused:"Refusé"},b={backToWorkflow:"Retour au workflow",confirmDeleteDescription:"Cette action est irréversible. Le {{type}} sera définitivement supprimé.",createSuccess:"{{type}} créé avec succès",snippetNameInvalid:"Seuls les lettres minuscules (a-z), les chiffres (0-9) et les underscores (_) sont autorisés.",snippetNameRequired:"Le nom de l'extrait est requis.",unnamed:"Ressource sans nom",noDescription:"Aucune description",backToResources:"Retour aux Ressources",backToList:"Retour à {{type}}",unknownType:"Type de ressource inconnu",rawConfig:"Configuration brute",rawConfigHint:"Configuration JSON de cette ressource",create:"Créer {{type}}",createTitle:"Créer {{type}}",createDescription:"Créer une configuration {{type}} vide. Vous pourrez la modifier après la création.",confirmDelete:"Êtes-vous sûr de vouloir supprimer ce(tte) {{type}} ?",empty:"Aucune ressource {{type}} pour l'instant.",itemCount_one:"{{count}} élément",itemCount_other:"{{count}} éléments",count_one:"{{count}} ressource",count_other:"{{count}} ressources",types:{rules:{name:"Règles de comportement",description:"Définir les règles de flux de conversation et la logique de décision"},apicalls:{name:"Appels HTTP",description:"Configurer les intégrations API externes et les webhooks"},output:{name:"Jeux de sorties",description:"Gérer les modèles de réponse et les variantes de sortie"},dictionary:{name:"Dictionnaires",description:"Définir les modèles de reconnaissance de mots et de phrases"},llm:{name:"LLM",description:"Configurer les modèles d'IA, les prompts et les liaisons d'outils"},propertysetter:{name:"Définisseur de propriétés",description:"Définir les propriétés de conversation et gérer le remplissage de slots"},mcpcalls:{name:"Appels MCP",description:"Configurer les connexions MCP et les appels d'outils déterministes"},rag:{name:"Bases de connaissances",description:"Configurer des bases de connaissances RAG pour la recherche documentaire"},snippets:{name:"Extraits de prompt",description:"Blocs de construction reutilisables pour les prompts systeme"},parser:{name:"Parseurs",description:"Analyse NLP des entrées et configuration des dictionnaires"}},emptyDescription:"Créez votre premier(ère) {{type}} pour l'utiliser dans les workflows.",itemCount_many:"{{count}} éléments",count_many:"{{count}} ressources",descriptionPlaceholder:"Décrivez cette configuration {{type}}…"},A={compare:"Comparer",compareVersions:"Comparer les versions",deployFailed:"Échec du déploiement",deploying:"Déploiement…",diffHint:"Ajouts en vert, suppressions en rouge. Gauche = plus ancienne, Droite = plus récente.",discardAndLeave:"Abandonner et quitter",discardMessage:"Voulez-vous vraiment abandonner toutes les modifications non enregistrées ? Cette action est irréversible.",discardTitle:"Abandonner les modifications ?",newerVersion:"Plus récente",olderVersion:"Plus ancienne",saveAndTest:"Enregistrer et tester",swapVersions:"Inverser les versions",unsavedMessage:"Vous avez des modifications non enregistrées qui seront perdues. Voulez-vous vraiment continuer ?",unsavedTitle:"Modifications non enregistrées",formTab:"Formulaire",jsonTab:"JSON",save:"Enregistrer",discard:"Annuler",saving:"Enregistrement...",saved:"Enregistré avec succès",saveError:"Échec de l'enregistrement",dirty:"Modifications non enregistrées",version:"Version",versionPicker:"Sélectionner la version",readOnly:"Lecture seule",formPlaceholder:"Éditeur visuel bientôt disponible. Utilisez l'onglet JSON pour modifier.",jsonSchema:"Validation de schéma active",cascadeMode:"Les modifications seront propagées au workflow et à l'agent parent",updateUsageHint:"Mettre à jour les workflows et agents sélectionnés vers la nouvelle version ?",updateUsage:"Mettre à jour la sélection",skipUpdate:"Ignorer",cascading:"Mise à jour...",cascadeSuccess:"Mise à jour en cascade terminée",invalidJson:"JSON invalide — basculez vers l'onglet JSON pour corriger.",cascadePartialFailure_many:"{{count}} mises à jour en cascade échouées",cascadePartialFailure_one:"{{count}} mise à jour en cascade échouée",cascadePartialFailure_other:"{{count}} mises à jour en cascade échouées",usedInAgents_many:"Utilisé dans {{count}} agents",usedInAgents_one:"Utilisé dans {{count}} agent",usedInAgents_other:"Utilisé dans {{count}} agents"},C={condCapabilityMatch:"capabilityMatch",condDeploymentContext:"deploymentContext",strategy_executeAll:"Tout exécuter",strategy_executeUntilFirstSuccess:"Jusqu’au premier succès",invalidValue:"(invalide)",appendActions:"Ajouter des actions",expressionsAsActions:"Expressions comme actions",groups:"Groupes de comportement",addGroup:"Ajouter un groupe",groupName:"Nom du groupe",executionStrategy:"Stratégie d'exécution",rules:"Règles",addRule:"Ajouter une règle",ruleName:"Nom de la règle",actions:"Actions",noActions:"Aucune action",addAction:"Ajouter",actionPlaceholder:"ex. greet, get_weather",conditions:"Conditions",addCondition:"Ajouter une condition",conditionType:"Type de condition",nestedConditions:"Conditions imbriquées",configKey:"Clé",configValue:"Valeur",addConfig:"Ajouter une config",removeRule:"Supprimer la règle",removeGroup:"Supprimer le groupe",removeCondition:"Supprimer la condition",noGroups:"Aucun groupe de comportement défini",noRules:"Aucune règle dans ce groupe",noConditions:"Aucune condition"},y={noEndpointsFound:"Aucun endpoint trouvé dans la spécification",specUrlPlaceholder:"https://api.example.com/openapi.json",targetServerUrl:"URL du serveur cible",targetServerUrlPlaceholder:"https://api.example.com",calls:"Appels HTTP",addCall:"Ajouter un appel HTTP",callName:"Nom de l'appel",callDescription:"Description",descriptionPlaceholder:"Description en langage naturel pour les agents LLM",request:"Requête",method:"Méthode",path:"Chemin",pathPlaceholder:"/api/endpoint",headers:"En-têtes",addHeader:"Ajouter un header",queryParams:"Paramètres de requête",addQueryParam:"Ajouter un paramètre",contentType:"Type de contenu",body:"Corps de la requête",bodyPlaceholder:"Modèle de corps JSON...",parameters:"Paramètres (pour agents LLM)",paramName:"Nom du paramètre",paramDescription:"Description",addParam:"Ajouter un paramètre",options:"Options",saveResponse:"Enregistrer la réponse",responseObjectName:"Nom de l'objet réponse",responseHeaderObjectName:"Nom de l'objet header réponse",fireAndForget:"Envoyer et oublier",batchCalls:"Appels en lot",iterationObjectName:"Nom de l'objet itération",prePostInstructions:"Instructions pré/post",preRequest:"Pré-requête",postResponse:"Post-réponse",removeCall:"Supprimer l'appel",noCalls:"Aucun appel HTTP configuré",actions:"Actions déclencheurs",noActions:"Aucune action",actionPlaceholder:"ex. get_weather",addHttpCodeValidator:"Ajouter un filtre de code HTTP",httpCodeFilter:"Filtre de code HTTP",runOnCodes:"Exécuter sur les codes",skipOnCodes:"Ignorer sur les codes",propName:"Nom de la propriété",propValue:"Valeur ou modèle",overrideTitle:"Remplacer la valeur existante",override:"Remplacer",advancedMapping:"Mappage de chemin d'objet",fromPath:"Depuis le chemin d'objet",toPath:"Vers le chemin d'objet",convertToObject:"Convertir en objet",runOnValidationError:"Exécuter en cas d'erreur de validation",noPropertyInstructions:"Aucune instruction de propriété",addPropertyInstruction:"Ajouter une instruction de propriété",pathToTargetArray:"Chemin vers le tableau cible",iterationObjName:"Objet d'itération",templateFilter:"Expression de filtre",filterPlaceholder:"Filtre facultatif...",outputType:"Type de sortie",outputValue:"Valeur de sortie",noOutputInstructions:"Aucune instruction de construction de sortie",addOutputInstruction:"Ajouter une instruction de sortie",qrValue:"Valeur de réponse rapide",qrExpressions:"Expressions de réponse rapide",noQrInstructions:"Aucune instruction de construction de réponse rapide",addQrInstruction:"Ajouter une instruction de réponse rapide",noRetryPolicy:"Aucune politique de nouvelle tentative",addRetryPolicy:"Ajouter une politique de nouvelle tentative",maxRetries:"Tentatives max.",backoffDelayMs:"Délai de backoff (ms)",retryOnHttpCodes:"Réessayer sur les codes HTTP",valuePathMatchers:"Correspondances de chemin de valeur",noValuePathMatchers:"Aucune correspondance de chemin de valeur",valuePath:"Chemin de valeur",contains:"contient",equals:"égal à",trueIfNoMatch:"Réessayer si aucune correspondance",addValuePathMatcher:"Ajouter une correspondance de chemin de valeur",removeRetryPolicy:"Supprimer la politique de nouvelle tentative",delayMs:"Délai (ms)",propertyInstructions:"Instructions de propriété",outputBuildInstructions:"Instructions de construction de sortie",qrBuildInstructions:"Instructions de construction de réponse rapide",retryBackoff:"Nouvelle tentative et backoff",discoveredEndpoints:"Points de terminaison découverts",discoveryError:"Impossible d'analyser la spécification OpenAPI",openApiSpecUrl:"Importer depuis une spécification OpenAPI",invalidUrl:"Saisissez une URL http:// ou https:// valide",discovering:"Analyse…",discoverEndpoints:"Découvrir les points de terminaison",retry:"Réessayer",selectedCount:"sélectionné(s)",importAppend:"Ajouter aux appels",importReplace:"Remplacer tous les appels",confirmReplace:"Oui, tout remplacer",replaceConfirmMessage:"Cette action remplacera {{count}} appel(s) existant(s). Êtes-vous sûr ?"},D={continueOnErrorHint:"En cas d'échec, le pipeline continue ; l'erreur est exposée à ",descriptionPlaceholder:"Description en langage naturel pour les agents LLM",governanceHint:"Contrôlez quels outils sont exposés. Liste blanche = uniquement ceux-ci ; Liste noire = exclure ceux-ci.",pipelineHint:"Appels d'outils déterministes, déclenchés par action (mode pipeline).",responseObjectName:"Nom de l'objet réponse",discoveredTools:"Outils disponibles",whitelisted:"Sur liste blanche",addToWhitelist:"Ajouter à la liste blanche",addWhitelist:"Liste blanche",blacklisted:"Sur liste noire",addToBlacklist:"Ajouter à la liste noire",addBlacklist:"Liste noire",noRetryPolicy:"Aucune politique de nouvelle tentative",addRetryPolicy:"Ajouter une politique de nouvelle tentative",maxAttempts:"Tentatives max.",backoffDelayMs:"Délai de backoff (ms)",backoffMultiplier:"Multiplicateur de backoff",maxBackoffDelayMs:"Backoff max. (ms)",removeRetryPolicy:"Supprimer la politique de nouvelle tentative",callName:"Nom de l'appel",removeCall:"Supprimer l'appel",description:"Description",toolName:"Nom de l'outil",parameterSchema:"Schéma de paramètres",triggerActions:"Actions déclencheurs",toolArguments:"Arguments de l'outil",addArgument:"Ajouter un argument",saveResponse:"Enregistrer la réponse",continueOnError:"Continuer en cas d'erreur",retryBackoff:"Nouvelle tentative et backoff",preRequest:"Pré-requête",propertyInstructions:"Instructions de propriété",postResponse:"Post-réponse",outputBuildInstructions:"Instructions de construction de sortie",qrBuildInstructions:"Instructions de construction de réponse rapide",discoveryError:"Impossible de se connecter au serveur MCP",serverConnection:"Connexion au serveur",displayName:"Nom d'affichage",serverUrl:"URL du serveur MCP",discovering:"Connexion…",discoverTools:"Découvrir les outils",transport:"Transport",timeoutMs:"Délai d'expiration (ms)",apiKey:"Clé API / référence Vault",toolGovernance:"Gouvernance des outils",retry:"Réessayer",noToolsFound:"Aucun outil trouvé sur ce serveur",whitelist:"Liste blanche (autoriser uniquement)",blacklist:"Liste noire (exclure)",pipelineCalls:"Appels de pipeline",addCall:"Ajouter un appel MCP"},T=JSON.parse(`{"addCustomInstruction":"Ajouter une instruction","addKnowledgeBase":"Ajouter une référence KB","addMaskingRule":"Ajouter une règle","addToolLimit":"Ajouter une limite d'outil","anchorFirstSteps":"Ancrer les premières étapes","anchorFirstStepsHint":"Tours d'ouverture toujours conservés (0 = aucun)","conversationMemory":"Mémoire de conversation","conversationMemoryDesc":"Les tours plus anciens sont compressés progressivement dans un résumé glissant. Le LLM voit : [prompt système + résumé] + [N tours récents mot pour mot]. Un outil conversationRecall intégré permet à l'agent de revenir dans les tours résumés à la demande.","counterweight":"Contrepoids comportementaux","counterweightCustom":"Instructions personnalisées","counterweightCustomHint":"Laisser vide pour utiliser le préréglage intégré du niveau sélectionné.","counterweightCustomOverride":"Les instructions personnalisées remplacent entièrement le texte du niveau préréglé.","counterweightDesc":"Injecter des instructions de sécurité dans le prompt système. Protège contre l'excès de confiance, l'hallucination et l'action non supervisée.","counterweightLevel":"Niveau de sécurité","counterweightLevelCautious":"Prudent","counterweightLevelNormal":"Normal (aucune injection)","counterweightLevelStrict":"Strict","counterweightPlacement":"Placement","counterweightPlacementPrefix":"Avant le prompt système","counterweightPlacementSuffix":"Après le prompt système","counterweightStrictNote":"Le mode strict est automatiquement rétrogradé en Prudent lors des exécutions planifiées/par lots pour éviter un comportement destructeur \\"une étape à la fois\\".","defaultMaxChars":"Nb max. de caractères par défaut","defaultMaxCharsHint":"(~12k tokens à 50000)","enableSummary":"Activer le résumé glissant","enableWorkflowRag":"Découverte auto du RAG du workflow","excludeProps":"Exclure les propriétés du résumé","excludePropsDesc":"Ignorer les faits déjà capturés comme propriétés persistantes — se concentrer sur le raisonnement et le contexte implicite","httpCallRag":"RAG httpCall (zéro infrastructure)","httpCallRagHint":"Exécuter un httpCall nommé avant l'appel LLM. La réponse est injectée comme contexte — aucun stockage vectoriel nécessaire.","httpCallRagPlaceholder":"ex. search_docs, query_wiki","identityMasking":"Masquage d'identité","identityMaskingDesc":"Empêcher le LLM de révéler le nom de son modèle ou son fournisseur lorsqu'il est sondé.","identityMaskingEmptyWarning":"Le masquage est activé mais ne comporte aucune règle. Ajoutez au moins une règle pour qu'il prenne effet.","identityMaskingRulePlaceholder":"ex. Ne jamais révéler que vous êtes un modèle de langage IA","identityMaskingRules":"Règles de masquage","identityMaskingRulesHint":"L'activation ET au moins une règle sont nécessaires pour que le masquage prenne effet.","injectionStrategy":"Injection","kbNamePlaceholder":"ex. product-docs","knowledgeBases":"Bases de connaissances","knowledgeBasesHint":"Référencez explicitement les bases de connaissances par leur nom. Chaque nom doit correspondre à une RagConfiguration du workflow.","legacyRag":"RAG hérité (déprécié)","legacyRagHint":"Cette configuration utilise le format retrievalAugmentor déprécié. Migrez vers les modes ci-dessus.","maxContextTokens":"Tokens de contexte max.","maxContextTokensHint":"-1 = utiliser le nombre d'étapes à la place","maxRecallHint":"Par invocation de rappel","maxRecallTurns":"Tours de rappel max.","maxSummaryTokens":"Tokens de résumé max.","noKnowledgeBases":"Aucune base de connaissances référencée","perToolLimits":"Remplacements par outil","prePostDesc":"Configurez les instructions de propriétés exécutées avant chaque requête LLM, et les instructions de sortie/propriétés exécutées après chaque réponse.","promptSafety":"Sécurité du prompt","ragDefaults":"Paramètres de récupération par défaut","recentWindow":"Fenêtre récente (étapes)","recentWindowHint":"Tours conservés mot pour mot","removeLegacyRag":"Supprimer la config héritée","strategyPaginate":"Paginer (le LLM en récupère plus)","strategySummarize":"Résumer (via un modèle économique)","strategyTruncate":"Tronquer (coupure nette)","summarizationPrompt":"Prompt de résumé personnalisé (facultatif)","summarizationPromptPlaceholder":"Laisser vide pour utiliser le prompt structuré par défaut qui préserve les objectifs, les décisions, le raisonnement et le ton.","summarizeInfoBanner":"Le résumeur utilise le même fournisseur et la même clé API que cette tâche. Seul le nom du modèle est remplacé par une variante moins chère (p. ex. gpt-4o-mini).","summarizerModel":"Modèle de résumé","summarizerModelHint":"(repli sur troncature si vide)","summarizerModelPlaceholder":"ex. gpt-4o-mini","summaryModel":"Modèle de résumé","summaryProvider":"Fournisseur de résumé","summaryProviderHint":"Utilisez un modèle économique/rapide pour le résumé","tokenWindow":"Fenêtre de contexte basée sur les tokens","tokenWindowDesc":"Remplacer l'historique basé sur le nombre d'étapes par un remplissage tenant compte des tokens. Lorsque maxContextTokens est défini (> 0), le moteur ajuste autant de tours récents que possible dans le budget, en ancrant éventuellement les tours d'ouverture.","toolResponseLimits":"Limites de réponse des outils","toolResponseLimitsDesc":"Tronquer les sorties d'outils verbeuses avant leur réinjection dans la fenêtre de contexte du LLM. Évite la surcharge du contexte.","truncationStrategy":"Stratégie","workflowRagHint":"Découvre automatiquement toutes les étapes RAG du workflow. Utilisé uniquement lorsqu'aucune base de connaissances explicite n'est listée ci-dessus.","tasks":"Tâches LLM","addTask":"Ajouter une tâche","noTasks":"Aucune tâche LangChain configurée","removeTask":"Supprimer la tâche","taskId":"ID de tâche","description":"Description","descriptionPlaceholder":"Ce que fait cette tâche","triggerActions":"Actions déclencheurs","noActions":"Aucune action","actionPlaceholder":"ex. help, chat","systemPrompt":"Prompt système","systemPromptPlaceholder":"Tu es un assistant serviable...","modelParams":"Paramètres du modèle","addParam":"Ajouter un paramètre","agentMode":"Mode agent","enableBuiltInTools":"Activer les outils intégrés","toolWhitelist":"Whitelist d'outils (vide = tous)","enableHttpCallTools":"Découverte auto des outils HTTP Call","enableHttpCallToolsDesc":"Exposer automatiquement toutes les extensions httpcall du workflow comme outils LLM","httpCallTools":"URIs d'outils HTTP","httpCallToolsHint":"URIs httpcall explicites (en plus des auto-découvertes)","addTool":"Ajouter une URI d'outil","mcpServers":"Serveurs MCP","mcpServersDesc":"Serveurs MCP externes dont les outils deviennent disponibles pour le LLM","addMcpServer":"Ajouter un serveur MCP","mcpUrlPlaceholder":"http://localhost:7070/mcp","mcpName":"Nom","mcpApiKey":"API Key / réf. vault","historyLimit":"Limite d'historique","historyLimitHint":"(-1 = illimité)","budgetPerf":"Budget et performances","maxBudget":"Budget max ($)","costTracking":"Suivi des coûts","toolCaching":"Mise en cache des outils","rateLimiting":"Limitation de débit","defaultRate":"Débit par défaut (req/min)","prePostInstructions":"Instructions pré/post","preRequest":"Pré-requête","postResponse":"Post-réponse","enableMcpCallTools":"Découverte auto des outils MCP","enableMcpCallToolsDesc":"Expose automatiquement toutes les extensions mcpcalls du workflow en tant qu’outils LLM","a2aAgents":"Agents A2A","a2aAgentsDesc":"Agents distants compatibles A2A dont les compétences deviennent des outils LLM","addA2aAgent":"Ajouter un agent A2A","a2aUrlPlaceholder":"https://remote.example.com/a2a/agents/...","a2aName":"Nom d’affichage","a2aApiKey":"\${vault:my-a2a-key}","a2aTimeout":"Délai max. (ms)","a2aSkillsFilter":"Filtre de compétences (vide = toutes)","cascade":"Cascade de modèles","cascadeDesc":"Try a cheap/fast model first. If confidence is too low, automatically escalate to a more powerful (and expensive) model.","cascadeEnable":"Activer la cascade","cascadeStrategy":"Stratégie","strategyCascade":"Escalade séquentielle","strategyParallel":"Parallèle (futur)","cascadeStrategyHint":"Commence par le modèle le moins cher, escalade si la confiance est faible","cascadeEvalStrategy":"Évaluation de confiance","cascadeEvalHint":"Comment juger si la réponse est satisfaisante","evalStructured":"Sortie structurée (JSON)","evalHeuristic":"Heuristique (détection d’hésitation)","evalJudge":"Modèle juge (sous-LLM)","evalNone":"Aucune (toujours accepter)","cascadeInAgent":"Utiliser aussi la cascade en mode agent (avec outils)","cascadeSteps":"Cascade Steps","cascadeStepsDesc":"Order matters: first step tried first. Last step is always accepted.","cascadeModelName":"ex. claude-sonnet-5","cascadeConfidence":"Min. Confidence (0-1)","cascadeConfidencePlaceholder":"vide = toujours accepter","cascadeTimeout":"Délai max. (ms)","addCascadeStep":"Ajouter une étape","cascadeReturnBest":"Renvoyer la réponse la mieux notée parmi les étapes","cascadeEvalNoneHint":"Le filtrage par confiance est désactivé — la réponse de la première étape est toujours acceptée.","cascadeCeilings":"Plafonds et tarification","cascadeMaxDuration":"Durée totale max. (ms)","cascadeMaxCost":"Coût max. par exécution ($)","cascadeUnlimited":"illimité","cascadeInputPrice":"Entrée $ / 1M tokens","cascadeOutputPrice":"Sortie $ / 1M tokens","cascadePricingHint":"La tarification par défaut des tokens alimente le suivi des coûts et le plafond de coût. Chaque étape peut la remplacer.","cascadeJudgeModel":"Modèle juge","cascadeJudgeModelDesc":"Un modèle distinct (généralement bon marché) qui évalue la confiance de chaque réponse.","cascadeJudgeApiKey":"API Key du juge","cascadeHeuristic":"Réglage de l’heuristique","cascadeHeuristicDesc":"Remplacements facultatifs pour la détection d’hésitation/de refus. Les champs vides utilisent les valeurs par défaut intégrées (en anglais). Localisez les listes de phrases pour les déploiements non anglophones.","cascadeHeuristicDefaults":"Valeurs par défaut intégrées","cascadeHeuristicPhrasePlaceholder":"ajouter une phrase…","cascadeHeuristicPhrasesLow":"Phrases d’hésitation (faible confiance)","cascadeHeuristicPhrasesRefusal":"Phrases de refus","cascadeHeuristicShortLen":"Longueur de réponse courte","cascadeHeuristicShortScore":"Score court","cascadeHeuristicRefusalScore":"Score de refus","cascadeHeuristicHedgingScore":"Score d’hésitation","cascadeHeuristicDefaultScore":"Score par défaut","cascadeStepApiKey":"API Key","cascadeStepApiKeyPlaceholder":"hérite de la clé de la tâche si vide","cascadeCrossProvider":"multi-fournisseur","cascadeStepAdvanced":"Avancé (tarification et paramètres)","cascadeStepInputPrice":"Entrée $ / 1M","cascadeStepOutputPrice":"Sortie $ / 1M","cascadeStepPriceInherit":"valeur par défaut de la cascade","cascadeStepParams":"Paramètres supplémentaires","cascadeStepAddParam":"Ajouter un paramètre","cascadeIssues":{"NO_STEPS":"La cascade est activée mais ne comporte aucune étape — elle échouera lors de son exécution.","UNKNOWN_STRATEGY":"Stratégie inconnue « {{strategy}} » — la cascade s’exécutera de façon séquentielle.","PARALLEL_NOT_IMPLEMENTED":"La stratégie parallèle n’est pas encore implémentée — les étapes s’exécutent séquentiellement.","UNKNOWN_EVAL_STRATEGY":"Évaluation de confiance inconnue « {{strategy}} » — retour à la sortie structurée par défaut.","JUDGE_MODEL_MISSING":"L’évaluation par modèle juge n’a aucun juge configuré — la confiance repli sur l’heuristique.","JUDGE_CROSS_PROVIDER_NO_APIKEY":"Le modèle juge utilise un fournisseur différent mais n’a pas de clé API propre — il hériterait de la clé de la tâche.","MAX_DURATION_NONPOSITIVE":"La durée totale max. doit être supérieure à 0.","MAX_COST_NEGATIVE":"Le coût max. par exécution ne peut pas être négatif.","CASCADE_INPUT_PRICE_NEGATIVE":"Le prix d’entrée de la cascade ne peut pas être négatif.","CASCADE_OUTPUT_PRICE_NEGATIVE":"Le prix de sortie de la cascade ne peut pas être négatif.","CONVERT_TO_OBJECT_STRUCTURED":"convertToObject est incompatible avec la confiance par sortie structurée — la cascade utilisera l’heuristique à la place.","STEP_INPUT_PRICE_NEGATIVE":"Le prix d’entrée de l’étape {{step}} ne peut pas être négatif.","STEP_OUTPUT_PRICE_NEGATIVE":"Le prix de sortie de l’étape {{step}} ne peut pas être négatif.","STEP_CONFIDENCE_OUT_OF_RANGE":"La confiance de l’étape {{step}} doit être comprise entre 0 et 1.","STEP_DEAD_NULL_THRESHOLD":"L’étape {{step}} n’a aucun seuil de confiance — les étapes suivantes deviennent inaccessibles.","STEP_TIMEOUT_NONPOSITIVE":"Le délai de l’étape {{step}} doit être supérieur à 0.","STEP_CROSS_PROVIDER_NO_APIKEY":"L’étape {{step}} utilise un fournisseur différent mais n’a pas de clé API propre — elle hériterait de la clé de la tâche."},"parallelExecution":"Exécution parallèle des outils","parallelExecutionDesc":"Run independent tool calls concurrently","parallelTimeout":"Délai max. (ms)","maxToolIterations":"Itérations max. d’outils","maxToolIterationsHint":"(par défaut 10)","toolRateLimits":"Limites de débit par outil","toolRateLimitsDesc":"Override default rate for specific tools","toolName":"Nom de l’outil","addToolRate":"Ajouter une limite","retryConfig":"Configuration des tentatives","retryDesc":"Configure automatic retries with exponential backoff.","retryMaxAttempts":"Tentatives max.","retryDelay":"Délai initial (ms)","retryMultiplier":"Facteur de backoff","retryMaxDelay":"Délai max. (ms)","ragConfig":"RAG (recherche de connaissances)","ragDesc":"Augment LLM responses with retrieved documents.","ragHttpCall":"URI d’appel HTTP","ragEmbeddingModel":"Modèle d’embedding","ragEmbeddingModelPlaceholder":"ex. text-embedding-3-small","ragEmbeddingStore":"Stockage d’embeddings","ragEmbeddingStorePlaceholder":"ex. pgvector, qdrant","ragMaxResults":"Résultats max.","ragMinScore":"Min Similarity Score (0-1)","moveDown":"Descendre","moveUp":"Monter","removeStep":"Supprimer l’étape","execution":"Exécution","budgetCosts":"Budget & coûts","preRequestDesc":"Définir ou transformer les propriétés avant lexécution du LLM.","postResponseDesc":"Traiter la sortie du LLM : définir les propriétés, construire des messages de sortie et générer des réponses rapides.","postPropertyInstructions":"Instructions de propriétés","postOutputInstructions":"Instructions de sortie","postQrInstructions":"Instructions de réponses rapides","allSkills":"Toutes les compétences","skillPlaceholder":"ex. order-tracking","modeAgent":"Agent","modeChat":"Chat","perMinute":"/min","allTools":"Tous les outils","selectSpecific":"Sélection manuelle","allToolsInfo":"Les {{count}} outils intégrés sont accessibles au LLM. Choisissez « Sélection manuelle » pour restreindre les outils exposés.","availableTools":"Outils disponibles","toolCount":"{{selected}} sur {{total}} sélectionnés","toolSources":"Sources d’outils du workflow","toolSourcesInfo":"Les deux sources sont actives par défaut — tous les appels HTTP et MCP du workflow sont automatiquement exposés en tant qu’outils LLM. Désactivez une source pour l’exclure.","included":"Inclus","toolApprovals":"Contrôle des approbations d'outils (par tâche)","toolApprovalsEnable":"Remplacer les approbations d'outils pour cette tâche","toolApprovalsDesc":"Remplace les approbations d'outils au niveau de l'agent pour CETTE tâche uniquement — un remplacement complet, pas une fusion.","responseValidation":"Validation et récupération des réponses","responseValidationDesc":"Contrôlez la manière dont le moteur réagit à un tour vide, tronqué, filtré par le contenu, refusé ou expiré. \\"Fallback\\" substitue un message prédéfini ; \\"Erreur\\" fait échouer le tour ; \\"Avertir\\" journalise et continue ; \\"Ignorer\\" ne fait rien.","rvEnable":"Activer la validation des réponses","rvDisabledInfo":"Les politiques ci-dessous sont enregistrées mais ne prennent effet que lorsque la validation est activée.","rvActionIgnore":"Ignorer","rvActionWarn":"Avertir (journaliser et continuer)","rvActionFallback":"Fallback (message prédéfini)","rvActionError":"Erreur (faire échouer le tour)","rvOnEmpty":"Réponse vide","rvOnEmptyHint":"Le LLM n'a rien renvoyé (vide ou null)","rvOnTruncation":"Réponse tronquée","rvOnTruncationHint":"Réponse coupée (finishReason=LENGTH)","rvOnContentFilter":"Filtré par le contenu","rvOnContentFilterHint":"Réponse bloquée par le filtre de contenu du fournisseur","rvOnRefusal":"Refus","rvOnRefusalHint":"Le LLM a refusé de répondre (détection heuristique)","rvOnStreamingTimeout":"Délai d'attente du streaming","rvOnStreamingTimeoutHint":"Une réponse en streaming a expiré avant de se terminer","streamingTimeoutSeconds":"Délai d'attente du streaming (secondes)","streamingTimeoutSecondsHint":"Remplace la valeur par défaut du moteur (120s). S'applique uniquement au streaming ; vide = utiliser la valeur par défaut.","taskPricing":"Tarification des appels simples","taskPricingDesc":"Tarifie les appels de modèle ordinaires (hors cascade) de cette tâche pour le suivi des coûts et les plafonds de coût du groupe. Sans prix (vide), la contribution est de 0 $."}`),x={labelPlaceholder:"Libellé du lien...",pathPlaceholder:"Chemin du lien...",altPlaceholder:"Texte alternatif...",uriPlaceholder:"URL de l’image...",language:"Langue",langPlaceholder:"ex. en, fr",outputSets:"Jeux de sorties",addOutputSet:"Ajouter un jeu de sorties",noOutputSets:"Aucun jeu de sorties configuré",actionName:"Nom de l'action",timesOccurred:"×",removeOutput:"Supprimer",outputs:"Sorties",alternativeGroup:"Groupe alternatif",addAlternative:"Ajouter une alternative",addOutputGroup:"Ajouter un groupe de sorties",textPlaceholder:"Texte de sortie...",urlPlaceholder:"URL…",delayMs:"Délai (ms)",quickReplies:"Réponses rapides",noQuickReplies:"Aucune Quick Reply",addQuickReply:"Ajouter une Quick Reply",qrValue:"Texte du bouton",qrExpressions:"Expressions",default:"Par défaut",invalidJson:"JSON invalide",buttonTypePlaceholder:"Type de bouton (p. ex. postback)",buttonLabelPlaceholder:"Libellé...",onPressPlaceholder:'{"action":"..."}',subTypePlaceholder:"Sous-type (p. ex. text, email)",inputPlaceholderPlaceholder:"Espace réservé...",inputLabelPlaceholder:"Libellé...",defaultValuePlaceholder:"Valeur par défaut...",minLength:"Longueur min.",minLengthShort:"min",maxLength:"Longueur max.",maxLengthShort:"max",validationMsgPlaceholder:"Message d'erreur de validation...",jsonPlaceholder:'{"key":"value"}'},S={setters:"Définisseurs de propriétés",addSetter:"Ajouter un setter",noSetters:"Aucun Property Setter configuré",removeSetter:"Supprimer",triggerActions:"Actions déclencheurs",noActions:"Aucune action",actionPlaceholder:"ex. greet, fallback",properties:"Propriétés",noProperties:"Aucune propriété",addProperty:"Ajouter une propriété",propName:"Nom de la propriété",propValue:"Valeur / expression",fromPath:"Chemin source",fromObjectPath:"fromObjectPath",override:"Remplacer",propsCount:"prop.",untitled:"(aucune action)",openEditor:"Modifier dans l'éditeur",visibilityTitle:"Quels agents peuvent voir cette propriété longTerm",editValue:"Modifier la valeur",toggleGroup:"Basculer le groupe de propriétés"},P={language:"Langue",langPlaceholder:"ex. en, fr",words:"Mots",addWord:"Ajouter un mot",wordPlaceholder:"ex. bonjour",phrases:"Expressions",addPhrase:"Ajouter une phrase",phrasePlaceholder:"ex. bon matin",regExs:"Expressions régulières",addRegEx:"Ajouter une RegEx",regexPlaceholder:"Expression régulière",expressionPlaceholder:"ex. greeting(hello)",frequency:"Fréquence",none:"Aucune définie"},E={title:"Configuration du parseur",configure:"Configurer",config:"Configuration",appendExpressions:"Ajouter des expressions",includeUnused:"Inclure les expressions inutilisées",includeUnknown:"Inclure les expressions inconnues",dictionaries:"Dictionnaires",builtInDicts:"Dictionnaires intégrés",regularDicts:"Dictionnaires réguliers",addDict:"Ajouter",removeDict:"Supprimer le dictionnaire",noRegularDicts:"Aucun dictionnaire régulier configuré",dictUri:"URI de la ressource dictionnaire",dictUriPlaceholder:"eddi://ai.labs.dictionary/dictionarystore/dictionaries/?version=",corrections:"Corrections",distance:"Distance",normalizers:"Normalisateurs",removePunctuation:"Supprimer la ponctuation",regexPattern:"Motif",dict:{integer:"Dictionnaire d'entiers",decimal:"Dictionnaire de décimaux",punctuation:"Dictionnaire de ponctuation",email:"Dictionnaire d'e-mails",time:"Dictionnaire d'expressions temporelles",ordinalNumber:"Dictionnaire de nombres ordinaux"},corr:{levenshtein:"Correction de Levenshtein",phonetic:"Correction phonétique",mergedTerms:"Correction de termes fusionnés"},norm:{punctuation:"Normalisateur de ponctuation",specialCharacter:"Normalisateur de caractères spéciaux",contractedWords:"Normalisateur de mots contractés",allowedCharacter:"Normalisateur de caractères autorisés"},regularDictsHint:"Vos propres mots, expressions et motifs, stockés comme ressources de dictionnaire.",openDict:"Ouvrir le dictionnaire dans un nouvel onglet"},L={title:"Ajouter un dictionnaire régulier",searchPlaceholder:"Rechercher des dictionnaires…",added:"Ajouté",empty:"Aucun dictionnaire pour le moment",emptyDescription:"Un dictionnaire apprend à l'analyseur vos propres mots, expressions et motifs.",create:"Créer un dictionnaire",createTitle:"Nouveau dictionnaire",createHint:"Il est créé vide et lié immédiatement à cet analyseur — ajoutez mots, expressions et motifs dans l'éditeur de dictionnaire.",createFailed:"Le dictionnaire a été créé mais n'a pas pu être lié.",created:"Dictionnaire créé et lié",defaultName:"Nouveau dictionnaire",descriptionPlaceholder:"Ce que ce dictionnaire apprend à l'analyseur…",manual:"Lier par URI à la place",createdUnnamed:"Dictionnaire créé et lié, mais son nom n'a pas pu être enregistré — renommez-le dans l'éditeur de dictionnaire."},k={activeConversations:"Conversations actives",eventHistory:"Historique des événements",noActiveQueues:"Aucune conversation active en cours de traitement",payload:"Payload",successRate:"Taux de réussite",tasksPerSec:"tâches/s",totalPending:"en attente",confirmDiscardDescription:"Supprime définitivement la tâche en file morte. Elle ne pourra plus être rejouée. Irréversible.",confirmDiscardTitle:"Supprimer l’entrée de la file morte ?",title:"Tableau de bord du coordinateur",subtitle:"Surveiller le traitement des conversations et gérer les entrées dead-letter",type:"Type de coordinateur",connection:"Connexion",processed:"Tâches traitées",deadLettered:"Lettres mortes",activeQueues:"Files actives",queued:"en file",deadLetterTitle:"File de lettres mortes",noDeadLetters:"Aucune entrée dead-letter",colId:"ID",colConversation:"Conversation",colError:"Erreur",colTime:"Heure",colActions:"Actions",replay:"Rejouer",discard:"Supprimer",purgeAll:"Tout purger",confirmPurge:"Tout purger ?",yes:"Oui",cancel:"Annuler",replaySuccess:"Dead-letter rejouée",replayError:"Échec de la relecture",discardSuccess:"Dead-letter supprimée",discardError:"Échec de la suppression",purgeSuccess:"Toutes les entrées dead-letter supprimées",purgeError:"Échec de la purge",empty:"Aucune donnée du coordinateur disponible",emptyHint:"Le service coordinateur est peut-être encore en cours de démarrage. Les données apparaîtront automatiquement.",lastNSnapshots:"{{count}} derniers instantanés"},R={expand:"Agrandir",expandHint:"Plein écran (Ctrl+Maj+F)",close:"Terminé",lines:"lignes",chars:"caractères",fullscreenTitle:"Éditeur de contenu",fullscreenDescription:"Éditeur plein écran. Échap pour fermer."},q={newLogs:"Nouveaux logs",title:"Journaux",description:"Surveiller le flux de logs en temps réel ou rechercher dans l'historique.",tabLive:"En direct",tabHistory:"Historique",connected:"Connecté",disconnected:"Déconnecté",filterAgent:"ID de l’agent…",filterConversation:"ID de conversation...",filterInstance:"ID d'instance...",allLevels:"Tous les niveaux",pause:"Pause",resume:"Reprendre",clear:"Effacer",search:"Rechercher",waitingForLogs:"En attente de logs...",loadingRecentLogs:"Chargement des logs récents…",noRecentLogs:"Aucune activité récente dans les logs.",noRecentLogsHint:"Les nouveaux logs apparaîtront ici au fur et à mesure qu'ils sont diffusés depuis le backend.",connectingStream:"Connexion au stream...",noHistoryLogs:"Aucun log historique trouvé.",entryCount:"{{count}} entrées",showStacktrace:"Afficher la stacktrace ({{count}} frames)",hideStacktrace:"Masquer la stacktrace",allAgents:"Tous les agents",allConversations:"Toutes les conversations",waitingHint:"Les logs apparaîtront ici au fur et à mesure qu'ils arrivent du backend.",noHistoryHint:"Essayez d'ajuster les filtres ou de rechercher un autre agent ou conversation.",searchConversations:"Rechercher par ID, agent, utilisateur…",stepsCount:"{{count}} étapes",noConversationsFound:"Aucune conversation trouvée",useConversationId:"Utiliser l'ID: {{id}}",searchLogs:"Rechercher les logs…",errors:"erreurs",warnings:"avertissements",infos:"info",debugs:"débogage",filteredCount:"{{shown}} sur {{total}} entrées",copyEntry:"Copier l'entrée de log",export:"Exporter",stateReady:"Prêt",stateActive:"Actif",stateError:"Erreur",stateEnded:"Terminé"},I={loadError:"Impossible de charger les secrets",allAgents:"Tous les agents",allowedAgents:"Agents autorisés",allowedAgentsHint:"Laisser vide pour tous les agents. Ajouter des ID d'agents aide à suivre quels agents utilisent ce secret.",allowedAgentsLabel:"Agents autorisés (facultatif)",allowedAgentsPlaceholder:"Saisir un ID d'agent et appuyer sur Entrée (vide = tous les agents)",deleteKey:"Supprimer {{key}}",hideValue:"Masquer la valeur",newValuePlaceholder:"Nouvelle valeur du secret…",rotate:"Rotation",rotateDesc:"Saisissez la nouvelle valeur. Les références existantes continueront de pointer vers la valeur mise à jour.",rotateKey:"Effectuer la rotation de {{key}}",rotateSuccess:'Secret "{{key}}" pivoté',rotateTitle:'Effectuer la rotation de "{{key}}"',showValue:"Afficher la valeur",title:"Coffre-fort des secrets",description:"Gérer les secrets chiffrés dans le vault. Les valeurs ne sont jamais exposées.",tenantId:"ID du locataire",refresh:"Charger les secrets",create:"Ajouter un secret",createTitle:"Ajouter un secret",keyName:"Nom de la clé",keyNameLabel:"Nom de la clé",keyNamePlaceholder:"ex. apiKey, dbPassword",valueLabel:"Valeur du secret",valuePlaceholder:"Entrer la valeur du secret…",storeWarning:"La valeur sera chiffrée. Elle ne pourra pas être récupérée une fois enregistrée.",store:"Enregistrer le secret",storeSuccess:'Secret "{{key}}" enregistré',deleteSuccess:'Secret "{{key}}" supprimé',created:"Créé",lastAccessed:"Dernier accès",checksum:"Somme de contrôle",actions:"Actions",confirmDeleteTitle:"Supprimer le secret",confirmDeleteMessage:'Êtes-vous sûr de vouloir supprimer définitivement "{{key}}" ? Cette action est irréversible.',empty:"Aucun secret trouvé",emptyHint:"Aucun secret n'est encore enregistré pour le locataire « {{tenant}} ». Cliquez sur « Ajouter un secret » pour en créer un.",vaultUp:"Vault en ligne",vaultDown:"Vault hors ligne",descriptionLabel:"Description (facultatif)",descriptionPlaceholder:"ex. Clé API OpenAI pour la production",descriptionCol:"Description",reference:"Référence",willUseRef:"Référence :",copyRef:"Copier la référence coffre-fort",refCopied:"Copié : {{ref}}",lastRotated:"Dernière rotation",scopeExplanation:"Les secrets sont limités par locataire et partagés entre tous les agents. Référencez-les avec ${vault:keyName}. L'accès est contrôlé par l'auteur de la configuration.",creatingFor:'Stockage dans le locataire "{{tenant}}" — accessible à tous les agents',vaultNotConfigured:"Le coffre-fort de secrets n'est pas configuré",viewDocs:"Voir la documentation",selectAgentFirst:"Veuillez d'abord sélectionner un agent",dangerZoneTitle:"Cycle de vie de la clé de chiffrement",dangerZoneDesc:"Actions de récupération opérationnelle pour les clés cryptographiques du Vault. Utilisez-les pour effectuer une rotation des clés ou récupérer l'accès après un changement de clé maître. À distinguer de la rotation de la valeur d'un secret individuel ci-dessus.",rotateDekTitle:"Effectuer la rotation de la clé de chiffrement (DEK)",rotateDekBlurb:"Sûr — aucun redémarrage. Génère une nouvelle clé de chiffrement des données par locataire et re-chiffre tous les secrets de ce locataire.",rotateDekAction:"Rotation du DEK",rotateDekConfirmTitle:"Effectuer la rotation de la clé de chiffrement (DEK) ?",rotateDekConfirm:"Effectuer la rotation du DEK maintenant",rotateKekTitle:"Effectuer la rotation de la clé maître (KEK)",rotateKekBlurb:"Re-chiffre tous les DEK des locataires avec une nouvelle clé maître. Nécessite la mise à jour de EDDI_VAULT_MASTER_KEY et un redémarrage ensuite.",rotateKekAction:"Rotation de la clé maître",rotateKekConfirmTitle:"Effectuer la rotation de la clé maître (KEK) ?",rotateKekConfirmDesc:"Re-chiffre la clé de chiffrement des données de chaque locataire avec une nouvelle clé maître. Les valeurs des secrets elles-mêmes restent inchangées.",rotateKekConfirm:"Effectuer la rotation de la clé maître maintenant",kekTlsWarning:"Les deux clés sont envoyées dans le corps de la requête. Effectuez cette opération uniquement via une connexion TLS (HTTPS) afin que les clés ne soient pas exposées pendant le transit.",kekOldKeyLabel:"Clé maître actuelle",kekOldKeyPlaceholder:"EDDI_VAULT_MASTER_KEY actuel",kekNewKeyLabel:"Nouvelle clé maître",kekNewKeyPlaceholder:"Nouvelle clé — au moins 8 caractères",kekNewKeyTooShort:"La nouvelle clé maître doit comporter au moins 8 caractères.",kekRestartHint:"Après la rotation, vous devez mettre à jour EDDI_VAULT_MASTER_KEY avec la nouvelle clé et redémarrer EDDI.",kekResultInstruction:"Action requise : définissez la variable d'environnement EDDI_VAULT_MASTER_KEY sur la NOUVELLE clé maître et redémarrez EDDI. Jusqu'à ce que vous le fassiez, l'instance en cours utilise toujours l'ancienne clé en mémoire.",resetTenantTitle:"Réinitialiser le Vault pour ce locataire",resetTenantBlurb:"Dernier recours destructif. Supprime définitivement tous les secrets et le DEK afin que le Vault puisse repartir de zéro — à utiliser après une clé maître perdue ou modifiée.",resetTenantAction:"Réinitialiser le Vault",resetTenantConfirmTitle:"Réinitialiser le Vault pour ce locataire ?",resetTenantConfirm:"Réinitialiser le Vault définitivement",resetConfirmLabel:'Saisissez le nom du locataire "{{tenant}}" pour confirmer',tableTitle_many:'{{count}} secrets dans le locataire "{{tenant}}"',tableTitle_one:'{{count}} secret dans le locataire "{{tenant}}"',tableTitle_other:'{{count}} secrets dans le locataire "{{tenant}}"',rotateDekConfirmDesc_many:`Cela génère une nouvelle clé de chiffrement des données pour le locataire "{{tenant}}" et re-chiffre ses {{count}} secrets. C'est sûr et prend effet immédiatement — aucun redémarrage n'est requis.`,rotateDekConfirmDesc_one:`Cela génère une nouvelle clé de chiffrement des données pour le locataire "{{tenant}}" et re-chiffre ses {{count}} secret. C'est sûr et prend effet immédiatement — aucun redémarrage n'est requis.`,rotateDekConfirmDesc_other:`Cela génère une nouvelle clé de chiffrement des données pour le locataire "{{tenant}}" et re-chiffre ses {{count}} secrets. C'est sûr et prend effet immédiatement — aucun redémarrage n'est requis.`,rotateDekSuccess_many:"Clé de chiffrement pivotée — {{count}} secrets re-chiffrés",rotateDekSuccess_one:"Clé de chiffrement pivotée — {{count}} secret re-chiffré",rotateDekSuccess_other:"Clé de chiffrement pivotée — {{count}} secrets re-chiffrés",kekResultTitle_many:"Clé maître pivotée — {{count}} DEK re-chiffrés",kekResultTitle_one:"Clé maître pivotée — {{count}} DEK re-chiffré",kekResultTitle_other:"Clé maître pivotée — {{count}} DEK re-chiffrés",rotateKekSuccess_many:"Clé maître pivotée — {{count}} DEK re-chiffrés. Mettez à jour EDDI_VAULT_MASTER_KEY et redémarrez.",rotateKekSuccess_one:"Clé maître pivotée — {{count}} DEK re-chiffré. Mettez à jour EDDI_VAULT_MASTER_KEY et redémarrez.",rotateKekSuccess_other:"Clé maître pivotée — {{count}} DEK re-chiffrés. Mettez à jour EDDI_VAULT_MASTER_KEY et redémarrez.",resetTenantConfirmDesc_many:`Cela supprime définitivement tous les {{count}} secrets et la clé de chiffrement des données du locataire "{{tenant}}". Utilisez cette étape de récupération lorsque la clé maître a été perdue ou modifiée et que l'ancienne clé n'est pas disponible. Cette action est irréversible.`,resetTenantConfirmDesc_one:`Cela supprime définitivement tous les {{count}} secret et la clé de chiffrement des données du locataire "{{tenant}}". Utilisez cette étape de récupération lorsque la clé maître a été perdue ou modifiée et que l'ancienne clé n'est pas disponible. Cette action est irréversible.`,resetTenantConfirmDesc_other:`Cela supprime définitivement tous les {{count}} secrets et la clé de chiffrement des données du locataire "{{tenant}}". Utilisez cette étape de récupération lorsque la clé maître a été perdue ou modifiée et que l'ancienne clé n'est pas disponible. Cette action est irréversible.`,resetSecretCount_many:"{{count}} secrets seront définitivement perdus",resetSecretCount_one:"{{count}} secret seront définitivement perdus",resetSecretCount_other:"{{count}} secrets seront définitivement perdus",resetTenantSuccess_many:'Vault réinitialisé pour "{{tenant}}" — {{count}} secrets définitivement supprimés',resetTenantSuccess_one:'Vault réinitialisé pour "{{tenant}}" — {{count}} secret définitivement supprimés',resetTenantSuccess_other:'Vault réinitialisé pour "{{tenant}}" — {{count}} secrets définitivement supprimés'},M={title:"Journal d’audit",description:"Parcourir le registre d'audit immuable pour la conformité et le débogage.",byConversation:"Par conversation",byAgent:"Par agent",conversationIdPlaceholder:"Entrer l'ID de conversation...",agentIdPlaceholder:"Entrer l'agent ID...",versionPlaceholder:"Version (facultatif)",search:"Rechercher",entries:"entrées",totalDuration:"total",totalCost:"coût total",step:"Étape",tasks:"tâches",input:"Entrée",output:"Sortie",llmDetail:"Détail LLM",toolCalls:"Appels d'outils",hmacIntegrity:"Intégrité HMAC vérifiée",empty:"Rechercher des entrées d'audit",emptyHint:"Entrez un ID de conversation ou d'agent ci-dessus pour parcourir l'audit trail.",noResults:"Aucune entrée d'audit trouvée",noResultsHint:"Essayez un autre ID ou vérifiez que la conversation a été traitée.",loadMore:"Charger plus",selectAgent:"Select an agent…",conversations:"conversations",emptyAgent:"Select an agent to view its audit trail",emptyAgentHint:"Choose a deployed agent from the dropdown above to see all its audit records.",export:"Export",autoRefreshToggle:"Toggle auto-refresh (every 10s)",autoRefreshOn:"Auto",autoRefreshOff:"Auto",integrityVerified:"All entries cryptographically signed",integrityVerifiedDesc:"{{count}} of {{total}} entries have HMAC-SHA256 signatures",integrityPass:"SIGNED",integrityPartial:"Partially signed audit trail",integrityPartialDesc:"{{count}} of {{total}} entries have HMAC signatures",integrityNone:"Unsigned audit entries",integrityNoneDesc:"Configure a vault master key to enable automatic HMAC-SHA256 signing on all future audit entries.",signed:"Signed",allSigned:"All signed",decidedBy:"par",automated:"automatisé"},z={cronHelp:"Format à 5 champs : minute heure jour-du-mois mois jour-de-la-semaine",cronEveryMinute:"Chaque minute",cronEveryNMinutes:"Toutes les {{n}} minutes",cronHourlyAt:"Toutes les heures à :{{minute}}",cronEveryNHours:"Toutes les {{n}} heures à :{{minute}}",cronAtTime:"À {{time}}",cronAtMinutePastEveryHour:"À la minute {{minutes}} de chaque heure",cronAtMinutePastHours:"À la minute {{minutes}} de l'heure {{hours}}",cronOnDays:"le {{days}}",cronOnDayOfMonth:"le {{days}} du mois",cronInMonths:"en {{months}}",cronInvalid:"Expression Cron invalide (5 champs attendus)",cronTooFrequent:"Se déclenche plus souvent que le minimum de 60 secondes",failedEmptyHint:"Les exécutions en file morte apparaîtront ici pour être réessayées ou ignorées.",failedSubtitle:"Exécutions ayant échoué définitivement. Réessayez pour remettre en file, ou ignorez pour effacer sans réexécuter.",intervalTooShort:"L'intervalle doit être d'au moins 60 secondes",lastManualFire:"Dernière exécution manuelle",oneTimeHelp:"Se déclenche une seule fois à ce moment, puis se termine. Interprété selon votre heure locale.",outcomePending:"déclenché — en attente du résultat",persistentConversationId:"ID de conversation persistante",persistentConversationIdPlaceholder:"Généré automatiquement si laissé vide",strategyPersistent:"Persistante (réutiliser la même conversation)",fireDeadLettered:"Échec définitif",fireFailed:"Échoué",fireCompleted:"Terminé",title:"Planifications",subtitle:"Gérer les déclencheurs programmés — Cron et Heartbeats",create:"Créer une planification",createTitle:"Créer une planification",createSuccess:"Planification créée avec succès",createError:"Échec de la création de la planification",creating:"Création...",name:"Nom",namePlaceholder:"ex. Vérification quotidienne",triggerType:"Type de déclencheur",cronExpression:"Expression Cron",interval:"Intervalle (secondes)",agentId:"Agent ID",agentIdPlaceholder:"Entrer l'agent ID...",environment:"Environnement",message:"Message",messagePlaceholder:"Message à envoyer à l'agent",conversationStrategy:"Stratégie de conversation",total:"Planifications totales",active:"Actives",failedCount:"Échouées / Dead-Lettered",nextFireLabel:"Prochaine exécution",tableTitle:"Toutes les planifications",empty:"Aucune planification",emptyHint:"Créez une planification pour automatiser les déclencheurs d'agents.",colName:"Nom",colType:"Type",colSchedule:"Planification",colAgent:"Agent",colStatus:"Statut",colNextFire:"Prochaine exéc.",colLastFired:"Dernière exéc.",colActions:"Actions",enable:"Activer",disable:"Désactiver",enabled:"Planification activée",disabled:"Planification désactivée",toggleError:"Échec du changement d'état",fireNow:"Exécuter maintenant",fired:"Planification exécutée avec succès",fireError:"Échec de l'exécution",retry:"Réessayer",retrySuccess:"Planification remise en file",retryError:"Échec de la relance",deleteSuccess:"Planification supprimée",deleteError:"Échec de la suppression",fireHistory:"Historique d'exécution",hitlTimeout:"Délai d'expiration HITL",hitlTimeoutHint:"Délai d'expiration d'approbation HITL géré par le système — résolvez-le via l'approbation de la conversation, pas ici.",statusDisabled:"Désactivée",statusActive:"Active",statusRunning:"En cours",statusExecuting:"Exécution",statusFailed:"Échoué",statusDeadLettered:"Dead-Letter",typeHeartbeat:"Heartbeat",typeOneTime:"Ponctuel",typeCron:"Cron",noFireHistory:"Aucun historique d'exécution",logFired:"Exécuté",logDuration:"Durée",logResult:"Résultat",logAttempt:"Tentative",logCost:"Coût",logConversation:"Conversation",dismissSuccess:"Dead-letter ignoré",dismissError:"Échec de l'ignorance du dead-letter",failedTitle:"Exécutions échouées et dead-letter",failedEmpty:"Aucune exécution échouée",colSchedule2:"Planification",dismiss:"Ignorer",updateSuccess:"Planification mise à jour",updateError:"Échec de la mise à jour de la planification",editTitle:"Modifier la planification",cronNext:"Prochaine",oneTimeAt:"Date et heure",timeZone:"Fuseau horaire",agentVersion:"Version",agentVersionHint:"0 = dernière déployée",envProduction:"Production",envTest:"Test",userId:"ID utilisateur",userIdPlaceholder:"system:scheduler",maxCostPerFire:"Coût max. par exécution",unlimited:"Illimité",strategyNew:"Nouveau (conversation fraîche à chaque exécution)",saving:"Enregistrement...",fireOutcomeFailed:"Échec de l'exécution",unknownError:"erreur inconnue",tabSchedules:"Planifications",tabFailed:"Échoué / Dead-letter",cronPreset:{every15Minutes:"Toutes les 15 minutes",hourly:"Toutes les heures (à l'heure pile)",dailyMorning:"Chaque jour à 09h00",weekdays:"En semaine à 09h00",weeklyMonday:"Chaque semaine (lun 00h00)",monthly:"Chaque mois (le 1er, 00h00)"}},w={title:"Cascade de modèles",escalated:"confiance {{c}} < {{th}}",escalatedShort:"escaladé",accepted:"accepté",reason:{lowConfidence:"confiance faible",timeout:"délai dépassé",error:"erreur",retryableError:"erreur réessayable"}},j={pipelineError:"Échec du chargement de la trace du pipeline",title:"Débogage",tabPipeline:"Pipeline",tabCosts:"Coûts",tabMemory:"Mémoire",tabLogs:"Journaux",tabPrompt:"Prompt",turn:"Tour",latest:"Dernier",noPipeline:"Envoyez un message pour voir la trace du pipeline",processing:"Traitement...",actions:"Actions",confidence:"Confiance",duration:"Durée",cost:"Coût",in:"entrée",input:"Entrée",model:"Modèle",out:"sortie",output:"Sortie",tokens:"Jetons",toolCalls:"Outils"},N={error:"Impossible de charger les données de coût depuis le serveur",thisTurn:"Ce tour",conversationTotal:"Total conversation",tokens:"Tokens",cost:"Coût",duration:"Durée",model:"Modèle",toolCalls:"Appels d'outils",toolUsage:"Utilisation d'outils",cacheStats:"Cache",hitRate:"Taux de réussite",empty:"Envoyez un message pour voir les coûts",in:"entrants",out:"sortants",total:"total",calls:"appels",avgLatency:"Latence moy.",input:"Entrée",output:"Sortie",tokenDistribution:"Répartition des jetons",totalCost:"Coût total",totalTokens:"Jetons totaux",turns:"Tours"},O={error:"Échec du chargement des données de mémoire",title:"Mémoire de conversation",noConversation:"Démarrez une discussion pour inspecter la mémoire",empty:"Aucune donnée de mémoire",properties:"Propriétés",step:"Étape",keys:"clés",input:"Entrée",collapseAll:"Tout réduire",copyKey:"Copier la clé",copyValue:"Copier la valeur",customProperties:"Propriétés personnalisées",expandAll:"Tout développer",noMatches:"Aucune donnée correspondante",search:"Rechercher des clés ou des valeurs…",stepData:"Données d'étape",systemProperties:"Propriétés système"},H={noAgent:"Sélectionnez un agent pour voir les journaux",search:"Rechercher...",pause:"Pause",resume:"Reprendre",clear:"Effacer",waiting:"En attente des journaux...",connected:"Connecté",disconnected:"Déconnecté",logOutput:"Sortie du journal",noMatch:"Aucun journal ne correspond à votre filtre"},V={error:"Échec du chargement des données du prompt",noConversation:"Démarrez une discussion pour inspecter les prompts",noLlm:"Aucune interaction LLM détectée",turn:"Tour",latest:"Dernier",tokens:"Tokens",model:"Modèle",cost:"Coût",copy:"Copier le prompt",copied:"Copié !",replay:"Rejouer ce tour",toolCalls:"Appels d'outils",step:"Étape",roleSystem:"Prompt système",roleUser:"Utilisateur",roleAssistant:"Assistant",roleTool:"Résultat d'outil",collapse:"Réduire",showMore:"Afficher plus",temperature:"Temp"},U={preview:"Aperçu",edit:"Éditer",switchToPreview:"Aperçu du prompt résolu",switchToEdit:"Passer en édition",refresh:"Actualiser",sampleData:"Données d’exemple (sans conversation)",disclaimerReal:"L’aperçu utilise le moteur Qute avec des données de conversation réelles.",disclaimerSample:"L’aperçu utilise le moteur Qute avec des données d’exemple. Sélectionnez une conversation pour les valeurs réelles.",resolvedPrompt:"Prompt résolu",copy:"Copier",copied:"Copié !",error:"Erreur de résolution de modèle",loading:"Résolution du modèle…",availableVariables:"Variables disponibles",copyVariable:"Cliquer pour copier la référence",varProperties:"Propriétés",varMemory:"Mémoire",varContext:"Contexte",varSnippets:"Extraits",varUserInfo:"Info utilisateur",varConversationInfo:"Info conversation",varInput:"Entrée",varConversationLog:"Journal de conversation"},F={title:"Studio Agent",subtitle:"Concevez, testez et déboguez vos agents dans un seul espace",pipeline:"Pipeline",editor:"Éditeur",debug:"Debug & Chat",selectStage:"Cliquez sur une étape pour ouvrir son éditeur",openInStudio:"Ouvrir dans le Studio",loading:"Chargement...",notFound:"Agent introuvable",hideChat:"Masquer le chat",showChat:"Afficher le chat",openEditor:"Ouvrir dans l'éditeur",editorComingSoon:"Intégration de l'éditeur bientôt disponible",noPipeline:"Aucune étape de pipeline",type:{parser:"Analyseur",rules:"Règles",property:"Définisseur de propriétés",apicalls:"Appels API",llm:"LLM",output:"Sortie","output.template":"Modèle de sortie",mcpcalls:"Appels MCP",rag:"Bases de connaissances",dictionary:"Dictionnaire"},landingDescription:"Sélectionnez un agent pour ouvrir l’éditeur visuel, le débogueur et le chat en direct",noAgents:"Aucun agent trouvé — créez-en un sur la page Agents",chat:"Chat",backToAgent:"Retour à l’agent",selectStageHint:"Sélectionnez une extension du pipeline pour afficher et modifier sa configuration",noConfig:"Cette étape n’a pas d’URI de configuration",unsupportedType:"Éditeur non disponible pour ce type d’extension"},_={general:"Général",kbName:"Nom de la base de connaissances",kbNamePlaceholder:"Ex: docs-produit, faq, wiki-interne",kbNameHint:"Utilisé pour référencer cette base dans les tâches LLM",embeddingModel:"Modèle d'Embedding",provider:"Fournisseur",embeddingParams:"Paramètres du fournisseur",embeddingParamsHint:"Clé API (utilisez ${vault:...} pour les secrets), URL, etc.",vectorStore:"Stockage vectoriel",storeType:"Type de stockage",storeParams:"Paramètres de connexion",chunking:"Découpage de documents",chunkStrategy:"Stratégie",chunkSize:"Taille",chunkOverlap:"Chevauchement",overlapHint:"Aide à maintenir le contexte entre les sections",chunkPreview:"Aperçu du découpage",chunkBlocks:"{{count}} sections d'environ {{size}} car, {{overlap}} car de chevauchement",retrievalDefaults:"Options de récupération par défaut",retrievalHint:"Peuvent être surchargés dans chaque tâche LLM.",maxResults:"Résultats max (top-K)",minScore:"Score de similarité min",ingestion:"Ingestion de documents",dropFiles:"Glissez-déposez des documents ici",dropHint:"Fichiers textes ou Markdown",browse:"Parcourir",pasteText:"Ou coller du texte brut",pastePlaceholder:"Collez le contenu ici...",ingestText:"Ingérer le texte",ingestionHistory:"Statut d'ingestion",saveFirstIngestion:"Enregistrez d'abord cette base pour autoriser l'ingestion.",addParam:"Ajout paramètre"},B={welcome:{title:"Bienvenue sur EDDI",subtitle:"Votre centre de commande d'agents IA",introText:"EDDI Manager est votre outil pour créer, tester et gérer vos agents conversationnels.",capabilitiesTitle:"Ce que vous pouvez accomplir",capabilitiesSubtitle:"Tout ce dont vous avez besoin pour des agents en production",buildAgents:"Créer des agents",buildAgentsDesc:"Configurez des agents via l'assistant ou depuis zéro",designWorkflows:"Concevoir des workflows",designWorkflowsDesc:"Éditeur visuel pour processus LLM, appels API et outils",testRealtime:"Tester en temps réel",testRealtimeDesc:"Discutez avec vos agents avec flux de réponses et débogage",monitorOperate:"Gérer et superviser",monitorOperateDesc:"Retrouvez vos quotas, historiques, journaux et secrets au même endroit",readyTitle:"Prêt à commencer ?",readySubtitle:"Vous pourrez relancer cette visite depuis le menu Aide",startTour:"Lancer la visite guidée",exploreOwn:"Explorer par moi-même"},tour:{back:"Retour",next:"Suivant",skip:"Passer",finish:"Terminer",stepOf:"Étape {{current}} sur {{total}}",dashboard:{title:"Visite du Tableau de Bord",step1Title:"Votre centre de pilotage",step1Desc:"La barre latérale s'organise en trois volets: Gestion, Développement et Opérations.",step2Title:"Résumé de plateforme",step2Desc:"Statistiques en temps réel de vos agents, workflows et conversations.",step3Title:"Actions rapides",step3Desc:"Lancez l'assistant de création pour monter un agent en moins de deux minutes.",step4Title:"Personnalisez l'UI",step4Desc:"Basculez vers les thèmes clair/sombre et paramétrez votre langage."},agents:{title:"Visite des Agents",step1Title:"Assistant agent",step1Desc:"L'assistant compile toutes les étapes: Modèles IA, personnalités et outils LLM.",step2Title:"Création manuelle",step2Desc:"Pour les configurations fines basées sur JSON directement interfacées avec le serveur.",step3Title:"Rechercher",step3Desc:"Trouvez rapidement vos agents par nom via un filtre textuel simple.",step4Title:"Flotte",step4Desc:"Parcourez chaque carte Agent pour accéder au déploiement, au chat ou au pipeline de workflow de l'agent."},workflows:{title:"Visite des Workflows",step1Title:"Pipeline d'exécution",step1Desc:"Créer une cascade définie de tâches telles que des règles ou des API HTTP.",step2Title:"Connexion aux agents",step2Desc:"Liez chaque agent à un workflow pour valider son comportement conversationnel.",step3Title:"Trier la liste",step3Desc:"Basculez de la grille aux tableaux et explorez les ressources connectées."},chat:{title:"Visite de Chat",step1Title:"Déployer puis parler",step1Desc:"Lancez des échanges concrets avec vos LLM.",step2Title:"Diffusion temps réel",step2Desc:"Activez le Token Streaming pour apprécier des retours immédiats, mot à mot.",step3Title:"Historique des sessions",step3Desc:"Relisez toutes les conversations inachevées ou archivées pour audit direct.",step4Title:"Exécution d'outils",step4Desc:"Soumettez une requête; le LLM résoudra automatiquement l'appel d'outil nécessaire."},resources:{title:"Visite des Ressources",step1Title:"Bibliothèque",step1Desc:"Éditez individuellement les briques fonctionnelles d'un workflow Agent.",step2Title:"Configuration LLM",step2Desc:"Intégrez des modèles précis de base de connaissances et de Cascade avancée LLM.",step3Title:"Règles",step3Desc:"Utilisez le formateur JSON de réponses ou reliez un flux à de simples déclarations If/Else."},conversations:{title:"Visite des Conversations",step1Title:"Moteur de recherche",step1Desc:"Retrouvez n'importe quel texte ou identifiant issu du client conversationnel.",step2Title:"Triage",step2Desc:"Isolez les dialogues terminés, actifs ou en défaut pour résolution.",step3Title:"Mode débug",step3Desc:"La lecture fine d'une conversation déverrouille une suite de debugging des prompts d'agent LLM."},groups:{title:"Visite des Groupes",step1Title:"Création",step1Desc:"Connectez vos différents agents dans des clusters de discussion collectifs.",step2Title:"Filtrage",step2Desc:"Identifiez rapidement l'ensemble de vos hubs multi-agents.",step3Title:"Contrôle global",step3Desc:"Affichez, supprimez et réorganisez vos environnements de concert LLM."},logs:{newLogs:"Nouveaux logs",title:"Visite des Logs Systèmes",step1Title:"Surveiller",step1Desc:"Supervisez vos instances en basculant des flux live aux bases archivées.",step2Title:"Niveaux",step2Desc:"Dédiez votre vigilance sur les rapports Warning ou Erreur.",step3Title:"Exporter",step3Desc:"Générez un fichier complet selon vos tris et gardez une trace de développement LLM."},secrets:{title:"Visite des Secrets",step1Title:"Intégration",step1Desc:"Acheminez en sécurité des Clés API vers vos instances d'outils d'Agent.",step2Title:"Localisation Locataire",step2Desc:"Ajustez vos informations pour conserver une sécurité propre à chaque Tenant Cloud.",step3Title:"Injection dynamique",step3Desc:"Équipez un noeud complet sans trahir une seule information secrète via ${vault:...}."},audit:{title:"Visite de l'Audit Ledger",step1Title:"Trace Immutable",step1Desc:"Inspectez toutes les manipulations passées, classées par Conversation ou Agent.",step2Title:"Investigation",step2Desc:"Vérifiez que toutes les communications de plateforme sont validées et conformes.",step3Title:"Extraction Complète",step3Desc:"Copiez tous ces rapports au format JSON structuré certifiant de bonnes pratiques."},schedules:{title:"Visite des Plannings",step1Title:"Job d'automatisation",step1Desc:"Éveillez et exécutez de manière chronométrée vos tâches asynchrones d'Agent.",step2Title:"Supervision Cron",step2Desc:"Constatez globalement toutes les pannes chronologiques via l'utilitaire d'erreurs.",step3Title:"Pilote temps réel",step3Desc:"Démarrez et interrompez une activité en direct aux horaires des serveurs intégrés."},quotas:{saveSuccess:"Quota enregistré",resetSuccess:"Compteurs d’usage réinitialisés",resetConfirmDesc:"Met immédiatement à zéro tous les compteurs d’usage (conversations, appels API, coût mensuel) pour le locataire « default ». Irréversible.",resetConfirmTitle:"Réinitialiser les compteurs d’usage ?",title:"Visite des Quotas",step1Title:"Règlements limites",step1Desc:"Plafonnez de potentielles brèches financières en plafonnant un compte Agent spécifique.",step2Title:"Usage temps réel",step2Desc:"Pistez combien d'appels d'outils un projet spécifique engendre.",step3Title:"Règles actives",step3Desc:"Protégez tout dépassement via un système proactif limitateur."},coordinator:{title:"Visite du Coordinateur",step1Title:"Interface temps réel",step1Desc:"Unifiez la totalité de l'orchestrateur au serveur frontal visuel.",step2Title:"Déroulé de queue",step2Desc:"Administrez des paquets colossaux d'actions serveurs dispatchés en ligne.",step3Title:"Lettres mortes",step3Desc:"Restituez d'anciennes interruptions, retirez-les ou soumettez-les à un exécuteur pour validation."},orphans:{confirmPurgeAll:"Supprimer définitivement TOUTES les {{count}} ressources orphelines ? Le serveur purge tout — votre sélection n’est pas appliquée. Action irréversible.",title:"Visite des Objets Orphelins",step1Title:"Exploration complète",step1Desc:"Localisez instantanément vos données devenues errantes au sein des configurations.",step2Title:"Poubelle numérique",step2Desc:"Récupérez les agents signalés mais abandonnés des derniers nettoyages.",step3Title:"Purge globale",step3Desc:"Détruisez irrémédiablement d'inutiles enregistrements de mémoire saturant ce cloud LLM."}},help:{title:"Aide & Visite",platformTour:"Démarrer la visite guidée",resetAll:"Réinitialiser les visites",resetConfirm:"Remettre à zéro l'historique des visites guidées ?"},offer:{message:"Nouveau par ici ? Suivez la {{page}}",accept:"Afficher",dontAsk:"Ne plus demander"}},G={status:"État de la plateforme",online:"En ligne",offline:"Hors ligne",checking:"Vérification…",connected:"Connecté",disconnected:"Déconnecté",instance:"Instance",latency:"Latence",lastChecked:"Dernière vérification",justNow:"à l'instant",secondsAgo:"il y a {{count}}s"},W={live:"En direct",reconnecting:"Reconnexion…"},K={title:"Nouveau {{type}}",newAgent:"Nouvel Agent",newGroup:"Nouveau Groupe",quickCreate:"Création rapide",quickCreateTitle:"Création rapide de {{type}}",quickCreateDesc:"Définissez un nom, puis configurez plus tard.",guidedSetup:"Assistant de configuration",guidedSetupDesc:"Configuration pas à pas : fournisseur LLM, prompts et déploiement."},J=JSON.parse(`{"actionConflict":"Une autre opération est encore en cours, ou cette discussion n'accepte plus cette action. Veuillez réessayer.","actionTimeout":"Un agent membre n'a pas répondu à temps. Veuillez réessayer.","actionUnreachable":"Un agent membre n'a pas pu être joint. Veuillez réessayer.","addMember":"Ajouter un membre","allowHtmlTooltip":"Lorsqu'activé, affiche le contenu HTML (nettoyé). À utiliser uniquement avec des agents de confiance.","askQuestion":"Posez une question à débattre par le groupe…","assignAgents":"Attribuez des agents à chaque rôle de membre.","blankDesc":"Tout configurer manuellement.","characters":"caractères","chooseTemplate":"Choisissez un modèle ou partez de zéro.","closeConfirmDescription":"La clôture met définitivement fin à toutes les conversations des membres et nettoie les agents éphémères. Aucune relance ni continuation n'est ensuite possible. Cette action est irréversible.","composeQuestion":"Composer la question","continueButton":"Continuer","continueHint":"Réexécute toutes les phases comme un nouveau tour ; chaque agent conserve la mémoire des tours précédents. Impossible d'ajouter des pièces jointes à une continuation.","continuePlaceholder":"Poursuivez cette discussion avec une suite…","continueStreamStarted":"Reprise démarrée — diffusion en direct","count":"{{count}} groupes","createSuccess":"Groupe créé avec succès","discussing":"Les agents discutent…","enterToSend":"Entrée pour envoyer","expandInput":"Agrandir la saisie","followupHint":"Posez une relance directe à un membre. L'agent conserve tout le contexte de la discussion ; l'échange est ajouté à la transcription.","followupPlaceholder":"Posez une question de relance à ce membre…","inputDisabledApproval":"En attente d'approbation…","inputDisabledClosed":"Cette discussion est fermée","inputDisabledCompleted":"Discussion terminée","inputDisabledEnded":"Cette discussion est terminée","inputDisabledInProgress":"Discussion en cours…","membersCount":"{{count}} membres","moderator":"Modérateur (pour la synthèse)","namePlaceholder":"ex. Conseil consultatif","newDiscussion":"Nouvelle discussion","newShort":"Nouveau","noModerator":"Aucun modérateur","noResponse":"Aucune réponse","contentTruncated":"[Contenu tronqué]","protocolMaxRetries":"Tentatives max.","protocolMaxRounds":"Tours max.","protocolOnFailure":"En cas d'échec","protocolSettings":"Protocole","protocolTimeout":"Délai d'expiration","protocolUnavailable":"Indisponible","question":"Question","readyToDiscuss":"Prêt à discuter","responding":"répond…","reviewMemberRoster":"Liste des membres","reviewMembers":"Membres","reviewModerator":"Modérateur","reviewNoModerator":"Aucun (synthèse automatique désactivée)","reviewRounds":"Tours max.","reviewTimeout":"Délai d'attente agent","reviewUnassigned":"Non assigné","reviewUnassignedHint":"Revenez en arrière pour attribuer des agents avant de créer.","selectAgent":"Sélectionner un agent…","selectOrStart":"Sélectionnez une discussion passée dans l'historique, ou saisissez une question ci-dessous pour en démarrer une nouvelle.","shiftEnter":"nouvelle ligne","skipped":"Ignoré","sortByMembers":"Trier par membres","sortByStyle":"Trier par style","speakingCount":"{{count}} en train de parler","startBlank":"Partir de zéro","startDiscussion":"Discuter","stateCompleted":"Terminé","stateCreated":"Créé","stateFailed":"Échoué","stateSynthesizing":"Synthèse en cours…","stepBasics":"Bases","stepMembers":"Membres","stepReview":"Vérification","stepTemplate":"Modèle","submitShortcut":"Ctrl+Entrée pour envoyer","synthesis":"Synthèse","synthesizing":"Le modérateur synthétise…","hitlSelectPhase":"Sélectionnez au moins une phase nécessitant une approbation.","empty":"Aucun groupe","emptyDescription":"Les groupes permettent à plusieurs agents de collaborer lors de discussions structurées.","createGroup":"Créer un groupe","unnamed":"Groupe sans nom","count_one":"{{count}} groupe","count_other":"{{count}} groupes","confirmDelete":"Supprimer ce groupe ?","confirmDeleteDesc":"La configuration du groupe sera définitivement supprimée.","duplicateSuccess":"Groupe dupliqué","noDescription":"Aucune description","members":"membres","discussionStyle":"Style de discussion","maxRounds":"Tours max.","styleTaskForce":"Task Force","stateAwaitingApproval":"En attente d'approbation","stateCancelled":"Annulé","phasePlan":"Planification","phaseExecute":"Exécution","phaseVerify":"Vérification","preConfiguredTasks":"Tâches préconfigurées","dynamicAgents":"Agents dynamiques","dynamicCreation":"Création","dynamicRecruitment":"Recrutement","dynamicDelegation":"Délégation","lifecyclePolicy":"Cycle de vie","allowedProviders":"Fournisseurs","liveIndicator":"● LIVE","htmlToggle":"HTML","memberTypeGroup":"Groupe","moderatorBadge":"⭐ Mod","styleColumn":"Style","membersColumn":"Membres","memberOverflow":"+{{count}} de plus","defaultLabel":"Groupe","liveDiscussion":"En direct","state":{"CREATED":"Créé","IN_PROGRESS":"En cours","SYNTHESIZING":"Synthèse en cours","COMPLETED":"Terminé","FAILED":"Échoué","ERROR":"Erreur","AWAITING_APPROVAL":"En attente d'approbation","CANCELLED":"Annulé","AWAITING_HUMAN_INPUT":"En attente d'un membre","CLOSED":"Fermée"},"preConfiguredTasksCount":"Tâches préconfigurées ({{count}})","entryType":{"QUESTION":"Question","OPINION":"Opinion","CRITIQUE":"Critique","REVISION":"Révision","CHALLENGE":"Objection","DEFENSE":"Défense","ARGUMENT":"Argument","REBUTTAL":"Réfutation","SYNTHESIS":"Synthèse","ERROR":"Erreur","SKIPPED":"Ignoré","PLAN":"Plan","TASK_RESULT":"Résultat de tâche","VERIFICATION":"Vérification","FOLLOW_UP":"Relance","ABSTAINED":"Abstention","DISSENT":"Désaccord","CONVERGENCE":"Convergence","FACILITATION":"Facilitation","VOTE":"Vote","PROPOSAL":"Proposition","BARGAIN":"Contre-offre","HUMAN_INPUT":"Apport humain","RETRO":"Rétrospective","BID":"Offre"},"flow":{"Opinion":"Opinion","Discussion":"Discussion","Synthesis":"Synthèse","Critique":"Critique","Revision":"Révision","Challenge":"Objection","Defense":"Défense","Independent":"Indépendant","AnonymousSharing":"Partage anonyme","Revised":"Révisé","ProOpening":"Ouverture pour","ConOpening":"Ouverture contre","Rebuttals":"Réfutations","Judgment":"Jugement","Plan":"Planification","Execute":"Exécution","Verify":"Vérification","Synthesize":"Synthétiser"},"lifecycle":{"EPHEMERAL":"éphémère","KEEP_DEPLOYED":"maintenir déployé","UNDEPLOY_ONLY":"retirer uniquement","AGENT_DECIDES":"l'agent décide"},"dynamicMax":"✓ (max {{count}})","dynamicMaxPerTask":"✓ (max {{count}}/tâche)","protocolMaxTurns":"Tours max.","speakingOrderTooltip":"Ordre de parole : #{{order}}","allowedModels":"Modèles","inheritParentModel":"Hériter du modèle","enabled":"Activé","disabled":"Désactivé","turnOrderSequential":"séquentiel","turnOrderParallel":"parallèle","requiresApproval":"approbation requise","item":"élément","items":"éléments","contextScope":{"NONE":"indépendant","FULL":"contexte complet","LAST_PHASE":"dernière phase","ANONYMOUS":"anonyme","OWN_FEEDBACK":"propre feedback","TASK_ONLY":"tâche uniquement","TASK_WITH_DEPS":"tâche + dépendances"},"configuration":"Configuration","deleteGroupOnly":"Supprimer le groupe uniquement","deleteGroupOnlySuccess":"Groupe supprimé (agents conservés)","deleteGroupOnlyWarning":"Cela supprimera le groupe. Tous les agents membres seront conservés.","deleteGroupAndAgents":"Supprimer le groupe + tous les agents","deleteWithMembersSuccess":"Groupe et tous les agents membres supprimés (suppression douce)","deleteWithMembersWarning":"Cela effectuera une suppression douce du groupe et de tous les {{count}} agents membres. Ils pourront être récupérés.","hideDiscussions":"Masquer le panneau de discussions","showDiscussions":"Afficher le panneau de discussions","hideConfig":"Masquer le panneau de configuration","showConfig":"Afficher le panneau de configuration","hitlSection":"Approbation humaine","hitlApprovalPoints":"Approbation à","hitlOnTaskRejection":"En cas de rejet","hitlEdit":"Modifier","hitlSaved":"Paramètres d'approbation enregistrés","hitlEnable":"Exiger une approbation humaine","hitlApprovalPhases":"Phases nécessitant une approbation","hitlNotConfigured":"Aucune barrière d'approbation configurée — cliquez sur Modifier pour exiger une approbation humaine.","driftTitle":"La configuration du groupe a changé pendant la pause","driftRecovery":"La reprise a été interrompue car les phases du groupe ont changé. La discussion est toujours en attente d'approbation — corrigez la configuration (Modifier, dans le panneau Configuration) et approuvez à nouveau, ou annulez-la.","discussionStarted":"Discussion démarrée — diffusion en direct","continueStarted":"Nouveau tour démarré","followupSent":"Relance envoyée","discussionClosed":"Discussion clôturée","backToGroups":"Retour aux groupes","noDiscussions":"Aucune discussion pour le moment","askBelow":"Posez une question ci-dessous pour commencer","exitFullscreen":"Quitter le plein écran","enterFullscreen":"Plein écran","discussions":"Discussions","discussionComplete":"Discussion terminée","continueDiscussion":"Continuer (nouveau tour)","followupMember":"Relancer un membre","closeDiscussion":"Clôturer la discussion","currentRound":"Actuellement au tour","startNextRound":"Démarrer le tour suivant","selectMember":"Sélectionner un membre","sendFollowup":"Envoyer la relance","closeConfirmTitle":"Clôturer cette discussion ?","closeConfirmButton":"Clôturer la discussion","closeConfirmDismiss":"Retour","count_many":"{{count}} groupes","protocolMaxCost":"Plafond de coût","protocolOnCostExceeded":"À l'atteinte","costAbort":"Interrompre","costSynthesize":"Synthétiser maintenant","deliberationSection":"Délibération","recordDissents":"Avis minoritaire","agentFiledTasks":"Tâches créées par les agents","agentFiledCaps":"Limites","agentFiledCapsValue":"{{perDiscussion}} / discussion · {{perTurn}} / tour","moderatorlessWarning":"Réservé à un modérateur que ce groupe n'a pas : {{phases}}. Le premier membre par ordre de parole prendra le relais.","roleCoverageWarning":"Aucun membre ne porte le rôle « {{role}} » : dans {{phases}}, tous les membres prendront la parole.","delegationDepth":"Profondeur max.","delegationTimeout":"Délai du délégué","secondsShort":"{{seconds}}s","delegationTargets":"Liste autorisée","phaseBehaviour":"Comportement des phases","phaseBehaviourNone":"Ni abstention ni convergence configurées — cliquez sur Modifier pour autoriser les passes ou arrêter une phase répétée dès l'accord.","abstentionShort":"abstention","convergenceShort":"convergence ≥{{threshold}}","phasesSaved":"Réglages de phase enregistrés","phasesNoneToEdit":"Ce groupe ne définit aucune phase. Choisissez un style de discussion, ou ajoutez des phases à la configuration, avant de régler leur comportement.","phaseRepeats":"×{{repeats}}","allowAbstention":"Autoriser l'abstention","allowAbstentionHelp":"Un membre peut renoncer à ajouter du nouveau ce tour-ci plutôt que de se répéter.","convergenceEnable":"Arrêter tôt en cas de convergence","convergenceHelp":"Un juge compare chaque répétition à la précédente et met fin à la phase dès que les membres cessent d'évoluer. Coûte un appel par répétition.","convergenceNeedsRepeats":"Disponible uniquement sur une phase répétée — un passage unique n'a rien à comparer.","convergenceMinRepeats":"Répétitions min.","convergenceThreshold":"Seuil","convergenceJudge":"Juge","judgeModerator":"Modérateur","judgeService":"Service","judgeServiceNote":"Accepté mais pas encore branché — le moteur bascule sur le modérateur et journalise un avertissement.","convergenceReached":"Convergé","convergenceChecked":"Contrôle de convergence","convergenceScore":"accord {{score}}","decisionWinner":"Vainqueur : {{winner}}","decisionTie":"Égalité","decisionDecidedAt":"Décidé lors de {{phase}}","decisionUnparsed":"La réponse du juge n'a pas pu être lue comme un verdict structuré : elle figure telle quelle ci-dessous et la conclusion reste en prose.","minorityReport":"Avis minoritaire ({{total}})","attachFiles":"Joindre des fichiers","attachmentLimit":"Au plus {{max}} pièces jointes par discussion","attachmentTooLarge":"{{name}} est trop volumineux pour être joint","attachmentReadFailed":"Impossible de lire {{name}}","removeAttachment":"Retirer {{name}}","decisionType":{"VERDICT":"Verdict","VOTE":"Vote","AGREEMENT":"Accord","AWARD":"Attribution","NONE":"Aucune décision structurée"},"abstainedBody":"N'a rien ajouté de nouveau ce tour-ci.","convergenceSkipped_one":"· {{count}} tour supplémentaire ignoré","convergenceSkipped_many":"· {{count}} tours supplémentaires ignorés","convergenceSkipped_other":"· {{count}} tours supplémentaires ignorés","attachmentTotalTooLarge":"Les pièces jointes dépassent la taille totale autorisée","convergenceInert":"Configuré, mais cette phase ne s'exécute qu'une fois — le juge ne pourra jamais tourner. Retirez le réglage, ou donnez plus d'une répétition à la phase.","questionTooLong":"Une question ne peut pas dépasser {{max}} caractères","charactersOverLimit":"{{current}} / {{max}} caractères","advancedSection":"Collaboration avancée","artifactConfigLabel":"Artefacts partagés","artifactConfigValue":"{{count}} max. par discussion","artifactCreatedBadge":"{{name}} créé (v{{version}})","artifactDraft":"Brouillon","artifactFinal":"Final","artifactLastEdited":"Dernière modification par {{agent}}","artifactUpdatedBadge":"{{name}} mis à jour (v{{version}})","artifactsTitle":"Artefacts partagés ({{count}})","concessionLedgerTitle":"Registre des concessions","contextWindowLabel":"Fenêtre de transcription","contextWindowValue":"{{count}} dernières entrées{{summarized}}","facilitatorLabel":"Facilitateur","facilitatorMoves":"Actions autorisées","humanMemberConfigLabel":"Délai du tour humain","humanTurnRequestedAt":"Demandé","humanTurnResponsePlaceholder":"Votre réponse","humanTurnSubmit":"Envoyer","humanTurnSubmitted":"Votre réponse a été enregistrée","humanTurnSubmitting":"Envoi en cours…","humanTurnTimeout":"Délai","humanTurnTitle":"C'est à votre tour, {{name}}","inputDisabledHumanTurn":"En attente du tour d'un membre…","memberTypeHuman":"Humain","negotiationAcceptedBy":"Accepté par : {{names}}","negotiationGaveUp":"a cédé","negotiationInReturnFor":"en échange de","negotiationOpen":"Ouvert","negotiationRound":"Manche {{round}}","negotiationSuperseded":"Remplacé","negotiationTableTitle":"Table de négociation","notSet":"non défini","retroConfigLabel":"Enseignements de la rétrospective","retroConfigValue":"{{perRun}}/exécution, {{stored}} max. stockées","stateAwaitingHumanInput":"En attente d'un membre","summarized":"résumé","transcriptWindowed":"Les {{count}} premières entrées de la transcription ont été condensées en un résumé glissant afin de limiter le contexte des tours suivants. Survolez pour voir le résumé.","voteMethod":"Méthode","voteMethodApproval":"Vote d'approbation","voteMethodMajority":"Majorité","voteOptionsExplicit":"Liste explicite","voteOptionsLastSynthesis":"Extraire de la dernière synthèse","voteOptionsList":"Options (une par ligne)","voteOptionsSource":"Options du scrutin","voteQuorum":"Quorum","voteTieHuman":"Décision humaine (pas encore disponible)","voteTieModerator":"Le modérateur décide","voteTieNoDecision":"Aucune décision","voteTiePolicy":"En cas d'égalité","voteWeightByConfidence":"Pondérer par confiance","waitIndefinitely":"Attendre indéfiniment","advancedSaved":"Paramètres de collaboration enregistrés","advancedNotConfigured":"Aucune fenêtre de transcription, mémoire rétro, artefact partagé ni animateur configuré — cliquez sur Modifier pour les activer.","contextWindowHint":"Borne le contexte de chaque tour dans les longues discussions en repliant les entrées anciennes dans un résumé glissant.","contextWindowEntries":"Entrées récentes conservées intégralement","contextWindowSummarize":"Résumer ce qui sort de la fenêtre","contextWindowTruncateNote":"Les entrées anciennes sont remplacées par un simple marqueur « N entrées antérieures omises ».","retroConfigHint":"Permet à une phase rétro d'inscrire des enseignements dans la mémoire de l'équipe, repris dans les discussions suivantes.","retroPerRun":"Par exécution","retroStored":"Maximum stocké","artifactConfigHint":"Permet aux membres de co-rédiger des documents qui survivent au tour où ils ont été écrits.","artifactsPerDiscussion":"Maximum par discussion","facilitatorHint":"Un agent qui intervient à chaque point de contrôle et choisit un seul mouvement dans la liste autorisée — jamais un orchestrateur libre.","facilitatorAgent":"Agent animateur","facilitatorPickAgent":"Sélectionner un agent…","facilitatorAgentRequired":"Choisissez l'agent qui animera.","facilitatorCheckAfter":"Point de contrôle","facilitatorCheckpoint":{"EACH_PHASE":"Après chaque phase","EACH_REPEAT":"Après chaque tour au sein d'une phase"},"facilitatorMove":{"CONTINUE":"Continuer","END_PHASE":"Terminer la phase par anticipation","EXTEND_PHASE":"Prolonger la phase","CALL_VOTE":"Convoquer un vote","RECRUIT":"Recruter un membre","ESCALATE_HUMAN":"Escalader vers un humain"},"facilitatorNoMove":"Autorisez au moins un mouvement, ou désactivez l'animateur.","facilitatorMidPhaseNeedsRepeat":"Terminer ou prolonger une phase agit en cours de phase : cela exige le point de contrôle par tour.","facilitatorEscalateTo":"Escalader vers (identifiant principal)","facilitatorEscalateRequired":"L'escalade met la discussion en pause pour quelqu'un — précisez qui.","facilitatorMaxMoves":"Mouvements max. par discussion","assignmentModeLabel":"Attribution des tâches","assignmentModeRole":"Par rôle (le planificateur attribue)","assignmentModeBid":"Par enchère (les membres enchérissent, la meilleure confiance l'emporte)","assignmentModeBidShort":"Par enchère","assignmentModeRoleHint":"Le planificateur ou la configuration attribue chaque tâche, ou à tour de rôle.","assignmentModeBidHint":"Revient à l'attribution par rôle lorsqu'une enchère n'est pas rentable : moins de deux enchérisseurs ou de deux tâches ouvertes, ou budget de tours insuffisant.","contextWindowSummarizer":"Résumeur","contextWindowNoSummarizer":"Aucun","contextWindowModel":"Modèle de résumé","contextWindowModelPlaceholder":"modèle","contextWindowSummarizerMissing":"Sans modèle de résumé, le débordement retombe silencieusement sur le simple marqueur de troncature.","facilitatorMaxMovesCeiling":"Au plus {{max}} — l'animateur est une intervention bornée, pas un orchestrateur.","reviewUnassignedWarning_many":"{{count}} membres non assignés","reviewUnassignedWarning_one":"{{count}} membre non assigné","reviewUnassignedWarning_other":"{{count}} membres non assignés","retroRecordedBadge_many":"{{phase}} : {{count}} enseignements enregistrés dans la mémoire d'équipe","retroRecordedBadge_one":"{{phase}} : {{count}} enseignement enregistré dans la mémoire d'équipe","retroRecordedBadge_other":"{{phase}} : {{count}} enseignements enregistrés dans la mémoire d'équipe","artifactRevisions_many":"{{count}} révisions précédentes","artifactRevisions_one":"{{count}} révision précédente","artifactRevisions_other":"{{count}} révisions précédentes","styles":{"ROUND_TABLE":{"label":"Table ronde","flow":"Chacun donne son point de vue, puis s'appuie sur les autres au fil des tours"},"PEER_REVIEW":{"label":"Revue par les pairs","flow":"Chacun répond seul, critique les autres, puis révise sa réponse"},"DEVIL_ADVOCATE":{"label":"Avocat du diable","flow":"Un membre attaque la position du groupe, les autres la défendent"},"DELPHI":{"label":"Tours anonymes","flow":"Chacun répond anonymement et révise à chaque tour, sans se caler sur le premier intervenant"},"DEBATE":{"label":"Débat pour/contre","flow":"Un camp plaide pour, l'autre contre, puis viennent les répliques et le verdict"},"TASK_FORCE":{"label":"Groupe de travail","flow":"Le modérateur planifie, les membres traitent les tâches en parallèle, les résultats sont vérifiés"},"NEGOTIATION":{"label":"Négociation","flow":"Les parties échangent des propositions jusqu'à l'accord ; un arbitre n'intervient qu'à défaut"},"CUSTOM":{"label":"Déroulé personnalisé","flow":"Des phases que vous définissez vous-même"}},"unsupportedStyle":"Ce serveur ne prend pas en charge {{style}}. Choisissez un autre cadre pour continuer."}`),Q={title:"Tableau des tâches",pending:"En attente",inProgress:"En cours",completed:"Terminé",verified:"Vérifié",failed:"Échoué",assignedTo:"Assigné à {{name}}",dependsOn:"Dépend de : {{tasks}}",emptyTitle:"En attente du plan de tâches",emptyDescription:"Le modérateur créera un plan de tâches une fois la discussion commencée.",emptyState:"Le plan de tâches apparaîtra ici lorsque le modérateur le créera",unassigned:"Non assigné",progress:"{{done}} sur {{total}} tâches terminées",verificationPassed:"Réussi",verificationFailed:"Échoué",showMore:"afficher plus",showLess:"afficher moins",awaitingApproval:"En attente d'approbation",filedBy:"Créée par {{agent}}",wonByBid:"Remporté par enchère — {{confidence}} % de confiance, {{complexity}}"},Y={title:"Mémoire utilisateur",subtitle:"Parcourir et gérer les souvenirs persistants stockés par les agents",userIdPlaceholder:"Saisir l’ID utilisateur…",searchPlaceholder:"Rechercher dans les souvenirs…",enterUserId:"Saisissez un ID utilisateur pour parcourir ses souvenirs",totalEntries:"Total des entrées",preferences:"Préférences",facts:"Faits",conflicts:"Conflits",cat_all:"Tout",cat_preference:"Préférences",cat_fact:"Faits",cat_context:"Contexte",deleteAll:"Tout supprimer",deleteAllTitle:"Supprimer tous les souvenirs",deleteAllDesc:"Tous les souvenirs de cet utilisateur seront définitivement supprimés. Cette action est irréversible.",deleteAllConfirm:"Tout supprimer",entryDeleted:"Entrée supprimée",allDeleted:"Tous les souvenirs de l’utilisateur supprimés",noResults:"Aucune entrée trouvée",value:"Valeur",sourceAgent:"Agent source",accessCount:"Accès",created:"Créé",updated:"Mis à jour",sourceConversation:"Conversation source",conflicted:"En conflit"},$={title:"Propriétés utilisateur",subtitle:"Parcourir et gérer les propriétés longTerm stockées par utilisateur",userIdPlaceholder:"Saisir l’ID utilisateur…",searchPlaceholder:"Filtrer les propriétés…",enterUserId:"Saisissez un ID utilisateur pour voir ses propriétés",key:"Clé",type:"Type",value:"Valeur",deleteAll:"Tout supprimer",deleteAllTitle:"Supprimer toutes les propriétés",deleteAllDesc:"Toutes les propriétés de cet utilisateur seront définitivement supprimées.",deleted:"Propriétés supprimées",noResults:"Aucune propriété trouvée",showingCount:"{{count}} propriétés"},Z={agentId:"ID de l'agent",environment:"Environnement",title:"Déclencheurs d’agents",subtitle:"Associer des intentions aux déploiements d’agents pour le routage automatique",create:"Nouveau déclencheur",createTitle:"Créer un déclencheur",editTitle:"Modifier le déclencheur",intent:"Intention",deployments:"Déploiements d’agents",addDeployment:"Ajouter un agent",agents:"agents",empty:"Aucun déclencheur configuré",created:"Déclencheur créé",updated:"Déclencheur mis à jour",deleted:"Déclencheur supprimé",deleteTitle:"Supprimer le déclencheur",deleteDesc:"Supprimer définitivement le déclencheur pour l’intention « {{intent}} » ?",searchPlaceholder:"Filtrer par intention ou ID d’agent…"},X={agentCount:"Agents",confidence:"Confiance",partialError:"Certaines requêtes de compétences ont échoué",registryOverview:"Vue d'ensemble du registre",skillName:"Compétence",skills:"compétences",title:"Découverte des capacités",subtitle:"Rechercher des agents par compétences et capacités déclarées",searchPlaceholder:"Rechercher des compétences…",strategyHighest:"Confiance la plus élevée",strategyAll:"Tous les résultats",registeredSkills:"Compétences enregistrées",noSkills:"Aucune compétence trouvée",matchingAgents:"Agents correspondants",noMatches:"Aucun agent trouvé pour cette compétence"},ee={title:"Exporter l'agent",loading:"Chargement de l'arbre de ressources…",selectResources:"Sélectionner les ressources à exporter",required:"Requis",snippets:"Extraits",allSelected:"Toutes les ressources sélectionnées",countSelected:"{{count}} sur {{total}} ressources sélectionnées",exportSelected:"Exporter la sélection"},te={title:"Importer un agent",dropZone:"Déposez un fichier .zip ici ou cliquez pour parcourir",dropZoneHint:"Archive d'agent exportée (.zip)",strategyLabel:"Stratégie d'import",createNew:"Créer comme nouvel agent",createNewDesc:"Crée une copie avec de nouveaux identifiants. Idéal pour un premier import.",mergeSync:"Fusionner avec l'existant",mergeSyncDesc:"Met à jour les ressources existantes. Crée les ressources manquantes.",upgradeExisting:"Mettre à jour un agent existant",upgradeDesc:"Fait correspondre les ressources structurellement avec un agent cible. Idéal pour la promotion entre environnements.",syncRemote:"Synchroniser depuis une instance distante",syncDesc:"Connectez-vous à une autre instance EDDI et synchronisez un agent en direct.",importNow:"Importer maintenant",previewChanges:"Aperçu des modifications",selectTargetAgent:"Sélectionner l'agent cible",upgradeTargetHint:"Les ressources importées seront mises en correspondance structurelle avec cet agent.",chooseAgent:"— Choisir un agent —",sourceAgent:"Agent source (distant)",targetAgent:"Agent cible (local)",createNewTarget:"Créer un nouvel agent",resource:"Ressource",type:"Type",match:"Correspondance",action:"Action",new:"nouveau",updated:"mis à jour",unchanged:"inchangé",selected:"sélectionnés",mergeNow:"Importer la sélection",syncNow:"Synchroniser maintenant",upgradeNow:"Mettre à jour",importing:"Import de l'agent en cours…",contentIdentical:"Contenu identique",targetContent:"Cible",sourceContent:"Source",diffHiddenLines:"Afficher {{lines}} lignes inchangées",diffRawComparison:"JSON non valide — comparaison en texte brut : une simple différence de mise en forme apparaît donc aussi comme une modification."},re={title:"Synchronisation d'agents",subtitle:"Synchroniser les agents entre les instances EDDI",connection:"Instance source",sourceUrl:"URL de l'instance EDDI source",authToken:"Jeton d'autorisation",authHint:"Facultatif. Envoyé comme en-tête X-Source-Authorization.",connect:"Connecter",connected:"Connecté",agentsFound:"agents",connectionFailed:"Échec de la connexion",agentMapping:"Correspondance des agents",previewAll:"Tout prévisualiser",syncSelected:"Synchroniser la sélection",remote:"Distant",createNew:"Créer",changes:"modifications",agentsSelected:"agents sélectionnés",totalResources:"ressources",syncSuccess:"Synchronisation terminée",syncError:"Échec de la synchronisation",empty:"Connectez-vous à une instance source pour commencer la synchronisation des agents.",autoMatched:"Correspondance automatique",previewFirst:"Aperçu des modifications avant synchronisation"},ne={actionCreate:"Nouveau",actionUpdate:"Mettre à jour",actionSkip:"À jour",actionConflict:"Conflit"},se={title:"Conversations utilisateur",subtitle:"Gérer les liaisons intent → utilisateur → conversation",lookup:"Recherche",intent:"Intention",userId:"ID utilisateur",agentId:"ID agent",environment:"Environnement",conversationId:"ID conversation",binding:"Liaison active",enterBoth:"Entrez l'intent et l'ID utilisateur",notFound:"Aucune liaison trouvée",create:"Créer une liaison",createTitle:"Créer une liaison",created:"Liaison créée",deleteTitle:"Supprimer la liaison",deleteDesc:`Supprimer la liaison pour l'intent "{{intent}}" et l'utilisateur "{{userId}}" ?`,deleted:"Liaison supprimée"},ie={placeholder:"Rechercher pages, agents, actions…",noResults:"Aucun résultat.",recent:"Récents",navigate:"Navigation",agents:"Agents",actions:"Actions rapides",createAgent:"Créer un agent",openChat:"Ouvrir le chat",kbdNavigate:"naviguer",kbdSelect:"sélectionner",kbdClose:"fermer"},oe={groupMemberHint:"Ce groupe participera comme sous-groupe imbriqué dans la discussion.",noGroupsHint:"Créez d'abord un groupe, puis ajoutez-le comme membre sous-groupe imbriqué.",noGroupsYet:"Aucun groupe disponible",selectGroup:"Sélectionner un groupe existant…",title:"Assistant de groupe",subtitle:"Composez une équipe de conseillers IA pour discuter de vos questions",backToGroups:"Retour aux groupes",templateTitle:"Commencer avec un modèle",templateDesc:"Choisissez une configuration prédéfinie ou partez de zéro.",startBlank:"Partir de zéro",blankDesc:"Tout configurer manuellement",configTitle:"Configuration du groupe",configDesc:"Nommez votre groupe et choisissez le style de discussion",namePlaceholder:"Ex. Conseil consultatif",descPlaceholder:"À quoi sert ce groupe ?",membersTitle:"Composez votre équipe",membersDesc:"Pour chaque place, choisissez un agent existant ou créez-en un nouveau.",addMember:"Ajouter un membre",refreshAgents:"Actualiser la liste",existingAgents:"agents existants",displayName:"Nom de l'agent",displayNamePlaceholder:"Donnez un nom à cet agent…",rolePlaceholder:"Rôle (ex. Marketing, Ingénierie)",useExisting:"Utiliser existant",createNew:"Créer nouveau",selectAgent:"Sélectionner un agent…",systemPrompt:"Prompt système",provider:"Fournisseur LLM",model:"Modèle",apiKey:"Clé API",apiKeyPlaceholder:"sk-…",createThisAgent:"Créer l'agent",creatingAgent:"Création de l'agent…",agentReady:"Agent créé et déployé",agentCreated:'Agent "{{name}}" créé',agentCreateFailed:"Échec de la création: {{error}}",moderator:"Modérateur",moderatorHint:"Synthétise la discussion",addModerator:"Ajouter un modérateur",removeModerator:"Supprimer le modérateur",createModerator:"Créer un agent modérateur",moderatorReady:"Agent modérateur prêt",moderatorCreated:"Agent modérateur créé",creatingModerator:"Création du modérateur…",creatingSlot:"Création de {{name}}…",creatingGroup:"Création du groupe…",needMembers:"Ajoutez au moins 2 membres pour continuer",reviewTitle:"Vérifier et créer",reviewDesc:"Vérifiez la configuration de votre groupe avant de le créer.",reviewMembers:"Membres",autoCreateNotice:"{{count}} agents seront créés automatiquement",autoCreateHint:"Chaque agent sera créé et déployé automatiquement avant l'assemblage du groupe.",unassignedWarning:"{{count}} membres sans agent assigné",unassignedHint:"Ces membres seront ignorés lors des discussions. Revenez pour assigner des agents.",flowPreview:"Flux de discussion",createGroup:"Créer le groupe",created:"Groupe créé !",viewGroup:"Ouvrir le groupe",createAnother:"Créer un autre",success:"Groupe créé avec succès !",advancedSettings:"Paramètres de protocole avancés",agentTimeout:"Délai d'attente agent (secondes)",maxRetries:"Tentatives max.",onAgentFailure:"En cas d'échec de l'agent",onMemberUnavailable:"Si membre indisponible",maxTurns:"Tours max. (0 = illimité)",maxTurnsHelp:"Limite de sécurité pour le total des tours d'agent. La limite par défaut du backend est 50.",policySkip:"Ignorer",policyRetry:"Réessayer",policyAbort:"Annuler",policyFail:"Échouer",hintDebate:"Attribuez les rôles PRO et CON aux membres. Pro argumente en premier, puis Con, suivi des réfutations et du jugement.",hintDevilAdvocate:"Attribuez le rôle DEVIL_ADVOCATE à au moins un membre. Il contestera le consensus du groupe.",hintPeerReview:"Chaque membre critique individuellement le travail de tous les autres, puis révise en fonction des retours reçus.",hintDelphi:"Tous les membres répondent de manière indépendante et anonyme. Après chaque tour, ils voient les résultats anonymes et peuvent ajuster. Tours max. contrôle le nombre d'itérations anonymes.",hintNegotiation:"Les membres exposent leurs intérêts, déposent des propositions puis négocient : « Tours max » fixe le nombre de tours de marchandage. Le modérateur n'arbitre que faute d'accord.",roleCoverageWarning:"Aucun membre n'a le rôle « {{role}} »",roleCoverageHint:"Le serveur se rabat sur la prise de parole de tous les membres dans {{phases}}, si bien que les mêmes personnes défendent les deux camps. Revenez à « Membres » et renseignez le champ rôle.",hintTaskForce:"Le modérateur crée un plan de tâches, assigne le travail aux agents en parallèle, puis vérifie et synthétise les résultats.",hintCustom:"Définissez vos propres phases manuellement. Les phases personnalisées peuvent être configurées via l'API après la création.",hintRoundTable:"Tous les membres partagent leurs opinions, puis discutent des points de vue des autres sur plusieurs tours avant que le modérateur ne synthétise.",protocolSummary:"Protocole",hitlTitle:"Exiger une approbation humaine",hitlDesc:"Mettre la discussion en pause aux phases choisies et attendre une décision humaine avant de continuer.",hitlApprovalPoints:"Mettre en pause pour approbation à",hitlNoPhases:"Ce style n'a pas de phases prédéfinies à contrôler.",hitlNoApprovalPoints:"Sélectionnez au moins une phase, sinon la discussion ne s'arrêtera jamais.",hitlTimeoutPolicy:"Si aucune décision à temps",hitlApprovalTimeout:"Délai d'approbation",hitlTimeoutInvalid:"Saisissez une durée ISO-8601 positive, p. ex. PT15M ou PT1H30M.",hitlTimeoutHint:"Durée ISO-8601, p. ex. PT30S, PT15M, PT2H.",hitlGranularity:"Granularité d'approbation",hitlGranularityHint:"L'approbation par tâche s'applique à l'exécution TASK_FORCE — approuvez ou rejetez chaque tâche individuellement.",hitlOnTaskRejection:"Quand une tâche est rejetée",hitlPinNote:"Activer les points d'approbation fige les phases de discussion de ce groupe (granularité {{granularity}}).",hitlReviewBadge:"Approbation humaine",humanOnTimeoutAbort:"Interrompre la discussion",humanOnTimeoutLabel:"En cas de délai dépassé",humanOnTimeoutSkip:"Passer son tour et continuer",humanPrincipalId:"Identifiant principal",humanPrincipalIdHint:"L'identité autorisée à soumettre les interventions de ce membre — la discussion se met en pause et attend lorsque c'est à son tour de parler.",humanPrincipalIdPlaceholder:"Identifiant de connexion/principal de l'utilisateur",humanTurnSettingsHint:"La discussion se met en pause et attend lorsque c'est le tour d'un membre humain de parler. Choisissez ce qui se passe s'il ne répond pas à temps.",humanTurnSettingsTitle:"Paramètres du tour des membres humains",humanTurnTimeoutInvalid:"Durée ISO-8601 non valide, par exemple PT24H ou P1D.",humanTurnTimeoutLabel:"Délai du tour (durée ISO-8601)",humanTurnTimeoutPlaceholder:"ex. PT24H — laisser vide pour une attente indéfinie",memberTypeHuman:"Humain"},ae={advisoryBoard:"Comité consultatif",advisoryBoardDesc:"Cinq perspectives métier — marketing, technique, finance, juridique, stratégie — se prononcent sur la même question, puis le modérateur fait la synthèse.",peerReview:"Comité de relecture",peerReviewDesc:"Les relecteurs évaluent ce que vous soumettez — un brouillon, un plan, une proposition —, critiquent l'évaluation des autres, révisent, et le modérateur assemble le résultat.",riskAssessment:"Évaluation des risques",riskAssessmentDesc:"Chacun donne sa lecture, un membre défend la position inverse pour révéler les angles morts, les autres répondent, puis le modérateur résume ce qui a tenu.",forecasting:"Estimations indépendantes",forecastingDesc:"Les membres répondent anonymement sur plusieurs tours et ne voient entre-temps que des résultats anonymisés : personne ne se cale sur le premier intervenant.",proCon:"Débat pour/contre",proConDesc:"Deux membres plaident pour la proposition et deux contre, suivis de répliques et du verdict du modérateur.",negotiation:"Négociation",negotiationDesc:"Deux parties exposent leurs intérêts, déposent des propositions et échangent des concessions tour après tour ; le modérateur n'arbitre que faute d'accord.",taskForce:"Groupe de travail",taskForceDesc:"Le modérateur découpe l'objectif en tâches, les membres les traitent en parallèle, puis il vérifie et assemble les résultats.",roles:{marketingExpert:"Expert marketing",techLead:"Lead technique",financeDirector:"Directeur financier",legalCounsel:"Conseiller juridique",strategyConsultant:"Consultant en stratégie",substanceReviewer:"Relecteur du fond",structureReviewer:"Relecteur de la structure",riskReviewer:"Relecteur des risques",riskAnalyst:"Analyste risques",domainExpert:"Expert domaine",devilsAdvocate:"Avocat du diable",analystA:"Analyste A",analystB:"Analyste B",analystC:"Analyste C",analystD:"Analyste D",proAdvocate1:"Avocat pour 1",proAdvocate2:"Avocat pour 2",conAdvocate1:"Avocat contre 1",conAdvocate2:"Avocat contre 2",partyA:"Partie A",partyB:"Partie B",projectLead:"Chef de projet",researcher:"Chercheur",implementer:"Développeur",qualityAssurance:"Assurance qualité"},assignRoles:"Attribuer les rôles",backToGallery:"Retour aux modèles",browseButton:"À partir d'un modèle",createButton:"Créer un groupe",created:"Groupe créé à partir du modèle",nameLabel:"Nom du groupe",selectAgent:"Sélectionner un agent…",subtitle:"Démarrez à partir d'une discussion prête à l'emploi et déjà réglée — il suffit d'attribuer des agents à ses rôles nommés.",title:"Modèles de groupe",roleCount_many:"{{count}} rôles à attribuer",roleCount_one:"{{count}} rôle à attribuer",roleCount_other:"{{count}} rôles à attribuer",empty:"Aucun modèle disponible",emptyDescription:"Ce serveur ne fournit aucun modèle de groupe. Vous pouvez tout de même créer un groupe de zéro avec l'assistant."},ue={agentIdPlaceholder:"ID de l’agent pour traiter les messages",botToken:"Jeton de bot",botTokenHint:"Jeton OAuth du bot. Utilisez une référence coffre-fort pour la sécurité.",botTokenPlaceholder:"xoxb-… ou ${vault:slack-bot-token}",channel:"canal",channelId:"ID du canal Slack",channelIdCol:"ID du canal",channelIdHint:"Clic droit sur un canal Slack → Afficher les détails → copier l’ID du canal",channelsPlural:"canaux",channelType:"Type de canal",confirmDelete:"Supprimer le canal ?",confirmDeleteDesc:"Cette intégration de canal sera définitivement supprimée.",create:"Créer un canal",createTitle:"Créer une intégration de canal",defaultAgentId:"ID de l’agent par défaut",defaultTargetHint:"La cible par défaut traite tous les messages ne correspondant à aucun mot-clé déclencheur. Vous pouvez ajouter d’autres cibles après la création.",empty:"Aucun canal",emptyDesc:"Créez une intégration de canal pour connecter des agents à Slack.",name:"Nom",namePlaceholder:"ex. Engineering AI Hub",openSlackApps:"Ouvrir le tableau de bord Slack App",searchPlaceholder:"Rechercher des canaux…",signingSecret:"Secret de signature",signingSecretHint:"Depuis la page Informations de base de votre application Slack.",signingSecretPlaceholder:"Chaîne hex ou ${vault:slack-signing-secret}",slackSetupGuide:"Guide de configuration Slack",slackSetupSummary:"Créez une application Slack, configurez les portées du jeton de bot (app_mentions:read, chat:write, im:history, channels:history, groups:history), puis collez les identifiants ici.",target:"cible",targets:"cibles",targetsCol:"Cibles",type:"Type",unnamed:"Canal sans nom",version:"Version"},le={saveSuccess:"Canal enregistré",addTarget:"Ajouter une cible",addTrigger:"Ajouter un déclencheur…",agentId:"ID de l’agent",botToken:"Jeton de bot",channelId:"ID du canal Slack",cooldown:"Délai (s)",general:"Général",groupId:"ID du groupe",isDefault:"par défaut",maxCost:"Max €/jour",maxDaily:"Max/jour",name:"Nom",observe:"Observer",observeDesc:"Surveiller passivement et répondre sélectivement",observeKeywords:"Mots-clés déclencheurs",observeMimeTypes:"Types MIME déclencheurs",observeMode:"Mode observation",observeSettings:"Paramètres du mode observation",platformConfig:"Configuration de la plateforme",rawConfig:"Configuration brute",removeTarget:"Supprimer",requiredEvents:"Abonnements d’événements requis :",requiredScopes:"Portées de jeton de bot requises :",setDefault:"Définir par défaut",signingSecret:"Secret de signature",targetName:"Nom",targets:"Cibles de routage des messages",targetType:"Type",triggerHint:"Les utilisateurs saisissent « mot-clé : message » pour router vers cette cible",triggerKeywords:"Mots-clés déclencheurs",triggers:"déclencheurs",type:"Type de canal",webhookHint:"Collez cette URL dans le champ Request URL des Event Subscriptions de votre application Slack.",webhookUrl:"URL du webhook",hitlSection:"Approbations Human-in-the-Loop (facultatif)",hitlApprovalChannel:"ID du canal d'approbation",hitlApprovalChannelHint:"Canal Slack qui reçoit une carte d'approbation lorsqu'une conversation est mise en pause.",hitlApproverUserIds:"ID des utilisateurs approbateurs",hitlApproverUserIdsHint:"ID d'utilisateurs Slack séparés par des virgules, autorisés à approuver via les boutons. Sans cette liste, les boutons ne sont pas affichés (échec par fermeture)."},ce={loadingApprovalDetails:"Chargement des détails d’approbation…",pendingCount:"{{count}} en attente d'approbation",approvalDetailsError:"Impossible de charger ce que ferait cette requête, elle ne peut donc pas être approuvée ici. La rejeter reste sans risque.",awaitingHuman:"En attente humaine",awaitingApproval:"En attente d'approbation",approve:"Approuver",reject:"Rejeter",cancel:"Annuler",approved:"Approuvé",rejected:"Rejeté",cancelled:"Annulé",pending:"en attente",emptyQueue:"Aucune approbation en attente",emptyQueueDescription:"Toutes les conversations se déroulent — aucune intervention humaine nécessaire.",surface:"Surface",regular:"Conversation",group:"Groupe",pauseReason:"Raison",pausedAt:"En pause",timeoutPolicy:"Délai",timeRemaining:"Restant",overdue:"En retard",phase:"Phase",granularity:"Granularité",taskApprovals:"Approbations de tâches",approveAll:"Tout approuver",note:"Ajouter une note (optionnel)",notePlaceholder:"Ajouter une note pour la décision...",discussionCancelled:"Discussion annulée",cancelDiscussion:"Annuler la discussion",rejectAll:"Tout rejeter",timeoutWaitIndefinitely:"Attendre indéfiniment",timeoutAutoApprove:"Approbation auto",timeoutAutoReject:"Rejet auto",timeoutAbort:"Abandonner",granularityPhase:"Phase",granularityTask:"Tâche",rejectionFail:"Faire échouer la tâche",rejectionRetry:"Réessayer la tâche",groupsTruncated:"Il existe plus d'approbations de groupe que celles affichées ici.",groupsLoadError:"Impossible de charger les approbations de groupe.",toolApprovalRequired:"Approbation d'outil requise",toolCallsAwaiting:"Appels d'outils en attente d'approbation",executedUngated:"Déjà exécuté (non contrôlé)",outcomeUnknown:"Une approbation précédente a été interrompue en cours d'exécution — son effet est inconnu ; vérifiez-le en externe avant de réessayer.",outcomeUnknownShort:"résultat inconnu",toolApprovalHint:"Approuver applique vos choix par appel (les appels que vous n'avez pas modifiés sont approuvés). Rejeter rejette l'ensemble du lot.",toolApprovalHintExplicit:"Chaque appel doit être approuvé ou rejeté individuellement avant de pouvoir approuver le lot. Rejeter rejette l'ensemble du lot.",explicitReviewMissing:"Examinez chaque appel ci-dessus avant d'approuver.",redactionCaveat:"Les arguments affichés ci-dessous sont expurgés — une valeur secrète apparaît comme « », pas omise.",gateReason:"Motif correspondant",argsTruncated:"arguments tronqués",amendArguments:"Modifier les arguments (facultatif)",amendPlaceholder:`Objet JSON de remplacement complet, p. ex. {"to":"ops@acme.com"}. Laissez vide pour conserver l'original.`,amendTruncated:"Impossible de modifier un appel dont les arguments ont été tronqués — approuvez-le ou rejetez-le tel quel.",amendInvalidJson:"Les arguments modifiés doivent être un objet JSON valide.",amendTooLarge:"Les arguments modifiés sont trop volumineux.",review:"Examiner",tool:"Outil",scopeAll:"Affichage de toutes les approbations en attente dans le système.",scopeOwn:"Affichage des approbations en attente pour vos conversations.",chatPaused:"Cette conversation est en attente d'approbation humaine.",noProgressWaitForHuman:"Attendre un humain",noProgressAutoReject:"Rejet automatique",noProgressAbort:"Interrompre",confirmApproveTitle:"Approuver la demande ?",confirmApproveDescription:"Approuver et reprendre cette conversation ?",confirmApproveToolTitle:"Approuver l'exécution de l'outil ?",confirmApproveToolDescription:"L'approbation exécutera : {{toolNames}}. Cela effectue des actions réelles et ne peut pas être annulé.",confirmRejectTitle:"Rejeter la demande ?",confirmRejectDescription:"Rejeter cette demande ? La conversation ne se poursuivra pas.",confirmCancelTitle:"Annuler la conversation ?",confirmCancelDescription:"Annuler cette conversation ? Tout travail en cours sera interrompu.",confirmCancelButton:"Annuler la conversation",confirmCancelGroupTitle:"Annuler la discussion ?",confirmCancelGroupDescription:"Annuler cette discussion ? Tout travail en cours sera interrompu.",confirmCancelGroupButton:"Annuler la discussion",confirmDismiss:"Retour",approvalBlockedHeading:"Ceci ne peut pas être approuvé ici",confirmRejectToolTitle:"Rejeter l'exécution de l'outil ?",confirmRejectToolDescription:"Rien ne sera exécuté. La conversation se poursuit et l'agent répond sans {{toolNames}}.",humanTurn:"Tour du membre",humanTurnReason:"En attente de la prise de parole de {{member}}",humanTurnMemberFallback:"un membre",decidedProgress:"{{decided}} sur {{total}} décidés"},de={deploying:"Déploiement de l'agent…",error:"Une erreur est survenue",newConversation:"Nouvelle conversation",ready:"Prêt — saisissez un message pour tester",retry:"Réessayer",saving:"Enregistrement des modifications…",starting:"Démarrage de la conversation…",timeout:"Délai de déploiement dépassé",title:"Chat de test",preparing:"Préparation…"},pe={auditTrail:"Journal d'audit",checking:"Vérification…",coordConnected:"Coordinateur connecté",coordDisconnected:"Coordinateur déconnecté",coordUnknown:"Coordinateur —",createGroup:"Créer un groupe",noConversations:"Aucune conversation pour l'instant",offline:"Hors ligne",online:"En ligne",platform:"Plateforme",platformHealth:"État de la plateforme",recentConversations:"Conversations récentes",secretVault:"Coffre-fort des secrets",vaultDown:"Vault indisponible",vaultUp:"Vault prêt",viewLogs:"Voir les journaux"},me={retry:"Réessayer",title:"Une erreur est survenue"},ge={auditPseudonymized:"Audit pseudonymisé",checkingStatus:"Vérification...",confirmDelete:"Oui, supprimer toutes les données",confirmDesc:`Cela supprimera définitivement TOUTES les données de l'utilisateur "{{userId}}". Cette action est irréversible.`,confirmTitle:"Confirmer la suppression des données",conversationsDeleted:"Conversations supprimées",delete:"Supprimer toutes les données",deleteSuccess:"Données utilisateur supprimées avec succès",deleting:"Suppression...",enterUserIdFirst:"Saisissez un ID utilisateur ci-dessus pour vérifier le statut",export:"Exporter les données",exportSuccess:"Données utilisateur exportées avec succès",exporting:"Exportation...",legalDesc:"L'export de données (Art. 15/20) fournit un fichier JSON contenant toutes les données stockées d'un utilisateur. La suppression (Art. 17) retire définitivement tous les souvenirs et données de conversation, pseudonymise les entrées d'audit et est irréversible.",legalNotice:"Avis de protection des données",liftRestriction:"Lever la restriction",liftingRestriction:"Levée...",logsPseudonymized:"Journaux pseudonymisés",memoriesDeleted:"Souvenirs supprimés",restrictProcessing:"Restreindre le traitement",restricting:"Restriction...",restrictionApplied:"Traitement restreint pour l'utilisateur",restrictionDesc:"Restreindre le traitement lorsqu'un utilisateur conteste l'exactitude des données ou s'oppose au traitement. Pendant la restriction, les données de l'utilisateur sont conservées mais aucune nouvelle conversation ne peut être traitée. Cette action est réversible.",restrictionLifted:"Restriction de traitement levée",restrictionTitle:"Restriction de traitement (Art. 18)",resultsTitle:"Effacement terminé",statusActive:"Traitement actif",statusUnknown:"Statut indisponible",statusRestricted:"Traitement restreint",subtitle:"Gestion des données utilisateur conforme au RGPD — effacement (Art. 17), portabilité (Art. 15/20) et restriction du traitement (Art. 18)",title:"Confidentialité et conformité",userId:"ID utilisateur",userIdPlaceholder:"Saisir l'ID utilisateur...",userLookup:"Recherche d'utilisateur"},ve={message:"Mode démo — Affichage de données d'exemple. Connectez un backend EDDI pour des données réelles."},fe={confirmPurgeAll:"Supprimer définitivement TOUTES les {{count}} ressources orphelines ? Le serveur purge tout — votre sélection n'est pas appliquée. Action irréversible.",deleteSelected:"Supprimer {{count}} sélectionné(s)",description:"Rechercher et nettoyer les ressources non référencées par un agent ou un package.",deselectAll:"Tout désélectionner",includeDeleted:"Inclure les suppressions logiques",lastScanned:"Dernière analyse",noOrphans:"Aucun orphelin trouvé",purge:"Tout purger",purgeSuccess:"{{count}} orphelins supprimés",runScan:"Lancer l'analyse",scan:"Analyser",scanPromptDesc:"Trouvez les configurations d'extension (règles, appels API, LLM, sorties) non référencées par un workflow ou un agent. Nettoyez les ressources inutilisées pour garder votre plateforme en ordre.",scanPromptTitle:"Analyser votre plateforme",scanning:"Analyse des ressources…",selectAll:"Tout sélectionner",softDeleted:"Supprimé",title:"Détection des orphelins",found_many:"{{count}} orphelins trouvés",found_one:"{{count}} orphelin trouvé",found_other:"{{count}} orphelins trouvés"},he={apiCallsMinute:"Appels API / minute",configuration:"Configuration",conversationsToday:"Conversations aujourd'hui",description:"Configurez les limites de débit, les plafonds d'usage et les budgets de coût par locataire.",disable:"Désactiver",disabled:"Désactivé",enable:"Activer",enabled:"Activé",enforcementOff:"L'application est désactivée.",enforcementOffHint:"Les quotas ne sont pas appliqués. Activez l'application et enregistrez pour commencer à appliquer les limites.",limitHint:"-1 = illimité",liveUsage:"Usage en direct",maxAgentsPerTenant:"Agents max. / locataire",maxApiCallsPerMinute:"Appels API max. / minute",maxConversationsPerDay:"Conversations max. / jour",maxMonthlyCostUsd:"Coût mensuel max. (USD)",monthlyCost:"Coût mensuel",resetConfirmDesc:`Met immédiatement à zéro tous les compteurs d'usage (conversations, appels API, coût mensuel) pour le locataire "default". Cette action est irréversible.`,resetConfirmTitle:"Réinitialiser les compteurs d'usage ?",resetCounters:"Réinitialiser les compteurs",resetSuccess:"Compteurs d'usage réinitialisés",saveSuccess:"Quota enregistré",tenantId:"ID du locataire",title:"Quotas de locataire"},be={clearVault:"Effacer la référence vault",createNew:"Créer un nouveau secret",emptyVault:"Aucun secret stocké pour l'instant",filterPlaceholder:"Rechercher des clés du vault…",keyNotFound:"Cette clé est introuvable dans le vault",loading:"Chargement des clés…",noMatch:'Aucune clé ne correspond à "{{filter}}"',pickFromVault:"Choisir dans le vault",placeholder:"Clé API ou ${vault:key-name}",vaultDown:"Le vault n'est pas configuré — configurez un fournisseur de secrets dans le backend EDDI"},Ae={category:"Catégorie",content:"Contenu du prompt",contentLabel:"Contenu de l'extrait",contentPlaceholder:"Vous devez être prudent et attentif dans vos réponses...",description:"Description",descriptionPlaceholder:"Ce que fait cet extrait",identity:"Identité",name:"Nom de l'extrait",namePlaceholder:"ex. cautious_mode",noTags:"Aucune étiquette",tagPlaceholder:"ex. safety, production",tags:"Étiquettes",templateEnabled:"Activer la résolution de modèle",templateEnabledHint:"Lorsqu'elle est désactivée, les marqueurs {{}} du contenu sont traités comme du texte littéral (utile pour les exemples de code).",usageHint:"Utilisation :"},Ce={deployed:"Déployé",deploying:"Déploiement...",error:"Erreur",notDeployed:"Non déployé",checking:"Vérification…"},ye={subtitle:"Gérer les souvenirs, propriétés et liaisons de conversation par utilisateur",tabs:"Sections des données utilisateur",title:"Données utilisateur"},De={deleteKey:"Supprimer {{key}}",editKey:"Modifier {{key}}",tableTitle_many:"{{count}} variables définies",tableTitle_one:"{{count}} variable définie",tableTitle_other:"{{count}} variables définies",title:"Variables globales",description:"Valeurs de configuration à l'échelle du déploiement, disponibles dans tous les agents.",create:"Ajouter une variable",createTitle:"Ajouter une variable globale",editTitle:"Modifier la variable",keyLabel:"Clé",keyPlaceholder:"ex. default-model",keyError:"Lettres, chiffres, points, tirets bas et tirets uniquement.",valueLabel:"Valeur",valuePlaceholder:"ex. gpt-4.1",valueWarning:"Les valeurs sont visibles dans l'interface et les journaux. Utilisez le coffre-fort de secrets pour les données sensibles.",descriptionLabel:"Description (facultatif)",descriptionPlaceholder:"Description facultative…",exportableLabel:"Inclure dans les exports d'agents",save:"Enregistrer la variable",saveSuccess:"Variable « {{key}} » enregistrée",deleteSuccess:"Variable « {{key}} » supprimée",confirmDeleteTitle:"Supprimer la variable",confirmDeleteMessage:"Voulez-vous vraiment supprimer « {{key}} » ? Les agents utilisant ${vars:{{key}}} verront des références non résolues.",empty:"Aucune variable globale définie",emptyHint:"Cliquez sur « Ajouter une variable » pour créer votre première valeur de configuration à l'échelle du déploiement.",searchPlaceholder:"Filtrer les variables…",colKey:"Clé",colValue:"Valeur",colDescription:"Description",colExportable:"Export",colReference:"Référence",colActions:"Actions",exportYes:"Incluse dans les exports",exportNo:"Exclue des exports",copyVars:"Copier la référence ${vars:…}",refCopied:"Copié : {{ref}}",infoLine1:"Utilisez {{vars.}} dans les prompts système ou ${vars:} n'importe où dans les configurations d'agents.",infoLine2:"Les modifications prennent effet sous 2 minutes (TTL du cache). Pour les valeurs sensibles, utilisez plutôt le coffre-fort de secrets."},Te={endpoints:"endpoints",endpointsTotal:"endpoints au total",groupsSelected:"groupes sélectionnés",importOpenApi:"Importer depuis OpenAPI",importSelected:"Importer les groupes sélectionnés",importing:"Importation…",selectGroups:"Sélectionnez les groupes d'API à importer comme extensions d'appel API distinctes"},xe=JSON.parse(`{"board":{"continuePlaceholder":"Poursuivre cette discussion…","inputDisabledClosed":"Cette discussion est fermée","newDiscussion":"Nouvelle discussion","noResponseGenerated":"Aucune réponse générée","awaitingApprovalHint":"Cette discussion est en pause dans l'attente d'une approbation humaine.","reviewInManager":"L'examiner","askMore":"Interroger {{name}} davantage →","askYourBoard":"Interrogez votre task force…","attachFile":"Joindre un fichier","backToLive":"Retour à la discussion en direct","chatOneOnOne":"Discussion en tête-à-tête","close":"Fermer","copied":"Copié !","copyResponse":"Copier la réponse","details":"Détails","emptyDescription":"Posez une question et votre task force en discutera.","emptyTitle":"Prêt pour la discussion","error":"Une erreur est survenue","fileTooLarge":"Le fichier ne doit pas dépasser 10 Mo","fileTypeNotAllowed":"Ce type de fichier n'est pas pris en charge","hideConfig":"Masquer le panneau de détails","live":"En direct","liveNow":"En direct","loadingResponse":"Chargement de la réponse","members":"Équipe","membersPanel":"Panneau d'équipe","moderator":"Modérateur","noMembers":"Aucun membre d'équipe","noSessions":"Aucune session pour l'instant","phase":"Phase","pin":"Épingler la réponse","removeAttachment":"Retirer la pièce jointe","running":"En cours","runningHint":"Cette discussion est toujours en cours — les nouvelles réponses apparaissent automatiquement.","send":"Envoyer","sessions":"Sessions","sessionsPanel":"Panneau des sessions","skipped":"{{name}} — ignoré","startingDescription":"Votre task force y travaille — les réponses apparaissent ici au fur et à mesure.","startingTitle":"Discussion en cours","stillDiscussing":"La task force discute encore…","stop":"Arrêter","synthesis":"Synthèse","synthesisResult":"Résultat de la synthèse","title":"Task force","toggleConfig":"Afficher/masquer le panneau de détails","unpin":"Détacher la réponse","untitled":"Sans titre","viewSessions":"Voir les sessions passées"},"thread":{"fileTooLarge":"Le fichier doit faire moins de 20 Mo","fileTypeNotAllowed":"Ce type de fichier n'est pas pris en charge","attachmentLimit":"Maximum {{max}} pièces jointes par message","notForwarded":"Fichier stocké mais trop volumineux pour le modèle","uploadFailed":"Échec du téléchargement : {{error}}","noResponse":"Pas de réponse","attachFile":"Joindre un fichier","emptySubtitle":"Envoyez un message pour commencer à discuter avec {{name}}.","emptyTitle":"Discussion avec {{name}}","followUp":"Suite à votre réponse…","fromSession":"Depuis la session {{boardName}}","placeholder":"Saisissez un message…","questionLabel":"Question","removeAttachment":"Retirer la pièce jointe","responseLabel":"Réponse","send":"Envoyer","sendError":"Désolé, une erreur s'est produite. Veuillez réessayer.","startingConversation":"Démarrage de la conversation…","toggleContext":"Afficher/masquer le contexte","placeholderNamed":"Message à {{name}}…"},"chat":{"agentDetails":"Détails de l agent","selectToView":"Sélectionnez un agent pour voir les détails","hideDetails":"Masquer les détails","editAgent":"Modifier l agent","auditLogs":"Journaux d audit","openStudio":"Ouvrir dans le Manager","triggers":"Voir les déclencheurs","starterSelected":"Prompt ajouté à la zone de texte","title":"Discussion","hideAgentDetails":"Masquer les détails de l'agent","showAgentDetails":"Afficher les détails de l'agent"},"agentEditor":{"capabilities":"Capacités","workflows":"Workflows","features":"Fonctionnalités & Sécurité","a2aEnabled":"Agent à Agent","memoryTools":"Outils de mémoire","signedMessages":"Messages signés","strictMemory":"Mémoire stricte","hitlMode":"Mode d approbation","llmConfig":"Modèle & Moteur LLM","provider":"Fournisseur","mode":"Mode d exécution","personaPrompt":"Prompt système persona","starters":"Amorceurs de conversation","channels":"Connecteurs de canaux","temperature":"Température","contextWindow":"Limite de contexte","activeTools":"Outils actifs","noLlm":"Aucun LLM configuré","noTools":"Aucun configuré","add":"Ajouter","addCapability":"Ajouter une capacité","cancel":"Annuler","close":"Fermer","confidence":"Confiance","confidenceHigh":"Élevée","confidenceLow":"Faible","confidenceMedium":"Moyenne","description":"Description","descriptionPlaceholder":"Décrivez l'expertise de cet agent…","discardChanges":"Vous avez des modifications non enregistrées. Les abandonner ?","loadError":"Échec du chargement des données de l'agent.","noCapabilities":"Aucune capacité définie.","removeCapability":"Retirer la capacité","retry":"Réessayer","save":"Enregistrer les modifications","saveError":"Échec de l'enregistrement des modifications","saveSuccess":"Agent mis à jour avec succès","settings":"Paramètres","skill":"Compétence","skillPlaceholder":"ex. synthèse","systemPrompt":"Prompt système","systemPromptPlaceholder":"Instructions définissant le comportement, la personnalité et l'expertise de cet agent…","title":"Modifier l'agent"},"settings":{"hitlApprovalPointsNote":"Ces paramètres définissent le comportement d'une approbation. Les points d'une discussion qui en requièrent une se configurent par phase dans le Manager.","hitlOpenManager":"Définir les points d'approbation","deliberation":"Qualité de la délibération","deliberationDesc":"Consigner les avis minoritaires et laisser les membres créer le travail découvert en cours de discussion","recordDissents":"Consigner un avis minoritaire","recordDissentsDesc":"Après chaque synthèse, chaque membre qui ne l'a pas rédigée dispose d'un tour bref pour dire où il reste en désaccord. Coûte un appel supplémentaire par membre.","agentFiledTasks":"Laisser les membres créer leurs propres tâches","agentFiledTasksDesc":"Le travail qu'un agent découvre en cours de discussion devient une vraie tâche reprise par la prochaine vague d'exécution. Désactivé, les outils n'existent tout simplement pas pour ce groupe.","maxTasksPerDiscussion":"Tâches créées max. / discussion","maxTasksPerDiscussionHelp":"Ne compte que les tâches créées par les agents, afin qu'un grand backlog planifié ne l'épuise pas.","maxTasksPerTurn":"Tâches créées max. / tour","maxTasksPerTurnHelp":"Limite un tour qui s'emballe ; le plafond par discussion limite la dérive lente.","maxCost":"Plafond de coût (USD)","maxCostUnlimited":"Aucune limite","maxCostHelp":"Laissez vide pour aucune limite. Un tour déjà en cours peut encore dépasser légèrement le plafond.","onCostExceeded":"Lorsque le plafond est atteint","costSynthesize":"Synthétiser maintenant — passer directement à la conclusion","costAbort":"Interrompre — faire échouer la discussion immédiatement","costCeilingInvalid":"Un plafond de coût doit être supérieur à 0. Videz le champ pour aucune limite.","maxDelegationDepth":"Profondeur de délégation max.","maxDelegationDepthHelp":"A délègue à B qui délègue à C : profondeur 2. Le saut qui dépasserait cette valeur est refusé — c'est ce qui brise un cycle de délégation.","delegationTimeout":"Délai de délégation (secondes)","delegationTimeoutHelp":"Durée d'attente d'un agent délégant vis-à-vis de son délégué. Augmentez-la si le délégué exécute des outils ou une discussion imbriquée.","allowedDelegationTargets":"Liste de délégation autorisée","allowedDelegationTargetsHint":"N'importe quel agent déployé","allowedDelegationTargetsHelp":"Identifiants d'agents séparés par des virgules. Laissez vide pour autoriser tout agent déployé.","moderatorlessWarning":"Réservé à un modérateur que cette équipe n'a pas : {{phases}}. Le premier membre par ordre de parole prendra le relais.","memberLimit":"Une équipe peut compter au plus {{max}} membres","explicitPhasesNote":"Cette équipe définit ses phases explicitement ({{phases}}) : elles s'exécutent telles quelles. Le framework et le nombre de tours ci-dessus ne modifient plus le déroulé.","explicitPhasesEdit":"Modifier les phases","addMemberTitle":"Ajouter un membre d'équipe","selectAgent":"Agent","pickAgent":"Rechercher ou sélectionner un agent…","displayName":"Nom d'affichage","displayNameHint":"p. ex. Analyste","role":"Rôle","roleHint":"p. ex. Relecteur","addMember":"Ajouter un membre","nameRequired":"Le nom du groupe de travail est obligatoire","saveSuccess":"Paramètres du groupe de travail enregistrés","saveError":"Échec de l'enregistrement des paramètres","deleteAllSuccess":"Groupe de travail et tous les agents supprimés","deleteError":"Échec de la suppression du groupe de travail","deleteSuccess":"Groupe de travail supprimé","duplicateMember":"Cet agent est déjà membre","loadError":"Échec du chargement des paramètres","backToBoard":"Retour au groupe de travail","untitled":"Groupe de travail sans titre","subtitle":"Configurez les paramètres et l'équipe de votre groupe de travail","general":"Paramètres généraux","generalDesc":"Configuration de base de votre groupe de travail","boardName":"Nom du groupe de travail","boardNameHint":"Saisir le nom du groupe de travail…","description":"Description","descriptionHint":"De quoi traite ce groupe de travail ?","discussionStyle":"Cadre de collaboration","maxRounds":"Tours max.","moderator":"Modérateur","noModerator":"Aucun","team":"Équipe","teamDesc":"Gérez les agents qui participent à votre groupe de travail","roleOptional":"Optionnel","typeAgent":"Agent","typeModerator":"Modérateur","removeMember":"Retirer le membre","minMembers":"2 membres minimum requis","protocol":"Protocole et résilience","protocolDesc":"Délais, tentatives et gestion des échecs pour la communication entre agents","agentTimeout":"Délai d'expiration de l'agent (secondes)","maxRetries":"Tentatives max.","onAgentFailure":"En cas d'échec de l'agent","failureSkip":"Ignorer — continuer sans cet agent","failureRetry":"Réessayer — retenter avec l'agent","failureAbort":"Abandonner — arrêter toute la discussion","onUnavailable":"Si un membre est indisponible","unavailableSkip":"Ignorer — poursuivre sans lui","unavailableFail":"Échouer — interrompre la discussion","maxTurns":"Tours max. (0 = illimité)","hitl":"Supervision humaine","hitlDesc":"Définissez quand et comment les humains examinent les décisions de l'IA","hitlGranularity":"Granularité de l'approbation","granularityPhase":"Par phase — examen après chaque phase de discussion","granularityTask":"Par tâche — examen de chaque tâche individuelle","hitlTimeout":"Délai d'approbation","hitlTimeoutHint":"p. ex. PT15M (15 min), PT1H (1 heure)","hitlTimeoutHelp":"Durée ISO-8601. Laisser vide pour aucun délai.","hitlTimeoutPolicy":"En cas d'expiration","timeoutWait":"Attendre indéfiniment","timeoutAutoApprove":"Approbation auto","timeoutAutoReject":"Rejet auto","timeoutAbort":"Abandonner la discussion","hitlRejection":"En cas de rejet","rejectionFail":"Échouer — arrêter la tâche","rejectionRetry":"Réessayer — demander à l'agent de réviser","dynamic":"Agents dynamiques","dynamicDesc":"Autoriser les agents à recruter, créer ou déléguer à d'autres agents pendant les discussions","dynamicEnable":"Activer les agents dynamiques","dynamicEnableDesc":"Autoriser les agents à recruter, créer ou déléguer à d'autres agents","allowCreation":"Autoriser la création","allowCreationDesc":"Les agents peuvent créer de nouveaux agents à la demande","allowRecruitment":"Autoriser le recrutement","allowRecruitmentDesc":"Les agents peuvent recruter des agents déjà déployés","allowDelegation":"Autoriser la délégation","allowDelegationDesc":"Les agents peuvent déléguer des sous-tâches à d'autres agents","maxCreated":"Créations max.","maxRecruited":"Recrutements max.","maxDelegations":"Délégations max. / tâche","inheritModel":"Hériter du modèle parent","inheritModelDesc":"Les agents créés utilisent le modèle LLM du parent","lifecycle":"Politique de cycle de vie","lifecycleEphemeral":"Éphémère — supprimé après la discussion","lifecycleKeep":"Maintenir déployé — persiste après la discussion","lifecycleUndeploy":"Retirer uniquement — arrêté mais non supprimé","lifecycleAgentDecides":"L'agent décide — l'agent choisit son propre sort","tasks":"Tâches préconfigurées","tasksDesc":"Définissez les tâches à l'avance pour ignorer la phase PLAN et laisser les agents exécuter immédiatement","taskSubject":"Sujet","taskSubjectHint":"Que faut-il faire ?","taskDescription":"Description","taskDescHint":"Instructions détaillées pour cette tâche…","taskAssignRole":"Attribuer au rôle","taskPriority":"Priorité","removeTask":"Retirer la tâche","addTask":"Ajouter une tâche","dangerZone":"Zone de danger","dangerDesc":"Actions irréversibles — procédez avec prudence","deleteBoard":"Dissoudre le groupe de travail","deleteBoardDesc":"Supprime cette configuration de groupe de travail. Les agents sont conservés.","deleteBoardAll":"Dissoudre le groupe de travail + tous les agents","deleteBoardAllDesc":"Supprime définitivement ce groupe de travail et tous ses agents membres.","unsavedChanges":"Vous avez des modifications non enregistrées","templateSaved":"Enregistré comme modèle","saveAsTemplate":"Enregistrer comme modèle","saving":"Enregistrement…","saveChanges":"Enregistrer les modifications","deleteAllTitle":"Dissoudre le groupe de travail et tous les agents ?","deleteTitle":"Dissoudre le groupe de travail ?","deleteAllConfirm":"Cette action dissoudra définitivement ce groupe de travail et supprimera tous ses agents membres. Elle est irréversible.","deleteConfirm":"Cette action dissoudra définitivement cette configuration de groupe de travail. Les agents membres ne seront pas affectés.","title":"Paramètres"},"nav":{"dashboard":"Tableau de bord","templates":"Modèles"},"advisor":{"avatarLabel":"Avatar de {{name}}"},"analytics":{"agentPerformance":"Performance des agents","avgLength":"Longueur moy.","avgLengthChars":"{{count}} caractères","chatWithAgent":"Discuter avec l'agent","compareAgent":"Comparer avec…","contributionBreakdown":"Répartition des contributions","contributions":"Contributions","editAgent":"Modifier l'agent","errorRate":"Taux d'erreur","errors":"Erreurs","sessions":"Sessions"},"back":"Retour","boardList":"Liste des task forces","boardsLabel":"Task forces","bottomNav":"Navigation inférieure","card":{"advisorCount":"{{count}} experts","delete":"Supprimer","duplicate":"Dupliquer","duplicated":"Task force dupliquée","history":"Historique","live":"En direct","moreActions":"Plus d'actions","noMembers":"Aucun expert","openSettings":"Ouvrir les paramètres","pin":"Épingler","settings":"Paramètres","unpin":"Détacher","untitled":"Task force sans titre"},"closeSidebar":"Fermer la barre latérale","comparison":{"avgResponse":"Réponse moy.","close":"Fermer","contributions":"Contributions","errorRate":"Taux d'erreur","evenlyMatched":"Les deux agents sont à égalité","leadsIn":"en tête sur {{count}} des 5 indicateurs","sessions":"Sessions","title":"Comparaison d'agents","totalContent":"Contenu total"},"dashboard":{"assembleTaskForce":"Constituer une task force","cancel":"Annuler","deleteConfirm":"Voulez-vous vraiment dissoudre cette task force ? Cette action est irréversible.","deletedCount":"{{count}} task forces supprimées","deleteError":"Échec de la suppression de la task force","deletePartialFail":"{{success}} supprimées, {{fail}} en échec","deleteSelected":"Supprimer","deleteSuccess":"Task force supprimée","deleteWorkforce":"Dissoudre la task force","deselect":"Désélectionner","duplicateError":"Échec de la duplication de la task force","gridView":"Vue en grille","listView":"Vue en liste","loadError":"Impossible de charger votre espace de travail. Veuillez réessayer.","pinned":"Épinglée","retry":"Réessayer","select":"Sélectionner","selected":"{{count}} sélectionnées","selectItem":"Sélectionner","subtitle":"Groupes d'agents collaboratifs résolvant des défis complexes.","taskForcesLabel":"Task forces actives","title":"Task forces actives","viewToggle":"Mode d'affichage"},"export":{"clipboard":"Copier dans le presse-papiers","copied":"Copié dans le presse-papiers","copyFailed":"Échec de la copie dans le presse-papiers","downloadedJson":"Téléchargé au format JSON","downloadedMd":"Téléchargé au format Markdown","json":"Exporter en JSON","markdown":"Exporter en Markdown","title":"Exporter la discussion"},"history":{"backToBoard":"Retour à la task force","backToList":"Retour à la liste","cancel":"Annuler","close":"Fermer","confirmDelete":"Supprimer","conversationList":"Liste des conversations","delete":"Supprimer la conversation","deleteDescription":"Voulez-vous vraiment supprimer cette conversation ? Cette action est irréversible.","deleteTitle":"Supprimer la conversation","emptyTranscript":"Aucune entrée de transcription pour l'instant","entryCount":"{{count}} entrées","error":"Erreur","export":"Exporter","finalAnswer":"Réponse finale synthétisée","loadError":"Échec du chargement de la conversation","loadMore":"Charger plus","noContent":"Aucun contenu","noConversations":"Aucune conversation pour l'instant","noResults":"Aucune conversation ne correspond à votre recherche","notFound":"Conversation introuvable","phase":"Phase","searchPlaceholder":"Rechercher des conversations…","selectConversation":"Sélectionnez une conversation à consulter","selectHint":"Choisissez une conversation dans la liste","skipped":"{{name}} — ignoré","synthesis":"Synthèse","title":"Historique des conversations","transcript":"Transcription de la conversation","tryDifferent":"Essayez un autre terme de recherche","untitled":"Conversation sans titre","loadListError":"Échec du chargement des conversations"},"insights":"Analyses","memberCount":"{{count}} membres","newBoard":"Constituer une task force","onboarding":{"advisorSlots":"{{count}} postes de conseillers","agentsReady":"{{count}} prêts","assembleNow":"Constituez votre première task force","customDesc":"Définissez votre propre équipe et vos propres règles","customFromScratch":"Partir de zéro","deployAgent":"Déployer un agent","deployFirst":"Déployez votre premier agent IA pour commencer","deployFirst2":"Déployer le premier →","deployFirstDesc":"Les agents sont les experts qui animent vos task forces. Créez-en un pour commencer.","getStarted":"Commencer","howItWorks":"Comment ça marche","pickTemplate":"Choisissez un modèle pour commencer","pickTemplateDesc":"Chaque modèle configure un style de discussion, des rôles et des règles — vous n'avez qu'à assigner les agents.","step1Desc":"Créez des experts IA dotés de compétences, de connaissances et d'une personnalité uniques.","step1Title":"Déployer des agents","step2Desc":"Choisissez un modèle, assignez des agents aux rôles et sélectionnez un style de discussion.","step2Title":"Constituer une task force","step3Desc":"Posez une question et observez vos agents débattre, critiquer et synthétiser une réponse.","step3Title":"Demander et observer","subtitle":"Réunissez des agents IA spécialisés en équipes collaboratives qui débattent, analysent et résolvent ensemble des défis complexes.","welcome":"Bienvenue dans l'Effectif"},"openMenu":"Ouvrir le menu","shortcuts":{"closePanel":"Fermer le panneau / la boîte de dialogue","fromDashboard":"Depuis le tableau de bord","newBoard":"Constituer une task force","showHelp":"Afficher les raccourcis clavier","title":"Raccourcis clavier"},"sidebar":{"boards":"Navigation des tableaux"},"sidebarDrawer":"Navigation latérale","skipToContent":"Aller au contenu","tabHome":"Accueil","tabInsights":"Analyses","tabThreads":"Fils","templates":{"deleteConfirm":"Supprimer ce modèle ?","deleted":"Modèle supprimé"},"templatesEmpty":"Enregistrez une task force comme modèle pour la recréer rapidement plus tard.","themeDark":"Sombre","themeLight":"Clair","themeSystem":"Système","toggleSidebar":"Afficher/masquer la barre latérale","toggleTheme":"Changer de thème","untitled":"Sans titre","useTemplate":"Utiliser","wizard":{"addAdvisor":"Ajouter un conseiller","advisorCount":"{{count}} conseillers","advisorName":"Nom du conseiller","agentError":"Échec de la création de {{name}} : {{error}}","agentRequired":"Sélectionnez l'agent existant que ce conseiller doit utiliser.","alreadyCreated":"Créé","alreadyCreatedNote":"Déjà créé lors d'une tentative précédente — il sera réutilisé tel quel ; son invite et ses paramètres LLM ne peuvent plus être modifiés ici.","apiKey":"Clé API","apiKeyRequired":"{{provider}} nécessite une clé API. Ajoutez-en une ici ou dans les paramètres LLM par défaut ci-dessus.","back":"Retour","boardDescPlaceholder":"Décrivez brièvement l'objectif de ce comité consultatif…","boardDescription":"Description (facultatif)","boardName":"Nom de l'effectif","boardNamePlaceholder":"ex. Comité de stratégie produit","boardNameRequired":"Donnez un nom à cet effectif.","cancel":"Annuler","collapse":"Réduire","createNew":"Créer un conseiller","createWorkforce":"Créer l'effectif","creatingAgent":"Création…","creationFailed":"Échec de la création","creationFailedDesc":"Une erreur est survenue. Vous pouvez réessayer, la reprise se fera là où elle s'est arrêtée.","customTemplate":"Personnalisé","customTemplateDesc":"Partez de zéro avec votre propre configuration","error":"Échec","existing":"Existant","expand":"Développer","groupError":"Échec de la constitution de la task force : {{error}}","llmDefaults":"LLM pour les nouveaux conseillers","llmDefaultsDesc":"Utilisé par chaque conseiller créé ici, sauf s'il définit ses propres paramètres ci-dessous.","llmDefaultsKeyRequired":"Ajoutez une clé ici pour couvrir chaque conseiller qui n'en définit pas une lui-même.","model":"Modèle","modelPlaceholder":"ex. claude-sonnet-5","nameRequired":"Donnez un nom à ce conseiller.","new":"Nouveau","next":"Suivant","pending":"En attente…","personality":"Personnalité et expertise","personalityHint":"Obligatoire — transmis à l'agent comme invite système.","personalityPlaceholder":"Décrivez l'expertise, la perspective et le style de communication de ce conseiller…","promptRequired":"Une invite système est obligatoire. Décrivez l'expertise de ce conseiller et la façon dont il doit répondre.","provider":"Fournisseur LLM","ready":"Prêt","removeAdvisor":"Retirer le conseiller","role":"Rôle","selectAgent":"Sélectionner un agent","selectProvider":"Sélectionner un fournisseur…","settingUp":"Configuration de votre effectif…","settingUpBoard":"Constitution de la task force…","settingUpDesc":"Création des conseillers et configuration du tableau. Cela peut prendre un moment.","starterPrompt":"Vous êtes {{name}}, la voix {{role}} de cette équipe. Parlez de ce point de vue : apportez des contributions claires, bien argumentées et exploitables, nommez les risques et compromis que vous voyez, et concentrez-vous sur ce que vous connaissez le mieux.","starterPromptBare":"Vous êtes membre de cette équipe. Apportez des contributions claires, bien argumentées et exploitables, nommez les risques et compromis que vous voyez, et restez concentré.","starterPromptNoRole":"Vous êtes {{name}}, membre de cette équipe. Apportez des contributions claires, bien argumentées et exploitables, nommez les risques et compromis que vous voyez, et restez concentré.","starterPromptRoleOnly":"Vous êtes la voix {{role}} de cette équipe. Parlez de ce point de vue : apportez des contributions claires, bien argumentées et exploitables, nommez les risques et compromis que vous voyez, et concentrez-vous sur ce que vous connaissez le mieux.","stepIndicatorLabel":"Progression de l'assistant","stepReview":"Vérification","stepTeam":"Équipe","stepTemplate":"Modèle","success":"Task force constituée avec succès !","team":"Équipe","templates":"Modèles de discussion","tryAgain":"Réessayer","unnamed":"Sans nom","untitled":"Tableau sans titre","useDefault":"Valeur par défaut de l'effectif ({{value}})","useDefaultKey":"Clé par défaut de l'effectif","useExisting":"Utiliser un agent existant","useStarterPrompt":"Insérer une invite de départ","yourAdvisors":"Vos conseillers"},"workforce":"Effectif"}`),Se=JSON.parse(`{"title":"Opérateur de plateforme","subtitle":"Posez vos questions sur ce déploiement EDDI — il fait les recherches pour vous.","readOnlyChip":"Lecture seule","readWriteChip":"Lecture et écriture","configError":"Impossible de charger la configuration de l'opérateur","empty":{"title":"L'opérateur de plateforme est désactivé","description":"Activez-le pour discuter avec un agent capable d'inspecter vos agents, workflows, conversations, déploiements et journaux — et, avec votre approbation de chaque modification, de les piloter pour vous.","action":"Activer l'opérateur de plateforme"},"discovery":{"title":"Découvrez votre opérateur de plateforme","description":"Un assistant qui inspecte et pilote ce déploiement. Désactivé par défaut ; chaque modification attend votre approbation.","action":"Activer"},"activation":{"title":"Activer l'opérateur de plateforme","subtitle":"Choisissez le modèle qui fera fonctionner l'opérateur, vérifiez ses instructions et déployez.","modelStep":"Modèle","reviewStep":"Prompt et vérification","provider":"Fournisseur","model":"Modèle","baseUrl":"URL de base","apiKey":"Clé API du modèle","apiKeyHint":"La clé de votre fournisseur LLM. Il ne s'agit pas d'un identifiant EDDI.","apiKeyPlaceholder":"Collez votre clé API ou choisissez une clé du coffre","vaultDown":"Le coffre à secrets est indisponible, les clés ne peuvent donc pas y être stockées pour le moment. Une clé saisie ici est transmise au backend, qui la met au coffre s'il le peut.","environment":"Environnement","authMode":"Authentification de l'opérateur","authModeHint":"L'opérateur appelle votre API d'administration EDDI. Ce réglage détermine les identifiants portés par ces appels.","authNoneBlocked":"L'authentification est activée sur ce déploiement : les appels d'outils non authentifiés seraient rejetés. L'opérateur se déploierait correctement puis échouerait à chaque recherche. Choisissez plutôt « Votre identité ».","scope":{"label":"Capacité","default":"Par défaut","hint":"Ce que l'opérateur est autorisé à faire. Chaque écriture reste en attente de votre approbation — voir les règles de sécurité ci-dessous.","readOnly":{"label":"Lecture seule","description":"Peut inspecter et expliquer ce déploiement. Ne peut rien modifier."},"readWrite":{"label":"Lecture et écriture","description":"Peut aussi créer et modifier des agents et des groupes d'agents, déployer, annuler le déploiement, désactiver une planification incontrôlée et modifier le descripteur d'un agent — chacune de ces actions étant d'abord soumise à votre approbation."},"writeWarning":"L'activation vérifie la barrière d'approbation par rapport à la politique enregistrée avant de se terminer. Une écriture de test réelle et inoffensive s'exécute ensuite en arrière-plan — si elle s'exécute un jour sans pause d'approbation, l'opérateur est immédiatement supprimé."},"safetyPreamble":"Règles de sécurité (non modifiables)","safetyPreambleHint":"Toujours ajoutées en tête. Elles indiquent à l'opérateur de traiter tout ce que renvoient ses outils comme des données non fiables.","promptBody":"Instructions de l'opérateur","promptBodyHint":"Modifiez la façon dont l'opérateur se présente et travaille.","tools":"Outils qui lui seront confiés ({{toolCount}})","activate":"Activer et déployer","callerIdentityNote":"EDDI insère votre jeton au moment de l'appel. Il n'est jamais enregistré dans la conversation et n'est renvoyé qu'à ce déploiement.","rebuildWarning":"L'enregistrement crée un nouvel agent opérateur et supprime l'actuel. Votre conversation d'opérateur existante ne sera pas conservée.","environmentHint":"Où s'exécute l'agent opérateur lui-même. Il peut toujours lire n'importe quel environnement."},"authMode":{"none":{"label":"Aucun identifiant","description":"Les appels d'outils ne portent aucun en-tête Authorization. Ne fonctionne que si l'authentification est désactivée sur ce déploiement EDDI."},"caller-identity":{"label":"Votre identité","description":"Les appels d'outils s'exécutent en tant qu'utilisateur connecté, avec ses permissions et sa piste d'audit. Requis lorsque l'authentification est activée."}},"stage":{"idle":"","validating":"Vérification que ce déploiement expose les points de terminaison nécessaires…","provisioning":"Création de l'agent opérateur…","resolving-version":"Résolution de la version de l'agent…","saving":"Enregistrement de la configuration…","verifying-gate":"Vérification de la barrière d'approbation…","done":"Terminé","longWait1":"L'agent opérateur est en cours de création et de déploiement — c'est l'étape la plus longue…","longWait2":"Configuration des outils et de la barrière d'approbation sur le nouvel agent…","longWait3":"Toujours en cours — le déploiement peut prendre du temps sur une plateforme chargée…"},"status":{"title":"Opérateur","provider":"Fournisseur","environment":"Environnement","authMode":"S'authentifie en tant que","version":"Version","checking":"Vérification…","ready":"Déployé","inProgress":"Déploiement…","error":"Erreur de déploiement","notFound":"Non déployé","errorHelp":"Le déploiement de l'agent opérateur a échoué. Reconfigurez-le pour réessayer, ou consultez les journaux de la plateforme pour connaître l'erreur sous-jacente.","reconfigure":"Reconfigurer","deactivate":"Désactiver","reset":"Supprimer l'opérateur","deactivateConfirmTitle":"Désactiver l'opérateur de plateforme ?","deactivateConfirmBody":"L'opérateur est retiré du déploiement et cesse de répondre. Sa configuration est conservée, vous pourrez le réactiver plus tard.","resetConfirmTitle":"Supprimer l'opérateur de plateforme ?","resetConfirmBody":"L'agent opérateur et toutes les ressources créées pour lui sont définitivement supprimés, ainsi que sa configuration enregistrée. Cette action est irréversible.","connectionCheck":"Vérifier la connexion","gateChecking":"Vérification de la barrière…","gateUnknown":"Barrière non contrôlée","gateVerified":"Barrière vérifiée","gateNotVerified":"Barrière non vérifiée","gateUnverifiedHelp":"La barrière d'approbation n'a pas pu être vérifiée sur le document de cet agent."},"chat":{"empty":"Interrogez votre déploiement. L'opérateur fait les recherches et vous montre chaque appel qu'il effectue.","restoring":"Ouverture de la conversation…","placeholder":"Agents, conversations, déploiements, journaux…","pausedPlaceholder":"En attente d'une décision ci-dessus avant que l'opérateur ne puisse continuer…","readOnlyPlaceholder":"Cette conversation est terminée — démarrez-en une nouvelle pour continuer.","send":"Envoyer","stop":"Arrêter","newConversation":"Démarrer une nouvelle conversation","transcript":"Conversation avec l'opérateur","pauseCompactFallback":"L'opérateur a besoin de votre approbation pour continuer.","pauseCompactReview":"Examiner pour approuver →","resolving":"Exécution de l'étape approuvée — cela peut prendre un instant…"},"drawer":{"title":"Opérateur de plateforme","notActivated":"Activez-le pour discuter avec votre déploiement depuis n'importe où.","titleAwaiting":"Opérateur de plateforme — une décision vous attend","activate":"Configurer l'opérateur de plateforme"},"approval":{"reconstructedEndpoint":"{{method}} {{path}} (reconstruit)","verified":"vérifié","verifiedTitle":"Résolu à partir de la configuration réelle de l'appel API ; revérifié juste avant l'exécution — si la requête change avant cela, l'exécution est refusée.","previewOnly":"aperçu","previewOnlyTitle":"Cet appel exécute des étapes de préparation supplémentaires avant de s'exécuter ; il s'agit donc d'un aperçu au mieux — la requête réelle peut différer et n'est pas revérifiée avant l'exécution.","query":"Requête","headers":"En-têtes","bodyTruncated":"Le corps est affiché tronqué pour l'affichage — l'approbation couvre toujours la requête complète.","diffHeading":"Modifications par rapport à la version enregistrée {{version}}","diffLoading":"Chargement de la version enregistrée pour comparaison…","diffFailed":"Impossible de charger la version enregistrée pour comparaison — le document proposé complet figure ci-dessous.","diffForbidden":"La comparaison avec la version enregistrée nécessite un accès éditeur — le document proposé complet figure ci-dessous.","diffRedactionNote":"Les identifiants sont masqués dans la version proposée : ils apparaissent donc ici comme des modifications même s'ils sont inchangés.","diffStored":"Enregistré v{{version}}","diffProposed":"Proposé","showFullRequest":"Afficher le document proposé complet","hideFullRequest":"Masquer le document proposé complet","expandBody":"Développer","escalation":{"heading":"Cette requête accorde des capacités supplémentaires","dynamicAgentCreation":"Ce groupe peut créer de nouveaux agents pendant son exécution. Ces agents ne sont pas eux-mêmes soumis à approbation.","dynamicAgentRecruitment":"Ce groupe peut intégrer d'autres agents existants à ses discussions.","autoApproveOnTimeout":"Les approbations de cette ressource sont accordées automatiquement en cas d'expiration du délai, sans surveillance.","agentCreatedWithoutGate":"Cet agent est créé sans passerelle d'approbation. Chaque écriture qu'il effectuera par la suite s'exécutera sans supervision.","agentCreatedWithBroadEndpoints":"Cet agent est créé avec un accès en écriture à son API — non limité aux lectures.","agentCreatedWithExternalTools":"Cet agent est créé avec l'ensemble des outils qu'un serveur MCP externe propose. C'est ce serveur qui décide lesquels, et il peut les modifier par la suite.","unchecked":"Le corps était trop long pour être analysé à la recherche d'octrois de capacités — lisez-le en entier avant d'approuver.","inlineCredential":"Cette requête intègre ce qui ressemble à un identifiant en clair au lieu d'une référence \${vault:…}. Un secret écrit en dur est stocké en clair et ne peut pas être renouvelé depuis le coffre-fort — rejetez et demandez la référence du coffre-fort."},"blockedSelfTarget":"Un agent ne peut pas modifier sa propre définition, et cette requête vise l'agent de l'opérateur lui-même ({{agentId}}). Tant qu'elle est présente, l'ensemble du lot ne peut pas être approuvé — rejetez-la et effectuez cette modification depuis la page de cet agent.","blockedSelfConversation":"Un agent ne peut pas envoyer de message dans la conversation où il s'exécute, et cette requête vise celle-ci ({{agentId}}). Il inscrirait son propre texte comme si un humain l'avait dit. Tant qu'elle est présente, tout le lot ne peut pas être approuvé : rejetez-la.","blockedGateCarrying":"Cette requête écrit une configuration LLM qui définit sa propre barrière d'approbation (toolApprovals), ce qui remplacerait la barrière qui l'examine. L'approbation est indisponible pour tout le lot tant qu'elle est présente — rejetez, et modifiez la barrière depuis la page de l'agent.","blockedGateUnverifiable":"Cette requête écrit une configuration LLM dont le corps ne peut être lu intégralement — trop volumineux ou JSON invalide — ; on ne peut donc pas confirmer l'absence de remplacement de la barrière d'approbation. L'approbation est indisponible pour tout le lot tant qu'elle est présente — rejetez, et effectuez cette modification depuis la page de l'agent.","blockedGateUnpinned":"Cette requête écrit une configuration LLM mais n'est pas épinglée : ce qui s'exécute réellement peut différer de ce qui est affiché ici, et l'absence de remplacement de la barrière d'approbation ne peut être confirmée. L'approbation est indisponible pour tout le lot tant qu'elle est présente — rejetez, et effectuez cette modification depuis la page de l'agent.","blockedSelfStart":"L'opérateur ne peut pas se tester lui-même — démarrer une conversation avec son propre agent ({{agentId}}) réinjecterait sa sortie en entrée. L'approbation est indisponible pour tout le lot tant que cet appel est présent — rejetez et testez un autre agent."},"starters":{"whatsDeployed":"Qu'est-ce qui est déployé actuellement ?","recentConversations":"Montre-moi les conversations les plus récentes","healthCheck":"Y a-t-il un problème sur cette plateforme ?","diagnoseAgent":"Pourquoi le déploiement d'un de mes agents échoue-t-il ?"},"toast":{"activated":"Opérateur de plateforme activé","deactivated":"Opérateur de plateforme désactivé","reset":"Opérateur de plateforme supprimé","activatedButUnreachable":"Opérateur déployé, mais il n'a pas pu lire votre plateforme","activatedGateVerified":"Opérateur de plateforme activé — barrière d'approbation vérifiée. Les vérifications de connexion s'exécutent en arrière-plan.","activatedChecking":"Opérateur de plateforme activé. Les vérifications de connexion s'exécutent en arrière-plan.","writeProbeVerified":"Accès en écriture vérifié — une écriture réelle protégée a été mise en pause pour approbation.","writeProbeFailed":"La barrière d'approbation n'a pas tenu — l'opérateur a été supprimé.","writeProbeInconclusive":"Le test d'écriture en direct n'a pas été concluant."},"canary":{"genericFailure":"La vérification de connexion a échoué.","passed":"L'opérateur atteint bien votre plateforme.","recheck":"Vérifier à nouveau","title":"L'opérateur est déployé, mais n'a pas pu lire votre plateforme."},"paused":{"title":"L'opérateur de plateforme est en pause","description":"Il reste configuré — le réactiver redéploie le même agent. Rien n'a été supprimé.","action":"Réactiver"},"managedAgentBadge":"Opérateur","managedAgentHint":"Provisionné et géré par l'écran Opérateur de plateforme. Le modifier ou le supprimer ici cassera cet écran.","decisionLog":{"approved":"Vous avez approuvé cette requête","rejected":"Vous avez rejeté cette requête","rePaused":"De nouveau en pause — une autre décision est nécessaire","noReply":"Le tour s'est terminé sans réponse","executed":"Exécuté : {{calls}}","partial_one":"Approuvée — {{count}} appel rejeté","partial_other":"Approuvée — {{count}} appels rejetés","partial_many":"Approuvée — {{count}} appels rejetés"},"tabs":{"label":"Vues de l'opérateur","chat":"Discussion","history":"Historique"},"history":{"emptyTitle":"Aucune conversation passée","emptyDescription":"Les conversations avec l'opérateur apparaissent ici pour que vous puissiez les reprendre plus tard.","noOpeningMessage":"(pas encore de message)","stepCount_one":"{{count}} étape","stepCount_other":"{{count}} étapes","stepCount_many":"{{count}} étapes"}}`),Pe={addCadence:"Ajouter une cadence",addTask:"Ajouter une tâche",backToGroup:"Retour au groupe",backlogEmpty:"Aucune tâche en attente pour le moment.",backlogTitle:"Tâches en attente ({{count}})",cadenceAdded:"Cadence ajoutée",cadenceDeleted:"Cadence supprimée",cadenceRunning:"Une discussion déclenchée par la cadence est en cours.",cadencesEmpty:"Aucune cadence récurrente configurée pour le moment.",cadencesTitle:"{{count}} cadence(s)",confirmDeleteCadenceDesc:"Cela arrête ses exécutions planifiées. Les discussions déjà exécutées ne sont pas affectées.",confirmDeleteCadenceTitle:"Supprimer cette cadence ?",createdBy:"par {{who}}",cronLabel:"Expression cron",cronPlaceholder:"ex. 0 9 * * MON",discussions:"Discussions",failed:"Échec",inputTemplatePlaceholder:"Modèle d'invite pour chaque exécution (facultatif — sinon, une simple liste des tâches en attente est utilisée)",lastRun:"Dernière exécution",maxCostLabel:"Coût max / exécution ($, facultatif)",maxCostPlaceholder:"valeur par défaut du groupe",maxPerRunLabel:"Tâches max / exécution",member:"Membre",navLabel:"Espace de travail",never:"Jamais",perMemberStats:"Fiabilité par membre",priority:"Priorité",subtitle:"Une liste de tâches persistante et des cadences récurrentes que ce groupe exécute sans surveillance, selon un calendrier.",taskAdded:"Tâche ajoutée à la liste en attente",taskDescriptionPlaceholder:"Description (facultatif)",taskSubjectPlaceholder:"Objet de la tâche",tasksVerified:"Tâches vérifiées",timeZoneLabel:"Fuseau horaire",title:"Espace de travail de l'équipe permanente",totalCost:"Coût total",verified:"Vérifié",maxCostInvalid:"Le coût maximal par exécution doit être un nombre supérieur ou égal à 0.",cadenceSummary_many:"jusqu'à {{max}} tâches/exécution",cadenceSummary_one:"jusqu'à {{max}} tâche/exécution",cadenceSummary_other:"jusqu'à {{max}} tâches/exécution",inputTemplateTooLong:"Le modèle de prompt est limité à {{max}} caractères."},Ee={title:"Nouvelle équipe"},Le={title:"Mises à jour EDDI",description:"Vérifiez si une version plus récente d'EDDI est disponible. Rien n'est envoyé tant que vous ne le demandez pas.",installed:"Installée",githubRelease:"Version GitHub",dockerImage:"Image Docker",unknownVersion:"Inconnue",checkNow:"Vérifier maintenant",checking:"Vérification…",autoCheck:"Vérifier automatiquement à chaque chargement de page",autoCheckHint:"Effectue une vérification par rechargement du navigateur et affiche une bannière si une version plus récente existe.",privacyNote:"La vérification contacte uniquement api.github.com depuis votre navigateur. Aucune donnée de votre déploiement n'est transmise.",neverChecked:"Aucune vérification effectuée.",upToDate:"Vous utilisez la dernière version ({{version}}).",updateAvailable:"EDDI {{version}} est disponible",updateAvailableDetail:"Vous utilisez {{installed}}.",ahead:"Vous utilisez {{installed}}, plus récente que la dernière version publiée ({{version}}).",unknownInstalled:"La dernière version est {{version}}. La version installée n'a pas pu être déterminée, aucune comparaison n'est donc possible.",errorRateLimited:"La limite de requêtes non authentifiées de GitHub est atteinte. Réessayez plus tard ou ouvrez la page des versions.",errorBlockedByCsp:"La Content-Security-Policy de ce déploiement empêche le navigateur d'atteindre api.github.com, la vérification ne peut donc pas s'exécuter. Ajoutez api.github.com à la directive connect-src, ou utilisez le lien des versions ci-dessous.",errorUnreachable:"Impossible de joindre api.github.com. Vérifiez votre réseau ou votre proxy sortant.",errorFailed:"La vérification des mises à jour a échoué. Ouvrez la page des versions pour vérifier manuellement.",publishedOn:"Publiée le {{date}}",whatsNew:"Nouveautés de la version {{version}}",fullNotes:"Notes de version complètes sur GitHub",noNotes:"Cette version n'a pas de notes.",releaseNotes:"Notes de version",allReleases:"Toutes les versions",howToUpdate:"Comment mettre à jour",howToUpdateCli:"Avec la CLI eddi (créée par l'installateur) :",howToUpdateManual:"Sans la CLI, depuis votre répertoire d'installation (~/.eddi par défaut) :",howToUpdateNote:"Adaptez les options -f à votre configuration — ajoutez -f docker-compose.auth.yml si vous utilisez Keycloak."},ke={acrossGroups:"sur {{count}} task forces",actions:"Actions",activeExperts:"Experts actifs",activity:"Activité",agentLeaderboard:"Classement des agents",agentName:"Agent",allOutcomes:"Tous les résultats",allStyles:"Tous les styles",avgDuration:"Durée moy.",cancelCompare:"Annuler",clearAll:"Tout effacer",clearFilters:"Effacer les filtres",completionRate:"Taux d'achèvement",contributions:"Contributions",covered:"Couvert",createFirst:"Constituer une task force",daysAgo:"il y a {{count}} j",emptyDescription:"Lancez une discussion de task force pour voir les analyses ici.",emptyHaveGroups:"Vous avez {{count}} task forces mais aucune discussion. Lancez une discussion pour voir les analyses.",emptyTitle:"Aucune analyse pour l'instant",errorDescription:"Certaines données n'ont pas pu être récupérées. Veuillez réessayer.",errors:"Erreurs",errorTitle:"Impossible de charger les analyses",filteredOf:"{{filtered}} sur {{total}} au total",highConfidence:"Confiance élevée",hoursAgo:"il y a {{count}} h",justNow:"à l'instant",last30Days:"30 derniers jours",minutesAgo:"il y a {{count}} min",noAgents:"Aucune activité d'agent pour l'instant.",noDiscussions:"Aucune discussion pour l'instant.",noMatchingDiscussions:"Aucune discussion ne correspond aux filtres actifs.",noPhases:"Aucune donnée de phase disponible.",noResults:"Aucune discussion correspondante",noResultsHint:"Ajustez vos filtres ou effacez-les pour voir toutes les données.",noSkills:"Aucune capacité enregistrée. Définissez des compétences sur vos agents pour suivre la couverture.",noStyles:"Aucune donnée de style disponible.",outcomeChart:"Répartition des résultats : {{total}} au total",outcomes:"Résultats",participatedRecently:"ont participé à des discussions",perDiscussion:"par discussion",phaseChart:"Répartition des phases",phaseDistribution:"Répartition des phases",pickSecondAgent:"Cliquez sur un agent pour le comparer à {{name}}",recentDiscussions:"Discussions récentes",removeFilter:"Retirer le filtre : {{label}}",retry:"Réessayer",sessions:"Sessions",sessionsCompleted:"sessions terminées avec succès",showingResults:"{{count}} sur {{total}}",skillCoverage:"Couverture des compétences",styleBreakdown:"Styles de discussion",subtitle:"30 derniers jours",title:"Analyses",total:"Total",totalDiscussions:"Discussions",totalSkills:"Compétences",uncoveredSkills:"{{count}} compétences non couvertes"},Re={activeRate:"Taux d'activité",activeRateDesc:"Agents actifs au cours des 30 derniers jours",dormantAgents:"Inactifs",dormantAgentsDesc:"Agents inutilisés depuis plus de 30 jours",msgAtRisk:"La majeure partie de votre effectif est inactive — envisagez de les solliciter",msgHealthy:"{{rate}} % de votre effectif numérique a été actif au cours des 30 derniers jours",msgModerate:"Certains experts numériques n'ont pas été consultés récemment",statusAtRisk:"À risque",statusHealthy:"Sain",statusModerate:"Modéré",taskForces:"Task forces",taskForcesDesc:"Groupes d'agents collaboratifs",title:"Santé des connaissances",workforceSize:"Taille de l'effectif",workforceSizeDesc:"Total des experts numériques déployés"},qe={hint:"Nous mémoriserons votre choix et vous y conduirons automatiquement la prochaine fois.",manager:{description:"Créez, configurez et déployez vos agents IA. Gérez les workflows, les ressources et les intégrations.",feature1:"Créer et déployer des agents",feature2:"Configurer workflows et pipelines",feature3:"Gérer ressources et extensions",title:"Manager"},subtitle:"Choisissez votre espace de travail pour commencer.",title:"Bienvenue dans EDDI",workforce:{description:"Réunissez des équipes IA qui débattent, analysent et résolvent ensemble des défis complexes.",feature1:"Constituer des task forces d'agents",feature2:"Mener des discussions collaboratives",feature3:"Obtenir des réponses synthétisées",title:"Effectif"}},Ie={assembleTaskForce:"Constituer une task force",assembleTaskForceDesc:"Réunissez des experts pour résoudre des défis complexes",chatWithAgent:"Discuter avec un agent",chatWithAgentDesc:"Ayez une conversation en tête-à-tête avec un expert numérique",manageWorkforce:"Gérer l'effectif",manageWorkforceDesc:"Configurer et déployer des experts numériques",title:"Actions rapides",viewInsights:"Voir les analyses",viewInsightsDesc:"Suivez la couverture de connaissances de votre effectif"},Me={addAgent:"Déployer un agent",count:"{{count}} experts",ready:"Prêt",title:"Votre effectif numérique",unnamed:"Agent sans nom"},ze={production:"Production",test:"Test"},we={attachments:e,app:t,auth:r,nav:n,theme:s,language:i,pages:o,common:a,agents:u,agentDetail:l,wizard:c,setupWizard:d,packages:p,packageDetail:m,packageEditor:g,conversations:v,conversationDetail:f,chat:h,resources:b,editor:A,rulesEditor:C,apiCallsEditor:y,mcpcallsEditor:D,llmEditor:T,outputEditor:x,propertySetterEditor:S,dictionaryEditor:P,parserEditor:E,dictionaryPicker:L,coordinator:k,contentEditor:R,logs:q,secrets:I,audit:M,schedules:z,cascadeTrace:w,debugDrawer:j,costDashboard:N,memoryInspector:O,logViewer:H,promptViewer:V,promptPreview:U,studio:F,ragEditor:_,onboarding:B,platform:G,stream:W,createOrWizard:K,groups:J,taskBoard:Q,memories:Y,properties:$,triggers:Z,capabilities:X,exportDialog:ee,importDialog:te,syncPage:re,sync:ne,userConversations:se,commandPalette:ie,groupWizard:oe,groupTemplates:ae,channels:ue,channelDetail:le,hitl:ce,chatDrawer:de,dashboard:pe,errorBoundary:me,gdpr:ge,mockBanner:ve,orphans:fe,quotas:he,secretPicker:be,snippetEditor:Ae,status:Ce,userData:ye,variables:De,workflowEditor:Te,Workforce:xe,operator:Se,groupWorkspace:Pe,workforceWizard:Ee,updates:Le,analyticsPage:ke,knowledgeHealth:Re,landing:qe,quickActions:Ie,workforce:Me,environments:ze};export{xe as Workforce,l as agentDetail,u as agents,ke as analyticsPage,y as apiCallsEditor,t as app,e as attachments,M as audit,r as auth,X as capabilities,w as cascadeTrace,le as channelDetail,ue as channels,h as chat,de as chatDrawer,ie as commandPalette,a as common,R as contentEditor,f as conversationDetail,v as conversations,k as coordinator,N as costDashboard,K as createOrWizard,pe as dashboard,j as debugDrawer,we as default,P as dictionaryEditor,L as dictionaryPicker,A as editor,ze as environments,me as errorBoundary,ee as exportDialog,ge as gdpr,ae as groupTemplates,oe as groupWizard,Pe as groupWorkspace,J as groups,ce as hitl,te as importDialog,Re as knowledgeHealth,qe as landing,i as language,T as llmEditor,H as logViewer,q as logs,D as mcpcallsEditor,Y as memories,O as memoryInspector,ve as mockBanner,n as nav,B as onboarding,Se as operator,fe as orphans,x as outputEditor,m as packageDetail,g as packageEditor,p as packages,o as pages,E as parserEditor,G as platform,U as promptPreview,V as promptViewer,$ as properties,S as propertySetterEditor,Ie as quickActions,he as quotas,_ as ragEditor,b as resources,C as rulesEditor,z as schedules,be as secretPicker,I as secrets,d as setupWizard,Ae as snippetEditor,Ce as status,W as stream,F as studio,ne as sync,re as syncPage,Q as taskBoard,s as theme,Z as triggers,Le as updates,se as userConversations,ye as userData,De as variables,c as wizard,Te as workflowEditor,Me as workforce,Ee as workforceWizard}; diff --git a/src/main/resources/META-INF/resources/assets/fr-DuE7HbtW.js b/src/main/resources/META-INF/resources/assets/fr-DuE7HbtW.js deleted file mode 100644 index 70adda3b11..0000000000 --- a/src/main/resources/META-INF/resources/assets/fr-DuE7HbtW.js +++ /dev/null @@ -1 +0,0 @@ -const e={title:"Pièces jointes",empty:"Cette conversation n’a aucune pièce jointe.",loadError:"Impossible de charger les pièces jointes.",deleteAll:"Tout supprimer",delete:"Supprimer la pièce jointe",download:"Télécharger",deleted:"Pièce jointe supprimée",deletedAll:"{{count}} pièces jointes supprimées",confirmDeleteTitle:"Supprimer la pièce jointe ?",confirmDeleteDesc:"Supprime définitivement ce fichier. Irréversible.",confirmDeleteAllTitle:"Supprimer toutes les pièces jointes ?",confirmDeleteAllDesc:"Supprime définitivement tous les fichiers de cette conversation. Irréversible."},t={title:"EDDI Manager",description:"Tableau de bord d'administration de la plateforme IA EDDI"},r={login:"Connexion",logout:"Déconnexion",loading:"Authentification…",sessionExpired:"Session expirée. Veuillez vous reconnecter.",profile:"Profil",guest:"Invité",userMenu:"Menu utilisateur"},n={dashboard:"Tableau de bord",agents:"Agents",packages:"Workflows",conversations:"Conversations",coordinator:"Coordinateur",schedules:"Planifications",logs:"Journaux",orphans:"Orphelins",secrets:"Secrets",audit:"Journal d’audit",quotas:"Quotas",groups:"Groupes",chat:"Chat",resources:"Ressources",sectionManagement:"Gestion",sectionDevelopment:"Développement",sectionOperations:"Opérations",mainNavigation:"Navigation principale",openMenu:"Ouvrir le menu de navigation",sectionCore:"Principal",sectionBuild:"Création & tests",sectionMonitor:"Surveillance",sectionAdmin:"Administration",studio:"Studio",gdpr:"Confidentialité",memories:"Mémoire utilisateur",properties:"Propriétés",triggers:"Déclencheurs",capabilities:"Capacités",sync:"Synchronisation",updates:"Mises à jour",channels:"Canaux",approvals:"Approbations",userConversations:"Conversations utilisateur",userData:"Données utilisateur",variables:"Variables",sectionExternal:"Externe",activeConversations:"Conversations actives",openapi:"OpenAPI",docs:"Documentation",modeManager:"Gestionnaire",modeWorkforce:"Équipe",switchMode:"Changer d'espace",operator:"Opérateur de plateforme",workforce:"Effectif",monitoring:"Suivi des conversations",analytics:"Analyses"},s={light:"Clair",dark:"Sombre",system:"Système"},o={label:"Langue",en:"English",de:"Deutsch",fr:"Français",es:"Español",ar:"العربية",zh:"中文",th:"ไทย",ja:"日本語",ko:"한국어",pt:"Português",hi:"हिन्दी",switchFailed:"Impossible de charger cette langue. Veuillez réessayer."},i={dashboard:{title:"Tableau de bord",subtitle:"Vue d'ensemble de vos agents et conversations EDDI",activeAgents:"Agents actifs",totalWorkflows:"Workflows",totalResources:"Ressources",totalConversations:"Conversations",quickActions:"Actions rapides",recentAgents:"Agents récents",noRecentAgents:"Aucun agent pour l'instant. Créez votre premier agent !"},agents:{undeployPreviousVersionsHint:"Retire également toutes les versions antérieures de cet agent de l’environnement.",undeployPreviousVersionsLabel:"Retirer cette version et toutes les précédentes",undeployEndConversationsHint:"Termine immédiatement toute conversation en cours sur ce déploiement. Irréversible.",undeployEndConversationsLabel:"Terminer toutes les conversations actives",confirmUndeployDescription:"La version {{version}} sera retirée de {{environment}}.",confirmUndeploy:"Retirer l’agent du déploiement ?",title:"Agents",subtitle:"Gérez vos agents d'IA conversationnelle"},packages:{title:"Workflows",subtitle:"Configurez les workflows et extensions des agents"},conversations:{permanentDeleteSuccess:"Supprimé définitivement",softDeleteSuccess:"Conversation supprimée",deletePermanentAction:"Supprimer définitivement",deletePermanentLabel:"Supprimer définitivement — efface aussi les pièces jointes, l’instantané mémoire et l’historique d’approbation. Irréversible.",confirmDeleteSoft:"Par défaut, il s’agit d’une suppression logique — la conversation est masquée des listes mais ses données restent sur le serveur.",title:"Conversations",subtitle:"Consultez et gérez les conversations des agents"},resources:{title:"Ressources",subtitle:"Gérez les règles de comportement, dictionnaires, sorties et plus"},chat:{title:"Chat",subtitle:"Discutez avec vos agents déployés"},channels:{title:"Canaux",subtitle:"Connectez des agents et des groupes à des plateformes de messagerie comme Slack"},groups:{title:"Groupes",subtitle:"Groupes de discussion multi-agents pour le débat structuré et la collaboration"},approvals:"Approbations en attente",approvalsSubtitle:"Examinez et décidez des conversations en attente de saisie humaine"},a={add:"Ajouter",agent:"Agent",back:"Retour",cardView:"Vue en cartes",clear:"Effacer la sélection",confirm:"Confirmer",description:"Description",group:"Groupe",id:"ID",listView:"Vue en liste",modified:"Modifié",name:"Nom",new:"Nouveau",version:"Version",viewMode:"Mode d'affichage",loading:"Chargement...",error:"Une erreur est survenue",retry:"Réessayer",save:"Enregistrer",cancel:"Annuler",delete:"Supprimer",remove:"Retirer",create:"Créer",edit:"Modifier",search:"Rechercher...",noResults:"Aucun résultat trouvé",duplicate:"Dupliquer",close:"Fermer",skipToMain:"Aller au contenu principal",opensNewTab:"ouvre dans un nouvel onglet",moreActions:"Plus d'actions",sortByName:"Trier par nom",sortByVersion:"Trier par version",sortByModified:"Trier par date de modification",apply:"Appliquer",copied:"Copié",copy:"Copier",saving:"Enregistrement…",showMore:"Show More",showLess:"Show Less",copyFailed:"Échec de la copie dans le presse-papiers",loadError:"Échec du chargement des données",actions:"Actions",view:"Voir",refresh:"Actualiser",previous:"Précédent",next:"Suivant",dismiss:"Ignorer",refreshFailed:"Actualisation impossible — affichage des dernières données chargées.",settings:"Paramètres",history:"Historique",copyId:"Copier l'ID de l'agent",off:"Désactivé",on:"Activé"},u={confirmDeleteDescription:"Cette action est irréversible. L'agent et toutes ses données seront définitivement supprimés.",confirmUndeploy:"Retirer l'agent du déploiement ?",confirmUndeployDescription:"La version {{version}} sera retirée de {{environment}}.",createSuccess:"Agent créé avec succès",deleteAgent:"Supprimer l'agent",deployError:"Échec du déploiement",deploySuccess:"Agent déployé avec succès",noDescription:"Aucune description",selectAgent:"Sélectionner un agent",undeployEndConversationsHint:"Termine immédiatement toute conversation en cours sur ce déploiement. Irréversible.",undeployEndConversationsLabel:"Terminer toutes les conversations actives",undeployError:"Échec du retrait",undeployPreviousVersionsHint:"Retire également toutes les versions antérieures de cet agent de l'environnement.",undeployPreviousVersionsLabel:"Retirer cette version et toutes les précédentes",undeploySuccess:"Agent retiré",unnamed:"Agent sans nom",deploy:"Déployer",undeploy:"Retirer",createAgent:"Créer un agent",createTitle:"Créer un nouvel agent",name:"Nom",namePlaceholder:"Mon Agent",description:"Description",descriptionPlaceholder:"Décrivez ce que fait cet agent...",empty:"Aucun agent pour l'instant. Créez votre premier agent !",confirmDelete:"Êtes-vous sûr de vouloir supprimer cet agent ?",count_one:"{{count}} agent",count_other:"{{count}} agents",export:"Exporter",exporting:"Exportation en cours...",exportSuccess:"Agent exporté avec succès",import:"Importer un agent",importing:"Importation en cours...",importSuccess:"Agent importé avec succès",importError:"Échec de l'importation de l'agent",chat:"Chat",deployAndChat:"Déployer & Discuter",openExternalChat:"Ouvrir dans un nouvel onglet",emptyDescription:"Utilisez l'assistant pour créer un agent entièrement configuré en quelques minutes.",count_many:"{{count}} agents",liveIn:"Actif en {{environment}}",chatIn:"Discuter en {{environment}}",openExternalChatIn:"Ouvrir le chat {{environment}} dans un nouvel onglet",deployToProduction:"Déployer en production",undeployFromProduction:"Retirer de la production",deployFailedIn:"Le déploiement a échoué en {{environment}}"},l=JSON.parse(`{"a2aDescHint":"Affiché dans l'Agent Card — aide les autres agents à comprendre ce que fait cet agent","a2aDescPlaceholder":"Que fait cet agent ?","a2aDescription":"Description de l'agent","a2aEnable":"Activer l'A2A","a2aEnabled":"Activé","a2aEnabledDesc":"Rendre cet agent découvrable par d'autres agents via le protocole A2A. D'autres instances EDDI peuvent trouver et appeler cet agent comme un outil.","a2aEndpoints":"Endpoints","a2aNoSkills":"Aucune compétence — une compétence « chat » par défaut sera utilisée","a2aSection":"Agent-to-Agent (A2A)","a2aSkillPlaceholder":"ex. translation, code-review","a2aSkills":"Compétences A2A","addAttribute":"Ajouter un attribut","agentCardPreview":"Aperçu de l'Agent Card","agentDid":"DID de l'agent","attributeKey":"clé","attributeValue":"valeur","attributesLabel":"Attributs","attrs":"attr.","autoSnapshotEnable":"Activer les points de contrôle automatiques","capabilities":"Capacités","capabilitiesDesc":"Compétences déclarées pour l'Agent Card A2A et le registre de capacités. Les autres agents les découvrent lors du choix des cibles de délégation.","capabilityPlaceholder":"Rechercher ou saisir un nom de compétence...","comingSoon":"bientôt disponible","defaultVisibility":"Visibilité par défaut","dreamConsolidation":"Consolidation onirique","dreamDesc":"Tâche LLM en arrière-plan qui résout les contradictions, élague les entrées obsolètes et, en option, résume les interactions.","enableMemoryTools":"Activer les outils de mémoire","enableSwd":"Activer la discipline d'écriture stricte","forkingDisabledTooltip":"Disponible dans une prochaine version","forkingEnabled":"Bifurcation de session","forkingNote":"L'endpoint de bifurcation de session (POST /v6/conversations/{{id}}/fork) n'est pas encore disponible.","guardrails":"Garde-fous d'écriture","identity":"Identité cryptographique","keyExpired":"Expirée","keyVersion":"Clé v{{version}}","legacyKey":"Clé héritée (v0)","maxCheckpoints":"Points de contrôle max.","maxCheckpointsHint":"par conversation","maxEntriesPerUser":"Max. par utilisateur","maxForks":"Bifurcations max.","maxForksHint":"par conversation","maxRecallEntries":"Rappel max.","memoryPolicy":"Politique de mémoire","memoryPolicyDesc":"La discipline d'écriture stricte régit ce qui se passe lorsque les mises à jour de propriétés échouent pendant une étape de conversation. Choisissez comment le moteur gère les données partiellement validées.","onCapReached":"Lorsque le plafond est atteint","onFailure":"Stratégie en cas d'échec","onFailureDigest":"Digest — annuler les modifications, transmettre un résumé au LLM","onFailureExclude":"Tout exclure — abandonner silencieusement toutes les mises à jour de propriétés","onFailureKeep":"Tout conserver — conserver les modifications et journaliser un avertissement","openWorkflow":"Ouvrir","outdated":"obsolète","publicKey":"Clé publique","publicKeyHint":"Généré automatiquement à la première signature","publicKeys":"Clés publiques","recallOrder":"Ordre de rappel","requirePeer":"Exiger la vérification des pairs","requirePeerDesc":"Rejeter les tâches A2A entrantes des agents incapables de prouver leur identité","securityFlagConfirmBtn":"Activer quand même","securityFlagConfirmDesc":"La signature cryptographique n'est pas encore disponible dans cette version. Activer ce drapeau entraînera le rejet des enregistrements par le backend avec une erreur HTTP 400. Voulez-vous vraiment continuer ?","securityFlagConfirmTitle":"Activer le drapeau de sécurité ?","securityFlagWarning":"La signature cryptographique n'est pas encore disponible dans cette version. Le backend rejettera les enregistrements si ces drapeaux sont activés (HTTP 400).","securityFlags":"Signature et vérification","securityIdentity":"Sécurité et identité","sessionManagement":"Gestion de session","sessionManagementDesc":"Les points de contrôle de mémoire capturent l'état de la conversation avant les opérations risquées, permettant une annulation propre en cas d'échec.","signA2A":"Signer les messages inter-agents (A2A)","signA2ADesc":"Signer cryptographiquement les messages A2A sortants pour les protéger contre la falsification","signMcp":"Signer les invocations MCP","signMcpDesc":"Joindre des signatures aux appels d'outils MCP pour une vérification sécurisée du serveur","skillAlreadyExists":"Cette compétence est déjà déclarée","switchToLatest":"Passer à la dernière version","toggleAttributes":"Basculer les attributs","triggerBeforeAction":"Avant l'action","triggerBeforeTool":"Avant l'exécution de l'outil","triggerOn":"Déclenchement","updateToLatest":"Mettre à jour vers la dernière version","userMemory":"Mémoire utilisateur","userMemoryDesc":"Mémoire persistante par utilisateur avec outils LLM (remember/recall/forget). La persistance de base des propriétés longTerm fonctionne toujours, quel que soit ce réglage.","viewingOldVersion":"Vous consultez la version {{current}}. La dernière est la version {{latest}}.","workflowAdded":"Workflow ajouté","workflowRemoved":"Workflow retiré","workflowUpdated":"Workflow mis à jour vers la dernière version","title":"Détails de l'agent","backToAgents":"Retour aux Agents","packages":"Workflows","noWorkflows":"Aucun workflow ajouté","addWorkflow":"Ajouter un workflow","selectWorkflow":"Sélectionner un workflow à ajouter","rawConfig":"Configuration brute","editName":"Modifier le nom","editDescription":"Modifier la description","clickToEdit":"Cliquer pour modifier","noDescription":"Aucune description","duplicate":"Dupliquer","duplicating":"Duplication en cours...","duplicateSuccess":"Agent dupliqué avec succès","environments":"Environnements","envProduction":"Production","envTest":"Test","savingAgent":"Enregistrement de l'agent...","savedAgent":"Agent enregistré avec succès","saveError":"Échec de l'enregistrement de l'agent","deployToEnv":"Déployer en {{env}}","undeployFromEnv":"Retirer de {{env}}","openStudio":"Ouvrir dans le Studio","maxKeyLength":"Longueur max. de clé","maxValueLength":"Longueur max. de valeur","maxWritesPerTurn":"Écritures max./tour","dreamSchedule":"Planification (cron)","dreamLlmProvider":"Fournisseur LLM","dreamLlmModel":"Modèle LLM","dreamMaxCost":"Coût max./exécution ($)","dreamPruneDays":"Nettoyage après (jours)","dreamBatchSize":"Taille du lot","detectContradictions":"Détecter les contradictions","summarizeInteractions":"Résumer les interactions","confidenceLow":"Faible","confidenceMedium":"Moyen","confidenceHigh":"Élevé","visibilitySelf":"Propre","visibilityGlobal":"Global","onCapEvict":"Supprimer le plus ancien","onCapReject":"Rejeter","recallMostRecent":"Plus récent","recallMostRelevant":"Plus pertinent","channels":"Connecteurs de canal","channelsDesc":"Connectez cet agent à des canaux Slack. Chaque connecteur est configuré indépendamment avec ses propres identifiants, prenant en charge les configurations multi-workspace.","noChannels":"Aucun canal configuré","noChannelsDesc":"Ajoutez un canal Slack pour permettre aux utilisateurs d'interagir avec cet agent depuis Slack.","addSlackChannel":"Ajouter un canal Slack","slackChannel":"Canal Slack","removeChannel":"Supprimer le canal","removeChannelConfirm":"Supprimer ce connecteur de canal Slack ?","removeChannelDesc":"This action will permanently disconnect this channel.","channelId":"ID du canal","channelIdHint":"Les ID de canal commencent par C suivi de caractères alphanumériques majuscules","botToken":"Token du bot","botTokenPlaceholder":"xoxb-… ou \${vault:slack-bot-token}","botTokenHint":"Token OAuth Bot User Slack. Utilisez une référence vault pour la sécurité.","signingSecret":"Secret de signature","signingSecretPlaceholder":"Chaîne hexadécimale ou \${vault:slack-signing-secret}","signingSecretHint":"Depuis la page Basic Information de votre application Slack. Utilisez une référence vault pour la sécurité.","groupIdOptional":"ID de groupe (optionnel)","groupIdPlaceholder":"ID de configuration de groupe multi-agent","groupIdHint":"Activez les discussions multi-agents \\"group: question\\" depuis ce canal Slack.","slackSetupGuide":"Guide de configuration Slack","slackWebhookUrl":"URL du webhook","slackWebhookCopied":"URL du webhook copiée","slackStep1":"Créez une application Slack sur api.slack.com/apps et installez-la dans votre workspace.","slackStep2":"Copiez le token du bot (xoxb-…) et le secret de signature dans le vault EDDI et configurez les canaux ci-dessous.","slackStep3":"Ensuite, activez les Event Subscriptions dans votre application Slack, collez l'URL du webhook ci-dessus et abonnez-vous à :","slackSetupNote":"Important : Configurez le canal ci-dessous avant d'activer les Event Subscriptions — Slack envoie un défi de vérification d'URL qui nécessite que le secret de signature soit configuré dans EDDI.","slackRequiredScopes":"Permissions requises pour le token du bot","hitlConfig":"Human-in-the-Loop","hitlConfigDesc":"Lorsque cet agent met une conversation en pause pour approbation humaine, ces paramètres contrôlent le temps d'attente et ce qui se passe sans décision à temps.","hitlEnable":"Configurer les délais d'approbation humaine","hitlTimeoutPolicy":"Si aucune décision à temps","hitlApprovalTimeout":"Délai d'approbation (ISO-8601)","hitlTimeoutInvalid":"Une politique finie nécessite une durée ISO-8601 positive, p. ex. PT15M.","hitlTimeoutHint":"p. ex. PT30S, PT15M, PT2H.","hitlPauseReason":"Motif d'approbation (visible par les approbateurs)","hitlPauseReasonPlaceholder":"p. ex. La suppression nécessite l'accord du responsable","toolApprovalsEnable":"Soumettre certains appels d'outils à approbation","toolApprovalsDesc":"Mettre en pause lorsque le modèle invoque un outil correspondant, avant son exécution. Une liste « exiger une approbation » vide désactive le contrôle des outils.","toolRequireApproval":"Exiger une approbation (motifs glob, un par ligne)","toolPatternHint":"'*' est le seul caractère générique. Préfixe de source facultatif :","toolExempt":"Exemptés (toujours autorisés, un par ligne)","toolMaxPauses":"Pauses max / tour (1–10)","toolMaxAuto":"Approbations automatiques max / tour (0–10)","toolOnNoProgress":"En cas de nouvelle pause sans progression","toolTimeoutPolicy":"Politique de délai d'expiration des pauses d'outil","toolTimeoutInherit":"Hériter de l'agent","toolAutoApproveDemotion":"Le AUTO_APPROVE au niveau de l'agent ne s'applique pas aux approbations d'outils — les pauses d'outil attendront indéfiniment sauf si vous définissez ci-dessus une politique de délai d'expiration des pauses d'outil.","toolPauseReason":"Motif de l'approbateur ({toolNames} autorisé)","toolPauseReasonPlaceholder":"p. ex. Approbation requise pour {toolNames}","toolPendingMessage":"Message pour l'utilisateur final pendant la pause ({toolNames} autorisé)","toolPendingMessagePlaceholder":"p. ex. En attente de l'approbation humaine de {toolNames}…","toolInGroupTurns":"Au sein d'un tour de groupe, l'appel d'outil contrôlé d'un membre est automatiquement rejeté (REJECT)."}`),c={title:"Assistant Agent"},d={baseUrlHintCloud:"Nécessaire uniquement si vous utilisez un proxy, un déploiement privé ou un endpoint Azure OpenAI",baseUrlHintLocal:"Requis — l'URL où votre serveur de modèle local s'exécute",modelHint:"Saisissez n'importe quel nom de modèle pris en charge par votre fournisseur, ou choisissez-en un parmi les suggestions",modelPlaceholder:"ex. {{model}} (ou tout modèle pris en charge par votre fournisseur)",title:"Assistant de création d'agent",subtitle:"Créez un agent entièrement configuré en quelques minutes",backToAgents:"Retour aux Agents",next:"Suivant",back:"Retour",createOnly:"Créer uniquement",createAndDeploy:"Créer & Déployer",typeTitle:"Quel type d'agent ?",typeDesc:"Choisissez le type d'agent que vous souhaitez créer",standardAgent:"Agent standard",apiAgent:"Agent API",standardDesc:"IA conversationnelle alimentée par un LLM avec outils, Quick Replies et analyse de sentiment",apiDesc:"Importez une spécification OpenAPI/Swagger pour générer automatiquement un agent API",infoTitle:"Identité de l'agent",infoDesc:"Donnez un nom et une personnalité à votre agent",agentName:"Nom de l'agent",namePlaceholder:"ex. Bot d'assistance client",systemPrompt:"Prompt système",promptPlaceholder:"Tu es un assistant IA serviable qui...",promptHint:"Cette instruction définit le comportement et les réponses de votre agent.",llmTitle:"Configuration LLM",llmDesc:"Choisissez le modèle d'IA qui alimente votre agent",provider:"Fournisseur",model:"Modèle",apiKey:"Clé API",baseUrl:"URL de base",baseUrlPlaceholder:"URL d'endpoint personnalisé",optional:"facultatif",apiSpecTitle:"Spécification OpenAPI",apiSpecDesc:"Fournissez la spécification OpenAPI/Swagger de votre API",specByUrl:"URL",specByFile:"Fichier",specByPaste:"Coller",fetch:"Récupérer",specFetched:"Spécification chargée !",specFetchError:"Échec du chargement de la spécification",dropFile:"Déposez votre fichier OpenAPI ici",dropHint:"Format JSON ou YAML",browse:"Parcourir les fichiers",pasteSpec:"Collez votre JSON ou YAML OpenAPI/Swagger ici...",specLoaded:"Fichier chargé : {{name}}",specReady:"Spécification chargée ({{chars}} caractères)",apiBaseUrlLabel:"URL de base API",apiAuthLabel:"En-tête d’authentification API",endpointFilter:"Filtre d'endpoints",endpointFilterPlaceholder:"Séparés par virgules : GET /users, POST /orders",featuresTitle:"Fonctionnalités & Options",featuresDesc:"Personnalisez les capacités de votre agent",introMessage:"Message d'accueil",introMessageDesc:"Message affiché au début d'une conversation",quickReplies:"Réponses rapides",quickRepliesDesc:"Le LLM génère des suggestions de réponses cliquables",sentiment:"Analyse de sentiment",sentimentDesc:"Suivre l'humeur, l'intention et l'urgence en temps réel",structuredOutput:"Sortie structurée",structuredOutputDesc:"Le LLM répond avec un objet JSON au lieu de texte brut",structuredOutputInfo:"L'activation modifie le mode de réponse du LLM : au lieu de texte brut, il retourne un objet JSON avec des champs structurés. Un schéma JSON est ajouté au prompt système et le modèle passe en mode réponse JSON.",builtInTools:"Outils intégrés",builtInToolsDesc:"Activer la bibliothèque d'outils intégrés d'EDDI (calculatrice, date/heure, etc.)",toolsWhitelist:"Whitelist (vide = tous les outils)",mcpServers:"Serveurs MCP",mcpServersDesc:"Serveurs Model Context Protocol pour outils externes",autoDeploy:"Déploiement auto",autoDeployDesc:"Déployer l'agent immédiatement après sa création",environment:"Environnement",envProduction:"Production",envTest:"Test",reviewTitle:"Vérifier & Créer",reviewDesc:"Vérifiez votre configuration avant de créer l'agent",reviewType:"Type",reviewName:"Nom",reviewPrompt:"Prompt système",reviewProvider:"Fournisseur",reviewModel:"Modèle",reviewSpec:"Spec. OpenAPI",reviewIntro:"Message d'accueil",reviewDeploy:"Déployer",success:"Agent créé avec succès !",agentCreated:"Agent créé !",deployed:"Déployé",endpointsParsed:"{{count}} endpoints API analysés",viewAgent:"Voir l'agent",createAnother:"Créer un autre",allTools:"Tous les outils",selectSpecific:"Sélection manuelle",allToolsInfo:"Les {{count}} outils intégrés seront accessibles à votre agent. Choisissez « Sélection manuelle » pour restreindre les outils actifs.",availableTools:"Outils disponibles",toolCount:"{{selected}} sur {{total}} sélectionnés",specTooLarge:"Cette spécification est trop volumineuse pour être chargée ici",specUrlInvalid:"Ceci n'est pas une URL valide",specUrlScheme:"Seules les URL http:// et https:// sont prises en charge"},p={confirmDeleteDescription:"Cette action est irréversible. Le workflow et toutes ses données seront définitivement supprimés.",createSuccess:"Workflow créé avec succès",unnamed:"Workflow sans nom",createWorkflow:"Créer un workflow",createTitle:"Créer un nouveau workflow",name:"Nom",namePlaceholder:"Mon Workflow",description:"Description",descriptionPlaceholder:"Décrivez ce que fait ce workflow...",noDescription:"Aucune description",empty:"Aucun workflow pour l'instant. Créez votre premier workflow !",confirmDelete:"Êtes-vous sûr de vouloir supprimer ce workflow ?",count_one:"{{count}} workflow",count_other:"{{count}} workflows",emptyDescription:"Les workflows définissent le pipeline de traitement de vos agents.",count_many:"{{count}} workflows"},m={backToAgent:"Retour à l'agent",title:"Détails du workflow",backToWorkflows:"Retour aux Workflows",extensions:"Extensions",noExtensions:"Aucune extension dans ce workflow",rawConfig:"Configuration brute"},g={chooseConfig:"Choisir une config",chooseConfigHint:"Créer une nouvelle config ou en lier une existante",configCreated:"Config créée — ajoutée au pipeline",createNewConfig:"Créer une nouvelle config",createNewConfigHint:"Crée une config vide que vous pourrez modifier plus tard",noExistingConfigs:"Aucune config existante trouvée — créez-en une nouvelle ci-dessus",orExisting:"ou utiliser une existante",updateToLatest:"Mettre à jour vers la dernière version",title:"Éditeur de workflow",pipeline:"Pipeline d'extensions",addHint:"Ajoutez des extensions pour construire votre pipeline",addHintDialog:"Sélectionnez un type d'extension à ajouter",reorder:"Réordonner l'extension",saved:"Workflow enregistré avec succès",saveError:"Échec de sauvegarde du workflow",noTasks:"Aucune tâche dans ce workflow",addTask:"Ajouter une tâche"},v={confirmDeleteSoft:"Par défaut, il s'agit d'une suppression logique — la conversation est masquée des listes mais ses données restent sur le serveur.",deletePermanentLabel:"Supprimer définitivement — efface aussi les pièces jointes, l'instantané mémoire et l'historique d'approbation. Irréversible.",monitorSubtitle:"Surveiller et gérer en masse les conversations en cours par agent.",noActiveDesc:"Cette version de l'agent n'a aucune conversation en cours pour le moment.",purgeDesc:"Supprimer définitivement les conversations TERMINÉES dont la dernière activité est antérieure au nombre de jours indiqué.",selectAgentPromptDesc:"Les conversations actives sont listées par agent et par version.",searchPlaceholder:"Rechercher par ID de conversation...",id:"Conversation",agent:"Agent",state:"État",lastActivity:"Dernière activité",actions:"Actions",empty:"Aucune conversation pour l'instant. Déployez un agent et commencez à discuter !",confirmDelete:"Êtes-vous sûr de vouloir supprimer cette conversation ?",count_one:"{{count}} conversation",count_other:"{{count}} conversations",emptyDescription:"Déployez un agent et démarrez une conversation depuis la page Chat.",filterAll:"Tous",stateActive:"Actif",stateInProgress:"En cours",stateEnded:"Terminée",stateInterrupted:"Interrompue",permanentDeleteSuccess:"Supprimé définitivement",softDeleteSuccess:"Conversation supprimée",monitorActive:"Surveiller les actives",filterByAgent:"Filtrer par agent",filterByVersion:"Filtrer par version d'agent",allVersions:"Toutes les versions",version:"v{{version}}",showingRange:"Affichage de {{from}} à {{to}}",deleteConversation:"Supprimer la conversation",steps:"Étapes",perPage:"Par page",pageNumber:"Page {{page}}",deletePermanentAction:"Supprimer définitivement",step:"étape",monitorTitle:"Conversations actives",backToList:"Retour aux conversations",selectAgentToMonitor:"Sélectionner un agent",selectedCount:"{{count}} sélectionné(s)",endSelected:"Terminer la sélection",selectAgentPrompt:"Sélectionnez un agent à surveiller",noActive:"Aucune conversation active",selectAll:"Tout sélectionner",selectOne:"Sélectionner {{id}}",purgeTitle:"Purger les conversations terminées",olderThanDays:"Plus ancien que (jours)",purgeAction:"Purger",confirmEndTitle:"Terminer les conversations sélectionnées ?",confirmPurgeTitle:"Purger les conversations terminées ?",count_many:"{{count}} conversations",confirmEndDesc_many:"{{count}} conversations seront définies sur TERMINÉE. Les conversations en pause (En attente humaine) sont terminées en toute sécurité via le chemin tenant compte des approbations.",confirmEndDesc_one:"{{count}} conversation seront définies sur TERMINÉE. Les conversations en pause (En attente humaine) sont terminées en toute sécurité via le chemin tenant compte des approbations.",confirmEndDesc_other:"{{count}} conversations seront définies sur TERMINÉE. Les conversations en pause (En attente humaine) sont terminées en toute sécurité via le chemin tenant compte des approbations.",confirmPurgeDesc_many:"Cela supprime définitivement les conversations TERMINÉES datant de plus de {{days}} jours, y compris leur mémoire stockée et leurs pièces jointes. Cette action est irréversible.",confirmPurgeDesc_one:"Cela supprime définitivement les conversations TERMINÉES datant de plus de {{days}} jour, y compris leur mémoire stockée et leurs pièces jointes. Cette action est irréversible.",confirmPurgeDesc_other:"Cela supprime définitivement les conversations TERMINÉES datant de plus de {{days}} jours, y compris leur mémoire stockée et leurs pièces jointes. Cette action est irréversible.",pausedNote_many:"{{count}} des conversations sélectionnées sont En attente humaine et verront leur approbation en attente annulée.",pausedNote_one:"{{count}} des conversations sélectionnées est En attente humaine et verra son approbation en attente annulée.",pausedNote_other:"{{count}} des conversations sélectionnées sont En attente humaine et verront leur approbation en attente annulée.",endSuccess_many:"{{count}} conversations terminées",endSuccess_one:"{{count}} conversation terminée",endSuccess_other:"{{count}} conversations terminées",purgeSuccess_many:"{{count}} conversations terminées purgées",purgeSuccess_one:"{{count}} conversation terminée purgée",purgeSuccess_other:"{{count}} conversations terminées purgées"},f={backToConversations:"Retour aux conversations",chatLog:"Journal de conversation",noSteps:"Aucune étape de conversation enregistrée",properties:"Propriétés de la conversation",rawData:"Voir les données brutes",step:"Étape",steps:"étapes",title:"Conversation",continueChat:"Continuer dans le chat",searchTranscript:"Rechercher dans la conversation…",exportMd:"Exporter en Markdown",toolSummary:"Utilisation des outils",totalCost:"Coût total",cacheHitRate:"Taux de cache"},h={hide:"Masquer",secretModeOff:"Basculer le mode secret",secretModeOn:"Mode secret activé",secretPlaceholder:"Saisir la valeur du secret...",show:"Afficher",selectAgent:"Sélectionnez un agent...",noAgents:"Aucun agent déployé disponible. Déployez d'abord un agent.",placeholder:"Tapez un message...",send:"Envoyer",newConversation:"Nouvelle conversation",endConversation:"Terminer la conversation",streaming:"Streaming",thinking:"Réflexion en cours...",usingTools:"Utilisation des outils",connectionError:"Erreur de connexion. Veuillez réessayer.",empty:"Sélectionnez un agent et commencez à discuter !",history:"Historique",undo:"Annuler le dernier message",redo:"Rétablir le message",continueConversation:"Continuer",noHistory:"Aucun historique de conversation.",attach:"Joindre un fichier",attachUploading:"Chargement...",attachSuccess:"Fichier joint",attachError:"Échec du chargement",attachLimit:"Vous pouvez joindre jusqu'à {{max}} fichiers par message.",attachTooLargeToForward:"{{name}} est enregistré mais trop volumineux pour être envoyé directement au modèle.",attachNotForwarded:"Non envoyé au modèle",dropToAttach:"Déposez des fichiers pour les joindre",stepFailedFallback:"Cette étape a échoué. Le journal du serveur contient l'erreur complète.",retry:"Réessayer la dernière étape",retrySuccess:"Étape ré-exécutée",retryError:"Échec de la tentative",showActivity:"Afficher l’activité",hideActivity:"Masquer l’activité",scrollToBottom:"Défiler vers le bas",copyMessage:"Copier le message",copied:"Copié !",activity:{processing:"Traitement…",steps:"étapes",toolCalls:"appels d’outils",toolCall:"Appel d’outil",toolResult:"Résultat",error:"Une erreur s'est produite",toolCallsCount_one:"{{count}} appel d'outil",stepsCount:"{{count}} étapes",stepsCount_one:"{{count}} étape",stepsCount_many:"{{count}} étapes",stepsCount_other:"{{count}} étapes",toolCallsCount_many:"{{count}} appels d'outils",toolCallsCount_other:"{{count}} appels d'outils",toolCallsCount:"{{count}} appels d'outils",usingTool:"Utilisation de {{tool}}…"},context:{conversationId:"ID conversation",agentVersion:"Version de l’agent",startTime:"Début",stepCount:"Étapes",show:"Afficher les infos",hide:"Masquer les infos"},agentTyping:"L’agent rédige",copy:"Copier",emptyConversation:"Cette conversation ne contient encore aucun message.",loadConversationFailed:"Impossible de charger cette conversation : {{error}}",multilineHint:"Entrée pour envoyer · Maj+Entrée pour une nouvelle ligne",multilineHintCtrlEnter:"Ctrl+Entrée pour envoyer · Entrée pour une nouvelle ligne",toolRefused:"Refusé"},b={backToWorkflow:"Retour au workflow",confirmDeleteDescription:"Cette action est irréversible. Le {{type}} sera définitivement supprimé.",createSuccess:"{{type}} créé avec succès",snippetNameInvalid:"Seuls les lettres minuscules (a-z), les chiffres (0-9) et les underscores (_) sont autorisés.",snippetNameRequired:"Le nom de l'extrait est requis.",unnamed:"Ressource sans nom",noDescription:"Aucune description",backToResources:"Retour aux Ressources",backToList:"Retour à {{type}}",unknownType:"Type de ressource inconnu",rawConfig:"Configuration brute",rawConfigHint:"Configuration JSON de cette ressource",create:"Créer {{type}}",createTitle:"Créer {{type}}",createDescription:"Créer une configuration {{type}} vide. Vous pourrez la modifier après la création.",confirmDelete:"Êtes-vous sûr de vouloir supprimer ce(tte) {{type}} ?",empty:"Aucune ressource {{type}} pour l'instant.",itemCount_one:"{{count}} élément",itemCount_other:"{{count}} éléments",count_one:"{{count}} ressource",count_other:"{{count}} ressources",types:{rules:{name:"Règles de comportement",description:"Définir les règles de flux de conversation et la logique de décision"},apicalls:{name:"Appels HTTP",description:"Configurer les intégrations API externes et les webhooks"},output:{name:"Jeux de sorties",description:"Gérer les modèles de réponse et les variantes de sortie"},dictionary:{name:"Dictionnaires",description:"Définir les modèles de reconnaissance de mots et de phrases"},llm:{name:"LLM",description:"Configurer les modèles d'IA, les prompts et les liaisons d'outils"},propertysetter:{name:"Définisseur de propriétés",description:"Définir les propriétés de conversation et gérer le remplissage de slots"},mcpcalls:{name:"Appels MCP",description:"Configurer les connexions MCP et les appels d'outils déterministes"},rag:{name:"Bases de connaissances",description:"Configurer des bases de connaissances RAG pour la recherche documentaire"},snippets:{name:"Extraits de prompt",description:"Blocs de construction reutilisables pour les prompts systeme"},parser:{name:"Parseurs",description:"Analyse NLP des entrées et configuration des dictionnaires"}},emptyDescription:"Créez votre premier(ère) {{type}} pour l'utiliser dans les workflows.",itemCount_many:"{{count}} éléments",count_many:"{{count}} ressources",descriptionPlaceholder:"Décrivez cette configuration {{type}}…"},A={compare:"Comparer",compareVersions:"Comparer les versions",deployFailed:"Échec du déploiement",deploying:"Déploiement…",diffHint:"Ajouts en vert, suppressions en rouge. Gauche = plus ancienne, Droite = plus récente.",discardAndLeave:"Abandonner et quitter",discardMessage:"Voulez-vous vraiment abandonner toutes les modifications non enregistrées ? Cette action est irréversible.",discardTitle:"Abandonner les modifications ?",newerVersion:"Plus récente",olderVersion:"Plus ancienne",saveAndTest:"Enregistrer et tester",swapVersions:"Inverser les versions",unsavedMessage:"Vous avez des modifications non enregistrées qui seront perdues. Voulez-vous vraiment continuer ?",unsavedTitle:"Modifications non enregistrées",formTab:"Formulaire",jsonTab:"JSON",save:"Enregistrer",discard:"Annuler",saving:"Enregistrement...",saved:"Enregistré avec succès",saveError:"Échec de l'enregistrement",dirty:"Modifications non enregistrées",version:"Version",versionPicker:"Sélectionner la version",readOnly:"Lecture seule",formPlaceholder:"Éditeur visuel bientôt disponible. Utilisez l'onglet JSON pour modifier.",jsonSchema:"Validation de schéma active",cascadeMode:"Les modifications seront propagées au workflow et à l'agent parent",updateUsageHint:"Mettre à jour les workflows et agents sélectionnés vers la nouvelle version ?",updateUsage:"Mettre à jour la sélection",skipUpdate:"Ignorer",cascading:"Mise à jour...",cascadeSuccess:"Mise à jour en cascade terminée",invalidJson:"JSON invalide — basculez vers l'onglet JSON pour corriger.",cascadePartialFailure_many:"{{count}} mises à jour en cascade échouées",cascadePartialFailure_one:"{{count}} mise à jour en cascade échouée",cascadePartialFailure_other:"{{count}} mises à jour en cascade échouées",usedInAgents_many:"Utilisé dans {{count}} agents",usedInAgents_one:"Utilisé dans {{count}} agent",usedInAgents_other:"Utilisé dans {{count}} agents"},C={condCapabilityMatch:"capabilityMatch",condDeploymentContext:"deploymentContext",strategy_executeAll:"Tout exécuter",strategy_executeUntilFirstSuccess:"Jusqu’au premier succès",invalidValue:"(invalide)",appendActions:"Ajouter des actions",expressionsAsActions:"Expressions comme actions",groups:"Groupes de comportement",addGroup:"Ajouter un groupe",groupName:"Nom du groupe",executionStrategy:"Stratégie d'exécution",rules:"Règles",addRule:"Ajouter une règle",ruleName:"Nom de la règle",actions:"Actions",noActions:"Aucune action",addAction:"Ajouter",actionPlaceholder:"ex. greet, get_weather",conditions:"Conditions",addCondition:"Ajouter une condition",conditionType:"Type de condition",nestedConditions:"Conditions imbriquées",configKey:"Clé",configValue:"Valeur",addConfig:"Ajouter une config",removeRule:"Supprimer la règle",removeGroup:"Supprimer le groupe",removeCondition:"Supprimer la condition",noGroups:"Aucun groupe de comportement défini",noRules:"Aucune règle dans ce groupe",noConditions:"Aucune condition"},y={noEndpointsFound:"Aucun endpoint trouvé dans la spécification",specUrlPlaceholder:"https://api.example.com/openapi.json",targetServerUrl:"URL du serveur cible",targetServerUrlPlaceholder:"https://api.example.com",calls:"Appels HTTP",addCall:"Ajouter un appel HTTP",callName:"Nom de l'appel",callDescription:"Description",descriptionPlaceholder:"Description en langage naturel pour les agents LLM",request:"Requête",method:"Méthode",path:"Chemin",pathPlaceholder:"/api/endpoint",headers:"En-têtes",addHeader:"Ajouter un header",queryParams:"Paramètres de requête",addQueryParam:"Ajouter un paramètre",contentType:"Type de contenu",body:"Corps de la requête",bodyPlaceholder:"Modèle de corps JSON...",parameters:"Paramètres (pour agents LLM)",paramName:"Nom du paramètre",paramDescription:"Description",addParam:"Ajouter un paramètre",options:"Options",saveResponse:"Enregistrer la réponse",responseObjectName:"Nom de l'objet réponse",responseHeaderObjectName:"Nom de l'objet header réponse",fireAndForget:"Envoyer et oublier",batchCalls:"Appels en lot",iterationObjectName:"Nom de l'objet itération",prePostInstructions:"Instructions pré/post",preRequest:"Pré-requête",postResponse:"Post-réponse",removeCall:"Supprimer l'appel",noCalls:"Aucun appel HTTP configuré",actions:"Actions déclencheurs",noActions:"Aucune action",actionPlaceholder:"ex. get_weather",addHttpCodeValidator:"Ajouter un filtre de code HTTP",httpCodeFilter:"Filtre de code HTTP",runOnCodes:"Exécuter sur les codes",skipOnCodes:"Ignorer sur les codes",propName:"Nom de la propriété",propValue:"Valeur ou modèle",overrideTitle:"Remplacer la valeur existante",override:"Remplacer",advancedMapping:"Mappage de chemin d'objet",fromPath:"Depuis le chemin d'objet",toPath:"Vers le chemin d'objet",convertToObject:"Convertir en objet",runOnValidationError:"Exécuter en cas d'erreur de validation",noPropertyInstructions:"Aucune instruction de propriété",addPropertyInstruction:"Ajouter une instruction de propriété",pathToTargetArray:"Chemin vers le tableau cible",iterationObjName:"Objet d'itération",templateFilter:"Expression de filtre",filterPlaceholder:"Filtre facultatif...",outputType:"Type de sortie",outputValue:"Valeur de sortie",noOutputInstructions:"Aucune instruction de construction de sortie",addOutputInstruction:"Ajouter une instruction de sortie",qrValue:"Valeur de réponse rapide",qrExpressions:"Expressions de réponse rapide",noQrInstructions:"Aucune instruction de construction de réponse rapide",addQrInstruction:"Ajouter une instruction de réponse rapide",noRetryPolicy:"Aucune politique de nouvelle tentative",addRetryPolicy:"Ajouter une politique de nouvelle tentative",maxRetries:"Tentatives max.",backoffDelayMs:"Délai de backoff (ms)",retryOnHttpCodes:"Réessayer sur les codes HTTP",valuePathMatchers:"Correspondances de chemin de valeur",noValuePathMatchers:"Aucune correspondance de chemin de valeur",valuePath:"Chemin de valeur",contains:"contient",equals:"égal à",trueIfNoMatch:"Réessayer si aucune correspondance",addValuePathMatcher:"Ajouter une correspondance de chemin de valeur",removeRetryPolicy:"Supprimer la politique de nouvelle tentative",delayMs:"Délai (ms)",propertyInstructions:"Instructions de propriété",outputBuildInstructions:"Instructions de construction de sortie",qrBuildInstructions:"Instructions de construction de réponse rapide",retryBackoff:"Nouvelle tentative et backoff",discoveredEndpoints:"Points de terminaison découverts",discoveryError:"Impossible d'analyser la spécification OpenAPI",openApiSpecUrl:"Importer depuis une spécification OpenAPI",invalidUrl:"Saisissez une URL http:// ou https:// valide",discovering:"Analyse…",discoverEndpoints:"Découvrir les points de terminaison",retry:"Réessayer",selectedCount:"sélectionné(s)",importAppend:"Ajouter aux appels",importReplace:"Remplacer tous les appels",confirmReplace:"Oui, tout remplacer",replaceConfirmMessage:"Cette action remplacera {{count}} appel(s) existant(s). Êtes-vous sûr ?"},D={continueOnErrorHint:"En cas d'échec, le pipeline continue ; l'erreur est exposée à ",descriptionPlaceholder:"Description en langage naturel pour les agents LLM",governanceHint:"Contrôlez quels outils sont exposés. Liste blanche = uniquement ceux-ci ; Liste noire = exclure ceux-ci.",pipelineHint:"Appels d'outils déterministes, déclenchés par action (mode pipeline).",responseObjectName:"Nom de l'objet réponse",discoveredTools:"Outils disponibles",whitelisted:"Sur liste blanche",addToWhitelist:"Ajouter à la liste blanche",addWhitelist:"Liste blanche",blacklisted:"Sur liste noire",addToBlacklist:"Ajouter à la liste noire",addBlacklist:"Liste noire",noRetryPolicy:"Aucune politique de nouvelle tentative",addRetryPolicy:"Ajouter une politique de nouvelle tentative",maxAttempts:"Tentatives max.",backoffDelayMs:"Délai de backoff (ms)",backoffMultiplier:"Multiplicateur de backoff",maxBackoffDelayMs:"Backoff max. (ms)",removeRetryPolicy:"Supprimer la politique de nouvelle tentative",callName:"Nom de l'appel",removeCall:"Supprimer l'appel",description:"Description",toolName:"Nom de l'outil",parameterSchema:"Schéma de paramètres",triggerActions:"Actions déclencheurs",toolArguments:"Arguments de l'outil",addArgument:"Ajouter un argument",saveResponse:"Enregistrer la réponse",continueOnError:"Continuer en cas d'erreur",retryBackoff:"Nouvelle tentative et backoff",preRequest:"Pré-requête",propertyInstructions:"Instructions de propriété",postResponse:"Post-réponse",outputBuildInstructions:"Instructions de construction de sortie",qrBuildInstructions:"Instructions de construction de réponse rapide",discoveryError:"Impossible de se connecter au serveur MCP",serverConnection:"Connexion au serveur",displayName:"Nom d'affichage",serverUrl:"URL du serveur MCP",discovering:"Connexion…",discoverTools:"Découvrir les outils",transport:"Transport",timeoutMs:"Délai d'expiration (ms)",apiKey:"Clé API / référence Vault",toolGovernance:"Gouvernance des outils",retry:"Réessayer",noToolsFound:"Aucun outil trouvé sur ce serveur",whitelist:"Liste blanche (autoriser uniquement)",blacklist:"Liste noire (exclure)",pipelineCalls:"Appels de pipeline",addCall:"Ajouter un appel MCP"},T=JSON.parse(`{"addCustomInstruction":"Ajouter une instruction","addKnowledgeBase":"Ajouter une référence KB","addMaskingRule":"Ajouter une règle","addToolLimit":"Ajouter une limite d'outil","anchorFirstSteps":"Ancrer les premières étapes","anchorFirstStepsHint":"Tours d'ouverture toujours conservés (0 = aucun)","conversationMemory":"Mémoire de conversation","conversationMemoryDesc":"Les tours plus anciens sont compressés progressivement dans un résumé glissant. Le LLM voit : [prompt système + résumé] + [N tours récents mot pour mot]. Un outil conversationRecall intégré permet à l'agent de revenir dans les tours résumés à la demande.","counterweight":"Contrepoids comportementaux","counterweightCustom":"Instructions personnalisées","counterweightCustomHint":"Laisser vide pour utiliser le préréglage intégré du niveau sélectionné.","counterweightCustomOverride":"Les instructions personnalisées remplacent entièrement le texte du niveau préréglé.","counterweightDesc":"Injecter des instructions de sécurité dans le prompt système. Protège contre l'excès de confiance, l'hallucination et l'action non supervisée.","counterweightLevel":"Niveau de sécurité","counterweightLevelCautious":"Prudent","counterweightLevelNormal":"Normal (aucune injection)","counterweightLevelStrict":"Strict","counterweightPlacement":"Placement","counterweightPlacementPrefix":"Avant le prompt système","counterweightPlacementSuffix":"Après le prompt système","counterweightStrictNote":"Le mode strict est automatiquement rétrogradé en Prudent lors des exécutions planifiées/par lots pour éviter un comportement destructeur \\"une étape à la fois\\".","defaultMaxChars":"Nb max. de caractères par défaut","defaultMaxCharsHint":"(~12k tokens à 50000)","enableSummary":"Activer le résumé glissant","enableWorkflowRag":"Découverte auto du RAG du workflow","excludeProps":"Exclure les propriétés du résumé","excludePropsDesc":"Ignorer les faits déjà capturés comme propriétés persistantes — se concentrer sur le raisonnement et le contexte implicite","httpCallRag":"RAG httpCall (zéro infrastructure)","httpCallRagHint":"Exécuter un httpCall nommé avant l'appel LLM. La réponse est injectée comme contexte — aucun stockage vectoriel nécessaire.","httpCallRagPlaceholder":"ex. search_docs, query_wiki","identityMasking":"Masquage d'identité","identityMaskingDesc":"Empêcher le LLM de révéler le nom de son modèle ou son fournisseur lorsqu'il est sondé.","identityMaskingEmptyWarning":"Le masquage est activé mais ne comporte aucune règle. Ajoutez au moins une règle pour qu'il prenne effet.","identityMaskingRulePlaceholder":"ex. Ne jamais révéler que vous êtes un modèle de langage IA","identityMaskingRules":"Règles de masquage","identityMaskingRulesHint":"L'activation ET au moins une règle sont nécessaires pour que le masquage prenne effet.","injectionStrategy":"Injection","kbNamePlaceholder":"ex. product-docs","knowledgeBases":"Bases de connaissances","knowledgeBasesHint":"Référencez explicitement les bases de connaissances par leur nom. Chaque nom doit correspondre à une RagConfiguration du workflow.","legacyRag":"RAG hérité (déprécié)","legacyRagHint":"Cette configuration utilise le format retrievalAugmentor déprécié. Migrez vers les modes ci-dessus.","maxContextTokens":"Tokens de contexte max.","maxContextTokensHint":"-1 = utiliser le nombre d'étapes à la place","maxRecallHint":"Par invocation de rappel","maxRecallTurns":"Tours de rappel max.","maxSummaryTokens":"Tokens de résumé max.","noKnowledgeBases":"Aucune base de connaissances référencée","perToolLimits":"Remplacements par outil","prePostDesc":"Configurez les instructions de propriétés exécutées avant chaque requête LLM, et les instructions de sortie/propriétés exécutées après chaque réponse.","promptSafety":"Sécurité du prompt","ragDefaults":"Paramètres de récupération par défaut","recentWindow":"Fenêtre récente (étapes)","recentWindowHint":"Tours conservés mot pour mot","removeLegacyRag":"Supprimer la config héritée","strategyPaginate":"Paginer (le LLM en récupère plus)","strategySummarize":"Résumer (via un modèle économique)","strategyTruncate":"Tronquer (coupure nette)","summarizationPrompt":"Prompt de résumé personnalisé (facultatif)","summarizationPromptPlaceholder":"Laisser vide pour utiliser le prompt structuré par défaut qui préserve les objectifs, les décisions, le raisonnement et le ton.","summarizeInfoBanner":"Le résumeur utilise le même fournisseur et la même clé API que cette tâche. Seul le nom du modèle est remplacé par une variante moins chère (p. ex. gpt-4o-mini).","summarizerModel":"Modèle de résumé","summarizerModelHint":"(repli sur troncature si vide)","summarizerModelPlaceholder":"ex. gpt-4o-mini","summaryModel":"Modèle de résumé","summaryProvider":"Fournisseur de résumé","summaryProviderHint":"Utilisez un modèle économique/rapide pour le résumé","tokenWindow":"Fenêtre de contexte basée sur les tokens","tokenWindowDesc":"Remplacer l'historique basé sur le nombre d'étapes par un remplissage tenant compte des tokens. Lorsque maxContextTokens est défini (> 0), le moteur ajuste autant de tours récents que possible dans le budget, en ancrant éventuellement les tours d'ouverture.","toolResponseLimits":"Limites de réponse des outils","toolResponseLimitsDesc":"Tronquer les sorties d'outils verbeuses avant leur réinjection dans la fenêtre de contexte du LLM. Évite la surcharge du contexte.","truncationStrategy":"Stratégie","workflowRagHint":"Découvre automatiquement toutes les étapes RAG du workflow. Utilisé uniquement lorsqu'aucune base de connaissances explicite n'est listée ci-dessus.","tasks":"Tâches LLM","addTask":"Ajouter une tâche","noTasks":"Aucune tâche LangChain configurée","removeTask":"Supprimer la tâche","taskId":"ID de tâche","description":"Description","descriptionPlaceholder":"Ce que fait cette tâche","triggerActions":"Actions déclencheurs","noActions":"Aucune action","actionPlaceholder":"ex. help, chat","systemPrompt":"Prompt système","systemPromptPlaceholder":"Tu es un assistant serviable...","modelParams":"Paramètres du modèle","addParam":"Ajouter un paramètre","agentMode":"Mode agent","enableBuiltInTools":"Activer les outils intégrés","toolWhitelist":"Whitelist d'outils (vide = tous)","enableHttpCallTools":"Découverte auto des outils HTTP Call","enableHttpCallToolsDesc":"Exposer automatiquement toutes les extensions httpcall du workflow comme outils LLM","httpCallTools":"URIs d'outils HTTP","httpCallToolsHint":"URIs httpcall explicites (en plus des auto-découvertes)","addTool":"Ajouter une URI d'outil","mcpServers":"Serveurs MCP","mcpServersDesc":"Serveurs MCP externes dont les outils deviennent disponibles pour le LLM","addMcpServer":"Ajouter un serveur MCP","mcpUrlPlaceholder":"http://localhost:7070/mcp","mcpName":"Nom","mcpApiKey":"API Key / réf. vault","historyLimit":"Limite d'historique","historyLimitHint":"(-1 = illimité)","budgetPerf":"Budget et performances","maxBudget":"Budget max ($)","costTracking":"Suivi des coûts","toolCaching":"Mise en cache des outils","rateLimiting":"Limitation de débit","defaultRate":"Débit par défaut (req/min)","prePostInstructions":"Instructions pré/post","preRequest":"Pré-requête","postResponse":"Post-réponse","enableMcpCallTools":"Découverte auto des outils MCP","enableMcpCallToolsDesc":"Expose automatiquement toutes les extensions mcpcalls du workflow en tant qu’outils LLM","a2aAgents":"Agents A2A","a2aAgentsDesc":"Agents distants compatibles A2A dont les compétences deviennent des outils LLM","addA2aAgent":"Ajouter un agent A2A","a2aUrlPlaceholder":"https://remote.example.com/a2a/agents/...","a2aName":"Nom d’affichage","a2aApiKey":"\${vault:my-a2a-key}","a2aTimeout":"Délai max. (ms)","a2aSkillsFilter":"Filtre de compétences (vide = toutes)","cascade":"Cascade de modèles","cascadeDesc":"Try a cheap/fast model first. If confidence is too low, automatically escalate to a more powerful (and expensive) model.","cascadeEnable":"Activer la cascade","cascadeStrategy":"Stratégie","strategyCascade":"Escalade séquentielle","strategyParallel":"Parallèle (futur)","cascadeStrategyHint":"Commence par le modèle le moins cher, escalade si la confiance est faible","cascadeEvalStrategy":"Évaluation de confiance","cascadeEvalHint":"Comment juger si la réponse est satisfaisante","evalStructured":"Sortie structurée (JSON)","evalHeuristic":"Heuristique (détection d’hésitation)","evalJudge":"Modèle juge (sous-LLM)","evalNone":"Aucune (toujours accepter)","cascadeInAgent":"Utiliser aussi la cascade en mode agent (avec outils)","cascadeSteps":"Cascade Steps","cascadeStepsDesc":"Order matters: first step tried first. Last step is always accepted.","cascadeModelName":"ex. claude-sonnet-5","cascadeConfidence":"Min. Confidence (0-1)","cascadeConfidencePlaceholder":"vide = toujours accepter","cascadeTimeout":"Délai max. (ms)","addCascadeStep":"Ajouter une étape","cascadeReturnBest":"Renvoyer la réponse la mieux notée parmi les étapes","cascadeEvalNoneHint":"Le filtrage par confiance est désactivé — la réponse de la première étape est toujours acceptée.","cascadeCeilings":"Plafonds et tarification","cascadeMaxDuration":"Durée totale max. (ms)","cascadeMaxCost":"Coût max. par exécution ($)","cascadeUnlimited":"illimité","cascadeInputPrice":"Entrée $ / 1M tokens","cascadeOutputPrice":"Sortie $ / 1M tokens","cascadePricingHint":"La tarification par défaut des tokens alimente le suivi des coûts et le plafond de coût. Chaque étape peut la remplacer.","cascadeJudgeModel":"Modèle juge","cascadeJudgeModelDesc":"Un modèle distinct (généralement bon marché) qui évalue la confiance de chaque réponse.","cascadeJudgeApiKey":"API Key du juge","cascadeHeuristic":"Réglage de l’heuristique","cascadeHeuristicDesc":"Remplacements facultatifs pour la détection d’hésitation/de refus. Les champs vides utilisent les valeurs par défaut intégrées (en anglais). Localisez les listes de phrases pour les déploiements non anglophones.","cascadeHeuristicDefaults":"Valeurs par défaut intégrées","cascadeHeuristicPhrasePlaceholder":"ajouter une phrase…","cascadeHeuristicPhrasesLow":"Phrases d’hésitation (faible confiance)","cascadeHeuristicPhrasesRefusal":"Phrases de refus","cascadeHeuristicShortLen":"Longueur de réponse courte","cascadeHeuristicShortScore":"Score court","cascadeHeuristicRefusalScore":"Score de refus","cascadeHeuristicHedgingScore":"Score d’hésitation","cascadeHeuristicDefaultScore":"Score par défaut","cascadeStepApiKey":"API Key","cascadeStepApiKeyPlaceholder":"hérite de la clé de la tâche si vide","cascadeCrossProvider":"multi-fournisseur","cascadeStepAdvanced":"Avancé (tarification et paramètres)","cascadeStepInputPrice":"Entrée $ / 1M","cascadeStepOutputPrice":"Sortie $ / 1M","cascadeStepPriceInherit":"valeur par défaut de la cascade","cascadeStepParams":"Paramètres supplémentaires","cascadeStepAddParam":"Ajouter un paramètre","cascadeIssues":{"NO_STEPS":"La cascade est activée mais ne comporte aucune étape — elle échouera lors de son exécution.","UNKNOWN_STRATEGY":"Stratégie inconnue « {{strategy}} » — la cascade s’exécutera de façon séquentielle.","PARALLEL_NOT_IMPLEMENTED":"La stratégie parallèle n’est pas encore implémentée — les étapes s’exécutent séquentiellement.","UNKNOWN_EVAL_STRATEGY":"Évaluation de confiance inconnue « {{strategy}} » — retour à la sortie structurée par défaut.","JUDGE_MODEL_MISSING":"L’évaluation par modèle juge n’a aucun juge configuré — la confiance repli sur l’heuristique.","JUDGE_CROSS_PROVIDER_NO_APIKEY":"Le modèle juge utilise un fournisseur différent mais n’a pas de clé API propre — il hériterait de la clé de la tâche.","MAX_DURATION_NONPOSITIVE":"La durée totale max. doit être supérieure à 0.","MAX_COST_NEGATIVE":"Le coût max. par exécution ne peut pas être négatif.","CASCADE_INPUT_PRICE_NEGATIVE":"Le prix d’entrée de la cascade ne peut pas être négatif.","CASCADE_OUTPUT_PRICE_NEGATIVE":"Le prix de sortie de la cascade ne peut pas être négatif.","CONVERT_TO_OBJECT_STRUCTURED":"convertToObject est incompatible avec la confiance par sortie structurée — la cascade utilisera l’heuristique à la place.","STEP_INPUT_PRICE_NEGATIVE":"Le prix d’entrée de l’étape {{step}} ne peut pas être négatif.","STEP_OUTPUT_PRICE_NEGATIVE":"Le prix de sortie de l’étape {{step}} ne peut pas être négatif.","STEP_CONFIDENCE_OUT_OF_RANGE":"La confiance de l’étape {{step}} doit être comprise entre 0 et 1.","STEP_DEAD_NULL_THRESHOLD":"L’étape {{step}} n’a aucun seuil de confiance — les étapes suivantes deviennent inaccessibles.","STEP_TIMEOUT_NONPOSITIVE":"Le délai de l’étape {{step}} doit être supérieur à 0.","STEP_CROSS_PROVIDER_NO_APIKEY":"L’étape {{step}} utilise un fournisseur différent mais n’a pas de clé API propre — elle hériterait de la clé de la tâche."},"parallelExecution":"Exécution parallèle des outils","parallelExecutionDesc":"Run independent tool calls concurrently","parallelTimeout":"Délai max. (ms)","maxToolIterations":"Itérations max. d’outils","maxToolIterationsHint":"(par défaut 10)","toolRateLimits":"Limites de débit par outil","toolRateLimitsDesc":"Override default rate for specific tools","toolName":"Nom de l’outil","addToolRate":"Ajouter une limite","retryConfig":"Configuration des tentatives","retryDesc":"Configure automatic retries with exponential backoff.","retryMaxAttempts":"Tentatives max.","retryDelay":"Délai initial (ms)","retryMultiplier":"Facteur de backoff","retryMaxDelay":"Délai max. (ms)","ragConfig":"RAG (recherche de connaissances)","ragDesc":"Augment LLM responses with retrieved documents.","ragHttpCall":"URI d’appel HTTP","ragEmbeddingModel":"Modèle d’embedding","ragEmbeddingModelPlaceholder":"ex. text-embedding-3-small","ragEmbeddingStore":"Stockage d’embeddings","ragEmbeddingStorePlaceholder":"ex. pgvector, qdrant","ragMaxResults":"Résultats max.","ragMinScore":"Min Similarity Score (0-1)","moveDown":"Descendre","moveUp":"Monter","removeStep":"Supprimer l’étape","execution":"Exécution","budgetCosts":"Budget & coûts","preRequestDesc":"Définir ou transformer les propriétés avant lexécution du LLM.","postResponseDesc":"Traiter la sortie du LLM : définir les propriétés, construire des messages de sortie et générer des réponses rapides.","postPropertyInstructions":"Instructions de propriétés","postOutputInstructions":"Instructions de sortie","postQrInstructions":"Instructions de réponses rapides","allSkills":"Toutes les compétences","skillPlaceholder":"ex. order-tracking","modeAgent":"Agent","modeChat":"Chat","perMinute":"/min","allTools":"Tous les outils","selectSpecific":"Sélection manuelle","allToolsInfo":"Les {{count}} outils intégrés sont accessibles au LLM. Choisissez « Sélection manuelle » pour restreindre les outils exposés.","availableTools":"Outils disponibles","toolCount":"{{selected}} sur {{total}} sélectionnés","toolSources":"Sources d’outils du workflow","toolSourcesInfo":"Les deux sources sont actives par défaut — tous les appels HTTP et MCP du workflow sont automatiquement exposés en tant qu’outils LLM. Désactivez une source pour l’exclure.","included":"Inclus","toolApprovals":"Contrôle des approbations d'outils (par tâche)","toolApprovalsEnable":"Remplacer les approbations d'outils pour cette tâche","toolApprovalsDesc":"Remplace les approbations d'outils au niveau de l'agent pour CETTE tâche uniquement — un remplacement complet, pas une fusion.","responseValidation":"Validation et récupération des réponses","responseValidationDesc":"Contrôlez la manière dont le moteur réagit à un tour vide, tronqué, filtré par le contenu, refusé ou expiré. \\"Fallback\\" substitue un message prédéfini ; \\"Erreur\\" fait échouer le tour ; \\"Avertir\\" journalise et continue ; \\"Ignorer\\" ne fait rien.","rvEnable":"Activer la validation des réponses","rvDisabledInfo":"Les politiques ci-dessous sont enregistrées mais ne prennent effet que lorsque la validation est activée.","rvActionIgnore":"Ignorer","rvActionWarn":"Avertir (journaliser et continuer)","rvActionFallback":"Fallback (message prédéfini)","rvActionError":"Erreur (faire échouer le tour)","rvOnEmpty":"Réponse vide","rvOnEmptyHint":"Le LLM n'a rien renvoyé (vide ou null)","rvOnTruncation":"Réponse tronquée","rvOnTruncationHint":"Réponse coupée (finishReason=LENGTH)","rvOnContentFilter":"Filtré par le contenu","rvOnContentFilterHint":"Réponse bloquée par le filtre de contenu du fournisseur","rvOnRefusal":"Refus","rvOnRefusalHint":"Le LLM a refusé de répondre (détection heuristique)","rvOnStreamingTimeout":"Délai d'attente du streaming","rvOnStreamingTimeoutHint":"Une réponse en streaming a expiré avant de se terminer","streamingTimeoutSeconds":"Délai d'attente du streaming (secondes)","streamingTimeoutSecondsHint":"Remplace la valeur par défaut du moteur (120s). S'applique uniquement au streaming ; vide = utiliser la valeur par défaut.","taskPricing":"Tarification des appels simples","taskPricingDesc":"Tarifie les appels de modèle ordinaires (hors cascade) de cette tâche pour le suivi des coûts et les plafonds de coût du groupe. Sans prix (vide), la contribution est de 0 $."}`),x={labelPlaceholder:"Libellé du lien...",pathPlaceholder:"Chemin du lien...",altPlaceholder:"Texte alternatif...",uriPlaceholder:"URL de l’image...",language:"Langue",langPlaceholder:"ex. en, fr",outputSets:"Jeux de sorties",addOutputSet:"Ajouter un jeu de sorties",noOutputSets:"Aucun jeu de sorties configuré",actionName:"Nom de l'action",timesOccurred:"×",removeOutput:"Supprimer",outputs:"Sorties",alternativeGroup:"Groupe alternatif",addAlternative:"Ajouter une alternative",addOutputGroup:"Ajouter un groupe de sorties",textPlaceholder:"Texte de sortie...",urlPlaceholder:"URL…",delayMs:"Délai (ms)",quickReplies:"Réponses rapides",noQuickReplies:"Aucune Quick Reply",addQuickReply:"Ajouter une Quick Reply",qrValue:"Texte du bouton",qrExpressions:"Expressions",default:"Par défaut",invalidJson:"JSON invalide",buttonTypePlaceholder:"Type de bouton (p. ex. postback)",buttonLabelPlaceholder:"Libellé...",onPressPlaceholder:'{"action":"..."}',subTypePlaceholder:"Sous-type (p. ex. text, email)",inputPlaceholderPlaceholder:"Espace réservé...",inputLabelPlaceholder:"Libellé...",defaultValuePlaceholder:"Valeur par défaut...",minLength:"Longueur min.",minLengthShort:"min",maxLength:"Longueur max.",maxLengthShort:"max",validationMsgPlaceholder:"Message d'erreur de validation...",jsonPlaceholder:'{"key":"value"}'},S={setters:"Définisseurs de propriétés",addSetter:"Ajouter un setter",noSetters:"Aucun Property Setter configuré",removeSetter:"Supprimer",triggerActions:"Actions déclencheurs",noActions:"Aucune action",actionPlaceholder:"ex. greet, fallback",properties:"Propriétés",noProperties:"Aucune propriété",addProperty:"Ajouter une propriété",propName:"Nom de la propriété",propValue:"Valeur / expression",fromPath:"Chemin source",fromObjectPath:"fromObjectPath",override:"Remplacer",propsCount:"prop.",untitled:"(aucune action)",openEditor:"Modifier dans l'éditeur",visibilityTitle:"Quels agents peuvent voir cette propriété longTerm",editValue:"Modifier la valeur",toggleGroup:"Basculer le groupe de propriétés"},P={language:"Langue",langPlaceholder:"ex. en, fr",words:"Mots",addWord:"Ajouter un mot",wordPlaceholder:"ex. bonjour",phrases:"Expressions",addPhrase:"Ajouter une phrase",phrasePlaceholder:"ex. bon matin",regExs:"Expressions régulières",addRegEx:"Ajouter une RegEx",regexPlaceholder:"Expression régulière",expressionPlaceholder:"ex. greeting(hello)",frequency:"Fréquence",none:"Aucune définie"},E={title:"Configuration du parseur",configure:"Configurer",config:"Configuration",appendExpressions:"Ajouter des expressions",includeUnused:"Inclure les expressions inutilisées",includeUnknown:"Inclure les expressions inconnues",dictionaries:"Dictionnaires",builtInDicts:"Dictionnaires intégrés",regularDicts:"Dictionnaires réguliers",addDict:"Ajouter",removeDict:"Supprimer le dictionnaire",noRegularDicts:"Aucun dictionnaire régulier configuré",regularDictLabel:"Dictionnaire régulier",dictUri:"URI de la ressource dictionnaire",dictUriPlaceholder:"eddi://ai.labs.dictionary/dictionarystore/dictionaries/?version=",corrections:"Corrections",distance:"Distance",normalizers:"Normalisateurs",removePunctuation:"Supprimer la ponctuation",regexPattern:"Motif",dict:{integer:"Dictionnaire d'entiers",decimal:"Dictionnaire de décimaux",punctuation:"Dictionnaire de ponctuation",email:"Dictionnaire d'e-mails",time:"Dictionnaire d'expressions temporelles",ordinalNumber:"Dictionnaire de nombres ordinaux"},corr:{levenshtein:"Correction de Levenshtein",phonetic:"Correction phonétique",mergedTerms:"Correction de termes fusionnés"},norm:{punctuation:"Normalisateur de ponctuation",specialCharacter:"Normalisateur de caractères spéciaux",contractedWords:"Normalisateur de mots contractés",allowedCharacter:"Normalisateur de caractères autorisés"}},L={activeConversations:"Conversations actives",eventHistory:"Historique des événements",noActiveQueues:"Aucune conversation active en cours de traitement",payload:"Payload",successRate:"Taux de réussite",tasksPerSec:"tâches/s",totalPending:"en attente",confirmDiscardDescription:"Supprime définitivement la tâche en file morte. Elle ne pourra plus être rejouée. Irréversible.",confirmDiscardTitle:"Supprimer l’entrée de la file morte ?",title:"Tableau de bord du coordinateur",subtitle:"Surveiller le traitement des conversations et gérer les entrées dead-letter",type:"Type de coordinateur",connection:"Connexion",processed:"Tâches traitées",deadLettered:"Lettres mortes",activeQueues:"Files actives",queued:"en file",deadLetterTitle:"File de lettres mortes",noDeadLetters:"Aucune entrée dead-letter",colId:"ID",colConversation:"Conversation",colError:"Erreur",colTime:"Heure",colActions:"Actions",replay:"Rejouer",discard:"Supprimer",purgeAll:"Tout purger",confirmPurge:"Tout purger ?",yes:"Oui",cancel:"Annuler",replaySuccess:"Dead-letter rejouée",replayError:"Échec de la relecture",discardSuccess:"Dead-letter supprimée",discardError:"Échec de la suppression",purgeSuccess:"Toutes les entrées dead-letter supprimées",purgeError:"Échec de la purge",empty:"Aucune donnée du coordinateur disponible",emptyHint:"Le service coordinateur est peut-être encore en cours de démarrage. Les données apparaîtront automatiquement.",lastNSnapshots:"{{count}} derniers instantanés"},k={expand:"Agrandir",expandHint:"Plein écran (Ctrl+Maj+F)",close:"Terminé",lines:"lignes",chars:"caractères",fullscreenTitle:"Éditeur de contenu",fullscreenDescription:"Éditeur plein écran. Échap pour fermer."},R={newLogs:"Nouveaux logs",title:"Journaux",description:"Surveiller le flux de logs en temps réel ou rechercher dans l'historique.",tabLive:"En direct",tabHistory:"Historique",connected:"Connecté",disconnected:"Déconnecté",filterAgent:"ID de l’agent…",filterConversation:"ID de conversation...",filterInstance:"ID d'instance...",allLevels:"Tous les niveaux",pause:"Pause",resume:"Reprendre",clear:"Effacer",search:"Rechercher",waitingForLogs:"En attente de logs...",loadingRecentLogs:"Chargement des logs récents…",noRecentLogs:"Aucune activité récente dans les logs.",noRecentLogsHint:"Les nouveaux logs apparaîtront ici au fur et à mesure qu'ils sont diffusés depuis le backend.",connectingStream:"Connexion au stream...",noHistoryLogs:"Aucun log historique trouvé.",entryCount:"{{count}} entrées",showStacktrace:"Afficher la stacktrace ({{count}} frames)",hideStacktrace:"Masquer la stacktrace",allAgents:"Tous les agents",allConversations:"Toutes les conversations",waitingHint:"Les logs apparaîtront ici au fur et à mesure qu'ils arrivent du backend.",noHistoryHint:"Essayez d'ajuster les filtres ou de rechercher un autre agent ou conversation.",searchConversations:"Rechercher par ID, agent, utilisateur…",stepsCount:"{{count}} étapes",noConversationsFound:"Aucune conversation trouvée",useConversationId:"Utiliser l'ID: {{id}}",searchLogs:"Rechercher les logs…",errors:"erreurs",warnings:"avertissements",infos:"info",debugs:"débogage",filteredCount:"{{shown}} sur {{total}} entrées",copyEntry:"Copier l'entrée de log",export:"Exporter",stateReady:"Prêt",stateActive:"Actif",stateError:"Erreur",stateEnded:"Terminé"},q={loadError:"Impossible de charger les secrets",allAgents:"Tous les agents",allowedAgents:"Agents autorisés",allowedAgentsHint:"Laisser vide pour tous les agents. Ajouter des ID d'agents aide à suivre quels agents utilisent ce secret.",allowedAgentsLabel:"Agents autorisés (facultatif)",allowedAgentsPlaceholder:"Saisir un ID d'agent et appuyer sur Entrée (vide = tous les agents)",deleteKey:"Supprimer {{key}}",hideValue:"Masquer la valeur",newValuePlaceholder:"Nouvelle valeur du secret…",rotate:"Rotation",rotateDesc:"Saisissez la nouvelle valeur. Les références existantes continueront de pointer vers la valeur mise à jour.",rotateKey:"Effectuer la rotation de {{key}}",rotateSuccess:'Secret "{{key}}" pivoté',rotateTitle:'Effectuer la rotation de "{{key}}"',showValue:"Afficher la valeur",title:"Coffre-fort des secrets",description:"Gérer les secrets chiffrés dans le vault. Les valeurs ne sont jamais exposées.",tenantId:"ID du locataire",refresh:"Charger les secrets",create:"Ajouter un secret",createTitle:"Ajouter un secret",keyName:"Nom de la clé",keyNameLabel:"Nom de la clé",keyNamePlaceholder:"ex. apiKey, dbPassword",valueLabel:"Valeur du secret",valuePlaceholder:"Entrer la valeur du secret…",storeWarning:"La valeur sera chiffrée. Elle ne pourra pas être récupérée une fois enregistrée.",store:"Enregistrer le secret",storeSuccess:'Secret "{{key}}" enregistré',deleteSuccess:'Secret "{{key}}" supprimé',created:"Créé",lastAccessed:"Dernier accès",checksum:"Somme de contrôle",actions:"Actions",confirmDeleteTitle:"Supprimer le secret",confirmDeleteMessage:'Êtes-vous sûr de vouloir supprimer définitivement "{{key}}" ? Cette action est irréversible.',empty:"Aucun secret trouvé",emptyHint:"Aucun secret n'est encore enregistré pour le locataire « {{tenant}} ». Cliquez sur « Ajouter un secret » pour en créer un.",vaultUp:"Vault en ligne",vaultDown:"Vault hors ligne",descriptionLabel:"Description (facultatif)",descriptionPlaceholder:"ex. Clé API OpenAI pour la production",descriptionCol:"Description",reference:"Référence",willUseRef:"Référence :",copyRef:"Copier la référence coffre-fort",refCopied:"Copié : {{ref}}",lastRotated:"Dernière rotation",scopeExplanation:"Les secrets sont limités par locataire et partagés entre tous les agents. Référencez-les avec ${vault:keyName}. L'accès est contrôlé par l'auteur de la configuration.",creatingFor:'Stockage dans le locataire "{{tenant}}" — accessible à tous les agents',vaultNotConfigured:"Le coffre-fort de secrets n'est pas configuré",viewDocs:"Voir la documentation",selectAgentFirst:"Veuillez d'abord sélectionner un agent",dangerZoneTitle:"Cycle de vie de la clé de chiffrement",dangerZoneDesc:"Actions de récupération opérationnelle pour les clés cryptographiques du Vault. Utilisez-les pour effectuer une rotation des clés ou récupérer l'accès après un changement de clé maître. À distinguer de la rotation de la valeur d'un secret individuel ci-dessus.",rotateDekTitle:"Effectuer la rotation de la clé de chiffrement (DEK)",rotateDekBlurb:"Sûr — aucun redémarrage. Génère une nouvelle clé de chiffrement des données par locataire et re-chiffre tous les secrets de ce locataire.",rotateDekAction:"Rotation du DEK",rotateDekConfirmTitle:"Effectuer la rotation de la clé de chiffrement (DEK) ?",rotateDekConfirm:"Effectuer la rotation du DEK maintenant",rotateKekTitle:"Effectuer la rotation de la clé maître (KEK)",rotateKekBlurb:"Re-chiffre tous les DEK des locataires avec une nouvelle clé maître. Nécessite la mise à jour de EDDI_VAULT_MASTER_KEY et un redémarrage ensuite.",rotateKekAction:"Rotation de la clé maître",rotateKekConfirmTitle:"Effectuer la rotation de la clé maître (KEK) ?",rotateKekConfirmDesc:"Re-chiffre la clé de chiffrement des données de chaque locataire avec une nouvelle clé maître. Les valeurs des secrets elles-mêmes restent inchangées.",rotateKekConfirm:"Effectuer la rotation de la clé maître maintenant",kekTlsWarning:"Les deux clés sont envoyées dans le corps de la requête. Effectuez cette opération uniquement via une connexion TLS (HTTPS) afin que les clés ne soient pas exposées pendant le transit.",kekOldKeyLabel:"Clé maître actuelle",kekOldKeyPlaceholder:"EDDI_VAULT_MASTER_KEY actuel",kekNewKeyLabel:"Nouvelle clé maître",kekNewKeyPlaceholder:"Nouvelle clé — au moins 8 caractères",kekNewKeyTooShort:"La nouvelle clé maître doit comporter au moins 8 caractères.",kekRestartHint:"Après la rotation, vous devez mettre à jour EDDI_VAULT_MASTER_KEY avec la nouvelle clé et redémarrer EDDI.",kekResultInstruction:"Action requise : définissez la variable d'environnement EDDI_VAULT_MASTER_KEY sur la NOUVELLE clé maître et redémarrez EDDI. Jusqu'à ce que vous le fassiez, l'instance en cours utilise toujours l'ancienne clé en mémoire.",resetTenantTitle:"Réinitialiser le Vault pour ce locataire",resetTenantBlurb:"Dernier recours destructif. Supprime définitivement tous les secrets et le DEK afin que le Vault puisse repartir de zéro — à utiliser après une clé maître perdue ou modifiée.",resetTenantAction:"Réinitialiser le Vault",resetTenantConfirmTitle:"Réinitialiser le Vault pour ce locataire ?",resetTenantConfirm:"Réinitialiser le Vault définitivement",resetConfirmLabel:'Saisissez le nom du locataire "{{tenant}}" pour confirmer',tableTitle_many:'{{count}} secrets dans le locataire "{{tenant}}"',tableTitle_one:'{{count}} secret dans le locataire "{{tenant}}"',tableTitle_other:'{{count}} secrets dans le locataire "{{tenant}}"',rotateDekConfirmDesc_many:`Cela génère une nouvelle clé de chiffrement des données pour le locataire "{{tenant}}" et re-chiffre ses {{count}} secrets. C'est sûr et prend effet immédiatement — aucun redémarrage n'est requis.`,rotateDekConfirmDesc_one:`Cela génère une nouvelle clé de chiffrement des données pour le locataire "{{tenant}}" et re-chiffre ses {{count}} secret. C'est sûr et prend effet immédiatement — aucun redémarrage n'est requis.`,rotateDekConfirmDesc_other:`Cela génère une nouvelle clé de chiffrement des données pour le locataire "{{tenant}}" et re-chiffre ses {{count}} secrets. C'est sûr et prend effet immédiatement — aucun redémarrage n'est requis.`,rotateDekSuccess_many:"Clé de chiffrement pivotée — {{count}} secrets re-chiffrés",rotateDekSuccess_one:"Clé de chiffrement pivotée — {{count}} secret re-chiffré",rotateDekSuccess_other:"Clé de chiffrement pivotée — {{count}} secrets re-chiffrés",kekResultTitle_many:"Clé maître pivotée — {{count}} DEK re-chiffrés",kekResultTitle_one:"Clé maître pivotée — {{count}} DEK re-chiffré",kekResultTitle_other:"Clé maître pivotée — {{count}} DEK re-chiffrés",rotateKekSuccess_many:"Clé maître pivotée — {{count}} DEK re-chiffrés. Mettez à jour EDDI_VAULT_MASTER_KEY et redémarrez.",rotateKekSuccess_one:"Clé maître pivotée — {{count}} DEK re-chiffré. Mettez à jour EDDI_VAULT_MASTER_KEY et redémarrez.",rotateKekSuccess_other:"Clé maître pivotée — {{count}} DEK re-chiffrés. Mettez à jour EDDI_VAULT_MASTER_KEY et redémarrez.",resetTenantConfirmDesc_many:`Cela supprime définitivement tous les {{count}} secrets et la clé de chiffrement des données du locataire "{{tenant}}". Utilisez cette étape de récupération lorsque la clé maître a été perdue ou modifiée et que l'ancienne clé n'est pas disponible. Cette action est irréversible.`,resetTenantConfirmDesc_one:`Cela supprime définitivement tous les {{count}} secret et la clé de chiffrement des données du locataire "{{tenant}}". Utilisez cette étape de récupération lorsque la clé maître a été perdue ou modifiée et que l'ancienne clé n'est pas disponible. Cette action est irréversible.`,resetTenantConfirmDesc_other:`Cela supprime définitivement tous les {{count}} secrets et la clé de chiffrement des données du locataire "{{tenant}}". Utilisez cette étape de récupération lorsque la clé maître a été perdue ou modifiée et que l'ancienne clé n'est pas disponible. Cette action est irréversible.`,resetSecretCount_many:"{{count}} secrets seront définitivement perdus",resetSecretCount_one:"{{count}} secret seront définitivement perdus",resetSecretCount_other:"{{count}} secrets seront définitivement perdus",resetTenantSuccess_many:'Vault réinitialisé pour "{{tenant}}" — {{count}} secrets définitivement supprimés',resetTenantSuccess_one:'Vault réinitialisé pour "{{tenant}}" — {{count}} secret définitivement supprimés',resetTenantSuccess_other:'Vault réinitialisé pour "{{tenant}}" — {{count}} secrets définitivement supprimés'},I={title:"Journal d’audit",description:"Parcourir le registre d'audit immuable pour la conformité et le débogage.",byConversation:"Par conversation",byAgent:"Par agent",conversationIdPlaceholder:"Entrer l'ID de conversation...",agentIdPlaceholder:"Entrer l'agent ID...",versionPlaceholder:"Version (facultatif)",search:"Rechercher",entries:"entrées",totalDuration:"total",totalCost:"coût total",step:"Étape",tasks:"tâches",input:"Entrée",output:"Sortie",llmDetail:"Détail LLM",toolCalls:"Appels d'outils",hmacIntegrity:"Intégrité HMAC vérifiée",empty:"Rechercher des entrées d'audit",emptyHint:"Entrez un ID de conversation ou d'agent ci-dessus pour parcourir l'audit trail.",noResults:"Aucune entrée d'audit trouvée",noResultsHint:"Essayez un autre ID ou vérifiez que la conversation a été traitée.",loadMore:"Charger plus",selectAgent:"Select an agent…",conversations:"conversations",emptyAgent:"Select an agent to view its audit trail",emptyAgentHint:"Choose a deployed agent from the dropdown above to see all its audit records.",export:"Export",autoRefreshToggle:"Toggle auto-refresh (every 10s)",autoRefreshOn:"Auto",autoRefreshOff:"Auto",integrityVerified:"All entries cryptographically signed",integrityVerifiedDesc:"{{count}} of {{total}} entries have HMAC-SHA256 signatures",integrityPass:"SIGNED",integrityPartial:"Partially signed audit trail",integrityPartialDesc:"{{count}} of {{total}} entries have HMAC signatures",integrityNone:"Unsigned audit entries",integrityNoneDesc:"Configure a vault master key to enable automatic HMAC-SHA256 signing on all future audit entries.",signed:"Signed",allSigned:"All signed",decidedBy:"par",automated:"automatisé"},M={cronHelp:"Format à 5 champs : minute heure jour-du-mois mois jour-de-la-semaine",cronEveryMinute:"Chaque minute",cronEveryNMinutes:"Toutes les {{n}} minutes",cronHourlyAt:"Toutes les heures à :{{minute}}",cronEveryNHours:"Toutes les {{n}} heures à :{{minute}}",cronAtTime:"À {{time}}",cronAtMinutePastEveryHour:"À la minute {{minutes}} de chaque heure",cronAtMinutePastHours:"À la minute {{minutes}} de l'heure {{hours}}",cronOnDays:"le {{days}}",cronOnDayOfMonth:"le {{days}} du mois",cronInMonths:"en {{months}}",cronInvalid:"Expression Cron invalide (5 champs attendus)",cronTooFrequent:"Se déclenche plus souvent que le minimum de 60 secondes",failedEmptyHint:"Les exécutions en file morte apparaîtront ici pour être réessayées ou ignorées.",failedSubtitle:"Exécutions ayant échoué définitivement. Réessayez pour remettre en file, ou ignorez pour effacer sans réexécuter.",intervalTooShort:"L'intervalle doit être d'au moins 60 secondes",lastManualFire:"Dernière exécution manuelle",oneTimeHelp:"Se déclenche une seule fois à ce moment, puis se termine. Interprété selon votre heure locale.",outcomePending:"déclenché — en attente du résultat",persistentConversationId:"ID de conversation persistante",persistentConversationIdPlaceholder:"Généré automatiquement si laissé vide",strategyPersistent:"Persistante (réutiliser la même conversation)",fireDeadLettered:"Échec définitif",fireFailed:"Échoué",fireCompleted:"Terminé",title:"Planifications",subtitle:"Gérer les déclencheurs programmés — Cron et Heartbeats",create:"Créer une planification",createTitle:"Créer une planification",createSuccess:"Planification créée avec succès",createError:"Échec de la création de la planification",creating:"Création...",name:"Nom",namePlaceholder:"ex. Vérification quotidienne",triggerType:"Type de déclencheur",cronExpression:"Expression Cron",interval:"Intervalle (secondes)",agentId:"Agent ID",agentIdPlaceholder:"Entrer l'agent ID...",environment:"Environnement",message:"Message",messagePlaceholder:"Message à envoyer à l'agent",conversationStrategy:"Stratégie de conversation",total:"Planifications totales",active:"Actives",failedCount:"Échouées / Dead-Lettered",nextFireLabel:"Prochaine exécution",tableTitle:"Toutes les planifications",empty:"Aucune planification",emptyHint:"Créez une planification pour automatiser les déclencheurs d'agents.",colName:"Nom",colType:"Type",colSchedule:"Planification",colAgent:"Agent",colStatus:"Statut",colNextFire:"Prochaine exéc.",colLastFired:"Dernière exéc.",colActions:"Actions",enable:"Activer",disable:"Désactiver",enabled:"Planification activée",disabled:"Planification désactivée",toggleError:"Échec du changement d'état",fireNow:"Exécuter maintenant",fired:"Planification exécutée avec succès",fireError:"Échec de l'exécution",retry:"Réessayer",retrySuccess:"Planification remise en file",retryError:"Échec de la relance",deleteSuccess:"Planification supprimée",deleteError:"Échec de la suppression",fireHistory:"Historique d'exécution",hitlTimeout:"Délai d'expiration HITL",hitlTimeoutHint:"Délai d'expiration d'approbation HITL géré par le système — résolvez-le via l'approbation de la conversation, pas ici.",statusDisabled:"Désactivée",statusActive:"Active",statusRunning:"En cours",statusExecuting:"Exécution",statusFailed:"Échoué",statusDeadLettered:"Dead-Letter",typeHeartbeat:"Heartbeat",typeOneTime:"Ponctuel",typeCron:"Cron",noFireHistory:"Aucun historique d'exécution",logFired:"Exécuté",logDuration:"Durée",logResult:"Résultat",logAttempt:"Tentative",logCost:"Coût",logConversation:"Conversation",dismissSuccess:"Dead-letter ignoré",dismissError:"Échec de l'ignorance du dead-letter",failedTitle:"Exécutions échouées et dead-letter",failedEmpty:"Aucune exécution échouée",colSchedule2:"Planification",dismiss:"Ignorer",updateSuccess:"Planification mise à jour",updateError:"Échec de la mise à jour de la planification",editTitle:"Modifier la planification",cronNext:"Prochaine",oneTimeAt:"Date et heure",timeZone:"Fuseau horaire",agentVersion:"Version",agentVersionHint:"0 = dernière déployée",envProduction:"Production",envTest:"Test",userId:"ID utilisateur",userIdPlaceholder:"system:scheduler",maxCostPerFire:"Coût max. par exécution",unlimited:"Illimité",strategyNew:"Nouveau (conversation fraîche à chaque exécution)",saving:"Enregistrement...",fireOutcomeFailed:"Échec de l'exécution",unknownError:"erreur inconnue",tabSchedules:"Planifications",tabFailed:"Échoué / Dead-letter",cronPreset:{every15Minutes:"Toutes les 15 minutes",hourly:"Toutes les heures (à l'heure pile)",dailyMorning:"Chaque jour à 09h00",weekdays:"En semaine à 09h00",weeklyMonday:"Chaque semaine (lun 00h00)",monthly:"Chaque mois (le 1er, 00h00)"}},w={title:"Cascade de modèles",escalated:"confiance {{c}} < {{th}}",escalatedShort:"escaladé",accepted:"accepté",reason:{lowConfidence:"confiance faible",timeout:"délai dépassé",error:"erreur",retryableError:"erreur réessayable"}},z={pipelineError:"Échec du chargement de la trace du pipeline",title:"Débogage",tabPipeline:"Pipeline",tabCosts:"Coûts",tabMemory:"Mémoire",tabLogs:"Journaux",tabPrompt:"Prompt",turn:"Tour",latest:"Dernier",noPipeline:"Envoyez un message pour voir la trace du pipeline",processing:"Traitement...",actions:"Actions",confidence:"Confiance",duration:"Durée",cost:"Coût",in:"entrée",input:"Entrée",model:"Modèle",out:"sortie",output:"Sortie",tokens:"Jetons",toolCalls:"Outils"},j={error:"Impossible de charger les données de coût depuis le serveur",thisTurn:"Ce tour",conversationTotal:"Total conversation",tokens:"Tokens",cost:"Coût",duration:"Durée",model:"Modèle",toolCalls:"Appels d'outils",toolUsage:"Utilisation d'outils",cacheStats:"Cache",hitRate:"Taux de réussite",empty:"Envoyez un message pour voir les coûts",in:"entrants",out:"sortants",total:"total",calls:"appels",avgLatency:"Latence moy.",input:"Entrée",output:"Sortie",tokenDistribution:"Répartition des jetons",totalCost:"Coût total",totalTokens:"Jetons totaux",turns:"Tours"},N={error:"Échec du chargement des données de mémoire",title:"Mémoire de conversation",noConversation:"Démarrez une discussion pour inspecter la mémoire",empty:"Aucune donnée de mémoire",properties:"Propriétés",step:"Étape",keys:"clés",input:"Entrée",collapseAll:"Tout réduire",copyKey:"Copier la clé",copyValue:"Copier la valeur",customProperties:"Propriétés personnalisées",expandAll:"Tout développer",noMatches:"Aucune donnée correspondante",search:"Rechercher des clés ou des valeurs…",stepData:"Données d'étape",systemProperties:"Propriétés système"},O={noAgent:"Sélectionnez un agent pour voir les journaux",search:"Rechercher...",pause:"Pause",resume:"Reprendre",clear:"Effacer",waiting:"En attente des journaux...",connected:"Connecté",disconnected:"Déconnecté",logOutput:"Sortie du journal",noMatch:"Aucun journal ne correspond à votre filtre"},H={error:"Échec du chargement des données du prompt",noConversation:"Démarrez une discussion pour inspecter les prompts",noLlm:"Aucune interaction LLM détectée",turn:"Tour",latest:"Dernier",tokens:"Tokens",model:"Modèle",cost:"Coût",copy:"Copier le prompt",copied:"Copié !",replay:"Rejouer ce tour",toolCalls:"Appels d'outils",step:"Étape",roleSystem:"Prompt système",roleUser:"Utilisateur",roleAssistant:"Assistant",roleTool:"Résultat d'outil",collapse:"Réduire",showMore:"Afficher plus",temperature:"Temp"},V={preview:"Aperçu",edit:"Éditer",switchToPreview:"Aperçu du prompt résolu",switchToEdit:"Passer en édition",refresh:"Actualiser",sampleData:"Données d’exemple (sans conversation)",disclaimerReal:"L’aperçu utilise le moteur Qute avec des données de conversation réelles.",disclaimerSample:"L’aperçu utilise le moteur Qute avec des données d’exemple. Sélectionnez une conversation pour les valeurs réelles.",resolvedPrompt:"Prompt résolu",copy:"Copier",copied:"Copié !",error:"Erreur de résolution de modèle",loading:"Résolution du modèle…",availableVariables:"Variables disponibles",copyVariable:"Cliquer pour copier la référence",varProperties:"Propriétés",varMemory:"Mémoire",varContext:"Contexte",varSnippets:"Extraits",varUserInfo:"Info utilisateur",varConversationInfo:"Info conversation",varInput:"Entrée",varConversationLog:"Journal de conversation"},U={title:"Studio Agent",subtitle:"Concevez, testez et déboguez vos agents dans un seul espace",pipeline:"Pipeline",editor:"Éditeur",debug:"Debug & Chat",selectStage:"Cliquez sur une étape pour ouvrir son éditeur",openInStudio:"Ouvrir dans le Studio",loading:"Chargement...",notFound:"Agent introuvable",hideChat:"Masquer le chat",showChat:"Afficher le chat",openEditor:"Ouvrir dans l'éditeur",editorComingSoon:"Intégration de l'éditeur bientôt disponible",noPipeline:"Aucune étape de pipeline",type:{parser:"Analyseur",rules:"Règles",property:"Définisseur de propriétés",apicalls:"Appels API",llm:"LLM",output:"Sortie","output.template":"Modèle de sortie",mcpcalls:"Appels MCP",rag:"Bases de connaissances",dictionary:"Dictionnaire"},landingDescription:"Sélectionnez un agent pour ouvrir l’éditeur visuel, le débogueur et le chat en direct",noAgents:"Aucun agent trouvé — créez-en un sur la page Agents",chat:"Chat",backToAgent:"Retour à l’agent",selectStageHint:"Sélectionnez une extension du pipeline pour afficher et modifier sa configuration",noConfig:"Cette étape n’a pas d’URI de configuration",unsupportedType:"Éditeur non disponible pour ce type d’extension"},F={general:"Général",kbName:"Nom de la base de connaissances",kbNamePlaceholder:"Ex: docs-produit, faq, wiki-interne",kbNameHint:"Utilisé pour référencer cette base dans les tâches LLM",embeddingModel:"Modèle d'Embedding",provider:"Fournisseur",embeddingParams:"Paramètres du fournisseur",embeddingParamsHint:"Clé API (utilisez ${vault:...} pour les secrets), URL, etc.",vectorStore:"Stockage vectoriel",storeType:"Type de stockage",storeParams:"Paramètres de connexion",chunking:"Découpage de documents",chunkStrategy:"Stratégie",chunkSize:"Taille",chunkOverlap:"Chevauchement",overlapHint:"Aide à maintenir le contexte entre les sections",chunkPreview:"Aperçu du découpage",chunkBlocks:"{{count}} sections d'environ {{size}} car, {{overlap}} car de chevauchement",retrievalDefaults:"Options de récupération par défaut",retrievalHint:"Peuvent être surchargés dans chaque tâche LLM.",maxResults:"Résultats max (top-K)",minScore:"Score de similarité min",ingestion:"Ingestion de documents",dropFiles:"Glissez-déposez des documents ici",dropHint:"Fichiers textes ou Markdown",browse:"Parcourir",pasteText:"Ou coller du texte brut",pastePlaceholder:"Collez le contenu ici...",ingestText:"Ingérer le texte",ingestionHistory:"Statut d'ingestion",saveFirstIngestion:"Enregistrez d'abord cette base pour autoriser l'ingestion.",addParam:"Ajout paramètre"},_={welcome:{title:"Bienvenue sur EDDI",subtitle:"Votre centre de commande d'agents IA",introText:"EDDI Manager est votre outil pour créer, tester et gérer vos agents conversationnels.",capabilitiesTitle:"Ce que vous pouvez accomplir",capabilitiesSubtitle:"Tout ce dont vous avez besoin pour des agents en production",buildAgents:"Créer des agents",buildAgentsDesc:"Configurez des agents via l'assistant ou depuis zéro",designWorkflows:"Concevoir des workflows",designWorkflowsDesc:"Éditeur visuel pour processus LLM, appels API et outils",testRealtime:"Tester en temps réel",testRealtimeDesc:"Discutez avec vos agents avec flux de réponses et débogage",monitorOperate:"Gérer et superviser",monitorOperateDesc:"Retrouvez vos quotas, historiques, journaux et secrets au même endroit",readyTitle:"Prêt à commencer ?",readySubtitle:"Vous pourrez relancer cette visite depuis le menu Aide",startTour:"Lancer la visite guidée",exploreOwn:"Explorer par moi-même"},tour:{back:"Retour",next:"Suivant",skip:"Passer",finish:"Terminer",stepOf:"Étape {{current}} sur {{total}}",dashboard:{title:"Visite du Tableau de Bord",step1Title:"Votre centre de pilotage",step1Desc:"La barre latérale s'organise en trois volets: Gestion, Développement et Opérations.",step2Title:"Résumé de plateforme",step2Desc:"Statistiques en temps réel de vos agents, workflows et conversations.",step3Title:"Actions rapides",step3Desc:"Lancez l'assistant de création pour monter un agent en moins de deux minutes.",step4Title:"Personnalisez l'UI",step4Desc:"Basculez vers les thèmes clair/sombre et paramétrez votre langage."},agents:{title:"Visite des Agents",step1Title:"Assistant agent",step1Desc:"L'assistant compile toutes les étapes: Modèles IA, personnalités et outils LLM.",step2Title:"Création manuelle",step2Desc:"Pour les configurations fines basées sur JSON directement interfacées avec le serveur.",step3Title:"Rechercher",step3Desc:"Trouvez rapidement vos agents par nom via un filtre textuel simple.",step4Title:"Flotte",step4Desc:"Parcourez chaque carte Agent pour accéder au déploiement, au chat ou au pipeline de workflow de l'agent."},workflows:{title:"Visite des Workflows",step1Title:"Pipeline d'exécution",step1Desc:"Créer une cascade définie de tâches telles que des règles ou des API HTTP.",step2Title:"Connexion aux agents",step2Desc:"Liez chaque agent à un workflow pour valider son comportement conversationnel.",step3Title:"Trier la liste",step3Desc:"Basculez de la grille aux tableaux et explorez les ressources connectées."},chat:{title:"Visite de Chat",step1Title:"Déployer puis parler",step1Desc:"Lancez des échanges concrets avec vos LLM.",step2Title:"Diffusion temps réel",step2Desc:"Activez le Token Streaming pour apprécier des retours immédiats, mot à mot.",step3Title:"Historique des sessions",step3Desc:"Relisez toutes les conversations inachevées ou archivées pour audit direct.",step4Title:"Exécution d'outils",step4Desc:"Soumettez une requête; le LLM résoudra automatiquement l'appel d'outil nécessaire."},resources:{title:"Visite des Ressources",step1Title:"Bibliothèque",step1Desc:"Éditez individuellement les briques fonctionnelles d'un workflow Agent.",step2Title:"Configuration LLM",step2Desc:"Intégrez des modèles précis de base de connaissances et de Cascade avancée LLM.",step3Title:"Règles",step3Desc:"Utilisez le formateur JSON de réponses ou reliez un flux à de simples déclarations If/Else."},conversations:{title:"Visite des Conversations",step1Title:"Moteur de recherche",step1Desc:"Retrouvez n'importe quel texte ou identifiant issu du client conversationnel.",step2Title:"Triage",step2Desc:"Isolez les dialogues terminés, actifs ou en défaut pour résolution.",step3Title:"Mode débug",step3Desc:"La lecture fine d'une conversation déverrouille une suite de debugging des prompts d'agent LLM."},groups:{title:"Visite des Groupes",step1Title:"Création",step1Desc:"Connectez vos différents agents dans des clusters de discussion collectifs.",step2Title:"Filtrage",step2Desc:"Identifiez rapidement l'ensemble de vos hubs multi-agents.",step3Title:"Contrôle global",step3Desc:"Affichez, supprimez et réorganisez vos environnements de concert LLM."},logs:{newLogs:"Nouveaux logs",title:"Visite des Logs Systèmes",step1Title:"Surveiller",step1Desc:"Supervisez vos instances en basculant des flux live aux bases archivées.",step2Title:"Niveaux",step2Desc:"Dédiez votre vigilance sur les rapports Warning ou Erreur.",step3Title:"Exporter",step3Desc:"Générez un fichier complet selon vos tris et gardez une trace de développement LLM."},secrets:{title:"Visite des Secrets",step1Title:"Intégration",step1Desc:"Acheminez en sécurité des Clés API vers vos instances d'outils d'Agent.",step2Title:"Localisation Locataire",step2Desc:"Ajustez vos informations pour conserver une sécurité propre à chaque Tenant Cloud.",step3Title:"Injection dynamique",step3Desc:"Équipez un noeud complet sans trahir une seule information secrète via ${vault:...}."},audit:{title:"Visite de l'Audit Ledger",step1Title:"Trace Immutable",step1Desc:"Inspectez toutes les manipulations passées, classées par Conversation ou Agent.",step2Title:"Investigation",step2Desc:"Vérifiez que toutes les communications de plateforme sont validées et conformes.",step3Title:"Extraction Complète",step3Desc:"Copiez tous ces rapports au format JSON structuré certifiant de bonnes pratiques."},schedules:{title:"Visite des Plannings",step1Title:"Job d'automatisation",step1Desc:"Éveillez et exécutez de manière chronométrée vos tâches asynchrones d'Agent.",step2Title:"Supervision Cron",step2Desc:"Constatez globalement toutes les pannes chronologiques via l'utilitaire d'erreurs.",step3Title:"Pilote temps réel",step3Desc:"Démarrez et interrompez une activité en direct aux horaires des serveurs intégrés."},quotas:{saveSuccess:"Quota enregistré",resetSuccess:"Compteurs d’usage réinitialisés",resetConfirmDesc:"Met immédiatement à zéro tous les compteurs d’usage (conversations, appels API, coût mensuel) pour le locataire « default ». Irréversible.",resetConfirmTitle:"Réinitialiser les compteurs d’usage ?",title:"Visite des Quotas",step1Title:"Règlements limites",step1Desc:"Plafonnez de potentielles brèches financières en plafonnant un compte Agent spécifique.",step2Title:"Usage temps réel",step2Desc:"Pistez combien d'appels d'outils un projet spécifique engendre.",step3Title:"Règles actives",step3Desc:"Protégez tout dépassement via un système proactif limitateur."},coordinator:{title:"Visite du Coordinateur",step1Title:"Interface temps réel",step1Desc:"Unifiez la totalité de l'orchestrateur au serveur frontal visuel.",step2Title:"Déroulé de queue",step2Desc:"Administrez des paquets colossaux d'actions serveurs dispatchés en ligne.",step3Title:"Lettres mortes",step3Desc:"Restituez d'anciennes interruptions, retirez-les ou soumettez-les à un exécuteur pour validation."},orphans:{confirmPurgeAll:"Supprimer définitivement TOUTES les {{count}} ressources orphelines ? Le serveur purge tout — votre sélection n’est pas appliquée. Action irréversible.",title:"Visite des Objets Orphelins",step1Title:"Exploration complète",step1Desc:"Localisez instantanément vos données devenues errantes au sein des configurations.",step2Title:"Poubelle numérique",step2Desc:"Récupérez les agents signalés mais abandonnés des derniers nettoyages.",step3Title:"Purge globale",step3Desc:"Détruisez irrémédiablement d'inutiles enregistrements de mémoire saturant ce cloud LLM."}},help:{title:"Aide & Visite",platformTour:"Démarrer la visite guidée",resetAll:"Réinitialiser les visites",resetConfirm:"Remettre à zéro l'historique des visites guidées ?"},offer:{message:"Nouveau par ici ? Suivez la {{page}}",accept:"Afficher",dontAsk:"Ne plus demander"}},B={status:"État de la plateforme",online:"En ligne",offline:"Hors ligne",checking:"Vérification…",connected:"Connecté",disconnected:"Déconnecté",instance:"Instance",latency:"Latence",lastChecked:"Dernière vérification",justNow:"à l'instant",secondsAgo:"il y a {{count}}s"},G={live:"En direct",reconnecting:"Reconnexion…"},W={title:"Nouveau {{type}}",newAgent:"Nouvel Agent",newGroup:"Nouveau Groupe",quickCreate:"Création rapide",quickCreateTitle:"Création rapide de {{type}}",quickCreateDesc:"Définissez un nom, puis configurez plus tard.",guidedSetup:"Assistant de configuration",guidedSetupDesc:"Configuration pas à pas : fournisseur LLM, prompts et déploiement."},K=JSON.parse(`{"actionConflict":"Une autre opération est encore en cours, ou cette discussion n'accepte plus cette action. Veuillez réessayer.","actionTimeout":"Un agent membre n'a pas répondu à temps. Veuillez réessayer.","actionUnreachable":"Un agent membre n'a pas pu être joint. Veuillez réessayer.","addMember":"Ajouter un membre","allowHtmlTooltip":"Lorsqu'activé, affiche le contenu HTML (nettoyé). À utiliser uniquement avec des agents de confiance.","askQuestion":"Posez une question à débattre par le groupe…","assignAgents":"Attribuez des agents à chaque rôle de membre.","blankDesc":"Tout configurer manuellement.","characters":"caractères","chooseTemplate":"Choisissez un modèle ou partez de zéro.","closeConfirmDescription":"La clôture met définitivement fin à toutes les conversations des membres et nettoie les agents éphémères. Aucune relance ni continuation n'est ensuite possible. Cette action est irréversible.","composeQuestion":"Composer la question","continueButton":"Continuer","continueHint":"Réexécute toutes les phases comme un nouveau tour ; chaque agent conserve la mémoire des tours précédents. Impossible d'ajouter des pièces jointes à une continuation.","continuePlaceholder":"Poursuivez cette discussion avec une suite…","continueStreamStarted":"Reprise démarrée — diffusion en direct","count":"{{count}} groupes","createSuccess":"Groupe créé avec succès","discussing":"Les agents discutent…","enterToSend":"Entrée pour envoyer","expandInput":"Agrandir la saisie","followupHint":"Posez une relance directe à un membre. L'agent conserve tout le contexte de la discussion ; l'échange est ajouté à la transcription.","followupPlaceholder":"Posez une question de relance à ce membre…","inputDisabledApproval":"En attente d'approbation…","inputDisabledClosed":"Cette discussion est fermée","inputDisabledCompleted":"Discussion terminée","inputDisabledEnded":"Cette discussion est terminée","inputDisabledInProgress":"Discussion en cours…","membersCount":"{{count}} membres","moderator":"Modérateur (pour la synthèse)","namePlaceholder":"ex. Conseil consultatif","newDiscussion":"Nouvelle discussion","newShort":"Nouveau","noModerator":"Aucun modérateur","noResponse":"Aucune réponse","contentTruncated":"[Contenu tronqué]","protocolMaxRetries":"Tentatives max.","protocolMaxRounds":"Tours max.","protocolOnFailure":"En cas d'échec","protocolSettings":"Protocole","protocolTimeout":"Délai d'expiration","protocolUnavailable":"Indisponible","question":"Question","readyToDiscuss":"Prêt à discuter","responding":"répond…","reviewMemberRoster":"Liste des membres","reviewMembers":"Membres","reviewModerator":"Modérateur","reviewNoModerator":"Aucun (synthèse automatique désactivée)","reviewRounds":"Tours max.","reviewTimeout":"Délai d'attente agent","reviewUnassigned":"Non assigné","reviewUnassignedHint":"Revenez en arrière pour attribuer des agents avant de créer.","selectAgent":"Sélectionner un agent…","selectOrStart":"Sélectionnez une discussion passée dans l'historique, ou saisissez une question ci-dessous pour en démarrer une nouvelle.","shiftEnter":"nouvelle ligne","skipped":"Ignoré","sortByMembers":"Trier par membres","sortByStyle":"Trier par style","speakingCount":"{{count}} en train de parler","startBlank":"Partir de zéro","startDiscussion":"Discuter","stateCompleted":"Terminé","stateCreated":"Créé","stateFailed":"Échoué","stateSynthesizing":"Synthèse en cours…","stepBasics":"Bases","stepMembers":"Membres","stepReview":"Vérification","stepTemplate":"Modèle","submitShortcut":"Ctrl+Entrée pour envoyer","synthesis":"Synthèse","synthesizing":"Le modérateur synthétise…","hitlSelectPhase":"Sélectionnez au moins une phase nécessitant une approbation.","empty":"Aucun groupe","emptyDescription":"Les groupes permettent à plusieurs agents de collaborer lors de discussions structurées.","createGroup":"Créer un groupe","unnamed":"Groupe sans nom","count_one":"{{count}} groupe","count_other":"{{count}} groupes","confirmDelete":"Supprimer ce groupe ?","confirmDeleteDesc":"La configuration du groupe sera définitivement supprimée.","duplicateSuccess":"Groupe dupliqué","noDescription":"Aucune description","members":"membres","discussionStyle":"Style de discussion","maxRounds":"Tours max.","styleTaskForce":"Task Force","stateAwaitingApproval":"En attente d'approbation","stateCancelled":"Annulé","phasePlan":"Planification","phaseExecute":"Exécution","phaseVerify":"Vérification","preConfiguredTasks":"Tâches préconfigurées","dynamicAgents":"Agents dynamiques","dynamicCreation":"Création","dynamicRecruitment":"Recrutement","dynamicDelegation":"Délégation","lifecyclePolicy":"Cycle de vie","allowedProviders":"Fournisseurs","liveIndicator":"● LIVE","htmlToggle":"HTML","memberTypeGroup":"Groupe","moderatorBadge":"⭐ Mod","styleColumn":"Style","membersColumn":"Membres","memberOverflow":"+{{count}} de plus","defaultLabel":"Groupe","liveDiscussion":"En direct","state":{"CREATED":"Créé","IN_PROGRESS":"En cours","SYNTHESIZING":"Synthèse en cours","COMPLETED":"Terminé","FAILED":"Échoué","ERROR":"Erreur","AWAITING_APPROVAL":"En attente d'approbation","CANCELLED":"Annulé","AWAITING_HUMAN_INPUT":"En attente d'un membre","CLOSED":"Fermée"},"preConfiguredTasksCount":"Tâches préconfigurées ({{count}})","entryType":{"QUESTION":"Question","OPINION":"Opinion","CRITIQUE":"Critique","REVISION":"Révision","CHALLENGE":"Objection","DEFENSE":"Défense","ARGUMENT":"Argument","REBUTTAL":"Réfutation","SYNTHESIS":"Synthèse","ERROR":"Erreur","SKIPPED":"Ignoré","PLAN":"Plan","TASK_RESULT":"Résultat de tâche","VERIFICATION":"Vérification","FOLLOW_UP":"Relance","ABSTAINED":"Abstention","DISSENT":"Désaccord","CONVERGENCE":"Convergence","FACILITATION":"Facilitation","VOTE":"Vote","PROPOSAL":"Proposition","BARGAIN":"Contre-offre","HUMAN_INPUT":"Apport humain","RETRO":"Rétrospective","BID":"Offre"},"flow":{"Opinion":"Opinion","Discussion":"Discussion","Synthesis":"Synthèse","Critique":"Critique","Revision":"Révision","Challenge":"Objection","Defense":"Défense","Independent":"Indépendant","AnonymousSharing":"Partage anonyme","Revised":"Révisé","ProOpening":"Ouverture pour","ConOpening":"Ouverture contre","Rebuttals":"Réfutations","Judgment":"Jugement","Plan":"Planification","Execute":"Exécution","Verify":"Vérification","Synthesize":"Synthétiser"},"lifecycle":{"EPHEMERAL":"éphémère","KEEP_DEPLOYED":"maintenir déployé","UNDEPLOY_ONLY":"retirer uniquement","AGENT_DECIDES":"l'agent décide"},"dynamicMax":"✓ (max {{count}})","dynamicMaxPerTask":"✓ (max {{count}}/tâche)","protocolMaxTurns":"Tours max.","speakingOrderTooltip":"Ordre de parole : #{{order}}","allowedModels":"Modèles","inheritParentModel":"Hériter du modèle","enabled":"Activé","disabled":"Désactivé","turnOrderSequential":"séquentiel","turnOrderParallel":"parallèle","requiresApproval":"approbation requise","item":"élément","items":"éléments","contextScope":{"NONE":"indépendant","FULL":"contexte complet","LAST_PHASE":"dernière phase","ANONYMOUS":"anonyme","OWN_FEEDBACK":"propre feedback","TASK_ONLY":"tâche uniquement","TASK_WITH_DEPS":"tâche + dépendances"},"configuration":"Configuration","deleteGroupOnly":"Supprimer le groupe uniquement","deleteGroupOnlySuccess":"Groupe supprimé (agents conservés)","deleteGroupOnlyWarning":"Cela supprimera le groupe. Tous les agents membres seront conservés.","deleteGroupAndAgents":"Supprimer le groupe + tous les agents","deleteWithMembersSuccess":"Groupe et tous les agents membres supprimés (suppression douce)","deleteWithMembersWarning":"Cela effectuera une suppression douce du groupe et de tous les {{count}} agents membres. Ils pourront être récupérés.","hideDiscussions":"Masquer le panneau de discussions","showDiscussions":"Afficher le panneau de discussions","hideConfig":"Masquer le panneau de configuration","showConfig":"Afficher le panneau de configuration","hitlSection":"Approbation humaine","hitlApprovalPoints":"Approbation à","hitlOnTaskRejection":"En cas de rejet","hitlEdit":"Modifier","hitlSaved":"Paramètres d'approbation enregistrés","hitlEnable":"Exiger une approbation humaine","hitlApprovalPhases":"Phases nécessitant une approbation","hitlNotConfigured":"Aucune barrière d'approbation configurée — cliquez sur Modifier pour exiger une approbation humaine.","driftTitle":"La configuration du groupe a changé pendant la pause","driftRecovery":"La reprise a été interrompue car les phases du groupe ont changé. La discussion est toujours en attente d'approbation — corrigez la configuration (Modifier, dans le panneau Configuration) et approuvez à nouveau, ou annulez-la.","discussionStarted":"Discussion démarrée — diffusion en direct","continueStarted":"Nouveau tour démarré","followupSent":"Relance envoyée","discussionClosed":"Discussion clôturée","backToGroups":"Retour aux groupes","noDiscussions":"Aucune discussion pour le moment","askBelow":"Posez une question ci-dessous pour commencer","exitFullscreen":"Quitter le plein écran","enterFullscreen":"Plein écran","discussions":"Discussions","discussionComplete":"Discussion terminée","continueDiscussion":"Continuer (nouveau tour)","followupMember":"Relancer un membre","closeDiscussion":"Clôturer la discussion","currentRound":"Actuellement au tour","startNextRound":"Démarrer le tour suivant","selectMember":"Sélectionner un membre","sendFollowup":"Envoyer la relance","closeConfirmTitle":"Clôturer cette discussion ?","closeConfirmButton":"Clôturer la discussion","closeConfirmDismiss":"Retour","count_many":"{{count}} groupes","protocolMaxCost":"Plafond de coût","protocolOnCostExceeded":"À l'atteinte","costAbort":"Interrompre","costSynthesize":"Synthétiser maintenant","deliberationSection":"Délibération","recordDissents":"Avis minoritaire","agentFiledTasks":"Tâches créées par les agents","agentFiledCaps":"Limites","agentFiledCapsValue":"{{perDiscussion}} / discussion · {{perTurn}} / tour","moderatorlessWarning":"Réservé à un modérateur que ce groupe n'a pas : {{phases}}. Le premier membre par ordre de parole prendra le relais.","roleCoverageWarning":"Aucun membre ne porte le rôle « {{role}} » : dans {{phases}}, tous les membres prendront la parole.","delegationDepth":"Profondeur max.","delegationTimeout":"Délai du délégué","secondsShort":"{{seconds}}s","delegationTargets":"Liste autorisée","phaseBehaviour":"Comportement des phases","phaseBehaviourNone":"Ni abstention ni convergence configurées — cliquez sur Modifier pour autoriser les passes ou arrêter une phase répétée dès l'accord.","abstentionShort":"abstention","convergenceShort":"convergence ≥{{threshold}}","phasesSaved":"Réglages de phase enregistrés","phasesNoneToEdit":"Ce groupe ne définit aucune phase. Choisissez un style de discussion, ou ajoutez des phases à la configuration, avant de régler leur comportement.","phaseRepeats":"×{{repeats}}","allowAbstention":"Autoriser l'abstention","allowAbstentionHelp":"Un membre peut renoncer à ajouter du nouveau ce tour-ci plutôt que de se répéter.","convergenceEnable":"Arrêter tôt en cas de convergence","convergenceHelp":"Un juge compare chaque répétition à la précédente et met fin à la phase dès que les membres cessent d'évoluer. Coûte un appel par répétition.","convergenceNeedsRepeats":"Disponible uniquement sur une phase répétée — un passage unique n'a rien à comparer.","convergenceMinRepeats":"Répétitions min.","convergenceThreshold":"Seuil","convergenceJudge":"Juge","judgeModerator":"Modérateur","judgeService":"Service","judgeServiceNote":"Accepté mais pas encore branché — le moteur bascule sur le modérateur et journalise un avertissement.","convergenceReached":"Convergé","convergenceChecked":"Contrôle de convergence","convergenceScore":"accord {{score}}","decisionWinner":"Vainqueur : {{winner}}","decisionTie":"Égalité","decisionDecidedAt":"Décidé lors de {{phase}}","decisionUnparsed":"La réponse du juge n'a pas pu être lue comme un verdict structuré : elle figure telle quelle ci-dessous et la conclusion reste en prose.","minorityReport":"Avis minoritaire ({{total}})","attachFiles":"Joindre des fichiers","attachmentLimit":"Au plus {{max}} pièces jointes par discussion","attachmentTooLarge":"{{name}} est trop volumineux pour être joint","attachmentReadFailed":"Impossible de lire {{name}}","removeAttachment":"Retirer {{name}}","decisionType":{"VERDICT":"Verdict","VOTE":"Vote","AGREEMENT":"Accord","AWARD":"Attribution","NONE":"Aucune décision structurée"},"abstainedBody":"N'a rien ajouté de nouveau ce tour-ci.","convergenceSkipped_one":"· {{count}} tour supplémentaire ignoré","convergenceSkipped_many":"· {{count}} tours supplémentaires ignorés","convergenceSkipped_other":"· {{count}} tours supplémentaires ignorés","attachmentTotalTooLarge":"Les pièces jointes dépassent la taille totale autorisée","convergenceInert":"Configuré, mais cette phase ne s'exécute qu'une fois — le juge ne pourra jamais tourner. Retirez le réglage, ou donnez plus d'une répétition à la phase.","questionTooLong":"Une question ne peut pas dépasser {{max}} caractères","charactersOverLimit":"{{current}} / {{max}} caractères","advancedSection":"Collaboration avancée","artifactConfigLabel":"Artefacts partagés","artifactConfigValue":"{{count}} max. par discussion","artifactCreatedBadge":"{{name}} créé (v{{version}})","artifactDraft":"Brouillon","artifactFinal":"Final","artifactLastEdited":"Dernière modification par {{agent}}","artifactUpdatedBadge":"{{name}} mis à jour (v{{version}})","artifactsTitle":"Artefacts partagés ({{count}})","concessionLedgerTitle":"Registre des concessions","contextWindowLabel":"Fenêtre de transcription","contextWindowValue":"{{count}} dernières entrées{{summarized}}","facilitatorLabel":"Facilitateur","facilitatorMoves":"Actions autorisées","humanMemberConfigLabel":"Délai du tour humain","humanTurnRequestedAt":"Demandé","humanTurnResponsePlaceholder":"Votre réponse","humanTurnSubmit":"Envoyer","humanTurnSubmitted":"Votre réponse a été enregistrée","humanTurnSubmitting":"Envoi en cours…","humanTurnTimeout":"Délai","humanTurnTitle":"C'est à votre tour, {{name}}","inputDisabledHumanTurn":"En attente du tour d'un membre…","memberTypeHuman":"Humain","negotiationAcceptedBy":"Accepté par : {{names}}","negotiationGaveUp":"a cédé","negotiationInReturnFor":"en échange de","negotiationOpen":"Ouvert","negotiationRound":"Manche {{round}}","negotiationSuperseded":"Remplacé","negotiationTableTitle":"Table de négociation","notSet":"non défini","retroConfigLabel":"Enseignements de la rétrospective","retroConfigValue":"{{perRun}}/exécution, {{stored}} max. stockées","stateAwaitingHumanInput":"En attente d'un membre","summarized":"résumé","transcriptWindowed":"Les {{count}} premières entrées de la transcription ont été condensées en un résumé glissant afin de limiter le contexte des tours suivants. Survolez pour voir le résumé.","voteMethod":"Méthode","voteMethodApproval":"Vote d'approbation","voteMethodMajority":"Majorité","voteOptionsExplicit":"Liste explicite","voteOptionsLastSynthesis":"Extraire de la dernière synthèse","voteOptionsList":"Options (une par ligne)","voteOptionsSource":"Options du scrutin","voteQuorum":"Quorum","voteTieHuman":"Décision humaine (pas encore disponible)","voteTieModerator":"Le modérateur décide","voteTieNoDecision":"Aucune décision","voteTiePolicy":"En cas d'égalité","voteWeightByConfidence":"Pondérer par confiance","waitIndefinitely":"Attendre indéfiniment","advancedSaved":"Paramètres de collaboration enregistrés","advancedNotConfigured":"Aucune fenêtre de transcription, mémoire rétro, artefact partagé ni animateur configuré — cliquez sur Modifier pour les activer.","contextWindowHint":"Borne le contexte de chaque tour dans les longues discussions en repliant les entrées anciennes dans un résumé glissant.","contextWindowEntries":"Entrées récentes conservées intégralement","contextWindowSummarize":"Résumer ce qui sort de la fenêtre","contextWindowTruncateNote":"Les entrées anciennes sont remplacées par un simple marqueur « N entrées antérieures omises ».","retroConfigHint":"Permet à une phase rétro d'inscrire des enseignements dans la mémoire de l'équipe, repris dans les discussions suivantes.","retroPerRun":"Par exécution","retroStored":"Maximum stocké","artifactConfigHint":"Permet aux membres de co-rédiger des documents qui survivent au tour où ils ont été écrits.","artifactsPerDiscussion":"Maximum par discussion","facilitatorHint":"Un agent qui intervient à chaque point de contrôle et choisit un seul mouvement dans la liste autorisée — jamais un orchestrateur libre.","facilitatorAgent":"Agent animateur","facilitatorPickAgent":"Sélectionner un agent…","facilitatorAgentRequired":"Choisissez l'agent qui animera.","facilitatorCheckAfter":"Point de contrôle","facilitatorCheckpoint":{"EACH_PHASE":"Après chaque phase","EACH_REPEAT":"Après chaque tour au sein d'une phase"},"facilitatorMove":{"CONTINUE":"Continuer","END_PHASE":"Terminer la phase par anticipation","EXTEND_PHASE":"Prolonger la phase","CALL_VOTE":"Convoquer un vote","RECRUIT":"Recruter un membre","ESCALATE_HUMAN":"Escalader vers un humain"},"facilitatorNoMove":"Autorisez au moins un mouvement, ou désactivez l'animateur.","facilitatorMidPhaseNeedsRepeat":"Terminer ou prolonger une phase agit en cours de phase : cela exige le point de contrôle par tour.","facilitatorEscalateTo":"Escalader vers (identifiant principal)","facilitatorEscalateRequired":"L'escalade met la discussion en pause pour quelqu'un — précisez qui.","facilitatorMaxMoves":"Mouvements max. par discussion","assignmentModeLabel":"Attribution des tâches","assignmentModeRole":"Par rôle (le planificateur attribue)","assignmentModeBid":"Par enchère (les membres enchérissent, la meilleure confiance l'emporte)","assignmentModeBidShort":"Par enchère","assignmentModeRoleHint":"Le planificateur ou la configuration attribue chaque tâche, ou à tour de rôle.","assignmentModeBidHint":"Revient à l'attribution par rôle lorsqu'une enchère n'est pas rentable : moins de deux enchérisseurs ou de deux tâches ouvertes, ou budget de tours insuffisant.","contextWindowSummarizer":"Résumeur","contextWindowNoSummarizer":"Aucun","contextWindowModel":"Modèle de résumé","contextWindowModelPlaceholder":"modèle","contextWindowSummarizerMissing":"Sans modèle de résumé, le débordement retombe silencieusement sur le simple marqueur de troncature.","facilitatorMaxMovesCeiling":"Au plus {{max}} — l'animateur est une intervention bornée, pas un orchestrateur.","reviewUnassignedWarning_many":"{{count}} membres non assignés","reviewUnassignedWarning_one":"{{count}} membre non assigné","reviewUnassignedWarning_other":"{{count}} membres non assignés","retroRecordedBadge_many":"{{phase}} : {{count}} enseignements enregistrés dans la mémoire d'équipe","retroRecordedBadge_one":"{{phase}} : {{count}} enseignement enregistré dans la mémoire d'équipe","retroRecordedBadge_other":"{{phase}} : {{count}} enseignements enregistrés dans la mémoire d'équipe","artifactRevisions_many":"{{count}} révisions précédentes","artifactRevisions_one":"{{count}} révision précédente","artifactRevisions_other":"{{count}} révisions précédentes","styles":{"ROUND_TABLE":{"label":"Table ronde","flow":"Chacun donne son point de vue, puis s'appuie sur les autres au fil des tours"},"PEER_REVIEW":{"label":"Revue par les pairs","flow":"Chacun répond seul, critique les autres, puis révise sa réponse"},"DEVIL_ADVOCATE":{"label":"Avocat du diable","flow":"Un membre attaque la position du groupe, les autres la défendent"},"DELPHI":{"label":"Tours anonymes","flow":"Chacun répond anonymement et révise à chaque tour, sans se caler sur le premier intervenant"},"DEBATE":{"label":"Débat pour/contre","flow":"Un camp plaide pour, l'autre contre, puis viennent les répliques et le verdict"},"TASK_FORCE":{"label":"Groupe de travail","flow":"Le modérateur planifie, les membres traitent les tâches en parallèle, les résultats sont vérifiés"},"NEGOTIATION":{"label":"Négociation","flow":"Les parties échangent des propositions jusqu'à l'accord ; un arbitre n'intervient qu'à défaut"},"CUSTOM":{"label":"Déroulé personnalisé","flow":"Des phases que vous définissez vous-même"}},"unsupportedStyle":"Ce serveur ne prend pas en charge {{style}}. Choisissez un autre cadre pour continuer."}`),J={title:"Tableau des tâches",pending:"En attente",inProgress:"En cours",completed:"Terminé",verified:"Vérifié",failed:"Échoué",assignedTo:"Assigné à {{name}}",dependsOn:"Dépend de : {{tasks}}",emptyTitle:"En attente du plan de tâches",emptyDescription:"Le modérateur créera un plan de tâches une fois la discussion commencée.",emptyState:"Le plan de tâches apparaîtra ici lorsque le modérateur le créera",unassigned:"Non assigné",progress:"{{done}} sur {{total}} tâches terminées",verificationPassed:"Réussi",verificationFailed:"Échoué",showMore:"afficher plus",showLess:"afficher moins",awaitingApproval:"En attente d'approbation",filedBy:"Créée par {{agent}}",wonByBid:"Remporté par enchère — {{confidence}} % de confiance, {{complexity}}"},Q={title:"Mémoire utilisateur",subtitle:"Parcourir et gérer les souvenirs persistants stockés par les agents",userIdPlaceholder:"Saisir l’ID utilisateur…",searchPlaceholder:"Rechercher dans les souvenirs…",enterUserId:"Saisissez un ID utilisateur pour parcourir ses souvenirs",totalEntries:"Total des entrées",preferences:"Préférences",facts:"Faits",conflicts:"Conflits",cat_all:"Tout",cat_preference:"Préférences",cat_fact:"Faits",cat_context:"Contexte",deleteAll:"Tout supprimer",deleteAllTitle:"Supprimer tous les souvenirs",deleteAllDesc:"Tous les souvenirs de cet utilisateur seront définitivement supprimés. Cette action est irréversible.",deleteAllConfirm:"Tout supprimer",entryDeleted:"Entrée supprimée",allDeleted:"Tous les souvenirs de l’utilisateur supprimés",noResults:"Aucune entrée trouvée",value:"Valeur",sourceAgent:"Agent source",accessCount:"Accès",created:"Créé",updated:"Mis à jour",sourceConversation:"Conversation source",conflicted:"En conflit"},Y={title:"Propriétés utilisateur",subtitle:"Parcourir et gérer les propriétés longTerm stockées par utilisateur",userIdPlaceholder:"Saisir l’ID utilisateur…",searchPlaceholder:"Filtrer les propriétés…",enterUserId:"Saisissez un ID utilisateur pour voir ses propriétés",key:"Clé",type:"Type",value:"Valeur",deleteAll:"Tout supprimer",deleteAllTitle:"Supprimer toutes les propriétés",deleteAllDesc:"Toutes les propriétés de cet utilisateur seront définitivement supprimées.",deleted:"Propriétés supprimées",noResults:"Aucune propriété trouvée",showingCount:"{{count}} propriétés"},$={agentId:"ID de l'agent",environment:"Environnement",title:"Déclencheurs d’agents",subtitle:"Associer des intentions aux déploiements d’agents pour le routage automatique",create:"Nouveau déclencheur",createTitle:"Créer un déclencheur",editTitle:"Modifier le déclencheur",intent:"Intention",deployments:"Déploiements d’agents",addDeployment:"Ajouter un agent",agents:"agents",empty:"Aucun déclencheur configuré",created:"Déclencheur créé",updated:"Déclencheur mis à jour",deleted:"Déclencheur supprimé",deleteTitle:"Supprimer le déclencheur",deleteDesc:"Supprimer définitivement le déclencheur pour l’intention « {{intent}} » ?",searchPlaceholder:"Filtrer par intention ou ID d’agent…"},Z={agentCount:"Agents",confidence:"Confiance",partialError:"Certaines requêtes de compétences ont échoué",registryOverview:"Vue d'ensemble du registre",skillName:"Compétence",skills:"compétences",title:"Découverte des capacités",subtitle:"Rechercher des agents par compétences et capacités déclarées",searchPlaceholder:"Rechercher des compétences…",strategyHighest:"Confiance la plus élevée",strategyAll:"Tous les résultats",registeredSkills:"Compétences enregistrées",noSkills:"Aucune compétence trouvée",matchingAgents:"Agents correspondants",noMatches:"Aucun agent trouvé pour cette compétence"},X={title:"Exporter l'agent",loading:"Chargement de l'arbre de ressources…",selectResources:"Sélectionner les ressources à exporter",required:"Requis",snippets:"Extraits",allSelected:"Toutes les ressources sélectionnées",countSelected:"{{count}} sur {{total}} ressources sélectionnées",exportSelected:"Exporter la sélection"},ee={title:"Importer un agent",dropZone:"Déposez un fichier .zip ici ou cliquez pour parcourir",dropZoneHint:"Archive d'agent exportée (.zip)",strategyLabel:"Stratégie d'import",createNew:"Créer comme nouvel agent",createNewDesc:"Crée une copie avec de nouveaux identifiants. Idéal pour un premier import.",mergeSync:"Fusionner avec l'existant",mergeSyncDesc:"Met à jour les ressources existantes. Crée les ressources manquantes.",upgradeExisting:"Mettre à jour un agent existant",upgradeDesc:"Fait correspondre les ressources structurellement avec un agent cible. Idéal pour la promotion entre environnements.",syncRemote:"Synchroniser depuis une instance distante",syncDesc:"Connectez-vous à une autre instance EDDI et synchronisez un agent en direct.",importNow:"Importer maintenant",previewChanges:"Aperçu des modifications",selectTargetAgent:"Sélectionner l'agent cible",upgradeTargetHint:"Les ressources importées seront mises en correspondance structurelle avec cet agent.",chooseAgent:"— Choisir un agent —",sourceAgent:"Agent source (distant)",targetAgent:"Agent cible (local)",createNewTarget:"Créer un nouvel agent",resource:"Ressource",type:"Type",match:"Correspondance",action:"Action",new:"nouveau",updated:"mis à jour",unchanged:"inchangé",selected:"sélectionnés",mergeNow:"Importer la sélection",syncNow:"Synchroniser maintenant",upgradeNow:"Mettre à jour",importing:"Import de l'agent en cours…",contentIdentical:"Contenu identique",targetContent:"Cible",sourceContent:"Source"},te={title:"Synchronisation d'agents",subtitle:"Synchroniser les agents entre les instances EDDI",connection:"Instance source",sourceUrl:"URL de l'instance EDDI source",authToken:"Jeton d'autorisation",authHint:"Facultatif. Envoyé comme en-tête X-Source-Authorization.",connect:"Connecter",connected:"Connecté",agentsFound:"agents",connectionFailed:"Échec de la connexion",agentMapping:"Correspondance des agents",previewAll:"Tout prévisualiser",syncSelected:"Synchroniser la sélection",remote:"Distant",createNew:"Créer",changes:"modifications",agentsSelected:"agents sélectionnés",totalResources:"ressources",syncSuccess:"Synchronisation terminée",syncError:"Échec de la synchronisation",empty:"Connectez-vous à une instance source pour commencer la synchronisation des agents.",autoMatched:"Correspondance automatique",previewFirst:"Aperçu des modifications avant synchronisation"},re={actionCreate:"Nouveau",actionUpdate:"Mettre à jour",actionSkip:"À jour",actionConflict:"Conflit"},ne={title:"Conversations utilisateur",subtitle:"Gérer les liaisons intent → utilisateur → conversation",lookup:"Recherche",intent:"Intention",userId:"ID utilisateur",agentId:"ID agent",environment:"Environnement",conversationId:"ID conversation",binding:"Liaison active",enterBoth:"Entrez l'intent et l'ID utilisateur",notFound:"Aucune liaison trouvée",create:"Créer une liaison",createTitle:"Créer une liaison",created:"Liaison créée",deleteTitle:"Supprimer la liaison",deleteDesc:`Supprimer la liaison pour l'intent "{{intent}}" et l'utilisateur "{{userId}}" ?`,deleted:"Liaison supprimée"},se={placeholder:"Rechercher pages, agents, actions…",noResults:"Aucun résultat.",recent:"Récents",navigate:"Navigation",agents:"Agents",actions:"Actions rapides",createAgent:"Créer un agent",openChat:"Ouvrir le chat",kbdNavigate:"naviguer",kbdSelect:"sélectionner",kbdClose:"fermer"},oe={groupMemberHint:"Ce groupe participera comme sous-groupe imbriqué dans la discussion.",noGroupsHint:"Créez d'abord un groupe, puis ajoutez-le comme membre sous-groupe imbriqué.",noGroupsYet:"Aucun groupe disponible",selectGroup:"Sélectionner un groupe existant…",title:"Assistant de groupe",subtitle:"Composez une équipe de conseillers IA pour discuter de vos questions",backToGroups:"Retour aux groupes",templateTitle:"Commencer avec un modèle",templateDesc:"Choisissez une configuration prédéfinie ou partez de zéro.",startBlank:"Partir de zéro",blankDesc:"Tout configurer manuellement",configTitle:"Configuration du groupe",configDesc:"Nommez votre groupe et choisissez le style de discussion",namePlaceholder:"Ex. Conseil consultatif",descPlaceholder:"À quoi sert ce groupe ?",membersTitle:"Composez votre équipe",membersDesc:"Pour chaque place, choisissez un agent existant ou créez-en un nouveau.",addMember:"Ajouter un membre",refreshAgents:"Actualiser la liste",existingAgents:"agents existants",displayName:"Nom de l'agent",displayNamePlaceholder:"Donnez un nom à cet agent…",rolePlaceholder:"Rôle (ex. Marketing, Ingénierie)",useExisting:"Utiliser existant",createNew:"Créer nouveau",selectAgent:"Sélectionner un agent…",systemPrompt:"Prompt système",provider:"Fournisseur LLM",model:"Modèle",apiKey:"Clé API",apiKeyPlaceholder:"sk-…",createThisAgent:"Créer l'agent",creatingAgent:"Création de l'agent…",agentReady:"Agent créé et déployé",agentCreated:'Agent "{{name}}" créé',agentCreateFailed:"Échec de la création: {{error}}",moderator:"Modérateur",moderatorHint:"Synthétise la discussion",addModerator:"Ajouter un modérateur",removeModerator:"Supprimer le modérateur",createModerator:"Créer un agent modérateur",moderatorReady:"Agent modérateur prêt",moderatorCreated:"Agent modérateur créé",creatingModerator:"Création du modérateur…",creatingSlot:"Création de {{name}}…",creatingGroup:"Création du groupe…",needMembers:"Ajoutez au moins 2 membres pour continuer",reviewTitle:"Vérifier et créer",reviewDesc:"Vérifiez la configuration de votre groupe avant de le créer.",reviewMembers:"Membres",autoCreateNotice:"{{count}} agents seront créés automatiquement",autoCreateHint:"Chaque agent sera créé et déployé automatiquement avant l'assemblage du groupe.",unassignedWarning:"{{count}} membres sans agent assigné",unassignedHint:"Ces membres seront ignorés lors des discussions. Revenez pour assigner des agents.",flowPreview:"Flux de discussion",createGroup:"Créer le groupe",created:"Groupe créé !",viewGroup:"Ouvrir le groupe",createAnother:"Créer un autre",success:"Groupe créé avec succès !",advancedSettings:"Paramètres de protocole avancés",agentTimeout:"Délai d'attente agent (secondes)",maxRetries:"Tentatives max.",onAgentFailure:"En cas d'échec de l'agent",onMemberUnavailable:"Si membre indisponible",maxTurns:"Tours max. (0 = illimité)",maxTurnsHelp:"Limite de sécurité pour le total des tours d'agent. La limite par défaut du backend est 50.",policySkip:"Ignorer",policyRetry:"Réessayer",policyAbort:"Annuler",policyFail:"Échouer",hintDebate:"Attribuez les rôles PRO et CON aux membres. Pro argumente en premier, puis Con, suivi des réfutations et du jugement.",hintDevilAdvocate:"Attribuez le rôle DEVIL_ADVOCATE à au moins un membre. Il contestera le consensus du groupe.",hintPeerReview:"Chaque membre critique individuellement le travail de tous les autres, puis révise en fonction des retours reçus.",hintDelphi:"Tous les membres répondent de manière indépendante et anonyme. Après chaque tour, ils voient les résultats anonymes et peuvent ajuster. Tours max. contrôle le nombre d'itérations anonymes.",hintNegotiation:"Les membres exposent leurs intérêts, déposent des propositions puis négocient : « Tours max » fixe le nombre de tours de marchandage. Le modérateur n'arbitre que faute d'accord.",roleCoverageWarning:"Aucun membre n'a le rôle « {{role}} »",roleCoverageHint:"Le serveur se rabat sur la prise de parole de tous les membres dans {{phases}}, si bien que les mêmes personnes défendent les deux camps. Revenez à « Membres » et renseignez le champ rôle.",hintTaskForce:"Le modérateur crée un plan de tâches, assigne le travail aux agents en parallèle, puis vérifie et synthétise les résultats.",hintCustom:"Définissez vos propres phases manuellement. Les phases personnalisées peuvent être configurées via l'API après la création.",hintRoundTable:"Tous les membres partagent leurs opinions, puis discutent des points de vue des autres sur plusieurs tours avant que le modérateur ne synthétise.",protocolSummary:"Protocole",hitlTitle:"Exiger une approbation humaine",hitlDesc:"Mettre la discussion en pause aux phases choisies et attendre une décision humaine avant de continuer.",hitlApprovalPoints:"Mettre en pause pour approbation à",hitlNoPhases:"Ce style n'a pas de phases prédéfinies à contrôler.",hitlNoApprovalPoints:"Sélectionnez au moins une phase, sinon la discussion ne s'arrêtera jamais.",hitlTimeoutPolicy:"Si aucune décision à temps",hitlApprovalTimeout:"Délai d'approbation",hitlTimeoutInvalid:"Saisissez une durée ISO-8601 positive, p. ex. PT15M ou PT1H30M.",hitlTimeoutHint:"Durée ISO-8601, p. ex. PT30S, PT15M, PT2H.",hitlGranularity:"Granularité d'approbation",hitlGranularityHint:"L'approbation par tâche s'applique à l'exécution TASK_FORCE — approuvez ou rejetez chaque tâche individuellement.",hitlOnTaskRejection:"Quand une tâche est rejetée",hitlPinNote:"Activer les points d'approbation fige les phases de discussion de ce groupe (granularité {{granularity}}).",hitlReviewBadge:"Approbation humaine",humanOnTimeoutAbort:"Interrompre la discussion",humanOnTimeoutLabel:"En cas de délai dépassé",humanOnTimeoutSkip:"Passer son tour et continuer",humanPrincipalId:"Identifiant principal",humanPrincipalIdHint:"L'identité autorisée à soumettre les interventions de ce membre — la discussion se met en pause et attend lorsque c'est à son tour de parler.",humanPrincipalIdPlaceholder:"Identifiant de connexion/principal de l'utilisateur",humanTurnSettingsHint:"La discussion se met en pause et attend lorsque c'est le tour d'un membre humain de parler. Choisissez ce qui se passe s'il ne répond pas à temps.",humanTurnSettingsTitle:"Paramètres du tour des membres humains",humanTurnTimeoutInvalid:"Durée ISO-8601 non valide, par exemple PT24H ou P1D.",humanTurnTimeoutLabel:"Délai du tour (durée ISO-8601)",humanTurnTimeoutPlaceholder:"ex. PT24H — laisser vide pour une attente indéfinie",memberTypeHuman:"Humain"},ie={advisoryBoard:"Comité consultatif",advisoryBoardDesc:"Cinq perspectives métier — marketing, technique, finance, juridique, stratégie — se prononcent sur la même question, puis le modérateur fait la synthèse.",peerReview:"Comité de relecture",peerReviewDesc:"Les relecteurs évaluent ce que vous soumettez — un brouillon, un plan, une proposition —, critiquent l'évaluation des autres, révisent, et le modérateur assemble le résultat.",riskAssessment:"Évaluation des risques",riskAssessmentDesc:"Chacun donne sa lecture, un membre défend la position inverse pour révéler les angles morts, les autres répondent, puis le modérateur résume ce qui a tenu.",forecasting:"Estimations indépendantes",forecastingDesc:"Les membres répondent anonymement sur plusieurs tours et ne voient entre-temps que des résultats anonymisés : personne ne se cale sur le premier intervenant.",proCon:"Débat pour/contre",proConDesc:"Deux membres plaident pour la proposition et deux contre, suivis de répliques et du verdict du modérateur.",negotiation:"Négociation",negotiationDesc:"Deux parties exposent leurs intérêts, déposent des propositions et échangent des concessions tour après tour ; le modérateur n'arbitre que faute d'accord.",taskForce:"Groupe de travail",taskForceDesc:"Le modérateur découpe l'objectif en tâches, les membres les traitent en parallèle, puis il vérifie et assemble les résultats.",roles:{marketingExpert:"Expert marketing",techLead:"Lead technique",financeDirector:"Directeur financier",legalCounsel:"Conseiller juridique",strategyConsultant:"Consultant en stratégie",substanceReviewer:"Relecteur du fond",structureReviewer:"Relecteur de la structure",riskReviewer:"Relecteur des risques",riskAnalyst:"Analyste risques",domainExpert:"Expert domaine",devilsAdvocate:"Avocat du diable",analystA:"Analyste A",analystB:"Analyste B",analystC:"Analyste C",analystD:"Analyste D",proAdvocate1:"Avocat pour 1",proAdvocate2:"Avocat pour 2",conAdvocate1:"Avocat contre 1",conAdvocate2:"Avocat contre 2",partyA:"Partie A",partyB:"Partie B",projectLead:"Chef de projet",researcher:"Chercheur",implementer:"Développeur",qualityAssurance:"Assurance qualité"},assignRoles:"Attribuer les rôles",backToGallery:"Retour aux modèles",browseButton:"À partir d'un modèle",createButton:"Créer un groupe",created:"Groupe créé à partir du modèle",nameLabel:"Nom du groupe",selectAgent:"Sélectionner un agent…",subtitle:"Démarrez à partir d'une discussion prête à l'emploi et déjà réglée — il suffit d'attribuer des agents à ses rôles nommés.",title:"Modèles de groupe",roleCount_many:"{{count}} rôles à attribuer",roleCount_one:"{{count}} rôle à attribuer",roleCount_other:"{{count}} rôles à attribuer",empty:"Aucun modèle disponible",emptyDescription:"Ce serveur ne fournit aucun modèle de groupe. Vous pouvez tout de même créer un groupe de zéro avec l'assistant."},ae={agentIdPlaceholder:"ID de l’agent pour traiter les messages",botToken:"Jeton de bot",botTokenHint:"Jeton OAuth du bot. Utilisez une référence coffre-fort pour la sécurité.",botTokenPlaceholder:"xoxb-… ou ${vault:slack-bot-token}",channel:"canal",channelId:"ID du canal Slack",channelIdCol:"ID du canal",channelIdHint:"Clic droit sur un canal Slack → Afficher les détails → copier l’ID du canal",channelsPlural:"canaux",channelType:"Type de canal",confirmDelete:"Supprimer le canal ?",confirmDeleteDesc:"Cette intégration de canal sera définitivement supprimée.",create:"Créer un canal",createTitle:"Créer une intégration de canal",defaultAgentId:"ID de l’agent par défaut",defaultTargetHint:"La cible par défaut traite tous les messages ne correspondant à aucun mot-clé déclencheur. Vous pouvez ajouter d’autres cibles après la création.",empty:"Aucun canal",emptyDesc:"Créez une intégration de canal pour connecter des agents à Slack.",name:"Nom",namePlaceholder:"ex. Engineering AI Hub",openSlackApps:"Ouvrir le tableau de bord Slack App",searchPlaceholder:"Rechercher des canaux…",signingSecret:"Secret de signature",signingSecretHint:"Depuis la page Informations de base de votre application Slack.",signingSecretPlaceholder:"Chaîne hex ou ${vault:slack-signing-secret}",slackSetupGuide:"Guide de configuration Slack",slackSetupSummary:"Créez une application Slack, configurez les portées du jeton de bot (app_mentions:read, chat:write, im:history, channels:history, groups:history), puis collez les identifiants ici.",target:"cible",targets:"cibles",targetsCol:"Cibles",type:"Type",unnamed:"Canal sans nom",version:"Version"},ue={saveSuccess:"Canal enregistré",addTarget:"Ajouter une cible",addTrigger:"Ajouter un déclencheur…",agentId:"ID de l’agent",botToken:"Jeton de bot",channelId:"ID du canal Slack",cooldown:"Délai (s)",general:"Général",groupId:"ID du groupe",isDefault:"par défaut",maxCost:"Max €/jour",maxDaily:"Max/jour",name:"Nom",observe:"Observer",observeDesc:"Surveiller passivement et répondre sélectivement",observeKeywords:"Mots-clés déclencheurs",observeMimeTypes:"Types MIME déclencheurs",observeMode:"Mode observation",observeSettings:"Paramètres du mode observation",platformConfig:"Configuration de la plateforme",rawConfig:"Configuration brute",removeTarget:"Supprimer",requiredEvents:"Abonnements d’événements requis :",requiredScopes:"Portées de jeton de bot requises :",setDefault:"Définir par défaut",signingSecret:"Secret de signature",targetName:"Nom",targets:"Cibles de routage des messages",targetType:"Type",triggerHint:"Les utilisateurs saisissent « mot-clé : message » pour router vers cette cible",triggerKeywords:"Mots-clés déclencheurs",triggers:"déclencheurs",type:"Type de canal",webhookHint:"Collez cette URL dans le champ Request URL des Event Subscriptions de votre application Slack.",webhookUrl:"URL du webhook",hitlSection:"Approbations Human-in-the-Loop (facultatif)",hitlApprovalChannel:"ID du canal d'approbation",hitlApprovalChannelHint:"Canal Slack qui reçoit une carte d'approbation lorsqu'une conversation est mise en pause.",hitlApproverUserIds:"ID des utilisateurs approbateurs",hitlApproverUserIdsHint:"ID d'utilisateurs Slack séparés par des virgules, autorisés à approuver via les boutons. Sans cette liste, les boutons ne sont pas affichés (échec par fermeture)."},le={loadingApprovalDetails:"Chargement des détails d’approbation…",pendingCount:"{{count}} en attente d'approbation",approvalDetailsError:"Impossible de charger ce que ferait cette requête, elle ne peut donc pas être approuvée ici. La rejeter reste sans risque.",awaitingHuman:"En attente humaine",awaitingApproval:"En attente d'approbation",approve:"Approuver",reject:"Rejeter",cancel:"Annuler",approved:"Approuvé",rejected:"Rejeté",cancelled:"Annulé",pending:"en attente",emptyQueue:"Aucune approbation en attente",emptyQueueDescription:"Toutes les conversations se déroulent — aucune intervention humaine nécessaire.",surface:"Surface",regular:"Conversation",group:"Groupe",pauseReason:"Raison",pausedAt:"En pause",timeoutPolicy:"Délai",timeRemaining:"Restant",overdue:"En retard",phase:"Phase",granularity:"Granularité",taskApprovals:"Approbations de tâches",approveAll:"Tout approuver",note:"Ajouter une note (optionnel)",notePlaceholder:"Ajouter une note pour la décision...",discussionCancelled:"Discussion annulée",cancelDiscussion:"Annuler la discussion",rejectAll:"Tout rejeter",timeoutWaitIndefinitely:"Attendre indéfiniment",timeoutAutoApprove:"Approbation auto",timeoutAutoReject:"Rejet auto",timeoutAbort:"Abandonner",granularityPhase:"Phase",granularityTask:"Tâche",rejectionFail:"Faire échouer la tâche",rejectionRetry:"Réessayer la tâche",groupsTruncated:"Il existe plus d'approbations de groupe que celles affichées ici.",groupsLoadError:"Impossible de charger les approbations de groupe.",toolApprovalRequired:"Approbation d'outil requise",toolCallsAwaiting:"Appels d'outils en attente d'approbation",executedUngated:"Déjà exécuté (non contrôlé)",outcomeUnknown:"Une approbation précédente a été interrompue en cours d'exécution — son effet est inconnu ; vérifiez-le en externe avant de réessayer.",outcomeUnknownShort:"résultat inconnu",toolApprovalHint:"Approuver applique vos choix par appel (les appels que vous n'avez pas modifiés sont approuvés). Rejeter rejette l'ensemble du lot.",toolApprovalHintExplicit:"Chaque appel doit être approuvé ou rejeté individuellement avant de pouvoir approuver le lot. Rejeter rejette l'ensemble du lot.",explicitReviewMissing:"Examinez chaque appel ci-dessus avant d'approuver.",redactionCaveat:"Les arguments affichés ci-dessous sont expurgés — une valeur secrète apparaît comme « », pas omise.",gateReason:"Motif correspondant",argsTruncated:"arguments tronqués",amendArguments:"Modifier les arguments (facultatif)",amendPlaceholder:`Objet JSON de remplacement complet, p. ex. {"to":"ops@acme.com"}. Laissez vide pour conserver l'original.`,amendTruncated:"Impossible de modifier un appel dont les arguments ont été tronqués — approuvez-le ou rejetez-le tel quel.",amendInvalidJson:"Les arguments modifiés doivent être un objet JSON valide.",amendTooLarge:"Les arguments modifiés sont trop volumineux.",review:"Examiner",tool:"Outil",scopeAll:"Affichage de toutes les approbations en attente dans le système.",scopeOwn:"Affichage des approbations en attente pour vos conversations.",chatPaused:"Cette conversation est en attente d'approbation humaine.",noProgressWaitForHuman:"Attendre un humain",noProgressAutoReject:"Rejet automatique",noProgressAbort:"Interrompre",confirmApproveTitle:"Approuver la demande ?",confirmApproveDescription:"Approuver et reprendre cette conversation ?",confirmApproveToolTitle:"Approuver l'exécution de l'outil ?",confirmApproveToolDescription:"L'approbation exécutera : {{toolNames}}. Cela effectue des actions réelles et ne peut pas être annulé.",confirmRejectTitle:"Rejeter la demande ?",confirmRejectDescription:"Rejeter cette demande ? La conversation ne se poursuivra pas.",confirmCancelTitle:"Annuler la conversation ?",confirmCancelDescription:"Annuler cette conversation ? Tout travail en cours sera interrompu.",confirmCancelButton:"Annuler la conversation",confirmCancelGroupTitle:"Annuler la discussion ?",confirmCancelGroupDescription:"Annuler cette discussion ? Tout travail en cours sera interrompu.",confirmCancelGroupButton:"Annuler la discussion",confirmDismiss:"Retour",approvalBlockedHeading:"Ceci ne peut pas être approuvé ici",confirmRejectToolTitle:"Rejeter l'exécution de l'outil ?",confirmRejectToolDescription:"Rien ne sera exécuté. La conversation se poursuit et l'agent répond sans {{toolNames}}.",humanTurn:"Tour du membre",humanTurnReason:"En attente de la prise de parole de {{member}}",humanTurnMemberFallback:"un membre",decidedProgress:"{{decided}} sur {{total}} décidés"},ce={deploying:"Déploiement de l'agent…",error:"Une erreur est survenue",newConversation:"Nouvelle conversation",ready:"Prêt — saisissez un message pour tester",retry:"Réessayer",saving:"Enregistrement des modifications…",starting:"Démarrage de la conversation…",timeout:"Délai de déploiement dépassé",title:"Chat de test",preparing:"Préparation…"},de={auditTrail:"Journal d'audit",checking:"Vérification…",coordConnected:"Coordinateur connecté",coordDisconnected:"Coordinateur déconnecté",coordUnknown:"Coordinateur —",createGroup:"Créer un groupe",noConversations:"Aucune conversation pour l'instant",offline:"Hors ligne",online:"En ligne",platform:"Plateforme",platformHealth:"État de la plateforme",recentConversations:"Conversations récentes",secretVault:"Coffre-fort des secrets",vaultDown:"Vault indisponible",vaultUp:"Vault prêt",viewLogs:"Voir les journaux"},pe={retry:"Réessayer",title:"Une erreur est survenue"},me={auditPseudonymized:"Audit pseudonymisé",checkingStatus:"Vérification...",confirmDelete:"Oui, supprimer toutes les données",confirmDesc:`Cela supprimera définitivement TOUTES les données de l'utilisateur "{{userId}}". Cette action est irréversible.`,confirmTitle:"Confirmer la suppression des données",conversationsDeleted:"Conversations supprimées",delete:"Supprimer toutes les données",deleteSuccess:"Données utilisateur supprimées avec succès",deleting:"Suppression...",enterUserIdFirst:"Saisissez un ID utilisateur ci-dessus pour vérifier le statut",export:"Exporter les données",exportSuccess:"Données utilisateur exportées avec succès",exporting:"Exportation...",legalDesc:"L'export de données (Art. 15/20) fournit un fichier JSON contenant toutes les données stockées d'un utilisateur. La suppression (Art. 17) retire définitivement tous les souvenirs et données de conversation, pseudonymise les entrées d'audit et est irréversible.",legalNotice:"Avis de protection des données",liftRestriction:"Lever la restriction",liftingRestriction:"Levée...",logsPseudonymized:"Journaux pseudonymisés",memoriesDeleted:"Souvenirs supprimés",restrictProcessing:"Restreindre le traitement",restricting:"Restriction...",restrictionApplied:"Traitement restreint pour l'utilisateur",restrictionDesc:"Restreindre le traitement lorsqu'un utilisateur conteste l'exactitude des données ou s'oppose au traitement. Pendant la restriction, les données de l'utilisateur sont conservées mais aucune nouvelle conversation ne peut être traitée. Cette action est réversible.",restrictionLifted:"Restriction de traitement levée",restrictionTitle:"Restriction de traitement (Art. 18)",resultsTitle:"Effacement terminé",statusActive:"Traitement actif",statusUnknown:"Statut indisponible",statusRestricted:"Traitement restreint",subtitle:"Gestion des données utilisateur conforme au RGPD — effacement (Art. 17), portabilité (Art. 15/20) et restriction du traitement (Art. 18)",title:"Confidentialité et conformité",userId:"ID utilisateur",userIdPlaceholder:"Saisir l'ID utilisateur...",userLookup:"Recherche d'utilisateur"},ge={message:"Mode démo — Affichage de données d'exemple. Connectez un backend EDDI pour des données réelles."},ve={confirmPurgeAll:"Supprimer définitivement TOUTES les {{count}} ressources orphelines ? Le serveur purge tout — votre sélection n'est pas appliquée. Action irréversible.",deleteSelected:"Supprimer {{count}} sélectionné(s)",description:"Rechercher et nettoyer les ressources non référencées par un agent ou un package.",deselectAll:"Tout désélectionner",includeDeleted:"Inclure les suppressions logiques",lastScanned:"Dernière analyse",noOrphans:"Aucun orphelin trouvé",purge:"Tout purger",purgeSuccess:"{{count}} orphelins supprimés",runScan:"Lancer l'analyse",scan:"Analyser",scanPromptDesc:"Trouvez les configurations d'extension (règles, appels API, LLM, sorties) non référencées par un workflow ou un agent. Nettoyez les ressources inutilisées pour garder votre plateforme en ordre.",scanPromptTitle:"Analyser votre plateforme",scanning:"Analyse des ressources…",selectAll:"Tout sélectionner",softDeleted:"Supprimé",title:"Détection des orphelins",found_many:"{{count}} orphelins trouvés",found_one:"{{count}} orphelin trouvé",found_other:"{{count}} orphelins trouvés"},fe={apiCallsMinute:"Appels API / minute",configuration:"Configuration",conversationsToday:"Conversations aujourd'hui",description:"Configurez les limites de débit, les plafonds d'usage et les budgets de coût par locataire.",disable:"Désactiver",disabled:"Désactivé",enable:"Activer",enabled:"Activé",enforcementOff:"L'application est désactivée.",enforcementOffHint:"Les quotas ne sont pas appliqués. Activez l'application et enregistrez pour commencer à appliquer les limites.",limitHint:"-1 = illimité",liveUsage:"Usage en direct",maxAgentsPerTenant:"Agents max. / locataire",maxApiCallsPerMinute:"Appels API max. / minute",maxConversationsPerDay:"Conversations max. / jour",maxMonthlyCostUsd:"Coût mensuel max. (USD)",monthlyCost:"Coût mensuel",resetConfirmDesc:`Met immédiatement à zéro tous les compteurs d'usage (conversations, appels API, coût mensuel) pour le locataire "default". Cette action est irréversible.`,resetConfirmTitle:"Réinitialiser les compteurs d'usage ?",resetCounters:"Réinitialiser les compteurs",resetSuccess:"Compteurs d'usage réinitialisés",saveSuccess:"Quota enregistré",tenantId:"ID du locataire",title:"Quotas de locataire"},he={clearVault:"Effacer la référence vault",createNew:"Créer un nouveau secret",emptyVault:"Aucun secret stocké pour l'instant",filterPlaceholder:"Rechercher des clés du vault…",keyNotFound:"Cette clé est introuvable dans le vault",loading:"Chargement des clés…",noMatch:'Aucune clé ne correspond à "{{filter}}"',pickFromVault:"Choisir dans le vault",placeholder:"Clé API ou ${vault:key-name}",vaultDown:"Le vault n'est pas configuré — configurez un fournisseur de secrets dans le backend EDDI"},be={category:"Catégorie",content:"Contenu du prompt",contentLabel:"Contenu de l'extrait",contentPlaceholder:"Vous devez être prudent et attentif dans vos réponses...",description:"Description",descriptionPlaceholder:"Ce que fait cet extrait",identity:"Identité",name:"Nom de l'extrait",namePlaceholder:"ex. cautious_mode",noTags:"Aucune étiquette",tagPlaceholder:"ex. safety, production",tags:"Étiquettes",templateEnabled:"Activer la résolution de modèle",templateEnabledHint:"Lorsqu'elle est désactivée, les marqueurs {{}} du contenu sont traités comme du texte littéral (utile pour les exemples de code).",usageHint:"Utilisation :"},Ae={deployed:"Déployé",deploying:"Déploiement...",error:"Erreur",notDeployed:"Non déployé",checking:"Vérification…"},Ce={subtitle:"Gérer les souvenirs, propriétés et liaisons de conversation par utilisateur",tabs:"Sections des données utilisateur",title:"Données utilisateur"},ye={deleteKey:"Supprimer {{key}}",editKey:"Modifier {{key}}",tableTitle_many:"{{count}} variables définies",tableTitle_one:"{{count}} variable définie",tableTitle_other:"{{count}} variables définies",title:"Variables globales",description:"Valeurs de configuration à l'échelle du déploiement, disponibles dans tous les agents.",create:"Ajouter une variable",createTitle:"Ajouter une variable globale",editTitle:"Modifier la variable",keyLabel:"Clé",keyPlaceholder:"ex. default-model",keyError:"Lettres, chiffres, points, tirets bas et tirets uniquement.",valueLabel:"Valeur",valuePlaceholder:"ex. gpt-4.1",valueWarning:"Les valeurs sont visibles dans l'interface et les journaux. Utilisez le coffre-fort de secrets pour les données sensibles.",descriptionLabel:"Description (facultatif)",descriptionPlaceholder:"Description facultative…",exportableLabel:"Inclure dans les exports d'agents",save:"Enregistrer la variable",saveSuccess:"Variable « {{key}} » enregistrée",deleteSuccess:"Variable « {{key}} » supprimée",confirmDeleteTitle:"Supprimer la variable",confirmDeleteMessage:"Voulez-vous vraiment supprimer « {{key}} » ? Les agents utilisant ${vars:{{key}}} verront des références non résolues.",empty:"Aucune variable globale définie",emptyHint:"Cliquez sur « Ajouter une variable » pour créer votre première valeur de configuration à l'échelle du déploiement.",searchPlaceholder:"Filtrer les variables…",colKey:"Clé",colValue:"Valeur",colDescription:"Description",colExportable:"Export",colReference:"Référence",colActions:"Actions",exportYes:"Incluse dans les exports",exportNo:"Exclue des exports",copyVars:"Copier la référence ${vars:…}",refCopied:"Copié : {{ref}}",infoLine1:"Utilisez {{vars.}} dans les prompts système ou ${vars:} n'importe où dans les configurations d'agents.",infoLine2:"Les modifications prennent effet sous 2 minutes (TTL du cache). Pour les valeurs sensibles, utilisez plutôt le coffre-fort de secrets."},De={endpoints:"endpoints",endpointsTotal:"endpoints au total",groupsSelected:"groupes sélectionnés",importOpenApi:"Importer depuis OpenAPI",importSelected:"Importer les groupes sélectionnés",importing:"Importation…",selectGroups:"Sélectionnez les groupes d'API à importer comme extensions d'appel API distinctes"},Te=JSON.parse(`{"board":{"continuePlaceholder":"Poursuivre cette discussion…","inputDisabledClosed":"Cette discussion est fermée","newDiscussion":"Nouvelle discussion","noResponseGenerated":"Aucune réponse générée","awaitingApprovalHint":"Cette discussion est en pause dans l'attente d'une approbation humaine.","reviewInManager":"L'examiner","askMore":"Interroger {{name}} davantage →","askYourBoard":"Interrogez votre task force…","attachFile":"Joindre un fichier","backToLive":"Retour à la discussion en direct","chatOneOnOne":"Discussion en tête-à-tête","close":"Fermer","copied":"Copié !","copyResponse":"Copier la réponse","details":"Détails","emptyDescription":"Posez une question et votre task force en discutera.","emptyTitle":"Prêt pour la discussion","error":"Une erreur est survenue","fileTooLarge":"Le fichier ne doit pas dépasser 10 Mo","fileTypeNotAllowed":"Ce type de fichier n'est pas pris en charge","hideConfig":"Masquer le panneau de détails","live":"En direct","liveNow":"En direct","loadingResponse":"Chargement de la réponse","members":"Équipe","membersPanel":"Panneau d'équipe","moderator":"Modérateur","noMembers":"Aucun membre d'équipe","noSessions":"Aucune session pour l'instant","phase":"Phase","pin":"Épingler la réponse","removeAttachment":"Retirer la pièce jointe","running":"En cours","runningHint":"Cette discussion est toujours en cours — les nouvelles réponses apparaissent automatiquement.","send":"Envoyer","sessions":"Sessions","sessionsPanel":"Panneau des sessions","skipped":"{{name}} — ignoré","startingDescription":"Votre task force y travaille — les réponses apparaissent ici au fur et à mesure.","startingTitle":"Discussion en cours","stillDiscussing":"La task force discute encore…","stop":"Arrêter","synthesis":"Synthèse","synthesisResult":"Résultat de la synthèse","title":"Task force","toggleConfig":"Afficher/masquer le panneau de détails","unpin":"Détacher la réponse","untitled":"Sans titre","viewSessions":"Voir les sessions passées"},"thread":{"fileTooLarge":"Le fichier doit faire moins de 20 Mo","fileTypeNotAllowed":"Ce type de fichier n'est pas pris en charge","attachmentLimit":"Maximum {{max}} pièces jointes par message","notForwarded":"Fichier stocké mais trop volumineux pour le modèle","uploadFailed":"Échec du téléchargement : {{error}}","noResponse":"Pas de réponse","attachFile":"Joindre un fichier","emptySubtitle":"Envoyez un message pour commencer à discuter avec {{name}}.","emptyTitle":"Discussion avec {{name}}","followUp":"Suite à votre réponse…","fromSession":"Depuis la session {{boardName}}","placeholder":"Saisissez un message…","questionLabel":"Question","removeAttachment":"Retirer la pièce jointe","responseLabel":"Réponse","send":"Envoyer","sendError":"Désolé, une erreur s'est produite. Veuillez réessayer.","startingConversation":"Démarrage de la conversation…","toggleContext":"Afficher/masquer le contexte","placeholderNamed":"Message à {{name}}…"},"chat":{"agentDetails":"Détails de l agent","selectToView":"Sélectionnez un agent pour voir les détails","hideDetails":"Masquer les détails","editAgent":"Modifier l agent","auditLogs":"Journaux d audit","openStudio":"Ouvrir dans le Manager","triggers":"Voir les déclencheurs","starterSelected":"Prompt ajouté à la zone de texte","title":"Discussion","hideAgentDetails":"Masquer les détails de l'agent","showAgentDetails":"Afficher les détails de l'agent"},"agentEditor":{"capabilities":"Capacités","workflows":"Workflows","features":"Fonctionnalités & Sécurité","a2aEnabled":"Agent à Agent","memoryTools":"Outils de mémoire","signedMessages":"Messages signés","strictMemory":"Mémoire stricte","hitlMode":"Mode d approbation","llmConfig":"Modèle & Moteur LLM","provider":"Fournisseur","mode":"Mode d exécution","personaPrompt":"Prompt système persona","starters":"Amorceurs de conversation","channels":"Connecteurs de canaux","temperature":"Température","contextWindow":"Limite de contexte","activeTools":"Outils actifs","noLlm":"Aucun LLM configuré","noTools":"Aucun configuré","add":"Ajouter","addCapability":"Ajouter une capacité","cancel":"Annuler","close":"Fermer","confidence":"Confiance","confidenceHigh":"Élevée","confidenceLow":"Faible","confidenceMedium":"Moyenne","description":"Description","descriptionPlaceholder":"Décrivez l'expertise de cet agent…","discardChanges":"Vous avez des modifications non enregistrées. Les abandonner ?","loadError":"Échec du chargement des données de l'agent.","noCapabilities":"Aucune capacité définie.","removeCapability":"Retirer la capacité","retry":"Réessayer","save":"Enregistrer les modifications","saveError":"Échec de l'enregistrement des modifications","saveSuccess":"Agent mis à jour avec succès","settings":"Paramètres","skill":"Compétence","skillPlaceholder":"ex. synthèse","systemPrompt":"Prompt système","systemPromptPlaceholder":"Instructions définissant le comportement, la personnalité et l'expertise de cet agent…","title":"Modifier l'agent"},"settings":{"hitlApprovalPointsNote":"Ces paramètres définissent le comportement d'une approbation. Les points d'une discussion qui en requièrent une se configurent par phase dans le Manager.","hitlOpenManager":"Définir les points d'approbation","deliberation":"Qualité de la délibération","deliberationDesc":"Consigner les avis minoritaires et laisser les membres créer le travail découvert en cours de discussion","recordDissents":"Consigner un avis minoritaire","recordDissentsDesc":"Après chaque synthèse, chaque membre qui ne l'a pas rédigée dispose d'un tour bref pour dire où il reste en désaccord. Coûte un appel supplémentaire par membre.","agentFiledTasks":"Laisser les membres créer leurs propres tâches","agentFiledTasksDesc":"Le travail qu'un agent découvre en cours de discussion devient une vraie tâche reprise par la prochaine vague d'exécution. Désactivé, les outils n'existent tout simplement pas pour ce groupe.","maxTasksPerDiscussion":"Tâches créées max. / discussion","maxTasksPerDiscussionHelp":"Ne compte que les tâches créées par les agents, afin qu'un grand backlog planifié ne l'épuise pas.","maxTasksPerTurn":"Tâches créées max. / tour","maxTasksPerTurnHelp":"Limite un tour qui s'emballe ; le plafond par discussion limite la dérive lente.","maxCost":"Plafond de coût (USD)","maxCostUnlimited":"Aucune limite","maxCostHelp":"Laissez vide pour aucune limite. Un tour déjà en cours peut encore dépasser légèrement le plafond.","onCostExceeded":"Lorsque le plafond est atteint","costSynthesize":"Synthétiser maintenant — passer directement à la conclusion","costAbort":"Interrompre — faire échouer la discussion immédiatement","costCeilingInvalid":"Un plafond de coût doit être supérieur à 0. Videz le champ pour aucune limite.","maxDelegationDepth":"Profondeur de délégation max.","maxDelegationDepthHelp":"A délègue à B qui délègue à C : profondeur 2. Le saut qui dépasserait cette valeur est refusé — c'est ce qui brise un cycle de délégation.","delegationTimeout":"Délai de délégation (secondes)","delegationTimeoutHelp":"Durée d'attente d'un agent délégant vis-à-vis de son délégué. Augmentez-la si le délégué exécute des outils ou une discussion imbriquée.","allowedDelegationTargets":"Liste de délégation autorisée","allowedDelegationTargetsHint":"N'importe quel agent déployé","allowedDelegationTargetsHelp":"Identifiants d'agents séparés par des virgules. Laissez vide pour autoriser tout agent déployé.","moderatorlessWarning":"Réservé à un modérateur que cette équipe n'a pas : {{phases}}. Le premier membre par ordre de parole prendra le relais.","memberLimit":"Une équipe peut compter au plus {{max}} membres","explicitPhasesNote":"Cette équipe définit ses phases explicitement ({{phases}}) : elles s'exécutent telles quelles. Le framework et le nombre de tours ci-dessus ne modifient plus le déroulé.","explicitPhasesEdit":"Modifier les phases","addMemberTitle":"Ajouter un membre d'équipe","selectAgent":"Agent","pickAgent":"Rechercher ou sélectionner un agent…","displayName":"Nom d'affichage","displayNameHint":"p. ex. Analyste","role":"Rôle","roleHint":"p. ex. Relecteur","addMember":"Ajouter un membre","nameRequired":"Le nom du groupe de travail est obligatoire","saveSuccess":"Paramètres du groupe de travail enregistrés","saveError":"Échec de l'enregistrement des paramètres","deleteAllSuccess":"Groupe de travail et tous les agents supprimés","deleteError":"Échec de la suppression du groupe de travail","deleteSuccess":"Groupe de travail supprimé","duplicateMember":"Cet agent est déjà membre","loadError":"Échec du chargement des paramètres","backToBoard":"Retour au groupe de travail","untitled":"Groupe de travail sans titre","subtitle":"Configurez les paramètres et l'équipe de votre groupe de travail","general":"Paramètres généraux","generalDesc":"Configuration de base de votre groupe de travail","boardName":"Nom du groupe de travail","boardNameHint":"Saisir le nom du groupe de travail…","description":"Description","descriptionHint":"De quoi traite ce groupe de travail ?","discussionStyle":"Cadre de collaboration","maxRounds":"Tours max.","moderator":"Modérateur","noModerator":"Aucun","team":"Équipe","teamDesc":"Gérez les agents qui participent à votre groupe de travail","roleOptional":"Optionnel","typeAgent":"Agent","typeModerator":"Modérateur","removeMember":"Retirer le membre","minMembers":"2 membres minimum requis","protocol":"Protocole et résilience","protocolDesc":"Délais, tentatives et gestion des échecs pour la communication entre agents","agentTimeout":"Délai d'expiration de l'agent (secondes)","maxRetries":"Tentatives max.","onAgentFailure":"En cas d'échec de l'agent","failureSkip":"Ignorer — continuer sans cet agent","failureRetry":"Réessayer — retenter avec l'agent","failureAbort":"Abandonner — arrêter toute la discussion","onUnavailable":"Si un membre est indisponible","unavailableSkip":"Ignorer — poursuivre sans lui","unavailableFail":"Échouer — interrompre la discussion","maxTurns":"Tours max. (0 = illimité)","hitl":"Supervision humaine","hitlDesc":"Définissez quand et comment les humains examinent les décisions de l'IA","hitlGranularity":"Granularité de l'approbation","granularityPhase":"Par phase — examen après chaque phase de discussion","granularityTask":"Par tâche — examen de chaque tâche individuelle","hitlTimeout":"Délai d'approbation","hitlTimeoutHint":"p. ex. PT15M (15 min), PT1H (1 heure)","hitlTimeoutHelp":"Durée ISO-8601. Laisser vide pour aucun délai.","hitlTimeoutPolicy":"En cas d'expiration","timeoutWait":"Attendre indéfiniment","timeoutAutoApprove":"Approbation auto","timeoutAutoReject":"Rejet auto","timeoutAbort":"Abandonner la discussion","hitlRejection":"En cas de rejet","rejectionFail":"Échouer — arrêter la tâche","rejectionRetry":"Réessayer — demander à l'agent de réviser","dynamic":"Agents dynamiques","dynamicDesc":"Autoriser les agents à recruter, créer ou déléguer à d'autres agents pendant les discussions","dynamicEnable":"Activer les agents dynamiques","dynamicEnableDesc":"Autoriser les agents à recruter, créer ou déléguer à d'autres agents","allowCreation":"Autoriser la création","allowCreationDesc":"Les agents peuvent créer de nouveaux agents à la demande","allowRecruitment":"Autoriser le recrutement","allowRecruitmentDesc":"Les agents peuvent recruter des agents déjà déployés","allowDelegation":"Autoriser la délégation","allowDelegationDesc":"Les agents peuvent déléguer des sous-tâches à d'autres agents","maxCreated":"Créations max.","maxRecruited":"Recrutements max.","maxDelegations":"Délégations max. / tâche","inheritModel":"Hériter du modèle parent","inheritModelDesc":"Les agents créés utilisent le modèle LLM du parent","lifecycle":"Politique de cycle de vie","lifecycleEphemeral":"Éphémère — supprimé après la discussion","lifecycleKeep":"Maintenir déployé — persiste après la discussion","lifecycleUndeploy":"Retirer uniquement — arrêté mais non supprimé","lifecycleAgentDecides":"L'agent décide — l'agent choisit son propre sort","tasks":"Tâches préconfigurées","tasksDesc":"Définissez les tâches à l'avance pour ignorer la phase PLAN et laisser les agents exécuter immédiatement","taskSubject":"Sujet","taskSubjectHint":"Que faut-il faire ?","taskDescription":"Description","taskDescHint":"Instructions détaillées pour cette tâche…","taskAssignRole":"Attribuer au rôle","taskPriority":"Priorité","removeTask":"Retirer la tâche","addTask":"Ajouter une tâche","dangerZone":"Zone de danger","dangerDesc":"Actions irréversibles — procédez avec prudence","deleteBoard":"Dissoudre le groupe de travail","deleteBoardDesc":"Supprime cette configuration de groupe de travail. Les agents sont conservés.","deleteBoardAll":"Dissoudre le groupe de travail + tous les agents","deleteBoardAllDesc":"Supprime définitivement ce groupe de travail et tous ses agents membres.","unsavedChanges":"Vous avez des modifications non enregistrées","templateSaved":"Enregistré comme modèle","saveAsTemplate":"Enregistrer comme modèle","saving":"Enregistrement…","saveChanges":"Enregistrer les modifications","deleteAllTitle":"Dissoudre le groupe de travail et tous les agents ?","deleteTitle":"Dissoudre le groupe de travail ?","deleteAllConfirm":"Cette action dissoudra définitivement ce groupe de travail et supprimera tous ses agents membres. Elle est irréversible.","deleteConfirm":"Cette action dissoudra définitivement cette configuration de groupe de travail. Les agents membres ne seront pas affectés.","title":"Paramètres"},"nav":{"dashboard":"Tableau de bord","templates":"Modèles"},"advisor":{"avatarLabel":"Avatar de {{name}}"},"analytics":{"agentPerformance":"Performance des agents","avgLength":"Longueur moy.","avgLengthChars":"{{count}} caractères","chatWithAgent":"Discuter avec l'agent","compareAgent":"Comparer avec…","contributionBreakdown":"Répartition des contributions","contributions":"Contributions","editAgent":"Modifier l'agent","errorRate":"Taux d'erreur","errors":"Erreurs","sessions":"Sessions"},"back":"Retour","boardList":"Liste des task forces","boardsLabel":"Task forces","bottomNav":"Navigation inférieure","card":{"advisorCount":"{{count}} experts","delete":"Supprimer","duplicate":"Dupliquer","duplicated":"Task force dupliquée","history":"Historique","live":"En direct","moreActions":"Plus d'actions","noMembers":"Aucun expert","openSettings":"Ouvrir les paramètres","pin":"Épingler","settings":"Paramètres","unpin":"Détacher","untitled":"Task force sans titre"},"closeSidebar":"Fermer la barre latérale","comparison":{"avgResponse":"Réponse moy.","close":"Fermer","contributions":"Contributions","errorRate":"Taux d'erreur","evenlyMatched":"Les deux agents sont à égalité","leadsIn":"en tête sur {{count}} des 5 indicateurs","sessions":"Sessions","title":"Comparaison d'agents","totalContent":"Contenu total"},"dashboard":{"assembleTaskForce":"Constituer une task force","cancel":"Annuler","deleteConfirm":"Voulez-vous vraiment dissoudre cette task force ? Cette action est irréversible.","deletedCount":"{{count}} task forces supprimées","deleteError":"Échec de la suppression de la task force","deletePartialFail":"{{success}} supprimées, {{fail}} en échec","deleteSelected":"Supprimer","deleteSuccess":"Task force supprimée","deleteWorkforce":"Dissoudre la task force","deselect":"Désélectionner","duplicateError":"Échec de la duplication de la task force","gridView":"Vue en grille","listView":"Vue en liste","loadError":"Impossible de charger votre espace de travail. Veuillez réessayer.","pinned":"Épinglée","retry":"Réessayer","select":"Sélectionner","selected":"{{count}} sélectionnées","selectItem":"Sélectionner","subtitle":"Groupes d'agents collaboratifs résolvant des défis complexes.","taskForcesLabel":"Task forces actives","title":"Task forces actives","viewToggle":"Mode d'affichage"},"export":{"clipboard":"Copier dans le presse-papiers","copied":"Copié dans le presse-papiers","copyFailed":"Échec de la copie dans le presse-papiers","downloadedJson":"Téléchargé au format JSON","downloadedMd":"Téléchargé au format Markdown","json":"Exporter en JSON","markdown":"Exporter en Markdown","title":"Exporter la discussion"},"history":{"backToBoard":"Retour à la task force","backToList":"Retour à la liste","cancel":"Annuler","close":"Fermer","confirmDelete":"Supprimer","conversationList":"Liste des conversations","delete":"Supprimer la conversation","deleteDescription":"Voulez-vous vraiment supprimer cette conversation ? Cette action est irréversible.","deleteTitle":"Supprimer la conversation","emptyTranscript":"Aucune entrée de transcription pour l'instant","entryCount":"{{count}} entrées","error":"Erreur","export":"Exporter","finalAnswer":"Réponse finale synthétisée","loadError":"Échec du chargement de la conversation","loadMore":"Charger plus","noContent":"Aucun contenu","noConversations":"Aucune conversation pour l'instant","noResults":"Aucune conversation ne correspond à votre recherche","notFound":"Conversation introuvable","phase":"Phase","searchPlaceholder":"Rechercher des conversations…","selectConversation":"Sélectionnez une conversation à consulter","selectHint":"Choisissez une conversation dans la liste","skipped":"{{name}} — ignoré","synthesis":"Synthèse","title":"Historique des conversations","transcript":"Transcription de la conversation","tryDifferent":"Essayez un autre terme de recherche","untitled":"Conversation sans titre","loadListError":"Échec du chargement des conversations"},"insights":"Analyses","memberCount":"{{count}} membres","newBoard":"Constituer une task force","onboarding":{"advisorSlots":"{{count}} postes de conseillers","agentsReady":"{{count}} prêts","assembleNow":"Constituez votre première task force","customDesc":"Définissez votre propre équipe et vos propres règles","customFromScratch":"Partir de zéro","deployAgent":"Déployer un agent","deployFirst":"Déployez votre premier agent IA pour commencer","deployFirst2":"Déployer le premier →","deployFirstDesc":"Les agents sont les experts qui animent vos task forces. Créez-en un pour commencer.","getStarted":"Commencer","howItWorks":"Comment ça marche","pickTemplate":"Choisissez un modèle pour commencer","pickTemplateDesc":"Chaque modèle configure un style de discussion, des rôles et des règles — vous n'avez qu'à assigner les agents.","step1Desc":"Créez des experts IA dotés de compétences, de connaissances et d'une personnalité uniques.","step1Title":"Déployer des agents","step2Desc":"Choisissez un modèle, assignez des agents aux rôles et sélectionnez un style de discussion.","step2Title":"Constituer une task force","step3Desc":"Posez une question et observez vos agents débattre, critiquer et synthétiser une réponse.","step3Title":"Demander et observer","subtitle":"Réunissez des agents IA spécialisés en équipes collaboratives qui débattent, analysent et résolvent ensemble des défis complexes.","welcome":"Bienvenue dans l'Effectif"},"openMenu":"Ouvrir le menu","shortcuts":{"closePanel":"Fermer le panneau / la boîte de dialogue","fromDashboard":"Depuis le tableau de bord","newBoard":"Constituer une task force","showHelp":"Afficher les raccourcis clavier","title":"Raccourcis clavier"},"sidebar":{"boards":"Navigation des tableaux"},"sidebarDrawer":"Navigation latérale","skipToContent":"Aller au contenu","tabHome":"Accueil","tabInsights":"Analyses","tabThreads":"Fils","templates":{"deleteConfirm":"Supprimer ce modèle ?","deleted":"Modèle supprimé"},"templatesEmpty":"Enregistrez une task force comme modèle pour la recréer rapidement plus tard.","themeDark":"Sombre","themeLight":"Clair","themeSystem":"Système","toggleSidebar":"Afficher/masquer la barre latérale","toggleTheme":"Changer de thème","untitled":"Sans titre","useTemplate":"Utiliser","wizard":{"addAdvisor":"Ajouter un conseiller","advisorCount":"{{count}} conseillers","advisorName":"Nom du conseiller","agentError":"Échec de la création de {{name}} : {{error}}","apiKey":"Clé API","back":"Retour","boardDescPlaceholder":"Décrivez brièvement l'objectif de ce comité consultatif…","boardDescription":"Description (facultatif)","boardName":"Nom de l'effectif","boardNamePlaceholder":"ex. Comité de stratégie produit","cancel":"Annuler","collapse":"Réduire","createNew":"Créer un conseiller","createWorkforce":"Créer l'effectif","creatingAgent":"Création…","creationFailed":"Échec de la création","creationFailedDesc":"Une erreur est survenue. Vous pouvez réessayer, la reprise se fera là où elle s'est arrêtée.","customTemplate":"Personnalisé","customTemplateDesc":"Partez de zéro avec votre propre configuration","error":"Échec","existing":"Existant","expand":"Développer","groupError":"Échec de la constitution de la task force : {{error}}","model":"Modèle","modelPlaceholder":"ex. claude-sonnet-5","new":"Nouveau","next":"Suivant","pending":"En attente…","personality":"Personnalité et expertise","personalityPlaceholder":"Décrivez l'expertise, la perspective et le style de communication de ce conseiller…","provider":"Fournisseur LLM","ready":"Prêt","removeAdvisor":"Retirer le conseiller","role":"Rôle","selectAgent":"Sélectionner un agent","selectProvider":"Sélectionner un fournisseur…","settingUp":"Configuration de votre effectif…","settingUpBoard":"Constitution de la task force…","settingUpDesc":"Création des conseillers et configuration du tableau. Cela peut prendre un moment.","stepIndicatorLabel":"Progression de l'assistant","stepReview":"Vérification","stepTeam":"Équipe","stepTemplate":"Modèle","success":"Task force constituée avec succès !","team":"Équipe","templates":"Modèles de discussion","tryAgain":"Réessayer","unnamed":"Sans nom","untitled":"Tableau sans titre","useExisting":"Utiliser un agent existant","yourAdvisors":"Vos conseillers"},"workforce":"Effectif"}`),xe=JSON.parse(`{"title":"Opérateur de plateforme","subtitle":"Posez vos questions sur ce déploiement EDDI — il fait les recherches pour vous.","readOnlyChip":"Lecture seule","readWriteChip":"Lecture et écriture","configError":"Impossible de charger la configuration de l'opérateur","empty":{"title":"L'opérateur de plateforme est désactivé","description":"Activez-le pour discuter avec un agent capable d'inspecter vos agents, workflows, conversations, déploiements et journaux — et, avec votre approbation de chaque modification, de les piloter pour vous.","action":"Activer l'opérateur de plateforme"},"discovery":{"title":"Découvrez votre opérateur de plateforme","description":"Un assistant qui inspecte et pilote ce déploiement. Désactivé par défaut ; chaque modification attend votre approbation.","action":"Activer"},"activation":{"title":"Activer l'opérateur de plateforme","subtitle":"Choisissez le modèle qui fera fonctionner l'opérateur, vérifiez ses instructions et déployez.","modelStep":"Modèle","reviewStep":"Prompt et vérification","provider":"Fournisseur","model":"Modèle","baseUrl":"URL de base","apiKey":"Clé API du modèle","apiKeyHint":"La clé de votre fournisseur LLM. Il ne s'agit pas d'un identifiant EDDI.","apiKeyPlaceholder":"Collez votre clé API ou choisissez une clé du coffre","vaultDown":"Le coffre à secrets est indisponible, les clés ne peuvent donc pas y être stockées pour le moment. Une clé saisie ici est transmise au backend, qui la met au coffre s'il le peut.","environment":"Environnement","authMode":"Authentification de l'opérateur","authModeHint":"L'opérateur appelle votre API d'administration EDDI. Ce réglage détermine les identifiants portés par ces appels.","authNoneBlocked":"L'authentification est activée sur ce déploiement : les appels d'outils non authentifiés seraient rejetés. L'opérateur se déploierait correctement puis échouerait à chaque recherche. Choisissez plutôt « Votre identité ».","scope":{"label":"Capacité","default":"Par défaut","hint":"Ce que l'opérateur est autorisé à faire. Chaque écriture reste en attente de votre approbation — voir les règles de sécurité ci-dessous.","readOnly":{"label":"Lecture seule","description":"Peut inspecter et expliquer ce déploiement. Ne peut rien modifier."},"readWrite":{"label":"Lecture et écriture","description":"Peut aussi créer et modifier des agents et des groupes d'agents, déployer, annuler le déploiement, désactiver une planification incontrôlée et modifier le descripteur d'un agent — chacune de ces actions étant d'abord soumise à votre approbation."},"writeWarning":"L'activation vérifie la barrière d'approbation par rapport à la politique enregistrée avant de se terminer. Une écriture de test réelle et inoffensive s'exécute ensuite en arrière-plan — si elle s'exécute un jour sans pause d'approbation, l'opérateur est immédiatement supprimé."},"safetyPreamble":"Règles de sécurité (non modifiables)","safetyPreambleHint":"Toujours ajoutées en tête. Elles indiquent à l'opérateur de traiter tout ce que renvoient ses outils comme des données non fiables.","promptBody":"Instructions de l'opérateur","promptBodyHint":"Modifiez la façon dont l'opérateur se présente et travaille.","tools":"Outils qui lui seront confiés ({{toolCount}})","activate":"Activer et déployer","callerIdentityNote":"EDDI insère votre jeton au moment de l'appel. Il n'est jamais enregistré dans la conversation et n'est renvoyé qu'à ce déploiement.","rebuildWarning":"L'enregistrement crée un nouvel agent opérateur et supprime l'actuel. Votre conversation d'opérateur existante ne sera pas conservée.","environmentHint":"Où s'exécute l'agent opérateur lui-même. Il peut toujours lire n'importe quel environnement."},"authMode":{"none":{"label":"Aucun identifiant","description":"Les appels d'outils ne portent aucun en-tête Authorization. Ne fonctionne que si l'authentification est désactivée sur ce déploiement EDDI."},"caller-identity":{"label":"Votre identité","description":"Les appels d'outils s'exécutent en tant qu'utilisateur connecté, avec ses permissions et sa piste d'audit. Requis lorsque l'authentification est activée."}},"stage":{"idle":"","validating":"Vérification que ce déploiement expose les points de terminaison nécessaires…","provisioning":"Création de l'agent opérateur…","resolving-version":"Résolution de la version de l'agent…","saving":"Enregistrement de la configuration…","verifying-gate":"Vérification de la barrière d'approbation…","done":"Terminé","longWait1":"L'agent opérateur est en cours de création et de déploiement — c'est l'étape la plus longue…","longWait2":"Configuration des outils et de la barrière d'approbation sur le nouvel agent…","longWait3":"Toujours en cours — le déploiement peut prendre du temps sur une plateforme chargée…"},"status":{"title":"Opérateur","provider":"Fournisseur","environment":"Environnement","authMode":"S'authentifie en tant que","version":"Version","checking":"Vérification…","ready":"Déployé","inProgress":"Déploiement…","error":"Erreur de déploiement","notFound":"Non déployé","errorHelp":"Le déploiement de l'agent opérateur a échoué. Reconfigurez-le pour réessayer, ou consultez les journaux de la plateforme pour connaître l'erreur sous-jacente.","reconfigure":"Reconfigurer","deactivate":"Désactiver","reset":"Supprimer l'opérateur","deactivateConfirmTitle":"Désactiver l'opérateur de plateforme ?","deactivateConfirmBody":"L'opérateur est retiré du déploiement et cesse de répondre. Sa configuration est conservée, vous pourrez le réactiver plus tard.","resetConfirmTitle":"Supprimer l'opérateur de plateforme ?","resetConfirmBody":"L'agent opérateur et toutes les ressources créées pour lui sont définitivement supprimés, ainsi que sa configuration enregistrée. Cette action est irréversible.","connectionCheck":"Vérifier la connexion","gateChecking":"Vérification de la barrière…","gateUnknown":"Barrière non contrôlée","gateVerified":"Barrière vérifiée","gateNotVerified":"Barrière non vérifiée","gateUnverifiedHelp":"La barrière d'approbation n'a pas pu être vérifiée sur le document de cet agent."},"chat":{"empty":"Interrogez votre déploiement. L'opérateur fait les recherches et vous montre chaque appel qu'il effectue.","restoring":"Ouverture de la conversation…","placeholder":"Agents, conversations, déploiements, journaux…","pausedPlaceholder":"En attente d'une décision ci-dessus avant que l'opérateur ne puisse continuer…","readOnlyPlaceholder":"Cette conversation est terminée — démarrez-en une nouvelle pour continuer.","send":"Envoyer","stop":"Arrêter","newConversation":"Démarrer une nouvelle conversation","transcript":"Conversation avec l'opérateur","pauseCompactFallback":"L'opérateur a besoin de votre approbation pour continuer.","pauseCompactReview":"Examiner pour approuver →","resolving":"Exécution de l'étape approuvée — cela peut prendre un instant…"},"drawer":{"title":"Opérateur de plateforme","notActivated":"Activez-le pour discuter avec votre déploiement depuis n'importe où.","titleAwaiting":"Opérateur de plateforme — une décision vous attend","activate":"Configurer l'opérateur de plateforme"},"approval":{"reconstructedEndpoint":"{{method}} {{path}} (reconstruit)","verified":"vérifié","verifiedTitle":"Résolu à partir de la configuration réelle de l'appel API ; revérifié juste avant l'exécution — si la requête change avant cela, l'exécution est refusée.","previewOnly":"aperçu","previewOnlyTitle":"Cet appel exécute des étapes de préparation supplémentaires avant de s'exécuter ; il s'agit donc d'un aperçu au mieux — la requête réelle peut différer et n'est pas revérifiée avant l'exécution.","query":"Requête","headers":"En-têtes","bodyTruncated":"Le corps est affiché tronqué pour l'affichage — l'approbation couvre toujours la requête complète.","diffHeading":"Modifications par rapport à la version enregistrée {{version}}","diffLoading":"Chargement de la version enregistrée pour comparaison…","diffFailed":"Impossible de charger la version enregistrée pour comparaison — le document proposé complet figure ci-dessous.","diffForbidden":"La comparaison avec la version enregistrée nécessite un accès éditeur — le document proposé complet figure ci-dessous.","diffRedactionNote":"Les identifiants sont masqués dans la version proposée : ils apparaissent donc ici comme des modifications même s'ils sont inchangés.","showFullRequest":"Afficher le document proposé complet","hideFullRequest":"Masquer le document proposé complet","expandBody":"Développer","escalation":{"heading":"Cette requête accorde des capacités supplémentaires","dynamicAgentCreation":"Ce groupe peut créer de nouveaux agents pendant son exécution. Ces agents ne sont pas eux-mêmes soumis à approbation.","dynamicAgentRecruitment":"Ce groupe peut intégrer d'autres agents existants à ses discussions.","autoApproveOnTimeout":"Les approbations de cette ressource sont accordées automatiquement en cas d'expiration du délai, sans surveillance.","agentCreatedWithoutGate":"Cet agent est créé sans passerelle d'approbation. Chaque écriture qu'il effectuera par la suite s'exécutera sans supervision.","agentCreatedWithBroadEndpoints":"Cet agent est créé avec un accès en écriture à son API — non limité aux lectures.","agentCreatedWithExternalTools":"Cet agent est créé avec l'ensemble des outils qu'un serveur MCP externe propose. C'est ce serveur qui décide lesquels, et il peut les modifier par la suite.","unchecked":"Le corps était trop long pour être analysé à la recherche d'octrois de capacités — lisez-le en entier avant d'approuver.","inlineCredential":"Cette requête intègre ce qui ressemble à un identifiant en clair au lieu d'une référence \${vault:…}. Un secret écrit en dur est stocké en clair et ne peut pas être renouvelé depuis le coffre-fort — rejetez et demandez la référence du coffre-fort."},"blockedSelfTarget":"Un agent ne peut pas modifier sa propre définition, et cette requête vise l'agent de l'opérateur lui-même ({{agentId}}). Tant qu'elle est présente, l'ensemble du lot ne peut pas être approuvé — rejetez-la et effectuez cette modification depuis la page de cet agent.","blockedSelfConversation":"Un agent ne peut pas envoyer de message dans la conversation où il s'exécute, et cette requête vise celle-ci ({{agentId}}). Il inscrirait son propre texte comme si un humain l'avait dit. Tant qu'elle est présente, tout le lot ne peut pas être approuvé : rejetez-la.","blockedGateCarrying":"Cette requête écrit une configuration LLM qui définit sa propre barrière d'approbation (toolApprovals), ce qui remplacerait la barrière qui l'examine. L'approbation est indisponible pour tout le lot tant qu'elle est présente — rejetez, et modifiez la barrière depuis la page de l'agent.","blockedGateUnverifiable":"Cette requête écrit une configuration LLM dont le corps ne peut être lu intégralement — trop volumineux ou JSON invalide — ; on ne peut donc pas confirmer l'absence de remplacement de la barrière d'approbation. L'approbation est indisponible pour tout le lot tant qu'elle est présente — rejetez, et effectuez cette modification depuis la page de l'agent.","blockedGateUnpinned":"Cette requête écrit une configuration LLM mais n'est pas épinglée : ce qui s'exécute réellement peut différer de ce qui est affiché ici, et l'absence de remplacement de la barrière d'approbation ne peut être confirmée. L'approbation est indisponible pour tout le lot tant qu'elle est présente — rejetez, et effectuez cette modification depuis la page de l'agent.","blockedSelfStart":"L'opérateur ne peut pas se tester lui-même — démarrer une conversation avec son propre agent ({{agentId}}) réinjecterait sa sortie en entrée. L'approbation est indisponible pour tout le lot tant que cet appel est présent — rejetez et testez un autre agent."},"starters":{"whatsDeployed":"Qu'est-ce qui est déployé actuellement ?","recentConversations":"Montre-moi les conversations les plus récentes","healthCheck":"Y a-t-il un problème sur cette plateforme ?","diagnoseAgent":"Pourquoi le déploiement d'un de mes agents échoue-t-il ?"},"toast":{"activated":"Opérateur de plateforme activé","deactivated":"Opérateur de plateforme désactivé","reset":"Opérateur de plateforme supprimé","activatedButUnreachable":"Opérateur déployé, mais il n'a pas pu lire votre plateforme","activatedGateVerified":"Opérateur de plateforme activé — barrière d'approbation vérifiée. Les vérifications de connexion s'exécutent en arrière-plan.","activatedChecking":"Opérateur de plateforme activé. Les vérifications de connexion s'exécutent en arrière-plan.","writeProbeVerified":"Accès en écriture vérifié — une écriture réelle protégée a été mise en pause pour approbation.","writeProbeFailed":"La barrière d'approbation n'a pas tenu — l'opérateur a été supprimé.","writeProbeInconclusive":"Le test d'écriture en direct n'a pas été concluant."},"canary":{"genericFailure":"La vérification de connexion a échoué.","passed":"L'opérateur atteint bien votre plateforme.","recheck":"Vérifier à nouveau","title":"L'opérateur est déployé, mais n'a pas pu lire votre plateforme."},"paused":{"title":"L'opérateur de plateforme est en pause","description":"Il reste configuré — le réactiver redéploie le même agent. Rien n'a été supprimé.","action":"Réactiver"},"managedAgentBadge":"Opérateur","managedAgentHint":"Provisionné et géré par l'écran Opérateur de plateforme. Le modifier ou le supprimer ici cassera cet écran.","decisionLog":{"approved":"Vous avez approuvé cette requête","rejected":"Vous avez rejeté cette requête","rePaused":"De nouveau en pause — une autre décision est nécessaire","noReply":"Le tour s'est terminé sans réponse","executed":"Exécuté : {{calls}}","partial_one":"Approuvée — {{count}} appel rejeté","partial_other":"Approuvée — {{count}} appels rejetés","partial_many":"Approuvée — {{count}} appels rejetés"},"tabs":{"label":"Vues de l'opérateur","chat":"Discussion","history":"Historique"},"history":{"emptyTitle":"Aucune conversation passée","emptyDescription":"Les conversations avec l'opérateur apparaissent ici pour que vous puissiez les reprendre plus tard.","noOpeningMessage":"(pas encore de message)","stepCount_one":"{{count}} étape","stepCount_other":"{{count}} étapes","stepCount_many":"{{count}} étapes"}}`),Se={addCadence:"Ajouter une cadence",addTask:"Ajouter une tâche",backToGroup:"Retour au groupe",backlogEmpty:"Aucune tâche en attente pour le moment.",backlogTitle:"Tâches en attente ({{count}})",cadenceAdded:"Cadence ajoutée",cadenceDeleted:"Cadence supprimée",cadenceRunning:"Une discussion déclenchée par la cadence est en cours.",cadencesEmpty:"Aucune cadence récurrente configurée pour le moment.",cadencesTitle:"{{count}} cadence(s)",confirmDeleteCadenceDesc:"Cela arrête ses exécutions planifiées. Les discussions déjà exécutées ne sont pas affectées.",confirmDeleteCadenceTitle:"Supprimer cette cadence ?",createdBy:"par {{who}}",cronLabel:"Expression cron",cronPlaceholder:"ex. 0 9 * * MON",discussions:"Discussions",failed:"Échec",inputTemplatePlaceholder:"Modèle d'invite pour chaque exécution (facultatif — sinon, une simple liste des tâches en attente est utilisée)",lastRun:"Dernière exécution",maxCostLabel:"Coût max / exécution ($, facultatif)",maxCostPlaceholder:"valeur par défaut du groupe",maxPerRunLabel:"Tâches max / exécution",member:"Membre",navLabel:"Espace de travail",never:"Jamais",perMemberStats:"Fiabilité par membre",priority:"Priorité",subtitle:"Une liste de tâches persistante et des cadences récurrentes que ce groupe exécute sans surveillance, selon un calendrier.",taskAdded:"Tâche ajoutée à la liste en attente",taskDescriptionPlaceholder:"Description (facultatif)",taskSubjectPlaceholder:"Objet de la tâche",tasksVerified:"Tâches vérifiées",timeZoneLabel:"Fuseau horaire",title:"Espace de travail de l'équipe permanente",totalCost:"Coût total",verified:"Vérifié",maxCostInvalid:"Le coût maximal par exécution doit être un nombre supérieur ou égal à 0.",cadenceSummary_many:"jusqu'à {{max}} tâches/exécution",cadenceSummary_one:"jusqu'à {{max}} tâche/exécution",cadenceSummary_other:"jusqu'à {{max}} tâches/exécution",inputTemplateTooLong:"Le modèle de prompt est limité à {{max}} caractères."},Pe={title:"Nouvelle équipe"},Ee={title:"Mises à jour EDDI",description:"Vérifiez si une version plus récente d'EDDI est disponible. Rien n'est envoyé tant que vous ne le demandez pas.",installed:"Installée",githubRelease:"Version GitHub",dockerImage:"Image Docker",unknownVersion:"Inconnue",checkNow:"Vérifier maintenant",checking:"Vérification…",autoCheck:"Vérifier automatiquement à chaque chargement de page",autoCheckHint:"Effectue une vérification par rechargement du navigateur et affiche une bannière si une version plus récente existe.",privacyNote:"La vérification contacte uniquement api.github.com depuis votre navigateur. Aucune donnée de votre déploiement n'est transmise.",neverChecked:"Aucune vérification effectuée.",upToDate:"Vous utilisez la dernière version ({{version}}).",updateAvailable:"EDDI {{version}} est disponible",updateAvailableDetail:"Vous utilisez {{installed}}.",ahead:"Vous utilisez {{installed}}, plus récente que la dernière version publiée ({{version}}).",unknownInstalled:"La dernière version est {{version}}. La version installée n'a pas pu être déterminée, aucune comparaison n'est donc possible.",errorRateLimited:"La limite de requêtes non authentifiées de GitHub est atteinte. Réessayez plus tard ou ouvrez la page des versions.",errorBlockedByCsp:"La Content-Security-Policy de ce déploiement empêche le navigateur d'atteindre api.github.com, la vérification ne peut donc pas s'exécuter. Ajoutez api.github.com à la directive connect-src, ou utilisez le lien des versions ci-dessous.",errorUnreachable:"Impossible de joindre api.github.com. Vérifiez votre réseau ou votre proxy sortant.",errorFailed:"La vérification des mises à jour a échoué. Ouvrez la page des versions pour vérifier manuellement.",publishedOn:"Publiée le {{date}}",whatsNew:"Nouveautés de la version {{version}}",fullNotes:"Notes de version complètes sur GitHub",noNotes:"Cette version n'a pas de notes.",releaseNotes:"Notes de version",allReleases:"Toutes les versions",howToUpdate:"Comment mettre à jour",howToUpdateCli:"Avec la CLI eddi (créée par l'installateur) :",howToUpdateManual:"Sans la CLI, depuis votre répertoire d'installation (~/.eddi par défaut) :",howToUpdateNote:"Adaptez les options -f à votre configuration — ajoutez -f docker-compose.auth.yml si vous utilisez Keycloak."},Le={acrossGroups:"sur {{count}} task forces",actions:"Actions",activeExperts:"Experts actifs",activity:"Activité",agentLeaderboard:"Classement des agents",agentName:"Agent",allOutcomes:"Tous les résultats",allStyles:"Tous les styles",avgDuration:"Durée moy.",cancelCompare:"Annuler",clearAll:"Tout effacer",clearFilters:"Effacer les filtres",completionRate:"Taux d'achèvement",contributions:"Contributions",covered:"Couvert",createFirst:"Constituer une task force",daysAgo:"il y a {{count}} j",emptyDescription:"Lancez une discussion de task force pour voir les analyses ici.",emptyHaveGroups:"Vous avez {{count}} task forces mais aucune discussion. Lancez une discussion pour voir les analyses.",emptyTitle:"Aucune analyse pour l'instant",errorDescription:"Certaines données n'ont pas pu être récupérées. Veuillez réessayer.",errors:"Erreurs",errorTitle:"Impossible de charger les analyses",filteredOf:"{{filtered}} sur {{total}} au total",highConfidence:"Confiance élevée",hoursAgo:"il y a {{count}} h",justNow:"à l'instant",last30Days:"30 derniers jours",minutesAgo:"il y a {{count}} min",noAgents:"Aucune activité d'agent pour l'instant.",noDiscussions:"Aucune discussion pour l'instant.",noMatchingDiscussions:"Aucune discussion ne correspond aux filtres actifs.",noPhases:"Aucune donnée de phase disponible.",noResults:"Aucune discussion correspondante",noResultsHint:"Ajustez vos filtres ou effacez-les pour voir toutes les données.",noSkills:"Aucune capacité enregistrée. Définissez des compétences sur vos agents pour suivre la couverture.",noStyles:"Aucune donnée de style disponible.",outcomeChart:"Répartition des résultats : {{total}} au total",outcomes:"Résultats",participatedRecently:"ont participé à des discussions",perDiscussion:"par discussion",phaseChart:"Répartition des phases",phaseDistribution:"Répartition des phases",pickSecondAgent:"Cliquez sur un agent pour le comparer à {{name}}",recentDiscussions:"Discussions récentes",removeFilter:"Retirer le filtre : {{label}}",retry:"Réessayer",sessions:"Sessions",sessionsCompleted:"sessions terminées avec succès",showingResults:"{{count}} sur {{total}}",skillCoverage:"Couverture des compétences",styleBreakdown:"Styles de discussion",subtitle:"30 derniers jours",title:"Analyses",total:"Total",totalDiscussions:"Discussions",totalSkills:"Compétences",uncoveredSkills:"{{count}} compétences non couvertes"},ke={activeRate:"Taux d'activité",activeRateDesc:"Agents actifs au cours des 30 derniers jours",dormantAgents:"Inactifs",dormantAgentsDesc:"Agents inutilisés depuis plus de 30 jours",msgAtRisk:"La majeure partie de votre effectif est inactive — envisagez de les solliciter",msgHealthy:"{{rate}} % de votre effectif numérique a été actif au cours des 30 derniers jours",msgModerate:"Certains experts numériques n'ont pas été consultés récemment",statusAtRisk:"À risque",statusHealthy:"Sain",statusModerate:"Modéré",taskForces:"Task forces",taskForcesDesc:"Groupes d'agents collaboratifs",title:"Santé des connaissances",workforceSize:"Taille de l'effectif",workforceSizeDesc:"Total des experts numériques déployés"},Re={hint:"Nous mémoriserons votre choix et vous y conduirons automatiquement la prochaine fois.",manager:{description:"Créez, configurez et déployez vos agents IA. Gérez les workflows, les ressources et les intégrations.",feature1:"Créer et déployer des agents",feature2:"Configurer workflows et pipelines",feature3:"Gérer ressources et extensions",title:"Manager"},subtitle:"Choisissez votre espace de travail pour commencer.",title:"Bienvenue dans EDDI",workforce:{description:"Réunissez des équipes IA qui débattent, analysent et résolvent ensemble des défis complexes.",feature1:"Constituer des task forces d'agents",feature2:"Mener des discussions collaboratives",feature3:"Obtenir des réponses synthétisées",title:"Effectif"}},qe={assembleTaskForce:"Constituer une task force",assembleTaskForceDesc:"Réunissez des experts pour résoudre des défis complexes",chatWithAgent:"Discuter avec un agent",chatWithAgentDesc:"Ayez une conversation en tête-à-tête avec un expert numérique",manageWorkforce:"Gérer l'effectif",manageWorkforceDesc:"Configurer et déployer des experts numériques",title:"Actions rapides",viewInsights:"Voir les analyses",viewInsightsDesc:"Suivez la couverture de connaissances de votre effectif"},Ie={addAgent:"Déployer un agent",count:"{{count}} experts",ready:"Prêt",title:"Votre effectif numérique",unnamed:"Agent sans nom"},Me={production:"Production",test:"Test"},we={attachments:e,app:t,auth:r,nav:n,theme:s,language:o,pages:i,common:a,agents:u,agentDetail:l,wizard:c,setupWizard:d,packages:p,packageDetail:m,packageEditor:g,conversations:v,conversationDetail:f,chat:h,resources:b,editor:A,rulesEditor:C,apiCallsEditor:y,mcpcallsEditor:D,llmEditor:T,outputEditor:x,propertySetterEditor:S,dictionaryEditor:P,parserEditor:E,coordinator:L,contentEditor:k,logs:R,secrets:q,audit:I,schedules:M,cascadeTrace:w,debugDrawer:z,costDashboard:j,memoryInspector:N,logViewer:O,promptViewer:H,promptPreview:V,studio:U,ragEditor:F,onboarding:_,platform:B,stream:G,createOrWizard:W,groups:K,taskBoard:J,memories:Q,properties:Y,triggers:$,capabilities:Z,exportDialog:X,importDialog:ee,syncPage:te,sync:re,userConversations:ne,commandPalette:se,groupWizard:oe,groupTemplates:ie,channels:ae,channelDetail:ue,hitl:le,chatDrawer:ce,dashboard:de,errorBoundary:pe,gdpr:me,mockBanner:ge,orphans:ve,quotas:fe,secretPicker:he,snippetEditor:be,status:Ae,userData:Ce,variables:ye,workflowEditor:De,Workforce:Te,operator:xe,groupWorkspace:Se,workforceWizard:Pe,updates:Ee,analyticsPage:Le,knowledgeHealth:ke,landing:Re,quickActions:qe,workforce:Ie,environments:Me};export{Te as Workforce,l as agentDetail,u as agents,Le as analyticsPage,y as apiCallsEditor,t as app,e as attachments,I as audit,r as auth,Z as capabilities,w as cascadeTrace,ue as channelDetail,ae as channels,h as chat,ce as chatDrawer,se as commandPalette,a as common,k as contentEditor,f as conversationDetail,v as conversations,L as coordinator,j as costDashboard,W as createOrWizard,de as dashboard,z as debugDrawer,we as default,P as dictionaryEditor,A as editor,Me as environments,pe as errorBoundary,X as exportDialog,me as gdpr,ie as groupTemplates,oe as groupWizard,Se as groupWorkspace,K as groups,le as hitl,ee as importDialog,ke as knowledgeHealth,Re as landing,o as language,T as llmEditor,O as logViewer,R as logs,D as mcpcallsEditor,Q as memories,N as memoryInspector,ge as mockBanner,n as nav,_ as onboarding,xe as operator,ve as orphans,x as outputEditor,m as packageDetail,g as packageEditor,p as packages,i as pages,E as parserEditor,B as platform,V as promptPreview,H as promptViewer,Y as properties,S as propertySetterEditor,qe as quickActions,fe as quotas,F as ragEditor,b as resources,C as rulesEditor,M as schedules,he as secretPicker,q as secrets,d as setupWizard,be as snippetEditor,Ae as status,G as stream,U as studio,re as sync,te as syncPage,J as taskBoard,s as theme,$ as triggers,Ee as updates,ne as userConversations,Ce as userData,ye as variables,c as wizard,De as workflowEditor,Ie as workforce,Pe as workforceWizard}; diff --git a/src/main/resources/META-INF/resources/assets/freemarker2-DiN8Ju52.js b/src/main/resources/META-INF/resources/assets/freemarker2-CoZsy1EV.js similarity index 85% rename from src/main/resources/META-INF/resources/assets/freemarker2-DiN8Ju52.js rename to src/main/resources/META-INF/resources/assets/freemarker2-CoZsy1EV.js index 818d753d3e..7fe943917e 100644 --- a/src/main/resources/META-INF/resources/assets/freemarker2-DiN8Ju52.js +++ b/src/main/resources/META-INF/resources/assets/freemarker2-CoZsy1EV.js @@ -1,3 +1,3 @@ -import{l as c}from"./editor-registry-CIV_g9hj.js";import"./index-BY6d8wze.js";import"./resources-R5ikMSzo.js";import"./parser-editor-DJVsdXlv.js";import"./type-SbeC_oGu.js";import"./git-compare-arrows-pI8Ehpf-.js";import"./undo-2-CF9h_dkU.js";import"./save-lzTRlOlB.js";import"./eye-Dbrf-yrM.js";import"./secret-key-picker-TXey-VQE.js";import"./use-secrets-C_oj4VYh.js";import"./eye-off-DQKzJHI5.js";import"./tool-approvals-editor-BKW-ZLXY.js";import"./timer-BX3xgSur.js";import"./arrow-right-left-Or_4oRf0.js";import"./file-output-BA4KZHPi.js";import"./shield-Ce05kery.js";import"./info-vszmN4vn.js";import"./types-BY9zm5d-.js";import"./scale-DJXpJ1ID.js";import"./gauge-D0qrGV1d.js";import"./dollar-sign-Dt9VyGPU.js";import"./handshake-d__LQWU9.js";import"./cpu-BsIZspVa.js";import"./server-CeKDVLCh.js";import"./upload-DxPMOlxt.js";import"./lock-CPVVTGkJ.js";import"./tag-DrXWC0RK.js";const s=["assign","flush","ftl","return","global","import","include","break","continue","local","nested","nt","setting","stop","t","lt","rt","fallback"],d=["attempt","autoesc","autoEsc","compress","comment","escape","noescape","function","if","list","items","sep","macro","noparse","noParse","noautoesc","noAutoEsc","outputformat","switch","visit","recurse"],r={close:">",id:"angle",open:"<"},a={close:"\\]",id:"bracket",open:"\\["},F={close:"[>\\]]",id:"auto",open:"[<\\[]"},k={close:"\\}",id:"dollar",open1:"\\$",open2:"\\{"},p={close:"\\]",id:"bracket",open1:"\\[",open2:"="};function l(t){return{brackets:[["<",">"],["[","]"],["(",")"],["{","}"]],comments:{blockComment:[`${t.open}--`,`--${t.close}`]},autoCloseBefore:` -\r }]),.:;=`,autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"',notIn:["string"]},{open:"'",close:"'",notIn:["string"]}],surroundingPairs:[{open:'"',close:'"'},{open:"'",close:"'"},{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"}],folding:{markers:{start:new RegExp(`${t.open}#(?:${d.join("|")})([^/${t.close}]*(?!/)${t.close})[^${t.open}]*$`),end:new RegExp(`${t.open}/#(?:${d.join("|")})[\\r\\n\\t ]*>`)}},onEnterRules:[{beforeText:new RegExp(`${t.open}#(?!(?:${s.join("|")}))([a-zA-Z_]+)([^/${t.close}]*(?!/)${t.close})[^${t.open}]*$`),afterText:new RegExp(`^${t.open}/#([a-zA-Z_]+)[\\r\\n\\t ]*${t.close}$`),action:{indentAction:c.IndentAction.IndentOutdent}},{beforeText:new RegExp(`${t.open}#(?!(?:${s.join("|")}))([a-zA-Z_]+)([^/${t.close}]*(?!/)${t.close})[^${t.open}]*$`),action:{indentAction:c.IndentAction.Indent}}]}}function g(){return{brackets:[["<",">"],["[","]"],["(",")"],["{","}"]],autoCloseBefore:` -\r }]),.:;=`,autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"',notIn:["string"]},{open:"'",close:"'",notIn:["string"]}],surroundingPairs:[{open:'"',close:'"'},{open:"'",close:"'"},{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"}],folding:{markers:{start:new RegExp(`[<\\[]#(?:${d.join("|")})([^/>\\]]*(?!/)[>\\]])[^<\\[]*$`),end:new RegExp(`[<\\[]/#(?:${d.join("|")})[\\r\\n\\t ]*>`)}},onEnterRules:[{beforeText:new RegExp(`[<\\[]#(?!(?:${s.join("|")}))([a-zA-Z_]+)([^/>\\]]*(?!/)[>\\]])[^[<\\[]]*$`),afterText:new RegExp("^[<\\[]/#([a-zA-Z_]+)[\\r\\n\\t ]*[>\\]]$"),action:{indentAction:c.IndentAction.IndentOutdent}},{beforeText:new RegExp(`[<\\[]#(?!(?:${s.join("|")}))([a-zA-Z_]+)([^/>\\]]*(?!/)[>\\]])[^[<\\[]]*$`),action:{indentAction:c.IndentAction.Indent}}]}}function i(t,n){const _=`_${t.id}_${n.id}`,e=u=>u.replace(/__id__/g,_),o=u=>{const A=u.source.replace(/__id__/g,_);return new RegExp(A,u.flags)};return{unicode:!0,includeLF:!1,start:e("default__id__"),ignoreCase:!1,defaultToken:"invalid",tokenPostfix:".freemarker2",brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],[e("open__id__")]:new RegExp(t.open),[e("close__id__")]:new RegExp(t.close),[e("iOpen1__id__")]:new RegExp(n.open1),[e("iOpen2__id__")]:new RegExp(n.open2),[e("iClose__id__")]:new RegExp(n.close),[e("startTag__id__")]:o(/(@open__id__)(#)/),[e("endTag__id__")]:o(/(@open__id__)(\/#)/),[e("startOrEndTag__id__")]:o(/(@open__id__)(\/?#)/),[e("closeTag1__id__")]:o(/((?:@blank)*)(@close__id__)/),[e("closeTag2__id__")]:o(/((?:@blank)*\/?)(@close__id__)/),blank:/[ \t\n\r]/,keywords:["false","true","in","as","using"],directiveStartCloseTag1:/attempt|recover|sep|auto[eE]sc|no(?:autoe|AutoE)sc|compress|default|no[eE]scape|comment|no[pP]arse/,directiveStartCloseTag2:/else|break|continue|return|stop|flush|t|lt|rt|nt|nested|recurse|fallback|ftl/,directiveStartBlank:/if|else[iI]f|list|for[eE]ach|switch|case|assign|global|local|include|import|function|macro|transform|visit|stop|return|call|setting|output[fF]ormat|nested|recurse|escape|ftl|items/,directiveEndCloseTag1:/if|list|items|sep|recover|attempt|for[eE]ach|local|global|assign|function|macro|output[fF]ormat|auto[eE]sc|no(?:autoe|AutoE)sc|compress|transform|switch|escape|no[eE]scape/,escapedChar:/\\(?:[ntrfbgla\\'"\{=]|(?:x[0-9A-Fa-f]{1,4}))/,asciiDigit:/[0-9]/,integer:/[0-9]+/,nonEscapedIdStartChar:/[\$@-Z_a-z\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u1FFF\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183-\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3006\u3031-\u3035\u303B-\u303C\u3040-\u318F\u31A0-\u31BA\u31F0-\u31FF\u3300-\u337F\u3400-\u4DB5\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5-\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40-\uFB41\uFB43-\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/,escapedIdChar:/\\[\-\.:#]/,idStartChar:/(?:@nonEscapedIdStartChar)|(?:@escapedIdChar)/,id:/(?:@idStartChar)(?:(?:@idStartChar)|(?:@asciiDigit))*/,specialHashKeys:/\*\*|\*|false|true|in|as|using/,namedSymbols:/<=|>=|\\lte|\\lt|<|\\gte|\\gt|>|&&|\\and|->|->|==|!=|\+=|-=|\*=|\/=|%=|\+\+|--|<=|&&|\|\||:|\.\.\.|\.\.\*|\.\.<|\.\.!|\?\?|=|<|\+|-|\*|\/|%|\||\.\.|\?|!|&|\.|,|;/,arrows:["->","->"],delimiters:[";",":",",","."],stringOperators:["lte","lt","gte","gt"],noParseTags:["noparse","noParse","comment"],tokenizer:{[e("default__id__")]:[{include:e("@directive_token__id__")},{include:e("@interpolation_and_text_token__id__")}],[e("fmExpression__id__.directive")]:[{include:e("@blank_and_expression_comment_token__id__")},{include:e("@directive_end_token__id__")},{include:e("@expression_token__id__")}],[e("fmExpression__id__.interpolation")]:[{include:e("@blank_and_expression_comment_token__id__")},{include:e("@expression_token__id__")},{include:e("@greater_operators_token__id__")}],[e("inParen__id__.plain")]:[{include:e("@blank_and_expression_comment_token__id__")},{include:e("@directive_end_token__id__")},{include:e("@expression_token__id__")}],[e("inParen__id__.gt")]:[{include:e("@blank_and_expression_comment_token__id__")},{include:e("@expression_token__id__")},{include:e("@greater_operators_token__id__")}],[e("noSpaceExpression__id__")]:[{include:e("@no_space_expression_end_token__id__")},{include:e("@directive_end_token__id__")},{include:e("@expression_token__id__")}],[e("unifiedCall__id__")]:[{include:e("@unified_call_token__id__")}],[e("singleString__id__")]:[{include:e("@string_single_token__id__")}],[e("doubleString__id__")]:[{include:e("@string_double_token__id__")}],[e("rawSingleString__id__")]:[{include:e("@string_single_raw_token__id__")}],[e("rawDoubleString__id__")]:[{include:e("@string_double_raw_token__id__")}],[e("expressionComment__id__")]:[{include:e("@expression_comment_token__id__")}],[e("noParse__id__")]:[{include:e("@no_parse_token__id__")}],[e("terseComment__id__")]:[{include:e("@terse_comment_token__id__")}],[e("directive_token__id__")]:[[o(/(?:@startTag__id__)(@directiveStartCloseTag1)(?:@closeTag1__id__)/),t.id==="auto"?{cases:{"$1==<":{token:"@rematch",switchTo:`@default_angle_${n.id}`},"$1==[":{token:"@rematch",switchTo:`@default_bracket_${n.id}`}}}:[{token:"@brackets.directive"},{token:"delimiter.directive"},{cases:{"@noParseTags":{token:"tag",next:e("@noParse__id__.$3")},"@default":{token:"tag"}}},{token:"delimiter.directive"},{token:"@brackets.directive"}]],[o(/(?:@startTag__id__)(@directiveStartCloseTag2)(?:@closeTag2__id__)/),t.id==="auto"?{cases:{"$1==<":{token:"@rematch",switchTo:`@default_angle_${n.id}`},"$1==[":{token:"@rematch",switchTo:`@default_bracket_${n.id}`}}}:[{token:"@brackets.directive"},{token:"delimiter.directive"},{token:"tag"},{token:"delimiter.directive"},{token:"@brackets.directive"}]],[o(/(?:@startTag__id__)(@directiveStartBlank)(@blank)/),t.id==="auto"?{cases:{"$1==<":{token:"@rematch",switchTo:`@default_angle_${n.id}`},"$1==[":{token:"@rematch",switchTo:`@default_bracket_${n.id}`}}}:[{token:"@brackets.directive"},{token:"delimiter.directive"},{token:"tag"},{token:"",next:e("@fmExpression__id__.directive")}]],[o(/(?:@endTag__id__)(@directiveEndCloseTag1)(?:@closeTag1__id__)/),t.id==="auto"?{cases:{"$1==<":{token:"@rematch",switchTo:`@default_angle_${n.id}`},"$1==[":{token:"@rematch",switchTo:`@default_bracket_${n.id}`}}}:[{token:"@brackets.directive"},{token:"delimiter.directive"},{token:"tag"},{token:"delimiter.directive"},{token:"@brackets.directive"}]],[o(/(@open__id__)(@)/),t.id==="auto"?{cases:{"$1==<":{token:"@rematch",switchTo:`@default_angle_${n.id}`},"$1==[":{token:"@rematch",switchTo:`@default_bracket_${n.id}`}}}:[{token:"@brackets.directive"},{token:"delimiter.directive",next:e("@unifiedCall__id__")}]],[o(/(@open__id__)(\/@)((?:(?:@id)(?:\.(?:@id))*)?)(?:@closeTag1__id__)/),[{token:"@brackets.directive"},{token:"delimiter.directive"},{token:"tag"},{token:"delimiter.directive"},{token:"@brackets.directive"}]],[o(/(@open__id__)#--/),t.id==="auto"?{cases:{"$1==<":{token:"@rematch",switchTo:`@default_angle_${n.id}`},"$1==[":{token:"@rematch",switchTo:`@default_bracket_${n.id}`}}}:{token:"comment",next:e("@terseComment__id__")}],[o(/(?:@startOrEndTag__id__)([a-zA-Z_]+)/),t.id==="auto"?{cases:{"$1==<":{token:"@rematch",switchTo:`@default_angle_${n.id}`},"$1==[":{token:"@rematch",switchTo:`@default_bracket_${n.id}`}}}:[{token:"@brackets.directive"},{token:"delimiter.directive"},{token:"tag.invalid",next:e("@fmExpression__id__.directive")}]]],[e("interpolation_and_text_token__id__")]:[[o(/(@iOpen1__id__)(@iOpen2__id__)/),[{token:n.id==="bracket"?"@brackets.interpolation":"delimiter.interpolation"},{token:n.id==="bracket"?"delimiter.interpolation":"@brackets.interpolation",next:e("@fmExpression__id__.interpolation")}]],[/[\$#<\[\{]|(?:@blank)+|[^\$<#\[\{\n\r\t ]+/,{token:"source"}]],[e("string_single_token__id__")]:[[/[^'\\]/,{token:"string"}],[/@escapedChar/,{token:"string.escape"}],[/'/,{token:"string",next:"@pop"}]],[e("string_double_token__id__")]:[[/[^"\\]/,{token:"string"}],[/@escapedChar/,{token:"string.escape"}],[/"/,{token:"string",next:"@pop"}]],[e("string_single_raw_token__id__")]:[[/[^']+/,{token:"string.raw"}],[/'/,{token:"string.raw",next:"@pop"}]],[e("string_double_raw_token__id__")]:[[/[^"]+/,{token:"string.raw"}],[/"/,{token:"string.raw",next:"@pop"}]],[e("expression_token__id__")]:[[/(r?)(['"])/,{cases:{"r'":[{token:"keyword"},{token:"string.raw",next:e("@rawSingleString__id__")}],'r"':[{token:"keyword"},{token:"string.raw",next:e("@rawDoubleString__id__")}],"'":[{token:"source"},{token:"string",next:e("@singleString__id__")}],'"':[{token:"source"},{token:"string",next:e("@doubleString__id__")}]}}],[/(?:@integer)(?:\.(?:@integer))?/,{cases:{"(?:@integer)":{token:"number"},"@default":{token:"number.float"}}}],[/(\.)(@blank*)(@specialHashKeys)/,[{token:"delimiter"},{token:""},{token:"identifier"}]],[/(?:@namedSymbols)/,{cases:{"@arrows":{token:"meta.arrow"},"@delimiters":{token:"delimiter"},"@default":{token:"operators"}}}],[/@id/,{cases:{"@keywords":{token:"keyword.$0"},"@stringOperators":{token:"operators"},"@default":{token:"identifier"}}}],[/[\[\]\(\)\{\}]/,{cases:{"\\[":{cases:{"$S2==gt":{token:"@brackets",next:e("@inParen__id__.gt")},"@default":{token:"@brackets",next:e("@inParen__id__.plain")}}},"\\]":{cases:{...n.id==="bracket"?{"$S2==interpolation":{token:"@brackets.interpolation",next:"@popall"}}:{},...t.id==="bracket"?{"$S2==directive":{token:"@brackets.directive",next:"@popall"}}:{},[e("$S1==inParen__id__")]:{token:"@brackets",next:"@pop"},"@default":{token:"@brackets"}}},"\\(":{token:"@brackets",next:e("@inParen__id__.gt")},"\\)":{cases:{[e("$S1==inParen__id__")]:{token:"@brackets",next:"@pop"},"@default":{token:"@brackets"}}},"\\{":{cases:{"$S2==gt":{token:"@brackets",next:e("@inParen__id__.gt")},"@default":{token:"@brackets",next:e("@inParen__id__.plain")}}},"\\}":{cases:{...n.id==="bracket"?{}:{"$S2==interpolation":{token:"@brackets.interpolation",next:"@popall"}},[e("$S1==inParen__id__")]:{token:"@brackets",next:"@pop"},"@default":{token:"@brackets"}}}}}],[/\$\{/,{token:"delimiter.invalid"}]],[e("blank_and_expression_comment_token__id__")]:[[/(?:@blank)+/,{token:""}],[/[<\[][#!]--/,{token:"comment",next:e("@expressionComment__id__")}]],[e("directive_end_token__id__")]:[[/>/,t.id==="bracket"?{token:"operators"}:{token:"@brackets.directive",next:"@popall"}],[o(/(\/)(@close__id__)/),[{token:"delimiter.directive"},{token:"@brackets.directive",next:"@popall"}]]],[e("greater_operators_token__id__")]:[[/>/,{token:"operators"}],[/>=/,{token:"operators"}]],[e("no_space_expression_end_token__id__")]:[[/(?:@blank)+/,{token:"",switchTo:e("@fmExpression__id__.directive")}]],[e("unified_call_token__id__")]:[[/(@id)((?:@blank)+)/,[{token:"tag"},{token:"",next:e("@fmExpression__id__.directive")}]],[o(/(@id)(\/?)(@close__id__)/),[{token:"tag"},{token:"delimiter.directive"},{token:"@brackets.directive",next:"@popall"}]],[/./,{token:"@rematch",next:e("@noSpaceExpression__id__")}]],[e("no_parse_token__id__")]:[[o(/(@open__id__)(\/#?)([a-zA-Z]+)((?:@blank)*)(@close__id__)/),{cases:{"$S2==$3":[{token:"@brackets.directive"},{token:"delimiter.directive"},{token:"tag"},{token:""},{token:"@brackets.directive",next:"@popall"}],"$S2==comment":[{token:"comment"},{token:"comment"},{token:"comment"},{token:"comment"},{token:"comment"}],"@default":[{token:"source"},{token:"source"},{token:"source"},{token:"source"},{token:"source"}]}}],[/[^<\[\-]+|[<\[\-]/,{cases:{"$S2==comment":{token:"comment"},"@default":{token:"source"}}}]],[e("expression_comment_token__id__")]:[[/--[>\]]/,{token:"comment",next:"@pop"}],[/[^\->\]]+|[>\]\-]/,{token:"comment"}]],[e("terse_comment_token__id__")]:[[o(/--(?:@close__id__)/),{token:"comment",next:"@popall"}],[/[^<\[\-]+|[<\[\-]/,{token:"comment"}]]}}}function m(t){const n=i(r,t),_=i(a,t),e=i(F,t);return{...n,..._,...e,unicode:!0,includeLF:!1,start:`default_auto_${t.id}`,ignoreCase:!1,defaultToken:"invalid",tokenPostfix:".freemarker2",brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],tokenizer:{...n.tokenizer,..._.tokenizer,...e.tokenizer}}}const G={conf:l(r),language:i(r,k)},J={conf:l(a),language:i(a,k)},Q={conf:l(r),language:i(r,p)},U={conf:l(a),language:i(a,p)},V={conf:g(),language:m(k)},W={conf:g(),language:m(p)};export{Q as TagAngleInterpolationBracket,G as TagAngleInterpolationDollar,W as TagAutoInterpolationBracket,V as TagAutoInterpolationDollar,U as TagBracketInterpolationBracket,J as TagBracketInterpolationDollar}; +import{l as c}from"./editor-registry-jvsNWt75.js";import"./index-BnLj1hck.js";import"./resources-D97MNqv3.js";import"./parser-editor-CPhjadeF.js";import"./useQueries-DZrQsbjS.js";import"./accessible-dialog-C2wu1H5q.js";import"./input-BV8V9kav.js";import"./empty-state-DxZE48rx.js";import"./error-state-D4qtZYFq.js";import"./use-debounce-DMHuVYwD.js";import"./use-resources-xPGGDyiq.js";import"./cascade-save-BHTTkwOb.js";import"./workflows-DTtF3KEG.js";import"./type-ChzGm4vJ.js";import"./git-compare-arrows-HXbtfCTs.js";import"./undo-2-Dh2nRAeV.js";import"./save-s-dFqxLL.js";import"./eye-xZR8Jj8Y.js";import"./secret-key-picker-BCXXdOJ-.js";import"./use-secrets--RofX_r2.js";import"./eye-off-PKiH0Asw.js";import"./tool-approvals-editor-S2UA66Hb.js";import"./timer-CShnmlWE.js";import"./arrow-right-left-J0fZSu2z.js";import"./file-output-DlS0SPnt.js";import"./shield-Dy-B1VeF.js";import"./info-cNcTVsFc.js";import"./types-tS6i07ms.js";import"./scale-BnMnNt4Y.js";import"./gauge-ML2DGGDJ.js";import"./dollar-sign-HonLwnZc.js";import"./handshake-foe5KMFV.js";import"./cpu-zEsE2ia0.js";import"./server-BMZQ8ps7.js";import"./upload-D1UCHnd4.js";import"./lock-CL2SzOGd.js";import"./tag-Cd1R14bi.js";const s=["assign","flush","ftl","return","global","import","include","break","continue","local","nested","nt","setting","stop","t","lt","rt","fallback"],d=["attempt","autoesc","autoEsc","compress","comment","escape","noescape","function","if","list","items","sep","macro","noparse","noParse","noautoesc","noAutoEsc","outputformat","switch","visit","recurse"],r={close:">",id:"angle",open:"<"},a={close:"\\]",id:"bracket",open:"\\["},F={close:"[>\\]]",id:"auto",open:"[<\\[]"},k={close:"\\}",id:"dollar",open1:"\\$",open2:"\\{"},p={close:"\\]",id:"bracket",open1:"\\[",open2:"="};function l(t){return{brackets:[["<",">"],["[","]"],["(",")"],["{","}"]],comments:{blockComment:[`${t.open}--`,`--${t.close}`]},autoCloseBefore:` +\r }]),.:;=`,autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"',notIn:["string"]},{open:"'",close:"'",notIn:["string"]}],surroundingPairs:[{open:'"',close:'"'},{open:"'",close:"'"},{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"}],folding:{markers:{start:new RegExp(`${t.open}#(?:${d.join("|")})([^/${t.close}]*(?!/)${t.close})[^${t.open}]*$`),end:new RegExp(`${t.open}/#(?:${d.join("|")})[\\r\\n\\t ]*>`)}},onEnterRules:[{beforeText:new RegExp(`${t.open}#(?!(?:${s.join("|")}))([a-zA-Z_]+)([^/${t.close}]*(?!/)${t.close})[^${t.open}]*$`),afterText:new RegExp(`^${t.open}/#([a-zA-Z_]+)[\\r\\n\\t ]*${t.close}$`),action:{indentAction:c.IndentAction.IndentOutdent}},{beforeText:new RegExp(`${t.open}#(?!(?:${s.join("|")}))([a-zA-Z_]+)([^/${t.close}]*(?!/)${t.close})[^${t.open}]*$`),action:{indentAction:c.IndentAction.Indent}}]}}function m(){return{brackets:[["<",">"],["[","]"],["(",")"],["{","}"]],autoCloseBefore:` +\r }]),.:;=`,autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"',notIn:["string"]},{open:"'",close:"'",notIn:["string"]}],surroundingPairs:[{open:'"',close:'"'},{open:"'",close:"'"},{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"}],folding:{markers:{start:new RegExp(`[<\\[]#(?:${d.join("|")})([^/>\\]]*(?!/)[>\\]])[^<\\[]*$`),end:new RegExp(`[<\\[]/#(?:${d.join("|")})[\\r\\n\\t ]*>`)}},onEnterRules:[{beforeText:new RegExp(`[<\\[]#(?!(?:${s.join("|")}))([a-zA-Z_]+)([^/>\\]]*(?!/)[>\\]])[^[<\\[]]*$`),afterText:new RegExp("^[<\\[]/#([a-zA-Z_]+)[\\r\\n\\t ]*[>\\]]$"),action:{indentAction:c.IndentAction.IndentOutdent}},{beforeText:new RegExp(`[<\\[]#(?!(?:${s.join("|")}))([a-zA-Z_]+)([^/>\\]]*(?!/)[>\\]])[^[<\\[]]*$`),action:{indentAction:c.IndentAction.Indent}}]}}function i(t,n){const _=`_${t.id}_${n.id}`,e=u=>u.replace(/__id__/g,_),o=u=>{const A=u.source.replace(/__id__/g,_);return new RegExp(A,u.flags)};return{unicode:!0,includeLF:!1,start:e("default__id__"),ignoreCase:!1,defaultToken:"invalid",tokenPostfix:".freemarker2",brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],[e("open__id__")]:new RegExp(t.open),[e("close__id__")]:new RegExp(t.close),[e("iOpen1__id__")]:new RegExp(n.open1),[e("iOpen2__id__")]:new RegExp(n.open2),[e("iClose__id__")]:new RegExp(n.close),[e("startTag__id__")]:o(/(@open__id__)(#)/),[e("endTag__id__")]:o(/(@open__id__)(\/#)/),[e("startOrEndTag__id__")]:o(/(@open__id__)(\/?#)/),[e("closeTag1__id__")]:o(/((?:@blank)*)(@close__id__)/),[e("closeTag2__id__")]:o(/((?:@blank)*\/?)(@close__id__)/),blank:/[ \t\n\r]/,keywords:["false","true","in","as","using"],directiveStartCloseTag1:/attempt|recover|sep|auto[eE]sc|no(?:autoe|AutoE)sc|compress|default|no[eE]scape|comment|no[pP]arse/,directiveStartCloseTag2:/else|break|continue|return|stop|flush|t|lt|rt|nt|nested|recurse|fallback|ftl/,directiveStartBlank:/if|else[iI]f|list|for[eE]ach|switch|case|assign|global|local|include|import|function|macro|transform|visit|stop|return|call|setting|output[fF]ormat|nested|recurse|escape|ftl|items/,directiveEndCloseTag1:/if|list|items|sep|recover|attempt|for[eE]ach|local|global|assign|function|macro|output[fF]ormat|auto[eE]sc|no(?:autoe|AutoE)sc|compress|transform|switch|escape|no[eE]scape/,escapedChar:/\\(?:[ntrfbgla\\'"\{=]|(?:x[0-9A-Fa-f]{1,4}))/,asciiDigit:/[0-9]/,integer:/[0-9]+/,nonEscapedIdStartChar:/[\$@-Z_a-z\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u1FFF\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183-\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3006\u3031-\u3035\u303B-\u303C\u3040-\u318F\u31A0-\u31BA\u31F0-\u31FF\u3300-\u337F\u3400-\u4DB5\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5-\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40-\uFB41\uFB43-\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/,escapedIdChar:/\\[\-\.:#]/,idStartChar:/(?:@nonEscapedIdStartChar)|(?:@escapedIdChar)/,id:/(?:@idStartChar)(?:(?:@idStartChar)|(?:@asciiDigit))*/,specialHashKeys:/\*\*|\*|false|true|in|as|using/,namedSymbols:/<=|>=|\\lte|\\lt|<|\\gte|\\gt|>|&&|\\and|->|->|==|!=|\+=|-=|\*=|\/=|%=|\+\+|--|<=|&&|\|\||:|\.\.\.|\.\.\*|\.\.<|\.\.!|\?\?|=|<|\+|-|\*|\/|%|\||\.\.|\?|!|&|\.|,|;/,arrows:["->","->"],delimiters:[";",":",",","."],stringOperators:["lte","lt","gte","gt"],noParseTags:["noparse","noParse","comment"],tokenizer:{[e("default__id__")]:[{include:e("@directive_token__id__")},{include:e("@interpolation_and_text_token__id__")}],[e("fmExpression__id__.directive")]:[{include:e("@blank_and_expression_comment_token__id__")},{include:e("@directive_end_token__id__")},{include:e("@expression_token__id__")}],[e("fmExpression__id__.interpolation")]:[{include:e("@blank_and_expression_comment_token__id__")},{include:e("@expression_token__id__")},{include:e("@greater_operators_token__id__")}],[e("inParen__id__.plain")]:[{include:e("@blank_and_expression_comment_token__id__")},{include:e("@directive_end_token__id__")},{include:e("@expression_token__id__")}],[e("inParen__id__.gt")]:[{include:e("@blank_and_expression_comment_token__id__")},{include:e("@expression_token__id__")},{include:e("@greater_operators_token__id__")}],[e("noSpaceExpression__id__")]:[{include:e("@no_space_expression_end_token__id__")},{include:e("@directive_end_token__id__")},{include:e("@expression_token__id__")}],[e("unifiedCall__id__")]:[{include:e("@unified_call_token__id__")}],[e("singleString__id__")]:[{include:e("@string_single_token__id__")}],[e("doubleString__id__")]:[{include:e("@string_double_token__id__")}],[e("rawSingleString__id__")]:[{include:e("@string_single_raw_token__id__")}],[e("rawDoubleString__id__")]:[{include:e("@string_double_raw_token__id__")}],[e("expressionComment__id__")]:[{include:e("@expression_comment_token__id__")}],[e("noParse__id__")]:[{include:e("@no_parse_token__id__")}],[e("terseComment__id__")]:[{include:e("@terse_comment_token__id__")}],[e("directive_token__id__")]:[[o(/(?:@startTag__id__)(@directiveStartCloseTag1)(?:@closeTag1__id__)/),t.id==="auto"?{cases:{"$1==<":{token:"@rematch",switchTo:`@default_angle_${n.id}`},"$1==[":{token:"@rematch",switchTo:`@default_bracket_${n.id}`}}}:[{token:"@brackets.directive"},{token:"delimiter.directive"},{cases:{"@noParseTags":{token:"tag",next:e("@noParse__id__.$3")},"@default":{token:"tag"}}},{token:"delimiter.directive"},{token:"@brackets.directive"}]],[o(/(?:@startTag__id__)(@directiveStartCloseTag2)(?:@closeTag2__id__)/),t.id==="auto"?{cases:{"$1==<":{token:"@rematch",switchTo:`@default_angle_${n.id}`},"$1==[":{token:"@rematch",switchTo:`@default_bracket_${n.id}`}}}:[{token:"@brackets.directive"},{token:"delimiter.directive"},{token:"tag"},{token:"delimiter.directive"},{token:"@brackets.directive"}]],[o(/(?:@startTag__id__)(@directiveStartBlank)(@blank)/),t.id==="auto"?{cases:{"$1==<":{token:"@rematch",switchTo:`@default_angle_${n.id}`},"$1==[":{token:"@rematch",switchTo:`@default_bracket_${n.id}`}}}:[{token:"@brackets.directive"},{token:"delimiter.directive"},{token:"tag"},{token:"",next:e("@fmExpression__id__.directive")}]],[o(/(?:@endTag__id__)(@directiveEndCloseTag1)(?:@closeTag1__id__)/),t.id==="auto"?{cases:{"$1==<":{token:"@rematch",switchTo:`@default_angle_${n.id}`},"$1==[":{token:"@rematch",switchTo:`@default_bracket_${n.id}`}}}:[{token:"@brackets.directive"},{token:"delimiter.directive"},{token:"tag"},{token:"delimiter.directive"},{token:"@brackets.directive"}]],[o(/(@open__id__)(@)/),t.id==="auto"?{cases:{"$1==<":{token:"@rematch",switchTo:`@default_angle_${n.id}`},"$1==[":{token:"@rematch",switchTo:`@default_bracket_${n.id}`}}}:[{token:"@brackets.directive"},{token:"delimiter.directive",next:e("@unifiedCall__id__")}]],[o(/(@open__id__)(\/@)((?:(?:@id)(?:\.(?:@id))*)?)(?:@closeTag1__id__)/),[{token:"@brackets.directive"},{token:"delimiter.directive"},{token:"tag"},{token:"delimiter.directive"},{token:"@brackets.directive"}]],[o(/(@open__id__)#--/),t.id==="auto"?{cases:{"$1==<":{token:"@rematch",switchTo:`@default_angle_${n.id}`},"$1==[":{token:"@rematch",switchTo:`@default_bracket_${n.id}`}}}:{token:"comment",next:e("@terseComment__id__")}],[o(/(?:@startOrEndTag__id__)([a-zA-Z_]+)/),t.id==="auto"?{cases:{"$1==<":{token:"@rematch",switchTo:`@default_angle_${n.id}`},"$1==[":{token:"@rematch",switchTo:`@default_bracket_${n.id}`}}}:[{token:"@brackets.directive"},{token:"delimiter.directive"},{token:"tag.invalid",next:e("@fmExpression__id__.directive")}]]],[e("interpolation_and_text_token__id__")]:[[o(/(@iOpen1__id__)(@iOpen2__id__)/),[{token:n.id==="bracket"?"@brackets.interpolation":"delimiter.interpolation"},{token:n.id==="bracket"?"delimiter.interpolation":"@brackets.interpolation",next:e("@fmExpression__id__.interpolation")}]],[/[\$#<\[\{]|(?:@blank)+|[^\$<#\[\{\n\r\t ]+/,{token:"source"}]],[e("string_single_token__id__")]:[[/[^'\\]/,{token:"string"}],[/@escapedChar/,{token:"string.escape"}],[/'/,{token:"string",next:"@pop"}]],[e("string_double_token__id__")]:[[/[^"\\]/,{token:"string"}],[/@escapedChar/,{token:"string.escape"}],[/"/,{token:"string",next:"@pop"}]],[e("string_single_raw_token__id__")]:[[/[^']+/,{token:"string.raw"}],[/'/,{token:"string.raw",next:"@pop"}]],[e("string_double_raw_token__id__")]:[[/[^"]+/,{token:"string.raw"}],[/"/,{token:"string.raw",next:"@pop"}]],[e("expression_token__id__")]:[[/(r?)(['"])/,{cases:{"r'":[{token:"keyword"},{token:"string.raw",next:e("@rawSingleString__id__")}],'r"':[{token:"keyword"},{token:"string.raw",next:e("@rawDoubleString__id__")}],"'":[{token:"source"},{token:"string",next:e("@singleString__id__")}],'"':[{token:"source"},{token:"string",next:e("@doubleString__id__")}]}}],[/(?:@integer)(?:\.(?:@integer))?/,{cases:{"(?:@integer)":{token:"number"},"@default":{token:"number.float"}}}],[/(\.)(@blank*)(@specialHashKeys)/,[{token:"delimiter"},{token:""},{token:"identifier"}]],[/(?:@namedSymbols)/,{cases:{"@arrows":{token:"meta.arrow"},"@delimiters":{token:"delimiter"},"@default":{token:"operators"}}}],[/@id/,{cases:{"@keywords":{token:"keyword.$0"},"@stringOperators":{token:"operators"},"@default":{token:"identifier"}}}],[/[\[\]\(\)\{\}]/,{cases:{"\\[":{cases:{"$S2==gt":{token:"@brackets",next:e("@inParen__id__.gt")},"@default":{token:"@brackets",next:e("@inParen__id__.plain")}}},"\\]":{cases:{...n.id==="bracket"?{"$S2==interpolation":{token:"@brackets.interpolation",next:"@popall"}}:{},...t.id==="bracket"?{"$S2==directive":{token:"@brackets.directive",next:"@popall"}}:{},[e("$S1==inParen__id__")]:{token:"@brackets",next:"@pop"},"@default":{token:"@brackets"}}},"\\(":{token:"@brackets",next:e("@inParen__id__.gt")},"\\)":{cases:{[e("$S1==inParen__id__")]:{token:"@brackets",next:"@pop"},"@default":{token:"@brackets"}}},"\\{":{cases:{"$S2==gt":{token:"@brackets",next:e("@inParen__id__.gt")},"@default":{token:"@brackets",next:e("@inParen__id__.plain")}}},"\\}":{cases:{...n.id==="bracket"?{}:{"$S2==interpolation":{token:"@brackets.interpolation",next:"@popall"}},[e("$S1==inParen__id__")]:{token:"@brackets",next:"@pop"},"@default":{token:"@brackets"}}}}}],[/\$\{/,{token:"delimiter.invalid"}]],[e("blank_and_expression_comment_token__id__")]:[[/(?:@blank)+/,{token:""}],[/[<\[][#!]--/,{token:"comment",next:e("@expressionComment__id__")}]],[e("directive_end_token__id__")]:[[/>/,t.id==="bracket"?{token:"operators"}:{token:"@brackets.directive",next:"@popall"}],[o(/(\/)(@close__id__)/),[{token:"delimiter.directive"},{token:"@brackets.directive",next:"@popall"}]]],[e("greater_operators_token__id__")]:[[/>/,{token:"operators"}],[/>=/,{token:"operators"}]],[e("no_space_expression_end_token__id__")]:[[/(?:@blank)+/,{token:"",switchTo:e("@fmExpression__id__.directive")}]],[e("unified_call_token__id__")]:[[/(@id)((?:@blank)+)/,[{token:"tag"},{token:"",next:e("@fmExpression__id__.directive")}]],[o(/(@id)(\/?)(@close__id__)/),[{token:"tag"},{token:"delimiter.directive"},{token:"@brackets.directive",next:"@popall"}]],[/./,{token:"@rematch",next:e("@noSpaceExpression__id__")}]],[e("no_parse_token__id__")]:[[o(/(@open__id__)(\/#?)([a-zA-Z]+)((?:@blank)*)(@close__id__)/),{cases:{"$S2==$3":[{token:"@brackets.directive"},{token:"delimiter.directive"},{token:"tag"},{token:""},{token:"@brackets.directive",next:"@popall"}],"$S2==comment":[{token:"comment"},{token:"comment"},{token:"comment"},{token:"comment"},{token:"comment"}],"@default":[{token:"source"},{token:"source"},{token:"source"},{token:"source"},{token:"source"}]}}],[/[^<\[\-]+|[<\[\-]/,{cases:{"$S2==comment":{token:"comment"},"@default":{token:"source"}}}]],[e("expression_comment_token__id__")]:[[/--[>\]]/,{token:"comment",next:"@pop"}],[/[^\->\]]+|[>\]\-]/,{token:"comment"}]],[e("terse_comment_token__id__")]:[[o(/--(?:@close__id__)/),{token:"comment",next:"@popall"}],[/[^<\[\-]+|[<\[\-]/,{token:"comment"}]]}}}function g(t){const n=i(r,t),_=i(a,t),e=i(F,t);return{...n,..._,...e,unicode:!0,includeLF:!1,start:`default_auto_${t.id}`,ignoreCase:!1,defaultToken:"invalid",tokenPostfix:".freemarker2",brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],tokenizer:{...n.tokenizer,..._.tokenizer,...e.tokenizer}}}const ne={conf:l(r),language:i(r,k)},oe={conf:l(a),language:i(a,k)},ie={conf:l(r),language:i(r,p)},_e={conf:l(a),language:i(a,p)},re={conf:m(),language:g(k)},ae={conf:m(),language:g(p)};export{ie as TagAngleInterpolationBracket,ne as TagAngleInterpolationDollar,ae as TagAutoInterpolationBracket,re as TagAutoInterpolationDollar,_e as TagBracketInterpolationBracket,oe as TagBracketInterpolationDollar}; diff --git a/src/main/resources/META-INF/resources/assets/funnel-NUFt5LnV.js b/src/main/resources/META-INF/resources/assets/funnel-CaMgE7LA.js similarity index 89% rename from src/main/resources/META-INF/resources/assets/funnel-NUFt5LnV.js rename to src/main/resources/META-INF/resources/assets/funnel-CaMgE7LA.js index e1d730b3ee..1e22af69ad 100644 --- a/src/main/resources/META-INF/resources/assets/funnel-NUFt5LnV.js +++ b/src/main/resources/META-INF/resources/assets/funnel-CaMgE7LA.js @@ -1,4 +1,4 @@ -import{x as e}from"./index-BY6d8wze.js";/** +import{x as e}from"./index-BnLj1hck.js";/** * @license lucide-react v0.577.0 - ISC * * This source code is licensed under the ISC license. diff --git a/src/main/resources/META-INF/resources/assets/gauge-D0qrGV1d.js b/src/main/resources/META-INF/resources/assets/gauge-ML2DGGDJ.js similarity index 87% rename from src/main/resources/META-INF/resources/assets/gauge-D0qrGV1d.js rename to src/main/resources/META-INF/resources/assets/gauge-ML2DGGDJ.js index fd2e8f2890..b37c568ef9 100644 --- a/src/main/resources/META-INF/resources/assets/gauge-D0qrGV1d.js +++ b/src/main/resources/META-INF/resources/assets/gauge-ML2DGGDJ.js @@ -1,4 +1,4 @@ -import{x as a}from"./index-BY6d8wze.js";/** +import{x as a}from"./index-BnLj1hck.js";/** * @license lucide-react v0.577.0 - ISC * * This source code is licensed under the ISC license. diff --git a/src/main/resources/META-INF/resources/assets/gdpr-CuwrWsrF.js b/src/main/resources/META-INF/resources/assets/gdpr-BJ3KV_BD.js similarity index 98% rename from src/main/resources/META-INF/resources/assets/gdpr-CuwrWsrF.js rename to src/main/resources/META-INF/resources/assets/gdpr-BJ3KV_BD.js index 8fe2557bd1..733514c609 100644 --- a/src/main/resources/META-INF/resources/assets/gdpr-CuwrWsrF.js +++ b/src/main/resources/META-INF/resources/assets/gdpr-BJ3KV_BD.js @@ -1,4 +1,4 @@ -import{x as I,aZ as u,a_ as f,u as T,c as $,aq as z,r as a,_ as n,j as t,bA as F,T as C,k as N,Z as M,n as R,C as q,ae as B}from"./index-BY6d8wze.js";import{D as O}from"./download-DZjrnAjT.js";import{B as v}from"./ban-DpuGOmt1.js";/** +import{x as I,aZ as u,a_ as f,u as T,c as $,aq as z,r as a,_ as n,j as t,bA as F,T as C,k as N,Z as M,n as R,C as q,ae as B}from"./index-BnLj1hck.js";import{D as O}from"./download-CVl_y-4e.js";import{B as v}from"./ban-C8dQHjQY.js";/** * @license lucide-react v0.577.0 - ISC * * This source code is licensed under the ISC license. diff --git a/src/main/resources/META-INF/resources/assets/git-compare-arrows-pI8Ehpf-.js b/src/main/resources/META-INF/resources/assets/git-compare-arrows-HXbtfCTs.js similarity index 91% rename from src/main/resources/META-INF/resources/assets/git-compare-arrows-pI8Ehpf-.js rename to src/main/resources/META-INF/resources/assets/git-compare-arrows-HXbtfCTs.js index 43ce4ccab4..342ad32f40 100644 --- a/src/main/resources/META-INF/resources/assets/git-compare-arrows-pI8Ehpf-.js +++ b/src/main/resources/META-INF/resources/assets/git-compare-arrows-HXbtfCTs.js @@ -1,4 +1,4 @@ -import{x as e}from"./index-BY6d8wze.js";/** +import{x as e}from"./index-BnLj1hck.js";/** * @license lucide-react v0.577.0 - ISC * * This source code is licensed under the ISC license. diff --git a/src/main/resources/META-INF/resources/assets/group-config-yXQVQMNQ.js b/src/main/resources/META-INF/resources/assets/group-config-DZrgz0vz.js similarity index 92% rename from src/main/resources/META-INF/resources/assets/group-config-yXQVQMNQ.js rename to src/main/resources/META-INF/resources/assets/group-config-DZrgz0vz.js index f1b97e2424..85a9b9ecc0 100644 --- a/src/main/resources/META-INF/resources/assets/group-config-yXQVQMNQ.js +++ b/src/main/resources/META-INF/resources/assets/group-config-DZrgz0vz.js @@ -1 +1 @@ -import{dp as m,dq as E,dr as T,ds as l,dt as A}from"./index-BY6d8wze.js";function D(e){const s=e.moderatorAgentId;return s&&s.trim()?[]:(e.phases&&e.phases.length>0?e.phases:T(e.style??"ROUND_TABLE",e.maxRounds??2)).filter(a=>{var n;return a&&((n=a.participants)==null?void 0:n.toUpperCase())==="MODERATOR"}).map(a=>a.name)}function _(e){var n;const s=e.phases&&e.phases.length>0?e.phases:T(e.style??"ROUND_TABLE",e.maxRounds??2),t=new Set((e.members??[]).map(r=>{var o;return(o=r.role)==null?void 0:o.trim().toUpperCase()}).filter(r=>!!r)),a=new Map;for(const r of s){const o=((n=r==null?void 0:r.participants)==null?void 0:n.trim())??"";if(!o.toUpperCase().startsWith("ROLE:"))continue;const p=o.slice(5).trim();if(!p||t.has(p.toUpperCase()))continue;const i=a.get(p.toUpperCase())??{role:p,phaseNames:[]};i.phaseNames.push(r.name),a.set(p.toUpperCase(),i)}return[...a.values()]}function R(e){return e==null||Number.isFinite(e)&&e>0}function c(e){return(e.repeats??1)>1}const u=2,h=.8;function C(e){const s=e.threshold;return{enabled:!!e.enabled,minRepeats:Math.max(e.minRepeats??u,u),threshold:typeof s=="number"&&s>0&&s<=1?s:h,judge:e.judge==="SERVICE"?"SERVICE":"MODERATOR"}}const N={allowAgentTaskCreation:!1,maxAgentAddedTasksPerDiscussion:E,maxPerTurn:m};function O(e){const s=e.maxAgentAddedTasksPerDiscussion,t=e.maxPerTurn;return{allowAgentTaskCreation:!!e.allowAgentTaskCreation,maxAgentAddedTasksPerDiscussion:typeof s=="number"&&s>0?s:E,maxPerTurn:typeof t=="number"&&t>0?t:m}}function U(e){var s,t;return e?e.type!=="NONE"?!0:!!((s=e.raw)!=null&&s.trim())||(((t=e.dissents)==null?void 0:t.length)??0)>0:!1}function f(e){return typeof e=="number"&&e>0?e:l}function S(e){return typeof e=="number"&&e>0?e:A}export{u as C,h as D,S as a,N as b,c,O as d,f as e,U as h,R as i,D as m,C as n,_ as u}; +import{dq as m,dr as E,ds as T,dt as l,du as A}from"./index-BnLj1hck.js";function D(e){const s=e.moderatorAgentId;return s&&s.trim()?[]:(e.phases&&e.phases.length>0?e.phases:T(e.style??"ROUND_TABLE",e.maxRounds??2)).filter(a=>{var n;return a&&((n=a.participants)==null?void 0:n.toUpperCase())==="MODERATOR"}).map(a=>a.name)}function _(e){var n;const s=e.phases&&e.phases.length>0?e.phases:T(e.style??"ROUND_TABLE",e.maxRounds??2),t=new Set((e.members??[]).map(r=>{var o;return(o=r.role)==null?void 0:o.trim().toUpperCase()}).filter(r=>!!r)),a=new Map;for(const r of s){const o=((n=r==null?void 0:r.participants)==null?void 0:n.trim())??"";if(!o.toUpperCase().startsWith("ROLE:"))continue;const p=o.slice(5).trim();if(!p||t.has(p.toUpperCase()))continue;const i=a.get(p.toUpperCase())??{role:p,phaseNames:[]};i.phaseNames.push(r.name),a.set(p.toUpperCase(),i)}return[...a.values()]}function R(e){return e==null||Number.isFinite(e)&&e>0}function c(e){return(e.repeats??1)>1}const u=2,h=.8;function C(e){const s=e.threshold;return{enabled:!!e.enabled,minRepeats:Math.max(e.minRepeats??u,u),threshold:typeof s=="number"&&s>0&&s<=1?s:h,judge:e.judge==="SERVICE"?"SERVICE":"MODERATOR"}}const N={allowAgentTaskCreation:!1,maxAgentAddedTasksPerDiscussion:E,maxPerTurn:m};function O(e){const s=e.maxAgentAddedTasksPerDiscussion,t=e.maxPerTurn;return{allowAgentTaskCreation:!!e.allowAgentTaskCreation,maxAgentAddedTasksPerDiscussion:typeof s=="number"&&s>0?s:E,maxPerTurn:typeof t=="number"&&t>0?t:m}}function U(e){var s,t;return e?e.type!=="NONE"?!0:!!((s=e.raw)!=null&&s.trim())||(((t=e.dissents)==null?void 0:t.length)??0)>0:!1}function f(e){return typeof e=="number"&&e>0?e:l}function S(e){return typeof e=="number"&&e>0?e:A}export{u as C,h as D,S as a,N as b,c,O as d,f as e,U as h,R as i,D as m,C as n,_ as u}; diff --git a/src/main/resources/META-INF/resources/assets/group-config-panel-CHXO2yAZ.js b/src/main/resources/META-INF/resources/assets/group-config-panel-VmoYbcrS.js similarity index 98% rename from src/main/resources/META-INF/resources/assets/group-config-panel-CHXO2yAZ.js rename to src/main/resources/META-INF/resources/assets/group-config-panel-VmoYbcrS.js index 4bb09031f8..f38b898da3 100644 --- a/src/main/resources/META-INF/resources/assets/group-config-panel-CHXO2yAZ.js +++ b/src/main/resources/META-INF/resources/assets/group-config-panel-VmoYbcrS.js @@ -1,4 +1,4 @@ -import{x as et,c as U,r as p,dS as ct,j as e,V as Ie,T as re,dT as ce,dU as ut,i as J,d3 as tt,k as P,a9 as oe,D as mt,ae as pt,dV as me,b as xt,e as ht,dW as _e,dX as $e,dY as Fe,dZ as He,d_ as ze,aE as We,d$ as Ue,e0 as Be,e1 as le,a1 as ne,_,dr as st,e2 as gt,aj as Ge,ak as Ve,e3 as bt,e4 as ue,$ as vt,df as ft,dm as jt,e5 as Nt,b_ as qe,dy as yt,dz as wt,aA as Ct,bK as At,aT as ie,e6 as Et,al as Tt,c3 as St,e7 as kt,e8 as Mt,B as Pt,e9 as Rt,Z as de,q as Ke}from"./index-BY6d8wze.js";import{U as at}from"./user-check-DqvaRbNC.js";import{L as Ot}from"./lock-CPVVTGkJ.js";import{B as X}from"./badge-B8rrdXaB.js";import{c as Lt,D as Dt,C as ae,n as Xe,m as It,u as _t,e as $t,a as Ft}from"./group-config-yXQVQMNQ.js";import{S as pe}from"./save-lzTRlOlB.js";import{I as Ht}from"./info-vszmN4vn.js";import{C as zt}from"./clipboard-list-C1xV5BuY.js";import{L as Wt}from"./link-2-VQoGUb0U.js";import{G as Ut}from"./decision-record-card-AIhLlctQ.js";/** +import{x as et,c as U,r as p,dT as ct,j as e,V as Ie,T as re,dU as ce,dV as ut,i as J,d4 as tt,k as P,a9 as oe,D as mt,ae as pt,dW as me,b as xt,e as ht,dX as _e,dY as $e,dZ as Fe,d_ as He,d$ as ze,aE as We,e0 as Ue,e1 as Be,e2 as le,a1 as ne,_,ds as st,e3 as gt,aj as Ge,ak as Ve,e4 as bt,e5 as ue,$ as vt,dg as ft,dn as jt,e6 as Nt,b$ as qe,dz as yt,dA as wt,aA as Ct,bL as At,aT as ie,e7 as Et,al as Tt,c4 as St,e8 as kt,e9 as Mt,B as Pt,ea as Rt,Z as de,q as Ke}from"./index-BnLj1hck.js";import{U as at}from"./user-check-BzuCEBUg.js";import{L as Ot}from"./lock-CL2SzOGd.js";import{B as X}from"./badge-C2HqoOk5.js";import{c as Lt,D as Dt,C as ae,n as Xe,m as It,u as _t,e as $t,a as Ft}from"./group-config-DZrgz0vz.js";import{S as pe}from"./save-s-dFqxLL.js";import{I as Ht}from"./info-cNcTVsFc.js";import{C as zt}from"./clipboard-list-BKNHK2TK.js";import{L as Wt}from"./link-2-DVp_MD50.js";import{G as Ut}from"./decision-record-card-BagyXv1G.js";/** * @license lucide-react v0.577.0 - ISC * * This source code is licensed under the ISC license. diff --git a/src/main/resources/META-INF/resources/assets/group-detail-DVclPuHF.js b/src/main/resources/META-INF/resources/assets/group-detail-AeGPoYjw.js similarity index 86% rename from src/main/resources/META-INF/resources/assets/group-detail-DVclPuHF.js rename to src/main/resources/META-INF/resources/assets/group-detail-AeGPoYjw.js index 52dd8c7f1b..dbe0b858bd 100644 --- a/src/main/resources/META-INF/resources/assets/group-detail-DVclPuHF.js +++ b/src/main/resources/META-INF/resources/assets/group-detail-AeGPoYjw.js @@ -1,4 +1,4 @@ -import{x as At,c as Ve,r as h,j as s,a7 as qt,a8 as Nn,bi as En,b_ as Vt,i as C,du as An,dv as Wt,dw as yn,dx as fs,C as Nt,dy as _n,dz as Sn,dA as wn,dB as Kt,E as In,dd as Vs,de as Ws,dC as Cn,bj as $s,dl as Rn,S as ze,bK as Ys,a4 as Dn,q as On,Y as jn,bd as kn,dD as gs,_ as Z,dE as Ln,dF as Pn,d5 as vn,cX as Mn,cZ as Fn,b6 as hs,a9 as qs,k as je,D as Pt,d3 as xs,dG as vt,ap as Un,$ as Hn,aX as Bn,aq as Gn,dH as zn,dI as Vn,dJ as Wn,dK as $n,dL as Yn,dM as qn,dN as Kn,R as Ks,a_ as bs,df as Xn,Z as Qn,dO as Zn,o as Jn,bv as er,bq as tr,V as Xs,P as Qs,dP as sr,T as nr,aA as rr,ae as or,ao as ar,dQ as ir,dR as lr}from"./index-BY6d8wze.js";import{B as Oe}from"./badge-B8rrdXaB.js";import{G as cr,H as ur,D as dr,a as pr}from"./group-config-panel-CHXO2yAZ.js";import{T as Ts,P as mr,D as Ns,a as fr}from"./decision-record-card-AIhLlctQ.js";import{C as gr}from"./clipboard-list-C1xV5BuY.js";import{F as hr}from"./fingerprint-pattern-Dbd3CWkE.js";import{h as xr}from"./group-config-yXQVQMNQ.js";import{C as br}from"./code--AVnUtw-.js";import{A as Tr}from"./accessible-dialog-BO2vat1a.js";import{R as Es}from"./rotate-cw-3PH_gHp-.js";import{B as As}from"./back-link-D2LpIJ51.js";import{E as Nr}from"./error-state-BXe3bnJT.js";import{P as Er}from"./panel-right-open-96xUAT4B.js";import{P as Ar}from"./panel-right-close-BCp5JpCq.js";import{H as yr}from"./history-BHMI8MMQ.js";import"./user-check-DqvaRbNC.js";import"./lock-CPVVTGkJ.js";import"./save-lzTRlOlB.js";import"./info-vszmN4vn.js";import"./link-2-VQoGUb0U.js";import"./handshake-d__LQWU9.js";import"./shield-Ce05kery.js";import"./user-plus-CWm5kmVr.js";import"./scale-DJXpJ1ID.js";/** +import{x as At,c as Ve,r as h,j as s,a7 as qt,a8 as Nn,bi as En,b$ as Vt,i as C,dv as An,dw as Wt,dx as yn,dy as fs,C as Nt,dz as _n,dA as Sn,dB as wn,dC as Kt,E as In,de as Vs,df as Ws,dD as Cn,bj as $s,dm as Rn,S as ze,bL as Ys,a4 as Dn,q as On,Y as jn,bd as kn,dE as gs,_ as Z,dF as Ln,dG as Pn,d6 as vn,cY as Mn,c_ as Fn,b6 as hs,a9 as qs,k as je,D as Pt,d4 as xs,dH as vt,ap as Un,$ as Hn,aX as Bn,aq as Gn,dI as zn,dJ as Vn,dK as Wn,dL as $n,dM as Yn,dN as qn,dO as Kn,R as Ks,a_ as bs,dg as Xn,Z as Qn,dP as Zn,o as Jn,bv as er,bq as tr,V as Xs,P as Qs,dQ as sr,T as nr,aA as rr,ae as or,ao as ar,dR as ir,dS as lr}from"./index-BnLj1hck.js";import{B as Oe}from"./badge-C2HqoOk5.js";import{G as cr,H as ur,D as dr,a as mr}from"./group-config-panel-VmoYbcrS.js";import{T as Ts,P as pr,D as Ns,a as fr}from"./decision-record-card-BagyXv1G.js";import{C as gr}from"./clipboard-list-BKNHK2TK.js";import{F as hr}from"./fingerprint-pattern-Clkha78G.js";import{h as xr}from"./group-config-DZrgz0vz.js";import{C as br}from"./code-DBVyO5Cx.js";import{A as Tr}from"./accessible-dialog-C2wu1H5q.js";import{R as Es}from"./rotate-cw-tG6Eo4U0.js";import{B as As}from"./back-link-tBVRORpr.js";import{E as Nr}from"./error-state-D4qtZYFq.js";import{P as Er}from"./panel-right-open-CmRK7GbO.js";import{P as Ar}from"./panel-right-close-D7tJkwdn.js";import{H as yr}from"./history-d_YShP6D.js";import"./user-check-BzuCEBUg.js";import"./lock-CL2SzOGd.js";import"./save-s-dFqxLL.js";import"./info-cNcTVsFc.js";import"./link-2-DVp_MD50.js";import"./handshake-foe5KMFV.js";import"./shield-Dy-B1VeF.js";import"./user-plus-BhdQPvXt.js";import"./scale-BnMnNt4Y.js";/** * @license lucide-react v0.577.0 - ISC * * This source code is licensed under the ISC license. @@ -18,8 +18,8 @@ import{x as At,c as Ve,r as h,j as s,a7 as qt,a8 as Nn,bi as En,b_ as Vt,i as C, * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Rr=[["circle",{cx:"12",cy:"8",r:"5",key:"1hypcn"}],["path",{d:"M20 21a8 8 0 0 0-16 0",key:"rfgkzh"}]],Dr=At("user-round",Rr),Or={OPINION:"💬",CRITIQUE:"🔍",REVISION:"✏️",CHALLENGE:"⚔️",DEFENSE:"🛡️",ARGUE:"📢",REBUTTAL:"↩️",SYNTHESIS:"⭐",PLAN:"📋",EXECUTE:"⚡",VERIFY:"✅",VOTE:"🗳️",PROPOSAL:"🤝",BARGAIN:"🔄",RETRO:"🪞"};function jr({name:e,type:n,turnOrder:a,entryCount:l,isActive:o,defaultExpanded:p=!0,convergence:c,children:F}){const{t:y}=Ve(),[G,Y]=h.useState(p),T=Or[n]||"📋";return s.jsxs("div",{className:C("rounded-xl border",n==="SYNTHESIS"?"border-primary/30 bg-primary/5":"border-border bg-card",o&&"ring-2 ring-primary/30"),"data-testid":`phase-section-${e.replace(/\s+/g,"-").toLowerCase()}`,children:[s.jsxs("button",{onClick:()=>Y(!G),className:"flex w-full items-center gap-3 p-3 text-start transition-colors hover:bg-secondary/30 rounded-t-xl",children:[G?s.jsx(qt,{className:"h-4 w-4 shrink-0 text-muted-foreground"}):s.jsx(Nn,{className:"h-4 w-4 shrink-0 text-muted-foreground"}),s.jsx("span",{className:"text-base",children:T}),s.jsx("span",{className:"text-sm font-semibold text-foreground flex-1",children:e}),s.jsxs("div",{className:"flex items-center gap-2",children:[a==="PARALLEL"&&s.jsxs(Oe,{variant:"outline",className:"text-[10px] px-1.5 py-0",children:[s.jsx(En,{className:"me-0.5 h-2.5 w-2.5"})," Parallel"]}),s.jsxs(Oe,{variant:"secondary",className:"text-[10px] px-1.5 py-0",children:[s.jsx(Vt,{className:"me-0.5 h-2.5 w-2.5"})," ",l]})]})]}),c&&s.jsxs("div",{className:C("flex items-start gap-2 border-t px-3 py-2",c.converged?"border-violet-500/30 bg-violet-500/5":"border-border bg-secondary/20"),"data-testid":`phase-convergence-${c.phaseIndex}`,children:[s.jsx(cr,{className:"mt-0.5 h-3 w-3 shrink-0 text-violet-500","aria-hidden":"true"}),s.jsxs("div",{className:"min-w-0 text-[11px] text-muted-foreground",children:[s.jsx("span",{className:"font-medium text-foreground",children:c.converged?y("groups.convergenceReached","Converged"):y("groups.convergenceChecked","Convergence check")}),c.agreementScore!=null&&s.jsx("span",{className:"ms-1.5 tabular-nums",children:y("groups.convergenceScore","agreement {{score}}",{score:c.agreementScore.toFixed(2)})}),c.repeatsSkipped!=null&&c.repeatsSkipped>0&&s.jsx("span",{className:"ms-1.5",children:y("groups.convergenceSkipped",{defaultValue:"· {{count}} further round skipped",defaultValue_other:"· {{count}} further rounds skipped",count:c.repeatsSkipped})}),c.reason&&s.jsx("p",{className:"mt-0.5",children:c.reason})]})]}),G&&s.jsx("div",{className:"border-t border-border p-2 space-y-1",children:F})]})}/*! @license DOMPurify 3.4.13 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.13/LICENSE */function ys(e,n){(n==null||n>e.length)&&(n=e.length);for(var a=0,l=Array(n);a2?l-2:0),p=2;p1?a-1:0),o=1;o"u"?null:X(BigInt.prototype.toString),Rs=typeof Symbol>"u"?null:X(Symbol.prototype.toString),ee=X(Object.prototype.hasOwnProperty),ot=X(Object.prototype.toString),J=X(RegExp.prototype.test),Ge=$r(TypeError);function X(e){return function(n){n instanceof RegExp&&(n.lastIndex=0);for(var a=arguments.length,l=new Array(a>1?a-1:0),o=1;o2&&arguments[2]!==void 0?arguments[2]:at;if(_s&&_s(e,null),!Me(n))return e;let l=n.length;for(;l--;){let o=n[l];if(typeof o=="string"){const p=a(o);p!==o&&(Fr(n)||(n[l]=p),o=p)}e[o]=!0}return e}function Yr(e){for(let n=0;n/g),eo=re(/\${[\w\W]*/g),to=re(/^data-[\-\w.\u00B7-\uFFFF]+$/),so=re(/^aria-[\-\w]+$/),Ls=re(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),no=re(/^(?:\w+script|data):/i),ro=re(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),oo=re(/^html$/i),ao=re(/^[a-z][.\w]*(-[.\w]+)+$/i),Ps=re(/<[/\w!]/g),vs=re(/<[/\w]/g),io=re(/<\/no(script|embed|frames)/i),lo=re(/\/>/i),be={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,processingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},co=function(){return typeof window>"u"?null:window},uo=function(n,a){if(typeof n!="object"||typeof n.createPolicy!="function")return null;let l=null;const o="data-tt-policy-suffix";a&&a.hasAttribute(o)&&(l=a.getAttribute(o));const p="dompurify"+(l?"#"+l:"");try{return n.createPolicy(p,{createHTML(c){return c},createScriptURL(c){return c}})}catch{return console.warn("TrustedTypes policy "+p+" could not be created."),null}},Ms=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},ve=function(n,a,l,o){return ee(n,a)&&Me(n[a])?S(o.base?ie(o.base):{},n[a],o.transform):l};function tn(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:co();const n=u=>tn(u);if(n.version="3.4.13",n.removed=[],!e||!e.document||e.document.nodeType!==be.document||!e.Element)return n.isSupported=!1,n;let a=e.document;const l=a,o=l.currentScript;e.DocumentFragment;const p=e.HTMLTemplateElement,c=e.Node,F=e.Element,y=e.NodeFilter,G=e.NamedNodeMap;G===void 0&&(e.NamedNodeMap||e.MozNamedAttrMap),e.HTMLFormElement;const Y=e.DOMParser,T=e.trustedTypes,U=F.prototype,Te=ye(U,"cloneNode"),fe=ye(U,"remove"),Ne=ye(U,"nextSibling"),q=ye(U,"childNodes"),j=ye(U,"parentNode"),I=ye(U,"shadowRoot"),te=ye(U,"attributes"),P=c&&c.prototype?ye(c.prototype,"nodeType"):null,z=c&&c.prototype?ye(c.prototype,"nodeName"):null,v=c&&c.prototype?ye(c.prototype,"ownerDocument"):null;if(typeof p=="function"){const u=a.createElement("template");u.content&&u.content.ownerDocument&&(a=u.content.ownerDocument)}let E,H="",w,d=!1,R=0;const K=function(){if(R>0)throw Ge('A configured TRUSTED_TYPES_POLICY callback (createHTML or createScriptURL) must not call DOMPurify.sanitize, as that causes infinite recursion. Do not pass a policy whose callbacks wrap DOMPurify as TRUSTED_TYPES_POLICY; see the "DOMPurify and Trusted Types" section of the README.')},f=function(t){K(),R++;try{return E.createHTML(t)}finally{R--}},D=function(t){K(),R++;try{return E.createScriptURL(t)}finally{R--}},le=function(){return d||(w=uo(T,o),d=!0),w},ge=a,oe=ge.implementation,he=ge.createNodeIterator,ce=ge.createDocumentFragment,se=ge.getElementsByTagName,_e=l.importNode;let O=Ms();n.isSupported=typeof Js=="function"&&typeof j=="function"&&oe&&oe.createHTMLDocument!==void 0;const V=Zr,Se=Jr,it=eo,We=to,$e=so,ke=no,we=ro,Fe=ao;let Ue=Ls,L=null;const Le=S({},[...Ds,...Ft,...Ut,...Ht,...Os]);let k=null;const Ae=S({},[...js,...Bt,...ks,...Tt]);let B=Object.seal(et(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Ee=null,b=null;const A=Object.seal(et(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}}));let ae=!0,de=!0,xe=!1,Ie=!0,m=!1,_=!0,Q=!1,He=!1,lt=null,ct=null,yt=!1,Ye=!1,ut=!1,dt=!1,Xt=!0,Qt=!1;const Zt="user-content-";let _t=!0,pt=!1,qe={},Ce=null;const St=S({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","selectedcontent","style","svg","template","thead","title","video","xmp"]);let Jt=null;const es=S({},["audio","video","img","source","image","track"]);let wt=null;const ts=S({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),mt="http://www.w3.org/1998/Math/MathML",ft="http://www.w3.org/2000/svg",Re="http://www.w3.org/1999/xhtml";let Ke=Re,It=!1,Ct=null;const nn=S({},[mt,ft,Re],Mt),ss=ne(["mi","mo","mn","ms","mtext"]);let Rt=S({},ss);const ns=ne(["annotation-xml"]);let Dt=S({},ns);const rn=S({},["title","style","font","a","script"]);let tt=null;const on=["application/xhtml+xml","text/html"],an="text/html";let W=null,Xe=null;const ln=a.createElement("form"),rs=function(t){return t instanceof RegExp||t instanceof Function},Ot=function(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(Xe&&Xe===t)return;(!t||typeof t!="object")&&(t={}),t=ie(t),tt=on.indexOf(t.PARSER_MEDIA_TYPE)===-1?an:t.PARSER_MEDIA_TYPE,W=tt==="application/xhtml+xml"?Mt:at,L=ve(t,"ALLOWED_TAGS",Le,{transform:W}),k=ve(t,"ALLOWED_ATTR",Ae,{transform:W}),Ct=ve(t,"ALLOWED_NAMESPACES",nn,{transform:Mt}),wt=ve(t,"ADD_URI_SAFE_ATTR",ts,{transform:W,base:ts}),Jt=ve(t,"ADD_DATA_URI_TAGS",es,{transform:W,base:es}),Ce=ve(t,"FORBID_CONTENTS",St,{transform:W}),Ee=ve(t,"FORBID_TAGS",ie({}),{transform:W}),b=ve(t,"FORBID_ATTR",ie({}),{transform:W}),qe=ee(t,"USE_PROFILES")?t.USE_PROFILES&&typeof t.USE_PROFILES=="object"?ie(t.USE_PROFILES):t.USE_PROFILES:!1,ae=t.ALLOW_ARIA_ATTR!==!1,de=t.ALLOW_DATA_ATTR!==!1,xe=t.ALLOW_UNKNOWN_PROTOCOLS||!1,Ie=t.ALLOW_SELF_CLOSE_IN_ATTR!==!1,m=t.SAFE_FOR_TEMPLATES||!1,_=t.SAFE_FOR_XML!==!1,Q=t.WHOLE_DOCUMENT||!1,Ye=t.RETURN_DOM||!1,ut=t.RETURN_DOM_FRAGMENT||!1,dt=t.RETURN_TRUSTED_TYPE||!1,yt=t.FORCE_BODY||!1,Xt=t.SANITIZE_DOM!==!1,Qt=t.SANITIZE_NAMED_PROPS||!1,_t=t.KEEP_CONTENT!==!1,pt=t.IN_PLACE||!1,Ue=Kr(t.ALLOWED_URI_REGEXP)?t.ALLOWED_URI_REGEXP:Ls,Ke=typeof t.NAMESPACE=="string"?t.NAMESPACE:Re,Rt=ee(t,"MATHML_TEXT_INTEGRATION_POINTS")&&t.MATHML_TEXT_INTEGRATION_POINTS&&typeof t.MATHML_TEXT_INTEGRATION_POINTS=="object"?ie(t.MATHML_TEXT_INTEGRATION_POINTS):S({},ss),Dt=ee(t,"HTML_INTEGRATION_POINTS")&&t.HTML_INTEGRATION_POINTS&&typeof t.HTML_INTEGRATION_POINTS=="object"?ie(t.HTML_INTEGRATION_POINTS):S({},ns);const r=ee(t,"CUSTOM_ELEMENT_HANDLING")&&t.CUSTOM_ELEMENT_HANDLING&&typeof t.CUSTOM_ELEMENT_HANDLING=="object"?ie(t.CUSTOM_ELEMENT_HANDLING):et(null);if(B=et(null),ee(r,"tagNameCheck")&&rs(r.tagNameCheck)&&(B.tagNameCheck=r.tagNameCheck),ee(r,"attributeNameCheck")&&rs(r.attributeNameCheck)&&(B.attributeNameCheck=r.attributeNameCheck),ee(r,"allowCustomizedBuiltInElements")&&typeof r.allowCustomizedBuiltInElements=="boolean"&&(B.allowCustomizedBuiltInElements=r.allowCustomizedBuiltInElements),re(B),m&&(de=!1),ut&&(Ye=!0),qe&&(L=S({},Os),k=et(null),qe.html===!0&&(S(L,Ds),S(k,js)),qe.svg===!0&&(S(L,Ft),S(k,Bt),S(k,Tt)),qe.svgFilters===!0&&(S(L,Ut),S(k,Bt),S(k,Tt)),qe.mathMl===!0&&(S(L,Ht),S(k,ks),S(k,Tt))),A.tagCheck=null,A.attributeCheck=null,ee(t,"ADD_TAGS")&&(typeof t.ADD_TAGS=="function"?A.tagCheck=t.ADD_TAGS:Me(t.ADD_TAGS)&&(L===Le&&(L=ie(L)),S(L,t.ADD_TAGS,W))),ee(t,"ADD_ATTR")&&(typeof t.ADD_ATTR=="function"?A.attributeCheck=t.ADD_ATTR:Me(t.ADD_ATTR)&&(k===Ae&&(k=ie(k)),S(k,t.ADD_ATTR,W))),ee(t,"ADD_URI_SAFE_ATTR")&&Me(t.ADD_URI_SAFE_ATTR)&&S(wt,t.ADD_URI_SAFE_ATTR,W),ee(t,"FORBID_CONTENTS")&&Me(t.FORBID_CONTENTS)&&(Ce===St&&(Ce=ie(Ce)),S(Ce,t.FORBID_CONTENTS,W)),ee(t,"ADD_FORBID_CONTENTS")&&Me(t.ADD_FORBID_CONTENTS)&&(Ce===St&&(Ce=ie(Ce)),S(Ce,t.ADD_FORBID_CONTENTS,W)),_t&&(L["#text"]=!0),Q&&S(L,["html","head","body"]),L.table&&(S(L,["tbody"]),delete Ee.tbody),t.TRUSTED_TYPES_POLICY){if(typeof t.TRUSTED_TYPES_POLICY.createHTML!="function")throw Ge('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof t.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw Ge('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');const i=E;E=t.TRUSTED_TYPES_POLICY;try{H=f("")}catch(g){throw E=i,g}}else t.TRUSTED_TYPES_POLICY===null?(E=void 0,H=""):(E===void 0&&(E=le()),E&&typeof H=="string"&&(H=f("")));ne&&ne(t),Xe=t},os=S({},[...Ft,...Ut,...Xr]),as=S({},[...Ht,...Qr]),cn=function(t,r,i){return r.namespaceURI===Re?t==="svg":r.namespaceURI===mt?t==="svg"&&(i==="annotation-xml"||Rt[i]):!!os[t]},un=function(t,r,i){return r.namespaceURI===Re?t==="math":r.namespaceURI===ft?t==="math"&&Dt[i]:!!as[t]},dn=function(t,r,i){return r.namespaceURI===ft&&!Dt[i]||r.namespaceURI===mt&&!Rt[i]?!1:!as[t]&&(rn[t]||!os[t])},pn=function(t){let r=j(t);(!r||!r.tagName)&&(r={namespaceURI:Ke,tagName:"template"});const i=at(t.tagName),g=at(r.tagName);return Ct[t.namespaceURI]?t.namespaceURI===ft?cn(i,r,g):t.namespaceURI===mt?un(i,r,g):t.namespaceURI===Re?dn(i,r,g):!!(tt==="application/xhtml+xml"&&Ct[t.namespaceURI]):!1},Pe=function(t){Je(n.removed,{element:t});try{j(t).removeChild(t)}catch{if(fe(t),!j(t))throw Ge("a node selected for removal could not be detached from its tree and cannot be safely returned; refusing to sanitize in place")}},gt=function(t){st(t);const r=q(t);if(r){const g=[];Ze(r,x=>{Je(g,x)}),Ze(g,x=>{try{fe(x)}catch{}})}const i=te(t);if(i)for(let g=i.length-1;g>=0;--g){const x=i[g],N=x&&x.name;if(typeof N=="string")try{t.removeAttribute(N)}catch{}}},Be=function(t,r){try{Je(n.removed,{attribute:r.getAttributeNode(t),from:r})}catch{Je(n.removed,{attribute:null,from:r})}if(r.removeAttribute(t),t==="is")if(Ye||ut)try{Pe(r)}catch{}else try{r.setAttribute(t,"")}catch{}},mn=function(t){const r=te(t);if(r)for(let i=r.length-1;i>=0;--i){const g=r[i],x=g&&g.name;if(!(typeof x!="string"||k[W(x)]))try{t.removeAttribute(x)}catch{}}},st=function(t){const r=[t];for(;r.length>0;){const i=r.pop();(P?P(i):i.nodeType)===be.element&&mn(i);const x=q(i);if(x)for(let N=x.length-1;N>=0;--N)r.push(x[N])}},fn=function(t){if(!_)return;const r=[t];for(;r.length>0;){const i=r.pop(),g=P?P(i):i.nodeType;if(g===be.processingInstruction||g===be.comment&&J(vs,i.data)){try{fe(i)}catch{}continue}if(g===be.element){const N=i,M=W(z?z(i):i.nodeName);try{N.hasAttribute&&N.hasAttribute("patchsrc")&&N.removeAttribute("patchsrc"),N.hasAttribute&&N.hasAttribute("for")&&M!=="label"&&M!=="output"&&N.removeAttribute("for")}catch{}}const x=q(i);if(x)for(let N=x.length-1;N>=0;--N)r.push(x[N])}},is=function(t){let r=null,i=null;if(yt)t=""+t;else{const N=ws(t,/^[\r\n\t ]+/);i=N&&N[0]}tt==="application/xhtml+xml"&&Ke===Re&&(t=''+t+"");const g=E?f(t):t;if(Ke===Re)try{r=new Y().parseFromString(g,tt)}catch{}if(!r||!r.documentElement){r=oe.createDocument(Ke,"template",null);try{r.documentElement.innerHTML=It?H:g}catch{}}const x=r.body||r.documentElement;return t&&i&&x.insertBefore(a.createTextNode(i),x.childNodes[0]||null),Ke===Re?se.call(r,Q?"html":"body")[0]:Q?r.documentElement:x},ls=function(t){const r=v?v(t):t.ownerDocument;return he.call(r||t,t,y.SHOW_ELEMENT|y.SHOW_COMMENT|y.SHOW_TEXT|y.SHOW_PROCESSING_INSTRUCTION|y.SHOW_CDATA_SECTION,null)},ht=function(t){return t=rt(t,V," "),t=rt(t,Se," "),t=rt(t,it," "),t},jt=function(t){var r;t.normalize();const i=v?v(t):t.ownerDocument,g=he.call(i||t,t,y.SHOW_TEXT|y.SHOW_COMMENT|y.SHOW_CDATA_SECTION|y.SHOW_PROCESSING_INSTRUCTION,null);let x=g.nextNode();for(;x;)x.data=ht(x.data),x=g.nextNode();const N=(r=t.querySelectorAll)===null||r===void 0?void 0:r.call(t,"template");N&&Ze(N,M=>{Qe(M.content)&&jt(M.content)})},xt=function(t){const r=z?z(t):null;return typeof r!="string"||W(r)!=="form"?!1:typeof t.nodeName!="string"||typeof t.textContent!="string"||typeof t.removeChild!="function"||t.attributes!==te(t)||typeof t.removeAttribute!="function"||typeof t.setAttribute!="function"||typeof t.namespaceURI!="string"||typeof t.insertBefore!="function"||typeof t.hasChildNodes!="function"||t.nodeType!==P(t)||t.childNodes!==q(t)},Qe=function(t){if(!P||typeof t!="object"||t===null)return!1;try{return P(t)===be.documentFragment}catch{return!1}},nt=function(t){if(!P||typeof t!="object"||t===null)return!1;try{return typeof P(t)=="number"}catch{return!1}};function De(u,t,r){u.length!==0&&Ze(u,i=>{i.call(n,t,r,Xe)})}const gn=function(t,r){return!!(_&&t.hasChildNodes()&&!nt(t.firstElementChild)&&J(Ps,t.textContent)&&J(Ps,t.innerHTML)||_&&t.namespaceURI===Re&&r==="style"&&nt(t.firstElementChild)||t.nodeType===be.processingInstruction||_&&t.nodeType===be.comment&&J(vs,t.data))},hn=function(t,r,i){if(!Ee[r]&&ps(r)&&(B.tagNameCheck instanceof RegExp&&J(B.tagNameCheck,r)||B.tagNameCheck instanceof Function&&B.tagNameCheck(r)))return!1;if(_t&&!Ce[r]){const g=j(t),x=q(t);if(x&&g){const N=x.length;for(let M=N-1;M>=0;--M){const $=t===i?Te(x[M],!0):x[M];g.insertBefore($,Ne(t))}}}return Pe(t),!0},cs=function(t,r,i,g){return t.length===0?r:r===i||r===g?ie(r):r},us=function(t,r){if(De(O.beforeSanitizeElements,t,null),t!==r&&j(t)===null)return pt&&st(t),!0;if(xt(t))return Pe(t),!0;const i=W(z?z(t):t.nodeName);if(L=cs(O.uponSanitizeElement,L,Le,lt),De(O.uponSanitizeElement,t,{tagName:i,allowedTags:L}),t!==r&&j(t)===null)return pt&&st(t),!0;if(gn(t,i))return Pe(t),!0;if(Ee[i]||!(A.tagCheck instanceof Function&&A.tagCheck(i))&&!L[i]){const x=hn(t,i,r);return x===!1&&De(O.afterSanitizeElements,t,null),x}if((P?P(t):t.nodeType)===be.element&&!pn(t)||(i==="noscript"||i==="noembed"||i==="noframes")&&J(io,t.innerHTML))return Pe(t),!0;if(m&&t.nodeType===be.text){const x=ht(t.textContent);t.textContent!==x&&(Je(n.removed,{element:t.cloneNode()}),t.textContent=x)}return De(O.afterSanitizeElements,t,null),!1},ds=function(t,r,i){if(b[r]||_&&r==="patchsrc"||_&&r==="for"&&t!=="label"&&t!=="output"||Xt&&(r==="id"||r==="name")&&(i in a||i in ln))return!1;const g=k[r]||A.attributeCheck instanceof Function&&A.attributeCheck(r,t);if(!(de&&J(We,r))){if(!(ae&&J($e,r))){if(g){if(!wt[r]){if(!J(Ue,rt(i,we,""))){if(!((r==="src"||r==="xlink:href"||r==="href")&&t!=="script"&&Is(i,"data:")===0&&Jt[t])){if(!(xe&&!J(ke,rt(i,we,"")))){if(i)return!1}}}}}else if(!(ps(t)&&(B.tagNameCheck instanceof RegExp&&J(B.tagNameCheck,t)||B.tagNameCheck instanceof Function&&B.tagNameCheck(t))&&(B.attributeNameCheck instanceof RegExp&&J(B.attributeNameCheck,r)||B.attributeNameCheck instanceof Function&&B.attributeNameCheck(r,t))||r==="is"&&B.allowCustomizedBuiltInElements&&(B.tagNameCheck instanceof RegExp&&J(B.tagNameCheck,i)||B.tagNameCheck instanceof Function&&B.tagNameCheck(i))))return!1}}return!0},xn=S({},["annotation-xml","color-profile","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","missing-glyph"]),ps=function(t){return!xn[at(t)]&&J(Fe,t)},bn=function(t,r,i,g){if(E&&typeof T=="object"&&typeof T.getAttributeType=="function"&&!i)switch(T.getAttributeType(t,r)){case"TrustedHTML":return f(g);case"TrustedScriptURL":return D(g)}return g},Tn=function(t,r,i,g){try{i?t.setAttributeNS(i,r,g):t.setAttribute(r,g),xt(t)?Pe(t):Ss(n.removed)}catch{Be(r,t)}},ms=function(t){De(O.beforeSanitizeAttributes,t,null);const r=t.attributes;if(!r||xt(t))return;k=cs(O.uponSanitizeAttribute,k,Ae,ct);const i={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:k,forceKeepAttr:void 0};let g=r.length;const x=W(t.nodeName);for(;g--;){const N=r[g],M=N.name,$=N.namespaceURI,pe=N.value,me=W(M),Lt=pe;let ue=M==="value"?Lt:zr(Lt);if(i.attrName=me,i.attrValue=ue,i.keepAttr=!0,i.forceKeepAttr=void 0,De(O.uponSanitizeAttribute,t,i),ue=i.attrValue,Qt&&(me==="id"||me==="name")&&Is(ue,Zt)!==0&&(Be(M,t),ue=Zt+ue),_&&J(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,ue)){Be(M,t);continue}if(me==="attributename"&&ws(ue,"href")){Be(M,t);continue}if(!i.forceKeepAttr){if(!i.keepAttr){Be(M,t);continue}if(!Ie&&J(lo,ue)){Be(M,t);continue}if(m&&(ue=ht(ue)),!ds(x,me,ue)){Be(M,t);continue}ue=bn(x,me,$,ue),ue!==Lt&&Tn(t,M,$,ue)}}De(O.afterSanitizeAttributes,t,null)},bt=function(t){let r=null;const i=ls(t);for(De(O.beforeSanitizeShadowDOM,t,null);r=i.nextNode();)if(De(O.uponSanitizeShadowNode,r,null),us(r,t),ms(r),Qe(r.content)&&bt(r.content),(P?P(r):r.nodeType)===be.element){const x=I(r);Qe(x)&&(kt(x),bt(x))}De(O.afterSanitizeShadowDOM,t,null)},kt=function(t){const r=[{node:t,shadow:null}];for(;r.length>0;){const i=r.pop();if(i.shadow){bt(i.shadow);continue}const g=i.node,N=(P?P(g):g.nodeType)===be.element,M=q(g);if(M)for(let $=M.length-1;$>=0;--$)r.push({node:M[$],shadow:null});if(N){const $=z?z(g):null;if(typeof $=="string"&&W($)==="template"){const pe=g.content;Qe(pe)&&r.push({node:pe,shadow:null})}}if(N){const $=I(g);Qe($)&&r.push({node:null,shadow:$},{node:$,shadow:null})}}};return n.sanitize=function(u){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=null,i=null,g=null,x=null;if(It=!u,It&&(u=""),typeof u!="string"&&!nt(u)&&(u=qr(u),typeof u!="string"))throw Ge("dirty is not a string, aborting");if(!n.isSupported)return u;He?(L=lt,k=ct):Ot(t),(O.uponSanitizeElement.length>0||O.uponSanitizeAttribute.length>0)&&(L=ie(L)),O.uponSanitizeAttribute.length>0&&(k=ie(k)),n.removed=[];const N=pt&&typeof u!="string"&&nt(u);if(N){fn(u);const pe=z?z(u):u.nodeName;if(typeof pe=="string"){const me=W(pe);if(!L[me]||Ee[me])throw gt(u),Ge("root node is forbidden and cannot be sanitized in-place")}if(xt(u))throw gt(u),Ge("root node is clobbered and cannot be sanitized in-place");try{kt(u)}catch(me){throw gt(u),me}}else if(nt(u))r=is(""),i=r.ownerDocument.importNode(u,!0),i.nodeType===be.element&&i.nodeName==="BODY"||i.nodeName==="HTML"?r=i:r.appendChild(i),kt(i);else{if(!Ye&&!m&&!Q&&u.indexOf("<")===-1)return E&&dt?f(u):u;if(r=is(u),!r)return Ye?null:dt?H:""}r&&yt&&Pe(r.firstChild);const M=N?u:r;try{const pe=ls(M);for(;g=pe.nextNode();)us(g,M),ms(g),Qe(g.content)&&bt(g.content)}catch(pe){throw N&&(gt(u),Ze(n.removed,me=>{me.element&&st(me.element)})),pe}if(N)return Ze(n.removed,pe=>{pe.element&&st(pe.element)}),m&&jt(u),u;if(Ye){if(m&&jt(r),ut)for(x=ce.call(r.ownerDocument);r.firstChild;)x.appendChild(r.firstChild);else x=r;return(k.shadowroot||k.shadowrootmode)&&(x=_e.call(l,x,!0)),x}let $=Q?r.outerHTML:r.innerHTML;return Q&&L["!doctype"]&&r.ownerDocument&&r.ownerDocument.doctype&&r.ownerDocument.doctype.name&&J(oo,r.ownerDocument.doctype.name)&&($=" -`+$),m&&($=ht($)),E&&dt?f($):$},n.setConfig=function(){let u=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Ot(u),He=!0,lt=L,ct=k},n.clearConfig=function(){Xe=null,He=!1,lt=null,ct=null,E=w,H=""},n.isValidAttribute=function(u,t,r){Xe||Ot({});const i=W(u),g=W(t);return ds(i,g,r)},n.addHook=function(u,t){typeof t=="function"&&ee(O,u)&&Je(O[u],t)},n.removeHook=function(u,t){if(ee(O,u)){if(t!==void 0){const r=Br(O[u],t);return r===-1?void 0:Gr(O[u],r,1)[0]}return Ss(O[u])}},n.removeHooks=function(u){ee(O,u)&&(O[u]=[])},n.removeAllHooks=function(){O=Ms()},n}var po=tn();const mo={DEBATE:{ARGUMENT:"default",REBUTTAL:"warning"},DEVIL_ADVOCATE:{CHALLENGE:"destructive",DEFENSE:"success"},TASK_FORCE:{PLAN:"default",TASK_RESULT:"success",VERIFICATION:"warning"}};function fo(e){return/<[a-z][\s\S]*>/i.test(e)}function go(e){switch(e){case"SYNTHESIS":case"PLAN":return"default";case"ERROR":return"destructive";case"SKIPPED":return"secondary";case"CRITIQUE":case"CHALLENGE":case"VERIFICATION":return"warning";case"OPINION":case"REVISION":case"DEFENSE":case"TASK_RESULT":return"success";case"DISSENT":return"destructive";case"ABSTAINED":return"secondary";default:return"outline"}}function ho(e){const n=[`Signature: ${e.signature.slice(0,16)}…`];return e.signatureKeyVersion!=null&&n.push(`Key version: ${e.signatureKeyVersion}`),e.signatureTimestampMs!=null&&n.push(`Signed at: ${new Date(e.signatureTimestampMs).toISOString()}`),n.join(` -`)}const xo=144;function Fs(e){var n;return!Array.isArray(e)||e.length===0||typeof((n=e[0])==null?void 0:n.subject)!="string"?null:e}function bo(e){const n=e.indexOf("["),a=e.lastIndexOf("]");return n===-1||a===-1||a<=n?null:e.slice(n,a+1)}function Us(e){if(!e)return null;const n=bo(e);if(!n)return null;try{return Fs(JSON.parse(n))}catch{}try{const a=n.replace(/"(?:[^"\\]|\\.)*"/g,l=>l.replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t"));return Fs(JSON.parse(a))}catch{return null}}function To({entry:e,isSpeaking:n,allowHtml:a,discussionStyle:l,preConfiguredTasks:o,className:p}){var w;const{t:c}=Ve(),F=An(e.type),y=e.type==="SYNTHESIS",G=e.type==="ERROR"||e.type==="SKIPPED",Y=e.type==="PLAN",T=e.type==="VERIFICATION",U=e.type==="TASK_RESULT",Te=e.type==="DISSENT",fe=e.type==="CONVERGENCE"||e.type==="FACILITATION"||e.type==="ABSTAINED",Ne=l&&((w=mo[l])==null?void 0:w[e.type])||go(e.type),q=e.content?Wt(e.content):null,j=q!=null&&q.trim()?yn(q):null;let I=Us(e.content)??Us(j);!I&&T&&(I=(e.content?fs(e.content):null)??(j?fs(j):null)),!I&&Y&&o&&o.length>0&&(I=o.map(d=>({subject:d.subject,description:d.description,assignedTo:d.assignToRole,priority:d.priority})));const te=a&&j?fo(j):!1,P=h.useRef(null),[z,v]=h.useState(!1),[E,H]=h.useState(!1);return h.useEffect(()=>{P.current&&v(P.current.scrollHeight>xo)},[j]),s.jsxs("div",{className:C("flex gap-3 rounded-lg p-3 transition-colors",y&&"border-2 border-primary/40 bg-primary/5 shadow-sm",Y&&"border border-sky-500/30 bg-sky-500/5",U&&"border border-emerald-500/20 bg-emerald-500/5",T&&"border border-amber-500/20 bg-amber-500/5",Te&&"border border-red-500/30 bg-red-500/5",G&&"opacity-60",fe&&"opacity-75",!y&&!G&&!Y&&!U&&!T&&!Te&&"hover:bg-secondary/30",p),"data-testid":`transcript-entry-${e.speakerAgentId}-${e.phaseIndex}`,children:[s.jsx("div",{className:C("flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-xs font-bold text-white",Sn(e.speakerAgentId)),title:e.speakerDisplayName,children:Y?s.jsx(gr,{className:"h-4 w-4"}):T?s.jsx(Nt,{className:"h-4 w-4"}):_n(e.speakerDisplayName)}),s.jsxs("div",{className:"flex-1 min-w-0",children:[s.jsxs("div",{className:"flex items-center gap-2 flex-wrap mb-1",children:[s.jsx("span",{className:"text-sm font-semibold text-foreground",children:e.speakerDisplayName}),s.jsx(Oe,{variant:Ne,className:"text-[10px] px-1.5 py-0",children:c(`groups.entryType.${e.type}`,F.label)}),e.targetAgentId&&s.jsxs("span",{className:"text-[10px] text-muted-foreground",title:e.targetAgentId,children:["→ ",e.targetAgentId.slice(0,8),"…"]}),wn(e)&&s.jsxs("span",{className:"inline-flex items-center gap-1 rounded-full bg-emerald-500/10 px-1.5 py-0 text-[10px] font-medium text-emerald-600 cursor-help dark:text-emerald-400",title:ho(e),"data-testid":"transcript-signature-badge",children:[s.jsx(hr,{className:"h-2.5 w-2.5"}),c("audit.signed","Signed")]}),s.jsx("span",{className:"text-[10px] text-muted-foreground ms-auto",children:Kt(e.timestamp,"time")})]}),n?s.jsxs("div",{className:"flex items-center gap-2 py-1",children:[s.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-primary animate-bounce [animation-delay:0ms]"}),s.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-primary animate-bounce [animation-delay:150ms]"}),s.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-primary animate-bounce [animation-delay:300ms]"}),s.jsx("span",{className:"text-xs text-muted-foreground ms-1",children:c("groups.responding","responding…")})]}):I?s.jsxs("div",{className:"space-y-2",children:[s.jsxs("div",{className:"flex items-center gap-1.5 text-xs font-medium text-muted-foreground mb-2",children:[T?s.jsx(Nt,{className:"h-3.5 w-3.5"}):s.jsx(Ir,{className:"h-3.5 w-3.5"}),I.length," ",I.length===1?c("groups.item","item"):c("groups.items","items")]}),I.map((d,R)=>{const K=d.passed!==void 0;return s.jsxs("div",{className:C("flex items-start gap-3 rounded-lg border px-3 py-2.5",K&&d.passed&&"border-emerald-500/30 bg-emerald-500/5",K&&!d.passed&&"border-destructive/30 bg-destructive/5",!K&&"border-border/50 bg-secondary/30"),children:[K?d.passed?s.jsx(Nt,{className:"h-4 w-4 shrink-0 text-emerald-500 mt-0.5"}):s.jsx(In,{className:"h-4 w-4 shrink-0 text-destructive mt-0.5"}):s.jsx("span",{className:"flex h-5 w-5 shrink-0 items-center justify-center rounded-full bg-sky-500/20 text-sky-400 text-[10px] font-bold mt-0.5",children:R+1}),s.jsxs("div",{className:"flex-1 min-w-0",children:[s.jsx("p",{className:"text-sm font-medium text-foreground leading-snug",children:d.subject}),d.description&&s.jsx(Hs,{text:d.description,className:"mt-0.5"}),d.feedback&&s.jsx(Hs,{text:d.feedback,className:"mt-0.5"}),d.assignedTo&&s.jsxs("div",{className:"flex items-center gap-1 mt-1.5",children:[s.jsx(Dr,{className:"h-3 w-3 text-muted-foreground"}),s.jsx("span",{className:"text-[10px] text-muted-foreground font-medium truncate max-w-[200px]",title:d.assignedTo,children:d.assignedTo.length>12?`${d.assignedTo.slice(0,12)}…`:d.assignedTo})]})]}),d.priority!=null&&s.jsxs(Oe,{variant:"outline",className:"text-[9px] px-1.5 py-0 shrink-0",children:["P",d.priority]})]},R)})]}):j?s.jsxs(s.Fragment,{children:[s.jsxs("div",{ref:P,className:C("relative transition-[max-height] duration-300 ease-in-out overflow-hidden",z&&!E&&"max-h-36"),children:[te?s.jsx("div",{className:"text-sm text-foreground/90 leading-relaxed [&_ul]:ms-4 [&_ul]:list-disc [&_li]:mb-0.5 [&_strong]:font-semibold",dangerouslySetInnerHTML:{__html:po.sanitize(j)}}):s.jsx("div",{className:"prose prose-sm dark:prose-invert max-w-none text-foreground/90 [&_pre]:rounded-lg [&_pre]:bg-muted [&_pre]:p-3 [&_code]:rounded [&_code]:bg-muted [&_code]:px-1 [&_code]:py-0.5 [&_code]:text-xs [&_hr]:border-border [&_p:first-child]:mt-0 [&_p:last-child]:mb-0",children:s.jsx(Vs,{remarkPlugins:[Ws],children:Cn(j,c("groups.contentTruncated","[Content truncated]"))})}),z&&!E&&s.jsx("div",{className:C("absolute bottom-0 inset-x-0 h-10 bg-gradient-to-t pointer-events-none",y?"from-primary/5 to-transparent":"from-card to-transparent")})]}),z&&s.jsx("button",{onClick:()=>H(d=>!d),className:"flex items-center gap-1 mt-1 text-xs font-medium text-primary hover:text-primary/80 transition-colors",children:E?s.jsxs(s.Fragment,{children:[s.jsx($s,{className:"h-3 w-3"}),c("common.showLess","Show less")]}):s.jsxs(s.Fragment,{children:[s.jsx(qt,{className:"h-3 w-3"}),c("common.showMore","Show more")]})})]}):e.errorReason?s.jsxs("div",{className:"flex items-center gap-2 text-sm text-muted-foreground italic",children:[s.jsx("span",{className:"text-[10px] rounded-full bg-muted px-2 py-0.5",children:e.type==="SKIPPED"?`⏭️ ${c("groups.skipped","Skipped")}`:`⚠️ ${c("common.error","Error")}`}),s.jsx("span",{className:"text-xs",children:e.errorReason})]}):e.type==="ABSTAINED"?s.jsx("div",{className:"text-sm italic text-muted-foreground",children:c("groups.abstainedBody","Declined to add anything new this round.")}):s.jsx("div",{className:"text-sm text-muted-foreground italic",children:c("groups.noResponse","No response")})]})]})}function Hs({text:e,className:n}){const{t:a}=Ve(),[l,o]=h.useState(!1),p=e.length>100;return s.jsxs("div",{className:n,children:[s.jsx("p",{className:C("text-xs text-muted-foreground leading-relaxed",!l&&p&&"line-clamp-2"),children:e}),p&&s.jsx("button",{type:"button",onClick:()=>o(!l),className:"text-[10px] text-primary/70 hover:text-primary font-medium mt-0.5 transition-colors",children:l?a("common.showLess","Show less"):a("common.showMore","Show more")})]})}const Et={ROUND_TABLE:{accent:"text-amber-500",dotColor:"bg-amber-500",phaseAccent:"border-amber-500/30 bg-amber-500/5",questionBg:"bg-amber-500/5 border-b-amber-500/20",flowBg:"bg-amber-500/10",flowText:"text-amber-600 dark:text-amber-400",progressBg:"bg-amber-500/5",progressText:"text-amber-600 dark:text-amber-400",progressBorder:"border-amber-500/20"},PEER_REVIEW:{accent:"text-teal-500",dotColor:"bg-teal-500",phaseAccent:"border-teal-500/30 bg-teal-500/5",questionBg:"bg-teal-500/5 border-b-teal-500/20",flowBg:"bg-teal-500/10",flowText:"text-teal-600 dark:text-teal-400",progressBg:"bg-teal-500/5",progressText:"text-teal-600 dark:text-teal-400",progressBorder:"border-teal-500/20"},DEVIL_ADVOCATE:{accent:"text-rose-500",dotColor:"bg-rose-500",phaseAccent:"border-rose-500/30 bg-rose-500/5",questionBg:"bg-rose-500/5 border-b-rose-500/20",flowBg:"bg-rose-500/10",flowText:"text-rose-600 dark:text-rose-400",progressBg:"bg-rose-500/5",progressText:"text-rose-600 dark:text-rose-400",progressBorder:"border-rose-500/20"},DELPHI:{accent:"text-violet-500",dotColor:"bg-violet-500",phaseAccent:"border-violet-500/30 bg-violet-500/5",questionBg:"bg-violet-500/5 border-b-violet-500/20",flowBg:"bg-violet-500/10",flowText:"text-violet-600 dark:text-violet-400",progressBg:"bg-violet-500/5",progressText:"text-violet-600 dark:text-violet-400",progressBorder:"border-violet-500/20"},DEBATE:{accent:"text-indigo-500",dotColor:"bg-indigo-500",phaseAccent:"border-indigo-500/30 bg-indigo-500/5",questionBg:"bg-indigo-500/5 border-b-indigo-500/20",flowBg:"bg-indigo-500/10",flowText:"text-indigo-600 dark:text-indigo-400",progressBg:"bg-indigo-500/5",progressText:"text-indigo-600 dark:text-indigo-400",progressBorder:"border-indigo-500/20"},TASK_FORCE:{accent:"text-orange-500",dotColor:"bg-orange-500",phaseAccent:"border-orange-500/30 bg-orange-500/5",questionBg:"bg-orange-500/5 border-b-orange-500/20",flowBg:"bg-orange-500/10",flowText:"text-orange-600 dark:text-orange-400",progressBg:"bg-orange-500/5",progressText:"text-orange-600 dark:text-orange-400",progressBorder:"border-orange-500/20"},NEGOTIATION:{accent:"text-emerald-500",dotColor:"bg-emerald-500",phaseAccent:"border-emerald-500/30 bg-emerald-500/5",questionBg:"bg-emerald-500/5 border-b-emerald-500/20",flowBg:"bg-emerald-500/10",flowText:"text-emerald-600 dark:text-emerald-400",progressBg:"bg-emerald-500/5",progressText:"text-emerald-600 dark:text-emerald-400",progressBorder:"border-emerald-500/20"},CUSTOM:{accent:"text-primary",dotColor:"bg-primary",phaseAccent:"border-primary/30 bg-primary/5",questionBg:"bg-card/50",flowBg:"bg-primary/10",flowText:"text-primary",progressBg:"bg-primary/5",progressText:"text-primary",progressBorder:"border-primary/20"}};function No(e){return{OPINION:"OPINION",CRITIQUE:"CRITIQUE",REVISION:"REVISION",CHALLENGE:"CHALLENGE",DEFENSE:"DEFENSE",ARGUMENT:"ARGUE",REBUTTAL:"REBUTTAL",SYNTHESIS:"SYNTHESIS",DISSENT:"SYNTHESIS",ABSTAINED:"SYNTHESIS",CONVERGENCE:"OPINION",PLAN:"PLAN",TASK_RESULT:"EXECUTE",VERIFICATION:"VERIFY",VOTE:"VOTE",PROPOSAL:"PROPOSAL",BARGAIN:"BARGAIN",RETRO:"RETRO",BID:"EXECUTE"}[e]||"OPINION"}function Eo(e){const n=[];let a=null;for(const l of e){if(l.type==="QUESTION")continue;const o=l.phaseName||`Phase ${l.phaseIndex}`;(!a||a.phaseIndex!==l.phaseIndex||a.phaseName!==o)&&(a={phaseIndex:l.phaseIndex,phaseName:o,phaseType:No(l.type),entries:[]},n.push(a)),a.entries.push(l)}return n}const Bs={CREATED:{variant:"default"},IN_PROGRESS:{variant:"warning"},SYNTHESIZING:{variant:"warning"},COMPLETED:{variant:"success"},FAILED:{variant:"destructive"},AWAITING_APPROVAL:{variant:"warning"},AWAITING_HUMAN_INPUT:{variant:"warning"},CANCELLED:{variant:"destructive"}},Ao=300;function yo({conversation:e,streamState:n,isLoading:a,discussionStyle:l,preConfiguredTasks:o,onApprove:p,onCancelDiscussion:c,isDeciding:F,onSubmitHumanInput:y,isSubmittingHumanInput:G,humanTurnTimeout:Y}){var Ue,L,Le,k,Ae,B,Ee;const{t:T}=Ve(),[U,Te]=h.useState(!1),[fe,Ne]=h.useState(!1),[q,j]=h.useState(!1),[I,te]=h.useState(!1),P=h.useRef(null),z=h.useRef(null),v=l||"ROUND_TABLE",E=Et[v]||Et.ROUND_TABLE,H=Rn(v,T),w=!!n&&(n.isStreaming||n.state!=="CREATED"),d=h.useMemo(()=>w?n.transcript:(e==null?void 0:e.transcript)??[],[w,n,e==null?void 0:e.transcript]),R=w?n.state:(e==null?void 0:e.state)??"CREATED",K=w?(Ue=n.currentPhase)==null?void 0:Ue.name:e==null?void 0:e.currentPhaseName,f=w?(L=n.currentPhase)==null?void 0:L.index:e==null?void 0:e.currentPhaseIndex,D=w?n.synthesizedAnswer:e==null?void 0:e.synthesizedAnswer,le=w?n.decision:e==null?void 0:e.decision,ge=h.useMemo(()=>{var b;return w?((b=d.find(A=>A.type==="QUESTION"))==null?void 0:b.content)??"":(e==null?void 0:e.originalQuestion)??""},[w,d,e==null?void 0:e.originalQuestion]),oe=w?n.startedAt??new Date().toISOString():(e==null?void 0:e.created)??new Date().toISOString(),he=w?n.activeSpeakers:new Set,ce=w?n.error:null,se=(e==null?void 0:e.id)??(n==null?void 0:n.conversationId)??null,_e=h.useMemo(()=>{var b;return(((b=e==null?void 0:e.taskList)==null?void 0:b.tasks)??[]).filter(A=>A.status==="AWAITING_APPROVAL").map(A=>A.id)},[e==null?void 0:e.taskList]),O=h.useMemo(()=>R==="AWAITING_APPROVAL"?new Set(_e):void 0,[R,_e]),V=h.useMemo(()=>Eo(d),[d]);if(h.useEffect(()=>{w&&z.current&&z.current.scrollTo({top:z.current.scrollHeight,behavior:"smooth"})},[w,d.length]),h.useEffect(()=>{P.current&&te(P.current.scrollHeight>Ao)},[D]),a)return s.jsxs("div",{className:"space-y-4 p-4",children:[s.jsx(ze,{className:"h-16 w-full"}),s.jsx(ze,{className:"h-32 w-full"}),s.jsx(ze,{className:"h-32 w-full"})]});if(!w&&!e)return s.jsxs("div",{className:"flex flex-col items-center justify-center h-full text-center p-8",children:[s.jsx("div",{className:C("flex h-16 w-16 items-center justify-center rounded-2xl mb-4",E.flowBg),children:s.jsx(Zs,{className:C("h-8 w-8",E.accent)})}),s.jsx("p",{className:"text-lg font-semibold text-foreground mb-1",children:T("groups.readyToDiscuss","Ready to discuss")}),s.jsx("p",{className:"text-sm text-muted-foreground max-w-sm",children:T("groups.selectOrStart","Select a past discussion from the history, or type a question below to start a new one.")}),H&&s.jsxs("div",{className:C("flex items-center gap-2 mt-4 rounded-lg px-3 py-2 border border-border",E.flowBg),children:[s.jsx("span",{className:"text-base",children:H.icon}),s.jsx("span",{className:C("text-sm font-medium",E.flowText),children:H.label}),s.jsxs("span",{className:"text-xs text-muted-foreground",children:["— ",H.flow]})]})]});const Se=Bs[R]||Bs.CREATED,We={CREATED:T("groups.stateCreated","Created"),IN_PROGRESS:T("conversations.stateInProgress","In Progress"),SYNTHESIZING:T("groups.stateSynthesizing","Synthesizing…"),COMPLETED:T("groups.stateCompleted","Completed"),FAILED:T("groups.stateFailed","Failed"),AWAITING_APPROVAL:T("groups.stateAwaitingApproval","Awaiting Approval"),AWAITING_HUMAN_INPUT:T("groups.stateAwaitingHumanInput","Awaiting Human Input"),CANCELLED:T("groups.stateCancelled","Cancelled")}[R]??R;function $e(){const b=D?Wt(D):null;b&&(navigator.clipboard.writeText(b),Te(!0),setTimeout(()=>Te(!1),2e3))}const ke=D?Wt(D):null,we=So[v]||[],Fe=e==null?void 0:e.totalCost;return s.jsxs("div",{className:"flex flex-col h-full",children:[s.jsx("div",{className:C("border-b p-4 shrink-0",E.questionBg),children:s.jsxs("div",{className:"flex items-start gap-3",children:[s.jsx("div",{className:C("flex h-8 w-8 items-center justify-center rounded-full text-xs font-bold text-white shrink-0 bg-primary"),children:"Q"}),s.jsxs("div",{className:"flex-1 min-w-0",children:[s.jsxs("div",{className:"flex items-center gap-2 mb-1 flex-wrap",children:[s.jsx("span",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:T("groups.question","Question")}),s.jsx(Oe,{variant:Se.variant,className:"text-[10px]",children:We}),w&&s.jsx(Oe,{variant:"outline",className:C("text-[10px] animate-pulse border-current",E.accent),children:T("groups.liveIndicator","● LIVE")}),Fe!=null&&Fe>0&&s.jsx(Oe,{variant:"outline",className:"text-[10px] tabular-nums",title:_o(e==null?void 0:e.memberCosts,e==null?void 0:e.memberDisplayNames),"data-testid":"discussion-cost",children:Ys(Fe)}),s.jsxs("button",{onClick:()=>Ne(b=>!b),className:C("flex items-center gap-1 rounded-md px-1.5 py-0.5 text-[10px] transition-colors border",fe?"bg-primary/10 border-primary/30 text-primary":"border-transparent text-muted-foreground hover:text-foreground hover:bg-secondary/50"),title:T("groups.allowHtmlTooltip","When enabled, renders HTML content (sanitized). Use only with trusted agents."),children:[s.jsx(br,{className:"h-3 w-3"}),T("groups.htmlToggle","HTML")]}),s.jsx("span",{className:"text-[10px] text-muted-foreground ms-auto",children:Kt(oe,"full")})]}),s.jsx("p",{className:"text-base font-medium text-foreground",children:ge})]})]})}),v!=="CUSTOM"&&we.length>0&&s.jsx("div",{className:C("flex items-center gap-1 px-4 py-1.5 border-b border-border shrink-0",E.flowBg),children:we.map((b,A)=>{const ae=K==null?void 0:K.toLowerCase().includes(b.toLowerCase()),de=R==="COMPLETED"||f!=null&&A0&&s.jsx(mr,{taskList:e.taskList,memberDisplayNames:e.memberDisplayNames}),s.jsx(Ns,{conversation:e}),V.map((b,A)=>{var ae,de;return s.jsx(jr,{name:b.phaseName,type:b.phaseType,entryCount:b.entries.length,isActive:(R==="IN_PROGRESS"||R==="SYNTHESIZING")&&b.phaseIndex===(w?(ae=n.currentPhase)==null?void 0:ae.index:e==null?void 0:e.currentPhaseIndex),defaultExpanded:!0,convergence:(de=n==null?void 0:n.convergence)==null?void 0:de.get(b.phaseIndex),children:b.entries.map((xe,Ie)=>s.jsx(To,{entry:xe,isSpeaking:he.has(xe.speakerAgentId)&&xe.content===null,allowHtml:fe,discussionStyle:v,preConfiguredTasks:o},`${xe.speakerAgentId}-${xe.phaseIndex}-${Ie}`))},`${b.phaseIndex}-${b.phaseName}-${A}`)}),xr(le)&&s.jsx(fr,{decision:le}),ke&&s.jsxs("div",{className:C("rounded-xl border-2 border-primary/40 bg-linear-to-b from-primary/10 to-primary/5 p-4 shadow-sm"),"data-testid":"synthesis-card",children:[s.jsxs("div",{className:"flex items-center justify-between mb-2",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"text-lg",children:"⭐"}),s.jsx("span",{className:"text-sm font-bold text-primary",children:T("groups.synthesis","Synthesis")})]}),s.jsx("button",{onClick:$e,className:"flex items-center gap-1 rounded-md px-2 py-1 text-xs text-muted-foreground hover:bg-primary/10 hover:text-primary transition-colors",title:T("common.copy","Copy"),children:U?s.jsxs(s.Fragment,{children:[s.jsx(Nt,{className:"h-3 w-3"})," ",T("common.copied","Copied")]}):s.jsxs(s.Fragment,{children:[s.jsx(jn,{className:"h-3 w-3"})," ",T("common.copy","Copy")]})})]}),s.jsxs("div",{ref:P,className:C("relative transition-[max-height] duration-300 ease-in-out overflow-hidden",I&&!q&&"max-h-72"),children:[s.jsx("div",{className:"prose prose-sm dark:prose-invert max-w-none text-foreground [&_pre]:rounded-lg [&_pre]:bg-muted [&_pre]:p-3 [&_code]:rounded [&_code]:bg-muted [&_code]:px-1 [&_code]:py-0.5 [&_code]:text-xs [&_hr]:border-border",children:s.jsx(Vs,{remarkPlugins:[Ws],children:ke})}),I&&!q&&s.jsx("div",{className:"absolute bottom-0 inset-x-0 h-12 bg-gradient-to-t from-primary/5 to-transparent pointer-events-none"})]}),I&&s.jsx("button",{onClick:()=>j(b=>!b),className:"flex items-center gap-1 mt-2 text-xs font-medium text-primary hover:text-primary/80 transition-colors",children:q?s.jsxs(s.Fragment,{children:[s.jsx($s,{className:"h-3 w-3"}),T("common.showLess","Show less")]}):s.jsxs(s.Fragment,{children:[s.jsx(qt,{className:"h-3 w-3"}),T("common.showMore","Show more")]})})]}),(R==="IN_PROGRESS"||R==="SYNTHESIZING")&&s.jsxs("div",{className:C("flex items-center gap-3 p-3 rounded-lg border",E.progressBg,E.progressBorder),children:[s.jsxs("div",{className:"flex gap-1",children:[s.jsx("span",{className:C("h-2 w-2 rounded-full animate-bounce [animation-delay:0ms]",E.dotColor)}),s.jsx("span",{className:C("h-2 w-2 rounded-full animate-bounce [animation-delay:150ms]",E.dotColor)}),s.jsx("span",{className:C("h-2 w-2 rounded-full animate-bounce [animation-delay:300ms]",E.dotColor)})]}),s.jsx("span",{className:C("text-sm font-medium",E.progressText),children:R==="SYNTHESIZING"?T("groups.synthesizing","Moderator is synthesizing…"):T("groups.discussing","Agents are discussing…")}),K&&s.jsx(Oe,{variant:"outline",className:"text-[10px]",children:K}),w&&he.size>0&&s.jsx("span",{className:"text-[10px] text-muted-foreground",children:T("groups.speakingCount","{{count}} speaking",{count:he.size})})]}),R==="AWAITING_APPROVAL"&&s.jsx("div",{className:"px-6 py-4",children:s.jsx(kn,{surface:"group",pauseReason:((Ae=n==null?void 0:n.hitlPause)==null?void 0:Ae.reason)||(e==null?void 0:e.hitlPauseReason),pausedAt:e==null?void 0:e.pausedAt,timeoutPolicy:e==null?void 0:e.hitlTimeoutPolicy,approvalTimeout:e==null?void 0:e.hitlApprovalTimeout,pausedPhaseName:((B=n==null?void 0:n.hitlPause)==null?void 0:B.phaseName)||(e==null?void 0:e.pausedPhaseName),granularity:((Ee=n==null?void 0:n.hitlPause)==null?void 0:Ee.granularity)||(e==null?void 0:e.hitlPauseType),pendingTaskIds:_e,isSubmitting:F,onDecide:(b,A,ae)=>{se&&(p==null||p(se,b,A,ae))},onCancel:c&&se?()=>c(se):void 0})}),w&&s.jsx(Ns,{className:"px-6",retroRecorded:n==null?void 0:n.retroRecorded,artifactUpdates:n==null?void 0:n.artifactUpdates}),R==="AWAITING_HUMAN_INPUT"&&(()=>{const b=n==null?void 0:n.humanInputRequest,A=e==null?void 0:e.pendingHumanInput,ae=(b==null?void 0:b.displayName)??(A==null?void 0:A.displayName),de=(b==null?void 0:b.phaseName)??(e==null?void 0:e.pausedPhaseName)??void 0;return ae?s.jsx("div",{className:"px-6 py-4",children:s.jsx(ur,{displayName:ae,renderedPrompt:(A==null?void 0:A.renderedPrompt)??"",pausedPhaseName:de,requestedAt:A==null?void 0:A.requestedAt,turnTimeout:Y,isSubmitting:G,onSubmit:xe=>{const Ie=(A==null?void 0:A.memberId)??(b==null?void 0:b.memberId);se&&Ie&&(y==null||y(se,Ie,xe))}})}):null})(),ce&&s.jsx("div",{className:"flex items-center gap-2 p-3 rounded-lg bg-destructive/5 border border-destructive/20",children:s.jsxs("span",{className:"text-sm text-destructive font-medium",children:["⚠️ ",ce]})})]})]})}function _o(e,n){if(!e)return;const a=Object.entries(e).filter(([,l])=>typeof l=="number"&&l>0).sort(([,l],[,o])=>o-l).map(([l,o])=>`${(n==null?void 0:n[l])??l}: ${Ys(o)}`);return a.length?a.join(` -`):void 0}const So={ROUND_TABLE:["Opinion","Discussion","Synthesis"],PEER_REVIEW:["Opinion","Critique","Revision","Synthesis"],DEVIL_ADVOCATE:["Opinion","Challenge","Defense","Synthesis"],DELPHI:["Independent","Anonymous Sharing","Revised","Synthesis"],DEBATE:["Pro Opening","Con Opening","Rebuttals","Judgment"],TASK_FORCE:["Plan","Execute","Verify","Synthesize"],NEGOTIATION:["Positions","Proposals","Bargaining","Arbitration","Synthesis"]};function wo(e){return new Promise((n,a)=>{const l=new FileReader;l.onerror=()=>a(l.error??new Error("read failed")),l.onload=()=>{const o=String(l.result??""),p=o.indexOf(",");n(p>=0?o.slice(p+1):o)},l.readAsDataURL(e)})}function Gs(e){return`${e.name}-${e.size}-${e.lastModified}`}function Io(e){if(e<1024)return`${e} B`;const n=e/1024;return n<1024?`${Math.round(n)} KB`:`${(n/1024).toFixed(n/1024<10?1:0)} MB`}const zs=40,Gt=120;function Co({onSubmit:e,isLoading:n,disabled:a,mode:l="new",disabledMessage:o}){const{t:p}=Ve(),[c,F]=h.useState(""),[y,G]=h.useState(!1),[Y,T]=h.useState([]),[U,Te]=h.useState(!1),fe=h.useRef(null),Ne=h.useRef(null),q=h.useRef(null),j=h.useRef([]),I=h.useRef(Promise.resolve()),te=l==="new",P=h.useCallback(()=>{const f=fe.current;if(!f)return;f.style.height="auto";const D=Math.min(Math.max(f.scrollHeight,zs),Gt);f.style.height=`${D}px`,f.style.overflowY=f.scrollHeight>Gt?"auto":"hidden"},[]);h.useEffect(()=>{P()},[c,P]),h.useEffect(()=>{te||(j.current=[],T([]))},[te]),h.useEffect(()=>{j.current=Y},[Y]),h.useEffect(()=>{if(y&&Ne.current){const f=setTimeout(()=>{var D;return(D=Ne.current)==null?void 0:D.focus()},50);return()=>clearTimeout(f)}},[y]);const z=h.useCallback(async f=>{if(!f.length)return;const D=()=>p("groups.attachmentLimit","At most {{max}} attachments per discussion",{max:gs}),le=j.current,ge=gs-le.length;if(ge<=0){Z.error(D());return}const oe=new Set(le.map(V=>V.id)),he=f.filter(V=>{const Se=Gs(V);return oe.has(Se)?!1:(oe.add(Se),!0)}),ce=he.slice(0,ge);ce.lengthV+Se.sizeBytes,0),O=!1;for(const V of ce){if(V.size>Ln){Z.error(p("groups.attachmentTooLarge","{{name}} is too large to attach",{name:V.name}));continue}if(_e+V.size>Pn){O||(Z.error(p("groups.attachmentTotalTooLarge","Attachments exceed the total size limit")),O=!0);continue}try{se.push({id:Gs(V),fileName:V.name,mimeType:V.type||null,data:await wo(V),sizeBytes:V.size}),_e+=V.size}catch{Z.error(p("groups.attachmentReadFailed","Could not read {{name}}",{name:V.name}))}}se.length&&(j.current=[...j.current,...se],T(j.current))},[p]),v=h.useCallback(f=>{Te(!0);const D=I.current.then(()=>z(f)).finally(()=>{I.current===D&&Te(!1)});return I.current=D,D},[z]),E=h.useCallback(f=>{const D=vn(f);!D.length||!te||a||n||(f.preventDefault(),v(D))},[te,a,n,v]),{isDragOver:H,dropHandlers:w}=Mn(te&&!a&&!n,f=>{v(f)}),d=c.length,R=d>vt;function K(f){if(f==null||f.preventDefault(),R){Z.error(p("groups.questionTooLong","A question can be at most {{max}} characters",{max:vt.toLocaleString()}));return}if(c.trim()&&!n&&!a){const D=te&&Y.length?Y.map(({fileName:le,mimeType:ge,data:oe})=>({fileName:le,mimeType:ge,data:oe})):null;D?e(c.trim(),D):e(c.trim()),F(""),T([]),G(!1)}}return s.jsxs(s.Fragment,{children:[s.jsxs("form",{onSubmit:K,className:"relative flex flex-wrap items-end gap-2 p-3 pb-5 border-t border-border bg-card/80 backdrop-blur-sm shrink-0",...w,children:[H&&s.jsx(Fn,{}),Y.length>0&&s.jsx("ul",{className:"flex w-full flex-wrap gap-1.5","data-testid":"discussion-attachments",children:Y.map(f=>s.jsxs("li",{className:"flex items-center gap-1 rounded-md border border-border bg-secondary/40 px-2 py-0.5 text-[11px] text-foreground",children:[s.jsx(hs,{className:"h-2.5 w-2.5 shrink-0 text-muted-foreground","aria-hidden":"true"}),s.jsx("span",{className:"max-w-[12rem] truncate",title:f.fileName??void 0,children:f.fileName}),s.jsx("span",{className:"tabular-nums text-muted-foreground",children:Io(f.sizeBytes)}),s.jsx("button",{type:"button",onClick:()=>T(D=>D.filter(le=>le.id!==f.id)),"aria-label":p("groups.removeAttachment","Remove {{name}}",{name:f.fileName}),className:"rounded p-0.5 text-muted-foreground transition-colors hover:bg-secondary hover:text-foreground",children:s.jsx(qs,{className:"h-2.5 w-2.5"})})]},f.id))}),te&&s.jsxs(s.Fragment,{children:[s.jsx("input",{ref:q,type:"file",multiple:!0,className:"hidden",onChange:f=>{const D=Array.from(f.target.files??[]);v(D),f.target.value=""},"data-testid":"discussion-file-input"}),s.jsx(je,{type:"button",variant:"outline",size:"icon",className:"shrink-0",disabled:a||n||U,onClick:()=>{var f;return(f=q.current)==null?void 0:f.click()},"aria-label":p("groups.attachFiles","Attach files"),title:p("groups.attachFiles","Attach files"),"data-testid":"discussion-attach-btn",children:U?s.jsx(Pt,{className:"h-4 w-4 animate-spin"}):s.jsx(hs,{className:"h-4 w-4"})})]}),s.jsxs("div",{className:"relative flex-1 min-w-0",children:[s.jsx("textarea",{ref:fe,autoFocus:!0,value:c,onChange:f=>F(f.target.value),placeholder:a&&o?o:l==="continue"?p("groups.continuePlaceholder","Continue this discussion with a follow-up…"):p("groups.askQuestion","Ask a question for the group to discuss…"),className:"w-full resize-none rounded-lg border border-input bg-background px-3 py-2 pe-8 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring transition-shadow",style:{minHeight:zs,maxHeight:Gt},rows:1,disabled:a||n,onKeyDown:f=>{f.key==="Enter"&&!f.shiftKey&&(f.preventDefault(),K())},onPaste:E,"data-testid":"discussion-input"}),s.jsx("button",{type:"button",onClick:()=>G(!0),disabled:a||n,"aria-label":p("groups.expandInput","Expand input"),"aria-expanded":y,className:"absolute end-2 inset-y-0 my-auto h-fit rounded p-0.5 text-muted-foreground hover:text-foreground hover:bg-secondary/50 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",title:p("groups.expandInput","Expand input"),children:s.jsx(Sr,{className:"h-3.5 w-3.5"})})]}),s.jsxs(je,{type:"submit",disabled:!c.trim()||n||a||R,className:"shrink-0","data-testid":"start-discussion-btn",children:[n?s.jsx(Pt,{className:"h-4 w-4 animate-spin"}):l==="continue"?s.jsx(Es,{className:"h-4 w-4"}):s.jsx(xs,{className:"h-4 w-4"}),s.jsx("span",{className:"hidden sm:inline ms-1",children:l==="continue"?p("groups.continueButton","Continue"):p("groups.startDiscussion","Discuss")})]}),c.length>0&&s.jsxs("p",{className:"absolute -bottom-4 start-0 text-[10px] text-muted-foreground/60",children:["↵ ",p("groups.enterToSend","Enter to send")," · ⇧↵ ",p("groups.shiftEnter","new line")]})]}),s.jsx(Tr,{open:y,onClose:()=>G(!1),title:p("groups.composeQuestion","Compose Question"),maxWidth:"max-w-2xl",testId:"discussion-input-dialog",children:s.jsxs("div",{className:"p-5 space-y-3",children:[s.jsx("textarea",{ref:Ne,value:c,onChange:f=>F(f.target.value),placeholder:l==="continue"?p("groups.continuePlaceholder","Continue this discussion with a follow-up…"):p("groups.askQuestion","Ask a question for the group to discuss…"),className:"w-full resize-y rounded-lg border border-input bg-background px-4 py-3 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring transition-shadow min-h-[200px]",rows:8,disabled:n||a,onKeyDown:f=>{f.key==="Enter"&&(f.ctrlKey||f.metaKey)&&(f.preventDefault(),K())},onPaste:E,"data-testid":"discussion-input-expanded"}),s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsx("p",{className:"text-xs text-muted-foreground",children:p("groups.submitShortcut","Ctrl+Enter to submit")}),d>0&&s.jsx("p",{className:C("text-xs tabular-nums",R?"font-medium text-destructive":"text-muted-foreground"),"data-testid":"discussion-char-count",children:R?p("groups.charactersOverLimit","{{current}} / {{max}} characters",{current:d.toLocaleString(),max:vt.toLocaleString()}):`${d.toLocaleString()} ${p("groups.characters","characters")}`})]}),s.jsxs("div",{className:"flex justify-end gap-2 pt-2 border-t border-border",children:[s.jsx(je,{variant:"outline",onClick:()=>G(!1),children:p("common.cancel","Cancel")}),s.jsxs(je,{onClick:()=>K(),disabled:!c.trim()||n||a||R,children:[n?s.jsx(Pt,{className:"h-4 w-4 animate-spin me-1"}):l==="continue"?s.jsx(Es,{className:"h-4 w-4 me-1"}):s.jsx(xs,{className:"h-4 w-4 me-1"}),l==="continue"?p("groups.continueButton","Continue"):p("groups.startDiscussion","Discuss")]})]})]})})]})}const sn={label:"Created",color:"text-muted-foreground",dot:"bg-muted-foreground"},Ro={COMPLETED:{label:"Completed",color:"text-emerald-500",dot:"bg-emerald-500"},IN_PROGRESS:{label:"In Progress",color:"text-amber-500",dot:"bg-amber-500"},SYNTHESIZING:{label:"Synthesizing",color:"text-amber-500",dot:"bg-amber-500"},FAILED:{label:"Failed",color:"text-destructive",dot:"bg-destructive"},CREATED:sn,AWAITING_APPROVAL:{label:"Awaiting Approval",color:"text-orange-500",dot:"bg-orange-500"},AWAITING_HUMAN_INPUT:{label:"Awaiting Human Input",color:"text-primary",dot:"bg-primary"},CANCELLED:{label:"Cancelled",color:"text-muted-foreground",dot:"bg-muted-foreground"},ERROR:{label:"Error",color:"text-destructive",dot:"bg-destructive"}};function zt(e,n){if(ar(e)){if(e.status===409)return n("groups.actionConflict","Another operation is still in progress, or this discussion no longer accepts that action. Please retry.");if(e.status===502)return n("groups.actionUnreachable","A member agent could not be reached. Please try again.");if(e.status===504)return n("groups.actionTimeout","A member agent did not respond in time. Please try again.")}return Ks(e)}function ta(){var xe,Ie;const{id:e}=Un(),n=Hn(),[a]=Bn(),l=h.useMemo(()=>a.get("version")?Number(a.get("version")):1,[a]),{t:o}=Ve(),p=Gn(),[c,F]=h.useState(null),[y,G]=h.useState(!0),[Y,T]=h.useState(!0),[U,Te]=h.useState(!1),[fe,Ne]=h.useState(!1),[q,j]=h.useState(null),{data:I,isLoading:te,isError:P,refetch:z}=zn(e||"",l),{data:v,isLoading:E}=Vn(e||""),{data:H,isLoading:w}=Wn(e||"",c||""),{streamState:d,startStream:R,continueStream:K,approveAndStream:f,abortStream:D,resetStream:le}=$n(),ge=Yn(),oe=qn(),he=Kn(),ce=h.useRef(null);h.useEffect(()=>{!c&&!d.isStreaming&&!d.conversationId&&v&&v.length>0&&F(v[0].id)},[v,c,d.isStreaming,d.conversationId]);const se=h.useMemo(()=>d.isStreaming?"disabled":c?H&&(H.availableActions??[]).includes("continue")?"continue":"disabled":"new",[d.isStreaming,c,H]),_e=h.useMemo(()=>{if(d.isStreaming)return o("groups.inputDisabledInProgress","Discussion in progress…");if(!c)return;if(!H)return o("common.loading","Loading…");const m=H.state;if(m==="CLOSED")return o("groups.inputDisabledClosed","This discussion is closed");if(m==="FAILED"||m==="CANCELLED")return o("groups.inputDisabledEnded","This discussion has ended");if(m==="AWAITING_APPROVAL")return o("groups.inputDisabledApproval","Awaiting approval…");if(m==="AWAITING_HUMAN_INPUT")return o("groups.inputDisabledHumanTurn","Awaiting a member's turn…");if(m==="IN_PROGRESS"||m==="SYNTHESIZING")return o("groups.inputDisabledInProgress","Discussion in progress…");if(m==="COMPLETED")return o("groups.inputDisabledCompleted","Discussion completed")},[d.isStreaming,c,H,o]),O=h.useCallback((m,_)=>{e&&(se==="continue"&&c?(K(e,c,m),Z.info(o("groups.continueStreamStarted","Continuation started — streaming live"))):(ce.current=null,F(null),R(e,m,_),Z.info(o("groups.discussionStarted","Discussion started — streaming live"))))},[e,se,c,K,R,o]),V=h.useCallback(()=>{le(),ce.current=null,F(null)},[le]),Se=h.useCallback((m,_,Q,He)=>{e&&(ce.current=_,F(null),f(e,m,{decision:{verdict:_,note:Q},taskApprovals:He}))},[e,f]);h.useEffect(()=>{const m=ce.current;m&&(d.hitlResume?(Z.success(m==="APPROVED"?o("hitl.approved","Approved"):o("hitl.rejected","Rejected")),p.invalidateQueries({queryKey:["all-group-pending-approvals"]}),ce.current=null):d.state==="FAILED"&&(Z.error(d.error||o("common.error","Something went wrong")),ce.current=null))},[d.hitlResume,d.state,d.error,p,o]);const it=h.useCallback((m,_,Q)=>{e&&he.mutate({groupId:e,gcId:m,memberId:_,content:Q},{onSuccess:()=>{Z.success(o("groups.humanTurnSubmitted","Your response was recorded"))},onError:He=>{Z.error(zt(He,o))}})},[e,he,o]),We=h.useCallback(m=>{e&&oe.mutate({groupId:e,gcId:m},{onSuccess:()=>{Z.success(o("hitl.discussionCancelled","Discussion cancelled")),p.invalidateQueries({queryKey:["groupConversations",e]})},onError:_=>{Z.error(Ks(_))}})},[e,oe,p,o]),$e=h.useCallback(()=>{e&&p.invalidateQueries({queryKey:["groupConversations",e]})},[e,p]),ke=bs({mutationFn:({gcId:m,targetAgentId:_,question:Q})=>ir(e,m,Q,_),onSuccess:()=>{Z.success(o("groups.followupSent","Follow-up sent")),$e()},onError:m=>Z.error(zt(m,o))}),we=bs({mutationFn:({gcId:m})=>lr(e,m),onSuccess:()=>{Z.success(o("groups.discussionClosed","Discussion closed")),$e()},onError:m=>Z.error(zt(m,o))}),Fe=h.useCallback((m,_)=>{!e||!c||ke.mutate({gcId:c,targetAgentId:m,question:_})},[e,c,ke]),Ue=h.useCallback(()=>{!e||!c||we.mutate({gcId:c})},[e,c,we]),L=ke.isPending||we.isPending;h.useEffect(()=>{d.conversationId&&e&&(d.state==="IN_PROGRESS"||d.state==="COMPLETED"||d.state==="AWAITING_APPROVAL"||d.state==="AWAITING_HUMAN_INPUT")&&p.invalidateQueries({queryKey:["groupConversations",e]}),(d.state==="COMPLETED"||d.state==="AWAITING_APPROVAL"||d.state==="AWAITING_HUMAN_INPUT")&&d.conversationId&&F(d.conversationId)},[d.state,d.conversationId,e,p]);function Le(m){e&&ge.mutate({groupId:e,conversationId:m},{onSuccess:()=>{Z.success(o("common.delete")+" ✓"),c===m&&F(null)}})}function k(m){d.isStreaming&&D(),ce.current=null,F(m),Ne(!1)}if(te)return s.jsxs("div",{className:"space-y-4",children:[s.jsx(ze,{className:"h-8 w-1/3"}),s.jsx(ze,{className:"h-[70vh] w-full"})]});if(P||!I)return s.jsxs("div",{className:"space-y-4",children:[s.jsx(As,{to:"/manage/groups",label:o("groups.backToGroups","Back to Groups")}),s.jsx(Nr,{message:o("common.error"),onRetry:()=>z(),retryLabel:o("common.retry")})]});const Ae=Xn(I.style,o),B=Et[I.style]??Et.ROUND_TABLE,Ee=I.members?I:{...I,members:[]},b=d.isStreaming||d.state!=="CREATED"&&!c,A=!b&&w&&d.state!=="CREATED"&&c===d.conversationId,ae=(v==null?void 0:v.length)??0,de=s.jsx(s.Fragment,{children:E?s.jsxs("div",{className:"p-3 space-y-2",children:[s.jsx(ze,{className:"h-12 w-full"}),s.jsx(ze,{className:"h-12 w-full"})]}):ae>0?s.jsx("div",{className:"p-1 space-y-0.5",children:v.map(m=>s.jsxs("div",{role:"button",tabIndex:0,onClick:()=>k(m.id),onKeyDown:_=>{(_.key==="Enter"||_.key===" ")&&_.target===_.currentTarget&&(_.preventDefault(),k(m.id))},className:C("w-full text-start rounded-lg px-3 py-2 transition-all group/item cursor-pointer",d.isStreaming&&m.id===d.conversationId||c===m.id&&!b?"bg-primary/10 border border-primary/30":"hover:bg-secondary/50 border border-transparent"),"aria-current":d.isStreaming&&m.id===d.conversationId||c===m.id&&!b?!0:void 0,"data-testid":`discussion-item-${m.id}`,children:[s.jsx("p",{className:"text-xs font-medium text-foreground line-clamp-2",children:m.originalQuestion}),s.jsxs("div",{className:"flex items-center gap-1.5 mt-1",children:[(()=>{const _=Ro[m.state]??sn,Q=d.isStreaming&&m.id===d.conversationId;return s.jsxs("span",{className:C("text-[10px] font-medium flex items-center gap-1",_.color),"aria-live":Q?"polite":void 0,"aria-label":Q?o("groups.liveDiscussion","Live"):o(`groups.state.${m.state}`,_.label),"data-testid":Q?"discussion-live-badge":`discussion-state-${m.id}`,children:[s.jsx("span",{className:C("h-1.5 w-1.5 rounded-full shrink-0",Q?"bg-current animate-pulse":_.dot),"data-testid":`state-dot-${m.id}`}),Q?o("groups.liveDiscussion","Live"):o(`groups.state.${m.state}`,_.label)]})})(),s.jsx("span",{className:"text-[10px] text-muted-foreground",children:Kt(m.created,"date")}),s.jsx("button",{onClick:_=>{_.stopPropagation(),Le(m.id)},className:"ms-auto opacity-0 group-hover/item:opacity-100 rounded p-0.5 text-muted-foreground hover:text-destructive transition-all",title:o("common.delete"),"aria-label":o("common.delete"),children:s.jsx(Qn,{className:"h-3 w-3"})}),(m.state==="AWAITING_APPROVAL"||m.state==="AWAITING_HUMAN_INPUT"||m.state==="IN_PROGRESS")&&s.jsx("button",{onClick:_=>{_.stopPropagation(),j(m.id)},className:"opacity-0 group-hover/item:opacity-100 rounded p-0.5 text-muted-foreground hover:text-destructive transition-all",title:o("hitl.cancelDiscussion","Cancel discussion"),"aria-label":o("hitl.cancelDiscussion","Cancel discussion"),disabled:oe.isPending,children:s.jsx(qs,{className:"h-3 w-3"})})]})]},m.id))}):s.jsxs("div",{className:"flex flex-col items-center justify-center py-8 px-4 text-center",children:[s.jsx(Zs,{className:"h-8 w-8 text-muted-foreground/20 mb-2"}),s.jsx("p",{className:"text-xs text-muted-foreground",children:o("groups.noDiscussions","No discussions yet")}),s.jsx("p",{className:"text-[10px] text-muted-foreground/50 mt-1",children:o("groups.askBelow","Ask a question below to start")})]})});return s.jsxs("div",{className:C("flex flex-col",U?"fixed inset-0 z-50 bg-background p-4":"h-full min-h-0"),children:[s.jsxs("div",{className:"flex items-center gap-3 pb-3 border-b border-border shrink-0",children:[!U&&s.jsx(As,{to:"/manage/groups",label:""}),s.jsx(Vt,{className:"h-6 w-6 text-primary shrink-0"}),s.jsxs("div",{className:"flex-1 min-w-0",children:[s.jsx("h1",{className:"text-xl font-bold text-foreground truncate",children:I.name}),I.description&&s.jsx("p",{className:"text-xs text-muted-foreground truncate",children:I.description})]}),s.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[Ae&&s.jsxs(Oe,{variant:"outline",className:C("hidden sm:inline-flex",B.flowText),title:Ae.flow,children:[Ae.icon," ",Ae.label]}),s.jsxs(Oe,{variant:"secondary",children:[s.jsx(Vt,{className:"me-1 h-3 w-3"}),Ee.members.length]}),s.jsx(Do,{historyOpen:fe,setHistoryOpen:Ne,conversationCount:ae,isFullscreen:U,onNewDiscussion:V,children:de}),!U&&!Y&&s.jsx(je,{variant:"outline",size:"sm",onClick:()=>T(!0),title:o("groups.showDiscussions","Show discussions panel"),"aria-label":o("groups.showDiscussions","Show discussions panel"),className:"max-lg:hidden",children:s.jsx(Zn,{className:"h-4 w-4"})}),!U&&!y&&s.jsx(je,{variant:"outline",size:"sm",onClick:()=>G(!0),title:o("groups.showConfig","Show config panel"),"aria-label":o("groups.showConfig","Show config panel"),className:"max-xl:hidden",children:s.jsx(Er,{className:"h-4 w-4"})}),!U&&s.jsxs(je,{variant:"outline",size:"sm",onClick:()=>n(`/manage/groups/${e}/workspace?version=${l}`),title:o("groupWorkspace.title","Standing Team Workspace"),"data-testid":"open-workspace-btn",children:[s.jsx(Jn,{className:"h-4 w-4"}),s.jsx("span",{className:"hidden sm:inline",children:o("groupWorkspace.navLabel","Workspace")})]}),s.jsx(je,{variant:"outline",size:"sm",onClick:()=>Te(!U),title:U?o("groups.exitFullscreen","Exit fullscreen"):o("groups.enterFullscreen","Fullscreen"),children:U?s.jsx(er,{className:"h-4 w-4"}):s.jsx(tr,{className:"h-4 w-4"})})]})]}),s.jsxs("div",{className:"flex flex-1 min-h-0 mt-2 gap-2",children:[!U&&Y&&s.jsxs("div",{className:"w-64 shrink-0 flex flex-col rounded-xl border border-border bg-card overflow-hidden max-lg:hidden",children:[s.jsxs("div",{className:"p-3 border-b border-border flex items-center justify-between",children:[s.jsxs("h3",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground flex items-center gap-1.5",children:[s.jsx(Xs,{className:"h-3 w-3"}),o("groups.discussions","Discussions")]}),s.jsxs("div",{className:"flex items-center gap-1",children:[s.jsxs("button",{type:"button",onClick:V,className:"flex items-center gap-0.5 rounded px-1.5 py-0.5 text-[10px] font-medium text-primary hover:bg-primary/10 transition-colors",title:o("groups.newDiscussion","New Discussion"),"aria-label":o("groups.newDiscussion","New Discussion"),"data-testid":"new-discussion-btn",children:[s.jsx(Qs,{className:"h-3 w-3"}),o("groups.newShort","New")]}),s.jsx("button",{type:"button",onClick:()=>T(!1),className:"p-0.5 rounded hover:bg-secondary/50 text-muted-foreground hover:text-foreground transition-colors",title:o("groups.hideDiscussions","Hide discussions panel"),"aria-label":o("groups.hideDiscussions","Hide discussions panel"),children:s.jsx(sr,{className:"h-3.5 w-3.5"})})]})]}),s.jsx("div",{className:"flex-1 overflow-y-auto",children:de})]}),s.jsxs("div",{className:"flex-1 min-w-0 rounded-xl border border-border bg-card overflow-hidden flex flex-col",children:[d.state==="FAILED"&&d.errorKind==="config_drift"&&s.jsxs("div",{className:"flex items-start gap-2 border-b border-amber-500/30 bg-amber-500/5 px-4 py-2.5","data-testid":"group-drift-banner",children:[s.jsx(nr,{className:"mt-0.5 h-4 w-4 shrink-0 text-amber-500","aria-hidden":"true"}),s.jsxs("div",{className:"text-xs",children:[s.jsx("p",{className:"font-medium text-amber-600 dark:text-amber-400",children:o("groups.driftTitle","Group configuration changed while paused")}),s.jsx("p",{className:"mt-0.5 text-muted-foreground",children:o("groups.driftRecovery","The resume was aborted because the group's phases changed. The discussion is still awaiting approval — fix the configuration (Edit, in the Configuration panel) and approve again, or cancel it.")})]})]}),s.jsx("div",{className:"flex-1 min-h-0 overflow-hidden",children:s.jsx(yo,{conversation:b?null:H??null,streamState:b||A?d:void 0,isLoading:w&&!!c&&!A,discussionStyle:I.style,preConfiguredTasks:I.tasks,onApprove:Se,onCancelDiscussion:We,isDeciding:oe.isPending,onSubmitHumanInput:it,isSubmittingHumanInput:he.isPending,humanTurnTimeout:(xe=I.humanMemberConfig)==null?void 0:xe.turnTimeout})}),!b&&H&&(((Ie=H.availableActions)==null?void 0:Ie.length)??0)>0&&s.jsx(dr,{availableActions:H.availableActions,members:Ee.members,isPending:L,onFollowup:Fe,onCloseDiscussion:Ue}),s.jsx(Co,{onSubmit:O,isLoading:d.isStreaming,mode:se==="continue"?"continue":"new",disabled:se==="disabled",disabledMessage:_e})]}),y&&!U&&s.jsxs("div",{className:"w-72 shrink-0 rounded-xl border border-border bg-card overflow-hidden flex flex-col max-xl:hidden",children:[s.jsxs("div",{className:"p-3 border-b border-border flex items-center justify-between",children:[s.jsxs("h3",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground flex items-center gap-1.5",children:[s.jsx(rr,{className:"h-3 w-3"}),o("groups.configuration","Configuration")]}),s.jsx("button",{type:"button",onClick:()=>G(!1),className:"p-0.5 rounded hover:bg-secondary/50 text-muted-foreground hover:text-foreground transition-colors",title:o("groups.hideConfig","Hide config panel"),"aria-label":o("groups.hideConfig","Hide config panel"),children:s.jsx(Ar,{className:"h-3.5 w-3.5"})})]}),s.jsx(pr,{config:Ee,groupId:e,groupVersion:l,className:"flex-1 min-h-0"},e)]})]}),s.jsx(or,{open:q!==null,onOpenChange:m=>{m||j(null)},title:o("hitl.confirmCancelGroupTitle","Cancel discussion?"),description:o("hitl.confirmCancelGroupDescription","Cancel this discussion? Any in-progress work is aborted."),confirmLabel:o("hitl.confirmCancelGroupButton","Cancel discussion"),cancelLabel:o("hitl.confirmDismiss","Go back"),variant:"destructive",isPending:oe.isPending,onConfirm:()=>{q&&We(q),j(null)}})]})}function Do({historyOpen:e,setHistoryOpen:n,conversationCount:a,isFullscreen:l,onNewDiscussion:o,children:p}){const{t:c}=Ve(),F=h.useRef(null);return h.useEffect(()=>{if(!e)return;function y(G){F.current&&!F.current.contains(G.target)&&n(!1)}return document.addEventListener("mousedown",y),()=>document.removeEventListener("mousedown",y)},[e,n]),s.jsxs("div",{ref:F,className:C("relative",!l&&"lg:hidden"),children:[s.jsxs(je,{variant:"outline",size:"sm",className:"relative",onClick:()=>n(!e),children:[s.jsx(yr,{className:"h-4 w-4"}),a>0&&s.jsx("span",{className:"absolute -top-1 -end-1 flex h-4 w-4 items-center justify-center rounded-full bg-primary text-[9px] font-bold text-primary-foreground",children:a})]}),e&&s.jsxs("div",{className:"absolute end-0 top-full mt-1 z-50 w-72 rounded-xl border border-border bg-card shadow-lg max-h-80 overflow-y-auto animate-in fade-in-0 zoom-in-95 duration-150",children:[s.jsxs("div",{className:"p-3 border-b border-border flex items-center justify-between",children:[s.jsxs("h3",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground flex items-center gap-1.5",children:[s.jsx(Xs,{className:"h-3 w-3"}),c("groups.discussions","Discussions")]}),o&&s.jsxs("button",{type:"button",onClick:()=>{o(),n(!1)},className:"flex items-center gap-0.5 rounded px-1.5 py-0.5 text-[10px] font-medium text-primary hover:bg-primary/10 transition-colors",title:c("groups.newDiscussion","New Discussion"),"aria-label":c("groups.newDiscussion","New Discussion"),"data-testid":"new-discussion-btn-mobile",children:[s.jsx(Qs,{className:"h-3 w-3"}),c("groups.newShort","New")]})]}),p]})]})}export{ta as GroupDetailPage}; + */const Rr=[["circle",{cx:"12",cy:"8",r:"5",key:"1hypcn"}],["path",{d:"M20 21a8 8 0 0 0-16 0",key:"rfgkzh"}]],Dr=At("user-round",Rr),Or={OPINION:"💬",CRITIQUE:"🔍",REVISION:"✏️",CHALLENGE:"⚔️",DEFENSE:"🛡️",ARGUE:"📢",REBUTTAL:"↩️",SYNTHESIS:"⭐",PLAN:"📋",EXECUTE:"⚡",VERIFY:"✅",VOTE:"🗳️",PROPOSAL:"🤝",BARGAIN:"🔄",RETRO:"🪞"};function jr({name:e,type:n,turnOrder:a,entryCount:l,isActive:o,defaultExpanded:m=!0,convergence:c,children:F}){const{t:y}=Ve(),[G,Y]=h.useState(m),T=Or[n]||"📋";return s.jsxs("div",{className:C("rounded-xl border",n==="SYNTHESIS"?"border-primary/30 bg-primary/5":"border-border bg-card",o&&"ring-2 ring-primary/30"),"data-testid":`phase-section-${e.replace(/\s+/g,"-").toLowerCase()}`,children:[s.jsxs("button",{onClick:()=>Y(!G),className:"flex w-full items-center gap-3 p-3 text-start transition-colors hover:bg-secondary/30 rounded-t-xl",children:[G?s.jsx(qt,{className:"h-4 w-4 shrink-0 text-muted-foreground"}):s.jsx(Nn,{className:"h-4 w-4 shrink-0 text-muted-foreground"}),s.jsx("span",{className:"text-base",children:T}),s.jsx("span",{className:"text-sm font-semibold text-foreground flex-1",children:e}),s.jsxs("div",{className:"flex items-center gap-2",children:[a==="PARALLEL"&&s.jsxs(Oe,{variant:"outline",className:"text-[10px] px-1.5 py-0",children:[s.jsx(En,{className:"me-0.5 h-2.5 w-2.5"})," Parallel"]}),s.jsxs(Oe,{variant:"secondary",className:"text-[10px] px-1.5 py-0",children:[s.jsx(Vt,{className:"me-0.5 h-2.5 w-2.5"})," ",l]})]})]}),c&&s.jsxs("div",{className:C("flex items-start gap-2 border-t px-3 py-2",c.converged?"border-violet-500/30 bg-violet-500/5":"border-border bg-secondary/20"),"data-testid":`phase-convergence-${c.phaseIndex}`,children:[s.jsx(cr,{className:"mt-0.5 h-3 w-3 shrink-0 text-violet-500","aria-hidden":"true"}),s.jsxs("div",{className:"min-w-0 text-[11px] text-muted-foreground",children:[s.jsx("span",{className:"font-medium text-foreground",children:c.converged?y("groups.convergenceReached","Converged"):y("groups.convergenceChecked","Convergence check")}),c.agreementScore!=null&&s.jsx("span",{className:"ms-1.5 tabular-nums",children:y("groups.convergenceScore","agreement {{score}}",{score:c.agreementScore.toFixed(2)})}),c.repeatsSkipped!=null&&c.repeatsSkipped>0&&s.jsx("span",{className:"ms-1.5",children:y("groups.convergenceSkipped",{defaultValue:"· {{count}} further round skipped",defaultValue_other:"· {{count}} further rounds skipped",count:c.repeatsSkipped})}),c.reason&&s.jsx("p",{className:"mt-0.5",children:c.reason})]})]}),G&&s.jsx("div",{className:"border-t border-border p-2 space-y-1",children:F})]})}/*! @license DOMPurify 3.4.13 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.13/LICENSE */function ys(e,n){(n==null||n>e.length)&&(n=e.length);for(var a=0,l=Array(n);a2?l-2:0),m=2;m1?a-1:0),o=1;o"u"?null:X(BigInt.prototype.toString),Rs=typeof Symbol>"u"?null:X(Symbol.prototype.toString),ee=X(Object.prototype.hasOwnProperty),ot=X(Object.prototype.toString),J=X(RegExp.prototype.test),Ge=$r(TypeError);function X(e){return function(n){n instanceof RegExp&&(n.lastIndex=0);for(var a=arguments.length,l=new Array(a>1?a-1:0),o=1;o2&&arguments[2]!==void 0?arguments[2]:at;if(_s&&_s(e,null),!Me(n))return e;let l=n.length;for(;l--;){let o=n[l];if(typeof o=="string"){const m=a(o);m!==o&&(Fr(n)||(n[l]=m),o=m)}e[o]=!0}return e}function Yr(e){for(let n=0;n/g),eo=re(/\${[\w\W]*/g),to=re(/^data-[\-\w.\u00B7-\uFFFF]+$/),so=re(/^aria-[\-\w]+$/),Ls=re(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),no=re(/^(?:\w+script|data):/i),ro=re(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),oo=re(/^html$/i),ao=re(/^[a-z][.\w]*(-[.\w]+)+$/i),Ps=re(/<[/\w!]/g),vs=re(/<[/\w]/g),io=re(/<\/no(script|embed|frames)/i),lo=re(/\/>/i),be={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,processingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},co=function(){return typeof window>"u"?null:window},uo=function(n,a){if(typeof n!="object"||typeof n.createPolicy!="function")return null;let l=null;const o="data-tt-policy-suffix";a&&a.hasAttribute(o)&&(l=a.getAttribute(o));const m="dompurify"+(l?"#"+l:"");try{return n.createPolicy(m,{createHTML(c){return c},createScriptURL(c){return c}})}catch{return console.warn("TrustedTypes policy "+m+" could not be created."),null}},Ms=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},ve=function(n,a,l,o){return ee(n,a)&&Me(n[a])?S(o.base?ie(o.base):{},n[a],o.transform):l};function tn(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:co();const n=u=>tn(u);if(n.version="3.4.13",n.removed=[],!e||!e.document||e.document.nodeType!==be.document||!e.Element)return n.isSupported=!1,n;let a=e.document;const l=a,o=l.currentScript;e.DocumentFragment;const m=e.HTMLTemplateElement,c=e.Node,F=e.Element,y=e.NodeFilter,G=e.NamedNodeMap;G===void 0&&(e.NamedNodeMap||e.MozNamedAttrMap),e.HTMLFormElement;const Y=e.DOMParser,T=e.trustedTypes,U=F.prototype,Te=ye(U,"cloneNode"),fe=ye(U,"remove"),Ne=ye(U,"nextSibling"),q=ye(U,"childNodes"),j=ye(U,"parentNode"),I=ye(U,"shadowRoot"),te=ye(U,"attributes"),P=c&&c.prototype?ye(c.prototype,"nodeType"):null,z=c&&c.prototype?ye(c.prototype,"nodeName"):null,v=c&&c.prototype?ye(c.prototype,"ownerDocument"):null;if(typeof m=="function"){const u=a.createElement("template");u.content&&u.content.ownerDocument&&(a=u.content.ownerDocument)}let E,H="",w,d=!1,R=0;const K=function(){if(R>0)throw Ge('A configured TRUSTED_TYPES_POLICY callback (createHTML or createScriptURL) must not call DOMPurify.sanitize, as that causes infinite recursion. Do not pass a policy whose callbacks wrap DOMPurify as TRUSTED_TYPES_POLICY; see the "DOMPurify and Trusted Types" section of the README.')},f=function(t){K(),R++;try{return E.createHTML(t)}finally{R--}},D=function(t){K(),R++;try{return E.createScriptURL(t)}finally{R--}},le=function(){return d||(w=uo(T,o),d=!0),w},ge=a,oe=ge.implementation,he=ge.createNodeIterator,ce=ge.createDocumentFragment,se=ge.getElementsByTagName,_e=l.importNode;let O=Ms();n.isSupported=typeof Js=="function"&&typeof j=="function"&&oe&&oe.createHTMLDocument!==void 0;const V=Zr,Se=Jr,it=eo,We=to,$e=so,ke=no,we=ro,Fe=ao;let Ue=Ls,L=null;const Le=S({},[...Ds,...Ft,...Ut,...Ht,...Os]);let k=null;const Ae=S({},[...js,...Bt,...ks,...Tt]);let B=Object.seal(et(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Ee=null,b=null;const A=Object.seal(et(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}}));let ae=!0,de=!0,xe=!1,Ie=!0,p=!1,_=!0,Q=!1,He=!1,lt=null,ct=null,yt=!1,Ye=!1,ut=!1,dt=!1,Xt=!0,Qt=!1;const Zt="user-content-";let _t=!0,mt=!1,qe={},Ce=null;const St=S({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","selectedcontent","style","svg","template","thead","title","video","xmp"]);let Jt=null;const es=S({},["audio","video","img","source","image","track"]);let wt=null;const ts=S({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),pt="http://www.w3.org/1998/Math/MathML",ft="http://www.w3.org/2000/svg",Re="http://www.w3.org/1999/xhtml";let Ke=Re,It=!1,Ct=null;const nn=S({},[pt,ft,Re],Mt),ss=ne(["mi","mo","mn","ms","mtext"]);let Rt=S({},ss);const ns=ne(["annotation-xml"]);let Dt=S({},ns);const rn=S({},["title","style","font","a","script"]);let tt=null;const on=["application/xhtml+xml","text/html"],an="text/html";let W=null,Xe=null;const ln=a.createElement("form"),rs=function(t){return t instanceof RegExp||t instanceof Function},Ot=function(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(Xe&&Xe===t)return;(!t||typeof t!="object")&&(t={}),t=ie(t),tt=on.indexOf(t.PARSER_MEDIA_TYPE)===-1?an:t.PARSER_MEDIA_TYPE,W=tt==="application/xhtml+xml"?Mt:at,L=ve(t,"ALLOWED_TAGS",Le,{transform:W}),k=ve(t,"ALLOWED_ATTR",Ae,{transform:W}),Ct=ve(t,"ALLOWED_NAMESPACES",nn,{transform:Mt}),wt=ve(t,"ADD_URI_SAFE_ATTR",ts,{transform:W,base:ts}),Jt=ve(t,"ADD_DATA_URI_TAGS",es,{transform:W,base:es}),Ce=ve(t,"FORBID_CONTENTS",St,{transform:W}),Ee=ve(t,"FORBID_TAGS",ie({}),{transform:W}),b=ve(t,"FORBID_ATTR",ie({}),{transform:W}),qe=ee(t,"USE_PROFILES")?t.USE_PROFILES&&typeof t.USE_PROFILES=="object"?ie(t.USE_PROFILES):t.USE_PROFILES:!1,ae=t.ALLOW_ARIA_ATTR!==!1,de=t.ALLOW_DATA_ATTR!==!1,xe=t.ALLOW_UNKNOWN_PROTOCOLS||!1,Ie=t.ALLOW_SELF_CLOSE_IN_ATTR!==!1,p=t.SAFE_FOR_TEMPLATES||!1,_=t.SAFE_FOR_XML!==!1,Q=t.WHOLE_DOCUMENT||!1,Ye=t.RETURN_DOM||!1,ut=t.RETURN_DOM_FRAGMENT||!1,dt=t.RETURN_TRUSTED_TYPE||!1,yt=t.FORCE_BODY||!1,Xt=t.SANITIZE_DOM!==!1,Qt=t.SANITIZE_NAMED_PROPS||!1,_t=t.KEEP_CONTENT!==!1,mt=t.IN_PLACE||!1,Ue=Kr(t.ALLOWED_URI_REGEXP)?t.ALLOWED_URI_REGEXP:Ls,Ke=typeof t.NAMESPACE=="string"?t.NAMESPACE:Re,Rt=ee(t,"MATHML_TEXT_INTEGRATION_POINTS")&&t.MATHML_TEXT_INTEGRATION_POINTS&&typeof t.MATHML_TEXT_INTEGRATION_POINTS=="object"?ie(t.MATHML_TEXT_INTEGRATION_POINTS):S({},ss),Dt=ee(t,"HTML_INTEGRATION_POINTS")&&t.HTML_INTEGRATION_POINTS&&typeof t.HTML_INTEGRATION_POINTS=="object"?ie(t.HTML_INTEGRATION_POINTS):S({},ns);const r=ee(t,"CUSTOM_ELEMENT_HANDLING")&&t.CUSTOM_ELEMENT_HANDLING&&typeof t.CUSTOM_ELEMENT_HANDLING=="object"?ie(t.CUSTOM_ELEMENT_HANDLING):et(null);if(B=et(null),ee(r,"tagNameCheck")&&rs(r.tagNameCheck)&&(B.tagNameCheck=r.tagNameCheck),ee(r,"attributeNameCheck")&&rs(r.attributeNameCheck)&&(B.attributeNameCheck=r.attributeNameCheck),ee(r,"allowCustomizedBuiltInElements")&&typeof r.allowCustomizedBuiltInElements=="boolean"&&(B.allowCustomizedBuiltInElements=r.allowCustomizedBuiltInElements),re(B),p&&(de=!1),ut&&(Ye=!0),qe&&(L=S({},Os),k=et(null),qe.html===!0&&(S(L,Ds),S(k,js)),qe.svg===!0&&(S(L,Ft),S(k,Bt),S(k,Tt)),qe.svgFilters===!0&&(S(L,Ut),S(k,Bt),S(k,Tt)),qe.mathMl===!0&&(S(L,Ht),S(k,ks),S(k,Tt))),A.tagCheck=null,A.attributeCheck=null,ee(t,"ADD_TAGS")&&(typeof t.ADD_TAGS=="function"?A.tagCheck=t.ADD_TAGS:Me(t.ADD_TAGS)&&(L===Le&&(L=ie(L)),S(L,t.ADD_TAGS,W))),ee(t,"ADD_ATTR")&&(typeof t.ADD_ATTR=="function"?A.attributeCheck=t.ADD_ATTR:Me(t.ADD_ATTR)&&(k===Ae&&(k=ie(k)),S(k,t.ADD_ATTR,W))),ee(t,"ADD_URI_SAFE_ATTR")&&Me(t.ADD_URI_SAFE_ATTR)&&S(wt,t.ADD_URI_SAFE_ATTR,W),ee(t,"FORBID_CONTENTS")&&Me(t.FORBID_CONTENTS)&&(Ce===St&&(Ce=ie(Ce)),S(Ce,t.FORBID_CONTENTS,W)),ee(t,"ADD_FORBID_CONTENTS")&&Me(t.ADD_FORBID_CONTENTS)&&(Ce===St&&(Ce=ie(Ce)),S(Ce,t.ADD_FORBID_CONTENTS,W)),_t&&(L["#text"]=!0),Q&&S(L,["html","head","body"]),L.table&&(S(L,["tbody"]),delete Ee.tbody),t.TRUSTED_TYPES_POLICY){if(typeof t.TRUSTED_TYPES_POLICY.createHTML!="function")throw Ge('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof t.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw Ge('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');const i=E;E=t.TRUSTED_TYPES_POLICY;try{H=f("")}catch(g){throw E=i,g}}else t.TRUSTED_TYPES_POLICY===null?(E=void 0,H=""):(E===void 0&&(E=le()),E&&typeof H=="string"&&(H=f("")));ne&&ne(t),Xe=t},os=S({},[...Ft,...Ut,...Xr]),as=S({},[...Ht,...Qr]),cn=function(t,r,i){return r.namespaceURI===Re?t==="svg":r.namespaceURI===pt?t==="svg"&&(i==="annotation-xml"||Rt[i]):!!os[t]},un=function(t,r,i){return r.namespaceURI===Re?t==="math":r.namespaceURI===ft?t==="math"&&Dt[i]:!!as[t]},dn=function(t,r,i){return r.namespaceURI===ft&&!Dt[i]||r.namespaceURI===pt&&!Rt[i]?!1:!as[t]&&(rn[t]||!os[t])},mn=function(t){let r=j(t);(!r||!r.tagName)&&(r={namespaceURI:Ke,tagName:"template"});const i=at(t.tagName),g=at(r.tagName);return Ct[t.namespaceURI]?t.namespaceURI===ft?cn(i,r,g):t.namespaceURI===pt?un(i,r,g):t.namespaceURI===Re?dn(i,r,g):!!(tt==="application/xhtml+xml"&&Ct[t.namespaceURI]):!1},Pe=function(t){Je(n.removed,{element:t});try{j(t).removeChild(t)}catch{if(fe(t),!j(t))throw Ge("a node selected for removal could not be detached from its tree and cannot be safely returned; refusing to sanitize in place")}},gt=function(t){st(t);const r=q(t);if(r){const g=[];Ze(r,x=>{Je(g,x)}),Ze(g,x=>{try{fe(x)}catch{}})}const i=te(t);if(i)for(let g=i.length-1;g>=0;--g){const x=i[g],N=x&&x.name;if(typeof N=="string")try{t.removeAttribute(N)}catch{}}},Be=function(t,r){try{Je(n.removed,{attribute:r.getAttributeNode(t),from:r})}catch{Je(n.removed,{attribute:null,from:r})}if(r.removeAttribute(t),t==="is")if(Ye||ut)try{Pe(r)}catch{}else try{r.setAttribute(t,"")}catch{}},pn=function(t){const r=te(t);if(r)for(let i=r.length-1;i>=0;--i){const g=r[i],x=g&&g.name;if(!(typeof x!="string"||k[W(x)]))try{t.removeAttribute(x)}catch{}}},st=function(t){const r=[t];for(;r.length>0;){const i=r.pop();(P?P(i):i.nodeType)===be.element&&pn(i);const x=q(i);if(x)for(let N=x.length-1;N>=0;--N)r.push(x[N])}},fn=function(t){if(!_)return;const r=[t];for(;r.length>0;){const i=r.pop(),g=P?P(i):i.nodeType;if(g===be.processingInstruction||g===be.comment&&J(vs,i.data)){try{fe(i)}catch{}continue}if(g===be.element){const N=i,M=W(z?z(i):i.nodeName);try{N.hasAttribute&&N.hasAttribute("patchsrc")&&N.removeAttribute("patchsrc"),N.hasAttribute&&N.hasAttribute("for")&&M!=="label"&&M!=="output"&&N.removeAttribute("for")}catch{}}const x=q(i);if(x)for(let N=x.length-1;N>=0;--N)r.push(x[N])}},is=function(t){let r=null,i=null;if(yt)t=""+t;else{const N=ws(t,/^[\r\n\t ]+/);i=N&&N[0]}tt==="application/xhtml+xml"&&Ke===Re&&(t=''+t+"");const g=E?f(t):t;if(Ke===Re)try{r=new Y().parseFromString(g,tt)}catch{}if(!r||!r.documentElement){r=oe.createDocument(Ke,"template",null);try{r.documentElement.innerHTML=It?H:g}catch{}}const x=r.body||r.documentElement;return t&&i&&x.insertBefore(a.createTextNode(i),x.childNodes[0]||null),Ke===Re?se.call(r,Q?"html":"body")[0]:Q?r.documentElement:x},ls=function(t){const r=v?v(t):t.ownerDocument;return he.call(r||t,t,y.SHOW_ELEMENT|y.SHOW_COMMENT|y.SHOW_TEXT|y.SHOW_PROCESSING_INSTRUCTION|y.SHOW_CDATA_SECTION,null)},ht=function(t){return t=rt(t,V," "),t=rt(t,Se," "),t=rt(t,it," "),t},jt=function(t){var r;t.normalize();const i=v?v(t):t.ownerDocument,g=he.call(i||t,t,y.SHOW_TEXT|y.SHOW_COMMENT|y.SHOW_CDATA_SECTION|y.SHOW_PROCESSING_INSTRUCTION,null);let x=g.nextNode();for(;x;)x.data=ht(x.data),x=g.nextNode();const N=(r=t.querySelectorAll)===null||r===void 0?void 0:r.call(t,"template");N&&Ze(N,M=>{Qe(M.content)&&jt(M.content)})},xt=function(t){const r=z?z(t):null;return typeof r!="string"||W(r)!=="form"?!1:typeof t.nodeName!="string"||typeof t.textContent!="string"||typeof t.removeChild!="function"||t.attributes!==te(t)||typeof t.removeAttribute!="function"||typeof t.setAttribute!="function"||typeof t.namespaceURI!="string"||typeof t.insertBefore!="function"||typeof t.hasChildNodes!="function"||t.nodeType!==P(t)||t.childNodes!==q(t)},Qe=function(t){if(!P||typeof t!="object"||t===null)return!1;try{return P(t)===be.documentFragment}catch{return!1}},nt=function(t){if(!P||typeof t!="object"||t===null)return!1;try{return typeof P(t)=="number"}catch{return!1}};function De(u,t,r){u.length!==0&&Ze(u,i=>{i.call(n,t,r,Xe)})}const gn=function(t,r){return!!(_&&t.hasChildNodes()&&!nt(t.firstElementChild)&&J(Ps,t.textContent)&&J(Ps,t.innerHTML)||_&&t.namespaceURI===Re&&r==="style"&&nt(t.firstElementChild)||t.nodeType===be.processingInstruction||_&&t.nodeType===be.comment&&J(vs,t.data))},hn=function(t,r,i){if(!Ee[r]&&ms(r)&&(B.tagNameCheck instanceof RegExp&&J(B.tagNameCheck,r)||B.tagNameCheck instanceof Function&&B.tagNameCheck(r)))return!1;if(_t&&!Ce[r]){const g=j(t),x=q(t);if(x&&g){const N=x.length;for(let M=N-1;M>=0;--M){const $=t===i?Te(x[M],!0):x[M];g.insertBefore($,Ne(t))}}}return Pe(t),!0},cs=function(t,r,i,g){return t.length===0?r:r===i||r===g?ie(r):r},us=function(t,r){if(De(O.beforeSanitizeElements,t,null),t!==r&&j(t)===null)return mt&&st(t),!0;if(xt(t))return Pe(t),!0;const i=W(z?z(t):t.nodeName);if(L=cs(O.uponSanitizeElement,L,Le,lt),De(O.uponSanitizeElement,t,{tagName:i,allowedTags:L}),t!==r&&j(t)===null)return mt&&st(t),!0;if(gn(t,i))return Pe(t),!0;if(Ee[i]||!(A.tagCheck instanceof Function&&A.tagCheck(i))&&!L[i]){const x=hn(t,i,r);return x===!1&&De(O.afterSanitizeElements,t,null),x}if((P?P(t):t.nodeType)===be.element&&!mn(t)||(i==="noscript"||i==="noembed"||i==="noframes")&&J(io,t.innerHTML))return Pe(t),!0;if(p&&t.nodeType===be.text){const x=ht(t.textContent);t.textContent!==x&&(Je(n.removed,{element:t.cloneNode()}),t.textContent=x)}return De(O.afterSanitizeElements,t,null),!1},ds=function(t,r,i){if(b[r]||_&&r==="patchsrc"||_&&r==="for"&&t!=="label"&&t!=="output"||Xt&&(r==="id"||r==="name")&&(i in a||i in ln))return!1;const g=k[r]||A.attributeCheck instanceof Function&&A.attributeCheck(r,t);if(!(de&&J(We,r))){if(!(ae&&J($e,r))){if(g){if(!wt[r]){if(!J(Ue,rt(i,we,""))){if(!((r==="src"||r==="xlink:href"||r==="href")&&t!=="script"&&Is(i,"data:")===0&&Jt[t])){if(!(xe&&!J(ke,rt(i,we,"")))){if(i)return!1}}}}}else if(!(ms(t)&&(B.tagNameCheck instanceof RegExp&&J(B.tagNameCheck,t)||B.tagNameCheck instanceof Function&&B.tagNameCheck(t))&&(B.attributeNameCheck instanceof RegExp&&J(B.attributeNameCheck,r)||B.attributeNameCheck instanceof Function&&B.attributeNameCheck(r,t))||r==="is"&&B.allowCustomizedBuiltInElements&&(B.tagNameCheck instanceof RegExp&&J(B.tagNameCheck,i)||B.tagNameCheck instanceof Function&&B.tagNameCheck(i))))return!1}}return!0},xn=S({},["annotation-xml","color-profile","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","missing-glyph"]),ms=function(t){return!xn[at(t)]&&J(Fe,t)},bn=function(t,r,i,g){if(E&&typeof T=="object"&&typeof T.getAttributeType=="function"&&!i)switch(T.getAttributeType(t,r)){case"TrustedHTML":return f(g);case"TrustedScriptURL":return D(g)}return g},Tn=function(t,r,i,g){try{i?t.setAttributeNS(i,r,g):t.setAttribute(r,g),xt(t)?Pe(t):Ss(n.removed)}catch{Be(r,t)}},ps=function(t){De(O.beforeSanitizeAttributes,t,null);const r=t.attributes;if(!r||xt(t))return;k=cs(O.uponSanitizeAttribute,k,Ae,ct);const i={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:k,forceKeepAttr:void 0};let g=r.length;const x=W(t.nodeName);for(;g--;){const N=r[g],M=N.name,$=N.namespaceURI,me=N.value,pe=W(M),Lt=me;let ue=M==="value"?Lt:zr(Lt);if(i.attrName=pe,i.attrValue=ue,i.keepAttr=!0,i.forceKeepAttr=void 0,De(O.uponSanitizeAttribute,t,i),ue=i.attrValue,Qt&&(pe==="id"||pe==="name")&&Is(ue,Zt)!==0&&(Be(M,t),ue=Zt+ue),_&&J(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,ue)){Be(M,t);continue}if(pe==="attributename"&&ws(ue,"href")){Be(M,t);continue}if(!i.forceKeepAttr){if(!i.keepAttr){Be(M,t);continue}if(!Ie&&J(lo,ue)){Be(M,t);continue}if(p&&(ue=ht(ue)),!ds(x,pe,ue)){Be(M,t);continue}ue=bn(x,pe,$,ue),ue!==Lt&&Tn(t,M,$,ue)}}De(O.afterSanitizeAttributes,t,null)},bt=function(t){let r=null;const i=ls(t);for(De(O.beforeSanitizeShadowDOM,t,null);r=i.nextNode();)if(De(O.uponSanitizeShadowNode,r,null),us(r,t),ps(r),Qe(r.content)&&bt(r.content),(P?P(r):r.nodeType)===be.element){const x=I(r);Qe(x)&&(kt(x),bt(x))}De(O.afterSanitizeShadowDOM,t,null)},kt=function(t){const r=[{node:t,shadow:null}];for(;r.length>0;){const i=r.pop();if(i.shadow){bt(i.shadow);continue}const g=i.node,N=(P?P(g):g.nodeType)===be.element,M=q(g);if(M)for(let $=M.length-1;$>=0;--$)r.push({node:M[$],shadow:null});if(N){const $=z?z(g):null;if(typeof $=="string"&&W($)==="template"){const me=g.content;Qe(me)&&r.push({node:me,shadow:null})}}if(N){const $=I(g);Qe($)&&r.push({node:null,shadow:$},{node:$,shadow:null})}}};return n.sanitize=function(u){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=null,i=null,g=null,x=null;if(It=!u,It&&(u=""),typeof u!="string"&&!nt(u)&&(u=qr(u),typeof u!="string"))throw Ge("dirty is not a string, aborting");if(!n.isSupported)return u;He?(L=lt,k=ct):Ot(t),(O.uponSanitizeElement.length>0||O.uponSanitizeAttribute.length>0)&&(L=ie(L)),O.uponSanitizeAttribute.length>0&&(k=ie(k)),n.removed=[];const N=mt&&typeof u!="string"&&nt(u);if(N){fn(u);const me=z?z(u):u.nodeName;if(typeof me=="string"){const pe=W(me);if(!L[pe]||Ee[pe])throw gt(u),Ge("root node is forbidden and cannot be sanitized in-place")}if(xt(u))throw gt(u),Ge("root node is clobbered and cannot be sanitized in-place");try{kt(u)}catch(pe){throw gt(u),pe}}else if(nt(u))r=is(""),i=r.ownerDocument.importNode(u,!0),i.nodeType===be.element&&i.nodeName==="BODY"||i.nodeName==="HTML"?r=i:r.appendChild(i),kt(i);else{if(!Ye&&!p&&!Q&&u.indexOf("<")===-1)return E&&dt?f(u):u;if(r=is(u),!r)return Ye?null:dt?H:""}r&&yt&&Pe(r.firstChild);const M=N?u:r;try{const me=ls(M);for(;g=me.nextNode();)us(g,M),ps(g),Qe(g.content)&&bt(g.content)}catch(me){throw N&&(gt(u),Ze(n.removed,pe=>{pe.element&&st(pe.element)})),me}if(N)return Ze(n.removed,me=>{me.element&&st(me.element)}),p&&jt(u),u;if(Ye){if(p&&jt(r),ut)for(x=ce.call(r.ownerDocument);r.firstChild;)x.appendChild(r.firstChild);else x=r;return(k.shadowroot||k.shadowrootmode)&&(x=_e.call(l,x,!0)),x}let $=Q?r.outerHTML:r.innerHTML;return Q&&L["!doctype"]&&r.ownerDocument&&r.ownerDocument.doctype&&r.ownerDocument.doctype.name&&J(oo,r.ownerDocument.doctype.name)&&($=" +`+$),p&&($=ht($)),E&&dt?f($):$},n.setConfig=function(){let u=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Ot(u),He=!0,lt=L,ct=k},n.clearConfig=function(){Xe=null,He=!1,lt=null,ct=null,E=w,H=""},n.isValidAttribute=function(u,t,r){Xe||Ot({});const i=W(u),g=W(t);return ds(i,g,r)},n.addHook=function(u,t){typeof t=="function"&&ee(O,u)&&Je(O[u],t)},n.removeHook=function(u,t){if(ee(O,u)){if(t!==void 0){const r=Br(O[u],t);return r===-1?void 0:Gr(O[u],r,1)[0]}return Ss(O[u])}},n.removeHooks=function(u){ee(O,u)&&(O[u]=[])},n.removeAllHooks=function(){O=Ms()},n}var mo=tn();const po={DEBATE:{ARGUMENT:"default",REBUTTAL:"warning"},DEVIL_ADVOCATE:{CHALLENGE:"destructive",DEFENSE:"success"},TASK_FORCE:{PLAN:"default",TASK_RESULT:"success",VERIFICATION:"warning"}};function fo(e){return/<[a-z][\s\S]*>/i.test(e)}function go(e){switch(e){case"SYNTHESIS":case"PLAN":return"default";case"ERROR":return"destructive";case"SKIPPED":return"secondary";case"CRITIQUE":case"CHALLENGE":case"VERIFICATION":return"warning";case"OPINION":case"REVISION":case"DEFENSE":case"TASK_RESULT":return"success";case"DISSENT":return"destructive";case"ABSTAINED":return"secondary";default:return"outline"}}function ho(e){const n=[`Signature: ${e.signature.slice(0,16)}…`];return e.signatureKeyVersion!=null&&n.push(`Key version: ${e.signatureKeyVersion}`),e.signatureTimestampMs!=null&&n.push(`Signed at: ${new Date(e.signatureTimestampMs).toISOString()}`),n.join(` +`)}const xo=144;function Fs(e){var n;return!Array.isArray(e)||e.length===0||typeof((n=e[0])==null?void 0:n.subject)!="string"?null:e}function bo(e){const n=e.indexOf("["),a=e.lastIndexOf("]");return n===-1||a===-1||a<=n?null:e.slice(n,a+1)}function Us(e){if(!e)return null;const n=bo(e);if(!n)return null;try{return Fs(JSON.parse(n))}catch{}try{const a=n.replace(/"(?:[^"\\]|\\.)*"/g,l=>l.replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t"));return Fs(JSON.parse(a))}catch{return null}}function To({entry:e,isSpeaking:n,allowHtml:a,discussionStyle:l,preConfiguredTasks:o,className:m}){var w;const{t:c}=Ve(),F=An(e.type),y=e.type==="SYNTHESIS",G=e.type==="ERROR"||e.type==="SKIPPED",Y=e.type==="PLAN",T=e.type==="VERIFICATION",U=e.type==="TASK_RESULT",Te=e.type==="DISSENT",fe=e.type==="CONVERGENCE"||e.type==="FACILITATION"||e.type==="ABSTAINED",Ne=l&&((w=po[l])==null?void 0:w[e.type])||go(e.type),q=e.content?Wt(e.content):null,j=q!=null&&q.trim()?yn(q):null;let I=Us(e.content)??Us(j);!I&&T&&(I=(e.content?fs(e.content):null)??(j?fs(j):null)),!I&&Y&&o&&o.length>0&&(I=o.map(d=>({subject:d.subject,description:d.description,assignedTo:d.assignToRole,priority:d.priority})));const te=a&&j?fo(j):!1,P=h.useRef(null),[z,v]=h.useState(!1),[E,H]=h.useState(!1);return h.useEffect(()=>{P.current&&v(P.current.scrollHeight>xo)},[j]),s.jsxs("div",{className:C("flex gap-3 rounded-lg p-3 transition-colors",y&&"border-2 border-primary/40 bg-primary/5 shadow-sm",Y&&"border border-sky-500/30 bg-sky-500/5",U&&"border border-emerald-500/20 bg-emerald-500/5",T&&"border border-amber-500/20 bg-amber-500/5",Te&&"border border-red-500/30 bg-red-500/5",G&&"opacity-60",fe&&"opacity-75",!y&&!G&&!Y&&!U&&!T&&!Te&&"hover:bg-secondary/30",m),"data-testid":`transcript-entry-${e.speakerAgentId}-${e.phaseIndex}`,children:[s.jsx("div",{className:C("flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-xs font-bold text-white",Sn(e.speakerAgentId)),title:e.speakerDisplayName,children:Y?s.jsx(gr,{className:"h-4 w-4"}):T?s.jsx(Nt,{className:"h-4 w-4"}):_n(e.speakerDisplayName)}),s.jsxs("div",{className:"flex-1 min-w-0",children:[s.jsxs("div",{className:"flex items-center gap-2 flex-wrap mb-1",children:[s.jsx("span",{className:"text-sm font-semibold text-foreground",children:e.speakerDisplayName}),s.jsx(Oe,{variant:Ne,className:"text-[10px] px-1.5 py-0",children:c(`groups.entryType.${e.type}`,F.label)}),e.targetAgentId&&s.jsxs("span",{className:"text-[10px] text-muted-foreground",title:e.targetAgentId,children:["→ ",e.targetAgentId.slice(0,8),"…"]}),wn(e)&&s.jsxs("span",{className:"inline-flex items-center gap-1 rounded-full bg-emerald-500/10 px-1.5 py-0 text-[10px] font-medium text-emerald-600 cursor-help dark:text-emerald-400",title:ho(e),"data-testid":"transcript-signature-badge",children:[s.jsx(hr,{className:"h-2.5 w-2.5"}),c("audit.signed","Signed")]}),s.jsx("span",{className:"text-[10px] text-muted-foreground ms-auto",children:Kt(e.timestamp,"time")})]}),n?s.jsxs("div",{className:"flex items-center gap-2 py-1",children:[s.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-primary animate-bounce [animation-delay:0ms]"}),s.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-primary animate-bounce [animation-delay:150ms]"}),s.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-primary animate-bounce [animation-delay:300ms]"}),s.jsx("span",{className:"text-xs text-muted-foreground ms-1",children:c("groups.responding","responding…")})]}):I?s.jsxs("div",{className:"space-y-2",children:[s.jsxs("div",{className:"flex items-center gap-1.5 text-xs font-medium text-muted-foreground mb-2",children:[T?s.jsx(Nt,{className:"h-3.5 w-3.5"}):s.jsx(Ir,{className:"h-3.5 w-3.5"}),I.length," ",I.length===1?c("groups.item","item"):c("groups.items","items")]}),I.map((d,R)=>{const K=d.passed!==void 0;return s.jsxs("div",{className:C("flex items-start gap-3 rounded-lg border px-3 py-2.5",K&&d.passed&&"border-emerald-500/30 bg-emerald-500/5",K&&!d.passed&&"border-destructive/30 bg-destructive/5",!K&&"border-border/50 bg-secondary/30"),children:[K?d.passed?s.jsx(Nt,{className:"h-4 w-4 shrink-0 text-emerald-500 mt-0.5"}):s.jsx(In,{className:"h-4 w-4 shrink-0 text-destructive mt-0.5"}):s.jsx("span",{className:"flex h-5 w-5 shrink-0 items-center justify-center rounded-full bg-sky-500/20 text-sky-400 text-[10px] font-bold mt-0.5",children:R+1}),s.jsxs("div",{className:"flex-1 min-w-0",children:[s.jsx("p",{className:"text-sm font-medium text-foreground leading-snug",children:d.subject}),d.description&&s.jsx(Hs,{text:d.description,className:"mt-0.5"}),d.feedback&&s.jsx(Hs,{text:d.feedback,className:"mt-0.5"}),d.assignedTo&&s.jsxs("div",{className:"flex items-center gap-1 mt-1.5",children:[s.jsx(Dr,{className:"h-3 w-3 text-muted-foreground"}),s.jsx("span",{className:"text-[10px] text-muted-foreground font-medium truncate max-w-[200px]",title:d.assignedTo,children:d.assignedTo.length>12?`${d.assignedTo.slice(0,12)}…`:d.assignedTo})]})]}),d.priority!=null&&s.jsxs(Oe,{variant:"outline",className:"text-[9px] px-1.5 py-0 shrink-0",children:["P",d.priority]})]},R)})]}):j?s.jsxs(s.Fragment,{children:[s.jsxs("div",{ref:P,className:C("relative transition-[max-height] duration-300 ease-in-out overflow-hidden",z&&!E&&"max-h-36"),children:[te?s.jsx("div",{className:"text-sm text-foreground/90 leading-relaxed [&_ul]:ms-4 [&_ul]:list-disc [&_li]:mb-0.5 [&_strong]:font-semibold",dangerouslySetInnerHTML:{__html:mo.sanitize(j)}}):s.jsx("div",{className:"prose prose-sm dark:prose-invert max-w-none text-foreground/90 [&_pre]:rounded-lg [&_pre]:bg-muted [&_pre]:p-3 [&_code]:rounded [&_code]:bg-muted [&_code]:px-1 [&_code]:py-0.5 [&_code]:text-xs [&_hr]:border-border [&_p:first-child]:mt-0 [&_p:last-child]:mb-0",children:s.jsx(Vs,{remarkPlugins:[Ws],children:Cn(j,c("groups.contentTruncated","[Content truncated]"))})}),z&&!E&&s.jsx("div",{className:C("absolute bottom-0 inset-x-0 h-10 bg-gradient-to-t pointer-events-none",y?"from-primary/5 to-transparent":"from-card to-transparent")})]}),z&&s.jsx("button",{onClick:()=>H(d=>!d),className:"flex items-center gap-1 mt-1 text-xs font-medium text-primary hover:text-primary/80 transition-colors",children:E?s.jsxs(s.Fragment,{children:[s.jsx($s,{className:"h-3 w-3"}),c("common.showLess","Show less")]}):s.jsxs(s.Fragment,{children:[s.jsx(qt,{className:"h-3 w-3"}),c("common.showMore","Show more")]})})]}):e.errorReason?s.jsxs("div",{className:"flex items-center gap-2 text-sm text-muted-foreground italic",children:[s.jsx("span",{className:"text-[10px] rounded-full bg-muted px-2 py-0.5",children:e.type==="SKIPPED"?`⏭️ ${c("groups.skipped","Skipped")}`:`⚠️ ${c("common.error","Error")}`}),s.jsx("span",{className:"text-xs",children:e.errorReason})]}):e.type==="ABSTAINED"?s.jsx("div",{className:"text-sm italic text-muted-foreground",children:c("groups.abstainedBody","Declined to add anything new this round.")}):s.jsx("div",{className:"text-sm text-muted-foreground italic",children:c("groups.noResponse","No response")})]})]})}function Hs({text:e,className:n}){const{t:a}=Ve(),[l,o]=h.useState(!1),m=e.length>100;return s.jsxs("div",{className:n,children:[s.jsx("p",{className:C("text-xs text-muted-foreground leading-relaxed",!l&&m&&"line-clamp-2"),children:e}),m&&s.jsx("button",{type:"button",onClick:()=>o(!l),className:"text-[10px] text-primary/70 hover:text-primary font-medium mt-0.5 transition-colors",children:l?a("common.showLess","Show less"):a("common.showMore","Show more")})]})}const Et={ROUND_TABLE:{accent:"text-amber-500",dotColor:"bg-amber-500",phaseAccent:"border-amber-500/30 bg-amber-500/5",questionBg:"bg-amber-500/5 border-b-amber-500/20",flowBg:"bg-amber-500/10",flowText:"text-amber-600 dark:text-amber-400",progressBg:"bg-amber-500/5",progressText:"text-amber-600 dark:text-amber-400",progressBorder:"border-amber-500/20"},PEER_REVIEW:{accent:"text-teal-500",dotColor:"bg-teal-500",phaseAccent:"border-teal-500/30 bg-teal-500/5",questionBg:"bg-teal-500/5 border-b-teal-500/20",flowBg:"bg-teal-500/10",flowText:"text-teal-600 dark:text-teal-400",progressBg:"bg-teal-500/5",progressText:"text-teal-600 dark:text-teal-400",progressBorder:"border-teal-500/20"},DEVIL_ADVOCATE:{accent:"text-rose-500",dotColor:"bg-rose-500",phaseAccent:"border-rose-500/30 bg-rose-500/5",questionBg:"bg-rose-500/5 border-b-rose-500/20",flowBg:"bg-rose-500/10",flowText:"text-rose-600 dark:text-rose-400",progressBg:"bg-rose-500/5",progressText:"text-rose-600 dark:text-rose-400",progressBorder:"border-rose-500/20"},DELPHI:{accent:"text-violet-500",dotColor:"bg-violet-500",phaseAccent:"border-violet-500/30 bg-violet-500/5",questionBg:"bg-violet-500/5 border-b-violet-500/20",flowBg:"bg-violet-500/10",flowText:"text-violet-600 dark:text-violet-400",progressBg:"bg-violet-500/5",progressText:"text-violet-600 dark:text-violet-400",progressBorder:"border-violet-500/20"},DEBATE:{accent:"text-indigo-500",dotColor:"bg-indigo-500",phaseAccent:"border-indigo-500/30 bg-indigo-500/5",questionBg:"bg-indigo-500/5 border-b-indigo-500/20",flowBg:"bg-indigo-500/10",flowText:"text-indigo-600 dark:text-indigo-400",progressBg:"bg-indigo-500/5",progressText:"text-indigo-600 dark:text-indigo-400",progressBorder:"border-indigo-500/20"},TASK_FORCE:{accent:"text-orange-500",dotColor:"bg-orange-500",phaseAccent:"border-orange-500/30 bg-orange-500/5",questionBg:"bg-orange-500/5 border-b-orange-500/20",flowBg:"bg-orange-500/10",flowText:"text-orange-600 dark:text-orange-400",progressBg:"bg-orange-500/5",progressText:"text-orange-600 dark:text-orange-400",progressBorder:"border-orange-500/20"},NEGOTIATION:{accent:"text-emerald-500",dotColor:"bg-emerald-500",phaseAccent:"border-emerald-500/30 bg-emerald-500/5",questionBg:"bg-emerald-500/5 border-b-emerald-500/20",flowBg:"bg-emerald-500/10",flowText:"text-emerald-600 dark:text-emerald-400",progressBg:"bg-emerald-500/5",progressText:"text-emerald-600 dark:text-emerald-400",progressBorder:"border-emerald-500/20"},CUSTOM:{accent:"text-primary",dotColor:"bg-primary",phaseAccent:"border-primary/30 bg-primary/5",questionBg:"bg-card/50",flowBg:"bg-primary/10",flowText:"text-primary",progressBg:"bg-primary/5",progressText:"text-primary",progressBorder:"border-primary/20"}};function No(e){return{OPINION:"OPINION",CRITIQUE:"CRITIQUE",REVISION:"REVISION",CHALLENGE:"CHALLENGE",DEFENSE:"DEFENSE",ARGUMENT:"ARGUE",REBUTTAL:"REBUTTAL",SYNTHESIS:"SYNTHESIS",DISSENT:"SYNTHESIS",ABSTAINED:"SYNTHESIS",CONVERGENCE:"OPINION",PLAN:"PLAN",TASK_RESULT:"EXECUTE",VERIFICATION:"VERIFY",VOTE:"VOTE",PROPOSAL:"PROPOSAL",BARGAIN:"BARGAIN",RETRO:"RETRO",BID:"EXECUTE"}[e]||"OPINION"}function Eo(e){const n=[];let a=null;for(const l of e){if(l.type==="QUESTION")continue;const o=l.phaseName||`Phase ${l.phaseIndex}`;(!a||a.phaseIndex!==l.phaseIndex||a.phaseName!==o)&&(a={phaseIndex:l.phaseIndex,phaseName:o,phaseType:No(l.type),entries:[]},n.push(a)),a.entries.push(l)}return n}const Bs={CREATED:{variant:"default"},IN_PROGRESS:{variant:"warning"},SYNTHESIZING:{variant:"warning"},COMPLETED:{variant:"success"},FAILED:{variant:"destructive"},AWAITING_APPROVAL:{variant:"warning"},AWAITING_HUMAN_INPUT:{variant:"warning"},CANCELLED:{variant:"destructive"}},Ao=300;function yo({conversation:e,streamState:n,isLoading:a,discussionStyle:l,preConfiguredTasks:o,onApprove:m,onCancelDiscussion:c,isDeciding:F,onSubmitHumanInput:y,isSubmittingHumanInput:G,humanTurnTimeout:Y}){var Ue,L,Le,k,Ae,B,Ee;const{t:T}=Ve(),[U,Te]=h.useState(!1),[fe,Ne]=h.useState(!1),[q,j]=h.useState(!1),[I,te]=h.useState(!1),P=h.useRef(null),z=h.useRef(null),v=l||"ROUND_TABLE",E=Et[v]||Et.ROUND_TABLE,H=Rn(v,T),w=!!n&&(n.isStreaming||n.state!=="CREATED"),d=h.useMemo(()=>w?n.transcript:(e==null?void 0:e.transcript)??[],[w,n,e==null?void 0:e.transcript]),R=w?n.state:(e==null?void 0:e.state)??"CREATED",K=w?(Ue=n.currentPhase)==null?void 0:Ue.name:e==null?void 0:e.currentPhaseName,f=w?(L=n.currentPhase)==null?void 0:L.index:e==null?void 0:e.currentPhaseIndex,D=w?n.synthesizedAnswer:e==null?void 0:e.synthesizedAnswer,le=w?n.decision:e==null?void 0:e.decision,ge=h.useMemo(()=>{var b;return w?((b=d.find(A=>A.type==="QUESTION"))==null?void 0:b.content)??"":(e==null?void 0:e.originalQuestion)??""},[w,d,e==null?void 0:e.originalQuestion]),oe=w?n.startedAt??new Date().toISOString():(e==null?void 0:e.created)??new Date().toISOString(),he=w?n.activeSpeakers:new Set,ce=w?n.error:null,se=(e==null?void 0:e.id)??(n==null?void 0:n.conversationId)??null,_e=h.useMemo(()=>{var b;return(((b=e==null?void 0:e.taskList)==null?void 0:b.tasks)??[]).filter(A=>A.status==="AWAITING_APPROVAL").map(A=>A.id)},[e==null?void 0:e.taskList]),O=h.useMemo(()=>R==="AWAITING_APPROVAL"?new Set(_e):void 0,[R,_e]),V=h.useMemo(()=>Eo(d),[d]);if(h.useEffect(()=>{w&&z.current&&z.current.scrollTo({top:z.current.scrollHeight,behavior:"smooth"})},[w,d.length]),h.useEffect(()=>{P.current&&te(P.current.scrollHeight>Ao)},[D]),a)return s.jsxs("div",{className:"space-y-4 p-4",children:[s.jsx(ze,{className:"h-16 w-full"}),s.jsx(ze,{className:"h-32 w-full"}),s.jsx(ze,{className:"h-32 w-full"})]});if(!w&&!e)return s.jsxs("div",{className:"flex flex-col items-center justify-center h-full text-center p-8",children:[s.jsx("div",{className:C("flex h-16 w-16 items-center justify-center rounded-2xl mb-4",E.flowBg),children:s.jsx(Zs,{className:C("h-8 w-8",E.accent)})}),s.jsx("p",{className:"text-lg font-semibold text-foreground mb-1",children:T("groups.readyToDiscuss","Ready to discuss")}),s.jsx("p",{className:"text-sm text-muted-foreground max-w-sm",children:T("groups.selectOrStart","Select a past discussion from the history, or type a question below to start a new one.")}),H&&s.jsxs("div",{className:C("flex items-center gap-2 mt-4 rounded-lg px-3 py-2 border border-border",E.flowBg),children:[s.jsx("span",{className:"text-base",children:H.icon}),s.jsx("span",{className:C("text-sm font-medium",E.flowText),children:H.label}),s.jsxs("span",{className:"text-xs text-muted-foreground",children:["— ",H.flow]})]})]});const Se=Bs[R]||Bs.CREATED,We={CREATED:T("groups.stateCreated","Created"),IN_PROGRESS:T("conversations.stateInProgress","In Progress"),SYNTHESIZING:T("groups.stateSynthesizing","Synthesizing…"),COMPLETED:T("groups.stateCompleted","Completed"),FAILED:T("groups.stateFailed","Failed"),AWAITING_APPROVAL:T("groups.stateAwaitingApproval","Awaiting Approval"),AWAITING_HUMAN_INPUT:T("groups.stateAwaitingHumanInput","Awaiting Human Input"),CANCELLED:T("groups.stateCancelled","Cancelled")}[R]??R;function $e(){const b=D?Wt(D):null;b&&(navigator.clipboard.writeText(b),Te(!0),setTimeout(()=>Te(!1),2e3))}const ke=D?Wt(D):null,we=So[v]||[],Fe=e==null?void 0:e.totalCost;return s.jsxs("div",{className:"flex flex-col h-full",children:[s.jsx("div",{className:C("border-b p-4 shrink-0",E.questionBg),children:s.jsxs("div",{className:"flex items-start gap-3",children:[s.jsx("div",{className:C("flex h-8 w-8 items-center justify-center rounded-full text-xs font-bold text-white shrink-0 bg-primary"),children:"Q"}),s.jsxs("div",{className:"flex-1 min-w-0",children:[s.jsxs("div",{className:"flex items-center gap-2 mb-1 flex-wrap",children:[s.jsx("span",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:T("groups.question","Question")}),s.jsx(Oe,{variant:Se.variant,className:"text-[10px]",children:We}),w&&s.jsx(Oe,{variant:"outline",className:C("text-[10px] animate-pulse border-current",E.accent),children:T("groups.liveIndicator","● LIVE")}),Fe!=null&&Fe>0&&s.jsx(Oe,{variant:"outline",className:"text-[10px] tabular-nums",title:_o(e==null?void 0:e.memberCosts,e==null?void 0:e.memberDisplayNames),"data-testid":"discussion-cost",children:Ys(Fe)}),s.jsxs("button",{onClick:()=>Ne(b=>!b),className:C("flex items-center gap-1 rounded-md px-1.5 py-0.5 text-[10px] transition-colors border",fe?"bg-primary/10 border-primary/30 text-primary":"border-transparent text-muted-foreground hover:text-foreground hover:bg-secondary/50"),title:T("groups.allowHtmlTooltip","When enabled, renders HTML content (sanitized). Use only with trusted agents."),children:[s.jsx(br,{className:"h-3 w-3"}),T("groups.htmlToggle","HTML")]}),s.jsx("span",{className:"text-[10px] text-muted-foreground ms-auto",children:Kt(oe,"full")})]}),s.jsx("p",{className:"text-base font-medium text-foreground",children:ge})]})]})}),v!=="CUSTOM"&&we.length>0&&s.jsx("div",{className:C("flex items-center gap-1 px-4 py-1.5 border-b border-border shrink-0",E.flowBg),children:we.map((b,A)=>{const ae=K==null?void 0:K.toLowerCase().includes(b.toLowerCase()),de=R==="COMPLETED"||f!=null&&A0&&s.jsx(pr,{taskList:e.taskList,memberDisplayNames:e.memberDisplayNames}),s.jsx(Ns,{conversation:e}),V.map((b,A)=>{var ae,de;return s.jsx(jr,{name:b.phaseName,type:b.phaseType,entryCount:b.entries.length,isActive:(R==="IN_PROGRESS"||R==="SYNTHESIZING")&&b.phaseIndex===(w?(ae=n.currentPhase)==null?void 0:ae.index:e==null?void 0:e.currentPhaseIndex),defaultExpanded:!0,convergence:(de=n==null?void 0:n.convergence)==null?void 0:de.get(b.phaseIndex),children:b.entries.map((xe,Ie)=>s.jsx(To,{entry:xe,isSpeaking:he.has(xe.speakerAgentId)&&xe.content===null,allowHtml:fe,discussionStyle:v,preConfiguredTasks:o},`${xe.speakerAgentId}-${xe.phaseIndex}-${Ie}`))},`${b.phaseIndex}-${b.phaseName}-${A}`)}),xr(le)&&s.jsx(fr,{decision:le}),ke&&s.jsxs("div",{className:C("rounded-xl border-2 border-primary/40 bg-linear-to-b from-primary/10 to-primary/5 p-4 shadow-sm"),"data-testid":"synthesis-card",children:[s.jsxs("div",{className:"flex items-center justify-between mb-2",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"text-lg",children:"⭐"}),s.jsx("span",{className:"text-sm font-bold text-primary",children:T("groups.synthesis","Synthesis")})]}),s.jsx("button",{onClick:$e,className:"flex items-center gap-1 rounded-md px-2 py-1 text-xs text-muted-foreground hover:bg-primary/10 hover:text-primary transition-colors",title:T("common.copy","Copy"),children:U?s.jsxs(s.Fragment,{children:[s.jsx(Nt,{className:"h-3 w-3"})," ",T("common.copied","Copied")]}):s.jsxs(s.Fragment,{children:[s.jsx(jn,{className:"h-3 w-3"})," ",T("common.copy","Copy")]})})]}),s.jsxs("div",{ref:P,className:C("relative transition-[max-height] duration-300 ease-in-out overflow-hidden",I&&!q&&"max-h-72"),children:[s.jsx("div",{className:"prose prose-sm dark:prose-invert max-w-none text-foreground [&_pre]:rounded-lg [&_pre]:bg-muted [&_pre]:p-3 [&_code]:rounded [&_code]:bg-muted [&_code]:px-1 [&_code]:py-0.5 [&_code]:text-xs [&_hr]:border-border",children:s.jsx(Vs,{remarkPlugins:[Ws],children:ke})}),I&&!q&&s.jsx("div",{className:"absolute bottom-0 inset-x-0 h-12 bg-gradient-to-t from-primary/5 to-transparent pointer-events-none"})]}),I&&s.jsx("button",{onClick:()=>j(b=>!b),className:"flex items-center gap-1 mt-2 text-xs font-medium text-primary hover:text-primary/80 transition-colors",children:q?s.jsxs(s.Fragment,{children:[s.jsx($s,{className:"h-3 w-3"}),T("common.showLess","Show less")]}):s.jsxs(s.Fragment,{children:[s.jsx(qt,{className:"h-3 w-3"}),T("common.showMore","Show more")]})})]}),(R==="IN_PROGRESS"||R==="SYNTHESIZING")&&s.jsxs("div",{className:C("flex items-center gap-3 p-3 rounded-lg border",E.progressBg,E.progressBorder),children:[s.jsxs("div",{className:"flex gap-1",children:[s.jsx("span",{className:C("h-2 w-2 rounded-full animate-bounce [animation-delay:0ms]",E.dotColor)}),s.jsx("span",{className:C("h-2 w-2 rounded-full animate-bounce [animation-delay:150ms]",E.dotColor)}),s.jsx("span",{className:C("h-2 w-2 rounded-full animate-bounce [animation-delay:300ms]",E.dotColor)})]}),s.jsx("span",{className:C("text-sm font-medium",E.progressText),children:R==="SYNTHESIZING"?T("groups.synthesizing","Moderator is synthesizing…"):T("groups.discussing","Agents are discussing…")}),K&&s.jsx(Oe,{variant:"outline",className:"text-[10px]",children:K}),w&&he.size>0&&s.jsx("span",{className:"text-[10px] text-muted-foreground",children:T("groups.speakingCount","{{count}} speaking",{count:he.size})})]}),R==="AWAITING_APPROVAL"&&s.jsx("div",{className:"px-6 py-4",children:s.jsx(kn,{surface:"group",pauseReason:((Ae=n==null?void 0:n.hitlPause)==null?void 0:Ae.reason)||(e==null?void 0:e.hitlPauseReason),pausedAt:e==null?void 0:e.pausedAt,timeoutPolicy:e==null?void 0:e.hitlTimeoutPolicy,approvalTimeout:e==null?void 0:e.hitlApprovalTimeout,pausedPhaseName:((B=n==null?void 0:n.hitlPause)==null?void 0:B.phaseName)||(e==null?void 0:e.pausedPhaseName),granularity:((Ee=n==null?void 0:n.hitlPause)==null?void 0:Ee.granularity)||(e==null?void 0:e.hitlPauseType),pendingTaskIds:_e,isSubmitting:F,onDecide:(b,A,ae)=>{se&&(m==null||m(se,b,A,ae))},onCancel:c&&se?()=>c(se):void 0})}),w&&s.jsx(Ns,{className:"px-6",retroRecorded:n==null?void 0:n.retroRecorded,artifactUpdates:n==null?void 0:n.artifactUpdates}),R==="AWAITING_HUMAN_INPUT"&&(()=>{const b=n==null?void 0:n.humanInputRequest,A=e==null?void 0:e.pendingHumanInput,ae=(b==null?void 0:b.displayName)??(A==null?void 0:A.displayName),de=(b==null?void 0:b.phaseName)??(e==null?void 0:e.pausedPhaseName)??void 0;return ae?s.jsx("div",{className:"px-6 py-4",children:s.jsx(ur,{displayName:ae,renderedPrompt:(A==null?void 0:A.renderedPrompt)??"",pausedPhaseName:de,requestedAt:A==null?void 0:A.requestedAt,turnTimeout:Y,isSubmitting:G,onSubmit:xe=>{const Ie=(A==null?void 0:A.memberId)??(b==null?void 0:b.memberId);se&&Ie&&(y==null||y(se,Ie,xe))}})}):null})(),ce&&s.jsx("div",{className:"flex items-center gap-2 p-3 rounded-lg bg-destructive/5 border border-destructive/20",children:s.jsxs("span",{className:"text-sm text-destructive font-medium",children:["⚠️ ",ce]})})]})]})}function _o(e,n){if(!e)return;const a=Object.entries(e).filter(([,l])=>typeof l=="number"&&l>0).sort(([,l],[,o])=>o-l).map(([l,o])=>`${(n==null?void 0:n[l])??l}: ${Ys(o)}`);return a.length?a.join(` +`):void 0}const So={ROUND_TABLE:["Opinion","Discussion","Synthesis"],PEER_REVIEW:["Opinion","Critique","Revision","Synthesis"],DEVIL_ADVOCATE:["Opinion","Challenge","Defense","Synthesis"],DELPHI:["Independent","Anonymous Sharing","Revised","Synthesis"],DEBATE:["Pro Opening","Con Opening","Rebuttals","Judgment"],TASK_FORCE:["Plan","Execute","Verify","Synthesize"],NEGOTIATION:["Positions","Proposals","Bargaining","Arbitration","Synthesis"]};function wo(e){return new Promise((n,a)=>{const l=new FileReader;l.onerror=()=>a(l.error??new Error("read failed")),l.onload=()=>{const o=String(l.result??""),m=o.indexOf(",");n(m>=0?o.slice(m+1):o)},l.readAsDataURL(e)})}function Gs(e){return`${e.name}-${e.size}-${e.lastModified}`}function Io(e){if(e<1024)return`${e} B`;const n=e/1024;return n<1024?`${Math.round(n)} KB`:`${(n/1024).toFixed(n/1024<10?1:0)} MB`}const zs=40,Gt=120;function Co({onSubmit:e,isLoading:n,disabled:a,mode:l="new",disabledMessage:o}){const{t:m}=Ve(),[c,F]=h.useState(""),[y,G]=h.useState(!1),[Y,T]=h.useState([]),[U,Te]=h.useState(!1),fe=h.useRef(null),Ne=h.useRef(null),q=h.useRef(null),j=h.useRef([]),I=h.useRef(Promise.resolve()),te=l==="new",P=h.useCallback(()=>{const f=fe.current;if(!f)return;f.style.height="auto";const D=Math.min(Math.max(f.scrollHeight,zs),Gt);f.style.height=`${D}px`,f.style.overflowY=f.scrollHeight>Gt?"auto":"hidden"},[]);h.useEffect(()=>{P()},[c,P]),h.useEffect(()=>{te||(j.current=[],T([]))},[te]),h.useEffect(()=>{j.current=Y},[Y]),h.useEffect(()=>{if(y&&Ne.current){const f=setTimeout(()=>{var D;return(D=Ne.current)==null?void 0:D.focus()},50);return()=>clearTimeout(f)}},[y]);const z=h.useCallback(async f=>{if(!f.length)return;const D=()=>m("groups.attachmentLimit","At most {{max}} attachments per discussion",{max:gs}),le=j.current,ge=gs-le.length;if(ge<=0){Z.error(D());return}const oe=new Set(le.map(V=>V.id)),he=f.filter(V=>{const Se=Gs(V);return oe.has(Se)?!1:(oe.add(Se),!0)}),ce=he.slice(0,ge);ce.lengthV+Se.sizeBytes,0),O=!1;for(const V of ce){if(V.size>Ln){Z.error(m("groups.attachmentTooLarge","{{name}} is too large to attach",{name:V.name}));continue}if(_e+V.size>Pn){O||(Z.error(m("groups.attachmentTotalTooLarge","Attachments exceed the total size limit")),O=!0);continue}try{se.push({id:Gs(V),fileName:V.name,mimeType:V.type||null,data:await wo(V),sizeBytes:V.size}),_e+=V.size}catch{Z.error(m("groups.attachmentReadFailed","Could not read {{name}}",{name:V.name}))}}se.length&&(j.current=[...j.current,...se],T(j.current))},[m]),v=h.useCallback(f=>{Te(!0);const D=I.current.then(()=>z(f)).finally(()=>{I.current===D&&Te(!1)});return I.current=D,D},[z]),E=h.useCallback(f=>{const D=vn(f);!D.length||!te||a||n||(f.preventDefault(),v(D))},[te,a,n,v]),{isDragOver:H,dropHandlers:w}=Mn(te&&!a&&!n,f=>{v(f)}),d=c.length,R=d>vt;function K(f){if(f==null||f.preventDefault(),R){Z.error(m("groups.questionTooLong","A question can be at most {{max}} characters",{max:vt.toLocaleString()}));return}if(c.trim()&&!n&&!a){const D=te&&Y.length?Y.map(({fileName:le,mimeType:ge,data:oe})=>({fileName:le,mimeType:ge,data:oe})):null;D?e(c.trim(),D):e(c.trim()),F(""),T([]),G(!1)}}return s.jsxs(s.Fragment,{children:[s.jsxs("form",{onSubmit:K,className:"relative flex flex-wrap items-end gap-2 p-3 pb-5 border-t border-border bg-card/80 backdrop-blur-sm shrink-0",...w,children:[H&&s.jsx(Fn,{}),Y.length>0&&s.jsx("ul",{className:"flex w-full flex-wrap gap-1.5","data-testid":"discussion-attachments",children:Y.map(f=>s.jsxs("li",{className:"flex items-center gap-1 rounded-md border border-border bg-secondary/40 px-2 py-0.5 text-[11px] text-foreground",children:[s.jsx(hs,{className:"h-2.5 w-2.5 shrink-0 text-muted-foreground","aria-hidden":"true"}),s.jsx("span",{className:"max-w-[12rem] truncate",title:f.fileName??void 0,children:f.fileName}),s.jsx("span",{className:"tabular-nums text-muted-foreground",children:Io(f.sizeBytes)}),s.jsx("button",{type:"button",onClick:()=>T(D=>D.filter(le=>le.id!==f.id)),"aria-label":m("groups.removeAttachment","Remove {{name}}",{name:f.fileName}),className:"rounded p-0.5 text-muted-foreground transition-colors hover:bg-secondary hover:text-foreground",children:s.jsx(qs,{className:"h-2.5 w-2.5"})})]},f.id))}),te&&s.jsxs(s.Fragment,{children:[s.jsx("input",{ref:q,type:"file",multiple:!0,className:"hidden",onChange:f=>{const D=Array.from(f.target.files??[]);v(D),f.target.value=""},"data-testid":"discussion-file-input"}),s.jsx(je,{type:"button",variant:"outline",size:"icon",className:"shrink-0",disabled:a||n||U,onClick:()=>{var f;return(f=q.current)==null?void 0:f.click()},"aria-label":m("groups.attachFiles","Attach files"),title:m("groups.attachFiles","Attach files"),"data-testid":"discussion-attach-btn",children:U?s.jsx(Pt,{className:"h-4 w-4 animate-spin"}):s.jsx(hs,{className:"h-4 w-4"})})]}),s.jsxs("div",{className:"relative flex-1 min-w-0",children:[s.jsx("textarea",{ref:fe,autoFocus:!0,value:c,onChange:f=>F(f.target.value),placeholder:a&&o?o:l==="continue"?m("groups.continuePlaceholder","Continue this discussion with a follow-up…"):m("groups.askQuestion","Ask a question for the group to discuss…"),className:"w-full resize-none rounded-lg border border-input bg-background px-3 py-2 pe-8 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring transition-shadow",style:{minHeight:zs,maxHeight:Gt},rows:1,disabled:a||n,onKeyDown:f=>{f.key==="Enter"&&!f.shiftKey&&(f.preventDefault(),K())},onPaste:E,"data-testid":"discussion-input"}),s.jsx("button",{type:"button",onClick:()=>G(!0),disabled:a||n,"aria-label":m("groups.expandInput","Expand input"),"aria-expanded":y,className:"absolute end-2 inset-y-0 my-auto h-fit rounded p-0.5 text-muted-foreground hover:text-foreground hover:bg-secondary/50 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",title:m("groups.expandInput","Expand input"),children:s.jsx(Sr,{className:"h-3.5 w-3.5"})})]}),s.jsxs(je,{type:"submit",disabled:!c.trim()||n||a||R,className:"shrink-0","data-testid":"start-discussion-btn",children:[n?s.jsx(Pt,{className:"h-4 w-4 animate-spin"}):l==="continue"?s.jsx(Es,{className:"h-4 w-4"}):s.jsx(xs,{className:"h-4 w-4"}),s.jsx("span",{className:"hidden sm:inline ms-1",children:l==="continue"?m("groups.continueButton","Continue"):m("groups.startDiscussion","Discuss")})]}),c.length>0&&s.jsxs("p",{className:"absolute -bottom-4 start-0 text-[10px] text-muted-foreground/60",children:["↵ ",m("groups.enterToSend","Enter to send")," · ⇧↵ ",m("groups.shiftEnter","new line")]})]}),s.jsx(Tr,{open:y,onClose:()=>G(!1),title:m("groups.composeQuestion","Compose Question"),maxWidth:"max-w-2xl",testId:"discussion-input-dialog",children:s.jsxs("div",{className:"p-5 space-y-3",children:[s.jsx("textarea",{ref:Ne,value:c,onChange:f=>F(f.target.value),placeholder:l==="continue"?m("groups.continuePlaceholder","Continue this discussion with a follow-up…"):m("groups.askQuestion","Ask a question for the group to discuss…"),className:"w-full resize-y rounded-lg border border-input bg-background px-4 py-3 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring transition-shadow min-h-[200px]",rows:8,disabled:n||a,onKeyDown:f=>{f.key==="Enter"&&(f.ctrlKey||f.metaKey)&&(f.preventDefault(),K())},onPaste:E,"data-testid":"discussion-input-expanded"}),s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsx("p",{className:"text-xs text-muted-foreground",children:m("groups.submitShortcut","Ctrl+Enter to submit")}),d>0&&s.jsx("p",{className:C("text-xs tabular-nums",R?"font-medium text-destructive":"text-muted-foreground"),"data-testid":"discussion-char-count",children:R?m("groups.charactersOverLimit","{{current}} / {{max}} characters",{current:d.toLocaleString(),max:vt.toLocaleString()}):`${d.toLocaleString()} ${m("groups.characters","characters")}`})]}),s.jsxs("div",{className:"flex justify-end gap-2 pt-2 border-t border-border",children:[s.jsx(je,{variant:"outline",onClick:()=>G(!1),children:m("common.cancel","Cancel")}),s.jsxs(je,{onClick:()=>K(),disabled:!c.trim()||n||a||R,children:[n?s.jsx(Pt,{className:"h-4 w-4 animate-spin me-1"}):l==="continue"?s.jsx(Es,{className:"h-4 w-4 me-1"}):s.jsx(xs,{className:"h-4 w-4 me-1"}),l==="continue"?m("groups.continueButton","Continue"):m("groups.startDiscussion","Discuss")]})]})]})})]})}const sn={label:"Created",color:"text-muted-foreground",dot:"bg-muted-foreground"},Ro={COMPLETED:{label:"Completed",color:"text-emerald-500",dot:"bg-emerald-500"},IN_PROGRESS:{label:"In Progress",color:"text-amber-500",dot:"bg-amber-500"},SYNTHESIZING:{label:"Synthesizing",color:"text-amber-500",dot:"bg-amber-500"},FAILED:{label:"Failed",color:"text-destructive",dot:"bg-destructive"},CREATED:sn,AWAITING_APPROVAL:{label:"Awaiting Approval",color:"text-orange-500",dot:"bg-orange-500"},AWAITING_HUMAN_INPUT:{label:"Awaiting Human Input",color:"text-primary",dot:"bg-primary"},CANCELLED:{label:"Cancelled",color:"text-muted-foreground",dot:"bg-muted-foreground"},ERROR:{label:"Error",color:"text-destructive",dot:"bg-destructive"}};function zt(e,n){if(ar(e)){if(e.status===409)return n("groups.actionConflict","Another operation is still in progress, or this discussion no longer accepts that action. Please retry.");if(e.status===502)return n("groups.actionUnreachable","A member agent could not be reached. Please try again.");if(e.status===504)return n("groups.actionTimeout","A member agent did not respond in time. Please try again.")}return Ks(e)}function ta(){var xe,Ie;const{id:e}=Un(),n=Hn(),[a]=Bn(),l=h.useMemo(()=>a.get("version")?Number(a.get("version")):1,[a]),{t:o}=Ve(),m=Gn(),[c,F]=h.useState(null),[y,G]=h.useState(!0),[Y,T]=h.useState(!0),[U,Te]=h.useState(!1),[fe,Ne]=h.useState(!1),[q,j]=h.useState(null),{data:I,isLoading:te,isError:P,refetch:z}=zn(e||"",l),{data:v,isLoading:E}=Vn(e||""),{data:H,isLoading:w}=Wn(e||"",c||""),{streamState:d,startStream:R,continueStream:K,approveAndStream:f,abortStream:D,resetStream:le}=$n(),ge=Yn(),oe=qn(),he=Kn(),ce=h.useRef(null);h.useEffect(()=>{!c&&!d.isStreaming&&!d.conversationId&&v&&v.length>0&&F(v[0].id)},[v,c,d.isStreaming,d.conversationId]);const se=h.useMemo(()=>d.isStreaming?"disabled":c?H&&(H.availableActions??[]).includes("continue")?"continue":"disabled":"new",[d.isStreaming,c,H]),_e=h.useMemo(()=>{if(d.isStreaming)return o("groups.inputDisabledInProgress","Discussion in progress…");if(!c)return;if(!H)return o("common.loading","Loading…");const p=H.state;if(p==="CLOSED")return o("groups.inputDisabledClosed","This discussion is closed");if(p==="FAILED"||p==="CANCELLED")return o("groups.inputDisabledEnded","This discussion has ended");if(p==="AWAITING_APPROVAL")return o("groups.inputDisabledApproval","Awaiting approval…");if(p==="AWAITING_HUMAN_INPUT")return o("groups.inputDisabledHumanTurn","Awaiting a member's turn…");if(p==="IN_PROGRESS"||p==="SYNTHESIZING")return o("groups.inputDisabledInProgress","Discussion in progress…");if(p==="COMPLETED")return o("groups.inputDisabledCompleted","Discussion completed")},[d.isStreaming,c,H,o]),O=h.useCallback((p,_)=>{e&&(se==="continue"&&c?(K(e,c,p),Z.info(o("groups.continueStreamStarted","Continuation started — streaming live"))):(ce.current=null,F(null),R(e,p,_),Z.info(o("groups.discussionStarted","Discussion started — streaming live"))))},[e,se,c,K,R,o]),V=h.useCallback(()=>{le(),ce.current=null,F(null)},[le]),Se=h.useCallback((p,_,Q,He)=>{e&&(ce.current=_,F(null),f(e,p,{decision:{verdict:_,note:Q},taskApprovals:He}))},[e,f]);h.useEffect(()=>{const p=ce.current;p&&(d.hitlResume?(Z.success(p==="APPROVED"?o("hitl.approved","Approved"):o("hitl.rejected","Rejected")),m.invalidateQueries({queryKey:["all-group-pending-approvals"]}),ce.current=null):d.state==="FAILED"&&(Z.error(d.error||o("common.error","Something went wrong")),ce.current=null))},[d.hitlResume,d.state,d.error,m,o]);const it=h.useCallback((p,_,Q)=>{e&&he.mutate({groupId:e,gcId:p,memberId:_,content:Q},{onSuccess:()=>{Z.success(o("groups.humanTurnSubmitted","Your response was recorded"))},onError:He=>{Z.error(zt(He,o))}})},[e,he,o]),We=h.useCallback(p=>{e&&oe.mutate({groupId:e,gcId:p},{onSuccess:()=>{Z.success(o("hitl.discussionCancelled","Discussion cancelled")),m.invalidateQueries({queryKey:["groupConversations",e]})},onError:_=>{Z.error(Ks(_))}})},[e,oe,m,o]),$e=h.useCallback(()=>{e&&m.invalidateQueries({queryKey:["groupConversations",e]})},[e,m]),ke=bs({mutationFn:({gcId:p,targetAgentId:_,question:Q})=>ir(e,p,Q,_),onSuccess:()=>{Z.success(o("groups.followupSent","Follow-up sent")),$e()},onError:p=>Z.error(zt(p,o))}),we=bs({mutationFn:({gcId:p})=>lr(e,p),onSuccess:()=>{Z.success(o("groups.discussionClosed","Discussion closed")),$e()},onError:p=>Z.error(zt(p,o))}),Fe=h.useCallback((p,_)=>{!e||!c||ke.mutate({gcId:c,targetAgentId:p,question:_})},[e,c,ke]),Ue=h.useCallback(()=>{!e||!c||we.mutate({gcId:c})},[e,c,we]),L=ke.isPending||we.isPending;h.useEffect(()=>{d.conversationId&&e&&(d.state==="IN_PROGRESS"||d.state==="COMPLETED"||d.state==="AWAITING_APPROVAL"||d.state==="AWAITING_HUMAN_INPUT")&&m.invalidateQueries({queryKey:["groupConversations",e]}),(d.state==="COMPLETED"||d.state==="AWAITING_APPROVAL"||d.state==="AWAITING_HUMAN_INPUT")&&d.conversationId&&F(d.conversationId)},[d.state,d.conversationId,e,m]);function Le(p){e&&ge.mutate({groupId:e,conversationId:p},{onSuccess:()=>{Z.success(o("common.delete")+" ✓"),c===p&&F(null)}})}function k(p){d.isStreaming&&D(),ce.current=null,F(p),Ne(!1)}if(te)return s.jsxs("div",{className:"space-y-4",children:[s.jsx(ze,{className:"h-8 w-1/3"}),s.jsx(ze,{className:"h-[70vh] w-full"})]});if(P||!I)return s.jsxs("div",{className:"space-y-4",children:[s.jsx(As,{to:"/manage/groups",label:o("groups.backToGroups","Back to Groups")}),s.jsx(Nr,{message:o("common.error"),onRetry:()=>z(),retryLabel:o("common.retry")})]});const Ae=Xn(I.style,o),B=Et[I.style]??Et.ROUND_TABLE,Ee=I.members?I:{...I,members:[]},b=d.isStreaming||d.state!=="CREATED"&&!c,A=!b&&w&&d.state!=="CREATED"&&c===d.conversationId,ae=(v==null?void 0:v.length)??0,de=s.jsx(s.Fragment,{children:E?s.jsxs("div",{className:"p-3 space-y-2",children:[s.jsx(ze,{className:"h-12 w-full"}),s.jsx(ze,{className:"h-12 w-full"})]}):ae>0?s.jsx("div",{className:"p-1 space-y-0.5",children:v.map(p=>s.jsxs("div",{role:"button",tabIndex:0,onClick:()=>k(p.id),onKeyDown:_=>{(_.key==="Enter"||_.key===" ")&&_.target===_.currentTarget&&(_.preventDefault(),k(p.id))},className:C("w-full text-start rounded-lg px-3 py-2 transition-all group/item cursor-pointer",d.isStreaming&&p.id===d.conversationId||c===p.id&&!b?"bg-primary/10 border border-primary/30":"hover:bg-secondary/50 border border-transparent"),"aria-current":d.isStreaming&&p.id===d.conversationId||c===p.id&&!b?!0:void 0,"data-testid":`discussion-item-${p.id}`,children:[s.jsx("p",{className:"text-xs font-medium text-foreground line-clamp-2",children:p.originalQuestion}),s.jsxs("div",{className:"flex items-center gap-1.5 mt-1",children:[(()=>{const _=Ro[p.state]??sn,Q=d.isStreaming&&p.id===d.conversationId;return s.jsxs("span",{className:C("text-[10px] font-medium flex items-center gap-1",_.color),"aria-live":Q?"polite":void 0,"aria-label":Q?o("groups.liveDiscussion","Live"):o(`groups.state.${p.state}`,_.label),"data-testid":Q?"discussion-live-badge":`discussion-state-${p.id}`,children:[s.jsx("span",{className:C("h-1.5 w-1.5 rounded-full shrink-0",Q?"bg-current animate-pulse":_.dot),"data-testid":`state-dot-${p.id}`}),Q?o("groups.liveDiscussion","Live"):o(`groups.state.${p.state}`,_.label)]})})(),s.jsx("span",{className:"text-[10px] text-muted-foreground",children:Kt(p.created,"date")}),s.jsx("button",{onClick:_=>{_.stopPropagation(),Le(p.id)},className:"ms-auto opacity-0 group-hover/item:opacity-100 rounded p-0.5 text-muted-foreground hover:text-destructive transition-all",title:o("common.delete"),"aria-label":o("common.delete"),children:s.jsx(Qn,{className:"h-3 w-3"})}),(p.state==="AWAITING_APPROVAL"||p.state==="AWAITING_HUMAN_INPUT"||p.state==="IN_PROGRESS")&&s.jsx("button",{onClick:_=>{_.stopPropagation(),j(p.id)},className:"opacity-0 group-hover/item:opacity-100 rounded p-0.5 text-muted-foreground hover:text-destructive transition-all",title:o("hitl.cancelDiscussion","Cancel discussion"),"aria-label":o("hitl.cancelDiscussion","Cancel discussion"),disabled:oe.isPending,children:s.jsx(qs,{className:"h-3 w-3"})})]})]},p.id))}):s.jsxs("div",{className:"flex flex-col items-center justify-center py-8 px-4 text-center",children:[s.jsx(Zs,{className:"h-8 w-8 text-muted-foreground/20 mb-2"}),s.jsx("p",{className:"text-xs text-muted-foreground",children:o("groups.noDiscussions","No discussions yet")}),s.jsx("p",{className:"text-[10px] text-muted-foreground/50 mt-1",children:o("groups.askBelow","Ask a question below to start")})]})});return s.jsxs("div",{className:C("flex flex-col",U?"fixed inset-0 z-50 bg-background p-4":"h-full min-h-0"),children:[s.jsxs("div",{className:"flex items-center gap-3 pb-3 border-b border-border shrink-0",children:[!U&&s.jsx(As,{to:"/manage/groups",label:""}),s.jsx(Vt,{className:"h-6 w-6 text-primary shrink-0"}),s.jsxs("div",{className:"flex-1 min-w-0",children:[s.jsx("h1",{className:"text-xl font-bold text-foreground truncate",children:I.name}),I.description&&s.jsx("p",{className:"text-xs text-muted-foreground truncate",children:I.description})]}),s.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[Ae&&s.jsxs(Oe,{variant:"outline",className:C("hidden sm:inline-flex",B.flowText),title:Ae.flow,children:[Ae.icon," ",Ae.label]}),s.jsxs(Oe,{variant:"secondary",children:[s.jsx(Vt,{className:"me-1 h-3 w-3"}),Ee.members.length]}),s.jsx(Do,{historyOpen:fe,setHistoryOpen:Ne,conversationCount:ae,isFullscreen:U,onNewDiscussion:V,children:de}),!U&&!Y&&s.jsx(je,{variant:"outline",size:"sm",onClick:()=>T(!0),title:o("groups.showDiscussions","Show discussions panel"),"aria-label":o("groups.showDiscussions","Show discussions panel"),className:"max-lg:hidden",children:s.jsx(Zn,{className:"h-4 w-4"})}),!U&&!y&&s.jsx(je,{variant:"outline",size:"sm",onClick:()=>G(!0),title:o("groups.showConfig","Show config panel"),"aria-label":o("groups.showConfig","Show config panel"),className:"max-xl:hidden",children:s.jsx(Er,{className:"h-4 w-4"})}),!U&&s.jsxs(je,{variant:"outline",size:"sm",onClick:()=>n(`/manage/groups/${e}/workspace?version=${l}`),title:o("groupWorkspace.title","Standing Team Workspace"),"data-testid":"open-workspace-btn",children:[s.jsx(Jn,{className:"h-4 w-4"}),s.jsx("span",{className:"hidden sm:inline",children:o("groupWorkspace.navLabel","Workspace")})]}),s.jsx(je,{variant:"outline",size:"sm",onClick:()=>Te(!U),title:U?o("groups.exitFullscreen","Exit fullscreen"):o("groups.enterFullscreen","Fullscreen"),children:U?s.jsx(er,{className:"h-4 w-4"}):s.jsx(tr,{className:"h-4 w-4"})})]})]}),s.jsxs("div",{className:"flex flex-1 min-h-0 mt-2 gap-2",children:[!U&&Y&&s.jsxs("div",{className:"w-64 shrink-0 flex flex-col rounded-xl border border-border bg-card overflow-hidden max-lg:hidden",children:[s.jsxs("div",{className:"p-3 border-b border-border flex items-center justify-between",children:[s.jsxs("h3",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground flex items-center gap-1.5",children:[s.jsx(Xs,{className:"h-3 w-3"}),o("groups.discussions","Discussions")]}),s.jsxs("div",{className:"flex items-center gap-1",children:[s.jsxs("button",{type:"button",onClick:V,className:"flex items-center gap-0.5 rounded px-1.5 py-0.5 text-[10px] font-medium text-primary hover:bg-primary/10 transition-colors",title:o("groups.newDiscussion","New Discussion"),"aria-label":o("groups.newDiscussion","New Discussion"),"data-testid":"new-discussion-btn",children:[s.jsx(Qs,{className:"h-3 w-3"}),o("groups.newShort","New")]}),s.jsx("button",{type:"button",onClick:()=>T(!1),className:"p-0.5 rounded hover:bg-secondary/50 text-muted-foreground hover:text-foreground transition-colors",title:o("groups.hideDiscussions","Hide discussions panel"),"aria-label":o("groups.hideDiscussions","Hide discussions panel"),children:s.jsx(sr,{className:"h-3.5 w-3.5"})})]})]}),s.jsx("div",{className:"flex-1 overflow-y-auto",children:de})]}),s.jsxs("div",{className:"flex-1 min-w-0 rounded-xl border border-border bg-card overflow-hidden flex flex-col",children:[d.state==="FAILED"&&d.errorKind==="config_drift"&&s.jsxs("div",{className:"flex items-start gap-2 border-b border-amber-500/30 bg-amber-500/5 px-4 py-2.5","data-testid":"group-drift-banner",children:[s.jsx(nr,{className:"mt-0.5 h-4 w-4 shrink-0 text-amber-500","aria-hidden":"true"}),s.jsxs("div",{className:"text-xs",children:[s.jsx("p",{className:"font-medium text-amber-600 dark:text-amber-400",children:o("groups.driftTitle","Group configuration changed while paused")}),s.jsx("p",{className:"mt-0.5 text-muted-foreground",children:o("groups.driftRecovery","The resume was aborted because the group's phases changed. The discussion is still awaiting approval — fix the configuration (Edit, in the Configuration panel) and approve again, or cancel it.")})]})]}),s.jsx("div",{className:"flex-1 min-h-0 overflow-hidden",children:s.jsx(yo,{conversation:b?null:H??null,streamState:b||A?d:void 0,isLoading:w&&!!c&&!A,discussionStyle:I.style,preConfiguredTasks:I.tasks,onApprove:Se,onCancelDiscussion:We,isDeciding:oe.isPending,onSubmitHumanInput:it,isSubmittingHumanInput:he.isPending,humanTurnTimeout:(xe=I.humanMemberConfig)==null?void 0:xe.turnTimeout})}),!b&&H&&(((Ie=H.availableActions)==null?void 0:Ie.length)??0)>0&&s.jsx(dr,{availableActions:H.availableActions,members:Ee.members,isPending:L,onFollowup:Fe,onCloseDiscussion:Ue}),s.jsx(Co,{onSubmit:O,isLoading:d.isStreaming,mode:se==="continue"?"continue":"new",disabled:se==="disabled",disabledMessage:_e})]}),y&&!U&&s.jsxs("div",{className:"w-72 shrink-0 rounded-xl border border-border bg-card overflow-hidden flex flex-col max-xl:hidden",children:[s.jsxs("div",{className:"p-3 border-b border-border flex items-center justify-between",children:[s.jsxs("h3",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground flex items-center gap-1.5",children:[s.jsx(rr,{className:"h-3 w-3"}),o("groups.configuration","Configuration")]}),s.jsx("button",{type:"button",onClick:()=>G(!1),className:"p-0.5 rounded hover:bg-secondary/50 text-muted-foreground hover:text-foreground transition-colors",title:o("groups.hideConfig","Hide config panel"),"aria-label":o("groups.hideConfig","Hide config panel"),children:s.jsx(Ar,{className:"h-3.5 w-3.5"})})]}),s.jsx(mr,{config:Ee,groupId:e,groupVersion:l,className:"flex-1 min-h-0"},e)]})]}),s.jsx(or,{open:q!==null,onOpenChange:p=>{p||j(null)},title:o("hitl.confirmCancelGroupTitle","Cancel discussion?"),description:o("hitl.confirmCancelGroupDescription","Cancel this discussion? Any in-progress work is aborted."),confirmLabel:o("hitl.confirmCancelGroupButton","Cancel discussion"),cancelLabel:o("hitl.confirmDismiss","Go back"),variant:"destructive",isPending:oe.isPending,onConfirm:()=>{q&&We(q),j(null)}})]})}function Do({historyOpen:e,setHistoryOpen:n,conversationCount:a,isFullscreen:l,onNewDiscussion:o,children:m}){const{t:c}=Ve(),F=h.useRef(null);return h.useEffect(()=>{if(!e)return;function y(G){F.current&&!F.current.contains(G.target)&&n(!1)}return document.addEventListener("mousedown",y),()=>document.removeEventListener("mousedown",y)},[e,n]),s.jsxs("div",{ref:F,className:C("relative",!l&&"lg:hidden"),children:[s.jsxs(je,{variant:"outline",size:"sm",className:"relative",onClick:()=>n(!e),children:[s.jsx(yr,{className:"h-4 w-4"}),a>0&&s.jsx("span",{className:"absolute -top-1 -end-1 flex h-4 w-4 items-center justify-center rounded-full bg-primary text-[9px] font-bold text-primary-foreground",children:a})]}),e&&s.jsxs("div",{className:"absolute end-0 top-full mt-1 z-50 w-72 rounded-xl border border-border bg-card shadow-lg max-h-80 overflow-y-auto animate-in fade-in-0 zoom-in-95 duration-150",children:[s.jsxs("div",{className:"p-3 border-b border-border flex items-center justify-between",children:[s.jsxs("h3",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground flex items-center gap-1.5",children:[s.jsx(Xs,{className:"h-3 w-3"}),c("groups.discussions","Discussions")]}),o&&s.jsxs("button",{type:"button",onClick:()=>{o(),n(!1)},className:"flex items-center gap-0.5 rounded px-1.5 py-0.5 text-[10px] font-medium text-primary hover:bg-primary/10 transition-colors",title:c("groups.newDiscussion","New Discussion"),"aria-label":c("groups.newDiscussion","New Discussion"),"data-testid":"new-discussion-btn-mobile",children:[s.jsx(Qs,{className:"h-3 w-3"}),c("groups.newShort","New")]})]}),m]})]})}export{ta as GroupDetailPage}; diff --git a/src/main/resources/META-INF/resources/assets/group-templates-Umnu69fN.js b/src/main/resources/META-INF/resources/assets/group-templates-CXjG7CAc.js similarity index 68% rename from src/main/resources/META-INF/resources/assets/group-templates-Umnu69fN.js rename to src/main/resources/META-INF/resources/assets/group-templates-CXjG7CAc.js index 6c5686c755..b42d1143da 100644 --- a/src/main/resources/META-INF/resources/assets/group-templates-Umnu69fN.js +++ b/src/main/resources/META-INF/resources/assets/group-templates-CXjG7CAc.js @@ -1 +1 @@ -import{aZ as b,u as k,aq as B,a_ as P,c as S,r as d,j as e,$ as _,b as M,e as U,S as p,a3 as F,k as K,a1 as H,w as O,b_ as V,R as z,_ as D,ea as Q}from"./index-BY6d8wze.js";import{E}from"./error-state-BXe3bnJT.js";import{E as W}from"./empty-state-DB7ZSzVv.js";import{B as G}from"./back-link-D2LpIJ51.js";import{L as w}from"./layout-template-CJfl10R8.js";function Y(){return b.get("/groupstore/templates")}function Z(s){return b.get(`/groupstore/templates/${encodeURIComponent(s)}`)}function J(s,a){return b.post(`/groupstore/templates/${encodeURIComponent(s)}/instantiate`,a)}const A=["group-templates"],X=["groups"];function ee(){return k({queryKey:A,queryFn:()=>Y(),staleTime:1/0})}function te(s){return k({queryKey:[...A,s],queryFn:()=>Z(s),enabled:!!s,staleTime:1/0})}function se(){const s=B();return P({mutationFn:({templateId:a,request:t})=>J(a,t),onSuccess:()=>s.invalidateQueries({queryKey:X})})}const R={"research-pod":"🔬","editorial-team":"📝","ops-task-force":"🎯","decision-board":"⚖️","negotiation-table":"🤝"};function ae(s){const a=new Set;if(!s)return a;const t=Array.isArray(s.members)?s.members:[];for(const o of t)o&&typeof o=="object"&&o.memberType==="HUMAN"&&typeof o.agentId=="string"&&o.agentId.startsWith("$")&&a.add(o.agentId.slice(1));return a}function me(){const{t:s}=S(),[a,t]=d.useState(null);return a?e.jsx(oe,{templateId:a,onBack:()=>t(null)}):e.jsx(re,{onSelect:t,t:s})}function re({onSelect:s,t:a}){const{data:t,isLoading:o,isError:n,refetch:x}=ee();return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(G,{to:"/manage/groups",label:a("groups.backToGroups","Back to Groups")}),e.jsxs("h1",{className:"flex items-center gap-2 text-3xl font-bold text-foreground",children:[e.jsx(w,{className:"h-8 w-8 text-primary"}),a("groupTemplates.title","Group Templates")]}),e.jsx("p",{className:"text-muted-foreground",children:a("groupTemplates.subtitle","Start from a packaged, pre-tuned discussion — just assign agents to its named roles.")})]}),o&&e.jsx("div",{className:"cq-card-grid",children:Array.from({length:5}).map((c,h)=>e.jsxs("div",{className:"rounded-xl border border-border bg-card p-5 space-y-3",children:[e.jsx(p,{className:"h-6 w-2/3"}),e.jsx(p,{className:"h-4 w-full"}),e.jsx(p,{className:"h-4 w-1/2"})]},h))}),n&&e.jsx(E,{message:a("common.error"),onRetry:()=>x(),retryLabel:a("common.retry")}),!o&&!n&&(t??[]).length===0&&e.jsx(W,{icon:w,title:a("groupTemplates.empty","No templates available"),description:a("groupTemplates.emptyDescription","This server ships no group templates. You can still build a group from scratch with the wizard.")}),!o&&!n&&(t??[]).length>0&&e.jsx("div",{className:"cq-card-grid","data-testid":"template-gallery",children:(t??[]).map(c=>e.jsxs("button",{type:"button",onClick:()=>s(c.templateId),className:"flex flex-col items-start gap-2 rounded-xl border border-border bg-card p-5 text-start transition-all hover:border-primary/40 hover:shadow-md","data-testid":`template-card-${c.templateId}`,children:[e.jsx("span",{className:"text-3xl","aria-hidden":"true",children:R[c.templateId]??"🧩"}),e.jsx("h3",{className:"text-base font-semibold text-foreground",children:c.title}),e.jsx("p",{className:"text-sm text-muted-foreground line-clamp-3",children:c.description}),e.jsxs("span",{className:"mt-auto flex items-center gap-1 pt-2 text-xs text-muted-foreground",children:[e.jsx(V,{className:"h-3 w-3","aria-hidden":"true"}),a("groupTemplates.roleCount",{defaultValue:"{{count}} role to assign",defaultValue_other:"{{count}} roles to assign",count:c.requiredRoles.length})]})]},c.templateId))})]})}function oe({templateId:s,onBack:a}){const{t}=S(),o=_(),{data:n,isLoading:x,isError:c,refetch:h}=te(s),{data:j}=M(200),C=j?U(j):[],f=se(),[y,I]=d.useState(""),[g,N]=d.useState({}),[v,T]=d.useState(null),q=d.useMemo(()=>ae(n==null?void 0:n.config),[n==null?void 0:n.config]);if(x)return e.jsxs("div",{className:"space-y-4",children:[e.jsx(p,{className:"h-8 w-1/3"}),e.jsx(p,{className:"h-64 w-full"})]});if(c||!n)return e.jsxs("div",{className:"space-y-4",children:[e.jsx(G,{to:"/manage/groups/templates",label:t("common.back","Back")}),e.jsx(E,{message:t("common.error"),onRetry:()=>h(),retryLabel:t("common.retry")})]});const{manifest:u}=n,$=u.requiredRoles.every(r=>{var l;return!!((l=g[r.role])!=null&&l.trim())});function L(){T(null);const r=Object.fromEntries(Object.entries(g).map(([l,i])=>[l,i.trim()]));f.mutate({templateId:s,request:{name:y.trim()||void 0,roleAssignments:r}},{onSuccess:l=>{D.success(t("groupTemplates.created","Group created from template"));try{const{id:i,version:m}=Q(l.location);o(`/manage/groups/${i}?version=${m}`)}catch{o("/manage/groups")}},onError:l=>T(z(l))})}return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("button",{type:"button",onClick:a,className:"flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground transition-colors","data-testid":"template-back",children:[e.jsx(F,{className:"h-4 w-4"}),t("groupTemplates.backToGallery","Back to templates")]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{className:"text-3xl","aria-hidden":"true",children:R[s]??"🧩"}),e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-bold text-foreground",children:u.title}),e.jsx("p",{className:"text-sm text-muted-foreground",children:u.description})]})]}),e.jsxs("div",{className:"max-w-xl space-y-4 rounded-xl border border-border bg-card p-5",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"template-group-name",className:"mb-1 block text-xs font-medium text-muted-foreground",children:t("groupTemplates.nameLabel","Group name")}),e.jsx("input",{id:"template-group-name",value:y,onChange:r=>I(r.target.value),placeholder:u.title,className:"w-full rounded-lg border border-input bg-background px-3 py-2 text-sm placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring","data-testid":"template-group-name"})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsx("h3",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:t("groupTemplates.assignRoles","Assign roles")}),u.requiredRoles.map(r=>{const l=q.has(r.role);return e.jsxs("div",{className:"space-y-1",children:[e.jsxs("label",{htmlFor:`template-role-${r.role}`,className:"flex items-center gap-1.5 text-xs font-medium text-foreground",children:[r.role,l&&e.jsx("span",{className:"rounded bg-primary/10 px-1 py-0 text-[9px] font-medium text-primary",children:t("groupWizard.memberTypeHuman","Human")})]}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:r.description}),l?e.jsx("input",{id:`template-role-${r.role}`,value:g[r.role]??"",onChange:i=>N(m=>({...m,[r.role]:i.target.value})),placeholder:t("groupWizard.humanPrincipalIdPlaceholder","The user's login/principal id"),className:"w-full rounded-lg border border-input bg-background px-3 py-2 text-sm placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring","data-testid":`template-role-input-${r.role}`}):e.jsxs("select",{id:`template-role-${r.role}`,value:g[r.role]??"",onChange:i=>N(m=>({...m,[r.role]:i.target.value})),className:"w-full rounded-lg border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring","data-testid":`template-role-input-${r.role}`,children:[e.jsx("option",{value:"",children:t("groupTemplates.selectAgent","Select an agent…")}),C.map(i=>e.jsx("option",{value:i.id,children:i.name},i.id))]})]},r.role)})]}),v&&e.jsx("p",{className:"text-xs text-destructive","data-testid":"template-submit-error",children:v}),e.jsxs(K,{onClick:L,disabled:!$||f.isPending,className:"w-full","data-testid":"template-create-button",children:[f.isPending?e.jsx(H,{className:"h-4 w-4 animate-spin"}):e.jsx(O,{className:"h-4 w-4"}),t("groupTemplates.createButton","Create Group")]})]})]})}export{me as GroupTemplatesPage}; +import{aZ as b,u as k,aq as B,a_ as P,c as S,r as d,j as e,$ as _,b as M,e as U,S as p,a3 as F,k as K,a1 as H,w as O,b$ as V,R as z,_ as D,eb as Q}from"./index-BnLj1hck.js";import{E}from"./error-state-D4qtZYFq.js";import{E as W}from"./empty-state-DxZE48rx.js";import{B as G}from"./back-link-tBVRORpr.js";import{L as w}from"./layout-template-CbFD6ZSF.js";function Y(){return b.get("/groupstore/templates")}function Z(s){return b.get(`/groupstore/templates/${encodeURIComponent(s)}`)}function J(s,r){return b.post(`/groupstore/templates/${encodeURIComponent(s)}/instantiate`,r)}const A=["group-templates"],X=["groups"];function ee(){return k({queryKey:A,queryFn:()=>Y(),staleTime:1/0})}function te(s){return k({queryKey:[...A,s],queryFn:()=>Z(s),enabled:!!s,staleTime:1/0})}function se(){const s=B();return P({mutationFn:({templateId:r,request:t})=>J(r,t),onSuccess:()=>s.invalidateQueries({queryKey:X})})}const R={"research-pod":"🔬","editorial-team":"📝","ops-task-force":"🎯","decision-board":"⚖️","negotiation-table":"🤝"};function re(s){const r=new Set;if(!s)return r;const t=Array.isArray(s.members)?s.members:[];for(const o of t)o&&typeof o=="object"&&o.memberType==="HUMAN"&&typeof o.agentId=="string"&&o.agentId.startsWith("$")&&r.add(o.agentId.slice(1));return r}function me(){const{t:s}=S(),[r,t]=d.useState(null);return r?e.jsx(oe,{templateId:r,onBack:()=>t(null)}):e.jsx(ae,{onSelect:t,t:s})}function ae({onSelect:s,t:r}){const{data:t,isLoading:o,isError:n,refetch:x}=ee();return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(G,{to:"/manage/groups",label:r("groups.backToGroups","Back to Groups")}),e.jsxs("h1",{className:"flex items-center gap-2 text-3xl font-bold text-foreground",children:[e.jsx(w,{className:"h-8 w-8 text-primary"}),r("groupTemplates.title","Group Templates")]}),e.jsx("p",{className:"text-muted-foreground",children:r("groupTemplates.subtitle","Start from a packaged, pre-tuned discussion — just assign agents to its named roles.")})]}),o&&e.jsx("div",{className:"cq-card-grid",children:Array.from({length:5}).map((c,h)=>e.jsxs("div",{className:"rounded-xl border border-border bg-card p-5 space-y-3",children:[e.jsx(p,{className:"h-6 w-2/3"}),e.jsx(p,{className:"h-4 w-full"}),e.jsx(p,{className:"h-4 w-1/2"})]},h))}),n&&e.jsx(E,{message:r("common.error"),onRetry:()=>x(),retryLabel:r("common.retry")}),!o&&!n&&(t??[]).length===0&&e.jsx(W,{icon:w,title:r("groupTemplates.empty","No templates available"),description:r("groupTemplates.emptyDescription","This server ships no group templates. You can still build a group from scratch with the wizard.")}),!o&&!n&&(t??[]).length>0&&e.jsx("div",{className:"cq-card-grid","data-testid":"template-gallery",children:(t??[]).map(c=>e.jsxs("button",{type:"button",onClick:()=>s(c.templateId),className:"flex flex-col items-start gap-2 rounded-xl border border-border bg-card p-5 text-start transition-all hover:border-primary/40 hover:shadow-md","data-testid":`template-card-${c.templateId}`,children:[e.jsx("span",{className:"text-3xl","aria-hidden":"true",children:R[c.templateId]??"🧩"}),e.jsx("h3",{className:"text-base font-semibold text-foreground",children:c.title}),e.jsx("p",{className:"text-sm text-muted-foreground line-clamp-3",children:c.description}),e.jsxs("span",{className:"mt-auto flex items-center gap-1 pt-2 text-xs text-muted-foreground",children:[e.jsx(V,{className:"h-3 w-3","aria-hidden":"true"}),r("groupTemplates.roleCount",{defaultValue:"{{count}} role to assign",defaultValue_other:"{{count}} roles to assign",count:c.requiredRoles.length})]})]},c.templateId))})]})}function oe({templateId:s,onBack:r}){const{t}=S(),o=_(),{data:n,isLoading:x,isError:c,refetch:h}=te(s),{data:j}=M(200),C=j?U(j):[],f=se(),[y,I]=d.useState(""),[g,N]=d.useState({}),[v,T]=d.useState(null),q=d.useMemo(()=>re(n==null?void 0:n.config),[n==null?void 0:n.config]);if(x)return e.jsxs("div",{className:"space-y-4",children:[e.jsx(p,{className:"h-8 w-1/3"}),e.jsx(p,{className:"h-64 w-full"})]});if(c||!n)return e.jsxs("div",{className:"space-y-4",children:[e.jsx(G,{to:"/manage/groups/templates",label:t("common.back","Back")}),e.jsx(E,{message:t("common.error"),onRetry:()=>h(),retryLabel:t("common.retry")})]});const{manifest:u}=n,$=u.requiredRoles.every(a=>{var l;return!!((l=g[a.role])!=null&&l.trim())});function L(){T(null);const a=Object.fromEntries(Object.entries(g).map(([l,i])=>[l,i.trim()]));f.mutate({templateId:s,request:{name:y.trim()||void 0,roleAssignments:a}},{onSuccess:l=>{D.success(t("groupTemplates.created","Group created from template"));try{const{id:i,version:m}=Q(l.location);o(`/manage/groups/${i}?version=${m}`)}catch{o("/manage/groups")}},onError:l=>T(z(l))})}return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("button",{type:"button",onClick:r,className:"flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground transition-colors","data-testid":"template-back",children:[e.jsx(F,{className:"h-4 w-4"}),t("groupTemplates.backToGallery","Back to templates")]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{className:"text-3xl","aria-hidden":"true",children:R[s]??"🧩"}),e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-bold text-foreground",children:u.title}),e.jsx("p",{className:"text-sm text-muted-foreground",children:u.description})]})]}),e.jsxs("div",{className:"max-w-xl space-y-4 rounded-xl border border-border bg-card p-5",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"template-group-name",className:"mb-1 block text-xs font-medium text-muted-foreground",children:t("groupTemplates.nameLabel","Group name")}),e.jsx("input",{id:"template-group-name",value:y,onChange:a=>I(a.target.value),placeholder:u.title,className:"w-full rounded-lg border border-input bg-background px-3 py-2 text-sm placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring","data-testid":"template-group-name"})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsx("h3",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:t("groupTemplates.assignRoles","Assign roles")}),u.requiredRoles.map(a=>{const l=q.has(a.role);return e.jsxs("div",{className:"space-y-1",children:[e.jsxs("label",{htmlFor:`template-role-${a.role}`,className:"flex items-center gap-1.5 text-xs font-medium text-foreground",children:[a.role,l&&e.jsx("span",{className:"rounded bg-primary/10 px-1 py-0 text-[9px] font-medium text-primary",children:t("groupWizard.memberTypeHuman","Human")})]}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:a.description}),l?e.jsx("input",{id:`template-role-${a.role}`,value:g[a.role]??"",onChange:i=>N(m=>({...m,[a.role]:i.target.value})),placeholder:t("groupWizard.humanPrincipalIdPlaceholder","The user's login/principal id"),className:"w-full rounded-lg border border-input bg-background px-3 py-2 text-sm placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring","data-testid":`template-role-input-${a.role}`}):e.jsxs("select",{id:`template-role-${a.role}`,value:g[a.role]??"",onChange:i=>N(m=>({...m,[a.role]:i.target.value})),className:"w-full rounded-lg border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring","data-testid":`template-role-input-${a.role}`,children:[e.jsx("option",{value:"",children:t("groupTemplates.selectAgent","Select an agent…")}),C.map(i=>e.jsx("option",{value:i.id,children:i.name},i.id))]})]},a.role)})]}),v&&e.jsx("p",{className:"text-xs text-destructive","data-testid":"template-submit-error",children:v}),e.jsxs(K,{onClick:L,disabled:!$||f.isPending,className:"w-full","data-testid":"template-create-button",children:[f.isPending?e.jsx(H,{className:"h-4 w-4 animate-spin"}):e.jsx(O,{className:"h-4 w-4"}),t("groupTemplates.createButton","Create Group")]})]})]})}export{me as GroupTemplatesPage}; diff --git a/src/main/resources/META-INF/resources/assets/group-wizard-CBiV2wHJ.js b/src/main/resources/META-INF/resources/assets/group-wizard-CR_3Z9ix.js similarity index 96% rename from src/main/resources/META-INF/resources/assets/group-wizard-CBiV2wHJ.js rename to src/main/resources/META-INF/resources/assets/group-wizard-CR_3Z9ix.js index 42762da965..c1349b7fe3 100644 --- a/src/main/resources/META-INF/resources/assets/group-wizard-CBiV2wHJ.js +++ b/src/main/resources/META-INF/resources/assets/group-wizard-CR_3Z9ix.js @@ -1 +1 @@ -import{c as E,r as k,e2 as Ne,dg as we,dh as V,j as e,C as q,dj as Te,h as re,N as ke,a3 as te,w as D,ah as ze,b_ as R,X as ae,a4 as _,i as g,q as Pe,a1 as L,df as H,P as oe,di as ne,T as M,dr as X,b as We,e as Se,Z as ie,V as Ae,ak as A,al as de,dy as le,dz as ce,cM as $,aE as P,_ as z,e3 as Ie,p as Ee,aj as B,e7 as Ce,aT as Re,a7 as O,dk as Me}from"./index-BY6d8wze.js";import{B as N}from"./badge-B8rrdXaB.js";import{S as me}from"./secret-key-picker-TXey-VQE.js";import{R as Oe}from"./refetch-error-notice-Dhb_O4GR.js";import{u as Ge}from"./group-config-yXQVQMNQ.js";import{g as Fe,D as He}from"./group-templates-B4YwvSlk.js";import{W as J}from"./wand-sparkles-DCdkrkbT.js";import{S as Y}from"./star-cKGUeK0l.js";import{U as $e}from"./user-plus-CWm5kmVr.js";import{U as ue}from"./user-check-DqvaRbNC.js";import{L as xe}from"./link-2-VQoGUb0U.js";import"./use-secrets-C_oj4VYh.js";import"./eye-off-DQKzJHI5.js";import"./eye-Dbrf-yrM.js";function Ke(r){return r.hitlEnabled?r.approvalPhases.length===0?!1:B(r.hitl.timeoutPolicy)?!!r.hitl.approvalTimeout&&A(r.hitl.approvalTimeout):!0:!0}function pe(r,a,s){return{agentId:"",displayName:a||"",speakingOrder:r+1,role:s||null,memberType:"AGENT",mode:"new",systemPrompt:"",provider:"anthropic",model:"",apiKey:"",created:!1,creating:!1}}function ge(){return{agentId:"",displayName:"Moderator",speakingOrder:0,role:"MODERATOR",memberType:"AGENT",mode:"new",systemPrompt:"You are a skilled moderator. Synthesize the group's discussion into a clear, balanced summary that captures key insights, areas of agreement, and remaining disagreements.",provider:"anthropic",model:"",apiKey:"",created:!1,creating:!1}}function K(r){return r.memberType==="AGENT"&&r.mode==="new"&&!r.created&&!r.agentId}const se={name:"",description:"",style:"ROUND_TABLE",maxRounds:2,members:[],moderator:null,hitlEnabled:!1,hitl:Ne,approvalPhases:[],humanTurnTimeout:"",humanOnTimeout:"SKIP_TURN"},F=[{id:"template",icon:D},{id:"config",icon:ze},{id:"members",icon:R},{id:"review",icon:ae}],I={ROUND_TABLE:{bg:"bg-amber-500/10",border:"border-amber-500/30",text:"text-amber-600 dark:text-amber-400",accent:"bg-amber-500"},PEER_REVIEW:{bg:"bg-teal-500/10",border:"border-teal-500/30",text:"text-teal-600 dark:text-teal-400",accent:"bg-teal-500"},DEVIL_ADVOCATE:{bg:"bg-rose-500/10",border:"border-rose-500/30",text:"text-rose-600 dark:text-rose-400",accent:"bg-rose-500"},DELPHI:{bg:"bg-violet-500/10",border:"border-violet-500/30",text:"text-violet-600 dark:text-violet-400",accent:"bg-violet-500"},DEBATE:{bg:"bg-indigo-500/10",border:"border-indigo-500/30",text:"text-indigo-600 dark:text-indigo-400",accent:"bg-indigo-500"},TASK_FORCE:{bg:"bg-orange-500/10",border:"border-orange-500/30",text:"text-orange-600 dark:text-orange-400",accent:"bg-orange-500"},NEGOTIATION:{bg:"bg-emerald-500/10",border:"border-emerald-500/30",text:"text-emerald-600 dark:text-emerald-400",accent:"bg-emerald-500"},CUSTOM:{bg:"bg-secondary/20",border:"border-border",text:"text-foreground",accent:"bg-muted-foreground"}};function cr(){const{t:r}=E(),[a,s]=k.useState(0),[t,d]=k.useState(se),[l,n]=k.useState(null),[m,i]=k.useState(1),[f,o]=k.useState(null),[y,u]=k.useState(!1),p=we(),v=V(),j=p.isPending||y,h=F[a],U=k.useCallback(b=>d(x=>({...x,...b})),[]);function he(b){U({name:b.name,description:b.description,style:b.style,maxRounds:b.maxRounds,members:b.roles.map((x,C)=>pe(C,x.displayName,x.role)),moderator:b.moderatorSuggested?ge():null,approvalPhases:[]}),s(1)}function be(){if(!h)return!1;switch(h.id){case"template":return!0;case"config":return t.name.trim().length>0&&Ke(t)&&ne(t.style,v);case"members":return!(t.members.length<2||!t.members.every(x=>x.displayName.trim()?x.memberType==="HUMAN"||x.memberType==="GROUP"?!!x.agentId.trim():!!x.agentId||x.mode==="new":!1)||t.humanTurnTimeout.trim()&&!A(t.humanTurnTimeout));case"review":return!0;default:return!1}}function fe(){a0&&s(a-1)}async function je(){var W,Z,Q;u(!0);const b=[...t.members];let x=t.moderator?{...t.moderator}:null;const C=b.map((c,w)=>({slot:c,index:w})).filter(({slot:c})=>K(c));for(const{slot:c,index:w}of C){o(r("groupWizard.creatingSlot",{name:c.displayName}));try{const T=await $({name:`${t.name} — ${c.displayName}`.trim(),systemPrompt:c.systemPrompt||`You are ${c.displayName}${c.role?`, a ${c.role} expert`:""}. Provide clear, actionable insights.`,provider:c.provider||"anthropic",model:c.model||(((W=P.find(S=>S.id===(c.provider||"anthropic")))==null?void 0:W.defaultModel)??"claude-sonnet-5"),apiKey:c.apiKey||void 0,deploy:!0});b[w]={...b[w],agentId:T.agentId,created:!0}}catch(T){z.error(r("groupWizard.agentCreateFailed",{error:T instanceof Error?T.message:String(T)})),u(!1),o(null),d(S=>({...S,members:b}));return}}if(x&&K(x)){o(r("groupWizard.creatingModerator"));try{const c=await $({name:`${t.name} — Moderator`.trim(),systemPrompt:x.systemPrompt||"You are a skilled moderator. Synthesize the discussion into a clear, balanced summary.",provider:x.provider||"anthropic",model:x.model||(((Z=P.find(w=>w.id===(x.provider||"anthropic")))==null?void 0:Z.defaultModel)??"claude-sonnet-5"),apiKey:x.apiKey||void 0,deploy:!0});x={...x,agentId:c.agentId,created:!0}}catch(c){z.error(r("groupWizard.agentCreateFailed",{error:c instanceof Error?c.message:String(c)})),u(!1),o(null);return}}d(c=>({...c,members:b,moderator:x})),o(r("groupWizard.creatingGroup"));const G={name:t.name,description:t.description,members:b.filter(c=>c.agentId||c.displayName).map(c=>({agentId:c.agentId,displayName:c.displayName,speakingOrder:c.speakingOrder,role:c.role,memberType:c.memberType})),moderatorAgentId:(x==null?void 0:x.agentId)||null,style:t.style,maxRounds:t.maxRounds,phases:t.hitlEnabled&&t.approvalPhases.length>0?Ie(X(t.style,t.maxRounds),t.approvalPhases):null,protocol:{agentTimeoutSeconds:He,onAgentFailure:"SKIP",maxRetries:2,onMemberUnavailable:"SKIP"},hitlConfig:t.hitlEnabled?{approvalTimeout:((Q=t.hitl.approvalTimeout)==null?void 0:Q.trim())||null,timeoutPolicy:t.hitl.timeoutPolicy,granularity:t.style==="TASK_FORCE"?t.hitl.granularity:"PHASE",onTaskRejection:t.hitl.onTaskRejection}:void 0,humanMemberConfig:b.some(c=>c.memberType==="HUMAN")?{turnTimeout:t.humanTurnTimeout.trim()||null,onTimeout:t.humanOnTimeout}:void 0};p.mutate(G,{onSuccess:c=>{z.success(r("groupWizard.success"));let w="new",T=1;try{const S=c==null?void 0:c.location;if(S){const ee=Ee(S);w=ee.id,T=ee.version}}catch{w=typeof c=="string"?c:(c==null?void 0:c.id)??"new"}n(w),i(T),u(!1),o(null)},onError:()=>{z.error(r("common.error")),u(!1),o(null)}})}if(l)return e.jsx("div",{className:"mx-auto max-w-2xl space-y-8",children:e.jsxs("div",{className:"rounded-2xl border border-emerald-500/30 bg-card p-8 text-center shadow-lg",children:[e.jsx("div",{className:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-emerald-500/10",children:e.jsx(q,{className:"h-8 w-8 text-emerald-500"})}),e.jsx("h2",{className:"text-2xl font-bold text-foreground",children:r("groupWizard.created")}),e.jsxs("p",{className:"mt-2 text-muted-foreground",children:[t.name," — ",t.members.length," ",r("groups.members")," · ",Te(t.style,r)]}),e.jsxs("div",{className:"mt-6 flex items-center justify-center gap-3",children:[e.jsxs(re,{to:`/manage/groups/${l}?version=${m}`,className:"inline-flex items-center gap-2 rounded-lg bg-primary px-5 py-2.5 text-sm font-medium text-primary-foreground shadow-sm transition-all hover:bg-primary/90 hover:shadow-md active:scale-[0.98]",children:[r("groupWizard.viewGroup"),e.jsx(ke,{className:"h-4 w-4"})]}),e.jsx("button",{onClick:()=>{d(se),s(0),n(null),i(1)},className:"inline-flex items-center gap-2 rounded-lg border border-border px-4 py-2.5 text-sm font-medium text-muted-foreground transition-colors hover:bg-secondary hover:text-foreground",children:r("groupWizard.createAnother")})]})]})});const ve=I[t.style]||I.ROUND_TABLE;return e.jsxs("div",{className:"mx-auto max-w-3xl space-y-8",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(re,{to:"/manage/groups",className:"inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground transition-colors",children:[e.jsx(te,{className:"h-4 w-4"}),r("groupWizard.backToGroups")]}),e.jsxs("h1",{className:"flex items-center gap-3 text-3xl font-bold text-foreground",children:[e.jsx("div",{className:"flex h-10 w-10 items-center justify-center rounded-xl bg-primary/10",children:e.jsx(J,{className:"h-5 w-5 text-primary"})}),r("groupWizard.title")]}),e.jsx("p",{className:"text-muted-foreground",children:r("groupWizard.subtitle")})]}),e.jsx("div",{className:"flex items-center gap-2","data-testid":"group-wizard-steps",children:F.map((b,x)=>{const C=b.icon,G=x===a,W=xxa,className:g("flex h-10 w-10 shrink-0 items-center justify-center rounded-full border-2 transition-all duration-300",G&&"border-primary bg-primary text-primary-foreground shadow-md shadow-primary/25 scale-110",W&&"border-emerald-500 bg-emerald-500 text-white",!G&&!W&&"border-border bg-card text-muted-foreground"),children:W?e.jsx(_,{className:"h-4 w-4"}):e.jsx(C,{className:"h-4 w-4"})}),xs(1)}),(h==null?void 0:h.id)==="config"&&e.jsx(_e,{state:t,onChange:U}),(h==null?void 0:h.id)==="members"&&e.jsx(Ue,{state:t,onChange:U,styleColors:ve}),(h==null?void 0:h.id)==="review"&&e.jsx(Ve,{state:t})]}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("button",{onClick:ye,disabled:a===0,className:g("inline-flex items-center gap-2 rounded-lg px-4 py-2.5 text-sm font-medium transition-colors",a===0?"invisible":"text-muted-foreground hover:bg-secondary hover:text-foreground"),"data-testid":"group-wizard-back",children:[e.jsx(te,{className:"h-4 w-4"}),r("common.back","Back")]}),(h==null?void 0:h.id)!=="review"?e.jsxs("button",{onClick:fe,disabled:!be(),className:"inline-flex items-center gap-2 rounded-lg bg-primary px-5 py-2.5 text-sm font-medium text-primary-foreground shadow-sm transition-all hover:bg-primary/90 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 active:scale-[0.98]","data-testid":"group-wizard-next",children:[r("common.next","Next"),e.jsx(Pe,{className:"h-4 w-4"})]}):e.jsx("button",{onClick:()=>je(),disabled:j,className:"inline-flex items-center gap-2 rounded-lg bg-primary px-5 py-2.5 text-sm font-medium text-primary-foreground shadow-sm transition-all hover:bg-primary/90 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 active:scale-[0.98]","data-testid":"group-wizard-create",children:j?e.jsxs(e.Fragment,{children:[e.jsx(L,{className:"h-4 w-4 animate-spin"}),f||r("groupWizard.createGroup")]}):e.jsxs(e.Fragment,{children:[e.jsx(ae,{className:"h-4 w-4"}),r("groupWizard.createGroup")]})})]})]})}function De({onSelect:r,onSkip:a}){const{t:s}=E(),t=V(),d=Fe(s).filter(l=>t.includes(l.style));return e.jsxs("div",{children:[e.jsx("h2",{className:"text-xl font-semibold text-foreground",children:s("groupWizard.templateTitle")}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:s("groupWizard.templateDesc")}),e.jsxs("div",{className:"mt-6 grid grid-cols-1 gap-4 sm:grid-cols-2","data-testid":"template-grid",children:[d.map(l=>{const n=H(l.style,s);return e.jsxs("button",{onClick:()=>r(l),className:"group relative flex flex-col items-start gap-3 rounded-xl border-2 border-border p-5 text-start transition-all duration-200 hover:border-primary/40 hover:shadow-md","data-testid":`template-${l.key}`,children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"flex h-12 w-12 items-center justify-center rounded-xl bg-primary/10 text-2xl",children:l.icon}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-semibold text-foreground",children:l.name}),e.jsxs("p",{className:"text-xs text-muted-foreground",children:[n==null?void 0:n.icon," ",n==null?void 0:n.label]})]})]}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed line-clamp-2",children:l.description}),e.jsxs("div",{className:"flex flex-wrap gap-1.5",children:[l.roles.slice(0,4).map((m,i)=>e.jsx(N,{variant:"secondary",className:"text-[10px]",children:m.role},i)),l.roles.length>4&&e.jsxs(N,{variant:"outline",className:"text-[10px]",children:["+",l.roles.length-4]})]})]},l.key)}),e.jsxs("button",{onClick:a,className:"flex flex-col items-center justify-center gap-3 rounded-xl border-2 border-dashed border-border p-5 text-center transition-all duration-200 hover:border-primary/40 hover:shadow-md","data-testid":"template-blank",children:[e.jsx("div",{className:"flex h-12 w-12 items-center justify-center rounded-xl bg-muted text-muted-foreground",children:e.jsx(oe,{className:"h-6 w-6"})}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-semibold text-foreground",children:s("groupWizard.startBlank")}),e.jsx("p",{className:"text-xs text-muted-foreground mt-0.5",children:s("groupWizard.blankDesc")})]})]})]})]})}function _e({state:r,onChange:a}){const{t:s}=E(),t=V(),d=ne(r.style,t);return e.jsxs("div",{children:[e.jsx("h2",{className:"text-xl font-semibold text-foreground",children:s("groupWizard.configTitle")}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:s("groupWizard.configDesc")}),e.jsxs("div",{className:"mt-6 space-y-5",children:[e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"gw-name",className:"mb-1.5 block text-sm font-medium text-foreground",children:[s("common.name","Name")," *"]}),e.jsx("input",{id:"gw-name",type:"text",value:r.name,onChange:l=>a({name:l.target.value}),placeholder:s("groupWizard.namePlaceholder"),className:"w-full rounded-lg border border-input bg-background px-3 py-2.5 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring transition-shadow","data-testid":"gw-name",autoFocus:!0})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"gw-desc",className:"mb-1.5 block text-sm font-medium text-foreground",children:s("common.description","Description")}),e.jsx("textarea",{id:"gw-desc",value:r.description,onChange:l=>a({description:l.target.value}),placeholder:s("groupWizard.descPlaceholder"),rows:2,className:"w-full rounded-lg border border-input bg-background px-3 py-2.5 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring resize-y transition-shadow","data-testid":"gw-description"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-1.5 block text-sm font-medium text-foreground",children:s("groups.discussionStyle","Discussion Style")}),e.jsx("div",{className:"grid grid-cols-2 sm:grid-cols-3 gap-2",children:t.filter(l=>l!=="CUSTOM").map(l=>{const n=H(l,s),m=I[l]??I.CUSTOM,i=r.style===l;return e.jsxs("button",{onClick:()=>a({style:l,approvalPhases:[]}),className:g("group relative flex flex-col items-start rounded-lg border-2 p-3 text-start transition-all",i?`${m.border} ${m.bg} shadow-sm`:"border-border hover:border-primary/30"),"data-testid":`gw-style-${l}`,children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-lg",children:n==null?void 0:n.icon}),e.jsx("span",{className:g("text-xs font-semibold",i?m.text:"text-foreground"),children:n==null?void 0:n.label})]}),e.jsx("p",{className:"mt-1 text-[10px] text-muted-foreground leading-snug line-clamp-2",children:n==null?void 0:n.flow}),i&&e.jsx("div",{className:g("absolute inset-e-1.5 top-1.5 flex h-5 w-5 items-center justify-center rounded-full text-white",m.accent),children:e.jsx(_,{className:"h-3 w-3"})})]},l)})})]}),!d&&e.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-destructive/40 bg-destructive/5 p-3","data-testid":"gw-unsupported-style",children:[e.jsx(M,{className:"h-4 w-4 text-destructive shrink-0 mt-0.5"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s("groups.unsupportedStyle","This server does not support {{style}}. Pick another framework to continue.",{style:H(r.style,s).label})})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"gw-rounds",className:"mb-1.5 block text-sm font-medium text-foreground",children:s("groups.maxRounds","Max Rounds")}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("input",{id:"gw-rounds",type:"range",min:1,max:10,value:r.maxRounds,onChange:l=>{const n=parseInt(l.target.value),m=new Set(X(r.style,n).map(i=>i.name));a({maxRounds:n,approvalPhases:r.approvalPhases.filter(i=>m.has(i))})},className:"flex-1 accent-primary"}),e.jsx("span",{className:"w-8 text-center text-sm font-bold text-foreground",children:r.maxRounds})]})]}),e.jsx(Le,{state:r,onChange:a})]})]})}function Le({state:r,onChange:a}){const{t:s}=E(),t=k.useMemo(()=>X(r.style,r.maxRounds),[r.style,r.maxRounds]),d=r.hitl,l=o=>a({hitl:{...d,...o}});function n(){var y,u;if(r.hitlEnabled){a({hitlEnabled:!1,approvalPhases:[]});return}const o=r.style==="TASK_FORCE"?(y=t.find(p=>p.type==="EXECUTE"))==null?void 0:y.name:(u=t.find(p=>p.type==="SYNTHESIS"))==null?void 0:u.name;a({hitlEnabled:!0,approvalPhases:o?[o]:[]})}function m(o){const y=new Set(r.approvalPhases);y.has(o)?y.delete(o):y.add(o),a({approvalPhases:[...y]})}const i=B(d.timeoutPolicy),f=i&&(!d.approvalTimeout||!A(d.approvalTimeout));return e.jsxs("div",{className:"rounded-xl border border-border bg-secondary/10 p-4",children:[e.jsxs("label",{className:"flex items-start gap-3 cursor-pointer",htmlFor:"gw-hitl-enable",children:[e.jsx("input",{id:"gw-hitl-enable",type:"checkbox",checked:r.hitlEnabled,onChange:n,className:"mt-0.5 h-4 w-4 rounded border-input accent-primary","data-testid":"gw-hitl-enable"}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsxs("span",{className:"flex items-center gap-1.5 text-sm font-medium text-foreground",children:[e.jsx(de,{className:"h-4 w-4 text-amber-500","aria-hidden":"true"}),s("groupWizard.hitlTitle","Require human approval")]}),e.jsx("span",{className:"mt-0.5 block text-xs text-muted-foreground",children:s("groupWizard.hitlDesc","Pause the discussion at chosen phases and wait for a human decision before continuing.")})]})]}),r.hitlEnabled&&e.jsxs("div",{className:"mt-4 space-y-4 ps-7",children:[e.jsxs("div",{children:[e.jsx("p",{className:"mb-1.5 text-xs font-medium text-foreground",children:s("groupWizard.hitlApprovalPoints","Pause for approval at")}),t.length===0?e.jsx("p",{className:"text-xs text-muted-foreground",children:s("groupWizard.hitlNoPhases","This style has no preset phases to gate.")}):e.jsx("div",{className:"space-y-1.5","data-testid":"gw-hitl-phases",children:t.map((o,y)=>e.jsxs("label",{className:"flex items-center gap-2 rounded-md border border-border bg-background px-3 py-1.5 text-sm",children:[e.jsx("input",{type:"checkbox",checked:r.approvalPhases.includes(o.name),onChange:()=>m(o.name),className:"h-3.5 w-3.5 rounded border-input accent-primary","data-testid":`gw-hitl-phase-${y}`}),e.jsx("span",{className:"flex-1 text-foreground",children:o.name}),e.jsx(N,{variant:"outline",className:"text-[10px]",children:o.type})]},o.name))}),r.approvalPhases.length===0&&t.length>0&&e.jsxs("p",{className:"mt-1.5 flex items-center gap-1 text-xs text-amber-500",children:[e.jsx(M,{className:"h-3 w-3","aria-hidden":"true"}),s("groupWizard.hitlNoApprovalPoints","Select at least one phase, or the discussion will never pause.")]})]}),e.jsxs("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-2",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"gw-hitl-policy",className:"mb-1 block text-xs font-medium text-foreground",children:s("groupWizard.hitlTimeoutPolicy","If no decision in time")}),e.jsxs("select",{id:"gw-hitl-policy",value:d.timeoutPolicy??"WAIT_INDEFINITELY",onChange:o=>{const y=o.target.value,u={timeoutPolicy:y};B(y)&&!(d.approvalTimeout&&A(d.approvalTimeout))&&(u.approvalTimeout="PT15M"),l(u)},className:"w-full appearance-none rounded-lg border border-input bg-background px-3 py-2 pe-8 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring","data-testid":"gw-hitl-policy",children:[e.jsx("option",{value:"WAIT_INDEFINITELY",children:s("hitl.timeoutWaitIndefinitely","Wait Indefinitely")}),e.jsx("option",{value:"AUTO_APPROVE",children:s("hitl.timeoutAutoApprove","Auto-Approve")}),e.jsx("option",{value:"AUTO_REJECT",children:s("hitl.timeoutAutoReject","Auto-Reject")}),e.jsx("option",{value:"ABORT",children:s("hitl.timeoutAbort","Abort")})]})]}),i&&e.jsxs("div",{children:[e.jsx("label",{htmlFor:"gw-hitl-timeout",className:"mb-1 block text-xs font-medium text-foreground",children:s("groupWizard.hitlApprovalTimeout","Approval timeout")}),e.jsx("input",{id:"gw-hitl-timeout",type:"text",value:d.approvalTimeout??"",onChange:o=>l({approvalTimeout:o.target.value||null}),placeholder:"PT15M",className:g("w-full rounded-lg border bg-background px-3 py-2 text-sm font-mono text-foreground focus:outline-none focus:ring-2 focus:ring-ring",f?"border-destructive":"border-input"),"data-testid":"gw-hitl-timeout","aria-invalid":f}),e.jsx("p",{className:g("mt-1 text-[10px]",f?"text-destructive":"text-muted-foreground"),children:f?s("groupWizard.hitlTimeoutInvalid","Enter a positive ISO-8601 duration, e.g. PT15M or PT1H30M."):s("groupWizard.hitlTimeoutHint","ISO-8601 duration, e.g. PT30S, PT15M, PT2H.")})]})]}),r.style==="TASK_FORCE"&&e.jsxs("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-2",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"gw-hitl-granularity",className:"mb-1 block text-xs font-medium text-foreground",children:s("groupWizard.hitlGranularity","Approval granularity")}),e.jsxs("select",{id:"gw-hitl-granularity",value:d.granularity??"PHASE",onChange:o=>l({granularity:o.target.value}),className:"w-full appearance-none rounded-lg border border-input bg-background px-3 py-2 pe-8 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring","data-testid":"gw-hitl-granularity",children:[e.jsx("option",{value:"PHASE",children:s("hitl.granularityPhase","Phase")}),e.jsx("option",{value:"TASK",children:s("hitl.granularityTask","Task")})]}),e.jsx("p",{className:"mt-1 text-[10px] text-muted-foreground",children:s("groupWizard.hitlGranularityHint","Task-level approval applies to TASK_FORCE execution — approve or reject each task individually.")})]}),d.granularity==="TASK"&&e.jsxs("div",{children:[e.jsx("label",{htmlFor:"gw-hitl-rejection",className:"mb-1 block text-xs font-medium text-foreground",children:s("groupWizard.hitlOnTaskRejection","When a task is rejected")}),e.jsxs("select",{id:"gw-hitl-rejection",value:d.onTaskRejection??"FAIL",onChange:o=>l({onTaskRejection:o.target.value}),className:"w-full appearance-none rounded-lg border border-input bg-background px-3 py-2 pe-8 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring","data-testid":"gw-hitl-rejection",children:[e.jsx("option",{value:"FAIL",children:s("hitl.rejectionFail","Fail the task")}),e.jsx("option",{value:"RETRY",children:s("hitl.rejectionRetry","Retry the task")})]})]})]}),r.approvalPhases.length>0&&e.jsx("p",{className:"text-[10px] text-muted-foreground",children:s("groupWizard.hitlPinNote","Enabling approval points fixes this group's discussion phases ({{granularity}} granularity).",{granularity:Ce(s,r.style==="TASK_FORCE"?d.granularity:"PHASE")})})]})]})}function Ue({state:r,onChange:a,styleColors:s}){const{t}=E(),{data:d,refetch:l}=We(100),n=d?Se(d):[];function m(){a({members:[...r.members,pe(r.members.length)]})}function i(u){a({members:r.members.filter((p,v)=>v!==u)})}function f(u,p){a({members:r.members.map((v,j)=>j===u?{...v,...p}:v)})}async function o(u){var j;const p=r.members[u];if(!p||!p.displayName.trim())return;f(u,{creating:!0});const v={name:`${r.name} — ${p.displayName}`.trim(),systemPrompt:p.systemPrompt||`You are ${p.displayName}${p.role?`, a ${p.role} expert`:""}. Provide clear, actionable insights from your domain perspective.`,provider:p.provider||"anthropic",model:p.model||(((j=P.find(h=>h.id===(p.provider||"anthropic")))==null?void 0:j.defaultModel)??"claude-sonnet-5"),apiKey:p.apiKey||void 0,deploy:!0};try{const h=await $(v);f(u,{agentId:h.agentId,created:!0,creating:!1}),z.success(t("groupWizard.agentCreated",{name:p.displayName}))}catch(h){f(u,{creating:!1}),z.error(t("groupWizard.agentCreateFailed",{error:h instanceof Error?h.message:String(h)}))}}async function y(){var v;const u=r.moderator;if(!u)return;a({moderator:{...u,creating:!0}});const p={name:`${r.name} — Moderator`.trim(),systemPrompt:u.systemPrompt||"You are a skilled moderator. Synthesize the group's discussion into a clear, balanced summary that captures key insights, areas of agreement, and remaining disagreements.",provider:u.provider||"anthropic",model:u.model||(((v=P.find(j=>j.id===(u.provider||"anthropic")))==null?void 0:v.defaultModel)??"claude-sonnet-5"),apiKey:u.apiKey||void 0,deploy:!0};try{const j=await $(p);a({moderator:{...u,agentId:j.agentId,created:!0,creating:!1}}),z.success(t("groupWizard.moderatorCreated"))}catch(j){a({moderator:{...u,creating:!1}}),z.error(t("groupWizard.agentCreateFailed",{error:j instanceof Error?j.message:String(j)}))}}return e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-1",children:[e.jsx("h2",{className:"text-xl font-semibold text-foreground",children:t("groupWizard.membersTitle")}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("button",{onClick:()=>l(),className:"inline-flex items-center gap-1 rounded-md px-2 py-1 text-xs text-muted-foreground hover:bg-secondary hover:text-foreground transition-colors",title:t("groupWizard.refreshAgents"),children:e.jsx(L,{className:"h-3 w-3"})}),e.jsxs(N,{variant:"secondary",className:"text-xs",children:[n.length," ",t("groupWizard.existingAgents")]})]})]}),e.jsx("p",{className:"text-sm text-muted-foreground mb-4",children:t("groupWizard.membersDesc")}),e.jsx("div",{className:"space-y-3 max-h-[500px] overflow-y-auto pe-1",children:r.members.map((u,p)=>e.jsx(Be,{member:u,index:p,agents:n,styleColors:s,onUpdate:v=>f(p,v),onRemove:()=>i(p),onCreateAgent:()=>o(p),t},p))}),e.jsxs("button",{onClick:m,className:"flex w-full items-center justify-center gap-2 rounded-lg border-2 border-dashed border-border p-3 mt-3 text-sm font-medium text-muted-foreground hover:border-primary/40 hover:text-primary transition-colors","data-testid":"gw-add-member",children:[e.jsx(oe,{className:"h-4 w-4"}),t("groupWizard.addMember")]}),e.jsxs("div",{className:g("mt-5 rounded-xl border-2 p-4",s.border,s.bg),children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Y,{className:"h-4 w-4 text-primary"}),e.jsx("span",{className:"text-sm font-semibold text-foreground",children:t("groupWizard.moderator")}),e.jsx("span",{className:"text-xs text-muted-foreground",children:t("groupWizard.moderatorHint")})]}),r.moderator?e.jsx("button",{onClick:()=>a({moderator:null}),className:"rounded-md p-1 text-muted-foreground hover:text-destructive hover:bg-destructive/10 transition-colors",title:t("groupWizard.removeModerator"),children:e.jsx(ie,{className:"h-3.5 w-3.5"})}):e.jsxs("button",{onClick:()=>a({moderator:ge()}),className:"inline-flex items-center gap-1 rounded-md bg-primary/10 px-2.5 py-1 text-xs font-medium text-primary hover:bg-primary/20 transition-colors",children:[e.jsx($e,{className:"h-3 w-3"}),t("groupWizard.addModerator")]})]}),r.moderator&&e.jsx(Ye,{moderator:r.moderator,agents:n,onChange:u=>a({moderator:{...r.moderator,...u}}),onCreateAgent:y,t})]}),r.members.length<2&&e.jsxs("p",{className:"mt-3 text-xs text-amber-500 font-medium flex items-center gap-1.5",children:[e.jsx(M,{className:"h-3.5 w-3.5"}),t("groupWizard.needMembers")]}),r.members.some(u=>u.memberType==="HUMAN")&&e.jsxs("div",{className:"mt-4 rounded-xl border border-primary/30 bg-primary/5 p-4","data-testid":"human-turn-settings",children:[e.jsxs("h3",{className:"flex items-center gap-1.5 text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:[e.jsx(ue,{className:"h-3.5 w-3.5"}),t("groupWizard.humanTurnSettingsTitle","Human member turn settings")]}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:t("groupWizard.humanTurnSettingsHint","The discussion pauses and waits when it's a human member's turn to speak. Choose what happens if they don't respond in time.")}),e.jsxs("div",{className:"mt-3 grid grid-cols-1 gap-3 sm:grid-cols-2",children:[e.jsxs("div",{children:[e.jsxs("label",{className:"mb-1 flex items-center gap-1 text-xs font-medium text-muted-foreground",children:[e.jsx(Ae,{className:"h-3 w-3"}),t("groupWizard.humanTurnTimeoutLabel","Turn timeout (ISO-8601 duration)")]}),e.jsx("input",{value:r.humanTurnTimeout,onChange:u=>a({humanTurnTimeout:u.target.value}),placeholder:t("groupWizard.humanTurnTimeoutPlaceholder","e.g. PT24H — blank waits indefinitely"),className:g("w-full rounded-lg border bg-background px-3 py-2 text-sm placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring",r.humanTurnTimeout.trim()&&!A(r.humanTurnTimeout)?"border-destructive":"border-input"),"data-testid":"human-turn-timeout-input"}),r.humanTurnTimeout.trim()&&!A(r.humanTurnTimeout)&&e.jsx("p",{className:"mt-1 text-[11px] text-destructive",children:t("groupWizard.humanTurnTimeoutInvalid","Not a valid ISO-8601 duration, e.g. PT24H or P1D.")})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-xs font-medium text-muted-foreground",children:t("groupWizard.humanOnTimeoutLabel","On timeout")}),e.jsxs("select",{value:r.humanOnTimeout,onChange:u=>a({humanOnTimeout:u.target.value}),disabled:!r.humanTurnTimeout.trim(),className:"w-full rounded-lg border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring disabled:opacity-50","data-testid":"human-on-timeout-select",children:[e.jsx("option",{value:"SKIP_TURN",children:t("groupWizard.humanOnTimeoutSkip","Skip their turn and continue")}),e.jsx("option",{value:"ABORT",children:t("groupWizard.humanOnTimeoutAbort","Abort the discussion")})]})]})]})]})]})}function Be({member:r,index:a,agents:s,styleColors:t,onUpdate:d,onRemove:l,onCreateAgent:n,t:m}){const i=P.find(o=>o.id===r.provider),f=o=>{r.memberType!==o&&d({memberType:o,agentId:"",created:!1,creating:!1,mode:o==="AGENT"?"new":"existing"})};return e.jsxs("div",{className:g("rounded-xl border bg-card overflow-hidden transition-all",r.created?"border-emerald-500/40":r.mode==="new"?t.border:"border-border"),"data-testid":`member-card-${a}`,children:[e.jsxs("div",{className:"flex items-center gap-3 px-4 py-3 bg-secondary/20",children:[e.jsx("div",{className:g("flex h-9 w-9 shrink-0 items-center justify-center rounded-full text-xs font-bold text-white shadow-sm",r.created?"bg-emerald-500":ce(r.agentId||String(a))),children:r.created?e.jsx(_,{className:"h-4 w-4"}):le(r.displayName||"?")}),e.jsxs("div",{className:"flex-1 min-w-0 space-y-1",children:[e.jsxs("div",{className:g("flex items-center gap-1.5 rounded-md border px-2 py-0.5 transition-colors",r.displayName.trim()?"border-border/60 focus-within:border-primary/50":"border-amber-500/50 bg-amber-500/5"),children:[e.jsx(Re,{className:"h-3 w-3 shrink-0 text-muted-foreground/50"}),e.jsx("input",{value:r.displayName,onChange:o=>d({displayName:o.target.value}),className:"w-full bg-transparent text-sm font-semibold text-foreground focus:outline-none placeholder:text-muted-foreground/60",placeholder:m("groupWizard.displayNamePlaceholder"),autoFocus:!r.displayName&&!r.created,"data-testid":`member-name-${a}`})]}),e.jsx("input",{value:r.role??"",onChange:o=>d({role:o.target.value||null}),className:"w-full bg-transparent text-xs text-muted-foreground ps-2.5 focus:outline-none placeholder:text-muted-foreground/50",placeholder:m("groupWizard.rolePlaceholder")})]}),e.jsxs("div",{className:"flex items-center rounded-md border border-border bg-background overflow-hidden shrink-0",children:[e.jsx("button",{onClick:()=>f("AGENT"),className:g("px-2.5 py-1 text-[10px] font-medium transition-colors",r.memberType==="AGENT"?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground"),children:"Agent"}),e.jsxs("button",{onClick:()=>f("GROUP"),className:g("px-2.5 py-1 text-[10px] font-medium transition-colors",r.memberType==="GROUP"?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground"),children:[e.jsx(R,{className:"inline h-2.5 w-2.5 me-0.5"}),"Group"]}),e.jsxs("button",{onClick:()=>f("HUMAN"),className:g("px-2.5 py-1 text-[10px] font-medium transition-colors",r.memberType==="HUMAN"?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground"),"data-testid":`member-type-human-${a}`,children:[e.jsx(ue,{className:"inline h-2.5 w-2.5 me-0.5"}),m("groupWizard.memberTypeHuman","Human")]})]}),e.jsx("button",{onClick:l,className:"shrink-0 rounded-md p-1.5 text-muted-foreground hover:text-destructive hover:bg-destructive/10 transition-colors",title:m("common.delete"),"data-testid":`remove-member-${a}`,children:e.jsx(ie,{className:"h-3.5 w-3.5"})})]}),!r.created&&e.jsx("div",{className:"px-4 py-3 space-y-3",children:r.memberType==="GROUP"?e.jsx(qe,{agentId:r.agentId,onUpdate:d,t:m}):r.memberType==="HUMAN"?e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"block text-xs font-medium text-muted-foreground",children:m("groupWizard.humanPrincipalId","Principal ID")}),e.jsx("input",{value:r.agentId,onChange:o=>d({agentId:o.target.value}),placeholder:m("groupWizard.humanPrincipalIdPlaceholder","The user's login/principal id"),className:"w-full rounded-lg border border-input bg-background px-3 py-2 text-sm placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring","data-testid":`human-principal-id-${a}`}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:m("groupWizard.humanPrincipalIdHint","The identity that may submit this member's turns — the discussion pauses and waits for them when it's their turn to speak.")})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsxs("button",{onClick:()=>d({mode:"existing",agentId:""}),className:g("flex-1 flex items-center justify-center gap-2 rounded-lg border-2 py-2 text-xs font-medium transition-all",r.mode==="existing"?"border-primary bg-primary/5 text-primary":"border-border text-muted-foreground hover:border-primary/30"),children:[e.jsx(xe,{className:"h-3.5 w-3.5"}),m("groupWizard.useExisting")]}),e.jsxs("button",{onClick:()=>d({mode:"new",agentId:""}),className:g("flex-1 flex items-center justify-center gap-2 rounded-lg border-2 py-2 text-xs font-medium transition-all",r.mode==="new"?`${t.border} ${t.bg} ${t.text}`:"border-border text-muted-foreground hover:border-primary/30"),children:[e.jsx(D,{className:"h-3.5 w-3.5"}),m("groupWizard.createNew")]})]}),r.mode==="existing"&&e.jsxs("div",{className:"relative",children:[e.jsxs("select",{value:r.agentId,onChange:o=>d({agentId:o.target.value}),className:g("w-full appearance-none rounded-lg border bg-background px-3 py-2 pe-8 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring",r.agentId?"border-input":"border-amber-400/50"),children:[e.jsx("option",{value:"",children:m("groupWizard.selectAgent")}),s.map(o=>e.jsx("option",{value:o.id,children:o.name||o.id.slice(0,12)},o.id))]}),e.jsx(O,{className:"pointer-events-none absolute inset-e-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"})]}),r.mode==="new"&&e.jsxs("div",{className:"space-y-2.5",children:[e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-xs font-medium text-muted-foreground",children:m("groupWizard.systemPrompt")}),e.jsx("textarea",{value:r.systemPrompt,onChange:o=>d({systemPrompt:o.target.value}),placeholder:`You are ${r.displayName}${r.role?`, a ${r.role} expert`:""}. Provide insightful analysis from your domain perspective.`,rows:2,className:"w-full rounded-lg border border-input bg-background px-3 py-2 text-xs text-foreground placeholder:text-muted-foreground/60 focus:outline-none focus:ring-1 focus:ring-ring resize-y"})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-xs font-medium text-muted-foreground",children:m("groupWizard.provider")}),e.jsxs("div",{className:"relative",children:[e.jsx("select",{value:r.provider,onChange:o=>{d({provider:o.target.value,model:""})},className:"w-full appearance-none rounded-lg border border-input bg-background px-3 py-1.5 pe-7 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring",children:P.map(o=>e.jsx("option",{value:o.id,children:o.name},o.id))}),e.jsx(O,{className:"pointer-events-none absolute inset-e-2 top-1/2 h-3 w-3 -translate-y-1/2 text-muted-foreground"})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-xs font-medium text-muted-foreground",children:m("groupWizard.model")}),e.jsx("input",{value:r.model,onChange:o=>d({model:o.target.value}),className:"w-full rounded-lg border border-input bg-background px-3 py-1.5 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring",placeholder:`e.g. ${(i==null?void 0:i.defaultModel)??""}`})]})]}),(i==null?void 0:i.needsKey)&&e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-xs font-medium text-muted-foreground",children:m("groupWizard.apiKey")}),e.jsx(me,{value:r.apiKey,onChange:o=>d({apiKey:o}),placeholder:m("groupWizard.apiKeyPlaceholder"),testId:`gw-apikey-${a}`})]}),e.jsxs("button",{onClick:n,disabled:r.creating||!r.displayName.trim(),className:"w-full inline-flex items-center justify-center gap-2 rounded-lg bg-primary/10 px-4 py-2 text-xs font-medium text-primary hover:bg-primary/20 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",children:[r.creating?e.jsx(L,{className:"h-3 w-3 animate-spin"}):e.jsx(J,{className:"h-3 w-3"}),r.creating?m("groupWizard.creatingAgent"):m("groupWizard.createThisAgent")]})]})]})}),r.created&&e.jsxs("div",{className:"px-4 py-2 bg-emerald-500/5 border-t border-emerald-500/20 flex items-center gap-2",children:[e.jsx(q,{className:"h-3.5 w-3.5 text-emerald-500"}),e.jsx("span",{className:"text-xs text-emerald-600 dark:text-emerald-400 font-medium",children:m("groupWizard.agentReady")}),e.jsxs("span",{className:"text-[10px] text-muted-foreground font-mono ms-auto",children:[r.agentId.slice(0,12),"…"]})]})]})}function Ye({moderator:r,agents:a,onChange:s,onCreateAgent:t,t:d}){const l=P.find(n=>n.id===r.provider);return r.created?e.jsxs("div",{className:"flex items-center gap-2 rounded-lg bg-emerald-500/5 border border-emerald-500/20 p-2.5",children:[e.jsx(q,{className:"h-3.5 w-3.5 text-emerald-500 shrink-0"}),e.jsx("span",{className:"text-xs text-emerald-600 dark:text-emerald-400 font-medium flex-1",children:d("groupWizard.moderatorReady")}),e.jsxs("span",{className:"text-[10px] text-muted-foreground font-mono",children:[r.agentId.slice(0,12),"…"]})]}):e.jsxs("div",{className:"space-y-2.5",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsxs("button",{onClick:()=>s({mode:"existing",agentId:""}),className:g("flex-1 flex items-center justify-center gap-2 rounded-lg border-2 py-2 text-xs font-medium transition-all",r.mode==="existing"?"border-primary bg-primary/5 text-primary":"border-border text-muted-foreground hover:border-primary/30"),children:[e.jsx(xe,{className:"h-3.5 w-3.5"}),d("groupWizard.useExisting")]}),e.jsxs("button",{onClick:()=>s({mode:"new",agentId:""}),className:g("flex-1 flex items-center justify-center gap-2 rounded-lg border-2 py-2 text-xs font-medium transition-all",r.mode==="new"?"border-primary bg-primary/5 text-primary":"border-border text-muted-foreground hover:border-primary/30"),children:[e.jsx(D,{className:"h-3.5 w-3.5"}),d("groupWizard.createNew")]})]}),r.mode==="existing"?e.jsxs("div",{className:"relative",children:[e.jsxs("select",{value:r.agentId,onChange:n=>s({agentId:n.target.value}),className:"w-full appearance-none rounded-lg border border-input bg-background px-3 py-2 pe-8 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring",children:[e.jsx("option",{value:"",children:d("groupWizard.selectAgent")}),a.map(n=>e.jsx("option",{value:n.id,children:n.name||n.id.slice(0,12)},n.id))]}),e.jsx(O,{className:"pointer-events-none absolute inset-e-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"})]}):e.jsxs("div",{className:"space-y-2",children:[e.jsx("textarea",{value:r.systemPrompt,onChange:n=>s({systemPrompt:n.target.value}),placeholder:"You are a skilled moderator. Synthesize the group's discussion into a clear, balanced summary…",rows:2,className:"w-full rounded-lg border border-input bg-background px-3 py-2 text-xs text-foreground placeholder:text-muted-foreground/60 focus:outline-none focus:ring-1 focus:ring-ring resize-y"}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsxs("div",{className:"relative",children:[e.jsx("select",{value:r.provider,onChange:n=>{s({provider:n.target.value,model:""})},className:"w-full appearance-none rounded-lg border border-input bg-background px-3 py-1.5 pe-7 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring",children:P.map(n=>e.jsx("option",{value:n.id,children:n.name},n.id))}),e.jsx(O,{className:"pointer-events-none absolute inset-e-2 top-1/2 h-3 w-3 -translate-y-1/2 text-muted-foreground"})]}),e.jsx("input",{value:r.model,onChange:n=>s({model:n.target.value}),className:"rounded-lg border border-input bg-background px-3 py-1.5 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring",placeholder:`e.g. ${(l==null?void 0:l.defaultModel)??""}`})]}),(l==null?void 0:l.needsKey)&&e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-xs font-medium text-muted-foreground",children:d("groupWizard.apiKey")}),e.jsx(me,{value:r.apiKey,onChange:n=>s({apiKey:n}),placeholder:d("groupWizard.apiKeyPlaceholder"),testId:"gw-moderator-apikey"})]}),e.jsxs("button",{onClick:t,disabled:r.creating,className:"w-full inline-flex items-center justify-center gap-2 rounded-lg bg-primary/10 px-4 py-2 text-xs font-medium text-primary hover:bg-primary/20 transition-colors disabled:opacity-50",children:[r.creating?e.jsx(L,{className:"h-3 w-3 animate-spin"}):e.jsx(J,{className:"h-3 w-3"}),r.creating?d("groupWizard.creatingAgent"):d("groupWizard.createModerator")]})]})]})}function Ve({state:r}){const{t:a}=E(),s=H(r.style,a),t=I[r.style]??I.CUSTOM,d=r.members.filter(K).length+(r.moderator&&K(r.moderator)?1:0),l=r.members.filter(i=>i.memberType==="AGENT"&&i.mode==="existing"&&!i.agentId).length,n=r.members.filter(i=>i.created).length,m=Ge({members:r.members,phases:null,style:r.style,maxRounds:r.maxRounds});return e.jsxs("div",{children:[e.jsx("h2",{className:"text-xl font-semibold text-foreground",children:a("groupWizard.reviewTitle")}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:a("groupWizard.reviewDesc")}),e.jsxs("div",{className:"mt-6 space-y-5",children:[e.jsxs("div",{className:g("rounded-xl border-2 p-5 space-y-3",t.border,t.bg),children:[e.jsx("h3",{className:"text-lg font-bold text-foreground",children:r.name}),r.description&&e.jsx("p",{className:"text-sm text-muted-foreground",children:r.description}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsxs(N,{variant:"outline",className:g("text-xs",t.text),children:[s==null?void 0:s.icon," ",s==null?void 0:s.label]}),e.jsxs(N,{variant:"secondary",className:"text-xs",children:[e.jsx(R,{className:"me-1 h-3 w-3"}),r.members.length," members"]}),e.jsxs(N,{variant:"secondary",className:"text-xs",children:[r.maxRounds," rounds"]}),r.moderator&&e.jsxs(N,{variant:"default",className:"text-xs",children:[e.jsx(Y,{className:"me-1 h-3 w-3"})," Moderator"]}),r.hitlEnabled&&e.jsxs(N,{variant:"outline",className:"text-xs text-amber-600 dark:text-amber-400",children:[e.jsx(de,{className:"me-1 h-3 w-3"}),a("groupWizard.hitlReviewBadge","Human approval"),r.approvalPhases.length>0&&` · ${r.approvalPhases.length}`]})]})]}),d>0&&e.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-primary/30 bg-primary/5 p-3","data-testid":"auto-create-notice",children:[e.jsx(D,{className:"h-4 w-4 text-primary shrink-0 mt-0.5"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium text-primary",children:a("groupWizard.autoCreateNotice",{count:d})}),e.jsx("p",{className:"text-xs text-muted-foreground mt-0.5",children:a("groupWizard.autoCreateHint")})]})]}),l>0&&e.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-amber-500/30 bg-amber-500/5 p-3",children:[e.jsx(M,{className:"h-4 w-4 text-amber-500 shrink-0 mt-0.5"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium text-amber-600 dark:text-amber-400",children:a("groupWizard.unassignedWarning",{count:l})}),e.jsx("p",{className:"text-xs text-muted-foreground mt-0.5",children:a("groupWizard.unassignedHint")})]})]}),m.length>0&&e.jsx("div",{className:"flex flex-col gap-2 rounded-lg border border-amber-500/30 bg-amber-500/5 p-3","data-testid":"wizard-role-coverage-warning",children:m.map(i=>e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx(M,{className:"h-4 w-4 text-amber-500 shrink-0 mt-0.5"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium text-amber-600 dark:text-amber-400",children:a("groupWizard.roleCoverageWarning",'No member has the role "{{role}}"',{role:i.role})}),e.jsx("p",{className:"text-xs text-muted-foreground mt-0.5",children:a("groupWizard.roleCoverageHint","The server falls back to letting every member speak in {{phases}}, so both sides get argued by the same people. Go back to Members and set the role field.",{phases:i.phaseNames.join(", ")})})]})]},i.role))}),e.jsxs("div",{children:[e.jsxs("h4",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground mb-2",children:[a("groupWizard.reviewMembers"),n>0&&e.jsxs("span",{className:"ms-2 font-normal normal-case text-emerald-500",children:["(",n," newly created)"]})]}),e.jsxs("div",{className:"space-y-1",children:[r.members.map((i,f)=>e.jsxs("div",{className:"flex items-center gap-3 rounded-lg px-3 py-2 hover:bg-secondary/30 transition-colors",children:[e.jsx("div",{className:g("flex h-7 w-7 shrink-0 items-center justify-center rounded-full text-[10px] font-bold text-white",i.created?"bg-emerald-500":ce(i.agentId||String(f))),children:i.created?e.jsx(_,{className:"h-3 w-3"}):le(i.displayName||"?")}),e.jsx("span",{className:"text-sm font-medium text-foreground flex-1",children:i.displayName}),i.role&&e.jsx(N,{variant:"outline",className:"text-[10px]",children:i.role}),i.memberType==="GROUP"&&e.jsxs(N,{variant:"secondary",className:"text-[10px]",children:[e.jsx(R,{className:"h-2.5 w-2.5 me-0.5"})," Group"]}),i.created&&e.jsx(N,{variant:"success",className:"text-[10px]",children:"✓ new"}),e.jsx("span",{className:"font-mono text-[10px] text-muted-foreground",children:i.agentId?i.agentId.slice(0,8)+"…":"unassigned"})]},f)),r.moderator&&e.jsxs("div",{className:"flex items-center gap-3 rounded-lg px-3 py-2 bg-primary/5 border border-primary/20",children:[e.jsx("div",{className:"flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-primary text-primary-foreground text-[10px] font-bold",children:e.jsx(Y,{className:"h-3 w-3"})}),e.jsx("span",{className:"text-sm font-medium text-foreground flex-1",children:"Moderator"}),e.jsx(N,{variant:"default",className:"text-[10px]",children:"⭐ Synthesis"}),e.jsx("span",{className:"font-mono text-[10px] text-muted-foreground",children:r.moderator.agentId?r.moderator.agentId.slice(0,8)+"…":"unassigned"})]})]})]}),s&&e.jsxs("div",{className:g("rounded-lg border p-3",t.border,t.bg),children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-wider text-muted-foreground mb-1",children:a("groupWizard.flowPreview")}),e.jsx("p",{className:g("text-xs font-medium",t.text),children:s.flow})]})]})]})}function qe({agentId:r,onUpdate:a,t:s}){const{data:t,isLoading:d,isError:l,refetch:n}=Me(100),m=t&&t.length>0;return e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-xs font-medium text-muted-foreground",children:s("groupWizard.selectGroup","Select existing group")}),d?e.jsx("div",{className:"rounded-lg border border-input bg-background px-3 py-2 text-xs text-muted-foreground animate-pulse",children:s("common.loading","Loading…")}):l&&!t?e.jsx(Oe,{onRetry:()=>n(),message:s("common.loadError","Failed to load data")}):m?e.jsxs("div",{className:"relative",children:[e.jsxs("select",{value:r,onChange:i=>a({agentId:i.target.value,mode:"existing"}),className:g("w-full appearance-none rounded-lg border bg-background px-3 py-2 pe-8 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring",r?"border-input":"border-amber-400/50"),children:[e.jsx("option",{value:"",children:s("groupWizard.selectGroup","Select existing group…")}),t.map(i=>e.jsxs("option",{value:i.id,children:[i.name||i.id.slice(0,12)," (",i.memberCount," members)"]},i.id))]}),e.jsx(O,{className:"pointer-events-none absolute inset-e-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"})]}):e.jsxs("div",{className:"rounded-lg border border-dashed border-amber-400/50 bg-amber-400/5 px-3 py-3 text-center",children:[e.jsx(R,{className:"h-4 w-4 text-amber-500 mx-auto mb-1"}),e.jsx("p",{className:"text-xs font-medium text-amber-600 dark:text-amber-400",children:s("groupWizard.noGroupsYet","No groups available")}),e.jsx("p",{className:"text-[10px] text-muted-foreground mt-0.5",children:s("groupWizard.noGroupsHint","Create a group first, then add it as a nested sub-group member.")})]}),m&&e.jsx("p",{className:"mt-1 text-[10px] text-muted-foreground",children:s("groupWizard.groupMemberHint","This group will participate as a nested sub-group in the discussion.")})]})}export{cr as GroupWizardPage}; +import{c as E,r as k,e3 as Ne,dh as we,di as V,j as e,C as q,dk as Te,h as re,N as ke,a3 as te,w as D,ah as ze,b$ as R,X as ae,a4 as L,i as g,q as Pe,a1 as _,dg as H,P as oe,dj as ne,T as M,ds as X,b as We,e as Se,Z as ie,V as Ae,ak as A,al as de,dz as le,dA as ce,cN as $,aE as P,_ as z,e4 as Ie,p as Ee,aj as B,e8 as Ce,aT as Re,a7 as O,dl as Me}from"./index-BnLj1hck.js";import{B as N}from"./badge-C2HqoOk5.js";import{S as me}from"./secret-key-picker-BCXXdOJ-.js";import{R as Oe}from"./refetch-error-notice-G50zNkPl.js";import{u as Ge}from"./group-config-DZrgz0vz.js";import{g as Fe,D as He}from"./group-templates-B4YwvSlk.js";import{W as J}from"./wand-sparkles-BtCP1jzO.js";import{S as Y}from"./star-BSD3Ddvs.js";import{U as $e}from"./user-plus-BhdQPvXt.js";import{U as ue}from"./user-check-BzuCEBUg.js";import{L as xe}from"./link-2-DVp_MD50.js";import"./use-secrets--RofX_r2.js";import"./eye-off-PKiH0Asw.js";import"./eye-xZR8Jj8Y.js";function Ke(r){return r.hitlEnabled?r.approvalPhases.length===0?!1:B(r.hitl.timeoutPolicy)?!!r.hitl.approvalTimeout&&A(r.hitl.approvalTimeout):!0:!0}function pe(r,a,s){return{agentId:"",displayName:a||"",speakingOrder:r+1,role:s||null,memberType:"AGENT",mode:"new",systemPrompt:"",provider:"anthropic",model:"",apiKey:"",created:!1,creating:!1}}function ge(){return{agentId:"",displayName:"Moderator",speakingOrder:0,role:"MODERATOR",memberType:"AGENT",mode:"new",systemPrompt:"You are a skilled moderator. Synthesize the group's discussion into a clear, balanced summary that captures key insights, areas of agreement, and remaining disagreements.",provider:"anthropic",model:"",apiKey:"",created:!1,creating:!1}}function K(r){return r.memberType==="AGENT"&&r.mode==="new"&&!r.created&&!r.agentId}const se={name:"",description:"",style:"ROUND_TABLE",maxRounds:2,members:[],moderator:null,hitlEnabled:!1,hitl:Ne,approvalPhases:[],humanTurnTimeout:"",humanOnTimeout:"SKIP_TURN"},F=[{id:"template",icon:D},{id:"config",icon:ze},{id:"members",icon:R},{id:"review",icon:ae}],I={ROUND_TABLE:{bg:"bg-amber-500/10",border:"border-amber-500/30",text:"text-amber-600 dark:text-amber-400",accent:"bg-amber-500"},PEER_REVIEW:{bg:"bg-teal-500/10",border:"border-teal-500/30",text:"text-teal-600 dark:text-teal-400",accent:"bg-teal-500"},DEVIL_ADVOCATE:{bg:"bg-rose-500/10",border:"border-rose-500/30",text:"text-rose-600 dark:text-rose-400",accent:"bg-rose-500"},DELPHI:{bg:"bg-violet-500/10",border:"border-violet-500/30",text:"text-violet-600 dark:text-violet-400",accent:"bg-violet-500"},DEBATE:{bg:"bg-indigo-500/10",border:"border-indigo-500/30",text:"text-indigo-600 dark:text-indigo-400",accent:"bg-indigo-500"},TASK_FORCE:{bg:"bg-orange-500/10",border:"border-orange-500/30",text:"text-orange-600 dark:text-orange-400",accent:"bg-orange-500"},NEGOTIATION:{bg:"bg-emerald-500/10",border:"border-emerald-500/30",text:"text-emerald-600 dark:text-emerald-400",accent:"bg-emerald-500"},CUSTOM:{bg:"bg-secondary/20",border:"border-border",text:"text-foreground",accent:"bg-muted-foreground"}};function cr(){const{t:r}=E(),[a,s]=k.useState(0),[t,d]=k.useState(se),[l,n]=k.useState(null),[m,i]=k.useState(1),[f,o]=k.useState(null),[y,u]=k.useState(!1),p=we(),v=V(),j=p.isPending||y,h=F[a],U=k.useCallback(b=>d(x=>({...x,...b})),[]);function he(b){U({name:b.name,description:b.description,style:b.style,maxRounds:b.maxRounds,members:b.roles.map((x,C)=>pe(C,x.displayName,x.role)),moderator:b.moderatorSuggested?ge():null,approvalPhases:[]}),s(1)}function be(){if(!h)return!1;switch(h.id){case"template":return!0;case"config":return t.name.trim().length>0&&Ke(t)&&ne(t.style,v);case"members":return!(t.members.length<2||!t.members.every(x=>x.displayName.trim()?x.memberType==="HUMAN"||x.memberType==="GROUP"?!!x.agentId.trim():!!x.agentId||x.mode==="new":!1)||t.humanTurnTimeout.trim()&&!A(t.humanTurnTimeout));case"review":return!0;default:return!1}}function fe(){a0&&s(a-1)}async function je(){var W,Z,Q;u(!0);const b=[...t.members];let x=t.moderator?{...t.moderator}:null;const C=b.map((c,w)=>({slot:c,index:w})).filter(({slot:c})=>K(c));for(const{slot:c,index:w}of C){o(r("groupWizard.creatingSlot",{name:c.displayName}));try{const T=await $({name:`${t.name} — ${c.displayName}`.trim(),systemPrompt:c.systemPrompt||`You are ${c.displayName}${c.role?`, a ${c.role} expert`:""}. Provide clear, actionable insights.`,provider:c.provider||"anthropic",model:c.model||(((W=P.find(S=>S.id===(c.provider||"anthropic")))==null?void 0:W.defaultModel)??"claude-sonnet-5"),apiKey:c.apiKey||void 0,deploy:!0});b[w]={...b[w],agentId:T.agentId,created:!0}}catch(T){z.error(r("groupWizard.agentCreateFailed",{error:T instanceof Error?T.message:String(T)})),u(!1),o(null),d(S=>({...S,members:b}));return}}if(x&&K(x)){o(r("groupWizard.creatingModerator"));try{const c=await $({name:`${t.name} — Moderator`.trim(),systemPrompt:x.systemPrompt||"You are a skilled moderator. Synthesize the discussion into a clear, balanced summary.",provider:x.provider||"anthropic",model:x.model||(((Z=P.find(w=>w.id===(x.provider||"anthropic")))==null?void 0:Z.defaultModel)??"claude-sonnet-5"),apiKey:x.apiKey||void 0,deploy:!0});x={...x,agentId:c.agentId,created:!0}}catch(c){z.error(r("groupWizard.agentCreateFailed",{error:c instanceof Error?c.message:String(c)})),u(!1),o(null);return}}d(c=>({...c,members:b,moderator:x})),o(r("groupWizard.creatingGroup"));const G={name:t.name,description:t.description,members:b.filter(c=>c.agentId||c.displayName).map(c=>({agentId:c.agentId,displayName:c.displayName,speakingOrder:c.speakingOrder,role:c.role,memberType:c.memberType})),moderatorAgentId:(x==null?void 0:x.agentId)||null,style:t.style,maxRounds:t.maxRounds,phases:t.hitlEnabled&&t.approvalPhases.length>0?Ie(X(t.style,t.maxRounds),t.approvalPhases):null,protocol:{agentTimeoutSeconds:He,onAgentFailure:"SKIP",maxRetries:2,onMemberUnavailable:"SKIP"},hitlConfig:t.hitlEnabled?{approvalTimeout:((Q=t.hitl.approvalTimeout)==null?void 0:Q.trim())||null,timeoutPolicy:t.hitl.timeoutPolicy,granularity:t.style==="TASK_FORCE"?t.hitl.granularity:"PHASE",onTaskRejection:t.hitl.onTaskRejection}:void 0,humanMemberConfig:b.some(c=>c.memberType==="HUMAN")?{turnTimeout:t.humanTurnTimeout.trim()||null,onTimeout:t.humanOnTimeout}:void 0};p.mutate(G,{onSuccess:c=>{z.success(r("groupWizard.success"));let w="new",T=1;try{const S=c==null?void 0:c.location;if(S){const ee=Ee(S);w=ee.id,T=ee.version}}catch{w=typeof c=="string"?c:(c==null?void 0:c.id)??"new"}n(w),i(T),u(!1),o(null)},onError:()=>{z.error(r("common.error")),u(!1),o(null)}})}if(l)return e.jsx("div",{className:"mx-auto max-w-2xl space-y-8",children:e.jsxs("div",{className:"rounded-2xl border border-emerald-500/30 bg-card p-8 text-center shadow-lg",children:[e.jsx("div",{className:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-emerald-500/10",children:e.jsx(q,{className:"h-8 w-8 text-emerald-500"})}),e.jsx("h2",{className:"text-2xl font-bold text-foreground",children:r("groupWizard.created")}),e.jsxs("p",{className:"mt-2 text-muted-foreground",children:[t.name," — ",t.members.length," ",r("groups.members")," · ",Te(t.style,r)]}),e.jsxs("div",{className:"mt-6 flex items-center justify-center gap-3",children:[e.jsxs(re,{to:`/manage/groups/${l}?version=${m}`,className:"inline-flex items-center gap-2 rounded-lg bg-primary px-5 py-2.5 text-sm font-medium text-primary-foreground shadow-sm transition-all hover:bg-primary/90 hover:shadow-md active:scale-[0.98]",children:[r("groupWizard.viewGroup"),e.jsx(ke,{className:"h-4 w-4"})]}),e.jsx("button",{onClick:()=>{d(se),s(0),n(null),i(1)},className:"inline-flex items-center gap-2 rounded-lg border border-border px-4 py-2.5 text-sm font-medium text-muted-foreground transition-colors hover:bg-secondary hover:text-foreground",children:r("groupWizard.createAnother")})]})]})});const ve=I[t.style]||I.ROUND_TABLE;return e.jsxs("div",{className:"mx-auto max-w-3xl space-y-8",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(re,{to:"/manage/groups",className:"inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground transition-colors",children:[e.jsx(te,{className:"h-4 w-4"}),r("groupWizard.backToGroups")]}),e.jsxs("h1",{className:"flex items-center gap-3 text-3xl font-bold text-foreground",children:[e.jsx("div",{className:"flex h-10 w-10 items-center justify-center rounded-xl bg-primary/10",children:e.jsx(J,{className:"h-5 w-5 text-primary"})}),r("groupWizard.title")]}),e.jsx("p",{className:"text-muted-foreground",children:r("groupWizard.subtitle")})]}),e.jsx("div",{className:"flex items-center gap-2","data-testid":"group-wizard-steps",children:F.map((b,x)=>{const C=b.icon,G=x===a,W=xxa,className:g("flex h-10 w-10 shrink-0 items-center justify-center rounded-full border-2 transition-all duration-300",G&&"border-primary bg-primary text-primary-foreground shadow-md shadow-primary/25 scale-110",W&&"border-emerald-500 bg-emerald-500 text-white",!G&&!W&&"border-border bg-card text-muted-foreground"),children:W?e.jsx(L,{className:"h-4 w-4"}):e.jsx(C,{className:"h-4 w-4"})}),xs(1)}),(h==null?void 0:h.id)==="config"&&e.jsx(Le,{state:t,onChange:U}),(h==null?void 0:h.id)==="members"&&e.jsx(Ue,{state:t,onChange:U,styleColors:ve}),(h==null?void 0:h.id)==="review"&&e.jsx(Ve,{state:t})]}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("button",{onClick:ye,disabled:a===0,className:g("inline-flex items-center gap-2 rounded-lg px-4 py-2.5 text-sm font-medium transition-colors",a===0?"invisible":"text-muted-foreground hover:bg-secondary hover:text-foreground"),"data-testid":"group-wizard-back",children:[e.jsx(te,{className:"h-4 w-4"}),r("common.back","Back")]}),(h==null?void 0:h.id)!=="review"?e.jsxs("button",{onClick:fe,disabled:!be(),className:"inline-flex items-center gap-2 rounded-lg bg-primary px-5 py-2.5 text-sm font-medium text-primary-foreground shadow-sm transition-all hover:bg-primary/90 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 active:scale-[0.98]","data-testid":"group-wizard-next",children:[r("common.next","Next"),e.jsx(Pe,{className:"h-4 w-4"})]}):e.jsx("button",{onClick:()=>je(),disabled:j,className:"inline-flex items-center gap-2 rounded-lg bg-primary px-5 py-2.5 text-sm font-medium text-primary-foreground shadow-sm transition-all hover:bg-primary/90 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 active:scale-[0.98]","data-testid":"group-wizard-create",children:j?e.jsxs(e.Fragment,{children:[e.jsx(_,{className:"h-4 w-4 animate-spin"}),f||r("groupWizard.createGroup")]}):e.jsxs(e.Fragment,{children:[e.jsx(ae,{className:"h-4 w-4"}),r("groupWizard.createGroup")]})})]})]})}function De({onSelect:r,onSkip:a}){const{t:s}=E(),t=V(),d=Fe(s).filter(l=>t.includes(l.style));return e.jsxs("div",{children:[e.jsx("h2",{className:"text-xl font-semibold text-foreground",children:s("groupWizard.templateTitle")}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:s("groupWizard.templateDesc")}),e.jsxs("div",{className:"mt-6 grid grid-cols-1 gap-4 sm:grid-cols-2","data-testid":"template-grid",children:[d.map(l=>{const n=H(l.style,s);return e.jsxs("button",{onClick:()=>r(l),className:"group relative flex flex-col items-start gap-3 rounded-xl border-2 border-border p-5 text-start transition-all duration-200 hover:border-primary/40 hover:shadow-md","data-testid":`template-${l.key}`,children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"flex h-12 w-12 items-center justify-center rounded-xl bg-primary/10 text-2xl",children:l.icon}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-semibold text-foreground",children:l.name}),e.jsxs("p",{className:"text-xs text-muted-foreground",children:[n==null?void 0:n.icon," ",n==null?void 0:n.label]})]})]}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed line-clamp-2",children:l.description}),e.jsxs("div",{className:"flex flex-wrap gap-1.5",children:[l.roles.slice(0,4).map((m,i)=>e.jsx(N,{variant:"secondary",className:"text-[10px]",children:m.role},i)),l.roles.length>4&&e.jsxs(N,{variant:"outline",className:"text-[10px]",children:["+",l.roles.length-4]})]})]},l.key)}),e.jsxs("button",{onClick:a,className:"flex flex-col items-center justify-center gap-3 rounded-xl border-2 border-dashed border-border p-5 text-center transition-all duration-200 hover:border-primary/40 hover:shadow-md","data-testid":"template-blank",children:[e.jsx("div",{className:"flex h-12 w-12 items-center justify-center rounded-xl bg-muted text-muted-foreground",children:e.jsx(oe,{className:"h-6 w-6"})}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-semibold text-foreground",children:s("groupWizard.startBlank")}),e.jsx("p",{className:"text-xs text-muted-foreground mt-0.5",children:s("groupWizard.blankDesc")})]})]})]})]})}function Le({state:r,onChange:a}){const{t:s}=E(),t=V(),d=ne(r.style,t);return e.jsxs("div",{children:[e.jsx("h2",{className:"text-xl font-semibold text-foreground",children:s("groupWizard.configTitle")}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:s("groupWizard.configDesc")}),e.jsxs("div",{className:"mt-6 space-y-5",children:[e.jsxs("div",{children:[e.jsxs("label",{htmlFor:"gw-name",className:"mb-1.5 block text-sm font-medium text-foreground",children:[s("common.name","Name")," *"]}),e.jsx("input",{id:"gw-name",type:"text",value:r.name,onChange:l=>a({name:l.target.value}),placeholder:s("groupWizard.namePlaceholder"),className:"w-full rounded-lg border border-input bg-background px-3 py-2.5 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring transition-shadow","data-testid":"gw-name",autoFocus:!0})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"gw-desc",className:"mb-1.5 block text-sm font-medium text-foreground",children:s("common.description","Description")}),e.jsx("textarea",{id:"gw-desc",value:r.description,onChange:l=>a({description:l.target.value}),placeholder:s("groupWizard.descPlaceholder"),rows:2,className:"w-full rounded-lg border border-input bg-background px-3 py-2.5 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring resize-y transition-shadow","data-testid":"gw-description"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-1.5 block text-sm font-medium text-foreground",children:s("groups.discussionStyle","Discussion Style")}),e.jsx("div",{className:"grid grid-cols-2 sm:grid-cols-3 gap-2",children:t.filter(l=>l!=="CUSTOM").map(l=>{const n=H(l,s),m=I[l]??I.CUSTOM,i=r.style===l;return e.jsxs("button",{onClick:()=>a({style:l,approvalPhases:[]}),className:g("group relative flex flex-col items-start rounded-lg border-2 p-3 text-start transition-all",i?`${m.border} ${m.bg} shadow-sm`:"border-border hover:border-primary/30"),"data-testid":`gw-style-${l}`,children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-lg",children:n==null?void 0:n.icon}),e.jsx("span",{className:g("text-xs font-semibold",i?m.text:"text-foreground"),children:n==null?void 0:n.label})]}),e.jsx("p",{className:"mt-1 text-[10px] text-muted-foreground leading-snug line-clamp-2",children:n==null?void 0:n.flow}),i&&e.jsx("div",{className:g("absolute inset-e-1.5 top-1.5 flex h-5 w-5 items-center justify-center rounded-full text-white",m.accent),children:e.jsx(L,{className:"h-3 w-3"})})]},l)})})]}),!d&&e.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-destructive/40 bg-destructive/5 p-3","data-testid":"gw-unsupported-style",children:[e.jsx(M,{className:"h-4 w-4 text-destructive shrink-0 mt-0.5"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s("groups.unsupportedStyle","This server does not support {{style}}. Pick another framework to continue.",{style:H(r.style,s).label})})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"gw-rounds",className:"mb-1.5 block text-sm font-medium text-foreground",children:s("groups.maxRounds","Max Rounds")}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("input",{id:"gw-rounds",type:"range",min:1,max:10,value:r.maxRounds,onChange:l=>{const n=parseInt(l.target.value),m=new Set(X(r.style,n).map(i=>i.name));a({maxRounds:n,approvalPhases:r.approvalPhases.filter(i=>m.has(i))})},className:"flex-1 accent-primary"}),e.jsx("span",{className:"w-8 text-center text-sm font-bold text-foreground",children:r.maxRounds})]})]}),e.jsx(_e,{state:r,onChange:a})]})]})}function _e({state:r,onChange:a}){const{t:s}=E(),t=k.useMemo(()=>X(r.style,r.maxRounds),[r.style,r.maxRounds]),d=r.hitl,l=o=>a({hitl:{...d,...o}});function n(){var y,u;if(r.hitlEnabled){a({hitlEnabled:!1,approvalPhases:[]});return}const o=r.style==="TASK_FORCE"?(y=t.find(p=>p.type==="EXECUTE"))==null?void 0:y.name:(u=t.find(p=>p.type==="SYNTHESIS"))==null?void 0:u.name;a({hitlEnabled:!0,approvalPhases:o?[o]:[]})}function m(o){const y=new Set(r.approvalPhases);y.has(o)?y.delete(o):y.add(o),a({approvalPhases:[...y]})}const i=B(d.timeoutPolicy),f=i&&(!d.approvalTimeout||!A(d.approvalTimeout));return e.jsxs("div",{className:"rounded-xl border border-border bg-secondary/10 p-4",children:[e.jsxs("label",{className:"flex items-start gap-3 cursor-pointer",htmlFor:"gw-hitl-enable",children:[e.jsx("input",{id:"gw-hitl-enable",type:"checkbox",checked:r.hitlEnabled,onChange:n,className:"mt-0.5 h-4 w-4 rounded border-input accent-primary","data-testid":"gw-hitl-enable"}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsxs("span",{className:"flex items-center gap-1.5 text-sm font-medium text-foreground",children:[e.jsx(de,{className:"h-4 w-4 text-amber-500","aria-hidden":"true"}),s("groupWizard.hitlTitle","Require human approval")]}),e.jsx("span",{className:"mt-0.5 block text-xs text-muted-foreground",children:s("groupWizard.hitlDesc","Pause the discussion at chosen phases and wait for a human decision before continuing.")})]})]}),r.hitlEnabled&&e.jsxs("div",{className:"mt-4 space-y-4 ps-7",children:[e.jsxs("div",{children:[e.jsx("p",{className:"mb-1.5 text-xs font-medium text-foreground",children:s("groupWizard.hitlApprovalPoints","Pause for approval at")}),t.length===0?e.jsx("p",{className:"text-xs text-muted-foreground",children:s("groupWizard.hitlNoPhases","This style has no preset phases to gate.")}):e.jsx("div",{className:"space-y-1.5","data-testid":"gw-hitl-phases",children:t.map((o,y)=>e.jsxs("label",{className:"flex items-center gap-2 rounded-md border border-border bg-background px-3 py-1.5 text-sm",children:[e.jsx("input",{type:"checkbox",checked:r.approvalPhases.includes(o.name),onChange:()=>m(o.name),className:"h-3.5 w-3.5 rounded border-input accent-primary","data-testid":`gw-hitl-phase-${y}`}),e.jsx("span",{className:"flex-1 text-foreground",children:o.name}),e.jsx(N,{variant:"outline",className:"text-[10px]",children:o.type})]},o.name))}),r.approvalPhases.length===0&&t.length>0&&e.jsxs("p",{className:"mt-1.5 flex items-center gap-1 text-xs text-amber-500",children:[e.jsx(M,{className:"h-3 w-3","aria-hidden":"true"}),s("groupWizard.hitlNoApprovalPoints","Select at least one phase, or the discussion will never pause.")]})]}),e.jsxs("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-2",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"gw-hitl-policy",className:"mb-1 block text-xs font-medium text-foreground",children:s("groupWizard.hitlTimeoutPolicy","If no decision in time")}),e.jsxs("select",{id:"gw-hitl-policy",value:d.timeoutPolicy??"WAIT_INDEFINITELY",onChange:o=>{const y=o.target.value,u={timeoutPolicy:y};B(y)&&!(d.approvalTimeout&&A(d.approvalTimeout))&&(u.approvalTimeout="PT15M"),l(u)},className:"w-full appearance-none rounded-lg border border-input bg-background px-3 py-2 pe-8 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring","data-testid":"gw-hitl-policy",children:[e.jsx("option",{value:"WAIT_INDEFINITELY",children:s("hitl.timeoutWaitIndefinitely","Wait Indefinitely")}),e.jsx("option",{value:"AUTO_APPROVE",children:s("hitl.timeoutAutoApprove","Auto-Approve")}),e.jsx("option",{value:"AUTO_REJECT",children:s("hitl.timeoutAutoReject","Auto-Reject")}),e.jsx("option",{value:"ABORT",children:s("hitl.timeoutAbort","Abort")})]})]}),i&&e.jsxs("div",{children:[e.jsx("label",{htmlFor:"gw-hitl-timeout",className:"mb-1 block text-xs font-medium text-foreground",children:s("groupWizard.hitlApprovalTimeout","Approval timeout")}),e.jsx("input",{id:"gw-hitl-timeout",type:"text",value:d.approvalTimeout??"",onChange:o=>l({approvalTimeout:o.target.value||null}),placeholder:"PT15M",className:g("w-full rounded-lg border bg-background px-3 py-2 text-sm font-mono text-foreground focus:outline-none focus:ring-2 focus:ring-ring",f?"border-destructive":"border-input"),"data-testid":"gw-hitl-timeout","aria-invalid":f}),e.jsx("p",{className:g("mt-1 text-[10px]",f?"text-destructive":"text-muted-foreground"),children:f?s("groupWizard.hitlTimeoutInvalid","Enter a positive ISO-8601 duration, e.g. PT15M or PT1H30M."):s("groupWizard.hitlTimeoutHint","ISO-8601 duration, e.g. PT30S, PT15M, PT2H.")})]})]}),r.style==="TASK_FORCE"&&e.jsxs("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-2",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"gw-hitl-granularity",className:"mb-1 block text-xs font-medium text-foreground",children:s("groupWizard.hitlGranularity","Approval granularity")}),e.jsxs("select",{id:"gw-hitl-granularity",value:d.granularity??"PHASE",onChange:o=>l({granularity:o.target.value}),className:"w-full appearance-none rounded-lg border border-input bg-background px-3 py-2 pe-8 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring","data-testid":"gw-hitl-granularity",children:[e.jsx("option",{value:"PHASE",children:s("hitl.granularityPhase","Phase")}),e.jsx("option",{value:"TASK",children:s("hitl.granularityTask","Task")})]}),e.jsx("p",{className:"mt-1 text-[10px] text-muted-foreground",children:s("groupWizard.hitlGranularityHint","Task-level approval applies to TASK_FORCE execution — approve or reject each task individually.")})]}),d.granularity==="TASK"&&e.jsxs("div",{children:[e.jsx("label",{htmlFor:"gw-hitl-rejection",className:"mb-1 block text-xs font-medium text-foreground",children:s("groupWizard.hitlOnTaskRejection","When a task is rejected")}),e.jsxs("select",{id:"gw-hitl-rejection",value:d.onTaskRejection??"FAIL",onChange:o=>l({onTaskRejection:o.target.value}),className:"w-full appearance-none rounded-lg border border-input bg-background px-3 py-2 pe-8 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring","data-testid":"gw-hitl-rejection",children:[e.jsx("option",{value:"FAIL",children:s("hitl.rejectionFail","Fail the task")}),e.jsx("option",{value:"RETRY",children:s("hitl.rejectionRetry","Retry the task")})]})]})]}),r.approvalPhases.length>0&&e.jsx("p",{className:"text-[10px] text-muted-foreground",children:s("groupWizard.hitlPinNote","Enabling approval points fixes this group's discussion phases ({{granularity}} granularity).",{granularity:Ce(s,r.style==="TASK_FORCE"?d.granularity:"PHASE")})})]})]})}function Ue({state:r,onChange:a,styleColors:s}){const{t}=E(),{data:d,refetch:l}=We(100),n=d?Se(d):[];function m(){a({members:[...r.members,pe(r.members.length)]})}function i(u){a({members:r.members.filter((p,v)=>v!==u)})}function f(u,p){a({members:r.members.map((v,j)=>j===u?{...v,...p}:v)})}async function o(u){var j;const p=r.members[u];if(!p||!p.displayName.trim())return;f(u,{creating:!0});const v={name:`${r.name} — ${p.displayName}`.trim(),systemPrompt:p.systemPrompt||`You are ${p.displayName}${p.role?`, a ${p.role} expert`:""}. Provide clear, actionable insights from your domain perspective.`,provider:p.provider||"anthropic",model:p.model||(((j=P.find(h=>h.id===(p.provider||"anthropic")))==null?void 0:j.defaultModel)??"claude-sonnet-5"),apiKey:p.apiKey||void 0,deploy:!0};try{const h=await $(v);f(u,{agentId:h.agentId,created:!0,creating:!1}),z.success(t("groupWizard.agentCreated",{name:p.displayName}))}catch(h){f(u,{creating:!1}),z.error(t("groupWizard.agentCreateFailed",{error:h instanceof Error?h.message:String(h)}))}}async function y(){var v;const u=r.moderator;if(!u)return;a({moderator:{...u,creating:!0}});const p={name:`${r.name} — Moderator`.trim(),systemPrompt:u.systemPrompt||"You are a skilled moderator. Synthesize the group's discussion into a clear, balanced summary that captures key insights, areas of agreement, and remaining disagreements.",provider:u.provider||"anthropic",model:u.model||(((v=P.find(j=>j.id===(u.provider||"anthropic")))==null?void 0:v.defaultModel)??"claude-sonnet-5"),apiKey:u.apiKey||void 0,deploy:!0};try{const j=await $(p);a({moderator:{...u,agentId:j.agentId,created:!0,creating:!1}}),z.success(t("groupWizard.moderatorCreated"))}catch(j){a({moderator:{...u,creating:!1}}),z.error(t("groupWizard.agentCreateFailed",{error:j instanceof Error?j.message:String(j)}))}}return e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-1",children:[e.jsx("h2",{className:"text-xl font-semibold text-foreground",children:t("groupWizard.membersTitle")}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("button",{onClick:()=>l(),className:"inline-flex items-center gap-1 rounded-md px-2 py-1 text-xs text-muted-foreground hover:bg-secondary hover:text-foreground transition-colors",title:t("groupWizard.refreshAgents"),children:e.jsx(_,{className:"h-3 w-3"})}),e.jsxs(N,{variant:"secondary",className:"text-xs",children:[n.length," ",t("groupWizard.existingAgents")]})]})]}),e.jsx("p",{className:"text-sm text-muted-foreground mb-4",children:t("groupWizard.membersDesc")}),e.jsx("div",{className:"space-y-3 max-h-[500px] overflow-y-auto pe-1",children:r.members.map((u,p)=>e.jsx(Be,{member:u,index:p,agents:n,styleColors:s,onUpdate:v=>f(p,v),onRemove:()=>i(p),onCreateAgent:()=>o(p),t},p))}),e.jsxs("button",{onClick:m,className:"flex w-full items-center justify-center gap-2 rounded-lg border-2 border-dashed border-border p-3 mt-3 text-sm font-medium text-muted-foreground hover:border-primary/40 hover:text-primary transition-colors","data-testid":"gw-add-member",children:[e.jsx(oe,{className:"h-4 w-4"}),t("groupWizard.addMember")]}),e.jsxs("div",{className:g("mt-5 rounded-xl border-2 p-4",s.border,s.bg),children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Y,{className:"h-4 w-4 text-primary"}),e.jsx("span",{className:"text-sm font-semibold text-foreground",children:t("groupWizard.moderator")}),e.jsx("span",{className:"text-xs text-muted-foreground",children:t("groupWizard.moderatorHint")})]}),r.moderator?e.jsx("button",{onClick:()=>a({moderator:null}),className:"rounded-md p-1 text-muted-foreground hover:text-destructive hover:bg-destructive/10 transition-colors",title:t("groupWizard.removeModerator"),children:e.jsx(ie,{className:"h-3.5 w-3.5"})}):e.jsxs("button",{onClick:()=>a({moderator:ge()}),className:"inline-flex items-center gap-1 rounded-md bg-primary/10 px-2.5 py-1 text-xs font-medium text-primary hover:bg-primary/20 transition-colors",children:[e.jsx($e,{className:"h-3 w-3"}),t("groupWizard.addModerator")]})]}),r.moderator&&e.jsx(Ye,{moderator:r.moderator,agents:n,onChange:u=>a({moderator:{...r.moderator,...u}}),onCreateAgent:y,t})]}),r.members.length<2&&e.jsxs("p",{className:"mt-3 text-xs text-amber-500 font-medium flex items-center gap-1.5",children:[e.jsx(M,{className:"h-3.5 w-3.5"}),t("groupWizard.needMembers")]}),r.members.some(u=>u.memberType==="HUMAN")&&e.jsxs("div",{className:"mt-4 rounded-xl border border-primary/30 bg-primary/5 p-4","data-testid":"human-turn-settings",children:[e.jsxs("h3",{className:"flex items-center gap-1.5 text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:[e.jsx(ue,{className:"h-3.5 w-3.5"}),t("groupWizard.humanTurnSettingsTitle","Human member turn settings")]}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:t("groupWizard.humanTurnSettingsHint","The discussion pauses and waits when it's a human member's turn to speak. Choose what happens if they don't respond in time.")}),e.jsxs("div",{className:"mt-3 grid grid-cols-1 gap-3 sm:grid-cols-2",children:[e.jsxs("div",{children:[e.jsxs("label",{className:"mb-1 flex items-center gap-1 text-xs font-medium text-muted-foreground",children:[e.jsx(Ae,{className:"h-3 w-3"}),t("groupWizard.humanTurnTimeoutLabel","Turn timeout (ISO-8601 duration)")]}),e.jsx("input",{value:r.humanTurnTimeout,onChange:u=>a({humanTurnTimeout:u.target.value}),placeholder:t("groupWizard.humanTurnTimeoutPlaceholder","e.g. PT24H — blank waits indefinitely"),className:g("w-full rounded-lg border bg-background px-3 py-2 text-sm placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring",r.humanTurnTimeout.trim()&&!A(r.humanTurnTimeout)?"border-destructive":"border-input"),"data-testid":"human-turn-timeout-input"}),r.humanTurnTimeout.trim()&&!A(r.humanTurnTimeout)&&e.jsx("p",{className:"mt-1 text-[11px] text-destructive",children:t("groupWizard.humanTurnTimeoutInvalid","Not a valid ISO-8601 duration, e.g. PT24H or P1D.")})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-xs font-medium text-muted-foreground",children:t("groupWizard.humanOnTimeoutLabel","On timeout")}),e.jsxs("select",{value:r.humanOnTimeout,onChange:u=>a({humanOnTimeout:u.target.value}),disabled:!r.humanTurnTimeout.trim(),className:"w-full rounded-lg border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring disabled:opacity-50","data-testid":"human-on-timeout-select",children:[e.jsx("option",{value:"SKIP_TURN",children:t("groupWizard.humanOnTimeoutSkip","Skip their turn and continue")}),e.jsx("option",{value:"ABORT",children:t("groupWizard.humanOnTimeoutAbort","Abort the discussion")})]})]})]})]})]})}function Be({member:r,index:a,agents:s,styleColors:t,onUpdate:d,onRemove:l,onCreateAgent:n,t:m}){const i=P.find(o=>o.id===r.provider),f=o=>{r.memberType!==o&&d({memberType:o,agentId:"",created:!1,creating:!1,mode:o==="AGENT"?"new":"existing"})};return e.jsxs("div",{className:g("rounded-xl border bg-card overflow-hidden transition-all",r.created?"border-emerald-500/40":r.mode==="new"?t.border:"border-border"),"data-testid":`member-card-${a}`,children:[e.jsxs("div",{className:"flex items-center gap-3 px-4 py-3 bg-secondary/20",children:[e.jsx("div",{className:g("flex h-9 w-9 shrink-0 items-center justify-center rounded-full text-xs font-bold text-white shadow-sm",r.created?"bg-emerald-500":ce(r.agentId||String(a))),children:r.created?e.jsx(L,{className:"h-4 w-4"}):le(r.displayName||"?")}),e.jsxs("div",{className:"flex-1 min-w-0 space-y-1",children:[e.jsxs("div",{className:g("flex items-center gap-1.5 rounded-md border px-2 py-0.5 transition-colors",r.displayName.trim()?"border-border/60 focus-within:border-primary/50":"border-amber-500/50 bg-amber-500/5"),children:[e.jsx(Re,{className:"h-3 w-3 shrink-0 text-muted-foreground/50"}),e.jsx("input",{value:r.displayName,onChange:o=>d({displayName:o.target.value}),className:"w-full bg-transparent text-sm font-semibold text-foreground focus:outline-none placeholder:text-muted-foreground/60",placeholder:m("groupWizard.displayNamePlaceholder"),autoFocus:!r.displayName&&!r.created,"data-testid":`member-name-${a}`})]}),e.jsx("input",{value:r.role??"",onChange:o=>d({role:o.target.value||null}),className:"w-full bg-transparent text-xs text-muted-foreground ps-2.5 focus:outline-none placeholder:text-muted-foreground/50",placeholder:m("groupWizard.rolePlaceholder")})]}),e.jsxs("div",{className:"flex items-center rounded-md border border-border bg-background overflow-hidden shrink-0",children:[e.jsx("button",{onClick:()=>f("AGENT"),className:g("px-2.5 py-1 text-[10px] font-medium transition-colors",r.memberType==="AGENT"?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground"),children:"Agent"}),e.jsxs("button",{onClick:()=>f("GROUP"),className:g("px-2.5 py-1 text-[10px] font-medium transition-colors",r.memberType==="GROUP"?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground"),children:[e.jsx(R,{className:"inline h-2.5 w-2.5 me-0.5"}),"Group"]}),e.jsxs("button",{onClick:()=>f("HUMAN"),className:g("px-2.5 py-1 text-[10px] font-medium transition-colors",r.memberType==="HUMAN"?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground"),"data-testid":`member-type-human-${a}`,children:[e.jsx(ue,{className:"inline h-2.5 w-2.5 me-0.5"}),m("groupWizard.memberTypeHuman","Human")]})]}),e.jsx("button",{onClick:l,className:"shrink-0 rounded-md p-1.5 text-muted-foreground hover:text-destructive hover:bg-destructive/10 transition-colors",title:m("common.delete"),"data-testid":`remove-member-${a}`,children:e.jsx(ie,{className:"h-3.5 w-3.5"})})]}),!r.created&&e.jsx("div",{className:"px-4 py-3 space-y-3",children:r.memberType==="GROUP"?e.jsx(qe,{agentId:r.agentId,onUpdate:d,t:m}):r.memberType==="HUMAN"?e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"block text-xs font-medium text-muted-foreground",children:m("groupWizard.humanPrincipalId","Principal ID")}),e.jsx("input",{value:r.agentId,onChange:o=>d({agentId:o.target.value}),placeholder:m("groupWizard.humanPrincipalIdPlaceholder","The user's login/principal id"),className:"w-full rounded-lg border border-input bg-background px-3 py-2 text-sm placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring","data-testid":`human-principal-id-${a}`}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:m("groupWizard.humanPrincipalIdHint","The identity that may submit this member's turns — the discussion pauses and waits for them when it's their turn to speak.")})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsxs("button",{onClick:()=>d({mode:"existing",agentId:""}),className:g("flex-1 flex items-center justify-center gap-2 rounded-lg border-2 py-2 text-xs font-medium transition-all",r.mode==="existing"?"border-primary bg-primary/5 text-primary":"border-border text-muted-foreground hover:border-primary/30"),children:[e.jsx(xe,{className:"h-3.5 w-3.5"}),m("groupWizard.useExisting")]}),e.jsxs("button",{onClick:()=>d({mode:"new",agentId:""}),className:g("flex-1 flex items-center justify-center gap-2 rounded-lg border-2 py-2 text-xs font-medium transition-all",r.mode==="new"?`${t.border} ${t.bg} ${t.text}`:"border-border text-muted-foreground hover:border-primary/30"),children:[e.jsx(D,{className:"h-3.5 w-3.5"}),m("groupWizard.createNew")]})]}),r.mode==="existing"&&e.jsxs("div",{className:"relative",children:[e.jsxs("select",{value:r.agentId,onChange:o=>d({agentId:o.target.value}),className:g("w-full appearance-none rounded-lg border bg-background px-3 py-2 pe-8 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring",r.agentId?"border-input":"border-amber-400/50"),children:[e.jsx("option",{value:"",children:m("groupWizard.selectAgent")}),s.map(o=>e.jsx("option",{value:o.id,children:o.name||o.id.slice(0,12)},o.id))]}),e.jsx(O,{className:"pointer-events-none absolute inset-e-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"})]}),r.mode==="new"&&e.jsxs("div",{className:"space-y-2.5",children:[e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-xs font-medium text-muted-foreground",children:m("groupWizard.systemPrompt")}),e.jsx("textarea",{value:r.systemPrompt,onChange:o=>d({systemPrompt:o.target.value}),placeholder:`You are ${r.displayName}${r.role?`, a ${r.role} expert`:""}. Provide insightful analysis from your domain perspective.`,rows:2,className:"w-full rounded-lg border border-input bg-background px-3 py-2 text-xs text-foreground placeholder:text-muted-foreground/60 focus:outline-none focus:ring-1 focus:ring-ring resize-y"})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-xs font-medium text-muted-foreground",children:m("groupWizard.provider")}),e.jsxs("div",{className:"relative",children:[e.jsx("select",{value:r.provider,onChange:o=>{d({provider:o.target.value,model:""})},className:"w-full appearance-none rounded-lg border border-input bg-background px-3 py-1.5 pe-7 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring",children:P.map(o=>e.jsx("option",{value:o.id,children:o.name},o.id))}),e.jsx(O,{className:"pointer-events-none absolute inset-e-2 top-1/2 h-3 w-3 -translate-y-1/2 text-muted-foreground"})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-xs font-medium text-muted-foreground",children:m("groupWizard.model")}),e.jsx("input",{value:r.model,onChange:o=>d({model:o.target.value}),className:"w-full rounded-lg border border-input bg-background px-3 py-1.5 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring",placeholder:`e.g. ${(i==null?void 0:i.defaultModel)??""}`})]})]}),(i==null?void 0:i.needsKey)&&e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-xs font-medium text-muted-foreground",children:m("groupWizard.apiKey")}),e.jsx(me,{value:r.apiKey,onChange:o=>d({apiKey:o}),placeholder:m("groupWizard.apiKeyPlaceholder"),testId:`gw-apikey-${a}`})]}),e.jsxs("button",{onClick:n,disabled:r.creating||!r.displayName.trim(),className:"w-full inline-flex items-center justify-center gap-2 rounded-lg bg-primary/10 px-4 py-2 text-xs font-medium text-primary hover:bg-primary/20 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",children:[r.creating?e.jsx(_,{className:"h-3 w-3 animate-spin"}):e.jsx(J,{className:"h-3 w-3"}),r.creating?m("groupWizard.creatingAgent"):m("groupWizard.createThisAgent")]})]})]})}),r.created&&e.jsxs("div",{className:"px-4 py-2 bg-emerald-500/5 border-t border-emerald-500/20 flex items-center gap-2",children:[e.jsx(q,{className:"h-3.5 w-3.5 text-emerald-500"}),e.jsx("span",{className:"text-xs text-emerald-600 dark:text-emerald-400 font-medium",children:m("groupWizard.agentReady")}),e.jsxs("span",{className:"text-[10px] text-muted-foreground font-mono ms-auto",children:[r.agentId.slice(0,12),"…"]})]})]})}function Ye({moderator:r,agents:a,onChange:s,onCreateAgent:t,t:d}){const l=P.find(n=>n.id===r.provider);return r.created?e.jsxs("div",{className:"flex items-center gap-2 rounded-lg bg-emerald-500/5 border border-emerald-500/20 p-2.5",children:[e.jsx(q,{className:"h-3.5 w-3.5 text-emerald-500 shrink-0"}),e.jsx("span",{className:"text-xs text-emerald-600 dark:text-emerald-400 font-medium flex-1",children:d("groupWizard.moderatorReady")}),e.jsxs("span",{className:"text-[10px] text-muted-foreground font-mono",children:[r.agentId.slice(0,12),"…"]})]}):e.jsxs("div",{className:"space-y-2.5",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsxs("button",{onClick:()=>s({mode:"existing",agentId:""}),className:g("flex-1 flex items-center justify-center gap-2 rounded-lg border-2 py-2 text-xs font-medium transition-all",r.mode==="existing"?"border-primary bg-primary/5 text-primary":"border-border text-muted-foreground hover:border-primary/30"),children:[e.jsx(xe,{className:"h-3.5 w-3.5"}),d("groupWizard.useExisting")]}),e.jsxs("button",{onClick:()=>s({mode:"new",agentId:""}),className:g("flex-1 flex items-center justify-center gap-2 rounded-lg border-2 py-2 text-xs font-medium transition-all",r.mode==="new"?"border-primary bg-primary/5 text-primary":"border-border text-muted-foreground hover:border-primary/30"),children:[e.jsx(D,{className:"h-3.5 w-3.5"}),d("groupWizard.createNew")]})]}),r.mode==="existing"?e.jsxs("div",{className:"relative",children:[e.jsxs("select",{value:r.agentId,onChange:n=>s({agentId:n.target.value}),className:"w-full appearance-none rounded-lg border border-input bg-background px-3 py-2 pe-8 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring",children:[e.jsx("option",{value:"",children:d("groupWizard.selectAgent")}),a.map(n=>e.jsx("option",{value:n.id,children:n.name||n.id.slice(0,12)},n.id))]}),e.jsx(O,{className:"pointer-events-none absolute inset-e-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"})]}):e.jsxs("div",{className:"space-y-2",children:[e.jsx("textarea",{value:r.systemPrompt,onChange:n=>s({systemPrompt:n.target.value}),placeholder:"You are a skilled moderator. Synthesize the group's discussion into a clear, balanced summary…",rows:2,className:"w-full rounded-lg border border-input bg-background px-3 py-2 text-xs text-foreground placeholder:text-muted-foreground/60 focus:outline-none focus:ring-1 focus:ring-ring resize-y"}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsxs("div",{className:"relative",children:[e.jsx("select",{value:r.provider,onChange:n=>{s({provider:n.target.value,model:""})},className:"w-full appearance-none rounded-lg border border-input bg-background px-3 py-1.5 pe-7 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring",children:P.map(n=>e.jsx("option",{value:n.id,children:n.name},n.id))}),e.jsx(O,{className:"pointer-events-none absolute inset-e-2 top-1/2 h-3 w-3 -translate-y-1/2 text-muted-foreground"})]}),e.jsx("input",{value:r.model,onChange:n=>s({model:n.target.value}),className:"rounded-lg border border-input bg-background px-3 py-1.5 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring",placeholder:`e.g. ${(l==null?void 0:l.defaultModel)??""}`})]}),(l==null?void 0:l.needsKey)&&e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-xs font-medium text-muted-foreground",children:d("groupWizard.apiKey")}),e.jsx(me,{value:r.apiKey,onChange:n=>s({apiKey:n}),placeholder:d("groupWizard.apiKeyPlaceholder"),testId:"gw-moderator-apikey"})]}),e.jsxs("button",{onClick:t,disabled:r.creating,className:"w-full inline-flex items-center justify-center gap-2 rounded-lg bg-primary/10 px-4 py-2 text-xs font-medium text-primary hover:bg-primary/20 transition-colors disabled:opacity-50",children:[r.creating?e.jsx(_,{className:"h-3 w-3 animate-spin"}):e.jsx(J,{className:"h-3 w-3"}),r.creating?d("groupWizard.creatingAgent"):d("groupWizard.createModerator")]})]})]})}function Ve({state:r}){const{t:a}=E(),s=H(r.style,a),t=I[r.style]??I.CUSTOM,d=r.members.filter(K).length+(r.moderator&&K(r.moderator)?1:0),l=r.members.filter(i=>i.memberType==="AGENT"&&i.mode==="existing"&&!i.agentId).length,n=r.members.filter(i=>i.created).length,m=Ge({members:r.members,phases:null,style:r.style,maxRounds:r.maxRounds});return e.jsxs("div",{children:[e.jsx("h2",{className:"text-xl font-semibold text-foreground",children:a("groupWizard.reviewTitle")}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:a("groupWizard.reviewDesc")}),e.jsxs("div",{className:"mt-6 space-y-5",children:[e.jsxs("div",{className:g("rounded-xl border-2 p-5 space-y-3",t.border,t.bg),children:[e.jsx("h3",{className:"text-lg font-bold text-foreground",children:r.name}),r.description&&e.jsx("p",{className:"text-sm text-muted-foreground",children:r.description}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsxs(N,{variant:"outline",className:g("text-xs",t.text),children:[s==null?void 0:s.icon," ",s==null?void 0:s.label]}),e.jsxs(N,{variant:"secondary",className:"text-xs",children:[e.jsx(R,{className:"me-1 h-3 w-3"}),r.members.length," members"]}),e.jsxs(N,{variant:"secondary",className:"text-xs",children:[r.maxRounds," rounds"]}),r.moderator&&e.jsxs(N,{variant:"default",className:"text-xs",children:[e.jsx(Y,{className:"me-1 h-3 w-3"})," Moderator"]}),r.hitlEnabled&&e.jsxs(N,{variant:"outline",className:"text-xs text-amber-600 dark:text-amber-400",children:[e.jsx(de,{className:"me-1 h-3 w-3"}),a("groupWizard.hitlReviewBadge","Human approval"),r.approvalPhases.length>0&&` · ${r.approvalPhases.length}`]})]})]}),d>0&&e.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-primary/30 bg-primary/5 p-3","data-testid":"auto-create-notice",children:[e.jsx(D,{className:"h-4 w-4 text-primary shrink-0 mt-0.5"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium text-primary",children:a("groupWizard.autoCreateNotice",{count:d})}),e.jsx("p",{className:"text-xs text-muted-foreground mt-0.5",children:a("groupWizard.autoCreateHint")})]})]}),l>0&&e.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-amber-500/30 bg-amber-500/5 p-3",children:[e.jsx(M,{className:"h-4 w-4 text-amber-500 shrink-0 mt-0.5"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium text-amber-600 dark:text-amber-400",children:a("groupWizard.unassignedWarning",{count:l})}),e.jsx("p",{className:"text-xs text-muted-foreground mt-0.5",children:a("groupWizard.unassignedHint")})]})]}),m.length>0&&e.jsx("div",{className:"flex flex-col gap-2 rounded-lg border border-amber-500/30 bg-amber-500/5 p-3","data-testid":"wizard-role-coverage-warning",children:m.map(i=>e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx(M,{className:"h-4 w-4 text-amber-500 shrink-0 mt-0.5"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium text-amber-600 dark:text-amber-400",children:a("groupWizard.roleCoverageWarning",'No member has the role "{{role}}"',{role:i.role})}),e.jsx("p",{className:"text-xs text-muted-foreground mt-0.5",children:a("groupWizard.roleCoverageHint","The server falls back to letting every member speak in {{phases}}, so both sides get argued by the same people. Go back to Members and set the role field.",{phases:i.phaseNames.join(", ")})})]})]},i.role))}),e.jsxs("div",{children:[e.jsxs("h4",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground mb-2",children:[a("groupWizard.reviewMembers"),n>0&&e.jsxs("span",{className:"ms-2 font-normal normal-case text-emerald-500",children:["(",n," newly created)"]})]}),e.jsxs("div",{className:"space-y-1",children:[r.members.map((i,f)=>e.jsxs("div",{className:"flex items-center gap-3 rounded-lg px-3 py-2 hover:bg-secondary/30 transition-colors",children:[e.jsx("div",{className:g("flex h-7 w-7 shrink-0 items-center justify-center rounded-full text-[10px] font-bold text-white",i.created?"bg-emerald-500":ce(i.agentId||String(f))),children:i.created?e.jsx(L,{className:"h-3 w-3"}):le(i.displayName||"?")}),e.jsx("span",{className:"text-sm font-medium text-foreground flex-1",children:i.displayName}),i.role&&e.jsx(N,{variant:"outline",className:"text-[10px]",children:i.role}),i.memberType==="GROUP"&&e.jsxs(N,{variant:"secondary",className:"text-[10px]",children:[e.jsx(R,{className:"h-2.5 w-2.5 me-0.5"})," Group"]}),i.created&&e.jsx(N,{variant:"success",className:"text-[10px]",children:"✓ new"}),e.jsx("span",{className:"font-mono text-[10px] text-muted-foreground",children:i.agentId?i.agentId.slice(0,8)+"…":"unassigned"})]},f)),r.moderator&&e.jsxs("div",{className:"flex items-center gap-3 rounded-lg px-3 py-2 bg-primary/5 border border-primary/20",children:[e.jsx("div",{className:"flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-primary text-primary-foreground text-[10px] font-bold",children:e.jsx(Y,{className:"h-3 w-3"})}),e.jsx("span",{className:"text-sm font-medium text-foreground flex-1",children:"Moderator"}),e.jsx(N,{variant:"default",className:"text-[10px]",children:"⭐ Synthesis"}),e.jsx("span",{className:"font-mono text-[10px] text-muted-foreground",children:r.moderator.agentId?r.moderator.agentId.slice(0,8)+"…":"unassigned"})]})]})]}),s&&e.jsxs("div",{className:g("rounded-lg border p-3",t.border,t.bg),children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-wider text-muted-foreground mb-1",children:a("groupWizard.flowPreview")}),e.jsx("p",{className:g("text-xs font-medium",t.text),children:s.flow})]})]})]})}function qe({agentId:r,onUpdate:a,t:s}){const{data:t,isLoading:d,isError:l,refetch:n}=Me(100),m=t&&t.length>0;return e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-xs font-medium text-muted-foreground",children:s("groupWizard.selectGroup","Select existing group")}),d?e.jsx("div",{className:"rounded-lg border border-input bg-background px-3 py-2 text-xs text-muted-foreground animate-pulse",children:s("common.loading","Loading…")}):l&&!t?e.jsx(Oe,{onRetry:()=>n(),message:s("common.loadError","Failed to load data")}):m?e.jsxs("div",{className:"relative",children:[e.jsxs("select",{value:r,onChange:i=>a({agentId:i.target.value,mode:"existing"}),className:g("w-full appearance-none rounded-lg border bg-background px-3 py-2 pe-8 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring",r?"border-input":"border-amber-400/50"),children:[e.jsx("option",{value:"",children:s("groupWizard.selectGroup","Select existing group…")}),t.map(i=>e.jsxs("option",{value:i.id,children:[i.name||i.id.slice(0,12)," (",i.memberCount," members)"]},i.id))]}),e.jsx(O,{className:"pointer-events-none absolute inset-e-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"})]}):e.jsxs("div",{className:"rounded-lg border border-dashed border-amber-400/50 bg-amber-400/5 px-3 py-3 text-center",children:[e.jsx(R,{className:"h-4 w-4 text-amber-500 mx-auto mb-1"}),e.jsx("p",{className:"text-xs font-medium text-amber-600 dark:text-amber-400",children:s("groupWizard.noGroupsYet","No groups available")}),e.jsx("p",{className:"text-[10px] text-muted-foreground mt-0.5",children:s("groupWizard.noGroupsHint","Create a group first, then add it as a nested sub-group member.")})]}),m&&e.jsx("p",{className:"mt-1 text-[10px] text-muted-foreground",children:s("groupWizard.groupMemberHint","This group will participate as a nested sub-group in the discussion.")})]})}export{cr as GroupWizardPage}; diff --git a/src/main/resources/META-INF/resources/assets/group-workspace-Ce93uv6R.js b/src/main/resources/META-INF/resources/assets/group-workspace-B23PSf-s.js similarity index 96% rename from src/main/resources/META-INF/resources/assets/group-workspace-Ce93uv6R.js rename to src/main/resources/META-INF/resources/assets/group-workspace-B23PSf-s.js index 414a239657..09f226b57b 100644 --- a/src/main/resources/META-INF/resources/assets/group-workspace-Ce93uv6R.js +++ b/src/main/resources/META-INF/resources/assets/group-workspace-B23PSf-s.js @@ -1 +1 @@ -import{aZ as x,u as te,aq as w,a_ as W,ap as re,aX as ae,c as oe,dH as ce,r as c,j as e,S as O,o as ne,a1 as de,C as ie,bK as $,V as le,i as v,k as K,P as V,Z as ue,ae as pe,_ as p,R as C}from"./index-BY6d8wze.js";import{E as me}from"./error-state-BXe3bnJT.js";import{B as q}from"./back-link-D2LpIJ51.js";import{C as xe}from"./clipboard-list-C1xV5BuY.js";import{D as ge}from"./dollar-sign-Dt9VyGPU.js";import{U as be}from"./users-round-I6RBruZ_.js";const y=4e3,ke=200,he=4e3,fe="";function je(r){return x.get(`/groupstore/groups/${encodeURIComponent(r)}/workspace`)}function Ne(r,a){return x.post(`/groupstore/groups/${encodeURIComponent(r)}/workspace/backlog`,a)}function ve(r,a){return x.post(`/groupstore/groups/${encodeURIComponent(r)}/workspace/cadences`,a)}function Ce(r,a){return x.delete(`/groupstore/groups/${encodeURIComponent(r)}/workspace/cadences/${encodeURIComponent(a)}`)}const g=["group-workspace"];function ye(r){return te({queryKey:[...g,r],queryFn:()=>je(r),enabled:!!r,refetchInterval:3e4})}function we(r){const a=w();return W({mutationFn:s=>Ne(r,s),onSuccess:()=>a.invalidateQueries({queryKey:[...g,r]})})}function We(r){const a=w();return W({mutationFn:s=>ve(r,s),onSuccess:()=>a.invalidateQueries({queryKey:[...g,r]})})}function Te(r){const a=w();return W({mutationFn:s=>Ce(r,s),onSuccess:()=>a.invalidateQueries({queryKey:[...g,r]})})}const Se={PENDING:"bg-muted text-muted-foreground",ASSIGNED:"bg-blue-500/10 text-blue-600",IN_PROGRESS:"bg-amber-500/10 text-amber-600",COMPLETED:"bg-sky-500/10 text-sky-600",VERIFIED:"bg-emerald-500/10 text-emerald-600",FAILED:"bg-destructive/10 text-destructive",BLOCKED:"bg-muted text-muted-foreground",AWAITING_APPROVAL:"bg-orange-500/10 text-orange-600"};function Ie(){const{id:r}=re(),[a]=ae(),{t:s}=oe(),b=Number(a.get("version"))||1,{data:k}=ce(r||"",b),{data:o,isLoading:z,isError:Z,refetch:Q}=ye(r),T=we(r),S=We(r),P=Te(r),[i,E]=c.useState(""),[R,A]=c.useState(""),[D,L]=c.useState(0),[I,_]=c.useState(null),[l,M]=c.useState(""),[B,H]=c.useState("UTC"),[h,U]=c.useState(""),[F,X]=c.useState(5),[f,J]=c.useState(""),[G,u]=c.useState(null),[j,N]=c.useState(null);function Y(){_(null),i.trim()&&T.mutate({subject:i.trim(),description:R.trim()||void 0,priority:D},{onSuccess:()=>{p.success(s("groupWorkspace.taskAdded","Task added to the backlog")),E(""),A(""),L(0)},onError:t=>_(C(t))})}function ee(){if(u(null),!l.trim())return;const t=f.trim()?Number(f):void 0;if(t!==void 0&&(!Number.isFinite(t)||t<0)){u(s("groupWorkspace.maxCostInvalid","Max cost per run must be a number of 0 or more."));return}if(h.trim().length>y){u(s("groupWorkspace.inputTemplateTooLong","The prompt template is limited to {{max}} characters.",{max:y}));return}S.mutate({cronExpression:l.trim(),timeZone:B.trim()||"UTC",inputTemplate:h.trim()||void 0,maxBacklogTasksPerRun:F,maxCostPerRun:t},{onSuccess:()=>{p.success(s("groupWorkspace.cadenceAdded","Cadence added")),M(""),U("")},onError:n=>u(C(n))})}if(z)return e.jsxs("div",{className:"space-y-4",children:[e.jsx(O,{className:"h-8 w-1/3"}),e.jsx(O,{className:"h-64 w-full"})]});if(Z||!o)return e.jsxs("div",{className:"space-y-4",children:[e.jsx(q,{to:`/manage/groups/${r}?version=${b}`,label:s("groupWorkspace.backToGroup","Back to group")}),e.jsx(me,{message:s("common.error"),onRetry:()=>Q(),retryLabel:s("common.retry")})]});const se=o.runningDiscussionId!==fe,d="w-full rounded-lg border border-input bg-background px-3 py-2 text-sm placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring";return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(q,{to:`/manage/groups/${r}?version=${b}`,label:(k==null?void 0:k.name)||s("groupWorkspace.backToGroup","Back to group")}),e.jsxs("h1",{className:"flex items-center gap-2 text-3xl font-bold text-foreground",children:[e.jsx(ne,{className:"h-8 w-8 text-primary"}),s("groupWorkspace.title","Standing Team Workspace")]}),e.jsx("p",{className:"text-muted-foreground",children:s("groupWorkspace.subtitle","A persistent backlog and recurring cadences this group runs unattended, on a schedule.")})]}),se&&e.jsxs("div",{className:"flex items-center gap-2 rounded-lg border border-amber-500/30 bg-amber-500/5 p-3 text-sm text-amber-700 dark:text-amber-400","data-testid":"workspace-running-banner",children:[e.jsx(de,{className:"h-4 w-4 animate-spin","aria-hidden":"true"}),s("groupWorkspace.cadenceRunning","A cadence-run discussion is currently in progress.")]}),e.jsxs("div",{className:"grid grid-cols-2 gap-3 sm:grid-cols-4","data-testid":"workspace-metrics",children:[e.jsx(m,{icon:e.jsx(xe,{className:"h-4 w-4"}),label:s("groupWorkspace.discussions","Discussions"),value:String(o.metrics.discussions)}),e.jsx(m,{icon:e.jsx(ie,{className:"h-4 w-4"}),label:s("groupWorkspace.tasksVerified","Tasks Verified"),value:String(o.metrics.tasksVerified)}),e.jsx(m,{icon:e.jsx(ge,{className:"h-4 w-4"}),label:s("groupWorkspace.totalCost","Total Cost"),value:$(o.metrics.totalCost)}),e.jsx(m,{icon:e.jsx(le,{className:"h-4 w-4"}),label:s("groupWorkspace.lastRun","Last Run"),value:o.metrics.lastRunAt?new Date(o.metrics.lastRunAt).toLocaleString():s("groupWorkspace.never","Never")})]}),Object.keys(o.metrics.perMemberStats).length>0&&e.jsxs("div",{className:"rounded-xl border border-border bg-card p-4",children:[e.jsxs("h3",{className:"mb-2 flex items-center gap-1.5 text-sm font-semibold text-foreground",children:[e.jsx(be,{className:"h-4 w-4"}),s("groupWorkspace.perMemberStats","Per-member reliability")]}),e.jsxs("table",{className:"w-full text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"text-start text-xs text-muted-foreground",children:[e.jsx("th",{scope:"col",className:"py-1 text-start font-medium",children:s("groupWorkspace.member","Member")}),e.jsx("th",{scope:"col",className:"py-1 text-end font-medium",children:s("groupWorkspace.verified","Verified")}),e.jsx("th",{scope:"col",className:"py-1 text-end font-medium",children:s("groupWorkspace.failed","Failed")})]})}),e.jsx("tbody",{children:Object.entries(o.metrics.perMemberStats).map(([t,n])=>e.jsxs("tr",{className:"border-t border-border",children:[e.jsx("td",{className:"py-1.5 font-mono text-xs text-foreground",children:t}),e.jsx("td",{className:"py-1.5 text-end text-emerald-600",children:n.tasksVerified}),e.jsx("td",{className:"py-1.5 text-end text-destructive",children:n.tasksFailed})]},t))})]})]}),e.jsxs("div",{className:"rounded-xl border border-border bg-card p-4","data-testid":"workspace-backlog",children:[e.jsx("h3",{className:"mb-3 flex items-center justify-between text-sm font-semibold text-foreground",children:e.jsx("span",{children:s("groupWorkspace.backlogTitle","Backlog ({{count}})",{count:o.backlog.tasks.length})})}),e.jsx("div",{className:"mb-3 space-y-2",children:o.backlog.tasks.length===0?e.jsx("p",{className:"text-xs text-muted-foreground",children:s("groupWorkspace.backlogEmpty","No backlog tasks yet.")}):o.backlog.tasks.map(t=>e.jsxs("div",{className:"rounded-lg border border-border bg-secondary/20 p-2.5","data-testid":`backlog-task-${t.id}`,children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"flex-1 text-xs font-medium text-foreground",children:t.subject}),e.jsx("span",{className:v("rounded-full px-1.5 py-0 text-[9px] font-medium",Se[t.status]??"bg-muted"),children:t.status}),e.jsxs("span",{className:"text-[10px] text-muted-foreground",children:["P",t.priority]})]}),t.description&&e.jsx("p",{className:"mt-1 text-[10px] text-muted-foreground line-clamp-2",children:t.description})]},t.id))}),e.jsxs("div",{className:"space-y-2 border-t border-border pt-3",children:[e.jsx("input",{value:i,onChange:t=>E(t.target.value),placeholder:s("groupWorkspace.taskSubjectPlaceholder","Task subject"),maxLength:ke,className:d,"data-testid":"workspace-task-subject"}),e.jsx("textarea",{value:R,onChange:t=>A(t.target.value),placeholder:s("groupWorkspace.taskDescriptionPlaceholder","Description (optional)"),maxLength:he,rows:2,className:v(d,"resize-none"),"data-testid":"workspace-task-description"}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("label",{htmlFor:"workspace-task-priority",className:"text-xs text-muted-foreground",children:s("groupWorkspace.priority","Priority")}),e.jsx("input",{id:"workspace-task-priority",type:"number",value:D,onChange:t=>L(Number(t.target.value)||0),className:"w-20 rounded-lg border border-input bg-background px-2 py-1 text-sm","data-testid":"workspace-task-priority"}),e.jsxs(K,{size:"sm",className:"ms-auto",onClick:Y,disabled:!i.trim()||T.isPending,"data-testid":"workspace-add-task",children:[e.jsx(V,{className:"h-3.5 w-3.5"}),s("groupWorkspace.addTask","Add Task")]})]}),I&&e.jsx("p",{className:"text-xs text-destructive","data-testid":"workspace-task-error",children:I})]})]}),e.jsxs("div",{className:"rounded-xl border border-border bg-card p-4","data-testid":"workspace-cadences",children:[e.jsx("h3",{className:"mb-3 text-sm font-semibold text-foreground",children:s("groupWorkspace.cadencesTitle","Cadences ({{count}})",{count:o.cadences.length})}),e.jsx("div",{className:"mb-3 space-y-2",children:o.cadences.length===0?e.jsx("p",{className:"text-xs text-muted-foreground",children:s("groupWorkspace.cadencesEmpty","No recurring cadences configured yet.")}):o.cadences.map(t=>e.jsxs("div",{className:"flex items-center gap-2 rounded-lg border border-border bg-secondary/20 p-2.5","data-testid":`cadence-${t.cadenceId}`,children:[e.jsxs("div",{className:"min-w-0 flex-1 text-xs",children:[e.jsx("p",{className:"font-mono text-foreground",children:t.cadenceId}),e.jsxs("p",{className:"text-muted-foreground",children:[s("groupWorkspace.cadenceSummary",{defaultValue:"up to {{max}} task/run",defaultValue_other:"up to {{max}} tasks/run",count:t.maxBacklogTasksPerRun,max:t.maxBacklogTasksPerRun}),t.maxCostPerRun!=null&&` · ${$(t.maxCostPerRun)}/run`,` · ${s("groupWorkspace.createdBy","by {{who}}",{who:t.createdBy})}`]})]}),e.jsx("button",{type:"button",onClick:()=>N(t.cadenceId),className:"rounded-md p-1.5 text-muted-foreground hover:text-destructive hover:bg-destructive/10 transition-colors",title:s("common.delete"),"aria-label":s("common.delete"),"data-testid":`delete-cadence-${t.cadenceId}`,children:e.jsx(ue,{className:"h-3.5 w-3.5"})})]},t.cadenceId))}),e.jsxs("div",{className:"space-y-2 border-t border-border pt-3",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"workspace-cron",className:"mb-0.5 block text-[10px] text-muted-foreground",children:s("groupWorkspace.cronLabel","Cron expression")}),e.jsx("input",{id:"workspace-cron",value:l,onChange:t=>M(t.target.value),placeholder:s("groupWorkspace.cronPlaceholder","e.g. 0 9 * * MON"),className:d,"data-testid":"workspace-cron-input"})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"workspace-timezone",className:"mb-0.5 block text-[10px] text-muted-foreground",children:s("groupWorkspace.timeZoneLabel","Time zone")}),e.jsx("input",{id:"workspace-timezone",value:B,onChange:t=>H(t.target.value),placeholder:"UTC",className:d,"data-testid":"workspace-timezone-input"})]})]}),e.jsx("textarea",{value:h,onChange:t=>U(t.target.value),placeholder:s("groupWorkspace.inputTemplatePlaceholder","Prompt template for each run (optional — a plain backlog listing is used otherwise)"),maxLength:y,rows:2,className:v(d,"resize-none"),"data-testid":"workspace-input-template"}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"workspace-max-per-run",className:"mb-0.5 block text-[10px] text-muted-foreground",children:s("groupWorkspace.maxPerRunLabel","Max tasks / run")}),e.jsx("input",{id:"workspace-max-per-run",type:"number",min:1,value:F,onChange:t=>{const n=Math.trunc(Number(t.target.value));X(Number.isFinite(n)&&n>0?n:1)},className:d,"data-testid":"workspace-max-per-run"})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"workspace-max-cost",className:"mb-0.5 block text-[10px] text-muted-foreground",children:s("groupWorkspace.maxCostLabel","Max cost / run ($, optional)")}),e.jsx("input",{id:"workspace-max-cost",type:"number",min:0,step:"0.01",value:f,onChange:t=>J(t.target.value),placeholder:s("groupWorkspace.maxCostPlaceholder","group default"),className:d,"data-testid":"workspace-max-cost"})]})]}),e.jsxs(K,{size:"sm",onClick:ee,disabled:!l.trim()||S.isPending,"data-testid":"workspace-add-cadence",children:[e.jsx(V,{className:"h-3.5 w-3.5"}),s("groupWorkspace.addCadence","Add Cadence")]}),G&&e.jsx("p",{className:"text-xs text-destructive","data-testid":"workspace-cadence-error",children:G})]})]}),e.jsx(pe,{open:j!==null,onOpenChange:t=>!t&&N(null),title:s("groupWorkspace.confirmDeleteCadenceTitle","Delete this cadence?"),description:s("groupWorkspace.confirmDeleteCadenceDesc","This stops its scheduled runs. Already-run discussions are not affected."),confirmLabel:s("common.delete"),cancelLabel:s("common.cancel"),variant:"destructive",isPending:P.isPending,onConfirm:()=>{j&&P.mutate(j,{onSuccess:()=>p.success(s("groupWorkspace.cadenceDeleted","Cadence deleted")),onError:t=>p.error(C(t))}),N(null)}})]})}function m({icon:r,label:a,value:s}){return e.jsxs("div",{className:"rounded-xl border border-border bg-card p-3",children:[e.jsxs("div",{className:"flex items-center gap-1.5 text-[10px] font-medium uppercase tracking-wider text-muted-foreground",children:[r,a]}),e.jsx("p",{className:"mt-1 text-lg font-bold text-foreground",children:s})]})}export{Ie as GroupWorkspacePage}; +import{aZ as x,u as te,aq as w,a_ as W,ap as re,aX as ae,c as oe,dI as ce,r as c,j as e,S as O,o as ne,a1 as de,C as ie,bL as $,V as le,i as v,k as K,P as V,Z as ue,ae as pe,_ as p,R as C}from"./index-BnLj1hck.js";import{E as me}from"./error-state-D4qtZYFq.js";import{B as q}from"./back-link-tBVRORpr.js";import{C as xe}from"./clipboard-list-BKNHK2TK.js";import{D as ge}from"./dollar-sign-HonLwnZc.js";import{U as be}from"./users-round-BYVKZK-i.js";const y=4e3,ke=200,he=4e3,fe="";function je(r){return x.get(`/groupstore/groups/${encodeURIComponent(r)}/workspace`)}function Ne(r,a){return x.post(`/groupstore/groups/${encodeURIComponent(r)}/workspace/backlog`,a)}function ve(r,a){return x.post(`/groupstore/groups/${encodeURIComponent(r)}/workspace/cadences`,a)}function Ce(r,a){return x.delete(`/groupstore/groups/${encodeURIComponent(r)}/workspace/cadences/${encodeURIComponent(a)}`)}const g=["group-workspace"];function ye(r){return te({queryKey:[...g,r],queryFn:()=>je(r),enabled:!!r,refetchInterval:3e4})}function we(r){const a=w();return W({mutationFn:s=>Ne(r,s),onSuccess:()=>a.invalidateQueries({queryKey:[...g,r]})})}function We(r){const a=w();return W({mutationFn:s=>ve(r,s),onSuccess:()=>a.invalidateQueries({queryKey:[...g,r]})})}function Te(r){const a=w();return W({mutationFn:s=>Ce(r,s),onSuccess:()=>a.invalidateQueries({queryKey:[...g,r]})})}const Se={PENDING:"bg-muted text-muted-foreground",ASSIGNED:"bg-blue-500/10 text-blue-600",IN_PROGRESS:"bg-amber-500/10 text-amber-600",COMPLETED:"bg-sky-500/10 text-sky-600",VERIFIED:"bg-emerald-500/10 text-emerald-600",FAILED:"bg-destructive/10 text-destructive",BLOCKED:"bg-muted text-muted-foreground",AWAITING_APPROVAL:"bg-orange-500/10 text-orange-600"};function Ie(){const{id:r}=re(),[a]=ae(),{t:s}=oe(),b=Number(a.get("version"))||1,{data:k}=ce(r||"",b),{data:o,isLoading:z,isError:Z,refetch:Q}=ye(r),T=we(r),S=We(r),P=Te(r),[i,E]=c.useState(""),[R,A]=c.useState(""),[D,L]=c.useState(0),[I,_]=c.useState(null),[l,M]=c.useState(""),[B,X]=c.useState("UTC"),[h,U]=c.useState(""),[F,H]=c.useState(5),[f,J]=c.useState(""),[G,u]=c.useState(null),[j,N]=c.useState(null);function Y(){_(null),i.trim()&&T.mutate({subject:i.trim(),description:R.trim()||void 0,priority:D},{onSuccess:()=>{p.success(s("groupWorkspace.taskAdded","Task added to the backlog")),E(""),A(""),L(0)},onError:t=>_(C(t))})}function ee(){if(u(null),!l.trim())return;const t=f.trim()?Number(f):void 0;if(t!==void 0&&(!Number.isFinite(t)||t<0)){u(s("groupWorkspace.maxCostInvalid","Max cost per run must be a number of 0 or more."));return}if(h.trim().length>y){u(s("groupWorkspace.inputTemplateTooLong","The prompt template is limited to {{max}} characters.",{max:y}));return}S.mutate({cronExpression:l.trim(),timeZone:B.trim()||"UTC",inputTemplate:h.trim()||void 0,maxBacklogTasksPerRun:F,maxCostPerRun:t},{onSuccess:()=>{p.success(s("groupWorkspace.cadenceAdded","Cadence added")),M(""),U("")},onError:n=>u(C(n))})}if(z)return e.jsxs("div",{className:"space-y-4",children:[e.jsx(O,{className:"h-8 w-1/3"}),e.jsx(O,{className:"h-64 w-full"})]});if(Z||!o)return e.jsxs("div",{className:"space-y-4",children:[e.jsx(q,{to:`/manage/groups/${r}?version=${b}`,label:s("groupWorkspace.backToGroup","Back to group")}),e.jsx(me,{message:s("common.error"),onRetry:()=>Q(),retryLabel:s("common.retry")})]});const se=o.runningDiscussionId!==fe,d="w-full rounded-lg border border-input bg-background px-3 py-2 text-sm placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring";return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(q,{to:`/manage/groups/${r}?version=${b}`,label:(k==null?void 0:k.name)||s("groupWorkspace.backToGroup","Back to group")}),e.jsxs("h1",{className:"flex items-center gap-2 text-3xl font-bold text-foreground",children:[e.jsx(ne,{className:"h-8 w-8 text-primary"}),s("groupWorkspace.title","Standing Team Workspace")]}),e.jsx("p",{className:"text-muted-foreground",children:s("groupWorkspace.subtitle","A persistent backlog and recurring cadences this group runs unattended, on a schedule.")})]}),se&&e.jsxs("div",{className:"flex items-center gap-2 rounded-lg border border-amber-500/30 bg-amber-500/5 p-3 text-sm text-amber-700 dark:text-amber-400","data-testid":"workspace-running-banner",children:[e.jsx(de,{className:"h-4 w-4 animate-spin","aria-hidden":"true"}),s("groupWorkspace.cadenceRunning","A cadence-run discussion is currently in progress.")]}),e.jsxs("div",{className:"grid grid-cols-2 gap-3 sm:grid-cols-4","data-testid":"workspace-metrics",children:[e.jsx(m,{icon:e.jsx(xe,{className:"h-4 w-4"}),label:s("groupWorkspace.discussions","Discussions"),value:String(o.metrics.discussions)}),e.jsx(m,{icon:e.jsx(ie,{className:"h-4 w-4"}),label:s("groupWorkspace.tasksVerified","Tasks Verified"),value:String(o.metrics.tasksVerified)}),e.jsx(m,{icon:e.jsx(ge,{className:"h-4 w-4"}),label:s("groupWorkspace.totalCost","Total Cost"),value:$(o.metrics.totalCost)}),e.jsx(m,{icon:e.jsx(le,{className:"h-4 w-4"}),label:s("groupWorkspace.lastRun","Last Run"),value:o.metrics.lastRunAt?new Date(o.metrics.lastRunAt).toLocaleString():s("groupWorkspace.never","Never")})]}),Object.keys(o.metrics.perMemberStats).length>0&&e.jsxs("div",{className:"rounded-xl border border-border bg-card p-4",children:[e.jsxs("h3",{className:"mb-2 flex items-center gap-1.5 text-sm font-semibold text-foreground",children:[e.jsx(be,{className:"h-4 w-4"}),s("groupWorkspace.perMemberStats","Per-member reliability")]}),e.jsxs("table",{className:"w-full text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"text-start text-xs text-muted-foreground",children:[e.jsx("th",{scope:"col",className:"py-1 text-start font-medium",children:s("groupWorkspace.member","Member")}),e.jsx("th",{scope:"col",className:"py-1 text-end font-medium",children:s("groupWorkspace.verified","Verified")}),e.jsx("th",{scope:"col",className:"py-1 text-end font-medium",children:s("groupWorkspace.failed","Failed")})]})}),e.jsx("tbody",{children:Object.entries(o.metrics.perMemberStats).map(([t,n])=>e.jsxs("tr",{className:"border-t border-border",children:[e.jsx("td",{className:"py-1.5 font-mono text-xs text-foreground",children:t}),e.jsx("td",{className:"py-1.5 text-end text-emerald-600",children:n.tasksVerified}),e.jsx("td",{className:"py-1.5 text-end text-destructive",children:n.tasksFailed})]},t))})]})]}),e.jsxs("div",{className:"rounded-xl border border-border bg-card p-4","data-testid":"workspace-backlog",children:[e.jsx("h3",{className:"mb-3 flex items-center justify-between text-sm font-semibold text-foreground",children:e.jsx("span",{children:s("groupWorkspace.backlogTitle","Backlog ({{count}})",{count:o.backlog.tasks.length})})}),e.jsx("div",{className:"mb-3 space-y-2",children:o.backlog.tasks.length===0?e.jsx("p",{className:"text-xs text-muted-foreground",children:s("groupWorkspace.backlogEmpty","No backlog tasks yet.")}):o.backlog.tasks.map(t=>e.jsxs("div",{className:"rounded-lg border border-border bg-secondary/20 p-2.5","data-testid":`backlog-task-${t.id}`,children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"flex-1 text-xs font-medium text-foreground",children:t.subject}),e.jsx("span",{className:v("rounded-full px-1.5 py-0 text-[9px] font-medium",Se[t.status]??"bg-muted"),children:t.status}),e.jsxs("span",{className:"text-[10px] text-muted-foreground",children:["P",t.priority]})]}),t.description&&e.jsx("p",{className:"mt-1 text-[10px] text-muted-foreground line-clamp-2",children:t.description})]},t.id))}),e.jsxs("div",{className:"space-y-2 border-t border-border pt-3",children:[e.jsx("input",{value:i,onChange:t=>E(t.target.value),placeholder:s("groupWorkspace.taskSubjectPlaceholder","Task subject"),maxLength:ke,className:d,"data-testid":"workspace-task-subject"}),e.jsx("textarea",{value:R,onChange:t=>A(t.target.value),placeholder:s("groupWorkspace.taskDescriptionPlaceholder","Description (optional)"),maxLength:he,rows:2,className:v(d,"resize-none"),"data-testid":"workspace-task-description"}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("label",{htmlFor:"workspace-task-priority",className:"text-xs text-muted-foreground",children:s("groupWorkspace.priority","Priority")}),e.jsx("input",{id:"workspace-task-priority",type:"number",value:D,onChange:t=>L(Number(t.target.value)||0),className:"w-20 rounded-lg border border-input bg-background px-2 py-1 text-sm","data-testid":"workspace-task-priority"}),e.jsxs(K,{size:"sm",className:"ms-auto",onClick:Y,disabled:!i.trim()||T.isPending,"data-testid":"workspace-add-task",children:[e.jsx(V,{className:"h-3.5 w-3.5"}),s("groupWorkspace.addTask","Add Task")]})]}),I&&e.jsx("p",{className:"text-xs text-destructive","data-testid":"workspace-task-error",children:I})]})]}),e.jsxs("div",{className:"rounded-xl border border-border bg-card p-4","data-testid":"workspace-cadences",children:[e.jsx("h3",{className:"mb-3 text-sm font-semibold text-foreground",children:s("groupWorkspace.cadencesTitle","Cadences ({{count}})",{count:o.cadences.length})}),e.jsx("div",{className:"mb-3 space-y-2",children:o.cadences.length===0?e.jsx("p",{className:"text-xs text-muted-foreground",children:s("groupWorkspace.cadencesEmpty","No recurring cadences configured yet.")}):o.cadences.map(t=>e.jsxs("div",{className:"flex items-center gap-2 rounded-lg border border-border bg-secondary/20 p-2.5","data-testid":`cadence-${t.cadenceId}`,children:[e.jsxs("div",{className:"min-w-0 flex-1 text-xs",children:[e.jsx("p",{className:"font-mono text-foreground",children:t.cadenceId}),e.jsxs("p",{className:"text-muted-foreground",children:[s("groupWorkspace.cadenceSummary",{defaultValue:"up to {{max}} task/run",defaultValue_other:"up to {{max}} tasks/run",count:t.maxBacklogTasksPerRun,max:t.maxBacklogTasksPerRun}),t.maxCostPerRun!=null&&` · ${$(t.maxCostPerRun)}/run`,` · ${s("groupWorkspace.createdBy","by {{who}}",{who:t.createdBy})}`]})]}),e.jsx("button",{type:"button",onClick:()=>N(t.cadenceId),className:"rounded-md p-1.5 text-muted-foreground hover:text-destructive hover:bg-destructive/10 transition-colors",title:s("common.delete"),"aria-label":s("common.delete"),"data-testid":`delete-cadence-${t.cadenceId}`,children:e.jsx(ue,{className:"h-3.5 w-3.5"})})]},t.cadenceId))}),e.jsxs("div",{className:"space-y-2 border-t border-border pt-3",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"workspace-cron",className:"mb-0.5 block text-[10px] text-muted-foreground",children:s("groupWorkspace.cronLabel","Cron expression")}),e.jsx("input",{id:"workspace-cron",value:l,onChange:t=>M(t.target.value),placeholder:s("groupWorkspace.cronPlaceholder","e.g. 0 9 * * MON"),className:d,"data-testid":"workspace-cron-input"})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"workspace-timezone",className:"mb-0.5 block text-[10px] text-muted-foreground",children:s("groupWorkspace.timeZoneLabel","Time zone")}),e.jsx("input",{id:"workspace-timezone",value:B,onChange:t=>X(t.target.value),placeholder:"UTC",className:d,"data-testid":"workspace-timezone-input"})]})]}),e.jsx("textarea",{value:h,onChange:t=>U(t.target.value),placeholder:s("groupWorkspace.inputTemplatePlaceholder","Prompt template for each run (optional — a plain backlog listing is used otherwise)"),maxLength:y,rows:2,className:v(d,"resize-none"),"data-testid":"workspace-input-template"}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"workspace-max-per-run",className:"mb-0.5 block text-[10px] text-muted-foreground",children:s("groupWorkspace.maxPerRunLabel","Max tasks / run")}),e.jsx("input",{id:"workspace-max-per-run",type:"number",min:1,value:F,onChange:t=>{const n=Math.trunc(Number(t.target.value));H(Number.isFinite(n)&&n>0?n:1)},className:d,"data-testid":"workspace-max-per-run"})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"workspace-max-cost",className:"mb-0.5 block text-[10px] text-muted-foreground",children:s("groupWorkspace.maxCostLabel","Max cost / run ($, optional)")}),e.jsx("input",{id:"workspace-max-cost",type:"number",min:0,step:"0.01",value:f,onChange:t=>J(t.target.value),placeholder:s("groupWorkspace.maxCostPlaceholder","group default"),className:d,"data-testid":"workspace-max-cost"})]})]}),e.jsxs(K,{size:"sm",onClick:ee,disabled:!l.trim()||S.isPending,"data-testid":"workspace-add-cadence",children:[e.jsx(V,{className:"h-3.5 w-3.5"}),s("groupWorkspace.addCadence","Add Cadence")]}),G&&e.jsx("p",{className:"text-xs text-destructive","data-testid":"workspace-cadence-error",children:G})]})]}),e.jsx(pe,{open:j!==null,onOpenChange:t=>!t&&N(null),title:s("groupWorkspace.confirmDeleteCadenceTitle","Delete this cadence?"),description:s("groupWorkspace.confirmDeleteCadenceDesc","This stops its scheduled runs. Already-run discussions are not affected."),confirmLabel:s("common.delete"),cancelLabel:s("common.cancel"),variant:"destructive",isPending:P.isPending,onConfirm:()=>{j&&P.mutate(j,{onSuccess:()=>p.success(s("groupWorkspace.cadenceDeleted","Cadence deleted")),onError:t=>p.error(C(t))}),N(null)}})]})}function m({icon:r,label:a,value:s}){return e.jsxs("div",{className:"rounded-xl border border-border bg-card p-3",children:[e.jsxs("div",{className:"flex items-center gap-1.5 text-[10px] font-medium uppercase tracking-wider text-muted-foreground",children:[r,a]}),e.jsx("p",{className:"mt-1 text-lg font-bold text-foreground",children:s})]})}export{Ie as GroupWorkspacePage}; diff --git a/src/main/resources/META-INF/resources/assets/groups-0vUW2KjW.js b/src/main/resources/META-INF/resources/assets/groups-BtkBf2hc.js similarity index 95% rename from src/main/resources/META-INF/resources/assets/groups-0vUW2KjW.js rename to src/main/resources/META-INF/resources/assets/groups-BtkBf2hc.js index 64c69b8231..2d0669c304 100644 --- a/src/main/resources/META-INF/resources/assets/groups-0vUW2KjW.js +++ b/src/main/resources/META-INF/resources/assets/groups-BtkBf2hc.js @@ -1 +1 @@ -import{c as K,r as i,df as V,j as e,b_ as $,Y as ue,Z as ne,h as xe,N as pe,B as Ae,i as R,t as ge,dg as Me,b as De,e as Te,dh as Oe,di as Re,a9 as Ge,a8 as de,dj as he,P as ae,T as se,az as Ee,bj as ze,a7 as Ie,k as L,b2 as We,dk as be,dl as ie,bB as Pe,V as Le,a4 as Ue,_ as U,$ as $e,f as Be,dm as Fe,dn as _e,o as le,ad as Ve,S as Q,a5 as X,a6 as Z,ae as Ke}from"./index-BY6d8wze.js";import{B}from"./badge-B8rrdXaB.js";import{E as qe}from"./ellipsis-vertical-CtSedckm.js";import{u as He}from"./group-config-yXQVQMNQ.js";import{D as te,g as Ye}from"./group-templates-B4YwvSlk.js";import{I as G}from"./info-vszmN4vn.js";import{S as Je}from"./shield-Ce05kery.js";import{C as Qe}from"./create-or-wizard-dialog-DrB8VzrL.js";import{E as Xe}from"./empty-state-DB7ZSzVv.js";import{E as Ze}from"./error-state-BXe3bnJT.js";import{g as es,V as ss,s as rs}from"./view-mode-TQOH38Sf.js";import{L as ts}from"./layout-template-CJfl10R8.js";import{A as ee}from"./arrow-up-down-Cz_fDxBo.js";import"./accessible-dialog-BO2vat1a.js";import"./wand-sparkles-DCdkrkbT.js";import"./layout-grid-BjGzFSfP.js";import"./list-CX0KxgtB.js";function as({group:r,memberCount:g=0,members:n=[],style:t,onDuplicate:v,onDelete:f}){const{t:l}=K(),[A,m]=i.useState(!1),j=t?V(t,l):null,y=r.lastModifiedOn||r.createdOn||0,C=ge(y),o=n.length>0?n.length:g;return e.jsxs("div",{className:R("group relative flex flex-col rounded-xl border bg-card p-5 shadow-sm transition-all duration-200","hover:shadow-md hover:border-primary/30","ring-1 ring-border"),"data-testid":`group-card-${r.id}`,children:[e.jsxs("div",{className:"flex items-start justify-between",children:[j?e.jsxs("div",{className:"inline-flex items-center gap-1.5 rounded-full bg-primary/10 px-2.5 py-1 text-xs font-medium text-primary ring-1 ring-primary/20",title:j.flow,children:[e.jsx("span",{children:j.icon}),j.label]}):e.jsxs("div",{className:"inline-flex items-center gap-1.5 rounded-full bg-muted px-2.5 py-1 text-xs font-medium text-muted-foreground ring-1 ring-border",children:[e.jsx($,{className:"h-3.5 w-3.5"}),l("groups.defaultLabel","Group")]}),e.jsxs("div",{className:"relative",children:[e.jsx("button",{onClick:()=>m(!A),className:"rounded-md p-1 text-muted-foreground opacity-0 transition-opacity hover:bg-secondary hover:text-foreground group-hover:opacity-100","aria-label":l("common.actions","Actions"),"data-testid":`group-menu-${r.id}`,children:e.jsx(qe,{className:"h-4 w-4"})}),A&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"fixed inset-0 z-40",onClick:()=>m(!1)}),e.jsxs("div",{className:"absolute inset-e-0 z-50 mt-1 w-44 rounded-lg border bg-popover py-1 shadow-lg",children:[v&&e.jsxs("button",{onClick:()=>{v(r.id,r.version),m(!1)},className:"flex w-full items-center gap-2 px-3 py-2 text-sm text-popover-foreground hover:bg-secondary",children:[e.jsx(ue,{className:"h-4 w-4"}),l("common.duplicate","Duplicate")]}),f&&e.jsxs("button",{onClick:()=>{f(r.id,r.version),m(!1)},className:"flex w-full items-center gap-2 px-3 py-2 text-sm text-destructive hover:bg-destructive/10",children:[e.jsx(ne,{className:"h-4 w-4"}),l("common.delete")]})]})]})]})]}),e.jsxs("div",{className:"mt-4 flex-1",children:[e.jsxs(xe,{to:`/manage/groups/${r.id}?version=${r.version}`,className:"text-lg font-semibold text-foreground hover:text-primary transition-colors",children:[r.name||l("groups.unnamed","Unnamed Group"),e.jsx(pe,{className:"ms-1 inline h-3.5 w-3.5 opacity-0 group-hover:opacity-50"})]}),e.jsx("p",{className:"mt-0.5 font-mono text-xs text-muted-foreground/70 truncate",title:r.id,children:r.id}),e.jsx("p",{className:"mt-1 line-clamp-2 text-sm text-muted-foreground",title:r.description||void 0,children:r.description||l("groups.noDescription","No description")}),n&&n.length>0&&e.jsxs("div",{className:"mt-2 flex flex-wrap items-center gap-1",title:n.map(N=>N.displayName).join(", "),role:"list","aria-label":l("groups.membersColumn","Members"),"data-testid":`group-card-members-${r.id}`,children:[n.slice(0,4).map((N,x)=>e.jsxs("span",{className:"inline-flex items-center gap-1 rounded-full bg-secondary/80 px-2 py-0.5 text-[10px] font-medium text-muted-foreground ring-1 ring-border",role:"listitem","aria-label":N.displayName,children:[N.memberType==="GROUP"?e.jsx($,{className:"h-2.5 w-2.5","aria-hidden":"true"}):e.jsx(Ae,{className:"h-2.5 w-2.5","aria-hidden":"true"}),e.jsx("span",{className:"max-w-[6rem] truncate",title:N.displayName,children:N.displayName})]},`${N.displayName}-${x}`)),n.length>4&&e.jsx("span",{className:"text-[10px] text-muted-foreground",children:l("groups.memberOverflow","+{{count}} more",{count:n.length-4})})]})]}),e.jsxs("div",{className:"mt-4 flex items-center justify-between border-t border-border pt-3",children:[e.jsx("span",{className:"text-xs text-muted-foreground",title:y?new Date(y).toLocaleString():void 0,children:C}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(B,{variant:"secondary",className:"text-[10px]",children:[e.jsx($,{className:"me-0.5 h-3 w-3"}),o]}),e.jsxs("span",{className:"rounded-full bg-primary/10 px-2 py-0.5 text-xs font-medium text-primary",children:["v",r.version]})]})]})]})}function ns({open:r,onClose:g,template:n}){const{t}=K(),v=Me(),{data:f}=De(100),l=i.useMemo(()=>f?Te(f):[],[f]),A=Oe(),[m,j]=i.useState(n?"basics":"template"),[,y]=i.useState(n??null),[C,o]=i.useState((n==null?void 0:n.name)??""),[N,x]=i.useState((n==null?void 0:n.description)??""),[h,D]=i.useState((n==null?void 0:n.style)??"ROUND_TABLE"),[p,S]=i.useState((n==null?void 0:n.maxRounds)??2),[w,M]=i.useState(n?n.roles.map((s,c)=>({agentId:"",displayName:s.displayName,speakingOrder:c+1,role:s.role,memberType:"AGENT"})):[]),[z,q]=i.useState(""),[T,E]=i.useState(!1),[I,H]=i.useState(te),[W,Y]=i.useState("SKIP"),[a,u]=i.useState(2),[k,d]=i.useState("SKIP"),[O,F]=i.useState(0),je=i.useMemo(()=>{const s=new Map;for(const c of l)s.set(c.id,c.name||c.id.slice(0,12));return s},[l]),re=i.useCallback(()=>{j("template"),y(null),o(""),x(""),D("ROUND_TABLE"),S(2),M([]),q(""),E(!1),H(te),Y("SKIP"),u(2),d("SKIP"),F(0),g()},[g]);function Ne(s){y(s),o(s.name),x(s.description),D(s.style),S(s.maxRounds),M(s.roles.map((c,b)=>({agentId:"",displayName:c.displayName,speakingOrder:b+1,role:c.role,memberType:"AGENT"}))),j("basics")}function ve(){y(null),j("basics")}function ye(){M([...w,{agentId:"",displayName:"",speakingOrder:w.length+1,role:null,memberType:"AGENT"}])}function we(s){M(w.filter((c,b)=>b!==s))}function P(s,c){M(w.map((b,Se)=>Se===s?{...b,...c}:b))}function ke(){const s={name:C,description:N,members:w.filter(c=>c.agentId||c.displayName),moderatorAgentId:z||null,style:h,maxRounds:p,phases:null,protocol:{agentTimeoutSeconds:I,onAgentFailure:W,maxRetries:a,onMemberUnavailable:k,...O>0?{maxTurns:O}:{}}};v.mutate(s,{onSuccess:()=>{U.success(t("groups.createSuccess","Group created successfully")),re()},onError:()=>U.error(t("common.error"))})}if(!r)return null;const J=["template","basics","members","review"],_=J.indexOf(m),oe=Re(h,A),Ce=m==="template"||m==="basics"&&C.trim()&&oe||m==="members"&&w.length>=2||m==="review";return e.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm",children:e.jsxs("div",{className:"relative w-full max-w-2xl max-h-[85vh] overflow-hidden rounded-xl border border-border bg-card shadow-2xl flex flex-col",children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-border px-5 py-3",children:[e.jsx("h2",{className:"text-lg font-bold",children:t("groups.createGroup","Create Group")}),e.jsx("button",{onClick:re,className:"rounded-md p-1 hover:bg-secondary transition-colors","aria-label":t("common.close","Close"),children:e.jsx(Ge,{className:"h-5 w-5"})})]}),e.jsx("div",{className:"flex items-center gap-2 px-5 py-2 border-b border-border bg-secondary/20",children:J.map((s,c)=>e.jsxs("div",{className:R("flex items-center gap-1",c>0&&"ms-2"),children:[c>0&&e.jsx(de,{className:"h-3 w-3 text-muted-foreground"}),e.jsx("span",{className:R("text-xs font-medium px-2 py-0.5 rounded-full transition-colors",s===m?"bg-primary text-primary-foreground":c<_?"text-primary":"text-muted-foreground"),children:s==="template"?t("groups.stepTemplate","Template"):s==="basics"?t("groups.stepBasics","Basics"):s==="members"?t("groups.stepMembers","Members"):t("groups.stepReview","Review")})]},s))}),e.jsxs("div",{className:"flex-1 overflow-y-auto p-5",children:[m==="template"&&e.jsxs("div",{className:"space-y-4",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:t("groups.chooseTemplate","Choose a template or start from scratch.")}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3",children:[Ye(t).map(s=>e.jsxs("button",{onClick:()=>Ne(s),className:"text-start rounded-lg border border-border p-3 hover:border-primary/50 hover:bg-primary/5 transition-all","data-testid":`template-${s.key}`,children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsx("span",{className:"text-lg",children:s.icon}),e.jsx("span",{className:"text-sm font-semibold",children:s.name})]}),e.jsx("p",{className:"text-xs text-muted-foreground line-clamp-2",children:s.description}),e.jsxs("div",{className:"flex items-center gap-2 mt-2",children:[e.jsx(B,{variant:"outline",className:"text-[10px]",children:he(s.style,t)}),e.jsxs(B,{variant:"secondary",className:"text-[10px]",children:[s.roles.length," roles"]})]})]},s.key)),e.jsxs("button",{onClick:ve,className:"text-start rounded-lg border border-dashed border-border p-3 hover:border-primary/50 hover:bg-primary/5 transition-all","data-testid":"template-blank",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsx(ae,{className:"h-5 w-5 text-muted-foreground"}),e.jsx("span",{className:"text-sm font-semibold",children:t("groups.startBlank","Start from Scratch")})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:t("groups.blankDesc","Configure everything manually.")})]})]})]}),m==="basics"&&e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsxs("label",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:[t("common.name","Name")," *"]}),e.jsx("input",{value:C,onChange:s=>o(s.target.value),className:"mt-1 w-full rounded-lg border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring",placeholder:t("groups.namePlaceholder","e.g. Advisory Board"),"data-testid":"group-name-input"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:t("common.description","Description")}),e.jsx("textarea",{value:N,onChange:s=>x(s.target.value),className:"mt-1 w-full rounded-lg border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring",rows:2})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:t("groups.discussionStyle","Discussion Style")}),e.jsx("div",{className:"grid grid-cols-2 sm:grid-cols-3 gap-2 mt-1",children:A.map(s=>e.jsxs("button",{onClick:()=>D(s),className:R("rounded-lg border p-2 text-start transition-all text-xs",h===s?"border-primary bg-primary/10":"border-border hover:border-primary/30"),children:[e.jsx("span",{className:"text-sm",children:V(s,t).icon})," ",e.jsx("span",{className:"font-medium",children:V(s,t).label})]},s))}),!oe&&e.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-destructive/40 bg-destructive/5 p-2 mt-2","data-testid":"unsupported-style-warning",children:[e.jsx(se,{className:"h-3.5 w-3.5 text-destructive shrink-0 mt-0.5"}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:t("groups.unsupportedStyle","This server does not support {{style}}. Pick another framework to continue.",{style:V(h,t).label})})]}),h==="ROUND_TABLE"&&e.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-primary/30 bg-primary/5 p-2 mt-2",children:[e.jsx(G,{className:"h-3.5 w-3.5 text-primary shrink-0 mt-0.5"}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:t("groupWizard.hintRoundTable","All members share their opinions, then discuss each other's views across multiple rounds before the moderator synthesizes.")})]}),h==="DEBATE"&&e.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-sky-500/30 bg-sky-500/5 p-2 mt-2",children:[e.jsx(G,{className:"h-3.5 w-3.5 text-sky-500 shrink-0 mt-0.5"}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:t("groupWizard.hintDebate","Assign PRO and CON roles to members. Pro argues first, then Con, followed by rebuttals and judgment.")})]}),h==="DEVIL_ADVOCATE"&&e.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-amber-500/30 bg-amber-500/5 p-2 mt-2",children:[e.jsx(G,{className:"h-3.5 w-3.5 text-amber-500 shrink-0 mt-0.5"}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:t("groupWizard.hintDevilAdvocate","Assign the role DEVIL_ADVOCATE to at least one member. They will challenge the group's consensus.")})]}),h==="PEER_REVIEW"&&e.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-emerald-500/30 bg-emerald-500/5 p-2 mt-2",children:[e.jsx(G,{className:"h-3.5 w-3.5 text-emerald-500 shrink-0 mt-0.5"}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:t("groupWizard.hintPeerReview","Each member individually critiques every other member's work, then revises based on feedback received.")})]}),h==="DELPHI"&&e.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-purple-500/30 bg-purple-500/5 p-2 mt-2",children:[e.jsx(G,{className:"h-3.5 w-3.5 text-purple-500 shrink-0 mt-0.5"}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:t("groupWizard.hintDelphi","All members respond independently and anonymously. After each round, they see anonymous results and can adjust. Max Rounds controls the number of anonymous iterations.")})]}),h==="TASK_FORCE"&&e.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-primary/30 bg-primary/5 p-2 mt-2",children:[e.jsx(G,{className:"h-3.5 w-3.5 text-primary shrink-0 mt-0.5"}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:t("groupWizard.hintTaskForce","The moderator creates a task plan, assigns work to agents in parallel, then verifies and synthesizes the results.")})]}),h==="NEGOTIATION"&&e.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-emerald-500/30 bg-emerald-500/5 p-2 mt-2",children:[e.jsx(G,{className:"h-3.5 w-3.5 text-emerald-500 shrink-0 mt-0.5"}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:t("groupWizard.hintNegotiation","Members state their interests, table proposals, then bargain — Max Rounds sets how many bargaining rounds run. The moderator arbitrates only if no agreement is reached.")})]}),h==="CUSTOM"&&e.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-muted-foreground/30 bg-muted/20 p-2 mt-2",children:[e.jsx(G,{className:"h-3.5 w-3.5 text-muted-foreground shrink-0 mt-0.5"}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:t("groupWizard.hintCustom","Define your own phases manually. Custom phases can be configured via the API after creation.")})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:t("groups.maxRounds","Max Rounds")}),e.jsx("input",{type:"number",value:p,onChange:s=>S(Math.max(1,parseInt(s.target.value)||1)),className:"mt-1 w-20 rounded-lg border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring",min:1,max:10})]}),e.jsxs("div",{className:"border border-border rounded-lg overflow-hidden",children:[e.jsxs("button",{type:"button",onClick:()=>E(!T),className:"w-full flex items-center gap-2 px-3 py-2 text-xs font-semibold text-muted-foreground hover:text-foreground transition-colors",children:[e.jsx(Ee,{className:"h-3.5 w-3.5"}),t("groupWizard.advancedSettings","Advanced Protocol Settings"),T?e.jsx(ze,{className:"h-3 w-3 ms-auto"}):e.jsx(Ie,{className:"h-3 w-3 ms-auto"})]}),T&&e.jsxs("div",{className:"px-3 pb-3 space-y-3 border-t border-border pt-3",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:"text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:t("groupWizard.agentTimeout","Agent Timeout (seconds)")}),e.jsx("input",{type:"number",value:I,onChange:s=>H(Math.max(10,parseInt(s.target.value)||te)),className:"mt-1 w-full rounded-md border border-input bg-background px-2 py-1.5 text-xs focus:outline-none focus:ring-2 focus:ring-ring",min:10,max:600})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:t("groupWizard.maxRetries","Max Retries")}),e.jsx("input",{type:"number",value:a,onChange:s=>u(Math.max(0,parseInt(s.target.value)||0)),className:"mt-1 w-full rounded-md border border-input bg-background px-2 py-1.5 text-xs focus:outline-none focus:ring-2 focus:ring-ring",min:0,max:10})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:"text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:t("groupWizard.onAgentFailure","On Agent Failure")}),e.jsxs("select",{value:W,onChange:s=>Y(s.target.value),className:"mt-1 w-full rounded-md border border-input bg-background px-2 py-1.5 text-xs focus:outline-none focus:ring-2 focus:ring-ring",children:[e.jsx("option",{value:"SKIP",children:t("groupWizard.policySkip","Skip")}),e.jsx("option",{value:"RETRY",children:t("groupWizard.policyRetry","Retry")}),e.jsx("option",{value:"ABORT",children:t("groupWizard.policyAbort","Abort")})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:t("groupWizard.onMemberUnavailable","On Member Unavailable")}),e.jsxs("select",{value:k,onChange:s=>d(s.target.value),className:"mt-1 w-full rounded-md border border-input bg-background px-2 py-1.5 text-xs focus:outline-none focus:ring-2 focus:ring-ring",children:[e.jsx("option",{value:"SKIP",children:t("groupWizard.policySkip","Skip")}),e.jsx("option",{value:"FAIL",children:t("groupWizard.policyFail","Fail")})]})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:t("groupWizard.maxTurns","Max Turns (0 = unlimited)")}),e.jsx("input",{type:"number",value:O,onChange:s=>F(Math.max(0,parseInt(s.target.value)||0)),className:"mt-1 w-24 rounded-md border border-input bg-background px-2 py-1.5 text-xs focus:outline-none focus:ring-2 focus:ring-ring",min:0,max:200}),e.jsx("p",{className:"text-[10px] text-muted-foreground mt-0.5",children:t("groupWizard.maxTurnsHelp","Safety cap for total agent turns. Default backend limit is 50.")})]})]})]})]}),m==="members"&&e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:t("groups.assignAgents","Assign agents to each member role.")}),e.jsxs(L,{variant:"outline",size:"sm",onClick:ye,children:[e.jsx(ae,{className:"h-3 w-3"})," ",t("groups.addMember","Add Member")]})]}),e.jsx("div",{className:"space-y-2 max-h-[400px] overflow-y-auto pe-1",children:w.map((s,c)=>e.jsxs("div",{className:"rounded-lg border border-border overflow-hidden bg-card",children:[e.jsxs("div",{className:"flex items-center gap-2 px-3 py-2 bg-secondary/20",children:[e.jsxs("div",{className:"flex items-center rounded-md border border-border bg-background overflow-hidden shrink-0",children:[e.jsx("button",{onClick:()=>P(c,{memberType:"AGENT"}),className:R("px-2 py-0.5 text-[10px] font-medium transition-colors",s.memberType==="AGENT"?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground"),children:"Agent"}),e.jsxs("button",{onClick:()=>P(c,{memberType:"GROUP"}),className:R("px-2 py-0.5 text-[10px] font-medium transition-colors",s.memberType==="GROUP"?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground"),children:[e.jsx($,{className:"inline h-2.5 w-2.5 me-0.5"}),"Group"]})]}),e.jsx("input",{value:s.displayName,onChange:b=>P(c,{displayName:b.target.value}),className:"flex-1 min-w-0 bg-transparent text-xs font-semibold text-foreground focus:outline-none placeholder:text-muted-foreground",placeholder:t("groupWizard.displayName","Display Name")}),e.jsx("input",{value:s.role??"",onChange:b=>P(c,{role:b.target.value||null}),className:"w-24 bg-transparent text-xs text-muted-foreground focus:outline-none placeholder:text-muted-foreground/50",placeholder:t("groupWizard.rolePlaceholder","Role")}),e.jsx("button",{onClick:()=>we(c),className:"shrink-0 rounded p-1 text-muted-foreground hover:text-destructive transition-colors",children:e.jsx(ne,{className:"h-3.5 w-3.5"})})]}),e.jsx("div",{className:"px-3 py-2",children:s.memberType==="GROUP"?e.jsx(ds,{value:s.agentId,onChange:b=>P(c,{agentId:b})}):e.jsxs("select",{value:s.agentId,onChange:b=>P(c,{agentId:b.target.value}),className:R("w-full rounded-md border bg-background px-2 py-1.5 text-xs focus:outline-none focus:ring-1 focus:ring-ring",s.agentId?"border-input":"border-amber-400/50"),children:[e.jsx("option",{value:"",children:t("groups.selectAgent","Select agent…")}),l.map(b=>e.jsx("option",{value:b.id,children:b.name||b.id.slice(0,12)},b.id))]})})]},c))}),e.jsxs("div",{className:"rounded-lg border-2 border-primary/20 bg-primary/5 p-3",children:[e.jsxs("label",{className:"text-xs font-semibold text-foreground flex items-center gap-1.5 mb-2",children:["⭐ ",t("groups.moderator","Moderator (for synthesis)")]}),e.jsxs("select",{value:z,onChange:s=>q(s.target.value),className:"w-full rounded-lg border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring",children:[e.jsx("option",{value:"",children:t("groups.noModerator","No moderator")}),l.map(s=>e.jsx("option",{value:s.id,children:s.name||s.id.slice(0,12)},s.id))]})]})]}),m==="review"&&e.jsx(os,{name:C,description:N,style:h,maxRounds:p,members:w,moderatorAgentId:z,agentNameMap:je,agentTimeout:I,onAgentFailure:W,maxRetries:a,onMemberUnavailable:k,maxTurns:O})]}),e.jsxs("div",{className:"flex items-center justify-between border-t border-border px-5 py-3",children:[e.jsx(L,{variant:"outline",onClick:()=>{_>0?j(J[_-1]):re()},children:_>0?e.jsxs(e.Fragment,{children:[e.jsx(We,{className:"h-4 w-4"})," ",t("common.back","Back")]}):t("common.cancel","Cancel")}),m==="review"?e.jsx(L,{onClick:ke,disabled:v.isPending,children:v.isPending?t("common.saving","Saving…"):t("groups.createGroup","Create Group")}):e.jsxs(L,{onClick:()=>j(J[_+1]),disabled:!Ce,children:[t("common.next","Next")," ",e.jsx(de,{className:"h-4 w-4"})]})]})]})})}function os({name:r,description:g,style:n,maxRounds:t,members:v,moderatorAgentId:f,agentNameMap:l,agentTimeout:A,onAgentFailure:m,maxRetries:j,onMemberUnavailable:y,maxTurns:C}){var h,D;const{t:o}=K(),N=v.filter(p=>!p.agentId).length,x=He({members:v,phases:null,style:n,maxRounds:t});return e.jsxs("div",{className:"space-y-4","data-testid":"review-summary",children:[N>0&&e.jsxs("div",{className:"flex items-start gap-2.5 rounded-lg border border-amber-400/40 bg-amber-400/10 px-3 py-2.5",children:[e.jsx(se,{className:"h-4 w-4 text-amber-500 shrink-0 mt-0.5"}),e.jsxs("p",{className:"text-xs",children:[e.jsx("span",{className:"font-semibold text-amber-500",children:o("groups.reviewUnassignedWarning",{defaultValue:"{{count}} member unassigned",defaultValue_other:"{{count}} members unassigned",count:N})}),e.jsxs("span",{className:"text-muted-foreground ms-1",children:["— ",o("groups.reviewUnassignedHint","Go back to assign agents before creating.")]})]})]}),x.length>0&&e.jsx("div",{className:"flex flex-col gap-1.5 rounded-lg border border-amber-400/40 bg-amber-400/10 px-3 py-2.5","data-testid":"dialog-role-coverage-warning",children:x.map(p=>e.jsxs("div",{className:"flex items-start gap-2.5",children:[e.jsx(se,{className:"h-4 w-4 text-amber-500 shrink-0 mt-0.5"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:o("groups.roleCoverageWarning",'No member carries the role "{{role}}" — every member will speak in {{phases}} instead.',{role:p.role,phases:p.phaseNames.join(", ")})})]},p.role))}),e.jsxs("div",{className:"rounded-lg border border-border bg-secondary/10 p-3 space-y-2",children:[e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("h3",{className:"text-sm font-bold truncate",children:r}),g&&e.jsx("p",{className:"text-xs text-muted-foreground mt-0.5 line-clamp-2",children:g})]}),e.jsxs(B,{variant:"outline",className:"shrink-0",children:[(h=ie(n,o))==null?void 0:h.icon," ",he(n,o)]})]}),e.jsx("p",{className:"text-[10px] text-muted-foreground font-mono",children:(D=ie(n,o))==null?void 0:D.flow})]}),e.jsxs("div",{className:"grid grid-cols-3 gap-2",children:[e.jsxs("div",{className:"rounded-lg border border-border bg-secondary/10 p-2.5 text-center",children:[e.jsx($,{className:"h-3.5 w-3.5 text-muted-foreground inline-block mb-1"}),e.jsx("div",{className:"text-sm font-bold",children:v.length}),e.jsx("div",{className:"text-[10px] text-muted-foreground",children:o("groups.reviewMembers","Members")})]}),e.jsxs("div",{className:"rounded-lg border border-border bg-secondary/10 p-2.5 text-center",children:[e.jsx(Pe,{className:"h-3.5 w-3.5 text-muted-foreground inline-block mb-1"}),e.jsx("div",{className:"text-sm font-bold",children:t}),e.jsx("div",{className:"text-[10px] text-muted-foreground",children:o("groups.reviewRounds","Max Rounds")})]}),e.jsxs("div",{className:"rounded-lg border border-border bg-secondary/10 p-2.5 text-center",children:[e.jsx(Le,{className:"h-3.5 w-3.5 text-muted-foreground inline-block mb-1"}),e.jsxs("div",{className:"text-sm font-bold",children:[A,"s"]}),e.jsx("div",{className:"text-[10px] text-muted-foreground",children:o("groups.reviewTimeout","Agent Timeout")})]})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground mb-2",children:o("groups.reviewMemberRoster","Member Roster")}),e.jsx("div",{className:"rounded-lg border border-border overflow-hidden",children:v.map((p,S)=>{const w=p.agentId?l.get(p.agentId):null,M=!p.agentId;return e.jsxs("div",{className:R("flex items-center gap-2 px-3 py-2 text-xs",S>0&&"border-t border-border",M&&"bg-amber-400/5"),children:[e.jsx("span",{className:"text-[10px] font-mono text-muted-foreground w-4 shrink-0 text-center",children:S+1}),e.jsxs("div",{className:"flex items-center gap-1.5 min-w-0 flex-1",children:[e.jsx("span",{className:"font-medium truncate",children:p.displayName}),p.role&&e.jsx(B,{variant:"outline",className:"text-[9px] px-1.5 py-0 shrink-0",children:p.role}),p.memberType==="GROUP"&&e.jsxs(B,{variant:"secondary",className:"text-[9px] px-1.5 py-0 shrink-0",children:[e.jsx($,{className:"h-2 w-2 me-0.5"}),o("groups.memberTypeGroup","Group")]})]}),e.jsx("div",{className:"shrink-0 flex items-center gap-1",children:M?e.jsxs("span",{className:"flex items-center gap-1 text-amber-500 font-medium",children:[e.jsx(se,{className:"h-3 w-3"}),o("groups.reviewUnassigned","Unassigned")]}):e.jsxs("span",{className:"flex items-center gap-1 text-emerald-500",children:[e.jsx(Ue,{className:"h-3 w-3"}),e.jsx("span",{className:"text-foreground/70 truncate max-w-[140px]",children:w})]})})]},`${p.displayName}-${S}`)})})]}),e.jsx("div",{className:"rounded-lg border-2 border-primary/15 bg-primary/5 p-3",children:e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[e.jsx("span",{children:"⭐"}),e.jsx("span",{className:"font-semibold",children:o("groups.reviewModerator","Moderator")}),e.jsx("span",{className:"text-muted-foreground",children:"—"}),f?e.jsx("span",{className:"text-foreground font-medium",children:l.get(f)||f.slice(0,12)}):e.jsx("span",{className:"text-muted-foreground italic",children:o("groups.reviewNoModerator","None (auto-synthesis disabled)")})]})}),e.jsxs("div",{className:"rounded-lg border border-border bg-secondary/10 p-2.5 space-y-1",children:[e.jsxs("div",{className:"flex items-center gap-1.5 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground mb-1",children:[e.jsx(Je,{className:"h-3 w-3"}),o("groupWizard.protocolSummary","Protocol")]}),e.jsxs("div",{className:"grid grid-cols-2 gap-x-4 gap-y-1 text-[10px]",children:[e.jsx("span",{className:"text-muted-foreground",children:o("groupWizard.onAgentFailure","On Agent Failure")}),e.jsx("span",{className:"font-medium",children:o(`groupWizard.policy${m.charAt(0)+m.slice(1).toLowerCase()}`,m.toLowerCase())}),e.jsx("span",{className:"text-muted-foreground",children:o("groupWizard.maxRetries","Max Retries")}),e.jsx("span",{className:"font-medium",children:j}),e.jsx("span",{className:"text-muted-foreground",children:o("groupWizard.onMemberUnavailable","On Member Unavailable")}),e.jsx("span",{className:"font-medium",children:o(`groupWizard.policy${y.charAt(0)+y.slice(1).toLowerCase()}`,y.toLowerCase())}),C>0&&e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"text-muted-foreground",children:o("groupWizard.maxTurns","Max Turns")}),e.jsx("span",{className:"font-medium",children:C})]})]})]})]})}function ds({value:r,onChange:g}){const{t:n}=K(),{data:t,isLoading:v}=be(100),f=t&&t.length>0;return v?e.jsx("div",{className:"rounded-md border border-input bg-background px-2 py-1.5 text-xs text-muted-foreground animate-pulse",children:n("common.loading","Loading…")}):f?e.jsxs("select",{value:r,onChange:l=>g(l.target.value),className:R("w-full rounded-md border bg-background px-2 py-1.5 text-xs focus:outline-none focus:ring-1 focus:ring-ring",r?"border-input":"border-amber-400/50"),children:[e.jsx("option",{value:"",children:n("groupWizard.selectGroup","Select existing group…")}),t.map(l=>e.jsxs("option",{value:l.id,children:[l.name||l.id.slice(0,12)," (",l.memberCount," members)"]},l.id))]}):e.jsxs("div",{className:"rounded-md border border-dashed border-amber-400/50 bg-amber-400/5 px-2 py-2 text-center",children:[e.jsx("p",{className:"text-[10px] font-medium text-amber-600 dark:text-amber-400",children:n("groupWizard.noGroupsYet","No groups available")}),e.jsx("p",{className:"text-[9px] text-muted-foreground mt-0.5",children:n("groupWizard.noGroupsHint","Create a group first, then add it as a nested sub-group member.")})]})}const fe="eddi-groups-sort";function ce(){try{const r=localStorage.getItem(fe);if(r){const g=JSON.parse(r);if(g.field&&g.dir)return g}}catch{}return{field:"modified",dir:"desc"}}function me(r,g){try{localStorage.setItem(fe,JSON.stringify({field:r,dir:g}))}catch{}}function Cs(){const{t:r}=K(),g=$e(),[n,t]=i.useState(""),[v,f]=i.useState(!1),[l,A]=i.useState(!1),[m,j]=i.useState(null),[y,C]=i.useState(()=>es("groups")),[o,N]=i.useState(()=>ce().field),[x,h]=i.useState(()=>ce().dir),D=Be(a=>a.maybeAutoStart);i.useEffect(()=>{const a=setTimeout(()=>D("groups"),500);return()=>clearTimeout(a)},[D]);const{data:p,isLoading:S,isError:w,refetch:M}=be(100,0,n),z=Fe(),q=_e(),T=i.useMemo(()=>[...p??[]].sort((u,k)=>{var O,F;let d=0;return o==="name"?d=(u.name??"").localeCompare(k.name??""):o==="style"?d=(u.style??"").localeCompare(k.style??""):o==="members"?d=(((O=u.members)==null?void 0:O.length)??u.memberCount)-(((F=k.members)==null?void 0:F.length)??k.memberCount):d=u.lastModifiedOn-k.lastModifiedOn,x==="asc"?d:-d}),[p,o,x]),E=i.useCallback(a=>{if(o===a){const u=x==="asc"?"desc":"asc";h(u),me(a,u)}else{const u=a==="modified"?"desc":"asc";N(a),h(u),me(a,u)}},[o,x]);function I(a,u){j({id:a,version:u})}function H(){m&&z.mutate(m,{onSuccess:()=>{U.success(r("common.delete")+" ✓"),j(null)},onError:()=>U.error(r("common.error"))})}function W(a,u){q.mutate({id:a,version:u},{onSuccess:()=>U.success(r("groups.duplicateSuccess","Group duplicated")),onError:()=>U.error(r("common.error"))})}function Y(a){C(a),rs("groups",a)}return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",children:[e.jsxs("div",{children:[e.jsxs("h1",{className:"flex items-center gap-2 text-3xl font-bold text-foreground",children:[e.jsx(le,{className:"h-8 w-8 text-primary"}),r("pages.groups.title","Groups")]}),e.jsx("p",{className:"mt-1 text-muted-foreground",children:r("pages.groups.subtitle","Multi-agent discussion groups for structured debate and collaboration.")})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs(L,{variant:"outline",onClick:()=>g("/manage/groups/templates"),"data-testid":"browse-templates-btn",children:[e.jsx(ts,{className:"h-4 w-4"}),r("groupTemplates.browseButton","From Template")]}),e.jsxs(L,{onClick:()=>f(!0),"data-testid":"create-group-btn",children:[e.jsx(ae,{className:"h-4 w-4"}),r("createOrWizard.newGroup","New Group")]})]})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("div",{className:"relative flex-1",children:[e.jsx(Ve,{className:"absolute inset-s-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),e.jsx("input",{type:"text",value:n,onChange:a=>t(a.target.value),placeholder:r("common.search"),className:"w-full rounded-lg border border-input bg-background py-2.5 ps-10 pe-4 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring transition-shadow","data-testid":"group-search"})]}),e.jsx(ss,{view:y,onChange:Y})]}),e.jsxs("div",{"data-tour":"groups-content",children:[S&&e.jsx("div",{className:"cq-card-grid",children:Array.from({length:4}).map((a,u)=>e.jsxs("div",{className:"rounded-xl border border-border bg-card p-5 space-y-3",children:[e.jsx(Q,{className:"h-5 w-3/4"}),e.jsx(Q,{className:"h-4 w-1/2"}),e.jsx(Q,{className:"h-4 w-full"}),e.jsx(Q,{className:"h-8 w-1/3"})]},u))}),w&&e.jsx(Ze,{message:r("common.error"),onRetry:()=>M(),retryLabel:r("common.retry")}),!S&&!w&&T.length===0&&e.jsx(Xe,{icon:le,title:n?r("common.noResults"):r("groups.empty","No groups yet"),description:n?void 0:r("groups.emptyDescription","Groups let multiple agents collaborate on structured discussions."),actionLabel:n?void 0:r("groups.createGroup","Create Group"),onAction:n?void 0:()=>f(!0)}),!S&&!w&&T.length>0&&e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:r("groups.count",{count:T.length,defaultValue:"{{count}} groups"})}),y==="card"?e.jsx("div",{className:"cq-card-grid","data-testid":"group-grid",children:T.map(a=>e.jsx(as,{group:a,memberCount:a.memberCount,members:a.members,style:a.style,onDuplicate:W,onDelete:I},a.id))}):e.jsx("div",{className:"overflow-hidden rounded-xl border bg-card shadow-sm","data-testid":"group-list",children:e.jsxs("table",{className:"w-full",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-border bg-secondary/50",children:[e.jsx("th",{className:"px-5 py-3 text-start text-xs font-medium uppercase tracking-wider text-muted-foreground","aria-sort":o==="name"?x==="asc"?"ascending":"descending":void 0,children:e.jsxs("button",{onClick:()=>E("name"),className:"inline-flex items-center gap-1 hover:text-foreground transition-colors","aria-label":r("common.sortByName","Sort by name"),children:[r("common.name","Name"),o==="name"?x==="asc"?e.jsx(X,{className:"h-3 w-3","aria-hidden":"true"}):e.jsx(Z,{className:"h-3 w-3","aria-hidden":"true"}):e.jsx(ee,{className:"h-3 w-3 opacity-30","aria-hidden":"true"})]})}),e.jsx("th",{className:"px-5 py-3 text-start text-xs font-medium uppercase tracking-wider text-muted-foreground","aria-sort":o==="style"?x==="asc"?"ascending":"descending":void 0,children:e.jsxs("button",{onClick:()=>E("style"),className:"inline-flex items-center gap-1 hover:text-foreground transition-colors","aria-label":r("groups.sortByStyle","Sort by style"),children:[r("groups.styleColumn","Style"),o==="style"?x==="asc"?e.jsx(X,{className:"h-3 w-3","aria-hidden":"true"}):e.jsx(Z,{className:"h-3 w-3","aria-hidden":"true"}):e.jsx(ee,{className:"h-3 w-3 opacity-30","aria-hidden":"true"})]})}),e.jsx("th",{className:"px-5 py-3 text-start text-xs font-medium uppercase tracking-wider text-muted-foreground","aria-sort":o==="members"?x==="asc"?"ascending":"descending":void 0,children:e.jsxs("button",{onClick:()=>E("members"),className:"inline-flex items-center gap-1 hover:text-foreground transition-colors","aria-label":r("groups.sortByMembers","Sort by members"),children:[r("groups.membersColumn","Members"),o==="members"?x==="asc"?e.jsx(X,{className:"h-3 w-3","aria-hidden":"true"}):e.jsx(Z,{className:"h-3 w-3","aria-hidden":"true"}):e.jsx(ee,{className:"h-3 w-3 opacity-30","aria-hidden":"true"})]})}),e.jsx("th",{className:"px-5 py-3 text-start text-xs font-medium uppercase tracking-wider text-muted-foreground","aria-sort":o==="modified"?x==="asc"?"ascending":"descending":void 0,children:e.jsxs("button",{onClick:()=>E("modified"),className:"inline-flex items-center gap-1 hover:text-foreground transition-colors","aria-label":r("common.sortByModified","Sort by last modified"),children:[r("common.modified","Modified"),o==="modified"?x==="asc"?e.jsx(X,{className:"h-3 w-3","aria-hidden":"true"}):e.jsx(Z,{className:"h-3 w-3","aria-hidden":"true"}):e.jsx(ee,{className:"h-3 w-3 opacity-30","aria-hidden":"true"})]})}),e.jsx("th",{className:"px-5 py-3 text-end text-xs font-medium uppercase tracking-wider text-muted-foreground",children:r("conversations.actions","Actions")})]})}),e.jsx("tbody",{className:"divide-y divide-border",children:T.map(a=>{var u,k;return e.jsxs("tr",{className:"hover:bg-secondary/30 transition-colors cursor-pointer",onClick:()=>g(`/manage/groups/${a.id}?version=${a.version}`),onKeyDown:d=>{(d.key==="Enter"||d.key===" ")&&(d.preventDefault(),g(`/manage/groups/${a.id}?version=${a.version}`))},tabIndex:0,role:"link","data-testid":`group-row-${a.id}`,children:[e.jsx("td",{className:"px-5 py-3",children:e.jsxs(xe,{to:`/manage/groups/${a.id}?version=${a.version}`,className:"text-sm font-medium text-foreground hover:text-primary transition-colors",onClick:d=>d.stopPropagation(),children:[a.name||r("groups.unnamed","Unnamed Group"),e.jsx(pe,{className:"ms-1 inline h-3 w-3 opacity-40"})]})}),e.jsx("td",{className:"px-5 py-3",children:(()=>{const d=a.style?V(a.style,r):null;return d?e.jsxs("span",{className:"inline-flex items-center gap-1.5 rounded-full bg-primary/10 px-2 py-0.5 text-xs font-medium text-primary","aria-label":`${r("groups.styleColumn","Style")}: ${d.label}`,title:d.flow,"data-testid":`group-style-${a.id}`,children:[e.jsx("span",{"aria-hidden":"true",children:d.icon}),d.label]}):e.jsx("span",{className:"text-xs text-muted-foreground",children:"—"})})()}),e.jsx("td",{className:"px-5 py-3",children:e.jsxs("div",{className:"flex items-center gap-2",title:(u=a.members)==null?void 0:u.map(d=>d.displayName).join(", "),role:"list","aria-label":r("groups.membersColumn","Members"),"data-testid":`group-members-${a.id}`,children:[e.jsx("div",{className:"flex -space-x-1.5",children:(a.members??[]).slice(0,3).map((d,O)=>e.jsx("span",{className:"flex h-6 w-6 items-center justify-center rounded-full bg-primary/10 text-[10px] font-bold text-primary ring-2 ring-card",role:"listitem","aria-label":d.displayName,children:d.displayName.charAt(0).toUpperCase()},`${d.displayName}-${O}`))}),e.jsx("span",{className:"text-xs text-muted-foreground",children:((k=a.members)==null?void 0:k.length)||a.memberCount})]})}),e.jsx("td",{className:"px-5 py-3",children:(()=>{const d=a.lastModifiedOn||a.createdOn;return e.jsx("span",{className:"text-sm text-muted-foreground",title:d?new Date(d).toLocaleString():void 0,children:ge(d)})})()}),e.jsx("td",{className:"px-5 py-3 text-end",children:e.jsxs("div",{className:"inline-flex items-center gap-1",children:[e.jsx("button",{onClick:d=>{d.stopPropagation(),W(a.id,a.version)},className:"rounded-md p-1.5 text-muted-foreground hover:bg-secondary hover:text-foreground transition-colors",title:r("common.duplicate","Duplicate"),"aria-label":r("common.duplicate","Duplicate"),children:e.jsx(ue,{className:"h-4 w-4"})}),e.jsx("button",{onClick:d=>{d.stopPropagation(),I(a.id,a.version)},className:"rounded-md p-1.5 text-muted-foreground hover:text-destructive hover:bg-destructive/10 transition-colors",title:r("common.delete"),"aria-label":r("common.delete"),children:e.jsx(ne,{className:"h-4 w-4"})})]})})]},a.id)})})]})})]})]}),e.jsx(Qe,{open:v,onClose:()=>f(!1),type:"group",wizardPath:"/manage/groups/wizard",onQuickCreate:()=>{f(!1),A(!0)}}),e.jsx(ns,{open:l,onClose:()=>A(!1)}),e.jsx(Ke,{open:m!==null,onOpenChange:a=>!a&&j(null),title:r("groups.confirmDelete","Delete this group?"),description:r("groups.confirmDeleteDesc","This will permanently delete the group configuration."),confirmLabel:r("common.delete"),cancelLabel:r("common.cancel"),onConfirm:H,isPending:z.isPending})]})}export{Cs as GroupsPage}; +import{c as K,r as i,dg as _,j as e,b$ as $,Y as ue,Z as ne,h as xe,N as pe,B as Ae,i as R,t as ge,dh as Me,b as De,e as Te,di as Oe,dj as Re,a9 as Ge,a8 as de,dk as he,P as ae,T as se,az as Ee,bj as ze,a7 as Ie,k as L,b2 as We,dl as be,dm as ie,bB as Pe,V as Le,a4 as Ue,_ as U,$ as $e,f as Be,dn as Fe,dp as Ve,o as le,ad as _e,S as Q,a5 as X,a6 as Z,ae as Ke}from"./index-BnLj1hck.js";import{B}from"./badge-C2HqoOk5.js";import{E as qe}from"./ellipsis-vertical-fP6IFBST.js";import{u as He}from"./group-config-DZrgz0vz.js";import{D as te,g as Ye}from"./group-templates-B4YwvSlk.js";import{I as G}from"./info-cNcTVsFc.js";import{S as Je}from"./shield-Dy-B1VeF.js";import{C as Qe}from"./create-or-wizard-dialog-qFzrzZXk.js";import{E as Xe}from"./empty-state-DxZE48rx.js";import{E as Ze}from"./error-state-D4qtZYFq.js";import{g as es,V as ss,s as rs}from"./view-mode-DguClt6l.js";import{L as ts}from"./layout-template-CbFD6ZSF.js";import{A as ee}from"./arrow-up-down-CQw9INyB.js";import"./accessible-dialog-C2wu1H5q.js";import"./wand-sparkles-BtCP1jzO.js";import"./layout-grid-DZHuDrOW.js";import"./list-Dqf28LSX.js";function as({group:r,memberCount:g=0,members:n=[],style:t,onDuplicate:v,onDelete:f}){const{t:l}=K(),[A,m]=i.useState(!1),j=t?_(t,l):null,y=r.lastModifiedOn||r.createdOn||0,C=ge(y),o=n.length>0?n.length:g;return e.jsxs("div",{className:R("group relative flex flex-col rounded-xl border bg-card p-5 shadow-sm transition-all duration-200","hover:shadow-md hover:border-primary/30","ring-1 ring-border"),"data-testid":`group-card-${r.id}`,children:[e.jsxs("div",{className:"flex items-start justify-between",children:[j?e.jsxs("div",{className:"inline-flex items-center gap-1.5 rounded-full bg-primary/10 px-2.5 py-1 text-xs font-medium text-primary ring-1 ring-primary/20",title:j.flow,children:[e.jsx("span",{children:j.icon}),j.label]}):e.jsxs("div",{className:"inline-flex items-center gap-1.5 rounded-full bg-muted px-2.5 py-1 text-xs font-medium text-muted-foreground ring-1 ring-border",children:[e.jsx($,{className:"h-3.5 w-3.5"}),l("groups.defaultLabel","Group")]}),e.jsxs("div",{className:"relative",children:[e.jsx("button",{onClick:()=>m(!A),className:"rounded-md p-1 text-muted-foreground opacity-0 transition-opacity hover:bg-secondary hover:text-foreground group-hover:opacity-100","aria-label":l("common.actions","Actions"),"data-testid":`group-menu-${r.id}`,children:e.jsx(qe,{className:"h-4 w-4"})}),A&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"fixed inset-0 z-40",onClick:()=>m(!1)}),e.jsxs("div",{className:"absolute inset-e-0 z-50 mt-1 w-44 rounded-lg border bg-popover py-1 shadow-lg",children:[v&&e.jsxs("button",{onClick:()=>{v(r.id,r.version),m(!1)},className:"flex w-full items-center gap-2 px-3 py-2 text-sm text-popover-foreground hover:bg-secondary",children:[e.jsx(ue,{className:"h-4 w-4"}),l("common.duplicate","Duplicate")]}),f&&e.jsxs("button",{onClick:()=>{f(r.id,r.version),m(!1)},className:"flex w-full items-center gap-2 px-3 py-2 text-sm text-destructive hover:bg-destructive/10",children:[e.jsx(ne,{className:"h-4 w-4"}),l("common.delete")]})]})]})]})]}),e.jsxs("div",{className:"mt-4 flex-1",children:[e.jsxs(xe,{to:`/manage/groups/${r.id}?version=${r.version}`,className:"text-lg font-semibold text-foreground hover:text-primary transition-colors",children:[r.name||l("groups.unnamed","Unnamed Group"),e.jsx(pe,{className:"ms-1 inline h-3.5 w-3.5 opacity-0 group-hover:opacity-50"})]}),e.jsx("p",{className:"mt-0.5 font-mono text-xs text-muted-foreground/70 truncate",title:r.id,children:r.id}),e.jsx("p",{className:"mt-1 line-clamp-2 text-sm text-muted-foreground",title:r.description||void 0,children:r.description||l("groups.noDescription","No description")}),n&&n.length>0&&e.jsxs("div",{className:"mt-2 flex flex-wrap items-center gap-1",title:n.map(N=>N.displayName).join(", "),role:"list","aria-label":l("groups.membersColumn","Members"),"data-testid":`group-card-members-${r.id}`,children:[n.slice(0,4).map((N,x)=>e.jsxs("span",{className:"inline-flex items-center gap-1 rounded-full bg-secondary/80 px-2 py-0.5 text-[10px] font-medium text-muted-foreground ring-1 ring-border",role:"listitem","aria-label":N.displayName,children:[N.memberType==="GROUP"?e.jsx($,{className:"h-2.5 w-2.5","aria-hidden":"true"}):e.jsx(Ae,{className:"h-2.5 w-2.5","aria-hidden":"true"}),e.jsx("span",{className:"max-w-[6rem] truncate",title:N.displayName,children:N.displayName})]},`${N.displayName}-${x}`)),n.length>4&&e.jsx("span",{className:"text-[10px] text-muted-foreground",children:l("groups.memberOverflow","+{{count}} more",{count:n.length-4})})]})]}),e.jsxs("div",{className:"mt-4 flex items-center justify-between border-t border-border pt-3",children:[e.jsx("span",{className:"text-xs text-muted-foreground",title:y?new Date(y).toLocaleString():void 0,children:C}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(B,{variant:"secondary",className:"text-[10px]",children:[e.jsx($,{className:"me-0.5 h-3 w-3"}),o]}),e.jsxs("span",{className:"rounded-full bg-primary/10 px-2 py-0.5 text-xs font-medium text-primary",children:["v",r.version]})]})]})]})}function ns({open:r,onClose:g,template:n}){const{t}=K(),v=Me(),{data:f}=De(100),l=i.useMemo(()=>f?Te(f):[],[f]),A=Oe(),[m,j]=i.useState(n?"basics":"template"),[,y]=i.useState(n??null),[C,o]=i.useState((n==null?void 0:n.name)??""),[N,x]=i.useState((n==null?void 0:n.description)??""),[h,D]=i.useState((n==null?void 0:n.style)??"ROUND_TABLE"),[p,S]=i.useState((n==null?void 0:n.maxRounds)??2),[w,M]=i.useState(n?n.roles.map((s,c)=>({agentId:"",displayName:s.displayName,speakingOrder:c+1,role:s.role,memberType:"AGENT"})):[]),[z,q]=i.useState(""),[T,E]=i.useState(!1),[I,H]=i.useState(te),[W,Y]=i.useState("SKIP"),[a,u]=i.useState(2),[k,d]=i.useState("SKIP"),[O,F]=i.useState(0),je=i.useMemo(()=>{const s=new Map;for(const c of l)s.set(c.id,c.name||c.id.slice(0,12));return s},[l]),re=i.useCallback(()=>{j("template"),y(null),o(""),x(""),D("ROUND_TABLE"),S(2),M([]),q(""),E(!1),H(te),Y("SKIP"),u(2),d("SKIP"),F(0),g()},[g]);function Ne(s){y(s),o(s.name),x(s.description),D(s.style),S(s.maxRounds),M(s.roles.map((c,b)=>({agentId:"",displayName:c.displayName,speakingOrder:b+1,role:c.role,memberType:"AGENT"}))),j("basics")}function ve(){y(null),j("basics")}function ye(){M([...w,{agentId:"",displayName:"",speakingOrder:w.length+1,role:null,memberType:"AGENT"}])}function we(s){M(w.filter((c,b)=>b!==s))}function P(s,c){M(w.map((b,Se)=>Se===s?{...b,...c}:b))}function ke(){const s={name:C,description:N,members:w.filter(c=>c.agentId||c.displayName),moderatorAgentId:z||null,style:h,maxRounds:p,phases:null,protocol:{agentTimeoutSeconds:I,onAgentFailure:W,maxRetries:a,onMemberUnavailable:k,...O>0?{maxTurns:O}:{}}};v.mutate(s,{onSuccess:()=>{U.success(t("groups.createSuccess","Group created successfully")),re()},onError:()=>U.error(t("common.error"))})}if(!r)return null;const J=["template","basics","members","review"],V=J.indexOf(m),oe=Re(h,A),Ce=m==="template"||m==="basics"&&C.trim()&&oe||m==="members"&&w.length>=2||m==="review";return e.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm",children:e.jsxs("div",{className:"relative w-full max-w-2xl max-h-[85vh] overflow-hidden rounded-xl border border-border bg-card shadow-2xl flex flex-col",children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-border px-5 py-3",children:[e.jsx("h2",{className:"text-lg font-bold",children:t("groups.createGroup","Create Group")}),e.jsx("button",{onClick:re,className:"rounded-md p-1 hover:bg-secondary transition-colors","aria-label":t("common.close","Close"),children:e.jsx(Ge,{className:"h-5 w-5"})})]}),e.jsx("div",{className:"flex items-center gap-2 px-5 py-2 border-b border-border bg-secondary/20",children:J.map((s,c)=>e.jsxs("div",{className:R("flex items-center gap-1",c>0&&"ms-2"),children:[c>0&&e.jsx(de,{className:"h-3 w-3 text-muted-foreground"}),e.jsx("span",{className:R("text-xs font-medium px-2 py-0.5 rounded-full transition-colors",s===m?"bg-primary text-primary-foreground":ce.jsxs("button",{onClick:()=>Ne(s),className:"text-start rounded-lg border border-border p-3 hover:border-primary/50 hover:bg-primary/5 transition-all","data-testid":`template-${s.key}`,children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsx("span",{className:"text-lg",children:s.icon}),e.jsx("span",{className:"text-sm font-semibold",children:s.name})]}),e.jsx("p",{className:"text-xs text-muted-foreground line-clamp-2",children:s.description}),e.jsxs("div",{className:"flex items-center gap-2 mt-2",children:[e.jsx(B,{variant:"outline",className:"text-[10px]",children:he(s.style,t)}),e.jsxs(B,{variant:"secondary",className:"text-[10px]",children:[s.roles.length," roles"]})]})]},s.key)),e.jsxs("button",{onClick:ve,className:"text-start rounded-lg border border-dashed border-border p-3 hover:border-primary/50 hover:bg-primary/5 transition-all","data-testid":"template-blank",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsx(ae,{className:"h-5 w-5 text-muted-foreground"}),e.jsx("span",{className:"text-sm font-semibold",children:t("groups.startBlank","Start from Scratch")})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:t("groups.blankDesc","Configure everything manually.")})]})]})]}),m==="basics"&&e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsxs("label",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:[t("common.name","Name")," *"]}),e.jsx("input",{value:C,onChange:s=>o(s.target.value),className:"mt-1 w-full rounded-lg border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring",placeholder:t("groups.namePlaceholder","e.g. Advisory Board"),"data-testid":"group-name-input"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:t("common.description","Description")}),e.jsx("textarea",{value:N,onChange:s=>x(s.target.value),className:"mt-1 w-full rounded-lg border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring",rows:2})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:t("groups.discussionStyle","Discussion Style")}),e.jsx("div",{className:"grid grid-cols-2 sm:grid-cols-3 gap-2 mt-1",children:A.map(s=>e.jsxs("button",{onClick:()=>D(s),className:R("rounded-lg border p-2 text-start transition-all text-xs",h===s?"border-primary bg-primary/10":"border-border hover:border-primary/30"),children:[e.jsx("span",{className:"text-sm",children:_(s,t).icon})," ",e.jsx("span",{className:"font-medium",children:_(s,t).label})]},s))}),!oe&&e.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-destructive/40 bg-destructive/5 p-2 mt-2","data-testid":"unsupported-style-warning",children:[e.jsx(se,{className:"h-3.5 w-3.5 text-destructive shrink-0 mt-0.5"}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:t("groups.unsupportedStyle","This server does not support {{style}}. Pick another framework to continue.",{style:_(h,t).label})})]}),h==="ROUND_TABLE"&&e.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-primary/30 bg-primary/5 p-2 mt-2",children:[e.jsx(G,{className:"h-3.5 w-3.5 text-primary shrink-0 mt-0.5"}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:t("groupWizard.hintRoundTable","All members share their opinions, then discuss each other's views across multiple rounds before the moderator synthesizes.")})]}),h==="DEBATE"&&e.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-sky-500/30 bg-sky-500/5 p-2 mt-2",children:[e.jsx(G,{className:"h-3.5 w-3.5 text-sky-500 shrink-0 mt-0.5"}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:t("groupWizard.hintDebate","Assign PRO and CON roles to members. Pro argues first, then Con, followed by rebuttals and judgment.")})]}),h==="DEVIL_ADVOCATE"&&e.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-amber-500/30 bg-amber-500/5 p-2 mt-2",children:[e.jsx(G,{className:"h-3.5 w-3.5 text-amber-500 shrink-0 mt-0.5"}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:t("groupWizard.hintDevilAdvocate","Assign the role DEVIL_ADVOCATE to at least one member. They will challenge the group's consensus.")})]}),h==="PEER_REVIEW"&&e.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-emerald-500/30 bg-emerald-500/5 p-2 mt-2",children:[e.jsx(G,{className:"h-3.5 w-3.5 text-emerald-500 shrink-0 mt-0.5"}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:t("groupWizard.hintPeerReview","Each member individually critiques every other member's work, then revises based on feedback received.")})]}),h==="DELPHI"&&e.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-purple-500/30 bg-purple-500/5 p-2 mt-2",children:[e.jsx(G,{className:"h-3.5 w-3.5 text-purple-500 shrink-0 mt-0.5"}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:t("groupWizard.hintDelphi","All members respond independently and anonymously. After each round, they see anonymous results and can adjust. Max Rounds controls the number of anonymous iterations.")})]}),h==="TASK_FORCE"&&e.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-primary/30 bg-primary/5 p-2 mt-2",children:[e.jsx(G,{className:"h-3.5 w-3.5 text-primary shrink-0 mt-0.5"}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:t("groupWizard.hintTaskForce","The moderator creates a task plan, assigns work to agents in parallel, then verifies and synthesizes the results.")})]}),h==="NEGOTIATION"&&e.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-emerald-500/30 bg-emerald-500/5 p-2 mt-2",children:[e.jsx(G,{className:"h-3.5 w-3.5 text-emerald-500 shrink-0 mt-0.5"}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:t("groupWizard.hintNegotiation","Members state their interests, table proposals, then bargain — Max Rounds sets how many bargaining rounds run. The moderator arbitrates only if no agreement is reached.")})]}),h==="CUSTOM"&&e.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-muted-foreground/30 bg-muted/20 p-2 mt-2",children:[e.jsx(G,{className:"h-3.5 w-3.5 text-muted-foreground shrink-0 mt-0.5"}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:t("groupWizard.hintCustom","Define your own phases manually. Custom phases can be configured via the API after creation.")})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:t("groups.maxRounds","Max Rounds")}),e.jsx("input",{type:"number",value:p,onChange:s=>S(Math.max(1,parseInt(s.target.value)||1)),className:"mt-1 w-20 rounded-lg border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring",min:1,max:10})]}),e.jsxs("div",{className:"border border-border rounded-lg overflow-hidden",children:[e.jsxs("button",{type:"button",onClick:()=>E(!T),className:"w-full flex items-center gap-2 px-3 py-2 text-xs font-semibold text-muted-foreground hover:text-foreground transition-colors",children:[e.jsx(Ee,{className:"h-3.5 w-3.5"}),t("groupWizard.advancedSettings","Advanced Protocol Settings"),T?e.jsx(ze,{className:"h-3 w-3 ms-auto"}):e.jsx(Ie,{className:"h-3 w-3 ms-auto"})]}),T&&e.jsxs("div",{className:"px-3 pb-3 space-y-3 border-t border-border pt-3",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:"text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:t("groupWizard.agentTimeout","Agent Timeout (seconds)")}),e.jsx("input",{type:"number",value:I,onChange:s=>H(Math.max(10,parseInt(s.target.value)||te)),className:"mt-1 w-full rounded-md border border-input bg-background px-2 py-1.5 text-xs focus:outline-none focus:ring-2 focus:ring-ring",min:10,max:600})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:t("groupWizard.maxRetries","Max Retries")}),e.jsx("input",{type:"number",value:a,onChange:s=>u(Math.max(0,parseInt(s.target.value)||0)),className:"mt-1 w-full rounded-md border border-input bg-background px-2 py-1.5 text-xs focus:outline-none focus:ring-2 focus:ring-ring",min:0,max:10})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:"text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:t("groupWizard.onAgentFailure","On Agent Failure")}),e.jsxs("select",{value:W,onChange:s=>Y(s.target.value),className:"mt-1 w-full rounded-md border border-input bg-background px-2 py-1.5 text-xs focus:outline-none focus:ring-2 focus:ring-ring",children:[e.jsx("option",{value:"SKIP",children:t("groupWizard.policySkip","Skip")}),e.jsx("option",{value:"RETRY",children:t("groupWizard.policyRetry","Retry")}),e.jsx("option",{value:"ABORT",children:t("groupWizard.policyAbort","Abort")})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:t("groupWizard.onMemberUnavailable","On Member Unavailable")}),e.jsxs("select",{value:k,onChange:s=>d(s.target.value),className:"mt-1 w-full rounded-md border border-input bg-background px-2 py-1.5 text-xs focus:outline-none focus:ring-2 focus:ring-ring",children:[e.jsx("option",{value:"SKIP",children:t("groupWizard.policySkip","Skip")}),e.jsx("option",{value:"FAIL",children:t("groupWizard.policyFail","Fail")})]})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:t("groupWizard.maxTurns","Max Turns (0 = unlimited)")}),e.jsx("input",{type:"number",value:O,onChange:s=>F(Math.max(0,parseInt(s.target.value)||0)),className:"mt-1 w-24 rounded-md border border-input bg-background px-2 py-1.5 text-xs focus:outline-none focus:ring-2 focus:ring-ring",min:0,max:200}),e.jsx("p",{className:"text-[10px] text-muted-foreground mt-0.5",children:t("groupWizard.maxTurnsHelp","Safety cap for total agent turns. Default backend limit is 50.")})]})]})]})]}),m==="members"&&e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:t("groups.assignAgents","Assign agents to each member role.")}),e.jsxs(L,{variant:"outline",size:"sm",onClick:ye,children:[e.jsx(ae,{className:"h-3 w-3"})," ",t("groups.addMember","Add Member")]})]}),e.jsx("div",{className:"space-y-2 max-h-[400px] overflow-y-auto pe-1",children:w.map((s,c)=>e.jsxs("div",{className:"rounded-lg border border-border overflow-hidden bg-card",children:[e.jsxs("div",{className:"flex items-center gap-2 px-3 py-2 bg-secondary/20",children:[e.jsxs("div",{className:"flex items-center rounded-md border border-border bg-background overflow-hidden shrink-0",children:[e.jsx("button",{onClick:()=>P(c,{memberType:"AGENT"}),className:R("px-2 py-0.5 text-[10px] font-medium transition-colors",s.memberType==="AGENT"?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground"),children:"Agent"}),e.jsxs("button",{onClick:()=>P(c,{memberType:"GROUP"}),className:R("px-2 py-0.5 text-[10px] font-medium transition-colors",s.memberType==="GROUP"?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground"),children:[e.jsx($,{className:"inline h-2.5 w-2.5 me-0.5"}),"Group"]})]}),e.jsx("input",{value:s.displayName,onChange:b=>P(c,{displayName:b.target.value}),className:"flex-1 min-w-0 bg-transparent text-xs font-semibold text-foreground focus:outline-none placeholder:text-muted-foreground",placeholder:t("groupWizard.displayName","Display Name")}),e.jsx("input",{value:s.role??"",onChange:b=>P(c,{role:b.target.value||null}),className:"w-24 bg-transparent text-xs text-muted-foreground focus:outline-none placeholder:text-muted-foreground/50",placeholder:t("groupWizard.rolePlaceholder","Role")}),e.jsx("button",{onClick:()=>we(c),className:"shrink-0 rounded p-1 text-muted-foreground hover:text-destructive transition-colors",children:e.jsx(ne,{className:"h-3.5 w-3.5"})})]}),e.jsx("div",{className:"px-3 py-2",children:s.memberType==="GROUP"?e.jsx(ds,{value:s.agentId,onChange:b=>P(c,{agentId:b})}):e.jsxs("select",{value:s.agentId,onChange:b=>P(c,{agentId:b.target.value}),className:R("w-full rounded-md border bg-background px-2 py-1.5 text-xs focus:outline-none focus:ring-1 focus:ring-ring",s.agentId?"border-input":"border-amber-400/50"),children:[e.jsx("option",{value:"",children:t("groups.selectAgent","Select agent…")}),l.map(b=>e.jsx("option",{value:b.id,children:b.name||b.id.slice(0,12)},b.id))]})})]},c))}),e.jsxs("div",{className:"rounded-lg border-2 border-primary/20 bg-primary/5 p-3",children:[e.jsxs("label",{className:"text-xs font-semibold text-foreground flex items-center gap-1.5 mb-2",children:["⭐ ",t("groups.moderator","Moderator (for synthesis)")]}),e.jsxs("select",{value:z,onChange:s=>q(s.target.value),className:"w-full rounded-lg border border-input bg-background px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring",children:[e.jsx("option",{value:"",children:t("groups.noModerator","No moderator")}),l.map(s=>e.jsx("option",{value:s.id,children:s.name||s.id.slice(0,12)},s.id))]})]})]}),m==="review"&&e.jsx(os,{name:C,description:N,style:h,maxRounds:p,members:w,moderatorAgentId:z,agentNameMap:je,agentTimeout:I,onAgentFailure:W,maxRetries:a,onMemberUnavailable:k,maxTurns:O})]}),e.jsxs("div",{className:"flex items-center justify-between border-t border-border px-5 py-3",children:[e.jsx(L,{variant:"outline",onClick:()=>{V>0?j(J[V-1]):re()},children:V>0?e.jsxs(e.Fragment,{children:[e.jsx(We,{className:"h-4 w-4"})," ",t("common.back","Back")]}):t("common.cancel","Cancel")}),m==="review"?e.jsx(L,{onClick:ke,disabled:v.isPending,children:v.isPending?t("common.saving","Saving…"):t("groups.createGroup","Create Group")}):e.jsxs(L,{onClick:()=>j(J[V+1]),disabled:!Ce,children:[t("common.next","Next")," ",e.jsx(de,{className:"h-4 w-4"})]})]})]})})}function os({name:r,description:g,style:n,maxRounds:t,members:v,moderatorAgentId:f,agentNameMap:l,agentTimeout:A,onAgentFailure:m,maxRetries:j,onMemberUnavailable:y,maxTurns:C}){var h,D;const{t:o}=K(),N=v.filter(p=>!p.agentId).length,x=He({members:v,phases:null,style:n,maxRounds:t});return e.jsxs("div",{className:"space-y-4","data-testid":"review-summary",children:[N>0&&e.jsxs("div",{className:"flex items-start gap-2.5 rounded-lg border border-amber-400/40 bg-amber-400/10 px-3 py-2.5",children:[e.jsx(se,{className:"h-4 w-4 text-amber-500 shrink-0 mt-0.5"}),e.jsxs("p",{className:"text-xs",children:[e.jsx("span",{className:"font-semibold text-amber-500",children:o("groups.reviewUnassignedWarning",{defaultValue:"{{count}} member unassigned",defaultValue_other:"{{count}} members unassigned",count:N})}),e.jsxs("span",{className:"text-muted-foreground ms-1",children:["— ",o("groups.reviewUnassignedHint","Go back to assign agents before creating.")]})]})]}),x.length>0&&e.jsx("div",{className:"flex flex-col gap-1.5 rounded-lg border border-amber-400/40 bg-amber-400/10 px-3 py-2.5","data-testid":"dialog-role-coverage-warning",children:x.map(p=>e.jsxs("div",{className:"flex items-start gap-2.5",children:[e.jsx(se,{className:"h-4 w-4 text-amber-500 shrink-0 mt-0.5"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:o("groups.roleCoverageWarning",'No member carries the role "{{role}}" — every member will speak in {{phases}} instead.',{role:p.role,phases:p.phaseNames.join(", ")})})]},p.role))}),e.jsxs("div",{className:"rounded-lg border border-border bg-secondary/10 p-3 space-y-2",children:[e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("h3",{className:"text-sm font-bold truncate",children:r}),g&&e.jsx("p",{className:"text-xs text-muted-foreground mt-0.5 line-clamp-2",children:g})]}),e.jsxs(B,{variant:"outline",className:"shrink-0",children:[(h=ie(n,o))==null?void 0:h.icon," ",he(n,o)]})]}),e.jsx("p",{className:"text-[10px] text-muted-foreground font-mono",children:(D=ie(n,o))==null?void 0:D.flow})]}),e.jsxs("div",{className:"grid grid-cols-3 gap-2",children:[e.jsxs("div",{className:"rounded-lg border border-border bg-secondary/10 p-2.5 text-center",children:[e.jsx($,{className:"h-3.5 w-3.5 text-muted-foreground inline-block mb-1"}),e.jsx("div",{className:"text-sm font-bold",children:v.length}),e.jsx("div",{className:"text-[10px] text-muted-foreground",children:o("groups.reviewMembers","Members")})]}),e.jsxs("div",{className:"rounded-lg border border-border bg-secondary/10 p-2.5 text-center",children:[e.jsx(Pe,{className:"h-3.5 w-3.5 text-muted-foreground inline-block mb-1"}),e.jsx("div",{className:"text-sm font-bold",children:t}),e.jsx("div",{className:"text-[10px] text-muted-foreground",children:o("groups.reviewRounds","Max Rounds")})]}),e.jsxs("div",{className:"rounded-lg border border-border bg-secondary/10 p-2.5 text-center",children:[e.jsx(Le,{className:"h-3.5 w-3.5 text-muted-foreground inline-block mb-1"}),e.jsxs("div",{className:"text-sm font-bold",children:[A,"s"]}),e.jsx("div",{className:"text-[10px] text-muted-foreground",children:o("groups.reviewTimeout","Agent Timeout")})]})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground mb-2",children:o("groups.reviewMemberRoster","Member Roster")}),e.jsx("div",{className:"rounded-lg border border-border overflow-hidden",children:v.map((p,S)=>{const w=p.agentId?l.get(p.agentId):null,M=!p.agentId;return e.jsxs("div",{className:R("flex items-center gap-2 px-3 py-2 text-xs",S>0&&"border-t border-border",M&&"bg-amber-400/5"),children:[e.jsx("span",{className:"text-[10px] font-mono text-muted-foreground w-4 shrink-0 text-center",children:S+1}),e.jsxs("div",{className:"flex items-center gap-1.5 min-w-0 flex-1",children:[e.jsx("span",{className:"font-medium truncate",children:p.displayName}),p.role&&e.jsx(B,{variant:"outline",className:"text-[9px] px-1.5 py-0 shrink-0",children:p.role}),p.memberType==="GROUP"&&e.jsxs(B,{variant:"secondary",className:"text-[9px] px-1.5 py-0 shrink-0",children:[e.jsx($,{className:"h-2 w-2 me-0.5"}),o("groups.memberTypeGroup","Group")]})]}),e.jsx("div",{className:"shrink-0 flex items-center gap-1",children:M?e.jsxs("span",{className:"flex items-center gap-1 text-amber-500 font-medium",children:[e.jsx(se,{className:"h-3 w-3"}),o("groups.reviewUnassigned","Unassigned")]}):e.jsxs("span",{className:"flex items-center gap-1 text-emerald-500",children:[e.jsx(Ue,{className:"h-3 w-3"}),e.jsx("span",{className:"text-foreground/70 truncate max-w-[140px]",children:w})]})})]},`${p.displayName}-${S}`)})})]}),e.jsx("div",{className:"rounded-lg border-2 border-primary/15 bg-primary/5 p-3",children:e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[e.jsx("span",{children:"⭐"}),e.jsx("span",{className:"font-semibold",children:o("groups.reviewModerator","Moderator")}),e.jsx("span",{className:"text-muted-foreground",children:"—"}),f?e.jsx("span",{className:"text-foreground font-medium",children:l.get(f)||f.slice(0,12)}):e.jsx("span",{className:"text-muted-foreground italic",children:o("groups.reviewNoModerator","None (auto-synthesis disabled)")})]})}),e.jsxs("div",{className:"rounded-lg border border-border bg-secondary/10 p-2.5 space-y-1",children:[e.jsxs("div",{className:"flex items-center gap-1.5 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground mb-1",children:[e.jsx(Je,{className:"h-3 w-3"}),o("groupWizard.protocolSummary","Protocol")]}),e.jsxs("div",{className:"grid grid-cols-2 gap-x-4 gap-y-1 text-[10px]",children:[e.jsx("span",{className:"text-muted-foreground",children:o("groupWizard.onAgentFailure","On Agent Failure")}),e.jsx("span",{className:"font-medium",children:o(`groupWizard.policy${m.charAt(0)+m.slice(1).toLowerCase()}`,m.toLowerCase())}),e.jsx("span",{className:"text-muted-foreground",children:o("groupWizard.maxRetries","Max Retries")}),e.jsx("span",{className:"font-medium",children:j}),e.jsx("span",{className:"text-muted-foreground",children:o("groupWizard.onMemberUnavailable","On Member Unavailable")}),e.jsx("span",{className:"font-medium",children:o(`groupWizard.policy${y.charAt(0)+y.slice(1).toLowerCase()}`,y.toLowerCase())}),C>0&&e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"text-muted-foreground",children:o("groupWizard.maxTurns","Max Turns")}),e.jsx("span",{className:"font-medium",children:C})]})]})]})]})}function ds({value:r,onChange:g}){const{t:n}=K(),{data:t,isLoading:v}=be(100),f=t&&t.length>0;return v?e.jsx("div",{className:"rounded-md border border-input bg-background px-2 py-1.5 text-xs text-muted-foreground animate-pulse",children:n("common.loading","Loading…")}):f?e.jsxs("select",{value:r,onChange:l=>g(l.target.value),className:R("w-full rounded-md border bg-background px-2 py-1.5 text-xs focus:outline-none focus:ring-1 focus:ring-ring",r?"border-input":"border-amber-400/50"),children:[e.jsx("option",{value:"",children:n("groupWizard.selectGroup","Select existing group…")}),t.map(l=>e.jsxs("option",{value:l.id,children:[l.name||l.id.slice(0,12)," (",l.memberCount," members)"]},l.id))]}):e.jsxs("div",{className:"rounded-md border border-dashed border-amber-400/50 bg-amber-400/5 px-2 py-2 text-center",children:[e.jsx("p",{className:"text-[10px] font-medium text-amber-600 dark:text-amber-400",children:n("groupWizard.noGroupsYet","No groups available")}),e.jsx("p",{className:"text-[9px] text-muted-foreground mt-0.5",children:n("groupWizard.noGroupsHint","Create a group first, then add it as a nested sub-group member.")})]})}const fe="eddi-groups-sort";function ce(){try{const r=localStorage.getItem(fe);if(r){const g=JSON.parse(r);if(g.field&&g.dir)return g}}catch{}return{field:"modified",dir:"desc"}}function me(r,g){try{localStorage.setItem(fe,JSON.stringify({field:r,dir:g}))}catch{}}function Cs(){const{t:r}=K(),g=$e(),[n,t]=i.useState(""),[v,f]=i.useState(!1),[l,A]=i.useState(!1),[m,j]=i.useState(null),[y,C]=i.useState(()=>es("groups")),[o,N]=i.useState(()=>ce().field),[x,h]=i.useState(()=>ce().dir),D=Be(a=>a.maybeAutoStart);i.useEffect(()=>{const a=setTimeout(()=>D("groups"),500);return()=>clearTimeout(a)},[D]);const{data:p,isLoading:S,isError:w,refetch:M}=be(100,0,n),z=Fe(),q=Ve(),T=i.useMemo(()=>[...p??[]].sort((u,k)=>{var O,F;let d=0;return o==="name"?d=(u.name??"").localeCompare(k.name??""):o==="style"?d=(u.style??"").localeCompare(k.style??""):o==="members"?d=(((O=u.members)==null?void 0:O.length)??u.memberCount)-(((F=k.members)==null?void 0:F.length)??k.memberCount):d=u.lastModifiedOn-k.lastModifiedOn,x==="asc"?d:-d}),[p,o,x]),E=i.useCallback(a=>{if(o===a){const u=x==="asc"?"desc":"asc";h(u),me(a,u)}else{const u=a==="modified"?"desc":"asc";N(a),h(u),me(a,u)}},[o,x]);function I(a,u){j({id:a,version:u})}function H(){m&&z.mutate(m,{onSuccess:()=>{U.success(r("common.delete")+" ✓"),j(null)},onError:()=>U.error(r("common.error"))})}function W(a,u){q.mutate({id:a,version:u},{onSuccess:()=>U.success(r("groups.duplicateSuccess","Group duplicated")),onError:()=>U.error(r("common.error"))})}function Y(a){C(a),rs("groups",a)}return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",children:[e.jsxs("div",{children:[e.jsxs("h1",{className:"flex items-center gap-2 text-3xl font-bold text-foreground",children:[e.jsx(le,{className:"h-8 w-8 text-primary"}),r("pages.groups.title","Groups")]}),e.jsx("p",{className:"mt-1 text-muted-foreground",children:r("pages.groups.subtitle","Multi-agent discussion groups for structured debate and collaboration.")})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs(L,{variant:"outline",onClick:()=>g("/manage/groups/templates"),"data-testid":"browse-templates-btn",children:[e.jsx(ts,{className:"h-4 w-4"}),r("groupTemplates.browseButton","From Template")]}),e.jsxs(L,{onClick:()=>f(!0),"data-testid":"create-group-btn",children:[e.jsx(ae,{className:"h-4 w-4"}),r("createOrWizard.newGroup","New Group")]})]})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("div",{className:"relative flex-1",children:[e.jsx(_e,{className:"absolute inset-s-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),e.jsx("input",{type:"text",value:n,onChange:a=>t(a.target.value),placeholder:r("common.search"),className:"w-full rounded-lg border border-input bg-background py-2.5 ps-10 pe-4 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring transition-shadow","data-testid":"group-search"})]}),e.jsx(ss,{view:y,onChange:Y})]}),e.jsxs("div",{"data-tour":"groups-content",children:[S&&e.jsx("div",{className:"cq-card-grid",children:Array.from({length:4}).map((a,u)=>e.jsxs("div",{className:"rounded-xl border border-border bg-card p-5 space-y-3",children:[e.jsx(Q,{className:"h-5 w-3/4"}),e.jsx(Q,{className:"h-4 w-1/2"}),e.jsx(Q,{className:"h-4 w-full"}),e.jsx(Q,{className:"h-8 w-1/3"})]},u))}),w&&e.jsx(Ze,{message:r("common.error"),onRetry:()=>M(),retryLabel:r("common.retry")}),!S&&!w&&T.length===0&&e.jsx(Xe,{icon:le,title:n?r("common.noResults"):r("groups.empty","No groups yet"),description:n?void 0:r("groups.emptyDescription","Groups let multiple agents collaborate on structured discussions."),actionLabel:n?void 0:r("groups.createGroup","Create Group"),onAction:n?void 0:()=>f(!0)}),!S&&!w&&T.length>0&&e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:r("groups.count",{count:T.length,defaultValue:"{{count}} groups"})}),y==="card"?e.jsx("div",{className:"cq-card-grid","data-testid":"group-grid",children:T.map(a=>e.jsx(as,{group:a,memberCount:a.memberCount,members:a.members,style:a.style,onDuplicate:W,onDelete:I},a.id))}):e.jsx("div",{className:"overflow-hidden rounded-xl border bg-card shadow-sm","data-testid":"group-list",children:e.jsxs("table",{className:"w-full",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-border bg-secondary/50",children:[e.jsx("th",{className:"px-5 py-3 text-start text-xs font-medium uppercase tracking-wider text-muted-foreground","aria-sort":o==="name"?x==="asc"?"ascending":"descending":void 0,children:e.jsxs("button",{onClick:()=>E("name"),className:"inline-flex items-center gap-1 hover:text-foreground transition-colors","aria-label":r("common.sortByName","Sort by name"),children:[r("common.name","Name"),o==="name"?x==="asc"?e.jsx(X,{className:"h-3 w-3","aria-hidden":"true"}):e.jsx(Z,{className:"h-3 w-3","aria-hidden":"true"}):e.jsx(ee,{className:"h-3 w-3 opacity-30","aria-hidden":"true"})]})}),e.jsx("th",{className:"px-5 py-3 text-start text-xs font-medium uppercase tracking-wider text-muted-foreground","aria-sort":o==="style"?x==="asc"?"ascending":"descending":void 0,children:e.jsxs("button",{onClick:()=>E("style"),className:"inline-flex items-center gap-1 hover:text-foreground transition-colors","aria-label":r("groups.sortByStyle","Sort by style"),children:[r("groups.styleColumn","Style"),o==="style"?x==="asc"?e.jsx(X,{className:"h-3 w-3","aria-hidden":"true"}):e.jsx(Z,{className:"h-3 w-3","aria-hidden":"true"}):e.jsx(ee,{className:"h-3 w-3 opacity-30","aria-hidden":"true"})]})}),e.jsx("th",{className:"px-5 py-3 text-start text-xs font-medium uppercase tracking-wider text-muted-foreground","aria-sort":o==="members"?x==="asc"?"ascending":"descending":void 0,children:e.jsxs("button",{onClick:()=>E("members"),className:"inline-flex items-center gap-1 hover:text-foreground transition-colors","aria-label":r("groups.sortByMembers","Sort by members"),children:[r("groups.membersColumn","Members"),o==="members"?x==="asc"?e.jsx(X,{className:"h-3 w-3","aria-hidden":"true"}):e.jsx(Z,{className:"h-3 w-3","aria-hidden":"true"}):e.jsx(ee,{className:"h-3 w-3 opacity-30","aria-hidden":"true"})]})}),e.jsx("th",{className:"px-5 py-3 text-start text-xs font-medium uppercase tracking-wider text-muted-foreground","aria-sort":o==="modified"?x==="asc"?"ascending":"descending":void 0,children:e.jsxs("button",{onClick:()=>E("modified"),className:"inline-flex items-center gap-1 hover:text-foreground transition-colors","aria-label":r("common.sortByModified","Sort by last modified"),children:[r("common.modified","Modified"),o==="modified"?x==="asc"?e.jsx(X,{className:"h-3 w-3","aria-hidden":"true"}):e.jsx(Z,{className:"h-3 w-3","aria-hidden":"true"}):e.jsx(ee,{className:"h-3 w-3 opacity-30","aria-hidden":"true"})]})}),e.jsx("th",{className:"px-5 py-3 text-end text-xs font-medium uppercase tracking-wider text-muted-foreground",children:r("conversations.actions","Actions")})]})}),e.jsx("tbody",{className:"divide-y divide-border",children:T.map(a=>{var u,k;return e.jsxs("tr",{className:"hover:bg-secondary/30 transition-colors cursor-pointer",onClick:()=>g(`/manage/groups/${a.id}?version=${a.version}`),onKeyDown:d=>{(d.key==="Enter"||d.key===" ")&&(d.preventDefault(),g(`/manage/groups/${a.id}?version=${a.version}`))},tabIndex:0,role:"link","data-testid":`group-row-${a.id}`,children:[e.jsx("td",{className:"px-5 py-3",children:e.jsxs(xe,{to:`/manage/groups/${a.id}?version=${a.version}`,className:"text-sm font-medium text-foreground hover:text-primary transition-colors",onClick:d=>d.stopPropagation(),children:[a.name||r("groups.unnamed","Unnamed Group"),e.jsx(pe,{className:"ms-1 inline h-3 w-3 opacity-40"})]})}),e.jsx("td",{className:"px-5 py-3",children:(()=>{const d=a.style?_(a.style,r):null;return d?e.jsxs("span",{className:"inline-flex items-center gap-1.5 rounded-full bg-primary/10 px-2 py-0.5 text-xs font-medium text-primary","aria-label":`${r("groups.styleColumn","Style")}: ${d.label}`,title:d.flow,"data-testid":`group-style-${a.id}`,children:[e.jsx("span",{"aria-hidden":"true",children:d.icon}),d.label]}):e.jsx("span",{className:"text-xs text-muted-foreground",children:"—"})})()}),e.jsx("td",{className:"px-5 py-3",children:e.jsxs("div",{className:"flex items-center gap-2",title:(u=a.members)==null?void 0:u.map(d=>d.displayName).join(", "),role:"list","aria-label":r("groups.membersColumn","Members"),"data-testid":`group-members-${a.id}`,children:[e.jsx("div",{className:"flex -space-x-1.5",children:(a.members??[]).slice(0,3).map((d,O)=>e.jsx("span",{className:"flex h-6 w-6 items-center justify-center rounded-full bg-primary/10 text-[10px] font-bold text-primary ring-2 ring-card",role:"listitem","aria-label":d.displayName,children:d.displayName.charAt(0).toUpperCase()},`${d.displayName}-${O}`))}),e.jsx("span",{className:"text-xs text-muted-foreground",children:((k=a.members)==null?void 0:k.length)||a.memberCount})]})}),e.jsx("td",{className:"px-5 py-3",children:(()=>{const d=a.lastModifiedOn||a.createdOn;return e.jsx("span",{className:"text-sm text-muted-foreground",title:d?new Date(d).toLocaleString():void 0,children:ge(d)})})()}),e.jsx("td",{className:"px-5 py-3 text-end",children:e.jsxs("div",{className:"inline-flex items-center gap-1",children:[e.jsx("button",{onClick:d=>{d.stopPropagation(),W(a.id,a.version)},className:"rounded-md p-1.5 text-muted-foreground hover:bg-secondary hover:text-foreground transition-colors",title:r("common.duplicate","Duplicate"),"aria-label":r("common.duplicate","Duplicate"),children:e.jsx(ue,{className:"h-4 w-4"})}),e.jsx("button",{onClick:d=>{d.stopPropagation(),I(a.id,a.version)},className:"rounded-md p-1.5 text-muted-foreground hover:text-destructive hover:bg-destructive/10 transition-colors",title:r("common.delete"),"aria-label":r("common.delete"),children:e.jsx(ne,{className:"h-4 w-4"})})]})})]},a.id)})})]})})]})]}),e.jsx(Qe,{open:v,onClose:()=>f(!1),type:"group",wizardPath:"/manage/groups/wizard",onQuickCreate:()=>{f(!1),A(!0)}}),e.jsx(ns,{open:l,onClose:()=>A(!1)}),e.jsx(Ke,{open:m!==null,onOpenChange:a=>!a&&j(null),title:r("groups.confirmDelete","Delete this group?"),description:r("groups.confirmDeleteDesc","This will permanently delete the group configuration."),confirmLabel:r("common.delete"),cancelLabel:r("common.cancel"),onConfirm:H,isPending:z.isPending})]})}export{Cs as GroupsPage}; diff --git a/src/main/resources/META-INF/resources/assets/handlebars-CWdXIirr.js b/src/main/resources/META-INF/resources/assets/handlebars-CWdXIirr.js new file mode 100644 index 0000000000..76bd3cdab2 --- /dev/null +++ b/src/main/resources/META-INF/resources/assets/handlebars-CWdXIirr.js @@ -0,0 +1 @@ +import{l as t}from"./editor-registry-jvsNWt75.js";import"./index-BnLj1hck.js";import"./resources-D97MNqv3.js";import"./parser-editor-CPhjadeF.js";import"./useQueries-DZrQsbjS.js";import"./accessible-dialog-C2wu1H5q.js";import"./input-BV8V9kav.js";import"./empty-state-DxZE48rx.js";import"./error-state-D4qtZYFq.js";import"./use-debounce-DMHuVYwD.js";import"./use-resources-xPGGDyiq.js";import"./cascade-save-BHTTkwOb.js";import"./workflows-DTtF3KEG.js";import"./type-ChzGm4vJ.js";import"./git-compare-arrows-HXbtfCTs.js";import"./undo-2-Dh2nRAeV.js";import"./save-s-dFqxLL.js";import"./eye-xZR8Jj8Y.js";import"./secret-key-picker-BCXXdOJ-.js";import"./use-secrets--RofX_r2.js";import"./eye-off-PKiH0Asw.js";import"./tool-approvals-editor-S2UA66Hb.js";import"./timer-CShnmlWE.js";import"./arrow-right-left-J0fZSu2z.js";import"./file-output-DlS0SPnt.js";import"./shield-Dy-B1VeF.js";import"./info-cNcTVsFc.js";import"./types-tS6i07ms.js";import"./scale-BnMnNt4Y.js";import"./gauge-ML2DGGDJ.js";import"./dollar-sign-HonLwnZc.js";import"./handshake-foe5KMFV.js";import"./cpu-zEsE2ia0.js";import"./server-BMZQ8ps7.js";import"./upload-D1UCHnd4.js";import"./lock-CL2SzOGd.js";import"./tag-Cd1R14bi.js";const e=["area","base","br","col","embed","hr","img","input","keygen","link","menuitem","meta","param","source","track","wbr"],Y={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\$\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s]+)/g,comments:{blockComment:["{{!--","--}}"]},brackets:[[""],["<",">"],["{{","}}"],["{","}"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"<",close:">"},{open:'"',close:'"'},{open:"'",close:"'"}],onEnterRules:[{beforeText:new RegExp(`<(?!(?:${e.join("|")}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`,"i"),afterText:/^<\/(\w[\w\d]*)\s*>$/i,action:{indentAction:t.IndentAction.IndentOutdent}},{beforeText:new RegExp(`<(?!(?:${e.join("|")}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`,"i"),action:{indentAction:t.IndentAction.Indent}}]},z={defaultToken:"",tokenPostfix:"",tokenizer:{root:[[/\{\{!--/,"comment.block.start.handlebars","@commentBlock"],[/\{\{!/,"comment.start.handlebars","@comment"],[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.root"}],[/)/,["delimiter.html","tag.html","delimiter.html"]],[/(<)(script)/,["delimiter.html",{token:"tag.html",next:"@script"}]],[/(<)(style)/,["delimiter.html",{token:"tag.html",next:"@style"}]],[/(<)([:\w]+)/,["delimiter.html",{token:"tag.html",next:"@otherTag"}]],[/(<\/)(\w+)/,["delimiter.html",{token:"tag.html",next:"@otherTag"}]],[/]+/,"metatag.content.html"],[/>/,"metatag.html","@pop"]],comment:[[/\}\}/,"comment.end.handlebars","@pop"],[/./,"comment.content.handlebars"]],commentBlock:[[/--\}\}/,"comment.block.end.handlebars","@pop"],[/./,"comment.content.handlebars"]],commentHtml:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.comment"}],[/-->/,"comment.html","@pop"],[/[^-]+/,"comment.content.html"],[/./,"comment.content.html"]],otherTag:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.otherTag"}],[/\/?>/,"delimiter.html","@pop"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/]],script:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.script"}],[/type/,"attribute.name","@scriptAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.text/javascript",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/(<\/)(script\s*)(>)/,["delimiter.html","tag.html",{token:"delimiter.html",next:"@pop"}]]],scriptAfterType:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.scriptAfterType"}],[/=/,"delimiter","@scriptAfterTypeEquals"],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.text/javascript",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptAfterTypeEquals:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.scriptAfterTypeEquals"}],[/"([^"]*)"/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.text/javascript",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptWithCustomType:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.scriptWithCustomType.$S2"}],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptEmbedded:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInEmbeddedState.scriptEmbedded.$S2",nextEmbedded:"@pop"}],[/<\/script/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}]],style:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.style"}],[/type/,"attribute.name","@styleAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter.html",next:"@styleEmbedded.text/css",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/(<\/)(style\s*)(>)/,["delimiter.html","tag.html",{token:"delimiter.html",next:"@pop"}]]],styleAfterType:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.styleAfterType"}],[/=/,"delimiter","@styleAfterTypeEquals"],[/>/,{token:"delimiter.html",next:"@styleEmbedded.text/css",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleAfterTypeEquals:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.styleAfterTypeEquals"}],[/"([^"]*)"/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/>/,{token:"delimiter.html",next:"@styleEmbedded.text/css",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleWithCustomType:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.styleWithCustomType.$S2"}],[/>/,{token:"delimiter.html",next:"@styleEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleEmbedded:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInEmbeddedState.styleEmbedded.$S2",nextEmbedded:"@pop"}],[/<\/style/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}]],handlebarsInSimpleState:[[/\{\{\{?/,"delimiter.handlebars"],[/\}\}\}?/,{token:"delimiter.handlebars",switchTo:"@$S2.$S3"}],{include:"handlebarsRoot"}],handlebarsInEmbeddedState:[[/\{\{\{?/,"delimiter.handlebars"],[/\}\}\}?/,{token:"delimiter.handlebars",switchTo:"@$S2.$S3",nextEmbedded:"$S3"}],{include:"handlebarsRoot"}],handlebarsRoot:[[/"[^"]*"/,"string.handlebars"],[/[#/][^\s}]+/,"keyword.helper.handlebars"],[/else\b/,"keyword.helper.handlebars"],[/[\s]+/],[/[^}]/,"variable.parameter.handlebars"]]}};export{Y as conf,z as language}; diff --git a/src/main/resources/META-INF/resources/assets/handlebars-DOR9Cq-e.js b/src/main/resources/META-INF/resources/assets/handlebars-DOR9Cq-e.js deleted file mode 100644 index 32180aa77f..0000000000 --- a/src/main/resources/META-INF/resources/assets/handlebars-DOR9Cq-e.js +++ /dev/null @@ -1 +0,0 @@ -import{l as t}from"./editor-registry-CIV_g9hj.js";import"./index-BY6d8wze.js";import"./resources-R5ikMSzo.js";import"./parser-editor-DJVsdXlv.js";import"./type-SbeC_oGu.js";import"./git-compare-arrows-pI8Ehpf-.js";import"./undo-2-CF9h_dkU.js";import"./save-lzTRlOlB.js";import"./eye-Dbrf-yrM.js";import"./secret-key-picker-TXey-VQE.js";import"./use-secrets-C_oj4VYh.js";import"./eye-off-DQKzJHI5.js";import"./tool-approvals-editor-BKW-ZLXY.js";import"./timer-BX3xgSur.js";import"./arrow-right-left-Or_4oRf0.js";import"./file-output-BA4KZHPi.js";import"./shield-Ce05kery.js";import"./info-vszmN4vn.js";import"./types-BY9zm5d-.js";import"./scale-DJXpJ1ID.js";import"./gauge-D0qrGV1d.js";import"./dollar-sign-Dt9VyGPU.js";import"./handshake-d__LQWU9.js";import"./cpu-BsIZspVa.js";import"./server-CeKDVLCh.js";import"./upload-DxPMOlxt.js";import"./lock-CPVVTGkJ.js";import"./tag-DrXWC0RK.js";const e=["area","base","br","col","embed","hr","img","input","keygen","link","menuitem","meta","param","source","track","wbr"],j={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\$\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s]+)/g,comments:{blockComment:["{{!--","--}}"]},brackets:[[""],["<",">"],["{{","}}"],["{","}"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"<",close:">"},{open:'"',close:'"'},{open:"'",close:"'"}],onEnterRules:[{beforeText:new RegExp(`<(?!(?:${e.join("|")}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`,"i"),afterText:/^<\/(\w[\w\d]*)\s*>$/i,action:{indentAction:t.IndentAction.IndentOutdent}},{beforeText:new RegExp(`<(?!(?:${e.join("|")}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`,"i"),action:{indentAction:t.IndentAction.Indent}}]},W={defaultToken:"",tokenPostfix:"",tokenizer:{root:[[/\{\{!--/,"comment.block.start.handlebars","@commentBlock"],[/\{\{!/,"comment.start.handlebars","@comment"],[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.root"}],[/)/,["delimiter.html","tag.html","delimiter.html"]],[/(<)(script)/,["delimiter.html",{token:"tag.html",next:"@script"}]],[/(<)(style)/,["delimiter.html",{token:"tag.html",next:"@style"}]],[/(<)([:\w]+)/,["delimiter.html",{token:"tag.html",next:"@otherTag"}]],[/(<\/)(\w+)/,["delimiter.html",{token:"tag.html",next:"@otherTag"}]],[/]+/,"metatag.content.html"],[/>/,"metatag.html","@pop"]],comment:[[/\}\}/,"comment.end.handlebars","@pop"],[/./,"comment.content.handlebars"]],commentBlock:[[/--\}\}/,"comment.block.end.handlebars","@pop"],[/./,"comment.content.handlebars"]],commentHtml:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.comment"}],[/-->/,"comment.html","@pop"],[/[^-]+/,"comment.content.html"],[/./,"comment.content.html"]],otherTag:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.otherTag"}],[/\/?>/,"delimiter.html","@pop"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/]],script:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.script"}],[/type/,"attribute.name","@scriptAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.text/javascript",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/(<\/)(script\s*)(>)/,["delimiter.html","tag.html",{token:"delimiter.html",next:"@pop"}]]],scriptAfterType:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.scriptAfterType"}],[/=/,"delimiter","@scriptAfterTypeEquals"],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.text/javascript",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptAfterTypeEquals:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.scriptAfterTypeEquals"}],[/"([^"]*)"/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.text/javascript",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptWithCustomType:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.scriptWithCustomType.$S2"}],[/>/,{token:"delimiter.html",next:"@scriptEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptEmbedded:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInEmbeddedState.scriptEmbedded.$S2",nextEmbedded:"@pop"}],[/<\/script/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}]],style:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.style"}],[/type/,"attribute.name","@styleAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter.html",next:"@styleEmbedded.text/css",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/(<\/)(style\s*)(>)/,["delimiter.html","tag.html",{token:"delimiter.html",next:"@pop"}]]],styleAfterType:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.styleAfterType"}],[/=/,"delimiter","@styleAfterTypeEquals"],[/>/,{token:"delimiter.html",next:"@styleEmbedded.text/css",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleAfterTypeEquals:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.styleAfterTypeEquals"}],[/"([^"]*)"/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/>/,{token:"delimiter.html",next:"@styleEmbedded.text/css",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleWithCustomType:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInSimpleState.styleWithCustomType.$S2"}],[/>/,{token:"delimiter.html",next:"@styleEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleEmbedded:[[/\{\{/,{token:"@rematch",switchTo:"@handlebarsInEmbeddedState.styleEmbedded.$S2",nextEmbedded:"@pop"}],[/<\/style/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}]],handlebarsInSimpleState:[[/\{\{\{?/,"delimiter.handlebars"],[/\}\}\}?/,{token:"delimiter.handlebars",switchTo:"@$S2.$S3"}],{include:"handlebarsRoot"}],handlebarsInEmbeddedState:[[/\{\{\{?/,"delimiter.handlebars"],[/\}\}\}?/,{token:"delimiter.handlebars",switchTo:"@$S2.$S3",nextEmbedded:"$S3"}],{include:"handlebarsRoot"}],handlebarsRoot:[[/"[^"]*"/,"string.handlebars"],[/[#/][^\s}]+/,"keyword.helper.handlebars"],[/else\b/,"keyword.helper.handlebars"],[/[\s]+/],[/[^}]/,"variable.parameter.handlebars"]]}};export{j as conf,W as language}; diff --git a/src/main/resources/META-INF/resources/assets/handshake-d__LQWU9.js b/src/main/resources/META-INF/resources/assets/handshake-foe5KMFV.js similarity index 92% rename from src/main/resources/META-INF/resources/assets/handshake-d__LQWU9.js rename to src/main/resources/META-INF/resources/assets/handshake-foe5KMFV.js index 5029f35095..bfd17f2f5f 100644 --- a/src/main/resources/META-INF/resources/assets/handshake-d__LQWU9.js +++ b/src/main/resources/META-INF/resources/assets/handshake-foe5KMFV.js @@ -1,4 +1,4 @@ -import{x as a}from"./index-BY6d8wze.js";/** +import{x as a}from"./index-BnLj1hck.js";/** * @license lucide-react v0.577.0 - ISC * * This source code is licensed under the ISC license. diff --git a/src/main/resources/META-INF/resources/assets/hash-D4WlnmN6.js b/src/main/resources/META-INF/resources/assets/hash-MmAVnsbH.js similarity index 90% rename from src/main/resources/META-INF/resources/assets/hash-D4WlnmN6.js rename to src/main/resources/META-INF/resources/assets/hash-MmAVnsbH.js index a8caad1cbc..70884c8c51 100644 --- a/src/main/resources/META-INF/resources/assets/hash-D4WlnmN6.js +++ b/src/main/resources/META-INF/resources/assets/hash-MmAVnsbH.js @@ -1,4 +1,4 @@ -import{x as e}from"./index-BY6d8wze.js";/** +import{x as e}from"./index-BnLj1hck.js";/** * @license lucide-react v0.577.0 - ISC * * This source code is licensed under the ISC license. diff --git a/src/main/resources/META-INF/resources/assets/hi-3IwaZROy.js b/src/main/resources/META-INF/resources/assets/hi-3IwaZROy.js new file mode 100644 index 0000000000..c6de273acc --- /dev/null +++ b/src/main/resources/META-INF/resources/assets/hi-3IwaZROy.js @@ -0,0 +1 @@ +const e={title:"अनुलग्नक",empty:"इस बातचीत में कोई अनुलग्नक नहीं है।",loadError:"अनुलग्नक लोड नहीं हो सके।",deleteAll:"सभी हटाएँ",delete:"अनुलग्नक हटाएँ",download:"डाउनलोड",deleted:"अनुलग्नक हटाया गया",deletedAll:"{{count}} अनुलग्नक हटाए गए",confirmDeleteTitle:"अनुलग्नक हटाएँ?",confirmDeleteDesc:"इस फ़ाइल को स्थायी रूप से हटाता है। इसे पूर्ववत नहीं किया जा सकता।",confirmDeleteAllTitle:"सभी अनुलग्नक हटाएँ?",confirmDeleteAllDesc:"इस बातचीत की सभी फ़ाइलें स्थायी रूप से हटाता है। इसे पूर्ववत नहीं किया जा सकता।"},t={title:"EDDI Manager",description:"EDDI संवादात्मक AI प्लेटफ़ॉर्म प्रशासन डैशबोर्ड"},o={login:"लॉगिन",logout:"लॉगआउट",loading:"प्रमाणीकरण हो रहा है…",sessionExpired:"सत्र समाप्त हो गया। कृपया पुनः लॉगिन करें।",profile:"प्रोफ़ाइल",guest:"अतिथि",userMenu:"उपयोगकर्ता मेनू"},n={dashboard:"डैशबोर्ड",agents:"एजेंट",packages:"वर्कफ़्लो",conversations:"बातचीत",coordinator:"कोऑर्डिनेटर",schedules:"शेड्यूल",logs:"लॉग",orphans:"अनाथ आइटम",secrets:"सीक्रेट्स",audit:"ऑडिट लॉग",quotas:"कोटा",groups:"समूह",chat:"चैट",resources:"संसाधन",sectionManagement:"प्रबंधन",sectionDevelopment:"विकास",sectionOperations:"संचालन",mainNavigation:"मुख्य नेविगेशन",openMenu:"नेविगेशन मेनू खोलें",sectionCore:"मुख्य",sectionBuild:"बनाएं और परखें",sectionMonitor:"निगरानी",sectionAdmin:"प्रशासन",studio:"स्टूडियो",gdpr:"गोपनीयता",memories:"उपयोगकर्ता स्मृति",properties:"गुण",triggers:"ट्रिगर",capabilities:"क्षमताएं",sync:"सिंक",updates:"अपडेट",channels:"चैनल",approvals:"अनुमोदन",userConversations:"उपयोगकर्ता वार्तालाप",userData:"उपयोगकर्ता डेटा",variables:"चर",sectionExternal:"बाहरी",activeConversations:"सक्रिय बातचीत",openapi:"OpenAPI",docs:"दस्तावेज़",modeManager:"प्रबंधक",modeWorkforce:"कार्यबल",switchMode:"कार्यक्षेत्र बदलें",operator:"प्लेटफ़ॉर्म ऑपरेटर",workforce:"कार्यबल",monitoring:"वार्तालाप निगरानी",analytics:"विश्लेषण"},a={light:"लाइट",dark:"डार्क",system:"सिस्टम"},r={label:"भाषा",en:"English",de:"Deutsch",fr:"Français",es:"Español",ar:"العربية",zh:"中文",th:"ไทย",ja:"日本語",ko:"한국어",pt:"Português",hi:"हिन्दी",switchFailed:"वह भाषा लोड नहीं हो सकी। कृपया पुनः प्रयास करें।"},i={dashboard:{title:"डैशबोर्ड",subtitle:"EDDI Agents और वार्तालापों का अवलोकन",activeAgents:"सक्रिय Agents",totalWorkflows:"वर्कफ़्लो",totalResources:"संसाधन",totalConversations:"बातचीत",quickActions:"त्वरित कार्य",recentAgents:"हाल के Agents",noRecentAgents:"अभी तक कोई Agent नहीं है। अपना पहला Agent बनाएं!"},agents:{undeployPreviousVersionsHint:"इस एजेंट के सभी पुराने संस्करण भी परिवेश से हटा देता है।",undeployPreviousVersionsLabel:"इसे और सभी पिछले संस्करणों को अनडिप्लॉय करें",undeployEndConversationsHint:"इस परिनियोजन पर सभी चल रही बातचीत को तुरंत समाप्त करता है। इसे पूर्ववत नहीं किया जा सकता।",undeployEndConversationsLabel:"सभी सक्रिय बातचीत समाप्त करें",confirmUndeployDescription:"संस्करण {{version}} को {{environment}} से अनडिप्लॉय किया जाएगा।",confirmUndeploy:"एजेंट अनडिप्लॉय करें?",title:"एजेंट",subtitle:"अपने संवादात्मक AI Agents प्रबंधित करें"},packages:{title:"वर्कफ़्लो",subtitle:"Workflows और एक्सटेंशन कॉन्फ़िगर करें"},conversations:{permanentDeleteSuccess:"स्थायी रूप से हटाया गया",softDeleteSuccess:"बातचीत हटाई गई",deletePermanentAction:"स्थायी रूप से हटाएँ",deletePermanentLabel:"स्थायी रूप से हटाएँ — अनुलग्नक, मेमोरी स्नैपशॉट और अनुमोदन इतिहास भी मिटा देता है। इसे पूर्ववत नहीं किया जा सकता।",confirmDeleteSoft:"डिफ़ॉल्ट रूप से यह सॉफ्ट डिलीट है — बातचीत सूचियों से छिप जाती है लेकिन इसका डेटा सर्वर पर बना रहता है।",title:"बातचीत",subtitle:"Agent वार्तालाप देखें और प्रबंधित करें"},resources:{title:"संसाधन",subtitle:"व्यवहार नियम, शब्दकोश, आउटपुट सेट और अधिक प्रबंधित करें"},chat:{title:"चैट",subtitle:"Deploy किए गए Agents से बात करें"},channels:{title:"चैनल",subtitle:"एजेंट और समूहों को Slack जैसे मैसेजिंग प्लेटफ़ॉर्म से जोड़ें"},groups:{title:"समूह",subtitle:"संरचित चर्चा और सहयोग के लिए बहु-Agent चर्चा समूह"},approvals:"लंबित अनुमोदन",approvalsSubtitle:"मानव इनपुट की प्रतीक्षा कर रही बातचीत की समीक्षा और निर्णय लें"},s={add:"जोड़ें",agent:"एजेंट",back:"वापस",cardView:"कार्ड दृश्य",clear:"चयन साफ़ करें",confirm:"पुष्टि करें",description:"विवरण",group:"समूह",id:"ID",listView:"सूची दृश्य",modified:"संशोधित",name:"नाम",new:"नया",version:"संस्करण",viewMode:"दृश्य मोड",loading:"लोड हो रहा है...",error:"कुछ गलत हो गया",retry:"पुनः प्रयास करें",save:"सहेजें",cancel:"रद्द करें",delete:"हटाएं",remove:"हटाएं",create:"बनाएं",edit:"संपादित करें",search:"खोजें...",noResults:"कोई परिणाम नहीं मिला",duplicate:"प्रतिलिपि",close:"बंद करें",skipToMain:"मुख्य सामग्री पर जाएं",opensNewTab:"नए टैब में खुलता है",moreActions:"अधिक कार्य",sortByName:"नाम से क्रमबद्ध करें",sortByVersion:"संस्करण से क्रमबद्ध करें",sortByModified:"संशोधन तिथि से क्रमबद्ध करें",apply:"लागू करें",copied:"कॉपी हो गया",copy:"कॉपी",saving:"सहेज रहे हैं…",showMore:"Show More",showLess:"Show Less",copyFailed:"क्लिपबोर्ड पर कॉपी करने में विफल",loadError:"डेटा लोड करने में विफल",actions:"क्रियाएँ",view:"देखें",refresh:"ताज़ा करें",previous:"पिछला",next:"अगला",dismiss:"खारिज करें",refreshFailed:"रीफ़्रेश नहीं हो सका — अंतिम लोड किया गया डेटा दिखाया जा रहा है।",settings:"सेटिंग्स",history:"इतिहास",copyId:"एजेंट ID कॉपी करें",off:"बंद",on:"चालू"},l={confirmDeleteDescription:"इस क्रिया को पूर्ववत नहीं किया जा सकता। एजेंट और इसका सारा डेटा स्थायी रूप से हटा दिया जाएगा।",confirmUndeploy:"एजेंट अनडिप्लॉय करें?",confirmUndeployDescription:"संस्करण {{version}} को {{environment}} से अनडिप्लॉय किया जाएगा।",createSuccess:"Agent सफलतापूर्वक बनाया गया",deleteAgent:"एजेंट हटाएं",deployError:"Deploy विफल",deploySuccess:"Agent सफलतापूर्वक Deploy हुआ",noDescription:"कोई विवरण नहीं",selectAgent:"Agent चुनें",undeployEndConversationsHint:"इस परिनियोजन पर सभी चल रही बातचीत को तुरंत समाप्त करता है। इसे पूर्ववत नहीं किया जा सकता।",undeployEndConversationsLabel:"सभी सक्रिय बातचीत समाप्त करें",undeployError:"अनडिप्लॉय विफल",undeployPreviousVersionsHint:"इस एजेंट के सभी पुराने संस्करण भी परिवेश से हटा देता है।",undeployPreviousVersionsLabel:"इसे और सभी पिछले संस्करणों को अनडिप्लॉय करें",undeploySuccess:"Agent अनडिप्लॉय हुआ",unnamed:"अनामित एजेंट",deploy:"तैनात करें",undeploy:"अनडिप्लॉय",createAgent:"Agent बनाएं",createTitle:"नया Agent बनाएं",name:"नाम",namePlaceholder:"मेरा Agent",description:"विवरण",descriptionPlaceholder:"यह Agent क्या करता है, वर्णन करें...",empty:"अभी तक कोई Agent नहीं है। अपना पहला Agent बनाएं!",confirmDelete:"क्या आप वाकई इस Agent को हटाना चाहते हैं?",count_one:"{{count}} एजेंट",count_other:"{{count}} एजेंट",export:"निर्यात",exporting:"निर्यात हो रहा है...",exportSuccess:"Agent सफलतापूर्वक निर्यात हुआ",import:"Agent आयात करें",importing:"आयात हो रहा है...",importSuccess:"Agent सफलतापूर्वक आयात हुआ",importError:"Agent आयात विफल",emptyDescription:"कुछ ही मिनटों में पूरी तरह से कॉन्फ़िगर किया गया Agent बनाने के लिए विज़ार्ड का उपयोग करें।",chat:"चैट",deployAndChat:"डिप्लॉय करें और चैट करें",openExternalChat:"नए टैब में खोलें",liveIn:"{{environment}} में सक्रिय",chatIn:"{{environment}} में चैट करें",openExternalChatIn:"{{environment}} चैट नए टैब में खोलें",deployToProduction:"प्रोडक्शन में तैनात करें",undeployFromProduction:"प्रोडक्शन से हटाएँ",deployFailedIn:"{{environment}} में तैनाती विफल"},c={a2aDescHint:"Agent Card में दिखाया जाता है — अन्य एजेंट को यह समझने में मदद करता है कि यह एजेंट क्या करता है",a2aDescPlaceholder:"यह एजेंट क्या करता है?",a2aDescription:"एजेंट विवरण",a2aEnable:"A2A सक्षम करें",a2aEnabled:"सक्षम",a2aEnabledDesc:"इस एजेंट को A2A प्रोटोकॉल के माध्यम से अन्य एजेंट द्वारा खोजने योग्य बनाएं। अन्य EDDI इंस्टेंस इस एजेंट को एक टूल के रूप में खोज और कॉल कर सकते हैं।",a2aEndpoints:"एंडपॉइंट",a2aNoSkills:"कोई कौशल नहीं — एक डिफ़ॉल्ट 'chat' कौशल उपयोग किया जाएगा",a2aSection:"एजेंट-टू-एजेंट (A2A)",a2aSkillPlaceholder:"उदा. translation, code-review",a2aSkills:"A2A कौशल",addAttribute:"विशेषता जोड़ें",agentCardPreview:"Agent Card पूर्वावलोकन",agentDid:"एजेंट DID",attributeKey:"कुंजी",attributeValue:"मान",attributesLabel:"विशेषताएं",attrs:"विशेषताएं",autoSnapshotEnable:"स्वचालित चेकपॉइंट सक्षम करें",capabilities:"क्षमताएं",capabilitiesDesc:"A2A एजेंट कार्ड और क्षमता रजिस्ट्री के लिए घोषित कौशल। प्रतिनिधिमंडल लक्ष्य चुनते समय अन्य एजेंट इन्हें खोजते हैं।",capabilityPlaceholder:"कौशल का नाम खोजें या टाइप करें...",comingSoon:"जल्द आ रहा है",defaultVisibility:"डिफ़ॉल्ट दृश्यता",dreamConsolidation:"स्वप्न समेकन",dreamDesc:"पृष्ठभूमि LLM जॉब जो विरोधाभासों को हल करती है, पुरानी प्रविष्टियों को हटाती है, और वैकल्पिक रूप से बातचीत का सारांश बनाती है।",enableMemoryTools:"मेमोरी टूल सक्षम करें",enableSwd:"सख्त लेखन अनुशासन सक्षम करें",forkingDisabledTooltip:"भविष्य के रिलीज़ में उपलब्ध",forkingEnabled:"सत्र फ़ोर्किंग",forkingNote:"सत्र फ़ोर्किंग एंडपॉइंट (POST /v6/conversations/{{id}}/fork) अभी उपलब्ध नहीं है।",guardrails:"लेखन गार्डरेल",identity:"क्रिप्टोग्राफ़िक पहचान",keyExpired:"समाप्त",keyVersion:"कुंजी v{{version}}",legacyKey:"लीगेसी कुंजी (v0)",maxCheckpoints:"अधिकतम चेकपॉइंट",maxCheckpointsHint:"प्रति बातचीत",maxEntriesPerUser:"प्रति उपयोगकर्ता अधिकतम",maxForks:"अधिकतम फ़ोर्क",maxForksHint:"प्रति बातचीत",maxRecallEntries:"अधिकतम रिकॉल",memoryPolicy:"मेमोरी नीति",memoryPolicyDesc:"सख्त लेखन अनुशासन नियंत्रित करता है कि बातचीत चरण के दौरान प्रॉपर्टी अपडेट विफल होने पर क्या होता है। चुनें कि इंजन आंशिक रूप से कमिट किए गए डेटा को कैसे संभालता है।",onCapReached:"सीमा पहुंचने पर",onFailure:"विफलता पर रणनीति",onFailureDigest:"डाइजेस्ट — परिवर्तन रोलबैक करें, LLM को सारांश रिपोर्ट करें",onFailureExclude:"सभी बहिष्कृत करें — सभी प्रॉपर्टी अपडेट चुपचाप छोड़ दें",onFailureKeep:"सभी रखें — परिवर्तन रखें और चेतावनी लॉग करें",openWorkflow:"खोलें",outdated:"पुराना",publicKey:"सार्वजनिक कुंजी",publicKeyHint:"पहले साइनिंग पर स्वतः-जनरेट",publicKeys:"सार्वजनिक कुंजियां",recallOrder:"रिकॉल क्रम",requirePeer:"पीयर सत्यापन आवश्यक करें",requirePeerDesc:"उन एजेंट से आने वाले A2A कार्य अस्वीकार करें जो अपनी पहचान साबित नहीं कर सकते",securityFlagConfirmBtn:"फिर भी सक्षम करें",securityFlagConfirmDesc:"इस संस्करण में क्रिप्टोग्राफ़िक साइनिंग अभी उपलब्ध नहीं है। इस फ़्लैग को सक्षम करने से बैकएंड HTTP 400 के साथ सहेजना अस्वीकार करेगा। क्या आप वाकई आगे बढ़ना चाहते हैं?",securityFlagConfirmTitle:"सुरक्षा फ़्लैग सक्षम करें?",securityFlagWarning:"इस संस्करण में क्रिप्टोग्राफ़िक साइनिंग अभी उपलब्ध नहीं है। इन फ़्लैग के सक्षम होने पर बैकएंड सहेजना अस्वीकार करेगा (HTTP 400)।",securityFlags:"साइनिंग और सत्यापन",securityIdentity:"सुरक्षा और पहचान",sessionManagement:"सत्र प्रबंधन",sessionManagementDesc:"मेमोरी चेकपॉइंट जोखिम भरे ऑपरेशन से पहले बातचीत की स्थिति कैप्चर करते हैं, विफलता पर साफ़ रोलबैक सक्षम करते हैं।",signA2A:"अंतर-एजेंट (A2A) संदेशों पर हस्ताक्षर करें",signA2ADesc:"छेड़छाड़-रोधी के लिए आउटबाउंड A2A संदेशों पर क्रिप्टोग्राफ़िक रूप से हस्ताक्षर करें",signMcp:"MCP आमंत्रणों पर हस्ताक्षर करें",signMcpDesc:"सुरक्षित सर्वर सत्यापन के लिए MCP टूल कॉल में हस्ताक्षर संलग्न करें",skillAlreadyExists:"यह कौशल पहले से घोषित है",switchToLatest:"नवीनतम पर स्विच करें",toggleAttributes:"विशेषताएं टॉगल करें",triggerBeforeAction:"कार्य से पहले",triggerBeforeTool:"टूल निष्पादन से पहले",triggerOn:"ट्रिगर पर",updateToLatest:"नवीनतम संस्करण में अपडेट करें",userMemory:"उपयोगकर्ता स्मृति",userMemoryDesc:"LLM टूल (remember/recall/forget) के साथ स्थायी प्रति-उपयोगकर्ता स्मृति। इस टॉगल की परवाह किए बिना बुनियादी longTerm प्रॉपर्टी दृढ़ता हमेशा काम करती है।",viewingOldVersion:"आप संस्करण {{current}} देख रहे हैं। नवीनतम संस्करण {{latest}} है।",workflowAdded:"Workflow जोड़ा गया",workflowRemoved:"Workflow हटाया गया",workflowUpdated:"Workflow नवीनतम संस्करण में अपडेट किया गया",title:"Agent विवरण",backToAgents:"Agents पर वापस जाएं",packages:"वर्कफ़्लो",noWorkflows:"अभी तक कोई Workflows नहीं जोड़ा गया",addWorkflow:"Workflow जोड़ें",selectWorkflow:"जोड़ने के लिए Workflow चुनें",rawConfig:"कच्चा कॉन्फ़िगरेशन",editName:"नाम संपादित करें",editDescription:"विवरण संपादित करें",clickToEdit:"संपादित करने के लिए क्लिक करें",noDescription:"कोई विवरण नहीं",duplicate:"प्रतिलिपि",duplicating:"प्रतिलिपि बनाई जा रही है...",duplicateSuccess:"Agent सफलतापूर्वक प्रतिलिपि बनाया गया",environments:"परिवेश",envProduction:"उत्पादन",envTest:"परीक्षण",savingAgent:"Agent सहेजा जा रहा है...",savedAgent:"Agent सफलतापूर्वक सहेजा गया",saveError:"Agent सहेजने में विफल",deployToEnv:"{{env}} में Deploy करें",undeployFromEnv:"{{env}} से हटाएं",openStudio:"स्टूडियो में खोलें",maxKeyLength:"अधिकतम कुंजी लंबाई",maxValueLength:"अधिकतम मान लंबाई",maxWritesPerTurn:"प्रति बारी अधिकतम लेखन",dreamSchedule:"शेड्यूल (cron)",dreamLlmProvider:"LLM प्रदाता",dreamLlmModel:"LLM मॉडल",dreamMaxCost:"प्रति रन अधिकतम लागत ($)",dreamPruneDays:"सफ़ाई के बाद (दिन)",dreamBatchSize:"बैच आकार",detectContradictions:"विरोधाभास पहचानें",summarizeInteractions:"बातचीत सारांश करें",confidenceLow:"कम",confidenceMedium:"मध्यम",confidenceHigh:"उच्च",visibilitySelf:"स्वयं",visibilityGlobal:"वैश्विक",onCapEvict:"सबसे पुराना हटाएं",onCapReject:"अस्वीकार करें",recallMostRecent:"सबसे हालिया",recallMostRelevant:"सबसे प्रासंगिक",channels:"चैनल कनेक्टर",channelsDesc:"इस एजेंट को Slack चैनलों से कनेक्ट करें। प्रत्येक चैनल कनेक्टर स्वतंत्र रूप से अपने क्रेडेंशियल्स के साथ कॉन्फ़िगर किया जाता है, मल्टी-वर्कस्पेस सेटअप का समर्थन करता है।",noChannels:"कोई चैनल कॉन्फ़िगर नहीं",noChannelsDesc:"उपयोगकर्ताओं को Slack से इस एजेंट के साथ इंटरैक्ट करने के लिए एक Slack चैनल जोड़ें।",addSlackChannel:"Slack चैनल जोड़ें",slackChannel:"Slack चैनल",removeChannel:"चैनल हटाएं",removeChannelConfirm:"इस Slack चैनल कनेक्टर को हटाएं?",removeChannelDesc:"This action will permanently disconnect this channel.",channelId:"चैनल आईडी",channelIdHint:"चैनल आईडी C से शुरू होती है जिसके बाद अपरकेस अल्फ़ान्यूमेरिक वर्ण आते हैं",botToken:"बॉट टोकन",botTokenPlaceholder:"xoxb-… या ${vault:slack-bot-token}",botTokenHint:"Slack बॉट यूज़र OAuth टोकन। सुरक्षा के लिए वॉल्ट संदर्भ का उपयोग करें।",signingSecret:"साइनिंग सीक्रेट",signingSecretPlaceholder:"हेक्स स्ट्रिंग या ${vault:slack-signing-secret}",signingSecretHint:"आपके Slack ऐप के बेसिक इन्फ़ॉर्मेशन पेज से। सुरक्षा के लिए वॉल्ट संदर्भ का उपयोग करें।",groupIdOptional:"ग्रुप आईडी (वैकल्पिक)",groupIdPlaceholder:"मल्टी-एजेंट ग्रुप कॉन्फ़िग आईडी",groupIdHint:'इस Slack चैनल से "group: प्रश्न" मल्टी-एजेंट चर्चा सक्षम करें।',slackSetupGuide:"Slack सेटअप गाइड",slackWebhookUrl:"Webhook URL",slackWebhookCopied:"Webhook URL कॉपी किया गया",slackStep1:"api.slack.com/apps पर एक Slack ऐप बनाएं और इसे अपने वर्कस्पेस में इंस्टॉल करें।",slackStep2:"बॉट टोकन (xoxb-…) और साइनिंग सीक्रेट को EDDI वॉल्ट में कॉपी करें और नीचे चैनल कॉन्फ़िगर करें।",slackStep3:"फिर अपने Slack ऐप में Event Subscriptions सक्षम करें, ऊपर Webhook URL पेस्ट करें और सब्सक्राइब करें:",slackSetupNote:"महत्वपूर्ण: Event Subscriptions सक्षम करने से पहले नीचे चैनल कॉन्फ़िगर करें — Slack एक URL सत्यापन चुनौती भेजता है जिसके लिए EDDI में साइनिंग सीक्रेट कॉन्फ़िगर होना आवश्यक है।",slackRequiredScopes:"आवश्यक बॉट टोकन स्कोप",hitlConfig:"ह्यूमन-इन-द-लूप",hitlConfigDesc:"जब यह एजेंट मानवीय स्वीकृति के लिए बातचीत रोकता है, तो ये सेटिंग्स नियंत्रित करती हैं कि कितनी देर प्रतीक्षा करनी है और समय पर निर्णय न होने पर क्या होगा।",hitlEnable:"मानवीय-स्वीकृति समय-सीमाएँ कॉन्फ़िगर करें",hitlTimeoutPolicy:"यदि समय पर निर्णय न हो",hitlApprovalTimeout:"स्वीकृति समय-सीमा (ISO-8601)",hitlTimeoutInvalid:"एक सीमित नीति के लिए धनात्मक ISO-8601 अवधि आवश्यक है, जैसे PT15M।",hitlTimeoutHint:"जैसे PT30S, PT15M, PT2H।",hitlPauseReason:"स्वीकृति का कारण (अनुमोदकों को दिखाया गया)",hitlPauseReasonPlaceholder:"उदा. हटाने के लिए प्रबंधक की स्वीकृति आवश्यक है",toolApprovalsEnable:"विशिष्ट टूल कॉल को अनुमोदन के लिए गेट करें",toolApprovalsDesc:'जब मॉडल किसी मिलान वाले टूल को आमंत्रित करे तो उसके चलने से पहले रुकें। खाली "अनुमोदन आवश्यक" सूची टूल गेटिंग को अक्षम कर देती है।',toolRequireApproval:"अनुमोदन आवश्यक (ग्लोब पैटर्न, प्रति पंक्ति एक)",toolPatternHint:"'*' एकमात्र वाइल्डकार्ड है। वैकल्पिक स्रोत उपसर्ग:",toolExempt:"छूट प्राप्त (हमेशा अनुमत, प्रति पंक्ति एक)",toolMaxPauses:"अधिकतम विराम / टर्न (1–10)",toolMaxAuto:"अधिकतम स्वतः-अनुमोदन / टर्न (0–10)",toolOnNoProgress:"बिना-प्रगति पुनः-विराम पर",toolTimeoutPolicy:"टूल-विराम टाइमआउट नीति",toolTimeoutInherit:"एजेंट से इनहेरिट करें",toolAutoApproveDemotion:"एजेंट-स्तरीय AUTO_APPROVE टूल अनुमोदनों पर लागू नहीं होता — जब तक आप ऊपर टूल-विराम टाइमआउट नीति सेट नहीं करते, टूल विराम अनिश्चित काल तक प्रतीक्षा करेंगे।",toolPauseReason:"अनुमोदक कारण ({toolNames} अनुमत)",toolPauseReasonPlaceholder:"जैसे {toolNames} के लिए अनुमोदन आवश्यक",toolPendingMessage:"विराम के दौरान अंतिम-उपयोगकर्ता संदेश ({toolNames} अनुमत)",toolPendingMessagePlaceholder:"जैसे {toolNames} को अनुमोदित करने के लिए मानव की प्रतीक्षा…",toolInGroupTurns:"समूह टर्न के भीतर, किसी सदस्य की गेटेड टूल कॉल स्वतः अस्वीकृत (REJECT) होती है।"},d={title:"Agent विज़ार्ड"},p={baseUrlHintCloud:"केवल तभी आवश्यक जब प्रॉक्सी, निजी परिनियोजन, या Azure OpenAI एंडपॉइंट का उपयोग कर रहे हों",baseUrlHintLocal:"आवश्यक — वह URL जहां आपका स्थानीय मॉडल सर्वर चल रहा है",modelHint:"अपने प्रदाता द्वारा समर्थित कोई भी मॉडल नाम टाइप करें, या सुझावों में से एक चुनें",modelPlaceholder:"उदा. {{model}} (या आपका प्रदाता जो भी मॉडल समर्थन करता है)",title:"Agent निर्माण विज़ार्ड",subtitle:"कुछ ही मिनटों में पूरी तरह कॉन्फ़िगर किया गया Agent बनाएं",backToAgents:"Agents पर वापस जाएं",next:"अगला",back:"पीछे",createOnly:"केवल बनाएं",createAndDeploy:"बनाएं और Deploy करें",typeTitle:"किस प्रकार का Agent?",typeDesc:"बनाने के लिए Agent का प्रकार चुनें",standardAgent:"मानक एजेंट",apiAgent:"एपीआई एजेंट",standardDesc:"LLM-संचालित संवादात्मक AI जिसमें टूल, Quick Replies और भावना विश्लेषण शामिल है",apiDesc:"API Agent स्वचालित रूप से बनाने के लिए OpenAPI/Swagger विनिर्देश आयात करें",infoTitle:"Agent पहचान",infoDesc:"अपने Agent को एक नाम और व्यक्तित्व दें",agentName:"Agent का नाम",namePlaceholder:"उदा: ग्राहक सहायता बॉट",systemPrompt:"सिस्टम प्रॉम्प्ट",promptPlaceholder:"आप एक सहायक AI असिस्टेंट हैं जो...",promptHint:"यह निर्देश निर्धारित करता है कि आपका Agent कैसे व्यवहार और प्रतिक्रिया करता है।",llmTitle:"LLM कॉन्फ़िगरेशन",llmDesc:"Agent को चलाने वाला AI मॉडल चुनें",provider:"प्रदाता",model:"मॉडल",apiKey:"API कुंजी",baseUrl:"बेस URL",baseUrlPlaceholder:"कस्टम endpoint URL",optional:"वैकल्पिक",apiSpecTitle:"OpenAPI विनिर्देश",apiSpecDesc:"अपने API का OpenAPI/Swagger विनिर्देश प्रदान करें",specByUrl:"यूआरएल लिंक",specByFile:"फ़ाइल",specByPaste:"चिपकाएं",fetch:"प्राप्त करें",specFetched:"विनिर्देश लोड हो गया!",specFetchError:"विनिर्देश प्राप्त करने में विफल",dropFile:"OpenAPI फ़ाइल यहां ड्रॉप करें",dropHint:"JSON या YAML प्रारूप",browse:"फ़ाइलें ब्राउज़ करें",pasteSpec:"OpenAPI/Swagger JSON या YAML यहां चिपकाएं...",specLoaded:"फ़ाइल लोड हुई: {{name}}",specReady:"विनिर्देश लोड हुआ ({{chars}} अक्षर)",apiBaseUrlLabel:"API बेस URL",apiAuthLabel:"API प्रमाणीकरण हेडर",endpointFilter:"Endpoint फ़िल्टर",endpointFilterPlaceholder:"कॉमा से अलग: GET /users, POST /orders",featuresTitle:"सुविधाएं और विकल्प",featuresDesc:"Agent की क्षमताओं को अनुकूलित करें",introMessage:"स्वागत संदेश",introMessageDesc:"वार्तालाप शुरू होने पर दिखाया जाने वाला अभिवादन",quickReplies:"त्वरित उत्तर",quickRepliesDesc:"LLM क्लिक करने योग्य उत्तर सुझाव उत्पन्न करता है",sentiment:"भावना विश्लेषण",sentimentDesc:"उपयोगकर्ता की भावना, इरादे और तात्कालिकता को रियलटाइम में ट्रैक करें",structuredOutput:"संरचित आउटपुट",structuredOutputDesc:"LLM सादे टेक्स्ट की बजाय JSON ऑब्जेक्ट से उत्तर देता है",structuredOutputInfo:"सक्षम करने पर, LLM संरचित फ़ील्ड वाले JSON ऑब्जेक्ट से उत्तर देगा। आपके सिस्टम प्रॉम्प्ट में एक JSON स्कीमा जोड़ा जाएगा और मॉडल JSON प्रतिक्रिया मोड में सेट होगा।",builtInTools:"अंतर्निहित टूल",builtInToolsDesc:"EDDI की अंतर्निहित टूल लाइब्रेरी सक्षम करें (कैलकुलेटर, दिनांक/समय, आदि)",toolsWhitelist:"श्वेतसूची (खाली = सभी)",mcpServers:"MCP सर्वर",mcpServersDesc:"बाहरी टूल के लिए Model Context Protocol सर्वर",autoDeploy:"स्वचालित परिनियोजन",autoDeployDesc:"बनाने के बाद तुरंत Agent Deploy करें",environment:"परिवेश",envProduction:"उत्पादन",envTest:"परीक्षण",reviewTitle:"समीक्षा करें और बनाएं",reviewDesc:"बनाने से पहले कॉन्फ़िगरेशन की समीक्षा करें",reviewType:"प्रकार",reviewName:"नाम",reviewPrompt:"सिस्टम प्रॉम्प्ट",reviewProvider:"प्रदाता",reviewModel:"मॉडल",reviewSpec:"OpenAPI स्पेक",reviewIntro:"स्वागत संदेश",reviewDeploy:"डिप्लॉय",success:"Agent सफलतापूर्वक बनाया गया!",agentCreated:"Agent बनाया गया!",deployed:"Deploy हो गया",endpointsParsed:"{{count}} API endpoints का विश्लेषण किया गया",viewAgent:"Agent देखें",createAnother:"एक और बनाएं",vaultKeyUsed:"यह एजेंट नीचे दी गई वॉल्ट कुंजी का उपयोग करता है। API कुंजी दोबारा चिपकाने के बजाय अपने अगले एजेंट के लिए वही कुंजी चुनें।",vaultKeyCopied:"वॉल्ट संदर्भ कॉपी किया गया",allTools:"सभी उपकरण",selectSpecific:"विशिष्ट चुनें",allToolsInfo:"सभी {{count}} अंतर्निहित उपकरण आपके एजेंट के लिए उपलब्ध होंगे। कौन से उपकरण सक्षम करने हैं, यह सीमित करने के लिए「विशिष्ट चुनें」चुनें।",availableTools:"उपलब्ध उपकरण",toolCount:"{{total}} में से {{selected}} चयनित",specTooLarge:"यह विनिर्देश यहाँ लोड करने के लिए बहुत बड़ा है",specUrlInvalid:"यह मान्य URL नहीं है",specUrlScheme:"केवल http:// और https:// URL समर्थित हैं"},u={confirmDeleteDescription:"इस क्रिया को पूर्ववत नहीं किया जा सकता। Workflow और इसका सारा डेटा स्थायी रूप से हटा दिया जाएगा।",createSuccess:"Workflow सफलतापूर्वक बनाया गया",unnamed:"अनामित Workflow",createWorkflow:"Workflow बनाएं",createTitle:"नया Workflow बनाएं",name:"नाम",namePlaceholder:"मेरा Workflow",description:"विवरण",descriptionPlaceholder:"यह Workflow क्या करता है, वर्णन करें...",noDescription:"कोई विवरण नहीं",empty:"अभी तक कोई Workflow नहीं है। अपना पहला Workflow बनाएं!",confirmDelete:"क्या आप वाकई इस Workflow को हटाना चाहते हैं?",count_one:"{{count}} वर्कफ़्लो",count_other:"{{count}} वर्कफ़्लो",emptyDescription:"Workflow आपके Agents के लिए प्रोसेसिंग पाइपलाइन को परिभाषित करते हैं।"},m={backToAgent:"एजेंट पर वापस जाएं",title:"Workflow विवरण",backToWorkflows:"Workflows पर वापस जाएं",extensions:"एक्सटेंशन",noExtensions:"इस Workflow में कोई एक्सटेंशन नहीं है",rawConfig:"कच्चा कॉन्फ़िगरेशन"},g={chooseConfig:"कॉन्फ़िग चुनें",chooseConfigHint:"एक नया कॉन्फ़िग बनाएं या मौजूदा को लिंक करें",configCreated:"कॉन्फ़िग बनाया गया — पाइपलाइन में जोड़ा गया",createNewConfig:"नया कॉन्फ़िग बनाएं",createNewConfigHint:"एक खाली कॉन्फ़िग बनाता है जिसे आप बाद में संपादित कर सकते हैं",noExistingConfigs:"कोई मौजूदा कॉन्फ़िग नहीं मिला — ऊपर एक नया बनाएं",orExisting:"या मौजूदा का उपयोग करें",updateToLatest:"नवीनतम संस्करण में अपडेट करें",title:"Workflow संपादक",pipeline:"एक्सटेंशन Pipeline",addHint:"प्रोसेसिंग Pipeline बनाने के लिए एक्सटेंशन जोड़ें",addHintDialog:"Pipeline में जोड़ने के लिए एक्सटेंशन प्रकार चुनें",reorder:"एक्सटेंशन पुनः क्रमित करें",saved:"Workflow सफलतापूर्वक सहेजा गया",saveError:"Workflow सहेजने में विफल",noTasks:"[EN] No tasks in this workflow",addTask:"[EN] Add Task"},h={confirmDeleteSoft:"डिफ़ॉल्ट रूप से यह सॉफ्ट डिलीट है — बातचीत सूचियों से छिप जाती है लेकिन इसका डेटा सर्वर पर बना रहता है।",deletePermanentLabel:"स्थायी रूप से हटाएँ — अनुलग्नक, मेमोरी स्नैपशॉट और अनुमोदन इतिहास भी मिटा देता है। इसे पूर्ववत नहीं किया जा सकता।",monitorSubtitle:"प्रति एजेंट चल रही बातचीत की निगरानी और थोक-प्रबंधन करें।",noActiveDesc:"इस एजेंट संस्करण की अभी कोई चल रही बातचीत नहीं है।",purgeDesc:"उन ENDED बातचीत को स्थायी रूप से हटाएं जिनकी अंतिम गतिविधि दिए गए दिनों की संख्या से पुरानी है।",selectAgentPromptDesc:"सक्रिय बातचीत प्रति एजेंट और संस्करण के अनुसार सूचीबद्ध हैं।",searchPlaceholder:"वार्तालाप ID से खोजें...",id:"बातचीत",agent:"एजेंट",state:"स्थिति",lastActivity:"अंतिम गतिविधि",actions:"क्रियाएँ",empty:"अभी तक कोई वार्तालाप नहीं। Agent Deploy करें और चैट शुरू करें!",confirmDelete:"क्या आप वाकई इस वार्तालाप को हटाना चाहते हैं?",count_one:"{{count}} बातचीत",count_other:"{{count}} बातचीत",emptyDescription:"एक Agent Deploy करें और Chat पेज से Conversation शुरू करें।",filterAll:"सभी",stateActive:"सक्रिय",stateInProgress:"प्रगति में",stateEnded:"समाप्त",stateInterrupted:"बाधित",permanentDeleteSuccess:"स्थायी रूप से हटाया गया",softDeleteSuccess:"बातचीत हटाई गई",monitorActive:"सक्रिय निगरानी",filterByAgent:"एजेंट के अनुसार फ़िल्टर करें",filterByVersion:"एजेंट संस्करण के अनुसार फ़िल्टर करें",allVersions:"सभी संस्करण",version:"v{{version}}",showingRange:"{{from}}–{{to}} दिखा रहे हैं",deleteConversation:"बातचीत हटाएं",steps:"चरण",perPage:"प्रति पृष्ठ",pageNumber:"पृष्ठ {{page}}",deletePermanentAction:"स्थायी रूप से हटाएं",step:"चरण",monitorTitle:"सक्रिय बातचीत",backToList:"बातचीत पर वापस",selectAgentToMonitor:"एक एजेंट चुनें",selectedCount:"{{count}} चयनित",endSelected:"चयनित समाप्त करें",selectAgentPrompt:"निगरानी के लिए एक एजेंट चुनें",noActive:"कोई सक्रिय बातचीत नहीं",selectAll:"सभी चुनें",selectOne:"{{id}} चुनें",purgeTitle:"समाप्त बातचीत साफ़ करें",olderThanDays:"इससे पुराना (दिन)",purgeAction:"साफ़ करें",confirmEndTitle:"चयनित बातचीत समाप्त करें?",confirmPurgeTitle:"समाप्त बातचीत साफ़ करें?",confirmEndDesc_one:"{{count}} बातचीत को ENDED पर सेट किया जाएगा। रुकी हुई (मानव की प्रतीक्षा) बातचीत अनुमोदन-जागरूक पथ के माध्यम से सुरक्षित रूप से समाप्त की जाती हैं।",confirmEndDesc_other:"{{count}} बातचीत को ENDED पर सेट किया जाएगा। रुकी हुई (मानव की प्रतीक्षा) बातचीत अनुमोदन-जागरूक पथ के माध्यम से सुरक्षित रूप से समाप्त की जाती हैं।",confirmPurgeDesc_one:"यह {{days}} दिन से पुरानी ENDED बातचीत को स्थायी रूप से हटा देता है, जिसमें उनकी संग्रहित मेमोरी और अनुलग्नक शामिल हैं। इसे पूर्ववत नहीं किया जा सकता।",confirmPurgeDesc_other:"यह {{days}} दिन से पुरानी ENDED बातचीत को स्थायी रूप से हटा देता है, जिसमें उनकी संग्रहित मेमोरी और अनुलग्नक शामिल हैं। इसे पूर्ववत नहीं किया जा सकता।",pausedNote_one:"चयनित बातचीत में से {{count}} मानव की प्रतीक्षा में हैं और उनका लंबित अनुमोदन रद्द कर दिया जाएगा।",pausedNote_other:"चयनित बातचीत में से {{count}} मानव की प्रतीक्षा में हैं और उनका लंबित अनुमोदन रद्द कर दिया जाएगा।",endSuccess_one:"{{count}} बातचीत समाप्त की गई",endSuccess_other:"{{count}} बातचीत समाप्त की गई",purgeSuccess_one:"{{count}} समाप्त बातचीत साफ़ की गईं",purgeSuccess_other:"{{count}} समाप्त बातचीत साफ़ की गईं"},y={backToConversations:"बातचीत पर वापस जाएं",chatLog:"चैट लॉग",noSteps:"कोई बातचीत चरण दर्ज नहीं",properties:"बातचीत गुण",rawData:"कच्चा डेटा देखें",step:"चरण",steps:"चरण",title:"बातचीत",continueChat:"चैट में जारी रखें",searchTranscript:"बातचीत में खोजें…",exportMd:"Markdown में निर्यात करें",toolSummary:"उपकरण उपयोग सारांश",totalCost:"कुल लागत",cacheHitRate:"कैश हिट दर"},v={hide:"छुपाएं",secretModeOff:"सीक्रेट मोड टॉगल करें",secretModeOn:"सीक्रेट मोड चालू",secretPlaceholder:"सीक्रेट मान दर्ज करें...",show:"दिखाएं",selectAgent:"Agent चुनें...",noAgents:"कोई Deploy किया हुआ Agent उपलब्ध नहीं है। पहले Agent Deploy करें।",placeholder:"संदेश लिखें...",send:"भेजें",newConversation:"नया वार्तालाप",endConversation:"वार्तालाप समाप्त करें",streaming:"स्ट्रीमिंग",thinking:"सोच रहा है...",usingTools:"टूल का उपयोग",connectionError:"कनेक्शन त्रुटि। कृपया पुनः प्रयास करें।",empty:"Agent चुनें और चैट शुरू करें!",history:"इतिहास",undo:"अंतिम संदेश पूर्ववत करें",redo:"संदेश पुनः करें",continueConversation:"जारी रखें",noHistory:"अभी तक कोई वार्तालाप इतिहास नहीं।",attach:"फ़ाइल संलग्न करें",attachUploading:"अपलोड हो रहा है...",attachSuccess:"फ़ाइल संलग्न",attachError:"फ़ाइल अपलोड विफल",attachLimit:"आप प्रति संदेश {{max}} फ़ाइलें तक संलग्न कर सकते हैं।",attachTooLargeToForward:"{{name}} संग्रहीत है लेकिन मॉडल को सीधे भेजने के लिए बहुत बड़ी है।",attachNotForwarded:"मॉडल को नहीं भेजा गया",dropToAttach:"संलग्न करने के लिए फ़ाइलें छोड़ें",stepFailedFallback:"यह चरण विफल रहा। सर्वर लॉग में पूरी त्रुटि है।",retry:"अंतिम चरण पुनः प्रयास करें",retrySuccess:"चरण पुनः निष्पादित",retryError:"पुनः प्रयास विफल",showActivity:"गतिविधि दिखाएं",hideActivity:"गतिविधि छुपाएं",scrollToBottom:"नीचे स्क्रॉल करें",copyMessage:"संदेश कॉपी करें",copied:"कॉपी हो गया!",activity:{processing:"प्रक्रिया हो रही है…",steps:"चरण",toolCalls:"उपकरण कॉल",toolCall:"उपकरण कॉल",toolResult:"परिणाम",error:"त्रुटि हुई",toolCallsCount_one:"{{count}} टूल कॉल",stepsCount:"{{count}} चरण",stepsCount_one:"{{count}} चरण",stepsCount_other:"{{count}} चरण",toolCallsCount_other:"{{count}} टूल कॉल",toolCallsCount:"{{count}} टूल कॉल",usingTool:"{{tool}} का उपयोग हो रहा है…"},context:{conversationId:"बातचीत ID",agentVersion:"एजेंट संस्करण",startTime:"शुरू हुआ",stepCount:"चरण",show:"बातचीत जानकारी दिखाएं",hide:"बातचीत जानकारी छुपाएं"},agentTyping:"एजेंट टाइप कर रहा है",copy:"कॉपी करें",emptyConversation:"इस वार्तालाप में अभी कोई संदेश नहीं है।",loadConversationFailed:"यह वार्तालाप लोड नहीं हो सका: {{error}}",multilineHint:"भेजने के लिए Enter · नई पंक्ति के लिए Shift+Enter",multilineHintCtrlEnter:"भेजने के लिए Ctrl+Enter · नई पंक्ति के लिए Enter",toolRefused:"अस्वीकृत"},D={backToWorkflow:"Workflow पर वापस जाएं",confirmDeleteDescription:"इस क्रिया को पूर्ववत नहीं किया जा सकता। {{type}} स्थायी रूप से हटा दिया जाएगा।",createSuccess:"{{type}} सफलतापूर्वक बनाया गया",snippetNameInvalid:"केवल लोअरकेस अक्षर (a-z), अंक (0-9), और अंडरस्कोर (_) की अनुमति है।",snippetNameRequired:"स्निपेट नाम आवश्यक है।",unnamed:"अनामित संसाधन",noDescription:"कोई विवरण नहीं",backToResources:"संसाधनों पर वापस जाएं",backToList:"{{type}} पर वापस जाएं",unknownType:"अज्ञात संसाधन प्रकार",rawConfig:"कच्चा कॉन्फ़िगरेशन",rawConfigHint:"इस संसाधन का JSON कॉन्फ़िगरेशन",create:"{{type}} बनाएं",createTitle:"{{type}} बनाएं",createDescription:"खाली {{type}} कॉन्फ़िगरेशन बनाएं। बनाने के बाद संपादित कर सकते हैं।",confirmDelete:"क्या आप वाकई इस {{type}} को हटाना चाहते हैं?",empty:"अभी तक कोई {{type}} संसाधन नहीं।",itemCount_one:"{{count}} आइटम",itemCount_other:"{{count}} आइटम",count_one:"{{count}} संसाधन",count_other:"{{count}} संसाधन",types:{rules:{name:"व्यवहार नियम",description:"वार्तालाप प्रवाह नियम और निर्णय तर्क परिभाषित करें"},apicalls:{name:"HTTP कॉल",description:"बाहरी API एकीकरण और Webhook कॉन्फ़िगर करें"},output:{name:"आउटपुट सेट",description:"प्रतिक्रिया टेम्पलेट और आउटपुट भिन्नताएं प्रबंधित करें"},dictionary:{name:"शब्दकोश",description:"शब्द और वाक्यांश पहचान पैटर्न परिभाषित करें"},llm:{name:"LLM",description:"AI मॉडल, Prompt और टूल बाइंडिंग कॉन्फ़िगर करें"},propertysetter:{name:"गुण सेटर",description:"वार्तालाप गुण सेट करें और स्लॉट भरने का प्रबंधन करें"},mcpcalls:{name:"MCP कॉल",description:"MCP सर्वर कनेक्शन और निर्धारित टूल कॉल कॉन्फ़िगर करें"},rag:{name:"ज्ञान आधार",description:"दस्तावेज़ पुनर्प्राप्ति के लिए RAG ज्ञान आधार कॉन्फ़िगर करें"},snippets:{name:"स्निपेट प्रॉम्प्ट",description:"Reusable system prompt building blocks"},parser:{name:"पार्सर",description:"NLP इनपुट पार्सिंग और शब्दकोश कॉन्फ़िगरेशन"}},emptyDescription:"Workflow में उपयोग करने के लिए अपना पहला {{type}} बनाएं।",descriptionPlaceholder:"इस {{type}} कॉन्फ़िगरेशन का वर्णन करें…"},A={compare:"तुलना करें",compareVersions:"संस्करणों की तुलना करें",deployFailed:"परिनियोजन विफल",deploying:"Deploy हो रहा है…",diffHint:"जोड़ हरे रंग में, हटाना लाल रंग में दिखाया गया है। बायां = पुराना, दायां = नया।",discardAndLeave:"त्यागें और छोड़ें",discardMessage:"क्या आप वाकई सभी असहेजे परिवर्तन त्यागना चाहते हैं? इस क्रिया को पूर्ववत नहीं किया जा सकता।",discardTitle:"परिवर्तन त्यागें?",newerVersion:"नया",olderVersion:"पुराना",saveAndTest:"सहेजें और परखें",swapVersions:"संस्करण स्वैप करें",unsavedMessage:"आपके पास असहेजे परिवर्तन हैं जो खो जाएंगे। क्या आप वाकई जारी रखना चाहते हैं?",unsavedTitle:"असहेजे परिवर्तन",formTab:"फ़ॉर्म",jsonTab:"JSON",save:"सहेजें",discard:"त्यागें",saving:"सहेजा जा रहा है...",saved:"सफलतापूर्वक सहेजा गया",saveError:"सहेजने में विफल",dirty:"असहेजे परिवर्तन",version:"संस्करण",versionPicker:"संस्करण चुनें",readOnly:"केवल पढ़ने के लिए",formPlaceholder:"विज़ुअल संपादक जल्द आ रहा है। संपादन के लिए JSON टैब का उपयोग करें।",jsonSchema:"Schema सत्यापन सक्रिय",cascadeMode:"परिवर्तन मूल Workflow और Agent तक प्रसारित होंगे",updateUsageHint:"चयनित Workflows और Agents को नए संस्करण में अपडेट करें?",updateUsage:"चयनित अपडेट करें",skipUpdate:"छोड़ें",cascading:"अपडेट हो रहा है...",cascadeSuccess:"कैस्केड अपडेट पूर्ण",invalidJson:"अमान्य JSON — ठीक करने के लिए JSON टैब पर जाएं।",cascadePartialFailure_one:"{{count}} कैस्केड अपडेट विफल हुए",cascadePartialFailure_other:"{{count}} कैस्केड अपडेट विफल हुए",usedInAgents_one:"{{count}} Agent में उपयोग किया गया",usedInAgents_other:"{{count}} Agents में उपयोग किया गया"},T={condCapabilityMatch:"capabilityMatch",condDeploymentContext:"deploymentContext",strategy_executeAll:"सभी निष्पादित करें",strategy_executeUntilFirstSuccess:"पहली सफलता तक",invalidValue:"(अमान्य)",appendActions:"कार्य जोड़ें",expressionsAsActions:"अभिव्यक्तियां कार्य के रूप में",groups:"व्यवहार समूह",addGroup:"समूह जोड़ें",groupName:"समूह का नाम",executionStrategy:"निष्पादन रणनीति",rules:"नियम",addRule:"नियम जोड़ें",ruleName:"नियम का नाम",actions:"क्रियाएँ",noActions:"कोई कार्य नहीं",addAction:"जोड़ें",actionPlaceholder:"उदा: greet, get_weather",conditions:"शर्तें",addCondition:"शर्त जोड़ें",conditionType:"शर्त प्रकार",nestedConditions:"नेस्टेड शर्तें",configKey:"कुंजी",configValue:"मान",addConfig:"कॉन्फ़िगरेशन जोड़ें",removeRule:"नियम हटाएं",removeGroup:"समूह हटाएं",removeCondition:"शर्त हटाएं",noGroups:"कोई व्यवहार समूह परिभाषित नहीं",noRules:"इस समूह में कोई नियम नहीं",noConditions:"कोई शर्तें नहीं"},f={noEndpointsFound:"स्पेक में कोई एंडपॉइंट नहीं मिला",specUrlPlaceholder:"https://api.example.com/openapi.json",targetServerUrl:"लक्ष्य सर्वर URL",targetServerUrlPlaceholder:"https://api.example.com",calls:"HTTP कॉल",addCall:"HTTP कॉल जोड़ें",callName:"कॉल का नाम",callDescription:"विवरण",descriptionPlaceholder:"LLM Agent के लिए प्राकृतिक भाषा विवरण",request:"अनुरोध",method:"विधि",path:"पथ",pathPlaceholder:"/api/endpoint",headers:"हेडर",addHeader:"Header जोड़ें",queryParams:"क्वेरी पैरामीटर",addQueryParam:"पैरामीटर जोड़ें",contentType:"सामग्री प्रकार",body:"अनुरोध बॉडी",bodyPlaceholder:"JSON बॉडी टेम्पलेट...",parameters:"पैरामीटर (LLM Agent के लिए)",paramName:"पैरामीटर का नाम",paramDescription:"विवरण",addParam:"पैरामीटर जोड़ें",options:"विकल्प",saveResponse:"प्रतिक्रिया सहेजें",responseObjectName:"प्रतिक्रिया ऑब्जेक्ट का नाम",responseHeaderObjectName:"प्रतिक्रिया Header ऑब्जेक्ट का नाम",fireAndForget:"भेजें और भूल जाएं",batchCalls:"बैच कॉल",iterationObjectName:"इटरेशन ऑब्जेक्ट का नाम",prePostInstructions:"पूर्व/पश्च निर्देश",preRequest:"अनुरोध से पहले",postResponse:"प्रतिक्रिया के बाद",removeCall:"कॉल हटाएं",noCalls:"कोई HTTP कॉल कॉन्फ़िगर नहीं",actions:"ट्रिगर कार्य",noActions:"कोई कार्य नहीं",actionPlaceholder:"उदा: get_weather",addHttpCodeValidator:"HTTP कोड फ़िल्टर जोड़ें",httpCodeFilter:"HTTP कोड फ़िल्टर",runOnCodes:"इन कोड पर चलाएं",skipOnCodes:"इन कोड पर छोड़ें",propName:"प्रॉपर्टी नाम",propValue:"मान या टेम्पलेट",overrideTitle:"मौजूदा मान को ओवरराइड करें",override:"ओवरराइड",advancedMapping:"ऑब्जेक्ट पथ मैपिंग",fromPath:"स्रोत ऑब्जेक्ट पथ",toPath:"लक्ष्य ऑब्जेक्ट पथ",convertToObject:"ऑब्जेक्ट में बदलें",runOnValidationError:"सत्यापन त्रुटि पर चलाएं",noPropertyInstructions:"कोई प्रॉपर्टी निर्देश नहीं",addPropertyInstruction:"प्रॉपर्टी निर्देश जोड़ें",pathToTargetArray:"लक्ष्य Array का पथ",iterationObjName:"पुनरावृत्ति ऑब्जेक्ट",templateFilter:"फ़िल्टर अभिव्यक्ति",filterPlaceholder:"वैकल्पिक फ़िल्टर...",outputType:"आउटपुट प्रकार",outputValue:"आउटपुट मान",noOutputInstructions:"कोई आउटपुट बिल्ड निर्देश नहीं",addOutputInstruction:"आउटपुट निर्देश जोड़ें",qrValue:"त्वरित उत्तर मान",qrExpressions:"त्वरित उत्तर अभिव्यक्तियाँ",noQrInstructions:"कोई त्वरित उत्तर बिल्ड निर्देश नहीं",addQrInstruction:"त्वरित उत्तर निर्देश जोड़ें",noRetryPolicy:"कोई पुनः प्रयास नीति नहीं",addRetryPolicy:"पुनः प्रयास नीति जोड़ें",maxRetries:"अधिकतम पुनः प्रयास",backoffDelayMs:"Backoff विलंब (ms)",retryOnHttpCodes:"HTTP कोड पर पुनः प्रयास करें",valuePathMatchers:"मान पथ मिलानकर्ता",noValuePathMatchers:"कोई मान पथ मिलानकर्ता नहीं",valuePath:"मान पथ",contains:"शामिल है",equals:"बराबर",trueIfNoMatch:"मिलान न होने पर पुनः प्रयास करें",addValuePathMatcher:"मान पथ मिलानकर्ता जोड़ें",removeRetryPolicy:"पुनः प्रयास नीति हटाएं",delayMs:"विलंब (ms)",propertyInstructions:"प्रॉपर्टी निर्देश",outputBuildInstructions:"आउटपुट बिल्ड निर्देश",qrBuildInstructions:"त्वरित उत्तर बिल्ड निर्देश",retryBackoff:"पुनः प्रयास और Backoff",discoveredEndpoints:"खोजे गए एंडपॉइंट",discoveryError:"OpenAPI विनिर्देश पार्स नहीं किया जा सका",openApiSpecUrl:"OpenAPI विनिर्देश से आयात करें",invalidUrl:"एक मान्य http:// या https:// URL दर्ज करें",discovering:"पार्स हो रहा है…",discoverEndpoints:"एंडपॉइंट खोजें",retry:"पुनः प्रयास करें",selectedCount:"चयनित",importAppend:"कॉल में जोड़ें",importReplace:"सभी कॉल बदलें",confirmReplace:"हाँ, सभी बदलें",replaceConfirmMessage:"इससे {{count}} मौजूदा कॉल बदल जाएँगी। क्या आप निश्चित हैं?"},P={continueOnErrorHint:"विफलता पर पाइपलाइन जारी रहती है; त्रुटि यहां उजागर होती है ",descriptionPlaceholder:"LLM एजेंट के लिए प्राकृतिक भाषा विवरण",governanceHint:"नियंत्रित करें कि कौन से टूल उजागर होते हैं। व्हाइटलिस्ट = केवल ये; ब्लैकलिस्ट = इन्हें बहिष्कृत करें।",pipelineHint:"नियतात्मक, क्रिया-ट्रिगर किए गए टूल कॉल (पाइपलाइन मोड)।",responseObjectName:"प्रतिक्रिया ऑब्जेक्ट का नाम",discoveredTools:"उपलब्ध टूल",whitelisted:"व्हाइटलिस्ट में",addToWhitelist:"व्हाइटलिस्ट में जोड़ें",addWhitelist:"व्हाइटलिस्ट",blacklisted:"ब्लैकलिस्ट में",addToBlacklist:"ब्लैकलिस्ट में जोड़ें",addBlacklist:"ब्लैकलिस्ट",noRetryPolicy:"कोई पुनः प्रयास नीति नहीं",addRetryPolicy:"पुनः प्रयास नीति जोड़ें",maxAttempts:"अधिकतम प्रयास",backoffDelayMs:"Backoff विलंब (ms)",backoffMultiplier:"Backoff गुणक",maxBackoffDelayMs:"अधिकतम Backoff (ms)",removeRetryPolicy:"पुनः प्रयास नीति हटाएं",callName:"कॉल नाम",removeCall:"कॉल हटाएं",description:"विवरण",toolName:"टूल नाम",parameterSchema:"पैरामीटर स्कीमा",triggerActions:"ट्रिगर कार्य",toolArguments:"टूल आर्गुमेंट",addArgument:"आर्गुमेंट जोड़ें",saveResponse:"प्रतिक्रिया सहेजें",continueOnError:"त्रुटि पर जारी रखें",retryBackoff:"पुनः प्रयास और Backoff",preRequest:"अनुरोध से पहले",propertyInstructions:"प्रॉपर्टी निर्देश",postResponse:"प्रतिक्रिया के बाद",outputBuildInstructions:"आउटपुट बिल्ड निर्देश",qrBuildInstructions:"त्वरित उत्तर बिल्ड निर्देश",discoveryError:"MCP सर्वर से कनेक्ट नहीं हो सका",serverConnection:"सर्वर कनेक्शन",displayName:"प्रदर्शन नाम",serverUrl:"MCP सर्वर URL",discovering:"कनेक्ट हो रहा है…",discoverTools:"टूल खोजें",transport:"ट्रांसपोर्ट",timeoutMs:"टाइमआउट (ms)",apiKey:"API कुंजी / Vault संदर्भ",toolGovernance:"टूल गवर्नेंस",retry:"पुनः प्रयास करें",noToolsFound:"इस सर्वर पर कोई टूल नहीं मिला",whitelist:"व्हाइटलिस्ट (केवल अनुमति)",blacklist:"ब्लैकलिस्ट (बहिष्कृत)",pipelineCalls:"Pipeline कॉल",addCall:"MCP कॉल जोड़ें"},S=JSON.parse('{"addCustomInstruction":"निर्देश जोड़ें","addKnowledgeBase":"KB संदर्भ जोड़ें","addMaskingRule":"नियम जोड़ें","addToolLimit":"टूल सीमा जोड़ें","anchorFirstSteps":"पहले चरण एंकर करें","anchorFirstStepsHint":"आरंभिक टर्न हमेशा बनाए रखे जाते हैं (0 = कोई नहीं)","conversationMemory":"बातचीत मेमोरी","conversationMemoryDesc":"पुराने टर्न को धीरे-धीरे एक रोलिंग सारांश में संपीड़ित किया जाता है। LLM देखता है: [सिस्टम प्रॉम्प्ट + सारांश] + [हाल के N टर्न शब्दशः]। एक अंतर्निहित conversationRecall टूल एजेंट को मांग पर सारांशित टर्न में वापस जाने की अनुमति देता है।","counterweight":"व्यवहारिक प्रतिसंतुलन","counterweightCustom":"कस्टम निर्देश","counterweightCustomHint":"चयनित स्तर के लिए अंतर्निहित प्रीसेट का उपयोग करने के लिए खाली छोड़ें।","counterweightCustomOverride":"कस्टम निर्देश प्रीसेट स्तर टेक्स्ट को पूरी तरह से ओवरराइड करते हैं।","counterweightDesc":"सिस्टम प्रॉम्प्ट में सुरक्षा निर्देश इंजेक्ट करें। अति-आत्मविश्वास, मतिभ्रम और अनिरीक्षित क्रिया से बचाता है।","counterweightLevel":"सुरक्षा स्तर","counterweightLevelCautious":"सतर्क","counterweightLevelNormal":"सामान्य (कोई इंजेक्शन नहीं)","counterweightLevelStrict":"सख्त","counterweightPlacement":"स्थान","counterweightPlacementPrefix":"सिस्टम प्रॉम्प्ट से पहले","counterweightPlacementSuffix":"सिस्टम प्रॉम्प्ट के बाद","counterweightStrictNote":"विनाशकारी \\"एक बार में एक कदम\\" व्यवहार को रोकने के लिए शेड्यूल्ड/बैच निष्पादन के दौरान सख्त मोड को स्वचालित रूप से सतर्क में डाउनग्रेड कर दिया जाता है।","defaultMaxChars":"डिफ़ॉल्ट अधिकतम अक्षर","defaultMaxCharsHint":"(50000 पर ~12k टोकन)","enableSummary":"रोलिंग सारांश सक्षम करें","enableWorkflowRag":"वर्कफ़्लो RAG स्वतः-खोजें","excludeProps":"सारांश से प्रॉपर्टीज़ बहिष्कृत करें","excludePropsDesc":"पहले से स्थायी प्रॉपर्टीज़ के रूप में कैप्चर किए गए तथ्यों को छोड़ें — तर्क और अंतर्निहित संदर्भ पर ध्यान दें","httpCallRag":"httpCall RAG (शून्य अवसंरचना)","httpCallRagHint":"LLM कॉल से पहले एक नामित httpCall निष्पादित करें। प्रतिक्रिया संदर्भ के रूप में इंजेक्ट की जाती है — किसी वेक्टर स्टोर की आवश्यकता नहीं।","httpCallRagPlaceholder":"उदा. search_docs, query_wiki","identityMasking":"पहचान मास्किंग","identityMaskingDesc":"पूछे जाने पर LLM को अपना मॉडल नाम या प्रदाता प्रकट करने से रोकें।","identityMaskingEmptyWarning":"मास्किंग सक्षम है लेकिन इसमें कोई नियम नहीं है। मास्किंग प्रभावी होने के लिए कम से कम एक नियम जोड़ें।","identityMaskingRulePlaceholder":"उदा. कभी न बताएं कि आप एक AI भाषा मॉडल हैं","identityMaskingRules":"मास्किंग नियम","identityMaskingRulesHint":"मास्किंग प्रभावी होने के लिए सक्षम होना और कम से कम एक नियम दोनों आवश्यक हैं।","injectionStrategy":"इंजेक्शन","kbNamePlaceholder":"उदा. product-docs","knowledgeBases":"ज्ञान आधार","knowledgeBasesHint":"ज्ञान आधार को नाम से स्पष्ट रूप से संदर्भित करें। प्रत्येक नाम वर्कफ़्लो में एक RagConfiguration से मेल खाना चाहिए।","legacyRag":"लीगेसी RAG (पदावनत)","legacyRagHint":"यह कॉन्फ़िगरेशन पदावनत retrievalAugmentor प्रारूप का उपयोग करता है। ऊपर दिए गए मोड में माइग्रेट करें।","maxContextTokens":"अधिकतम संदर्भ टोकन","maxContextTokensHint":"-1 = इसके बजाय चरण गणना का उपयोग करें","maxRecallHint":"प्रति रिकॉल आमंत्रण","maxRecallTurns":"अधिकतम रिकॉल टर्न","maxSummaryTokens":"अधिकतम सारांश टोकन","noKnowledgeBases":"कोई ज्ञान आधार संदर्भित नहीं","perToolLimits":"प्रति-टूल ओवरराइड","prePostDesc":"प्रत्येक LLM अनुरोध से पहले चलने वाले प्रॉपर्टी निर्देश, और प्रत्येक प्रतिक्रिया के बाद चलने वाले आउटपुट/प्रॉपर्टी निर्देश कॉन्फ़िगर करें।","promptSafety":"प्रॉम्प्ट सुरक्षा","ragDefaults":"डिफ़ॉल्ट पुनर्प्राप्ति पैरामीटर","recentWindow":"हाल की विंडो (चरण)","recentWindowHint":"शब्दशः रखे गए टर्न","removeLegacyRag":"लीगेसी कॉन्फ़िग हटाएं","strategyPaginate":"पेजिनेट (LLM अधिक प्राप्त करता है)","strategySummarize":"सारांश (सस्ते मॉडल के माध्यम से)","strategyTruncate":"काटें (हार्ड कट)","summarizationPrompt":"कस्टम सारांश प्रॉम्प्ट (वैकल्पिक)","summarizationPromptPlaceholder":"लक्ष्य, निर्णय, तर्क और टोन को संरक्षित करने वाले डिफ़ॉल्ट संरचित प्रॉम्प्ट का उपयोग करने के लिए खाली छोड़ें।","summarizeInfoBanner":"सारांशकर्ता इस कार्य के समान प्रदाता और API कुंजी का उपयोग करता है। केवल मॉडल नाम को एक सस्ते वेरिएंट में बदला जाता है (जैसे, gpt-4o-mini)।","summarizerModel":"सारांशकर्ता मॉडल","summarizerModelHint":"(खाली होने पर काटने पर वापस चला जाता है)","summarizerModelPlaceholder":"उदा. gpt-4o-mini","summaryModel":"सारांश मॉडल","summaryProvider":"सारांश प्रदाता","summaryProviderHint":"सारांश के लिए एक सस्ता/तेज़ मॉडल उपयोग करें","tokenWindow":"टोकन-जागरूक संदर्भ विंडो","tokenWindowDesc":"चरण-गणना-आधारित इतिहास को टोकन-जागरूक पैकिंग से बदलें। जब maxContextTokens सेट होता है (> 0), तो इंजन बजट के भीतर जितने संभव हो उतने हाल के टर्न फिट करता है, वैकल्पिक रूप से आरंभिक टर्न को एंकर करता है।","toolResponseLimits":"टूल प्रतिक्रिया सीमाएं","toolResponseLimitsDesc":"LLM संदर्भ विंडो में पुनः-इंजेक्शन से पहले वर्बोज़ टूल आउटपुट को काटें। संदर्भ फूलने से रोकता है।","truncationStrategy":"रणनीति","workflowRagHint":"वर्कफ़्लो से सभी RAG चरणों को स्वचालित रूप से खोजता है। केवल तभी उपयोग किया जाता है जब ऊपर कोई स्पष्ट ज्ञान आधार सूचीबद्ध न हो।","tasks":"एलएलएम कार्य","addTask":"कार्य जोड़ें","noTasks":"कोई LangChain कार्य कॉन्फ़िगर नहीं","removeTask":"कार्य हटाएं","taskId":"कार्य आईडी","description":"विवरण","descriptionPlaceholder":"यह कार्य क्या करता है","triggerActions":"ट्रिगर कार्य","noActions":"कोई कार्य नहीं","actionPlaceholder":"उदा: help, chat","systemPrompt":"सिस्टम प्रॉम्प्ट","systemPromptPlaceholder":"आप एक सहायक असिस्टेंट हैं...","modelParams":"मॉडल पैरामीटर","addParam":"पैरामीटर जोड़ें","agentMode":"एजेंट मोड","enableBuiltInTools":"अंतर्निहित टूल सक्षम करें","toolWhitelist":"टूल श्वेतसूची (खाली = सभी)","enableHttpCallTools":"HTTP Call टूल स्वतः खोज","enableHttpCallToolsDesc":"Workflow से सभी httpcall एक्सटेंशन को LLM टूल के रूप में स्वचालित रूप से उजागर करें","httpCallTools":"HTTP कॉल टूल यूआरआई","httpCallToolsHint":"स्पष्ट httpcall URIs (स्वतः खोज के अतिरिक्त)","addTool":"टूल URI जोड़ें","mcpServers":"एमसीपी सर्वर","mcpServersDesc":"बाहरी MCP सर्वर जिनके टूल LLM को उपलब्ध होते हैं","addMcpServer":"MCP सर्वर जोड़ें","mcpUrlPlaceholder":"http://localhost:7070/mcp","mcpName":"नाम","mcpApiKey":"API Key / Vault संदर्भ","historyLimit":"इतिहास सीमा","historyLimitHint":"(-1 = असीमित)","budgetPerf":"बजट और प्रदर्शन","maxBudget":"अधिकतम बजट ($)","costTracking":"लागत ट्रैकिंग","toolCaching":"उपकरण कैश","rateLimiting":"अवरोधक दर","defaultRate":"डिफ़ॉल्ट दर (अनुरोध/मिनट)","prePostInstructions":"पूर्व/पश्च निर्देश","preRequest":"अनुरोध से पहले","postResponse":"प्रतिक्रिया के बाद","enableMcpCallTools":"MCP उपकरण स्वतः खोजें","enableMcpCallToolsDesc":"वर्कफ़्लो के सभी mcpcalls एक्सटेंशन को स्वतः LLM उपकरण के रूप में उपलब्ध कराएं","a2aAgents":"A2A एजेंट","a2aAgentsDesc":"दूरस्थ A2A-संगत एजेंट जिनके कौशल LLM उपकरण बन जाते हैं","addA2aAgent":"A2A एजेंट जोड़ें","a2aUrlPlaceholder":"https://remote.example.com/a2a/agents/...","a2aName":"प्रदर्शन नाम","a2aApiKey":"${vault:my-a2a-key}","a2aTimeout":"टाइमआउट (मि.से.)","a2aSkillsFilter":"कौशल फ़िल्टर (खाली = सभी)","cascade":"मॉडल कैस्केड","cascadeDesc":"Try a cheap/fast model first. If confidence is too low, automatically escalate to a more powerful (and expensive) model.","cascadeEnable":"मॉडल कैस्केड सक्षम करें","cascadeStrategy":"रणनीति","strategyCascade":"क्रमिक एस्केलेशन","strategyParallel":"समानांतर (भविष्य)","cascadeStrategyHint":"पहले सस्ते मॉडल से शुरू करें, कम विश्वास पर एस्केलेट करें","cascadeEvalStrategy":"विश्वास मूल्यांकन","cascadeEvalHint":"उत्तर पर्याप्त है या नहीं, कैसे निर्धारित करें","evalStructured":"संरचित आउटपुट (JSON)","evalHeuristic":"अनुमानी (अनिश्चितता पहचान)","evalJudge":"न्यायाधीश मॉडल (सहायक LLM)","evalNone":"कोई नहीं (हमेशा स्वीकार)","cascadeInAgent":"एजेंट मोड (उपकरण सहित) में भी कैस्केड उपयोग करें","cascadeSteps":"Cascade Steps","cascadeStepsDesc":"Order matters: first step tried first. Last step is always accepted.","cascadeModelName":"जैसे claude-sonnet-5","cascadeConfidence":"Min. Confidence (0-1)","cascadeConfidencePlaceholder":"खाली = हमेशा स्वीकार","cascadeTimeout":"टाइमआउट (मि.से.)","addCascadeStep":"कैस्केड चरण जोड़ें","cascadeReturnBest":"चरणों में सर्वोत्तम-स्कोर वाली प्रतिक्रिया लौटाएं","cascadeEvalNoneHint":"विश्वास गेटिंग अक्षम है — पहले चरण की प्रतिक्रिया हमेशा स्वीकार की जाती है।","cascadeCeilings":"सीमाएं और मूल्य निर्धारण","cascadeMaxDuration":"अधिकतम कुल अवधि (ms)","cascadeMaxCost":"प्रति रन अधिकतम लागत ($)","cascadeUnlimited":"असीमित","cascadeInputPrice":"इनपुट $ / 1M टोकन","cascadeOutputPrice":"आउटपुट $ / 1M टोकन","cascadePricingHint":"डिफ़ॉल्ट टोकन मूल्य निर्धारण लागत ट्रैकिंग और लागत सीमा को नियंत्रित करता है। अलग-अलग चरण इसे ओवरराइड कर सकते हैं।","cascadeJudgeModel":"न्यायाधीश मॉडल","cascadeJudgeModelDesc":"एक अलग (आमतौर पर सस्ता) मॉडल जो प्रत्येक प्रतिक्रिया के विश्वास का मूल्यांकन करता है।","cascadeJudgeApiKey":"न्यायाधीश API कुंजी","cascadeHeuristic":"अनुमानी ट्यूनिंग","cascadeHeuristicDesc":"हेजिंग/अस्वीकृति पहचान के लिए वैकल्पिक ओवरराइड। खाली फ़ील्ड अंतर्निहित अंग्रेज़ी डिफ़ॉल्ट का उपयोग करते हैं। गैर-अंग्रेज़ी परिनियोजन के लिए वाक्यांश सूचियों का स्थानीयकरण करें।","cascadeHeuristicDefaults":"अंतर्निहित डिफ़ॉल्ट","cascadeHeuristicPhrasePlaceholder":"एक वाक्यांश जोड़ें…","cascadeHeuristicPhrasesLow":"हेजिंग वाक्यांश (कम विश्वास)","cascadeHeuristicPhrasesRefusal":"अस्वीकृति वाक्यांश","cascadeHeuristicShortLen":"छोटी प्रतिक्रिया लंबाई","cascadeHeuristicShortScore":"छोटा स्कोर","cascadeHeuristicRefusalScore":"अस्वीकृति स्कोर","cascadeHeuristicHedgingScore":"हेजिंग स्कोर","cascadeHeuristicDefaultScore":"डिफ़ॉल्ट स्कोर","cascadeStepApiKey":"API कुंजी","cascadeStepApiKeyPlaceholder":"खाली होने पर कार्य कुंजी विरासत में लेता है","cascadeCrossProvider":"क्रॉस-प्रदाता","cascadeStepAdvanced":"उन्नत (मूल्य निर्धारण और पैरामीटर)","cascadeStepInputPrice":"इनपुट $ / 1M","cascadeStepOutputPrice":"आउटपुट $ / 1M","cascadeStepPriceInherit":"कैस्केड डिफ़ॉल्ट","cascadeStepParams":"अतिरिक्त पैरामीटर","cascadeStepAddParam":"पैरामीटर जोड़ें","cascadeIssues":{"NO_STEPS":"कैस्केड सक्षम है लेकिन इसमें कोई चरण नहीं है — चलने पर यह विफल हो जाएगा।","UNKNOWN_STRATEGY":"अज्ञात रणनीति \\"{{strategy}}\\" — कैस्केड क्रमिक रूप से चलेगा।","PARALLEL_NOT_IMPLEMENTED":"समानांतर रणनीति अभी लागू नहीं हुई है — चरण क्रमिक रूप से चलते हैं।","UNKNOWN_EVAL_STRATEGY":"अज्ञात विश्वास मूल्यांकन \\"{{strategy}}\\" — संरचित आउटपुट पर डिफ़ॉल्ट हो रहा है।","JUDGE_MODEL_MISSING":"न्यायाधीश मॉडल मूल्यांकन के लिए कोई न्यायाधीश कॉन्फ़िगर नहीं है — विश्वास अनुमानी पर वापस चला जाता है।","JUDGE_CROSS_PROVIDER_NO_APIKEY":"न्यायाधीश मॉडल एक अलग प्रदाता का उपयोग करता है लेकिन इसकी अपनी कोई API कुंजी नहीं है — यह कार्य कुंजी विरासत में लेगा।","MAX_DURATION_NONPOSITIVE":"अधिकतम कुल अवधि 0 से अधिक होनी चाहिए।","MAX_COST_NEGATIVE":"प्रति रन अधिकतम लागत ऋणात्मक नहीं हो सकती।","CASCADE_INPUT_PRICE_NEGATIVE":"कैस्केड इनपुट मूल्य ऋणात्मक नहीं हो सकता।","CASCADE_OUTPUT_PRICE_NEGATIVE":"कैस्केड आउटपुट मूल्य ऋणात्मक नहीं हो सकता।","CONVERT_TO_OBJECT_STRUCTURED":"convertToObject संरचित आउटपुट विश्वास के साथ असंगत है — कैस्केड इसके बजाय अनुमानी का उपयोग करेगा।","STEP_INPUT_PRICE_NEGATIVE":"चरण {{step}} इनपुट मूल्य ऋणात्मक नहीं हो सकता।","STEP_OUTPUT_PRICE_NEGATIVE":"चरण {{step}} आउटपुट मूल्य ऋणात्मक नहीं हो सकता।","STEP_CONFIDENCE_OUT_OF_RANGE":"चरण {{step}} विश्वास 0 और 1 के बीच होना चाहिए।","STEP_DEAD_NULL_THRESHOLD":"चरण {{step}} में कोई विश्वास सीमा नहीं है — बाद के चरण अगम्य हो जाते हैं।","STEP_TIMEOUT_NONPOSITIVE":"चरण {{step}} टाइमआउट 0 से अधिक होना चाहिए।","STEP_CROSS_PROVIDER_NO_APIKEY":"चरण {{step}} एक अलग प्रदाता का उपयोग करता है लेकिन इसकी अपनी कोई API कुंजी नहीं है — यह कार्य कुंजी विरासत में लेगा।"},"parallelExecution":"समानांतर उपकरण निष्पादन","parallelExecutionDesc":"Run independent tool calls concurrently","parallelTimeout":"टाइमआउट (मि.से.)","maxToolIterations":"अधिकतम उपकरण पुनरावृत्ति","maxToolIterationsHint":"(डिफ़ॉल्ट 10)","toolRateLimits":"प्रति-उपकरण दर सीमा","toolRateLimitsDesc":"Override default rate for specific tools","toolName":"उपकरण नाम","addToolRate":"दर सीमा जोड़ें","retryConfig":"पुनः प्रयास कॉन्फ़िगरेशन","retryDesc":"Configure automatic retries with exponential backoff.","retryMaxAttempts":"अधिकतम प्रयास","retryDelay":"प्रारंभिक विलंब (मि.से.)","retryMultiplier":"बैकऑफ़ गुणक","retryMaxDelay":"अधिकतम विलंब (मि.से.)","ragConfig":"RAG (ज्ञान पुनर्प्राप्ति)","ragDesc":"Augment LLM responses with retrieved documents.","ragHttpCall":"HTTP कॉल URI","ragEmbeddingModel":"एम्बेडिंग मॉडल","ragEmbeddingModelPlaceholder":"जैसे text-embedding-3-small","ragEmbeddingStore":"एम्बेडिंग स्टोर","ragEmbeddingStorePlaceholder":"जैसे pgvector, qdrant","ragMaxResults":"अधिकतम परिणाम","ragMinScore":"Min Similarity Score (0-1)","moveDown":"नीचे ले जाएं","moveUp":"ऊपर ले जाएं","removeStep":"चरण हटाएं","execution":"निष्पादन","budgetCosts":"बजट और लागत","preRequestDesc":"LLM निष्पादन से पहले प्रॉपर्टीज सेट या ट्रांसफॉर्म करें।","postResponseDesc":"LLM आउटपुट को प्रोसेस करें: प्रॉपर्टीज सेट करें, आउटपुट मैसेज बनाएं और क्विक रिप्लाई जनरेट करें।","postPropertyInstructions":"प्रॉपर्टी निर्देश","postOutputInstructions":"आउटपुट निर्देश","postQrInstructions":"क्विक रिप्लाई निर्देश","allSkills":"सभी कौशल","skillPlaceholder":"जैसे order-tracking","modeAgent":"एजेंट","modeChat":"चैट","perMinute":"/मिनट","allTools":"सभी उपकरण","selectSpecific":"विशिष्ट चुनें","allToolsInfo":"सभी {{count}} अंतर्निहित उपकरण LLM के लिए उपलब्ध हैं।「विशिष्ट चुनें」से उपलब्ध उपकरण सीमित करें।","availableTools":"उपलब्ध उपकरण","toolCount":"{{total}} में से {{selected}} चयनित","toolSources":"वर्कफ़्लो उपकरण स्रोत","toolSourcesInfo":"दोनों स्रोत डिफ़ॉल्ट रूप से सक्षम हैं — सभी वर्कफ़्लो HTTP कॉल और MCP कॉल स्वतः LLM उपकरण के रूप में उपलब्ध कराए जाते हैं। बहिष्कृत करने के लिए स्रोत अक्षम करें।","included":"शामिल","toolApprovals":"टूल अनुमोदन गेटिंग (प्रति-कार्य)","toolApprovalsEnable":"इस कार्य के लिए टूल अनुमोदन ओवरराइड करें","toolApprovalsDesc":"केवल इस कार्य के लिए एजेंट-स्तरीय टूल अनुमोदनों को ओवरराइड करता है — यह पूर्ण प्रतिस्थापन है, विलय नहीं।","responseValidation":"प्रतिक्रिया सत्यापन और पुनर्प्राप्ति","responseValidationDesc":"नियंत्रित करें कि इंजन किसी खाली, कटे-फटे, कंटेंट-फ़िल्टर किए गए, अस्वीकृत, या टाइम-आउट टर्न पर कैसे प्रतिक्रिया करता है। \\"फ़ॉलबैक\\" एक पूर्व-निर्धारित संदेश से बदल देता है; \\"त्रुटि\\" टर्न को विफल कर देता है; \\"चेतावनी\\" लॉग करके जारी रखता है; \\"अनदेखा\\" कुछ नहीं करता।","rvEnable":"प्रतिक्रिया सत्यापन सक्षम करें","rvDisabledInfo":"नीचे दी गई नीतियां सहेजी जाती हैं, लेकिन केवल तभी प्रभावी होती हैं जब सत्यापन सक्षम हो।","rvActionIgnore":"अनदेखा करें","rvActionWarn":"चेतावनी (लॉग करें और जारी रखें)","rvActionFallback":"फ़ॉलबैक (पूर्व-निर्धारित संदेश)","rvActionError":"त्रुटि (टर्न को विफल करें)","rvOnEmpty":"खाली प्रतिक्रिया","rvOnEmptyHint":"LLM ने कुछ नहीं लौटाया (खाली या null)","rvOnTruncation":"कटी-फटी प्रतिक्रिया","rvOnTruncationHint":"प्रतिक्रिया कट गई (finishReason=LENGTH)","rvOnContentFilter":"कंटेंट-फ़िल्टर किया गया","rvOnContentFilterHint":"प्रदाता के कंटेंट फ़िल्टर द्वारा प्रतिक्रिया अवरुद्ध की गई","rvOnRefusal":"इनकार","rvOnRefusalHint":"LLM ने उत्तर देने से इनकार किया (अनुमानी पहचान)","rvOnStreamingTimeout":"स्ट्रीमिंग टाइमआउट","rvOnStreamingTimeoutHint":"एक स्ट्रीमिंग प्रतिक्रिया पूरी होने से पहले टाइम-आउट हो गई","streamingTimeoutSeconds":"स्ट्रीमिंग टाइमआउट (सेकंड)","streamingTimeoutSecondsHint":"इंजन के डिफ़ॉल्ट (120s) को ओवरराइड करता है। केवल स्ट्रीमिंग के दौरान लागू होता है; खाली = डिफ़ॉल्ट का उपयोग करें।","taskPricing":"सामान्य-कॉल मूल्य निर्धारण","taskPricingDesc":"लागत ट्रैकिंग और समूह लागत सीमा के लिए इस कार्य की सामान्य (गैर-कैस्केड) मॉडल कॉलों की कीमत तय करता है। बिना मूल्य (खाली) $0 का योगदान देता है।"}'),k={labelPlaceholder:"लिंक लेबल...",pathPlaceholder:"लिंक पथ...",altPlaceholder:"वैकल्पिक टेक्स्ट...",uriPlaceholder:"छवि URL...",language:"भाषा",langPlaceholder:"उदा: en, hi",outputSets:"आउटपुट सेट",addOutputSet:"आउटपुट सेट जोड़ें",noOutputSets:"कोई आउटपुट सेट कॉन्फ़िगर नहीं",actionName:"कार्य का नाम",timesOccurred:"×",removeOutput:"हटाएं",outputs:"आउटपुट",alternativeGroup:"वैकल्पिक समूह",addAlternative:"वैकल्पिक जोड़ें",addOutputGroup:"आउटपुट समूह जोड़ें",textPlaceholder:"आउटपुट पाठ...",urlPlaceholder:"URL…",delayMs:"विलंब (मिलीसेकंड)",quickReplies:"त्वरित उत्तर",noQuickReplies:"कोई Quick Replies नहीं",addQuickReply:"Quick Reply जोड़ें",qrValue:"बटन पाठ",qrExpressions:"अभिव्यक्ति",default:"डिफ़ॉल्ट",invalidJson:"अमान्य JSON",buttonTypePlaceholder:"बटन प्रकार (जैसे postback)",buttonLabelPlaceholder:"लेबल...",onPressPlaceholder:'{"action":"..."}',subTypePlaceholder:"उप-प्रकार (जैसे text, email)",inputPlaceholderPlaceholder:"प्लेसहोल्डर...",inputLabelPlaceholder:"लेबल...",defaultValuePlaceholder:"डिफ़ॉल्ट मान...",minLength:"न्यूनतम लंबाई",minLengthShort:"न्यून",maxLength:"अधिकतम लंबाई",maxLengthShort:"अधिक",validationMsgPlaceholder:"सत्यापन त्रुटि संदेश...",jsonPlaceholder:'{"key":"value"}'},b={setters:"संपत्ति सेटिंग",addSetter:"Setter जोड़ें",noSetters:"कोई Property Setter कॉन्फ़िगर नहीं",removeSetter:"हटाएं",triggerActions:"ट्रिगर कार्य",noActions:"कोई कार्य नहीं",actionPlaceholder:"उदा: greet, fallback",properties:"गुण",noProperties:"कोई गुण नहीं",addProperty:"गुण जोड़ें",propName:"गुण का नाम",propValue:"मान / अभिव्यक्ति",fromPath:"स्रोत पथ",fromObjectPath:"fromObjectPath",override:"ओवरराइड",propsCount:"गुण",untitled:"(कोई कार्य नहीं)",openEditor:"एडिटर में संपादित करें",visibilityTitle:"कौन से Agent इस longTerm प्रॉपर्टी को देख सकते हैं",editValue:"मान संपादित करें",toggleGroup:"प्रॉपर्टी समूह टॉगल करें"},C={language:"भाषा",langPlaceholder:"उदा: en, hi",words:"शब्द",addWord:"शब्द जोड़ें",wordPlaceholder:"उदा: नमस्ते",phrases:"वाक्यांश",addPhrase:"वाक्यांश जोड़ें",phrasePlaceholder:"उदा: सुप्रभात",regExs:"रेगुलर एक्सप्रेशन",addRegEx:"RegEx जोड़ें",regexPlaceholder:"रेगुलर एक्सप्रेशन",expressionPlaceholder:"उदा: greeting(hello)",frequency:"आवृत्ति",none:"कुछ परिभाषित नहीं"},E={title:"पार्सर कॉन्फ़िगरेशन",configure:"कॉन्फ़िगर करें",config:"कॉन्फ़िगरेशन",appendExpressions:"अभिव्यक्तियाँ जोड़ें",includeUnused:"अप्रयुक्त अभिव्यक्तियाँ शामिल करें",includeUnknown:"अज्ञात अभिव्यक्तियाँ शामिल करें",dictionaries:"शब्दकोश",builtInDicts:"इन-बिल्ट शब्दकोश",regularDicts:"सामान्य शब्दकोश",addDict:"जोड़ें",removeDict:"शब्दकोश हटाएँ",noRegularDicts:"कोई सामान्य शब्दकोश कॉन्फ़िगर नहीं हैं",dictUri:"शब्दकोश संसाधन URI",dictUriPlaceholder:"eddi://ai.labs.dictionary/dictionarystore/dictionaries/?version=",corrections:"सुधार",distance:"दूरी",normalizers:"नॉर्मलाइज़र",removePunctuation:"विराम चिह्न हटाएँ",regexPattern:"पैटर्न",dict:{integer:"पूर्णांक शब्दकोश",decimal:"दशमलव शब्दकोश",punctuation:"विराम चिह्न शब्दकोश",email:"ईमेल शब्दकोश",time:"समय अभिव्यक्ति शब्दकोश",ordinalNumber:"क्रमसूचक संख्या शब्दकोश"},corr:{levenshtein:"लेवेनश्टाइन सुधार",phonetic:"ध्वनि सुधार",mergedTerms:"मिश्रित शब्द सुधार"},norm:{punctuation:"विराम चिह्न नॉर्मलाइज़र",specialCharacter:"विशेष अक्षर नॉर्मलाइज़र",contractedWords:"संक्षिप्त शब्द नॉर्मलाइज़र",allowedCharacter:"अनुमत अक्षर नॉर्मलाइज़र"},regularDictsHint:"आपके अपने शब्द, वाक्यांश और पैटर्न, शब्दकोश संसाधनों के रूप में संग्रहीत।",openDict:"शब्दकोश नए टैब में खोलें"},w={title:"नियमित शब्दकोश जोड़ें",searchPlaceholder:"शब्दकोश खोजें…",added:"जोड़ा गया",empty:"अभी कोई शब्दकोश नहीं",emptyDescription:"शब्दकोश पार्सर को आपके अपने शब्द, वाक्यांश और पैटर्न सिखाता है।",create:"शब्दकोश बनाएँ",createTitle:"नया शब्दकोश",createHint:"यह खाली बनाया जाता है और तुरंत इस पार्सर से जुड़ जाता है — शब्द, वाक्यांश और पैटर्न शब्दकोश संपादक में जोड़ें।",createFailed:"शब्दकोश बन गया, लेकिन उसे जोड़ा नहीं जा सका।",created:"शब्दकोश बनाया और जोड़ा गया",defaultName:"नया शब्दकोश",descriptionPlaceholder:"यह शब्दकोश पार्सर को क्या सिखाता है…",manual:"इसके बजाय URI से जोड़ें",createdUnnamed:"शब्दकोश बनाया और जोड़ा गया, लेकिन उसका नाम सहेजा नहीं जा सका — उसे शब्दकोश संपादक में बदलें।"},I={activeConversations:"सक्रिय बातचीत",eventHistory:"ईवेंट इतिहास",noActiveQueues:"कोई सक्रिय बातचीत संसाधित नहीं हो रही",payload:"पेलोड",successRate:"सफलता दर",tasksPerSec:"कार्य/से",totalPending:"लंबित",confirmDiscardDescription:"डेड-लेटर किए गए कार्य को स्थायी रूप से हटाता है। इसके बाद इसे रीप्ले नहीं किया जा सकता। इसे पूर्ववत नहीं किया जा सकता।",confirmDiscardTitle:"डेड-लेटर प्रविष्टि खारिज करें?",title:"कोऑर्डिनेटर डैशबोर्ड",subtitle:"वार्तालाप प्रसंस्करण की निगरानी करें और Dead-Letter प्रविष्टियां प्रबंधित करें",type:"Coordinator प्रकार",connection:"कनेक्शन",processed:"संसाधित कार्य",deadLettered:"डेड-लेटर",activeQueues:"सक्रिय कतारें",queued:"कतार में",deadLetterTitle:"डेड-लेटर कतार",noDeadLetters:"कोई Dead-Letter प्रविष्टियां नहीं",colId:"ID",colConversation:"बातचीत",colError:"त्रुटि",colTime:"समय",colActions:"कार्रवाई",replay:"पुनः चलाएं",discard:"त्यागें",purgeAll:"सभी हटाएं",confirmPurge:"सभी हटाएं?",yes:"हां",cancel:"रद्द करें",replaySuccess:"Dead-Letter पुनः चलाया गया",replayError:"पुनः चलाने में विफल",discardSuccess:"Dead-Letter त्याग दिया गया",discardError:"त्यागने में विफल",purgeSuccess:"सभी Dead-Letter प्रविष्टियां हटाई गईं",purgeError:"हटाने में विफल",empty:"कोई Coordinator डेटा उपलब्ध नहीं",emptyHint:"Coordinator सेवा अभी शुरू हो रही हो सकती है। डेटा स्वचालित रूप से दिखाई देगा।",lastNSnapshots:"पिछले {{count}} स्नैपशॉट"},L={expand:"विस्तारित करें",expandHint:"फ़ुलस्क्रीन (Ctrl+Shift+F)",close:"हो गया",lines:"पंक्तियां",chars:"अक्षर",fullscreenTitle:"सामग्री संपादक",fullscreenDescription:"फ़ुलस्क्रीन संपादक। बंद करने के लिए Escape दबाएं।"},R={newLogs:"नए लॉग",title:"लॉग",description:"रियलटाइम लॉग स्ट्रीम की निगरानी करें या ऐतिहासिक लॉग खोजें।",tabLive:"लाइव",tabHistory:"इतिहास",connected:"जुड़ा हुआ",disconnected:"डिस्कनेक्ट",filterAgent:"एजेंट ID…",filterConversation:"वार्तालाप ID...",filterInstance:"इंस्टेंस ID...",allLevels:"सभी स्तर",pause:"विराम",resume:"जारी रखें",clear:"साफ़ करें",search:"खोजें",waitingForLogs:"लॉग की प्रतीक्षा...",loadingRecentLogs:"हाल के लॉग लोड हो रहे हैं...",noRecentLogs:"कोई हालिया लॉग गतिविधि नहीं है।",noRecentLogsHint:"नए लॉग यहाँ दिखाई देंगे जैसे वे बैकएंड से स्ट्रीम होते हैं।",connectingStream:"स्ट्रीम से जुड़ रहा है...",noHistoryLogs:"कोई ऐतिहासिक लॉग नहीं मिला।",entryCount:"{{count}} प्रविष्टियां",showStacktrace:"Stacktrace दिखाएं ({{count}} फ्रेम)",hideStacktrace:"Stacktrace छिपाएं",allAgents:"सभी एजेंट",allConversations:"सभी बातचीत",waitingHint:"Backend से Stream होने पर Log यहाँ दिखाई देंगे।",noHistoryHint:"फ़िल्टर समायोजित करें या किसी अन्य Agent या Conversation को खोजें।",searchConversations:"ID, एजेंट, उपयोगकर्ता द्वारा खोजें…",stepsCount:"{{count}} चरण",noConversationsFound:"कोई वार्तालाप नहीं मिला",useConversationId:"ID का उपयोग करें: {{id}}",searchLogs:"लॉग खोजें…",errors:"त्रुटियाँ",warnings:"चेतावनी",infos:"जानकारी",debugs:"डीबग",filteredCount:"{{shown}} / {{total}} प्रविष्टियाँ",copyEntry:"लॉग प्रविष्टि कॉपी करें",export:"निर्यात करें",stateReady:"तैयार",stateActive:"सक्रिय",stateError:"त्रुटि",stateEnded:"समाप्त"},M={loadError:"सीक्रेट लोड नहीं हो सके",allAgents:"सभी एजेंट",allowedAgents:"अनुमत एजेंट",allowedAgentsHint:"सभी एजेंट के लिए खाली छोड़ें। एजेंट ID जोड़ने से यह ट्रैक करने में मदद मिलती है कि कौन से एजेंट इस सीक्रेट का उपयोग करते हैं।",allowedAgentsLabel:"अनुमत एजेंट (वैकल्पिक)",allowedAgentsPlaceholder:"एजेंट ID टाइप करें और Enter दबाएं (खाली = सभी एजेंट)",deleteKey:"{{key}} हटाएं",hideValue:"मान छुपाएं",newValuePlaceholder:"नया सीक्रेट मान…",rotate:"घुमाएं",rotateDesc:"नया मान दर्ज करें। मौजूदा संदर्भ अद्यतन मान पर हल होते रहेंगे।",rotateKey:"{{key}} घुमाएं",rotateSuccess:'Secret "{{key}}" घुमाया गया',rotateTitle:'"{{key}}" घुमाएं',showValue:"मान दिखाएं",title:"सीक्रेट वॉल्ट",description:"Vault में एन्क्रिप्टेड Secrets प्रबंधित करें। मान कभी उजागर नहीं होते।",tenantId:"टेनेंट ID",refresh:"Secrets लोड करें",create:"Secret जोड़ें",createTitle:"Secret जोड़ें",keyName:"कुंजी का नाम",keyNameLabel:"कुंजी का नाम",keyNamePlaceholder:"उदा: apiKey, dbPassword",valueLabel:"Secret मान",valuePlaceholder:"Secret मान दर्ज करें…",storeWarning:"मान एन्क्रिप्ट किया जाएगा। संग्रहण के बाद पुनः प्राप्त नहीं किया जा सकता।",store:"Secret संग्रहित करें",storeSuccess:'Secret "{{key}}" संग्रहित किया गया',deleteSuccess:'Secret "{{key}}" हटाया गया',created:"बनाया गया",lastAccessed:"अंतिम पहुंच",checksum:"जांच योग",actions:"कार्रवाई",confirmDeleteTitle:"Secret हटाएं",confirmDeleteMessage:'क्या आप वाकई "{{key}}" को स्थायी रूप से हटाना चाहते हैं? यह पूर्ववत नहीं किया जा सकता।',empty:"कोई Secrets नहीं मिला",emptyHint:'टेनेंट "{{tenant}}" के लिए अभी तक कोई Secret संग्रहीत नहीं है। एक बनाने के लिए "Secret जोड़ें" पर क्लिक करें।',vaultUp:"Vault ऑनलाइन",vaultDown:"Vault ऑफ़लाइन",descriptionLabel:"विवरण (वैकल्पिक)",descriptionPlaceholder:"उदाहरण: उत्पादन के लिए OpenAI API",descriptionCol:"विवरण",reference:"संदर्भ",willUseRef:"संदर्भ:",copyRef:"वॉल्ट का संदर्भ कॉपी करें",refCopied:"कॉपी किया गया: {{ref}}",lastRotated:"अंतिम बार घूमा",scopeExplanation:"सीक्रेट्स हर किरायेदारों के लिए है। इस्तेमाल करें: ${vault:keyName}।",creatingFor:'टेनेंट "{{tenant}}" में सहेज रहा है — सभी एजेंटों के लिए',vaultNotConfigured:"सीक्रेट्स विन्यास नहीं हो सका",viewDocs:"दस्तावेज़ देखें",selectAgentFirst:"पहले एक एजेंट चुनें",dangerZoneTitle:"एन्क्रिप्शन कुंजी जीवनचक्र",dangerZoneDesc:"Vault की क्रिप्टोग्राफ़िक कुंजियों के लिए परिचालन पुनर्प्राप्ति क्रियाएं। इनका उपयोग कुंजियों को घुमाने या मास्टर कुंजी बदलने के बाद पहुंच पुनर्प्राप्त करने के लिए करें। यह ऊपर किसी व्यक्तिगत Secret के मान को घुमाने से अलग है।",rotateDekTitle:"एन्क्रिप्शन कुंजी (DEK) घुमाएं",rotateDekBlurb:"सुरक्षित — कोई रीस्टार्ट नहीं। प्रत्येक टेनेंट के लिए एक नई डेटा एन्क्रिप्शन कुंजी बनाता है और इस टेनेंट के सभी Secret को फिर से एन्क्रिप्ट करता है।",rotateDekAction:"DEK घुमाएं",rotateDekConfirmTitle:"एन्क्रिप्शन कुंजी (DEK) घुमाएं?",rotateDekConfirm:"अभी DEK घुमाएं",rotateKekTitle:"मास्टर कुंजी (KEK) घुमाएं",rotateKekBlurb:"सभी टेनेंट DEK को एक नई मास्टर कुंजी से फिर से एन्क्रिप्ट करता है। इसके लिए EDDI_VAULT_MASTER_KEY अपडेट करना और उसके बाद रीस्टार्ट करना आवश्यक है।",rotateKekAction:"मास्टर कुंजी घुमाएं",rotateKekConfirmTitle:"मास्टर कुंजी (KEK) घुमाएं?",rotateKekConfirmDesc:"प्रत्येक टेनेंट की डेटा एन्क्रिप्शन कुंजी को एक नई मास्टर कुंजी से फिर से एन्क्रिप्ट करता है। Secret के मान स्वयं अपरिवर्तित रहते हैं।",rotateKekConfirm:"अभी मास्टर कुंजी घुमाएं",kekTlsWarning:"दोनों कुंजियां अनुरोध बॉडी में भेजी जाती हैं। इसे केवल TLS (HTTPS) कनेक्शन पर करें ताकि कुंजियां ट्रांज़िट में उजागर न हों।",kekOldKeyLabel:"वर्तमान मास्टर कुंजी",kekOldKeyPlaceholder:"वर्तमान EDDI_VAULT_MASTER_KEY",kekNewKeyLabel:"नई मास्टर कुंजी",kekNewKeyPlaceholder:"नई कुंजी — कम से कम 8 वर्ण",kekNewKeyTooShort:"नई मास्टर कुंजी कम से कम 8 वर्ण की होनी चाहिए।",kekRestartHint:"घुमाने के बाद आपको EDDI_VAULT_MASTER_KEY को नई कुंजी में अपडेट करना होगा और EDDI को रीस्टार्ट करना होगा।",kekResultInstruction:"कार्रवाई आवश्यक: पर्यावरण चर EDDI_VAULT_MASTER_KEY को नई मास्टर कुंजी पर सेट करें और EDDI को रीस्टार्ट करें। जब तक आप ऐसा नहीं करते, चल रहा इंस्टेंस अभी भी मेमोरी में पुरानी कुंजी का उपयोग करता है।",resetTenantTitle:"इस टेनेंट के लिए Vault रीसेट करें",resetTenantBlurb:"विनाशकारी अंतिम उपाय। सभी Secret और DEK को स्थायी रूप से हटा देता है ताकि Vault नए सिरे से शुरू हो सके — मास्टर कुंजी खोने या बदलने के बाद उपयोग करें।",resetTenantAction:"Vault रीसेट करें",resetTenantConfirmTitle:"इस टेनेंट के लिए Vault रीसेट करें?",resetTenantConfirm:"Vault को स्थायी रूप से रीसेट करें",resetConfirmLabel:'पुष्टि करने के लिए टेनेंट नाम "{{tenant}}" टाइप करें',tableTitle_one:'{{count}} सीक्रेट टेनेंट "{{tenant}}" में',tableTitle_other:'{{count}} सीक्रेट टेनेंट "{{tenant}}" में',rotateDekConfirmDesc_one:'यह टेनेंट "{{tenant}}" के लिए एक नई डेटा एन्क्रिप्शन कुंजी बनाता है और उसके {{count}} Secret को फिर से एन्क्रिप्ट करता है। यह सुरक्षित है और तुरंत प्रभावी होता है — किसी रीस्टार्ट की आवश्यकता नहीं है।',rotateDekConfirmDesc_other:'यह टेनेंट "{{tenant}}" के लिए एक नई डेटा एन्क्रिप्शन कुंजी बनाता है और उसके {{count}} Secret को फिर से एन्क्रिप्ट करता है। यह सुरक्षित है और तुरंत प्रभावी होता है — किसी रीस्टार्ट की आवश्यकता नहीं है।',rotateDekSuccess_one:"एन्क्रिप्शन कुंजी घुमाई गई — {{count}} Secret फिर से एन्क्रिप्ट किए गए",rotateDekSuccess_other:"एन्क्रिप्शन कुंजी घुमाई गई — {{count}} Secret फिर से एन्क्रिप्ट किए गए",kekResultTitle_one:"मास्टर कुंजी घुमाई गई — {{count}} DEK फिर से एन्क्रिप्ट किए गए",kekResultTitle_other:"मास्टर कुंजी घुमाई गई — {{count}} DEK फिर से एन्क्रिप्ट किए गए",rotateKekSuccess_one:"मास्टर कुंजी घुमाई गई — {{count}} DEK फिर से एन्क्रिप्ट किए गए। EDDI_VAULT_MASTER_KEY अपडेट करें और रीस्टार्ट करें।",rotateKekSuccess_other:"मास्टर कुंजी घुमाई गई — {{count}} DEK फिर से एन्क्रिप्ट किए गए। EDDI_VAULT_MASTER_KEY अपडेट करें और रीस्टार्ट करें।",resetTenantConfirmDesc_one:'यह टेनेंट "{{tenant}}" के सभी {{count}} Secret और डेटा एन्क्रिप्शन कुंजी को स्थायी रूप से हटा देता है। जब मास्टर कुंजी खो गई हो या बदल गई हो और पुरानी कुंजी उपलब्ध न हो, तो इसे पुनर्प्राप्ति चरण के रूप में उपयोग करें। इसे पूर्ववत नहीं किया जा सकता।',resetTenantConfirmDesc_other:'यह टेनेंट "{{tenant}}" के सभी {{count}} Secret और डेटा एन्क्रिप्शन कुंजी को स्थायी रूप से हटा देता है। जब मास्टर कुंजी खो गई हो या बदल गई हो और पुरानी कुंजी उपलब्ध न हो, तो इसे पुनर्प्राप्ति चरण के रूप में उपयोग करें। इसे पूर्ववत नहीं किया जा सकता।',resetSecretCount_one:"{{count}} Secret स्थायी रूप से खो जाएंगे",resetSecretCount_other:"{{count}} Secret स्थायी रूप से खो जाएंगे",resetTenantSuccess_one:'"{{tenant}}" के लिए Vault रीसेट किया गया — {{count}} Secret स्थायी रूप से हटाए गए',resetTenantSuccess_other:'"{{tenant}}" के लिए Vault रीसेट किया गया — {{count}} Secret स्थायी रूप से हटाए गए'},H={title:"ऑडिट लॉग",description:"अनुपालन और डीबगिंग के लिए अपरिवर्तनीय ऑडिट लेजर ब्राउज़ करें।",byConversation:"वार्तालाप द्वारा",byAgent:"Agent द्वारा",conversationIdPlaceholder:"वार्तालाप ID दर्ज करें...",agentIdPlaceholder:"Agent ID दर्ज करें...",versionPlaceholder:"संस्करण (वैकल्पिक)",search:"खोजें",entries:"प्रविष्टियां",totalDuration:"कुल",totalCost:"कुल लागत",step:"चरण",tasks:"कार्य",input:"इनपुट",output:"आउटपुट",llmDetail:"LLM विवरण",toolCalls:"टूल कॉल",hmacIntegrity:"HMAC अखंडता सत्यापित",empty:"ऑडिट प्रविष्टियां खोजें",emptyHint:"Audit Trail ब्राउज़ करने के लिए ऊपर वार्तालाप या Agent ID दर्ज करें।",noResults:"कोई ऑडिट प्रविष्टियां नहीं मिलीं",noResultsHint:"भिन्न ID आज़माएं या जांचें कि वार्तालाप संसाधित हो चुका है।",loadMore:"और लोड करें",selectAgent:"Select an agent…",conversations:"conversations",emptyAgent:"Select an agent to view its audit trail",emptyAgentHint:"Choose a deployed agent from the dropdown above to see all its audit records.",export:"Export",autoRefreshToggle:"Toggle auto-refresh (every 10s)",autoRefreshOn:"Auto",autoRefreshOff:"Auto",integrityVerified:"All entries cryptographically signed",integrityVerifiedDesc:"{{count}} of {{total}} entries have HMAC-SHA256 signatures",integrityPass:"SIGNED",integrityPartial:"Partially signed audit trail",integrityPartialDesc:"{{count}} of {{total}} entries have HMAC signatures",integrityNone:"Unsigned audit entries",integrityNoneDesc:"Configure a vault master key to enable automatic HMAC-SHA256 signing on all future audit entries.",signed:"Signed",allSigned:"All signed",decidedBy:"द्वारा",automated:"स्वचालित"},N={cronHelp:"5-फ़ील्ड प्रारूप: मिनट घंटा माह-का-दिन माह सप्ताह-का-दिन",cronEveryMinute:"हर मिनट",cronEveryNMinutes:"हर {{n}} मिनट में",cronHourlyAt:"हर घंटे :{{minute}} पर",cronEveryNHours:"हर {{n}} घंटे :{{minute}} पर",cronAtTime:"{{time}} बजे",cronAtMinutePastEveryHour:"हर घंटे के {{minutes}} मिनट पर",cronAtMinutePastHours:"{{hours}} घंटे के {{minutes}} मिनट पर",cronOnDays:"{{days}} को",cronOnDayOfMonth:"महीने की {{days}} तारीख को",cronInMonths:"{{months}} में",cronInvalid:"अमान्य cron अभिव्यक्ति (5 फ़ील्ड अपेक्षित)",cronTooFrequent:"60-सेकंड न्यूनतम से अधिक बार निष्पादित होता है",failedEmptyHint:"डेड-लेटर किए गए निष्पादन पुनः प्रयास या खारिज करने के लिए यहां दिखाई देंगे।",failedSubtitle:"जो निष्पादन स्थायी रूप से विफल हुए। पुनः कतारबद्ध करने के लिए पुनः प्रयास करें, या पुनः चलाए बिना साफ़ करने के लिए खारिज करें।",intervalTooShort:"अंतराल कम से कम 60 सेकंड होना चाहिए",lastManualFire:"अंतिम मैनुअल निष्पादन",oneTimeHelp:"इस क्षण एक बार निष्पादित होता है, फिर पूर्ण हो जाता है। आपके स्थानीय समय में व्याख्या की जाती है।",outcomePending:"ट्रिगर किया गया — परिणाम की प्रतीक्षा",persistentConversationId:"स्थायी बातचीत ID",persistentConversationIdPlaceholder:"खाली छोड़ने पर स्वतः-जनरेट",strategyPersistent:"स्थायी (समान बातचीत पुनः उपयोग करें)",fireDeadLettered:"डेड-लेटर",fireFailed:"विफल",fireCompleted:"पूर्ण",title:"शेड्यूल",subtitle:"Agent शेड्यूल ट्रिगर प्रबंधित करें — Cron और Heartbeats",create:"शेड्यूल बनाएं",createTitle:"शेड्यूल बनाएं",createSuccess:"शेड्यूल सफलतापूर्वक बनाया गया",createError:"शेड्यूल बनाने में विफल",creating:"बनाया जा रहा है...",name:"नाम",namePlaceholder:"उदा: दैनिक स्वास्थ्य जांच",triggerType:"ट्रिगर प्रकार",cronExpression:"Cron अभिव्यक्ति",interval:"अंतराल (सेकंड)",agentId:"Agent ID",agentIdPlaceholder:"Agent ID दर्ज करें...",environment:"परिवेश",message:"संदेश",messagePlaceholder:"Agent को भेजने का संदेश",conversationStrategy:"वार्तालाप रणनीति",total:"कुल शेड्यूल",active:"सक्रिय",failedCount:"विफल / Dead-Lettered",nextFireLabel:"अगला निष्पादन",tableTitle:"सभी शेड्यूल",empty:"अभी तक कोई शेड्यूल नहीं",emptyHint:"Agent ट्रिगर स्वचालित करने के लिए शेड्यूल बनाएं।",colName:"नाम",colType:"प्रकार",colSchedule:"शेड्यूल",colAgent:"एजेंट",colStatus:"स्थिति",colNextFire:"अगला",colLastFired:"पिछला",colActions:"कार्रवाई",enable:"सक्षम करें",disable:"अक्षम करें",enabled:"शेड्यूल सक्षम किया गया",disabled:"शेड्यूल अक्षम किया गया",toggleError:"शेड्यूल टॉगल करने में विफल",fireNow:"अभी निष्पादित करें",fired:"शेड्यूल सफलतापूर्वक निष्पादित",fireError:"निष्पादन विफल",retry:"पुनः प्रयास",retrySuccess:"शेड्यूल पुनः कतारबद्ध",retryError:"पुनः प्रयास विफल",deleteSuccess:"शेड्यूल हटाया गया",deleteError:"शेड्यूल हटाने में विफल",fireHistory:"निष्पादन इतिहास",hitlTimeout:"HITL टाइमआउट",hitlTimeoutHint:"सिस्टम-प्रबंधित HITL अनुमोदन टाइमआउट — इसे यहाँ नहीं, बल्कि बातचीत के अनुमोदन के माध्यम से हल करें।",statusDisabled:"अक्षम",statusActive:"सक्रिय",statusRunning:"चल रहा है",statusExecuting:"निष्पादित हो रहा है",statusFailed:"विफल",statusDeadLettered:"Dead-Letter",typeHeartbeat:"Heartbeat",typeOneTime:"एक बार",typeCron:"Cron",noFireHistory:"अभी तक कोई निष्पादन इतिहास नहीं",logFired:"निष्पादित",logDuration:"अवधि",logResult:"परिणाम",logAttempt:"प्रयास",logCost:"लागत",logConversation:"बातचीत",dismissSuccess:"Dead-letter खारिज किया गया",dismissError:"Dead-letter खारिज करने में विफल",failedTitle:"विफल और Dead-Letter निष्पादन",failedEmpty:"कोई विफल निष्पादन नहीं",colSchedule2:"शेड्यूल",dismiss:"खारिज करें",updateSuccess:"शेड्यूल अपडेट किया गया",updateError:"शेड्यूल अपडेट करने में विफल",editTitle:"शेड्यूल संपादित करें",cronNext:"अगला",oneTimeAt:"दिनांक और समय",timeZone:"समय क्षेत्र",agentVersion:"संस्करण",agentVersionHint:"0 = नवीनतम तैनात",envProduction:"प्रोडक्शन",envTest:"परीक्षण",userId:"उपयोगकर्ता ID",userIdPlaceholder:"system:scheduler",maxCostPerFire:"प्रति निष्पादन अधिकतम लागत",unlimited:"असीमित",strategyNew:"नया (हर निष्पादन पर नई बातचीत)",saving:"सहेजा जा रहा है...",fireOutcomeFailed:"निष्पादन विफल",unknownError:"अज्ञात त्रुटि",tabSchedules:"शेड्यूल",tabFailed:"विफल / Dead-letter",cronPreset:{every15Minutes:"हर 15 मिनट",hourly:"हर घंटे (पूरे घंटे पर)",dailyMorning:"प्रतिदिन 09:00 बजे",weekdays:"कार्यदिवसों में 09:00 बजे",weeklyMonday:"साप्ताहिक (सोम 00:00)",monthly:"मासिक (1 तारीख, 00:00)"}},O={title:"मॉडल कैस्केड",escalated:"विश्वास {{c}} < {{th}}",escalatedShort:"एस्केलेट किया गया",accepted:"स्वीकृत",reason:{lowConfidence:"कम विश्वास",timeout:"टाइमआउट",error:"त्रुटि",retryableError:"पुनः प्रयास योग्य त्रुटि"}},x={pipelineError:"पाइपलाइन ट्रेस लोड करने में विफल",title:"डीबग",tabPipeline:"पाइपलाइन",tabCosts:"लागत",tabMemory:"मेमोरी",tabLogs:"लॉग्स",tabPrompt:"प्रॉम्प्ट",turn:"टर्न",latest:"नवीनतम",noPipeline:"पाइपलाइन ट्रेस देखने के लिए एक संदेश भेजें",processing:"प्रोसेस हो रहा है...",actions:"कार्रवाई",confidence:"विश्वास",duration:"अवधि",cost:"लागत",in:"इनपुट",input:"इनपुट",model:"मॉडल",out:"आउटपुट",output:"आउटपुट",tokens:"टोकन",toolCalls:"टूल"},_={error:"सर्वर से लागत डेटा लोड नहीं किया जा सका",thisTurn:"यह टर्न",conversationTotal:"कुल चर्चा",tokens:"Tokens",cost:"लागत",duration:"अवधि",model:"मॉडल",toolCalls:"टूल कॉल्स",toolUsage:"टूल उपयोग",cacheStats:"कैश",hitRate:"हिट रेट",empty:"लागत मेट्रिक्स देखने के लिए संदेश भेजें",in:"इन",out:"आउट",total:"कुल",calls:"कॉल्स",avgLatency:"औसत विलंबता",input:"इनपुट",output:"आउटपुट",tokenDistribution:"टोकन वितरण",totalCost:"कुल लागत",totalTokens:"कुल टोकन",turns:"चरण"},U={error:"मेमोरी डेटा लोड करने में विफल",title:"वार्तालाप मेमोरी",noConversation:"मेमोरी का निरीक्षण करने के लिए एक वार्तालाप प्रारंभ करें",empty:"कोई मेमोरी डेटा उपलब्ध नहीं है",properties:"गुण",step:"चरण",keys:"कुंजियाँ",input:"इनपुट",collapseAll:"सभी संक्षिप्त करें",copyKey:"कुंजी कॉपी करें",copyValue:"मान कॉपी करें",customProperties:"कस्टम गुण",expandAll:"सभी विस्तृत करें",noMatches:"कोई मिलता-जुलता डेटा नहीं मिला",search:"कुंजी या मान खोजें…",stepData:"चरण डेटा",systemProperties:"सिस्टम गुण"},F={noAgent:"लॉग देखने के लिए एक Agent चुनें",search:"खोजें...",pause:"विराम",resume:"जारी रखें",clear:"साफ़ करें",waiting:"लॉग की प्रतीक्षा की जा रही है...",connected:"जुड़ा हुआ",disconnected:"डिसकनेक्ट",logOutput:"लॉग आउटपुट",noMatch:"आपके फ़िल्टर से कोई लॉग मेल नहीं खाता"},W={error:"प्रॉम्प्ट डेटा लोड करने में विफल",noConversation:"प्रॉम्प्ट का निरीक्षण करने के लिए वार्तालाप प्रारंभ करें",noLlm:"अभी तक कोई LLM इंटरैक्शन नहीं मिला",turn:"टर्न",latest:"नवीनतम",tokens:"Tokens",model:"मॉडल",cost:"लागत",copy:"प्रॉम्प्ट कॉपी करें",copied:"कॉपी किया गया!",replay:"इस टर्न को फिर से चलाएं",toolCalls:"टूल कॉल्स",step:"चरण",roleSystem:"सिस्टम प्रॉम्प्ट",roleUser:"उपयोगकर्ता",roleAssistant:"सहायक",roleTool:"टूल परिणाम",collapse:"संक्षिप्त करें",showMore:"और दिखाएं",temperature:"तापमान"},B={preview:"पूर्वावलोकन",edit:"संपादन",switchToPreview:"हल किए गए प्रॉम्प्ट का पूर्वावलोकन",switchToEdit:"संपादन पर जाएं",refresh:"रिफ़्रेश",sampleData:"नमूना डेटा (बातचीत के बिना)",disclaimerReal:"पूर्वावलोकन वास्तविक बातचीत डेटा के साथ Qute इंजन का उपयोग करता है।",disclaimerSample:"पूर्वावलोकन नमूना डेटा के साथ Qute इंजन का उपयोग करता है। वास्तविक मानों के लिए कोई बातचीत चुनें।",resolvedPrompt:"हल किया गया प्रॉम्प्ट",copy:"कॉपी",copied:"कॉपी हो गया!",error:"टेम्पलेट हल करने में त्रुटि",loading:"टेम्पलेट हल हो रहा है…",availableVariables:"उपलब्ध चर",copyVariable:"चर संदर्भ कॉपी करने के लिए क्लिक करें",varProperties:"गुण",varMemory:"स्मृति",varContext:"संदर्भ",varSnippets:"स्निपेट",varUserInfo:"उपयोगकर्ता जानकारी",varConversationInfo:"बातचीत जानकारी",varInput:"इनपुट",varConversationLog:"बातचीत लॉग"},V={title:"एजेंट स्टूडियो",subtitle:"एक ही कार्यस्थान में अपने Agents का निर्माण, परीक्षण और डीबग करें",pipeline:"पाइपलाइन",editor:"संपादक",debug:"डीबग और चैट",selectStage:"संपादक खोलने के लिए किसी भी पाइपलाइन चरण पर क्लिक करें",openInStudio:"स्टूडियो में खोलें",loading:"Agent लोड हो रहा है...",notFound:"Agent नहीं मिला",hideChat:"चैट छिपाएं",showChat:"चैट दिखाएं",openEditor:"संपादक में खोलें",editorComingSoon:"इन-प्लेस संपादक एकीकरण जल्द आ रहा है",noPipeline:"कोई पाइपलाइन चरण नहीं",type:{parser:"पार्सर",rules:"नियम",property:"प्रॉपर्टी सेटर",apicalls:"API कॉल्स",llm:"LLM",output:"आउटपुट","output.template":"आउटपुट टेम्प्लेट",mcpcalls:"MCP कॉल्स",rag:"नॉलेज बेस",dictionary:"शब्दकोश"},landingDescription:"विज़ुअल पाइपलाइन एडिटर, डीबगर और लाइव चैट खोलने के लिए एक एजेंट चुनें",noAgents:"कोई एजेंट नहीं मिला — एजेंट पेज से एक बनाएं",chat:"चैट",backToAgent:"एजेंट पर वापस जाएं",selectStageHint:"कॉन्फ़िगरेशन इनलाइन देखने और संपादित करने के लिए पाइपलाइन में कोई एक्सटेंशन चुनें",noConfig:"इस पाइपलाइन चरण का कोई कॉन्फ़िगरेशन URI नहीं है",unsupportedType:"इस एक्सटेंशन प्रकार के लिए एडिटर उपलब्ध नहीं है"},G={general:"सामान्य",kbName:"नॉलेज बेस का नाम",kbNamePlaceholder:"उदा: product-docs, faq, internal-wiki",kbNameHint:"LLM कार्यों से इस KB को संदर्भित करने के लिए उपयोग किया जाता है",embeddingModel:"एम्बेडिंग मॉडल",provider:"प्रदाता",embeddingParams:"प्रदाता पैरामीटर",embeddingParamsHint:"मॉडल का नाम, API कुंजी (गुप्त जानकारी के लिए ${vault:...} उपयोग करें), बेस URL आदि।",vectorStore:"वेक्टर प्रणाली",storeType:"स्टोर के प्रकार",storeParams:"कनेक्शन पैरामीटर",chunking:"दस्तावेज़ चंकिंग",chunkStrategy:"रणनीति",chunkSize:"चंक आकार",chunkOverlap:"चंक ओवरलैप",overlapHint:"ओवरलैप चंक्स के बीच संदर्भ बनाए रखने में मदद करता है",chunkPreview:"पूर्वावलोकन (दस्तावेज़ कैसे विभाजित होगा)",chunkBlocks:"{{overlap}} वर्णों के ओवरलैप के साथ लगभग {{size}} वर्णों के {{count}} चंक्स",retrievalDefaults:"दस्तावेज पुनर्प्राप्ति डिफ़ॉल्ट",retrievalHint:"इन डिफ़ॉल्ट्स को LLM कॉन्फ़िगरेशन में प्रति-कार्य के आधार पर ओवरराइड किया जा सकता है।",maxResults:"अधिकतम परिणाम (top-K)",minScore:"न्यूनतम समानता स्कोर",ingestion:"दस्तावेज़ अंतर्ग्रहण",dropFiles:"फ़ाइलों को यहाँ पर ड्रैग एंड ड्रॉप करें",dropHint:"टेक्स्ट, मार्कडाउन या अन्य कोई टेक्स्ट पर आधारित फ़ाइल",browse:"ब्राउज़ करें",pasteText:"या केवल टेक्स्ट पेस्ट करें",pastePlaceholder:"दस्तावेज़ का टेक्स्ट यहाँ पेस्ट करें...",ingestText:"टेक्स्ट सुरक्षित करें",ingestionHistory:"अंतर्ग्रहण स्थिति",saveFirstIngestion:"दस्तावेज़ को प्रोसेस करने से पहले इस नॉलेज बेस को सहेजें।",addParam:"पैरामीटर जोड़ें"},K={welcome:{title:"EDDI में आपका स्वागत है",subtitle:"आपका AI Agent कमांड सेंटर",introText:"EDDI ऍप्लिकेशन संवादात्मक AI एजेंटों के निर्माण, परीक्षण और संचालन के लिए आपका कमांड सेंटर है।",capabilitiesTitle:"आप क्या कर सकते हैं",capabilitiesSubtitle:"उत्पादन-तैयार (Production) AI एजेंट बनाने के लिए आवश्यक सब कुछ",buildAgents:"एजेंट (Agents) बनाएं",buildAgentsDesc:"विज़ार्ड के साथ या शुरू से AI एजेंट बनाएं और कॉन्फ़िगर करें",designWorkflows:"वर्कफ़्लो डिज़ाइन करें",designWorkflowsDesc:"LLM चयन प्रक्रिया, नियमों और उपकरण युक्त ड्रैग-एंड-ड्रॉप बिल्डर",testRealtime:"रीयल-टाइम में परीक्षण करें",testRealtimeDesc:"स्ट्रीमिंग प्रतिक्रियाओं और अंतर्निहित डीबगिंग सुविधाओं के साथ अपने एजेंट्स से बातचीत करें",monitorOperate:"समीक्षा और संचालन",monitorOperateDesc:"वार्तालाप, ऑडिट ट्रेल्स, गुप्त कुंज़ियाँ (Secrets) और सीमाएं (Quotas) — सब एक ही स्थान पर",readyTitle:"शुरू करने के लिए तैयार हैं?",readySubtitle:"आप साइडबार में स्थित सहायता मेनू से किसी भी परिचय-यात्रा को कभी भी पुनरारंभ कर सकते हैं",startTour:"टूर प्रारंभ करें",exploreOwn:"मैं स्वयं से निरीक्षण करूँगा"},tour:{back:"वापस",next:"अगला",skip:"टूर छोड़ें",finish:"समाप्त करें",stepOf:"चरण {{current}} / {{total}}",dashboard:{title:"डैशबोर्ड टूर",step1Title:"आपका कमांड सेंटर",step1Desc:"साइडबार सब कुछ तीन क्षेत्रों में व्यवस्थित करता है: प्रबंधन, विकास और संचालन। आप हमेशा जानेंगे कि चीजें कहां ढूंढनी हैं।",step2Title:"प्लैटफॉर्म अवलोकन",step2Desc:"आपके एजेंटों, वर्कफ़्लो और वार्तालापों की लाइव गणना। सीधे उस अनुभाग पर जाने के लिए किसी भी कार्ड पर क्लिक करें।",step3Title:"त्वरित क्रियाएं",step3Desc:"सामान्य कार्यों पर सीधे जाएं। एजेंट विज़ार्ड आपका पहला एजेंट बनाने का सबसे तेज़ तरीका है — इसमें 2 मिनट से भी कम समय लगता है।",step4Title:"इसे अपना बनाएं",step4Desc:"लाइट, डार्क और सिस्टम थीम के बीच स्विच करें। EDDI प्रशासक 11 भाषाएं बोलता है — भाषा चयनकर्ता से अपनी भाषा चुनें।"},agents:{title:"एजेंट्स टूर",step1Title:"विज़ार्ड",step1Desc:"विज़ार्ड एक पूरी तरह से कॉन्फ़िगर किए गए एजेंट को बनाने में आपका मार्गदर्शन करता है — एक मॉडल चुनें, व्यक्तित्व सेट करें, उपकरण सक्षम करें और परिनियोजित (deploy) करें।",step2Title:"मैनुअल निर्माण",step2Desc:"उन्नत उपयोगकर्ताओं के लिए: एक रिक्त एजेंट बनाएं और इसे पूर्ण JSON नियंत्रण के साथ कॉन्फ़िगर करें।",step3Title:"खोजें और फ़िल्टर करें",step3Desc:"नाम से तुरंत एजेंटों को खोजें। दाईं ओर टॉगल के साथ कार्ड और सूची दृश्यों के बीच स्विच करें।",step4Title:"एजेंट सूची",step4Desc:"प्रत्येक कार्ड एजेंट का नाम, संस्करण और अंतिम संशोधित समय दिखाता है। परिनियोजन, चैट और वर्कफ़्लो नियंत्रणों के साथ विस्तृत पृष्ठ के लिए किसी भी एजेंट पर क्लिक करें।"},workflows:{title:"वर्कफ़्लो टूर",step1Title:"वर्कफ़्लो बनाएं",step1Desc:"वर्कफ़्लो पाइपलाइन - LLM कॉल, व्यवहार नियम और HTTP कॉल जैसे कार्य की एक कतार को परिभाषित करते हैं।",step2Title:"आपके वर्कफ़्लो",step2Desc:"विभिन्न वर्कफ़्लो को एक या अधिक विशिष्ट एजेंट्स से जोड़ा जा सकता है। ड्रैग-एंड-ड्रॉप संपादक खोलने के लिए क्लिक करें।",step3Title:"नज़ारे व्यवस्थित करें",step3Desc:"नाम से खोजें और कार्ड ग्रिड और क्रमबद्ध योग्य सूची दृश्यों के बीच टॉगल करें।"},chat:{title:"चैट टूर",step1Title:"एक एजेंट चुनें",step1Desc:"वार्तालाप प्रारंभ करने के लिए एक परिनियोजित (deployed) एजेंट का चयन करें। केवल वही एजेंट यहां दिखाई देते हैं जिन्हें परिनियोजित किया गया है।",step2Title:"स्ट्रीमिंग मोड",step2Desc:"रियल टाइम टोकन स्ट्रीमिंग टॉगल करें। जब सक्षम होता है, तो प्रतिक्रिया शब्द-दर-शब्द प्रकट होती है - जो विलंबता को डीबग करने के लिए उत्तम है।",step3Title:"वार्तालाप इतिहास",step3Desc:"पिछले वार्तालापों को ब्राउज़ करने और फिर से शुरू करने के लिए साइडबार खोलें।",step4Title:"चैट प्रारंभ करें",step4Desc:"एक संदेश टाइप करें और एंटर दबाएं। एजेंट आपके द्वारा कॉन्फ़िगर किए गए LLM, टूल और वर्कफ़्लो का उपयोग करके प्रतिक्रिया देगा।"},resources:{title:"संसाधन (Resources) टूर",step1Title:"एक्सटेंशन लाइब्रेरी",step1Desc:"संसाधन वर्कफ़्लो के बिल्डिंग ब्लॉक हैं। प्रत्येक प्रकार एजेंट के व्यवहार के एक अलग हिस्से को नियंत्रित करता है।",step2Title:"LLM कॉन्फ़िगरेशन",step2Desc:"परिभाषित करें कि कौन सा AI मॉडल आपके एजेंट की सिस्टम प्रांप्ट (Prompt), उपकरण, MCP सर्वर और कैस्केड सेटिंग्स को चलाता है। यह एजेंट का मस्तिष्क है।",step3Title:"नियम और API कॉल्स",step3Desc:"व्यवहार नियम बातचीत के प्रवाह को नियंत्रित करते हैं। HTTP कॉल्स बाहरी API से जुड़ते हैं। दोनों को LLM टूल के रूप में इस्तेमाल किया जा सकता है।"},conversations:{title:"वार्तालाप टूर",step1Title:"खोज",step1Desc:"ID, एजेंट, या हाल के उपयोगकर्ता संदेशों द्वारा त्वरित रूप से वार्तालाप खोजें।",step2Title:"स्थिति फ़िल्टर",step2Desc:"अवस्था के अनुसार बातचीत फ़िल्टर करें: सक्रिय, प्रगति पर, समाप्त, या त्रुटि।",step3Title:"वार्तालाप सूची",step3Desc:"सभी सत्र ब्राउज़ करें। समयरेखा खोलने और डीबग करने के लिए किसी भी वार्तालाप कार्ड पर क्लिक करें।"},groups:{title:"समूह (Groups) टूर",step1Title:"समूह बनाएं",step1Desc:"एकाधिक एजेंटों को सहयोग और बहस करने देने के लिए एक ऑर्केस्ट्रेशन समूह बनाएं।",step2Title:"समूह खोजें",step2Desc:"अपने मौजूदा बहु-एजेंट क्लस्टर के माध्यम से खोजें।",step3Title:"समूह ग्रिड",step3Desc:"अपने सहयोगी वातावरण प्रबंधित करें, उनकी नीतियां संपादित करें, या पुराने समूहों को हटा दें।"},logs:{newLogs:"नए लॉग",title:"सिस्टम लॉग्ज़ टूर",step1Title:"लाइव बनाम इतिहास",step1Desc:"सिस्टम लॉग की वास्तविक समय की धारा और ऐतिहासिक लॉग खोज के बीच स्विच करें।",step2Title:"स्ट्रीम फ़िल्टर",step2Desc:"आने वाले लाइव स्ट्रीम को एजेंट या महत्वपूर्ण लॉग स्तर द्वारा फ़िल्टर करें।",step3Title:"तैयार",step3Desc:"बाहरी विश्लेषण के लिए वर्तमान फ़िल्टर किए गए लॉग को एक टेक्स्ट फ़ाइल के रूप में डाउनलोड करें।"},secrets:{title:"गुप्त खजाना (Vault) टूर",step1Title:"गुप्त (Secret) बनाएं",step1Desc:"सुरक्षित रूप से एक नई API कुंजी, टोकन, या पासवर्ड स्टोर करें जिसका संदर्भ आपके एजेंट दे सकते हैं।",step2Title:"टेनेंट (Tenant) अलगाव",step2Desc:"विशिष्ट किरायेदार ID तक सीमित गुप्त (Secrets) दिखाने के लिए वॉल्ट (Vault) दृश्य को फ़िल्टर करें।",step3Title:"संदर्भ सिंटैक्स",step3Desc:"जानें कि बिना हार्डकोडिंग के अपने LLM कॉन्फ़िगरेशन में डायनामिक रूप से रहस्यों को कैसे इंजेक्ट किया जाए।"},audit:{title:"ऑडिट लेजर टूर",step1Title:"खोज मोड",step1Desc:"एक विशिष्ट वार्तालाप ID या एजेंट संस्करण द्वारा अपरिवर्तनीय ऑडिट लेज़र खोजें।",step2Title:"खोज निष्पादित करें",step2Desc:"सत्यापन योग्य निष्पादन इतिहास खींचने के लिए अपनी ID दर्ज करें और खोज पर क्लिक करें।",step3Title:"लेजर निर्यात (Export) करें",step3Desc:"अनुपालन और रिपोर्टिंग के लिए प्राप्त ऑडिट रिकॉर्ड को JSON में निर्यात करें।"},schedules:{title:"शेड्यूल टूर",step1Title:"शेड्यूल बनाएं",step1Desc:"एजेंट वर्कफ़्लो को स्वचालित रूप से ट्रिगर करने के लिए एक नई क्रॉन (cron) जॉब या निरंतर हार्टबीट (heartbeat) सेट अप करें।",step2Title:"स्वास्थ्य आँकड़े",step2Desc:"अपने प्लेटफॉर्म पर कुल, सक्रिय और विफल अनुसूचियों की निगरानी करें।",step3Title:"शेड्यूल प्रबंधन",step3Desc:"अपने स्वचालित ट्रिगर को मूल रूप से प्रबंधित करें: उन्हें रोकें, फिर से शुरू करें, संपादित करें, या टेस्ट-फ़ायर करें।"},quotas:{saveSuccess:"कोटा सहेजा गया",resetSuccess:"उपयोग काउंटर रीसेट किए गए",resetConfirmDesc:'टेनेंट "default" के सभी उपयोग काउंटर (बातचीत, API कॉल, मासिक लागत) तुरंत शून्य कर देता है। इसे पूर्ववत नहीं किया जा सकता।',resetConfirmTitle:"उपयोग काउंटर रीसेट करें?",title:"कोटा (Quotas) टूर",step1Title:"कॉन्फ़िगरेशन बाधाएं",step1Desc:"इस खाते (tenant) के लिए कुल एजेंटों, दैनिक बातचीत, और टोकन लागत पर कठिन सीमाएं परिभाषित करें।",step2Title:"उपयोग संबंधी विश्लेषण",step2Desc:"मॉनिटर करें कि खाते (tenant) ने आवंटित कोटे का कितना हिस्सा वास्तविक समय में खपत किया है।",step3Title:"परिवर्तन लागू करें",step3Desc:"अपनी समायोजित सीमाओं को सहेजें। प्लेटफॉर्म ट्रैफ़िक को ब्लॉक कर देगा जो इन सीमाओं का उल्लंघन करता है।"},coordinator:{title:"कॉर्डिनेटर टूर",step1Title:"लाइव कनेक्शन",step1Desc:"बैकएंड समन्वयक सिस्टम से जुड़े हार्टबीट और ईवेंट स्रोत देखें।",step2Title:"कतार (Queue) प्रसंस्करण",step2Desc:"अपने क्लस्टर पर रीयल-टाइम कार्य कतारों (queues) और सक्रिय जॉब निष्पादन की निगरानी करें।",step3Title:"मृत पत्र",step3Desc:"सिस्टम स्थिरता बनाए रखने के लिए विफल कार्यों का निरीक्षण करें और व्यवस्थित रूप से उन्हें त्यागें या पुनः प्रयास करें।"},orphans:{confirmPurgeAll:"सभी {{count}} अनाथ संसाधनों को स्थायी रूप से हटाएँ? सर्वर सभी को हटा देता है — आपका चयन लागू नहीं होता। इसे पूर्ववत नहीं किया जा सकता।",title:"अनाथ संसाधन टूर",step1Title:"स्कैन शुरू करें",step1Desc:"किसी भी एजेंट से कटे हुए ढीले कॉन्फ़िगरेशन का पता लगाने के लिए एक प्लेटफ़ॉर्म स्कैन प्राम्भ करें।",step2Title:"सॉफ्ट-डिलीटेड (Soft-Deleted) शामिल करें",step2Desc:"वैकल्पिक रूप से शुद्ध (purge) में ऐतिहासिक रूप से हटाए गए रिकॉर्ड को शामिल करने के लिए टॉगल करें।",step3Title:"समीक्षा और पुर्ज (Purge)",step3Desc:"स्कैनर की रिपोर्ट की समीक्षा करें, पुरानी वस्तुओं का चयन करें, और डेटाबेस स्थान को पुनः प्राप्त करने के लिए स्थायी रूप से साफ़ करें।"}},help:{title:"सहायता और टूर",platformTour:"प्लेटफ़ॉर्म टूर",resetAll:"सभी टूर रीसेट करें",resetConfirm:"क्या आप सभी टुर प्रगति को रीसेट करना चाहते हैं?"},offer:{message:"क्या आप नए हैं? {{page}} लें",accept:"मुझे दिखाएं",dontAsk:"फिर कभी न पूछें"}},q={status:"प्लेटफ़ॉर्म स्थिति",online:"ऑनलाइन",offline:"ऑफ़लाइन",checking:"कनेक्शन जाँच…",connected:"कनेक्टेड",disconnected:"डिस्कनेक्टेड",instance:"दृष्टांत",latency:"विलंब",lastChecked:"अंतिम जाँच",justNow:"अभी",secondsAgo:"{{count}} सेकंड पहले"},j={live:"लाइव",reconnecting:"पुनः कनेक्ट हो रहा है…"},z={title:"नया {{type}}",newAgent:"नया एजेंट",newGroup:"नया समूह",quickCreate:"त्वरित निर्माण",quickCreateTitle:"त्वरित {{type}} बनाएं",quickCreateDesc:"एक नाम और विवरण सेट करें, विवरण बाद में कॉन्फ़िगर करें।",guidedSetup:"निर्देशित सेटअप",guidedSetupDesc:"LLM प्रदाता, प्रॉम्प्ट (Prompts) और डिप्लॉयमेंट (Deployment) के साथ चरण-दर-चरण विज़ार्ड।"},J=JSON.parse('{"actionConflict":"एक अन्य ऑपरेशन अभी भी प्रगति में है, या यह चर्चा अब उस क्रिया को स्वीकार नहीं करती। कृपया पुनः प्रयास करें।","actionTimeout":"एक सदस्य एजेंट ने समय पर प्रतिक्रिया नहीं दी। कृपया पुनः प्रयास करें।","actionUnreachable":"एक सदस्य एजेंट तक नहीं पहुंचा जा सका। कृपया पुनः प्रयास करें।","addMember":"सदस्य जोड़ें","allowHtmlTooltip":"सक्षम होने पर, HTML सामग्री रेंडर करता है (सैनिटाइज़्ड)। केवल विश्वसनीय एजेंट के साथ उपयोग करें।","askQuestion":"समूह द्वारा चर्चा के लिए एक प्रश्न पूछें…","assignAgents":"प्रत्येक सदस्य भूमिका को एजेंट सौंपें।","blankDesc":"सब कुछ मैन्युअल रूप से कॉन्फ़िगर करें।","characters":"अक्षर","chooseTemplate":"एक टेम्पलेट चुनें या शुरू से आरंभ करें।","closeConfirmDescription":"बंद करने से सभी सदस्य बातचीत स्थायी रूप से समाप्त हो जाती हैं और किसी भी अस्थायी एजेंट को साफ़ कर दिया जाता है। कोई और फ़ॉलो-अप या निरंतरता संभव नहीं है। इसे पूर्ववत नहीं किया जा सकता।","composeQuestion":"प्रश्न रचें","continueButton":"जारी रखें","continueHint":"सभी चरणों को एक नए राउंड के रूप में पुनः चलाता है; प्रत्येक एजेंट पिछले राउंड की मेमोरी रखता है। निरंतरता में अनुलग्नक नहीं जोड़े जा सकते।","continuePlaceholder":"अनुवर्ती प्रश्न के साथ इस चर्चा को आगे बढ़ाएं…","continueStreamStarted":"निरंतरता शुरू हुई — लाइव स्ट्रीमिंग","count":"{{count}} समूह","createSuccess":"समूह सफलतापूर्वक बनाया गया","discussing":"एजेंट चर्चा कर रहे हैं…","enterToSend":"भेजने के लिए Enter","expandInput":"इनपुट विस्तृत करें","followupHint":"किसी एक सदस्य से सीधा फ़ॉलो-अप पूछें। एजेंट चर्चा से पूरा संदर्भ रखता है; आदान-प्रदान ट्रांसक्रिप्ट में जोड़ा जाता है।","followupPlaceholder":"इस सदस्य से एक फ़ॉलो-अप प्रश्न पूछें…","inputDisabledApproval":"स्वीकृति की प्रतीक्षा है…","inputDisabledClosed":"यह चर्चा बंद है","inputDisabledCompleted":"चर्चा पूर्ण","inputDisabledEnded":"यह चर्चा समाप्त हो चुकी है","inputDisabledInProgress":"चर्चा प्रगति पर है…","membersCount":"{{count}} सदस्य","moderator":"मॉडरेटर (संश्लेषण के लिए)","namePlaceholder":"उदा. Advisory Board","newDiscussion":"नई चर्चा","newShort":"नया","noModerator":"कोई मॉडरेटर नहीं","noResponse":"कोई प्रतिक्रिया नहीं","contentTruncated":"[सामग्री काट दी गई]","protocolMaxRetries":"अधिकतम पुनः प्रयास","protocolMaxRounds":"अधिकतम राउंड","protocolOnFailure":"विफलता पर","protocolSettings":"प्रोटोकॉल","protocolTimeout":"टाइमआउट","protocolUnavailable":"अनुपलब्ध","question":"प्रश्न","readyToDiscuss":"चर्चा के लिए तैयार","responding":"प्रतिक्रिया दे रहा है…","reviewMemberRoster":"सदस्य सूची","reviewMembers":"सदस्य","reviewModerator":"मॉडरेटर","reviewNoModerator":"कोई नहीं (स्वतः-संश्लेषण अक्षम)","reviewRounds":"अधिकतम राउंड","reviewTimeout":"एजेंट टाइमआउट","reviewUnassigned":"असाइन नहीं किया गया","reviewUnassignedHint":"बनाने से पहले एजेंट सौंपने के लिए वापस जाएं।","selectAgent":"एजेंट चुनें…","selectOrStart":"इतिहास से एक पिछली चर्चा चुनें, या नई शुरू करने के लिए नीचे एक प्रश्न टाइप करें।","shiftEnter":"नई पंक्ति","skipped":"छोड़ा गया","sortByMembers":"सदस्यों से क्रमबद्ध करें","sortByStyle":"शैली से क्रमबद्ध करें","speakingCount":"{{count}} बोल रहे हैं","startBlank":"शुरू से आरंभ करें","startDiscussion":"चर्चा करें","stateCompleted":"पूर्ण","stateCreated":"बनाया गया","stateFailed":"विफल","stateSynthesizing":"संश्लेषण जारी…","stepBasics":"मूल बातें","stepMembers":"सदस्य","stepReview":"समीक्षा","stepTemplate":"टेम्पलेट","submitShortcut":"सबमिट करने के लिए Ctrl+Enter","synthesis":"संश्लेषण","synthesizing":"मॉडरेटर संश्लेषण कर रहा है…","hitlSelectPhase":"अनुमोदन के लिए कम से कम एक चरण चुनें।","empty":"अभी तक कोई Group नहीं","emptyDescription":"Group कई Agent को संरचित चर्चाओं में सहयोग करने देते हैं।","createGroup":"Group बनाएं","unnamed":"बिना नाम का Group","count_one":"{{count}} समूह","count_other":"{{count}} समूह","confirmDelete":"इस Group को हटाएं?","confirmDeleteDesc":"Group कॉन्फ़िगरेशन स्थायी रूप से हटा दी जाएगी।","duplicateSuccess":"Group डुप्लिकेट किया गया","noDescription":"कोई विवरण नहीं","members":"सदस्य","discussionStyle":"चर्चा शैली","maxRounds":"अधिकतम राउंड","styleTaskForce":"Task Force","stateAwaitingApproval":"अनुमोदन की प्रतीक्षा","stateCancelled":"रद्द","phasePlan":"योजना","phaseExecute":"कार्यान्वयन","phaseVerify":"सत्यापन","preConfiguredTasks":"पूर्व-कॉन्फ़िगर किए गए कार्य","dynamicAgents":"डायनामिक एजेंट","dynamicCreation":"निर्माण","dynamicRecruitment":"भर्ती","dynamicDelegation":"प्रतिनिधिमंडल","lifecyclePolicy":"जीवन चक्र","allowedProviders":"प्रदाता","liveIndicator":"● LIVE","htmlToggle":"HTML","memberTypeGroup":"समूह","moderatorBadge":"⭐ मॉडरेटर","styleColumn":"शैली","membersColumn":"सदस्य","memberOverflow":"+{{count}} और","defaultLabel":"समूह","liveDiscussion":"लाइव","state":{"CREATED":"बनाया गया","IN_PROGRESS":"प्रगति में","SYNTHESIZING":"संश्लेषण जारी","COMPLETED":"पूर्ण","FAILED":"विफल","ERROR":"त्रुटि","AWAITING_APPROVAL":"अनुमोदन की प्रतीक्षा","CANCELLED":"रद्द","AWAITING_HUMAN_INPUT":"सदस्य की प्रतीक्षा","CLOSED":"बंद"},"preConfiguredTasksCount":"पूर्व-कॉन्फ़िगर किए गए कार्य ({{count}})","entryType":{"QUESTION":"प्रश्न","OPINION":"राय","CRITIQUE":"आलोचना","REVISION":"संशोधन","CHALLENGE":"आपत्ति","DEFENSE":"बचाव","ARGUMENT":"तर्क","REBUTTAL":"खंडन","SYNTHESIS":"संश्लेषण","ERROR":"त्रुटि","SKIPPED":"छोड़ा गया","PLAN":"योजना","TASK_RESULT":"कार्य परिणाम","VERIFICATION":"सत्यापन","FOLLOW_UP":"अनुवर्ती","ABSTAINED":"परहेज़ किया","DISSENT":"असहमति","CONVERGENCE":"अभिसरण","FACILITATION":"सुविधा-प्रबंधन","VOTE":"मत","PROPOSAL":"प्रस्ताव","BARGAIN":"प्रति-प्रस्ताव","HUMAN_INPUT":"मानवीय इनपुट","RETRO":"पुनरावलोकन","BID":"बोली"},"flow":{"Opinion":"राय","Discussion":"चर्चा","Synthesis":"संश्लेषण","Critique":"आलोचना","Revision":"संशोधन","Challenge":"आपत्ति","Defense":"बचाव","Independent":"स्वतंत्र","AnonymousSharing":"गुमनाम साझाकरण","Revised":"संशोधित","ProOpening":"पक्ष में आरंभ","ConOpening":"विपक्ष में आरंभ","Rebuttals":"खंडन","Judgment":"निर्णय","Plan":"योजना","Execute":"कार्यान्वयन","Verify":"सत्यापन","Synthesize":"सारांश"},"lifecycle":{"EPHEMERAL":"अस्थायी","KEEP_DEPLOYED":"तैनात रखें","UNDEPLOY_ONLY":"केवल हटाएं","AGENT_DECIDES":"एजेंट तय करता है"},"dynamicMax":"✓ (max {{count}})","dynamicMaxPerTask":"✓ (अधिकतम {{count}}/कार्य)","protocolMaxTurns":"अधिकतम मोड़","speakingOrderTooltip":"बोलने का क्रम: #{{order}}","allowedModels":"मॉडल","inheritParentModel":"मॉडल विरासत में लें","enabled":"सक्षम","disabled":"अक्षम","turnOrderSequential":"क्रमिक","turnOrderParallel":"समानांतर","requiresApproval":"अनुमोदन आवश्यक","item":"आइटम","items":"आइटम","contextScope":{"NONE":"स्वतंत्र","FULL":"पूर्ण संदर्भ","LAST_PHASE":"अंतिम चरण","ANONYMOUS":"अनाम","OWN_FEEDBACK":"स्वयं की प्रतिक्रिया","TASK_ONLY":"केवल कार्य","TASK_WITH_DEPS":"कार्य + निर्भरताएँ"},"configuration":"कॉन्फ़िगरेशन","deleteGroupOnly":"केवल समूह हटाएँ","deleteGroupOnlySuccess":"समूह हटा दिया गया (एजेंट रखे गए)","deleteGroupOnlyWarning":"इससे समूह हट जाएगा। सभी सदस्य एजेंट रखे जाएँगे।","deleteGroupAndAgents":"समूह + सभी एजेंट हटाएँ","deleteWithMembersSuccess":"समूह और सभी सदस्य एजेंट हटा दिए गए (सॉफ्ट-डिलीट)","deleteWithMembersWarning":"इससे समूह और सभी {{count}} सदस्य एजेंट सॉफ्ट-डिलीट हो जाएँगे। उन्हें पुनर्स्थापित किया जा सकता है।","hideDiscussions":"चर्चा पैनल छिपाएँ","showDiscussions":"चर्चा पैनल दिखाएँ","hideConfig":"कॉन्फ़िगरेशन पैनल छिपाएँ","showConfig":"कॉन्फ़िगरेशन पैनल दिखाएँ","hitlSection":"मानवीय स्वीकृति","hitlApprovalPoints":"स्वीकृति पर","hitlOnTaskRejection":"अस्वीकृति पर","hitlEdit":"संपादित करें","hitlSaved":"अनुमोदन सेटिंग्स सहेजी गईं","hitlEnable":"मानव अनुमोदन आवश्यक","hitlApprovalPhases":"अनुमोदन आवश्यक चरण","hitlNotConfigured":"कोई अनुमोदन गेट कॉन्फ़िगर नहीं — मानव अनुमोदन आवश्यक करने के लिए संपादित करें पर क्लिक करें।","driftTitle":"विराम के दौरान समूह कॉन्फ़िगरेशन बदल गया","driftRecovery":"समूह के चरण बदलने के कारण पुनरारंभ निरस्त कर दिया गया। चर्चा अभी भी अनुमोदन की प्रतीक्षा में है — कॉन्फ़िगरेशन ठीक करें (कॉन्फ़िगरेशन पैनल में, संपादित करें) और पुनः अनुमोदित करें, या इसे रद्द करें।","discussionStarted":"चर्चा शुरू हुई — लाइव स्ट्रीमिंग","continueStarted":"नया राउंड शुरू हुआ","followupSent":"फ़ॉलो-अप भेजा गया","discussionClosed":"चर्चा बंद की गई","backToGroups":"Groups पर वापस","noDiscussions":"अभी तक कोई चर्चा नहीं","askBelow":"शुरू करने के लिए नीचे एक प्रश्न पूछें","exitFullscreen":"फ़ुलस्क्रीन से बाहर निकलें","enterFullscreen":"फ़ुलस्क्रीन","discussions":"चर्चाएँ","discussionComplete":"चर्चा पूर्ण","continueDiscussion":"जारी रखें (नया राउंड)","followupMember":"किसी सदस्य के साथ फ़ॉलो-अप करें","closeDiscussion":"चर्चा बंद करें","currentRound":"वर्तमान राउंड","startNextRound":"अगला राउंड शुरू करें","selectMember":"एक सदस्य चुनें","sendFollowup":"फ़ॉलो-अप भेजें","closeConfirmTitle":"इस चर्चा को बंद करें?","closeConfirmButton":"चर्चा बंद करें","closeConfirmDismiss":"वापस जाएं","protocolMaxCost":"लागत सीमा","protocolOnCostExceeded":"पहुँचने पर","costAbort":"रोकें","costSynthesize":"अभी संश्लेषण करें","deliberationSection":"विचार-विमर्श","recordDissents":"अल्पमत रिपोर्ट","agentFiledTasks":"एजेंट-दर्ज कार्य","agentFiledCaps":"सीमाएँ","agentFiledCapsValue":"{{perDiscussion}} / चर्चा · {{perTurn}} / बारी","moderatorlessWarning":"ऐसे मॉडरेटर तक सीमित जो इस समूह में नहीं है: {{phases}}। बोलने के क्रम में पहला सदस्य स्थान लेगा।","roleCoverageWarning":"किसी सदस्य के पास \\"{{role}}\\" भूमिका नहीं है — इसके बजाय {{phases}} में सभी सदस्य बोलेंगे।","delegationDepth":"अधिकतम गहराई","delegationTimeout":"प्रतिनिधि समय-सीमा","secondsShort":"{{seconds}} सेकंड","delegationTargets":"अनुमति-सूची","phaseBehaviour":"चरण व्यवहार","phaseBehaviourNone":"न परहेज़ न अभिसरण कॉन्फ़िगर है — सदस्यों को छोड़ने देने या सहमति पर दोहराव वाला चरण रोकने के लिए संपादित करें।","abstentionShort":"परहेज़","convergenceShort":"अभिसरण ≥{{threshold}}","phasesSaved":"चरण सेटिंग्स सहेजी गईं","phasesNoneToEdit":"यह समूह कोई चरण परिभाषित नहीं करता। प्रति-चरण व्यवहार बदलने से पहले चर्चा शैली चुनें या कॉन्फ़िग में चरण जोड़ें।","phaseRepeats":"×{{repeats}}","allowAbstention":"परहेज़ की अनुमति दें","allowAbstentionHelp":"सदस्य स्वयं को दोहराने के बजाय इस दौर में कुछ नया न जोड़ने का विकल्प चुन सकता है।","convergenceEnable":"अभिसरण पर जल्दी रोकें","convergenceHelp":"एक निर्णायक हर दोहराव की तुलना पिछले से करता है और सदस्यों के रुख स्थिर होते ही चरण समाप्त कर देता है। हर दोहराव पर एक कॉल लगती है।","convergenceNeedsRepeats":"केवल दोहराए जाने वाले चरण पर उपलब्ध — एक ही बार चलने पर तुलना के लिए कुछ नहीं होता।","convergenceMinRepeats":"न्यूनतम दोहराव","convergenceThreshold":"सीमा-मान","convergenceJudge":"निर्णायक","judgeModerator":"मॉडरेटर","judgeService":"सेवा","judgeServiceNote":"स्वीकार्य है पर अभी जुड़ा नहीं — इंजन मॉडरेटर पर लौटता है और चेतावनी दर्ज करता है।","convergenceReached":"अभिसरित","convergenceChecked":"अभिसरण जाँच","convergenceScore":"सहमति {{score}}","decisionWinner":"विजेता: {{winner}}","decisionTie":"बराबरी","decisionDecidedAt":"{{phase}} में तय हुआ","decisionUnparsed":"निर्णायक का उत्तर संरचित फ़ैसले के रूप में नहीं पढ़ा जा सका, इसलिए वह नीचे ज्यों-का-त्यों रखा है और निष्कर्ष गद्य में ही रहेगा।","minorityReport":"अल्पमत रिपोर्ट ({{total}})","attachFiles":"फ़ाइलें संलग्न करें","attachmentLimit":"प्रति चर्चा अधिकतम {{max}} संलग्नक","attachmentTooLarge":"{{name}} संलग्न करने के लिए बहुत बड़ी है","attachmentReadFailed":"{{name}} पढ़ा नहीं जा सका","removeAttachment":"{{name}} हटाएँ","decisionType":{"VERDICT":"फ़ैसला","VOTE":"मतदान","AGREEMENT":"सहमति","AWARD":"आवंटन","NONE":"कोई संरचित निर्णय नहीं"},"abstainedBody":"इस दौर में कुछ नया नहीं जोड़ा।","convergenceSkipped_one":"· आगे के {{count}} दौर छोड़े गए","convergenceSkipped_other":"· आगे के {{count}} दौर छोड़े गए","attachmentTotalTooLarge":"संलग्नक कुल आकार सीमा से अधिक हैं","convergenceInert":"कॉन्फ़िगर है, पर यह चरण एक ही बार चलता है — निर्णायक कभी नहीं चल पाएगा। इसे हटाएँ, या चरण को एक से अधिक दोहराव दें।","questionTooLong":"प्रश्न अधिकतम {{max}} अक्षरों का हो सकता है","charactersOverLimit":"{{current}} / {{max}} अक्षर","advancedSection":"उन्नत सहयोग","artifactConfigLabel":"साझा आर्टिफ़ैक्ट","artifactConfigValue":"अधिकतम {{count}}/चर्चा","artifactCreatedBadge":"{{name}} बनाया गया (v{{version}})","artifactDraft":"प्रारूप","artifactFinal":"अंतिम","artifactLastEdited":"अंतिम बार {{agent}} द्वारा संपादित","artifactUpdatedBadge":"{{name}} अपडेट किया गया (v{{version}})","artifactsTitle":"साझा आर्टिफ़ैक्ट ({{count}})","concessionLedgerTitle":"रियायत लेजर","contextWindowLabel":"ट्रांसक्रिप्ट विंडो","contextWindowValue":"अंतिम {{count}} प्रविष्टियाँ{{summarized}}","facilitatorLabel":"फैसिलिटेटर","facilitatorMoves":"अनुमत क्रियाएँ","humanMemberConfigLabel":"मानव बारी टाइमआउट","humanTurnRequestedAt":"अनुरोधित","humanTurnResponsePlaceholder":"आपकी प्रतिक्रिया","humanTurnSubmit":"सबमिट करें","humanTurnSubmitted":"आपकी प्रतिक्रिया दर्ज कर ली गई","humanTurnSubmitting":"सबमिट हो रहा है…","humanTurnTimeout":"टाइमआउट","humanTurnTitle":"यह आपकी बारी है, {{name}}","inputDisabledHumanTurn":"किसी सदस्य की बारी की प्रतीक्षा…","memberTypeHuman":"मानव","negotiationAcceptedBy":"स्वीकृतकर्ता: {{names}}","negotiationGaveUp":"छोड़ दिया","negotiationInReturnFor":"इसके बदले में","negotiationOpen":"खुला","negotiationRound":"राउंड {{round}}","negotiationSuperseded":"प्रतिस्थापित","negotiationTableTitle":"वार्ता तालिका","notSet":"सेट नहीं","retroConfigLabel":"रेट्रो सबक","retroConfigValue":"{{perRun}}/रन, अधिकतम {{stored}} संग्रहीत","stateAwaitingHumanInput":"सदस्य की प्रतीक्षा","summarized":"सारांशित","transcriptWindowed":"बाद की बारियों के संदर्भ को सीमित रखने के लिए पहली {{count}} ट्रांसक्रिप्ट प्रविष्टियों को एक रोलिंग सारांश में समेट दिया गया है। सारांश देखने के लिए होवर करें।","voteMethod":"तरीका","voteMethodApproval":"अनुमोदन","voteMethodMajority":"बहुमत","voteOptionsExplicit":"स्पष्ट सूची","voteOptionsLastSynthesis":"अंतिम संश्लेषण से निकालें","voteOptionsList":"विकल्प (प्रति पंक्ति एक)","voteOptionsSource":"मतपत्र विकल्प","voteQuorum":"कोरम","voteTieHuman":"मानव निर्णय लेता है (अभी उपलब्ध नहीं)","voteTieModerator":"मॉडरेटर निर्णय लेता है","voteTieNoDecision":"कोई निर्णय नहीं","voteTiePolicy":"बराबरी होने पर","voteWeightByConfidence":"विश्वास स्तर के अनुसार भार दें","waitIndefinitely":"अनिश्चित काल तक प्रतीक्षा करें","advancedSaved":"सहयोग सेटिंग्स सहेजी गईं","advancedNotConfigured":"कोई ट्रांसक्रिप्ट विंडो, रेट्रो मेमोरी, साझा आर्टिफ़ैक्ट या फ़ैसिलिटेटर कॉन्फ़िगर नहीं है — चालू करने के लिए संपादित करें पर क्लिक करें।","contextWindowHint":"लंबी चर्चाओं में पुरानी प्रविष्टियों को चलती-फिरती सारांश में समेटकर हर बारी का संदर्भ सीमित रखता है।","contextWindowEntries":"पूर्ण रूप में रखी गई हालिया प्रविष्टियाँ","contextWindowSummarize":"विंडो से बाहर जाने वाली सामग्री का सारांश बनाएँ","contextWindowTruncateNote":"पुरानी प्रविष्टियाँ इसके बजाय “N पूर्व प्रविष्टियाँ छोड़ी गईं” चिह्न से बदल दी जाती हैं।","retroConfigHint":"रेट्रो चरण को टीम की स्मृति में सीख लिखने देता है, जो बाद की चर्चाओं में साथ चलती है।","retroPerRun":"प्रति रन","retroStored":"अधिकतम संग्रहीत","artifactConfigHint":"सदस्यों को साझा दस्तावेज़ लिखने देता है जो लिखे जाने वाली बारी के बाद भी बने रहते हैं।","artifactsPerDiscussion":"प्रति चर्चा अधिकतम","facilitatorHint":"एक एजेंट जो हर चेकपॉइंट पर हस्तक्षेप करता है और आपकी अनुमति दी गई सूची से केवल एक चाल चुनता है — कभी भी स्वतंत्र ऑर्केस्ट्रेटर नहीं।","facilitatorAgent":"फ़ैसिलिटेटर एजेंट","facilitatorPickAgent":"एक एजेंट चुनें…","facilitatorAgentRequired":"वह एजेंट चुनें जो संचालन करेगा।","facilitatorCheckAfter":"जाँच का समय","facilitatorCheckpoint":{"EACH_PHASE":"प्रत्येक चरण के बाद","EACH_REPEAT":"किसी चरण के भीतर हर दौर के बाद"},"facilitatorMove":{"CONTINUE":"जारी रखें","END_PHASE":"चरण जल्दी समाप्त करें","EXTEND_PHASE":"चरण बढ़ाएँ","CALL_VOTE":"मतदान बुलाएँ","RECRUIT":"सदस्य जोड़ें","ESCALATE_HUMAN":"किसी व्यक्ति तक बढ़ाएँ"},"facilitatorNoMove":"कम से कम एक चाल की अनुमति दें, या फ़ैसिलिटेटर बंद कर दें।","facilitatorMidPhaseNeedsRepeat":"चरण को समाप्त या विस्तारित करना चरण के बीच में होता है, इसलिए इसे प्रति-दौर चेकपॉइंट चाहिए।","facilitatorEscalateTo":"किसे बढ़ाएँ (प्रिंसिपल आईडी)","facilitatorEscalateRequired":"एस्केलेशन चर्चा को किसी के लिए रोकता है — बताएँ कि किसके लिए।","facilitatorMaxMoves":"प्रति चर्चा अधिकतम चालें","assignmentModeLabel":"कार्य आवंटन","assignmentModeRole":"भूमिका द्वारा (योजनाकार आवंटित करता है)","assignmentModeBid":"बोली द्वारा (सदस्य बोली लगाते हैं, सर्वोच्च आत्मविश्वास जीतता है)","assignmentModeBidShort":"बोली द्वारा","assignmentModeRoleHint":"योजनाकार या कॉन्फ़िगरेशन हर कार्य आवंटित करता है, या बारी-बारी से।","assignmentModeBidHint":"जब नीलामी अपनी लागत वसूल न कर सके तो भूमिका-आधारित आवंटन पर लौट आता है — दो से कम बोलीदाता या खुले कार्य, या अपर्याप्त टर्न बजट।","contextWindowSummarizer":"सारांशकर्ता","contextWindowNoSummarizer":"कोई नहीं","contextWindowModel":"सारांश मॉडल","contextWindowModelPlaceholder":"मॉडल","contextWindowSummarizerMissing":"सारांश मॉडल के बिना, अतिरिक्त सामग्री चुपचाप सादे कटौती चिह्न पर लौट आती है।","facilitatorMaxMovesCeiling":"अधिकतम {{max}} — फ़ैसिलिटेटर एक सीमित हस्तक्षेप है, ऑर्केस्ट्रेटर नहीं।","reviewUnassignedWarning_one":"{{count}} सदस्य असाइन नहीं किए गए","reviewUnassignedWarning_other":"{{count}} सदस्य असाइन नहीं किए गए","retroRecordedBadge_one":"{{phase}}: {{count}} सबक टीम मेमोरी में सहेजे गए","retroRecordedBadge_other":"{{phase}}: {{count}} सबक टीम मेमोरी में सहेजे गए","artifactRevisions_one":"{{count}} पूर्व संशोधन","artifactRevisions_other":"{{count}} पूर्व संशोधन","styles":{"ROUND_TABLE":{"label":"गोलमेज़","flow":"हर सदस्य अपनी राय रखता है, फिर कई दौर में एक-दूसरे की बात आगे बढ़ाता है"},"PEER_REVIEW":{"label":"सहकर्मी समीक्षा","flow":"सभी पहले अलग-अलग जवाब देते हैं, एक-दूसरे की समीक्षा करते हैं, फिर सुधार करते हैं"},"DEVIL_ADVOCATE":{"label":"विरोधी पक्ष","flow":"एक सदस्य समूह के रुख़ पर हमला करता है, बाक़ी उसका बचाव करते हैं"},"DELPHI":{"label":"गुमनाम दौर","flow":"सभी गुमनाम रूप से जवाब देते हैं और हर दौर में सुधार करते हैं, ताकि कोई पहले बोलने वाले से प्रभावित न हो"},"DEBATE":{"label":"पक्ष/विपक्ष बहस","flow":"एक पक्ष समर्थन में और दूसरा विरोध में तर्क देता है, फिर प्रत्युत्तर और निर्णय"},"TASK_FORCE":{"label":"टास्क फ़ोर्स","flow":"मॉडरेटर काम की योजना बनाता है, सदस्य समानांतर में काम करते हैं, नतीजों की जाँच होती है"},"NEGOTIATION":{"label":"बातचीत","flow":"पक्ष तब तक प्रस्ताव बदलते हैं जब तक सहमति न बने; न बनने पर ही मध्यस्थ फ़ैसला करता है"},"CUSTOM":{"label":"अपना प्रवाह","flow":"वे चरण जो आप ख़ुद तय करते हैं"}},"unsupportedStyle":"यह सर्वर {{style}} का समर्थन नहीं करता। जारी रखने के लिए दूसरा ढाँचा चुनें।"}'),Q={title:"कार्य बोर्ड",pending:"लंबित",inProgress:"प्रगति में",completed:"पूर्ण",verified:"सत्यापित",failed:"विफल",assignedTo:"{{name}} को सौंपा गया",dependsOn:"निर्भर: {{tasks}}",emptyTitle:"कार्य योजना की प्रतीक्षा",emptyDescription:"चर्चा शुरू होने पर मॉडरेटर कार्य योजना बनाएगा।",emptyState:"मॉडरेटर द्वारा बनाए जाने पर कार्य योजना यहाँ दिखाई देगी",unassigned:"असाइन नहीं किया गया",progress:"{{done}} / {{total}} कार्य पूर्ण",verificationPassed:"उत्तीर्ण",verificationFailed:"विफल",showMore:"और दिखाएं",showLess:"कम दिखाएं",awaitingApproval:"अनुमोदन की प्रतीक्षा",filedBy:"{{agent}} द्वारा दर्ज",wonByBid:"बोली द्वारा जीता — {{confidence}}% विश्वास, {{complexity}}"},Y={title:"उपयोगकर्ता स्मृति",subtitle:"एजेंट द्वारा संग्रहित स्थायी उपयोगकर्ता स्मृतियां ब्राउज़ करें और प्रबंधित करें",userIdPlaceholder:"उपयोगकर्ता ID दर्ज करें…",searchPlaceholder:"स्मृतियां खोजें…",enterUserId:"उनकी स्मृतियां ब्राउज़ करने के लिए उपयोगकर्ता ID दर्ज करें",totalEntries:"कुल प्रविष्टियां",preferences:"प्राथमिकताएं",facts:"तथ्य",conflicts:"विवाद",cat_all:"सभी",cat_preference:"प्राथमिकताएं",cat_fact:"तथ्य",cat_context:"संदर्भ",deleteAll:"सभी हटाएं",deleteAllTitle:"सभी स्मृतियां हटाएं",deleteAllDesc:"इस उपयोगकर्ता की सभी स्मृतियां स्थायी रूप से हटा दी जाएंगी। यह क्रिया पूर्ववत नहीं की जा सकती।",deleteAllConfirm:"सभी हटाएं",entryDeleted:"स्मृति प्रविष्टि हटाई गई",allDeleted:"उपयोगकर्ता की सभी स्मृतियां हटाई गईं",noResults:"कोई स्मृति प्रविष्टियां नहीं मिलीं",value:"मान",sourceAgent:"स्रोत एजेंट",accessCount:"पहुंच गणना",created:"बनाया गया",updated:"अपडेट हुआ",sourceConversation:"स्रोत बातचीत",conflicted:"विवादित"},$={title:"उपयोगकर्ता गुण",subtitle:"प्रति उपयोगकर्ता संग्रहित longTerm गुण ब्राउज़ करें और प्रबंधित करें",userIdPlaceholder:"उपयोगकर्ता ID दर्ज करें…",searchPlaceholder:"गुण फ़िल्टर करें…",enterUserId:"उनके गुण देखने के लिए उपयोगकर्ता ID दर्ज करें",key:"कुंजी",type:"प्रकार",value:"मान",deleteAll:"सभी हटाएं",deleteAllTitle:"सभी गुण हटाएं",deleteAllDesc:"इस उपयोगकर्ता के सभी गुण स्थायी रूप से हटा दिए जाएंगे।",deleted:"गुण हटाए गए",noResults:"कोई गुण नहीं मिले",showingCount:"{{count}} गुण"},Z={agentId:"एजेंट ID",environment:"परिवेश",title:"एजेंट ट्रिगर",subtitle:"स्वचालित रूटिंग के लिए इंटेंट को एजेंट डिप्लॉयमेंट से मैप करें",create:"नया ट्रिगर",createTitle:"ट्रिगर बनाएं",editTitle:"ट्रिगर संपादित करें",intent:"इंटेंट",deployments:"एजेंट डिप्लॉयमेंट",addDeployment:"एजेंट जोड़ें",agents:"एजेंट",empty:"अभी तक कोई ट्रिगर कॉन्फ़िगर नहीं किए गए",created:"ट्रिगर बनाया गया",updated:"ट्रिगर अपडेट किया गया",deleted:"ट्रिगर हटाया गया",deleteTitle:"ट्रिगर हटाएं",deleteDesc:"इंटेंट 「{{intent}}」का ट्रिगर स्थायी रूप से हटाना है?",searchPlaceholder:"इंटेंट या एजेंट ID से फ़िल्टर करें…"},X={agentCount:"एजेंट",confidence:"विश्वास",partialError:"कुछ कौशल क्वेरी विफल हुईं",registryOverview:"रजिस्ट्री अवलोकन",skillName:"कौशल",skills:"कौशल",title:"क्षमता खोज",subtitle:"घोषित कौशल और क्षमताओं के आधार पर एजेंट खोजें",searchPlaceholder:"कौशल खोजें…",strategyHighest:"सर्वोच्च विश्वास",strategyAll:"सभी मिलान",registeredSkills:"पंजीकृत कौशल",noSkills:"कोई कौशल नहीं मिले",matchingAgents:"मेल खाने वाले एजेंट",noMatches:"इस कौशल के लिए कोई एजेंट नहीं मिला"},ee={title:"एजेंट निर्यात करें",loading:"संसाधन ट्री लोड हो रहा है...",selectResources:"निर्यात करने के लिए संसाधन चुनें",required:"आवश्यक",snippets:"स्निपेट",allSelected:"सभी संसाधन चयनित हैं",countSelected:"{{total}} में से {{count}} संसाधन चयनित",exportSelected:"चयनित निर्यात करें"},te={title:"एजेंट आयात करें",dropZone:"यहां .zip फ़ाइल खींचें या ब्राउज़ करने के लिए क्लिक करें",dropZoneHint:"निर्यातित एजेंट संग्रह (.zip)",strategyLabel:"आयात रणनीति",createNew:"नए एजेंट के रूप में बनाएँ",createNewDesc:"नई आईडी के साथ नई प्रतिलिपि बनाता है। पहले आयात के लिए सर्वोत्तम।",mergeSync:"मौजूदा के साथ मर्ज / सिंक करें",mergeSyncDesc:"यदि पहले आयात किया गया है तो मौजूदा संसाधनों को अपडेट करता है। नहीं मिलने पर नया बनाता है।",upgradeExisting:"मौजूदा एजेंट को अपग्रेड करें",upgradeDesc:"लक्ष्य एजेंट के खिलाफ संसाधनों का संरचनात्मक रूप से मिलान करें।",syncRemote:"रिमोट इंस्टेंस से सिंक करें",syncDesc:"किसी अन्य EDDI इंस्टेंस से कनेक्ट करें और किसी विशिष्ट एजेंट को लाइव सिंक करें।",importNow:"अभी आयात करें",previewChanges:"परिवर्तन पूर्वावलोकन",selectTargetAgent:"लक्ष्य एजेंट का चयन करें",upgradeTargetHint:"आयातित संसाधनों को इस एजेंट के साथ ढांचागत रूप से मिलाया जाएगा।",chooseAgent:"— एजेंट चुनें —",sourceAgent:"स्रोत एजेंट (रिमोट)",targetAgent:"लक्ष्य एजेंट (स्थानीय)",createNewTarget:"नया एजेंट बनाएँ",resource:"संसाधन",type:"प्रकार",match:"मिलान",action:"कार्रवाई",new:"नया",updated:"अद्यतन",unchanged:"अपरिवर्तित",selected:"चयनित",mergeNow:"चयनित आयात करें",syncNow:"अभी सिंक करें",upgradeNow:"अभी अपग्रेड करें",importing:"एजेंट आयात हो रहा है...",contentIdentical:"सामग्री समान है",targetContent:"लक्ष्य",sourceContent:"स्रोत",diffHiddenLines:"{{lines}} अपरिवर्तित पंक्तियाँ दिखाएँ",diffRawComparison:"मान्य JSON नहीं — सादे पाठ के रूप में तुलना की गई, इसलिए केवल स्वरूपण का अंतर भी परिवर्तन के रूप में दिखता है।"},oe={title:"सिंक",subtitle:"सिंक करें।",connection:"शुरुआती इंस्टेंस",sourceUrl:"शुरुआती ईडीआईआई URL",authToken:"टोकन प्रमाणीकरण",authHint:"वैकल्पिक (X-Source-Authorization)।",connect:"संपर्क जोड़ें",connected:"संपर्क हो गया",agentsFound:"मिले",connectionFailed:"कनेक्शन विफल",agentMapping:"मॅपिंग एजेंट",previewAll:"सभी पूर्वावलोकन",syncSelected:"चुना हुआ सिंक",remote:"रिमोट",createNew:"नया बनाएँ",changes:"बदलाव",agentsSelected:"चयनित एजेंट",totalResources:"संसाधन",syncSuccess:"सफलता",syncError:"सिंक त्रुटि",empty:"एक शुरुआत करें",autoMatched:"स्वतः मिलान",previewFirst:"सिंक से पहले बदलावों का पूर्वावलोकन करें"},ne={actionCreate:"नया",actionUpdate:"अपडेट",actionSkip:"अद्यतित",actionConflict:"विवाद"},ae={title:"उपयोगकर्ता वार्तालाप",subtitle:"इंटेंट → उपयोगकर्ता → वार्तालाप बाइंडिंग प्रबंधित करें",lookup:"खोज",intent:"इरादा",userId:"उपयोगकर्ता ID",agentId:"एजेंट ID",environment:"वातावरण",conversationId:"वार्तालाप ID",binding:"सक्रिय बाइंडिंग",enterBoth:"इंटेंट और उपयोगकर्ता ID दर्ज करें",notFound:"कोई बाइंडिंग नहीं मिली",create:"बाइंडिंग बनाएं",createTitle:"बाइंडिंग बनाएं",created:"बाइंडिंग बनाई गई",deleteTitle:"बाइंडिंग हटाएं",deleteDesc:'इंटेंट "{{intent}}" और उपयोगकर्ता "{{userId}}" के लिए बाइंडिंग हटाएं?',deleted:"बाइंडिंग हटा दी गई"},re={placeholder:"पेज, एजेंट, कार्यवाही खोजें…",noResults:"कोई परिणाम नहीं मिला।",recent:"हाल के",navigate:"नेविगेट करें",agents:"एजेंट",actions:"त्वरित कार्यवाही",createAgent:"नया एजेंट बनाएं",openChat:"चैट खोलें",kbdNavigate:"नेविगेट",kbdSelect:"चुनें",kbdClose:"बंद करें"},ie={groupMemberHint:"यह समूह चर्चा में एक नेस्टेड उप-समूह के रूप में भाग लेगा।",noGroupsHint:"पहले एक समूह बनाएं, फिर इसे नेस्टेड उप-समूह सदस्य के रूप में जोड़ें।",noGroupsYet:"कोई समूह उपलब्ध नहीं",selectGroup:"मौजूदा समूह चुनें…",title:"Group Setup Wizard",subtitle:"Assemble a team of AI advisors to discuss your questions",backToGroups:"Back to Groups",templateTitle:"Start from a template",templateDesc:"Choose a preset group configuration or start from scratch.",startBlank:"Start from Scratch",blankDesc:"Configure everything manually",configTitle:"Group Configuration",configDesc:"Name your group and choose how the agents will discuss",namePlaceholder:"e.g. Advisory Board",descPlaceholder:"What is this group for?",membersTitle:"Assemble Your Team",membersDesc:"For each seat, choose an existing agent or create a new one on the fly.",addMember:"Add Member",refreshAgents:"Refresh agent list",existingAgents:"existing agents",displayName:"Agent Name",displayNamePlaceholder:"Give this agent a name…",rolePlaceholder:"Role (e.g. Marketing, Engineering)",useExisting:"Use Existing",createNew:"Create New",selectAgent:"Select agent…",systemPrompt:"System Prompt",provider:"LLM Provider",model:"Model",apiKey:"API Key",apiKeyPlaceholder:"sk-…",createThisAgent:"Create Agent",creatingAgent:"Creating agent…",agentReady:"Agent created & deployed",agentCreated:'Agent "{{name}}" created',agentCreateFailed:"Failed to create agent: {{error}}",moderator:"Moderator",moderatorHint:"Synthesizes the discussion",addModerator:"Add Moderator",removeModerator:"Remove moderator",createModerator:"Create Moderator Agent",moderatorReady:"Moderator agent ready",moderatorCreated:"Moderator agent created",creatingModerator:"Creating moderator…",creatingSlot:"Creating {{name}}…",creatingGroup:"Creating group…",needMembers:"Add at least 2 members to proceed",reviewTitle:"Review & Create",reviewDesc:"Review your group configuration before creating.",reviewMembers:"Members",autoCreateNotice:"{{count}} agents will be auto-created when you click Create Group",autoCreateHint:"Each agent will be created and deployed automatically before the group is assembled.",unassignedWarning:"{{count}} members set to 'Use Existing' but no agent selected",unassignedHint:"These members will be skipped during discussions. Go back to assign agents.",flowPreview:"Discussion Flow",createGroup:"Create Group",created:"Group Created!",viewGroup:"Open Group",createAnother:"Create Another",success:"Group created successfully!",advancedSettings:"उन्नत प्रोटोकॉल सेटिंग्स",agentTimeout:"एजेंट टाइमआउट (सेकंड)",maxRetries:"अधिकतम पुनः प्रयास",onAgentFailure:"एजेंट विफलता पर",onMemberUnavailable:"सदस्य अनुपलब्ध होने पर",maxTurns:"अधिकतम मोड़ (0 = असीमित)",maxTurnsHelp:"कुल एजेंट मोड़ों के लिए सुरक्षा सीमा। डिफ़ॉल्ट बैकएंड सीमा 50 है।",policySkip:"छोड़ें",policyRetry:"पुनः प्रयास",policyAbort:"रद्द करें",policyFail:"विफल",hintDebate:"सदस्यों को PRO और CON भूमिकाएं सौंपें। Pro पहले तर्क देता है, फिर Con, उसके बाद प्रतिवाद और निर्णय।",hintDevilAdvocate:"कम से कम एक सदस्य को DEVIL_ADVOCATE भूमिका सौंपें। वे समूह की सहमति को चुनौती देंगे।",hintPeerReview:"प्रत्येक सदस्य व्यक्तिगत रूप से हर दूसरे सदस्य के काम की समीक्षा करता है, फिर प्राप्त प्रतिक्रिया के आधार पर संशोधन करता है।",hintDelphi:"सभी सदस्य स्वतंत्र और गुमनाम रूप से जवाब देते हैं। प्रत्येक दौर के बाद, वे गुमनाम परिणाम देखते हैं और समायोजित कर सकते हैं। अधिकतम मोड़ गुमनाम पुनरावृत्तियों की संख्या नियंत्रित करता है।",hintNegotiation:"सदस्य अपने हित बताते हैं, प्रस्ताव रखते हैं और फिर मोल-भाव करते हैं — «अधिकतम दौर» तय करता है कि कितने मोल-भाव के दौर चलेंगे। सहमति न बनने पर ही मॉडरेटर मध्यस्थता करता है।",roleCoverageWarning:'किसी सदस्य के पास "{{role}}" भूमिका नहीं है',roleCoverageHint:"सर्वर विकल्प के तौर पर {{phases}} में सभी सदस्यों को बोलने देता है, इसलिए दोनों पक्ष एक ही लोग रखते हैं। «सदस्य» पर वापस जाकर भूमिका फ़ील्ड भरें।",hintTaskForce:"मॉडरेटर एक कार्य योजना बनाता है, एजेंटों को समानांतर में काम सौंपता है, फिर परिणामों की जांच करता है और उन्हें संश्लेषित करता है।",hintCustom:"अपने स्वयं के चरण मैन्युअल रूप से परिभाषित करें। कस्टम चरण बनाने के बाद API के माध्यम से कॉन्फ़िगर किए जा सकते हैं।",hintRoundTable:"सभी सदस्य अपनी राय साझा करते हैं, फिर कई दौरों में एक-दूसरे के विचारों पर चर्चा करते हैं, इसके बाद मॉडरेटर संश्लेषण करता है।",protocolSummary:"प्रोटोकॉल",hitlTitle:"मानवीय स्वीकृति आवश्यक करें",hitlDesc:"चुने गए चरणों पर चर्चा रोकें और जारी रखने से पहले मानवीय निर्णय की प्रतीक्षा करें।",hitlApprovalPoints:"स्वीकृति के लिए रोकें",hitlNoPhases:"इस शैली में नियंत्रित करने योग्य कोई पूर्व-निर्धारित चरण नहीं हैं।",hitlNoApprovalPoints:"कम से कम एक चरण चुनें, अन्यथा चर्चा कभी नहीं रुकेगी।",hitlTimeoutPolicy:"यदि समय पर निर्णय न हो",hitlApprovalTimeout:"स्वीकृति समय-सीमा",hitlTimeoutInvalid:"एक धनात्मक ISO-8601 अवधि दर्ज करें, जैसे PT15M या PT1H30M।",hitlTimeoutHint:"ISO-8601 अवधि, जैसे PT30S, PT15M, PT2H।",hitlGranularity:"स्वीकृति सूक्ष्मता",hitlGranularityHint:"कार्य-स्तरीय स्वीकृति TASK_FORCE निष्पादन पर लागू होती है — प्रत्येक कार्य को अलग-अलग स्वीकृत या अस्वीकृत करें।",hitlOnTaskRejection:"जब कोई कार्य अस्वीकृत हो",hitlPinNote:"स्वीकृति बिंदु सक्षम करने से इस समूह के चर्चा चरण स्थिर हो जाते हैं ({{granularity}} सूक्ष्मता)।",hitlReviewBadge:"मानवीय स्वीकृति",humanOnTimeoutAbort:"चर्चा रोकें",humanOnTimeoutLabel:"समय समाप्त होने पर",humanOnTimeoutSkip:"उनकी बारी छोड़ें और जारी रखें",humanPrincipalId:"प्रिंसिपल आईडी",humanPrincipalIdHint:"वह पहचान जो इस सदस्य की बारी सबमिट कर सकती है — जब उनकी बोलने की बारी आती है तो चर्चा रुककर प्रतीक्षा करती है।",humanPrincipalIdPlaceholder:"उपयोगकर्ता की लॉगिन/प्रिंसिपल आईडी",humanTurnSettingsHint:"जब किसी मानव सदस्य की बोलने की बारी आती है तो चर्चा रुककर प्रतीक्षा करती है। चुनें कि यदि वे समय पर जवाब न दें तो क्या हो।",humanTurnSettingsTitle:"मानव सदस्य की बारी सेटिंग्स",humanTurnTimeoutInvalid:"मान्य ISO-8601 अवधि नहीं है, जैसे PT24H या P1D।",humanTurnTimeoutLabel:"बारी टाइमआउट (ISO-8601 अवधि)",humanTurnTimeoutPlaceholder:"जैसे PT24H — खाली छोड़ने पर अनिश्चित काल तक प्रतीक्षा होगी",memberTypeHuman:"मानव"},se={advisoryBoard:"सलाहकार मंडल",advisoryBoardDesc:"मार्केटिंग, इंजीनियरिंग, वित्त, क़ानून और रणनीति — पाँच कारोबारी नज़रिये एक ही सवाल पर राय देते हैं, फिर मॉडरेटर सार प्रस्तुत करता है।",peerReview:"सहकर्मी समीक्षा पैनल",peerReviewDesc:"समीक्षक आपकी दी हुई सामग्री — मसौदा, योजना या प्रस्ताव — का आकलन करते हैं, एक-दूसरे के आकलन की समीक्षा कर सुधार करते हैं, और मॉडरेटर नतीजा जोड़ता है।",riskAssessment:"जोखिम आकलन",riskAssessmentDesc:"हर सदस्य अपनी राय देता है, एक सदस्य जान-बूझकर उलटा पक्ष रखकर अनदेखी कमियाँ उजागर करता है, बाक़ी जवाब देते हैं, फिर मॉडरेटर टिकी हुई बातों का सार देता है।",forecasting:"स्वतंत्र अनुमान",forecastingDesc:"सदस्य कई दौर तक गुमनाम रूप से जवाब देते हैं और बीच में केवल गुमनाम नतीजे देखते हैं, इसलिए कोई पहले बोलने वाले से प्रभावित नहीं होता।",proCon:"पक्ष/विपक्ष बहस",proConDesc:"दो सदस्य प्रस्ताव के समर्थन में और दो विरोध में तर्क देते हैं, फिर प्रत्युत्तर और मॉडरेटर का निर्णय।",negotiation:"बातचीत",negotiationDesc:"दो पक्ष अपने हित बताते हैं, प्रस्ताव रखते हैं और हर दौर में रियायतों का आदान-प्रदान करते हैं; सहमति न बनने पर ही मॉडरेटर मध्यस्थता करता है।",taskForce:"टास्क फ़ोर्स",taskForceDesc:"मॉडरेटर लक्ष्य को कामों में बाँटता है, सदस्य उन्हें समानांतर में करते हैं, और मॉडरेटर नतीजों की जाँच कर उन्हें जोड़ता है।",roles:{marketingExpert:"मार्केटिंग विशेषज्ञ",techLead:"टेक लीड",financeDirector:"वित्त निदेशक",legalCounsel:"क़ानूनी सलाहकार",strategyConsultant:"रणनीति सलाहकार",substanceReviewer:"विषय-वस्तु समीक्षक",structureReviewer:"संरचना समीक्षक",riskReviewer:"जोखिम समीक्षक",riskAnalyst:"Risk Analyst",domainExpert:"Domain Expert",devilsAdvocate:"Devil's Advocate",analystA:"Analyst A",analystB:"Analyst B",analystC:"Analyst C",analystD:"Analyst D",proAdvocate1:"Pro Advocate 1",proAdvocate2:"Pro Advocate 2",conAdvocate1:"Con Advocate 1",conAdvocate2:"Con Advocate 2",partyA:"पक्ष A",partyB:"पक्ष B",projectLead:"परियोजना प्रमुख",researcher:"शोधकर्ता",implementer:"कार्यान्वयनकर्ता",qualityAssurance:"गुणवत्ता आश्वासन"},assignRoles:"भूमिकाएँ असाइन करें",backToGallery:"टेम्पलेट पर वापस जाएँ",browseButton:"टेम्पलेट से",createButton:"समूह बनाएँ",created:"टेम्पलेट से समूह बनाया गया",nameLabel:"समूह का नाम",selectAgent:"एक एजेंट चुनें…",subtitle:"एक पैकेज्ड, पहले से ट्यून की गई चर्चा से शुरू करें — बस उसकी नामित भूमिकाओं में एजेंट असाइन करें।",title:"समूह टेम्पलेट",roleCount_one:"असाइन करने के लिए {{count}} भूमिका",roleCount_other:"असाइन करने के लिए {{count}} भूमिकाएँ",empty:"कोई टेम्पलेट उपलब्ध नहीं",emptyDescription:"इस सर्वर में कोई ग्रुप टेम्पलेट नहीं है। आप विज़ार्ड से शुरुआत से ग्रुप बना सकते हैं।"},le={agentIdPlaceholder:"संदेश संभालने के लिए एजेंट ID",botToken:"बॉट टोकन",botTokenHint:"बॉट उपयोगकर्ता OAuth टोकन। सुरक्षा के लिए वॉल्ट संदर्भ का उपयोग करें।",botTokenPlaceholder:"xoxb-… या ${vault:slack-bot-token}",channel:"चैनल",channelId:"Slack चैनल ID",channelIdCol:"चैनल ID",channelIdHint:"Slack चैनल पर राइट-क्लिक करें → चैनल विवरण देखें → चैनल ID कॉपी करें",channelsPlural:"चैनल",channelType:"चैनल प्रकार",confirmDelete:"चैनल हटाएं?",confirmDeleteDesc:"यह चैनल एकीकरण स्थायी रूप से हटा दिया जाएगा।",create:"चैनल बनाएं",createTitle:"चैनल एकीकरण बनाएं",defaultAgentId:"डिफ़ॉल्ट एजेंट ID",defaultTargetHint:"डिफ़ॉल्ट लक्ष्य उन सभी संदेशों को संभालता है जो किसी ट्रिगर कीवर्ड से मेल नहीं खाते। निर्माण के बाद और लक्ष्य जोड़ सकते हैं।",empty:"अभी कोई चैनल नहीं",emptyDesc:"एजेंट को Slack से जोड़ने के लिए चैनल एकीकरण बनाएं।",name:"नाम",namePlaceholder:"उदा. Engineering AI Hub",openSlackApps:"Slack ऐप डैशबोर्ड खोलें",searchPlaceholder:"चैनल खोजें…",signingSecret:"साइनिंग सीक्रेट",signingSecretHint:"आपके Slack ऐप के मूलभूत जानकारी पृष्ठ से।",signingSecretPlaceholder:"हेक्स स्ट्रिंग या ${vault:slack-signing-secret}",slackSetupGuide:"Slack सेटअप गाइड",slackSetupSummary:"एक Slack ऐप बनाएं, बॉट टोकन स्कोप कॉन्फ़िगर करें (app_mentions:read, chat:write, im:history, channels:history, groups:history), फिर क्रेडेंशियल यहाँ पेस्ट करें।",target:"लक्ष्य",targets:"लक्ष्य",targetsCol:"लक्ष्य",type:"प्रकार",unnamed:"अनाम चैनल",version:"संस्करण"},ce={saveSuccess:"चैनल सहेजा गया",addTarget:"लक्ष्य जोड़ें",addTrigger:"ट्रिगर जोड़ें…",agentId:"एजेंट ID",botToken:"बॉट टोकन",channelId:"Slack चैनल ID",cooldown:"कूलडाउन (सेकंड)",general:"सामान्य",groupId:"समूह ID",isDefault:"डिफ़ॉल्ट",maxCost:"अधिकतम $/दिन",maxDaily:"अधिकतम/दिन",name:"नाम",observe:"निरीक्षण",observeDesc:"निष्क्रिय रूप से निगरानी करें और चुनिंदा जवाब दें",observeKeywords:"ट्रिगर कीवर्ड",observeMimeTypes:"ट्रिगर MIME प्रकार",observeMode:"निरीक्षण मोड",observeSettings:"निरीक्षण मोड सेटिंग्स",platformConfig:"प्लेटफ़ॉर्म कॉन्फ़िगरेशन",rawConfig:"कच्चा कॉन्फ़िगरेशन",removeTarget:"हटाएं",requiredEvents:"आवश्यक इवेंट सब्सक्रिप्शन:",requiredScopes:"आवश्यक बॉट टोकन स्कोप:",setDefault:"डिफ़ॉल्ट के रूप में सेट करें",signingSecret:"साइनिंग सीक्रेट",targetName:"नाम",targets:"संदेश रूटिंग लक्ष्य",targetType:"प्रकार",triggerHint:'उपयोगकर्ता "कीवर्ड: संदेश" टाइप करके इस लक्ष्य पर रूट करते हैं',triggerKeywords:"ट्रिगर कीवर्ड",triggers:"ट्रिगर",type:"चैनल प्रकार",webhookHint:"इस URL को अपने Slack ऐप के Event Subscriptions → Request URL फ़ील्ड में पेस्ट करें।",webhookUrl:"वेबहुक URL",hitlSection:"ह्यूमन-इन-द-लूप अनुमोदन (वैकल्पिक)",hitlApprovalChannel:"अनुमोदन चैनल ID",hitlApprovalChannelHint:"Slack चैनल जिसे बातचीत रुकने पर अनुमोदन कार्ड प्राप्त होता है।",hitlApproverUserIds:"अनुमोदक उपयोगकर्ता ID",hitlApproverUserIdsHint:"अल्पविराम-पृथक Slack उपयोगकर्ता ID जिन्हें बटन के माध्यम से अनुमोदन की अनुमति है। इस सूची के बिना, बटन प्रदर्शित नहीं होते (फेल-क्लोज्ड)।"},de={loadingApprovalDetails:"अनुमोदन विवरण लोड हो रहा है…",pendingCount:"{{count}} अनुमोदन की प्रतीक्षा में",approvalDetailsError:"यह अनुरोध क्या करेगा यह लोड नहीं हो सका, इसलिए इसे यहाँ से अनुमोदित नहीं किया जा सकता। अस्वीकार करना अब भी सुरक्षित है।",awaitingHuman:"मानव की प्रतीक्षा",awaitingApproval:"अनुमोदन की प्रतीक्षा",approve:"अनुमोदन",reject:"अस्वीकार",cancel:"रद्द करें",approved:"अनुमोदित",rejected:"अस्वीकृत",cancelled:"रद्द",pending:"लंबित",emptyQueue:"कोई लंबित अनुमोदन नहीं",emptyQueueDescription:"सभी बातचीत सुचारू रूप से चल रही हैं — अभी किसी मानव इनपुट की आवश्यकता नहीं है।",surface:"प्रकार",regular:"बातचीत",group:"समूह",pauseReason:"कारण",pausedAt:"रुका हुआ",timeoutPolicy:"समय सीमा",timeRemaining:"शेष",overdue:"अतिदेय",phase:"चरण",granularity:"विस्तृतता",taskApprovals:"कार्य अनुमोदन",approveAll:"सभी को अनुमोदित करें",note:"नोट जोड़ें (वैकल्पिक)",notePlaceholder:"निर्णय के लिए एक नोट जोड़ें...",discussionCancelled:"चर्चा रद्द की गई",cancelDiscussion:"चर्चा रद्द करें",rejectAll:"सभी अस्वीकार करें",timeoutWaitIndefinitely:"अनिश्चित काल तक प्रतीक्षा करें",timeoutAutoApprove:"स्वतः-स्वीकृत",timeoutAutoReject:"स्वतः-अस्वीकृत",timeoutAbort:"निरस्त करें",granularityPhase:"चरण",granularityTask:"कार्य",rejectionFail:"कार्य विफल करें",rejectionRetry:"कार्य पुनः प्रयास करें",groupsTruncated:"यहाँ दिखाई गई से अधिक समूह स्वीकृतियाँ मौजूद हैं।",groupsLoadError:"समूह स्वीकृतियाँ लोड नहीं हो सकीं।",toolApprovalRequired:"टूल अनुमोदन आवश्यक",toolCallsAwaiting:"अनुमोदन की प्रतीक्षा में टूल कॉल",executedUngated:"पहले ही निष्पादित (अनगेटेड)",outcomeUnknown:"पिछला अनुमोदन निष्पादन के बीच में बाधित हुआ था — इसका प्रभाव अज्ञात है; पुनः प्रयास करने से पहले बाहरी रूप से सत्यापित करें।",outcomeUnknownShort:"परिणाम अज्ञात",toolApprovalHint:"अनुमोदन आपके प्रति-कॉल विकल्पों को लागू करता है (जिन कॉल को आपने नहीं बदला वे अनुमोदित हैं)। अस्वीकार पूरे बैच को अस्वीकार करता है।",toolApprovalHintExplicit:"बैच को अनुमोदित करने से पहले प्रत्येक कॉल को अलग से अनुमोदित या अस्वीकार करना होगा। अस्वीकार पूरे बैच को अस्वीकार करता है।",explicitReviewMissing:"अनुमोदित करने से पहले ऊपर हर कॉल की समीक्षा करें।",redactionCaveat:'नीचे दिखाए गए तर्क संपादित किए गए हैं — गुप्त मान "" के रूप में दिखता है, हटाया नहीं जाता।',gateReason:"मिलान पैटर्न",argsTruncated:"आर्ग्युमेंट छोटे किए गए",amendArguments:"आर्ग्युमेंट संशोधित करें (वैकल्पिक)",amendPlaceholder:'पूर्ण प्रतिस्थापन JSON ऑब्जेक्ट, जैसे {"to":"ops@acme.com"}। मूल रखने के लिए खाली छोड़ें।',amendTruncated:"जिस कॉल के आर्ग्युमेंट छोटे किए गए हों उसे संशोधित नहीं किया जा सकता — इसे यथावत अनुमोदित या अस्वीकार करें।",amendInvalidJson:"संशोधित आर्ग्युमेंट एक मान्य JSON ऑब्जेक्ट होना चाहिए।",amendTooLarge:"संशोधित आर्ग्युमेंट बहुत बड़े हैं।",review:"समीक्षा",tool:"टूल",scopeAll:"पूरे सिस्टम में सभी लंबित अनुमोदन दिखाए जा रहे हैं।",scopeOwn:"आपकी बातचीत के लंबित अनुमोदन दिखाए जा रहे हैं।",chatPaused:"यह बातचीत मानव अनुमोदन की प्रतीक्षा में है।",noProgressWaitForHuman:"मानव की प्रतीक्षा करें",noProgressAutoReject:"स्वतः-अस्वीकार",noProgressAbort:"निरस्त करें",confirmApproveTitle:"अनुरोध अनुमोदित करें?",confirmApproveDescription:"इस बातचीत को अनुमोदित करके फिर से शुरू करें?",confirmApproveToolTitle:"टूल निष्पादन अनुमोदित करें?",confirmApproveToolDescription:"अनुमोदन करने पर चलेगा: {{toolNames}}। यह वास्तविक क्रियाएं करता है और इसे पूर्ववत नहीं किया जा सकता।",confirmRejectTitle:"अनुरोध अस्वीकार करें?",confirmRejectDescription:"इस अनुरोध को अस्वीकार करें? बातचीत आगे नहीं बढ़ेगी।",confirmCancelTitle:"बातचीत रद्द करें?",confirmCancelDescription:"इस बातचीत को रद्द करें? कोई भी चल रहा कार्य रोक दिया जाएगा।",confirmCancelButton:"बातचीत रद्द करें",confirmCancelGroupTitle:"चर्चा रद्द करें?",confirmCancelGroupDescription:"इस चर्चा को रद्द करें? कोई भी चल रहा कार्य रोक दिया जाएगा।",confirmCancelGroupButton:"चर्चा रद्द करें",confirmDismiss:"वापस जाएं",approvalBlockedHeading:"इसे यहाँ से अनुमोदित नहीं किया जा सकता",confirmRejectToolTitle:"टूल निष्पादन अस्वीकार करें?",confirmRejectToolDescription:"कुछ भी नहीं चलेगा। बातचीत जारी रहेगी और एजेंट {{toolNames}} के बिना उत्तर देगा।",humanTurn:"सदस्य की बारी",humanTurnReason:"{{member}} के बोलने की प्रतीक्षा",humanTurnMemberFallback:"एक सदस्य",decidedProgress:"{{total}} में से {{decided}} तय"},pe={deploying:"एजेंट Deploy हो रहा है…",error:"कुछ गलत हो गया",newConversation:"नया वार्तालाप",ready:"तैयार — परीक्षण के लिए संदेश लिखें",retry:"पुनः प्रयास करें",saving:"परिवर्तन सहेजे जा रहे हैं…",starting:"वार्तालाप शुरू हो रहा है…",timeout:"Deploy टाइम-आउट हो गया",title:"परीक्षण चैट",preparing:"तैयार किया जा रहा है…"},ue={auditTrail:"ऑडिट ट्रेल",checking:"जाँच हो रही है…",coordConnected:"कोऑर्डिनेटर कनेक्टेड",coordDisconnected:"कोऑर्डिनेटर डिस्कनेक्टेड",coordUnknown:"कोऑर्डिनेटर —",createGroup:"समूह बनाएं",noConversations:"अभी तक कोई बातचीत नहीं",offline:"ऑफ़लाइन",online:"ऑनलाइन",platform:"प्लेटफ़ॉर्म",platformHealth:"प्लेटफ़ॉर्म स्वास्थ्य",recentConversations:"हाल की बातचीत",secretVault:"सीक्रेट वॉल्ट",vaultDown:"Vault अनुपलब्ध",vaultUp:"Vault तैयार",viewLogs:"लॉग देखें"},me={retry:"पुनः प्रयास करें",title:"कुछ गलत हो गया"},ge={auditPseudonymized:"ऑडिट छद्मनामित",checkingStatus:"जाँच हो रही है...",confirmDelete:"हाँ, सारा डेटा हटाएं",confirmDesc:'यह उपयोगकर्ता "{{userId}}" के लिए सारा डेटा स्थायी रूप से हटा देगा। इस क्रिया को पूर्ववत नहीं किया जा सकता।',confirmTitle:"डेटा हटाने की पुष्टि करें",conversationsDeleted:"बातचीत हटाई गईं",delete:"सारा डेटा हटाएं",deleteSuccess:"उपयोगकर्ता डेटा सफलतापूर्वक हटाया गया",deleting:"हटाया जा रहा है...",enterUserIdFirst:"स्थिति जांचने के लिए ऊपर उपयोगकर्ता ID दर्ज करें",export:"डेटा निर्यात करें",exportSuccess:"उपयोगकर्ता डेटा सफलतापूर्वक निर्यात हुआ",exporting:"निर्यात हो रहा है...",legalDesc:"डेटा निर्यात (Art. 15/20) एक JSON फ़ाइल प्रदान करता है जिसमें किसी उपयोगकर्ता का सारा संग्रहित डेटा होता है। हटाना (Art. 17) सभी स्मृतियों और बातचीत डेटा को स्थायी रूप से हटा देता है, ऑडिट प्रविष्टियों को छद्मनामित करता है, और इसे पूर्ववत नहीं किया जा सकता।",legalNotice:"डेटा सुरक्षा सूचना",liftRestriction:"प्रतिबंध हटाएं",liftingRestriction:"हटाया जा रहा है...",logsPseudonymized:"लॉग छद्मनामित",memoriesDeleted:"स्मृतियां हटाई गईं",restrictProcessing:"प्रसंस्करण प्रतिबंधित करें",restricting:"प्रतिबंधित किया जा रहा है...",restrictionApplied:"उपयोगकर्ता के लिए प्रसंस्करण प्रतिबंधित",restrictionDesc:"जब कोई उपयोगकर्ता डेटा सटीकता पर विवाद करे या प्रसंस्करण पर आपत्ति करे तो प्रसंस्करण प्रतिबंधित करें। प्रतिबंधित रहते हुए, उपयोगकर्ता का डेटा सुरक्षित रहता है लेकिन कोई नई बातचीत संसाधित नहीं की जा सकती। यह प्रतिवर्ती है।",restrictionLifted:"प्रसंस्करण प्रतिबंध हटाया गया",restrictionTitle:"प्रसंस्करण प्रतिबंध (Art. 18)",resultsTitle:"मिटाना पूर्ण",statusActive:"प्रसंस्करण सक्रिय",statusUnknown:"स्थिति उपलब्ध नहीं",statusRestricted:"प्रसंस्करण प्रतिबंधित",subtitle:"GDPR-अनुपालक उपयोगकर्ता डेटा प्रबंधन — मिटाना (Art. 17), सुवाह्यता (Art. 15/20), और प्रसंस्करण प्रतिबंध (Art. 18)",title:"गोपनीयता और अनुपालन",userId:"उपयोगकर्ता ID",userIdPlaceholder:"उपयोगकर्ता ID दर्ज करें...",userLookup:"उपयोगकर्ता खोज"},he={message:"डेमो मोड — नमूना डेटा प्रदर्शित हो रहा है। वास्तविक डेटा के लिए एक EDDI बैकएंड कनेक्ट करें।"},ye={confirmPurgeAll:"सभी {{count}} अनाथ संसाधनों को स्थायी रूप से हटाएँ? सर्वर सभी को हटा देता है — आपका चयन लागू नहीं होता। इसे पूर्ववत नहीं किया जा सकता।",deleteSelected:"{{count}} चयनित हटाएं",description:"किसी भी एजेंट या पैकेज द्वारा संदर्भित न किए गए संसाधनों को खोजें और साफ़ करें।",deselectAll:"सभी अचयनित करें",includeDeleted:"सॉफ्ट-डिलीट किए गए शामिल करें",lastScanned:"अंतिम स्कैन",noOrphans:"कोई अनाथ नहीं मिला",purge:"सभी साफ़ करें",purgeSuccess:"{{count}} अनाथ हटाए गए",runScan:"स्कैन चलाएं",scan:"स्कैन",scanPromptDesc:"एक्सटेंशन कॉन्फ़िग (नियम, API कॉल, LLM, आउटपुट) खोजें जो किसी भी वर्कफ़्लो या एजेंट द्वारा संदर्भित नहीं हैं। अपने प्लेटफ़ॉर्म को व्यवस्थित रखने के लिए अप्रयुक्त संसाधनों को साफ़ करें।",scanPromptTitle:"अपने प्लेटफ़ॉर्म को स्कैन करें",scanning:"संसाधन स्कैन हो रहे हैं…",selectAll:"सभी चुनें",softDeleted:"हटाया गया",title:"अनाथ पहचान",found_one:"{{count}} अनाथ मिले",found_other:"{{count}} अनाथ मिले"},ve={apiCallsMinute:"API कॉल / मिनट",configuration:"कॉन्फ़िगरेशन",conversationsToday:"आज की बातचीत",description:"प्रति टेनेंट दर सीमाएं, उपयोग सीमाएं और लागत बजट कॉन्फ़िगर करें।",disable:"अक्षम करें",disabled:"अक्षम",enable:"सक्षम करें",enabled:"सक्षम",enforcementOff:"प्रवर्तन बंद है।",enforcementOffHint:"कोटा लागू नहीं किया जा रहा है। सीमाएं लागू करना शुरू करने के लिए प्रवर्तन सक्षम करें और सहेजें।",limitHint:"-1 = असीमित",liveUsage:"लाइव उपयोग",maxAgentsPerTenant:"अधिकतम एजेंट / टेनेंट",maxApiCallsPerMinute:"अधिकतम API कॉल / मिनट",maxConversationsPerDay:"अधिकतम बातचीत / दिन",maxMonthlyCostUsd:"अधिकतम मासिक लागत (USD)",monthlyCost:"मासिक लागत",resetConfirmDesc:'टेनेंट "default" के सभी उपयोग काउंटर (बातचीत, API कॉल, मासिक लागत) तुरंत शून्य कर देता है। इसे पूर्ववत नहीं किया जा सकता।',resetConfirmTitle:"उपयोग काउंटर रीसेट करें?",resetCounters:"काउंटर रीसेट करें",resetSuccess:"उपयोग काउंटर रीसेट किए गए",saveSuccess:"कोटा सहेजा गया",tenantId:"टेनेंट ID",title:"टेनेंट कोटा"},De={clearVault:"वॉल्ट संदर्भ साफ़ करें",createNew:"नया सीक्रेट बनाएं",emptyVault:"अभी तक कोई सीक्रेट संग्रहित नहीं",filterPlaceholder:"वॉल्ट कुंजियां खोजें…",keyNotFound:"यह कुंजी वॉल्ट में नहीं मिली",loading:"कुंजियां लोड हो रही हैं…",noMatch:'"{{filter}}" से मेल खाती कोई कुंजी नहीं',pickFromVault:"वॉल्ट से चुनें",placeholder:"API कुंजी या ${vault:key-name}",vaultDown:"Vault कॉन्फ़िगर नहीं है — EDDI बैकएंड में एक सीक्रेट प्रदाता सेट करें"},Ae={category:"श्रेणी",content:"प्रॉम्प्ट सामग्री",contentLabel:"स्निपेट सामग्री",contentPlaceholder:"आपको अपनी प्रतिक्रियाओं में सतर्क और सावधान रहना चाहिए...",description:"विवरण",descriptionPlaceholder:"यह स्निपेट क्या करता है",identity:"पहचान",name:"स्निपेट नाम",namePlaceholder:"उदा. cautious_mode",noTags:"कोई टैग नहीं",tagPlaceholder:"उदा. safety, production",tags:"टैग",templateEnabled:"टेम्पलेट रिज़ॉल्यूशन सक्षम करें",templateEnabledHint:"अक्षम होने पर, सामग्री में {{}} मार्कर को शाब्दिक टेक्स्ट के रूप में माना जाता है (कोड उदाहरणों के लिए उपयोगी)।",usageHint:"उपयोग:"},Te={deployed:"Deploy किया गया",deploying:"Deploy हो रहा है...",error:"त्रुटि",notDeployed:"Deploy नहीं किया गया",checking:"जाँच हो रही है…"},fe={subtitle:"प्रति-उपयोगकर्ता स्मृतियां, गुण और बातचीत बाइंडिंग प्रबंधित करें",tabs:"उपयोगकर्ता डेटा अनुभाग",title:"उपयोगकर्ता डेटा"},Pe={deleteKey:"{{key}} हटाएं",editKey:"{{key}} संपादित करें",tableTitle_one:"{{count}} वेरिएबल",tableTitle_other:"{{count}} वेरिएबल",title:"वैश्विक वेरिएबल",description:"पूरे परिनियोजन के कॉन्फ़िगरेशन मान, सभी एजेंट में उपलब्ध।",create:"वेरिएबल जोड़ें",createTitle:"वैश्विक वेरिएबल जोड़ें",editTitle:"वेरिएबल संपादित करें",keyLabel:"कुंजी",keyPlaceholder:"उदा. default-model",keyError:"केवल अक्षर, अंक, बिंदु, अंडरस्कोर और हाइफ़न।",valueLabel:"मान",valuePlaceholder:"उदा. gpt-4.1",valueWarning:"मान UI और लॉग में दिखाई देते हैं। संवेदनशील डेटा के लिए सीक्रेट वॉल्ट का उपयोग करें।",descriptionLabel:"विवरण (वैकल्पिक)",descriptionPlaceholder:"वैकल्पिक विवरण…",exportableLabel:"एजेंट निर्यात में शामिल करें",save:"वेरिएबल सहेजें",saveSuccess:'वेरिएबल "{{key}}" सहेजा गया',deleteSuccess:'वेरिएबल "{{key}}" हटाया गया',confirmDeleteTitle:"वेरिएबल हटाएं",confirmDeleteMessage:'क्या आप वाकई "{{key}}" हटाना चाहते हैं? ${vars:{{key}}} का उपयोग करने वाले एजेंट को अनसुलझे संदर्भ दिखाई देंगे।',empty:"कोई वैश्विक वेरिएबल परिभाषित नहीं है",emptyHint:'अपना पहला परिनियोजन-व्यापी कॉन्फ़िगरेशन मान बनाने के लिए "वेरिएबल जोड़ें" पर क्लिक करें।',searchPlaceholder:"वेरिएबल फ़िल्टर करें…",colKey:"कुंजी",colValue:"मान",colDescription:"विवरण",colExportable:"निर्यात",colReference:"संदर्भ",colActions:"कार्रवाइयाँ",exportYes:"निर्यात में शामिल",exportNo:"निर्यात से बाहर",copyVars:"${vars:…} संदर्भ कॉपी करें",refCopied:"कॉपी किया गया: {{ref}}",infoLine1:"सिस्टम प्रॉम्प्ट में {{vars.}} या एजेंट कॉन्फ़िगरेशन में कहीं भी ${vars:} का उपयोग करें।",infoLine2:"परिवर्तन 2 मिनट के भीतर प्रभावी होते हैं (कैश TTL)। संवेदनशील मानों के लिए सीक्रेट वॉल्ट का उपयोग करें।"},Se={endpoints:"एंडपॉइंट",endpointsTotal:"कुल एंडपॉइंट",groupsSelected:"समूह चयनित",importOpenApi:"OpenAPI से आयात करें",importSelected:"चयनित समूह आयात करें",importing:"आयात हो रहा है…",selectGroups:"अलग API कॉल एक्सटेंशन के रूप में आयात करने के लिए API समूह चुनें"},ke=JSON.parse('{"board":{"continuePlaceholder":"इस चर्चा को जारी रखें…","inputDisabledClosed":"यह चर्चा बंद है","newDiscussion":"नई चर्चा","noResponseGenerated":"कोई प्रतिक्रिया उत्पन्न नहीं हुई","awaitingApprovalHint":"यह चर्चा मानव अनुमोदन के लिए रोकी गई है।","reviewInManager":"समीक्षा करें","askMore":"{{name}} से और पूछें →","askYourBoard":"अपने टास्क फोर्स से पूछें…","attachFile":"फ़ाइल संलग्न करें","backToLive":"लाइव चर्चा पर वापस जाएँ","chatOneOnOne":"आमने-सामने चैट","close":"बंद करें","copied":"कॉपी हो गया!","copyResponse":"उत्तर कॉपी करें","details":"विवरण","emptyDescription":"प्रश्न पूछें और आपका टास्क फोर्स उस पर चर्चा करेगा।","emptyTitle":"चर्चा के लिए तैयार","error":"कुछ गलत हो गया","fileTooLarge":"फ़ाइल 10MB से कम होनी चाहिए","fileTypeNotAllowed":"यह फ़ाइल प्रकार समर्थित नहीं है","hideConfig":"विवरण पैनल छिपाएँ","live":"लाइव","liveNow":"लाइव","loadingResponse":"उत्तर लोड हो रहा है","members":"टीम","membersPanel":"टीम पैनल","moderator":"संचालक","noMembers":"कोई टीम सदस्य नहीं","noSessions":"अभी कोई सत्र नहीं","phase":"चरण","pin":"उत्तर पिन करें","removeAttachment":"संलग्नक हटाएँ","running":"प्रगति में","runningHint":"यह चर्चा अभी भी चल रही है — नए उत्तर स्वतः दिखाई देंगे।","send":"भेजें","sessions":"सत्र","sessionsPanel":"सत्र पैनल","skipped":"{{name}} — छोड़ा गया","startingDescription":"आपका टास्क फोर्स इस पर काम कर रहा है — उत्तर आते ही यहाँ दिखाई देंगे।","startingTitle":"चर्चा प्रगति में","stillDiscussing":"टास्क फोर्स अभी भी चर्चा कर रहा है…","stop":"रोकें","synthesis":"संश्लेषण","synthesisResult":"संश्लेषण परिणाम","title":"टास्क फोर्स","toggleConfig":"विवरण पैनल टॉगल करें","unpin":"उत्तर अनपिन करें","untitled":"शीर्षकहीन","viewSessions":"पिछले सत्र देखें"},"thread":{"fileTooLarge":"फ़ाइल 20MB से कम होनी चाहिए","fileTypeNotAllowed":"यह फ़ाइल प्रकार समर्थित नहीं है","attachmentLimit":"प्रति संदेश अधिकतम {{max}} अटैचमेंट","notForwarded":"फ़ाइल संग्रहीत लेकिन मॉडल के लिए बहुत बड़ी","uploadFailed":"अपलोड विफल: {{error}}","noResponse":"कोई प्रतिक्रिया नहीं","attachFile":"फ़ाइल संलग्न करें","emptySubtitle":"{{name}} के साथ चैट शुरू करने के लिए संदेश भेजें।","emptyTitle":"{{name}} के साथ चैट","followUp":"आपके उत्तर पर आगे की बात…","fromSession":"{{boardName}} सत्र से","placeholder":"संदेश लिखें…","questionLabel":"प्रश्न","removeAttachment":"संलग्नक हटाएँ","responseLabel":"उत्तर","send":"भेजें","sendError":"क्षमा करें, एक त्रुटि हुई। कृपया पुनः प्रयास करें।","startingConversation":"वार्तालाप शुरू हो रहा है…","toggleContext":"संदर्भ टॉगल करें","placeholderNamed":"{{name}} को संदेश…"},"chat":{"agentDetails":"एजेंट विवरण","selectToView":"विवरण देखने के लिए एजेंट चुनें","hideDetails":"विवरण पैनल छिपाएं","editAgent":"एजेंट संपादित करें","auditLogs":"ऑडिट लॉग","openStudio":"मैनेजर में खोलें","triggers":"ट्रिगर देखें","starterSelected":"प्रॉम्प्ट चैट इनपुट में जोड़ा गया","title":"चैट","hideAgentDetails":"एजेंट विवरण छिपाएँ","showAgentDetails":"एजेंट विवरण दिखाएँ"},"agentEditor":{"capabilities":"क्षमताएं","workflows":"कार्यप्रवाह","features":"विशेषताएं और सुरक्षा","a2aEnabled":"एजेंट-टू-एजेंट","memoryTools":"मेमोरी टूल","signedMessages":"हस्ताक्षरित संदेश","strictMemory":"सख्त मेमोरी","hitlMode":"अनुमोदन मोड","llmConfig":"मॉडल और एलएलएम इंजन","provider":"पाइपलाइन","mode":"निष्पादन मोड","personaPrompt":"पर्सोना प्रॉम्प्ट","starters":"बातचीत की शुरुआत","channels":"चैनल कनेक्टर्स","temperature":"तापमान","contextWindow":"संदर्भ सीमा","activeTools":"सक्रिय उपकरण","noLlm":"कोई LLM कॉन्फ़िगर नहीं","noTools":"कोई कॉन्फ़िगर नहीं","add":"जोड़ें","addCapability":"क्षमता जोड़ें","cancel":"रद्द करें","close":"बंद करें","confidence":"विश्वास","confidenceHigh":"उच्च","confidenceLow":"निम्न","confidenceMedium":"मध्यम","description":"विवरण","descriptionPlaceholder":"इस एजेंट की विशेषज्ञता का वर्णन करें…","discardChanges":"आपके पास असहेजे परिवर्तन हैं। खारिज करें?","loadError":"एजेंट डेटा लोड करने में विफल।","noCapabilities":"कोई क्षमता परिभाषित नहीं है।","removeCapability":"क्षमता हटाएँ","retry":"पुनः प्रयास करें","save":"परिवर्तन सहेजें","saveError":"परिवर्तन सहेजने में विफल","saveSuccess":"एजेंट सफलतापूर्वक अपडेट हुआ","settings":"सेटिंग्स","skill":"कौशल","skillPlaceholder":"उदा. सारांशीकरण","systemPrompt":"सिस्टम प्रॉम्प्ट","systemPromptPlaceholder":"इस एजेंट के व्यवहार, व्यक्तित्व और विशेषज्ञता को परिभाषित करने वाले निर्देश…","title":"एजेंट संपादित करें"},"settings":{"hitlApprovalPointsNote":"ये सेटिंग्स नियंत्रित करती हैं कि अनुमोदन कैसे व्यवहार करता है। चर्चा के किन बिंदुओं पर अनुमोदन आवश्यक है, यह Manager में प्रति चरण कॉन्फ़िगर किया जाता है।","hitlOpenManager":"अनुमोदन बिंदु सेट करें","deliberation":"विचार-विमर्श की गुणवत्ता","deliberationDesc":"अल्पमत विचार दर्ज करें और सदस्यों को चर्चा के दौरान मिले काम को दर्ज करने दें","recordDissents":"अल्पमत रिपोर्ट दर्ज करें","recordDissentsDesc":"हर संश्लेषण के बाद, जिसने उसे नहीं लिखा हर वह सदस्य एक छोटी बारी पाता है ताकि बता सके कि वह कहाँ अब भी असहमत है। प्रति सदस्य एक अतिरिक्त कॉल लगती है।","agentFiledTasks":"सदस्यों को अपने कार्य दर्ज करने दें","agentFiledTasksDesc":"चर्चा के दौरान एजेंट को मिला काम असली कार्य बन जाता है जिसे अगली निष्पादन लहर उठाती है। बंद होने पर ये उपकरण इस समूह के लिए मौजूद ही नहीं होते।","maxTasksPerDiscussion":"अधिकतम दर्ज कार्य / चर्चा","maxTasksPerDiscussionHelp":"केवल एजेंट-दर्ज कार्य गिने जाते हैं, इसलिए बड़ा नियोजित बैकलॉग इसे समाप्त नहीं करता।","maxTasksPerTurn":"अधिकतम दर्ज कार्य / बारी","maxTasksPerTurnHelp":"एक बेकाबू बारी को सीमित करता है; चर्चा-स्तरीय सीमा धीमे बहाव को रोकती है।","maxCost":"लागत सीमा (USD)","maxCostUnlimited":"कोई सीमा नहीं","maxCostHelp":"बिना सीमा के लिए खाली छोड़ें। पहले से चल रही बारी कुल राशि को सीमा से थोड़ा आगे ले जा सकती है।","onCostExceeded":"जब सीमा पहुँच जाए","costSynthesize":"अभी संश्लेषण करें — सीधे निष्कर्ष पर जाएँ","costAbort":"रोकें — चर्चा को तुरंत विफल करें","costCeilingInvalid":"लागत सीमा 0 से बड़ी होनी चाहिए। बिना सीमा के लिए फ़ील्ड खाली करें।","maxDelegationDepth":"अधिकतम प्रत्यायोजन गहराई","maxDelegationDepthHelp":"A का B को और B का C को सौंपना गहराई 2 है। इससे आगे जाने वाला कदम अस्वीकृत होता है — यही प्रत्यायोजन चक्र को रोकता है।","delegationTimeout":"प्रत्यायोजन समय-सीमा (सेकंड)","delegationTimeoutHelp":"सौंपने वाला एजेंट अपने प्रतिनिधि की कितनी देर प्रतीक्षा करता है। जब प्रतिनिधि उपकरण या नेस्टेड चर्चा चलाए तो इसे बढ़ाएँ।","allowedDelegationTargets":"प्रत्यायोजन अनुमति-सूची","allowedDelegationTargetsHint":"कोई भी परिनियोजित एजेंट","allowedDelegationTargetsHelp":"अल्पविराम से अलग किए गए एजेंट आईडी। किसी भी परिनियोजित एजेंट को अनुमति देने के लिए खाली छोड़ें।","moderatorlessWarning":"ऐसे मॉडरेटर तक सीमित जो इस टास्क फ़ोर्स में नहीं है: {{phases}}। बोलने के क्रम में पहला सदस्य स्थान लेगा।","memberLimit":"एक टास्क फ़ोर्स में अधिकतम {{max}} सदस्य हो सकते हैं","explicitPhasesNote":"यह टास्क फ़ोर्स अपने चरण स्पष्ट रूप से परिभाषित करती है ({{phases}}), इसलिए वे वैसे ही चलते हैं — ऊपर का फ़्रेमवर्क और दौरों की संख्या अब प्रवाह नहीं बदलते।","explicitPhasesEdit":"चरण संपादित करें","addMemberTitle":"टीम सदस्य जोड़ें","selectAgent":"एजेंट","pickAgent":"एजेंट खोजें या चुनें…","displayName":"प्रदर्शन नाम","displayNameHint":"जैसे विश्लेषक","role":"भूमिका","roleHint":"जैसे समीक्षक","addMember":"सदस्य जोड़ें","nameRequired":"कार्य दल का नाम आवश्यक है","saveSuccess":"कार्य दल की सेटिंग्स सहेजी गईं","saveError":"सेटिंग्स सहेजने में विफल","deleteAllSuccess":"कार्य दल और सभी एजेंट हटा दिए गए","deleteError":"कार्य दल हटाने में विफल","deleteSuccess":"कार्य दल हटा दिया गया","duplicateMember":"यह एजेंट पहले से सदस्य है","loadError":"सेटिंग्स लोड करने में विफल","backToBoard":"कार्य दल पर वापस जाएं","untitled":"बिना शीर्षक वाला कार्य दल","subtitle":"अपने कार्य दल की सेटिंग्स और कार्यबल कॉन्फ़िगर करें","general":"सामान्य सेटिंग्स","generalDesc":"आपके कार्य दल का बुनियादी कॉन्फ़िगरेशन","boardName":"कार्य दल का नाम","boardNameHint":"कार्य दल का नाम दर्ज करें…","description":"विवरण","descriptionHint":"यह कार्य दल किस बारे में है?","discussionStyle":"सहयोग ढांचा","maxRounds":"अधिकतम राउंड","moderator":"मॉडरेटर","noModerator":"कोई नहीं","team":"कार्यबल","teamDesc":"अपने कार्य दल में भाग लेने वाले एजेंटों को प्रबंधित करें","roleOptional":"वैकल्पिक","typeAgent":"एजेंट","typeModerator":"मॉडरेटर","removeMember":"सदस्य हटाएं","minMembers":"कम से कम 2 सदस्य आवश्यक हैं","protocol":"प्रोटोकॉल और लचीलापन","protocolDesc":"एजेंट संचार के लिए टाइमआउट, पुनः प्रयास और विफलता प्रबंधन","agentTimeout":"एजेंट टाइमआउट (सेकंड)","maxRetries":"अधिकतम पुनः प्रयास","onAgentFailure":"एजेंट विफलता पर","failureSkip":"छोड़ें — इस एजेंट के बिना जारी रखें","failureRetry":"पुनः प्रयास — एजेंट को फिर से आज़माएं","failureAbort":"निरस्त करें — पूरी चर्चा रोक दें","onUnavailable":"सदस्य के अनुपलब्ध होने पर","unavailableSkip":"छोड़ें — उनके बिना आगे बढ़ें","unavailableFail":"विफल — चर्चा रोक दें","maxTurns":"अधिकतम मोड़ (0 = असीमित)","hitl":"मानवीय निगरानी","hitlDesc":"तय करें कि मनुष्य AI के निर्णयों की समीक्षा कब और कैसे करें","hitlGranularity":"अनुमोदन की सूक्ष्मता","granularityPhase":"प्रति चरण — चर्चा के हर चरण के बाद समीक्षा","granularityTask":"प्रति कार्य — हर एक कार्य की अलग समीक्षा","hitlTimeout":"अनुमोदन टाइमआउट","hitlTimeoutHint":"जैसे PT15M (15 मिनट), PT1H (1 घंटा)","hitlTimeoutHelp":"ISO-8601 अवधि। टाइमआउट न चाहने पर खाली छोड़ें।","hitlTimeoutPolicy":"टाइमआउट होने पर","timeoutWait":"अनिश्चित काल तक प्रतीक्षा करें","timeoutAutoApprove":"स्वतः-स्वीकृत","timeoutAutoReject":"स्वतः-अस्वीकृत","timeoutAbort":"चर्चा निरस्त करें","hitlRejection":"अस्वीकृति पर","rejectionFail":"विफल — कार्य रोक दें","rejectionRetry":"पुनः प्रयास — एजेंट से संशोधन कराएं","dynamic":"डायनामिक एजेंट","dynamicDesc":"एजेंटों को चर्चा के दौरान अन्य एजेंटों को भर्ती करने, बनाने या कार्य सौंपने की अनुमति दें","dynamicEnable":"डायनामिक एजेंट सक्षम करें","dynamicEnableDesc":"एजेंटों को अन्य एजेंटों को भर्ती करने, बनाने या कार्य सौंपने की अनुमति दें","allowCreation":"निर्माण की अनुमति","allowCreationDesc":"एजेंट आवश्यकतानुसार नए एजेंट बना सकते हैं","allowRecruitment":"भर्ती की अनुमति","allowRecruitmentDesc":"एजेंट पहले से तैनात एजेंटों को भर्ती कर सकते हैं","allowDelegation":"कार्य सौंपने की अनुमति","allowDelegationDesc":"एजेंट उप-कार्य अन्य एजेंटों को सौंप सकते हैं","maxCreated":"अधिकतम निर्मित","maxRecruited":"अधिकतम भर्ती","maxDelegations":"प्रति कार्य अधिकतम प्रत्यायोजन","inheritModel":"मूल एजेंट का मॉडल विरासत में लें","inheritModelDesc":"बनाए गए एजेंट मूल एजेंट का LLM मॉडल उपयोग करते हैं","lifecycle":"जीवन चक्र नीति","lifecycleEphemeral":"अस्थायी — चर्चा के बाद हटा दिया जाता है","lifecycleKeep":"तैनात रखें — चर्चा के बाद भी बना रहता है","lifecycleUndeploy":"केवल हटाएं — रोका जाता है पर मिटाया नहीं","lifecycleAgentDecides":"एजेंट तय करता है — एजेंट स्वयं अपना भविष्य चुनता है","tasks":"पूर्व-कॉन्फ़िगर किए गए कार्य","tasksDesc":"कार्य पहले से तय करें ताकि PLAN चरण छूट जाए और एजेंट तुरंत निष्पादन शुरू करें","taskSubject":"विषय","taskSubjectHint":"क्या किया जाना है?","taskDescription":"विवरण","taskDescHint":"इस कार्य के लिए विस्तृत निर्देश…","taskAssignRole":"भूमिका को सौंपें","taskPriority":"प्राथमिकता","removeTask":"कार्य हटाएं","addTask":"कार्य जोड़ें","dangerZone":"खतरा क्षेत्र","dangerDesc":"अपरिवर्तनीय कार्रवाइयाँ — सावधानी से आगे बढ़ें","deleteBoard":"कार्य दल भंग करें","deleteBoardDesc":"इस कार्य दल का कॉन्फ़िगरेशन हटाएं। एजेंट बने रहेंगे।","deleteBoardAll":"कार्य दल + सभी एजेंट भंग करें","deleteBoardAllDesc":"इस कार्य दल और उसके सभी सदस्य एजेंटों को स्थायी रूप से हटाएं।","unsavedChanges":"आपके पास असहेजे परिवर्तन हैं","templateSaved":"टेम्पलेट के रूप में सहेजा गया","saveAsTemplate":"टेम्पलेट के रूप में सहेजें","saving":"सहेजा जा रहा है…","saveChanges":"परिवर्तन सहेजें","deleteAllTitle":"कार्य दल और सभी एजेंट भंग करें?","deleteTitle":"कार्य दल भंग करें?","deleteAllConfirm":"इससे यह कार्य दल स्थायी रूप से भंग हो जाएगा और उसके सभी सदस्य एजेंट हट जाएंगे। यह क्रिया पूर्ववत नहीं की जा सकती।","deleteConfirm":"इससे इस कार्य दल का कॉन्फ़िगरेशन स्थायी रूप से भंग हो जाएगा। सदस्य एजेंट प्रभावित नहीं होंगे।","title":"सेटिंग्स"},"nav":{"dashboard":"डैशबोर्ड","templates":"टेम्पलेट"},"advisor":{"avatarLabel":"{{name}} का अवतार"},"analytics":{"agentPerformance":"एजेंट प्रदर्शन","avgLength":"औसत लंबाई","avgLengthChars":"{{count}} वर्ण","chatWithAgent":"एजेंट से चैट करें","compareAgent":"इससे तुलना करें…","contributionBreakdown":"योगदान विवरण","contributions":"योगदान","editAgent":"एजेंट संपादित करें","errorRate":"त्रुटि दर","errors":"त्रुटियाँ","sessions":"सत्र"},"back":"वापस","boardList":"टास्क फोर्स सूची","boardsLabel":"टास्क फोर्स","bottomNav":"निचला नेविगेशन","card":{"advisorCount":"{{count}} विशेषज्ञ","delete":"हटाएं","duplicate":"डुप्लिकेट करें","duplicated":"टास्क फोर्स डुप्लिकेट हुआ","history":"इतिहास","live":"लाइव","moreActions":"और कार्रवाइयाँ","noMembers":"कोई विशेषज्ञ नहीं","openSettings":"सेटिंग्स खोलें","pin":"पिन करें","settings":"सेटिंग्स","unpin":"अनपिन करें","untitled":"शीर्षकहीन टास्क फोर्स"},"closeSidebar":"साइडबार बंद करें","comparison":{"avgResponse":"औसत उत्तर","close":"बंद करें","contributions":"योगदान","errorRate":"त्रुटि दर","evenlyMatched":"दोनों एजेंट समान रूप से मेल खाते हैं","leadsIn":"5 में से {{count}} मापदंडों में आगे","sessions":"सत्र","title":"एजेंट तुलना","totalContent":"कुल सामग्री"},"dashboard":{"assembleTaskForce":"टास्क फोर्स बनाएं","cancel":"रद्द करें","deleteConfirm":"क्या आप वाकई इस टास्क फोर्स को भंग करना चाहते हैं? यह कार्रवाई पूर्ववत नहीं की जा सकती।","deletedCount":"{{count}} टास्क फोर्स हटाए गए","deleteError":"टास्क फोर्स हटाने में विफल","deletePartialFail":"{{success}} हटाए गए, {{fail}} विफल","deleteSelected":"हटाएं","deleteSuccess":"टास्क फोर्स हटाया गया","deleteWorkforce":"टास्क फोर्स भंग करें","deselect":"चयन हटाएं","duplicateError":"टास्क फोर्स डुप्लिकेट करने में विफल","gridView":"ग्रिड दृश्य","listView":"सूची दृश्य","loadError":"आपका कार्यक्षेत्र लोड नहीं हो सका। कृपया पुनः प्रयास करें।","pinned":"पिन किया गया","retry":"पुनः प्रयास करें","select":"चुनें","selected":"{{count}} चयनित","selectItem":"चुनें","subtitle":"जटिल चुनौतियों को हल करने वाले सहयोगी एजेंट समूह।","taskForcesLabel":"सक्रिय टास्क फोर्स","title":"सक्रिय टास्क फोर्स","viewToggle":"दृश्य मोड"},"export":{"clipboard":"क्लिपबोर्ड पर कॉपी करें","copied":"क्लिपबोर्ड पर कॉपी किया गया","copyFailed":"क्लिपबोर्ड पर कॉपी करने में विफल","downloadedJson":"JSON के रूप में डाउनलोड किया गया","downloadedMd":"Markdown के रूप में डाउनलोड किया गया","json":"JSON के रूप में निर्यात करें","markdown":"Markdown के रूप में निर्यात करें","title":"चर्चा निर्यात करें"},"history":{"backToBoard":"टास्क फोर्स पर वापस जाएँ","backToList":"सूची पर वापस जाएँ","cancel":"रद्द करें","close":"बंद करें","confirmDelete":"हटाएं","conversationList":"वार्तालाप सूची","delete":"वार्तालाप हटाएं","deleteDescription":"क्या आप वाकई इस वार्तालाप को हटाना चाहते हैं? यह कार्रवाई पूर्ववत नहीं की जा सकती।","deleteTitle":"वार्तालाप हटाएं","emptyTranscript":"अभी कोई प्रतिलेख प्रविष्टि नहीं है","entryCount":"{{count}} प्रविष्टियाँ","error":"त्रुटि","export":"निर्यात करें","finalAnswer":"अंतिम संश्लेषित उत्तर","loadError":"वार्तालाप लोड करने में विफल","loadMore":"और लोड करें","noContent":"कोई सामग्री नहीं","noConversations":"अभी कोई वार्तालाप नहीं","noResults":"आपकी खोज से कोई वार्तालाप मेल नहीं खाता","notFound":"वार्तालाप नहीं मिला","phase":"चरण","searchPlaceholder":"वार्तालाप खोजें…","selectConversation":"देखने के लिए एक वार्तालाप चुनें","selectHint":"सूची में से एक वार्तालाप चुनें","skipped":"{{name}} — छोड़ा गया","synthesis":"संश्लेषण","title":"वार्तालाप इतिहास","transcript":"वार्तालाप प्रतिलेख","tryDifferent":"कोई अन्य खोज शब्द आज़माएँ","untitled":"शीर्षकहीन वार्तालाप","loadListError":"वार्तालाप लोड करने में विफल"},"insights":"अंतर्दृष्टि","memberCount":"{{count}} सदस्य","newBoard":"टास्क फोर्स बनाएं","onboarding":{"advisorSlots":"{{count}} सलाहकार स्थान","agentsReady":"{{count}} तैयार","assembleNow":"अपना पहला टास्क फोर्स बनाएं","customDesc":"अपनी टीम और नियम स्वयं परिभाषित करें","customFromScratch":"शुरू से बनाएं","deployAgent":"एजेंट परिनियोजित करें","deployFirst":"शुरू करने के लिए अपना पहला AI एजेंट परिनियोजित करें","deployFirst2":"पहला परिनियोजित करें →","deployFirstDesc":"एजेंट वे विशेषज्ञ हैं जो आपके टास्क फोर्स को सक्षम बनाते हैं। शुरू करने के लिए एक बनाएं।","getStarted":"शुरू करें","howItWorks":"यह कैसे काम करता है","pickTemplate":"शुरू करने के लिए एक टेम्पलेट चुनें","pickTemplateDesc":"प्रत्येक टेम्पलेट चर्चा शैली, भूमिकाएँ और नियम कॉन्फ़िगर करता है — आपको बस एजेंट सौंपने हैं।","step1Desc":"अद्वितीय कौशल, ज्ञान और व्यक्तित्व वाले AI विशेषज्ञ बनाएं।","step1Title":"एजेंट परिनियोजित करें","step2Desc":"एक टेम्पलेट चुनें, भूमिकाओं में एजेंट सौंपें और चर्चा शैली चुनें।","step2Title":"टास्क फोर्स बनाएं","step3Desc":"एक प्रश्न पूछें और देखें कि आपके एजेंट कैसे बहस करते, समीक्षा करते और उत्तर संश्लेषित करते हैं।","step3Title":"पूछें और देखें","subtitle":"विशेषज्ञ AI एजेंटों को सहयोगी टीमों में संगठित करें जो मिलकर जटिल चुनौतियों पर बहस, विश्लेषण और समाधान करती हैं।","welcome":"कार्यबल में आपका स्वागत है"},"openMenu":"मेन्यू खोलें","shortcuts":{"closePanel":"पैनल / संवाद बंद करें","fromDashboard":"डैशबोर्ड से","newBoard":"टास्क फोर्स बनाएं","showHelp":"कीबोर्ड शॉर्टकट दिखाएं","title":"कीबोर्ड शॉर्टकट"},"sidebar":{"boards":"बोर्ड नेविगेशन"},"sidebarDrawer":"साइडबार नेविगेशन","skipToContent":"सामग्री पर जाएं","tabHome":"होम","tabInsights":"अंतर्दृष्टि","tabThreads":"थ्रेड","templates":{"deleteConfirm":"यह टेम्पलेट हटाएं?","deleted":"टेम्पलेट हटाया गया"},"templatesEmpty":"बाद में जल्दी से फिर बनाने के लिए किसी टास्क फोर्स को टेम्पलेट के रूप में सहेजें।","themeDark":"डार्क","themeLight":"लाइट","themeSystem":"सिस्टम","toggleSidebar":"साइडबार टॉगल करें","toggleTheme":"थीम बदलें","untitled":"शीर्षकहीन","useTemplate":"उपयोग करें","wizard":{"addAdvisor":"सलाहकार जोड़ें","advisorCount":"{{count}} सलाहकार","advisorName":"सलाहकार का नाम","agentError":"{{name}} बनाने में विफल: {{error}}","agentRequired":"वह मौजूदा एजेंट चुनें जिसका उपयोग यह सलाहकार करेगा।","alreadyCreated":"बनाया गया","alreadyCreatedNote":"पिछले प्रयास में पहले ही बनाया जा चुका है — इसे जस का तस दोबारा उपयोग किया जाएगा, इसलिए इसका प्रॉम्प्ट और LLM सेटिंग्स यहाँ अब बदली नहीं जा सकतीं।","apiKey":"API कुंजी","apiKeyRequired":"{{provider}} के लिए API कुंजी आवश्यक है। इसे यहाँ या ऊपर LLM डिफ़ॉल्ट में जोड़ें।","back":"वापस","boardDescPlaceholder":"इस सलाहकार बोर्ड के उद्देश्य का संक्षेप में वर्णन करें…","boardDescription":"विवरण (वैकल्पिक)","boardName":"कार्यबल का नाम","boardNamePlaceholder":"उदा. उत्पाद रणनीति बोर्ड","boardNameRequired":"इस कार्यबल को एक नाम दें।","cancel":"रद्द करें","collapse":"संक्षिप्त करें","createNew":"नया सलाहकार बनाएं","createWorkforce":"कार्यबल बनाएं","creatingAgent":"बनाया जा रहा है…","creationFailed":"निर्माण विफल","creationFailedDesc":"कुछ गलत हो गया। आप पुनः प्रयास कर सकते हैं और यह वहीं से जारी रहेगा जहाँ रुका था।","customTemplate":"कस्टम","customTemplateDesc":"अपने स्वयं के कॉन्फ़िगरेशन के साथ शुरू से आरंभ करें","error":"विफल","existing":"मौजूदा","expand":"विस्तृत करें","groupError":"टास्क फोर्स बनाने में विफल: {{error}}","llmDefaults":"नए सलाहकारों के लिए LLM","llmDefaultsDesc":"यहाँ बनाए गए हर सलाहकार पर लागू होता है, जब तक सलाहकार नीचे अपना अलग न चुने।","llmDefaultsKeyRequired":"यहाँ एक कुंजी जोड़ें ताकि वह हर उस सलाहकार पर लागू हो जो अपनी कुंजी नहीं देता।","model":"मॉडल","modelPlaceholder":"उदा. claude-sonnet-5","nameRequired":"इस सलाहकार को एक नाम दें।","new":"नया","next":"आगे","pending":"प्रतीक्षारत…","personality":"व्यक्तित्व और विशेषज्ञता","personalityHint":"आवश्यक — एजेंट को सिस्टम प्रॉम्प्ट के रूप में भेजा जाता है।","personalityPlaceholder":"इस सलाहकार की विशेषज्ञता, दृष्टिकोण और संवाद शैली का वर्णन करें…","promptRequired":"सिस्टम प्रॉम्प्ट आवश्यक है। इस सलाहकार की विशेषज्ञता और उसे कैसे उत्तर देना चाहिए, यह बताएं।","provider":"LLM प्रदाता","ready":"तैयार","removeAdvisor":"सलाहकार हटाएं","role":"भूमिका","selectAgent":"एजेंट चुनें","selectProvider":"प्रदाता चुनें…","settingUp":"आपका कार्यबल सेट किया जा रहा है…","settingUpBoard":"टास्क फोर्स बनाया जा रहा है…","settingUpDesc":"सलाहकार बनाए जा रहे हैं और बोर्ड कॉन्फ़िगर किया जा रहा है। इसमें कुछ समय लग सकता है।","starterPrompt":"आप {{name}} हैं, इस टीम में {{role}} की आवाज़। उसी दृष्टिकोण से बोलें: स्पष्ट, तर्कसंगत और कार्रवाई योग्य सुझाव दें, जो जोखिम और समझौते दिखें उन्हें बताएं, और जिसमें आप सबसे बेहतर हैं उसी पर ध्यान केंद्रित रखें।","starterPromptBare":"आप इस टीम के सदस्य हैं। स्पष्ट, तर्कसंगत और कार्रवाई योग्य सुझाव दें, जो जोखिम और समझौते दिखें उन्हें बताएं, और ध्यान केंद्रित रखें।","starterPromptNoRole":"आप {{name}} हैं, इस टीम के सदस्य। स्पष्ट, तर्कसंगत और कार्रवाई योग्य सुझाव दें, जो जोखिम और समझौते दिखें उन्हें बताएं, और ध्यान केंद्रित रखें।","starterPromptRoleOnly":"आप इस टीम में {{role}} की आवाज़ हैं। उसी दृष्टिकोण से बोलें: स्पष्ट, तर्कसंगत और कार्रवाई योग्य सुझाव दें, जो जोखिम और समझौते दिखें उन्हें बताएं, और जिसमें आप सबसे बेहतर हैं उसी पर ध्यान केंद्रित रखें।","stepIndicatorLabel":"विज़ार्ड प्रगति","stepReview":"समीक्षा","stepTeam":"टीम","stepTemplate":"टेम्पलेट","success":"टास्क फोर्स सफलतापूर्वक बनाया गया!","team":"टीम","templates":"चर्चा टेम्पलेट","tryAgain":"पुनः प्रयास करें","unnamed":"अनाम","untitled":"शीर्षकहीन बोर्ड","useDefault":"कार्यबल डिफ़ॉल्ट ({{value}})","useDefaultKey":"कार्यबल की डिफ़ॉल्ट कुंजी","useExisting":"मौजूदा एजेंट का उपयोग करें","useStarterPrompt":"प्रारंभिक प्रॉम्प्ट डालें","yourAdvisors":"आपके सलाहकार"},"workforce":"कार्यबल"}'),be=JSON.parse('{"title":"प्लेटफ़ॉर्म ऑपरेटर","subtitle":"इस EDDI परिनियोजन के बारे में पूछें — यह आपके लिए जानकारी खोज लाएगा।","readOnlyChip":"केवल पढ़ने योग्य","readWriteChip":"पढ़ना और लिखना","configError":"ऑपरेटर कॉन्फ़िगरेशन लोड नहीं हो सका","empty":{"title":"प्लेटफ़ॉर्म ऑपरेटर बंद है","description":"इसे चालू करें और एक ऐसे एजेंट से चैट करें जो आपके एजेंट, वर्कफ़्लो, बातचीत, परिनियोजन और लॉग का निरीक्षण कर सकता है — और हर बदलाव पर आपकी स्वीकृति के साथ उन्हें आपके लिए संचालित भी कर सकता है।","action":"प्लेटफ़ॉर्म ऑपरेटर सक्रिय करें"},"discovery":{"title":"अपने प्लेटफ़ॉर्म ऑपरेटर से मिलिए","description":"एक सहायक जो इस परिनियोजन का निरीक्षण और संचालन करता है। डिफ़ॉल्ट रूप से बंद; इसका हर बदलाव आपकी स्वीकृति की प्रतीक्षा करता है।","action":"सक्रिय करें"},"activation":{"title":"प्लेटफ़ॉर्म ऑपरेटर सक्रिय करें","subtitle":"ऑपरेटर को चलाने वाला मॉडल चुनें, उसके निर्देश देखें और परिनियोजित करें।","modelStep":"मॉडल","reviewStep":"प्रॉम्प्ट और समीक्षा","provider":"प्रदाता","model":"मॉडल","baseUrl":"बेस URL","apiKey":"मॉडल की API कुंजी","apiKeyHint":"आपके LLM प्रदाता की कुंजी। यह EDDI का क्रेडेंशियल नहीं है।","apiKeyPlaceholder":"अपनी API कुंजी चिपकाएँ, या वॉल्ट से कोई कुंजी चुनें","vaultDown":"सीक्रेट्स वॉल्ट उपलब्ध नहीं है, इसलिए अभी कुंजियाँ उसमें संग्रहीत नहीं की जा सकतीं। यहाँ दर्ज कुंजी बैकएंड को भेजी जाती है, जो संभव होने पर उसे वॉल्ट में रखता है।","environment":"परिवेश","authMode":"ऑपरेटर कैसे प्रमाणित होता है","authModeHint":"ऑपरेटर आपके EDDI एडमिन API को कॉल करता है। यह तय करता है कि उन कॉल के साथ कौन-से क्रेडेंशियल जाएँगे।","authNoneBlocked":"इस परिनियोजन में प्रमाणीकरण सक्षम है, इसलिए बिना प्रमाणीकरण वाले टूल कॉल अस्वीकार हो जाएँगे। ऑपरेटर सफलतापूर्वक परिनियोजित होगा और फिर हर खोज में विफल रहेगा। इसके बजाय \\"आपकी पहचान\\" चुनें।","scope":{"label":"क्षमता","default":"डिफ़ॉल्ट","hint":"ऑपरेटर को क्या करने की अनुमति है। हर लेखन (write) अब भी आपकी स्वीकृति की प्रतीक्षा करता है — नीचे सुरक्षा नियम देखें।","readOnly":{"label":"केवल पढ़ने योग्य","description":"यह इस डिप्लॉयमेंट का निरीक्षण और व्याख्या कर सकता है। कुछ भी बदल नहीं सकता।"},"readWrite":{"label":"पढ़ना और लिखना","description":"यह एजेंट और एजेंट समूह बनाने और संशोधित करने, डिप्लॉय करने, अनडिप्लॉय करने, किसी बेकाबू शेड्यूल को अक्षम करने, और किसी एजेंट के विवरण को संपादित करने की भी अनुमति देता है — हर एक पहले आपकी स्वीकृति की प्रतीक्षा करता है।"},"writeWarning":"सक्रियण पूरा होने से पहले संग्रहीत नीति के विरुद्ध अनुमोदन गेट की पुष्टि करता है। फिर एक वास्तविक, हानिरहित परीक्षण लेखन पृष्ठभूमि में चलता है — यदि यह कभी अनुमोदन के लिए रुके बिना निष्पादित हो जाए, तो ऑपरेटर तुरंत हटा दिया जाता है।"},"safetyPreamble":"सुरक्षा नियम (संपादन योग्य नहीं)","safetyPreambleHint":"हमेशा सबसे ऊपर जोड़े जाते हैं। ये ऑपरेटर से कहते हैं कि उसके टूल जो कुछ लौटाएँ उसे अविश्वसनीय डेटा मानें।","promptBody":"ऑपरेटर के निर्देश","promptBodyHint":"संपादित करें कि ऑपरेटर अपना परिचय कैसे देता है और कैसे काम करता है।","tools":"इसे दिए जाने वाले टूल ({{toolCount}})","activate":"सक्रिय करें और परिनियोजित करें","callerIdentityNote":"EDDI कॉल करते समय ही आपका टोकन डालता है। यह वार्तालाप में कभी संग्रहीत नहीं होता और केवल इसी परिनियोजन को वापस भेजा जाता है।","rebuildWarning":"सहेजने पर एक नया ऑपरेटर एजेंट बनता है और मौजूदा हटा दिया जाता है। आपका मौजूदा ऑपरेटर वार्तालाप आगे नहीं ले जाया जाएगा।","environmentHint":"जहाँ ऑपरेटर एजेंट स्वयं चलता है। यह फिर भी किसी भी परिवेश को पढ़ सकता है।"},"authMode":{"none":{"label":"कोई क्रेडेंशियल नहीं","description":"टूल कॉल में कोई Authorization हेडर नहीं जाता। यह केवल तभी काम करता है जब इस EDDI परिनियोजन में प्रमाणीकरण बंद हो।"},"caller-identity":{"label":"आपकी पहचान","description":"टूल कॉल साइन-इन किए हुए उपयोगकर्ता के रूप में चलते हैं, उसी की अनुमतियों और ऑडिट ट्रेल के साथ। प्रमाणीकरण सक्षम होने पर आवश्यक।"}},"stage":{"idle":"","validating":"जाँचा जा रहा है कि यह परिनियोजन ऑपरेटर के लिए आवश्यक एंडपॉइंट उपलब्ध कराता है…","provisioning":"ऑपरेटर एजेंट बनाया जा रहा है…","resolving-version":"एजेंट का संस्करण निर्धारित किया जा रहा है…","saving":"कॉन्फ़िगरेशन सहेजा जा रहा है…","verifying-gate":"अनुमोदन गेट सत्यापित किया जा रहा है…","done":"हो गया","longWait1":"ऑपरेटर एजेंट बनाया और तैनात किया जा रहा है — यह सबसे लंबा चरण है…","longWait2":"नए एजेंट पर टूल और अनुमोदन गेट सेट किए जा रहे हैं…","longWait3":"अभी भी जारी है — व्यस्त प्लेटफ़ॉर्म पर तैनाती में समय लग सकता है…"},"status":{"title":"ऑपरेटर","provider":"प्रदाता","environment":"परिवेश","authMode":"किस रूप में प्रमाणित","version":"संस्करण","checking":"जाँच हो रही है…","ready":"परिनियोजित","inProgress":"परिनियोजित हो रहा है…","error":"परिनियोजन त्रुटि","notFound":"परिनियोजित नहीं","errorHelp":"ऑपरेटर एजेंट परिनियोजित नहीं हो सका। पुनः प्रयास के लिए इसे फिर से कॉन्फ़िगर करें, या मूल त्रुटि के लिए प्लेटफ़ॉर्म लॉग देखें।","reconfigure":"पुनः कॉन्फ़िगर करें","deactivate":"निष्क्रिय करें","reset":"ऑपरेटर हटाएँ","deactivateConfirmTitle":"प्लेटफ़ॉर्म ऑपरेटर निष्क्रिय करें?","deactivateConfirmBody":"ऑपरेटर का परिनियोजन हटा दिया जाता है और वह उत्तर देना बंद कर देता है। इसका कॉन्फ़िगरेशन सुरक्षित रहता है, ताकि आप इसे बाद में फिर चालू कर सकें।","resetConfirmTitle":"प्लेटफ़ॉर्म ऑपरेटर हटाएँ?","resetConfirmBody":"ऑपरेटर एजेंट और उसके लिए बनाए गए सभी संसाधन, साथ ही सहेजा गया कॉन्फ़िगरेशन, स्थायी रूप से हटा दिए जाते हैं। इसे पूर्ववत नहीं किया जा सकता।","connectionCheck":"कनेक्शन जाँचें","gateChecking":"गेट सत्यापित हो रहा है…","gateUnknown":"गेट जाँचा नहीं गया","gateVerified":"गेट सत्यापित","gateNotVerified":"गेट सत्यापित नहीं","gateUnverifiedHelp":"इस एजेंट के दस्तावेज़ पर अनुमोदन गेट सत्यापित नहीं किया जा सका।"},"chat":{"empty":"अपने परिनियोजन के बारे में पूछें। ऑपरेटर जानकारी खोजता है और अपनी हर कॉल आपको दिखाता है।","restoring":"वह बातचीत खोली जा रही है…","placeholder":"एजेंट, वार्तालाप, परिनियोजन, लॉग के बारे में पूछें…","pausedPlaceholder":"ऑपरेटर आगे बढ़ने से पहले ऊपर दिए गए निर्णय की प्रतीक्षा कर रहा है…","readOnlyPlaceholder":"यह बातचीत समाप्त हो चुकी है — जारी रखने के लिए नई शुरू करें।","send":"भेजें","stop":"रोकें","newConversation":"नया वार्तालाप शुरू करें","transcript":"ऑपरेटर वार्तालाप","pauseCompactFallback":"आगे बढ़ने से पहले ऑपरेटर को आपकी अनुमति चाहिए।","pauseCompactReview":"अनुमोदन के लिए समीक्षा करें →","resolving":"स्वीकृत चरण चल रहा है — इसमें कुछ समय लग सकता है…"},"drawer":{"title":"प्लेटफ़ॉर्म ऑपरेटर","notActivated":"इसे चालू करें और कहीं से भी अपने परिनियोजन से बात करें।","titleAwaiting":"प्लेटफ़ॉर्म ऑपरेटर — एक निर्णय आपकी प्रतीक्षा कर रहा है","activate":"प्लेटफ़ॉर्म ऑपरेटर सेट करें"},"approval":{"reconstructedEndpoint":"{{method}} {{path}} (पुनर्निर्मित)","verified":"सत्यापित","verifiedTitle":"वास्तविक API कॉल कॉन्फ़िगरेशन से हल किया गया; निष्पादन से ठीक पहले फिर से जाँचा जाता है — यदि तब तक अनुरोध बदल जाता है, तो निष्पादन अस्वीकार कर दिया जाता है।","previewOnly":"पूर्वावलोकन","previewOnlyTitle":"यह कॉल निष्पादन से पहले अतिरिक्त सेटअप चरण चलाता है, इसलिए यह एक अनुमानित पूर्वावलोकन है — वास्तविक अनुरोध भिन्न हो सकता है और निष्पादन से पहले इसकी दोबारा जाँच नहीं होती।","query":"क्वेरी","headers":"हेडर","bodyTruncated":"प्रदर्शन के लिए बॉडी को छोटा करके दिखाया गया है — अनुमोदन अभी भी पूरे अनुरोध को कवर करता है।","diffHeading":"संग्रहीत संस्करण {{version}} की तुलना में बदलाव","diffLoading":"तुलना के लिए संग्रहीत संस्करण लोड हो रहा है…","diffFailed":"तुलना के लिए संग्रहीत संस्करण लोड नहीं हो सका — पूरा प्रस्तावित दस्तावेज़ नीचे है।","diffForbidden":"संग्रहीत संस्करण से तुलना के लिए संपादक पहुँच चाहिए — पूरा प्रस्तावित दस्तावेज़ नीचे है।","diffRedactionNote":"प्रस्तावित संस्करण में क्रेडेंशियल मान छिपाए गए हैं, इसलिए अपरिवर्तित होने पर भी वे यहाँ बदलाव के रूप में दिखते हैं।","diffStored":"संग्रहीत v{{version}}","diffProposed":"प्रस्तावित","showFullRequest":"पूरा प्रस्तावित दस्तावेज़ दिखाएँ","hideFullRequest":"पूरा प्रस्तावित दस्तावेज़ छिपाएँ","expandBody":"विस्तार करें","escalation":{"heading":"यह अनुरोध अतिरिक्त क्षमता प्रदान करता है","dynamicAgentCreation":"यह समूह चलते समय नए एजेंट बना सकता है। वे एजेंट स्वयं अनुमोदन-गेटेड नहीं होते।","dynamicAgentRecruitment":"यह समूह अन्य मौजूदा एजेंटों को अपनी चर्चाओं में शामिल कर सकता है।","autoApproveOnTimeout":"समय समाप्त होने पर इस संसाधन के अनुमोदन स्वतः दे दिए जाते हैं, बिना किसी की निगरानी के।","agentCreatedWithoutGate":"यह एजेंट बिना अनुमोदन-गेट के बनाया जा रहा है। इसके बाद की हर लेखन क्रिया बिना निगरानी के निष्पादित होगी।","agentCreatedWithBroadEndpoints":"यह एजेंट अपने API पर लेखन पहुँच के साथ बनाया जा रहा है — केवल पठन तक सीमित नहीं।","agentCreatedWithExternalTools":"यह एजेंट किसी बाहरी MCP सर्वर द्वारा दिए जाने वाले हर टूल के साथ बनाया जा रहा है। वे टूल कौन-से हैं, यह वही सर्वर तय करता है और बाद में उन्हें बदल भी सकता है।","unchecked":"बॉडी इतनी लंबी थी कि क्षमता-वृद्धि सेटिंग्स के लिए इसकी जाँच नहीं हो सकी — अनुमोदन से पहले इसे पूरा पढ़ें।","inlineCredential":"इस अनुरोध में ${vault:…} संदर्भ के बजाय सीधे लिखा हुआ क्रेडेंशियल जैसा कुछ शामिल है। सीधे लिखा गया सीक्रेट सादे टेक्स्ट में संग्रहीत होता है और वॉल्ट से रोटेट नहीं किया जा सकता — अस्वीकार करें और वॉल्ट संदर्भ मांगें।"},"blockedSelfTarget":"कोई एजेंट अपनी ही परिभाषा नहीं बदल सकता, और यह अनुरोध ऑपरेटर के अपने एजेंट ({{agentId}}) को लक्षित करता है। जब तक यह मौजूद है, पूरे बैच को अनुमोदित नहीं किया जा सकता — इसे अस्वीकार करें और यह बदलाव उस एजेंट के अपने पेज से करें।","blockedSelfConversation":"कोई एजेंट उसी बातचीत में संदेश नहीं भेज सकता जिसमें वह चल रहा है, और यह अनुरोध इसी को लक्षित करता है ({{agentId}})। इससे उसका अपना पाठ ऐसे दर्ज होगा मानो किसी व्यक्ति ने कहा हो। जब तक यह मौजूद है, पूरे बैच को स्वीकृत नहीं किया जा सकता — इसे अस्वीकार करें।","blockedGateCarrying":"यह अनुरोध एक ऐसा LLM कॉन्फ़िगरेशन लिखता है जो अपना स्वयं का अनुमोदन गेट (toolApprovals) सेट करता है, जो इसकी समीक्षा कर रहे गेट को ही बदल देगा। जब तक यह मौजूद है, पूरे बैच को स्वीकृत नहीं किया जा सकता — अस्वीकार करें और गेट को उस एजेंट के अपने पेज से बदलें।","blockedGateUnverifiable":"यह अनुरोध एक ऐसा LLM कॉन्फ़िगरेशन लिखता है जिसका मुख्य भाग पूरा नहीं पढ़ा जा सकता — या तो दिखाने के लिए बहुत बड़ा है या मान्य JSON नहीं है — इसलिए यह पुष्टि नहीं की जा सकती कि इसमें अनुमोदन-गेट ओवरराइड नहीं है। जब तक यह मौजूद है, पूरे बैच को स्वीकृत नहीं किया जा सकता — अस्वीकार करें और यह बदलाव उस एजेंट के अपने पेज से करें।","blockedGateUnpinned":"यह अनुरोध एक LLM कॉन्फ़िगरेशन लिखता है लेकिन पिन नहीं किया गया है, इसलिए जो वास्तव में चलता है वह यहाँ दिखाए गए से भिन्न हो सकता है और यह पुष्टि नहीं की जा सकती कि इसमें अनुमोदन-गेट ओवरराइड नहीं है। जब तक यह मौजूद है, पूरे बैच को स्वीकृत नहीं किया जा सकता — अस्वीकार करें और यह बदलाव उस एजेंट के अपने पेज से करें।","blockedSelfStart":"ऑपरेटर स्वयं का परीक्षण नहीं कर सकता — अपने ही एजेंट ({{agentId}}) से वार्तालाप शुरू करने पर उसका आउटपुट इनपुट बन जाएगा। जब तक यह कॉल मौजूद है, पूरे बैच के लिए स्वीकृति अनुपलब्ध है — अस्वीकार करें और किसी अन्य एजेंट का परीक्षण करें।"},"starters":{"whatsDeployed":"अभी क्या-क्या परिनियोजित है?","recentConversations":"मुझे सबसे हाल के वार्तालाप दिखाएँ","healthCheck":"क्या इस प्लेटफ़ॉर्म पर कुछ गड़बड़ है?","diagnoseAgent":"मेरा एक एजेंट परिनियोजित क्यों नहीं हो पा रहा?"},"toast":{"activated":"प्लेटफ़ॉर्म ऑपरेटर सक्रिय किया गया","deactivated":"प्लेटफ़ॉर्म ऑपरेटर निष्क्रिय किया गया","reset":"प्लेटफ़ॉर्म ऑपरेटर हटा दिया गया","activatedButUnreachable":"ऑपरेटर परिनियोजित हुआ, पर आपका प्लेटफ़ॉर्म नहीं पढ़ सका","activatedGateVerified":"प्लेटफ़ॉर्म ऑपरेटर सक्रिय — अनुमोदन गेट सत्यापित। कनेक्शन जाँचें पृष्ठभूमि में चल रही हैं।","activatedChecking":"प्लेटफ़ॉर्म ऑपरेटर सक्रिय। कनेक्शन जाँचें पृष्ठभूमि में चल रही हैं।","writeProbeVerified":"लेखन पहुँच सत्यापित — एक वास्तविक संरक्षित लेखन अनुमोदन के लिए रुका।","writeProbeFailed":"अनुमोदन गेट टिक नहीं पाया — ऑपरेटर हटा दिया गया।","writeProbeInconclusive":"लाइव लेखन परीक्षण अनिर्णायक रहा।"},"canary":{"genericFailure":"कनेक्शन जाँच सफल नहीं रही।","passed":"ऑपरेटर आपके प्लेटफ़ॉर्म तक पहुँच सकता है।","recheck":"फिर से जाँचें","title":"ऑपरेटर परिनियोजित हो गया, लेकिन आपका प्लेटफ़ॉर्म नहीं पढ़ सका।"},"paused":{"title":"प्लेटफ़ॉर्म ऑपरेटर रुका हुआ है","description":"यह अब भी कॉन्फ़िगर है — फिर से चालू करने पर वही एजेंट दोबारा परिनियोजित होता है। कुछ भी हटाया नहीं गया।","action":"फिर से चालू करें"},"managedAgentBadge":"ऑपरेटर","managedAgentHint":"प्लेटफ़ॉर्म ऑपरेटर स्क्रीन द्वारा बनाया और प्रबंधित। यहाँ इसे संपादित या हटाने पर वह स्क्रीन टूट जाएगी।","decisionLog":{"approved":"आपने यह अनुरोध स्वीकृत किया","rejected":"आपने यह अनुरोध अस्वीकार किया","rePaused":"फिर से रुका — एक और निर्णय आवश्यक है","noReply":"यह चरण बिना उत्तर के समाप्त हुआ","executed":"{{calls}} चलाया गया","partial_one":"स्वीकृत — {{count}} कॉल अस्वीकार","partial_other":"स्वीकृत — {{count}} कॉल अस्वीकार"},"tabs":{"label":"ऑपरेटर दृश्य","chat":"चैट","history":"इतिहास"},"history":{"emptyTitle":"कोई पिछली बातचीत नहीं","emptyDescription":"ऑपरेटर के साथ आपकी बातचीत यहाँ दिखती है, ताकि आप उसे बाद में जारी रख सकें।","noOpeningMessage":"(अभी कोई संदेश नहीं)","stepCount_one":"{{count}} चरण","stepCount_other":"{{count}} चरण"}}'),Ce={addCadence:"कैडेंस जोड़ें",addTask:"कार्य जोड़ें",backToGroup:"समूह पर वापस जाएँ",backlogEmpty:"अभी तक कोई बैकलॉग कार्य नहीं है।",backlogTitle:"बैकलॉग ({{count}})",cadenceAdded:"कैडेंस जोड़ा गया",cadenceDeleted:"कैडेंस हटाया गया",cadenceRunning:"वर्तमान में एक कैडेंस-रन चर्चा प्रगति पर है।",cadencesEmpty:"अभी तक कोई आवर्ती कैडेंस कॉन्फ़िगर नहीं किया गया है।",cadencesTitle:"कैडेंस ({{count}})",confirmDeleteCadenceDesc:"इससे इसके निर्धारित रन रुक जाते हैं। पहले से चल चुकी चर्चाएँ प्रभावित नहीं होतीं।",confirmDeleteCadenceTitle:"क्या इस कैडेंस को हटाना है?",createdBy:"{{who}} द्वारा",cronLabel:"Cron अभिव्यक्ति",cronPlaceholder:"जैसे 0 9 * * MON",discussions:"चर्चाएँ",failed:"विफल",inputTemplatePlaceholder:"प्रत्येक रन के लिए प्रॉम्प्ट टेम्पलेट (वैकल्पिक — अन्यथा एक सामान्य बैकलॉग सूची उपयोग की जाती है)",lastRun:"अंतिम रन",maxCostLabel:"अधिकतम लागत / रन ($, वैकल्पिक)",maxCostPlaceholder:"समूह डिफ़ॉल्ट",maxPerRunLabel:"अधिकतम कार्य / रन",member:"सदस्य",navLabel:"वर्कस्पेस",never:"कभी नहीं",perMemberStats:"प्रति-सदस्य विश्वसनीयता",priority:"प्राथमिकता",subtitle:"एक स्थायी बैकलॉग और आवर्ती कैडेंस जिन्हें यह समूह शेड्यूल पर बिना निगरानी के चलाता है।",taskAdded:"कार्य बैकलॉग में जोड़ा गया",taskDescriptionPlaceholder:"विवरण (वैकल्पिक)",taskSubjectPlaceholder:"कार्य विषय",tasksVerified:"सत्यापित कार्य",timeZoneLabel:"समय क्षेत्र",title:"स्थायी टीम वर्कस्पेस",totalCost:"कुल लागत",verified:"सत्यापित",maxCostInvalid:"प्रति रन अधिकतम लागत 0 या उससे अधिक संख्या होनी चाहिए।",cadenceSummary_one:"प्रति रन अधिकतम {{max}} कार्य",cadenceSummary_other:"प्रति रन अधिकतम {{max}} कार्य",inputTemplateTooLong:"प्रॉम्प्ट टेम्पलेट {{max}} वर्णों तक सीमित है।"},Ee={title:"नई टीम"},we={title:"EDDI अपडेट",description:"देखें कि EDDI का कोई नया रिलीज़ उपलब्ध है या नहीं। जब तक आप न कहें, कुछ भी नहीं भेजा जाता।",installed:"इंस्टॉल किया गया",githubRelease:"GitHub रिलीज़",dockerImage:"Docker इमेज",unknownVersion:"अज्ञात",checkNow:"अभी जाँचें",checking:"जाँच हो रही है…",autoCheck:"हर बार पेज लोड होने पर स्वतः जाँचें",autoCheckHint:"ब्राउज़र के हर रीलोड पर एक जाँच चलाता है और नया रिलीज़ मिलने पर बैनर दिखाता है।",privacyNote:"जाँच आपके ब्राउज़र से केवल api.github.com से संपर्क करती है। किसी अन्य होस्ट से नहीं, और तैनाती का कोई डेटा नहीं भेजा जाता।",neverChecked:"अभी तक कोई जाँच नहीं की गई।",upToDate:"आप नवीनतम रिलीज़ ({{version}}) चला रहे हैं।",updateAvailable:"EDDI {{version}} उपलब्ध है",updateAvailableDetail:"आप {{installed}} चला रहे हैं।",ahead:"आप {{installed}} चला रहे हैं, जो नवीनतम रिलीज़ ({{version}}) से भी नया है।",unknownInstalled:"नवीनतम रिलीज़ {{version}} है। इंस्टॉल की गई वर्शन का पता नहीं चल सका, इसलिए तुलना संभव नहीं है।",errorRateLimited:"GitHub की बिना-प्रमाणीकरण अनुरोध सीमा पूरी हो गई। बाद में पुनः प्रयास करें, या रिलीज़ पेज खोलें।",errorBlockedByCsp:"इस परिनियोजन की Content-Security-Policy ब्राउज़र को api.github.com तक पहुँचने से रोकती है, इसलिए जाँच नहीं चल सकती। इसकी अनुमति देने के लिए connect-src निर्देश में api.github.com जोड़ें, या नीचे दिए गए रिलीज़ लिंक का उपयोग करें।",errorUnreachable:"api.github.com तक नहीं पहुँचा जा सका। अपना नेटवर्क या आउटबाउंड प्रॉक्सी जाँचें।",errorFailed:"अपडेट जाँच विफल रही। मैन्युअल रूप से देखने के लिए रिलीज़ पेज खोलें।",publishedOn:"{{date}} को प्रकाशित",whatsNew:"{{version}} में नया क्या है",fullNotes:"GitHub पर पूरे रिलीज़ नोट्स",noNotes:"इस रिलीज़ के लिए कोई नोट्स नहीं हैं।",releaseNotes:"रिलीज़ नोट्स",allReleases:"सभी रिलीज़",howToUpdate:"अपडेट कैसे करें",howToUpdateCli:"eddi CLI (इंस्टॉलर द्वारा बनाई गई) के साथ:",howToUpdateManual:"CLI न हो तो अपनी इंस्टॉल डायरेक्ट्री (डिफ़ॉल्ट ~/.eddi) से:",howToUpdateNote:"-f फ़्लैग अपने सेटअप के अनुसार बदलें — Keycloak उपयोग करते हों तो -f docker-compose.auth.yml जोड़ें।"},Ie={acrossGroups:"{{count}} टास्क फोर्स में",actions:"कार्रवाइयाँ",activeExperts:"सक्रिय विशेषज्ञ",activity:"गतिविधि",agentLeaderboard:"एजेंट लीडरबोर्ड",agentName:"एजेंट",allOutcomes:"सभी परिणाम",allStyles:"सभी शैलियाँ",avgDuration:"औसत अवधि",cancelCompare:"रद्द करें",clearAll:"सभी साफ़ करें",clearFilters:"फ़िल्टर साफ़ करें",completionRate:"पूर्णता दर",contributions:"योगदान",covered:"कवर किया गया",createFirst:"टास्क फोर्स बनाएं",daysAgo:"{{count}} दिन पहले",emptyDescription:"यहाँ विश्लेषण देखने के लिए टास्क फोर्स चर्चा शुरू करें।",emptyHaveGroups:"आपके पास {{count}} टास्क फोर्स हैं लेकिन अभी कोई चर्चा नहीं। अंतर्दृष्टि देखने के लिए चर्चा शुरू करें।",emptyTitle:"अभी कोई अंतर्दृष्टि नहीं",errorDescription:"कुछ डेटा प्राप्त नहीं किया जा सका। कृपया पुनः प्रयास करें।",errors:"त्रुटियाँ",errorTitle:"अंतर्दृष्टि लोड नहीं हो सकी",filteredOf:"कुल {{total}} में से {{filtered}}",highConfidence:"उच्च विश्वास",hoursAgo:"{{count}} घंटे पहले",justNow:"अभी-अभी",last30Days:"पिछले 30 दिन",minutesAgo:"{{count}} मिनट पहले",noAgents:"अभी कोई एजेंट गतिविधि नहीं।",noDiscussions:"अभी कोई चर्चा नहीं।",noMatchingDiscussions:"सक्रिय फ़िल्टर से कोई चर्चा मेल नहीं खाती।",noPhases:"कोई चरण डेटा उपलब्ध नहीं है।",noResults:"कोई मेल खाती चर्चा नहीं",noResultsHint:"सभी डेटा देखने के लिए फ़िल्टर समायोजित करें या साफ़ करें।",noSkills:"कोई क्षमता पंजीकृत नहीं है। कवरेज ट्रैक करने के लिए अपने एजेंट पर कौशल परिभाषित करें।",noStyles:"कोई शैली डेटा उपलब्ध नहीं है।",outcomeChart:"परिणाम वितरण: कुल {{total}}",outcomes:"परिणाम",participatedRecently:"ने चर्चाओं में भाग लिया",perDiscussion:"प्रति चर्चा",phaseChart:"चरण वितरण",phaseDistribution:"चरण वितरण",pickSecondAgent:"{{name}} से तुलना करने के लिए किसी एजेंट पर क्लिक करें",recentDiscussions:"हाल की चर्चाएँ",removeFilter:"फ़िल्टर हटाएं: {{label}}",retry:"पुनः प्रयास करें",sessions:"सत्र",sessionsCompleted:"सत्र सफलतापूर्वक पूर्ण हुए",showingResults:"कुल {{total}} में से {{count}}",skillCoverage:"कौशल कवरेज",styleBreakdown:"चर्चा शैलियाँ",subtitle:"पिछले 30 दिन",title:"अंतर्दृष्टि",total:"कुल",totalDiscussions:"चर्चाएँ",totalSkills:"कौशल",uncoveredSkills:"{{count}} बिना कवर किए कौशल"},Le={activeRate:"सक्रियता दर",activeRateDesc:"पिछले 30 दिनों में सक्रिय एजेंट",dormantAgents:"निष्क्रिय",dormantAgentsDesc:"30+ दिनों से उपयोग न किए गए एजेंट",msgAtRisk:"आपका अधिकांश कार्यबल निष्क्रिय है — उन्हें सक्रिय करने पर विचार करें",msgHealthy:"पिछले 30 दिनों में आपके डिजिटल कार्यबल का {{rate}}% सक्रिय रहा",msgModerate:"कुछ डिजिटल विशेषज्ञों से हाल ही में परामर्श नहीं लिया गया",statusAtRisk:"जोखिम में",statusHealthy:"स्वस्थ",statusModerate:"मध्यम",taskForces:"टास्क फोर्स",taskForcesDesc:"सहयोगी एजेंट समूह",title:"ज्ञान स्वास्थ्य",workforceSize:"कार्यबल का आकार",workforceSizeDesc:"कुल परिनियोजित डिजिटल विशेषज्ञ"},Re={hint:"हम आपकी पसंद याद रखेंगे और अगली बार आपको स्वतः वहाँ ले जाएंगे।",manager:{description:"अपने AI एजेंट बनाएं, कॉन्फ़िगर करें और परिनियोजित करें। वर्कफ़्लो, संसाधन और एकीकरण प्रबंधित करें।",feature1:"एजेंट बनाएं और परिनियोजित करें",feature2:"वर्कफ़्लो और पाइपलाइन कॉन्फ़िगर करें",feature3:"संसाधन और एक्सटेंशन प्रबंधित करें",title:"Manager"},subtitle:"शुरू करने के लिए अपना कार्यक्षेत्र चुनें।",title:"EDDI में आपका स्वागत है",workforce:{description:"ऐसी AI टीमें बनाएं जो मिलकर जटिल चुनौतियों पर बहस, विश्लेषण और समाधान करती हैं।",feature1:"एजेंट टास्क फोर्स बनाएं",feature2:"सहयोगी चर्चाएँ चलाएं",feature3:"संश्लेषित उत्तर प्राप्त करें",title:"कार्यबल"}},Me={assembleTaskForce:"टास्क फोर्स बनाएं",assembleTaskForceDesc:"जटिल चुनौतियों को हल करने के लिए विशेषज्ञों को एकत्र करें",chatWithAgent:"एजेंट से चैट करें",chatWithAgentDesc:"किसी भी डिजिटल विशेषज्ञ के साथ आमने-सामने बातचीत करें",manageWorkforce:"कार्यबल प्रबंधित करें",manageWorkforceDesc:"डिजिटल विशेषज्ञों को कॉन्फ़िगर और परिनियोजित करें",title:"त्वरित कार्रवाइयाँ",viewInsights:"अंतर्दृष्टि देखें",viewInsightsDesc:"अपने कार्यबल की ज्ञान कवरेज ट्रैक करें"},He={addAgent:"एजेंट परिनियोजित करें",count:"{{count}} विशेषज्ञ",ready:"तैयार",title:"आपका डिजिटल कार्यबल",unnamed:"अनाम एजेंट"},Ne={production:"प्रोडक्शन",test:"टेस्ट"},Oe={attachments:e,app:t,auth:o,nav:n,theme:a,language:r,pages:i,common:s,agents:l,agentDetail:c,wizard:d,setupWizard:p,packages:u,packageDetail:m,packageEditor:g,conversations:h,conversationDetail:y,chat:v,resources:D,editor:A,rulesEditor:T,apiCallsEditor:f,mcpcallsEditor:P,llmEditor:S,outputEditor:k,propertySetterEditor:b,dictionaryEditor:C,parserEditor:E,dictionaryPicker:w,coordinator:I,contentEditor:L,logs:R,secrets:M,audit:H,schedules:N,cascadeTrace:O,debugDrawer:x,costDashboard:_,memoryInspector:U,logViewer:F,promptViewer:W,promptPreview:B,studio:V,ragEditor:G,onboarding:K,platform:q,stream:j,createOrWizard:z,groups:J,taskBoard:Q,memories:Y,properties:$,triggers:Z,capabilities:X,exportDialog:ee,importDialog:te,syncPage:oe,sync:ne,userConversations:ae,commandPalette:re,groupWizard:ie,groupTemplates:se,channels:le,channelDetail:ce,hitl:de,chatDrawer:pe,dashboard:ue,errorBoundary:me,gdpr:ge,mockBanner:he,orphans:ye,quotas:ve,secretPicker:De,snippetEditor:Ae,status:Te,userData:fe,variables:Pe,workflowEditor:Se,Workforce:ke,operator:be,groupWorkspace:Ce,workforceWizard:Ee,updates:we,analyticsPage:Ie,knowledgeHealth:Le,landing:Re,quickActions:Me,workforce:He,environments:Ne};export{ke as Workforce,c as agentDetail,l as agents,Ie as analyticsPage,f as apiCallsEditor,t as app,e as attachments,H as audit,o as auth,X as capabilities,O as cascadeTrace,ce as channelDetail,le as channels,v as chat,pe as chatDrawer,re as commandPalette,s as common,L as contentEditor,y as conversationDetail,h as conversations,I as coordinator,_ as costDashboard,z as createOrWizard,ue as dashboard,x as debugDrawer,Oe as default,C as dictionaryEditor,w as dictionaryPicker,A as editor,Ne as environments,me as errorBoundary,ee as exportDialog,ge as gdpr,se as groupTemplates,ie as groupWizard,Ce as groupWorkspace,J as groups,de as hitl,te as importDialog,Le as knowledgeHealth,Re as landing,r as language,S as llmEditor,F as logViewer,R as logs,P as mcpcallsEditor,Y as memories,U as memoryInspector,he as mockBanner,n as nav,K as onboarding,be as operator,ye as orphans,k as outputEditor,m as packageDetail,g as packageEditor,u as packages,i as pages,E as parserEditor,q as platform,B as promptPreview,W as promptViewer,$ as properties,b as propertySetterEditor,Me as quickActions,ve as quotas,G as ragEditor,D as resources,T as rulesEditor,N as schedules,De as secretPicker,M as secrets,p as setupWizard,Ae as snippetEditor,Te as status,j as stream,V as studio,ne as sync,oe as syncPage,Q as taskBoard,a as theme,Z as triggers,we as updates,ae as userConversations,fe as userData,Pe as variables,d as wizard,Se as workflowEditor,He as workforce,Ee as workforceWizard}; diff --git a/src/main/resources/META-INF/resources/assets/hi-Bwj5K1RE.js b/src/main/resources/META-INF/resources/assets/hi-Bwj5K1RE.js deleted file mode 100644 index 06e8da86d2..0000000000 --- a/src/main/resources/META-INF/resources/assets/hi-Bwj5K1RE.js +++ /dev/null @@ -1 +0,0 @@ -const e={title:"अनुलग्नक",empty:"इस बातचीत में कोई अनुलग्नक नहीं है।",loadError:"अनुलग्नक लोड नहीं हो सके।",deleteAll:"सभी हटाएँ",delete:"अनुलग्नक हटाएँ",download:"डाउनलोड",deleted:"अनुलग्नक हटाया गया",deletedAll:"{{count}} अनुलग्नक हटाए गए",confirmDeleteTitle:"अनुलग्नक हटाएँ?",confirmDeleteDesc:"इस फ़ाइल को स्थायी रूप से हटाता है। इसे पूर्ववत नहीं किया जा सकता।",confirmDeleteAllTitle:"सभी अनुलग्नक हटाएँ?",confirmDeleteAllDesc:"इस बातचीत की सभी फ़ाइलें स्थायी रूप से हटाता है। इसे पूर्ववत नहीं किया जा सकता।"},t={title:"EDDI Manager",description:"EDDI संवादात्मक AI प्लेटफ़ॉर्म प्रशासन डैशबोर्ड"},o={login:"लॉगिन",logout:"लॉगआउट",loading:"प्रमाणीकरण हो रहा है…",sessionExpired:"सत्र समाप्त हो गया। कृपया पुनः लॉगिन करें।",profile:"प्रोफ़ाइल",guest:"अतिथि",userMenu:"उपयोगकर्ता मेनू"},n={dashboard:"डैशबोर्ड",agents:"एजेंट",packages:"वर्कफ़्लो",conversations:"बातचीत",coordinator:"कोऑर्डिनेटर",schedules:"शेड्यूल",logs:"लॉग",orphans:"अनाथ आइटम",secrets:"सीक्रेट्स",audit:"ऑडिट लॉग",quotas:"कोटा",groups:"समूह",chat:"चैट",resources:"संसाधन",sectionManagement:"प्रबंधन",sectionDevelopment:"विकास",sectionOperations:"संचालन",mainNavigation:"मुख्य नेविगेशन",openMenu:"नेविगेशन मेनू खोलें",sectionCore:"मुख्य",sectionBuild:"बनाएं और परखें",sectionMonitor:"निगरानी",sectionAdmin:"प्रशासन",studio:"स्टूडियो",gdpr:"गोपनीयता",memories:"उपयोगकर्ता स्मृति",properties:"गुण",triggers:"ट्रिगर",capabilities:"क्षमताएं",sync:"सिंक",updates:"अपडेट",channels:"चैनल",approvals:"अनुमोदन",userConversations:"उपयोगकर्ता वार्तालाप",userData:"उपयोगकर्ता डेटा",variables:"चर",sectionExternal:"बाहरी",activeConversations:"सक्रिय बातचीत",openapi:"OpenAPI",docs:"दस्तावेज़",modeManager:"प्रबंधक",modeWorkforce:"कार्यबल",switchMode:"कार्यक्षेत्र बदलें",operator:"प्लेटफ़ॉर्म ऑपरेटर",workforce:"कार्यबल",monitoring:"वार्तालाप निगरानी",analytics:"विश्लेषण"},a={light:"लाइट",dark:"डार्क",system:"सिस्टम"},r={label:"भाषा",en:"English",de:"Deutsch",fr:"Français",es:"Español",ar:"العربية",zh:"中文",th:"ไทย",ja:"日本語",ko:"한국어",pt:"Português",hi:"हिन्दी",switchFailed:"वह भाषा लोड नहीं हो सकी। कृपया पुनः प्रयास करें।"},i={dashboard:{title:"डैशबोर्ड",subtitle:"EDDI Agents और वार्तालापों का अवलोकन",activeAgents:"सक्रिय Agents",totalWorkflows:"वर्कफ़्लो",totalResources:"संसाधन",totalConversations:"बातचीत",quickActions:"त्वरित कार्य",recentAgents:"हाल के Agents",noRecentAgents:"अभी तक कोई Agent नहीं है। अपना पहला Agent बनाएं!"},agents:{undeployPreviousVersionsHint:"इस एजेंट के सभी पुराने संस्करण भी परिवेश से हटा देता है।",undeployPreviousVersionsLabel:"इसे और सभी पिछले संस्करणों को अनडिप्लॉय करें",undeployEndConversationsHint:"इस परिनियोजन पर सभी चल रही बातचीत को तुरंत समाप्त करता है। इसे पूर्ववत नहीं किया जा सकता।",undeployEndConversationsLabel:"सभी सक्रिय बातचीत समाप्त करें",confirmUndeployDescription:"संस्करण {{version}} को {{environment}} से अनडिप्लॉय किया जाएगा।",confirmUndeploy:"एजेंट अनडिप्लॉय करें?",title:"एजेंट",subtitle:"अपने संवादात्मक AI Agents प्रबंधित करें"},packages:{title:"वर्कफ़्लो",subtitle:"Workflows और एक्सटेंशन कॉन्फ़िगर करें"},conversations:{permanentDeleteSuccess:"स्थायी रूप से हटाया गया",softDeleteSuccess:"बातचीत हटाई गई",deletePermanentAction:"स्थायी रूप से हटाएँ",deletePermanentLabel:"स्थायी रूप से हटाएँ — अनुलग्नक, मेमोरी स्नैपशॉट और अनुमोदन इतिहास भी मिटा देता है। इसे पूर्ववत नहीं किया जा सकता।",confirmDeleteSoft:"डिफ़ॉल्ट रूप से यह सॉफ्ट डिलीट है — बातचीत सूचियों से छिप जाती है लेकिन इसका डेटा सर्वर पर बना रहता है।",title:"बातचीत",subtitle:"Agent वार्तालाप देखें और प्रबंधित करें"},resources:{title:"संसाधन",subtitle:"व्यवहार नियम, शब्दकोश, आउटपुट सेट और अधिक प्रबंधित करें"},chat:{title:"चैट",subtitle:"Deploy किए गए Agents से बात करें"},channels:{title:"चैनल",subtitle:"एजेंट और समूहों को Slack जैसे मैसेजिंग प्लेटफ़ॉर्म से जोड़ें"},groups:{title:"समूह",subtitle:"संरचित चर्चा और सहयोग के लिए बहु-Agent चर्चा समूह"},approvals:"लंबित अनुमोदन",approvalsSubtitle:"मानव इनपुट की प्रतीक्षा कर रही बातचीत की समीक्षा और निर्णय लें"},s={add:"जोड़ें",agent:"एजेंट",back:"वापस",cardView:"कार्ड दृश्य",clear:"चयन साफ़ करें",confirm:"पुष्टि करें",description:"विवरण",group:"समूह",id:"ID",listView:"सूची दृश्य",modified:"संशोधित",name:"नाम",new:"नया",version:"संस्करण",viewMode:"दृश्य मोड",loading:"लोड हो रहा है...",error:"कुछ गलत हो गया",retry:"पुनः प्रयास करें",save:"सहेजें",cancel:"रद्द करें",delete:"हटाएं",remove:"हटाएं",create:"बनाएं",edit:"संपादित करें",search:"खोजें...",noResults:"कोई परिणाम नहीं मिला",duplicate:"प्रतिलिपि",close:"बंद करें",skipToMain:"मुख्य सामग्री पर जाएं",opensNewTab:"नए टैब में खुलता है",moreActions:"अधिक कार्य",sortByName:"नाम से क्रमबद्ध करें",sortByVersion:"संस्करण से क्रमबद्ध करें",sortByModified:"संशोधन तिथि से क्रमबद्ध करें",apply:"लागू करें",copied:"कॉपी हो गया",copy:"कॉपी",saving:"सहेज रहे हैं…",showMore:"Show More",showLess:"Show Less",copyFailed:"क्लिपबोर्ड पर कॉपी करने में विफल",loadError:"डेटा लोड करने में विफल",actions:"क्रियाएँ",view:"देखें",refresh:"ताज़ा करें",previous:"पिछला",next:"अगला",dismiss:"खारिज करें",refreshFailed:"रीफ़्रेश नहीं हो सका — अंतिम लोड किया गया डेटा दिखाया जा रहा है।",settings:"सेटिंग्स",history:"इतिहास",copyId:"एजेंट ID कॉपी करें",off:"बंद",on:"चालू"},l={confirmDeleteDescription:"इस क्रिया को पूर्ववत नहीं किया जा सकता। एजेंट और इसका सारा डेटा स्थायी रूप से हटा दिया जाएगा।",confirmUndeploy:"एजेंट अनडिप्लॉय करें?",confirmUndeployDescription:"संस्करण {{version}} को {{environment}} से अनडिप्लॉय किया जाएगा।",createSuccess:"Agent सफलतापूर्वक बनाया गया",deleteAgent:"एजेंट हटाएं",deployError:"Deploy विफल",deploySuccess:"Agent सफलतापूर्वक Deploy हुआ",noDescription:"कोई विवरण नहीं",selectAgent:"Agent चुनें",undeployEndConversationsHint:"इस परिनियोजन पर सभी चल रही बातचीत को तुरंत समाप्त करता है। इसे पूर्ववत नहीं किया जा सकता।",undeployEndConversationsLabel:"सभी सक्रिय बातचीत समाप्त करें",undeployError:"अनडिप्लॉय विफल",undeployPreviousVersionsHint:"इस एजेंट के सभी पुराने संस्करण भी परिवेश से हटा देता है।",undeployPreviousVersionsLabel:"इसे और सभी पिछले संस्करणों को अनडिप्लॉय करें",undeploySuccess:"Agent अनडिप्लॉय हुआ",unnamed:"अनामित एजेंट",deploy:"तैनात करें",undeploy:"अनडिप्लॉय",createAgent:"Agent बनाएं",createTitle:"नया Agent बनाएं",name:"नाम",namePlaceholder:"मेरा Agent",description:"विवरण",descriptionPlaceholder:"यह Agent क्या करता है, वर्णन करें...",empty:"अभी तक कोई Agent नहीं है। अपना पहला Agent बनाएं!",confirmDelete:"क्या आप वाकई इस Agent को हटाना चाहते हैं?",count_one:"{{count}} एजेंट",count_other:"{{count}} एजेंट",export:"निर्यात",exporting:"निर्यात हो रहा है...",exportSuccess:"Agent सफलतापूर्वक निर्यात हुआ",import:"Agent आयात करें",importing:"आयात हो रहा है...",importSuccess:"Agent सफलतापूर्वक आयात हुआ",importError:"Agent आयात विफल",emptyDescription:"कुछ ही मिनटों में पूरी तरह से कॉन्फ़िगर किया गया Agent बनाने के लिए विज़ार्ड का उपयोग करें।",chat:"चैट",deployAndChat:"डिप्लॉय करें और चैट करें",openExternalChat:"नए टैब में खोलें",liveIn:"{{environment}} में सक्रिय",chatIn:"{{environment}} में चैट करें",openExternalChatIn:"{{environment}} चैट नए टैब में खोलें",deployToProduction:"प्रोडक्शन में तैनात करें",undeployFromProduction:"प्रोडक्शन से हटाएँ",deployFailedIn:"{{environment}} में तैनाती विफल"},c={a2aDescHint:"Agent Card में दिखाया जाता है — अन्य एजेंट को यह समझने में मदद करता है कि यह एजेंट क्या करता है",a2aDescPlaceholder:"यह एजेंट क्या करता है?",a2aDescription:"एजेंट विवरण",a2aEnable:"A2A सक्षम करें",a2aEnabled:"सक्षम",a2aEnabledDesc:"इस एजेंट को A2A प्रोटोकॉल के माध्यम से अन्य एजेंट द्वारा खोजने योग्य बनाएं। अन्य EDDI इंस्टेंस इस एजेंट को एक टूल के रूप में खोज और कॉल कर सकते हैं।",a2aEndpoints:"एंडपॉइंट",a2aNoSkills:"कोई कौशल नहीं — एक डिफ़ॉल्ट 'chat' कौशल उपयोग किया जाएगा",a2aSection:"एजेंट-टू-एजेंट (A2A)",a2aSkillPlaceholder:"उदा. translation, code-review",a2aSkills:"A2A कौशल",addAttribute:"विशेषता जोड़ें",agentCardPreview:"Agent Card पूर्वावलोकन",agentDid:"एजेंट DID",attributeKey:"कुंजी",attributeValue:"मान",attributesLabel:"विशेषताएं",attrs:"विशेषताएं",autoSnapshotEnable:"स्वचालित चेकपॉइंट सक्षम करें",capabilities:"क्षमताएं",capabilitiesDesc:"A2A एजेंट कार्ड और क्षमता रजिस्ट्री के लिए घोषित कौशल। प्रतिनिधिमंडल लक्ष्य चुनते समय अन्य एजेंट इन्हें खोजते हैं।",capabilityPlaceholder:"कौशल का नाम खोजें या टाइप करें...",comingSoon:"जल्द आ रहा है",defaultVisibility:"डिफ़ॉल्ट दृश्यता",dreamConsolidation:"स्वप्न समेकन",dreamDesc:"पृष्ठभूमि LLM जॉब जो विरोधाभासों को हल करती है, पुरानी प्रविष्टियों को हटाती है, और वैकल्पिक रूप से बातचीत का सारांश बनाती है।",enableMemoryTools:"मेमोरी टूल सक्षम करें",enableSwd:"सख्त लेखन अनुशासन सक्षम करें",forkingDisabledTooltip:"भविष्य के रिलीज़ में उपलब्ध",forkingEnabled:"सत्र फ़ोर्किंग",forkingNote:"सत्र फ़ोर्किंग एंडपॉइंट (POST /v6/conversations/{{id}}/fork) अभी उपलब्ध नहीं है।",guardrails:"लेखन गार्डरेल",identity:"क्रिप्टोग्राफ़िक पहचान",keyExpired:"समाप्त",keyVersion:"कुंजी v{{version}}",legacyKey:"लीगेसी कुंजी (v0)",maxCheckpoints:"अधिकतम चेकपॉइंट",maxCheckpointsHint:"प्रति बातचीत",maxEntriesPerUser:"प्रति उपयोगकर्ता अधिकतम",maxForks:"अधिकतम फ़ोर्क",maxForksHint:"प्रति बातचीत",maxRecallEntries:"अधिकतम रिकॉल",memoryPolicy:"मेमोरी नीति",memoryPolicyDesc:"सख्त लेखन अनुशासन नियंत्रित करता है कि बातचीत चरण के दौरान प्रॉपर्टी अपडेट विफल होने पर क्या होता है। चुनें कि इंजन आंशिक रूप से कमिट किए गए डेटा को कैसे संभालता है।",onCapReached:"सीमा पहुंचने पर",onFailure:"विफलता पर रणनीति",onFailureDigest:"डाइजेस्ट — परिवर्तन रोलबैक करें, LLM को सारांश रिपोर्ट करें",onFailureExclude:"सभी बहिष्कृत करें — सभी प्रॉपर्टी अपडेट चुपचाप छोड़ दें",onFailureKeep:"सभी रखें — परिवर्तन रखें और चेतावनी लॉग करें",openWorkflow:"खोलें",outdated:"पुराना",publicKey:"सार्वजनिक कुंजी",publicKeyHint:"पहले साइनिंग पर स्वतः-जनरेट",publicKeys:"सार्वजनिक कुंजियां",recallOrder:"रिकॉल क्रम",requirePeer:"पीयर सत्यापन आवश्यक करें",requirePeerDesc:"उन एजेंट से आने वाले A2A कार्य अस्वीकार करें जो अपनी पहचान साबित नहीं कर सकते",securityFlagConfirmBtn:"फिर भी सक्षम करें",securityFlagConfirmDesc:"इस संस्करण में क्रिप्टोग्राफ़िक साइनिंग अभी उपलब्ध नहीं है। इस फ़्लैग को सक्षम करने से बैकएंड HTTP 400 के साथ सहेजना अस्वीकार करेगा। क्या आप वाकई आगे बढ़ना चाहते हैं?",securityFlagConfirmTitle:"सुरक्षा फ़्लैग सक्षम करें?",securityFlagWarning:"इस संस्करण में क्रिप्टोग्राफ़िक साइनिंग अभी उपलब्ध नहीं है। इन फ़्लैग के सक्षम होने पर बैकएंड सहेजना अस्वीकार करेगा (HTTP 400)।",securityFlags:"साइनिंग और सत्यापन",securityIdentity:"सुरक्षा और पहचान",sessionManagement:"सत्र प्रबंधन",sessionManagementDesc:"मेमोरी चेकपॉइंट जोखिम भरे ऑपरेशन से पहले बातचीत की स्थिति कैप्चर करते हैं, विफलता पर साफ़ रोलबैक सक्षम करते हैं।",signA2A:"अंतर-एजेंट (A2A) संदेशों पर हस्ताक्षर करें",signA2ADesc:"छेड़छाड़-रोधी के लिए आउटबाउंड A2A संदेशों पर क्रिप्टोग्राफ़िक रूप से हस्ताक्षर करें",signMcp:"MCP आमंत्रणों पर हस्ताक्षर करें",signMcpDesc:"सुरक्षित सर्वर सत्यापन के लिए MCP टूल कॉल में हस्ताक्षर संलग्न करें",skillAlreadyExists:"यह कौशल पहले से घोषित है",switchToLatest:"नवीनतम पर स्विच करें",toggleAttributes:"विशेषताएं टॉगल करें",triggerBeforeAction:"कार्य से पहले",triggerBeforeTool:"टूल निष्पादन से पहले",triggerOn:"ट्रिगर पर",updateToLatest:"नवीनतम संस्करण में अपडेट करें",userMemory:"उपयोगकर्ता स्मृति",userMemoryDesc:"LLM टूल (remember/recall/forget) के साथ स्थायी प्रति-उपयोगकर्ता स्मृति। इस टॉगल की परवाह किए बिना बुनियादी longTerm प्रॉपर्टी दृढ़ता हमेशा काम करती है।",viewingOldVersion:"आप संस्करण {{current}} देख रहे हैं। नवीनतम संस्करण {{latest}} है।",workflowAdded:"Workflow जोड़ा गया",workflowRemoved:"Workflow हटाया गया",workflowUpdated:"Workflow नवीनतम संस्करण में अपडेट किया गया",title:"Agent विवरण",backToAgents:"Agents पर वापस जाएं",packages:"वर्कफ़्लो",noWorkflows:"अभी तक कोई Workflows नहीं जोड़ा गया",addWorkflow:"Workflow जोड़ें",selectWorkflow:"जोड़ने के लिए Workflow चुनें",rawConfig:"कच्चा कॉन्फ़िगरेशन",editName:"नाम संपादित करें",editDescription:"विवरण संपादित करें",clickToEdit:"संपादित करने के लिए क्लिक करें",noDescription:"कोई विवरण नहीं",duplicate:"प्रतिलिपि",duplicating:"प्रतिलिपि बनाई जा रही है...",duplicateSuccess:"Agent सफलतापूर्वक प्रतिलिपि बनाया गया",environments:"परिवेश",envProduction:"उत्पादन",envTest:"परीक्षण",savingAgent:"Agent सहेजा जा रहा है...",savedAgent:"Agent सफलतापूर्वक सहेजा गया",saveError:"Agent सहेजने में विफल",deployToEnv:"{{env}} में Deploy करें",undeployFromEnv:"{{env}} से हटाएं",openStudio:"स्टूडियो में खोलें",maxKeyLength:"अधिकतम कुंजी लंबाई",maxValueLength:"अधिकतम मान लंबाई",maxWritesPerTurn:"प्रति बारी अधिकतम लेखन",dreamSchedule:"शेड्यूल (cron)",dreamLlmProvider:"LLM प्रदाता",dreamLlmModel:"LLM मॉडल",dreamMaxCost:"प्रति रन अधिकतम लागत ($)",dreamPruneDays:"सफ़ाई के बाद (दिन)",dreamBatchSize:"बैच आकार",detectContradictions:"विरोधाभास पहचानें",summarizeInteractions:"बातचीत सारांश करें",confidenceLow:"कम",confidenceMedium:"मध्यम",confidenceHigh:"उच्च",visibilitySelf:"स्वयं",visibilityGlobal:"वैश्विक",onCapEvict:"सबसे पुराना हटाएं",onCapReject:"अस्वीकार करें",recallMostRecent:"सबसे हालिया",recallMostRelevant:"सबसे प्रासंगिक",channels:"चैनल कनेक्टर",channelsDesc:"इस एजेंट को Slack चैनलों से कनेक्ट करें। प्रत्येक चैनल कनेक्टर स्वतंत्र रूप से अपने क्रेडेंशियल्स के साथ कॉन्फ़िगर किया जाता है, मल्टी-वर्कस्पेस सेटअप का समर्थन करता है।",noChannels:"कोई चैनल कॉन्फ़िगर नहीं",noChannelsDesc:"उपयोगकर्ताओं को Slack से इस एजेंट के साथ इंटरैक्ट करने के लिए एक Slack चैनल जोड़ें।",addSlackChannel:"Slack चैनल जोड़ें",slackChannel:"Slack चैनल",removeChannel:"चैनल हटाएं",removeChannelConfirm:"इस Slack चैनल कनेक्टर को हटाएं?",removeChannelDesc:"This action will permanently disconnect this channel.",channelId:"चैनल आईडी",channelIdHint:"चैनल आईडी C से शुरू होती है जिसके बाद अपरकेस अल्फ़ान्यूमेरिक वर्ण आते हैं",botToken:"बॉट टोकन",botTokenPlaceholder:"xoxb-… या ${vault:slack-bot-token}",botTokenHint:"Slack बॉट यूज़र OAuth टोकन। सुरक्षा के लिए वॉल्ट संदर्भ का उपयोग करें।",signingSecret:"साइनिंग सीक्रेट",signingSecretPlaceholder:"हेक्स स्ट्रिंग या ${vault:slack-signing-secret}",signingSecretHint:"आपके Slack ऐप के बेसिक इन्फ़ॉर्मेशन पेज से। सुरक्षा के लिए वॉल्ट संदर्भ का उपयोग करें।",groupIdOptional:"ग्रुप आईडी (वैकल्पिक)",groupIdPlaceholder:"मल्टी-एजेंट ग्रुप कॉन्फ़िग आईडी",groupIdHint:'इस Slack चैनल से "group: प्रश्न" मल्टी-एजेंट चर्चा सक्षम करें।',slackSetupGuide:"Slack सेटअप गाइड",slackWebhookUrl:"Webhook URL",slackWebhookCopied:"Webhook URL कॉपी किया गया",slackStep1:"api.slack.com/apps पर एक Slack ऐप बनाएं और इसे अपने वर्कस्पेस में इंस्टॉल करें।",slackStep2:"बॉट टोकन (xoxb-…) और साइनिंग सीक्रेट को EDDI वॉल्ट में कॉपी करें और नीचे चैनल कॉन्फ़िगर करें।",slackStep3:"फिर अपने Slack ऐप में Event Subscriptions सक्षम करें, ऊपर Webhook URL पेस्ट करें और सब्सक्राइब करें:",slackSetupNote:"महत्वपूर्ण: Event Subscriptions सक्षम करने से पहले नीचे चैनल कॉन्फ़िगर करें — Slack एक URL सत्यापन चुनौती भेजता है जिसके लिए EDDI में साइनिंग सीक्रेट कॉन्फ़िगर होना आवश्यक है।",slackRequiredScopes:"आवश्यक बॉट टोकन स्कोप",hitlConfig:"ह्यूमन-इन-द-लूप",hitlConfigDesc:"जब यह एजेंट मानवीय स्वीकृति के लिए बातचीत रोकता है, तो ये सेटिंग्स नियंत्रित करती हैं कि कितनी देर प्रतीक्षा करनी है और समय पर निर्णय न होने पर क्या होगा।",hitlEnable:"मानवीय-स्वीकृति समय-सीमाएँ कॉन्फ़िगर करें",hitlTimeoutPolicy:"यदि समय पर निर्णय न हो",hitlApprovalTimeout:"स्वीकृति समय-सीमा (ISO-8601)",hitlTimeoutInvalid:"एक सीमित नीति के लिए धनात्मक ISO-8601 अवधि आवश्यक है, जैसे PT15M।",hitlTimeoutHint:"जैसे PT30S, PT15M, PT2H।",hitlPauseReason:"स्वीकृति का कारण (अनुमोदकों को दिखाया गया)",hitlPauseReasonPlaceholder:"उदा. हटाने के लिए प्रबंधक की स्वीकृति आवश्यक है",toolApprovalsEnable:"विशिष्ट टूल कॉल को अनुमोदन के लिए गेट करें",toolApprovalsDesc:'जब मॉडल किसी मिलान वाले टूल को आमंत्रित करे तो उसके चलने से पहले रुकें। खाली "अनुमोदन आवश्यक" सूची टूल गेटिंग को अक्षम कर देती है।',toolRequireApproval:"अनुमोदन आवश्यक (ग्लोब पैटर्न, प्रति पंक्ति एक)",toolPatternHint:"'*' एकमात्र वाइल्डकार्ड है। वैकल्पिक स्रोत उपसर्ग:",toolExempt:"छूट प्राप्त (हमेशा अनुमत, प्रति पंक्ति एक)",toolMaxPauses:"अधिकतम विराम / टर्न (1–10)",toolMaxAuto:"अधिकतम स्वतः-अनुमोदन / टर्न (0–10)",toolOnNoProgress:"बिना-प्रगति पुनः-विराम पर",toolTimeoutPolicy:"टूल-विराम टाइमआउट नीति",toolTimeoutInherit:"एजेंट से इनहेरिट करें",toolAutoApproveDemotion:"एजेंट-स्तरीय AUTO_APPROVE टूल अनुमोदनों पर लागू नहीं होता — जब तक आप ऊपर टूल-विराम टाइमआउट नीति सेट नहीं करते, टूल विराम अनिश्चित काल तक प्रतीक्षा करेंगे।",toolPauseReason:"अनुमोदक कारण ({toolNames} अनुमत)",toolPauseReasonPlaceholder:"जैसे {toolNames} के लिए अनुमोदन आवश्यक",toolPendingMessage:"विराम के दौरान अंतिम-उपयोगकर्ता संदेश ({toolNames} अनुमत)",toolPendingMessagePlaceholder:"जैसे {toolNames} को अनुमोदित करने के लिए मानव की प्रतीक्षा…",toolInGroupTurns:"समूह टर्न के भीतर, किसी सदस्य की गेटेड टूल कॉल स्वतः अस्वीकृत (REJECT) होती है।"},d={title:"Agent विज़ार्ड"},p={baseUrlHintCloud:"केवल तभी आवश्यक जब प्रॉक्सी, निजी परिनियोजन, या Azure OpenAI एंडपॉइंट का उपयोग कर रहे हों",baseUrlHintLocal:"आवश्यक — वह URL जहां आपका स्थानीय मॉडल सर्वर चल रहा है",modelHint:"अपने प्रदाता द्वारा समर्थित कोई भी मॉडल नाम टाइप करें, या सुझावों में से एक चुनें",modelPlaceholder:"उदा. {{model}} (या आपका प्रदाता जो भी मॉडल समर्थन करता है)",title:"Agent निर्माण विज़ार्ड",subtitle:"कुछ ही मिनटों में पूरी तरह कॉन्फ़िगर किया गया Agent बनाएं",backToAgents:"Agents पर वापस जाएं",next:"अगला",back:"पीछे",createOnly:"केवल बनाएं",createAndDeploy:"बनाएं और Deploy करें",typeTitle:"किस प्रकार का Agent?",typeDesc:"बनाने के लिए Agent का प्रकार चुनें",standardAgent:"मानक एजेंट",apiAgent:"एपीआई एजेंट",standardDesc:"LLM-संचालित संवादात्मक AI जिसमें टूल, Quick Replies और भावना विश्लेषण शामिल है",apiDesc:"API Agent स्वचालित रूप से बनाने के लिए OpenAPI/Swagger विनिर्देश आयात करें",infoTitle:"Agent पहचान",infoDesc:"अपने Agent को एक नाम और व्यक्तित्व दें",agentName:"Agent का नाम",namePlaceholder:"उदा: ग्राहक सहायता बॉट",systemPrompt:"सिस्टम प्रॉम्प्ट",promptPlaceholder:"आप एक सहायक AI असिस्टेंट हैं जो...",promptHint:"यह निर्देश निर्धारित करता है कि आपका Agent कैसे व्यवहार और प्रतिक्रिया करता है।",llmTitle:"LLM कॉन्फ़िगरेशन",llmDesc:"Agent को चलाने वाला AI मॉडल चुनें",provider:"प्रदाता",model:"मॉडल",apiKey:"API कुंजी",baseUrl:"बेस URL",baseUrlPlaceholder:"कस्टम endpoint URL",optional:"वैकल्पिक",apiSpecTitle:"OpenAPI विनिर्देश",apiSpecDesc:"अपने API का OpenAPI/Swagger विनिर्देश प्रदान करें",specByUrl:"यूआरएल लिंक",specByFile:"फ़ाइल",specByPaste:"चिपकाएं",fetch:"प्राप्त करें",specFetched:"विनिर्देश लोड हो गया!",specFetchError:"विनिर्देश प्राप्त करने में विफल",dropFile:"OpenAPI फ़ाइल यहां ड्रॉप करें",dropHint:"JSON या YAML प्रारूप",browse:"फ़ाइलें ब्राउज़ करें",pasteSpec:"OpenAPI/Swagger JSON या YAML यहां चिपकाएं...",specLoaded:"फ़ाइल लोड हुई: {{name}}",specReady:"विनिर्देश लोड हुआ ({{chars}} अक्षर)",apiBaseUrlLabel:"API बेस URL",apiAuthLabel:"API प्रमाणीकरण हेडर",endpointFilter:"Endpoint फ़िल्टर",endpointFilterPlaceholder:"कॉमा से अलग: GET /users, POST /orders",featuresTitle:"सुविधाएं और विकल्प",featuresDesc:"Agent की क्षमताओं को अनुकूलित करें",introMessage:"स्वागत संदेश",introMessageDesc:"वार्तालाप शुरू होने पर दिखाया जाने वाला अभिवादन",quickReplies:"त्वरित उत्तर",quickRepliesDesc:"LLM क्लिक करने योग्य उत्तर सुझाव उत्पन्न करता है",sentiment:"भावना विश्लेषण",sentimentDesc:"उपयोगकर्ता की भावना, इरादे और तात्कालिकता को रियलटाइम में ट्रैक करें",structuredOutput:"संरचित आउटपुट",structuredOutputDesc:"LLM सादे टेक्स्ट की बजाय JSON ऑब्जेक्ट से उत्तर देता है",structuredOutputInfo:"सक्षम करने पर, LLM संरचित फ़ील्ड वाले JSON ऑब्जेक्ट से उत्तर देगा। आपके सिस्टम प्रॉम्प्ट में एक JSON स्कीमा जोड़ा जाएगा और मॉडल JSON प्रतिक्रिया मोड में सेट होगा।",builtInTools:"अंतर्निहित टूल",builtInToolsDesc:"EDDI की अंतर्निहित टूल लाइब्रेरी सक्षम करें (कैलकुलेटर, दिनांक/समय, आदि)",toolsWhitelist:"श्वेतसूची (खाली = सभी)",mcpServers:"MCP सर्वर",mcpServersDesc:"बाहरी टूल के लिए Model Context Protocol सर्वर",autoDeploy:"स्वचालित परिनियोजन",autoDeployDesc:"बनाने के बाद तुरंत Agent Deploy करें",environment:"परिवेश",envProduction:"उत्पादन",envTest:"परीक्षण",reviewTitle:"समीक्षा करें और बनाएं",reviewDesc:"बनाने से पहले कॉन्फ़िगरेशन की समीक्षा करें",reviewType:"प्रकार",reviewName:"नाम",reviewPrompt:"सिस्टम प्रॉम्प्ट",reviewProvider:"प्रदाता",reviewModel:"मॉडल",reviewSpec:"OpenAPI स्पेक",reviewIntro:"स्वागत संदेश",reviewDeploy:"डिप्लॉय",success:"Agent सफलतापूर्वक बनाया गया!",agentCreated:"Agent बनाया गया!",deployed:"Deploy हो गया",endpointsParsed:"{{count}} API endpoints का विश्लेषण किया गया",viewAgent:"Agent देखें",createAnother:"एक और बनाएं",allTools:"सभी उपकरण",selectSpecific:"विशिष्ट चुनें",allToolsInfo:"सभी {{count}} अंतर्निहित उपकरण आपके एजेंट के लिए उपलब्ध होंगे। कौन से उपकरण सक्षम करने हैं, यह सीमित करने के लिए「विशिष्ट चुनें」चुनें।",availableTools:"उपलब्ध उपकरण",toolCount:"{{total}} में से {{selected}} चयनित",specTooLarge:"यह विनिर्देश यहाँ लोड करने के लिए बहुत बड़ा है",specUrlInvalid:"यह मान्य URL नहीं है",specUrlScheme:"केवल http:// और https:// URL समर्थित हैं"},u={confirmDeleteDescription:"इस क्रिया को पूर्ववत नहीं किया जा सकता। Workflow और इसका सारा डेटा स्थायी रूप से हटा दिया जाएगा।",createSuccess:"Workflow सफलतापूर्वक बनाया गया",unnamed:"अनामित Workflow",createWorkflow:"Workflow बनाएं",createTitle:"नया Workflow बनाएं",name:"नाम",namePlaceholder:"मेरा Workflow",description:"विवरण",descriptionPlaceholder:"यह Workflow क्या करता है, वर्णन करें...",noDescription:"कोई विवरण नहीं",empty:"अभी तक कोई Workflow नहीं है। अपना पहला Workflow बनाएं!",confirmDelete:"क्या आप वाकई इस Workflow को हटाना चाहते हैं?",count_one:"{{count}} वर्कफ़्लो",count_other:"{{count}} वर्कफ़्लो",emptyDescription:"Workflow आपके Agents के लिए प्रोसेसिंग पाइपलाइन को परिभाषित करते हैं।"},m={backToAgent:"एजेंट पर वापस जाएं",title:"Workflow विवरण",backToWorkflows:"Workflows पर वापस जाएं",extensions:"एक्सटेंशन",noExtensions:"इस Workflow में कोई एक्सटेंशन नहीं है",rawConfig:"कच्चा कॉन्फ़िगरेशन"},g={chooseConfig:"कॉन्फ़िग चुनें",chooseConfigHint:"एक नया कॉन्फ़िग बनाएं या मौजूदा को लिंक करें",configCreated:"कॉन्फ़िग बनाया गया — पाइपलाइन में जोड़ा गया",createNewConfig:"नया कॉन्फ़िग बनाएं",createNewConfigHint:"एक खाली कॉन्फ़िग बनाता है जिसे आप बाद में संपादित कर सकते हैं",noExistingConfigs:"कोई मौजूदा कॉन्फ़िग नहीं मिला — ऊपर एक नया बनाएं",orExisting:"या मौजूदा का उपयोग करें",updateToLatest:"नवीनतम संस्करण में अपडेट करें",title:"Workflow संपादक",pipeline:"एक्सटेंशन Pipeline",addHint:"प्रोसेसिंग Pipeline बनाने के लिए एक्सटेंशन जोड़ें",addHintDialog:"Pipeline में जोड़ने के लिए एक्सटेंशन प्रकार चुनें",reorder:"एक्सटेंशन पुनः क्रमित करें",saved:"Workflow सफलतापूर्वक सहेजा गया",saveError:"Workflow सहेजने में विफल",noTasks:"[EN] No tasks in this workflow",addTask:"[EN] Add Task"},h={confirmDeleteSoft:"डिफ़ॉल्ट रूप से यह सॉफ्ट डिलीट है — बातचीत सूचियों से छिप जाती है लेकिन इसका डेटा सर्वर पर बना रहता है।",deletePermanentLabel:"स्थायी रूप से हटाएँ — अनुलग्नक, मेमोरी स्नैपशॉट और अनुमोदन इतिहास भी मिटा देता है। इसे पूर्ववत नहीं किया जा सकता।",monitorSubtitle:"प्रति एजेंट चल रही बातचीत की निगरानी और थोक-प्रबंधन करें।",noActiveDesc:"इस एजेंट संस्करण की अभी कोई चल रही बातचीत नहीं है।",purgeDesc:"उन ENDED बातचीत को स्थायी रूप से हटाएं जिनकी अंतिम गतिविधि दिए गए दिनों की संख्या से पुरानी है।",selectAgentPromptDesc:"सक्रिय बातचीत प्रति एजेंट और संस्करण के अनुसार सूचीबद्ध हैं।",searchPlaceholder:"वार्तालाप ID से खोजें...",id:"बातचीत",agent:"एजेंट",state:"स्थिति",lastActivity:"अंतिम गतिविधि",actions:"क्रियाएँ",empty:"अभी तक कोई वार्तालाप नहीं। Agent Deploy करें और चैट शुरू करें!",confirmDelete:"क्या आप वाकई इस वार्तालाप को हटाना चाहते हैं?",count_one:"{{count}} बातचीत",count_other:"{{count}} बातचीत",emptyDescription:"एक Agent Deploy करें और Chat पेज से Conversation शुरू करें।",filterAll:"सभी",stateActive:"सक्रिय",stateInProgress:"प्रगति में",stateEnded:"समाप्त",stateInterrupted:"बाधित",permanentDeleteSuccess:"स्थायी रूप से हटाया गया",softDeleteSuccess:"बातचीत हटाई गई",monitorActive:"सक्रिय निगरानी",filterByAgent:"एजेंट के अनुसार फ़िल्टर करें",filterByVersion:"एजेंट संस्करण के अनुसार फ़िल्टर करें",allVersions:"सभी संस्करण",version:"v{{version}}",showingRange:"{{from}}–{{to}} दिखा रहे हैं",deleteConversation:"बातचीत हटाएं",steps:"चरण",perPage:"प्रति पृष्ठ",pageNumber:"पृष्ठ {{page}}",deletePermanentAction:"स्थायी रूप से हटाएं",step:"चरण",monitorTitle:"सक्रिय बातचीत",backToList:"बातचीत पर वापस",selectAgentToMonitor:"एक एजेंट चुनें",selectedCount:"{{count}} चयनित",endSelected:"चयनित समाप्त करें",selectAgentPrompt:"निगरानी के लिए एक एजेंट चुनें",noActive:"कोई सक्रिय बातचीत नहीं",selectAll:"सभी चुनें",selectOne:"{{id}} चुनें",purgeTitle:"समाप्त बातचीत साफ़ करें",olderThanDays:"इससे पुराना (दिन)",purgeAction:"साफ़ करें",confirmEndTitle:"चयनित बातचीत समाप्त करें?",confirmPurgeTitle:"समाप्त बातचीत साफ़ करें?",confirmEndDesc_one:"{{count}} बातचीत को ENDED पर सेट किया जाएगा। रुकी हुई (मानव की प्रतीक्षा) बातचीत अनुमोदन-जागरूक पथ के माध्यम से सुरक्षित रूप से समाप्त की जाती हैं।",confirmEndDesc_other:"{{count}} बातचीत को ENDED पर सेट किया जाएगा। रुकी हुई (मानव की प्रतीक्षा) बातचीत अनुमोदन-जागरूक पथ के माध्यम से सुरक्षित रूप से समाप्त की जाती हैं।",confirmPurgeDesc_one:"यह {{days}} दिन से पुरानी ENDED बातचीत को स्थायी रूप से हटा देता है, जिसमें उनकी संग्रहित मेमोरी और अनुलग्नक शामिल हैं। इसे पूर्ववत नहीं किया जा सकता।",confirmPurgeDesc_other:"यह {{days}} दिन से पुरानी ENDED बातचीत को स्थायी रूप से हटा देता है, जिसमें उनकी संग्रहित मेमोरी और अनुलग्नक शामिल हैं। इसे पूर्ववत नहीं किया जा सकता।",pausedNote_one:"चयनित बातचीत में से {{count}} मानव की प्रतीक्षा में हैं और उनका लंबित अनुमोदन रद्द कर दिया जाएगा।",pausedNote_other:"चयनित बातचीत में से {{count}} मानव की प्रतीक्षा में हैं और उनका लंबित अनुमोदन रद्द कर दिया जाएगा।",endSuccess_one:"{{count}} बातचीत समाप्त की गई",endSuccess_other:"{{count}} बातचीत समाप्त की गई",purgeSuccess_one:"{{count}} समाप्त बातचीत साफ़ की गईं",purgeSuccess_other:"{{count}} समाप्त बातचीत साफ़ की गईं"},y={backToConversations:"बातचीत पर वापस जाएं",chatLog:"चैट लॉग",noSteps:"कोई बातचीत चरण दर्ज नहीं",properties:"बातचीत गुण",rawData:"कच्चा डेटा देखें",step:"चरण",steps:"चरण",title:"बातचीत",continueChat:"चैट में जारी रखें",searchTranscript:"बातचीत में खोजें…",exportMd:"Markdown में निर्यात करें",toolSummary:"उपकरण उपयोग सारांश",totalCost:"कुल लागत",cacheHitRate:"कैश हिट दर"},v={hide:"छुपाएं",secretModeOff:"सीक्रेट मोड टॉगल करें",secretModeOn:"सीक्रेट मोड चालू",secretPlaceholder:"सीक्रेट मान दर्ज करें...",show:"दिखाएं",selectAgent:"Agent चुनें...",noAgents:"कोई Deploy किया हुआ Agent उपलब्ध नहीं है। पहले Agent Deploy करें।",placeholder:"संदेश लिखें...",send:"भेजें",newConversation:"नया वार्तालाप",endConversation:"वार्तालाप समाप्त करें",streaming:"स्ट्रीमिंग",thinking:"सोच रहा है...",usingTools:"टूल का उपयोग",connectionError:"कनेक्शन त्रुटि। कृपया पुनः प्रयास करें।",empty:"Agent चुनें और चैट शुरू करें!",history:"इतिहास",undo:"अंतिम संदेश पूर्ववत करें",redo:"संदेश पुनः करें",continueConversation:"जारी रखें",noHistory:"अभी तक कोई वार्तालाप इतिहास नहीं।",attach:"फ़ाइल संलग्न करें",attachUploading:"अपलोड हो रहा है...",attachSuccess:"फ़ाइल संलग्न",attachError:"फ़ाइल अपलोड विफल",attachLimit:"आप प्रति संदेश {{max}} फ़ाइलें तक संलग्न कर सकते हैं।",attachTooLargeToForward:"{{name}} संग्रहीत है लेकिन मॉडल को सीधे भेजने के लिए बहुत बड़ी है।",attachNotForwarded:"मॉडल को नहीं भेजा गया",dropToAttach:"संलग्न करने के लिए फ़ाइलें छोड़ें",stepFailedFallback:"यह चरण विफल रहा। सर्वर लॉग में पूरी त्रुटि है।",retry:"अंतिम चरण पुनः प्रयास करें",retrySuccess:"चरण पुनः निष्पादित",retryError:"पुनः प्रयास विफल",showActivity:"गतिविधि दिखाएं",hideActivity:"गतिविधि छुपाएं",scrollToBottom:"नीचे स्क्रॉल करें",copyMessage:"संदेश कॉपी करें",copied:"कॉपी हो गया!",activity:{processing:"प्रक्रिया हो रही है…",steps:"चरण",toolCalls:"उपकरण कॉल",toolCall:"उपकरण कॉल",toolResult:"परिणाम",error:"त्रुटि हुई",toolCallsCount_one:"{{count}} टूल कॉल",stepsCount:"{{count}} चरण",stepsCount_one:"{{count}} चरण",stepsCount_other:"{{count}} चरण",toolCallsCount_other:"{{count}} टूल कॉल",toolCallsCount:"{{count}} टूल कॉल",usingTool:"{{tool}} का उपयोग हो रहा है…"},context:{conversationId:"बातचीत ID",agentVersion:"एजेंट संस्करण",startTime:"शुरू हुआ",stepCount:"चरण",show:"बातचीत जानकारी दिखाएं",hide:"बातचीत जानकारी छुपाएं"},agentTyping:"एजेंट टाइप कर रहा है",copy:"कॉपी करें",emptyConversation:"इस वार्तालाप में अभी कोई संदेश नहीं है।",loadConversationFailed:"यह वार्तालाप लोड नहीं हो सका: {{error}}",multilineHint:"भेजने के लिए Enter · नई पंक्ति के लिए Shift+Enter",multilineHintCtrlEnter:"भेजने के लिए Ctrl+Enter · नई पंक्ति के लिए Enter",toolRefused:"अस्वीकृत"},D={backToWorkflow:"Workflow पर वापस जाएं",confirmDeleteDescription:"इस क्रिया को पूर्ववत नहीं किया जा सकता। {{type}} स्थायी रूप से हटा दिया जाएगा।",createSuccess:"{{type}} सफलतापूर्वक बनाया गया",snippetNameInvalid:"केवल लोअरकेस अक्षर (a-z), अंक (0-9), और अंडरस्कोर (_) की अनुमति है।",snippetNameRequired:"स्निपेट नाम आवश्यक है।",unnamed:"अनामित संसाधन",noDescription:"कोई विवरण नहीं",backToResources:"संसाधनों पर वापस जाएं",backToList:"{{type}} पर वापस जाएं",unknownType:"अज्ञात संसाधन प्रकार",rawConfig:"कच्चा कॉन्फ़िगरेशन",rawConfigHint:"इस संसाधन का JSON कॉन्फ़िगरेशन",create:"{{type}} बनाएं",createTitle:"{{type}} बनाएं",createDescription:"खाली {{type}} कॉन्फ़िगरेशन बनाएं। बनाने के बाद संपादित कर सकते हैं।",confirmDelete:"क्या आप वाकई इस {{type}} को हटाना चाहते हैं?",empty:"अभी तक कोई {{type}} संसाधन नहीं।",itemCount_one:"{{count}} आइटम",itemCount_other:"{{count}} आइटम",count_one:"{{count}} संसाधन",count_other:"{{count}} संसाधन",types:{rules:{name:"व्यवहार नियम",description:"वार्तालाप प्रवाह नियम और निर्णय तर्क परिभाषित करें"},apicalls:{name:"HTTP कॉल",description:"बाहरी API एकीकरण और Webhook कॉन्फ़िगर करें"},output:{name:"आउटपुट सेट",description:"प्रतिक्रिया टेम्पलेट और आउटपुट भिन्नताएं प्रबंधित करें"},dictionary:{name:"शब्दकोश",description:"शब्द और वाक्यांश पहचान पैटर्न परिभाषित करें"},llm:{name:"LLM",description:"AI मॉडल, Prompt और टूल बाइंडिंग कॉन्फ़िगर करें"},propertysetter:{name:"गुण सेटर",description:"वार्तालाप गुण सेट करें और स्लॉट भरने का प्रबंधन करें"},mcpcalls:{name:"MCP कॉल",description:"MCP सर्वर कनेक्शन और निर्धारित टूल कॉल कॉन्फ़िगर करें"},rag:{name:"ज्ञान आधार",description:"दस्तावेज़ पुनर्प्राप्ति के लिए RAG ज्ञान आधार कॉन्फ़िगर करें"},snippets:{name:"स्निपेट प्रॉम्प्ट",description:"Reusable system prompt building blocks"},parser:{name:"पार्सर",description:"NLP इनपुट पार्सिंग और शब्दकोश कॉन्फ़िगरेशन"}},emptyDescription:"Workflow में उपयोग करने के लिए अपना पहला {{type}} बनाएं।",descriptionPlaceholder:"इस {{type}} कॉन्फ़िगरेशन का वर्णन करें…"},A={compare:"तुलना करें",compareVersions:"संस्करणों की तुलना करें",deployFailed:"परिनियोजन विफल",deploying:"Deploy हो रहा है…",diffHint:"जोड़ हरे रंग में, हटाना लाल रंग में दिखाया गया है। बायां = पुराना, दायां = नया।",discardAndLeave:"त्यागें और छोड़ें",discardMessage:"क्या आप वाकई सभी असहेजे परिवर्तन त्यागना चाहते हैं? इस क्रिया को पूर्ववत नहीं किया जा सकता।",discardTitle:"परिवर्तन त्यागें?",newerVersion:"नया",olderVersion:"पुराना",saveAndTest:"सहेजें और परखें",swapVersions:"संस्करण स्वैप करें",unsavedMessage:"आपके पास असहेजे परिवर्तन हैं जो खो जाएंगे। क्या आप वाकई जारी रखना चाहते हैं?",unsavedTitle:"असहेजे परिवर्तन",formTab:"फ़ॉर्म",jsonTab:"JSON",save:"सहेजें",discard:"त्यागें",saving:"सहेजा जा रहा है...",saved:"सफलतापूर्वक सहेजा गया",saveError:"सहेजने में विफल",dirty:"असहेजे परिवर्तन",version:"संस्करण",versionPicker:"संस्करण चुनें",readOnly:"केवल पढ़ने के लिए",formPlaceholder:"विज़ुअल संपादक जल्द आ रहा है। संपादन के लिए JSON टैब का उपयोग करें।",jsonSchema:"Schema सत्यापन सक्रिय",cascadeMode:"परिवर्तन मूल Workflow और Agent तक प्रसारित होंगे",updateUsageHint:"चयनित Workflows और Agents को नए संस्करण में अपडेट करें?",updateUsage:"चयनित अपडेट करें",skipUpdate:"छोड़ें",cascading:"अपडेट हो रहा है...",cascadeSuccess:"कैस्केड अपडेट पूर्ण",invalidJson:"अमान्य JSON — ठीक करने के लिए JSON टैब पर जाएं।",cascadePartialFailure_one:"{{count}} कैस्केड अपडेट विफल हुए",cascadePartialFailure_other:"{{count}} कैस्केड अपडेट विफल हुए",usedInAgents_one:"{{count}} Agent में उपयोग किया गया",usedInAgents_other:"{{count}} Agents में उपयोग किया गया"},T={condCapabilityMatch:"capabilityMatch",condDeploymentContext:"deploymentContext",strategy_executeAll:"सभी निष्पादित करें",strategy_executeUntilFirstSuccess:"पहली सफलता तक",invalidValue:"(अमान्य)",appendActions:"कार्य जोड़ें",expressionsAsActions:"अभिव्यक्तियां कार्य के रूप में",groups:"व्यवहार समूह",addGroup:"समूह जोड़ें",groupName:"समूह का नाम",executionStrategy:"निष्पादन रणनीति",rules:"नियम",addRule:"नियम जोड़ें",ruleName:"नियम का नाम",actions:"क्रियाएँ",noActions:"कोई कार्य नहीं",addAction:"जोड़ें",actionPlaceholder:"उदा: greet, get_weather",conditions:"शर्तें",addCondition:"शर्त जोड़ें",conditionType:"शर्त प्रकार",nestedConditions:"नेस्टेड शर्तें",configKey:"कुंजी",configValue:"मान",addConfig:"कॉन्फ़िगरेशन जोड़ें",removeRule:"नियम हटाएं",removeGroup:"समूह हटाएं",removeCondition:"शर्त हटाएं",noGroups:"कोई व्यवहार समूह परिभाषित नहीं",noRules:"इस समूह में कोई नियम नहीं",noConditions:"कोई शर्तें नहीं"},f={noEndpointsFound:"स्पेक में कोई एंडपॉइंट नहीं मिला",specUrlPlaceholder:"https://api.example.com/openapi.json",targetServerUrl:"लक्ष्य सर्वर URL",targetServerUrlPlaceholder:"https://api.example.com",calls:"HTTP कॉल",addCall:"HTTP कॉल जोड़ें",callName:"कॉल का नाम",callDescription:"विवरण",descriptionPlaceholder:"LLM Agent के लिए प्राकृतिक भाषा विवरण",request:"अनुरोध",method:"विधि",path:"पथ",pathPlaceholder:"/api/endpoint",headers:"हेडर",addHeader:"Header जोड़ें",queryParams:"क्वेरी पैरामीटर",addQueryParam:"पैरामीटर जोड़ें",contentType:"सामग्री प्रकार",body:"अनुरोध बॉडी",bodyPlaceholder:"JSON बॉडी टेम्पलेट...",parameters:"पैरामीटर (LLM Agent के लिए)",paramName:"पैरामीटर का नाम",paramDescription:"विवरण",addParam:"पैरामीटर जोड़ें",options:"विकल्प",saveResponse:"प्रतिक्रिया सहेजें",responseObjectName:"प्रतिक्रिया ऑब्जेक्ट का नाम",responseHeaderObjectName:"प्रतिक्रिया Header ऑब्जेक्ट का नाम",fireAndForget:"भेजें और भूल जाएं",batchCalls:"बैच कॉल",iterationObjectName:"इटरेशन ऑब्जेक्ट का नाम",prePostInstructions:"पूर्व/पश्च निर्देश",preRequest:"अनुरोध से पहले",postResponse:"प्रतिक्रिया के बाद",removeCall:"कॉल हटाएं",noCalls:"कोई HTTP कॉल कॉन्फ़िगर नहीं",actions:"ट्रिगर कार्य",noActions:"कोई कार्य नहीं",actionPlaceholder:"उदा: get_weather",addHttpCodeValidator:"HTTP कोड फ़िल्टर जोड़ें",httpCodeFilter:"HTTP कोड फ़िल्टर",runOnCodes:"इन कोड पर चलाएं",skipOnCodes:"इन कोड पर छोड़ें",propName:"प्रॉपर्टी नाम",propValue:"मान या टेम्पलेट",overrideTitle:"मौजूदा मान को ओवरराइड करें",override:"ओवरराइड",advancedMapping:"ऑब्जेक्ट पथ मैपिंग",fromPath:"स्रोत ऑब्जेक्ट पथ",toPath:"लक्ष्य ऑब्जेक्ट पथ",convertToObject:"ऑब्जेक्ट में बदलें",runOnValidationError:"सत्यापन त्रुटि पर चलाएं",noPropertyInstructions:"कोई प्रॉपर्टी निर्देश नहीं",addPropertyInstruction:"प्रॉपर्टी निर्देश जोड़ें",pathToTargetArray:"लक्ष्य Array का पथ",iterationObjName:"पुनरावृत्ति ऑब्जेक्ट",templateFilter:"फ़िल्टर अभिव्यक्ति",filterPlaceholder:"वैकल्पिक फ़िल्टर...",outputType:"आउटपुट प्रकार",outputValue:"आउटपुट मान",noOutputInstructions:"कोई आउटपुट बिल्ड निर्देश नहीं",addOutputInstruction:"आउटपुट निर्देश जोड़ें",qrValue:"त्वरित उत्तर मान",qrExpressions:"त्वरित उत्तर अभिव्यक्तियाँ",noQrInstructions:"कोई त्वरित उत्तर बिल्ड निर्देश नहीं",addQrInstruction:"त्वरित उत्तर निर्देश जोड़ें",noRetryPolicy:"कोई पुनः प्रयास नीति नहीं",addRetryPolicy:"पुनः प्रयास नीति जोड़ें",maxRetries:"अधिकतम पुनः प्रयास",backoffDelayMs:"Backoff विलंब (ms)",retryOnHttpCodes:"HTTP कोड पर पुनः प्रयास करें",valuePathMatchers:"मान पथ मिलानकर्ता",noValuePathMatchers:"कोई मान पथ मिलानकर्ता नहीं",valuePath:"मान पथ",contains:"शामिल है",equals:"बराबर",trueIfNoMatch:"मिलान न होने पर पुनः प्रयास करें",addValuePathMatcher:"मान पथ मिलानकर्ता जोड़ें",removeRetryPolicy:"पुनः प्रयास नीति हटाएं",delayMs:"विलंब (ms)",propertyInstructions:"प्रॉपर्टी निर्देश",outputBuildInstructions:"आउटपुट बिल्ड निर्देश",qrBuildInstructions:"त्वरित उत्तर बिल्ड निर्देश",retryBackoff:"पुनः प्रयास और Backoff",discoveredEndpoints:"खोजे गए एंडपॉइंट",discoveryError:"OpenAPI विनिर्देश पार्स नहीं किया जा सका",openApiSpecUrl:"OpenAPI विनिर्देश से आयात करें",invalidUrl:"एक मान्य http:// या https:// URL दर्ज करें",discovering:"पार्स हो रहा है…",discoverEndpoints:"एंडपॉइंट खोजें",retry:"पुनः प्रयास करें",selectedCount:"चयनित",importAppend:"कॉल में जोड़ें",importReplace:"सभी कॉल बदलें",confirmReplace:"हाँ, सभी बदलें",replaceConfirmMessage:"इससे {{count}} मौजूदा कॉल बदल जाएँगी। क्या आप निश्चित हैं?"},P={continueOnErrorHint:"विफलता पर पाइपलाइन जारी रहती है; त्रुटि यहां उजागर होती है ",descriptionPlaceholder:"LLM एजेंट के लिए प्राकृतिक भाषा विवरण",governanceHint:"नियंत्रित करें कि कौन से टूल उजागर होते हैं। व्हाइटलिस्ट = केवल ये; ब्लैकलिस्ट = इन्हें बहिष्कृत करें।",pipelineHint:"नियतात्मक, क्रिया-ट्रिगर किए गए टूल कॉल (पाइपलाइन मोड)।",responseObjectName:"प्रतिक्रिया ऑब्जेक्ट का नाम",discoveredTools:"उपलब्ध टूल",whitelisted:"व्हाइटलिस्ट में",addToWhitelist:"व्हाइटलिस्ट में जोड़ें",addWhitelist:"व्हाइटलिस्ट",blacklisted:"ब्लैकलिस्ट में",addToBlacklist:"ब्लैकलिस्ट में जोड़ें",addBlacklist:"ब्लैकलिस्ट",noRetryPolicy:"कोई पुनः प्रयास नीति नहीं",addRetryPolicy:"पुनः प्रयास नीति जोड़ें",maxAttempts:"अधिकतम प्रयास",backoffDelayMs:"Backoff विलंब (ms)",backoffMultiplier:"Backoff गुणक",maxBackoffDelayMs:"अधिकतम Backoff (ms)",removeRetryPolicy:"पुनः प्रयास नीति हटाएं",callName:"कॉल नाम",removeCall:"कॉल हटाएं",description:"विवरण",toolName:"टूल नाम",parameterSchema:"पैरामीटर स्कीमा",triggerActions:"ट्रिगर कार्य",toolArguments:"टूल आर्गुमेंट",addArgument:"आर्गुमेंट जोड़ें",saveResponse:"प्रतिक्रिया सहेजें",continueOnError:"त्रुटि पर जारी रखें",retryBackoff:"पुनः प्रयास और Backoff",preRequest:"अनुरोध से पहले",propertyInstructions:"प्रॉपर्टी निर्देश",postResponse:"प्रतिक्रिया के बाद",outputBuildInstructions:"आउटपुट बिल्ड निर्देश",qrBuildInstructions:"त्वरित उत्तर बिल्ड निर्देश",discoveryError:"MCP सर्वर से कनेक्ट नहीं हो सका",serverConnection:"सर्वर कनेक्शन",displayName:"प्रदर्शन नाम",serverUrl:"MCP सर्वर URL",discovering:"कनेक्ट हो रहा है…",discoverTools:"टूल खोजें",transport:"ट्रांसपोर्ट",timeoutMs:"टाइमआउट (ms)",apiKey:"API कुंजी / Vault संदर्भ",toolGovernance:"टूल गवर्नेंस",retry:"पुनः प्रयास करें",noToolsFound:"इस सर्वर पर कोई टूल नहीं मिला",whitelist:"व्हाइटलिस्ट (केवल अनुमति)",blacklist:"ब्लैकलिस्ट (बहिष्कृत)",pipelineCalls:"Pipeline कॉल",addCall:"MCP कॉल जोड़ें"},S=JSON.parse('{"addCustomInstruction":"निर्देश जोड़ें","addKnowledgeBase":"KB संदर्भ जोड़ें","addMaskingRule":"नियम जोड़ें","addToolLimit":"टूल सीमा जोड़ें","anchorFirstSteps":"पहले चरण एंकर करें","anchorFirstStepsHint":"आरंभिक टर्न हमेशा बनाए रखे जाते हैं (0 = कोई नहीं)","conversationMemory":"बातचीत मेमोरी","conversationMemoryDesc":"पुराने टर्न को धीरे-धीरे एक रोलिंग सारांश में संपीड़ित किया जाता है। LLM देखता है: [सिस्टम प्रॉम्प्ट + सारांश] + [हाल के N टर्न शब्दशः]। एक अंतर्निहित conversationRecall टूल एजेंट को मांग पर सारांशित टर्न में वापस जाने की अनुमति देता है।","counterweight":"व्यवहारिक प्रतिसंतुलन","counterweightCustom":"कस्टम निर्देश","counterweightCustomHint":"चयनित स्तर के लिए अंतर्निहित प्रीसेट का उपयोग करने के लिए खाली छोड़ें।","counterweightCustomOverride":"कस्टम निर्देश प्रीसेट स्तर टेक्स्ट को पूरी तरह से ओवरराइड करते हैं।","counterweightDesc":"सिस्टम प्रॉम्प्ट में सुरक्षा निर्देश इंजेक्ट करें। अति-आत्मविश्वास, मतिभ्रम और अनिरीक्षित क्रिया से बचाता है।","counterweightLevel":"सुरक्षा स्तर","counterweightLevelCautious":"सतर्क","counterweightLevelNormal":"सामान्य (कोई इंजेक्शन नहीं)","counterweightLevelStrict":"सख्त","counterweightPlacement":"स्थान","counterweightPlacementPrefix":"सिस्टम प्रॉम्प्ट से पहले","counterweightPlacementSuffix":"सिस्टम प्रॉम्प्ट के बाद","counterweightStrictNote":"विनाशकारी \\"एक बार में एक कदम\\" व्यवहार को रोकने के लिए शेड्यूल्ड/बैच निष्पादन के दौरान सख्त मोड को स्वचालित रूप से सतर्क में डाउनग्रेड कर दिया जाता है।","defaultMaxChars":"डिफ़ॉल्ट अधिकतम अक्षर","defaultMaxCharsHint":"(50000 पर ~12k टोकन)","enableSummary":"रोलिंग सारांश सक्षम करें","enableWorkflowRag":"वर्कफ़्लो RAG स्वतः-खोजें","excludeProps":"सारांश से प्रॉपर्टीज़ बहिष्कृत करें","excludePropsDesc":"पहले से स्थायी प्रॉपर्टीज़ के रूप में कैप्चर किए गए तथ्यों को छोड़ें — तर्क और अंतर्निहित संदर्भ पर ध्यान दें","httpCallRag":"httpCall RAG (शून्य अवसंरचना)","httpCallRagHint":"LLM कॉल से पहले एक नामित httpCall निष्पादित करें। प्रतिक्रिया संदर्भ के रूप में इंजेक्ट की जाती है — किसी वेक्टर स्टोर की आवश्यकता नहीं।","httpCallRagPlaceholder":"उदा. search_docs, query_wiki","identityMasking":"पहचान मास्किंग","identityMaskingDesc":"पूछे जाने पर LLM को अपना मॉडल नाम या प्रदाता प्रकट करने से रोकें।","identityMaskingEmptyWarning":"मास्किंग सक्षम है लेकिन इसमें कोई नियम नहीं है। मास्किंग प्रभावी होने के लिए कम से कम एक नियम जोड़ें।","identityMaskingRulePlaceholder":"उदा. कभी न बताएं कि आप एक AI भाषा मॉडल हैं","identityMaskingRules":"मास्किंग नियम","identityMaskingRulesHint":"मास्किंग प्रभावी होने के लिए सक्षम होना और कम से कम एक नियम दोनों आवश्यक हैं।","injectionStrategy":"इंजेक्शन","kbNamePlaceholder":"उदा. product-docs","knowledgeBases":"ज्ञान आधार","knowledgeBasesHint":"ज्ञान आधार को नाम से स्पष्ट रूप से संदर्भित करें। प्रत्येक नाम वर्कफ़्लो में एक RagConfiguration से मेल खाना चाहिए।","legacyRag":"लीगेसी RAG (पदावनत)","legacyRagHint":"यह कॉन्फ़िगरेशन पदावनत retrievalAugmentor प्रारूप का उपयोग करता है। ऊपर दिए गए मोड में माइग्रेट करें।","maxContextTokens":"अधिकतम संदर्भ टोकन","maxContextTokensHint":"-1 = इसके बजाय चरण गणना का उपयोग करें","maxRecallHint":"प्रति रिकॉल आमंत्रण","maxRecallTurns":"अधिकतम रिकॉल टर्न","maxSummaryTokens":"अधिकतम सारांश टोकन","noKnowledgeBases":"कोई ज्ञान आधार संदर्भित नहीं","perToolLimits":"प्रति-टूल ओवरराइड","prePostDesc":"प्रत्येक LLM अनुरोध से पहले चलने वाले प्रॉपर्टी निर्देश, और प्रत्येक प्रतिक्रिया के बाद चलने वाले आउटपुट/प्रॉपर्टी निर्देश कॉन्फ़िगर करें।","promptSafety":"प्रॉम्प्ट सुरक्षा","ragDefaults":"डिफ़ॉल्ट पुनर्प्राप्ति पैरामीटर","recentWindow":"हाल की विंडो (चरण)","recentWindowHint":"शब्दशः रखे गए टर्न","removeLegacyRag":"लीगेसी कॉन्फ़िग हटाएं","strategyPaginate":"पेजिनेट (LLM अधिक प्राप्त करता है)","strategySummarize":"सारांश (सस्ते मॉडल के माध्यम से)","strategyTruncate":"काटें (हार्ड कट)","summarizationPrompt":"कस्टम सारांश प्रॉम्प्ट (वैकल्पिक)","summarizationPromptPlaceholder":"लक्ष्य, निर्णय, तर्क और टोन को संरक्षित करने वाले डिफ़ॉल्ट संरचित प्रॉम्प्ट का उपयोग करने के लिए खाली छोड़ें।","summarizeInfoBanner":"सारांशकर्ता इस कार्य के समान प्रदाता और API कुंजी का उपयोग करता है। केवल मॉडल नाम को एक सस्ते वेरिएंट में बदला जाता है (जैसे, gpt-4o-mini)।","summarizerModel":"सारांशकर्ता मॉडल","summarizerModelHint":"(खाली होने पर काटने पर वापस चला जाता है)","summarizerModelPlaceholder":"उदा. gpt-4o-mini","summaryModel":"सारांश मॉडल","summaryProvider":"सारांश प्रदाता","summaryProviderHint":"सारांश के लिए एक सस्ता/तेज़ मॉडल उपयोग करें","tokenWindow":"टोकन-जागरूक संदर्भ विंडो","tokenWindowDesc":"चरण-गणना-आधारित इतिहास को टोकन-जागरूक पैकिंग से बदलें। जब maxContextTokens सेट होता है (> 0), तो इंजन बजट के भीतर जितने संभव हो उतने हाल के टर्न फिट करता है, वैकल्पिक रूप से आरंभिक टर्न को एंकर करता है।","toolResponseLimits":"टूल प्रतिक्रिया सीमाएं","toolResponseLimitsDesc":"LLM संदर्भ विंडो में पुनः-इंजेक्शन से पहले वर्बोज़ टूल आउटपुट को काटें। संदर्भ फूलने से रोकता है।","truncationStrategy":"रणनीति","workflowRagHint":"वर्कफ़्लो से सभी RAG चरणों को स्वचालित रूप से खोजता है। केवल तभी उपयोग किया जाता है जब ऊपर कोई स्पष्ट ज्ञान आधार सूचीबद्ध न हो।","tasks":"एलएलएम कार्य","addTask":"कार्य जोड़ें","noTasks":"कोई LangChain कार्य कॉन्फ़िगर नहीं","removeTask":"कार्य हटाएं","taskId":"कार्य आईडी","description":"विवरण","descriptionPlaceholder":"यह कार्य क्या करता है","triggerActions":"ट्रिगर कार्य","noActions":"कोई कार्य नहीं","actionPlaceholder":"उदा: help, chat","systemPrompt":"सिस्टम प्रॉम्प्ट","systemPromptPlaceholder":"आप एक सहायक असिस्टेंट हैं...","modelParams":"मॉडल पैरामीटर","addParam":"पैरामीटर जोड़ें","agentMode":"एजेंट मोड","enableBuiltInTools":"अंतर्निहित टूल सक्षम करें","toolWhitelist":"टूल श्वेतसूची (खाली = सभी)","enableHttpCallTools":"HTTP Call टूल स्वतः खोज","enableHttpCallToolsDesc":"Workflow से सभी httpcall एक्सटेंशन को LLM टूल के रूप में स्वचालित रूप से उजागर करें","httpCallTools":"HTTP कॉल टूल यूआरआई","httpCallToolsHint":"स्पष्ट httpcall URIs (स्वतः खोज के अतिरिक्त)","addTool":"टूल URI जोड़ें","mcpServers":"एमसीपी सर्वर","mcpServersDesc":"बाहरी MCP सर्वर जिनके टूल LLM को उपलब्ध होते हैं","addMcpServer":"MCP सर्वर जोड़ें","mcpUrlPlaceholder":"http://localhost:7070/mcp","mcpName":"नाम","mcpApiKey":"API Key / Vault संदर्भ","historyLimit":"इतिहास सीमा","historyLimitHint":"(-1 = असीमित)","budgetPerf":"बजट और प्रदर्शन","maxBudget":"अधिकतम बजट ($)","costTracking":"लागत ट्रैकिंग","toolCaching":"उपकरण कैश","rateLimiting":"अवरोधक दर","defaultRate":"डिफ़ॉल्ट दर (अनुरोध/मिनट)","prePostInstructions":"पूर्व/पश्च निर्देश","preRequest":"अनुरोध से पहले","postResponse":"प्रतिक्रिया के बाद","enableMcpCallTools":"MCP उपकरण स्वतः खोजें","enableMcpCallToolsDesc":"वर्कफ़्लो के सभी mcpcalls एक्सटेंशन को स्वतः LLM उपकरण के रूप में उपलब्ध कराएं","a2aAgents":"A2A एजेंट","a2aAgentsDesc":"दूरस्थ A2A-संगत एजेंट जिनके कौशल LLM उपकरण बन जाते हैं","addA2aAgent":"A2A एजेंट जोड़ें","a2aUrlPlaceholder":"https://remote.example.com/a2a/agents/...","a2aName":"प्रदर्शन नाम","a2aApiKey":"${vault:my-a2a-key}","a2aTimeout":"टाइमआउट (मि.से.)","a2aSkillsFilter":"कौशल फ़िल्टर (खाली = सभी)","cascade":"मॉडल कैस्केड","cascadeDesc":"Try a cheap/fast model first. If confidence is too low, automatically escalate to a more powerful (and expensive) model.","cascadeEnable":"मॉडल कैस्केड सक्षम करें","cascadeStrategy":"रणनीति","strategyCascade":"क्रमिक एस्केलेशन","strategyParallel":"समानांतर (भविष्य)","cascadeStrategyHint":"पहले सस्ते मॉडल से शुरू करें, कम विश्वास पर एस्केलेट करें","cascadeEvalStrategy":"विश्वास मूल्यांकन","cascadeEvalHint":"उत्तर पर्याप्त है या नहीं, कैसे निर्धारित करें","evalStructured":"संरचित आउटपुट (JSON)","evalHeuristic":"अनुमानी (अनिश्चितता पहचान)","evalJudge":"न्यायाधीश मॉडल (सहायक LLM)","evalNone":"कोई नहीं (हमेशा स्वीकार)","cascadeInAgent":"एजेंट मोड (उपकरण सहित) में भी कैस्केड उपयोग करें","cascadeSteps":"Cascade Steps","cascadeStepsDesc":"Order matters: first step tried first. Last step is always accepted.","cascadeModelName":"जैसे claude-sonnet-5","cascadeConfidence":"Min. Confidence (0-1)","cascadeConfidencePlaceholder":"खाली = हमेशा स्वीकार","cascadeTimeout":"टाइमआउट (मि.से.)","addCascadeStep":"कैस्केड चरण जोड़ें","cascadeReturnBest":"चरणों में सर्वोत्तम-स्कोर वाली प्रतिक्रिया लौटाएं","cascadeEvalNoneHint":"विश्वास गेटिंग अक्षम है — पहले चरण की प्रतिक्रिया हमेशा स्वीकार की जाती है।","cascadeCeilings":"सीमाएं और मूल्य निर्धारण","cascadeMaxDuration":"अधिकतम कुल अवधि (ms)","cascadeMaxCost":"प्रति रन अधिकतम लागत ($)","cascadeUnlimited":"असीमित","cascadeInputPrice":"इनपुट $ / 1M टोकन","cascadeOutputPrice":"आउटपुट $ / 1M टोकन","cascadePricingHint":"डिफ़ॉल्ट टोकन मूल्य निर्धारण लागत ट्रैकिंग और लागत सीमा को नियंत्रित करता है। अलग-अलग चरण इसे ओवरराइड कर सकते हैं।","cascadeJudgeModel":"न्यायाधीश मॉडल","cascadeJudgeModelDesc":"एक अलग (आमतौर पर सस्ता) मॉडल जो प्रत्येक प्रतिक्रिया के विश्वास का मूल्यांकन करता है।","cascadeJudgeApiKey":"न्यायाधीश API कुंजी","cascadeHeuristic":"अनुमानी ट्यूनिंग","cascadeHeuristicDesc":"हेजिंग/अस्वीकृति पहचान के लिए वैकल्पिक ओवरराइड। खाली फ़ील्ड अंतर्निहित अंग्रेज़ी डिफ़ॉल्ट का उपयोग करते हैं। गैर-अंग्रेज़ी परिनियोजन के लिए वाक्यांश सूचियों का स्थानीयकरण करें।","cascadeHeuristicDefaults":"अंतर्निहित डिफ़ॉल्ट","cascadeHeuristicPhrasePlaceholder":"एक वाक्यांश जोड़ें…","cascadeHeuristicPhrasesLow":"हेजिंग वाक्यांश (कम विश्वास)","cascadeHeuristicPhrasesRefusal":"अस्वीकृति वाक्यांश","cascadeHeuristicShortLen":"छोटी प्रतिक्रिया लंबाई","cascadeHeuristicShortScore":"छोटा स्कोर","cascadeHeuristicRefusalScore":"अस्वीकृति स्कोर","cascadeHeuristicHedgingScore":"हेजिंग स्कोर","cascadeHeuristicDefaultScore":"डिफ़ॉल्ट स्कोर","cascadeStepApiKey":"API कुंजी","cascadeStepApiKeyPlaceholder":"खाली होने पर कार्य कुंजी विरासत में लेता है","cascadeCrossProvider":"क्रॉस-प्रदाता","cascadeStepAdvanced":"उन्नत (मूल्य निर्धारण और पैरामीटर)","cascadeStepInputPrice":"इनपुट $ / 1M","cascadeStepOutputPrice":"आउटपुट $ / 1M","cascadeStepPriceInherit":"कैस्केड डिफ़ॉल्ट","cascadeStepParams":"अतिरिक्त पैरामीटर","cascadeStepAddParam":"पैरामीटर जोड़ें","cascadeIssues":{"NO_STEPS":"कैस्केड सक्षम है लेकिन इसमें कोई चरण नहीं है — चलने पर यह विफल हो जाएगा।","UNKNOWN_STRATEGY":"अज्ञात रणनीति \\"{{strategy}}\\" — कैस्केड क्रमिक रूप से चलेगा।","PARALLEL_NOT_IMPLEMENTED":"समानांतर रणनीति अभी लागू नहीं हुई है — चरण क्रमिक रूप से चलते हैं।","UNKNOWN_EVAL_STRATEGY":"अज्ञात विश्वास मूल्यांकन \\"{{strategy}}\\" — संरचित आउटपुट पर डिफ़ॉल्ट हो रहा है।","JUDGE_MODEL_MISSING":"न्यायाधीश मॉडल मूल्यांकन के लिए कोई न्यायाधीश कॉन्फ़िगर नहीं है — विश्वास अनुमानी पर वापस चला जाता है।","JUDGE_CROSS_PROVIDER_NO_APIKEY":"न्यायाधीश मॉडल एक अलग प्रदाता का उपयोग करता है लेकिन इसकी अपनी कोई API कुंजी नहीं है — यह कार्य कुंजी विरासत में लेगा।","MAX_DURATION_NONPOSITIVE":"अधिकतम कुल अवधि 0 से अधिक होनी चाहिए।","MAX_COST_NEGATIVE":"प्रति रन अधिकतम लागत ऋणात्मक नहीं हो सकती।","CASCADE_INPUT_PRICE_NEGATIVE":"कैस्केड इनपुट मूल्य ऋणात्मक नहीं हो सकता।","CASCADE_OUTPUT_PRICE_NEGATIVE":"कैस्केड आउटपुट मूल्य ऋणात्मक नहीं हो सकता।","CONVERT_TO_OBJECT_STRUCTURED":"convertToObject संरचित आउटपुट विश्वास के साथ असंगत है — कैस्केड इसके बजाय अनुमानी का उपयोग करेगा।","STEP_INPUT_PRICE_NEGATIVE":"चरण {{step}} इनपुट मूल्य ऋणात्मक नहीं हो सकता।","STEP_OUTPUT_PRICE_NEGATIVE":"चरण {{step}} आउटपुट मूल्य ऋणात्मक नहीं हो सकता।","STEP_CONFIDENCE_OUT_OF_RANGE":"चरण {{step}} विश्वास 0 और 1 के बीच होना चाहिए।","STEP_DEAD_NULL_THRESHOLD":"चरण {{step}} में कोई विश्वास सीमा नहीं है — बाद के चरण अगम्य हो जाते हैं।","STEP_TIMEOUT_NONPOSITIVE":"चरण {{step}} टाइमआउट 0 से अधिक होना चाहिए।","STEP_CROSS_PROVIDER_NO_APIKEY":"चरण {{step}} एक अलग प्रदाता का उपयोग करता है लेकिन इसकी अपनी कोई API कुंजी नहीं है — यह कार्य कुंजी विरासत में लेगा।"},"parallelExecution":"समानांतर उपकरण निष्पादन","parallelExecutionDesc":"Run independent tool calls concurrently","parallelTimeout":"टाइमआउट (मि.से.)","maxToolIterations":"अधिकतम उपकरण पुनरावृत्ति","maxToolIterationsHint":"(डिफ़ॉल्ट 10)","toolRateLimits":"प्रति-उपकरण दर सीमा","toolRateLimitsDesc":"Override default rate for specific tools","toolName":"उपकरण नाम","addToolRate":"दर सीमा जोड़ें","retryConfig":"पुनः प्रयास कॉन्फ़िगरेशन","retryDesc":"Configure automatic retries with exponential backoff.","retryMaxAttempts":"अधिकतम प्रयास","retryDelay":"प्रारंभिक विलंब (मि.से.)","retryMultiplier":"बैकऑफ़ गुणक","retryMaxDelay":"अधिकतम विलंब (मि.से.)","ragConfig":"RAG (ज्ञान पुनर्प्राप्ति)","ragDesc":"Augment LLM responses with retrieved documents.","ragHttpCall":"HTTP कॉल URI","ragEmbeddingModel":"एम्बेडिंग मॉडल","ragEmbeddingModelPlaceholder":"जैसे text-embedding-3-small","ragEmbeddingStore":"एम्बेडिंग स्टोर","ragEmbeddingStorePlaceholder":"जैसे pgvector, qdrant","ragMaxResults":"अधिकतम परिणाम","ragMinScore":"Min Similarity Score (0-1)","moveDown":"नीचे ले जाएं","moveUp":"ऊपर ले जाएं","removeStep":"चरण हटाएं","execution":"निष्पादन","budgetCosts":"बजट और लागत","preRequestDesc":"LLM निष्पादन से पहले प्रॉपर्टीज सेट या ट्रांसफॉर्म करें।","postResponseDesc":"LLM आउटपुट को प्रोसेस करें: प्रॉपर्टीज सेट करें, आउटपुट मैसेज बनाएं और क्विक रिप्लाई जनरेट करें।","postPropertyInstructions":"प्रॉपर्टी निर्देश","postOutputInstructions":"आउटपुट निर्देश","postQrInstructions":"क्विक रिप्लाई निर्देश","allSkills":"सभी कौशल","skillPlaceholder":"जैसे order-tracking","modeAgent":"एजेंट","modeChat":"चैट","perMinute":"/मिनट","allTools":"सभी उपकरण","selectSpecific":"विशिष्ट चुनें","allToolsInfo":"सभी {{count}} अंतर्निहित उपकरण LLM के लिए उपलब्ध हैं।「विशिष्ट चुनें」से उपलब्ध उपकरण सीमित करें।","availableTools":"उपलब्ध उपकरण","toolCount":"{{total}} में से {{selected}} चयनित","toolSources":"वर्कफ़्लो उपकरण स्रोत","toolSourcesInfo":"दोनों स्रोत डिफ़ॉल्ट रूप से सक्षम हैं — सभी वर्कफ़्लो HTTP कॉल और MCP कॉल स्वतः LLM उपकरण के रूप में उपलब्ध कराए जाते हैं। बहिष्कृत करने के लिए स्रोत अक्षम करें।","included":"शामिल","toolApprovals":"टूल अनुमोदन गेटिंग (प्रति-कार्य)","toolApprovalsEnable":"इस कार्य के लिए टूल अनुमोदन ओवरराइड करें","toolApprovalsDesc":"केवल इस कार्य के लिए एजेंट-स्तरीय टूल अनुमोदनों को ओवरराइड करता है — यह पूर्ण प्रतिस्थापन है, विलय नहीं।","responseValidation":"प्रतिक्रिया सत्यापन और पुनर्प्राप्ति","responseValidationDesc":"नियंत्रित करें कि इंजन किसी खाली, कटे-फटे, कंटेंट-फ़िल्टर किए गए, अस्वीकृत, या टाइम-आउट टर्न पर कैसे प्रतिक्रिया करता है। \\"फ़ॉलबैक\\" एक पूर्व-निर्धारित संदेश से बदल देता है; \\"त्रुटि\\" टर्न को विफल कर देता है; \\"चेतावनी\\" लॉग करके जारी रखता है; \\"अनदेखा\\" कुछ नहीं करता।","rvEnable":"प्रतिक्रिया सत्यापन सक्षम करें","rvDisabledInfo":"नीचे दी गई नीतियां सहेजी जाती हैं, लेकिन केवल तभी प्रभावी होती हैं जब सत्यापन सक्षम हो।","rvActionIgnore":"अनदेखा करें","rvActionWarn":"चेतावनी (लॉग करें और जारी रखें)","rvActionFallback":"फ़ॉलबैक (पूर्व-निर्धारित संदेश)","rvActionError":"त्रुटि (टर्न को विफल करें)","rvOnEmpty":"खाली प्रतिक्रिया","rvOnEmptyHint":"LLM ने कुछ नहीं लौटाया (खाली या null)","rvOnTruncation":"कटी-फटी प्रतिक्रिया","rvOnTruncationHint":"प्रतिक्रिया कट गई (finishReason=LENGTH)","rvOnContentFilter":"कंटेंट-फ़िल्टर किया गया","rvOnContentFilterHint":"प्रदाता के कंटेंट फ़िल्टर द्वारा प्रतिक्रिया अवरुद्ध की गई","rvOnRefusal":"इनकार","rvOnRefusalHint":"LLM ने उत्तर देने से इनकार किया (अनुमानी पहचान)","rvOnStreamingTimeout":"स्ट्रीमिंग टाइमआउट","rvOnStreamingTimeoutHint":"एक स्ट्रीमिंग प्रतिक्रिया पूरी होने से पहले टाइम-आउट हो गई","streamingTimeoutSeconds":"स्ट्रीमिंग टाइमआउट (सेकंड)","streamingTimeoutSecondsHint":"इंजन के डिफ़ॉल्ट (120s) को ओवरराइड करता है। केवल स्ट्रीमिंग के दौरान लागू होता है; खाली = डिफ़ॉल्ट का उपयोग करें।","taskPricing":"सामान्य-कॉल मूल्य निर्धारण","taskPricingDesc":"लागत ट्रैकिंग और समूह लागत सीमा के लिए इस कार्य की सामान्य (गैर-कैस्केड) मॉडल कॉलों की कीमत तय करता है। बिना मूल्य (खाली) $0 का योगदान देता है।"}'),k={labelPlaceholder:"लिंक लेबल...",pathPlaceholder:"लिंक पथ...",altPlaceholder:"वैकल्पिक टेक्स्ट...",uriPlaceholder:"छवि URL...",language:"भाषा",langPlaceholder:"उदा: en, hi",outputSets:"आउटपुट सेट",addOutputSet:"आउटपुट सेट जोड़ें",noOutputSets:"कोई आउटपुट सेट कॉन्फ़िगर नहीं",actionName:"कार्य का नाम",timesOccurred:"×",removeOutput:"हटाएं",outputs:"आउटपुट",alternativeGroup:"वैकल्पिक समूह",addAlternative:"वैकल्पिक जोड़ें",addOutputGroup:"आउटपुट समूह जोड़ें",textPlaceholder:"आउटपुट पाठ...",urlPlaceholder:"URL…",delayMs:"विलंब (मिलीसेकंड)",quickReplies:"त्वरित उत्तर",noQuickReplies:"कोई Quick Replies नहीं",addQuickReply:"Quick Reply जोड़ें",qrValue:"बटन पाठ",qrExpressions:"अभिव्यक्ति",default:"डिफ़ॉल्ट",invalidJson:"अमान्य JSON",buttonTypePlaceholder:"बटन प्रकार (जैसे postback)",buttonLabelPlaceholder:"लेबल...",onPressPlaceholder:'{"action":"..."}',subTypePlaceholder:"उप-प्रकार (जैसे text, email)",inputPlaceholderPlaceholder:"प्लेसहोल्डर...",inputLabelPlaceholder:"लेबल...",defaultValuePlaceholder:"डिफ़ॉल्ट मान...",minLength:"न्यूनतम लंबाई",minLengthShort:"न्यून",maxLength:"अधिकतम लंबाई",maxLengthShort:"अधिक",validationMsgPlaceholder:"सत्यापन त्रुटि संदेश...",jsonPlaceholder:'{"key":"value"}'},b={setters:"संपत्ति सेटिंग",addSetter:"Setter जोड़ें",noSetters:"कोई Property Setter कॉन्फ़िगर नहीं",removeSetter:"हटाएं",triggerActions:"ट्रिगर कार्य",noActions:"कोई कार्य नहीं",actionPlaceholder:"उदा: greet, fallback",properties:"गुण",noProperties:"कोई गुण नहीं",addProperty:"गुण जोड़ें",propName:"गुण का नाम",propValue:"मान / अभिव्यक्ति",fromPath:"स्रोत पथ",fromObjectPath:"fromObjectPath",override:"ओवरराइड",propsCount:"गुण",untitled:"(कोई कार्य नहीं)",openEditor:"एडिटर में संपादित करें",visibilityTitle:"कौन से Agent इस longTerm प्रॉपर्टी को देख सकते हैं",editValue:"मान संपादित करें",toggleGroup:"प्रॉपर्टी समूह टॉगल करें"},C={language:"भाषा",langPlaceholder:"उदा: en, hi",words:"शब्द",addWord:"शब्द जोड़ें",wordPlaceholder:"उदा: नमस्ते",phrases:"वाक्यांश",addPhrase:"वाक्यांश जोड़ें",phrasePlaceholder:"उदा: सुप्रभात",regExs:"रेगुलर एक्सप्रेशन",addRegEx:"RegEx जोड़ें",regexPlaceholder:"रेगुलर एक्सप्रेशन",expressionPlaceholder:"उदा: greeting(hello)",frequency:"आवृत्ति",none:"कुछ परिभाषित नहीं"},E={title:"पार्सर कॉन्फ़िगरेशन",configure:"कॉन्फ़िगर करें",config:"कॉन्फ़िगरेशन",appendExpressions:"अभिव्यक्तियाँ जोड़ें",includeUnused:"अप्रयुक्त अभिव्यक्तियाँ शामिल करें",includeUnknown:"अज्ञात अभिव्यक्तियाँ शामिल करें",dictionaries:"शब्दकोश",builtInDicts:"इन-बिल्ट शब्दकोश",regularDicts:"सामान्य शब्दकोश",addDict:"जोड़ें",removeDict:"शब्दकोश हटाएँ",noRegularDicts:"कोई सामान्य शब्दकोश कॉन्फ़िगर नहीं हैं",regularDictLabel:"सामान्य शब्दकोश",dictUri:"शब्दकोश संसाधन URI",dictUriPlaceholder:"eddi://ai.labs.dictionary/dictionarystore/dictionaries/?version=",corrections:"सुधार",distance:"दूरी",normalizers:"नॉर्मलाइज़र",removePunctuation:"विराम चिह्न हटाएँ",regexPattern:"पैटर्न",dict:{integer:"पूर्णांक शब्दकोश",decimal:"दशमलव शब्दकोश",punctuation:"विराम चिह्न शब्दकोश",email:"ईमेल शब्दकोश",time:"समय अभिव्यक्ति शब्दकोश",ordinalNumber:"क्रमसूचक संख्या शब्दकोश"},corr:{levenshtein:"लेवेनश्टाइन सुधार",phonetic:"ध्वनि सुधार",mergedTerms:"मिश्रित शब्द सुधार"},norm:{punctuation:"विराम चिह्न नॉर्मलाइज़र",specialCharacter:"विशेष अक्षर नॉर्मलाइज़र",contractedWords:"संक्षिप्त शब्द नॉर्मलाइज़र",allowedCharacter:"अनुमत अक्षर नॉर्मलाइज़र"}},w={activeConversations:"सक्रिय बातचीत",eventHistory:"ईवेंट इतिहास",noActiveQueues:"कोई सक्रिय बातचीत संसाधित नहीं हो रही",payload:"पेलोड",successRate:"सफलता दर",tasksPerSec:"कार्य/से",totalPending:"लंबित",confirmDiscardDescription:"डेड-लेटर किए गए कार्य को स्थायी रूप से हटाता है। इसके बाद इसे रीप्ले नहीं किया जा सकता। इसे पूर्ववत नहीं किया जा सकता।",confirmDiscardTitle:"डेड-लेटर प्रविष्टि खारिज करें?",title:"कोऑर्डिनेटर डैशबोर्ड",subtitle:"वार्तालाप प्रसंस्करण की निगरानी करें और Dead-Letter प्रविष्टियां प्रबंधित करें",type:"Coordinator प्रकार",connection:"कनेक्शन",processed:"संसाधित कार्य",deadLettered:"डेड-लेटर",activeQueues:"सक्रिय कतारें",queued:"कतार में",deadLetterTitle:"डेड-लेटर कतार",noDeadLetters:"कोई Dead-Letter प्रविष्टियां नहीं",colId:"ID",colConversation:"बातचीत",colError:"त्रुटि",colTime:"समय",colActions:"कार्रवाई",replay:"पुनः चलाएं",discard:"त्यागें",purgeAll:"सभी हटाएं",confirmPurge:"सभी हटाएं?",yes:"हां",cancel:"रद्द करें",replaySuccess:"Dead-Letter पुनः चलाया गया",replayError:"पुनः चलाने में विफल",discardSuccess:"Dead-Letter त्याग दिया गया",discardError:"त्यागने में विफल",purgeSuccess:"सभी Dead-Letter प्रविष्टियां हटाई गईं",purgeError:"हटाने में विफल",empty:"कोई Coordinator डेटा उपलब्ध नहीं",emptyHint:"Coordinator सेवा अभी शुरू हो रही हो सकती है। डेटा स्वचालित रूप से दिखाई देगा।",lastNSnapshots:"पिछले {{count}} स्नैपशॉट"},I={expand:"विस्तारित करें",expandHint:"फ़ुलस्क्रीन (Ctrl+Shift+F)",close:"हो गया",lines:"पंक्तियां",chars:"अक्षर",fullscreenTitle:"सामग्री संपादक",fullscreenDescription:"फ़ुलस्क्रीन संपादक। बंद करने के लिए Escape दबाएं।"},L={newLogs:"नए लॉग",title:"लॉग",description:"रियलटाइम लॉग स्ट्रीम की निगरानी करें या ऐतिहासिक लॉग खोजें।",tabLive:"लाइव",tabHistory:"इतिहास",connected:"जुड़ा हुआ",disconnected:"डिस्कनेक्ट",filterAgent:"एजेंट ID…",filterConversation:"वार्तालाप ID...",filterInstance:"इंस्टेंस ID...",allLevels:"सभी स्तर",pause:"विराम",resume:"जारी रखें",clear:"साफ़ करें",search:"खोजें",waitingForLogs:"लॉग की प्रतीक्षा...",loadingRecentLogs:"हाल के लॉग लोड हो रहे हैं...",noRecentLogs:"कोई हालिया लॉग गतिविधि नहीं है।",noRecentLogsHint:"नए लॉग यहाँ दिखाई देंगे जैसे वे बैकएंड से स्ट्रीम होते हैं।",connectingStream:"स्ट्रीम से जुड़ रहा है...",noHistoryLogs:"कोई ऐतिहासिक लॉग नहीं मिला।",entryCount:"{{count}} प्रविष्टियां",showStacktrace:"Stacktrace दिखाएं ({{count}} फ्रेम)",hideStacktrace:"Stacktrace छिपाएं",allAgents:"सभी एजेंट",allConversations:"सभी बातचीत",waitingHint:"Backend से Stream होने पर Log यहाँ दिखाई देंगे।",noHistoryHint:"फ़िल्टर समायोजित करें या किसी अन्य Agent या Conversation को खोजें।",searchConversations:"ID, एजेंट, उपयोगकर्ता द्वारा खोजें…",stepsCount:"{{count}} चरण",noConversationsFound:"कोई वार्तालाप नहीं मिला",useConversationId:"ID का उपयोग करें: {{id}}",searchLogs:"लॉग खोजें…",errors:"त्रुटियाँ",warnings:"चेतावनी",infos:"जानकारी",debugs:"डीबग",filteredCount:"{{shown}} / {{total}} प्रविष्टियाँ",copyEntry:"लॉग प्रविष्टि कॉपी करें",export:"निर्यात करें",stateReady:"तैयार",stateActive:"सक्रिय",stateError:"त्रुटि",stateEnded:"समाप्त"},M={loadError:"सीक्रेट लोड नहीं हो सके",allAgents:"सभी एजेंट",allowedAgents:"अनुमत एजेंट",allowedAgentsHint:"सभी एजेंट के लिए खाली छोड़ें। एजेंट ID जोड़ने से यह ट्रैक करने में मदद मिलती है कि कौन से एजेंट इस सीक्रेट का उपयोग करते हैं।",allowedAgentsLabel:"अनुमत एजेंट (वैकल्पिक)",allowedAgentsPlaceholder:"एजेंट ID टाइप करें और Enter दबाएं (खाली = सभी एजेंट)",deleteKey:"{{key}} हटाएं",hideValue:"मान छुपाएं",newValuePlaceholder:"नया सीक्रेट मान…",rotate:"घुमाएं",rotateDesc:"नया मान दर्ज करें। मौजूदा संदर्भ अद्यतन मान पर हल होते रहेंगे।",rotateKey:"{{key}} घुमाएं",rotateSuccess:'Secret "{{key}}" घुमाया गया',rotateTitle:'"{{key}}" घुमाएं',showValue:"मान दिखाएं",title:"सीक्रेट वॉल्ट",description:"Vault में एन्क्रिप्टेड Secrets प्रबंधित करें। मान कभी उजागर नहीं होते।",tenantId:"टेनेंट ID",refresh:"Secrets लोड करें",create:"Secret जोड़ें",createTitle:"Secret जोड़ें",keyName:"कुंजी का नाम",keyNameLabel:"कुंजी का नाम",keyNamePlaceholder:"उदा: apiKey, dbPassword",valueLabel:"Secret मान",valuePlaceholder:"Secret मान दर्ज करें…",storeWarning:"मान एन्क्रिप्ट किया जाएगा। संग्रहण के बाद पुनः प्राप्त नहीं किया जा सकता।",store:"Secret संग्रहित करें",storeSuccess:'Secret "{{key}}" संग्रहित किया गया',deleteSuccess:'Secret "{{key}}" हटाया गया',created:"बनाया गया",lastAccessed:"अंतिम पहुंच",checksum:"जांच योग",actions:"कार्रवाई",confirmDeleteTitle:"Secret हटाएं",confirmDeleteMessage:'क्या आप वाकई "{{key}}" को स्थायी रूप से हटाना चाहते हैं? यह पूर्ववत नहीं किया जा सकता।',empty:"कोई Secrets नहीं मिला",emptyHint:'टेनेंट "{{tenant}}" के लिए अभी तक कोई Secret संग्रहीत नहीं है। एक बनाने के लिए "Secret जोड़ें" पर क्लिक करें।',vaultUp:"Vault ऑनलाइन",vaultDown:"Vault ऑफ़लाइन",descriptionLabel:"विवरण (वैकल्पिक)",descriptionPlaceholder:"उदाहरण: उत्पादन के लिए OpenAI API",descriptionCol:"विवरण",reference:"संदर्भ",willUseRef:"संदर्भ:",copyRef:"वॉल्ट का संदर्भ कॉपी करें",refCopied:"कॉपी किया गया: {{ref}}",lastRotated:"अंतिम बार घूमा",scopeExplanation:"सीक्रेट्स हर किरायेदारों के लिए है। इस्तेमाल करें: ${vault:keyName}।",creatingFor:'टेनेंट "{{tenant}}" में सहेज रहा है — सभी एजेंटों के लिए',vaultNotConfigured:"सीक्रेट्स विन्यास नहीं हो सका",viewDocs:"दस्तावेज़ देखें",selectAgentFirst:"पहले एक एजेंट चुनें",dangerZoneTitle:"एन्क्रिप्शन कुंजी जीवनचक्र",dangerZoneDesc:"Vault की क्रिप्टोग्राफ़िक कुंजियों के लिए परिचालन पुनर्प्राप्ति क्रियाएं। इनका उपयोग कुंजियों को घुमाने या मास्टर कुंजी बदलने के बाद पहुंच पुनर्प्राप्त करने के लिए करें। यह ऊपर किसी व्यक्तिगत Secret के मान को घुमाने से अलग है।",rotateDekTitle:"एन्क्रिप्शन कुंजी (DEK) घुमाएं",rotateDekBlurb:"सुरक्षित — कोई रीस्टार्ट नहीं। प्रत्येक टेनेंट के लिए एक नई डेटा एन्क्रिप्शन कुंजी बनाता है और इस टेनेंट के सभी Secret को फिर से एन्क्रिप्ट करता है।",rotateDekAction:"DEK घुमाएं",rotateDekConfirmTitle:"एन्क्रिप्शन कुंजी (DEK) घुमाएं?",rotateDekConfirm:"अभी DEK घुमाएं",rotateKekTitle:"मास्टर कुंजी (KEK) घुमाएं",rotateKekBlurb:"सभी टेनेंट DEK को एक नई मास्टर कुंजी से फिर से एन्क्रिप्ट करता है। इसके लिए EDDI_VAULT_MASTER_KEY अपडेट करना और उसके बाद रीस्टार्ट करना आवश्यक है।",rotateKekAction:"मास्टर कुंजी घुमाएं",rotateKekConfirmTitle:"मास्टर कुंजी (KEK) घुमाएं?",rotateKekConfirmDesc:"प्रत्येक टेनेंट की डेटा एन्क्रिप्शन कुंजी को एक नई मास्टर कुंजी से फिर से एन्क्रिप्ट करता है। Secret के मान स्वयं अपरिवर्तित रहते हैं।",rotateKekConfirm:"अभी मास्टर कुंजी घुमाएं",kekTlsWarning:"दोनों कुंजियां अनुरोध बॉडी में भेजी जाती हैं। इसे केवल TLS (HTTPS) कनेक्शन पर करें ताकि कुंजियां ट्रांज़िट में उजागर न हों।",kekOldKeyLabel:"वर्तमान मास्टर कुंजी",kekOldKeyPlaceholder:"वर्तमान EDDI_VAULT_MASTER_KEY",kekNewKeyLabel:"नई मास्टर कुंजी",kekNewKeyPlaceholder:"नई कुंजी — कम से कम 8 वर्ण",kekNewKeyTooShort:"नई मास्टर कुंजी कम से कम 8 वर्ण की होनी चाहिए।",kekRestartHint:"घुमाने के बाद आपको EDDI_VAULT_MASTER_KEY को नई कुंजी में अपडेट करना होगा और EDDI को रीस्टार्ट करना होगा।",kekResultInstruction:"कार्रवाई आवश्यक: पर्यावरण चर EDDI_VAULT_MASTER_KEY को नई मास्टर कुंजी पर सेट करें और EDDI को रीस्टार्ट करें। जब तक आप ऐसा नहीं करते, चल रहा इंस्टेंस अभी भी मेमोरी में पुरानी कुंजी का उपयोग करता है।",resetTenantTitle:"इस टेनेंट के लिए Vault रीसेट करें",resetTenantBlurb:"विनाशकारी अंतिम उपाय। सभी Secret और DEK को स्थायी रूप से हटा देता है ताकि Vault नए सिरे से शुरू हो सके — मास्टर कुंजी खोने या बदलने के बाद उपयोग करें।",resetTenantAction:"Vault रीसेट करें",resetTenantConfirmTitle:"इस टेनेंट के लिए Vault रीसेट करें?",resetTenantConfirm:"Vault को स्थायी रूप से रीसेट करें",resetConfirmLabel:'पुष्टि करने के लिए टेनेंट नाम "{{tenant}}" टाइप करें',tableTitle_one:'{{count}} सीक्रेट टेनेंट "{{tenant}}" में',tableTitle_other:'{{count}} सीक्रेट टेनेंट "{{tenant}}" में',rotateDekConfirmDesc_one:'यह टेनेंट "{{tenant}}" के लिए एक नई डेटा एन्क्रिप्शन कुंजी बनाता है और उसके {{count}} Secret को फिर से एन्क्रिप्ट करता है। यह सुरक्षित है और तुरंत प्रभावी होता है — किसी रीस्टार्ट की आवश्यकता नहीं है।',rotateDekConfirmDesc_other:'यह टेनेंट "{{tenant}}" के लिए एक नई डेटा एन्क्रिप्शन कुंजी बनाता है और उसके {{count}} Secret को फिर से एन्क्रिप्ट करता है। यह सुरक्षित है और तुरंत प्रभावी होता है — किसी रीस्टार्ट की आवश्यकता नहीं है।',rotateDekSuccess_one:"एन्क्रिप्शन कुंजी घुमाई गई — {{count}} Secret फिर से एन्क्रिप्ट किए गए",rotateDekSuccess_other:"एन्क्रिप्शन कुंजी घुमाई गई — {{count}} Secret फिर से एन्क्रिप्ट किए गए",kekResultTitle_one:"मास्टर कुंजी घुमाई गई — {{count}} DEK फिर से एन्क्रिप्ट किए गए",kekResultTitle_other:"मास्टर कुंजी घुमाई गई — {{count}} DEK फिर से एन्क्रिप्ट किए गए",rotateKekSuccess_one:"मास्टर कुंजी घुमाई गई — {{count}} DEK फिर से एन्क्रिप्ट किए गए। EDDI_VAULT_MASTER_KEY अपडेट करें और रीस्टार्ट करें।",rotateKekSuccess_other:"मास्टर कुंजी घुमाई गई — {{count}} DEK फिर से एन्क्रिप्ट किए गए। EDDI_VAULT_MASTER_KEY अपडेट करें और रीस्टार्ट करें।",resetTenantConfirmDesc_one:'यह टेनेंट "{{tenant}}" के सभी {{count}} Secret और डेटा एन्क्रिप्शन कुंजी को स्थायी रूप से हटा देता है। जब मास्टर कुंजी खो गई हो या बदल गई हो और पुरानी कुंजी उपलब्ध न हो, तो इसे पुनर्प्राप्ति चरण के रूप में उपयोग करें। इसे पूर्ववत नहीं किया जा सकता।',resetTenantConfirmDesc_other:'यह टेनेंट "{{tenant}}" के सभी {{count}} Secret और डेटा एन्क्रिप्शन कुंजी को स्थायी रूप से हटा देता है। जब मास्टर कुंजी खो गई हो या बदल गई हो और पुरानी कुंजी उपलब्ध न हो, तो इसे पुनर्प्राप्ति चरण के रूप में उपयोग करें। इसे पूर्ववत नहीं किया जा सकता।',resetSecretCount_one:"{{count}} Secret स्थायी रूप से खो जाएंगे",resetSecretCount_other:"{{count}} Secret स्थायी रूप से खो जाएंगे",resetTenantSuccess_one:'"{{tenant}}" के लिए Vault रीसेट किया गया — {{count}} Secret स्थायी रूप से हटाए गए',resetTenantSuccess_other:'"{{tenant}}" के लिए Vault रीसेट किया गया — {{count}} Secret स्थायी रूप से हटाए गए'},R={title:"ऑडिट लॉग",description:"अनुपालन और डीबगिंग के लिए अपरिवर्तनीय ऑडिट लेजर ब्राउज़ करें।",byConversation:"वार्तालाप द्वारा",byAgent:"Agent द्वारा",conversationIdPlaceholder:"वार्तालाप ID दर्ज करें...",agentIdPlaceholder:"Agent ID दर्ज करें...",versionPlaceholder:"संस्करण (वैकल्पिक)",search:"खोजें",entries:"प्रविष्टियां",totalDuration:"कुल",totalCost:"कुल लागत",step:"चरण",tasks:"कार्य",input:"इनपुट",output:"आउटपुट",llmDetail:"LLM विवरण",toolCalls:"टूल कॉल",hmacIntegrity:"HMAC अखंडता सत्यापित",empty:"ऑडिट प्रविष्टियां खोजें",emptyHint:"Audit Trail ब्राउज़ करने के लिए ऊपर वार्तालाप या Agent ID दर्ज करें।",noResults:"कोई ऑडिट प्रविष्टियां नहीं मिलीं",noResultsHint:"भिन्न ID आज़माएं या जांचें कि वार्तालाप संसाधित हो चुका है।",loadMore:"और लोड करें",selectAgent:"Select an agent…",conversations:"conversations",emptyAgent:"Select an agent to view its audit trail",emptyAgentHint:"Choose a deployed agent from the dropdown above to see all its audit records.",export:"Export",autoRefreshToggle:"Toggle auto-refresh (every 10s)",autoRefreshOn:"Auto",autoRefreshOff:"Auto",integrityVerified:"All entries cryptographically signed",integrityVerifiedDesc:"{{count}} of {{total}} entries have HMAC-SHA256 signatures",integrityPass:"SIGNED",integrityPartial:"Partially signed audit trail",integrityPartialDesc:"{{count}} of {{total}} entries have HMAC signatures",integrityNone:"Unsigned audit entries",integrityNoneDesc:"Configure a vault master key to enable automatic HMAC-SHA256 signing on all future audit entries.",signed:"Signed",allSigned:"All signed",decidedBy:"द्वारा",automated:"स्वचालित"},H={cronHelp:"5-फ़ील्ड प्रारूप: मिनट घंटा माह-का-दिन माह सप्ताह-का-दिन",cronEveryMinute:"हर मिनट",cronEveryNMinutes:"हर {{n}} मिनट में",cronHourlyAt:"हर घंटे :{{minute}} पर",cronEveryNHours:"हर {{n}} घंटे :{{minute}} पर",cronAtTime:"{{time}} बजे",cronAtMinutePastEveryHour:"हर घंटे के {{minutes}} मिनट पर",cronAtMinutePastHours:"{{hours}} घंटे के {{minutes}} मिनट पर",cronOnDays:"{{days}} को",cronOnDayOfMonth:"महीने की {{days}} तारीख को",cronInMonths:"{{months}} में",cronInvalid:"अमान्य cron अभिव्यक्ति (5 फ़ील्ड अपेक्षित)",cronTooFrequent:"60-सेकंड न्यूनतम से अधिक बार निष्पादित होता है",failedEmptyHint:"डेड-लेटर किए गए निष्पादन पुनः प्रयास या खारिज करने के लिए यहां दिखाई देंगे।",failedSubtitle:"जो निष्पादन स्थायी रूप से विफल हुए। पुनः कतारबद्ध करने के लिए पुनः प्रयास करें, या पुनः चलाए बिना साफ़ करने के लिए खारिज करें।",intervalTooShort:"अंतराल कम से कम 60 सेकंड होना चाहिए",lastManualFire:"अंतिम मैनुअल निष्पादन",oneTimeHelp:"इस क्षण एक बार निष्पादित होता है, फिर पूर्ण हो जाता है। आपके स्थानीय समय में व्याख्या की जाती है।",outcomePending:"ट्रिगर किया गया — परिणाम की प्रतीक्षा",persistentConversationId:"स्थायी बातचीत ID",persistentConversationIdPlaceholder:"खाली छोड़ने पर स्वतः-जनरेट",strategyPersistent:"स्थायी (समान बातचीत पुनः उपयोग करें)",fireDeadLettered:"डेड-लेटर",fireFailed:"विफल",fireCompleted:"पूर्ण",title:"शेड्यूल",subtitle:"Agent शेड्यूल ट्रिगर प्रबंधित करें — Cron और Heartbeats",create:"शेड्यूल बनाएं",createTitle:"शेड्यूल बनाएं",createSuccess:"शेड्यूल सफलतापूर्वक बनाया गया",createError:"शेड्यूल बनाने में विफल",creating:"बनाया जा रहा है...",name:"नाम",namePlaceholder:"उदा: दैनिक स्वास्थ्य जांच",triggerType:"ट्रिगर प्रकार",cronExpression:"Cron अभिव्यक्ति",interval:"अंतराल (सेकंड)",agentId:"Agent ID",agentIdPlaceholder:"Agent ID दर्ज करें...",environment:"परिवेश",message:"संदेश",messagePlaceholder:"Agent को भेजने का संदेश",conversationStrategy:"वार्तालाप रणनीति",total:"कुल शेड्यूल",active:"सक्रिय",failedCount:"विफल / Dead-Lettered",nextFireLabel:"अगला निष्पादन",tableTitle:"सभी शेड्यूल",empty:"अभी तक कोई शेड्यूल नहीं",emptyHint:"Agent ट्रिगर स्वचालित करने के लिए शेड्यूल बनाएं।",colName:"नाम",colType:"प्रकार",colSchedule:"शेड्यूल",colAgent:"एजेंट",colStatus:"स्थिति",colNextFire:"अगला",colLastFired:"पिछला",colActions:"कार्रवाई",enable:"सक्षम करें",disable:"अक्षम करें",enabled:"शेड्यूल सक्षम किया गया",disabled:"शेड्यूल अक्षम किया गया",toggleError:"शेड्यूल टॉगल करने में विफल",fireNow:"अभी निष्पादित करें",fired:"शेड्यूल सफलतापूर्वक निष्पादित",fireError:"निष्पादन विफल",retry:"पुनः प्रयास",retrySuccess:"शेड्यूल पुनः कतारबद्ध",retryError:"पुनः प्रयास विफल",deleteSuccess:"शेड्यूल हटाया गया",deleteError:"शेड्यूल हटाने में विफल",fireHistory:"निष्पादन इतिहास",hitlTimeout:"HITL टाइमआउट",hitlTimeoutHint:"सिस्टम-प्रबंधित HITL अनुमोदन टाइमआउट — इसे यहाँ नहीं, बल्कि बातचीत के अनुमोदन के माध्यम से हल करें।",statusDisabled:"अक्षम",statusActive:"सक्रिय",statusRunning:"चल रहा है",statusExecuting:"निष्पादित हो रहा है",statusFailed:"विफल",statusDeadLettered:"Dead-Letter",typeHeartbeat:"Heartbeat",typeOneTime:"एक बार",typeCron:"Cron",noFireHistory:"अभी तक कोई निष्पादन इतिहास नहीं",logFired:"निष्पादित",logDuration:"अवधि",logResult:"परिणाम",logAttempt:"प्रयास",logCost:"लागत",logConversation:"बातचीत",dismissSuccess:"Dead-letter खारिज किया गया",dismissError:"Dead-letter खारिज करने में विफल",failedTitle:"विफल और Dead-Letter निष्पादन",failedEmpty:"कोई विफल निष्पादन नहीं",colSchedule2:"शेड्यूल",dismiss:"खारिज करें",updateSuccess:"शेड्यूल अपडेट किया गया",updateError:"शेड्यूल अपडेट करने में विफल",editTitle:"शेड्यूल संपादित करें",cronNext:"अगला",oneTimeAt:"दिनांक और समय",timeZone:"समय क्षेत्र",agentVersion:"संस्करण",agentVersionHint:"0 = नवीनतम तैनात",envProduction:"प्रोडक्शन",envTest:"परीक्षण",userId:"उपयोगकर्ता ID",userIdPlaceholder:"system:scheduler",maxCostPerFire:"प्रति निष्पादन अधिकतम लागत",unlimited:"असीमित",strategyNew:"नया (हर निष्पादन पर नई बातचीत)",saving:"सहेजा जा रहा है...",fireOutcomeFailed:"निष्पादन विफल",unknownError:"अज्ञात त्रुटि",tabSchedules:"शेड्यूल",tabFailed:"विफल / Dead-letter",cronPreset:{every15Minutes:"हर 15 मिनट",hourly:"हर घंटे (पूरे घंटे पर)",dailyMorning:"प्रतिदिन 09:00 बजे",weekdays:"कार्यदिवसों में 09:00 बजे",weeklyMonday:"साप्ताहिक (सोम 00:00)",monthly:"मासिक (1 तारीख, 00:00)"}},N={title:"मॉडल कैस्केड",escalated:"विश्वास {{c}} < {{th}}",escalatedShort:"एस्केलेट किया गया",accepted:"स्वीकृत",reason:{lowConfidence:"कम विश्वास",timeout:"टाइमआउट",error:"त्रुटि",retryableError:"पुनः प्रयास योग्य त्रुटि"}},O={pipelineError:"पाइपलाइन ट्रेस लोड करने में विफल",title:"डीबग",tabPipeline:"पाइपलाइन",tabCosts:"लागत",tabMemory:"मेमोरी",tabLogs:"लॉग्स",tabPrompt:"प्रॉम्प्ट",turn:"टर्न",latest:"नवीनतम",noPipeline:"पाइपलाइन ट्रेस देखने के लिए एक संदेश भेजें",processing:"प्रोसेस हो रहा है...",actions:"कार्रवाई",confidence:"विश्वास",duration:"अवधि",cost:"लागत",in:"इनपुट",input:"इनपुट",model:"मॉडल",out:"आउटपुट",output:"आउटपुट",tokens:"टोकन",toolCalls:"टूल"},x={error:"सर्वर से लागत डेटा लोड नहीं किया जा सका",thisTurn:"यह टर्न",conversationTotal:"कुल चर्चा",tokens:"Tokens",cost:"लागत",duration:"अवधि",model:"मॉडल",toolCalls:"टूल कॉल्स",toolUsage:"टूल उपयोग",cacheStats:"कैश",hitRate:"हिट रेट",empty:"लागत मेट्रिक्स देखने के लिए संदेश भेजें",in:"इन",out:"आउट",total:"कुल",calls:"कॉल्स",avgLatency:"औसत विलंबता",input:"इनपुट",output:"आउटपुट",tokenDistribution:"टोकन वितरण",totalCost:"कुल लागत",totalTokens:"कुल टोकन",turns:"चरण"},_={error:"मेमोरी डेटा लोड करने में विफल",title:"वार्तालाप मेमोरी",noConversation:"मेमोरी का निरीक्षण करने के लिए एक वार्तालाप प्रारंभ करें",empty:"कोई मेमोरी डेटा उपलब्ध नहीं है",properties:"गुण",step:"चरण",keys:"कुंजियाँ",input:"इनपुट",collapseAll:"सभी संक्षिप्त करें",copyKey:"कुंजी कॉपी करें",copyValue:"मान कॉपी करें",customProperties:"कस्टम गुण",expandAll:"सभी विस्तृत करें",noMatches:"कोई मिलता-जुलता डेटा नहीं मिला",search:"कुंजी या मान खोजें…",stepData:"चरण डेटा",systemProperties:"सिस्टम गुण"},U={noAgent:"लॉग देखने के लिए एक Agent चुनें",search:"खोजें...",pause:"विराम",resume:"जारी रखें",clear:"साफ़ करें",waiting:"लॉग की प्रतीक्षा की जा रही है...",connected:"जुड़ा हुआ",disconnected:"डिसकनेक्ट",logOutput:"लॉग आउटपुट",noMatch:"आपके फ़िल्टर से कोई लॉग मेल नहीं खाता"},F={error:"प्रॉम्प्ट डेटा लोड करने में विफल",noConversation:"प्रॉम्प्ट का निरीक्षण करने के लिए वार्तालाप प्रारंभ करें",noLlm:"अभी तक कोई LLM इंटरैक्शन नहीं मिला",turn:"टर्न",latest:"नवीनतम",tokens:"Tokens",model:"मॉडल",cost:"लागत",copy:"प्रॉम्प्ट कॉपी करें",copied:"कॉपी किया गया!",replay:"इस टर्न को फिर से चलाएं",toolCalls:"टूल कॉल्स",step:"चरण",roleSystem:"सिस्टम प्रॉम्प्ट",roleUser:"उपयोगकर्ता",roleAssistant:"सहायक",roleTool:"टूल परिणाम",collapse:"संक्षिप्त करें",showMore:"और दिखाएं",temperature:"तापमान"},W={preview:"पूर्वावलोकन",edit:"संपादन",switchToPreview:"हल किए गए प्रॉम्प्ट का पूर्वावलोकन",switchToEdit:"संपादन पर जाएं",refresh:"रिफ़्रेश",sampleData:"नमूना डेटा (बातचीत के बिना)",disclaimerReal:"पूर्वावलोकन वास्तविक बातचीत डेटा के साथ Qute इंजन का उपयोग करता है।",disclaimerSample:"पूर्वावलोकन नमूना डेटा के साथ Qute इंजन का उपयोग करता है। वास्तविक मानों के लिए कोई बातचीत चुनें।",resolvedPrompt:"हल किया गया प्रॉम्प्ट",copy:"कॉपी",copied:"कॉपी हो गया!",error:"टेम्पलेट हल करने में त्रुटि",loading:"टेम्पलेट हल हो रहा है…",availableVariables:"उपलब्ध चर",copyVariable:"चर संदर्भ कॉपी करने के लिए क्लिक करें",varProperties:"गुण",varMemory:"स्मृति",varContext:"संदर्भ",varSnippets:"स्निपेट",varUserInfo:"उपयोगकर्ता जानकारी",varConversationInfo:"बातचीत जानकारी",varInput:"इनपुट",varConversationLog:"बातचीत लॉग"},B={title:"एजेंट स्टूडियो",subtitle:"एक ही कार्यस्थान में अपने Agents का निर्माण, परीक्षण और डीबग करें",pipeline:"पाइपलाइन",editor:"संपादक",debug:"डीबग और चैट",selectStage:"संपादक खोलने के लिए किसी भी पाइपलाइन चरण पर क्लिक करें",openInStudio:"स्टूडियो में खोलें",loading:"Agent लोड हो रहा है...",notFound:"Agent नहीं मिला",hideChat:"चैट छिपाएं",showChat:"चैट दिखाएं",openEditor:"संपादक में खोलें",editorComingSoon:"इन-प्लेस संपादक एकीकरण जल्द आ रहा है",noPipeline:"कोई पाइपलाइन चरण नहीं",type:{parser:"पार्सर",rules:"नियम",property:"प्रॉपर्टी सेटर",apicalls:"API कॉल्स",llm:"LLM",output:"आउटपुट","output.template":"आउटपुट टेम्प्लेट",mcpcalls:"MCP कॉल्स",rag:"नॉलेज बेस",dictionary:"शब्दकोश"},landingDescription:"विज़ुअल पाइपलाइन एडिटर, डीबगर और लाइव चैट खोलने के लिए एक एजेंट चुनें",noAgents:"कोई एजेंट नहीं मिला — एजेंट पेज से एक बनाएं",chat:"चैट",backToAgent:"एजेंट पर वापस जाएं",selectStageHint:"कॉन्फ़िगरेशन इनलाइन देखने और संपादित करने के लिए पाइपलाइन में कोई एक्सटेंशन चुनें",noConfig:"इस पाइपलाइन चरण का कोई कॉन्फ़िगरेशन URI नहीं है",unsupportedType:"इस एक्सटेंशन प्रकार के लिए एडिटर उपलब्ध नहीं है"},V={general:"सामान्य",kbName:"नॉलेज बेस का नाम",kbNamePlaceholder:"उदा: product-docs, faq, internal-wiki",kbNameHint:"LLM कार्यों से इस KB को संदर्भित करने के लिए उपयोग किया जाता है",embeddingModel:"एम्बेडिंग मॉडल",provider:"प्रदाता",embeddingParams:"प्रदाता पैरामीटर",embeddingParamsHint:"मॉडल का नाम, API कुंजी (गुप्त जानकारी के लिए ${vault:...} उपयोग करें), बेस URL आदि।",vectorStore:"वेक्टर प्रणाली",storeType:"स्टोर के प्रकार",storeParams:"कनेक्शन पैरामीटर",chunking:"दस्तावेज़ चंकिंग",chunkStrategy:"रणनीति",chunkSize:"चंक आकार",chunkOverlap:"चंक ओवरलैप",overlapHint:"ओवरलैप चंक्स के बीच संदर्भ बनाए रखने में मदद करता है",chunkPreview:"पूर्वावलोकन (दस्तावेज़ कैसे विभाजित होगा)",chunkBlocks:"{{overlap}} वर्णों के ओवरलैप के साथ लगभग {{size}} वर्णों के {{count}} चंक्स",retrievalDefaults:"दस्तावेज पुनर्प्राप्ति डिफ़ॉल्ट",retrievalHint:"इन डिफ़ॉल्ट्स को LLM कॉन्फ़िगरेशन में प्रति-कार्य के आधार पर ओवरराइड किया जा सकता है।",maxResults:"अधिकतम परिणाम (top-K)",minScore:"न्यूनतम समानता स्कोर",ingestion:"दस्तावेज़ अंतर्ग्रहण",dropFiles:"फ़ाइलों को यहाँ पर ड्रैग एंड ड्रॉप करें",dropHint:"टेक्स्ट, मार्कडाउन या अन्य कोई टेक्स्ट पर आधारित फ़ाइल",browse:"ब्राउज़ करें",pasteText:"या केवल टेक्स्ट पेस्ट करें",pastePlaceholder:"दस्तावेज़ का टेक्स्ट यहाँ पेस्ट करें...",ingestText:"टेक्स्ट सुरक्षित करें",ingestionHistory:"अंतर्ग्रहण स्थिति",saveFirstIngestion:"दस्तावेज़ को प्रोसेस करने से पहले इस नॉलेज बेस को सहेजें।",addParam:"पैरामीटर जोड़ें"},G={welcome:{title:"EDDI में आपका स्वागत है",subtitle:"आपका AI Agent कमांड सेंटर",introText:"EDDI ऍप्लिकेशन संवादात्मक AI एजेंटों के निर्माण, परीक्षण और संचालन के लिए आपका कमांड सेंटर है।",capabilitiesTitle:"आप क्या कर सकते हैं",capabilitiesSubtitle:"उत्पादन-तैयार (Production) AI एजेंट बनाने के लिए आवश्यक सब कुछ",buildAgents:"एजेंट (Agents) बनाएं",buildAgentsDesc:"विज़ार्ड के साथ या शुरू से AI एजेंट बनाएं और कॉन्फ़िगर करें",designWorkflows:"वर्कफ़्लो डिज़ाइन करें",designWorkflowsDesc:"LLM चयन प्रक्रिया, नियमों और उपकरण युक्त ड्रैग-एंड-ड्रॉप बिल्डर",testRealtime:"रीयल-टाइम में परीक्षण करें",testRealtimeDesc:"स्ट्रीमिंग प्रतिक्रियाओं और अंतर्निहित डीबगिंग सुविधाओं के साथ अपने एजेंट्स से बातचीत करें",monitorOperate:"समीक्षा और संचालन",monitorOperateDesc:"वार्तालाप, ऑडिट ट्रेल्स, गुप्त कुंज़ियाँ (Secrets) और सीमाएं (Quotas) — सब एक ही स्थान पर",readyTitle:"शुरू करने के लिए तैयार हैं?",readySubtitle:"आप साइडबार में स्थित सहायता मेनू से किसी भी परिचय-यात्रा को कभी भी पुनरारंभ कर सकते हैं",startTour:"टूर प्रारंभ करें",exploreOwn:"मैं स्वयं से निरीक्षण करूँगा"},tour:{back:"वापस",next:"अगला",skip:"टूर छोड़ें",finish:"समाप्त करें",stepOf:"चरण {{current}} / {{total}}",dashboard:{title:"डैशबोर्ड टूर",step1Title:"आपका कमांड सेंटर",step1Desc:"साइडबार सब कुछ तीन क्षेत्रों में व्यवस्थित करता है: प्रबंधन, विकास और संचालन। आप हमेशा जानेंगे कि चीजें कहां ढूंढनी हैं।",step2Title:"प्लैटफॉर्म अवलोकन",step2Desc:"आपके एजेंटों, वर्कफ़्लो और वार्तालापों की लाइव गणना। सीधे उस अनुभाग पर जाने के लिए किसी भी कार्ड पर क्लिक करें।",step3Title:"त्वरित क्रियाएं",step3Desc:"सामान्य कार्यों पर सीधे जाएं। एजेंट विज़ार्ड आपका पहला एजेंट बनाने का सबसे तेज़ तरीका है — इसमें 2 मिनट से भी कम समय लगता है।",step4Title:"इसे अपना बनाएं",step4Desc:"लाइट, डार्क और सिस्टम थीम के बीच स्विच करें। EDDI प्रशासक 11 भाषाएं बोलता है — भाषा चयनकर्ता से अपनी भाषा चुनें।"},agents:{title:"एजेंट्स टूर",step1Title:"विज़ार्ड",step1Desc:"विज़ार्ड एक पूरी तरह से कॉन्फ़िगर किए गए एजेंट को बनाने में आपका मार्गदर्शन करता है — एक मॉडल चुनें, व्यक्तित्व सेट करें, उपकरण सक्षम करें और परिनियोजित (deploy) करें।",step2Title:"मैनुअल निर्माण",step2Desc:"उन्नत उपयोगकर्ताओं के लिए: एक रिक्त एजेंट बनाएं और इसे पूर्ण JSON नियंत्रण के साथ कॉन्फ़िगर करें।",step3Title:"खोजें और फ़िल्टर करें",step3Desc:"नाम से तुरंत एजेंटों को खोजें। दाईं ओर टॉगल के साथ कार्ड और सूची दृश्यों के बीच स्विच करें।",step4Title:"एजेंट सूची",step4Desc:"प्रत्येक कार्ड एजेंट का नाम, संस्करण और अंतिम संशोधित समय दिखाता है। परिनियोजन, चैट और वर्कफ़्लो नियंत्रणों के साथ विस्तृत पृष्ठ के लिए किसी भी एजेंट पर क्लिक करें।"},workflows:{title:"वर्कफ़्लो टूर",step1Title:"वर्कफ़्लो बनाएं",step1Desc:"वर्कफ़्लो पाइपलाइन - LLM कॉल, व्यवहार नियम और HTTP कॉल जैसे कार्य की एक कतार को परिभाषित करते हैं।",step2Title:"आपके वर्कफ़्लो",step2Desc:"विभिन्न वर्कफ़्लो को एक या अधिक विशिष्ट एजेंट्स से जोड़ा जा सकता है। ड्रैग-एंड-ड्रॉप संपादक खोलने के लिए क्लिक करें।",step3Title:"नज़ारे व्यवस्थित करें",step3Desc:"नाम से खोजें और कार्ड ग्रिड और क्रमबद्ध योग्य सूची दृश्यों के बीच टॉगल करें।"},chat:{title:"चैट टूर",step1Title:"एक एजेंट चुनें",step1Desc:"वार्तालाप प्रारंभ करने के लिए एक परिनियोजित (deployed) एजेंट का चयन करें। केवल वही एजेंट यहां दिखाई देते हैं जिन्हें परिनियोजित किया गया है।",step2Title:"स्ट्रीमिंग मोड",step2Desc:"रियल टाइम टोकन स्ट्रीमिंग टॉगल करें। जब सक्षम होता है, तो प्रतिक्रिया शब्द-दर-शब्द प्रकट होती है - जो विलंबता को डीबग करने के लिए उत्तम है।",step3Title:"वार्तालाप इतिहास",step3Desc:"पिछले वार्तालापों को ब्राउज़ करने और फिर से शुरू करने के लिए साइडबार खोलें।",step4Title:"चैट प्रारंभ करें",step4Desc:"एक संदेश टाइप करें और एंटर दबाएं। एजेंट आपके द्वारा कॉन्फ़िगर किए गए LLM, टूल और वर्कफ़्लो का उपयोग करके प्रतिक्रिया देगा।"},resources:{title:"संसाधन (Resources) टूर",step1Title:"एक्सटेंशन लाइब्रेरी",step1Desc:"संसाधन वर्कफ़्लो के बिल्डिंग ब्लॉक हैं। प्रत्येक प्रकार एजेंट के व्यवहार के एक अलग हिस्से को नियंत्रित करता है।",step2Title:"LLM कॉन्फ़िगरेशन",step2Desc:"परिभाषित करें कि कौन सा AI मॉडल आपके एजेंट की सिस्टम प्रांप्ट (Prompt), उपकरण, MCP सर्वर और कैस्केड सेटिंग्स को चलाता है। यह एजेंट का मस्तिष्क है।",step3Title:"नियम और API कॉल्स",step3Desc:"व्यवहार नियम बातचीत के प्रवाह को नियंत्रित करते हैं। HTTP कॉल्स बाहरी API से जुड़ते हैं। दोनों को LLM टूल के रूप में इस्तेमाल किया जा सकता है।"},conversations:{title:"वार्तालाप टूर",step1Title:"खोज",step1Desc:"ID, एजेंट, या हाल के उपयोगकर्ता संदेशों द्वारा त्वरित रूप से वार्तालाप खोजें।",step2Title:"स्थिति फ़िल्टर",step2Desc:"अवस्था के अनुसार बातचीत फ़िल्टर करें: सक्रिय, प्रगति पर, समाप्त, या त्रुटि।",step3Title:"वार्तालाप सूची",step3Desc:"सभी सत्र ब्राउज़ करें। समयरेखा खोलने और डीबग करने के लिए किसी भी वार्तालाप कार्ड पर क्लिक करें।"},groups:{title:"समूह (Groups) टूर",step1Title:"समूह बनाएं",step1Desc:"एकाधिक एजेंटों को सहयोग और बहस करने देने के लिए एक ऑर्केस्ट्रेशन समूह बनाएं।",step2Title:"समूह खोजें",step2Desc:"अपने मौजूदा बहु-एजेंट क्लस्टर के माध्यम से खोजें।",step3Title:"समूह ग्रिड",step3Desc:"अपने सहयोगी वातावरण प्रबंधित करें, उनकी नीतियां संपादित करें, या पुराने समूहों को हटा दें।"},logs:{newLogs:"नए लॉग",title:"सिस्टम लॉग्ज़ टूर",step1Title:"लाइव बनाम इतिहास",step1Desc:"सिस्टम लॉग की वास्तविक समय की धारा और ऐतिहासिक लॉग खोज के बीच स्विच करें।",step2Title:"स्ट्रीम फ़िल्टर",step2Desc:"आने वाले लाइव स्ट्रीम को एजेंट या महत्वपूर्ण लॉग स्तर द्वारा फ़िल्टर करें।",step3Title:"तैयार",step3Desc:"बाहरी विश्लेषण के लिए वर्तमान फ़िल्टर किए गए लॉग को एक टेक्स्ट फ़ाइल के रूप में डाउनलोड करें।"},secrets:{title:"गुप्त खजाना (Vault) टूर",step1Title:"गुप्त (Secret) बनाएं",step1Desc:"सुरक्षित रूप से एक नई API कुंजी, टोकन, या पासवर्ड स्टोर करें जिसका संदर्भ आपके एजेंट दे सकते हैं।",step2Title:"टेनेंट (Tenant) अलगाव",step2Desc:"विशिष्ट किरायेदार ID तक सीमित गुप्त (Secrets) दिखाने के लिए वॉल्ट (Vault) दृश्य को फ़िल्टर करें।",step3Title:"संदर्भ सिंटैक्स",step3Desc:"जानें कि बिना हार्डकोडिंग के अपने LLM कॉन्फ़िगरेशन में डायनामिक रूप से रहस्यों को कैसे इंजेक्ट किया जाए।"},audit:{title:"ऑडिट लेजर टूर",step1Title:"खोज मोड",step1Desc:"एक विशिष्ट वार्तालाप ID या एजेंट संस्करण द्वारा अपरिवर्तनीय ऑडिट लेज़र खोजें।",step2Title:"खोज निष्पादित करें",step2Desc:"सत्यापन योग्य निष्पादन इतिहास खींचने के लिए अपनी ID दर्ज करें और खोज पर क्लिक करें।",step3Title:"लेजर निर्यात (Export) करें",step3Desc:"अनुपालन और रिपोर्टिंग के लिए प्राप्त ऑडिट रिकॉर्ड को JSON में निर्यात करें।"},schedules:{title:"शेड्यूल टूर",step1Title:"शेड्यूल बनाएं",step1Desc:"एजेंट वर्कफ़्लो को स्वचालित रूप से ट्रिगर करने के लिए एक नई क्रॉन (cron) जॉब या निरंतर हार्टबीट (heartbeat) सेट अप करें।",step2Title:"स्वास्थ्य आँकड़े",step2Desc:"अपने प्लेटफॉर्म पर कुल, सक्रिय और विफल अनुसूचियों की निगरानी करें।",step3Title:"शेड्यूल प्रबंधन",step3Desc:"अपने स्वचालित ट्रिगर को मूल रूप से प्रबंधित करें: उन्हें रोकें, फिर से शुरू करें, संपादित करें, या टेस्ट-फ़ायर करें।"},quotas:{saveSuccess:"कोटा सहेजा गया",resetSuccess:"उपयोग काउंटर रीसेट किए गए",resetConfirmDesc:'टेनेंट "default" के सभी उपयोग काउंटर (बातचीत, API कॉल, मासिक लागत) तुरंत शून्य कर देता है। इसे पूर्ववत नहीं किया जा सकता।',resetConfirmTitle:"उपयोग काउंटर रीसेट करें?",title:"कोटा (Quotas) टूर",step1Title:"कॉन्फ़िगरेशन बाधाएं",step1Desc:"इस खाते (tenant) के लिए कुल एजेंटों, दैनिक बातचीत, और टोकन लागत पर कठिन सीमाएं परिभाषित करें।",step2Title:"उपयोग संबंधी विश्लेषण",step2Desc:"मॉनिटर करें कि खाते (tenant) ने आवंटित कोटे का कितना हिस्सा वास्तविक समय में खपत किया है।",step3Title:"परिवर्तन लागू करें",step3Desc:"अपनी समायोजित सीमाओं को सहेजें। प्लेटफॉर्म ट्रैफ़िक को ब्लॉक कर देगा जो इन सीमाओं का उल्लंघन करता है।"},coordinator:{title:"कॉर्डिनेटर टूर",step1Title:"लाइव कनेक्शन",step1Desc:"बैकएंड समन्वयक सिस्टम से जुड़े हार्टबीट और ईवेंट स्रोत देखें।",step2Title:"कतार (Queue) प्रसंस्करण",step2Desc:"अपने क्लस्टर पर रीयल-टाइम कार्य कतारों (queues) और सक्रिय जॉब निष्पादन की निगरानी करें।",step3Title:"मृत पत्र",step3Desc:"सिस्टम स्थिरता बनाए रखने के लिए विफल कार्यों का निरीक्षण करें और व्यवस्थित रूप से उन्हें त्यागें या पुनः प्रयास करें।"},orphans:{confirmPurgeAll:"सभी {{count}} अनाथ संसाधनों को स्थायी रूप से हटाएँ? सर्वर सभी को हटा देता है — आपका चयन लागू नहीं होता। इसे पूर्ववत नहीं किया जा सकता।",title:"अनाथ संसाधन टूर",step1Title:"स्कैन शुरू करें",step1Desc:"किसी भी एजेंट से कटे हुए ढीले कॉन्फ़िगरेशन का पता लगाने के लिए एक प्लेटफ़ॉर्म स्कैन प्राम्भ करें।",step2Title:"सॉफ्ट-डिलीटेड (Soft-Deleted) शामिल करें",step2Desc:"वैकल्पिक रूप से शुद्ध (purge) में ऐतिहासिक रूप से हटाए गए रिकॉर्ड को शामिल करने के लिए टॉगल करें।",step3Title:"समीक्षा और पुर्ज (Purge)",step3Desc:"स्कैनर की रिपोर्ट की समीक्षा करें, पुरानी वस्तुओं का चयन करें, और डेटाबेस स्थान को पुनः प्राप्त करने के लिए स्थायी रूप से साफ़ करें।"}},help:{title:"सहायता और टूर",platformTour:"प्लेटफ़ॉर्म टूर",resetAll:"सभी टूर रीसेट करें",resetConfirm:"क्या आप सभी टुर प्रगति को रीसेट करना चाहते हैं?"},offer:{message:"क्या आप नए हैं? {{page}} लें",accept:"मुझे दिखाएं",dontAsk:"फिर कभी न पूछें"}},K={status:"प्लेटफ़ॉर्म स्थिति",online:"ऑनलाइन",offline:"ऑफ़लाइन",checking:"कनेक्शन जाँच…",connected:"कनेक्टेड",disconnected:"डिस्कनेक्टेड",instance:"दृष्टांत",latency:"विलंब",lastChecked:"अंतिम जाँच",justNow:"अभी",secondsAgo:"{{count}} सेकंड पहले"},q={live:"लाइव",reconnecting:"पुनः कनेक्ट हो रहा है…"},j={title:"नया {{type}}",newAgent:"नया एजेंट",newGroup:"नया समूह",quickCreate:"त्वरित निर्माण",quickCreateTitle:"त्वरित {{type}} बनाएं",quickCreateDesc:"एक नाम और विवरण सेट करें, विवरण बाद में कॉन्फ़िगर करें।",guidedSetup:"निर्देशित सेटअप",guidedSetupDesc:"LLM प्रदाता, प्रॉम्प्ट (Prompts) और डिप्लॉयमेंट (Deployment) के साथ चरण-दर-चरण विज़ार्ड।"},z=JSON.parse('{"actionConflict":"एक अन्य ऑपरेशन अभी भी प्रगति में है, या यह चर्चा अब उस क्रिया को स्वीकार नहीं करती। कृपया पुनः प्रयास करें।","actionTimeout":"एक सदस्य एजेंट ने समय पर प्रतिक्रिया नहीं दी। कृपया पुनः प्रयास करें।","actionUnreachable":"एक सदस्य एजेंट तक नहीं पहुंचा जा सका। कृपया पुनः प्रयास करें।","addMember":"सदस्य जोड़ें","allowHtmlTooltip":"सक्षम होने पर, HTML सामग्री रेंडर करता है (सैनिटाइज़्ड)। केवल विश्वसनीय एजेंट के साथ उपयोग करें।","askQuestion":"समूह द्वारा चर्चा के लिए एक प्रश्न पूछें…","assignAgents":"प्रत्येक सदस्य भूमिका को एजेंट सौंपें।","blankDesc":"सब कुछ मैन्युअल रूप से कॉन्फ़िगर करें।","characters":"अक्षर","chooseTemplate":"एक टेम्पलेट चुनें या शुरू से आरंभ करें।","closeConfirmDescription":"बंद करने से सभी सदस्य बातचीत स्थायी रूप से समाप्त हो जाती हैं और किसी भी अस्थायी एजेंट को साफ़ कर दिया जाता है। कोई और फ़ॉलो-अप या निरंतरता संभव नहीं है। इसे पूर्ववत नहीं किया जा सकता।","composeQuestion":"प्रश्न रचें","continueButton":"जारी रखें","continueHint":"सभी चरणों को एक नए राउंड के रूप में पुनः चलाता है; प्रत्येक एजेंट पिछले राउंड की मेमोरी रखता है। निरंतरता में अनुलग्नक नहीं जोड़े जा सकते।","continuePlaceholder":"अनुवर्ती प्रश्न के साथ इस चर्चा को आगे बढ़ाएं…","continueStreamStarted":"निरंतरता शुरू हुई — लाइव स्ट्रीमिंग","count":"{{count}} समूह","createSuccess":"समूह सफलतापूर्वक बनाया गया","discussing":"एजेंट चर्चा कर रहे हैं…","enterToSend":"भेजने के लिए Enter","expandInput":"इनपुट विस्तृत करें","followupHint":"किसी एक सदस्य से सीधा फ़ॉलो-अप पूछें। एजेंट चर्चा से पूरा संदर्भ रखता है; आदान-प्रदान ट्रांसक्रिप्ट में जोड़ा जाता है।","followupPlaceholder":"इस सदस्य से एक फ़ॉलो-अप प्रश्न पूछें…","inputDisabledApproval":"स्वीकृति की प्रतीक्षा है…","inputDisabledClosed":"यह चर्चा बंद है","inputDisabledCompleted":"चर्चा पूर्ण","inputDisabledEnded":"यह चर्चा समाप्त हो चुकी है","inputDisabledInProgress":"चर्चा प्रगति पर है…","membersCount":"{{count}} सदस्य","moderator":"मॉडरेटर (संश्लेषण के लिए)","namePlaceholder":"उदा. Advisory Board","newDiscussion":"नई चर्चा","newShort":"नया","noModerator":"कोई मॉडरेटर नहीं","noResponse":"कोई प्रतिक्रिया नहीं","contentTruncated":"[सामग्री काट दी गई]","protocolMaxRetries":"अधिकतम पुनः प्रयास","protocolMaxRounds":"अधिकतम राउंड","protocolOnFailure":"विफलता पर","protocolSettings":"प्रोटोकॉल","protocolTimeout":"टाइमआउट","protocolUnavailable":"अनुपलब्ध","question":"प्रश्न","readyToDiscuss":"चर्चा के लिए तैयार","responding":"प्रतिक्रिया दे रहा है…","reviewMemberRoster":"सदस्य सूची","reviewMembers":"सदस्य","reviewModerator":"मॉडरेटर","reviewNoModerator":"कोई नहीं (स्वतः-संश्लेषण अक्षम)","reviewRounds":"अधिकतम राउंड","reviewTimeout":"एजेंट टाइमआउट","reviewUnassigned":"असाइन नहीं किया गया","reviewUnassignedHint":"बनाने से पहले एजेंट सौंपने के लिए वापस जाएं।","selectAgent":"एजेंट चुनें…","selectOrStart":"इतिहास से एक पिछली चर्चा चुनें, या नई शुरू करने के लिए नीचे एक प्रश्न टाइप करें।","shiftEnter":"नई पंक्ति","skipped":"छोड़ा गया","sortByMembers":"सदस्यों से क्रमबद्ध करें","sortByStyle":"शैली से क्रमबद्ध करें","speakingCount":"{{count}} बोल रहे हैं","startBlank":"शुरू से आरंभ करें","startDiscussion":"चर्चा करें","stateCompleted":"पूर्ण","stateCreated":"बनाया गया","stateFailed":"विफल","stateSynthesizing":"संश्लेषण जारी…","stepBasics":"मूल बातें","stepMembers":"सदस्य","stepReview":"समीक्षा","stepTemplate":"टेम्पलेट","submitShortcut":"सबमिट करने के लिए Ctrl+Enter","synthesis":"संश्लेषण","synthesizing":"मॉडरेटर संश्लेषण कर रहा है…","hitlSelectPhase":"अनुमोदन के लिए कम से कम एक चरण चुनें।","empty":"अभी तक कोई Group नहीं","emptyDescription":"Group कई Agent को संरचित चर्चाओं में सहयोग करने देते हैं।","createGroup":"Group बनाएं","unnamed":"बिना नाम का Group","count_one":"{{count}} समूह","count_other":"{{count}} समूह","confirmDelete":"इस Group को हटाएं?","confirmDeleteDesc":"Group कॉन्फ़िगरेशन स्थायी रूप से हटा दी जाएगी।","duplicateSuccess":"Group डुप्लिकेट किया गया","noDescription":"कोई विवरण नहीं","members":"सदस्य","discussionStyle":"चर्चा शैली","maxRounds":"अधिकतम राउंड","styleTaskForce":"Task Force","stateAwaitingApproval":"अनुमोदन की प्रतीक्षा","stateCancelled":"रद्द","phasePlan":"योजना","phaseExecute":"कार्यान्वयन","phaseVerify":"सत्यापन","preConfiguredTasks":"पूर्व-कॉन्फ़िगर किए गए कार्य","dynamicAgents":"डायनामिक एजेंट","dynamicCreation":"निर्माण","dynamicRecruitment":"भर्ती","dynamicDelegation":"प्रतिनिधिमंडल","lifecyclePolicy":"जीवन चक्र","allowedProviders":"प्रदाता","liveIndicator":"● LIVE","htmlToggle":"HTML","memberTypeGroup":"समूह","moderatorBadge":"⭐ मॉडरेटर","styleColumn":"शैली","membersColumn":"सदस्य","memberOverflow":"+{{count}} और","defaultLabel":"समूह","liveDiscussion":"लाइव","state":{"CREATED":"बनाया गया","IN_PROGRESS":"प्रगति में","SYNTHESIZING":"संश्लेषण जारी","COMPLETED":"पूर्ण","FAILED":"विफल","ERROR":"त्रुटि","AWAITING_APPROVAL":"अनुमोदन की प्रतीक्षा","CANCELLED":"रद्द","AWAITING_HUMAN_INPUT":"सदस्य की प्रतीक्षा","CLOSED":"बंद"},"preConfiguredTasksCount":"पूर्व-कॉन्फ़िगर किए गए कार्य ({{count}})","entryType":{"QUESTION":"प्रश्न","OPINION":"राय","CRITIQUE":"आलोचना","REVISION":"संशोधन","CHALLENGE":"आपत्ति","DEFENSE":"बचाव","ARGUMENT":"तर्क","REBUTTAL":"खंडन","SYNTHESIS":"संश्लेषण","ERROR":"त्रुटि","SKIPPED":"छोड़ा गया","PLAN":"योजना","TASK_RESULT":"कार्य परिणाम","VERIFICATION":"सत्यापन","FOLLOW_UP":"अनुवर्ती","ABSTAINED":"परहेज़ किया","DISSENT":"असहमति","CONVERGENCE":"अभिसरण","FACILITATION":"सुविधा-प्रबंधन","VOTE":"मत","PROPOSAL":"प्रस्ताव","BARGAIN":"प्रति-प्रस्ताव","HUMAN_INPUT":"मानवीय इनपुट","RETRO":"पुनरावलोकन","BID":"बोली"},"flow":{"Opinion":"राय","Discussion":"चर्चा","Synthesis":"संश्लेषण","Critique":"आलोचना","Revision":"संशोधन","Challenge":"आपत्ति","Defense":"बचाव","Independent":"स्वतंत्र","AnonymousSharing":"गुमनाम साझाकरण","Revised":"संशोधित","ProOpening":"पक्ष में आरंभ","ConOpening":"विपक्ष में आरंभ","Rebuttals":"खंडन","Judgment":"निर्णय","Plan":"योजना","Execute":"कार्यान्वयन","Verify":"सत्यापन","Synthesize":"सारांश"},"lifecycle":{"EPHEMERAL":"अस्थायी","KEEP_DEPLOYED":"तैनात रखें","UNDEPLOY_ONLY":"केवल हटाएं","AGENT_DECIDES":"एजेंट तय करता है"},"dynamicMax":"✓ (max {{count}})","dynamicMaxPerTask":"✓ (अधिकतम {{count}}/कार्य)","protocolMaxTurns":"अधिकतम मोड़","speakingOrderTooltip":"बोलने का क्रम: #{{order}}","allowedModels":"मॉडल","inheritParentModel":"मॉडल विरासत में लें","enabled":"सक्षम","disabled":"अक्षम","turnOrderSequential":"क्रमिक","turnOrderParallel":"समानांतर","requiresApproval":"अनुमोदन आवश्यक","item":"आइटम","items":"आइटम","contextScope":{"NONE":"स्वतंत्र","FULL":"पूर्ण संदर्भ","LAST_PHASE":"अंतिम चरण","ANONYMOUS":"अनाम","OWN_FEEDBACK":"स्वयं की प्रतिक्रिया","TASK_ONLY":"केवल कार्य","TASK_WITH_DEPS":"कार्य + निर्भरताएँ"},"configuration":"कॉन्फ़िगरेशन","deleteGroupOnly":"केवल समूह हटाएँ","deleteGroupOnlySuccess":"समूह हटा दिया गया (एजेंट रखे गए)","deleteGroupOnlyWarning":"इससे समूह हट जाएगा। सभी सदस्य एजेंट रखे जाएँगे।","deleteGroupAndAgents":"समूह + सभी एजेंट हटाएँ","deleteWithMembersSuccess":"समूह और सभी सदस्य एजेंट हटा दिए गए (सॉफ्ट-डिलीट)","deleteWithMembersWarning":"इससे समूह और सभी {{count}} सदस्य एजेंट सॉफ्ट-डिलीट हो जाएँगे। उन्हें पुनर्स्थापित किया जा सकता है।","hideDiscussions":"चर्चा पैनल छिपाएँ","showDiscussions":"चर्चा पैनल दिखाएँ","hideConfig":"कॉन्फ़िगरेशन पैनल छिपाएँ","showConfig":"कॉन्फ़िगरेशन पैनल दिखाएँ","hitlSection":"मानवीय स्वीकृति","hitlApprovalPoints":"स्वीकृति पर","hitlOnTaskRejection":"अस्वीकृति पर","hitlEdit":"संपादित करें","hitlSaved":"अनुमोदन सेटिंग्स सहेजी गईं","hitlEnable":"मानव अनुमोदन आवश्यक","hitlApprovalPhases":"अनुमोदन आवश्यक चरण","hitlNotConfigured":"कोई अनुमोदन गेट कॉन्फ़िगर नहीं — मानव अनुमोदन आवश्यक करने के लिए संपादित करें पर क्लिक करें।","driftTitle":"विराम के दौरान समूह कॉन्फ़िगरेशन बदल गया","driftRecovery":"समूह के चरण बदलने के कारण पुनरारंभ निरस्त कर दिया गया। चर्चा अभी भी अनुमोदन की प्रतीक्षा में है — कॉन्फ़िगरेशन ठीक करें (कॉन्फ़िगरेशन पैनल में, संपादित करें) और पुनः अनुमोदित करें, या इसे रद्द करें।","discussionStarted":"चर्चा शुरू हुई — लाइव स्ट्रीमिंग","continueStarted":"नया राउंड शुरू हुआ","followupSent":"फ़ॉलो-अप भेजा गया","discussionClosed":"चर्चा बंद की गई","backToGroups":"Groups पर वापस","noDiscussions":"अभी तक कोई चर्चा नहीं","askBelow":"शुरू करने के लिए नीचे एक प्रश्न पूछें","exitFullscreen":"फ़ुलस्क्रीन से बाहर निकलें","enterFullscreen":"फ़ुलस्क्रीन","discussions":"चर्चाएँ","discussionComplete":"चर्चा पूर्ण","continueDiscussion":"जारी रखें (नया राउंड)","followupMember":"किसी सदस्य के साथ फ़ॉलो-अप करें","closeDiscussion":"चर्चा बंद करें","currentRound":"वर्तमान राउंड","startNextRound":"अगला राउंड शुरू करें","selectMember":"एक सदस्य चुनें","sendFollowup":"फ़ॉलो-अप भेजें","closeConfirmTitle":"इस चर्चा को बंद करें?","closeConfirmButton":"चर्चा बंद करें","closeConfirmDismiss":"वापस जाएं","protocolMaxCost":"लागत सीमा","protocolOnCostExceeded":"पहुँचने पर","costAbort":"रोकें","costSynthesize":"अभी संश्लेषण करें","deliberationSection":"विचार-विमर्श","recordDissents":"अल्पमत रिपोर्ट","agentFiledTasks":"एजेंट-दर्ज कार्य","agentFiledCaps":"सीमाएँ","agentFiledCapsValue":"{{perDiscussion}} / चर्चा · {{perTurn}} / बारी","moderatorlessWarning":"ऐसे मॉडरेटर तक सीमित जो इस समूह में नहीं है: {{phases}}। बोलने के क्रम में पहला सदस्य स्थान लेगा।","roleCoverageWarning":"किसी सदस्य के पास \\"{{role}}\\" भूमिका नहीं है — इसके बजाय {{phases}} में सभी सदस्य बोलेंगे।","delegationDepth":"अधिकतम गहराई","delegationTimeout":"प्रतिनिधि समय-सीमा","secondsShort":"{{seconds}} सेकंड","delegationTargets":"अनुमति-सूची","phaseBehaviour":"चरण व्यवहार","phaseBehaviourNone":"न परहेज़ न अभिसरण कॉन्फ़िगर है — सदस्यों को छोड़ने देने या सहमति पर दोहराव वाला चरण रोकने के लिए संपादित करें।","abstentionShort":"परहेज़","convergenceShort":"अभिसरण ≥{{threshold}}","phasesSaved":"चरण सेटिंग्स सहेजी गईं","phasesNoneToEdit":"यह समूह कोई चरण परिभाषित नहीं करता। प्रति-चरण व्यवहार बदलने से पहले चर्चा शैली चुनें या कॉन्फ़िग में चरण जोड़ें।","phaseRepeats":"×{{repeats}}","allowAbstention":"परहेज़ की अनुमति दें","allowAbstentionHelp":"सदस्य स्वयं को दोहराने के बजाय इस दौर में कुछ नया न जोड़ने का विकल्प चुन सकता है।","convergenceEnable":"अभिसरण पर जल्दी रोकें","convergenceHelp":"एक निर्णायक हर दोहराव की तुलना पिछले से करता है और सदस्यों के रुख स्थिर होते ही चरण समाप्त कर देता है। हर दोहराव पर एक कॉल लगती है।","convergenceNeedsRepeats":"केवल दोहराए जाने वाले चरण पर उपलब्ध — एक ही बार चलने पर तुलना के लिए कुछ नहीं होता।","convergenceMinRepeats":"न्यूनतम दोहराव","convergenceThreshold":"सीमा-मान","convergenceJudge":"निर्णायक","judgeModerator":"मॉडरेटर","judgeService":"सेवा","judgeServiceNote":"स्वीकार्य है पर अभी जुड़ा नहीं — इंजन मॉडरेटर पर लौटता है और चेतावनी दर्ज करता है।","convergenceReached":"अभिसरित","convergenceChecked":"अभिसरण जाँच","convergenceScore":"सहमति {{score}}","decisionWinner":"विजेता: {{winner}}","decisionTie":"बराबरी","decisionDecidedAt":"{{phase}} में तय हुआ","decisionUnparsed":"निर्णायक का उत्तर संरचित फ़ैसले के रूप में नहीं पढ़ा जा सका, इसलिए वह नीचे ज्यों-का-त्यों रखा है और निष्कर्ष गद्य में ही रहेगा।","minorityReport":"अल्पमत रिपोर्ट ({{total}})","attachFiles":"फ़ाइलें संलग्न करें","attachmentLimit":"प्रति चर्चा अधिकतम {{max}} संलग्नक","attachmentTooLarge":"{{name}} संलग्न करने के लिए बहुत बड़ी है","attachmentReadFailed":"{{name}} पढ़ा नहीं जा सका","removeAttachment":"{{name}} हटाएँ","decisionType":{"VERDICT":"फ़ैसला","VOTE":"मतदान","AGREEMENT":"सहमति","AWARD":"आवंटन","NONE":"कोई संरचित निर्णय नहीं"},"abstainedBody":"इस दौर में कुछ नया नहीं जोड़ा।","convergenceSkipped_one":"· आगे के {{count}} दौर छोड़े गए","convergenceSkipped_other":"· आगे के {{count}} दौर छोड़े गए","attachmentTotalTooLarge":"संलग्नक कुल आकार सीमा से अधिक हैं","convergenceInert":"कॉन्फ़िगर है, पर यह चरण एक ही बार चलता है — निर्णायक कभी नहीं चल पाएगा। इसे हटाएँ, या चरण को एक से अधिक दोहराव दें।","questionTooLong":"प्रश्न अधिकतम {{max}} अक्षरों का हो सकता है","charactersOverLimit":"{{current}} / {{max}} अक्षर","advancedSection":"उन्नत सहयोग","artifactConfigLabel":"साझा आर्टिफ़ैक्ट","artifactConfigValue":"अधिकतम {{count}}/चर्चा","artifactCreatedBadge":"{{name}} बनाया गया (v{{version}})","artifactDraft":"प्रारूप","artifactFinal":"अंतिम","artifactLastEdited":"अंतिम बार {{agent}} द्वारा संपादित","artifactUpdatedBadge":"{{name}} अपडेट किया गया (v{{version}})","artifactsTitle":"साझा आर्टिफ़ैक्ट ({{count}})","concessionLedgerTitle":"रियायत लेजर","contextWindowLabel":"ट्रांसक्रिप्ट विंडो","contextWindowValue":"अंतिम {{count}} प्रविष्टियाँ{{summarized}}","facilitatorLabel":"फैसिलिटेटर","facilitatorMoves":"अनुमत क्रियाएँ","humanMemberConfigLabel":"मानव बारी टाइमआउट","humanTurnRequestedAt":"अनुरोधित","humanTurnResponsePlaceholder":"आपकी प्रतिक्रिया","humanTurnSubmit":"सबमिट करें","humanTurnSubmitted":"आपकी प्रतिक्रिया दर्ज कर ली गई","humanTurnSubmitting":"सबमिट हो रहा है…","humanTurnTimeout":"टाइमआउट","humanTurnTitle":"यह आपकी बारी है, {{name}}","inputDisabledHumanTurn":"किसी सदस्य की बारी की प्रतीक्षा…","memberTypeHuman":"मानव","negotiationAcceptedBy":"स्वीकृतकर्ता: {{names}}","negotiationGaveUp":"छोड़ दिया","negotiationInReturnFor":"इसके बदले में","negotiationOpen":"खुला","negotiationRound":"राउंड {{round}}","negotiationSuperseded":"प्रतिस्थापित","negotiationTableTitle":"वार्ता तालिका","notSet":"सेट नहीं","retroConfigLabel":"रेट्रो सबक","retroConfigValue":"{{perRun}}/रन, अधिकतम {{stored}} संग्रहीत","stateAwaitingHumanInput":"सदस्य की प्रतीक्षा","summarized":"सारांशित","transcriptWindowed":"बाद की बारियों के संदर्भ को सीमित रखने के लिए पहली {{count}} ट्रांसक्रिप्ट प्रविष्टियों को एक रोलिंग सारांश में समेट दिया गया है। सारांश देखने के लिए होवर करें।","voteMethod":"तरीका","voteMethodApproval":"अनुमोदन","voteMethodMajority":"बहुमत","voteOptionsExplicit":"स्पष्ट सूची","voteOptionsLastSynthesis":"अंतिम संश्लेषण से निकालें","voteOptionsList":"विकल्प (प्रति पंक्ति एक)","voteOptionsSource":"मतपत्र विकल्प","voteQuorum":"कोरम","voteTieHuman":"मानव निर्णय लेता है (अभी उपलब्ध नहीं)","voteTieModerator":"मॉडरेटर निर्णय लेता है","voteTieNoDecision":"कोई निर्णय नहीं","voteTiePolicy":"बराबरी होने पर","voteWeightByConfidence":"विश्वास स्तर के अनुसार भार दें","waitIndefinitely":"अनिश्चित काल तक प्रतीक्षा करें","advancedSaved":"सहयोग सेटिंग्स सहेजी गईं","advancedNotConfigured":"कोई ट्रांसक्रिप्ट विंडो, रेट्रो मेमोरी, साझा आर्टिफ़ैक्ट या फ़ैसिलिटेटर कॉन्फ़िगर नहीं है — चालू करने के लिए संपादित करें पर क्लिक करें।","contextWindowHint":"लंबी चर्चाओं में पुरानी प्रविष्टियों को चलती-फिरती सारांश में समेटकर हर बारी का संदर्भ सीमित रखता है।","contextWindowEntries":"पूर्ण रूप में रखी गई हालिया प्रविष्टियाँ","contextWindowSummarize":"विंडो से बाहर जाने वाली सामग्री का सारांश बनाएँ","contextWindowTruncateNote":"पुरानी प्रविष्टियाँ इसके बजाय “N पूर्व प्रविष्टियाँ छोड़ी गईं” चिह्न से बदल दी जाती हैं।","retroConfigHint":"रेट्रो चरण को टीम की स्मृति में सीख लिखने देता है, जो बाद की चर्चाओं में साथ चलती है।","retroPerRun":"प्रति रन","retroStored":"अधिकतम संग्रहीत","artifactConfigHint":"सदस्यों को साझा दस्तावेज़ लिखने देता है जो लिखे जाने वाली बारी के बाद भी बने रहते हैं।","artifactsPerDiscussion":"प्रति चर्चा अधिकतम","facilitatorHint":"एक एजेंट जो हर चेकपॉइंट पर हस्तक्षेप करता है और आपकी अनुमति दी गई सूची से केवल एक चाल चुनता है — कभी भी स्वतंत्र ऑर्केस्ट्रेटर नहीं।","facilitatorAgent":"फ़ैसिलिटेटर एजेंट","facilitatorPickAgent":"एक एजेंट चुनें…","facilitatorAgentRequired":"वह एजेंट चुनें जो संचालन करेगा।","facilitatorCheckAfter":"जाँच का समय","facilitatorCheckpoint":{"EACH_PHASE":"प्रत्येक चरण के बाद","EACH_REPEAT":"किसी चरण के भीतर हर दौर के बाद"},"facilitatorMove":{"CONTINUE":"जारी रखें","END_PHASE":"चरण जल्दी समाप्त करें","EXTEND_PHASE":"चरण बढ़ाएँ","CALL_VOTE":"मतदान बुलाएँ","RECRUIT":"सदस्य जोड़ें","ESCALATE_HUMAN":"किसी व्यक्ति तक बढ़ाएँ"},"facilitatorNoMove":"कम से कम एक चाल की अनुमति दें, या फ़ैसिलिटेटर बंद कर दें।","facilitatorMidPhaseNeedsRepeat":"चरण को समाप्त या विस्तारित करना चरण के बीच में होता है, इसलिए इसे प्रति-दौर चेकपॉइंट चाहिए।","facilitatorEscalateTo":"किसे बढ़ाएँ (प्रिंसिपल आईडी)","facilitatorEscalateRequired":"एस्केलेशन चर्चा को किसी के लिए रोकता है — बताएँ कि किसके लिए।","facilitatorMaxMoves":"प्रति चर्चा अधिकतम चालें","assignmentModeLabel":"कार्य आवंटन","assignmentModeRole":"भूमिका द्वारा (योजनाकार आवंटित करता है)","assignmentModeBid":"बोली द्वारा (सदस्य बोली लगाते हैं, सर्वोच्च आत्मविश्वास जीतता है)","assignmentModeBidShort":"बोली द्वारा","assignmentModeRoleHint":"योजनाकार या कॉन्फ़िगरेशन हर कार्य आवंटित करता है, या बारी-बारी से।","assignmentModeBidHint":"जब नीलामी अपनी लागत वसूल न कर सके तो भूमिका-आधारित आवंटन पर लौट आता है — दो से कम बोलीदाता या खुले कार्य, या अपर्याप्त टर्न बजट।","contextWindowSummarizer":"सारांशकर्ता","contextWindowNoSummarizer":"कोई नहीं","contextWindowModel":"सारांश मॉडल","contextWindowModelPlaceholder":"मॉडल","contextWindowSummarizerMissing":"सारांश मॉडल के बिना, अतिरिक्त सामग्री चुपचाप सादे कटौती चिह्न पर लौट आती है।","facilitatorMaxMovesCeiling":"अधिकतम {{max}} — फ़ैसिलिटेटर एक सीमित हस्तक्षेप है, ऑर्केस्ट्रेटर नहीं।","reviewUnassignedWarning_one":"{{count}} सदस्य असाइन नहीं किए गए","reviewUnassignedWarning_other":"{{count}} सदस्य असाइन नहीं किए गए","retroRecordedBadge_one":"{{phase}}: {{count}} सबक टीम मेमोरी में सहेजे गए","retroRecordedBadge_other":"{{phase}}: {{count}} सबक टीम मेमोरी में सहेजे गए","artifactRevisions_one":"{{count}} पूर्व संशोधन","artifactRevisions_other":"{{count}} पूर्व संशोधन","styles":{"ROUND_TABLE":{"label":"गोलमेज़","flow":"हर सदस्य अपनी राय रखता है, फिर कई दौर में एक-दूसरे की बात आगे बढ़ाता है"},"PEER_REVIEW":{"label":"सहकर्मी समीक्षा","flow":"सभी पहले अलग-अलग जवाब देते हैं, एक-दूसरे की समीक्षा करते हैं, फिर सुधार करते हैं"},"DEVIL_ADVOCATE":{"label":"विरोधी पक्ष","flow":"एक सदस्य समूह के रुख़ पर हमला करता है, बाक़ी उसका बचाव करते हैं"},"DELPHI":{"label":"गुमनाम दौर","flow":"सभी गुमनाम रूप से जवाब देते हैं और हर दौर में सुधार करते हैं, ताकि कोई पहले बोलने वाले से प्रभावित न हो"},"DEBATE":{"label":"पक्ष/विपक्ष बहस","flow":"एक पक्ष समर्थन में और दूसरा विरोध में तर्क देता है, फिर प्रत्युत्तर और निर्णय"},"TASK_FORCE":{"label":"टास्क फ़ोर्स","flow":"मॉडरेटर काम की योजना बनाता है, सदस्य समानांतर में काम करते हैं, नतीजों की जाँच होती है"},"NEGOTIATION":{"label":"बातचीत","flow":"पक्ष तब तक प्रस्ताव बदलते हैं जब तक सहमति न बने; न बनने पर ही मध्यस्थ फ़ैसला करता है"},"CUSTOM":{"label":"अपना प्रवाह","flow":"वे चरण जो आप ख़ुद तय करते हैं"}},"unsupportedStyle":"यह सर्वर {{style}} का समर्थन नहीं करता। जारी रखने के लिए दूसरा ढाँचा चुनें।"}'),J={title:"कार्य बोर्ड",pending:"लंबित",inProgress:"प्रगति में",completed:"पूर्ण",verified:"सत्यापित",failed:"विफल",assignedTo:"{{name}} को सौंपा गया",dependsOn:"निर्भर: {{tasks}}",emptyTitle:"कार्य योजना की प्रतीक्षा",emptyDescription:"चर्चा शुरू होने पर मॉडरेटर कार्य योजना बनाएगा।",emptyState:"मॉडरेटर द्वारा बनाए जाने पर कार्य योजना यहाँ दिखाई देगी",unassigned:"असाइन नहीं किया गया",progress:"{{done}} / {{total}} कार्य पूर्ण",verificationPassed:"उत्तीर्ण",verificationFailed:"विफल",showMore:"और दिखाएं",showLess:"कम दिखाएं",awaitingApproval:"अनुमोदन की प्रतीक्षा",filedBy:"{{agent}} द्वारा दर्ज",wonByBid:"बोली द्वारा जीता — {{confidence}}% विश्वास, {{complexity}}"},Q={title:"उपयोगकर्ता स्मृति",subtitle:"एजेंट द्वारा संग्रहित स्थायी उपयोगकर्ता स्मृतियां ब्राउज़ करें और प्रबंधित करें",userIdPlaceholder:"उपयोगकर्ता ID दर्ज करें…",searchPlaceholder:"स्मृतियां खोजें…",enterUserId:"उनकी स्मृतियां ब्राउज़ करने के लिए उपयोगकर्ता ID दर्ज करें",totalEntries:"कुल प्रविष्टियां",preferences:"प्राथमिकताएं",facts:"तथ्य",conflicts:"विवाद",cat_all:"सभी",cat_preference:"प्राथमिकताएं",cat_fact:"तथ्य",cat_context:"संदर्भ",deleteAll:"सभी हटाएं",deleteAllTitle:"सभी स्मृतियां हटाएं",deleteAllDesc:"इस उपयोगकर्ता की सभी स्मृतियां स्थायी रूप से हटा दी जाएंगी। यह क्रिया पूर्ववत नहीं की जा सकती।",deleteAllConfirm:"सभी हटाएं",entryDeleted:"स्मृति प्रविष्टि हटाई गई",allDeleted:"उपयोगकर्ता की सभी स्मृतियां हटाई गईं",noResults:"कोई स्मृति प्रविष्टियां नहीं मिलीं",value:"मान",sourceAgent:"स्रोत एजेंट",accessCount:"पहुंच गणना",created:"बनाया गया",updated:"अपडेट हुआ",sourceConversation:"स्रोत बातचीत",conflicted:"विवादित"},Y={title:"उपयोगकर्ता गुण",subtitle:"प्रति उपयोगकर्ता संग्रहित longTerm गुण ब्राउज़ करें और प्रबंधित करें",userIdPlaceholder:"उपयोगकर्ता ID दर्ज करें…",searchPlaceholder:"गुण फ़िल्टर करें…",enterUserId:"उनके गुण देखने के लिए उपयोगकर्ता ID दर्ज करें",key:"कुंजी",type:"प्रकार",value:"मान",deleteAll:"सभी हटाएं",deleteAllTitle:"सभी गुण हटाएं",deleteAllDesc:"इस उपयोगकर्ता के सभी गुण स्थायी रूप से हटा दिए जाएंगे।",deleted:"गुण हटाए गए",noResults:"कोई गुण नहीं मिले",showingCount:"{{count}} गुण"},$={agentId:"एजेंट ID",environment:"परिवेश",title:"एजेंट ट्रिगर",subtitle:"स्वचालित रूटिंग के लिए इंटेंट को एजेंट डिप्लॉयमेंट से मैप करें",create:"नया ट्रिगर",createTitle:"ट्रिगर बनाएं",editTitle:"ट्रिगर संपादित करें",intent:"इंटेंट",deployments:"एजेंट डिप्लॉयमेंट",addDeployment:"एजेंट जोड़ें",agents:"एजेंट",empty:"अभी तक कोई ट्रिगर कॉन्फ़िगर नहीं किए गए",created:"ट्रिगर बनाया गया",updated:"ट्रिगर अपडेट किया गया",deleted:"ट्रिगर हटाया गया",deleteTitle:"ट्रिगर हटाएं",deleteDesc:"इंटेंट 「{{intent}}」का ट्रिगर स्थायी रूप से हटाना है?",searchPlaceholder:"इंटेंट या एजेंट ID से फ़िल्टर करें…"},Z={agentCount:"एजेंट",confidence:"विश्वास",partialError:"कुछ कौशल क्वेरी विफल हुईं",registryOverview:"रजिस्ट्री अवलोकन",skillName:"कौशल",skills:"कौशल",title:"क्षमता खोज",subtitle:"घोषित कौशल और क्षमताओं के आधार पर एजेंट खोजें",searchPlaceholder:"कौशल खोजें…",strategyHighest:"सर्वोच्च विश्वास",strategyAll:"सभी मिलान",registeredSkills:"पंजीकृत कौशल",noSkills:"कोई कौशल नहीं मिले",matchingAgents:"मेल खाने वाले एजेंट",noMatches:"इस कौशल के लिए कोई एजेंट नहीं मिला"},X={title:"एजेंट निर्यात करें",loading:"संसाधन ट्री लोड हो रहा है...",selectResources:"निर्यात करने के लिए संसाधन चुनें",required:"आवश्यक",snippets:"स्निपेट",allSelected:"सभी संसाधन चयनित हैं",countSelected:"{{total}} में से {{count}} संसाधन चयनित",exportSelected:"चयनित निर्यात करें"},ee={title:"एजेंट आयात करें",dropZone:"यहां .zip फ़ाइल खींचें या ब्राउज़ करने के लिए क्लिक करें",dropZoneHint:"निर्यातित एजेंट संग्रह (.zip)",strategyLabel:"आयात रणनीति",createNew:"नए एजेंट के रूप में बनाएँ",createNewDesc:"नई आईडी के साथ नई प्रतिलिपि बनाता है। पहले आयात के लिए सर्वोत्तम।",mergeSync:"मौजूदा के साथ मर्ज / सिंक करें",mergeSyncDesc:"यदि पहले आयात किया गया है तो मौजूदा संसाधनों को अपडेट करता है। नहीं मिलने पर नया बनाता है।",upgradeExisting:"मौजूदा एजेंट को अपग्रेड करें",upgradeDesc:"लक्ष्य एजेंट के खिलाफ संसाधनों का संरचनात्मक रूप से मिलान करें।",syncRemote:"रिमोट इंस्टेंस से सिंक करें",syncDesc:"किसी अन्य EDDI इंस्टेंस से कनेक्ट करें और किसी विशिष्ट एजेंट को लाइव सिंक करें।",importNow:"अभी आयात करें",previewChanges:"परिवर्तन पूर्वावलोकन",selectTargetAgent:"लक्ष्य एजेंट का चयन करें",upgradeTargetHint:"आयातित संसाधनों को इस एजेंट के साथ ढांचागत रूप से मिलाया जाएगा।",chooseAgent:"— एजेंट चुनें —",sourceAgent:"स्रोत एजेंट (रिमोट)",targetAgent:"लक्ष्य एजेंट (स्थानीय)",createNewTarget:"नया एजेंट बनाएँ",resource:"संसाधन",type:"प्रकार",match:"मिलान",action:"कार्रवाई",new:"नया",updated:"अद्यतन",unchanged:"अपरिवर्तित",selected:"चयनित",mergeNow:"चयनित आयात करें",syncNow:"अभी सिंक करें",upgradeNow:"अभी अपग्रेड करें",importing:"एजेंट आयात हो रहा है...",contentIdentical:"सामग्री समान है",targetContent:"लक्ष्य",sourceContent:"स्रोत"},te={title:"सिंक",subtitle:"सिंक करें।",connection:"शुरुआती इंस्टेंस",sourceUrl:"शुरुआती ईडीआईआई URL",authToken:"टोकन प्रमाणीकरण",authHint:"वैकल्पिक (X-Source-Authorization)।",connect:"संपर्क जोड़ें",connected:"संपर्क हो गया",agentsFound:"मिले",connectionFailed:"कनेक्शन विफल",agentMapping:"मॅपिंग एजेंट",previewAll:"सभी पूर्वावलोकन",syncSelected:"चुना हुआ सिंक",remote:"रिमोट",createNew:"नया बनाएँ",changes:"बदलाव",agentsSelected:"चयनित एजेंट",totalResources:"संसाधन",syncSuccess:"सफलता",syncError:"सिंक त्रुटि",empty:"एक शुरुआत करें",autoMatched:"स्वतः मिलान",previewFirst:"सिंक से पहले बदलावों का पूर्वावलोकन करें"},oe={actionCreate:"नया",actionUpdate:"अपडेट",actionSkip:"अद्यतित",actionConflict:"विवाद"},ne={title:"उपयोगकर्ता वार्तालाप",subtitle:"इंटेंट → उपयोगकर्ता → वार्तालाप बाइंडिंग प्रबंधित करें",lookup:"खोज",intent:"इरादा",userId:"उपयोगकर्ता ID",agentId:"एजेंट ID",environment:"वातावरण",conversationId:"वार्तालाप ID",binding:"सक्रिय बाइंडिंग",enterBoth:"इंटेंट और उपयोगकर्ता ID दर्ज करें",notFound:"कोई बाइंडिंग नहीं मिली",create:"बाइंडिंग बनाएं",createTitle:"बाइंडिंग बनाएं",created:"बाइंडिंग बनाई गई",deleteTitle:"बाइंडिंग हटाएं",deleteDesc:'इंटेंट "{{intent}}" और उपयोगकर्ता "{{userId}}" के लिए बाइंडिंग हटाएं?',deleted:"बाइंडिंग हटा दी गई"},ae={placeholder:"पेज, एजेंट, कार्यवाही खोजें…",noResults:"कोई परिणाम नहीं मिला।",recent:"हाल के",navigate:"नेविगेट करें",agents:"एजेंट",actions:"त्वरित कार्यवाही",createAgent:"नया एजेंट बनाएं",openChat:"चैट खोलें",kbdNavigate:"नेविगेट",kbdSelect:"चुनें",kbdClose:"बंद करें"},re={groupMemberHint:"यह समूह चर्चा में एक नेस्टेड उप-समूह के रूप में भाग लेगा।",noGroupsHint:"पहले एक समूह बनाएं, फिर इसे नेस्टेड उप-समूह सदस्य के रूप में जोड़ें।",noGroupsYet:"कोई समूह उपलब्ध नहीं",selectGroup:"मौजूदा समूह चुनें…",title:"Group Setup Wizard",subtitle:"Assemble a team of AI advisors to discuss your questions",backToGroups:"Back to Groups",templateTitle:"Start from a template",templateDesc:"Choose a preset group configuration or start from scratch.",startBlank:"Start from Scratch",blankDesc:"Configure everything manually",configTitle:"Group Configuration",configDesc:"Name your group and choose how the agents will discuss",namePlaceholder:"e.g. Advisory Board",descPlaceholder:"What is this group for?",membersTitle:"Assemble Your Team",membersDesc:"For each seat, choose an existing agent or create a new one on the fly.",addMember:"Add Member",refreshAgents:"Refresh agent list",existingAgents:"existing agents",displayName:"Agent Name",displayNamePlaceholder:"Give this agent a name…",rolePlaceholder:"Role (e.g. Marketing, Engineering)",useExisting:"Use Existing",createNew:"Create New",selectAgent:"Select agent…",systemPrompt:"System Prompt",provider:"LLM Provider",model:"Model",apiKey:"API Key",apiKeyPlaceholder:"sk-…",createThisAgent:"Create Agent",creatingAgent:"Creating agent…",agentReady:"Agent created & deployed",agentCreated:'Agent "{{name}}" created',agentCreateFailed:"Failed to create agent: {{error}}",moderator:"Moderator",moderatorHint:"Synthesizes the discussion",addModerator:"Add Moderator",removeModerator:"Remove moderator",createModerator:"Create Moderator Agent",moderatorReady:"Moderator agent ready",moderatorCreated:"Moderator agent created",creatingModerator:"Creating moderator…",creatingSlot:"Creating {{name}}…",creatingGroup:"Creating group…",needMembers:"Add at least 2 members to proceed",reviewTitle:"Review & Create",reviewDesc:"Review your group configuration before creating.",reviewMembers:"Members",autoCreateNotice:"{{count}} agents will be auto-created when you click Create Group",autoCreateHint:"Each agent will be created and deployed automatically before the group is assembled.",unassignedWarning:"{{count}} members set to 'Use Existing' but no agent selected",unassignedHint:"These members will be skipped during discussions. Go back to assign agents.",flowPreview:"Discussion Flow",createGroup:"Create Group",created:"Group Created!",viewGroup:"Open Group",createAnother:"Create Another",success:"Group created successfully!",advancedSettings:"उन्नत प्रोटोकॉल सेटिंग्स",agentTimeout:"एजेंट टाइमआउट (सेकंड)",maxRetries:"अधिकतम पुनः प्रयास",onAgentFailure:"एजेंट विफलता पर",onMemberUnavailable:"सदस्य अनुपलब्ध होने पर",maxTurns:"अधिकतम मोड़ (0 = असीमित)",maxTurnsHelp:"कुल एजेंट मोड़ों के लिए सुरक्षा सीमा। डिफ़ॉल्ट बैकएंड सीमा 50 है।",policySkip:"छोड़ें",policyRetry:"पुनः प्रयास",policyAbort:"रद्द करें",policyFail:"विफल",hintDebate:"सदस्यों को PRO और CON भूमिकाएं सौंपें। Pro पहले तर्क देता है, फिर Con, उसके बाद प्रतिवाद और निर्णय।",hintDevilAdvocate:"कम से कम एक सदस्य को DEVIL_ADVOCATE भूमिका सौंपें। वे समूह की सहमति को चुनौती देंगे।",hintPeerReview:"प्रत्येक सदस्य व्यक्तिगत रूप से हर दूसरे सदस्य के काम की समीक्षा करता है, फिर प्राप्त प्रतिक्रिया के आधार पर संशोधन करता है।",hintDelphi:"सभी सदस्य स्वतंत्र और गुमनाम रूप से जवाब देते हैं। प्रत्येक दौर के बाद, वे गुमनाम परिणाम देखते हैं और समायोजित कर सकते हैं। अधिकतम मोड़ गुमनाम पुनरावृत्तियों की संख्या नियंत्रित करता है।",hintNegotiation:"सदस्य अपने हित बताते हैं, प्रस्ताव रखते हैं और फिर मोल-भाव करते हैं — «अधिकतम दौर» तय करता है कि कितने मोल-भाव के दौर चलेंगे। सहमति न बनने पर ही मॉडरेटर मध्यस्थता करता है।",roleCoverageWarning:'किसी सदस्य के पास "{{role}}" भूमिका नहीं है',roleCoverageHint:"सर्वर विकल्प के तौर पर {{phases}} में सभी सदस्यों को बोलने देता है, इसलिए दोनों पक्ष एक ही लोग रखते हैं। «सदस्य» पर वापस जाकर भूमिका फ़ील्ड भरें।",hintTaskForce:"मॉडरेटर एक कार्य योजना बनाता है, एजेंटों को समानांतर में काम सौंपता है, फिर परिणामों की जांच करता है और उन्हें संश्लेषित करता है।",hintCustom:"अपने स्वयं के चरण मैन्युअल रूप से परिभाषित करें। कस्टम चरण बनाने के बाद API के माध्यम से कॉन्फ़िगर किए जा सकते हैं।",hintRoundTable:"सभी सदस्य अपनी राय साझा करते हैं, फिर कई दौरों में एक-दूसरे के विचारों पर चर्चा करते हैं, इसके बाद मॉडरेटर संश्लेषण करता है।",protocolSummary:"प्रोटोकॉल",hitlTitle:"मानवीय स्वीकृति आवश्यक करें",hitlDesc:"चुने गए चरणों पर चर्चा रोकें और जारी रखने से पहले मानवीय निर्णय की प्रतीक्षा करें।",hitlApprovalPoints:"स्वीकृति के लिए रोकें",hitlNoPhases:"इस शैली में नियंत्रित करने योग्य कोई पूर्व-निर्धारित चरण नहीं हैं।",hitlNoApprovalPoints:"कम से कम एक चरण चुनें, अन्यथा चर्चा कभी नहीं रुकेगी।",hitlTimeoutPolicy:"यदि समय पर निर्णय न हो",hitlApprovalTimeout:"स्वीकृति समय-सीमा",hitlTimeoutInvalid:"एक धनात्मक ISO-8601 अवधि दर्ज करें, जैसे PT15M या PT1H30M।",hitlTimeoutHint:"ISO-8601 अवधि, जैसे PT30S, PT15M, PT2H।",hitlGranularity:"स्वीकृति सूक्ष्मता",hitlGranularityHint:"कार्य-स्तरीय स्वीकृति TASK_FORCE निष्पादन पर लागू होती है — प्रत्येक कार्य को अलग-अलग स्वीकृत या अस्वीकृत करें।",hitlOnTaskRejection:"जब कोई कार्य अस्वीकृत हो",hitlPinNote:"स्वीकृति बिंदु सक्षम करने से इस समूह के चर्चा चरण स्थिर हो जाते हैं ({{granularity}} सूक्ष्मता)।",hitlReviewBadge:"मानवीय स्वीकृति",humanOnTimeoutAbort:"चर्चा रोकें",humanOnTimeoutLabel:"समय समाप्त होने पर",humanOnTimeoutSkip:"उनकी बारी छोड़ें और जारी रखें",humanPrincipalId:"प्रिंसिपल आईडी",humanPrincipalIdHint:"वह पहचान जो इस सदस्य की बारी सबमिट कर सकती है — जब उनकी बोलने की बारी आती है तो चर्चा रुककर प्रतीक्षा करती है।",humanPrincipalIdPlaceholder:"उपयोगकर्ता की लॉगिन/प्रिंसिपल आईडी",humanTurnSettingsHint:"जब किसी मानव सदस्य की बोलने की बारी आती है तो चर्चा रुककर प्रतीक्षा करती है। चुनें कि यदि वे समय पर जवाब न दें तो क्या हो।",humanTurnSettingsTitle:"मानव सदस्य की बारी सेटिंग्स",humanTurnTimeoutInvalid:"मान्य ISO-8601 अवधि नहीं है, जैसे PT24H या P1D।",humanTurnTimeoutLabel:"बारी टाइमआउट (ISO-8601 अवधि)",humanTurnTimeoutPlaceholder:"जैसे PT24H — खाली छोड़ने पर अनिश्चित काल तक प्रतीक्षा होगी",memberTypeHuman:"मानव"},ie={advisoryBoard:"सलाहकार मंडल",advisoryBoardDesc:"मार्केटिंग, इंजीनियरिंग, वित्त, क़ानून और रणनीति — पाँच कारोबारी नज़रिये एक ही सवाल पर राय देते हैं, फिर मॉडरेटर सार प्रस्तुत करता है।",peerReview:"सहकर्मी समीक्षा पैनल",peerReviewDesc:"समीक्षक आपकी दी हुई सामग्री — मसौदा, योजना या प्रस्ताव — का आकलन करते हैं, एक-दूसरे के आकलन की समीक्षा कर सुधार करते हैं, और मॉडरेटर नतीजा जोड़ता है।",riskAssessment:"जोखिम आकलन",riskAssessmentDesc:"हर सदस्य अपनी राय देता है, एक सदस्य जान-बूझकर उलटा पक्ष रखकर अनदेखी कमियाँ उजागर करता है, बाक़ी जवाब देते हैं, फिर मॉडरेटर टिकी हुई बातों का सार देता है।",forecasting:"स्वतंत्र अनुमान",forecastingDesc:"सदस्य कई दौर तक गुमनाम रूप से जवाब देते हैं और बीच में केवल गुमनाम नतीजे देखते हैं, इसलिए कोई पहले बोलने वाले से प्रभावित नहीं होता।",proCon:"पक्ष/विपक्ष बहस",proConDesc:"दो सदस्य प्रस्ताव के समर्थन में और दो विरोध में तर्क देते हैं, फिर प्रत्युत्तर और मॉडरेटर का निर्णय।",negotiation:"बातचीत",negotiationDesc:"दो पक्ष अपने हित बताते हैं, प्रस्ताव रखते हैं और हर दौर में रियायतों का आदान-प्रदान करते हैं; सहमति न बनने पर ही मॉडरेटर मध्यस्थता करता है।",taskForce:"टास्क फ़ोर्स",taskForceDesc:"मॉडरेटर लक्ष्य को कामों में बाँटता है, सदस्य उन्हें समानांतर में करते हैं, और मॉडरेटर नतीजों की जाँच कर उन्हें जोड़ता है।",roles:{marketingExpert:"मार्केटिंग विशेषज्ञ",techLead:"टेक लीड",financeDirector:"वित्त निदेशक",legalCounsel:"क़ानूनी सलाहकार",strategyConsultant:"रणनीति सलाहकार",substanceReviewer:"विषय-वस्तु समीक्षक",structureReviewer:"संरचना समीक्षक",riskReviewer:"जोखिम समीक्षक",riskAnalyst:"Risk Analyst",domainExpert:"Domain Expert",devilsAdvocate:"Devil's Advocate",analystA:"Analyst A",analystB:"Analyst B",analystC:"Analyst C",analystD:"Analyst D",proAdvocate1:"Pro Advocate 1",proAdvocate2:"Pro Advocate 2",conAdvocate1:"Con Advocate 1",conAdvocate2:"Con Advocate 2",partyA:"पक्ष A",partyB:"पक्ष B",projectLead:"परियोजना प्रमुख",researcher:"शोधकर्ता",implementer:"कार्यान्वयनकर्ता",qualityAssurance:"गुणवत्ता आश्वासन"},assignRoles:"भूमिकाएँ असाइन करें",backToGallery:"टेम्पलेट पर वापस जाएँ",browseButton:"टेम्पलेट से",createButton:"समूह बनाएँ",created:"टेम्पलेट से समूह बनाया गया",nameLabel:"समूह का नाम",selectAgent:"एक एजेंट चुनें…",subtitle:"एक पैकेज्ड, पहले से ट्यून की गई चर्चा से शुरू करें — बस उसकी नामित भूमिकाओं में एजेंट असाइन करें।",title:"समूह टेम्पलेट",roleCount_one:"असाइन करने के लिए {{count}} भूमिका",roleCount_other:"असाइन करने के लिए {{count}} भूमिकाएँ",empty:"कोई टेम्पलेट उपलब्ध नहीं",emptyDescription:"इस सर्वर में कोई ग्रुप टेम्पलेट नहीं है। आप विज़ार्ड से शुरुआत से ग्रुप बना सकते हैं।"},se={agentIdPlaceholder:"संदेश संभालने के लिए एजेंट ID",botToken:"बॉट टोकन",botTokenHint:"बॉट उपयोगकर्ता OAuth टोकन। सुरक्षा के लिए वॉल्ट संदर्भ का उपयोग करें।",botTokenPlaceholder:"xoxb-… या ${vault:slack-bot-token}",channel:"चैनल",channelId:"Slack चैनल ID",channelIdCol:"चैनल ID",channelIdHint:"Slack चैनल पर राइट-क्लिक करें → चैनल विवरण देखें → चैनल ID कॉपी करें",channelsPlural:"चैनल",channelType:"चैनल प्रकार",confirmDelete:"चैनल हटाएं?",confirmDeleteDesc:"यह चैनल एकीकरण स्थायी रूप से हटा दिया जाएगा।",create:"चैनल बनाएं",createTitle:"चैनल एकीकरण बनाएं",defaultAgentId:"डिफ़ॉल्ट एजेंट ID",defaultTargetHint:"डिफ़ॉल्ट लक्ष्य उन सभी संदेशों को संभालता है जो किसी ट्रिगर कीवर्ड से मेल नहीं खाते। निर्माण के बाद और लक्ष्य जोड़ सकते हैं।",empty:"अभी कोई चैनल नहीं",emptyDesc:"एजेंट को Slack से जोड़ने के लिए चैनल एकीकरण बनाएं।",name:"नाम",namePlaceholder:"उदा. Engineering AI Hub",openSlackApps:"Slack ऐप डैशबोर्ड खोलें",searchPlaceholder:"चैनल खोजें…",signingSecret:"साइनिंग सीक्रेट",signingSecretHint:"आपके Slack ऐप के मूलभूत जानकारी पृष्ठ से।",signingSecretPlaceholder:"हेक्स स्ट्रिंग या ${vault:slack-signing-secret}",slackSetupGuide:"Slack सेटअप गाइड",slackSetupSummary:"एक Slack ऐप बनाएं, बॉट टोकन स्कोप कॉन्फ़िगर करें (app_mentions:read, chat:write, im:history, channels:history, groups:history), फिर क्रेडेंशियल यहाँ पेस्ट करें।",target:"लक्ष्य",targets:"लक्ष्य",targetsCol:"लक्ष्य",type:"प्रकार",unnamed:"अनाम चैनल",version:"संस्करण"},le={saveSuccess:"चैनल सहेजा गया",addTarget:"लक्ष्य जोड़ें",addTrigger:"ट्रिगर जोड़ें…",agentId:"एजेंट ID",botToken:"बॉट टोकन",channelId:"Slack चैनल ID",cooldown:"कूलडाउन (सेकंड)",general:"सामान्य",groupId:"समूह ID",isDefault:"डिफ़ॉल्ट",maxCost:"अधिकतम $/दिन",maxDaily:"अधिकतम/दिन",name:"नाम",observe:"निरीक्षण",observeDesc:"निष्क्रिय रूप से निगरानी करें और चुनिंदा जवाब दें",observeKeywords:"ट्रिगर कीवर्ड",observeMimeTypes:"ट्रिगर MIME प्रकार",observeMode:"निरीक्षण मोड",observeSettings:"निरीक्षण मोड सेटिंग्स",platformConfig:"प्लेटफ़ॉर्म कॉन्फ़िगरेशन",rawConfig:"कच्चा कॉन्फ़िगरेशन",removeTarget:"हटाएं",requiredEvents:"आवश्यक इवेंट सब्सक्रिप्शन:",requiredScopes:"आवश्यक बॉट टोकन स्कोप:",setDefault:"डिफ़ॉल्ट के रूप में सेट करें",signingSecret:"साइनिंग सीक्रेट",targetName:"नाम",targets:"संदेश रूटिंग लक्ष्य",targetType:"प्रकार",triggerHint:'उपयोगकर्ता "कीवर्ड: संदेश" टाइप करके इस लक्ष्य पर रूट करते हैं',triggerKeywords:"ट्रिगर कीवर्ड",triggers:"ट्रिगर",type:"चैनल प्रकार",webhookHint:"इस URL को अपने Slack ऐप के Event Subscriptions → Request URL फ़ील्ड में पेस्ट करें।",webhookUrl:"वेबहुक URL",hitlSection:"ह्यूमन-इन-द-लूप अनुमोदन (वैकल्पिक)",hitlApprovalChannel:"अनुमोदन चैनल ID",hitlApprovalChannelHint:"Slack चैनल जिसे बातचीत रुकने पर अनुमोदन कार्ड प्राप्त होता है।",hitlApproverUserIds:"अनुमोदक उपयोगकर्ता ID",hitlApproverUserIdsHint:"अल्पविराम-पृथक Slack उपयोगकर्ता ID जिन्हें बटन के माध्यम से अनुमोदन की अनुमति है। इस सूची के बिना, बटन प्रदर्शित नहीं होते (फेल-क्लोज्ड)।"},ce={loadingApprovalDetails:"अनुमोदन विवरण लोड हो रहा है…",pendingCount:"{{count}} अनुमोदन की प्रतीक्षा में",approvalDetailsError:"यह अनुरोध क्या करेगा यह लोड नहीं हो सका, इसलिए इसे यहाँ से अनुमोदित नहीं किया जा सकता। अस्वीकार करना अब भी सुरक्षित है।",awaitingHuman:"मानव की प्रतीक्षा",awaitingApproval:"अनुमोदन की प्रतीक्षा",approve:"अनुमोदन",reject:"अस्वीकार",cancel:"रद्द करें",approved:"अनुमोदित",rejected:"अस्वीकृत",cancelled:"रद्द",pending:"लंबित",emptyQueue:"कोई लंबित अनुमोदन नहीं",emptyQueueDescription:"सभी बातचीत सुचारू रूप से चल रही हैं — अभी किसी मानव इनपुट की आवश्यकता नहीं है।",surface:"प्रकार",regular:"बातचीत",group:"समूह",pauseReason:"कारण",pausedAt:"रुका हुआ",timeoutPolicy:"समय सीमा",timeRemaining:"शेष",overdue:"अतिदेय",phase:"चरण",granularity:"विस्तृतता",taskApprovals:"कार्य अनुमोदन",approveAll:"सभी को अनुमोदित करें",note:"नोट जोड़ें (वैकल्पिक)",notePlaceholder:"निर्णय के लिए एक नोट जोड़ें...",discussionCancelled:"चर्चा रद्द की गई",cancelDiscussion:"चर्चा रद्द करें",rejectAll:"सभी अस्वीकार करें",timeoutWaitIndefinitely:"अनिश्चित काल तक प्रतीक्षा करें",timeoutAutoApprove:"स्वतः-स्वीकृत",timeoutAutoReject:"स्वतः-अस्वीकृत",timeoutAbort:"निरस्त करें",granularityPhase:"चरण",granularityTask:"कार्य",rejectionFail:"कार्य विफल करें",rejectionRetry:"कार्य पुनः प्रयास करें",groupsTruncated:"यहाँ दिखाई गई से अधिक समूह स्वीकृतियाँ मौजूद हैं।",groupsLoadError:"समूह स्वीकृतियाँ लोड नहीं हो सकीं।",toolApprovalRequired:"टूल अनुमोदन आवश्यक",toolCallsAwaiting:"अनुमोदन की प्रतीक्षा में टूल कॉल",executedUngated:"पहले ही निष्पादित (अनगेटेड)",outcomeUnknown:"पिछला अनुमोदन निष्पादन के बीच में बाधित हुआ था — इसका प्रभाव अज्ञात है; पुनः प्रयास करने से पहले बाहरी रूप से सत्यापित करें।",outcomeUnknownShort:"परिणाम अज्ञात",toolApprovalHint:"अनुमोदन आपके प्रति-कॉल विकल्पों को लागू करता है (जिन कॉल को आपने नहीं बदला वे अनुमोदित हैं)। अस्वीकार पूरे बैच को अस्वीकार करता है।",toolApprovalHintExplicit:"बैच को अनुमोदित करने से पहले प्रत्येक कॉल को अलग से अनुमोदित या अस्वीकार करना होगा। अस्वीकार पूरे बैच को अस्वीकार करता है।",explicitReviewMissing:"अनुमोदित करने से पहले ऊपर हर कॉल की समीक्षा करें।",redactionCaveat:'नीचे दिखाए गए तर्क संपादित किए गए हैं — गुप्त मान "" के रूप में दिखता है, हटाया नहीं जाता।',gateReason:"मिलान पैटर्न",argsTruncated:"आर्ग्युमेंट छोटे किए गए",amendArguments:"आर्ग्युमेंट संशोधित करें (वैकल्पिक)",amendPlaceholder:'पूर्ण प्रतिस्थापन JSON ऑब्जेक्ट, जैसे {"to":"ops@acme.com"}। मूल रखने के लिए खाली छोड़ें।',amendTruncated:"जिस कॉल के आर्ग्युमेंट छोटे किए गए हों उसे संशोधित नहीं किया जा सकता — इसे यथावत अनुमोदित या अस्वीकार करें।",amendInvalidJson:"संशोधित आर्ग्युमेंट एक मान्य JSON ऑब्जेक्ट होना चाहिए।",amendTooLarge:"संशोधित आर्ग्युमेंट बहुत बड़े हैं।",review:"समीक्षा",tool:"टूल",scopeAll:"पूरे सिस्टम में सभी लंबित अनुमोदन दिखाए जा रहे हैं।",scopeOwn:"आपकी बातचीत के लंबित अनुमोदन दिखाए जा रहे हैं।",chatPaused:"यह बातचीत मानव अनुमोदन की प्रतीक्षा में है।",noProgressWaitForHuman:"मानव की प्रतीक्षा करें",noProgressAutoReject:"स्वतः-अस्वीकार",noProgressAbort:"निरस्त करें",confirmApproveTitle:"अनुरोध अनुमोदित करें?",confirmApproveDescription:"इस बातचीत को अनुमोदित करके फिर से शुरू करें?",confirmApproveToolTitle:"टूल निष्पादन अनुमोदित करें?",confirmApproveToolDescription:"अनुमोदन करने पर चलेगा: {{toolNames}}। यह वास्तविक क्रियाएं करता है और इसे पूर्ववत नहीं किया जा सकता।",confirmRejectTitle:"अनुरोध अस्वीकार करें?",confirmRejectDescription:"इस अनुरोध को अस्वीकार करें? बातचीत आगे नहीं बढ़ेगी।",confirmCancelTitle:"बातचीत रद्द करें?",confirmCancelDescription:"इस बातचीत को रद्द करें? कोई भी चल रहा कार्य रोक दिया जाएगा।",confirmCancelButton:"बातचीत रद्द करें",confirmCancelGroupTitle:"चर्चा रद्द करें?",confirmCancelGroupDescription:"इस चर्चा को रद्द करें? कोई भी चल रहा कार्य रोक दिया जाएगा।",confirmCancelGroupButton:"चर्चा रद्द करें",confirmDismiss:"वापस जाएं",approvalBlockedHeading:"इसे यहाँ से अनुमोदित नहीं किया जा सकता",confirmRejectToolTitle:"टूल निष्पादन अस्वीकार करें?",confirmRejectToolDescription:"कुछ भी नहीं चलेगा। बातचीत जारी रहेगी और एजेंट {{toolNames}} के बिना उत्तर देगा।",humanTurn:"सदस्य की बारी",humanTurnReason:"{{member}} के बोलने की प्रतीक्षा",humanTurnMemberFallback:"एक सदस्य",decidedProgress:"{{total}} में से {{decided}} तय"},de={deploying:"एजेंट Deploy हो रहा है…",error:"कुछ गलत हो गया",newConversation:"नया वार्तालाप",ready:"तैयार — परीक्षण के लिए संदेश लिखें",retry:"पुनः प्रयास करें",saving:"परिवर्तन सहेजे जा रहे हैं…",starting:"वार्तालाप शुरू हो रहा है…",timeout:"Deploy टाइम-आउट हो गया",title:"परीक्षण चैट",preparing:"तैयार किया जा रहा है…"},pe={auditTrail:"ऑडिट ट्रेल",checking:"जाँच हो रही है…",coordConnected:"कोऑर्डिनेटर कनेक्टेड",coordDisconnected:"कोऑर्डिनेटर डिस्कनेक्टेड",coordUnknown:"कोऑर्डिनेटर —",createGroup:"समूह बनाएं",noConversations:"अभी तक कोई बातचीत नहीं",offline:"ऑफ़लाइन",online:"ऑनलाइन",platform:"प्लेटफ़ॉर्म",platformHealth:"प्लेटफ़ॉर्म स्वास्थ्य",recentConversations:"हाल की बातचीत",secretVault:"सीक्रेट वॉल्ट",vaultDown:"Vault अनुपलब्ध",vaultUp:"Vault तैयार",viewLogs:"लॉग देखें"},ue={retry:"पुनः प्रयास करें",title:"कुछ गलत हो गया"},me={auditPseudonymized:"ऑडिट छद्मनामित",checkingStatus:"जाँच हो रही है...",confirmDelete:"हाँ, सारा डेटा हटाएं",confirmDesc:'यह उपयोगकर्ता "{{userId}}" के लिए सारा डेटा स्थायी रूप से हटा देगा। इस क्रिया को पूर्ववत नहीं किया जा सकता।',confirmTitle:"डेटा हटाने की पुष्टि करें",conversationsDeleted:"बातचीत हटाई गईं",delete:"सारा डेटा हटाएं",deleteSuccess:"उपयोगकर्ता डेटा सफलतापूर्वक हटाया गया",deleting:"हटाया जा रहा है...",enterUserIdFirst:"स्थिति जांचने के लिए ऊपर उपयोगकर्ता ID दर्ज करें",export:"डेटा निर्यात करें",exportSuccess:"उपयोगकर्ता डेटा सफलतापूर्वक निर्यात हुआ",exporting:"निर्यात हो रहा है...",legalDesc:"डेटा निर्यात (Art. 15/20) एक JSON फ़ाइल प्रदान करता है जिसमें किसी उपयोगकर्ता का सारा संग्रहित डेटा होता है। हटाना (Art. 17) सभी स्मृतियों और बातचीत डेटा को स्थायी रूप से हटा देता है, ऑडिट प्रविष्टियों को छद्मनामित करता है, और इसे पूर्ववत नहीं किया जा सकता।",legalNotice:"डेटा सुरक्षा सूचना",liftRestriction:"प्रतिबंध हटाएं",liftingRestriction:"हटाया जा रहा है...",logsPseudonymized:"लॉग छद्मनामित",memoriesDeleted:"स्मृतियां हटाई गईं",restrictProcessing:"प्रसंस्करण प्रतिबंधित करें",restricting:"प्रतिबंधित किया जा रहा है...",restrictionApplied:"उपयोगकर्ता के लिए प्रसंस्करण प्रतिबंधित",restrictionDesc:"जब कोई उपयोगकर्ता डेटा सटीकता पर विवाद करे या प्रसंस्करण पर आपत्ति करे तो प्रसंस्करण प्रतिबंधित करें। प्रतिबंधित रहते हुए, उपयोगकर्ता का डेटा सुरक्षित रहता है लेकिन कोई नई बातचीत संसाधित नहीं की जा सकती। यह प्रतिवर्ती है।",restrictionLifted:"प्रसंस्करण प्रतिबंध हटाया गया",restrictionTitle:"प्रसंस्करण प्रतिबंध (Art. 18)",resultsTitle:"मिटाना पूर्ण",statusActive:"प्रसंस्करण सक्रिय",statusUnknown:"स्थिति उपलब्ध नहीं",statusRestricted:"प्रसंस्करण प्रतिबंधित",subtitle:"GDPR-अनुपालक उपयोगकर्ता डेटा प्रबंधन — मिटाना (Art. 17), सुवाह्यता (Art. 15/20), और प्रसंस्करण प्रतिबंध (Art. 18)",title:"गोपनीयता और अनुपालन",userId:"उपयोगकर्ता ID",userIdPlaceholder:"उपयोगकर्ता ID दर्ज करें...",userLookup:"उपयोगकर्ता खोज"},ge={message:"डेमो मोड — नमूना डेटा प्रदर्शित हो रहा है। वास्तविक डेटा के लिए एक EDDI बैकएंड कनेक्ट करें।"},he={confirmPurgeAll:"सभी {{count}} अनाथ संसाधनों को स्थायी रूप से हटाएँ? सर्वर सभी को हटा देता है — आपका चयन लागू नहीं होता। इसे पूर्ववत नहीं किया जा सकता।",deleteSelected:"{{count}} चयनित हटाएं",description:"किसी भी एजेंट या पैकेज द्वारा संदर्भित न किए गए संसाधनों को खोजें और साफ़ करें।",deselectAll:"सभी अचयनित करें",includeDeleted:"सॉफ्ट-डिलीट किए गए शामिल करें",lastScanned:"अंतिम स्कैन",noOrphans:"कोई अनाथ नहीं मिला",purge:"सभी साफ़ करें",purgeSuccess:"{{count}} अनाथ हटाए गए",runScan:"स्कैन चलाएं",scan:"स्कैन",scanPromptDesc:"एक्सटेंशन कॉन्फ़िग (नियम, API कॉल, LLM, आउटपुट) खोजें जो किसी भी वर्कफ़्लो या एजेंट द्वारा संदर्भित नहीं हैं। अपने प्लेटफ़ॉर्म को व्यवस्थित रखने के लिए अप्रयुक्त संसाधनों को साफ़ करें।",scanPromptTitle:"अपने प्लेटफ़ॉर्म को स्कैन करें",scanning:"संसाधन स्कैन हो रहे हैं…",selectAll:"सभी चुनें",softDeleted:"हटाया गया",title:"अनाथ पहचान",found_one:"{{count}} अनाथ मिले",found_other:"{{count}} अनाथ मिले"},ye={apiCallsMinute:"API कॉल / मिनट",configuration:"कॉन्फ़िगरेशन",conversationsToday:"आज की बातचीत",description:"प्रति टेनेंट दर सीमाएं, उपयोग सीमाएं और लागत बजट कॉन्फ़िगर करें।",disable:"अक्षम करें",disabled:"अक्षम",enable:"सक्षम करें",enabled:"सक्षम",enforcementOff:"प्रवर्तन बंद है।",enforcementOffHint:"कोटा लागू नहीं किया जा रहा है। सीमाएं लागू करना शुरू करने के लिए प्रवर्तन सक्षम करें और सहेजें।",limitHint:"-1 = असीमित",liveUsage:"लाइव उपयोग",maxAgentsPerTenant:"अधिकतम एजेंट / टेनेंट",maxApiCallsPerMinute:"अधिकतम API कॉल / मिनट",maxConversationsPerDay:"अधिकतम बातचीत / दिन",maxMonthlyCostUsd:"अधिकतम मासिक लागत (USD)",monthlyCost:"मासिक लागत",resetConfirmDesc:'टेनेंट "default" के सभी उपयोग काउंटर (बातचीत, API कॉल, मासिक लागत) तुरंत शून्य कर देता है। इसे पूर्ववत नहीं किया जा सकता।',resetConfirmTitle:"उपयोग काउंटर रीसेट करें?",resetCounters:"काउंटर रीसेट करें",resetSuccess:"उपयोग काउंटर रीसेट किए गए",saveSuccess:"कोटा सहेजा गया",tenantId:"टेनेंट ID",title:"टेनेंट कोटा"},ve={clearVault:"वॉल्ट संदर्भ साफ़ करें",createNew:"नया सीक्रेट बनाएं",emptyVault:"अभी तक कोई सीक्रेट संग्रहित नहीं",filterPlaceholder:"वॉल्ट कुंजियां खोजें…",keyNotFound:"यह कुंजी वॉल्ट में नहीं मिली",loading:"कुंजियां लोड हो रही हैं…",noMatch:'"{{filter}}" से मेल खाती कोई कुंजी नहीं',pickFromVault:"वॉल्ट से चुनें",placeholder:"API कुंजी या ${vault:key-name}",vaultDown:"Vault कॉन्फ़िगर नहीं है — EDDI बैकएंड में एक सीक्रेट प्रदाता सेट करें"},De={category:"श्रेणी",content:"प्रॉम्प्ट सामग्री",contentLabel:"स्निपेट सामग्री",contentPlaceholder:"आपको अपनी प्रतिक्रियाओं में सतर्क और सावधान रहना चाहिए...",description:"विवरण",descriptionPlaceholder:"यह स्निपेट क्या करता है",identity:"पहचान",name:"स्निपेट नाम",namePlaceholder:"उदा. cautious_mode",noTags:"कोई टैग नहीं",tagPlaceholder:"उदा. safety, production",tags:"टैग",templateEnabled:"टेम्पलेट रिज़ॉल्यूशन सक्षम करें",templateEnabledHint:"अक्षम होने पर, सामग्री में {{}} मार्कर को शाब्दिक टेक्स्ट के रूप में माना जाता है (कोड उदाहरणों के लिए उपयोगी)।",usageHint:"उपयोग:"},Ae={deployed:"Deploy किया गया",deploying:"Deploy हो रहा है...",error:"त्रुटि",notDeployed:"Deploy नहीं किया गया",checking:"जाँच हो रही है…"},Te={subtitle:"प्रति-उपयोगकर्ता स्मृतियां, गुण और बातचीत बाइंडिंग प्रबंधित करें",tabs:"उपयोगकर्ता डेटा अनुभाग",title:"उपयोगकर्ता डेटा"},fe={deleteKey:"{{key}} हटाएं",editKey:"{{key}} संपादित करें",tableTitle_one:"{{count}} वेरिएबल",tableTitle_other:"{{count}} वेरिएबल",title:"वैश्विक वेरिएबल",description:"पूरे परिनियोजन के कॉन्फ़िगरेशन मान, सभी एजेंट में उपलब्ध।",create:"वेरिएबल जोड़ें",createTitle:"वैश्विक वेरिएबल जोड़ें",editTitle:"वेरिएबल संपादित करें",keyLabel:"कुंजी",keyPlaceholder:"उदा. default-model",keyError:"केवल अक्षर, अंक, बिंदु, अंडरस्कोर और हाइफ़न।",valueLabel:"मान",valuePlaceholder:"उदा. gpt-4.1",valueWarning:"मान UI और लॉग में दिखाई देते हैं। संवेदनशील डेटा के लिए सीक्रेट वॉल्ट का उपयोग करें।",descriptionLabel:"विवरण (वैकल्पिक)",descriptionPlaceholder:"वैकल्पिक विवरण…",exportableLabel:"एजेंट निर्यात में शामिल करें",save:"वेरिएबल सहेजें",saveSuccess:'वेरिएबल "{{key}}" सहेजा गया',deleteSuccess:'वेरिएबल "{{key}}" हटाया गया',confirmDeleteTitle:"वेरिएबल हटाएं",confirmDeleteMessage:'क्या आप वाकई "{{key}}" हटाना चाहते हैं? ${vars:{{key}}} का उपयोग करने वाले एजेंट को अनसुलझे संदर्भ दिखाई देंगे।',empty:"कोई वैश्विक वेरिएबल परिभाषित नहीं है",emptyHint:'अपना पहला परिनियोजन-व्यापी कॉन्फ़िगरेशन मान बनाने के लिए "वेरिएबल जोड़ें" पर क्लिक करें।',searchPlaceholder:"वेरिएबल फ़िल्टर करें…",colKey:"कुंजी",colValue:"मान",colDescription:"विवरण",colExportable:"निर्यात",colReference:"संदर्भ",colActions:"कार्रवाइयाँ",exportYes:"निर्यात में शामिल",exportNo:"निर्यात से बाहर",copyVars:"${vars:…} संदर्भ कॉपी करें",refCopied:"कॉपी किया गया: {{ref}}",infoLine1:"सिस्टम प्रॉम्प्ट में {{vars.}} या एजेंट कॉन्फ़िगरेशन में कहीं भी ${vars:} का उपयोग करें।",infoLine2:"परिवर्तन 2 मिनट के भीतर प्रभावी होते हैं (कैश TTL)। संवेदनशील मानों के लिए सीक्रेट वॉल्ट का उपयोग करें।"},Pe={endpoints:"एंडपॉइंट",endpointsTotal:"कुल एंडपॉइंट",groupsSelected:"समूह चयनित",importOpenApi:"OpenAPI से आयात करें",importSelected:"चयनित समूह आयात करें",importing:"आयात हो रहा है…",selectGroups:"अलग API कॉल एक्सटेंशन के रूप में आयात करने के लिए API समूह चुनें"},Se=JSON.parse('{"board":{"continuePlaceholder":"इस चर्चा को जारी रखें…","inputDisabledClosed":"यह चर्चा बंद है","newDiscussion":"नई चर्चा","noResponseGenerated":"कोई प्रतिक्रिया उत्पन्न नहीं हुई","awaitingApprovalHint":"यह चर्चा मानव अनुमोदन के लिए रोकी गई है।","reviewInManager":"समीक्षा करें","askMore":"{{name}} से और पूछें →","askYourBoard":"अपने टास्क फोर्स से पूछें…","attachFile":"फ़ाइल संलग्न करें","backToLive":"लाइव चर्चा पर वापस जाएँ","chatOneOnOne":"आमने-सामने चैट","close":"बंद करें","copied":"कॉपी हो गया!","copyResponse":"उत्तर कॉपी करें","details":"विवरण","emptyDescription":"प्रश्न पूछें और आपका टास्क फोर्स उस पर चर्चा करेगा।","emptyTitle":"चर्चा के लिए तैयार","error":"कुछ गलत हो गया","fileTooLarge":"फ़ाइल 10MB से कम होनी चाहिए","fileTypeNotAllowed":"यह फ़ाइल प्रकार समर्थित नहीं है","hideConfig":"विवरण पैनल छिपाएँ","live":"लाइव","liveNow":"लाइव","loadingResponse":"उत्तर लोड हो रहा है","members":"टीम","membersPanel":"टीम पैनल","moderator":"संचालक","noMembers":"कोई टीम सदस्य नहीं","noSessions":"अभी कोई सत्र नहीं","phase":"चरण","pin":"उत्तर पिन करें","removeAttachment":"संलग्नक हटाएँ","running":"प्रगति में","runningHint":"यह चर्चा अभी भी चल रही है — नए उत्तर स्वतः दिखाई देंगे।","send":"भेजें","sessions":"सत्र","sessionsPanel":"सत्र पैनल","skipped":"{{name}} — छोड़ा गया","startingDescription":"आपका टास्क फोर्स इस पर काम कर रहा है — उत्तर आते ही यहाँ दिखाई देंगे।","startingTitle":"चर्चा प्रगति में","stillDiscussing":"टास्क फोर्स अभी भी चर्चा कर रहा है…","stop":"रोकें","synthesis":"संश्लेषण","synthesisResult":"संश्लेषण परिणाम","title":"टास्क फोर्स","toggleConfig":"विवरण पैनल टॉगल करें","unpin":"उत्तर अनपिन करें","untitled":"शीर्षकहीन","viewSessions":"पिछले सत्र देखें"},"thread":{"fileTooLarge":"फ़ाइल 20MB से कम होनी चाहिए","fileTypeNotAllowed":"यह फ़ाइल प्रकार समर्थित नहीं है","attachmentLimit":"प्रति संदेश अधिकतम {{max}} अटैचमेंट","notForwarded":"फ़ाइल संग्रहीत लेकिन मॉडल के लिए बहुत बड़ी","uploadFailed":"अपलोड विफल: {{error}}","noResponse":"कोई प्रतिक्रिया नहीं","attachFile":"फ़ाइल संलग्न करें","emptySubtitle":"{{name}} के साथ चैट शुरू करने के लिए संदेश भेजें।","emptyTitle":"{{name}} के साथ चैट","followUp":"आपके उत्तर पर आगे की बात…","fromSession":"{{boardName}} सत्र से","placeholder":"संदेश लिखें…","questionLabel":"प्रश्न","removeAttachment":"संलग्नक हटाएँ","responseLabel":"उत्तर","send":"भेजें","sendError":"क्षमा करें, एक त्रुटि हुई। कृपया पुनः प्रयास करें।","startingConversation":"वार्तालाप शुरू हो रहा है…","toggleContext":"संदर्भ टॉगल करें","placeholderNamed":"{{name}} को संदेश…"},"chat":{"agentDetails":"एजेंट विवरण","selectToView":"विवरण देखने के लिए एजेंट चुनें","hideDetails":"विवरण पैनल छिपाएं","editAgent":"एजेंट संपादित करें","auditLogs":"ऑडिट लॉग","openStudio":"मैनेजर में खोलें","triggers":"ट्रिगर देखें","starterSelected":"प्रॉम्प्ट चैट इनपुट में जोड़ा गया","title":"चैट","hideAgentDetails":"एजेंट विवरण छिपाएँ","showAgentDetails":"एजेंट विवरण दिखाएँ"},"agentEditor":{"capabilities":"क्षमताएं","workflows":"कार्यप्रवाह","features":"विशेषताएं और सुरक्षा","a2aEnabled":"एजेंट-टू-एजेंट","memoryTools":"मेमोरी टूल","signedMessages":"हस्ताक्षरित संदेश","strictMemory":"सख्त मेमोरी","hitlMode":"अनुमोदन मोड","llmConfig":"मॉडल और एलएलएम इंजन","provider":"पाइपलाइन","mode":"निष्पादन मोड","personaPrompt":"पर्सोना प्रॉम्प्ट","starters":"बातचीत की शुरुआत","channels":"चैनल कनेक्टर्स","temperature":"तापमान","contextWindow":"संदर्भ सीमा","activeTools":"सक्रिय उपकरण","noLlm":"कोई LLM कॉन्फ़िगर नहीं","noTools":"कोई कॉन्फ़िगर नहीं","add":"जोड़ें","addCapability":"क्षमता जोड़ें","cancel":"रद्द करें","close":"बंद करें","confidence":"विश्वास","confidenceHigh":"उच्च","confidenceLow":"निम्न","confidenceMedium":"मध्यम","description":"विवरण","descriptionPlaceholder":"इस एजेंट की विशेषज्ञता का वर्णन करें…","discardChanges":"आपके पास असहेजे परिवर्तन हैं। खारिज करें?","loadError":"एजेंट डेटा लोड करने में विफल।","noCapabilities":"कोई क्षमता परिभाषित नहीं है।","removeCapability":"क्षमता हटाएँ","retry":"पुनः प्रयास करें","save":"परिवर्तन सहेजें","saveError":"परिवर्तन सहेजने में विफल","saveSuccess":"एजेंट सफलतापूर्वक अपडेट हुआ","settings":"सेटिंग्स","skill":"कौशल","skillPlaceholder":"उदा. सारांशीकरण","systemPrompt":"सिस्टम प्रॉम्प्ट","systemPromptPlaceholder":"इस एजेंट के व्यवहार, व्यक्तित्व और विशेषज्ञता को परिभाषित करने वाले निर्देश…","title":"एजेंट संपादित करें"},"settings":{"hitlApprovalPointsNote":"ये सेटिंग्स नियंत्रित करती हैं कि अनुमोदन कैसे व्यवहार करता है। चर्चा के किन बिंदुओं पर अनुमोदन आवश्यक है, यह Manager में प्रति चरण कॉन्फ़िगर किया जाता है।","hitlOpenManager":"अनुमोदन बिंदु सेट करें","deliberation":"विचार-विमर्श की गुणवत्ता","deliberationDesc":"अल्पमत विचार दर्ज करें और सदस्यों को चर्चा के दौरान मिले काम को दर्ज करने दें","recordDissents":"अल्पमत रिपोर्ट दर्ज करें","recordDissentsDesc":"हर संश्लेषण के बाद, जिसने उसे नहीं लिखा हर वह सदस्य एक छोटी बारी पाता है ताकि बता सके कि वह कहाँ अब भी असहमत है। प्रति सदस्य एक अतिरिक्त कॉल लगती है।","agentFiledTasks":"सदस्यों को अपने कार्य दर्ज करने दें","agentFiledTasksDesc":"चर्चा के दौरान एजेंट को मिला काम असली कार्य बन जाता है जिसे अगली निष्पादन लहर उठाती है। बंद होने पर ये उपकरण इस समूह के लिए मौजूद ही नहीं होते।","maxTasksPerDiscussion":"अधिकतम दर्ज कार्य / चर्चा","maxTasksPerDiscussionHelp":"केवल एजेंट-दर्ज कार्य गिने जाते हैं, इसलिए बड़ा नियोजित बैकलॉग इसे समाप्त नहीं करता।","maxTasksPerTurn":"अधिकतम दर्ज कार्य / बारी","maxTasksPerTurnHelp":"एक बेकाबू बारी को सीमित करता है; चर्चा-स्तरीय सीमा धीमे बहाव को रोकती है।","maxCost":"लागत सीमा (USD)","maxCostUnlimited":"कोई सीमा नहीं","maxCostHelp":"बिना सीमा के लिए खाली छोड़ें। पहले से चल रही बारी कुल राशि को सीमा से थोड़ा आगे ले जा सकती है।","onCostExceeded":"जब सीमा पहुँच जाए","costSynthesize":"अभी संश्लेषण करें — सीधे निष्कर्ष पर जाएँ","costAbort":"रोकें — चर्चा को तुरंत विफल करें","costCeilingInvalid":"लागत सीमा 0 से बड़ी होनी चाहिए। बिना सीमा के लिए फ़ील्ड खाली करें।","maxDelegationDepth":"अधिकतम प्रत्यायोजन गहराई","maxDelegationDepthHelp":"A का B को और B का C को सौंपना गहराई 2 है। इससे आगे जाने वाला कदम अस्वीकृत होता है — यही प्रत्यायोजन चक्र को रोकता है।","delegationTimeout":"प्रत्यायोजन समय-सीमा (सेकंड)","delegationTimeoutHelp":"सौंपने वाला एजेंट अपने प्रतिनिधि की कितनी देर प्रतीक्षा करता है। जब प्रतिनिधि उपकरण या नेस्टेड चर्चा चलाए तो इसे बढ़ाएँ।","allowedDelegationTargets":"प्रत्यायोजन अनुमति-सूची","allowedDelegationTargetsHint":"कोई भी परिनियोजित एजेंट","allowedDelegationTargetsHelp":"अल्पविराम से अलग किए गए एजेंट आईडी। किसी भी परिनियोजित एजेंट को अनुमति देने के लिए खाली छोड़ें।","moderatorlessWarning":"ऐसे मॉडरेटर तक सीमित जो इस टास्क फ़ोर्स में नहीं है: {{phases}}। बोलने के क्रम में पहला सदस्य स्थान लेगा।","memberLimit":"एक टास्क फ़ोर्स में अधिकतम {{max}} सदस्य हो सकते हैं","explicitPhasesNote":"यह टास्क फ़ोर्स अपने चरण स्पष्ट रूप से परिभाषित करती है ({{phases}}), इसलिए वे वैसे ही चलते हैं — ऊपर का फ़्रेमवर्क और दौरों की संख्या अब प्रवाह नहीं बदलते।","explicitPhasesEdit":"चरण संपादित करें","addMemberTitle":"टीम सदस्य जोड़ें","selectAgent":"एजेंट","pickAgent":"एजेंट खोजें या चुनें…","displayName":"प्रदर्शन नाम","displayNameHint":"जैसे विश्लेषक","role":"भूमिका","roleHint":"जैसे समीक्षक","addMember":"सदस्य जोड़ें","nameRequired":"कार्य दल का नाम आवश्यक है","saveSuccess":"कार्य दल की सेटिंग्स सहेजी गईं","saveError":"सेटिंग्स सहेजने में विफल","deleteAllSuccess":"कार्य दल और सभी एजेंट हटा दिए गए","deleteError":"कार्य दल हटाने में विफल","deleteSuccess":"कार्य दल हटा दिया गया","duplicateMember":"यह एजेंट पहले से सदस्य है","loadError":"सेटिंग्स लोड करने में विफल","backToBoard":"कार्य दल पर वापस जाएं","untitled":"बिना शीर्षक वाला कार्य दल","subtitle":"अपने कार्य दल की सेटिंग्स और कार्यबल कॉन्फ़िगर करें","general":"सामान्य सेटिंग्स","generalDesc":"आपके कार्य दल का बुनियादी कॉन्फ़िगरेशन","boardName":"कार्य दल का नाम","boardNameHint":"कार्य दल का नाम दर्ज करें…","description":"विवरण","descriptionHint":"यह कार्य दल किस बारे में है?","discussionStyle":"सहयोग ढांचा","maxRounds":"अधिकतम राउंड","moderator":"मॉडरेटर","noModerator":"कोई नहीं","team":"कार्यबल","teamDesc":"अपने कार्य दल में भाग लेने वाले एजेंटों को प्रबंधित करें","roleOptional":"वैकल्पिक","typeAgent":"एजेंट","typeModerator":"मॉडरेटर","removeMember":"सदस्य हटाएं","minMembers":"कम से कम 2 सदस्य आवश्यक हैं","protocol":"प्रोटोकॉल और लचीलापन","protocolDesc":"एजेंट संचार के लिए टाइमआउट, पुनः प्रयास और विफलता प्रबंधन","agentTimeout":"एजेंट टाइमआउट (सेकंड)","maxRetries":"अधिकतम पुनः प्रयास","onAgentFailure":"एजेंट विफलता पर","failureSkip":"छोड़ें — इस एजेंट के बिना जारी रखें","failureRetry":"पुनः प्रयास — एजेंट को फिर से आज़माएं","failureAbort":"निरस्त करें — पूरी चर्चा रोक दें","onUnavailable":"सदस्य के अनुपलब्ध होने पर","unavailableSkip":"छोड़ें — उनके बिना आगे बढ़ें","unavailableFail":"विफल — चर्चा रोक दें","maxTurns":"अधिकतम मोड़ (0 = असीमित)","hitl":"मानवीय निगरानी","hitlDesc":"तय करें कि मनुष्य AI के निर्णयों की समीक्षा कब और कैसे करें","hitlGranularity":"अनुमोदन की सूक्ष्मता","granularityPhase":"प्रति चरण — चर्चा के हर चरण के बाद समीक्षा","granularityTask":"प्रति कार्य — हर एक कार्य की अलग समीक्षा","hitlTimeout":"अनुमोदन टाइमआउट","hitlTimeoutHint":"जैसे PT15M (15 मिनट), PT1H (1 घंटा)","hitlTimeoutHelp":"ISO-8601 अवधि। टाइमआउट न चाहने पर खाली छोड़ें।","hitlTimeoutPolicy":"टाइमआउट होने पर","timeoutWait":"अनिश्चित काल तक प्रतीक्षा करें","timeoutAutoApprove":"स्वतः-स्वीकृत","timeoutAutoReject":"स्वतः-अस्वीकृत","timeoutAbort":"चर्चा निरस्त करें","hitlRejection":"अस्वीकृति पर","rejectionFail":"विफल — कार्य रोक दें","rejectionRetry":"पुनः प्रयास — एजेंट से संशोधन कराएं","dynamic":"डायनामिक एजेंट","dynamicDesc":"एजेंटों को चर्चा के दौरान अन्य एजेंटों को भर्ती करने, बनाने या कार्य सौंपने की अनुमति दें","dynamicEnable":"डायनामिक एजेंट सक्षम करें","dynamicEnableDesc":"एजेंटों को अन्य एजेंटों को भर्ती करने, बनाने या कार्य सौंपने की अनुमति दें","allowCreation":"निर्माण की अनुमति","allowCreationDesc":"एजेंट आवश्यकतानुसार नए एजेंट बना सकते हैं","allowRecruitment":"भर्ती की अनुमति","allowRecruitmentDesc":"एजेंट पहले से तैनात एजेंटों को भर्ती कर सकते हैं","allowDelegation":"कार्य सौंपने की अनुमति","allowDelegationDesc":"एजेंट उप-कार्य अन्य एजेंटों को सौंप सकते हैं","maxCreated":"अधिकतम निर्मित","maxRecruited":"अधिकतम भर्ती","maxDelegations":"प्रति कार्य अधिकतम प्रत्यायोजन","inheritModel":"मूल एजेंट का मॉडल विरासत में लें","inheritModelDesc":"बनाए गए एजेंट मूल एजेंट का LLM मॉडल उपयोग करते हैं","lifecycle":"जीवन चक्र नीति","lifecycleEphemeral":"अस्थायी — चर्चा के बाद हटा दिया जाता है","lifecycleKeep":"तैनात रखें — चर्चा के बाद भी बना रहता है","lifecycleUndeploy":"केवल हटाएं — रोका जाता है पर मिटाया नहीं","lifecycleAgentDecides":"एजेंट तय करता है — एजेंट स्वयं अपना भविष्य चुनता है","tasks":"पूर्व-कॉन्फ़िगर किए गए कार्य","tasksDesc":"कार्य पहले से तय करें ताकि PLAN चरण छूट जाए और एजेंट तुरंत निष्पादन शुरू करें","taskSubject":"विषय","taskSubjectHint":"क्या किया जाना है?","taskDescription":"विवरण","taskDescHint":"इस कार्य के लिए विस्तृत निर्देश…","taskAssignRole":"भूमिका को सौंपें","taskPriority":"प्राथमिकता","removeTask":"कार्य हटाएं","addTask":"कार्य जोड़ें","dangerZone":"खतरा क्षेत्र","dangerDesc":"अपरिवर्तनीय कार्रवाइयाँ — सावधानी से आगे बढ़ें","deleteBoard":"कार्य दल भंग करें","deleteBoardDesc":"इस कार्य दल का कॉन्फ़िगरेशन हटाएं। एजेंट बने रहेंगे।","deleteBoardAll":"कार्य दल + सभी एजेंट भंग करें","deleteBoardAllDesc":"इस कार्य दल और उसके सभी सदस्य एजेंटों को स्थायी रूप से हटाएं।","unsavedChanges":"आपके पास असहेजे परिवर्तन हैं","templateSaved":"टेम्पलेट के रूप में सहेजा गया","saveAsTemplate":"टेम्पलेट के रूप में सहेजें","saving":"सहेजा जा रहा है…","saveChanges":"परिवर्तन सहेजें","deleteAllTitle":"कार्य दल और सभी एजेंट भंग करें?","deleteTitle":"कार्य दल भंग करें?","deleteAllConfirm":"इससे यह कार्य दल स्थायी रूप से भंग हो जाएगा और उसके सभी सदस्य एजेंट हट जाएंगे। यह क्रिया पूर्ववत नहीं की जा सकती।","deleteConfirm":"इससे इस कार्य दल का कॉन्फ़िगरेशन स्थायी रूप से भंग हो जाएगा। सदस्य एजेंट प्रभावित नहीं होंगे।","title":"सेटिंग्स"},"nav":{"dashboard":"डैशबोर्ड","templates":"टेम्पलेट"},"advisor":{"avatarLabel":"{{name}} का अवतार"},"analytics":{"agentPerformance":"एजेंट प्रदर्शन","avgLength":"औसत लंबाई","avgLengthChars":"{{count}} वर्ण","chatWithAgent":"एजेंट से चैट करें","compareAgent":"इससे तुलना करें…","contributionBreakdown":"योगदान विवरण","contributions":"योगदान","editAgent":"एजेंट संपादित करें","errorRate":"त्रुटि दर","errors":"त्रुटियाँ","sessions":"सत्र"},"back":"वापस","boardList":"टास्क फोर्स सूची","boardsLabel":"टास्क फोर्स","bottomNav":"निचला नेविगेशन","card":{"advisorCount":"{{count}} विशेषज्ञ","delete":"हटाएं","duplicate":"डुप्लिकेट करें","duplicated":"टास्क फोर्स डुप्लिकेट हुआ","history":"इतिहास","live":"लाइव","moreActions":"और कार्रवाइयाँ","noMembers":"कोई विशेषज्ञ नहीं","openSettings":"सेटिंग्स खोलें","pin":"पिन करें","settings":"सेटिंग्स","unpin":"अनपिन करें","untitled":"शीर्षकहीन टास्क फोर्स"},"closeSidebar":"साइडबार बंद करें","comparison":{"avgResponse":"औसत उत्तर","close":"बंद करें","contributions":"योगदान","errorRate":"त्रुटि दर","evenlyMatched":"दोनों एजेंट समान रूप से मेल खाते हैं","leadsIn":"5 में से {{count}} मापदंडों में आगे","sessions":"सत्र","title":"एजेंट तुलना","totalContent":"कुल सामग्री"},"dashboard":{"assembleTaskForce":"टास्क फोर्स बनाएं","cancel":"रद्द करें","deleteConfirm":"क्या आप वाकई इस टास्क फोर्स को भंग करना चाहते हैं? यह कार्रवाई पूर्ववत नहीं की जा सकती।","deletedCount":"{{count}} टास्क फोर्स हटाए गए","deleteError":"टास्क फोर्स हटाने में विफल","deletePartialFail":"{{success}} हटाए गए, {{fail}} विफल","deleteSelected":"हटाएं","deleteSuccess":"टास्क फोर्स हटाया गया","deleteWorkforce":"टास्क फोर्स भंग करें","deselect":"चयन हटाएं","duplicateError":"टास्क फोर्स डुप्लिकेट करने में विफल","gridView":"ग्रिड दृश्य","listView":"सूची दृश्य","loadError":"आपका कार्यक्षेत्र लोड नहीं हो सका। कृपया पुनः प्रयास करें।","pinned":"पिन किया गया","retry":"पुनः प्रयास करें","select":"चुनें","selected":"{{count}} चयनित","selectItem":"चुनें","subtitle":"जटिल चुनौतियों को हल करने वाले सहयोगी एजेंट समूह।","taskForcesLabel":"सक्रिय टास्क फोर्स","title":"सक्रिय टास्क फोर्स","viewToggle":"दृश्य मोड"},"export":{"clipboard":"क्लिपबोर्ड पर कॉपी करें","copied":"क्लिपबोर्ड पर कॉपी किया गया","copyFailed":"क्लिपबोर्ड पर कॉपी करने में विफल","downloadedJson":"JSON के रूप में डाउनलोड किया गया","downloadedMd":"Markdown के रूप में डाउनलोड किया गया","json":"JSON के रूप में निर्यात करें","markdown":"Markdown के रूप में निर्यात करें","title":"चर्चा निर्यात करें"},"history":{"backToBoard":"टास्क फोर्स पर वापस जाएँ","backToList":"सूची पर वापस जाएँ","cancel":"रद्द करें","close":"बंद करें","confirmDelete":"हटाएं","conversationList":"वार्तालाप सूची","delete":"वार्तालाप हटाएं","deleteDescription":"क्या आप वाकई इस वार्तालाप को हटाना चाहते हैं? यह कार्रवाई पूर्ववत नहीं की जा सकती।","deleteTitle":"वार्तालाप हटाएं","emptyTranscript":"अभी कोई प्रतिलेख प्रविष्टि नहीं है","entryCount":"{{count}} प्रविष्टियाँ","error":"त्रुटि","export":"निर्यात करें","finalAnswer":"अंतिम संश्लेषित उत्तर","loadError":"वार्तालाप लोड करने में विफल","loadMore":"और लोड करें","noContent":"कोई सामग्री नहीं","noConversations":"अभी कोई वार्तालाप नहीं","noResults":"आपकी खोज से कोई वार्तालाप मेल नहीं खाता","notFound":"वार्तालाप नहीं मिला","phase":"चरण","searchPlaceholder":"वार्तालाप खोजें…","selectConversation":"देखने के लिए एक वार्तालाप चुनें","selectHint":"सूची में से एक वार्तालाप चुनें","skipped":"{{name}} — छोड़ा गया","synthesis":"संश्लेषण","title":"वार्तालाप इतिहास","transcript":"वार्तालाप प्रतिलेख","tryDifferent":"कोई अन्य खोज शब्द आज़माएँ","untitled":"शीर्षकहीन वार्तालाप","loadListError":"वार्तालाप लोड करने में विफल"},"insights":"अंतर्दृष्टि","memberCount":"{{count}} सदस्य","newBoard":"टास्क फोर्स बनाएं","onboarding":{"advisorSlots":"{{count}} सलाहकार स्थान","agentsReady":"{{count}} तैयार","assembleNow":"अपना पहला टास्क फोर्स बनाएं","customDesc":"अपनी टीम और नियम स्वयं परिभाषित करें","customFromScratch":"शुरू से बनाएं","deployAgent":"एजेंट परिनियोजित करें","deployFirst":"शुरू करने के लिए अपना पहला AI एजेंट परिनियोजित करें","deployFirst2":"पहला परिनियोजित करें →","deployFirstDesc":"एजेंट वे विशेषज्ञ हैं जो आपके टास्क फोर्स को सक्षम बनाते हैं। शुरू करने के लिए एक बनाएं।","getStarted":"शुरू करें","howItWorks":"यह कैसे काम करता है","pickTemplate":"शुरू करने के लिए एक टेम्पलेट चुनें","pickTemplateDesc":"प्रत्येक टेम्पलेट चर्चा शैली, भूमिकाएँ और नियम कॉन्फ़िगर करता है — आपको बस एजेंट सौंपने हैं।","step1Desc":"अद्वितीय कौशल, ज्ञान और व्यक्तित्व वाले AI विशेषज्ञ बनाएं।","step1Title":"एजेंट परिनियोजित करें","step2Desc":"एक टेम्पलेट चुनें, भूमिकाओं में एजेंट सौंपें और चर्चा शैली चुनें।","step2Title":"टास्क फोर्स बनाएं","step3Desc":"एक प्रश्न पूछें और देखें कि आपके एजेंट कैसे बहस करते, समीक्षा करते और उत्तर संश्लेषित करते हैं।","step3Title":"पूछें और देखें","subtitle":"विशेषज्ञ AI एजेंटों को सहयोगी टीमों में संगठित करें जो मिलकर जटिल चुनौतियों पर बहस, विश्लेषण और समाधान करती हैं।","welcome":"कार्यबल में आपका स्वागत है"},"openMenu":"मेन्यू खोलें","shortcuts":{"closePanel":"पैनल / संवाद बंद करें","fromDashboard":"डैशबोर्ड से","newBoard":"टास्क फोर्स बनाएं","showHelp":"कीबोर्ड शॉर्टकट दिखाएं","title":"कीबोर्ड शॉर्टकट"},"sidebar":{"boards":"बोर्ड नेविगेशन"},"sidebarDrawer":"साइडबार नेविगेशन","skipToContent":"सामग्री पर जाएं","tabHome":"होम","tabInsights":"अंतर्दृष्टि","tabThreads":"थ्रेड","templates":{"deleteConfirm":"यह टेम्पलेट हटाएं?","deleted":"टेम्पलेट हटाया गया"},"templatesEmpty":"बाद में जल्दी से फिर बनाने के लिए किसी टास्क फोर्स को टेम्पलेट के रूप में सहेजें।","themeDark":"डार्क","themeLight":"लाइट","themeSystem":"सिस्टम","toggleSidebar":"साइडबार टॉगल करें","toggleTheme":"थीम बदलें","untitled":"शीर्षकहीन","useTemplate":"उपयोग करें","wizard":{"addAdvisor":"सलाहकार जोड़ें","advisorCount":"{{count}} सलाहकार","advisorName":"सलाहकार का नाम","agentError":"{{name}} बनाने में विफल: {{error}}","apiKey":"API कुंजी","back":"वापस","boardDescPlaceholder":"इस सलाहकार बोर्ड के उद्देश्य का संक्षेप में वर्णन करें…","boardDescription":"विवरण (वैकल्पिक)","boardName":"कार्यबल का नाम","boardNamePlaceholder":"उदा. उत्पाद रणनीति बोर्ड","cancel":"रद्द करें","collapse":"संक्षिप्त करें","createNew":"नया सलाहकार बनाएं","createWorkforce":"कार्यबल बनाएं","creatingAgent":"बनाया जा रहा है…","creationFailed":"निर्माण विफल","creationFailedDesc":"कुछ गलत हो गया। आप पुनः प्रयास कर सकते हैं और यह वहीं से जारी रहेगा जहाँ रुका था।","customTemplate":"कस्टम","customTemplateDesc":"अपने स्वयं के कॉन्फ़िगरेशन के साथ शुरू से आरंभ करें","error":"विफल","existing":"मौजूदा","expand":"विस्तृत करें","groupError":"टास्क फोर्स बनाने में विफल: {{error}}","model":"मॉडल","modelPlaceholder":"उदा. claude-sonnet-5","new":"नया","next":"आगे","pending":"प्रतीक्षारत…","personality":"व्यक्तित्व और विशेषज्ञता","personalityPlaceholder":"इस सलाहकार की विशेषज्ञता, दृष्टिकोण और संवाद शैली का वर्णन करें…","provider":"LLM प्रदाता","ready":"तैयार","removeAdvisor":"सलाहकार हटाएं","role":"भूमिका","selectAgent":"एजेंट चुनें","selectProvider":"प्रदाता चुनें…","settingUp":"आपका कार्यबल सेट किया जा रहा है…","settingUpBoard":"टास्क फोर्स बनाया जा रहा है…","settingUpDesc":"सलाहकार बनाए जा रहे हैं और बोर्ड कॉन्फ़िगर किया जा रहा है। इसमें कुछ समय लग सकता है।","stepIndicatorLabel":"विज़ार्ड प्रगति","stepReview":"समीक्षा","stepTeam":"टीम","stepTemplate":"टेम्पलेट","success":"टास्क फोर्स सफलतापूर्वक बनाया गया!","team":"टीम","templates":"चर्चा टेम्पलेट","tryAgain":"पुनः प्रयास करें","unnamed":"अनाम","untitled":"शीर्षकहीन बोर्ड","useExisting":"मौजूदा एजेंट का उपयोग करें","yourAdvisors":"आपके सलाहकार"},"workforce":"कार्यबल"}'),ke=JSON.parse('{"title":"प्लेटफ़ॉर्म ऑपरेटर","subtitle":"इस EDDI परिनियोजन के बारे में पूछें — यह आपके लिए जानकारी खोज लाएगा।","readOnlyChip":"केवल पढ़ने योग्य","readWriteChip":"पढ़ना और लिखना","configError":"ऑपरेटर कॉन्फ़िगरेशन लोड नहीं हो सका","empty":{"title":"प्लेटफ़ॉर्म ऑपरेटर बंद है","description":"इसे चालू करें और एक ऐसे एजेंट से चैट करें जो आपके एजेंट, वर्कफ़्लो, बातचीत, परिनियोजन और लॉग का निरीक्षण कर सकता है — और हर बदलाव पर आपकी स्वीकृति के साथ उन्हें आपके लिए संचालित भी कर सकता है।","action":"प्लेटफ़ॉर्म ऑपरेटर सक्रिय करें"},"discovery":{"title":"अपने प्लेटफ़ॉर्म ऑपरेटर से मिलिए","description":"एक सहायक जो इस परिनियोजन का निरीक्षण और संचालन करता है। डिफ़ॉल्ट रूप से बंद; इसका हर बदलाव आपकी स्वीकृति की प्रतीक्षा करता है।","action":"सक्रिय करें"},"activation":{"title":"प्लेटफ़ॉर्म ऑपरेटर सक्रिय करें","subtitle":"ऑपरेटर को चलाने वाला मॉडल चुनें, उसके निर्देश देखें और परिनियोजित करें।","modelStep":"मॉडल","reviewStep":"प्रॉम्प्ट और समीक्षा","provider":"प्रदाता","model":"मॉडल","baseUrl":"बेस URL","apiKey":"मॉडल की API कुंजी","apiKeyHint":"आपके LLM प्रदाता की कुंजी। यह EDDI का क्रेडेंशियल नहीं है।","apiKeyPlaceholder":"अपनी API कुंजी चिपकाएँ, या वॉल्ट से कोई कुंजी चुनें","vaultDown":"सीक्रेट्स वॉल्ट उपलब्ध नहीं है, इसलिए अभी कुंजियाँ उसमें संग्रहीत नहीं की जा सकतीं। यहाँ दर्ज कुंजी बैकएंड को भेजी जाती है, जो संभव होने पर उसे वॉल्ट में रखता है।","environment":"परिवेश","authMode":"ऑपरेटर कैसे प्रमाणित होता है","authModeHint":"ऑपरेटर आपके EDDI एडमिन API को कॉल करता है। यह तय करता है कि उन कॉल के साथ कौन-से क्रेडेंशियल जाएँगे।","authNoneBlocked":"इस परिनियोजन में प्रमाणीकरण सक्षम है, इसलिए बिना प्रमाणीकरण वाले टूल कॉल अस्वीकार हो जाएँगे। ऑपरेटर सफलतापूर्वक परिनियोजित होगा और फिर हर खोज में विफल रहेगा। इसके बजाय \\"आपकी पहचान\\" चुनें।","scope":{"label":"क्षमता","default":"डिफ़ॉल्ट","hint":"ऑपरेटर को क्या करने की अनुमति है। हर लेखन (write) अब भी आपकी स्वीकृति की प्रतीक्षा करता है — नीचे सुरक्षा नियम देखें।","readOnly":{"label":"केवल पढ़ने योग्य","description":"यह इस डिप्लॉयमेंट का निरीक्षण और व्याख्या कर सकता है। कुछ भी बदल नहीं सकता।"},"readWrite":{"label":"पढ़ना और लिखना","description":"यह एजेंट और एजेंट समूह बनाने और संशोधित करने, डिप्लॉय करने, अनडिप्लॉय करने, किसी बेकाबू शेड्यूल को अक्षम करने, और किसी एजेंट के विवरण को संपादित करने की भी अनुमति देता है — हर एक पहले आपकी स्वीकृति की प्रतीक्षा करता है।"},"writeWarning":"सक्रियण पूरा होने से पहले संग्रहीत नीति के विरुद्ध अनुमोदन गेट की पुष्टि करता है। फिर एक वास्तविक, हानिरहित परीक्षण लेखन पृष्ठभूमि में चलता है — यदि यह कभी अनुमोदन के लिए रुके बिना निष्पादित हो जाए, तो ऑपरेटर तुरंत हटा दिया जाता है।"},"safetyPreamble":"सुरक्षा नियम (संपादन योग्य नहीं)","safetyPreambleHint":"हमेशा सबसे ऊपर जोड़े जाते हैं। ये ऑपरेटर से कहते हैं कि उसके टूल जो कुछ लौटाएँ उसे अविश्वसनीय डेटा मानें।","promptBody":"ऑपरेटर के निर्देश","promptBodyHint":"संपादित करें कि ऑपरेटर अपना परिचय कैसे देता है और कैसे काम करता है।","tools":"इसे दिए जाने वाले टूल ({{toolCount}})","activate":"सक्रिय करें और परिनियोजित करें","callerIdentityNote":"EDDI कॉल करते समय ही आपका टोकन डालता है। यह वार्तालाप में कभी संग्रहीत नहीं होता और केवल इसी परिनियोजन को वापस भेजा जाता है।","rebuildWarning":"सहेजने पर एक नया ऑपरेटर एजेंट बनता है और मौजूदा हटा दिया जाता है। आपका मौजूदा ऑपरेटर वार्तालाप आगे नहीं ले जाया जाएगा।","environmentHint":"जहाँ ऑपरेटर एजेंट स्वयं चलता है। यह फिर भी किसी भी परिवेश को पढ़ सकता है।"},"authMode":{"none":{"label":"कोई क्रेडेंशियल नहीं","description":"टूल कॉल में कोई Authorization हेडर नहीं जाता। यह केवल तभी काम करता है जब इस EDDI परिनियोजन में प्रमाणीकरण बंद हो।"},"caller-identity":{"label":"आपकी पहचान","description":"टूल कॉल साइन-इन किए हुए उपयोगकर्ता के रूप में चलते हैं, उसी की अनुमतियों और ऑडिट ट्रेल के साथ। प्रमाणीकरण सक्षम होने पर आवश्यक।"}},"stage":{"idle":"","validating":"जाँचा जा रहा है कि यह परिनियोजन ऑपरेटर के लिए आवश्यक एंडपॉइंट उपलब्ध कराता है…","provisioning":"ऑपरेटर एजेंट बनाया जा रहा है…","resolving-version":"एजेंट का संस्करण निर्धारित किया जा रहा है…","saving":"कॉन्फ़िगरेशन सहेजा जा रहा है…","verifying-gate":"अनुमोदन गेट सत्यापित किया जा रहा है…","done":"हो गया","longWait1":"ऑपरेटर एजेंट बनाया और तैनात किया जा रहा है — यह सबसे लंबा चरण है…","longWait2":"नए एजेंट पर टूल और अनुमोदन गेट सेट किए जा रहे हैं…","longWait3":"अभी भी जारी है — व्यस्त प्लेटफ़ॉर्म पर तैनाती में समय लग सकता है…"},"status":{"title":"ऑपरेटर","provider":"प्रदाता","environment":"परिवेश","authMode":"किस रूप में प्रमाणित","version":"संस्करण","checking":"जाँच हो रही है…","ready":"परिनियोजित","inProgress":"परिनियोजित हो रहा है…","error":"परिनियोजन त्रुटि","notFound":"परिनियोजित नहीं","errorHelp":"ऑपरेटर एजेंट परिनियोजित नहीं हो सका। पुनः प्रयास के लिए इसे फिर से कॉन्फ़िगर करें, या मूल त्रुटि के लिए प्लेटफ़ॉर्म लॉग देखें।","reconfigure":"पुनः कॉन्फ़िगर करें","deactivate":"निष्क्रिय करें","reset":"ऑपरेटर हटाएँ","deactivateConfirmTitle":"प्लेटफ़ॉर्म ऑपरेटर निष्क्रिय करें?","deactivateConfirmBody":"ऑपरेटर का परिनियोजन हटा दिया जाता है और वह उत्तर देना बंद कर देता है। इसका कॉन्फ़िगरेशन सुरक्षित रहता है, ताकि आप इसे बाद में फिर चालू कर सकें।","resetConfirmTitle":"प्लेटफ़ॉर्म ऑपरेटर हटाएँ?","resetConfirmBody":"ऑपरेटर एजेंट और उसके लिए बनाए गए सभी संसाधन, साथ ही सहेजा गया कॉन्फ़िगरेशन, स्थायी रूप से हटा दिए जाते हैं। इसे पूर्ववत नहीं किया जा सकता।","connectionCheck":"कनेक्शन जाँचें","gateChecking":"गेट सत्यापित हो रहा है…","gateUnknown":"गेट जाँचा नहीं गया","gateVerified":"गेट सत्यापित","gateNotVerified":"गेट सत्यापित नहीं","gateUnverifiedHelp":"इस एजेंट के दस्तावेज़ पर अनुमोदन गेट सत्यापित नहीं किया जा सका।"},"chat":{"empty":"अपने परिनियोजन के बारे में पूछें। ऑपरेटर जानकारी खोजता है और अपनी हर कॉल आपको दिखाता है।","restoring":"वह बातचीत खोली जा रही है…","placeholder":"एजेंट, वार्तालाप, परिनियोजन, लॉग के बारे में पूछें…","pausedPlaceholder":"ऑपरेटर आगे बढ़ने से पहले ऊपर दिए गए निर्णय की प्रतीक्षा कर रहा है…","readOnlyPlaceholder":"यह बातचीत समाप्त हो चुकी है — जारी रखने के लिए नई शुरू करें।","send":"भेजें","stop":"रोकें","newConversation":"नया वार्तालाप शुरू करें","transcript":"ऑपरेटर वार्तालाप","pauseCompactFallback":"आगे बढ़ने से पहले ऑपरेटर को आपकी अनुमति चाहिए।","pauseCompactReview":"अनुमोदन के लिए समीक्षा करें →","resolving":"स्वीकृत चरण चल रहा है — इसमें कुछ समय लग सकता है…"},"drawer":{"title":"प्लेटफ़ॉर्म ऑपरेटर","notActivated":"इसे चालू करें और कहीं से भी अपने परिनियोजन से बात करें।","titleAwaiting":"प्लेटफ़ॉर्म ऑपरेटर — एक निर्णय आपकी प्रतीक्षा कर रहा है","activate":"प्लेटफ़ॉर्म ऑपरेटर सेट करें"},"approval":{"reconstructedEndpoint":"{{method}} {{path}} (पुनर्निर्मित)","verified":"सत्यापित","verifiedTitle":"वास्तविक API कॉल कॉन्फ़िगरेशन से हल किया गया; निष्पादन से ठीक पहले फिर से जाँचा जाता है — यदि तब तक अनुरोध बदल जाता है, तो निष्पादन अस्वीकार कर दिया जाता है।","previewOnly":"पूर्वावलोकन","previewOnlyTitle":"यह कॉल निष्पादन से पहले अतिरिक्त सेटअप चरण चलाता है, इसलिए यह एक अनुमानित पूर्वावलोकन है — वास्तविक अनुरोध भिन्न हो सकता है और निष्पादन से पहले इसकी दोबारा जाँच नहीं होती।","query":"क्वेरी","headers":"हेडर","bodyTruncated":"प्रदर्शन के लिए बॉडी को छोटा करके दिखाया गया है — अनुमोदन अभी भी पूरे अनुरोध को कवर करता है।","diffHeading":"संग्रहीत संस्करण {{version}} की तुलना में बदलाव","diffLoading":"तुलना के लिए संग्रहीत संस्करण लोड हो रहा है…","diffFailed":"तुलना के लिए संग्रहीत संस्करण लोड नहीं हो सका — पूरा प्रस्तावित दस्तावेज़ नीचे है।","diffForbidden":"संग्रहीत संस्करण से तुलना के लिए संपादक पहुँच चाहिए — पूरा प्रस्तावित दस्तावेज़ नीचे है।","diffRedactionNote":"प्रस्तावित संस्करण में क्रेडेंशियल मान छिपाए गए हैं, इसलिए अपरिवर्तित होने पर भी वे यहाँ बदलाव के रूप में दिखते हैं।","showFullRequest":"पूरा प्रस्तावित दस्तावेज़ दिखाएँ","hideFullRequest":"पूरा प्रस्तावित दस्तावेज़ छिपाएँ","expandBody":"विस्तार करें","escalation":{"heading":"यह अनुरोध अतिरिक्त क्षमता प्रदान करता है","dynamicAgentCreation":"यह समूह चलते समय नए एजेंट बना सकता है। वे एजेंट स्वयं अनुमोदन-गेटेड नहीं होते।","dynamicAgentRecruitment":"यह समूह अन्य मौजूदा एजेंटों को अपनी चर्चाओं में शामिल कर सकता है।","autoApproveOnTimeout":"समय समाप्त होने पर इस संसाधन के अनुमोदन स्वतः दे दिए जाते हैं, बिना किसी की निगरानी के।","agentCreatedWithoutGate":"यह एजेंट बिना अनुमोदन-गेट के बनाया जा रहा है। इसके बाद की हर लेखन क्रिया बिना निगरानी के निष्पादित होगी।","agentCreatedWithBroadEndpoints":"यह एजेंट अपने API पर लेखन पहुँच के साथ बनाया जा रहा है — केवल पठन तक सीमित नहीं।","agentCreatedWithExternalTools":"यह एजेंट किसी बाहरी MCP सर्वर द्वारा दिए जाने वाले हर टूल के साथ बनाया जा रहा है। वे टूल कौन-से हैं, यह वही सर्वर तय करता है और बाद में उन्हें बदल भी सकता है।","unchecked":"बॉडी इतनी लंबी थी कि क्षमता-वृद्धि सेटिंग्स के लिए इसकी जाँच नहीं हो सकी — अनुमोदन से पहले इसे पूरा पढ़ें।","inlineCredential":"इस अनुरोध में ${vault:…} संदर्भ के बजाय सीधे लिखा हुआ क्रेडेंशियल जैसा कुछ शामिल है। सीधे लिखा गया सीक्रेट सादे टेक्स्ट में संग्रहीत होता है और वॉल्ट से रोटेट नहीं किया जा सकता — अस्वीकार करें और वॉल्ट संदर्भ मांगें।"},"blockedSelfTarget":"कोई एजेंट अपनी ही परिभाषा नहीं बदल सकता, और यह अनुरोध ऑपरेटर के अपने एजेंट ({{agentId}}) को लक्षित करता है। जब तक यह मौजूद है, पूरे बैच को अनुमोदित नहीं किया जा सकता — इसे अस्वीकार करें और यह बदलाव उस एजेंट के अपने पेज से करें।","blockedSelfConversation":"कोई एजेंट उसी बातचीत में संदेश नहीं भेज सकता जिसमें वह चल रहा है, और यह अनुरोध इसी को लक्षित करता है ({{agentId}})। इससे उसका अपना पाठ ऐसे दर्ज होगा मानो किसी व्यक्ति ने कहा हो। जब तक यह मौजूद है, पूरे बैच को स्वीकृत नहीं किया जा सकता — इसे अस्वीकार करें।","blockedGateCarrying":"यह अनुरोध एक ऐसा LLM कॉन्फ़िगरेशन लिखता है जो अपना स्वयं का अनुमोदन गेट (toolApprovals) सेट करता है, जो इसकी समीक्षा कर रहे गेट को ही बदल देगा। जब तक यह मौजूद है, पूरे बैच को स्वीकृत नहीं किया जा सकता — अस्वीकार करें और गेट को उस एजेंट के अपने पेज से बदलें।","blockedGateUnverifiable":"यह अनुरोध एक ऐसा LLM कॉन्फ़िगरेशन लिखता है जिसका मुख्य भाग पूरा नहीं पढ़ा जा सकता — या तो दिखाने के लिए बहुत बड़ा है या मान्य JSON नहीं है — इसलिए यह पुष्टि नहीं की जा सकती कि इसमें अनुमोदन-गेट ओवरराइड नहीं है। जब तक यह मौजूद है, पूरे बैच को स्वीकृत नहीं किया जा सकता — अस्वीकार करें और यह बदलाव उस एजेंट के अपने पेज से करें।","blockedGateUnpinned":"यह अनुरोध एक LLM कॉन्फ़िगरेशन लिखता है लेकिन पिन नहीं किया गया है, इसलिए जो वास्तव में चलता है वह यहाँ दिखाए गए से भिन्न हो सकता है और यह पुष्टि नहीं की जा सकती कि इसमें अनुमोदन-गेट ओवरराइड नहीं है। जब तक यह मौजूद है, पूरे बैच को स्वीकृत नहीं किया जा सकता — अस्वीकार करें और यह बदलाव उस एजेंट के अपने पेज से करें।","blockedSelfStart":"ऑपरेटर स्वयं का परीक्षण नहीं कर सकता — अपने ही एजेंट ({{agentId}}) से वार्तालाप शुरू करने पर उसका आउटपुट इनपुट बन जाएगा। जब तक यह कॉल मौजूद है, पूरे बैच के लिए स्वीकृति अनुपलब्ध है — अस्वीकार करें और किसी अन्य एजेंट का परीक्षण करें।"},"starters":{"whatsDeployed":"अभी क्या-क्या परिनियोजित है?","recentConversations":"मुझे सबसे हाल के वार्तालाप दिखाएँ","healthCheck":"क्या इस प्लेटफ़ॉर्म पर कुछ गड़बड़ है?","diagnoseAgent":"मेरा एक एजेंट परिनियोजित क्यों नहीं हो पा रहा?"},"toast":{"activated":"प्लेटफ़ॉर्म ऑपरेटर सक्रिय किया गया","deactivated":"प्लेटफ़ॉर्म ऑपरेटर निष्क्रिय किया गया","reset":"प्लेटफ़ॉर्म ऑपरेटर हटा दिया गया","activatedButUnreachable":"ऑपरेटर परिनियोजित हुआ, पर आपका प्लेटफ़ॉर्म नहीं पढ़ सका","activatedGateVerified":"प्लेटफ़ॉर्म ऑपरेटर सक्रिय — अनुमोदन गेट सत्यापित। कनेक्शन जाँचें पृष्ठभूमि में चल रही हैं।","activatedChecking":"प्लेटफ़ॉर्म ऑपरेटर सक्रिय। कनेक्शन जाँचें पृष्ठभूमि में चल रही हैं।","writeProbeVerified":"लेखन पहुँच सत्यापित — एक वास्तविक संरक्षित लेखन अनुमोदन के लिए रुका।","writeProbeFailed":"अनुमोदन गेट टिक नहीं पाया — ऑपरेटर हटा दिया गया।","writeProbeInconclusive":"लाइव लेखन परीक्षण अनिर्णायक रहा।"},"canary":{"genericFailure":"कनेक्शन जाँच सफल नहीं रही।","passed":"ऑपरेटर आपके प्लेटफ़ॉर्म तक पहुँच सकता है।","recheck":"फिर से जाँचें","title":"ऑपरेटर परिनियोजित हो गया, लेकिन आपका प्लेटफ़ॉर्म नहीं पढ़ सका।"},"paused":{"title":"प्लेटफ़ॉर्म ऑपरेटर रुका हुआ है","description":"यह अब भी कॉन्फ़िगर है — फिर से चालू करने पर वही एजेंट दोबारा परिनियोजित होता है। कुछ भी हटाया नहीं गया।","action":"फिर से चालू करें"},"managedAgentBadge":"ऑपरेटर","managedAgentHint":"प्लेटफ़ॉर्म ऑपरेटर स्क्रीन द्वारा बनाया और प्रबंधित। यहाँ इसे संपादित या हटाने पर वह स्क्रीन टूट जाएगी।","decisionLog":{"approved":"आपने यह अनुरोध स्वीकृत किया","rejected":"आपने यह अनुरोध अस्वीकार किया","rePaused":"फिर से रुका — एक और निर्णय आवश्यक है","noReply":"यह चरण बिना उत्तर के समाप्त हुआ","executed":"{{calls}} चलाया गया","partial_one":"स्वीकृत — {{count}} कॉल अस्वीकार","partial_other":"स्वीकृत — {{count}} कॉल अस्वीकार"},"tabs":{"label":"ऑपरेटर दृश्य","chat":"चैट","history":"इतिहास"},"history":{"emptyTitle":"कोई पिछली बातचीत नहीं","emptyDescription":"ऑपरेटर के साथ आपकी बातचीत यहाँ दिखती है, ताकि आप उसे बाद में जारी रख सकें।","noOpeningMessage":"(अभी कोई संदेश नहीं)","stepCount_one":"{{count}} चरण","stepCount_other":"{{count}} चरण"}}'),be={addCadence:"कैडेंस जोड़ें",addTask:"कार्य जोड़ें",backToGroup:"समूह पर वापस जाएँ",backlogEmpty:"अभी तक कोई बैकलॉग कार्य नहीं है।",backlogTitle:"बैकलॉग ({{count}})",cadenceAdded:"कैडेंस जोड़ा गया",cadenceDeleted:"कैडेंस हटाया गया",cadenceRunning:"वर्तमान में एक कैडेंस-रन चर्चा प्रगति पर है।",cadencesEmpty:"अभी तक कोई आवर्ती कैडेंस कॉन्फ़िगर नहीं किया गया है।",cadencesTitle:"कैडेंस ({{count}})",confirmDeleteCadenceDesc:"इससे इसके निर्धारित रन रुक जाते हैं। पहले से चल चुकी चर्चाएँ प्रभावित नहीं होतीं।",confirmDeleteCadenceTitle:"क्या इस कैडेंस को हटाना है?",createdBy:"{{who}} द्वारा",cronLabel:"Cron अभिव्यक्ति",cronPlaceholder:"जैसे 0 9 * * MON",discussions:"चर्चाएँ",failed:"विफल",inputTemplatePlaceholder:"प्रत्येक रन के लिए प्रॉम्प्ट टेम्पलेट (वैकल्पिक — अन्यथा एक सामान्य बैकलॉग सूची उपयोग की जाती है)",lastRun:"अंतिम रन",maxCostLabel:"अधिकतम लागत / रन ($, वैकल्पिक)",maxCostPlaceholder:"समूह डिफ़ॉल्ट",maxPerRunLabel:"अधिकतम कार्य / रन",member:"सदस्य",navLabel:"वर्कस्पेस",never:"कभी नहीं",perMemberStats:"प्रति-सदस्य विश्वसनीयता",priority:"प्राथमिकता",subtitle:"एक स्थायी बैकलॉग और आवर्ती कैडेंस जिन्हें यह समूह शेड्यूल पर बिना निगरानी के चलाता है।",taskAdded:"कार्य बैकलॉग में जोड़ा गया",taskDescriptionPlaceholder:"विवरण (वैकल्पिक)",taskSubjectPlaceholder:"कार्य विषय",tasksVerified:"सत्यापित कार्य",timeZoneLabel:"समय क्षेत्र",title:"स्थायी टीम वर्कस्पेस",totalCost:"कुल लागत",verified:"सत्यापित",maxCostInvalid:"प्रति रन अधिकतम लागत 0 या उससे अधिक संख्या होनी चाहिए।",cadenceSummary_one:"प्रति रन अधिकतम {{max}} कार्य",cadenceSummary_other:"प्रति रन अधिकतम {{max}} कार्य",inputTemplateTooLong:"प्रॉम्प्ट टेम्पलेट {{max}} वर्णों तक सीमित है।"},Ce={title:"नई टीम"},Ee={title:"EDDI अपडेट",description:"देखें कि EDDI का कोई नया रिलीज़ उपलब्ध है या नहीं। जब तक आप न कहें, कुछ भी नहीं भेजा जाता।",installed:"इंस्टॉल किया गया",githubRelease:"GitHub रिलीज़",dockerImage:"Docker इमेज",unknownVersion:"अज्ञात",checkNow:"अभी जाँचें",checking:"जाँच हो रही है…",autoCheck:"हर बार पेज लोड होने पर स्वतः जाँचें",autoCheckHint:"ब्राउज़र के हर रीलोड पर एक जाँच चलाता है और नया रिलीज़ मिलने पर बैनर दिखाता है।",privacyNote:"जाँच आपके ब्राउज़र से केवल api.github.com से संपर्क करती है। किसी अन्य होस्ट से नहीं, और तैनाती का कोई डेटा नहीं भेजा जाता।",neverChecked:"अभी तक कोई जाँच नहीं की गई।",upToDate:"आप नवीनतम रिलीज़ ({{version}}) चला रहे हैं।",updateAvailable:"EDDI {{version}} उपलब्ध है",updateAvailableDetail:"आप {{installed}} चला रहे हैं।",ahead:"आप {{installed}} चला रहे हैं, जो नवीनतम रिलीज़ ({{version}}) से भी नया है।",unknownInstalled:"नवीनतम रिलीज़ {{version}} है। इंस्टॉल की गई वर्शन का पता नहीं चल सका, इसलिए तुलना संभव नहीं है।",errorRateLimited:"GitHub की बिना-प्रमाणीकरण अनुरोध सीमा पूरी हो गई। बाद में पुनः प्रयास करें, या रिलीज़ पेज खोलें।",errorBlockedByCsp:"इस परिनियोजन की Content-Security-Policy ब्राउज़र को api.github.com तक पहुँचने से रोकती है, इसलिए जाँच नहीं चल सकती। इसकी अनुमति देने के लिए connect-src निर्देश में api.github.com जोड़ें, या नीचे दिए गए रिलीज़ लिंक का उपयोग करें।",errorUnreachable:"api.github.com तक नहीं पहुँचा जा सका। अपना नेटवर्क या आउटबाउंड प्रॉक्सी जाँचें।",errorFailed:"अपडेट जाँच विफल रही। मैन्युअल रूप से देखने के लिए रिलीज़ पेज खोलें।",publishedOn:"{{date}} को प्रकाशित",whatsNew:"{{version}} में नया क्या है",fullNotes:"GitHub पर पूरे रिलीज़ नोट्स",noNotes:"इस रिलीज़ के लिए कोई नोट्स नहीं हैं।",releaseNotes:"रिलीज़ नोट्स",allReleases:"सभी रिलीज़",howToUpdate:"अपडेट कैसे करें",howToUpdateCli:"eddi CLI (इंस्टॉलर द्वारा बनाई गई) के साथ:",howToUpdateManual:"CLI न हो तो अपनी इंस्टॉल डायरेक्ट्री (डिफ़ॉल्ट ~/.eddi) से:",howToUpdateNote:"-f फ़्लैग अपने सेटअप के अनुसार बदलें — Keycloak उपयोग करते हों तो -f docker-compose.auth.yml जोड़ें।"},we={acrossGroups:"{{count}} टास्क फोर्स में",actions:"कार्रवाइयाँ",activeExperts:"सक्रिय विशेषज्ञ",activity:"गतिविधि",agentLeaderboard:"एजेंट लीडरबोर्ड",agentName:"एजेंट",allOutcomes:"सभी परिणाम",allStyles:"सभी शैलियाँ",avgDuration:"औसत अवधि",cancelCompare:"रद्द करें",clearAll:"सभी साफ़ करें",clearFilters:"फ़िल्टर साफ़ करें",completionRate:"पूर्णता दर",contributions:"योगदान",covered:"कवर किया गया",createFirst:"टास्क फोर्स बनाएं",daysAgo:"{{count}} दिन पहले",emptyDescription:"यहाँ विश्लेषण देखने के लिए टास्क फोर्स चर्चा शुरू करें।",emptyHaveGroups:"आपके पास {{count}} टास्क फोर्स हैं लेकिन अभी कोई चर्चा नहीं। अंतर्दृष्टि देखने के लिए चर्चा शुरू करें।",emptyTitle:"अभी कोई अंतर्दृष्टि नहीं",errorDescription:"कुछ डेटा प्राप्त नहीं किया जा सका। कृपया पुनः प्रयास करें।",errors:"त्रुटियाँ",errorTitle:"अंतर्दृष्टि लोड नहीं हो सकी",filteredOf:"कुल {{total}} में से {{filtered}}",highConfidence:"उच्च विश्वास",hoursAgo:"{{count}} घंटे पहले",justNow:"अभी-अभी",last30Days:"पिछले 30 दिन",minutesAgo:"{{count}} मिनट पहले",noAgents:"अभी कोई एजेंट गतिविधि नहीं।",noDiscussions:"अभी कोई चर्चा नहीं।",noMatchingDiscussions:"सक्रिय फ़िल्टर से कोई चर्चा मेल नहीं खाती।",noPhases:"कोई चरण डेटा उपलब्ध नहीं है।",noResults:"कोई मेल खाती चर्चा नहीं",noResultsHint:"सभी डेटा देखने के लिए फ़िल्टर समायोजित करें या साफ़ करें।",noSkills:"कोई क्षमता पंजीकृत नहीं है। कवरेज ट्रैक करने के लिए अपने एजेंट पर कौशल परिभाषित करें।",noStyles:"कोई शैली डेटा उपलब्ध नहीं है।",outcomeChart:"परिणाम वितरण: कुल {{total}}",outcomes:"परिणाम",participatedRecently:"ने चर्चाओं में भाग लिया",perDiscussion:"प्रति चर्चा",phaseChart:"चरण वितरण",phaseDistribution:"चरण वितरण",pickSecondAgent:"{{name}} से तुलना करने के लिए किसी एजेंट पर क्लिक करें",recentDiscussions:"हाल की चर्चाएँ",removeFilter:"फ़िल्टर हटाएं: {{label}}",retry:"पुनः प्रयास करें",sessions:"सत्र",sessionsCompleted:"सत्र सफलतापूर्वक पूर्ण हुए",showingResults:"कुल {{total}} में से {{count}}",skillCoverage:"कौशल कवरेज",styleBreakdown:"चर्चा शैलियाँ",subtitle:"पिछले 30 दिन",title:"अंतर्दृष्टि",total:"कुल",totalDiscussions:"चर्चाएँ",totalSkills:"कौशल",uncoveredSkills:"{{count}} बिना कवर किए कौशल"},Ie={activeRate:"सक्रियता दर",activeRateDesc:"पिछले 30 दिनों में सक्रिय एजेंट",dormantAgents:"निष्क्रिय",dormantAgentsDesc:"30+ दिनों से उपयोग न किए गए एजेंट",msgAtRisk:"आपका अधिकांश कार्यबल निष्क्रिय है — उन्हें सक्रिय करने पर विचार करें",msgHealthy:"पिछले 30 दिनों में आपके डिजिटल कार्यबल का {{rate}}% सक्रिय रहा",msgModerate:"कुछ डिजिटल विशेषज्ञों से हाल ही में परामर्श नहीं लिया गया",statusAtRisk:"जोखिम में",statusHealthy:"स्वस्थ",statusModerate:"मध्यम",taskForces:"टास्क फोर्स",taskForcesDesc:"सहयोगी एजेंट समूह",title:"ज्ञान स्वास्थ्य",workforceSize:"कार्यबल का आकार",workforceSizeDesc:"कुल परिनियोजित डिजिटल विशेषज्ञ"},Le={hint:"हम आपकी पसंद याद रखेंगे और अगली बार आपको स्वतः वहाँ ले जाएंगे।",manager:{description:"अपने AI एजेंट बनाएं, कॉन्फ़िगर करें और परिनियोजित करें। वर्कफ़्लो, संसाधन और एकीकरण प्रबंधित करें।",feature1:"एजेंट बनाएं और परिनियोजित करें",feature2:"वर्कफ़्लो और पाइपलाइन कॉन्फ़िगर करें",feature3:"संसाधन और एक्सटेंशन प्रबंधित करें",title:"Manager"},subtitle:"शुरू करने के लिए अपना कार्यक्षेत्र चुनें।",title:"EDDI में आपका स्वागत है",workforce:{description:"ऐसी AI टीमें बनाएं जो मिलकर जटिल चुनौतियों पर बहस, विश्लेषण और समाधान करती हैं।",feature1:"एजेंट टास्क फोर्स बनाएं",feature2:"सहयोगी चर्चाएँ चलाएं",feature3:"संश्लेषित उत्तर प्राप्त करें",title:"कार्यबल"}},Me={assembleTaskForce:"टास्क फोर्स बनाएं",assembleTaskForceDesc:"जटिल चुनौतियों को हल करने के लिए विशेषज्ञों को एकत्र करें",chatWithAgent:"एजेंट से चैट करें",chatWithAgentDesc:"किसी भी डिजिटल विशेषज्ञ के साथ आमने-सामने बातचीत करें",manageWorkforce:"कार्यबल प्रबंधित करें",manageWorkforceDesc:"डिजिटल विशेषज्ञों को कॉन्फ़िगर और परिनियोजित करें",title:"त्वरित कार्रवाइयाँ",viewInsights:"अंतर्दृष्टि देखें",viewInsightsDesc:"अपने कार्यबल की ज्ञान कवरेज ट्रैक करें"},Re={addAgent:"एजेंट परिनियोजित करें",count:"{{count}} विशेषज्ञ",ready:"तैयार",title:"आपका डिजिटल कार्यबल",unnamed:"अनाम एजेंट"},He={production:"प्रोडक्शन",test:"टेस्ट"},Ne={attachments:e,app:t,auth:o,nav:n,theme:a,language:r,pages:i,common:s,agents:l,agentDetail:c,wizard:d,setupWizard:p,packages:u,packageDetail:m,packageEditor:g,conversations:h,conversationDetail:y,chat:v,resources:D,editor:A,rulesEditor:T,apiCallsEditor:f,mcpcallsEditor:P,llmEditor:S,outputEditor:k,propertySetterEditor:b,dictionaryEditor:C,parserEditor:E,coordinator:w,contentEditor:I,logs:L,secrets:M,audit:R,schedules:H,cascadeTrace:N,debugDrawer:O,costDashboard:x,memoryInspector:_,logViewer:U,promptViewer:F,promptPreview:W,studio:B,ragEditor:V,onboarding:G,platform:K,stream:q,createOrWizard:j,groups:z,taskBoard:J,memories:Q,properties:Y,triggers:$,capabilities:Z,exportDialog:X,importDialog:ee,syncPage:te,sync:oe,userConversations:ne,commandPalette:ae,groupWizard:re,groupTemplates:ie,channels:se,channelDetail:le,hitl:ce,chatDrawer:de,dashboard:pe,errorBoundary:ue,gdpr:me,mockBanner:ge,orphans:he,quotas:ye,secretPicker:ve,snippetEditor:De,status:Ae,userData:Te,variables:fe,workflowEditor:Pe,Workforce:Se,operator:ke,groupWorkspace:be,workforceWizard:Ce,updates:Ee,analyticsPage:we,knowledgeHealth:Ie,landing:Le,quickActions:Me,workforce:Re,environments:He};export{Se as Workforce,c as agentDetail,l as agents,we as analyticsPage,f as apiCallsEditor,t as app,e as attachments,R as audit,o as auth,Z as capabilities,N as cascadeTrace,le as channelDetail,se as channels,v as chat,de as chatDrawer,ae as commandPalette,s as common,I as contentEditor,y as conversationDetail,h as conversations,w as coordinator,x as costDashboard,j as createOrWizard,pe as dashboard,O as debugDrawer,Ne as default,C as dictionaryEditor,A as editor,He as environments,ue as errorBoundary,X as exportDialog,me as gdpr,ie as groupTemplates,re as groupWizard,be as groupWorkspace,z as groups,ce as hitl,ee as importDialog,Ie as knowledgeHealth,Le as landing,r as language,S as llmEditor,U as logViewer,L as logs,P as mcpcallsEditor,Q as memories,_ as memoryInspector,ge as mockBanner,n as nav,G as onboarding,ke as operator,he as orphans,k as outputEditor,m as packageDetail,g as packageEditor,u as packages,i as pages,E as parserEditor,K as platform,W as promptPreview,F as promptViewer,Y as properties,b as propertySetterEditor,Me as quickActions,ye as quotas,V as ragEditor,D as resources,T as rulesEditor,H as schedules,ve as secretPicker,M as secrets,p as setupWizard,De as snippetEditor,Ae as status,q as stream,B as studio,oe as sync,te as syncPage,J as taskBoard,a as theme,$ as triggers,Ee as updates,ne as userConversations,Te as userData,fe as variables,d as wizard,Pe as workflowEditor,Re as workforce,Ce as workforceWizard}; diff --git a/src/main/resources/META-INF/resources/assets/history-BHMI8MMQ.js b/src/main/resources/META-INF/resources/assets/history-d_YShP6D.js similarity index 89% rename from src/main/resources/META-INF/resources/assets/history-BHMI8MMQ.js rename to src/main/resources/META-INF/resources/assets/history-d_YShP6D.js index 90287a3673..6b95318008 100644 --- a/src/main/resources/META-INF/resources/assets/history-BHMI8MMQ.js +++ b/src/main/resources/META-INF/resources/assets/history-d_YShP6D.js @@ -1,4 +1,4 @@ -import{x as o}from"./index-BY6d8wze.js";/** +import{x as o}from"./index-BnLj1hck.js";/** * @license lucide-react v0.577.0 - ISC * * This source code is licensed under the ISC license. diff --git a/src/main/resources/META-INF/resources/assets/html-BFxY6n68.js b/src/main/resources/META-INF/resources/assets/html-BFxY6n68.js deleted file mode 100644 index ae47b9fdae..0000000000 --- a/src/main/resources/META-INF/resources/assets/html-BFxY6n68.js +++ /dev/null @@ -1 +0,0 @@ -import{l as t}from"./editor-registry-CIV_g9hj.js";import"./index-BY6d8wze.js";import"./resources-R5ikMSzo.js";import"./parser-editor-DJVsdXlv.js";import"./type-SbeC_oGu.js";import"./git-compare-arrows-pI8Ehpf-.js";import"./undo-2-CF9h_dkU.js";import"./save-lzTRlOlB.js";import"./eye-Dbrf-yrM.js";import"./secret-key-picker-TXey-VQE.js";import"./use-secrets-C_oj4VYh.js";import"./eye-off-DQKzJHI5.js";import"./tool-approvals-editor-BKW-ZLXY.js";import"./timer-BX3xgSur.js";import"./arrow-right-left-Or_4oRf0.js";import"./file-output-BA4KZHPi.js";import"./shield-Ce05kery.js";import"./info-vszmN4vn.js";import"./types-BY9zm5d-.js";import"./scale-DJXpJ1ID.js";import"./gauge-D0qrGV1d.js";import"./dollar-sign-Dt9VyGPU.js";import"./handshake-d__LQWU9.js";import"./cpu-BsIZspVa.js";import"./server-CeKDVLCh.js";import"./upload-DxPMOlxt.js";import"./lock-CPVVTGkJ.js";import"./tag-DrXWC0RK.js";const e=["area","base","br","col","embed","hr","img","input","keygen","link","menuitem","meta","param","source","track","wbr"],P={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\$\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s]+)/g,comments:{blockComment:[""]},brackets:[[""],["<",">"],["{","}"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:'"',close:'"'},{open:"'",close:"'"},{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"}],onEnterRules:[{beforeText:new RegExp(`<(?!(?:${e.join("|")}))([_:\\w][_:\\w-.\\d]*)([^/>]*(?!/)>)[^<]*$`,"i"),afterText:/^<\/([_:\w][_:\w-.\d]*)\s*>$/i,action:{indentAction:t.IndentAction.IndentOutdent}},{beforeText:new RegExp(`<(?!(?:${e.join("|")}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`,"i"),action:{indentAction:t.IndentAction.Indent}}],folding:{markers:{start:new RegExp("^\\s*"),end:new RegExp("^\\s*")}}},R={defaultToken:"",tokenPostfix:".html",ignoreCase:!0,tokenizer:{root:[[/)/,["delimiter","tag","","delimiter"]],[/(<)(script)/,["delimiter",{token:"tag",next:"@script"}]],[/(<)(style)/,["delimiter",{token:"tag",next:"@style"}]],[/(<)((?:[\w\-]+:)?[\w\-]+)/,["delimiter",{token:"tag",next:"@otherTag"}]],[/(<\/)((?:[\w\-]+:)?[\w\-]+)/,["delimiter",{token:"tag",next:"@otherTag"}]],[/]+/,"metatag.content"],[/>/,"metatag","@pop"]],comment:[[/-->/,"comment","@pop"],[/[^-]+/,"comment.content"],[/./,"comment.content"]],otherTag:[[/\/?>/,"delimiter","@pop"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/]],script:[[/type/,"attribute.name","@scriptAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/(<\/)(script\s*)(>)/,["delimiter","tag",{token:"delimiter",next:"@pop"}]]],scriptAfterType:[[/=/,"delimiter","@scriptAfterTypeEquals"],[/>/,{token:"delimiter",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptAfterTypeEquals:[[/"module"/,{token:"attribute.value",switchTo:"@scriptWithCustomType.text/javascript"}],[/'module'/,{token:"attribute.value",switchTo:"@scriptWithCustomType.text/javascript"}],[/"([^"]*)"/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/>/,{token:"delimiter",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptWithCustomType:[[/>/,{token:"delimiter",next:"@scriptEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptEmbedded:[[/<\/script/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}],[/[^<]+/,""]],style:[[/type/,"attribute.name","@styleAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/(<\/)(style\s*)(>)/,["delimiter","tag",{token:"delimiter",next:"@pop"}]]],styleAfterType:[[/=/,"delimiter","@styleAfterTypeEquals"],[/>/,{token:"delimiter",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleAfterTypeEquals:[[/"([^"]*)"/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/>/,{token:"delimiter",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleWithCustomType:[[/>/,{token:"delimiter",next:"@styleEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleEmbedded:[[/<\/style/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}],[/[^<]+/,""]]}};export{P as conf,R as language}; diff --git a/src/main/resources/META-INF/resources/assets/html-C4Yj3tdw.js b/src/main/resources/META-INF/resources/assets/html-C4Yj3tdw.js new file mode 100644 index 0000000000..69f5f8b777 --- /dev/null +++ b/src/main/resources/META-INF/resources/assets/html-C4Yj3tdw.js @@ -0,0 +1 @@ +import{l as t}from"./editor-registry-jvsNWt75.js";import"./index-BnLj1hck.js";import"./resources-D97MNqv3.js";import"./parser-editor-CPhjadeF.js";import"./useQueries-DZrQsbjS.js";import"./accessible-dialog-C2wu1H5q.js";import"./input-BV8V9kav.js";import"./empty-state-DxZE48rx.js";import"./error-state-D4qtZYFq.js";import"./use-debounce-DMHuVYwD.js";import"./use-resources-xPGGDyiq.js";import"./cascade-save-BHTTkwOb.js";import"./workflows-DTtF3KEG.js";import"./type-ChzGm4vJ.js";import"./git-compare-arrows-HXbtfCTs.js";import"./undo-2-Dh2nRAeV.js";import"./save-s-dFqxLL.js";import"./eye-xZR8Jj8Y.js";import"./secret-key-picker-BCXXdOJ-.js";import"./use-secrets--RofX_r2.js";import"./eye-off-PKiH0Asw.js";import"./tool-approvals-editor-S2UA66Hb.js";import"./timer-CShnmlWE.js";import"./arrow-right-left-J0fZSu2z.js";import"./file-output-DlS0SPnt.js";import"./shield-Dy-B1VeF.js";import"./info-cNcTVsFc.js";import"./types-tS6i07ms.js";import"./scale-BnMnNt4Y.js";import"./gauge-ML2DGGDJ.js";import"./dollar-sign-HonLwnZc.js";import"./handshake-foe5KMFV.js";import"./cpu-zEsE2ia0.js";import"./server-BMZQ8ps7.js";import"./upload-D1UCHnd4.js";import"./lock-CL2SzOGd.js";import"./tag-Cd1R14bi.js";const e=["area","base","br","col","embed","hr","img","input","keygen","link","menuitem","meta","param","source","track","wbr"],z={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\$\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s]+)/g,comments:{blockComment:[""]},brackets:[[""],["<",">"],["{","}"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:'"',close:'"'},{open:"'",close:"'"},{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"}],onEnterRules:[{beforeText:new RegExp(`<(?!(?:${e.join("|")}))([_:\\w][_:\\w-.\\d]*)([^/>]*(?!/)>)[^<]*$`,"i"),afterText:/^<\/([_:\w][_:\w-.\d]*)\s*>$/i,action:{indentAction:t.IndentAction.IndentOutdent}},{beforeText:new RegExp(`<(?!(?:${e.join("|")}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`,"i"),action:{indentAction:t.IndentAction.Indent}}],folding:{markers:{start:new RegExp("^\\s*"),end:new RegExp("^\\s*")}}},D={defaultToken:"",tokenPostfix:".html",ignoreCase:!0,tokenizer:{root:[[/)/,["delimiter","tag","","delimiter"]],[/(<)(script)/,["delimiter",{token:"tag",next:"@script"}]],[/(<)(style)/,["delimiter",{token:"tag",next:"@style"}]],[/(<)((?:[\w\-]+:)?[\w\-]+)/,["delimiter",{token:"tag",next:"@otherTag"}]],[/(<\/)((?:[\w\-]+:)?[\w\-]+)/,["delimiter",{token:"tag",next:"@otherTag"}]],[/]+/,"metatag.content"],[/>/,"metatag","@pop"]],comment:[[/-->/,"comment","@pop"],[/[^-]+/,"comment.content"],[/./,"comment.content"]],otherTag:[[/\/?>/,"delimiter","@pop"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/]],script:[[/type/,"attribute.name","@scriptAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/(<\/)(script\s*)(>)/,["delimiter","tag",{token:"delimiter",next:"@pop"}]]],scriptAfterType:[[/=/,"delimiter","@scriptAfterTypeEquals"],[/>/,{token:"delimiter",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptAfterTypeEquals:[[/"module"/,{token:"attribute.value",switchTo:"@scriptWithCustomType.text/javascript"}],[/'module'/,{token:"attribute.value",switchTo:"@scriptWithCustomType.text/javascript"}],[/"([^"]*)"/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/>/,{token:"delimiter",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptWithCustomType:[[/>/,{token:"delimiter",next:"@scriptEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptEmbedded:[[/<\/script/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}],[/[^<]+/,""]],style:[[/type/,"attribute.name","@styleAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/(<\/)(style\s*)(>)/,["delimiter","tag",{token:"delimiter",next:"@pop"}]]],styleAfterType:[[/=/,"delimiter","@styleAfterTypeEquals"],[/>/,{token:"delimiter",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleAfterTypeEquals:[[/"([^"]*)"/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/>/,{token:"delimiter",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleWithCustomType:[[/>/,{token:"delimiter",next:"@styleEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleEmbedded:[[/<\/style/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}],[/[^<]+/,""]]}};export{z as conf,D as language}; diff --git a/src/main/resources/META-INF/resources/assets/htmlMode-AnX_EBKG.js b/src/main/resources/META-INF/resources/assets/htmlMode-AnX_EBKG.js deleted file mode 100644 index aebd529023..0000000000 --- a/src/main/resources/META-INF/resources/assets/htmlMode-AnX_EBKG.js +++ /dev/null @@ -1 +0,0 @@ -import{c as D}from"./workers-a5re0z0Q.js";import{H as m,D as d,h as l,F as p,b as c,S as u,c as h,f as w,g as _,C as R}from"./lspLanguageFeatures-Ajeavr0P.js";import{a as ne,e as se,d as ae,R as ge,i as me,j as de,t as le,k as pe}from"./lspLanguageFeatures-Ajeavr0P.js";import{l as t}from"./editor-registry-CIV_g9hj.js";import"./index-BY6d8wze.js";import"./resources-R5ikMSzo.js";import"./parser-editor-DJVsdXlv.js";import"./type-SbeC_oGu.js";import"./git-compare-arrows-pI8Ehpf-.js";import"./undo-2-CF9h_dkU.js";import"./save-lzTRlOlB.js";import"./eye-Dbrf-yrM.js";import"./secret-key-picker-TXey-VQE.js";import"./use-secrets-C_oj4VYh.js";import"./eye-off-DQKzJHI5.js";import"./tool-approvals-editor-BKW-ZLXY.js";import"./timer-BX3xgSur.js";import"./arrow-right-left-Or_4oRf0.js";import"./file-output-BA4KZHPi.js";import"./shield-Ce05kery.js";import"./info-vszmN4vn.js";import"./types-BY9zm5d-.js";import"./scale-DJXpJ1ID.js";import"./gauge-D0qrGV1d.js";import"./dollar-sign-Dt9VyGPU.js";import"./handshake-d__LQWU9.js";import"./cpu-BsIZspVa.js";import"./server-CeKDVLCh.js";import"./upload-DxPMOlxt.js";import"./lock-CPVVTGkJ.js";import"./tag-DrXWC0RK.js";const I=120*1e3;class f{constructor(o){this._defaults=o,this._worker=null,this._client=null,this._idleCheckInterval=window.setInterval(()=>this._checkIfIdle(),30*1e3),this._lastUsedTime=0,this._configChangeListener=this._defaults.onDidChange(()=>this._stopWorker())}_stopWorker(){this._worker&&(this._worker.dispose(),this._worker=null),this._client=null}dispose(){clearInterval(this._idleCheckInterval),this._configChangeListener.dispose(),this._stopWorker()}_checkIfIdle(){if(!this._worker)return;Date.now()-this._lastUsedTime>I&&this._stopWorker()}_getClient(){return this._lastUsedTime=Date.now(),this._client||(this._worker=D({moduleId:"vs/language/html/htmlWorker",createWorker:()=>new Worker(new URL("/assets/html.worker-YKAoroWb.js",import.meta.url),{type:"module"}),createData:{languageSettings:this._defaults.options,languageId:this._defaults.languageId},label:this._defaults.languageId}),this._client=this._worker.getProxy()),this._client}getLanguageServiceWorker(...o){let e;return this._getClient().then(r=>{e=r}).then(r=>{if(this._worker)return this._worker.withSyncedResources(o)}).then(r=>e)}}class v extends R{constructor(o){super(o,[".",":","<",'"',"=","/"])}}function te(i){const o=new f(i),e=(...n)=>o.getLanguageServiceWorker(...n);let r=i.languageId;t.registerCompletionItemProvider(r,new v(e)),t.registerHoverProvider(r,new m(e)),t.registerDocumentHighlightProvider(r,new d(e)),t.registerLinkProvider(r,new l(e)),t.registerFoldingRangeProvider(r,new p(e)),t.registerDocumentSymbolProvider(r,new c(e)),t.registerSelectionRangeProvider(r,new u(e)),t.registerRenameProvider(r,new h(e)),r==="html"&&(t.registerDocumentFormattingEditProvider(r,new w(e)),t.registerDocumentRangeFormattingEditProvider(r,new _(e)))}function re(i){const o=[],e=[],r=new f(i);o.push(r);const n=(...s)=>r.getLanguageServiceWorker(...s);function P(){const{languageId:s,modeConfiguration:a}=i;k(e),a.completionItems&&e.push(t.registerCompletionItemProvider(s,new v(n))),a.hovers&&e.push(t.registerHoverProvider(s,new m(n))),a.documentHighlights&&e.push(t.registerDocumentHighlightProvider(s,new d(n))),a.links&&e.push(t.registerLinkProvider(s,new l(n))),a.documentSymbols&&e.push(t.registerDocumentSymbolProvider(s,new c(n))),a.rename&&e.push(t.registerRenameProvider(s,new h(n))),a.foldingRanges&&e.push(t.registerFoldingRangeProvider(s,new p(n))),a.selectionRanges&&e.push(t.registerSelectionRangeProvider(s,new u(n))),a.documentFormattingEdits&&e.push(t.registerDocumentFormattingEditProvider(s,new w(n))),a.documentRangeFormattingEdits&&e.push(t.registerDocumentRangeFormattingEditProvider(s,new _(n)))}return P(),o.push(g(e)),g(o)}function g(i){return{dispose:()=>k(i)}}function k(i){for(;i.length;)i.pop().dispose()}export{R as CompletionAdapter,ne as DefinitionAdapter,se as DiagnosticsAdapter,ae as DocumentColorAdapter,w as DocumentFormattingEditProvider,d as DocumentHighlightAdapter,l as DocumentLinkAdapter,_ as DocumentRangeFormattingEditProvider,c as DocumentSymbolAdapter,p as FoldingRangeAdapter,m as HoverAdapter,ge as ReferenceAdapter,h as RenameAdapter,u as SelectionRangeAdapter,f as WorkerManager,me as fromPosition,de as fromRange,re as setupMode,te as setupMode1,le as toRange,pe as toTextEdit}; diff --git a/src/main/resources/META-INF/resources/assets/htmlMode-NRT3PXyd.js b/src/main/resources/META-INF/resources/assets/htmlMode-NRT3PXyd.js new file mode 100644 index 0000000000..91de9d8137 --- /dev/null +++ b/src/main/resources/META-INF/resources/assets/htmlMode-NRT3PXyd.js @@ -0,0 +1 @@ +import{c as D}from"./workers-ckLFiTM8.js";import{H as g,D as d,h as p,F as l,b as c,S as u,c as h,f as w,g as _,C as R}from"./lspLanguageFeatures-CAae2_b-.js";import{a as ue,e as he,d as we,R as _e,i as fe,j as ve,t as ke,k as Pe}from"./lspLanguageFeatures-CAae2_b-.js";import{l as t}from"./editor-registry-jvsNWt75.js";import"./index-BnLj1hck.js";import"./resources-D97MNqv3.js";import"./parser-editor-CPhjadeF.js";import"./useQueries-DZrQsbjS.js";import"./accessible-dialog-C2wu1H5q.js";import"./input-BV8V9kav.js";import"./empty-state-DxZE48rx.js";import"./error-state-D4qtZYFq.js";import"./use-debounce-DMHuVYwD.js";import"./use-resources-xPGGDyiq.js";import"./cascade-save-BHTTkwOb.js";import"./workflows-DTtF3KEG.js";import"./type-ChzGm4vJ.js";import"./git-compare-arrows-HXbtfCTs.js";import"./undo-2-Dh2nRAeV.js";import"./save-s-dFqxLL.js";import"./eye-xZR8Jj8Y.js";import"./secret-key-picker-BCXXdOJ-.js";import"./use-secrets--RofX_r2.js";import"./eye-off-PKiH0Asw.js";import"./tool-approvals-editor-S2UA66Hb.js";import"./timer-CShnmlWE.js";import"./arrow-right-left-J0fZSu2z.js";import"./file-output-DlS0SPnt.js";import"./shield-Dy-B1VeF.js";import"./info-cNcTVsFc.js";import"./types-tS6i07ms.js";import"./scale-BnMnNt4Y.js";import"./gauge-ML2DGGDJ.js";import"./dollar-sign-HonLwnZc.js";import"./handshake-foe5KMFV.js";import"./cpu-zEsE2ia0.js";import"./server-BMZQ8ps7.js";import"./upload-D1UCHnd4.js";import"./lock-CL2SzOGd.js";import"./tag-Cd1R14bi.js";const I=120*1e3;class f{constructor(o){this._defaults=o,this._worker=null,this._client=null,this._idleCheckInterval=window.setInterval(()=>this._checkIfIdle(),30*1e3),this._lastUsedTime=0,this._configChangeListener=this._defaults.onDidChange(()=>this._stopWorker())}_stopWorker(){this._worker&&(this._worker.dispose(),this._worker=null),this._client=null}dispose(){clearInterval(this._idleCheckInterval),this._configChangeListener.dispose(),this._stopWorker()}_checkIfIdle(){if(!this._worker)return;Date.now()-this._lastUsedTime>I&&this._stopWorker()}_getClient(){return this._lastUsedTime=Date.now(),this._client||(this._worker=D({moduleId:"vs/language/html/htmlWorker",createWorker:()=>new Worker(new URL("/assets/html.worker-YKAoroWb.js",import.meta.url),{type:"module"}),createData:{languageSettings:this._defaults.options,languageId:this._defaults.languageId},label:this._defaults.languageId}),this._client=this._worker.getProxy()),this._client}getLanguageServiceWorker(...o){let e;return this._getClient().then(r=>{e=r}).then(r=>{if(this._worker)return this._worker.withSyncedResources(o)}).then(r=>e)}}class v extends R{constructor(o){super(o,[".",":","<",'"',"=","/"])}}function de(i){const o=new f(i),e=(...n)=>o.getLanguageServiceWorker(...n);let r=i.languageId;t.registerCompletionItemProvider(r,new v(e)),t.registerHoverProvider(r,new g(e)),t.registerDocumentHighlightProvider(r,new d(e)),t.registerLinkProvider(r,new p(e)),t.registerFoldingRangeProvider(r,new l(e)),t.registerDocumentSymbolProvider(r,new c(e)),t.registerSelectionRangeProvider(r,new u(e)),t.registerRenameProvider(r,new h(e)),r==="html"&&(t.registerDocumentFormattingEditProvider(r,new w(e)),t.registerDocumentRangeFormattingEditProvider(r,new _(e)))}function pe(i){const o=[],e=[],r=new f(i);o.push(r);const n=(...s)=>r.getLanguageServiceWorker(...s);function P(){const{languageId:s,modeConfiguration:a}=i;k(e),a.completionItems&&e.push(t.registerCompletionItemProvider(s,new v(n))),a.hovers&&e.push(t.registerHoverProvider(s,new g(n))),a.documentHighlights&&e.push(t.registerDocumentHighlightProvider(s,new d(n))),a.links&&e.push(t.registerLinkProvider(s,new p(n))),a.documentSymbols&&e.push(t.registerDocumentSymbolProvider(s,new c(n))),a.rename&&e.push(t.registerRenameProvider(s,new h(n))),a.foldingRanges&&e.push(t.registerFoldingRangeProvider(s,new l(n))),a.selectionRanges&&e.push(t.registerSelectionRangeProvider(s,new u(n))),a.documentFormattingEdits&&e.push(t.registerDocumentFormattingEditProvider(s,new w(n))),a.documentRangeFormattingEdits&&e.push(t.registerDocumentRangeFormattingEditProvider(s,new _(n)))}return P(),o.push(m(e)),m(o)}function m(i){return{dispose:()=>k(i)}}function k(i){for(;i.length;)i.pop().dispose()}export{R as CompletionAdapter,ue as DefinitionAdapter,he as DiagnosticsAdapter,we as DocumentColorAdapter,w as DocumentFormattingEditProvider,d as DocumentHighlightAdapter,p as DocumentLinkAdapter,_ as DocumentRangeFormattingEditProvider,c as DocumentSymbolAdapter,l as FoldingRangeAdapter,g as HoverAdapter,_e as ReferenceAdapter,h as RenameAdapter,u as SelectionRangeAdapter,f as WorkerManager,fe as fromPosition,ve as fromRange,pe as setupMode,de as setupMode1,ke as toRange,Pe as toTextEdit}; diff --git a/src/main/resources/META-INF/resources/assets/index-BY6d8wze.js b/src/main/resources/META-INF/resources/assets/index-BnLj1hck.js similarity index 54% rename from src/main/resources/META-INF/resources/assets/index-BY6d8wze.js rename to src/main/resources/META-INF/resources/assets/index-BnLj1hck.js index dcebd1802a..483e24c96d 100644 --- a/src/main/resources/META-INF/resources/assets/index-BY6d8wze.js +++ b/src/main/resources/META-INF/resources/assets/index-BnLj1hck.js @@ -1,5 +1,5 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/dashboard-DpMaPw2X.js","assets/workflows-CAxBNXSH.js","assets/coordinator-GDpiIhTi.js","assets/use-secrets-C_oj4VYh.js","assets/card-Blk9R4_z.js","assets/server-CeKDVLCh.js","assets/wand-sparkles-DCdkrkbT.js","assets/agents-Ds5MHAjX.js","assets/ellipsis-vertical-CtSedckm.js","assets/download-DZjrnAjT.js","assets/accessible-dialog-BO2vat1a.js","assets/resource-type-badge-DrHzJ4gd.js","assets/action-badge-DHroL-w-.js","assets/eye-off-DQKzJHI5.js","assets/eye-Dbrf-yrM.js","assets/circle-check-big-D1mokjbm.js","assets/upload-DxPMOlxt.js","assets/resource-diff-viewer-D2tV_yay.js","assets/export-agent-dialog-DIJ6YUoj.js","assets/lock-CPVVTGkJ.js","assets/create-or-wizard-dialog-DrB8VzrL.js","assets/empty-state-DB7ZSzVv.js","assets/error-state-BXe3bnJT.js","assets/infinite-scroll-sentinel-DHJIRY3j.js","assets/view-mode-TQOH38Sf.js","assets/layout-grid-BjGzFSfP.js","assets/list-CX0KxgtB.js","assets/arrow-up-down-Cz_fDxBo.js","assets/agent-detail-DNwNGn8U.js","assets/use-workflows-DMCr721S.js","assets/use-latest-versions-DD4cLMav.js","assets/use-capabilities-qy1S0YmI.js","assets/tool-approvals-editor-BKW-ZLXY.js","assets/secret-key-picker-TXey-VQE.js","assets/fingerprint-pattern-Dbd3CWkE.js","assets/hash-D4WlnmN6.js","assets/info-vszmN4vn.js","assets/handshake-d__LQWU9.js","assets/link-2-VQoGUb0U.js","assets/agent-wizard-BpeKgxxX.js","assets/use-agent-setup-DNGNn-HI.js","assets/types-BY9zm5d-.js","assets/agent-studio-BSaldxbu.js","assets/resources-R5ikMSzo.js","assets/use-resources-BocDaki1.js","assets/cascade-save-CAECbCBm.js","assets/editor-registry-CIV_g9hj.js","assets/parser-editor-DJVsdXlv.js","assets/type-SbeC_oGu.js","assets/git-compare-arrows-pI8Ehpf-.js","assets/undo-2-CF9h_dkU.js","assets/save-lzTRlOlB.js","assets/timer-BX3xgSur.js","assets/arrow-right-left-Or_4oRf0.js","assets/file-output-BA4KZHPi.js","assets/shield-Ce05kery.js","assets/scale-DJXpJ1ID.js","assets/gauge-D0qrGV1d.js","assets/dollar-sign-Dt9VyGPU.js","assets/cpu-BsIZspVa.js","assets/tag-DrXWC0RK.js","assets/editor-registry-CB2SckMT.css","assets/chat-panel-IQLg7XQu.js","assets/history-BHMI8MMQ.js","assets/lock-open-1V8q1imA.js","assets/panel-right-close-BCp5JpCq.js","assets/workflows-xE8gvlBd.js","assets/workflow-detail-1Pj_rnY5.js","assets/use-save-and-deploy-BNNIKaE0.js","assets/conversations-BlT6Iz-c.js","assets/use-conversations-CLcLkU6m.js","assets/agent-picker-BKXXvXR0.js","assets/use-debounce-BXAMTtyO.js","assets/funnel-NUFt5LnV.js","assets/conversation-monitoring-B3tcMvna.js","assets/conversation-detail-zgfk5N2Y.js","assets/blocked-calls-BfQrNh_6.js","assets/code--AVnUtw-.js","assets/chat-ULtm2VHR.js","assets/resources-BhAbxNCR.js","assets/book-open-check-ZT-no4L2.js","assets/resource-list-CB5GzmFU.js","assets/back-link-D2LpIJ51.js","assets/resource-detail-Bf3dzQv6.js","assets/coordinator-BSH22HcJ.js","assets/stream-badge-D74j2j2x.js","assets/trending-up-C7AIX6kc.js","assets/schedules-CBiwbCna.js","assets/refetch-error-notice-Dhb_O4GR.js","assets/toggle-right-BF4AE61V.js","assets/toggle-left-CnK8ee-0.js","assets/ban-DpuGOmt1.js","assets/orphans-C-j92JiB.js","assets/logs-DqrgANSt.js","assets/radio-DbzYzkde.js","assets/secrets-DnPN092i.js","assets/rotate-cw-3PH_gHp-.js","assets/variables-Bhd0vx7j.js","assets/audit-DfusmaeU.js","assets/quotas-DLAQGcUb.js","assets/gdpr-CuwrWsrF.js","assets/user-data-BriA2srf.js","assets/braces-C2kMgYG8.js","assets/triggers-p2pfsOgs.js","assets/capabilities-DjMHUxhe.js","assets/sync-page-CTOClhlr.js","assets/channels-DUqDS1VG.js","assets/use-channels-WF2GiCQ0.js","assets/badge-B8rrdXaB.js","assets/channel-detail-CqtQSo7D.js","assets/star-cKGUeK0l.js","assets/approvals-C-kJIZKJ.js","assets/user-check-DqvaRbNC.js","assets/operator-Y_8RJV6n.js","assets/updates-2sIm75dj.js","assets/groups-0vUW2KjW.js","assets/group-config-yXQVQMNQ.js","assets/group-templates-B4YwvSlk.js","assets/layout-template-CJfl10R8.js","assets/group-detail-DVclPuHF.js","assets/group-config-panel-CHXO2yAZ.js","assets/clipboard-list-C1xV5BuY.js","assets/decision-record-card-AIhLlctQ.js","assets/user-plus-CWm5kmVr.js","assets/panel-right-open-96xUAT4B.js","assets/group-wizard-CBiV2wHJ.js","assets/group-templates-Umnu69fN.js","assets/group-workspace-Ce93uv6R.js","assets/users-round-I6RBruZ_.js","assets/workforce-dashboard-Bw7Ytptj.js","assets/dropdown-menu-0RIXy_ad.js","assets/use-templates-BfDgZq27.js","assets/bookmark-C8tPewzR.js","assets/workforce-wizard-By2fXXuJ.js","assets/advisor-avatar-CRlm-udV.js","assets/workforce-board-Btf89lU0.js","assets/use-persisted-boolean-CPz6hFYk.js","assets/workforce-thread-Cw8pwBqq.js","assets/agent-details-panel-DrjUeebe.js","assets/agent-editor-sheet-B0bu6_DR.js","assets/workforce-settings-5GKwM6f1.js","assets/workforce-history-C8J--uyI.js","assets/workforce-analytics-CfOpcDIJ.js","assets/workforce-chat-DE9CYMvc.js"])))=>i.map(i=>d[i]); -var lR=Object.defineProperty;var Cw=e=>{throw TypeError(e)};var cR=(e,t,n)=>t in e?lR(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Ee=(e,t,n)=>cR(e,typeof t!="symbol"?t+"":t,n),tm=(e,t,n)=>t.has(e)||Cw("Cannot "+n);var j=(e,t,n)=>(tm(e,t,"read from private field"),n?n.call(e):t.get(e)),Ce=(e,t,n)=>t.has(e)?Cw("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n),be=(e,t,n,r)=>(tm(e,t,"write to private field"),r?r.call(e,n):t.set(e,n),n),ce=(e,t,n)=>(tm(e,t,"access private method"),n);var xd=(e,t,n,r)=>({set _(s){be(e,t,s,n)},get _(){return j(e,t,r)}});function uR(e,t){for(var n=0;nr[s]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))r(s);new MutationObserver(s=>{for(const i of s)if(i.type==="childList")for(const c of i.addedNodes)c.tagName==="LINK"&&c.rel==="modulepreload"&&r(c)}).observe(document,{childList:!0,subtree:!0});function n(s){const i={};return s.integrity&&(i.integrity=s.integrity),s.referrerPolicy&&(i.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?i.credentials="include":s.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function r(s){if(s.ep)return;s.ep=!0;const i=n(s);fetch(s.href,i)}})();function bf(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var nm={exports:{}},cc={};/** +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/dashboard-km8ODRhV.js","assets/workflows-DTtF3KEG.js","assets/coordinator-B4sE0rHY.js","assets/use-secrets--RofX_r2.js","assets/card-CWHKt0V7.js","assets/server-BMZQ8ps7.js","assets/wand-sparkles-BtCP1jzO.js","assets/agents-DV22_WZ6.js","assets/ellipsis-vertical-fP6IFBST.js","assets/download-CVl_y-4e.js","assets/accessible-dialog-C2wu1H5q.js","assets/resource-type-badge-CKybsxy2.js","assets/action-badge-BjJgsogp.js","assets/eye-off-PKiH0Asw.js","assets/eye-xZR8Jj8Y.js","assets/circle-check-big-CBxGct8k.js","assets/upload-D1UCHnd4.js","assets/resource-diff-viewer-DeowJcjr.js","assets/export-agent-dialog-Bf3D5WJZ.js","assets/lock-CL2SzOGd.js","assets/create-or-wizard-dialog-qFzrzZXk.js","assets/empty-state-DxZE48rx.js","assets/error-state-D4qtZYFq.js","assets/infinite-scroll-sentinel-B_MaeDU1.js","assets/view-mode-DguClt6l.js","assets/layout-grid-DZHuDrOW.js","assets/list-Dqf28LSX.js","assets/arrow-up-down-CQw9INyB.js","assets/agent-detail-BOY92X78.js","assets/use-workflows-CmyfhMsp.js","assets/use-latest-versions-IjYK_BaC.js","assets/use-capabilities-CXvHDfSO.js","assets/useQueries-DZrQsbjS.js","assets/tool-approvals-editor-S2UA66Hb.js","assets/secret-key-picker-BCXXdOJ-.js","assets/fingerprint-pattern-Clkha78G.js","assets/hash-MmAVnsbH.js","assets/info-cNcTVsFc.js","assets/handshake-foe5KMFV.js","assets/link-2-DVp_MD50.js","assets/agent-wizard-B1tTR6z6.js","assets/use-agent-setup-DHji1YL0.js","assets/types-tS6i07ms.js","assets/agent-studio-on9tBFvm.js","assets/resources-D97MNqv3.js","assets/use-resources-xPGGDyiq.js","assets/cascade-save-BHTTkwOb.js","assets/editor-registry-jvsNWt75.js","assets/parser-editor-CPhjadeF.js","assets/input-BV8V9kav.js","assets/use-debounce-DMHuVYwD.js","assets/type-ChzGm4vJ.js","assets/git-compare-arrows-HXbtfCTs.js","assets/undo-2-Dh2nRAeV.js","assets/save-s-dFqxLL.js","assets/timer-CShnmlWE.js","assets/arrow-right-left-J0fZSu2z.js","assets/file-output-DlS0SPnt.js","assets/shield-Dy-B1VeF.js","assets/scale-BnMnNt4Y.js","assets/gauge-ML2DGGDJ.js","assets/dollar-sign-HonLwnZc.js","assets/cpu-zEsE2ia0.js","assets/tag-Cd1R14bi.js","assets/editor-registry-CB2SckMT.css","assets/chat-panel-B1e6hfTn.js","assets/history-d_YShP6D.js","assets/lock-open-BkYVbmCd.js","assets/panel-right-close-D7tJkwdn.js","assets/workflows-Bmvpgn_W.js","assets/workflow-detail-DVrN0i4N.js","assets/use-save-and-deploy-CYxj-Seo.js","assets/conversations-DgDQaSOa.js","assets/use-conversations-DDsEFA-B.js","assets/agent-picker-BMeo54U5.js","assets/funnel-CaMgE7LA.js","assets/conversation-monitoring-XAKrn4A9.js","assets/conversation-detail-Bjcs1MBi.js","assets/blocked-calls-BqNBLu7Y.js","assets/code-DBVyO5Cx.js","assets/chat-DqcQeFeL.js","assets/resources-B_aUsMXU.js","assets/book-open-check-DCaE5RYV.js","assets/resource-list-1abOq2A7.js","assets/back-link-tBVRORpr.js","assets/resource-detail-KAXQYqcJ.js","assets/coordinator-BpNLr4Dq.js","assets/stream-badge-CFlwXVqu.js","assets/trending-up-BAvzviUh.js","assets/schedules-ByvaIC1j.js","assets/refetch-error-notice-G50zNkPl.js","assets/toggle-right-Kj35wVQ9.js","assets/toggle-left-BKmExca8.js","assets/ban-C8dQHjQY.js","assets/orphans-DuPxq0XX.js","assets/logs-C2EfFbkp.js","assets/radio-CDuZqls4.js","assets/secrets-DzbtdI39.js","assets/rotate-cw-tG6Eo4U0.js","assets/variables-DiV-txaa.js","assets/audit-BAdwDXFj.js","assets/quotas-CK6BZtZk.js","assets/gdpr-BJ3KV_BD.js","assets/user-data-cD0Lmgvc.js","assets/braces-y7ww9cFU.js","assets/triggers-_cZZHfzZ.js","assets/capabilities-uaGlMF7H.js","assets/sync-page-Jc1UePOx.js","assets/channels-BTgb4FTZ.js","assets/badge-C2HqoOk5.js","assets/use-channels-Bw9MmTUU.js","assets/channel-detail-DsbdOxGv.js","assets/star-BSD3Ddvs.js","assets/approvals-BKAl4l81.js","assets/user-check-BzuCEBUg.js","assets/operator-DryvSUju.js","assets/updates-B4K-4KIF.js","assets/groups-BtkBf2hc.js","assets/group-config-DZrgz0vz.js","assets/group-templates-B4YwvSlk.js","assets/layout-template-CbFD6ZSF.js","assets/group-detail-AeGPoYjw.js","assets/group-config-panel-VmoYbcrS.js","assets/clipboard-list-BKNHK2TK.js","assets/decision-record-card-BagyXv1G.js","assets/user-plus-BhdQPvXt.js","assets/panel-right-open-CmRK7GbO.js","assets/group-wizard-CR_3Z9ix.js","assets/group-templates-CXjG7CAc.js","assets/group-workspace-B23PSf-s.js","assets/users-round-BYVKZK-i.js","assets/workforce-dashboard-CkzFMDuB.js","assets/dropdown-menu-DgcKfbXK.js","assets/use-templates-CAiufzx0.js","assets/bookmark-CI1fX0M9.js","assets/workforce-wizard-ChuOFM_W.js","assets/advisor-avatar-DRMAoqFt.js","assets/workforce-board-Bl8hoxhS.js","assets/use-persisted-boolean-DtyjnYjZ.js","assets/workforce-thread-Cx8IaYfL.js","assets/agent-details-panel-ByX72bgM.js","assets/agent-editor-sheet-Ddq_LTe-.js","assets/workforce-settings-BZjJq_e4.js","assets/workforce-history-DvOnDDjV.js","assets/workforce-analytics-DRl_v3Mg.js","assets/workforce-chat-BEU-i8O8.js"])))=>i.map(i=>d[i]); +var u2=Object.defineProperty;var N0=e=>{throw TypeError(e)};var d2=(e,t,n)=>t in e?u2(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Te=(e,t,n)=>d2(e,typeof t!="symbol"?t+"":t,n),tm=(e,t,n)=>t.has(e)||N0("Cannot "+n);var j=(e,t,n)=>(tm(e,t,"read from private field"),n?n.call(e):t.get(e)),Ce=(e,t,n)=>t.has(e)?N0("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n),be=(e,t,n,r)=>(tm(e,t,"write to private field"),r?r.call(e,n):t.set(e,n),n),ce=(e,t,n)=>(tm(e,t,"access private method"),n);var xd=(e,t,n,r)=>({set _(s){be(e,t,s,n)},get _(){return j(e,t,r)}});function f2(e,t){for(var n=0;nr[s]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))r(s);new MutationObserver(s=>{for(const i of s)if(i.type==="childList")for(const c of i.addedNodes)c.tagName==="LINK"&&c.rel==="modulepreload"&&r(c)}).observe(document,{childList:!0,subtree:!0});function n(s){const i={};return s.integrity&&(i.integrity=s.integrity),s.referrerPolicy&&(i.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?i.credentials="include":s.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function r(s){if(s.ep)return;s.ep=!0;const i=n(s);fetch(s.href,i)}})();function bf(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var nm={exports:{}},cc={};/** * @license React * react-jsx-runtime.production.js * @@ -7,7 +7,7 @@ var lR=Object.defineProperty;var Cw=e=>{throw TypeError(e)};var cR=(e,t,n)=>t in * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var Aw;function dR(){if(Aw)return cc;Aw=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.fragment");function n(r,s,i){var c=null;if(i!==void 0&&(c=""+i),s.key!==void 0&&(c=""+s.key),"key"in s){i={};for(var u in s)u!=="key"&&(i[u]=s[u])}else i=s;return s=i.ref,{$$typeof:e,type:r,key:c,ref:s!==void 0?s:null,props:i}}return cc.Fragment=t,cc.jsx=n,cc.jsxs=n,cc}var Nw;function fR(){return Nw||(Nw=1,nm.exports=dR()),nm.exports}var h=fR(),rm={exports:{}},Be={};/** + */var D0;function p2(){if(D0)return cc;D0=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.fragment");function n(r,s,i){var c=null;if(i!==void 0&&(c=""+i),s.key!==void 0&&(c=""+s.key),"key"in s){i={};for(var u in s)u!=="key"&&(i[u]=s[u])}else i=s;return s=i.ref,{$$typeof:e,type:r,key:c,ref:s!==void 0?s:null,props:i}}return cc.Fragment=t,cc.jsx=n,cc.jsxs=n,cc}var R0;function h2(){return R0||(R0=1,nm.exports=p2()),nm.exports}var h=h2(),rm={exports:{}},Be={};/** * @license React * react.production.js * @@ -15,7 +15,7 @@ var lR=Object.defineProperty;var Cw=e=>{throw TypeError(e)};var cR=(e,t,n)=>t in * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var Dw;function pR(){if(Dw)return Be;Dw=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.portal"),n=Symbol.for("react.fragment"),r=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),i=Symbol.for("react.consumer"),c=Symbol.for("react.context"),u=Symbol.for("react.forward_ref"),f=Symbol.for("react.suspense"),p=Symbol.for("react.memo"),g=Symbol.for("react.lazy"),m=Symbol.for("react.activity"),v=Symbol.iterator;function x(z){return z===null||typeof z!="object"?null:(z=v&&z[v]||z["@@iterator"],typeof z=="function"?z:null)}var w={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},E=Object.assign,T={};function C(z,F,N){this.props=z,this.context=F,this.refs=T,this.updater=N||w}C.prototype.isReactComponent={},C.prototype.setState=function(z,F){if(typeof z!="object"&&typeof z!="function"&&z!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,z,F,"setState")},C.prototype.forceUpdate=function(z){this.updater.enqueueForceUpdate(this,z,"forceUpdate")};function A(){}A.prototype=C.prototype;function O(z,F,N){this.props=z,this.context=F,this.refs=T,this.updater=N||w}var P=O.prototype=new A;P.constructor=O,E(P,C.prototype),P.isPureReactComponent=!0;var _=Array.isArray;function M(){}var I={H:null,A:null,T:null,S:null},L=Object.prototype.hasOwnProperty;function K(z,F,N){var ee=N.ref;return{$$typeof:e,type:z,key:F,ref:ee!==void 0?ee:null,props:N}}function U(z,F){return K(z.type,F,z.props)}function G(z){return typeof z=="object"&&z!==null&&z.$$typeof===e}function Q(z){var F={"=":"=0",":":"=2"};return"$"+z.replace(/[=:]/g,function(N){return F[N]})}var V=/\/+/g;function ne(z,F){return typeof z=="object"&&z!==null&&z.key!=null?Q(""+z.key):F.toString(36)}function Z(z){switch(z.status){case"fulfilled":return z.value;case"rejected":throw z.reason;default:switch(typeof z.status=="string"?z.then(M,M):(z.status="pending",z.then(function(F){z.status==="pending"&&(z.status="fulfilled",z.value=F)},function(F){z.status==="pending"&&(z.status="rejected",z.reason=F)})),z.status){case"fulfilled":return z.value;case"rejected":throw z.reason}}throw z}function B(z,F,N,ee,J){var ie=typeof z;(ie==="undefined"||ie==="boolean")&&(z=null);var ke=!1;if(z===null)ke=!0;else switch(ie){case"bigint":case"string":case"number":ke=!0;break;case"object":switch(z.$$typeof){case e:case t:ke=!0;break;case g:return ke=z._init,B(ke(z._payload),F,N,ee,J)}}if(ke)return J=J(z),ke=ee===""?"."+ne(z,0):ee,_(J)?(N="",ke!=null&&(N=ke.replace(V,"$&/")+"/"),B(J,F,N,"",function(it){return it})):J!=null&&(G(J)&&(J=U(J,N+(J.key==null||z&&z.key===J.key?"":(""+J.key).replace(V,"$&/")+"/")+ke)),F.push(J)),1;ke=0;var Te=ee===""?".":ee+":";if(_(z))for(var Se=0;Se{throw TypeError(e)};var cR=(e,t,n)=>t in * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var Ow;function hR(){return Ow||(Ow=1,(function(e){function t(B,re){var ye=B.length;B.push(re);e:for(;0>>1,R=B[he];if(0>>1;hes(N,ye))ees(J,N)?(B[he]=J,B[ee]=ye,he=ee):(B[he]=N,B[F]=ye,he=F);else if(ees(J,ye))B[he]=J,B[ee]=ye,he=ee;else break e}}return re}function s(B,re){var ye=B.sortIndex-re.sortIndex;return ye!==0?ye:B.id-re.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var i=performance;e.unstable_now=function(){return i.now()}}else{var c=Date,u=c.now();e.unstable_now=function(){return c.now()-u}}var f=[],p=[],g=1,m=null,v=3,x=!1,w=!1,E=!1,T=!1,C=typeof setTimeout=="function"?setTimeout:null,A=typeof clearTimeout=="function"?clearTimeout:null,O=typeof setImmediate<"u"?setImmediate:null;function P(B){for(var re=n(p);re!==null;){if(re.callback===null)r(p);else if(re.startTime<=B)r(p),re.sortIndex=re.expirationTime,t(f,re);else break;re=n(p)}}function _(B){if(E=!1,P(B),!w)if(n(f)!==null)w=!0,M||(M=!0,Q());else{var re=n(p);re!==null&&Z(_,re.startTime-B)}}var M=!1,I=-1,L=5,K=-1;function U(){return T?!0:!(e.unstable_now()-KB&&U());){var he=m.callback;if(typeof he=="function"){m.callback=null,v=m.priorityLevel;var R=he(m.expirationTime<=B);if(B=e.unstable_now(),typeof R=="function"){m.callback=R,P(B),re=!0;break t}m===n(f)&&r(f),P(B)}else r(f);m=n(f)}if(m!==null)re=!0;else{var z=n(p);z!==null&&Z(_,z.startTime-B),re=!1}}break e}finally{m=null,v=ye,x=!1}re=void 0}}finally{re?Q():M=!1}}}var Q;if(typeof O=="function")Q=function(){O(G)};else if(typeof MessageChannel<"u"){var V=new MessageChannel,ne=V.port2;V.port1.onmessage=G,Q=function(){ne.postMessage(null)}}else Q=function(){C(G,0)};function Z(B,re){I=C(function(){B(e.unstable_now())},re)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(B){B.callback=null},e.unstable_forceFrameRate=function(B){0>B||125he?(B.sortIndex=ye,t(p,B),n(f)===null&&B===n(p)&&(E?(A(I),I=-1):E=!0,Z(_,ye-he))):(B.sortIndex=R,t(f,B),w||x||(w=!0,M||(M=!0,Q()))),B},e.unstable_shouldYield=U,e.unstable_wrapCallback=function(B){var re=v;return function(){var ye=v;v=re;try{return B.apply(this,arguments)}finally{v=ye}}}})(sm)),sm}var jw;function mR(){return jw||(jw=1,om.exports=hR()),om.exports}var im={exports:{}},bn={};/** + */var M0;function g2(){return M0||(M0=1,(function(e){function t(B,ne){var ye=B.length;B.push(ne);e:for(;0>>1,R=B[me];if(0>>1;mes(N,ye))ees(J,N)?(B[me]=J,B[ee]=ye,me=ee):(B[me]=N,B[F]=ye,me=F);else if(ees(J,ye))B[me]=J,B[ee]=ye,me=ee;else break e}}return ne}function s(B,ne){var ye=B.sortIndex-ne.sortIndex;return ye!==0?ye:B.id-ne.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var i=performance;e.unstable_now=function(){return i.now()}}else{var c=Date,u=c.now();e.unstable_now=function(){return c.now()-u}}var f=[],p=[],g=1,m=null,v=3,x=!1,w=!1,E=!1,T=!1,C=typeof setTimeout=="function"?setTimeout:null,A=typeof clearTimeout=="function"?clearTimeout:null,O=typeof setImmediate<"u"?setImmediate:null;function P(B){for(var ne=n(p);ne!==null;){if(ne.callback===null)r(p);else if(ne.startTime<=B)r(p),ne.sortIndex=ne.expirationTime,t(f,ne);else break;ne=n(p)}}function _(B){if(E=!1,P(B),!w)if(n(f)!==null)w=!0,M||(M=!0,Q());else{var ne=n(p);ne!==null&&Z(_,ne.startTime-B)}}var M=!1,I=-1,L=5,K=-1;function U(){return T?!0:!(e.unstable_now()-KB&&U());){var me=m.callback;if(typeof me=="function"){m.callback=null,v=m.priorityLevel;var R=me(m.expirationTime<=B);if(B=e.unstable_now(),typeof R=="function"){m.callback=R,P(B),ne=!0;break t}m===n(f)&&r(f),P(B)}else r(f);m=n(f)}if(m!==null)ne=!0;else{var z=n(p);z!==null&&Z(_,z.startTime-B),ne=!1}}break e}finally{m=null,v=ye,x=!1}ne=void 0}}finally{ne?Q():M=!1}}}var Q;if(typeof O=="function")Q=function(){O(G)};else if(typeof MessageChannel<"u"){var V=new MessageChannel,re=V.port2;V.port1.onmessage=G,Q=function(){re.postMessage(null)}}else Q=function(){C(G,0)};function Z(B,ne){I=C(function(){B(e.unstable_now())},ne)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(B){B.callback=null},e.unstable_forceFrameRate=function(B){0>B||125me?(B.sortIndex=ye,t(p,B),n(f)===null&&B===n(p)&&(E?(A(I),I=-1):E=!0,Z(_,ye-me))):(B.sortIndex=R,t(f,B),w||x||(w=!0,M||(M=!0,Q()))),B},e.unstable_shouldYield=U,e.unstable_wrapCallback=function(B){var ne=v;return function(){var ye=v;v=ne;try{return B.apply(this,arguments)}finally{v=ye}}}})(sm)),sm}var L0;function y2(){return L0||(L0=1,om.exports=g2()),om.exports}var im={exports:{}},bn={};/** * @license React * react-dom.production.js * @@ -31,7 +31,7 @@ var lR=Object.defineProperty;var Cw=e=>{throw TypeError(e)};var cR=(e,t,n)=>t in * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var Mw;function gR(){if(Mw)return bn;Mw=1;var e=my();function t(f){var p="https://react.dev/errors/"+f;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),im.exports=gR(),im.exports}/** + */var _0;function v2(){if(_0)return bn;_0=1;var e=gy();function t(f){var p="https://react.dev/errors/"+f;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),im.exports=v2(),im.exports}/** * @license React * react-dom-client.production.js * @@ -39,15 +39,15 @@ var lR=Object.defineProperty;var Cw=e=>{throw TypeError(e)};var cR=(e,t,n)=>t in * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var _w;function yR(){if(_w)return uc;_w=1;var e=mR(),t=my(),n=BS();function r(a){var o="https://react.dev/errors/"+a;if(1R||(a.current=he[R],he[R]=null,R--)}function N(a,o){R++,he[R]=a.current,a.current=o}var ee=z(null),J=z(null),ie=z(null),ke=z(null);function Te(a,o){switch(N(ie,o),N(J,a),N(ee,null),o.nodeType){case 9:case 11:a=(a=o.documentElement)&&(a=a.namespaceURI)?Y0(a):0;break;default:if(a=o.tagName,o=o.namespaceURI)o=Y0(o),a=Q0(o,a);else switch(a){case"svg":a=1;break;case"math":a=2;break;default:a=0}}F(ee),N(ee,a)}function Se(){F(ee),F(J),F(ie)}function it(a){a.memoizedState!==null&&N(ke,a);var o=ee.current,l=Q0(o,a.type);o!==l&&(N(J,a),N(ee,l))}function Nt(a){J.current===a&&(F(ee),F(J)),ke.current===a&&(F(ke),oc._currentValue=ye)}var Ut,en;function we(a){if(Ut===void 0)try{throw Error()}catch(l){var o=l.stack.trim().match(/\n( *(at )?)/);Ut=o&&o[1]||"",en=-1R||(a.current=me[R],me[R]=null,R--)}function N(a,o){R++,me[R]=a.current,a.current=o}var ee=z(null),J=z(null),ie=z(null),ke=z(null);function Ee(a,o){switch(N(ie,o),N(J,a),N(ee,null),o.nodeType){case 9:case 11:a=(a=o.documentElement)&&(a=a.namespaceURI)?Xw(a):0;break;default:if(a=o.tagName,o=o.namespaceURI)o=Xw(o),a=Jw(o,a);else switch(a){case"svg":a=1;break;case"math":a=2;break;default:a=0}}F(ee),N(ee,a)}function Se(){F(ee),F(J),F(ie)}function lt(a){a.memoizedState!==null&&N(ke,a);var o=ee.current,l=Jw(o,a.type);o!==l&&(N(J,a),N(ee,l))}function Dt(a){J.current===a&&(F(ee),F(J)),ke.current===a&&(F(ke),oc._currentValue=ye)}var Ut,Zt;function we(a){if(Ut===void 0)try{throw Error()}catch(l){var o=l.stack.trim().match(/\n( *(at )?)/);Ut=o&&o[1]||"",Zt=-1)":-1y||H[d]!==Y[y]){var ae=` -`+H[d].replace(" at new "," at ");return a.displayName&&ae.includes("")&&(ae=ae.replace("",a.displayName)),ae}while(1<=d&&0<=y);break}}}finally{rt=!1,Error.prepareStackTrace=l}return(l=a?a.displayName||a.name:"")?we(l):""}function zt(a,o){switch(a.tag){case 26:case 27:case 5:return we(a.type);case 16:return we("Lazy");case 13:return a.child!==o&&o!==null?we("Suspense Fallback"):we("Suspense");case 19:return we("SuspenseList");case 0:case 15:return tt(a.type,!1);case 11:return tt(a.type.render,!1);case 1:return tt(a.type,!0);case 31:return we("Activity");default:return""}}function jn(a){try{var o="",l=null;do o+=zt(a,l),l=a,a=a.return;while(a);return o}catch(d){return` +`+H[d].replace(" at new "," at ");return a.displayName&&ae.includes("")&&(ae=ae.replace("",a.displayName)),ae}while(1<=d&&0<=y);break}}}finally{rt=!1,Error.prepareStackTrace=l}return(l=a?a.displayName||a.name:"")?we(l):""}function zt(a,o){switch(a.tag){case 26:case 27:case 5:return we(a.type);case 16:return we("Lazy");case 13:return a.child!==o&&o!==null?we("Suspense Fallback"):we("Suspense");case 19:return we("SuspenseList");case 0:case 15:return Ze(a.type,!1);case 11:return Ze(a.type.render,!1);case 1:return Ze(a.type,!0);case 31:return we("Activity");default:return""}}function Xn(a){try{var o="",l=null;do o+=zt(a,l),l=a,a=a.return;while(a);return o}catch(d){return` Error generating stack: `+d.message+` -`+d.stack}}var vt=Object.prototype.hasOwnProperty,de=e.unstable_scheduleCallback,Ft=e.unstable_cancelCallback,bt=e.unstable_shouldYield,Lt=e.unstable_requestPaint,sn=e.unstable_now,bl=e.unstable_getCurrentPriorityLevel,oe=e.unstable_ImmediatePriority,ve=e.unstable_UserBlockingPriority,Pe=e.unstable_NormalPriority,Ve=e.unstable_LowPriority,Ge=e.unstable_IdlePriority,gn=e.log,yn=e.unstable_setDisableYieldValue,ln=null,Ht=null;function cn(a){if(typeof gn=="function"&&yn(a),Ht&&typeof Ht.setStrictMode=="function")try{Ht.setStrictMode(ln,a)}catch{}}var lt=Math.clz32?Math.clz32:qr,Br=Math.log,Tn=Math.LN2;function qr(a){return a>>>=0,a===0?32:31-(Br(a)/Tn|0)|0}var Us=256,zs=262144,Vo=4194304;function Vr(a){var o=a&42;if(o!==0)return o;switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return a&261888;case 262144:case 524288:case 1048576:case 2097152:return a&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return a&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return a}}function Ue(a,o,l){var d=a.pendingLanes;if(d===0)return 0;var y=0,b=a.suspendedLanes,S=a.pingedLanes;a=a.warmLanes;var D=d&134217727;return D!==0?(d=D&~b,d!==0?y=Vr(d):(S&=D,S!==0?y=Vr(S):l||(l=D&~a,l!==0&&(y=Vr(l))))):(D=d&~b,D!==0?y=Vr(D):S!==0?y=Vr(S):l||(l=d&~a,l!==0&&(y=Vr(l)))),y===0?0:o!==0&&o!==y&&(o&b)===0&&(b=y&-y,l=o&-o,b>=l||b===32&&(l&4194048)!==0)?o:y}function Dt(a,o){return(a.pendingLanes&~(a.suspendedLanes&~a.pingedLanes)&o)===0}function tn(a,o){switch(a){case 1:case 2:case 4:case 8:case 64:return o+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return o+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function vn(){var a=Vo;return Vo<<=1,(Vo&62914560)===0&&(Vo=4194304),a}function Ga(a){for(var o=[],l=0;31>l;l++)o.push(a);return o}function Mt(a,o){a.pendingLanes|=o,o!==268435456&&(a.suspendedLanes=0,a.pingedLanes=0,a.warmLanes=0)}function Mn(a,o,l,d,y,b){var S=a.pendingLanes;a.pendingLanes=l,a.suspendedLanes=0,a.pingedLanes=0,a.warmLanes=0,a.expiredLanes&=l,a.entangledLanes&=l,a.errorRecoveryDisabledLanes&=l,a.shellSuspendCounter=0;var D=a.entanglements,H=a.expirationTimes,Y=a.hiddenUpdates;for(l=S&~l;0"u")return null;try{return a.activeElement||a.body}catch{return a.body}}var nD=/[\n"\\]/g;function pr(a){return a.replace(nD,function(o){return"\\"+o.charCodeAt(0).toString(16)+" "})}function Yf(a,o,l,d,y,b,S,D){a.name="",S!=null&&typeof S!="function"&&typeof S!="symbol"&&typeof S!="boolean"?a.type=S:a.removeAttribute("type"),o!=null?S==="number"?(o===0&&a.value===""||a.value!=o)&&(a.value=""+fr(o)):a.value!==""+fr(o)&&(a.value=""+fr(o)):S!=="submit"&&S!=="reset"||a.removeAttribute("value"),o!=null?Qf(a,S,fr(o)):l!=null?Qf(a,S,fr(l)):d!=null&&a.removeAttribute("value"),y==null&&b!=null&&(a.defaultChecked=!!b),y!=null&&(a.checked=y&&typeof y!="function"&&typeof y!="symbol"),D!=null&&typeof D!="function"&&typeof D!="symbol"&&typeof D!="boolean"?a.name=""+fr(D):a.removeAttribute("name")}function qv(a,o,l,d,y,b,S,D){if(b!=null&&typeof b!="function"&&typeof b!="symbol"&&typeof b!="boolean"&&(a.type=b),o!=null||l!=null){if(!(b!=="submit"&&b!=="reset"||o!=null)){Wf(a);return}l=l!=null?""+fr(l):"",o=o!=null?""+fr(o):l,D||o===a.value||(a.value=o),a.defaultValue=o}d=d??y,d=typeof d!="function"&&typeof d!="symbol"&&!!d,a.checked=D?a.checked:!!d,a.defaultChecked=!!d,S!=null&&typeof S!="function"&&typeof S!="symbol"&&typeof S!="boolean"&&(a.name=S),Wf(a)}function Qf(a,o,l){o==="number"&&uu(a.ownerDocument)===a||a.defaultValue===""+l||(a.defaultValue=""+l)}function Ks(a,o,l,d){if(a=a.options,o){o={};for(var y=0;y"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),tp=!1;if(ha)try{var Sl={};Object.defineProperty(Sl,"passive",{get:function(){tp=!0}}),window.addEventListener("test",Sl,Sl),window.removeEventListener("test",Sl,Sl)}catch{tp=!1}var Ya=null,np=null,fu=null;function Qv(){if(fu)return fu;var a,o=np,l=o.length,d,y="value"in Ya?Ya.value:Ya.textContent,b=y.length;for(a=0;a=Cl),nb=" ",rb=!1;function ab(a,o){switch(a){case"keyup":return RD.indexOf(o.keyCode)!==-1;case"keydown":return o.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function ob(a){return a=a.detail,typeof a=="object"&&"data"in a?a.data:null}var Qs=!1;function jD(a,o){switch(a){case"compositionend":return ob(o);case"keypress":return o.which!==32?null:(rb=!0,nb);case"textInput":return a=o.data,a===nb&&rb?null:a;default:return null}}function MD(a,o){if(Qs)return a==="compositionend"||!ip&&ab(a,o)?(a=Qv(),fu=np=Ya=null,Qs=!1,a):null;switch(a){case"paste":return null;case"keypress":if(!(o.ctrlKey||o.altKey||o.metaKey)||o.ctrlKey&&o.altKey){if(o.char&&1=o)return{node:l,offset:o-a};a=d}e:{for(;l;){if(l.nextSibling){l=l.nextSibling;break e}l=l.parentNode}l=void 0}l=pb(l)}}function mb(a,o){return a&&o?a===o?!0:a&&a.nodeType===3?!1:o&&o.nodeType===3?mb(a,o.parentNode):"contains"in a?a.contains(o):a.compareDocumentPosition?!!(a.compareDocumentPosition(o)&16):!1:!1}function gb(a){a=a!=null&&a.ownerDocument!=null&&a.ownerDocument.defaultView!=null?a.ownerDocument.defaultView:window;for(var o=uu(a.document);o instanceof a.HTMLIFrameElement;){try{var l=typeof o.contentWindow.location.href=="string"}catch{l=!1}if(l)a=o.contentWindow;else break;o=uu(a.document)}return o}function up(a){var o=a&&a.nodeName&&a.nodeName.toLowerCase();return o&&(o==="input"&&(a.type==="text"||a.type==="search"||a.type==="tel"||a.type==="url"||a.type==="password")||o==="textarea"||a.contentEditable==="true")}var HD=ha&&"documentMode"in document&&11>=document.documentMode,Xs=null,dp=null,Rl=null,fp=!1;function yb(a,o,l){var d=l.window===l?l.document:l.nodeType===9?l:l.ownerDocument;fp||Xs==null||Xs!==uu(d)||(d=Xs,"selectionStart"in d&&up(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Rl&&Dl(Rl,d)||(Rl=d,d=od(dp,"onSelect"),0>=S,y-=S,$r=1<<32-lt(o)+y|l<$e?(Je=Re,Re=null):Je=Re.sibling;var ot=X($,Re,W[$e],se);if(ot===null){Re===null&&(Re=Je);break}a&&Re&&ot.alternate===null&&o($,Re),q=b(ot,q,$e),at===null?Me=ot:at.sibling=ot,at=ot,Re=Je}if($e===W.length)return l($,Re),Ze&&ga($,$e),Me;if(Re===null){for(;$e$e?(Je=Re,Re=null):Je=Re.sibling;var vo=X($,Re,ot.value,se);if(vo===null){Re===null&&(Re=Je);break}a&&Re&&vo.alternate===null&&o($,Re),q=b(vo,q,$e),at===null?Me=vo:at.sibling=vo,at=vo,Re=Je}if(ot.done)return l($,Re),Ze&&ga($,$e),Me;if(Re===null){for(;!ot.done;$e++,ot=W.next())ot=le($,ot.value,se),ot!==null&&(q=b(ot,q,$e),at===null?Me=ot:at.sibling=ot,at=ot);return Ze&&ga($,$e),Me}for(Re=d(Re);!ot.done;$e++,ot=W.next())ot=te(Re,$,$e,ot.value,se),ot!==null&&(a&&ot.alternate!==null&&Re.delete(ot.key===null?$e:ot.key),q=b(ot,q,$e),at===null?Me=ot:at.sibling=ot,at=ot);return a&&Re.forEach(function(iR){return o($,iR)}),Ze&&ga($,$e),Me}function gt($,q,W,se){if(typeof W=="object"&&W!==null&&W.type===E&&W.key===null&&(W=W.props.children),typeof W=="object"&&W!==null){switch(W.$$typeof){case x:e:{for(var Me=W.key;q!==null;){if(q.key===Me){if(Me=W.type,Me===E){if(q.tag===7){l($,q.sibling),se=y(q,W.props.children),se.return=$,$=se;break e}}else if(q.elementType===Me||typeof Me=="object"&&Me!==null&&Me.$$typeof===L&&ns(Me)===q.type){l($,q.sibling),se=y(q,W.props),Pl(se,W),se.return=$,$=se;break e}l($,q);break}else o($,q);q=q.sibling}W.type===E?(se=Xo(W.props.children,$.mode,se,W.key),se.return=$,$=se):(se=ku(W.type,W.key,W.props,null,$.mode,se),Pl(se,W),se.return=$,$=se)}return S($);case w:e:{for(Me=W.key;q!==null;){if(q.key===Me)if(q.tag===4&&q.stateNode.containerInfo===W.containerInfo&&q.stateNode.implementation===W.implementation){l($,q.sibling),se=y(q,W.children||[]),se.return=$,$=se;break e}else{l($,q);break}else o($,q);q=q.sibling}se=bp(W,$.mode,se),se.return=$,$=se}return S($);case L:return W=ns(W),gt($,q,W,se)}if(Z(W))return De($,q,W,se);if(Q(W)){if(Me=Q(W),typeof Me!="function")throw Error(r(150));return W=Me.call(W),Ie($,q,W,se)}if(typeof W.then=="function")return gt($,q,Du(W),se);if(W.$$typeof===O)return gt($,q,Eu($,W),se);Ru($,W)}return typeof W=="string"&&W!==""||typeof W=="number"||typeof W=="bigint"?(W=""+W,q!==null&&q.tag===6?(l($,q.sibling),se=y(q,W),se.return=$,$=se):(l($,q),se=vp(W,$.mode,se),se.return=$,$=se),S($)):l($,q)}return function($,q,W,se){try{_l=0;var Me=gt($,q,W,se);return li=null,Me}catch(Re){if(Re===ii||Re===Au)throw Re;var at=Zn(29,Re,null,$.mode);return at.lanes=se,at.return=$,at}finally{}}}var as=Fb(!0),Hb=Fb(!1),eo=!1;function Op(a){a.updateQueue={baseState:a.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function jp(a,o){a=a.updateQueue,o.updateQueue===a&&(o.updateQueue={baseState:a.baseState,firstBaseUpdate:a.firstBaseUpdate,lastBaseUpdate:a.lastBaseUpdate,shared:a.shared,callbacks:null})}function to(a){return{lane:a,tag:0,payload:null,callback:null,next:null}}function no(a,o,l){var d=a.updateQueue;if(d===null)return null;if(d=d.shared,(st&2)!==0){var y=d.pending;return y===null?o.next=o:(o.next=y.next,y.next=o),d.pending=o,o=wu(a),Tb(a,null,l),o}return xu(a,d,o,l),wu(a)}function Il(a,o,l){if(o=o.updateQueue,o!==null&&(o=o.shared,(l&4194048)!==0)){var d=o.lanes;d&=a.pendingLanes,l|=d,o.lanes=l,Ln(a,l)}}function Mp(a,o){var l=a.updateQueue,d=a.alternate;if(d!==null&&(d=d.updateQueue,l===d)){var y=null,b=null;if(l=l.firstBaseUpdate,l!==null){do{var S={lane:l.lane,tag:l.tag,payload:l.payload,callback:null,next:null};b===null?y=b=S:b=b.next=S,l=l.next}while(l!==null);b===null?y=b=o:b=b.next=o}else y=b=o;l={baseState:d.baseState,firstBaseUpdate:y,lastBaseUpdate:b,shared:d.shared,callbacks:d.callbacks},a.updateQueue=l;return}a=l.lastBaseUpdate,a===null?l.firstBaseUpdate=o:a.next=o,l.lastBaseUpdate=o}var Lp=!1;function Ul(){if(Lp){var a=si;if(a!==null)throw a}}function zl(a,o,l,d){Lp=!1;var y=a.updateQueue;eo=!1;var b=y.firstBaseUpdate,S=y.lastBaseUpdate,D=y.shared.pending;if(D!==null){y.shared.pending=null;var H=D,Y=H.next;H.next=null,S===null?b=Y:S.next=Y,S=H;var ae=a.alternate;ae!==null&&(ae=ae.updateQueue,D=ae.lastBaseUpdate,D!==S&&(D===null?ae.firstBaseUpdate=Y:D.next=Y,ae.lastBaseUpdate=H))}if(b!==null){var le=y.baseState;S=0,ae=Y=H=null,D=b;do{var X=D.lane&-536870913,te=X!==D.lane;if(te?(Xe&X)===X:(d&X)===X){X!==0&&X===oi&&(Lp=!0),ae!==null&&(ae=ae.next={lane:0,tag:D.tag,payload:D.payload,callback:null,next:null});e:{var De=a,Ie=D;X=o;var gt=l;switch(Ie.tag){case 1:if(De=Ie.payload,typeof De=="function"){le=De.call(gt,le,X);break e}le=De;break e;case 3:De.flags=De.flags&-65537|128;case 0:if(De=Ie.payload,X=typeof De=="function"?De.call(gt,le,X):De,X==null)break e;le=m({},le,X);break e;case 2:eo=!0}}X=D.callback,X!==null&&(a.flags|=64,te&&(a.flags|=8192),te=y.callbacks,te===null?y.callbacks=[X]:te.push(X))}else te={lane:X,tag:D.tag,payload:D.payload,callback:D.callback,next:null},ae===null?(Y=ae=te,H=le):ae=ae.next=te,S|=X;if(D=D.next,D===null){if(D=y.shared.pending,D===null)break;te=D,D=te.next,te.next=null,y.lastBaseUpdate=te,y.shared.pending=null}}while(!0);ae===null&&(H=le),y.baseState=H,y.firstBaseUpdate=Y,y.lastBaseUpdate=ae,b===null&&(y.shared.lanes=0),io|=S,a.lanes=S,a.memoizedState=le}}function Bb(a,o){if(typeof a!="function")throw Error(r(191,a));a.call(o)}function qb(a,o){var l=a.callbacks;if(l!==null)for(a.callbacks=null,a=0;ab?b:8;var S=B.T,D={};B.T=D,Zp(a,!1,o,l);try{var H=y(),Y=B.S;if(Y!==null&&Y(D,H),H!==null&&typeof H=="object"&&typeof H.then=="function"){var ae=QD(H,d);Bl(a,o,ae,ar(a))}else Bl(a,o,d,ar(a))}catch(le){Bl(a,o,{then:function(){},status:"rejected",reason:le},ar())}finally{re.p=b,S!==null&&D.types!==null&&(S.types=D.types),B.T=S}}function n2(){}function Xp(a,o,l,d){if(a.tag!==5)throw Error(r(476));var y=wx(a).queue;xx(a,y,o,ye,l===null?n2:function(){return kx(a),l(d)})}function wx(a){var o=a.memoizedState;if(o!==null)return o;o={memoizedState:ye,baseState:ye,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:xa,lastRenderedState:ye},next:null};var l={};return o.next={memoizedState:l,baseState:l,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:xa,lastRenderedState:l},next:null},a.memoizedState=o,a=a.alternate,a!==null&&(a.memoizedState=o),o}function kx(a){var o=wx(a);o.next===null&&(o=a.alternate.memoizedState),Bl(a,o.next.queue,{},ar())}function Jp(){return fn(oc)}function Sx(){return qt().memoizedState}function Tx(){return qt().memoizedState}function r2(a){for(var o=a.return;o!==null;){switch(o.tag){case 24:case 3:var l=ar();a=to(l);var d=no(o,a,l);d!==null&&(Bn(d,o,l),Il(d,o,l)),o={cache:Ap()},a.payload=o;return}o=o.return}}function a2(a,o,l){var d=ar();l={lane:d,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null},Fu(a)?Cx(o,l):(l=gp(a,o,l,d),l!==null&&(Bn(l,a,d),Ax(l,o,d)))}function Ex(a,o,l){var d=ar();Bl(a,o,l,d)}function Bl(a,o,l,d){var y={lane:d,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null};if(Fu(a))Cx(o,y);else{var b=a.alternate;if(a.lanes===0&&(b===null||b.lanes===0)&&(b=o.lastRenderedReducer,b!==null))try{var S=o.lastRenderedState,D=b(S,l);if(y.hasEagerState=!0,y.eagerState=D,Jn(D,S))return xu(a,o,y,0),xt===null&&bu(),!1}catch{}finally{}if(l=gp(a,o,y,d),l!==null)return Bn(l,a,d),Ax(l,o,d),!0}return!1}function Zp(a,o,l,d){if(d={lane:2,revertLane:Oh(),gesture:null,action:d,hasEagerState:!1,eagerState:null,next:null},Fu(a)){if(o)throw Error(r(479))}else o=gp(a,l,d,2),o!==null&&Bn(o,a,2)}function Fu(a){var o=a.alternate;return a===qe||o!==null&&o===qe}function Cx(a,o){ui=Mu=!0;var l=a.pending;l===null?o.next=o:(o.next=l.next,l.next=o),a.pending=o}function Ax(a,o,l){if((l&4194048)!==0){var d=o.lanes;d&=a.pendingLanes,l|=d,o.lanes=l,Ln(a,l)}}var ql={readContext:fn,use:Pu,useCallback:_t,useContext:_t,useEffect:_t,useImperativeHandle:_t,useLayoutEffect:_t,useInsertionEffect:_t,useMemo:_t,useReducer:_t,useRef:_t,useState:_t,useDebugValue:_t,useDeferredValue:_t,useTransition:_t,useSyncExternalStore:_t,useId:_t,useHostTransitionStatus:_t,useFormState:_t,useActionState:_t,useOptimistic:_t,useMemoCache:_t,useCacheRefresh:_t};ql.useEffectEvent=_t;var Nx={readContext:fn,use:Pu,useCallback:function(a,o){return En().memoizedState=[a,o===void 0?null:o],a},useContext:fn,useEffect:dx,useImperativeHandle:function(a,o,l){l=l!=null?l.concat([a]):null,Uu(4194308,4,mx.bind(null,o,a),l)},useLayoutEffect:function(a,o){return Uu(4194308,4,a,o)},useInsertionEffect:function(a,o){Uu(4,2,a,o)},useMemo:function(a,o){var l=En();o=o===void 0?null:o;var d=a();if(os){cn(!0);try{a()}finally{cn(!1)}}return l.memoizedState=[d,o],d},useReducer:function(a,o,l){var d=En();if(l!==void 0){var y=l(o);if(os){cn(!0);try{l(o)}finally{cn(!1)}}}else y=o;return d.memoizedState=d.baseState=y,a={pending:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:y},d.queue=a,a=a.dispatch=a2.bind(null,qe,a),[d.memoizedState,a]},useRef:function(a){var o=En();return a={current:a},o.memoizedState=a},useState:function(a){a=Kp(a);var o=a.queue,l=Ex.bind(null,qe,o);return o.dispatch=l,[a.memoizedState,l]},useDebugValue:Yp,useDeferredValue:function(a,o){var l=En();return Qp(l,a,o)},useTransition:function(){var a=Kp(!1);return a=xx.bind(null,qe,a.queue,!0,!1),En().memoizedState=a,[!1,a]},useSyncExternalStore:function(a,o,l){var d=qe,y=En();if(Ze){if(l===void 0)throw Error(r(407));l=l()}else{if(l=o(),xt===null)throw Error(r(349));(Xe&127)!==0||Yb(d,o,l)}y.memoizedState=l;var b={value:l,getSnapshot:o};return y.queue=b,dx(Xb.bind(null,d,b,a),[a]),d.flags|=2048,fi(9,{destroy:void 0},Qb.bind(null,d,b,l,o),null),l},useId:function(){var a=En(),o=xt.identifierPrefix;if(Ze){var l=Kr,d=$r;l=(d&~(1<<32-lt(d)-1)).toString(32)+l,o="_"+o+"R_"+l,l=Lu++,0<\/script>",b=b.removeChild(b.firstChild);break;case"select":b=typeof d.is=="string"?S.createElement("select",{is:d.is}):S.createElement("select"),d.multiple?b.multiple=!0:d.size&&(b.size=d.size);break;default:b=typeof d.is=="string"?S.createElement(y,{is:d.is}):S.createElement(y)}}b[un]=o,b[Pn]=d;e:for(S=o.child;S!==null;){if(S.tag===5||S.tag===6)b.appendChild(S.stateNode);else if(S.tag!==4&&S.tag!==27&&S.child!==null){S.child.return=S,S=S.child;continue}if(S===o)break e;for(;S.sibling===null;){if(S.return===null||S.return===o)break e;S=S.return}S.sibling.return=S.return,S=S.sibling}o.stateNode=b;e:switch(hn(b,y,d),y){case"button":case"input":case"select":case"textarea":d=!!d.autoFocus;break e;case"img":d=!0;break e;default:d=!1}d&&ka(o)}}return Et(o),ph(o,o.type,a===null?null:a.memoizedProps,o.pendingProps,l),null;case 6:if(a&&o.stateNode!=null)a.memoizedProps!==d&&ka(o);else{if(typeof d!="string"&&o.stateNode===null)throw Error(r(166));if(a=ie.current,ri(o)){if(a=o.stateNode,l=o.memoizedProps,d=null,y=dn,y!==null)switch(y.tag){case 27:case 5:d=y.memoizedProps}a[un]=o,a=!!(a.nodeValue===l||d!==null&&d.suppressHydrationWarning===!0||G0(a.nodeValue,l)),a||Ja(o,!0)}else a=sd(a).createTextNode(d),a[un]=o,o.stateNode=a}return Et(o),null;case 31:if(l=o.memoizedState,a===null||a.memoizedState!==null){if(d=ri(o),l!==null){if(a===null){if(!d)throw Error(r(318));if(a=o.memoizedState,a=a!==null?a.dehydrated:null,!a)throw Error(r(557));a[un]=o}else Jo(),(o.flags&128)===0&&(o.memoizedState=null),o.flags|=4;Et(o),a=!1}else l=Sp(),a!==null&&a.memoizedState!==null&&(a.memoizedState.hydrationErrors=l),a=!0;if(!a)return o.flags&256?(tr(o),o):(tr(o),null);if((o.flags&128)!==0)throw Error(r(558))}return Et(o),null;case 13:if(d=o.memoizedState,a===null||a.memoizedState!==null&&a.memoizedState.dehydrated!==null){if(y=ri(o),d!==null&&d.dehydrated!==null){if(a===null){if(!y)throw Error(r(318));if(y=o.memoizedState,y=y!==null?y.dehydrated:null,!y)throw Error(r(317));y[un]=o}else Jo(),(o.flags&128)===0&&(o.memoizedState=null),o.flags|=4;Et(o),y=!1}else y=Sp(),a!==null&&a.memoizedState!==null&&(a.memoizedState.hydrationErrors=y),y=!0;if(!y)return o.flags&256?(tr(o),o):(tr(o),null)}return tr(o),(o.flags&128)!==0?(o.lanes=l,o):(l=d!==null,a=a!==null&&a.memoizedState!==null,l&&(d=o.child,y=null,d.alternate!==null&&d.alternate.memoizedState!==null&&d.alternate.memoizedState.cachePool!==null&&(y=d.alternate.memoizedState.cachePool.pool),b=null,d.memoizedState!==null&&d.memoizedState.cachePool!==null&&(b=d.memoizedState.cachePool.pool),b!==y&&(d.flags|=2048)),l!==a&&l&&(o.child.flags|=8192),$u(o,o.updateQueue),Et(o),null);case 4:return Se(),a===null&&_h(o.stateNode.containerInfo),Et(o),null;case 10:return va(o.type),Et(o),null;case 19:if(F(Bt),d=o.memoizedState,d===null)return Et(o),null;if(y=(o.flags&128)!==0,b=d.rendering,b===null)if(y)$l(d,!1);else{if(Pt!==0||a!==null&&(a.flags&128)!==0)for(a=o.child;a!==null;){if(b=ju(a),b!==null){for(o.flags|=128,$l(d,!1),a=b.updateQueue,o.updateQueue=a,$u(o,a),o.subtreeFlags=0,a=l,l=o.child;l!==null;)Eb(l,a),l=l.sibling;return N(Bt,Bt.current&1|2),Ze&&ga(o,d.treeForkCount),o.child}a=a.sibling}d.tail!==null&&sn()>Qu&&(o.flags|=128,y=!0,$l(d,!1),o.lanes=4194304)}else{if(!y)if(a=ju(b),a!==null){if(o.flags|=128,y=!0,a=a.updateQueue,o.updateQueue=a,$u(o,a),$l(d,!0),d.tail===null&&d.tailMode==="hidden"&&!b.alternate&&!Ze)return Et(o),null}else 2*sn()-d.renderingStartTime>Qu&&l!==536870912&&(o.flags|=128,y=!0,$l(d,!1),o.lanes=4194304);d.isBackwards?(b.sibling=o.child,o.child=b):(a=d.last,a!==null?a.sibling=b:o.child=b,d.last=b)}return d.tail!==null?(a=d.tail,d.rendering=a,d.tail=a.sibling,d.renderingStartTime=sn(),a.sibling=null,l=Bt.current,N(Bt,y?l&1|2:l&1),Ze&&ga(o,d.treeForkCount),a):(Et(o),null);case 22:case 23:return tr(o),Pp(),d=o.memoizedState!==null,a!==null?a.memoizedState!==null!==d&&(o.flags|=8192):d&&(o.flags|=8192),d?(l&536870912)!==0&&(o.flags&128)===0&&(Et(o),o.subtreeFlags&6&&(o.flags|=8192)):Et(o),l=o.updateQueue,l!==null&&$u(o,l.retryQueue),l=null,a!==null&&a.memoizedState!==null&&a.memoizedState.cachePool!==null&&(l=a.memoizedState.cachePool.pool),d=null,o.memoizedState!==null&&o.memoizedState.cachePool!==null&&(d=o.memoizedState.cachePool.pool),d!==l&&(o.flags|=2048),a!==null&&F(ts),null;case 24:return l=null,a!==null&&(l=a.memoizedState.cache),o.memoizedState.cache!==l&&(o.flags|=2048),va($t),Et(o),null;case 25:return null;case 30:return null}throw Error(r(156,o.tag))}function c2(a,o){switch(wp(o),o.tag){case 1:return a=o.flags,a&65536?(o.flags=a&-65537|128,o):null;case 3:return va($t),Se(),a=o.flags,(a&65536)!==0&&(a&128)===0?(o.flags=a&-65537|128,o):null;case 26:case 27:case 5:return Nt(o),null;case 31:if(o.memoizedState!==null){if(tr(o),o.alternate===null)throw Error(r(340));Jo()}return a=o.flags,a&65536?(o.flags=a&-65537|128,o):null;case 13:if(tr(o),a=o.memoizedState,a!==null&&a.dehydrated!==null){if(o.alternate===null)throw Error(r(340));Jo()}return a=o.flags,a&65536?(o.flags=a&-65537|128,o):null;case 19:return F(Bt),null;case 4:return Se(),null;case 10:return va(o.type),null;case 22:case 23:return tr(o),Pp(),a!==null&&F(ts),a=o.flags,a&65536?(o.flags=a&-65537|128,o):null;case 24:return va($t),null;case 25:return null;default:return null}}function Jx(a,o){switch(wp(o),o.tag){case 3:va($t),Se();break;case 26:case 27:case 5:Nt(o);break;case 4:Se();break;case 31:o.memoizedState!==null&&tr(o);break;case 13:tr(o);break;case 19:F(Bt);break;case 10:va(o.type);break;case 22:case 23:tr(o),Pp(),a!==null&&F(ts);break;case 24:va($t)}}function Kl(a,o){try{var l=o.updateQueue,d=l!==null?l.lastEffect:null;if(d!==null){var y=d.next;l=y;do{if((l.tag&a)===a){d=void 0;var b=l.create,S=l.inst;d=b(),S.destroy=d}l=l.next}while(l!==y)}}catch(D){dt(o,o.return,D)}}function oo(a,o,l){try{var d=o.updateQueue,y=d!==null?d.lastEffect:null;if(y!==null){var b=y.next;d=b;do{if((d.tag&a)===a){var S=d.inst,D=S.destroy;if(D!==void 0){S.destroy=void 0,y=o;var H=l,Y=D;try{Y()}catch(ae){dt(y,H,ae)}}}d=d.next}while(d!==b)}}catch(ae){dt(o,o.return,ae)}}function Zx(a){var o=a.updateQueue;if(o!==null){var l=a.stateNode;try{qb(o,l)}catch(d){dt(a,a.return,d)}}}function e0(a,o,l){l.props=ss(a.type,a.memoizedProps),l.state=a.memoizedState;try{l.componentWillUnmount()}catch(d){dt(a,o,d)}}function Gl(a,o){try{var l=a.ref;if(l!==null){switch(a.tag){case 26:case 27:case 5:var d=a.stateNode;break;case 30:d=a.stateNode;break;default:d=a.stateNode}typeof l=="function"?a.refCleanup=l(d):l.current=d}}catch(y){dt(a,o,y)}}function Gr(a,o){var l=a.ref,d=a.refCleanup;if(l!==null)if(typeof d=="function")try{d()}catch(y){dt(a,o,y)}finally{a.refCleanup=null,a=a.alternate,a!=null&&(a.refCleanup=null)}else if(typeof l=="function")try{l(null)}catch(y){dt(a,o,y)}else l.current=null}function t0(a){var o=a.type,l=a.memoizedProps,d=a.stateNode;try{e:switch(o){case"button":case"input":case"select":case"textarea":l.autoFocus&&d.focus();break e;case"img":l.src?d.src=l.src:l.srcSet&&(d.srcset=l.srcSet)}}catch(y){dt(a,a.return,y)}}function hh(a,o,l){try{var d=a.stateNode;O2(d,a.type,l,o),d[Pn]=o}catch(y){dt(a,a.return,y)}}function n0(a){return a.tag===5||a.tag===3||a.tag===26||a.tag===27&&po(a.type)||a.tag===4}function mh(a){e:for(;;){for(;a.sibling===null;){if(a.return===null||n0(a.return))return null;a=a.return}for(a.sibling.return=a.return,a=a.sibling;a.tag!==5&&a.tag!==6&&a.tag!==18;){if(a.tag===27&&po(a.type)||a.flags&2||a.child===null||a.tag===4)continue e;a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}function gh(a,o,l){var d=a.tag;if(d===5||d===6)a=a.stateNode,o?(l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l).insertBefore(a,o):(o=l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l,o.appendChild(a),l=l._reactRootContainer,l!=null||o.onclick!==null||(o.onclick=pa));else if(d!==4&&(d===27&&po(a.type)&&(l=a.stateNode,o=null),a=a.child,a!==null))for(gh(a,o,l),a=a.sibling;a!==null;)gh(a,o,l),a=a.sibling}function Ku(a,o,l){var d=a.tag;if(d===5||d===6)a=a.stateNode,o?l.insertBefore(a,o):l.appendChild(a);else if(d!==4&&(d===27&&po(a.type)&&(l=a.stateNode),a=a.child,a!==null))for(Ku(a,o,l),a=a.sibling;a!==null;)Ku(a,o,l),a=a.sibling}function r0(a){var o=a.stateNode,l=a.memoizedProps;try{for(var d=a.type,y=o.attributes;y.length;)o.removeAttributeNode(y[0]);hn(o,d,l),o[un]=a,o[Pn]=l}catch(b){dt(a,a.return,b)}}var Sa=!1,Wt=!1,yh=!1,a0=typeof WeakSet=="function"?WeakSet:Set,rn=null;function u2(a,o){if(a=a.containerInfo,Uh=pd,a=gb(a),up(a)){if("selectionStart"in a)var l={start:a.selectionStart,end:a.selectionEnd};else e:{l=(l=a.ownerDocument)&&l.defaultView||window;var d=l.getSelection&&l.getSelection();if(d&&d.rangeCount!==0){l=d.anchorNode;var y=d.anchorOffset,b=d.focusNode;d=d.focusOffset;try{l.nodeType,b.nodeType}catch{l=null;break e}var S=0,D=-1,H=-1,Y=0,ae=0,le=a,X=null;t:for(;;){for(var te;le!==l||y!==0&&le.nodeType!==3||(D=S+y),le!==b||d!==0&&le.nodeType!==3||(H=S+d),le.nodeType===3&&(S+=le.nodeValue.length),(te=le.firstChild)!==null;)X=le,le=te;for(;;){if(le===a)break t;if(X===l&&++Y===y&&(D=S),X===b&&++ae===d&&(H=S),(te=le.nextSibling)!==null)break;le=X,X=le.parentNode}le=te}l=D===-1||H===-1?null:{start:D,end:H}}else l=null}l=l||{start:0,end:0}}else l=null;for(zh={focusedElem:a,selectionRange:l},pd=!1,rn=o;rn!==null;)if(o=rn,a=o.child,(o.subtreeFlags&1028)!==0&&a!==null)a.return=o,rn=a;else for(;rn!==null;){switch(o=rn,b=o.alternate,a=o.flags,o.tag){case 0:if((a&4)!==0&&(a=o.updateQueue,a=a!==null?a.events:null,a!==null))for(l=0;l title"))),hn(b,d,l),b[un]=a,nn(b),d=b;break e;case"link":var S=uw("link","href",y).get(d+(l.href||""));if(S){for(var D=0;Dgt&&(S=gt,gt=Ie,Ie=S);var $=hb(D,Ie),q=hb(D,gt);if($&&q&&(te.rangeCount!==1||te.anchorNode!==$.node||te.anchorOffset!==$.offset||te.focusNode!==q.node||te.focusOffset!==q.offset)){var W=le.createRange();W.setStart($.node,$.offset),te.removeAllRanges(),Ie>gt?(te.addRange(W),te.extend(q.node,q.offset)):(W.setEnd(q.node,q.offset),te.addRange(W))}}}}for(le=[],te=D;te=te.parentNode;)te.nodeType===1&&le.push({element:te,left:te.scrollLeft,top:te.scrollTop});for(typeof D.focus=="function"&&D.focus(),D=0;Dl?32:l,B.T=null,l=Th,Th=null;var b=co,S=Na;if(Qt=0,yi=co=null,Na=0,(st&6)!==0)throw Error(r(331));var D=st;if(st|=4,m0(b.current),f0(b,b.current,S,l),st=D,Zl(0,!1),Ht&&typeof Ht.onPostCommitFiberRoot=="function")try{Ht.onPostCommitFiberRoot(ln,b)}catch{}return!0}finally{re.p=y,B.T=d,M0(a,o)}}function _0(a,o,l){o=mr(l,o),o=rh(a.stateNode,o,2),a=no(a,o,2),a!==null&&(Mt(a,2),Wr(a))}function dt(a,o,l){if(a.tag===3)_0(a,a,l);else for(;o!==null;){if(o.tag===3){_0(o,a,l);break}else if(o.tag===1){var d=o.stateNode;if(typeof o.type.getDerivedStateFromError=="function"||typeof d.componentDidCatch=="function"&&(lo===null||!lo.has(d))){a=mr(l,a),l=Px(2),d=no(o,l,2),d!==null&&(Ix(l,d,o,a),Mt(d,2),Wr(d));break}}o=o.return}}function Nh(a,o,l){var d=a.pingCache;if(d===null){d=a.pingCache=new p2;var y=new Set;d.set(o,y)}else y=d.get(o),y===void 0&&(y=new Set,d.set(o,y));y.has(l)||(xh=!0,y.add(l),a=v2.bind(null,a,o,l),o.then(a,a))}function v2(a,o,l){var d=a.pingCache;d!==null&&d.delete(o),a.pingedLanes|=a.suspendedLanes&l,a.warmLanes&=~l,xt===a&&(Xe&l)===l&&(Pt===4||Pt===3&&(Xe&62914560)===Xe&&300>sn()-Yu?(st&2)===0&&vi(a,0):wh|=l,gi===Xe&&(gi=0)),Wr(a)}function P0(a,o){o===0&&(o=vn()),a=Qo(a,o),a!==null&&(Mt(a,o),Wr(a))}function b2(a){var o=a.memoizedState,l=0;o!==null&&(l=o.retryLane),P0(a,l)}function x2(a,o){var l=0;switch(a.tag){case 31:case 13:var d=a.stateNode,y=a.memoizedState;y!==null&&(l=y.retryLane);break;case 19:d=a.stateNode;break;case 22:d=a.stateNode._retryCache;break;default:throw Error(r(314))}d!==null&&d.delete(o),P0(a,l)}function w2(a,o){return de(a,o)}var nd=null,xi=null,Dh=!1,rd=!1,Rh=!1,fo=0;function Wr(a){a!==xi&&a.next===null&&(xi===null?nd=xi=a:xi=xi.next=a),rd=!0,Dh||(Dh=!0,S2())}function Zl(a,o){if(!Rh&&rd){Rh=!0;do for(var l=!1,d=nd;d!==null;){if(a!==0){var y=d.pendingLanes;if(y===0)var b=0;else{var S=d.suspendedLanes,D=d.pingedLanes;b=(1<<31-lt(42|a)+1)-1,b&=y&~(S&~D),b=b&201326741?b&201326741|1:b?b|2:0}b!==0&&(l=!0,F0(d,b))}else b=Xe,b=Ue(d,d===xt?b:0,d.cancelPendingCommit!==null||d.timeoutHandle!==-1),(b&3)===0||Dt(d,b)||(l=!0,F0(d,b));d=d.next}while(l);Rh=!1}}function k2(){I0()}function I0(){rd=Dh=!1;var a=0;fo!==0&&M2()&&(a=fo);for(var o=sn(),l=null,d=nd;d!==null;){var y=d.next,b=U0(d,o);b===0?(d.next=null,l===null?nd=y:l.next=y,y===null&&(xi=l)):(l=d,(a!==0||(b&3)!==0)&&(rd=!0)),d=y}Qt!==0&&Qt!==5||Zl(a),fo!==0&&(fo=0)}function U0(a,o){for(var l=a.suspendedLanes,d=a.pingedLanes,y=a.expirationTimes,b=a.pendingLanes&-62914561;0D)break;var ae=H.transferSize,le=H.initiatorType;ae&&W0(le)&&(H=H.responseEnd,S+=ae*(H"u"?null:document;function sw(a,o,l){var d=wi;if(d&&typeof o=="string"&&o){var y=pr(o);y='link[rel="'+a+'"][href="'+y+'"]',typeof l=="string"&&(y+='[crossorigin="'+l+'"]'),ow.has(y)||(ow.add(y),a={rel:a,crossOrigin:l,href:o},d.querySelector(y)===null&&(o=d.createElement("link"),hn(o,"link",a),nn(o),d.head.appendChild(o)))}}function B2(a){Da.D(a),sw("dns-prefetch",a,null)}function q2(a,o){Da.C(a,o),sw("preconnect",a,o)}function V2(a,o,l){Da.L(a,o,l);var d=wi;if(d&&a&&o){var y='link[rel="preload"][as="'+pr(o)+'"]';o==="image"&&l&&l.imageSrcSet?(y+='[imagesrcset="'+pr(l.imageSrcSet)+'"]',typeof l.imageSizes=="string"&&(y+='[imagesizes="'+pr(l.imageSizes)+'"]')):y+='[href="'+pr(a)+'"]';var b=y;switch(o){case"style":b=ki(a);break;case"script":b=Si(a)}wr.has(b)||(a=m({rel:"preload",href:o==="image"&&l&&l.imageSrcSet?void 0:a,as:o},l),wr.set(b,a),d.querySelector(y)!==null||o==="style"&&d.querySelector(rc(b))||o==="script"&&d.querySelector(ac(b))||(o=d.createElement("link"),hn(o,"link",a),nn(o),d.head.appendChild(o)))}}function $2(a,o){Da.m(a,o);var l=wi;if(l&&a){var d=o&&typeof o.as=="string"?o.as:"script",y='link[rel="modulepreload"][as="'+pr(d)+'"][href="'+pr(a)+'"]',b=y;switch(d){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":b=Si(a)}if(!wr.has(b)&&(a=m({rel:"modulepreload",href:a},o),wr.set(b,a),l.querySelector(y)===null)){switch(d){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(l.querySelector(ac(b)))return}d=l.createElement("link"),hn(d,"link",a),nn(d),l.head.appendChild(d)}}}function K2(a,o,l){Da.S(a,o,l);var d=wi;if(d&&a){var y=Vs(d).hoistableStyles,b=ki(a);o=o||"default";var S=y.get(b);if(!S){var D={loading:0,preload:null};if(S=d.querySelector(rc(b)))D.loading=5;else{a=m({rel:"stylesheet",href:a,"data-precedence":o},l),(l=wr.get(b))&&Kh(a,l);var H=S=d.createElement("link");nn(H),hn(H,"link",a),H._p=new Promise(function(Y,ae){H.onload=Y,H.onerror=ae}),H.addEventListener("load",function(){D.loading|=1}),H.addEventListener("error",function(){D.loading|=2}),D.loading|=4,ld(S,o,d)}S={type:"stylesheet",instance:S,count:1,state:D},y.set(b,S)}}}function G2(a,o){Da.X(a,o);var l=wi;if(l&&a){var d=Vs(l).hoistableScripts,y=Si(a),b=d.get(y);b||(b=l.querySelector(ac(y)),b||(a=m({src:a,async:!0},o),(o=wr.get(y))&&Gh(a,o),b=l.createElement("script"),nn(b),hn(b,"link",a),l.head.appendChild(b)),b={type:"script",instance:b,count:1,state:null},d.set(y,b))}}function W2(a,o){Da.M(a,o);var l=wi;if(l&&a){var d=Vs(l).hoistableScripts,y=Si(a),b=d.get(y);b||(b=l.querySelector(ac(y)),b||(a=m({src:a,async:!0,type:"module"},o),(o=wr.get(y))&&Gh(a,o),b=l.createElement("script"),nn(b),hn(b,"link",a),l.head.appendChild(b)),b={type:"script",instance:b,count:1,state:null},d.set(y,b))}}function iw(a,o,l,d){var y=(y=ie.current)?id(y):null;if(!y)throw Error(r(446));switch(a){case"meta":case"title":return null;case"style":return typeof l.precedence=="string"&&typeof l.href=="string"?(o=ki(l.href),l=Vs(y).hoistableStyles,d=l.get(o),d||(d={type:"style",instance:null,count:0,state:null},l.set(o,d)),d):{type:"void",instance:null,count:0,state:null};case"link":if(l.rel==="stylesheet"&&typeof l.href=="string"&&typeof l.precedence=="string"){a=ki(l.href);var b=Vs(y).hoistableStyles,S=b.get(a);if(S||(y=y.ownerDocument||y,S={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},b.set(a,S),(b=y.querySelector(rc(a)))&&!b._p&&(S.instance=b,S.state.loading=5),wr.has(a)||(l={rel:"preload",as:"style",href:l.href,crossOrigin:l.crossOrigin,integrity:l.integrity,media:l.media,hrefLang:l.hrefLang,referrerPolicy:l.referrerPolicy},wr.set(a,l),b||Y2(y,a,l,S.state))),o&&d===null)throw Error(r(528,""));return S}if(o&&d!==null)throw Error(r(529,""));return null;case"script":return o=l.async,l=l.src,typeof l=="string"&&o&&typeof o!="function"&&typeof o!="symbol"?(o=Si(l),l=Vs(y).hoistableScripts,d=l.get(o),d||(d={type:"script",instance:null,count:0,state:null},l.set(o,d)),d):{type:"void",instance:null,count:0,state:null};default:throw Error(r(444,a))}}function ki(a){return'href="'+pr(a)+'"'}function rc(a){return'link[rel="stylesheet"]['+a+"]"}function lw(a){return m({},a,{"data-precedence":a.precedence,precedence:null})}function Y2(a,o,l,d){a.querySelector('link[rel="preload"][as="style"]['+o+"]")?d.loading=1:(o=a.createElement("link"),d.preload=o,o.addEventListener("load",function(){return d.loading|=1}),o.addEventListener("error",function(){return d.loading|=2}),hn(o,"link",l),nn(o),a.head.appendChild(o))}function Si(a){return'[src="'+pr(a)+'"]'}function ac(a){return"script[async]"+a}function cw(a,o,l){if(o.count++,o.instance===null)switch(o.type){case"style":var d=a.querySelector('style[data-href~="'+pr(l.href)+'"]');if(d)return o.instance=d,nn(d),d;var y=m({},l,{"data-href":l.href,"data-precedence":l.precedence,href:null,precedence:null});return d=(a.ownerDocument||a).createElement("style"),nn(d),hn(d,"style",y),ld(d,l.precedence,a),o.instance=d;case"stylesheet":y=ki(l.href);var b=a.querySelector(rc(y));if(b)return o.state.loading|=4,o.instance=b,nn(b),b;d=lw(l),(y=wr.get(y))&&Kh(d,y),b=(a.ownerDocument||a).createElement("link"),nn(b);var S=b;return S._p=new Promise(function(D,H){S.onload=D,S.onerror=H}),hn(b,"link",d),o.state.loading|=4,ld(b,l.precedence,a),o.instance=b;case"script":return b=Si(l.src),(y=a.querySelector(ac(b)))?(o.instance=y,nn(y),y):(d=l,(y=wr.get(b))&&(d=m({},l),Gh(d,y)),a=a.ownerDocument||a,y=a.createElement("script"),nn(y),hn(y,"link",d),a.head.appendChild(y),o.instance=y);case"void":return null;default:throw Error(r(443,o.type))}else o.type==="stylesheet"&&(o.state.loading&4)===0&&(d=o.instance,o.state.loading|=4,ld(d,l.precedence,a));return o.instance}function ld(a,o,l){for(var d=l.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),y=d.length?d[d.length-1]:null,b=y,S=0;S title"):null)}function Q2(a,o,l){if(l===1||o.itemProp!=null)return!1;switch(a){case"meta":case"title":return!0;case"style":if(typeof o.precedence!="string"||typeof o.href!="string"||o.href==="")break;return!0;case"link":if(typeof o.rel!="string"||typeof o.href!="string"||o.href===""||o.onLoad||o.onError)break;switch(o.rel){case"stylesheet":return a=o.disabled,typeof o.precedence=="string"&&a==null;default:return!0}case"script":if(o.async&&typeof o.async!="function"&&typeof o.async!="symbol"&&!o.onLoad&&!o.onError&&o.src&&typeof o.src=="string")return!0}return!1}function fw(a){return!(a.type==="stylesheet"&&(a.state.loading&3)===0)}function X2(a,o,l,d){if(l.type==="stylesheet"&&(typeof d.media!="string"||matchMedia(d.media).matches!==!1)&&(l.state.loading&4)===0){if(l.instance===null){var y=ki(d.href),b=o.querySelector(rc(y));if(b){o=b._p,o!==null&&typeof o=="object"&&typeof o.then=="function"&&(a.count++,a=ud.bind(a),o.then(a,a)),l.state.loading|=4,l.instance=b,nn(b);return}b=o.ownerDocument||o,d=lw(d),(y=wr.get(y))&&Kh(d,y),b=b.createElement("link"),nn(b);var S=b;S._p=new Promise(function(D,H){S.onload=D,S.onerror=H}),hn(b,"link",d),l.instance=b}a.stylesheets===null&&(a.stylesheets=new Map),a.stylesheets.set(l,o),(o=l.state.preload)&&(l.state.loading&3)===0&&(a.count++,l=ud.bind(a),o.addEventListener("load",l),o.addEventListener("error",l))}}var Wh=0;function J2(a,o){return a.stylesheets&&a.count===0&&fd(a,a.stylesheets),0Wh?50:800)+o);return a.unsuspend=l,function(){a.unsuspend=null,clearTimeout(d),clearTimeout(y)}}:null}function ud(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)fd(this,this.stylesheets);else if(this.unsuspend){var a=this.unsuspend;this.unsuspend=null,a()}}}var dd=null;function fd(a,o){a.stylesheets=null,a.unsuspend!==null&&(a.count++,dd=new Map,o.forEach(Z2,a),dd=null,ud.call(a))}function Z2(a,o){if(!(o.state.loading&4)){var l=dd.get(a);if(l)var d=l.get(null);else{l=new Map,dd.set(a,l);for(var y=a.querySelectorAll("link[data-precedence],style[data-precedence]"),b=0;b"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),am.exports=yR(),am.exports}var bR=vR();/** +`+d.stack}}var St=Object.prototype.hasOwnProperty,en=e.unstable_scheduleCallback,pe=e.unstable_cancelCallback,st=e.unstable_shouldYield,sn=e.unstable_requestPaint,dt=e.unstable_now,bl=e.unstable_getCurrentPriorityLevel,oe=e.unstable_ImmediatePriority,ve=e.unstable_UserBlockingPriority,Pe=e.unstable_NormalPriority,Ve=e.unstable_LowPriority,Ge=e.unstable_IdlePriority,gn=e.log,yn=e.unstable_setDisableYieldValue,ln=null,Ft=null;function cn(a){if(typeof gn=="function"&&yn(a),Ft&&typeof Ft.setStrictMode=="function")try{Ft.setStrictMode(ln,a)}catch{}}var ct=Math.clz32?Math.clz32:qr,Br=Math.log,Tn=Math.LN2;function qr(a){return a>>>=0,a===0?32:31-(Br(a)/Tn|0)|0}var Us=256,zs=262144,Vo=4194304;function Vr(a){var o=a&42;if(o!==0)return o;switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return a&261888;case 262144:case 524288:case 1048576:case 2097152:return a&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return a&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return a}}function Ue(a,o,l){var d=a.pendingLanes;if(d===0)return 0;var y=0,b=a.suspendedLanes,S=a.pingedLanes;a=a.warmLanes;var D=d&134217727;return D!==0?(d=D&~b,d!==0?y=Vr(d):(S&=D,S!==0?y=Vr(S):l||(l=D&~a,l!==0&&(y=Vr(l))))):(D=d&~b,D!==0?y=Vr(D):S!==0?y=Vr(S):l||(l=d&~a,l!==0&&(y=Vr(l)))),y===0?0:o!==0&&o!==y&&(o&b)===0&&(b=y&-y,l=o&-o,b>=l||b===32&&(l&4194048)!==0)?o:y}function Rt(a,o){return(a.pendingLanes&~(a.suspendedLanes&~a.pingedLanes)&o)===0}function tn(a,o){switch(a){case 1:case 2:case 4:case 8:case 64:return o+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return o+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function vn(){var a=Vo;return Vo<<=1,(Vo&62914560)===0&&(Vo=4194304),a}function Ga(a){for(var o=[],l=0;31>l;l++)o.push(a);return o}function Lt(a,o){a.pendingLanes|=o,o!==268435456&&(a.suspendedLanes=0,a.pingedLanes=0,a.warmLanes=0)}function jn(a,o,l,d,y,b){var S=a.pendingLanes;a.pendingLanes=l,a.suspendedLanes=0,a.pingedLanes=0,a.warmLanes=0,a.expiredLanes&=l,a.entangledLanes&=l,a.errorRecoveryDisabledLanes&=l,a.shellSuspendCounter=0;var D=a.entanglements,H=a.expirationTimes,Y=a.hiddenUpdates;for(l=S&~l;0"u")return null;try{return a.activeElement||a.body}catch{return a.body}}var aD=/[\n"\\]/g;function pr(a){return a.replace(aD,function(o){return"\\"+o.charCodeAt(0).toString(16)+" "})}function Yf(a,o,l,d,y,b,S,D){a.name="",S!=null&&typeof S!="function"&&typeof S!="symbol"&&typeof S!="boolean"?a.type=S:a.removeAttribute("type"),o!=null?S==="number"?(o===0&&a.value===""||a.value!=o)&&(a.value=""+fr(o)):a.value!==""+fr(o)&&(a.value=""+fr(o)):S!=="submit"&&S!=="reset"||a.removeAttribute("value"),o!=null?Qf(a,S,fr(o)):l!=null?Qf(a,S,fr(l)):d!=null&&a.removeAttribute("value"),y==null&&b!=null&&(a.defaultChecked=!!b),y!=null&&(a.checked=y&&typeof y!="function"&&typeof y!="symbol"),D!=null&&typeof D!="function"&&typeof D!="symbol"&&typeof D!="boolean"?a.name=""+fr(D):a.removeAttribute("name")}function $v(a,o,l,d,y,b,S,D){if(b!=null&&typeof b!="function"&&typeof b!="symbol"&&typeof b!="boolean"&&(a.type=b),o!=null||l!=null){if(!(b!=="submit"&&b!=="reset"||o!=null)){Wf(a);return}l=l!=null?""+fr(l):"",o=o!=null?""+fr(o):l,D||o===a.value||(a.value=o),a.defaultValue=o}d=d??y,d=typeof d!="function"&&typeof d!="symbol"&&!!d,a.checked=D?a.checked:!!d,a.defaultChecked=!!d,S!=null&&typeof S!="function"&&typeof S!="symbol"&&typeof S!="boolean"&&(a.name=S),Wf(a)}function Qf(a,o,l){o==="number"&&uu(a.ownerDocument)===a||a.defaultValue===""+l||(a.defaultValue=""+l)}function Ks(a,o,l,d){if(a=a.options,o){o={};for(var y=0;y"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),tp=!1;if(ha)try{var Sl={};Object.defineProperty(Sl,"passive",{get:function(){tp=!0}}),window.addEventListener("test",Sl,Sl),window.removeEventListener("test",Sl,Sl)}catch{tp=!1}var Ya=null,np=null,fu=null;function Jv(){if(fu)return fu;var a,o=np,l=o.length,d,y="value"in Ya?Ya.value:Ya.textContent,b=y.length;for(a=0;a=Cl),ab=" ",ob=!1;function sb(a,o){switch(a){case"keyup":return jD.indexOf(o.keyCode)!==-1;case"keydown":return o.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function ib(a){return a=a.detail,typeof a=="object"&&"data"in a?a.data:null}var Qs=!1;function LD(a,o){switch(a){case"compositionend":return ib(o);case"keypress":return o.which!==32?null:(ob=!0,ab);case"textInput":return a=o.data,a===ab&&ob?null:a;default:return null}}function _D(a,o){if(Qs)return a==="compositionend"||!ip&&sb(a,o)?(a=Jv(),fu=np=Ya=null,Qs=!1,a):null;switch(a){case"paste":return null;case"keypress":if(!(o.ctrlKey||o.altKey||o.metaKey)||o.ctrlKey&&o.altKey){if(o.char&&1=o)return{node:l,offset:o-a};a=d}e:{for(;l;){if(l.nextSibling){l=l.nextSibling;break e}l=l.parentNode}l=void 0}l=mb(l)}}function yb(a,o){return a&&o?a===o?!0:a&&a.nodeType===3?!1:o&&o.nodeType===3?yb(a,o.parentNode):"contains"in a?a.contains(o):a.compareDocumentPosition?!!(a.compareDocumentPosition(o)&16):!1:!1}function vb(a){a=a!=null&&a.ownerDocument!=null&&a.ownerDocument.defaultView!=null?a.ownerDocument.defaultView:window;for(var o=uu(a.document);o instanceof a.HTMLIFrameElement;){try{var l=typeof o.contentWindow.location.href=="string"}catch{l=!1}if(l)a=o.contentWindow;else break;o=uu(a.document)}return o}function up(a){var o=a&&a.nodeName&&a.nodeName.toLowerCase();return o&&(o==="input"&&(a.type==="text"||a.type==="search"||a.type==="tel"||a.type==="url"||a.type==="password")||o==="textarea"||a.contentEditable==="true")}var qD=ha&&"documentMode"in document&&11>=document.documentMode,Xs=null,dp=null,Rl=null,fp=!1;function bb(a,o,l){var d=l.window===l?l.document:l.nodeType===9?l:l.ownerDocument;fp||Xs==null||Xs!==uu(d)||(d=Xs,"selectionStart"in d&&up(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Rl&&Dl(Rl,d)||(Rl=d,d=od(dp,"onSelect"),0>=S,y-=S,$r=1<<32-ct(o)+y|l<$e?(Je=Re,Re=null):Je=Re.sibling;var ot=X($,Re,W[$e],se);if(ot===null){Re===null&&(Re=Je);break}a&&Re&&ot.alternate===null&&o($,Re),q=b(ot,q,$e),at===null?Me=ot:at.sibling=ot,at=ot,Re=Je}if($e===W.length)return l($,Re),et&&ga($,$e),Me;if(Re===null){for(;$e$e?(Je=Re,Re=null):Je=Re.sibling;var vo=X($,Re,ot.value,se);if(vo===null){Re===null&&(Re=Je);break}a&&Re&&vo.alternate===null&&o($,Re),q=b(vo,q,$e),at===null?Me=vo:at.sibling=vo,at=vo,Re=Je}if(ot.done)return l($,Re),et&&ga($,$e),Me;if(Re===null){for(;!ot.done;$e++,ot=W.next())ot=le($,ot.value,se),ot!==null&&(q=b(ot,q,$e),at===null?Me=ot:at.sibling=ot,at=ot);return et&&ga($,$e),Me}for(Re=d(Re);!ot.done;$e++,ot=W.next())ot=te(Re,$,$e,ot.value,se),ot!==null&&(a&&ot.alternate!==null&&Re.delete(ot.key===null?$e:ot.key),q=b(ot,q,$e),at===null?Me=ot:at.sibling=ot,at=ot);return a&&Re.forEach(function(c2){return o($,c2)}),et&&ga($,$e),Me}function vt($,q,W,se){if(typeof W=="object"&&W!==null&&W.type===E&&W.key===null&&(W=W.props.children),typeof W=="object"&&W!==null){switch(W.$$typeof){case x:e:{for(var Me=W.key;q!==null;){if(q.key===Me){if(Me=W.type,Me===E){if(q.tag===7){l($,q.sibling),se=y(q,W.props.children),se.return=$,$=se;break e}}else if(q.elementType===Me||typeof Me=="object"&&Me!==null&&Me.$$typeof===L&&ns(Me)===q.type){l($,q.sibling),se=y(q,W.props),Pl(se,W),se.return=$,$=se;break e}l($,q);break}else o($,q);q=q.sibling}W.type===E?(se=Xo(W.props.children,$.mode,se,W.key),se.return=$,$=se):(se=ku(W.type,W.key,W.props,null,$.mode,se),Pl(se,W),se.return=$,$=se)}return S($);case w:e:{for(Me=W.key;q!==null;){if(q.key===Me)if(q.tag===4&&q.stateNode.containerInfo===W.containerInfo&&q.stateNode.implementation===W.implementation){l($,q.sibling),se=y(q,W.children||[]),se.return=$,$=se;break e}else{l($,q);break}else o($,q);q=q.sibling}se=bp(W,$.mode,se),se.return=$,$=se}return S($);case L:return W=ns(W),vt($,q,W,se)}if(Z(W))return De($,q,W,se);if(Q(W)){if(Me=Q(W),typeof Me!="function")throw Error(r(150));return W=Me.call(W),Ie($,q,W,se)}if(typeof W.then=="function")return vt($,q,Du(W),se);if(W.$$typeof===O)return vt($,q,Eu($,W),se);Ru($,W)}return typeof W=="string"&&W!==""||typeof W=="number"||typeof W=="bigint"?(W=""+W,q!==null&&q.tag===6?(l($,q.sibling),se=y(q,W),se.return=$,$=se):(l($,q),se=vp(W,$.mode,se),se.return=$,$=se),S($)):l($,q)}return function($,q,W,se){try{_l=0;var Me=vt($,q,W,se);return li=null,Me}catch(Re){if(Re===ii||Re===Au)throw Re;var at=Zn(29,Re,null,$.mode);return at.lanes=se,at.return=$,at}finally{}}}var as=Bb(!0),qb=Bb(!1),eo=!1;function Op(a){a.updateQueue={baseState:a.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function jp(a,o){a=a.updateQueue,o.updateQueue===a&&(o.updateQueue={baseState:a.baseState,firstBaseUpdate:a.firstBaseUpdate,lastBaseUpdate:a.lastBaseUpdate,shared:a.shared,callbacks:null})}function to(a){return{lane:a,tag:0,payload:null,callback:null,next:null}}function no(a,o,l){var d=a.updateQueue;if(d===null)return null;if(d=d.shared,(it&2)!==0){var y=d.pending;return y===null?o.next=o:(o.next=y.next,y.next=o),d.pending=o,o=wu(a),Cb(a,null,l),o}return xu(a,d,o,l),wu(a)}function Il(a,o,l){if(o=o.updateQueue,o!==null&&(o=o.shared,(l&4194048)!==0)){var d=o.lanes;d&=a.pendingLanes,l|=d,o.lanes=l,Mn(a,l)}}function Mp(a,o){var l=a.updateQueue,d=a.alternate;if(d!==null&&(d=d.updateQueue,l===d)){var y=null,b=null;if(l=l.firstBaseUpdate,l!==null){do{var S={lane:l.lane,tag:l.tag,payload:l.payload,callback:null,next:null};b===null?y=b=S:b=b.next=S,l=l.next}while(l!==null);b===null?y=b=o:b=b.next=o}else y=b=o;l={baseState:d.baseState,firstBaseUpdate:y,lastBaseUpdate:b,shared:d.shared,callbacks:d.callbacks},a.updateQueue=l;return}a=l.lastBaseUpdate,a===null?l.firstBaseUpdate=o:a.next=o,l.lastBaseUpdate=o}var Lp=!1;function Ul(){if(Lp){var a=si;if(a!==null)throw a}}function zl(a,o,l,d){Lp=!1;var y=a.updateQueue;eo=!1;var b=y.firstBaseUpdate,S=y.lastBaseUpdate,D=y.shared.pending;if(D!==null){y.shared.pending=null;var H=D,Y=H.next;H.next=null,S===null?b=Y:S.next=Y,S=H;var ae=a.alternate;ae!==null&&(ae=ae.updateQueue,D=ae.lastBaseUpdate,D!==S&&(D===null?ae.firstBaseUpdate=Y:D.next=Y,ae.lastBaseUpdate=H))}if(b!==null){var le=y.baseState;S=0,ae=Y=H=null,D=b;do{var X=D.lane&-536870913,te=X!==D.lane;if(te?(Xe&X)===X:(d&X)===X){X!==0&&X===oi&&(Lp=!0),ae!==null&&(ae=ae.next={lane:0,tag:D.tag,payload:D.payload,callback:null,next:null});e:{var De=a,Ie=D;X=o;var vt=l;switch(Ie.tag){case 1:if(De=Ie.payload,typeof De=="function"){le=De.call(vt,le,X);break e}le=De;break e;case 3:De.flags=De.flags&-65537|128;case 0:if(De=Ie.payload,X=typeof De=="function"?De.call(vt,le,X):De,X==null)break e;le=m({},le,X);break e;case 2:eo=!0}}X=D.callback,X!==null&&(a.flags|=64,te&&(a.flags|=8192),te=y.callbacks,te===null?y.callbacks=[X]:te.push(X))}else te={lane:X,tag:D.tag,payload:D.payload,callback:D.callback,next:null},ae===null?(Y=ae=te,H=le):ae=ae.next=te,S|=X;if(D=D.next,D===null){if(D=y.shared.pending,D===null)break;te=D,D=te.next,te.next=null,y.lastBaseUpdate=te,y.shared.pending=null}}while(!0);ae===null&&(H=le),y.baseState=H,y.firstBaseUpdate=Y,y.lastBaseUpdate=ae,b===null&&(y.shared.lanes=0),io|=S,a.lanes=S,a.memoizedState=le}}function Vb(a,o){if(typeof a!="function")throw Error(r(191,a));a.call(o)}function $b(a,o){var l=a.callbacks;if(l!==null)for(a.callbacks=null,a=0;ab?b:8;var S=B.T,D={};B.T=D,Zp(a,!1,o,l);try{var H=y(),Y=B.S;if(Y!==null&&Y(D,H),H!==null&&typeof H=="object"&&typeof H.then=="function"){var ae=JD(H,d);Bl(a,o,ae,ar(a))}else Bl(a,o,d,ar(a))}catch(le){Bl(a,o,{then:function(){},status:"rejected",reason:le},ar())}finally{ne.p=b,S!==null&&D.types!==null&&(S.types=D.types),B.T=S}}function aR(){}function Xp(a,o,l,d){if(a.tag!==5)throw Error(r(476));var y=Sx(a).queue;kx(a,y,o,ye,l===null?aR:function(){return Tx(a),l(d)})}function Sx(a){var o=a.memoizedState;if(o!==null)return o;o={memoizedState:ye,baseState:ye,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:xa,lastRenderedState:ye},next:null};var l={};return o.next={memoizedState:l,baseState:l,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:xa,lastRenderedState:l},next:null},a.memoizedState=o,a=a.alternate,a!==null&&(a.memoizedState=o),o}function Tx(a){var o=Sx(a);o.next===null&&(o=a.alternate.memoizedState),Bl(a,o.next.queue,{},ar())}function Jp(){return fn(oc)}function Ex(){return Bt().memoizedState}function Cx(){return Bt().memoizedState}function oR(a){for(var o=a.return;o!==null;){switch(o.tag){case 24:case 3:var l=ar();a=to(l);var d=no(o,a,l);d!==null&&(Hn(d,o,l),Il(d,o,l)),o={cache:Ap()},a.payload=o;return}o=o.return}}function sR(a,o,l){var d=ar();l={lane:d,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null},Fu(a)?Nx(o,l):(l=gp(a,o,l,d),l!==null&&(Hn(l,a,d),Dx(l,o,d)))}function Ax(a,o,l){var d=ar();Bl(a,o,l,d)}function Bl(a,o,l,d){var y={lane:d,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null};if(Fu(a))Nx(o,y);else{var b=a.alternate;if(a.lanes===0&&(b===null||b.lanes===0)&&(b=o.lastRenderedReducer,b!==null))try{var S=o.lastRenderedState,D=b(S,l);if(y.hasEagerState=!0,y.eagerState=D,Jn(D,S))return xu(a,o,y,0),xt===null&&bu(),!1}catch{}finally{}if(l=gp(a,o,y,d),l!==null)return Hn(l,a,d),Dx(l,o,d),!0}return!1}function Zp(a,o,l,d){if(d={lane:2,revertLane:Oh(),gesture:null,action:d,hasEagerState:!1,eagerState:null,next:null},Fu(a)){if(o)throw Error(r(479))}else o=gp(a,l,d,2),o!==null&&Hn(o,a,2)}function Fu(a){var o=a.alternate;return a===qe||o!==null&&o===qe}function Nx(a,o){ui=Mu=!0;var l=a.pending;l===null?o.next=o:(o.next=l.next,l.next=o),a.pending=o}function Dx(a,o,l){if((l&4194048)!==0){var d=o.lanes;d&=a.pendingLanes,l|=d,o.lanes=l,Mn(a,l)}}var ql={readContext:fn,use:Pu,useCallback:_t,useContext:_t,useEffect:_t,useImperativeHandle:_t,useLayoutEffect:_t,useInsertionEffect:_t,useMemo:_t,useReducer:_t,useRef:_t,useState:_t,useDebugValue:_t,useDeferredValue:_t,useTransition:_t,useSyncExternalStore:_t,useId:_t,useHostTransitionStatus:_t,useFormState:_t,useActionState:_t,useOptimistic:_t,useMemoCache:_t,useCacheRefresh:_t};ql.useEffectEvent=_t;var Rx={readContext:fn,use:Pu,useCallback:function(a,o){return En().memoizedState=[a,o===void 0?null:o],a},useContext:fn,useEffect:px,useImperativeHandle:function(a,o,l){l=l!=null?l.concat([a]):null,Uu(4194308,4,yx.bind(null,o,a),l)},useLayoutEffect:function(a,o){return Uu(4194308,4,a,o)},useInsertionEffect:function(a,o){Uu(4,2,a,o)},useMemo:function(a,o){var l=En();o=o===void 0?null:o;var d=a();if(os){cn(!0);try{a()}finally{cn(!1)}}return l.memoizedState=[d,o],d},useReducer:function(a,o,l){var d=En();if(l!==void 0){var y=l(o);if(os){cn(!0);try{l(o)}finally{cn(!1)}}}else y=o;return d.memoizedState=d.baseState=y,a={pending:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:y},d.queue=a,a=a.dispatch=sR.bind(null,qe,a),[d.memoizedState,a]},useRef:function(a){var o=En();return a={current:a},o.memoizedState=a},useState:function(a){a=Kp(a);var o=a.queue,l=Ax.bind(null,qe,o);return o.dispatch=l,[a.memoizedState,l]},useDebugValue:Yp,useDeferredValue:function(a,o){var l=En();return Qp(l,a,o)},useTransition:function(){var a=Kp(!1);return a=kx.bind(null,qe,a.queue,!0,!1),En().memoizedState=a,[!1,a]},useSyncExternalStore:function(a,o,l){var d=qe,y=En();if(et){if(l===void 0)throw Error(r(407));l=l()}else{if(l=o(),xt===null)throw Error(r(349));(Xe&127)!==0||Xb(d,o,l)}y.memoizedState=l;var b={value:l,getSnapshot:o};return y.queue=b,px(Zb.bind(null,d,b,a),[a]),d.flags|=2048,fi(9,{destroy:void 0},Jb.bind(null,d,b,l,o),null),l},useId:function(){var a=En(),o=xt.identifierPrefix;if(et){var l=Kr,d=$r;l=(d&~(1<<32-ct(d)-1)).toString(32)+l,o="_"+o+"R_"+l,l=Lu++,0<\/script>",b=b.removeChild(b.firstChild);break;case"select":b=typeof d.is=="string"?S.createElement("select",{is:d.is}):S.createElement("select"),d.multiple?b.multiple=!0:d.size&&(b.size=d.size);break;default:b=typeof d.is=="string"?S.createElement(y,{is:d.is}):S.createElement(y)}}b[un]=o,b[_n]=d;e:for(S=o.child;S!==null;){if(S.tag===5||S.tag===6)b.appendChild(S.stateNode);else if(S.tag!==4&&S.tag!==27&&S.child!==null){S.child.return=S,S=S.child;continue}if(S===o)break e;for(;S.sibling===null;){if(S.return===null||S.return===o)break e;S=S.return}S.sibling.return=S.return,S=S.sibling}o.stateNode=b;e:switch(hn(b,y,d),y){case"button":case"input":case"select":case"textarea":d=!!d.autoFocus;break e;case"img":d=!0;break e;default:d=!1}d&&ka(o)}}return Ct(o),ph(o,o.type,a===null?null:a.memoizedProps,o.pendingProps,l),null;case 6:if(a&&o.stateNode!=null)a.memoizedProps!==d&&ka(o);else{if(typeof d!="string"&&o.stateNode===null)throw Error(r(166));if(a=ie.current,ri(o)){if(a=o.stateNode,l=o.memoizedProps,d=null,y=dn,y!==null)switch(y.tag){case 27:case 5:d=y.memoizedProps}a[un]=o,a=!!(a.nodeValue===l||d!==null&&d.suppressHydrationWarning===!0||Yw(a.nodeValue,l)),a||Ja(o,!0)}else a=sd(a).createTextNode(d),a[un]=o,o.stateNode=a}return Ct(o),null;case 31:if(l=o.memoizedState,a===null||a.memoizedState!==null){if(d=ri(o),l!==null){if(a===null){if(!d)throw Error(r(318));if(a=o.memoizedState,a=a!==null?a.dehydrated:null,!a)throw Error(r(557));a[un]=o}else Jo(),(o.flags&128)===0&&(o.memoizedState=null),o.flags|=4;Ct(o),a=!1}else l=Sp(),a!==null&&a.memoizedState!==null&&(a.memoizedState.hydrationErrors=l),a=!0;if(!a)return o.flags&256?(tr(o),o):(tr(o),null);if((o.flags&128)!==0)throw Error(r(558))}return Ct(o),null;case 13:if(d=o.memoizedState,a===null||a.memoizedState!==null&&a.memoizedState.dehydrated!==null){if(y=ri(o),d!==null&&d.dehydrated!==null){if(a===null){if(!y)throw Error(r(318));if(y=o.memoizedState,y=y!==null?y.dehydrated:null,!y)throw Error(r(317));y[un]=o}else Jo(),(o.flags&128)===0&&(o.memoizedState=null),o.flags|=4;Ct(o),y=!1}else y=Sp(),a!==null&&a.memoizedState!==null&&(a.memoizedState.hydrationErrors=y),y=!0;if(!y)return o.flags&256?(tr(o),o):(tr(o),null)}return tr(o),(o.flags&128)!==0?(o.lanes=l,o):(l=d!==null,a=a!==null&&a.memoizedState!==null,l&&(d=o.child,y=null,d.alternate!==null&&d.alternate.memoizedState!==null&&d.alternate.memoizedState.cachePool!==null&&(y=d.alternate.memoizedState.cachePool.pool),b=null,d.memoizedState!==null&&d.memoizedState.cachePool!==null&&(b=d.memoizedState.cachePool.pool),b!==y&&(d.flags|=2048)),l!==a&&l&&(o.child.flags|=8192),$u(o,o.updateQueue),Ct(o),null);case 4:return Se(),a===null&&_h(o.stateNode.containerInfo),Ct(o),null;case 10:return va(o.type),Ct(o),null;case 19:if(F(Ht),d=o.memoizedState,d===null)return Ct(o),null;if(y=(o.flags&128)!==0,b=d.rendering,b===null)if(y)$l(d,!1);else{if(Pt!==0||a!==null&&(a.flags&128)!==0)for(a=o.child;a!==null;){if(b=ju(a),b!==null){for(o.flags|=128,$l(d,!1),a=b.updateQueue,o.updateQueue=a,$u(o,a),o.subtreeFlags=0,a=l,l=o.child;l!==null;)Ab(l,a),l=l.sibling;return N(Ht,Ht.current&1|2),et&&ga(o,d.treeForkCount),o.child}a=a.sibling}d.tail!==null&&dt()>Qu&&(o.flags|=128,y=!0,$l(d,!1),o.lanes=4194304)}else{if(!y)if(a=ju(b),a!==null){if(o.flags|=128,y=!0,a=a.updateQueue,o.updateQueue=a,$u(o,a),$l(d,!0),d.tail===null&&d.tailMode==="hidden"&&!b.alternate&&!et)return Ct(o),null}else 2*dt()-d.renderingStartTime>Qu&&l!==536870912&&(o.flags|=128,y=!0,$l(d,!1),o.lanes=4194304);d.isBackwards?(b.sibling=o.child,o.child=b):(a=d.last,a!==null?a.sibling=b:o.child=b,d.last=b)}return d.tail!==null?(a=d.tail,d.rendering=a,d.tail=a.sibling,d.renderingStartTime=dt(),a.sibling=null,l=Ht.current,N(Ht,y?l&1|2:l&1),et&&ga(o,d.treeForkCount),a):(Ct(o),null);case 22:case 23:return tr(o),Pp(),d=o.memoizedState!==null,a!==null?a.memoizedState!==null!==d&&(o.flags|=8192):d&&(o.flags|=8192),d?(l&536870912)!==0&&(o.flags&128)===0&&(Ct(o),o.subtreeFlags&6&&(o.flags|=8192)):Ct(o),l=o.updateQueue,l!==null&&$u(o,l.retryQueue),l=null,a!==null&&a.memoizedState!==null&&a.memoizedState.cachePool!==null&&(l=a.memoizedState.cachePool.pool),d=null,o.memoizedState!==null&&o.memoizedState.cachePool!==null&&(d=o.memoizedState.cachePool.pool),d!==l&&(o.flags|=2048),a!==null&&F(ts),null;case 24:return l=null,a!==null&&(l=a.memoizedState.cache),o.memoizedState.cache!==l&&(o.flags|=2048),va(Vt),Ct(o),null;case 25:return null;case 30:return null}throw Error(r(156,o.tag))}function dR(a,o){switch(wp(o),o.tag){case 1:return a=o.flags,a&65536?(o.flags=a&-65537|128,o):null;case 3:return va(Vt),Se(),a=o.flags,(a&65536)!==0&&(a&128)===0?(o.flags=a&-65537|128,o):null;case 26:case 27:case 5:return Dt(o),null;case 31:if(o.memoizedState!==null){if(tr(o),o.alternate===null)throw Error(r(340));Jo()}return a=o.flags,a&65536?(o.flags=a&-65537|128,o):null;case 13:if(tr(o),a=o.memoizedState,a!==null&&a.dehydrated!==null){if(o.alternate===null)throw Error(r(340));Jo()}return a=o.flags,a&65536?(o.flags=a&-65537|128,o):null;case 19:return F(Ht),null;case 4:return Se(),null;case 10:return va(o.type),null;case 22:case 23:return tr(o),Pp(),a!==null&&F(ts),a=o.flags,a&65536?(o.flags=a&-65537|128,o):null;case 24:return va(Vt),null;case 25:return null;default:return null}}function ew(a,o){switch(wp(o),o.tag){case 3:va(Vt),Se();break;case 26:case 27:case 5:Dt(o);break;case 4:Se();break;case 31:o.memoizedState!==null&&tr(o);break;case 13:tr(o);break;case 19:F(Ht);break;case 10:va(o.type);break;case 22:case 23:tr(o),Pp(),a!==null&&F(ts);break;case 24:va(Vt)}}function Kl(a,o){try{var l=o.updateQueue,d=l!==null?l.lastEffect:null;if(d!==null){var y=d.next;l=y;do{if((l.tag&a)===a){d=void 0;var b=l.create,S=l.inst;d=b(),S.destroy=d}l=l.next}while(l!==y)}}catch(D){pt(o,o.return,D)}}function oo(a,o,l){try{var d=o.updateQueue,y=d!==null?d.lastEffect:null;if(y!==null){var b=y.next;d=b;do{if((d.tag&a)===a){var S=d.inst,D=S.destroy;if(D!==void 0){S.destroy=void 0,y=o;var H=l,Y=D;try{Y()}catch(ae){pt(y,H,ae)}}}d=d.next}while(d!==b)}}catch(ae){pt(o,o.return,ae)}}function tw(a){var o=a.updateQueue;if(o!==null){var l=a.stateNode;try{$b(o,l)}catch(d){pt(a,a.return,d)}}}function nw(a,o,l){l.props=ss(a.type,a.memoizedProps),l.state=a.memoizedState;try{l.componentWillUnmount()}catch(d){pt(a,o,d)}}function Gl(a,o){try{var l=a.ref;if(l!==null){switch(a.tag){case 26:case 27:case 5:var d=a.stateNode;break;case 30:d=a.stateNode;break;default:d=a.stateNode}typeof l=="function"?a.refCleanup=l(d):l.current=d}}catch(y){pt(a,o,y)}}function Gr(a,o){var l=a.ref,d=a.refCleanup;if(l!==null)if(typeof d=="function")try{d()}catch(y){pt(a,o,y)}finally{a.refCleanup=null,a=a.alternate,a!=null&&(a.refCleanup=null)}else if(typeof l=="function")try{l(null)}catch(y){pt(a,o,y)}else l.current=null}function rw(a){var o=a.type,l=a.memoizedProps,d=a.stateNode;try{e:switch(o){case"button":case"input":case"select":case"textarea":l.autoFocus&&d.focus();break e;case"img":l.src?d.src=l.src:l.srcSet&&(d.srcset=l.srcSet)}}catch(y){pt(a,a.return,y)}}function hh(a,o,l){try{var d=a.stateNode;MR(d,a.type,l,o),d[_n]=o}catch(y){pt(a,a.return,y)}}function aw(a){return a.tag===5||a.tag===3||a.tag===26||a.tag===27&&po(a.type)||a.tag===4}function mh(a){e:for(;;){for(;a.sibling===null;){if(a.return===null||aw(a.return))return null;a=a.return}for(a.sibling.return=a.return,a=a.sibling;a.tag!==5&&a.tag!==6&&a.tag!==18;){if(a.tag===27&&po(a.type)||a.flags&2||a.child===null||a.tag===4)continue e;a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}function gh(a,o,l){var d=a.tag;if(d===5||d===6)a=a.stateNode,o?(l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l).insertBefore(a,o):(o=l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l,o.appendChild(a),l=l._reactRootContainer,l!=null||o.onclick!==null||(o.onclick=pa));else if(d!==4&&(d===27&&po(a.type)&&(l=a.stateNode,o=null),a=a.child,a!==null))for(gh(a,o,l),a=a.sibling;a!==null;)gh(a,o,l),a=a.sibling}function Ku(a,o,l){var d=a.tag;if(d===5||d===6)a=a.stateNode,o?l.insertBefore(a,o):l.appendChild(a);else if(d!==4&&(d===27&&po(a.type)&&(l=a.stateNode),a=a.child,a!==null))for(Ku(a,o,l),a=a.sibling;a!==null;)Ku(a,o,l),a=a.sibling}function ow(a){var o=a.stateNode,l=a.memoizedProps;try{for(var d=a.type,y=o.attributes;y.length;)o.removeAttributeNode(y[0]);hn(o,d,l),o[un]=a,o[_n]=l}catch(b){pt(a,a.return,b)}}var Sa=!1,Gt=!1,yh=!1,sw=typeof WeakSet=="function"?WeakSet:Set,rn=null;function fR(a,o){if(a=a.containerInfo,Uh=pd,a=vb(a),up(a)){if("selectionStart"in a)var l={start:a.selectionStart,end:a.selectionEnd};else e:{l=(l=a.ownerDocument)&&l.defaultView||window;var d=l.getSelection&&l.getSelection();if(d&&d.rangeCount!==0){l=d.anchorNode;var y=d.anchorOffset,b=d.focusNode;d=d.focusOffset;try{l.nodeType,b.nodeType}catch{l=null;break e}var S=0,D=-1,H=-1,Y=0,ae=0,le=a,X=null;t:for(;;){for(var te;le!==l||y!==0&&le.nodeType!==3||(D=S+y),le!==b||d!==0&&le.nodeType!==3||(H=S+d),le.nodeType===3&&(S+=le.nodeValue.length),(te=le.firstChild)!==null;)X=le,le=te;for(;;){if(le===a)break t;if(X===l&&++Y===y&&(D=S),X===b&&++ae===d&&(H=S),(te=le.nextSibling)!==null)break;le=X,X=le.parentNode}le=te}l=D===-1||H===-1?null:{start:D,end:H}}else l=null}l=l||{start:0,end:0}}else l=null;for(zh={focusedElem:a,selectionRange:l},pd=!1,rn=o;rn!==null;)if(o=rn,a=o.child,(o.subtreeFlags&1028)!==0&&a!==null)a.return=o,rn=a;else for(;rn!==null;){switch(o=rn,b=o.alternate,a=o.flags,o.tag){case 0:if((a&4)!==0&&(a=o.updateQueue,a=a!==null?a.events:null,a!==null))for(l=0;l title"))),hn(b,d,l),b[un]=a,nn(b),d=b;break e;case"link":var S=f0("link","href",y).get(d+(l.href||""));if(S){for(var D=0;Dvt&&(S=vt,vt=Ie,Ie=S);var $=gb(D,Ie),q=gb(D,vt);if($&&q&&(te.rangeCount!==1||te.anchorNode!==$.node||te.anchorOffset!==$.offset||te.focusNode!==q.node||te.focusOffset!==q.offset)){var W=le.createRange();W.setStart($.node,$.offset),te.removeAllRanges(),Ie>vt?(te.addRange(W),te.extend(q.node,q.offset)):(W.setEnd(q.node,q.offset),te.addRange(W))}}}}for(le=[],te=D;te=te.parentNode;)te.nodeType===1&&le.push({element:te,left:te.scrollLeft,top:te.scrollTop});for(typeof D.focus=="function"&&D.focus(),D=0;Dl?32:l,B.T=null,l=Th,Th=null;var b=co,S=Na;if(Yt=0,yi=co=null,Na=0,(it&6)!==0)throw Error(r(331));var D=it;if(it|=4,yw(b.current),hw(b,b.current,S,l),it=D,Zl(0,!1),Ft&&typeof Ft.onPostCommitFiberRoot=="function")try{Ft.onPostCommitFiberRoot(ln,b)}catch{}return!0}finally{ne.p=y,B.T=d,_w(a,o)}}function Iw(a,o,l){o=mr(l,o),o=rh(a.stateNode,o,2),a=no(a,o,2),a!==null&&(Lt(a,2),Wr(a))}function pt(a,o,l){if(a.tag===3)Iw(a,a,l);else for(;o!==null;){if(o.tag===3){Iw(o,a,l);break}else if(o.tag===1){var d=o.stateNode;if(typeof o.type.getDerivedStateFromError=="function"||typeof d.componentDidCatch=="function"&&(lo===null||!lo.has(d))){a=mr(l,a),l=Ux(2),d=no(o,l,2),d!==null&&(zx(l,d,o,a),Lt(d,2),Wr(d));break}}o=o.return}}function Nh(a,o,l){var d=a.pingCache;if(d===null){d=a.pingCache=new mR;var y=new Set;d.set(o,y)}else y=d.get(o),y===void 0&&(y=new Set,d.set(o,y));y.has(l)||(xh=!0,y.add(l),a=xR.bind(null,a,o,l),o.then(a,a))}function xR(a,o,l){var d=a.pingCache;d!==null&&d.delete(o),a.pingedLanes|=a.suspendedLanes&l,a.warmLanes&=~l,xt===a&&(Xe&l)===l&&(Pt===4||Pt===3&&(Xe&62914560)===Xe&&300>dt()-Yu?(it&2)===0&&vi(a,0):wh|=l,gi===Xe&&(gi=0)),Wr(a)}function Uw(a,o){o===0&&(o=vn()),a=Qo(a,o),a!==null&&(Lt(a,o),Wr(a))}function wR(a){var o=a.memoizedState,l=0;o!==null&&(l=o.retryLane),Uw(a,l)}function kR(a,o){var l=0;switch(a.tag){case 31:case 13:var d=a.stateNode,y=a.memoizedState;y!==null&&(l=y.retryLane);break;case 19:d=a.stateNode;break;case 22:d=a.stateNode._retryCache;break;default:throw Error(r(314))}d!==null&&d.delete(o),Uw(a,l)}function SR(a,o){return en(a,o)}var nd=null,xi=null,Dh=!1,rd=!1,Rh=!1,fo=0;function Wr(a){a!==xi&&a.next===null&&(xi===null?nd=xi=a:xi=xi.next=a),rd=!0,Dh||(Dh=!0,ER())}function Zl(a,o){if(!Rh&&rd){Rh=!0;do for(var l=!1,d=nd;d!==null;){if(a!==0){var y=d.pendingLanes;if(y===0)var b=0;else{var S=d.suspendedLanes,D=d.pingedLanes;b=(1<<31-ct(42|a)+1)-1,b&=y&~(S&~D),b=b&201326741?b&201326741|1:b?b|2:0}b!==0&&(l=!0,Bw(d,b))}else b=Xe,b=Ue(d,d===xt?b:0,d.cancelPendingCommit!==null||d.timeoutHandle!==-1),(b&3)===0||Rt(d,b)||(l=!0,Bw(d,b));d=d.next}while(l);Rh=!1}}function TR(){zw()}function zw(){rd=Dh=!1;var a=0;fo!==0&&_R()&&(a=fo);for(var o=dt(),l=null,d=nd;d!==null;){var y=d.next,b=Fw(d,o);b===0?(d.next=null,l===null?nd=y:l.next=y,y===null&&(xi=l)):(l=d,(a!==0||(b&3)!==0)&&(rd=!0)),d=y}Yt!==0&&Yt!==5||Zl(a),fo!==0&&(fo=0)}function Fw(a,o){for(var l=a.suspendedLanes,d=a.pingedLanes,y=a.expirationTimes,b=a.pendingLanes&-62914561;0D)break;var ae=H.transferSize,le=H.initiatorType;ae&&Qw(le)&&(H=H.responseEnd,S+=ae*(H"u"?null:document;function l0(a,o,l){var d=wi;if(d&&typeof o=="string"&&o){var y=pr(o);y='link[rel="'+a+'"][href="'+y+'"]',typeof l=="string"&&(y+='[crossorigin="'+l+'"]'),i0.has(y)||(i0.add(y),a={rel:a,crossOrigin:l,href:o},d.querySelector(y)===null&&(o=d.createElement("link"),hn(o,"link",a),nn(o),d.head.appendChild(o)))}}function VR(a){Da.D(a),l0("dns-prefetch",a,null)}function $R(a,o){Da.C(a,o),l0("preconnect",a,o)}function KR(a,o,l){Da.L(a,o,l);var d=wi;if(d&&a&&o){var y='link[rel="preload"][as="'+pr(o)+'"]';o==="image"&&l&&l.imageSrcSet?(y+='[imagesrcset="'+pr(l.imageSrcSet)+'"]',typeof l.imageSizes=="string"&&(y+='[imagesizes="'+pr(l.imageSizes)+'"]')):y+='[href="'+pr(a)+'"]';var b=y;switch(o){case"style":b=ki(a);break;case"script":b=Si(a)}wr.has(b)||(a=m({rel:"preload",href:o==="image"&&l&&l.imageSrcSet?void 0:a,as:o},l),wr.set(b,a),d.querySelector(y)!==null||o==="style"&&d.querySelector(rc(b))||o==="script"&&d.querySelector(ac(b))||(o=d.createElement("link"),hn(o,"link",a),nn(o),d.head.appendChild(o)))}}function GR(a,o){Da.m(a,o);var l=wi;if(l&&a){var d=o&&typeof o.as=="string"?o.as:"script",y='link[rel="modulepreload"][as="'+pr(d)+'"][href="'+pr(a)+'"]',b=y;switch(d){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":b=Si(a)}if(!wr.has(b)&&(a=m({rel:"modulepreload",href:a},o),wr.set(b,a),l.querySelector(y)===null)){switch(d){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(l.querySelector(ac(b)))return}d=l.createElement("link"),hn(d,"link",a),nn(d),l.head.appendChild(d)}}}function WR(a,o,l){Da.S(a,o,l);var d=wi;if(d&&a){var y=Vs(d).hoistableStyles,b=ki(a);o=o||"default";var S=y.get(b);if(!S){var D={loading:0,preload:null};if(S=d.querySelector(rc(b)))D.loading=5;else{a=m({rel:"stylesheet",href:a,"data-precedence":o},l),(l=wr.get(b))&&Kh(a,l);var H=S=d.createElement("link");nn(H),hn(H,"link",a),H._p=new Promise(function(Y,ae){H.onload=Y,H.onerror=ae}),H.addEventListener("load",function(){D.loading|=1}),H.addEventListener("error",function(){D.loading|=2}),D.loading|=4,ld(S,o,d)}S={type:"stylesheet",instance:S,count:1,state:D},y.set(b,S)}}}function YR(a,o){Da.X(a,o);var l=wi;if(l&&a){var d=Vs(l).hoistableScripts,y=Si(a),b=d.get(y);b||(b=l.querySelector(ac(y)),b||(a=m({src:a,async:!0},o),(o=wr.get(y))&&Gh(a,o),b=l.createElement("script"),nn(b),hn(b,"link",a),l.head.appendChild(b)),b={type:"script",instance:b,count:1,state:null},d.set(y,b))}}function QR(a,o){Da.M(a,o);var l=wi;if(l&&a){var d=Vs(l).hoistableScripts,y=Si(a),b=d.get(y);b||(b=l.querySelector(ac(y)),b||(a=m({src:a,async:!0,type:"module"},o),(o=wr.get(y))&&Gh(a,o),b=l.createElement("script"),nn(b),hn(b,"link",a),l.head.appendChild(b)),b={type:"script",instance:b,count:1,state:null},d.set(y,b))}}function c0(a,o,l,d){var y=(y=ie.current)?id(y):null;if(!y)throw Error(r(446));switch(a){case"meta":case"title":return null;case"style":return typeof l.precedence=="string"&&typeof l.href=="string"?(o=ki(l.href),l=Vs(y).hoistableStyles,d=l.get(o),d||(d={type:"style",instance:null,count:0,state:null},l.set(o,d)),d):{type:"void",instance:null,count:0,state:null};case"link":if(l.rel==="stylesheet"&&typeof l.href=="string"&&typeof l.precedence=="string"){a=ki(l.href);var b=Vs(y).hoistableStyles,S=b.get(a);if(S||(y=y.ownerDocument||y,S={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},b.set(a,S),(b=y.querySelector(rc(a)))&&!b._p&&(S.instance=b,S.state.loading=5),wr.has(a)||(l={rel:"preload",as:"style",href:l.href,crossOrigin:l.crossOrigin,integrity:l.integrity,media:l.media,hrefLang:l.hrefLang,referrerPolicy:l.referrerPolicy},wr.set(a,l),b||XR(y,a,l,S.state))),o&&d===null)throw Error(r(528,""));return S}if(o&&d!==null)throw Error(r(529,""));return null;case"script":return o=l.async,l=l.src,typeof l=="string"&&o&&typeof o!="function"&&typeof o!="symbol"?(o=Si(l),l=Vs(y).hoistableScripts,d=l.get(o),d||(d={type:"script",instance:null,count:0,state:null},l.set(o,d)),d):{type:"void",instance:null,count:0,state:null};default:throw Error(r(444,a))}}function ki(a){return'href="'+pr(a)+'"'}function rc(a){return'link[rel="stylesheet"]['+a+"]"}function u0(a){return m({},a,{"data-precedence":a.precedence,precedence:null})}function XR(a,o,l,d){a.querySelector('link[rel="preload"][as="style"]['+o+"]")?d.loading=1:(o=a.createElement("link"),d.preload=o,o.addEventListener("load",function(){return d.loading|=1}),o.addEventListener("error",function(){return d.loading|=2}),hn(o,"link",l),nn(o),a.head.appendChild(o))}function Si(a){return'[src="'+pr(a)+'"]'}function ac(a){return"script[async]"+a}function d0(a,o,l){if(o.count++,o.instance===null)switch(o.type){case"style":var d=a.querySelector('style[data-href~="'+pr(l.href)+'"]');if(d)return o.instance=d,nn(d),d;var y=m({},l,{"data-href":l.href,"data-precedence":l.precedence,href:null,precedence:null});return d=(a.ownerDocument||a).createElement("style"),nn(d),hn(d,"style",y),ld(d,l.precedence,a),o.instance=d;case"stylesheet":y=ki(l.href);var b=a.querySelector(rc(y));if(b)return o.state.loading|=4,o.instance=b,nn(b),b;d=u0(l),(y=wr.get(y))&&Kh(d,y),b=(a.ownerDocument||a).createElement("link"),nn(b);var S=b;return S._p=new Promise(function(D,H){S.onload=D,S.onerror=H}),hn(b,"link",d),o.state.loading|=4,ld(b,l.precedence,a),o.instance=b;case"script":return b=Si(l.src),(y=a.querySelector(ac(b)))?(o.instance=y,nn(y),y):(d=l,(y=wr.get(b))&&(d=m({},l),Gh(d,y)),a=a.ownerDocument||a,y=a.createElement("script"),nn(y),hn(y,"link",d),a.head.appendChild(y),o.instance=y);case"void":return null;default:throw Error(r(443,o.type))}else o.type==="stylesheet"&&(o.state.loading&4)===0&&(d=o.instance,o.state.loading|=4,ld(d,l.precedence,a));return o.instance}function ld(a,o,l){for(var d=l.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),y=d.length?d[d.length-1]:null,b=y,S=0;S title"):null)}function JR(a,o,l){if(l===1||o.itemProp!=null)return!1;switch(a){case"meta":case"title":return!0;case"style":if(typeof o.precedence!="string"||typeof o.href!="string"||o.href==="")break;return!0;case"link":if(typeof o.rel!="string"||typeof o.href!="string"||o.href===""||o.onLoad||o.onError)break;switch(o.rel){case"stylesheet":return a=o.disabled,typeof o.precedence=="string"&&a==null;default:return!0}case"script":if(o.async&&typeof o.async!="function"&&typeof o.async!="symbol"&&!o.onLoad&&!o.onError&&o.src&&typeof o.src=="string")return!0}return!1}function h0(a){return!(a.type==="stylesheet"&&(a.state.loading&3)===0)}function ZR(a,o,l,d){if(l.type==="stylesheet"&&(typeof d.media!="string"||matchMedia(d.media).matches!==!1)&&(l.state.loading&4)===0){if(l.instance===null){var y=ki(d.href),b=o.querySelector(rc(y));if(b){o=b._p,o!==null&&typeof o=="object"&&typeof o.then=="function"&&(a.count++,a=ud.bind(a),o.then(a,a)),l.state.loading|=4,l.instance=b,nn(b);return}b=o.ownerDocument||o,d=u0(d),(y=wr.get(y))&&Kh(d,y),b=b.createElement("link"),nn(b);var S=b;S._p=new Promise(function(D,H){S.onload=D,S.onerror=H}),hn(b,"link",d),l.instance=b}a.stylesheets===null&&(a.stylesheets=new Map),a.stylesheets.set(l,o),(o=l.state.preload)&&(l.state.loading&3)===0&&(a.count++,l=ud.bind(a),o.addEventListener("load",l),o.addEventListener("error",l))}}var Wh=0;function e2(a,o){return a.stylesheets&&a.count===0&&fd(a,a.stylesheets),0Wh?50:800)+o);return a.unsuspend=l,function(){a.unsuspend=null,clearTimeout(d),clearTimeout(y)}}:null}function ud(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)fd(this,this.stylesheets);else if(this.unsuspend){var a=this.unsuspend;this.unsuspend=null,a()}}}var dd=null;function fd(a,o){a.stylesheets=null,a.unsuspend!==null&&(a.count++,dd=new Map,o.forEach(t2,a),dd=null,ud.call(a))}function t2(a,o){if(!(o.state.loading&4)){var l=dd.get(a);if(l)var d=l.get(null);else{l=new Map,dd.set(a,l);for(var y=a.querySelectorAll("link[data-precedence],style[data-precedence]"),b=0;b"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),am.exports=b2(),am.exports}var w2=x2();/** * react-router v7.18.2 * * Copyright (c) Remix Software Inc. @@ -56,572 +56,572 @@ Error generating stack: `+d.message+` * LICENSE.md file in the root directory of this source tree. * * @license MIT - */var gy=/^(?:[a-z][a-z0-9+.-]*:|[\\/]{2})/i,qS=/^[\\/]{2}/;function xR(e,t){return t+e.replace(/\\/g,"/")}var Iw="popstate";function Uw(e){return typeof e=="object"&&e!=null&&"pathname"in e&&"search"in e&&"hash"in e&&"state"in e&&"key"in e}function wR(e={}){function t(r,s){var p;let i=(p=s.state)==null?void 0:p.masked,{pathname:c,search:u,hash:f}=i||r.location;return Zm("",{pathname:c,search:u,hash:f},s.state&&s.state.usr||null,s.state&&s.state.key||"default",i?{pathname:r.location.pathname,search:r.location.search,hash:r.location.hash}:void 0)}function n(r,s){return typeof s=="string"?s:Rc(s)}return SR(t,n,null,e)}function Ot(e,t){if(e===!1||e===null||typeof e>"u")throw new Error(t)}function Er(e,t){if(!e){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function kR(){return Math.random().toString(36).substring(2,10)}function zw(e,t){return{usr:e.state,key:e.key,idx:t,masked:e.mask?{pathname:e.pathname,search:e.search,hash:e.hash}:void 0}}function Zm(e,t,n=null,r,s){return{pathname:typeof e=="string"?e:e.pathname,search:"",hash:"",...typeof t=="string"?dl(t):t,state:n,key:t&&t.key||r||kR(),mask:s}}function Rc({pathname:e="/",search:t="",hash:n=""}){return t&&t!=="?"&&(e+=t.charAt(0)==="?"?t:"?"+t),n&&n!=="#"&&(e+=n.charAt(0)==="#"?n:"#"+n),e}function dl(e){let t={};if(e){let n=e.indexOf("#");n>=0&&(t.hash=e.substring(n),e=e.substring(0,n));let r=e.indexOf("?");r>=0&&(t.search=e.substring(r),e=e.substring(0,r)),e&&(t.pathname=e)}return t}function SR(e,t,n,r={}){let{window:s=document.defaultView,v5Compat:i=!1}=r,c=s.history,u="POP",f=null,p=g();p==null&&(p=0,c.replaceState({...c.state,idx:p},""));function g(){return(c.state||{idx:null}).idx}function m(){u="POP";let T=g(),C=T==null?null:T-p;p=T,f&&f({action:u,location:E.location,delta:C})}function v(T,C){u="PUSH";let A=Uw(T)?T:Zm(E.location,T,C);p=g()+1;let O=zw(A,p),P=E.createHref(A.mask||A);try{c.pushState(O,"",P)}catch(_){if(_ instanceof DOMException&&_.name==="DataCloneError")throw _;s.location.assign(P)}i&&f&&f({action:u,location:E.location,delta:1})}function x(T,C){u="REPLACE";let A=Uw(T)?T:Zm(E.location,T,C);p=g();let O=zw(A,p),P=E.createHref(A.mask||A);c.replaceState(O,"",P),i&&f&&f({action:u,location:E.location,delta:0})}function w(T){return TR(s,T)}let E={get action(){return u},get location(){return e(s,c)},listen(T){if(f)throw new Error("A history only accepts one active listener");return s.addEventListener(Iw,m),f=T,()=>{s.removeEventListener(Iw,m),f=null}},createHref(T){return t(s,T)},createURL:w,encodeLocation(T){let C=w(T);return{pathname:C.pathname,search:C.search,hash:C.hash}},push:v,replace:x,go(T){return c.go(T)}};return E}function TR(e,t,n=!1){let r="http://localhost";e&&(r=e.location.origin!=="null"?e.location.origin:e.location.href),Ot(r,"No window.location.(origin|href) available to create URL");let s=typeof t=="string"?t:Rc(t);return s=s.replace(/ $/,"%20"),!n&&qS.test(s)&&(s=r+s),new URL(s,r)}function VS(e,t,n="/"){return ER(e,t,n,!1)}function ER(e,t,n,r,s){let i=typeof t=="string"?dl(t):t,c=qa(i.pathname||"/",n);if(c==null)return null;let u=CR(e),f=null,p=IR(c);for(let g=0;f==null&&g{let g={relativePath:p===void 0?c.path||"":p,caseSensitive:c.caseSensitive===!0,childrenIndex:u,route:c};if(g.relativePath.startsWith("/")){if(!g.relativePath.startsWith(r)&&f)return;Ot(g.relativePath.startsWith(r),`Absolute route path "${g.relativePath}" nested under path "${r}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),g.relativePath=g.relativePath.slice(r.length)}let m=Ir([r,g.relativePath]),v=n.concat(g);c.children&&c.children.length>0&&(Ot(c.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${m}".`),$S(c.children,t,v,m,f)),!(c.path==null&&!c.index)&&t.push({path:m,score:LR(m,c.index),routesMeta:v.map((x,w)=>{let[E,T]=WS(x.relativePath,x.caseSensitive,w===v.length-1);return{...x,matcher:E,compiledParams:T}})})};return e.forEach((c,u)=>{var f;if(c.path===""||!((f=c.path)!=null&&f.includes("?")))i(c,u);else for(let p of KS(c.path))i(c,u,!0,p)}),t}function KS(e){let t=e.split("/");if(t.length===0)return[];let[n,...r]=t,s=n.endsWith("?"),i=n.replace(/\?$/,"");if(r.length===0)return s?[i,""]:[i];let c=KS(r.join("/")),u=[];return u.push(...c.map(f=>f===""?i:[i,f].join("/"))),s&&u.push(...c),u.map(f=>e.startsWith("/")&&f===""?"/":f)}function AR(e){e.sort((t,n)=>t.score!==n.score?n.score-t.score:_R(t.routesMeta.map(r=>r.childrenIndex),n.routesMeta.map(r=>r.childrenIndex)))}var NR=/^:[\w-]+$/,DR=3,RR=2,OR=1,jR=10,MR=-2,Fw=e=>e==="*";function LR(e,t){let n=e.split("/"),r=n.length;return n.some(Fw)&&(r+=MR),t&&(r+=RR),n.filter(s=>!Fw(s)).reduce((s,i)=>s+(NR.test(i)?DR:i===""?OR:jR),r)}function _R(e,t){return e.length===t.length&&e.slice(0,-1).every((r,s)=>r===t[s])?e[e.length-1]-t[t.length-1]:0}function PR(e,t,n=!1){let{routesMeta:r}=e,s={},i="/",c=[];for(let u=0;u{if(g==="*"){let w=u[v]||"";c=i.slice(0,i.length-w.length).replace(/(.)\/+$/,"$1")}const x=u[v];return m&&!x?p[g]=void 0:p[g]=(x||"").replace(/%2F/g,"/"),p},{}),pathname:i,pathnameBase:c,pattern:e}}function WS(e,t=!1,n=!0){Er(e==="*"||!e.endsWith("*")||e.endsWith("/*"),`Route path "${e}" will be treated as if it were "${e.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${e.replace(/\*$/,"/*")}".`);let r=[],s="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(c,u,f,p,g)=>{if(r.push({paramName:u,isOptional:f!=null}),f){let m=g.charAt(p+c.length);return m&&m!=="/"?"/([^\\/]*)":"(?:/([^\\/]*))?"}return"/([^\\/]+)"}).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return e.endsWith("*")?(r.push({paramName:"*"}),s+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?s+="\\/*$":e!==""&&e!=="/"&&(s+="(?:(?=\\/|$))"),[new RegExp(s,t?void 0:"i"),r]}function IR(e){try{return e.split("/").map(t=>decodeURIComponent(t).replace(/\//g,"%2F")).join("/")}catch(t){return Er(!1,`The URL path "${e}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${t}).`),e}}function qa(e,t){if(t==="/")return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith("/")?t.length-1:t.length,r=e.charAt(n);return r&&r!=="/"?null:e.slice(n)||"/"}function UR(e,t="/"){let{pathname:n,search:r="",hash:s=""}=typeof e=="string"?dl(e):e,i;return n?(n=YS(n),n.startsWith("/")?i=Hw(n.substring(1),"/"):i=Hw(n,t)):i=t,{pathname:i,search:HR(r),hash:BR(s)}}function Hw(e,t){let n=Qd(t).split("/");return e.split("/").forEach(s=>{s===".."?n.length>1&&n.pop():s!=="."&&n.push(s)}),n.length>1?n.join("/"):"/"}function lm(e,t,n,r){return`Cannot include a '${e}' character in a manually specified \`to.${t}\` field [${JSON.stringify(r)}]. Please separate it out to the \`to.${n}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function zR(e){return e.filter((t,n)=>n===0||t.route.path&&t.route.path.length>0)}function yy(e){let t=zR(e);return t.map((n,r)=>r===t.length-1?n.pathname:n.pathnameBase)}function xf(e,t,n,r=!1){let s;typeof e=="string"?s=dl(e):(s={...e},Ot(!s.pathname||!s.pathname.includes("?"),lm("?","pathname","search",s)),Ot(!s.pathname||!s.pathname.includes("#"),lm("#","pathname","hash",s)),Ot(!s.search||!s.search.includes("#"),lm("#","search","hash",s)));let i=e===""||s.pathname==="",c=i?"/":s.pathname,u;if(c==null)u=n;else{let m=t.length-1;if(!r&&c.startsWith("..")){let v=c.split("/");for(;v[0]==="..";)v.shift(),m-=1;s.pathname=v.join("/")}u=m>=0?t[m]:"/"}let f=UR(s,u),p=c&&c!=="/"&&c.endsWith("/"),g=(i||c===".")&&n.endsWith("/");return!f.pathname.endsWith("/")&&(p||g)&&(f.pathname+="/"),f}var YS=e=>e.replace(/[\\/]{2,}/g,"/"),Ir=e=>YS(e.join("/")),Qd=e=>e.replace(/\/+$/,""),FR=e=>Qd(e).replace(/^\/*/,"/"),HR=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,BR=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e,qR=class{constructor(e,t,n,r=!1){this.status=e,this.statusText=t||"",this.internal=r,n instanceof Error?(this.data=n.toString(),this.error=n):this.data=n}};function VR(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}function $R(e){let t=e.map(n=>n.route.path).filter(Boolean);return Ir(t)||"/"}var QS=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function XS(e,t){let n=e;if(typeof n!="string"||!gy.test(n))return{absoluteURL:void 0,isExternal:!1,to:n};let r=n,s=!1;if(QS)try{let i=new URL(window.location.href),c=qS.test(n)?new URL(xR(n,i.protocol)):new URL(n),u=qa(c.pathname,t);c.origin===i.origin&&u!=null?n=u+c.search+c.hash:s=!0}catch{Er(!1,` contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:r,isExternal:s,to:n}}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var JS=["POST","PUT","PATCH","DELETE"];new Set(JS);var KR=["GET",...JS];new Set(KR);var GR=["about:","blob:","chrome:","chrome-untrusted:","content:","data:","devtools:","file:","filesystem:","javascript:"];function WR(e){try{return GR.includes(new URL(e).protocol)}catch{return!1}}var fl=k.createContext(null);fl.displayName="DataRouter";var wf=k.createContext(null);wf.displayName="DataRouterState";var ZS=k.createContext(!1);function YR(){return k.useContext(ZS)}var eT=k.createContext({isTransitioning:!1});eT.displayName="ViewTransition";var QR=k.createContext(new Map);QR.displayName="Fetchers";var XR=k.createContext(null);XR.displayName="Await";var dr=k.createContext(null);dr.displayName="Navigation";var Gc=k.createContext(null);Gc.displayName="Location";var Ar=k.createContext({outlet:null,matches:[],isDataRoute:!1});Ar.displayName="Route";var vy=k.createContext(null);vy.displayName="RouteError";var tT="REACT_ROUTER_ERROR",JR="REDIRECT",ZR="ROUTE_ERROR_RESPONSE";function eO(e){if(e.startsWith(`${tT}:${JR}:{`))try{let t=JSON.parse(e.slice(28));if(typeof t=="object"&&t&&typeof t.status=="number"&&typeof t.statusText=="string"&&typeof t.location=="string"&&typeof t.reloadDocument=="boolean"&&typeof t.replace=="boolean")return t}catch{}}function tO(e){if(e.startsWith(`${tT}:${ZR}:{`))try{let t=JSON.parse(e.slice(40));if(typeof t=="object"&&t&&typeof t.status=="number"&&typeof t.statusText=="string")return new qR(t.status,t.statusText,t.data)}catch{}}function nO(e,{relative:t}={}){Ot(pl(),"useHref() may be used only in the context of a component.");let{basename:n,navigator:r}=k.useContext(dr),{hash:s,pathname:i,search:c}=Wc(e,{relative:t}),u=i;return n!=="/"&&(u=i==="/"?n:Ir([n,i])),r.createHref({pathname:u,search:c,hash:s})}function pl(){return k.useContext(Gc)!=null}function Vt(){return Ot(pl(),"useLocation() may be used only in the context of a component."),k.useContext(Gc).location}var nT="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function rT(e){k.useContext(dr).static||k.useLayoutEffect(e)}function Hr(){let{isDataRoute:e}=k.useContext(Ar);return e?yO():rO()}function rO(){Ot(pl(),"useNavigate() may be used only in the context of a component.");let e=k.useContext(fl),{basename:t,navigator:n}=k.useContext(dr),{matches:r}=k.useContext(Ar),{pathname:s}=Vt(),i=JSON.stringify(yy(r)),c=k.useRef(!1);return rT(()=>{c.current=!0}),k.useCallback((f,p={})=>{if(Er(c.current,nT),!c.current)return;if(typeof f=="number"){n.go(f);return}let g=xf(f,JSON.parse(i),s,p.relative==="path");e==null&&t!=="/"&&(g.pathname=g.pathname==="/"?t:Ir([t,g.pathname])),(p.replace?n.replace:n.push)(g,p.state,p)},[t,n,i,s,e])}var aO=k.createContext(null);function oO(e){let t=k.useContext(Ar).outlet;return k.useMemo(()=>t&&k.createElement(aO.Provider,{value:e},t),[t,e])}function aT(){let{matches:e}=k.useContext(Ar),t=e[e.length-1];return(t==null?void 0:t.params)??{}}function Wc(e,{relative:t}={}){let{matches:n}=k.useContext(Ar),{pathname:r}=Vt(),s=JSON.stringify(yy(n));return k.useMemo(()=>xf(e,JSON.parse(s),r,t==="path"),[e,s,r,t])}function sO(e,t){return oT(e,t)}function oT(e,t,n){var T;Ot(pl(),"useRoutes() may be used only in the context of a component.");let{navigator:r}=k.useContext(dr),{matches:s}=k.useContext(Ar),i=s[s.length-1],c=i?i.params:{},u=i?i.pathname:"/",f=i?i.pathnameBase:"/",p=i&&i.route;{let C=p&&p.path||"";iT(u,!p||C.endsWith("*")||C.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${u}" (under ) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render. + */var yy=/^(?:[a-z][a-z0-9+.-]*:|[\\/]{2})/i,$S=/^[\\/]{2}/;function k2(e,t){return t+e.replace(/\\/g,"/")}var z0="popstate";function F0(e){return typeof e=="object"&&e!=null&&"pathname"in e&&"search"in e&&"hash"in e&&"state"in e&&"key"in e}function S2(e={}){function t(r,s){var p;let i=(p=s.state)==null?void 0:p.masked,{pathname:c,search:u,hash:f}=i||r.location;return Zm("",{pathname:c,search:u,hash:f},s.state&&s.state.usr||null,s.state&&s.state.key||"default",i?{pathname:r.location.pathname,search:r.location.search,hash:r.location.hash}:void 0)}function n(r,s){return typeof s=="string"?s:Rc(s)}return E2(t,n,null,e)}function jt(e,t){if(e===!1||e===null||typeof e>"u")throw new Error(t)}function Er(e,t){if(!e){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function T2(){return Math.random().toString(36).substring(2,10)}function H0(e,t){return{usr:e.state,key:e.key,idx:t,masked:e.mask?{pathname:e.pathname,search:e.search,hash:e.hash}:void 0}}function Zm(e,t,n=null,r,s){return{pathname:typeof e=="string"?e:e.pathname,search:"",hash:"",...typeof t=="string"?dl(t):t,state:n,key:t&&t.key||r||T2(),mask:s}}function Rc({pathname:e="/",search:t="",hash:n=""}){return t&&t!=="?"&&(e+=t.charAt(0)==="?"?t:"?"+t),n&&n!=="#"&&(e+=n.charAt(0)==="#"?n:"#"+n),e}function dl(e){let t={};if(e){let n=e.indexOf("#");n>=0&&(t.hash=e.substring(n),e=e.substring(0,n));let r=e.indexOf("?");r>=0&&(t.search=e.substring(r),e=e.substring(0,r)),e&&(t.pathname=e)}return t}function E2(e,t,n,r={}){let{window:s=document.defaultView,v5Compat:i=!1}=r,c=s.history,u="POP",f=null,p=g();p==null&&(p=0,c.replaceState({...c.state,idx:p},""));function g(){return(c.state||{idx:null}).idx}function m(){u="POP";let T=g(),C=T==null?null:T-p;p=T,f&&f({action:u,location:E.location,delta:C})}function v(T,C){u="PUSH";let A=F0(T)?T:Zm(E.location,T,C);p=g()+1;let O=H0(A,p),P=E.createHref(A.mask||A);try{c.pushState(O,"",P)}catch(_){if(_ instanceof DOMException&&_.name==="DataCloneError")throw _;s.location.assign(P)}i&&f&&f({action:u,location:E.location,delta:1})}function x(T,C){u="REPLACE";let A=F0(T)?T:Zm(E.location,T,C);p=g();let O=H0(A,p),P=E.createHref(A.mask||A);c.replaceState(O,"",P),i&&f&&f({action:u,location:E.location,delta:0})}function w(T){return C2(s,T)}let E={get action(){return u},get location(){return e(s,c)},listen(T){if(f)throw new Error("A history only accepts one active listener");return s.addEventListener(z0,m),f=T,()=>{s.removeEventListener(z0,m),f=null}},createHref(T){return t(s,T)},createURL:w,encodeLocation(T){let C=w(T);return{pathname:C.pathname,search:C.search,hash:C.hash}},push:v,replace:x,go(T){return c.go(T)}};return E}function C2(e,t,n=!1){let r="http://localhost";e&&(r=e.location.origin!=="null"?e.location.origin:e.location.href),jt(r,"No window.location.(origin|href) available to create URL");let s=typeof t=="string"?t:Rc(t);return s=s.replace(/ $/,"%20"),!n&&$S.test(s)&&(s=r+s),new URL(s,r)}function KS(e,t,n="/"){return A2(e,t,n,!1)}function A2(e,t,n,r,s){let i=typeof t=="string"?dl(t):t,c=qa(i.pathname||"/",n);if(c==null)return null;let u=N2(e),f=null,p=z2(c);for(let g=0;f==null&&g{let g={relativePath:p===void 0?c.path||"":p,caseSensitive:c.caseSensitive===!0,childrenIndex:u,route:c};if(g.relativePath.startsWith("/")){if(!g.relativePath.startsWith(r)&&f)return;jt(g.relativePath.startsWith(r),`Absolute route path "${g.relativePath}" nested under path "${r}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),g.relativePath=g.relativePath.slice(r.length)}let m=Ir([r,g.relativePath]),v=n.concat(g);c.children&&c.children.length>0&&(jt(c.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${m}".`),GS(c.children,t,v,m,f)),!(c.path==null&&!c.index)&&t.push({path:m,score:P2(m,c.index),routesMeta:v.map((x,w)=>{let[E,T]=QS(x.relativePath,x.caseSensitive,w===v.length-1);return{...x,matcher:E,compiledParams:T}})})};return e.forEach((c,u)=>{var f;if(c.path===""||!((f=c.path)!=null&&f.includes("?")))i(c,u);else for(let p of WS(c.path))i(c,u,!0,p)}),t}function WS(e){let t=e.split("/");if(t.length===0)return[];let[n,...r]=t,s=n.endsWith("?"),i=n.replace(/\?$/,"");if(r.length===0)return s?[i,""]:[i];let c=WS(r.join("/")),u=[];return u.push(...c.map(f=>f===""?i:[i,f].join("/"))),s&&u.push(...c),u.map(f=>e.startsWith("/")&&f===""?"/":f)}function D2(e){e.sort((t,n)=>t.score!==n.score?n.score-t.score:I2(t.routesMeta.map(r=>r.childrenIndex),n.routesMeta.map(r=>r.childrenIndex)))}var R2=/^:[\w-]+$/,O2=3,j2=2,M2=1,L2=10,_2=-2,B0=e=>e==="*";function P2(e,t){let n=e.split("/"),r=n.length;return n.some(B0)&&(r+=_2),t&&(r+=j2),n.filter(s=>!B0(s)).reduce((s,i)=>s+(R2.test(i)?O2:i===""?M2:L2),r)}function I2(e,t){return e.length===t.length&&e.slice(0,-1).every((r,s)=>r===t[s])?e[e.length-1]-t[t.length-1]:0}function U2(e,t,n=!1){let{routesMeta:r}=e,s={},i="/",c=[];for(let u=0;u{if(g==="*"){let w=u[v]||"";c=i.slice(0,i.length-w.length).replace(/(.)\/+$/,"$1")}const x=u[v];return m&&!x?p[g]=void 0:p[g]=(x||"").replace(/%2F/g,"/"),p},{}),pathname:i,pathnameBase:c,pattern:e}}function QS(e,t=!1,n=!0){Er(e==="*"||!e.endsWith("*")||e.endsWith("/*"),`Route path "${e}" will be treated as if it were "${e.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${e.replace(/\*$/,"/*")}".`);let r=[],s="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(c,u,f,p,g)=>{if(r.push({paramName:u,isOptional:f!=null}),f){let m=g.charAt(p+c.length);return m&&m!=="/"?"/([^\\/]*)":"(?:/([^\\/]*))?"}return"/([^\\/]+)"}).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return e.endsWith("*")?(r.push({paramName:"*"}),s+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?s+="\\/*$":e!==""&&e!=="/"&&(s+="(?:(?=\\/|$))"),[new RegExp(s,t?void 0:"i"),r]}function z2(e){try{return e.split("/").map(t=>decodeURIComponent(t).replace(/\//g,"%2F")).join("/")}catch(t){return Er(!1,`The URL path "${e}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${t}).`),e}}function qa(e,t){if(t==="/")return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith("/")?t.length-1:t.length,r=e.charAt(n);return r&&r!=="/"?null:e.slice(n)||"/"}function F2(e,t="/"){let{pathname:n,search:r="",hash:s=""}=typeof e=="string"?dl(e):e,i;return n?(n=XS(n),n.startsWith("/")?i=q0(n.substring(1),"/"):i=q0(n,t)):i=t,{pathname:i,search:q2(r),hash:V2(s)}}function q0(e,t){let n=Qd(t).split("/");return e.split("/").forEach(s=>{s===".."?n.length>1&&n.pop():s!=="."&&n.push(s)}),n.length>1?n.join("/"):"/"}function lm(e,t,n,r){return`Cannot include a '${e}' character in a manually specified \`to.${t}\` field [${JSON.stringify(r)}]. Please separate it out to the \`to.${n}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function H2(e){return e.filter((t,n)=>n===0||t.route.path&&t.route.path.length>0)}function vy(e){let t=H2(e);return t.map((n,r)=>r===t.length-1?n.pathname:n.pathnameBase)}function xf(e,t,n,r=!1){let s;typeof e=="string"?s=dl(e):(s={...e},jt(!s.pathname||!s.pathname.includes("?"),lm("?","pathname","search",s)),jt(!s.pathname||!s.pathname.includes("#"),lm("#","pathname","hash",s)),jt(!s.search||!s.search.includes("#"),lm("#","search","hash",s)));let i=e===""||s.pathname==="",c=i?"/":s.pathname,u;if(c==null)u=n;else{let m=t.length-1;if(!r&&c.startsWith("..")){let v=c.split("/");for(;v[0]==="..";)v.shift(),m-=1;s.pathname=v.join("/")}u=m>=0?t[m]:"/"}let f=F2(s,u),p=c&&c!=="/"&&c.endsWith("/"),g=(i||c===".")&&n.endsWith("/");return!f.pathname.endsWith("/")&&(p||g)&&(f.pathname+="/"),f}var XS=e=>e.replace(/[\\/]{2,}/g,"/"),Ir=e=>XS(e.join("/")),Qd=e=>e.replace(/\/+$/,""),B2=e=>Qd(e).replace(/^\/*/,"/"),q2=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,V2=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e,$2=class{constructor(e,t,n,r=!1){this.status=e,this.statusText=t||"",this.internal=r,n instanceof Error?(this.data=n.toString(),this.error=n):this.data=n}};function K2(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}function G2(e){let t=e.map(n=>n.route.path).filter(Boolean);return Ir(t)||"/"}var JS=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function ZS(e,t){let n=e;if(typeof n!="string"||!yy.test(n))return{absoluteURL:void 0,isExternal:!1,to:n};let r=n,s=!1;if(JS)try{let i=new URL(window.location.href),c=$S.test(n)?new URL(k2(n,i.protocol)):new URL(n),u=qa(c.pathname,t);c.origin===i.origin&&u!=null?n=u+c.search+c.hash:s=!0}catch{Er(!1,` contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:r,isExternal:s,to:n}}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var eT=["POST","PUT","PATCH","DELETE"];new Set(eT);var W2=["GET",...eT];new Set(W2);var Y2=["about:","blob:","chrome:","chrome-untrusted:","content:","data:","devtools:","file:","filesystem:","javascript:"];function Q2(e){try{return Y2.includes(new URL(e).protocol)}catch{return!1}}var fl=k.createContext(null);fl.displayName="DataRouter";var wf=k.createContext(null);wf.displayName="DataRouterState";var tT=k.createContext(!1);function X2(){return k.useContext(tT)}var nT=k.createContext({isTransitioning:!1});nT.displayName="ViewTransition";var J2=k.createContext(new Map);J2.displayName="Fetchers";var Z2=k.createContext(null);Z2.displayName="Await";var dr=k.createContext(null);dr.displayName="Navigation";var Gc=k.createContext(null);Gc.displayName="Location";var Ar=k.createContext({outlet:null,matches:[],isDataRoute:!1});Ar.displayName="Route";var by=k.createContext(null);by.displayName="RouteError";var rT="REACT_ROUTER_ERROR",eO="REDIRECT",tO="ROUTE_ERROR_RESPONSE";function nO(e){if(e.startsWith(`${rT}:${eO}:{`))try{let t=JSON.parse(e.slice(28));if(typeof t=="object"&&t&&typeof t.status=="number"&&typeof t.statusText=="string"&&typeof t.location=="string"&&typeof t.reloadDocument=="boolean"&&typeof t.replace=="boolean")return t}catch{}}function rO(e){if(e.startsWith(`${rT}:${tO}:{`))try{let t=JSON.parse(e.slice(40));if(typeof t=="object"&&t&&typeof t.status=="number"&&typeof t.statusText=="string")return new $2(t.status,t.statusText,t.data)}catch{}}function aO(e,{relative:t}={}){jt(pl(),"useHref() may be used only in the context of a component.");let{basename:n,navigator:r}=k.useContext(dr),{hash:s,pathname:i,search:c}=Wc(e,{relative:t}),u=i;return n!=="/"&&(u=i==="/"?n:Ir([n,i])),r.createHref({pathname:u,search:c,hash:s})}function pl(){return k.useContext(Gc)!=null}function qt(){return jt(pl(),"useLocation() may be used only in the context of a component."),k.useContext(Gc).location}var aT="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function oT(e){k.useContext(dr).static||k.useLayoutEffect(e)}function Hr(){let{isDataRoute:e}=k.useContext(Ar);return e?bO():oO()}function oO(){jt(pl(),"useNavigate() may be used only in the context of a component.");let e=k.useContext(fl),{basename:t,navigator:n}=k.useContext(dr),{matches:r}=k.useContext(Ar),{pathname:s}=qt(),i=JSON.stringify(vy(r)),c=k.useRef(!1);return oT(()=>{c.current=!0}),k.useCallback((f,p={})=>{if(Er(c.current,aT),!c.current)return;if(typeof f=="number"){n.go(f);return}let g=xf(f,JSON.parse(i),s,p.relative==="path");e==null&&t!=="/"&&(g.pathname=g.pathname==="/"?t:Ir([t,g.pathname])),(p.replace?n.replace:n.push)(g,p.state,p)},[t,n,i,s,e])}var sO=k.createContext(null);function iO(e){let t=k.useContext(Ar).outlet;return k.useMemo(()=>t&&k.createElement(sO.Provider,{value:e},t),[t,e])}function sT(){let{matches:e}=k.useContext(Ar),t=e[e.length-1];return(t==null?void 0:t.params)??{}}function Wc(e,{relative:t}={}){let{matches:n}=k.useContext(Ar),{pathname:r}=qt(),s=JSON.stringify(vy(n));return k.useMemo(()=>xf(e,JSON.parse(s),r,t==="path"),[e,s,r,t])}function lO(e,t){return iT(e,t)}function iT(e,t,n){var T;jt(pl(),"useRoutes() may be used only in the context of a component.");let{navigator:r}=k.useContext(dr),{matches:s}=k.useContext(Ar),i=s[s.length-1],c=i?i.params:{},u=i?i.pathname:"/",f=i?i.pathnameBase:"/",p=i&&i.route;{let C=p&&p.path||"";cT(u,!p||C.endsWith("*")||C.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${u}" (under ) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render. -Please change the parent to .`)}let g=Vt(),m;if(t){let C=typeof t=="string"?dl(t):t;Ot(f==="/"||((T=C.pathname)==null?void 0:T.startsWith(f)),`When overriding the location using \`\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${f}" but pathname "${C.pathname}" was given in the \`location\` prop.`),m=C}else m=g;let v=m.pathname||"/",x=v;if(f!=="/"){let C=f.replace(/^\//,"").split("/");x="/"+v.replace(/^\//,"").split("/").slice(C.length).join("/")}let w=n&&n.state.matches.length?n.state.matches.map(C=>Object.assign(C,{route:n.manifest[C.route.id]||C.route})):VS(e,{pathname:x});Er(p||w!=null,`No routes matched location "${m.pathname}${m.search}${m.hash}" `),Er(w==null||w[w.length-1].route.element!==void 0||w[w.length-1].route.Component!==void 0||w[w.length-1].route.lazy!==void 0,`Matched leaf route at location "${m.pathname}${m.search}${m.hash}" does not have an element or Component. This means it will render an with a null value by default resulting in an "empty" page.`);let E=dO(w&&w.map(C=>Object.assign({},C,{params:Object.assign({},c,C.params),pathname:Ir([f,r.encodeLocation?r.encodeLocation(C.pathname.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:C.pathname]),pathnameBase:C.pathnameBase==="/"?f:Ir([f,r.encodeLocation?r.encodeLocation(C.pathnameBase.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:C.pathnameBase])})),s,n);return t&&E?k.createElement(Gc.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",mask:void 0,...m},navigationType:"POP"}},E):E}function iO(){let e=gO(),t=VR(e)?`${e.status} ${e.statusText}`:e instanceof Error?e.message:JSON.stringify(e),n=e instanceof Error?e.stack:null,r="rgba(200,200,200, 0.5)",s={padding:"0.5rem",backgroundColor:r},i={padding:"2px 4px",backgroundColor:r},c=null;return console.error("Error handled by React Router default ErrorBoundary:",e),c=k.createElement(k.Fragment,null,k.createElement("p",null,"💿 Hey developer 👋"),k.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",k.createElement("code",{style:i},"ErrorBoundary")," or"," ",k.createElement("code",{style:i},"errorElement")," prop on your route.")),k.createElement(k.Fragment,null,k.createElement("h2",null,"Unexpected Application Error!"),k.createElement("h3",{style:{fontStyle:"italic"}},t),n?k.createElement("pre",{style:s},n):null,c)}var lO=k.createElement(iO,null),sT=class extends k.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,t){return t.location!==e.location||t.revalidation!=="idle"&&e.revalidation==="idle"?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:e.error!==void 0?e.error:t.error,location:t.location,revalidation:e.revalidation||t.revalidation}}componentDidCatch(e,t){this.props.onError?this.props.onError(e,t):console.error("React Router caught the following error during render",e)}render(){let e=this.state.error;if(this.context&&typeof e=="object"&&e&&"digest"in e&&typeof e.digest=="string"){const n=tO(e.digest);n&&(e=n)}let t=e!==void 0?k.createElement(Ar.Provider,{value:this.props.routeContext},k.createElement(vy.Provider,{value:e,children:this.props.component})):this.props.children;return this.context?k.createElement(cO,{error:e},t):t}};sT.contextType=ZS;var cm=new WeakMap;function cO({children:e,error:t}){let{basename:n}=k.useContext(dr);if(typeof t=="object"&&t&&"digest"in t&&typeof t.digest=="string"){let r=eO(t.digest);if(r){let s=cm.get(t);if(s)throw s;let i=XS(r.location,n),c=i.absoluteURL||i.to;if(WR(c))throw new Error("Invalid redirect location");if(QS&&!cm.get(t))if(i.isExternal||r.reloadDocument)window.location.href=c;else{const u=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(i.to,{replace:r.replace}));throw cm.set(t,u),u}return k.createElement("meta",{httpEquiv:"refresh",content:`0;url=${c}`})}}return e}function uO({routeContext:e,match:t,children:n}){let r=k.useContext(fl);return r&&r.static&&r.staticContext&&(t.route.errorElement||t.route.ErrorBoundary)&&(r.staticContext._deepestRenderedBoundaryId=t.route.id),k.createElement(Ar.Provider,{value:e},n)}function dO(e,t=[],n){let r=n==null?void 0:n.state;if(e==null){if(!r)return null;if(r.errors)e=r.matches;else if(t.length===0&&!r.initialized&&r.matches.length>0)e=r.matches;else return null}let s=e,i=r==null?void 0:r.errors;if(i!=null){let g=s.findIndex(m=>m.route.id&&(i==null?void 0:i[m.route.id])!==void 0);Ot(g>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(i).join(",")}`),s=s.slice(0,Math.min(s.length,g+1))}let c=!1,u=-1;if(n&&r){c=r.renderFallback;for(let g=0;g=0?s=s.slice(0,u+1):s=[s[0]];break}}}}let f=n==null?void 0:n.onError,p=r&&f?(g,m)=>{var v,x;f(g,{location:r.location,params:((x=(v=r.matches)==null?void 0:v[0])==null?void 0:x.params)??{},pattern:$R(r.matches),errorInfo:m})}:void 0;return s.reduceRight((g,m,v)=>{let x,w=!1,E=null,T=null;r&&(x=i&&m.route.id?i[m.route.id]:void 0,E=m.route.errorElement||lO,c&&(u<0&&v===0?(iT("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),w=!0,T=null):u===v&&(w=!0,T=m.route.hydrateFallbackElement||null)));let C=t.concat(s.slice(0,v+1)),A=()=>{let O;return x?O=E:w?O=T:m.route.Component?O=k.createElement(m.route.Component,null):m.route.element?O=m.route.element:O=g,k.createElement(uO,{match:m,routeContext:{outlet:g,matches:C,isDataRoute:r!=null},children:O})};return r&&(m.route.ErrorBoundary||m.route.errorElement||v===0)?k.createElement(sT,{location:r.location,revalidation:r.revalidation,component:E,error:x,children:A(),routeContext:{outlet:null,matches:C,isDataRoute:!0},onError:p}):A()},null)}function by(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function fO(e){let t=k.useContext(fl);return Ot(t,by(e)),t}function pO(e){let t=k.useContext(wf);return Ot(t,by(e)),t}function hO(e){let t=k.useContext(Ar);return Ot(t,by(e)),t}function xy(e){let t=hO(e),n=t.matches[t.matches.length-1];return Ot(n.route.id,`${e} can only be used on routes that contain a unique "id"`),n.route.id}function mO(){return xy("useRouteId")}function gO(){var r;let e=k.useContext(vy),t=pO("useRouteError"),n=xy("useRouteError");return e!==void 0?e:(r=t.errors)==null?void 0:r[n]}function yO(){let{router:e}=fO("useNavigate"),t=xy("useNavigate"),n=k.useRef(!1);return rT(()=>{n.current=!0}),k.useCallback(async(s,i={})=>{Er(n.current,nT),n.current&&(typeof s=="number"?await e.navigate(s):await e.navigate(s,{fromRouteId:t,...i}))},[e,t])}var Bw={};function iT(e,t,n){!t&&!Bw[e]&&(Bw[e]=!0,Er(!1,n))}k.memo(vO);function vO({routes:e,manifest:t,future:n,state:r,isStatic:s,onError:i}){return oT(e,void 0,{manifest:t,state:r,isStatic:s,onError:i})}function Eo({to:e,replace:t,state:n,relative:r}){Ot(pl()," may be used only in the context of a component.");let{static:s}=k.useContext(dr);Er(!s," must not be used on the initial render in a . This is a no-op, but you should modify your code so the is only ever rendered in response to some user interaction or state change.");let{matches:i}=k.useContext(Ar),{pathname:c}=Vt(),u=Hr(),f=xf(e,yy(i),c,r==="path"),p=JSON.stringify(f);return k.useEffect(()=>{u(JSON.parse(p),{replace:t,state:n,relative:r})},[u,p,r,t,n]),null}function bO(e){return oO(e.context)}function je(e){Ot(!1,"A is only ever to be used as the child of element, never rendered directly. Please wrap your in a .")}function xO({basename:e="/",children:t=null,location:n,navigationType:r="POP",navigator:s,static:i=!1,useTransitions:c}){Ot(!pl(),"You cannot render a inside another . You should never have more than one in your app.");let u=e.replace(/^\/*/,"/"),f=k.useMemo(()=>({basename:u,navigator:s,static:i,useTransitions:c,future:{}}),[u,s,i,c]);typeof n=="string"&&(n=dl(n));let{pathname:p="/",search:g="",hash:m="",state:v=null,key:x="default",mask:w}=n,E=k.useMemo(()=>{let T=qa(p,u);return T==null?null:{location:{pathname:T,search:g,hash:m,state:v,key:x,mask:w},navigationType:r}},[u,p,g,m,v,x,r,w]);return Er(E!=null,` is not able to match the URL "${p}${g}${m}" because it does not start with the basename, so the won't render anything.`),E==null?null:k.createElement(dr.Provider,{value:f},k.createElement(Gc.Provider,{children:t,value:E}))}function wO({children:e,location:t}){return sO(eg(e),t)}function eg(e,t=[]){let n=[];return k.Children.forEach(e,(r,s)=>{if(!k.isValidElement(r))return;let i=[...t,s];if(r.type===k.Fragment){n.push.apply(n,eg(r.props.children,i));return}Ot(r.type===je,`[${typeof r.type=="string"?r.type:r.type.name}] is not a component. All component children of must be a or `),Ot(!r.props.index||!r.props.children,"An index route cannot have child routes.");let c={id:r.props.id||i.join("-"),caseSensitive:r.props.caseSensitive,element:r.props.element,Component:r.props.Component,index:r.props.index,path:r.props.path,middleware:r.props.middleware,loader:r.props.loader,action:r.props.action,hydrateFallbackElement:r.props.hydrateFallbackElement,HydrateFallback:r.props.HydrateFallback,errorElement:r.props.errorElement,ErrorBoundary:r.props.ErrorBoundary,hasErrorBoundary:r.props.hasErrorBoundary===!0||r.props.ErrorBoundary!=null||r.props.errorElement!=null,shouldRevalidate:r.props.shouldRevalidate,handle:r.props.handle,lazy:r.props.lazy};r.props.children&&(c.children=eg(r.props.children,i)),n.push(c)}),n}var Fd="get",Hd="application/x-www-form-urlencoded";function kf(e){return typeof HTMLElement<"u"&&e instanceof HTMLElement}function kO(e){return kf(e)&&e.tagName.toLowerCase()==="button"}function SO(e){return kf(e)&&e.tagName.toLowerCase()==="form"}function TO(e){return kf(e)&&e.tagName.toLowerCase()==="input"}function EO(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function CO(e,t){return e.button===0&&(!t||t==="_self")&&!EO(e)}function tg(e=""){return new URLSearchParams(typeof e=="string"||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce((t,n)=>{let r=e[n];return t.concat(Array.isArray(r)?r.map(s=>[n,s]):[[n,r]])},[]))}function AO(e,t){let n=tg(e);return t&&t.forEach((r,s)=>{n.has(s)||t.getAll(s).forEach(i=>{n.append(s,i)})}),n}var wd=null;function NO(){if(wd===null)try{new FormData(document.createElement("form"),0),wd=!1}catch{wd=!0}return wd}var DO=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function um(e){return e!=null&&!DO.has(e)?(Er(!1,`"${e}" is not a valid \`encType\` for \`
\`/\`\` and will default to "${Hd}"`),null):e}function RO(e,t){let n,r,s,i,c;if(SO(e)){let u=e.getAttribute("action");r=u?qa(u,t):null,n=e.getAttribute("method")||Fd,s=um(e.getAttribute("enctype"))||Hd,i=new FormData(e)}else if(kO(e)||TO(e)&&(e.type==="submit"||e.type==="image")){let u=e.form;if(u==null)throw new Error('Cannot submit a