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.0ai.labseddi
- 6.2.0
+ 6.3.03.15.025
@@ -16,7 +16,7 @@
3.0.0.Finalquarkus-bomio.quarkus.platform
- 3.38.2
+ 3.38.31.19.0-beta291.19.01.19.0
@@ -27,7 +27,7 @@
false3.4.01.13.1
- 1.18.0-beta28
+ 1.19.0-beta29true
@@ -42,13 +42,13 @@
io.github.classgraphclassgraph
- 4.8.184
+ 4.8.192com.hubspot.jinjavajinjava
- 2.8.3
+ 2.8.4
@@ -91,7 +91,7 @@
org.bouncycastlebcprov-lts8on
- 2.73.12
+ 2.73.12.1
@@ -323,7 +323,7 @@
io.swagger.core.v3swagger-annotations
- 2.2.52
+ 2.2.54de.undercouch
@@ -470,7 +470,7 @@
io.natsjnats
- 2.26.0
+ 2.26.2
@@ -491,7 +491,7 @@
io.swagger.parser.v3swagger-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);v